Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
zatm.c
Go to the documentation of this file.
1 /* drivers/atm/zatm.c - ZeitNet ZN122x device driver */
2 
3 /* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */
4 
5 
6 #include <linux/module.h>
7 #include <linux/kernel.h>
8 #include <linux/mm.h>
9 #include <linux/pci.h>
10 #include <linux/errno.h>
11 #include <linux/atm.h>
12 #include <linux/atmdev.h>
13 #include <linux/sonet.h>
14 #include <linux/skbuff.h>
15 #include <linux/netdevice.h>
16 #include <linux/delay.h>
17 #include <linux/uio.h>
18 #include <linux/init.h>
19 #include <linux/interrupt.h>
20 #include <linux/dma-mapping.h>
21 #include <linux/atm_zatm.h>
22 #include <linux/capability.h>
23 #include <linux/bitops.h>
24 #include <linux/wait.h>
25 #include <linux/slab.h>
26 #include <asm/byteorder.h>
27 #include <asm/string.h>
28 #include <asm/io.h>
29 #include <linux/atomic.h>
30 #include <asm/uaccess.h>
31 
32 #include "uPD98401.h"
33 #include "uPD98402.h"
34 #include "zeprom.h"
35 #include "zatm.h"
36 
37 
38 /*
39  * TODO:
40  *
41  * Minor features
42  * - support 64 kB SDUs (will have to use multibuffer batches then :-( )
43  * - proper use of CDV, credit = max(1,CDVT*PCR)
44  * - AAL0
45  * - better receive timestamps
46  * - OAM
47  */
48 
49 #define ZATM_COPPER 1
50 
51 #if 0
52 #define DPRINTK(format,args...) printk(KERN_DEBUG format,##args)
53 #else
54 #define DPRINTK(format,args...)
55 #endif
56 
57 #ifndef CONFIG_ATM_ZATM_DEBUG
58 
59 
60 #define NULLCHECK(x)
61 
62 #define EVENT(s,a,b)
63 
64 
65 static void event_dump(void)
66 {
67 }
68 
69 
70 #else
71 
72 
73 /*
74  * NULL pointer checking
75  */
76 
77 #define NULLCHECK(x) \
78  if ((unsigned long) (x) < 0x30) printk(KERN_CRIT #x "==0x%x\n", (int) (x))
79 
80 /*
81  * Very extensive activity logging. Greatly improves bug detection speed but
82  * costs a few Mbps if enabled.
83  */
84 
85 #define EV 64
86 
87 static const char *ev[EV];
88 static unsigned long ev_a[EV],ev_b[EV];
89 static int ec = 0;
90 
91 
92 static void EVENT(const char *s,unsigned long a,unsigned long b)
93 {
94  ev[ec] = s;
95  ev_a[ec] = a;
96  ev_b[ec] = b;
97  ec = (ec+1) % EV;
98 }
99 
100 
101 static void event_dump(void)
102 {
103  int n,i;
104 
105  printk(KERN_NOTICE "----- event dump follows -----\n");
106  for (n = 0; n < EV; n++) {
107  i = (ec+n) % EV;
109  printk(ev[i] ? ev[i] : "(null)",ev_a[i],ev_b[i]);
110  }
111  printk(KERN_NOTICE "----- event dump ends here -----\n");
112 }
113 
114 
115 #endif /* CONFIG_ATM_ZATM_DEBUG */
116 
117 
118 #define RING_BUSY 1 /* indication from do_tx that PDU has to be
119  backlogged */
120 
121 static struct atm_dev *zatm_boards = NULL;
122 static unsigned long dummy[2] = {0,0};
123 
125 #define zin_n(r) inl(zatm_dev->base+r*4)
126 #define zin(r) inl(zatm_dev->base+uPD98401_##r*4)
127 #define zout(v,r) outl(v,zatm_dev->base+uPD98401_##r*4)
128 #define zwait while (zin(CMR) & uPD98401_BUSY)
129 
130 /* RX0, RX1, TX0, TX1 */
131 static const int mbx_entries[NR_MBX] = { 1024,1024,1024,1024 };
132 static const int mbx_esize[NR_MBX] = { 16,16,4,4 }; /* entry size in bytes */
134 #define MBX_SIZE(i) (mbx_entries[i]*mbx_esize[i])
135 
136 
137 /*-------------------------------- utilities --------------------------------*/
138 
139 
140 static void zpokel(struct zatm_dev *zatm_dev,u32 value,u32 addr)
141 {
142  zwait;
143  zout(value,CER);
146 }
147 
148 
149 static u32 zpeekl(struct zatm_dev *zatm_dev,u32 addr)
150 {
151  zwait;
154  zwait;
155  return zin(CER);
156 }
157 
158 
159 /*------------------------------- free lists --------------------------------*/
160 
161 
162 /*
163  * Free buffer head structure:
164  * [0] pointer to buffer (for SAR)
165  * [1] buffer descr link pointer (for SAR)
166  * [2] back pointer to skb (for poll_rx)
167  * [3] data
168  * ...
169  */
172  u32 buffer; /* pointer to buffer (for SAR) */
173  u32 link; /* buffer descriptor link pointer (for SAR) */
174  struct sk_buff *skb; /* back pointer to skb (for poll_rx) */
175 };
176 
177 
178 static void refill_pool(struct atm_dev *dev,int pool)
179 {
180  struct zatm_dev *zatm_dev;
181  struct sk_buff *skb;
182  struct rx_buffer_head *first;
183  unsigned long flags;
184  int align,offset,free,count,size;
185 
186  EVENT("refill_pool\n",0,0);
187  zatm_dev = ZATM_DEV(dev);
188  size = (64 << (pool <= ZATM_AAL5_POOL_BASE ? 0 :
189  pool-ZATM_AAL5_POOL_BASE))+sizeof(struct rx_buffer_head);
190  if (size < PAGE_SIZE) {
191  align = 32; /* for 32 byte alignment */
192  offset = sizeof(struct rx_buffer_head);
193  }
194  else {
195  align = 4096;
196  offset = zatm_dev->pool_info[pool].offset+
197  sizeof(struct rx_buffer_head);
198  }
199  size += align;
200  spin_lock_irqsave(&zatm_dev->lock, flags);
201  free = zpeekl(zatm_dev,zatm_dev->pool_base+2*pool) &
203  spin_unlock_irqrestore(&zatm_dev->lock, flags);
204  if (free >= zatm_dev->pool_info[pool].low_water) return;
205  EVENT("starting ... POOL: 0x%x, 0x%x\n",
206  zpeekl(zatm_dev,zatm_dev->pool_base+2*pool),
207  zpeekl(zatm_dev,zatm_dev->pool_base+2*pool+1));
208  EVENT("dummy: 0x%08lx, 0x%08lx\n",dummy[0],dummy[1]);
209  count = 0;
210  first = NULL;
211  while (free < zatm_dev->pool_info[pool].high_water) {
212  struct rx_buffer_head *head;
213 
214  skb = alloc_skb(size,GFP_ATOMIC);
215  if (!skb) {
216  printk(KERN_WARNING DEV_LABEL "(Itf %d): got no new "
217  "skb (%d) with %d free\n",dev->number,size,free);
218  break;
219  }
220  skb_reserve(skb,(unsigned char *) ((((unsigned long) skb->data+
221  align+offset-1) & ~(unsigned long) (align-1))-offset)-
222  skb->data);
223  head = (struct rx_buffer_head *) skb->data;
224  skb_reserve(skb,sizeof(struct rx_buffer_head));
225  if (!first) first = head;
226  count++;
227  head->buffer = virt_to_bus(skb->data);
228  head->link = 0;
229  head->skb = skb;
230  EVENT("enq skb 0x%08lx/0x%08lx\n",(unsigned long) skb,
231  (unsigned long) head);
232  spin_lock_irqsave(&zatm_dev->lock, flags);
233  if (zatm_dev->last_free[pool])
234  ((struct rx_buffer_head *) (zatm_dev->last_free[pool]->
235  data))[-1].link = virt_to_bus(head);
236  zatm_dev->last_free[pool] = skb;
237  skb_queue_tail(&zatm_dev->pool[pool],skb);
238  spin_unlock_irqrestore(&zatm_dev->lock, flags);
239  free++;
240  }
241  if (first) {
242  spin_lock_irqsave(&zatm_dev->lock, flags);
243  zwait;
244  zout(virt_to_bus(first),CER);
245  zout(uPD98401_ADD_BAT | (pool << uPD98401_POOL_SHIFT) | count,
246  CMR);
247  spin_unlock_irqrestore(&zatm_dev->lock, flags);
248  EVENT ("POOL: 0x%x, 0x%x\n",
249  zpeekl(zatm_dev,zatm_dev->pool_base+2*pool),
250  zpeekl(zatm_dev,zatm_dev->pool_base+2*pool+1));
251  EVENT("dummy: 0x%08lx, 0x%08lx\n",dummy[0],dummy[1]);
252  }
253 }
254 
255 
256 static void drain_free(struct atm_dev *dev,int pool)
257 {
258  skb_queue_purge(&ZATM_DEV(dev)->pool[pool]);
259 }
260 
261 
262 static int pool_index(int max_pdu)
263 {
264  int i;
265 
266  if (max_pdu % ATM_CELL_PAYLOAD)
267  printk(KERN_ERR DEV_LABEL ": driver error in pool_index: "
268  "max_pdu is %d\n",max_pdu);
269  if (max_pdu > 65536) return -1;
270  for (i = 0; (64 << i) < max_pdu; i++);
271  return i+ZATM_AAL5_POOL_BASE;
272 }
273 
274 
275 /* use_pool isn't reentrant */
276 
277 
278 static void use_pool(struct atm_dev *dev,int pool)
279 {
280  struct zatm_dev *zatm_dev;
281  unsigned long flags;
282  int size;
283 
284  zatm_dev = ZATM_DEV(dev);
285  if (!(zatm_dev->pool_info[pool].ref_count++)) {
286  skb_queue_head_init(&zatm_dev->pool[pool]);
287  size = pool-ZATM_AAL5_POOL_BASE;
288  if (size < 0) size = 0; /* 64B... */
289  else if (size > 10) size = 10; /* ... 64kB */
290  spin_lock_irqsave(&zatm_dev->lock, flags);
291  zpokel(zatm_dev,((zatm_dev->pool_info[pool].low_water/4) <<
293  (1 << uPD98401_RXFP_BTSZ_SHIFT) |
294  (size << uPD98401_RXFP_BFSZ_SHIFT),
295  zatm_dev->pool_base+pool*2);
296  zpokel(zatm_dev,(unsigned long) dummy,zatm_dev->pool_base+
297  pool*2+1);
298  spin_unlock_irqrestore(&zatm_dev->lock, flags);
299  zatm_dev->last_free[pool] = NULL;
300  refill_pool(dev,pool);
301  }
302  DPRINTK("pool %d: %d\n",pool,zatm_dev->pool_info[pool].ref_count);
303 }
304 
305 
306 static void unuse_pool(struct atm_dev *dev,int pool)
307 {
308  if (!(--ZATM_DEV(dev)->pool_info[pool].ref_count))
309  drain_free(dev,pool);
310 }
311 
312 /*----------------------------------- RX ------------------------------------*/
313 
314 
315 #if 0
316 static void exception(struct atm_vcc *vcc)
317 {
318  static int count = 0;
319  struct zatm_dev *zatm_dev = ZATM_DEV(vcc->dev);
320  struct zatm_vcc *zatm_vcc = ZATM_VCC(vcc);
321  unsigned long *qrp;
322  int i;
323 
324  if (count++ > 2) return;
325  for (i = 0; i < 8; i++)
326  printk("TX%d: 0x%08lx\n",i,
327  zpeekl(zatm_dev,zatm_vcc->tx_chan*VC_SIZE/4+i));
328  for (i = 0; i < 5; i++)
329  printk("SH%d: 0x%08lx\n",i,
330  zpeekl(zatm_dev,uPD98401_IM(zatm_vcc->shaper)+16*i));
331  qrp = (unsigned long *) zpeekl(zatm_dev,zatm_vcc->tx_chan*VC_SIZE/4+
333  printk("qrp=0x%08lx\n",(unsigned long) qrp);
334  for (i = 0; i < 4; i++) printk("QRP[%d]: 0x%08lx",i,qrp[i]);
335 }
336 #endif
337 
338 
339 static const char *err_txt[] = {
340  "No error",
341  "RX buf underflow",
342  "RX FIFO overrun",
343  "Maximum len violation",
344  "CRC error",
345  "User abort",
346  "Length violation",
347  "T1 error",
348  "Deactivated",
349  "???",
350  "???",
351  "???",
352  "???",
353  "???",
354  "???",
355  "???"
356 };
357 
358 
359 static void poll_rx(struct atm_dev *dev,int mbx)
360 {
361  struct zatm_dev *zatm_dev;
362  unsigned long pos;
363  u32 x;
364  int error;
365 
366  EVENT("poll_rx\n",0,0);
367  zatm_dev = ZATM_DEV(dev);
368  pos = (zatm_dev->mbx_start[mbx] & ~0xffffUL) | zin(MTA(mbx));
369  while (x = zin(MWA(mbx)), (pos & 0xffff) != x) {
370  u32 *here;
371  struct sk_buff *skb;
372  struct atm_vcc *vcc;
373  int cells,size,chan;
374 
375  EVENT("MBX: host 0x%lx, nic 0x%x\n",pos,x);
376  here = (u32 *) pos;
377  if (((pos += 16) & 0xffff) == zatm_dev->mbx_end[mbx])
378  pos = zatm_dev->mbx_start[mbx];
379  cells = here[0] & uPD98401_AAL5_SIZE;
380 #if 0
381 printk("RX IND: 0x%x, 0x%x, 0x%x, 0x%x\n",here[0],here[1],here[2],here[3]);
382 {
383 unsigned long *x;
384  printk("POOL: 0x%08x, 0x%08x\n",zpeekl(zatm_dev,
385  zatm_dev->pool_base),
386  zpeekl(zatm_dev,zatm_dev->pool_base+1));
387  x = (unsigned long *) here[2];
388  printk("[0..3] = 0x%08lx, 0x%08lx, 0x%08lx, 0x%08lx\n",
389  x[0],x[1],x[2],x[3]);
390 }
391 #endif
392  error = 0;
393  if (here[3] & uPD98401_AAL5_ERR) {
394  error = (here[3] & uPD98401_AAL5_ES) >>
396  if (error == uPD98401_AAL5_ES_DEACT ||
397  error == uPD98401_AAL5_ES_FREE) continue;
398  }
399 EVENT("error code 0x%x/0x%x\n",(here[3] & uPD98401_AAL5_ES) >>
400  uPD98401_AAL5_ES_SHIFT,error);
401  skb = ((struct rx_buffer_head *) bus_to_virt(here[2]))->skb;
402  __net_timestamp(skb);
403 #if 0
404 printk("[-3..0] 0x%08lx 0x%08lx 0x%08lx 0x%08lx\n",((unsigned *) skb->data)[-3],
405  ((unsigned *) skb->data)[-2],((unsigned *) skb->data)[-1],
406  ((unsigned *) skb->data)[0]);
407 #endif
408  EVENT("skb 0x%lx, here 0x%lx\n",(unsigned long) skb,
409  (unsigned long) here);
410 #if 0
411 printk("dummy: 0x%08lx, 0x%08lx\n",dummy[0],dummy[1]);
412 #endif
413  size = error ? 0 : ntohs(((__be16 *) skb->data)[cells*
414  ATM_CELL_PAYLOAD/sizeof(u16)-3]);
415  EVENT("got skb 0x%lx, size %d\n",(unsigned long) skb,size);
416  chan = (here[3] & uPD98401_AAL5_CHAN) >>
418  if (chan < zatm_dev->chans && zatm_dev->rx_map[chan]) {
419  int pos;
420  vcc = zatm_dev->rx_map[chan];
421  pos = ZATM_VCC(vcc)->pool;
422  if (skb == zatm_dev->last_free[pos])
423  zatm_dev->last_free[pos] = NULL;
424  skb_unlink(skb, zatm_dev->pool + pos);
425  }
426  else {
427  printk(KERN_ERR DEV_LABEL "(itf %d): RX indication "
428  "for non-existing channel\n",dev->number);
429  size = 0;
430  vcc = NULL;
431  event_dump();
432  }
433  if (error) {
434  static unsigned long silence = 0;
435  static int last_error = 0;
436 
437  if (error != last_error ||
438  time_after(jiffies, silence) || silence == 0){
439  printk(KERN_WARNING DEV_LABEL "(itf %d): "
440  "chan %d error %s\n",dev->number,chan,
441  err_txt[error]);
442  last_error = error;
443  silence = (jiffies+2*HZ)|1;
444  }
445  size = 0;
446  }
447  if (size && (size > cells*ATM_CELL_PAYLOAD-ATM_AAL5_TRAILER ||
448  size <= (cells-1)*ATM_CELL_PAYLOAD-ATM_AAL5_TRAILER)) {
449  printk(KERN_ERR DEV_LABEL "(itf %d): size %d with %d "
450  "cells\n",dev->number,size,cells);
451  size = 0;
452  event_dump();
453  }
454  if (size > ATM_MAX_AAL5_PDU) {
455  printk(KERN_ERR DEV_LABEL "(itf %d): size too big "
456  "(%d)\n",dev->number,size);
457  size = 0;
458  event_dump();
459  }
460  if (!size) {
461  dev_kfree_skb_irq(skb);
462  if (vcc) atomic_inc(&vcc->stats->rx_err);
463  continue;
464  }
465  if (!atm_charge(vcc,skb->truesize)) {
466  dev_kfree_skb_irq(skb);
467  continue;
468  }
469  skb->len = size;
470  ATM_SKB(skb)->vcc = vcc;
471  vcc->push(vcc,skb);
472  atomic_inc(&vcc->stats->rx);
473  }
474  zout(pos & 0xffff,MTA(mbx));
475 #if 0 /* probably a stupid idea */
476  refill_pool(dev,zatm_vcc->pool);
477  /* maybe this saves us a few interrupts */
478 #endif
479 }
480 
481 
482 static int open_rx_first(struct atm_vcc *vcc)
483 {
484  struct zatm_dev *zatm_dev;
485  struct zatm_vcc *zatm_vcc;
486  unsigned long flags;
487  unsigned short chan;
488  int cells;
489 
490  DPRINTK("open_rx_first (0x%x)\n",inb_p(0xc053));
491  zatm_dev = ZATM_DEV(vcc->dev);
492  zatm_vcc = ZATM_VCC(vcc);
493  zatm_vcc->rx_chan = 0;
494  if (vcc->qos.rxtp.traffic_class == ATM_NONE) return 0;
495  if (vcc->qos.aal == ATM_AAL5) {
496  if (vcc->qos.rxtp.max_sdu > 65464)
497  vcc->qos.rxtp.max_sdu = 65464;
498  /* fix this - we may want to receive 64kB SDUs
499  later */
500  cells = DIV_ROUND_UP(vcc->qos.rxtp.max_sdu + ATM_AAL5_TRAILER,
501  ATM_CELL_PAYLOAD);
502  zatm_vcc->pool = pool_index(cells*ATM_CELL_PAYLOAD);
503  }
504  else {
505  cells = 1;
506  zatm_vcc->pool = ZATM_AAL0_POOL;
507  }
508  if (zatm_vcc->pool < 0) return -EMSGSIZE;
509  spin_lock_irqsave(&zatm_dev->lock, flags);
510  zwait;
512  zwait;
513  DPRINTK("0x%x 0x%x\n",zin(CMR),zin(CER));
515  spin_unlock_irqrestore(&zatm_dev->lock, flags);
516  DPRINTK("chan is %d\n",chan);
517  if (!chan) return -EAGAIN;
518  use_pool(vcc->dev,zatm_vcc->pool);
519  DPRINTK("pool %d\n",zatm_vcc->pool);
520  /* set up VC descriptor */
521  spin_lock_irqsave(&zatm_dev->lock, flags);
522  zpokel(zatm_dev,zatm_vcc->pool << uPD98401_RXVC_POOL_SHIFT,
523  chan*VC_SIZE/4);
524  zpokel(zatm_dev,uPD98401_RXVC_OD | (vcc->qos.aal == ATM_AAL5 ?
525  uPD98401_RXVC_AR : 0) | cells,chan*VC_SIZE/4+1);
526  zpokel(zatm_dev,0,chan*VC_SIZE/4+2);
527  zatm_vcc->rx_chan = chan;
528  zatm_dev->rx_map[chan] = vcc;
529  spin_unlock_irqrestore(&zatm_dev->lock, flags);
530  return 0;
531 }
532 
533 
534 static int open_rx_second(struct atm_vcc *vcc)
535 {
536  struct zatm_dev *zatm_dev;
537  struct zatm_vcc *zatm_vcc;
538  unsigned long flags;
539  int pos,shift;
540 
541  DPRINTK("open_rx_second (0x%x)\n",inb_p(0xc053));
542  zatm_dev = ZATM_DEV(vcc->dev);
543  zatm_vcc = ZATM_VCC(vcc);
544  if (!zatm_vcc->rx_chan) return 0;
545  spin_lock_irqsave(&zatm_dev->lock, flags);
546  /* should also handle VPI @@@ */
547  pos = vcc->vci >> 1;
548  shift = (1-(vcc->vci & 1)) << 4;
549  zpokel(zatm_dev,(zpeekl(zatm_dev,pos) & ~(0xffff << shift)) |
550  ((zatm_vcc->rx_chan | uPD98401_RXLT_ENBL) << shift),pos);
551  spin_unlock_irqrestore(&zatm_dev->lock, flags);
552  return 0;
553 }
554 
555 
556 static void close_rx(struct atm_vcc *vcc)
557 {
558  struct zatm_dev *zatm_dev;
559  struct zatm_vcc *zatm_vcc;
560  unsigned long flags;
561  int pos,shift;
562 
563  zatm_vcc = ZATM_VCC(vcc);
564  zatm_dev = ZATM_DEV(vcc->dev);
565  if (!zatm_vcc->rx_chan) return;
566  DPRINTK("close_rx\n");
567  /* disable receiver */
568  if (vcc->vpi != ATM_VPI_UNSPEC && vcc->vci != ATM_VCI_UNSPEC) {
569  spin_lock_irqsave(&zatm_dev->lock, flags);
570  pos = vcc->vci >> 1;
571  shift = (1-(vcc->vci & 1)) << 4;
572  zpokel(zatm_dev,zpeekl(zatm_dev,pos) & ~(0xffff << shift),pos);
573  zwait;
575  zwait;
577  spin_unlock_irqrestore(&zatm_dev->lock, flags);
578  }
579  spin_lock_irqsave(&zatm_dev->lock, flags);
580  zwait;
583  zwait;
584  udelay(10); /* why oh why ... ? */
587  zwait;
588  if (!(zin(CMR) & uPD98401_CHAN_ADDR))
589  printk(KERN_CRIT DEV_LABEL "(itf %d): can't close RX channel "
590  "%d\n",vcc->dev->number,zatm_vcc->rx_chan);
591  spin_unlock_irqrestore(&zatm_dev->lock, flags);
592  zatm_dev->rx_map[zatm_vcc->rx_chan] = NULL;
593  zatm_vcc->rx_chan = 0;
594  unuse_pool(vcc->dev,zatm_vcc->pool);
595 }
596 
597 
598 static int start_rx(struct atm_dev *dev)
599 {
600  struct zatm_dev *zatm_dev;
601  int size,i;
602 
603 DPRINTK("start_rx\n");
604  zatm_dev = ZATM_DEV(dev);
605  size = sizeof(struct atm_vcc *)*zatm_dev->chans;
606  zatm_dev->rx_map = kzalloc(size,GFP_KERNEL);
607  if (!zatm_dev->rx_map) return -ENOMEM;
608  /* set VPI/VCI split (use all VCIs and give what's left to VPIs) */
609  zpokel(zatm_dev,(1 << dev->ci_range.vci_bits)-1,uPD98401_VRR);
610  /* prepare free buffer pools */
611  for (i = 0; i <= ZATM_LAST_POOL; i++) {
612  zatm_dev->pool_info[i].ref_count = 0;
613  zatm_dev->pool_info[i].rqa_count = 0;
614  zatm_dev->pool_info[i].rqu_count = 0;
615  zatm_dev->pool_info[i].low_water = LOW_MARK;
616  zatm_dev->pool_info[i].high_water = HIGH_MARK;
617  zatm_dev->pool_info[i].offset = 0;
618  zatm_dev->pool_info[i].next_off = 0;
619  zatm_dev->pool_info[i].next_cnt = 0;
620  zatm_dev->pool_info[i].next_thres = OFF_CNG_THRES;
621  }
622  return 0;
623 }
624 
625 
626 /*----------------------------------- TX ------------------------------------*/
627 
628 
629 static int do_tx(struct sk_buff *skb)
630 {
631  struct atm_vcc *vcc;
632  struct zatm_dev *zatm_dev;
633  struct zatm_vcc *zatm_vcc;
634  u32 *dsc;
635  unsigned long flags;
636 
637  EVENT("do_tx\n",0,0);
638  DPRINTK("sending skb %p\n",skb);
639  vcc = ATM_SKB(skb)->vcc;
640  zatm_dev = ZATM_DEV(vcc->dev);
641  zatm_vcc = ZATM_VCC(vcc);
642  EVENT("iovcnt=%d\n",skb_shinfo(skb)->nr_frags,0);
643  spin_lock_irqsave(&zatm_dev->lock, flags);
644  if (!skb_shinfo(skb)->nr_frags) {
645  if (zatm_vcc->txing == RING_ENTRIES-1) {
646  spin_unlock_irqrestore(&zatm_dev->lock, flags);
647  return RING_BUSY;
648  }
649  zatm_vcc->txing++;
650  dsc = zatm_vcc->ring+zatm_vcc->ring_curr;
651  zatm_vcc->ring_curr = (zatm_vcc->ring_curr+RING_WORDS) &
653  dsc[1] = 0;
654  dsc[2] = skb->len;
655  dsc[3] = virt_to_bus(skb->data);
656  mb();
658  | (vcc->qos.aal == ATM_AAL5 ? uPD98401_TXPD_AAL5 : 0 |
659  (ATM_SKB(skb)->atm_options & ATM_ATMOPT_CLP ?
661  EVENT("dsc (0x%lx)\n",(unsigned long) dsc,0);
662  }
663  else {
664 printk("NONONONOO!!!!\n");
665  dsc = NULL;
666 #if 0
667  u32 *put;
668  int i;
669 
670  dsc = kmalloc(uPD98401_TXPD_SIZE * 2 +
671  uPD98401_TXBD_SIZE * ATM_SKB(skb)->iovcnt, GFP_ATOMIC);
672  if (!dsc) {
673  if (vcc->pop)
674  vcc->pop(vcc, skb);
675  else
676  dev_kfree_skb_irq(skb);
677  return -EAGAIN;
678  }
679  /* @@@ should check alignment */
680  put = dsc+8;
681  dsc[0] = uPD98401_TXPD_V | uPD98401_TXPD_DP |
682  (vcc->aal == ATM_AAL5 ? uPD98401_TXPD_AAL5 : 0 |
683  (ATM_SKB(skb)->atm_options & ATM_ATMOPT_CLP ?
685  dsc[1] = 0;
686  dsc[2] = ATM_SKB(skb)->iovcnt * uPD98401_TXBD_SIZE;
687  dsc[3] = virt_to_bus(put);
688  for (i = 0; i < ATM_SKB(skb)->iovcnt; i++) {
689  *put++ = ((struct iovec *) skb->data)[i].iov_len;
690  *put++ = virt_to_bus(((struct iovec *)
691  skb->data)[i].iov_base);
692  }
693  put[-2] |= uPD98401_TXBD_LAST;
694 #endif
695  }
696  ZATM_PRV_DSC(skb) = dsc;
697  skb_queue_tail(&zatm_vcc->tx_queue,skb);
698  DPRINTK("QRP=0x%08lx\n",zpeekl(zatm_dev,zatm_vcc->tx_chan*VC_SIZE/4+
700  zwait;
701  zout(uPD98401_TX_READY | (zatm_vcc->tx_chan <<
703  spin_unlock_irqrestore(&zatm_dev->lock, flags);
704  EVENT("done\n",0,0);
705  return 0;
706 }
707 
708 
709 static inline void dequeue_tx(struct atm_vcc *vcc)
710 {
711  struct zatm_vcc *zatm_vcc;
712  struct sk_buff *skb;
713 
714  EVENT("dequeue_tx\n",0,0);
715  zatm_vcc = ZATM_VCC(vcc);
716  skb = skb_dequeue(&zatm_vcc->tx_queue);
717  if (!skb) {
718  printk(KERN_CRIT DEV_LABEL "(itf %d): dequeue_tx but not "
719  "txing\n",vcc->dev->number);
720  return;
721  }
722 #if 0 /* @@@ would fail on CLP */
724  uPD98401_TXPD_SM | uPD98401_TXPD_AAL5)) printk("@#*$!!!! (%08x)\n",
725  *ZATM_PRV_DSC(skb));
726 #endif
727  *ZATM_PRV_DSC(skb) = 0; /* mark as invalid */
728  zatm_vcc->txing--;
729  if (vcc->pop) vcc->pop(vcc,skb);
730  else dev_kfree_skb_irq(skb);
731  while ((skb = skb_dequeue(&zatm_vcc->backlog)))
732  if (do_tx(skb) == RING_BUSY) {
733  skb_queue_head(&zatm_vcc->backlog,skb);
734  break;
735  }
736  atomic_inc(&vcc->stats->tx);
737  wake_up(&zatm_vcc->tx_wait);
738 }
739 
740 
741 static void poll_tx(struct atm_dev *dev,int mbx)
742 {
743  struct zatm_dev *zatm_dev;
744  unsigned long pos;
745  u32 x;
746 
747  EVENT("poll_tx\n",0,0);
748  zatm_dev = ZATM_DEV(dev);
749  pos = (zatm_dev->mbx_start[mbx] & ~0xffffUL) | zin(MTA(mbx));
750  while (x = zin(MWA(mbx)), (pos & 0xffff) != x) {
751  int chan;
752 
753 #if 1
754  u32 data,*addr;
755 
756  EVENT("MBX: host 0x%lx, nic 0x%x\n",pos,x);
757  addr = (u32 *) pos;
758  data = *addr;
759  chan = (data & uPD98401_TXI_CONN) >> uPD98401_TXI_CONN_SHIFT;
760  EVENT("addr = 0x%lx, data = 0x%08x,",(unsigned long) addr,
761  data);
762  EVENT("chan = %d\n",chan,0);
763 #else
764 NO !
765  chan = (zatm_dev->mbx_start[mbx][pos >> 2] & uPD98401_TXI_CONN)
767 #endif
768  if (chan < zatm_dev->chans && zatm_dev->tx_map[chan])
769  dequeue_tx(zatm_dev->tx_map[chan]);
770  else {
771  printk(KERN_CRIT DEV_LABEL "(itf %d): TX indication "
772  "for non-existing channel %d\n",dev->number,chan);
773  event_dump();
774  }
775  if (((pos += 4) & 0xffff) == zatm_dev->mbx_end[mbx])
776  pos = zatm_dev->mbx_start[mbx];
777  }
778  zout(pos & 0xffff,MTA(mbx));
779 }
780 
781 
782 /*
783  * BUG BUG BUG: Doesn't handle "new-style" rate specification yet.
784  */
785 
786 static int alloc_shaper(struct atm_dev *dev,int *pcr,int min,int max,int ubr)
787 {
788  struct zatm_dev *zatm_dev;
789  unsigned long flags;
790  unsigned long i,m,c;
791  int shaper;
792 
793  DPRINTK("alloc_shaper (min = %d, max = %d)\n",min,max);
794  zatm_dev = ZATM_DEV(dev);
795  if (!zatm_dev->free_shapers) return -EAGAIN;
796  for (shaper = 0; !((zatm_dev->free_shapers >> shaper) & 1); shaper++);
797  zatm_dev->free_shapers &= ~1 << shaper;
798  if (ubr) {
799  c = 5;
800  i = m = 1;
801  zatm_dev->ubr_ref_cnt++;
802  zatm_dev->ubr = shaper;
803  *pcr = 0;
804  }
805  else {
806  if (min) {
807  if (min <= 255) {
808  i = min;
809  m = ATM_OC3_PCR;
810  }
811  else {
812  i = 255;
813  m = ATM_OC3_PCR*255/min;
814  }
815  }
816  else {
817  if (max > zatm_dev->tx_bw) max = zatm_dev->tx_bw;
818  if (max <= 255) {
819  i = max;
820  m = ATM_OC3_PCR;
821  }
822  else {
823  i = 255;
824  m = DIV_ROUND_UP(ATM_OC3_PCR*255, max);
825  }
826  }
827  if (i > m) {
828  printk(KERN_CRIT DEV_LABEL "shaper algorithm botched "
829  "[%d,%d] -> i=%ld,m=%ld\n",min,max,i,m);
830  m = i;
831  }
832  *pcr = i*ATM_OC3_PCR/m;
833  c = 20; /* @@@ should use max_cdv ! */
834  if ((min && *pcr < min) || (max && *pcr > max)) return -EINVAL;
835  if (zatm_dev->tx_bw < *pcr) return -EAGAIN;
836  zatm_dev->tx_bw -= *pcr;
837  }
838  spin_lock_irqsave(&zatm_dev->lock, flags);
839  DPRINTK("i = %d, m = %d, PCR = %d\n",i,m,*pcr);
840  zpokel(zatm_dev,(i << uPD98401_IM_I_SHIFT) | m,uPD98401_IM(shaper));
841  zpokel(zatm_dev,c << uPD98401_PC_C_SHIFT,uPD98401_PC(shaper));
842  zpokel(zatm_dev,0,uPD98401_X(shaper));
843  zpokel(zatm_dev,0,uPD98401_Y(shaper));
844  zpokel(zatm_dev,uPD98401_PS_E,uPD98401_PS(shaper));
845  spin_unlock_irqrestore(&zatm_dev->lock, flags);
846  return shaper;
847 }
848 
849 
850 static void dealloc_shaper(struct atm_dev *dev,int shaper)
851 {
852  struct zatm_dev *zatm_dev;
853  unsigned long flags;
854 
855  zatm_dev = ZATM_DEV(dev);
856  if (shaper == zatm_dev->ubr) {
857  if (--zatm_dev->ubr_ref_cnt) return;
858  zatm_dev->ubr = -1;
859  }
860  spin_lock_irqsave(&zatm_dev->lock, flags);
861  zpokel(zatm_dev,zpeekl(zatm_dev,uPD98401_PS(shaper)) & ~uPD98401_PS_E,
862  uPD98401_PS(shaper));
863  spin_unlock_irqrestore(&zatm_dev->lock, flags);
864  zatm_dev->free_shapers |= 1 << shaper;
865 }
866 
867 
868 static void close_tx(struct atm_vcc *vcc)
869 {
870  struct zatm_dev *zatm_dev;
871  struct zatm_vcc *zatm_vcc;
872  unsigned long flags;
873  int chan;
874 
875  zatm_vcc = ZATM_VCC(vcc);
876  zatm_dev = ZATM_DEV(vcc->dev);
877  chan = zatm_vcc->tx_chan;
878  if (!chan) return;
879  DPRINTK("close_tx\n");
880  if (skb_peek(&zatm_vcc->backlog)) {
881  printk("waiting for backlog to drain ...\n");
882  event_dump();
883  wait_event(zatm_vcc->tx_wait, !skb_peek(&zatm_vcc->backlog));
884  }
885  if (skb_peek(&zatm_vcc->tx_queue)) {
886  printk("waiting for TX queue to drain ...\n");
887  event_dump();
888  wait_event(zatm_vcc->tx_wait, !skb_peek(&zatm_vcc->tx_queue));
889  }
890  spin_lock_irqsave(&zatm_dev->lock, flags);
891 #if 0
892  zwait;
894 #endif
895  zwait;
897  zwait;
898  if (!(zin(CMR) & uPD98401_CHAN_ADDR))
899  printk(KERN_CRIT DEV_LABEL "(itf %d): can't close TX channel "
900  "%d\n",vcc->dev->number,chan);
901  spin_unlock_irqrestore(&zatm_dev->lock, flags);
902  zatm_vcc->tx_chan = 0;
903  zatm_dev->tx_map[chan] = NULL;
904  if (zatm_vcc->shaper != zatm_dev->ubr) {
905  zatm_dev->tx_bw += vcc->qos.txtp.min_pcr;
906  dealloc_shaper(vcc->dev,zatm_vcc->shaper);
907  }
908  kfree(zatm_vcc->ring);
909 }
910 
911 
912 static int open_tx_first(struct atm_vcc *vcc)
913 {
914  struct zatm_dev *zatm_dev;
915  struct zatm_vcc *zatm_vcc;
916  unsigned long flags;
917  u32 *loop;
918  unsigned short chan;
919  int unlimited;
920 
921  DPRINTK("open_tx_first\n");
922  zatm_dev = ZATM_DEV(vcc->dev);
923  zatm_vcc = ZATM_VCC(vcc);
924  zatm_vcc->tx_chan = 0;
925  if (vcc->qos.txtp.traffic_class == ATM_NONE) return 0;
926  spin_lock_irqsave(&zatm_dev->lock, flags);
927  zwait;
929  zwait;
930  DPRINTK("0x%x 0x%x\n",zin(CMR),zin(CER));
932  spin_unlock_irqrestore(&zatm_dev->lock, flags);
933  DPRINTK("chan is %d\n",chan);
934  if (!chan) return -EAGAIN;
935  unlimited = vcc->qos.txtp.traffic_class == ATM_UBR &&
936  (!vcc->qos.txtp.max_pcr || vcc->qos.txtp.max_pcr == ATM_MAX_PCR ||
937  vcc->qos.txtp.max_pcr >= ATM_OC3_PCR);
938  if (unlimited && zatm_dev->ubr != -1) zatm_vcc->shaper = zatm_dev->ubr;
939  else {
940  int uninitialized_var(pcr);
941 
942  if (unlimited) vcc->qos.txtp.max_sdu = ATM_MAX_AAL5_PDU;
943  if ((zatm_vcc->shaper = alloc_shaper(vcc->dev,&pcr,
944  vcc->qos.txtp.min_pcr,vcc->qos.txtp.max_pcr,unlimited))
945  < 0) {
946  close_tx(vcc);
947  return zatm_vcc->shaper;
948  }
949  if (pcr > ATM_OC3_PCR) pcr = ATM_OC3_PCR;
950  vcc->qos.txtp.min_pcr = vcc->qos.txtp.max_pcr = pcr;
951  }
952  zatm_vcc->tx_chan = chan;
953  skb_queue_head_init(&zatm_vcc->tx_queue);
954  init_waitqueue_head(&zatm_vcc->tx_wait);
955  /* initialize ring */
956  zatm_vcc->ring = kzalloc(RING_SIZE,GFP_KERNEL);
957  if (!zatm_vcc->ring) return -ENOMEM;
958  loop = zatm_vcc->ring+RING_ENTRIES*RING_WORDS;
959  loop[0] = uPD98401_TXPD_V;
960  loop[1] = loop[2] = 0;
961  loop[3] = virt_to_bus(zatm_vcc->ring);
962  zatm_vcc->ring_curr = 0;
963  zatm_vcc->txing = 0;
964  skb_queue_head_init(&zatm_vcc->backlog);
965  zpokel(zatm_dev,virt_to_bus(zatm_vcc->ring),
966  chan*VC_SIZE/4+uPD98401_TXVC_QRP);
967  return 0;
968 }
969 
970 
971 static int open_tx_second(struct atm_vcc *vcc)
972 {
973  struct zatm_dev *zatm_dev;
974  struct zatm_vcc *zatm_vcc;
975  unsigned long flags;
976 
977  DPRINTK("open_tx_second\n");
978  zatm_dev = ZATM_DEV(vcc->dev);
979  zatm_vcc = ZATM_VCC(vcc);
980  if (!zatm_vcc->tx_chan) return 0;
981  /* set up VC descriptor */
982  spin_lock_irqsave(&zatm_dev->lock, flags);
983  zpokel(zatm_dev,0,zatm_vcc->tx_chan*VC_SIZE/4);
984  zpokel(zatm_dev,uPD98401_TXVC_L | (zatm_vcc->shaper <<
986  vcc->vci,zatm_vcc->tx_chan*VC_SIZE/4+1);
987  zpokel(zatm_dev,0,zatm_vcc->tx_chan*VC_SIZE/4+2);
988  spin_unlock_irqrestore(&zatm_dev->lock, flags);
989  zatm_dev->tx_map[zatm_vcc->tx_chan] = vcc;
990  return 0;
991 }
992 
993 
994 static int start_tx(struct atm_dev *dev)
995 {
996  struct zatm_dev *zatm_dev;
997  int i;
998 
999  DPRINTK("start_tx\n");
1000  zatm_dev = ZATM_DEV(dev);
1001  zatm_dev->tx_map = kmalloc(sizeof(struct atm_vcc *)*
1002  zatm_dev->chans,GFP_KERNEL);
1003  if (!zatm_dev->tx_map) return -ENOMEM;
1004  zatm_dev->tx_bw = ATM_OC3_PCR;
1005  zatm_dev->free_shapers = (1 << NR_SHAPERS)-1;
1006  zatm_dev->ubr = -1;
1007  zatm_dev->ubr_ref_cnt = 0;
1008  /* initialize shapers */
1009  for (i = 0; i < NR_SHAPERS; i++) zpokel(zatm_dev,0,uPD98401_PS(i));
1010  return 0;
1011 }
1012 
1013 
1014 /*------------------------------- interrupts --------------------------------*/
1015 
1016 
1017 static irqreturn_t zatm_int(int irq,void *dev_id)
1018 {
1019  struct atm_dev *dev;
1020  struct zatm_dev *zatm_dev;
1021  u32 reason;
1022  int handled = 0;
1023 
1024  dev = dev_id;
1025  zatm_dev = ZATM_DEV(dev);
1026  while ((reason = zin(GSR))) {
1027  handled = 1;
1028  EVENT("reason 0x%x\n",reason,0);
1029  if (reason & uPD98401_INT_PI) {
1030  EVENT("PHY int\n",0,0);
1031  dev->phy->interrupt(dev);
1032  }
1033  if (reason & uPD98401_INT_RQA) {
1034  unsigned long pools;
1035  int i;
1036 
1037  pools = zin(RQA);
1038  EVENT("RQA (0x%08x)\n",pools,0);
1039  for (i = 0; pools; i++) {
1040  if (pools & 1) {
1041  refill_pool(dev,i);
1042  zatm_dev->pool_info[i].rqa_count++;
1043  }
1044  pools >>= 1;
1045  }
1046  }
1047  if (reason & uPD98401_INT_RQU) {
1048  unsigned long pools;
1049  int i;
1050  pools = zin(RQU);
1051  printk(KERN_WARNING DEV_LABEL "(itf %d): RQU 0x%08lx\n",
1052  dev->number,pools);
1053  event_dump();
1054  for (i = 0; pools; i++) {
1055  if (pools & 1) {
1056  refill_pool(dev,i);
1057  zatm_dev->pool_info[i].rqu_count++;
1058  }
1059  pools >>= 1;
1060  }
1061  }
1062  /* don't handle RD */
1063  if (reason & uPD98401_INT_SPE)
1064  printk(KERN_ALERT DEV_LABEL "(itf %d): system parity "
1065  "error at 0x%08x\n",dev->number,zin(ADDR));
1066  if (reason & uPD98401_INT_CPE)
1067  printk(KERN_ALERT DEV_LABEL "(itf %d): control memory "
1068  "parity error at 0x%08x\n",dev->number,zin(ADDR));
1069  if (reason & uPD98401_INT_SBE) {
1070  printk(KERN_ALERT DEV_LABEL "(itf %d): system bus "
1071  "error at 0x%08x\n",dev->number,zin(ADDR));
1072  event_dump();
1073  }
1074  /* don't handle IND */
1075  if (reason & uPD98401_INT_MF) {
1076  printk(KERN_CRIT DEV_LABEL "(itf %d): mailbox full "
1077  "(0x%x)\n",dev->number,(reason & uPD98401_INT_MF)
1079  event_dump();
1080  /* @@@ should try to recover */
1081  }
1082  if (reason & uPD98401_INT_MM) {
1083  if (reason & 1) poll_rx(dev,0);
1084  if (reason & 2) poll_rx(dev,1);
1085  if (reason & 4) poll_tx(dev,2);
1086  if (reason & 8) poll_tx(dev,3);
1087  }
1088  /* @@@ handle RCRn */
1089  }
1090  return IRQ_RETVAL(handled);
1091 }
1092 
1093 
1094 /*----------------------------- (E)EPROM access -----------------------------*/
1095 
1096 
1097 static void __devinit eprom_set(struct zatm_dev *zatm_dev,unsigned long value,
1098  unsigned short cmd)
1099 {
1100  int error;
1101 
1102  if ((error = pci_write_config_dword(zatm_dev->pci_dev,cmd,value)))
1103  printk(KERN_ERR DEV_LABEL ": PCI write failed (0x%02x)\n",
1104  error);
1105 }
1106 
1107 
1108 static unsigned long __devinit eprom_get(struct zatm_dev *zatm_dev,
1109  unsigned short cmd)
1110 {
1111  unsigned int value;
1112  int error;
1113 
1114  if ((error = pci_read_config_dword(zatm_dev->pci_dev,cmd,&value)))
1115  printk(KERN_ERR DEV_LABEL ": PCI read failed (0x%02x)\n",
1116  error);
1117  return value;
1118 }
1119 
1120 
1121 static void __devinit eprom_put_bits(struct zatm_dev *zatm_dev,
1122  unsigned long data,int bits,unsigned short cmd)
1123 {
1124  unsigned long value;
1125  int i;
1126 
1127  for (i = bits-1; i >= 0; i--) {
1128  value = ZEPROM_CS | (((data >> i) & 1) ? ZEPROM_DI : 0);
1129  eprom_set(zatm_dev,value,cmd);
1130  eprom_set(zatm_dev,value | ZEPROM_SK,cmd);
1131  eprom_set(zatm_dev,value,cmd);
1132  }
1133 }
1134 
1135 
1136 static void __devinit eprom_get_byte(struct zatm_dev *zatm_dev,
1137  unsigned char *byte,unsigned short cmd)
1138 {
1139  int i;
1140 
1141  *byte = 0;
1142  for (i = 8; i; i--) {
1143  eprom_set(zatm_dev,ZEPROM_CS,cmd);
1144  eprom_set(zatm_dev,ZEPROM_CS | ZEPROM_SK,cmd);
1145  *byte <<= 1;
1146  if (eprom_get(zatm_dev,cmd) & ZEPROM_DO) *byte |= 1;
1147  eprom_set(zatm_dev,ZEPROM_CS,cmd);
1148  }
1149 }
1150 
1151 
1152 static unsigned char __devinit eprom_try_esi(struct atm_dev *dev,
1153  unsigned short cmd,int offset,int swap)
1154 {
1155  unsigned char buf[ZEPROM_SIZE];
1156  struct zatm_dev *zatm_dev;
1157  int i;
1158 
1159  zatm_dev = ZATM_DEV(dev);
1160  for (i = 0; i < ZEPROM_SIZE; i += 2) {
1161  eprom_set(zatm_dev,ZEPROM_CS,cmd); /* select EPROM */
1162  eprom_put_bits(zatm_dev,ZEPROM_CMD_READ,ZEPROM_CMD_LEN,cmd);
1163  eprom_put_bits(zatm_dev,i >> 1,ZEPROM_ADDR_LEN,cmd);
1164  eprom_get_byte(zatm_dev,buf+i+swap,cmd);
1165  eprom_get_byte(zatm_dev,buf+i+1-swap,cmd);
1166  eprom_set(zatm_dev,0,cmd); /* deselect EPROM */
1167  }
1168  memcpy(dev->esi,buf+offset,ESI_LEN);
1169  return memcmp(dev->esi,"\0\0\0\0\0",ESI_LEN); /* assumes ESI_LEN == 6 */
1170 }
1171 
1172 
1173 static void __devinit eprom_get_esi(struct atm_dev *dev)
1174 {
1175  if (eprom_try_esi(dev,ZEPROM_V1_REG,ZEPROM_V1_ESI_OFF,1)) return;
1176  (void) eprom_try_esi(dev,ZEPROM_V2_REG,ZEPROM_V2_ESI_OFF,0);
1177 }
1178 
1179 
1180 /*--------------------------------- entries ---------------------------------*/
1181 
1182 
1183 static int __devinit zatm_init(struct atm_dev *dev)
1184 {
1185  struct zatm_dev *zatm_dev;
1186  struct pci_dev *pci_dev;
1187  unsigned short command;
1188  int error,i,last;
1189  unsigned long t0,t1,t2;
1190 
1191  DPRINTK(">zatm_init\n");
1192  zatm_dev = ZATM_DEV(dev);
1193  spin_lock_init(&zatm_dev->lock);
1194  pci_dev = zatm_dev->pci_dev;
1195  zatm_dev->base = pci_resource_start(pci_dev, 0);
1196  zatm_dev->irq = pci_dev->irq;
1197  if ((error = pci_read_config_word(pci_dev,PCI_COMMAND,&command))) {
1198  printk(KERN_ERR DEV_LABEL "(itf %d): init error 0x%02x\n",
1199  dev->number,error);
1200  return -EINVAL;
1201  }
1202  if ((error = pci_write_config_word(pci_dev,PCI_COMMAND,
1203  command | PCI_COMMAND_IO | PCI_COMMAND_MASTER))) {
1204  printk(KERN_ERR DEV_LABEL "(itf %d): can't enable IO (0x%02x)"
1205  "\n",dev->number,error);
1206  return -EIO;
1207  }
1208  eprom_get_esi(dev);
1209  printk(KERN_NOTICE DEV_LABEL "(itf %d): rev.%d,base=0x%x,irq=%d,",
1210  dev->number,pci_dev->revision,zatm_dev->base,zatm_dev->irq);
1211  /* reset uPD98401 */
1212  zout(0,SWR);
1213  while (!(zin(GSR) & uPD98401_INT_IND));
1214  zout(uPD98401_GMR_ONE /*uPD98401_BURST4*/,GMR);
1215  last = MAX_CRAM_SIZE;
1216  for (i = last-RAM_INCREMENT; i >= 0; i -= RAM_INCREMENT) {
1217  zpokel(zatm_dev,0x55555555,i);
1218  if (zpeekl(zatm_dev,i) != 0x55555555) last = i;
1219  else {
1220  zpokel(zatm_dev,0xAAAAAAAA,i);
1221  if (zpeekl(zatm_dev,i) != 0xAAAAAAAA) last = i;
1222  else zpokel(zatm_dev,i,i);
1223  }
1224  }
1225  for (i = 0; i < last; i += RAM_INCREMENT)
1226  if (zpeekl(zatm_dev,i) != i) break;
1227  zatm_dev->mem = i << 2;
1228  while (i) zpokel(zatm_dev,0,--i);
1229  /* reset again to rebuild memory pointers */
1230  zout(0,SWR);
1231  while (!(zin(GSR) & uPD98401_INT_IND));
1234  /* TODO: should shrink allocation now */
1235  printk("mem=%dkB,%s (",zatm_dev->mem >> 10,zatm_dev->copper ? "UTP" :
1236  "MMF");
1237  for (i = 0; i < ESI_LEN; i++)
1238  printk("%02X%s",dev->esi[i],i == ESI_LEN-1 ? ")\n" : "-");
1239  do {
1240  unsigned long flags;
1241 
1242  spin_lock_irqsave(&zatm_dev->lock, flags);
1243  t0 = zpeekl(zatm_dev,uPD98401_TSR);
1244  udelay(10);
1245  t1 = zpeekl(zatm_dev,uPD98401_TSR);
1246  udelay(1010);
1247  t2 = zpeekl(zatm_dev,uPD98401_TSR);
1248  spin_unlock_irqrestore(&zatm_dev->lock, flags);
1249  }
1250  while (t0 > t1 || t1 > t2); /* loop if wrapping ... */
1251  zatm_dev->khz = t2-2*t1+t0;
1252  printk(KERN_NOTICE DEV_LABEL "(itf %d): uPD98401 %d.%d at %d.%03d "
1253  "MHz\n",dev->number,
1255  zin(VER) & uPD98401_MINOR,zatm_dev->khz/1000,zatm_dev->khz % 1000);
1256  return uPD98402_init(dev);
1257 }
1258 
1259 
1260 static int __devinit zatm_start(struct atm_dev *dev)
1261 {
1262  struct zatm_dev *zatm_dev = ZATM_DEV(dev);
1263  struct pci_dev *pdev = zatm_dev->pci_dev;
1264  unsigned long curr;
1265  int pools,vccs,rx;
1266  int error, i, ld;
1267 
1268  DPRINTK("zatm_start\n");
1269  zatm_dev->rx_map = zatm_dev->tx_map = NULL;
1270  for (i = 0; i < NR_MBX; i++)
1271  zatm_dev->mbx_start[i] = 0;
1272  error = request_irq(zatm_dev->irq, zatm_int, IRQF_SHARED, DEV_LABEL, dev);
1273  if (error < 0) {
1274  printk(KERN_ERR DEV_LABEL "(itf %d): IRQ%d is already in use\n",
1275  dev->number,zatm_dev->irq);
1276  goto done;
1277  }
1278  /* define memory regions */
1279  pools = NR_POOLS;
1280  if (NR_SHAPERS*SHAPER_SIZE > pools*POOL_SIZE)
1281  pools = NR_SHAPERS*SHAPER_SIZE/POOL_SIZE;
1282  vccs = (zatm_dev->mem-NR_SHAPERS*SHAPER_SIZE-pools*POOL_SIZE)/
1283  (2*VC_SIZE+RX_SIZE);
1284  ld = -1;
1285  for (rx = 1; rx < vccs; rx <<= 1) ld++;
1286  dev->ci_range.vpi_bits = 0; /* @@@ no VPI for now */
1287  dev->ci_range.vci_bits = ld;
1288  dev->link_rate = ATM_OC3_PCR;
1289  zatm_dev->chans = vccs; /* ??? */
1290  curr = rx*RX_SIZE/4;
1291  DPRINTK("RX pool 0x%08lx\n",curr);
1292  zpokel(zatm_dev,curr,uPD98401_PMA); /* receive pool */
1293  zatm_dev->pool_base = curr;
1294  curr += pools*POOL_SIZE/4;
1295  DPRINTK("Shapers 0x%08lx\n",curr);
1296  zpokel(zatm_dev,curr,uPD98401_SMA); /* shapers */
1297  curr += NR_SHAPERS*SHAPER_SIZE/4;
1298  DPRINTK("Free 0x%08lx\n",curr);
1299  zpokel(zatm_dev,curr,uPD98401_TOS); /* free pool */
1300  printk(KERN_INFO DEV_LABEL "(itf %d): %d shapers, %d pools, %d RX, "
1301  "%ld VCs\n",dev->number,NR_SHAPERS,pools,rx,
1302  (zatm_dev->mem-curr*4)/VC_SIZE);
1303  /* create mailboxes */
1304  for (i = 0; i < NR_MBX; i++) {
1305  void *mbx;
1306  dma_addr_t mbx_dma;
1307 
1308  if (!mbx_entries[i])
1309  continue;
1310  mbx = pci_alloc_consistent(pdev, 2*MBX_SIZE(i), &mbx_dma);
1311  if (!mbx) {
1312  error = -ENOMEM;
1313  goto out;
1314  }
1315  /*
1316  * Alignment provided by pci_alloc_consistent() isn't enough
1317  * for this device.
1318  */
1319  if (((unsigned long)mbx ^ mbx_dma) & 0xffff) {
1320  printk(KERN_ERR DEV_LABEL "(itf %d): system "
1321  "bus incompatible with driver\n", dev->number);
1322  pci_free_consistent(pdev, 2*MBX_SIZE(i), mbx, mbx_dma);
1323  error = -ENODEV;
1324  goto out;
1325  }
1326  DPRINTK("mbx@0x%08lx-0x%08lx\n", mbx, mbx + MBX_SIZE(i));
1327  zatm_dev->mbx_start[i] = (unsigned long)mbx;
1328  zatm_dev->mbx_dma[i] = mbx_dma;
1329  zatm_dev->mbx_end[i] = (zatm_dev->mbx_start[i] + MBX_SIZE(i)) &
1330  0xffff;
1331  zout(mbx_dma >> 16, MSH(i));
1332  zout(mbx_dma, MSL(i));
1333  zout(zatm_dev->mbx_end[i], MBA(i));
1334  zout((unsigned long)mbx & 0xffff, MTA(i));
1335  zout((unsigned long)mbx & 0xffff, MWA(i));
1336  }
1337  error = start_tx(dev);
1338  if (error)
1339  goto out;
1340  error = start_rx(dev);
1341  if (error)
1342  goto out_tx;
1343  error = dev->phy->start(dev);
1344  if (error)
1345  goto out_rx;
1346  zout(0xffffffff,IMR); /* enable interrupts */
1347  /* enable TX & RX */
1348  zout(zin(GMR) | uPD98401_GMR_SE | uPD98401_GMR_RE,GMR);
1349 done:
1350  return error;
1351 
1352 out_rx:
1353  kfree(zatm_dev->rx_map);
1354 out_tx:
1355  kfree(zatm_dev->tx_map);
1356 out:
1357  while (i-- > 0) {
1358  pci_free_consistent(pdev, 2*MBX_SIZE(i),
1359  (void *)zatm_dev->mbx_start[i],
1360  zatm_dev->mbx_dma[i]);
1361  }
1362  free_irq(zatm_dev->irq, dev);
1363  goto done;
1364 }
1365 
1366 
1367 static void zatm_close(struct atm_vcc *vcc)
1368 {
1369  DPRINTK(">zatm_close\n");
1370  if (!ZATM_VCC(vcc)) return;
1371  clear_bit(ATM_VF_READY,&vcc->flags);
1372  close_rx(vcc);
1373  EVENT("close_tx\n",0,0);
1374  close_tx(vcc);
1375  DPRINTK("zatm_close: done waiting\n");
1376  /* deallocate memory */
1377  kfree(ZATM_VCC(vcc));
1378  vcc->dev_data = NULL;
1379  clear_bit(ATM_VF_ADDR,&vcc->flags);
1380 }
1381 
1382 
1383 static int zatm_open(struct atm_vcc *vcc)
1384 {
1385  struct zatm_dev *zatm_dev;
1386  struct zatm_vcc *zatm_vcc;
1387  short vpi = vcc->vpi;
1388  int vci = vcc->vci;
1389  int error;
1390 
1391  DPRINTK(">zatm_open\n");
1392  zatm_dev = ZATM_DEV(vcc->dev);
1393  if (!test_bit(ATM_VF_PARTIAL,&vcc->flags))
1394  vcc->dev_data = NULL;
1395  if (vci != ATM_VPI_UNSPEC && vpi != ATM_VCI_UNSPEC)
1396  set_bit(ATM_VF_ADDR,&vcc->flags);
1397  if (vcc->qos.aal != ATM_AAL5) return -EINVAL; /* @@@ AAL0 */
1398  DPRINTK(DEV_LABEL "(itf %d): open %d.%d\n",vcc->dev->number,vcc->vpi,
1399  vcc->vci);
1400  if (!test_bit(ATM_VF_PARTIAL,&vcc->flags)) {
1401  zatm_vcc = kmalloc(sizeof(struct zatm_vcc),GFP_KERNEL);
1402  if (!zatm_vcc) {
1403  clear_bit(ATM_VF_ADDR,&vcc->flags);
1404  return -ENOMEM;
1405  }
1406  vcc->dev_data = zatm_vcc;
1407  ZATM_VCC(vcc)->tx_chan = 0; /* for zatm_close after open_rx */
1408  if ((error = open_rx_first(vcc))) {
1409  zatm_close(vcc);
1410  return error;
1411  }
1412  if ((error = open_tx_first(vcc))) {
1413  zatm_close(vcc);
1414  return error;
1415  }
1416  }
1417  if (vci == ATM_VPI_UNSPEC || vpi == ATM_VCI_UNSPEC) return 0;
1418  if ((error = open_rx_second(vcc))) {
1419  zatm_close(vcc);
1420  return error;
1421  }
1422  if ((error = open_tx_second(vcc))) {
1423  zatm_close(vcc);
1424  return error;
1425  }
1426  set_bit(ATM_VF_READY,&vcc->flags);
1427  return 0;
1428 }
1429 
1430 
1431 static int zatm_change_qos(struct atm_vcc *vcc,struct atm_qos *qos,int flags)
1432 {
1433  printk("Not yet implemented\n");
1434  return -ENOSYS;
1435  /* @@@ */
1436 }
1437 
1438 
1439 static int zatm_ioctl(struct atm_dev *dev,unsigned int cmd,void __user *arg)
1440 {
1441  struct zatm_dev *zatm_dev;
1442  unsigned long flags;
1443 
1444  zatm_dev = ZATM_DEV(dev);
1445  switch (cmd) {
1446  case ZATM_GETPOOLZ:
1447  if (!capable(CAP_NET_ADMIN)) return -EPERM;
1448  /* fall through */
1449  case ZATM_GETPOOL:
1450  {
1451  struct zatm_pool_info info;
1452  int pool;
1453 
1454  if (get_user(pool,
1455  &((struct zatm_pool_req __user *) arg)->pool_num))
1456  return -EFAULT;
1458  return -EINVAL;
1459  spin_lock_irqsave(&zatm_dev->lock, flags);
1460  info = zatm_dev->pool_info[pool];
1461  if (cmd == ZATM_GETPOOLZ) {
1462  zatm_dev->pool_info[pool].rqa_count = 0;
1463  zatm_dev->pool_info[pool].rqu_count = 0;
1464  }
1465  spin_unlock_irqrestore(&zatm_dev->lock, flags);
1466  return copy_to_user(
1467  &((struct zatm_pool_req __user *) arg)->info,
1468  &info,sizeof(info)) ? -EFAULT : 0;
1469  }
1470  case ZATM_SETPOOL:
1471  {
1472  struct zatm_pool_info info;
1473  int pool;
1474 
1475  if (!capable(CAP_NET_ADMIN)) return -EPERM;
1476  if (get_user(pool,
1477  &((struct zatm_pool_req __user *) arg)->pool_num))
1478  return -EFAULT;
1479  if (pool < 0 || pool > ZATM_LAST_POOL)
1480  return -EINVAL;
1481  if (copy_from_user(&info,
1482  &((struct zatm_pool_req __user *) arg)->info,
1483  sizeof(info))) return -EFAULT;
1484  if (!info.low_water)
1485  info.low_water = zatm_dev->
1486  pool_info[pool].low_water;
1487  if (!info.high_water)
1488  info.high_water = zatm_dev->
1489  pool_info[pool].high_water;
1490  if (!info.next_thres)
1491  info.next_thres = zatm_dev->
1492  pool_info[pool].next_thres;
1493  if (info.low_water >= info.high_water ||
1494  info.low_water < 0)
1495  return -EINVAL;
1496  spin_lock_irqsave(&zatm_dev->lock, flags);
1497  zatm_dev->pool_info[pool].low_water =
1498  info.low_water;
1499  zatm_dev->pool_info[pool].high_water =
1500  info.high_water;
1501  zatm_dev->pool_info[pool].next_thres =
1502  info.next_thres;
1503  spin_unlock_irqrestore(&zatm_dev->lock, flags);
1504  return 0;
1505  }
1506  default:
1507  if (!dev->phy->ioctl) return -ENOIOCTLCMD;
1508  return dev->phy->ioctl(dev,cmd,arg);
1509  }
1510 }
1511 
1512 
1513 static int zatm_getsockopt(struct atm_vcc *vcc,int level,int optname,
1514  void __user *optval,int optlen)
1515 {
1516  return -EINVAL;
1517 }
1518 
1519 
1520 static int zatm_setsockopt(struct atm_vcc *vcc,int level,int optname,
1521  void __user *optval,unsigned int optlen)
1522 {
1523  return -EINVAL;
1524 }
1525 
1526 static int zatm_send(struct atm_vcc *vcc,struct sk_buff *skb)
1527 {
1528  int error;
1529 
1530  EVENT(">zatm_send 0x%lx\n",(unsigned long) skb,0);
1531  if (!ZATM_VCC(vcc)->tx_chan || !test_bit(ATM_VF_READY,&vcc->flags)) {
1532  if (vcc->pop) vcc->pop(vcc,skb);
1533  else dev_kfree_skb(skb);
1534  return -EINVAL;
1535  }
1536  if (!skb) {
1537  printk(KERN_CRIT "!skb in zatm_send ?\n");
1538  if (vcc->pop) vcc->pop(vcc,skb);
1539  return -EINVAL;
1540  }
1541  ATM_SKB(skb)->vcc = vcc;
1542  error = do_tx(skb);
1543  if (error != RING_BUSY) return error;
1544  skb_queue_tail(&ZATM_VCC(vcc)->backlog,skb);
1545  return 0;
1546 }
1547 
1548 
1549 static void zatm_phy_put(struct atm_dev *dev,unsigned char value,
1550  unsigned long addr)
1551 {
1552  struct zatm_dev *zatm_dev;
1553 
1554  zatm_dev = ZATM_DEV(dev);
1555  zwait;
1556  zout(value,CER);
1559 }
1560 
1561 
1562 static unsigned char zatm_phy_get(struct atm_dev *dev,unsigned long addr)
1563 {
1564  struct zatm_dev *zatm_dev;
1565 
1566  zatm_dev = ZATM_DEV(dev);
1567  zwait;
1570  zwait;
1571  return zin(CER) & 0xff;
1572 }
1573 
1574 
1575 static const struct atmdev_ops ops = {
1576  .open = zatm_open,
1577  .close = zatm_close,
1578  .ioctl = zatm_ioctl,
1579  .getsockopt = zatm_getsockopt,
1580  .setsockopt = zatm_setsockopt,
1581  .send = zatm_send,
1582  .phy_put = zatm_phy_put,
1583  .phy_get = zatm_phy_get,
1584  .change_qos = zatm_change_qos,
1585 };
1586 
1587 static int __devinit zatm_init_one(struct pci_dev *pci_dev,
1588  const struct pci_device_id *ent)
1589 {
1590  struct atm_dev *dev;
1591  struct zatm_dev *zatm_dev;
1592  int ret = -ENOMEM;
1593 
1594  zatm_dev = kmalloc(sizeof(*zatm_dev), GFP_KERNEL);
1595  if (!zatm_dev) {
1596  printk(KERN_EMERG "%s: memory shortage\n", DEV_LABEL);
1597  goto out;
1598  }
1599 
1600  dev = atm_dev_register(DEV_LABEL, &pci_dev->dev, &ops, -1, NULL);
1601  if (!dev)
1602  goto out_free;
1603 
1604  ret = pci_enable_device(pci_dev);
1605  if (ret < 0)
1606  goto out_deregister;
1607 
1608  ret = pci_request_regions(pci_dev, DEV_LABEL);
1609  if (ret < 0)
1610  goto out_disable;
1611 
1612  zatm_dev->pci_dev = pci_dev;
1613  dev->dev_data = zatm_dev;
1614  zatm_dev->copper = (int)ent->driver_data;
1615  if ((ret = zatm_init(dev)) || (ret = zatm_start(dev)))
1616  goto out_release;
1617 
1618  pci_set_drvdata(pci_dev, dev);
1619  zatm_dev->more = zatm_boards;
1620  zatm_boards = dev;
1621  ret = 0;
1622 out:
1623  return ret;
1624 
1625 out_release:
1626  pci_release_regions(pci_dev);
1627 out_disable:
1628  pci_disable_device(pci_dev);
1629 out_deregister:
1630  atm_dev_deregister(dev);
1631 out_free:
1632  kfree(zatm_dev);
1633  goto out;
1634 }
1635 
1636 
1637 MODULE_LICENSE("GPL");
1638 
1639 static struct pci_device_id zatm_pci_tbl[] __devinitdata = {
1641  { PCI_VDEVICE(ZEITNET, PCI_DEVICE_ID_ZEITNET_1225), 0 },
1642  { 0, }
1643 };
1644 MODULE_DEVICE_TABLE(pci, zatm_pci_tbl);
1645 
1646 static struct pci_driver zatm_driver = {
1647  .name = DEV_LABEL,
1648  .id_table = zatm_pci_tbl,
1649  .probe = zatm_init_one,
1650 };
1651 
1652 static int __init zatm_init_module(void)
1653 {
1654  return pci_register_driver(&zatm_driver);
1655 }
1656 
1657 module_init(zatm_init_module);
1658 /* module_exit not defined so not unloadable */