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