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