|
|
1.1 root 1: /* epic100.c: A SMC 83c170 EPIC/100 Fast Ethernet driver for Linux. */
2: /*
3: Written 1997-1998 by Donald Becker.
4:
5: This software may be used and distributed according to the terms
6: of the GNU Public License, incorporated herein by reference.
7: All other rights reserved.
8:
9: This driver is for the SMC83c170/175 "EPIC" series, as used on the
10: SMC EtherPower II 9432 PCI adapter, and several CardBus cards.
11:
12: The author may be reached as [email protected], or C/O
13: Center of Excellence in Space Data and Information Sciences
14: Code 930.5, Goddard Space Flight Center, Greenbelt MD 20771
15:
16: Support and updates available at
17: http://cesdis.gsfc.nasa.gov/linux/drivers/epic100.html
18: */
19:
20: static const char *version =
21: "epic100.c:v1.03 8/7/98 Donald Becker http://cesdis.gsfc.nasa.gov/linux/drivers/epic100.html\n";
22:
23: /* A few user-configurable values. */
24:
25: /* Keep the ring sizes a power of two for efficiency.
26: Making the Tx ring too large decreases the effectiveness of channel
27: bonding and packet priority.
28: There are no ill effects from too-large receive rings. */
29: #define TX_RING_SIZE 16
30: #define RX_RING_SIZE 32
31:
32: /* Set the copy breakpoint for the copy-only-tiny-frames scheme.
33: Setting to > 1518 effectively disables this feature. */
34: static int rx_copybreak = 200;
35:
36: /* Maximum events (Rx packets, etc.) to handle at each interrupt. */
37: static int max_interrupt_work = 10;
38:
39: /* Operational parameters that usually are not changed. */
40: /* Time in jiffies before concluding the transmitter is hung. */
41: #define TX_TIMEOUT ((2000*HZ)/1000)
42:
43: #define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer.*/
44:
45: /* Bytes transferred to chip before transmission starts. */
46: #define TX_FIFO_THRESH 256 /* Rounded down to 4 byte units. */
47: #define RX_FIFO_THRESH 1 /* 0-3, 0==32, 64,96, or 3==128 bytes */
48:
49: #include <linux/config.h>
50: #include <linux/version.h> /* Evil, but neccessary */
51: #ifdef MODULE
52: #ifdef MODVERSIONS
53: #include <linux/modversions.h>
54: #endif
55: #include <linux/module.h>
56: #else
57: #define MOD_INC_USE_COUNT
58: #define MOD_DEC_USE_COUNT
59: #endif
60:
61: #include <linux/kernel.h>
62: #include <linux/sched.h>
63: #include <linux/string.h>
64: #include <linux/timer.h>
65: #include <linux/ptrace.h>
66: #include <linux/errno.h>
67: #include <linux/ioport.h>
68: #include <linux/malloc.h>
69: #include <linux/interrupt.h>
70: #include <linux/pci.h>
71: #if LINUX_VERSION_CODE >= 0x20155
72: #define PCI_SUPPORT_VER2
73: #else
74: #include <linux/bios32.h>
75: #endif
76: #include <linux/delay.h>
77:
78: #include <asm/processor.h> /* Processor type for cache alignment. */
79: #include <asm/bitops.h>
80: #include <asm/io.h>
81: #include <asm/dma.h>
82:
83: #include <linux/netdevice.h>
84: #include <linux/etherdevice.h>
85: #include <linux/skbuff.h>
86:
87: /* Kernel compatibility defines, common to David Hind's PCMCIA package.
88: This is only in the support-all-kernels source code. */
89:
90: #if ! defined (LINUX_VERSION_CODE) || LINUX_VERSION_CODE < 0x20000
91: #warning This driver version is only for kernel versions 2.0.0 and later.
92: #endif
93:
94: #define RUN_AT(x) (jiffies + (x))
95:
96: #if defined(MODULE) && (LINUX_VERSION_CODE >= 0x20115)
97: MODULE_AUTHOR("Donald Becker <[email protected]>");
98: MODULE_DESCRIPTION("SMC 83c170 EPIC series Ethernet driver");
99: MODULE_PARM(debug, "i");
100: MODULE_PARM(options, "1-" __MODULE_STRING(8) "i");
101: MODULE_PARM(full_duplex, "1-" __MODULE_STRING(8) "i");
102: MODULE_PARM(rx_copybreak, "i");
103: MODULE_PARM(max_interrupt_work, "i");
104: #endif
105: #if LINUX_VERSION_CODE < 0x20123
106: #define test_and_set_bit(val, addr) set_bit(val, addr)
107: #endif
108: #if LINUX_VERSION_CODE <= 0x20139
109: #define net_device_stats enet_statistics
110: #define NETSTATS_VER2
111: #endif
112: #if LINUX_VERSION_CODE < 0x20159
113: #define DEV_FREE_SKB(skb) dev_kfree_skb(skb, FREE_WRITE);
114: #else /* Grrr, unneeded incompatible change. */
115: #define DEV_FREE_SKB(skb) dev_kfree_skb(skb);
116: #endif
117:
118: /* The I/O extent. */
119: #define EPIC_TOTAL_SIZE 0x100
120:
121: static int epic_debug = 1;
122:
123: /*
124: Theory of Operation
125:
126: I. Board Compatibility
127:
128: This device driver is designed for the SMC "EPCI/100", the SMC
129: single-chip Ethernet controllers for PCI. This chip is used on
130: the SMC EtherPower II boards.
131:
132:
133: II. Board-specific settings
134:
135: PCI bus devices are configured by the system at boot time, so no jumpers
136: need to be set on the board. The system BIOS will assign the
137: PCI INTA signal to a (preferably otherwise unused) system IRQ line.
138: Note: Kernel versions earlier than 1.3.73 do not support shared PCI
139: interrupt lines.
140:
141: III. Driver operation
142:
143: IIIa. Ring buffers
144:
145: IVb. References
146:
147: http://www.smc.com/components/catalog/smc83c170.html
148: http://cesdis.gsfc.nasa.gov/linux/misc/NWay.html
149: http://www.national.com/pf/DP/DP83840.html
150:
151: IVc. Errata
152:
153: */
154:
155: /* The rest of these values should never change. */
156:
157: static struct device *epic_probe1(int pci_bus, int pci_devfn,
158: struct device *dev, int card_idx);
159:
160: enum pci_flags_bit {
161: PCI_USES_IO=1, PCI_USES_MEM=2, PCI_USES_MASTER=4,
162: PCI_ADDR0=0x10<<0, PCI_ADDR1=0x10<<1, PCI_ADDR2=0x10<<2, PCI_ADDR3=0x10<<3,
163: };
164: struct chip_info {
165: const char *name;
166: u16 vendor_id, device_id, device_id_mask, pci_flags;
167: int io_size, min_latency;
168: struct device *(*probe1)(int pci_bus, int pci_devfn, struct device *dev,
169: int chip_idx);
170: } chip_tbl[] = {
171: {"SMSC EPIC/100", 0x10B8, 0x0005, 0x7fff,
172: PCI_USES_IO|PCI_USES_MASTER|PCI_ADDR0, EPIC_TOTAL_SIZE, 32, epic_probe1},
173: {0,},
174: };
175:
176: /* Offsets to registers, using the (ugh) SMC names. */
177: enum epic_registers {
178: COMMAND=0, INTSTAT=4, INTMASK=8, GENCTL=0x0C, NVCTL=0x10, EECTL=0x14,
179: PCIBurstCnt=0x18,
180: TEST1=0x1C, CRCCNT=0x20, ALICNT=0x24, MPCNT=0x28, /* Rx error counters. */
181: MIICtrl=0x30, MIIData=0x34, MIICfg=0x38,
182: LAN0=64, /* MAC address. */
183: MC0=80, /* Multicast filter table. */
184: RxCtrl=96, TxCtrl=112, TxSTAT=0x74,
185: PRxCDAR=0x84, RxSTAT=0xA4, EarlyRx=0xB0, PTxCDAR=0xC4, TxThresh=0xDC,
186: };
187:
188: /* Interrupt register bits, using my own meaningful names. */
189: enum IntrStatus {
190: TxIdle=0x40000, RxIdle=0x20000, IntrSummary=0x010000,
191: PCIBusErr170=0x7000, PCIBusErr175=0x1000, PhyEvent175=0x8000,
192: RxStarted=0x0800, RxEarlyWarn=0x0400, CntFull=0x0200, TxUnderrun=0x0100,
193: TxEmpty=0x0080, TxDone=0x0020, RxError=0x0010,
194: RxOverflow=0x0008, RxFull=0x0004, RxHeader=0x0002, RxDone=0x0001,
195: };
196:
197: /* The EPIC100 Rx and Tx buffer descriptors. */
198:
199: struct epic_tx_desc {
200: s16 status;
201: u16 txlength;
202: u32 bufaddr;
203: u16 buflength;
204: u16 control;
205: u32 next;
206: };
207:
208: struct epic_rx_desc {
209: s16 status;
210: u16 rxlength;
211: u32 bufaddr;
212: u32 buflength;
213: u32 next;
214: };
215:
216: struct epic_private {
217: char devname[8]; /* Used only for kernel debugging. */
218: const char *product_name;
219: struct device *next_module;
220:
221: /* Rx and Rx rings here so that they remain paragraph aligned. */
222: struct epic_rx_desc rx_ring[RX_RING_SIZE];
223: struct epic_tx_desc tx_ring[TX_RING_SIZE];
224: /* The saved address of a sent-in-place packet/buffer, for skfree(). */
225: struct sk_buff* tx_skbuff[TX_RING_SIZE];
226: /* The addresses of receive-in-place skbuffs. */
227: struct sk_buff* rx_skbuff[RX_RING_SIZE];
228:
229: /* Ring pointers. */
230: unsigned int cur_rx, cur_tx; /* The next free ring entry */
231: unsigned int dirty_rx, dirty_tx; /* The ring entries to be free()ed. */
232:
233: u8 pci_bus, pci_dev_fn; /* PCI bus location. */
234: u16 chip_id;
235:
236: struct net_device_stats stats;
237: struct timer_list timer; /* Media selection timer. */
238: unsigned char mc_filter[8];
239: signed char phys[4]; /* MII device addresses. */
240: unsigned int tx_full:1; /* The Tx queue is full. */
241: unsigned int full_duplex:1; /* Current duplex setting. */
242: unsigned int force_fd:1; /* Full-duplex operation requested. */
243: unsigned int default_port:4; /* Last dev->if_port value. */
244: unsigned int media2:4; /* Secondary monitored media port. */
245: unsigned int medialock:1; /* Don't sense media type. */
246: unsigned int mediasense:1; /* Media sensing in progress. */
247: int pad0, pad1; /* Used for 8-byte alignment */
248: };
249:
250: /* Used to pass the full-duplex flag, etc. */
251: #define MAX_UNITS 8
252: static int full_duplex[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
253: static int options[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
254:
255: static int epic_open(struct device *dev);
256: static int read_eeprom(long ioaddr, int location);
257: static int mdio_read(long ioaddr, int phy_id, int location);
258: static void mdio_write(long ioaddr, int phy_id, int location, int value);
259: static void epic_restart(struct device *dev);
260: static void epic_timer(unsigned long data);
261: static void epic_tx_timeout(struct device *dev);
262: static void epic_init_ring(struct device *dev);
263: static int epic_start_xmit(struct sk_buff *skb, struct device *dev);
264: static int epic_rx(struct device *dev);
265: static void epic_interrupt(int irq, void *dev_instance, struct pt_regs *regs);
266: static int mii_ioctl(struct device *dev, struct ifreq *rq, int cmd);
267: static int epic_close(struct device *dev);
268: static struct net_device_stats *epic_get_stats(struct device *dev);
269: static void set_rx_mode(struct device *dev);
270:
271:
272: /* A list of all installed EPIC devices, for removing the driver module. */
273: static struct device *root_epic_dev = NULL;
274:
275: #ifndef CARDBUS
276: int epic100_probe(struct device *dev)
277: {
278: int cards_found = 0;
279: int chip_idx;
280: u16 pci_command, new_command;
281: unsigned char pci_bus, pci_device_fn;
282:
283: #ifdef PCI_SUPPORT_VER2
284: struct pci_dev *pcidev = NULL;
285: while ((pcidev = pci_find_class(PCI_CLASS_NETWORK_ETHERNET << 8, pcidev))
286: != NULL) {
287: long pci_ioaddr = pcidev->base_address[0] & ~3;
288: int vendor = pcidev->vendor;
289: int device = pcidev->device;
290:
291: for (chip_idx = 0; chip_tbl[chip_idx].vendor_id; chip_idx++)
292: if (vendor == chip_tbl[chip_idx].vendor_id
293: && (device & chip_tbl[chip_idx].device_id_mask) ==
294: chip_tbl[chip_idx].device_id)
295: break;
296: if (chip_tbl[chip_idx].vendor_id == 0 /* Compiled out! */
297: || check_region(pci_ioaddr, chip_tbl[chip_idx].io_size))
298: continue;
299: pci_bus = pcidev->bus->number;
300: pci_device_fn = pcidev->devfn;
301: #else
302: int pci_index;
303:
304: if ( ! pcibios_present())
305: return -ENODEV;
306:
307: for (pci_index = 0; pci_index < 0xff; pci_index++) {
308: u16 vendor, device;
309: u32 pci_ioaddr;
310:
311: if (pcibios_find_class (PCI_CLASS_NETWORK_ETHERNET << 8,
312: pci_index, &pci_bus, &pci_device_fn)
313: != PCIBIOS_SUCCESSFUL)
314: break;
315: pcibios_read_config_word(pci_bus, pci_device_fn,
316: PCI_VENDOR_ID, &vendor);
317: pcibios_read_config_word(pci_bus, pci_device_fn,
318: PCI_DEVICE_ID, &device);
319:
320: for (chip_idx = 0; chip_tbl[chip_idx].vendor_id; chip_idx++)
321: if (vendor == chip_tbl[chip_idx].vendor_id
322: && (device & chip_tbl[chip_idx].device_id_mask) ==
323: chip_tbl[chip_idx].device_id)
324: break;
325: if (chip_tbl[chip_idx].vendor_id == 0) /* Compiled out! */
326: continue;
327:
328: pcibios_read_config_dword(pci_bus, pci_device_fn,
329: PCI_BASE_ADDRESS_0, &pci_ioaddr);
330: /* Remove I/O space marker in bit 0. */
331: pci_ioaddr &= ~3;
332:
333: if (check_region(pci_ioaddr, chip_tbl[chip_idx].io_size))
334: continue;
335: #endif
336:
337: /* EPIC-specific code: Soft-reset the chip ere setting as master. */
338: outl(0x0001, pci_ioaddr + GENCTL);
339:
340: /* Activate the card: fix for brain-damaged Win98 BIOSes. */
341: pcibios_read_config_word(pci_bus, pci_device_fn,
342: PCI_COMMAND, &pci_command);
343: new_command = pci_command | PCI_COMMAND_MASTER|PCI_COMMAND_IO;
344: if (pci_command != new_command) {
345: printk(KERN_INFO " The PCI BIOS has not enabled Ethernet"
346: " device %4.4x-%4.4x."
347: " Updating PCI command %4.4x->%4.4x.\n",
348: vendor, device, pci_command, new_command);
349: pcibios_write_config_word(pci_bus, pci_device_fn,
350: PCI_COMMAND, new_command);
351: }
352:
353: dev = chip_tbl[chip_idx].probe1(pci_bus, pci_device_fn,
354: dev, cards_found);
355:
356: /* Check the latency timer. */
357: if (dev) {
358: u8 pci_latency;
359: pcibios_read_config_byte(pci_bus, pci_device_fn,
360: PCI_LATENCY_TIMER, &pci_latency);
361: if (pci_latency < chip_tbl[chip_idx].min_latency) {
362: printk(KERN_INFO " PCI latency timer (CFLT) value of %d is "
363: "unreasonably low, setting to %d.\n", pci_latency,
364: chip_tbl[chip_idx].min_latency);
365: pcibios_write_config_byte(pci_bus, pci_device_fn,
366: PCI_LATENCY_TIMER,
367: chip_tbl[chip_idx].min_latency);
368: }
369: dev = 0;
370: cards_found++;
371: }
372: }
373:
374: return cards_found ? 0 : -ENODEV;
375: }
376: #endif /* not CARDBUS */
377:
378: static struct device *epic_probe1(int bus, int devfn, struct device *dev,
379: int card_idx)
380: {
381: static int did_version = 0; /* Already printed version info. */
382: struct epic_private *ep;
383: int i, option = 0, duplex = 0;
384: u16 chip_id;
385: u32 ioaddr;
386:
387: if (epic_debug > 0 && did_version++ == 0)
388: printk(KERN_INFO "%s", version);
389:
390: if (dev && dev->mem_start) {
391: option = dev->mem_start;
392: duplex = (dev->mem_start & 16) ? 1 : 0;
393: } else if (card_idx >= 0 && card_idx < MAX_UNITS) {
394: if (options[card_idx] >= 0)
395: option = options[card_idx];
396: if (full_duplex[card_idx] >= 0)
397: duplex = full_duplex[card_idx];
398: }
399:
400: dev = init_etherdev(dev, 0);
401:
402: { /* Grrrr, badly consider interface change. */
403: #if defined(PCI_SUPPORT_VER2)
404: struct pci_dev *pdev = pci_find_slot(bus, devfn);
405: ioaddr = pdev->base_address[0] & ~3;
406: dev->irq = pdev->irq;
407: chip_id = pdev->device;
408: #else
409: u8 irq;
410: u32 ioaddr0;
411: pcibios_read_config_dword(bus, devfn, PCI_BASE_ADDRESS_0, &ioaddr0);
412: pcibios_read_config_byte(bus, devfn, PCI_INTERRUPT_LINE, &irq);
413: pcibios_read_config_word(bus, devfn, PCI_DEVICE_ID, &chip_id);
414: ioaddr = ioaddr0 & ~3;
415: dev->irq = irq;
416: #endif
417: }
418:
419: dev->base_addr = ioaddr;
420: printk(KERN_INFO "%s: SMC EPIC/100 (chip ID %4.4x) at %#3x, IRQ %d, ",
421: dev->name, chip_id, ioaddr, dev->irq);
422:
423: /* Bring the chip out of low-power mode. */
424: outl(0x4200, ioaddr + GENCTL);
425: /* Magic?! If we don't set this bit the MII interface won't work. */
426: outl(0x0008, ioaddr + TEST1);
427:
428: /* Turn on the MII transceiver. */
429: outl(0x12, ioaddr + MIICfg);
430: if (chip_id == 6)
431: outl((inl(ioaddr + NVCTL) & ~0x003C) | 0x4800, ioaddr + NVCTL);
432: outl(0x0200, ioaddr + GENCTL);
433:
434: /* This could also be read from the EEPROM. */
435: for (i = 0; i < 3; i++)
436: ((u16 *)dev->dev_addr)[i] = inw(ioaddr + LAN0 + i*4);
437:
438: for (i = 0; i < 5; i++)
439: printk("%2.2x:", dev->dev_addr[i]);
440: printk("%2.2x.\n", dev->dev_addr[i]);
441:
442: if (epic_debug > 1) {
443: printk(KERN_DEBUG "%s: EEPROM contents\n", dev->name);
444: for (i = 0; i < 64; i++)
445: printk(" %4.4x%s", read_eeprom(ioaddr, i),
446: i % 16 == 15 ? "\n" : "");
447: }
448:
449: /* We do a request_region() to register /proc/ioports info. */
450: request_region(ioaddr, EPIC_TOTAL_SIZE, "SMC EPIC/100");
451:
452: /* The data structures must be quadword aligned. */
453: ep = kmalloc(sizeof(*ep), GFP_KERNEL | GFP_DMA);
454: memset(ep, 0, sizeof(*ep));
455: dev->priv = ep;
456:
457: ep->next_module = root_epic_dev;
458: root_epic_dev = dev;
459:
460: ep->pci_bus = bus;
461: ep->pci_dev_fn = devfn;
462: ep->chip_id = chip_id;
463:
464: /* Find the connected MII xcvrs.
465: Doing this in open() would allow detecting external xcvrs later, but
466: takes too much time. */
467: {
468: int phy, phy_idx;
469: for (phy = 1, phy_idx = 0; phy < 32 && phy_idx < sizeof(ep->phys);
470: phy++) {
471: int mii_status = mdio_read(ioaddr, phy, 1);
472: if (mii_status != 0xffff && mii_status != 0x0000) {
473: ep->phys[phy_idx++] = phy;
474: printk(KERN_INFO "%s: MII transceiver #%d control "
475: "%4.4x status %4.4x.\n"
476: KERN_INFO "%s: Autonegotiation advertising %4.4x "
477: "link partner %4.4x.\n",
478: dev->name, phy, mdio_read(ioaddr, phy, 0), mii_status,
479: dev->name, mdio_read(ioaddr, phy, 4),
480: mdio_read(ioaddr, phy, 5));
481: }
482: }
483: if (phy_idx == 0) {
484: printk(KERN_WARNING "%s: ***WARNING***: No MII transceiver found!\n",
485: dev->name);
486: /* Use the known PHY address of the EPII. */
487: ep->phys[0] = 3;
488: }
489: }
490:
491: /* Turn off the MII xcvr (175 only!), leave the chip in low-power mode. */
492: if (ep->chip_id == 6)
493: outl(inl(ioaddr + NVCTL) & ~0x483C, ioaddr + NVCTL);
494: outl(0x0008, ioaddr + GENCTL);
495:
496: /* The lower four bits are the media type. */
497: ep->force_fd = duplex;
498: ep->default_port = option;
499: if (ep->default_port)
500: ep->medialock = 1;
501:
502: /* The Epic-specific entries in the device structure. */
503: dev->open = &epic_open;
504: dev->hard_start_xmit = &epic_start_xmit;
505: dev->stop = &epic_close;
506: dev->get_stats = &epic_get_stats;
507: dev->set_multicast_list = &set_rx_mode;
508: dev->do_ioctl = &mii_ioctl;
509:
510: return dev;
511: }
512:
513: /* Serial EEPROM section. */
514:
515: /* EEPROM_Ctrl bits. */
516: #define EE_SHIFT_CLK 0x04 /* EEPROM shift clock. */
517: #define EE_CS 0x02 /* EEPROM chip select. */
518: #define EE_DATA_WRITE 0x08 /* EEPROM chip data in. */
519: #define EE_WRITE_0 0x01
520: #define EE_WRITE_1 0x09
521: #define EE_DATA_READ 0x10 /* EEPROM chip data out. */
522: #define EE_ENB (0x0001 | EE_CS)
523:
524: /* Delay between EEPROM clock transitions.
525: No extra delay is needed with 33Mhz PCI, but 66Mhz is untested.
526: */
527:
528: #ifdef _LINUX_DELAY_H
529: #define eeprom_delay(nanosec) udelay(1)
530: #else
531: #define eeprom_delay(nanosec) do { ; } while (0)
532: #endif
533:
534: /* The EEPROM commands include the alway-set leading bit. */
535: #define EE_WRITE_CMD (5 << 6)
536: #define EE_READ64_CMD (6 << 6)
537: #define EE_READ256_CMD (6 << 8)
538: #define EE_ERASE_CMD (7 << 6)
539:
540: static int read_eeprom(long ioaddr, int location)
541: {
542: int i;
543: int retval = 0;
544: long ee_addr = ioaddr + EECTL;
545: int read_cmd = location |
546: (inl(ee_addr) & 0x40) ? EE_READ64_CMD : EE_READ256_CMD;
547:
548: printk("EEctrl is %x.\n", inl(ee_addr));
549: outl(EE_ENB & ~EE_CS, ee_addr);
550: outl(EE_ENB, ee_addr);
551:
552: /* Shift the read command bits out. */
553: for (i = 12; i >= 0; i--) {
554: short dataval = (read_cmd & (1 << i)) ? EE_WRITE_1 : EE_WRITE_0;
555: outl(EE_ENB | dataval, ee_addr);
556: eeprom_delay(100);
557: outl(EE_ENB | dataval | EE_SHIFT_CLK, ee_addr);
558: eeprom_delay(150);
559: }
560: outl(EE_ENB, ee_addr);
561:
562: for (i = 16; i > 0; i--) {
563: outl(EE_ENB | EE_SHIFT_CLK, ee_addr);
564: eeprom_delay(100);
565: retval = (retval << 1) | ((inl(ee_addr) & EE_DATA_READ) ? 1 : 0);
566: outl(EE_ENB, ee_addr);
567: eeprom_delay(100);
568: }
569:
570: /* Terminate the EEPROM access. */
571: outl(EE_ENB & ~EE_CS, ee_addr);
572: return retval;
573: }
574:
575: #define MII_READOP 1
576: #define MII_WRITEOP 2
577: static int mdio_read(long ioaddr, int phy_id, int location)
578: {
579: int i;
580:
581: outl((phy_id << 9) | (location << 4) | MII_READOP, ioaddr + MIICtrl);
582: /* Typical operation takes < 50 ticks. */
583: for (i = 4000; i > 0; i--)
584: if ((inl(ioaddr + MIICtrl) & MII_READOP) == 0)
585: return inw(ioaddr + MIIData);
586: return 0xffff;
587: }
588:
589: static void mdio_write(long ioaddr, int phy_id, int location, int value)
590: {
591: int i;
592:
593: outw(value, ioaddr + MIIData);
594: outl((phy_id << 9) | (location << 4) | MII_WRITEOP, ioaddr + MIICtrl);
595: for (i = 10000; i > 0; i--) {
596: if ((inl(ioaddr + MIICtrl) & MII_WRITEOP) == 0)
597: break;
598: }
599: return;
600: }
601:
602:
603: static int
604: epic_open(struct device *dev)
605: {
606: struct epic_private *ep = (struct epic_private *)dev->priv;
607: long ioaddr = dev->base_addr;
608: int i;
609: int mii_reg5;
610: ep->full_duplex = ep->force_fd;
611:
612: /* Soft reset the chip. */
613: outl(0x4001, ioaddr + GENCTL);
614:
615: if (request_irq(dev->irq, &epic_interrupt, SA_SHIRQ, "SMC EPIC/100", dev))
616: return -EAGAIN;
617:
618: MOD_INC_USE_COUNT;
619:
620: epic_init_ring(dev);
621:
622: outl(0x4000, ioaddr + GENCTL);
623: /* This next magic! line by Ken Yamaguchi.. ?? */
624: outl(0x0008, ioaddr + TEST1);
625:
626: /* Pull the chip out of low-power mode, enable interrupts, and set for
627: PCI read multiple. The MIIcfg setting and strange write order are
628: required by the details of which bits are reset and the transceiver
629: wiring on the Ositech CardBus card.
630: */
631: outl(0x12, ioaddr + MIICfg);
632: if (ep->chip_id == 6)
633: outl((inl(ioaddr + NVCTL) & ~0x003C) | 0x4800, ioaddr + NVCTL);
634:
635: #if defined(__powerpc__) || defined(__sparc__) /* Big endian */
636: outl(0x0432 | (RX_FIFO_THRESH<<8), ioaddr + GENCTL);
637: #else
638: outl(0x0412 | (RX_FIFO_THRESH<<8), ioaddr + GENCTL);
639: #endif
640:
641: for (i = 0; i < 3; i++)
642: outl(((u16*)dev->dev_addr)[i], ioaddr + LAN0 + i*4);
643:
644: outl(TX_FIFO_THRESH, ioaddr + TxThresh);
645:
646: mii_reg5 = mdio_read(ioaddr, ep->phys[0], 5);
647: if (mii_reg5 != 0xffff) {
648: if ((mii_reg5 & 0x0100) || (mii_reg5 & 0x01C0) == 0x0040)
649: ep->full_duplex = 1;
650: else if (! (mii_reg5 & 0x4000))
651: mdio_write(ioaddr, ep->phys[0], 0, 0x1200);
652: if (epic_debug > 1)
653: printk(KERN_INFO "%s: Setting %s-duplex based on MII xcvr %d"
654: " register read of %4.4x.\n", dev->name,
655: ep->full_duplex ? "full" : "half", ep->phys[0], mii_reg5);
656: }
657:
658: outl(ep->full_duplex ? 0x7F : 0x79, ioaddr + TxCtrl);
659: outl(virt_to_bus(ep->rx_ring), ioaddr + PRxCDAR);
660: outl(virt_to_bus(ep->tx_ring), ioaddr + PTxCDAR);
661:
662: /* Start the chip's Rx process. */
663: set_rx_mode(dev);
664: outl(0x000A, ioaddr + COMMAND);
665:
666: dev->tbusy = 0;
667: dev->interrupt = 0;
668: dev->start = 1;
669:
670: /* Enable interrupts by setting the interrupt mask. */
671: outl((ep->chip_id == 6 ? PCIBusErr175 : PCIBusErr170)
672: | CntFull | TxUnderrun | TxDone
673: | RxError | RxOverflow | RxFull | RxHeader | RxDone,
674: ioaddr + INTMASK);
675:
676: if (epic_debug > 1)
677: printk(KERN_DEBUG "%s: epic_open() ioaddr %lx IRQ %d status %4.4x "
678: "%s-duplex.\n",
679: dev->name, ioaddr, dev->irq, inl(ioaddr + GENCTL),
680: ep->full_duplex ? "full" : "half");
681:
682: /* Set the timer to switch to check for link beat and perhaps switch
683: to an alternate media type. */
684: init_timer(&ep->timer);
685: ep->timer.expires = RUN_AT((24*HZ)/10); /* 2.4 sec. */
686: ep->timer.data = (unsigned long)dev;
687: ep->timer.function = &epic_timer; /* timer handler */
688: add_timer(&ep->timer);
689:
690: return 0;
691: }
692:
693: /* Reset the chip to recover from a PCI transaction error.
694: This may occur at interrupt time. */
695: static void epic_pause(struct device *dev)
696: {
697: long ioaddr = dev->base_addr;
698: struct epic_private *ep = (struct epic_private *)dev->priv;
699:
700: /* Disable interrupts by clearing the interrupt mask. */
701: outl(0x00000000, ioaddr + INTMASK);
702: /* Stop the chip's Tx and Rx DMA processes. */
703: outw(0x0061, ioaddr + COMMAND);
704:
705: /* Update the error counts. */
706: if (inw(ioaddr + COMMAND) != 0xffff) {
707: ep->stats.rx_missed_errors += inb(ioaddr + MPCNT);
708: ep->stats.rx_frame_errors += inb(ioaddr + ALICNT);
709: ep->stats.rx_crc_errors += inb(ioaddr + CRCCNT);
710: }
711:
712: /* Remove the packets on the Rx queue. */
713: epic_rx(dev);
714: }
715:
716: static void epic_restart(struct device *dev)
717: {
718: long ioaddr = dev->base_addr;
719: struct epic_private *ep = (struct epic_private *)dev->priv;
720: int i;
721:
722: printk(KERN_DEBUG "%s: Restarting the EPIC chip, Rx %d/%d Tx %d/%d.\n",
723: dev->name, ep->cur_rx, ep->dirty_rx, ep->dirty_tx, ep->cur_tx);
724: /* Soft reset the chip. */
725: outl(0x0001, ioaddr + GENCTL);
726:
727: udelay(1);
728: /* Duplicate code from epic_open(). */
729: outl(0x0008, ioaddr + TEST1);
730:
731: #if defined(__powerpc__) /* Big endian */
732: outl(0x0432 | (RX_FIFO_THRESH<<8), ioaddr + GENCTL);
733: #else
734: outl(0x0412 | (RX_FIFO_THRESH<<8), ioaddr + GENCTL);
735: #endif
736: outl(0x12, ioaddr + MIICfg);
737: if (ep->chip_id == 6)
738: outl((inl(ioaddr + NVCTL) & ~0x003C) | 0x4800, ioaddr + NVCTL);
739:
740: for (i = 0; i < 3; i++)
741: outl(((u16*)dev->dev_addr)[i], ioaddr + LAN0 + i*4);
742:
743: outl(TX_FIFO_THRESH, ioaddr + TxThresh);
744: outl(ep->full_duplex ? 0x7F : 0x79, ioaddr + TxCtrl);
745: outl(virt_to_bus(&ep->rx_ring[ep->cur_rx%RX_RING_SIZE]), ioaddr + PRxCDAR);
746: outl(virt_to_bus(&ep->tx_ring[ep->dirty_tx%TX_RING_SIZE]),
747: ioaddr + PTxCDAR);
748:
749: /* Start the chip's Rx process. */
750: set_rx_mode(dev);
751: outl(0x000A, ioaddr + COMMAND);
752:
753: /* Enable interrupts by setting the interrupt mask. */
754: outl((ep->chip_id == 6 ? PCIBusErr175 : PCIBusErr170)
755: | CntFull | TxUnderrun | TxDone
756: | RxError | RxOverflow | RxFull | RxHeader | RxDone,
757: ioaddr + INTMASK);
758: printk(KERN_DEBUG "%s: epic_restart() done, cmd status %4.4x, ctl %4.4x"
759: " interrupt %4.4x.\n",
760: dev->name, inl(ioaddr + COMMAND), inl(ioaddr + GENCTL),
761: inl(ioaddr + INTSTAT));
762: return;
763: }
764:
765: static void epic_timer(unsigned long data)
766: {
767: struct device *dev = (struct device *)data;
768: struct epic_private *ep = (struct epic_private *)dev->priv;
769: long ioaddr = dev->base_addr;
770: int next_tick = 0;
771: int mii_reg5 = mdio_read(ioaddr, ep->phys[0], 5);
772:
773: if (epic_debug > 3) {
774: printk(KERN_DEBUG "%s: Media selection tick, Tx status %8.8x.\n",
775: dev->name, inl(ioaddr + TxSTAT));
776: printk(KERN_DEBUG "%s: Other registers are IntMask %4.4x "
777: "IntStatus %4.4x RxStatus %4.4x.\n",
778: dev->name, inl(ioaddr + INTMASK), inl(ioaddr + INTSTAT),
779: inl(ioaddr + RxSTAT));
780: }
781: if (! ep->force_fd && mii_reg5 != 0xffff) {
782: int duplex = (mii_reg5&0x0100) || (mii_reg5 & 0x01C0) == 0x0040;
783: if (ep->full_duplex != duplex) {
784: ep->full_duplex = duplex;
785: printk(KERN_INFO "%s: Setting %s-duplex based on MII #%d link"
786: " partner capability of %4.4x.\n", dev->name,
787: ep->full_duplex ? "full" : "half", ep->phys[0], mii_reg5);
788: outl(ep->full_duplex ? 0x7F : 0x79, ioaddr + TxCtrl);
789: }
790: next_tick = 60*HZ;
791: }
792:
793: if (next_tick) {
794: ep->timer.expires = RUN_AT(next_tick);
795: add_timer(&ep->timer);
796: }
797: }
798:
799: static void epic_tx_timeout(struct device *dev)
800: {
801: struct epic_private *ep = (struct epic_private *)dev->priv;
802: long ioaddr = dev->base_addr;
803:
804: if (epic_debug > 0) {
805: printk(KERN_WARNING "%s: Transmit timeout using MII device, "
806: "Tx status %4.4x.\n",
807: dev->name, inw(ioaddr + TxSTAT));
808: if (epic_debug > 1) {
809: printk(KERN_DEBUG "%s: Tx indices: dirty_tx %d, cur_tx %d.\n",
810: dev->name, ep->dirty_tx, ep->cur_tx);
811: }
812: }
813: if (inw(ioaddr + TxSTAT) & 0x10) { /* Tx FIFO underflow. */
814: ep->stats.tx_fifo_errors++;
815: /* Restart the transmit process. */
816: outl(0x0080, ioaddr + COMMAND);
817: }
818:
819: /* Perhaps stop and restart the chip's Tx processes . */
820: /* Trigger a transmit demand. */
821: outl(0x0004, dev->base_addr + COMMAND);
822:
823: dev->trans_start = jiffies;
824: ep->stats.tx_errors++;
825: return;
826: }
827:
828: /* Initialize the Rx and Tx rings, along with various 'dev' bits. */
829: static void
830: epic_init_ring(struct device *dev)
831: {
832: struct epic_private *ep = (struct epic_private *)dev->priv;
833: int i;
834:
835: ep->tx_full = 0;
836: ep->cur_rx = ep->cur_tx = 0;
837: ep->dirty_rx = ep->dirty_tx = 0;
838:
839: for (i = 0; i < RX_RING_SIZE; i++) {
840: ep->rx_ring[i].status = 0x8000; /* Owned by Epic chip */
841: ep->rx_ring[i].buflength = PKT_BUF_SZ;
842: {
843: /* Note the receive buffer must be longword aligned.
844: dev_alloc_skb() provides 16 byte alignment. But do *not*
845: use skb_reserve() to align the IP header! */
846: struct sk_buff *skb;
847: skb = dev_alloc_skb(PKT_BUF_SZ);
848: ep->rx_skbuff[i] = skb;
849: if (skb == NULL)
850: break; /* Bad news! */
851: skb->dev = dev; /* Mark as being used by this device. */
852: skb_reserve(skb, 2); /* Align IP on 16 byte boundaries */
853: ep->rx_ring[i].bufaddr = virt_to_bus(skb->tail);
854: }
855: ep->rx_ring[i].next = virt_to_bus(&ep->rx_ring[i+1]);
856: }
857: /* Mark the last entry as wrapping the ring. */
858: ep->rx_ring[i-1].next = virt_to_bus(&ep->rx_ring[0]);
859:
860: /* The Tx buffer descriptor is filled in as needed, but we
861: do need to clear the ownership bit. */
862: for (i = 0; i < TX_RING_SIZE; i++) {
863: ep->tx_skbuff[i] = 0;
864: ep->tx_ring[i].status = 0x0000;
865: ep->tx_ring[i].next = virt_to_bus(&ep->tx_ring[i+1]);
866: }
867: ep->tx_ring[i-1].next = virt_to_bus(&ep->tx_ring[0]);
868: }
869:
870: static int
871: epic_start_xmit(struct sk_buff *skb, struct device *dev)
872: {
873: struct epic_private *ep = (struct epic_private *)dev->priv;
874: int entry;
875: u32 flag;
876:
877: /* Block a timer-based transmit from overlapping. This could better be
878: done with atomic_swap(1, dev->tbusy), but set_bit() works as well. */
879: if (test_and_set_bit(0, (void*)&dev->tbusy) != 0) {
880: if (jiffies - dev->trans_start < TX_TIMEOUT)
881: return 1;
882: epic_tx_timeout(dev);
883: return 1;
884: }
885:
886: /* Caution: the write order is important here, set the base address
887: with the "ownership" bits last. */
888:
889: /* Calculate the next Tx descriptor entry. */
890: entry = ep->cur_tx % TX_RING_SIZE;
891:
892: ep->tx_skbuff[entry] = skb;
893: ep->tx_ring[entry].txlength = (skb->len >= ETH_ZLEN ? skb->len : ETH_ZLEN);
894: ep->tx_ring[entry].bufaddr = virt_to_bus(skb->data);
895: ep->tx_ring[entry].buflength = skb->len;
896:
897: if (ep->cur_tx - ep->dirty_tx < TX_RING_SIZE/2) {/* Typical path */
898: flag = 0x10; /* No interrupt */
899: clear_bit(0, (void*)&dev->tbusy);
900: } else if (ep->cur_tx - ep->dirty_tx == TX_RING_SIZE/2) {
901: flag = 0x14; /* Tx-done intr. */
902: clear_bit(0, (void*)&dev->tbusy);
903: } else if (ep->cur_tx - ep->dirty_tx < TX_RING_SIZE - 2) {
904: flag = 0x10; /* No Tx-done intr. */
905: clear_bit(0, (void*)&dev->tbusy);
906: } else {
907: /* Leave room for two additional entries. */
908: flag = 0x14; /* Tx-done intr. */
909: ep->tx_full = 1;
910: }
911:
912: ep->tx_ring[entry].control = flag;
913: ep->tx_ring[entry].status = 0x8000; /* Pass ownership to the chip. */
914: ep->cur_tx++;
915: /* Trigger an immediate transmit demand. */
916: outl(0x0004, dev->base_addr + COMMAND);
917:
918: dev->trans_start = jiffies;
919: if (epic_debug > 4)
920: printk(KERN_DEBUG "%s: Queued Tx packet size %d to slot %d, "
921: "flag %2.2x Tx status %8.8x.\n",
922: dev->name, (int)skb->len, entry, flag,
923: inl(dev->base_addr + TxSTAT));
924:
925: return 0;
926: }
927:
928: /* The interrupt handler does all of the Rx thread work and cleans up
929: after the Tx thread. */
930: static void epic_interrupt(int irq, void *dev_instance, struct pt_regs *regs)
931: {
932: struct device *dev = (struct device *)dev_instance;
933: struct epic_private *ep;
934: int status, ioaddr, boguscnt = max_interrupt_work;
935:
936: ioaddr = dev->base_addr;
937: ep = (struct epic_private *)dev->priv;
938:
939: #if defined(__i386__)
940: /* A lock to prevent simultaneous entry bug on Intel SMP machines. */
941: if (test_and_set_bit(0, (void*)&dev->interrupt)) {
942: printk(KERN_ERR"%s: SMP simultaneous entry of an interrupt handler.\n",
943: dev->name);
944: dev->interrupt = 0; /* Avoid halting machine. */
945: return;
946: }
947: #else
948: if (dev->interrupt) {
949: printk(KERN_ERR "%s: Re-entering the interrupt handler.\n", dev->name);
950: return;
951: }
952: dev->interrupt = 1;
953: #endif
954:
955: do {
956: status = inl(ioaddr + INTSTAT);
957: /* Acknowledge all of the current interrupt sources ASAP. */
958: outl(status & 0x00007fff, ioaddr + INTSTAT);
959:
960: if (epic_debug > 4)
961: printk("%s: interrupt interrupt=%#8.8x new intstat=%#8.8x.\n",
962: dev->name, status, inl(ioaddr + INTSTAT));
963:
964: if ((status & IntrSummary) == 0)
965: break;
966:
967: if (status & (RxDone | RxStarted | RxEarlyWarn))
968: epic_rx(dev);
969:
970: if (status & (TxEmpty | TxDone)) {
971: int dirty_tx;
972:
973: for (dirty_tx = ep->dirty_tx; dirty_tx < ep->cur_tx; dirty_tx++) {
974: int entry = dirty_tx % TX_RING_SIZE;
975: int txstatus = ep->tx_ring[entry].status;
976:
977: if (txstatus < 0)
978: break; /* It still hasn't been Txed */
979:
980: if ( ! (txstatus & 0x0001)) {
981: /* There was an major error, log it. */
982: #ifndef final_version
983: if (epic_debug > 1)
984: printk("%s: Transmit error, Tx status %8.8x.\n",
985: dev->name, txstatus);
986: #endif
987: ep->stats.tx_errors++;
988: if (txstatus & 0x1050) ep->stats.tx_aborted_errors++;
989: if (txstatus & 0x0008) ep->stats.tx_carrier_errors++;
990: if (txstatus & 0x0040) ep->stats.tx_window_errors++;
991: if (txstatus & 0x0010) ep->stats.tx_fifo_errors++;
992: #ifdef ETHER_STATS
993: if (txstatus & 0x1000) ep->stats.collisions16++;
994: #endif
995: } else {
996: #ifdef ETHER_STATS
997: if ((txstatus & 0x0002) != 0) ep->stats.tx_deferred++;
998: #endif
999: ep->stats.collisions += (txstatus >> 8) & 15;
1000: ep->stats.tx_packets++;
1001: }
1002:
1003: /* Free the original skb. */
1004: DEV_FREE_SKB(ep->tx_skbuff[entry]);
1005: ep->tx_skbuff[entry] = 0;
1006: }
1007:
1008: #ifndef final_version
1009: if (ep->cur_tx - dirty_tx > TX_RING_SIZE) {
1010: printk("%s: Out-of-sync dirty pointer, %d vs. %d, full=%d.\n",
1011: dev->name, dirty_tx, ep->cur_tx, ep->tx_full);
1012: dirty_tx += TX_RING_SIZE;
1013: }
1014: #endif
1015:
1016: if (ep->tx_full && dev->tbusy
1017: && dirty_tx > ep->cur_tx - TX_RING_SIZE + 2) {
1018: /* The ring is no longer full, clear tbusy. */
1019: ep->tx_full = 0;
1020: clear_bit(0, (void*)&dev->tbusy);
1021: mark_bh(NET_BH);
1022: }
1023:
1024: ep->dirty_tx = dirty_tx;
1025: }
1026:
1027: /* Check uncommon events all at once. */
1028: if (status & (CntFull | TxUnderrun | RxOverflow |
1029: PCIBusErr170 | PCIBusErr175)) {
1030: if (status == 0xffffffff) /* Chip failed or removed (CardBus). */
1031: break;
1032: /* Always update the error counts to avoid overhead later. */
1033: ep->stats.rx_missed_errors += inb(ioaddr + MPCNT);
1034: ep->stats.rx_frame_errors += inb(ioaddr + ALICNT);
1035: ep->stats.rx_crc_errors += inb(ioaddr + CRCCNT);
1036:
1037: if (status & TxUnderrun) { /* Tx FIFO underflow. */
1038: ep->stats.tx_fifo_errors++;
1039: outl(1536, ioaddr + TxThresh);
1040: /* Restart the transmit process. */
1041: outl(0x0080, ioaddr + COMMAND);
1042: }
1043: if (status & RxOverflow) { /* Missed a Rx frame. */
1044: ep->stats.rx_errors++;
1045: }
1046: if (status & PCIBusErr170) {
1047: printk(KERN_ERR "%s: PCI Bus Error! EPIC status %4.4x.\n",
1048: dev->name, status);
1049: epic_pause(dev);
1050: epic_restart(dev);
1051: }
1052: /* Clear all error sources. */
1053: outl(status & 0x7f18, ioaddr + INTSTAT);
1054: }
1055: if (--boguscnt < 0) {
1056: printk(KERN_ERR "%s: Too much work at interrupt, "
1057: "IntrStatus=0x%8.8x.\n",
1058: dev->name, status);
1059: /* Clear all interrupt sources. */
1060: outl(0x0001ffff, ioaddr + INTSTAT);
1061: break;
1062: }
1063: } while (1);
1064:
1065: if (epic_debug > 3)
1066: printk(KERN_DEBUG "%s: exiting interrupt, intr_status=%#4.4x.\n",
1067: dev->name, inl(ioaddr + INTSTAT));
1068:
1069: #if defined(__i386__)
1070: clear_bit(0, (void*)&dev->interrupt);
1071: #else
1072: dev->interrupt = 0;
1073: #endif
1074: return;
1075: }
1076:
1077: static int epic_rx(struct device *dev)
1078: {
1079: struct epic_private *ep = (struct epic_private *)dev->priv;
1080: int entry = ep->cur_rx % RX_RING_SIZE;
1081: int work_done = 0;
1082:
1083: if (epic_debug > 4)
1084: printk(KERN_DEBUG " In epic_rx(), entry %d %8.8x.\n", entry,
1085: ep->rx_ring[entry].status);
1086: /* If we own the next entry, it's a new packet. Send it up. */
1087: while (ep->rx_ring[entry].status >= 0 && ep->rx_skbuff[entry]) {
1088: int status = ep->rx_ring[entry].status;
1089:
1090: if (epic_debug > 4)
1091: printk(KERN_DEBUG " epic_rx() status was %8.8x.\n", status);
1092: if (status & 0x2006) {
1093: if (status & 0x2000) {
1094: printk(KERN_WARNING "%s: Oversized Ethernet frame spanned "
1095: "multiple buffers, status %4.4x!\n", dev->name, status);
1096: ep->stats.rx_length_errors++;
1097: } else if (status & 0x0006)
1098: /* Rx Frame errors are counted in hardware. */
1099: ep->stats.rx_errors++;
1100: } else {
1101: /* Malloc up new buffer, compatible with net-2e. */
1102: /* Omit the four octet CRC from the length. */
1103: short pkt_len = ep->rx_ring[entry].rxlength - 4;
1104: struct sk_buff *skb;
1105:
1106: /* Check if the packet is long enough to accept without copying
1107: to a minimally-sized skbuff. */
1108: if (pkt_len < rx_copybreak
1109: && (skb = dev_alloc_skb(pkt_len + 2)) != NULL) {
1110: skb->dev = dev;
1111: skb_reserve(skb, 2); /* 16 byte align the IP header */
1112: #if 1 /* USE_IP_COPYSUM */
1113: eth_copy_and_sum(skb, bus_to_virt(ep->rx_ring[entry].bufaddr),
1114: pkt_len, 0);
1115: skb_put(skb, pkt_len);
1116: #else
1117: memcpy(skb_put(skb, pkt_len),
1118: bus_to_virt(ep->rx_ring[entry].bufaddr), pkt_len);
1119: #endif
1120: } else {
1121: skb_put(skb = ep->rx_skbuff[entry], pkt_len);
1122: ep->rx_skbuff[entry] = NULL;
1123: }
1124: skb->protocol = eth_type_trans(skb, dev);
1125: netif_rx(skb);
1126: ep->stats.rx_packets++;
1127: }
1128: work_done++;
1129: entry = (++ep->cur_rx) % RX_RING_SIZE;
1130: }
1131:
1132: /* Refill the Rx ring buffers. */
1133: for (; ep->cur_rx - ep->dirty_rx > 0; ep->dirty_rx++) {
1134: entry = ep->dirty_rx % RX_RING_SIZE;
1135: if (ep->rx_skbuff[entry] == NULL) {
1136: struct sk_buff *skb;
1137: skb = ep->rx_skbuff[entry] = dev_alloc_skb(PKT_BUF_SZ);
1138: if (skb == NULL)
1139: break;
1140: skb->dev = dev; /* Mark as being used by this device. */
1141: skb_reserve(skb, 2); /* Align IP on 16 byte boundaries */
1142: ep->rx_ring[entry].bufaddr = virt_to_bus(skb->tail);
1143: work_done++;
1144: }
1145: ep->rx_ring[entry].status = 0x8000;
1146: }
1147: return work_done;
1148: }
1149:
1150: static int epic_close(struct device *dev)
1151: {
1152: long ioaddr = dev->base_addr;
1153: struct epic_private *ep = (struct epic_private *)dev->priv;
1154: int i;
1155:
1156: dev->start = 0;
1157: dev->tbusy = 1;
1158:
1159: if (epic_debug > 1)
1160: printk(KERN_DEBUG "%s: Shutting down ethercard, status was %2.2x.\n",
1161: dev->name, inl(ioaddr + INTSTAT));
1162:
1163: /* Disable interrupts by clearing the interrupt mask. */
1164: outl(0x00000000, ioaddr + INTMASK);
1165: /* Stop the chip's Tx and Rx DMA processes. */
1166: outw(0x0061, ioaddr + COMMAND);
1167:
1168: /* Update the error counts. */
1169: ep->stats.rx_missed_errors += inb(ioaddr + MPCNT);
1170: ep->stats.rx_frame_errors += inb(ioaddr + ALICNT);
1171: ep->stats.rx_crc_errors += inb(ioaddr + CRCCNT);
1172:
1173: del_timer(&ep->timer);
1174:
1175: free_irq(dev->irq, dev);
1176:
1177: /* Free all the skbuffs in the Rx queue. */
1178: for (i = 0; i < RX_RING_SIZE; i++) {
1179: struct sk_buff *skb = ep->rx_skbuff[i];
1180: ep->rx_skbuff[i] = 0;
1181: ep->rx_ring[i].status = 0; /* Not owned by Epic chip. */
1182: ep->rx_ring[i].buflength = 0;
1183: ep->rx_ring[i].bufaddr = 0xBADF00D0; /* An invalid address. */
1184: if (skb) {
1185: #if LINUX_VERSION_CODE < 0x20100
1186: skb->free = 1;
1187: #endif
1188: DEV_FREE_SKB(skb);
1189: }
1190: }
1191: for (i = 0; i < TX_RING_SIZE; i++) {
1192: if (ep->tx_skbuff[i])
1193: DEV_FREE_SKB(ep->tx_skbuff[i]);
1194: ep->tx_skbuff[i] = 0;
1195: }
1196:
1197:
1198: /* Green! Leave the chip in low-power mode. */
1199: outl(0x0008, ioaddr + GENCTL);
1200:
1201: MOD_DEC_USE_COUNT;
1202:
1203: return 0;
1204: }
1205:
1206: static struct net_device_stats *epic_get_stats(struct device *dev)
1207: {
1208: struct epic_private *ep = (struct epic_private *)dev->priv;
1209: long ioaddr = dev->base_addr;
1210:
1211: if (dev->start) {
1212: /* Update the error counts. */
1213: ep->stats.rx_missed_errors += inb(ioaddr + MPCNT);
1214: ep->stats.rx_frame_errors += inb(ioaddr + ALICNT);
1215: ep->stats.rx_crc_errors += inb(ioaddr + CRCCNT);
1216: }
1217:
1218: return &ep->stats;
1219: }
1220:
1221: /* Set or clear the multicast filter for this adaptor.
1222: Note that we only use exclusion around actually queueing the
1223: new frame, not around filling ep->setup_frame. This is non-deterministic
1224: when re-entered but still correct. */
1225:
1226: /* The little-endian AUTODIN II ethernet CRC calculation.
1227: N.B. Do not use for bulk data, use a table-based routine instead.
1228: This is common code and should be moved to net/core/crc.c */
1229: static unsigned const ethernet_polynomial_le = 0xedb88320U;
1230: static inline unsigned ether_crc_le(int length, unsigned char *data)
1231: {
1232: unsigned int crc = 0xffffffff; /* Initial value. */
1233: while(--length >= 0) {
1234: unsigned char current_octet = *data++;
1235: int bit;
1236: for (bit = 8; --bit >= 0; current_octet >>= 1) {
1237: if ((crc ^ current_octet) & 1) {
1238: crc >>= 1;
1239: crc ^= ethernet_polynomial_le;
1240: } else
1241: crc >>= 1;
1242: }
1243: }
1244: return crc;
1245: }
1246:
1247:
1248: static void set_rx_mode(struct device *dev)
1249: {
1250: long ioaddr = dev->base_addr;
1251: struct epic_private *ep = (struct epic_private *)dev->priv;
1252: unsigned char mc_filter[8]; /* Multicast hash filter */
1253: int i;
1254:
1255: if (dev->flags & IFF_PROMISC) { /* Set promiscuous. */
1256: outl(0x002C, ioaddr + RxCtrl);
1257: /* Unconditionally log net taps. */
1258: printk(KERN_INFO "%s: Promiscuous mode enabled.\n", dev->name);
1259: memset(mc_filter, 0xff, sizeof(mc_filter));
1260: } else if ((dev->mc_count > 0) || (dev->flags & IFF_ALLMULTI)) {
1261: /* There is apparently a chip bug, so the multicast filter
1262: is never enabled. */
1263: /* Too many to filter perfectly -- accept all multicasts. */
1264: memset(mc_filter, 0xff, sizeof(mc_filter));
1265: outl(0x000C, ioaddr + RxCtrl);
1266: } else if (dev->mc_count == 0) {
1267: outl(0x0004, ioaddr + RxCtrl);
1268: return;
1269: } else { /* Never executed, for now. */
1270: struct dev_mc_list *mclist;
1271:
1272: memset(mc_filter, 0, sizeof(mc_filter));
1273: for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
1274: i++, mclist = mclist->next)
1275: set_bit(ether_crc_le(ETH_ALEN, mclist->dmi_addr) & 0x3f,
1276: mc_filter);
1277: }
1278: /* ToDo: perhaps we need to stop the Tx and Rx process here? */
1279: if (memcmp(mc_filter, ep->mc_filter, sizeof(mc_filter))) {
1280: for (i = 0; i < 4; i++)
1281: outw(((u16 *)mc_filter)[i], ioaddr + MC0 + i*4);
1282: memcpy(ep->mc_filter, mc_filter, sizeof(mc_filter));
1283: }
1284: return;
1285: }
1286:
1287: static int mii_ioctl(struct device *dev, struct ifreq *rq, int cmd)
1288: {
1289: long ioaddr = dev->base_addr;
1290: u16 *data = (u16 *)&rq->ifr_data;
1291:
1292: switch(cmd) {
1293: case SIOCDEVPRIVATE: /* Get the address of the PHY in use. */
1294: data[0] = ((struct epic_private *)dev->priv)->phys[0] & 0x1f;
1295: /* Fall Through */
1296: case SIOCDEVPRIVATE+1: /* Read the specified MII register. */
1297: if (! dev->start) {
1298: outl(0x0200, ioaddr + GENCTL);
1299: outl((inl(ioaddr + NVCTL) & ~0x003C) | 0x4800, ioaddr + NVCTL);
1300: }
1301: data[3] = mdio_read(ioaddr, data[0] & 0x1f, data[1] & 0x1f);
1302: if (! dev->start) {
1303: #ifdef notdef
1304: outl(0x0008, ioaddr + GENCTL);
1305: outl((inl(ioaddr + NVCTL) & ~0x483C) | 0x0000, ioaddr + NVCTL);
1306: #endif
1307: }
1308: return 0;
1309: case SIOCDEVPRIVATE+2: /* Write the specified MII register */
1310: if (!suser())
1311: return -EPERM;
1312: if (! dev->start) {
1313: outl(0x0200, ioaddr + GENCTL);
1314: outl((inl(ioaddr + NVCTL) & ~0x003C) | 0x4800, ioaddr + NVCTL);
1315: }
1316: mdio_write(ioaddr, data[0] & 0x1f, data[1] & 0x1f, data[2]);
1317: if (! dev->start) {
1318: #ifdef notdef
1319: outl(0x0008, ioaddr + GENCTL);
1320: outl((inl(ioaddr + NVCTL) & ~0x483C) | 0x0000, ioaddr + NVCTL);
1321: #endif
1322: }
1323: return 0;
1324: default:
1325: return -EOPNOTSUPP;
1326: }
1327: }
1328:
1329:
1330: #ifdef CARDBUS
1331:
1332: #include <pcmcia/driver_ops.h>
1333:
1334: static dev_node_t *epic_attach(dev_locator_t *loc)
1335: {
1336: struct device *dev;
1337: u16 dev_id;
1338: u32 io;
1339: u8 bus, devfn, irq;
1340:
1341: if (loc->bus != LOC_PCI) return NULL;
1342: bus = loc->b.pci.bus; devfn = loc->b.pci.devfn;
1343: printk(KERN_INFO "epic_attach(bus %d, function %d)\n", bus, devfn);
1344: pcibios_read_config_dword(bus, devfn, PCI_BASE_ADDRESS_0, &io);
1345: pcibios_read_config_byte(bus, devfn, PCI_INTERRUPT_LINE, &irq);
1346: pcibios_read_config_word(bus, devfn, PCI_DEVICE_ID, &dev_id);
1347: io &= ~3;
1348: dev = epic_probe1(bus, devfn, NULL, -1);
1349: if (dev) {
1350: dev_node_t *node = kmalloc(sizeof(dev_node_t), GFP_KERNEL);
1351: strcpy(node->dev_name, dev->name);
1352: node->major = node->minor = 0;
1353: node->next = NULL;
1354: MOD_INC_USE_COUNT;
1355: return node;
1356: }
1357: return NULL;
1358: }
1359:
1360: static void epic_suspend(dev_node_t *node)
1361: {
1362: struct device **devp, **next;
1363: printk(KERN_INFO "epic_suspend(%s)\n", node->dev_name);
1364: for (devp = &root_epic_dev; *devp; devp = next) {
1365: next = &((struct epic_private *)(*devp)->priv)->next_module;
1366: if (strcmp((*devp)->name, node->dev_name) == 0) break;
1367: }
1368: if (*devp) {
1369: long ioaddr = (*devp)->base_addr;
1370: epic_pause(*devp);
1371: /* Put the chip into low-power mode. */
1372: outl(0x0008, ioaddr + GENCTL);
1373: }
1374: }
1375: static void epic_resume(dev_node_t *node)
1376: {
1377: struct device **devp, **next;
1378: printk(KERN_INFO "epic_resume(%s)\n", node->dev_name);
1379: for (devp = &root_epic_dev; *devp; devp = next) {
1380: next = &((struct epic_private *)(*devp)->priv)->next_module;
1381: if (strcmp((*devp)->name, node->dev_name) == 0) break;
1382: }
1383: if (*devp) {
1384: epic_restart(*devp);
1385: }
1386: }
1387: static void epic_detach(dev_node_t *node)
1388: {
1389: struct device **devp, **next;
1390: printk(KERN_INFO "epic_detach(%s)\n", node->dev_name);
1391: for (devp = &root_epic_dev; *devp; devp = next) {
1392: next = &((struct epic_private *)(*devp)->priv)->next_module;
1393: if (strcmp((*devp)->name, node->dev_name) == 0) break;
1394: }
1395: if (*devp) {
1396: unregister_netdev(*devp);
1397: kfree(*devp);
1398: *devp = *next;
1399: kfree(node);
1400: MOD_DEC_USE_COUNT;
1401: }
1402: }
1403:
1404: struct driver_operations epic_ops = {
1405: "epic_cb", epic_attach, epic_suspend, epic_resume, epic_detach
1406: };
1407:
1408: #endif /* Cardbus support */
1409:
1410:
1411: #ifdef MODULE
1412:
1413: /* An additional parameter that may be passed in... */
1414: static int debug = -1;
1415:
1416: int
1417: init_module(void)
1418: {
1419: if (debug >= 0)
1420: epic_debug = debug;
1421:
1422: #ifdef CARDBUS
1423: register_driver(&epic_ops);
1424: return 0;
1425: #else
1426: return epic100_probe(0);
1427: #endif
1428: }
1429:
1430: void
1431: cleanup_module(void)
1432: {
1433: struct device *next_dev;
1434:
1435: #ifdef CARDBUS
1436: unregister_driver(&epic_ops);
1437: #endif
1438:
1439: /* No need to check MOD_IN_USE, as sys_delete_module() checks. */
1440: while (root_epic_dev) {
1441: next_dev = ((struct epic_private *)root_epic_dev->priv)->next_module;
1442: unregister_netdev(root_epic_dev);
1443: release_region(root_epic_dev->base_addr, EPIC_TOTAL_SIZE);
1444: kfree(root_epic_dev);
1445: root_epic_dev = next_dev;
1446: }
1447: }
1448:
1449: #endif /* MODULE */
1450:
1451: /*
1452: * Local variables:
1453: * compile-command: "gcc -DMODULE -D__KERNEL__ -Wall -Wstrict-prototypes -O6 -c epic100.c `[ -f /usr/include/linux/modversions.h ] && echo -DMODVERSIONS`"
1454: * cardbus-compile-command: "gcc -DCARDBUS -DMODULE -D__KERNEL__ -Wall -Wstrict-prototypes -O6 -c epic100.c -o epic_cb.o -I/usr/src/pcmcia-cs-3.0.5/include/"
1455: * c-indent-level: 4
1456: * c-basic-offset: 4
1457: * tab-width: 4
1458: * End:
1459: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.