• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* lasi_82596.c -- driver for the intel 82596 ethernet controller, as
2    munged into HPPA boxen .
3 
4    This driver is based upon 82596.c, original credits are below...
5    but there were too many hoops which HP wants jumped through to
6    keep this code in there in a sane manner.
7 
8    3 primary sources of the mess --
9    1) hppa needs *lots* of cacheline flushing to keep this kind of
10    MMIO running.
11 
12    2) The 82596 needs to see all of its pointers as their physical
13    address.  Thus virt_to_bus/bus_to_virt are *everywhere*.
14 
15    3) The implementation HP is using seems to be significantly pickier
16    about when and how the command and RX units are started.  some
17    command ordering was changed.
18 
19    Examination of the mach driver leads one to believe that there
20    might be a saner way to pull this off...  anyone who feels like a
21    full rewrite can be my guest.
22 
23    Split 02/13/2000 Sam Creasey (sammy@oh.verio.com)
24 
25    02/01/2000  Initial modifications for parisc by Helge Deller (deller@gmx.de)
26    03/02/2000  changes for better/correct(?) cache-flushing (deller)
27 */
28 
29 /* 82596.c: A generic 82596 ethernet driver for linux. */
30 /*
31    Based on Apricot.c
32    Written 1994 by Mark Evans.
33    This driver is for the Apricot 82596 bus-master interface
34 
35    Modularised 12/94 Mark Evans
36 
37 
38    Modified to support the 82596 ethernet chips on 680x0 VME boards.
39    by Richard Hirst <richard@sleepie.demon.co.uk>
40    Renamed to be 82596.c
41 
42    980825:  Changed to receive directly in to sk_buffs which are
43    allocated at open() time.  Eliminates copy on incoming frames
44    (small ones are still copied).  Shared data now held in a
45    non-cached page, so we can run on 68060 in copyback mode.
46 
47    TBD:
48    * look at deferring rx frames rather than discarding (as per tulip)
49    * handle tx ring full as per tulip
50    * performance test to tune rx_copybreak
51 
52    Most of my modifications relate to the braindead big-endian
53    implementation by Intel.  When the i596 is operating in
54    'big-endian' mode, it thinks a 32 bit value of 0x12345678
55    should be stored as 0x56781234.  This is a real pain, when
56    you have linked lists which are shared by the 680x0 and the
57    i596.
58 
59    Driver skeleton
60    Written 1993 by Donald Becker.
61    Copyright 1993 United States Government as represented by the Director,
62    National Security Agency. This software may only be used and distributed
63    according to the terms of the GNU General Public License as modified by SRC,
64    incorporated herein by reference.
65 
66    The author may be reached as becker@scyld.com, or C/O
67    Scyld Computing Corporation, 410 Severn Ave., Suite 210, Annapolis MD 21403
68 
69  */
70 
71 #include <linux/module.h>
72 #include <linux/kernel.h>
73 #include <linux/string.h>
74 #include <linux/errno.h>
75 #include <linux/ioport.h>
76 #include <linux/interrupt.h>
77 #include <linux/delay.h>
78 #include <linux/netdevice.h>
79 #include <linux/etherdevice.h>
80 #include <linux/skbuff.h>
81 #include <linux/types.h>
82 #include <linux/bitops.h>
83 #include <linux/dma-mapping.h>
84 #include <linux/io.h>
85 #include <linux/irq.h>
86 #include <linux/gfp.h>
87 
88 /* DEBUG flags
89  */
90 
91 #define DEB_INIT	0x0001
92 #define DEB_PROBE	0x0002
93 #define DEB_SERIOUS	0x0004
94 #define DEB_ERRORS	0x0008
95 #define DEB_MULTI	0x0010
96 #define DEB_TDR		0x0020
97 #define DEB_OPEN	0x0040
98 #define DEB_RESET	0x0080
99 #define DEB_ADDCMD	0x0100
100 #define DEB_STATUS	0x0200
101 #define DEB_STARTTX	0x0400
102 #define DEB_RXADDR	0x0800
103 #define DEB_TXADDR	0x1000
104 #define DEB_RXFRAME	0x2000
105 #define DEB_INTS	0x4000
106 #define DEB_STRUCT	0x8000
107 #define DEB_ANY		0xffff
108 
109 
110 #define DEB(x, y)	if (i596_debug & (x)) { y; }
111 
112 
113 /*
114  * The MPU_PORT command allows direct access to the 82596. With PORT access
115  * the following commands are available (p5-18). The 32-bit port command
116  * must be word-swapped with the most significant word written first.
117  * This only applies to VME boards.
118  */
119 #define PORT_RESET		0x00	/* reset 82596 */
120 #define PORT_SELFTEST		0x01	/* selftest */
121 #define PORT_ALTSCP		0x02	/* alternate SCB address */
122 #define PORT_ALTDUMP		0x03	/* Alternate DUMP address */
123 
124 static int i596_debug = (DEB_SERIOUS|DEB_PROBE);
125 
126 /* Copy frames shorter than rx_copybreak, otherwise pass on up in
127  * a full sized sk_buff.  Value of 100 stolen from tulip.c (!alpha).
128  */
129 static int rx_copybreak = 100;
130 
131 #define PKT_BUF_SZ	1536
132 #define MAX_MC_CNT	64
133 
134 #define ISCP_BUSY	0x0001
135 
136 #define I596_NULL ((u32)0xffffffff)
137 
138 #define CMD_EOL		0x8000	/* The last command of the list, stop. */
139 #define CMD_SUSP	0x4000	/* Suspend after doing cmd. */
140 #define CMD_INTR	0x2000	/* Interrupt after doing cmd. */
141 
142 #define CMD_FLEX	0x0008	/* Enable flexible memory model */
143 
144 enum commands {
145 	CmdNOp = 0, CmdSASetup = 1, CmdConfigure = 2, CmdMulticastList = 3,
146 	CmdTx = 4, CmdTDR = 5, CmdDump = 6, CmdDiagnose = 7
147 };
148 
149 #define STAT_C		0x8000	/* Set to 0 after execution */
150 #define STAT_B		0x4000	/* Command being executed */
151 #define STAT_OK		0x2000	/* Command executed ok */
152 #define STAT_A		0x1000	/* Command aborted */
153 
154 #define	 CUC_START	0x0100
155 #define	 CUC_RESUME	0x0200
156 #define	 CUC_SUSPEND    0x0300
157 #define	 CUC_ABORT	0x0400
158 #define	 RX_START	0x0010
159 #define	 RX_RESUME	0x0020
160 #define	 RX_SUSPEND	0x0030
161 #define	 RX_ABORT	0x0040
162 
163 #define TX_TIMEOUT	(HZ/20)
164 
165 
166 struct i596_reg {
167 	unsigned short porthi;
168 	unsigned short portlo;
169 	u32            ca;
170 };
171 
172 #define EOF		0x8000
173 #define SIZE_MASK	0x3fff
174 
175 struct i596_tbd {
176 	unsigned short size;
177 	unsigned short pad;
178 	u32            next;
179 	u32            data;
180 	u32 cache_pad[5];		/* Total 32 bytes... */
181 };
182 
183 /* The command structure has two 'next' pointers; v_next is the address of
184  * the next command as seen by the CPU, b_next is the address of the next
185  * command as seen by the 82596.  The b_next pointer, as used by the 82596
186  * always references the status field of the next command, rather than the
187  * v_next field, because the 82596 is unaware of v_next.  It may seem more
188  * logical to put v_next at the end of the structure, but we cannot do that
189  * because the 82596 expects other fields to be there, depending on command
190  * type.
191  */
192 
193 struct i596_cmd {
194 	struct i596_cmd *v_next;	/* Address from CPUs viewpoint */
195 	unsigned short status;
196 	unsigned short command;
197 	u32            b_next;	/* Address from i596 viewpoint */
198 };
199 
200 struct tx_cmd {
201 	struct i596_cmd cmd;
202 	u32            tbd;
203 	unsigned short size;
204 	unsigned short pad;
205 	struct sk_buff *skb;		/* So we can free it after tx */
206 	dma_addr_t dma_addr;
207 #ifdef __LP64__
208 	u32 cache_pad[6];		/* Total 64 bytes... */
209 #else
210 	u32 cache_pad[1];		/* Total 32 bytes... */
211 #endif
212 };
213 
214 struct tdr_cmd {
215 	struct i596_cmd cmd;
216 	unsigned short status;
217 	unsigned short pad;
218 };
219 
220 struct mc_cmd {
221 	struct i596_cmd cmd;
222 	short mc_cnt;
223 	char mc_addrs[MAX_MC_CNT*6];
224 };
225 
226 struct sa_cmd {
227 	struct i596_cmd cmd;
228 	char eth_addr[8];
229 };
230 
231 struct cf_cmd {
232 	struct i596_cmd cmd;
233 	char i596_config[16];
234 };
235 
236 struct i596_rfd {
237 	unsigned short stat;
238 	unsigned short cmd;
239 	u32            b_next;	/* Address from i596 viewpoint */
240 	u32            rbd;
241 	unsigned short count;
242 	unsigned short size;
243 	struct i596_rfd *v_next;	/* Address from CPUs viewpoint */
244 	struct i596_rfd *v_prev;
245 #ifndef __LP64__
246 	u32 cache_pad[2];		/* Total 32 bytes... */
247 #endif
248 };
249 
250 struct i596_rbd {
251 	/* hardware data */
252 	unsigned short count;
253 	unsigned short zero1;
254 	u32            b_next;
255 	u32            b_data;		/* Address from i596 viewpoint */
256 	unsigned short size;
257 	unsigned short zero2;
258 	/* driver data */
259 	struct sk_buff *skb;
260 	struct i596_rbd *v_next;
261 	u32            b_addr;		/* This rbd addr from i596 view */
262 	unsigned char *v_data;		/* Address from CPUs viewpoint */
263 					/* Total 32 bytes... */
264 #ifdef __LP64__
265     u32 cache_pad[4];
266 #endif
267 };
268 
269 /* These values as chosen so struct i596_dma fits in one page... */
270 
271 #define TX_RING_SIZE 32
272 #define RX_RING_SIZE 16
273 
274 struct i596_scb {
275 	unsigned short status;
276 	unsigned short command;
277 	u32           cmd;
278 	u32           rfd;
279 	u32           crc_err;
280 	u32           align_err;
281 	u32           resource_err;
282 	u32           over_err;
283 	u32           rcvdt_err;
284 	u32           short_err;
285 	unsigned short t_on;
286 	unsigned short t_off;
287 };
288 
289 struct i596_iscp {
290 	u32 stat;
291 	u32 scb;
292 };
293 
294 struct i596_scp {
295 	u32 sysbus;
296 	u32 pad;
297 	u32 iscp;
298 };
299 
300 struct i596_dma {
301 	struct i596_scp scp		        __attribute__((aligned(32)));
302 	volatile struct i596_iscp iscp		__attribute__((aligned(32)));
303 	volatile struct i596_scb scb		__attribute__((aligned(32)));
304 	struct sa_cmd sa_cmd			__attribute__((aligned(32)));
305 	struct cf_cmd cf_cmd			__attribute__((aligned(32)));
306 	struct tdr_cmd tdr_cmd			__attribute__((aligned(32)));
307 	struct mc_cmd mc_cmd			__attribute__((aligned(32)));
308 	struct i596_rfd rfds[RX_RING_SIZE]	__attribute__((aligned(32)));
309 	struct i596_rbd rbds[RX_RING_SIZE]	__attribute__((aligned(32)));
310 	struct tx_cmd tx_cmds[TX_RING_SIZE]	__attribute__((aligned(32)));
311 	struct i596_tbd tbds[TX_RING_SIZE]	__attribute__((aligned(32)));
312 };
313 
314 struct i596_private {
315 	struct i596_dma *dma;
316 	u32    stat;
317 	int last_restart;
318 	struct i596_rfd *rfd_head;
319 	struct i596_rbd *rbd_head;
320 	struct i596_cmd *cmd_tail;
321 	struct i596_cmd *cmd_head;
322 	int cmd_backlog;
323 	u32    last_cmd;
324 	int next_tx_cmd;
325 	int options;
326 	spinlock_t lock;       /* serialize access to chip */
327 	dma_addr_t dma_addr;
328 	void __iomem *mpu_port;
329 	void __iomem *ca;
330 };
331 
332 static const char init_setup[] =
333 {
334 	0x8E,		/* length, prefetch on */
335 	0xC8,		/* fifo to 8, monitor off */
336 	0x80,		/* don't save bad frames */
337 	0x2E,		/* No source address insertion, 8 byte preamble */
338 	0x00,		/* priority and backoff defaults */
339 	0x60,		/* interframe spacing */
340 	0x00,		/* slot time LSB */
341 	0xf2,		/* slot time and retries */
342 	0x00,		/* promiscuous mode */
343 	0x00,		/* collision detect */
344 	0x40,		/* minimum frame length */
345 	0xff,
346 	0x00,
347 	0x7f /*  *multi IA */ };
348 
349 static int i596_open(struct net_device *dev);
350 static int i596_start_xmit(struct sk_buff *skb, struct net_device *dev);
351 static irqreturn_t i596_interrupt(int irq, void *dev_id);
352 static int i596_close(struct net_device *dev);
353 static void i596_add_cmd(struct net_device *dev, struct i596_cmd *cmd);
354 static void i596_tx_timeout (struct net_device *dev);
355 static void print_eth(unsigned char *buf, char *str);
356 static void set_multicast_list(struct net_device *dev);
357 static inline void ca(struct net_device *dev);
358 static void mpu_port(struct net_device *dev, int c, dma_addr_t x);
359 
360 static int rx_ring_size = RX_RING_SIZE;
361 static int ticks_limit = 100;
362 static int max_cmd_backlog = TX_RING_SIZE-1;
363 
364 #ifdef CONFIG_NET_POLL_CONTROLLER
365 static void i596_poll_controller(struct net_device *dev);
366 #endif
367 
368 
wait_istat(struct net_device * dev,struct i596_dma * dma,int delcnt,char * str)369 static inline int wait_istat(struct net_device *dev, struct i596_dma *dma, int delcnt, char *str)
370 {
371 	DMA_INV(dev, &(dma->iscp), sizeof(struct i596_iscp));
372 	while (--delcnt && dma->iscp.stat) {
373 		udelay(10);
374 		DMA_INV(dev, &(dma->iscp), sizeof(struct i596_iscp));
375 	}
376 	if (!delcnt) {
377 		printk(KERN_ERR "%s: %s, iscp.stat %04x, didn't clear\n",
378 		     dev->name, str, SWAP16(dma->iscp.stat));
379 		return -1;
380 	} else
381 		return 0;
382 }
383 
384 
wait_cmd(struct net_device * dev,struct i596_dma * dma,int delcnt,char * str)385 static inline int wait_cmd(struct net_device *dev, struct i596_dma *dma, int delcnt, char *str)
386 {
387 	DMA_INV(dev, &(dma->scb), sizeof(struct i596_scb));
388 	while (--delcnt && dma->scb.command) {
389 		udelay(10);
390 		DMA_INV(dev, &(dma->scb), sizeof(struct i596_scb));
391 	}
392 	if (!delcnt) {
393 		printk(KERN_ERR "%s: %s, status %4.4x, cmd %4.4x.\n",
394 		       dev->name, str,
395 		       SWAP16(dma->scb.status),
396 		       SWAP16(dma->scb.command));
397 		return -1;
398 	} else
399 		return 0;
400 }
401 
402 
i596_display_data(struct net_device * dev)403 static void i596_display_data(struct net_device *dev)
404 {
405 	struct i596_private *lp = netdev_priv(dev);
406 	struct i596_dma *dma = lp->dma;
407 	struct i596_cmd *cmd;
408 	struct i596_rfd *rfd;
409 	struct i596_rbd *rbd;
410 
411 	printk(KERN_DEBUG "lp and scp at %p, .sysbus = %08x, .iscp = %08x\n",
412 	       &dma->scp, dma->scp.sysbus, SWAP32(dma->scp.iscp));
413 	printk(KERN_DEBUG "iscp at %p, iscp.stat = %08x, .scb = %08x\n",
414 	       &dma->iscp, SWAP32(dma->iscp.stat), SWAP32(dma->iscp.scb));
415 	printk(KERN_DEBUG "scb at %p, scb.status = %04x, .command = %04x,"
416 		" .cmd = %08x, .rfd = %08x\n",
417 	       &dma->scb, SWAP16(dma->scb.status), SWAP16(dma->scb.command),
418 		SWAP16(dma->scb.cmd), SWAP32(dma->scb.rfd));
419 	printk(KERN_DEBUG "   errors: crc %x, align %x, resource %x,"
420 	       " over %x, rcvdt %x, short %x\n",
421 	       SWAP32(dma->scb.crc_err), SWAP32(dma->scb.align_err),
422 	       SWAP32(dma->scb.resource_err), SWAP32(dma->scb.over_err),
423 	       SWAP32(dma->scb.rcvdt_err), SWAP32(dma->scb.short_err));
424 	cmd = lp->cmd_head;
425 	while (cmd != NULL) {
426 		printk(KERN_DEBUG
427 		       "cmd at %p, .status = %04x, .command = %04x,"
428 		       " .b_next = %08x\n",
429 		       cmd, SWAP16(cmd->status), SWAP16(cmd->command),
430 		       SWAP32(cmd->b_next));
431 		cmd = cmd->v_next;
432 	}
433 	rfd = lp->rfd_head;
434 	printk(KERN_DEBUG "rfd_head = %p\n", rfd);
435 	do {
436 		printk(KERN_DEBUG
437 		       "   %p .stat %04x, .cmd %04x, b_next %08x, rbd %08x,"
438 		       " count %04x\n",
439 		       rfd, SWAP16(rfd->stat), SWAP16(rfd->cmd),
440 		       SWAP32(rfd->b_next), SWAP32(rfd->rbd),
441 		       SWAP16(rfd->count));
442 		rfd = rfd->v_next;
443 	} while (rfd != lp->rfd_head);
444 	rbd = lp->rbd_head;
445 	printk(KERN_DEBUG "rbd_head = %p\n", rbd);
446 	do {
447 		printk(KERN_DEBUG
448 		       "   %p .count %04x, b_next %08x, b_data %08x,"
449 		       " size %04x\n",
450 			rbd, SWAP16(rbd->count), SWAP32(rbd->b_next),
451 		       SWAP32(rbd->b_data), SWAP16(rbd->size));
452 		rbd = rbd->v_next;
453 	} while (rbd != lp->rbd_head);
454 	DMA_INV(dev, dma, sizeof(struct i596_dma));
455 }
456 
457 
458 #define virt_to_dma(lp, v) ((lp)->dma_addr + (dma_addr_t)((unsigned long)(v)-(unsigned long)((lp)->dma)))
459 
init_rx_bufs(struct net_device * dev)460 static inline int init_rx_bufs(struct net_device *dev)
461 {
462 	struct i596_private *lp = netdev_priv(dev);
463 	struct i596_dma *dma = lp->dma;
464 	int i;
465 	struct i596_rfd *rfd;
466 	struct i596_rbd *rbd;
467 
468 	/* First build the Receive Buffer Descriptor List */
469 
470 	for (i = 0, rbd = dma->rbds; i < rx_ring_size; i++, rbd++) {
471 		dma_addr_t dma_addr;
472 		struct sk_buff *skb;
473 
474 		skb = netdev_alloc_skb_ip_align(dev, PKT_BUF_SZ);
475 		if (skb == NULL)
476 			return -1;
477 		dma_addr = dma_map_single(dev->dev.parent, skb->data,
478 					  PKT_BUF_SZ, DMA_FROM_DEVICE);
479 		rbd->v_next = rbd+1;
480 		rbd->b_next = SWAP32(virt_to_dma(lp, rbd+1));
481 		rbd->b_addr = SWAP32(virt_to_dma(lp, rbd));
482 		rbd->skb = skb;
483 		rbd->v_data = skb->data;
484 		rbd->b_data = SWAP32(dma_addr);
485 		rbd->size = SWAP16(PKT_BUF_SZ);
486 	}
487 	lp->rbd_head = dma->rbds;
488 	rbd = dma->rbds + rx_ring_size - 1;
489 	rbd->v_next = dma->rbds;
490 	rbd->b_next = SWAP32(virt_to_dma(lp, dma->rbds));
491 
492 	/* Now build the Receive Frame Descriptor List */
493 
494 	for (i = 0, rfd = dma->rfds; i < rx_ring_size; i++, rfd++) {
495 		rfd->rbd = I596_NULL;
496 		rfd->v_next = rfd+1;
497 		rfd->v_prev = rfd-1;
498 		rfd->b_next = SWAP32(virt_to_dma(lp, rfd+1));
499 		rfd->cmd = SWAP16(CMD_FLEX);
500 	}
501 	lp->rfd_head = dma->rfds;
502 	dma->scb.rfd = SWAP32(virt_to_dma(lp, dma->rfds));
503 	rfd = dma->rfds;
504 	rfd->rbd = SWAP32(virt_to_dma(lp, lp->rbd_head));
505 	rfd->v_prev = dma->rfds + rx_ring_size - 1;
506 	rfd = dma->rfds + rx_ring_size - 1;
507 	rfd->v_next = dma->rfds;
508 	rfd->b_next = SWAP32(virt_to_dma(lp, dma->rfds));
509 	rfd->cmd = SWAP16(CMD_EOL|CMD_FLEX);
510 
511 	DMA_WBACK_INV(dev, dma, sizeof(struct i596_dma));
512 	return 0;
513 }
514 
remove_rx_bufs(struct net_device * dev)515 static inline void remove_rx_bufs(struct net_device *dev)
516 {
517 	struct i596_private *lp = netdev_priv(dev);
518 	struct i596_rbd *rbd;
519 	int i;
520 
521 	for (i = 0, rbd = lp->dma->rbds; i < rx_ring_size; i++, rbd++) {
522 		if (rbd->skb == NULL)
523 			break;
524 		dma_unmap_single(dev->dev.parent,
525 				 (dma_addr_t)SWAP32(rbd->b_data),
526 				 PKT_BUF_SZ, DMA_FROM_DEVICE);
527 		dev_kfree_skb(rbd->skb);
528 	}
529 }
530 
531 
rebuild_rx_bufs(struct net_device * dev)532 static void rebuild_rx_bufs(struct net_device *dev)
533 {
534 	struct i596_private *lp = netdev_priv(dev);
535 	struct i596_dma *dma = lp->dma;
536 	int i;
537 
538 	/* Ensure rx frame/buffer descriptors are tidy */
539 
540 	for (i = 0; i < rx_ring_size; i++) {
541 		dma->rfds[i].rbd = I596_NULL;
542 		dma->rfds[i].cmd = SWAP16(CMD_FLEX);
543 	}
544 	dma->rfds[rx_ring_size-1].cmd = SWAP16(CMD_EOL|CMD_FLEX);
545 	lp->rfd_head = dma->rfds;
546 	dma->scb.rfd = SWAP32(virt_to_dma(lp, dma->rfds));
547 	lp->rbd_head = dma->rbds;
548 	dma->rfds[0].rbd = SWAP32(virt_to_dma(lp, dma->rbds));
549 
550 	DMA_WBACK_INV(dev, dma, sizeof(struct i596_dma));
551 }
552 
553 
init_i596_mem(struct net_device * dev)554 static int init_i596_mem(struct net_device *dev)
555 {
556 	struct i596_private *lp = netdev_priv(dev);
557 	struct i596_dma *dma = lp->dma;
558 	unsigned long flags;
559 
560 	mpu_port(dev, PORT_RESET, 0);
561 	udelay(100);			/* Wait 100us - seems to help */
562 
563 	/* change the scp address */
564 
565 	lp->last_cmd = jiffies;
566 
567 	dma->scp.sysbus = SYSBUS;
568 	dma->scp.iscp = SWAP32(virt_to_dma(lp, &(dma->iscp)));
569 	dma->iscp.scb = SWAP32(virt_to_dma(lp, &(dma->scb)));
570 	dma->iscp.stat = SWAP32(ISCP_BUSY);
571 	lp->cmd_backlog = 0;
572 
573 	lp->cmd_head = NULL;
574 	dma->scb.cmd = I596_NULL;
575 
576 	DEB(DEB_INIT, printk(KERN_DEBUG "%s: starting i82596.\n", dev->name));
577 
578 	DMA_WBACK(dev, &(dma->scp), sizeof(struct i596_scp));
579 	DMA_WBACK(dev, &(dma->iscp), sizeof(struct i596_iscp));
580 	DMA_WBACK(dev, &(dma->scb), sizeof(struct i596_scb));
581 
582 	mpu_port(dev, PORT_ALTSCP, virt_to_dma(lp, &dma->scp));
583 	ca(dev);
584 	if (wait_istat(dev, dma, 1000, "initialization timed out"))
585 		goto failed;
586 	DEB(DEB_INIT, printk(KERN_DEBUG
587 			     "%s: i82596 initialization successful\n",
588 			     dev->name));
589 
590 	if (request_irq(dev->irq, i596_interrupt, 0, "i82596", dev)) {
591 		printk(KERN_ERR "%s: IRQ %d not free\n", dev->name, dev->irq);
592 		goto failed;
593 	}
594 
595 	/* Ensure rx frame/buffer descriptors are tidy */
596 	rebuild_rx_bufs(dev);
597 
598 	dma->scb.command = 0;
599 	DMA_WBACK(dev, &(dma->scb), sizeof(struct i596_scb));
600 
601 	DEB(DEB_INIT, printk(KERN_DEBUG
602 			     "%s: queuing CmdConfigure\n", dev->name));
603 	memcpy(dma->cf_cmd.i596_config, init_setup, 14);
604 	dma->cf_cmd.cmd.command = SWAP16(CmdConfigure);
605 	DMA_WBACK(dev, &(dma->cf_cmd), sizeof(struct cf_cmd));
606 	i596_add_cmd(dev, &dma->cf_cmd.cmd);
607 
608 	DEB(DEB_INIT, printk(KERN_DEBUG "%s: queuing CmdSASetup\n", dev->name));
609 	memcpy(dma->sa_cmd.eth_addr, dev->dev_addr, ETH_ALEN);
610 	dma->sa_cmd.cmd.command = SWAP16(CmdSASetup);
611 	DMA_WBACK(dev, &(dma->sa_cmd), sizeof(struct sa_cmd));
612 	i596_add_cmd(dev, &dma->sa_cmd.cmd);
613 
614 	DEB(DEB_INIT, printk(KERN_DEBUG "%s: queuing CmdTDR\n", dev->name));
615 	dma->tdr_cmd.cmd.command = SWAP16(CmdTDR);
616 	DMA_WBACK(dev, &(dma->tdr_cmd), sizeof(struct tdr_cmd));
617 	i596_add_cmd(dev, &dma->tdr_cmd.cmd);
618 
619 	spin_lock_irqsave (&lp->lock, flags);
620 
621 	if (wait_cmd(dev, dma, 1000, "timed out waiting to issue RX_START")) {
622 		spin_unlock_irqrestore (&lp->lock, flags);
623 		goto failed_free_irq;
624 	}
625 	DEB(DEB_INIT, printk(KERN_DEBUG "%s: Issuing RX_START\n", dev->name));
626 	dma->scb.command = SWAP16(RX_START);
627 	dma->scb.rfd = SWAP32(virt_to_dma(lp, dma->rfds));
628 	DMA_WBACK(dev, &(dma->scb), sizeof(struct i596_scb));
629 
630 	ca(dev);
631 
632 	spin_unlock_irqrestore (&lp->lock, flags);
633 	if (wait_cmd(dev, dma, 1000, "RX_START not processed"))
634 		goto failed_free_irq;
635 	DEB(DEB_INIT, printk(KERN_DEBUG
636 			     "%s: Receive unit started OK\n", dev->name));
637 	return 0;
638 
639 failed_free_irq:
640 	free_irq(dev->irq, dev);
641 failed:
642 	printk(KERN_ERR "%s: Failed to initialise 82596\n", dev->name);
643 	mpu_port(dev, PORT_RESET, 0);
644 	return -1;
645 }
646 
647 
i596_rx(struct net_device * dev)648 static inline int i596_rx(struct net_device *dev)
649 {
650 	struct i596_private *lp = netdev_priv(dev);
651 	struct i596_rfd *rfd;
652 	struct i596_rbd *rbd;
653 	int frames = 0;
654 
655 	DEB(DEB_RXFRAME, printk(KERN_DEBUG
656 				"i596_rx(), rfd_head %p, rbd_head %p\n",
657 				lp->rfd_head, lp->rbd_head));
658 
659 
660 	rfd = lp->rfd_head;		/* Ref next frame to check */
661 
662 	DMA_INV(dev, rfd, sizeof(struct i596_rfd));
663 	while (rfd->stat & SWAP16(STAT_C)) {	/* Loop while complete frames */
664 		if (rfd->rbd == I596_NULL)
665 			rbd = NULL;
666 		else if (rfd->rbd == lp->rbd_head->b_addr) {
667 			rbd = lp->rbd_head;
668 			DMA_INV(dev, rbd, sizeof(struct i596_rbd));
669 		} else {
670 			printk(KERN_ERR "%s: rbd chain broken!\n", dev->name);
671 			/* XXX Now what? */
672 			rbd = NULL;
673 		}
674 		DEB(DEB_RXFRAME, printk(KERN_DEBUG
675 				      "  rfd %p, rfd.rbd %08x, rfd.stat %04x\n",
676 				      rfd, rfd->rbd, rfd->stat));
677 
678 		if (rbd != NULL && (rfd->stat & SWAP16(STAT_OK))) {
679 			/* a good frame */
680 			int pkt_len = SWAP16(rbd->count) & 0x3fff;
681 			struct sk_buff *skb = rbd->skb;
682 			int rx_in_place = 0;
683 
684 			DEB(DEB_RXADDR, print_eth(rbd->v_data, "received"));
685 			frames++;
686 
687 			/* Check if the packet is long enough to just accept
688 			 * without copying to a properly sized skbuff.
689 			 */
690 
691 			if (pkt_len > rx_copybreak) {
692 				struct sk_buff *newskb;
693 				dma_addr_t dma_addr;
694 
695 				dma_unmap_single(dev->dev.parent,
696 						 (dma_addr_t)SWAP32(rbd->b_data),
697 						 PKT_BUF_SZ, DMA_FROM_DEVICE);
698 				/* Get fresh skbuff to replace filled one. */
699 				newskb = netdev_alloc_skb_ip_align(dev,
700 								   PKT_BUF_SZ);
701 				if (newskb == NULL) {
702 					skb = NULL;	/* drop pkt */
703 					goto memory_squeeze;
704 				}
705 
706 				/* Pass up the skb already on the Rx ring. */
707 				skb_put(skb, pkt_len);
708 				rx_in_place = 1;
709 				rbd->skb = newskb;
710 				dma_addr = dma_map_single(dev->dev.parent,
711 							  newskb->data,
712 							  PKT_BUF_SZ,
713 							  DMA_FROM_DEVICE);
714 				rbd->v_data = newskb->data;
715 				rbd->b_data = SWAP32(dma_addr);
716 				DMA_WBACK_INV(dev, rbd, sizeof(struct i596_rbd));
717 			} else {
718 				skb = netdev_alloc_skb_ip_align(dev, pkt_len);
719 			}
720 memory_squeeze:
721 			if (skb == NULL) {
722 				/* XXX tulip.c can defer packets here!! */
723 				dev->stats.rx_dropped++;
724 			} else {
725 				if (!rx_in_place) {
726 					/* 16 byte align the data fields */
727 					dma_sync_single_for_cpu(dev->dev.parent,
728 								(dma_addr_t)SWAP32(rbd->b_data),
729 								PKT_BUF_SZ, DMA_FROM_DEVICE);
730 					memcpy(skb_put(skb, pkt_len), rbd->v_data, pkt_len);
731 					dma_sync_single_for_device(dev->dev.parent,
732 								   (dma_addr_t)SWAP32(rbd->b_data),
733 								   PKT_BUF_SZ, DMA_FROM_DEVICE);
734 				}
735 				skb->len = pkt_len;
736 				skb->protocol = eth_type_trans(skb, dev);
737 				netif_rx(skb);
738 				dev->stats.rx_packets++;
739 				dev->stats.rx_bytes += pkt_len;
740 			}
741 		} else {
742 			DEB(DEB_ERRORS, printk(KERN_DEBUG
743 					       "%s: Error, rfd.stat = 0x%04x\n",
744 					       dev->name, rfd->stat));
745 			dev->stats.rx_errors++;
746 			if (rfd->stat & SWAP16(0x0100))
747 				dev->stats.collisions++;
748 			if (rfd->stat & SWAP16(0x8000))
749 				dev->stats.rx_length_errors++;
750 			if (rfd->stat & SWAP16(0x0001))
751 				dev->stats.rx_over_errors++;
752 			if (rfd->stat & SWAP16(0x0002))
753 				dev->stats.rx_fifo_errors++;
754 			if (rfd->stat & SWAP16(0x0004))
755 				dev->stats.rx_frame_errors++;
756 			if (rfd->stat & SWAP16(0x0008))
757 				dev->stats.rx_crc_errors++;
758 			if (rfd->stat & SWAP16(0x0010))
759 				dev->stats.rx_length_errors++;
760 		}
761 
762 		/* Clear the buffer descriptor count and EOF + F flags */
763 
764 		if (rbd != NULL && (rbd->count & SWAP16(0x4000))) {
765 			rbd->count = 0;
766 			lp->rbd_head = rbd->v_next;
767 			DMA_WBACK_INV(dev, rbd, sizeof(struct i596_rbd));
768 		}
769 
770 		/* Tidy the frame descriptor, marking it as end of list */
771 
772 		rfd->rbd = I596_NULL;
773 		rfd->stat = 0;
774 		rfd->cmd = SWAP16(CMD_EOL|CMD_FLEX);
775 		rfd->count = 0;
776 
777 		/* Update record of next frame descriptor to process */
778 
779 		lp->dma->scb.rfd = rfd->b_next;
780 		lp->rfd_head = rfd->v_next;
781 		DMA_WBACK_INV(dev, rfd, sizeof(struct i596_rfd));
782 
783 		/* Remove end-of-list from old end descriptor */
784 
785 		rfd->v_prev->cmd = SWAP16(CMD_FLEX);
786 		DMA_WBACK_INV(dev, rfd->v_prev, sizeof(struct i596_rfd));
787 		rfd = lp->rfd_head;
788 		DMA_INV(dev, rfd, sizeof(struct i596_rfd));
789 	}
790 
791 	DEB(DEB_RXFRAME, printk(KERN_DEBUG "frames %d\n", frames));
792 
793 	return 0;
794 }
795 
796 
i596_cleanup_cmd(struct net_device * dev,struct i596_private * lp)797 static inline void i596_cleanup_cmd(struct net_device *dev, struct i596_private *lp)
798 {
799 	struct i596_cmd *ptr;
800 
801 	while (lp->cmd_head != NULL) {
802 		ptr = lp->cmd_head;
803 		lp->cmd_head = ptr->v_next;
804 		lp->cmd_backlog--;
805 
806 		switch (SWAP16(ptr->command) & 0x7) {
807 		case CmdTx:
808 			{
809 				struct tx_cmd *tx_cmd = (struct tx_cmd *) ptr;
810 				struct sk_buff *skb = tx_cmd->skb;
811 				dma_unmap_single(dev->dev.parent,
812 						 tx_cmd->dma_addr,
813 						 skb->len, DMA_TO_DEVICE);
814 
815 				dev_kfree_skb(skb);
816 
817 				dev->stats.tx_errors++;
818 				dev->stats.tx_aborted_errors++;
819 
820 				ptr->v_next = NULL;
821 				ptr->b_next = I596_NULL;
822 				tx_cmd->cmd.command = 0;  /* Mark as free */
823 				break;
824 			}
825 		default:
826 			ptr->v_next = NULL;
827 			ptr->b_next = I596_NULL;
828 		}
829 		DMA_WBACK_INV(dev, ptr, sizeof(struct i596_cmd));
830 	}
831 
832 	wait_cmd(dev, lp->dma, 100, "i596_cleanup_cmd timed out");
833 	lp->dma->scb.cmd = I596_NULL;
834 	DMA_WBACK(dev, &(lp->dma->scb), sizeof(struct i596_scb));
835 }
836 
837 
i596_reset(struct net_device * dev,struct i596_private * lp)838 static inline void i596_reset(struct net_device *dev, struct i596_private *lp)
839 {
840 	unsigned long flags;
841 
842 	DEB(DEB_RESET, printk(KERN_DEBUG "i596_reset\n"));
843 
844 	spin_lock_irqsave (&lp->lock, flags);
845 
846 	wait_cmd(dev, lp->dma, 100, "i596_reset timed out");
847 
848 	netif_stop_queue(dev);
849 
850 	/* FIXME: this command might cause an lpmc */
851 	lp->dma->scb.command = SWAP16(CUC_ABORT | RX_ABORT);
852 	DMA_WBACK(dev, &(lp->dma->scb), sizeof(struct i596_scb));
853 	ca(dev);
854 
855 	/* wait for shutdown */
856 	wait_cmd(dev, lp->dma, 1000, "i596_reset 2 timed out");
857 	spin_unlock_irqrestore (&lp->lock, flags);
858 
859 	i596_cleanup_cmd(dev, lp);
860 	i596_rx(dev);
861 
862 	netif_start_queue(dev);
863 	init_i596_mem(dev);
864 }
865 
866 
i596_add_cmd(struct net_device * dev,struct i596_cmd * cmd)867 static void i596_add_cmd(struct net_device *dev, struct i596_cmd *cmd)
868 {
869 	struct i596_private *lp = netdev_priv(dev);
870 	struct i596_dma *dma = lp->dma;
871 	unsigned long flags;
872 
873 	DEB(DEB_ADDCMD, printk(KERN_DEBUG "i596_add_cmd cmd_head %p\n",
874 			       lp->cmd_head));
875 
876 	cmd->status = 0;
877 	cmd->command |= SWAP16(CMD_EOL | CMD_INTR);
878 	cmd->v_next = NULL;
879 	cmd->b_next = I596_NULL;
880 	DMA_WBACK(dev, cmd, sizeof(struct i596_cmd));
881 
882 	spin_lock_irqsave (&lp->lock, flags);
883 
884 	if (lp->cmd_head != NULL) {
885 		lp->cmd_tail->v_next = cmd;
886 		lp->cmd_tail->b_next = SWAP32(virt_to_dma(lp, &cmd->status));
887 		DMA_WBACK(dev, lp->cmd_tail, sizeof(struct i596_cmd));
888 	} else {
889 		lp->cmd_head = cmd;
890 		wait_cmd(dev, dma, 100, "i596_add_cmd timed out");
891 		dma->scb.cmd = SWAP32(virt_to_dma(lp, &cmd->status));
892 		dma->scb.command = SWAP16(CUC_START);
893 		DMA_WBACK(dev, &(dma->scb), sizeof(struct i596_scb));
894 		ca(dev);
895 	}
896 	lp->cmd_tail = cmd;
897 	lp->cmd_backlog++;
898 
899 	spin_unlock_irqrestore (&lp->lock, flags);
900 
901 	if (lp->cmd_backlog > max_cmd_backlog) {
902 		unsigned long tickssofar = jiffies - lp->last_cmd;
903 
904 		if (tickssofar < ticks_limit)
905 			return;
906 
907 		printk(KERN_ERR
908 		       "%s: command unit timed out, status resetting.\n",
909 		       dev->name);
910 #if 1
911 		i596_reset(dev, lp);
912 #endif
913 	}
914 }
915 
i596_open(struct net_device * dev)916 static int i596_open(struct net_device *dev)
917 {
918 	DEB(DEB_OPEN, printk(KERN_DEBUG
919 			     "%s: i596_open() irq %d.\n", dev->name, dev->irq));
920 
921 	if (init_rx_bufs(dev)) {
922 		printk(KERN_ERR "%s: Failed to init rx bufs\n", dev->name);
923 		return -EAGAIN;
924 	}
925 	if (init_i596_mem(dev)) {
926 		printk(KERN_ERR "%s: Failed to init memory\n", dev->name);
927 		goto out_remove_rx_bufs;
928 	}
929 	netif_start_queue(dev);
930 
931 	return 0;
932 
933 out_remove_rx_bufs:
934 	remove_rx_bufs(dev);
935 	return -EAGAIN;
936 }
937 
i596_tx_timeout(struct net_device * dev)938 static void i596_tx_timeout (struct net_device *dev)
939 {
940 	struct i596_private *lp = netdev_priv(dev);
941 
942 	/* Transmitter timeout, serious problems. */
943 	DEB(DEB_ERRORS, printk(KERN_DEBUG
944 			       "%s: transmit timed out, status resetting.\n",
945 			       dev->name));
946 
947 	dev->stats.tx_errors++;
948 
949 	/* Try to restart the adaptor */
950 	if (lp->last_restart == dev->stats.tx_packets) {
951 		DEB(DEB_ERRORS, printk(KERN_DEBUG "Resetting board.\n"));
952 		/* Shutdown and restart */
953 		i596_reset (dev, lp);
954 	} else {
955 		/* Issue a channel attention signal */
956 		DEB(DEB_ERRORS, printk(KERN_DEBUG "Kicking board.\n"));
957 		lp->dma->scb.command = SWAP16(CUC_START | RX_START);
958 		DMA_WBACK_INV(dev, &(lp->dma->scb), sizeof(struct i596_scb));
959 		ca (dev);
960 		lp->last_restart = dev->stats.tx_packets;
961 	}
962 
963 	netif_trans_update(dev); /* prevent tx timeout */
964 	netif_wake_queue (dev);
965 }
966 
967 
i596_start_xmit(struct sk_buff * skb,struct net_device * dev)968 static int i596_start_xmit(struct sk_buff *skb, struct net_device *dev)
969 {
970 	struct i596_private *lp = netdev_priv(dev);
971 	struct tx_cmd *tx_cmd;
972 	struct i596_tbd *tbd;
973 	short length = skb->len;
974 
975 	DEB(DEB_STARTTX, printk(KERN_DEBUG
976 				"%s: i596_start_xmit(%x,%p) called\n",
977 				dev->name, skb->len, skb->data));
978 
979 	if (length < ETH_ZLEN) {
980 		if (skb_padto(skb, ETH_ZLEN))
981 			return NETDEV_TX_OK;
982 		length = ETH_ZLEN;
983 	}
984 
985 	netif_stop_queue(dev);
986 
987 	tx_cmd = lp->dma->tx_cmds + lp->next_tx_cmd;
988 	tbd = lp->dma->tbds + lp->next_tx_cmd;
989 
990 	if (tx_cmd->cmd.command) {
991 		DEB(DEB_ERRORS, printk(KERN_DEBUG
992 				       "%s: xmit ring full, dropping packet.\n",
993 				       dev->name));
994 		dev->stats.tx_dropped++;
995 
996 		dev_kfree_skb_any(skb);
997 	} else {
998 		if (++lp->next_tx_cmd == TX_RING_SIZE)
999 			lp->next_tx_cmd = 0;
1000 		tx_cmd->tbd = SWAP32(virt_to_dma(lp, tbd));
1001 		tbd->next = I596_NULL;
1002 
1003 		tx_cmd->cmd.command = SWAP16(CMD_FLEX | CmdTx);
1004 		tx_cmd->skb = skb;
1005 
1006 		tx_cmd->pad = 0;
1007 		tx_cmd->size = 0;
1008 		tbd->pad = 0;
1009 		tbd->size = SWAP16(EOF | length);
1010 
1011 		tx_cmd->dma_addr = dma_map_single(dev->dev.parent, skb->data,
1012 						  skb->len, DMA_TO_DEVICE);
1013 		tbd->data = SWAP32(tx_cmd->dma_addr);
1014 
1015 		DEB(DEB_TXADDR, print_eth(skb->data, "tx-queued"));
1016 		DMA_WBACK_INV(dev, tx_cmd, sizeof(struct tx_cmd));
1017 		DMA_WBACK_INV(dev, tbd, sizeof(struct i596_tbd));
1018 		i596_add_cmd(dev, &tx_cmd->cmd);
1019 
1020 		dev->stats.tx_packets++;
1021 		dev->stats.tx_bytes += length;
1022 	}
1023 
1024 	netif_start_queue(dev);
1025 
1026 	return NETDEV_TX_OK;
1027 }
1028 
print_eth(unsigned char * add,char * str)1029 static void print_eth(unsigned char *add, char *str)
1030 {
1031 	printk(KERN_DEBUG "i596 0x%p, %pM --> %pM %02X%02X, %s\n",
1032 	       add, add + 6, add, add[12], add[13], str);
1033 }
1034 static const struct net_device_ops i596_netdev_ops = {
1035 	.ndo_open		= i596_open,
1036 	.ndo_stop		= i596_close,
1037 	.ndo_start_xmit		= i596_start_xmit,
1038 	.ndo_set_rx_mode	= set_multicast_list,
1039 	.ndo_tx_timeout		= i596_tx_timeout,
1040 	.ndo_change_mtu		= eth_change_mtu,
1041 	.ndo_validate_addr	= eth_validate_addr,
1042 	.ndo_set_mac_address	= eth_mac_addr,
1043 #ifdef CONFIG_NET_POLL_CONTROLLER
1044 	.ndo_poll_controller	= i596_poll_controller,
1045 #endif
1046 };
1047 
i82596_probe(struct net_device * dev)1048 static int i82596_probe(struct net_device *dev)
1049 {
1050 	int i;
1051 	struct i596_private *lp = netdev_priv(dev);
1052 	struct i596_dma *dma;
1053 
1054 	/* This lot is ensure things have been cache line aligned. */
1055 	BUILD_BUG_ON(sizeof(struct i596_rfd) != 32);
1056 	BUILD_BUG_ON(sizeof(struct i596_rbd) &  31);
1057 	BUILD_BUG_ON(sizeof(struct tx_cmd)   &  31);
1058 	BUILD_BUG_ON(sizeof(struct i596_tbd) != 32);
1059 #ifndef __LP64__
1060 	BUILD_BUG_ON(sizeof(struct i596_dma) > 4096);
1061 #endif
1062 
1063 	if (!dev->base_addr || !dev->irq)
1064 		return -ENODEV;
1065 
1066 	dma = (struct i596_dma *) DMA_ALLOC(dev->dev.parent,
1067 		sizeof(struct i596_dma), &lp->dma_addr, GFP_KERNEL);
1068 	if (!dma) {
1069 		printk(KERN_ERR "%s: Couldn't get shared memory\n", __FILE__);
1070 		return -ENOMEM;
1071 	}
1072 
1073 	dev->netdev_ops = &i596_netdev_ops;
1074 	dev->watchdog_timeo = TX_TIMEOUT;
1075 
1076 	memset(dma, 0, sizeof(struct i596_dma));
1077 	lp->dma = dma;
1078 
1079 	dma->scb.command = 0;
1080 	dma->scb.cmd = I596_NULL;
1081 	dma->scb.rfd = I596_NULL;
1082 	spin_lock_init(&lp->lock);
1083 
1084 	DMA_WBACK_INV(dev, dma, sizeof(struct i596_dma));
1085 
1086 	i = register_netdev(dev);
1087 	if (i) {
1088 		DMA_FREE(dev->dev.parent, sizeof(struct i596_dma),
1089 				    (void *)dma, lp->dma_addr);
1090 		return i;
1091 	}
1092 
1093 	DEB(DEB_PROBE, printk(KERN_INFO "%s: 82596 at %#3lx, %pM IRQ %d.\n",
1094 			      dev->name, dev->base_addr, dev->dev_addr,
1095 			      dev->irq));
1096 	DEB(DEB_INIT, printk(KERN_INFO
1097 			     "%s: dma at 0x%p (%d bytes), lp->scb at 0x%p\n",
1098 			     dev->name, dma, (int)sizeof(struct i596_dma),
1099 			     &dma->scb));
1100 
1101 	return 0;
1102 }
1103 
1104 #ifdef CONFIG_NET_POLL_CONTROLLER
i596_poll_controller(struct net_device * dev)1105 static void i596_poll_controller(struct net_device *dev)
1106 {
1107 	disable_irq(dev->irq);
1108 	i596_interrupt(dev->irq, dev);
1109 	enable_irq(dev->irq);
1110 }
1111 #endif
1112 
i596_interrupt(int irq,void * dev_id)1113 static irqreturn_t i596_interrupt(int irq, void *dev_id)
1114 {
1115 	struct net_device *dev = dev_id;
1116 	struct i596_private *lp;
1117 	struct i596_dma *dma;
1118 	unsigned short status, ack_cmd = 0;
1119 
1120 	lp = netdev_priv(dev);
1121 	dma = lp->dma;
1122 
1123 	spin_lock (&lp->lock);
1124 
1125 	wait_cmd(dev, dma, 100, "i596 interrupt, timeout");
1126 	status = SWAP16(dma->scb.status);
1127 
1128 	DEB(DEB_INTS, printk(KERN_DEBUG
1129 			     "%s: i596 interrupt, IRQ %d, status %4.4x.\n",
1130 			dev->name, dev->irq, status));
1131 
1132 	ack_cmd = status & 0xf000;
1133 
1134 	if (!ack_cmd) {
1135 		DEB(DEB_ERRORS, printk(KERN_DEBUG
1136 				       "%s: interrupt with no events\n",
1137 				       dev->name));
1138 		spin_unlock (&lp->lock);
1139 		return IRQ_NONE;
1140 	}
1141 
1142 	if ((status & 0x8000) || (status & 0x2000)) {
1143 		struct i596_cmd *ptr;
1144 
1145 		if ((status & 0x8000))
1146 			DEB(DEB_INTS,
1147 			    printk(KERN_DEBUG
1148 				   "%s: i596 interrupt completed command.\n",
1149 				   dev->name));
1150 		if ((status & 0x2000))
1151 			DEB(DEB_INTS,
1152 			    printk(KERN_DEBUG
1153 				   "%s: i596 interrupt command unit inactive %x.\n",
1154 				   dev->name, status & 0x0700));
1155 
1156 		while (lp->cmd_head != NULL) {
1157 			DMA_INV(dev, lp->cmd_head, sizeof(struct i596_cmd));
1158 			if (!(lp->cmd_head->status & SWAP16(STAT_C)))
1159 				break;
1160 
1161 			ptr = lp->cmd_head;
1162 
1163 			DEB(DEB_STATUS,
1164 			    printk(KERN_DEBUG
1165 				   "cmd_head->status = %04x, ->command = %04x\n",
1166 				   SWAP16(lp->cmd_head->status),
1167 				   SWAP16(lp->cmd_head->command)));
1168 			lp->cmd_head = ptr->v_next;
1169 			lp->cmd_backlog--;
1170 
1171 			switch (SWAP16(ptr->command) & 0x7) {
1172 			case CmdTx:
1173 			    {
1174 				struct tx_cmd *tx_cmd = (struct tx_cmd *) ptr;
1175 				struct sk_buff *skb = tx_cmd->skb;
1176 
1177 				if (ptr->status & SWAP16(STAT_OK)) {
1178 					DEB(DEB_TXADDR,
1179 					    print_eth(skb->data, "tx-done"));
1180 				} else {
1181 					dev->stats.tx_errors++;
1182 					if (ptr->status & SWAP16(0x0020))
1183 						dev->stats.collisions++;
1184 					if (!(ptr->status & SWAP16(0x0040)))
1185 						dev->stats.tx_heartbeat_errors++;
1186 					if (ptr->status & SWAP16(0x0400))
1187 						dev->stats.tx_carrier_errors++;
1188 					if (ptr->status & SWAP16(0x0800))
1189 						dev->stats.collisions++;
1190 					if (ptr->status & SWAP16(0x1000))
1191 						dev->stats.tx_aborted_errors++;
1192 				}
1193 				dma_unmap_single(dev->dev.parent,
1194 						 tx_cmd->dma_addr,
1195 						 skb->len, DMA_TO_DEVICE);
1196 				dev_kfree_skb_irq(skb);
1197 
1198 				tx_cmd->cmd.command = 0; /* Mark free */
1199 				break;
1200 			    }
1201 			case CmdTDR:
1202 			    {
1203 				unsigned short status = SWAP16(((struct tdr_cmd *)ptr)->status);
1204 
1205 				if (status & 0x8000) {
1206 					DEB(DEB_ANY,
1207 					    printk(KERN_DEBUG "%s: link ok.\n",
1208 						   dev->name));
1209 				} else {
1210 					if (status & 0x4000)
1211 						printk(KERN_ERR
1212 						       "%s: Transceiver problem.\n",
1213 						       dev->name);
1214 					if (status & 0x2000)
1215 						printk(KERN_ERR
1216 						       "%s: Termination problem.\n",
1217 						       dev->name);
1218 					if (status & 0x1000)
1219 						printk(KERN_ERR
1220 						       "%s: Short circuit.\n",
1221 						       dev->name);
1222 
1223 					DEB(DEB_TDR,
1224 					    printk(KERN_DEBUG "%s: Time %d.\n",
1225 						   dev->name, status & 0x07ff));
1226 				}
1227 				break;
1228 			    }
1229 			case CmdConfigure:
1230 				/*
1231 				 * Zap command so set_multicast_list() know
1232 				 * it is free
1233 				 */
1234 				ptr->command = 0;
1235 				break;
1236 			}
1237 			ptr->v_next = NULL;
1238 			ptr->b_next = I596_NULL;
1239 			DMA_WBACK(dev, ptr, sizeof(struct i596_cmd));
1240 			lp->last_cmd = jiffies;
1241 		}
1242 
1243 		/* This mess is arranging that only the last of any outstanding
1244 		 * commands has the interrupt bit set.  Should probably really
1245 		 * only add to the cmd queue when the CU is stopped.
1246 		 */
1247 		ptr = lp->cmd_head;
1248 		while ((ptr != NULL) && (ptr != lp->cmd_tail)) {
1249 			struct i596_cmd *prev = ptr;
1250 
1251 			ptr->command &= SWAP16(0x1fff);
1252 			ptr = ptr->v_next;
1253 			DMA_WBACK_INV(dev, prev, sizeof(struct i596_cmd));
1254 		}
1255 
1256 		if (lp->cmd_head != NULL)
1257 			ack_cmd |= CUC_START;
1258 		dma->scb.cmd = SWAP32(virt_to_dma(lp, &lp->cmd_head->status));
1259 		DMA_WBACK_INV(dev, &dma->scb, sizeof(struct i596_scb));
1260 	}
1261 	if ((status & 0x1000) || (status & 0x4000)) {
1262 		if ((status & 0x4000))
1263 			DEB(DEB_INTS,
1264 			    printk(KERN_DEBUG
1265 				   "%s: i596 interrupt received a frame.\n",
1266 				   dev->name));
1267 		i596_rx(dev);
1268 		/* Only RX_START if stopped - RGH 07-07-96 */
1269 		if (status & 0x1000) {
1270 			if (netif_running(dev)) {
1271 				DEB(DEB_ERRORS,
1272 				    printk(KERN_DEBUG
1273 					   "%s: i596 interrupt receive unit inactive, status 0x%x\n",
1274 					   dev->name, status));
1275 				ack_cmd |= RX_START;
1276 				dev->stats.rx_errors++;
1277 				dev->stats.rx_fifo_errors++;
1278 				rebuild_rx_bufs(dev);
1279 			}
1280 		}
1281 	}
1282 	wait_cmd(dev, dma, 100, "i596 interrupt, timeout");
1283 	dma->scb.command = SWAP16(ack_cmd);
1284 	DMA_WBACK(dev, &dma->scb, sizeof(struct i596_scb));
1285 
1286 	/* DANGER: I suspect that some kind of interrupt
1287 	 acknowledgement aside from acking the 82596 might be needed
1288 	 here...  but it's running acceptably without */
1289 
1290 	ca(dev);
1291 
1292 	wait_cmd(dev, dma, 100, "i596 interrupt, exit timeout");
1293 	DEB(DEB_INTS, printk(KERN_DEBUG "%s: exiting interrupt.\n", dev->name));
1294 
1295 	spin_unlock (&lp->lock);
1296 	return IRQ_HANDLED;
1297 }
1298 
i596_close(struct net_device * dev)1299 static int i596_close(struct net_device *dev)
1300 {
1301 	struct i596_private *lp = netdev_priv(dev);
1302 	unsigned long flags;
1303 
1304 	netif_stop_queue(dev);
1305 
1306 	DEB(DEB_INIT,
1307 	    printk(KERN_DEBUG
1308 		   "%s: Shutting down ethercard, status was %4.4x.\n",
1309 		   dev->name, SWAP16(lp->dma->scb.status)));
1310 
1311 	spin_lock_irqsave(&lp->lock, flags);
1312 
1313 	wait_cmd(dev, lp->dma, 100, "close1 timed out");
1314 	lp->dma->scb.command = SWAP16(CUC_ABORT | RX_ABORT);
1315 	DMA_WBACK(dev, &lp->dma->scb, sizeof(struct i596_scb));
1316 
1317 	ca(dev);
1318 
1319 	wait_cmd(dev, lp->dma, 100, "close2 timed out");
1320 	spin_unlock_irqrestore(&lp->lock, flags);
1321 	DEB(DEB_STRUCT, i596_display_data(dev));
1322 	i596_cleanup_cmd(dev, lp);
1323 
1324 	free_irq(dev->irq, dev);
1325 	remove_rx_bufs(dev);
1326 
1327 	return 0;
1328 }
1329 
1330 /*
1331  *    Set or clear the multicast filter for this adaptor.
1332  */
1333 
set_multicast_list(struct net_device * dev)1334 static void set_multicast_list(struct net_device *dev)
1335 {
1336 	struct i596_private *lp = netdev_priv(dev);
1337 	struct i596_dma *dma = lp->dma;
1338 	int config = 0, cnt;
1339 
1340 	DEB(DEB_MULTI,
1341 	    printk(KERN_DEBUG
1342 		   "%s: set multicast list, %d entries, promisc %s, allmulti %s\n",
1343 		   dev->name, netdev_mc_count(dev),
1344 		   dev->flags & IFF_PROMISC ? "ON" : "OFF",
1345 		   dev->flags & IFF_ALLMULTI ? "ON" : "OFF"));
1346 
1347 	if ((dev->flags & IFF_PROMISC) &&
1348 	    !(dma->cf_cmd.i596_config[8] & 0x01)) {
1349 		dma->cf_cmd.i596_config[8] |= 0x01;
1350 		config = 1;
1351 	}
1352 	if (!(dev->flags & IFF_PROMISC) &&
1353 	    (dma->cf_cmd.i596_config[8] & 0x01)) {
1354 		dma->cf_cmd.i596_config[8] &= ~0x01;
1355 		config = 1;
1356 	}
1357 	if ((dev->flags & IFF_ALLMULTI) &&
1358 	    (dma->cf_cmd.i596_config[11] & 0x20)) {
1359 		dma->cf_cmd.i596_config[11] &= ~0x20;
1360 		config = 1;
1361 	}
1362 	if (!(dev->flags & IFF_ALLMULTI) &&
1363 	    !(dma->cf_cmd.i596_config[11] & 0x20)) {
1364 		dma->cf_cmd.i596_config[11] |= 0x20;
1365 		config = 1;
1366 	}
1367 	if (config) {
1368 		if (dma->cf_cmd.cmd.command)
1369 			printk(KERN_INFO
1370 			       "%s: config change request already queued\n",
1371 			       dev->name);
1372 		else {
1373 			dma->cf_cmd.cmd.command = SWAP16(CmdConfigure);
1374 			DMA_WBACK_INV(dev, &dma->cf_cmd, sizeof(struct cf_cmd));
1375 			i596_add_cmd(dev, &dma->cf_cmd.cmd);
1376 		}
1377 	}
1378 
1379 	cnt = netdev_mc_count(dev);
1380 	if (cnt > MAX_MC_CNT) {
1381 		cnt = MAX_MC_CNT;
1382 		printk(KERN_NOTICE "%s: Only %d multicast addresses supported",
1383 			dev->name, cnt);
1384 	}
1385 
1386 	if (!netdev_mc_empty(dev)) {
1387 		struct netdev_hw_addr *ha;
1388 		unsigned char *cp;
1389 		struct mc_cmd *cmd;
1390 
1391 		cmd = &dma->mc_cmd;
1392 		cmd->cmd.command = SWAP16(CmdMulticastList);
1393 		cmd->mc_cnt = SWAP16(netdev_mc_count(dev) * 6);
1394 		cp = cmd->mc_addrs;
1395 		netdev_for_each_mc_addr(ha, dev) {
1396 			if (!cnt--)
1397 				break;
1398 			memcpy(cp, ha->addr, ETH_ALEN);
1399 			if (i596_debug > 1)
1400 				DEB(DEB_MULTI,
1401 				    printk(KERN_DEBUG
1402 					   "%s: Adding address %pM\n",
1403 					   dev->name, cp));
1404 			cp += ETH_ALEN;
1405 		}
1406 		DMA_WBACK_INV(dev, &dma->mc_cmd, sizeof(struct mc_cmd));
1407 		i596_add_cmd(dev, &cmd->cmd);
1408 	}
1409 }
1410