cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

lib82596.c (39294B)


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