devices/8139too-3.4-ethercat.c
changeset 2589 2b9c78543663
equal deleted inserted replaced
2415:af21f0bdc7c9 2589:2b9c78543663
       
     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) {
       
  1186 		i = ecdev_open(tp->ecdev);
       
  1187 		if (i) {
       
  1188 			ecdev_withdraw(tp->ecdev);
       
  1189 			goto err_out;
       
  1190 		}
       
  1191 	}
       
  1192 
       
  1193 	return 0;
       
  1194 
       
  1195 err_out:
       
  1196 	__rtl8139_cleanup_dev (dev);
       
  1197 	pci_disable_device (pdev);
       
  1198 	return i;
       
  1199 }
       
  1200 
       
  1201 
       
  1202 static void __devexit rtl8139_remove_one (struct pci_dev *pdev)
       
  1203 {
       
  1204 	struct net_device *dev = pci_get_drvdata (pdev);
       
  1205 	struct rtl8139_private *tp = netdev_priv(dev);
       
  1206 
       
  1207 	assert (dev != NULL);
       
  1208 
       
  1209 	if (tp->ecdev) {
       
  1210 		ecdev_close(tp->ecdev);
       
  1211 		ecdev_withdraw(tp->ecdev);
       
  1212 	}
       
  1213 	else {
       
  1214 		cancel_delayed_work_sync(&tp->thread);
       
  1215 
       
  1216 		unregister_netdev (dev);
       
  1217 	}
       
  1218 
       
  1219 	__rtl8139_cleanup_dev (dev);
       
  1220 	pci_disable_device (pdev);
       
  1221 }
       
  1222 
       
  1223 
       
  1224 /* Serial EEPROM section. */
       
  1225 
       
  1226 /*  EEPROM_Ctrl bits. */
       
  1227 #define EE_SHIFT_CLK	0x04	/* EEPROM shift clock. */
       
  1228 #define EE_CS			0x08	/* EEPROM chip select. */
       
  1229 #define EE_DATA_WRITE	0x02	/* EEPROM chip data in. */
       
  1230 #define EE_WRITE_0		0x00
       
  1231 #define EE_WRITE_1		0x02
       
  1232 #define EE_DATA_READ	0x01	/* EEPROM chip data out. */
       
  1233 #define EE_ENB			(0x80 | EE_CS)
       
  1234 
       
  1235 /* Delay between EEPROM clock transitions.
       
  1236    No extra delay is needed with 33Mhz PCI, but 66Mhz may change this.
       
  1237  */
       
  1238 
       
  1239 #define eeprom_delay()	(void)RTL_R8(Cfg9346)
       
  1240 
       
  1241 /* The EEPROM commands include the alway-set leading bit. */
       
  1242 #define EE_WRITE_CMD	(5)
       
  1243 #define EE_READ_CMD		(6)
       
  1244 #define EE_ERASE_CMD	(7)
       
  1245 
       
  1246 static int __devinit read_eeprom (void __iomem *ioaddr, int location, int addr_len)
       
  1247 {
       
  1248 	int i;
       
  1249 	unsigned retval = 0;
       
  1250 	int read_cmd = location | (EE_READ_CMD << addr_len);
       
  1251 
       
  1252 	RTL_W8 (Cfg9346, EE_ENB & ~EE_CS);
       
  1253 	RTL_W8 (Cfg9346, EE_ENB);
       
  1254 	eeprom_delay ();
       
  1255 
       
  1256 	/* Shift the read command bits out. */
       
  1257 	for (i = 4 + addr_len; i >= 0; i--) {
       
  1258 		int dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
       
  1259 		RTL_W8 (Cfg9346, EE_ENB | dataval);
       
  1260 		eeprom_delay ();
       
  1261 		RTL_W8 (Cfg9346, EE_ENB | dataval | EE_SHIFT_CLK);
       
  1262 		eeprom_delay ();
       
  1263 	}
       
  1264 	RTL_W8 (Cfg9346, EE_ENB);
       
  1265 	eeprom_delay ();
       
  1266 
       
  1267 	for (i = 16; i > 0; i--) {
       
  1268 		RTL_W8 (Cfg9346, EE_ENB | EE_SHIFT_CLK);
       
  1269 		eeprom_delay ();
       
  1270 		retval =
       
  1271 		    (retval << 1) | ((RTL_R8 (Cfg9346) & EE_DATA_READ) ? 1 :
       
  1272 				     0);
       
  1273 		RTL_W8 (Cfg9346, EE_ENB);
       
  1274 		eeprom_delay ();
       
  1275 	}
       
  1276 
       
  1277 	/* Terminate the EEPROM access. */
       
  1278 	RTL_W8 (Cfg9346, ~EE_CS);
       
  1279 	eeprom_delay ();
       
  1280 
       
  1281 	return retval;
       
  1282 }
       
  1283 
       
  1284 /* MII serial management: mostly bogus for now. */
       
  1285 /* Read and write the MII management registers using software-generated
       
  1286    serial MDIO protocol.
       
  1287    The maximum data clock rate is 2.5 Mhz.  The minimum timing is usually
       
  1288    met by back-to-back PCI I/O cycles, but we insert a delay to avoid
       
  1289    "overclocking" issues. */
       
  1290 #define MDIO_DIR		0x80
       
  1291 #define MDIO_DATA_OUT	0x04
       
  1292 #define MDIO_DATA_IN	0x02
       
  1293 #define MDIO_CLK		0x01
       
  1294 #define MDIO_WRITE0 (MDIO_DIR)
       
  1295 #define MDIO_WRITE1 (MDIO_DIR | MDIO_DATA_OUT)
       
  1296 
       
  1297 #define mdio_delay()	RTL_R8(Config4)
       
  1298 
       
  1299 
       
  1300 static const char mii_2_8139_map[8] = {
       
  1301 	BasicModeCtrl,
       
  1302 	BasicModeStatus,
       
  1303 	0,
       
  1304 	0,
       
  1305 	NWayAdvert,
       
  1306 	NWayLPAR,
       
  1307 	NWayExpansion,
       
  1308 	0
       
  1309 };
       
  1310 
       
  1311 
       
  1312 #ifdef CONFIG_8139TOO_8129
       
  1313 /* Syncronize the MII management interface by shifting 32 one bits out. */
       
  1314 static void mdio_sync (void __iomem *ioaddr)
       
  1315 {
       
  1316 	int i;
       
  1317 
       
  1318 	for (i = 32; i >= 0; i--) {
       
  1319 		RTL_W8 (Config4, MDIO_WRITE1);
       
  1320 		mdio_delay ();
       
  1321 		RTL_W8 (Config4, MDIO_WRITE1 | MDIO_CLK);
       
  1322 		mdio_delay ();
       
  1323 	}
       
  1324 }
       
  1325 #endif
       
  1326 
       
  1327 static int mdio_read (struct net_device *dev, int phy_id, int location)
       
  1328 {
       
  1329 	struct rtl8139_private *tp = netdev_priv(dev);
       
  1330 	int retval = 0;
       
  1331 #ifdef CONFIG_8139TOO_8129
       
  1332 	void __iomem *ioaddr = tp->mmio_addr;
       
  1333 	int mii_cmd = (0xf6 << 10) | (phy_id << 5) | location;
       
  1334 	int i;
       
  1335 #endif
       
  1336 
       
  1337 	if (phy_id > 31) {	/* Really a 8139.  Use internal registers. */
       
  1338 		void __iomem *ioaddr = tp->mmio_addr;
       
  1339 		return location < 8 && mii_2_8139_map[location] ?
       
  1340 		    RTL_R16 (mii_2_8139_map[location]) : 0;
       
  1341 	}
       
  1342 
       
  1343 #ifdef CONFIG_8139TOO_8129
       
  1344 	mdio_sync (ioaddr);
       
  1345 	/* Shift the read command bits out. */
       
  1346 	for (i = 15; i >= 0; i--) {
       
  1347 		int dataval = (mii_cmd & (1 << i)) ? MDIO_DATA_OUT : 0;
       
  1348 
       
  1349 		RTL_W8 (Config4, MDIO_DIR | dataval);
       
  1350 		mdio_delay ();
       
  1351 		RTL_W8 (Config4, MDIO_DIR | dataval | MDIO_CLK);
       
  1352 		mdio_delay ();
       
  1353 	}
       
  1354 
       
  1355 	/* Read the two transition, 16 data, and wire-idle bits. */
       
  1356 	for (i = 19; i > 0; i--) {
       
  1357 		RTL_W8 (Config4, 0);
       
  1358 		mdio_delay ();
       
  1359 		retval = (retval << 1) | ((RTL_R8 (Config4) & MDIO_DATA_IN) ? 1 : 0);
       
  1360 		RTL_W8 (Config4, MDIO_CLK);
       
  1361 		mdio_delay ();
       
  1362 	}
       
  1363 #endif
       
  1364 
       
  1365 	return (retval >> 1) & 0xffff;
       
  1366 }
       
  1367 
       
  1368 
       
  1369 static void mdio_write (struct net_device *dev, int phy_id, int location,
       
  1370 			int value)
       
  1371 {
       
  1372 	struct rtl8139_private *tp = netdev_priv(dev);
       
  1373 #ifdef CONFIG_8139TOO_8129
       
  1374 	void __iomem *ioaddr = tp->mmio_addr;
       
  1375 	int mii_cmd = (0x5002 << 16) | (phy_id << 23) | (location << 18) | value;
       
  1376 	int i;
       
  1377 #endif
       
  1378 
       
  1379 	if (phy_id > 31) {	/* Really a 8139.  Use internal registers. */
       
  1380 		void __iomem *ioaddr = tp->mmio_addr;
       
  1381 		if (location == 0) {
       
  1382 			RTL_W8 (Cfg9346, Cfg9346_Unlock);
       
  1383 			RTL_W16 (BasicModeCtrl, value);
       
  1384 			RTL_W8 (Cfg9346, Cfg9346_Lock);
       
  1385 		} else if (location < 8 && mii_2_8139_map[location])
       
  1386 			RTL_W16 (mii_2_8139_map[location], value);
       
  1387 		return;
       
  1388 	}
       
  1389 
       
  1390 #ifdef CONFIG_8139TOO_8129
       
  1391 	mdio_sync (ioaddr);
       
  1392 
       
  1393 	/* Shift the command bits out. */
       
  1394 	for (i = 31; i >= 0; i--) {
       
  1395 		int dataval =
       
  1396 		    (mii_cmd & (1 << i)) ? MDIO_WRITE1 : MDIO_WRITE0;
       
  1397 		RTL_W8 (Config4, dataval);
       
  1398 		mdio_delay ();
       
  1399 		RTL_W8 (Config4, dataval | MDIO_CLK);
       
  1400 		mdio_delay ();
       
  1401 	}
       
  1402 	/* Clear out extra bits. */
       
  1403 	for (i = 2; i > 0; i--) {
       
  1404 		RTL_W8 (Config4, 0);
       
  1405 		mdio_delay ();
       
  1406 		RTL_W8 (Config4, MDIO_CLK);
       
  1407 		mdio_delay ();
       
  1408 	}
       
  1409 #endif
       
  1410 }
       
  1411 
       
  1412 
       
  1413 static int rtl8139_open (struct net_device *dev)
       
  1414 {
       
  1415 	struct rtl8139_private *tp = netdev_priv(dev);
       
  1416 	int retval;
       
  1417 	void __iomem *ioaddr = tp->mmio_addr;
       
  1418 
       
  1419 	if (!tp->ecdev) {
       
  1420 		retval = request_irq(dev->irq, rtl8139_interrupt,
       
  1421 			IRQF_SHARED, dev->name, dev);
       
  1422 		if (retval)
       
  1423 			return retval;
       
  1424 	}
       
  1425 
       
  1426 	tp->tx_bufs = dma_alloc_coherent(&tp->pci_dev->dev, TX_BUF_TOT_LEN,
       
  1427 					   &tp->tx_bufs_dma, GFP_KERNEL);
       
  1428 	tp->rx_ring = dma_alloc_coherent(&tp->pci_dev->dev, RX_BUF_TOT_LEN,
       
  1429 					   &tp->rx_ring_dma, GFP_KERNEL);
       
  1430 	if (tp->tx_bufs == NULL || tp->rx_ring == NULL) {
       
  1431 		if (!tp->ecdev) {
       
  1432 			free_irq(dev->irq, dev);
       
  1433 		}
       
  1434 
       
  1435 		if (tp->tx_bufs)
       
  1436 			dma_free_coherent(&tp->pci_dev->dev, TX_BUF_TOT_LEN,
       
  1437 					    tp->tx_bufs, tp->tx_bufs_dma);
       
  1438 		if (tp->rx_ring)
       
  1439 			dma_free_coherent(&tp->pci_dev->dev, RX_BUF_TOT_LEN,
       
  1440 					    tp->rx_ring, tp->rx_ring_dma);
       
  1441 
       
  1442 		return -ENOMEM;
       
  1443 
       
  1444 	}
       
  1445 
       
  1446 	napi_enable(&tp->napi);
       
  1447 
       
  1448 	tp->mii.full_duplex = tp->mii.force_media;
       
  1449 	tp->tx_flag = (TX_FIFO_THRESH << 11) & 0x003f0000;
       
  1450 
       
  1451 	rtl8139_init_ring (dev);
       
  1452 	rtl8139_hw_start (dev);
       
  1453 	if (!tp->ecdev) {
       
  1454 		netif_start_queue (dev);
       
  1455 	}
       
  1456 
       
  1457 	netif_dbg(tp, ifup, dev,
       
  1458 		  "%s() ioaddr %#llx IRQ %d GP Pins %02x %s-duplex\n",
       
  1459 		  __func__,
       
  1460 		  (unsigned long long)pci_resource_start (tp->pci_dev, 1),
       
  1461 		  dev->irq, RTL_R8 (MediaStatus),
       
  1462 		  tp->mii.full_duplex ? "full" : "half");
       
  1463 
       
  1464 	if (!tp->ecdev) {
       
  1465 		rtl8139_start_thread(tp);
       
  1466 	}
       
  1467 
       
  1468 	return 0;
       
  1469 }
       
  1470 
       
  1471 
       
  1472 static void rtl_check_media (struct net_device *dev, unsigned int init_media)
       
  1473 {
       
  1474 	struct rtl8139_private *tp = netdev_priv(dev);
       
  1475 
       
  1476 	if (tp->ecdev) {
       
  1477 		void __iomem *ioaddr = tp->mmio_addr;
       
  1478 		u16 state = RTL_R16(BasicModeStatus) & BMSR_LSTATUS;
       
  1479 		ecdev_set_link(tp->ecdev, state ? 1 : 0);
       
  1480 	}
       
  1481 	else {
       
  1482 		if (tp->phys[0] >= 0) {
       
  1483 			mii_check_media(&tp->mii, netif_msg_link(tp), init_media);
       
  1484 		}
       
  1485 	}
       
  1486 }
       
  1487 
       
  1488 /* Start the hardware at open or resume. */
       
  1489 static void rtl8139_hw_start (struct net_device *dev)
       
  1490 {
       
  1491 	struct rtl8139_private *tp = netdev_priv(dev);
       
  1492 	void __iomem *ioaddr = tp->mmio_addr;
       
  1493 	u32 i;
       
  1494 	u8 tmp;
       
  1495 
       
  1496 	/* Bring old chips out of low-power mode. */
       
  1497 	if (rtl_chip_info[tp->chipset].flags & HasHltClk)
       
  1498 		RTL_W8 (HltClk, 'R');
       
  1499 
       
  1500 	rtl8139_chip_reset (ioaddr);
       
  1501 
       
  1502 	/* unlock Config[01234] and BMCR register writes */
       
  1503 	RTL_W8_F (Cfg9346, Cfg9346_Unlock);
       
  1504 	/* Restore our idea of the MAC address. */
       
  1505 	RTL_W32_F (MAC0 + 0, le32_to_cpu (*(__le32 *) (dev->dev_addr + 0)));
       
  1506 	RTL_W32_F (MAC0 + 4, le16_to_cpu (*(__le16 *) (dev->dev_addr + 4)));
       
  1507 
       
  1508 	tp->cur_rx = 0;
       
  1509 
       
  1510 	/* init Rx ring buffer DMA address */
       
  1511 	RTL_W32_F (RxBuf, tp->rx_ring_dma);
       
  1512 
       
  1513 	/* Must enable Tx/Rx before setting transfer thresholds! */
       
  1514 	RTL_W8 (ChipCmd, CmdRxEnb | CmdTxEnb);
       
  1515 
       
  1516 	tp->rx_config = rtl8139_rx_config | AcceptBroadcast | AcceptMyPhys;
       
  1517 	RTL_W32 (RxConfig, tp->rx_config);
       
  1518 	RTL_W32 (TxConfig, rtl8139_tx_config);
       
  1519 
       
  1520 	rtl_check_media (dev, 1);
       
  1521 
       
  1522 	if (tp->chipset >= CH_8139B) {
       
  1523 		/* Disable magic packet scanning, which is enabled
       
  1524 		 * when PM is enabled in Config1.  It can be reenabled
       
  1525 		 * via ETHTOOL_SWOL if desired.  */
       
  1526 		RTL_W8 (Config3, RTL_R8 (Config3) & ~Cfg3_Magic);
       
  1527 	}
       
  1528 
       
  1529 	netdev_dbg(dev, "init buffer addresses\n");
       
  1530 
       
  1531 	/* Lock Config[01234] and BMCR register writes */
       
  1532 	RTL_W8 (Cfg9346, Cfg9346_Lock);
       
  1533 
       
  1534 	/* init Tx buffer DMA addresses */
       
  1535 	for (i = 0; i < NUM_TX_DESC; i++)
       
  1536 		RTL_W32_F (TxAddr0 + (i * 4), tp->tx_bufs_dma + (tp->tx_buf[i] - tp->tx_bufs));
       
  1537 
       
  1538 	RTL_W32 (RxMissed, 0);
       
  1539 
       
  1540 	rtl8139_set_rx_mode (dev);
       
  1541 
       
  1542 	/* no early-rx interrupts */
       
  1543 	RTL_W16 (MultiIntr, RTL_R16 (MultiIntr) & MultiIntrClear);
       
  1544 
       
  1545 	/* make sure RxTx has started */
       
  1546 	tmp = RTL_R8 (ChipCmd);
       
  1547 	if ((!(tmp & CmdRxEnb)) || (!(tmp & CmdTxEnb)))
       
  1548 		RTL_W8 (ChipCmd, CmdRxEnb | CmdTxEnb);
       
  1549 
       
  1550 	if (!tp->ecdev) {
       
  1551 		/* Enable all known interrupts by setting the interrupt mask. */
       
  1552 		RTL_W16 (IntrMask, rtl8139_intr_mask);
       
  1553 	}
       
  1554 }
       
  1555 
       
  1556 
       
  1557 /* Initialize the Rx and Tx rings, along with various 'dev' bits. */
       
  1558 static void rtl8139_init_ring (struct net_device *dev)
       
  1559 {
       
  1560 	struct rtl8139_private *tp = netdev_priv(dev);
       
  1561 	int i;
       
  1562 
       
  1563 	tp->cur_rx = 0;
       
  1564 	tp->cur_tx = 0;
       
  1565 	tp->dirty_tx = 0;
       
  1566 
       
  1567 	for (i = 0; i < NUM_TX_DESC; i++)
       
  1568 		tp->tx_buf[i] = &tp->tx_bufs[i * TX_BUF_SIZE];
       
  1569 }
       
  1570 
       
  1571 
       
  1572 /* This must be global for CONFIG_8139TOO_TUNE_TWISTER case */
       
  1573 static int next_tick = 3 * HZ;
       
  1574 
       
  1575 #ifndef CONFIG_8139TOO_TUNE_TWISTER
       
  1576 static inline void rtl8139_tune_twister (struct net_device *dev,
       
  1577 				  struct rtl8139_private *tp) {}
       
  1578 #else
       
  1579 enum TwisterParamVals {
       
  1580 	PARA78_default	= 0x78fa8388,
       
  1581 	PARA7c_default	= 0xcb38de43,	/* param[0][3] */
       
  1582 	PARA7c_xxx	= 0xcb38de43,
       
  1583 };
       
  1584 
       
  1585 static const unsigned long param[4][4] = {
       
  1586 	{0xcb39de43, 0xcb39ce43, 0xfb38de03, 0xcb38de43},
       
  1587 	{0xcb39de43, 0xcb39ce43, 0xcb39ce83, 0xcb39ce83},
       
  1588 	{0xcb39de43, 0xcb39ce43, 0xcb39ce83, 0xcb39ce83},
       
  1589 	{0xbb39de43, 0xbb39ce43, 0xbb39ce83, 0xbb39ce83}
       
  1590 };
       
  1591 
       
  1592 static void rtl8139_tune_twister (struct net_device *dev,
       
  1593 				  struct rtl8139_private *tp)
       
  1594 {
       
  1595 	int linkcase;
       
  1596 	void __iomem *ioaddr = tp->mmio_addr;
       
  1597 
       
  1598 	/* This is a complicated state machine to configure the "twister" for
       
  1599 	   impedance/echos based on the cable length.
       
  1600 	   All of this is magic and undocumented.
       
  1601 	 */
       
  1602 	switch (tp->twistie) {
       
  1603 	case 1:
       
  1604 		if (RTL_R16 (CSCR) & CSCR_LinkOKBit) {
       
  1605 			/* We have link beat, let us tune the twister. */
       
  1606 			RTL_W16 (CSCR, CSCR_LinkDownOffCmd);
       
  1607 			tp->twistie = 2;	/* Change to state 2. */
       
  1608 			next_tick = HZ / 10;
       
  1609 		} else {
       
  1610 			/* Just put in some reasonable defaults for when beat returns. */
       
  1611 			RTL_W16 (CSCR, CSCR_LinkDownCmd);
       
  1612 			RTL_W32 (FIFOTMS, 0x20);	/* Turn on cable test mode. */
       
  1613 			RTL_W32 (PARA78, PARA78_default);
       
  1614 			RTL_W32 (PARA7c, PARA7c_default);
       
  1615 			tp->twistie = 0;	/* Bail from future actions. */
       
  1616 		}
       
  1617 		break;
       
  1618 	case 2:
       
  1619 		/* Read how long it took to hear the echo. */
       
  1620 		linkcase = RTL_R16 (CSCR) & CSCR_LinkStatusBits;
       
  1621 		if (linkcase == 0x7000)
       
  1622 			tp->twist_row = 3;
       
  1623 		else if (linkcase == 0x3000)
       
  1624 			tp->twist_row = 2;
       
  1625 		else if (linkcase == 0x1000)
       
  1626 			tp->twist_row = 1;
       
  1627 		else
       
  1628 			tp->twist_row = 0;
       
  1629 		tp->twist_col = 0;
       
  1630 		tp->twistie = 3;	/* Change to state 2. */
       
  1631 		next_tick = HZ / 10;
       
  1632 		break;
       
  1633 	case 3:
       
  1634 		/* Put out four tuning parameters, one per 100msec. */
       
  1635 		if (tp->twist_col == 0)
       
  1636 			RTL_W16 (FIFOTMS, 0);
       
  1637 		RTL_W32 (PARA7c, param[(int) tp->twist_row]
       
  1638 			 [(int) tp->twist_col]);
       
  1639 		next_tick = HZ / 10;
       
  1640 		if (++tp->twist_col >= 4) {
       
  1641 			/* For short cables we are done.
       
  1642 			   For long cables (row == 3) check for mistune. */
       
  1643 			tp->twistie =
       
  1644 			    (tp->twist_row == 3) ? 4 : 0;
       
  1645 		}
       
  1646 		break;
       
  1647 	case 4:
       
  1648 		/* Special case for long cables: check for mistune. */
       
  1649 		if ((RTL_R16 (CSCR) &
       
  1650 		     CSCR_LinkStatusBits) == 0x7000) {
       
  1651 			tp->twistie = 0;
       
  1652 			break;
       
  1653 		} else {
       
  1654 			RTL_W32 (PARA7c, 0xfb38de03);
       
  1655 			tp->twistie = 5;
       
  1656 			next_tick = HZ / 10;
       
  1657 		}
       
  1658 		break;
       
  1659 	case 5:
       
  1660 		/* Retune for shorter cable (column 2). */
       
  1661 		RTL_W32 (FIFOTMS, 0x20);
       
  1662 		RTL_W32 (PARA78, PARA78_default);
       
  1663 		RTL_W32 (PARA7c, PARA7c_default);
       
  1664 		RTL_W32 (FIFOTMS, 0x00);
       
  1665 		tp->twist_row = 2;
       
  1666 		tp->twist_col = 0;
       
  1667 		tp->twistie = 3;
       
  1668 		next_tick = HZ / 10;
       
  1669 		break;
       
  1670 
       
  1671 	default:
       
  1672 		/* do nothing */
       
  1673 		break;
       
  1674 	}
       
  1675 }
       
  1676 #endif /* CONFIG_8139TOO_TUNE_TWISTER */
       
  1677 
       
  1678 static inline void rtl8139_thread_iter (struct net_device *dev,
       
  1679 				 struct rtl8139_private *tp,
       
  1680 				 void __iomem *ioaddr)
       
  1681 {
       
  1682 	int mii_lpa;
       
  1683 
       
  1684 	mii_lpa = mdio_read (dev, tp->phys[0], MII_LPA);
       
  1685 
       
  1686 	if (!tp->mii.force_media && mii_lpa != 0xffff) {
       
  1687 		int duplex = ((mii_lpa & LPA_100FULL) ||
       
  1688 			      (mii_lpa & 0x01C0) == 0x0040);
       
  1689 		if (tp->mii.full_duplex != duplex) {
       
  1690 			tp->mii.full_duplex = duplex;
       
  1691 
       
  1692 			if (mii_lpa) {
       
  1693 				netdev_info(dev, "Setting %s-duplex based on MII #%d link partner ability of %04x\n",
       
  1694 					    tp->mii.full_duplex ? "full" : "half",
       
  1695 					    tp->phys[0], mii_lpa);
       
  1696 			} else {
       
  1697 				netdev_info(dev, "media is unconnected, link down, or incompatible connection\n");
       
  1698 			}
       
  1699 #if 0
       
  1700 			RTL_W8 (Cfg9346, Cfg9346_Unlock);
       
  1701 			RTL_W8 (Config1, tp->mii.full_duplex ? 0x60 : 0x20);
       
  1702 			RTL_W8 (Cfg9346, Cfg9346_Lock);
       
  1703 #endif
       
  1704 		}
       
  1705 	}
       
  1706 
       
  1707 	next_tick = HZ * 60;
       
  1708 
       
  1709 	rtl8139_tune_twister (dev, tp);
       
  1710 
       
  1711 	netdev_dbg(dev, "Media selection tick, Link partner %04x\n",
       
  1712 		   RTL_R16(NWayLPAR));
       
  1713 	netdev_dbg(dev, "Other registers are IntMask %04x IntStatus %04x\n",
       
  1714 		   RTL_R16(IntrMask), RTL_R16(IntrStatus));
       
  1715 	netdev_dbg(dev, "Chip config %02x %02x\n",
       
  1716 		   RTL_R8(Config0), RTL_R8(Config1));
       
  1717 }
       
  1718 
       
  1719 static void rtl8139_thread (struct work_struct *work)
       
  1720 {
       
  1721 	struct rtl8139_private *tp =
       
  1722 		container_of(work, struct rtl8139_private, thread.work);
       
  1723 	struct net_device *dev = tp->mii.dev;
       
  1724 	unsigned long thr_delay = next_tick;
       
  1725 
       
  1726 	rtnl_lock();
       
  1727 
       
  1728 	if (!netif_running(dev))
       
  1729 		goto out_unlock;
       
  1730 
       
  1731 	if (tp->watchdog_fired) {
       
  1732 		tp->watchdog_fired = 0;
       
  1733 		rtl8139_tx_timeout_task(work);
       
  1734 	} else
       
  1735 		rtl8139_thread_iter(dev, tp, tp->mmio_addr);
       
  1736 
       
  1737 	if (tp->have_thread)
       
  1738 		schedule_delayed_work(&tp->thread, thr_delay);
       
  1739 out_unlock:
       
  1740 	rtnl_unlock ();
       
  1741 }
       
  1742 
       
  1743 static void rtl8139_start_thread(struct rtl8139_private *tp)
       
  1744 {
       
  1745 	tp->twistie = 0;
       
  1746 	if (tp->chipset == CH_8139_K)
       
  1747 		tp->twistie = 1;
       
  1748 	else if (tp->drv_flags & HAS_LNK_CHNG)
       
  1749 		return;
       
  1750 
       
  1751 	tp->have_thread = 1;
       
  1752 	tp->watchdog_fired = 0;
       
  1753 
       
  1754 	schedule_delayed_work(&tp->thread, next_tick);
       
  1755 }
       
  1756 
       
  1757 static inline void rtl8139_tx_clear (struct rtl8139_private *tp)
       
  1758 {
       
  1759 	tp->cur_tx = 0;
       
  1760 	tp->dirty_tx = 0;
       
  1761 
       
  1762 	/* XXX account for unsent Tx packets in tp->stats.tx_dropped */
       
  1763 }
       
  1764 
       
  1765 static void rtl8139_tx_timeout_task (struct work_struct *work)
       
  1766 {
       
  1767 	struct rtl8139_private *tp =
       
  1768 		container_of(work, struct rtl8139_private, thread.work);
       
  1769 	struct net_device *dev = tp->mii.dev;
       
  1770 	void __iomem *ioaddr = tp->mmio_addr;
       
  1771 	int i;
       
  1772 	u8 tmp8;
       
  1773 
       
  1774 	netdev_dbg(dev, "Transmit timeout, status %02x %04x %04x media %02x\n",
       
  1775 		   RTL_R8(ChipCmd), RTL_R16(IntrStatus),
       
  1776 		   RTL_R16(IntrMask), RTL_R8(MediaStatus));
       
  1777 	/* Emit info to figure out what went wrong. */
       
  1778 	netdev_dbg(dev, "Tx queue start entry %ld  dirty entry %ld\n",
       
  1779 		   tp->cur_tx, tp->dirty_tx);
       
  1780 	for (i = 0; i < NUM_TX_DESC; i++)
       
  1781 		netdev_dbg(dev, "Tx descriptor %d is %08x%s\n",
       
  1782 			   i, RTL_R32(TxStatus0 + (i * 4)),
       
  1783 			   i == tp->dirty_tx % NUM_TX_DESC ?
       
  1784 			   " (queue head)" : "");
       
  1785 
       
  1786 	tp->xstats.tx_timeouts++;
       
  1787 
       
  1788 	/* disable Tx ASAP, if not already */
       
  1789 	tmp8 = RTL_R8 (ChipCmd);
       
  1790 	if (tmp8 & CmdTxEnb)
       
  1791 		RTL_W8 (ChipCmd, CmdRxEnb);
       
  1792 
       
  1793 	if (tp->ecdev) {
       
  1794 		rtl8139_tx_clear (tp);
       
  1795 		rtl8139_hw_start (dev);
       
  1796 	}
       
  1797 	else {
       
  1798 	  spin_lock_bh(&tp->rx_lock);
       
  1799 	  /* Disable interrupts by clearing the interrupt mask. */
       
  1800 	  RTL_W16 (IntrMask, 0x0000);
       
  1801 
       
  1802 	  /* Stop a shared interrupt from scavenging while we are. */
       
  1803 	  spin_lock_irq(&tp->lock);
       
  1804 	  rtl8139_tx_clear (tp);
       
  1805 	  spin_unlock_irq(&tp->lock);
       
  1806 
       
  1807 	  /* ...and finally, reset everything */
       
  1808 	  if (netif_running(dev)) {
       
  1809 	    rtl8139_hw_start (dev);
       
  1810 	    netif_wake_queue (dev);
       
  1811 	  }
       
  1812 	  spin_unlock_bh(&tp->rx_lock);
       
  1813 	}
       
  1814 }
       
  1815 
       
  1816 static void rtl8139_tx_timeout (struct net_device *dev)
       
  1817 {
       
  1818 	struct rtl8139_private *tp = netdev_priv(dev);
       
  1819 
       
  1820 	tp->watchdog_fired = 1;
       
  1821 	if (!tp->ecdev && !tp->have_thread) {
       
  1822 		INIT_DELAYED_WORK(&tp->thread, rtl8139_thread);
       
  1823 		schedule_delayed_work(&tp->thread, next_tick);
       
  1824 	}
       
  1825 }
       
  1826 
       
  1827 static netdev_tx_t rtl8139_start_xmit (struct sk_buff *skb,
       
  1828 					     struct net_device *dev)
       
  1829 {
       
  1830 	struct rtl8139_private *tp = netdev_priv(dev);
       
  1831 	void __iomem *ioaddr = tp->mmio_addr;
       
  1832 	unsigned int entry;
       
  1833 	unsigned int len = skb->len;
       
  1834 	unsigned long flags = 0;
       
  1835 
       
  1836 	/* Calculate the next Tx descriptor entry. */
       
  1837 	entry = tp->cur_tx % NUM_TX_DESC;
       
  1838 
       
  1839 	/* Note: the chip doesn't have auto-pad! */
       
  1840 	if (likely(len < TX_BUF_SIZE)) {
       
  1841 		if (len < ETH_ZLEN)
       
  1842 			memset(tp->tx_buf[entry], 0, ETH_ZLEN);
       
  1843 		skb_copy_and_csum_dev(skb, tp->tx_buf[entry]);
       
  1844 		if (!tp->ecdev) {
       
  1845 			dev_kfree_skb(skb);
       
  1846 		}
       
  1847 	} else {
       
  1848 		if (!tp->ecdev) {
       
  1849 			dev_kfree_skb(skb);
       
  1850 		}
       
  1851 		dev->stats.tx_dropped++;
       
  1852 		return NETDEV_TX_OK;
       
  1853 	}
       
  1854 
       
  1855 	if (!tp->ecdev) {
       
  1856 		spin_lock_irqsave(&tp->lock, flags);
       
  1857 	}
       
  1858 	/*
       
  1859 	 * Writing to TxStatus triggers a DMA transfer of the data
       
  1860 	 * copied to tp->tx_buf[entry] above. Use a memory barrier
       
  1861 	 * to make sure that the device sees the updated data.
       
  1862 	 */
       
  1863 	wmb();
       
  1864 	RTL_W32_F (TxStatus0 + (entry * sizeof (u32)),
       
  1865 		   tp->tx_flag | max(len, (unsigned int)ETH_ZLEN));
       
  1866 
       
  1867 	tp->cur_tx++;
       
  1868 
       
  1869 	if (!tp->ecdev) {
       
  1870 		if ((tp->cur_tx - NUM_TX_DESC) == tp->dirty_tx)
       
  1871 			netif_stop_queue (dev);
       
  1872 		spin_unlock_irqrestore(&tp->lock, flags);
       
  1873 	}
       
  1874 
       
  1875 	netif_dbg(tp, tx_queued, dev, "Queued Tx packet size %u to slot %d\n",
       
  1876 		  len, entry);
       
  1877 
       
  1878 	return NETDEV_TX_OK;
       
  1879 }
       
  1880 
       
  1881 
       
  1882 static void rtl8139_tx_interrupt (struct net_device *dev,
       
  1883 				  struct rtl8139_private *tp,
       
  1884 				  void __iomem *ioaddr)
       
  1885 {
       
  1886 	unsigned long dirty_tx, tx_left;
       
  1887 
       
  1888 	assert (dev != NULL);
       
  1889 	assert (ioaddr != NULL);
       
  1890 
       
  1891 	dirty_tx = tp->dirty_tx;
       
  1892 	tx_left = tp->cur_tx - dirty_tx;
       
  1893 	while (tx_left > 0) {
       
  1894 		int entry = dirty_tx % NUM_TX_DESC;
       
  1895 		int txstatus;
       
  1896 
       
  1897 		txstatus = RTL_R32 (TxStatus0 + (entry * sizeof (u32)));
       
  1898 
       
  1899 		if (!(txstatus & (TxStatOK | TxUnderrun | TxAborted)))
       
  1900 			break;	/* It still hasn't been Txed */
       
  1901 
       
  1902 		/* Note: TxCarrierLost is always asserted at 100mbps. */
       
  1903 		if (txstatus & (TxOutOfWindow | TxAborted)) {
       
  1904 			/* There was an major error, log it. */
       
  1905 			netif_dbg(tp, tx_err, dev, "Transmit error, Tx status %08x\n",
       
  1906 				  txstatus);
       
  1907 			dev->stats.tx_errors++;
       
  1908 			if (txstatus & TxAborted) {
       
  1909 				dev->stats.tx_aborted_errors++;
       
  1910 				RTL_W32 (TxConfig, TxClearAbt);
       
  1911 				RTL_W16 (IntrStatus, TxErr);
       
  1912 				wmb();
       
  1913 			}
       
  1914 			if (txstatus & TxCarrierLost)
       
  1915 				dev->stats.tx_carrier_errors++;
       
  1916 			if (txstatus & TxOutOfWindow)
       
  1917 				dev->stats.tx_window_errors++;
       
  1918 		} else {
       
  1919 			if (txstatus & TxUnderrun) {
       
  1920 				/* Add 64 to the Tx FIFO threshold. */
       
  1921 				if (tp->tx_flag < 0x00300000)
       
  1922 					tp->tx_flag += 0x00020000;
       
  1923 				dev->stats.tx_fifo_errors++;
       
  1924 			}
       
  1925 			dev->stats.collisions += (txstatus >> 24) & 15;
       
  1926 			u64_stats_update_begin(&tp->tx_stats.syncp);
       
  1927 			tp->tx_stats.packets++;
       
  1928 			tp->tx_stats.bytes += txstatus & 0x7ff;
       
  1929 			u64_stats_update_end(&tp->tx_stats.syncp);
       
  1930 		}
       
  1931 
       
  1932 		dirty_tx++;
       
  1933 		tx_left--;
       
  1934 	}
       
  1935 
       
  1936 #ifndef RTL8139_NDEBUG
       
  1937 	if (tp->cur_tx - dirty_tx > NUM_TX_DESC) {
       
  1938 		pr_err("%s: Out-of-sync dirty pointer, %ld vs. %ld.\n",
       
  1939 		        dev->name, dirty_tx, tp->cur_tx);
       
  1940 		dirty_tx += NUM_TX_DESC;
       
  1941 	}
       
  1942 #endif /* RTL8139_NDEBUG */
       
  1943 
       
  1944 	/* only wake the queue if we did work, and the queue is stopped */
       
  1945 	if (tp->dirty_tx != dirty_tx) {
       
  1946 		tp->dirty_tx = dirty_tx;
       
  1947 		mb();
       
  1948 		if (!tp->ecdev) {
       
  1949 			netif_wake_queue (dev);
       
  1950 		}
       
  1951 	}
       
  1952 }
       
  1953 
       
  1954 
       
  1955 /* TODO: clean this up!  Rx reset need not be this intensive */
       
  1956 static void rtl8139_rx_err (u32 rx_status, struct net_device *dev,
       
  1957 			    struct rtl8139_private *tp, void __iomem *ioaddr)
       
  1958 {
       
  1959 	u8 tmp8;
       
  1960 #ifdef CONFIG_8139_OLD_RX_RESET
       
  1961 	int tmp_work;
       
  1962 #endif
       
  1963 
       
  1964 	if (netif_msg_rx_err (tp))
       
  1965 		pr_debug("%s: Ethernet frame had errors, status %8.8x.\n",
       
  1966 			dev->name, rx_status);
       
  1967 	dev->stats.rx_errors++;
       
  1968 	if (!(rx_status & RxStatusOK)) {
       
  1969 		if (rx_status & RxTooLong) {
       
  1970 			pr_debug("%s: Oversized Ethernet frame, status %4.4x!\n",
       
  1971 			 	dev->name, rx_status);
       
  1972 			/* A.C.: The chip hangs here. */
       
  1973 		}
       
  1974 		if (rx_status & (RxBadSymbol | RxBadAlign))
       
  1975 			dev->stats.rx_frame_errors++;
       
  1976 		if (rx_status & (RxRunt | RxTooLong))
       
  1977 			dev->stats.rx_length_errors++;
       
  1978 		if (rx_status & RxCRCErr)
       
  1979 			dev->stats.rx_crc_errors++;
       
  1980 	} else {
       
  1981 		tp->xstats.rx_lost_in_ring++;
       
  1982 	}
       
  1983 
       
  1984 #ifndef CONFIG_8139_OLD_RX_RESET
       
  1985 	tmp8 = RTL_R8 (ChipCmd);
       
  1986 	RTL_W8 (ChipCmd, tmp8 & ~CmdRxEnb);
       
  1987 	RTL_W8 (ChipCmd, tmp8);
       
  1988 	RTL_W32 (RxConfig, tp->rx_config);
       
  1989 	tp->cur_rx = 0;
       
  1990 #else
       
  1991 	/* Reset the receiver, based on RealTek recommendation. (Bug?) */
       
  1992 
       
  1993 	/* disable receive */
       
  1994 	RTL_W8_F (ChipCmd, CmdTxEnb);
       
  1995 	tmp_work = 200;
       
  1996 	while (--tmp_work > 0) {
       
  1997 		udelay(1);
       
  1998 		tmp8 = RTL_R8 (ChipCmd);
       
  1999 		if (!(tmp8 & CmdRxEnb))
       
  2000 			break;
       
  2001 	}
       
  2002 	if (tmp_work <= 0)
       
  2003 		pr_warning(PFX "rx stop wait too long\n");
       
  2004 	/* restart receive */
       
  2005 	tmp_work = 200;
       
  2006 	while (--tmp_work > 0) {
       
  2007 		RTL_W8_F (ChipCmd, CmdRxEnb | CmdTxEnb);
       
  2008 		udelay(1);
       
  2009 		tmp8 = RTL_R8 (ChipCmd);
       
  2010 		if ((tmp8 & CmdRxEnb) && (tmp8 & CmdTxEnb))
       
  2011 			break;
       
  2012 	}
       
  2013 	if (tmp_work <= 0)
       
  2014 		pr_warning(PFX "tx/rx enable wait too long\n");
       
  2015 
       
  2016 	/* and reinitialize all rx related registers */
       
  2017 	RTL_W8_F (Cfg9346, Cfg9346_Unlock);
       
  2018 	/* Must enable Tx/Rx before setting transfer thresholds! */
       
  2019 	RTL_W8 (ChipCmd, CmdRxEnb | CmdTxEnb);
       
  2020 
       
  2021 	tp->rx_config = rtl8139_rx_config | AcceptBroadcast | AcceptMyPhys;
       
  2022 	RTL_W32 (RxConfig, tp->rx_config);
       
  2023 	tp->cur_rx = 0;
       
  2024 
       
  2025 	pr_debug("init buffer addresses\n");
       
  2026 
       
  2027 	/* Lock Config[01234] and BMCR register writes */
       
  2028 	RTL_W8 (Cfg9346, Cfg9346_Lock);
       
  2029 
       
  2030 	/* init Rx ring buffer DMA address */
       
  2031 	RTL_W32_F (RxBuf, tp->rx_ring_dma);
       
  2032 
       
  2033 	/* A.C.: Reset the multicast list. */
       
  2034 	__set_rx_mode (dev);
       
  2035 #endif
       
  2036 }
       
  2037 
       
  2038 #if RX_BUF_IDX == 3
       
  2039 static inline void wrap_copy(struct sk_buff *skb, const unsigned char *ring,
       
  2040 				 u32 offset, unsigned int size)
       
  2041 {
       
  2042 	u32 left = RX_BUF_LEN - offset;
       
  2043 
       
  2044 	if (size > left) {
       
  2045 		skb_copy_to_linear_data(skb, ring + offset, left);
       
  2046 		skb_copy_to_linear_data_offset(skb, left, ring, size - left);
       
  2047 	} else
       
  2048 		skb_copy_to_linear_data(skb, ring + offset, size);
       
  2049 }
       
  2050 #endif
       
  2051 
       
  2052 static void rtl8139_isr_ack(struct rtl8139_private *tp)
       
  2053 {
       
  2054 	void __iomem *ioaddr = tp->mmio_addr;
       
  2055 	u16 status;
       
  2056 
       
  2057 	status = RTL_R16 (IntrStatus) & RxAckBits;
       
  2058 
       
  2059 	/* Clear out errors and receive interrupts */
       
  2060 	if (likely(status != 0)) {
       
  2061 		if (unlikely(status & (RxFIFOOver | RxOverflow))) {
       
  2062 			tp->dev->stats.rx_errors++;
       
  2063 			if (status & RxFIFOOver)
       
  2064 				tp->dev->stats.rx_fifo_errors++;
       
  2065 		}
       
  2066 		RTL_W16_F (IntrStatus, RxAckBits);
       
  2067 	}
       
  2068 }
       
  2069 
       
  2070 static int rtl8139_rx(struct net_device *dev, struct rtl8139_private *tp,
       
  2071 		      int budget)
       
  2072 {
       
  2073 	void __iomem *ioaddr = tp->mmio_addr;
       
  2074 	int received = 0;
       
  2075 	unsigned char *rx_ring = tp->rx_ring;
       
  2076 	unsigned int cur_rx = tp->cur_rx;
       
  2077 	unsigned int rx_size = 0;
       
  2078 
       
  2079 	pr_debug("%s: In rtl8139_rx(), current %4.4x BufAddr %4.4x,"
       
  2080 		 " free to %4.4x, Cmd %2.2x.\n", dev->name, (u16)cur_rx,
       
  2081 		 RTL_R16 (RxBufAddr),
       
  2082 		 RTL_R16 (RxBufPtr), RTL_R8 (ChipCmd));
       
  2083 
       
  2084 	while ((tp->ecdev || netif_running(dev))
       
  2085 			&& received < budget
       
  2086 			&& (RTL_R8 (ChipCmd) & RxBufEmpty) == 0) {
       
  2087 		u32 ring_offset = cur_rx % RX_BUF_LEN;
       
  2088 		u32 rx_status;
       
  2089 		unsigned int pkt_size;
       
  2090 		struct sk_buff *skb;
       
  2091 
       
  2092 		rmb();
       
  2093 
       
  2094 		/* read size+status of next frame from DMA ring buffer */
       
  2095 		rx_status = le32_to_cpu (*(__le32 *) (rx_ring + ring_offset));
       
  2096 		rx_size = rx_status >> 16;
       
  2097 		if (likely(!(dev->features & NETIF_F_RXFCS)))
       
  2098 			pkt_size = rx_size - 4;
       
  2099 		else
       
  2100 			pkt_size = rx_size;
       
  2101 
       
  2102 		if (!tp->ecdev) {
       
  2103 			if (netif_msg_rx_status(tp))
       
  2104 				pr_debug("%s:  rtl8139_rx() status %4.4x, size %4.4x,"
       
  2105 					" cur %4.4x.\n", dev->name, rx_status,
       
  2106 				 rx_size, cur_rx);
       
  2107 		}
       
  2108 #if RTL8139_DEBUG > 2
       
  2109 		{
       
  2110 			int i;
       
  2111 			pr_debug("%s: Frame contents ", dev->name);
       
  2112 			for (i = 0; i < 70; i++)
       
  2113 				pr_cont(" %2.2x",
       
  2114 					rx_ring[ring_offset + i]);
       
  2115 			pr_cont(".\n");
       
  2116 		}
       
  2117 #endif
       
  2118 
       
  2119 		/* Packet copy from FIFO still in progress.
       
  2120 		 * Theoretically, this should never happen
       
  2121 		 * since EarlyRx is disabled.
       
  2122 		 */
       
  2123 		if (unlikely(rx_size == 0xfff0)) {
       
  2124 			if (!tp->fifo_copy_timeout)
       
  2125 				tp->fifo_copy_timeout = jiffies + 2;
       
  2126 			else if (time_after(jiffies, tp->fifo_copy_timeout)) {
       
  2127 				pr_debug("%s: hung FIFO. Reset.", dev->name);
       
  2128 				rx_size = 0;
       
  2129 				goto no_early_rx;
       
  2130 			}
       
  2131 			if (netif_msg_intr(tp)) {
       
  2132 				pr_debug("%s: fifo copy in progress.",
       
  2133 				       dev->name);
       
  2134 			}
       
  2135 			tp->xstats.early_rx++;
       
  2136 			break;
       
  2137 		}
       
  2138 
       
  2139 no_early_rx:
       
  2140 		tp->fifo_copy_timeout = 0;
       
  2141 
       
  2142 		/* If Rx err or invalid rx_size/rx_status received
       
  2143 		 * (which happens if we get lost in the ring),
       
  2144 		 * Rx process gets reset, so we abort any further
       
  2145 		 * Rx processing.
       
  2146 		 */
       
  2147 		if (unlikely((rx_size > (MAX_ETH_FRAME_SIZE+4)) ||
       
  2148 			     (rx_size < 8) ||
       
  2149 			     (!(rx_status & RxStatusOK)))) {
       
  2150 			if ((dev->features & NETIF_F_RXALL) &&
       
  2151 			    (rx_size <= (MAX_ETH_FRAME_SIZE + 4)) &&
       
  2152 			    (rx_size >= 8) &&
       
  2153 			    (!(rx_status & RxStatusOK))) {
       
  2154 				/* Length is at least mostly OK, but pkt has
       
  2155 				 * error.  I'm hoping we can handle some of these
       
  2156 				 * errors without resetting the chip. --Ben
       
  2157 				 */
       
  2158 				dev->stats.rx_errors++;
       
  2159 				if (rx_status & RxCRCErr) {
       
  2160 					dev->stats.rx_crc_errors++;
       
  2161 					goto keep_pkt;
       
  2162 				}
       
  2163 				if (rx_status & RxRunt) {
       
  2164 					dev->stats.rx_length_errors++;
       
  2165 					goto keep_pkt;
       
  2166 				}
       
  2167 			}
       
  2168 			rtl8139_rx_err (rx_status, dev, tp, ioaddr);
       
  2169 			received = -1;
       
  2170 			goto out;
       
  2171 		}
       
  2172 
       
  2173 keep_pkt:
       
  2174 		if (tp->ecdev) {
       
  2175 			ecdev_receive(tp->ecdev,
       
  2176 					&rx_ring[ring_offset + 4], pkt_size);
       
  2177 					dev->last_rx = jiffies;
       
  2178 					dev->stats.rx_bytes += pkt_size;
       
  2179 					dev->stats.rx_packets++;
       
  2180 		} else {
       
  2181 			/* Malloc up new buffer, compatible with net-2e. */
       
  2182 			/* Omit the four octet CRC from the length. */
       
  2183 
       
  2184 			skb = netdev_alloc_skb_ip_align(dev, pkt_size);
       
  2185 			if (likely(skb)) {
       
  2186 #if RX_BUF_IDX == 3
       
  2187 				wrap_copy(skb, rx_ring, ring_offset+4, pkt_size);
       
  2188 #else
       
  2189 				skb_copy_to_linear_data (skb, &rx_ring[ring_offset + 4],
       
  2190 						pkt_size);
       
  2191 #endif
       
  2192 				skb_put (skb, pkt_size);
       
  2193 
       
  2194 				skb->protocol = eth_type_trans (skb, dev);
       
  2195 
       
  2196 				u64_stats_update_begin(&tp->rx_stats.syncp);
       
  2197 				tp->rx_stats.packets++;
       
  2198 				tp->rx_stats.bytes += pkt_size;
       
  2199 				u64_stats_update_end(&tp->rx_stats.syncp);
       
  2200 
       
  2201 				netif_receive_skb (skb);
       
  2202 			} else {
       
  2203 				if (net_ratelimit())
       
  2204 					netdev_warn(dev, "Memory squeeze, dropping packet\n");
       
  2205 				dev->stats.rx_dropped++;
       
  2206 			}
       
  2207 		}
       
  2208 		received++;
       
  2209 
       
  2210 		cur_rx = (cur_rx + rx_size + 4 + 3) & ~3;
       
  2211 		RTL_W16 (RxBufPtr, (u16) (cur_rx - 16));
       
  2212 
       
  2213 		rtl8139_isr_ack(tp);
       
  2214 	}
       
  2215 
       
  2216 	if (unlikely(!received || rx_size == 0xfff0))
       
  2217 		rtl8139_isr_ack(tp);
       
  2218 
       
  2219 	pr_debug("%s: Done rtl8139_rx(), current %4.4x BufAddr %4.4x,"
       
  2220 		 " free to %4.4x, Cmd %2.2x.\n", dev->name, cur_rx,
       
  2221 		 RTL_R16 (RxBufAddr),
       
  2222 		 RTL_R16 (RxBufPtr), RTL_R8 (ChipCmd));
       
  2223 
       
  2224 	tp->cur_rx = cur_rx;
       
  2225 
       
  2226 	/*
       
  2227 	 * The receive buffer should be mostly empty.
       
  2228 	 * Tell NAPI to reenable the Rx irq.
       
  2229 	 */
       
  2230 	if (tp->fifo_copy_timeout)
       
  2231 		received = budget;
       
  2232 
       
  2233 out:
       
  2234 	return received;
       
  2235 }
       
  2236 
       
  2237 
       
  2238 static void rtl8139_weird_interrupt (struct net_device *dev,
       
  2239 				     struct rtl8139_private *tp,
       
  2240 				     void __iomem *ioaddr,
       
  2241 				     int status, int link_changed)
       
  2242 {
       
  2243 	pr_debug("%s: Abnormal interrupt, status %8.8x.\n",
       
  2244 		 dev->name, status);
       
  2245 
       
  2246 	assert (dev != NULL);
       
  2247 	assert (tp != NULL);
       
  2248 	assert (ioaddr != NULL);
       
  2249 
       
  2250 	/* Update the error count. */
       
  2251 	dev->stats.rx_missed_errors += RTL_R32 (RxMissed);
       
  2252 	RTL_W32 (RxMissed, 0);
       
  2253 
       
  2254 	if ((status & RxUnderrun) && link_changed &&
       
  2255 	    (tp->drv_flags & HAS_LNK_CHNG)) {
       
  2256 		rtl_check_media(dev, 0);
       
  2257 		status &= ~RxUnderrun;
       
  2258 	}
       
  2259 
       
  2260 	if (status & (RxUnderrun | RxErr))
       
  2261 		dev->stats.rx_errors++;
       
  2262 
       
  2263 	if (status & PCSTimeout)
       
  2264 		dev->stats.rx_length_errors++;
       
  2265 	if (status & RxUnderrun)
       
  2266 		dev->stats.rx_fifo_errors++;
       
  2267 	if (status & PCIErr) {
       
  2268 		u16 pci_cmd_status;
       
  2269 		pci_read_config_word (tp->pci_dev, PCI_STATUS, &pci_cmd_status);
       
  2270 		pci_write_config_word (tp->pci_dev, PCI_STATUS, pci_cmd_status);
       
  2271 
       
  2272 		pr_err("%s: PCI Bus error %4.4x.\n",
       
  2273 			dev->name, pci_cmd_status);
       
  2274 	}
       
  2275 }
       
  2276 
       
  2277 static int rtl8139_poll(struct napi_struct *napi, int budget)
       
  2278 {
       
  2279 	struct rtl8139_private *tp = container_of(napi, struct rtl8139_private, napi);
       
  2280 	struct net_device *dev = tp->dev;
       
  2281 	void __iomem *ioaddr = tp->mmio_addr;
       
  2282 	int work_done;
       
  2283 
       
  2284 	spin_lock(&tp->rx_lock);
       
  2285 	work_done = 0;
       
  2286 	if (likely(RTL_R16(IntrStatus) & RxAckBits))
       
  2287 		work_done += rtl8139_rx(dev, tp, budget);
       
  2288 
       
  2289 	if (work_done < budget) {
       
  2290 		unsigned long flags;
       
  2291 		/*
       
  2292 		 * Order is important since data can get interrupted
       
  2293 		 * again when we think we are done.
       
  2294 		 */
       
  2295 		spin_lock_irqsave(&tp->lock, flags);
       
  2296 		__napi_complete(napi);
       
  2297 		RTL_W16_F(IntrMask, rtl8139_intr_mask);
       
  2298 		spin_unlock_irqrestore(&tp->lock, flags);
       
  2299 	}
       
  2300 	spin_unlock(&tp->rx_lock);
       
  2301 
       
  2302 	return work_done;
       
  2303 }
       
  2304 
       
  2305 void ec_poll(struct net_device *dev)
       
  2306 {
       
  2307 	rtl8139_interrupt(0, dev);
       
  2308 }
       
  2309 
       
  2310 /* The interrupt handler does all of the Rx thread work and cleans up
       
  2311    after the Tx thread. */
       
  2312 static irqreturn_t rtl8139_interrupt (int irq, void *dev_instance)
       
  2313 {
       
  2314 	struct net_device *dev = (struct net_device *) dev_instance;
       
  2315 	struct rtl8139_private *tp = netdev_priv(dev);
       
  2316 	void __iomem *ioaddr = tp->mmio_addr;
       
  2317 	u16 status, ackstat;
       
  2318 	int link_changed = 0; /* avoid bogus "uninit" warning */
       
  2319 	int handled = 0;
       
  2320 
       
  2321 	if (tp->ecdev) {
       
  2322 		status = RTL_R16 (IntrStatus);
       
  2323 	}
       
  2324 	else {
       
  2325 		spin_lock (&tp->lock);
       
  2326 		status = RTL_R16 (IntrStatus);
       
  2327 
       
  2328 		/* shared irq? */
       
  2329 		if (unlikely((status & rtl8139_intr_mask) == 0))
       
  2330 			goto out;
       
  2331 	}
       
  2332 
       
  2333 	handled = 1;
       
  2334 
       
  2335 	/* h/w no longer present (hotplug?) or major error, bail */
       
  2336 	if (unlikely(status == 0xFFFF))
       
  2337 		goto out;
       
  2338 
       
  2339 	if (!tp->ecdev) {
       
  2340 		/* close possible race's with dev_close */
       
  2341 		if (unlikely(!netif_running(dev))) {
       
  2342 			RTL_W16 (IntrMask, 0);
       
  2343 			goto out;
       
  2344 		}
       
  2345 	}
       
  2346 
       
  2347 	/* Acknowledge all of the current interrupt sources ASAP, but
       
  2348 	   an first get an additional status bit from CSCR. */
       
  2349 	if (unlikely(status & RxUnderrun))
       
  2350 		link_changed = RTL_R16 (CSCR) & CSCR_LinkChangeBit;
       
  2351 
       
  2352 	ackstat = status & ~(RxAckBits | TxErr);
       
  2353 	if (ackstat)
       
  2354 		RTL_W16 (IntrStatus, ackstat);
       
  2355 
       
  2356 	/* Receive packets are processed by poll routine.
       
  2357 	   If not running start it now. */
       
  2358 	if (status & RxAckBits){
       
  2359 		if (tp->ecdev) {
       
  2360 			/* EtherCAT device: Just receive all frames */
       
  2361 			rtl8139_rx(dev, tp, 100); // FIXME
       
  2362 		} else {
       
  2363 			/* Mark for polling */
       
  2364 			if (napi_schedule_prep(&tp->napi)) {
       
  2365 				RTL_W16_F (IntrMask, rtl8139_norx_intr_mask);
       
  2366 				__napi_schedule(&tp->napi);
       
  2367 			}
       
  2368 		}
       
  2369 	}
       
  2370 
       
  2371 	/* Check uncommon events with one test. */
       
  2372 	if (unlikely(status & (PCIErr | PCSTimeout | RxUnderrun | RxErr)))
       
  2373 		rtl8139_weird_interrupt (dev, tp, ioaddr,
       
  2374 					 status, link_changed);
       
  2375 
       
  2376 	if (status & (TxOK | TxErr)) {
       
  2377 		rtl8139_tx_interrupt (dev, tp, ioaddr);
       
  2378 		if (status & TxErr)
       
  2379 			RTL_W16 (IntrStatus, TxErr);
       
  2380 	}
       
  2381 out:
       
  2382 	if (!tp->ecdev) {
       
  2383 		spin_unlock (&tp->lock);
       
  2384 	}
       
  2385 
       
  2386 	pr_debug("%s: exiting interrupt, intr_status=%#4.4x.\n",
       
  2387 		 dev->name, RTL_R16 (IntrStatus));
       
  2388 	return IRQ_RETVAL(handled);
       
  2389 }
       
  2390 
       
  2391 #ifdef CONFIG_NET_POLL_CONTROLLER
       
  2392 /*
       
  2393  * Polling receive - used by netconsole and other diagnostic tools
       
  2394  * to allow network i/o with interrupts disabled.
       
  2395  */
       
  2396 static void rtl8139_poll_controller(struct net_device *dev)
       
  2397 {
       
  2398 	disable_irq_nosync(dev->irq);
       
  2399 	rtl8139_interrupt(dev->irq, dev);
       
  2400 	enable_irq(dev->irq);
       
  2401 }
       
  2402 #endif
       
  2403 
       
  2404 static int rtl8139_set_mac_address(struct net_device *dev, void *p)
       
  2405 {
       
  2406 	struct rtl8139_private *tp = netdev_priv(dev);
       
  2407 	void __iomem *ioaddr = tp->mmio_addr;
       
  2408 	struct sockaddr *addr = p;
       
  2409 
       
  2410 	if (!is_valid_ether_addr(addr->sa_data))
       
  2411 		return -EADDRNOTAVAIL;
       
  2412 
       
  2413 	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
       
  2414 
       
  2415 	spin_lock_irq(&tp->lock);
       
  2416 
       
  2417 	RTL_W8_F(Cfg9346, Cfg9346_Unlock);
       
  2418 	RTL_W32_F(MAC0 + 0, cpu_to_le32 (*(u32 *) (dev->dev_addr + 0)));
       
  2419 	RTL_W32_F(MAC0 + 4, cpu_to_le32 (*(u32 *) (dev->dev_addr + 4)));
       
  2420 	RTL_W8_F(Cfg9346, Cfg9346_Lock);
       
  2421 
       
  2422 	spin_unlock_irq(&tp->lock);
       
  2423 
       
  2424 	return 0;
       
  2425 }
       
  2426 
       
  2427 static int rtl8139_close (struct net_device *dev)
       
  2428 {
       
  2429 	struct rtl8139_private *tp = netdev_priv(dev);
       
  2430 	void __iomem *ioaddr = tp->mmio_addr;
       
  2431 	unsigned long flags;
       
  2432 
       
  2433 	if (tp->ecdev) {
       
  2434 		/* Stop the chip's Tx and Rx DMA processes. */
       
  2435 		RTL_W8 (ChipCmd, 0);
       
  2436 
       
  2437 		/* Disable interrupts by clearing the interrupt mask. */
       
  2438 		RTL_W16 (IntrMask, 0);
       
  2439 
       
  2440 		/* Update the error counts. */
       
  2441 		dev->stats.rx_missed_errors += RTL_R32 (RxMissed);
       
  2442 		RTL_W32 (RxMissed, 0);
       
  2443 	} else {
       
  2444 		netif_stop_queue(dev);
       
  2445 		napi_disable(&tp->napi);
       
  2446 
       
  2447 		if (netif_msg_ifdown(tp))
       
  2448 			pr_debug("%s: Shutting down ethercard, status was 0x%4.4x.\n",
       
  2449 				dev->name, RTL_R16 (IntrStatus));
       
  2450 
       
  2451 		spin_lock_irqsave (&tp->lock, flags);
       
  2452 
       
  2453 		/* Stop the chip's Tx and Rx DMA processes. */
       
  2454 		RTL_W8 (ChipCmd, 0);
       
  2455 
       
  2456 		/* Disable interrupts by clearing the interrupt mask. */
       
  2457 		RTL_W16 (IntrMask, 0);
       
  2458 
       
  2459 		/* Update the error counts. */
       
  2460 		dev->stats.rx_missed_errors += RTL_R32 (RxMissed);
       
  2461 		RTL_W32 (RxMissed, 0);
       
  2462 
       
  2463 		spin_unlock_irqrestore (&tp->lock, flags);
       
  2464 
       
  2465 		free_irq (dev->irq, dev);
       
  2466 	}
       
  2467 
       
  2468 	rtl8139_tx_clear (tp);
       
  2469 
       
  2470 	dma_free_coherent(&tp->pci_dev->dev, RX_BUF_TOT_LEN,
       
  2471 			  tp->rx_ring, tp->rx_ring_dma);
       
  2472 	dma_free_coherent(&tp->pci_dev->dev, TX_BUF_TOT_LEN,
       
  2473 			  tp->tx_bufs, tp->tx_bufs_dma);
       
  2474 	tp->rx_ring = NULL;
       
  2475 	tp->tx_bufs = NULL;
       
  2476 
       
  2477 	/* Green! Put the chip in low-power mode. */
       
  2478 	RTL_W8 (Cfg9346, Cfg9346_Unlock);
       
  2479 
       
  2480 	if (rtl_chip_info[tp->chipset].flags & HasHltClk)
       
  2481 		RTL_W8 (HltClk, 'H');	/* 'R' would leave the clock running. */
       
  2482 
       
  2483 	return 0;
       
  2484 }
       
  2485 
       
  2486 
       
  2487 /* Get the ethtool Wake-on-LAN settings.  Assumes that wol points to
       
  2488    kernel memory, *wol has been initialized as {ETHTOOL_GWOL}, and
       
  2489    other threads or interrupts aren't messing with the 8139.  */
       
  2490 static void rtl8139_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
       
  2491 {
       
  2492 	struct rtl8139_private *tp = netdev_priv(dev);
       
  2493 	void __iomem *ioaddr = tp->mmio_addr;
       
  2494 
       
  2495 	spin_lock_irq(&tp->lock);
       
  2496 	if (rtl_chip_info[tp->chipset].flags & HasLWake) {
       
  2497 		u8 cfg3 = RTL_R8 (Config3);
       
  2498 		u8 cfg5 = RTL_R8 (Config5);
       
  2499 
       
  2500 		wol->supported = WAKE_PHY | WAKE_MAGIC
       
  2501 			| WAKE_UCAST | WAKE_MCAST | WAKE_BCAST;
       
  2502 
       
  2503 		wol->wolopts = 0;
       
  2504 		if (cfg3 & Cfg3_LinkUp)
       
  2505 			wol->wolopts |= WAKE_PHY;
       
  2506 		if (cfg3 & Cfg3_Magic)
       
  2507 			wol->wolopts |= WAKE_MAGIC;
       
  2508 		/* (KON)FIXME: See how netdev_set_wol() handles the
       
  2509 		   following constants.  */
       
  2510 		if (cfg5 & Cfg5_UWF)
       
  2511 			wol->wolopts |= WAKE_UCAST;
       
  2512 		if (cfg5 & Cfg5_MWF)
       
  2513 			wol->wolopts |= WAKE_MCAST;
       
  2514 		if (cfg5 & Cfg5_BWF)
       
  2515 			wol->wolopts |= WAKE_BCAST;
       
  2516 	}
       
  2517 	spin_unlock_irq(&tp->lock);
       
  2518 }
       
  2519 
       
  2520 
       
  2521 /* Set the ethtool Wake-on-LAN settings.  Return 0 or -errno.  Assumes
       
  2522    that wol points to kernel memory and other threads or interrupts
       
  2523    aren't messing with the 8139.  */
       
  2524 static int rtl8139_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
       
  2525 {
       
  2526 	struct rtl8139_private *tp = netdev_priv(dev);
       
  2527 	void __iomem *ioaddr = tp->mmio_addr;
       
  2528 	u32 support;
       
  2529 	u8 cfg3, cfg5;
       
  2530 
       
  2531 	support = ((rtl_chip_info[tp->chipset].flags & HasLWake)
       
  2532 		   ? (WAKE_PHY | WAKE_MAGIC
       
  2533 		      | WAKE_UCAST | WAKE_MCAST | WAKE_BCAST)
       
  2534 		   : 0);
       
  2535 	if (wol->wolopts & ~support)
       
  2536 		return -EINVAL;
       
  2537 
       
  2538 	spin_lock_irq(&tp->lock);
       
  2539 	cfg3 = RTL_R8 (Config3) & ~(Cfg3_LinkUp | Cfg3_Magic);
       
  2540 	if (wol->wolopts & WAKE_PHY)
       
  2541 		cfg3 |= Cfg3_LinkUp;
       
  2542 	if (wol->wolopts & WAKE_MAGIC)
       
  2543 		cfg3 |= Cfg3_Magic;
       
  2544 	RTL_W8 (Cfg9346, Cfg9346_Unlock);
       
  2545 	RTL_W8 (Config3, cfg3);
       
  2546 	RTL_W8 (Cfg9346, Cfg9346_Lock);
       
  2547 
       
  2548 	cfg5 = RTL_R8 (Config5) & ~(Cfg5_UWF | Cfg5_MWF | Cfg5_BWF);
       
  2549 	/* (KON)FIXME: These are untested.  We may have to set the
       
  2550 	   CRC0, Wakeup0 and LSBCRC0 registers too, but I have no
       
  2551 	   documentation.  */
       
  2552 	if (wol->wolopts & WAKE_UCAST)
       
  2553 		cfg5 |= Cfg5_UWF;
       
  2554 	if (wol->wolopts & WAKE_MCAST)
       
  2555 		cfg5 |= Cfg5_MWF;
       
  2556 	if (wol->wolopts & WAKE_BCAST)
       
  2557 		cfg5 |= Cfg5_BWF;
       
  2558 	RTL_W8 (Config5, cfg5);	/* need not unlock via Cfg9346 */
       
  2559 	spin_unlock_irq(&tp->lock);
       
  2560 
       
  2561 	return 0;
       
  2562 }
       
  2563 
       
  2564 static void rtl8139_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
       
  2565 {
       
  2566 	struct rtl8139_private *tp = netdev_priv(dev);
       
  2567 	strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
       
  2568 	strlcpy(info->version, DRV_VERSION, sizeof(info->version));
       
  2569 	strlcpy(info->bus_info, pci_name(tp->pci_dev), sizeof(info->bus_info));
       
  2570 	info->regdump_len = tp->regs_len;
       
  2571 }
       
  2572 
       
  2573 static int rtl8139_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
       
  2574 {
       
  2575 	struct rtl8139_private *tp = netdev_priv(dev);
       
  2576 	spin_lock_irq(&tp->lock);
       
  2577 	mii_ethtool_gset(&tp->mii, cmd);
       
  2578 	spin_unlock_irq(&tp->lock);
       
  2579 	return 0;
       
  2580 }
       
  2581 
       
  2582 static int rtl8139_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
       
  2583 {
       
  2584 	struct rtl8139_private *tp = netdev_priv(dev);
       
  2585 	int rc;
       
  2586 	spin_lock_irq(&tp->lock);
       
  2587 	rc = mii_ethtool_sset(&tp->mii, cmd);
       
  2588 	spin_unlock_irq(&tp->lock);
       
  2589 	return rc;
       
  2590 }
       
  2591 
       
  2592 static int rtl8139_nway_reset(struct net_device *dev)
       
  2593 {
       
  2594 	struct rtl8139_private *tp = netdev_priv(dev);
       
  2595 	return mii_nway_restart(&tp->mii);
       
  2596 }
       
  2597 
       
  2598 static u32 rtl8139_get_link(struct net_device *dev)
       
  2599 {
       
  2600 	struct rtl8139_private *tp = netdev_priv(dev);
       
  2601 	return mii_link_ok(&tp->mii);
       
  2602 }
       
  2603 
       
  2604 static u32 rtl8139_get_msglevel(struct net_device *dev)
       
  2605 {
       
  2606 	struct rtl8139_private *tp = netdev_priv(dev);
       
  2607 	return tp->msg_enable;
       
  2608 }
       
  2609 
       
  2610 static void rtl8139_set_msglevel(struct net_device *dev, u32 datum)
       
  2611 {
       
  2612 	struct rtl8139_private *tp = netdev_priv(dev);
       
  2613 	tp->msg_enable = datum;
       
  2614 }
       
  2615 
       
  2616 static int rtl8139_get_regs_len(struct net_device *dev)
       
  2617 {
       
  2618 	struct rtl8139_private *tp;
       
  2619 	/* TODO: we are too slack to do reg dumping for pio, for now */
       
  2620 	if (use_io)
       
  2621 		return 0;
       
  2622 	tp = netdev_priv(dev);
       
  2623 	return tp->regs_len;
       
  2624 }
       
  2625 
       
  2626 static void rtl8139_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *regbuf)
       
  2627 {
       
  2628 	struct rtl8139_private *tp;
       
  2629 
       
  2630 	/* TODO: we are too slack to do reg dumping for pio, for now */
       
  2631 	if (use_io)
       
  2632 		return;
       
  2633 	tp = netdev_priv(dev);
       
  2634 
       
  2635 	regs->version = RTL_REGS_VER;
       
  2636 
       
  2637 	spin_lock_irq(&tp->lock);
       
  2638 	memcpy_fromio(regbuf, tp->mmio_addr, regs->len);
       
  2639 	spin_unlock_irq(&tp->lock);
       
  2640 }
       
  2641 
       
  2642 static int rtl8139_get_sset_count(struct net_device *dev, int sset)
       
  2643 {
       
  2644 	switch (sset) {
       
  2645 	case ETH_SS_STATS:
       
  2646 		return RTL_NUM_STATS;
       
  2647 	default:
       
  2648 		return -EOPNOTSUPP;
       
  2649 	}
       
  2650 }
       
  2651 
       
  2652 static void rtl8139_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *stats, u64 *data)
       
  2653 {
       
  2654 	struct rtl8139_private *tp = netdev_priv(dev);
       
  2655 
       
  2656 	data[0] = tp->xstats.early_rx;
       
  2657 	data[1] = tp->xstats.tx_buf_mapped;
       
  2658 	data[2] = tp->xstats.tx_timeouts;
       
  2659 	data[3] = tp->xstats.rx_lost_in_ring;
       
  2660 }
       
  2661 
       
  2662 static void rtl8139_get_strings(struct net_device *dev, u32 stringset, u8 *data)
       
  2663 {
       
  2664 	memcpy(data, ethtool_stats_keys, sizeof(ethtool_stats_keys));
       
  2665 }
       
  2666 
       
  2667 static const struct ethtool_ops rtl8139_ethtool_ops = {
       
  2668 	.get_drvinfo		= rtl8139_get_drvinfo,
       
  2669 	.get_settings		= rtl8139_get_settings,
       
  2670 	.set_settings		= rtl8139_set_settings,
       
  2671 	.get_regs_len		= rtl8139_get_regs_len,
       
  2672 	.get_regs		= rtl8139_get_regs,
       
  2673 	.nway_reset		= rtl8139_nway_reset,
       
  2674 	.get_link		= rtl8139_get_link,
       
  2675 	.get_msglevel		= rtl8139_get_msglevel,
       
  2676 	.set_msglevel		= rtl8139_set_msglevel,
       
  2677 	.get_wol		= rtl8139_get_wol,
       
  2678 	.set_wol		= rtl8139_set_wol,
       
  2679 	.get_strings		= rtl8139_get_strings,
       
  2680 	.get_sset_count		= rtl8139_get_sset_count,
       
  2681 	.get_ethtool_stats	= rtl8139_get_ethtool_stats,
       
  2682 };
       
  2683 
       
  2684 static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
       
  2685 {
       
  2686 	struct rtl8139_private *tp = netdev_priv(dev);
       
  2687 	int rc;
       
  2688 
       
  2689 	if (tp->ecdev || !netif_running(dev))
       
  2690 		return -EINVAL;
       
  2691 
       
  2692 	spin_lock_irq(&tp->lock);
       
  2693 	rc = generic_mii_ioctl(&tp->mii, if_mii(rq), cmd, NULL);
       
  2694 	spin_unlock_irq(&tp->lock);
       
  2695 
       
  2696 	return rc;
       
  2697 }
       
  2698 
       
  2699 
       
  2700 static struct rtnl_link_stats64 *
       
  2701 rtl8139_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
       
  2702 {
       
  2703 	struct rtl8139_private *tp = netdev_priv(dev);
       
  2704 	void __iomem *ioaddr = tp->mmio_addr;
       
  2705 	unsigned long flags;
       
  2706 	unsigned int start;
       
  2707 
       
  2708 	if (tp->ecdev || netif_running(dev)) {
       
  2709 		spin_lock_irqsave (&tp->lock, flags);
       
  2710 		dev->stats.rx_missed_errors += RTL_R32 (RxMissed);
       
  2711 		RTL_W32 (RxMissed, 0);
       
  2712 		spin_unlock_irqrestore (&tp->lock, flags);
       
  2713 	}
       
  2714 
       
  2715 	netdev_stats_to_stats64(stats, &dev->stats);
       
  2716 
       
  2717 	do {
       
  2718 		start = u64_stats_fetch_begin_bh(&tp->rx_stats.syncp);
       
  2719 		stats->rx_packets = tp->rx_stats.packets;
       
  2720 		stats->rx_bytes = tp->rx_stats.bytes;
       
  2721 	} while (u64_stats_fetch_retry_bh(&tp->rx_stats.syncp, start));
       
  2722 
       
  2723 	do {
       
  2724 		start = u64_stats_fetch_begin_bh(&tp->tx_stats.syncp);
       
  2725 		stats->tx_packets = tp->tx_stats.packets;
       
  2726 		stats->tx_bytes = tp->tx_stats.bytes;
       
  2727 	} while (u64_stats_fetch_retry_bh(&tp->tx_stats.syncp, start));
       
  2728 
       
  2729 	return stats;
       
  2730 }
       
  2731 
       
  2732 /* Set or clear the multicast filter for this adaptor.
       
  2733    This routine is not state sensitive and need not be SMP locked. */
       
  2734 
       
  2735 static void __set_rx_mode (struct net_device *dev)
       
  2736 {
       
  2737 	struct rtl8139_private *tp = netdev_priv(dev);
       
  2738 	void __iomem *ioaddr = tp->mmio_addr;
       
  2739 	u32 mc_filter[2];	/* Multicast hash filter */
       
  2740 	int rx_mode;
       
  2741 	u32 tmp;
       
  2742 
       
  2743 	netdev_dbg(dev, "rtl8139_set_rx_mode(%04x) done -- Rx config %08x\n",
       
  2744 		   dev->flags, RTL_R32(RxConfig));
       
  2745 
       
  2746 	/* Note: do not reorder, GCC is clever about common statements. */
       
  2747 	if (dev->flags & IFF_PROMISC) {
       
  2748 		rx_mode =
       
  2749 		    AcceptBroadcast | AcceptMulticast | AcceptMyPhys |
       
  2750 		    AcceptAllPhys;
       
  2751 		mc_filter[1] = mc_filter[0] = 0xffffffff;
       
  2752 	} else if ((netdev_mc_count(dev) > multicast_filter_limit) ||
       
  2753 		   (dev->flags & IFF_ALLMULTI)) {
       
  2754 		/* Too many to filter perfectly -- accept all multicasts. */
       
  2755 		rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
       
  2756 		mc_filter[1] = mc_filter[0] = 0xffffffff;
       
  2757 	} else {
       
  2758 		struct netdev_hw_addr *ha;
       
  2759 		rx_mode = AcceptBroadcast | AcceptMyPhys;
       
  2760 		mc_filter[1] = mc_filter[0] = 0;
       
  2761 		netdev_for_each_mc_addr(ha, dev) {
       
  2762 			int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26;
       
  2763 
       
  2764 			mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
       
  2765 			rx_mode |= AcceptMulticast;
       
  2766 		}
       
  2767 	}
       
  2768 
       
  2769 	if (dev->features & NETIF_F_RXALL)
       
  2770 		rx_mode |= (AcceptErr | AcceptRunt);
       
  2771 
       
  2772 	/* We can safely update without stopping the chip. */
       
  2773 	tmp = rtl8139_rx_config | rx_mode;
       
  2774 	if (tp->rx_config != tmp) {
       
  2775 		RTL_W32_F (RxConfig, tmp);
       
  2776 		tp->rx_config = tmp;
       
  2777 	}
       
  2778 	RTL_W32_F (MAR0 + 0, mc_filter[0]);
       
  2779 	RTL_W32_F (MAR0 + 4, mc_filter[1]);
       
  2780 }
       
  2781 
       
  2782 static void rtl8139_set_rx_mode (struct net_device *dev)
       
  2783 {
       
  2784 	unsigned long flags;
       
  2785 	struct rtl8139_private *tp = netdev_priv(dev);
       
  2786 
       
  2787 	spin_lock_irqsave (&tp->lock, flags);
       
  2788 	__set_rx_mode(dev);
       
  2789 	spin_unlock_irqrestore (&tp->lock, flags);
       
  2790 }
       
  2791 
       
  2792 #ifdef CONFIG_PM
       
  2793 
       
  2794 static int rtl8139_suspend (struct pci_dev *pdev, pm_message_t state)
       
  2795 {
       
  2796 	struct net_device *dev = pci_get_drvdata (pdev);
       
  2797 	struct rtl8139_private *tp = netdev_priv(dev);
       
  2798 	void __iomem *ioaddr = tp->mmio_addr;
       
  2799 	unsigned long flags;
       
  2800 
       
  2801 	pci_save_state (pdev);
       
  2802 
       
  2803 	if (tp->ecdev || !netif_running (dev))
       
  2804 		return 0;
       
  2805 
       
  2806 	netif_device_detach (dev);
       
  2807 
       
  2808 	spin_lock_irqsave (&tp->lock, flags);
       
  2809 
       
  2810 	/* Disable interrupts, stop Tx and Rx. */
       
  2811 	RTL_W16 (IntrMask, 0);
       
  2812 	RTL_W8 (ChipCmd, 0);
       
  2813 
       
  2814 	/* Update the error counts. */
       
  2815 	dev->stats.rx_missed_errors += RTL_R32 (RxMissed);
       
  2816 	RTL_W32 (RxMissed, 0);
       
  2817 
       
  2818 	spin_unlock_irqrestore (&tp->lock, flags);
       
  2819 
       
  2820 	pci_set_power_state (pdev, PCI_D3hot);
       
  2821 
       
  2822 	return 0;
       
  2823 }
       
  2824 
       
  2825 
       
  2826 static int rtl8139_resume (struct pci_dev *pdev)
       
  2827 {
       
  2828 	struct net_device *dev = pci_get_drvdata (pdev);
       
  2829 	struct rtl8139_private *tp = netdev_priv(dev);
       
  2830 
       
  2831 	pci_restore_state (pdev);
       
  2832 	if (tp->ecdev || !netif_running (dev))
       
  2833 		return 0;
       
  2834 	pci_set_power_state (pdev, PCI_D0);
       
  2835 	rtl8139_init_ring (dev);
       
  2836 	rtl8139_hw_start (dev);
       
  2837 	netif_device_attach (dev);
       
  2838 	return 0;
       
  2839 }
       
  2840 
       
  2841 #endif /* CONFIG_PM */
       
  2842 
       
  2843 
       
  2844 static struct pci_driver rtl8139_pci_driver = {
       
  2845 	.name		= DRV_NAME,
       
  2846 	.id_table	= rtl8139_pci_tbl,
       
  2847 	.probe		= rtl8139_init_one,
       
  2848 	.remove		= __devexit_p(rtl8139_remove_one),
       
  2849 #ifdef CONFIG_PM
       
  2850 	.suspend	= rtl8139_suspend,
       
  2851 	.resume		= rtl8139_resume,
       
  2852 #endif /* CONFIG_PM */
       
  2853 };
       
  2854 
       
  2855 
       
  2856 static int __init rtl8139_init_module (void)
       
  2857 {
       
  2858 	/* when we're a module, we always print a version message,
       
  2859 	 * even if no 8139 board is found.
       
  2860 	 */
       
  2861 #ifdef MODULE
       
  2862 	pr_info(RTL8139_DRIVER_NAME "\n");
       
  2863 #endif
       
  2864 
       
  2865 	return pci_register_driver(&rtl8139_pci_driver);
       
  2866 }
       
  2867 
       
  2868 
       
  2869 static void __exit rtl8139_cleanup_module (void)
       
  2870 {
       
  2871 	pci_unregister_driver (&rtl8139_pci_driver);
       
  2872 }
       
  2873 
       
  2874 
       
  2875 module_init(rtl8139_init_module);
       
  2876 module_exit(rtl8139_cleanup_module);