|
|
1.1 root 1: /* eepro.c: Intel EtherExpress Pro/10 device driver for Linux. */
2: /*
3: Written 1994, 1995 by Bao C. Ha.
4:
5: Copyright (C) 1994, 1995 by Bao C. Ha.
6:
7: This software may be used and distributed
8: according to the terms of the GNU Public License,
9: incorporated herein by reference.
10:
11: The author may be reached at [email protected]
12: or 418 Hastings Place, Martinez, GA 30907.
13:
14: Things remaining to do:
15: Better record keeping of errors.
16: Eliminate transmit interrupt to reduce overhead.
17: Implement "concurrent processing". I won't be doing it!
18: Allow changes to the partition of the transmit and receive
19: buffers, currently the ratio is 3:1 of receive to transmit
20: buffer ratio.
21:
22: Bugs:
23:
24: If you have a problem of not detecting the 82595 during a
25: reboot (warm reset), disable the FLASH memory should fix it.
26: This is a compatibility hardware problem.
27:
28: Versions:
29:
30: 0.07a Fix a stat report which counts every packet as a
31: heart-beat failure. (BCH, 6/3/95)
32:
33: 0.07 Modified to support all other 82595-based lan cards.
34: The IRQ vector of the EtherExpress Pro will be set
35: according to the value saved in the EEPROM. For other
36: cards, I will do autoirq_request() to grab the next
37: available interrupt vector. (BCH, 3/17/95)
38:
39: 0.06a,b Interim released. Minor changes in the comments and
40: print out format. (BCH, 3/9/95 and 3/14/95)
41:
42: 0.06 First stable release that I am comfortable with. (BCH,
43: 3/2/95)
44:
45: 0.05 Complete testing of multicast. (BCH, 2/23/95)
46:
47: 0.04 Adding multicast support. (BCH, 2/14/95)
48:
49: 0.03 First widely alpha release for public testing.
50: (BCH, 2/14/95)
51:
52: */
53:
54: static const char *version =
55: "eepro.c: v0.07a 6/5/95 Bao C. Ha ([email protected])\n";
56:
57: #include <linux/module.h>
58:
59: /*
60: Sources:
61:
62: This driver wouldn't have been written without the availability
63: of the Crynwr's Lan595 driver source code. It helps me to
64: familiarize with the 82595 chipset while waiting for the Intel
65: documentation. I also learned how to detect the 82595 using
66: the packet driver's technique.
67:
68: This driver is written by cutting and pasting the skeleton.c driver
69: provided by Donald Becker. I also borrowed the EEPROM routine from
70: Donald Becker's 82586 driver.
71:
72: Datasheet for the Intel 82595. It provides just enough info that
73: the casual reader might think that it documents the i82595.
74:
75: The User Manual for the 82595. It provides a lot of the missing
76: information.
77:
78: */
79:
80: #include <linux/kernel.h>
81: #include <linux/sched.h>
82: #include <linux/types.h>
83: #include <linux/fcntl.h>
84: #include <linux/interrupt.h>
85: #include <linux/ptrace.h>
86: #include <linux/ioport.h>
87: #include <linux/in.h>
88: #include <linux/malloc.h>
89: #include <linux/string.h>
90: #include <asm/system.h>
91: #include <asm/bitops.h>
92: #include <asm/io.h>
93: #include <asm/dma.h>
94: #include <linux/errno.h>
95:
96: #include <linux/netdevice.h>
97: #include <linux/etherdevice.h>
98: #include <linux/skbuff.h>
99:
100:
101: /* First, a few definitions that the brave might change. */
102: /* A zero-terminated list of I/O addresses to be probed. */
103: static unsigned int eepro_portlist[] =
104: { 0x200, 0x240, 0x280, 0x2C0, 0x300, 0x320, 0x340, 0x360, 0};
105:
106: /* use 0 for production, 1 for verification, >2 for debug */
107: #ifndef NET_DEBUG
108: #define NET_DEBUG 2
109: #endif
110: static unsigned int net_debug = NET_DEBUG;
111:
112: /* The number of low I/O ports used by the ethercard. */
113: #define EEPRO_IO_EXTENT 16
114:
115: /* Information that need to be kept for each board. */
116: struct eepro_local {
117: struct enet_statistics stats;
118: unsigned rx_start;
119: unsigned tx_start; /* start of the transmit chain */
120: int tx_last; /* pointer to last packet in the transmit chain */
121: unsigned tx_end; /* end of the transmit chain (plus 1) */
122: int eepro; /* a flag, TRUE=1 for the EtherExpress Pro/10,
123: FALSE = 0 for other 82595-based lan cards. */
124: };
125:
126: /* The station (ethernet) address prefix, used for IDing the board. */
127: #define SA_ADDR0 0x00
128: #define SA_ADDR1 0xaa
129: #define SA_ADDR2 0x00
130:
131: /* Index to functions, as function prototypes. */
132:
133: extern int eepro_probe(struct device *dev);
134:
135: static int eepro_probe1(struct device *dev, short ioaddr);
136: static int eepro_open(struct device *dev);
137: static int eepro_send_packet(struct sk_buff *skb, struct device *dev);
138: static void eepro_interrupt(int irq, struct pt_regs *regs);
139: static void eepro_rx(struct device *dev);
140: static void eepro_transmit_interrupt(struct device *dev);
141: static int eepro_close(struct device *dev);
142: static struct enet_statistics *eepro_get_stats(struct device *dev);
143: static void set_multicast_list(struct device *dev);
144:
145: static int read_eeprom(int ioaddr, int location);
146: static void hardware_send_packet(struct device *dev, void *buf, short length);
147: static int eepro_grab_irq(struct device *dev);
148:
149: /*
150: Details of the i82595.
151:
152: You will need either the datasheet or the user manual to understand what
153: is going on here. The 82595 is very different from the 82586, 82593.
154:
155: The receive algorithm in eepro_rx() is just an implementation of the
156: RCV ring structure that the Intel 82595 imposes at the hardware level.
157: The receive buffer is set at 24K, and the transmit buffer is 8K. I
158: am assuming that the total buffer memory is 32K, which is true for the
159: Intel EtherExpress Pro/10. If it is less than that on a generic card,
160: the driver will be broken.
161:
162: The transmit algorithm in the hardware_send_packet() is similar to the
163: one in the eepro_rx(). The transmit buffer is a ring linked list.
164: I just queue the next available packet to the end of the list. In my
165: system, the 82595 is so fast that the list seems to always contain a
166: single packet. In other systems with faster computers and more congested
167: network traffics, the ring linked list should improve performance by
168: allowing up to 8K worth of packets to be queued.
169:
170: */
171: #define RAM_SIZE 0x8000
172: #define RCV_HEADER 8
173: #define RCV_RAM 0x6000 /* 24KB for RCV buffer */
174: #define RCV_LOWER_LIMIT 0x00 /* 0x0000 */
175: #define RCV_UPPER_LIMIT ((RCV_RAM - 2) >> 8) /* 0x5ffe */
176: #define XMT_RAM (RAM_SIZE - RCV_RAM) /* 8KB for XMT buffer */
177: #define XMT_LOWER_LIMIT (RCV_RAM >> 8) /* 0x6000 */
178: #define XMT_UPPER_LIMIT ((RAM_SIZE - 2) >> 8) /* 0x7ffe */
179: #define XMT_HEADER 8
180:
181: #define RCV_DONE 0x0008
182: #define RX_OK 0x2000
183: #define RX_ERROR 0x0d81
184:
185: #define TX_DONE_BIT 0x0080
186: #define CHAIN_BIT 0x8000
187: #define XMT_STATUS 0x02
188: #define XMT_CHAIN 0x04
189: #define XMT_COUNT 0x06
190:
191: #define BANK0_SELECT 0x00
192: #define BANK1_SELECT 0x40
193: #define BANK2_SELECT 0x80
194:
195: /* Bank 0 registers */
196: #define COMMAND_REG 0x00 /* Register 0 */
197: #define MC_SETUP 0x03
198: #define XMT_CMD 0x04
199: #define DIAGNOSE_CMD 0x07
200: #define RCV_ENABLE_CMD 0x08
201: #define RCV_DISABLE_CMD 0x0a
202: #define STOP_RCV_CMD 0x0b
203: #define RESET_CMD 0x0e
204: #define POWER_DOWN_CMD 0x18
205: #define RESUME_XMT_CMD 0x1c
206: #define SEL_RESET_CMD 0x1e
207: #define STATUS_REG 0x01 /* Register 1 */
208: #define RX_INT 0x02
209: #define TX_INT 0x04
210: #define EXEC_STATUS 0x30
211: #define ID_REG 0x02 /* Register 2 */
212: #define R_ROBIN_BITS 0xc0 /* round robin counter */
213: #define ID_REG_MASK 0x2c
214: #define ID_REG_SIG 0x24
215: #define AUTO_ENABLE 0x10
216: #define INT_MASK_REG 0x03 /* Register 3 */
217: #define RX_STOP_MASK 0x01
218: #define RX_MASK 0x02
219: #define TX_MASK 0x04
220: #define EXEC_MASK 0x08
221: #define ALL_MASK 0x0f
222: #define RCV_BAR 0x04 /* The following are word (16-bit) registers */
223: #define RCV_STOP 0x06
224: #define XMT_BAR 0x0a
225: #define HOST_ADDRESS_REG 0x0c
226: #define IO_PORT 0x0e
227:
228: /* Bank 1 registers */
229: #define REG1 0x01
230: #define WORD_WIDTH 0x02
231: #define INT_ENABLE 0x80
232: #define INT_NO_REG 0x02
233: #define RCV_LOWER_LIMIT_REG 0x08
234: #define RCV_UPPER_LIMIT_REG 0x09
235: #define XMT_LOWER_LIMIT_REG 0x0a
236: #define XMT_UPPER_LIMIT_REG 0x0b
237:
238: /* Bank 2 registers */
239: #define XMT_Chain_Int 0x20 /* Interrupt at the end of the transmit chain */
240: #define XMT_Chain_ErrStop 0x40 /* Interrupt at the end of the chain even if there are errors */
241: #define RCV_Discard_BadFrame 0x80 /* Throw bad frames away, and continue to receive others */
242: #define REG2 0x02
243: #define PRMSC_Mode 0x01
244: #define Multi_IA 0x20
245: #define REG3 0x03
246: #define TPE_BIT 0x04
247: #define BNC_BIT 0x20
248:
249: #define I_ADD_REG0 0x04
250: #define I_ADD_REG1 0x05
251: #define I_ADD_REG2 0x06
252: #define I_ADD_REG3 0x07
253: #define I_ADD_REG4 0x08
254: #define I_ADD_REG5 0x09
255:
256: #define EEPROM_REG 0x0a
257: #define EESK 0x01
258: #define EECS 0x02
259: #define EEDI 0x04
260: #define EEDO 0x08
261:
262:
263: /* Check for a network adaptor of this type, and return '0' iff one exists.
264: If dev->base_addr == 0, probe all likely locations.
265: If dev->base_addr == 1, always return failure.
266: If dev->base_addr == 2, allocate space for the device and return success
267: (detachable devices only).
268: */
269: #ifdef HAVE_DEVLIST
270: /* Support for a alternate probe manager, which will eliminate the
271: boilerplate below. */
272: struct netdev_entry netcard_drv =
273: {"eepro", eepro_probe1, EEPRO_IO_EXTENT, eepro_portlist};
274: #else
275: int
276: eepro_probe(struct device *dev)
277: {
278: int i;
279: int base_addr = dev ? dev->base_addr : 0;
280:
281: if (base_addr > 0x1ff) /* Check a single specified location. */
282: return eepro_probe1(dev, base_addr);
283: else if (base_addr != 0) /* Don't probe at all. */
284: return ENXIO;
285:
286: for (i = 0; eepro_portlist[i]; i++) {
287: int ioaddr = eepro_portlist[i];
288: if (check_region(ioaddr, EEPRO_IO_EXTENT))
289: continue;
290: if (eepro_probe1(dev, ioaddr) == 0)
291: return 0;
292: }
293:
294: return ENODEV;
295: }
296: #endif
297:
298: /* This is the real probe routine. Linux has a history of friendly device
299: probes on the ISA bus. A good device probes avoids doing writes, and
300: verifies that the correct device exists and functions. */
301:
302: int eepro_probe1(struct device *dev, short ioaddr)
303: {
304: unsigned short station_addr[6], id, counter;
305: int i;
306: int eepro; /* a flag, TRUE=1 for the EtherExpress Pro/10,
307: FALSE = 0 for other 82595-based lan cards. */
308: const char *ifmap[] = {"AUI", "10Base2", "10BaseT"};
309: enum iftype { AUI=0, BNC=1, TPE=2 };
310:
311: /* Now, we are going to check for the signature of the
312: ID_REG (register 2 of bank 0) */
313:
314: if (((id=inb(ioaddr + ID_REG)) & ID_REG_MASK) == ID_REG_SIG) {
315:
316: /* We seem to have the 82595 signature, let's
317: play with its counter (last 2 bits of
318: register 2 of bank 0) to be sure. */
319:
320: counter = (id & R_ROBIN_BITS);
321: if (((id=inb(ioaddr+ID_REG)) & R_ROBIN_BITS) ==
322: (counter + 0x40)) {
323:
324: /* Yes, the 82595 has been found */
325:
326: /* Now, get the ethernet hardware address from
327: the EEPROM */
328:
329: station_addr[0] = read_eeprom(ioaddr, 2);
330: station_addr[1] = read_eeprom(ioaddr, 3);
331: station_addr[2] = read_eeprom(ioaddr, 4);
332:
333: /* Check the station address for the manufacturer's code */
334:
335: if (station_addr[2] != 0x00aa || (station_addr[1] & 0xff00) != 0x0000) {
336: eepro = 0;
337: printk("%s: Intel 82595-based lan card at %#x,",
338: dev->name, ioaddr);
339: }
340: else {
341: eepro = 1;
342: printk("%s: Intel EtherExpress Pro/10 at %#x,",
343: dev->name, ioaddr);
344: }
345:
346: /* Fill in the 'dev' fields. */
347: dev->base_addr = ioaddr;
348:
349: for (i=0; i < 6; i++) {
350: dev->dev_addr[i] = ((unsigned char *) station_addr)[5-i];
351: printk("%c%02x", i ? ':' : ' ', dev->dev_addr[i]);
352: }
353:
354: outb(BANK2_SELECT, ioaddr); /* be CAREFUL, BANK 2 now */
355: id = inb(ioaddr + REG3);
356: if (id & TPE_BIT)
357: dev->if_port = TPE;
358: else dev->if_port = BNC;
359:
360: if (dev->irq < 2 && eepro) {
361: i = read_eeprom(ioaddr, 1);
362: switch (i & 0x07) {
363: case 0: dev->irq = 9; break;
364: case 1: dev->irq = 3; break;
365: case 2: dev->irq = 5; break;
366: case 3: dev->irq = 10; break;
367: case 4: dev->irq = 11; break;
368: default: /* should never get here !!!!! */
369: printk(" illegal interrupt vector stored in EEPROM.\n");
370: return ENODEV;
371: }
372: }
373: else if (dev->irq == 2)
374: dev->irq = 9;
375:
376: if (dev->irq > 2) {
377: printk(", IRQ %d, %s.\n", dev->irq,
378: ifmap[dev->if_port]);
379: if (request_irq(dev->irq, &eepro_interrupt, 0, "eepro")) {
380: printk("%s: unable to get IRQ %d.\n", dev->name, dev->irq);
381: return -EAGAIN;
382: }
383: }
384: else printk(", %s.\n", ifmap[dev->if_port]);
385:
386: if ((dev->mem_start & 0xf) > 0)
387: net_debug = dev->mem_start & 7;
388:
389: if (net_debug > 3) {
390: i = read_eeprom(ioaddr, 5);
391: if (i & 0x2000) /* bit 13 of EEPROM word 5 */
392: printk("%s: Concurrent Processing is enabled but not used!\n",
393: dev->name);
394: }
395:
396: if (net_debug)
397: printk(version);
398:
399: /* Grab the region so we can find another board if autoIRQ fails. */
400: request_region(ioaddr, EEPRO_IO_EXTENT, "eepro");
401:
402: /* Initialize the device structure */
403: dev->priv = kmalloc(sizeof(struct eepro_local), GFP_KERNEL);
404: if (dev->priv == NULL)
405: return -ENOMEM;
406: memset(dev->priv, 0, sizeof(struct eepro_local));
407:
408: dev->open = eepro_open;
409: dev->stop = eepro_close;
410: dev->hard_start_xmit = eepro_send_packet;
411: dev->get_stats = eepro_get_stats;
412: dev->set_multicast_list = &set_multicast_list;
413:
414: /* Fill in the fields of the device structure with
415: ethernet generic values */
416:
417: ether_setup(dev);
418:
419: outb(RESET_CMD, ioaddr); /* RESET the 82595 */
420:
421: return 0;
422: }
423: else return ENODEV;
424: }
425: else if (net_debug > 3)
426: printk ("EtherExpress Pro probed failed!\n");
427: return ENODEV;
428: }
429:
430: /* Open/initialize the board. This is called (in the current kernel)
431: sometime after booting when the 'ifconfig' program is run.
432:
433: This routine should set everything up anew at each open, even
434: registers that "should" only need to be set once at boot, so that
435: there is non-reboot way to recover if something goes wrong.
436: */
437:
438: static char irqrmap[] = {-1,-1,0,1,-1,2,-1,-1,-1,0,3,4,-1,-1,-1,-1};
439: static int eepro_grab_irq(struct device *dev)
440: {
441: int irqlist[] = { 5, 9, 10, 11, 4, 3, 0};
442: int *irqp = irqlist, temp_reg, ioaddr = dev->base_addr;
443:
444: outb(BANK1_SELECT, ioaddr); /* be CAREFUL, BANK 1 now */
445:
446: /* Enable the interrupt line. */
447: temp_reg = inb(ioaddr + REG1);
448: outb(temp_reg | INT_ENABLE, ioaddr + REG1);
449:
450: outb(BANK0_SELECT, ioaddr); /* be CAREFUL, BANK 0 now */
451:
452: /* clear all interrupts */
453: outb(ALL_MASK, ioaddr + STATUS_REG);
454: /* Let EXEC event to interrupt */
455: outb(ALL_MASK & ~(EXEC_MASK), ioaddr + INT_MASK_REG);
456:
457: do {
458: outb(BANK1_SELECT, ioaddr); /* be CAREFUL, BANK 1 now */
459:
460: temp_reg = inb(ioaddr + INT_NO_REG);
461: outb((temp_reg & 0xf8) | irqrmap[*irqp], ioaddr + INT_NO_REG);
462:
463: outb(BANK0_SELECT, ioaddr); /* Switch back to Bank 0 */
464:
465: if (request_irq (*irqp, NULL, 0, "bogus") != EBUSY) {
466: /* Twinkle the interrupt, and check if it's seen */
467: autoirq_setup(0);
468:
469: outb(DIAGNOSE_CMD, ioaddr); /* RESET the 82595 */
470:
471: if (*irqp == autoirq_report(2) && /* It's a good IRQ line */
472: (request_irq(dev->irq = *irqp, &eepro_interrupt, 0, "eepro") == 0))
473: break;
474:
475: /* clear all interrupts */
476: outb(ALL_MASK, ioaddr + STATUS_REG);
477: }
478: } while (*++irqp);
479:
480: outb(BANK1_SELECT, ioaddr); /* Switch back to Bank 1 */
481:
482: /* Disable the physical interrupt line. */
483: temp_reg = inb(ioaddr + REG1);
484: outb(temp_reg & 0x7f, ioaddr + REG1);
485:
486: outb(BANK0_SELECT, ioaddr); /* Switch back to Bank 0 */
487:
488: /* Mask all the interrupts. */
489: outb(ALL_MASK, ioaddr + INT_MASK_REG);
490:
491: /* clear all interrupts */
492: outb(ALL_MASK, ioaddr + STATUS_REG);
493:
494: return dev->irq;
495: }
496:
497: static int
498: eepro_open(struct device *dev)
499: {
500: unsigned short temp_reg;
501: int i, ioaddr = dev->base_addr;
502: struct eepro_local *lp = (struct eepro_local *)dev->priv;
503:
504: if (net_debug > 3)
505: printk("eepro: entering eepro_open routine.\n");
506:
507: if (dev->dev_addr[0] == SA_ADDR0 &&
508: dev->dev_addr[1] == SA_ADDR1 &&
509: dev->dev_addr[2] == SA_ADDR2)
510: lp->eepro = 1; /* Yes, an Intel EtherExpress Pro/10 */
511: else lp->eepro = 0; /* No, it is a generic 82585 lan card */
512:
513: /* Get the interrupt vector for the 82595 */
514: if (dev->irq < 2 && eepro_grab_irq(dev) == 0) {
515: printk("%s: unable to get IRQ %d.\n", dev->name, dev->irq);
516: return -EAGAIN;
517: }
518:
519: if (irq2dev_map[dev->irq] != 0
520: || (irq2dev_map[dev->irq] = dev) == 0)
521: return -EAGAIN;
522:
523: /* Initialize the 82595. */
524:
525: outb(BANK2_SELECT, ioaddr); /* be CAREFUL, BANK 2 now */
526: temp_reg = inb(ioaddr + EEPROM_REG);
527: if (temp_reg & 0x10) /* Check the TurnOff Enable bit */
528: outb(temp_reg & 0xef, ioaddr + EEPROM_REG);
529: for (i=0; i < 6; i++)
530: outb(dev->dev_addr[i] , ioaddr + I_ADD_REG0 + i);
531:
532: temp_reg = inb(ioaddr + REG1); /* Setup Transmit Chaining */
533: outb(temp_reg | XMT_Chain_Int | XMT_Chain_ErrStop /* and discard bad RCV frames */
534: | RCV_Discard_BadFrame, ioaddr + REG1);
535:
536: temp_reg = inb(ioaddr + REG2); /* Match broadcast */
537: outb(temp_reg | 0x14, ioaddr + REG2);
538:
539: temp_reg = inb(ioaddr + REG3);
540: outb(temp_reg & 0x3f, ioaddr + REG3); /* clear test mode */
541:
542: /* Set the receiving mode */
543: outb(BANK1_SELECT, ioaddr); /* be CAREFUL, BANK 1 now */
544:
545: temp_reg = inb(ioaddr + INT_NO_REG);
546: outb((temp_reg & 0xf8) | irqrmap[dev->irq], ioaddr + INT_NO_REG);
547:
548: /* Initialize the RCV and XMT upper and lower limits */
549: outb(RCV_LOWER_LIMIT, ioaddr + RCV_LOWER_LIMIT_REG);
550: outb(RCV_UPPER_LIMIT, ioaddr + RCV_UPPER_LIMIT_REG);
551: outb(XMT_LOWER_LIMIT, ioaddr + XMT_LOWER_LIMIT_REG);
552: outb(XMT_UPPER_LIMIT, ioaddr + XMT_UPPER_LIMIT_REG);
553:
554: /* Enable the interrupt line. */
555: temp_reg = inb(ioaddr + REG1);
556: outb(temp_reg | INT_ENABLE, ioaddr + REG1);
557:
558: outb(BANK0_SELECT, ioaddr); /* Switch back to Bank 0 */
559:
560: /* Let RX and TX events to interrupt */
561: outb(ALL_MASK & ~(RX_MASK | TX_MASK), ioaddr + INT_MASK_REG);
562: /* clear all interrupts */
563: outb(ALL_MASK, ioaddr + STATUS_REG);
564:
565: /* Initialize RCV */
566: outw(RCV_LOWER_LIMIT << 8, ioaddr + RCV_BAR);
567: lp->rx_start = (RCV_LOWER_LIMIT << 8) ;
568: outw((RCV_UPPER_LIMIT << 8) | 0xfe, ioaddr + RCV_STOP);
569:
570: /* Initialize XMT */
571: outw(XMT_LOWER_LIMIT << 8, ioaddr + XMT_BAR);
572:
573: outb(SEL_RESET_CMD, ioaddr);
574: /* We are supposed to wait for 2 us after a SEL_RESET */
575: SLOW_DOWN_IO;
576: SLOW_DOWN_IO;
577:
578: lp->tx_start = lp->tx_end = XMT_LOWER_LIMIT << 8; /* or = RCV_RAM */
579: lp->tx_last = 0;
580:
581: dev->tbusy = 0;
582: dev->interrupt = 0;
583: dev->start = 1;
584:
585: if (net_debug > 3)
586: printk("eepro: exiting eepro_open routine.\n");
587:
588: outb(RCV_ENABLE_CMD, ioaddr);
589:
590: MOD_INC_USE_COUNT;
591: return 0;
592: }
593:
594: static int
595: eepro_send_packet(struct sk_buff *skb, struct device *dev)
596: {
597: struct eepro_local *lp = (struct eepro_local *)dev->priv;
598: int ioaddr = dev->base_addr;
599:
600: if (net_debug > 5)
601: printk("eepro: entering eepro_send_packet routine.\n");
602:
603: if (dev->tbusy) {
604: /* If we get here, some higher level has decided we are broken.
605: There should really be a "kick me" function call instead. */
606: int tickssofar = jiffies - dev->trans_start;
607: if (tickssofar < 5)
608: return 1;
609: if (net_debug > 1)
610: printk("%s: transmit timed out, %s?\n", dev->name,
611: "network cable problem");
612: lp->stats.tx_errors++;
613: /* Try to restart the adaptor. */
614: outb(SEL_RESET_CMD, ioaddr);
615: /* We are supposed to wait for 2 us after a SEL_RESET */
616: SLOW_DOWN_IO;
617: SLOW_DOWN_IO;
618:
619: /* Do I also need to flush the transmit buffers here? YES? */
620: lp->tx_start = lp->tx_end = RCV_RAM;
621: lp->tx_last = 0;
622:
623: dev->tbusy=0;
624: dev->trans_start = jiffies;
625:
626: outb(RCV_ENABLE_CMD, ioaddr);
627:
628: }
629:
630: /* If some higher layer thinks we've missed an tx-done interrupt
631: we are passed NULL. Caution: dev_tint() handles the cli()/sti()
632: itself. */
633: if (skb == NULL) {
634: dev_tint(dev);
635: return 0;
636: }
637:
638: /* Block a timer-based transmit from overlapping. */
639: if (set_bit(0, (void*)&dev->tbusy) != 0)
640: printk("%s: Transmitter access conflict.\n", dev->name);
641: else {
642: short length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
643: unsigned char *buf = skb->data;
644:
645: hardware_send_packet(dev, buf, length);
646: dev->trans_start = jiffies;
647: }
648:
649: dev_kfree_skb (skb, FREE_WRITE);
650:
651: /* You might need to clean up and record Tx statistics here. */
652: /* lp->stats.tx_aborted_errors++; */
653:
654: if (net_debug > 5)
655: printk("eepro: exiting eepro_send_packet routine.\n");
656:
657: return 0;
658: }
659:
660:
661: /* The typical workload of the driver:
662: Handle the network interface interrupts. */
663: static void
664: eepro_interrupt(int irq, struct pt_regs * regs)
665: {
666: struct device *dev = (struct device *)(irq2dev_map[irq]);
667: int ioaddr, status, boguscount = 0;
668:
669: if (net_debug > 5)
670: printk("eepro: entering eepro_interrupt routine.\n");
671:
672: if (dev == NULL) {
673: printk ("eepro_interrupt(): irq %d for unknown device.\n", irq);
674: return;
675: }
676: dev->interrupt = 1;
677:
678: ioaddr = dev->base_addr;
679:
680: do {
681: status = inb(ioaddr + STATUS_REG);
682:
683: if (status & RX_INT) {
684: if (net_debug > 4)
685: printk("eepro: packet received interrupt.\n");
686:
687: /* Acknowledge the RX_INT */
688: outb(RX_INT, ioaddr + STATUS_REG);
689:
690: /* Get the received packets */
691: eepro_rx(dev);
692: }
693: else if (status & TX_INT) {
694: if (net_debug > 4)
695: printk("eepro: packet transmit interrupt.\n");
696:
697: /* Acknowledge the TX_INT */
698: outb(TX_INT, ioaddr + STATUS_REG);
699:
700: /* Process the status of transmitted packets */
701: eepro_transmit_interrupt(dev);
702: dev->tbusy = 0;
703: mark_bh(NET_BH);
704: }
705: } while ((++boguscount < 10) && (status & 0x06));
706:
707: dev->interrupt = 0;
708: if (net_debug > 5)
709: printk("eepro: exiting eepro_interrupt routine.\n");
710:
711: return;
712: }
713:
714: static int
715: eepro_close(struct device *dev)
716: {
717: struct eepro_local *lp = (struct eepro_local *)dev->priv;
718: int ioaddr = dev->base_addr;
719: short temp_reg;
720:
721: dev->tbusy = 1;
722: dev->start = 0;
723:
724: outb(BANK1_SELECT, ioaddr); /* Switch back to Bank 1 */
725:
726: /* Disable the physical interrupt line. */
727: temp_reg = inb(ioaddr + REG1);
728: outb(temp_reg & 0x7f, ioaddr + REG1);
729:
730: outb(BANK0_SELECT, ioaddr); /* Switch back to Bank 0 */
731:
732: /* Flush the Tx and disable Rx. */
733: outb(STOP_RCV_CMD, ioaddr);
734: lp->tx_start = lp->tx_end = RCV_RAM ;
735: lp->tx_last = 0;
736:
737: /* Mask all the interrupts. */
738: outb(ALL_MASK, ioaddr + INT_MASK_REG);
739:
740: /* clear all interrupts */
741: outb(ALL_MASK, ioaddr + STATUS_REG);
742:
743: /* Reset the 82595 */
744: outb(RESET_CMD, ioaddr);
745:
746: /* release the interrupt */
747: free_irq(dev->irq);
748:
749: irq2dev_map[dev->irq] = 0;
750:
751: /* Update the statistics here. What statistics? */
752:
753: /* We are supposed to wait for 200 us after a RESET */
754: SLOW_DOWN_IO;
755: SLOW_DOWN_IO; /* May not be enough? */
756:
757: MOD_DEC_USE_COUNT;
758: return 0;
759: }
760:
761: /* Get the current statistics. This may be called with the card open or
762: closed. */
763: static struct enet_statistics *
764: eepro_get_stats(struct device *dev)
765: {
766: struct eepro_local *lp = (struct eepro_local *)dev->priv;
767:
768: return &lp->stats;
769: }
770:
771: /* Set or clear the multicast filter for this adaptor.
772: */
773: static void
774: set_multicast_list(struct device *dev)
775: {
776: struct eepro_local *lp = (struct eepro_local *)dev->priv;
777: short ioaddr = dev->base_addr;
778: unsigned short mode;
779: struct dev_mc_list *dmi=dev->mc_list;
780:
781: if (dev->flags&(IFF_ALLMULTI|IFF_PROMISC) || dev->mc_count > 63)
782: {
783: /*
784: * We must make the kernel realise we had to move
785: * into promisc mode or we start all out war on
786: * the cable. If it was a promisc rewquest the
787: * flag is already set. If not we assert it.
788: */
789: dev->flags|=IFF_PROMISC;
790:
791: outb(BANK2_SELECT, ioaddr); /* be CAREFUL, BANK 2 now */
792: mode = inb(ioaddr + REG2);
793: outb(mode | PRMSC_Mode, ioaddr + REG2);
794: mode = inb(ioaddr + REG3);
795: outb(mode, ioaddr + REG3); /* writing reg. 3 to complete the update */
796: outb(BANK0_SELECT, ioaddr); /* Return to BANK 0 now */
797: printk("%s: promiscuous mode enabled.\n", dev->name);
798: }
799: else if (dev->mc_count==0 )
800: {
801: outb(BANK2_SELECT, ioaddr); /* be CAREFUL, BANK 2 now */
802: mode = inb(ioaddr + REG2);
803: outb(mode & 0xd6, ioaddr + REG2); /* Turn off Multi-IA and PRMSC_Mode bits */
804: mode = inb(ioaddr + REG3);
805: outb(mode, ioaddr + REG3); /* writing reg. 3 to complete the update */
806: outb(BANK0_SELECT, ioaddr); /* Return to BANK 0 now */
807: }
808: else
809: {
810: unsigned short status, *eaddrs;
811: int i, boguscount = 0;
812:
813: /* Disable RX and TX interrupts. Neccessary to avoid
814: corruption of the HOST_ADDRESS_REG by interrupt
815: service routines. */
816: outb(ALL_MASK, ioaddr + INT_MASK_REG);
817:
818: outb(BANK2_SELECT, ioaddr); /* be CAREFUL, BANK 2 now */
819: mode = inb(ioaddr + REG2);
820: outb(mode | Multi_IA, ioaddr + REG2);
821: mode = inb(ioaddr + REG3);
822: outb(mode, ioaddr + REG3); /* writing reg. 3 to complete the update */
823: outb(BANK0_SELECT, ioaddr); /* Return to BANK 0 now */
824: outw(lp->tx_end, ioaddr + HOST_ADDRESS_REG);
825: outw(MC_SETUP, ioaddr + IO_PORT);
826: outw(0, ioaddr + IO_PORT);
827: outw(0, ioaddr + IO_PORT);
828: outw(6*(dev->mc_count + 1), ioaddr + IO_PORT);
829: for (i = 0; i < dev->mc_count; i++)
830: {
831: eaddrs=(unsigned short *)dmi->dmi_addr;
832: dmi=dmi->next;
833: outw(*eaddrs++, ioaddr + IO_PORT);
834: outw(*eaddrs++, ioaddr + IO_PORT);
835: outw(*eaddrs++, ioaddr + IO_PORT);
836: }
837: eaddrs = (unsigned short *) dev->dev_addr;
838: outw(eaddrs[0], ioaddr + IO_PORT);
839: outw(eaddrs[1], ioaddr + IO_PORT);
840: outw(eaddrs[2], ioaddr + IO_PORT);
841: outw(lp->tx_end, ioaddr + XMT_BAR);
842: outb(MC_SETUP, ioaddr);
843:
844: /* Update the transmit queue */
845: i = lp->tx_end + XMT_HEADER + 6*(dev->mc_count + 1);
846: if (lp->tx_start != lp->tx_end)
847: {
848: /* update the next address and the chain bit in the
849: last packet */
850: outw(lp->tx_last + XMT_CHAIN, ioaddr + HOST_ADDRESS_REG);
851: outw(i, ioaddr + IO_PORT);
852: outw(lp->tx_last + XMT_COUNT, ioaddr + HOST_ADDRESS_REG);
853: status = inw(ioaddr + IO_PORT);
854: outw(status | CHAIN_BIT, ioaddr + IO_PORT);
855: lp->tx_end = i ;
856: }
857: else lp->tx_start = lp->tx_end = i ;
858:
859: /* Acknowledge that the MC setup is done */
860: do { /* We should be doing this in the eepro_interrupt()! */
861: SLOW_DOWN_IO;
862: SLOW_DOWN_IO;
863: if (inb(ioaddr + STATUS_REG) & 0x08)
864: {
865: i = inb(ioaddr);
866: outb(0x08, ioaddr + STATUS_REG);
867: if (i & 0x20) { /* command ABORTed */
868: printk("%s: multicast setup failed.\n",
869: dev->name);
870: break;
871: } else if ((i & 0x0f) == 0x03) { /* MC-Done */
872: printk("%s: set Rx mode to %d addresses.\n",
873: dev->name, dev->mc_count);
874: break;
875: }
876: }
877: } while (++boguscount < 100);
878:
879: /* Re-enable RX and TX interrupts */
880: outb(ALL_MASK & ~(RX_MASK | TX_MASK), ioaddr + INT_MASK_REG);
881:
882: }
883: outb(RCV_ENABLE_CMD, ioaddr);
884: }
885:
886: /* The horrible routine to read a word from the serial EEPROM. */
887: /* IMPORTANT - the 82595 will be set to Bank 0 after the eeprom is read */
888:
889: /* The delay between EEPROM clock transitions. */
890: #define eeprom_delay() { int _i = 40; while (--_i > 0) { __SLOW_DOWN_IO; }}
891: #define EE_READ_CMD (6 << 6)
892:
893: int
894: read_eeprom(int ioaddr, int location)
895: {
896: int i;
897: unsigned short retval = 0;
898: short ee_addr = ioaddr + EEPROM_REG;
899: int read_cmd = location | EE_READ_CMD;
900: short ctrl_val = EECS ;
901:
902: outb(BANK2_SELECT, ioaddr);
903: outb(ctrl_val, ee_addr);
904:
905: /* Shift the read command bits out. */
906: for (i = 8; i >= 0; i--) {
907: short outval = (read_cmd & (1 << i)) ? ctrl_val | EEDI
908: : ctrl_val;
909: outb(outval, ee_addr);
910: outb(outval | EESK, ee_addr); /* EEPROM clock tick. */
911: eeprom_delay();
912: outb(outval, ee_addr); /* Finish EEPROM a clock tick. */
913: eeprom_delay();
914: }
915: outb(ctrl_val, ee_addr);
916:
917: for (i = 16; i > 0; i--) {
918: outb(ctrl_val | EESK, ee_addr); eeprom_delay();
919: retval = (retval << 1) | ((inb(ee_addr) & EEDO) ? 1 : 0);
920: outb(ctrl_val, ee_addr); eeprom_delay();
921: }
922:
923: /* Terminate the EEPROM access. */
924: ctrl_val &= ~EECS;
925: outb(ctrl_val | EESK, ee_addr);
926: eeprom_delay();
927: outb(ctrl_val, ee_addr);
928: eeprom_delay();
929: outb(BANK0_SELECT, ioaddr);
930: return retval;
931: }
932:
933: static void
934: hardware_send_packet(struct device *dev, void *buf, short length)
935: {
936: struct eepro_local *lp = (struct eepro_local *)dev->priv;
937: short ioaddr = dev->base_addr;
938: unsigned status, tx_available, last, end, boguscount = 10;
939:
940: if (net_debug > 5)
941: printk("eepro: entering hardware_send_packet routine.\n");
942:
943: while (boguscount-- > 0) {
944:
945: /* determine how much of the transmit buffer space is available */
946: if (lp->tx_end > lp->tx_start)
947: tx_available = XMT_RAM - (lp->tx_end - lp->tx_start);
948: else if (lp->tx_end < lp->tx_start)
949: tx_available = lp->tx_start - lp->tx_end;
950: else tx_available = XMT_RAM;
951:
952: /* Disable RX and TX interrupts. Neccessary to avoid
953: corruption of the HOST_ADDRESS_REG by interrupt
954: service routines. */
955: outb(ALL_MASK, ioaddr + INT_MASK_REG);
956:
957: if (((((length + 1) >> 1) << 1) + 2*XMT_HEADER)
958: >= tx_available) /* No space available ??? */
959: continue;
960:
961: last = lp->tx_end;
962: end = last + (((length + 1) >> 1) << 1) + XMT_HEADER;
963:
964: if (end >= RAM_SIZE) { /* the transmit buffer is wrapped around */
965: if ((RAM_SIZE - last) <= XMT_HEADER) {
966: /* Arrrr!!!, must keep the xmt header together,
967: several days were lost to chase this one down. */
968: last = RCV_RAM;
969: end = last + (((length + 1) >> 1) << 1) + XMT_HEADER;
970: }
971: else end = RCV_RAM + (end - RAM_SIZE);
972: }
973:
974: outw(last, ioaddr + HOST_ADDRESS_REG);
975: outw(XMT_CMD, ioaddr + IO_PORT);
976: outw(0, ioaddr + IO_PORT);
977: outw(end, ioaddr + IO_PORT);
978: outw(length, ioaddr + IO_PORT);
979: outsw(ioaddr + IO_PORT, buf, (length + 1) >> 1);
980:
981: if (lp->tx_start != lp->tx_end) {
982: /* update the next address and the chain bit in the
983: last packet */
984: if (lp->tx_end != last) {
985: outw(lp->tx_last + XMT_CHAIN, ioaddr + HOST_ADDRESS_REG);
986: outw(last, ioaddr + IO_PORT);
987: }
988: outw(lp->tx_last + XMT_COUNT, ioaddr + HOST_ADDRESS_REG);
989: status = inw(ioaddr + IO_PORT);
990: outw(status | CHAIN_BIT, ioaddr + IO_PORT);
991: }
992:
993: /* A dummy read to flush the DRAM write pipeline */
994: status = inw(ioaddr + IO_PORT);
995:
996: /* Enable RX and TX interrupts */
997: outb(ALL_MASK & ~(RX_MASK | TX_MASK), ioaddr + INT_MASK_REG);
998:
999: if (lp->tx_start == lp->tx_end) {
1000: outw(last, ioaddr + XMT_BAR);
1001: outb(XMT_CMD, ioaddr);
1002: lp->tx_start = last; /* I don't like to change tx_start here */
1003: }
1004: else outb(RESUME_XMT_CMD, ioaddr);
1005:
1006: lp->tx_last = last;
1007: lp->tx_end = end;
1008:
1009: if (dev->tbusy) {
1010: dev->tbusy = 0;
1011: mark_bh(NET_BH);
1012: }
1013:
1014: if (net_debug > 5)
1015: printk("eepro: exiting hardware_send_packet routine.\n");
1016: return;
1017: }
1018: dev->tbusy = 1;
1019: if (net_debug > 5)
1020: printk("eepro: exiting hardware_send_packet routine.\n");
1021: }
1022:
1023: static void
1024: eepro_rx(struct device *dev)
1025: {
1026: struct eepro_local *lp = (struct eepro_local *)dev->priv;
1027: short ioaddr = dev->base_addr;
1028: short boguscount = 20;
1029: short rcv_car = lp->rx_start;
1030: unsigned rcv_event, rcv_status, rcv_next_frame, rcv_size;
1031:
1032: if (net_debug > 5)
1033: printk("eepro: entering eepro_rx routine.\n");
1034:
1035: /* Set the read pointer to the start of the RCV */
1036: outw(rcv_car, ioaddr + HOST_ADDRESS_REG);
1037: rcv_event = inw(ioaddr + IO_PORT);
1038:
1039: while (rcv_event == RCV_DONE) {
1040: rcv_status = inw(ioaddr + IO_PORT);
1041: rcv_next_frame = inw(ioaddr + IO_PORT);
1042: rcv_size = inw(ioaddr + IO_PORT);
1043:
1044: if ((rcv_status & (RX_OK | RX_ERROR)) == RX_OK) {
1045: /* Malloc up new buffer. */
1046: struct sk_buff *skb;
1047:
1048: rcv_size &= 0x3fff;
1049: skb = dev_alloc_skb(rcv_size+2);
1050: if (skb == NULL) {
1051: printk("%s: Memory squeeze, dropping packet.\n", dev->name);
1052: lp->stats.rx_dropped++;
1053: break;
1054: }
1055: skb->dev = dev;
1056: skb_reserve(skb,2);
1057:
1058: insw(ioaddr+IO_PORT, skb_put(skb,rcv_size), (rcv_size + 1) >> 1);
1059:
1060: skb->protocol = eth_type_trans(skb,dev);
1061: netif_rx(skb);
1062: lp->stats.rx_packets++;
1063: }
1064: else { /* Not sure will ever reach here,
1065: I set the 595 to discard bad received frames */
1066: lp->stats.rx_errors++;
1067: if (rcv_status & 0x0100)
1068: lp->stats.rx_over_errors++;
1069: else if (rcv_status & 0x0400)
1070: lp->stats.rx_frame_errors++;
1071: else if (rcv_status & 0x0800)
1072: lp->stats.rx_crc_errors++;
1073: printk("%s: event = %#x, status = %#x, next = %#x, size = %#x\n",
1074: dev->name, rcv_event, rcv_status, rcv_next_frame, rcv_size);
1075: }
1076: if (rcv_status & 0x1000)
1077: lp->stats.rx_length_errors++;
1078: if (--boguscount == 0)
1079: break;
1080:
1081: rcv_car = lp->rx_start + RCV_HEADER + rcv_size;
1082: lp->rx_start = rcv_next_frame;
1083: outw(rcv_next_frame, ioaddr + HOST_ADDRESS_REG);
1084: rcv_event = inw(ioaddr + IO_PORT);
1085:
1086: }
1087: if (rcv_car == 0)
1088: rcv_car = (RCV_UPPER_LIMIT << 8) | 0xff;
1089: outw(rcv_car - 1, ioaddr + RCV_STOP);
1090:
1091: if (net_debug > 5)
1092: printk("eepro: exiting eepro_rx routine.\n");
1093: }
1094:
1095: static void
1096: eepro_transmit_interrupt(struct device *dev)
1097: {
1098: struct eepro_local *lp = (struct eepro_local *)dev->priv;
1099: short ioaddr = dev->base_addr;
1100: short boguscount = 10;
1101: short xmt_status;
1102:
1103: while (lp->tx_start != lp->tx_end) {
1104:
1105: outw(lp->tx_start, ioaddr + HOST_ADDRESS_REG);
1106: xmt_status = inw(ioaddr+IO_PORT);
1107: if ((xmt_status & TX_DONE_BIT) == 0) break;
1108: xmt_status = inw(ioaddr+IO_PORT);
1109: lp->tx_start = inw(ioaddr+IO_PORT);
1110:
1111: if (dev->tbusy) {
1112: dev->tbusy = 0;
1113: mark_bh(NET_BH);
1114: }
1115:
1116: if (xmt_status & 0x2000)
1117: lp->stats.tx_packets++;
1118: else {
1119: lp->stats.tx_errors++;
1120: if (xmt_status & 0x0400)
1121: lp->stats.tx_carrier_errors++;
1122: printk("%s: XMT status = %#x\n",
1123: dev->name, xmt_status);
1124: }
1125: if (xmt_status & 0x000f)
1126: lp->stats.collisions += (xmt_status & 0x000f);
1127: if ((xmt_status & 0x0040) == 0x0)
1128: lp->stats.tx_heartbeat_errors++;
1129:
1130: if (--boguscount == 0)
1131: break;
1132: }
1133: }
1134:
1135: #ifdef MODULE
1136: static char devicename[9] = { 0, };
1137: static struct device dev_eepro = {
1138: devicename, /* device name is inserted by linux/drivers/net/net_init.c */
1139: 0, 0, 0, 0,
1140: 0, 0,
1141: 0, 0, 0, NULL, eepro_probe };
1142:
1143: static int io = 0x200;
1144: static int irq = 0;
1145:
1146: int
1147: init_module(void)
1148: {
1149: if (io == 0)
1150: printk("eepro: You should not use auto-probing with insmod!\n");
1151: dev_eepro.base_addr = io;
1152: dev_eepro.irq = irq;
1153:
1154: if (register_netdev(&dev_eepro) != 0)
1155: return -EIO;
1156: return 0;
1157: }
1158:
1159: void
1160: cleanup_module(void)
1161: {
1162: unregister_netdev(&dev_eepro);
1163: kfree_s(dev_eepro.priv,sizeof(struct eepro_local));
1164: dev_eepro.priv=NULL;
1165:
1166: /* If we don't do this, we can't re-insmod it later. */
1167: release_region(dev_eepro.base_addr, EEPRO_IO_EXTENT);
1168: }
1169: #endif /* MODULE */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.