Linux Audio

Check our new training course

Loading...
   1/* epic100.c: A SMC 83c170 EPIC/100 Fast Ethernet driver for Linux. */
   2/*
   3	Written/copyright 1997-2001 by Donald Becker.
   4
   5	This software may be used and distributed according to the terms of
   6	the GNU General Public License (GPL), incorporated herein by reference.
   7	Drivers based on or derived from this code fall under the GPL and must
   8	retain the authorship, copyright and license notice.  This file is not
   9	a complete program and may only be used when the entire operating
  10	system is licensed under the GPL.
  11
  12	This driver is for the SMC83c170/175 "EPIC" series, as used on the
  13	SMC EtherPower II 9432 PCI adapter, and several CardBus cards.
  14
  15	The author may be reached as becker@scyld.com, or C/O
  16	Scyld Computing Corporation
  17	410 Severn Ave., Suite 210
  18	Annapolis MD 21403
  19
  20	Information and updates available at
  21	http://www.scyld.com/network/epic100.html
  22	[this link no longer provides anything useful -jgarzik]
  23
  24	---------------------------------------------------------------------
  25
  26*/
  27
  28#define DRV_NAME        "epic100"
  29#define DRV_VERSION     "2.1"
  30#define DRV_RELDATE     "Sept 11, 2006"
  31
  32/* The user-configurable values.
  33   These may be modified when a driver module is loaded.*/
  34
  35static int debug = 1;			/* 1 normal messages, 0 quiet .. 7 verbose. */
  36
  37/* Used to pass the full-duplex flag, etc. */
  38#define MAX_UNITS 8		/* More are supported, limit only on options */
  39static int options[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
  40static int full_duplex[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
  41
  42/* Set the copy breakpoint for the copy-only-tiny-frames scheme.
  43   Setting to > 1518 effectively disables this feature. */
  44static int rx_copybreak;
  45
  46/* Operational parameters that are set at compile time. */
  47
  48/* Keep the ring sizes a power of two for operational efficiency.
  49   The compiler will convert <unsigned>'%'<2^N> into a bit mask.
  50   Making the Tx ring too large decreases the effectiveness of channel
  51   bonding and packet priority.
  52   There are no ill effects from too-large receive rings. */
  53#define TX_RING_SIZE	256
  54#define TX_QUEUE_LEN	240		/* Limit ring entries actually used.  */
  55#define RX_RING_SIZE	256
  56#define TX_TOTAL_SIZE	TX_RING_SIZE*sizeof(struct epic_tx_desc)
  57#define RX_TOTAL_SIZE	RX_RING_SIZE*sizeof(struct epic_rx_desc)
  58
  59/* Operational parameters that usually are not changed. */
  60/* Time in jiffies before concluding the transmitter is hung. */
  61#define TX_TIMEOUT  (2*HZ)
  62
  63#define PKT_BUF_SZ		1536			/* Size of each temporary Rx buffer.*/
  64
  65/* Bytes transferred to chip before transmission starts. */
  66/* Initial threshold, increased on underflow, rounded down to 4 byte units. */
  67#define TX_FIFO_THRESH 256
  68#define RX_FIFO_THRESH 1		/* 0-3, 0==32, 64,96, or 3==128 bytes  */
  69
  70#include <linux/module.h>
  71#include <linux/kernel.h>
  72#include <linux/string.h>
  73#include <linux/timer.h>
  74#include <linux/errno.h>
  75#include <linux/ioport.h>
  76#include <linux/interrupt.h>
  77#include <linux/pci.h>
  78#include <linux/delay.h>
  79#include <linux/netdevice.h>
  80#include <linux/etherdevice.h>
  81#include <linux/skbuff.h>
  82#include <linux/init.h>
  83#include <linux/spinlock.h>
  84#include <linux/ethtool.h>
  85#include <linux/mii.h>
  86#include <linux/crc32.h>
  87#include <linux/bitops.h>
  88#include <asm/io.h>
  89#include <asm/uaccess.h>
  90#include <asm/byteorder.h>
  91
  92/* These identify the driver base version and may not be removed. */
  93static char version[] __devinitdata =
  94DRV_NAME ".c:v1.11 1/7/2001 Written by Donald Becker <becker@scyld.com>\n";
  95static char version2[] __devinitdata =
  96"  (unofficial 2.4.x kernel port, version " DRV_VERSION ", " DRV_RELDATE ")\n";
  97
  98MODULE_AUTHOR("Donald Becker <becker@scyld.com>");
  99MODULE_DESCRIPTION("SMC 83c170 EPIC series Ethernet driver");
 100MODULE_LICENSE("GPL");
 101
 102module_param(debug, int, 0);
 103module_param(rx_copybreak, int, 0);
 104module_param_array(options, int, NULL, 0);
 105module_param_array(full_duplex, int, NULL, 0);
 106MODULE_PARM_DESC(debug, "EPIC/100 debug level (0-5)");
 107MODULE_PARM_DESC(options, "EPIC/100: Bits 0-3: media type, bit 4: full duplex");
 108MODULE_PARM_DESC(rx_copybreak, "EPIC/100 copy breakpoint for copy-only-tiny-frames");
 109MODULE_PARM_DESC(full_duplex, "EPIC/100 full duplex setting(s) (1)");
 110
 111/*
 112				Theory of Operation
 113
 114I. Board Compatibility
 115
 116This device driver is designed for the SMC "EPIC/100", the SMC
 117single-chip Ethernet controllers for PCI.  This chip is used on
 118the SMC EtherPower II boards.
 119
 120II. Board-specific settings
 121
 122PCI bus devices are configured by the system at boot time, so no jumpers
 123need to be set on the board.  The system BIOS will assign the
 124PCI INTA signal to a (preferably otherwise unused) system IRQ line.
 125Note: Kernel versions earlier than 1.3.73 do not support shared PCI
 126interrupt lines.
 127
 128III. Driver operation
 129
 130IIIa. Ring buffers
 131
 132IVb. References
 133
 134http://www.smsc.com/media/Downloads_Public/discontinued/83c171.pdf
 135http://www.smsc.com/media/Downloads_Public/discontinued/83c175.pdf
 136http://scyld.com/expert/NWay.html
 137http://www.national.com/pf/DP/DP83840A.html
 138
 139IVc. Errata
 140
 141*/
 142
 143
 144enum chip_capability_flags { MII_PWRDWN=1, TYPE2_INTR=2, NO_MII=4 };
 145
 146#define EPIC_TOTAL_SIZE 0x100
 147#define USE_IO_OPS 1
 148
 149#ifdef USE_IO_OPS
 150#define EPIC_BAR	0
 151#else
 152#define EPIC_BAR	1
 153#endif
 154
 155typedef enum {
 156	SMSC_83C170_0,
 157	SMSC_83C170,
 158	SMSC_83C175,
 159} chip_t;
 160
 161
 162struct epic_chip_info {
 163	const char *name;
 164        int drv_flags;                          /* Driver use, intended as capability flags. */
 165};
 166
 167
 168/* indexed by chip_t */
 169static const struct epic_chip_info pci_id_tbl[] = {
 170	{ "SMSC EPIC/100 83c170",	TYPE2_INTR | NO_MII | MII_PWRDWN },
 171	{ "SMSC EPIC/100 83c170",	TYPE2_INTR },
 172	{ "SMSC EPIC/C 83c175",		TYPE2_INTR | MII_PWRDWN },
 173};
 174
 175
 176static DEFINE_PCI_DEVICE_TABLE(epic_pci_tbl) = {
 177	{ 0x10B8, 0x0005, 0x1092, 0x0AB4, 0, 0, SMSC_83C170_0 },
 178	{ 0x10B8, 0x0005, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SMSC_83C170 },
 179	{ 0x10B8, 0x0006, PCI_ANY_ID, PCI_ANY_ID,
 180	  PCI_CLASS_NETWORK_ETHERNET << 8, 0xffff00, SMSC_83C175 },
 181	{ 0,}
 182};
 183MODULE_DEVICE_TABLE (pci, epic_pci_tbl);
 184
 185#define ew16(reg, val)	iowrite16(val, ioaddr + (reg))
 186#define ew32(reg, val)	iowrite32(val, ioaddr + (reg))
 187#define er8(reg)	ioread8(ioaddr + (reg))
 188#define er16(reg)	ioread16(ioaddr + (reg))
 189#define er32(reg)	ioread32(ioaddr + (reg))
 190
 191/* Offsets to registers, using the (ugh) SMC names. */
 192enum epic_registers {
 193  COMMAND=0, INTSTAT=4, INTMASK=8, GENCTL=0x0C, NVCTL=0x10, EECTL=0x14,
 194  PCIBurstCnt=0x18,
 195  TEST1=0x1C, CRCCNT=0x20, ALICNT=0x24, MPCNT=0x28,	/* Rx error counters. */
 196  MIICtrl=0x30, MIIData=0x34, MIICfg=0x38,
 197  LAN0=64,						/* MAC address. */
 198  MC0=80,						/* Multicast filter table. */
 199  RxCtrl=96, TxCtrl=112, TxSTAT=0x74,
 200  PRxCDAR=0x84, RxSTAT=0xA4, EarlyRx=0xB0, PTxCDAR=0xC4, TxThresh=0xDC,
 201};
 202
 203/* Interrupt register bits, using my own meaningful names. */
 204enum IntrStatus {
 205	TxIdle=0x40000, RxIdle=0x20000, IntrSummary=0x010000,
 206	PCIBusErr170=0x7000, PCIBusErr175=0x1000, PhyEvent175=0x8000,
 207	RxStarted=0x0800, RxEarlyWarn=0x0400, CntFull=0x0200, TxUnderrun=0x0100,
 208	TxEmpty=0x0080, TxDone=0x0020, RxError=0x0010,
 209	RxOverflow=0x0008, RxFull=0x0004, RxHeader=0x0002, RxDone=0x0001,
 210};
 211enum CommandBits {
 212	StopRx=1, StartRx=2, TxQueued=4, RxQueued=8,
 213	StopTxDMA=0x20, StopRxDMA=0x40, RestartTx=0x80,
 214};
 215
 216#define EpicRemoved	0xffffffff	/* Chip failed or removed (CardBus) */
 217
 218#define EpicNapiEvent	(TxEmpty | TxDone | \
 219			 RxDone | RxStarted | RxEarlyWarn | RxOverflow | RxFull)
 220#define EpicNormalEvent	(0x0000ffff & ~EpicNapiEvent)
 221
 222static const u16 media2miictl[16] = {
 223	0, 0x0C00, 0x0C00, 0x2000,  0x0100, 0x2100, 0, 0,
 224	0, 0, 0, 0,  0, 0, 0, 0 };
 225
 226/*
 227 * The EPIC100 Rx and Tx buffer descriptors.  Note that these
 228 * really ARE host-endian; it's not a misannotation.  We tell
 229 * the card to byteswap them internally on big-endian hosts -
 230 * look for #ifdef __BIG_ENDIAN in epic_open().
 231 */
 232
 233struct epic_tx_desc {
 234	u32 txstatus;
 235	u32 bufaddr;
 236	u32 buflength;
 237	u32 next;
 238};
 239
 240struct epic_rx_desc {
 241	u32 rxstatus;
 242	u32 bufaddr;
 243	u32 buflength;
 244	u32 next;
 245};
 246
 247enum desc_status_bits {
 248	DescOwn=0x8000,
 249};
 250
 251#define PRIV_ALIGN	15 	/* Required alignment mask */
 252struct epic_private {
 253	struct epic_rx_desc *rx_ring;
 254	struct epic_tx_desc *tx_ring;
 255	/* The saved address of a sent-in-place packet/buffer, for skfree(). */
 256	struct sk_buff* tx_skbuff[TX_RING_SIZE];
 257	/* The addresses of receive-in-place skbuffs. */
 258	struct sk_buff* rx_skbuff[RX_RING_SIZE];
 259
 260	dma_addr_t tx_ring_dma;
 261	dma_addr_t rx_ring_dma;
 262
 263	/* Ring pointers. */
 264	spinlock_t lock;				/* Group with Tx control cache line. */
 265	spinlock_t napi_lock;
 266	struct napi_struct napi;
 267	unsigned int reschedule_in_poll;
 268	unsigned int cur_tx, dirty_tx;
 269
 270	unsigned int cur_rx, dirty_rx;
 271	u32 irq_mask;
 272	unsigned int rx_buf_sz;				/* Based on MTU+slack. */
 273
 274	void __iomem *ioaddr;
 275	struct pci_dev *pci_dev;			/* PCI bus location. */
 276	int chip_id, chip_flags;
 277
 278	struct timer_list timer;			/* Media selection timer. */
 279	int tx_threshold;
 280	unsigned char mc_filter[8];
 281	signed char phys[4];				/* MII device addresses. */
 282	u16 advertising;					/* NWay media advertisement */
 283	int mii_phy_cnt;
 284	struct mii_if_info mii;
 285	unsigned int tx_full:1;				/* The Tx queue is full. */
 286	unsigned int default_port:4;		/* Last dev->if_port value. */
 287};
 288
 289static int epic_open(struct net_device *dev);
 290static int read_eeprom(struct epic_private *, int);
 291static int mdio_read(struct net_device *dev, int phy_id, int location);
 292static void mdio_write(struct net_device *dev, int phy_id, int loc, int val);
 293static void epic_restart(struct net_device *dev);
 294static void epic_timer(unsigned long data);
 295static void epic_tx_timeout(struct net_device *dev);
 296static void epic_init_ring(struct net_device *dev);
 297static netdev_tx_t epic_start_xmit(struct sk_buff *skb,
 298				   struct net_device *dev);
 299static int epic_rx(struct net_device *dev, int budget);
 300static int epic_poll(struct napi_struct *napi, int budget);
 301static irqreturn_t epic_interrupt(int irq, void *dev_instance);
 302static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
 303static const struct ethtool_ops netdev_ethtool_ops;
 304static int epic_close(struct net_device *dev);
 305static struct net_device_stats *epic_get_stats(struct net_device *dev);
 306static void set_rx_mode(struct net_device *dev);
 307
 308static const struct net_device_ops epic_netdev_ops = {
 309	.ndo_open		= epic_open,
 310	.ndo_stop		= epic_close,
 311	.ndo_start_xmit		= epic_start_xmit,
 312	.ndo_tx_timeout 	= epic_tx_timeout,
 313	.ndo_get_stats		= epic_get_stats,
 314	.ndo_set_rx_mode	= set_rx_mode,
 315	.ndo_do_ioctl 		= netdev_ioctl,
 316	.ndo_change_mtu		= eth_change_mtu,
 317	.ndo_set_mac_address 	= eth_mac_addr,
 318	.ndo_validate_addr	= eth_validate_addr,
 319};
 320
 321static int __devinit epic_init_one(struct pci_dev *pdev,
 322				   const struct pci_device_id *ent)
 323{
 324	static int card_idx = -1;
 325	void __iomem *ioaddr;
 326	int chip_idx = (int) ent->driver_data;
 327	int irq;
 328	struct net_device *dev;
 329	struct epic_private *ep;
 330	int i, ret, option = 0, duplex = 0;
 331	void *ring_space;
 332	dma_addr_t ring_dma;
 333
 334/* when built into the kernel, we only print version if device is found */
 335#ifndef MODULE
 336	static int printed_version;
 337	if (!printed_version++)
 338		printk(KERN_INFO "%s%s", version, version2);
 339#endif
 340
 341	card_idx++;
 342
 343	ret = pci_enable_device(pdev);
 344	if (ret)
 345		goto out;
 346	irq = pdev->irq;
 347
 348	if (pci_resource_len(pdev, 0) < EPIC_TOTAL_SIZE) {
 349		dev_err(&pdev->dev, "no PCI region space\n");
 350		ret = -ENODEV;
 351		goto err_out_disable;
 352	}
 353
 354	pci_set_master(pdev);
 355
 356	ret = pci_request_regions(pdev, DRV_NAME);
 357	if (ret < 0)
 358		goto err_out_disable;
 359
 360	ret = -ENOMEM;
 361
 362	dev = alloc_etherdev(sizeof (*ep));
 363	if (!dev)
 364		goto err_out_free_res;
 365
 366	SET_NETDEV_DEV(dev, &pdev->dev);
 367
 368	ioaddr = pci_iomap(pdev, EPIC_BAR, 0);
 369	if (!ioaddr) {
 370		dev_err(&pdev->dev, "ioremap failed\n");
 371		goto err_out_free_netdev;
 372	}
 373
 374	pci_set_drvdata(pdev, dev);
 375	ep = netdev_priv(dev);
 376	ep->ioaddr = ioaddr;
 377	ep->mii.dev = dev;
 378	ep->mii.mdio_read = mdio_read;
 379	ep->mii.mdio_write = mdio_write;
 380	ep->mii.phy_id_mask = 0x1f;
 381	ep->mii.reg_num_mask = 0x1f;
 382
 383	ring_space = pci_alloc_consistent(pdev, TX_TOTAL_SIZE, &ring_dma);
 384	if (!ring_space)
 385		goto err_out_iounmap;
 386	ep->tx_ring = ring_space;
 387	ep->tx_ring_dma = ring_dma;
 388
 389	ring_space = pci_alloc_consistent(pdev, RX_TOTAL_SIZE, &ring_dma);
 390	if (!ring_space)
 391		goto err_out_unmap_tx;
 392	ep->rx_ring = ring_space;
 393	ep->rx_ring_dma = ring_dma;
 394
 395	if (dev->mem_start) {
 396		option = dev->mem_start;
 397		duplex = (dev->mem_start & 16) ? 1 : 0;
 398	} else if (card_idx >= 0  &&  card_idx < MAX_UNITS) {
 399		if (options[card_idx] >= 0)
 400			option = options[card_idx];
 401		if (full_duplex[card_idx] >= 0)
 402			duplex = full_duplex[card_idx];
 403	}
 404
 405	spin_lock_init(&ep->lock);
 406	spin_lock_init(&ep->napi_lock);
 407	ep->reschedule_in_poll = 0;
 408
 409	/* Bring the chip out of low-power mode. */
 410	ew32(GENCTL, 0x4200);
 411	/* Magic?!  If we don't set this bit the MII interface won't work. */
 412	/* This magic is documented in SMSC app note 7.15 */
 413	for (i = 16; i > 0; i--)
 414		ew32(TEST1, 0x0008);
 415
 416	/* Turn on the MII transceiver. */
 417	ew32(MIICfg, 0x12);
 418	if (chip_idx == 1)
 419		ew32(NVCTL, (er32(NVCTL) & ~0x003c) | 0x4800);
 420	ew32(GENCTL, 0x0200);
 421
 422	/* Note: the '175 does not have a serial EEPROM. */
 423	for (i = 0; i < 3; i++)
 424		((__le16 *)dev->dev_addr)[i] = cpu_to_le16(er16(LAN0 + i*4));
 425
 426	if (debug > 2) {
 427		dev_printk(KERN_DEBUG, &pdev->dev, "EEPROM contents:\n");
 428		for (i = 0; i < 64; i++)
 429			printk(" %4.4x%s", read_eeprom(ep, i),
 430				   i % 16 == 15 ? "\n" : "");
 431	}
 432
 433	ep->pci_dev = pdev;
 434	ep->chip_id = chip_idx;
 435	ep->chip_flags = pci_id_tbl[chip_idx].drv_flags;
 436	ep->irq_mask =
 437		(ep->chip_flags & TYPE2_INTR ?  PCIBusErr175 : PCIBusErr170)
 438		 | CntFull | TxUnderrun | EpicNapiEvent;
 439
 440	/* Find the connected MII xcvrs.
 441	   Doing this in open() would allow detecting external xcvrs later, but
 442	   takes much time and no cards have external MII. */
 443	{
 444		int phy, phy_idx = 0;
 445		for (phy = 1; phy < 32 && phy_idx < sizeof(ep->phys); phy++) {
 446			int mii_status = mdio_read(dev, phy, MII_BMSR);
 447			if (mii_status != 0xffff  &&  mii_status != 0x0000) {
 448				ep->phys[phy_idx++] = phy;
 449				dev_info(&pdev->dev,
 450					"MII transceiver #%d control "
 451					"%4.4x status %4.4x.\n",
 452					phy, mdio_read(dev, phy, 0), mii_status);
 453			}
 454		}
 455		ep->mii_phy_cnt = phy_idx;
 456		if (phy_idx != 0) {
 457			phy = ep->phys[0];
 458			ep->mii.advertising = mdio_read(dev, phy, MII_ADVERTISE);
 459			dev_info(&pdev->dev,
 460				"Autonegotiation advertising %4.4x link "
 461				   "partner %4.4x.\n",
 462				   ep->mii.advertising, mdio_read(dev, phy, 5));
 463		} else if ( ! (ep->chip_flags & NO_MII)) {
 464			dev_warn(&pdev->dev,
 465				"***WARNING***: No MII transceiver found!\n");
 466			/* Use the known PHY address of the EPII. */
 467			ep->phys[0] = 3;
 468		}
 469		ep->mii.phy_id = ep->phys[0];
 470	}
 471
 472	/* Turn off the MII xcvr (175 only!), leave the chip in low-power mode. */
 473	if (ep->chip_flags & MII_PWRDWN)
 474		ew32(NVCTL, er32(NVCTL) & ~0x483c);
 475	ew32(GENCTL, 0x0008);
 476
 477	/* The lower four bits are the media type. */
 478	if (duplex) {
 479		ep->mii.force_media = ep->mii.full_duplex = 1;
 480		dev_info(&pdev->dev, "Forced full duplex requested.\n");
 481	}
 482	dev->if_port = ep->default_port = option;
 483
 484	/* The Epic-specific entries in the device structure. */
 485	dev->netdev_ops = &epic_netdev_ops;
 486	dev->ethtool_ops = &netdev_ethtool_ops;
 487	dev->watchdog_timeo = TX_TIMEOUT;
 488	netif_napi_add(dev, &ep->napi, epic_poll, 64);
 489
 490	ret = register_netdev(dev);
 491	if (ret < 0)
 492		goto err_out_unmap_rx;
 493
 494	printk(KERN_INFO "%s: %s at %lx, IRQ %d, %pM\n",
 495	       dev->name, pci_id_tbl[chip_idx].name,
 496	       (long)pci_resource_start(pdev, EPIC_BAR), pdev->irq,
 497	       dev->dev_addr);
 498
 499out:
 500	return ret;
 501
 502err_out_unmap_rx:
 503	pci_free_consistent(pdev, RX_TOTAL_SIZE, ep->rx_ring, ep->rx_ring_dma);
 504err_out_unmap_tx:
 505	pci_free_consistent(pdev, TX_TOTAL_SIZE, ep->tx_ring, ep->tx_ring_dma);
 506err_out_iounmap:
 507	pci_iounmap(pdev, ioaddr);
 508err_out_free_netdev:
 509	free_netdev(dev);
 510err_out_free_res:
 511	pci_release_regions(pdev);
 512err_out_disable:
 513	pci_disable_device(pdev);
 514	goto out;
 515}
 516
 517/* Serial EEPROM section. */
 518
 519/*  EEPROM_Ctrl bits. */
 520#define EE_SHIFT_CLK	0x04	/* EEPROM shift clock. */
 521#define EE_CS			0x02	/* EEPROM chip select. */
 522#define EE_DATA_WRITE	0x08	/* EEPROM chip data in. */
 523#define EE_WRITE_0		0x01
 524#define EE_WRITE_1		0x09
 525#define EE_DATA_READ	0x10	/* EEPROM chip data out. */
 526#define EE_ENB			(0x0001 | EE_CS)
 527
 528/* Delay between EEPROM clock transitions.
 529   This serves to flush the operation to the PCI bus.
 530 */
 531
 532#define eeprom_delay()	er32(EECTL)
 533
 534/* The EEPROM commands include the alway-set leading bit. */
 535#define EE_WRITE_CMD	(5 << 6)
 536#define EE_READ64_CMD	(6 << 6)
 537#define EE_READ256_CMD	(6 << 8)
 538#define EE_ERASE_CMD	(7 << 6)
 539
 540static void epic_disable_int(struct net_device *dev, struct epic_private *ep)
 541{
 542	void __iomem *ioaddr = ep->ioaddr;
 543
 544	ew32(INTMASK, 0x00000000);
 545}
 546
 547static inline void __epic_pci_commit(void __iomem *ioaddr)
 548{
 549#ifndef USE_IO_OPS
 550	er32(INTMASK);
 551#endif
 552}
 553
 554static inline void epic_napi_irq_off(struct net_device *dev,
 555				     struct epic_private *ep)
 556{
 557	void __iomem *ioaddr = ep->ioaddr;
 558
 559	ew32(INTMASK, ep->irq_mask & ~EpicNapiEvent);
 560	__epic_pci_commit(ioaddr);
 561}
 562
 563static inline void epic_napi_irq_on(struct net_device *dev,
 564				    struct epic_private *ep)
 565{
 566	void __iomem *ioaddr = ep->ioaddr;
 567
 568	/* No need to commit possible posted write */
 569	ew32(INTMASK, ep->irq_mask | EpicNapiEvent);
 570}
 571
 572static int __devinit read_eeprom(struct epic_private *ep, int location)
 573{
 574	void __iomem *ioaddr = ep->ioaddr;
 575	int i;
 576	int retval = 0;
 577	int read_cmd = location |
 578		(er32(EECTL) & 0x40 ? EE_READ64_CMD : EE_READ256_CMD);
 579
 580	ew32(EECTL, EE_ENB & ~EE_CS);
 581	ew32(EECTL, EE_ENB);
 582
 583	/* Shift the read command bits out. */
 584	for (i = 12; i >= 0; i--) {
 585		short dataval = (read_cmd & (1 << i)) ? EE_WRITE_1 : EE_WRITE_0;
 586		ew32(EECTL, EE_ENB | dataval);
 587		eeprom_delay();
 588		ew32(EECTL, EE_ENB | dataval | EE_SHIFT_CLK);
 589		eeprom_delay();
 590	}
 591	ew32(EECTL, EE_ENB);
 592
 593	for (i = 16; i > 0; i--) {
 594		ew32(EECTL, EE_ENB | EE_SHIFT_CLK);
 595		eeprom_delay();
 596		retval = (retval << 1) | ((er32(EECTL) & EE_DATA_READ) ? 1 : 0);
 597		ew32(EECTL, EE_ENB);
 598		eeprom_delay();
 599	}
 600
 601	/* Terminate the EEPROM access. */
 602	ew32(EECTL, EE_ENB & ~EE_CS);
 603	return retval;
 604}
 605
 606#define MII_READOP		1
 607#define MII_WRITEOP		2
 608static int mdio_read(struct net_device *dev, int phy_id, int location)
 609{
 610	struct epic_private *ep = netdev_priv(dev);
 611	void __iomem *ioaddr = ep->ioaddr;
 612	int read_cmd = (phy_id << 9) | (location << 4) | MII_READOP;
 613	int i;
 614
 615	ew32(MIICtrl, read_cmd);
 616	/* Typical operation takes 25 loops. */
 617	for (i = 400; i > 0; i--) {
 618		barrier();
 619		if ((er32(MIICtrl) & MII_READOP) == 0) {
 620			/* Work around read failure bug. */
 621			if (phy_id == 1 && location < 6 &&
 622			    er16(MIIData) == 0xffff) {
 623				ew32(MIICtrl, read_cmd);
 624				continue;
 625			}
 626			return er16(MIIData);
 627		}
 628	}
 629	return 0xffff;
 630}
 631
 632static void mdio_write(struct net_device *dev, int phy_id, int loc, int value)
 633{
 634	struct epic_private *ep = netdev_priv(dev);
 635	void __iomem *ioaddr = ep->ioaddr;
 636	int i;
 637
 638	ew16(MIIData, value);
 639	ew32(MIICtrl, (phy_id << 9) | (loc << 4) | MII_WRITEOP);
 640	for (i = 10000; i > 0; i--) {
 641		barrier();
 642		if ((er32(MIICtrl) & MII_WRITEOP) == 0)
 643			break;
 644	}
 645}
 646
 647
 648static int epic_open(struct net_device *dev)
 649{
 650	struct epic_private *ep = netdev_priv(dev);
 651	void __iomem *ioaddr = ep->ioaddr;
 652	const int irq = ep->pci_dev->irq;
 653	int rc, i;
 654
 655	/* Soft reset the chip. */
 656	ew32(GENCTL, 0x4001);
 657
 658	napi_enable(&ep->napi);
 659	rc = request_irq(irq, epic_interrupt, IRQF_SHARED, dev->name, dev);
 660	if (rc) {
 661		napi_disable(&ep->napi);
 662		return rc;
 663	}
 664
 665	epic_init_ring(dev);
 666
 667	ew32(GENCTL, 0x4000);
 668	/* This magic is documented in SMSC app note 7.15 */
 669	for (i = 16; i > 0; i--)
 670		ew32(TEST1, 0x0008);
 671
 672	/* Pull the chip out of low-power mode, enable interrupts, and set for
 673	   PCI read multiple.  The MIIcfg setting and strange write order are
 674	   required by the details of which bits are reset and the transceiver
 675	   wiring on the Ositech CardBus card.
 676	*/
 677#if 0
 678	ew32(MIICfg, dev->if_port == 1 ? 0x13 : 0x12);
 679#endif
 680	if (ep->chip_flags & MII_PWRDWN)
 681		ew32(NVCTL, (er32(NVCTL) & ~0x003c) | 0x4800);
 682
 683	/* Tell the chip to byteswap descriptors on big-endian hosts */
 684#ifdef __BIG_ENDIAN
 685	ew32(GENCTL, 0x4432 | (RX_FIFO_THRESH << 8));
 686	er32(GENCTL);
 687	ew32(GENCTL, 0x0432 | (RX_FIFO_THRESH << 8));
 688#else
 689	ew32(GENCTL, 0x4412 | (RX_FIFO_THRESH << 8));
 690	er32(GENCTL);
 691	ew32(GENCTL, 0x0412 | (RX_FIFO_THRESH << 8));
 692#endif
 693
 694	udelay(20); /* Looks like EPII needs that if you want reliable RX init. FIXME: pci posting bug? */
 695
 696	for (i = 0; i < 3; i++)
 697		ew32(LAN0 + i*4, le16_to_cpu(((__le16*)dev->dev_addr)[i]));
 698
 699	ep->tx_threshold = TX_FIFO_THRESH;
 700	ew32(TxThresh, ep->tx_threshold);
 701
 702	if (media2miictl[dev->if_port & 15]) {
 703		if (ep->mii_phy_cnt)
 704			mdio_write(dev, ep->phys[0], MII_BMCR, media2miictl[dev->if_port&15]);
 705		if (dev->if_port == 1) {
 706			if (debug > 1)
 707				printk(KERN_INFO "%s: Using the 10base2 transceiver, MII "
 708					   "status %4.4x.\n",
 709					   dev->name, mdio_read(dev, ep->phys[0], MII_BMSR));
 710		}
 711	} else {
 712		int mii_lpa = mdio_read(dev, ep->phys[0], MII_LPA);
 713		if (mii_lpa != 0xffff) {
 714			if ((mii_lpa & LPA_100FULL) || (mii_lpa & 0x01C0) == LPA_10FULL)
 715				ep->mii.full_duplex = 1;
 716			else if (! (mii_lpa & LPA_LPACK))
 717				mdio_write(dev, ep->phys[0], MII_BMCR, BMCR_ANENABLE|BMCR_ANRESTART);
 718			if (debug > 1)
 719				printk(KERN_INFO "%s: Setting %s-duplex based on MII xcvr %d"
 720					   " register read of %4.4x.\n", dev->name,
 721					   ep->mii.full_duplex ? "full" : "half",
 722					   ep->phys[0], mii_lpa);
 723		}
 724	}
 725
 726	ew32(TxCtrl, ep->mii.full_duplex ? 0x7f : 0x79);
 727	ew32(PRxCDAR, ep->rx_ring_dma);
 728	ew32(PTxCDAR, ep->tx_ring_dma);
 729
 730	/* Start the chip's Rx process. */
 731	set_rx_mode(dev);
 732	ew32(COMMAND, StartRx | RxQueued);
 733
 734	netif_start_queue(dev);
 735
 736	/* Enable interrupts by setting the interrupt mask. */
 737	ew32(INTMASK, RxError | RxHeader | EpicNapiEvent | CntFull |
 738	     ((ep->chip_flags & TYPE2_INTR) ? PCIBusErr175 : PCIBusErr170) |
 739	     TxUnderrun);
 740
 741	if (debug > 1) {
 742		printk(KERN_DEBUG "%s: epic_open() ioaddr %p IRQ %d "
 743		       "status %4.4x %s-duplex.\n",
 744		       dev->name, ioaddr, irq, er32(GENCTL),
 745		       ep->mii.full_duplex ? "full" : "half");
 746	}
 747
 748	/* Set the timer to switch to check for link beat and perhaps switch
 749	   to an alternate media type. */
 750	init_timer(&ep->timer);
 751	ep->timer.expires = jiffies + 3*HZ;
 752	ep->timer.data = (unsigned long)dev;
 753	ep->timer.function = epic_timer;				/* timer handler */
 754	add_timer(&ep->timer);
 755
 756	return rc;
 757}
 758
 759/* Reset the chip to recover from a PCI transaction error.
 760   This may occur at interrupt time. */
 761static void epic_pause(struct net_device *dev)
 762{
 763	struct net_device_stats *stats = &dev->stats;
 764	struct epic_private *ep = netdev_priv(dev);
 765	void __iomem *ioaddr = ep->ioaddr;
 766
 767	netif_stop_queue (dev);
 768
 769	/* Disable interrupts by clearing the interrupt mask. */
 770	ew32(INTMASK, 0x00000000);
 771	/* Stop the chip's Tx and Rx DMA processes. */
 772	ew16(COMMAND, StopRx | StopTxDMA | StopRxDMA);
 773
 774	/* Update the error counts. */
 775	if (er16(COMMAND) != 0xffff) {
 776		stats->rx_missed_errors	+= er8(MPCNT);
 777		stats->rx_frame_errors	+= er8(ALICNT);
 778		stats->rx_crc_errors	+= er8(CRCCNT);
 779	}
 780
 781	/* Remove the packets on the Rx queue. */
 782	epic_rx(dev, RX_RING_SIZE);
 783}
 784
 785static void epic_restart(struct net_device *dev)
 786{
 787	struct epic_private *ep = netdev_priv(dev);
 788	void __iomem *ioaddr = ep->ioaddr;
 789	int i;
 790
 791	/* Soft reset the chip. */
 792	ew32(GENCTL, 0x4001);
 793
 794	printk(KERN_DEBUG "%s: Restarting the EPIC chip, Rx %d/%d Tx %d/%d.\n",
 795		   dev->name, ep->cur_rx, ep->dirty_rx, ep->dirty_tx, ep->cur_tx);
 796	udelay(1);
 797
 798	/* This magic is documented in SMSC app note 7.15 */
 799	for (i = 16; i > 0; i--)
 800		ew32(TEST1, 0x0008);
 801
 802#ifdef __BIG_ENDIAN
 803	ew32(GENCTL, 0x0432 | (RX_FIFO_THRESH << 8));
 804#else
 805	ew32(GENCTL, 0x0412 | (RX_FIFO_THRESH << 8));
 806#endif
 807	ew32(MIICfg, dev->if_port == 1 ? 0x13 : 0x12);
 808	if (ep->chip_flags & MII_PWRDWN)
 809		ew32(NVCTL, (er32(NVCTL) & ~0x003c) | 0x4800);
 810
 811	for (i = 0; i < 3; i++)
 812		ew32(LAN0 + i*4, le16_to_cpu(((__le16*)dev->dev_addr)[i]));
 813
 814	ep->tx_threshold = TX_FIFO_THRESH;
 815	ew32(TxThresh, ep->tx_threshold);
 816	ew32(TxCtrl, ep->mii.full_duplex ? 0x7f : 0x79);
 817	ew32(PRxCDAR, ep->rx_ring_dma +
 818	     (ep->cur_rx % RX_RING_SIZE) * sizeof(struct epic_rx_desc));
 819	ew32(PTxCDAR, ep->tx_ring_dma +
 820	     (ep->dirty_tx % TX_RING_SIZE) * sizeof(struct epic_tx_desc));
 821
 822	/* Start the chip's Rx process. */
 823	set_rx_mode(dev);
 824	ew32(COMMAND, StartRx | RxQueued);
 825
 826	/* Enable interrupts by setting the interrupt mask. */
 827	ew32(INTMASK, RxError | RxHeader | EpicNapiEvent | CntFull |
 828	     ((ep->chip_flags & TYPE2_INTR) ? PCIBusErr175 : PCIBusErr170) |
 829	     TxUnderrun);
 830
 831	printk(KERN_DEBUG "%s: epic_restart() done, cmd status %4.4x, ctl %4.4x"
 832		   " interrupt %4.4x.\n",
 833		   dev->name, er32(COMMAND), er32(GENCTL), er32(INTSTAT));
 834}
 835
 836static void check_media(struct net_device *dev)
 837{
 838	struct epic_private *ep = netdev_priv(dev);
 839	void __iomem *ioaddr = ep->ioaddr;
 840	int mii_lpa = ep->mii_phy_cnt ? mdio_read(dev, ep->phys[0], MII_LPA) : 0;
 841	int negotiated = mii_lpa & ep->mii.advertising;
 842	int duplex = (negotiated & 0x0100) || (negotiated & 0x01C0) == 0x0040;
 843
 844	if (ep->mii.force_media)
 845		return;
 846	if (mii_lpa == 0xffff)		/* Bogus read */
 847		return;
 848	if (ep->mii.full_duplex != duplex) {
 849		ep->mii.full_duplex = duplex;
 850		printk(KERN_INFO "%s: Setting %s-duplex based on MII #%d link"
 851			   " partner capability of %4.4x.\n", dev->name,
 852			   ep->mii.full_duplex ? "full" : "half", ep->phys[0], mii_lpa);
 853		ew32(TxCtrl, ep->mii.full_duplex ? 0x7F : 0x79);
 854	}
 855}
 856
 857static void epic_timer(unsigned long data)
 858{
 859	struct net_device *dev = (struct net_device *)data;
 860	struct epic_private *ep = netdev_priv(dev);
 861	void __iomem *ioaddr = ep->ioaddr;
 862	int next_tick = 5*HZ;
 863
 864	if (debug > 3) {
 865		printk(KERN_DEBUG "%s: Media monitor tick, Tx status %8.8x.\n",
 866		       dev->name, er32(TxSTAT));
 867		printk(KERN_DEBUG "%s: Other registers are IntMask %4.4x "
 868		       "IntStatus %4.4x RxStatus %4.4x.\n", dev->name,
 869		       er32(INTMASK), er32(INTSTAT), er32(RxSTAT));
 870	}
 871
 872	check_media(dev);
 873
 874	ep->timer.expires = jiffies + next_tick;
 875	add_timer(&ep->timer);
 876}
 877
 878static void epic_tx_timeout(struct net_device *dev)
 879{
 880	struct epic_private *ep = netdev_priv(dev);
 881	void __iomem *ioaddr = ep->ioaddr;
 882
 883	if (debug > 0) {
 884		printk(KERN_WARNING "%s: Transmit timeout using MII device, "
 885		       "Tx status %4.4x.\n", dev->name, er16(TxSTAT));
 886		if (debug > 1) {
 887			printk(KERN_DEBUG "%s: Tx indices: dirty_tx %d, cur_tx %d.\n",
 888				   dev->name, ep->dirty_tx, ep->cur_tx);
 889		}
 890	}
 891	if (er16(TxSTAT) & 0x10) {		/* Tx FIFO underflow. */
 892		dev->stats.tx_fifo_errors++;
 893		ew32(COMMAND, RestartTx);
 894	} else {
 895		epic_restart(dev);
 896		ew32(COMMAND, TxQueued);
 897	}
 898
 899	dev->trans_start = jiffies; /* prevent tx timeout */
 900	dev->stats.tx_errors++;
 901	if (!ep->tx_full)
 902		netif_wake_queue(dev);
 903}
 904
 905/* Initialize the Rx and Tx rings, along with various 'dev' bits. */
 906static void epic_init_ring(struct net_device *dev)
 907{
 908	struct epic_private *ep = netdev_priv(dev);
 909	int i;
 910
 911	ep->tx_full = 0;
 912	ep->dirty_tx = ep->cur_tx = 0;
 913	ep->cur_rx = ep->dirty_rx = 0;
 914	ep->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32);
 915
 916	/* Initialize all Rx descriptors. */
 917	for (i = 0; i < RX_RING_SIZE; i++) {
 918		ep->rx_ring[i].rxstatus = 0;
 919		ep->rx_ring[i].buflength = ep->rx_buf_sz;
 920		ep->rx_ring[i].next = ep->rx_ring_dma +
 921				      (i+1)*sizeof(struct epic_rx_desc);
 922		ep->rx_skbuff[i] = NULL;
 923	}
 924	/* Mark the last entry as wrapping the ring. */
 925	ep->rx_ring[i-1].next = ep->rx_ring_dma;
 926
 927	/* Fill in the Rx buffers.  Handle allocation failure gracefully. */
 928	for (i = 0; i < RX_RING_SIZE; i++) {
 929		struct sk_buff *skb = netdev_alloc_skb(dev, ep->rx_buf_sz + 2);
 930		ep->rx_skbuff[i] = skb;
 931		if (skb == NULL)
 932			break;
 933		skb_reserve(skb, 2);	/* 16 byte align the IP header. */
 934		ep->rx_ring[i].bufaddr = pci_map_single(ep->pci_dev,
 935			skb->data, ep->rx_buf_sz, PCI_DMA_FROMDEVICE);
 936		ep->rx_ring[i].rxstatus = DescOwn;
 937	}
 938	ep->dirty_rx = (unsigned int)(i - RX_RING_SIZE);
 939
 940	/* The Tx buffer descriptor is filled in as needed, but we
 941	   do need to clear the ownership bit. */
 942	for (i = 0; i < TX_RING_SIZE; i++) {
 943		ep->tx_skbuff[i] = NULL;
 944		ep->tx_ring[i].txstatus = 0x0000;
 945		ep->tx_ring[i].next = ep->tx_ring_dma +
 946			(i+1)*sizeof(struct epic_tx_desc);
 947	}
 948	ep->tx_ring[i-1].next = ep->tx_ring_dma;
 949}
 950
 951static netdev_tx_t epic_start_xmit(struct sk_buff *skb, struct net_device *dev)
 952{
 953	struct epic_private *ep = netdev_priv(dev);
 954	void __iomem *ioaddr = ep->ioaddr;
 955	int entry, free_count;
 956	u32 ctrl_word;
 957	unsigned long flags;
 958
 959	if (skb_padto(skb, ETH_ZLEN))
 960		return NETDEV_TX_OK;
 961
 962	/* Caution: the write order is important here, set the field with the
 963	   "ownership" bit last. */
 964
 965	/* Calculate the next Tx descriptor entry. */
 966	spin_lock_irqsave(&ep->lock, flags);
 967	free_count = ep->cur_tx - ep->dirty_tx;
 968	entry = ep->cur_tx % TX_RING_SIZE;
 969
 970	ep->tx_skbuff[entry] = skb;
 971	ep->tx_ring[entry].bufaddr = pci_map_single(ep->pci_dev, skb->data,
 972		 			            skb->len, PCI_DMA_TODEVICE);
 973	if (free_count < TX_QUEUE_LEN/2) {/* Typical path */
 974		ctrl_word = 0x100000; /* No interrupt */
 975	} else if (free_count == TX_QUEUE_LEN/2) {
 976		ctrl_word = 0x140000; /* Tx-done intr. */
 977	} else if (free_count < TX_QUEUE_LEN - 1) {
 978		ctrl_word = 0x100000; /* No Tx-done intr. */
 979	} else {
 980		/* Leave room for an additional entry. */
 981		ctrl_word = 0x140000; /* Tx-done intr. */
 982		ep->tx_full = 1;
 983	}
 984	ep->tx_ring[entry].buflength = ctrl_word | skb->len;
 985	ep->tx_ring[entry].txstatus =
 986		((skb->len >= ETH_ZLEN ? skb->len : ETH_ZLEN) << 16)
 987			    | DescOwn;
 988
 989	ep->cur_tx++;
 990	if (ep->tx_full)
 991		netif_stop_queue(dev);
 992
 993	spin_unlock_irqrestore(&ep->lock, flags);
 994	/* Trigger an immediate transmit demand. */
 995	ew32(COMMAND, TxQueued);
 996
 997	if (debug > 4)
 998		printk(KERN_DEBUG "%s: Queued Tx packet size %d to slot %d, "
 999		       "flag %2.2x Tx status %8.8x.\n", dev->name, skb->len,
1000		       entry, ctrl_word, er32(TxSTAT));
1001
1002	return NETDEV_TX_OK;
1003}
1004
1005static void epic_tx_error(struct net_device *dev, struct epic_private *ep,
1006			  int status)
1007{
1008	struct net_device_stats *stats = &dev->stats;
1009
1010#ifndef final_version
1011	/* There was an major error, log it. */
1012	if (debug > 1)
1013		printk(KERN_DEBUG "%s: Transmit error, Tx status %8.8x.\n",
1014		       dev->name, status);
1015#endif
1016	stats->tx_errors++;
1017	if (status & 0x1050)
1018		stats->tx_aborted_errors++;
1019	if (status & 0x0008)
1020		stats->tx_carrier_errors++;
1021	if (status & 0x0040)
1022		stats->tx_window_errors++;
1023	if (status & 0x0010)
1024		stats->tx_fifo_errors++;
1025}
1026
1027static void epic_tx(struct net_device *dev, struct epic_private *ep)
1028{
1029	unsigned int dirty_tx, cur_tx;
1030
1031	/*
1032	 * Note: if this lock becomes a problem we can narrow the locked
1033	 * region at the cost of occasionally grabbing the lock more times.
1034	 */
1035	cur_tx = ep->cur_tx;
1036	for (dirty_tx = ep->dirty_tx; cur_tx - dirty_tx > 0; dirty_tx++) {
1037		struct sk_buff *skb;
1038		int entry = dirty_tx % TX_RING_SIZE;
1039		int txstatus = ep->tx_ring[entry].txstatus;
1040
1041		if (txstatus & DescOwn)
1042			break;	/* It still hasn't been Txed */
1043
1044		if (likely(txstatus & 0x0001)) {
1045			dev->stats.collisions += (txstatus >> 8) & 15;
1046			dev->stats.tx_packets++;
1047			dev->stats.tx_bytes += ep->tx_skbuff[entry]->len;
1048		} else
1049			epic_tx_error(dev, ep, txstatus);
1050
1051		/* Free the original skb. */
1052		skb = ep->tx_skbuff[entry];
1053		pci_unmap_single(ep->pci_dev, ep->tx_ring[entry].bufaddr,
1054				 skb->len, PCI_DMA_TODEVICE);
1055		dev_kfree_skb_irq(skb);
1056		ep->tx_skbuff[entry] = NULL;
1057	}
1058
1059#ifndef final_version
1060	if (cur_tx - dirty_tx > TX_RING_SIZE) {
1061		printk(KERN_WARNING
1062		       "%s: Out-of-sync dirty pointer, %d vs. %d, full=%d.\n",
1063		       dev->name, dirty_tx, cur_tx, ep->tx_full);
1064		dirty_tx += TX_RING_SIZE;
1065	}
1066#endif
1067	ep->dirty_tx = dirty_tx;
1068	if (ep->tx_full && cur_tx - dirty_tx < TX_QUEUE_LEN - 4) {
1069		/* The ring is no longer full, allow new TX entries. */
1070		ep->tx_full = 0;
1071		netif_wake_queue(dev);
1072	}
1073}
1074
1075/* The interrupt handler does all of the Rx thread work and cleans up
1076   after the Tx thread. */
1077static irqreturn_t epic_interrupt(int irq, void *dev_instance)
1078{
1079	struct net_device *dev = dev_instance;
1080	struct epic_private *ep = netdev_priv(dev);
1081	void __iomem *ioaddr = ep->ioaddr;
1082	unsigned int handled = 0;
1083	int status;
1084
1085	status = er32(INTSTAT);
1086	/* Acknowledge all of the current interrupt sources ASAP. */
1087	ew32(INTSTAT, status & EpicNormalEvent);
1088
1089	if (debug > 4) {
1090		printk(KERN_DEBUG "%s: Interrupt, status=%#8.8x new "
1091		       "intstat=%#8.8x.\n", dev->name, status, er32(INTSTAT));
1092	}
1093
1094	if ((status & IntrSummary) == 0)
1095		goto out;
1096
1097	handled = 1;
1098
1099	if ((status & EpicNapiEvent) && !ep->reschedule_in_poll) {
1100		spin_lock(&ep->napi_lock);
1101		if (napi_schedule_prep(&ep->napi)) {
1102			epic_napi_irq_off(dev, ep);
1103			__napi_schedule(&ep->napi);
1104		} else
1105			ep->reschedule_in_poll++;
1106		spin_unlock(&ep->napi_lock);
1107	}
1108	status &= ~EpicNapiEvent;
1109
1110	/* Check uncommon events all at once. */
1111	if (status & (CntFull | TxUnderrun | PCIBusErr170 | PCIBusErr175)) {
1112		struct net_device_stats *stats = &dev->stats;
1113
1114		if (status == EpicRemoved)
1115			goto out;
1116
1117		/* Always update the error counts to avoid overhead later. */
1118		stats->rx_missed_errors	+= er8(MPCNT);
1119		stats->rx_frame_errors	+= er8(ALICNT);
1120		stats->rx_crc_errors	+= er8(CRCCNT);
1121
1122		if (status & TxUnderrun) { /* Tx FIFO underflow. */
1123			stats->tx_fifo_errors++;
1124			ew32(TxThresh, ep->tx_threshold += 128);
1125			/* Restart the transmit process. */
1126			ew32(COMMAND, RestartTx);
1127		}
1128		if (status & PCIBusErr170) {
1129			printk(KERN_ERR "%s: PCI Bus Error! status %4.4x.\n",
1130					 dev->name, status);
1131			epic_pause(dev);
1132			epic_restart(dev);
1133		}
1134		/* Clear all error sources. */
1135		ew32(INTSTAT, status & 0x7f18);
1136	}
1137
1138out:
1139	if (debug > 3) {
1140		printk(KERN_DEBUG "%s: exit interrupt, intr_status=%#4.4x.\n",
1141				   dev->name, status);
1142	}
1143
1144	return IRQ_RETVAL(handled);
1145}
1146
1147static int epic_rx(struct net_device *dev, int budget)
1148{
1149	struct epic_private *ep = netdev_priv(dev);
1150	int entry = ep->cur_rx % RX_RING_SIZE;
1151	int rx_work_limit = ep->dirty_rx + RX_RING_SIZE - ep->cur_rx;
1152	int work_done = 0;
1153
1154	if (debug > 4)
1155		printk(KERN_DEBUG " In epic_rx(), entry %d %8.8x.\n", entry,
1156			   ep->rx_ring[entry].rxstatus);
1157
1158	if (rx_work_limit > budget)
1159		rx_work_limit = budget;
1160
1161	/* If we own the next entry, it's a new packet. Send it up. */
1162	while ((ep->rx_ring[entry].rxstatus & DescOwn) == 0) {
1163		int status = ep->rx_ring[entry].rxstatus;
1164
1165		if (debug > 4)
1166			printk(KERN_DEBUG "  epic_rx() status was %8.8x.\n", status);
1167		if (--rx_work_limit < 0)
1168			break;
1169		if (status & 0x2006) {
1170			if (debug > 2)
1171				printk(KERN_DEBUG "%s: epic_rx() error status was %8.8x.\n",
1172					   dev->name, status);
1173			if (status & 0x2000) {
1174				printk(KERN_WARNING "%s: Oversized Ethernet frame spanned "
1175					   "multiple buffers, status %4.4x!\n", dev->name, status);
1176				dev->stats.rx_length_errors++;
1177			} else if (status & 0x0006)
1178				/* Rx Frame errors are counted in hardware. */
1179				dev->stats.rx_errors++;
1180		} else {
1181			/* Malloc up new buffer, compatible with net-2e. */
1182			/* Omit the four octet CRC from the length. */
1183			short pkt_len = (status >> 16) - 4;
1184			struct sk_buff *skb;
1185
1186			if (pkt_len > PKT_BUF_SZ - 4) {
1187				printk(KERN_ERR "%s: Oversized Ethernet frame, status %x "
1188					   "%d bytes.\n",
1189					   dev->name, status, pkt_len);
1190				pkt_len = 1514;
1191			}
1192			/* Check if the packet is long enough to accept without copying
1193			   to a minimally-sized skbuff. */
1194			if (pkt_len < rx_copybreak &&
1195			    (skb = netdev_alloc_skb(dev, pkt_len + 2)) != NULL) {
1196				skb_reserve(skb, 2);	/* 16 byte align the IP header */
1197				pci_dma_sync_single_for_cpu(ep->pci_dev,
1198							    ep->rx_ring[entry].bufaddr,
1199							    ep->rx_buf_sz,
1200							    PCI_DMA_FROMDEVICE);
1201				skb_copy_to_linear_data(skb, ep->rx_skbuff[entry]->data, pkt_len);
1202				skb_put(skb, pkt_len);
1203				pci_dma_sync_single_for_device(ep->pci_dev,
1204							       ep->rx_ring[entry].bufaddr,
1205							       ep->rx_buf_sz,
1206							       PCI_DMA_FROMDEVICE);
1207			} else {
1208				pci_unmap_single(ep->pci_dev,
1209					ep->rx_ring[entry].bufaddr,
1210					ep->rx_buf_sz, PCI_DMA_FROMDEVICE);
1211				skb_put(skb = ep->rx_skbuff[entry], pkt_len);
1212				ep->rx_skbuff[entry] = NULL;
1213			}
1214			skb->protocol = eth_type_trans(skb, dev);
1215			netif_receive_skb(skb);
1216			dev->stats.rx_packets++;
1217			dev->stats.rx_bytes += pkt_len;
1218		}
1219		work_done++;
1220		entry = (++ep->cur_rx) % RX_RING_SIZE;
1221	}
1222
1223	/* Refill the Rx ring buffers. */
1224	for (; ep->cur_rx - ep->dirty_rx > 0; ep->dirty_rx++) {
1225		entry = ep->dirty_rx % RX_RING_SIZE;
1226		if (ep->rx_skbuff[entry] == NULL) {
1227			struct sk_buff *skb;
1228			skb = ep->rx_skbuff[entry] = netdev_alloc_skb(dev, ep->rx_buf_sz + 2);
1229			if (skb == NULL)
1230				break;
1231			skb_reserve(skb, 2);	/* Align IP on 16 byte boundaries */
1232			ep->rx_ring[entry].bufaddr = pci_map_single(ep->pci_dev,
1233				skb->data, ep->rx_buf_sz, PCI_DMA_FROMDEVICE);
1234			work_done++;
1235		}
1236		/* AV: shouldn't we add a barrier here? */
1237		ep->rx_ring[entry].rxstatus = DescOwn;
1238	}
1239	return work_done;
1240}
1241
1242static void epic_rx_err(struct net_device *dev, struct epic_private *ep)
1243{
1244	void __iomem *ioaddr = ep->ioaddr;
1245	int status;
1246
1247	status = er32(INTSTAT);
1248
1249	if (status == EpicRemoved)
1250		return;
1251	if (status & RxOverflow) 	/* Missed a Rx frame. */
1252		dev->stats.rx_errors++;
1253	if (status & (RxOverflow | RxFull))
1254		ew16(COMMAND, RxQueued);
1255}
1256
1257static int epic_poll(struct napi_struct *napi, int budget)
1258{
1259	struct epic_private *ep = container_of(napi, struct epic_private, napi);
1260	struct net_device *dev = ep->mii.dev;
1261	int work_done = 0;
1262	void __iomem *ioaddr = ep->ioaddr;
1263
1264rx_action:
1265
1266	epic_tx(dev, ep);
1267
1268	work_done += epic_rx(dev, budget);
1269
1270	epic_rx_err(dev, ep);
1271
1272	if (work_done < budget) {
1273		unsigned long flags;
1274		int more;
1275
1276		/* A bit baroque but it avoids a (space hungry) spin_unlock */
1277
1278		spin_lock_irqsave(&ep->napi_lock, flags);
1279
1280		more = ep->reschedule_in_poll;
1281		if (!more) {
1282			__napi_complete(napi);
1283			ew32(INTSTAT, EpicNapiEvent);
1284			epic_napi_irq_on(dev, ep);
1285		} else
1286			ep->reschedule_in_poll--;
1287
1288		spin_unlock_irqrestore(&ep->napi_lock, flags);
1289
1290		if (more)
1291			goto rx_action;
1292	}
1293
1294	return work_done;
1295}
1296
1297static int epic_close(struct net_device *dev)
1298{
1299	struct epic_private *ep = netdev_priv(dev);
1300	struct pci_dev *pdev = ep->pci_dev;
1301	void __iomem *ioaddr = ep->ioaddr;
1302	struct sk_buff *skb;
1303	int i;
1304
1305	netif_stop_queue(dev);
1306	napi_disable(&ep->napi);
1307
1308	if (debug > 1)
1309		printk(KERN_DEBUG "%s: Shutting down ethercard, status was %2.2x.\n",
1310		       dev->name, er32(INTSTAT));
1311
1312	del_timer_sync(&ep->timer);
1313
1314	epic_disable_int(dev, ep);
1315
1316	free_irq(pdev->irq, dev);
1317
1318	epic_pause(dev);
1319
1320	/* Free all the skbuffs in the Rx queue. */
1321	for (i = 0; i < RX_RING_SIZE; i++) {
1322		skb = ep->rx_skbuff[i];
1323		ep->rx_skbuff[i] = NULL;
1324		ep->rx_ring[i].rxstatus = 0;		/* Not owned by Epic chip. */
1325		ep->rx_ring[i].buflength = 0;
1326		if (skb) {
1327			pci_unmap_single(pdev, ep->rx_ring[i].bufaddr,
1328				 	 ep->rx_buf_sz, PCI_DMA_FROMDEVICE);
1329			dev_kfree_skb(skb);
1330		}
1331		ep->rx_ring[i].bufaddr = 0xBADF00D0; /* An invalid address. */
1332	}
1333	for (i = 0; i < TX_RING_SIZE; i++) {
1334		skb = ep->tx_skbuff[i];
1335		ep->tx_skbuff[i] = NULL;
1336		if (!skb)
1337			continue;
1338		pci_unmap_single(pdev, ep->tx_ring[i].bufaddr, skb->len,
1339				 PCI_DMA_TODEVICE);
1340		dev_kfree_skb(skb);
1341	}
1342
1343	/* Green! Leave the chip in low-power mode. */
1344	ew32(GENCTL, 0x0008);
1345
1346	return 0;
1347}
1348
1349static struct net_device_stats *epic_get_stats(struct net_device *dev)
1350{
1351	struct epic_private *ep = netdev_priv(dev);
1352	void __iomem *ioaddr = ep->ioaddr;
1353
1354	if (netif_running(dev)) {
1355		struct net_device_stats *stats = &dev->stats;
1356
1357		stats->rx_missed_errors	+= er8(MPCNT);
1358		stats->rx_frame_errors	+= er8(ALICNT);
1359		stats->rx_crc_errors	+= er8(CRCCNT);
1360	}
1361
1362	return &dev->stats;
1363}
1364
1365/* Set or clear the multicast filter for this adaptor.
1366   Note that we only use exclusion around actually queueing the
1367   new frame, not around filling ep->setup_frame.  This is non-deterministic
1368   when re-entered but still correct. */
1369
1370static void set_rx_mode(struct net_device *dev)
1371{
1372	struct epic_private *ep = netdev_priv(dev);
1373	void __iomem *ioaddr = ep->ioaddr;
1374	unsigned char mc_filter[8];		 /* Multicast hash filter */
1375	int i;
1376
1377	if (dev->flags & IFF_PROMISC) {			/* Set promiscuous. */
1378		ew32(RxCtrl, 0x002c);
1379		/* Unconditionally log net taps. */
1380		memset(mc_filter, 0xff, sizeof(mc_filter));
1381	} else if ((!netdev_mc_empty(dev)) || (dev->flags & IFF_ALLMULTI)) {
1382		/* There is apparently a chip bug, so the multicast filter
1383		   is never enabled. */
1384		/* Too many to filter perfectly -- accept all multicasts. */
1385		memset(mc_filter, 0xff, sizeof(mc_filter));
1386		ew32(RxCtrl, 0x000c);
1387	} else if (netdev_mc_empty(dev)) {
1388		ew32(RxCtrl, 0x0004);
1389		return;
1390	} else {					/* Never executed, for now. */
1391		struct netdev_hw_addr *ha;
1392
1393		memset(mc_filter, 0, sizeof(mc_filter));
1394		netdev_for_each_mc_addr(ha, dev) {
1395			unsigned int bit_nr =
1396				ether_crc_le(ETH_ALEN, ha->addr) & 0x3f;
1397			mc_filter[bit_nr >> 3] |= (1 << bit_nr);
1398		}
1399	}
1400	/* ToDo: perhaps we need to stop the Tx and Rx process here? */
1401	if (memcmp(mc_filter, ep->mc_filter, sizeof(mc_filter))) {
1402		for (i = 0; i < 4; i++)
1403			ew16(MC0 + i*4, ((u16 *)mc_filter)[i]);
1404		memcpy(ep->mc_filter, mc_filter, sizeof(mc_filter));
1405	}
1406}
1407
1408static void netdev_get_drvinfo (struct net_device *dev, struct ethtool_drvinfo *info)
1409{
1410	struct epic_private *np = netdev_priv(dev);
1411
1412	strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
1413	strlcpy(info->version, DRV_VERSION, sizeof(info->version));
1414	strlcpy(info->bus_info, pci_name(np->pci_dev), sizeof(info->bus_info));
1415}
1416
1417static int netdev_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1418{
1419	struct epic_private *np = netdev_priv(dev);
1420	int rc;
1421
1422	spin_lock_irq(&np->lock);
1423	rc = mii_ethtool_gset(&np->mii, cmd);
1424	spin_unlock_irq(&np->lock);
1425
1426	return rc;
1427}
1428
1429static int netdev_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1430{
1431	struct epic_private *np = netdev_priv(dev);
1432	int rc;
1433
1434	spin_lock_irq(&np->lock);
1435	rc = mii_ethtool_sset(&np->mii, cmd);
1436	spin_unlock_irq(&np->lock);
1437
1438	return rc;
1439}
1440
1441static int netdev_nway_reset(struct net_device *dev)
1442{
1443	struct epic_private *np = netdev_priv(dev);
1444	return mii_nway_restart(&np->mii);
1445}
1446
1447static u32 netdev_get_link(struct net_device *dev)
1448{
1449	struct epic_private *np = netdev_priv(dev);
1450	return mii_link_ok(&np->mii);
1451}
1452
1453static u32 netdev_get_msglevel(struct net_device *dev)
1454{
1455	return debug;
1456}
1457
1458static void netdev_set_msglevel(struct net_device *dev, u32 value)
1459{
1460	debug = value;
1461}
1462
1463static int ethtool_begin(struct net_device *dev)
1464{
1465	struct epic_private *ep = netdev_priv(dev);
1466	void __iomem *ioaddr = ep->ioaddr;
1467
1468	/* power-up, if interface is down */
1469	if (!netif_running(dev)) {
1470		ew32(GENCTL, 0x0200);
1471		ew32(NVCTL, (er32(NVCTL) & ~0x003c) | 0x4800);
1472	}
1473	return 0;
1474}
1475
1476static void ethtool_complete(struct net_device *dev)
1477{
1478	struct epic_private *ep = netdev_priv(dev);
1479	void __iomem *ioaddr = ep->ioaddr;
1480
1481	/* power-down, if interface is down */
1482	if (!netif_running(dev)) {
1483		ew32(GENCTL, 0x0008);
1484		ew32(NVCTL, (er32(NVCTL) & ~0x483c) | 0x0000);
1485	}
1486}
1487
1488static const struct ethtool_ops netdev_ethtool_ops = {
1489	.get_drvinfo		= netdev_get_drvinfo,
1490	.get_settings		= netdev_get_settings,
1491	.set_settings		= netdev_set_settings,
1492	.nway_reset		= netdev_nway_reset,
1493	.get_link		= netdev_get_link,
1494	.get_msglevel		= netdev_get_msglevel,
1495	.set_msglevel		= netdev_set_msglevel,
1496	.begin			= ethtool_begin,
1497	.complete		= ethtool_complete
1498};
1499
1500static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
1501{
1502	struct epic_private *np = netdev_priv(dev);
1503	void __iomem *ioaddr = np->ioaddr;
1504	struct mii_ioctl_data *data = if_mii(rq);
1505	int rc;
1506
1507	/* power-up, if interface is down */
1508	if (! netif_running(dev)) {
1509		ew32(GENCTL, 0x0200);
1510		ew32(NVCTL, (er32(NVCTL) & ~0x003c) | 0x4800);
1511	}
1512
1513	/* all non-ethtool ioctls (the SIOC[GS]MIIxxx ioctls) */
1514	spin_lock_irq(&np->lock);
1515	rc = generic_mii_ioctl(&np->mii, data, cmd, NULL);
1516	spin_unlock_irq(&np->lock);
1517
1518	/* power-down, if interface is down */
1519	if (! netif_running(dev)) {
1520		ew32(GENCTL, 0x0008);
1521		ew32(NVCTL, (er32(NVCTL) & ~0x483c) | 0x0000);
1522	}
1523	return rc;
1524}
1525
1526
1527static void __devexit epic_remove_one(struct pci_dev *pdev)
1528{
1529	struct net_device *dev = pci_get_drvdata(pdev);
1530	struct epic_private *ep = netdev_priv(dev);
1531
1532	pci_free_consistent(pdev, TX_TOTAL_SIZE, ep->tx_ring, ep->tx_ring_dma);
1533	pci_free_consistent(pdev, RX_TOTAL_SIZE, ep->rx_ring, ep->rx_ring_dma);
1534	unregister_netdev(dev);
1535	pci_iounmap(pdev, ep->ioaddr);
1536	pci_release_regions(pdev);
1537	free_netdev(dev);
1538	pci_disable_device(pdev);
1539	pci_set_drvdata(pdev, NULL);
1540	/* pci_power_off(pdev, -1); */
1541}
1542
1543
1544#ifdef CONFIG_PM
1545
1546static int epic_suspend (struct pci_dev *pdev, pm_message_t state)
1547{
1548	struct net_device *dev = pci_get_drvdata(pdev);
1549	struct epic_private *ep = netdev_priv(dev);
1550	void __iomem *ioaddr = ep->ioaddr;
1551
1552	if (!netif_running(dev))
1553		return 0;
1554	epic_pause(dev);
1555	/* Put the chip into low-power mode. */
1556	ew32(GENCTL, 0x0008);
1557	/* pci_power_off(pdev, -1); */
1558	return 0;
1559}
1560
1561
1562static int epic_resume (struct pci_dev *pdev)
1563{
1564	struct net_device *dev = pci_get_drvdata(pdev);
1565
1566	if (!netif_running(dev))
1567		return 0;
1568	epic_restart(dev);
1569	/* pci_power_on(pdev); */
1570	return 0;
1571}
1572
1573#endif /* CONFIG_PM */
1574
1575
1576static struct pci_driver epic_driver = {
1577	.name		= DRV_NAME,
1578	.id_table	= epic_pci_tbl,
1579	.probe		= epic_init_one,
1580	.remove		= __devexit_p(epic_remove_one),
1581#ifdef CONFIG_PM
1582	.suspend	= epic_suspend,
1583	.resume		= epic_resume,
1584#endif /* CONFIG_PM */
1585};
1586
1587
1588static int __init epic_init (void)
1589{
1590/* when a module, this is printed whether or not devices are found in probe */
1591#ifdef MODULE
1592	printk (KERN_INFO "%s%s",
1593		version, version2);
1594#endif
1595
1596	return pci_register_driver(&epic_driver);
1597}
1598
1599
1600static void __exit epic_cleanup (void)
1601{
1602	pci_unregister_driver (&epic_driver);
1603}
1604
1605
1606module_init(epic_init);
1607module_exit(epic_cleanup);