Linux Audio

Check our new training course

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