[PATCH] W1: w1_netlink: New init/fini netlink callbacks.
[linux-2.6/verdex.git] / drivers / atm / zatm.c
blob55959e4d1cb77d3aef5269340fff23241f873d58
1 /* drivers/atm/zatm.c - ZeitNet ZN122x device driver */
3 /* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */
6 #include <linux/config.h>
7 #include <linux/module.h>
8 #include <linux/sched.h>
9 #include <linux/kernel.h>
10 #include <linux/mm.h>
11 #include <linux/pci.h>
12 #include <linux/errno.h>
13 #include <linux/atm.h>
14 #include <linux/atmdev.h>
15 #include <linux/sonet.h>
16 #include <linux/skbuff.h>
17 #include <linux/netdevice.h>
18 #include <linux/delay.h>
19 #include <linux/uio.h>
20 #include <linux/init.h>
21 #include <linux/dma-mapping.h>
22 #include <linux/atm_zatm.h>
23 #include <linux/capability.h>
24 #include <linux/bitops.h>
25 #include <linux/wait.h>
26 #include <asm/byteorder.h>
27 #include <asm/system.h>
28 #include <asm/string.h>
29 #include <asm/io.h>
30 #include <asm/atomic.h>
31 #include <asm/uaccess.h>
33 #include "uPD98401.h"
34 #include "uPD98402.h"
35 #include "zeprom.h"
36 #include "zatm.h"
40 * TODO:
42 * Minor features
43 * - support 64 kB SDUs (will have to use multibuffer batches then :-( )
44 * - proper use of CDV, credit = max(1,CDVT*PCR)
45 * - AAL0
46 * - better receive timestamps
47 * - OAM
50 #define ZATM_COPPER 1
52 #if 0
53 #define DPRINTK(format,args...) printk(KERN_DEBUG format,##args)
54 #else
55 #define DPRINTK(format,args...)
56 #endif
58 #ifndef CONFIG_ATM_ZATM_DEBUG
61 #define NULLCHECK(x)
63 #define EVENT(s,a,b)
66 static void event_dump(void)
71 #else
74 /*
75 * NULL pointer checking
78 #define NULLCHECK(x) \
79 if ((unsigned long) (x) < 0x30) printk(KERN_CRIT #x "==0x%x\n", (int) (x))
82 * Very extensive activity logging. Greatly improves bug detection speed but
83 * costs a few Mbps if enabled.
86 #define EV 64
88 static const char *ev[EV];
89 static unsigned long ev_a[EV],ev_b[EV];
90 static int ec = 0;
93 static void EVENT(const char *s,unsigned long a,unsigned long b)
95 ev[ec] = s;
96 ev_a[ec] = a;
97 ev_b[ec] = b;
98 ec = (ec+1) % EV;
102 static void event_dump(void)
104 int n,i;
106 printk(KERN_NOTICE "----- event dump follows -----\n");
107 for (n = 0; n < EV; n++) {
108 i = (ec+n) % EV;
109 printk(KERN_NOTICE);
110 printk(ev[i] ? ev[i] : "(null)",ev_a[i],ev_b[i]);
112 printk(KERN_NOTICE "----- event dump ends here -----\n");
116 #endif /* CONFIG_ATM_ZATM_DEBUG */
119 #define RING_BUSY 1 /* indication from do_tx that PDU has to be
120 backlogged */
122 static struct atm_dev *zatm_boards = NULL;
123 static unsigned long dummy[2] = {0,0};
126 #define zin_n(r) inl(zatm_dev->base+r*4)
127 #define zin(r) inl(zatm_dev->base+uPD98401_##r*4)
128 #define zout(v,r) outl(v,zatm_dev->base+uPD98401_##r*4)
129 #define zwait while (zin(CMR) & uPD98401_BUSY)
131 /* RX0, RX1, TX0, TX1 */
132 static const int mbx_entries[NR_MBX] = { 1024,1024,1024,1024 };
133 static const int mbx_esize[NR_MBX] = { 16,16,4,4 }; /* entry size in bytes */
135 #define MBX_SIZE(i) (mbx_entries[i]*mbx_esize[i])
138 /*-------------------------------- utilities --------------------------------*/
141 static void zpokel(struct zatm_dev *zatm_dev,u32 value,u32 addr)
143 zwait;
144 zout(value,CER);
145 zout(uPD98401_IND_ACC | uPD98401_IA_BALL |
146 (uPD98401_IA_TGT_CM << uPD98401_IA_TGT_SHIFT) | addr,CMR);
150 static u32 zpeekl(struct zatm_dev *zatm_dev,u32 addr)
152 zwait;
153 zout(uPD98401_IND_ACC | uPD98401_IA_BALL | uPD98401_IA_RW |
154 (uPD98401_IA_TGT_CM << uPD98401_IA_TGT_SHIFT) | addr,CMR);
155 zwait;
156 return zin(CER);
160 /*------------------------------- free lists --------------------------------*/
164 * Free buffer head structure:
165 * [0] pointer to buffer (for SAR)
166 * [1] buffer descr link pointer (for SAR)
167 * [2] back pointer to skb (for poll_rx)
168 * [3] data
169 * ...
172 struct rx_buffer_head {
173 u32 buffer; /* pointer to buffer (for SAR) */
174 u32 link; /* buffer descriptor link pointer (for SAR) */
175 struct sk_buff *skb; /* back pointer to skb (for poll_rx) */
179 static void refill_pool(struct atm_dev *dev,int pool)
181 struct zatm_dev *zatm_dev;
182 struct sk_buff *skb;
183 struct rx_buffer_head *first;
184 unsigned long flags;
185 int align,offset,free,count,size;
187 EVENT("refill_pool\n",0,0);
188 zatm_dev = ZATM_DEV(dev);
189 size = (64 << (pool <= ZATM_AAL5_POOL_BASE ? 0 :
190 pool-ZATM_AAL5_POOL_BASE))+sizeof(struct rx_buffer_head);
191 if (size < PAGE_SIZE) {
192 align = 32; /* for 32 byte alignment */
193 offset = sizeof(struct rx_buffer_head);
195 else {
196 align = 4096;
197 offset = zatm_dev->pool_info[pool].offset+
198 sizeof(struct rx_buffer_head);
200 size += align;
201 spin_lock_irqsave(&zatm_dev->lock, flags);
202 free = zpeekl(zatm_dev,zatm_dev->pool_base+2*pool) &
203 uPD98401_RXFP_REMAIN;
204 spin_unlock_irqrestore(&zatm_dev->lock, flags);
205 if (free >= zatm_dev->pool_info[pool].low_water) return;
206 EVENT("starting ... POOL: 0x%x, 0x%x\n",
207 zpeekl(zatm_dev,zatm_dev->pool_base+2*pool),
208 zpeekl(zatm_dev,zatm_dev->pool_base+2*pool+1));
209 EVENT("dummy: 0x%08lx, 0x%08lx\n",dummy[0],dummy[1]);
210 count = 0;
211 first = NULL;
212 while (free < zatm_dev->pool_info[pool].high_water) {
213 struct rx_buffer_head *head;
215 skb = alloc_skb(size,GFP_ATOMIC);
216 if (!skb) {
217 printk(KERN_WARNING DEV_LABEL "(Itf %d): got no new "
218 "skb (%d) with %d free\n",dev->number,size,free);
219 break;
221 skb_reserve(skb,(unsigned char *) ((((unsigned long) skb->data+
222 align+offset-1) & ~(unsigned long) (align-1))-offset)-
223 skb->data);
224 head = (struct rx_buffer_head *) skb->data;
225 skb_reserve(skb,sizeof(struct rx_buffer_head));
226 if (!first) first = head;
227 count++;
228 head->buffer = virt_to_bus(skb->data);
229 head->link = 0;
230 head->skb = skb;
231 EVENT("enq skb 0x%08lx/0x%08lx\n",(unsigned long) skb,
232 (unsigned long) head);
233 spin_lock_irqsave(&zatm_dev->lock, flags);
234 if (zatm_dev->last_free[pool])
235 ((struct rx_buffer_head *) (zatm_dev->last_free[pool]->
236 data))[-1].link = virt_to_bus(head);
237 zatm_dev->last_free[pool] = skb;
238 skb_queue_tail(&zatm_dev->pool[pool],skb);
239 spin_unlock_irqrestore(&zatm_dev->lock, flags);
240 free++;
242 if (first) {
243 spin_lock_irqsave(&zatm_dev->lock, flags);
244 zwait;
245 zout(virt_to_bus(first),CER);
246 zout(uPD98401_ADD_BAT | (pool << uPD98401_POOL_SHIFT) | count,
247 CMR);
248 spin_unlock_irqrestore(&zatm_dev->lock, flags);
249 EVENT ("POOL: 0x%x, 0x%x\n",
250 zpeekl(zatm_dev,zatm_dev->pool_base+2*pool),
251 zpeekl(zatm_dev,zatm_dev->pool_base+2*pool+1));
252 EVENT("dummy: 0x%08lx, 0x%08lx\n",dummy[0],dummy[1]);
257 static void drain_free(struct atm_dev *dev,int pool)
259 skb_queue_purge(&ZATM_DEV(dev)->pool[pool]);
263 static int pool_index(int max_pdu)
265 int i;
267 if (max_pdu % ATM_CELL_PAYLOAD)
268 printk(KERN_ERR DEV_LABEL ": driver error in pool_index: "
269 "max_pdu is %d\n",max_pdu);
270 if (max_pdu > 65536) return -1;
271 for (i = 0; (64 << i) < max_pdu; i++);
272 return i+ZATM_AAL5_POOL_BASE;
276 /* use_pool isn't reentrant */
279 static void use_pool(struct atm_dev *dev,int pool)
281 struct zatm_dev *zatm_dev;
282 unsigned long flags;
283 int size;
285 zatm_dev = ZATM_DEV(dev);
286 if (!(zatm_dev->pool_info[pool].ref_count++)) {
287 skb_queue_head_init(&zatm_dev->pool[pool]);
288 size = pool-ZATM_AAL5_POOL_BASE;
289 if (size < 0) size = 0; /* 64B... */
290 else if (size > 10) size = 10; /* ... 64kB */
291 spin_lock_irqsave(&zatm_dev->lock, flags);
292 zpokel(zatm_dev,((zatm_dev->pool_info[pool].low_water/4) <<
293 uPD98401_RXFP_ALERT_SHIFT) |
294 (1 << uPD98401_RXFP_BTSZ_SHIFT) |
295 (size << uPD98401_RXFP_BFSZ_SHIFT),
296 zatm_dev->pool_base+pool*2);
297 zpokel(zatm_dev,(unsigned long) dummy,zatm_dev->pool_base+
298 pool*2+1);
299 spin_unlock_irqrestore(&zatm_dev->lock, flags);
300 zatm_dev->last_free[pool] = NULL;
301 refill_pool(dev,pool);
303 DPRINTK("pool %d: %d\n",pool,zatm_dev->pool_info[pool].ref_count);
307 static void unuse_pool(struct atm_dev *dev,int pool)
309 if (!(--ZATM_DEV(dev)->pool_info[pool].ref_count))
310 drain_free(dev,pool);
313 /*----------------------------------- RX ------------------------------------*/
316 #if 0
317 static void exception(struct atm_vcc *vcc)
319 static int count = 0;
320 struct zatm_dev *zatm_dev = ZATM_DEV(vcc->dev);
321 struct zatm_vcc *zatm_vcc = ZATM_VCC(vcc);
322 unsigned long *qrp;
323 int i;
325 if (count++ > 2) return;
326 for (i = 0; i < 8; i++)
327 printk("TX%d: 0x%08lx\n",i,
328 zpeekl(zatm_dev,zatm_vcc->tx_chan*VC_SIZE/4+i));
329 for (i = 0; i < 5; i++)
330 printk("SH%d: 0x%08lx\n",i,
331 zpeekl(zatm_dev,uPD98401_IM(zatm_vcc->shaper)+16*i));
332 qrp = (unsigned long *) zpeekl(zatm_dev,zatm_vcc->tx_chan*VC_SIZE/4+
333 uPD98401_TXVC_QRP);
334 printk("qrp=0x%08lx\n",(unsigned long) qrp);
335 for (i = 0; i < 4; i++) printk("QRP[%d]: 0x%08lx",i,qrp[i]);
337 #endif
340 static const char *err_txt[] = {
341 "No error",
342 "RX buf underflow",
343 "RX FIFO overrun",
344 "Maximum len violation",
345 "CRC error",
346 "User abort",
347 "Length violation",
348 "T1 error",
349 "Deactivated",
350 "???",
351 "???",
352 "???",
353 "???",
354 "???",
355 "???",
356 "???"
360 static void poll_rx(struct atm_dev *dev,int mbx)
362 struct zatm_dev *zatm_dev;
363 unsigned long pos;
364 u32 x;
365 int error;
367 EVENT("poll_rx\n",0,0);
368 zatm_dev = ZATM_DEV(dev);
369 pos = (zatm_dev->mbx_start[mbx] & ~0xffffUL) | zin(MTA(mbx));
370 while (x = zin(MWA(mbx)), (pos & 0xffff) != x) {
371 u32 *here;
372 struct sk_buff *skb;
373 struct atm_vcc *vcc;
374 int cells,size,chan;
376 EVENT("MBX: host 0x%lx, nic 0x%x\n",pos,x);
377 here = (u32 *) pos;
378 if (((pos += 16) & 0xffff) == zatm_dev->mbx_end[mbx])
379 pos = zatm_dev->mbx_start[mbx];
380 cells = here[0] & uPD98401_AAL5_SIZE;
381 #if 0
382 printk("RX IND: 0x%x, 0x%x, 0x%x, 0x%x\n",here[0],here[1],here[2],here[3]);
384 unsigned long *x;
385 printk("POOL: 0x%08x, 0x%08x\n",zpeekl(zatm_dev,
386 zatm_dev->pool_base),
387 zpeekl(zatm_dev,zatm_dev->pool_base+1));
388 x = (unsigned long *) here[2];
389 printk("[0..3] = 0x%08lx, 0x%08lx, 0x%08lx, 0x%08lx\n",
390 x[0],x[1],x[2],x[3]);
392 #endif
393 error = 0;
394 if (here[3] & uPD98401_AAL5_ERR) {
395 error = (here[3] & uPD98401_AAL5_ES) >>
396 uPD98401_AAL5_ES_SHIFT;
397 if (error == uPD98401_AAL5_ES_DEACT ||
398 error == uPD98401_AAL5_ES_FREE) continue;
400 EVENT("error code 0x%x/0x%x\n",(here[3] & uPD98401_AAL5_ES) >>
401 uPD98401_AAL5_ES_SHIFT,error);
402 skb = ((struct rx_buffer_head *) bus_to_virt(here[2]))->skb;
403 __net_timestamp(skb);
404 #if 0
405 printk("[-3..0] 0x%08lx 0x%08lx 0x%08lx 0x%08lx\n",((unsigned *) skb->data)[-3],
406 ((unsigned *) skb->data)[-2],((unsigned *) skb->data)[-1],
407 ((unsigned *) skb->data)[0]);
408 #endif
409 EVENT("skb 0x%lx, here 0x%lx\n",(unsigned long) skb,
410 (unsigned long) here);
411 #if 0
412 printk("dummy: 0x%08lx, 0x%08lx\n",dummy[0],dummy[1]);
413 #endif
414 size = error ? 0 : ntohs(((__be16 *) skb->data)[cells*
415 ATM_CELL_PAYLOAD/sizeof(u16)-3]);
416 EVENT("got skb 0x%lx, size %d\n",(unsigned long) skb,size);
417 chan = (here[3] & uPD98401_AAL5_CHAN) >>
418 uPD98401_AAL5_CHAN_SHIFT;
419 if (chan < zatm_dev->chans && zatm_dev->rx_map[chan]) {
420 int pos;
421 vcc = zatm_dev->rx_map[chan];
422 pos = ZATM_VCC(vcc)->pool;
423 if (skb == zatm_dev->last_free[pos])
424 zatm_dev->last_free[pos] = NULL;
425 skb_unlink(skb, zatm_dev->pool + pos);
427 else {
428 printk(KERN_ERR DEV_LABEL "(itf %d): RX indication "
429 "for non-existing channel\n",dev->number);
430 size = 0;
431 vcc = NULL;
432 event_dump();
434 if (error) {
435 static unsigned long silence = 0;
436 static int last_error = 0;
438 if (error != last_error ||
439 time_after(jiffies, silence) || silence == 0){
440 printk(KERN_WARNING DEV_LABEL "(itf %d): "
441 "chan %d error %s\n",dev->number,chan,
442 err_txt[error]);
443 last_error = error;
444 silence = (jiffies+2*HZ)|1;
446 size = 0;
448 if (size && (size > cells*ATM_CELL_PAYLOAD-ATM_AAL5_TRAILER ||
449 size <= (cells-1)*ATM_CELL_PAYLOAD-ATM_AAL5_TRAILER)) {
450 printk(KERN_ERR DEV_LABEL "(itf %d): size %d with %d "
451 "cells\n",dev->number,size,cells);
452 size = 0;
453 event_dump();
455 if (size > ATM_MAX_AAL5_PDU) {
456 printk(KERN_ERR DEV_LABEL "(itf %d): size too big "
457 "(%d)\n",dev->number,size);
458 size = 0;
459 event_dump();
461 if (!size) {
462 dev_kfree_skb_irq(skb);
463 if (vcc) atomic_inc(&vcc->stats->rx_err);
464 continue;
466 if (!atm_charge(vcc,skb->truesize)) {
467 dev_kfree_skb_irq(skb);
468 continue;
470 skb->len = size;
471 ATM_SKB(skb)->vcc = vcc;
472 vcc->push(vcc,skb);
473 atomic_inc(&vcc->stats->rx);
475 zout(pos & 0xffff,MTA(mbx));
476 #if 0 /* probably a stupid idea */
477 refill_pool(dev,zatm_vcc->pool);
478 /* maybe this saves us a few interrupts */
479 #endif
483 static int open_rx_first(struct atm_vcc *vcc)
485 struct zatm_dev *zatm_dev;
486 struct zatm_vcc *zatm_vcc;
487 unsigned long flags;
488 unsigned short chan;
489 int cells;
491 DPRINTK("open_rx_first (0x%x)\n",inb_p(0xc053));
492 zatm_dev = ZATM_DEV(vcc->dev);
493 zatm_vcc = ZATM_VCC(vcc);
494 zatm_vcc->rx_chan = 0;
495 if (vcc->qos.rxtp.traffic_class == ATM_NONE) return 0;
496 if (vcc->qos.aal == ATM_AAL5) {
497 if (vcc->qos.rxtp.max_sdu > 65464)
498 vcc->qos.rxtp.max_sdu = 65464;
499 /* fix this - we may want to receive 64kB SDUs
500 later */
501 cells = (vcc->qos.rxtp.max_sdu+ATM_AAL5_TRAILER+
502 ATM_CELL_PAYLOAD-1)/ATM_CELL_PAYLOAD;
503 zatm_vcc->pool = pool_index(cells*ATM_CELL_PAYLOAD);
505 else {
506 cells = 1;
507 zatm_vcc->pool = ZATM_AAL0_POOL;
509 if (zatm_vcc->pool < 0) return -EMSGSIZE;
510 spin_lock_irqsave(&zatm_dev->lock, flags);
511 zwait;
512 zout(uPD98401_OPEN_CHAN,CMR);
513 zwait;
514 DPRINTK("0x%x 0x%x\n",zin(CMR),zin(CER));
515 chan = (zin(CMR) & uPD98401_CHAN_ADDR) >> uPD98401_CHAN_ADDR_SHIFT;
516 spin_unlock_irqrestore(&zatm_dev->lock, flags);
517 DPRINTK("chan is %d\n",chan);
518 if (!chan) return -EAGAIN;
519 use_pool(vcc->dev,zatm_vcc->pool);
520 DPRINTK("pool %d\n",zatm_vcc->pool);
521 /* set up VC descriptor */
522 spin_lock_irqsave(&zatm_dev->lock, flags);
523 zpokel(zatm_dev,zatm_vcc->pool << uPD98401_RXVC_POOL_SHIFT,
524 chan*VC_SIZE/4);
525 zpokel(zatm_dev,uPD98401_RXVC_OD | (vcc->qos.aal == ATM_AAL5 ?
526 uPD98401_RXVC_AR : 0) | cells,chan*VC_SIZE/4+1);
527 zpokel(zatm_dev,0,chan*VC_SIZE/4+2);
528 zatm_vcc->rx_chan = chan;
529 zatm_dev->rx_map[chan] = vcc;
530 spin_unlock_irqrestore(&zatm_dev->lock, flags);
531 return 0;
535 static int open_rx_second(struct atm_vcc *vcc)
537 struct zatm_dev *zatm_dev;
538 struct zatm_vcc *zatm_vcc;
539 unsigned long flags;
540 int pos,shift;
542 DPRINTK("open_rx_second (0x%x)\n",inb_p(0xc053));
543 zatm_dev = ZATM_DEV(vcc->dev);
544 zatm_vcc = ZATM_VCC(vcc);
545 if (!zatm_vcc->rx_chan) return 0;
546 spin_lock_irqsave(&zatm_dev->lock, flags);
547 /* should also handle VPI @@@ */
548 pos = vcc->vci >> 1;
549 shift = (1-(vcc->vci & 1)) << 4;
550 zpokel(zatm_dev,(zpeekl(zatm_dev,pos) & ~(0xffff << shift)) |
551 ((zatm_vcc->rx_chan | uPD98401_RXLT_ENBL) << shift),pos);
552 spin_unlock_irqrestore(&zatm_dev->lock, flags);
553 return 0;
557 static void close_rx(struct atm_vcc *vcc)
559 struct zatm_dev *zatm_dev;
560 struct zatm_vcc *zatm_vcc;
561 unsigned long flags;
562 int pos,shift;
564 zatm_vcc = ZATM_VCC(vcc);
565 zatm_dev = ZATM_DEV(vcc->dev);
566 if (!zatm_vcc->rx_chan) return;
567 DPRINTK("close_rx\n");
568 /* disable receiver */
569 if (vcc->vpi != ATM_VPI_UNSPEC && vcc->vci != ATM_VCI_UNSPEC) {
570 spin_lock_irqsave(&zatm_dev->lock, flags);
571 pos = vcc->vci >> 1;
572 shift = (1-(vcc->vci & 1)) << 4;
573 zpokel(zatm_dev,zpeekl(zatm_dev,pos) & ~(0xffff << shift),pos);
574 zwait;
575 zout(uPD98401_NOP,CMR);
576 zwait;
577 zout(uPD98401_NOP,CMR);
578 spin_unlock_irqrestore(&zatm_dev->lock, flags);
580 spin_lock_irqsave(&zatm_dev->lock, flags);
581 zwait;
582 zout(uPD98401_DEACT_CHAN | uPD98401_CHAN_RT | (zatm_vcc->rx_chan <<
583 uPD98401_CHAN_ADDR_SHIFT),CMR);
584 zwait;
585 udelay(10); /* why oh why ... ? */
586 zout(uPD98401_CLOSE_CHAN | uPD98401_CHAN_RT | (zatm_vcc->rx_chan <<
587 uPD98401_CHAN_ADDR_SHIFT),CMR);
588 zwait;
589 if (!(zin(CMR) & uPD98401_CHAN_ADDR))
590 printk(KERN_CRIT DEV_LABEL "(itf %d): can't close RX channel "
591 "%d\n",vcc->dev->number,zatm_vcc->rx_chan);
592 spin_unlock_irqrestore(&zatm_dev->lock, flags);
593 zatm_dev->rx_map[zatm_vcc->rx_chan] = NULL;
594 zatm_vcc->rx_chan = 0;
595 unuse_pool(vcc->dev,zatm_vcc->pool);
599 static int start_rx(struct atm_dev *dev)
601 struct zatm_dev *zatm_dev;
602 int size,i;
604 DPRINTK("start_rx\n");
605 zatm_dev = ZATM_DEV(dev);
606 size = sizeof(struct atm_vcc *)*zatm_dev->chans;
607 zatm_dev->rx_map = (struct atm_vcc **) kmalloc(size,GFP_KERNEL);
608 if (!zatm_dev->rx_map) return -ENOMEM;
609 memset(zatm_dev->rx_map,0,size);
610 /* set VPI/VCI split (use all VCIs and give what's left to VPIs) */
611 zpokel(zatm_dev,(1 << dev->ci_range.vci_bits)-1,uPD98401_VRR);
612 /* prepare free buffer pools */
613 for (i = 0; i <= ZATM_LAST_POOL; i++) {
614 zatm_dev->pool_info[i].ref_count = 0;
615 zatm_dev->pool_info[i].rqa_count = 0;
616 zatm_dev->pool_info[i].rqu_count = 0;
617 zatm_dev->pool_info[i].low_water = LOW_MARK;
618 zatm_dev->pool_info[i].high_water = HIGH_MARK;
619 zatm_dev->pool_info[i].offset = 0;
620 zatm_dev->pool_info[i].next_off = 0;
621 zatm_dev->pool_info[i].next_cnt = 0;
622 zatm_dev->pool_info[i].next_thres = OFF_CNG_THRES;
624 return 0;
628 /*----------------------------------- TX ------------------------------------*/
631 static int do_tx(struct sk_buff *skb)
633 struct atm_vcc *vcc;
634 struct zatm_dev *zatm_dev;
635 struct zatm_vcc *zatm_vcc;
636 u32 *dsc;
637 unsigned long flags;
639 EVENT("do_tx\n",0,0);
640 DPRINTK("sending skb %p\n",skb);
641 vcc = ATM_SKB(skb)->vcc;
642 zatm_dev = ZATM_DEV(vcc->dev);
643 zatm_vcc = ZATM_VCC(vcc);
644 EVENT("iovcnt=%d\n",skb_shinfo(skb)->nr_frags,0);
645 spin_lock_irqsave(&zatm_dev->lock, flags);
646 if (!skb_shinfo(skb)->nr_frags) {
647 if (zatm_vcc->txing == RING_ENTRIES-1) {
648 spin_unlock_irqrestore(&zatm_dev->lock, flags);
649 return RING_BUSY;
651 zatm_vcc->txing++;
652 dsc = zatm_vcc->ring+zatm_vcc->ring_curr;
653 zatm_vcc->ring_curr = (zatm_vcc->ring_curr+RING_WORDS) &
654 (RING_ENTRIES*RING_WORDS-1);
655 dsc[1] = 0;
656 dsc[2] = skb->len;
657 dsc[3] = virt_to_bus(skb->data);
658 mb();
659 dsc[0] = uPD98401_TXPD_V | uPD98401_TXPD_DP | uPD98401_TXPD_SM
660 | (vcc->qos.aal == ATM_AAL5 ? uPD98401_TXPD_AAL5 : 0 |
661 (ATM_SKB(skb)->atm_options & ATM_ATMOPT_CLP ?
662 uPD98401_CLPM_1 : uPD98401_CLPM_0));
663 EVENT("dsc (0x%lx)\n",(unsigned long) dsc,0);
665 else {
666 printk("NONONONOO!!!!\n");
667 dsc = NULL;
668 #if 0
669 u32 *put;
670 int i;
672 dsc = (u32 *) kmalloc(uPD98401_TXPD_SIZE*2+
673 uPD98401_TXBD_SIZE*ATM_SKB(skb)->iovcnt,GFP_ATOMIC);
674 if (!dsc) {
675 if (vcc->pop) vcc->pop(vcc,skb);
676 else dev_kfree_skb_irq(skb);
677 return -EAGAIN;
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 ?
684 uPD98401_CLPM_1 : uPD98401_CLPM_0));
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);
693 put[-2] |= uPD98401_TXBD_LAST;
694 #endif
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+
699 uPD98401_TXVC_QRP));
700 zwait;
701 zout(uPD98401_TX_READY | (zatm_vcc->tx_chan <<
702 uPD98401_CHAN_ADDR_SHIFT),CMR);
703 spin_unlock_irqrestore(&zatm_dev->lock, flags);
704 EVENT("done\n",0,0);
705 return 0;
709 static inline void dequeue_tx(struct atm_vcc *vcc)
711 struct zatm_vcc *zatm_vcc;
712 struct sk_buff *skb;
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;
722 #if 0 /* @@@ would fail on CLP */
723 if (*ZATM_PRV_DSC(skb) != (uPD98401_TXPD_V | uPD98401_TXPD_DP |
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;
736 atomic_inc(&vcc->stats->tx);
737 wake_up(&zatm_vcc->tx_wait);
741 static void poll_tx(struct atm_dev *dev,int mbx)
743 struct zatm_dev *zatm_dev;
744 unsigned long pos;
745 u32 x;
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;
753 #if 1
754 u32 data,*addr;
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)
766 >> uPD98401_TXI_CONN_SHIFT;
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();
775 if (((pos += 4) & 0xffff) == zatm_dev->mbx_end[mbx])
776 pos = zatm_dev->mbx_start[mbx];
778 zout(pos & 0xffff,MTA(mbx));
783 * BUG BUG BUG: Doesn't handle "new-style" rate specification yet.
786 static int alloc_shaper(struct atm_dev *dev,int *pcr,int min,int max,int ubr)
788 struct zatm_dev *zatm_dev;
789 unsigned long flags;
790 unsigned long i,m,c;
791 int shaper;
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;
804 else {
805 if (min) {
806 if (min <= 255) {
807 i = min;
808 m = ATM_OC3_PCR;
810 else {
811 i = 255;
812 m = ATM_OC3_PCR*255/min;
815 else {
816 if (max > zatm_dev->tx_bw) max = zatm_dev->tx_bw;
817 if (max <= 255) {
818 i = max;
819 m = ATM_OC3_PCR;
821 else {
822 i = 255;
823 m = (ATM_OC3_PCR*255+max-1)/max;
826 if (i > m) {
827 printk(KERN_CRIT DEV_LABEL "shaper algorithm botched "
828 "[%d,%d] -> i=%ld,m=%ld\n",min,max,i,m);
829 m = i;
831 *pcr = i*ATM_OC3_PCR/m;
832 c = 20; /* @@@ should use max_cdv ! */
833 if ((min && *pcr < min) || (max && *pcr > max)) return -EINVAL;
834 if (zatm_dev->tx_bw < *pcr) return -EAGAIN;
835 zatm_dev->tx_bw -= *pcr;
837 spin_lock_irqsave(&zatm_dev->lock, flags);
838 DPRINTK("i = %d, m = %d, PCR = %d\n",i,m,*pcr);
839 zpokel(zatm_dev,(i << uPD98401_IM_I_SHIFT) | m,uPD98401_IM(shaper));
840 zpokel(zatm_dev,c << uPD98401_PC_C_SHIFT,uPD98401_PC(shaper));
841 zpokel(zatm_dev,0,uPD98401_X(shaper));
842 zpokel(zatm_dev,0,uPD98401_Y(shaper));
843 zpokel(zatm_dev,uPD98401_PS_E,uPD98401_PS(shaper));
844 spin_unlock_irqrestore(&zatm_dev->lock, flags);
845 return shaper;
849 static void dealloc_shaper(struct atm_dev *dev,int shaper)
851 struct zatm_dev *zatm_dev;
852 unsigned long flags;
854 zatm_dev = ZATM_DEV(dev);
855 if (shaper == zatm_dev->ubr) {
856 if (--zatm_dev->ubr_ref_cnt) return;
857 zatm_dev->ubr = -1;
859 spin_lock_irqsave(&zatm_dev->lock, flags);
860 zpokel(zatm_dev,zpeekl(zatm_dev,uPD98401_PS(shaper)) & ~uPD98401_PS_E,
861 uPD98401_PS(shaper));
862 spin_unlock_irqrestore(&zatm_dev->lock, flags);
863 zatm_dev->free_shapers |= 1 << shaper;
867 static void close_tx(struct atm_vcc *vcc)
869 struct zatm_dev *zatm_dev;
870 struct zatm_vcc *zatm_vcc;
871 unsigned long flags;
872 int chan;
874 zatm_vcc = ZATM_VCC(vcc);
875 zatm_dev = ZATM_DEV(vcc->dev);
876 chan = zatm_vcc->tx_chan;
877 if (!chan) return;
878 DPRINTK("close_tx\n");
879 if (skb_peek(&zatm_vcc->backlog)) {
880 printk("waiting for backlog to drain ...\n");
881 event_dump();
882 wait_event(zatm_vcc->tx_wait, !skb_peek(&zatm_vcc->backlog));
884 if (skb_peek(&zatm_vcc->tx_queue)) {
885 printk("waiting for TX queue to drain ...\n");
886 event_dump();
887 wait_event(zatm_vcc->tx_wait, !skb_peek(&zatm_vcc->tx_queue));
889 spin_lock_irqsave(&zatm_dev->lock, flags);
890 #if 0
891 zwait;
892 zout(uPD98401_DEACT_CHAN | (chan << uPD98401_CHAN_ADDR_SHIFT),CMR);
893 #endif
894 zwait;
895 zout(uPD98401_CLOSE_CHAN | (chan << uPD98401_CHAN_ADDR_SHIFT),CMR);
896 zwait;
897 if (!(zin(CMR) & uPD98401_CHAN_ADDR))
898 printk(KERN_CRIT DEV_LABEL "(itf %d): can't close TX channel "
899 "%d\n",vcc->dev->number,chan);
900 spin_unlock_irqrestore(&zatm_dev->lock, flags);
901 zatm_vcc->tx_chan = 0;
902 zatm_dev->tx_map[chan] = NULL;
903 if (zatm_vcc->shaper != zatm_dev->ubr) {
904 zatm_dev->tx_bw += vcc->qos.txtp.min_pcr;
905 dealloc_shaper(vcc->dev,zatm_vcc->shaper);
907 kfree(zatm_vcc->ring);
911 static int open_tx_first(struct atm_vcc *vcc)
913 struct zatm_dev *zatm_dev;
914 struct zatm_vcc *zatm_vcc;
915 unsigned long flags;
916 u32 *loop;
917 unsigned short chan;
918 int pcr,unlimited;
920 DPRINTK("open_tx_first\n");
921 zatm_dev = ZATM_DEV(vcc->dev);
922 zatm_vcc = ZATM_VCC(vcc);
923 zatm_vcc->tx_chan = 0;
924 if (vcc->qos.txtp.traffic_class == ATM_NONE) return 0;
925 spin_lock_irqsave(&zatm_dev->lock, flags);
926 zwait;
927 zout(uPD98401_OPEN_CHAN,CMR);
928 zwait;
929 DPRINTK("0x%x 0x%x\n",zin(CMR),zin(CER));
930 chan = (zin(CMR) & uPD98401_CHAN_ADDR) >> uPD98401_CHAN_ADDR_SHIFT;
931 spin_unlock_irqrestore(&zatm_dev->lock, flags);
932 DPRINTK("chan is %d\n",chan);
933 if (!chan) return -EAGAIN;
934 unlimited = vcc->qos.txtp.traffic_class == ATM_UBR &&
935 (!vcc->qos.txtp.max_pcr || vcc->qos.txtp.max_pcr == ATM_MAX_PCR ||
936 vcc->qos.txtp.max_pcr >= ATM_OC3_PCR);
937 if (unlimited && zatm_dev->ubr != -1) zatm_vcc->shaper = zatm_dev->ubr;
938 else {
939 if (unlimited) vcc->qos.txtp.max_sdu = ATM_MAX_AAL5_PDU;
940 if ((zatm_vcc->shaper = alloc_shaper(vcc->dev,&pcr,
941 vcc->qos.txtp.min_pcr,vcc->qos.txtp.max_pcr,unlimited))
942 < 0) {
943 close_tx(vcc);
944 return zatm_vcc->shaper;
946 if (pcr > ATM_OC3_PCR) pcr = ATM_OC3_PCR;
947 vcc->qos.txtp.min_pcr = vcc->qos.txtp.max_pcr = pcr;
949 zatm_vcc->tx_chan = chan;
950 skb_queue_head_init(&zatm_vcc->tx_queue);
951 init_waitqueue_head(&zatm_vcc->tx_wait);
952 /* initialize ring */
953 zatm_vcc->ring = kmalloc(RING_SIZE,GFP_KERNEL);
954 if (!zatm_vcc->ring) return -ENOMEM;
955 memset(zatm_vcc->ring,0,RING_SIZE);
956 loop = zatm_vcc->ring+RING_ENTRIES*RING_WORDS;
957 loop[0] = uPD98401_TXPD_V;
958 loop[1] = loop[2] = 0;
959 loop[3] = virt_to_bus(zatm_vcc->ring);
960 zatm_vcc->ring_curr = 0;
961 zatm_vcc->txing = 0;
962 skb_queue_head_init(&zatm_vcc->backlog);
963 zpokel(zatm_dev,virt_to_bus(zatm_vcc->ring),
964 chan*VC_SIZE/4+uPD98401_TXVC_QRP);
965 return 0;
969 static int open_tx_second(struct atm_vcc *vcc)
971 struct zatm_dev *zatm_dev;
972 struct zatm_vcc *zatm_vcc;
973 unsigned long flags;
975 DPRINTK("open_tx_second\n");
976 zatm_dev = ZATM_DEV(vcc->dev);
977 zatm_vcc = ZATM_VCC(vcc);
978 if (!zatm_vcc->tx_chan) return 0;
979 /* set up VC descriptor */
980 spin_lock_irqsave(&zatm_dev->lock, flags);
981 zpokel(zatm_dev,0,zatm_vcc->tx_chan*VC_SIZE/4);
982 zpokel(zatm_dev,uPD98401_TXVC_L | (zatm_vcc->shaper <<
983 uPD98401_TXVC_SHP_SHIFT) | (vcc->vpi << uPD98401_TXVC_VPI_SHIFT) |
984 vcc->vci,zatm_vcc->tx_chan*VC_SIZE/4+1);
985 zpokel(zatm_dev,0,zatm_vcc->tx_chan*VC_SIZE/4+2);
986 spin_unlock_irqrestore(&zatm_dev->lock, flags);
987 zatm_dev->tx_map[zatm_vcc->tx_chan] = vcc;
988 return 0;
992 static int start_tx(struct atm_dev *dev)
994 struct zatm_dev *zatm_dev;
995 int i;
997 DPRINTK("start_tx\n");
998 zatm_dev = ZATM_DEV(dev);
999 zatm_dev->tx_map = (struct atm_vcc **) kmalloc(sizeof(struct atm_vcc *)*
1000 zatm_dev->chans,GFP_KERNEL);
1001 if (!zatm_dev->tx_map) return -ENOMEM;
1002 zatm_dev->tx_bw = ATM_OC3_PCR;
1003 zatm_dev->free_shapers = (1 << NR_SHAPERS)-1;
1004 zatm_dev->ubr = -1;
1005 zatm_dev->ubr_ref_cnt = 0;
1006 /* initialize shapers */
1007 for (i = 0; i < NR_SHAPERS; i++) zpokel(zatm_dev,0,uPD98401_PS(i));
1008 return 0;
1012 /*------------------------------- interrupts --------------------------------*/
1015 static irqreturn_t zatm_int(int irq,void *dev_id,struct pt_regs *regs)
1017 struct atm_dev *dev;
1018 struct zatm_dev *zatm_dev;
1019 u32 reason;
1020 int handled = 0;
1022 dev = dev_id;
1023 zatm_dev = ZATM_DEV(dev);
1024 while ((reason = zin(GSR))) {
1025 handled = 1;
1026 EVENT("reason 0x%x\n",reason,0);
1027 if (reason & uPD98401_INT_PI) {
1028 EVENT("PHY int\n",0,0);
1029 dev->phy->interrupt(dev);
1031 if (reason & uPD98401_INT_RQA) {
1032 unsigned long pools;
1033 int i;
1035 pools = zin(RQA);
1036 EVENT("RQA (0x%08x)\n",pools,0);
1037 for (i = 0; pools; i++) {
1038 if (pools & 1) {
1039 refill_pool(dev,i);
1040 zatm_dev->pool_info[i].rqa_count++;
1042 pools >>= 1;
1045 if (reason & uPD98401_INT_RQU) {
1046 unsigned long pools;
1047 int i;
1048 pools = zin(RQU);
1049 printk(KERN_WARNING DEV_LABEL "(itf %d): RQU 0x%08lx\n",
1050 dev->number,pools);
1051 event_dump();
1052 for (i = 0; pools; i++) {
1053 if (pools & 1) {
1054 refill_pool(dev,i);
1055 zatm_dev->pool_info[i].rqu_count++;
1057 pools >>= 1;
1060 /* don't handle RD */
1061 if (reason & uPD98401_INT_SPE)
1062 printk(KERN_ALERT DEV_LABEL "(itf %d): system parity "
1063 "error at 0x%08x\n",dev->number,zin(ADDR));
1064 if (reason & uPD98401_INT_CPE)
1065 printk(KERN_ALERT DEV_LABEL "(itf %d): control memory "
1066 "parity error at 0x%08x\n",dev->number,zin(ADDR));
1067 if (reason & uPD98401_INT_SBE) {
1068 printk(KERN_ALERT DEV_LABEL "(itf %d): system bus "
1069 "error at 0x%08x\n",dev->number,zin(ADDR));
1070 event_dump();
1072 /* don't handle IND */
1073 if (reason & uPD98401_INT_MF) {
1074 printk(KERN_CRIT DEV_LABEL "(itf %d): mailbox full "
1075 "(0x%x)\n",dev->number,(reason & uPD98401_INT_MF)
1076 >> uPD98401_INT_MF_SHIFT);
1077 event_dump();
1078 /* @@@ should try to recover */
1080 if (reason & uPD98401_INT_MM) {
1081 if (reason & 1) poll_rx(dev,0);
1082 if (reason & 2) poll_rx(dev,1);
1083 if (reason & 4) poll_tx(dev,2);
1084 if (reason & 8) poll_tx(dev,3);
1086 /* @@@ handle RCRn */
1088 return IRQ_RETVAL(handled);
1092 /*----------------------------- (E)EPROM access -----------------------------*/
1095 static void __devinit eprom_set(struct zatm_dev *zatm_dev,unsigned long value,
1096 unsigned short cmd)
1098 int error;
1100 if ((error = pci_write_config_dword(zatm_dev->pci_dev,cmd,value)))
1101 printk(KERN_ERR DEV_LABEL ": PCI write failed (0x%02x)\n",
1102 error);
1106 static unsigned long __devinit eprom_get(struct zatm_dev *zatm_dev,
1107 unsigned short cmd)
1109 unsigned int value;
1110 int error;
1112 if ((error = pci_read_config_dword(zatm_dev->pci_dev,cmd,&value)))
1113 printk(KERN_ERR DEV_LABEL ": PCI read failed (0x%02x)\n",
1114 error);
1115 return value;
1119 static void __devinit eprom_put_bits(struct zatm_dev *zatm_dev,
1120 unsigned long data,int bits,unsigned short cmd)
1122 unsigned long value;
1123 int i;
1125 for (i = bits-1; i >= 0; i--) {
1126 value = ZEPROM_CS | (((data >> i) & 1) ? ZEPROM_DI : 0);
1127 eprom_set(zatm_dev,value,cmd);
1128 eprom_set(zatm_dev,value | ZEPROM_SK,cmd);
1129 eprom_set(zatm_dev,value,cmd);
1134 static void __devinit eprom_get_byte(struct zatm_dev *zatm_dev,
1135 unsigned char *byte,unsigned short cmd)
1137 int i;
1139 *byte = 0;
1140 for (i = 8; i; i--) {
1141 eprom_set(zatm_dev,ZEPROM_CS,cmd);
1142 eprom_set(zatm_dev,ZEPROM_CS | ZEPROM_SK,cmd);
1143 *byte <<= 1;
1144 if (eprom_get(zatm_dev,cmd) & ZEPROM_DO) *byte |= 1;
1145 eprom_set(zatm_dev,ZEPROM_CS,cmd);
1150 static unsigned char __devinit eprom_try_esi(struct atm_dev *dev,
1151 unsigned short cmd,int offset,int swap)
1153 unsigned char buf[ZEPROM_SIZE];
1154 struct zatm_dev *zatm_dev;
1155 int i;
1157 zatm_dev = ZATM_DEV(dev);
1158 for (i = 0; i < ZEPROM_SIZE; i += 2) {
1159 eprom_set(zatm_dev,ZEPROM_CS,cmd); /* select EPROM */
1160 eprom_put_bits(zatm_dev,ZEPROM_CMD_READ,ZEPROM_CMD_LEN,cmd);
1161 eprom_put_bits(zatm_dev,i >> 1,ZEPROM_ADDR_LEN,cmd);
1162 eprom_get_byte(zatm_dev,buf+i+swap,cmd);
1163 eprom_get_byte(zatm_dev,buf+i+1-swap,cmd);
1164 eprom_set(zatm_dev,0,cmd); /* deselect EPROM */
1166 memcpy(dev->esi,buf+offset,ESI_LEN);
1167 return memcmp(dev->esi,"\0\0\0\0\0",ESI_LEN); /* assumes ESI_LEN == 6 */
1171 static void __devinit eprom_get_esi(struct atm_dev *dev)
1173 if (eprom_try_esi(dev,ZEPROM_V1_REG,ZEPROM_V1_ESI_OFF,1)) return;
1174 (void) eprom_try_esi(dev,ZEPROM_V2_REG,ZEPROM_V2_ESI_OFF,0);
1178 /*--------------------------------- entries ---------------------------------*/
1181 static int __init zatm_init(struct atm_dev *dev)
1183 struct zatm_dev *zatm_dev;
1184 struct pci_dev *pci_dev;
1185 unsigned short command;
1186 unsigned char revision;
1187 int error,i,last;
1188 unsigned long t0,t1,t2;
1190 DPRINTK(">zatm_init\n");
1191 zatm_dev = ZATM_DEV(dev);
1192 spin_lock_init(&zatm_dev->lock);
1193 pci_dev = zatm_dev->pci_dev;
1194 zatm_dev->base = pci_resource_start(pci_dev, 0);
1195 zatm_dev->irq = pci_dev->irq;
1196 if ((error = pci_read_config_word(pci_dev,PCI_COMMAND,&command)) ||
1197 (error = pci_read_config_byte(pci_dev,PCI_REVISION_ID,&revision))) {
1198 printk(KERN_ERR DEV_LABEL "(itf %d): init error 0x%02x\n",
1199 dev->number,error);
1200 return -EINVAL;
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;
1208 eprom_get_esi(dev);
1209 printk(KERN_NOTICE DEV_LABEL "(itf %d): rev.%d,base=0x%x,irq=%d,",
1210 dev->number,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);
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));
1232 zout(uPD98401_GMR_ONE | uPD98401_BURST8 | uPD98401_BURST4 |
1233 uPD98401_BURST2 | uPD98401_GMR_PM | uPD98401_GMR_DR,GMR);
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;
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);
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,
1254 (zin(VER) & uPD98401_MAJOR) >> uPD98401_MAJOR_SHIFT,
1255 zin(VER) & uPD98401_MINOR,zatm_dev->khz/1000,zatm_dev->khz % 1000);
1256 return uPD98402_init(dev);
1260 static int __init zatm_start(struct atm_dev *dev)
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;
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, SA_SHIRQ, 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;
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;
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;
1316 * Alignment provided by pci_alloc_consistent() isn't enough
1317 * for this device.
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;
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));
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;
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]);
1362 free_irq(zatm_dev->irq, dev);
1363 goto done;
1367 static void zatm_close(struct atm_vcc *vcc)
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);
1383 static int zatm_open(struct atm_vcc *vcc)
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;
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;
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;
1412 if ((error = open_tx_first(vcc))) {
1413 zatm_close(vcc);
1414 return error;
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;
1422 if ((error = open_tx_second(vcc))) {
1423 zatm_close(vcc);
1424 return error;
1426 set_bit(ATM_VF_READY,&vcc->flags);
1427 return 0;
1431 static int zatm_change_qos(struct atm_vcc *vcc,struct atm_qos *qos,int flags)
1433 printk("Not yet implemented\n");
1434 return -ENOSYS;
1435 /* @@@ */
1439 static int zatm_ioctl(struct atm_dev *dev,unsigned int cmd,void __user *arg)
1441 struct zatm_dev *zatm_dev;
1442 unsigned long flags;
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:
1451 struct zatm_pool_info info;
1452 int pool;
1454 if (get_user(pool,
1455 &((struct zatm_pool_req __user *) arg)->pool_num))
1456 return -EFAULT;
1457 if (pool < 0 || pool > ZATM_LAST_POOL)
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;
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;
1470 case ZATM_SETPOOL:
1472 struct zatm_pool_info info;
1473 int pool;
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;
1506 default:
1507 if (!dev->phy->ioctl) return -ENOIOCTLCMD;
1508 return dev->phy->ioctl(dev,cmd,arg);
1513 static int zatm_getsockopt(struct atm_vcc *vcc,int level,int optname,
1514 void __user *optval,int optlen)
1516 return -EINVAL;
1520 static int zatm_setsockopt(struct atm_vcc *vcc,int level,int optname,
1521 void __user *optval,int optlen)
1523 return -EINVAL;
1526 static int zatm_send(struct atm_vcc *vcc,struct sk_buff *skb)
1528 int error;
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;
1536 if (!skb) {
1537 printk(KERN_CRIT "!skb in zatm_send ?\n");
1538 if (vcc->pop) vcc->pop(vcc,skb);
1539 return -EINVAL;
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;
1549 static void zatm_phy_put(struct atm_dev *dev,unsigned char value,
1550 unsigned long addr)
1552 struct zatm_dev *zatm_dev;
1554 zatm_dev = ZATM_DEV(dev);
1555 zwait;
1556 zout(value,CER);
1557 zout(uPD98401_IND_ACC | uPD98401_IA_B0 |
1558 (uPD98401_IA_TGT_PHY << uPD98401_IA_TGT_SHIFT) | addr,CMR);
1562 static unsigned char zatm_phy_get(struct atm_dev *dev,unsigned long addr)
1564 struct zatm_dev *zatm_dev;
1566 zatm_dev = ZATM_DEV(dev);
1567 zwait;
1568 zout(uPD98401_IND_ACC | uPD98401_IA_B0 | uPD98401_IA_RW |
1569 (uPD98401_IA_TGT_PHY << uPD98401_IA_TGT_SHIFT) | addr,CMR);
1570 zwait;
1571 return zin(CER) & 0xff;
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,
1587 static int __devinit zatm_init_one(struct pci_dev *pci_dev,
1588 const struct pci_device_id *ent)
1590 struct atm_dev *dev;
1591 struct zatm_dev *zatm_dev;
1592 int ret = -ENOMEM;
1594 zatm_dev = (struct 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;
1600 dev = atm_dev_register(DEV_LABEL, &ops, -1, NULL);
1601 if (!dev)
1602 goto out_free;
1604 ret = pci_enable_device(pci_dev);
1605 if (ret < 0)
1606 goto out_deregister;
1608 ret = pci_request_regions(pci_dev, DEV_LABEL);
1609 if (ret < 0)
1610 goto out_disable;
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;
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;
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;
1637 MODULE_LICENSE("GPL");
1639 static struct pci_device_id zatm_pci_tbl[] __devinitdata = {
1640 { PCI_VENDOR_ID_ZEITNET, PCI_DEVICE_ID_ZEITNET_1221,
1641 PCI_ANY_ID, PCI_ANY_ID, 0, 0, ZATM_COPPER },
1642 { PCI_VENDOR_ID_ZEITNET, PCI_DEVICE_ID_ZEITNET_1225,
1643 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
1644 { 0, }
1646 MODULE_DEVICE_TABLE(pci, zatm_pci_tbl);
1648 static struct pci_driver zatm_driver = {
1649 .name = DEV_LABEL,
1650 .id_table = zatm_pci_tbl,
1651 .probe = zatm_init_one,
1654 static int __init zatm_init_module(void)
1656 return pci_register_driver(&zatm_driver);
1659 module_init(zatm_init_module);
1660 /* module_exit not defined so not unloadable */