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

lance.c (41557B)


      1/* lance.c: An AMD LANCE/PCnet ethernet driver for Linux. */
      2/*
      3	Written/copyright 1993-1998 by Donald Becker.
      4
      5	Copyright 1993 United States Government as represented by the
      6	Director, National Security Agency.
      7	This software may be used and distributed according to the terms
      8	of the GNU General Public License, incorporated herein by reference.
      9
     10	This driver is for the Allied Telesis AT1500 and HP J2405A, and should work
     11	with most other LANCE-based bus-master (NE2100/NE2500) ethercards.
     12
     13	The author may be reached as becker@scyld.com, or C/O
     14	Scyld Computing Corporation
     15	410 Severn Ave., Suite 210
     16	Annapolis MD 21403
     17
     18	Andrey V. Savochkin:
     19	- alignment problem with 1.3.* kernel and some minor changes.
     20	Thomas Bogendoerfer (tsbogend@bigbug.franken.de):
     21	- added support for Linux/Alpha, but removed most of it, because
     22        it worked only for the PCI chip.
     23      - added hook for the 32bit lance driver
     24      - added PCnetPCI II (79C970A) to chip table
     25	Paul Gortmaker (gpg109@rsphy1.anu.edu.au):
     26	- hopefully fix above so Linux/Alpha can use ISA cards too.
     27    8/20/96 Fixed 7990 autoIRQ failure and reversed unneeded alignment -djb
     28    v1.12 10/27/97 Module support -djb
     29    v1.14  2/3/98 Module support modified, made PCI support optional -djb
     30    v1.15 5/27/99 Fixed bug in the cleanup_module(). dev->priv was freed
     31                  before unregister_netdev() which caused NULL pointer
     32                  reference later in the chain (in rtnetlink_fill_ifinfo())
     33                  -- Mika Kuoppala <miku@iki.fi>
     34
     35    Forward ported v1.14 to 2.1.129, merged the PCI and misc changes from
     36    the 2.1 version of the old driver - Alan Cox
     37
     38    Get rid of check_region, check kmalloc return in lance_probe1
     39    Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 11/01/2001
     40
     41	Reworked detection, added support for Racal InterLan EtherBlaster cards
     42	Vesselin Kostadinov <vesok at yahoo dot com > - 22/4/2004
     43*/
     44
     45static const char version[] = "lance.c:v1.16 2006/11/09 dplatt@3do.com, becker@cesdis.gsfc.nasa.gov\n";
     46
     47#include <linux/module.h>
     48#include <linux/kernel.h>
     49#include <linux/string.h>
     50#include <linux/delay.h>
     51#include <linux/errno.h>
     52#include <linux/ioport.h>
     53#include <linux/slab.h>
     54#include <linux/interrupt.h>
     55#include <linux/pci.h>
     56#include <linux/init.h>
     57#include <linux/netdevice.h>
     58#include <linux/etherdevice.h>
     59#include <linux/skbuff.h>
     60#include <linux/mm.h>
     61#include <linux/bitops.h>
     62
     63#include <asm/io.h>
     64#include <asm/dma.h>
     65
     66static unsigned int lance_portlist[] __initdata = { 0x300, 0x320, 0x340, 0x360, 0};
     67static int lance_probe1(struct net_device *dev, int ioaddr, int irq, int options);
     68static int __init do_lance_probe(struct net_device *dev);
     69
     70
     71static struct card {
     72	char id_offset14;
     73	char id_offset15;
     74} cards[] = {
     75	{	//"normal"
     76		.id_offset14 = 0x57,
     77		.id_offset15 = 0x57,
     78	},
     79	{	//NI6510EB
     80		.id_offset14 = 0x52,
     81		.id_offset15 = 0x44,
     82	},
     83	{	//Racal InterLan EtherBlaster
     84		.id_offset14 = 0x52,
     85		.id_offset15 = 0x49,
     86	},
     87};
     88#define NUM_CARDS 3
     89
     90#ifdef LANCE_DEBUG
     91static int lance_debug = LANCE_DEBUG;
     92#else
     93static int lance_debug = 1;
     94#endif
     95
     96/*
     97				Theory of Operation
     98
     99I. Board Compatibility
    100
    101This device driver is designed for the AMD 79C960, the "PCnet-ISA
    102single-chip ethernet controller for ISA".  This chip is used in a wide
    103variety of boards from vendors such as Allied Telesis, HP, Kingston,
    104and Boca.  This driver is also intended to work with older AMD 7990
    105designs, such as the NE1500 and NE2100, and newer 79C961.  For convenience,
    106I use the name LANCE to refer to all of the AMD chips, even though it properly
    107refers only to the original 7990.
    108
    109II. Board-specific settings
    110
    111The driver is designed to work the boards that use the faster
    112bus-master mode, rather than in shared memory mode.	 (Only older designs
    113have on-board buffer memory needed to support the slower shared memory mode.)
    114
    115Most ISA boards have jumpered settings for the I/O base, IRQ line, and DMA
    116channel.  This driver probes the likely base addresses:
    117{0x300, 0x320, 0x340, 0x360}.
    118After the board is found it generates a DMA-timeout interrupt and uses
    119autoIRQ to find the IRQ line.  The DMA channel can be set with the low bits
    120of the otherwise-unused dev->mem_start value (aka PARAM1).  If unset it is
    121probed for by enabling each free DMA channel in turn and checking if
    122initialization succeeds.
    123
    124The HP-J2405A board is an exception: with this board it is easy to read the
    125EEPROM-set values for the base, IRQ, and DMA.  (Of course you must already
    126_know_ the base address -- that field is for writing the EEPROM.)
    127
    128III. Driver operation
    129
    130IIIa. Ring buffers
    131The LANCE uses ring buffers of Tx and Rx descriptors.  Each entry describes
    132the base and length of the data buffer, along with status bits.	 The length
    133of these buffers is set by LANCE_LOG_{RX,TX}_BUFFERS, which is log_2() of
    134the buffer length (rather than being directly the buffer length) for
    135implementation ease.  The current values are 2 (Tx) and 4 (Rx), which leads to
    136ring sizes of 4 (Tx) and 16 (Rx).  Increasing the number of ring entries
    137needlessly uses extra space and reduces the chance that an upper layer will
    138be able to reorder queued Tx packets based on priority.	 Decreasing the number
    139of entries makes it more difficult to achieve back-to-back packet transmission
    140and increases the chance that Rx ring will overflow.  (Consider the worst case
    141of receiving back-to-back minimum-sized packets.)
    142
    143The LANCE has the capability to "chain" both Rx and Tx buffers, but this driver
    144statically allocates full-sized (slightly oversized -- PKT_BUF_SZ) buffers to
    145avoid the administrative overhead. For the Rx side this avoids dynamically
    146allocating full-sized buffers "just in case", at the expense of a
    147memory-to-memory data copy for each packet received.  For most systems this
    148is a good tradeoff: the Rx buffer will always be in low memory, the copy
    149is inexpensive, and it primes the cache for later packet processing.  For Tx
    150the buffers are only used when needed as low-memory bounce buffers.
    151
    152IIIB. 16M memory limitations.
    153For the ISA bus master mode all structures used directly by the LANCE,
    154the initialization block, Rx and Tx rings, and data buffers, must be
    155accessible from the ISA bus, i.e. in the lower 16M of real memory.
    156This is a problem for current Linux kernels on >16M machines. The network
    157devices are initialized after memory initialization, and the kernel doles out
    158memory from the top of memory downward.	 The current solution is to have a
    159special network initialization routine that's called before memory
    160initialization; this will eventually be generalized for all network devices.
    161As mentioned before, low-memory "bounce-buffers" are used when needed.
    162
    163IIIC. Synchronization
    164The driver runs as two independent, single-threaded flows of control.  One
    165is the send-packet routine, which enforces single-threaded use by the
    166dev->tbusy flag.  The other thread is the interrupt handler, which is single
    167threaded by the hardware and other software.
    168
    169The send packet thread has partial control over the Tx ring and 'dev->tbusy'
    170flag.  It sets the tbusy flag whenever it's queuing a Tx packet. If the next
    171queue slot is empty, it clears the tbusy flag when finished otherwise it sets
    172the 'lp->tx_full' flag.
    173
    174The interrupt handler has exclusive control over the Rx ring and records stats
    175from the Tx ring. (The Tx-done interrupt can't be selectively turned off, so
    176we can't avoid the interrupt overhead by having the Tx routine reap the Tx
    177stats.)	 After reaping the stats, it marks the queue entry as empty by setting
    178the 'base' to zero. Iff the 'lp->tx_full' flag is set, it clears both the
    179tx_full and tbusy flags.
    180
    181*/
    182
    183/* Set the number of Tx and Rx buffers, using Log_2(# buffers).
    184   Reasonable default values are 16 Tx buffers, and 16 Rx buffers.
    185   That translates to 4 and 4 (16 == 2^^4).
    186   This is a compile-time option for efficiency.
    187   */
    188#ifndef LANCE_LOG_TX_BUFFERS
    189#define LANCE_LOG_TX_BUFFERS 4
    190#define LANCE_LOG_RX_BUFFERS 4
    191#endif
    192
    193#define TX_RING_SIZE			(1 << (LANCE_LOG_TX_BUFFERS))
    194#define TX_RING_MOD_MASK		(TX_RING_SIZE - 1)
    195#define TX_RING_LEN_BITS		((LANCE_LOG_TX_BUFFERS) << 29)
    196
    197#define RX_RING_SIZE			(1 << (LANCE_LOG_RX_BUFFERS))
    198#define RX_RING_MOD_MASK		(RX_RING_SIZE - 1)
    199#define RX_RING_LEN_BITS		((LANCE_LOG_RX_BUFFERS) << 29)
    200
    201#define PKT_BUF_SZ		1544
    202
    203/* Offsets from base I/O address. */
    204#define LANCE_DATA 0x10
    205#define LANCE_ADDR 0x12
    206#define LANCE_RESET 0x14
    207#define LANCE_BUS_IF 0x16
    208#define LANCE_TOTAL_SIZE 0x18
    209
    210#define TX_TIMEOUT	(HZ/5)
    211
    212/* The LANCE Rx and Tx ring descriptors. */
    213struct lance_rx_head {
    214	s32 base;
    215	s16 buf_length;			/* This length is 2s complement (negative)! */
    216	s16 msg_length;			/* This length is "normal". */
    217};
    218
    219struct lance_tx_head {
    220	s32 base;
    221	s16 length;				/* Length is 2s complement (negative)! */
    222	s16 misc;
    223};
    224
    225/* The LANCE initialization block, described in databook. */
    226struct lance_init_block {
    227	u16 mode;		/* Pre-set mode (reg. 15) */
    228	u8  phys_addr[6]; /* Physical ethernet address */
    229	u32 filter[2];			/* Multicast filter (unused). */
    230	/* Receive and transmit ring base, along with extra bits. */
    231	u32  rx_ring;			/* Tx and Rx ring base pointers */
    232	u32  tx_ring;
    233};
    234
    235struct lance_private {
    236	/* The Tx and Rx ring entries must be aligned on 8-byte boundaries. */
    237	struct lance_rx_head rx_ring[RX_RING_SIZE];
    238	struct lance_tx_head tx_ring[TX_RING_SIZE];
    239	struct lance_init_block	init_block;
    240	const char *name;
    241	/* The saved address of a sent-in-place packet/buffer, for skfree(). */
    242	struct sk_buff* tx_skbuff[TX_RING_SIZE];
    243	/* The addresses of receive-in-place skbuffs. */
    244	struct sk_buff* rx_skbuff[RX_RING_SIZE];
    245	unsigned long rx_buffs;		/* Address of Rx and Tx buffers. */
    246	/* Tx low-memory "bounce buffer" address. */
    247	char (*tx_bounce_buffs)[PKT_BUF_SZ];
    248	int cur_rx, cur_tx;			/* The next free ring entry */
    249	int dirty_rx, dirty_tx;		/* The ring entries to be free()ed. */
    250	int dma;
    251	unsigned char chip_version;	/* See lance_chip_type. */
    252	spinlock_t devlock;
    253};
    254
    255#define LANCE_MUST_PAD          0x00000001
    256#define LANCE_ENABLE_AUTOSELECT 0x00000002
    257#define LANCE_MUST_REINIT_RING  0x00000004
    258#define LANCE_MUST_UNRESET      0x00000008
    259#define LANCE_HAS_MISSED_FRAME  0x00000010
    260
    261/* A mapping from the chip ID number to the part number and features.
    262   These are from the datasheets -- in real life the '970 version
    263   reportedly has the same ID as the '965. */
    264static struct lance_chip_type {
    265	int id_number;
    266	const char *name;
    267	int flags;
    268} chip_table[] = {
    269	{0x0000, "LANCE 7990",				/* Ancient lance chip.  */
    270		LANCE_MUST_PAD + LANCE_MUST_UNRESET},
    271	{0x0003, "PCnet/ISA 79C960",		/* 79C960 PCnet/ISA.  */
    272		LANCE_ENABLE_AUTOSELECT + LANCE_MUST_REINIT_RING +
    273			LANCE_HAS_MISSED_FRAME},
    274	{0x2260, "PCnet/ISA+ 79C961",		/* 79C961 PCnet/ISA+, Plug-n-Play.  */
    275		LANCE_ENABLE_AUTOSELECT + LANCE_MUST_REINIT_RING +
    276			LANCE_HAS_MISSED_FRAME},
    277	{0x2420, "PCnet/PCI 79C970",		/* 79C970 or 79C974 PCnet-SCSI, PCI. */
    278		LANCE_ENABLE_AUTOSELECT + LANCE_MUST_REINIT_RING +
    279			LANCE_HAS_MISSED_FRAME},
    280	/* Bug: the PCnet/PCI actually uses the PCnet/VLB ID number, so just call
    281		it the PCnet32. */
    282	{0x2430, "PCnet32",					/* 79C965 PCnet for VL bus. */
    283		LANCE_ENABLE_AUTOSELECT + LANCE_MUST_REINIT_RING +
    284			LANCE_HAS_MISSED_FRAME},
    285        {0x2621, "PCnet/PCI-II 79C970A",        /* 79C970A PCInetPCI II. */
    286                LANCE_ENABLE_AUTOSELECT + LANCE_MUST_REINIT_RING +
    287                        LANCE_HAS_MISSED_FRAME},
    288	{0x0, 	 "PCnet (unknown)",
    289		LANCE_ENABLE_AUTOSELECT + LANCE_MUST_REINIT_RING +
    290			LANCE_HAS_MISSED_FRAME},
    291};
    292
    293enum {OLD_LANCE = 0, PCNET_ISA=1, PCNET_ISAP=2, PCNET_PCI=3, PCNET_VLB=4, PCNET_PCI_II=5, LANCE_UNKNOWN=6};
    294
    295
    296/* Non-zero if lance_probe1() needs to allocate low-memory bounce buffers.
    297   Assume yes until we know the memory size. */
    298static unsigned char lance_need_isa_bounce_buffers = 1;
    299
    300static int lance_open(struct net_device *dev);
    301static void lance_init_ring(struct net_device *dev, gfp_t mode);
    302static netdev_tx_t lance_start_xmit(struct sk_buff *skb,
    303				    struct net_device *dev);
    304static int lance_rx(struct net_device *dev);
    305static irqreturn_t lance_interrupt(int irq, void *dev_id);
    306static int lance_close(struct net_device *dev);
    307static struct net_device_stats *lance_get_stats(struct net_device *dev);
    308static void set_multicast_list(struct net_device *dev);
    309static void lance_tx_timeout (struct net_device *dev, unsigned int txqueue);
    310
    311
    312
    313#ifdef MODULE
    314#define MAX_CARDS		8	/* Max number of interfaces (cards) per module */
    315
    316static struct net_device *dev_lance[MAX_CARDS];
    317static int io[MAX_CARDS];
    318static int dma[MAX_CARDS];
    319static int irq[MAX_CARDS];
    320
    321module_param_hw_array(io, int, ioport, NULL, 0);
    322module_param_hw_array(dma, int, dma, NULL, 0);
    323module_param_hw_array(irq, int, irq, NULL, 0);
    324module_param(lance_debug, int, 0);
    325MODULE_PARM_DESC(io, "LANCE/PCnet I/O base address(es),required");
    326MODULE_PARM_DESC(dma, "LANCE/PCnet ISA DMA channel (ignored for some devices)");
    327MODULE_PARM_DESC(irq, "LANCE/PCnet IRQ number (ignored for some devices)");
    328MODULE_PARM_DESC(lance_debug, "LANCE/PCnet debug level (0-7)");
    329
    330static int __init lance_init_module(void)
    331{
    332	struct net_device *dev;
    333	int this_dev, found = 0;
    334
    335	for (this_dev = 0; this_dev < MAX_CARDS; this_dev++) {
    336		if (io[this_dev] == 0)  {
    337			if (this_dev != 0) /* only complain once */
    338				break;
    339			printk(KERN_NOTICE "lance.c: Module autoprobing not allowed. Append \"io=0xNNN\" value(s).\n");
    340			return -EPERM;
    341		}
    342		dev = alloc_etherdev(0);
    343		if (!dev)
    344			break;
    345		dev->irq = irq[this_dev];
    346		dev->base_addr = io[this_dev];
    347		dev->dma = dma[this_dev];
    348		if (do_lance_probe(dev) == 0) {
    349			dev_lance[found++] = dev;
    350			continue;
    351		}
    352		free_netdev(dev);
    353		break;
    354	}
    355	if (found != 0)
    356		return 0;
    357	return -ENXIO;
    358}
    359module_init(lance_init_module);
    360
    361static void cleanup_card(struct net_device *dev)
    362{
    363	struct lance_private *lp = dev->ml_priv;
    364	if (dev->dma != 4)
    365		free_dma(dev->dma);
    366	release_region(dev->base_addr, LANCE_TOTAL_SIZE);
    367	kfree(lp->tx_bounce_buffs);
    368	kfree((void*)lp->rx_buffs);
    369	kfree(lp);
    370}
    371
    372static void __exit lance_cleanup_module(void)
    373{
    374	int this_dev;
    375
    376	for (this_dev = 0; this_dev < MAX_CARDS; this_dev++) {
    377		struct net_device *dev = dev_lance[this_dev];
    378		if (dev) {
    379			unregister_netdev(dev);
    380			cleanup_card(dev);
    381			free_netdev(dev);
    382		}
    383	}
    384}
    385module_exit(lance_cleanup_module);
    386#endif /* MODULE */
    387MODULE_LICENSE("GPL");
    388
    389
    390/* Starting in v2.1.*, the LANCE/PCnet probe is now similar to the other
    391   board probes now that kmalloc() can allocate ISA DMA-able regions.
    392   This also allows the LANCE driver to be used as a module.
    393   */
    394static int __init do_lance_probe(struct net_device *dev)
    395{
    396	unsigned int *port;
    397	int result;
    398
    399	if (high_memory <= phys_to_virt(16*1024*1024))
    400		lance_need_isa_bounce_buffers = 0;
    401
    402	for (port = lance_portlist; *port; port++) {
    403		int ioaddr = *port;
    404		struct resource *r = request_region(ioaddr, LANCE_TOTAL_SIZE,
    405							"lance-probe");
    406
    407		if (r) {
    408			/* Detect the card with minimal I/O reads */
    409			char offset14 = inb(ioaddr + 14);
    410			int card;
    411			for (card = 0; card < NUM_CARDS; ++card)
    412				if (cards[card].id_offset14 == offset14)
    413					break;
    414			if (card < NUM_CARDS) {/*yes, the first byte matches*/
    415				char offset15 = inb(ioaddr + 15);
    416				for (card = 0; card < NUM_CARDS; ++card)
    417					if ((cards[card].id_offset14 == offset14) &&
    418						(cards[card].id_offset15 == offset15))
    419						break;
    420			}
    421			if (card < NUM_CARDS) { /*Signature OK*/
    422				result = lance_probe1(dev, ioaddr, 0, 0);
    423				if (!result) {
    424					struct lance_private *lp = dev->ml_priv;
    425					int ver = lp->chip_version;
    426
    427					r->name = chip_table[ver].name;
    428					return 0;
    429				}
    430			}
    431			release_region(ioaddr, LANCE_TOTAL_SIZE);
    432		}
    433	}
    434	return -ENODEV;
    435}
    436
    437#ifndef MODULE
    438struct net_device * __init lance_probe(int unit)
    439{
    440	struct net_device *dev = alloc_etherdev(0);
    441	int err;
    442
    443	if (!dev)
    444		return ERR_PTR(-ENODEV);
    445
    446	sprintf(dev->name, "eth%d", unit);
    447	netdev_boot_setup_check(dev);
    448
    449	err = do_lance_probe(dev);
    450	if (err)
    451		goto out;
    452	return dev;
    453out:
    454	free_netdev(dev);
    455	return ERR_PTR(err);
    456}
    457#endif
    458
    459static const struct net_device_ops lance_netdev_ops = {
    460	.ndo_open 		= lance_open,
    461	.ndo_start_xmit		= lance_start_xmit,
    462	.ndo_stop		= lance_close,
    463	.ndo_get_stats		= lance_get_stats,
    464	.ndo_set_rx_mode	= set_multicast_list,
    465	.ndo_tx_timeout		= lance_tx_timeout,
    466	.ndo_set_mac_address 	= eth_mac_addr,
    467	.ndo_validate_addr	= eth_validate_addr,
    468};
    469
    470static int __init lance_probe1(struct net_device *dev, int ioaddr, int irq, int options)
    471{
    472	struct lance_private *lp;
    473	unsigned long dma_channels;	/* Mark spuriously-busy DMA channels */
    474	int i, reset_val, lance_version;
    475	const char *chipname;
    476	/* Flags for specific chips or boards. */
    477	unsigned char hpJ2405A = 0;	/* HP ISA adaptor */
    478	int hp_builtin = 0;		/* HP on-board ethernet. */
    479	static int did_version;		/* Already printed version info. */
    480	unsigned long flags;
    481	int err = -ENOMEM;
    482	void __iomem *bios;
    483	u8 addr[ETH_ALEN];
    484
    485	/* First we look for special cases.
    486	   Check for HP's on-board ethernet by looking for 'HP' in the BIOS.
    487	   There are two HP versions, check the BIOS for the configuration port.
    488	   This method provided by L. Julliard, Laurent_Julliard@grenoble.hp.com.
    489	   */
    490	bios = ioremap(0xf00f0, 0x14);
    491	if (!bios)
    492		return -ENOMEM;
    493	if (readw(bios + 0x12) == 0x5048)  {
    494		static const short ioaddr_table[] = { 0x300, 0x320, 0x340, 0x360};
    495		int hp_port = (readl(bios + 1) & 1)  ? 0x499 : 0x99;
    496		/* We can have boards other than the built-in!  Verify this is on-board. */
    497		if ((inb(hp_port) & 0xc0) == 0x80 &&
    498		    ioaddr_table[inb(hp_port) & 3] == ioaddr)
    499			hp_builtin = hp_port;
    500	}
    501	iounmap(bios);
    502	/* We also recognize the HP Vectra on-board here, but check below. */
    503	hpJ2405A = (inb(ioaddr) == 0x08 && inb(ioaddr+1) == 0x00 &&
    504		    inb(ioaddr+2) == 0x09);
    505
    506	/* Reset the LANCE.	 */
    507	reset_val = inw(ioaddr+LANCE_RESET); /* Reset the LANCE */
    508
    509	/* The Un-Reset needed is only needed for the real NE2100, and will
    510	   confuse the HP board. */
    511	if (!hpJ2405A)
    512		outw(reset_val, ioaddr+LANCE_RESET);
    513
    514	outw(0x0000, ioaddr+LANCE_ADDR); /* Switch to window 0 */
    515	if (inw(ioaddr+LANCE_DATA) != 0x0004)
    516		return -ENODEV;
    517
    518	/* Get the version of the chip. */
    519	outw(88, ioaddr+LANCE_ADDR);
    520	if (inw(ioaddr+LANCE_ADDR) != 88) {
    521		lance_version = 0;
    522	} else {			/* Good, it's a newer chip. */
    523		int chip_version = inw(ioaddr+LANCE_DATA);
    524		outw(89, ioaddr+LANCE_ADDR);
    525		chip_version |= inw(ioaddr+LANCE_DATA) << 16;
    526		if (lance_debug > 2)
    527			printk("  LANCE chip version is %#x.\n", chip_version);
    528		if ((chip_version & 0xfff) != 0x003)
    529			return -ENODEV;
    530		chip_version = (chip_version >> 12) & 0xffff;
    531		for (lance_version = 1; chip_table[lance_version].id_number; lance_version++) {
    532			if (chip_table[lance_version].id_number == chip_version)
    533				break;
    534		}
    535	}
    536
    537	/* We can't allocate private data from alloc_etherdev() because it must
    538	   a ISA DMA-able region. */
    539	chipname = chip_table[lance_version].name;
    540	printk("%s: %s at %#3x, ", dev->name, chipname, ioaddr);
    541
    542	/* There is a 16 byte station address PROM at the base address.
    543	   The first six bytes are the station address. */
    544	for (i = 0; i < 6; i++)
    545		addr[i] = inb(ioaddr + i);
    546	eth_hw_addr_set(dev, addr);
    547	printk("%pM", dev->dev_addr);
    548
    549	dev->base_addr = ioaddr;
    550	/* Make certain the data structures used by the LANCE are aligned and DMAble. */
    551
    552	lp = kzalloc(sizeof(*lp), GFP_DMA | GFP_KERNEL);
    553	if (!lp)
    554		return -ENOMEM;
    555	if (lance_debug > 6) printk(" (#0x%05lx)", (unsigned long)lp);
    556	dev->ml_priv = lp;
    557	lp->name = chipname;
    558	lp->rx_buffs = (unsigned long)kmalloc_array(RX_RING_SIZE, PKT_BUF_SZ,
    559						    GFP_DMA | GFP_KERNEL);
    560	if (!lp->rx_buffs)
    561		goto out_lp;
    562	if (lance_need_isa_bounce_buffers) {
    563		lp->tx_bounce_buffs = kmalloc_array(TX_RING_SIZE, PKT_BUF_SZ,
    564						    GFP_DMA | GFP_KERNEL);
    565		if (!lp->tx_bounce_buffs)
    566			goto out_rx;
    567	} else
    568		lp->tx_bounce_buffs = NULL;
    569
    570	lp->chip_version = lance_version;
    571	spin_lock_init(&lp->devlock);
    572
    573	lp->init_block.mode = 0x0003;		/* Disable Rx and Tx. */
    574	for (i = 0; i < 6; i++)
    575		lp->init_block.phys_addr[i] = dev->dev_addr[i];
    576	lp->init_block.filter[0] = 0x00000000;
    577	lp->init_block.filter[1] = 0x00000000;
    578	lp->init_block.rx_ring = ((u32)isa_virt_to_bus(lp->rx_ring) & 0xffffff) | RX_RING_LEN_BITS;
    579	lp->init_block.tx_ring = ((u32)isa_virt_to_bus(lp->tx_ring) & 0xffffff) | TX_RING_LEN_BITS;
    580
    581	outw(0x0001, ioaddr+LANCE_ADDR);
    582	inw(ioaddr+LANCE_ADDR);
    583	outw((short) (u32) isa_virt_to_bus(&lp->init_block), ioaddr+LANCE_DATA);
    584	outw(0x0002, ioaddr+LANCE_ADDR);
    585	inw(ioaddr+LANCE_ADDR);
    586	outw(((u32)isa_virt_to_bus(&lp->init_block)) >> 16, ioaddr+LANCE_DATA);
    587	outw(0x0000, ioaddr+LANCE_ADDR);
    588	inw(ioaddr+LANCE_ADDR);
    589
    590	if (irq) {					/* Set iff PCI card. */
    591		dev->dma = 4;			/* Native bus-master, no DMA channel needed. */
    592		dev->irq = irq;
    593	} else if (hp_builtin) {
    594		static const char dma_tbl[4] = {3, 5, 6, 0};
    595		static const char irq_tbl[4] = {3, 4, 5, 9};
    596		unsigned char port_val = inb(hp_builtin);
    597		dev->dma = dma_tbl[(port_val >> 4) & 3];
    598		dev->irq = irq_tbl[(port_val >> 2) & 3];
    599		printk(" HP Vectra IRQ %d DMA %d.\n", dev->irq, dev->dma);
    600	} else if (hpJ2405A) {
    601		static const char dma_tbl[4] = {3, 5, 6, 7};
    602		static const char irq_tbl[8] = {3, 4, 5, 9, 10, 11, 12, 15};
    603		short reset_val = inw(ioaddr+LANCE_RESET);
    604		dev->dma = dma_tbl[(reset_val >> 2) & 3];
    605		dev->irq = irq_tbl[(reset_val >> 4) & 7];
    606		printk(" HP J2405A IRQ %d DMA %d.\n", dev->irq, dev->dma);
    607	} else if (lance_version == PCNET_ISAP) {		/* The plug-n-play version. */
    608		short bus_info;
    609		outw(8, ioaddr+LANCE_ADDR);
    610		bus_info = inw(ioaddr+LANCE_BUS_IF);
    611		dev->dma = bus_info & 0x07;
    612		dev->irq = (bus_info >> 4) & 0x0F;
    613	} else {
    614		/* The DMA channel may be passed in PARAM1. */
    615		if (dev->mem_start & 0x07)
    616			dev->dma = dev->mem_start & 0x07;
    617	}
    618
    619	if (dev->dma == 0) {
    620		/* Read the DMA channel status register, so that we can avoid
    621		   stuck DMA channels in the DMA detection below. */
    622		dma_channels = ((inb(DMA1_STAT_REG) >> 4) & 0x0f) |
    623			(inb(DMA2_STAT_REG) & 0xf0);
    624	}
    625	err = -ENODEV;
    626	if (dev->irq >= 2)
    627		printk(" assigned IRQ %d", dev->irq);
    628	else if (lance_version != 0)  {	/* 7990 boards need DMA detection first. */
    629		unsigned long irq_mask;
    630
    631		/* To auto-IRQ we enable the initialization-done and DMA error
    632		   interrupts. For ISA boards we get a DMA error, but VLB and PCI
    633		   boards will work. */
    634		irq_mask = probe_irq_on();
    635
    636		/* Trigger an initialization just for the interrupt. */
    637		outw(0x0041, ioaddr+LANCE_DATA);
    638
    639		mdelay(20);
    640		dev->irq = probe_irq_off(irq_mask);
    641		if (dev->irq)
    642			printk(", probed IRQ %d", dev->irq);
    643		else {
    644			printk(", failed to detect IRQ line.\n");
    645			goto out_tx;
    646		}
    647
    648		/* Check for the initialization done bit, 0x0100, which means
    649		   that we don't need a DMA channel. */
    650		if (inw(ioaddr+LANCE_DATA) & 0x0100)
    651			dev->dma = 4;
    652	}
    653
    654	if (dev->dma == 4) {
    655		printk(", no DMA needed.\n");
    656	} else if (dev->dma) {
    657		if (request_dma(dev->dma, chipname)) {
    658			printk("DMA %d allocation failed.\n", dev->dma);
    659			goto out_tx;
    660		} else
    661			printk(", assigned DMA %d.\n", dev->dma);
    662	} else {			/* OK, we have to auto-DMA. */
    663		for (i = 0; i < 4; i++) {
    664			static const char dmas[] = { 5, 6, 7, 3 };
    665			int dma = dmas[i];
    666			int boguscnt;
    667
    668			/* Don't enable a permanently busy DMA channel, or the machine
    669			   will hang. */
    670			if (test_bit(dma, &dma_channels))
    671				continue;
    672			outw(0x7f04, ioaddr+LANCE_DATA); /* Clear the memory error bits. */
    673			if (request_dma(dma, chipname))
    674				continue;
    675
    676			flags=claim_dma_lock();
    677			set_dma_mode(dma, DMA_MODE_CASCADE);
    678			enable_dma(dma);
    679			release_dma_lock(flags);
    680
    681			/* Trigger an initialization. */
    682			outw(0x0001, ioaddr+LANCE_DATA);
    683			for (boguscnt = 100; boguscnt > 0; --boguscnt)
    684				if (inw(ioaddr+LANCE_DATA) & 0x0900)
    685					break;
    686			if (inw(ioaddr+LANCE_DATA) & 0x0100) {
    687				dev->dma = dma;
    688				printk(", DMA %d.\n", dev->dma);
    689				break;
    690			} else {
    691				flags=claim_dma_lock();
    692				disable_dma(dma);
    693				release_dma_lock(flags);
    694				free_dma(dma);
    695			}
    696		}
    697		if (i == 4) {			/* Failure: bail. */
    698			printk("DMA detection failed.\n");
    699			goto out_tx;
    700		}
    701	}
    702
    703	if (lance_version == 0 && dev->irq == 0) {
    704		/* We may auto-IRQ now that we have a DMA channel. */
    705		/* Trigger an initialization just for the interrupt. */
    706		unsigned long irq_mask;
    707
    708		irq_mask = probe_irq_on();
    709		outw(0x0041, ioaddr+LANCE_DATA);
    710
    711		mdelay(40);
    712		dev->irq = probe_irq_off(irq_mask);
    713		if (dev->irq == 0) {
    714			printk("  Failed to detect the 7990 IRQ line.\n");
    715			goto out_dma;
    716		}
    717		printk("  Auto-IRQ detected IRQ%d.\n", dev->irq);
    718	}
    719
    720	if (chip_table[lp->chip_version].flags & LANCE_ENABLE_AUTOSELECT) {
    721		/* Turn on auto-select of media (10baseT or BNC) so that the user
    722		   can watch the LEDs even if the board isn't opened. */
    723		outw(0x0002, ioaddr+LANCE_ADDR);
    724		/* Don't touch 10base2 power bit. */
    725		outw(inw(ioaddr+LANCE_BUS_IF) | 0x0002, ioaddr+LANCE_BUS_IF);
    726	}
    727
    728	if (lance_debug > 0  &&  did_version++ == 0)
    729		printk(version);
    730
    731	/* The LANCE-specific entries in the device structure. */
    732	dev->netdev_ops = &lance_netdev_ops;
    733	dev->watchdog_timeo = TX_TIMEOUT;
    734
    735	err = register_netdev(dev);
    736	if (err)
    737		goto out_dma;
    738	return 0;
    739out_dma:
    740	if (dev->dma != 4)
    741		free_dma(dev->dma);
    742out_tx:
    743	kfree(lp->tx_bounce_buffs);
    744out_rx:
    745	kfree((void*)lp->rx_buffs);
    746out_lp:
    747	kfree(lp);
    748	return err;
    749}
    750
    751
    752static int
    753lance_open(struct net_device *dev)
    754{
    755	struct lance_private *lp = dev->ml_priv;
    756	int ioaddr = dev->base_addr;
    757	int i;
    758
    759	if (dev->irq == 0 ||
    760		request_irq(dev->irq, lance_interrupt, 0, dev->name, dev)) {
    761		return -EAGAIN;
    762	}
    763
    764	/* We used to allocate DMA here, but that was silly.
    765	   DMA lines can't be shared!  We now permanently allocate them. */
    766
    767	/* Reset the LANCE */
    768	inw(ioaddr+LANCE_RESET);
    769
    770	/* The DMA controller is used as a no-operation slave, "cascade mode". */
    771	if (dev->dma != 4) {
    772		unsigned long flags=claim_dma_lock();
    773		enable_dma(dev->dma);
    774		set_dma_mode(dev->dma, DMA_MODE_CASCADE);
    775		release_dma_lock(flags);
    776	}
    777
    778	/* Un-Reset the LANCE, needed only for the NE2100. */
    779	if (chip_table[lp->chip_version].flags & LANCE_MUST_UNRESET)
    780		outw(0, ioaddr+LANCE_RESET);
    781
    782	if (chip_table[lp->chip_version].flags & LANCE_ENABLE_AUTOSELECT) {
    783		/* This is 79C960-specific: Turn on auto-select of media (AUI, BNC). */
    784		outw(0x0002, ioaddr+LANCE_ADDR);
    785		/* Only touch autoselect bit. */
    786		outw(inw(ioaddr+LANCE_BUS_IF) | 0x0002, ioaddr+LANCE_BUS_IF);
    787	}
    788
    789	if (lance_debug > 1)
    790		printk("%s: lance_open() irq %d dma %d tx/rx rings %#x/%#x init %#x.\n",
    791			   dev->name, dev->irq, dev->dma,
    792		           (u32) isa_virt_to_bus(lp->tx_ring),
    793		           (u32) isa_virt_to_bus(lp->rx_ring),
    794			   (u32) isa_virt_to_bus(&lp->init_block));
    795
    796	lance_init_ring(dev, GFP_KERNEL);
    797	/* Re-initialize the LANCE, and start it when done. */
    798	outw(0x0001, ioaddr+LANCE_ADDR);
    799	outw((short) (u32) isa_virt_to_bus(&lp->init_block), ioaddr+LANCE_DATA);
    800	outw(0x0002, ioaddr+LANCE_ADDR);
    801	outw(((u32)isa_virt_to_bus(&lp->init_block)) >> 16, ioaddr+LANCE_DATA);
    802
    803	outw(0x0004, ioaddr+LANCE_ADDR);
    804	outw(0x0915, ioaddr+LANCE_DATA);
    805
    806	outw(0x0000, ioaddr+LANCE_ADDR);
    807	outw(0x0001, ioaddr+LANCE_DATA);
    808
    809	netif_start_queue (dev);
    810
    811	i = 0;
    812	while (i++ < 100)
    813		if (inw(ioaddr+LANCE_DATA) & 0x0100)
    814			break;
    815	/*
    816	 * We used to clear the InitDone bit, 0x0100, here but Mark Stockton
    817	 * reports that doing so triggers a bug in the '974.
    818	 */
    819	outw(0x0042, ioaddr+LANCE_DATA);
    820
    821	if (lance_debug > 2)
    822		printk("%s: LANCE open after %d ticks, init block %#x csr0 %4.4x.\n",
    823			   dev->name, i, (u32) isa_virt_to_bus(&lp->init_block), inw(ioaddr+LANCE_DATA));
    824
    825	return 0;					/* Always succeed */
    826}
    827
    828/* The LANCE has been halted for one reason or another (busmaster memory
    829   arbitration error, Tx FIFO underflow, driver stopped it to reconfigure,
    830   etc.).  Modern LANCE variants always reload their ring-buffer
    831   configuration when restarted, so we must reinitialize our ring
    832   context before restarting.  As part of this reinitialization,
    833   find all packets still on the Tx ring and pretend that they had been
    834   sent (in effect, drop the packets on the floor) - the higher-level
    835   protocols will time out and retransmit.  It'd be better to shuffle
    836   these skbs to a temp list and then actually re-Tx them after
    837   restarting the chip, but I'm too lazy to do so right now.  dplatt@3do.com
    838*/
    839
    840static void
    841lance_purge_ring(struct net_device *dev)
    842{
    843	struct lance_private *lp = dev->ml_priv;
    844	int i;
    845
    846	/* Free all the skbuffs in the Rx and Tx queues. */
    847	for (i = 0; i < RX_RING_SIZE; i++) {
    848		struct sk_buff *skb = lp->rx_skbuff[i];
    849		lp->rx_skbuff[i] = NULL;
    850		lp->rx_ring[i].base = 0;		/* Not owned by LANCE chip. */
    851		if (skb)
    852			dev_kfree_skb_any(skb);
    853	}
    854	for (i = 0; i < TX_RING_SIZE; i++) {
    855		if (lp->tx_skbuff[i]) {
    856			dev_kfree_skb_any(lp->tx_skbuff[i]);
    857			lp->tx_skbuff[i] = NULL;
    858		}
    859	}
    860}
    861
    862
    863/* Initialize the LANCE Rx and Tx rings. */
    864static void
    865lance_init_ring(struct net_device *dev, gfp_t gfp)
    866{
    867	struct lance_private *lp = dev->ml_priv;
    868	int i;
    869
    870	lp->cur_rx = lp->cur_tx = 0;
    871	lp->dirty_rx = lp->dirty_tx = 0;
    872
    873	for (i = 0; i < RX_RING_SIZE; i++) {
    874		struct sk_buff *skb;
    875		void *rx_buff;
    876
    877		skb = alloc_skb(PKT_BUF_SZ, GFP_DMA | gfp);
    878		lp->rx_skbuff[i] = skb;
    879		if (skb)
    880			rx_buff = skb->data;
    881		else
    882			rx_buff = kmalloc(PKT_BUF_SZ, GFP_DMA | gfp);
    883		if (rx_buff == NULL)
    884			lp->rx_ring[i].base = 0;
    885		else
    886			lp->rx_ring[i].base = (u32)isa_virt_to_bus(rx_buff) | 0x80000000;
    887		lp->rx_ring[i].buf_length = -PKT_BUF_SZ;
    888	}
    889	/* The Tx buffer address is filled in as needed, but we do need to clear
    890	   the upper ownership bit. */
    891	for (i = 0; i < TX_RING_SIZE; i++) {
    892		lp->tx_skbuff[i] = NULL;
    893		lp->tx_ring[i].base = 0;
    894	}
    895
    896	lp->init_block.mode = 0x0000;
    897	for (i = 0; i < 6; i++)
    898		lp->init_block.phys_addr[i] = dev->dev_addr[i];
    899	lp->init_block.filter[0] = 0x00000000;
    900	lp->init_block.filter[1] = 0x00000000;
    901	lp->init_block.rx_ring = ((u32)isa_virt_to_bus(lp->rx_ring) & 0xffffff) | RX_RING_LEN_BITS;
    902	lp->init_block.tx_ring = ((u32)isa_virt_to_bus(lp->tx_ring) & 0xffffff) | TX_RING_LEN_BITS;
    903}
    904
    905static void
    906lance_restart(struct net_device *dev, unsigned int csr0_bits, int must_reinit)
    907{
    908	struct lance_private *lp = dev->ml_priv;
    909
    910	if (must_reinit ||
    911		(chip_table[lp->chip_version].flags & LANCE_MUST_REINIT_RING)) {
    912		lance_purge_ring(dev);
    913		lance_init_ring(dev, GFP_ATOMIC);
    914	}
    915	outw(0x0000,    dev->base_addr + LANCE_ADDR);
    916	outw(csr0_bits, dev->base_addr + LANCE_DATA);
    917}
    918
    919
    920static void lance_tx_timeout (struct net_device *dev, unsigned int txqueue)
    921{
    922	struct lance_private *lp = (struct lance_private *) dev->ml_priv;
    923	int ioaddr = dev->base_addr;
    924
    925	outw (0, ioaddr + LANCE_ADDR);
    926	printk ("%s: transmit timed out, status %4.4x, resetting.\n",
    927		dev->name, inw (ioaddr + LANCE_DATA));
    928	outw (0x0004, ioaddr + LANCE_DATA);
    929	dev->stats.tx_errors++;
    930#ifndef final_version
    931	if (lance_debug > 3) {
    932		int i;
    933		printk (" Ring data dump: dirty_tx %d cur_tx %d%s cur_rx %d.",
    934		  lp->dirty_tx, lp->cur_tx, netif_queue_stopped(dev) ? " (full)" : "",
    935			lp->cur_rx);
    936		for (i = 0; i < RX_RING_SIZE; i++)
    937			printk ("%s %08x %04x %04x", i & 0x3 ? "" : "\n ",
    938			 lp->rx_ring[i].base, -lp->rx_ring[i].buf_length,
    939				lp->rx_ring[i].msg_length);
    940		for (i = 0; i < TX_RING_SIZE; i++)
    941			printk ("%s %08x %04x %04x", i & 0x3 ? "" : "\n ",
    942			     lp->tx_ring[i].base, -lp->tx_ring[i].length,
    943				lp->tx_ring[i].misc);
    944		printk ("\n");
    945	}
    946#endif
    947	lance_restart (dev, 0x0043, 1);
    948
    949	netif_trans_update(dev); /* prevent tx timeout */
    950	netif_wake_queue (dev);
    951}
    952
    953
    954static netdev_tx_t lance_start_xmit(struct sk_buff *skb,
    955				    struct net_device *dev)
    956{
    957	struct lance_private *lp = dev->ml_priv;
    958	int ioaddr = dev->base_addr;
    959	int entry;
    960	unsigned long flags;
    961
    962	spin_lock_irqsave(&lp->devlock, flags);
    963
    964	if (lance_debug > 3) {
    965		outw(0x0000, ioaddr+LANCE_ADDR);
    966		printk("%s: lance_start_xmit() called, csr0 %4.4x.\n", dev->name,
    967			   inw(ioaddr+LANCE_DATA));
    968		outw(0x0000, ioaddr+LANCE_DATA);
    969	}
    970
    971	/* Fill in a Tx ring entry */
    972
    973	/* Mask to ring buffer boundary. */
    974	entry = lp->cur_tx & TX_RING_MOD_MASK;
    975
    976	/* Caution: the write order is important here, set the base address
    977	   with the "ownership" bits last. */
    978
    979	/* The old LANCE chips doesn't automatically pad buffers to min. size. */
    980	if (chip_table[lp->chip_version].flags & LANCE_MUST_PAD) {
    981		if (skb->len < ETH_ZLEN) {
    982			if (skb_padto(skb, ETH_ZLEN))
    983				goto out;
    984			lp->tx_ring[entry].length = -ETH_ZLEN;
    985		}
    986		else
    987			lp->tx_ring[entry].length = -skb->len;
    988	} else
    989		lp->tx_ring[entry].length = -skb->len;
    990
    991	lp->tx_ring[entry].misc = 0x0000;
    992
    993	dev->stats.tx_bytes += skb->len;
    994
    995	/* If any part of this buffer is >16M we must copy it to a low-memory
    996	   buffer. */
    997	if ((u32)isa_virt_to_bus(skb->data) + skb->len > 0x01000000) {
    998		if (lance_debug > 5)
    999			printk("%s: bouncing a high-memory packet (%#x).\n",
   1000				   dev->name, (u32)isa_virt_to_bus(skb->data));
   1001		skb_copy_from_linear_data(skb, &lp->tx_bounce_buffs[entry], skb->len);
   1002		lp->tx_ring[entry].base =
   1003			((u32)isa_virt_to_bus((lp->tx_bounce_buffs + entry)) & 0xffffff) | 0x83000000;
   1004		dev_kfree_skb(skb);
   1005	} else {
   1006		lp->tx_skbuff[entry] = skb;
   1007		lp->tx_ring[entry].base = ((u32)isa_virt_to_bus(skb->data) & 0xffffff) | 0x83000000;
   1008	}
   1009	lp->cur_tx++;
   1010
   1011	/* Trigger an immediate send poll. */
   1012	outw(0x0000, ioaddr+LANCE_ADDR);
   1013	outw(0x0048, ioaddr+LANCE_DATA);
   1014
   1015	if ((lp->cur_tx - lp->dirty_tx) >= TX_RING_SIZE)
   1016		netif_stop_queue(dev);
   1017
   1018out:
   1019	spin_unlock_irqrestore(&lp->devlock, flags);
   1020	return NETDEV_TX_OK;
   1021}
   1022
   1023/* The LANCE interrupt handler. */
   1024static irqreturn_t lance_interrupt(int irq, void *dev_id)
   1025{
   1026	struct net_device *dev = dev_id;
   1027	struct lance_private *lp;
   1028	int csr0, ioaddr, boguscnt=10;
   1029	int must_restart;
   1030
   1031	ioaddr = dev->base_addr;
   1032	lp = dev->ml_priv;
   1033
   1034	spin_lock (&lp->devlock);
   1035
   1036	outw(0x00, dev->base_addr + LANCE_ADDR);
   1037	while ((csr0 = inw(dev->base_addr + LANCE_DATA)) & 0x8600 &&
   1038	       --boguscnt >= 0) {
   1039		/* Acknowledge all of the current interrupt sources ASAP. */
   1040		outw(csr0 & ~0x004f, dev->base_addr + LANCE_DATA);
   1041
   1042		must_restart = 0;
   1043
   1044		if (lance_debug > 5)
   1045			printk("%s: interrupt  csr0=%#2.2x new csr=%#2.2x.\n",
   1046				   dev->name, csr0, inw(dev->base_addr + LANCE_DATA));
   1047
   1048		if (csr0 & 0x0400)			/* Rx interrupt */
   1049			lance_rx(dev);
   1050
   1051		if (csr0 & 0x0200) {		/* Tx-done interrupt */
   1052			int dirty_tx = lp->dirty_tx;
   1053
   1054			while (dirty_tx < lp->cur_tx) {
   1055				int entry = dirty_tx & TX_RING_MOD_MASK;
   1056				int status = lp->tx_ring[entry].base;
   1057
   1058				if (status < 0)
   1059					break;			/* It still hasn't been Txed */
   1060
   1061				lp->tx_ring[entry].base = 0;
   1062
   1063				if (status & 0x40000000) {
   1064					/* There was an major error, log it. */
   1065					int err_status = lp->tx_ring[entry].misc;
   1066					dev->stats.tx_errors++;
   1067					if (err_status & 0x0400)
   1068						dev->stats.tx_aborted_errors++;
   1069					if (err_status & 0x0800)
   1070						dev->stats.tx_carrier_errors++;
   1071					if (err_status & 0x1000)
   1072						dev->stats.tx_window_errors++;
   1073					if (err_status & 0x4000) {
   1074						/* Ackk!  On FIFO errors the Tx unit is turned off! */
   1075						dev->stats.tx_fifo_errors++;
   1076						/* Remove this verbosity later! */
   1077						printk("%s: Tx FIFO error! Status %4.4x.\n",
   1078							   dev->name, csr0);
   1079						/* Restart the chip. */
   1080						must_restart = 1;
   1081					}
   1082				} else {
   1083					if (status & 0x18000000)
   1084						dev->stats.collisions++;
   1085					dev->stats.tx_packets++;
   1086				}
   1087
   1088				/* We must free the original skb if it's not a data-only copy
   1089				   in the bounce buffer. */
   1090				if (lp->tx_skbuff[entry]) {
   1091					dev_consume_skb_irq(lp->tx_skbuff[entry]);
   1092					lp->tx_skbuff[entry] = NULL;
   1093				}
   1094				dirty_tx++;
   1095			}
   1096
   1097#ifndef final_version
   1098			if (lp->cur_tx - dirty_tx >= TX_RING_SIZE) {
   1099				printk("out-of-sync dirty pointer, %d vs. %d, full=%s.\n",
   1100					   dirty_tx, lp->cur_tx,
   1101					   netif_queue_stopped(dev) ? "yes" : "no");
   1102				dirty_tx += TX_RING_SIZE;
   1103			}
   1104#endif
   1105
   1106			/* if the ring is no longer full, accept more packets */
   1107			if (netif_queue_stopped(dev) &&
   1108			    dirty_tx > lp->cur_tx - TX_RING_SIZE + 2)
   1109				netif_wake_queue (dev);
   1110
   1111			lp->dirty_tx = dirty_tx;
   1112		}
   1113
   1114		/* Log misc errors. */
   1115		if (csr0 & 0x4000)
   1116			dev->stats.tx_errors++; /* Tx babble. */
   1117		if (csr0 & 0x1000)
   1118			dev->stats.rx_errors++; /* Missed a Rx frame. */
   1119		if (csr0 & 0x0800) {
   1120			printk("%s: Bus master arbitration failure, status %4.4x.\n",
   1121				   dev->name, csr0);
   1122			/* Restart the chip. */
   1123			must_restart = 1;
   1124		}
   1125
   1126		if (must_restart) {
   1127			/* stop the chip to clear the error condition, then restart */
   1128			outw(0x0000, dev->base_addr + LANCE_ADDR);
   1129			outw(0x0004, dev->base_addr + LANCE_DATA);
   1130			lance_restart(dev, 0x0002, 0);
   1131		}
   1132	}
   1133
   1134	/* Clear any other interrupt, and set interrupt enable. */
   1135	outw(0x0000, dev->base_addr + LANCE_ADDR);
   1136	outw(0x7940, dev->base_addr + LANCE_DATA);
   1137
   1138	if (lance_debug > 4)
   1139		printk("%s: exiting interrupt, csr%d=%#4.4x.\n",
   1140			   dev->name, inw(ioaddr + LANCE_ADDR),
   1141			   inw(dev->base_addr + LANCE_DATA));
   1142
   1143	spin_unlock (&lp->devlock);
   1144	return IRQ_HANDLED;
   1145}
   1146
   1147static int
   1148lance_rx(struct net_device *dev)
   1149{
   1150	struct lance_private *lp = dev->ml_priv;
   1151	int entry = lp->cur_rx & RX_RING_MOD_MASK;
   1152	int i;
   1153
   1154	/* If we own the next entry, it's a new packet. Send it up. */
   1155	while (lp->rx_ring[entry].base >= 0) {
   1156		int status = lp->rx_ring[entry].base >> 24;
   1157
   1158		if (status != 0x03) {			/* There was an error. */
   1159			/* There is a tricky error noted by John Murphy,
   1160			   <murf@perftech.com> to Russ Nelson: Even with full-sized
   1161			   buffers it's possible for a jabber packet to use two
   1162			   buffers, with only the last correctly noting the error. */
   1163			if (status & 0x01)	/* Only count a general error at the */
   1164				dev->stats.rx_errors++; /* end of a packet.*/
   1165			if (status & 0x20)
   1166				dev->stats.rx_frame_errors++;
   1167			if (status & 0x10)
   1168				dev->stats.rx_over_errors++;
   1169			if (status & 0x08)
   1170				dev->stats.rx_crc_errors++;
   1171			if (status & 0x04)
   1172				dev->stats.rx_fifo_errors++;
   1173			lp->rx_ring[entry].base &= 0x03ffffff;
   1174		}
   1175		else
   1176		{
   1177			/* Malloc up new buffer, compatible with net3. */
   1178			short pkt_len = (lp->rx_ring[entry].msg_length & 0xfff)-4;
   1179			struct sk_buff *skb;
   1180
   1181			if(pkt_len<60)
   1182			{
   1183				printk("%s: Runt packet!\n",dev->name);
   1184				dev->stats.rx_errors++;
   1185			}
   1186			else
   1187			{
   1188				skb = dev_alloc_skb(pkt_len+2);
   1189				if (skb == NULL)
   1190				{
   1191					printk("%s: Memory squeeze, deferring packet.\n", dev->name);
   1192					for (i=0; i < RX_RING_SIZE; i++)
   1193						if (lp->rx_ring[(entry+i) & RX_RING_MOD_MASK].base < 0)
   1194							break;
   1195
   1196					if (i > RX_RING_SIZE -2)
   1197					{
   1198						dev->stats.rx_dropped++;
   1199						lp->rx_ring[entry].base |= 0x80000000;
   1200						lp->cur_rx++;
   1201					}
   1202					break;
   1203				}
   1204				skb_reserve(skb,2);	/* 16 byte align */
   1205				skb_put(skb,pkt_len);	/* Make room */
   1206				skb_copy_to_linear_data(skb,
   1207					(unsigned char *)isa_bus_to_virt((lp->rx_ring[entry].base & 0x00ffffff)),
   1208					pkt_len);
   1209				skb->protocol=eth_type_trans(skb,dev);
   1210				netif_rx(skb);
   1211				dev->stats.rx_packets++;
   1212				dev->stats.rx_bytes += pkt_len;
   1213			}
   1214		}
   1215		/* The docs say that the buffer length isn't touched, but Andrew Boyd
   1216		   of QNX reports that some revs of the 79C965 clear it. */
   1217		lp->rx_ring[entry].buf_length = -PKT_BUF_SZ;
   1218		lp->rx_ring[entry].base |= 0x80000000;
   1219		entry = (++lp->cur_rx) & RX_RING_MOD_MASK;
   1220	}
   1221
   1222	/* We should check that at least two ring entries are free.	 If not,
   1223	   we should free one and mark stats->rx_dropped++. */
   1224
   1225	return 0;
   1226}
   1227
   1228static int
   1229lance_close(struct net_device *dev)
   1230{
   1231	int ioaddr = dev->base_addr;
   1232	struct lance_private *lp = dev->ml_priv;
   1233
   1234	netif_stop_queue (dev);
   1235
   1236	if (chip_table[lp->chip_version].flags & LANCE_HAS_MISSED_FRAME) {
   1237		outw(112, ioaddr+LANCE_ADDR);
   1238		dev->stats.rx_missed_errors = inw(ioaddr+LANCE_DATA);
   1239	}
   1240	outw(0, ioaddr+LANCE_ADDR);
   1241
   1242	if (lance_debug > 1)
   1243		printk("%s: Shutting down ethercard, status was %2.2x.\n",
   1244			   dev->name, inw(ioaddr+LANCE_DATA));
   1245
   1246	/* We stop the LANCE here -- it occasionally polls
   1247	   memory if we don't. */
   1248	outw(0x0004, ioaddr+LANCE_DATA);
   1249
   1250	if (dev->dma != 4)
   1251	{
   1252		unsigned long flags=claim_dma_lock();
   1253		disable_dma(dev->dma);
   1254		release_dma_lock(flags);
   1255	}
   1256	free_irq(dev->irq, dev);
   1257
   1258	lance_purge_ring(dev);
   1259
   1260	return 0;
   1261}
   1262
   1263static struct net_device_stats *lance_get_stats(struct net_device *dev)
   1264{
   1265	struct lance_private *lp = dev->ml_priv;
   1266
   1267	if (chip_table[lp->chip_version].flags & LANCE_HAS_MISSED_FRAME) {
   1268		short ioaddr = dev->base_addr;
   1269		short saved_addr;
   1270		unsigned long flags;
   1271
   1272		spin_lock_irqsave(&lp->devlock, flags);
   1273		saved_addr = inw(ioaddr+LANCE_ADDR);
   1274		outw(112, ioaddr+LANCE_ADDR);
   1275		dev->stats.rx_missed_errors = inw(ioaddr+LANCE_DATA);
   1276		outw(saved_addr, ioaddr+LANCE_ADDR);
   1277		spin_unlock_irqrestore(&lp->devlock, flags);
   1278	}
   1279
   1280	return &dev->stats;
   1281}
   1282
   1283/* Set or clear the multicast filter for this adaptor.
   1284 */
   1285
   1286static void set_multicast_list(struct net_device *dev)
   1287{
   1288	short ioaddr = dev->base_addr;
   1289
   1290	outw(0, ioaddr+LANCE_ADDR);
   1291	outw(0x0004, ioaddr+LANCE_DATA); /* Temporarily stop the lance.	 */
   1292
   1293	if (dev->flags&IFF_PROMISC) {
   1294		outw(15, ioaddr+LANCE_ADDR);
   1295		outw(0x8000, ioaddr+LANCE_DATA); /* Set promiscuous mode */
   1296	} else {
   1297		short multicast_table[4];
   1298		int i;
   1299		int num_addrs=netdev_mc_count(dev);
   1300		if(dev->flags&IFF_ALLMULTI)
   1301			num_addrs=1;
   1302		/* FIXIT: We don't use the multicast table, but rely on upper-layer filtering. */
   1303		memset(multicast_table, (num_addrs == 0) ? 0 : -1, sizeof(multicast_table));
   1304		for (i = 0; i < 4; i++) {
   1305			outw(8 + i, ioaddr+LANCE_ADDR);
   1306			outw(multicast_table[i], ioaddr+LANCE_DATA);
   1307		}
   1308		outw(15, ioaddr+LANCE_ADDR);
   1309		outw(0x0000, ioaddr+LANCE_DATA); /* Unset promiscuous mode */
   1310	}
   1311
   1312	lance_restart(dev, 0x0142, 0); /*  Resume normal operation */
   1313
   1314}
   1315