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 
event_dump(void)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 
EVENT(const char * s,unsigned long a,unsigned long b)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 
event_dump(void)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;
108 		printk(KERN_NOTICE);
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 
124 
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 */
133 
134 #define MBX_SIZE(i) (mbx_entries[i]*mbx_esize[i])
135 
136 
137 /*-------------------------------- utilities --------------------------------*/
138 
139 
zpokel(struct zatm_dev * zatm_dev,u32 value,u32 addr)140 static void zpokel(struct zatm_dev *zatm_dev,u32 value,u32 addr)
141 {
142 	zwait;
143 	zout(value,CER);
144 	zout(uPD98401_IND_ACC | uPD98401_IA_BALL |
145 	    (uPD98401_IA_TGT_CM << uPD98401_IA_TGT_SHIFT) | addr,CMR);
146 }
147 
148 
zpeekl(struct zatm_dev * zatm_dev,u32 addr)149 static u32 zpeekl(struct zatm_dev *zatm_dev,u32 addr)
150 {
151 	zwait;
152 	zout(uPD98401_IND_ACC | uPD98401_IA_BALL | uPD98401_IA_RW |
153 	  (uPD98401_IA_TGT_CM << uPD98401_IA_TGT_SHIFT) | addr,CMR);
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  */
170 
171 struct rx_buffer_head {
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 
refill_pool(struct atm_dev * dev,int pool)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) &
202 	    uPD98401_RXFP_REMAIN;
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 
drain_free(struct atm_dev * dev,int pool)256 static void drain_free(struct atm_dev *dev,int pool)
257 {
258 	skb_queue_purge(&ZATM_DEV(dev)->pool[pool]);
259 }
260 
261 
pool_index(int max_pdu)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 
use_pool(struct atm_dev * dev,int pool)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) <<
292 		    uPD98401_RXFP_ALERT_SHIFT) |
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 
unuse_pool(struct atm_dev * dev,int pool)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+
332      uPD98401_TXVC_QRP);
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 
poll_rx(struct atm_dev * dev,int mbx)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) >>
395 			    uPD98401_AAL5_ES_SHIFT;
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) >>
417 		    uPD98401_AAL5_CHAN_SHIFT;
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 
open_rx_first(struct atm_vcc * vcc)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;
511 	zout(uPD98401_OPEN_CHAN,CMR);
512 	zwait;
513 	DPRINTK("0x%x 0x%x\n",zin(CMR),zin(CER));
514 	chan = (zin(CMR) & uPD98401_CHAN_ADDR) >> uPD98401_CHAN_ADDR_SHIFT;
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 
open_rx_second(struct atm_vcc * vcc)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 
close_rx(struct atm_vcc * vcc)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;
574 		zout(uPD98401_NOP,CMR);
575 		zwait;
576 		zout(uPD98401_NOP,CMR);
577 		spin_unlock_irqrestore(&zatm_dev->lock, flags);
578 	}
579 	spin_lock_irqsave(&zatm_dev->lock, flags);
580 	zwait;
581 	zout(uPD98401_DEACT_CHAN | uPD98401_CHAN_RT | (zatm_vcc->rx_chan <<
582 	    uPD98401_CHAN_ADDR_SHIFT),CMR);
583 	zwait;
584 	udelay(10); /* why oh why ... ? */
585 	zout(uPD98401_CLOSE_CHAN | uPD98401_CHAN_RT | (zatm_vcc->rx_chan <<
586 	    uPD98401_CHAN_ADDR_SHIFT),CMR);
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 
start_rx(struct atm_dev * dev)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 
do_tx(struct sk_buff * skb)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) &
652 		    (RING_ENTRIES*RING_WORDS-1);
653 		dsc[1] = 0;
654 		dsc[2] = skb->len;
655 		dsc[3] = virt_to_bus(skb->data);
656 		mb();
657 		dsc[0] = uPD98401_TXPD_V | uPD98401_TXPD_DP | uPD98401_TXPD_SM
658 		    | (vcc->qos.aal == ATM_AAL5 ? uPD98401_TXPD_AAL5 : 0 |
659 		    (ATM_SKB(skb)->atm_options & ATM_ATMOPT_CLP ?
660 		    uPD98401_CLPM_1 : uPD98401_CLPM_0));
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 ?
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);
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+
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;
706 }
707 
708 
dequeue_tx(struct atm_vcc * vcc)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 */
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;
735 		}
736 	atomic_inc(&vcc->stats->tx);
737 	wake_up(&zatm_vcc->tx_wait);
738 }
739 
740 
poll_tx(struct atm_dev * dev,int mbx)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)
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();
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 
alloc_shaper(struct atm_dev * dev,int * pcr,int min,int max,int ubr)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 
dealloc_shaper(struct atm_dev * dev,int shaper)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 
close_tx(struct atm_vcc * vcc)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;
893 	zout(uPD98401_DEACT_CHAN | (chan << uPD98401_CHAN_ADDR_SHIFT),CMR);
894 #endif
895 	zwait;
896 	zout(uPD98401_CLOSE_CHAN | (chan << uPD98401_CHAN_ADDR_SHIFT),CMR);
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 
open_tx_first(struct atm_vcc * vcc)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;
928 	zout(uPD98401_OPEN_CHAN,CMR);
929 	zwait;
930 	DPRINTK("0x%x 0x%x\n",zin(CMR),zin(CER));
931 	chan = (zin(CMR) & uPD98401_CHAN_ADDR) >> uPD98401_CHAN_ADDR_SHIFT;
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 
open_tx_second(struct atm_vcc * vcc)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 <<
985 	    uPD98401_TXVC_SHP_SHIFT) | (vcc->vpi << uPD98401_TXVC_VPI_SHIFT) |
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 
start_tx(struct atm_dev * dev)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 
zatm_int(int irq,void * dev_id)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)
1078 			    >> uPD98401_INT_MF_SHIFT);
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 
eprom_set(struct zatm_dev * zatm_dev,unsigned long value,unsigned short cmd)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 
eprom_get(struct zatm_dev * zatm_dev,unsigned short cmd)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 
eprom_put_bits(struct zatm_dev * zatm_dev,unsigned long data,int bits,unsigned short cmd)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 
eprom_get_byte(struct zatm_dev * zatm_dev,unsigned char * byte,unsigned short cmd)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 
eprom_try_esi(struct atm_dev * dev,unsigned short cmd,int offset,int swap)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 
eprom_get_esi(struct atm_dev * dev)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 
zatm_init(struct atm_dev * dev)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));
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;
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,
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);
1257 }
1258 
1259 
zatm_start(struct atm_dev * dev)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 
zatm_close(struct atm_vcc * vcc)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 
zatm_open(struct atm_vcc * vcc)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 
zatm_change_qos(struct atm_vcc * vcc,struct atm_qos * qos,int flags)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 
zatm_ioctl(struct atm_dev * dev,unsigned int cmd,void __user * arg)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;
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;
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 
zatm_getsockopt(struct atm_vcc * vcc,int level,int optname,void __user * optval,int optlen)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 
zatm_setsockopt(struct atm_vcc * vcc,int level,int optname,void __user * optval,unsigned int optlen)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 
zatm_send(struct atm_vcc * vcc,struct sk_buff * skb)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 
zatm_phy_put(struct atm_dev * dev,unsigned char value,unsigned long addr)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);
1557 	zout(uPD98401_IND_ACC | uPD98401_IA_B0 |
1558 	    (uPD98401_IA_TGT_PHY << uPD98401_IA_TGT_SHIFT) | addr,CMR);
1559 }
1560 
1561 
zatm_phy_get(struct atm_dev * dev,unsigned long addr)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;
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;
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 
zatm_init_one(struct pci_dev * pci_dev,const struct pci_device_id * ent)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 = {
1640 	{ PCI_VDEVICE(ZEITNET, PCI_DEVICE_ID_ZEITNET_1221), ZATM_COPPER },
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 
zatm_init_module(void)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 */
1659