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