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

Archive Download this file



interactive