3 8139too.c: A RealTek RTL-8139 Fast Ethernet driver for Linux.
5 Maintained by Jeff Garzik <jgarzik@pobox.com>
6 Copyright 2000-2002 Jeff Garzik
8 Much code comes from Donald Becker's rtl8139.c driver,
9 versions 1.13 and older. This driver was originally based
10 on rtl8139.c version 1.07. Header of rtl8139.c version 1.13:
14 Written 1997-2001 by Donald Becker.
15 This software may be used and distributed according to the
16 terms of the GNU General Public License (GPL), incorporated
17 herein by reference. Drivers based on or derived from this
18 code fall under the GPL and must retain the authorship,
19 copyright and license notice. This file is not a complete
20 program and may only be used when the entire operating
21 system is licensed under the GPL.
23 This driver is for boards based on the RTL8129 and RTL8139
26 The author may be reached as becker@scyld.com, or C/O Scyld
27 Computing Corporation 410 Severn Ave., Suite 210 Annapolis
30 Support and updates available at
31 http://www.scyld.com/network/rtl8139.html
33 Twister-tuning table provided by Kinston
34 <shangh@realtek.com.tw>.
38 This software may be used and distributed according to the terms
39 of the GNU General Public License, incorporated herein by reference.
43 Donald Becker - he wrote the original driver, kudos to him!
44 (but please don't e-mail him for support, this isn't his driver)
46 Tigran Aivazian - bug fixes, skbuff free cleanup
48 Martin Mares - suggestions for PCI cleanup
50 David S. Miller - PCI DMA and softnet updates
52 Ernst Gill - fixes ported from BSD driver
54 Daniel Kobras - identified specific locations of
55 posted MMIO write bugginess
57 Gerard Sharp - bug fix, testing and feedback
59 David Ford - Rx ring wrap fix
61 Dan DeMaggio - swapped RTL8139 cards with me, and allowed me
62 to find and fix a crucial bug on older chipsets.
64 Donald Becker/Chris Butterworth/Marcus Westergren -
65 Noticed various Rx packet size-related buglets.
67 Santiago Garcia Mantinan - testing and feedback
69 Jens David - 2.2.x kernel backports
71 Martin Dennett - incredibly helpful insight on undocumented
72 features of the 8139 chips
74 Jean-Jacques Michel - bug fix
76 Tobias Ringström - Rx interrupt status checking suggestion
78 Andrew Morton - Clear blocked signals, avoid
79 buffer overrun setting current->comm.
81 Kalle Olavi Niemitalo - Wake-on-LAN ioctls
83 Robert Kuebel - Save kernel thread from dying on any signal.
85 Submitting bug reports:
87 "rtl8139-diag -mmmaaavvveefN" output
88 enable RTL8139_DEBUG below, and look at 'dmesg' or kernel log
92 #define DRV_NAME "8139too"
93 #define DRV_VERSION "0.9.28"
96 #include <linux/module.h>
97 #include <linux/kernel.h>
98 #include <linux/compiler.h>
99 #include <linux/pci.h>
100 #include <linux/init.h>
101 #include <linux/ioport.h>
102 #include <linux/netdevice.h>
103 #include <linux/etherdevice.h>
104 #include <linux/rtnetlink.h>
105 #include <linux/delay.h>
106 #include <linux/ethtool.h>
107 #include <linux/mii.h>
108 #include <linux/completion.h>
109 #include <linux/crc32.h>
111 #include <asm/uaccess.h>
114 #define RTL8139_DRIVER_NAME DRV_NAME " Fast Ethernet driver " DRV_VERSION
115 #define PFX DRV_NAME ": "
117 /* Default Message level */
118 #define RTL8139_DEF_MSG_ENABLE (NETIF_MSG_DRV | \
123 /* enable PIO instead of MMIO, if CONFIG_8139TOO_PIO is selected */
124 #ifdef CONFIG_8139TOO_PIO
128 /* define to 1, 2 or 3 to enable copious debugging info */
129 #define RTL8139_DEBUG 0
131 /* define to 1 to disable lightweight runtime debugging checks */
132 #undef RTL8139_NDEBUG
136 /* note: prints function name for you */
137 # define DPRINTK(fmt, args...) printk(KERN_DEBUG "%s: " fmt, __FUNCTION__ , ## args)
139 # define DPRINTK(fmt, args...)
142 #ifdef RTL8139_NDEBUG
143 # define assert(expr) do {} while (0)
145 # define assert(expr) \
146 if(unlikely(!(expr))) { \
147 printk(KERN_ERR "Assertion failed! %s,%s,%s,line=%d\n", \
148 #expr,__FILE__,__FUNCTION__,__LINE__); \
153 /* A few user-configurable values. */
156 static int media[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
157 static int full_duplex[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
159 /* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
160 The RTL chips use a 64 element hash table based on the Ethernet CRC. */
161 static int multicast_filter_limit = 32;
163 /* bitmapped message enable number */
164 static int debug = -1;
168 * Warning: 64K ring has hardware issues and may lock up.
170 #if defined(CONFIG_SH_DREAMCAST)
171 #define RX_BUF_IDX 1 /* 16K ring */
173 #define RX_BUF_IDX 2 /* 32K ring */
175 #define RX_BUF_LEN (8192 << RX_BUF_IDX)
176 #define RX_BUF_PAD 16
177 #define RX_BUF_WRAP_PAD 2048 /* spare padding to handle lack of packet wrap */
179 #if RX_BUF_LEN == 65536
180 #define RX_BUF_TOT_LEN RX_BUF_LEN
182 #define RX_BUF_TOT_LEN (RX_BUF_LEN + RX_BUF_PAD + RX_BUF_WRAP_PAD)
185 /* Number of Tx descriptor registers. */
186 #define NUM_TX_DESC 4
188 /* max supported ethernet frame size -- must be at least (dev->mtu+14+4).*/
189 #define MAX_ETH_FRAME_SIZE 1536
191 /* Size of the Tx bounce buffers -- must be at least (dev->mtu+14+4). */
192 #define TX_BUF_SIZE MAX_ETH_FRAME_SIZE
193 #define TX_BUF_TOT_LEN (TX_BUF_SIZE * NUM_TX_DESC)
195 /* PCI Tuning Parameters
196 Threshold is bytes transferred to chip before transmission starts. */
197 #define TX_FIFO_THRESH 256 /* In bytes, rounded down to 32 byte units. */
199 /* The following settings are log_2(bytes)-4: 0 == 16 bytes .. 6==1024, 7==end of packet. */
200 #define RX_FIFO_THRESH 7 /* Rx buffer level before first PCI xfer. */
201 #define RX_DMA_BURST 7 /* Maximum PCI burst, '6' is 1024 */
202 #define TX_DMA_BURST 6 /* Maximum PCI burst, '6' is 1024 */
203 #define TX_RETRY 8 /* 0-15. retries = 16 + (TX_RETRY * 16) */
205 /* Operational parameters that usually are not changed. */
206 /* Time in jiffies before concluding the transmitter is hung. */
207 #define TX_TIMEOUT (6*HZ)
211 HAS_MII_XCVR = 0x010000,
212 HAS_CHIP_XCVR = 0x020000,
213 HAS_LNK_CHNG = 0x040000,
216 #define RTL_NUM_STATS 4 /* number of ETHTOOL_GSTATS u64's */
217 #define RTL_REGS_VER 1 /* version of reg. data in ETHTOOL_GREGS */
218 #define RTL_MIN_IO_SIZE 0x80
219 #define RTL8139B_IO_SIZE 256
221 #define RTL8129_CAPS HAS_MII_XCVR
222 #define RTL8139_CAPS HAS_CHIP_XCVR|HAS_LNK_CHNG
230 /* indexed by board_t, above */
231 static const struct {
234 } board_info[] __devinitdata = {
235 { "RealTek RTL8139", RTL8139_CAPS },
236 { "RealTek RTL8129", RTL8129_CAPS },
240 static struct pci_device_id rtl8139_pci_tbl[] = {
241 {0x10ec, 0x8139, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
242 {0x10ec, 0x8138, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
243 {0x1113, 0x1211, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
244 {0x1500, 0x1360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
245 {0x4033, 0x1360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
246 {0x1186, 0x1300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
247 {0x1186, 0x1340, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
248 {0x13d1, 0xab06, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
249 {0x1259, 0xa117, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
250 {0x1259, 0xa11e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
251 {0x14ea, 0xab06, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
252 {0x14ea, 0xab07, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
253 {0x11db, 0x1234, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
254 {0x1432, 0x9130, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
255 {0x02ac, 0x1012, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
256 {0x018a, 0x0106, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
257 {0x126c, 0x1211, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
258 {0x1743, 0x8139, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
259 {0x021b, 0x8139, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
261 #ifdef CONFIG_SH_SECUREEDGE5410
262 /* Bogus 8139 silicon reports 8129 without external PROM :-( */
263 {0x10ec, 0x8129, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
265 #ifdef CONFIG_8139TOO_8129
266 {0x10ec, 0x8129, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8129 },
269 /* some crazy cards report invalid vendor ids like
270 * 0x0001 here. The other ids are valid and constant,
271 * so we simply don't match on the main vendor id.
273 {PCI_ANY_ID, 0x8139, 0x10ec, 0x8139, 0, 0, RTL8139 },
274 {PCI_ANY_ID, 0x8139, 0x1186, 0x1300, 0, 0, RTL8139 },
275 {PCI_ANY_ID, 0x8139, 0x13d1, 0xab06, 0, 0, RTL8139 },
279 MODULE_DEVICE_TABLE (pci, rtl8139_pci_tbl);
282 const char str[ETH_GSTRING_LEN];
283 } ethtool_stats_keys[] = {
287 { "rx_lost_in_ring" },
290 /* The rest of these values should never change. */
292 /* Symbolic offsets to registers. */
293 enum RTL8139_registers {
294 MAC0 = 0, /* Ethernet hardware address. */
295 MAR0 = 8, /* Multicast filter. */
296 TxStatus0 = 0x10, /* Transmit status (Four 32bit registers). */
297 TxAddr0 = 0x20, /* Tx descriptors (also four 32bit). */
306 Timer = 0x48, /* A general-purpose counter. */
307 RxMissed = 0x4C, /* 24 bits valid, write clears. */
314 Config4 = 0x5A, /* absent on RTL-8139A */
318 BasicModeCtrl = 0x62,
319 BasicModeStatus = 0x64,
322 NWayExpansion = 0x6A,
323 /* Undocumented registers, but required for proper operation. */
324 FIFOTMS = 0x70, /* FIFO Control and test. */
325 CSCR = 0x74, /* Chip Status and Configuration Register. */
327 PARA7c = 0x7c, /* Magic transceiver parameter register. */
328 Config5 = 0xD8, /* absent on RTL-8139A */
332 MultiIntrClear = 0xF000,
334 Config1Clear = (1<<7)|(1<<6)|(1<<3)|(1<<2)|(1<<1),
344 /* Interrupt register bits, using my own meaningful names. */
345 enum IntrStatusBits {
356 RxAckBits = RxFIFOOver | RxOverflow | RxOK,
363 TxOutOfWindow = 0x20000000,
364 TxAborted = 0x40000000,
365 TxCarrierLost = 0x80000000,
368 RxMulticast = 0x8000,
370 RxBroadcast = 0x2000,
371 RxBadSymbol = 0x0020,
379 /* Bits in RxConfig. */
383 AcceptBroadcast = 0x08,
384 AcceptMulticast = 0x04,
386 AcceptAllPhys = 0x01,
389 /* Bits in TxConfig. */
390 enum tx_config_bits {
391 /* Interframe Gap Time. Only TxIFG96 doesn't violate IEEE 802.3 */
393 TxIFG84 = (0 << TxIFGShift), /* 8.4us / 840ns (10 / 100Mbps) */
394 TxIFG88 = (1 << TxIFGShift), /* 8.8us / 880ns (10 / 100Mbps) */
395 TxIFG92 = (2 << TxIFGShift), /* 9.2us / 920ns (10 / 100Mbps) */
396 TxIFG96 = (3 << TxIFGShift), /* 9.6us / 960ns (10 / 100Mbps) */
398 TxLoopBack = (1 << 18) | (1 << 17), /* enable loopback test mode */
399 TxCRC = (1 << 16), /* DISABLE Tx pkt CRC append */
400 TxClearAbt = (1 << 0), /* Clear abort (WO) */
401 TxDMAShift = 8, /* DMA burst value (0-7) is shifted X many bits */
402 TxRetryShift = 4, /* TXRR value (0-15) is shifted X many bits */
404 TxVersionMask = 0x7C800000, /* mask out version bits 30-26, 23 */
407 /* Bits in Config1 */
409 Cfg1_PM_Enable = 0x01,
410 Cfg1_VPD_Enable = 0x02,
413 LWAKE = 0x10, /* not on 8139, 8139A */
414 Cfg1_Driver_Load = 0x20,
417 SLEEP = (1 << 1), /* only on 8139, 8139A */
418 PWRDN = (1 << 0), /* only on 8139, 8139A */
421 /* Bits in Config3 */
423 Cfg3_FBtBEn = (1 << 0), /* 1 = Fast Back to Back */
424 Cfg3_FuncRegEn = (1 << 1), /* 1 = enable CardBus Function registers */
425 Cfg3_CLKRUN_En = (1 << 2), /* 1 = enable CLKRUN */
426 Cfg3_CardB_En = (1 << 3), /* 1 = enable CardBus registers */
427 Cfg3_LinkUp = (1 << 4), /* 1 = wake up on link up */
428 Cfg3_Magic = (1 << 5), /* 1 = wake up on Magic Packet (tm) */
429 Cfg3_PARM_En = (1 << 6), /* 0 = software can set twister parameters */
430 Cfg3_GNTSel = (1 << 7), /* 1 = delay 1 clock from PCI GNT signal */
433 /* Bits in Config4 */
435 LWPTN = (1 << 2), /* not on 8139, 8139A */
438 /* Bits in Config5 */
440 Cfg5_PME_STS = (1 << 0), /* 1 = PCI reset resets PME_Status */
441 Cfg5_LANWake = (1 << 1), /* 1 = enable LANWake signal */
442 Cfg5_LDPS = (1 << 2), /* 0 = save power when link is down */
443 Cfg5_FIFOAddrPtr= (1 << 3), /* Realtek internal SRAM testing */
444 Cfg5_UWF = (1 << 4), /* 1 = accept unicast wakeup frame */
445 Cfg5_MWF = (1 << 5), /* 1 = accept multicast wakeup frame */
446 Cfg5_BWF = (1 << 6), /* 1 = accept broadcast wakeup frame */
450 /* rx fifo threshold */
452 RxCfgFIFONone = (7 << RxCfgFIFOShift),
456 RxCfgDMAUnlimited = (7 << RxCfgDMAShift),
458 /* rx ring buffer length */
460 RxCfgRcv16K = (1 << 11),
461 RxCfgRcv32K = (1 << 12),
462 RxCfgRcv64K = (1 << 11) | (1 << 12),
464 /* Disable packet wrap at end of Rx buffer. (not possible with 64k) */
468 /* Twister tuning parameters from RealTek.
469 Completely undocumented, but required to tune bad links on some boards. */
471 CSCR_LinkOKBit = 0x0400,
472 CSCR_LinkChangeBit = 0x0800,
473 CSCR_LinkStatusBits = 0x0f000,
474 CSCR_LinkDownOffCmd = 0x003c0,
475 CSCR_LinkDownCmd = 0x0f3c0,
480 Cfg9346_Unlock = 0xC0,
497 HasHltClk = (1 << 0),
501 #define HW_REVID(b30, b29, b28, b27, b26, b23, b22) \
502 (b30<<30 | b29<<29 | b28<<28 | b27<<27 | b26<<26 | b23<<23 | b22<<22)
503 #define HW_REVID_MASK HW_REVID(1, 1, 1, 1, 1, 1, 1)
505 /* directly indexed by chip_t, above */
506 static const struct {
508 u32 version; /* from RTL8139C/RTL8139D docs */
510 } rtl_chip_info[] = {
512 HW_REVID(1, 0, 0, 0, 0, 0, 0),
517 HW_REVID(1, 1, 0, 0, 0, 0, 0),
522 HW_REVID(1, 1, 1, 0, 0, 0, 0),
523 HasHltClk, /* XXX undocumented? */
527 HW_REVID(1, 1, 1, 0, 0, 1, 0),
528 HasHltClk, /* XXX undocumented? */
532 HW_REVID(1, 1, 1, 1, 0, 0, 0),
537 HW_REVID(1, 1, 1, 1, 1, 0, 0),
542 HW_REVID(1, 1, 1, 0, 1, 0, 0),
547 HW_REVID(1, 1, 1, 1, 0, 1, 0),
552 HW_REVID(1, 1, 1, 0, 1, 0, 1),
553 HasHltClk /* XXX undocumented? */
558 HW_REVID(1, 1, 1, 0, 1, 1, 1),
563 struct rtl_extra_stats {
564 unsigned long early_rx;
565 unsigned long tx_buf_mapped;
566 unsigned long tx_timeouts;
567 unsigned long rx_lost_in_ring;
570 struct rtl8139_private {
571 void __iomem *mmio_addr;
573 struct pci_dev *pci_dev;
575 struct napi_struct napi;
576 struct net_device *dev;
577 struct net_device_stats stats;
579 unsigned char *rx_ring;
580 unsigned int cur_rx; /* RX buf index of next pkt */
581 dma_addr_t rx_ring_dma;
583 unsigned int tx_flag;
584 unsigned long cur_tx;
585 unsigned long dirty_tx;
586 unsigned char *tx_buf[NUM_TX_DESC]; /* Tx bounce buffers */
587 unsigned char *tx_bufs; /* Tx bounce buffer region. */
588 dma_addr_t tx_bufs_dma;
590 signed char phys[4]; /* MII device addresses. */
592 /* Twister tune state. */
593 char twistie, twist_row, twist_col;
595 unsigned int watchdog_fired : 1;
596 unsigned int default_port : 4; /* Last dev->if_port value. */
597 unsigned int have_thread : 1;
604 struct rtl_extra_stats xstats;
606 struct delayed_work thread;
608 struct mii_if_info mii;
609 unsigned int regs_len;
610 unsigned long fifo_copy_timeout;
613 MODULE_AUTHOR ("Jeff Garzik <jgarzik@pobox.com>");
614 MODULE_DESCRIPTION ("RealTek RTL-8139 Fast Ethernet driver");
615 MODULE_LICENSE("GPL");
616 MODULE_VERSION(DRV_VERSION);
618 module_param(multicast_filter_limit, int, 0);
619 module_param_array(media, int, NULL, 0);
620 module_param_array(full_duplex, int, NULL, 0);
621 module_param(debug, int, 0);
622 MODULE_PARM_DESC (debug, "8139too bitmapped message enable number");
623 MODULE_PARM_DESC (multicast_filter_limit, "8139too maximum number of filtered multicast addresses");
624 MODULE_PARM_DESC (media, "8139too: Bits 4+9: force full duplex, bit 5: 100Mbps");
625 MODULE_PARM_DESC (full_duplex, "8139too: Force full duplex for board(s) (1)");
627 static int read_eeprom (void __iomem *ioaddr, int location, int addr_len);
628 static int rtl8139_open (struct net_device *dev);
629 static int mdio_read (struct net_device *dev, int phy_id, int location);
630 static void mdio_write (struct net_device *dev, int phy_id, int location,
632 static void rtl8139_start_thread(struct rtl8139_private *tp);
633 static void rtl8139_tx_timeout (struct net_device *dev);
634 static void rtl8139_init_ring (struct net_device *dev);
635 static int rtl8139_start_xmit (struct sk_buff *skb,
636 struct net_device *dev);
637 #ifdef CONFIG_NET_POLL_CONTROLLER
638 static void rtl8139_poll_controller(struct net_device *dev);
640 static int rtl8139_poll(struct napi_struct *napi, int budget);
641 static irqreturn_t rtl8139_interrupt (int irq, void *dev_instance);
642 static int rtl8139_close (struct net_device *dev);
643 static int netdev_ioctl (struct net_device *dev, struct ifreq *rq, int cmd);
644 static struct net_device_stats *rtl8139_get_stats (struct net_device *dev);
645 static void rtl8139_set_rx_mode (struct net_device *dev);
646 static void __set_rx_mode (struct net_device *dev);
647 static void rtl8139_hw_start (struct net_device *dev);
648 static void rtl8139_thread (struct work_struct *work);
649 static void rtl8139_tx_timeout_task(struct work_struct *work);
650 static const struct ethtool_ops rtl8139_ethtool_ops;
652 /* write MMIO register, with flush */
653 /* Flush avoids rtl8139 bug w/ posted MMIO writes */
654 #define RTL_W8_F(reg, val8) do { iowrite8 ((val8), ioaddr + (reg)); ioread8 (ioaddr + (reg)); } while (0)
655 #define RTL_W16_F(reg, val16) do { iowrite16 ((val16), ioaddr + (reg)); ioread16 (ioaddr + (reg)); } while (0)
656 #define RTL_W32_F(reg, val32) do { iowrite32 ((val32), ioaddr + (reg)); ioread32 (ioaddr + (reg)); } while (0)
658 /* write MMIO register */
659 #define RTL_W8(reg, val8) iowrite8 ((val8), ioaddr + (reg))
660 #define RTL_W16(reg, val16) iowrite16 ((val16), ioaddr + (reg))
661 #define RTL_W32(reg, val32) iowrite32 ((val32), ioaddr + (reg))
663 /* read MMIO register */
664 #define RTL_R8(reg) ioread8 (ioaddr + (reg))
665 #define RTL_R16(reg) ioread16 (ioaddr + (reg))
666 #define RTL_R32(reg) ((unsigned long) ioread32 (ioaddr + (reg)))
669 static const u16 rtl8139_intr_mask =
670 PCIErr | PCSTimeout | RxUnderrun | RxOverflow | RxFIFOOver |
671 TxErr | TxOK | RxErr | RxOK;
673 static const u16 rtl8139_norx_intr_mask =
674 PCIErr | PCSTimeout | RxUnderrun |
675 TxErr | TxOK | RxErr ;
678 static const unsigned int rtl8139_rx_config =
679 RxCfgRcv8K | RxNoWrap |
680 (RX_FIFO_THRESH << RxCfgFIFOShift) |
681 (RX_DMA_BURST << RxCfgDMAShift);
682 #elif RX_BUF_IDX == 1
683 static const unsigned int rtl8139_rx_config =
684 RxCfgRcv16K | RxNoWrap |
685 (RX_FIFO_THRESH << RxCfgFIFOShift) |
686 (RX_DMA_BURST << RxCfgDMAShift);
687 #elif RX_BUF_IDX == 2
688 static const unsigned int rtl8139_rx_config =
689 RxCfgRcv32K | RxNoWrap |
690 (RX_FIFO_THRESH << RxCfgFIFOShift) |
691 (RX_DMA_BURST << RxCfgDMAShift);
692 #elif RX_BUF_IDX == 3
693 static const unsigned int rtl8139_rx_config =
695 (RX_FIFO_THRESH << RxCfgFIFOShift) |
696 (RX_DMA_BURST << RxCfgDMAShift);
698 #error "Invalid configuration for 8139_RXBUF_IDX"
701 static const unsigned int rtl8139_tx_config =
702 TxIFG96 | (TX_DMA_BURST << TxDMAShift) | (TX_RETRY << TxRetryShift);
704 static void __rtl8139_cleanup_dev (struct net_device *dev)
706 struct rtl8139_private *tp = netdev_priv(dev);
707 struct pci_dev *pdev;
709 assert (dev != NULL);
710 assert (tp->pci_dev != NULL);
715 ioport_unmap (tp->mmio_addr);
718 pci_iounmap (pdev, tp->mmio_addr);
719 #endif /* USE_IO_OPS */
721 /* it's ok to call this even if we have no regions to free */
722 pci_release_regions (pdev);
725 pci_set_drvdata (pdev, NULL);
729 static void rtl8139_chip_reset (void __iomem *ioaddr)
733 /* Soft reset the chip. */
734 RTL_W8 (ChipCmd, CmdReset);
736 /* Check that the chip has finished the reset. */
737 for (i = 1000; i > 0; i--) {
739 if ((RTL_R8 (ChipCmd) & CmdReset) == 0)
746 static int __devinit rtl8139_init_board (struct pci_dev *pdev,
747 struct net_device **dev_out)
749 void __iomem *ioaddr;
750 struct net_device *dev;
751 struct rtl8139_private *tp;
753 int rc, disable_dev_on_err = 0;
755 unsigned long pio_start, pio_end, pio_flags, pio_len;
756 unsigned long mmio_start, mmio_end, mmio_flags, mmio_len;
759 assert (pdev != NULL);
763 /* dev and priv zeroed in alloc_etherdev */
764 dev = alloc_etherdev (sizeof (*tp));
766 dev_err(&pdev->dev, "Unable to alloc new net device\n");
769 SET_NETDEV_DEV(dev, &pdev->dev);
771 tp = netdev_priv(dev);
774 /* enable device (incl. PCI PM wakeup and hotplug setup) */
775 rc = pci_enable_device (pdev);
779 pio_start = pci_resource_start (pdev, 0);
780 pio_end = pci_resource_end (pdev, 0);
781 pio_flags = pci_resource_flags (pdev, 0);
782 pio_len = pci_resource_len (pdev, 0);
784 mmio_start = pci_resource_start (pdev, 1);
785 mmio_end = pci_resource_end (pdev, 1);
786 mmio_flags = pci_resource_flags (pdev, 1);
787 mmio_len = pci_resource_len (pdev, 1);
789 /* set this immediately, we need to know before
790 * we talk to the chip directly */
791 DPRINTK("PIO region size == 0x%02X\n", pio_len);
792 DPRINTK("MMIO region size == 0x%02lX\n", mmio_len);
795 /* make sure PCI base addr 0 is PIO */
796 if (!(pio_flags & IORESOURCE_IO)) {
797 dev_err(&pdev->dev, "region #0 not a PIO resource, aborting\n");
801 /* check for weird/broken PCI region reporting */
802 if (pio_len < RTL_MIN_IO_SIZE) {
803 dev_err(&pdev->dev, "Invalid PCI I/O region size(s), aborting\n");
808 /* make sure PCI base addr 1 is MMIO */
809 if (!(mmio_flags & IORESOURCE_MEM)) {
810 dev_err(&pdev->dev, "region #1 not an MMIO resource, aborting\n");
814 if (mmio_len < RTL_MIN_IO_SIZE) {
815 dev_err(&pdev->dev, "Invalid PCI mem region size(s), aborting\n");
821 rc = pci_request_regions (pdev, DRV_NAME);
824 disable_dev_on_err = 1;
826 /* enable PCI bus-mastering */
827 pci_set_master (pdev);
830 ioaddr = ioport_map(pio_start, pio_len);
832 dev_err(&pdev->dev, "cannot map PIO, aborting\n");
836 dev->base_addr = pio_start;
837 tp->mmio_addr = ioaddr;
838 tp->regs_len = pio_len;
840 /* ioremap MMIO region */
841 ioaddr = pci_iomap(pdev, 1, 0);
842 if (ioaddr == NULL) {
843 dev_err(&pdev->dev, "cannot remap MMIO, aborting\n");
847 dev->base_addr = (long) ioaddr;
848 tp->mmio_addr = ioaddr;
849 tp->regs_len = mmio_len;
850 #endif /* USE_IO_OPS */
852 /* Bring old chips out of low-power mode. */
853 RTL_W8 (HltClk, 'R');
855 /* check for missing/broken hardware */
856 if (RTL_R32 (TxConfig) == 0xFFFFFFFF) {
857 dev_err(&pdev->dev, "Chip not responding, ignoring board\n");
862 /* identify chip attached to board */
863 version = RTL_R32 (TxConfig) & HW_REVID_MASK;
864 for (i = 0; i < ARRAY_SIZE (rtl_chip_info); i++)
865 if (version == rtl_chip_info[i].version) {
870 /* if unknown chip, assume array element #0, original RTL-8139 in this case */
871 dev_printk (KERN_DEBUG, &pdev->dev,
872 "unknown chip version, assuming RTL-8139\n");
873 dev_printk (KERN_DEBUG, &pdev->dev,
874 "TxConfig = 0x%lx\n", RTL_R32 (TxConfig));
878 DPRINTK ("chipset id (%d) == index %d, '%s'\n",
879 version, i, rtl_chip_info[i].name);
881 if (tp->chipset >= CH_8139B) {
882 u8 new_tmp8 = tmp8 = RTL_R8 (Config1);
883 DPRINTK("PCI PM wakeup\n");
884 if ((rtl_chip_info[tp->chipset].flags & HasLWake) &&
887 new_tmp8 |= Cfg1_PM_Enable;
888 if (new_tmp8 != tmp8) {
889 RTL_W8 (Cfg9346, Cfg9346_Unlock);
890 RTL_W8 (Config1, tmp8);
891 RTL_W8 (Cfg9346, Cfg9346_Lock);
893 if (rtl_chip_info[tp->chipset].flags & HasLWake) {
894 tmp8 = RTL_R8 (Config4);
896 RTL_W8 (Cfg9346, Cfg9346_Unlock);
897 RTL_W8 (Config4, tmp8 & ~LWPTN);
898 RTL_W8 (Cfg9346, Cfg9346_Lock);
902 DPRINTK("Old chip wakeup\n");
903 tmp8 = RTL_R8 (Config1);
904 tmp8 &= ~(SLEEP | PWRDN);
905 RTL_W8 (Config1, tmp8);
908 rtl8139_chip_reset (ioaddr);
914 __rtl8139_cleanup_dev (dev);
915 if (disable_dev_on_err)
916 pci_disable_device (pdev);
921 static int __devinit rtl8139_init_one (struct pci_dev *pdev,
922 const struct pci_device_id *ent)
924 struct net_device *dev = NULL;
925 struct rtl8139_private *tp;
926 int i, addr_len, option;
927 void __iomem *ioaddr;
928 static int board_idx = -1;
929 DECLARE_MAC_BUF(mac);
931 assert (pdev != NULL);
932 assert (ent != NULL);
936 /* when we're built into the kernel, the driver version message
937 * is only printed if at least one 8139 board has been found
941 static int printed_version;
942 if (!printed_version++)
943 printk (KERN_INFO RTL8139_DRIVER_NAME "\n");
947 if (pdev->vendor == PCI_VENDOR_ID_REALTEK &&
948 pdev->device == PCI_DEVICE_ID_REALTEK_8139 && pdev->revision >= 0x20) {
950 "This (id %04x:%04x rev %02x) is an enhanced 8139C+ chip\n",
951 pdev->vendor, pdev->device, pdev->revision);
953 "Use the \"8139cp\" driver for improved performance and stability.\n");
956 i = rtl8139_init_board (pdev, &dev);
960 assert (dev != NULL);
961 tp = netdev_priv(dev);
964 ioaddr = tp->mmio_addr;
965 assert (ioaddr != NULL);
967 addr_len = read_eeprom (ioaddr, 0, 8) == 0x8129 ? 8 : 6;
968 for (i = 0; i < 3; i++)
969 ((u16 *) (dev->dev_addr))[i] =
970 le16_to_cpu (read_eeprom (ioaddr, i + 7, addr_len));
971 memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
973 /* The Rtl8139-specific entries in the device structure. */
974 dev->open = rtl8139_open;
975 dev->hard_start_xmit = rtl8139_start_xmit;
976 netif_napi_add(dev, &tp->napi, rtl8139_poll, 64);
977 dev->stop = rtl8139_close;
978 dev->get_stats = rtl8139_get_stats;
979 dev->set_multicast_list = rtl8139_set_rx_mode;
980 dev->do_ioctl = netdev_ioctl;
981 dev->ethtool_ops = &rtl8139_ethtool_ops;
982 dev->tx_timeout = rtl8139_tx_timeout;
983 dev->watchdog_timeo = TX_TIMEOUT;
984 #ifdef CONFIG_NET_POLL_CONTROLLER
985 dev->poll_controller = rtl8139_poll_controller;
988 /* note: the hardware is not capable of sg/csum/highdma, however
989 * through the use of skb_copy_and_csum_dev we enable these
992 dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_HIGHDMA;
994 dev->irq = pdev->irq;
996 /* tp zeroed and aligned in alloc_etherdev */
997 tp = netdev_priv(dev);
999 /* note: tp->chipset set in rtl8139_init_board */
1000 tp->drv_flags = board_info[ent->driver_data].hw_flags;
1001 tp->mmio_addr = ioaddr;
1003 (debug < 0 ? RTL8139_DEF_MSG_ENABLE : ((1 << debug) - 1));
1004 spin_lock_init (&tp->lock);
1005 spin_lock_init (&tp->rx_lock);
1006 INIT_DELAYED_WORK(&tp->thread, rtl8139_thread);
1008 tp->mii.mdio_read = mdio_read;
1009 tp->mii.mdio_write = mdio_write;
1010 tp->mii.phy_id_mask = 0x3f;
1011 tp->mii.reg_num_mask = 0x1f;
1013 /* dev is fully set up and ready to use now */
1014 DPRINTK("about to register device named %s (%p)...\n", dev->name, dev);
1015 i = register_netdev (dev);
1016 if (i) goto err_out;
1018 pci_set_drvdata (pdev, dev);
1020 printk (KERN_INFO "%s: %s at 0x%lx, "
1023 board_info[ent->driver_data].name,
1025 print_mac(mac, dev->dev_addr),
1028 printk (KERN_DEBUG "%s: Identified 8139 chip type '%s'\n",
1029 dev->name, rtl_chip_info[tp->chipset].name);
1031 /* Find the connected MII xcvrs.
1032 Doing this in open() would allow detecting external xcvrs later, but
1033 takes too much time. */
1034 #ifdef CONFIG_8139TOO_8129
1035 if (tp->drv_flags & HAS_MII_XCVR) {
1036 int phy, phy_idx = 0;
1037 for (phy = 0; phy < 32 && phy_idx < sizeof(tp->phys); phy++) {
1038 int mii_status = mdio_read(dev, phy, 1);
1039 if (mii_status != 0xffff && mii_status != 0x0000) {
1040 u16 advertising = mdio_read(dev, phy, 4);
1041 tp->phys[phy_idx++] = phy;
1042 printk(KERN_INFO "%s: MII transceiver %d status 0x%4.4x "
1043 "advertising %4.4x.\n",
1044 dev->name, phy, mii_status, advertising);
1048 printk(KERN_INFO "%s: No MII transceivers found! Assuming SYM "
1056 tp->mii.phy_id = tp->phys[0];
1058 /* The lower four bits are the media type. */
1059 option = (board_idx >= MAX_UNITS) ? 0 : media[board_idx];
1061 tp->mii.full_duplex = (option & 0x210) ? 1 : 0;
1062 tp->default_port = option & 0xFF;
1063 if (tp->default_port)
1064 tp->mii.force_media = 1;
1066 if (board_idx < MAX_UNITS && full_duplex[board_idx] > 0)
1067 tp->mii.full_duplex = full_duplex[board_idx];
1068 if (tp->mii.full_duplex) {
1069 printk(KERN_INFO "%s: Media type forced to Full Duplex.\n", dev->name);
1070 /* Changing the MII-advertised media because might prevent
1072 tp->mii.force_media = 1;
1074 if (tp->default_port) {
1075 printk(KERN_INFO " Forcing %dMbps %s-duplex operation.\n",
1076 (option & 0x20 ? 100 : 10),
1077 (option & 0x10 ? "full" : "half"));
1078 mdio_write(dev, tp->phys[0], 0,
1079 ((option & 0x20) ? 0x2000 : 0) | /* 100Mbps? */
1080 ((option & 0x10) ? 0x0100 : 0)); /* Full duplex? */
1083 /* Put the chip into low-power mode. */
1084 if (rtl_chip_info[tp->chipset].flags & HasHltClk)
1085 RTL_W8 (HltClk, 'H'); /* 'R' would leave the clock running. */
1090 __rtl8139_cleanup_dev (dev);
1091 pci_disable_device (pdev);
1096 static void __devexit rtl8139_remove_one (struct pci_dev *pdev)
1098 struct net_device *dev = pci_get_drvdata (pdev);
1100 assert (dev != NULL);
1102 flush_scheduled_work();
1104 unregister_netdev (dev);
1106 __rtl8139_cleanup_dev (dev);
1107 pci_disable_device (pdev);
1111 /* Serial EEPROM section. */
1113 /* EEPROM_Ctrl bits. */
1114 #define EE_SHIFT_CLK 0x04 /* EEPROM shift clock. */
1115 #define EE_CS 0x08 /* EEPROM chip select. */
1116 #define EE_DATA_WRITE 0x02 /* EEPROM chip data in. */
1117 #define EE_WRITE_0 0x00
1118 #define EE_WRITE_1 0x02
1119 #define EE_DATA_READ 0x01 /* EEPROM chip data out. */
1120 #define EE_ENB (0x80 | EE_CS)
1122 /* Delay between EEPROM clock transitions.
1123 No extra delay is needed with 33Mhz PCI, but 66Mhz may change this.
1126 #define eeprom_delay() (void)RTL_R32(Cfg9346)
1128 /* The EEPROM commands include the alway-set leading bit. */
1129 #define EE_WRITE_CMD (5)
1130 #define EE_READ_CMD (6)
1131 #define EE_ERASE_CMD (7)
1133 static int __devinit read_eeprom (void __iomem *ioaddr, int location, int addr_len)
1136 unsigned retval = 0;
1137 int read_cmd = location | (EE_READ_CMD << addr_len);
1139 RTL_W8 (Cfg9346, EE_ENB & ~EE_CS);
1140 RTL_W8 (Cfg9346, EE_ENB);
1143 /* Shift the read command bits out. */
1144 for (i = 4 + addr_len; i >= 0; i--) {
1145 int dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
1146 RTL_W8 (Cfg9346, EE_ENB | dataval);
1148 RTL_W8 (Cfg9346, EE_ENB | dataval | EE_SHIFT_CLK);
1151 RTL_W8 (Cfg9346, EE_ENB);
1154 for (i = 16; i > 0; i--) {
1155 RTL_W8 (Cfg9346, EE_ENB | EE_SHIFT_CLK);
1158 (retval << 1) | ((RTL_R8 (Cfg9346) & EE_DATA_READ) ? 1 :
1160 RTL_W8 (Cfg9346, EE_ENB);
1164 /* Terminate the EEPROM access. */
1165 RTL_W8 (Cfg9346, ~EE_CS);
1171 /* MII serial management: mostly bogus for now. */
1172 /* Read and write the MII management registers using software-generated
1173 serial MDIO protocol.
1174 The maximum data clock rate is 2.5 Mhz. The minimum timing is usually
1175 met by back-to-back PCI I/O cycles, but we insert a delay to avoid
1176 "overclocking" issues. */
1177 #define MDIO_DIR 0x80
1178 #define MDIO_DATA_OUT 0x04
1179 #define MDIO_DATA_IN 0x02
1180 #define MDIO_CLK 0x01
1181 #define MDIO_WRITE0 (MDIO_DIR)
1182 #define MDIO_WRITE1 (MDIO_DIR | MDIO_DATA_OUT)
1184 #define mdio_delay() RTL_R8(Config4)
1187 static const char mii_2_8139_map[8] = {
1199 #ifdef CONFIG_8139TOO_8129
1200 /* Syncronize the MII management interface by shifting 32 one bits out. */
1201 static void mdio_sync (void __iomem *ioaddr)
1205 for (i = 32; i >= 0; i--) {
1206 RTL_W8 (Config4, MDIO_WRITE1);
1208 RTL_W8 (Config4, MDIO_WRITE1 | MDIO_CLK);
1214 static int mdio_read (struct net_device *dev, int phy_id, int location)
1216 struct rtl8139_private *tp = netdev_priv(dev);
1218 #ifdef CONFIG_8139TOO_8129
1219 void __iomem *ioaddr = tp->mmio_addr;
1220 int mii_cmd = (0xf6 << 10) | (phy_id << 5) | location;
1224 if (phy_id > 31) { /* Really a 8139. Use internal registers. */
1225 void __iomem *ioaddr = tp->mmio_addr;
1226 return location < 8 && mii_2_8139_map[location] ?
1227 RTL_R16 (mii_2_8139_map[location]) : 0;
1230 #ifdef CONFIG_8139TOO_8129
1232 /* Shift the read command bits out. */
1233 for (i = 15; i >= 0; i--) {
1234 int dataval = (mii_cmd & (1 << i)) ? MDIO_DATA_OUT : 0;
1236 RTL_W8 (Config4, MDIO_DIR | dataval);
1238 RTL_W8 (Config4, MDIO_DIR | dataval | MDIO_CLK);
1242 /* Read the two transition, 16 data, and wire-idle bits. */
1243 for (i = 19; i > 0; i--) {
1244 RTL_W8 (Config4, 0);
1246 retval = (retval << 1) | ((RTL_R8 (Config4) & MDIO_DATA_IN) ? 1 : 0);
1247 RTL_W8 (Config4, MDIO_CLK);
1252 return (retval >> 1) & 0xffff;
1256 static void mdio_write (struct net_device *dev, int phy_id, int location,
1259 struct rtl8139_private *tp = netdev_priv(dev);
1260 #ifdef CONFIG_8139TOO_8129
1261 void __iomem *ioaddr = tp->mmio_addr;
1262 int mii_cmd = (0x5002 << 16) | (phy_id << 23) | (location << 18) | value;
1266 if (phy_id > 31) { /* Really a 8139. Use internal registers. */
1267 void __iomem *ioaddr = tp->mmio_addr;
1268 if (location == 0) {
1269 RTL_W8 (Cfg9346, Cfg9346_Unlock);
1270 RTL_W16 (BasicModeCtrl, value);
1271 RTL_W8 (Cfg9346, Cfg9346_Lock);
1272 } else if (location < 8 && mii_2_8139_map[location])
1273 RTL_W16 (mii_2_8139_map[location], value);
1277 #ifdef CONFIG_8139TOO_8129
1280 /* Shift the command bits out. */
1281 for (i = 31; i >= 0; i--) {
1283 (mii_cmd & (1 << i)) ? MDIO_WRITE1 : MDIO_WRITE0;
1284 RTL_W8 (Config4, dataval);
1286 RTL_W8 (Config4, dataval | MDIO_CLK);
1289 /* Clear out extra bits. */
1290 for (i = 2; i > 0; i--) {
1291 RTL_W8 (Config4, 0);
1293 RTL_W8 (Config4, MDIO_CLK);
1300 static int rtl8139_open (struct net_device *dev)
1302 struct rtl8139_private *tp = netdev_priv(dev);
1304 void __iomem *ioaddr = tp->mmio_addr;
1306 retval = request_irq (dev->irq, rtl8139_interrupt, IRQF_SHARED, dev->name, dev);
1310 tp->tx_bufs = dma_alloc_coherent(&tp->pci_dev->dev, TX_BUF_TOT_LEN,
1311 &tp->tx_bufs_dma, GFP_KERNEL);
1312 tp->rx_ring = dma_alloc_coherent(&tp->pci_dev->dev, RX_BUF_TOT_LEN,
1313 &tp->rx_ring_dma, GFP_KERNEL);
1314 if (tp->tx_bufs == NULL || tp->rx_ring == NULL) {
1315 free_irq(dev->irq, dev);
1318 dma_free_coherent(&tp->pci_dev->dev, TX_BUF_TOT_LEN,
1319 tp->tx_bufs, tp->tx_bufs_dma);
1321 dma_free_coherent(&tp->pci_dev->dev, RX_BUF_TOT_LEN,
1322 tp->rx_ring, tp->rx_ring_dma);
1328 napi_enable(&tp->napi);
1330 tp->mii.full_duplex = tp->mii.force_media;
1331 tp->tx_flag = (TX_FIFO_THRESH << 11) & 0x003f0000;
1333 rtl8139_init_ring (dev);
1334 rtl8139_hw_start (dev);
1335 netif_start_queue (dev);
1337 if (netif_msg_ifup(tp))
1338 printk(KERN_DEBUG "%s: rtl8139_open() ioaddr %#llx IRQ %d"
1339 " GP Pins %2.2x %s-duplex.\n", dev->name,
1340 (unsigned long long)pci_resource_start (tp->pci_dev, 1),
1341 dev->irq, RTL_R8 (MediaStatus),
1342 tp->mii.full_duplex ? "full" : "half");
1344 rtl8139_start_thread(tp);
1350 static void rtl_check_media (struct net_device *dev, unsigned int init_media)
1352 struct rtl8139_private *tp = netdev_priv(dev);
1354 if (tp->phys[0] >= 0) {
1355 mii_check_media(&tp->mii, netif_msg_link(tp), init_media);
1359 /* Start the hardware at open or resume. */
1360 static void rtl8139_hw_start (struct net_device *dev)
1362 struct rtl8139_private *tp = netdev_priv(dev);
1363 void __iomem *ioaddr = tp->mmio_addr;
1367 /* Bring old chips out of low-power mode. */
1368 if (rtl_chip_info[tp->chipset].flags & HasHltClk)
1369 RTL_W8 (HltClk, 'R');
1371 rtl8139_chip_reset (ioaddr);
1373 /* unlock Config[01234] and BMCR register writes */
1374 RTL_W8_F (Cfg9346, Cfg9346_Unlock);
1375 /* Restore our idea of the MAC address. */
1376 RTL_W32_F (MAC0 + 0, cpu_to_le32 (*(u32 *) (dev->dev_addr + 0)));
1377 RTL_W32_F (MAC0 + 4, cpu_to_le32 (*(u32 *) (dev->dev_addr + 4)));
1379 /* Must enable Tx/Rx before setting transfer thresholds! */
1380 RTL_W8 (ChipCmd, CmdRxEnb | CmdTxEnb);
1382 tp->rx_config = rtl8139_rx_config | AcceptBroadcast | AcceptMyPhys;
1383 RTL_W32 (RxConfig, tp->rx_config);
1384 RTL_W32 (TxConfig, rtl8139_tx_config);
1388 rtl_check_media (dev, 1);
1390 if (tp->chipset >= CH_8139B) {
1391 /* Disable magic packet scanning, which is enabled
1392 * when PM is enabled in Config1. It can be reenabled
1393 * via ETHTOOL_SWOL if desired. */
1394 RTL_W8 (Config3, RTL_R8 (Config3) & ~Cfg3_Magic);
1397 DPRINTK("init buffer addresses\n");
1399 /* Lock Config[01234] and BMCR register writes */
1400 RTL_W8 (Cfg9346, Cfg9346_Lock);
1402 /* init Rx ring buffer DMA address */
1403 RTL_W32_F (RxBuf, tp->rx_ring_dma);
1405 /* init Tx buffer DMA addresses */
1406 for (i = 0; i < NUM_TX_DESC; i++)
1407 RTL_W32_F (TxAddr0 + (i * 4), tp->tx_bufs_dma + (tp->tx_buf[i] - tp->tx_bufs));
1409 RTL_W32 (RxMissed, 0);
1411 rtl8139_set_rx_mode (dev);
1413 /* no early-rx interrupts */
1414 RTL_W16 (MultiIntr, RTL_R16 (MultiIntr) & MultiIntrClear);
1416 /* make sure RxTx has started */
1417 tmp = RTL_R8 (ChipCmd);
1418 if ((!(tmp & CmdRxEnb)) || (!(tmp & CmdTxEnb)))
1419 RTL_W8 (ChipCmd, CmdRxEnb | CmdTxEnb);
1421 /* Enable all known interrupts by setting the interrupt mask. */
1422 RTL_W16 (IntrMask, rtl8139_intr_mask);
1426 /* Initialize the Rx and Tx rings, along with various 'dev' bits. */
1427 static void rtl8139_init_ring (struct net_device *dev)
1429 struct rtl8139_private *tp = netdev_priv(dev);
1436 for (i = 0; i < NUM_TX_DESC; i++)
1437 tp->tx_buf[i] = &tp->tx_bufs[i * TX_BUF_SIZE];
1441 /* This must be global for CONFIG_8139TOO_TUNE_TWISTER case */
1442 static int next_tick = 3 * HZ;
1444 #ifndef CONFIG_8139TOO_TUNE_TWISTER
1445 static inline void rtl8139_tune_twister (struct net_device *dev,
1446 struct rtl8139_private *tp) {}
1448 enum TwisterParamVals {
1449 PARA78_default = 0x78fa8388,
1450 PARA7c_default = 0xcb38de43, /* param[0][3] */
1451 PARA7c_xxx = 0xcb38de43,
1454 static const unsigned long param[4][4] = {
1455 {0xcb39de43, 0xcb39ce43, 0xfb38de03, 0xcb38de43},
1456 {0xcb39de43, 0xcb39ce43, 0xcb39ce83, 0xcb39ce83},
1457 {0xcb39de43, 0xcb39ce43, 0xcb39ce83, 0xcb39ce83},
1458 {0xbb39de43, 0xbb39ce43, 0xbb39ce83, 0xbb39ce83}
1461 static void rtl8139_tune_twister (struct net_device *dev,
1462 struct rtl8139_private *tp)
1465 void __iomem *ioaddr = tp->mmio_addr;
1467 /* This is a complicated state machine to configure the "twister" for
1468 impedance/echos based on the cable length.
1469 All of this is magic and undocumented.
1471 switch (tp->twistie) {
1473 if (RTL_R16 (CSCR) & CSCR_LinkOKBit) {
1474 /* We have link beat, let us tune the twister. */
1475 RTL_W16 (CSCR, CSCR_LinkDownOffCmd);
1476 tp->twistie = 2; /* Change to state 2. */
1477 next_tick = HZ / 10;
1479 /* Just put in some reasonable defaults for when beat returns. */
1480 RTL_W16 (CSCR, CSCR_LinkDownCmd);
1481 RTL_W32 (FIFOTMS, 0x20); /* Turn on cable test mode. */
1482 RTL_W32 (PARA78, PARA78_default);
1483 RTL_W32 (PARA7c, PARA7c_default);
1484 tp->twistie = 0; /* Bail from future actions. */
1488 /* Read how long it took to hear the echo. */
1489 linkcase = RTL_R16 (CSCR) & CSCR_LinkStatusBits;
1490 if (linkcase == 0x7000)
1492 else if (linkcase == 0x3000)
1494 else if (linkcase == 0x1000)
1499 tp->twistie = 3; /* Change to state 2. */
1500 next_tick = HZ / 10;
1503 /* Put out four tuning parameters, one per 100msec. */
1504 if (tp->twist_col == 0)
1505 RTL_W16 (FIFOTMS, 0);
1506 RTL_W32 (PARA7c, param[(int) tp->twist_row]
1507 [(int) tp->twist_col]);
1508 next_tick = HZ / 10;
1509 if (++tp->twist_col >= 4) {
1510 /* For short cables we are done.
1511 For long cables (row == 3) check for mistune. */
1513 (tp->twist_row == 3) ? 4 : 0;
1517 /* Special case for long cables: check for mistune. */
1518 if ((RTL_R16 (CSCR) &
1519 CSCR_LinkStatusBits) == 0x7000) {
1523 RTL_W32 (PARA7c, 0xfb38de03);
1525 next_tick = HZ / 10;
1529 /* Retune for shorter cable (column 2). */
1530 RTL_W32 (FIFOTMS, 0x20);
1531 RTL_W32 (PARA78, PARA78_default);
1532 RTL_W32 (PARA7c, PARA7c_default);
1533 RTL_W32 (FIFOTMS, 0x00);
1537 next_tick = HZ / 10;
1545 #endif /* CONFIG_8139TOO_TUNE_TWISTER */
1547 static inline void rtl8139_thread_iter (struct net_device *dev,
1548 struct rtl8139_private *tp,
1549 void __iomem *ioaddr)
1553 mii_lpa = mdio_read (dev, tp->phys[0], MII_LPA);
1555 if (!tp->mii.force_media && mii_lpa != 0xffff) {
1556 int duplex = (mii_lpa & LPA_100FULL)
1557 || (mii_lpa & 0x01C0) == 0x0040;
1558 if (tp->mii.full_duplex != duplex) {
1559 tp->mii.full_duplex = duplex;
1563 "%s: Setting %s-duplex based on MII #%d link"
1564 " partner ability of %4.4x.\n",
1566 tp->mii.full_duplex ? "full" : "half",
1567 tp->phys[0], mii_lpa);
1569 printk(KERN_INFO"%s: media is unconnected, link down, or incompatible connection\n",
1573 RTL_W8 (Cfg9346, Cfg9346_Unlock);
1574 RTL_W8 (Config1, tp->mii.full_duplex ? 0x60 : 0x20);
1575 RTL_W8 (Cfg9346, Cfg9346_Lock);
1580 next_tick = HZ * 60;
1582 rtl8139_tune_twister (dev, tp);
1584 DPRINTK ("%s: Media selection tick, Link partner %4.4x.\n",
1585 dev->name, RTL_R16 (NWayLPAR));
1586 DPRINTK ("%s: Other registers are IntMask %4.4x IntStatus %4.4x\n",
1587 dev->name, RTL_R16 (IntrMask), RTL_R16 (IntrStatus));
1588 DPRINTK ("%s: Chip config %2.2x %2.2x.\n",
1589 dev->name, RTL_R8 (Config0),
1593 static void rtl8139_thread (struct work_struct *work)
1595 struct rtl8139_private *tp =
1596 container_of(work, struct rtl8139_private, thread.work);
1597 struct net_device *dev = tp->mii.dev;
1598 unsigned long thr_delay = next_tick;
1602 if (!netif_running(dev))
1605 if (tp->watchdog_fired) {
1606 tp->watchdog_fired = 0;
1607 rtl8139_tx_timeout_task(work);
1609 rtl8139_thread_iter(dev, tp, tp->mmio_addr);
1611 if (tp->have_thread)
1612 schedule_delayed_work(&tp->thread, thr_delay);
1617 static void rtl8139_start_thread(struct rtl8139_private *tp)
1620 if (tp->chipset == CH_8139_K)
1622 else if (tp->drv_flags & HAS_LNK_CHNG)
1625 tp->have_thread = 1;
1626 tp->watchdog_fired = 0;
1628 schedule_delayed_work(&tp->thread, next_tick);
1631 static inline void rtl8139_tx_clear (struct rtl8139_private *tp)
1636 /* XXX account for unsent Tx packets in tp->stats.tx_dropped */
1639 static void rtl8139_tx_timeout_task (struct work_struct *work)
1641 struct rtl8139_private *tp =
1642 container_of(work, struct rtl8139_private, thread.work);
1643 struct net_device *dev = tp->mii.dev;
1644 void __iomem *ioaddr = tp->mmio_addr;
1648 printk (KERN_DEBUG "%s: Transmit timeout, status %2.2x %4.4x %4.4x "
1649 "media %2.2x.\n", dev->name, RTL_R8 (ChipCmd),
1650 RTL_R16(IntrStatus), RTL_R16(IntrMask), RTL_R8(MediaStatus));
1651 /* Emit info to figure out what went wrong. */
1652 printk (KERN_DEBUG "%s: Tx queue start entry %ld dirty entry %ld.\n",
1653 dev->name, tp->cur_tx, tp->dirty_tx);
1654 for (i = 0; i < NUM_TX_DESC; i++)
1655 printk (KERN_DEBUG "%s: Tx descriptor %d is %8.8lx.%s\n",
1656 dev->name, i, RTL_R32 (TxStatus0 + (i * 4)),
1657 i == tp->dirty_tx % NUM_TX_DESC ?
1658 " (queue head)" : "");
1660 tp->xstats.tx_timeouts++;
1662 /* disable Tx ASAP, if not already */
1663 tmp8 = RTL_R8 (ChipCmd);
1664 if (tmp8 & CmdTxEnb)
1665 RTL_W8 (ChipCmd, CmdRxEnb);
1667 spin_lock_bh(&tp->rx_lock);
1668 /* Disable interrupts by clearing the interrupt mask. */
1669 RTL_W16 (IntrMask, 0x0000);
1671 /* Stop a shared interrupt from scavenging while we are. */
1672 spin_lock_irq(&tp->lock);
1673 rtl8139_tx_clear (tp);
1674 spin_unlock_irq(&tp->lock);
1676 /* ...and finally, reset everything */
1677 if (netif_running(dev)) {
1678 rtl8139_hw_start (dev);
1679 netif_wake_queue (dev);
1681 spin_unlock_bh(&tp->rx_lock);
1684 static void rtl8139_tx_timeout (struct net_device *dev)
1686 struct rtl8139_private *tp = netdev_priv(dev);
1688 tp->watchdog_fired = 1;
1689 if (!tp->have_thread) {
1690 INIT_DELAYED_WORK(&tp->thread, rtl8139_thread);
1691 schedule_delayed_work(&tp->thread, next_tick);
1695 static int rtl8139_start_xmit (struct sk_buff *skb, struct net_device *dev)
1697 struct rtl8139_private *tp = netdev_priv(dev);
1698 void __iomem *ioaddr = tp->mmio_addr;
1700 unsigned int len = skb->len;
1701 unsigned long flags;
1703 /* Calculate the next Tx descriptor entry. */
1704 entry = tp->cur_tx % NUM_TX_DESC;
1706 /* Note: the chip doesn't have auto-pad! */
1707 if (likely(len < TX_BUF_SIZE)) {
1709 memset(tp->tx_buf[entry], 0, ETH_ZLEN);
1710 skb_copy_and_csum_dev(skb, tp->tx_buf[entry]);
1714 tp->stats.tx_dropped++;
1718 spin_lock_irqsave(&tp->lock, flags);
1719 RTL_W32_F (TxStatus0 + (entry * sizeof (u32)),
1720 tp->tx_flag | max(len, (unsigned int)ETH_ZLEN));
1722 dev->trans_start = jiffies;
1727 if ((tp->cur_tx - NUM_TX_DESC) == tp->dirty_tx)
1728 netif_stop_queue (dev);
1729 spin_unlock_irqrestore(&tp->lock, flags);
1731 if (netif_msg_tx_queued(tp))
1732 printk (KERN_DEBUG "%s: Queued Tx packet size %u to slot %d.\n",
1733 dev->name, len, entry);
1739 static void rtl8139_tx_interrupt (struct net_device *dev,
1740 struct rtl8139_private *tp,
1741 void __iomem *ioaddr)
1743 unsigned long dirty_tx, tx_left;
1745 assert (dev != NULL);
1746 assert (ioaddr != NULL);
1748 dirty_tx = tp->dirty_tx;
1749 tx_left = tp->cur_tx - dirty_tx;
1750 while (tx_left > 0) {
1751 int entry = dirty_tx % NUM_TX_DESC;
1754 txstatus = RTL_R32 (TxStatus0 + (entry * sizeof (u32)));
1756 if (!(txstatus & (TxStatOK | TxUnderrun | TxAborted)))
1757 break; /* It still hasn't been Txed */
1759 /* Note: TxCarrierLost is always asserted at 100mbps. */
1760 if (txstatus & (TxOutOfWindow | TxAborted)) {
1761 /* There was an major error, log it. */
1762 if (netif_msg_tx_err(tp))
1763 printk(KERN_DEBUG "%s: Transmit error, Tx status %8.8x.\n",
1764 dev->name, txstatus);
1765 tp->stats.tx_errors++;
1766 if (txstatus & TxAborted) {
1767 tp->stats.tx_aborted_errors++;
1768 RTL_W32 (TxConfig, TxClearAbt);
1769 RTL_W16 (IntrStatus, TxErr);
1772 if (txstatus & TxCarrierLost)
1773 tp->stats.tx_carrier_errors++;
1774 if (txstatus & TxOutOfWindow)
1775 tp->stats.tx_window_errors++;
1777 if (txstatus & TxUnderrun) {
1778 /* Add 64 to the Tx FIFO threshold. */
1779 if (tp->tx_flag < 0x00300000)
1780 tp->tx_flag += 0x00020000;
1781 tp->stats.tx_fifo_errors++;
1783 tp->stats.collisions += (txstatus >> 24) & 15;
1784 tp->stats.tx_bytes += txstatus & 0x7ff;
1785 tp->stats.tx_packets++;
1792 #ifndef RTL8139_NDEBUG
1793 if (tp->cur_tx - dirty_tx > NUM_TX_DESC) {
1794 printk (KERN_ERR "%s: Out-of-sync dirty pointer, %ld vs. %ld.\n",
1795 dev->name, dirty_tx, tp->cur_tx);
1796 dirty_tx += NUM_TX_DESC;
1798 #endif /* RTL8139_NDEBUG */
1800 /* only wake the queue if we did work, and the queue is stopped */
1801 if (tp->dirty_tx != dirty_tx) {
1802 tp->dirty_tx = dirty_tx;
1804 netif_wake_queue (dev);
1809 /* TODO: clean this up! Rx reset need not be this intensive */
1810 static void rtl8139_rx_err (u32 rx_status, struct net_device *dev,
1811 struct rtl8139_private *tp, void __iomem *ioaddr)
1814 #ifdef CONFIG_8139_OLD_RX_RESET
1818 if (netif_msg_rx_err (tp))
1819 printk(KERN_DEBUG "%s: Ethernet frame had errors, status %8.8x.\n",
1820 dev->name, rx_status);
1821 tp->stats.rx_errors++;
1822 if (!(rx_status & RxStatusOK)) {
1823 if (rx_status & RxTooLong) {
1824 DPRINTK ("%s: Oversized Ethernet frame, status %4.4x!\n",
1825 dev->name, rx_status);
1826 /* A.C.: The chip hangs here. */
1828 if (rx_status & (RxBadSymbol | RxBadAlign))
1829 tp->stats.rx_frame_errors++;
1830 if (rx_status & (RxRunt | RxTooLong))
1831 tp->stats.rx_length_errors++;
1832 if (rx_status & RxCRCErr)
1833 tp->stats.rx_crc_errors++;
1835 tp->xstats.rx_lost_in_ring++;
1838 #ifndef CONFIG_8139_OLD_RX_RESET
1839 tmp8 = RTL_R8 (ChipCmd);
1840 RTL_W8 (ChipCmd, tmp8 & ~CmdRxEnb);
1841 RTL_W8 (ChipCmd, tmp8);
1842 RTL_W32 (RxConfig, tp->rx_config);
1845 /* Reset the receiver, based on RealTek recommendation. (Bug?) */
1847 /* disable receive */
1848 RTL_W8_F (ChipCmd, CmdTxEnb);
1850 while (--tmp_work > 0) {
1852 tmp8 = RTL_R8 (ChipCmd);
1853 if (!(tmp8 & CmdRxEnb))
1857 printk (KERN_WARNING PFX "rx stop wait too long\n");
1858 /* restart receive */
1860 while (--tmp_work > 0) {
1861 RTL_W8_F (ChipCmd, CmdRxEnb | CmdTxEnb);
1863 tmp8 = RTL_R8 (ChipCmd);
1864 if ((tmp8 & CmdRxEnb) && (tmp8 & CmdTxEnb))
1868 printk (KERN_WARNING PFX "tx/rx enable wait too long\n");
1870 /* and reinitialize all rx related registers */
1871 RTL_W8_F (Cfg9346, Cfg9346_Unlock);
1872 /* Must enable Tx/Rx before setting transfer thresholds! */
1873 RTL_W8 (ChipCmd, CmdRxEnb | CmdTxEnb);
1875 tp->rx_config = rtl8139_rx_config | AcceptBroadcast | AcceptMyPhys;
1876 RTL_W32 (RxConfig, tp->rx_config);
1879 DPRINTK("init buffer addresses\n");
1881 /* Lock Config[01234] and BMCR register writes */
1882 RTL_W8 (Cfg9346, Cfg9346_Lock);
1884 /* init Rx ring buffer DMA address */
1885 RTL_W32_F (RxBuf, tp->rx_ring_dma);
1887 /* A.C.: Reset the multicast list. */
1888 __set_rx_mode (dev);
1893 static __inline__ void wrap_copy(struct sk_buff *skb, const unsigned char *ring,
1894 u32 offset, unsigned int size)
1896 u32 left = RX_BUF_LEN - offset;
1899 skb_copy_to_linear_data(skb, ring + offset, left);
1900 skb_copy_to_linear_data_offset(skb, left, ring, size - left);
1902 skb_copy_to_linear_data(skb, ring + offset, size);
1906 static void rtl8139_isr_ack(struct rtl8139_private *tp)
1908 void __iomem *ioaddr = tp->mmio_addr;
1911 status = RTL_R16 (IntrStatus) & RxAckBits;
1913 /* Clear out errors and receive interrupts */
1914 if (likely(status != 0)) {
1915 if (unlikely(status & (RxFIFOOver | RxOverflow))) {
1916 tp->stats.rx_errors++;
1917 if (status & RxFIFOOver)
1918 tp->stats.rx_fifo_errors++;
1920 RTL_W16_F (IntrStatus, RxAckBits);
1924 static int rtl8139_rx(struct net_device *dev, struct rtl8139_private *tp,
1927 void __iomem *ioaddr = tp->mmio_addr;
1929 unsigned char *rx_ring = tp->rx_ring;
1930 unsigned int cur_rx = tp->cur_rx;
1931 unsigned int rx_size = 0;
1933 DPRINTK ("%s: In rtl8139_rx(), current %4.4x BufAddr %4.4x,"
1934 " free to %4.4x, Cmd %2.2x.\n", dev->name, (u16)cur_rx,
1935 RTL_R16 (RxBufAddr),
1936 RTL_R16 (RxBufPtr), RTL_R8 (ChipCmd));
1938 while (netif_running(dev) && received < budget
1939 && (RTL_R8 (ChipCmd) & RxBufEmpty) == 0) {
1940 u32 ring_offset = cur_rx % RX_BUF_LEN;
1942 unsigned int pkt_size;
1943 struct sk_buff *skb;
1947 /* read size+status of next frame from DMA ring buffer */
1948 rx_status = le32_to_cpu (*(u32 *) (rx_ring + ring_offset));
1949 rx_size = rx_status >> 16;
1950 pkt_size = rx_size - 4;
1952 if (netif_msg_rx_status(tp))
1953 printk(KERN_DEBUG "%s: rtl8139_rx() status %4.4x, size %4.4x,"
1954 " cur %4.4x.\n", dev->name, rx_status,
1956 #if RTL8139_DEBUG > 2
1959 DPRINTK ("%s: Frame contents ", dev->name);
1960 for (i = 0; i < 70; i++)
1962 rx_ring[ring_offset + i]);
1967 /* Packet copy from FIFO still in progress.
1968 * Theoretically, this should never happen
1969 * since EarlyRx is disabled.
1971 if (unlikely(rx_size == 0xfff0)) {
1972 if (!tp->fifo_copy_timeout)
1973 tp->fifo_copy_timeout = jiffies + 2;
1974 else if (time_after(jiffies, tp->fifo_copy_timeout)) {
1975 DPRINTK ("%s: hung FIFO. Reset.", dev->name);
1979 if (netif_msg_intr(tp)) {
1980 printk(KERN_DEBUG "%s: fifo copy in progress.",
1983 tp->xstats.early_rx++;
1988 tp->fifo_copy_timeout = 0;
1990 /* If Rx err or invalid rx_size/rx_status received
1991 * (which happens if we get lost in the ring),
1992 * Rx process gets reset, so we abort any further
1995 if (unlikely((rx_size > (MAX_ETH_FRAME_SIZE+4)) ||
1997 (!(rx_status & RxStatusOK)))) {
1998 rtl8139_rx_err (rx_status, dev, tp, ioaddr);
2003 /* Malloc up new buffer, compatible with net-2e. */
2004 /* Omit the four octet CRC from the length. */
2006 skb = dev_alloc_skb (pkt_size + 2);
2008 skb_reserve (skb, 2); /* 16 byte align the IP fields. */
2010 wrap_copy(skb, rx_ring, ring_offset+4, pkt_size);
2012 skb_copy_to_linear_data (skb, &rx_ring[ring_offset + 4], pkt_size);
2014 skb_put (skb, pkt_size);
2016 skb->protocol = eth_type_trans (skb, dev);
2018 dev->last_rx = jiffies;
2019 tp->stats.rx_bytes += pkt_size;
2020 tp->stats.rx_packets++;
2022 netif_receive_skb (skb);
2024 if (net_ratelimit())
2025 printk (KERN_WARNING
2026 "%s: Memory squeeze, dropping packet.\n",
2028 tp->stats.rx_dropped++;
2032 cur_rx = (cur_rx + rx_size + 4 + 3) & ~3;
2033 RTL_W16 (RxBufPtr, (u16) (cur_rx - 16));
2035 rtl8139_isr_ack(tp);
2038 if (unlikely(!received || rx_size == 0xfff0))
2039 rtl8139_isr_ack(tp);
2041 #if RTL8139_DEBUG > 1
2042 DPRINTK ("%s: Done rtl8139_rx(), current %4.4x BufAddr %4.4x,"
2043 " free to %4.4x, Cmd %2.2x.\n", dev->name, cur_rx,
2044 RTL_R16 (RxBufAddr),
2045 RTL_R16 (RxBufPtr), RTL_R8 (ChipCmd));
2048 tp->cur_rx = cur_rx;
2051 * The receive buffer should be mostly empty.
2052 * Tell NAPI to reenable the Rx irq.
2054 if (tp->fifo_copy_timeout)
2062 static void rtl8139_weird_interrupt (struct net_device *dev,
2063 struct rtl8139_private *tp,
2064 void __iomem *ioaddr,
2065 int status, int link_changed)
2067 DPRINTK ("%s: Abnormal interrupt, status %8.8x.\n",
2070 assert (dev != NULL);
2071 assert (tp != NULL);
2072 assert (ioaddr != NULL);
2074 /* Update the error count. */
2075 tp->stats.rx_missed_errors += RTL_R32 (RxMissed);
2076 RTL_W32 (RxMissed, 0);
2078 if ((status & RxUnderrun) && link_changed &&
2079 (tp->drv_flags & HAS_LNK_CHNG)) {
2080 rtl_check_media(dev, 0);
2081 status &= ~RxUnderrun;
2084 if (status & (RxUnderrun | RxErr))
2085 tp->stats.rx_errors++;
2087 if (status & PCSTimeout)
2088 tp->stats.rx_length_errors++;
2089 if (status & RxUnderrun)
2090 tp->stats.rx_fifo_errors++;
2091 if (status & PCIErr) {
2093 pci_read_config_word (tp->pci_dev, PCI_STATUS, &pci_cmd_status);
2094 pci_write_config_word (tp->pci_dev, PCI_STATUS, pci_cmd_status);
2096 printk (KERN_ERR "%s: PCI Bus error %4.4x.\n",
2097 dev->name, pci_cmd_status);
2101 static int rtl8139_poll(struct napi_struct *napi, int budget)
2103 struct rtl8139_private *tp = container_of(napi, struct rtl8139_private, napi);
2104 struct net_device *dev = tp->dev;
2105 void __iomem *ioaddr = tp->mmio_addr;
2108 spin_lock(&tp->rx_lock);
2110 if (likely(RTL_R16(IntrStatus) & RxAckBits))
2111 work_done += rtl8139_rx(dev, tp, budget);
2113 if (work_done < budget) {
2114 unsigned long flags;
2116 * Order is important since data can get interrupted
2117 * again when we think we are done.
2119 spin_lock_irqsave(&tp->lock, flags);
2120 RTL_W16_F(IntrMask, rtl8139_intr_mask);
2121 __netif_rx_complete(dev, napi);
2122 spin_unlock_irqrestore(&tp->lock, flags);
2124 spin_unlock(&tp->rx_lock);
2129 /* The interrupt handler does all of the Rx thread work and cleans up
2130 after the Tx thread. */
2131 static irqreturn_t rtl8139_interrupt (int irq, void *dev_instance)
2133 struct net_device *dev = (struct net_device *) dev_instance;
2134 struct rtl8139_private *tp = netdev_priv(dev);
2135 void __iomem *ioaddr = tp->mmio_addr;
2136 u16 status, ackstat;
2137 int link_changed = 0; /* avoid bogus "uninit" warning */
2140 spin_lock (&tp->lock);
2141 status = RTL_R16 (IntrStatus);
2144 if (unlikely((status & rtl8139_intr_mask) == 0))
2149 /* h/w no longer present (hotplug?) or major error, bail */
2150 if (unlikely(status == 0xFFFF))
2153 /* close possible race's with dev_close */
2154 if (unlikely(!netif_running(dev))) {
2155 RTL_W16 (IntrMask, 0);
2159 /* Acknowledge all of the current interrupt sources ASAP, but
2160 an first get an additional status bit from CSCR. */
2161 if (unlikely(status & RxUnderrun))
2162 link_changed = RTL_R16 (CSCR) & CSCR_LinkChangeBit;
2164 ackstat = status & ~(RxAckBits | TxErr);
2166 RTL_W16 (IntrStatus, ackstat);
2168 /* Receive packets are processed by poll routine.
2169 If not running start it now. */
2170 if (status & RxAckBits){
2171 if (netif_rx_schedule_prep(dev, &tp->napi)) {
2172 RTL_W16_F (IntrMask, rtl8139_norx_intr_mask);
2173 __netif_rx_schedule(dev, &tp->napi);
2177 /* Check uncommon events with one test. */
2178 if (unlikely(status & (PCIErr | PCSTimeout | RxUnderrun | RxErr)))
2179 rtl8139_weird_interrupt (dev, tp, ioaddr,
2180 status, link_changed);
2182 if (status & (TxOK | TxErr)) {
2183 rtl8139_tx_interrupt (dev, tp, ioaddr);
2185 RTL_W16 (IntrStatus, TxErr);
2188 spin_unlock (&tp->lock);
2190 DPRINTK ("%s: exiting interrupt, intr_status=%#4.4x.\n",
2191 dev->name, RTL_R16 (IntrStatus));
2192 return IRQ_RETVAL(handled);
2195 #ifdef CONFIG_NET_POLL_CONTROLLER
2197 * Polling receive - used by netconsole and other diagnostic tools
2198 * to allow network i/o with interrupts disabled.
2200 static void rtl8139_poll_controller(struct net_device *dev)
2202 disable_irq(dev->irq);
2203 rtl8139_interrupt(dev->irq, dev);
2204 enable_irq(dev->irq);
2208 static int rtl8139_close (struct net_device *dev)
2210 struct rtl8139_private *tp = netdev_priv(dev);
2211 void __iomem *ioaddr = tp->mmio_addr;
2212 unsigned long flags;
2214 netif_stop_queue(dev);
2215 napi_disable(&tp->napi);
2217 if (netif_msg_ifdown(tp))
2218 printk(KERN_DEBUG "%s: Shutting down ethercard, status was 0x%4.4x.\n",
2219 dev->name, RTL_R16 (IntrStatus));
2221 spin_lock_irqsave (&tp->lock, flags);
2223 /* Stop the chip's Tx and Rx DMA processes. */
2224 RTL_W8 (ChipCmd, 0);
2226 /* Disable interrupts by clearing the interrupt mask. */
2227 RTL_W16 (IntrMask, 0);
2229 /* Update the error counts. */
2230 tp->stats.rx_missed_errors += RTL_R32 (RxMissed);
2231 RTL_W32 (RxMissed, 0);
2233 spin_unlock_irqrestore (&tp->lock, flags);
2235 synchronize_irq (dev->irq); /* racy, but that's ok here */
2236 free_irq (dev->irq, dev);
2238 rtl8139_tx_clear (tp);
2240 dma_free_coherent(&tp->pci_dev->dev, RX_BUF_TOT_LEN,
2241 tp->rx_ring, tp->rx_ring_dma);
2242 dma_free_coherent(&tp->pci_dev->dev, TX_BUF_TOT_LEN,
2243 tp->tx_bufs, tp->tx_bufs_dma);
2247 /* Green! Put the chip in low-power mode. */
2248 RTL_W8 (Cfg9346, Cfg9346_Unlock);
2250 if (rtl_chip_info[tp->chipset].flags & HasHltClk)
2251 RTL_W8 (HltClk, 'H'); /* 'R' would leave the clock running. */
2257 /* Get the ethtool Wake-on-LAN settings. Assumes that wol points to
2258 kernel memory, *wol has been initialized as {ETHTOOL_GWOL}, and
2259 other threads or interrupts aren't messing with the 8139. */
2260 static void rtl8139_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
2262 struct rtl8139_private *np = netdev_priv(dev);
2263 void __iomem *ioaddr = np->mmio_addr;
2265 spin_lock_irq(&np->lock);
2266 if (rtl_chip_info[np->chipset].flags & HasLWake) {
2267 u8 cfg3 = RTL_R8 (Config3);
2268 u8 cfg5 = RTL_R8 (Config5);
2270 wol->supported = WAKE_PHY | WAKE_MAGIC
2271 | WAKE_UCAST | WAKE_MCAST | WAKE_BCAST;
2274 if (cfg3 & Cfg3_LinkUp)
2275 wol->wolopts |= WAKE_PHY;
2276 if (cfg3 & Cfg3_Magic)
2277 wol->wolopts |= WAKE_MAGIC;
2278 /* (KON)FIXME: See how netdev_set_wol() handles the
2279 following constants. */
2280 if (cfg5 & Cfg5_UWF)
2281 wol->wolopts |= WAKE_UCAST;
2282 if (cfg5 & Cfg5_MWF)
2283 wol->wolopts |= WAKE_MCAST;
2284 if (cfg5 & Cfg5_BWF)
2285 wol->wolopts |= WAKE_BCAST;
2287 spin_unlock_irq(&np->lock);
2291 /* Set the ethtool Wake-on-LAN settings. Return 0 or -errno. Assumes
2292 that wol points to kernel memory and other threads or interrupts
2293 aren't messing with the 8139. */
2294 static int rtl8139_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
2296 struct rtl8139_private *np = netdev_priv(dev);
2297 void __iomem *ioaddr = np->mmio_addr;
2301 support = ((rtl_chip_info[np->chipset].flags & HasLWake)
2302 ? (WAKE_PHY | WAKE_MAGIC
2303 | WAKE_UCAST | WAKE_MCAST | WAKE_BCAST)
2305 if (wol->wolopts & ~support)
2308 spin_lock_irq(&np->lock);
2309 cfg3 = RTL_R8 (Config3) & ~(Cfg3_LinkUp | Cfg3_Magic);
2310 if (wol->wolopts & WAKE_PHY)
2311 cfg3 |= Cfg3_LinkUp;
2312 if (wol->wolopts & WAKE_MAGIC)
2314 RTL_W8 (Cfg9346, Cfg9346_Unlock);
2315 RTL_W8 (Config3, cfg3);
2316 RTL_W8 (Cfg9346, Cfg9346_Lock);
2318 cfg5 = RTL_R8 (Config5) & ~(Cfg5_UWF | Cfg5_MWF | Cfg5_BWF);
2319 /* (KON)FIXME: These are untested. We may have to set the
2320 CRC0, Wakeup0 and LSBCRC0 registers too, but I have no
2322 if (wol->wolopts & WAKE_UCAST)
2324 if (wol->wolopts & WAKE_MCAST)
2326 if (wol->wolopts & WAKE_BCAST)
2328 RTL_W8 (Config5, cfg5); /* need not unlock via Cfg9346 */
2329 spin_unlock_irq(&np->lock);
2334 static void rtl8139_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
2336 struct rtl8139_private *np = netdev_priv(dev);
2337 strcpy(info->driver, DRV_NAME);
2338 strcpy(info->version, DRV_VERSION);
2339 strcpy(info->bus_info, pci_name(np->pci_dev));
2340 info->regdump_len = np->regs_len;
2343 static int rtl8139_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
2345 struct rtl8139_private *np = netdev_priv(dev);
2346 spin_lock_irq(&np->lock);
2347 mii_ethtool_gset(&np->mii, cmd);
2348 spin_unlock_irq(&np->lock);
2352 static int rtl8139_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
2354 struct rtl8139_private *np = netdev_priv(dev);
2356 spin_lock_irq(&np->lock);
2357 rc = mii_ethtool_sset(&np->mii, cmd);
2358 spin_unlock_irq(&np->lock);
2362 static int rtl8139_nway_reset(struct net_device *dev)
2364 struct rtl8139_private *np = netdev_priv(dev);
2365 return mii_nway_restart(&np->mii);
2368 static u32 rtl8139_get_link(struct net_device *dev)
2370 struct rtl8139_private *np = netdev_priv(dev);
2371 return mii_link_ok(&np->mii);
2374 static u32 rtl8139_get_msglevel(struct net_device *dev)
2376 struct rtl8139_private *np = netdev_priv(dev);
2377 return np->msg_enable;
2380 static void rtl8139_set_msglevel(struct net_device *dev, u32 datum)
2382 struct rtl8139_private *np = netdev_priv(dev);
2383 np->msg_enable = datum;
2386 /* TODO: we are too slack to do reg dumping for pio, for now */
2387 #ifdef CONFIG_8139TOO_PIO
2388 #define rtl8139_get_regs_len NULL
2389 #define rtl8139_get_regs NULL
2391 static int rtl8139_get_regs_len(struct net_device *dev)
2393 struct rtl8139_private *np = netdev_priv(dev);
2394 return np->regs_len;
2397 static void rtl8139_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *regbuf)
2399 struct rtl8139_private *np = netdev_priv(dev);
2401 regs->version = RTL_REGS_VER;
2403 spin_lock_irq(&np->lock);
2404 memcpy_fromio(regbuf, np->mmio_addr, regs->len);
2405 spin_unlock_irq(&np->lock);
2407 #endif /* CONFIG_8139TOO_MMIO */
2409 static int rtl8139_get_sset_count(struct net_device *dev, int sset)
2413 return RTL_NUM_STATS;
2419 static void rtl8139_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *stats, u64 *data)
2421 struct rtl8139_private *np = netdev_priv(dev);
2423 data[0] = np->xstats.early_rx;
2424 data[1] = np->xstats.tx_buf_mapped;
2425 data[2] = np->xstats.tx_timeouts;
2426 data[3] = np->xstats.rx_lost_in_ring;
2429 static void rtl8139_get_strings(struct net_device *dev, u32 stringset, u8 *data)
2431 memcpy(data, ethtool_stats_keys, sizeof(ethtool_stats_keys));
2434 static const struct ethtool_ops rtl8139_ethtool_ops = {
2435 .get_drvinfo = rtl8139_get_drvinfo,
2436 .get_settings = rtl8139_get_settings,
2437 .set_settings = rtl8139_set_settings,
2438 .get_regs_len = rtl8139_get_regs_len,
2439 .get_regs = rtl8139_get_regs,
2440 .nway_reset = rtl8139_nway_reset,
2441 .get_link = rtl8139_get_link,
2442 .get_msglevel = rtl8139_get_msglevel,
2443 .set_msglevel = rtl8139_set_msglevel,
2444 .get_wol = rtl8139_get_wol,
2445 .set_wol = rtl8139_set_wol,
2446 .get_strings = rtl8139_get_strings,
2447 .get_sset_count = rtl8139_get_sset_count,
2448 .get_ethtool_stats = rtl8139_get_ethtool_stats,
2451 static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
2453 struct rtl8139_private *np = netdev_priv(dev);
2456 if (!netif_running(dev))
2459 spin_lock_irq(&np->lock);
2460 rc = generic_mii_ioctl(&np->mii, if_mii(rq), cmd, NULL);
2461 spin_unlock_irq(&np->lock);
2467 static struct net_device_stats *rtl8139_get_stats (struct net_device *dev)
2469 struct rtl8139_private *tp = netdev_priv(dev);
2470 void __iomem *ioaddr = tp->mmio_addr;
2471 unsigned long flags;
2473 if (netif_running(dev)) {
2474 spin_lock_irqsave (&tp->lock, flags);
2475 tp->stats.rx_missed_errors += RTL_R32 (RxMissed);
2476 RTL_W32 (RxMissed, 0);
2477 spin_unlock_irqrestore (&tp->lock, flags);
2483 /* Set or clear the multicast filter for this adaptor.
2484 This routine is not state sensitive and need not be SMP locked. */
2486 static void __set_rx_mode (struct net_device *dev)
2488 struct rtl8139_private *tp = netdev_priv(dev);
2489 void __iomem *ioaddr = tp->mmio_addr;
2490 u32 mc_filter[2]; /* Multicast hash filter */
2494 DPRINTK ("%s: rtl8139_set_rx_mode(%4.4x) done -- Rx config %8.8lx.\n",
2495 dev->name, dev->flags, RTL_R32 (RxConfig));
2497 /* Note: do not reorder, GCC is clever about common statements. */
2498 if (dev->flags & IFF_PROMISC) {
2500 AcceptBroadcast | AcceptMulticast | AcceptMyPhys |
2502 mc_filter[1] = mc_filter[0] = 0xffffffff;
2503 } else if ((dev->mc_count > multicast_filter_limit)
2504 || (dev->flags & IFF_ALLMULTI)) {
2505 /* Too many to filter perfectly -- accept all multicasts. */
2506 rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
2507 mc_filter[1] = mc_filter[0] = 0xffffffff;
2509 struct dev_mc_list *mclist;
2510 rx_mode = AcceptBroadcast | AcceptMyPhys;
2511 mc_filter[1] = mc_filter[0] = 0;
2512 for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
2513 i++, mclist = mclist->next) {
2514 int bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26;
2516 mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
2517 rx_mode |= AcceptMulticast;
2521 /* We can safely update without stopping the chip. */
2522 tmp = rtl8139_rx_config | rx_mode;
2523 if (tp->rx_config != tmp) {
2524 RTL_W32_F (RxConfig, tmp);
2525 tp->rx_config = tmp;
2527 RTL_W32_F (MAR0 + 0, mc_filter[0]);
2528 RTL_W32_F (MAR0 + 4, mc_filter[1]);
2531 static void rtl8139_set_rx_mode (struct net_device *dev)
2533 unsigned long flags;
2534 struct rtl8139_private *tp = netdev_priv(dev);
2536 spin_lock_irqsave (&tp->lock, flags);
2538 spin_unlock_irqrestore (&tp->lock, flags);
2543 static int rtl8139_suspend (struct pci_dev *pdev, pm_message_t state)
2545 struct net_device *dev = pci_get_drvdata (pdev);
2546 struct rtl8139_private *tp = netdev_priv(dev);
2547 void __iomem *ioaddr = tp->mmio_addr;
2548 unsigned long flags;
2550 pci_save_state (pdev);
2552 if (!netif_running (dev))
2555 netif_device_detach (dev);
2557 spin_lock_irqsave (&tp->lock, flags);
2559 /* Disable interrupts, stop Tx and Rx. */
2560 RTL_W16 (IntrMask, 0);
2561 RTL_W8 (ChipCmd, 0);
2563 /* Update the error counts. */
2564 tp->stats.rx_missed_errors += RTL_R32 (RxMissed);
2565 RTL_W32 (RxMissed, 0);
2567 spin_unlock_irqrestore (&tp->lock, flags);
2569 pci_set_power_state (pdev, PCI_D3hot);
2575 static int rtl8139_resume (struct pci_dev *pdev)
2577 struct net_device *dev = pci_get_drvdata (pdev);
2579 pci_restore_state (pdev);
2580 if (!netif_running (dev))
2582 pci_set_power_state (pdev, PCI_D0);
2583 rtl8139_init_ring (dev);
2584 rtl8139_hw_start (dev);
2585 netif_device_attach (dev);
2589 #endif /* CONFIG_PM */
2592 static struct pci_driver rtl8139_pci_driver = {
2594 .id_table = rtl8139_pci_tbl,
2595 .probe = rtl8139_init_one,
2596 .remove = __devexit_p(rtl8139_remove_one),
2598 .suspend = rtl8139_suspend,
2599 .resume = rtl8139_resume,
2600 #endif /* CONFIG_PM */
2604 static int __init rtl8139_init_module (void)
2606 /* when we're a module, we always print a version message,
2607 * even if no 8139 board is found.
2610 printk (KERN_INFO RTL8139_DRIVER_NAME "\n");
2613 return pci_register_driver(&rtl8139_pci_driver);
2617 static void __exit rtl8139_cleanup_module (void)
2619 pci_unregister_driver (&rtl8139_pci_driver);
2623 module_init(rtl8139_init_module);
2624 module_exit(rtl8139_cleanup_module);