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