Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
   1/* via-rhine.c: A Linux Ethernet device driver for VIA Rhine family chips. */
   2/*
   3	Written 1998-2001 by Donald Becker.
   4
   5	Current Maintainer: Kevin Brace <kevinbrace@bracecomputerlab.com>
   6
   7	This software may be used and distributed according to the terms of
   8	the GNU General Public License (GPL), incorporated herein by reference.
   9	Drivers based on or derived from this code fall under the GPL and must
  10	retain the authorship, copyright and license notice.  This file is not
  11	a complete program and may only be used when the entire operating
  12	system is licensed under the GPL.
  13
  14	This driver is designed for the VIA VT86C100A Rhine-I.
  15	It also works with the Rhine-II (6102) and Rhine-III (6105/6105L/6105LOM
  16	and management NIC 6105M).
  17
  18	The author may be reached as becker@scyld.com, or C/O
  19	Scyld Computing Corporation
  20	410 Severn Ave., Suite 210
  21	Annapolis MD 21403
  22
  23
  24	This driver contains some changes from the original Donald Becker
  25	version. He may or may not be interested in bug reports on this
  26	code. You can find his versions at:
  27	http://www.scyld.com/network/via-rhine.html
  28	[link no longer provides useful info -jgarzik]
  29
  30*/
  31
  32#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  33
  34#define DRV_NAME	"via-rhine"
  35
  36#include <linux/types.h>
  37
  38/* A few user-configurable values.
  39   These may be modified when a driver module is loaded. */
  40static int debug = 0;
  41#define RHINE_MSG_DEFAULT \
  42        (0x0000)
  43
  44/* Set the copy breakpoint for the copy-only-tiny-frames scheme.
  45   Setting to > 1518 effectively disables this feature. */
  46#if defined(__alpha__) || defined(__arm__) || defined(__hppa__) || \
  47	defined(CONFIG_SPARC) || defined(__ia64__) ||		   \
  48	defined(__sh__) || defined(__mips__)
  49static int rx_copybreak = 1518;
  50#else
  51static int rx_copybreak;
  52#endif
  53
  54/* Work-around for broken BIOSes: they are unable to get the chip back out of
  55   power state D3 so PXE booting fails. bootparam(7): via-rhine.avoid_D3=1 */
  56static bool avoid_D3;
  57
  58/*
  59 * In case you are looking for 'options[]' or 'full_duplex[]', they
  60 * are gone. Use ethtool(8) instead.
  61 */
  62
  63/* Maximum number of multicast addresses to filter (vs. rx-all-multicast).
  64   The Rhine has a 64 element 8390-like hash table. */
  65static const int multicast_filter_limit = 32;
  66
  67
  68/* Operational parameters that are set at compile time. */
  69
  70/* Keep the ring sizes a power of two for compile efficiency.
  71 * The compiler will convert <unsigned>'%'<2^N> into a bit mask.
  72 * Making the Tx ring too large decreases the effectiveness of channel
  73 * bonding and packet priority.
  74 * With BQL support, we can increase TX ring safely.
  75 * There are no ill effects from too-large receive rings.
  76 */
  77#define TX_RING_SIZE	64
  78#define TX_QUEUE_LEN	(TX_RING_SIZE - 6)	/* Limit ring entries actually used. */
  79#define RX_RING_SIZE	64
  80
  81/* Operational parameters that usually are not changed. */
  82
  83/* Time in jiffies before concluding the transmitter is hung. */
  84#define TX_TIMEOUT	(2*HZ)
  85
  86#define PKT_BUF_SZ	1536	/* Size of each temporary Rx buffer.*/
  87
  88#include <linux/module.h>
  89#include <linux/moduleparam.h>
  90#include <linux/kernel.h>
  91#include <linux/string.h>
  92#include <linux/timer.h>
  93#include <linux/errno.h>
  94#include <linux/ioport.h>
  95#include <linux/interrupt.h>
  96#include <linux/pci.h>
  97#include <linux/of_device.h>
  98#include <linux/of_irq.h>
  99#include <linux/platform_device.h>
 100#include <linux/dma-mapping.h>
 101#include <linux/netdevice.h>
 102#include <linux/etherdevice.h>
 103#include <linux/skbuff.h>
 104#include <linux/init.h>
 105#include <linux/delay.h>
 106#include <linux/mii.h>
 107#include <linux/ethtool.h>
 108#include <linux/crc32.h>
 109#include <linux/if_vlan.h>
 110#include <linux/bitops.h>
 111#include <linux/workqueue.h>
 112#include <asm/processor.h>	/* Processor type for cache alignment. */
 113#include <asm/io.h>
 114#include <asm/irq.h>
 115#include <linux/uaccess.h>
 116#include <linux/dmi.h>
 117
 118MODULE_AUTHOR("Donald Becker <becker@scyld.com>");
 119MODULE_DESCRIPTION("VIA Rhine PCI Fast Ethernet driver");
 120MODULE_LICENSE("GPL");
 121
 122module_param(debug, int, 0);
 123module_param(rx_copybreak, int, 0);
 124module_param(avoid_D3, bool, 0);
 125MODULE_PARM_DESC(debug, "VIA Rhine debug message flags");
 126MODULE_PARM_DESC(rx_copybreak, "VIA Rhine copy breakpoint for copy-only-tiny-frames");
 127MODULE_PARM_DESC(avoid_D3, "Avoid power state D3 (work-around for broken BIOSes)");
 128
 129#define MCAM_SIZE	32
 130#define VCAM_SIZE	32
 131
 132/*
 133		Theory of Operation
 134
 135I. Board Compatibility
 136
 137This driver is designed for the VIA 86c100A Rhine-II PCI Fast Ethernet
 138controller.
 139
 140II. Board-specific settings
 141
 142Boards with this chip are functional only in a bus-master PCI slot.
 143
 144Many operational settings are loaded from the EEPROM to the Config word at
 145offset 0x78. For most of these settings, this driver assumes that they are
 146correct.
 147If this driver is compiled to use PCI memory space operations the EEPROM
 148must be configured to enable memory ops.
 149
 150III. Driver operation
 151
 152IIIa. Ring buffers
 153
 154This driver uses two statically allocated fixed-size descriptor lists
 155formed into rings by a branch from the final descriptor to the beginning of
 156the list. The ring sizes are set at compile time by RX/TX_RING_SIZE.
 157
 158IIIb/c. Transmit/Receive Structure
 159
 160This driver attempts to use a zero-copy receive and transmit scheme.
 161
 162Alas, all data buffers are required to start on a 32 bit boundary, so
 163the driver must often copy transmit packets into bounce buffers.
 164
 165The driver allocates full frame size skbuffs for the Rx ring buffers at
 166open() time and passes the skb->data field to the chip as receive data
 167buffers. When an incoming frame is less than RX_COPYBREAK bytes long,
 168a fresh skbuff is allocated and the frame is copied to the new skbuff.
 169When the incoming frame is larger, the skbuff is passed directly up the
 170protocol stack. Buffers consumed this way are replaced by newly allocated
 171skbuffs in the last phase of rhine_rx().
 172
 173The RX_COPYBREAK value is chosen to trade-off the memory wasted by
 174using a full-sized skbuff for small frames vs. the copying costs of larger
 175frames. New boards are typically used in generously configured machines
 176and the underfilled buffers have negligible impact compared to the benefit of
 177a single allocation size, so the default value of zero results in never
 178copying packets. When copying is done, the cost is usually mitigated by using
 179a combined copy/checksum routine. Copying also preloads the cache, which is
 180most useful with small frames.
 181
 182Since the VIA chips are only able to transfer data to buffers on 32 bit
 183boundaries, the IP header at offset 14 in an ethernet frame isn't
 184longword aligned for further processing. Copying these unaligned buffers
 185has the beneficial effect of 16-byte aligning the IP header.
 186
 187IIId. Synchronization
 188
 189The driver runs as two independent, single-threaded flows of control. One
 190is the send-packet routine, which enforces single-threaded use by the
 191netdev_priv(dev)->lock spinlock. The other thread is the interrupt handler,
 192which is single threaded by the hardware and interrupt handling software.
 193
 194The send packet thread has partial control over the Tx ring. It locks the
 195netdev_priv(dev)->lock whenever it's queuing a Tx packet. If the next slot in
 196the ring is not available it stops the transmit queue by
 197calling netif_stop_queue.
 198
 199The interrupt handler has exclusive control over the Rx ring and records stats
 200from the Tx ring. After reaping the stats, it marks the Tx queue entry as
 201empty by incrementing the dirty_tx mark. If at least half of the entries in
 202the Rx ring are available the transmit queue is woken up if it was stopped.
 203
 204IV. Notes
 205
 206IVb. References
 207
 208Preliminary VT86C100A manual from http://www.via.com.tw/
 209http://www.scyld.com/expert/100mbps.html
 210http://www.scyld.com/expert/NWay.html
 211ftp://ftp.via.com.tw/public/lan/Products/NIC/VT86C100A/Datasheet/VT86C100A03.pdf
 212ftp://ftp.via.com.tw/public/lan/Products/NIC/VT6102/Datasheet/VT6102_021.PDF
 213
 214
 215IVc. Errata
 216
 217The VT86C100A manual is not reliable information.
 218The 3043 chip does not handle unaligned transmit or receive buffers, resulting
 219in significant performance degradation for bounce buffer copies on transmit
 220and unaligned IP headers on receive.
 221The chip does not pad to minimum transmit length.
 222
 223*/
 224
 225
 226/* This table drives the PCI probe routines. It's mostly boilerplate in all
 227   of the drivers, and will likely be provided by some future kernel.
 228   Note the matching code -- the first table entry matchs all 56** cards but
 229   second only the 1234 card.
 230*/
 231
 232enum rhine_revs {
 233	VT86C100A	= 0x00,
 234	VTunknown0	= 0x20,
 235	VT6102		= 0x40,
 236	VT8231		= 0x50,	/* Integrated MAC */
 237	VT8233		= 0x60,	/* Integrated MAC */
 238	VT8235		= 0x74,	/* Integrated MAC */
 239	VT8237		= 0x78,	/* Integrated MAC */
 240	VT8251		= 0x7C,	/* Integrated MAC */
 241	VT6105		= 0x80,
 242	VT6105_B0	= 0x83,
 243	VT6105L		= 0x8A,
 244	VT6107		= 0x8C,
 245	VTunknown2	= 0x8E,
 246	VT6105M		= 0x90,	/* Management adapter */
 247};
 248
 249enum rhine_quirks {
 250	rqWOL		= 0x0001,	/* Wake-On-LAN support */
 251	rqForceReset	= 0x0002,
 252	rq6patterns	= 0x0040,	/* 6 instead of 4 patterns for WOL */
 253	rqStatusWBRace	= 0x0080,	/* Tx Status Writeback Error possible */
 254	rqRhineI	= 0x0100,	/* See comment below */
 255	rqIntPHY	= 0x0200,	/* Integrated PHY */
 256	rqMgmt		= 0x0400,	/* Management adapter */
 257	rqNeedEnMMIO	= 0x0800,	/* Whether the core needs to be
 258					 * switched from PIO mode to MMIO
 259					 * (only applies to PCI)
 260					 */
 261};
 262/*
 263 * rqRhineI: VT86C100A (aka Rhine-I) uses different bits to enable
 264 * MMIO as well as for the collision counter and the Tx FIFO underflow
 265 * indicator. In addition, Tx and Rx buffers need to 4 byte aligned.
 266 */
 267
 268/* Beware of PCI posted writes */
 269#define IOSYNC	do { ioread8(ioaddr + StationAddr); } while (0)
 270
 271static const struct pci_device_id rhine_pci_tbl[] = {
 272	{ 0x1106, 0x3043, PCI_ANY_ID, PCI_ANY_ID, },	/* VT86C100A */
 273	{ 0x1106, 0x3065, PCI_ANY_ID, PCI_ANY_ID, },	/* VT6102 */
 274	{ 0x1106, 0x3106, PCI_ANY_ID, PCI_ANY_ID, },	/* 6105{,L,LOM} */
 275	{ 0x1106, 0x3053, PCI_ANY_ID, PCI_ANY_ID, },	/* VT6105M */
 276	{ }	/* terminate list */
 277};
 278MODULE_DEVICE_TABLE(pci, rhine_pci_tbl);
 279
 280/* OpenFirmware identifiers for platform-bus devices
 281 * The .data field is currently only used to store quirks
 282 */
 283static u32 vt8500_quirks = rqWOL | rqForceReset | rq6patterns;
 284static const struct of_device_id rhine_of_tbl[] = {
 285	{ .compatible = "via,vt8500-rhine", .data = &vt8500_quirks },
 286	{ }	/* terminate list */
 287};
 288MODULE_DEVICE_TABLE(of, rhine_of_tbl);
 289
 290/* Offsets to the device registers. */
 291enum register_offsets {
 292	StationAddr=0x00, RxConfig=0x06, TxConfig=0x07, ChipCmd=0x08,
 293	ChipCmd1=0x09, TQWake=0x0A,
 294	IntrStatus=0x0C, IntrEnable=0x0E,
 295	MulticastFilter0=0x10, MulticastFilter1=0x14,
 296	RxRingPtr=0x18, TxRingPtr=0x1C, GFIFOTest=0x54,
 297	MIIPhyAddr=0x6C, MIIStatus=0x6D, PCIBusConfig=0x6E, PCIBusConfig1=0x6F,
 298	MIICmd=0x70, MIIRegAddr=0x71, MIIData=0x72, MACRegEEcsr=0x74,
 299	ConfigA=0x78, ConfigB=0x79, ConfigC=0x7A, ConfigD=0x7B,
 300	RxMissed=0x7C, RxCRCErrs=0x7E, MiscCmd=0x81,
 301	StickyHW=0x83, IntrStatus2=0x84,
 302	CamMask=0x88, CamCon=0x92, CamAddr=0x93,
 303	WOLcrSet=0xA0, PwcfgSet=0xA1, WOLcgSet=0xA3, WOLcrClr=0xA4,
 304	WOLcrClr1=0xA6, WOLcgClr=0xA7,
 305	PwrcsrSet=0xA8, PwrcsrSet1=0xA9, PwrcsrClr=0xAC, PwrcsrClr1=0xAD,
 306};
 307
 308/* Bits in ConfigD */
 309enum backoff_bits {
 310	BackOptional=0x01, BackModify=0x02,
 311	BackCaptureEffect=0x04, BackRandom=0x08
 312};
 313
 314/* Bits in the TxConfig (TCR) register */
 315enum tcr_bits {
 316	TCR_PQEN=0x01,
 317	TCR_LB0=0x02,		/* loopback[0] */
 318	TCR_LB1=0x04,		/* loopback[1] */
 319	TCR_OFSET=0x08,
 320	TCR_RTGOPT=0x10,
 321	TCR_RTFT0=0x20,
 322	TCR_RTFT1=0x40,
 323	TCR_RTSF=0x80,
 324};
 325
 326/* Bits in the CamCon (CAMC) register */
 327enum camcon_bits {
 328	CAMC_CAMEN=0x01,
 329	CAMC_VCAMSL=0x02,
 330	CAMC_CAMWR=0x04,
 331	CAMC_CAMRD=0x08,
 332};
 333
 334/* Bits in the PCIBusConfig1 (BCR1) register */
 335enum bcr1_bits {
 336	BCR1_POT0=0x01,
 337	BCR1_POT1=0x02,
 338	BCR1_POT2=0x04,
 339	BCR1_CTFT0=0x08,
 340	BCR1_CTFT1=0x10,
 341	BCR1_CTSF=0x20,
 342	BCR1_TXQNOBK=0x40,	/* for VT6105 */
 343	BCR1_VIDFR=0x80,	/* for VT6105 */
 344	BCR1_MED0=0x40,		/* for VT6102 */
 345	BCR1_MED1=0x80,		/* for VT6102 */
 346};
 347
 348/* Registers we check that mmio and reg are the same. */
 349static const int mmio_verify_registers[] = {
 350	RxConfig, TxConfig, IntrEnable, ConfigA, ConfigB, ConfigC, ConfigD,
 351	0
 352};
 353
 354/* Bits in the interrupt status/mask registers. */
 355enum intr_status_bits {
 356	IntrRxDone	= 0x0001,
 357	IntrTxDone	= 0x0002,
 358	IntrRxErr	= 0x0004,
 359	IntrTxError	= 0x0008,
 360	IntrRxEmpty	= 0x0020,
 361	IntrPCIErr	= 0x0040,
 362	IntrStatsMax	= 0x0080,
 363	IntrRxEarly	= 0x0100,
 364	IntrTxUnderrun	= 0x0210,
 365	IntrRxOverflow	= 0x0400,
 366	IntrRxDropped	= 0x0800,
 367	IntrRxNoBuf	= 0x1000,
 368	IntrTxAborted	= 0x2000,
 369	IntrLinkChange	= 0x4000,
 370	IntrRxWakeUp	= 0x8000,
 371	IntrTxDescRace		= 0x080000,	/* mapped from IntrStatus2 */
 372	IntrNormalSummary	= IntrRxDone | IntrTxDone,
 373	IntrTxErrSummary	= IntrTxDescRace | IntrTxAborted | IntrTxError |
 374				  IntrTxUnderrun,
 375};
 376
 377/* Bits in WOLcrSet/WOLcrClr and PwrcsrSet/PwrcsrClr */
 378enum wol_bits {
 379	WOLucast	= 0x10,
 380	WOLmagic	= 0x20,
 381	WOLbmcast	= 0x30,
 382	WOLlnkon	= 0x40,
 383	WOLlnkoff	= 0x80,
 384};
 385
 386/* The Rx and Tx buffer descriptors. */
 387struct rx_desc {
 388	__le32 rx_status;
 389	__le32 desc_length; /* Chain flag, Buffer/frame length */
 390	__le32 addr;
 391	__le32 next_desc;
 392};
 393struct tx_desc {
 394	__le32 tx_status;
 395	__le32 desc_length; /* Chain flag, Tx Config, Frame length */
 396	__le32 addr;
 397	__le32 next_desc;
 398};
 399
 400/* Initial value for tx_desc.desc_length, Buffer size goes to bits 0-10 */
 401#define TXDESC		0x00e08000
 402
 403enum rx_status_bits {
 404	RxOK=0x8000, RxWholePkt=0x0300, RxErr=0x008F
 405};
 406
 407/* Bits in *_desc.*_status */
 408enum desc_status_bits {
 409	DescOwn=0x80000000
 410};
 411
 412/* Bits in *_desc.*_length */
 413enum desc_length_bits {
 414	DescTag=0x00010000
 415};
 416
 417/* Bits in ChipCmd. */
 418enum chip_cmd_bits {
 419	CmdInit=0x01, CmdStart=0x02, CmdStop=0x04, CmdRxOn=0x08,
 420	CmdTxOn=0x10, Cmd1TxDemand=0x20, CmdRxDemand=0x40,
 421	Cmd1EarlyRx=0x01, Cmd1EarlyTx=0x02, Cmd1FDuplex=0x04,
 422	Cmd1NoTxPoll=0x08, Cmd1Reset=0x80,
 423};
 424
 425struct rhine_stats {
 426	u64		packets;
 427	u64		bytes;
 428	struct u64_stats_sync syncp;
 429};
 430
 431struct rhine_private {
 432	/* Bit mask for configured VLAN ids */
 433	unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)];
 434
 435	/* Descriptor rings */
 436	struct rx_desc *rx_ring;
 437	struct tx_desc *tx_ring;
 438	dma_addr_t rx_ring_dma;
 439	dma_addr_t tx_ring_dma;
 440
 441	/* The addresses of receive-in-place skbuffs. */
 442	struct sk_buff *rx_skbuff[RX_RING_SIZE];
 443	dma_addr_t rx_skbuff_dma[RX_RING_SIZE];
 444
 445	/* The saved address of a sent-in-place packet/buffer, for later free(). */
 446	struct sk_buff *tx_skbuff[TX_RING_SIZE];
 447	dma_addr_t tx_skbuff_dma[TX_RING_SIZE];
 448
 449	/* Tx bounce buffers (Rhine-I only) */
 450	unsigned char *tx_buf[TX_RING_SIZE];
 451	unsigned char *tx_bufs;
 452	dma_addr_t tx_bufs_dma;
 453
 454	int irq;
 455	long pioaddr;
 456	struct net_device *dev;
 457	struct napi_struct napi;
 458	spinlock_t lock;
 459	struct mutex task_lock;
 460	bool task_enable;
 461	struct work_struct slow_event_task;
 462	struct work_struct reset_task;
 463
 464	u32 msg_enable;
 465
 466	/* Frequently used values: keep some adjacent for cache effect. */
 467	u32 quirks;
 468	unsigned int cur_rx;
 469	unsigned int cur_tx, dirty_tx;
 470	unsigned int rx_buf_sz;		/* Based on MTU+slack. */
 471	struct rhine_stats rx_stats;
 472	struct rhine_stats tx_stats;
 473	u8 wolopts;
 474
 475	u8 tx_thresh, rx_thresh;
 476
 477	struct mii_if_info mii_if;
 478	void __iomem *base;
 479};
 480
 481#define BYTE_REG_BITS_ON(x, p)      do { iowrite8((ioread8((p))|(x)), (p)); } while (0)
 482#define WORD_REG_BITS_ON(x, p)      do { iowrite16((ioread16((p))|(x)), (p)); } while (0)
 483#define DWORD_REG_BITS_ON(x, p)     do { iowrite32((ioread32((p))|(x)), (p)); } while (0)
 484
 485#define BYTE_REG_BITS_IS_ON(x, p)   (ioread8((p)) & (x))
 486#define WORD_REG_BITS_IS_ON(x, p)   (ioread16((p)) & (x))
 487#define DWORD_REG_BITS_IS_ON(x, p)  (ioread32((p)) & (x))
 488
 489#define BYTE_REG_BITS_OFF(x, p)     do { iowrite8(ioread8((p)) & (~(x)), (p)); } while (0)
 490#define WORD_REG_BITS_OFF(x, p)     do { iowrite16(ioread16((p)) & (~(x)), (p)); } while (0)
 491#define DWORD_REG_BITS_OFF(x, p)    do { iowrite32(ioread32((p)) & (~(x)), (p)); } while (0)
 492
 493#define BYTE_REG_BITS_SET(x, m, p)   do { iowrite8((ioread8((p)) & (~(m)))|(x), (p)); } while (0)
 494#define WORD_REG_BITS_SET(x, m, p)   do { iowrite16((ioread16((p)) & (~(m)))|(x), (p)); } while (0)
 495#define DWORD_REG_BITS_SET(x, m, p)  do { iowrite32((ioread32((p)) & (~(m)))|(x), (p)); } while (0)
 496
 497
 498static int  mdio_read(struct net_device *dev, int phy_id, int location);
 499static void mdio_write(struct net_device *dev, int phy_id, int location, int value);
 500static int  rhine_open(struct net_device *dev);
 501static void rhine_reset_task(struct work_struct *work);
 502static void rhine_slow_event_task(struct work_struct *work);
 503static void rhine_tx_timeout(struct net_device *dev, unsigned int txqueue);
 504static netdev_tx_t rhine_start_tx(struct sk_buff *skb,
 505				  struct net_device *dev);
 506static irqreturn_t rhine_interrupt(int irq, void *dev_instance);
 507static void rhine_tx(struct net_device *dev);
 508static int rhine_rx(struct net_device *dev, int limit);
 509static void rhine_set_rx_mode(struct net_device *dev);
 510static void rhine_get_stats64(struct net_device *dev,
 511			      struct rtnl_link_stats64 *stats);
 512static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
 513static const struct ethtool_ops netdev_ethtool_ops;
 514static int  rhine_close(struct net_device *dev);
 515static int rhine_vlan_rx_add_vid(struct net_device *dev,
 516				 __be16 proto, u16 vid);
 517static int rhine_vlan_rx_kill_vid(struct net_device *dev,
 518				  __be16 proto, u16 vid);
 519static void rhine_restart_tx(struct net_device *dev);
 520
 521static void rhine_wait_bit(struct rhine_private *rp, u8 reg, u8 mask, bool low)
 522{
 523	void __iomem *ioaddr = rp->base;
 524	int i;
 525
 526	for (i = 0; i < 1024; i++) {
 527		bool has_mask_bits = !!(ioread8(ioaddr + reg) & mask);
 528
 529		if (low ^ has_mask_bits)
 530			break;
 531		udelay(10);
 532	}
 533	if (i > 64) {
 534		netif_dbg(rp, hw, rp->dev, "%s bit wait (%02x/%02x) cycle "
 535			  "count: %04d\n", low ? "low" : "high", reg, mask, i);
 536	}
 537}
 538
 539static void rhine_wait_bit_high(struct rhine_private *rp, u8 reg, u8 mask)
 540{
 541	rhine_wait_bit(rp, reg, mask, false);
 542}
 543
 544static void rhine_wait_bit_low(struct rhine_private *rp, u8 reg, u8 mask)
 545{
 546	rhine_wait_bit(rp, reg, mask, true);
 547}
 548
 549static u32 rhine_get_events(struct rhine_private *rp)
 550{
 551	void __iomem *ioaddr = rp->base;
 552	u32 intr_status;
 553
 554	intr_status = ioread16(ioaddr + IntrStatus);
 555	/* On Rhine-II, Bit 3 indicates Tx descriptor write-back race. */
 556	if (rp->quirks & rqStatusWBRace)
 557		intr_status |= ioread8(ioaddr + IntrStatus2) << 16;
 558	return intr_status;
 559}
 560
 561static void rhine_ack_events(struct rhine_private *rp, u32 mask)
 562{
 563	void __iomem *ioaddr = rp->base;
 564
 565	if (rp->quirks & rqStatusWBRace)
 566		iowrite8(mask >> 16, ioaddr + IntrStatus2);
 567	iowrite16(mask, ioaddr + IntrStatus);
 568}
 569
 570/*
 571 * Get power related registers into sane state.
 572 * Notify user about past WOL event.
 573 */
 574static void rhine_power_init(struct net_device *dev)
 575{
 576	struct rhine_private *rp = netdev_priv(dev);
 577	void __iomem *ioaddr = rp->base;
 578	u16 wolstat;
 579
 580	if (rp->quirks & rqWOL) {
 581		/* Make sure chip is in power state D0 */
 582		iowrite8(ioread8(ioaddr + StickyHW) & 0xFC, ioaddr + StickyHW);
 583
 584		/* Disable "force PME-enable" */
 585		iowrite8(0x80, ioaddr + WOLcgClr);
 586
 587		/* Clear power-event config bits (WOL) */
 588		iowrite8(0xFF, ioaddr + WOLcrClr);
 589		/* More recent cards can manage two additional patterns */
 590		if (rp->quirks & rq6patterns)
 591			iowrite8(0x03, ioaddr + WOLcrClr1);
 592
 593		/* Save power-event status bits */
 594		wolstat = ioread8(ioaddr + PwrcsrSet);
 595		if (rp->quirks & rq6patterns)
 596			wolstat |= (ioread8(ioaddr + PwrcsrSet1) & 0x03) << 8;
 597
 598		/* Clear power-event status bits */
 599		iowrite8(0xFF, ioaddr + PwrcsrClr);
 600		if (rp->quirks & rq6patterns)
 601			iowrite8(0x03, ioaddr + PwrcsrClr1);
 602
 603		if (wolstat) {
 604			char *reason;
 605			switch (wolstat) {
 606			case WOLmagic:
 607				reason = "Magic packet";
 608				break;
 609			case WOLlnkon:
 610				reason = "Link went up";
 611				break;
 612			case WOLlnkoff:
 613				reason = "Link went down";
 614				break;
 615			case WOLucast:
 616				reason = "Unicast packet";
 617				break;
 618			case WOLbmcast:
 619				reason = "Multicast/broadcast packet";
 620				break;
 621			default:
 622				reason = "Unknown";
 623			}
 624			netdev_info(dev, "Woke system up. Reason: %s\n",
 625				    reason);
 626		}
 627	}
 628}
 629
 630static void rhine_chip_reset(struct net_device *dev)
 631{
 632	struct rhine_private *rp = netdev_priv(dev);
 633	void __iomem *ioaddr = rp->base;
 634	u8 cmd1;
 635
 636	iowrite8(Cmd1Reset, ioaddr + ChipCmd1);
 637	IOSYNC;
 638
 639	if (ioread8(ioaddr + ChipCmd1) & Cmd1Reset) {
 640		netdev_info(dev, "Reset not complete yet. Trying harder.\n");
 641
 642		/* Force reset */
 643		if (rp->quirks & rqForceReset)
 644			iowrite8(0x40, ioaddr + MiscCmd);
 645
 646		/* Reset can take somewhat longer (rare) */
 647		rhine_wait_bit_low(rp, ChipCmd1, Cmd1Reset);
 648	}
 649
 650	cmd1 = ioread8(ioaddr + ChipCmd1);
 651	netif_info(rp, hw, dev, "Reset %s\n", (cmd1 & Cmd1Reset) ?
 652		   "failed" : "succeeded");
 653}
 654
 655static void enable_mmio(long pioaddr, u32 quirks)
 656{
 657	int n;
 658
 659	if (quirks & rqNeedEnMMIO) {
 660		if (quirks & rqRhineI) {
 661			/* More recent docs say that this bit is reserved */
 662			n = inb(pioaddr + ConfigA) | 0x20;
 663			outb(n, pioaddr + ConfigA);
 664		} else {
 665			n = inb(pioaddr + ConfigD) | 0x80;
 666			outb(n, pioaddr + ConfigD);
 667		}
 668	}
 669}
 670
 671static inline int verify_mmio(struct device *hwdev,
 672			      long pioaddr,
 673			      void __iomem *ioaddr,
 674			      u32 quirks)
 675{
 676	if (quirks & rqNeedEnMMIO) {
 677		int i = 0;
 678
 679		/* Check that selected MMIO registers match the PIO ones */
 680		while (mmio_verify_registers[i]) {
 681			int reg = mmio_verify_registers[i++];
 682			unsigned char a = inb(pioaddr+reg);
 683			unsigned char b = readb(ioaddr+reg);
 684
 685			if (a != b) {
 686				dev_err(hwdev,
 687					"MMIO do not match PIO [%02x] (%02x != %02x)\n",
 688					reg, a, b);
 689				return -EIO;
 690			}
 691		}
 692	}
 693	return 0;
 694}
 695
 696/*
 697 * Loads bytes 0x00-0x05, 0x6E-0x6F, 0x78-0x7B from EEPROM
 698 * (plus 0x6C for Rhine-I/II)
 699 */
 700static void rhine_reload_eeprom(long pioaddr, struct net_device *dev)
 701{
 702	struct rhine_private *rp = netdev_priv(dev);
 703	void __iomem *ioaddr = rp->base;
 704	int i;
 705
 706	outb(0x20, pioaddr + MACRegEEcsr);
 707	for (i = 0; i < 1024; i++) {
 708		if (!(inb(pioaddr + MACRegEEcsr) & 0x20))
 709			break;
 710	}
 711	if (i > 512)
 712		pr_info("%4d cycles used @ %s:%d\n", i, __func__, __LINE__);
 713
 714	/*
 715	 * Reloading from EEPROM overwrites ConfigA-D, so we must re-enable
 716	 * MMIO. If reloading EEPROM was done first this could be avoided, but
 717	 * it is not known if that still works with the "win98-reboot" problem.
 718	 */
 719	enable_mmio(pioaddr, rp->quirks);
 720
 721	/* Turn off EEPROM-controlled wake-up (magic packet) */
 722	if (rp->quirks & rqWOL)
 723		iowrite8(ioread8(ioaddr + ConfigA) & 0xFC, ioaddr + ConfigA);
 724
 725}
 726
 727#ifdef CONFIG_NET_POLL_CONTROLLER
 728static void rhine_poll(struct net_device *dev)
 729{
 730	struct rhine_private *rp = netdev_priv(dev);
 731	const int irq = rp->irq;
 732
 733	disable_irq(irq);
 734	rhine_interrupt(irq, dev);
 735	enable_irq(irq);
 736}
 737#endif
 738
 739static void rhine_kick_tx_threshold(struct rhine_private *rp)
 740{
 741	if (rp->tx_thresh < 0xe0) {
 742		void __iomem *ioaddr = rp->base;
 743
 744		rp->tx_thresh += 0x20;
 745		BYTE_REG_BITS_SET(rp->tx_thresh, 0x80, ioaddr + TxConfig);
 746	}
 747}
 748
 749static void rhine_tx_err(struct rhine_private *rp, u32 status)
 750{
 751	struct net_device *dev = rp->dev;
 752
 753	if (status & IntrTxAborted) {
 754		netif_info(rp, tx_err, dev,
 755			   "Abort %08x, frame dropped\n", status);
 756	}
 757
 758	if (status & IntrTxUnderrun) {
 759		rhine_kick_tx_threshold(rp);
 760		netif_info(rp, tx_err ,dev, "Transmitter underrun, "
 761			   "Tx threshold now %02x\n", rp->tx_thresh);
 762	}
 763
 764	if (status & IntrTxDescRace)
 765		netif_info(rp, tx_err, dev, "Tx descriptor write-back race\n");
 766
 767	if ((status & IntrTxError) &&
 768	    (status & (IntrTxAborted | IntrTxUnderrun | IntrTxDescRace)) == 0) {
 769		rhine_kick_tx_threshold(rp);
 770		netif_info(rp, tx_err, dev, "Unspecified error. "
 771			   "Tx threshold now %02x\n", rp->tx_thresh);
 772	}
 773
 774	rhine_restart_tx(dev);
 775}
 776
 777static void rhine_update_rx_crc_and_missed_errord(struct rhine_private *rp)
 778{
 779	void __iomem *ioaddr = rp->base;
 780	struct net_device_stats *stats = &rp->dev->stats;
 781
 782	stats->rx_crc_errors    += ioread16(ioaddr + RxCRCErrs);
 783	stats->rx_missed_errors += ioread16(ioaddr + RxMissed);
 784
 785	/*
 786	 * Clears the "tally counters" for CRC errors and missed frames(?).
 787	 * It has been reported that some chips need a write of 0 to clear
 788	 * these, for others the counters are set to 1 when written to and
 789	 * instead cleared when read. So we clear them both ways ...
 790	 */
 791	iowrite32(0, ioaddr + RxMissed);
 792	ioread16(ioaddr + RxCRCErrs);
 793	ioread16(ioaddr + RxMissed);
 794}
 795
 796#define RHINE_EVENT_NAPI_RX	(IntrRxDone | \
 797				 IntrRxErr | \
 798				 IntrRxEmpty | \
 799				 IntrRxOverflow	| \
 800				 IntrRxDropped | \
 801				 IntrRxNoBuf | \
 802				 IntrRxWakeUp)
 803
 804#define RHINE_EVENT_NAPI_TX_ERR	(IntrTxError | \
 805				 IntrTxAborted | \
 806				 IntrTxUnderrun | \
 807				 IntrTxDescRace)
 808#define RHINE_EVENT_NAPI_TX	(IntrTxDone | RHINE_EVENT_NAPI_TX_ERR)
 809
 810#define RHINE_EVENT_NAPI	(RHINE_EVENT_NAPI_RX | \
 811				 RHINE_EVENT_NAPI_TX | \
 812				 IntrStatsMax)
 813#define RHINE_EVENT_SLOW	(IntrPCIErr | IntrLinkChange)
 814#define RHINE_EVENT		(RHINE_EVENT_NAPI | RHINE_EVENT_SLOW)
 815
 816static int rhine_napipoll(struct napi_struct *napi, int budget)
 817{
 818	struct rhine_private *rp = container_of(napi, struct rhine_private, napi);
 819	struct net_device *dev = rp->dev;
 820	void __iomem *ioaddr = rp->base;
 821	u16 enable_mask = RHINE_EVENT & 0xffff;
 822	int work_done = 0;
 823	u32 status;
 824
 825	status = rhine_get_events(rp);
 826	rhine_ack_events(rp, status & ~RHINE_EVENT_SLOW);
 827
 828	if (status & RHINE_EVENT_NAPI_RX)
 829		work_done += rhine_rx(dev, budget);
 830
 831	if (status & RHINE_EVENT_NAPI_TX) {
 832		if (status & RHINE_EVENT_NAPI_TX_ERR) {
 833			/* Avoid scavenging before Tx engine turned off */
 834			rhine_wait_bit_low(rp, ChipCmd, CmdTxOn);
 835			if (ioread8(ioaddr + ChipCmd) & CmdTxOn)
 836				netif_warn(rp, tx_err, dev, "Tx still on\n");
 837		}
 838
 839		rhine_tx(dev);
 840
 841		if (status & RHINE_EVENT_NAPI_TX_ERR)
 842			rhine_tx_err(rp, status);
 843	}
 844
 845	if (status & IntrStatsMax) {
 846		spin_lock(&rp->lock);
 847		rhine_update_rx_crc_and_missed_errord(rp);
 848		spin_unlock(&rp->lock);
 849	}
 850
 851	if (status & RHINE_EVENT_SLOW) {
 852		enable_mask &= ~RHINE_EVENT_SLOW;
 853		schedule_work(&rp->slow_event_task);
 854	}
 855
 856	if (work_done < budget) {
 857		napi_complete_done(napi, work_done);
 858		iowrite16(enable_mask, ioaddr + IntrEnable);
 859	}
 860	return work_done;
 861}
 862
 863static void rhine_hw_init(struct net_device *dev, long pioaddr)
 864{
 865	struct rhine_private *rp = netdev_priv(dev);
 866
 867	/* Reset the chip to erase previous misconfiguration. */
 868	rhine_chip_reset(dev);
 869
 870	/* Rhine-I needs extra time to recuperate before EEPROM reload */
 871	if (rp->quirks & rqRhineI)
 872		msleep(5);
 873
 874	/* Reload EEPROM controlled bytes cleared by soft reset */
 875	if (dev_is_pci(dev->dev.parent))
 876		rhine_reload_eeprom(pioaddr, dev);
 877}
 878
 879static const struct net_device_ops rhine_netdev_ops = {
 880	.ndo_open		 = rhine_open,
 881	.ndo_stop		 = rhine_close,
 882	.ndo_start_xmit		 = rhine_start_tx,
 883	.ndo_get_stats64	 = rhine_get_stats64,
 884	.ndo_set_rx_mode	 = rhine_set_rx_mode,
 885	.ndo_validate_addr	 = eth_validate_addr,
 886	.ndo_set_mac_address 	 = eth_mac_addr,
 887	.ndo_do_ioctl		 = netdev_ioctl,
 888	.ndo_tx_timeout 	 = rhine_tx_timeout,
 889	.ndo_vlan_rx_add_vid	 = rhine_vlan_rx_add_vid,
 890	.ndo_vlan_rx_kill_vid	 = rhine_vlan_rx_kill_vid,
 891#ifdef CONFIG_NET_POLL_CONTROLLER
 892	.ndo_poll_controller	 = rhine_poll,
 893#endif
 894};
 895
 896static int rhine_init_one_common(struct device *hwdev, u32 quirks,
 897				 long pioaddr, void __iomem *ioaddr, int irq)
 898{
 899	struct net_device *dev;
 900	struct rhine_private *rp;
 901	int i, rc, phy_id;
 902	const char *name;
 903
 904	/* this should always be supported */
 905	rc = dma_set_mask(hwdev, DMA_BIT_MASK(32));
 906	if (rc) {
 907		dev_err(hwdev, "32-bit DMA addresses not supported by the card!?\n");
 908		goto err_out;
 909	}
 910
 911	dev = alloc_etherdev(sizeof(struct rhine_private));
 912	if (!dev) {
 913		rc = -ENOMEM;
 914		goto err_out;
 915	}
 916	SET_NETDEV_DEV(dev, hwdev);
 917
 918	rp = netdev_priv(dev);
 919	rp->dev = dev;
 920	rp->quirks = quirks;
 921	rp->pioaddr = pioaddr;
 922	rp->base = ioaddr;
 923	rp->irq = irq;
 924	rp->msg_enable = netif_msg_init(debug, RHINE_MSG_DEFAULT);
 925
 926	phy_id = rp->quirks & rqIntPHY ? 1 : 0;
 927
 928	u64_stats_init(&rp->tx_stats.syncp);
 929	u64_stats_init(&rp->rx_stats.syncp);
 930
 931	/* Get chip registers into a sane state */
 932	rhine_power_init(dev);
 933	rhine_hw_init(dev, pioaddr);
 934
 935	for (i = 0; i < 6; i++)
 936		dev->dev_addr[i] = ioread8(ioaddr + StationAddr + i);
 937
 938	if (!is_valid_ether_addr(dev->dev_addr)) {
 939		/* Report it and use a random ethernet address instead */
 940		netdev_err(dev, "Invalid MAC address: %pM\n", dev->dev_addr);
 941		eth_hw_addr_random(dev);
 942		netdev_info(dev, "Using random MAC address: %pM\n",
 943			    dev->dev_addr);
 944	}
 945
 946	/* For Rhine-I/II, phy_id is loaded from EEPROM */
 947	if (!phy_id)
 948		phy_id = ioread8(ioaddr + 0x6C);
 949
 950	spin_lock_init(&rp->lock);
 951	mutex_init(&rp->task_lock);
 952	INIT_WORK(&rp->reset_task, rhine_reset_task);
 953	INIT_WORK(&rp->slow_event_task, rhine_slow_event_task);
 954
 955	rp->mii_if.dev = dev;
 956	rp->mii_if.mdio_read = mdio_read;
 957	rp->mii_if.mdio_write = mdio_write;
 958	rp->mii_if.phy_id_mask = 0x1f;
 959	rp->mii_if.reg_num_mask = 0x1f;
 960
 961	/* The chip-specific entries in the device structure. */
 962	dev->netdev_ops = &rhine_netdev_ops;
 963	dev->ethtool_ops = &netdev_ethtool_ops;
 964	dev->watchdog_timeo = TX_TIMEOUT;
 965
 966	netif_napi_add(dev, &rp->napi, rhine_napipoll, 64);
 967
 968	if (rp->quirks & rqRhineI)
 969		dev->features |= NETIF_F_SG|NETIF_F_HW_CSUM;
 970
 971	if (rp->quirks & rqMgmt)
 972		dev->features |= NETIF_F_HW_VLAN_CTAG_TX |
 973				 NETIF_F_HW_VLAN_CTAG_RX |
 974				 NETIF_F_HW_VLAN_CTAG_FILTER;
 975
 976	/* dev->name not defined before register_netdev()! */
 977	rc = register_netdev(dev);
 978	if (rc)
 979		goto err_out_free_netdev;
 980
 981	if (rp->quirks & rqRhineI)
 982		name = "Rhine";
 983	else if (rp->quirks & rqStatusWBRace)
 984		name = "Rhine II";
 985	else if (rp->quirks & rqMgmt)
 986		name = "Rhine III (Management Adapter)";
 987	else
 988		name = "Rhine III";
 989
 990	netdev_info(dev, "VIA %s at %p, %pM, IRQ %d\n",
 991		    name, ioaddr, dev->dev_addr, rp->irq);
 992
 993	dev_set_drvdata(hwdev, dev);
 994
 995	{
 996		u16 mii_cmd;
 997		int mii_status = mdio_read(dev, phy_id, 1);
 998		mii_cmd = mdio_read(dev, phy_id, MII_BMCR) & ~BMCR_ISOLATE;
 999		mdio_write(dev, phy_id, MII_BMCR, mii_cmd);
1000		if (mii_status != 0xffff && mii_status != 0x0000) {
1001			rp->mii_if.advertising = mdio_read(dev, phy_id, 4);
1002			netdev_info(dev,
1003				    "MII PHY found at address %d, status 0x%04x advertising %04x Link %04x\n",
1004				    phy_id,
1005				    mii_status, rp->mii_if.advertising,
1006				    mdio_read(dev, phy_id, 5));
1007
1008			/* set IFF_RUNNING */
1009			if (mii_status & BMSR_LSTATUS)
1010				netif_carrier_on(dev);
1011			else
1012				netif_carrier_off(dev);
1013
1014		}
1015	}
1016	rp->mii_if.phy_id = phy_id;
1017	if (avoid_D3)
1018		netif_info(rp, probe, dev, "No D3 power state at shutdown\n");
1019
1020	return 0;
1021
1022err_out_free_netdev:
1023	free_netdev(dev);
1024err_out:
1025	return rc;
1026}
1027
1028static int rhine_init_one_pci(struct pci_dev *pdev,
1029			      const struct pci_device_id *ent)
1030{
1031	struct device *hwdev = &pdev->dev;
1032	int rc;
1033	long pioaddr, memaddr;
1034	void __iomem *ioaddr;
1035	int io_size = pdev->revision < VTunknown0 ? 128 : 256;
1036
1037/* This driver was written to use PCI memory space. Some early versions
1038 * of the Rhine may only work correctly with I/O space accesses.
1039 * TODO: determine for which revisions this is true and assign the flag
1040 *	 in code as opposed to this Kconfig option (???)
1041 */
1042#ifdef CONFIG_VIA_RHINE_MMIO
1043	u32 quirks = rqNeedEnMMIO;
1044#else
1045	u32 quirks = 0;
1046#endif
1047
1048	rc = pci_enable_device(pdev);
1049	if (rc)
1050		goto err_out;
1051
1052	if (pdev->revision < VTunknown0) {
1053		quirks |= rqRhineI;
1054	} else if (pdev->revision >= VT6102) {
1055		quirks |= rqWOL | rqForceReset;
1056		if (pdev->revision < VT6105) {
1057			quirks |= rqStatusWBRace;
1058		} else {
1059			quirks |= rqIntPHY;
1060			if (pdev->revision >= VT6105_B0)
1061				quirks |= rq6patterns;
1062			if (pdev->revision >= VT6105M)
1063				quirks |= rqMgmt;
1064		}
1065	}
1066
1067	/* sanity check */
1068	if ((pci_resource_len(pdev, 0) < io_size) ||
1069	    (pci_resource_len(pdev, 1) < io_size)) {
1070		rc = -EIO;
1071		dev_err(hwdev, "Insufficient PCI resources, aborting\n");
1072		goto err_out_pci_disable;
1073	}
1074
1075	pioaddr = pci_resource_start(pdev, 0);
1076	memaddr = pci_resource_start(pdev, 1);
1077
1078	pci_set_master(pdev);
1079
1080	rc = pci_request_regions(pdev, DRV_NAME);
1081	if (rc)
1082		goto err_out_pci_disable;
1083
1084	ioaddr = pci_iomap(pdev, (quirks & rqNeedEnMMIO ? 1 : 0), io_size);
1085	if (!ioaddr) {
1086		rc = -EIO;
1087		dev_err(hwdev,
1088			"ioremap failed for device %s, region 0x%X @ 0x%lX\n",
1089			dev_name(hwdev), io_size, memaddr);
1090		goto err_out_free_res;
1091	}
1092
1093	enable_mmio(pioaddr, quirks);
1094
1095	rc = verify_mmio(hwdev, pioaddr, ioaddr, quirks);
1096	if (rc)
1097		goto err_out_unmap;
1098
1099	rc = rhine_init_one_common(&pdev->dev, quirks,
1100				   pioaddr, ioaddr, pdev->irq);
1101	if (!rc)
1102		return 0;
1103
1104err_out_unmap:
1105	pci_iounmap(pdev, ioaddr);
1106err_out_free_res:
1107	pci_release_regions(pdev);
1108err_out_pci_disable:
1109	pci_disable_device(pdev);
1110err_out:
1111	return rc;
1112}
1113
1114static int rhine_init_one_platform(struct platform_device *pdev)
1115{
1116	const struct of_device_id *match;
1117	const u32 *quirks;
1118	int irq;
1119	void __iomem *ioaddr;
1120
1121	match = of_match_device(rhine_of_tbl, &pdev->dev);
1122	if (!match)
1123		return -EINVAL;
1124
1125	ioaddr = devm_platform_ioremap_resource(pdev, 0);
1126	if (IS_ERR(ioaddr))
1127		return PTR_ERR(ioaddr);
1128
1129	irq = irq_of_parse_and_map(pdev->dev.of_node, 0);
1130	if (!irq)
1131		return -EINVAL;
1132
1133	quirks = match->data;
1134	if (!quirks)
1135		return -EINVAL;
1136
1137	return rhine_init_one_common(&pdev->dev, *quirks,
1138				     (long)ioaddr, ioaddr, irq);
1139}
1140
1141static int alloc_ring(struct net_device* dev)
1142{
1143	struct rhine_private *rp = netdev_priv(dev);
1144	struct device *hwdev = dev->dev.parent;
1145	void *ring;
1146	dma_addr_t ring_dma;
1147
1148	ring = dma_alloc_coherent(hwdev,
1149				  RX_RING_SIZE * sizeof(struct rx_desc) +
1150				  TX_RING_SIZE * sizeof(struct tx_desc),
1151				  &ring_dma,
1152				  GFP_ATOMIC);
1153	if (!ring) {
1154		netdev_err(dev, "Could not allocate DMA memory\n");
1155		return -ENOMEM;
1156	}
1157	if (rp->quirks & rqRhineI) {
1158		rp->tx_bufs = dma_alloc_coherent(hwdev,
1159						 PKT_BUF_SZ * TX_RING_SIZE,
1160						 &rp->tx_bufs_dma,
1161						 GFP_ATOMIC);
1162		if (rp->tx_bufs == NULL) {
1163			dma_free_coherent(hwdev,
1164					  RX_RING_SIZE * sizeof(struct rx_desc) +
1165					  TX_RING_SIZE * sizeof(struct tx_desc),
1166					  ring, ring_dma);
1167			return -ENOMEM;
1168		}
1169	}
1170
1171	rp->rx_ring = ring;
1172	rp->tx_ring = ring + RX_RING_SIZE * sizeof(struct rx_desc);
1173	rp->rx_ring_dma = ring_dma;
1174	rp->tx_ring_dma = ring_dma + RX_RING_SIZE * sizeof(struct rx_desc);
1175
1176	return 0;
1177}
1178
1179static void free_ring(struct net_device* dev)
1180{
1181	struct rhine_private *rp = netdev_priv(dev);
1182	struct device *hwdev = dev->dev.parent;
1183
1184	dma_free_coherent(hwdev,
1185			  RX_RING_SIZE * sizeof(struct rx_desc) +
1186			  TX_RING_SIZE * sizeof(struct tx_desc),
1187			  rp->rx_ring, rp->rx_ring_dma);
1188	rp->tx_ring = NULL;
1189
1190	if (rp->tx_bufs)
1191		dma_free_coherent(hwdev, PKT_BUF_SZ * TX_RING_SIZE,
1192				  rp->tx_bufs, rp->tx_bufs_dma);
1193
1194	rp->tx_bufs = NULL;
1195
1196}
1197
1198struct rhine_skb_dma {
1199	struct sk_buff *skb;
1200	dma_addr_t dma;
1201};
1202
1203static inline int rhine_skb_dma_init(struct net_device *dev,
1204				     struct rhine_skb_dma *sd)
1205{
1206	struct rhine_private *rp = netdev_priv(dev);
1207	struct device *hwdev = dev->dev.parent;
1208	const int size = rp->rx_buf_sz;
1209
1210	sd->skb = netdev_alloc_skb(dev, size);
1211	if (!sd->skb)
1212		return -ENOMEM;
1213
1214	sd->dma = dma_map_single(hwdev, sd->skb->data, size, DMA_FROM_DEVICE);
1215	if (unlikely(dma_mapping_error(hwdev, sd->dma))) {
1216		netif_err(rp, drv, dev, "Rx DMA mapping failure\n");
1217		dev_kfree_skb_any(sd->skb);
1218		return -EIO;
1219	}
1220
1221	return 0;
1222}
1223
1224static void rhine_reset_rbufs(struct rhine_private *rp)
1225{
1226	int i;
1227
1228	rp->cur_rx = 0;
1229
1230	for (i = 0; i < RX_RING_SIZE; i++)
1231		rp->rx_ring[i].rx_status = cpu_to_le32(DescOwn);
1232}
1233
1234static inline void rhine_skb_dma_nic_store(struct rhine_private *rp,
1235					   struct rhine_skb_dma *sd, int entry)
1236{
1237	rp->rx_skbuff_dma[entry] = sd->dma;
1238	rp->rx_skbuff[entry] = sd->skb;
1239
1240	rp->rx_ring[entry].addr = cpu_to_le32(sd->dma);
1241	dma_wmb();
1242}
1243
1244static void free_rbufs(struct net_device* dev);
1245
1246static int alloc_rbufs(struct net_device *dev)
1247{
1248	struct rhine_private *rp = netdev_priv(dev);
1249	dma_addr_t next;
1250	int rc, i;
1251
1252	rp->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32);
1253	next = rp->rx_ring_dma;
1254
1255	/* Init the ring entries */
1256	for (i = 0; i < RX_RING_SIZE; i++) {
1257		rp->rx_ring[i].rx_status = 0;
1258		rp->rx_ring[i].desc_length = cpu_to_le32(rp->rx_buf_sz);
1259		next += sizeof(struct rx_desc);
1260		rp->rx_ring[i].next_desc = cpu_to_le32(next);
1261		rp->rx_skbuff[i] = NULL;
1262	}
1263	/* Mark the last entry as wrapping the ring. */
1264	rp->rx_ring[i-1].next_desc = cpu_to_le32(rp->rx_ring_dma);
1265
1266	/* Fill in the Rx buffers.  Handle allocation failure gracefully. */
1267	for (i = 0; i < RX_RING_SIZE; i++) {
1268		struct rhine_skb_dma sd;
1269
1270		rc = rhine_skb_dma_init(dev, &sd);
1271		if (rc < 0) {
1272			free_rbufs(dev);
1273			goto out;
1274		}
1275
1276		rhine_skb_dma_nic_store(rp, &sd, i);
1277	}
1278
1279	rhine_reset_rbufs(rp);
1280out:
1281	return rc;
1282}
1283
1284static void free_rbufs(struct net_device* dev)
1285{
1286	struct rhine_private *rp = netdev_priv(dev);
1287	struct device *hwdev = dev->dev.parent;
1288	int i;
1289
1290	/* Free all the skbuffs in the Rx queue. */
1291	for (i = 0; i < RX_RING_SIZE; i++) {
1292		rp->rx_ring[i].rx_status = 0;
1293		rp->rx_ring[i].addr = cpu_to_le32(0xBADF00D0); /* An invalid address. */
1294		if (rp->rx_skbuff[i]) {
1295			dma_unmap_single(hwdev,
1296					 rp->rx_skbuff_dma[i],
1297					 rp->rx_buf_sz, DMA_FROM_DEVICE);
1298			dev_kfree_skb(rp->rx_skbuff[i]);
1299		}
1300		rp->rx_skbuff[i] = NULL;
1301	}
1302}
1303
1304static void alloc_tbufs(struct net_device* dev)
1305{
1306	struct rhine_private *rp = netdev_priv(dev);
1307	dma_addr_t next;
1308	int i;
1309
1310	rp->dirty_tx = rp->cur_tx = 0;
1311	next = rp->tx_ring_dma;
1312	for (i = 0; i < TX_RING_SIZE; i++) {
1313		rp->tx_skbuff[i] = NULL;
1314		rp->tx_ring[i].tx_status = 0;
1315		rp->tx_ring[i].desc_length = cpu_to_le32(TXDESC);
1316		next += sizeof(struct tx_desc);
1317		rp->tx_ring[i].next_desc = cpu_to_le32(next);
1318		if (rp->quirks & rqRhineI)
1319			rp->tx_buf[i] = &rp->tx_bufs[i * PKT_BUF_SZ];
1320	}
1321	rp->tx_ring[i-1].next_desc = cpu_to_le32(rp->tx_ring_dma);
1322
1323	netdev_reset_queue(dev);
1324}
1325
1326static void free_tbufs(struct net_device* dev)
1327{
1328	struct rhine_private *rp = netdev_priv(dev);
1329	struct device *hwdev = dev->dev.parent;
1330	int i;
1331
1332	for (i = 0; i < TX_RING_SIZE; i++) {
1333		rp->tx_ring[i].tx_status = 0;
1334		rp->tx_ring[i].desc_length = cpu_to_le32(TXDESC);
1335		rp->tx_ring[i].addr = cpu_to_le32(0xBADF00D0); /* An invalid address. */
1336		if (rp->tx_skbuff[i]) {
1337			if (rp->tx_skbuff_dma[i]) {
1338				dma_unmap_single(hwdev,
1339						 rp->tx_skbuff_dma[i],
1340						 rp->tx_skbuff[i]->len,
1341						 DMA_TO_DEVICE);
1342			}
1343			dev_kfree_skb(rp->tx_skbuff[i]);
1344		}
1345		rp->tx_skbuff[i] = NULL;
1346		rp->tx_buf[i] = NULL;
1347	}
1348}
1349
1350static void rhine_check_media(struct net_device *dev, unsigned int init_media)
1351{
1352	struct rhine_private *rp = netdev_priv(dev);
1353	void __iomem *ioaddr = rp->base;
1354
1355	if (!rp->mii_if.force_media)
1356		mii_check_media(&rp->mii_if, netif_msg_link(rp), init_media);
1357
1358	if (rp->mii_if.full_duplex)
1359	    iowrite8(ioread8(ioaddr + ChipCmd1) | Cmd1FDuplex,
1360		   ioaddr + ChipCmd1);
1361	else
1362	    iowrite8(ioread8(ioaddr + ChipCmd1) & ~Cmd1FDuplex,
1363		   ioaddr + ChipCmd1);
1364
1365	netif_info(rp, link, dev, "force_media %d, carrier %d\n",
1366		   rp->mii_if.force_media, netif_carrier_ok(dev));
1367}
1368
1369/* Called after status of force_media possibly changed */
1370static void rhine_set_carrier(struct mii_if_info *mii)
1371{
1372	struct net_device *dev = mii->dev;
1373	struct rhine_private *rp = netdev_priv(dev);
1374
1375	if (mii->force_media) {
1376		/* autoneg is off: Link is always assumed to be up */
1377		if (!netif_carrier_ok(dev))
1378			netif_carrier_on(dev);
1379	}
1380
1381	rhine_check_media(dev, 0);
1382
1383	netif_info(rp, link, dev, "force_media %d, carrier %d\n",
1384		   mii->force_media, netif_carrier_ok(dev));
1385}
1386
1387/**
1388 * rhine_set_cam - set CAM multicast filters
1389 * @ioaddr: register block of this Rhine
1390 * @idx: multicast CAM index [0..MCAM_SIZE-1]
1391 * @addr: multicast address (6 bytes)
1392 *
1393 * Load addresses into multicast filters.
1394 */
1395static void rhine_set_cam(void __iomem *ioaddr, int idx, u8 *addr)
1396{
1397	int i;
1398
1399	iowrite8(CAMC_CAMEN, ioaddr + CamCon);
1400	wmb();
1401
1402	/* Paranoid -- idx out of range should never happen */
1403	idx &= (MCAM_SIZE - 1);
1404
1405	iowrite8((u8) idx, ioaddr + CamAddr);
1406
1407	for (i = 0; i < 6; i++, addr++)
1408		iowrite8(*addr, ioaddr + MulticastFilter0 + i);
1409	udelay(10);
1410	wmb();
1411
1412	iowrite8(CAMC_CAMWR | CAMC_CAMEN, ioaddr + CamCon);
1413	udelay(10);
1414
1415	iowrite8(0, ioaddr + CamCon);
1416}
1417
1418/**
1419 * rhine_set_vlan_cam - set CAM VLAN filters
1420 * @ioaddr: register block of this Rhine
1421 * @idx: VLAN CAM index [0..VCAM_SIZE-1]
1422 * @addr: VLAN ID (2 bytes)
1423 *
1424 * Load addresses into VLAN filters.
1425 */
1426static void rhine_set_vlan_cam(void __iomem *ioaddr, int idx, u8 *addr)
1427{
1428	iowrite8(CAMC_CAMEN | CAMC_VCAMSL, ioaddr + CamCon);
1429	wmb();
1430
1431	/* Paranoid -- idx out of range should never happen */
1432	idx &= (VCAM_SIZE - 1);
1433
1434	iowrite8((u8) idx, ioaddr + CamAddr);
1435
1436	iowrite16(*((u16 *) addr), ioaddr + MulticastFilter0 + 6);
1437	udelay(10);
1438	wmb();
1439
1440	iowrite8(CAMC_CAMWR | CAMC_CAMEN, ioaddr + CamCon);
1441	udelay(10);
1442
1443	iowrite8(0, ioaddr + CamCon);
1444}
1445
1446/**
1447 * rhine_set_cam_mask - set multicast CAM mask
1448 * @ioaddr: register block of this Rhine
1449 * @mask: multicast CAM mask
1450 *
1451 * Mask sets multicast filters active/inactive.
1452 */
1453static void rhine_set_cam_mask(void __iomem *ioaddr, u32 mask)
1454{
1455	iowrite8(CAMC_CAMEN, ioaddr + CamCon);
1456	wmb();
1457
1458	/* write mask */
1459	iowrite32(mask, ioaddr + CamMask);
1460
1461	/* disable CAMEN */
1462	iowrite8(0, ioaddr + CamCon);
1463}
1464
1465/**
1466 * rhine_set_vlan_cam_mask - set VLAN CAM mask
1467 * @ioaddr: register block of this Rhine
1468 * @mask: VLAN CAM mask
1469 *
1470 * Mask sets VLAN filters active/inactive.
1471 */
1472static void rhine_set_vlan_cam_mask(void __iomem *ioaddr, u32 mask)
1473{
1474	iowrite8(CAMC_CAMEN | CAMC_VCAMSL, ioaddr + CamCon);
1475	wmb();
1476
1477	/* write mask */
1478	iowrite32(mask, ioaddr + CamMask);
1479
1480	/* disable CAMEN */
1481	iowrite8(0, ioaddr + CamCon);
1482}
1483
1484/**
1485 * rhine_init_cam_filter - initialize CAM filters
1486 * @dev: network device
1487 *
1488 * Initialize (disable) hardware VLAN and multicast support on this
1489 * Rhine.
1490 */
1491static void rhine_init_cam_filter(struct net_device *dev)
1492{
1493	struct rhine_private *rp = netdev_priv(dev);
1494	void __iomem *ioaddr = rp->base;
1495
1496	/* Disable all CAMs */
1497	rhine_set_vlan_cam_mask(ioaddr, 0);
1498	rhine_set_cam_mask(ioaddr, 0);
1499
1500	/* disable hardware VLAN support */
1501	BYTE_REG_BITS_ON(TCR_PQEN, ioaddr + TxConfig);
1502	BYTE_REG_BITS_OFF(BCR1_VIDFR, ioaddr + PCIBusConfig1);
1503}
1504
1505/**
1506 * rhine_update_vcam - update VLAN CAM filters
1507 * @rp: rhine_private data of this Rhine
1508 *
1509 * Update VLAN CAM filters to match configuration change.
1510 */
1511static void rhine_update_vcam(struct net_device *dev)
1512{
1513	struct rhine_private *rp = netdev_priv(dev);
1514	void __iomem *ioaddr = rp->base;
1515	u16 vid;
1516	u32 vCAMmask = 0;	/* 32 vCAMs (6105M and better) */
1517	unsigned int i = 0;
1518
1519	for_each_set_bit(vid, rp->active_vlans, VLAN_N_VID) {
1520		rhine_set_vlan_cam(ioaddr, i, (u8 *)&vid);
1521		vCAMmask |= 1 << i;
1522		if (++i >= VCAM_SIZE)
1523			break;
1524	}
1525	rhine_set_vlan_cam_mask(ioaddr, vCAMmask);
1526}
1527
1528static int rhine_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid)
1529{
1530	struct rhine_private *rp = netdev_priv(dev);
1531
1532	spin_lock_bh(&rp->lock);
1533	set_bit(vid, rp->active_vlans);
1534	rhine_update_vcam(dev);
1535	spin_unlock_bh(&rp->lock);
1536	return 0;
1537}
1538
1539static int rhine_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, u16 vid)
1540{
1541	struct rhine_private *rp = netdev_priv(dev);
1542
1543	spin_lock_bh(&rp->lock);
1544	clear_bit(vid, rp->active_vlans);
1545	rhine_update_vcam(dev);
1546	spin_unlock_bh(&rp->lock);
1547	return 0;
1548}
1549
1550static void init_registers(struct net_device *dev)
1551{
1552	struct rhine_private *rp = netdev_priv(dev);
1553	void __iomem *ioaddr = rp->base;
1554	int i;
1555
1556	for (i = 0; i < 6; i++)
1557		iowrite8(dev->dev_addr[i], ioaddr + StationAddr + i);
1558
1559	/* Initialize other registers. */
1560	iowrite16(0x0006, ioaddr + PCIBusConfig);	/* Tune configuration??? */
1561	/* Configure initial FIFO thresholds. */
1562	iowrite8(0x20, ioaddr + TxConfig);
1563	rp->tx_thresh = 0x20;
1564	rp->rx_thresh = 0x60;		/* Written in rhine_set_rx_mode(). */
1565
1566	iowrite32(rp->rx_ring_dma, ioaddr + RxRingPtr);
1567	iowrite32(rp->tx_ring_dma, ioaddr + TxRingPtr);
1568
1569	rhine_set_rx_mode(dev);
1570
1571	if (rp->quirks & rqMgmt)
1572		rhine_init_cam_filter(dev);
1573
1574	napi_enable(&rp->napi);
1575
1576	iowrite16(RHINE_EVENT & 0xffff, ioaddr + IntrEnable);
1577
1578	iowrite16(CmdStart | CmdTxOn | CmdRxOn | (Cmd1NoTxPoll << 8),
1579	       ioaddr + ChipCmd);
1580	rhine_check_media(dev, 1);
1581}
1582
1583/* Enable MII link status auto-polling (required for IntrLinkChange) */
1584static void rhine_enable_linkmon(struct rhine_private *rp)
1585{
1586	void __iomem *ioaddr = rp->base;
1587
1588	iowrite8(0, ioaddr + MIICmd);
1589	iowrite8(MII_BMSR, ioaddr + MIIRegAddr);
1590	iowrite8(0x80, ioaddr + MIICmd);
1591
1592	rhine_wait_bit_high(rp, MIIRegAddr, 0x20);
1593
1594	iowrite8(MII_BMSR | 0x40, ioaddr + MIIRegAddr);
1595}
1596
1597/* Disable MII link status auto-polling (required for MDIO access) */
1598static void rhine_disable_linkmon(struct rhine_private *rp)
1599{
1600	void __iomem *ioaddr = rp->base;
1601
1602	iowrite8(0, ioaddr + MIICmd);
1603
1604	if (rp->quirks & rqRhineI) {
1605		iowrite8(0x01, ioaddr + MIIRegAddr);	// MII_BMSR
1606
1607		/* Can be called from ISR. Evil. */
1608		mdelay(1);
1609
1610		/* 0x80 must be set immediately before turning it off */
1611		iowrite8(0x80, ioaddr + MIICmd);
1612
1613		rhine_wait_bit_high(rp, MIIRegAddr, 0x20);
1614
1615		/* Heh. Now clear 0x80 again. */
1616		iowrite8(0, ioaddr + MIICmd);
1617	}
1618	else
1619		rhine_wait_bit_high(rp, MIIRegAddr, 0x80);
1620}
1621
1622/* Read and write over the MII Management Data I/O (MDIO) interface. */
1623
1624static int mdio_read(struct net_device *dev, int phy_id, int regnum)
1625{
1626	struct rhine_private *rp = netdev_priv(dev);
1627	void __iomem *ioaddr = rp->base;
1628	int result;
1629
1630	rhine_disable_linkmon(rp);
1631
1632	/* rhine_disable_linkmon already cleared MIICmd */
1633	iowrite8(phy_id, ioaddr + MIIPhyAddr);
1634	iowrite8(regnum, ioaddr + MIIRegAddr);
1635	iowrite8(0x40, ioaddr + MIICmd);		/* Trigger read */
1636	rhine_wait_bit_low(rp, MIICmd, 0x40);
1637	result = ioread16(ioaddr + MIIData);
1638
1639	rhine_enable_linkmon(rp);
1640	return result;
1641}
1642
1643static void mdio_write(struct net_device *dev, int phy_id, int regnum, int value)
1644{
1645	struct rhine_private *rp = netdev_priv(dev);
1646	void __iomem *ioaddr = rp->base;
1647
1648	rhine_disable_linkmon(rp);
1649
1650	/* rhine_disable_linkmon already cleared MIICmd */
1651	iowrite8(phy_id, ioaddr + MIIPhyAddr);
1652	iowrite8(regnum, ioaddr + MIIRegAddr);
1653	iowrite16(value, ioaddr + MIIData);
1654	iowrite8(0x20, ioaddr + MIICmd);		/* Trigger write */
1655	rhine_wait_bit_low(rp, MIICmd, 0x20);
1656
1657	rhine_enable_linkmon(rp);
1658}
1659
1660static void rhine_task_disable(struct rhine_private *rp)
1661{
1662	mutex_lock(&rp->task_lock);
1663	rp->task_enable = false;
1664	mutex_unlock(&rp->task_lock);
1665
1666	cancel_work_sync(&rp->slow_event_task);
1667	cancel_work_sync(&rp->reset_task);
1668}
1669
1670static void rhine_task_enable(struct rhine_private *rp)
1671{
1672	mutex_lock(&rp->task_lock);
1673	rp->task_enable = true;
1674	mutex_unlock(&rp->task_lock);
1675}
1676
1677static int rhine_open(struct net_device *dev)
1678{
1679	struct rhine_private *rp = netdev_priv(dev);
1680	void __iomem *ioaddr = rp->base;
1681	int rc;
1682
1683	rc = request_irq(rp->irq, rhine_interrupt, IRQF_SHARED, dev->name, dev);
1684	if (rc)
1685		goto out;
1686
1687	netif_dbg(rp, ifup, dev, "%s() irq %d\n", __func__, rp->irq);
1688
1689	rc = alloc_ring(dev);
1690	if (rc < 0)
1691		goto out_free_irq;
1692
1693	rc = alloc_rbufs(dev);
1694	if (rc < 0)
1695		goto out_free_ring;
1696
1697	alloc_tbufs(dev);
1698	enable_mmio(rp->pioaddr, rp->quirks);
1699	rhine_power_init(dev);
1700	rhine_chip_reset(dev);
1701	rhine_task_enable(rp);
1702	init_registers(dev);
1703
1704	netif_dbg(rp, ifup, dev, "%s() Done - status %04x MII status: %04x\n",
1705		  __func__, ioread16(ioaddr + ChipCmd),
1706		  mdio_read(dev, rp->mii_if.phy_id, MII_BMSR));
1707
1708	netif_start_queue(dev);
1709
1710out:
1711	return rc;
1712
1713out_free_ring:
1714	free_ring(dev);
1715out_free_irq:
1716	free_irq(rp->irq, dev);
1717	goto out;
1718}
1719
1720static void rhine_reset_task(struct work_struct *work)
1721{
1722	struct rhine_private *rp = container_of(work, struct rhine_private,
1723						reset_task);
1724	struct net_device *dev = rp->dev;
1725
1726	mutex_lock(&rp->task_lock);
1727
1728	if (!rp->task_enable)
1729		goto out_unlock;
1730
1731	napi_disable(&rp->napi);
1732	netif_tx_disable(dev);
1733	spin_lock_bh(&rp->lock);
1734
1735	/* clear all descriptors */
1736	free_tbufs(dev);
1737	alloc_tbufs(dev);
1738
1739	rhine_reset_rbufs(rp);
1740
1741	/* Reinitialize the hardware. */
1742	rhine_chip_reset(dev);
1743	init_registers(dev);
1744
1745	spin_unlock_bh(&rp->lock);
1746
1747	netif_trans_update(dev); /* prevent tx timeout */
1748	dev->stats.tx_errors++;
1749	netif_wake_queue(dev);
1750
1751out_unlock:
1752	mutex_unlock(&rp->task_lock);
1753}
1754
1755static void rhine_tx_timeout(struct net_device *dev, unsigned int txqueue)
1756{
1757	struct rhine_private *rp = netdev_priv(dev);
1758	void __iomem *ioaddr = rp->base;
1759
1760	netdev_warn(dev, "Transmit timed out, status %04x, PHY status %04x, resetting...\n",
1761		    ioread16(ioaddr + IntrStatus),
1762		    mdio_read(dev, rp->mii_if.phy_id, MII_BMSR));
1763
1764	schedule_work(&rp->reset_task);
1765}
1766
1767static inline bool rhine_tx_queue_full(struct rhine_private *rp)
1768{
1769	return (rp->cur_tx - rp->dirty_tx) >= TX_QUEUE_LEN;
1770}
1771
1772static netdev_tx_t rhine_start_tx(struct sk_buff *skb,
1773				  struct net_device *dev)
1774{
1775	struct rhine_private *rp = netdev_priv(dev);
1776	struct device *hwdev = dev->dev.parent;
1777	void __iomem *ioaddr = rp->base;
1778	unsigned entry;
1779
1780	/* Caution: the write order is important here, set the field
1781	   with the "ownership" bits last. */
1782
1783	/* Calculate the next Tx descriptor entry. */
1784	entry = rp->cur_tx % TX_RING_SIZE;
1785
1786	if (skb_padto(skb, ETH_ZLEN))
1787		return NETDEV_TX_OK;
1788
1789	rp->tx_skbuff[entry] = skb;
1790
1791	if ((rp->quirks & rqRhineI) &&
1792	    (((unsigned long)skb->data & 3) || skb_shinfo(skb)->nr_frags != 0 || skb->ip_summed == CHECKSUM_PARTIAL)) {
1793		/* Must use alignment buffer. */
1794		if (skb->len > PKT_BUF_SZ) {
1795			/* packet too long, drop it */
1796			dev_kfree_skb_any(skb);
1797			rp->tx_skbuff[entry] = NULL;
1798			dev->stats.tx_dropped++;
1799			return NETDEV_TX_OK;
1800		}
1801
1802		/* Padding is not copied and so must be redone. */
1803		skb_copy_and_csum_dev(skb, rp->tx_buf[entry]);
1804		if (skb->len < ETH_ZLEN)
1805			memset(rp->tx_buf[entry] + skb->len, 0,
1806			       ETH_ZLEN - skb->len);
1807		rp->tx_skbuff_dma[entry] = 0;
1808		rp->tx_ring[entry].addr = cpu_to_le32(rp->tx_bufs_dma +
1809						      (rp->tx_buf[entry] -
1810						       rp->tx_bufs));
1811	} else {
1812		rp->tx_skbuff_dma[entry] =
1813			dma_map_single(hwdev, skb->data, skb->len,
1814				       DMA_TO_DEVICE);
1815		if (dma_mapping_error(hwdev, rp->tx_skbuff_dma[entry])) {
1816			dev_kfree_skb_any(skb);
1817			rp->tx_skbuff_dma[entry] = 0;
1818			dev->stats.tx_dropped++;
1819			return NETDEV_TX_OK;
1820		}
1821		rp->tx_ring[entry].addr = cpu_to_le32(rp->tx_skbuff_dma[entry]);
1822	}
1823
1824	rp->tx_ring[entry].desc_length =
1825		cpu_to_le32(TXDESC | (skb->len >= ETH_ZLEN ? skb->len : ETH_ZLEN));
1826
1827	if (unlikely(skb_vlan_tag_present(skb))) {
1828		u16 vid_pcp = skb_vlan_tag_get(skb);
1829
1830		/* drop CFI/DEI bit, register needs VID and PCP */
1831		vid_pcp = (vid_pcp & VLAN_VID_MASK) |
1832			  ((vid_pcp & VLAN_PRIO_MASK) >> 1);
1833		rp->tx_ring[entry].tx_status = cpu_to_le32((vid_pcp) << 16);
1834		/* request tagging */
1835		rp->tx_ring[entry].desc_length |= cpu_to_le32(0x020000);
1836	}
1837	else
1838		rp->tx_ring[entry].tx_status = 0;
1839
1840	netdev_sent_queue(dev, skb->len);
1841	/* lock eth irq */
1842	dma_wmb();
1843	rp->tx_ring[entry].tx_status |= cpu_to_le32(DescOwn);
1844	wmb();
1845
1846	rp->cur_tx++;
1847	/*
1848	 * Nobody wants cur_tx write to rot for ages after the NIC will have
1849	 * seen the transmit request, especially as the transmit completion
1850	 * handler could miss it.
1851	 */
1852	smp_wmb();
1853
1854	/* Non-x86 Todo: explicitly flush cache lines here. */
1855
1856	if (skb_vlan_tag_present(skb))
1857		/* Tx queues are bits 7-0 (first Tx queue: bit 7) */
1858		BYTE_REG_BITS_ON(1 << 7, ioaddr + TQWake);
1859
1860	/* Wake the potentially-idle transmit channel */
1861	iowrite8(ioread8(ioaddr + ChipCmd1) | Cmd1TxDemand,
1862	       ioaddr + ChipCmd1);
1863	IOSYNC;
1864
1865	/* dirty_tx may be pessimistically out-of-sync. See rhine_tx. */
1866	if (rhine_tx_queue_full(rp)) {
1867		netif_stop_queue(dev);
1868		smp_rmb();
1869		/* Rejuvenate. */
1870		if (!rhine_tx_queue_full(rp))
1871			netif_wake_queue(dev);
1872	}
1873
1874	netif_dbg(rp, tx_queued, dev, "Transmit frame #%d queued in slot %d\n",
1875		  rp->cur_tx - 1, entry);
1876
1877	return NETDEV_TX_OK;
1878}
1879
1880static void rhine_irq_disable(struct rhine_private *rp)
1881{
1882	iowrite16(0x0000, rp->base + IntrEnable);
1883}
1884
1885/* The interrupt handler does all of the Rx thread work and cleans up
1886   after the Tx thread. */
1887static irqreturn_t rhine_interrupt(int irq, void *dev_instance)
1888{
1889	struct net_device *dev = dev_instance;
1890	struct rhine_private *rp = netdev_priv(dev);
1891	u32 status;
1892	int handled = 0;
1893
1894	status = rhine_get_events(rp);
1895
1896	netif_dbg(rp, intr, dev, "Interrupt, status %08x\n", status);
1897
1898	if (status & RHINE_EVENT) {
1899		handled = 1;
1900
1901		rhine_irq_disable(rp);
1902		napi_schedule(&rp->napi);
1903	}
1904
1905	if (status & ~(IntrLinkChange | IntrStatsMax | RHINE_EVENT_NAPI)) {
1906		netif_err(rp, intr, dev, "Something Wicked happened! %08x\n",
1907			  status);
1908	}
1909
1910	return IRQ_RETVAL(handled);
1911}
1912
1913/* This routine is logically part of the interrupt handler, but isolated
1914   for clarity. */
1915static void rhine_tx(struct net_device *dev)
1916{
1917	struct rhine_private *rp = netdev_priv(dev);
1918	struct device *hwdev = dev->dev.parent;
1919	unsigned int pkts_compl = 0, bytes_compl = 0;
1920	unsigned int dirty_tx = rp->dirty_tx;
1921	unsigned int cur_tx;
1922	struct sk_buff *skb;
1923
1924	/*
1925	 * The race with rhine_start_tx does not matter here as long as the
1926	 * driver enforces a value of cur_tx that was relevant when the
1927	 * packet was scheduled to the network chipset.
1928	 * Executive summary: smp_rmb() balances smp_wmb() in rhine_start_tx.
1929	 */
1930	smp_rmb();
1931	cur_tx = rp->cur_tx;
1932	/* find and cleanup dirty tx descriptors */
1933	while (dirty_tx != cur_tx) {
1934		unsigned int entry = dirty_tx % TX_RING_SIZE;
1935		u32 txstatus = le32_to_cpu(rp->tx_ring[entry].tx_status);
1936
1937		netif_dbg(rp, tx_done, dev, "Tx scavenge %d status %08x\n",
1938			  entry, txstatus);
1939		if (txstatus & DescOwn)
1940			break;
1941		skb = rp->tx_skbuff[entry];
1942		if (txstatus & 0x8000) {
1943			netif_dbg(rp, tx_done, dev,
1944				  "Transmit error, Tx status %08x\n", txstatus);
1945			dev->stats.tx_errors++;
1946			if (txstatus & 0x0400)
1947				dev->stats.tx_carrier_errors++;
1948			if (txstatus & 0x0200)
1949				dev->stats.tx_window_errors++;
1950			if (txstatus & 0x0100)
1951				dev->stats.tx_aborted_errors++;
1952			if (txstatus & 0x0080)
1953				dev->stats.tx_heartbeat_errors++;
1954			if (((rp->quirks & rqRhineI) && txstatus & 0x0002) ||
1955			    (txstatus & 0x0800) || (txstatus & 0x1000)) {
1956				dev->stats.tx_fifo_errors++;
1957				rp->tx_ring[entry].tx_status = cpu_to_le32(DescOwn);
1958				break; /* Keep the skb - we try again */
1959			}
1960			/* Transmitter restarted in 'abnormal' handler. */
1961		} else {
1962			if (rp->quirks & rqRhineI)
1963				dev->stats.collisions += (txstatus >> 3) & 0x0F;
1964			else
1965				dev->stats.collisions += txstatus & 0x0F;
1966			netif_dbg(rp, tx_done, dev, "collisions: %1.1x:%1.1x\n",
1967				  (txstatus >> 3) & 0xF, txstatus & 0xF);
1968
1969			u64_stats_update_begin(&rp->tx_stats.syncp);
1970			rp->tx_stats.bytes += skb->len;
1971			rp->tx_stats.packets++;
1972			u64_stats_update_end(&rp->tx_stats.syncp);
1973		}
1974		/* Free the original skb. */
1975		if (rp->tx_skbuff_dma[entry]) {
1976			dma_unmap_single(hwdev,
1977					 rp->tx_skbuff_dma[entry],
1978					 skb->len,
1979					 DMA_TO_DEVICE);
1980		}
1981		bytes_compl += skb->len;
1982		pkts_compl++;
1983		dev_consume_skb_any(skb);
1984		rp->tx_skbuff[entry] = NULL;
1985		dirty_tx++;
1986	}
1987
1988	rp->dirty_tx = dirty_tx;
1989	/* Pity we can't rely on the nearby BQL completion implicit barrier. */
1990	smp_wmb();
1991
1992	netdev_completed_queue(dev, pkts_compl, bytes_compl);
1993
1994	/* cur_tx may be optimistically out-of-sync. See rhine_start_tx. */
1995	if (!rhine_tx_queue_full(rp) && netif_queue_stopped(dev)) {
1996		netif_wake_queue(dev);
1997		smp_rmb();
1998		/* Rejuvenate. */
1999		if (rhine_tx_queue_full(rp))
2000			netif_stop_queue(dev);
2001	}
2002}
2003
2004/**
2005 * rhine_get_vlan_tci - extract TCI from Rx data buffer
2006 * @skb: pointer to sk_buff
2007 * @data_size: used data area of the buffer including CRC
2008 *
2009 * If hardware VLAN tag extraction is enabled and the chip indicates a 802.1Q
2010 * packet, the extracted 802.1Q header (2 bytes TPID + 2 bytes TCI) is 4-byte
2011 * aligned following the CRC.
2012 */
2013static inline u16 rhine_get_vlan_tci(struct sk_buff *skb, int data_size)
2014{
2015	u8 *trailer = (u8 *)skb->data + ((data_size + 3) & ~3) + 2;
2016	return be16_to_cpup((__be16 *)trailer);
2017}
2018
2019static inline void rhine_rx_vlan_tag(struct sk_buff *skb, struct rx_desc *desc,
2020				     int data_size)
2021{
2022	dma_rmb();
2023	if (unlikely(desc->desc_length & cpu_to_le32(DescTag))) {
2024		u16 vlan_tci;
2025
2026		vlan_tci = rhine_get_vlan_tci(skb, data_size);
2027		__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_tci);
2028	}
2029}
2030
2031/* Process up to limit frames from receive ring */
2032static int rhine_rx(struct net_device *dev, int limit)
2033{
2034	struct rhine_private *rp = netdev_priv(dev);
2035	struct device *hwdev = dev->dev.parent;
2036	int entry = rp->cur_rx % RX_RING_SIZE;
2037	int count;
2038
2039	netif_dbg(rp, rx_status, dev, "%s(), entry %d status %08x\n", __func__,
2040		  entry, le32_to_cpu(rp->rx_ring[entry].rx_status));
2041
2042	/* If EOP is set on the next entry, it's a new packet. Send it up. */
2043	for (count = 0; count < limit; ++count) {
2044		struct rx_desc *desc = rp->rx_ring + entry;
2045		u32 desc_status = le32_to_cpu(desc->rx_status);
2046		int data_size = desc_status >> 16;
2047
2048		if (desc_status & DescOwn)
2049			break;
2050
2051		netif_dbg(rp, rx_status, dev, "%s() status %08x\n", __func__,
2052			  desc_status);
2053
2054		if ((desc_status & (RxWholePkt | RxErr)) != RxWholePkt) {
2055			if ((desc_status & RxWholePkt) != RxWholePkt) {
2056				netdev_warn(dev,
2057	"Oversized Ethernet frame spanned multiple buffers, "
2058	"entry %#x length %d status %08x!\n",
2059					    entry, data_size,
2060					    desc_status);
2061				dev->stats.rx_length_errors++;
2062			} else if (desc_status & RxErr) {
2063				/* There was a error. */
2064				netif_dbg(rp, rx_err, dev,
2065					  "%s() Rx error %08x\n", __func__,
2066					  desc_status);
2067				dev->stats.rx_errors++;
2068				if (desc_status & 0x0030)
2069					dev->stats.rx_length_errors++;
2070				if (desc_status & 0x0048)
2071					dev->stats.rx_fifo_errors++;
2072				if (desc_status & 0x0004)
2073					dev->stats.rx_frame_errors++;
2074				if (desc_status & 0x0002) {
2075					/* this can also be updated outside the interrupt handler */
2076					spin_lock(&rp->lock);
2077					dev->stats.rx_crc_errors++;
2078					spin_unlock(&rp->lock);
2079				}
2080			}
2081		} else {
2082			/* Length should omit the CRC */
2083			int pkt_len = data_size - 4;
2084			struct sk_buff *skb;
2085
2086			/* Check if the packet is long enough to accept without
2087			   copying to a minimally-sized skbuff. */
2088			if (pkt_len < rx_copybreak) {
2089				skb = netdev_alloc_skb_ip_align(dev, pkt_len);
2090				if (unlikely(!skb))
2091					goto drop;
2092
2093				dma_sync_single_for_cpu(hwdev,
2094							rp->rx_skbuff_dma[entry],
2095							rp->rx_buf_sz,
2096							DMA_FROM_DEVICE);
2097
2098				skb_copy_to_linear_data(skb,
2099						 rp->rx_skbuff[entry]->data,
2100						 pkt_len);
2101
2102				dma_sync_single_for_device(hwdev,
2103							   rp->rx_skbuff_dma[entry],
2104							   rp->rx_buf_sz,
2105							   DMA_FROM_DEVICE);
2106			} else {
2107				struct rhine_skb_dma sd;
2108
2109				if (unlikely(rhine_skb_dma_init(dev, &sd) < 0))
2110					goto drop;
2111
2112				skb = rp->rx_skbuff[entry];
2113
2114				dma_unmap_single(hwdev,
2115						 rp->rx_skbuff_dma[entry],
2116						 rp->rx_buf_sz,
2117						 DMA_FROM_DEVICE);
2118				rhine_skb_dma_nic_store(rp, &sd, entry);
2119			}
2120
2121			skb_put(skb, pkt_len);
2122
2123			rhine_rx_vlan_tag(skb, desc, data_size);
2124
2125			skb->protocol = eth_type_trans(skb, dev);
2126
2127			netif_receive_skb(skb);
2128
2129			u64_stats_update_begin(&rp->rx_stats.syncp);
2130			rp->rx_stats.bytes += pkt_len;
2131			rp->rx_stats.packets++;
2132			u64_stats_update_end(&rp->rx_stats.syncp);
2133		}
2134give_descriptor_to_nic:
2135		desc->rx_status = cpu_to_le32(DescOwn);
2136		entry = (++rp->cur_rx) % RX_RING_SIZE;
2137	}
2138
2139	return count;
2140
2141drop:
2142	dev->stats.rx_dropped++;
2143	goto give_descriptor_to_nic;
2144}
2145
2146static void rhine_restart_tx(struct net_device *dev) {
2147	struct rhine_private *rp = netdev_priv(dev);
2148	void __iomem *ioaddr = rp->base;
2149	int entry = rp->dirty_tx % TX_RING_SIZE;
2150	u32 intr_status;
2151
2152	/*
2153	 * If new errors occurred, we need to sort them out before doing Tx.
2154	 * In that case the ISR will be back here RSN anyway.
2155	 */
2156	intr_status = rhine_get_events(rp);
2157
2158	if ((intr_status & IntrTxErrSummary) == 0) {
2159
2160		/* We know better than the chip where it should continue. */
2161		iowrite32(rp->tx_ring_dma + entry * sizeof(struct tx_desc),
2162		       ioaddr + TxRingPtr);
2163
2164		iowrite8(ioread8(ioaddr + ChipCmd) | CmdTxOn,
2165		       ioaddr + ChipCmd);
2166
2167		if (rp->tx_ring[entry].desc_length & cpu_to_le32(0x020000))
2168			/* Tx queues are bits 7-0 (first Tx queue: bit 7) */
2169			BYTE_REG_BITS_ON(1 << 7, ioaddr + TQWake);
2170
2171		iowrite8(ioread8(ioaddr + ChipCmd1) | Cmd1TxDemand,
2172		       ioaddr + ChipCmd1);
2173		IOSYNC;
2174	}
2175	else {
2176		/* This should never happen */
2177		netif_warn(rp, tx_err, dev, "another error occurred %08x\n",
2178			   intr_status);
2179	}
2180
2181}
2182
2183static void rhine_slow_event_task(struct work_struct *work)
2184{
2185	struct rhine_private *rp =
2186		container_of(work, struct rhine_private, slow_event_task);
2187	struct net_device *dev = rp->dev;
2188	u32 intr_status;
2189
2190	mutex_lock(&rp->task_lock);
2191
2192	if (!rp->task_enable)
2193		goto out_unlock;
2194
2195	intr_status = rhine_get_events(rp);
2196	rhine_ack_events(rp, intr_status & RHINE_EVENT_SLOW);
2197
2198	if (intr_status & IntrLinkChange)
2199		rhine_check_media(dev, 0);
2200
2201	if (intr_status & IntrPCIErr)
2202		netif_warn(rp, hw, dev, "PCI error\n");
2203
2204	iowrite16(RHINE_EVENT & 0xffff, rp->base + IntrEnable);
2205
2206out_unlock:
2207	mutex_unlock(&rp->task_lock);
2208}
2209
2210static void
2211rhine_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
2212{
2213	struct rhine_private *rp = netdev_priv(dev);
2214	unsigned int start;
2215
2216	spin_lock_bh(&rp->lock);
2217	rhine_update_rx_crc_and_missed_errord(rp);
2218	spin_unlock_bh(&rp->lock);
2219
2220	netdev_stats_to_stats64(stats, &dev->stats);
2221
2222	do {
2223		start = u64_stats_fetch_begin_irq(&rp->rx_stats.syncp);
2224		stats->rx_packets = rp->rx_stats.packets;
2225		stats->rx_bytes = rp->rx_stats.bytes;
2226	} while (u64_stats_fetch_retry_irq(&rp->rx_stats.syncp, start));
2227
2228	do {
2229		start = u64_stats_fetch_begin_irq(&rp->tx_stats.syncp);
2230		stats->tx_packets = rp->tx_stats.packets;
2231		stats->tx_bytes = rp->tx_stats.bytes;
2232	} while (u64_stats_fetch_retry_irq(&rp->tx_stats.syncp, start));
2233}
2234
2235static void rhine_set_rx_mode(struct net_device *dev)
2236{
2237	struct rhine_private *rp = netdev_priv(dev);
2238	void __iomem *ioaddr = rp->base;
2239	u32 mc_filter[2];	/* Multicast hash filter */
2240	u8 rx_mode = 0x0C;	/* Note: 0x02=accept runt, 0x01=accept errs */
2241	struct netdev_hw_addr *ha;
2242
2243	if (dev->flags & IFF_PROMISC) {		/* Set promiscuous. */
2244		rx_mode = 0x1C;
2245		iowrite32(0xffffffff, ioaddr + MulticastFilter0);
2246		iowrite32(0xffffffff, ioaddr + MulticastFilter1);
2247	} else if ((netdev_mc_count(dev) > multicast_filter_limit) ||
2248		   (dev->flags & IFF_ALLMULTI)) {
2249		/* Too many to match, or accept all multicasts. */
2250		iowrite32(0xffffffff, ioaddr + MulticastFilter0);
2251		iowrite32(0xffffffff, ioaddr + MulticastFilter1);
2252	} else if (rp->quirks & rqMgmt) {
2253		int i = 0;
2254		u32 mCAMmask = 0;	/* 32 mCAMs (6105M and better) */
2255		netdev_for_each_mc_addr(ha, dev) {
2256			if (i == MCAM_SIZE)
2257				break;
2258			rhine_set_cam(ioaddr, i, ha->addr);
2259			mCAMmask |= 1 << i;
2260			i++;
2261		}
2262		rhine_set_cam_mask(ioaddr, mCAMmask);
2263	} else {
2264		memset(mc_filter, 0, sizeof(mc_filter));
2265		netdev_for_each_mc_addr(ha, dev) {
2266			int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26;
2267
2268			mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
2269		}
2270		iowrite32(mc_filter[0], ioaddr + MulticastFilter0);
2271		iowrite32(mc_filter[1], ioaddr + MulticastFilter1);
2272	}
2273	/* enable/disable VLAN receive filtering */
2274	if (rp->quirks & rqMgmt) {
2275		if (dev->flags & IFF_PROMISC)
2276			BYTE_REG_BITS_OFF(BCR1_VIDFR, ioaddr + PCIBusConfig1);
2277		else
2278			BYTE_REG_BITS_ON(BCR1_VIDFR, ioaddr + PCIBusConfig1);
2279	}
2280	BYTE_REG_BITS_ON(rx_mode, ioaddr + RxConfig);
2281}
2282
2283static void netdev_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
2284{
2285	struct device *hwdev = dev->dev.parent;
2286
2287	strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
2288	strlcpy(info->bus_info, dev_name(hwdev), sizeof(info->bus_info));
2289}
2290
2291static int netdev_get_link_ksettings(struct net_device *dev,
2292				     struct ethtool_link_ksettings *cmd)
2293{
2294	struct rhine_private *rp = netdev_priv(dev);
2295
2296	mutex_lock(&rp->task_lock);
2297	mii_ethtool_get_link_ksettings(&rp->mii_if, cmd);
2298	mutex_unlock(&rp->task_lock);
2299
2300	return 0;
2301}
2302
2303static int netdev_set_link_ksettings(struct net_device *dev,
2304				     const struct ethtool_link_ksettings *cmd)
2305{
2306	struct rhine_private *rp = netdev_priv(dev);
2307	int rc;
2308
2309	mutex_lock(&rp->task_lock);
2310	rc = mii_ethtool_set_link_ksettings(&rp->mii_if, cmd);
2311	rhine_set_carrier(&rp->mii_if);
2312	mutex_unlock(&rp->task_lock);
2313
2314	return rc;
2315}
2316
2317static int netdev_nway_reset(struct net_device *dev)
2318{
2319	struct rhine_private *rp = netdev_priv(dev);
2320
2321	return mii_nway_restart(&rp->mii_if);
2322}
2323
2324static u32 netdev_get_link(struct net_device *dev)
2325{
2326	struct rhine_private *rp = netdev_priv(dev);
2327
2328	return mii_link_ok(&rp->mii_if);
2329}
2330
2331static u32 netdev_get_msglevel(struct net_device *dev)
2332{
2333	struct rhine_private *rp = netdev_priv(dev);
2334
2335	return rp->msg_enable;
2336}
2337
2338static void netdev_set_msglevel(struct net_device *dev, u32 value)
2339{
2340	struct rhine_private *rp = netdev_priv(dev);
2341
2342	rp->msg_enable = value;
2343}
2344
2345static void rhine_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
2346{
2347	struct rhine_private *rp = netdev_priv(dev);
2348
2349	if (!(rp->quirks & rqWOL))
2350		return;
2351
2352	spin_lock_irq(&rp->lock);
2353	wol->supported = WAKE_PHY | WAKE_MAGIC |
2354			 WAKE_UCAST | WAKE_MCAST | WAKE_BCAST;	/* Untested */
2355	wol->wolopts = rp->wolopts;
2356	spin_unlock_irq(&rp->lock);
2357}
2358
2359static int rhine_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
2360{
2361	struct rhine_private *rp = netdev_priv(dev);
2362	u32 support = WAKE_PHY | WAKE_MAGIC |
2363		      WAKE_UCAST | WAKE_MCAST | WAKE_BCAST;	/* Untested */
2364
2365	if (!(rp->quirks & rqWOL))
2366		return -EINVAL;
2367
2368	if (wol->wolopts & ~support)
2369		return -EINVAL;
2370
2371	spin_lock_irq(&rp->lock);
2372	rp->wolopts = wol->wolopts;
2373	spin_unlock_irq(&rp->lock);
2374
2375	return 0;
2376}
2377
2378static const struct ethtool_ops netdev_ethtool_ops = {
2379	.get_drvinfo		= netdev_get_drvinfo,
2380	.nway_reset		= netdev_nway_reset,
2381	.get_link		= netdev_get_link,
2382	.get_msglevel		= netdev_get_msglevel,
2383	.set_msglevel		= netdev_set_msglevel,
2384	.get_wol		= rhine_get_wol,
2385	.set_wol		= rhine_set_wol,
2386	.get_link_ksettings	= netdev_get_link_ksettings,
2387	.set_link_ksettings	= netdev_set_link_ksettings,
2388};
2389
2390static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
2391{
2392	struct rhine_private *rp = netdev_priv(dev);
2393	int rc;
2394
2395	if (!netif_running(dev))
2396		return -EINVAL;
2397
2398	mutex_lock(&rp->task_lock);
2399	rc = generic_mii_ioctl(&rp->mii_if, if_mii(rq), cmd, NULL);
2400	rhine_set_carrier(&rp->mii_if);
2401	mutex_unlock(&rp->task_lock);
2402
2403	return rc;
2404}
2405
2406static int rhine_close(struct net_device *dev)
2407{
2408	struct rhine_private *rp = netdev_priv(dev);
2409	void __iomem *ioaddr = rp->base;
2410
2411	rhine_task_disable(rp);
2412	napi_disable(&rp->napi);
2413	netif_stop_queue(dev);
2414
2415	netif_dbg(rp, ifdown, dev, "Shutting down ethercard, status was %04x\n",
2416		  ioread16(ioaddr + ChipCmd));
2417
2418	/* Switch to loopback mode to avoid hardware races. */
2419	iowrite8(rp->tx_thresh | 0x02, ioaddr + TxConfig);
2420
2421	rhine_irq_disable(rp);
2422
2423	/* Stop the chip's Tx and Rx processes. */
2424	iowrite16(CmdStop, ioaddr + ChipCmd);
2425
2426	free_irq(rp->irq, dev);
2427	free_rbufs(dev);
2428	free_tbufs(dev);
2429	free_ring(dev);
2430
2431	return 0;
2432}
2433
2434
2435static void rhine_remove_one_pci(struct pci_dev *pdev)
2436{
2437	struct net_device *dev = pci_get_drvdata(pdev);
2438	struct rhine_private *rp = netdev_priv(dev);
2439
2440	unregister_netdev(dev);
2441
2442	pci_iounmap(pdev, rp->base);
2443	pci_release_regions(pdev);
2444
2445	free_netdev(dev);
2446	pci_disable_device(pdev);
2447}
2448
2449static int rhine_remove_one_platform(struct platform_device *pdev)
2450{
2451	struct net_device *dev = platform_get_drvdata(pdev);
2452	struct rhine_private *rp = netdev_priv(dev);
2453
2454	unregister_netdev(dev);
2455
2456	iounmap(rp->base);
2457
2458	free_netdev(dev);
2459
2460	return 0;
2461}
2462
2463static void rhine_shutdown_pci(struct pci_dev *pdev)
2464{
2465	struct net_device *dev = pci_get_drvdata(pdev);
2466	struct rhine_private *rp = netdev_priv(dev);
2467	void __iomem *ioaddr = rp->base;
2468
2469	if (!(rp->quirks & rqWOL))
2470		return; /* Nothing to do for non-WOL adapters */
2471
2472	rhine_power_init(dev);
2473
2474	/* Make sure we use pattern 0, 1 and not 4, 5 */
2475	if (rp->quirks & rq6patterns)
2476		iowrite8(0x04, ioaddr + WOLcgClr);
2477
2478	spin_lock(&rp->lock);
2479
2480	if (rp->wolopts & WAKE_MAGIC) {
2481		iowrite8(WOLmagic, ioaddr + WOLcrSet);
2482		/*
2483		 * Turn EEPROM-controlled wake-up back on -- some hardware may
2484		 * not cooperate otherwise.
2485		 */
2486		iowrite8(ioread8(ioaddr + ConfigA) | 0x03, ioaddr + ConfigA);
2487	}
2488
2489	if (rp->wolopts & (WAKE_BCAST|WAKE_MCAST))
2490		iowrite8(WOLbmcast, ioaddr + WOLcgSet);
2491
2492	if (rp->wolopts & WAKE_PHY)
2493		iowrite8(WOLlnkon | WOLlnkoff, ioaddr + WOLcrSet);
2494
2495	if (rp->wolopts & WAKE_UCAST)
2496		iowrite8(WOLucast, ioaddr + WOLcrSet);
2497
2498	if (rp->wolopts) {
2499		/* Enable legacy WOL (for old motherboards) */
2500		iowrite8(0x01, ioaddr + PwcfgSet);
2501		iowrite8(ioread8(ioaddr + StickyHW) | 0x04, ioaddr + StickyHW);
2502	}
2503
2504	spin_unlock(&rp->lock);
2505
2506	if (system_state == SYSTEM_POWER_OFF && !avoid_D3) {
2507		iowrite8(ioread8(ioaddr + StickyHW) | 0x03, ioaddr + StickyHW);
2508
2509		pci_wake_from_d3(pdev, true);
2510		pci_set_power_state(pdev, PCI_D3hot);
2511	}
2512}
2513
2514#ifdef CONFIG_PM_SLEEP
2515static int rhine_suspend(struct device *device)
2516{
2517	struct net_device *dev = dev_get_drvdata(device);
2518	struct rhine_private *rp = netdev_priv(dev);
2519
2520	if (!netif_running(dev))
2521		return 0;
2522
2523	rhine_task_disable(rp);
2524	rhine_irq_disable(rp);
2525	napi_disable(&rp->napi);
2526
2527	netif_device_detach(dev);
2528
2529	if (dev_is_pci(device))
2530		rhine_shutdown_pci(to_pci_dev(device));
2531
2532	return 0;
2533}
2534
2535static int rhine_resume(struct device *device)
2536{
2537	struct net_device *dev = dev_get_drvdata(device);
2538	struct rhine_private *rp = netdev_priv(dev);
2539
2540	if (!netif_running(dev))
2541		return 0;
2542
2543	enable_mmio(rp->pioaddr, rp->quirks);
2544	rhine_power_init(dev);
2545	free_tbufs(dev);
2546	alloc_tbufs(dev);
2547	rhine_reset_rbufs(rp);
2548	rhine_task_enable(rp);
2549	spin_lock_bh(&rp->lock);
2550	init_registers(dev);
2551	spin_unlock_bh(&rp->lock);
2552
2553	netif_device_attach(dev);
2554
2555	return 0;
2556}
2557
2558static SIMPLE_DEV_PM_OPS(rhine_pm_ops, rhine_suspend, rhine_resume);
2559#define RHINE_PM_OPS	(&rhine_pm_ops)
2560
2561#else
2562
2563#define RHINE_PM_OPS	NULL
2564
2565#endif /* !CONFIG_PM_SLEEP */
2566
2567static struct pci_driver rhine_driver_pci = {
2568	.name		= DRV_NAME,
2569	.id_table	= rhine_pci_tbl,
2570	.probe		= rhine_init_one_pci,
2571	.remove		= rhine_remove_one_pci,
2572	.shutdown	= rhine_shutdown_pci,
2573	.driver.pm	= RHINE_PM_OPS,
2574};
2575
2576static struct platform_driver rhine_driver_platform = {
2577	.probe		= rhine_init_one_platform,
2578	.remove		= rhine_remove_one_platform,
2579	.driver = {
2580		.name	= DRV_NAME,
2581		.of_match_table	= rhine_of_tbl,
2582		.pm		= RHINE_PM_OPS,
2583	}
2584};
2585
2586static const struct dmi_system_id rhine_dmi_table[] __initconst = {
2587	{
2588		.ident = "EPIA-M",
2589		.matches = {
2590			DMI_MATCH(DMI_BIOS_VENDOR, "Award Software International, Inc."),
2591			DMI_MATCH(DMI_BIOS_VERSION, "6.00 PG"),
2592		},
2593	},
2594	{
2595		.ident = "KV7",
2596		.matches = {
2597			DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies, LTD"),
2598			DMI_MATCH(DMI_BIOS_VERSION, "6.00 PG"),
2599		},
2600	},
2601	{ NULL }
2602};
2603
2604static int __init rhine_init(void)
2605{
2606	int ret_pci, ret_platform;
2607
2608/* when a module, this is printed whether or not devices are found in probe */
2609	if (dmi_check_system(rhine_dmi_table)) {
2610		/* these BIOSes fail at PXE boot if chip is in D3 */
2611		avoid_D3 = true;
2612		pr_warn("Broken BIOS detected, avoid_D3 enabled\n");
2613	}
2614	else if (avoid_D3)
2615		pr_info("avoid_D3 set\n");
2616
2617	ret_pci = pci_register_driver(&rhine_driver_pci);
2618	ret_platform = platform_driver_register(&rhine_driver_platform);
2619	if ((ret_pci < 0) && (ret_platform < 0))
2620		return ret_pci;
2621
2622	return 0;
2623}
2624
2625
2626static void __exit rhine_cleanup(void)
2627{
2628	platform_driver_unregister(&rhine_driver_platform);
2629	pci_unregister_driver(&rhine_driver_pci);
2630}
2631
2632
2633module_init(rhine_init);
2634module_exit(rhine_cleanup);