[PATCH] pcnet32: Suspend the chip rather than restart when changing multicast/promisc
[linux-2.6] / 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                 if (skb_padto(skb, ETH_ZLEN))
1087                         return 0;
1088                 length = ETH_ZLEN;
1089         }
1090         
1091         netif_stop_queue(dev);
1092
1093         tx_cmd = lp->tx_cmds + lp->next_tx_cmd;
1094         tbd = lp->tbds + lp->next_tx_cmd;
1095
1096         if (tx_cmd->cmd.command) {
1097                 DEB(DEB_ERRORS, printk("%s: xmit ring full, dropping packet.\n",
1098                                 dev->name));
1099                 lp->stats.tx_dropped++;
1100
1101                 dev_kfree_skb(skb);
1102         } else {
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;
1107
1108                 tx_cmd->cmd.command = CMD_FLEX | CmdTx;
1109                 tx_cmd->skb = skb;
1110
1111                 tx_cmd->pad = 0;
1112                 tx_cmd->size = 0;
1113                 tbd->pad = 0;
1114                 tbd->size = EOF | length;
1115
1116                 tx_cmd->dma_addr = dma_map_single(lp->dev, skb->data, skb->len,
1117                                 DMA_TO_DEVICE);
1118                 tbd->data = WSWAPchar(tx_cmd->dma_addr);
1119
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);
1124
1125                 lp->stats.tx_packets++;
1126                 lp->stats.tx_bytes += length;
1127         }
1128
1129         netif_start_queue(dev);
1130
1131         return 0;
1132 }
1133
1134 static void print_eth(unsigned char *add, char *str)
1135 {
1136         int i;
1137
1138         printk("i596 0x%p, ", add);
1139         for (i = 0; i < 6; i++)
1140                 printk(" %02X", add[i + 6]);
1141         printk(" -->");
1142         for (i = 0; i < 6; i++)
1143                 printk(" %02X", add[i]);
1144         printk(" %02X%02X, %s\n", add[12], add[13], str);
1145 }
1146
1147
1148 #define LAN_PROM_ADDR   0xF0810000
1149
1150 static int __devinit i82596_probe(struct net_device *dev,
1151                                   struct device *gen_dev)
1152 {
1153         int i;
1154         struct i596_private *lp;
1155         char eth_addr[6];
1156         dma_addr_t dma_addr;
1157
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));
1162             return -ENODEV;
1163         }
1164         if ((sizeof(struct i596_rbd) % 32) != 0) {
1165             printk("82596: sizeof(struct i596_rbd) = %d\n",
1166                             (int)sizeof(struct i596_rbd));
1167             return -ENODEV;
1168         }
1169         if ((sizeof(struct tx_cmd) % 32) != 0) {
1170             printk("82596: sizeof(struct tx_cmd) = %d\n",
1171                             (int)sizeof(struct tx_cmd));
1172             return -ENODEV;
1173         }
1174         if (sizeof(struct i596_tbd) != 32) {
1175             printk("82596: sizeof(struct i596_tbd) = %d\n",
1176                             (int)sizeof(struct i596_tbd));
1177             return -ENODEV;
1178         }
1179 #ifndef __LP64__
1180         if (sizeof(struct i596_private) > 4096) {
1181             printk("82596: sizeof(struct i596_private) = %d\n",
1182                             (int)sizeof(struct i596_private));
1183             return -ENODEV;
1184         }
1185 #endif
1186
1187         if (!dev->base_addr || !dev->irq)
1188                 return -ENODEV;
1189
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);
1193                 }
1194                 printk(KERN_INFO "%s: MAC of HP700 LAN read from EEPROM\n", __FILE__);
1195         }
1196
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__);
1201                 return -ENOMEM;
1202         }
1203
1204         for (i = 0; i < 6; i++)
1205                 dev->dev_addr[i] = eth_addr[i];
1206
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;
1217 #endif
1218
1219         dev->priv = (void *)(dev->mem_start);
1220
1221         lp = dev->priv;
1222         memset(lp, 0, sizeof(struct i596_private));
1223
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;
1229         lp->dev = gen_dev;
1230
1231         CHECK_WBACK_INV(dev->mem_start, sizeof(struct i596_private));
1232
1233         i = register_netdev(dev);
1234         if (i) {
1235                 lp = dev->priv;
1236                 dma_free_noncoherent(lp->dev, sizeof(struct i596_private), 
1237                                     (void *)dev->mem_start, lp->dma_addr);
1238                 return i;
1239         };
1240
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));
1247
1248         return 0;
1249 }
1250
1251 #ifdef CONFIG_NET_POLL_CONTROLLER
1252 static void i596_poll_controller(struct net_device *dev)
1253 {
1254         disable_irq(dev->irq);
1255         i596_interrupt(dev->irq, dev, NULL);
1256         enable_irq(dev->irq);
1257 }
1258 #endif
1259
1260 static irqreturn_t i596_interrupt(int irq, void *dev_id, struct pt_regs *regs)
1261 {
1262         struct net_device *dev = dev_id;
1263         struct i596_private *lp;
1264         unsigned short status, ack_cmd = 0;
1265
1266         if (dev == NULL) {
1267                 printk("%s: irq %d for unknown device.\n", __FUNCTION__, irq);
1268                 return IRQ_NONE;
1269         }
1270
1271         lp = dev->priv;
1272
1273         spin_lock (&lp->lock);
1274
1275         wait_cmd(dev, lp, 100, "i596 interrupt, timeout");
1276         status = lp->scb.status;
1277
1278         DEB(DEB_INTS, printk("%s: i596 interrupt, IRQ %d, status %4.4x.\n",
1279                         dev->name, irq, status));
1280
1281         ack_cmd = status & 0xf000;
1282
1283         if (!ack_cmd) {
1284                 DEB(DEB_ERRORS, printk("%s: interrupt with no events\n", dev->name));
1285                 spin_unlock (&lp->lock);
1286                 return IRQ_NONE;
1287         }
1288
1289         if ((status & 0x8000) || (status & 0x2000)) {
1290                 struct i596_cmd *ptr;
1291
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));
1296
1297                 while (lp->cmd_head != NULL) {
1298                         CHECK_INV(lp->cmd_head, sizeof(struct i596_cmd));
1299                         if (!(lp->cmd_head->status & STAT_C))
1300                                 break;
1301
1302                         ptr = lp->cmd_head;
1303
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;
1307                         lp->cmd_backlog--;
1308
1309                         switch ((ptr->command) & 0x7) {
1310                         case CmdTx:
1311                             {
1312                                 struct tx_cmd *tx_cmd = (struct tx_cmd *) ptr;
1313                                 struct sk_buff *skb = tx_cmd->skb;
1314
1315                                 if ((ptr->status) & STAT_OK) {
1316                                         DEB(DEB_TXADDR, print_eth(skb->data, "tx-done"));
1317                                 } else {
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++;
1329                                 }
1330                                 dma_unmap_single(lp->dev, tx_cmd->dma_addr, skb->len, DMA_TO_DEVICE);
1331                                 dev_kfree_skb_irq(skb);
1332
1333                                 tx_cmd->cmd.command = 0; /* Mark free */
1334                                 break;
1335                             }
1336                         case CmdTDR:
1337                             {
1338                                 unsigned short status = ((struct tdr_cmd *)ptr)->status;
1339
1340                                 if (status & 0x8000) {
1341                                         DEB(DEB_ANY, printk("%s: link ok.\n", dev->name));
1342                                 } else {
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);
1349
1350                                         DEB(DEB_TDR, printk("%s: Time %d.\n", dev->name, status & 0x07ff));
1351                                 }
1352                                 break;
1353                             }
1354                         case CmdConfigure:
1355                                 /* Zap command so set_multicast_list() knows it is free */
1356                                 ptr->command = 0;
1357                                 break;
1358                         }
1359                         ptr->v_next = NULL;
1360                         ptr->b_next = I596_NULL;
1361                         CHECK_WBACK(ptr, sizeof(struct i596_cmd));
1362                         lp->last_cmd = jiffies;
1363                 }
1364
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.
1368                  */
1369                 ptr = lp->cmd_head;
1370                 while ((ptr != NULL) && (ptr != lp->cmd_tail)) {
1371                         struct i596_cmd *prev = ptr;
1372
1373                         ptr->command &= 0x1fff;
1374                         ptr = ptr->v_next;
1375                         CHECK_WBACK_INV(prev, sizeof(struct i596_cmd));
1376                 }
1377
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));
1382         }
1383         if ((status & 0x1000) || (status & 0x4000)) {
1384                 if ((status & 0x4000))
1385                         DEB(DEB_INTS, printk("%s: i596 interrupt received a frame.\n", dev->name));
1386                 i596_rx(dev);
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);
1395                         }
1396                 }
1397         }
1398         wait_cmd(dev, lp, 100, "i596 interrupt, timeout");
1399         lp->scb.command = ack_cmd;
1400         CHECK_WBACK(&lp->scb, sizeof(struct i596_scb));
1401
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 */
1405
1406         CA(dev);
1407
1408         wait_cmd(dev, lp, 100, "i596 interrupt, exit timeout");
1409         DEB(DEB_INTS, printk("%s: exiting interrupt.\n", dev->name));
1410
1411         spin_unlock (&lp->lock);
1412         return IRQ_HANDLED;
1413 }
1414
1415 static int i596_close(struct net_device *dev)
1416 {
1417         struct i596_private *lp = dev->priv;
1418         unsigned long flags;
1419
1420         netif_stop_queue(dev);
1421
1422         DEB(DEB_INIT, printk("%s: Shutting down ethercard, status was %4.4x.\n",
1423                        dev->name, lp->scb.status));
1424
1425         spin_lock_irqsave(&lp->lock, flags);
1426
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));
1430
1431         CA(dev);
1432
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);
1437
1438         disable_irq(dev->irq);
1439
1440         free_irq(dev->irq, dev);
1441         remove_rx_bufs(dev);
1442
1443         return 0;
1444 }
1445
1446 static struct net_device_stats *
1447  i596_get_stats(struct net_device *dev)
1448 {
1449         struct i596_private *lp = dev->priv;
1450
1451         return &lp->stats;
1452 }
1453
1454 /*
1455  *    Set or clear the multicast filter for this adaptor.
1456  */
1457
1458 static void set_multicast_list(struct net_device *dev)
1459 {
1460         struct i596_private *lp = dev->priv;
1461         int config = 0, cnt;
1462
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"));
1466
1467         if ((dev->flags & IFF_PROMISC) && !(lp->cf_cmd.i596_config[8] & 0x01)) {
1468                 lp->cf_cmd.i596_config[8] |= 0x01;
1469                 config = 1;
1470         }
1471         if (!(dev->flags & IFF_PROMISC) && (lp->cf_cmd.i596_config[8] & 0x01)) {
1472                 lp->cf_cmd.i596_config[8] &= ~0x01;
1473                 config = 1;
1474         }
1475         if ((dev->flags & IFF_ALLMULTI) && (lp->cf_cmd.i596_config[11] & 0x20)) {
1476                 lp->cf_cmd.i596_config[11] &= ~0x20;
1477                 config = 1;
1478         }
1479         if (!(dev->flags & IFF_ALLMULTI) && !(lp->cf_cmd.i596_config[11] & 0x20)) {
1480                 lp->cf_cmd.i596_config[11] |= 0x20;
1481                 config = 1;
1482         }
1483         if (config) {
1484                 if (lp->cf_cmd.cmd.command)
1485                         printk("%s: config change request already queued\n",
1486                                dev->name);
1487                 else {
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);
1491                 }
1492         }
1493
1494         cnt = dev->mc_count;
1495         if (cnt > MAX_MC_CNT)
1496         {
1497                 cnt = MAX_MC_CNT;
1498                 printk("%s: Only %d multicast addresses supported",
1499                         dev->name, cnt);
1500         }
1501         
1502         if (dev->mc_count > 0) {
1503                 struct dev_mc_list *dmi;
1504                 unsigned char *cp;
1505                 struct mc_cmd *cmd;
1506
1507                 cmd = &lp->mc_cmd;
1508                 cmd->cmd.command = CmdMulticastList;
1509                 cmd->mc_cnt = dev->mc_count * 6;
1510                 cp = cmd->mc_addrs;
1511                 for (dmi = dev->mc_list; cnt && dmi != NULL; dmi = dmi->next, cnt--, cp += 6) {
1512                         memcpy(cp, dmi->dmi_addr, 6);
1513                         if (i596_debug > 1)
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]));
1516                 }
1517                 CHECK_WBACK_INV(&lp->mc_cmd, sizeof(struct mc_cmd));
1518                 i596_add_cmd(dev, &cmd->cmd);
1519         }
1520 }
1521
1522 static int debug = -1;
1523 module_param(debug, int, 0);
1524 MODULE_PARM_DESC(debug, "lasi_82596 debug mask");
1525
1526 static int num_drivers;
1527 static struct net_device *netdevs[MAX_DRIVERS];
1528
1529 static int __devinit
1530 lan_init_chip(struct parisc_device *dev)
1531 {
1532         struct  net_device *netdevice;
1533         int     retval;
1534
1535         if (num_drivers >= MAX_DRIVERS) {
1536                 /* max count of possible i82596 drivers reached */
1537                 return -ENOMEM;
1538         }
1539
1540         if (num_drivers == 0)
1541                 printk(KERN_INFO LASI_82596_DRIVER_VERSION "\n");
1542         
1543         if (!dev->irq) {
1544                 printk(KERN_ERR "%s: IRQ not found for i82596 at 0x%lx\n",
1545                         __FILE__, dev->hpa.start);
1546                 return -ENODEV;
1547         }
1548
1549         printk(KERN_INFO "Found i82596 at 0x%lx, IRQ %d\n", dev->hpa.start,
1550                         dev->irq);
1551
1552         netdevice = alloc_etherdev(0);
1553         if (!netdevice)
1554                 return -ENOMEM;
1555
1556         netdevice->base_addr = dev->hpa.start;
1557         netdevice->irq = dev->irq;
1558
1559         retval = i82596_probe(netdevice, &dev->dev);
1560         if (retval) {
1561                 free_netdev(netdevice);
1562                 return -ENODEV;
1563         }
1564
1565         if (dev->id.sversion == 0x72) {
1566                 ((struct i596_private *)netdevice->priv)->options = OPT_SWAP_PORT;
1567         }
1568
1569         netdevs[num_drivers++] = netdevice;
1570
1571         return retval;
1572 }
1573
1574
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 },
1578         { 0, }
1579 };
1580
1581 MODULE_DEVICE_TABLE(parisc, lan_tbl);
1582
1583 static struct parisc_driver lan_driver = {
1584         .name           = "lasi_82596",
1585         .id_table       = lan_tbl,
1586         .probe          = lan_init_chip,
1587 };
1588
1589 static int __devinit lasi_82596_init(void)
1590 {
1591         if (debug >= 0)
1592                 i596_debug = debug;
1593         return register_parisc_driver(&lan_driver);
1594 }
1595
1596 module_init(lasi_82596_init);
1597
1598 static void __exit lasi_82596_exit(void)
1599 {
1600         int i;
1601
1602         for (i=0; i<MAX_DRIVERS; i++) {
1603                 struct i596_private *lp;
1604                 struct net_device *netdevice;
1605                 
1606                 netdevice = netdevs[i];
1607                 if (!netdevice) 
1608                         continue;
1609                 
1610                 unregister_netdev(netdevice);
1611
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);
1616         }
1617         num_drivers = 0;
1618
1619         unregister_parisc_driver(&lan_driver);
1620 }
1621
1622 module_exit(lasi_82596_exit);