1 /* lasi_82596.c -- driver for the intel 82596 ethernet controller, as
2 munged into HPPA boxen .
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.
8 3 primary sources of the mess --
9 1) hppa needs *lots* of cacheline flushing to keep this kind of
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*.
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.
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.
23 Split 02/13/2000 Sam Creasey (sammy@oh.verio.com)
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)
29 /* 82596.c: A generic 82596 ethernet driver for linux. */
32 Written 1994 by Mark Evans.
33 This driver is for the Apricot 82596 bus-master interface
35 Modularised 12/94 Mark Evans
38 Modified to support the 82596 ethernet chips on 680x0 VME boards.
39 by Richard Hirst <richard@sleepie.demon.co.uk>
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.
48 * look at deferring rx frames rather than discarding (as per tulip)
49 * handle tx ring full as per tulip
50 * performace test to tune rx_copybreak
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
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.
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
71 #include <linux/module.h>
72 #include <linux/kernel.h>
73 #include <linux/string.h>
74 #include <linux/ptrace.h>
75 #include <linux/errno.h>
76 #include <linux/ioport.h>
77 #include <linux/slab.h>
78 #include <linux/interrupt.h>
79 #include <linux/delay.h>
80 #include <linux/netdevice.h>
81 #include <linux/etherdevice.h>
82 #include <linux/skbuff.h>
83 #include <linux/init.h>
84 #include <linux/pci.h>
85 #include <linux/types.h>
86 #include <linux/bitops.h>
89 #include <asm/pgtable.h>
92 #include <asm/cache.h>
93 #include <asm/parisc-device.h>
95 #define LASI_82596_DRIVER_VERSION "LASI 82596 driver - Revision: 1.30"
100 #define DEB_INIT 0x0001
101 #define DEB_PROBE 0x0002
102 #define DEB_SERIOUS 0x0004
103 #define DEB_ERRORS 0x0008
104 #define DEB_MULTI 0x0010
105 #define DEB_TDR 0x0020
106 #define DEB_OPEN 0x0040
107 #define DEB_RESET 0x0080
108 #define DEB_ADDCMD 0x0100
109 #define DEB_STATUS 0x0200
110 #define DEB_STARTTX 0x0400
111 #define DEB_RXADDR 0x0800
112 #define DEB_TXADDR 0x1000
113 #define DEB_RXFRAME 0x2000
114 #define DEB_INTS 0x4000
115 #define DEB_STRUCT 0x8000
116 #define DEB_ANY 0xffff
119 #define DEB(x,y) if (i596_debug & (x)) { y; }
122 #define CHECK_WBACK(addr,len) \
123 do { dma_cache_sync((void *)addr, len, DMA_TO_DEVICE); } while (0)
125 #define CHECK_INV(addr,len) \
126 do { dma_cache_sync((void *)addr, len, DMA_FROM_DEVICE); } while(0)
128 #define CHECK_WBACK_INV(addr,len) \
129 do { dma_cache_sync((void *)addr, len, DMA_BIDIRECTIONAL); } while (0)
132 #define PA_I82596_RESET 0 /* Offsets relative to LASI-LAN-Addr.*/
133 #define PA_CPU_PORT_L_ACCESS 4
134 #define PA_CHANNEL_ATTENTION 8
138 * Define various macros for Channel Attention, word swapping etc., dependent
139 * on architecture. MVME and BVME are 680x0 based, otherwise it is Intel.
143 #define WSWAPrfd(x) (((u32)(x)<<16) | ((((u32)(x)))>>16))
144 #define WSWAPrbd(x) (((u32)(x)<<16) | ((((u32)(x)))>>16))
145 #define WSWAPiscp(x) (((u32)(x)<<16) | ((((u32)(x)))>>16))
146 #define WSWAPscb(x) (((u32)(x)<<16) | ((((u32)(x)))>>16))
147 #define WSWAPcmd(x) (((u32)(x)<<16) | ((((u32)(x)))>>16))
148 #define WSWAPtbd(x) (((u32)(x)<<16) | ((((u32)(x)))>>16))
149 #define WSWAPchar(x) (((u32)(x)<<16) | ((((u32)(x)))>>16))
150 #define ISCP_BUSY 0x00010000
151 #define MACH_IS_APRICOT 0
153 #define WSWAPrfd(x) ((struct i596_rfd *)(x))
154 #define WSWAPrbd(x) ((struct i596_rbd *)(x))
155 #define WSWAPiscp(x) ((struct i596_iscp *)(x))
156 #define WSWAPscb(x) ((struct i596_scb *)(x))
157 #define WSWAPcmd(x) ((struct i596_cmd *)(x))
158 #define WSWAPtbd(x) ((struct i596_tbd *)(x))
159 #define WSWAPchar(x) ((char *)(x))
160 #define ISCP_BUSY 0x0001
161 #define MACH_IS_APRICOT 1
165 * The MPU_PORT command allows direct access to the 82596. With PORT access
166 * the following commands are available (p5-18). The 32-bit port command
167 * must be word-swapped with the most significant word written first.
168 * This only applies to VME boards.
170 #define PORT_RESET 0x00 /* reset 82596 */
171 #define PORT_SELFTEST 0x01 /* selftest */
172 #define PORT_ALTSCP 0x02 /* alternate SCB address */
173 #define PORT_ALTDUMP 0x03 /* Alternate DUMP address */
175 static int i596_debug = (DEB_SERIOUS|DEB_PROBE);
177 MODULE_AUTHOR("Richard Hirst");
178 MODULE_DESCRIPTION("i82596 driver");
179 MODULE_LICENSE("GPL");
180 module_param(i596_debug, int, 0);
181 MODULE_PARM_DESC(i596_debug, "lasi_82596 debug mask");
183 /* Copy frames shorter than rx_copybreak, otherwise pass on up in
184 * a full sized sk_buff. Value of 100 stolen from tulip.c (!alpha).
186 static int rx_copybreak = 100;
188 #define MAX_DRIVERS 4 /* max count of drivers */
190 #define PKT_BUF_SZ 1536
191 #define MAX_MC_CNT 64
193 #define I596_NULL ((u32)0xffffffff)
195 #define CMD_EOL 0x8000 /* The last command of the list, stop. */
196 #define CMD_SUSP 0x4000 /* Suspend after doing cmd. */
197 #define CMD_INTR 0x2000 /* Interrupt after doing cmd. */
199 #define CMD_FLEX 0x0008 /* Enable flexible memory model */
202 CmdNOp = 0, CmdSASetup = 1, CmdConfigure = 2, CmdMulticastList = 3,
203 CmdTx = 4, CmdTDR = 5, CmdDump = 6, CmdDiagnose = 7
206 #define STAT_C 0x8000 /* Set to 0 after execution */
207 #define STAT_B 0x4000 /* Command being executed */
208 #define STAT_OK 0x2000 /* Command executed ok */
209 #define STAT_A 0x1000 /* Command aborted */
211 #define CUC_START 0x0100
212 #define CUC_RESUME 0x0200
213 #define CUC_SUSPEND 0x0300
214 #define CUC_ABORT 0x0400
215 #define RX_START 0x0010
216 #define RX_RESUME 0x0020
217 #define RX_SUSPEND 0x0030
218 #define RX_ABORT 0x0040
222 #define OPT_SWAP_PORT 0x0001 /* Need to wordswp on the MPU port */
226 unsigned short porthi;
227 unsigned short portlo;
232 #define SIZE_MASK 0x3fff
239 u32 cache_pad[5]; /* Total 32 bytes... */
242 /* The command structure has two 'next' pointers; v_next is the address of
243 * the next command as seen by the CPU, b_next is the address of the next
244 * command as seen by the 82596. The b_next pointer, as used by the 82596
245 * always references the status field of the next command, rather than the
246 * v_next field, because the 82596 is unaware of v_next. It may seem more
247 * logical to put v_next at the end of the structure, but we cannot do that
248 * because the 82596 expects other fields to be there, depending on command
253 struct i596_cmd *v_next; /* Address from CPUs viewpoint */
254 unsigned short status;
255 unsigned short command;
256 dma_addr_t b_next; /* Address from i596 viewpoint */
264 struct sk_buff *skb; /* So we can free it after tx */
267 u32 cache_pad[6]; /* Total 64 bytes... */
269 u32 cache_pad[1]; /* Total 32 bytes... */
275 unsigned short status;
282 char mc_addrs[MAX_MC_CNT*6];
292 char i596_config[16];
298 dma_addr_t b_next; /* Address from i596 viewpoint */
300 unsigned short count;
302 struct i596_rfd *v_next; /* Address from CPUs viewpoint */
303 struct i596_rfd *v_prev;
305 u32 cache_pad[2]; /* Total 32 bytes... */
311 unsigned short count;
312 unsigned short zero1;
314 dma_addr_t b_data; /* Address from i596 viewpoint */
316 unsigned short zero2;
319 struct i596_rbd *v_next;
320 dma_addr_t b_addr; /* This rbd addr from i596 view */
321 unsigned char *v_data; /* Address from CPUs viewpoint */
322 /* Total 32 bytes... */
328 /* These values as chosen so struct i596_private fits in one page... */
330 #define TX_RING_SIZE 32
331 #define RX_RING_SIZE 16
334 unsigned short status;
335 unsigned short command;
345 unsigned short t_off;
359 struct i596_private {
360 volatile struct i596_scp scp __attribute__((aligned(32)));
361 volatile struct i596_iscp iscp __attribute__((aligned(32)));
362 volatile struct i596_scb scb __attribute__((aligned(32)));
363 struct sa_cmd sa_cmd __attribute__((aligned(32)));
364 struct cf_cmd cf_cmd __attribute__((aligned(32)));
365 struct tdr_cmd tdr_cmd __attribute__((aligned(32)));
366 struct mc_cmd mc_cmd __attribute__((aligned(32)));
367 struct i596_rfd rfds[RX_RING_SIZE] __attribute__((aligned(32)));
368 struct i596_rbd rbds[RX_RING_SIZE] __attribute__((aligned(32)));
369 struct tx_cmd tx_cmds[TX_RING_SIZE] __attribute__((aligned(32)));
370 struct i596_tbd tbds[TX_RING_SIZE] __attribute__((aligned(32)));
373 struct i596_rfd *rfd_head;
374 struct i596_rbd *rbd_head;
375 struct i596_cmd *cmd_tail;
376 struct i596_cmd *cmd_head;
379 struct net_device_stats stats;
387 static char init_setup[] =
389 0x8E, /* length, prefetch on */
390 0xC8, /* fifo to 8, monitor off */
391 0x80, /* don't save bad frames */
392 0x2E, /* No source address insertion, 8 byte preamble */
393 0x00, /* priority and backoff defaults */
394 0x60, /* interframe spacing */
395 0x00, /* slot time LSB */
396 0xf2, /* slot time and retries */
397 0x00, /* promiscuous mode */
398 0x00, /* collision detect */
399 0x40, /* minimum frame length */
402 0x7f /* *multi IA */ };
404 static int i596_open(struct net_device *dev);
405 static int i596_start_xmit(struct sk_buff *skb, struct net_device *dev);
406 static irqreturn_t i596_interrupt(int irq, void *dev_id, struct pt_regs *regs);
407 static int i596_close(struct net_device *dev);
408 static struct net_device_stats *i596_get_stats(struct net_device *dev);
409 static void i596_add_cmd(struct net_device *dev, struct i596_cmd *cmd);
410 static void i596_tx_timeout (struct net_device *dev);
411 static void print_eth(unsigned char *buf, char *str);
412 static void set_multicast_list(struct net_device *dev);
414 static int rx_ring_size = RX_RING_SIZE;
415 static int ticks_limit = 100;
416 static int max_cmd_backlog = TX_RING_SIZE-1;
418 #ifdef CONFIG_NET_POLL_CONTROLLER
419 static void i596_poll_controller(struct net_device *dev);
423 static inline void CA(struct net_device *dev)
425 gsc_writel(0, dev->base_addr + PA_CHANNEL_ATTENTION);
429 static inline void MPU_PORT(struct net_device *dev, int c, dma_addr_t x)
431 struct i596_private *lp = dev->priv;
433 u32 v = (u32) (c) | (u32) (x);
436 if (lp->options & OPT_SWAP_PORT) {
444 gsc_writel(a, dev->base_addr + PA_CPU_PORT_L_ACCESS);
446 gsc_writel(b, dev->base_addr + PA_CPU_PORT_L_ACCESS);
450 static inline int wait_istat(struct net_device *dev, struct i596_private *lp, int delcnt, char *str)
452 CHECK_INV(&(lp->iscp), sizeof(struct i596_iscp));
453 while (--delcnt && lp->iscp.stat) {
455 CHECK_INV(&(lp->iscp), sizeof(struct i596_iscp));
458 printk("%s: %s, iscp.stat %04x, didn't clear\n",
459 dev->name, str, lp->iscp.stat);
467 static inline int wait_cmd(struct net_device *dev, struct i596_private *lp, int delcnt, char *str)
469 CHECK_INV(&(lp->scb), sizeof(struct i596_scb));
470 while (--delcnt && lp->scb.command) {
472 CHECK_INV(&(lp->scb), sizeof(struct i596_scb));
475 printk("%s: %s, status %4.4x, cmd %4.4x.\n",
476 dev->name, str, lp->scb.status, lp->scb.command);
484 static void i596_display_data(struct net_device *dev)
486 struct i596_private *lp = dev->priv;
487 struct i596_cmd *cmd;
488 struct i596_rfd *rfd;
489 struct i596_rbd *rbd;
491 printk("lp and scp at %p, .sysbus = %08x, .iscp = %08x\n",
492 &lp->scp, lp->scp.sysbus, lp->scp.iscp);
493 printk("iscp at %p, iscp.stat = %08x, .scb = %08x\n",
494 &lp->iscp, lp->iscp.stat, lp->iscp.scb);
495 printk("scb at %p, scb.status = %04x, .command = %04x,"
496 " .cmd = %08x, .rfd = %08x\n",
497 &lp->scb, lp->scb.status, lp->scb.command,
498 lp->scb.cmd, lp->scb.rfd);
499 printk(" errors: crc %x, align %x, resource %x,"
500 " over %x, rcvdt %x, short %x\n",
501 lp->scb.crc_err, lp->scb.align_err, lp->scb.resource_err,
502 lp->scb.over_err, lp->scb.rcvdt_err, lp->scb.short_err);
504 while (cmd != NULL) {
505 printk("cmd at %p, .status = %04x, .command = %04x, .b_next = %08x\n",
506 cmd, cmd->status, cmd->command, cmd->b_next);
510 printk("rfd_head = %p\n", rfd);
512 printk(" %p .stat %04x, .cmd %04x, b_next %08x, rbd %08x,"
514 rfd, rfd->stat, rfd->cmd, rfd->b_next, rfd->rbd,
517 } while (rfd != lp->rfd_head);
519 printk("rbd_head = %p\n", rbd);
521 printk(" %p .count %04x, b_next %08x, b_data %08x, size %04x\n",
522 rbd, rbd->count, rbd->b_next, rbd->b_data, rbd->size);
524 } while (rbd != lp->rbd_head);
525 CHECK_INV(lp, sizeof(struct i596_private));
529 #if defined(ENABLE_MVME16x_NET) || defined(ENABLE_BVME6000_NET)
530 static void i596_error(int irq, void *dev_id, struct pt_regs *regs)
532 struct net_device *dev = dev_id;
533 volatile unsigned char *pcc2 = (unsigned char *) 0xfff42000;
537 printk("%s: Error interrupt\n", dev->name);
538 i596_display_data(dev);
542 #define virt_to_dma(lp,v) ((lp)->dma_addr + (dma_addr_t)((unsigned long)(v)-(unsigned long)(lp)))
544 static inline void init_rx_bufs(struct net_device *dev)
546 struct i596_private *lp = dev->priv;
548 struct i596_rfd *rfd;
549 struct i596_rbd *rbd;
551 /* First build the Receive Buffer Descriptor List */
553 for (i = 0, rbd = lp->rbds; i < rx_ring_size; i++, rbd++) {
555 struct sk_buff *skb = dev_alloc_skb(PKT_BUF_SZ + 4);
558 panic("%s: alloc_skb() failed", __FILE__);
560 dma_addr = dma_map_single(lp->dev, skb->data,PKT_BUF_SZ,
564 rbd->b_next = WSWAPrbd(virt_to_dma(lp,rbd+1));
565 rbd->b_addr = WSWAPrbd(virt_to_dma(lp,rbd));
567 rbd->v_data = skb->data;
568 rbd->b_data = WSWAPchar(dma_addr);
569 rbd->size = PKT_BUF_SZ;
571 lp->rbd_head = lp->rbds;
572 rbd = lp->rbds + rx_ring_size - 1;
573 rbd->v_next = lp->rbds;
574 rbd->b_next = WSWAPrbd(virt_to_dma(lp,lp->rbds));
576 /* Now build the Receive Frame Descriptor List */
578 for (i = 0, rfd = lp->rfds; i < rx_ring_size; i++, rfd++) {
579 rfd->rbd = I596_NULL;
582 rfd->b_next = WSWAPrfd(virt_to_dma(lp,rfd+1));
585 lp->rfd_head = lp->rfds;
586 lp->scb.rfd = WSWAPrfd(virt_to_dma(lp,lp->rfds));
588 rfd->rbd = WSWAPrbd(virt_to_dma(lp,lp->rbd_head));
589 rfd->v_prev = lp->rfds + rx_ring_size - 1;
590 rfd = lp->rfds + rx_ring_size - 1;
591 rfd->v_next = lp->rfds;
592 rfd->b_next = WSWAPrfd(virt_to_dma(lp,lp->rfds));
593 rfd->cmd = CMD_EOL|CMD_FLEX;
595 CHECK_WBACK_INV(lp, sizeof(struct i596_private));
598 static inline void remove_rx_bufs(struct net_device *dev)
600 struct i596_private *lp = dev->priv;
601 struct i596_rbd *rbd;
604 for (i = 0, rbd = lp->rbds; i < rx_ring_size; i++, rbd++) {
605 if (rbd->skb == NULL)
607 dma_unmap_single(lp->dev,
608 (dma_addr_t)WSWAPchar(rbd->b_data),
609 PKT_BUF_SZ, DMA_FROM_DEVICE);
610 dev_kfree_skb(rbd->skb);
615 static void rebuild_rx_bufs(struct net_device *dev)
617 struct i596_private *lp = dev->priv;
620 /* Ensure rx frame/buffer descriptors are tidy */
622 for (i = 0; i < rx_ring_size; i++) {
623 lp->rfds[i].rbd = I596_NULL;
624 lp->rfds[i].cmd = CMD_FLEX;
626 lp->rfds[rx_ring_size-1].cmd = CMD_EOL|CMD_FLEX;
627 lp->rfd_head = lp->rfds;
628 lp->scb.rfd = WSWAPrfd(virt_to_dma(lp,lp->rfds));
629 lp->rbd_head = lp->rbds;
630 lp->rfds[0].rbd = WSWAPrbd(virt_to_dma(lp,lp->rbds));
632 CHECK_WBACK_INV(lp, sizeof(struct i596_private));
636 static int init_i596_mem(struct net_device *dev)
638 struct i596_private *lp = dev->priv;
641 disable_irq(dev->irq); /* disable IRQs from LAN */
643 printk("RESET 82596 port: %lx (with IRQ %d disabled)\n",
644 (dev->base_addr + PA_I82596_RESET),
647 gsc_writel(0, (dev->base_addr + PA_I82596_RESET)); /* Hard Reset */
648 udelay(100); /* Wait 100us - seems to help */
650 /* change the scp address */
652 lp->last_cmd = jiffies;
655 lp->scp.sysbus = 0x0000006c;
656 lp->scp.iscp = WSWAPiscp(virt_to_dma(lp,&(lp->iscp)));
657 lp->iscp.scb = WSWAPscb(virt_to_dma(lp,&(lp->scb)));
658 lp->iscp.stat = ISCP_BUSY;
662 lp->scb.cmd = I596_NULL;
664 DEB(DEB_INIT, printk("%s: starting i82596.\n", dev->name));
666 CHECK_WBACK(&(lp->scp), sizeof(struct i596_scp));
667 CHECK_WBACK(&(lp->iscp), sizeof(struct i596_iscp));
669 MPU_PORT(dev, PORT_ALTSCP, virt_to_dma(lp,&lp->scp));
673 if (wait_istat(dev, lp, 1000, "initialization timed out"))
675 DEB(DEB_INIT, printk("%s: i82596 initialization successful\n", dev->name));
677 /* Ensure rx frame/buffer descriptors are tidy */
678 rebuild_rx_bufs(dev);
681 CHECK_WBACK(&(lp->scb), sizeof(struct i596_scb));
683 enable_irq(dev->irq); /* enable IRQs from LAN */
685 DEB(DEB_INIT, printk("%s: queuing CmdConfigure\n", dev->name));
686 memcpy(lp->cf_cmd.i596_config, init_setup, 14);
687 lp->cf_cmd.cmd.command = CmdConfigure;
688 CHECK_WBACK(&(lp->cf_cmd), sizeof(struct cf_cmd));
689 i596_add_cmd(dev, &lp->cf_cmd.cmd);
691 DEB(DEB_INIT, printk("%s: queuing CmdSASetup\n", dev->name));
692 memcpy(lp->sa_cmd.eth_addr, dev->dev_addr, 6);
693 lp->sa_cmd.cmd.command = CmdSASetup;
694 CHECK_WBACK(&(lp->sa_cmd), sizeof(struct sa_cmd));
695 i596_add_cmd(dev, &lp->sa_cmd.cmd);
697 DEB(DEB_INIT, printk("%s: queuing CmdTDR\n", dev->name));
698 lp->tdr_cmd.cmd.command = CmdTDR;
699 CHECK_WBACK(&(lp->tdr_cmd), sizeof(struct tdr_cmd));
700 i596_add_cmd(dev, &lp->tdr_cmd.cmd);
702 spin_lock_irqsave (&lp->lock, flags);
704 if (wait_cmd(dev, lp, 1000, "timed out waiting to issue RX_START")) {
705 spin_unlock_irqrestore (&lp->lock, flags);
708 DEB(DEB_INIT, printk("%s: Issuing RX_START\n", dev->name));
709 lp->scb.command = RX_START;
710 lp->scb.rfd = WSWAPrfd(virt_to_dma(lp,lp->rfds));
711 CHECK_WBACK(&(lp->scb), sizeof(struct i596_scb));
715 spin_unlock_irqrestore (&lp->lock, flags);
717 if (wait_cmd(dev, lp, 1000, "RX_START not processed"))
719 DEB(DEB_INIT, printk("%s: Receive unit started OK\n", dev->name));
724 printk("%s: Failed to initialise 82596\n", dev->name);
725 MPU_PORT(dev, PORT_RESET, 0);
730 static inline int i596_rx(struct net_device *dev)
732 struct i596_private *lp = dev->priv;
733 struct i596_rfd *rfd;
734 struct i596_rbd *rbd;
737 DEB(DEB_RXFRAME, printk("i596_rx(), rfd_head %p, rbd_head %p\n",
738 lp->rfd_head, lp->rbd_head));
741 rfd = lp->rfd_head; /* Ref next frame to check */
743 CHECK_INV(rfd, sizeof(struct i596_rfd));
744 while ((rfd->stat) & STAT_C) { /* Loop while complete frames */
745 if (rfd->rbd == I596_NULL)
747 else if (rfd->rbd == lp->rbd_head->b_addr) {
749 CHECK_INV(rbd, sizeof(struct i596_rbd));
752 printk("%s: rbd chain broken!\n", dev->name);
756 DEB(DEB_RXFRAME, printk(" rfd %p, rfd.rbd %08x, rfd.stat %04x\n",
757 rfd, rfd->rbd, rfd->stat));
759 if (rbd != NULL && ((rfd->stat) & STAT_OK)) {
761 int pkt_len = rbd->count & 0x3fff;
762 struct sk_buff *skb = rbd->skb;
765 DEB(DEB_RXADDR,print_eth(rbd->v_data, "received"));
768 /* Check if the packet is long enough to just accept
769 * without copying to a properly sized skbuff.
772 if (pkt_len > rx_copybreak) {
773 struct sk_buff *newskb;
776 dma_unmap_single(lp->dev,(dma_addr_t)WSWAPchar(rbd->b_data), PKT_BUF_SZ, DMA_FROM_DEVICE);
777 /* Get fresh skbuff to replace filled one. */
778 newskb = dev_alloc_skb(PKT_BUF_SZ + 4);
779 if (newskb == NULL) {
780 skb = NULL; /* drop pkt */
783 skb_reserve(newskb, 2);
785 /* Pass up the skb already on the Rx ring. */
786 skb_put(skb, pkt_len);
790 dma_addr = dma_map_single(lp->dev, newskb->data, PKT_BUF_SZ, DMA_FROM_DEVICE);
791 rbd->v_data = newskb->data;
792 rbd->b_data = WSWAPchar(dma_addr);
793 CHECK_WBACK_INV(rbd, sizeof(struct i596_rbd));
796 skb = dev_alloc_skb(pkt_len + 2);
799 /* XXX tulip.c can defer packets here!! */
800 printk("%s: i596_rx Memory squeeze, dropping packet.\n", dev->name);
801 lp->stats.rx_dropped++;
806 /* 16 byte align the data fields */
807 dma_sync_single_for_cpu(lp->dev, (dma_addr_t)WSWAPchar(rbd->b_data), PKT_BUF_SZ, DMA_FROM_DEVICE);
809 memcpy(skb_put(skb,pkt_len), rbd->v_data, pkt_len);
810 dma_sync_single_for_device(lp->dev, (dma_addr_t)WSWAPchar(rbd->b_data), PKT_BUF_SZ, DMA_FROM_DEVICE);
813 skb->protocol=eth_type_trans(skb,dev);
815 dev->last_rx = jiffies;
816 lp->stats.rx_packets++;
817 lp->stats.rx_bytes+=pkt_len;
821 DEB(DEB_ERRORS, printk("%s: Error, rfd.stat = 0x%04x\n",
822 dev->name, rfd->stat));
823 lp->stats.rx_errors++;
824 if ((rfd->stat) & 0x0001)
825 lp->stats.collisions++;
826 if ((rfd->stat) & 0x0080)
827 lp->stats.rx_length_errors++;
828 if ((rfd->stat) & 0x0100)
829 lp->stats.rx_over_errors++;
830 if ((rfd->stat) & 0x0200)
831 lp->stats.rx_fifo_errors++;
832 if ((rfd->stat) & 0x0400)
833 lp->stats.rx_frame_errors++;
834 if ((rfd->stat) & 0x0800)
835 lp->stats.rx_crc_errors++;
836 if ((rfd->stat) & 0x1000)
837 lp->stats.rx_length_errors++;
840 /* Clear the buffer descriptor count and EOF + F flags */
842 if (rbd != NULL && (rbd->count & 0x4000)) {
844 lp->rbd_head = rbd->v_next;
845 CHECK_WBACK_INV(rbd, sizeof(struct i596_rbd));
848 /* Tidy the frame descriptor, marking it as end of list */
850 rfd->rbd = I596_NULL;
852 rfd->cmd = CMD_EOL|CMD_FLEX;
855 /* Remove end-of-list from old end descriptor */
857 rfd->v_prev->cmd = CMD_FLEX;
859 /* Update record of next frame descriptor to process */
861 lp->scb.rfd = rfd->b_next;
862 lp->rfd_head = rfd->v_next;
863 CHECK_WBACK_INV(rfd->v_prev, sizeof(struct i596_rfd));
864 CHECK_WBACK_INV(rfd, sizeof(struct i596_rfd));
866 CHECK_INV(rfd, sizeof(struct i596_rfd));
869 DEB(DEB_RXFRAME, printk("frames %d\n", frames));
875 static inline void i596_cleanup_cmd(struct net_device *dev, struct i596_private *lp)
877 struct i596_cmd *ptr;
879 while (lp->cmd_head != NULL) {
881 lp->cmd_head = ptr->v_next;
884 switch ((ptr->command) & 0x7) {
887 struct tx_cmd *tx_cmd = (struct tx_cmd *) ptr;
888 struct sk_buff *skb = tx_cmd->skb;
889 dma_unmap_single(lp->dev, tx_cmd->dma_addr, skb->len, DMA_TO_DEVICE);
893 lp->stats.tx_errors++;
894 lp->stats.tx_aborted_errors++;
897 ptr->b_next = I596_NULL;
898 tx_cmd->cmd.command = 0; /* Mark as free */
903 ptr->b_next = I596_NULL;
905 CHECK_WBACK_INV(ptr, sizeof(struct i596_cmd));
908 wait_cmd(dev, lp, 100, "i596_cleanup_cmd timed out");
909 lp->scb.cmd = I596_NULL;
910 CHECK_WBACK(&(lp->scb), sizeof(struct i596_scb));
914 static inline void i596_reset(struct net_device *dev, struct i596_private *lp)
918 DEB(DEB_RESET, printk("i596_reset\n"));
920 spin_lock_irqsave (&lp->lock, flags);
922 wait_cmd(dev, lp, 100, "i596_reset timed out");
924 netif_stop_queue(dev);
926 /* FIXME: this command might cause an lpmc */
927 lp->scb.command = CUC_ABORT | RX_ABORT;
928 CHECK_WBACK(&(lp->scb), sizeof(struct i596_scb));
931 /* wait for shutdown */
932 wait_cmd(dev, lp, 1000, "i596_reset 2 timed out");
933 spin_unlock_irqrestore (&lp->lock, flags);
935 i596_cleanup_cmd(dev,lp);
938 netif_start_queue(dev);
943 static void i596_add_cmd(struct net_device *dev, struct i596_cmd *cmd)
945 struct i596_private *lp = dev->priv;
948 DEB(DEB_ADDCMD, printk("i596_add_cmd cmd_head %p\n", lp->cmd_head));
951 cmd->command |= (CMD_EOL | CMD_INTR);
953 cmd->b_next = I596_NULL;
954 CHECK_WBACK(cmd, sizeof(struct i596_cmd));
956 spin_lock_irqsave (&lp->lock, flags);
958 if (lp->cmd_head != NULL) {
959 lp->cmd_tail->v_next = cmd;
960 lp->cmd_tail->b_next = WSWAPcmd(virt_to_dma(lp,&cmd->status));
961 CHECK_WBACK(lp->cmd_tail, sizeof(struct i596_cmd));
964 wait_cmd(dev, lp, 100, "i596_add_cmd timed out");
965 lp->scb.cmd = WSWAPcmd(virt_to_dma(lp,&cmd->status));
966 lp->scb.command = CUC_START;
967 CHECK_WBACK(&(lp->scb), sizeof(struct i596_scb));
973 spin_unlock_irqrestore (&lp->lock, flags);
975 if (lp->cmd_backlog > max_cmd_backlog) {
976 unsigned long tickssofar = jiffies - lp->last_cmd;
978 if (tickssofar < ticks_limit)
981 printk("%s: command unit timed out, status resetting.\n", dev->name);
989 /* this function makes a perfectly adequate probe... but we have a
991 static int i596_test(struct net_device *dev)
993 struct i596_private *lp = dev->priv;
997 tint = (volatile int *)(&(lp->scp));
998 data = virt_to_dma(lp,tint);
1001 CHECK_WBACK(tint,PAGE_SIZE);
1003 MPU_PORT(dev, 1, data);
1005 for(data = 1000000; data; data--) {
1006 CHECK_INV(tint,PAGE_SIZE);
1012 printk("i596_test result %d\n", tint[1]);
1018 static int i596_open(struct net_device *dev)
1020 DEB(DEB_OPEN, printk("%s: i596_open() irq %d.\n", dev->name, dev->irq));
1022 if (request_irq(dev->irq, &i596_interrupt, 0, "i82596", dev)) {
1023 printk("%s: IRQ %d not free\n", dev->name, dev->irq);
1029 if (init_i596_mem(dev)) {
1030 printk("%s: Failed to init memory\n", dev->name);
1031 goto out_remove_rx_bufs;
1034 netif_start_queue(dev);
1039 remove_rx_bufs(dev);
1040 free_irq(dev->irq, dev);
1045 static void i596_tx_timeout (struct net_device *dev)
1047 struct i596_private *lp = dev->priv;
1049 /* Transmitter timeout, serious problems. */
1050 DEB(DEB_ERRORS, printk("%s: transmit timed out, status resetting.\n",
1053 lp->stats.tx_errors++;
1055 /* Try to restart the adaptor */
1056 if (lp->last_restart == lp->stats.tx_packets) {
1057 DEB(DEB_ERRORS, printk("Resetting board.\n"));
1058 /* Shutdown and restart */
1059 i596_reset (dev, lp);
1061 /* Issue a channel attention signal */
1062 DEB(DEB_ERRORS, printk("Kicking board.\n"));
1063 lp->scb.command = CUC_START | RX_START;
1064 CHECK_WBACK_INV(&(lp->scb), sizeof(struct i596_scb));
1066 lp->last_restart = lp->stats.tx_packets;
1069 dev->trans_start = jiffies;
1070 netif_wake_queue (dev);
1074 static int i596_start_xmit(struct sk_buff *skb, struct net_device *dev)
1076 struct i596_private *lp = dev->priv;
1077 struct tx_cmd *tx_cmd;
1078 struct i596_tbd *tbd;
1079 short length = skb->len;
1080 dev->trans_start = jiffies;
1082 DEB(DEB_STARTTX, printk("%s: i596_start_xmit(%x,%p) called\n", dev->name,
1083 skb->len, skb->data));
1085 if (length < ETH_ZLEN) {
1086 if (skb_padto(skb, ETH_ZLEN))
1091 netif_stop_queue(dev);
1093 tx_cmd = lp->tx_cmds + lp->next_tx_cmd;
1094 tbd = lp->tbds + lp->next_tx_cmd;
1096 if (tx_cmd->cmd.command) {
1097 DEB(DEB_ERRORS, printk("%s: xmit ring full, dropping packet.\n",
1099 lp->stats.tx_dropped++;
1103 if (++lp->next_tx_cmd == TX_RING_SIZE)
1104 lp->next_tx_cmd = 0;
1105 tx_cmd->tbd = WSWAPtbd(virt_to_dma(lp,tbd));
1106 tbd->next = I596_NULL;
1108 tx_cmd->cmd.command = CMD_FLEX | CmdTx;
1114 tbd->size = EOF | length;
1116 tx_cmd->dma_addr = dma_map_single(lp->dev, skb->data, skb->len,
1118 tbd->data = WSWAPchar(tx_cmd->dma_addr);
1120 DEB(DEB_TXADDR,print_eth(skb->data, "tx-queued"));
1121 CHECK_WBACK_INV(tx_cmd, sizeof(struct tx_cmd));
1122 CHECK_WBACK_INV(tbd, sizeof(struct i596_tbd));
1123 i596_add_cmd(dev, &tx_cmd->cmd);
1125 lp->stats.tx_packets++;
1126 lp->stats.tx_bytes += length;
1129 netif_start_queue(dev);
1134 static void print_eth(unsigned char *add, char *str)
1138 printk("i596 0x%p, ", add);
1139 for (i = 0; i < 6; i++)
1140 printk(" %02X", add[i + 6]);
1142 for (i = 0; i < 6; i++)
1143 printk(" %02X", add[i]);
1144 printk(" %02X%02X, %s\n", add[12], add[13], str);
1148 #define LAN_PROM_ADDR 0xF0810000
1150 static int __devinit i82596_probe(struct net_device *dev,
1151 struct device *gen_dev)
1154 struct i596_private *lp;
1156 dma_addr_t dma_addr;
1158 /* This lot is ensure things have been cache line aligned. */
1159 if (sizeof(struct i596_rfd) != 32) {
1160 printk("82596: sizeof(struct i596_rfd) = %d\n",
1161 (int)sizeof(struct i596_rfd));
1164 if ((sizeof(struct i596_rbd) % 32) != 0) {
1165 printk("82596: sizeof(struct i596_rbd) = %d\n",
1166 (int)sizeof(struct i596_rbd));
1169 if ((sizeof(struct tx_cmd) % 32) != 0) {
1170 printk("82596: sizeof(struct tx_cmd) = %d\n",
1171 (int)sizeof(struct tx_cmd));
1174 if (sizeof(struct i596_tbd) != 32) {
1175 printk("82596: sizeof(struct i596_tbd) = %d\n",
1176 (int)sizeof(struct i596_tbd));
1180 if (sizeof(struct i596_private) > 4096) {
1181 printk("82596: sizeof(struct i596_private) = %d\n",
1182 (int)sizeof(struct i596_private));
1187 if (!dev->base_addr || !dev->irq)
1190 if (pdc_lan_station_id(eth_addr, dev->base_addr)) {
1191 for (i=0; i < 6; i++) {
1192 eth_addr[i] = gsc_readb(LAN_PROM_ADDR + i);
1194 printk(KERN_INFO "%s: MAC of HP700 LAN read from EEPROM\n", __FILE__);
1197 dev->mem_start = (unsigned long) dma_alloc_noncoherent(gen_dev,
1198 sizeof(struct i596_private), &dma_addr, GFP_KERNEL);
1199 if (!dev->mem_start) {
1200 printk(KERN_ERR "%s: Couldn't get shared memory\n", __FILE__);
1204 for (i = 0; i < 6; i++)
1205 dev->dev_addr[i] = eth_addr[i];
1207 /* The 82596-specific entries in the device structure. */
1208 dev->open = i596_open;
1209 dev->stop = i596_close;
1210 dev->hard_start_xmit = i596_start_xmit;
1211 dev->get_stats = i596_get_stats;
1212 dev->set_multicast_list = set_multicast_list;
1213 dev->tx_timeout = i596_tx_timeout;
1214 dev->watchdog_timeo = TX_TIMEOUT;
1215 #ifdef CONFIG_NET_POLL_CONTROLLER
1216 dev->poll_controller = i596_poll_controller;
1219 dev->priv = (void *)(dev->mem_start);
1222 memset(lp, 0, sizeof(struct i596_private));
1224 lp->scb.command = 0;
1225 lp->scb.cmd = I596_NULL;
1226 lp->scb.rfd = I596_NULL;
1227 spin_lock_init(&lp->lock);
1228 lp->dma_addr = dma_addr;
1231 CHECK_WBACK_INV(dev->mem_start, sizeof(struct i596_private));
1233 i = register_netdev(dev);
1236 dma_free_noncoherent(lp->dev, sizeof(struct i596_private),
1237 (void *)dev->mem_start, lp->dma_addr);
1241 DEB(DEB_PROBE, printk(KERN_INFO "%s: 82596 at %#3lx,", dev->name, dev->base_addr));
1242 for (i = 0; i < 6; i++)
1243 DEB(DEB_PROBE, printk(" %2.2X", dev->dev_addr[i]));
1244 DEB(DEB_PROBE, printk(" IRQ %d.\n", dev->irq));
1245 DEB(DEB_INIT, printk(KERN_INFO "%s: lp at 0x%p (%d bytes), lp->scb at 0x%p\n",
1246 dev->name, lp, (int)sizeof(struct i596_private), &lp->scb));
1251 #ifdef CONFIG_NET_POLL_CONTROLLER
1252 static void i596_poll_controller(struct net_device *dev)
1254 disable_irq(dev->irq);
1255 i596_interrupt(dev->irq, dev, NULL);
1256 enable_irq(dev->irq);
1260 static irqreturn_t i596_interrupt(int irq, void *dev_id, struct pt_regs *regs)
1262 struct net_device *dev = dev_id;
1263 struct i596_private *lp;
1264 unsigned short status, ack_cmd = 0;
1267 printk("%s: irq %d for unknown device.\n", __FUNCTION__, irq);
1273 spin_lock (&lp->lock);
1275 wait_cmd(dev, lp, 100, "i596 interrupt, timeout");
1276 status = lp->scb.status;
1278 DEB(DEB_INTS, printk("%s: i596 interrupt, IRQ %d, status %4.4x.\n",
1279 dev->name, irq, status));
1281 ack_cmd = status & 0xf000;
1284 DEB(DEB_ERRORS, printk("%s: interrupt with no events\n", dev->name));
1285 spin_unlock (&lp->lock);
1289 if ((status & 0x8000) || (status & 0x2000)) {
1290 struct i596_cmd *ptr;
1292 if ((status & 0x8000))
1293 DEB(DEB_INTS, printk("%s: i596 interrupt completed command.\n", dev->name));
1294 if ((status & 0x2000))
1295 DEB(DEB_INTS, printk("%s: i596 interrupt command unit inactive %x.\n", dev->name, status & 0x0700));
1297 while (lp->cmd_head != NULL) {
1298 CHECK_INV(lp->cmd_head, sizeof(struct i596_cmd));
1299 if (!(lp->cmd_head->status & STAT_C))
1304 DEB(DEB_STATUS, printk("cmd_head->status = %04x, ->command = %04x\n",
1305 lp->cmd_head->status, lp->cmd_head->command));
1306 lp->cmd_head = ptr->v_next;
1309 switch ((ptr->command) & 0x7) {
1312 struct tx_cmd *tx_cmd = (struct tx_cmd *) ptr;
1313 struct sk_buff *skb = tx_cmd->skb;
1315 if ((ptr->status) & STAT_OK) {
1316 DEB(DEB_TXADDR, print_eth(skb->data, "tx-done"));
1318 lp->stats.tx_errors++;
1319 if ((ptr->status) & 0x0020)
1320 lp->stats.collisions++;
1321 if (!((ptr->status) & 0x0040))
1322 lp->stats.tx_heartbeat_errors++;
1323 if ((ptr->status) & 0x0400)
1324 lp->stats.tx_carrier_errors++;
1325 if ((ptr->status) & 0x0800)
1326 lp->stats.collisions++;
1327 if ((ptr->status) & 0x1000)
1328 lp->stats.tx_aborted_errors++;
1330 dma_unmap_single(lp->dev, tx_cmd->dma_addr, skb->len, DMA_TO_DEVICE);
1331 dev_kfree_skb_irq(skb);
1333 tx_cmd->cmd.command = 0; /* Mark free */
1338 unsigned short status = ((struct tdr_cmd *)ptr)->status;
1340 if (status & 0x8000) {
1341 DEB(DEB_ANY, printk("%s: link ok.\n", dev->name));
1343 if (status & 0x4000)
1344 printk("%s: Transceiver problem.\n", dev->name);
1345 if (status & 0x2000)
1346 printk("%s: Termination problem.\n", dev->name);
1347 if (status & 0x1000)
1348 printk("%s: Short circuit.\n", dev->name);
1350 DEB(DEB_TDR, printk("%s: Time %d.\n", dev->name, status & 0x07ff));
1355 /* Zap command so set_multicast_list() knows it is free */
1360 ptr->b_next = I596_NULL;
1361 CHECK_WBACK(ptr, sizeof(struct i596_cmd));
1362 lp->last_cmd = jiffies;
1365 /* This mess is arranging that only the last of any outstanding
1366 * commands has the interrupt bit set. Should probably really
1367 * only add to the cmd queue when the CU is stopped.
1370 while ((ptr != NULL) && (ptr != lp->cmd_tail)) {
1371 struct i596_cmd *prev = ptr;
1373 ptr->command &= 0x1fff;
1375 CHECK_WBACK_INV(prev, sizeof(struct i596_cmd));
1378 if ((lp->cmd_head != NULL))
1379 ack_cmd |= CUC_START;
1380 lp->scb.cmd = WSWAPcmd(virt_to_dma(lp,&lp->cmd_head->status));
1381 CHECK_WBACK_INV(&lp->scb, sizeof(struct i596_scb));
1383 if ((status & 0x1000) || (status & 0x4000)) {
1384 if ((status & 0x4000))
1385 DEB(DEB_INTS, printk("%s: i596 interrupt received a frame.\n", dev->name));
1387 /* Only RX_START if stopped - RGH 07-07-96 */
1388 if (status & 0x1000) {
1389 if (netif_running(dev)) {
1390 DEB(DEB_ERRORS, printk("%s: i596 interrupt receive unit inactive, status 0x%x\n", dev->name, status));
1391 ack_cmd |= RX_START;
1392 lp->stats.rx_errors++;
1393 lp->stats.rx_fifo_errors++;
1394 rebuild_rx_bufs(dev);
1398 wait_cmd(dev, lp, 100, "i596 interrupt, timeout");
1399 lp->scb.command = ack_cmd;
1400 CHECK_WBACK(&lp->scb, sizeof(struct i596_scb));
1402 /* DANGER: I suspect that some kind of interrupt
1403 acknowledgement aside from acking the 82596 might be needed
1404 here... but it's running acceptably without */
1408 wait_cmd(dev, lp, 100, "i596 interrupt, exit timeout");
1409 DEB(DEB_INTS, printk("%s: exiting interrupt.\n", dev->name));
1411 spin_unlock (&lp->lock);
1415 static int i596_close(struct net_device *dev)
1417 struct i596_private *lp = dev->priv;
1418 unsigned long flags;
1420 netif_stop_queue(dev);
1422 DEB(DEB_INIT, printk("%s: Shutting down ethercard, status was %4.4x.\n",
1423 dev->name, lp->scb.status));
1425 spin_lock_irqsave(&lp->lock, flags);
1427 wait_cmd(dev, lp, 100, "close1 timed out");
1428 lp->scb.command = CUC_ABORT | RX_ABORT;
1429 CHECK_WBACK(&lp->scb, sizeof(struct i596_scb));
1433 wait_cmd(dev, lp, 100, "close2 timed out");
1434 spin_unlock_irqrestore(&lp->lock, flags);
1435 DEB(DEB_STRUCT,i596_display_data(dev));
1436 i596_cleanup_cmd(dev,lp);
1438 disable_irq(dev->irq);
1440 free_irq(dev->irq, dev);
1441 remove_rx_bufs(dev);
1446 static struct net_device_stats *
1447 i596_get_stats(struct net_device *dev)
1449 struct i596_private *lp = dev->priv;
1455 * Set or clear the multicast filter for this adaptor.
1458 static void set_multicast_list(struct net_device *dev)
1460 struct i596_private *lp = dev->priv;
1461 int config = 0, cnt;
1463 DEB(DEB_MULTI, printk("%s: set multicast list, %d entries, promisc %s, allmulti %s\n",
1464 dev->name, dev->mc_count, dev->flags & IFF_PROMISC ? "ON" : "OFF",
1465 dev->flags & IFF_ALLMULTI ? "ON" : "OFF"));
1467 if ((dev->flags & IFF_PROMISC) && !(lp->cf_cmd.i596_config[8] & 0x01)) {
1468 lp->cf_cmd.i596_config[8] |= 0x01;
1471 if (!(dev->flags & IFF_PROMISC) && (lp->cf_cmd.i596_config[8] & 0x01)) {
1472 lp->cf_cmd.i596_config[8] &= ~0x01;
1475 if ((dev->flags & IFF_ALLMULTI) && (lp->cf_cmd.i596_config[11] & 0x20)) {
1476 lp->cf_cmd.i596_config[11] &= ~0x20;
1479 if (!(dev->flags & IFF_ALLMULTI) && !(lp->cf_cmd.i596_config[11] & 0x20)) {
1480 lp->cf_cmd.i596_config[11] |= 0x20;
1484 if (lp->cf_cmd.cmd.command)
1485 printk("%s: config change request already queued\n",
1488 lp->cf_cmd.cmd.command = CmdConfigure;
1489 CHECK_WBACK_INV(&lp->cf_cmd, sizeof(struct cf_cmd));
1490 i596_add_cmd(dev, &lp->cf_cmd.cmd);
1494 cnt = dev->mc_count;
1495 if (cnt > MAX_MC_CNT)
1498 printk("%s: Only %d multicast addresses supported",
1502 if (dev->mc_count > 0) {
1503 struct dev_mc_list *dmi;
1508 cmd->cmd.command = CmdMulticastList;
1509 cmd->mc_cnt = dev->mc_count * 6;
1511 for (dmi = dev->mc_list; cnt && dmi != NULL; dmi = dmi->next, cnt--, cp += 6) {
1512 memcpy(cp, dmi->dmi_addr, 6);
1514 DEB(DEB_MULTI, printk("%s: Adding address %02x:%02x:%02x:%02x:%02x:%02x\n",
1515 dev->name, cp[0],cp[1],cp[2],cp[3],cp[4],cp[5]));
1517 CHECK_WBACK_INV(&lp->mc_cmd, sizeof(struct mc_cmd));
1518 i596_add_cmd(dev, &cmd->cmd);
1522 static int debug = -1;
1523 module_param(debug, int, 0);
1524 MODULE_PARM_DESC(debug, "lasi_82596 debug mask");
1526 static int num_drivers;
1527 static struct net_device *netdevs[MAX_DRIVERS];
1529 static int __devinit
1530 lan_init_chip(struct parisc_device *dev)
1532 struct net_device *netdevice;
1535 if (num_drivers >= MAX_DRIVERS) {
1536 /* max count of possible i82596 drivers reached */
1540 if (num_drivers == 0)
1541 printk(KERN_INFO LASI_82596_DRIVER_VERSION "\n");
1544 printk(KERN_ERR "%s: IRQ not found for i82596 at 0x%lx\n",
1545 __FILE__, dev->hpa.start);
1549 printk(KERN_INFO "Found i82596 at 0x%lx, IRQ %d\n", dev->hpa.start,
1552 netdevice = alloc_etherdev(0);
1556 netdevice->base_addr = dev->hpa.start;
1557 netdevice->irq = dev->irq;
1559 retval = i82596_probe(netdevice, &dev->dev);
1561 free_netdev(netdevice);
1565 if (dev->id.sversion == 0x72) {
1566 ((struct i596_private *)netdevice->priv)->options = OPT_SWAP_PORT;
1569 netdevs[num_drivers++] = netdevice;
1575 static struct parisc_device_id lan_tbl[] = {
1576 { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0008a },
1577 { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x00072 },
1581 MODULE_DEVICE_TABLE(parisc, lan_tbl);
1583 static struct parisc_driver lan_driver = {
1584 .name = "lasi_82596",
1585 .id_table = lan_tbl,
1586 .probe = lan_init_chip,
1589 static int __devinit lasi_82596_init(void)
1593 return register_parisc_driver(&lan_driver);
1596 module_init(lasi_82596_init);
1598 static void __exit lasi_82596_exit(void)
1602 for (i=0; i<MAX_DRIVERS; i++) {
1603 struct i596_private *lp;
1604 struct net_device *netdevice;
1606 netdevice = netdevs[i];
1610 unregister_netdev(netdevice);
1612 lp = netdevice->priv;
1613 dma_free_noncoherent(lp->dev, sizeof(struct i596_private),
1614 (void *)netdevice->mem_start, lp->dma_addr);
1615 free_netdev(netdevice);
1619 unregister_parisc_driver(&lan_driver);
1622 module_exit(lasi_82596_exit);