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