1 /* 82596.c: A generic 82596 ethernet driver for linux. */
 
   4    Written 1994 by Mark Evans.
 
   5    This driver is for the Apricot 82596 bus-master interface
 
   7    Modularised 12/94 Mark Evans
 
  10    Modified to support the 82596 ethernet chips on 680x0 VME boards.
 
  11    by Richard Hirst <richard@sleepie.demon.co.uk>
 
  14    980825:  Changed to receive directly in to sk_buffs which are
 
  15    allocated at open() time.  Eliminates copy on incoming frames
 
  16    (small ones are still copied).  Shared data now held in a
 
  17    non-cached page, so we can run on 68060 in copyback mode.
 
  20    * look at deferring rx frames rather than discarding (as per tulip)
 
  21    * handle tx ring full as per tulip
 
  22    * performace test to tune rx_copybreak
 
  24    Most of my modifications relate to the braindead big-endian
 
  25    implementation by Intel.  When the i596 is operating in
 
  26    'big-endian' mode, it thinks a 32 bit value of 0x12345678
 
  27    should be stored as 0x56781234.  This is a real pain, when
 
  28    you have linked lists which are shared by the 680x0 and the
 
  32    Written 1993 by Donald Becker.
 
  33    Copyright 1993 United States Government as represented by the Director,
 
  34    National Security Agency. This software may only be used and distributed
 
  35    according to the terms of the GNU General Public License as modified by SRC,
 
  36    incorporated herein by reference.
 
  38    The author may be reached as becker@scyld.com, or C/O
 
  39    Scyld Computing Corporation, 410 Severn Ave., Suite 210, Annapolis MD 21403
 
  43 #include <linux/module.h>
 
  44 #include <linux/kernel.h>
 
  45 #include <linux/string.h>
 
  46 #include <linux/errno.h>
 
  47 #include <linux/ioport.h>
 
  48 #include <linux/slab.h>
 
  49 #include <linux/interrupt.h>
 
  50 #include <linux/delay.h>
 
  51 #include <linux/netdevice.h>
 
  52 #include <linux/etherdevice.h>
 
  53 #include <linux/skbuff.h>
 
  54 #include <linux/init.h>
 
  55 #include <linux/bitops.h>
 
  59 #include <asm/pgtable.h>
 
  61 static char version[] __initdata =
 
  62         "82596.c $Revision: 1.5 $\n";
 
  64 #define DRV_NAME        "82596"
 
  69 #define DEB_INIT        0x0001
 
  70 #define DEB_PROBE       0x0002
 
  71 #define DEB_SERIOUS     0x0004
 
  72 #define DEB_ERRORS      0x0008
 
  73 #define DEB_MULTI       0x0010
 
  74 #define DEB_TDR         0x0020
 
  75 #define DEB_OPEN        0x0040
 
  76 #define DEB_RESET       0x0080
 
  77 #define DEB_ADDCMD      0x0100
 
  78 #define DEB_STATUS      0x0200
 
  79 #define DEB_STARTTX     0x0400
 
  80 #define DEB_RXADDR      0x0800
 
  81 #define DEB_TXADDR      0x1000
 
  82 #define DEB_RXFRAME     0x2000
 
  83 #define DEB_INTS        0x4000
 
  84 #define DEB_STRUCT      0x8000
 
  85 #define DEB_ANY         0xffff
 
  88 #define DEB(x,y)        if (i596_debug & (x)) y
 
  91 #if defined(CONFIG_MVME16x_NET) || defined(CONFIG_MVME16x_NET_MODULE)
 
  92 #define ENABLE_MVME16x_NET
 
  94 #if defined(CONFIG_BVME6000_NET) || defined(CONFIG_BVME6000_NET_MODULE)
 
  95 #define ENABLE_BVME6000_NET
 
  97 #if defined(CONFIG_APRICOT) || defined(CONFIG_APRICOT_MODULE)
 
  98 #define ENABLE_APRICOT
 
 101 #ifdef ENABLE_MVME16x_NET
 
 102 #include <asm/mvme16xhw.h>
 
 104 #ifdef ENABLE_BVME6000_NET
 
 105 #include <asm/bvme6000hw.h>
 
 109  * Define various macros for Channel Attention, word swapping etc., dependent
 
 110  * on architecture.  MVME and BVME are 680x0 based, otherwise it is Intel.
 
 114 #define WSWAPrfd(x)  ((struct i596_rfd *) (((u32)(x)<<16) | ((((u32)(x)))>>16)))
 
 115 #define WSWAPrbd(x)  ((struct i596_rbd *) (((u32)(x)<<16) | ((((u32)(x)))>>16)))
 
 116 #define WSWAPiscp(x) ((struct i596_iscp *)(((u32)(x)<<16) | ((((u32)(x)))>>16)))
 
 117 #define WSWAPscb(x)  ((struct i596_scb *) (((u32)(x)<<16) | ((((u32)(x)))>>16)))
 
 118 #define WSWAPcmd(x)  ((struct i596_cmd *) (((u32)(x)<<16) | ((((u32)(x)))>>16)))
 
 119 #define WSWAPtbd(x)  ((struct i596_tbd *) (((u32)(x)<<16) | ((((u32)(x)))>>16)))
 
 120 #define WSWAPchar(x) ((char *)            (((u32)(x)<<16) | ((((u32)(x)))>>16)))
 
 121 #define ISCP_BUSY       0x00010000
 
 122 #define MACH_IS_APRICOT 0
 
 124 #define WSWAPrfd(x)     ((struct i596_rfd *)(x))
 
 125 #define WSWAPrbd(x)     ((struct i596_rbd *)(x))
 
 126 #define WSWAPiscp(x)    ((struct i596_iscp *)(x))
 
 127 #define WSWAPscb(x)     ((struct i596_scb *)(x))
 
 128 #define WSWAPcmd(x)     ((struct i596_cmd *)(x))
 
 129 #define WSWAPtbd(x)     ((struct i596_tbd *)(x))
 
 130 #define WSWAPchar(x)    ((char *)(x))
 
 131 #define ISCP_BUSY       0x0001
 
 132 #define MACH_IS_APRICOT 1
 
 136  * The MPU_PORT command allows direct access to the 82596. With PORT access
 
 137  * the following commands are available (p5-18). The 32-bit port command
 
 138  * must be word-swapped with the most significant word written first.
 
 139  * This only applies to VME boards.
 
 141 #define PORT_RESET              0x00    /* reset 82596 */
 
 142 #define PORT_SELFTEST           0x01    /* selftest */
 
 143 #define PORT_ALTSCP             0x02    /* alternate SCB address */
 
 144 #define PORT_ALTDUMP            0x03    /* Alternate DUMP address */
 
 146 static int i596_debug = (DEB_SERIOUS|DEB_PROBE);
 
 148 MODULE_AUTHOR("Richard Hirst");
 
 149 MODULE_DESCRIPTION("i82596 driver");
 
 150 MODULE_LICENSE("GPL");
 
 152 module_param(i596_debug, int, 0);
 
 153 MODULE_PARM_DESC(i596_debug, "i82596 debug mask");
 
 156 /* Copy frames shorter than rx_copybreak, otherwise pass on up in
 
 157  * a full sized sk_buff.  Value of 100 stolen from tulip.c (!alpha).
 
 159 static int rx_copybreak = 100;
 
 161 #define PKT_BUF_SZ      1536
 
 162 #define MAX_MC_CNT      64
 
 164 #define I596_TOTAL_SIZE 17
 
 166 #define I596_NULL ((void *)0xffffffff)
 
 168 #define CMD_EOL         0x8000  /* The last command of the list, stop. */
 
 169 #define CMD_SUSP        0x4000  /* Suspend after doing cmd. */
 
 170 #define CMD_INTR        0x2000  /* Interrupt after doing cmd. */
 
 172 #define CMD_FLEX        0x0008  /* Enable flexible memory model */
 
 175         CmdNOp = 0, CmdSASetup = 1, CmdConfigure = 2, CmdMulticastList = 3,
 
 176         CmdTx = 4, CmdTDR = 5, CmdDump = 6, CmdDiagnose = 7
 
 179 #define STAT_C          0x8000  /* Set to 0 after execution */
 
 180 #define STAT_B          0x4000  /* Command being executed */
 
 181 #define STAT_OK         0x2000  /* Command executed ok */
 
 182 #define STAT_A          0x1000  /* Command aborted */
 
 184 #define  CUC_START      0x0100
 
 185 #define  CUC_RESUME     0x0200
 
 186 #define  CUC_SUSPEND    0x0300
 
 187 #define  CUC_ABORT      0x0400
 
 188 #define  RX_START       0x0010
 
 189 #define  RX_RESUME      0x0020
 
 190 #define  RX_SUSPEND     0x0030
 
 191 #define  RX_ABORT       0x0040
 
 197         unsigned short porthi;
 
 198         unsigned short portlo;
 
 203 #define SIZE_MASK       0x3fff
 
 208         struct i596_tbd *next;
 
 212 /* The command structure has two 'next' pointers; v_next is the address of
 
 213  * the next command as seen by the CPU, b_next is the address of the next
 
 214  * command as seen by the 82596.  The b_next pointer, as used by the 82596
 
 215  * always references the status field of the next command, rather than the
 
 216  * v_next field, because the 82596 is unaware of v_next.  It may seem more
 
 217  * logical to put v_next at the end of the structure, but we cannot do that
 
 218  * because the 82596 expects other fields to be there, depending on command
 
 223         struct i596_cmd *v_next;        /* Address from CPUs viewpoint */
 
 224         unsigned short status;
 
 225         unsigned short command;
 
 226         struct i596_cmd *b_next;        /* Address from i596 viewpoint */
 
 231         struct i596_tbd *tbd;
 
 234         struct sk_buff *skb;    /* So we can free it after tx */
 
 239         unsigned short status;
 
 246         char mc_addrs[MAX_MC_CNT*6];
 
 256         char i596_config[16];
 
 262         struct i596_rfd *b_next;        /* Address from i596 viewpoint */
 
 263         struct i596_rbd *rbd;
 
 264         unsigned short count;
 
 266         struct i596_rfd *v_next;        /* Address from CPUs viewpoint */
 
 267         struct i596_rfd *v_prev;
 
 271     unsigned short count;
 
 272     unsigned short zero1;
 
 273     struct i596_rbd *b_next;
 
 274     unsigned char *b_data;              /* Address from i596 viewpoint */
 
 276     unsigned short zero2;
 
 278     struct i596_rbd *v_next;
 
 279     struct i596_rbd *b_addr;            /* This rbd addr from i596 view */
 
 280     unsigned char *v_data;              /* Address from CPUs viewpoint */
 
 283 #define TX_RING_SIZE 64
 
 284 #define RX_RING_SIZE 16
 
 287         unsigned short status;
 
 288         unsigned short command;
 
 289         struct i596_cmd *cmd;
 
 290         struct i596_rfd *rfd;
 
 291         unsigned long crc_err;
 
 292         unsigned long align_err;
 
 293         unsigned long resource_err;
 
 294         unsigned long over_err;
 
 295         unsigned long rcvdt_err;
 
 296         unsigned long short_err;
 
 298         unsigned short t_off;
 
 303         struct i596_scb *scb;
 
 307         unsigned long sysbus;
 
 309         struct i596_iscp *iscp;
 
 312 struct i596_private {
 
 313         volatile struct i596_scp scp;
 
 314         volatile struct i596_iscp iscp;
 
 315         volatile struct i596_scb scb;
 
 316         struct sa_cmd sa_cmd;
 
 317         struct cf_cmd cf_cmd;
 
 318         struct tdr_cmd tdr_cmd;
 
 319         struct mc_cmd mc_cmd;
 
 321         int last_restart __attribute__((aligned(4)));
 
 322         struct i596_rfd *rfd_head;
 
 323         struct i596_rbd *rbd_head;
 
 324         struct i596_cmd *cmd_tail;
 
 325         struct i596_cmd *cmd_head;
 
 327         unsigned long last_cmd;
 
 328         struct net_device_stats stats;
 
 329         struct i596_rfd rfds[RX_RING_SIZE];
 
 330         struct i596_rbd rbds[RX_RING_SIZE];
 
 331         struct tx_cmd tx_cmds[TX_RING_SIZE];
 
 332         struct i596_tbd tbds[TX_RING_SIZE];
 
 337 static char init_setup[] =
 
 339         0x8E,                   /* length, prefetch on */
 
 340         0xC8,                   /* fifo to 8, monitor off */
 
 342         0xc0,                   /* don't save bad frames */
 
 344         0x80,                   /* don't save bad frames */
 
 346         0x2E,                   /* No source address insertion, 8 byte preamble */
 
 347         0x00,                   /* priority and backoff defaults */
 
 348         0x60,                   /* interframe spacing */
 
 349         0x00,                   /* slot time LSB */
 
 350         0xf2,                   /* slot time and retries */
 
 351         0x00,                   /* promiscuous mode */
 
 352         0x00,                   /* collision detect */
 
 353         0x40,                   /* minimum frame length */
 
 356         0x7f /*  *multi IA */ };
 
 358 static int i596_open(struct net_device *dev);
 
 359 static int i596_start_xmit(struct sk_buff *skb, struct net_device *dev);
 
 360 static irqreturn_t i596_interrupt(int irq, void *dev_id);
 
 361 static int i596_close(struct net_device *dev);
 
 362 static struct net_device_stats *i596_get_stats(struct net_device *dev);
 
 363 static void i596_add_cmd(struct net_device *dev, struct i596_cmd *cmd);
 
 364 static void i596_tx_timeout (struct net_device *dev);
 
 365 static void print_eth(unsigned char *buf, char *str);
 
 366 static void set_multicast_list(struct net_device *dev);
 
 368 static int rx_ring_size = RX_RING_SIZE;
 
 369 static int ticks_limit = 25;
 
 370 static int max_cmd_backlog = TX_RING_SIZE-1;
 
 373 static inline void CA(struct net_device *dev)
 
 375 #ifdef ENABLE_MVME16x_NET
 
 376         if (MACH_IS_MVME16x) {
 
 377                 ((struct i596_reg *) dev->base_addr)->ca = 1;
 
 380 #ifdef ENABLE_BVME6000_NET
 
 381         if (MACH_IS_BVME6000) {
 
 384                 i = *(volatile u32 *) (dev->base_addr);
 
 387 #ifdef ENABLE_APRICOT
 
 388         if (MACH_IS_APRICOT) {
 
 389                 outw(0, (short) (dev->base_addr) + 4);
 
 395 static inline void MPU_PORT(struct net_device *dev, int c, volatile void *x)
 
 397 #ifdef ENABLE_MVME16x_NET
 
 398         if (MACH_IS_MVME16x) {
 
 399                 struct i596_reg *p = (struct i596_reg *) (dev->base_addr);
 
 400                 p->porthi = ((c) | (u32) (x)) & 0xffff;
 
 401                 p->portlo = ((c) | (u32) (x)) >> 16;
 
 404 #ifdef ENABLE_BVME6000_NET
 
 405         if (MACH_IS_BVME6000) {
 
 406                 u32 v = (u32) (c) | (u32) (x);
 
 407                 v = ((u32) (v) << 16) | ((u32) (v) >> 16);
 
 408                 *(volatile u32 *) dev->base_addr = v;
 
 410                 *(volatile u32 *) dev->base_addr = v;
 
 416 static inline int wait_istat(struct net_device *dev, struct i596_private *lp, int delcnt, char *str)
 
 418         while (--delcnt && lp->iscp.stat)
 
 421                 printk(KERN_ERR "%s: %s, status %4.4x, cmd %4.4x.\n",
 
 422                      dev->name, str, lp->scb.status, lp->scb.command);
 
 430 static inline int wait_cmd(struct net_device *dev, struct i596_private *lp, int delcnt, char *str)
 
 432         while (--delcnt && lp->scb.command)
 
 435                 printk(KERN_ERR "%s: %s, status %4.4x, cmd %4.4x.\n",
 
 436                      dev->name, str, lp->scb.status, lp->scb.command);
 
 444 static inline int wait_cfg(struct net_device *dev, struct i596_cmd *cmd, int delcnt, char *str)
 
 446         volatile struct i596_cmd *c = cmd;
 
 448         while (--delcnt && c->command)
 
 451                 printk(KERN_ERR "%s: %s.\n", dev->name, str);
 
 459 static void i596_display_data(struct net_device *dev)
 
 461         struct i596_private *lp = dev->priv;
 
 462         struct i596_cmd *cmd;
 
 463         struct i596_rfd *rfd;
 
 464         struct i596_rbd *rbd;
 
 466         printk(KERN_ERR "lp and scp at %p, .sysbus = %08lx, .iscp = %p\n",
 
 467                &lp->scp, lp->scp.sysbus, lp->scp.iscp);
 
 468         printk(KERN_ERR "iscp at %p, iscp.stat = %08lx, .scb = %p\n",
 
 469                &lp->iscp, lp->iscp.stat, lp->iscp.scb);
 
 470         printk(KERN_ERR "scb at %p, scb.status = %04x, .command = %04x,"
 
 471                 " .cmd = %p, .rfd = %p\n",
 
 472                &lp->scb, lp->scb.status, lp->scb.command,
 
 473                 lp->scb.cmd, lp->scb.rfd);
 
 474         printk(KERN_ERR "   errors: crc %lx, align %lx, resource %lx,"
 
 475                " over %lx, rcvdt %lx, short %lx\n",
 
 476                 lp->scb.crc_err, lp->scb.align_err, lp->scb.resource_err,
 
 477                 lp->scb.over_err, lp->scb.rcvdt_err, lp->scb.short_err);
 
 479         while (cmd != I596_NULL) {
 
 480                 printk(KERN_ERR "cmd at %p, .status = %04x, .command = %04x, .b_next = %p\n",
 
 481                   cmd, cmd->status, cmd->command, cmd->b_next);
 
 485         printk(KERN_ERR "rfd_head = %p\n", rfd);
 
 487                 printk(KERN_ERR "   %p .stat %04x, .cmd %04x, b_next %p, rbd %p,"
 
 489                         rfd, rfd->stat, rfd->cmd, rfd->b_next, rfd->rbd,
 
 492         } while (rfd != lp->rfd_head);
 
 494         printk(KERN_ERR "rbd_head = %p\n", rbd);
 
 496                 printk(KERN_ERR "   %p .count %04x, b_next %p, b_data %p, size %04x\n",
 
 497                         rbd, rbd->count, rbd->b_next, rbd->b_data, rbd->size);
 
 499         } while (rbd != lp->rbd_head);
 
 503 #if defined(ENABLE_MVME16x_NET) || defined(ENABLE_BVME6000_NET)
 
 504 static irqreturn_t i596_error(int irq, void *dev_id)
 
 506         struct net_device *dev = dev_id;
 
 507 #ifdef ENABLE_MVME16x_NET
 
 508         if (MACH_IS_MVME16x) {
 
 509                 volatile unsigned char *pcc2 = (unsigned char *) 0xfff42000;
 
 515 #ifdef ENABLE_BVME6000_NET
 
 516         if (MACH_IS_BVME6000) {
 
 517                 volatile unsigned char *ethirq = (unsigned char *) BVME_ETHIRQ_REG;
 
 523         printk(KERN_ERR "%s: Error interrupt\n", dev->name);
 
 524         i596_display_data(dev);
 
 529 static inline void init_rx_bufs(struct net_device *dev)
 
 531         struct i596_private *lp = dev->priv;
 
 533         struct i596_rfd *rfd;
 
 534         struct i596_rbd *rbd;
 
 536         /* First build the Receive Buffer Descriptor List */
 
 538         for (i = 0, rbd = lp->rbds; i < rx_ring_size; i++, rbd++) {
 
 539                 struct sk_buff *skb = dev_alloc_skb(PKT_BUF_SZ);
 
 542                         panic("82596: alloc_skb() failed");
 
 545                 rbd->b_next = WSWAPrbd(virt_to_bus(rbd+1));
 
 546                 rbd->b_addr = WSWAPrbd(virt_to_bus(rbd));
 
 548                 rbd->v_data = skb->data;
 
 549                 rbd->b_data = WSWAPchar(virt_to_bus(skb->data));
 
 550                 rbd->size = PKT_BUF_SZ;
 
 552                 cache_clear(virt_to_phys(skb->data), PKT_BUF_SZ);
 
 555         lp->rbd_head = lp->rbds;
 
 556         rbd = lp->rbds + rx_ring_size - 1;
 
 557         rbd->v_next = lp->rbds;
 
 558         rbd->b_next = WSWAPrbd(virt_to_bus(lp->rbds));
 
 560         /* Now build the Receive Frame Descriptor List */
 
 562         for (i = 0, rfd = lp->rfds; i < rx_ring_size; i++, rfd++) {
 
 563                 rfd->rbd = I596_NULL;
 
 566                 rfd->b_next = WSWAPrfd(virt_to_bus(rfd+1));
 
 569         lp->rfd_head = lp->rfds;
 
 570         lp->scb.rfd = WSWAPrfd(virt_to_bus(lp->rfds));
 
 572         rfd->rbd = lp->rbd_head;
 
 573         rfd->v_prev = lp->rfds + rx_ring_size - 1;
 
 574         rfd = lp->rfds + rx_ring_size - 1;
 
 575         rfd->v_next = lp->rfds;
 
 576         rfd->b_next = WSWAPrfd(virt_to_bus(lp->rfds));
 
 577         rfd->cmd = CMD_EOL|CMD_FLEX;
 
 580 static inline void remove_rx_bufs(struct net_device *dev)
 
 582         struct i596_private *lp = dev->priv;
 
 583         struct i596_rbd *rbd;
 
 586         for (i = 0, rbd = lp->rbds; i < rx_ring_size; i++, rbd++) {
 
 587                 if (rbd->skb == NULL)
 
 589                 dev_kfree_skb(rbd->skb);
 
 594 static void rebuild_rx_bufs(struct net_device *dev)
 
 596         struct i596_private *lp = dev->priv;
 
 599         /* Ensure rx frame/buffer descriptors are tidy */
 
 601         for (i = 0; i < rx_ring_size; i++) {
 
 602                 lp->rfds[i].rbd = I596_NULL;
 
 603                 lp->rfds[i].cmd = CMD_FLEX;
 
 605         lp->rfds[rx_ring_size-1].cmd = CMD_EOL|CMD_FLEX;
 
 606         lp->rfd_head = lp->rfds;
 
 607         lp->scb.rfd = WSWAPrfd(virt_to_bus(lp->rfds));
 
 608         lp->rbd_head = lp->rbds;
 
 609         lp->rfds[0].rbd = WSWAPrbd(virt_to_bus(lp->rbds));
 
 613 static int init_i596_mem(struct net_device *dev)
 
 615         struct i596_private *lp = dev->priv;
 
 616 #if !defined(ENABLE_MVME16x_NET) && !defined(ENABLE_BVME6000_NET) || defined(ENABLE_APRICOT)
 
 617         short ioaddr = dev->base_addr;
 
 621         MPU_PORT(dev, PORT_RESET, NULL);
 
 623         udelay(100);            /* Wait 100us - seems to help */
 
 625 #if defined(ENABLE_MVME16x_NET) || defined(ENABLE_BVME6000_NET)
 
 626 #ifdef ENABLE_MVME16x_NET
 
 627         if (MACH_IS_MVME16x) {
 
 628                 volatile unsigned char *pcc2 = (unsigned char *) 0xfff42000;
 
 630                 /* Disable all ints for now */
 
 633                 /* Following disables snooping.  Snooping is not required
 
 634                  * as we make appropriate use of non-cached pages for
 
 635                  * shared data, and cache_push/cache_clear.
 
 640 #ifdef ENABLE_BVME6000_NET
 
 641         if (MACH_IS_BVME6000) {
 
 642                 volatile unsigned char *ethirq = (unsigned char *) BVME_ETHIRQ_REG;
 
 648         /* change the scp address */
 
 650         MPU_PORT(dev, PORT_ALTSCP, (void *)virt_to_bus((void *)&lp->scp));
 
 652 #elif defined(ENABLE_APRICOT)
 
 655                 u32 scp = virt_to_bus(&lp->scp);
 
 657                 /* change the scp address */
 
 660                 outb(4, ioaddr + 0xf);
 
 661                 outw(scp | 2, ioaddr);
 
 662                 outw(scp >> 16, ioaddr);
 
 666         lp->last_cmd = jiffies;
 
 668 #ifdef ENABLE_MVME16x_NET
 
 670                 lp->scp.sysbus = 0x00000054;
 
 672 #ifdef ENABLE_BVME6000_NET
 
 673         if (MACH_IS_BVME6000)
 
 674                 lp->scp.sysbus = 0x0000004c;
 
 676 #ifdef ENABLE_APRICOT
 
 678                 lp->scp.sysbus = 0x00440000;
 
 681         lp->scp.iscp = WSWAPiscp(virt_to_bus((void *)&lp->iscp));
 
 682         lp->iscp.scb = WSWAPscb(virt_to_bus((void *)&lp->scb));
 
 683         lp->iscp.stat = ISCP_BUSY;
 
 686         lp->cmd_head = lp->scb.cmd = I596_NULL;
 
 688 #ifdef ENABLE_BVME6000_NET
 
 689         if (MACH_IS_BVME6000) {
 
 690                 lp->scb.t_on  = 7 * 25;
 
 691                 lp->scb.t_off = 1 * 25;
 
 695         DEB(DEB_INIT,printk(KERN_DEBUG "%s: starting i82596.\n", dev->name));
 
 697 #if defined(ENABLE_APRICOT)
 
 698         (void) inb(ioaddr + 0x10);
 
 699         outb(4, ioaddr + 0xf);
 
 703         if (wait_istat(dev,lp,1000,"initialization timed out"))
 
 705         DEB(DEB_INIT,printk(KERN_DEBUG "%s: i82596 initialization successful\n", dev->name));
 
 707         /* Ensure rx frame/buffer descriptors are tidy */
 
 708         rebuild_rx_bufs(dev);
 
 711 #ifdef ENABLE_MVME16x_NET
 
 712         if (MACH_IS_MVME16x) {
 
 713                 volatile unsigned char *pcc2 = (unsigned char *) 0xfff42000;
 
 715                 /* Enable ints, etc. now */
 
 716                 pcc2[0x2a] = 0x55;      /* Edge sensitive */
 
 720 #ifdef ENABLE_BVME6000_NET
 
 721         if (MACH_IS_BVME6000) {
 
 722                 volatile unsigned char *ethirq = (unsigned char *) BVME_ETHIRQ_REG;
 
 729         DEB(DEB_INIT,printk(KERN_DEBUG "%s: queuing CmdConfigure\n", dev->name));
 
 730         memcpy(lp->cf_cmd.i596_config, init_setup, 14);
 
 731         lp->cf_cmd.cmd.command = CmdConfigure;
 
 732         i596_add_cmd(dev, &lp->cf_cmd.cmd);
 
 734         DEB(DEB_INIT,printk(KERN_DEBUG "%s: queuing CmdSASetup\n", dev->name));
 
 735         memcpy(lp->sa_cmd.eth_addr, dev->dev_addr, 6);
 
 736         lp->sa_cmd.cmd.command = CmdSASetup;
 
 737         i596_add_cmd(dev, &lp->sa_cmd.cmd);
 
 739         DEB(DEB_INIT,printk(KERN_DEBUG "%s: queuing CmdTDR\n", dev->name));
 
 740         lp->tdr_cmd.cmd.command = CmdTDR;
 
 741         i596_add_cmd(dev, &lp->tdr_cmd.cmd);
 
 743         spin_lock_irqsave (&lp->lock, flags);
 
 745         if (wait_cmd(dev,lp,1000,"timed out waiting to issue RX_START")) {
 
 746                 spin_unlock_irqrestore (&lp->lock, flags);
 
 749         DEB(DEB_INIT,printk(KERN_DEBUG "%s: Issuing RX_START\n", dev->name));
 
 750         lp->scb.command = RX_START;
 
 753         spin_unlock_irqrestore (&lp->lock, flags);
 
 755         if (wait_cmd(dev,lp,1000,"RX_START not processed"))
 
 757         DEB(DEB_INIT,printk(KERN_DEBUG "%s: Receive unit started OK\n", dev->name));
 
 761         printk(KERN_CRIT "%s: Failed to initialise 82596\n", dev->name);
 
 762         MPU_PORT(dev, PORT_RESET, NULL);
 
 766 static inline int i596_rx(struct net_device *dev)
 
 768         struct i596_private *lp = dev->priv;
 
 769         struct i596_rfd *rfd;
 
 770         struct i596_rbd *rbd;
 
 773         DEB(DEB_RXFRAME,printk(KERN_DEBUG "i596_rx(), rfd_head %p, rbd_head %p\n",
 
 774                         lp->rfd_head, lp->rbd_head));
 
 776         rfd = lp->rfd_head;             /* Ref next frame to check */
 
 778         while ((rfd->stat) & STAT_C) {  /* Loop while complete frames */
 
 779                 if (rfd->rbd == I596_NULL)
 
 781                 else if (rfd->rbd == lp->rbd_head->b_addr)
 
 784                         printk(KERN_CRIT "%s: rbd chain broken!\n", dev->name);
 
 788                 DEB(DEB_RXFRAME, printk(KERN_DEBUG "  rfd %p, rfd.rbd %p, rfd.stat %04x\n",
 
 789                         rfd, rfd->rbd, rfd->stat));
 
 791                 if (rbd != I596_NULL && ((rfd->stat) & STAT_OK)) {
 
 793                         int pkt_len = rbd->count & 0x3fff;
 
 794                         struct sk_buff *skb = rbd->skb;
 
 797                         DEB(DEB_RXADDR,print_eth(rbd->v_data, "received"));
 
 800                         /* Check if the packet is long enough to just accept
 
 801                          * without copying to a properly sized skbuff.
 
 804                         if (pkt_len > rx_copybreak) {
 
 805                                 struct sk_buff *newskb;
 
 807                                 /* Get fresh skbuff to replace filled one. */
 
 808                                 newskb = dev_alloc_skb(PKT_BUF_SZ);
 
 809                                 if (newskb == NULL) {
 
 810                                         skb = NULL;     /* drop pkt */
 
 813                                 /* Pass up the skb already on the Rx ring. */
 
 814                                 skb_put(skb, pkt_len);
 
 818                                 rbd->v_data = newskb->data;
 
 819                                 rbd->b_data = WSWAPchar(virt_to_bus(newskb->data));
 
 821                                 cache_clear(virt_to_phys(newskb->data), PKT_BUF_SZ);
 
 825                                 skb = dev_alloc_skb(pkt_len + 2);
 
 828                                 /* XXX tulip.c can defer packets here!! */
 
 829                                 printk(KERN_WARNING "%s: i596_rx Memory squeeze, dropping packet.\n", dev->name);
 
 830                                 lp->stats.rx_dropped++;
 
 835                                         /* 16 byte align the data fields */
 
 837                                         memcpy(skb_put(skb,pkt_len), rbd->v_data, pkt_len);
 
 839                                 skb->protocol=eth_type_trans(skb,dev);
 
 842                                 cache_clear(virt_to_phys(rbd->skb->data),
 
 846                                 dev->last_rx = jiffies;
 
 847                                 lp->stats.rx_packets++;
 
 848                                 lp->stats.rx_bytes+=pkt_len;
 
 852                         DEB(DEB_ERRORS, printk(KERN_DEBUG "%s: Error, rfd.stat = 0x%04x\n",
 
 853                                         dev->name, rfd->stat));
 
 854                         lp->stats.rx_errors++;
 
 855                         if ((rfd->stat) & 0x0001)
 
 856                                 lp->stats.collisions++;
 
 857                         if ((rfd->stat) & 0x0080)
 
 858                                 lp->stats.rx_length_errors++;
 
 859                         if ((rfd->stat) & 0x0100)
 
 860                                 lp->stats.rx_over_errors++;
 
 861                         if ((rfd->stat) & 0x0200)
 
 862                                 lp->stats.rx_fifo_errors++;
 
 863                         if ((rfd->stat) & 0x0400)
 
 864                                 lp->stats.rx_frame_errors++;
 
 865                         if ((rfd->stat) & 0x0800)
 
 866                                 lp->stats.rx_crc_errors++;
 
 867                         if ((rfd->stat) & 0x1000)
 
 868                                 lp->stats.rx_length_errors++;
 
 871                 /* Clear the buffer descriptor count and EOF + F flags */
 
 873                 if (rbd != I596_NULL && (rbd->count & 0x4000)) {
 
 875                         lp->rbd_head = rbd->v_next;
 
 878                 /* Tidy the frame descriptor, marking it as end of list */
 
 880                 rfd->rbd = I596_NULL;
 
 882                 rfd->cmd = CMD_EOL|CMD_FLEX;
 
 885                 /* Remove end-of-list from old end descriptor */
 
 887                 rfd->v_prev->cmd = CMD_FLEX;
 
 889                 /* Update record of next frame descriptor to process */
 
 891                 lp->scb.rfd = rfd->b_next;
 
 892                 lp->rfd_head = rfd->v_next;
 
 896         DEB(DEB_RXFRAME,printk(KERN_DEBUG "frames %d\n", frames));
 
 902 static void i596_cleanup_cmd(struct net_device *dev, struct i596_private *lp)
 
 904         struct i596_cmd *ptr;
 
 906         while (lp->cmd_head != I596_NULL) {
 
 908                 lp->cmd_head = ptr->v_next;
 
 911                 switch ((ptr->command) & 0x7) {
 
 914                                 struct tx_cmd *tx_cmd = (struct tx_cmd *) ptr;
 
 915                                 struct sk_buff *skb = tx_cmd->skb;
 
 919                                 lp->stats.tx_errors++;
 
 920                                 lp->stats.tx_aborted_errors++;
 
 922                                 ptr->v_next = ptr->b_next = I596_NULL;
 
 923                                 tx_cmd->cmd.command = 0;  /* Mark as free */
 
 927                         ptr->v_next = ptr->b_next = I596_NULL;
 
 931         wait_cmd(dev,lp,100,"i596_cleanup_cmd timed out");
 
 932         lp->scb.cmd = I596_NULL;
 
 935 static void i596_reset(struct net_device *dev, struct i596_private *lp,
 
 940         DEB(DEB_RESET,printk(KERN_DEBUG "i596_reset\n"));
 
 942         spin_lock_irqsave (&lp->lock, flags);
 
 944         wait_cmd(dev,lp,100,"i596_reset timed out");
 
 946         netif_stop_queue(dev);
 
 948         lp->scb.command = CUC_ABORT | RX_ABORT;
 
 951         /* wait for shutdown */
 
 952         wait_cmd(dev,lp,1000,"i596_reset 2 timed out");
 
 953         spin_unlock_irqrestore (&lp->lock, flags);
 
 955         i596_cleanup_cmd(dev,lp);
 
 958         netif_start_queue(dev);
 
 962 static void i596_add_cmd(struct net_device *dev, struct i596_cmd *cmd)
 
 964         struct i596_private *lp = dev->priv;
 
 965         int ioaddr = dev->base_addr;
 
 968         DEB(DEB_ADDCMD,printk(KERN_DEBUG "i596_add_cmd\n"));
 
 971         cmd->command |= (CMD_EOL | CMD_INTR);
 
 972         cmd->v_next = cmd->b_next = I596_NULL;
 
 974         spin_lock_irqsave (&lp->lock, flags);
 
 976         if (lp->cmd_head != I596_NULL) {
 
 977                 lp->cmd_tail->v_next = cmd;
 
 978                 lp->cmd_tail->b_next = WSWAPcmd(virt_to_bus(&cmd->status));
 
 981                 wait_cmd(dev,lp,100,"i596_add_cmd timed out");
 
 982                 lp->scb.cmd = WSWAPcmd(virt_to_bus(&cmd->status));
 
 983                 lp->scb.command = CUC_START;
 
 989         spin_unlock_irqrestore (&lp->lock, flags);
 
 991         if (lp->cmd_backlog > max_cmd_backlog) {
 
 992                 unsigned long tickssofar = jiffies - lp->last_cmd;
 
 994                 if (tickssofar < ticks_limit)
 
 997                 printk(KERN_NOTICE "%s: command unit timed out, status resetting.\n", dev->name);
 
 999                 i596_reset(dev, lp, ioaddr);
 
1003 static int i596_open(struct net_device *dev)
 
1007         DEB(DEB_OPEN,printk(KERN_DEBUG "%s: i596_open() irq %d.\n", dev->name, dev->irq));
 
1009         if (request_irq(dev->irq, i596_interrupt, 0, "i82596", dev)) {
 
1010                 printk(KERN_ERR "%s: IRQ %d not free\n", dev->name, dev->irq);
 
1013 #ifdef ENABLE_MVME16x_NET
 
1014         if (MACH_IS_MVME16x) {
 
1015                 if (request_irq(0x56, i596_error, 0, "i82596_error", dev))
 
1021         netif_start_queue(dev);
 
1023         /* Initialize the 82596 memory */
 
1024         if (init_i596_mem(dev)) {
 
1026                 free_irq(dev->irq, dev);
 
1032 static void i596_tx_timeout (struct net_device *dev)
 
1034         struct i596_private *lp = dev->priv;
 
1035         int ioaddr = dev->base_addr;
 
1037         /* Transmitter timeout, serious problems. */
 
1038         DEB(DEB_ERRORS,printk(KERN_ERR "%s: transmit timed out, status resetting.\n",
 
1041         lp->stats.tx_errors++;
 
1043         /* Try to restart the adaptor */
 
1044         if (lp->last_restart == lp->stats.tx_packets) {
 
1045                 DEB(DEB_ERRORS,printk(KERN_ERR "Resetting board.\n"));
 
1046                 /* Shutdown and restart */
 
1047                 i596_reset (dev, lp, ioaddr);
 
1049                 /* Issue a channel attention signal */
 
1050                 DEB(DEB_ERRORS,printk(KERN_ERR "Kicking board.\n"));
 
1051                 lp->scb.command = CUC_START | RX_START;
 
1053                 lp->last_restart = lp->stats.tx_packets;
 
1056         dev->trans_start = jiffies;
 
1057         netif_wake_queue (dev);
 
1061 static int i596_start_xmit(struct sk_buff *skb, struct net_device *dev)
 
1063         struct i596_private *lp = dev->priv;
 
1064         struct tx_cmd *tx_cmd;
 
1065         struct i596_tbd *tbd;
 
1066         short length = skb->len;
 
1067         dev->trans_start = jiffies;
 
1069         DEB(DEB_STARTTX,printk(KERN_DEBUG "%s: i596_start_xmit(%x,%p) called\n",
 
1070                                 dev->name, skb->len, skb->data));
 
1072         if (skb->len < ETH_ZLEN) {
 
1073                 if (skb_padto(skb, ETH_ZLEN))
 
1077         netif_stop_queue(dev);
 
1079         tx_cmd = lp->tx_cmds + lp->next_tx_cmd;
 
1080         tbd = lp->tbds + lp->next_tx_cmd;
 
1082         if (tx_cmd->cmd.command) {
 
1083                 printk(KERN_NOTICE "%s: xmit ring full, dropping packet.\n",
 
1085                 lp->stats.tx_dropped++;
 
1089                 if (++lp->next_tx_cmd == TX_RING_SIZE)
 
1090                         lp->next_tx_cmd = 0;
 
1091                 tx_cmd->tbd = WSWAPtbd(virt_to_bus(tbd));
 
1092                 tbd->next = I596_NULL;
 
1094                 tx_cmd->cmd.command = CMD_FLEX | CmdTx;
 
1100                 tbd->size = EOF | length;
 
1102                 tbd->data = WSWAPchar(virt_to_bus(skb->data));
 
1105                 cache_push(virt_to_phys(skb->data), length);
 
1107                 DEB(DEB_TXADDR,print_eth(skb->data, "tx-queued"));
 
1108                 i596_add_cmd(dev, &tx_cmd->cmd);
 
1110                 lp->stats.tx_packets++;
 
1111                 lp->stats.tx_bytes += length;
 
1114         netif_start_queue(dev);
 
1119 static void print_eth(unsigned char *add, char *str)
 
1123         printk(KERN_DEBUG "i596 0x%p, ", add);
 
1124         for (i = 0; i < 6; i++)
 
1125                 printk(" %02X", add[i + 6]);
 
1127         for (i = 0; i < 6; i++)
 
1128                 printk(" %02X", add[i]);
 
1129         printk(" %02X%02X, %s\n", add[12], add[13], str);
 
1132 static int io = 0x300;
 
1133 static int irq = 10;
 
1135 struct net_device * __init i82596_probe(int unit)
 
1137         struct net_device *dev;
 
1139         struct i596_private *lp;
 
1145                 return ERR_PTR(-ENODEV);
 
1148         dev = alloc_etherdev(0);
 
1150                 return ERR_PTR(-ENOMEM);
 
1153                 sprintf(dev->name, "eth%d", unit);
 
1154                 netdev_boot_setup_check(dev);
 
1156                 dev->base_addr = io;
 
1160 #ifdef ENABLE_MVME16x_NET
 
1161         if (MACH_IS_MVME16x) {
 
1162                 if (mvme16x_config & MVME16x_CONFIG_NO_ETHERNET) {
 
1163                         printk(KERN_NOTICE "Ethernet probe disabled - chip not present\n");
 
1167                 memcpy(eth_addr, (void *) 0xfffc1f2c, 6);       /* YUCK! Get addr from NOVRAM */
 
1168                 dev->base_addr = MVME_I596_BASE;
 
1169                 dev->irq = (unsigned) MVME16x_IRQ_I596;
 
1172 #ifdef ENABLE_BVME6000_NET
 
1173         if (MACH_IS_BVME6000) {
 
1174                 volatile unsigned char *rtc = (unsigned char *) BVME_RTC_BASE;
 
1175                 unsigned char msr = rtc[3];
 
1179                 for (i = 0; i < 6; i++)
 
1180                         eth_addr[i] = rtc[i * 4 + 7];   /* Stored in RTC RAM at offset 1 */
 
1182                 dev->base_addr = BVME_I596_BASE;
 
1183                 dev->irq = (unsigned) BVME_IRQ_I596;
 
1186 #ifdef ENABLE_APRICOT
 
1191                 /* this is easy the ethernet interface can only be at 0x300 */
 
1192                 /* first check nothing is already registered here */
 
1194                 if (!request_region(ioaddr, I596_TOTAL_SIZE, DRV_NAME)) {
 
1195                         printk(KERN_ERR "82596: IO address 0x%04x in use\n", ioaddr);
 
1200                 for (i = 0; i < 8; i++) {
 
1201                         eth_addr[i] = inb(ioaddr + 8 + i);
 
1202                         checksum += eth_addr[i];
 
1205                 /* checksum is a multiple of 0x100, got this wrong first time
 
1206                    some machines have 0x100, some 0x200. The DOS driver doesn't
 
1207                    even bother with the checksum.
 
1208                    Some other boards trip the checksum.. but then appear as
 
1209                    ether address 0. Trap these - AC */
 
1211                 if ((checksum % 0x100) ||
 
1212                     (memcmp(eth_addr, "\x00\x00\x49", 3) != 0)) {
 
1217                 dev->base_addr = ioaddr;
 
1221         dev->mem_start = (int)__get_free_pages(GFP_ATOMIC, 0);
 
1222         if (!dev->mem_start) {
 
1227         DEB(DEB_PROBE,printk(KERN_INFO "%s: 82596 at %#3lx,", dev->name, dev->base_addr));
 
1229         for (i = 0; i < 6; i++)
 
1230                 DEB(DEB_PROBE,printk(" %2.2X", dev->dev_addr[i] = eth_addr[i]));
 
1232         DEB(DEB_PROBE,printk(" IRQ %d.\n", dev->irq));
 
1234         DEB(DEB_PROBE,printk(KERN_INFO "%s", version));
 
1236         /* The 82596-specific entries in the device structure. */
 
1237         SET_MODULE_OWNER(dev);
 
1238         dev->open = i596_open;
 
1239         dev->stop = i596_close;
 
1240         dev->hard_start_xmit = i596_start_xmit;
 
1241         dev->get_stats = i596_get_stats;
 
1242         dev->set_multicast_list = set_multicast_list;
 
1243         dev->tx_timeout = i596_tx_timeout;
 
1244         dev->watchdog_timeo = TX_TIMEOUT;
 
1246         dev->priv = (void *)(dev->mem_start);
 
1249         DEB(DEB_INIT,printk(KERN_DEBUG "%s: lp at 0x%08lx (%zd bytes), "
 
1250                         "lp->scb at 0x%08lx\n",
 
1251                         dev->name, (unsigned long)lp,
 
1252                         sizeof(struct i596_private), (unsigned long)&lp->scb));
 
1253         memset((void *) lp, 0, sizeof(struct i596_private));
 
1256         cache_push(virt_to_phys((void *)(dev->mem_start)), 4096);
 
1257         cache_clear(virt_to_phys((void *)(dev->mem_start)), 4096);
 
1258         kernel_set_cachemode((void *)(dev->mem_start), 4096, IOMAP_NOCACHE_SER);
 
1260         lp->scb.command = 0;
 
1261         lp->scb.cmd = I596_NULL;
 
1262         lp->scb.rfd = I596_NULL;
 
1263         spin_lock_init(&lp->lock);
 
1265         err = register_netdev(dev);
 
1271         /* XXX This assumes default cache mode to be IOMAP_FULL_CACHING,
 
1272          * XXX which may be invalid (CONFIG_060_WRITETHROUGH)
 
1274         kernel_set_cachemode((void *)(dev->mem_start), 4096,
 
1275                         IOMAP_FULL_CACHING);
 
1277         free_page ((u32)(dev->mem_start));
 
1279 #ifdef ENABLE_APRICOT
 
1280         release_region(dev->base_addr, I596_TOTAL_SIZE);
 
1284         return ERR_PTR(err);
 
1287 static irqreturn_t i596_interrupt(int irq, void *dev_id)
 
1289         struct net_device *dev = dev_id;
 
1290         struct i596_private *lp;
 
1292         unsigned short status, ack_cmd = 0;
 
1295 #ifdef ENABLE_BVME6000_NET
 
1296         if (MACH_IS_BVME6000) {
 
1297                 if (*(char *) BVME_LOCAL_IRQ_STAT & BVME_ETHERR) {
 
1298                         i596_error(irq, dev_id);
 
1304                 printk(KERN_ERR "i596_interrupt(): irq %d for unknown device.\n", irq);
 
1308         ioaddr = dev->base_addr;
 
1311         spin_lock (&lp->lock);
 
1313         wait_cmd(dev,lp,100,"i596 interrupt, timeout");
 
1314         status = lp->scb.status;
 
1316         DEB(DEB_INTS,printk(KERN_DEBUG "%s: i596 interrupt, IRQ %d, status %4.4x.\n",
 
1317                         dev->name, irq, status));
 
1319         ack_cmd = status & 0xf000;
 
1321         if ((status & 0x8000) || (status & 0x2000)) {
 
1322                 struct i596_cmd *ptr;
 
1325                 if ((status & 0x8000))
 
1326                         DEB(DEB_INTS,printk(KERN_DEBUG "%s: i596 interrupt completed command.\n", dev->name));
 
1327                 if ((status & 0x2000))
 
1328                         DEB(DEB_INTS,printk(KERN_DEBUG "%s: i596 interrupt command unit inactive %x.\n", dev->name, status & 0x0700));
 
1330                 while ((lp->cmd_head != I596_NULL) && (lp->cmd_head->status & STAT_C)) {
 
1333                         DEB(DEB_STATUS,printk(KERN_DEBUG "cmd_head->status = %04x, ->command = %04x\n",
 
1334                                        lp->cmd_head->status, lp->cmd_head->command));
 
1335                         lp->cmd_head = ptr->v_next;
 
1338                         switch ((ptr->command) & 0x7) {
 
1341                                 struct tx_cmd *tx_cmd = (struct tx_cmd *) ptr;
 
1342                                 struct sk_buff *skb = tx_cmd->skb;
 
1344                                 if ((ptr->status) & STAT_OK) {
 
1345                                         DEB(DEB_TXADDR,print_eth(skb->data, "tx-done"));
 
1347                                         lp->stats.tx_errors++;
 
1348                                         if ((ptr->status) & 0x0020)
 
1349                                                 lp->stats.collisions++;
 
1350                                         if (!((ptr->status) & 0x0040))
 
1351                                                 lp->stats.tx_heartbeat_errors++;
 
1352                                         if ((ptr->status) & 0x0400)
 
1353                                                 lp->stats.tx_carrier_errors++;
 
1354                                         if ((ptr->status) & 0x0800)
 
1355                                                 lp->stats.collisions++;
 
1356                                         if ((ptr->status) & 0x1000)
 
1357                                                 lp->stats.tx_aborted_errors++;
 
1360                                 dev_kfree_skb_irq(skb);
 
1362                                 tx_cmd->cmd.command = 0; /* Mark free */
 
1367                                 unsigned short status = ((struct tdr_cmd *)ptr)->status;
 
1369                                 if (status & 0x8000) {
 
1370                                         DEB(DEB_TDR,printk(KERN_INFO "%s: link ok.\n", dev->name));
 
1372                                         if (status & 0x4000)
 
1373                                                 printk(KERN_ERR "%s: Transceiver problem.\n", dev->name);
 
1374                                         if (status & 0x2000)
 
1375                                                 printk(KERN_ERR "%s: Termination problem.\n", dev->name);
 
1376                                         if (status & 0x1000)
 
1377                                                 printk(KERN_ERR "%s: Short circuit.\n", dev->name);
 
1379                                         DEB(DEB_TDR,printk(KERN_INFO "%s: Time %d.\n", dev->name, status & 0x07ff));
 
1384                         case CmdMulticastList:
 
1385                                 /* Zap command so set_multicast_list() knows it is free */
 
1389                         ptr->v_next = ptr->b_next = I596_NULL;
 
1390                         lp->last_cmd = jiffies;
 
1394                 while ((ptr != I596_NULL) && (ptr != lp->cmd_tail)) {
 
1395                         ptr->command &= 0x1fff;
 
1399                 if ((lp->cmd_head != I596_NULL))
 
1400                         ack_cmd |= CUC_START;
 
1401                 lp->scb.cmd = WSWAPcmd(virt_to_bus(&lp->cmd_head->status));
 
1403         if ((status & 0x1000) || (status & 0x4000)) {
 
1404                 if ((status & 0x4000))
 
1405                         DEB(DEB_INTS,printk(KERN_DEBUG "%s: i596 interrupt received a frame.\n", dev->name));
 
1407                 /* Only RX_START if stopped - RGH 07-07-96 */
 
1408                 if (status & 0x1000) {
 
1409                         if (netif_running(dev)) {
 
1410                                 DEB(DEB_ERRORS,printk(KERN_ERR "%s: i596 interrupt receive unit inactive, status 0x%x\n", dev->name, status));
 
1411                                 ack_cmd |= RX_START;
 
1412                                 lp->stats.rx_errors++;
 
1413                                 lp->stats.rx_fifo_errors++;
 
1414                                 rebuild_rx_bufs(dev);
 
1418         wait_cmd(dev,lp,100,"i596 interrupt, timeout");
 
1419         lp->scb.command = ack_cmd;
 
1421 #ifdef ENABLE_MVME16x_NET
 
1422         if (MACH_IS_MVME16x) {
 
1423                 /* Ack the interrupt */
 
1425                 volatile unsigned char *pcc2 = (unsigned char *) 0xfff42000;
 
1430 #ifdef ENABLE_BVME6000_NET
 
1431         if (MACH_IS_BVME6000) {
 
1432                 volatile unsigned char *ethirq = (unsigned char *) BVME_ETHIRQ_REG;
 
1438 #ifdef ENABLE_APRICOT
 
1439         (void) inb(ioaddr + 0x10);
 
1440         outb(4, ioaddr + 0xf);
 
1444         DEB(DEB_INTS,printk(KERN_DEBUG "%s: exiting interrupt.\n", dev->name));
 
1446         spin_unlock (&lp->lock);
 
1447         return IRQ_RETVAL(handled);
 
1450 static int i596_close(struct net_device *dev)
 
1452         struct i596_private *lp = dev->priv;
 
1453         unsigned long flags;
 
1455         netif_stop_queue(dev);
 
1457         DEB(DEB_INIT,printk(KERN_DEBUG "%s: Shutting down ethercard, status was %4.4x.\n",
 
1458                        dev->name, lp->scb.status));
 
1460         spin_lock_irqsave(&lp->lock, flags);
 
1462         wait_cmd(dev,lp,100,"close1 timed out");
 
1463         lp->scb.command = CUC_ABORT | RX_ABORT;
 
1466         wait_cmd(dev,lp,100,"close2 timed out");
 
1468         spin_unlock_irqrestore(&lp->lock, flags);
 
1469         DEB(DEB_STRUCT,i596_display_data(dev));
 
1470         i596_cleanup_cmd(dev,lp);
 
1472 #ifdef ENABLE_MVME16x_NET
 
1473         if (MACH_IS_MVME16x) {
 
1474                 volatile unsigned char *pcc2 = (unsigned char *) 0xfff42000;
 
1476                 /* Disable all ints */
 
1479                 pcc2[0x2b] = 0x40;      /* Set snooping bits now! */
 
1482 #ifdef ENABLE_BVME6000_NET
 
1483         if (MACH_IS_BVME6000) {
 
1484                 volatile unsigned char *ethirq = (unsigned char *) BVME_ETHIRQ_REG;
 
1490         free_irq(dev->irq, dev);
 
1491         remove_rx_bufs(dev);
 
1496 static struct net_device_stats *
 
1497  i596_get_stats(struct net_device *dev)
 
1499         struct i596_private *lp = dev->priv;
 
1505  *    Set or clear the multicast filter for this adaptor.
 
1508 static void set_multicast_list(struct net_device *dev)
 
1510         struct i596_private *lp = dev->priv;
 
1511         int config = 0, cnt;
 
1513         DEB(DEB_MULTI,printk(KERN_DEBUG "%s: set multicast list, %d entries, promisc %s, allmulti %s\n",
 
1514                 dev->name, dev->mc_count,
 
1515                 dev->flags & IFF_PROMISC  ? "ON" : "OFF",
 
1516                 dev->flags & IFF_ALLMULTI ? "ON" : "OFF"));
 
1518         if (wait_cfg(dev, &lp->cf_cmd.cmd, 1000, "config change request timed out"))
 
1521         if ((dev->flags & IFF_PROMISC) && !(lp->cf_cmd.i596_config[8] & 0x01)) {
 
1522                 lp->cf_cmd.i596_config[8] |= 0x01;
 
1525         if (!(dev->flags & IFF_PROMISC) && (lp->cf_cmd.i596_config[8] & 0x01)) {
 
1526                 lp->cf_cmd.i596_config[8] &= ~0x01;
 
1529         if ((dev->flags & IFF_ALLMULTI) && (lp->cf_cmd.i596_config[11] & 0x20)) {
 
1530                 lp->cf_cmd.i596_config[11] &= ~0x20;
 
1533         if (!(dev->flags & IFF_ALLMULTI) && !(lp->cf_cmd.i596_config[11] & 0x20)) {
 
1534                 lp->cf_cmd.i596_config[11] |= 0x20;
 
1538                 lp->cf_cmd.cmd.command = CmdConfigure;
 
1539                 i596_add_cmd(dev, &lp->cf_cmd.cmd);
 
1542         cnt = dev->mc_count;
 
1543         if (cnt > MAX_MC_CNT)
 
1546                 printk(KERN_ERR "%s: Only %d multicast addresses supported",
 
1550         if (dev->mc_count > 0) {
 
1551                 struct dev_mc_list *dmi;
 
1555                 if (wait_cfg(dev, &lp->mc_cmd.cmd, 1000, "multicast list change request timed out"))
 
1558                 cmd->cmd.command = CmdMulticastList;
 
1559                 cmd->mc_cnt = dev->mc_count * 6;
 
1561                 for (dmi = dev->mc_list; cnt && dmi != NULL; dmi = dmi->next, cnt--, cp += 6) {
 
1562                         memcpy(cp, dmi->dmi_addr, 6);
 
1564                                 DEB(DEB_MULTI,printk(KERN_INFO "%s: Adding address %02x:%02x:%02x:%02x:%02x:%02x\n",
 
1565                                                 dev->name, cp[0],cp[1],cp[2],cp[3],cp[4],cp[5]));
 
1567                 i596_add_cmd(dev, &cmd->cmd);
 
1572 static struct net_device *dev_82596;
 
1574 #ifdef ENABLE_APRICOT
 
1575 module_param(irq, int, 0);
 
1576 MODULE_PARM_DESC(irq, "Apricot IRQ number");
 
1579 static int debug = -1;
 
1580 module_param(debug, int, 0);
 
1581 MODULE_PARM_DESC(debug, "i82596 debug mask");
 
1583 int __init init_module(void)
 
1587         dev_82596 = i82596_probe(-1);
 
1588         if (IS_ERR(dev_82596))
 
1589                 return PTR_ERR(dev_82596);
 
1593 void __exit cleanup_module(void)
 
1595         unregister_netdev(dev_82596);
 
1597         /* XXX This assumes default cache mode to be IOMAP_FULL_CACHING,
 
1598          * XXX which may be invalid (CONFIG_060_WRITETHROUGH)
 
1601         kernel_set_cachemode((void *)(dev_82596->mem_start), 4096,
 
1602                         IOMAP_FULL_CACHING);
 
1604         free_page ((u32)(dev_82596->mem_start));
 
1605 #ifdef ENABLE_APRICOT
 
1606         /* If we don't do this, we can't re-insmod it later. */
 
1607         release_region(dev_82596->base_addr, I596_TOTAL_SIZE);
 
1609         free_netdev(dev_82596);
 
1616  *  compile-command: "gcc -D__KERNEL__ -I/usr/src/linux/net/inet -Wall -Wstrict-prototypes -O6 -m486 -c 82596.c"