ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.bz2
[linux-2.6.git] / drivers / net / 8139too.c
1 /*
2
3         8139too.c: A RealTek RTL-8139 Fast Ethernet driver for Linux.
4
5         Maintained by Jeff Garzik <jgarzik@pobox.com>
6         Copyright 2000-2002 Jeff Garzik
7
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:
11
12         -----<snip>-----
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.
22
23                 This driver is for boards based on the RTL8129 and RTL8139
24                 PCI ethernet chips.
25
26                 The author may be reached as becker@scyld.com, or C/O Scyld
27                 Computing Corporation 410 Severn Ave., Suite 210 Annapolis
28                 MD 21403
29
30                 Support and updates available at
31                 http://www.scyld.com/network/rtl8139.html
32
33                 Twister-tuning table provided by Kinston
34                 <shangh@realtek.com.tw>.
35
36         -----<snip>-----
37
38         This software may be used and distributed according to the terms
39         of the GNU General Public License, incorporated herein by reference.
40
41         Contributors:
42
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)
45
46                 Tigran Aivazian - bug fixes, skbuff free cleanup
47
48                 Martin Mares - suggestions for PCI cleanup
49
50                 David S. Miller - PCI DMA and softnet updates
51
52                 Ernst Gill - fixes ported from BSD driver
53
54                 Daniel Kobras - identified specific locations of
55                         posted MMIO write bugginess
56
57                 Gerard Sharp - bug fix, testing and feedback
58
59                 David Ford - Rx ring wrap fix
60
61                 Dan DeMaggio - swapped RTL8139 cards with me, and allowed me
62                 to find and fix a crucial bug on older chipsets.
63
64                 Donald Becker/Chris Butterworth/Marcus Westergren -
65                 Noticed various Rx packet size-related buglets.
66
67                 Santiago Garcia Mantinan - testing and feedback
68
69                 Jens David - 2.2.x kernel backports
70
71                 Martin Dennett - incredibly helpful insight on undocumented
72                 features of the 8139 chips
73
74                 Jean-Jacques Michel - bug fix
75
76                 Tobias Ringström - Rx interrupt status checking suggestion
77
78                 Andrew Morton - Clear blocked signals, avoid
79                 buffer overrun setting current->comm.
80
81                 Kalle Olavi Niemitalo - Wake-on-LAN ioctls
82
83                 Robert Kuebel - Save kernel thread from dying on any signal.
84
85         Submitting bug reports:
86
87                 "rtl8139-diag -mmmaaavvveefN" output
88                 enable RTL8139_DEBUG below, and look at 'dmesg' or kernel log
89
90                 See 8139too.txt for more details.
91
92 */
93
94 #define DRV_NAME        "8139too"
95 #define DRV_VERSION     "0.9.27"
96
97
98 #include <linux/config.h>
99 #include <linux/module.h>
100 #include <linux/kernel.h>
101 #include <linux/compiler.h>
102 #include <linux/pci.h>
103 #include <linux/init.h>
104 #include <linux/ioport.h>
105 #include <linux/netdevice.h>
106 #include <linux/etherdevice.h>
107 #include <linux/rtnetlink.h>
108 #include <linux/delay.h>
109 #include <linux/ethtool.h>
110 #include <linux/mii.h>
111 #include <linux/completion.h>
112 #include <linux/crc32.h>
113 #include <linux/suspend.h>
114 #include <asm/io.h>
115 #include <asm/uaccess.h>
116 #include <asm/irq.h>
117
118 #define RTL8139_DRIVER_NAME   DRV_NAME " Fast Ethernet driver " DRV_VERSION
119 #define PFX DRV_NAME ": "
120
121 /* Default Message level */
122 #define RTL8139_DEF_MSG_ENABLE   (NETIF_MSG_DRV   | \
123                                  NETIF_MSG_PROBE  | \
124                                  NETIF_MSG_LINK)
125
126
127 /* enable PIO instead of MMIO, if CONFIG_8139TOO_PIO is selected */
128 #ifdef CONFIG_8139TOO_PIO
129 #define USE_IO_OPS 1
130 #endif
131
132 /* define to 1 to enable copious debugging info */
133 #undef RTL8139_DEBUG
134
135 /* define to 1 to disable lightweight runtime debugging checks */
136 #undef RTL8139_NDEBUG
137
138
139 #ifdef RTL8139_DEBUG
140 /* note: prints function name for you */
141 #  define DPRINTK(fmt, args...) printk(KERN_DEBUG "%s: " fmt, __FUNCTION__ , ## args)
142 #else
143 #  define DPRINTK(fmt, args...)
144 #endif
145
146 #ifdef RTL8139_NDEBUG
147 #  define assert(expr) do {} while (0)
148 #else
149 #  define assert(expr) \
150         if(unlikely(!(expr))) {                                 \
151         printk(KERN_ERR "Assertion failed! %s,%s,%s,line=%d\n", \
152         #expr,__FILE__,__FUNCTION__,__LINE__);                  \
153         }
154 #endif
155
156
157 /* A few user-configurable values. */
158 /* media options */
159 #define MAX_UNITS 8
160 static int media[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
161 static int full_duplex[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
162
163 /* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
164    The RTL chips use a 64 element hash table based on the Ethernet CRC.  */
165 static int multicast_filter_limit = 32;
166
167 /* bitmapped message enable number */
168 static int debug = -1;
169
170 /*
171  * Receive ring size 
172  * Warning: 64K ring has hardware issues and may lock up.
173  */
174 #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 */
178
179 #if RX_BUF_LEN == 65536
180 #define RX_BUF_TOT_LEN  RX_BUF_LEN
181 #else
182 #define RX_BUF_TOT_LEN  (RX_BUF_LEN + RX_BUF_PAD + RX_BUF_WRAP_PAD)
183 #endif
184
185 /* Number of Tx descriptor registers. */
186 #define NUM_TX_DESC     4
187
188 /* max supported ethernet frame size -- must be at least (dev->mtu+14+4).*/
189 #define MAX_ETH_FRAME_SIZE      1536
190
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)
194
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. */
198
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) */
204
205 /* Operational parameters that usually are not changed. */
206 /* Time in jiffies before concluding the transmitter is hung. */
207 #define TX_TIMEOUT  (6*HZ)
208
209
210 enum {
211         HAS_MII_XCVR = 0x010000,
212         HAS_CHIP_XCVR = 0x020000,
213         HAS_LNK_CHNG = 0x040000,
214 };
215
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
220
221 #define RTL8129_CAPS    HAS_MII_XCVR
222 #define RTL8139_CAPS    HAS_CHIP_XCVR|HAS_LNK_CHNG
223
224 typedef enum {
225         RTL8139 = 0,
226         RTL8129,
227 } board_t;
228
229
230 /* indexed by board_t, above */
231 static struct {
232         const char *name;
233         u32 hw_flags;
234 } board_info[] __devinitdata = {
235         { "RealTek RTL8139", RTL8139_CAPS },
236         { "RealTek RTL8129", RTL8129_CAPS },
237 };
238
239
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 }, 
260
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 },
264 #endif
265 #ifdef CONFIG_8139TOO_8129
266         {0x10ec, 0x8129, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8129 },
267 #endif
268
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.
272          */
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 },
276
277         {0,}
278 };
279 MODULE_DEVICE_TABLE (pci, rtl8139_pci_tbl);
280
281 static struct {
282         const char str[ETH_GSTRING_LEN];
283 } ethtool_stats_keys[] = {
284         { "early_rx" },
285         { "tx_buf_mapped" },
286         { "tx_timeouts" },
287         { "rx_lost_in_ring" },
288 };
289
290 /* The rest of these values should never change. */
291
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). */
298         RxBuf = 0x30,
299         ChipCmd = 0x37,
300         RxBufPtr = 0x38,
301         RxBufAddr = 0x3A,
302         IntrMask = 0x3C,
303         IntrStatus = 0x3E,
304         TxConfig = 0x40,
305         RxConfig = 0x44,
306         Timer = 0x48,           /* A general-purpose counter. */
307         RxMissed = 0x4C,        /* 24 bits valid, write clears. */
308         Cfg9346 = 0x50,
309         Config0 = 0x51,
310         Config1 = 0x52,
311         FlashReg = 0x54,
312         MediaStatus = 0x58,
313         Config3 = 0x59,
314         Config4 = 0x5A,         /* absent on RTL-8139A */
315         HltClk = 0x5B,
316         MultiIntr = 0x5C,
317         TxSummary = 0x60,
318         BasicModeCtrl = 0x62,
319         BasicModeStatus = 0x64,
320         NWayAdvert = 0x66,
321         NWayLPAR = 0x68,
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. */
326         PARA78 = 0x78,
327         PARA7c = 0x7c,          /* Magic transceiver parameter register. */
328         Config5 = 0xD8,         /* absent on RTL-8139A */
329 };
330
331 enum ClearBitMasks {
332         MultiIntrClear = 0xF000,
333         ChipCmdClear = 0xE2,
334         Config1Clear = (1<<7)|(1<<6)|(1<<3)|(1<<2)|(1<<1),
335 };
336
337 enum ChipCmdBits {
338         CmdReset = 0x10,
339         CmdRxEnb = 0x08,
340         CmdTxEnb = 0x04,
341         RxBufEmpty = 0x01,
342 };
343
344 /* Interrupt register bits, using my own meaningful names. */
345 enum IntrStatusBits {
346         PCIErr = 0x8000,
347         PCSTimeout = 0x4000,
348         RxFIFOOver = 0x40,
349         RxUnderrun = 0x20,
350         RxOverflow = 0x10,
351         TxErr = 0x08,
352         TxOK = 0x04,
353         RxErr = 0x02,
354         RxOK = 0x01,
355
356         RxAckBits = RxFIFOOver | RxOverflow | RxOK,
357 };
358
359 enum TxStatusBits {
360         TxHostOwns = 0x2000,
361         TxUnderrun = 0x4000,
362         TxStatOK = 0x8000,
363         TxOutOfWindow = 0x20000000,
364         TxAborted = 0x40000000,
365         TxCarrierLost = 0x80000000,
366 };
367 enum RxStatusBits {
368         RxMulticast = 0x8000,
369         RxPhysical = 0x4000,
370         RxBroadcast = 0x2000,
371         RxBadSymbol = 0x0020,
372         RxRunt = 0x0010,
373         RxTooLong = 0x0008,
374         RxCRCErr = 0x0004,
375         RxBadAlign = 0x0002,
376         RxStatusOK = 0x0001,
377 };
378
379 /* Bits in RxConfig. */
380 enum rx_mode_bits {
381         AcceptErr = 0x20,
382         AcceptRunt = 0x10,
383         AcceptBroadcast = 0x08,
384         AcceptMulticast = 0x04,
385         AcceptMyPhys = 0x02,
386         AcceptAllPhys = 0x01,
387 };
388
389 /* Bits in TxConfig. */
390 enum tx_config_bits {
391         TxIFG1 = (1 << 25),     /* Interframe Gap Time */
392         TxIFG0 = (1 << 24),     /* Enabling these bits violates IEEE 802.3 */
393         TxLoopBack = (1 << 18) | (1 << 17), /* enable loopback test mode */
394         TxCRC = (1 << 16),      /* DISABLE appending CRC to end of Tx packets */
395         TxClearAbt = (1 << 0),  /* Clear abort (WO) */
396         TxDMAShift = 8,         /* DMA burst value (0-7) is shifted this many bits */
397         TxRetryShift = 4,       /* TXRR value (0-15) is shifted this many bits */
398
399         TxVersionMask = 0x7C800000, /* mask out version bits 30-26, 23 */
400 };
401
402 /* Bits in Config1 */
403 enum Config1Bits {
404         Cfg1_PM_Enable = 0x01,
405         Cfg1_VPD_Enable = 0x02,
406         Cfg1_PIO = 0x04,
407         Cfg1_MMIO = 0x08,
408         LWAKE = 0x10,           /* not on 8139, 8139A */
409         Cfg1_Driver_Load = 0x20,
410         Cfg1_LED0 = 0x40,
411         Cfg1_LED1 = 0x80,
412         SLEEP = (1 << 1),       /* only on 8139, 8139A */
413         PWRDN = (1 << 0),       /* only on 8139, 8139A */
414 };
415
416 /* Bits in Config3 */
417 enum Config3Bits {
418         Cfg3_FBtBEn    = (1 << 0), /* 1 = Fast Back to Back */
419         Cfg3_FuncRegEn = (1 << 1), /* 1 = enable CardBus Function registers */
420         Cfg3_CLKRUN_En = (1 << 2), /* 1 = enable CLKRUN */
421         Cfg3_CardB_En  = (1 << 3), /* 1 = enable CardBus registers */
422         Cfg3_LinkUp    = (1 << 4), /* 1 = wake up on link up */
423         Cfg3_Magic     = (1 << 5), /* 1 = wake up on Magic Packet (tm) */
424         Cfg3_PARM_En   = (1 << 6), /* 0 = software can set twister parameters */
425         Cfg3_GNTSel    = (1 << 7), /* 1 = delay 1 clock from PCI GNT signal */
426 };
427
428 /* Bits in Config4 */
429 enum Config4Bits {
430         LWPTN = (1 << 2),       /* not on 8139, 8139A */
431 };
432
433 /* Bits in Config5 */
434 enum Config5Bits {
435         Cfg5_PME_STS     = (1 << 0), /* 1 = PCI reset resets PME_Status */
436         Cfg5_LANWake     = (1 << 1), /* 1 = enable LANWake signal */
437         Cfg5_LDPS        = (1 << 2), /* 0 = save power when link is down */
438         Cfg5_FIFOAddrPtr = (1 << 3), /* Realtek internal SRAM testing */
439         Cfg5_UWF         = (1 << 4), /* 1 = accept unicast wakeup frame */
440         Cfg5_MWF         = (1 << 5), /* 1 = accept multicast wakeup frame */
441         Cfg5_BWF         = (1 << 6), /* 1 = accept broadcast wakeup frame */
442 };
443
444 enum RxConfigBits {
445         /* rx fifo threshold */
446         RxCfgFIFOShift = 13,
447         RxCfgFIFONone = (7 << RxCfgFIFOShift),
448
449         /* Max DMA burst */
450         RxCfgDMAShift = 8,
451         RxCfgDMAUnlimited = (7 << RxCfgDMAShift),
452
453         /* rx ring buffer length */
454         RxCfgRcv8K = 0,
455         RxCfgRcv16K = (1 << 11),
456         RxCfgRcv32K = (1 << 12),
457         RxCfgRcv64K = (1 << 11) | (1 << 12),
458
459         /* Disable packet wrap at end of Rx buffer. (not possible with 64k) */
460         RxNoWrap = (1 << 7),
461 };
462
463 /* Twister tuning parameters from RealTek.
464    Completely undocumented, but required to tune bad links on some boards. */
465 enum CSCRBits {
466         CSCR_LinkOKBit = 0x0400,
467         CSCR_LinkChangeBit = 0x0800,
468         CSCR_LinkStatusBits = 0x0f000,
469         CSCR_LinkDownOffCmd = 0x003c0,
470         CSCR_LinkDownCmd = 0x0f3c0,
471 };
472
473 enum Cfg9346Bits {
474         Cfg9346_Lock = 0x00,
475         Cfg9346_Unlock = 0xC0,
476 };
477
478 typedef enum {
479         CH_8139 = 0,
480         CH_8139_K,
481         CH_8139A,
482         CH_8139A_G,
483         CH_8139B,
484         CH_8130,
485         CH_8139C,
486         CH_8100,
487         CH_8100B_8139D,
488         CH_8101,
489 } chip_t;
490
491 enum chip_flags {
492         HasHltClk = (1 << 0),
493         HasLWake = (1 << 1),
494 };
495
496 #define HW_REVID(b30, b29, b28, b27, b26, b23, b22) \
497         (b30<<30 | b29<<29 | b28<<28 | b27<<27 | b26<<26 | b23<<23 | b22<<22)
498 #define HW_REVID_MASK   HW_REVID(1, 1, 1, 1, 1, 1, 1)
499
500 /* directly indexed by chip_t, above */
501 const static struct {
502         const char *name;
503         u32 version; /* from RTL8139C/RTL8139D docs */
504         u32 flags;
505 } rtl_chip_info[] = {
506         { "RTL-8139",
507           HW_REVID(1, 0, 0, 0, 0, 0, 0),
508           HasHltClk,
509         },
510
511         { "RTL-8139 rev K",
512           HW_REVID(1, 1, 0, 0, 0, 0, 0),
513           HasHltClk,
514         },
515
516         { "RTL-8139A",
517           HW_REVID(1, 1, 1, 0, 0, 0, 0),
518           HasHltClk, /* XXX undocumented? */
519         },
520
521         { "RTL-8139A rev G",
522           HW_REVID(1, 1, 1, 0, 0, 1, 0),
523           HasHltClk, /* XXX undocumented? */
524         },
525
526         { "RTL-8139B",
527           HW_REVID(1, 1, 1, 1, 0, 0, 0),
528           HasLWake,
529         },
530
531         { "RTL-8130",
532           HW_REVID(1, 1, 1, 1, 1, 0, 0),
533           HasLWake,
534         },
535
536         { "RTL-8139C",
537           HW_REVID(1, 1, 1, 0, 1, 0, 0),
538           HasLWake,
539         },
540
541         { "RTL-8100",
542           HW_REVID(1, 1, 1, 1, 0, 1, 0),
543           HasLWake,
544         },
545
546         { "RTL-8100B/8139D",
547           HW_REVID(1, 1, 1, 0, 1, 0, 1),
548           HasLWake,
549         },
550
551         { "RTL-8101",
552           HW_REVID(1, 1, 1, 0, 1, 1, 1),
553           HasLWake,
554         },
555 };
556
557 struct rtl_extra_stats {
558         unsigned long early_rx;
559         unsigned long tx_buf_mapped;
560         unsigned long tx_timeouts;
561         unsigned long rx_lost_in_ring;
562 };
563
564 struct rtl8139_private {
565         void *mmio_addr;
566         int drv_flags;
567         struct pci_dev *pci_dev;
568         u32 pci_state[16];
569         u32 msg_enable;
570         struct net_device_stats stats;
571         unsigned char *rx_ring;
572         unsigned int cur_rx;    /* Index into the Rx buffer of next Rx pkt. */
573         unsigned int tx_flag;
574         unsigned long cur_tx;
575         unsigned long dirty_tx;
576         unsigned char *tx_buf[NUM_TX_DESC];     /* Tx bounce buffers */
577         unsigned char *tx_bufs; /* Tx bounce buffer region. */
578         dma_addr_t rx_ring_dma;
579         dma_addr_t tx_bufs_dma;
580         signed char phys[4];            /* MII device addresses. */
581         char twistie, twist_row, twist_col;     /* Twister tune state. */
582         unsigned int default_port:4;    /* Last dev->if_port value. */
583         spinlock_t lock;
584         spinlock_t rx_lock;
585         chip_t chipset;
586         pid_t thr_pid;
587         wait_queue_head_t thr_wait;
588         struct completion thr_exited;
589         u32 rx_config;
590         struct rtl_extra_stats xstats;
591         int time_to_die;
592         struct mii_if_info mii;
593         unsigned int regs_len;
594 };
595
596 MODULE_AUTHOR ("Jeff Garzik <jgarzik@pobox.com>");
597 MODULE_DESCRIPTION ("RealTek RTL-8139 Fast Ethernet driver");
598 MODULE_LICENSE("GPL");
599
600 MODULE_PARM (multicast_filter_limit, "i");
601 MODULE_PARM (media, "1-" __MODULE_STRING(MAX_UNITS) "i");
602 MODULE_PARM (full_duplex, "1-" __MODULE_STRING(MAX_UNITS) "i");
603 MODULE_PARM (debug, "i");
604 MODULE_PARM_DESC (debug, "8139too bitmapped message enable number");
605 MODULE_PARM_DESC (multicast_filter_limit, "8139too maximum number of filtered multicast addresses");
606 MODULE_PARM_DESC (media, "8139too: Bits 4+9: force full duplex, bit 5: 100Mbps");
607 MODULE_PARM_DESC (full_duplex, "8139too: Force full duplex for board(s) (1)");
608
609 static int read_eeprom (void *ioaddr, int location, int addr_len);
610 static int rtl8139_open (struct net_device *dev);
611 static int mdio_read (struct net_device *dev, int phy_id, int location);
612 static void mdio_write (struct net_device *dev, int phy_id, int location,
613                         int val);
614 static inline void rtl8139_start_thread(struct net_device *dev);
615 static void rtl8139_tx_timeout (struct net_device *dev);
616 static void rtl8139_init_ring (struct net_device *dev);
617 static int rtl8139_start_xmit (struct sk_buff *skb,
618                                struct net_device *dev);
619 static int rtl8139_poll(struct net_device *dev, int *budget);
620 #ifdef CONFIG_NET_POLL_CONTROLLER
621 static void rtl8139_poll_controller(struct net_device *dev);
622 #endif
623 static irqreturn_t rtl8139_interrupt (int irq, void *dev_instance,
624                                struct pt_regs *regs);
625 static int rtl8139_close (struct net_device *dev);
626 static int netdev_ioctl (struct net_device *dev, struct ifreq *rq, int cmd);
627 static struct net_device_stats *rtl8139_get_stats (struct net_device *dev);
628 static void rtl8139_set_rx_mode (struct net_device *dev);
629 static void __set_rx_mode (struct net_device *dev);
630 static void rtl8139_hw_start (struct net_device *dev);
631 static struct ethtool_ops rtl8139_ethtool_ops;
632
633 #ifdef USE_IO_OPS
634
635 #define RTL_R8(reg)             inb (((unsigned long)ioaddr) + (reg))
636 #define RTL_R16(reg)            inw (((unsigned long)ioaddr) + (reg))
637 #define RTL_R32(reg)            ((unsigned long) inl (((unsigned long)ioaddr) + (reg)))
638 #define RTL_W8(reg, val8)       outb ((val8), ((unsigned long)ioaddr) + (reg))
639 #define RTL_W16(reg, val16)     outw ((val16), ((unsigned long)ioaddr) + (reg))
640 #define RTL_W32(reg, val32)     outl ((val32), ((unsigned long)ioaddr) + (reg))
641 #define RTL_W8_F                RTL_W8
642 #define RTL_W16_F               RTL_W16
643 #define RTL_W32_F               RTL_W32
644 #undef readb
645 #undef readw
646 #undef readl
647 #undef writeb
648 #undef writew
649 #undef writel
650 #define readb(addr) inb((unsigned long)(addr))
651 #define readw(addr) inw((unsigned long)(addr))
652 #define readl(addr) inl((unsigned long)(addr))
653 #define writeb(val,addr) outb((val),(unsigned long)(addr))
654 #define writew(val,addr) outw((val),(unsigned long)(addr))
655 #define writel(val,addr) outl((val),(unsigned long)(addr))
656
657 #else
658
659 /* write MMIO register, with flush */
660 /* Flush avoids rtl8139 bug w/ posted MMIO writes */
661 #define RTL_W8_F(reg, val8)     do { writeb ((val8), ioaddr + (reg)); readb (ioaddr + (reg)); } while (0)
662 #define RTL_W16_F(reg, val16)   do { writew ((val16), ioaddr + (reg)); readw (ioaddr + (reg)); } while (0)
663 #define RTL_W32_F(reg, val32)   do { writel ((val32), ioaddr + (reg)); readl (ioaddr + (reg)); } while (0)
664
665
666 #define MMIO_FLUSH_AUDIT_COMPLETE 1
667 #if MMIO_FLUSH_AUDIT_COMPLETE
668
669 /* write MMIO register */
670 #define RTL_W8(reg, val8)       writeb ((val8), ioaddr + (reg))
671 #define RTL_W16(reg, val16)     writew ((val16), ioaddr + (reg))
672 #define RTL_W32(reg, val32)     writel ((val32), ioaddr + (reg))
673
674 #else
675
676 /* write MMIO register, then flush */
677 #define RTL_W8          RTL_W8_F
678 #define RTL_W16         RTL_W16_F
679 #define RTL_W32         RTL_W32_F
680
681 #endif /* MMIO_FLUSH_AUDIT_COMPLETE */
682
683 /* read MMIO register */
684 #define RTL_R8(reg)             readb (ioaddr + (reg))
685 #define RTL_R16(reg)            readw (ioaddr + (reg))
686 #define RTL_R32(reg)            ((unsigned long) readl (ioaddr + (reg)))
687
688 #endif /* USE_IO_OPS */
689
690
691 static const u16 rtl8139_intr_mask =
692         PCIErr | PCSTimeout | RxUnderrun | RxOverflow | RxFIFOOver |
693         TxErr | TxOK | RxErr | RxOK;
694
695 static const u16 rtl8139_norx_intr_mask =
696         PCIErr | PCSTimeout | RxUnderrun |
697         TxErr | TxOK | RxErr ;
698
699 #if RX_BUF_IDX == 0
700 static const unsigned int rtl8139_rx_config =
701         RxCfgRcv8K | RxNoWrap |
702         (RX_FIFO_THRESH << RxCfgFIFOShift) |
703         (RX_DMA_BURST << RxCfgDMAShift);
704 #elif RX_BUF_IDX == 1
705 static const unsigned int rtl8139_rx_config =
706         RxCfgRcv16K | RxNoWrap |
707         (RX_FIFO_THRESH << RxCfgFIFOShift) |
708         (RX_DMA_BURST << RxCfgDMAShift);
709 #elif RX_BUF_IDX == 2
710 static const unsigned int rtl8139_rx_config =
711         RxCfgRcv32K | RxNoWrap |
712         (RX_FIFO_THRESH << RxCfgFIFOShift) |
713         (RX_DMA_BURST << RxCfgDMAShift);
714 #elif RX_BUF_IDX == 3
715 static const unsigned int rtl8139_rx_config =
716         RxCfgRcv64K |
717         (RX_FIFO_THRESH << RxCfgFIFOShift) |
718         (RX_DMA_BURST << RxCfgDMAShift);
719 #else
720 #error "Invalid configuration for 8139_RXBUF_IDX"
721 #endif
722
723 static const unsigned int rtl8139_tx_config =
724         (TX_DMA_BURST << TxDMAShift) | (TX_RETRY << TxRetryShift);
725
726 static void __rtl8139_cleanup_dev (struct net_device *dev)
727 {
728         struct rtl8139_private *tp;
729         struct pci_dev *pdev;
730
731         assert (dev != NULL);
732         assert (dev->priv != NULL);
733
734         tp = dev->priv;
735         assert (tp->pci_dev != NULL);
736         pdev = tp->pci_dev;
737
738 #ifndef USE_IO_OPS
739         if (tp->mmio_addr)
740                 iounmap (tp->mmio_addr);
741 #endif /* !USE_IO_OPS */
742
743         /* it's ok to call this even if we have no regions to free */
744         pci_release_regions (pdev);
745
746         free_netdev(dev);
747
748         pci_set_drvdata (pdev, NULL);
749 }
750
751
752 static void rtl8139_chip_reset (void *ioaddr)
753 {
754         int i;
755
756         /* Soft reset the chip. */
757         RTL_W8 (ChipCmd, CmdReset);
758
759         /* Check that the chip has finished the reset. */
760         for (i = 1000; i > 0; i--) {
761                 barrier();
762                 if ((RTL_R8 (ChipCmd) & CmdReset) == 0)
763                         break;
764                 udelay (10);
765         }
766 }
767
768
769 static int __devinit rtl8139_init_board (struct pci_dev *pdev,
770                                          struct net_device **dev_out)
771 {
772         void *ioaddr;
773         struct net_device *dev;
774         struct rtl8139_private *tp;
775         u8 tmp8;
776         int rc;
777         unsigned int i;
778         u32 pio_start, pio_end, pio_flags, pio_len;
779         unsigned long mmio_start, mmio_end, mmio_flags, mmio_len;
780         u32 version;
781
782         assert (pdev != NULL);
783
784         *dev_out = NULL;
785
786         /* dev and dev->priv zeroed in alloc_etherdev */
787         dev = alloc_etherdev (sizeof (*tp));
788         if (dev == NULL) {
789                 printk (KERN_ERR PFX "%s: Unable to alloc new net device\n", pci_name(pdev));
790                 return -ENOMEM;
791         }
792         SET_MODULE_OWNER(dev);
793         SET_NETDEV_DEV(dev, &pdev->dev);
794
795         tp = dev->priv;
796         tp->pci_dev = pdev;
797
798         /* enable device (incl. PCI PM wakeup and hotplug setup) */
799         rc = pci_enable_device (pdev);
800         if (rc)
801                 goto err_out;
802
803         pio_start = pci_resource_start (pdev, 0);
804         pio_end = pci_resource_end (pdev, 0);
805         pio_flags = pci_resource_flags (pdev, 0);
806         pio_len = pci_resource_len (pdev, 0);
807
808         mmio_start = pci_resource_start (pdev, 1);
809         mmio_end = pci_resource_end (pdev, 1);
810         mmio_flags = pci_resource_flags (pdev, 1);
811         mmio_len = pci_resource_len (pdev, 1);
812
813         /* set this immediately, we need to know before
814          * we talk to the chip directly */
815         DPRINTK("PIO region size == 0x%02X\n", pio_len);
816         DPRINTK("MMIO region size == 0x%02lX\n", mmio_len);
817
818 #ifdef USE_IO_OPS
819         /* make sure PCI base addr 0 is PIO */
820         if (!(pio_flags & IORESOURCE_IO)) {
821                 printk (KERN_ERR PFX "%s: region #0 not a PIO resource, aborting\n", pci_name(pdev));
822                 rc = -ENODEV;
823                 goto err_out;
824         }
825         /* check for weird/broken PCI region reporting */
826         if (pio_len < RTL_MIN_IO_SIZE) {
827                 printk (KERN_ERR PFX "%s: Invalid PCI I/O region size(s), aborting\n", pci_name(pdev));
828                 rc = -ENODEV;
829                 goto err_out;
830         }
831 #else
832         /* make sure PCI base addr 1 is MMIO */
833         if (!(mmio_flags & IORESOURCE_MEM)) {
834                 printk (KERN_ERR PFX "%s: region #1 not an MMIO resource, aborting\n", pci_name(pdev));
835                 rc = -ENODEV;
836                 goto err_out;
837         }
838         if (mmio_len < RTL_MIN_IO_SIZE) {
839                 printk (KERN_ERR PFX "%s: Invalid PCI mem region size(s), aborting\n", pci_name(pdev));
840                 rc = -ENODEV;
841                 goto err_out;
842         }
843 #endif
844
845         rc = pci_request_regions (pdev, "8139too");
846         if (rc)
847                 goto err_out;
848
849         /* enable PCI bus-mastering */
850         pci_set_master (pdev);
851
852 #ifdef USE_IO_OPS
853         ioaddr = (void *) pio_start;
854         dev->base_addr = pio_start;
855         tp->mmio_addr = ioaddr;
856         tp->regs_len = pio_len;
857 #else
858         /* ioremap MMIO region */
859         ioaddr = ioremap (mmio_start, mmio_len);
860         if (ioaddr == NULL) {
861                 printk (KERN_ERR PFX "%s: cannot remap MMIO, aborting\n", pci_name(pdev));
862                 rc = -EIO;
863                 goto err_out;
864         }
865         dev->base_addr = (long) ioaddr;
866         tp->mmio_addr = ioaddr;
867         tp->regs_len = mmio_len;
868 #endif /* USE_IO_OPS */
869
870         /* Bring old chips out of low-power mode. */
871         RTL_W8 (HltClk, 'R');
872
873         /* check for missing/broken hardware */
874         if (RTL_R32 (TxConfig) == 0xFFFFFFFF) {
875                 printk (KERN_ERR PFX "%s: Chip not responding, ignoring board\n",
876                         pci_name(pdev));
877                 rc = -EIO;
878                 goto err_out;
879         }
880
881         /* identify chip attached to board */
882         version = RTL_R32 (TxConfig) & HW_REVID_MASK;
883         for (i = 0; i < ARRAY_SIZE (rtl_chip_info); i++)
884                 if (version == rtl_chip_info[i].version) {
885                         tp->chipset = i;
886                         goto match;
887                 }
888
889         /* if unknown chip, assume array element #0, original RTL-8139 in this case */
890         printk (KERN_DEBUG PFX "%s: unknown chip version, assuming RTL-8139\n",
891                 pci_name(pdev));
892         printk (KERN_DEBUG PFX "%s: TxConfig = 0x%lx\n", pci_name(pdev), RTL_R32 (TxConfig));
893         tp->chipset = 0;
894
895 match:
896         DPRINTK ("chipset id (%d) == index %d, '%s'\n",
897                  version, i, rtl_chip_info[i].name);
898
899         if (tp->chipset >= CH_8139B) {
900                 u8 new_tmp8 = tmp8 = RTL_R8 (Config1);
901                 DPRINTK("PCI PM wakeup\n");
902                 if ((rtl_chip_info[tp->chipset].flags & HasLWake) &&
903                     (tmp8 & LWAKE))
904                         new_tmp8 &= ~LWAKE;
905                 new_tmp8 |= Cfg1_PM_Enable;
906                 if (new_tmp8 != tmp8) {
907                         RTL_W8 (Cfg9346, Cfg9346_Unlock);
908                         RTL_W8 (Config1, tmp8);
909                         RTL_W8 (Cfg9346, Cfg9346_Lock);
910                 }
911                 if (rtl_chip_info[tp->chipset].flags & HasLWake) {
912                         tmp8 = RTL_R8 (Config4);
913                         if (tmp8 & LWPTN) {
914                                 RTL_W8 (Cfg9346, Cfg9346_Unlock);
915                                 RTL_W8 (Config4, tmp8 & ~LWPTN);
916                                 RTL_W8 (Cfg9346, Cfg9346_Lock);
917                         }
918                 }
919         } else {
920                 DPRINTK("Old chip wakeup\n");
921                 tmp8 = RTL_R8 (Config1);
922                 tmp8 &= ~(SLEEP | PWRDN);
923                 RTL_W8 (Config1, tmp8);
924         }
925
926         rtl8139_chip_reset (ioaddr);
927
928         *dev_out = dev;
929         return 0;
930
931 err_out:
932         __rtl8139_cleanup_dev (dev);
933         return rc;
934 }
935
936
937 static int __devinit rtl8139_init_one (struct pci_dev *pdev,
938                                        const struct pci_device_id *ent)
939 {
940         struct net_device *dev = NULL;
941         struct rtl8139_private *tp;
942         int i, addr_len, option;
943         void *ioaddr;
944         static int board_idx = -1;
945         u8 pci_rev;
946
947         assert (pdev != NULL);
948         assert (ent != NULL);
949
950         board_idx++;
951
952         /* when we're built into the kernel, the driver version message
953          * is only printed if at least one 8139 board has been found
954          */
955 #ifndef MODULE
956         {
957                 static int printed_version;
958                 if (!printed_version++)
959                         printk (KERN_INFO RTL8139_DRIVER_NAME "\n");
960         }
961 #endif
962
963         pci_read_config_byte(pdev, PCI_REVISION_ID, &pci_rev);
964
965         if (pdev->vendor == PCI_VENDOR_ID_REALTEK &&
966             pdev->device == PCI_DEVICE_ID_REALTEK_8139 && pci_rev >= 0x20) {
967                 printk(KERN_INFO PFX "pci dev %s (id %04x:%04x rev %02x) is an enhanced 8139C+ chip\n",
968                        pci_name(pdev), pdev->vendor, pdev->device, pci_rev);
969                 printk(KERN_INFO PFX "Use the \"8139cp\" driver for improved performance and stability.\n");
970         }
971
972         i = rtl8139_init_board (pdev, &dev);
973         if (i < 0)
974                 return i;
975
976         assert (dev != NULL);
977         tp = dev->priv;
978         assert (tp != NULL);
979         ioaddr = tp->mmio_addr;
980         assert (ioaddr != NULL);
981
982         addr_len = read_eeprom (ioaddr, 0, 8) == 0x8129 ? 8 : 6;
983         for (i = 0; i < 3; i++)
984                 ((u16 *) (dev->dev_addr))[i] =
985                     le16_to_cpu (read_eeprom (ioaddr, i + 7, addr_len));
986
987         /* The Rtl8139-specific entries in the device structure. */
988         dev->open = rtl8139_open;
989         dev->hard_start_xmit = rtl8139_start_xmit;
990         dev->poll = rtl8139_poll;
991         dev->weight = 64;
992         dev->stop = rtl8139_close;
993         dev->get_stats = rtl8139_get_stats;
994         dev->set_multicast_list = rtl8139_set_rx_mode;
995         dev->do_ioctl = netdev_ioctl;
996         dev->ethtool_ops = &rtl8139_ethtool_ops;
997         dev->tx_timeout = rtl8139_tx_timeout;
998         dev->watchdog_timeo = TX_TIMEOUT;
999 #ifdef CONFIG_NET_POLL_CONTROLLER
1000         dev->poll_controller = rtl8139_poll_controller;
1001 #endif
1002
1003         /* note: the hardware is not capable of sg/csum/highdma, however
1004          * through the use of skb_copy_and_csum_dev we enable these
1005          * features
1006          */
1007         dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_HIGHDMA;
1008
1009         dev->irq = pdev->irq;
1010
1011         /* dev->priv/tp zeroed and aligned in alloc_etherdev */
1012         tp = dev->priv;
1013
1014         /* note: tp->chipset set in rtl8139_init_board */
1015         tp->drv_flags = board_info[ent->driver_data].hw_flags;
1016         tp->mmio_addr = ioaddr;
1017         tp->msg_enable =
1018                 (debug < 0 ? RTL8139_DEF_MSG_ENABLE : ((1 << debug) - 1));
1019         spin_lock_init (&tp->lock);
1020         spin_lock_init (&tp->rx_lock);
1021         init_waitqueue_head (&tp->thr_wait);
1022         init_completion (&tp->thr_exited);
1023         tp->mii.dev = dev;
1024         tp->mii.mdio_read = mdio_read;
1025         tp->mii.mdio_write = mdio_write;
1026         tp->mii.phy_id_mask = 0x3f;
1027         tp->mii.reg_num_mask = 0x1f;
1028
1029         /* dev is fully set up and ready to use now */
1030         DPRINTK("about to register device named %s (%p)...\n", dev->name, dev);
1031         i = register_netdev (dev);
1032         if (i) goto err_out;
1033
1034         pci_set_drvdata (pdev, dev);
1035
1036         printk (KERN_INFO "%s: %s at 0x%lx, "
1037                 "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x, "
1038                 "IRQ %d\n",
1039                 dev->name,
1040                 board_info[ent->driver_data].name,
1041                 dev->base_addr,
1042                 dev->dev_addr[0], dev->dev_addr[1],
1043                 dev->dev_addr[2], dev->dev_addr[3],
1044                 dev->dev_addr[4], dev->dev_addr[5],
1045                 dev->irq);
1046
1047         printk (KERN_DEBUG "%s:  Identified 8139 chip type '%s'\n",
1048                 dev->name, rtl_chip_info[tp->chipset].name);
1049
1050         /* Find the connected MII xcvrs.
1051            Doing this in open() would allow detecting external xcvrs later, but
1052            takes too much time. */
1053 #ifdef CONFIG_8139TOO_8129
1054         if (tp->drv_flags & HAS_MII_XCVR) {
1055                 int phy, phy_idx = 0;
1056                 for (phy = 0; phy < 32 && phy_idx < sizeof(tp->phys); phy++) {
1057                         int mii_status = mdio_read(dev, phy, 1);
1058                         if (mii_status != 0xffff  &&  mii_status != 0x0000) {
1059                                 u16 advertising = mdio_read(dev, phy, 4);
1060                                 tp->phys[phy_idx++] = phy;
1061                                 printk(KERN_INFO "%s: MII transceiver %d status 0x%4.4x "
1062                                            "advertising %4.4x.\n",
1063                                            dev->name, phy, mii_status, advertising);
1064                         }
1065                 }
1066                 if (phy_idx == 0) {
1067                         printk(KERN_INFO "%s: No MII transceivers found!  Assuming SYM "
1068                                    "transceiver.\n",
1069                                    dev->name);
1070                         tp->phys[0] = 32;
1071                 }
1072         } else
1073 #endif
1074                 tp->phys[0] = 32;
1075         tp->mii.phy_id = tp->phys[0];
1076
1077         /* The lower four bits are the media type. */
1078         option = (board_idx >= MAX_UNITS) ? 0 : media[board_idx];
1079         if (option > 0) {
1080                 tp->mii.full_duplex = (option & 0x210) ? 1 : 0;
1081                 tp->default_port = option & 0xFF;
1082                 if (tp->default_port)
1083                         tp->mii.force_media = 1;
1084         }
1085         if (board_idx < MAX_UNITS  &&  full_duplex[board_idx] > 0)
1086                 tp->mii.full_duplex = full_duplex[board_idx];
1087         if (tp->mii.full_duplex) {
1088                 printk(KERN_INFO "%s: Media type forced to Full Duplex.\n", dev->name);
1089                 /* Changing the MII-advertised media because might prevent
1090                    re-connection. */
1091                 tp->mii.force_media = 1;
1092         }
1093         if (tp->default_port) {
1094                 printk(KERN_INFO "  Forcing %dMbps %s-duplex operation.\n",
1095                            (option & 0x20 ? 100 : 10),
1096                            (option & 0x10 ? "full" : "half"));
1097                 mdio_write(dev, tp->phys[0], 0,
1098                                    ((option & 0x20) ? 0x2000 : 0) |     /* 100Mbps? */
1099                                    ((option & 0x10) ? 0x0100 : 0)); /* Full duplex? */
1100         }
1101
1102         /* Put the chip into low-power mode. */
1103         if (rtl_chip_info[tp->chipset].flags & HasHltClk)
1104                 RTL_W8 (HltClk, 'H');   /* 'R' would leave the clock running. */
1105
1106         return 0;
1107
1108 err_out:
1109         __rtl8139_cleanup_dev (dev);
1110         return i;
1111 }
1112
1113
1114 static void __devexit rtl8139_remove_one (struct pci_dev *pdev)
1115 {
1116         struct net_device *dev = pci_get_drvdata (pdev);
1117         struct rtl8139_private *np;
1118
1119         assert (dev != NULL);
1120         np = dev->priv;
1121         assert (np != NULL);
1122
1123         unregister_netdev (dev);
1124
1125         __rtl8139_cleanup_dev (dev);
1126 }
1127
1128
1129 /* Serial EEPROM section. */
1130
1131 /*  EEPROM_Ctrl bits. */
1132 #define EE_SHIFT_CLK    0x04    /* EEPROM shift clock. */
1133 #define EE_CS                   0x08    /* EEPROM chip select. */
1134 #define EE_DATA_WRITE   0x02    /* EEPROM chip data in. */
1135 #define EE_WRITE_0              0x00
1136 #define EE_WRITE_1              0x02
1137 #define EE_DATA_READ    0x01    /* EEPROM chip data out. */
1138 #define EE_ENB                  (0x80 | EE_CS)
1139
1140 /* Delay between EEPROM clock transitions.
1141    No extra delay is needed with 33Mhz PCI, but 66Mhz may change this.
1142  */
1143
1144 #define eeprom_delay()  readl(ee_addr)
1145
1146 /* The EEPROM commands include the alway-set leading bit. */
1147 #define EE_WRITE_CMD    (5)
1148 #define EE_READ_CMD             (6)
1149 #define EE_ERASE_CMD    (7)
1150
1151 static int __devinit read_eeprom (void *ioaddr, int location, int addr_len)
1152 {
1153         int i;
1154         unsigned retval = 0;
1155         void *ee_addr = ioaddr + Cfg9346;
1156         int read_cmd = location | (EE_READ_CMD << addr_len);
1157
1158         writeb (EE_ENB & ~EE_CS, ee_addr);
1159         writeb (EE_ENB, ee_addr);
1160         eeprom_delay ();
1161
1162         /* Shift the read command bits out. */
1163         for (i = 4 + addr_len; i >= 0; i--) {
1164                 int dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
1165                 writeb (EE_ENB | dataval, ee_addr);
1166                 eeprom_delay ();
1167                 writeb (EE_ENB | dataval | EE_SHIFT_CLK, ee_addr);
1168                 eeprom_delay ();
1169         }
1170         writeb (EE_ENB, ee_addr);
1171         eeprom_delay ();
1172
1173         for (i = 16; i > 0; i--) {
1174                 writeb (EE_ENB | EE_SHIFT_CLK, ee_addr);
1175                 eeprom_delay ();
1176                 retval =
1177                     (retval << 1) | ((readb (ee_addr) & EE_DATA_READ) ? 1 :
1178                                      0);
1179                 writeb (EE_ENB, ee_addr);
1180                 eeprom_delay ();
1181         }
1182
1183         /* Terminate the EEPROM access. */
1184         writeb (~EE_CS, ee_addr);
1185         eeprom_delay ();
1186
1187         return retval;
1188 }
1189
1190 /* MII serial management: mostly bogus for now. */
1191 /* Read and write the MII management registers using software-generated
1192    serial MDIO protocol.
1193    The maximum data clock rate is 2.5 Mhz.  The minimum timing is usually
1194    met by back-to-back PCI I/O cycles, but we insert a delay to avoid
1195    "overclocking" issues. */
1196 #define MDIO_DIR                0x80
1197 #define MDIO_DATA_OUT   0x04
1198 #define MDIO_DATA_IN    0x02
1199 #define MDIO_CLK                0x01
1200 #define MDIO_WRITE0 (MDIO_DIR)
1201 #define MDIO_WRITE1 (MDIO_DIR | MDIO_DATA_OUT)
1202
1203 #define mdio_delay(mdio_addr)   readb(mdio_addr)
1204
1205
1206 static char mii_2_8139_map[8] = {
1207         BasicModeCtrl,
1208         BasicModeStatus,
1209         0,
1210         0,
1211         NWayAdvert,
1212         NWayLPAR,
1213         NWayExpansion,
1214         0
1215 };
1216
1217
1218 #ifdef CONFIG_8139TOO_8129
1219 /* Syncronize the MII management interface by shifting 32 one bits out. */
1220 static void mdio_sync (void *mdio_addr)
1221 {
1222         int i;
1223
1224         for (i = 32; i >= 0; i--) {
1225                 writeb (MDIO_WRITE1, mdio_addr);
1226                 mdio_delay (mdio_addr);
1227                 writeb (MDIO_WRITE1 | MDIO_CLK, mdio_addr);
1228                 mdio_delay (mdio_addr);
1229         }
1230 }
1231 #endif
1232
1233 static int mdio_read (struct net_device *dev, int phy_id, int location)
1234 {
1235         struct rtl8139_private *tp = dev->priv;
1236         int retval = 0;
1237 #ifdef CONFIG_8139TOO_8129
1238         void *mdio_addr = tp->mmio_addr + Config4;
1239         int mii_cmd = (0xf6 << 10) | (phy_id << 5) | location;
1240         int i;
1241 #endif
1242
1243         if (phy_id > 31) {      /* Really a 8139.  Use internal registers. */
1244                 return location < 8 && mii_2_8139_map[location] ?
1245                     readw (tp->mmio_addr + mii_2_8139_map[location]) : 0;
1246         }
1247
1248 #ifdef CONFIG_8139TOO_8129
1249         mdio_sync (mdio_addr);
1250         /* Shift the read command bits out. */
1251         for (i = 15; i >= 0; i--) {
1252                 int dataval = (mii_cmd & (1 << i)) ? MDIO_DATA_OUT : 0;
1253
1254                 writeb (MDIO_DIR | dataval, mdio_addr);
1255                 mdio_delay (mdio_addr);
1256                 writeb (MDIO_DIR | dataval | MDIO_CLK, mdio_addr);
1257                 mdio_delay (mdio_addr);
1258         }
1259
1260         /* Read the two transition, 16 data, and wire-idle bits. */
1261         for (i = 19; i > 0; i--) {
1262                 writeb (0, mdio_addr);
1263                 mdio_delay (mdio_addr);
1264                 retval = (retval << 1) | ((readb (mdio_addr) & MDIO_DATA_IN) ? 1 : 0);
1265                 writeb (MDIO_CLK, mdio_addr);
1266                 mdio_delay (mdio_addr);
1267         }
1268 #endif
1269
1270         return (retval >> 1) & 0xffff;
1271 }
1272
1273
1274 static void mdio_write (struct net_device *dev, int phy_id, int location,
1275                         int value)
1276 {
1277         struct rtl8139_private *tp = dev->priv;
1278 #ifdef CONFIG_8139TOO_8129
1279         void *mdio_addr = tp->mmio_addr + Config4;
1280         int mii_cmd = (0x5002 << 16) | (phy_id << 23) | (location << 18) | value;
1281         int i;
1282 #endif
1283
1284         if (phy_id > 31) {      /* Really a 8139.  Use internal registers. */
1285                 void *ioaddr = tp->mmio_addr;
1286                 if (location == 0) {
1287                         RTL_W8 (Cfg9346, Cfg9346_Unlock);
1288                         RTL_W16 (BasicModeCtrl, value);
1289                         RTL_W8 (Cfg9346, Cfg9346_Lock);
1290                 } else if (location < 8 && mii_2_8139_map[location])
1291                         RTL_W16 (mii_2_8139_map[location], value);
1292                 return;
1293         }
1294
1295 #ifdef CONFIG_8139TOO_8129
1296         mdio_sync (mdio_addr);
1297
1298         /* Shift the command bits out. */
1299         for (i = 31; i >= 0; i--) {
1300                 int dataval =
1301                     (mii_cmd & (1 << i)) ? MDIO_WRITE1 : MDIO_WRITE0;
1302                 writeb (dataval, mdio_addr);
1303                 mdio_delay (mdio_addr);
1304                 writeb (dataval | MDIO_CLK, mdio_addr);
1305                 mdio_delay (mdio_addr);
1306         }
1307         /* Clear out extra bits. */
1308         for (i = 2; i > 0; i--) {
1309                 writeb (0, mdio_addr);
1310                 mdio_delay (mdio_addr);
1311                 writeb (MDIO_CLK, mdio_addr);
1312                 mdio_delay (mdio_addr);
1313         }
1314 #endif
1315 }
1316
1317
1318 static int rtl8139_open (struct net_device *dev)
1319 {
1320         struct rtl8139_private *tp = dev->priv;
1321         int retval;
1322         void *ioaddr = tp->mmio_addr;
1323
1324         retval = request_irq (dev->irq, rtl8139_interrupt, SA_SHIRQ, dev->name, dev);
1325         if (retval)
1326                 return retval;
1327
1328         tp->tx_bufs = pci_alloc_consistent(tp->pci_dev, TX_BUF_TOT_LEN,
1329                                            &tp->tx_bufs_dma);
1330         tp->rx_ring = pci_alloc_consistent(tp->pci_dev, RX_BUF_TOT_LEN,
1331                                            &tp->rx_ring_dma);
1332         if (tp->tx_bufs == NULL || tp->rx_ring == NULL) {
1333                 free_irq(dev->irq, dev);
1334
1335                 if (tp->tx_bufs)
1336                         pci_free_consistent(tp->pci_dev, TX_BUF_TOT_LEN,
1337                                             tp->tx_bufs, tp->tx_bufs_dma);
1338                 if (tp->rx_ring)
1339                         pci_free_consistent(tp->pci_dev, RX_BUF_TOT_LEN,
1340                                             tp->rx_ring, tp->rx_ring_dma);
1341
1342                 return -ENOMEM;
1343
1344         }
1345
1346         tp->mii.full_duplex = tp->mii.force_media;
1347         tp->tx_flag = (TX_FIFO_THRESH << 11) & 0x003f0000;
1348
1349         rtl8139_init_ring (dev);
1350         rtl8139_hw_start (dev);
1351         netif_start_queue (dev);
1352
1353         if (netif_msg_ifup(tp))
1354                 printk(KERN_DEBUG "%s: rtl8139_open() ioaddr %#lx IRQ %d"
1355                         " GP Pins %2.2x %s-duplex.\n",
1356                         dev->name, pci_resource_start (tp->pci_dev, 1),
1357                         dev->irq, RTL_R8 (MediaStatus),
1358                         tp->mii.full_duplex ? "full" : "half");
1359
1360         rtl8139_start_thread(dev);
1361
1362         return 0;
1363 }
1364
1365
1366 static void rtl_check_media (struct net_device *dev, unsigned int init_media)
1367 {
1368         struct rtl8139_private *tp = dev->priv;
1369
1370         if (tp->phys[0] >= 0) {
1371                 mii_check_media(&tp->mii, netif_msg_link(tp), init_media);
1372         }
1373 }
1374
1375 /* Start the hardware at open or resume. */
1376 static void rtl8139_hw_start (struct net_device *dev)
1377 {
1378         struct rtl8139_private *tp = dev->priv;
1379         void *ioaddr = tp->mmio_addr;
1380         u32 i;
1381         u8 tmp;
1382
1383         /* Bring old chips out of low-power mode. */
1384         if (rtl_chip_info[tp->chipset].flags & HasHltClk)
1385                 RTL_W8 (HltClk, 'R');
1386
1387         rtl8139_chip_reset (ioaddr);
1388
1389         /* unlock Config[01234] and BMCR register writes */
1390         RTL_W8_F (Cfg9346, Cfg9346_Unlock);
1391         /* Restore our idea of the MAC address. */
1392         RTL_W32_F (MAC0 + 0, cpu_to_le32 (*(u32 *) (dev->dev_addr + 0)));
1393         RTL_W32_F (MAC0 + 4, cpu_to_le32 (*(u32 *) (dev->dev_addr + 4)));
1394
1395         /* Must enable Tx/Rx before setting transfer thresholds! */
1396         RTL_W8 (ChipCmd, CmdRxEnb | CmdTxEnb);
1397
1398         tp->rx_config = rtl8139_rx_config | AcceptBroadcast | AcceptMyPhys;
1399         RTL_W32 (RxConfig, tp->rx_config);
1400
1401         /* Check this value: the documentation for IFG contradicts ifself. */
1402         RTL_W32 (TxConfig, rtl8139_tx_config);
1403
1404         tp->cur_rx = 0;
1405
1406         rtl_check_media (dev, 1);
1407
1408         if (tp->chipset >= CH_8139B) {
1409                 /* Disable magic packet scanning, which is enabled
1410                  * when PM is enabled in Config1.  It can be reenabled
1411                  * via ETHTOOL_SWOL if desired.  */
1412                 RTL_W8 (Config3, RTL_R8 (Config3) & ~Cfg3_Magic);
1413         }
1414
1415         DPRINTK("init buffer addresses\n");
1416
1417         /* Lock Config[01234] and BMCR register writes */
1418         RTL_W8 (Cfg9346, Cfg9346_Lock);
1419
1420         /* init Rx ring buffer DMA address */
1421         RTL_W32_F (RxBuf, tp->rx_ring_dma);
1422
1423         /* init Tx buffer DMA addresses */
1424         for (i = 0; i < NUM_TX_DESC; i++)
1425                 RTL_W32_F (TxAddr0 + (i * 4), tp->tx_bufs_dma + (tp->tx_buf[i] - tp->tx_bufs));
1426
1427         RTL_W32 (RxMissed, 0);
1428
1429         rtl8139_set_rx_mode (dev);
1430
1431         /* no early-rx interrupts */
1432         RTL_W16 (MultiIntr, RTL_R16 (MultiIntr) & MultiIntrClear);
1433
1434         /* make sure RxTx has started */
1435         tmp = RTL_R8 (ChipCmd);
1436         if ((!(tmp & CmdRxEnb)) || (!(tmp & CmdTxEnb)))
1437                 RTL_W8 (ChipCmd, CmdRxEnb | CmdTxEnb);
1438
1439         /* Enable all known interrupts by setting the interrupt mask. */
1440         RTL_W16 (IntrMask, rtl8139_intr_mask);
1441 }
1442
1443
1444 /* Initialize the Rx and Tx rings, along with various 'dev' bits. */
1445 static void rtl8139_init_ring (struct net_device *dev)
1446 {
1447         struct rtl8139_private *tp = dev->priv;
1448         int i;
1449
1450         tp->cur_rx = 0;
1451         tp->cur_tx = 0;
1452         tp->dirty_tx = 0;
1453
1454         for (i = 0; i < NUM_TX_DESC; i++)
1455                 tp->tx_buf[i] = &tp->tx_bufs[i * TX_BUF_SIZE];
1456 }
1457
1458
1459 /* This must be global for CONFIG_8139TOO_TUNE_TWISTER case */
1460 static int next_tick = 3 * HZ;
1461
1462 #ifndef CONFIG_8139TOO_TUNE_TWISTER
1463 static inline void rtl8139_tune_twister (struct net_device *dev,
1464                                   struct rtl8139_private *tp) {}
1465 #else
1466 enum TwisterParamVals {
1467         PARA78_default  = 0x78fa8388,
1468         PARA7c_default  = 0xcb38de43,   /* param[0][3] */
1469         PARA7c_xxx      = 0xcb38de43,
1470 };
1471
1472 static const unsigned long param[4][4] = {
1473         {0xcb39de43, 0xcb39ce43, 0xfb38de03, 0xcb38de43},
1474         {0xcb39de43, 0xcb39ce43, 0xcb39ce83, 0xcb39ce83},
1475         {0xcb39de43, 0xcb39ce43, 0xcb39ce83, 0xcb39ce83},
1476         {0xbb39de43, 0xbb39ce43, 0xbb39ce83, 0xbb39ce83}
1477 };
1478
1479 static void rtl8139_tune_twister (struct net_device *dev,
1480                                   struct rtl8139_private *tp)
1481 {
1482         int linkcase;
1483         void *ioaddr = tp->mmio_addr;
1484
1485         /* This is a complicated state machine to configure the "twister" for
1486            impedance/echos based on the cable length.
1487            All of this is magic and undocumented.
1488          */
1489         switch (tp->twistie) {
1490         case 1:
1491                 if (RTL_R16 (CSCR) & CSCR_LinkOKBit) {
1492                         /* We have link beat, let us tune the twister. */
1493                         RTL_W16 (CSCR, CSCR_LinkDownOffCmd);
1494                         tp->twistie = 2;        /* Change to state 2. */
1495                         next_tick = HZ / 10;
1496                 } else {
1497                         /* Just put in some reasonable defaults for when beat returns. */
1498                         RTL_W16 (CSCR, CSCR_LinkDownCmd);
1499                         RTL_W32 (FIFOTMS, 0x20);        /* Turn on cable test mode. */
1500                         RTL_W32 (PARA78, PARA78_default);
1501                         RTL_W32 (PARA7c, PARA7c_default);
1502                         tp->twistie = 0;        /* Bail from future actions. */
1503                 }
1504                 break;
1505         case 2:
1506                 /* Read how long it took to hear the echo. */
1507                 linkcase = RTL_R16 (CSCR) & CSCR_LinkStatusBits;
1508                 if (linkcase == 0x7000)
1509                         tp->twist_row = 3;
1510                 else if (linkcase == 0x3000)
1511                         tp->twist_row = 2;
1512                 else if (linkcase == 0x1000)
1513                         tp->twist_row = 1;
1514                 else
1515                         tp->twist_row = 0;
1516                 tp->twist_col = 0;
1517                 tp->twistie = 3;        /* Change to state 2. */
1518                 next_tick = HZ / 10;
1519                 break;
1520         case 3:
1521                 /* Put out four tuning parameters, one per 100msec. */
1522                 if (tp->twist_col == 0)
1523                         RTL_W16 (FIFOTMS, 0);
1524                 RTL_W32 (PARA7c, param[(int) tp->twist_row]
1525                          [(int) tp->twist_col]);
1526                 next_tick = HZ / 10;
1527                 if (++tp->twist_col >= 4) {
1528                         /* For short cables we are done.
1529                            For long cables (row == 3) check for mistune. */
1530                         tp->twistie =
1531                             (tp->twist_row == 3) ? 4 : 0;
1532                 }
1533                 break;
1534         case 4:
1535                 /* Special case for long cables: check for mistune. */
1536                 if ((RTL_R16 (CSCR) &
1537                      CSCR_LinkStatusBits) == 0x7000) {
1538                         tp->twistie = 0;
1539                         break;
1540                 } else {
1541                         RTL_W32 (PARA7c, 0xfb38de03);
1542                         tp->twistie = 5;
1543                         next_tick = HZ / 10;
1544                 }
1545                 break;
1546         case 5:
1547                 /* Retune for shorter cable (column 2). */
1548                 RTL_W32 (FIFOTMS, 0x20);
1549                 RTL_W32 (PARA78, PARA78_default);
1550                 RTL_W32 (PARA7c, PARA7c_default);
1551                 RTL_W32 (FIFOTMS, 0x00);
1552                 tp->twist_row = 2;
1553                 tp->twist_col = 0;
1554                 tp->twistie = 3;
1555                 next_tick = HZ / 10;
1556                 break;
1557
1558         default:
1559                 /* do nothing */
1560                 break;
1561         }
1562 }
1563 #endif /* CONFIG_8139TOO_TUNE_TWISTER */
1564
1565 static inline void rtl8139_thread_iter (struct net_device *dev,
1566                                  struct rtl8139_private *tp,
1567                                  void *ioaddr)
1568 {
1569         int mii_lpa;
1570
1571         mii_lpa = mdio_read (dev, tp->phys[0], MII_LPA);
1572
1573         if (!tp->mii.force_media && mii_lpa != 0xffff) {
1574                 int duplex = (mii_lpa & LPA_100FULL)
1575                     || (mii_lpa & 0x01C0) == 0x0040;
1576                 if (tp->mii.full_duplex != duplex) {
1577                         tp->mii.full_duplex = duplex;
1578
1579                         if (mii_lpa) {
1580                                 printk (KERN_INFO
1581                                         "%s: Setting %s-duplex based on MII #%d link"
1582                                         " partner ability of %4.4x.\n",
1583                                         dev->name,
1584                                         tp->mii.full_duplex ? "full" : "half",
1585                                         tp->phys[0], mii_lpa);
1586                         } else {
1587                                 printk(KERN_INFO"%s: media is unconnected, link down, or incompatible connection\n",
1588                                        dev->name);
1589                         }
1590 #if 0
1591                         RTL_W8 (Cfg9346, Cfg9346_Unlock);
1592                         RTL_W8 (Config1, tp->mii.full_duplex ? 0x60 : 0x20);
1593                         RTL_W8 (Cfg9346, Cfg9346_Lock);
1594 #endif
1595                 }
1596         }
1597
1598         next_tick = HZ * 60;
1599
1600         rtl8139_tune_twister (dev, tp);
1601
1602         DPRINTK ("%s: Media selection tick, Link partner %4.4x.\n",
1603                  dev->name, RTL_R16 (NWayLPAR));
1604         DPRINTK ("%s:  Other registers are IntMask %4.4x IntStatus %4.4x\n",
1605                  dev->name, RTL_R16 (IntrMask), RTL_R16 (IntrStatus));
1606         DPRINTK ("%s:  Chip config %2.2x %2.2x.\n",
1607                  dev->name, RTL_R8 (Config0),
1608                  RTL_R8 (Config1));
1609 }
1610
1611 static int rtl8139_thread (void *data)
1612 {
1613         struct net_device *dev = data;
1614         struct rtl8139_private *tp = dev->priv;
1615         unsigned long timeout;
1616
1617         daemonize("%s", dev->name);
1618         allow_signal(SIGTERM);
1619
1620         while (1) {
1621                 timeout = next_tick;
1622                 do {
1623                         timeout = interruptible_sleep_on_timeout (&tp->thr_wait, timeout);
1624                         /* make swsusp happy with our thread */
1625                         if (current->flags & PF_FREEZE)
1626                                 refrigerator(PF_FREEZE);
1627                 } while (!signal_pending (current) && (timeout > 0));
1628
1629                 if (signal_pending (current)) {
1630                         flush_signals(current);
1631                 }
1632
1633                 if (tp->time_to_die)
1634                         break;
1635
1636                 rtnl_lock ();
1637                 rtl8139_thread_iter (dev, tp, tp->mmio_addr);
1638                 rtnl_unlock ();
1639         }
1640
1641         complete_and_exit (&tp->thr_exited, 0);
1642 }
1643
1644 static inline void rtl8139_start_thread(struct net_device *dev)
1645 {
1646         struct rtl8139_private *tp = dev->priv;
1647
1648         tp->thr_pid = -1;
1649         tp->twistie = 0;
1650         tp->time_to_die = 0;
1651         if (tp->chipset == CH_8139_K)
1652                 tp->twistie = 1;
1653         else if (tp->drv_flags & HAS_LNK_CHNG)
1654                 return;
1655
1656         tp->thr_pid = kernel_thread(rtl8139_thread, dev, CLONE_FS|CLONE_FILES);
1657         if (tp->thr_pid < 0) {
1658                 printk (KERN_WARNING "%s: unable to start kernel thread\n",
1659                         dev->name);
1660         }
1661 }
1662
1663 static inline void rtl8139_tx_clear (struct rtl8139_private *tp)
1664 {
1665         tp->cur_tx = 0;
1666         tp->dirty_tx = 0;
1667
1668         /* XXX account for unsent Tx packets in tp->stats.tx_dropped */
1669 }
1670
1671
1672 static void rtl8139_tx_timeout (struct net_device *dev)
1673 {
1674         struct rtl8139_private *tp = dev->priv;
1675         void *ioaddr = tp->mmio_addr;
1676         int i;
1677         u8 tmp8;
1678         unsigned long flags;
1679
1680         DPRINTK ("%s: Transmit timeout, status %2.2x %4.4x "
1681                  "media %2.2x.\n", dev->name,
1682                  RTL_R8 (ChipCmd),
1683                  RTL_R16 (IntrStatus),
1684                  RTL_R8 (MediaStatus));
1685
1686         tp->xstats.tx_timeouts++;
1687
1688         /* disable Tx ASAP, if not already */
1689         tmp8 = RTL_R8 (ChipCmd);
1690         if (tmp8 & CmdTxEnb)
1691                 RTL_W8 (ChipCmd, CmdRxEnb);
1692
1693         spin_lock(&tp->rx_lock);
1694         /* Disable interrupts by clearing the interrupt mask. */
1695         RTL_W16 (IntrMask, 0x0000);
1696
1697         /* Emit info to figure out what went wrong. */
1698         printk (KERN_DEBUG "%s: Tx queue start entry %ld  dirty entry %ld.\n",
1699                 dev->name, tp->cur_tx, tp->dirty_tx);
1700         for (i = 0; i < NUM_TX_DESC; i++)
1701                 printk (KERN_DEBUG "%s:  Tx descriptor %d is %8.8lx.%s\n",
1702                         dev->name, i, RTL_R32 (TxStatus0 + (i * 4)),
1703                         i == tp->dirty_tx % NUM_TX_DESC ?
1704                                 " (queue head)" : "");
1705
1706         /* Stop a shared interrupt from scavenging while we are. */
1707         spin_lock_irqsave (&tp->lock, flags);
1708         rtl8139_tx_clear (tp);
1709         spin_unlock_irqrestore (&tp->lock, flags);
1710
1711         /* ...and finally, reset everything */
1712         if (netif_running(dev)) {
1713                 rtl8139_hw_start (dev);
1714                 netif_wake_queue (dev);
1715         }
1716         spin_unlock(&tp->rx_lock);
1717         
1718 }
1719
1720
1721 static int rtl8139_start_xmit (struct sk_buff *skb, struct net_device *dev)
1722 {
1723         struct rtl8139_private *tp = dev->priv;
1724         void *ioaddr = tp->mmio_addr;
1725         unsigned int entry;
1726         unsigned int len = skb->len;
1727
1728         /* Calculate the next Tx descriptor entry. */
1729         entry = tp->cur_tx % NUM_TX_DESC;
1730
1731         /* Note: the chip doesn't have auto-pad! */
1732         if (likely(len < TX_BUF_SIZE)) {
1733                 if (len < ETH_ZLEN)
1734                         memset(tp->tx_buf[entry], 0, ETH_ZLEN);
1735                 skb_copy_and_csum_dev(skb, tp->tx_buf[entry]);
1736                 dev_kfree_skb(skb);
1737         } else {
1738                 dev_kfree_skb(skb);
1739                 tp->stats.tx_dropped++;
1740                 return 0;
1741         }
1742
1743         spin_lock_irq(&tp->lock);
1744         RTL_W32_F (TxStatus0 + (entry * sizeof (u32)),
1745                    tp->tx_flag | max(len, (unsigned int)ETH_ZLEN));
1746
1747         dev->trans_start = jiffies;
1748
1749         tp->cur_tx++;
1750         wmb();
1751
1752         if ((tp->cur_tx - NUM_TX_DESC) == tp->dirty_tx)
1753                 netif_stop_queue (dev);
1754         spin_unlock_irq(&tp->lock);
1755
1756         if (netif_msg_tx_queued(tp))
1757                 printk (KERN_DEBUG "%s: Queued Tx packet size %u to slot %d.\n",
1758                         dev->name, len, entry);
1759
1760         return 0;
1761 }
1762
1763
1764 static void rtl8139_tx_interrupt (struct net_device *dev,
1765                                   struct rtl8139_private *tp,
1766                                   void *ioaddr)
1767 {
1768         unsigned long dirty_tx, tx_left;
1769
1770         assert (dev != NULL);
1771         assert (tp != NULL);
1772         assert (ioaddr != NULL);
1773
1774         dirty_tx = tp->dirty_tx;
1775         tx_left = tp->cur_tx - dirty_tx;
1776         while (tx_left > 0) {
1777                 int entry = dirty_tx % NUM_TX_DESC;
1778                 int txstatus;
1779
1780                 txstatus = RTL_R32 (TxStatus0 + (entry * sizeof (u32)));
1781
1782                 if (!(txstatus & (TxStatOK | TxUnderrun | TxAborted)))
1783                         break;  /* It still hasn't been Txed */
1784
1785                 /* Note: TxCarrierLost is always asserted at 100mbps. */
1786                 if (txstatus & (TxOutOfWindow | TxAborted)) {
1787                         /* There was an major error, log it. */
1788                         if (netif_msg_tx_err(tp))
1789                                 printk(KERN_DEBUG "%s: Transmit error, Tx status %8.8x.\n",
1790                                         dev->name, txstatus);
1791                         tp->stats.tx_errors++;
1792                         if (txstatus & TxAborted) {
1793                                 tp->stats.tx_aborted_errors++;
1794                                 RTL_W32 (TxConfig, TxClearAbt);
1795                                 RTL_W16 (IntrStatus, TxErr);
1796                                 wmb();
1797                         }
1798                         if (txstatus & TxCarrierLost)
1799                                 tp->stats.tx_carrier_errors++;
1800                         if (txstatus & TxOutOfWindow)
1801                                 tp->stats.tx_window_errors++;
1802                 } else {
1803                         if (txstatus & TxUnderrun) {
1804                                 /* Add 64 to the Tx FIFO threshold. */
1805                                 if (tp->tx_flag < 0x00300000)
1806                                         tp->tx_flag += 0x00020000;
1807                                 tp->stats.tx_fifo_errors++;
1808                         }
1809                         tp->stats.collisions += (txstatus >> 24) & 15;
1810                         tp->stats.tx_bytes += txstatus & 0x7ff;
1811                         tp->stats.tx_packets++;
1812                 }
1813
1814                 dirty_tx++;
1815                 tx_left--;
1816         }
1817
1818 #ifndef RTL8139_NDEBUG
1819         if (tp->cur_tx - dirty_tx > NUM_TX_DESC) {
1820                 printk (KERN_ERR "%s: Out-of-sync dirty pointer, %ld vs. %ld.\n",
1821                         dev->name, dirty_tx, tp->cur_tx);
1822                 dirty_tx += NUM_TX_DESC;
1823         }
1824 #endif /* RTL8139_NDEBUG */
1825
1826         /* only wake the queue if we did work, and the queue is stopped */
1827         if (tp->dirty_tx != dirty_tx) {
1828                 tp->dirty_tx = dirty_tx;
1829                 mb();
1830                 netif_wake_queue (dev);
1831         }
1832 }
1833
1834
1835 /* TODO: clean this up!  Rx reset need not be this intensive */
1836 static void rtl8139_rx_err (u32 rx_status, struct net_device *dev,
1837                             struct rtl8139_private *tp, void *ioaddr)
1838 {
1839         u8 tmp8;
1840 #ifdef CONFIG_8139_OLD_RX_RESET
1841         int tmp_work;
1842 #endif
1843
1844         if (netif_msg_rx_err (tp)) 
1845                 printk(KERN_DEBUG "%s: Ethernet frame had errors, status %8.8x.\n",
1846                         dev->name, rx_status);
1847         tp->stats.rx_errors++;
1848         if (!(rx_status & RxStatusOK)) {
1849                 if (rx_status & RxTooLong) {
1850                         DPRINTK ("%s: Oversized Ethernet frame, status %4.4x!\n",
1851                                 dev->name, rx_status);
1852                         /* A.C.: The chip hangs here. */
1853                 }
1854                 if (rx_status & (RxBadSymbol | RxBadAlign))
1855                         tp->stats.rx_frame_errors++;
1856                 if (rx_status & (RxRunt | RxTooLong))
1857                         tp->stats.rx_length_errors++;
1858                 if (rx_status & RxCRCErr)
1859                         tp->stats.rx_crc_errors++;
1860         } else {
1861                 tp->xstats.rx_lost_in_ring++;
1862         }
1863
1864 #ifndef CONFIG_8139_OLD_RX_RESET
1865         tmp8 = RTL_R8 (ChipCmd);
1866         RTL_W8 (ChipCmd, tmp8 & ~CmdRxEnb);
1867         RTL_W8 (ChipCmd, tmp8);
1868         RTL_W32 (RxConfig, tp->rx_config);
1869         tp->cur_rx = 0;
1870 #else
1871         /* Reset the receiver, based on RealTek recommendation. (Bug?) */
1872
1873         /* disable receive */
1874         RTL_W8_F (ChipCmd, CmdTxEnb);
1875         tmp_work = 200;
1876         while (--tmp_work > 0) {
1877                 udelay(1);
1878                 tmp8 = RTL_R8 (ChipCmd);
1879                 if (!(tmp8 & CmdRxEnb))
1880                         break;
1881         }
1882         if (tmp_work <= 0)
1883                 printk (KERN_WARNING PFX "rx stop wait too long\n");
1884         /* restart receive */
1885         tmp_work = 200;
1886         while (--tmp_work > 0) {
1887                 RTL_W8_F (ChipCmd, CmdRxEnb | CmdTxEnb);
1888                 udelay(1);
1889                 tmp8 = RTL_R8 (ChipCmd);
1890                 if ((tmp8 & CmdRxEnb) && (tmp8 & CmdTxEnb))
1891                         break;
1892         }
1893         if (tmp_work <= 0)
1894                 printk (KERN_WARNING PFX "tx/rx enable wait too long\n");
1895
1896         /* and reinitialize all rx related registers */
1897         RTL_W8_F (Cfg9346, Cfg9346_Unlock);
1898         /* Must enable Tx/Rx before setting transfer thresholds! */
1899         RTL_W8 (ChipCmd, CmdRxEnb | CmdTxEnb);
1900
1901         tp->rx_config = rtl8139_rx_config | AcceptBroadcast | AcceptMyPhys;
1902         RTL_W32 (RxConfig, tp->rx_config);
1903         tp->cur_rx = 0;
1904
1905         DPRINTK("init buffer addresses\n");
1906
1907         /* Lock Config[01234] and BMCR register writes */
1908         RTL_W8 (Cfg9346, Cfg9346_Lock);
1909
1910         /* init Rx ring buffer DMA address */
1911         RTL_W32_F (RxBuf, tp->rx_ring_dma);
1912
1913         /* A.C.: Reset the multicast list. */
1914         __set_rx_mode (dev);
1915 #endif
1916 }
1917
1918 #if RX_BUF_IDX == 3
1919 static __inline__ void wrap_copy(struct sk_buff *skb, const unsigned char *ring,
1920                                  u32 offset, unsigned int size)
1921 {
1922         u32 left = RX_BUF_LEN - offset;
1923
1924         if (size > left) {
1925                 memcpy(skb->data, ring + offset, left);
1926                 memcpy(skb->data+left, ring, size - left);
1927         } else
1928                 memcpy(skb->data, ring + offset, size);
1929 }
1930 #endif
1931
1932 static int rtl8139_rx(struct net_device *dev, struct rtl8139_private *tp,
1933                       int budget)
1934 {
1935         void *ioaddr = tp->mmio_addr;
1936         int received = 0;
1937         unsigned char *rx_ring = tp->rx_ring;
1938         unsigned int cur_rx = tp->cur_rx;
1939
1940         DPRINTK ("%s: In rtl8139_rx(), current %4.4x BufAddr %4.4x,"
1941                  " free to %4.4x, Cmd %2.2x.\n", dev->name, cur_rx,
1942                  RTL_R16 (RxBufAddr),
1943                  RTL_R16 (RxBufPtr), RTL_R8 (ChipCmd));
1944
1945         while (netif_running(dev) && received < budget 
1946                && (RTL_R8 (ChipCmd) & RxBufEmpty) == 0) {
1947                 u32 ring_offset = cur_rx % RX_BUF_LEN;
1948                 u32 rx_status;
1949                 unsigned int rx_size;
1950                 unsigned int pkt_size;
1951                 struct sk_buff *skb;
1952                 u16 status;
1953
1954                 rmb();
1955
1956                 /* read size+status of next frame from DMA ring buffer */
1957                 rx_status = le32_to_cpu (*(u32 *) (rx_ring + ring_offset));
1958                 rx_size = rx_status >> 16;
1959                 pkt_size = rx_size - 4;
1960
1961                 if (netif_msg_rx_status(tp))
1962                         printk(KERN_DEBUG "%s:  rtl8139_rx() status %4.4x, size %4.4x,"
1963                                 " cur %4.4x.\n", dev->name, rx_status,
1964                          rx_size, cur_rx);
1965 #if RTL8139_DEBUG > 2
1966                 {
1967                         int i;
1968                         DPRINTK ("%s: Frame contents ", dev->name);
1969                         for (i = 0; i < 70; i++)
1970                                 printk (" %2.2x",
1971                                         rx_ring[ring_offset + i]);
1972                         printk (".\n");
1973                 }
1974 #endif
1975
1976                 /* Packet copy from FIFO still in progress.
1977                  * Theoretically, this should never happen
1978                  * since EarlyRx is disabled.
1979                  */
1980                 if (unlikely(rx_size == 0xfff0)) {
1981                         tp->xstats.early_rx++;
1982                         goto done;
1983                 }
1984
1985                 /* If Rx err or invalid rx_size/rx_status received
1986                  * (which happens if we get lost in the ring),
1987                  * Rx process gets reset, so we abort any further
1988                  * Rx processing.
1989                  */
1990                 if (unlikely((rx_size > (MAX_ETH_FRAME_SIZE+4)) ||
1991                              (rx_size < 8) ||
1992                              (!(rx_status & RxStatusOK)))) {
1993                         rtl8139_rx_err (rx_status, dev, tp, ioaddr);
1994                         return -1;
1995                 }
1996
1997                 /* Malloc up new buffer, compatible with net-2e. */
1998                 /* Omit the four octet CRC from the length. */
1999
2000                 skb = dev_alloc_skb (pkt_size + 2);
2001                 if (likely(skb)) {
2002                         skb->dev = dev;
2003                         skb_reserve (skb, 2);   /* 16 byte align the IP fields. */
2004 #if RX_BUF_IDX == 3
2005                         wrap_copy(skb, rx_ring, ring_offset+4, pkt_size);
2006 #else
2007                         eth_copy_and_sum (skb, &rx_ring[ring_offset + 4], pkt_size, 0);
2008 #endif
2009                         skb_put (skb, pkt_size);
2010
2011                         skb->protocol = eth_type_trans (skb, dev);
2012
2013                         dev->last_rx = jiffies;
2014                         tp->stats.rx_bytes += pkt_size;
2015                         tp->stats.rx_packets++;
2016
2017                         netif_receive_skb (skb);
2018                 } else {
2019                         if (net_ratelimit()) 
2020                                 printk (KERN_WARNING
2021                                         "%s: Memory squeeze, dropping packet.\n",
2022                                         dev->name);
2023                         tp->stats.rx_dropped++;
2024                 }
2025                 received++;
2026
2027                 cur_rx = (cur_rx + rx_size + 4 + 3) & ~3;
2028                 RTL_W16 (RxBufPtr, (u16) (cur_rx - 16));
2029
2030                 /* Clear out errors and receive interrupts */
2031                 status = RTL_R16 (IntrStatus) & RxAckBits;
2032                 if (likely(status != 0)) {
2033                         if (unlikely(status & (RxFIFOOver | RxOverflow))) {
2034                                 tp->stats.rx_errors++;
2035                                 if (status & RxFIFOOver)
2036                                         tp->stats.rx_fifo_errors++;
2037                         }
2038                         RTL_W16_F (IntrStatus, RxAckBits);
2039                 }
2040         }
2041
2042  done:
2043
2044 #if RTL8139_DEBUG > 1
2045         DPRINTK ("%s: Done rtl8139_rx(), current %4.4x BufAddr %4.4x,"
2046                  " free to %4.4x, Cmd %2.2x.\n", dev->name, cur_rx,
2047                  RTL_R16 (RxBufAddr),
2048                  RTL_R16 (RxBufPtr), RTL_R8 (ChipCmd));
2049 #endif
2050
2051         tp->cur_rx = cur_rx;
2052         return received;
2053 }
2054
2055
2056 static void rtl8139_weird_interrupt (struct net_device *dev,
2057                                      struct rtl8139_private *tp,
2058                                      void *ioaddr,
2059                                      int status, int link_changed)
2060 {
2061         DPRINTK ("%s: Abnormal interrupt, status %8.8x.\n",
2062                  dev->name, status);
2063
2064         assert (dev != NULL);
2065         assert (tp != NULL);
2066         assert (ioaddr != NULL);
2067
2068         /* Update the error count. */
2069         tp->stats.rx_missed_errors += RTL_R32 (RxMissed);
2070         RTL_W32 (RxMissed, 0);
2071
2072         if ((status & RxUnderrun) && link_changed &&
2073             (tp->drv_flags & HAS_LNK_CHNG)) {
2074                 rtl_check_media(dev, 0);
2075                 status &= ~RxUnderrun;
2076         }
2077
2078         if (status & (RxUnderrun | RxErr))
2079                 tp->stats.rx_errors++;
2080
2081         if (status & PCSTimeout)
2082                 tp->stats.rx_length_errors++;
2083         if (status & RxUnderrun)
2084                 tp->stats.rx_fifo_errors++;
2085         if (status & PCIErr) {
2086                 u16 pci_cmd_status;
2087                 pci_read_config_word (tp->pci_dev, PCI_STATUS, &pci_cmd_status);
2088                 pci_write_config_word (tp->pci_dev, PCI_STATUS, pci_cmd_status);
2089
2090                 printk (KERN_ERR "%s: PCI Bus error %4.4x.\n",
2091                         dev->name, pci_cmd_status);
2092         }
2093 }
2094
2095 static int rtl8139_poll(struct net_device *dev, int *budget)
2096 {
2097         struct rtl8139_private *tp = dev->priv;
2098         void *ioaddr = tp->mmio_addr;
2099         int orig_budget = min(*budget, dev->quota);
2100         int done = 1;
2101
2102         spin_lock(&tp->rx_lock);
2103         if (likely(RTL_R16(IntrStatus) & RxAckBits)) {
2104                 int work_done;
2105
2106                 work_done = rtl8139_rx(dev, tp, orig_budget);
2107                 if (likely(work_done > 0)) {
2108                         *budget -= work_done;
2109                         dev->quota -= work_done;
2110                         done = (work_done < orig_budget);
2111                 }
2112         }
2113
2114         if (done) {
2115                 /*
2116                  * Order is important since data can get interrupted
2117                  * again when we think we are done.
2118                  */
2119                 local_irq_disable();
2120                 RTL_W16_F(IntrMask, rtl8139_intr_mask);
2121                 __netif_rx_complete(dev);
2122                 local_irq_enable();
2123         }
2124         spin_unlock(&tp->rx_lock);
2125
2126         return !done;
2127 }
2128
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,
2132                                struct pt_regs *regs)
2133 {
2134         struct net_device *dev = (struct net_device *) dev_instance;
2135         struct rtl8139_private *tp = dev->priv;
2136         void *ioaddr = tp->mmio_addr;
2137         u16 status, ackstat;
2138         int link_changed = 0; /* avoid bogus "uninit" warning */
2139         int handled = 0;
2140
2141         spin_lock (&tp->lock);
2142         status = RTL_R16 (IntrStatus);
2143
2144         /* shared irq? */
2145         if (unlikely((status & rtl8139_intr_mask) == 0)) 
2146                 goto out;
2147
2148         handled = 1;
2149
2150         /* h/w no longer present (hotplug?) or major error, bail */
2151         if (unlikely(status == 0xFFFF)) 
2152                 goto out;
2153
2154         /* close possible race's with dev_close */
2155         if (unlikely(!netif_running(dev))) {
2156                 RTL_W16 (IntrMask, 0);
2157                 goto out;
2158         }
2159
2160         /* Acknowledge all of the current interrupt sources ASAP, but
2161            an first get an additional status bit from CSCR. */
2162         if (unlikely(status & RxUnderrun))
2163                 link_changed = RTL_R16 (CSCR) & CSCR_LinkChangeBit;
2164
2165         ackstat = status & ~(RxAckBits | TxErr);
2166         if (ackstat)
2167                 RTL_W16 (IntrStatus, ackstat);
2168
2169         /* Receive packets are processed by poll routine.
2170            If not running start it now. */
2171         if (status & RxAckBits){
2172                 if (netif_rx_schedule_prep(dev)) {
2173                         RTL_W16_F (IntrMask, rtl8139_norx_intr_mask);
2174                         __netif_rx_schedule (dev);
2175                 }
2176         }
2177
2178         /* Check uncommon events with one test. */
2179         if (unlikely(status & (PCIErr | PCSTimeout | RxUnderrun | RxErr)))
2180                 rtl8139_weird_interrupt (dev, tp, ioaddr,
2181                                          status, link_changed);
2182
2183         if (status & (TxOK | TxErr)) {
2184                 rtl8139_tx_interrupt (dev, tp, ioaddr);
2185                 if (status & TxErr)
2186                         RTL_W16 (IntrStatus, TxErr);
2187         }
2188  out:
2189         spin_unlock (&tp->lock);
2190
2191         DPRINTK ("%s: exiting interrupt, intr_status=%#4.4x.\n",
2192                  dev->name, RTL_R16 (IntrStatus));
2193         return IRQ_RETVAL(handled);
2194 }
2195
2196 #ifdef CONFIG_NET_POLL_CONTROLLER
2197 /*
2198  * Polling receive - used by netconsole and other diagnostic tools
2199  * to allow network i/o with interrupts disabled.
2200  */
2201 static void rtl8139_poll_controller(struct net_device *dev)
2202 {
2203         disable_irq(dev->irq);
2204         rtl8139_interrupt(dev->irq, dev, NULL);
2205         enable_irq(dev->irq);
2206 }
2207 #endif
2208
2209 static int rtl8139_close (struct net_device *dev)
2210 {
2211         struct rtl8139_private *tp = dev->priv;
2212         void *ioaddr = tp->mmio_addr;
2213         int ret = 0;
2214         unsigned long flags;
2215
2216         netif_stop_queue (dev);
2217
2218         if (tp->thr_pid >= 0) {
2219                 tp->time_to_die = 1;
2220                 wmb();
2221                 ret = kill_proc (tp->thr_pid, SIGTERM, 1);
2222                 if (ret) {
2223                         printk (KERN_ERR "%s: unable to signal thread\n", dev->name);
2224                         return ret;
2225                 }
2226                 wait_for_completion (&tp->thr_exited);
2227         }
2228         
2229         if (netif_msg_ifdown(tp))
2230                 printk(KERN_DEBUG "%s: Shutting down ethercard, status was 0x%4.4x.\n",
2231                         dev->name, RTL_R16 (IntrStatus));
2232
2233         spin_lock_irqsave (&tp->lock, flags);
2234
2235         /* Stop the chip's Tx and Rx DMA processes. */
2236         RTL_W8 (ChipCmd, 0);
2237
2238         /* Disable interrupts by clearing the interrupt mask. */
2239         RTL_W16 (IntrMask, 0);
2240
2241         /* Update the error counts. */
2242         tp->stats.rx_missed_errors += RTL_R32 (RxMissed);
2243         RTL_W32 (RxMissed, 0);
2244
2245         spin_unlock_irqrestore (&tp->lock, flags);
2246
2247         synchronize_irq (dev->irq);     /* racy, but that's ok here */
2248         free_irq (dev->irq, dev);
2249
2250         rtl8139_tx_clear (tp);
2251
2252         pci_free_consistent(tp->pci_dev, RX_BUF_TOT_LEN,
2253                             tp->rx_ring, tp->rx_ring_dma);
2254         pci_free_consistent(tp->pci_dev, TX_BUF_TOT_LEN,
2255                             tp->tx_bufs, tp->tx_bufs_dma);
2256         tp->rx_ring = NULL;
2257         tp->tx_bufs = NULL;
2258
2259         /* Green! Put the chip in low-power mode. */
2260         RTL_W8 (Cfg9346, Cfg9346_Unlock);
2261
2262         if (rtl_chip_info[tp->chipset].flags & HasHltClk)
2263                 RTL_W8 (HltClk, 'H');   /* 'R' would leave the clock running. */
2264
2265         return 0;
2266 }
2267
2268
2269 /* Get the ethtool Wake-on-LAN settings.  Assumes that wol points to
2270    kernel memory, *wol has been initialized as {ETHTOOL_GWOL}, and
2271    other threads or interrupts aren't messing with the 8139.  */
2272 static void rtl8139_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
2273 {
2274         struct rtl8139_private *np = dev->priv;
2275         void *ioaddr = np->mmio_addr;
2276
2277         spin_lock_irq(&np->lock);
2278         if (rtl_chip_info[np->chipset].flags & HasLWake) {
2279                 u8 cfg3 = RTL_R8 (Config3);
2280                 u8 cfg5 = RTL_R8 (Config5);
2281
2282                 wol->supported = WAKE_PHY | WAKE_MAGIC
2283                         | WAKE_UCAST | WAKE_MCAST | WAKE_BCAST;
2284
2285                 wol->wolopts = 0;
2286                 if (cfg3 & Cfg3_LinkUp)
2287                         wol->wolopts |= WAKE_PHY;
2288                 if (cfg3 & Cfg3_Magic)
2289                         wol->wolopts |= WAKE_MAGIC;
2290                 /* (KON)FIXME: See how netdev_set_wol() handles the
2291                    following constants.  */
2292                 if (cfg5 & Cfg5_UWF)
2293                         wol->wolopts |= WAKE_UCAST;
2294                 if (cfg5 & Cfg5_MWF)
2295                         wol->wolopts |= WAKE_MCAST;
2296                 if (cfg5 & Cfg5_BWF)
2297                         wol->wolopts |= WAKE_BCAST;
2298         }
2299         spin_unlock_irq(&np->lock);
2300 }
2301
2302
2303 /* Set the ethtool Wake-on-LAN settings.  Return 0 or -errno.  Assumes
2304    that wol points to kernel memory and other threads or interrupts
2305    aren't messing with the 8139.  */
2306 static int rtl8139_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
2307 {
2308         struct rtl8139_private *np = dev->priv;
2309         void *ioaddr = np->mmio_addr;
2310         u32 support;
2311         u8 cfg3, cfg5;
2312
2313         support = ((rtl_chip_info[np->chipset].flags & HasLWake)
2314                    ? (WAKE_PHY | WAKE_MAGIC
2315                       | WAKE_UCAST | WAKE_MCAST | WAKE_BCAST)
2316                    : 0);
2317         if (wol->wolopts & ~support)
2318                 return -EINVAL;
2319
2320         spin_lock_irq(&np->lock);
2321         cfg3 = RTL_R8 (Config3) & ~(Cfg3_LinkUp | Cfg3_Magic);
2322         if (wol->wolopts & WAKE_PHY)
2323                 cfg3 |= Cfg3_LinkUp;
2324         if (wol->wolopts & WAKE_MAGIC)
2325                 cfg3 |= Cfg3_Magic;
2326         RTL_W8 (Cfg9346, Cfg9346_Unlock);
2327         RTL_W8 (Config3, cfg3);
2328         RTL_W8 (Cfg9346, Cfg9346_Lock);
2329
2330         cfg5 = RTL_R8 (Config5) & ~(Cfg5_UWF | Cfg5_MWF | Cfg5_BWF);
2331         /* (KON)FIXME: These are untested.  We may have to set the
2332            CRC0, Wakeup0 and LSBCRC0 registers too, but I have no
2333            documentation.  */
2334         if (wol->wolopts & WAKE_UCAST)
2335                 cfg5 |= Cfg5_UWF;
2336         if (wol->wolopts & WAKE_MCAST)
2337                 cfg5 |= Cfg5_MWF;
2338         if (wol->wolopts & WAKE_BCAST)
2339                 cfg5 |= Cfg5_BWF;
2340         RTL_W8 (Config5, cfg5); /* need not unlock via Cfg9346 */
2341         spin_unlock_irq(&np->lock);
2342
2343         return 0;
2344 }
2345
2346 static void rtl8139_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
2347 {
2348         struct rtl8139_private *np = dev->priv;
2349         strcpy(info->driver, DRV_NAME);
2350         strcpy(info->version, DRV_VERSION);
2351         strcpy(info->bus_info, pci_name(np->pci_dev));
2352         info->regdump_len = np->regs_len;
2353 }
2354
2355 static int rtl8139_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
2356 {
2357         struct rtl8139_private *np = dev->priv;
2358         spin_lock_irq(&np->lock);
2359         mii_ethtool_gset(&np->mii, cmd);
2360         spin_unlock_irq(&np->lock);
2361         return 0;
2362 }
2363
2364 static int rtl8139_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
2365 {
2366         struct rtl8139_private *np = dev->priv;
2367         int rc;
2368         spin_lock_irq(&np->lock);
2369         rc = mii_ethtool_sset(&np->mii, cmd);
2370         spin_unlock_irq(&np->lock);
2371         return rc;
2372 }
2373
2374 static int rtl8139_nway_reset(struct net_device *dev)
2375 {
2376         struct rtl8139_private *np = dev->priv;
2377         return mii_nway_restart(&np->mii);
2378 }
2379
2380 static u32 rtl8139_get_link(struct net_device *dev)
2381 {
2382         struct rtl8139_private *np = dev->priv;
2383         return mii_link_ok(&np->mii);
2384 }
2385
2386 static u32 rtl8139_get_msglevel(struct net_device *dev)
2387 {
2388         struct rtl8139_private *np = dev->priv;
2389         return np->msg_enable;
2390 }
2391
2392 static void rtl8139_set_msglevel(struct net_device *dev, u32 datum)
2393 {
2394         struct rtl8139_private *np = dev->priv;
2395         np->msg_enable = datum;
2396 }
2397
2398 /* TODO: we are too slack to do reg dumping for pio, for now */
2399 #ifdef CONFIG_8139TOO_PIO
2400 #define rtl8139_get_regs_len    NULL
2401 #define rtl8139_get_regs        NULL
2402 #else
2403 static int rtl8139_get_regs_len(struct net_device *dev)
2404 {
2405         struct rtl8139_private *np = dev->priv;
2406         return np->regs_len;
2407 }
2408
2409 static void rtl8139_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *regbuf)
2410 {
2411         struct rtl8139_private *np = dev->priv;
2412
2413         regs->version = RTL_REGS_VER;
2414
2415         spin_lock_irq(&np->lock);
2416         memcpy_fromio(regbuf, np->mmio_addr, regs->len);
2417         spin_unlock_irq(&np->lock);
2418 }
2419 #endif /* CONFIG_8139TOO_MMIO */
2420
2421 static int rtl8139_get_stats_count(struct net_device *dev)
2422 {
2423         return RTL_NUM_STATS;
2424 }
2425
2426 static void rtl8139_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *stats, u64 *data)
2427 {
2428         struct rtl8139_private *np = dev->priv;
2429
2430         data[0] = np->xstats.early_rx;
2431         data[1] = np->xstats.tx_buf_mapped;
2432         data[2] = np->xstats.tx_timeouts;
2433         data[3] = np->xstats.rx_lost_in_ring;
2434 }
2435
2436 static void rtl8139_get_strings(struct net_device *dev, u32 stringset, u8 *data)
2437 {
2438         memcpy(data, ethtool_stats_keys, sizeof(ethtool_stats_keys));
2439 }
2440
2441 static struct ethtool_ops rtl8139_ethtool_ops = {
2442         .get_drvinfo            = rtl8139_get_drvinfo,
2443         .get_settings           = rtl8139_get_settings,
2444         .set_settings           = rtl8139_set_settings,
2445         .get_regs_len           = rtl8139_get_regs_len,
2446         .get_regs               = rtl8139_get_regs,
2447         .nway_reset             = rtl8139_nway_reset,
2448         .get_link               = rtl8139_get_link,
2449         .get_msglevel           = rtl8139_get_msglevel,
2450         .set_msglevel           = rtl8139_set_msglevel,
2451         .get_wol                = rtl8139_get_wol,
2452         .set_wol                = rtl8139_set_wol,
2453         .get_strings            = rtl8139_get_strings,
2454         .get_stats_count        = rtl8139_get_stats_count,
2455         .get_ethtool_stats      = rtl8139_get_ethtool_stats,
2456 };
2457
2458 static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
2459 {
2460         struct rtl8139_private *np = dev->priv;
2461         struct mii_ioctl_data *data = (struct mii_ioctl_data *) & rq->ifr_data;
2462         int rc;
2463
2464         if (!netif_running(dev))
2465                 return -EINVAL;
2466
2467         spin_lock_irq(&np->lock);
2468         rc = generic_mii_ioctl(&np->mii, data, cmd, NULL);
2469         spin_unlock_irq(&np->lock);
2470
2471         return rc;
2472 }
2473
2474
2475 static struct net_device_stats *rtl8139_get_stats (struct net_device *dev)
2476 {
2477         struct rtl8139_private *tp = dev->priv;
2478         void *ioaddr = tp->mmio_addr;
2479         unsigned long flags;
2480
2481         if (netif_running(dev)) {
2482                 spin_lock_irqsave (&tp->lock, flags);
2483                 tp->stats.rx_missed_errors += RTL_R32 (RxMissed);
2484                 RTL_W32 (RxMissed, 0);
2485                 spin_unlock_irqrestore (&tp->lock, flags);
2486         }
2487
2488         return &tp->stats;
2489 }
2490
2491 /* Set or clear the multicast filter for this adaptor.
2492    This routine is not state sensitive and need not be SMP locked. */
2493
2494 static void __set_rx_mode (struct net_device *dev)
2495 {
2496         struct rtl8139_private *tp = dev->priv;
2497         void *ioaddr = tp->mmio_addr;
2498         u32 mc_filter[2];       /* Multicast hash filter */
2499         int i, rx_mode;
2500         u32 tmp;
2501
2502         DPRINTK ("%s:   rtl8139_set_rx_mode(%4.4x) done -- Rx config %8.8lx.\n",
2503                         dev->name, dev->flags, RTL_R32 (RxConfig));
2504
2505         /* Note: do not reorder, GCC is clever about common statements. */
2506         if (dev->flags & IFF_PROMISC) {
2507                 /* Unconditionally log net taps. */
2508                 printk (KERN_NOTICE "%s: Promiscuous mode enabled.\n",
2509                         dev->name);
2510                 rx_mode =
2511                     AcceptBroadcast | AcceptMulticast | AcceptMyPhys |
2512                     AcceptAllPhys;
2513                 mc_filter[1] = mc_filter[0] = 0xffffffff;
2514         } else if ((dev->mc_count > multicast_filter_limit)
2515                    || (dev->flags & IFF_ALLMULTI)) {
2516                 /* Too many to filter perfectly -- accept all multicasts. */
2517                 rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
2518                 mc_filter[1] = mc_filter[0] = 0xffffffff;
2519         } else {
2520                 struct dev_mc_list *mclist;
2521                 rx_mode = AcceptBroadcast | AcceptMyPhys;
2522                 mc_filter[1] = mc_filter[0] = 0;
2523                 for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
2524                      i++, mclist = mclist->next) {
2525                         int bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26;
2526
2527                         mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
2528                         rx_mode |= AcceptMulticast;
2529                 }
2530         }
2531
2532         /* We can safely update without stopping the chip. */
2533         tmp = rtl8139_rx_config | rx_mode;
2534         if (tp->rx_config != tmp) {
2535                 RTL_W32_F (RxConfig, tmp);
2536                 tp->rx_config = tmp;
2537         }
2538         RTL_W32_F (MAR0 + 0, mc_filter[0]);
2539         RTL_W32_F (MAR0 + 4, mc_filter[1]);
2540 }
2541
2542 static void rtl8139_set_rx_mode (struct net_device *dev)
2543 {
2544         unsigned long flags;
2545         struct rtl8139_private *tp = dev->priv;
2546
2547         spin_lock_irqsave (&tp->lock, flags);
2548         __set_rx_mode(dev);
2549         spin_unlock_irqrestore (&tp->lock, flags);
2550 }
2551
2552 #ifdef CONFIG_PM
2553
2554 static int rtl8139_suspend (struct pci_dev *pdev, u32 state)
2555 {
2556         struct net_device *dev = pci_get_drvdata (pdev);
2557         struct rtl8139_private *tp = dev->priv;
2558         void *ioaddr = tp->mmio_addr;
2559         unsigned long flags;
2560
2561         if (!netif_running (dev))
2562                 return 0;
2563
2564         netif_device_detach (dev);
2565
2566         spin_lock_irqsave (&tp->lock, flags);
2567
2568         /* Disable interrupts, stop Tx and Rx. */
2569         RTL_W16 (IntrMask, 0);
2570         RTL_W8 (ChipCmd, 0);
2571
2572         /* Update the error counts. */
2573         tp->stats.rx_missed_errors += RTL_R32 (RxMissed);
2574         RTL_W32 (RxMissed, 0);
2575
2576         spin_unlock_irqrestore (&tp->lock, flags);
2577
2578         pci_set_power_state (pdev, 3);
2579         pci_save_state (pdev, tp->pci_state);
2580
2581         return 0;
2582 }
2583
2584
2585 static int rtl8139_resume (struct pci_dev *pdev)
2586 {
2587         struct net_device *dev = pci_get_drvdata (pdev);
2588         struct rtl8139_private *tp = dev->priv;
2589
2590         if (!netif_running (dev))
2591                 return 0;
2592         pci_restore_state (pdev, tp->pci_state);
2593         pci_set_power_state (pdev, 0);
2594         rtl8139_init_ring (dev);
2595         rtl8139_hw_start (dev);
2596         netif_device_attach (dev);
2597         return 0;
2598 }
2599
2600 #endif /* CONFIG_PM */
2601
2602
2603 static struct pci_driver rtl8139_pci_driver = {
2604         .name           = DRV_NAME,
2605         .id_table       = rtl8139_pci_tbl,
2606         .probe          = rtl8139_init_one,
2607         .remove         = __devexit_p(rtl8139_remove_one),
2608 #ifdef CONFIG_PM
2609         .suspend        = rtl8139_suspend,
2610         .resume         = rtl8139_resume,
2611 #endif /* CONFIG_PM */
2612 };
2613
2614
2615 static int __init rtl8139_init_module (void)
2616 {
2617         /* when we're a module, we always print a version message,
2618          * even if no 8139 board is found.
2619          */
2620 #ifdef MODULE
2621         printk (KERN_INFO RTL8139_DRIVER_NAME "\n");
2622 #endif
2623
2624         return pci_module_init (&rtl8139_pci_driver);
2625 }
2626
2627
2628 static void __exit rtl8139_cleanup_module (void)
2629 {
2630         pci_unregister_driver (&rtl8139_pci_driver);
2631 }
2632
2633
2634 module_init(rtl8139_init_module);
2635 module_exit(rtl8139_cleanup_module);