Linux Audio

Check our new training course

Loading...
v6.8
   1/* de2104x.c: A Linux PCI Ethernet driver for Intel/Digital 21040/1 chips. */
   2/*
   3	Copyright 2001,2003 Jeff Garzik <jgarzik@pobox.com>
   4
   5	Copyright 1994, 1995 Digital Equipment Corporation.	    [de4x5.c]
   6	Written/copyright 1994-2001 by Donald Becker.		    [tulip.c]
   7
   8	This software may be used and distributed according to the terms of
   9	the GNU General Public License (GPL), incorporated herein by reference.
  10	Drivers based on or derived from this code fall under the GPL and must
  11	retain the authorship, copyright and license notice.  This file is not
  12	a complete program and may only be used when the entire operating
  13	system is licensed under the GPL.
  14
  15	See the file COPYING in this distribution for more information.
  16
  17	TODO, in rough priority order:
  18	* Support forcing media type with a module parameter,
  19	  like dl2k.c/sundance.c
  20	* Constants (module parms?) for Rx work limit
  21	* Complete reset on PciErr
  22	* Jumbo frames / dev->change_mtu
  23	* Adjust Rx FIFO threshold and Max Rx DMA burst on Rx FIFO error
  24	* Adjust Tx FIFO threshold and Max Tx DMA burst on Tx FIFO error
  25	* Implement Tx software interrupt mitigation via
  26	  Tx descriptor bit
  27
  28 */
  29
  30#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  31
  32#define DRV_NAME		"de2104x"
 
  33#define DRV_RELDATE		"Mar 17, 2004"
  34
  35#include <linux/module.h>
  36#include <linux/kernel.h>
  37#include <linux/netdevice.h>
  38#include <linux/etherdevice.h>
  39#include <linux/init.h>
  40#include <linux/interrupt.h>
  41#include <linux/pci.h>
  42#include <linux/delay.h>
  43#include <linux/ethtool.h>
  44#include <linux/compiler.h>
  45#include <linux/rtnetlink.h>
  46#include <linux/crc32.h>
  47#include <linux/slab.h>
  48
  49#include <asm/io.h>
  50#include <asm/irq.h>
  51#include <linux/uaccess.h>
  52#include <asm/unaligned.h>
  53
 
 
 
 
  54MODULE_AUTHOR("Jeff Garzik <jgarzik@pobox.com>");
  55MODULE_DESCRIPTION("Intel/Digital 21040/1 series PCI Ethernet driver");
  56MODULE_LICENSE("GPL");
 
  57
  58static int debug = -1;
  59module_param (debug, int, 0);
  60MODULE_PARM_DESC (debug, "de2104x bitmapped message enable number");
  61
  62/* Set the copy breakpoint for the copy-only-tiny-buffer Rx structure. */
  63#if defined(__alpha__) || defined(__arm__) || defined(__hppa__) || \
  64        defined(CONFIG_SPARC) || defined(__ia64__) ||		   \
  65        defined(__sh__) || defined(__mips__)
  66static int rx_copybreak = 1518;
  67#else
  68static int rx_copybreak = 100;
  69#endif
  70module_param (rx_copybreak, int, 0);
  71MODULE_PARM_DESC (rx_copybreak, "de2104x Breakpoint at which Rx packets are copied");
  72
  73#define DE_DEF_MSG_ENABLE	(NETIF_MSG_DRV		| \
  74				 NETIF_MSG_PROBE 	| \
  75				 NETIF_MSG_LINK		| \
  76				 NETIF_MSG_IFDOWN	| \
  77				 NETIF_MSG_IFUP		| \
  78				 NETIF_MSG_RX_ERR	| \
  79				 NETIF_MSG_TX_ERR)
  80
  81/* Descriptor skip length in 32 bit longwords. */
  82#ifndef CONFIG_DE2104X_DSL
  83#define DSL			0
  84#else
  85#define DSL			CONFIG_DE2104X_DSL
  86#endif
  87
  88#define DE_RX_RING_SIZE		128
  89#define DE_TX_RING_SIZE		64
  90#define DE_RING_BYTES		\
  91		((sizeof(struct de_desc) * DE_RX_RING_SIZE) +	\
  92		(sizeof(struct de_desc) * DE_TX_RING_SIZE))
  93#define NEXT_TX(N)		(((N) + 1) & (DE_TX_RING_SIZE - 1))
  94#define NEXT_RX(N)		(((N) + 1) & (DE_RX_RING_SIZE - 1))
  95#define TX_BUFFS_AVAIL(CP)					\
  96	(((CP)->tx_tail <= (CP)->tx_head) ?			\
  97	  (CP)->tx_tail + (DE_TX_RING_SIZE - 1) - (CP)->tx_head :	\
  98	  (CP)->tx_tail - (CP)->tx_head - 1)
  99
 100#define PKT_BUF_SZ		1536	/* Size of each temporary Rx buffer.*/
 101#define RX_OFFSET		2
 102
 103#define DE_SETUP_SKB		((struct sk_buff *) 1)
 104#define DE_DUMMY_SKB		((struct sk_buff *) 2)
 105#define DE_SETUP_FRAME_WORDS	96
 106#define DE_EEPROM_WORDS		256
 107#define DE_EEPROM_SIZE		(DE_EEPROM_WORDS * sizeof(u16))
 108#define DE_MAX_MEDIA		5
 109
 110#define DE_MEDIA_TP_AUTO	0
 111#define DE_MEDIA_BNC		1
 112#define DE_MEDIA_AUI		2
 113#define DE_MEDIA_TP		3
 114#define DE_MEDIA_TP_FD		4
 115#define DE_MEDIA_INVALID	DE_MAX_MEDIA
 116#define DE_MEDIA_FIRST		0
 117#define DE_MEDIA_LAST		(DE_MAX_MEDIA - 1)
 118#define DE_AUI_BNC		(SUPPORTED_AUI | SUPPORTED_BNC)
 119
 120#define DE_TIMER_LINK		(60 * HZ)
 121#define DE_TIMER_NO_LINK	(5 * HZ)
 122
 123#define DE_NUM_REGS		16
 124#define DE_REGS_SIZE		(DE_NUM_REGS * sizeof(u32))
 125#define DE_REGS_VER		1
 126
 127/* Time in jiffies before concluding the transmitter is hung. */
 128#define TX_TIMEOUT		(6*HZ)
 129
 130/* This is a mysterious value that can be written to CSR11 in the 21040 (only)
 131   to support a pre-NWay full-duplex signaling mechanism using short frames.
 132   No one knows what it should be, but if left at its default value some
 133   10base2(!) packets trigger a full-duplex-request interrupt. */
 134#define FULL_DUPLEX_MAGIC	0x6969
 135
 136enum {
 137	/* NIC registers */
 138	BusMode			= 0x00,
 139	TxPoll			= 0x08,
 140	RxPoll			= 0x10,
 141	RxRingAddr		= 0x18,
 142	TxRingAddr		= 0x20,
 143	MacStatus		= 0x28,
 144	MacMode			= 0x30,
 145	IntrMask		= 0x38,
 146	RxMissed		= 0x40,
 147	ROMCmd			= 0x48,
 148	CSR11			= 0x58,
 149	SIAStatus		= 0x60,
 150	CSR13			= 0x68,
 151	CSR14			= 0x70,
 152	CSR15			= 0x78,
 153	PCIPM			= 0x40,
 154
 155	/* BusMode bits */
 156	CmdReset		= (1 << 0),
 157	CacheAlign16		= 0x00008000,
 158	BurstLen4		= 0x00000400,
 159	DescSkipLen		= (DSL << 2),
 160
 161	/* Rx/TxPoll bits */
 162	NormalTxPoll		= (1 << 0),
 163	NormalRxPoll		= (1 << 0),
 164
 165	/* Tx/Rx descriptor status bits */
 166	DescOwn			= (1 << 31),
 167	RxError			= (1 << 15),
 168	RxErrLong		= (1 << 7),
 169	RxErrCRC		= (1 << 1),
 170	RxErrFIFO		= (1 << 0),
 171	RxErrRunt		= (1 << 11),
 172	RxErrFrame		= (1 << 14),
 173	RingEnd			= (1 << 25),
 174	FirstFrag		= (1 << 29),
 175	LastFrag		= (1 << 30),
 176	TxError			= (1 << 15),
 177	TxFIFOUnder		= (1 << 1),
 178	TxLinkFail		= (1 << 2) | (1 << 10) | (1 << 11),
 179	TxMaxCol		= (1 << 8),
 180	TxOWC			= (1 << 9),
 181	TxJabber		= (1 << 14),
 182	SetupFrame		= (1 << 27),
 183	TxSwInt			= (1 << 31),
 184
 185	/* MacStatus bits */
 186	IntrOK			= (1 << 16),
 187	IntrErr			= (1 << 15),
 188	RxIntr			= (1 << 6),
 189	RxEmpty			= (1 << 7),
 190	TxIntr			= (1 << 0),
 191	TxEmpty			= (1 << 2),
 192	PciErr			= (1 << 13),
 193	TxState			= (1 << 22) | (1 << 21) | (1 << 20),
 194	RxState			= (1 << 19) | (1 << 18) | (1 << 17),
 195	LinkFail		= (1 << 12),
 196	LinkPass		= (1 << 4),
 197	RxStopped		= (1 << 8),
 198	TxStopped		= (1 << 1),
 199
 200	/* MacMode bits */
 201	TxEnable		= (1 << 13),
 202	RxEnable		= (1 << 1),
 203	RxTx			= TxEnable | RxEnable,
 204	FullDuplex		= (1 << 9),
 205	AcceptAllMulticast	= (1 << 7),
 206	AcceptAllPhys		= (1 << 6),
 207	BOCnt			= (1 << 5),
 208	MacModeClear		= (1<<12) | (1<<11) | (1<<10) | (1<<8) | (1<<3) |
 209				  RxTx | BOCnt | AcceptAllPhys | AcceptAllMulticast,
 210
 211	/* ROMCmd bits */
 212	EE_SHIFT_CLK		= 0x02,	/* EEPROM shift clock. */
 213	EE_CS			= 0x01,	/* EEPROM chip select. */
 214	EE_DATA_WRITE		= 0x04,	/* Data from the Tulip to EEPROM. */
 215	EE_WRITE_0		= 0x01,
 216	EE_WRITE_1		= 0x05,
 217	EE_DATA_READ		= 0x08,	/* Data from the EEPROM chip. */
 218	EE_ENB			= (0x4800 | EE_CS),
 219
 220	/* The EEPROM commands include the alway-set leading bit. */
 221	EE_READ_CMD		= 6,
 222
 223	/* RxMissed bits */
 224	RxMissedOver		= (1 << 16),
 225	RxMissedMask		= 0xffff,
 226
 227	/* SROM-related bits */
 228	SROMC0InfoLeaf		= 27,
 229	MediaBlockMask		= 0x3f,
 230	MediaCustomCSRs		= (1 << 6),
 231
 232	/* PCIPM bits */
 233	PM_Sleep		= (1 << 31),
 234	PM_Snooze		= (1 << 30),
 235	PM_Mask			= PM_Sleep | PM_Snooze,
 236
 237	/* SIAStatus bits */
 238	NWayState		= (1 << 14) | (1 << 13) | (1 << 12),
 239	NWayRestart		= (1 << 12),
 240	NonselPortActive	= (1 << 9),
 241	SelPortActive		= (1 << 8),
 242	LinkFailStatus		= (1 << 2),
 243	NetCxnErr		= (1 << 1),
 244};
 245
 246static const u32 de_intr_mask =
 247	IntrOK | IntrErr | RxIntr | RxEmpty | TxIntr | TxEmpty |
 248	LinkPass | LinkFail | PciErr;
 249
 250/*
 251 * Set the programmable burst length to 4 longwords for all:
 252 * DMA errors result without these values. Cache align 16 long.
 253 */
 254static const u32 de_bus_mode = CacheAlign16 | BurstLen4 | DescSkipLen;
 255
 256struct de_srom_media_block {
 257	u8			opts;
 258	u16			csr13;
 259	u16			csr14;
 260	u16			csr15;
 261} __packed;
 262
 263struct de_srom_info_leaf {
 264	u16			default_media;
 265	u8			n_blocks;
 266	u8			unused;
 267} __packed;
 268
 269struct de_desc {
 270	__le32			opts1;
 271	__le32			opts2;
 272	__le32			addr1;
 273	__le32			addr2;
 274#if DSL
 275	__le32			skip[DSL];
 276#endif
 277};
 278
 279struct media_info {
 280	u16			type;	/* DE_MEDIA_xxx */
 281	u16			csr13;
 282	u16			csr14;
 283	u16			csr15;
 284};
 285
 286struct ring_info {
 287	struct sk_buff		*skb;
 288	dma_addr_t		mapping;
 289};
 290
 291struct de_private {
 292	unsigned		tx_head;
 293	unsigned		tx_tail;
 294	unsigned		rx_tail;
 295
 296	void			__iomem *regs;
 297	struct net_device	*dev;
 298	spinlock_t		lock;
 299
 300	struct de_desc		*rx_ring;
 301	struct de_desc		*tx_ring;
 302	struct ring_info	tx_skb[DE_TX_RING_SIZE];
 303	struct ring_info	rx_skb[DE_RX_RING_SIZE];
 304	unsigned		rx_buf_sz;
 305	dma_addr_t		ring_dma;
 306
 307	u32			msg_enable;
 308
 309	struct pci_dev		*pdev;
 310
 311	u16			setup_frame[DE_SETUP_FRAME_WORDS];
 312
 313	u32			media_type;
 314	u32			media_supported;
 315	u32			media_advertise;
 316	struct media_info	media[DE_MAX_MEDIA];
 317	struct timer_list	media_timer;
 318
 319	u8			*ee_data;
 320	unsigned		board_idx;
 321	unsigned		de21040 : 1;
 322	unsigned		media_lock : 1;
 323};
 324
 325
 326static void de_set_rx_mode (struct net_device *dev);
 327static void de_tx (struct de_private *de);
 328static void de_clean_rings (struct de_private *de);
 329static void de_media_interrupt (struct de_private *de, u32 status);
 330static void de21040_media_timer (struct timer_list *t);
 331static void de21041_media_timer (struct timer_list *t);
 332static unsigned int de_ok_to_advertise (struct de_private *de, u32 new_media);
 333
 334
 335static const struct pci_device_id de_pci_tbl[] = {
 336	{ PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP,
 337	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
 338	{ PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_PLUS,
 339	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },
 340	{ },
 341};
 342MODULE_DEVICE_TABLE(pci, de_pci_tbl);
 343
 344static const char * const media_name[DE_MAX_MEDIA] = {
 345	"10baseT auto",
 346	"BNC",
 347	"AUI",
 348	"10baseT-HD",
 349	"10baseT-FD"
 350};
 351
 352/* 21040 transceiver register settings:
 353 * TP AUTO(unused), BNC(unused), AUI, TP, TP FD*/
 354static u16 t21040_csr13[] = { 0, 0, 0x8F09, 0x8F01, 0x8F01, };
 355static u16 t21040_csr14[] = { 0, 0, 0x0705, 0xFFFF, 0xFFFD, };
 356static u16 t21040_csr15[] = { 0, 0, 0x0006, 0x0000, 0x0000, };
 357
 358/* 21041 transceiver register settings: TP AUTO, BNC, AUI, TP, TP FD*/
 359static u16 t21041_csr13[] = { 0xEF01, 0xEF09, 0xEF09, 0xEF01, 0xEF09, };
 360static u16 t21041_csr14[] = { 0xFFFF, 0xF7FD, 0xF7FD, 0x7F3F, 0x7F3D, };
 361/* If on-chip autonegotiation is broken, use half-duplex (FF3F) instead */
 362static u16 t21041_csr14_brk[] = { 0xFF3F, 0xF7FD, 0xF7FD, 0x7F3F, 0x7F3D, };
 363static u16 t21041_csr15[] = { 0x0008, 0x0006, 0x000E, 0x0008, 0x0008, };
 364
 365
 366#define dr32(reg)	ioread32(de->regs + (reg))
 367#define dw32(reg, val)	iowrite32((val), de->regs + (reg))
 368
 369
 370static void de_rx_err_acct (struct de_private *de, unsigned rx_tail,
 371			    u32 status, u32 len)
 372{
 373	netif_dbg(de, rx_err, de->dev,
 374		  "rx err, slot %d status 0x%x len %d\n",
 375		  rx_tail, status, len);
 376
 377	if ((status & 0x38000300) != 0x0300) {
 378		/* Ingore earlier buffers. */
 379		if ((status & 0xffff) != 0x7fff) {
 380			netif_warn(de, rx_err, de->dev,
 381				   "Oversized Ethernet frame spanned multiple buffers, status %08x!\n",
 382				   status);
 383			de->dev->stats.rx_length_errors++;
 384		}
 385	} else if (status & RxError) {
 386		/* There was a fatal error. */
 387		de->dev->stats.rx_errors++; /* end of a packet.*/
 388		if (status & 0x0890) de->dev->stats.rx_length_errors++;
 389		if (status & RxErrCRC) de->dev->stats.rx_crc_errors++;
 390		if (status & RxErrFIFO) de->dev->stats.rx_fifo_errors++;
 391	}
 392}
 393
 394static void de_rx (struct de_private *de)
 395{
 396	unsigned rx_tail = de->rx_tail;
 397	unsigned rx_work = DE_RX_RING_SIZE;
 398	unsigned drop = 0;
 399	int rc;
 400
 401	while (--rx_work) {
 402		u32 status, len;
 403		dma_addr_t mapping;
 404		struct sk_buff *skb, *copy_skb;
 405		unsigned copying_skb, buflen;
 406
 407		skb = de->rx_skb[rx_tail].skb;
 408		BUG_ON(!skb);
 409		rmb();
 410		status = le32_to_cpu(de->rx_ring[rx_tail].opts1);
 411		if (status & DescOwn)
 412			break;
 413
 414		/* the length is actually a 15 bit value here according
 415		 * to Table 4-1 in the DE2104x spec so mask is 0x7fff
 416		 */
 417		len = ((status >> 16) & 0x7fff) - 4;
 418		mapping = de->rx_skb[rx_tail].mapping;
 419
 420		if (unlikely(drop)) {
 421			de->dev->stats.rx_dropped++;
 422			goto rx_next;
 423		}
 424
 425		if (unlikely((status & 0x38008300) != 0x0300)) {
 426			de_rx_err_acct(de, rx_tail, status, len);
 427			goto rx_next;
 428		}
 429
 430		copying_skb = (len <= rx_copybreak);
 431
 432		netif_dbg(de, rx_status, de->dev,
 433			  "rx slot %d status 0x%x len %d copying? %d\n",
 434			  rx_tail, status, len, copying_skb);
 435
 436		buflen = copying_skb ? (len + RX_OFFSET) : de->rx_buf_sz;
 437		copy_skb = netdev_alloc_skb(de->dev, buflen);
 438		if (unlikely(!copy_skb)) {
 439			de->dev->stats.rx_dropped++;
 440			drop = 1;
 441			rx_work = 100;
 442			goto rx_next;
 443		}
 444
 445		if (!copying_skb) {
 446			dma_unmap_single(&de->pdev->dev, mapping, buflen,
 447					 DMA_FROM_DEVICE);
 448			skb_put(skb, len);
 449
 450			mapping =
 451			de->rx_skb[rx_tail].mapping =
 452				dma_map_single(&de->pdev->dev, copy_skb->data,
 453					       buflen, DMA_FROM_DEVICE);
 454			de->rx_skb[rx_tail].skb = copy_skb;
 455		} else {
 456			dma_sync_single_for_cpu(&de->pdev->dev, mapping, len,
 457						DMA_FROM_DEVICE);
 458			skb_reserve(copy_skb, RX_OFFSET);
 459			skb_copy_from_linear_data(skb, skb_put(copy_skb, len),
 460						  len);
 461			dma_sync_single_for_device(&de->pdev->dev, mapping,
 462						   len, DMA_FROM_DEVICE);
 463
 464			/* We'll reuse the original ring buffer. */
 465			skb = copy_skb;
 466		}
 467
 468		skb->protocol = eth_type_trans (skb, de->dev);
 469
 470		de->dev->stats.rx_packets++;
 471		de->dev->stats.rx_bytes += skb->len;
 472		rc = netif_rx (skb);
 473		if (rc == NET_RX_DROP)
 474			drop = 1;
 475
 476rx_next:
 477		if (rx_tail == (DE_RX_RING_SIZE - 1))
 478			de->rx_ring[rx_tail].opts2 =
 479				cpu_to_le32(RingEnd | de->rx_buf_sz);
 480		else
 481			de->rx_ring[rx_tail].opts2 = cpu_to_le32(de->rx_buf_sz);
 482		de->rx_ring[rx_tail].addr1 = cpu_to_le32(mapping);
 483		wmb();
 484		de->rx_ring[rx_tail].opts1 = cpu_to_le32(DescOwn);
 485		rx_tail = NEXT_RX(rx_tail);
 486	}
 487
 488	if (!rx_work)
 489		netdev_warn(de->dev, "rx work limit reached\n");
 490
 491	de->rx_tail = rx_tail;
 492}
 493
 494static irqreturn_t de_interrupt (int irq, void *dev_instance)
 495{
 496	struct net_device *dev = dev_instance;
 497	struct de_private *de = netdev_priv(dev);
 498	u32 status;
 499
 500	status = dr32(MacStatus);
 501	if ((!(status & (IntrOK|IntrErr))) || (status == 0xFFFF))
 502		return IRQ_NONE;
 503
 504	netif_dbg(de, intr, dev, "intr, status %08x mode %08x desc %u/%u/%u\n",
 505		  status, dr32(MacMode),
 506		  de->rx_tail, de->tx_head, de->tx_tail);
 507
 508	dw32(MacStatus, status);
 509
 510	if (status & (RxIntr | RxEmpty)) {
 511		de_rx(de);
 512		if (status & RxEmpty)
 513			dw32(RxPoll, NormalRxPoll);
 514	}
 515
 516	spin_lock(&de->lock);
 517
 518	if (status & (TxIntr | TxEmpty))
 519		de_tx(de);
 520
 521	if (status & (LinkPass | LinkFail))
 522		de_media_interrupt(de, status);
 523
 524	spin_unlock(&de->lock);
 525
 526	if (status & PciErr) {
 527		u16 pci_status;
 528
 529		pci_read_config_word(de->pdev, PCI_STATUS, &pci_status);
 530		pci_write_config_word(de->pdev, PCI_STATUS, pci_status);
 531		netdev_err(de->dev,
 532			   "PCI bus error, status=%08x, PCI status=%04x\n",
 533			   status, pci_status);
 534	}
 535
 536	return IRQ_HANDLED;
 537}
 538
 539static void de_tx (struct de_private *de)
 540{
 541	unsigned tx_head = de->tx_head;
 542	unsigned tx_tail = de->tx_tail;
 543
 544	while (tx_tail != tx_head) {
 545		struct sk_buff *skb;
 546		u32 status;
 547
 548		rmb();
 549		status = le32_to_cpu(de->tx_ring[tx_tail].opts1);
 550		if (status & DescOwn)
 551			break;
 552
 553		skb = de->tx_skb[tx_tail].skb;
 554		BUG_ON(!skb);
 555		if (unlikely(skb == DE_DUMMY_SKB))
 556			goto next;
 557
 558		if (unlikely(skb == DE_SETUP_SKB)) {
 559			dma_unmap_single(&de->pdev->dev,
 560					 de->tx_skb[tx_tail].mapping,
 561					 sizeof(de->setup_frame),
 562					 DMA_TO_DEVICE);
 563			goto next;
 564		}
 565
 566		dma_unmap_single(&de->pdev->dev, de->tx_skb[tx_tail].mapping,
 567				 skb->len, DMA_TO_DEVICE);
 568
 569		if (status & LastFrag) {
 570			if (status & TxError) {
 571				netif_dbg(de, tx_err, de->dev,
 572					  "tx err, status 0x%x\n",
 573					  status);
 574				de->dev->stats.tx_errors++;
 575				if (status & TxOWC)
 576					de->dev->stats.tx_window_errors++;
 577				if (status & TxMaxCol)
 578					de->dev->stats.tx_aborted_errors++;
 579				if (status & TxLinkFail)
 580					de->dev->stats.tx_carrier_errors++;
 581				if (status & TxFIFOUnder)
 582					de->dev->stats.tx_fifo_errors++;
 583			} else {
 584				de->dev->stats.tx_packets++;
 585				de->dev->stats.tx_bytes += skb->len;
 586				netif_dbg(de, tx_done, de->dev,
 587					  "tx done, slot %d\n", tx_tail);
 588			}
 589			dev_consume_skb_irq(skb);
 590		}
 591
 592next:
 593		de->tx_skb[tx_tail].skb = NULL;
 594
 595		tx_tail = NEXT_TX(tx_tail);
 596	}
 597
 598	de->tx_tail = tx_tail;
 599
 600	if (netif_queue_stopped(de->dev) && (TX_BUFFS_AVAIL(de) > (DE_TX_RING_SIZE / 4)))
 601		netif_wake_queue(de->dev);
 602}
 603
 604static netdev_tx_t de_start_xmit (struct sk_buff *skb,
 605					struct net_device *dev)
 606{
 607	struct de_private *de = netdev_priv(dev);
 608	unsigned int entry, tx_free;
 609	u32 mapping, len, flags = FirstFrag | LastFrag;
 610	struct de_desc *txd;
 611
 612	spin_lock_irq(&de->lock);
 613
 614	tx_free = TX_BUFFS_AVAIL(de);
 615	if (tx_free == 0) {
 616		netif_stop_queue(dev);
 617		spin_unlock_irq(&de->lock);
 618		return NETDEV_TX_BUSY;
 619	}
 620	tx_free--;
 621
 622	entry = de->tx_head;
 623
 624	txd = &de->tx_ring[entry];
 625
 626	len = skb->len;
 627	mapping = dma_map_single(&de->pdev->dev, skb->data, len,
 628				 DMA_TO_DEVICE);
 629	if (entry == (DE_TX_RING_SIZE - 1))
 630		flags |= RingEnd;
 631	if (!tx_free || (tx_free == (DE_TX_RING_SIZE / 2)))
 632		flags |= TxSwInt;
 633	flags |= len;
 634	txd->opts2 = cpu_to_le32(flags);
 635	txd->addr1 = cpu_to_le32(mapping);
 636
 637	de->tx_skb[entry].skb = skb;
 638	de->tx_skb[entry].mapping = mapping;
 639	wmb();
 640
 641	txd->opts1 = cpu_to_le32(DescOwn);
 642	wmb();
 643
 644	de->tx_head = NEXT_TX(entry);
 645	netif_dbg(de, tx_queued, dev, "tx queued, slot %d, skblen %d\n",
 646		  entry, skb->len);
 647
 648	if (tx_free == 0)
 649		netif_stop_queue(dev);
 650
 651	spin_unlock_irq(&de->lock);
 652
 653	/* Trigger an immediate transmit demand. */
 654	dw32(TxPoll, NormalTxPoll);
 655
 656	return NETDEV_TX_OK;
 657}
 658
 659/* Set or clear the multicast filter for this adaptor.
 660   Note that we only use exclusion around actually queueing the
 661   new frame, not around filling de->setup_frame.  This is non-deterministic
 662   when re-entered but still correct. */
 663
 664static void build_setup_frame_hash(u16 *setup_frm, struct net_device *dev)
 665{
 666	struct de_private *de = netdev_priv(dev);
 667	u16 hash_table[32];
 668	struct netdev_hw_addr *ha;
 669	const u16 *eaddrs;
 670	int i;
 
 671
 672	memset(hash_table, 0, sizeof(hash_table));
 673	__set_bit_le(255, hash_table);			/* Broadcast entry */
 674	/* This should work on big-endian machines as well. */
 675	netdev_for_each_mc_addr(ha, dev) {
 676		int index = ether_crc_le(ETH_ALEN, ha->addr) & 0x1ff;
 677
 678		__set_bit_le(index, hash_table);
 679	}
 680
 681	for (i = 0; i < 32; i++) {
 682		*setup_frm++ = hash_table[i];
 683		*setup_frm++ = hash_table[i];
 684	}
 685	setup_frm = &de->setup_frame[13*6];
 686
 687	/* Fill the final entry with our physical address. */
 688	eaddrs = (const u16 *)dev->dev_addr;
 689	*setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
 690	*setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
 691	*setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
 692}
 693
 694static void build_setup_frame_perfect(u16 *setup_frm, struct net_device *dev)
 695{
 696	struct de_private *de = netdev_priv(dev);
 697	struct netdev_hw_addr *ha;
 698	const u16 *eaddrs;
 699
 700	/* We have <= 14 addresses so we can use the wonderful
 701	   16 address perfect filtering of the Tulip. */
 702	netdev_for_each_mc_addr(ha, dev) {
 703		eaddrs = (u16 *) ha->addr;
 704		*setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
 705		*setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
 706		*setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
 707	}
 708	/* Fill the unused entries with the broadcast address. */
 709	memset(setup_frm, 0xff, (15 - netdev_mc_count(dev)) * 12);
 710	setup_frm = &de->setup_frame[15*6];
 711
 712	/* Fill the final entry with our physical address. */
 713	eaddrs = (const u16 *)dev->dev_addr;
 714	*setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
 715	*setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
 716	*setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
 717}
 718
 719
 720static void __de_set_rx_mode (struct net_device *dev)
 721{
 722	struct de_private *de = netdev_priv(dev);
 723	u32 macmode;
 724	unsigned int entry;
 725	u32 mapping;
 726	struct de_desc *txd;
 727	struct de_desc *dummy_txd = NULL;
 728
 729	macmode = dr32(MacMode) & ~(AcceptAllMulticast | AcceptAllPhys);
 730
 731	if (dev->flags & IFF_PROMISC) {	/* Set promiscuous. */
 732		macmode |= AcceptAllMulticast | AcceptAllPhys;
 733		goto out;
 734	}
 735
 736	if ((netdev_mc_count(dev) > 1000) || (dev->flags & IFF_ALLMULTI)) {
 737		/* Too many to filter well -- accept all multicasts. */
 738		macmode |= AcceptAllMulticast;
 739		goto out;
 740	}
 741
 742	/* Note that only the low-address shortword of setup_frame is valid!
 743	   The values are doubled for big-endian architectures. */
 744	if (netdev_mc_count(dev) > 14)	/* Must use a multicast hash table. */
 745		build_setup_frame_hash (de->setup_frame, dev);
 746	else
 747		build_setup_frame_perfect (de->setup_frame, dev);
 748
 749	/*
 750	 * Now add this frame to the Tx list.
 751	 */
 752
 753	entry = de->tx_head;
 754
 755	/* Avoid a chip errata by prefixing a dummy entry. */
 756	if (entry != 0) {
 757		de->tx_skb[entry].skb = DE_DUMMY_SKB;
 758
 759		dummy_txd = &de->tx_ring[entry];
 760		dummy_txd->opts2 = (entry == (DE_TX_RING_SIZE - 1)) ?
 761				   cpu_to_le32(RingEnd) : 0;
 762		dummy_txd->addr1 = 0;
 763
 764		/* Must set DescOwned later to avoid race with chip */
 765
 766		entry = NEXT_TX(entry);
 767	}
 768
 769	de->tx_skb[entry].skb = DE_SETUP_SKB;
 770	de->tx_skb[entry].mapping = mapping =
 771	    dma_map_single(&de->pdev->dev, de->setup_frame,
 772			   sizeof(de->setup_frame), DMA_TO_DEVICE);
 773
 774	/* Put the setup frame on the Tx list. */
 775	txd = &de->tx_ring[entry];
 776	if (entry == (DE_TX_RING_SIZE - 1))
 777		txd->opts2 = cpu_to_le32(SetupFrame | RingEnd | sizeof (de->setup_frame));
 778	else
 779		txd->opts2 = cpu_to_le32(SetupFrame | sizeof (de->setup_frame));
 780	txd->addr1 = cpu_to_le32(mapping);
 781	wmb();
 782
 783	txd->opts1 = cpu_to_le32(DescOwn);
 784	wmb();
 785
 786	if (dummy_txd) {
 787		dummy_txd->opts1 = cpu_to_le32(DescOwn);
 788		wmb();
 789	}
 790
 791	de->tx_head = NEXT_TX(entry);
 792
 793	if (TX_BUFFS_AVAIL(de) == 0)
 794		netif_stop_queue(dev);
 795
 796	/* Trigger an immediate transmit demand. */
 797	dw32(TxPoll, NormalTxPoll);
 798
 799out:
 800	if (macmode != dr32(MacMode))
 801		dw32(MacMode, macmode);
 802}
 803
 804static void de_set_rx_mode (struct net_device *dev)
 805{
 806	unsigned long flags;
 807	struct de_private *de = netdev_priv(dev);
 808
 809	spin_lock_irqsave (&de->lock, flags);
 810	__de_set_rx_mode(dev);
 811	spin_unlock_irqrestore (&de->lock, flags);
 812}
 813
 814static inline void de_rx_missed(struct de_private *de, u32 rx_missed)
 815{
 816	if (unlikely(rx_missed & RxMissedOver))
 817		de->dev->stats.rx_missed_errors += RxMissedMask;
 818	else
 819		de->dev->stats.rx_missed_errors += (rx_missed & RxMissedMask);
 820}
 821
 822static void __de_get_stats(struct de_private *de)
 823{
 824	u32 tmp = dr32(RxMissed); /* self-clearing */
 825
 826	de_rx_missed(de, tmp);
 827}
 828
 829static struct net_device_stats *de_get_stats(struct net_device *dev)
 830{
 831	struct de_private *de = netdev_priv(dev);
 832
 833	/* The chip only need report frame silently dropped. */
 834	spin_lock_irq(&de->lock);
 835	if (netif_running(dev) && netif_device_present(dev))
 836		__de_get_stats(de);
 837	spin_unlock_irq(&de->lock);
 838
 839	return &dev->stats;
 840}
 841
 842static inline int de_is_running (struct de_private *de)
 843{
 844	return (dr32(MacStatus) & (RxState | TxState)) ? 1 : 0;
 845}
 846
 847static void de_stop_rxtx (struct de_private *de)
 848{
 849	u32 macmode;
 850	unsigned int i = 1300/100;
 851
 852	macmode = dr32(MacMode);
 853	if (macmode & RxTx) {
 854		dw32(MacMode, macmode & ~RxTx);
 855		dr32(MacMode);
 856	}
 857
 858	/* wait until in-flight frame completes.
 859	 * Max time @ 10BT: 1500*8b/10Mbps == 1200us (+ 100us margin)
 860	 * Typically expect this loop to end in < 50 us on 100BT.
 861	 */
 862	while (--i) {
 863		if (!de_is_running(de))
 864			return;
 865		udelay(100);
 866	}
 867
 868	netdev_warn(de->dev, "timeout expired, stopping DMA\n");
 869}
 870
 871static inline void de_start_rxtx (struct de_private *de)
 872{
 873	u32 macmode;
 874
 875	macmode = dr32(MacMode);
 876	if ((macmode & RxTx) != RxTx) {
 877		dw32(MacMode, macmode | RxTx);
 878		dr32(MacMode);
 879	}
 880}
 881
 882static void de_stop_hw (struct de_private *de)
 883{
 884
 885	udelay(5);
 886	dw32(IntrMask, 0);
 887
 888	de_stop_rxtx(de);
 889
 890	dw32(MacStatus, dr32(MacStatus));
 891
 892	udelay(10);
 893
 894	de->rx_tail = 0;
 895	de->tx_head = de->tx_tail = 0;
 896}
 897
 898static void de_link_up(struct de_private *de)
 899{
 900	if (!netif_carrier_ok(de->dev)) {
 901		netif_carrier_on(de->dev);
 902		netif_info(de, link, de->dev, "link up, media %s\n",
 903			   media_name[de->media_type]);
 904	}
 905}
 906
 907static void de_link_down(struct de_private *de)
 908{
 909	if (netif_carrier_ok(de->dev)) {
 910		netif_carrier_off(de->dev);
 911		netif_info(de, link, de->dev, "link down\n");
 912	}
 913}
 914
 915static void de_set_media (struct de_private *de)
 916{
 917	unsigned media = de->media_type;
 918	u32 macmode = dr32(MacMode);
 919
 920	if (de_is_running(de))
 921		netdev_warn(de->dev, "chip is running while changing media!\n");
 922
 923	if (de->de21040)
 924		dw32(CSR11, FULL_DUPLEX_MAGIC);
 925	dw32(CSR13, 0); /* Reset phy */
 926	dw32(CSR14, de->media[media].csr14);
 927	dw32(CSR15, de->media[media].csr15);
 928	dw32(CSR13, de->media[media].csr13);
 929
 930	/* must delay 10ms before writing to other registers,
 931	 * especially CSR6
 932	 */
 933	mdelay(10);
 934
 935	if (media == DE_MEDIA_TP_FD)
 936		macmode |= FullDuplex;
 937	else
 938		macmode &= ~FullDuplex;
 939
 940	netif_info(de, link, de->dev, "set link %s\n", media_name[media]);
 941	netif_info(de, hw, de->dev, "mode 0x%x, sia 0x%x,0x%x,0x%x,0x%x\n",
 942		   dr32(MacMode), dr32(SIAStatus),
 943		   dr32(CSR13), dr32(CSR14), dr32(CSR15));
 944	netif_info(de, hw, de->dev, "set mode 0x%x, set sia 0x%x,0x%x,0x%x\n",
 945		   macmode, de->media[media].csr13,
 946		   de->media[media].csr14, de->media[media].csr15);
 947	if (macmode != dr32(MacMode))
 948		dw32(MacMode, macmode);
 949}
 950
 951static void de_next_media (struct de_private *de, const u32 *media,
 952			   unsigned int n_media)
 953{
 954	unsigned int i;
 955
 956	for (i = 0; i < n_media; i++) {
 957		if (de_ok_to_advertise(de, media[i])) {
 958			de->media_type = media[i];
 959			return;
 960		}
 961	}
 962}
 963
 964static void de21040_media_timer (struct timer_list *t)
 965{
 966	struct de_private *de = from_timer(de, t, media_timer);
 967	struct net_device *dev = de->dev;
 968	u32 status = dr32(SIAStatus);
 969	unsigned int carrier;
 970	unsigned long flags;
 971
 972	carrier = (status & NetCxnErr) ? 0 : 1;
 973
 974	if (carrier) {
 975		if (de->media_type != DE_MEDIA_AUI && (status & LinkFailStatus))
 976			goto no_link_yet;
 977
 978		de->media_timer.expires = jiffies + DE_TIMER_LINK;
 979		add_timer(&de->media_timer);
 980		if (!netif_carrier_ok(dev))
 981			de_link_up(de);
 982		else
 983			netif_info(de, timer, dev, "%s link ok, status %x\n",
 984				   media_name[de->media_type], status);
 985		return;
 986	}
 987
 988	de_link_down(de);
 989
 990	if (de->media_lock)
 991		return;
 992
 993	if (de->media_type == DE_MEDIA_AUI) {
 994		static const u32 next_state = DE_MEDIA_TP;
 995		de_next_media(de, &next_state, 1);
 996	} else {
 997		static const u32 next_state = DE_MEDIA_AUI;
 998		de_next_media(de, &next_state, 1);
 999	}
1000
1001	spin_lock_irqsave(&de->lock, flags);
1002	de_stop_rxtx(de);
1003	spin_unlock_irqrestore(&de->lock, flags);
1004	de_set_media(de);
1005	de_start_rxtx(de);
1006
1007no_link_yet:
1008	de->media_timer.expires = jiffies + DE_TIMER_NO_LINK;
1009	add_timer(&de->media_timer);
1010
1011	netif_info(de, timer, dev, "no link, trying media %s, status %x\n",
1012		   media_name[de->media_type], status);
1013}
1014
1015static unsigned int de_ok_to_advertise (struct de_private *de, u32 new_media)
1016{
1017	switch (new_media) {
1018	case DE_MEDIA_TP_AUTO:
1019		if (!(de->media_advertise & ADVERTISED_Autoneg))
1020			return 0;
1021		if (!(de->media_advertise & (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full)))
1022			return 0;
1023		break;
1024	case DE_MEDIA_BNC:
1025		if (!(de->media_advertise & ADVERTISED_BNC))
1026			return 0;
1027		break;
1028	case DE_MEDIA_AUI:
1029		if (!(de->media_advertise & ADVERTISED_AUI))
1030			return 0;
1031		break;
1032	case DE_MEDIA_TP:
1033		if (!(de->media_advertise & ADVERTISED_10baseT_Half))
1034			return 0;
1035		break;
1036	case DE_MEDIA_TP_FD:
1037		if (!(de->media_advertise & ADVERTISED_10baseT_Full))
1038			return 0;
1039		break;
1040	}
1041
1042	return 1;
1043}
1044
1045static void de21041_media_timer (struct timer_list *t)
1046{
1047	struct de_private *de = from_timer(de, t, media_timer);
1048	struct net_device *dev = de->dev;
1049	u32 status = dr32(SIAStatus);
1050	unsigned int carrier;
1051	unsigned long flags;
1052
1053	/* clear port active bits */
1054	dw32(SIAStatus, NonselPortActive | SelPortActive);
1055
1056	carrier = (status & NetCxnErr) ? 0 : 1;
1057
1058	if (carrier) {
1059		if ((de->media_type == DE_MEDIA_TP_AUTO ||
1060		     de->media_type == DE_MEDIA_TP ||
1061		     de->media_type == DE_MEDIA_TP_FD) &&
1062		    (status & LinkFailStatus))
1063			goto no_link_yet;
1064
1065		de->media_timer.expires = jiffies + DE_TIMER_LINK;
1066		add_timer(&de->media_timer);
1067		if (!netif_carrier_ok(dev))
1068			de_link_up(de);
1069		else
1070			netif_info(de, timer, dev,
1071				   "%s link ok, mode %x status %x\n",
1072				   media_name[de->media_type],
1073				   dr32(MacMode), status);
1074		return;
1075	}
1076
1077	de_link_down(de);
1078
1079	/* if media type locked, don't switch media */
1080	if (de->media_lock)
1081		goto set_media;
1082
1083	/* if activity detected, use that as hint for new media type */
1084	if (status & NonselPortActive) {
1085		unsigned int have_media = 1;
1086
1087		/* if AUI/BNC selected, then activity is on TP port */
1088		if (de->media_type == DE_MEDIA_AUI ||
1089		    de->media_type == DE_MEDIA_BNC) {
1090			if (de_ok_to_advertise(de, DE_MEDIA_TP_AUTO))
1091				de->media_type = DE_MEDIA_TP_AUTO;
1092			else
1093				have_media = 0;
1094		}
1095
1096		/* TP selected.  If there is only TP and BNC, then it's BNC */
1097		else if (((de->media_supported & DE_AUI_BNC) == SUPPORTED_BNC) &&
1098			 de_ok_to_advertise(de, DE_MEDIA_BNC))
1099			de->media_type = DE_MEDIA_BNC;
1100
1101		/* TP selected.  If there is only TP and AUI, then it's AUI */
1102		else if (((de->media_supported & DE_AUI_BNC) == SUPPORTED_AUI) &&
1103			 de_ok_to_advertise(de, DE_MEDIA_AUI))
1104			de->media_type = DE_MEDIA_AUI;
1105
1106		/* otherwise, ignore the hint */
1107		else
1108			have_media = 0;
1109
1110		if (have_media)
1111			goto set_media;
1112	}
1113
1114	/*
1115	 * Absent or ambiguous activity hint, move to next advertised
1116	 * media state.  If de->media_type is left unchanged, this
1117	 * simply resets the PHY and reloads the current media settings.
1118	 */
1119	if (de->media_type == DE_MEDIA_AUI) {
1120		static const u32 next_states[] = {
1121			DE_MEDIA_BNC, DE_MEDIA_TP_AUTO
1122		};
1123		de_next_media(de, next_states, ARRAY_SIZE(next_states));
1124	} else if (de->media_type == DE_MEDIA_BNC) {
1125		static const u32 next_states[] = {
1126			DE_MEDIA_TP_AUTO, DE_MEDIA_AUI
1127		};
1128		de_next_media(de, next_states, ARRAY_SIZE(next_states));
1129	} else {
1130		static const u32 next_states[] = {
1131			DE_MEDIA_AUI, DE_MEDIA_BNC, DE_MEDIA_TP_AUTO
1132		};
1133		de_next_media(de, next_states, ARRAY_SIZE(next_states));
1134	}
1135
1136set_media:
1137	spin_lock_irqsave(&de->lock, flags);
1138	de_stop_rxtx(de);
1139	spin_unlock_irqrestore(&de->lock, flags);
1140	de_set_media(de);
1141	de_start_rxtx(de);
1142
1143no_link_yet:
1144	de->media_timer.expires = jiffies + DE_TIMER_NO_LINK;
1145	add_timer(&de->media_timer);
1146
1147	netif_info(de, timer, dev, "no link, trying media %s, status %x\n",
1148		   media_name[de->media_type], status);
1149}
1150
1151static void de_media_interrupt (struct de_private *de, u32 status)
1152{
1153	if (status & LinkPass) {
1154		/* Ignore if current media is AUI or BNC and we can't use TP */
1155		if ((de->media_type == DE_MEDIA_AUI ||
1156		     de->media_type == DE_MEDIA_BNC) &&
1157		    (de->media_lock ||
1158		     !de_ok_to_advertise(de, DE_MEDIA_TP_AUTO)))
1159			return;
1160		/* If current media is not TP, change it to TP */
1161		if ((de->media_type == DE_MEDIA_AUI ||
1162		     de->media_type == DE_MEDIA_BNC)) {
1163			de->media_type = DE_MEDIA_TP_AUTO;
1164			de_stop_rxtx(de);
1165			de_set_media(de);
1166			de_start_rxtx(de);
1167		}
1168		de_link_up(de);
1169		mod_timer(&de->media_timer, jiffies + DE_TIMER_LINK);
1170		return;
1171	}
1172
1173	BUG_ON(!(status & LinkFail));
1174	/* Mark the link as down only if current media is TP */
1175	if (netif_carrier_ok(de->dev) && de->media_type != DE_MEDIA_AUI &&
1176	    de->media_type != DE_MEDIA_BNC) {
1177		de_link_down(de);
1178		mod_timer(&de->media_timer, jiffies + DE_TIMER_NO_LINK);
1179	}
1180}
1181
1182static int de_reset_mac (struct de_private *de)
1183{
1184	u32 status, tmp;
1185
1186	/*
1187	 * Reset MAC.  de4x5.c and tulip.c examined for "advice"
1188	 * in this area.
1189	 */
1190
1191	if (dr32(BusMode) == 0xffffffff)
1192		return -EBUSY;
1193
1194	/* Reset the chip, holding bit 0 set at least 50 PCI cycles. */
1195	dw32 (BusMode, CmdReset);
1196	mdelay (1);
1197
1198	dw32 (BusMode, de_bus_mode);
1199	mdelay (1);
1200
1201	for (tmp = 0; tmp < 5; tmp++) {
1202		dr32 (BusMode);
1203		mdelay (1);
1204	}
1205
1206	mdelay (1);
1207
1208	status = dr32(MacStatus);
1209	if (status & (RxState | TxState))
1210		return -EBUSY;
1211	if (status == 0xffffffff)
1212		return -ENODEV;
1213	return 0;
1214}
1215
1216static void de_adapter_wake (struct de_private *de)
1217{
1218	u32 pmctl;
1219
1220	if (de->de21040)
1221		return;
1222
1223	pci_read_config_dword(de->pdev, PCIPM, &pmctl);
1224	if (pmctl & PM_Mask) {
1225		pmctl &= ~PM_Mask;
1226		pci_write_config_dword(de->pdev, PCIPM, pmctl);
1227
1228		/* de4x5.c delays, so we do too */
1229		msleep(10);
1230	}
1231}
1232
1233static void de_adapter_sleep (struct de_private *de)
1234{
1235	u32 pmctl;
1236
1237	if (de->de21040)
1238		return;
1239
1240	dw32(CSR13, 0); /* Reset phy */
1241	pci_read_config_dword(de->pdev, PCIPM, &pmctl);
1242	pmctl |= PM_Sleep;
1243	pci_write_config_dword(de->pdev, PCIPM, pmctl);
1244}
1245
1246static int de_init_hw (struct de_private *de)
1247{
1248	struct net_device *dev = de->dev;
1249	u32 macmode;
1250	int rc;
1251
1252	de_adapter_wake(de);
1253
1254	macmode = dr32(MacMode) & ~MacModeClear;
1255
1256	rc = de_reset_mac(de);
1257	if (rc)
1258		return rc;
1259
1260	de_set_media(de); /* reset phy */
1261
1262	dw32(RxRingAddr, de->ring_dma);
1263	dw32(TxRingAddr, de->ring_dma + (sizeof(struct de_desc) * DE_RX_RING_SIZE));
1264
1265	dw32(MacMode, RxTx | macmode);
1266
1267	dr32(RxMissed); /* self-clearing */
1268
1269	dw32(IntrMask, de_intr_mask);
1270
1271	de_set_rx_mode(dev);
1272
1273	return 0;
1274}
1275
1276static int de_refill_rx (struct de_private *de)
1277{
1278	unsigned i;
1279
1280	for (i = 0; i < DE_RX_RING_SIZE; i++) {
1281		struct sk_buff *skb;
1282
1283		skb = netdev_alloc_skb(de->dev, de->rx_buf_sz);
1284		if (!skb)
1285			goto err_out;
1286
1287		de->rx_skb[i].mapping = dma_map_single(&de->pdev->dev,
1288						       skb->data,
1289						       de->rx_buf_sz,
1290						       DMA_FROM_DEVICE);
1291		de->rx_skb[i].skb = skb;
1292
1293		de->rx_ring[i].opts1 = cpu_to_le32(DescOwn);
1294		if (i == (DE_RX_RING_SIZE - 1))
1295			de->rx_ring[i].opts2 =
1296				cpu_to_le32(RingEnd | de->rx_buf_sz);
1297		else
1298			de->rx_ring[i].opts2 = cpu_to_le32(de->rx_buf_sz);
1299		de->rx_ring[i].addr1 = cpu_to_le32(de->rx_skb[i].mapping);
1300		de->rx_ring[i].addr2 = 0;
1301	}
1302
1303	return 0;
1304
1305err_out:
1306	de_clean_rings(de);
1307	return -ENOMEM;
1308}
1309
1310static int de_init_rings (struct de_private *de)
1311{
1312	memset(de->tx_ring, 0, sizeof(struct de_desc) * DE_TX_RING_SIZE);
1313	de->tx_ring[DE_TX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1314
1315	de->rx_tail = 0;
1316	de->tx_head = de->tx_tail = 0;
1317
1318	return de_refill_rx (de);
1319}
1320
1321static int de_alloc_rings (struct de_private *de)
1322{
1323	de->rx_ring = dma_alloc_coherent(&de->pdev->dev, DE_RING_BYTES,
1324					 &de->ring_dma, GFP_KERNEL);
1325	if (!de->rx_ring)
1326		return -ENOMEM;
1327	de->tx_ring = &de->rx_ring[DE_RX_RING_SIZE];
1328	return de_init_rings(de);
1329}
1330
1331static void de_clean_rings (struct de_private *de)
1332{
1333	unsigned i;
1334
1335	memset(de->rx_ring, 0, sizeof(struct de_desc) * DE_RX_RING_SIZE);
1336	de->rx_ring[DE_RX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1337	wmb();
1338	memset(de->tx_ring, 0, sizeof(struct de_desc) * DE_TX_RING_SIZE);
1339	de->tx_ring[DE_TX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1340	wmb();
1341
1342	for (i = 0; i < DE_RX_RING_SIZE; i++) {
1343		if (de->rx_skb[i].skb) {
1344			dma_unmap_single(&de->pdev->dev,
1345					 de->rx_skb[i].mapping, de->rx_buf_sz,
1346					 DMA_FROM_DEVICE);
1347			dev_kfree_skb(de->rx_skb[i].skb);
1348		}
1349	}
1350
1351	for (i = 0; i < DE_TX_RING_SIZE; i++) {
1352		struct sk_buff *skb = de->tx_skb[i].skb;
1353		if ((skb) && (skb != DE_DUMMY_SKB)) {
1354			if (skb != DE_SETUP_SKB) {
1355				de->dev->stats.tx_dropped++;
1356				dma_unmap_single(&de->pdev->dev,
1357						 de->tx_skb[i].mapping,
1358						 skb->len, DMA_TO_DEVICE);
1359				dev_kfree_skb(skb);
1360			} else {
1361				dma_unmap_single(&de->pdev->dev,
1362						 de->tx_skb[i].mapping,
1363						 sizeof(de->setup_frame),
1364						 DMA_TO_DEVICE);
1365			}
1366		}
1367	}
1368
1369	memset(&de->rx_skb, 0, sizeof(struct ring_info) * DE_RX_RING_SIZE);
1370	memset(&de->tx_skb, 0, sizeof(struct ring_info) * DE_TX_RING_SIZE);
1371}
1372
1373static void de_free_rings (struct de_private *de)
1374{
1375	de_clean_rings(de);
1376	dma_free_coherent(&de->pdev->dev, DE_RING_BYTES, de->rx_ring,
1377			  de->ring_dma);
1378	de->rx_ring = NULL;
1379	de->tx_ring = NULL;
1380}
1381
1382static int de_open (struct net_device *dev)
1383{
1384	struct de_private *de = netdev_priv(dev);
1385	const int irq = de->pdev->irq;
1386	int rc;
1387
1388	netif_dbg(de, ifup, dev, "enabling interface\n");
1389
1390	de->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32);
1391
1392	rc = de_alloc_rings(de);
1393	if (rc) {
1394		netdev_err(dev, "ring allocation failure, err=%d\n", rc);
1395		return rc;
1396	}
1397
1398	dw32(IntrMask, 0);
1399
1400	rc = request_irq(irq, de_interrupt, IRQF_SHARED, dev->name, dev);
1401	if (rc) {
1402		netdev_err(dev, "IRQ %d request failure, err=%d\n", irq, rc);
1403		goto err_out_free;
1404	}
1405
1406	rc = de_init_hw(de);
1407	if (rc) {
1408		netdev_err(dev, "h/w init failure, err=%d\n", rc);
1409		goto err_out_free_irq;
1410	}
1411
1412	netif_start_queue(dev);
1413	mod_timer(&de->media_timer, jiffies + DE_TIMER_NO_LINK);
1414
1415	return 0;
1416
1417err_out_free_irq:
1418	free_irq(irq, dev);
1419err_out_free:
1420	de_free_rings(de);
1421	return rc;
1422}
1423
1424static int de_close (struct net_device *dev)
1425{
1426	struct de_private *de = netdev_priv(dev);
1427	unsigned long flags;
1428
1429	netif_dbg(de, ifdown, dev, "disabling interface\n");
1430
1431	del_timer_sync(&de->media_timer);
1432
1433	spin_lock_irqsave(&de->lock, flags);
1434	de_stop_hw(de);
1435	netif_stop_queue(dev);
1436	netif_carrier_off(dev);
1437	spin_unlock_irqrestore(&de->lock, flags);
1438
1439	free_irq(de->pdev->irq, dev);
1440
1441	de_free_rings(de);
1442	de_adapter_sleep(de);
1443	return 0;
1444}
1445
1446static void de_tx_timeout (struct net_device *dev, unsigned int txqueue)
1447{
1448	struct de_private *de = netdev_priv(dev);
1449	const int irq = de->pdev->irq;
1450
1451	netdev_dbg(dev, "NIC status %08x mode %08x sia %08x desc %u/%u/%u\n",
1452		   dr32(MacStatus), dr32(MacMode), dr32(SIAStatus),
1453		   de->rx_tail, de->tx_head, de->tx_tail);
1454
1455	del_timer_sync(&de->media_timer);
1456
1457	disable_irq(irq);
1458	spin_lock_irq(&de->lock);
1459
1460	de_stop_hw(de);
1461	netif_stop_queue(dev);
1462	netif_carrier_off(dev);
1463
1464	spin_unlock_irq(&de->lock);
1465	enable_irq(irq);
1466
1467	/* Update the error counts. */
1468	__de_get_stats(de);
1469
1470	synchronize_irq(irq);
1471	de_clean_rings(de);
1472
1473	de_init_rings(de);
1474
1475	de_init_hw(de);
1476
1477	netif_wake_queue(dev);
1478}
1479
1480static void __de_get_regs(struct de_private *de, u8 *buf)
1481{
1482	int i;
1483	u32 *rbuf = (u32 *)buf;
1484
1485	/* read all CSRs */
1486	for (i = 0; i < DE_NUM_REGS; i++)
1487		rbuf[i] = dr32(i * 8);
1488
1489	/* handle self-clearing RxMissed counter, CSR8 */
1490	de_rx_missed(de, rbuf[8]);
1491}
1492
1493static void __de_get_link_ksettings(struct de_private *de,
1494				    struct ethtool_link_ksettings *cmd)
1495{
1496	ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
1497						de->media_supported);
1498	cmd->base.phy_address = 0;
1499	ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
1500						de->media_advertise);
1501
1502	switch (de->media_type) {
1503	case DE_MEDIA_AUI:
1504		cmd->base.port = PORT_AUI;
1505		break;
1506	case DE_MEDIA_BNC:
1507		cmd->base.port = PORT_BNC;
1508		break;
1509	default:
1510		cmd->base.port = PORT_TP;
1511		break;
1512	}
1513
1514	cmd->base.speed = 10;
1515
1516	if (dr32(MacMode) & FullDuplex)
1517		cmd->base.duplex = DUPLEX_FULL;
1518	else
1519		cmd->base.duplex = DUPLEX_HALF;
1520
1521	if (de->media_lock)
1522		cmd->base.autoneg = AUTONEG_DISABLE;
1523	else
1524		cmd->base.autoneg = AUTONEG_ENABLE;
1525
1526	/* ignore maxtxpkt, maxrxpkt for now */
1527}
1528
1529static int __de_set_link_ksettings(struct de_private *de,
1530				   const struct ethtool_link_ksettings *cmd)
1531{
1532	u32 new_media;
1533	unsigned int media_lock;
1534	u8 duplex = cmd->base.duplex;
1535	u8 port = cmd->base.port;
1536	u8 autoneg = cmd->base.autoneg;
1537	u32 advertising;
1538
1539	ethtool_convert_link_mode_to_legacy_u32(&advertising,
1540						cmd->link_modes.advertising);
1541
1542	if (cmd->base.speed != 10)
1543		return -EINVAL;
1544	if (duplex != DUPLEX_HALF && duplex != DUPLEX_FULL)
1545		return -EINVAL;
1546	if (port != PORT_TP && port != PORT_AUI && port != PORT_BNC)
1547		return -EINVAL;
1548	if (de->de21040 && port == PORT_BNC)
1549		return -EINVAL;
1550	if (autoneg != AUTONEG_DISABLE && autoneg != AUTONEG_ENABLE)
1551		return -EINVAL;
1552	if (advertising & ~de->media_supported)
1553		return -EINVAL;
1554	if (autoneg == AUTONEG_ENABLE &&
1555	    (!(advertising & ADVERTISED_Autoneg)))
1556		return -EINVAL;
1557
1558	switch (port) {
1559	case PORT_AUI:
1560		new_media = DE_MEDIA_AUI;
1561		if (!(advertising & ADVERTISED_AUI))
1562			return -EINVAL;
1563		break;
1564	case PORT_BNC:
1565		new_media = DE_MEDIA_BNC;
1566		if (!(advertising & ADVERTISED_BNC))
1567			return -EINVAL;
1568		break;
1569	default:
1570		if (autoneg == AUTONEG_ENABLE)
1571			new_media = DE_MEDIA_TP_AUTO;
1572		else if (duplex == DUPLEX_FULL)
1573			new_media = DE_MEDIA_TP_FD;
1574		else
1575			new_media = DE_MEDIA_TP;
1576		if (!(advertising & ADVERTISED_TP))
1577			return -EINVAL;
1578		if (!(advertising & (ADVERTISED_10baseT_Full |
1579				     ADVERTISED_10baseT_Half)))
1580			return -EINVAL;
1581		break;
1582	}
1583
1584	media_lock = (autoneg == AUTONEG_ENABLE) ? 0 : 1;
1585
1586	if ((new_media == de->media_type) &&
1587	    (media_lock == de->media_lock) &&
1588	    (advertising == de->media_advertise))
1589		return 0; /* nothing to change */
1590
1591	de_link_down(de);
1592	mod_timer(&de->media_timer, jiffies + DE_TIMER_NO_LINK);
1593	de_stop_rxtx(de);
1594
1595	de->media_type = new_media;
1596	de->media_lock = media_lock;
1597	de->media_advertise = advertising;
1598	de_set_media(de);
1599	if (netif_running(de->dev))
1600		de_start_rxtx(de);
1601
1602	return 0;
1603}
1604
1605static void de_get_drvinfo (struct net_device *dev,struct ethtool_drvinfo *info)
1606{
1607	struct de_private *de = netdev_priv(dev);
1608
1609	strscpy(info->driver, DRV_NAME, sizeof(info->driver));
1610	strscpy(info->bus_info, pci_name(de->pdev), sizeof(info->bus_info));
 
1611}
1612
1613static int de_get_regs_len(struct net_device *dev)
1614{
1615	return DE_REGS_SIZE;
1616}
1617
1618static int de_get_link_ksettings(struct net_device *dev,
1619				 struct ethtool_link_ksettings *cmd)
1620{
1621	struct de_private *de = netdev_priv(dev);
1622
1623	spin_lock_irq(&de->lock);
1624	__de_get_link_ksettings(de, cmd);
1625	spin_unlock_irq(&de->lock);
1626
1627	return 0;
1628}
1629
1630static int de_set_link_ksettings(struct net_device *dev,
1631				 const struct ethtool_link_ksettings *cmd)
1632{
1633	struct de_private *de = netdev_priv(dev);
1634	int rc;
1635
1636	spin_lock_irq(&de->lock);
1637	rc = __de_set_link_ksettings(de, cmd);
1638	spin_unlock_irq(&de->lock);
1639
1640	return rc;
1641}
1642
1643static u32 de_get_msglevel(struct net_device *dev)
1644{
1645	struct de_private *de = netdev_priv(dev);
1646
1647	return de->msg_enable;
1648}
1649
1650static void de_set_msglevel(struct net_device *dev, u32 msglvl)
1651{
1652	struct de_private *de = netdev_priv(dev);
1653
1654	de->msg_enable = msglvl;
1655}
1656
1657static int de_get_eeprom(struct net_device *dev,
1658			 struct ethtool_eeprom *eeprom, u8 *data)
1659{
1660	struct de_private *de = netdev_priv(dev);
1661
1662	if (!de->ee_data)
1663		return -EOPNOTSUPP;
1664	if ((eeprom->offset != 0) || (eeprom->magic != 0) ||
1665	    (eeprom->len != DE_EEPROM_SIZE))
1666		return -EINVAL;
1667	memcpy(data, de->ee_data, eeprom->len);
1668
1669	return 0;
1670}
1671
1672static int de_nway_reset(struct net_device *dev)
1673{
1674	struct de_private *de = netdev_priv(dev);
1675	u32 status;
1676
1677	if (de->media_type != DE_MEDIA_TP_AUTO)
1678		return -EINVAL;
1679	if (netif_carrier_ok(de->dev))
1680		de_link_down(de);
1681
1682	status = dr32(SIAStatus);
1683	dw32(SIAStatus, (status & ~NWayState) | NWayRestart);
1684	netif_info(de, link, dev, "link nway restart, status %x,%x\n",
1685		   status, dr32(SIAStatus));
1686	return 0;
1687}
1688
1689static void de_get_regs(struct net_device *dev, struct ethtool_regs *regs,
1690			void *data)
1691{
1692	struct de_private *de = netdev_priv(dev);
1693
1694	regs->version = (DE_REGS_VER << 2) | de->de21040;
1695
1696	spin_lock_irq(&de->lock);
1697	__de_get_regs(de, data);
1698	spin_unlock_irq(&de->lock);
1699}
1700
1701static const struct ethtool_ops de_ethtool_ops = {
1702	.get_link		= ethtool_op_get_link,
1703	.get_drvinfo		= de_get_drvinfo,
1704	.get_regs_len		= de_get_regs_len,
1705	.get_msglevel		= de_get_msglevel,
1706	.set_msglevel		= de_set_msglevel,
1707	.get_eeprom		= de_get_eeprom,
1708	.nway_reset		= de_nway_reset,
1709	.get_regs		= de_get_regs,
1710	.get_link_ksettings	= de_get_link_ksettings,
1711	.set_link_ksettings	= de_set_link_ksettings,
1712};
1713
1714static void de21040_get_mac_address(struct de_private *de)
1715{
1716	u8 addr[ETH_ALEN];
1717	unsigned i;
1718
1719	dw32 (ROMCmd, 0);	/* Reset the pointer with a dummy write. */
1720	udelay(5);
1721
1722	for (i = 0; i < 6; i++) {
1723		int value, boguscnt = 100000;
1724		do {
1725			value = dr32(ROMCmd);
1726			rmb();
1727		} while (value < 0 && --boguscnt > 0);
1728		addr[i] = value;
1729		udelay(1);
1730		if (boguscnt <= 0)
1731			pr_warn("timeout reading 21040 MAC address byte %u\n",
1732				i);
1733	}
1734	eth_hw_addr_set(de->dev, addr);
1735}
1736
1737static void de21040_get_media_info(struct de_private *de)
1738{
1739	unsigned int i;
1740
1741	de->media_type = DE_MEDIA_TP;
1742	de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Full |
1743			       SUPPORTED_10baseT_Half | SUPPORTED_AUI;
1744	de->media_advertise = de->media_supported;
1745
1746	for (i = 0; i < DE_MAX_MEDIA; i++) {
1747		switch (i) {
1748		case DE_MEDIA_AUI:
1749		case DE_MEDIA_TP:
1750		case DE_MEDIA_TP_FD:
1751			de->media[i].type = i;
1752			de->media[i].csr13 = t21040_csr13[i];
1753			de->media[i].csr14 = t21040_csr14[i];
1754			de->media[i].csr15 = t21040_csr15[i];
1755			break;
1756		default:
1757			de->media[i].type = DE_MEDIA_INVALID;
1758			break;
1759		}
1760	}
1761}
1762
1763/* Note: this routine returns extra data bits for size detection. */
1764static unsigned tulip_read_eeprom(void __iomem *regs, int location,
1765				  int addr_len)
1766{
1767	int i;
1768	unsigned retval = 0;
1769	void __iomem *ee_addr = regs + ROMCmd;
1770	int read_cmd = location | (EE_READ_CMD << addr_len);
1771
1772	writel(EE_ENB & ~EE_CS, ee_addr);
1773	writel(EE_ENB, ee_addr);
1774
1775	/* Shift the read command bits out. */
1776	for (i = 4 + addr_len; i >= 0; i--) {
1777		short dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
1778		writel(EE_ENB | dataval, ee_addr);
1779		readl(ee_addr);
1780		writel(EE_ENB | dataval | EE_SHIFT_CLK, ee_addr);
1781		readl(ee_addr);
1782		retval = (retval << 1) | ((readl(ee_addr) & EE_DATA_READ) ? 1 : 0);
1783	}
1784	writel(EE_ENB, ee_addr);
1785	readl(ee_addr);
1786
1787	for (i = 16; i > 0; i--) {
1788		writel(EE_ENB | EE_SHIFT_CLK, ee_addr);
1789		readl(ee_addr);
1790		retval = (retval << 1) | ((readl(ee_addr) & EE_DATA_READ) ? 1 : 0);
1791		writel(EE_ENB, ee_addr);
1792		readl(ee_addr);
1793	}
1794
1795	/* Terminate the EEPROM access. */
1796	writel(EE_ENB & ~EE_CS, ee_addr);
1797	return retval;
1798}
1799
1800static void de21041_get_srom_info(struct de_private *de)
1801{
1802	unsigned i, sa_offset = 0, ofs;
1803	u8 ee_data[DE_EEPROM_SIZE + 6] = {};
1804	unsigned ee_addr_size = tulip_read_eeprom(de->regs, 0xff, 8) & 0x40000 ? 8 : 6;
1805	struct de_srom_info_leaf *il;
1806	void *bufp;
1807
1808	/* download entire eeprom */
1809	for (i = 0; i < DE_EEPROM_WORDS; i++)
1810		((__le16 *)ee_data)[i] =
1811			cpu_to_le16(tulip_read_eeprom(de->regs, i, ee_addr_size));
1812
1813	/* DEC now has a specification but early board makers
1814	   just put the address in the first EEPROM locations. */
1815	/* This does  memcmp(eedata, eedata+16, 8) */
1816
1817#ifndef CONFIG_MIPS_COBALT
1818
1819	for (i = 0; i < 8; i ++)
1820		if (ee_data[i] != ee_data[16+i])
1821			sa_offset = 20;
1822
1823#endif
1824
1825	/* store MAC address */
1826	eth_hw_addr_set(de->dev, &ee_data[sa_offset]);
 
1827
1828	/* get offset of controller 0 info leaf.  ignore 2nd byte. */
1829	ofs = ee_data[SROMC0InfoLeaf];
1830	if (ofs >= (sizeof(ee_data) - sizeof(struct de_srom_info_leaf) - sizeof(struct de_srom_media_block)))
1831		goto bad_srom;
1832
1833	/* get pointer to info leaf */
1834	il = (struct de_srom_info_leaf *) &ee_data[ofs];
1835
1836	/* paranoia checks */
1837	if (il->n_blocks == 0)
1838		goto bad_srom;
1839	if ((sizeof(ee_data) - ofs) <
1840	    (sizeof(struct de_srom_info_leaf) + (sizeof(struct de_srom_media_block) * il->n_blocks)))
1841		goto bad_srom;
1842
1843	/* get default media type */
1844	switch (get_unaligned(&il->default_media)) {
1845	case 0x0001:  de->media_type = DE_MEDIA_BNC; break;
1846	case 0x0002:  de->media_type = DE_MEDIA_AUI; break;
1847	case 0x0204:  de->media_type = DE_MEDIA_TP_FD; break;
1848	default: de->media_type = DE_MEDIA_TP_AUTO; break;
1849	}
1850
1851	if (netif_msg_probe(de))
1852		pr_info("de%d: SROM leaf offset %u, default media %s\n",
1853		       de->board_idx, ofs, media_name[de->media_type]);
1854
1855	/* init SIA register values to defaults */
1856	for (i = 0; i < DE_MAX_MEDIA; i++) {
1857		de->media[i].type = DE_MEDIA_INVALID;
1858		de->media[i].csr13 = 0xffff;
1859		de->media[i].csr14 = 0xffff;
1860		de->media[i].csr15 = 0xffff;
1861	}
1862
1863	/* parse media blocks to see what medias are supported,
1864	 * and if any custom CSR values are provided
1865	 */
1866	bufp = ((void *)il) + sizeof(*il);
1867	for (i = 0; i < il->n_blocks; i++) {
1868		struct de_srom_media_block *ib = bufp;
1869		unsigned idx;
1870
1871		/* index based on media type in media block */
1872		switch(ib->opts & MediaBlockMask) {
1873		case 0: /* 10baseT */
1874			de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Half
1875					  | SUPPORTED_Autoneg;
1876			idx = DE_MEDIA_TP;
1877			de->media[DE_MEDIA_TP_AUTO].type = DE_MEDIA_TP_AUTO;
1878			break;
1879		case 1: /* BNC */
1880			de->media_supported |= SUPPORTED_BNC;
1881			idx = DE_MEDIA_BNC;
1882			break;
1883		case 2: /* AUI */
1884			de->media_supported |= SUPPORTED_AUI;
1885			idx = DE_MEDIA_AUI;
1886			break;
1887		case 4: /* 10baseT-FD */
1888			de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Full
1889					  | SUPPORTED_Autoneg;
1890			idx = DE_MEDIA_TP_FD;
1891			de->media[DE_MEDIA_TP_AUTO].type = DE_MEDIA_TP_AUTO;
1892			break;
1893		default:
1894			goto bad_srom;
1895		}
1896
1897		de->media[idx].type = idx;
1898
1899		if (netif_msg_probe(de))
1900			pr_info("de%d:   media block #%u: %s",
1901				de->board_idx, i,
1902				media_name[de->media[idx].type]);
1903
1904		bufp += sizeof (ib->opts);
1905
1906		if (ib->opts & MediaCustomCSRs) {
1907			de->media[idx].csr13 = get_unaligned(&ib->csr13);
1908			de->media[idx].csr14 = get_unaligned(&ib->csr14);
1909			de->media[idx].csr15 = get_unaligned(&ib->csr15);
1910			bufp += sizeof(ib->csr13) + sizeof(ib->csr14) +
1911				sizeof(ib->csr15);
1912
1913			if (netif_msg_probe(de))
1914				pr_cont(" (%x,%x,%x)\n",
1915					de->media[idx].csr13,
1916					de->media[idx].csr14,
1917					de->media[idx].csr15);
1918
1919		} else {
1920			if (netif_msg_probe(de))
1921				pr_cont("\n");
1922		}
1923
1924		if (bufp > ((void *)&ee_data[DE_EEPROM_SIZE - 3]))
1925			break;
1926	}
1927
1928	de->media_advertise = de->media_supported;
1929
1930fill_defaults:
1931	/* fill in defaults, for cases where custom CSRs not used */
1932	for (i = 0; i < DE_MAX_MEDIA; i++) {
1933		if (de->media[i].csr13 == 0xffff)
1934			de->media[i].csr13 = t21041_csr13[i];
1935		if (de->media[i].csr14 == 0xffff) {
1936			/* autonegotiation is broken at least on some chip
1937			   revisions - rev. 0x21 works, 0x11 does not */
1938			if (de->pdev->revision < 0x20)
1939				de->media[i].csr14 = t21041_csr14_brk[i];
1940			else
1941				de->media[i].csr14 = t21041_csr14[i];
1942		}
1943		if (de->media[i].csr15 == 0xffff)
1944			de->media[i].csr15 = t21041_csr15[i];
1945	}
1946
1947	de->ee_data = kmemdup(&ee_data[0], DE_EEPROM_SIZE, GFP_KERNEL);
1948
1949	return;
1950
1951bad_srom:
1952	/* for error cases, it's ok to assume we support all these */
1953	for (i = 0; i < DE_MAX_MEDIA; i++)
1954		de->media[i].type = i;
1955	de->media_supported =
1956		SUPPORTED_10baseT_Half |
1957		SUPPORTED_10baseT_Full |
1958		SUPPORTED_Autoneg |
1959		SUPPORTED_TP |
1960		SUPPORTED_AUI |
1961		SUPPORTED_BNC;
1962	goto fill_defaults;
1963}
1964
1965static const struct net_device_ops de_netdev_ops = {
1966	.ndo_open		= de_open,
1967	.ndo_stop		= de_close,
1968	.ndo_set_rx_mode	= de_set_rx_mode,
1969	.ndo_start_xmit		= de_start_xmit,
1970	.ndo_get_stats		= de_get_stats,
1971	.ndo_tx_timeout 	= de_tx_timeout,
1972	.ndo_set_mac_address 	= eth_mac_addr,
1973	.ndo_validate_addr	= eth_validate_addr,
1974};
1975
1976static int de_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1977{
1978	struct net_device *dev;
1979	struct de_private *de;
1980	int rc;
1981	void __iomem *regs;
1982	unsigned long pciaddr;
1983	static int board_idx = -1;
1984
1985	board_idx++;
1986
 
 
 
 
 
1987	/* allocate a new ethernet device structure, and fill in defaults */
1988	dev = alloc_etherdev(sizeof(struct de_private));
1989	if (!dev)
1990		return -ENOMEM;
1991
1992	dev->netdev_ops = &de_netdev_ops;
1993	SET_NETDEV_DEV(dev, &pdev->dev);
1994	dev->ethtool_ops = &de_ethtool_ops;
1995	dev->watchdog_timeo = TX_TIMEOUT;
1996
1997	de = netdev_priv(dev);
1998	de->de21040 = ent->driver_data == 0 ? 1 : 0;
1999	de->pdev = pdev;
2000	de->dev = dev;
2001	de->msg_enable = (debug < 0 ? DE_DEF_MSG_ENABLE : debug);
2002	de->board_idx = board_idx;
2003	spin_lock_init (&de->lock);
2004	timer_setup(&de->media_timer,
2005		    de->de21040 ? de21040_media_timer : de21041_media_timer,
2006		    0);
2007
2008	netif_carrier_off(dev);
2009
2010	/* wake up device, assign resources */
2011	rc = pci_enable_device(pdev);
2012	if (rc)
2013		goto err_out_free;
2014
2015	/* reserve PCI resources to ensure driver atomicity */
2016	rc = pci_request_regions(pdev, DRV_NAME);
2017	if (rc)
2018		goto err_out_disable;
2019
2020	/* check for invalid IRQ value */
2021	if (pdev->irq < 2) {
2022		rc = -EIO;
2023		pr_err("invalid irq (%d) for pci dev %s\n",
2024		       pdev->irq, pci_name(pdev));
2025		goto err_out_res;
2026	}
2027
2028	/* obtain and check validity of PCI I/O address */
2029	pciaddr = pci_resource_start(pdev, 1);
2030	if (!pciaddr) {
2031		rc = -EIO;
2032		pr_err("no MMIO resource for pci dev %s\n", pci_name(pdev));
2033		goto err_out_res;
2034	}
2035	if (pci_resource_len(pdev, 1) < DE_REGS_SIZE) {
2036		rc = -EIO;
2037		pr_err("MMIO resource (%llx) too small on pci dev %s\n",
2038		       (unsigned long long)pci_resource_len(pdev, 1),
2039		       pci_name(pdev));
2040		goto err_out_res;
2041	}
2042
2043	/* remap CSR registers */
2044	regs = ioremap(pciaddr, DE_REGS_SIZE);
2045	if (!regs) {
2046		rc = -EIO;
2047		pr_err("Cannot map PCI MMIO (%llx@%lx) on pci dev %s\n",
2048		       (unsigned long long)pci_resource_len(pdev, 1),
2049		       pciaddr, pci_name(pdev));
2050		goto err_out_res;
2051	}
2052	de->regs = regs;
2053
2054	de_adapter_wake(de);
2055
2056	/* make sure hardware is not running */
2057	rc = de_reset_mac(de);
2058	if (rc) {
2059		pr_err("Cannot reset MAC, pci dev %s\n", pci_name(pdev));
2060		goto err_out_iomap;
2061	}
2062
2063	/* get MAC address, initialize default media type and
2064	 * get list of supported media
2065	 */
2066	if (de->de21040) {
2067		de21040_get_mac_address(de);
2068		de21040_get_media_info(de);
2069	} else {
2070		de21041_get_srom_info(de);
2071	}
2072
2073	/* register new network interface with kernel */
2074	rc = register_netdev(dev);
2075	if (rc)
2076		goto err_out_iomap;
2077
2078	/* print info about board and interface just registered */
2079	netdev_info(dev, "%s at %p, %pM, IRQ %d\n",
2080		    de->de21040 ? "21040" : "21041",
2081		    regs, dev->dev_addr, pdev->irq);
2082
2083	pci_set_drvdata(pdev, dev);
2084
2085	/* enable busmastering */
2086	pci_set_master(pdev);
2087
2088	/* put adapter to sleep */
2089	de_adapter_sleep(de);
2090
2091	return 0;
2092
2093err_out_iomap:
2094	kfree(de->ee_data);
2095	iounmap(regs);
2096err_out_res:
2097	pci_release_regions(pdev);
2098err_out_disable:
2099	pci_disable_device(pdev);
2100err_out_free:
2101	free_netdev(dev);
2102	return rc;
2103}
2104
2105static void de_remove_one(struct pci_dev *pdev)
2106{
2107	struct net_device *dev = pci_get_drvdata(pdev);
2108	struct de_private *de = netdev_priv(dev);
2109
2110	BUG_ON(!dev);
2111	unregister_netdev(dev);
2112	kfree(de->ee_data);
2113	iounmap(de->regs);
2114	pci_release_regions(pdev);
2115	pci_disable_device(pdev);
2116	free_netdev(dev);
2117}
2118
2119static int __maybe_unused de_suspend(struct device *dev_d)
 
 
2120{
2121	struct pci_dev *pdev = to_pci_dev(dev_d);
2122	struct net_device *dev = pci_get_drvdata(pdev);
2123	struct de_private *de = netdev_priv(dev);
2124
2125	rtnl_lock();
2126	if (netif_running (dev)) {
2127		const int irq = pdev->irq;
2128
2129		del_timer_sync(&de->media_timer);
2130
2131		disable_irq(irq);
2132		spin_lock_irq(&de->lock);
2133
2134		de_stop_hw(de);
2135		netif_stop_queue(dev);
2136		netif_device_detach(dev);
2137		netif_carrier_off(dev);
2138
2139		spin_unlock_irq(&de->lock);
2140		enable_irq(irq);
2141
2142		/* Update the error counts. */
2143		__de_get_stats(de);
2144
2145		synchronize_irq(irq);
2146		de_clean_rings(de);
2147
2148		de_adapter_sleep(de);
 
2149	} else {
2150		netif_device_detach(dev);
2151	}
2152	rtnl_unlock();
2153	return 0;
2154}
2155
2156static int __maybe_unused de_resume(struct device *dev_d)
2157{
2158	struct pci_dev *pdev = to_pci_dev(dev_d);
2159	struct net_device *dev = pci_get_drvdata(pdev);
2160	struct de_private *de = netdev_priv(dev);
 
2161
2162	rtnl_lock();
2163	if (netif_device_present(dev))
2164		goto out;
2165	if (!netif_running(dev))
2166		goto out_attach;
 
 
 
 
2167	pci_set_master(pdev);
2168	de_init_rings(de);
2169	de_init_hw(de);
2170out_attach:
2171	netif_device_attach(dev);
2172out:
2173	rtnl_unlock();
2174	return 0;
2175}
2176
2177static SIMPLE_DEV_PM_OPS(de_pm_ops, de_suspend, de_resume);
2178
2179static void de_shutdown(struct pci_dev *pdev)
2180{
2181	struct net_device *dev = pci_get_drvdata(pdev);
2182
2183	rtnl_lock();
2184	dev_close(dev);
2185	rtnl_unlock();
2186}
2187
2188static struct pci_driver de_driver = {
2189	.name		= DRV_NAME,
2190	.id_table	= de_pci_tbl,
2191	.probe		= de_init_one,
2192	.remove		= de_remove_one,
2193	.shutdown	= de_shutdown,
2194	.driver.pm	= &de_pm_ops,
 
 
2195};
2196
2197module_pci_driver(de_driver);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
v4.17
   1/* de2104x.c: A Linux PCI Ethernet driver for Intel/Digital 21040/1 chips. */
   2/*
   3	Copyright 2001,2003 Jeff Garzik <jgarzik@pobox.com>
   4
   5	Copyright 1994, 1995 Digital Equipment Corporation.	    [de4x5.c]
   6	Written/copyright 1994-2001 by Donald Becker.		    [tulip.c]
   7
   8	This software may be used and distributed according to the terms of
   9	the GNU General Public License (GPL), incorporated herein by reference.
  10	Drivers based on or derived from this code fall under the GPL and must
  11	retain the authorship, copyright and license notice.  This file is not
  12	a complete program and may only be used when the entire operating
  13	system is licensed under the GPL.
  14
  15	See the file COPYING in this distribution for more information.
  16
  17	TODO, in rough priority order:
  18	* Support forcing media type with a module parameter,
  19	  like dl2k.c/sundance.c
  20	* Constants (module parms?) for Rx work limit
  21	* Complete reset on PciErr
  22	* Jumbo frames / dev->change_mtu
  23	* Adjust Rx FIFO threshold and Max Rx DMA burst on Rx FIFO error
  24	* Adjust Tx FIFO threshold and Max Tx DMA burst on Tx FIFO error
  25	* Implement Tx software interrupt mitigation via
  26	  Tx descriptor bit
  27
  28 */
  29
  30#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  31
  32#define DRV_NAME		"de2104x"
  33#define DRV_VERSION		"0.7"
  34#define DRV_RELDATE		"Mar 17, 2004"
  35
  36#include <linux/module.h>
  37#include <linux/kernel.h>
  38#include <linux/netdevice.h>
  39#include <linux/etherdevice.h>
  40#include <linux/init.h>
  41#include <linux/interrupt.h>
  42#include <linux/pci.h>
  43#include <linux/delay.h>
  44#include <linux/ethtool.h>
  45#include <linux/compiler.h>
  46#include <linux/rtnetlink.h>
  47#include <linux/crc32.h>
  48#include <linux/slab.h>
  49
  50#include <asm/io.h>
  51#include <asm/irq.h>
  52#include <linux/uaccess.h>
  53#include <asm/unaligned.h>
  54
  55/* These identify the driver base version and may not be removed. */
  56static char version[] =
  57"PCI Ethernet driver v" DRV_VERSION " (" DRV_RELDATE ")";
  58
  59MODULE_AUTHOR("Jeff Garzik <jgarzik@pobox.com>");
  60MODULE_DESCRIPTION("Intel/Digital 21040/1 series PCI Ethernet driver");
  61MODULE_LICENSE("GPL");
  62MODULE_VERSION(DRV_VERSION);
  63
  64static int debug = -1;
  65module_param (debug, int, 0);
  66MODULE_PARM_DESC (debug, "de2104x bitmapped message enable number");
  67
  68/* Set the copy breakpoint for the copy-only-tiny-buffer Rx structure. */
  69#if defined(__alpha__) || defined(__arm__) || defined(__hppa__) || \
  70        defined(CONFIG_SPARC) || defined(__ia64__) ||		   \
  71        defined(__sh__) || defined(__mips__)
  72static int rx_copybreak = 1518;
  73#else
  74static int rx_copybreak = 100;
  75#endif
  76module_param (rx_copybreak, int, 0);
  77MODULE_PARM_DESC (rx_copybreak, "de2104x Breakpoint at which Rx packets are copied");
  78
  79#define DE_DEF_MSG_ENABLE	(NETIF_MSG_DRV		| \
  80				 NETIF_MSG_PROBE 	| \
  81				 NETIF_MSG_LINK		| \
  82				 NETIF_MSG_IFDOWN	| \
  83				 NETIF_MSG_IFUP		| \
  84				 NETIF_MSG_RX_ERR	| \
  85				 NETIF_MSG_TX_ERR)
  86
  87/* Descriptor skip length in 32 bit longwords. */
  88#ifndef CONFIG_DE2104X_DSL
  89#define DSL			0
  90#else
  91#define DSL			CONFIG_DE2104X_DSL
  92#endif
  93
  94#define DE_RX_RING_SIZE		64
  95#define DE_TX_RING_SIZE		64
  96#define DE_RING_BYTES		\
  97		((sizeof(struct de_desc) * DE_RX_RING_SIZE) +	\
  98		(sizeof(struct de_desc) * DE_TX_RING_SIZE))
  99#define NEXT_TX(N)		(((N) + 1) & (DE_TX_RING_SIZE - 1))
 100#define NEXT_RX(N)		(((N) + 1) & (DE_RX_RING_SIZE - 1))
 101#define TX_BUFFS_AVAIL(CP)					\
 102	(((CP)->tx_tail <= (CP)->tx_head) ?			\
 103	  (CP)->tx_tail + (DE_TX_RING_SIZE - 1) - (CP)->tx_head :	\
 104	  (CP)->tx_tail - (CP)->tx_head - 1)
 105
 106#define PKT_BUF_SZ		1536	/* Size of each temporary Rx buffer.*/
 107#define RX_OFFSET		2
 108
 109#define DE_SETUP_SKB		((struct sk_buff *) 1)
 110#define DE_DUMMY_SKB		((struct sk_buff *) 2)
 111#define DE_SETUP_FRAME_WORDS	96
 112#define DE_EEPROM_WORDS		256
 113#define DE_EEPROM_SIZE		(DE_EEPROM_WORDS * sizeof(u16))
 114#define DE_MAX_MEDIA		5
 115
 116#define DE_MEDIA_TP_AUTO	0
 117#define DE_MEDIA_BNC		1
 118#define DE_MEDIA_AUI		2
 119#define DE_MEDIA_TP		3
 120#define DE_MEDIA_TP_FD		4
 121#define DE_MEDIA_INVALID	DE_MAX_MEDIA
 122#define DE_MEDIA_FIRST		0
 123#define DE_MEDIA_LAST		(DE_MAX_MEDIA - 1)
 124#define DE_AUI_BNC		(SUPPORTED_AUI | SUPPORTED_BNC)
 125
 126#define DE_TIMER_LINK		(60 * HZ)
 127#define DE_TIMER_NO_LINK	(5 * HZ)
 128
 129#define DE_NUM_REGS		16
 130#define DE_REGS_SIZE		(DE_NUM_REGS * sizeof(u32))
 131#define DE_REGS_VER		1
 132
 133/* Time in jiffies before concluding the transmitter is hung. */
 134#define TX_TIMEOUT		(6*HZ)
 135
 136/* This is a mysterious value that can be written to CSR11 in the 21040 (only)
 137   to support a pre-NWay full-duplex signaling mechanism using short frames.
 138   No one knows what it should be, but if left at its default value some
 139   10base2(!) packets trigger a full-duplex-request interrupt. */
 140#define FULL_DUPLEX_MAGIC	0x6969
 141
 142enum {
 143	/* NIC registers */
 144	BusMode			= 0x00,
 145	TxPoll			= 0x08,
 146	RxPoll			= 0x10,
 147	RxRingAddr		= 0x18,
 148	TxRingAddr		= 0x20,
 149	MacStatus		= 0x28,
 150	MacMode			= 0x30,
 151	IntrMask		= 0x38,
 152	RxMissed		= 0x40,
 153	ROMCmd			= 0x48,
 154	CSR11			= 0x58,
 155	SIAStatus		= 0x60,
 156	CSR13			= 0x68,
 157	CSR14			= 0x70,
 158	CSR15			= 0x78,
 159	PCIPM			= 0x40,
 160
 161	/* BusMode bits */
 162	CmdReset		= (1 << 0),
 163	CacheAlign16		= 0x00008000,
 164	BurstLen4		= 0x00000400,
 165	DescSkipLen		= (DSL << 2),
 166
 167	/* Rx/TxPoll bits */
 168	NormalTxPoll		= (1 << 0),
 169	NormalRxPoll		= (1 << 0),
 170
 171	/* Tx/Rx descriptor status bits */
 172	DescOwn			= (1 << 31),
 173	RxError			= (1 << 15),
 174	RxErrLong		= (1 << 7),
 175	RxErrCRC		= (1 << 1),
 176	RxErrFIFO		= (1 << 0),
 177	RxErrRunt		= (1 << 11),
 178	RxErrFrame		= (1 << 14),
 179	RingEnd			= (1 << 25),
 180	FirstFrag		= (1 << 29),
 181	LastFrag		= (1 << 30),
 182	TxError			= (1 << 15),
 183	TxFIFOUnder		= (1 << 1),
 184	TxLinkFail		= (1 << 2) | (1 << 10) | (1 << 11),
 185	TxMaxCol		= (1 << 8),
 186	TxOWC			= (1 << 9),
 187	TxJabber		= (1 << 14),
 188	SetupFrame		= (1 << 27),
 189	TxSwInt			= (1 << 31),
 190
 191	/* MacStatus bits */
 192	IntrOK			= (1 << 16),
 193	IntrErr			= (1 << 15),
 194	RxIntr			= (1 << 6),
 195	RxEmpty			= (1 << 7),
 196	TxIntr			= (1 << 0),
 197	TxEmpty			= (1 << 2),
 198	PciErr			= (1 << 13),
 199	TxState			= (1 << 22) | (1 << 21) | (1 << 20),
 200	RxState			= (1 << 19) | (1 << 18) | (1 << 17),
 201	LinkFail		= (1 << 12),
 202	LinkPass		= (1 << 4),
 203	RxStopped		= (1 << 8),
 204	TxStopped		= (1 << 1),
 205
 206	/* MacMode bits */
 207	TxEnable		= (1 << 13),
 208	RxEnable		= (1 << 1),
 209	RxTx			= TxEnable | RxEnable,
 210	FullDuplex		= (1 << 9),
 211	AcceptAllMulticast	= (1 << 7),
 212	AcceptAllPhys		= (1 << 6),
 213	BOCnt			= (1 << 5),
 214	MacModeClear		= (1<<12) | (1<<11) | (1<<10) | (1<<8) | (1<<3) |
 215				  RxTx | BOCnt | AcceptAllPhys | AcceptAllMulticast,
 216
 217	/* ROMCmd bits */
 218	EE_SHIFT_CLK		= 0x02,	/* EEPROM shift clock. */
 219	EE_CS			= 0x01,	/* EEPROM chip select. */
 220	EE_DATA_WRITE		= 0x04,	/* Data from the Tulip to EEPROM. */
 221	EE_WRITE_0		= 0x01,
 222	EE_WRITE_1		= 0x05,
 223	EE_DATA_READ		= 0x08,	/* Data from the EEPROM chip. */
 224	EE_ENB			= (0x4800 | EE_CS),
 225
 226	/* The EEPROM commands include the alway-set leading bit. */
 227	EE_READ_CMD		= 6,
 228
 229	/* RxMissed bits */
 230	RxMissedOver		= (1 << 16),
 231	RxMissedMask		= 0xffff,
 232
 233	/* SROM-related bits */
 234	SROMC0InfoLeaf		= 27,
 235	MediaBlockMask		= 0x3f,
 236	MediaCustomCSRs		= (1 << 6),
 237
 238	/* PCIPM bits */
 239	PM_Sleep		= (1 << 31),
 240	PM_Snooze		= (1 << 30),
 241	PM_Mask			= PM_Sleep | PM_Snooze,
 242
 243	/* SIAStatus bits */
 244	NWayState		= (1 << 14) | (1 << 13) | (1 << 12),
 245	NWayRestart		= (1 << 12),
 246	NonselPortActive	= (1 << 9),
 247	SelPortActive		= (1 << 8),
 248	LinkFailStatus		= (1 << 2),
 249	NetCxnErr		= (1 << 1),
 250};
 251
 252static const u32 de_intr_mask =
 253	IntrOK | IntrErr | RxIntr | RxEmpty | TxIntr | TxEmpty |
 254	LinkPass | LinkFail | PciErr;
 255
 256/*
 257 * Set the programmable burst length to 4 longwords for all:
 258 * DMA errors result without these values. Cache align 16 long.
 259 */
 260static const u32 de_bus_mode = CacheAlign16 | BurstLen4 | DescSkipLen;
 261
 262struct de_srom_media_block {
 263	u8			opts;
 264	u16			csr13;
 265	u16			csr14;
 266	u16			csr15;
 267} __packed;
 268
 269struct de_srom_info_leaf {
 270	u16			default_media;
 271	u8			n_blocks;
 272	u8			unused;
 273} __packed;
 274
 275struct de_desc {
 276	__le32			opts1;
 277	__le32			opts2;
 278	__le32			addr1;
 279	__le32			addr2;
 280#if DSL
 281	__le32			skip[DSL];
 282#endif
 283};
 284
 285struct media_info {
 286	u16			type;	/* DE_MEDIA_xxx */
 287	u16			csr13;
 288	u16			csr14;
 289	u16			csr15;
 290};
 291
 292struct ring_info {
 293	struct sk_buff		*skb;
 294	dma_addr_t		mapping;
 295};
 296
 297struct de_private {
 298	unsigned		tx_head;
 299	unsigned		tx_tail;
 300	unsigned		rx_tail;
 301
 302	void			__iomem *regs;
 303	struct net_device	*dev;
 304	spinlock_t		lock;
 305
 306	struct de_desc		*rx_ring;
 307	struct de_desc		*tx_ring;
 308	struct ring_info	tx_skb[DE_TX_RING_SIZE];
 309	struct ring_info	rx_skb[DE_RX_RING_SIZE];
 310	unsigned		rx_buf_sz;
 311	dma_addr_t		ring_dma;
 312
 313	u32			msg_enable;
 314
 315	struct pci_dev		*pdev;
 316
 317	u16			setup_frame[DE_SETUP_FRAME_WORDS];
 318
 319	u32			media_type;
 320	u32			media_supported;
 321	u32			media_advertise;
 322	struct media_info	media[DE_MAX_MEDIA];
 323	struct timer_list	media_timer;
 324
 325	u8			*ee_data;
 326	unsigned		board_idx;
 327	unsigned		de21040 : 1;
 328	unsigned		media_lock : 1;
 329};
 330
 331
 332static void de_set_rx_mode (struct net_device *dev);
 333static void de_tx (struct de_private *de);
 334static void de_clean_rings (struct de_private *de);
 335static void de_media_interrupt (struct de_private *de, u32 status);
 336static void de21040_media_timer (struct timer_list *t);
 337static void de21041_media_timer (struct timer_list *t);
 338static unsigned int de_ok_to_advertise (struct de_private *de, u32 new_media);
 339
 340
 341static const struct pci_device_id de_pci_tbl[] = {
 342	{ PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP,
 343	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
 344	{ PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_PLUS,
 345	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },
 346	{ },
 347};
 348MODULE_DEVICE_TABLE(pci, de_pci_tbl);
 349
 350static const char * const media_name[DE_MAX_MEDIA] = {
 351	"10baseT auto",
 352	"BNC",
 353	"AUI",
 354	"10baseT-HD",
 355	"10baseT-FD"
 356};
 357
 358/* 21040 transceiver register settings:
 359 * TP AUTO(unused), BNC(unused), AUI, TP, TP FD*/
 360static u16 t21040_csr13[] = { 0, 0, 0x8F09, 0x8F01, 0x8F01, };
 361static u16 t21040_csr14[] = { 0, 0, 0x0705, 0xFFFF, 0xFFFD, };
 362static u16 t21040_csr15[] = { 0, 0, 0x0006, 0x0000, 0x0000, };
 363
 364/* 21041 transceiver register settings: TP AUTO, BNC, AUI, TP, TP FD*/
 365static u16 t21041_csr13[] = { 0xEF01, 0xEF09, 0xEF09, 0xEF01, 0xEF09, };
 366static u16 t21041_csr14[] = { 0xFFFF, 0xF7FD, 0xF7FD, 0x7F3F, 0x7F3D, };
 367/* If on-chip autonegotiation is broken, use half-duplex (FF3F) instead */
 368static u16 t21041_csr14_brk[] = { 0xFF3F, 0xF7FD, 0xF7FD, 0x7F3F, 0x7F3D, };
 369static u16 t21041_csr15[] = { 0x0008, 0x0006, 0x000E, 0x0008, 0x0008, };
 370
 371
 372#define dr32(reg)	ioread32(de->regs + (reg))
 373#define dw32(reg, val)	iowrite32((val), de->regs + (reg))
 374
 375
 376static void de_rx_err_acct (struct de_private *de, unsigned rx_tail,
 377			    u32 status, u32 len)
 378{
 379	netif_dbg(de, rx_err, de->dev,
 380		  "rx err, slot %d status 0x%x len %d\n",
 381		  rx_tail, status, len);
 382
 383	if ((status & 0x38000300) != 0x0300) {
 384		/* Ingore earlier buffers. */
 385		if ((status & 0xffff) != 0x7fff) {
 386			netif_warn(de, rx_err, de->dev,
 387				   "Oversized Ethernet frame spanned multiple buffers, status %08x!\n",
 388				   status);
 389			de->dev->stats.rx_length_errors++;
 390		}
 391	} else if (status & RxError) {
 392		/* There was a fatal error. */
 393		de->dev->stats.rx_errors++; /* end of a packet.*/
 394		if (status & 0x0890) de->dev->stats.rx_length_errors++;
 395		if (status & RxErrCRC) de->dev->stats.rx_crc_errors++;
 396		if (status & RxErrFIFO) de->dev->stats.rx_fifo_errors++;
 397	}
 398}
 399
 400static void de_rx (struct de_private *de)
 401{
 402	unsigned rx_tail = de->rx_tail;
 403	unsigned rx_work = DE_RX_RING_SIZE;
 404	unsigned drop = 0;
 405	int rc;
 406
 407	while (--rx_work) {
 408		u32 status, len;
 409		dma_addr_t mapping;
 410		struct sk_buff *skb, *copy_skb;
 411		unsigned copying_skb, buflen;
 412
 413		skb = de->rx_skb[rx_tail].skb;
 414		BUG_ON(!skb);
 415		rmb();
 416		status = le32_to_cpu(de->rx_ring[rx_tail].opts1);
 417		if (status & DescOwn)
 418			break;
 419
 420		len = ((status >> 16) & 0x7ff) - 4;
 
 
 
 421		mapping = de->rx_skb[rx_tail].mapping;
 422
 423		if (unlikely(drop)) {
 424			de->dev->stats.rx_dropped++;
 425			goto rx_next;
 426		}
 427
 428		if (unlikely((status & 0x38008300) != 0x0300)) {
 429			de_rx_err_acct(de, rx_tail, status, len);
 430			goto rx_next;
 431		}
 432
 433		copying_skb = (len <= rx_copybreak);
 434
 435		netif_dbg(de, rx_status, de->dev,
 436			  "rx slot %d status 0x%x len %d copying? %d\n",
 437			  rx_tail, status, len, copying_skb);
 438
 439		buflen = copying_skb ? (len + RX_OFFSET) : de->rx_buf_sz;
 440		copy_skb = netdev_alloc_skb(de->dev, buflen);
 441		if (unlikely(!copy_skb)) {
 442			de->dev->stats.rx_dropped++;
 443			drop = 1;
 444			rx_work = 100;
 445			goto rx_next;
 446		}
 447
 448		if (!copying_skb) {
 449			pci_unmap_single(de->pdev, mapping,
 450					 buflen, PCI_DMA_FROMDEVICE);
 451			skb_put(skb, len);
 452
 453			mapping =
 454			de->rx_skb[rx_tail].mapping =
 455				pci_map_single(de->pdev, copy_skb->data,
 456					       buflen, PCI_DMA_FROMDEVICE);
 457			de->rx_skb[rx_tail].skb = copy_skb;
 458		} else {
 459			pci_dma_sync_single_for_cpu(de->pdev, mapping, len, PCI_DMA_FROMDEVICE);
 
 460			skb_reserve(copy_skb, RX_OFFSET);
 461			skb_copy_from_linear_data(skb, skb_put(copy_skb, len),
 462						  len);
 463			pci_dma_sync_single_for_device(de->pdev, mapping, len, PCI_DMA_FROMDEVICE);
 
 464
 465			/* We'll reuse the original ring buffer. */
 466			skb = copy_skb;
 467		}
 468
 469		skb->protocol = eth_type_trans (skb, de->dev);
 470
 471		de->dev->stats.rx_packets++;
 472		de->dev->stats.rx_bytes += skb->len;
 473		rc = netif_rx (skb);
 474		if (rc == NET_RX_DROP)
 475			drop = 1;
 476
 477rx_next:
 478		if (rx_tail == (DE_RX_RING_SIZE - 1))
 479			de->rx_ring[rx_tail].opts2 =
 480				cpu_to_le32(RingEnd | de->rx_buf_sz);
 481		else
 482			de->rx_ring[rx_tail].opts2 = cpu_to_le32(de->rx_buf_sz);
 483		de->rx_ring[rx_tail].addr1 = cpu_to_le32(mapping);
 484		wmb();
 485		de->rx_ring[rx_tail].opts1 = cpu_to_le32(DescOwn);
 486		rx_tail = NEXT_RX(rx_tail);
 487	}
 488
 489	if (!rx_work)
 490		netdev_warn(de->dev, "rx work limit reached\n");
 491
 492	de->rx_tail = rx_tail;
 493}
 494
 495static irqreturn_t de_interrupt (int irq, void *dev_instance)
 496{
 497	struct net_device *dev = dev_instance;
 498	struct de_private *de = netdev_priv(dev);
 499	u32 status;
 500
 501	status = dr32(MacStatus);
 502	if ((!(status & (IntrOK|IntrErr))) || (status == 0xFFFF))
 503		return IRQ_NONE;
 504
 505	netif_dbg(de, intr, dev, "intr, status %08x mode %08x desc %u/%u/%u\n",
 506		  status, dr32(MacMode),
 507		  de->rx_tail, de->tx_head, de->tx_tail);
 508
 509	dw32(MacStatus, status);
 510
 511	if (status & (RxIntr | RxEmpty)) {
 512		de_rx(de);
 513		if (status & RxEmpty)
 514			dw32(RxPoll, NormalRxPoll);
 515	}
 516
 517	spin_lock(&de->lock);
 518
 519	if (status & (TxIntr | TxEmpty))
 520		de_tx(de);
 521
 522	if (status & (LinkPass | LinkFail))
 523		de_media_interrupt(de, status);
 524
 525	spin_unlock(&de->lock);
 526
 527	if (status & PciErr) {
 528		u16 pci_status;
 529
 530		pci_read_config_word(de->pdev, PCI_STATUS, &pci_status);
 531		pci_write_config_word(de->pdev, PCI_STATUS, pci_status);
 532		netdev_err(de->dev,
 533			   "PCI bus error, status=%08x, PCI status=%04x\n",
 534			   status, pci_status);
 535	}
 536
 537	return IRQ_HANDLED;
 538}
 539
 540static void de_tx (struct de_private *de)
 541{
 542	unsigned tx_head = de->tx_head;
 543	unsigned tx_tail = de->tx_tail;
 544
 545	while (tx_tail != tx_head) {
 546		struct sk_buff *skb;
 547		u32 status;
 548
 549		rmb();
 550		status = le32_to_cpu(de->tx_ring[tx_tail].opts1);
 551		if (status & DescOwn)
 552			break;
 553
 554		skb = de->tx_skb[tx_tail].skb;
 555		BUG_ON(!skb);
 556		if (unlikely(skb == DE_DUMMY_SKB))
 557			goto next;
 558
 559		if (unlikely(skb == DE_SETUP_SKB)) {
 560			pci_unmap_single(de->pdev, de->tx_skb[tx_tail].mapping,
 561					 sizeof(de->setup_frame), PCI_DMA_TODEVICE);
 
 
 562			goto next;
 563		}
 564
 565		pci_unmap_single(de->pdev, de->tx_skb[tx_tail].mapping,
 566				 skb->len, PCI_DMA_TODEVICE);
 567
 568		if (status & LastFrag) {
 569			if (status & TxError) {
 570				netif_dbg(de, tx_err, de->dev,
 571					  "tx err, status 0x%x\n",
 572					  status);
 573				de->dev->stats.tx_errors++;
 574				if (status & TxOWC)
 575					de->dev->stats.tx_window_errors++;
 576				if (status & TxMaxCol)
 577					de->dev->stats.tx_aborted_errors++;
 578				if (status & TxLinkFail)
 579					de->dev->stats.tx_carrier_errors++;
 580				if (status & TxFIFOUnder)
 581					de->dev->stats.tx_fifo_errors++;
 582			} else {
 583				de->dev->stats.tx_packets++;
 584				de->dev->stats.tx_bytes += skb->len;
 585				netif_dbg(de, tx_done, de->dev,
 586					  "tx done, slot %d\n", tx_tail);
 587			}
 588			dev_kfree_skb_irq(skb);
 589		}
 590
 591next:
 592		de->tx_skb[tx_tail].skb = NULL;
 593
 594		tx_tail = NEXT_TX(tx_tail);
 595	}
 596
 597	de->tx_tail = tx_tail;
 598
 599	if (netif_queue_stopped(de->dev) && (TX_BUFFS_AVAIL(de) > (DE_TX_RING_SIZE / 4)))
 600		netif_wake_queue(de->dev);
 601}
 602
 603static netdev_tx_t de_start_xmit (struct sk_buff *skb,
 604					struct net_device *dev)
 605{
 606	struct de_private *de = netdev_priv(dev);
 607	unsigned int entry, tx_free;
 608	u32 mapping, len, flags = FirstFrag | LastFrag;
 609	struct de_desc *txd;
 610
 611	spin_lock_irq(&de->lock);
 612
 613	tx_free = TX_BUFFS_AVAIL(de);
 614	if (tx_free == 0) {
 615		netif_stop_queue(dev);
 616		spin_unlock_irq(&de->lock);
 617		return NETDEV_TX_BUSY;
 618	}
 619	tx_free--;
 620
 621	entry = de->tx_head;
 622
 623	txd = &de->tx_ring[entry];
 624
 625	len = skb->len;
 626	mapping = pci_map_single(de->pdev, skb->data, len, PCI_DMA_TODEVICE);
 
 627	if (entry == (DE_TX_RING_SIZE - 1))
 628		flags |= RingEnd;
 629	if (!tx_free || (tx_free == (DE_TX_RING_SIZE / 2)))
 630		flags |= TxSwInt;
 631	flags |= len;
 632	txd->opts2 = cpu_to_le32(flags);
 633	txd->addr1 = cpu_to_le32(mapping);
 634
 635	de->tx_skb[entry].skb = skb;
 636	de->tx_skb[entry].mapping = mapping;
 637	wmb();
 638
 639	txd->opts1 = cpu_to_le32(DescOwn);
 640	wmb();
 641
 642	de->tx_head = NEXT_TX(entry);
 643	netif_dbg(de, tx_queued, dev, "tx queued, slot %d, skblen %d\n",
 644		  entry, skb->len);
 645
 646	if (tx_free == 0)
 647		netif_stop_queue(dev);
 648
 649	spin_unlock_irq(&de->lock);
 650
 651	/* Trigger an immediate transmit demand. */
 652	dw32(TxPoll, NormalTxPoll);
 653
 654	return NETDEV_TX_OK;
 655}
 656
 657/* Set or clear the multicast filter for this adaptor.
 658   Note that we only use exclusion around actually queueing the
 659   new frame, not around filling de->setup_frame.  This is non-deterministic
 660   when re-entered but still correct. */
 661
 662static void build_setup_frame_hash(u16 *setup_frm, struct net_device *dev)
 663{
 664	struct de_private *de = netdev_priv(dev);
 665	u16 hash_table[32];
 666	struct netdev_hw_addr *ha;
 
 667	int i;
 668	u16 *eaddrs;
 669
 670	memset(hash_table, 0, sizeof(hash_table));
 671	__set_bit_le(255, hash_table);			/* Broadcast entry */
 672	/* This should work on big-endian machines as well. */
 673	netdev_for_each_mc_addr(ha, dev) {
 674		int index = ether_crc_le(ETH_ALEN, ha->addr) & 0x1ff;
 675
 676		__set_bit_le(index, hash_table);
 677	}
 678
 679	for (i = 0; i < 32; i++) {
 680		*setup_frm++ = hash_table[i];
 681		*setup_frm++ = hash_table[i];
 682	}
 683	setup_frm = &de->setup_frame[13*6];
 684
 685	/* Fill the final entry with our physical address. */
 686	eaddrs = (u16 *)dev->dev_addr;
 687	*setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
 688	*setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
 689	*setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
 690}
 691
 692static void build_setup_frame_perfect(u16 *setup_frm, struct net_device *dev)
 693{
 694	struct de_private *de = netdev_priv(dev);
 695	struct netdev_hw_addr *ha;
 696	u16 *eaddrs;
 697
 698	/* We have <= 14 addresses so we can use the wonderful
 699	   16 address perfect filtering of the Tulip. */
 700	netdev_for_each_mc_addr(ha, dev) {
 701		eaddrs = (u16 *) ha->addr;
 702		*setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
 703		*setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
 704		*setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
 705	}
 706	/* Fill the unused entries with the broadcast address. */
 707	memset(setup_frm, 0xff, (15 - netdev_mc_count(dev)) * 12);
 708	setup_frm = &de->setup_frame[15*6];
 709
 710	/* Fill the final entry with our physical address. */
 711	eaddrs = (u16 *)dev->dev_addr;
 712	*setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
 713	*setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
 714	*setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
 715}
 716
 717
 718static void __de_set_rx_mode (struct net_device *dev)
 719{
 720	struct de_private *de = netdev_priv(dev);
 721	u32 macmode;
 722	unsigned int entry;
 723	u32 mapping;
 724	struct de_desc *txd;
 725	struct de_desc *dummy_txd = NULL;
 726
 727	macmode = dr32(MacMode) & ~(AcceptAllMulticast | AcceptAllPhys);
 728
 729	if (dev->flags & IFF_PROMISC) {	/* Set promiscuous. */
 730		macmode |= AcceptAllMulticast | AcceptAllPhys;
 731		goto out;
 732	}
 733
 734	if ((netdev_mc_count(dev) > 1000) || (dev->flags & IFF_ALLMULTI)) {
 735		/* Too many to filter well -- accept all multicasts. */
 736		macmode |= AcceptAllMulticast;
 737		goto out;
 738	}
 739
 740	/* Note that only the low-address shortword of setup_frame is valid!
 741	   The values are doubled for big-endian architectures. */
 742	if (netdev_mc_count(dev) > 14)	/* Must use a multicast hash table. */
 743		build_setup_frame_hash (de->setup_frame, dev);
 744	else
 745		build_setup_frame_perfect (de->setup_frame, dev);
 746
 747	/*
 748	 * Now add this frame to the Tx list.
 749	 */
 750
 751	entry = de->tx_head;
 752
 753	/* Avoid a chip errata by prefixing a dummy entry. */
 754	if (entry != 0) {
 755		de->tx_skb[entry].skb = DE_DUMMY_SKB;
 756
 757		dummy_txd = &de->tx_ring[entry];
 758		dummy_txd->opts2 = (entry == (DE_TX_RING_SIZE - 1)) ?
 759				   cpu_to_le32(RingEnd) : 0;
 760		dummy_txd->addr1 = 0;
 761
 762		/* Must set DescOwned later to avoid race with chip */
 763
 764		entry = NEXT_TX(entry);
 765	}
 766
 767	de->tx_skb[entry].skb = DE_SETUP_SKB;
 768	de->tx_skb[entry].mapping = mapping =
 769	    pci_map_single (de->pdev, de->setup_frame,
 770			    sizeof (de->setup_frame), PCI_DMA_TODEVICE);
 771
 772	/* Put the setup frame on the Tx list. */
 773	txd = &de->tx_ring[entry];
 774	if (entry == (DE_TX_RING_SIZE - 1))
 775		txd->opts2 = cpu_to_le32(SetupFrame | RingEnd | sizeof (de->setup_frame));
 776	else
 777		txd->opts2 = cpu_to_le32(SetupFrame | sizeof (de->setup_frame));
 778	txd->addr1 = cpu_to_le32(mapping);
 779	wmb();
 780
 781	txd->opts1 = cpu_to_le32(DescOwn);
 782	wmb();
 783
 784	if (dummy_txd) {
 785		dummy_txd->opts1 = cpu_to_le32(DescOwn);
 786		wmb();
 787	}
 788
 789	de->tx_head = NEXT_TX(entry);
 790
 791	if (TX_BUFFS_AVAIL(de) == 0)
 792		netif_stop_queue(dev);
 793
 794	/* Trigger an immediate transmit demand. */
 795	dw32(TxPoll, NormalTxPoll);
 796
 797out:
 798	if (macmode != dr32(MacMode))
 799		dw32(MacMode, macmode);
 800}
 801
 802static void de_set_rx_mode (struct net_device *dev)
 803{
 804	unsigned long flags;
 805	struct de_private *de = netdev_priv(dev);
 806
 807	spin_lock_irqsave (&de->lock, flags);
 808	__de_set_rx_mode(dev);
 809	spin_unlock_irqrestore (&de->lock, flags);
 810}
 811
 812static inline void de_rx_missed(struct de_private *de, u32 rx_missed)
 813{
 814	if (unlikely(rx_missed & RxMissedOver))
 815		de->dev->stats.rx_missed_errors += RxMissedMask;
 816	else
 817		de->dev->stats.rx_missed_errors += (rx_missed & RxMissedMask);
 818}
 819
 820static void __de_get_stats(struct de_private *de)
 821{
 822	u32 tmp = dr32(RxMissed); /* self-clearing */
 823
 824	de_rx_missed(de, tmp);
 825}
 826
 827static struct net_device_stats *de_get_stats(struct net_device *dev)
 828{
 829	struct de_private *de = netdev_priv(dev);
 830
 831	/* The chip only need report frame silently dropped. */
 832	spin_lock_irq(&de->lock);
 833 	if (netif_running(dev) && netif_device_present(dev))
 834 		__de_get_stats(de);
 835	spin_unlock_irq(&de->lock);
 836
 837	return &dev->stats;
 838}
 839
 840static inline int de_is_running (struct de_private *de)
 841{
 842	return (dr32(MacStatus) & (RxState | TxState)) ? 1 : 0;
 843}
 844
 845static void de_stop_rxtx (struct de_private *de)
 846{
 847	u32 macmode;
 848	unsigned int i = 1300/100;
 849
 850	macmode = dr32(MacMode);
 851	if (macmode & RxTx) {
 852		dw32(MacMode, macmode & ~RxTx);
 853		dr32(MacMode);
 854	}
 855
 856	/* wait until in-flight frame completes.
 857	 * Max time @ 10BT: 1500*8b/10Mbps == 1200us (+ 100us margin)
 858	 * Typically expect this loop to end in < 50 us on 100BT.
 859	 */
 860	while (--i) {
 861		if (!de_is_running(de))
 862			return;
 863		udelay(100);
 864	}
 865
 866	netdev_warn(de->dev, "timeout expired, stopping DMA\n");
 867}
 868
 869static inline void de_start_rxtx (struct de_private *de)
 870{
 871	u32 macmode;
 872
 873	macmode = dr32(MacMode);
 874	if ((macmode & RxTx) != RxTx) {
 875		dw32(MacMode, macmode | RxTx);
 876		dr32(MacMode);
 877	}
 878}
 879
 880static void de_stop_hw (struct de_private *de)
 881{
 882
 883	udelay(5);
 884	dw32(IntrMask, 0);
 885
 886	de_stop_rxtx(de);
 887
 888	dw32(MacStatus, dr32(MacStatus));
 889
 890	udelay(10);
 891
 892	de->rx_tail = 0;
 893	de->tx_head = de->tx_tail = 0;
 894}
 895
 896static void de_link_up(struct de_private *de)
 897{
 898	if (!netif_carrier_ok(de->dev)) {
 899		netif_carrier_on(de->dev);
 900		netif_info(de, link, de->dev, "link up, media %s\n",
 901			   media_name[de->media_type]);
 902	}
 903}
 904
 905static void de_link_down(struct de_private *de)
 906{
 907	if (netif_carrier_ok(de->dev)) {
 908		netif_carrier_off(de->dev);
 909		netif_info(de, link, de->dev, "link down\n");
 910	}
 911}
 912
 913static void de_set_media (struct de_private *de)
 914{
 915	unsigned media = de->media_type;
 916	u32 macmode = dr32(MacMode);
 917
 918	if (de_is_running(de))
 919		netdev_warn(de->dev, "chip is running while changing media!\n");
 920
 921	if (de->de21040)
 922		dw32(CSR11, FULL_DUPLEX_MAGIC);
 923	dw32(CSR13, 0); /* Reset phy */
 924	dw32(CSR14, de->media[media].csr14);
 925	dw32(CSR15, de->media[media].csr15);
 926	dw32(CSR13, de->media[media].csr13);
 927
 928	/* must delay 10ms before writing to other registers,
 929	 * especially CSR6
 930	 */
 931	mdelay(10);
 932
 933	if (media == DE_MEDIA_TP_FD)
 934		macmode |= FullDuplex;
 935	else
 936		macmode &= ~FullDuplex;
 937
 938	netif_info(de, link, de->dev, "set link %s\n", media_name[media]);
 939	netif_info(de, hw, de->dev, "mode 0x%x, sia 0x%x,0x%x,0x%x,0x%x\n",
 940		   dr32(MacMode), dr32(SIAStatus),
 941		   dr32(CSR13), dr32(CSR14), dr32(CSR15));
 942	netif_info(de, hw, de->dev, "set mode 0x%x, set sia 0x%x,0x%x,0x%x\n",
 943		   macmode, de->media[media].csr13,
 944		   de->media[media].csr14, de->media[media].csr15);
 945	if (macmode != dr32(MacMode))
 946		dw32(MacMode, macmode);
 947}
 948
 949static void de_next_media (struct de_private *de, const u32 *media,
 950			   unsigned int n_media)
 951{
 952	unsigned int i;
 953
 954	for (i = 0; i < n_media; i++) {
 955		if (de_ok_to_advertise(de, media[i])) {
 956			de->media_type = media[i];
 957			return;
 958		}
 959	}
 960}
 961
 962static void de21040_media_timer (struct timer_list *t)
 963{
 964	struct de_private *de = from_timer(de, t, media_timer);
 965	struct net_device *dev = de->dev;
 966	u32 status = dr32(SIAStatus);
 967	unsigned int carrier;
 968	unsigned long flags;
 969
 970	carrier = (status & NetCxnErr) ? 0 : 1;
 971
 972	if (carrier) {
 973		if (de->media_type != DE_MEDIA_AUI && (status & LinkFailStatus))
 974			goto no_link_yet;
 975
 976		de->media_timer.expires = jiffies + DE_TIMER_LINK;
 977		add_timer(&de->media_timer);
 978		if (!netif_carrier_ok(dev))
 979			de_link_up(de);
 980		else
 981			netif_info(de, timer, dev, "%s link ok, status %x\n",
 982				   media_name[de->media_type], status);
 983		return;
 984	}
 985
 986	de_link_down(de);
 987
 988	if (de->media_lock)
 989		return;
 990
 991	if (de->media_type == DE_MEDIA_AUI) {
 992		static const u32 next_state = DE_MEDIA_TP;
 993		de_next_media(de, &next_state, 1);
 994	} else {
 995		static const u32 next_state = DE_MEDIA_AUI;
 996		de_next_media(de, &next_state, 1);
 997	}
 998
 999	spin_lock_irqsave(&de->lock, flags);
1000	de_stop_rxtx(de);
1001	spin_unlock_irqrestore(&de->lock, flags);
1002	de_set_media(de);
1003	de_start_rxtx(de);
1004
1005no_link_yet:
1006	de->media_timer.expires = jiffies + DE_TIMER_NO_LINK;
1007	add_timer(&de->media_timer);
1008
1009	netif_info(de, timer, dev, "no link, trying media %s, status %x\n",
1010		   media_name[de->media_type], status);
1011}
1012
1013static unsigned int de_ok_to_advertise (struct de_private *de, u32 new_media)
1014{
1015	switch (new_media) {
1016	case DE_MEDIA_TP_AUTO:
1017		if (!(de->media_advertise & ADVERTISED_Autoneg))
1018			return 0;
1019		if (!(de->media_advertise & (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full)))
1020			return 0;
1021		break;
1022	case DE_MEDIA_BNC:
1023		if (!(de->media_advertise & ADVERTISED_BNC))
1024			return 0;
1025		break;
1026	case DE_MEDIA_AUI:
1027		if (!(de->media_advertise & ADVERTISED_AUI))
1028			return 0;
1029		break;
1030	case DE_MEDIA_TP:
1031		if (!(de->media_advertise & ADVERTISED_10baseT_Half))
1032			return 0;
1033		break;
1034	case DE_MEDIA_TP_FD:
1035		if (!(de->media_advertise & ADVERTISED_10baseT_Full))
1036			return 0;
1037		break;
1038	}
1039
1040	return 1;
1041}
1042
1043static void de21041_media_timer (struct timer_list *t)
1044{
1045	struct de_private *de = from_timer(de, t, media_timer);
1046	struct net_device *dev = de->dev;
1047	u32 status = dr32(SIAStatus);
1048	unsigned int carrier;
1049	unsigned long flags;
1050
1051	/* clear port active bits */
1052	dw32(SIAStatus, NonselPortActive | SelPortActive);
1053
1054	carrier = (status & NetCxnErr) ? 0 : 1;
1055
1056	if (carrier) {
1057		if ((de->media_type == DE_MEDIA_TP_AUTO ||
1058		     de->media_type == DE_MEDIA_TP ||
1059		     de->media_type == DE_MEDIA_TP_FD) &&
1060		    (status & LinkFailStatus))
1061			goto no_link_yet;
1062
1063		de->media_timer.expires = jiffies + DE_TIMER_LINK;
1064		add_timer(&de->media_timer);
1065		if (!netif_carrier_ok(dev))
1066			de_link_up(de);
1067		else
1068			netif_info(de, timer, dev,
1069				   "%s link ok, mode %x status %x\n",
1070				   media_name[de->media_type],
1071				   dr32(MacMode), status);
1072		return;
1073	}
1074
1075	de_link_down(de);
1076
1077	/* if media type locked, don't switch media */
1078	if (de->media_lock)
1079		goto set_media;
1080
1081	/* if activity detected, use that as hint for new media type */
1082	if (status & NonselPortActive) {
1083		unsigned int have_media = 1;
1084
1085		/* if AUI/BNC selected, then activity is on TP port */
1086		if (de->media_type == DE_MEDIA_AUI ||
1087		    de->media_type == DE_MEDIA_BNC) {
1088			if (de_ok_to_advertise(de, DE_MEDIA_TP_AUTO))
1089				de->media_type = DE_MEDIA_TP_AUTO;
1090			else
1091				have_media = 0;
1092		}
1093
1094		/* TP selected.  If there is only TP and BNC, then it's BNC */
1095		else if (((de->media_supported & DE_AUI_BNC) == SUPPORTED_BNC) &&
1096			 de_ok_to_advertise(de, DE_MEDIA_BNC))
1097			de->media_type = DE_MEDIA_BNC;
1098
1099		/* TP selected.  If there is only TP and AUI, then it's AUI */
1100		else if (((de->media_supported & DE_AUI_BNC) == SUPPORTED_AUI) &&
1101			 de_ok_to_advertise(de, DE_MEDIA_AUI))
1102			de->media_type = DE_MEDIA_AUI;
1103
1104		/* otherwise, ignore the hint */
1105		else
1106			have_media = 0;
1107
1108		if (have_media)
1109			goto set_media;
1110	}
1111
1112	/*
1113	 * Absent or ambiguous activity hint, move to next advertised
1114	 * media state.  If de->media_type is left unchanged, this
1115	 * simply resets the PHY and reloads the current media settings.
1116	 */
1117	if (de->media_type == DE_MEDIA_AUI) {
1118		static const u32 next_states[] = {
1119			DE_MEDIA_BNC, DE_MEDIA_TP_AUTO
1120		};
1121		de_next_media(de, next_states, ARRAY_SIZE(next_states));
1122	} else if (de->media_type == DE_MEDIA_BNC) {
1123		static const u32 next_states[] = {
1124			DE_MEDIA_TP_AUTO, DE_MEDIA_AUI
1125		};
1126		de_next_media(de, next_states, ARRAY_SIZE(next_states));
1127	} else {
1128		static const u32 next_states[] = {
1129			DE_MEDIA_AUI, DE_MEDIA_BNC, DE_MEDIA_TP_AUTO
1130		};
1131		de_next_media(de, next_states, ARRAY_SIZE(next_states));
1132	}
1133
1134set_media:
1135	spin_lock_irqsave(&de->lock, flags);
1136	de_stop_rxtx(de);
1137	spin_unlock_irqrestore(&de->lock, flags);
1138	de_set_media(de);
1139	de_start_rxtx(de);
1140
1141no_link_yet:
1142	de->media_timer.expires = jiffies + DE_TIMER_NO_LINK;
1143	add_timer(&de->media_timer);
1144
1145	netif_info(de, timer, dev, "no link, trying media %s, status %x\n",
1146		   media_name[de->media_type], status);
1147}
1148
1149static void de_media_interrupt (struct de_private *de, u32 status)
1150{
1151	if (status & LinkPass) {
1152		/* Ignore if current media is AUI or BNC and we can't use TP */
1153		if ((de->media_type == DE_MEDIA_AUI ||
1154		     de->media_type == DE_MEDIA_BNC) &&
1155		    (de->media_lock ||
1156		     !de_ok_to_advertise(de, DE_MEDIA_TP_AUTO)))
1157			return;
1158		/* If current media is not TP, change it to TP */
1159		if ((de->media_type == DE_MEDIA_AUI ||
1160		     de->media_type == DE_MEDIA_BNC)) {
1161			de->media_type = DE_MEDIA_TP_AUTO;
1162			de_stop_rxtx(de);
1163			de_set_media(de);
1164			de_start_rxtx(de);
1165		}
1166		de_link_up(de);
1167		mod_timer(&de->media_timer, jiffies + DE_TIMER_LINK);
1168		return;
1169	}
1170
1171	BUG_ON(!(status & LinkFail));
1172	/* Mark the link as down only if current media is TP */
1173	if (netif_carrier_ok(de->dev) && de->media_type != DE_MEDIA_AUI &&
1174	    de->media_type != DE_MEDIA_BNC) {
1175		de_link_down(de);
1176		mod_timer(&de->media_timer, jiffies + DE_TIMER_NO_LINK);
1177	}
1178}
1179
1180static int de_reset_mac (struct de_private *de)
1181{
1182	u32 status, tmp;
1183
1184	/*
1185	 * Reset MAC.  de4x5.c and tulip.c examined for "advice"
1186	 * in this area.
1187	 */
1188
1189	if (dr32(BusMode) == 0xffffffff)
1190		return -EBUSY;
1191
1192	/* Reset the chip, holding bit 0 set at least 50 PCI cycles. */
1193	dw32 (BusMode, CmdReset);
1194	mdelay (1);
1195
1196	dw32 (BusMode, de_bus_mode);
1197	mdelay (1);
1198
1199	for (tmp = 0; tmp < 5; tmp++) {
1200		dr32 (BusMode);
1201		mdelay (1);
1202	}
1203
1204	mdelay (1);
1205
1206	status = dr32(MacStatus);
1207	if (status & (RxState | TxState))
1208		return -EBUSY;
1209	if (status == 0xffffffff)
1210		return -ENODEV;
1211	return 0;
1212}
1213
1214static void de_adapter_wake (struct de_private *de)
1215{
1216	u32 pmctl;
1217
1218	if (de->de21040)
1219		return;
1220
1221	pci_read_config_dword(de->pdev, PCIPM, &pmctl);
1222	if (pmctl & PM_Mask) {
1223		pmctl &= ~PM_Mask;
1224		pci_write_config_dword(de->pdev, PCIPM, pmctl);
1225
1226		/* de4x5.c delays, so we do too */
1227		msleep(10);
1228	}
1229}
1230
1231static void de_adapter_sleep (struct de_private *de)
1232{
1233	u32 pmctl;
1234
1235	if (de->de21040)
1236		return;
1237
1238	dw32(CSR13, 0); /* Reset phy */
1239	pci_read_config_dword(de->pdev, PCIPM, &pmctl);
1240	pmctl |= PM_Sleep;
1241	pci_write_config_dword(de->pdev, PCIPM, pmctl);
1242}
1243
1244static int de_init_hw (struct de_private *de)
1245{
1246	struct net_device *dev = de->dev;
1247	u32 macmode;
1248	int rc;
1249
1250	de_adapter_wake(de);
1251
1252	macmode = dr32(MacMode) & ~MacModeClear;
1253
1254	rc = de_reset_mac(de);
1255	if (rc)
1256		return rc;
1257
1258	de_set_media(de); /* reset phy */
1259
1260	dw32(RxRingAddr, de->ring_dma);
1261	dw32(TxRingAddr, de->ring_dma + (sizeof(struct de_desc) * DE_RX_RING_SIZE));
1262
1263	dw32(MacMode, RxTx | macmode);
1264
1265	dr32(RxMissed); /* self-clearing */
1266
1267	dw32(IntrMask, de_intr_mask);
1268
1269	de_set_rx_mode(dev);
1270
1271	return 0;
1272}
1273
1274static int de_refill_rx (struct de_private *de)
1275{
1276	unsigned i;
1277
1278	for (i = 0; i < DE_RX_RING_SIZE; i++) {
1279		struct sk_buff *skb;
1280
1281		skb = netdev_alloc_skb(de->dev, de->rx_buf_sz);
1282		if (!skb)
1283			goto err_out;
1284
1285		de->rx_skb[i].mapping = pci_map_single(de->pdev,
1286			skb->data, de->rx_buf_sz, PCI_DMA_FROMDEVICE);
 
 
1287		de->rx_skb[i].skb = skb;
1288
1289		de->rx_ring[i].opts1 = cpu_to_le32(DescOwn);
1290		if (i == (DE_RX_RING_SIZE - 1))
1291			de->rx_ring[i].opts2 =
1292				cpu_to_le32(RingEnd | de->rx_buf_sz);
1293		else
1294			de->rx_ring[i].opts2 = cpu_to_le32(de->rx_buf_sz);
1295		de->rx_ring[i].addr1 = cpu_to_le32(de->rx_skb[i].mapping);
1296		de->rx_ring[i].addr2 = 0;
1297	}
1298
1299	return 0;
1300
1301err_out:
1302	de_clean_rings(de);
1303	return -ENOMEM;
1304}
1305
1306static int de_init_rings (struct de_private *de)
1307{
1308	memset(de->tx_ring, 0, sizeof(struct de_desc) * DE_TX_RING_SIZE);
1309	de->tx_ring[DE_TX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1310
1311	de->rx_tail = 0;
1312	de->tx_head = de->tx_tail = 0;
1313
1314	return de_refill_rx (de);
1315}
1316
1317static int de_alloc_rings (struct de_private *de)
1318{
1319	de->rx_ring = pci_alloc_consistent(de->pdev, DE_RING_BYTES, &de->ring_dma);
 
1320	if (!de->rx_ring)
1321		return -ENOMEM;
1322	de->tx_ring = &de->rx_ring[DE_RX_RING_SIZE];
1323	return de_init_rings(de);
1324}
1325
1326static void de_clean_rings (struct de_private *de)
1327{
1328	unsigned i;
1329
1330	memset(de->rx_ring, 0, sizeof(struct de_desc) * DE_RX_RING_SIZE);
1331	de->rx_ring[DE_RX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1332	wmb();
1333	memset(de->tx_ring, 0, sizeof(struct de_desc) * DE_TX_RING_SIZE);
1334	de->tx_ring[DE_TX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1335	wmb();
1336
1337	for (i = 0; i < DE_RX_RING_SIZE; i++) {
1338		if (de->rx_skb[i].skb) {
1339			pci_unmap_single(de->pdev, de->rx_skb[i].mapping,
1340					 de->rx_buf_sz, PCI_DMA_FROMDEVICE);
 
1341			dev_kfree_skb(de->rx_skb[i].skb);
1342		}
1343	}
1344
1345	for (i = 0; i < DE_TX_RING_SIZE; i++) {
1346		struct sk_buff *skb = de->tx_skb[i].skb;
1347		if ((skb) && (skb != DE_DUMMY_SKB)) {
1348			if (skb != DE_SETUP_SKB) {
1349				de->dev->stats.tx_dropped++;
1350				pci_unmap_single(de->pdev,
1351					de->tx_skb[i].mapping,
1352					skb->len, PCI_DMA_TODEVICE);
1353				dev_kfree_skb(skb);
1354			} else {
1355				pci_unmap_single(de->pdev,
1356					de->tx_skb[i].mapping,
1357					sizeof(de->setup_frame),
1358					PCI_DMA_TODEVICE);
1359			}
1360		}
1361	}
1362
1363	memset(&de->rx_skb, 0, sizeof(struct ring_info) * DE_RX_RING_SIZE);
1364	memset(&de->tx_skb, 0, sizeof(struct ring_info) * DE_TX_RING_SIZE);
1365}
1366
1367static void de_free_rings (struct de_private *de)
1368{
1369	de_clean_rings(de);
1370	pci_free_consistent(de->pdev, DE_RING_BYTES, de->rx_ring, de->ring_dma);
 
1371	de->rx_ring = NULL;
1372	de->tx_ring = NULL;
1373}
1374
1375static int de_open (struct net_device *dev)
1376{
1377	struct de_private *de = netdev_priv(dev);
1378	const int irq = de->pdev->irq;
1379	int rc;
1380
1381	netif_dbg(de, ifup, dev, "enabling interface\n");
1382
1383	de->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32);
1384
1385	rc = de_alloc_rings(de);
1386	if (rc) {
1387		netdev_err(dev, "ring allocation failure, err=%d\n", rc);
1388		return rc;
1389	}
1390
1391	dw32(IntrMask, 0);
1392
1393	rc = request_irq(irq, de_interrupt, IRQF_SHARED, dev->name, dev);
1394	if (rc) {
1395		netdev_err(dev, "IRQ %d request failure, err=%d\n", irq, rc);
1396		goto err_out_free;
1397	}
1398
1399	rc = de_init_hw(de);
1400	if (rc) {
1401		netdev_err(dev, "h/w init failure, err=%d\n", rc);
1402		goto err_out_free_irq;
1403	}
1404
1405	netif_start_queue(dev);
1406	mod_timer(&de->media_timer, jiffies + DE_TIMER_NO_LINK);
1407
1408	return 0;
1409
1410err_out_free_irq:
1411	free_irq(irq, dev);
1412err_out_free:
1413	de_free_rings(de);
1414	return rc;
1415}
1416
1417static int de_close (struct net_device *dev)
1418{
1419	struct de_private *de = netdev_priv(dev);
1420	unsigned long flags;
1421
1422	netif_dbg(de, ifdown, dev, "disabling interface\n");
1423
1424	del_timer_sync(&de->media_timer);
1425
1426	spin_lock_irqsave(&de->lock, flags);
1427	de_stop_hw(de);
1428	netif_stop_queue(dev);
1429	netif_carrier_off(dev);
1430	spin_unlock_irqrestore(&de->lock, flags);
1431
1432	free_irq(de->pdev->irq, dev);
1433
1434	de_free_rings(de);
1435	de_adapter_sleep(de);
1436	return 0;
1437}
1438
1439static void de_tx_timeout (struct net_device *dev)
1440{
1441	struct de_private *de = netdev_priv(dev);
1442	const int irq = de->pdev->irq;
1443
1444	netdev_dbg(dev, "NIC status %08x mode %08x sia %08x desc %u/%u/%u\n",
1445		   dr32(MacStatus), dr32(MacMode), dr32(SIAStatus),
1446		   de->rx_tail, de->tx_head, de->tx_tail);
1447
1448	del_timer_sync(&de->media_timer);
1449
1450	disable_irq(irq);
1451	spin_lock_irq(&de->lock);
1452
1453	de_stop_hw(de);
1454	netif_stop_queue(dev);
1455	netif_carrier_off(dev);
1456
1457	spin_unlock_irq(&de->lock);
1458	enable_irq(irq);
1459
1460	/* Update the error counts. */
1461	__de_get_stats(de);
1462
1463	synchronize_irq(irq);
1464	de_clean_rings(de);
1465
1466	de_init_rings(de);
1467
1468	de_init_hw(de);
1469
1470	netif_wake_queue(dev);
1471}
1472
1473static void __de_get_regs(struct de_private *de, u8 *buf)
1474{
1475	int i;
1476	u32 *rbuf = (u32 *)buf;
1477
1478	/* read all CSRs */
1479	for (i = 0; i < DE_NUM_REGS; i++)
1480		rbuf[i] = dr32(i * 8);
1481
1482	/* handle self-clearing RxMissed counter, CSR8 */
1483	de_rx_missed(de, rbuf[8]);
1484}
1485
1486static void __de_get_link_ksettings(struct de_private *de,
1487				    struct ethtool_link_ksettings *cmd)
1488{
1489	ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
1490						de->media_supported);
1491	cmd->base.phy_address = 0;
1492	ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
1493						de->media_advertise);
1494
1495	switch (de->media_type) {
1496	case DE_MEDIA_AUI:
1497		cmd->base.port = PORT_AUI;
1498		break;
1499	case DE_MEDIA_BNC:
1500		cmd->base.port = PORT_BNC;
1501		break;
1502	default:
1503		cmd->base.port = PORT_TP;
1504		break;
1505	}
1506
1507	cmd->base.speed = 10;
1508
1509	if (dr32(MacMode) & FullDuplex)
1510		cmd->base.duplex = DUPLEX_FULL;
1511	else
1512		cmd->base.duplex = DUPLEX_HALF;
1513
1514	if (de->media_lock)
1515		cmd->base.autoneg = AUTONEG_DISABLE;
1516	else
1517		cmd->base.autoneg = AUTONEG_ENABLE;
1518
1519	/* ignore maxtxpkt, maxrxpkt for now */
1520}
1521
1522static int __de_set_link_ksettings(struct de_private *de,
1523				   const struct ethtool_link_ksettings *cmd)
1524{
1525	u32 new_media;
1526	unsigned int media_lock;
1527	u8 duplex = cmd->base.duplex;
1528	u8 port = cmd->base.port;
1529	u8 autoneg = cmd->base.autoneg;
1530	u32 advertising;
1531
1532	ethtool_convert_link_mode_to_legacy_u32(&advertising,
1533						cmd->link_modes.advertising);
1534
1535	if (cmd->base.speed != 10)
1536		return -EINVAL;
1537	if (duplex != DUPLEX_HALF && duplex != DUPLEX_FULL)
1538		return -EINVAL;
1539	if (port != PORT_TP && port != PORT_AUI && port != PORT_BNC)
1540		return -EINVAL;
1541	if (de->de21040 && port == PORT_BNC)
1542		return -EINVAL;
1543	if (autoneg != AUTONEG_DISABLE && autoneg != AUTONEG_ENABLE)
1544		return -EINVAL;
1545	if (advertising & ~de->media_supported)
1546		return -EINVAL;
1547	if (autoneg == AUTONEG_ENABLE &&
1548	    (!(advertising & ADVERTISED_Autoneg)))
1549		return -EINVAL;
1550
1551	switch (port) {
1552	case PORT_AUI:
1553		new_media = DE_MEDIA_AUI;
1554		if (!(advertising & ADVERTISED_AUI))
1555			return -EINVAL;
1556		break;
1557	case PORT_BNC:
1558		new_media = DE_MEDIA_BNC;
1559		if (!(advertising & ADVERTISED_BNC))
1560			return -EINVAL;
1561		break;
1562	default:
1563		if (autoneg == AUTONEG_ENABLE)
1564			new_media = DE_MEDIA_TP_AUTO;
1565		else if (duplex == DUPLEX_FULL)
1566			new_media = DE_MEDIA_TP_FD;
1567		else
1568			new_media = DE_MEDIA_TP;
1569		if (!(advertising & ADVERTISED_TP))
1570			return -EINVAL;
1571		if (!(advertising & (ADVERTISED_10baseT_Full |
1572				     ADVERTISED_10baseT_Half)))
1573			return -EINVAL;
1574		break;
1575	}
1576
1577	media_lock = (autoneg == AUTONEG_ENABLE) ? 0 : 1;
1578
1579	if ((new_media == de->media_type) &&
1580	    (media_lock == de->media_lock) &&
1581	    (advertising == de->media_advertise))
1582		return 0; /* nothing to change */
1583
1584	de_link_down(de);
1585	mod_timer(&de->media_timer, jiffies + DE_TIMER_NO_LINK);
1586	de_stop_rxtx(de);
1587
1588	de->media_type = new_media;
1589	de->media_lock = media_lock;
1590	de->media_advertise = advertising;
1591	de_set_media(de);
1592	if (netif_running(de->dev))
1593		de_start_rxtx(de);
1594
1595	return 0;
1596}
1597
1598static void de_get_drvinfo (struct net_device *dev,struct ethtool_drvinfo *info)
1599{
1600	struct de_private *de = netdev_priv(dev);
1601
1602	strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
1603	strlcpy(info->version, DRV_VERSION, sizeof(info->version));
1604	strlcpy(info->bus_info, pci_name(de->pdev), sizeof(info->bus_info));
1605}
1606
1607static int de_get_regs_len(struct net_device *dev)
1608{
1609	return DE_REGS_SIZE;
1610}
1611
1612static int de_get_link_ksettings(struct net_device *dev,
1613				 struct ethtool_link_ksettings *cmd)
1614{
1615	struct de_private *de = netdev_priv(dev);
1616
1617	spin_lock_irq(&de->lock);
1618	__de_get_link_ksettings(de, cmd);
1619	spin_unlock_irq(&de->lock);
1620
1621	return 0;
1622}
1623
1624static int de_set_link_ksettings(struct net_device *dev,
1625				 const struct ethtool_link_ksettings *cmd)
1626{
1627	struct de_private *de = netdev_priv(dev);
1628	int rc;
1629
1630	spin_lock_irq(&de->lock);
1631	rc = __de_set_link_ksettings(de, cmd);
1632	spin_unlock_irq(&de->lock);
1633
1634	return rc;
1635}
1636
1637static u32 de_get_msglevel(struct net_device *dev)
1638{
1639	struct de_private *de = netdev_priv(dev);
1640
1641	return de->msg_enable;
1642}
1643
1644static void de_set_msglevel(struct net_device *dev, u32 msglvl)
1645{
1646	struct de_private *de = netdev_priv(dev);
1647
1648	de->msg_enable = msglvl;
1649}
1650
1651static int de_get_eeprom(struct net_device *dev,
1652			 struct ethtool_eeprom *eeprom, u8 *data)
1653{
1654	struct de_private *de = netdev_priv(dev);
1655
1656	if (!de->ee_data)
1657		return -EOPNOTSUPP;
1658	if ((eeprom->offset != 0) || (eeprom->magic != 0) ||
1659	    (eeprom->len != DE_EEPROM_SIZE))
1660		return -EINVAL;
1661	memcpy(data, de->ee_data, eeprom->len);
1662
1663	return 0;
1664}
1665
1666static int de_nway_reset(struct net_device *dev)
1667{
1668	struct de_private *de = netdev_priv(dev);
1669	u32 status;
1670
1671	if (de->media_type != DE_MEDIA_TP_AUTO)
1672		return -EINVAL;
1673	if (netif_carrier_ok(de->dev))
1674		de_link_down(de);
1675
1676	status = dr32(SIAStatus);
1677	dw32(SIAStatus, (status & ~NWayState) | NWayRestart);
1678	netif_info(de, link, dev, "link nway restart, status %x,%x\n",
1679		   status, dr32(SIAStatus));
1680	return 0;
1681}
1682
1683static void de_get_regs(struct net_device *dev, struct ethtool_regs *regs,
1684			void *data)
1685{
1686	struct de_private *de = netdev_priv(dev);
1687
1688	regs->version = (DE_REGS_VER << 2) | de->de21040;
1689
1690	spin_lock_irq(&de->lock);
1691	__de_get_regs(de, data);
1692	spin_unlock_irq(&de->lock);
1693}
1694
1695static const struct ethtool_ops de_ethtool_ops = {
1696	.get_link		= ethtool_op_get_link,
1697	.get_drvinfo		= de_get_drvinfo,
1698	.get_regs_len		= de_get_regs_len,
1699	.get_msglevel		= de_get_msglevel,
1700	.set_msglevel		= de_set_msglevel,
1701	.get_eeprom		= de_get_eeprom,
1702	.nway_reset		= de_nway_reset,
1703	.get_regs		= de_get_regs,
1704	.get_link_ksettings	= de_get_link_ksettings,
1705	.set_link_ksettings	= de_set_link_ksettings,
1706};
1707
1708static void de21040_get_mac_address(struct de_private *de)
1709{
 
1710	unsigned i;
1711
1712	dw32 (ROMCmd, 0);	/* Reset the pointer with a dummy write. */
1713	udelay(5);
1714
1715	for (i = 0; i < 6; i++) {
1716		int value, boguscnt = 100000;
1717		do {
1718			value = dr32(ROMCmd);
1719			rmb();
1720		} while (value < 0 && --boguscnt > 0);
1721		de->dev->dev_addr[i] = value;
1722		udelay(1);
1723		if (boguscnt <= 0)
1724			pr_warn("timeout reading 21040 MAC address byte %u\n",
1725				i);
1726	}
 
1727}
1728
1729static void de21040_get_media_info(struct de_private *de)
1730{
1731	unsigned int i;
1732
1733	de->media_type = DE_MEDIA_TP;
1734	de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Full |
1735			       SUPPORTED_10baseT_Half | SUPPORTED_AUI;
1736	de->media_advertise = de->media_supported;
1737
1738	for (i = 0; i < DE_MAX_MEDIA; i++) {
1739		switch (i) {
1740		case DE_MEDIA_AUI:
1741		case DE_MEDIA_TP:
1742		case DE_MEDIA_TP_FD:
1743			de->media[i].type = i;
1744			de->media[i].csr13 = t21040_csr13[i];
1745			de->media[i].csr14 = t21040_csr14[i];
1746			de->media[i].csr15 = t21040_csr15[i];
1747			break;
1748		default:
1749			de->media[i].type = DE_MEDIA_INVALID;
1750			break;
1751		}
1752	}
1753}
1754
1755/* Note: this routine returns extra data bits for size detection. */
1756static unsigned tulip_read_eeprom(void __iomem *regs, int location,
1757				  int addr_len)
1758{
1759	int i;
1760	unsigned retval = 0;
1761	void __iomem *ee_addr = regs + ROMCmd;
1762	int read_cmd = location | (EE_READ_CMD << addr_len);
1763
1764	writel(EE_ENB & ~EE_CS, ee_addr);
1765	writel(EE_ENB, ee_addr);
1766
1767	/* Shift the read command bits out. */
1768	for (i = 4 + addr_len; i >= 0; i--) {
1769		short dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
1770		writel(EE_ENB | dataval, ee_addr);
1771		readl(ee_addr);
1772		writel(EE_ENB | dataval | EE_SHIFT_CLK, ee_addr);
1773		readl(ee_addr);
1774		retval = (retval << 1) | ((readl(ee_addr) & EE_DATA_READ) ? 1 : 0);
1775	}
1776	writel(EE_ENB, ee_addr);
1777	readl(ee_addr);
1778
1779	for (i = 16; i > 0; i--) {
1780		writel(EE_ENB | EE_SHIFT_CLK, ee_addr);
1781		readl(ee_addr);
1782		retval = (retval << 1) | ((readl(ee_addr) & EE_DATA_READ) ? 1 : 0);
1783		writel(EE_ENB, ee_addr);
1784		readl(ee_addr);
1785	}
1786
1787	/* Terminate the EEPROM access. */
1788	writel(EE_ENB & ~EE_CS, ee_addr);
1789	return retval;
1790}
1791
1792static void de21041_get_srom_info(struct de_private *de)
1793{
1794	unsigned i, sa_offset = 0, ofs;
1795	u8 ee_data[DE_EEPROM_SIZE + 6] = {};
1796	unsigned ee_addr_size = tulip_read_eeprom(de->regs, 0xff, 8) & 0x40000 ? 8 : 6;
1797	struct de_srom_info_leaf *il;
1798	void *bufp;
1799
1800	/* download entire eeprom */
1801	for (i = 0; i < DE_EEPROM_WORDS; i++)
1802		((__le16 *)ee_data)[i] =
1803			cpu_to_le16(tulip_read_eeprom(de->regs, i, ee_addr_size));
1804
1805	/* DEC now has a specification but early board makers
1806	   just put the address in the first EEPROM locations. */
1807	/* This does  memcmp(eedata, eedata+16, 8) */
1808
1809#ifndef CONFIG_MIPS_COBALT
1810
1811	for (i = 0; i < 8; i ++)
1812		if (ee_data[i] != ee_data[16+i])
1813			sa_offset = 20;
1814
1815#endif
1816
1817	/* store MAC address */
1818	for (i = 0; i < 6; i ++)
1819		de->dev->dev_addr[i] = ee_data[i + sa_offset];
1820
1821	/* get offset of controller 0 info leaf.  ignore 2nd byte. */
1822	ofs = ee_data[SROMC0InfoLeaf];
1823	if (ofs >= (sizeof(ee_data) - sizeof(struct de_srom_info_leaf) - sizeof(struct de_srom_media_block)))
1824		goto bad_srom;
1825
1826	/* get pointer to info leaf */
1827	il = (struct de_srom_info_leaf *) &ee_data[ofs];
1828
1829	/* paranoia checks */
1830	if (il->n_blocks == 0)
1831		goto bad_srom;
1832	if ((sizeof(ee_data) - ofs) <
1833	    (sizeof(struct de_srom_info_leaf) + (sizeof(struct de_srom_media_block) * il->n_blocks)))
1834		goto bad_srom;
1835
1836	/* get default media type */
1837	switch (get_unaligned(&il->default_media)) {
1838	case 0x0001:  de->media_type = DE_MEDIA_BNC; break;
1839	case 0x0002:  de->media_type = DE_MEDIA_AUI; break;
1840	case 0x0204:  de->media_type = DE_MEDIA_TP_FD; break;
1841	default: de->media_type = DE_MEDIA_TP_AUTO; break;
1842	}
1843
1844	if (netif_msg_probe(de))
1845		pr_info("de%d: SROM leaf offset %u, default media %s\n",
1846		       de->board_idx, ofs, media_name[de->media_type]);
1847
1848	/* init SIA register values to defaults */
1849	for (i = 0; i < DE_MAX_MEDIA; i++) {
1850		de->media[i].type = DE_MEDIA_INVALID;
1851		de->media[i].csr13 = 0xffff;
1852		de->media[i].csr14 = 0xffff;
1853		de->media[i].csr15 = 0xffff;
1854	}
1855
1856	/* parse media blocks to see what medias are supported,
1857	 * and if any custom CSR values are provided
1858	 */
1859	bufp = ((void *)il) + sizeof(*il);
1860	for (i = 0; i < il->n_blocks; i++) {
1861		struct de_srom_media_block *ib = bufp;
1862		unsigned idx;
1863
1864		/* index based on media type in media block */
1865		switch(ib->opts & MediaBlockMask) {
1866		case 0: /* 10baseT */
1867			de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Half
1868					  | SUPPORTED_Autoneg;
1869			idx = DE_MEDIA_TP;
1870			de->media[DE_MEDIA_TP_AUTO].type = DE_MEDIA_TP_AUTO;
1871			break;
1872		case 1: /* BNC */
1873			de->media_supported |= SUPPORTED_BNC;
1874			idx = DE_MEDIA_BNC;
1875			break;
1876		case 2: /* AUI */
1877			de->media_supported |= SUPPORTED_AUI;
1878			idx = DE_MEDIA_AUI;
1879			break;
1880		case 4: /* 10baseT-FD */
1881			de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Full
1882					  | SUPPORTED_Autoneg;
1883			idx = DE_MEDIA_TP_FD;
1884			de->media[DE_MEDIA_TP_AUTO].type = DE_MEDIA_TP_AUTO;
1885			break;
1886		default:
1887			goto bad_srom;
1888		}
1889
1890		de->media[idx].type = idx;
1891
1892		if (netif_msg_probe(de))
1893			pr_info("de%d:   media block #%u: %s",
1894				de->board_idx, i,
1895				media_name[de->media[idx].type]);
1896
1897		bufp += sizeof (ib->opts);
1898
1899		if (ib->opts & MediaCustomCSRs) {
1900			de->media[idx].csr13 = get_unaligned(&ib->csr13);
1901			de->media[idx].csr14 = get_unaligned(&ib->csr14);
1902			de->media[idx].csr15 = get_unaligned(&ib->csr15);
1903			bufp += sizeof(ib->csr13) + sizeof(ib->csr14) +
1904				sizeof(ib->csr15);
1905
1906			if (netif_msg_probe(de))
1907				pr_cont(" (%x,%x,%x)\n",
1908					de->media[idx].csr13,
1909					de->media[idx].csr14,
1910					de->media[idx].csr15);
1911
1912		} else {
1913			if (netif_msg_probe(de))
1914				pr_cont("\n");
1915		}
1916
1917		if (bufp > ((void *)&ee_data[DE_EEPROM_SIZE - 3]))
1918			break;
1919	}
1920
1921	de->media_advertise = de->media_supported;
1922
1923fill_defaults:
1924	/* fill in defaults, for cases where custom CSRs not used */
1925	for (i = 0; i < DE_MAX_MEDIA; i++) {
1926		if (de->media[i].csr13 == 0xffff)
1927			de->media[i].csr13 = t21041_csr13[i];
1928		if (de->media[i].csr14 == 0xffff) {
1929			/* autonegotiation is broken at least on some chip
1930			   revisions - rev. 0x21 works, 0x11 does not */
1931			if (de->pdev->revision < 0x20)
1932				de->media[i].csr14 = t21041_csr14_brk[i];
1933			else
1934				de->media[i].csr14 = t21041_csr14[i];
1935		}
1936		if (de->media[i].csr15 == 0xffff)
1937			de->media[i].csr15 = t21041_csr15[i];
1938	}
1939
1940	de->ee_data = kmemdup(&ee_data[0], DE_EEPROM_SIZE, GFP_KERNEL);
1941
1942	return;
1943
1944bad_srom:
1945	/* for error cases, it's ok to assume we support all these */
1946	for (i = 0; i < DE_MAX_MEDIA; i++)
1947		de->media[i].type = i;
1948	de->media_supported =
1949		SUPPORTED_10baseT_Half |
1950		SUPPORTED_10baseT_Full |
1951		SUPPORTED_Autoneg |
1952		SUPPORTED_TP |
1953		SUPPORTED_AUI |
1954		SUPPORTED_BNC;
1955	goto fill_defaults;
1956}
1957
1958static const struct net_device_ops de_netdev_ops = {
1959	.ndo_open		= de_open,
1960	.ndo_stop		= de_close,
1961	.ndo_set_rx_mode	= de_set_rx_mode,
1962	.ndo_start_xmit		= de_start_xmit,
1963	.ndo_get_stats		= de_get_stats,
1964	.ndo_tx_timeout 	= de_tx_timeout,
1965	.ndo_set_mac_address 	= eth_mac_addr,
1966	.ndo_validate_addr	= eth_validate_addr,
1967};
1968
1969static int de_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1970{
1971	struct net_device *dev;
1972	struct de_private *de;
1973	int rc;
1974	void __iomem *regs;
1975	unsigned long pciaddr;
1976	static int board_idx = -1;
1977
1978	board_idx++;
1979
1980#ifndef MODULE
1981	if (board_idx == 0)
1982		pr_info("%s\n", version);
1983#endif
1984
1985	/* allocate a new ethernet device structure, and fill in defaults */
1986	dev = alloc_etherdev(sizeof(struct de_private));
1987	if (!dev)
1988		return -ENOMEM;
1989
1990	dev->netdev_ops = &de_netdev_ops;
1991	SET_NETDEV_DEV(dev, &pdev->dev);
1992	dev->ethtool_ops = &de_ethtool_ops;
1993	dev->watchdog_timeo = TX_TIMEOUT;
1994
1995	de = netdev_priv(dev);
1996	de->de21040 = ent->driver_data == 0 ? 1 : 0;
1997	de->pdev = pdev;
1998	de->dev = dev;
1999	de->msg_enable = (debug < 0 ? DE_DEF_MSG_ENABLE : debug);
2000	de->board_idx = board_idx;
2001	spin_lock_init (&de->lock);
2002	timer_setup(&de->media_timer,
2003		    de->de21040 ? de21040_media_timer : de21041_media_timer,
2004		    0);
2005
2006	netif_carrier_off(dev);
2007
2008	/* wake up device, assign resources */
2009	rc = pci_enable_device(pdev);
2010	if (rc)
2011		goto err_out_free;
2012
2013	/* reserve PCI resources to ensure driver atomicity */
2014	rc = pci_request_regions(pdev, DRV_NAME);
2015	if (rc)
2016		goto err_out_disable;
2017
2018	/* check for invalid IRQ value */
2019	if (pdev->irq < 2) {
2020		rc = -EIO;
2021		pr_err("invalid irq (%d) for pci dev %s\n",
2022		       pdev->irq, pci_name(pdev));
2023		goto err_out_res;
2024	}
2025
2026	/* obtain and check validity of PCI I/O address */
2027	pciaddr = pci_resource_start(pdev, 1);
2028	if (!pciaddr) {
2029		rc = -EIO;
2030		pr_err("no MMIO resource for pci dev %s\n", pci_name(pdev));
2031		goto err_out_res;
2032	}
2033	if (pci_resource_len(pdev, 1) < DE_REGS_SIZE) {
2034		rc = -EIO;
2035		pr_err("MMIO resource (%llx) too small on pci dev %s\n",
2036		       (unsigned long long)pci_resource_len(pdev, 1),
2037		       pci_name(pdev));
2038		goto err_out_res;
2039	}
2040
2041	/* remap CSR registers */
2042	regs = ioremap_nocache(pciaddr, DE_REGS_SIZE);
2043	if (!regs) {
2044		rc = -EIO;
2045		pr_err("Cannot map PCI MMIO (%llx@%lx) on pci dev %s\n",
2046		       (unsigned long long)pci_resource_len(pdev, 1),
2047		       pciaddr, pci_name(pdev));
2048		goto err_out_res;
2049	}
2050	de->regs = regs;
2051
2052	de_adapter_wake(de);
2053
2054	/* make sure hardware is not running */
2055	rc = de_reset_mac(de);
2056	if (rc) {
2057		pr_err("Cannot reset MAC, pci dev %s\n", pci_name(pdev));
2058		goto err_out_iomap;
2059	}
2060
2061	/* get MAC address, initialize default media type and
2062	 * get list of supported media
2063	 */
2064	if (de->de21040) {
2065		de21040_get_mac_address(de);
2066		de21040_get_media_info(de);
2067	} else {
2068		de21041_get_srom_info(de);
2069	}
2070
2071	/* register new network interface with kernel */
2072	rc = register_netdev(dev);
2073	if (rc)
2074		goto err_out_iomap;
2075
2076	/* print info about board and interface just registered */
2077	netdev_info(dev, "%s at %p, %pM, IRQ %d\n",
2078		    de->de21040 ? "21040" : "21041",
2079		    regs, dev->dev_addr, pdev->irq);
2080
2081	pci_set_drvdata(pdev, dev);
2082
2083	/* enable busmastering */
2084	pci_set_master(pdev);
2085
2086	/* put adapter to sleep */
2087	de_adapter_sleep(de);
2088
2089	return 0;
2090
2091err_out_iomap:
2092	kfree(de->ee_data);
2093	iounmap(regs);
2094err_out_res:
2095	pci_release_regions(pdev);
2096err_out_disable:
2097	pci_disable_device(pdev);
2098err_out_free:
2099	free_netdev(dev);
2100	return rc;
2101}
2102
2103static void de_remove_one(struct pci_dev *pdev)
2104{
2105	struct net_device *dev = pci_get_drvdata(pdev);
2106	struct de_private *de = netdev_priv(dev);
2107
2108	BUG_ON(!dev);
2109	unregister_netdev(dev);
2110	kfree(de->ee_data);
2111	iounmap(de->regs);
2112	pci_release_regions(pdev);
2113	pci_disable_device(pdev);
2114	free_netdev(dev);
2115}
2116
2117#ifdef CONFIG_PM
2118
2119static int de_suspend (struct pci_dev *pdev, pm_message_t state)
2120{
2121	struct net_device *dev = pci_get_drvdata (pdev);
 
2122	struct de_private *de = netdev_priv(dev);
2123
2124	rtnl_lock();
2125	if (netif_running (dev)) {
2126		const int irq = pdev->irq;
2127
2128		del_timer_sync(&de->media_timer);
2129
2130		disable_irq(irq);
2131		spin_lock_irq(&de->lock);
2132
2133		de_stop_hw(de);
2134		netif_stop_queue(dev);
2135		netif_device_detach(dev);
2136		netif_carrier_off(dev);
2137
2138		spin_unlock_irq(&de->lock);
2139		enable_irq(irq);
2140
2141		/* Update the error counts. */
2142		__de_get_stats(de);
2143
2144		synchronize_irq(irq);
2145		de_clean_rings(de);
2146
2147		de_adapter_sleep(de);
2148		pci_disable_device(pdev);
2149	} else {
2150		netif_device_detach(dev);
2151	}
2152	rtnl_unlock();
2153	return 0;
2154}
2155
2156static int de_resume (struct pci_dev *pdev)
2157{
2158	struct net_device *dev = pci_get_drvdata (pdev);
 
2159	struct de_private *de = netdev_priv(dev);
2160	int retval = 0;
2161
2162	rtnl_lock();
2163	if (netif_device_present(dev))
2164		goto out;
2165	if (!netif_running(dev))
2166		goto out_attach;
2167	if ((retval = pci_enable_device(pdev))) {
2168		netdev_err(dev, "pci_enable_device failed in resume\n");
2169		goto out;
2170	}
2171	pci_set_master(pdev);
2172	de_init_rings(de);
2173	de_init_hw(de);
2174out_attach:
2175	netif_device_attach(dev);
2176out:
2177	rtnl_unlock();
2178	return 0;
2179}
2180
2181#endif /* CONFIG_PM */
 
 
 
 
 
 
 
 
 
2182
2183static struct pci_driver de_driver = {
2184	.name		= DRV_NAME,
2185	.id_table	= de_pci_tbl,
2186	.probe		= de_init_one,
2187	.remove		= de_remove_one,
2188#ifdef CONFIG_PM
2189	.suspend	= de_suspend,
2190	.resume		= de_resume,
2191#endif
2192};
2193
2194static int __init de_init (void)
2195{
2196#ifdef MODULE
2197	pr_info("%s\n", version);
2198#endif
2199	return pci_register_driver(&de_driver);
2200}
2201
2202static void __exit de_exit (void)
2203{
2204	pci_unregister_driver (&de_driver);
2205}
2206
2207module_init(de_init);
2208module_exit(de_exit);