Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / drivers / net / lasi_82596.c
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    * performace 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/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>
87
88 #include <asm/io.h>
89 #include <asm/pgtable.h>
90 #include <asm/irq.h>
91 #include <asm/pdc.h>
92 #include <asm/cache.h>
93 #include <asm/parisc-device.h>
94
95 #define LASI_82596_DRIVER_VERSION "LASI 82596 driver - Revision: 1.30"
96
97 /* DEBUG flags
98  */
99
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
117
118
119 #define DEB(x,y)        if (i596_debug & (x)) { y; }
120
121
122 #define  CHECK_WBACK(addr,len) \
123         do { dma_cache_sync((void *)addr, len, DMA_TO_DEVICE); } while (0)
124
125 #define  CHECK_INV(addr,len) \
126         do { dma_cache_sync((void *)addr, len, DMA_FROM_DEVICE); } while(0)
127
128 #define  CHECK_WBACK_INV(addr,len) \
129         do { dma_cache_sync((void *)addr, len, DMA_BIDIRECTIONAL); } while (0)
130
131
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
135
136
137 /*
138  * Define various macros for Channel Attention, word swapping etc., dependent
139  * on architecture.  MVME and BVME are 680x0 based, otherwise it is Intel.
140  */
141
142 #ifdef __BIG_ENDIAN
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
152 #else
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
162 #endif
163
164 /*
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.
169  */
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 */
174
175 static int i596_debug = (DEB_SERIOUS|DEB_PROBE);  
176
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");
182
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).
185  */
186 static int rx_copybreak = 100;
187
188 #define MAX_DRIVERS     4       /* max count of drivers */
189
190 #define PKT_BUF_SZ      1536
191 #define MAX_MC_CNT      64
192
193 #define I596_NULL ((u32)0xffffffff)
194
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. */
198
199 #define CMD_FLEX        0x0008  /* Enable flexible memory model */
200
201 enum commands {
202         CmdNOp = 0, CmdSASetup = 1, CmdConfigure = 2, CmdMulticastList = 3,
203         CmdTx = 4, CmdTDR = 5, CmdDump = 6, CmdDiagnose = 7
204 };
205
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 */
210
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
219
220 #define TX_TIMEOUT      5
221
222 #define OPT_SWAP_PORT   0x0001  /* Need to wordswp on the MPU port */
223
224
225 struct i596_reg {
226         unsigned short porthi;
227         unsigned short portlo;
228         u32            ca;
229 };
230
231 #define EOF             0x8000
232 #define SIZE_MASK       0x3fff
233
234 struct i596_tbd {
235         unsigned short size;
236         unsigned short pad;
237         dma_addr_t     next;
238         dma_addr_t     data;
239         u32 cache_pad[5];               /* Total 32 bytes... */
240 };
241
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
249  * type.
250  */
251
252 struct i596_cmd {
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 */
257 };
258
259 struct tx_cmd {
260         struct i596_cmd cmd;
261         dma_addr_t     tbd;
262         unsigned short size;
263         unsigned short pad;
264         struct sk_buff *skb;            /* So we can free it after tx */
265         dma_addr_t dma_addr;
266 #ifdef __LP64__
267         u32 cache_pad[6];               /* Total 64 bytes... */
268 #else    
269         u32 cache_pad[1];               /* Total 32 bytes... */
270 #endif    
271 };
272
273 struct tdr_cmd {
274         struct i596_cmd cmd;
275         unsigned short status;
276         unsigned short pad;
277 };
278
279 struct mc_cmd {
280         struct i596_cmd cmd;
281         short mc_cnt;
282         char mc_addrs[MAX_MC_CNT*6];
283 };
284
285 struct sa_cmd {
286         struct i596_cmd cmd;
287         char eth_addr[8];
288 };
289
290 struct cf_cmd {
291         struct i596_cmd cmd;
292         char i596_config[16];
293 };
294
295 struct i596_rfd {
296         unsigned short stat;
297         unsigned short cmd;
298         dma_addr_t     b_next;  /* Address from i596 viewpoint */
299         dma_addr_t     rbd;
300         unsigned short count;
301         unsigned short size;
302         struct i596_rfd *v_next;        /* Address from CPUs viewpoint */
303         struct i596_rfd *v_prev;
304 #ifndef __LP64__    
305         u32 cache_pad[2];               /* Total 32 bytes... */
306 #endif    
307 };
308
309 struct i596_rbd {
310     /* hardware data */
311     unsigned short count;
312     unsigned short zero1;
313     dma_addr_t     b_next;
314     dma_addr_t     b_data;              /* Address from i596 viewpoint */
315     unsigned short size;
316     unsigned short zero2;
317     /* driver data */
318     struct sk_buff *skb;
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... */
323 #ifdef __LP64__
324     u32 cache_pad[4];
325 #endif    
326 };
327
328 /* These values as chosen so struct i596_private fits in one page... */
329
330 #define TX_RING_SIZE 32
331 #define RX_RING_SIZE 16
332
333 struct i596_scb {
334         unsigned short status;
335         unsigned short command;
336         dma_addr_t    cmd;
337         dma_addr_t    rfd;
338         u32           crc_err;
339         u32           align_err;
340         u32           resource_err;
341         u32           over_err;
342         u32           rcvdt_err;
343         u32           short_err;
344         unsigned short t_on;
345         unsigned short t_off;
346 };
347
348 struct i596_iscp {
349         u32           stat;
350         dma_addr_t    scb;
351 };
352
353 struct i596_scp {
354         u32           sysbus;
355         u32            pad;
356         dma_addr_t    iscp;
357 };
358
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)));
371         u32    stat;
372         int last_restart;
373         struct i596_rfd *rfd_head;
374         struct i596_rbd *rbd_head;
375         struct i596_cmd *cmd_tail;
376         struct i596_cmd *cmd_head;
377         int cmd_backlog;
378         u32    last_cmd;
379         struct net_device_stats stats;
380         int next_tx_cmd;
381         int options;
382         spinlock_t lock;
383         dma_addr_t dma_addr;
384         struct device *dev;
385 };
386
387 static char init_setup[] =
388 {
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 */
400         0xff,
401         0x00,
402         0x7f /*  *multi IA */ };
403
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);
413
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;
417
418 #ifdef CONFIG_NET_POLL_CONTROLLER
419 static void i596_poll_controller(struct net_device *dev);
420 #endif
421
422
423 static inline void CA(struct net_device *dev)
424 {
425         gsc_writel(0, dev->base_addr + PA_CHANNEL_ATTENTION);
426 }
427
428
429 static inline void MPU_PORT(struct net_device *dev, int c, dma_addr_t x)
430 {
431         struct i596_private *lp = dev->priv;
432
433         u32 v = (u32) (c) | (u32) (x);
434         u16 a, b;
435
436         if (lp->options & OPT_SWAP_PORT) {
437                 a = v >> 16;
438                 b = v & 0xffff;
439         } else {
440                 a = v & 0xffff;
441                 b = v >> 16;
442         }
443
444         gsc_writel(a, dev->base_addr + PA_CPU_PORT_L_ACCESS);
445         udelay(1);
446         gsc_writel(b, dev->base_addr + PA_CPU_PORT_L_ACCESS);
447 }
448
449
450 static inline int wait_istat(struct net_device *dev, struct i596_private *lp, int delcnt, char *str)
451 {
452         CHECK_INV(&(lp->iscp), sizeof(struct i596_iscp));
453         while (--delcnt && lp->iscp.stat) {
454                 udelay(10);
455                 CHECK_INV(&(lp->iscp), sizeof(struct i596_iscp));
456         }
457         if (!delcnt) {
458                 printk("%s: %s, iscp.stat %04x, didn't clear\n",
459                      dev->name, str, lp->iscp.stat);
460                 return -1;
461         }
462         else
463                 return 0;
464 }
465
466
467 static inline int wait_cmd(struct net_device *dev, struct i596_private *lp, int delcnt, char *str)
468 {
469         CHECK_INV(&(lp->scb), sizeof(struct i596_scb));
470         while (--delcnt && lp->scb.command) {
471                 udelay(10);
472                 CHECK_INV(&(lp->scb), sizeof(struct i596_scb));
473         }
474         if (!delcnt) {
475                 printk("%s: %s, status %4.4x, cmd %4.4x.\n",
476                      dev->name, str, lp->scb.status, lp->scb.command);
477                 return -1;
478         }
479         else
480                 return 0;
481 }
482
483
484 static void i596_display_data(struct net_device *dev)
485 {
486         struct i596_private *lp = dev->priv;
487         struct i596_cmd *cmd;
488         struct i596_rfd *rfd;
489         struct i596_rbd *rbd;
490
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);
503         cmd = lp->cmd_head;
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);
507                 cmd = cmd->v_next;
508         }
509         rfd = lp->rfd_head;
510         printk("rfd_head = %p\n", rfd);
511         do {
512                 printk("   %p .stat %04x, .cmd %04x, b_next %08x, rbd %08x,"
513                         " count %04x\n",
514                         rfd, rfd->stat, rfd->cmd, rfd->b_next, rfd->rbd,
515                         rfd->count);
516                 rfd = rfd->v_next;
517         } while (rfd != lp->rfd_head);
518         rbd = lp->rbd_head;
519         printk("rbd_head = %p\n", rbd);
520         do {
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);
523                 rbd = rbd->v_next;
524         } while (rbd != lp->rbd_head);
525         CHECK_INV(lp, sizeof(struct i596_private));
526 }
527
528
529 #if defined(ENABLE_MVME16x_NET) || defined(ENABLE_BVME6000_NET)
530 static void i596_error(int irq, void *dev_id, struct pt_regs *regs)
531 {
532         struct net_device *dev = dev_id;
533         volatile unsigned char *pcc2 = (unsigned char *) 0xfff42000;
534
535         pcc2[0x28] = 1;
536         pcc2[0x2b] = 0x1d;
537         printk("%s: Error interrupt\n", dev->name);
538         i596_display_data(dev);
539 }
540 #endif
541
542 #define virt_to_dma(lp,v) ((lp)->dma_addr + (dma_addr_t)((unsigned long)(v)-(unsigned long)(lp)))
543
544 static inline void init_rx_bufs(struct net_device *dev)
545 {
546         struct i596_private *lp = dev->priv;
547         int i;
548         struct i596_rfd *rfd;
549         struct i596_rbd *rbd;
550
551         /* First build the Receive Buffer Descriptor List */
552
553         for (i = 0, rbd = lp->rbds; i < rx_ring_size; i++, rbd++) {
554                 dma_addr_t dma_addr;
555                 struct sk_buff *skb = dev_alloc_skb(PKT_BUF_SZ + 4);
556
557                 if (skb == NULL)
558                         panic("%s: alloc_skb() failed", __FILE__);
559                 skb_reserve(skb, 2);
560                 dma_addr = dma_map_single(lp->dev, skb->data,PKT_BUF_SZ,
561                                           DMA_FROM_DEVICE);
562                 skb->dev = dev;
563                 rbd->v_next = rbd+1;
564                 rbd->b_next = WSWAPrbd(virt_to_dma(lp,rbd+1));
565                 rbd->b_addr = WSWAPrbd(virt_to_dma(lp,rbd));
566                 rbd->skb = skb;
567                 rbd->v_data = skb->data;
568                 rbd->b_data = WSWAPchar(dma_addr);
569                 rbd->size = PKT_BUF_SZ;
570         }
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));
575
576         /* Now build the Receive Frame Descriptor List */
577
578         for (i = 0, rfd = lp->rfds; i < rx_ring_size; i++, rfd++) {
579                 rfd->rbd = I596_NULL;
580                 rfd->v_next = rfd+1;
581                 rfd->v_prev = rfd-1;
582                 rfd->b_next = WSWAPrfd(virt_to_dma(lp,rfd+1));
583                 rfd->cmd = CMD_FLEX;
584         }
585         lp->rfd_head = lp->rfds;
586         lp->scb.rfd = WSWAPrfd(virt_to_dma(lp,lp->rfds));
587         rfd = 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;
594
595         CHECK_WBACK_INV(lp, sizeof(struct i596_private));
596 }
597
598 static inline void remove_rx_bufs(struct net_device *dev)
599 {
600         struct i596_private *lp = dev->priv;
601         struct i596_rbd *rbd;
602         int i;
603
604         for (i = 0, rbd = lp->rbds; i < rx_ring_size; i++, rbd++) {
605                 if (rbd->skb == NULL)
606                         break;
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);
611         }
612 }
613
614
615 static void rebuild_rx_bufs(struct net_device *dev)
616 {
617         struct i596_private *lp = dev->priv;
618         int i;
619
620         /* Ensure rx frame/buffer descriptors are tidy */
621
622         for (i = 0; i < rx_ring_size; i++) {
623                 lp->rfds[i].rbd = I596_NULL;
624                 lp->rfds[i].cmd = CMD_FLEX;
625         }
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));
631
632         CHECK_WBACK_INV(lp, sizeof(struct i596_private));
633 }
634
635
636 static int init_i596_mem(struct net_device *dev)
637 {
638         struct i596_private *lp = dev->priv;
639         unsigned long flags;
640
641         disable_irq(dev->irq);  /* disable IRQs from LAN */
642         DEB(DEB_INIT,
643                 printk("RESET 82596 port: %lx (with IRQ %d disabled)\n",
644                        (dev->base_addr + PA_I82596_RESET),
645                        dev->irq));
646         
647         gsc_writel(0, (dev->base_addr + PA_I82596_RESET)); /* Hard Reset */
648         udelay(100);                    /* Wait 100us - seems to help */
649
650         /* change the scp address */
651
652         lp->last_cmd = jiffies;
653
654
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;
659         lp->cmd_backlog = 0;
660
661         lp->cmd_head = NULL;
662         lp->scb.cmd = I596_NULL;
663
664         DEB(DEB_INIT, printk("%s: starting i82596.\n", dev->name));
665
666         CHECK_WBACK(&(lp->scp), sizeof(struct i596_scp));
667         CHECK_WBACK(&(lp->iscp), sizeof(struct i596_iscp));
668
669         MPU_PORT(dev, PORT_ALTSCP, virt_to_dma(lp,&lp->scp));   
670
671         CA(dev);
672
673         if (wait_istat(dev, lp, 1000, "initialization timed out"))
674                 goto failed;
675         DEB(DEB_INIT, printk("%s: i82596 initialization successful\n", dev->name));
676
677         /* Ensure rx frame/buffer descriptors are tidy */
678         rebuild_rx_bufs(dev);
679
680         lp->scb.command = 0;
681         CHECK_WBACK(&(lp->scb), sizeof(struct i596_scb));
682
683         enable_irq(dev->irq);   /* enable IRQs from LAN */
684
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);
690
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);
696
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);
701
702         spin_lock_irqsave (&lp->lock, flags);
703
704         if (wait_cmd(dev, lp, 1000, "timed out waiting to issue RX_START")) {
705                 spin_unlock_irqrestore (&lp->lock, flags);
706                 goto failed;
707         }
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));
712
713         CA(dev);
714
715         spin_unlock_irqrestore (&lp->lock, flags);
716
717         if (wait_cmd(dev, lp, 1000, "RX_START not processed"))
718                 goto failed;
719         DEB(DEB_INIT, printk("%s: Receive unit started OK\n", dev->name));
720
721         return 0;
722
723 failed:
724         printk("%s: Failed to initialise 82596\n", dev->name);
725         MPU_PORT(dev, PORT_RESET, 0);
726         return -1;
727 }
728
729
730 static inline int i596_rx(struct net_device *dev)
731 {
732         struct i596_private *lp = dev->priv;
733         struct i596_rfd *rfd;
734         struct i596_rbd *rbd;
735         int frames = 0;
736
737         DEB(DEB_RXFRAME, printk("i596_rx(), rfd_head %p, rbd_head %p\n",
738                         lp->rfd_head, lp->rbd_head));
739
740
741         rfd = lp->rfd_head;             /* Ref next frame to check */
742
743         CHECK_INV(rfd, sizeof(struct i596_rfd));
744         while ((rfd->stat) & STAT_C) {  /* Loop while complete frames */
745                 if (rfd->rbd == I596_NULL)
746                         rbd = NULL;
747                 else if (rfd->rbd == lp->rbd_head->b_addr) {
748                         rbd = lp->rbd_head;
749                         CHECK_INV(rbd, sizeof(struct i596_rbd));
750                 }
751                 else {
752                         printk("%s: rbd chain broken!\n", dev->name);
753                         /* XXX Now what? */
754                         rbd = NULL;
755                 }
756                 DEB(DEB_RXFRAME, printk("  rfd %p, rfd.rbd %08x, rfd.stat %04x\n",
757                         rfd, rfd->rbd, rfd->stat));
758                 
759                 if (rbd != NULL && ((rfd->stat) & STAT_OK)) {
760                         /* a good frame */
761                         int pkt_len = rbd->count & 0x3fff;
762                         struct sk_buff *skb = rbd->skb;
763                         int rx_in_place = 0;
764
765                         DEB(DEB_RXADDR,print_eth(rbd->v_data, "received"));
766                         frames++;
767
768                         /* Check if the packet is long enough to just accept
769                          * without copying to a properly sized skbuff.
770                          */
771
772                         if (pkt_len > rx_copybreak) {
773                                 struct sk_buff *newskb;
774                                 dma_addr_t dma_addr;
775
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 */
781                                         goto memory_squeeze;
782                                 }
783                                 skb_reserve(newskb, 2);
784
785                                 /* Pass up the skb already on the Rx ring. */
786                                 skb_put(skb, pkt_len);
787                                 rx_in_place = 1;
788                                 rbd->skb = newskb;
789                                 newskb->dev = dev;
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));
794                         }
795                         else
796                                 skb = dev_alloc_skb(pkt_len + 2);
797 memory_squeeze:
798                         if (skb == NULL) {
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++;
802                         }
803                         else {
804                                 skb->dev = dev;
805                                 if (!rx_in_place) {
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);
808                                         skb_reserve(skb, 2);
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);
811                                 }
812                                 skb->len = pkt_len;
813                                 skb->protocol=eth_type_trans(skb,dev);
814                                 netif_rx(skb);
815                                 dev->last_rx = jiffies;
816                                 lp->stats.rx_packets++;
817                                 lp->stats.rx_bytes+=pkt_len;
818                         }
819                 }
820                 else {
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++;
838                 }
839
840                 /* Clear the buffer descriptor count and EOF + F flags */
841
842                 if (rbd != NULL && (rbd->count & 0x4000)) {
843                         rbd->count = 0;
844                         lp->rbd_head = rbd->v_next;
845                         CHECK_WBACK_INV(rbd, sizeof(struct i596_rbd));
846                 }
847
848                 /* Tidy the frame descriptor, marking it as end of list */
849
850                 rfd->rbd = I596_NULL;
851                 rfd->stat = 0;
852                 rfd->cmd = CMD_EOL|CMD_FLEX;
853                 rfd->count = 0;
854
855                 /* Remove end-of-list from old end descriptor */
856
857                 rfd->v_prev->cmd = CMD_FLEX;
858
859                 /* Update record of next frame descriptor to process */
860
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));
865                 rfd = lp->rfd_head;
866                 CHECK_INV(rfd, sizeof(struct i596_rfd));
867         }
868
869         DEB(DEB_RXFRAME, printk("frames %d\n", frames));
870
871         return 0;
872 }
873
874
875 static inline void i596_cleanup_cmd(struct net_device *dev, struct i596_private *lp)
876 {
877         struct i596_cmd *ptr;
878
879         while (lp->cmd_head != NULL) {
880                 ptr = lp->cmd_head;
881                 lp->cmd_head = ptr->v_next;
882                 lp->cmd_backlog--;
883
884                 switch ((ptr->command) & 0x7) {
885                 case CmdTx:
886                         {
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);
890
891                                 dev_kfree_skb(skb);
892
893                                 lp->stats.tx_errors++;
894                                 lp->stats.tx_aborted_errors++;
895
896                                 ptr->v_next = NULL;
897                                 ptr->b_next = I596_NULL;
898                                 tx_cmd->cmd.command = 0;  /* Mark as free */
899                                 break;
900                         }
901                 default:
902                         ptr->v_next = NULL;
903                         ptr->b_next = I596_NULL;
904                 }
905                 CHECK_WBACK_INV(ptr, sizeof(struct i596_cmd));
906         }
907
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));
911 }
912
913
914 static inline void i596_reset(struct net_device *dev, struct i596_private *lp)
915 {
916         unsigned long flags;
917
918         DEB(DEB_RESET, printk("i596_reset\n"));
919
920         spin_lock_irqsave (&lp->lock, flags);
921
922         wait_cmd(dev, lp, 100, "i596_reset timed out");
923
924         netif_stop_queue(dev);
925
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));
929         CA(dev);
930
931         /* wait for shutdown */
932         wait_cmd(dev, lp, 1000, "i596_reset 2 timed out");
933         spin_unlock_irqrestore (&lp->lock, flags);
934
935         i596_cleanup_cmd(dev,lp);
936         i596_rx(dev);
937
938         netif_start_queue(dev);
939         init_i596_mem(dev);
940 }
941
942
943 static void i596_add_cmd(struct net_device *dev, struct i596_cmd *cmd)
944 {
945         struct i596_private *lp = dev->priv;
946         unsigned long flags;
947
948         DEB(DEB_ADDCMD, printk("i596_add_cmd cmd_head %p\n", lp->cmd_head));
949
950         cmd->status = 0;
951         cmd->command |= (CMD_EOL | CMD_INTR);
952         cmd->v_next = NULL;
953         cmd->b_next = I596_NULL;
954         CHECK_WBACK(cmd, sizeof(struct i596_cmd));
955
956         spin_lock_irqsave (&lp->lock, flags);
957
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));
962         } else {
963                 lp->cmd_head = 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));
968                 CA(dev);
969         }
970         lp->cmd_tail = cmd;
971         lp->cmd_backlog++;
972
973         spin_unlock_irqrestore (&lp->lock, flags);
974
975         if (lp->cmd_backlog > max_cmd_backlog) {
976                 unsigned long tickssofar = jiffies - lp->last_cmd;
977
978                 if (tickssofar < ticks_limit)
979                         return;
980
981                 printk("%s: command unit timed out, status resetting.\n", dev->name);
982 #if 1
983                 i596_reset(dev, lp);
984 #endif
985         }
986 }
987
988 #if 0
989 /* this function makes a perfectly adequate probe...  but we have a
990    device list */
991 static int i596_test(struct net_device *dev)
992 {
993         struct i596_private *lp = dev->priv;
994         volatile int *tint;
995         u32 data;
996
997         tint = (volatile int *)(&(lp->scp));
998         data = virt_to_dma(lp,tint);
999         
1000         tint[1] = -1;
1001         CHECK_WBACK(tint,PAGE_SIZE);
1002
1003         MPU_PORT(dev, 1, data);
1004
1005         for(data = 1000000; data; data--) {
1006                 CHECK_INV(tint,PAGE_SIZE);
1007                 if(tint[1] != -1)
1008                         break;
1009
1010         }
1011
1012         printk("i596_test result %d\n", tint[1]);
1013
1014 }
1015 #endif
1016
1017
1018 static int i596_open(struct net_device *dev)
1019 {
1020         DEB(DEB_OPEN, printk("%s: i596_open() irq %d.\n", dev->name, dev->irq));
1021
1022         if (request_irq(dev->irq, &i596_interrupt, 0, "i82596", dev)) {
1023                 printk("%s: IRQ %d not free\n", dev->name, dev->irq);
1024                 goto out;
1025         }
1026
1027         init_rx_bufs(dev);
1028
1029         if (init_i596_mem(dev)) {
1030                 printk("%s: Failed to init memory\n", dev->name);
1031                 goto out_remove_rx_bufs;
1032         }
1033
1034         netif_start_queue(dev);
1035
1036         return 0;
1037
1038 out_remove_rx_bufs:
1039         remove_rx_bufs(dev);
1040         free_irq(dev->irq, dev);
1041 out:
1042         return -EAGAIN;
1043 }
1044
1045 static void i596_tx_timeout (struct net_device *dev)
1046 {
1047         struct i596_private *lp = dev->priv;
1048
1049         /* Transmitter timeout, serious problems. */
1050         DEB(DEB_ERRORS, printk("%s: transmit timed out, status resetting.\n",
1051                         dev->name));
1052
1053         lp->stats.tx_errors++;
1054
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);
1060         } else {
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));
1065                 CA (dev);
1066                 lp->last_restart = lp->stats.tx_packets;
1067         }
1068
1069         dev->trans_start = jiffies;
1070         netif_wake_queue (dev);
1071 }
1072
1073
1074 static int i596_start_xmit(struct sk_buff *skb, struct net_device *dev)
1075 {
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;
1081
1082         DEB(DEB_STARTTX, printk("%s: i596_start_xmit(%x,%p) called\n", dev->name,
1083                                 skb->len, skb->data));
1084
1085         if (length < ETH_ZLEN) {
1086                 skb = skb_padto(skb, ETH_ZLEN);
1087                 if (skb == NULL)
1088                         return 0;
1089                 length = ETH_ZLEN;
1090         }
1091         
1092         netif_stop_queue(dev);
1093
1094         tx_cmd = lp->tx_cmds + lp->next_tx_cmd;
1095         tbd = lp->tbds + lp->next_tx_cmd;
1096
1097         if (tx_cmd->cmd.command) {
1098                 DEB(DEB_ERRORS, printk("%s: xmit ring full, dropping packet.\n",
1099                                 dev->name));
1100                 lp->stats.tx_dropped++;
1101
1102                 dev_kfree_skb(skb);
1103         } else {
1104                 if (++lp->next_tx_cmd == TX_RING_SIZE)
1105                         lp->next_tx_cmd = 0;
1106                 tx_cmd->tbd = WSWAPtbd(virt_to_dma(lp,tbd));
1107                 tbd->next = I596_NULL;
1108
1109                 tx_cmd->cmd.command = CMD_FLEX | CmdTx;
1110                 tx_cmd->skb = skb;
1111
1112                 tx_cmd->pad = 0;
1113                 tx_cmd->size = 0;
1114                 tbd->pad = 0;
1115                 tbd->size = EOF | length;
1116
1117                 tx_cmd->dma_addr = dma_map_single(lp->dev, skb->data, skb->len,
1118                                 DMA_TO_DEVICE);
1119                 tbd->data = WSWAPchar(tx_cmd->dma_addr);
1120
1121                 DEB(DEB_TXADDR,print_eth(skb->data, "tx-queued"));
1122                 CHECK_WBACK_INV(tx_cmd, sizeof(struct tx_cmd));
1123                 CHECK_WBACK_INV(tbd, sizeof(struct i596_tbd));
1124                 i596_add_cmd(dev, &tx_cmd->cmd);
1125
1126                 lp->stats.tx_packets++;
1127                 lp->stats.tx_bytes += length;
1128         }
1129
1130         netif_start_queue(dev);
1131
1132         return 0;
1133 }
1134
1135 static void print_eth(unsigned char *add, char *str)
1136 {
1137         int i;
1138
1139         printk("i596 0x%p, ", add);
1140         for (i = 0; i < 6; i++)
1141                 printk(" %02X", add[i + 6]);
1142         printk(" -->");
1143         for (i = 0; i < 6; i++)
1144                 printk(" %02X", add[i]);
1145         printk(" %02X%02X, %s\n", add[12], add[13], str);
1146 }
1147
1148
1149 #define LAN_PROM_ADDR   0xF0810000
1150
1151 static int __devinit i82596_probe(struct net_device *dev,
1152                                   struct device *gen_dev)
1153 {
1154         int i;
1155         struct i596_private *lp;
1156         char eth_addr[6];
1157         dma_addr_t dma_addr;
1158
1159         /* This lot is ensure things have been cache line aligned. */
1160         if (sizeof(struct i596_rfd) != 32) {
1161             printk("82596: sizeof(struct i596_rfd) = %d\n",
1162                             (int)sizeof(struct i596_rfd));
1163             return -ENODEV;
1164         }
1165         if ((sizeof(struct i596_rbd) % 32) != 0) {
1166             printk("82596: sizeof(struct i596_rbd) = %d\n",
1167                             (int)sizeof(struct i596_rbd));
1168             return -ENODEV;
1169         }
1170         if ((sizeof(struct tx_cmd) % 32) != 0) {
1171             printk("82596: sizeof(struct tx_cmd) = %d\n",
1172                             (int)sizeof(struct tx_cmd));
1173             return -ENODEV;
1174         }
1175         if (sizeof(struct i596_tbd) != 32) {
1176             printk("82596: sizeof(struct i596_tbd) = %d\n",
1177                             (int)sizeof(struct i596_tbd));
1178             return -ENODEV;
1179         }
1180 #ifndef __LP64__
1181         if (sizeof(struct i596_private) > 4096) {
1182             printk("82596: sizeof(struct i596_private) = %d\n",
1183                             (int)sizeof(struct i596_private));
1184             return -ENODEV;
1185         }
1186 #endif
1187
1188         if (!dev->base_addr || !dev->irq)
1189                 return -ENODEV;
1190
1191         if (pdc_lan_station_id(eth_addr, dev->base_addr)) {
1192                 for (i=0; i < 6; i++) {
1193                         eth_addr[i] = gsc_readb(LAN_PROM_ADDR + i);
1194                 }
1195                 printk(KERN_INFO "%s: MAC of HP700 LAN read from EEPROM\n", __FILE__);
1196         }
1197
1198         dev->mem_start = (unsigned long) dma_alloc_noncoherent(gen_dev, 
1199                 sizeof(struct i596_private), &dma_addr, GFP_KERNEL);
1200         if (!dev->mem_start) {
1201                 printk(KERN_ERR "%s: Couldn't get shared memory\n", __FILE__);
1202                 return -ENOMEM;
1203         }
1204
1205         for (i = 0; i < 6; i++)
1206                 dev->dev_addr[i] = eth_addr[i];
1207
1208         /* The 82596-specific entries in the device structure. */
1209         dev->open = i596_open;
1210         dev->stop = i596_close;
1211         dev->hard_start_xmit = i596_start_xmit;
1212         dev->get_stats = i596_get_stats;
1213         dev->set_multicast_list = set_multicast_list;
1214         dev->tx_timeout = i596_tx_timeout;
1215         dev->watchdog_timeo = TX_TIMEOUT;
1216 #ifdef CONFIG_NET_POLL_CONTROLLER
1217         dev->poll_controller = i596_poll_controller;
1218 #endif
1219
1220         dev->priv = (void *)(dev->mem_start);
1221
1222         lp = dev->priv;
1223         memset(lp, 0, sizeof(struct i596_private));
1224
1225         lp->scb.command = 0;
1226         lp->scb.cmd = I596_NULL;
1227         lp->scb.rfd = I596_NULL;
1228         spin_lock_init(&lp->lock);
1229         lp->dma_addr = dma_addr;
1230         lp->dev = gen_dev;
1231
1232         CHECK_WBACK_INV(dev->mem_start, sizeof(struct i596_private));
1233
1234         i = register_netdev(dev);
1235         if (i) {
1236                 lp = dev->priv;
1237                 dma_free_noncoherent(lp->dev, sizeof(struct i596_private), 
1238                                     (void *)dev->mem_start, lp->dma_addr);
1239                 return i;
1240         };
1241
1242         DEB(DEB_PROBE, printk(KERN_INFO "%s: 82596 at %#3lx,", dev->name, dev->base_addr));
1243         for (i = 0; i < 6; i++)
1244                 DEB(DEB_PROBE, printk(" %2.2X", dev->dev_addr[i]));
1245         DEB(DEB_PROBE, printk(" IRQ %d.\n", dev->irq));
1246         DEB(DEB_INIT, printk(KERN_INFO "%s: lp at 0x%p (%d bytes), lp->scb at 0x%p\n",
1247                 dev->name, lp, (int)sizeof(struct i596_private), &lp->scb));
1248
1249         return 0;
1250 }
1251
1252 #ifdef CONFIG_NET_POLL_CONTROLLER
1253 static void i596_poll_controller(struct net_device *dev)
1254 {
1255         disable_irq(dev->irq);
1256         i596_interrupt(dev->irq, dev, NULL);
1257         enable_irq(dev->irq);
1258 }
1259 #endif
1260
1261 static irqreturn_t i596_interrupt(int irq, void *dev_id, struct pt_regs *regs)
1262 {
1263         struct net_device *dev = dev_id;
1264         struct i596_private *lp;
1265         unsigned short status, ack_cmd = 0;
1266
1267         if (dev == NULL) {
1268                 printk("%s: irq %d for unknown device.\n", __FUNCTION__, irq);
1269                 return IRQ_NONE;
1270         }
1271
1272         lp = dev->priv;
1273
1274         spin_lock (&lp->lock);
1275
1276         wait_cmd(dev, lp, 100, "i596 interrupt, timeout");
1277         status = lp->scb.status;
1278
1279         DEB(DEB_INTS, printk("%s: i596 interrupt, IRQ %d, status %4.4x.\n",
1280                         dev->name, irq, status));
1281
1282         ack_cmd = status & 0xf000;
1283
1284         if (!ack_cmd) {
1285                 DEB(DEB_ERRORS, printk("%s: interrupt with no events\n", dev->name));
1286                 spin_unlock (&lp->lock);
1287                 return IRQ_NONE;
1288         }
1289
1290         if ((status & 0x8000) || (status & 0x2000)) {
1291                 struct i596_cmd *ptr;
1292
1293                 if ((status & 0x8000))
1294                         DEB(DEB_INTS, printk("%s: i596 interrupt completed command.\n", dev->name));
1295                 if ((status & 0x2000))
1296                         DEB(DEB_INTS, printk("%s: i596 interrupt command unit inactive %x.\n", dev->name, status & 0x0700));
1297
1298                 while (lp->cmd_head != NULL) {
1299                         CHECK_INV(lp->cmd_head, sizeof(struct i596_cmd));
1300                         if (!(lp->cmd_head->status & STAT_C))
1301                                 break;
1302
1303                         ptr = lp->cmd_head;
1304
1305                         DEB(DEB_STATUS, printk("cmd_head->status = %04x, ->command = %04x\n",
1306                                        lp->cmd_head->status, lp->cmd_head->command));
1307                         lp->cmd_head = ptr->v_next;
1308                         lp->cmd_backlog--;
1309
1310                         switch ((ptr->command) & 0x7) {
1311                         case CmdTx:
1312                             {
1313                                 struct tx_cmd *tx_cmd = (struct tx_cmd *) ptr;
1314                                 struct sk_buff *skb = tx_cmd->skb;
1315
1316                                 if ((ptr->status) & STAT_OK) {
1317                                         DEB(DEB_TXADDR, print_eth(skb->data, "tx-done"));
1318                                 } else {
1319                                         lp->stats.tx_errors++;
1320                                         if ((ptr->status) & 0x0020)
1321                                                 lp->stats.collisions++;
1322                                         if (!((ptr->status) & 0x0040))
1323                                                 lp->stats.tx_heartbeat_errors++;
1324                                         if ((ptr->status) & 0x0400)
1325                                                 lp->stats.tx_carrier_errors++;
1326                                         if ((ptr->status) & 0x0800)
1327                                                 lp->stats.collisions++;
1328                                         if ((ptr->status) & 0x1000)
1329                                                 lp->stats.tx_aborted_errors++;
1330                                 }
1331                                 dma_unmap_single(lp->dev, tx_cmd->dma_addr, skb->len, DMA_TO_DEVICE);
1332                                 dev_kfree_skb_irq(skb);
1333
1334                                 tx_cmd->cmd.command = 0; /* Mark free */
1335                                 break;
1336                             }
1337                         case CmdTDR:
1338                             {
1339                                 unsigned short status = ((struct tdr_cmd *)ptr)->status;
1340
1341                                 if (status & 0x8000) {
1342                                         DEB(DEB_ANY, printk("%s: link ok.\n", dev->name));
1343                                 } else {
1344                                         if (status & 0x4000)
1345                                                 printk("%s: Transceiver problem.\n", dev->name);
1346                                         if (status & 0x2000)
1347                                                 printk("%s: Termination problem.\n", dev->name);
1348                                         if (status & 0x1000)
1349                                                 printk("%s: Short circuit.\n", dev->name);
1350
1351                                         DEB(DEB_TDR, printk("%s: Time %d.\n", dev->name, status & 0x07ff));
1352                                 }
1353                                 break;
1354                             }
1355                         case CmdConfigure:
1356                                 /* Zap command so set_multicast_list() knows it is free */
1357                                 ptr->command = 0;
1358                                 break;
1359                         }
1360                         ptr->v_next = NULL;
1361                         ptr->b_next = I596_NULL;
1362                         CHECK_WBACK(ptr, sizeof(struct i596_cmd));
1363                         lp->last_cmd = jiffies;
1364                 }
1365
1366                 /* This mess is arranging that only the last of any outstanding
1367                  * commands has the interrupt bit set.  Should probably really
1368                  * only add to the cmd queue when the CU is stopped.
1369                  */
1370                 ptr = lp->cmd_head;
1371                 while ((ptr != NULL) && (ptr != lp->cmd_tail)) {
1372                         struct i596_cmd *prev = ptr;
1373
1374                         ptr->command &= 0x1fff;
1375                         ptr = ptr->v_next;
1376                         CHECK_WBACK_INV(prev, sizeof(struct i596_cmd));
1377                 }
1378
1379                 if ((lp->cmd_head != NULL))
1380                         ack_cmd |= CUC_START;
1381                 lp->scb.cmd = WSWAPcmd(virt_to_dma(lp,&lp->cmd_head->status));
1382                 CHECK_WBACK_INV(&lp->scb, sizeof(struct i596_scb));
1383         }
1384         if ((status & 0x1000) || (status & 0x4000)) {
1385                 if ((status & 0x4000))
1386                         DEB(DEB_INTS, printk("%s: i596 interrupt received a frame.\n", dev->name));
1387                 i596_rx(dev);
1388                 /* Only RX_START if stopped - RGH 07-07-96 */
1389                 if (status & 0x1000) {
1390                         if (netif_running(dev)) {
1391                                 DEB(DEB_ERRORS, printk("%s: i596 interrupt receive unit inactive, status 0x%x\n", dev->name, status));
1392                                 ack_cmd |= RX_START;
1393                                 lp->stats.rx_errors++;
1394                                 lp->stats.rx_fifo_errors++;
1395                                 rebuild_rx_bufs(dev);
1396                         }
1397                 }
1398         }
1399         wait_cmd(dev, lp, 100, "i596 interrupt, timeout");
1400         lp->scb.command = ack_cmd;
1401         CHECK_WBACK(&lp->scb, sizeof(struct i596_scb));
1402
1403         /* DANGER: I suspect that some kind of interrupt
1404          acknowledgement aside from acking the 82596 might be needed 
1405          here...  but it's running acceptably without */
1406
1407         CA(dev);
1408
1409         wait_cmd(dev, lp, 100, "i596 interrupt, exit timeout");
1410         DEB(DEB_INTS, printk("%s: exiting interrupt.\n", dev->name));
1411
1412         spin_unlock (&lp->lock);
1413         return IRQ_HANDLED;
1414 }
1415
1416 static int i596_close(struct net_device *dev)
1417 {
1418         struct i596_private *lp = dev->priv;
1419         unsigned long flags;
1420
1421         netif_stop_queue(dev);
1422
1423         DEB(DEB_INIT, printk("%s: Shutting down ethercard, status was %4.4x.\n",
1424                        dev->name, lp->scb.status));
1425
1426         spin_lock_irqsave(&lp->lock, flags);
1427
1428         wait_cmd(dev, lp, 100, "close1 timed out");
1429         lp->scb.command = CUC_ABORT | RX_ABORT;
1430         CHECK_WBACK(&lp->scb, sizeof(struct i596_scb));
1431
1432         CA(dev);
1433
1434         wait_cmd(dev, lp, 100, "close2 timed out");
1435         spin_unlock_irqrestore(&lp->lock, flags);
1436         DEB(DEB_STRUCT,i596_display_data(dev));
1437         i596_cleanup_cmd(dev,lp);
1438
1439         disable_irq(dev->irq);
1440
1441         free_irq(dev->irq, dev);
1442         remove_rx_bufs(dev);
1443
1444         return 0;
1445 }
1446
1447 static struct net_device_stats *
1448  i596_get_stats(struct net_device *dev)
1449 {
1450         struct i596_private *lp = dev->priv;
1451
1452         return &lp->stats;
1453 }
1454
1455 /*
1456  *    Set or clear the multicast filter for this adaptor.
1457  */
1458
1459 static void set_multicast_list(struct net_device *dev)
1460 {
1461         struct i596_private *lp = dev->priv;
1462         int config = 0, cnt;
1463
1464         DEB(DEB_MULTI, printk("%s: set multicast list, %d entries, promisc %s, allmulti %s\n",
1465                 dev->name, dev->mc_count, dev->flags & IFF_PROMISC ? "ON" : "OFF",
1466                 dev->flags & IFF_ALLMULTI ? "ON" : "OFF"));
1467
1468         if ((dev->flags & IFF_PROMISC) && !(lp->cf_cmd.i596_config[8] & 0x01)) {
1469                 lp->cf_cmd.i596_config[8] |= 0x01;
1470                 config = 1;
1471         }
1472         if (!(dev->flags & IFF_PROMISC) && (lp->cf_cmd.i596_config[8] & 0x01)) {
1473                 lp->cf_cmd.i596_config[8] &= ~0x01;
1474                 config = 1;
1475         }
1476         if ((dev->flags & IFF_ALLMULTI) && (lp->cf_cmd.i596_config[11] & 0x20)) {
1477                 lp->cf_cmd.i596_config[11] &= ~0x20;
1478                 config = 1;
1479         }
1480         if (!(dev->flags & IFF_ALLMULTI) && !(lp->cf_cmd.i596_config[11] & 0x20)) {
1481                 lp->cf_cmd.i596_config[11] |= 0x20;
1482                 config = 1;
1483         }
1484         if (config) {
1485                 if (lp->cf_cmd.cmd.command)
1486                         printk("%s: config change request already queued\n",
1487                                dev->name);
1488                 else {
1489                         lp->cf_cmd.cmd.command = CmdConfigure;
1490                         CHECK_WBACK_INV(&lp->cf_cmd, sizeof(struct cf_cmd));
1491                         i596_add_cmd(dev, &lp->cf_cmd.cmd);
1492                 }
1493         }
1494
1495         cnt = dev->mc_count;
1496         if (cnt > MAX_MC_CNT)
1497         {
1498                 cnt = MAX_MC_CNT;
1499                 printk("%s: Only %d multicast addresses supported",
1500                         dev->name, cnt);
1501         }
1502         
1503         if (dev->mc_count > 0) {
1504                 struct dev_mc_list *dmi;
1505                 unsigned char *cp;
1506                 struct mc_cmd *cmd;
1507
1508                 cmd = &lp->mc_cmd;
1509                 cmd->cmd.command = CmdMulticastList;
1510                 cmd->mc_cnt = dev->mc_count * 6;
1511                 cp = cmd->mc_addrs;
1512                 for (dmi = dev->mc_list; cnt && dmi != NULL; dmi = dmi->next, cnt--, cp += 6) {
1513                         memcpy(cp, dmi->dmi_addr, 6);
1514                         if (i596_debug > 1)
1515                                 DEB(DEB_MULTI, printk("%s: Adding address %02x:%02x:%02x:%02x:%02x:%02x\n",
1516                                                 dev->name, cp[0],cp[1],cp[2],cp[3],cp[4],cp[5]));
1517                 }
1518                 CHECK_WBACK_INV(&lp->mc_cmd, sizeof(struct mc_cmd));
1519                 i596_add_cmd(dev, &cmd->cmd);
1520         }
1521 }
1522
1523 static int debug = -1;
1524 module_param(debug, int, 0);
1525 MODULE_PARM_DESC(debug, "lasi_82596 debug mask");
1526
1527 static int num_drivers;
1528 static struct net_device *netdevs[MAX_DRIVERS];
1529
1530 static int __devinit
1531 lan_init_chip(struct parisc_device *dev)
1532 {
1533         struct  net_device *netdevice;
1534         int     retval;
1535
1536         if (num_drivers >= MAX_DRIVERS) {
1537                 /* max count of possible i82596 drivers reached */
1538                 return -ENOMEM;
1539         }
1540
1541         if (num_drivers == 0)
1542                 printk(KERN_INFO LASI_82596_DRIVER_VERSION "\n");
1543         
1544         if (!dev->irq) {
1545                 printk(KERN_ERR "%s: IRQ not found for i82596 at 0x%lx\n",
1546                         __FILE__, dev->hpa.start);
1547                 return -ENODEV;
1548         }
1549
1550         printk(KERN_INFO "Found i82596 at 0x%lx, IRQ %d\n", dev->hpa.start,
1551                         dev->irq);
1552
1553         netdevice = alloc_etherdev(0);
1554         if (!netdevice)
1555                 return -ENOMEM;
1556
1557         netdevice->base_addr = dev->hpa.start;
1558         netdevice->irq = dev->irq;
1559
1560         retval = i82596_probe(netdevice, &dev->dev);
1561         if (retval) {
1562                 free_netdev(netdevice);
1563                 return -ENODEV;
1564         }
1565
1566         if (dev->id.sversion == 0x72) {
1567                 ((struct i596_private *)netdevice->priv)->options = OPT_SWAP_PORT;
1568         }
1569
1570         netdevs[num_drivers++] = netdevice;
1571
1572         return retval;
1573 }
1574
1575
1576 static struct parisc_device_id lan_tbl[] = {
1577         { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0008a },
1578         { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x00072 },
1579         { 0, }
1580 };
1581
1582 MODULE_DEVICE_TABLE(parisc, lan_tbl);
1583
1584 static struct parisc_driver lan_driver = {
1585         .name           = "lasi_82596",
1586         .id_table       = lan_tbl,
1587         .probe          = lan_init_chip,
1588 };
1589
1590 static int __devinit lasi_82596_init(void)
1591 {
1592         if (debug >= 0)
1593                 i596_debug = debug;
1594         return register_parisc_driver(&lan_driver);
1595 }
1596
1597 module_init(lasi_82596_init);
1598
1599 static void __exit lasi_82596_exit(void)
1600 {
1601         int i;
1602
1603         for (i=0; i<MAX_DRIVERS; i++) {
1604                 struct i596_private *lp;
1605                 struct net_device *netdevice;
1606                 
1607                 netdevice = netdevs[i];
1608                 if (!netdevice) 
1609                         continue;
1610                 
1611                 unregister_netdev(netdevice);
1612
1613                 lp = netdevice->priv;
1614                 dma_free_noncoherent(lp->dev, sizeof(struct i596_private), 
1615                                        (void *)netdevice->mem_start, lp->dma_addr);
1616                 free_netdev(netdevice);
1617         }
1618         num_drivers = 0;
1619
1620         unregister_parisc_driver(&lan_driver);
1621 }
1622
1623 module_exit(lasi_82596_exit);