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