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