Linux 2.6.20.7
[linux/fpc-iii.git] / drivers / net / epic100.c
blob3a6a83d3ee1cea872823419e8642d78c49e3e622
1 /* epic100.c: A SMC 83c170 EPIC/100 Fast Ethernet driver for Linux. */
2 /*
3 Written/copyright 1997-2001 by Donald Becker.
5 This software may be used and distributed according to the terms of
6 the GNU General Public License (GPL), incorporated herein by reference.
7 Drivers based on or derived from this code fall under the GPL and must
8 retain the authorship, copyright and license notice. This file is not
9 a complete program and may only be used when the entire operating
10 system is licensed under the GPL.
12 This driver is for the SMC83c170/175 "EPIC" series, as used on the
13 SMC EtherPower II 9432 PCI adapter, and several CardBus cards.
15 The author may be reached as becker@scyld.com, or C/O
16 Scyld Computing Corporation
17 410 Severn Ave., Suite 210
18 Annapolis MD 21403
20 Information and updates available at
21 http://www.scyld.com/network/epic100.html
22 [this link no longer provides anything useful -jgarzik]
24 ---------------------------------------------------------------------
28 #define DRV_NAME "epic100"
29 #define DRV_VERSION "2.1"
30 #define DRV_RELDATE "Sept 11, 2006"
32 /* The user-configurable values.
33 These may be modified when a driver module is loaded.*/
35 static int debug = 1; /* 1 normal messages, 0 quiet .. 7 verbose. */
37 /* Used to pass the full-duplex flag, etc. */
38 #define MAX_UNITS 8 /* More are supported, limit only on options */
39 static int options[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
40 static int full_duplex[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
42 /* Set the copy breakpoint for the copy-only-tiny-frames scheme.
43 Setting to > 1518 effectively disables this feature. */
44 static int rx_copybreak;
46 /* Operational parameters that are set at compile time. */
48 /* Keep the ring sizes a power of two for operational efficiency.
49 The compiler will convert <unsigned>'%'<2^N> into a bit mask.
50 Making the Tx ring too large decreases the effectiveness of channel
51 bonding and packet priority.
52 There are no ill effects from too-large receive rings. */
53 #define TX_RING_SIZE 256
54 #define TX_QUEUE_LEN 240 /* Limit ring entries actually used. */
55 #define RX_RING_SIZE 256
56 #define TX_TOTAL_SIZE TX_RING_SIZE*sizeof(struct epic_tx_desc)
57 #define RX_TOTAL_SIZE RX_RING_SIZE*sizeof(struct epic_rx_desc)
59 /* Operational parameters that usually are not changed. */
60 /* Time in jiffies before concluding the transmitter is hung. */
61 #define TX_TIMEOUT (2*HZ)
63 #define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer.*/
65 /* Bytes transferred to chip before transmission starts. */
66 /* Initial threshold, increased on underflow, rounded down to 4 byte units. */
67 #define TX_FIFO_THRESH 256
68 #define RX_FIFO_THRESH 1 /* 0-3, 0==32, 64,96, or 3==128 bytes */
70 #include <linux/module.h>
71 #include <linux/kernel.h>
72 #include <linux/string.h>
73 #include <linux/timer.h>
74 #include <linux/errno.h>
75 #include <linux/ioport.h>
76 #include <linux/slab.h>
77 #include <linux/interrupt.h>
78 #include <linux/pci.h>
79 #include <linux/delay.h>
80 #include <linux/netdevice.h>
81 #include <linux/etherdevice.h>
82 #include <linux/skbuff.h>
83 #include <linux/init.h>
84 #include <linux/spinlock.h>
85 #include <linux/ethtool.h>
86 #include <linux/mii.h>
87 #include <linux/crc32.h>
88 #include <linux/bitops.h>
89 #include <asm/io.h>
90 #include <asm/uaccess.h>
92 /* These identify the driver base version and may not be removed. */
93 static char version[] __devinitdata =
94 DRV_NAME ".c:v1.11 1/7/2001 Written by Donald Becker <becker@scyld.com>\n";
95 static char version2[] __devinitdata =
96 " http://www.scyld.com/network/epic100.html\n";
97 static char version3[] __devinitdata =
98 " (unofficial 2.4.x kernel port, version " DRV_VERSION ", " DRV_RELDATE ")\n";
100 MODULE_AUTHOR("Donald Becker <becker@scyld.com>");
101 MODULE_DESCRIPTION("SMC 83c170 EPIC series Ethernet driver");
102 MODULE_LICENSE("GPL");
104 module_param(debug, int, 0);
105 module_param(rx_copybreak, int, 0);
106 module_param_array(options, int, NULL, 0);
107 module_param_array(full_duplex, int, NULL, 0);
108 MODULE_PARM_DESC(debug, "EPIC/100 debug level (0-5)");
109 MODULE_PARM_DESC(options, "EPIC/100: Bits 0-3: media type, bit 4: full duplex");
110 MODULE_PARM_DESC(rx_copybreak, "EPIC/100 copy breakpoint for copy-only-tiny-frames");
111 MODULE_PARM_DESC(full_duplex, "EPIC/100 full duplex setting(s) (1)");
114 Theory of Operation
116 I. Board Compatibility
118 This device driver is designed for the SMC "EPIC/100", the SMC
119 single-chip Ethernet controllers for PCI. This chip is used on
120 the SMC EtherPower II boards.
122 II. Board-specific settings
124 PCI bus devices are configured by the system at boot time, so no jumpers
125 need to be set on the board. The system BIOS will assign the
126 PCI INTA signal to a (preferably otherwise unused) system IRQ line.
127 Note: Kernel versions earlier than 1.3.73 do not support shared PCI
128 interrupt lines.
130 III. Driver operation
132 IIIa. Ring buffers
134 IVb. References
136 http://www.smsc.com/main/datasheets/83c171.pdf
137 http://www.smsc.com/main/datasheets/83c175.pdf
138 http://scyld.com/expert/NWay.html
139 http://www.national.com/pf/DP/DP83840A.html
141 IVc. Errata
146 enum chip_capability_flags { MII_PWRDWN=1, TYPE2_INTR=2, NO_MII=4 };
148 #define EPIC_TOTAL_SIZE 0x100
149 #define USE_IO_OPS 1
151 typedef enum {
152 SMSC_83C170_0,
153 SMSC_83C170,
154 SMSC_83C175,
155 } chip_t;
158 struct epic_chip_info {
159 const char *name;
160 int drv_flags; /* Driver use, intended as capability flags. */
164 /* indexed by chip_t */
165 static const struct epic_chip_info pci_id_tbl[] = {
166 { "SMSC EPIC/100 83c170", TYPE2_INTR | NO_MII | MII_PWRDWN },
167 { "SMSC EPIC/100 83c170", TYPE2_INTR },
168 { "SMSC EPIC/C 83c175", TYPE2_INTR | MII_PWRDWN },
172 static struct pci_device_id epic_pci_tbl[] = {
173 { 0x10B8, 0x0005, 0x1092, 0x0AB4, 0, 0, SMSC_83C170_0 },
174 { 0x10B8, 0x0005, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SMSC_83C170 },
175 { 0x10B8, 0x0006, PCI_ANY_ID, PCI_ANY_ID,
176 PCI_CLASS_NETWORK_ETHERNET << 8, 0xffff00, SMSC_83C175 },
177 { 0,}
179 MODULE_DEVICE_TABLE (pci, epic_pci_tbl);
182 #ifndef USE_IO_OPS
183 #undef inb
184 #undef inw
185 #undef inl
186 #undef outb
187 #undef outw
188 #undef outl
189 #define inb readb
190 #define inw readw
191 #define inl readl
192 #define outb writeb
193 #define outw writew
194 #define outl writel
195 #endif
197 /* Offsets to registers, using the (ugh) SMC names. */
198 enum epic_registers {
199 COMMAND=0, INTSTAT=4, INTMASK=8, GENCTL=0x0C, NVCTL=0x10, EECTL=0x14,
200 PCIBurstCnt=0x18,
201 TEST1=0x1C, CRCCNT=0x20, ALICNT=0x24, MPCNT=0x28, /* Rx error counters. */
202 MIICtrl=0x30, MIIData=0x34, MIICfg=0x38,
203 LAN0=64, /* MAC address. */
204 MC0=80, /* Multicast filter table. */
205 RxCtrl=96, TxCtrl=112, TxSTAT=0x74,
206 PRxCDAR=0x84, RxSTAT=0xA4, EarlyRx=0xB0, PTxCDAR=0xC4, TxThresh=0xDC,
209 /* Interrupt register bits, using my own meaningful names. */
210 enum IntrStatus {
211 TxIdle=0x40000, RxIdle=0x20000, IntrSummary=0x010000,
212 PCIBusErr170=0x7000, PCIBusErr175=0x1000, PhyEvent175=0x8000,
213 RxStarted=0x0800, RxEarlyWarn=0x0400, CntFull=0x0200, TxUnderrun=0x0100,
214 TxEmpty=0x0080, TxDone=0x0020, RxError=0x0010,
215 RxOverflow=0x0008, RxFull=0x0004, RxHeader=0x0002, RxDone=0x0001,
217 enum CommandBits {
218 StopRx=1, StartRx=2, TxQueued=4, RxQueued=8,
219 StopTxDMA=0x20, StopRxDMA=0x40, RestartTx=0x80,
222 #define EpicRemoved 0xffffffff /* Chip failed or removed (CardBus) */
224 #define EpicNapiEvent (TxEmpty | TxDone | \
225 RxDone | RxStarted | RxEarlyWarn | RxOverflow | RxFull)
226 #define EpicNormalEvent (0x0000ffff & ~EpicNapiEvent)
228 static const u16 media2miictl[16] = {
229 0, 0x0C00, 0x0C00, 0x2000, 0x0100, 0x2100, 0, 0,
230 0, 0, 0, 0, 0, 0, 0, 0 };
232 /* The EPIC100 Rx and Tx buffer descriptors. */
234 struct epic_tx_desc {
235 u32 txstatus;
236 u32 bufaddr;
237 u32 buflength;
238 u32 next;
241 struct epic_rx_desc {
242 u32 rxstatus;
243 u32 bufaddr;
244 u32 buflength;
245 u32 next;
248 enum desc_status_bits {
249 DescOwn=0x8000,
252 #define PRIV_ALIGN 15 /* Required alignment mask */
253 struct epic_private {
254 struct epic_rx_desc *rx_ring;
255 struct epic_tx_desc *tx_ring;
256 /* The saved address of a sent-in-place packet/buffer, for skfree(). */
257 struct sk_buff* tx_skbuff[TX_RING_SIZE];
258 /* The addresses of receive-in-place skbuffs. */
259 struct sk_buff* rx_skbuff[RX_RING_SIZE];
261 dma_addr_t tx_ring_dma;
262 dma_addr_t rx_ring_dma;
264 /* Ring pointers. */
265 spinlock_t lock; /* Group with Tx control cache line. */
266 spinlock_t napi_lock;
267 unsigned int reschedule_in_poll;
268 unsigned int cur_tx, dirty_tx;
270 unsigned int cur_rx, dirty_rx;
271 u32 irq_mask;
272 unsigned int rx_buf_sz; /* Based on MTU+slack. */
274 struct pci_dev *pci_dev; /* PCI bus location. */
275 int chip_id, chip_flags;
277 struct net_device_stats stats;
278 struct timer_list timer; /* Media selection timer. */
279 int tx_threshold;
280 unsigned char mc_filter[8];
281 signed char phys[4]; /* MII device addresses. */
282 u16 advertising; /* NWay media advertisement */
283 int mii_phy_cnt;
284 struct mii_if_info mii;
285 unsigned int tx_full:1; /* The Tx queue is full. */
286 unsigned int default_port:4; /* Last dev->if_port value. */
289 static int epic_open(struct net_device *dev);
290 static int read_eeprom(long ioaddr, int location);
291 static int mdio_read(struct net_device *dev, int phy_id, int location);
292 static void mdio_write(struct net_device *dev, int phy_id, int loc, int val);
293 static void epic_restart(struct net_device *dev);
294 static void epic_timer(unsigned long data);
295 static void epic_tx_timeout(struct net_device *dev);
296 static void epic_init_ring(struct net_device *dev);
297 static int epic_start_xmit(struct sk_buff *skb, struct net_device *dev);
298 static int epic_rx(struct net_device *dev, int budget);
299 static int epic_poll(struct net_device *dev, int *budget);
300 static irqreturn_t epic_interrupt(int irq, void *dev_instance);
301 static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
302 static const struct ethtool_ops netdev_ethtool_ops;
303 static int epic_close(struct net_device *dev);
304 static struct net_device_stats *epic_get_stats(struct net_device *dev);
305 static void set_rx_mode(struct net_device *dev);
309 static int __devinit epic_init_one (struct pci_dev *pdev,
310 const struct pci_device_id *ent)
312 static int card_idx = -1;
313 long ioaddr;
314 int chip_idx = (int) ent->driver_data;
315 int irq;
316 struct net_device *dev;
317 struct epic_private *ep;
318 int i, ret, option = 0, duplex = 0;
319 void *ring_space;
320 dma_addr_t ring_dma;
322 /* when built into the kernel, we only print version if device is found */
323 #ifndef MODULE
324 static int printed_version;
325 if (!printed_version++)
326 printk (KERN_INFO "%s" KERN_INFO "%s" KERN_INFO "%s",
327 version, version2, version3);
328 #endif
330 card_idx++;
332 ret = pci_enable_device(pdev);
333 if (ret)
334 goto out;
335 irq = pdev->irq;
337 if (pci_resource_len(pdev, 0) < EPIC_TOTAL_SIZE) {
338 dev_err(&pdev->dev, "no PCI region space\n");
339 ret = -ENODEV;
340 goto err_out_disable;
343 pci_set_master(pdev);
345 ret = pci_request_regions(pdev, DRV_NAME);
346 if (ret < 0)
347 goto err_out_disable;
349 ret = -ENOMEM;
351 dev = alloc_etherdev(sizeof (*ep));
352 if (!dev) {
353 dev_err(&pdev->dev, "no memory for eth device\n");
354 goto err_out_free_res;
356 SET_MODULE_OWNER(dev);
357 SET_NETDEV_DEV(dev, &pdev->dev);
359 #ifdef USE_IO_OPS
360 ioaddr = pci_resource_start (pdev, 0);
361 #else
362 ioaddr = pci_resource_start (pdev, 1);
363 ioaddr = (long) ioremap (ioaddr, pci_resource_len (pdev, 1));
364 if (!ioaddr) {
365 dev_err(&pdev->dev, "ioremap failed\n");
366 goto err_out_free_netdev;
368 #endif
370 pci_set_drvdata(pdev, dev);
371 ep = dev->priv;
372 ep->mii.dev = dev;
373 ep->mii.mdio_read = mdio_read;
374 ep->mii.mdio_write = mdio_write;
375 ep->mii.phy_id_mask = 0x1f;
376 ep->mii.reg_num_mask = 0x1f;
378 ring_space = pci_alloc_consistent(pdev, TX_TOTAL_SIZE, &ring_dma);
379 if (!ring_space)
380 goto err_out_iounmap;
381 ep->tx_ring = (struct epic_tx_desc *)ring_space;
382 ep->tx_ring_dma = ring_dma;
384 ring_space = pci_alloc_consistent(pdev, RX_TOTAL_SIZE, &ring_dma);
385 if (!ring_space)
386 goto err_out_unmap_tx;
387 ep->rx_ring = (struct epic_rx_desc *)ring_space;
388 ep->rx_ring_dma = ring_dma;
390 if (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];
400 dev->base_addr = ioaddr;
401 dev->irq = irq;
403 spin_lock_init(&ep->lock);
404 spin_lock_init(&ep->napi_lock);
405 ep->reschedule_in_poll = 0;
407 /* Bring the chip out of low-power mode. */
408 outl(0x4200, ioaddr + GENCTL);
409 /* Magic?! If we don't set this bit the MII interface won't work. */
410 /* This magic is documented in SMSC app note 7.15 */
411 for (i = 16; i > 0; i--)
412 outl(0x0008, ioaddr + TEST1);
414 /* Turn on the MII transceiver. */
415 outl(0x12, ioaddr + MIICfg);
416 if (chip_idx == 1)
417 outl((inl(ioaddr + NVCTL) & ~0x003C) | 0x4800, ioaddr + NVCTL);
418 outl(0x0200, ioaddr + GENCTL);
420 /* Note: the '175 does not have a serial EEPROM. */
421 for (i = 0; i < 3; i++)
422 ((u16 *)dev->dev_addr)[i] = le16_to_cpu(inw(ioaddr + LAN0 + i*4));
424 if (debug > 2) {
425 dev_printk(KERN_DEBUG, &pdev->dev, "EEPROM contents:\n");
426 for (i = 0; i < 64; i++)
427 printk(" %4.4x%s", read_eeprom(ioaddr, i),
428 i % 16 == 15 ? "\n" : "");
431 ep->pci_dev = pdev;
432 ep->chip_id = chip_idx;
433 ep->chip_flags = pci_id_tbl[chip_idx].drv_flags;
434 ep->irq_mask =
435 (ep->chip_flags & TYPE2_INTR ? PCIBusErr175 : PCIBusErr170)
436 | CntFull | TxUnderrun | EpicNapiEvent;
438 /* Find the connected MII xcvrs.
439 Doing this in open() would allow detecting external xcvrs later, but
440 takes much time and no cards have external MII. */
442 int phy, phy_idx = 0;
443 for (phy = 1; phy < 32 && phy_idx < sizeof(ep->phys); phy++) {
444 int mii_status = mdio_read(dev, phy, MII_BMSR);
445 if (mii_status != 0xffff && mii_status != 0x0000) {
446 ep->phys[phy_idx++] = phy;
447 dev_info(&pdev->dev,
448 "MII transceiver #%d control "
449 "%4.4x status %4.4x.\n",
450 phy, mdio_read(dev, phy, 0), mii_status);
453 ep->mii_phy_cnt = phy_idx;
454 if (phy_idx != 0) {
455 phy = ep->phys[0];
456 ep->mii.advertising = mdio_read(dev, phy, MII_ADVERTISE);
457 dev_info(&pdev->dev,
458 "Autonegotiation advertising %4.4x link "
459 "partner %4.4x.\n",
460 ep->mii.advertising, mdio_read(dev, phy, 5));
461 } else if ( ! (ep->chip_flags & NO_MII)) {
462 dev_warn(&pdev->dev,
463 "***WARNING***: No MII transceiver found!\n");
464 /* Use the known PHY address of the EPII. */
465 ep->phys[0] = 3;
467 ep->mii.phy_id = ep->phys[0];
470 /* Turn off the MII xcvr (175 only!), leave the chip in low-power mode. */
471 if (ep->chip_flags & MII_PWRDWN)
472 outl(inl(ioaddr + NVCTL) & ~0x483C, ioaddr + NVCTL);
473 outl(0x0008, ioaddr + GENCTL);
475 /* The lower four bits are the media type. */
476 if (duplex) {
477 ep->mii.force_media = ep->mii.full_duplex = 1;
478 dev_info(&pdev->dev, "Forced full duplex requested.\n");
480 dev->if_port = ep->default_port = option;
482 /* The Epic-specific entries in the device structure. */
483 dev->open = &epic_open;
484 dev->hard_start_xmit = &epic_start_xmit;
485 dev->stop = &epic_close;
486 dev->get_stats = &epic_get_stats;
487 dev->set_multicast_list = &set_rx_mode;
488 dev->do_ioctl = &netdev_ioctl;
489 dev->ethtool_ops = &netdev_ethtool_ops;
490 dev->watchdog_timeo = TX_TIMEOUT;
491 dev->tx_timeout = &epic_tx_timeout;
492 dev->poll = epic_poll;
493 dev->weight = 64;
495 ret = register_netdev(dev);
496 if (ret < 0)
497 goto err_out_unmap_rx;
499 printk(KERN_INFO "%s: %s at %#lx, IRQ %d, ",
500 dev->name, pci_id_tbl[chip_idx].name, ioaddr, dev->irq);
501 for (i = 0; i < 5; i++)
502 printk("%2.2x:", dev->dev_addr[i]);
503 printk("%2.2x.\n", dev->dev_addr[i]);
505 out:
506 return ret;
508 err_out_unmap_rx:
509 pci_free_consistent(pdev, RX_TOTAL_SIZE, ep->rx_ring, ep->rx_ring_dma);
510 err_out_unmap_tx:
511 pci_free_consistent(pdev, TX_TOTAL_SIZE, ep->tx_ring, ep->tx_ring_dma);
512 err_out_iounmap:
513 #ifndef USE_IO_OPS
514 iounmap(ioaddr);
515 err_out_free_netdev:
516 #endif
517 free_netdev(dev);
518 err_out_free_res:
519 pci_release_regions(pdev);
520 err_out_disable:
521 pci_disable_device(pdev);
522 goto out;
525 /* Serial EEPROM section. */
527 /* EEPROM_Ctrl bits. */
528 #define EE_SHIFT_CLK 0x04 /* EEPROM shift clock. */
529 #define EE_CS 0x02 /* EEPROM chip select. */
530 #define EE_DATA_WRITE 0x08 /* EEPROM chip data in. */
531 #define EE_WRITE_0 0x01
532 #define EE_WRITE_1 0x09
533 #define EE_DATA_READ 0x10 /* EEPROM chip data out. */
534 #define EE_ENB (0x0001 | EE_CS)
536 /* Delay between EEPROM clock transitions.
537 This serves to flush the operation to the PCI bus.
540 #define eeprom_delay() inl(ee_addr)
542 /* The EEPROM commands include the alway-set leading bit. */
543 #define EE_WRITE_CMD (5 << 6)
544 #define EE_READ64_CMD (6 << 6)
545 #define EE_READ256_CMD (6 << 8)
546 #define EE_ERASE_CMD (7 << 6)
548 static void epic_disable_int(struct net_device *dev, struct epic_private *ep)
550 long ioaddr = dev->base_addr;
552 outl(0x00000000, ioaddr + INTMASK);
555 static inline void __epic_pci_commit(long ioaddr)
557 #ifndef USE_IO_OPS
558 inl(ioaddr + INTMASK);
559 #endif
562 static inline void epic_napi_irq_off(struct net_device *dev,
563 struct epic_private *ep)
565 long ioaddr = dev->base_addr;
567 outl(ep->irq_mask & ~EpicNapiEvent, ioaddr + INTMASK);
568 __epic_pci_commit(ioaddr);
571 static inline void epic_napi_irq_on(struct net_device *dev,
572 struct epic_private *ep)
574 long ioaddr = dev->base_addr;
576 /* No need to commit possible posted write */
577 outl(ep->irq_mask | EpicNapiEvent, ioaddr + INTMASK);
580 static int __devinit read_eeprom(long ioaddr, int location)
582 int i;
583 int retval = 0;
584 long ee_addr = ioaddr + EECTL;
585 int read_cmd = location |
586 (inl(ee_addr) & 0x40 ? EE_READ64_CMD : EE_READ256_CMD);
588 outl(EE_ENB & ~EE_CS, ee_addr);
589 outl(EE_ENB, ee_addr);
591 /* Shift the read command bits out. */
592 for (i = 12; i >= 0; i--) {
593 short dataval = (read_cmd & (1 << i)) ? EE_WRITE_1 : EE_WRITE_0;
594 outl(EE_ENB | dataval, ee_addr);
595 eeprom_delay();
596 outl(EE_ENB | dataval | EE_SHIFT_CLK, ee_addr);
597 eeprom_delay();
599 outl(EE_ENB, ee_addr);
601 for (i = 16; i > 0; i--) {
602 outl(EE_ENB | EE_SHIFT_CLK, ee_addr);
603 eeprom_delay();
604 retval = (retval << 1) | ((inl(ee_addr) & EE_DATA_READ) ? 1 : 0);
605 outl(EE_ENB, ee_addr);
606 eeprom_delay();
609 /* Terminate the EEPROM access. */
610 outl(EE_ENB & ~EE_CS, ee_addr);
611 return retval;
614 #define MII_READOP 1
615 #define MII_WRITEOP 2
616 static int mdio_read(struct net_device *dev, int phy_id, int location)
618 long ioaddr = dev->base_addr;
619 int read_cmd = (phy_id << 9) | (location << 4) | MII_READOP;
620 int i;
622 outl(read_cmd, ioaddr + MIICtrl);
623 /* Typical operation takes 25 loops. */
624 for (i = 400; i > 0; i--) {
625 barrier();
626 if ((inl(ioaddr + MIICtrl) & MII_READOP) == 0) {
627 /* Work around read failure bug. */
628 if (phy_id == 1 && location < 6
629 && inw(ioaddr + MIIData) == 0xffff) {
630 outl(read_cmd, ioaddr + MIICtrl);
631 continue;
633 return inw(ioaddr + MIIData);
636 return 0xffff;
639 static void mdio_write(struct net_device *dev, int phy_id, int loc, int value)
641 long ioaddr = dev->base_addr;
642 int i;
644 outw(value, ioaddr + MIIData);
645 outl((phy_id << 9) | (loc << 4) | MII_WRITEOP, ioaddr + MIICtrl);
646 for (i = 10000; i > 0; i--) {
647 barrier();
648 if ((inl(ioaddr + MIICtrl) & MII_WRITEOP) == 0)
649 break;
651 return;
655 static int epic_open(struct net_device *dev)
657 struct epic_private *ep = dev->priv;
658 long ioaddr = dev->base_addr;
659 int i;
660 int retval;
662 /* Soft reset the chip. */
663 outl(0x4001, ioaddr + GENCTL);
665 if ((retval = request_irq(dev->irq, &epic_interrupt, IRQF_SHARED, dev->name, dev)))
666 return retval;
668 epic_init_ring(dev);
670 outl(0x4000, ioaddr + GENCTL);
671 /* This magic is documented in SMSC app note 7.15 */
672 for (i = 16; i > 0; i--)
673 outl(0x0008, ioaddr + TEST1);
675 /* Pull the chip out of low-power mode, enable interrupts, and set for
676 PCI read multiple. The MIIcfg setting and strange write order are
677 required by the details of which bits are reset and the transceiver
678 wiring on the Ositech CardBus card.
680 #if 0
681 outl(dev->if_port == 1 ? 0x13 : 0x12, ioaddr + MIICfg);
682 #endif
683 if (ep->chip_flags & MII_PWRDWN)
684 outl((inl(ioaddr + NVCTL) & ~0x003C) | 0x4800, ioaddr + NVCTL);
686 #if defined(__powerpc__) || defined(__sparc__) /* Big endian */
687 outl(0x4432 | (RX_FIFO_THRESH<<8), ioaddr + GENCTL);
688 inl(ioaddr + GENCTL);
689 outl(0x0432 | (RX_FIFO_THRESH<<8), ioaddr + GENCTL);
690 #else
691 outl(0x4412 | (RX_FIFO_THRESH<<8), ioaddr + GENCTL);
692 inl(ioaddr + GENCTL);
693 outl(0x0412 | (RX_FIFO_THRESH<<8), ioaddr + GENCTL);
694 #endif
696 udelay(20); /* Looks like EPII needs that if you want reliable RX init. FIXME: pci posting bug? */
698 for (i = 0; i < 3; i++)
699 outl(cpu_to_le16(((u16*)dev->dev_addr)[i]), ioaddr + LAN0 + i*4);
701 ep->tx_threshold = TX_FIFO_THRESH;
702 outl(ep->tx_threshold, ioaddr + TxThresh);
704 if (media2miictl[dev->if_port & 15]) {
705 if (ep->mii_phy_cnt)
706 mdio_write(dev, ep->phys[0], MII_BMCR, media2miictl[dev->if_port&15]);
707 if (dev->if_port == 1) {
708 if (debug > 1)
709 printk(KERN_INFO "%s: Using the 10base2 transceiver, MII "
710 "status %4.4x.\n",
711 dev->name, mdio_read(dev, ep->phys[0], MII_BMSR));
713 } else {
714 int mii_lpa = mdio_read(dev, ep->phys[0], MII_LPA);
715 if (mii_lpa != 0xffff) {
716 if ((mii_lpa & LPA_100FULL) || (mii_lpa & 0x01C0) == LPA_10FULL)
717 ep->mii.full_duplex = 1;
718 else if (! (mii_lpa & LPA_LPACK))
719 mdio_write(dev, ep->phys[0], MII_BMCR, BMCR_ANENABLE|BMCR_ANRESTART);
720 if (debug > 1)
721 printk(KERN_INFO "%s: Setting %s-duplex based on MII xcvr %d"
722 " register read of %4.4x.\n", dev->name,
723 ep->mii.full_duplex ? "full" : "half",
724 ep->phys[0], mii_lpa);
728 outl(ep->mii.full_duplex ? 0x7F : 0x79, ioaddr + TxCtrl);
729 outl(ep->rx_ring_dma, ioaddr + PRxCDAR);
730 outl(ep->tx_ring_dma, ioaddr + PTxCDAR);
732 /* Start the chip's Rx process. */
733 set_rx_mode(dev);
734 outl(StartRx | RxQueued, ioaddr + COMMAND);
736 netif_start_queue(dev);
738 /* Enable interrupts by setting the interrupt mask. */
739 outl((ep->chip_flags & TYPE2_INTR ? PCIBusErr175 : PCIBusErr170)
740 | CntFull | TxUnderrun
741 | RxError | RxHeader | EpicNapiEvent, ioaddr + INTMASK);
743 if (debug > 1)
744 printk(KERN_DEBUG "%s: epic_open() ioaddr %lx IRQ %d status %4.4x "
745 "%s-duplex.\n",
746 dev->name, ioaddr, dev->irq, (int)inl(ioaddr + GENCTL),
747 ep->mii.full_duplex ? "full" : "half");
749 /* Set the timer to switch to check for link beat and perhaps switch
750 to an alternate media type. */
751 init_timer(&ep->timer);
752 ep->timer.expires = jiffies + 3*HZ;
753 ep->timer.data = (unsigned long)dev;
754 ep->timer.function = &epic_timer; /* timer handler */
755 add_timer(&ep->timer);
757 return 0;
760 /* Reset the chip to recover from a PCI transaction error.
761 This may occur at interrupt time. */
762 static void epic_pause(struct net_device *dev)
764 long ioaddr = dev->base_addr;
765 struct epic_private *ep = dev->priv;
767 netif_stop_queue (dev);
769 /* Disable interrupts by clearing the interrupt mask. */
770 outl(0x00000000, ioaddr + INTMASK);
771 /* Stop the chip's Tx and Rx DMA processes. */
772 outw(StopRx | StopTxDMA | StopRxDMA, ioaddr + COMMAND);
774 /* Update the error counts. */
775 if (inw(ioaddr + COMMAND) != 0xffff) {
776 ep->stats.rx_missed_errors += inb(ioaddr + MPCNT);
777 ep->stats.rx_frame_errors += inb(ioaddr + ALICNT);
778 ep->stats.rx_crc_errors += inb(ioaddr + CRCCNT);
781 /* Remove the packets on the Rx queue. */
782 epic_rx(dev, RX_RING_SIZE);
785 static void epic_restart(struct net_device *dev)
787 long ioaddr = dev->base_addr;
788 struct epic_private *ep = dev->priv;
789 int i;
791 /* Soft reset the chip. */
792 outl(0x4001, ioaddr + GENCTL);
794 printk(KERN_DEBUG "%s: Restarting the EPIC chip, Rx %d/%d Tx %d/%d.\n",
795 dev->name, ep->cur_rx, ep->dirty_rx, ep->dirty_tx, ep->cur_tx);
796 udelay(1);
798 /* This magic is documented in SMSC app note 7.15 */
799 for (i = 16; i > 0; i--)
800 outl(0x0008, ioaddr + TEST1);
802 #if defined(__powerpc__) || defined(__sparc__) /* Big endian */
803 outl(0x0432 | (RX_FIFO_THRESH<<8), ioaddr + GENCTL);
804 #else
805 outl(0x0412 | (RX_FIFO_THRESH<<8), ioaddr + GENCTL);
806 #endif
807 outl(dev->if_port == 1 ? 0x13 : 0x12, ioaddr + MIICfg);
808 if (ep->chip_flags & MII_PWRDWN)
809 outl((inl(ioaddr + NVCTL) & ~0x003C) | 0x4800, ioaddr + NVCTL);
811 for (i = 0; i < 3; i++)
812 outl(cpu_to_le16(((u16*)dev->dev_addr)[i]), ioaddr + LAN0 + i*4);
814 ep->tx_threshold = TX_FIFO_THRESH;
815 outl(ep->tx_threshold, ioaddr + TxThresh);
816 outl(ep->mii.full_duplex ? 0x7F : 0x79, ioaddr + TxCtrl);
817 outl(ep->rx_ring_dma + (ep->cur_rx%RX_RING_SIZE)*
818 sizeof(struct epic_rx_desc), ioaddr + PRxCDAR);
819 outl(ep->tx_ring_dma + (ep->dirty_tx%TX_RING_SIZE)*
820 sizeof(struct epic_tx_desc), ioaddr + PTxCDAR);
822 /* Start the chip's Rx process. */
823 set_rx_mode(dev);
824 outl(StartRx | RxQueued, ioaddr + COMMAND);
826 /* Enable interrupts by setting the interrupt mask. */
827 outl((ep->chip_flags & TYPE2_INTR ? PCIBusErr175 : PCIBusErr170)
828 | CntFull | TxUnderrun
829 | RxError | RxHeader | EpicNapiEvent, ioaddr + INTMASK);
831 printk(KERN_DEBUG "%s: epic_restart() done, cmd status %4.4x, ctl %4.4x"
832 " interrupt %4.4x.\n",
833 dev->name, (int)inl(ioaddr + COMMAND), (int)inl(ioaddr + GENCTL),
834 (int)inl(ioaddr + INTSTAT));
835 return;
838 static void check_media(struct net_device *dev)
840 struct epic_private *ep = dev->priv;
841 long ioaddr = dev->base_addr;
842 int mii_lpa = ep->mii_phy_cnt ? mdio_read(dev, ep->phys[0], MII_LPA) : 0;
843 int negotiated = mii_lpa & ep->mii.advertising;
844 int duplex = (negotiated & 0x0100) || (negotiated & 0x01C0) == 0x0040;
846 if (ep->mii.force_media)
847 return;
848 if (mii_lpa == 0xffff) /* Bogus read */
849 return;
850 if (ep->mii.full_duplex != duplex) {
851 ep->mii.full_duplex = duplex;
852 printk(KERN_INFO "%s: Setting %s-duplex based on MII #%d link"
853 " partner capability of %4.4x.\n", dev->name,
854 ep->mii.full_duplex ? "full" : "half", ep->phys[0], mii_lpa);
855 outl(ep->mii.full_duplex ? 0x7F : 0x79, ioaddr + TxCtrl);
859 static void epic_timer(unsigned long data)
861 struct net_device *dev = (struct net_device *)data;
862 struct epic_private *ep = dev->priv;
863 long ioaddr = dev->base_addr;
864 int next_tick = 5*HZ;
866 if (debug > 3) {
867 printk(KERN_DEBUG "%s: Media monitor tick, Tx status %8.8x.\n",
868 dev->name, (int)inl(ioaddr + TxSTAT));
869 printk(KERN_DEBUG "%s: Other registers are IntMask %4.4x "
870 "IntStatus %4.4x RxStatus %4.4x.\n",
871 dev->name, (int)inl(ioaddr + INTMASK),
872 (int)inl(ioaddr + INTSTAT), (int)inl(ioaddr + RxSTAT));
875 check_media(dev);
877 ep->timer.expires = jiffies + next_tick;
878 add_timer(&ep->timer);
881 static void epic_tx_timeout(struct net_device *dev)
883 struct epic_private *ep = dev->priv;
884 long ioaddr = dev->base_addr;
886 if (debug > 0) {
887 printk(KERN_WARNING "%s: Transmit timeout using MII device, "
888 "Tx status %4.4x.\n",
889 dev->name, (int)inw(ioaddr + TxSTAT));
890 if (debug > 1) {
891 printk(KERN_DEBUG "%s: Tx indices: dirty_tx %d, cur_tx %d.\n",
892 dev->name, ep->dirty_tx, ep->cur_tx);
895 if (inw(ioaddr + TxSTAT) & 0x10) { /* Tx FIFO underflow. */
896 ep->stats.tx_fifo_errors++;
897 outl(RestartTx, ioaddr + COMMAND);
898 } else {
899 epic_restart(dev);
900 outl(TxQueued, dev->base_addr + COMMAND);
903 dev->trans_start = jiffies;
904 ep->stats.tx_errors++;
905 if (!ep->tx_full)
906 netif_wake_queue(dev);
909 /* Initialize the Rx and Tx rings, along with various 'dev' bits. */
910 static void epic_init_ring(struct net_device *dev)
912 struct epic_private *ep = dev->priv;
913 int i;
915 ep->tx_full = 0;
916 ep->dirty_tx = ep->cur_tx = 0;
917 ep->cur_rx = ep->dirty_rx = 0;
918 ep->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32);
920 /* Initialize all Rx descriptors. */
921 for (i = 0; i < RX_RING_SIZE; i++) {
922 ep->rx_ring[i].rxstatus = 0;
923 ep->rx_ring[i].buflength = cpu_to_le32(ep->rx_buf_sz);
924 ep->rx_ring[i].next = ep->rx_ring_dma +
925 (i+1)*sizeof(struct epic_rx_desc);
926 ep->rx_skbuff[i] = NULL;
928 /* Mark the last entry as wrapping the ring. */
929 ep->rx_ring[i-1].next = ep->rx_ring_dma;
931 /* Fill in the Rx buffers. Handle allocation failure gracefully. */
932 for (i = 0; i < RX_RING_SIZE; i++) {
933 struct sk_buff *skb = dev_alloc_skb(ep->rx_buf_sz);
934 ep->rx_skbuff[i] = skb;
935 if (skb == NULL)
936 break;
937 skb->dev = dev; /* Mark as being used by this device. */
938 skb_reserve(skb, 2); /* 16 byte align the IP header. */
939 ep->rx_ring[i].bufaddr = pci_map_single(ep->pci_dev,
940 skb->data, ep->rx_buf_sz, PCI_DMA_FROMDEVICE);
941 ep->rx_ring[i].rxstatus = cpu_to_le32(DescOwn);
943 ep->dirty_rx = (unsigned int)(i - RX_RING_SIZE);
945 /* The Tx buffer descriptor is filled in as needed, but we
946 do need to clear the ownership bit. */
947 for (i = 0; i < TX_RING_SIZE; i++) {
948 ep->tx_skbuff[i] = NULL;
949 ep->tx_ring[i].txstatus = 0x0000;
950 ep->tx_ring[i].next = ep->tx_ring_dma +
951 (i+1)*sizeof(struct epic_tx_desc);
953 ep->tx_ring[i-1].next = ep->tx_ring_dma;
954 return;
957 static int epic_start_xmit(struct sk_buff *skb, struct net_device *dev)
959 struct epic_private *ep = dev->priv;
960 int entry, free_count;
961 u32 ctrl_word;
962 unsigned long flags;
964 if (skb_padto(skb, ETH_ZLEN))
965 return 0;
967 /* Caution: the write order is important here, set the field with the
968 "ownership" bit last. */
970 /* Calculate the next Tx descriptor entry. */
971 spin_lock_irqsave(&ep->lock, flags);
972 free_count = ep->cur_tx - ep->dirty_tx;
973 entry = ep->cur_tx % TX_RING_SIZE;
975 ep->tx_skbuff[entry] = skb;
976 ep->tx_ring[entry].bufaddr = pci_map_single(ep->pci_dev, skb->data,
977 skb->len, PCI_DMA_TODEVICE);
978 if (free_count < TX_QUEUE_LEN/2) {/* Typical path */
979 ctrl_word = cpu_to_le32(0x100000); /* No interrupt */
980 } else if (free_count == TX_QUEUE_LEN/2) {
981 ctrl_word = cpu_to_le32(0x140000); /* Tx-done intr. */
982 } else if (free_count < TX_QUEUE_LEN - 1) {
983 ctrl_word = cpu_to_le32(0x100000); /* No Tx-done intr. */
984 } else {
985 /* Leave room for an additional entry. */
986 ctrl_word = cpu_to_le32(0x140000); /* Tx-done intr. */
987 ep->tx_full = 1;
989 ep->tx_ring[entry].buflength = ctrl_word | cpu_to_le32(skb->len);
990 ep->tx_ring[entry].txstatus =
991 ((skb->len >= ETH_ZLEN ? skb->len : ETH_ZLEN) << 16)
992 | cpu_to_le32(DescOwn);
994 ep->cur_tx++;
995 if (ep->tx_full)
996 netif_stop_queue(dev);
998 spin_unlock_irqrestore(&ep->lock, flags);
999 /* Trigger an immediate transmit demand. */
1000 outl(TxQueued, dev->base_addr + COMMAND);
1002 dev->trans_start = jiffies;
1003 if (debug > 4)
1004 printk(KERN_DEBUG "%s: Queued Tx packet size %d to slot %d, "
1005 "flag %2.2x Tx status %8.8x.\n",
1006 dev->name, (int)skb->len, entry, ctrl_word,
1007 (int)inl(dev->base_addr + TxSTAT));
1009 return 0;
1012 static void epic_tx_error(struct net_device *dev, struct epic_private *ep,
1013 int status)
1015 struct net_device_stats *stats = &ep->stats;
1017 #ifndef final_version
1018 /* There was an major error, log it. */
1019 if (debug > 1)
1020 printk(KERN_DEBUG "%s: Transmit error, Tx status %8.8x.\n",
1021 dev->name, status);
1022 #endif
1023 stats->tx_errors++;
1024 if (status & 0x1050)
1025 stats->tx_aborted_errors++;
1026 if (status & 0x0008)
1027 stats->tx_carrier_errors++;
1028 if (status & 0x0040)
1029 stats->tx_window_errors++;
1030 if (status & 0x0010)
1031 stats->tx_fifo_errors++;
1034 static void epic_tx(struct net_device *dev, struct epic_private *ep)
1036 unsigned int dirty_tx, cur_tx;
1039 * Note: if this lock becomes a problem we can narrow the locked
1040 * region at the cost of occasionally grabbing the lock more times.
1042 cur_tx = ep->cur_tx;
1043 for (dirty_tx = ep->dirty_tx; cur_tx - dirty_tx > 0; dirty_tx++) {
1044 struct sk_buff *skb;
1045 int entry = dirty_tx % TX_RING_SIZE;
1046 int txstatus = le32_to_cpu(ep->tx_ring[entry].txstatus);
1048 if (txstatus & DescOwn)
1049 break; /* It still hasn't been Txed */
1051 if (likely(txstatus & 0x0001)) {
1052 ep->stats.collisions += (txstatus >> 8) & 15;
1053 ep->stats.tx_packets++;
1054 ep->stats.tx_bytes += ep->tx_skbuff[entry]->len;
1055 } else
1056 epic_tx_error(dev, ep, txstatus);
1058 /* Free the original skb. */
1059 skb = ep->tx_skbuff[entry];
1060 pci_unmap_single(ep->pci_dev, ep->tx_ring[entry].bufaddr,
1061 skb->len, PCI_DMA_TODEVICE);
1062 dev_kfree_skb_irq(skb);
1063 ep->tx_skbuff[entry] = NULL;
1066 #ifndef final_version
1067 if (cur_tx - dirty_tx > TX_RING_SIZE) {
1068 printk(KERN_WARNING
1069 "%s: Out-of-sync dirty pointer, %d vs. %d, full=%d.\n",
1070 dev->name, dirty_tx, cur_tx, ep->tx_full);
1071 dirty_tx += TX_RING_SIZE;
1073 #endif
1074 ep->dirty_tx = dirty_tx;
1075 if (ep->tx_full && cur_tx - dirty_tx < TX_QUEUE_LEN - 4) {
1076 /* The ring is no longer full, allow new TX entries. */
1077 ep->tx_full = 0;
1078 netif_wake_queue(dev);
1082 /* The interrupt handler does all of the Rx thread work and cleans up
1083 after the Tx thread. */
1084 static irqreturn_t epic_interrupt(int irq, void *dev_instance)
1086 struct net_device *dev = dev_instance;
1087 struct epic_private *ep = dev->priv;
1088 long ioaddr = dev->base_addr;
1089 unsigned int handled = 0;
1090 int status;
1092 status = inl(ioaddr + INTSTAT);
1093 /* Acknowledge all of the current interrupt sources ASAP. */
1094 outl(status & EpicNormalEvent, ioaddr + INTSTAT);
1096 if (debug > 4) {
1097 printk(KERN_DEBUG "%s: Interrupt, status=%#8.8x new "
1098 "intstat=%#8.8x.\n", dev->name, status,
1099 (int)inl(ioaddr + INTSTAT));
1102 if ((status & IntrSummary) == 0)
1103 goto out;
1105 handled = 1;
1107 if ((status & EpicNapiEvent) && !ep->reschedule_in_poll) {
1108 spin_lock(&ep->napi_lock);
1109 if (netif_rx_schedule_prep(dev)) {
1110 epic_napi_irq_off(dev, ep);
1111 __netif_rx_schedule(dev);
1112 } else
1113 ep->reschedule_in_poll++;
1114 spin_unlock(&ep->napi_lock);
1116 status &= ~EpicNapiEvent;
1118 /* Check uncommon events all at once. */
1119 if (status & (CntFull | TxUnderrun | PCIBusErr170 | PCIBusErr175)) {
1120 if (status == EpicRemoved)
1121 goto out;
1123 /* Always update the error counts to avoid overhead later. */
1124 ep->stats.rx_missed_errors += inb(ioaddr + MPCNT);
1125 ep->stats.rx_frame_errors += inb(ioaddr + ALICNT);
1126 ep->stats.rx_crc_errors += inb(ioaddr + CRCCNT);
1128 if (status & TxUnderrun) { /* Tx FIFO underflow. */
1129 ep->stats.tx_fifo_errors++;
1130 outl(ep->tx_threshold += 128, ioaddr + TxThresh);
1131 /* Restart the transmit process. */
1132 outl(RestartTx, ioaddr + COMMAND);
1134 if (status & PCIBusErr170) {
1135 printk(KERN_ERR "%s: PCI Bus Error! status %4.4x.\n",
1136 dev->name, status);
1137 epic_pause(dev);
1138 epic_restart(dev);
1140 /* Clear all error sources. */
1141 outl(status & 0x7f18, ioaddr + INTSTAT);
1144 out:
1145 if (debug > 3) {
1146 printk(KERN_DEBUG "%s: exit interrupt, intr_status=%#4.4x.\n",
1147 dev->name, status);
1150 return IRQ_RETVAL(handled);
1153 static int epic_rx(struct net_device *dev, int budget)
1155 struct epic_private *ep = dev->priv;
1156 int entry = ep->cur_rx % RX_RING_SIZE;
1157 int rx_work_limit = ep->dirty_rx + RX_RING_SIZE - ep->cur_rx;
1158 int work_done = 0;
1160 if (debug > 4)
1161 printk(KERN_DEBUG " In epic_rx(), entry %d %8.8x.\n", entry,
1162 ep->rx_ring[entry].rxstatus);
1164 if (rx_work_limit > budget)
1165 rx_work_limit = budget;
1167 /* If we own the next entry, it's a new packet. Send it up. */
1168 while ((ep->rx_ring[entry].rxstatus & cpu_to_le32(DescOwn)) == 0) {
1169 int status = le32_to_cpu(ep->rx_ring[entry].rxstatus);
1171 if (debug > 4)
1172 printk(KERN_DEBUG " epic_rx() status was %8.8x.\n", status);
1173 if (--rx_work_limit < 0)
1174 break;
1175 if (status & 0x2006) {
1176 if (debug > 2)
1177 printk(KERN_DEBUG "%s: epic_rx() error status was %8.8x.\n",
1178 dev->name, status);
1179 if (status & 0x2000) {
1180 printk(KERN_WARNING "%s: Oversized Ethernet frame spanned "
1181 "multiple buffers, status %4.4x!\n", dev->name, status);
1182 ep->stats.rx_length_errors++;
1183 } else if (status & 0x0006)
1184 /* Rx Frame errors are counted in hardware. */
1185 ep->stats.rx_errors++;
1186 } else {
1187 /* Malloc up new buffer, compatible with net-2e. */
1188 /* Omit the four octet CRC from the length. */
1189 short pkt_len = (status >> 16) - 4;
1190 struct sk_buff *skb;
1192 if (pkt_len > PKT_BUF_SZ - 4) {
1193 printk(KERN_ERR "%s: Oversized Ethernet frame, status %x "
1194 "%d bytes.\n",
1195 dev->name, status, pkt_len);
1196 pkt_len = 1514;
1198 /* Check if the packet is long enough to accept without copying
1199 to a minimally-sized skbuff. */
1200 if (pkt_len < rx_copybreak
1201 && (skb = dev_alloc_skb(pkt_len + 2)) != NULL) {
1202 skb->dev = dev;
1203 skb_reserve(skb, 2); /* 16 byte align the IP header */
1204 pci_dma_sync_single_for_cpu(ep->pci_dev,
1205 ep->rx_ring[entry].bufaddr,
1206 ep->rx_buf_sz,
1207 PCI_DMA_FROMDEVICE);
1208 eth_copy_and_sum(skb, ep->rx_skbuff[entry]->data, pkt_len, 0);
1209 skb_put(skb, pkt_len);
1210 pci_dma_sync_single_for_device(ep->pci_dev,
1211 ep->rx_ring[entry].bufaddr,
1212 ep->rx_buf_sz,
1213 PCI_DMA_FROMDEVICE);
1214 } else {
1215 pci_unmap_single(ep->pci_dev,
1216 ep->rx_ring[entry].bufaddr,
1217 ep->rx_buf_sz, PCI_DMA_FROMDEVICE);
1218 skb_put(skb = ep->rx_skbuff[entry], pkt_len);
1219 ep->rx_skbuff[entry] = NULL;
1221 skb->protocol = eth_type_trans(skb, dev);
1222 netif_receive_skb(skb);
1223 dev->last_rx = jiffies;
1224 ep->stats.rx_packets++;
1225 ep->stats.rx_bytes += pkt_len;
1227 work_done++;
1228 entry = (++ep->cur_rx) % RX_RING_SIZE;
1231 /* Refill the Rx ring buffers. */
1232 for (; ep->cur_rx - ep->dirty_rx > 0; ep->dirty_rx++) {
1233 entry = ep->dirty_rx % RX_RING_SIZE;
1234 if (ep->rx_skbuff[entry] == NULL) {
1235 struct sk_buff *skb;
1236 skb = ep->rx_skbuff[entry] = dev_alloc_skb(ep->rx_buf_sz);
1237 if (skb == NULL)
1238 break;
1239 skb->dev = dev; /* Mark as being used by this device. */
1240 skb_reserve(skb, 2); /* Align IP on 16 byte boundaries */
1241 ep->rx_ring[entry].bufaddr = pci_map_single(ep->pci_dev,
1242 skb->data, ep->rx_buf_sz, PCI_DMA_FROMDEVICE);
1243 work_done++;
1245 ep->rx_ring[entry].rxstatus = cpu_to_le32(DescOwn);
1247 return work_done;
1250 static void epic_rx_err(struct net_device *dev, struct epic_private *ep)
1252 long ioaddr = dev->base_addr;
1253 int status;
1255 status = inl(ioaddr + INTSTAT);
1257 if (status == EpicRemoved)
1258 return;
1259 if (status & RxOverflow) /* Missed a Rx frame. */
1260 ep->stats.rx_errors++;
1261 if (status & (RxOverflow | RxFull))
1262 outw(RxQueued, ioaddr + COMMAND);
1265 static int epic_poll(struct net_device *dev, int *budget)
1267 struct epic_private *ep = dev->priv;
1268 int work_done = 0, orig_budget;
1269 long ioaddr = dev->base_addr;
1271 orig_budget = (*budget > dev->quota) ? dev->quota : *budget;
1273 rx_action:
1275 epic_tx(dev, ep);
1277 work_done += epic_rx(dev, *budget);
1279 epic_rx_err(dev, ep);
1281 *budget -= work_done;
1282 dev->quota -= work_done;
1284 if (netif_running(dev) && (work_done < orig_budget)) {
1285 unsigned long flags;
1286 int more;
1288 /* A bit baroque but it avoids a (space hungry) spin_unlock */
1290 spin_lock_irqsave(&ep->napi_lock, flags);
1292 more = ep->reschedule_in_poll;
1293 if (!more) {
1294 __netif_rx_complete(dev);
1295 outl(EpicNapiEvent, ioaddr + INTSTAT);
1296 epic_napi_irq_on(dev, ep);
1297 } else
1298 ep->reschedule_in_poll--;
1300 spin_unlock_irqrestore(&ep->napi_lock, flags);
1302 if (more)
1303 goto rx_action;
1306 return (work_done >= orig_budget);
1309 static int epic_close(struct net_device *dev)
1311 long ioaddr = dev->base_addr;
1312 struct epic_private *ep = dev->priv;
1313 struct sk_buff *skb;
1314 int i;
1316 netif_stop_queue(dev);
1318 if (debug > 1)
1319 printk(KERN_DEBUG "%s: Shutting down ethercard, status was %2.2x.\n",
1320 dev->name, (int)inl(ioaddr + INTSTAT));
1322 del_timer_sync(&ep->timer);
1324 epic_disable_int(dev, ep);
1326 free_irq(dev->irq, dev);
1328 epic_pause(dev);
1330 /* Free all the skbuffs in the Rx queue. */
1331 for (i = 0; i < RX_RING_SIZE; i++) {
1332 skb = ep->rx_skbuff[i];
1333 ep->rx_skbuff[i] = NULL;
1334 ep->rx_ring[i].rxstatus = 0; /* Not owned by Epic chip. */
1335 ep->rx_ring[i].buflength = 0;
1336 if (skb) {
1337 pci_unmap_single(ep->pci_dev, ep->rx_ring[i].bufaddr,
1338 ep->rx_buf_sz, PCI_DMA_FROMDEVICE);
1339 dev_kfree_skb(skb);
1341 ep->rx_ring[i].bufaddr = 0xBADF00D0; /* An invalid address. */
1343 for (i = 0; i < TX_RING_SIZE; i++) {
1344 skb = ep->tx_skbuff[i];
1345 ep->tx_skbuff[i] = NULL;
1346 if (!skb)
1347 continue;
1348 pci_unmap_single(ep->pci_dev, ep->tx_ring[i].bufaddr,
1349 skb->len, PCI_DMA_TODEVICE);
1350 dev_kfree_skb(skb);
1353 /* Green! Leave the chip in low-power mode. */
1354 outl(0x0008, ioaddr + GENCTL);
1356 return 0;
1359 static struct net_device_stats *epic_get_stats(struct net_device *dev)
1361 struct epic_private *ep = dev->priv;
1362 long ioaddr = dev->base_addr;
1364 if (netif_running(dev)) {
1365 /* Update the error counts. */
1366 ep->stats.rx_missed_errors += inb(ioaddr + MPCNT);
1367 ep->stats.rx_frame_errors += inb(ioaddr + ALICNT);
1368 ep->stats.rx_crc_errors += inb(ioaddr + CRCCNT);
1371 return &ep->stats;
1374 /* Set or clear the multicast filter for this adaptor.
1375 Note that we only use exclusion around actually queueing the
1376 new frame, not around filling ep->setup_frame. This is non-deterministic
1377 when re-entered but still correct. */
1379 static void set_rx_mode(struct net_device *dev)
1381 long ioaddr = dev->base_addr;
1382 struct epic_private *ep = dev->priv;
1383 unsigned char mc_filter[8]; /* Multicast hash filter */
1384 int i;
1386 if (dev->flags & IFF_PROMISC) { /* Set promiscuous. */
1387 outl(0x002C, ioaddr + RxCtrl);
1388 /* Unconditionally log net taps. */
1389 memset(mc_filter, 0xff, sizeof(mc_filter));
1390 } else if ((dev->mc_count > 0) || (dev->flags & IFF_ALLMULTI)) {
1391 /* There is apparently a chip bug, so the multicast filter
1392 is never enabled. */
1393 /* Too many to filter perfectly -- accept all multicasts. */
1394 memset(mc_filter, 0xff, sizeof(mc_filter));
1395 outl(0x000C, ioaddr + RxCtrl);
1396 } else if (dev->mc_count == 0) {
1397 outl(0x0004, ioaddr + RxCtrl);
1398 return;
1399 } else { /* Never executed, for now. */
1400 struct dev_mc_list *mclist;
1402 memset(mc_filter, 0, sizeof(mc_filter));
1403 for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
1404 i++, mclist = mclist->next) {
1405 unsigned int bit_nr =
1406 ether_crc_le(ETH_ALEN, mclist->dmi_addr) & 0x3f;
1407 mc_filter[bit_nr >> 3] |= (1 << bit_nr);
1410 /* ToDo: perhaps we need to stop the Tx and Rx process here? */
1411 if (memcmp(mc_filter, ep->mc_filter, sizeof(mc_filter))) {
1412 for (i = 0; i < 4; i++)
1413 outw(((u16 *)mc_filter)[i], ioaddr + MC0 + i*4);
1414 memcpy(ep->mc_filter, mc_filter, sizeof(mc_filter));
1416 return;
1419 static void netdev_get_drvinfo (struct net_device *dev, struct ethtool_drvinfo *info)
1421 struct epic_private *np = dev->priv;
1423 strcpy (info->driver, DRV_NAME);
1424 strcpy (info->version, DRV_VERSION);
1425 strcpy (info->bus_info, pci_name(np->pci_dev));
1428 static int netdev_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1430 struct epic_private *np = dev->priv;
1431 int rc;
1433 spin_lock_irq(&np->lock);
1434 rc = mii_ethtool_gset(&np->mii, cmd);
1435 spin_unlock_irq(&np->lock);
1437 return rc;
1440 static int netdev_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1442 struct epic_private *np = dev->priv;
1443 int rc;
1445 spin_lock_irq(&np->lock);
1446 rc = mii_ethtool_sset(&np->mii, cmd);
1447 spin_unlock_irq(&np->lock);
1449 return rc;
1452 static int netdev_nway_reset(struct net_device *dev)
1454 struct epic_private *np = dev->priv;
1455 return mii_nway_restart(&np->mii);
1458 static u32 netdev_get_link(struct net_device *dev)
1460 struct epic_private *np = dev->priv;
1461 return mii_link_ok(&np->mii);
1464 static u32 netdev_get_msglevel(struct net_device *dev)
1466 return debug;
1469 static void netdev_set_msglevel(struct net_device *dev, u32 value)
1471 debug = value;
1474 static int ethtool_begin(struct net_device *dev)
1476 unsigned long ioaddr = dev->base_addr;
1477 /* power-up, if interface is down */
1478 if (! netif_running(dev)) {
1479 outl(0x0200, ioaddr + GENCTL);
1480 outl((inl(ioaddr + NVCTL) & ~0x003C) | 0x4800, ioaddr + NVCTL);
1482 return 0;
1485 static void ethtool_complete(struct net_device *dev)
1487 unsigned long ioaddr = dev->base_addr;
1488 /* power-down, if interface is down */
1489 if (! netif_running(dev)) {
1490 outl(0x0008, ioaddr + GENCTL);
1491 outl((inl(ioaddr + NVCTL) & ~0x483C) | 0x0000, ioaddr + NVCTL);
1495 static const struct ethtool_ops netdev_ethtool_ops = {
1496 .get_drvinfo = netdev_get_drvinfo,
1497 .get_settings = netdev_get_settings,
1498 .set_settings = netdev_set_settings,
1499 .nway_reset = netdev_nway_reset,
1500 .get_link = netdev_get_link,
1501 .get_msglevel = netdev_get_msglevel,
1502 .set_msglevel = netdev_set_msglevel,
1503 .get_sg = ethtool_op_get_sg,
1504 .get_tx_csum = ethtool_op_get_tx_csum,
1505 .begin = ethtool_begin,
1506 .complete = ethtool_complete
1509 static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
1511 struct epic_private *np = dev->priv;
1512 long ioaddr = dev->base_addr;
1513 struct mii_ioctl_data *data = if_mii(rq);
1514 int rc;
1516 /* power-up, if interface is down */
1517 if (! netif_running(dev)) {
1518 outl(0x0200, ioaddr + GENCTL);
1519 outl((inl(ioaddr + NVCTL) & ~0x003C) | 0x4800, ioaddr + NVCTL);
1522 /* all non-ethtool ioctls (the SIOC[GS]MIIxxx ioctls) */
1523 spin_lock_irq(&np->lock);
1524 rc = generic_mii_ioctl(&np->mii, data, cmd, NULL);
1525 spin_unlock_irq(&np->lock);
1527 /* power-down, if interface is down */
1528 if (! netif_running(dev)) {
1529 outl(0x0008, ioaddr + GENCTL);
1530 outl((inl(ioaddr + NVCTL) & ~0x483C) | 0x0000, ioaddr + NVCTL);
1532 return rc;
1536 static void __devexit epic_remove_one (struct pci_dev *pdev)
1538 struct net_device *dev = pci_get_drvdata(pdev);
1539 struct epic_private *ep = dev->priv;
1541 pci_free_consistent(pdev, TX_TOTAL_SIZE, ep->tx_ring, ep->tx_ring_dma);
1542 pci_free_consistent(pdev, RX_TOTAL_SIZE, ep->rx_ring, ep->rx_ring_dma);
1543 unregister_netdev(dev);
1544 #ifndef USE_IO_OPS
1545 iounmap((void*) dev->base_addr);
1546 #endif
1547 pci_release_regions(pdev);
1548 free_netdev(dev);
1549 pci_disable_device(pdev);
1550 pci_set_drvdata(pdev, NULL);
1551 /* pci_power_off(pdev, -1); */
1555 #ifdef CONFIG_PM
1557 static int epic_suspend (struct pci_dev *pdev, pm_message_t state)
1559 struct net_device *dev = pci_get_drvdata(pdev);
1560 long ioaddr = dev->base_addr;
1562 if (!netif_running(dev))
1563 return 0;
1564 epic_pause(dev);
1565 /* Put the chip into low-power mode. */
1566 outl(0x0008, ioaddr + GENCTL);
1567 /* pci_power_off(pdev, -1); */
1568 return 0;
1572 static int epic_resume (struct pci_dev *pdev)
1574 struct net_device *dev = pci_get_drvdata(pdev);
1576 if (!netif_running(dev))
1577 return 0;
1578 epic_restart(dev);
1579 /* pci_power_on(pdev); */
1580 return 0;
1583 #endif /* CONFIG_PM */
1586 static struct pci_driver epic_driver = {
1587 .name = DRV_NAME,
1588 .id_table = epic_pci_tbl,
1589 .probe = epic_init_one,
1590 .remove = __devexit_p(epic_remove_one),
1591 #ifdef CONFIG_PM
1592 .suspend = epic_suspend,
1593 .resume = epic_resume,
1594 #endif /* CONFIG_PM */
1598 static int __init epic_init (void)
1600 /* when a module, this is printed whether or not devices are found in probe */
1601 #ifdef MODULE
1602 printk (KERN_INFO "%s" KERN_INFO "%s" KERN_INFO "%s",
1603 version, version2, version3);
1604 #endif
1606 return pci_register_driver(&epic_driver);
1610 static void __exit epic_cleanup (void)
1612 pci_unregister_driver (&epic_driver);
1616 module_init(epic_init);
1617 module_exit(epic_cleanup);