Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
   1/*
   2   sis190.c: Silicon Integrated Systems SiS190 ethernet driver
   3
   4   Copyright (c) 2003 K.M. Liu <kmliu@sis.com>
   5   Copyright (c) 2003, 2004 Jeff Garzik <jgarzik@pobox.com>
   6   Copyright (c) 2003, 2004, 2005 Francois Romieu <romieu@fr.zoreil.com>
   7
   8   Based on r8169.c, tg3.c, 8139cp.c, skge.c, epic100.c and SiS 190/191
   9   genuine driver.
  10
  11   This software may be used and distributed according to the terms of
  12   the GNU General Public License (GPL), incorporated herein by reference.
  13   Drivers based on or derived from this code fall under the GPL and must
  14   retain the authorship, copyright and license notice.  This file is not
  15   a complete program and may only be used when the entire operating
  16   system is licensed under the GPL.
  17
  18   See the file COPYING in this distribution for more information.
  19
  20*/
  21
  22#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  23
  24#include <linux/interrupt.h>
  25#include <linux/module.h>
  26#include <linux/moduleparam.h>
  27#include <linux/netdevice.h>
  28#include <linux/rtnetlink.h>
  29#include <linux/etherdevice.h>
  30#include <linux/ethtool.h>
  31#include <linux/pci.h>
  32#include <linux/mii.h>
  33#include <linux/delay.h>
  34#include <linux/crc32.h>
  35#include <linux/dma-mapping.h>
  36#include <linux/slab.h>
  37#include <asm/irq.h>
  38
  39#define PHY_MAX_ADDR		32
  40#define PHY_ID_ANY		0x1f
  41#define MII_REG_ANY		0x1f
  42
  43#define DRV_VERSION		"1.4"
  44#define DRV_NAME		"sis190"
  45#define SIS190_DRIVER_NAME	DRV_NAME " Gigabit Ethernet driver " DRV_VERSION
  46
  47#define sis190_rx_skb			netif_rx
  48#define sis190_rx_quota(count, quota)	count
  49
  50#define NUM_TX_DESC		64	/* [8..1024] */
  51#define NUM_RX_DESC		64	/* [8..8192] */
  52#define TX_RING_BYTES		(NUM_TX_DESC * sizeof(struct TxDesc))
  53#define RX_RING_BYTES		(NUM_RX_DESC * sizeof(struct RxDesc))
  54#define RX_BUF_SIZE		1536
  55#define RX_BUF_MASK		0xfff8
  56
  57#define SIS190_REGS_SIZE	0x80
  58#define SIS190_TX_TIMEOUT	(6*HZ)
  59#define SIS190_PHY_TIMEOUT	(10*HZ)
  60#define SIS190_MSG_DEFAULT	(NETIF_MSG_DRV | NETIF_MSG_PROBE | \
  61				 NETIF_MSG_LINK | NETIF_MSG_IFUP | \
  62				 NETIF_MSG_IFDOWN)
  63
  64/* Enhanced PHY access register bit definitions */
  65#define EhnMIIread		0x0000
  66#define EhnMIIwrite		0x0020
  67#define EhnMIIdataShift		16
  68#define EhnMIIpmdShift		6	/* 7016 only */
  69#define EhnMIIregShift		11
  70#define EhnMIIreq		0x0010
  71#define EhnMIInotDone		0x0010
  72
  73/* Write/read MMIO register */
  74#define SIS_W8(reg, val)	writeb ((val), ioaddr + (reg))
  75#define SIS_W16(reg, val)	writew ((val), ioaddr + (reg))
  76#define SIS_W32(reg, val)	writel ((val), ioaddr + (reg))
  77#define SIS_R8(reg)		readb (ioaddr + (reg))
  78#define SIS_R16(reg)		readw (ioaddr + (reg))
  79#define SIS_R32(reg)		readl (ioaddr + (reg))
  80
  81#define SIS_PCI_COMMIT()	SIS_R32(IntrControl)
  82
  83enum sis190_registers {
  84	TxControl		= 0x00,
  85	TxDescStartAddr		= 0x04,
  86	rsv0			= 0x08,	// reserved
  87	TxSts			= 0x0c,	// unused (Control/Status)
  88	RxControl		= 0x10,
  89	RxDescStartAddr		= 0x14,
  90	rsv1			= 0x18,	// reserved
  91	RxSts			= 0x1c,	// unused
  92	IntrStatus		= 0x20,
  93	IntrMask		= 0x24,
  94	IntrControl		= 0x28,
  95	IntrTimer		= 0x2c,	// unused (Interrupt Timer)
  96	PMControl		= 0x30,	// unused (Power Mgmt Control/Status)
  97	rsv2			= 0x34,	// reserved
  98	ROMControl		= 0x38,
  99	ROMInterface		= 0x3c,
 100	StationControl		= 0x40,
 101	GMIIControl		= 0x44,
 102	GIoCR			= 0x48, // unused (GMAC IO Compensation)
 103	GIoCtrl			= 0x4c, // unused (GMAC IO Control)
 104	TxMacControl		= 0x50,
 105	TxLimit			= 0x54, // unused (Tx MAC Timer/TryLimit)
 106	RGDelay			= 0x58, // unused (RGMII Tx Internal Delay)
 107	rsv3			= 0x5c, // reserved
 108	RxMacControl		= 0x60,
 109	RxMacAddr		= 0x62,
 110	RxHashTable		= 0x68,
 111	// Undocumented		= 0x6c,
 112	RxWolCtrl		= 0x70,
 113	RxWolData		= 0x74, // unused (Rx WOL Data Access)
 114	RxMPSControl		= 0x78,	// unused (Rx MPS Control)
 115	rsv4			= 0x7c, // reserved
 116};
 117
 118enum sis190_register_content {
 119	/* IntrStatus */
 120	SoftInt			= 0x40000000,	// unused
 121	Timeup			= 0x20000000,	// unused
 122	PauseFrame		= 0x00080000,	// unused
 123	MagicPacket		= 0x00040000,	// unused
 124	WakeupFrame		= 0x00020000,	// unused
 125	LinkChange		= 0x00010000,
 126	RxQEmpty		= 0x00000080,
 127	RxQInt			= 0x00000040,
 128	TxQ1Empty		= 0x00000020,	// unused
 129	TxQ1Int			= 0x00000010,
 130	TxQ0Empty		= 0x00000008,	// unused
 131	TxQ0Int			= 0x00000004,
 132	RxHalt			= 0x00000002,
 133	TxHalt			= 0x00000001,
 134
 135	/* {Rx/Tx}CmdBits */
 136	CmdReset		= 0x10,
 137	CmdRxEnb		= 0x08,		// unused
 138	CmdTxEnb		= 0x01,
 139	RxBufEmpty		= 0x01,		// unused
 140
 141	/* Cfg9346Bits */
 142	Cfg9346_Lock		= 0x00,		// unused
 143	Cfg9346_Unlock		= 0xc0,		// unused
 144
 145	/* RxMacControl */
 146	AcceptErr		= 0x20,		// unused
 147	AcceptRunt		= 0x10,		// unused
 148	AcceptBroadcast		= 0x0800,
 149	AcceptMulticast		= 0x0400,
 150	AcceptMyPhys		= 0x0200,
 151	AcceptAllPhys		= 0x0100,
 152
 153	/* RxConfigBits */
 154	RxCfgFIFOShift		= 13,
 155	RxCfgDMAShift		= 8,		// 0x1a in RxControl ?
 156
 157	/* TxConfigBits */
 158	TxInterFrameGapShift	= 24,
 159	TxDMAShift		= 8, /* DMA burst value (0-7) is shift this many bits */
 160
 161	LinkStatus		= 0x02,		// unused
 162	FullDup			= 0x01,		// unused
 163
 164	/* TBICSRBit */
 165	TBILinkOK		= 0x02000000,	// unused
 166};
 167
 168struct TxDesc {
 169	__le32 PSize;
 170	__le32 status;
 171	__le32 addr;
 172	__le32 size;
 173};
 174
 175struct RxDesc {
 176	__le32 PSize;
 177	__le32 status;
 178	__le32 addr;
 179	__le32 size;
 180};
 181
 182enum _DescStatusBit {
 183	/* _Desc.status */
 184	OWNbit		= 0x80000000, // RXOWN/TXOWN
 185	INTbit		= 0x40000000, // RXINT/TXINT
 186	CRCbit		= 0x00020000, // CRCOFF/CRCEN
 187	PADbit		= 0x00010000, // PREADD/PADEN
 188	/* _Desc.size */
 189	RingEnd		= 0x80000000,
 190	/* TxDesc.status */
 191	LSEN		= 0x08000000, // TSO ? -- FR
 192	IPCS		= 0x04000000,
 193	TCPCS		= 0x02000000,
 194	UDPCS		= 0x01000000,
 195	BSTEN		= 0x00800000,
 196	EXTEN		= 0x00400000,
 197	DEFEN		= 0x00200000,
 198	BKFEN		= 0x00100000,
 199	CRSEN		= 0x00080000,
 200	COLEN		= 0x00040000,
 201	THOL3		= 0x30000000,
 202	THOL2		= 0x20000000,
 203	THOL1		= 0x10000000,
 204	THOL0		= 0x00000000,
 205
 206	WND		= 0x00080000,
 207	TABRT		= 0x00040000,
 208	FIFO		= 0x00020000,
 209	LINK		= 0x00010000,
 210	ColCountMask	= 0x0000ffff,
 211	/* RxDesc.status */
 212	IPON		= 0x20000000,
 213	TCPON		= 0x10000000,
 214	UDPON		= 0x08000000,
 215	Wakup		= 0x00400000,
 216	Magic		= 0x00200000,
 217	Pause		= 0x00100000,
 218	DEFbit		= 0x00200000,
 219	BCAST		= 0x000c0000,
 220	MCAST		= 0x00080000,
 221	UCAST		= 0x00040000,
 222	/* RxDesc.PSize */
 223	TAGON		= 0x80000000,
 224	RxDescCountMask	= 0x7f000000, // multi-desc pkt when > 1 ? -- FR
 225	ABORT		= 0x00800000,
 226	SHORT		= 0x00400000,
 227	LIMIT		= 0x00200000,
 228	MIIER		= 0x00100000,
 229	OVRUN		= 0x00080000,
 230	NIBON		= 0x00040000,
 231	COLON		= 0x00020000,
 232	CRCOK		= 0x00010000,
 233	RxSizeMask	= 0x0000ffff
 234	/*
 235	 * The asic could apparently do vlan, TSO, jumbo (sis191 only) and
 236	 * provide two (unused with Linux) Tx queues. No publicly
 237	 * available documentation alas.
 238	 */
 239};
 240
 241enum sis190_eeprom_access_register_bits {
 242	EECS	= 0x00000001,	// unused
 243	EECLK	= 0x00000002,	// unused
 244	EEDO	= 0x00000008,	// unused
 245	EEDI	= 0x00000004,	// unused
 246	EEREQ	= 0x00000080,
 247	EEROP	= 0x00000200,
 248	EEWOP	= 0x00000100	// unused
 249};
 250
 251/* EEPROM Addresses */
 252enum sis190_eeprom_address {
 253	EEPROMSignature	= 0x00,
 254	EEPROMCLK	= 0x01,	// unused
 255	EEPROMInfo	= 0x02,
 256	EEPROMMACAddr	= 0x03
 257};
 258
 259enum sis190_feature {
 260	F_HAS_RGMII	= 1,
 261	F_PHY_88E1111	= 2,
 262	F_PHY_BCM5461	= 4
 263};
 264
 265struct sis190_private {
 266	void __iomem *mmio_addr;
 267	struct pci_dev *pci_dev;
 268	struct net_device *dev;
 269	spinlock_t lock;
 270	u32 rx_buf_sz;
 271	u32 cur_rx;
 272	u32 cur_tx;
 273	u32 dirty_rx;
 274	u32 dirty_tx;
 275	dma_addr_t rx_dma;
 276	dma_addr_t tx_dma;
 277	struct RxDesc *RxDescRing;
 278	struct TxDesc *TxDescRing;
 279	struct sk_buff *Rx_skbuff[NUM_RX_DESC];
 280	struct sk_buff *Tx_skbuff[NUM_TX_DESC];
 281	struct work_struct phy_task;
 282	struct timer_list timer;
 283	u32 msg_enable;
 284	struct mii_if_info mii_if;
 285	struct list_head first_phy;
 286	u32 features;
 287	u32 negotiated_lpa;
 288	enum {
 289		LNK_OFF,
 290		LNK_ON,
 291		LNK_AUTONEG,
 292	} link_status;
 293};
 294
 295struct sis190_phy {
 296	struct list_head list;
 297	int phy_id;
 298	u16 id[2];
 299	u16 status;
 300	u8  type;
 301};
 302
 303enum sis190_phy_type {
 304	UNKNOWN	= 0x00,
 305	HOME	= 0x01,
 306	LAN	= 0x02,
 307	MIX	= 0x03
 308};
 309
 310static struct mii_chip_info {
 311        const char *name;
 312        u16 id[2];
 313        unsigned int type;
 314	u32 feature;
 315} mii_chip_table[] = {
 316	{ "Atheros PHY",          { 0x004d, 0xd010 }, LAN, 0 },
 317	{ "Atheros PHY AR8012",   { 0x004d, 0xd020 }, LAN, 0 },
 318	{ "Broadcom PHY BCM5461", { 0x0020, 0x60c0 }, LAN, F_PHY_BCM5461 },
 319	{ "Broadcom PHY AC131",   { 0x0143, 0xbc70 }, LAN, 0 },
 320	{ "Agere PHY ET1101B",    { 0x0282, 0xf010 }, LAN, 0 },
 321	{ "Marvell PHY 88E1111",  { 0x0141, 0x0cc0 }, LAN, F_PHY_88E1111 },
 322	{ "Realtek PHY RTL8201",  { 0x0000, 0x8200 }, LAN, 0 },
 323	{ NULL, }
 324};
 325
 326static const struct {
 327	const char *name;
 328} sis_chip_info[] = {
 329	{ "SiS 190 PCI Fast Ethernet adapter" },
 330	{ "SiS 191 PCI Gigabit Ethernet adapter" },
 331};
 332
 333static const struct pci_device_id sis190_pci_tbl[] = {
 334	{ PCI_DEVICE(PCI_VENDOR_ID_SI, 0x0190), 0, 0, 0 },
 335	{ PCI_DEVICE(PCI_VENDOR_ID_SI, 0x0191), 0, 0, 1 },
 336	{ 0, },
 337};
 338
 339MODULE_DEVICE_TABLE(pci, sis190_pci_tbl);
 340
 341static int rx_copybreak = 200;
 342
 343static struct {
 344	u32 msg_enable;
 345} debug = { -1 };
 346
 347MODULE_DESCRIPTION("SiS sis190/191 Gigabit Ethernet driver");
 348module_param(rx_copybreak, int, 0);
 349MODULE_PARM_DESC(rx_copybreak, "Copy breakpoint for copy-only-tiny-frames");
 350module_param_named(debug, debug.msg_enable, int, 0);
 351MODULE_PARM_DESC(debug, "Debug verbosity level (0=none, ..., 16=all)");
 352MODULE_AUTHOR("K.M. Liu <kmliu@sis.com>, Ueimor <romieu@fr.zoreil.com>");
 353MODULE_VERSION(DRV_VERSION);
 354MODULE_LICENSE("GPL");
 355
 356static const u32 sis190_intr_mask =
 357	RxQEmpty | RxQInt | TxQ1Int | TxQ0Int | RxHalt | TxHalt | LinkChange;
 358
 359/*
 360 * Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
 361 * The chips use a 64 element hash table based on the Ethernet CRC.
 362 */
 363static const int multicast_filter_limit = 32;
 364
 365static void __mdio_cmd(void __iomem *ioaddr, u32 ctl)
 366{
 367	unsigned int i;
 368
 369	SIS_W32(GMIIControl, ctl);
 370
 371	msleep(1);
 372
 373	for (i = 0; i < 100; i++) {
 374		if (!(SIS_R32(GMIIControl) & EhnMIInotDone))
 375			break;
 376		msleep(1);
 377	}
 378
 379	if (i > 99)
 380		pr_err("PHY command failed !\n");
 381}
 382
 383static void mdio_write(void __iomem *ioaddr, int phy_id, int reg, int val)
 384{
 385	__mdio_cmd(ioaddr, EhnMIIreq | EhnMIIwrite |
 386		(((u32) reg) << EhnMIIregShift) | (phy_id << EhnMIIpmdShift) |
 387		(((u32) val) << EhnMIIdataShift));
 388}
 389
 390static int mdio_read(void __iomem *ioaddr, int phy_id, int reg)
 391{
 392	__mdio_cmd(ioaddr, EhnMIIreq | EhnMIIread |
 393		(((u32) reg) << EhnMIIregShift) | (phy_id << EhnMIIpmdShift));
 394
 395	return (u16) (SIS_R32(GMIIControl) >> EhnMIIdataShift);
 396}
 397
 398static void __mdio_write(struct net_device *dev, int phy_id, int reg, int val)
 399{
 400	struct sis190_private *tp = netdev_priv(dev);
 401
 402	mdio_write(tp->mmio_addr, phy_id, reg, val);
 403}
 404
 405static int __mdio_read(struct net_device *dev, int phy_id, int reg)
 406{
 407	struct sis190_private *tp = netdev_priv(dev);
 408
 409	return mdio_read(tp->mmio_addr, phy_id, reg);
 410}
 411
 412static u16 mdio_read_latched(void __iomem *ioaddr, int phy_id, int reg)
 413{
 414	mdio_read(ioaddr, phy_id, reg);
 415	return mdio_read(ioaddr, phy_id, reg);
 416}
 417
 418static u16 sis190_read_eeprom(void __iomem *ioaddr, u32 reg)
 419{
 420	u16 data = 0xffff;
 421	unsigned int i;
 422
 423	if (!(SIS_R32(ROMControl) & 0x0002))
 424		return 0;
 425
 426	SIS_W32(ROMInterface, EEREQ | EEROP | (reg << 10));
 427
 428	for (i = 0; i < 200; i++) {
 429		if (!(SIS_R32(ROMInterface) & EEREQ)) {
 430			data = (SIS_R32(ROMInterface) & 0xffff0000) >> 16;
 431			break;
 432		}
 433		msleep(1);
 434	}
 435
 436	return data;
 437}
 438
 439static void sis190_irq_mask_and_ack(void __iomem *ioaddr)
 440{
 441	SIS_W32(IntrMask, 0x00);
 442	SIS_W32(IntrStatus, 0xffffffff);
 443	SIS_PCI_COMMIT();
 444}
 445
 446static void sis190_asic_down(void __iomem *ioaddr)
 447{
 448	/* Stop the chip's Tx and Rx DMA processes. */
 449
 450	SIS_W32(TxControl, 0x1a00);
 451	SIS_W32(RxControl, 0x1a00);
 452
 453	sis190_irq_mask_and_ack(ioaddr);
 454}
 455
 456static void sis190_mark_as_last_descriptor(struct RxDesc *desc)
 457{
 458	desc->size |= cpu_to_le32(RingEnd);
 459}
 460
 461static inline void sis190_give_to_asic(struct RxDesc *desc, u32 rx_buf_sz)
 462{
 463	u32 eor = le32_to_cpu(desc->size) & RingEnd;
 464
 465	desc->PSize = 0x0;
 466	desc->size = cpu_to_le32((rx_buf_sz & RX_BUF_MASK) | eor);
 467	wmb();
 468	desc->status = cpu_to_le32(OWNbit | INTbit);
 469}
 470
 471static inline void sis190_map_to_asic(struct RxDesc *desc, dma_addr_t mapping,
 472				      u32 rx_buf_sz)
 473{
 474	desc->addr = cpu_to_le32(mapping);
 475	sis190_give_to_asic(desc, rx_buf_sz);
 476}
 477
 478static inline void sis190_make_unusable_by_asic(struct RxDesc *desc)
 479{
 480	desc->PSize = 0x0;
 481	desc->addr = cpu_to_le32(0xdeadbeef);
 482	desc->size &= cpu_to_le32(RingEnd);
 483	wmb();
 484	desc->status = 0x0;
 485}
 486
 487static struct sk_buff *sis190_alloc_rx_skb(struct sis190_private *tp,
 488					   struct RxDesc *desc)
 489{
 490	u32 rx_buf_sz = tp->rx_buf_sz;
 491	struct sk_buff *skb;
 492	dma_addr_t mapping;
 493
 494	skb = netdev_alloc_skb(tp->dev, rx_buf_sz);
 495	if (unlikely(!skb))
 496		goto skb_alloc_failed;
 497	mapping = dma_map_single(&tp->pci_dev->dev, skb->data, tp->rx_buf_sz,
 498				 DMA_FROM_DEVICE);
 499	if (dma_mapping_error(&tp->pci_dev->dev, mapping))
 500		goto out;
 501	sis190_map_to_asic(desc, mapping, rx_buf_sz);
 502
 503	return skb;
 504
 505out:
 506	dev_kfree_skb_any(skb);
 507skb_alloc_failed:
 508	sis190_make_unusable_by_asic(desc);
 509	return NULL;
 510}
 511
 512static u32 sis190_rx_fill(struct sis190_private *tp, struct net_device *dev,
 513			  u32 start, u32 end)
 514{
 515	u32 cur;
 516
 517	for (cur = start; cur < end; cur++) {
 518		unsigned int i = cur % NUM_RX_DESC;
 519
 520		if (tp->Rx_skbuff[i])
 521			continue;
 522
 523		tp->Rx_skbuff[i] = sis190_alloc_rx_skb(tp, tp->RxDescRing + i);
 524
 525		if (!tp->Rx_skbuff[i])
 526			break;
 527	}
 528	return cur - start;
 529}
 530
 531static bool sis190_try_rx_copy(struct sis190_private *tp,
 532			       struct sk_buff **sk_buff, int pkt_size,
 533			       dma_addr_t addr)
 534{
 535	struct sk_buff *skb;
 536	bool done = false;
 537
 538	if (pkt_size >= rx_copybreak)
 539		goto out;
 540
 541	skb = netdev_alloc_skb_ip_align(tp->dev, pkt_size);
 542	if (!skb)
 543		goto out;
 544
 545	dma_sync_single_for_cpu(&tp->pci_dev->dev, addr, tp->rx_buf_sz,
 546				DMA_FROM_DEVICE);
 547	skb_copy_to_linear_data(skb, sk_buff[0]->data, pkt_size);
 548	*sk_buff = skb;
 549	done = true;
 550out:
 551	return done;
 552}
 553
 554static inline int sis190_rx_pkt_err(u32 status, struct net_device_stats *stats)
 555{
 556#define ErrMask	(OVRUN | SHORT | LIMIT | MIIER | NIBON | COLON | ABORT)
 557
 558	if ((status & CRCOK) && !(status & ErrMask))
 559		return 0;
 560
 561	if (!(status & CRCOK))
 562		stats->rx_crc_errors++;
 563	else if (status & OVRUN)
 564		stats->rx_over_errors++;
 565	else if (status & (SHORT | LIMIT))
 566		stats->rx_length_errors++;
 567	else if (status & (MIIER | NIBON | COLON))
 568		stats->rx_frame_errors++;
 569
 570	stats->rx_errors++;
 571	return -1;
 572}
 573
 574static int sis190_rx_interrupt(struct net_device *dev,
 575			       struct sis190_private *tp, void __iomem *ioaddr)
 576{
 577	struct net_device_stats *stats = &dev->stats;
 578	u32 rx_left, cur_rx = tp->cur_rx;
 579	u32 delta, count;
 580
 581	rx_left = NUM_RX_DESC + tp->dirty_rx - cur_rx;
 582	rx_left = sis190_rx_quota(rx_left, (u32) dev->quota);
 583
 584	for (; rx_left > 0; rx_left--, cur_rx++) {
 585		unsigned int entry = cur_rx % NUM_RX_DESC;
 586		struct RxDesc *desc = tp->RxDescRing + entry;
 587		u32 status;
 588
 589		if (le32_to_cpu(desc->status) & OWNbit)
 590			break;
 591
 592		status = le32_to_cpu(desc->PSize);
 593
 594		//netif_info(tp, intr, dev, "Rx PSize = %08x\n", status);
 595
 596		if (sis190_rx_pkt_err(status, stats) < 0)
 597			sis190_give_to_asic(desc, tp->rx_buf_sz);
 598		else {
 599			struct sk_buff *skb = tp->Rx_skbuff[entry];
 600			dma_addr_t addr = le32_to_cpu(desc->addr);
 601			int pkt_size = (status & RxSizeMask) - 4;
 602			struct pci_dev *pdev = tp->pci_dev;
 603
 604			if (unlikely(pkt_size > tp->rx_buf_sz)) {
 605				netif_info(tp, intr, dev,
 606					   "(frag) status = %08x\n", status);
 607				stats->rx_dropped++;
 608				stats->rx_length_errors++;
 609				sis190_give_to_asic(desc, tp->rx_buf_sz);
 610				continue;
 611			}
 612
 613
 614			if (sis190_try_rx_copy(tp, &skb, pkt_size, addr)) {
 615				dma_sync_single_for_device(&pdev->dev, addr,
 616							   tp->rx_buf_sz,
 617							   DMA_FROM_DEVICE);
 618				sis190_give_to_asic(desc, tp->rx_buf_sz);
 619			} else {
 620				dma_unmap_single(&pdev->dev, addr,
 621						 tp->rx_buf_sz,
 622						 DMA_FROM_DEVICE);
 623				tp->Rx_skbuff[entry] = NULL;
 624				sis190_make_unusable_by_asic(desc);
 625			}
 626
 627			skb_put(skb, pkt_size);
 628			skb->protocol = eth_type_trans(skb, dev);
 629
 630			sis190_rx_skb(skb);
 631
 632			stats->rx_packets++;
 633			stats->rx_bytes += pkt_size;
 634			if ((status & BCAST) == MCAST)
 635				stats->multicast++;
 636		}
 637	}
 638	count = cur_rx - tp->cur_rx;
 639	tp->cur_rx = cur_rx;
 640
 641	delta = sis190_rx_fill(tp, dev, tp->dirty_rx, tp->cur_rx);
 642	if (!delta && count)
 643		netif_info(tp, intr, dev, "no Rx buffer allocated\n");
 644	tp->dirty_rx += delta;
 645
 646	if ((tp->dirty_rx + NUM_RX_DESC) == tp->cur_rx)
 647		netif_emerg(tp, intr, dev, "Rx buffers exhausted\n");
 648
 649	return count;
 650}
 651
 652static void sis190_unmap_tx_skb(struct pci_dev *pdev, struct sk_buff *skb,
 653				struct TxDesc *desc)
 654{
 655	unsigned int len;
 656
 657	len = skb->len < ETH_ZLEN ? ETH_ZLEN : skb->len;
 658
 659	dma_unmap_single(&pdev->dev, le32_to_cpu(desc->addr), len,
 660			 DMA_TO_DEVICE);
 661
 662	memset(desc, 0x00, sizeof(*desc));
 663}
 664
 665static inline int sis190_tx_pkt_err(u32 status, struct net_device_stats *stats)
 666{
 667#define TxErrMask	(WND | TABRT | FIFO | LINK)
 668
 669	if (!unlikely(status & TxErrMask))
 670		return 0;
 671
 672	if (status & WND)
 673		stats->tx_window_errors++;
 674	if (status & TABRT)
 675		stats->tx_aborted_errors++;
 676	if (status & FIFO)
 677		stats->tx_fifo_errors++;
 678	if (status & LINK)
 679		stats->tx_carrier_errors++;
 680
 681	stats->tx_errors++;
 682
 683	return -1;
 684}
 685
 686static void sis190_tx_interrupt(struct net_device *dev,
 687				struct sis190_private *tp, void __iomem *ioaddr)
 688{
 689	struct net_device_stats *stats = &dev->stats;
 690	u32 pending, dirty_tx = tp->dirty_tx;
 691	/*
 692	 * It would not be needed if queueing was allowed to be enabled
 693	 * again too early (hint: think preempt and unclocked smp systems).
 694	 */
 695	unsigned int queue_stopped;
 696
 697	smp_rmb();
 698	pending = tp->cur_tx - dirty_tx;
 699	queue_stopped = (pending == NUM_TX_DESC);
 700
 701	for (; pending; pending--, dirty_tx++) {
 702		unsigned int entry = dirty_tx % NUM_TX_DESC;
 703		struct TxDesc *txd = tp->TxDescRing + entry;
 704		u32 status = le32_to_cpu(txd->status);
 705		struct sk_buff *skb;
 706
 707		if (status & OWNbit)
 708			break;
 709
 710		skb = tp->Tx_skbuff[entry];
 711
 712		if (likely(sis190_tx_pkt_err(status, stats) == 0)) {
 713			stats->tx_packets++;
 714			stats->tx_bytes += skb->len;
 715			stats->collisions += ((status & ColCountMask) - 1);
 716		}
 717
 718		sis190_unmap_tx_skb(tp->pci_dev, skb, txd);
 719		tp->Tx_skbuff[entry] = NULL;
 720		dev_consume_skb_irq(skb);
 721	}
 722
 723	if (tp->dirty_tx != dirty_tx) {
 724		tp->dirty_tx = dirty_tx;
 725		smp_wmb();
 726		if (queue_stopped)
 727			netif_wake_queue(dev);
 728	}
 729}
 730
 731/*
 732 * The interrupt handler does all of the Rx thread work and cleans up after
 733 * the Tx thread.
 734 */
 735static irqreturn_t sis190_irq(int irq, void *__dev)
 736{
 737	struct net_device *dev = __dev;
 738	struct sis190_private *tp = netdev_priv(dev);
 739	void __iomem *ioaddr = tp->mmio_addr;
 740	unsigned int handled = 0;
 741	u32 status;
 742
 743	status = SIS_R32(IntrStatus);
 744
 745	if ((status == 0xffffffff) || !status)
 746		goto out;
 747
 748	handled = 1;
 749
 750	if (unlikely(!netif_running(dev))) {
 751		sis190_asic_down(ioaddr);
 752		goto out;
 753	}
 754
 755	SIS_W32(IntrStatus, status);
 756
 757//	netif_info(tp, intr, dev, "status = %08x\n", status);
 758
 759	if (status & LinkChange) {
 760		netif_info(tp, intr, dev, "link change\n");
 761		del_timer(&tp->timer);
 762		schedule_work(&tp->phy_task);
 763	}
 764
 765	if (status & RxQInt)
 766		sis190_rx_interrupt(dev, tp, ioaddr);
 767
 768	if (status & TxQ0Int)
 769		sis190_tx_interrupt(dev, tp, ioaddr);
 770out:
 771	return IRQ_RETVAL(handled);
 772}
 773
 774#ifdef CONFIG_NET_POLL_CONTROLLER
 775static void sis190_netpoll(struct net_device *dev)
 776{
 777	struct sis190_private *tp = netdev_priv(dev);
 778	const int irq = tp->pci_dev->irq;
 779
 780	disable_irq(irq);
 781	sis190_irq(irq, dev);
 782	enable_irq(irq);
 783}
 784#endif
 785
 786static void sis190_free_rx_skb(struct sis190_private *tp,
 787			       struct sk_buff **sk_buff, struct RxDesc *desc)
 788{
 789	struct pci_dev *pdev = tp->pci_dev;
 790
 791	dma_unmap_single(&pdev->dev, le32_to_cpu(desc->addr), tp->rx_buf_sz,
 792			 DMA_FROM_DEVICE);
 793	dev_kfree_skb(*sk_buff);
 794	*sk_buff = NULL;
 795	sis190_make_unusable_by_asic(desc);
 796}
 797
 798static void sis190_rx_clear(struct sis190_private *tp)
 799{
 800	unsigned int i;
 801
 802	for (i = 0; i < NUM_RX_DESC; i++) {
 803		if (!tp->Rx_skbuff[i])
 804			continue;
 805		sis190_free_rx_skb(tp, tp->Rx_skbuff + i, tp->RxDescRing + i);
 806	}
 807}
 808
 809static void sis190_init_ring_indexes(struct sis190_private *tp)
 810{
 811	tp->dirty_tx = tp->dirty_rx = tp->cur_tx = tp->cur_rx = 0;
 812}
 813
 814static int sis190_init_ring(struct net_device *dev)
 815{
 816	struct sis190_private *tp = netdev_priv(dev);
 817
 818	sis190_init_ring_indexes(tp);
 819
 820	memset(tp->Tx_skbuff, 0x0, NUM_TX_DESC * sizeof(struct sk_buff *));
 821	memset(tp->Rx_skbuff, 0x0, NUM_RX_DESC * sizeof(struct sk_buff *));
 822
 823	if (sis190_rx_fill(tp, dev, 0, NUM_RX_DESC) != NUM_RX_DESC)
 824		goto err_rx_clear;
 825
 826	sis190_mark_as_last_descriptor(tp->RxDescRing + NUM_RX_DESC - 1);
 827
 828	return 0;
 829
 830err_rx_clear:
 831	sis190_rx_clear(tp);
 832	return -ENOMEM;
 833}
 834
 835static void sis190_set_rx_mode(struct net_device *dev)
 836{
 837	struct sis190_private *tp = netdev_priv(dev);
 838	void __iomem *ioaddr = tp->mmio_addr;
 839	unsigned long flags;
 840	u32 mc_filter[2];	/* Multicast hash filter */
 841	u16 rx_mode;
 842
 843	if (dev->flags & IFF_PROMISC) {
 844		rx_mode =
 845			AcceptBroadcast | AcceptMulticast | AcceptMyPhys |
 846			AcceptAllPhys;
 847		mc_filter[1] = mc_filter[0] = 0xffffffff;
 848	} else if ((netdev_mc_count(dev) > multicast_filter_limit) ||
 849		   (dev->flags & IFF_ALLMULTI)) {
 850		/* Too many to filter perfectly -- accept all multicasts. */
 851		rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
 852		mc_filter[1] = mc_filter[0] = 0xffffffff;
 853	} else {
 854		struct netdev_hw_addr *ha;
 855
 856		rx_mode = AcceptBroadcast | AcceptMyPhys;
 857		mc_filter[1] = mc_filter[0] = 0;
 858		netdev_for_each_mc_addr(ha, dev) {
 859			int bit_nr =
 860				ether_crc(ETH_ALEN, ha->addr) & 0x3f;
 861			mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
 862			rx_mode |= AcceptMulticast;
 863		}
 864	}
 865
 866	spin_lock_irqsave(&tp->lock, flags);
 867
 868	SIS_W16(RxMacControl, rx_mode | 0x2);
 869	SIS_W32(RxHashTable, mc_filter[0]);
 870	SIS_W32(RxHashTable + 4, mc_filter[1]);
 871
 872	spin_unlock_irqrestore(&tp->lock, flags);
 873}
 874
 875static void sis190_soft_reset(void __iomem *ioaddr)
 876{
 877	SIS_W32(IntrControl, 0x8000);
 878	SIS_PCI_COMMIT();
 879	SIS_W32(IntrControl, 0x0);
 880	sis190_asic_down(ioaddr);
 881}
 882
 883static void sis190_hw_start(struct net_device *dev)
 884{
 885	struct sis190_private *tp = netdev_priv(dev);
 886	void __iomem *ioaddr = tp->mmio_addr;
 887
 888	sis190_soft_reset(ioaddr);
 889
 890	SIS_W32(TxDescStartAddr, tp->tx_dma);
 891	SIS_W32(RxDescStartAddr, tp->rx_dma);
 892
 893	SIS_W32(IntrStatus, 0xffffffff);
 894	SIS_W32(IntrMask, 0x0);
 895	SIS_W32(GMIIControl, 0x0);
 896	SIS_W32(TxMacControl, 0x60);
 897	SIS_W16(RxMacControl, 0x02);
 898	SIS_W32(RxHashTable, 0x0);
 899	SIS_W32(0x6c, 0x0);
 900	SIS_W32(RxWolCtrl, 0x0);
 901	SIS_W32(RxWolData, 0x0);
 902
 903	SIS_PCI_COMMIT();
 904
 905	sis190_set_rx_mode(dev);
 906
 907	/* Enable all known interrupts by setting the interrupt mask. */
 908	SIS_W32(IntrMask, sis190_intr_mask);
 909
 910	SIS_W32(TxControl, 0x1a00 | CmdTxEnb);
 911	SIS_W32(RxControl, 0x1a1d);
 912
 913	netif_start_queue(dev);
 914}
 915
 916static void sis190_phy_task(struct work_struct *work)
 917{
 918	struct sis190_private *tp =
 919		container_of(work, struct sis190_private, phy_task);
 920	struct net_device *dev = tp->dev;
 921	void __iomem *ioaddr = tp->mmio_addr;
 922	int phy_id = tp->mii_if.phy_id;
 923	u16 val;
 924
 925	rtnl_lock();
 926
 927	if (!netif_running(dev))
 928		goto out_unlock;
 929
 930	val = mdio_read(ioaddr, phy_id, MII_BMCR);
 931	if (val & BMCR_RESET) {
 932		// FIXME: needlessly high ?  -- FR 02/07/2005
 933		mod_timer(&tp->timer, jiffies + HZ/10);
 934		goto out_unlock;
 935	}
 936
 937	val = mdio_read_latched(ioaddr, phy_id, MII_BMSR);
 938	if (!(val & BMSR_ANEGCOMPLETE) && tp->link_status != LNK_AUTONEG) {
 939		netif_carrier_off(dev);
 940		netif_warn(tp, link, dev, "auto-negotiating...\n");
 941		tp->link_status = LNK_AUTONEG;
 942	} else if ((val & BMSR_LSTATUS) && tp->link_status != LNK_ON) {
 943		/* Rejoice ! */
 944		struct {
 945			int val;
 946			u32 ctl;
 947			const char *msg;
 948		} reg31[] = {
 949			{ LPA_1000FULL, 0x07000c00 | 0x00001000,
 950				"1000 Mbps Full Duplex" },
 951			{ LPA_1000HALF, 0x07000c00,
 952				"1000 Mbps Half Duplex" },
 953			{ LPA_100FULL, 0x04000800 | 0x00001000,
 954				"100 Mbps Full Duplex" },
 955			{ LPA_100HALF, 0x04000800,
 956				"100 Mbps Half Duplex" },
 957			{ LPA_10FULL, 0x04000400 | 0x00001000,
 958				"10 Mbps Full Duplex" },
 959			{ LPA_10HALF, 0x04000400,
 960				"10 Mbps Half Duplex" },
 961			{ 0, 0x04000400, "unknown" }
 962		}, *p = NULL;
 963		u16 adv, autoexp, gigadv, gigrec;
 964
 965		val = mdio_read(ioaddr, phy_id, 0x1f);
 966		netif_info(tp, link, dev, "mii ext = %04x\n", val);
 967
 968		val = mdio_read(ioaddr, phy_id, MII_LPA);
 969		adv = mdio_read(ioaddr, phy_id, MII_ADVERTISE);
 970		autoexp = mdio_read(ioaddr, phy_id, MII_EXPANSION);
 971		netif_info(tp, link, dev, "mii lpa=%04x adv=%04x exp=%04x\n",
 972			   val, adv, autoexp);
 973
 974		if (val & LPA_NPAGE && autoexp & EXPANSION_NWAY) {
 975			/* check for gigabit speed */
 976			gigadv = mdio_read(ioaddr, phy_id, MII_CTRL1000);
 977			gigrec = mdio_read(ioaddr, phy_id, MII_STAT1000);
 978			val = (gigadv & (gigrec >> 2));
 979			if (val & ADVERTISE_1000FULL)
 980				p = reg31;
 981			else if (val & ADVERTISE_1000HALF)
 982				p = reg31 + 1;
 983		}
 984		if (!p) {
 985			val &= adv;
 986
 987			for (p = reg31; p->val; p++) {
 988				if ((val & p->val) == p->val)
 989					break;
 990			}
 991		}
 992
 993		p->ctl |= SIS_R32(StationControl) & ~0x0f001c00;
 994
 995		if ((tp->features & F_HAS_RGMII) &&
 996		    (tp->features & F_PHY_BCM5461)) {
 997			// Set Tx Delay in RGMII mode.
 998			mdio_write(ioaddr, phy_id, 0x18, 0xf1c7);
 999			udelay(200);
1000			mdio_write(ioaddr, phy_id, 0x1c, 0x8c00);
1001			p->ctl |= 0x03000000;
1002		}
1003
1004		SIS_W32(StationControl, p->ctl);
1005
1006		if (tp->features & F_HAS_RGMII) {
1007			SIS_W32(RGDelay, 0x0441);
1008			SIS_W32(RGDelay, 0x0440);
1009		}
1010
1011		tp->negotiated_lpa = p->val;
1012
1013		netif_info(tp, link, dev, "link on %s mode\n", p->msg);
1014		netif_carrier_on(dev);
1015		tp->link_status = LNK_ON;
1016	} else if (!(val & BMSR_LSTATUS) && tp->link_status != LNK_AUTONEG)
1017		tp->link_status = LNK_OFF;
1018	mod_timer(&tp->timer, jiffies + SIS190_PHY_TIMEOUT);
1019
1020out_unlock:
1021	rtnl_unlock();
1022}
1023
1024static void sis190_phy_timer(struct timer_list *t)
1025{
1026	struct sis190_private *tp = from_timer(tp, t, timer);
1027	struct net_device *dev = tp->dev;
1028
1029	if (likely(netif_running(dev)))
1030		schedule_work(&tp->phy_task);
1031}
1032
1033static inline void sis190_delete_timer(struct net_device *dev)
1034{
1035	struct sis190_private *tp = netdev_priv(dev);
1036
1037	del_timer_sync(&tp->timer);
1038}
1039
1040static inline void sis190_request_timer(struct net_device *dev)
1041{
1042	struct sis190_private *tp = netdev_priv(dev);
1043	struct timer_list *timer = &tp->timer;
1044
1045	timer_setup(timer, sis190_phy_timer, 0);
1046	timer->expires = jiffies + SIS190_PHY_TIMEOUT;
1047	add_timer(timer);
1048}
1049
1050static void sis190_set_rxbufsize(struct sis190_private *tp,
1051				 struct net_device *dev)
1052{
1053	unsigned int mtu = dev->mtu;
1054
1055	tp->rx_buf_sz = (mtu > RX_BUF_SIZE) ? mtu + ETH_HLEN + 8 : RX_BUF_SIZE;
1056	/* RxDesc->size has a licence to kill the lower bits */
1057	if (tp->rx_buf_sz & 0x07) {
1058		tp->rx_buf_sz += 8;
1059		tp->rx_buf_sz &= RX_BUF_MASK;
1060	}
1061}
1062
1063static int sis190_open(struct net_device *dev)
1064{
1065	struct sis190_private *tp = netdev_priv(dev);
1066	struct pci_dev *pdev = tp->pci_dev;
1067	int rc = -ENOMEM;
1068
1069	sis190_set_rxbufsize(tp, dev);
1070
1071	/*
1072	 * Rx and Tx descriptors need 256 bytes alignment.
1073	 * pci_alloc_consistent() guarantees a stronger alignment.
1074	 */
1075	tp->TxDescRing = dma_alloc_coherent(&pdev->dev, TX_RING_BYTES,
1076					    &tp->tx_dma, GFP_KERNEL);
1077	if (!tp->TxDescRing)
1078		goto out;
1079
1080	tp->RxDescRing = dma_alloc_coherent(&pdev->dev, RX_RING_BYTES,
1081					    &tp->rx_dma, GFP_KERNEL);
1082	if (!tp->RxDescRing)
1083		goto err_free_tx_0;
1084
1085	rc = sis190_init_ring(dev);
1086	if (rc < 0)
1087		goto err_free_rx_1;
1088
1089	sis190_request_timer(dev);
1090
1091	rc = request_irq(pdev->irq, sis190_irq, IRQF_SHARED, dev->name, dev);
1092	if (rc < 0)
1093		goto err_release_timer_2;
1094
1095	sis190_hw_start(dev);
1096out:
1097	return rc;
1098
1099err_release_timer_2:
1100	sis190_delete_timer(dev);
1101	sis190_rx_clear(tp);
1102err_free_rx_1:
1103	dma_free_coherent(&pdev->dev, RX_RING_BYTES, tp->RxDescRing,
1104			  tp->rx_dma);
1105err_free_tx_0:
1106	dma_free_coherent(&pdev->dev, TX_RING_BYTES, tp->TxDescRing,
1107			  tp->tx_dma);
1108	goto out;
1109}
1110
1111static void sis190_tx_clear(struct sis190_private *tp)
1112{
1113	unsigned int i;
1114
1115	for (i = 0; i < NUM_TX_DESC; i++) {
1116		struct sk_buff *skb = tp->Tx_skbuff[i];
1117
1118		if (!skb)
1119			continue;
1120
1121		sis190_unmap_tx_skb(tp->pci_dev, skb, tp->TxDescRing + i);
1122		tp->Tx_skbuff[i] = NULL;
1123		dev_kfree_skb(skb);
1124
1125		tp->dev->stats.tx_dropped++;
1126	}
1127	tp->cur_tx = tp->dirty_tx = 0;
1128}
1129
1130static void sis190_down(struct net_device *dev)
1131{
1132	struct sis190_private *tp = netdev_priv(dev);
1133	void __iomem *ioaddr = tp->mmio_addr;
1134	unsigned int poll_locked = 0;
1135
1136	sis190_delete_timer(dev);
1137
1138	netif_stop_queue(dev);
1139
1140	do {
1141		spin_lock_irq(&tp->lock);
1142
1143		sis190_asic_down(ioaddr);
1144
1145		spin_unlock_irq(&tp->lock);
1146
1147		synchronize_irq(tp->pci_dev->irq);
1148
1149		if (!poll_locked)
1150			poll_locked++;
1151
1152		synchronize_rcu();
1153
1154	} while (SIS_R32(IntrMask));
1155
1156	sis190_tx_clear(tp);
1157	sis190_rx_clear(tp);
1158}
1159
1160static int sis190_close(struct net_device *dev)
1161{
1162	struct sis190_private *tp = netdev_priv(dev);
1163	struct pci_dev *pdev = tp->pci_dev;
1164
1165	sis190_down(dev);
1166
1167	free_irq(pdev->irq, dev);
1168
1169	dma_free_coherent(&pdev->dev, TX_RING_BYTES, tp->TxDescRing,
1170			  tp->tx_dma);
1171	dma_free_coherent(&pdev->dev, RX_RING_BYTES, tp->RxDescRing,
1172			  tp->rx_dma);
1173
1174	tp->TxDescRing = NULL;
1175	tp->RxDescRing = NULL;
1176
1177	return 0;
1178}
1179
1180static netdev_tx_t sis190_start_xmit(struct sk_buff *skb,
1181				     struct net_device *dev)
1182{
1183	struct sis190_private *tp = netdev_priv(dev);
1184	void __iomem *ioaddr = tp->mmio_addr;
1185	u32 len, entry, dirty_tx;
1186	struct TxDesc *desc;
1187	dma_addr_t mapping;
1188
1189	if (unlikely(skb->len < ETH_ZLEN)) {
1190		if (skb_padto(skb, ETH_ZLEN)) {
1191			dev->stats.tx_dropped++;
1192			goto out;
1193		}
1194		len = ETH_ZLEN;
1195	} else {
1196		len = skb->len;
1197	}
1198
1199	entry = tp->cur_tx % NUM_TX_DESC;
1200	desc = tp->TxDescRing + entry;
1201
1202	if (unlikely(le32_to_cpu(desc->status) & OWNbit)) {
1203		netif_stop_queue(dev);
1204		netif_err(tp, tx_err, dev,
1205			  "BUG! Tx Ring full when queue awake!\n");
1206		return NETDEV_TX_BUSY;
1207	}
1208
1209	mapping = dma_map_single(&tp->pci_dev->dev, skb->data, len,
1210				 DMA_TO_DEVICE);
1211	if (dma_mapping_error(&tp->pci_dev->dev, mapping)) {
1212		netif_err(tp, tx_err, dev,
1213				"PCI mapping failed, dropping packet");
1214		return NETDEV_TX_BUSY;
1215	}
1216
1217	tp->Tx_skbuff[entry] = skb;
1218
1219	desc->PSize = cpu_to_le32(len);
1220	desc->addr = cpu_to_le32(mapping);
1221
1222	desc->size = cpu_to_le32(len);
1223	if (entry == (NUM_TX_DESC - 1))
1224		desc->size |= cpu_to_le32(RingEnd);
1225
1226	wmb();
1227
1228	desc->status = cpu_to_le32(OWNbit | INTbit | DEFbit | CRCbit | PADbit);
1229	if (tp->negotiated_lpa & (LPA_1000HALF | LPA_100HALF | LPA_10HALF)) {
1230		/* Half Duplex */
1231		desc->status |= cpu_to_le32(COLEN | CRSEN | BKFEN);
1232		if (tp->negotiated_lpa & (LPA_1000HALF | LPA_1000FULL))
1233			desc->status |= cpu_to_le32(EXTEN | BSTEN); /* gigabit HD */
1234	}
1235
1236	tp->cur_tx++;
1237
1238	smp_wmb();
1239
1240	SIS_W32(TxControl, 0x1a00 | CmdReset | CmdTxEnb);
1241
1242	dirty_tx = tp->dirty_tx;
1243	if ((tp->cur_tx - NUM_TX_DESC) == dirty_tx) {
1244		netif_stop_queue(dev);
1245		smp_rmb();
1246		if (dirty_tx != tp->dirty_tx)
1247			netif_wake_queue(dev);
1248	}
1249out:
1250	return NETDEV_TX_OK;
1251}
1252
1253static void sis190_free_phy(struct list_head *first_phy)
1254{
1255	struct sis190_phy *cur, *next;
1256
1257	list_for_each_entry_safe(cur, next, first_phy, list) {
1258		kfree(cur);
1259	}
1260}
1261
1262/**
1263 *	sis190_default_phy - Select default PHY for sis190 mac.
1264 *	@dev: the net device to probe for
1265 *
1266 *	Select first detected PHY with link as default.
1267 *	If no one is link on, select PHY whose types is HOME as default.
1268 *	If HOME doesn't exist, select LAN.
1269 */
1270static u16 sis190_default_phy(struct net_device *dev)
1271{
1272	struct sis190_phy *phy, *phy_home, *phy_default, *phy_lan;
1273	struct sis190_private *tp = netdev_priv(dev);
1274	struct mii_if_info *mii_if = &tp->mii_if;
1275	void __iomem *ioaddr = tp->mmio_addr;
1276	u16 status;
1277
1278	phy_home = phy_default = phy_lan = NULL;
1279
1280	list_for_each_entry(phy, &tp->first_phy, list) {
1281		status = mdio_read_latched(ioaddr, phy->phy_id, MII_BMSR);
1282
1283		// Link ON & Not select default PHY & not ghost PHY.
1284		if ((status & BMSR_LSTATUS) &&
1285		    !phy_default &&
1286		    (phy->type != UNKNOWN)) {
1287			phy_default = phy;
1288		} else {
1289			status = mdio_read(ioaddr, phy->phy_id, MII_BMCR);
1290			mdio_write(ioaddr, phy->phy_id, MII_BMCR,
1291				   status | BMCR_ANENABLE | BMCR_ISOLATE);
1292			if (phy->type == HOME)
1293				phy_home = phy;
1294			else if (phy->type == LAN)
1295				phy_lan = phy;
1296		}
1297	}
1298
1299	if (!phy_default) {
1300		if (phy_home)
1301			phy_default = phy_home;
1302		else if (phy_lan)
1303			phy_default = phy_lan;
1304		else
1305			phy_default = list_first_entry(&tp->first_phy,
1306						 struct sis190_phy, list);
1307	}
1308
1309	if (mii_if->phy_id != phy_default->phy_id) {
1310		mii_if->phy_id = phy_default->phy_id;
1311		if (netif_msg_probe(tp))
1312			pr_info("%s: Using transceiver at address %d as default\n",
1313				pci_name(tp->pci_dev), mii_if->phy_id);
1314	}
1315
1316	status = mdio_read(ioaddr, mii_if->phy_id, MII_BMCR);
1317	status &= (~BMCR_ISOLATE);
1318
1319	mdio_write(ioaddr, mii_if->phy_id, MII_BMCR, status);
1320	status = mdio_read_latched(ioaddr, mii_if->phy_id, MII_BMSR);
1321
1322	return status;
1323}
1324
1325static void sis190_init_phy(struct net_device *dev, struct sis190_private *tp,
1326			    struct sis190_phy *phy, unsigned int phy_id,
1327			    u16 mii_status)
1328{
1329	void __iomem *ioaddr = tp->mmio_addr;
1330	struct mii_chip_info *p;
1331
1332	INIT_LIST_HEAD(&phy->list);
1333	phy->status = mii_status;
1334	phy->phy_id = phy_id;
1335
1336	phy->id[0] = mdio_read(ioaddr, phy_id, MII_PHYSID1);
1337	phy->id[1] = mdio_read(ioaddr, phy_id, MII_PHYSID2);
1338
1339	for (p = mii_chip_table; p->type; p++) {
1340		if ((p->id[0] == phy->id[0]) &&
1341		    (p->id[1] == (phy->id[1] & 0xfff0))) {
1342			break;
1343		}
1344	}
1345
1346	if (p->id[1]) {
1347		phy->type = (p->type == MIX) ?
1348			((mii_status & (BMSR_100FULL | BMSR_100HALF)) ?
1349				LAN : HOME) : p->type;
1350		tp->features |= p->feature;
1351		if (netif_msg_probe(tp))
1352			pr_info("%s: %s transceiver at address %d\n",
1353				pci_name(tp->pci_dev), p->name, phy_id);
1354	} else {
1355		phy->type = UNKNOWN;
1356		if (netif_msg_probe(tp))
1357			pr_info("%s: unknown PHY 0x%x:0x%x transceiver at address %d\n",
1358				pci_name(tp->pci_dev),
1359				phy->id[0], (phy->id[1] & 0xfff0), phy_id);
1360	}
1361}
1362
1363static void sis190_mii_probe_88e1111_fixup(struct sis190_private *tp)
1364{
1365	if (tp->features & F_PHY_88E1111) {
1366		void __iomem *ioaddr = tp->mmio_addr;
1367		int phy_id = tp->mii_if.phy_id;
1368		u16 reg[2][2] = {
1369			{ 0x808b, 0x0ce1 },
1370			{ 0x808f, 0x0c60 }
1371		}, *p;
1372
1373		p = (tp->features & F_HAS_RGMII) ? reg[0] : reg[1];
1374
1375		mdio_write(ioaddr, phy_id, 0x1b, p[0]);
1376		udelay(200);
1377		mdio_write(ioaddr, phy_id, 0x14, p[1]);
1378		udelay(200);
1379	}
1380}
1381
1382/**
1383 *	sis190_mii_probe - Probe MII PHY for sis190
1384 *	@dev: the net device to probe for
1385 *
1386 *	Search for total of 32 possible mii phy addresses.
1387 *	Identify and set current phy if found one,
1388 *	return error if it failed to found.
1389 */
1390static int sis190_mii_probe(struct net_device *dev)
1391{
1392	struct sis190_private *tp = netdev_priv(dev);
1393	struct mii_if_info *mii_if = &tp->mii_if;
1394	void __iomem *ioaddr = tp->mmio_addr;
1395	int phy_id;
1396	int rc = 0;
1397
1398	INIT_LIST_HEAD(&tp->first_phy);
1399
1400	for (phy_id = 0; phy_id < PHY_MAX_ADDR; phy_id++) {
1401		struct sis190_phy *phy;
1402		u16 status;
1403
1404		status = mdio_read_latched(ioaddr, phy_id, MII_BMSR);
1405
1406		// Try next mii if the current one is not accessible.
1407		if (status == 0xffff || status == 0x0000)
1408			continue;
1409
1410		phy = kmalloc(sizeof(*phy), GFP_KERNEL);
1411		if (!phy) {
1412			sis190_free_phy(&tp->first_phy);
1413			rc = -ENOMEM;
1414			goto out;
1415		}
1416
1417		sis190_init_phy(dev, tp, phy, phy_id, status);
1418
1419		list_add(&tp->first_phy, &phy->list);
1420	}
1421
1422	if (list_empty(&tp->first_phy)) {
1423		if (netif_msg_probe(tp))
1424			pr_info("%s: No MII transceivers found!\n",
1425				pci_name(tp->pci_dev));
1426		rc = -EIO;
1427		goto out;
1428	}
1429
1430	/* Select default PHY for mac */
1431	sis190_default_phy(dev);
1432
1433	sis190_mii_probe_88e1111_fixup(tp);
1434
1435	mii_if->dev = dev;
1436	mii_if->mdio_read = __mdio_read;
1437	mii_if->mdio_write = __mdio_write;
1438	mii_if->phy_id_mask = PHY_ID_ANY;
1439	mii_if->reg_num_mask = MII_REG_ANY;
1440out:
1441	return rc;
1442}
1443
1444static void sis190_mii_remove(struct net_device *dev)
1445{
1446	struct sis190_private *tp = netdev_priv(dev);
1447
1448	sis190_free_phy(&tp->first_phy);
1449}
1450
1451static void sis190_release_board(struct pci_dev *pdev)
1452{
1453	struct net_device *dev = pci_get_drvdata(pdev);
1454	struct sis190_private *tp = netdev_priv(dev);
1455
1456	iounmap(tp->mmio_addr);
1457	pci_release_regions(pdev);
1458	pci_disable_device(pdev);
1459	free_netdev(dev);
1460}
1461
1462static struct net_device *sis190_init_board(struct pci_dev *pdev)
1463{
1464	struct sis190_private *tp;
1465	struct net_device *dev;
1466	void __iomem *ioaddr;
1467	int rc;
1468
1469	dev = alloc_etherdev(sizeof(*tp));
1470	if (!dev) {
1471		rc = -ENOMEM;
1472		goto err_out_0;
1473	}
1474
1475	SET_NETDEV_DEV(dev, &pdev->dev);
1476
1477	tp = netdev_priv(dev);
1478	tp->dev = dev;
1479	tp->msg_enable = netif_msg_init(debug.msg_enable, SIS190_MSG_DEFAULT);
1480
1481	rc = pci_enable_device(pdev);
1482	if (rc < 0) {
1483		if (netif_msg_probe(tp))
1484			pr_err("%s: enable failure\n", pci_name(pdev));
1485		goto err_free_dev_1;
1486	}
1487
1488	rc = -ENODEV;
1489
1490	if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) {
1491		if (netif_msg_probe(tp))
1492			pr_err("%s: region #0 is no MMIO resource\n",
1493			       pci_name(pdev));
1494		goto err_pci_disable_2;
1495	}
1496	if (pci_resource_len(pdev, 0) < SIS190_REGS_SIZE) {
1497		if (netif_msg_probe(tp))
1498			pr_err("%s: invalid PCI region size(s)\n",
1499			       pci_name(pdev));
1500		goto err_pci_disable_2;
1501	}
1502
1503	rc = pci_request_regions(pdev, DRV_NAME);
1504	if (rc < 0) {
1505		if (netif_msg_probe(tp))
1506			pr_err("%s: could not request regions\n",
1507			       pci_name(pdev));
1508		goto err_pci_disable_2;
1509	}
1510
1511	rc = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
1512	if (rc < 0) {
1513		if (netif_msg_probe(tp))
1514			pr_err("%s: DMA configuration failed\n",
1515			       pci_name(pdev));
1516		goto err_free_res_3;
1517	}
1518
1519	pci_set_master(pdev);
1520
1521	ioaddr = ioremap(pci_resource_start(pdev, 0), SIS190_REGS_SIZE);
1522	if (!ioaddr) {
1523		if (netif_msg_probe(tp))
1524			pr_err("%s: cannot remap MMIO, aborting\n",
1525			       pci_name(pdev));
1526		rc = -EIO;
1527		goto err_free_res_3;
1528	}
1529
1530	tp->pci_dev = pdev;
1531	tp->mmio_addr = ioaddr;
1532	tp->link_status = LNK_OFF;
1533
1534	sis190_irq_mask_and_ack(ioaddr);
1535
1536	sis190_soft_reset(ioaddr);
1537out:
1538	return dev;
1539
1540err_free_res_3:
1541	pci_release_regions(pdev);
1542err_pci_disable_2:
1543	pci_disable_device(pdev);
1544err_free_dev_1:
1545	free_netdev(dev);
1546err_out_0:
1547	dev = ERR_PTR(rc);
1548	goto out;
1549}
1550
1551static void sis190_tx_timeout(struct net_device *dev, unsigned int txqueue)
1552{
1553	struct sis190_private *tp = netdev_priv(dev);
1554	void __iomem *ioaddr = tp->mmio_addr;
1555	u8 tmp8;
1556
1557	/* Disable Tx, if not already */
1558	tmp8 = SIS_R8(TxControl);
1559	if (tmp8 & CmdTxEnb)
1560		SIS_W8(TxControl, tmp8 & ~CmdTxEnb);
1561
1562	netif_info(tp, tx_err, dev, "Transmit timeout, status %08x %08x\n",
1563		   SIS_R32(TxControl), SIS_R32(TxSts));
1564
1565	/* Disable interrupts by clearing the interrupt mask. */
1566	SIS_W32(IntrMask, 0x0000);
1567
1568	/* Stop a shared interrupt from scavenging while we are. */
1569	spin_lock_irq(&tp->lock);
1570	sis190_tx_clear(tp);
1571	spin_unlock_irq(&tp->lock);
1572
1573	/* ...and finally, reset everything. */
1574	sis190_hw_start(dev);
1575
1576	netif_wake_queue(dev);
1577}
1578
1579static void sis190_set_rgmii(struct sis190_private *tp, u8 reg)
1580{
1581	tp->features |= (reg & 0x80) ? F_HAS_RGMII : 0;
1582}
1583
1584static int sis190_get_mac_addr_from_eeprom(struct pci_dev *pdev,
1585					   struct net_device *dev)
1586{
1587	struct sis190_private *tp = netdev_priv(dev);
1588	void __iomem *ioaddr = tp->mmio_addr;
1589	u16 sig;
1590	int i;
1591
1592	if (netif_msg_probe(tp))
1593		pr_info("%s: Read MAC address from EEPROM\n", pci_name(pdev));
1594
1595	/* Check to see if there is a sane EEPROM */
1596	sig = (u16) sis190_read_eeprom(ioaddr, EEPROMSignature);
1597
1598	if ((sig == 0xffff) || (sig == 0x0000)) {
1599		if (netif_msg_probe(tp))
1600			pr_info("%s: Error EEPROM read %x\n",
1601				pci_name(pdev), sig);
1602		return -EIO;
1603	}
1604
1605	/* Get MAC address from EEPROM */
1606	for (i = 0; i < ETH_ALEN / 2; i++) {
1607		u16 w = sis190_read_eeprom(ioaddr, EEPROMMACAddr + i);
1608
1609		((__le16 *)dev->dev_addr)[i] = cpu_to_le16(w);
1610	}
1611
1612	sis190_set_rgmii(tp, sis190_read_eeprom(ioaddr, EEPROMInfo));
1613
1614	return 0;
1615}
1616
1617/**
1618 *	sis190_get_mac_addr_from_apc - Get MAC address for SiS96x model
1619 *	@pdev: PCI device
1620 *	@dev:  network device to get address for
1621 *
1622 *	SiS96x model, use APC CMOS RAM to store MAC address.
1623 *	APC CMOS RAM is accessed through ISA bridge.
1624 *	MAC address is read into @net_dev->dev_addr.
1625 */
1626static int sis190_get_mac_addr_from_apc(struct pci_dev *pdev,
1627					struct net_device *dev)
1628{
1629	static const u16 ids[] = { 0x0965, 0x0966, 0x0968 };
1630	struct sis190_private *tp = netdev_priv(dev);
1631	struct pci_dev *isa_bridge;
1632	u8 reg, tmp8;
1633	unsigned int i;
1634
1635	if (netif_msg_probe(tp))
1636		pr_info("%s: Read MAC address from APC\n", pci_name(pdev));
1637
1638	for (i = 0; i < ARRAY_SIZE(ids); i++) {
1639		isa_bridge = pci_get_device(PCI_VENDOR_ID_SI, ids[i], NULL);
1640		if (isa_bridge)
1641			break;
1642	}
1643
1644	if (!isa_bridge) {
1645		if (netif_msg_probe(tp))
1646			pr_info("%s: Can not find ISA bridge\n",
1647				pci_name(pdev));
1648		return -EIO;
1649	}
1650
1651	/* Enable port 78h & 79h to access APC Registers. */
1652	pci_read_config_byte(isa_bridge, 0x48, &tmp8);
1653	reg = (tmp8 & ~0x02);
1654	pci_write_config_byte(isa_bridge, 0x48, reg);
1655	udelay(50);
1656	pci_read_config_byte(isa_bridge, 0x48, &reg);
1657
1658        for (i = 0; i < ETH_ALEN; i++) {
1659                outb(0x9 + i, 0x78);
1660                dev->dev_addr[i] = inb(0x79);
1661        }
1662
1663	outb(0x12, 0x78);
1664	reg = inb(0x79);
1665
1666	sis190_set_rgmii(tp, reg);
1667
1668	/* Restore the value to ISA Bridge */
1669	pci_write_config_byte(isa_bridge, 0x48, tmp8);
1670	pci_dev_put(isa_bridge);
1671
1672	return 0;
1673}
1674
1675/**
1676 *      sis190_init_rxfilter - Initialize the Rx filter
1677 *      @dev: network device to initialize
1678 *
1679 *      Set receive filter address to our MAC address
1680 *      and enable packet filtering.
1681 */
1682static inline void sis190_init_rxfilter(struct net_device *dev)
1683{
1684	struct sis190_private *tp = netdev_priv(dev);
1685	void __iomem *ioaddr = tp->mmio_addr;
1686	u16 ctl;
1687	int i;
1688
1689	ctl = SIS_R16(RxMacControl);
1690	/*
1691	 * Disable packet filtering before setting filter.
1692	 * Note: SiS's driver writes 32 bits but RxMacControl is 16 bits
1693	 * only and followed by RxMacAddr (6 bytes). Strange. -- FR
1694	 */
1695	SIS_W16(RxMacControl, ctl & ~0x0f00);
1696
1697	for (i = 0; i < ETH_ALEN; i++)
1698		SIS_W8(RxMacAddr + i, dev->dev_addr[i]);
1699
1700	SIS_W16(RxMacControl, ctl);
1701	SIS_PCI_COMMIT();
1702}
1703
1704static int sis190_get_mac_addr(struct pci_dev *pdev, struct net_device *dev)
1705{
1706	int rc;
1707
1708	rc = sis190_get_mac_addr_from_eeprom(pdev, dev);
1709	if (rc < 0) {
1710		u8 reg;
1711
1712		pci_read_config_byte(pdev, 0x73, &reg);
1713
1714		if (reg & 0x00000001)
1715			rc = sis190_get_mac_addr_from_apc(pdev, dev);
1716	}
1717	return rc;
1718}
1719
1720static void sis190_set_speed_auto(struct net_device *dev)
1721{
1722	struct sis190_private *tp = netdev_priv(dev);
1723	void __iomem *ioaddr = tp->mmio_addr;
1724	int phy_id = tp->mii_if.phy_id;
1725	int val;
1726
1727	netif_info(tp, link, dev, "Enabling Auto-negotiation\n");
1728
1729	val = mdio_read(ioaddr, phy_id, MII_ADVERTISE);
1730
1731	// Enable 10/100 Full/Half Mode, leave MII_ADVERTISE bit4:0
1732	// unchanged.
1733	mdio_write(ioaddr, phy_id, MII_ADVERTISE, (val & ADVERTISE_SLCT) |
1734		   ADVERTISE_100FULL | ADVERTISE_10FULL |
1735		   ADVERTISE_100HALF | ADVERTISE_10HALF);
1736
1737	// Enable 1000 Full Mode.
1738	mdio_write(ioaddr, phy_id, MII_CTRL1000, ADVERTISE_1000FULL);
1739
1740	// Enable auto-negotiation and restart auto-negotiation.
1741	mdio_write(ioaddr, phy_id, MII_BMCR,
1742		   BMCR_ANENABLE | BMCR_ANRESTART | BMCR_RESET);
1743}
1744
1745static int sis190_get_link_ksettings(struct net_device *dev,
1746				     struct ethtool_link_ksettings *cmd)
1747{
1748	struct sis190_private *tp = netdev_priv(dev);
1749
1750	mii_ethtool_get_link_ksettings(&tp->mii_if, cmd);
1751
1752	return 0;
1753}
1754
1755static int sis190_set_link_ksettings(struct net_device *dev,
1756				     const struct ethtool_link_ksettings *cmd)
1757{
1758	struct sis190_private *tp = netdev_priv(dev);
1759
1760	return mii_ethtool_set_link_ksettings(&tp->mii_if, cmd);
1761}
1762
1763static void sis190_get_drvinfo(struct net_device *dev,
1764			       struct ethtool_drvinfo *info)
1765{
1766	struct sis190_private *tp = netdev_priv(dev);
1767
1768	strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
1769	strlcpy(info->version, DRV_VERSION, sizeof(info->version));
1770	strlcpy(info->bus_info, pci_name(tp->pci_dev),
1771		sizeof(info->bus_info));
1772}
1773
1774static int sis190_get_regs_len(struct net_device *dev)
1775{
1776	return SIS190_REGS_SIZE;
1777}
1778
1779static void sis190_get_regs(struct net_device *dev, struct ethtool_regs *regs,
1780			    void *p)
1781{
1782	struct sis190_private *tp = netdev_priv(dev);
1783	unsigned long flags;
1784
1785	spin_lock_irqsave(&tp->lock, flags);
1786	memcpy_fromio(p, tp->mmio_addr, regs->len);
1787	spin_unlock_irqrestore(&tp->lock, flags);
1788}
1789
1790static int sis190_nway_reset(struct net_device *dev)
1791{
1792	struct sis190_private *tp = netdev_priv(dev);
1793
1794	return mii_nway_restart(&tp->mii_if);
1795}
1796
1797static u32 sis190_get_msglevel(struct net_device *dev)
1798{
1799	struct sis190_private *tp = netdev_priv(dev);
1800
1801	return tp->msg_enable;
1802}
1803
1804static void sis190_set_msglevel(struct net_device *dev, u32 value)
1805{
1806	struct sis190_private *tp = netdev_priv(dev);
1807
1808	tp->msg_enable = value;
1809}
1810
1811static const struct ethtool_ops sis190_ethtool_ops = {
1812	.get_drvinfo	= sis190_get_drvinfo,
1813	.get_regs_len	= sis190_get_regs_len,
1814	.get_regs	= sis190_get_regs,
1815	.get_link	= ethtool_op_get_link,
1816	.get_msglevel	= sis190_get_msglevel,
1817	.set_msglevel	= sis190_set_msglevel,
1818	.nway_reset	= sis190_nway_reset,
1819	.get_link_ksettings = sis190_get_link_ksettings,
1820	.set_link_ksettings = sis190_set_link_ksettings,
1821};
1822
1823static int sis190_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
1824{
1825	struct sis190_private *tp = netdev_priv(dev);
1826
1827	return !netif_running(dev) ? -EINVAL :
1828		generic_mii_ioctl(&tp->mii_if, if_mii(ifr), cmd, NULL);
1829}
1830
1831static int sis190_mac_addr(struct net_device  *dev, void *p)
1832{
1833	int rc;
1834
1835	rc = eth_mac_addr(dev, p);
1836	if (!rc)
1837		sis190_init_rxfilter(dev);
1838	return rc;
1839}
1840
1841static const struct net_device_ops sis190_netdev_ops = {
1842	.ndo_open		= sis190_open,
1843	.ndo_stop		= sis190_close,
1844	.ndo_do_ioctl		= sis190_ioctl,
1845	.ndo_start_xmit		= sis190_start_xmit,
1846	.ndo_tx_timeout		= sis190_tx_timeout,
1847	.ndo_set_rx_mode	= sis190_set_rx_mode,
1848	.ndo_set_mac_address	= sis190_mac_addr,
1849	.ndo_validate_addr	= eth_validate_addr,
1850#ifdef CONFIG_NET_POLL_CONTROLLER
1851	.ndo_poll_controller	 = sis190_netpoll,
1852#endif
1853};
1854
1855static int sis190_init_one(struct pci_dev *pdev,
1856			   const struct pci_device_id *ent)
1857{
1858	static int printed_version = 0;
1859	struct sis190_private *tp;
1860	struct net_device *dev;
1861	void __iomem *ioaddr;
1862	int rc;
1863
1864	if (!printed_version) {
1865		if (netif_msg_drv(&debug))
1866			pr_info(SIS190_DRIVER_NAME " loaded\n");
1867		printed_version = 1;
1868	}
1869
1870	dev = sis190_init_board(pdev);
1871	if (IS_ERR(dev)) {
1872		rc = PTR_ERR(dev);
1873		goto out;
1874	}
1875
1876	pci_set_drvdata(pdev, dev);
1877
1878	tp = netdev_priv(dev);
1879	ioaddr = tp->mmio_addr;
1880
1881	rc = sis190_get_mac_addr(pdev, dev);
1882	if (rc < 0)
1883		goto err_release_board;
1884
1885	sis190_init_rxfilter(dev);
1886
1887	INIT_WORK(&tp->phy_task, sis190_phy_task);
1888
1889	dev->netdev_ops = &sis190_netdev_ops;
1890
1891	dev->ethtool_ops = &sis190_ethtool_ops;
1892	dev->watchdog_timeo = SIS190_TX_TIMEOUT;
1893
1894	spin_lock_init(&tp->lock);
1895
1896	rc = sis190_mii_probe(dev);
1897	if (rc < 0)
1898		goto err_release_board;
1899
1900	rc = register_netdev(dev);
1901	if (rc < 0)
1902		goto err_remove_mii;
1903
1904	if (netif_msg_probe(tp)) {
1905		netdev_info(dev, "%s: %s at %p (IRQ: %d), %pM\n",
1906			    pci_name(pdev),
1907			    sis_chip_info[ent->driver_data].name,
1908			    ioaddr, pdev->irq, dev->dev_addr);
1909		netdev_info(dev, "%s mode.\n",
1910			    (tp->features & F_HAS_RGMII) ? "RGMII" : "GMII");
1911	}
1912
1913	netif_carrier_off(dev);
1914
1915	sis190_set_speed_auto(dev);
1916out:
1917	return rc;
1918
1919err_remove_mii:
1920	sis190_mii_remove(dev);
1921err_release_board:
1922	sis190_release_board(pdev);
1923	goto out;
1924}
1925
1926static void sis190_remove_one(struct pci_dev *pdev)
1927{
1928	struct net_device *dev = pci_get_drvdata(pdev);
1929	struct sis190_private *tp = netdev_priv(dev);
1930
1931	sis190_mii_remove(dev);
1932	cancel_work_sync(&tp->phy_task);
1933	unregister_netdev(dev);
1934	sis190_release_board(pdev);
1935}
1936
1937static struct pci_driver sis190_pci_driver = {
1938	.name		= DRV_NAME,
1939	.id_table	= sis190_pci_tbl,
1940	.probe		= sis190_init_one,
1941	.remove		= sis190_remove_one,
1942};
1943
1944module_pci_driver(sis190_pci_driver);