1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83#include <linux/module.h>
84#include <linux/types.h>
85#include <linux/errno.h>
86#include <linux/list.h>
87#include <linux/ioport.h>
88#include <linux/pci.h>
89#include <linux/kernel.h>
90#include <linux/mm.h>
91
92#include <asm/system.h>
93#include <asm/cache.h>
94#include <asm/byteorder.h>
95#include <asm/uaccess.h>
96#include <asm/io.h>
97#include <asm/irq.h>
98
99#include <linux/init.h>
100#include <linux/string.h>
101
102#include <linux/if_arp.h>
103#include <linux/netdevice.h>
104#include <linux/skbuff.h>
105#include <linux/delay.h>
106#include <net/syncppp.h>
107#include <linux/hdlc.h>
108
109
110static const char version[] = "$Id: dscc4.c,v 1.173 2003/09/20 23:55:34 romieu Exp $ for Linux\n";
111static int debug;
112static int quartz;
113
114#ifdef CONFIG_DSCC4_PCI_RST
115static DECLARE_MUTEX(dscc4_sem);
116static u32 dscc4_pci_config_store[16];
117#endif
118
119#define DRV_NAME "dscc4"
120
121#undef DSCC4_POLLING
122
123
124
125MODULE_AUTHOR("Maintainer: Francois Romieu <romieu@cogenit.fr>");
126MODULE_DESCRIPTION("Siemens PEB20534 PCI Controler");
127MODULE_LICENSE("GPL");
128MODULE_PARM(debug,"i");
129MODULE_PARM_DESC(debug,"Enable/disable extra messages");
130MODULE_PARM(quartz,"i");
131MODULE_PARM_DESC(quartz,"If present, on-board quartz frequency (Hz)");
132
133
134
135struct thingie {
136 int define;
137 u32 bits;
138};
139
140struct TxFD {
141 u32 state;
142 u32 next;
143 u32 data;
144 u32 complete;
145 u32 jiffies;
146};
147
148struct RxFD {
149 u32 state1;
150 u32 next;
151 u32 data;
152 u32 state2;
153 u32 end;
154};
155
156#define DUMMY_SKB_SIZE 64
157#define TX_LOW 8
158#define TX_RING_SIZE 32
159#define RX_RING_SIZE 32
160#define TX_TOTAL_SIZE TX_RING_SIZE*sizeof(struct TxFD)
161#define RX_TOTAL_SIZE RX_RING_SIZE*sizeof(struct RxFD)
162#define IRQ_RING_SIZE 64
163#define TX_TIMEOUT (HZ/10)
164#define DSCC4_HZ_MAX 33000000
165#define BRR_DIVIDER_MAX 64*0x00004000
166#define dev_per_card 4
167#define SCC_REGISTERS_MAX 23
168
169#define SOURCE_ID(flags) (((flags) >> 28) & 0x03)
170#define TO_SIZE(state) (((state) >> 16) & 0x1fff)
171
172
173
174
175
176
177#define TO_STATE_TX(len) cpu_to_le32(((len) & TxSizeMax) << 16)
178#define TO_STATE_RX(len) cpu_to_le32((RX_MAX(len) % RxSizeMax) << 16)
179#define RX_MAX(len) ((((len) >> 5) + 1) << 5)
180#define SCC_REG_START(dpriv) (SCC_START+(dpriv->dev_id)*SCC_OFFSET)
181
182struct dscc4_pci_priv {
183 u32 *iqcfg;
184 int cfg_cur;
185 spinlock_t lock;
186 struct pci_dev *pdev;
187
188 struct dscc4_dev_priv *root;
189 dma_addr_t iqcfg_dma;
190 u32 xtal_hz;
191};
192
193struct dscc4_dev_priv {
194 struct sk_buff *rx_skbuff[RX_RING_SIZE];
195 struct sk_buff *tx_skbuff[TX_RING_SIZE];
196
197 struct RxFD *rx_fd;
198 struct TxFD *tx_fd;
199 u32 *iqrx;
200 u32 *iqtx;
201
202
203 volatile u32 tx_current;
204 u32 rx_current;
205 u32 iqtx_current;
206 u32 iqrx_current;
207
208 volatile u32 tx_dirty;
209 volatile u32 ltda;
210 u32 rx_dirty;
211 u32 lrda;
212
213 dma_addr_t tx_fd_dma;
214 dma_addr_t rx_fd_dma;
215 dma_addr_t iqtx_dma;
216 dma_addr_t iqrx_dma;
217
218 u32 scc_regs[SCC_REGISTERS_MAX];
219
220 struct timer_list timer;
221
222 struct dscc4_pci_priv *pci_priv;
223 spinlock_t lock;
224
225 int dev_id;
226 volatile u32 flags;
227 u32 timer_help;
228
229 unsigned short encoding;
230 unsigned short parity;
231 hdlc_device hdlc;
232 sync_serial_settings settings;
233 u32 __pad __attribute__ ((aligned (4)));
234};
235
236
237#define GCMDR 0x00
238#define GSTAR 0x04
239#define GMODE 0x08
240#define IQLENR0 0x0C
241#define IQLENR1 0x10
242#define IQRX0 0x14
243#define IQTX0 0x24
244#define IQCFG 0x3c
245#define FIFOCR1 0x44
246#define FIFOCR2 0x48
247#define FIFOCR3 0x4c
248#define FIFOCR4 0x34
249#define CH0CFG 0x50
250#define CH0BRDA 0x54
251#define CH0BTDA 0x58
252#define CH0FRDA 0x98
253#define CH0FTDA 0xb0
254#define CH0LRDA 0xc8
255#define CH0LTDA 0xe0
256
257
258#define SCC_START 0x0100
259#define SCC_OFFSET 0x80
260#define CMDR 0x00
261#define STAR 0x04
262#define CCR0 0x08
263#define CCR1 0x0c
264#define CCR2 0x10
265#define BRR 0x2C
266#define RLCR 0x40
267#define IMR 0x54
268#define ISR 0x58
269
270#define GPDIR 0x0400
271#define GPDATA 0x0404
272#define GPIM 0x0408
273
274
275#define EncodingMask 0x00700000
276#define CrcMask 0x00000003
277
278#define IntRxScc0 0x10000000
279#define IntTxScc0 0x01000000
280
281#define TxPollCmd 0x00000400
282#define RxActivate 0x08000000
283#define MTFi 0x04000000
284#define Rdr 0x00400000
285#define Rdt 0x00200000
286#define Idr 0x00100000
287#define Idt 0x00080000
288#define TxSccRes 0x01000000
289#define RxSccRes 0x00010000
290#define TxSizeMax 0x1fff
291#define RxSizeMax 0x1ffc
292
293#define Ccr0ClockMask 0x0000003f
294#define Ccr1LoopMask 0x00000200
295#define IsrMask 0x000fffff
296#define BrrExpMask 0x00000f00
297#define BrrMultMask 0x0000003f
298#define EncodingMask 0x00700000
299#define Hold 0x40000000
300#define SccBusy 0x10000000
301#define PowerUp 0x80000000
302#define Vis 0x00001000
303#define FrameOk (FrameVfr | FrameCrc)
304#define FrameVfr 0x80
305#define FrameRdo 0x40
306#define FrameCrc 0x20
307#define FrameRab 0x10
308#define FrameAborted 0x00000200
309#define FrameEnd 0x80000000
310#define DataComplete 0x40000000
311#define LengthCheck 0x00008000
312#define SccEvt 0x02000000
313#define NoAck 0x00000200
314#define Action 0x00000001
315#define HiDesc 0x20000000
316
317
318#define RxEvt 0xf0000000
319#define TxEvt 0x0f000000
320#define Alls 0x00040000
321#define Xdu 0x00010000
322#define Cts 0x00004000
323#define Xmr 0x00002000
324#define Xpr 0x00001000
325#define Rdo 0x00000080
326#define Rfs 0x00000040
327#define Cd 0x00000004
328#define Rfo 0x00000002
329#define Flex 0x00000001
330
331
332#define Cfg 0x00200000
333#define Hi 0x00040000
334#define Fi 0x00020000
335#define Err 0x00010000
336#define Arf 0x00000002
337#define ArAck 0x00000001
338
339
340#define Ready 0x00000000
341#define NeedIDR 0x00000001
342#define NeedIDT 0x00000002
343#define RdoSet 0x00000004
344#define FakeReset 0x00000008
345
346
347#ifdef DSCC4_POLLING
348#define EventsMask 0xfffeef7f
349#else
350#define EventsMask 0xfffa8f7a
351#endif
352
353
354static void dscc4_rx_irq(struct dscc4_pci_priv *, struct dscc4_dev_priv *);
355static void dscc4_tx_irq(struct dscc4_pci_priv *, struct dscc4_dev_priv *);
356static int dscc4_found1(struct pci_dev *, unsigned long ioaddr);
357static int dscc4_init_one(struct pci_dev *, const struct pci_device_id *ent);
358static int dscc4_open(struct net_device *);
359static int dscc4_start_xmit(struct sk_buff *, struct net_device *);
360static int dscc4_close(struct net_device *);
361static int dscc4_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
362static int dscc4_init_ring(struct net_device *);
363static void dscc4_release_ring(struct dscc4_dev_priv *);
364static void dscc4_timer(unsigned long);
365static void dscc4_tx_timeout(struct net_device *);
366static void dscc4_irq(int irq, void *dev_id, struct pt_regs *ptregs);
367static int dscc4_hdlc_attach(hdlc_device *, unsigned short, unsigned short);
368static int dscc4_set_iface(struct dscc4_dev_priv *, struct net_device *);
369#ifdef DSCC4_POLLING
370static int dscc4_tx_poll(struct dscc4_dev_priv *, struct net_device *);
371#endif
372
373static inline struct dscc4_dev_priv *dscc4_priv(struct net_device *dev)
374{
375 return list_entry(dev, struct dscc4_dev_priv, hdlc.netdev);
376}
377
378static void scc_patchl(u32 mask, u32 value, struct dscc4_dev_priv *dpriv,
379 struct net_device *dev, int offset)
380{
381 u32 state;
382
383
384 state = dpriv->scc_regs[offset >> 2];
385 state &= ~mask;
386 state |= value;
387 dpriv->scc_regs[offset >> 2] = state;
388 writel(state, dev->base_addr + SCC_REG_START(dpriv) + offset);
389}
390
391static void scc_writel(u32 bits, struct dscc4_dev_priv *dpriv,
392 struct net_device *dev, int offset)
393{
394
395
396
397
398 dpriv->scc_regs[offset >> 2] = bits;
399 writel(bits, dev->base_addr + SCC_REG_START(dpriv) + offset);
400}
401
402static inline u32 scc_readl(struct dscc4_dev_priv *dpriv, int offset)
403{
404 return dpriv->scc_regs[offset >> 2];
405}
406
407static u32 scc_readl_star(struct dscc4_dev_priv *dpriv, struct net_device *dev)
408{
409
410 readl(dev->base_addr + SCC_REG_START(dpriv) + STAR);
411 return readl(dev->base_addr + SCC_REG_START(dpriv) + STAR);
412}
413
414static inline void dscc4_do_tx(struct dscc4_dev_priv *dpriv,
415 struct net_device *dev)
416{
417 dpriv->ltda = dpriv->tx_fd_dma +
418 ((dpriv->tx_current-1)%TX_RING_SIZE)*sizeof(struct TxFD);
419 writel(dpriv->ltda, dev->base_addr + CH0LTDA + dpriv->dev_id*4);
420
421 readl(dev->base_addr + CH0LTDA + dpriv->dev_id*4);
422}
423
424static inline void dscc4_rx_update(struct dscc4_dev_priv *dpriv,
425 struct net_device *dev)
426{
427 dpriv->lrda = dpriv->rx_fd_dma +
428 ((dpriv->rx_dirty - 1)%RX_RING_SIZE)*sizeof(struct RxFD);
429 writel(dpriv->lrda, dev->base_addr + CH0LRDA + dpriv->dev_id*4);
430}
431
432static inline unsigned int dscc4_tx_done(struct dscc4_dev_priv *dpriv)
433{
434 return dpriv->tx_current == dpriv->tx_dirty;
435}
436
437static inline unsigned int dscc4_tx_quiescent(struct dscc4_dev_priv *dpriv,
438 struct net_device *dev)
439{
440 return readl(dev->base_addr + CH0FTDA + dpriv->dev_id*4) == dpriv->ltda;
441}
442
443int state_check(u32 state, struct dscc4_dev_priv *dpriv, struct net_device *dev,
444 const char *msg)
445{
446 int ret = 0;
447
448 if (debug > 1) {
449 if (SOURCE_ID(state) != dpriv->dev_id) {
450 printk(KERN_DEBUG "%s (%s): Source Id=%d, state=%08x\n",
451 dev->name, msg, SOURCE_ID(state), state );
452 ret = -1;
453 }
454 if (state & 0x0df80c00) {
455 printk(KERN_DEBUG "%s (%s): state=%08x (UFO alert)\n",
456 dev->name, msg, state);
457 ret = -1;
458 }
459 }
460 return ret;
461}
462
463void dscc4_tx_print(struct net_device *dev, struct dscc4_dev_priv *dpriv,
464 char *msg)
465{
466 printk(KERN_DEBUG "%s: tx_current=%02d tx_dirty=%02d (%s)\n",
467 dev->name, dpriv->tx_current, dpriv->tx_dirty, msg);
468}
469
470static void dscc4_release_ring(struct dscc4_dev_priv *dpriv)
471{
472 struct pci_dev *pdev = dpriv->pci_priv->pdev;
473 struct TxFD *tx_fd = dpriv->tx_fd;
474 struct RxFD *rx_fd = dpriv->rx_fd;
475 struct sk_buff **skbuff;
476 int i;
477
478 pci_free_consistent(pdev, TX_TOTAL_SIZE, tx_fd, dpriv->tx_fd_dma);
479 pci_free_consistent(pdev, RX_TOTAL_SIZE, rx_fd, dpriv->rx_fd_dma);
480
481 skbuff = dpriv->tx_skbuff;
482 for (i = 0; i < TX_RING_SIZE; i++) {
483 if (*skbuff) {
484 pci_unmap_single(pdev, tx_fd->data, (*skbuff)->len,
485 PCI_DMA_TODEVICE);
486 dev_kfree_skb(*skbuff);
487 }
488 skbuff++;
489 tx_fd++;
490 }
491
492 skbuff = dpriv->rx_skbuff;
493 for (i = 0; i < RX_RING_SIZE; i++) {
494 if (*skbuff) {
495 pci_unmap_single(pdev, rx_fd->data,
496 RX_MAX(HDLC_MAX_MRU), PCI_DMA_FROMDEVICE);
497 dev_kfree_skb(*skbuff);
498 }
499 skbuff++;
500 rx_fd++;
501 }
502}
503
504inline int try_get_rx_skb(struct dscc4_dev_priv *dpriv, struct net_device *dev)
505{
506 unsigned int dirty = dpriv->rx_dirty%RX_RING_SIZE;
507 struct RxFD *rx_fd = dpriv->rx_fd + dirty;
508 const int len = RX_MAX(HDLC_MAX_MRU);
509 struct sk_buff *skb;
510 int ret = 0;
511
512 skb = dev_alloc_skb(len);
513 dpriv->rx_skbuff[dirty] = skb;
514 if (skb) {
515 skb->dev = dev;
516 skb->protocol = hdlc_type_trans(skb, dev);
517 skb->mac.raw = skb->data;
518 rx_fd->data = pci_map_single(dpriv->pci_priv->pdev, skb->data,
519 len, PCI_DMA_FROMDEVICE);
520 } else {
521 rx_fd->data = (u32) NULL;
522 ret = -1;
523 }
524 return ret;
525}
526
527
528
529
530static int dscc4_wait_ack_cec(struct dscc4_dev_priv *dpriv,
531 struct net_device *dev, char *msg)
532{
533 s8 i = 0;
534
535 do {
536 if (!(scc_readl_star(dpriv, dev) & SccBusy)) {
537 printk(KERN_DEBUG "%s: %s ack (%d try)\n", dev->name,
538 msg, i);
539 goto done;
540 }
541 set_current_state(TASK_UNINTERRUPTIBLE);
542 schedule_timeout(10);
543 rmb();
544 } while (++i > 0);
545 printk(KERN_ERR "%s: %s timeout\n", dev->name, msg);
546done:
547 return (i >= 0) ? i : -EAGAIN;
548}
549
550static int dscc4_do_action(struct net_device *dev, char *msg)
551{
552 unsigned long ioaddr = dev->base_addr;
553 s16 i = 0;
554
555 writel(Action, ioaddr + GCMDR);
556 ioaddr += GSTAR;
557 do {
558 u32 state = readl(ioaddr);
559
560 if (state & ArAck) {
561 printk(KERN_DEBUG "%s: %s ack\n", dev->name, msg);
562 writel(ArAck, ioaddr);
563 goto done;
564 } else if (state & Arf) {
565 printk(KERN_ERR "%s: %s failed\n", dev->name, msg);
566 writel(Arf, ioaddr);
567 i = -1;
568 goto done;
569 }
570 rmb();
571 } while (++i > 0);
572 printk(KERN_ERR "%s: %s timeout\n", dev->name, msg);
573done:
574 return i;
575}
576
577static inline int dscc4_xpr_ack(struct dscc4_dev_priv *dpriv)
578{
579 int cur = dpriv->iqtx_current%IRQ_RING_SIZE;
580 s8 i = 0;
581
582 do {
583 if (!(dpriv->flags & (NeedIDR | NeedIDT)) ||
584 (dpriv->iqtx[cur] & Xpr))
585 break;
586 smp_rmb();
587 set_current_state(TASK_UNINTERRUPTIBLE);
588 schedule_timeout(10);
589 } while (++i > 0);
590
591 return (i >= 0 ) ? i : -EAGAIN;
592}
593
594#if 0
595static void dscc4_rx_reset(struct dscc4_dev_priv *dpriv, struct net_device *dev)
596{
597 unsigned long flags;
598
599 spin_lock_irqsave(&dpriv->pci_priv->lock, flags);
600
601 writel(0x00000000, dev->base_addr + CH0LRDA + dpriv->dev_id*4);
602 scc_patchl(PowerUp, 0, dpriv, dev, CCR0);
603 readl(dev->base_addr + CH0LRDA + dpriv->dev_id*4);
604 writel(MTFi|Rdr, dev->base_addr + dpriv->dev_id*0x0c + CH0CFG);
605 writel(Action, dev->base_addr + GCMDR);
606 spin_unlock_irqrestore(&dpriv->pci_priv->lock, flags);
607}
608
609static void dscc4_tx_reset(struct dscc4_dev_priv *dpriv, struct net_device *dev)
610{
611 u16 i = 0;
612
613
614 scc_patchl(PowerUp, 0, dpriv, dev, CCR0);
615 scc_writel(0x00050000, dpriv, dev, CCR2);
616
617
618
619 while (!dscc4_tx_quiescent(dpriv, dev) && ++i) {
620 udelay(1);
621 wmb();
622 }
623
624 writel(MTFi|Rdt, dev->base_addr + dpriv->dev_id*0x0c + CH0CFG);
625 if (dscc4_do_action(dev, "Rdt") < 0)
626 printk(KERN_ERR "%s: Tx reset failed\n", dev->name);
627}
628#endif
629
630
631static inline void dscc4_rx_skb(struct dscc4_dev_priv *dpriv,
632 struct net_device *dev)
633{
634 struct RxFD *rx_fd = dpriv->rx_fd + dpriv->rx_current%RX_RING_SIZE;
635 struct net_device_stats *stats = &dpriv->hdlc.stats;
636 struct pci_dev *pdev = dpriv->pci_priv->pdev;
637 struct sk_buff *skb;
638 int pkt_len;
639
640 skb = dpriv->rx_skbuff[dpriv->rx_current++%RX_RING_SIZE];
641 if (!skb) {
642 printk(KERN_DEBUG "%s: skb=0 (%s)\n", dev->name, __FUNCTION__);
643 goto refill;
644 }
645 pkt_len = TO_SIZE(rx_fd->state2);
646 pci_dma_sync_single(pdev, rx_fd->data, pkt_len, PCI_DMA_FROMDEVICE);
647 pci_unmap_single(pdev, rx_fd->data, RX_MAX(HDLC_MAX_MRU), PCI_DMA_FROMDEVICE);
648 if ((skb->data[--pkt_len] & FrameOk) == FrameOk) {
649 stats->rx_packets++;
650 stats->rx_bytes += pkt_len;
651 skb_put(skb, pkt_len);
652 if (netif_running(dev))
653 skb->protocol = hdlc_type_trans(skb, dev);
654 skb->dev->last_rx = jiffies;
655 netif_rx(skb);
656 } else {
657 if (skb->data[pkt_len] & FrameRdo)
658 stats->rx_fifo_errors++;
659 else if (!(skb->data[pkt_len] | ~FrameCrc))
660 stats->rx_crc_errors++;
661 else if (!(skb->data[pkt_len] | ~(FrameVfr | FrameRab)))
662 stats->rx_length_errors++;
663 else
664 stats->rx_errors++;
665 dev_kfree_skb_irq(skb);
666 }
667refill:
668 while ((dpriv->rx_dirty - dpriv->rx_current) % RX_RING_SIZE) {
669 if (try_get_rx_skb(dpriv, dev) < 0)
670 break;
671 dpriv->rx_dirty++;
672 }
673 dscc4_rx_update(dpriv, dev);
674 rx_fd->state2 = 0x00000000;
675 rx_fd->end = 0xbabeface;
676}
677
678static void dscc4_free1(struct pci_dev *pdev)
679{
680 struct dscc4_pci_priv *ppriv;
681 struct dscc4_dev_priv *root;
682 int i;
683
684 ppriv = pci_get_drvdata(pdev);
685 root = ppriv->root;
686
687 for (i = 0; i < dev_per_card; i++)
688 unregister_hdlc_device(&root[i].hdlc);
689
690 pci_set_drvdata(pdev, NULL);
691
692 kfree(root);
693 kfree(ppriv);
694}
695
696static int __devinit dscc4_init_one(struct pci_dev *pdev,
697 const struct pci_device_id *ent)
698{
699 struct dscc4_pci_priv *priv;
700 struct dscc4_dev_priv *dpriv;
701 static int cards_found = 0;
702 unsigned long ioaddr;
703 int i;
704
705 printk(KERN_DEBUG "%s", version);
706
707 if (pci_enable_device(pdev))
708 goto err_out;
709 if (!request_mem_region(pci_resource_start(pdev, 0),
710 pci_resource_len(pdev, 0), "registers")) {
711 printk(KERN_ERR "%s: can't reserve MMIO region (regs)\n",
712 DRV_NAME);
713 goto err_out;
714 }
715 if (!request_mem_region(pci_resource_start(pdev, 1),
716 pci_resource_len(pdev, 1), "LBI interface")) {
717 printk(KERN_ERR "%s: can't reserve MMIO region (lbi)\n",
718 DRV_NAME);
719 goto err_out_free_mmio_region0;
720 }
721 ioaddr = (unsigned long)ioremap(pci_resource_start(pdev, 0),
722 pci_resource_len(pdev, 0));
723 if (!ioaddr) {
724 printk(KERN_ERR "%s: cannot remap MMIO region %lx @ %lx\n",
725 DRV_NAME, pci_resource_len(pdev, 0),
726 pci_resource_start(pdev, 0));
727 goto err_out_free_mmio_region;
728 }
729 printk(KERN_DEBUG "Siemens DSCC4, MMIO at %#lx (regs), %#lx (lbi), IRQ %d\n",
730 pci_resource_start(pdev, 0),
731 pci_resource_start(pdev, 1), pdev->irq);
732
733
734 pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0xf8);
735 pci_set_master(pdev);
736
737 if (dscc4_found1(pdev, ioaddr))
738 goto err_out_iounmap;
739
740 priv = (struct dscc4_pci_priv *)pci_get_drvdata(pdev);
741
742 if (request_irq(pdev->irq, &dscc4_irq, SA_SHIRQ, DRV_NAME, priv->root)){
743 printk(KERN_WARNING "%s: IRQ %d busy\n", DRV_NAME, pdev->irq);
744 goto err_out_free1;
745 }
746
747
748 writel(0x00000001, ioaddr + GMODE);
749
750 {
751 u32 bits;
752
753 bits = (IRQ_RING_SIZE >> 5) - 1;
754 bits |= bits << 4;
755 bits |= bits << 8;
756 bits |= bits << 16;
757 writel(bits, ioaddr + IQLENR0);
758 }
759
760 writel((u32)(((IRQ_RING_SIZE >> 5) - 1) << 20), ioaddr + IQLENR1);
761 priv->iqcfg = (u32 *) pci_alloc_consistent(pdev,
762 IRQ_RING_SIZE*sizeof(u32), &priv->iqcfg_dma);
763 if (!priv->iqcfg)
764 goto err_out_free_irq;
765 writel(priv->iqcfg_dma, ioaddr + IQCFG);
766
767
768
769
770
771 for (i = 0; i < dev_per_card; i++) {
772 dpriv = priv->root + i;
773 dpriv->iqtx = (u32 *) pci_alloc_consistent(pdev,
774 IRQ_RING_SIZE*sizeof(u32), &dpriv->iqtx_dma);
775 if (!dpriv->iqtx)
776 goto err_out_free_iqtx;
777 writel(dpriv->iqtx_dma, ioaddr + IQTX0 + i*4);
778 }
779 for (i = 0; i < dev_per_card; i++) {
780 dpriv = priv->root + i;
781 dpriv->iqrx = (u32 *) pci_alloc_consistent(pdev,
782 IRQ_RING_SIZE*sizeof(u32), &dpriv->iqrx_dma);
783 if (!dpriv->iqrx)
784 goto err_out_free_iqrx;
785 writel(dpriv->iqrx_dma, ioaddr + IQRX0 + i*4);
786 }
787
788
789 writel(0x42104000, ioaddr + FIFOCR1);
790
791 writel(0xdef6d800, ioaddr + FIFOCR2);
792
793 writel(0x18181818, ioaddr + FIFOCR4);
794
795 writel(0x0000000e, ioaddr + FIFOCR3);
796
797 writel(0xff200001, ioaddr + GCMDR);
798
799 cards_found++;
800 return 0;
801
802err_out_free_iqrx:
803 while (--i >= 0) {
804 dpriv = priv->root + i;
805 pci_free_consistent(pdev, IRQ_RING_SIZE*sizeof(u32),
806 dpriv->iqrx, dpriv->iqrx_dma);
807 }
808 i = dev_per_card;
809err_out_free_iqtx:
810 while (--i >= 0) {
811 dpriv = priv->root + i;
812 pci_free_consistent(pdev, IRQ_RING_SIZE*sizeof(u32),
813 dpriv->iqtx, dpriv->iqtx_dma);
814 }
815 pci_free_consistent(pdev, IRQ_RING_SIZE*sizeof(u32), priv->iqcfg,
816 priv->iqcfg_dma);
817err_out_free_irq:
818 free_irq(pdev->irq, priv->root);
819err_out_free1:
820 dscc4_free1(pdev);
821err_out_iounmap:
822 iounmap ((void *)ioaddr);
823err_out_free_mmio_region:
824 release_mem_region(pci_resource_start(pdev, 1),
825 pci_resource_len(pdev, 1));
826err_out_free_mmio_region0:
827 release_mem_region(pci_resource_start(pdev, 0),
828 pci_resource_len(pdev, 0));
829err_out:
830 return -ENODEV;
831};
832
833
834
835
836
837static void dscc4_init_registers(struct dscc4_dev_priv *dpriv,
838 struct net_device *dev)
839{
840
841 scc_writel(0x00000000, dpriv, dev, CCR0);
842
843 scc_writel(LengthCheck | (HDLC_MAX_MRU >> 5), dpriv, dev, RLCR);
844
845
846
847
848
849
850
851 scc_writel(0x02408000, dpriv, dev, CCR1);
852
853
854 scc_writel(0x00050008 & ~RxActivate, dpriv, dev, CCR2);
855
856
857}
858
859static inline int dscc4_set_quartz(struct dscc4_dev_priv *dpriv, int hz)
860{
861 int ret = 0;
862
863 if ((hz < 0) || (hz > DSCC4_HZ_MAX))
864 ret = -EOPNOTSUPP;
865 else
866 dpriv->pci_priv->xtal_hz = hz;
867
868 return ret;
869}
870
871static int dscc4_found1(struct pci_dev *pdev, unsigned long ioaddr)
872{
873 struct dscc4_pci_priv *ppriv;
874 struct dscc4_dev_priv *root;
875 int i, ret = -ENOMEM;
876
877 root = (struct dscc4_dev_priv *)
878 kmalloc(dev_per_card*sizeof(*root), GFP_KERNEL);
879 if (!root) {
880 printk(KERN_ERR "%s: can't allocate data\n", DRV_NAME);
881 goto err_out;
882 }
883 memset(root, 0, dev_per_card*sizeof(*root));
884
885 ppriv = (struct dscc4_pci_priv *) kmalloc(sizeof(*ppriv), GFP_KERNEL);
886 if (!ppriv) {
887 printk(KERN_ERR "%s: can't allocate private data\n", DRV_NAME);
888 goto err_free_dev;
889 }
890 memset(ppriv, 0, sizeof(struct dscc4_pci_priv));
891
892 for (i = 0; i < dev_per_card; i++) {
893 struct dscc4_dev_priv *dpriv = root + i;
894 hdlc_device *hdlc = &dpriv->hdlc;
895 struct net_device *d = hdlc_to_dev(hdlc);
896
897 d->base_addr = ioaddr;
898 d->init = NULL;
899 d->irq = pdev->irq;
900 d->open = dscc4_open;
901 d->stop = dscc4_close;
902 d->set_multicast_list = NULL;
903 d->do_ioctl = dscc4_ioctl;
904 d->tx_timeout = dscc4_tx_timeout;
905 d->watchdog_timeo = TX_TIMEOUT;
906
907 SET_MODULE_OWNER(d);
908
909 dpriv->dev_id = i;
910 dpriv->pci_priv = ppriv;
911 spin_lock_init(&dpriv->lock);
912
913 hdlc->xmit = dscc4_start_xmit;
914 hdlc->attach = dscc4_hdlc_attach;
915
916 ret = register_hdlc_device(hdlc);
917 if (ret < 0) {
918 printk(KERN_ERR "%s: unable to register\n", DRV_NAME);
919 goto err_unregister;
920 }
921
922 dscc4_init_registers(dpriv, d);
923 dpriv->parity = PARITY_CRC16_PR0_CCITT;
924 dpriv->encoding = ENCODING_NRZ;
925
926 ret = dscc4_init_ring(d);
927 if (ret < 0) {
928 unregister_hdlc_device(hdlc);
929 goto err_unregister;
930 }
931 }
932 ret = dscc4_set_quartz(root, quartz);
933 if (ret < 0)
934 goto err_unregister;
935 ppriv->root = root;
936 spin_lock_init(&ppriv->lock);
937 pci_set_drvdata(pdev, ppriv);
938 return ret;
939
940err_unregister:
941 while (--i >= 0) {
942 dscc4_release_ring(root + i);
943 unregister_hdlc_device(&root[i].hdlc);
944 }
945 kfree(ppriv);
946err_free_dev:
947 kfree(root);
948err_out:
949 return ret;
950};
951
952
953static void dscc4_timer(unsigned long data)
954{
955 struct net_device *dev = (struct net_device *)data;
956 struct dscc4_dev_priv *dpriv = dscc4_priv(dev);
957
958
959 goto done;
960done:
961 dpriv->timer.expires = jiffies + TX_TIMEOUT;
962 add_timer(&dpriv->timer);
963}
964
965static void dscc4_tx_timeout(struct net_device *dev)
966{
967
968}
969
970static int dscc4_loopback_check(struct dscc4_dev_priv *dpriv)
971{
972 sync_serial_settings *settings = &dpriv->settings;
973
974 if (settings->loopback && (settings->clock_type != CLOCK_INT)) {
975 struct net_device *dev = hdlc_to_dev(&dpriv->hdlc);
976
977 printk(KERN_INFO "%s: loopback requires clock\n", dev->name);
978 return -1;
979 }
980 return 0;
981}
982
983#ifdef CONFIG_DSCC4_PCI_RST
984
985
986
987
988
989
990
991static void dscc4_pci_reset(struct pci_dev *pdev, u32 ioaddr)
992{
993 int i;
994
995 down(&dscc4_sem);
996 for (i = 0; i < 16; i++)
997 pci_read_config_dword(pdev, i << 2, dscc4_pci_config_store + i);
998
999
1000 writel(0x001c0000, ioaddr + GMODE);
1001
1002 writel(0x0000ffff, ioaddr + GPDIR);
1003
1004 writel(0x0000ffff, ioaddr + GPIM);
1005
1006 writel(0x0000ffff, ioaddr + GPDATA);
1007 writel(0x00000000, ioaddr + GPDATA);
1008
1009
1010 readl(ioaddr + GSTAR);
1011
1012 set_current_state(TASK_UNINTERRUPTIBLE);
1013 schedule_timeout(10);
1014
1015 for (i = 0; i < 16; i++)
1016 pci_write_config_dword(pdev, i << 2, dscc4_pci_config_store[i]);
1017 up(&dscc4_sem);
1018}
1019#else
1020#define dscc4_pci_reset(pdev,ioaddr) do {} while (0)
1021#endif
1022
1023static int dscc4_open(struct net_device *dev)
1024{
1025 struct dscc4_dev_priv *dpriv = dscc4_priv(dev);
1026 hdlc_device *hdlc = &dpriv->hdlc;
1027 struct dscc4_pci_priv *ppriv;
1028 int ret = -EAGAIN;
1029
1030 if ((dscc4_loopback_check(dpriv) < 0) || !dev->hard_start_xmit)
1031 goto err;
1032
1033 if ((ret = hdlc_open(hdlc)))
1034 goto err;
1035
1036 MOD_INC_USE_COUNT;
1037
1038 ppriv = dpriv->pci_priv;
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049 if (dpriv->flags & FakeReset) {
1050 dpriv->flags &= ~FakeReset;
1051 scc_patchl(0, PowerUp, dpriv, dev, CCR0);
1052 scc_patchl(0, 0x00050000, dpriv, dev, CCR2);
1053 scc_writel(EventsMask, dpriv, dev, IMR);
1054 printk(KERN_INFO "%s: up again.\n", dev->name);
1055 goto done;
1056 }
1057
1058
1059 dpriv->flags = NeedIDR | NeedIDT;
1060
1061 scc_patchl(0, PowerUp | Vis, dpriv, dev, CCR0);
1062
1063
1064
1065
1066
1067
1068
1069
1070 if (scc_readl_star(dpriv, dev) & SccBusy) {
1071 printk(KERN_ERR "%s busy. Try later\n", dev->name);
1072 ret = -EAGAIN;
1073 goto err_out;
1074 } else
1075 printk(KERN_INFO "%s: available. Good\n", dev->name);
1076
1077 scc_writel(EventsMask, dpriv, dev, IMR);
1078
1079
1080 scc_writel(TxSccRes | RxSccRes, dpriv, dev, CMDR);
1081
1082 if ((ret = dscc4_wait_ack_cec(dpriv, dev, "Cec")) < 0)
1083 goto err_disable_scc_events;
1084
1085
1086
1087
1088
1089
1090
1091
1092 if ((ret = dscc4_xpr_ack(dpriv)) < 0) {
1093 printk(KERN_ERR "%s: %s timeout\n", DRV_NAME, "XPR");
1094 goto err_disable_scc_events;
1095 }
1096
1097 if (debug > 2)
1098 dscc4_tx_print(dev, dpriv, "Open");
1099
1100done:
1101 netif_start_queue(dev);
1102
1103 init_timer(&dpriv->timer);
1104 dpriv->timer.expires = jiffies + 10*HZ;
1105 dpriv->timer.data = (unsigned long)dev;
1106 dpriv->timer.function = &dscc4_timer;
1107 add_timer(&dpriv->timer);
1108 netif_carrier_on(dev);
1109
1110 return 0;
1111
1112err_disable_scc_events:
1113 scc_writel(0xffffffff, dpriv, dev, IMR);
1114 scc_patchl(PowerUp | Vis, 0, dpriv, dev, CCR0);
1115err_out:
1116 hdlc_close(hdlc);
1117 MOD_DEC_USE_COUNT;
1118err:
1119 return ret;
1120}
1121
1122#ifdef DSCC4_POLLING
1123static int dscc4_tx_poll(struct dscc4_dev_priv *dpriv, struct net_device *dev)
1124{
1125
1126}
1127#endif
1128
1129static int dscc4_start_xmit(struct sk_buff *skb, struct net_device *dev)
1130{
1131 struct dscc4_dev_priv *dpriv = dscc4_priv(dev);
1132 struct dscc4_pci_priv *ppriv = dpriv->pci_priv;
1133 struct TxFD *tx_fd;
1134 int next;
1135
1136 next = dpriv->tx_current%TX_RING_SIZE;
1137 dpriv->tx_skbuff[next] = skb;
1138 tx_fd = dpriv->tx_fd + next;
1139 tx_fd->state = FrameEnd | TO_STATE_TX(skb->len);
1140 tx_fd->data = pci_map_single(ppriv->pdev, skb->data, skb->len,
1141 PCI_DMA_TODEVICE);
1142 tx_fd->complete = 0x00000000;
1143 tx_fd->jiffies = jiffies;
1144 mb();
1145
1146#ifdef DSCC4_POLLING
1147 spin_lock(&dpriv->lock);
1148 while (dscc4_tx_poll(dpriv, dev));
1149 spin_unlock(&dpriv->lock);
1150#endif
1151
1152 dev->trans_start = jiffies;
1153
1154 if (debug > 2)
1155 dscc4_tx_print(dev, dpriv, "Xmit");
1156
1157 if (!((++dpriv->tx_current - dpriv->tx_dirty)%TX_RING_SIZE))
1158 netif_stop_queue(dev);
1159
1160 if (dscc4_tx_quiescent(dpriv, dev))
1161 dscc4_do_tx(dpriv, dev);
1162
1163 return 0;
1164}
1165
1166static int dscc4_close(struct net_device *dev)
1167{
1168 struct dscc4_dev_priv *dpriv = dscc4_priv(dev);
1169 hdlc_device *hdlc = dev_to_hdlc(dev);
1170
1171 del_timer_sync(&dpriv->timer);
1172 netif_stop_queue(dev);
1173
1174 scc_patchl(PowerUp | Vis, 0, dpriv, dev, CCR0);
1175 scc_patchl(0x00050000, 0, dpriv, dev, CCR2);
1176 scc_writel(0xffffffff, dpriv, dev, IMR);
1177
1178 dpriv->flags |= FakeReset;
1179
1180 hdlc_close(hdlc);
1181
1182 MOD_DEC_USE_COUNT;
1183 return 0;
1184}
1185
1186static inline int dscc4_check_clock_ability(int port)
1187{
1188 int ret = 0;
1189
1190#ifdef CONFIG_DSCC4_PCISYNC
1191 if (port >= 2)
1192 ret = -1;
1193#endif
1194 return ret;
1195}
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240static int dscc4_set_clock(struct net_device *dev, u32 *bps, u32 *state)
1241{
1242 struct dscc4_dev_priv *dpriv = dscc4_priv(dev);
1243 int ret = -1;
1244 u32 brr;
1245
1246 *state &= ~Ccr0ClockMask;
1247 if (*bps) {
1248 u32 n = 0, m = 0, divider;
1249 int xtal;
1250
1251 xtal = dpriv->pci_priv->xtal_hz;
1252 if (!xtal)
1253 goto done;
1254 if (dscc4_check_clock_ability(dpriv->dev_id) < 0)
1255 goto done;
1256 divider = xtal / *bps;
1257 if (divider > BRR_DIVIDER_MAX) {
1258 divider >>= 4;
1259 *state |= 0x00000036;
1260 } else
1261 *state |= 0x00000037;
1262 if (divider >> 22) {
1263 n = 63;
1264 m = 15;
1265 } else if (divider) {
1266
1267 m = 0;
1268 while (0xffffffc0 & divider) {
1269 m++;
1270 divider >>= 1;
1271 }
1272 n = divider;
1273 }
1274 brr = (m << 8) | n;
1275 divider = n << m;
1276 if (!(*state & 0x00000001))
1277 divider <<= 4;
1278 *bps = xtal / divider;
1279 } else {
1280
1281
1282
1283
1284
1285 brr = 0;
1286 }
1287 scc_writel(brr, dpriv, dev, BRR);
1288 ret = 0;
1289done:
1290 return ret;
1291}
1292
1293static int dscc4_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
1294{
1295 sync_serial_settings *line = ifr->ifr_settings.ifs_ifsu.sync;
1296 struct dscc4_dev_priv *dpriv = dscc4_priv(dev);
1297 const size_t size = sizeof(dpriv->settings);
1298 int ret = 0;
1299
1300 if (dev->flags & IFF_UP)
1301 return -EBUSY;
1302
1303 if (cmd != SIOCWANDEV)
1304 return -EOPNOTSUPP;
1305
1306 switch(ifr->ifr_settings.type) {
1307 case IF_GET_IFACE:
1308 ifr->ifr_settings.type = IF_IFACE_SYNC_SERIAL;
1309 if (ifr->ifr_settings.size < size) {
1310 ifr->ifr_settings.size = size;
1311 return -ENOBUFS;
1312 }
1313 if (copy_to_user(line, &dpriv->settings, size))
1314 return -EFAULT;
1315 break;
1316
1317 case IF_IFACE_SYNC_SERIAL:
1318 if (!capable(CAP_NET_ADMIN))
1319 return -EPERM;
1320
1321 if (dpriv->flags & FakeReset) {
1322 printk(KERN_INFO "%s: please reset the device"
1323 " before this command\n", dev->name);
1324 return -EPERM;
1325 }
1326 if (copy_from_user(&dpriv->settings, line, size))
1327 return -EFAULT;
1328 ret = dscc4_set_iface(dpriv, dev);
1329 break;
1330
1331 default:
1332 ret = hdlc_ioctl(dev, ifr, cmd);
1333 break;
1334 }
1335
1336 return ret;
1337}
1338
1339static int dscc4_match(struct thingie *p, int value)
1340{
1341 int i;
1342
1343 for (i = 0; p[i].define != -1; i++) {
1344 if (value == p[i].define)
1345 break;
1346 }
1347 if (p[i].define == -1)
1348 return -1;
1349 else
1350 return i;
1351}
1352
1353static int dscc4_clock_setting(struct dscc4_dev_priv *dpriv,
1354 struct net_device *dev)
1355{
1356 sync_serial_settings *settings = &dpriv->settings;
1357 int ret = -EOPNOTSUPP;
1358 u32 bps, state;
1359
1360 bps = settings->clock_rate;
1361 state = scc_readl(dpriv, CCR0);
1362 if (dscc4_set_clock(dev, &bps, &state) < 0)
1363 goto done;
1364 if (bps) {
1365 printk(KERN_DEBUG "%s: generated RxClk (DCE)\n", dev->name);
1366 if (settings->clock_rate != bps) {
1367 printk(KERN_DEBUG "%s: clock adjusted (%08d -> %08d)\n",
1368 dev->name, settings->clock_rate, bps);
1369 settings->clock_rate = bps;
1370 }
1371 } else {
1372 state |= PowerUp | Vis;
1373 printk(KERN_DEBUG "%s: external RxClk (DTE)\n", dev->name);
1374 }
1375 scc_writel(state, dpriv, dev, CCR0);
1376 ret = 0;
1377done:
1378 return ret;
1379}
1380
1381static int dscc4_encoding_setting(struct dscc4_dev_priv *dpriv,
1382 struct net_device *dev)
1383{
1384 struct thingie encoding[] = {
1385 { ENCODING_NRZ, 0x00000000 },
1386 { ENCODING_NRZI, 0x00200000 },
1387 { ENCODING_FM_MARK, 0x00400000 },
1388 { ENCODING_FM_SPACE, 0x00500000 },
1389 { ENCODING_MANCHESTER, 0x00600000 },
1390 { -1, 0}
1391 };
1392 int i, ret = 0;
1393
1394 i = dscc4_match(encoding, dpriv->encoding);
1395 if (i >= 0)
1396 scc_patchl(EncodingMask, encoding[i].bits, dpriv, dev, CCR0);
1397 else
1398 ret = -EOPNOTSUPP;
1399 return ret;
1400}
1401
1402static int dscc4_loopback_setting(struct dscc4_dev_priv *dpriv,
1403 struct net_device *dev)
1404{
1405 sync_serial_settings *settings = &dpriv->settings;
1406 u32 state;
1407
1408 state = scc_readl(dpriv, CCR1);
1409 if (settings->loopback) {
1410 printk(KERN_DEBUG "%s: loopback\n", dev->name);
1411 state |= 0x00000100;
1412 } else {
1413 printk(KERN_DEBUG "%s: normal\n", dev->name);
1414 state &= ~0x00000100;
1415 }
1416 scc_writel(state, dpriv, dev, CCR1);
1417 return 0;
1418}
1419
1420static int dscc4_crc_setting(struct dscc4_dev_priv *dpriv,
1421 struct net_device *dev)
1422{
1423 struct thingie crc[] = {
1424 { PARITY_CRC16_PR0_CCITT, 0x00000010 },
1425 { PARITY_CRC16_PR1_CCITT, 0x00000000 },
1426 { PARITY_CRC32_PR0_CCITT, 0x00000011 },
1427 { PARITY_CRC32_PR1_CCITT, 0x00000001 }
1428 };
1429 int i, ret = 0;
1430
1431 i = dscc4_match(crc, dpriv->parity);
1432 if (i >= 0)
1433 scc_patchl(CrcMask, crc[i].bits, dpriv, dev, CCR1);
1434 else
1435 ret = -EOPNOTSUPP;
1436 return ret;
1437}
1438
1439static int dscc4_set_iface(struct dscc4_dev_priv *dpriv, struct net_device *dev)
1440{
1441 struct {
1442 int (*action)(struct dscc4_dev_priv *, struct net_device *);
1443 } *p, do_setting[] = {
1444 { dscc4_encoding_setting },
1445 { dscc4_clock_setting },
1446 { dscc4_loopback_setting },
1447 { dscc4_crc_setting },
1448 { NULL }
1449 };
1450 int ret = 0;
1451
1452 for (p = do_setting; p->action; p++) {
1453 if ((ret = p->action(dpriv, dev)) < 0)
1454 break;
1455 }
1456 return ret;
1457}
1458
1459static void dscc4_irq(int irq, void *token, struct pt_regs *ptregs)
1460{
1461 struct dscc4_dev_priv *root = token;
1462 struct dscc4_pci_priv *priv;
1463 struct net_device *dev;
1464 u32 ioaddr, state;
1465 unsigned long flags;
1466 int i;
1467
1468 priv = root->pci_priv;
1469 dev = hdlc_to_dev(&root->hdlc);
1470
1471 spin_lock_irqsave(&priv->lock, flags);
1472
1473 ioaddr = dev->base_addr;
1474
1475 state = readl(ioaddr + GSTAR);
1476 if (!state)
1477 goto out;
1478 if (debug > 3)
1479 printk(KERN_DEBUG "%s: GSTAR = 0x%08x\n", DRV_NAME, state);
1480 writel(state, ioaddr + GSTAR);
1481
1482 if (state & Arf) {
1483 printk(KERN_ERR "%s: failure (Arf). Harass the maintener\n",
1484 dev->name);
1485 goto out;
1486 }
1487 state &= ~ArAck;
1488 if (state & Cfg) {
1489 if (debug > 0)
1490 printk(KERN_DEBUG "%s: CfgIV\n", DRV_NAME);
1491 if (priv->iqcfg[priv->cfg_cur++%IRQ_RING_SIZE] & Arf)
1492 printk(KERN_ERR "%s: %s failed\n", dev->name, "CFG");
1493 if (!(state &= ~Cfg))
1494 goto out;
1495 }
1496 if (state & RxEvt) {
1497 i = dev_per_card - 1;
1498 do {
1499 dscc4_rx_irq(priv, root + i);
1500 } while (--i >= 0);
1501 state &= ~RxEvt;
1502 }
1503 if (state & TxEvt) {
1504 i = dev_per_card - 1;
1505 do {
1506 dscc4_tx_irq(priv, root + i);
1507 } while (--i >= 0);
1508 state &= ~TxEvt;
1509 }
1510out:
1511 spin_unlock_irqrestore(&priv->lock, flags);
1512}
1513
1514static void dscc4_tx_irq(struct dscc4_pci_priv *ppriv,
1515 struct dscc4_dev_priv *dpriv)
1516{
1517 struct net_device *dev = hdlc_to_dev(&dpriv->hdlc);
1518 u32 state;
1519 int cur, loop = 0;
1520
1521try:
1522 cur = dpriv->iqtx_current%IRQ_RING_SIZE;
1523 state = dpriv->iqtx[cur];
1524 if (!state) {
1525 if (debug > 4)
1526 printk(KERN_DEBUG "%s: Tx ISR = 0x%08x\n", dev->name,
1527 state);
1528 if ((debug > 1) && (loop > 1))
1529 printk(KERN_DEBUG "%s: Tx irq loop=%d\n", dev->name, loop);
1530 if (loop && netif_queue_stopped(dev))
1531 if ((dpriv->tx_current - dpriv->tx_dirty)%TX_RING_SIZE)
1532 netif_wake_queue(dev);
1533
1534 if (netif_running(dev) && dscc4_tx_quiescent(dpriv, dev) &&
1535 !dscc4_tx_done(dpriv))
1536 dscc4_do_tx(dpriv, dev);
1537 return;
1538 }
1539 loop++;
1540 dpriv->iqtx[cur] = 0;
1541 dpriv->iqtx_current++;
1542
1543 if (state_check(state, dpriv, dev, "Tx") < 0)
1544 return;
1545
1546 if (state & SccEvt) {
1547 if (state & Alls) {
1548 struct net_device_stats *stats = &dpriv->hdlc.stats;
1549 struct sk_buff *skb;
1550 struct TxFD *tx_fd;
1551
1552 if (debug > 2)
1553 dscc4_tx_print(dev, dpriv, "Alls");
1554
1555
1556
1557
1558 cur = dpriv->tx_dirty%TX_RING_SIZE;
1559 tx_fd = dpriv->tx_fd + cur;
1560 skb = dpriv->tx_skbuff[cur];
1561 if (skb) {
1562 pci_unmap_single(ppriv->pdev, tx_fd->data,
1563 skb->len, PCI_DMA_TODEVICE);
1564 if (tx_fd->state & FrameEnd) {
1565 stats->tx_packets++;
1566 stats->tx_bytes += skb->len;
1567 }
1568 dev_kfree_skb_irq(skb);
1569 dpriv->tx_skbuff[cur] = NULL;
1570 ++dpriv->tx_dirty;
1571 } else {
1572 if (debug > 1)
1573 printk(KERN_ERR "%s Tx: NULL skb %d\n",
1574 dev->name, cur);
1575 }
1576
1577
1578
1579
1580
1581 tx_fd->data = tx_fd->next;
1582 tx_fd->state = FrameEnd | TO_STATE_TX(2*DUMMY_SKB_SIZE);
1583 tx_fd->complete = 0x00000000;
1584 tx_fd->jiffies = 0;
1585
1586 if (!(state &= ~Alls))
1587 goto try;
1588 }
1589
1590
1591
1592 if (state & Xdu) {
1593 printk(KERN_ERR "%s: XDU. Ask maintainer\n", DRV_NAME);
1594 dpriv->flags = NeedIDT;
1595
1596 writel(MTFi | Rdt,
1597 dev->base_addr + 0x0c*dpriv->dev_id + CH0CFG);
1598 writel(Action, dev->base_addr + GCMDR);
1599 return;
1600 }
1601 if (state & Cts) {
1602 printk(KERN_INFO "%s: CTS transition\n", dev->name);
1603 if (!(state &= ~Cts))
1604 goto try;
1605 }
1606 if (state & Xmr) {
1607
1608 printk(KERN_ERR "%s: Xmr. Ask maintainer\n", DRV_NAME);
1609 if (!(state &= ~Xmr))
1610 goto try;
1611 }
1612 if (state & Xpr) {
1613 u32 scc_addr, ring;
1614 int i;
1615
1616
1617
1618
1619
1620 for (i = 1; i; i <<= 1) {
1621 if (!(scc_readl_star(dpriv, dev) & SccBusy))
1622 break;
1623 }
1624 if (!i)
1625 printk(KERN_INFO "%s busy in irq\n", dev->name);
1626
1627 scc_addr = dev->base_addr + 0x0c*dpriv->dev_id;
1628
1629 if (dpriv->flags & NeedIDT) {
1630 if (debug > 2)
1631 dscc4_tx_print(dev, dpriv, "Xpr");
1632 ring = dpriv->tx_fd_dma +
1633 (dpriv->tx_dirty%TX_RING_SIZE)*
1634 sizeof(struct TxFD);
1635 writel(ring, scc_addr + CH0BTDA);
1636 dscc4_do_tx(dpriv, dev);
1637 writel(MTFi | Idt, scc_addr + CH0CFG);
1638 if (dscc4_do_action(dev, "IDT") < 0)
1639 goto err_xpr;
1640 dpriv->flags &= ~NeedIDT;
1641 }
1642 if (dpriv->flags & NeedIDR) {
1643 ring = dpriv->rx_fd_dma +
1644 (dpriv->rx_current%RX_RING_SIZE)*
1645 sizeof(struct RxFD);
1646 writel(ring, scc_addr + CH0BRDA);
1647 dscc4_rx_update(dpriv, dev);
1648 writel(MTFi | Idr, scc_addr + CH0CFG);
1649 if (dscc4_do_action(dev, "IDR") < 0)
1650 goto err_xpr;
1651 dpriv->flags &= ~NeedIDR;
1652 smp_wmb();
1653
1654 scc_writel(0x08050008, dpriv, dev, CCR2);
1655 }
1656 err_xpr:
1657 if (!(state &= ~Xpr))
1658 goto try;
1659 }
1660 if (state & Cd) {
1661 if (debug > 0)
1662 printk(KERN_INFO "%s: CD transition\n", dev->name);
1663 if (!(state &= ~Cd))
1664 goto try;
1665 }
1666 } else {
1667 if (state & Hi) {
1668#ifdef DSCC4_POLLING
1669 while (!dscc4_tx_poll(dpriv, dev));
1670#endif
1671 printk(KERN_INFO "%s: Tx Hi\n", dev->name);
1672 state &= ~Hi;
1673 }
1674 if (state & Err) {
1675 printk(KERN_INFO "%s: Tx ERR\n", dev->name);
1676 dev_to_hdlc(dev)->stats.tx_errors++;
1677 state &= ~Err;
1678 }
1679 }
1680 goto try;
1681}
1682
1683static void dscc4_rx_irq(struct dscc4_pci_priv *priv,
1684 struct dscc4_dev_priv *dpriv)
1685{
1686 struct net_device *dev = hdlc_to_dev(&dpriv->hdlc);
1687 u32 state;
1688 int cur;
1689
1690try:
1691 cur = dpriv->iqrx_current%IRQ_RING_SIZE;
1692 state = dpriv->iqrx[cur];
1693 if (!state)
1694 return;
1695 dpriv->iqrx[cur] = 0;
1696 dpriv->iqrx_current++;
1697
1698 if (state_check(state, dpriv, dev, "Rx") < 0)
1699 return;
1700
1701 if (!(state & SccEvt)){
1702 struct RxFD *rx_fd;
1703
1704 if (debug > 4)
1705 printk(KERN_DEBUG "%s: Rx ISR = 0x%08x\n", dev->name,
1706 state);
1707 state &= 0x00ffffff;
1708 if (state & Err) {
1709 printk(KERN_DEBUG "%s: Rx ERR\n", dev->name);
1710 cur = dpriv->rx_current%RX_RING_SIZE;
1711 rx_fd = dpriv->rx_fd + cur;
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724 while (!(rx_fd->state1 & Hold)) {
1725 rx_fd++;
1726 cur++;
1727 if (!(cur = cur%RX_RING_SIZE))
1728 rx_fd = dpriv->rx_fd;
1729 }
1730
1731 try_get_rx_skb(dpriv, dev);
1732 if (!rx_fd->data)
1733 goto try;
1734 rx_fd->state1 &= ~Hold;
1735 rx_fd->state2 = 0x00000000;
1736 rx_fd->end = 0xbabeface;
1737
1738 goto try;
1739 }
1740 if (state & Fi) {
1741 dscc4_rx_skb(dpriv, dev);
1742 goto try;
1743 }
1744 if (state & Hi ) {
1745 printk(KERN_INFO "%s: Rx Hi\n", dev->name);
1746 state &= ~Hi;
1747 goto try;
1748 }
1749 } else {
1750 if (debug > 1) {
1751
1752 static struct {
1753 u32 mask;
1754 const char *irq_name;
1755 } evts[] = {
1756 { 0x00008000, "TIN"},
1757 { 0x00000020, "RSC"},
1758 { 0x00000010, "PCE"},
1759 { 0x00000008, "PLLA"},
1760 { 0, NULL}
1761 }, *evt;
1762
1763 for (evt = evts; evt->irq_name; evt++) {
1764 if (state & evt->mask) {
1765 printk(KERN_DEBUG "%s: %s\n",
1766 dev->name, evt->irq_name);
1767 if (!(state &= ~evt->mask))
1768 goto try;
1769 }
1770 }
1771 } else {
1772 if (!(state &= ~0x0000c03c))
1773 goto try;
1774 }
1775 if (state & Cts) {
1776 printk(KERN_INFO "%s: CTS transition\n", dev->name);
1777 if (!(state &= ~Cts))
1778 goto try;
1779 }
1780
1781
1782
1783 if (state & Rdo) {
1784 struct RxFD *rx_fd;
1785 u32 scc_addr;
1786 int cur;
1787
1788
1789
1790 scc_addr = dev->base_addr + 0x0c*dpriv->dev_id;
1791
1792 scc_patchl(RxActivate, 0, dpriv, dev, CCR2);
1793
1794
1795
1796
1797
1798 scc_writel(RxSccRes, dpriv, dev, CMDR);
1799 dpriv->flags |= RdoSet;
1800
1801
1802
1803
1804
1805
1806 do {
1807 cur = dpriv->rx_current++%RX_RING_SIZE;
1808 rx_fd = dpriv->rx_fd + cur;
1809 if (!(rx_fd->state2 & DataComplete))
1810 break;
1811 if (rx_fd->state2 & FrameAborted) {
1812 dev_to_hdlc(dev)->stats.rx_over_errors++;
1813 rx_fd->state1 |= Hold;
1814 rx_fd->state2 = 0x00000000;
1815 rx_fd->end = 0xbabeface;
1816 } else
1817 dscc4_rx_skb(dpriv, dev);
1818 } while (1);
1819
1820 if (debug > 0) {
1821 if (dpriv->flags & RdoSet)
1822 printk(KERN_DEBUG
1823 "%s: no RDO in Rx data\n", DRV_NAME);
1824 }
1825#ifdef DSCC4_RDO_EXPERIMENTAL_RECOVERY
1826
1827
1828
1829#warning "FIXME: CH0BRDA"
1830 writel(dpriv->rx_fd_dma +
1831 (dpriv->rx_current%RX_RING_SIZE)*
1832 sizeof(struct RxFD), scc_addr + CH0BRDA);
1833 writel(MTFi|Rdr|Idr, scc_addr + CH0CFG);
1834 if (dscc4_do_action(dev, "RDR") < 0) {
1835 printk(KERN_ERR "%s: RDO recovery failed(%s)\n",
1836 dev->name, "RDR");
1837 goto rdo_end;
1838 }
1839 writel(MTFi|Idr, scc_addr + CH0CFG);
1840 if (dscc4_do_action(dev, "IDR") < 0) {
1841 printk(KERN_ERR "%s: RDO recovery failed(%s)\n",
1842 dev->name, "IDR");
1843 goto rdo_end;
1844 }
1845 rdo_end:
1846#endif
1847 scc_patchl(0, RxActivate, dpriv, dev, CCR2);
1848 goto try;
1849 }
1850 if (state & Cd) {
1851 printk(KERN_INFO "%s: CD transition\n", dev->name);
1852 if (!(state &= ~Cd))
1853 goto try;
1854 }
1855 if (state & Flex) {
1856 printk(KERN_DEBUG "%s: Flex. Ttttt...\n", DRV_NAME);
1857 if (!(state &= ~Flex))
1858 goto try;
1859 }
1860 }
1861}
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872struct sk_buff *dscc4_init_dummy_skb(struct dscc4_dev_priv *dpriv)
1873{
1874 struct sk_buff *skb;
1875
1876 skb = dev_alloc_skb(DUMMY_SKB_SIZE);
1877 if (skb) {
1878 int last = dpriv->tx_dirty%TX_RING_SIZE;
1879 struct TxFD *tx_fd = dpriv->tx_fd + last;
1880
1881 skb->len = DUMMY_SKB_SIZE;
1882 memcpy(skb->data, version, strlen(version)%DUMMY_SKB_SIZE);
1883 tx_fd->state = FrameEnd | TO_STATE_TX(DUMMY_SKB_SIZE);
1884 tx_fd->data = pci_map_single(dpriv->pci_priv->pdev, skb->data,
1885 DUMMY_SKB_SIZE, PCI_DMA_TODEVICE);
1886 dpriv->tx_skbuff[last] = skb;
1887 }
1888 return skb;
1889}
1890
1891static int dscc4_init_ring(struct net_device *dev)
1892{
1893 struct dscc4_dev_priv *dpriv = dscc4_priv(dev);
1894 struct pci_dev *pdev = dpriv->pci_priv->pdev;
1895 struct TxFD *tx_fd;
1896 struct RxFD *rx_fd;
1897 void *ring;
1898 int i;
1899
1900 ring = pci_alloc_consistent(pdev, RX_TOTAL_SIZE, &dpriv->rx_fd_dma);
1901 if (!ring)
1902 goto err_out;
1903 dpriv->rx_fd = rx_fd = (struct RxFD *) ring;
1904
1905 ring = pci_alloc_consistent(pdev, TX_TOTAL_SIZE, &dpriv->tx_fd_dma);
1906 if (!ring)
1907 goto err_free_dma_rx;
1908 dpriv->tx_fd = tx_fd = (struct TxFD *) ring;
1909
1910 memset(dpriv->tx_skbuff, 0, sizeof(struct sk_buff *)*TX_RING_SIZE);
1911 dpriv->tx_dirty = 0xffffffff;
1912 i = dpriv->tx_current = 0;
1913 do {
1914 tx_fd->state = FrameEnd | TO_STATE_TX(2*DUMMY_SKB_SIZE);
1915 tx_fd->complete = 0x00000000;
1916
1917 tx_fd->data = dpriv->tx_fd_dma;
1918 (tx_fd++)->next = (u32)(dpriv->tx_fd_dma +
1919 (++i%TX_RING_SIZE)*sizeof(*tx_fd));
1920 } while (i < TX_RING_SIZE);
1921
1922 if (dscc4_init_dummy_skb(dpriv) == NULL)
1923 goto err_free_dma_tx;
1924
1925 memset(dpriv->rx_skbuff, 0, sizeof(struct sk_buff *)*RX_RING_SIZE);
1926 i = dpriv->rx_dirty = dpriv->rx_current = 0;
1927 do {
1928
1929 rx_fd->state1 = HiDesc;
1930 rx_fd->state2 = 0x00000000;
1931 rx_fd->end = 0xbabeface;
1932 rx_fd->state1 |= TO_STATE_RX(HDLC_MAX_MRU);
1933
1934 if (try_get_rx_skb(dpriv, dev) >= 0)
1935 dpriv->rx_dirty++;
1936 (rx_fd++)->next = (u32)(dpriv->rx_fd_dma +
1937 (++i%RX_RING_SIZE)*sizeof(*rx_fd));
1938 } while (i < RX_RING_SIZE);
1939
1940 return 0;
1941
1942err_free_dma_tx:
1943 pci_free_consistent(pdev, TX_TOTAL_SIZE, ring, dpriv->tx_fd_dma);
1944err_free_dma_rx:
1945 pci_free_consistent(pdev, RX_TOTAL_SIZE, rx_fd, dpriv->rx_fd_dma);
1946err_out:
1947 return -ENOMEM;
1948}
1949
1950static void __devexit dscc4_remove_one(struct pci_dev *pdev)
1951{
1952 struct dscc4_pci_priv *ppriv;
1953 struct dscc4_dev_priv *root;
1954 u32 ioaddr;
1955 int i;
1956
1957 ppriv = pci_get_drvdata(pdev);
1958 root = ppriv->root;
1959
1960 ioaddr = hdlc_to_dev(&root->hdlc)->base_addr;
1961
1962 dscc4_pci_reset(pdev, ioaddr);
1963
1964 free_irq(pdev->irq, root);
1965 pci_free_consistent(pdev, IRQ_RING_SIZE*sizeof(u32), ppriv->iqcfg,
1966 ppriv->iqcfg_dma);
1967 for (i = 0; i < dev_per_card; i++) {
1968 struct dscc4_dev_priv *dpriv = root + i;
1969
1970 dscc4_release_ring(dpriv);
1971 pci_free_consistent(pdev, IRQ_RING_SIZE*sizeof(u32),
1972 dpriv->iqrx, dpriv->iqrx_dma);
1973 pci_free_consistent(pdev, IRQ_RING_SIZE*sizeof(u32),
1974 dpriv->iqtx, dpriv->iqtx_dma);
1975 }
1976
1977 dscc4_free1(pdev);
1978
1979 iounmap((void *)ioaddr);
1980
1981 release_mem_region(pci_resource_start(pdev, 1),
1982 pci_resource_len(pdev, 1));
1983 release_mem_region(pci_resource_start(pdev, 0),
1984 pci_resource_len(pdev, 0));
1985}
1986
1987static int dscc4_hdlc_attach(hdlc_device *hdlc, unsigned short encoding,
1988 unsigned short parity)
1989{
1990 struct net_device *dev = hdlc_to_dev(hdlc);
1991 struct dscc4_dev_priv *dpriv = dscc4_priv(dev);
1992
1993 if (encoding != ENCODING_NRZ &&
1994 encoding != ENCODING_NRZI &&
1995 encoding != ENCODING_FM_MARK &&
1996 encoding != ENCODING_FM_SPACE &&
1997 encoding != ENCODING_MANCHESTER)
1998 return -EINVAL;
1999
2000 if (parity != PARITY_NONE &&
2001 parity != PARITY_CRC16_PR0_CCITT &&
2002 parity != PARITY_CRC16_PR1_CCITT &&
2003 parity != PARITY_CRC32_PR0_CCITT &&
2004 parity != PARITY_CRC32_PR1_CCITT)
2005 return -EINVAL;
2006
2007 dpriv->encoding = encoding;
2008 dpriv->parity = parity;
2009 return 0;
2010}
2011
2012#ifndef MODULE
2013static int __init dscc4_setup(char *str)
2014{
2015 int *args[] = { &debug, &quartz, NULL }, **p = args;
2016
2017 while (*p && (get_option(&str, *p) == 2))
2018 p++;
2019 return 1;
2020}
2021
2022__setup("dscc4.setup=", dscc4_setup);
2023#endif
2024
2025static struct pci_device_id dscc4_pci_tbl[] = {
2026 { PCI_VENDOR_ID_SIEMENS, PCI_DEVICE_ID_SIEMENS_DSCC4,
2027 PCI_ANY_ID, PCI_ANY_ID, },
2028 { 0,}
2029};
2030MODULE_DEVICE_TABLE(pci, dscc4_pci_tbl);
2031
2032static struct pci_driver dscc4_driver = {
2033 .name = DRV_NAME,
2034 .id_table = dscc4_pci_tbl,
2035 .probe = dscc4_init_one,
2036 .remove = __devexit_p(dscc4_remove_one),
2037};
2038
2039static int __init dscc4_init_module(void)
2040{
2041 return pci_module_init(&dscc4_driver);
2042}
2043
2044static void __exit dscc4_cleanup_module(void)
2045{
2046 pci_unregister_driver(&dscc4_driver);
2047}
2048
2049module_init(dscc4_init_module);
2050module_exit(dscc4_cleanup_module);
2051