1 /* via-rhine.c: A Linux Ethernet device driver for VIA Rhine family chips. */
3 Written 1998-2001 by Donald Becker.
5 Current Maintainer: Roger Luethi <rl@hellgate.ch>
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.
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).
18 The author may be reached as becker@scyld.com, or C/O
19 Scyld Computing Corporation
20 410 Severn Ave., Suite 210
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
30 Linux kernel version history:
33 - Jeff Garzik: softnet 'n stuff
36 - Justin Guyett: softnet and locking fixes
37 - Jeff Garzik: use PCI interface
40 - Urban Widmark: minor cleanups, merges from Becker 1.03a/1.04 versions
43 - Urban Widmark: use PCI DMA interface (with thanks to the eepro100.c
44 code) update "Theory of Operation" with
45 softnet/locking changes
46 - Dave Miller: PCI DMA and endian fixups
47 - Jeff Garzik: MOD_xxx race fixes, updated PCI resource allocation
50 - Urban Widmark: fix gcc 2.95.2 problem and
51 remove writel's to fixed address 0x7c
54 - Urban Widmark: mdio locking, bounce buffer changes
55 merges from Beckers 1.05 version
56 added netif_running_on/off support
59 - Urban Widmark: merges from Beckers 1.08b version (VT6102 + mdio)
60 set netif_running_on/off on startup, del_timer_sync
63 - Manfred Spraul: added reset into tx_timeout
66 - Urban Widmark: merges from Beckers 1.10 version
67 (media selection + eeprom reload)
68 - David Vrabel: merges from D-Link "1.11" version
69 (disable WOL and PME on startup)
72 - Manfred Spraul: use "singlecopy" for unaligned buffers
73 don't allocate bounce buffers for !ReqTxAlign cards
76 - David Woodhouse: Set dev->base_addr before the first time we call
77 wait_for_reset(). It's a lot happier that way.
78 Free np->tx_bufs only if we actually allocated it.
81 - Martin Eriksson: Allow Memory-Mapped IO to be enabled.
85 - Replace some MII-related magic numbers with constants
88 - fixes comments for Rhine-III
89 - removes W_MAX_TIMEOUT (unused)
90 - adds HasDavicomPhy for Rhine-I (basis: linuxfet driver; my card
91 is R-I and has Davicom chip, flag is referenced in kernel driver)
92 - sends chip_id as a parameter to wait_for_reset since np is not
93 initialized on first call
94 - changes mmio "else if (chip_id==VT6102)" to "else" so it will work
95 for Rhine-III's (documentation says same bit is correct)
96 - transmit frame queue message is off by one - fixed
97 - adds IntrNormalSummary to "Something Wicked" exclusion list
98 so normal interrupts will not trigger the message (src: Donald Becker)
100 - show confused chip where to continue after Tx error
101 - location of collision counter is chip specific
102 - allow selecting backoff algorithm (module parameter)
105 - Use new MII lib helper generic_mii_ioctl
107 LK1.1.16 (Roger Luethi)
109 - Handle Tx buffer underrun
110 - Fix bugs in full duplex handling
111 - New reset code uses "force reset" cmd on Rhine-II
114 LK1.1.17 (Roger Luethi)
115 - Fix race in via_rhine_start_tx()
116 - On errors, wait for Tx engine to turn off before scavenging
117 - Handle Tx descriptor write-back race on Rhine-II
118 - Force flushing for PCI posted writes
119 - More reset code changes
121 LK1.1.18 (Roger Luethi)
122 - No filtering multicast in promisc mode (Edward Peng)
123 - Fix for Rhine-I Tx timeouts
125 LK1.1.19 (Roger Luethi)
126 - Increase Tx threshold for unspecified errors
128 LK1.2.0-2.6 (Roger Luethi)
130 - Rewrite PHY, media handling (remove options, full_duplex, backoff)
131 - Fix Tx engine race for good
132 - Craig Brind: Zero padded aligned buffers for short packets.
136 #define DRV_NAME "via-rhine"
137 #define DRV_VERSION "1.2.0-2.6"
138 #define DRV_RELDATE "June-10-2004"
141 /* A few user-configurable values.
142 These may be modified when a driver module is loaded. */
144 static int debug
= 1; /* 1 normal messages, 0 quiet .. 7 verbose. */
145 static int max_interrupt_work
= 20;
147 /* Set the copy breakpoint for the copy-only-tiny-frames scheme.
148 Setting to > 1518 effectively disables this feature. */
149 static int rx_copybreak
;
152 * In case you are looking for 'options[]' or 'full_duplex[]', they
153 * are gone. Use ethtool(8) instead.
156 /* Maximum number of multicast addresses to filter (vs. rx-all-multicast).
157 The Rhine has a 64 element 8390-like hash table. */
158 static const int multicast_filter_limit
= 32;
161 /* Operational parameters that are set at compile time. */
163 /* Keep the ring sizes a power of two for compile efficiency.
164 The compiler will convert <unsigned>'%'<2^N> into a bit mask.
165 Making the Tx ring too large decreases the effectiveness of channel
166 bonding and packet priority.
167 There are no ill effects from too-large receive rings. */
168 #define TX_RING_SIZE 16
169 #define TX_QUEUE_LEN 10 /* Limit ring entries actually used. */
170 #define RX_RING_SIZE 16
173 /* Operational parameters that usually are not changed. */
175 /* Time in jiffies before concluding the transmitter is hung. */
176 #define TX_TIMEOUT (2*HZ)
178 #define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer.*/
180 #include <linux/module.h>
181 #include <linux/moduleparam.h>
182 #include <linux/kernel.h>
183 #include <linux/string.h>
184 #include <linux/timer.h>
185 #include <linux/errno.h>
186 #include <linux/ioport.h>
187 #include <linux/slab.h>
188 #include <linux/interrupt.h>
189 #include <linux/pci.h>
190 #include <linux/dma-mapping.h>
191 #include <linux/netdevice.h>
192 #include <linux/etherdevice.h>
193 #include <linux/skbuff.h>
194 #include <linux/init.h>
195 #include <linux/delay.h>
196 #include <linux/mii.h>
197 #include <linux/ethtool.h>
198 #include <linux/crc32.h>
199 #include <linux/bitops.h>
200 #include <asm/processor.h> /* Processor type for cache alignment. */
203 #include <asm/uaccess.h>
205 /* These identify the driver base version and may not be removed. */
206 static char version
[] __devinitdata
=
207 KERN_INFO DRV_NAME
".c:v1.10-LK" DRV_VERSION
" " DRV_RELDATE
" Written by Donald Becker\n";
209 /* This driver was written to use PCI memory space. Some early versions
210 of the Rhine may only work correctly with I/O space accesses. */
211 #ifdef CONFIG_VIA_RHINE_MMIO
216 MODULE_AUTHOR("Donald Becker <becker@scyld.com>");
217 MODULE_DESCRIPTION("VIA Rhine PCI Fast Ethernet driver");
218 MODULE_LICENSE("GPL");
220 module_param(max_interrupt_work
, int, 0);
221 module_param(debug
, int, 0);
222 module_param(rx_copybreak
, int, 0);
223 MODULE_PARM_DESC(max_interrupt_work
, "VIA Rhine maximum events handled per interrupt");
224 MODULE_PARM_DESC(debug
, "VIA Rhine debug level (0-7)");
225 MODULE_PARM_DESC(rx_copybreak
, "VIA Rhine copy breakpoint for copy-only-tiny-frames");
230 I. Board Compatibility
232 This driver is designed for the VIA 86c100A Rhine-II PCI Fast Ethernet
235 II. Board-specific settings
237 Boards with this chip are functional only in a bus-master PCI slot.
239 Many operational settings are loaded from the EEPROM to the Config word at
240 offset 0x78. For most of these settings, this driver assumes that they are
242 If this driver is compiled to use PCI memory space operations the EEPROM
243 must be configured to enable memory ops.
245 III. Driver operation
249 This driver uses two statically allocated fixed-size descriptor lists
250 formed into rings by a branch from the final descriptor to the beginning of
251 the list. The ring sizes are set at compile time by RX/TX_RING_SIZE.
253 IIIb/c. Transmit/Receive Structure
255 This driver attempts to use a zero-copy receive and transmit scheme.
257 Alas, all data buffers are required to start on a 32 bit boundary, so
258 the driver must often copy transmit packets into bounce buffers.
260 The driver allocates full frame size skbuffs for the Rx ring buffers at
261 open() time and passes the skb->data field to the chip as receive data
262 buffers. When an incoming frame is less than RX_COPYBREAK bytes long,
263 a fresh skbuff is allocated and the frame is copied to the new skbuff.
264 When the incoming frame is larger, the skbuff is passed directly up the
265 protocol stack. Buffers consumed this way are replaced by newly allocated
266 skbuffs in the last phase of rhine_rx().
268 The RX_COPYBREAK value is chosen to trade-off the memory wasted by
269 using a full-sized skbuff for small frames vs. the copying costs of larger
270 frames. New boards are typically used in generously configured machines
271 and the underfilled buffers have negligible impact compared to the benefit of
272 a single allocation size, so the default value of zero results in never
273 copying packets. When copying is done, the cost is usually mitigated by using
274 a combined copy/checksum routine. Copying also preloads the cache, which is
275 most useful with small frames.
277 Since the VIA chips are only able to transfer data to buffers on 32 bit
278 boundaries, the IP header at offset 14 in an ethernet frame isn't
279 longword aligned for further processing. Copying these unaligned buffers
280 has the beneficial effect of 16-byte aligning the IP header.
282 IIId. Synchronization
284 The driver runs as two independent, single-threaded flows of control. One
285 is the send-packet routine, which enforces single-threaded use by the
286 dev->priv->lock spinlock. The other thread is the interrupt handler, which
287 is single threaded by the hardware and interrupt handling software.
289 The send packet thread has partial control over the Tx ring. It locks the
290 dev->priv->lock whenever it's queuing a Tx packet. If the next slot in the ring
291 is not available it stops the transmit queue by calling netif_stop_queue.
293 The interrupt handler has exclusive control over the Rx ring and records stats
294 from the Tx ring. After reaping the stats, it marks the Tx queue entry as
295 empty by incrementing the dirty_tx mark. If at least half of the entries in
296 the Rx ring are available the transmit queue is woken up if it was stopped.
302 Preliminary VT86C100A manual from http://www.via.com.tw/
303 http://www.scyld.com/expert/100mbps.html
304 http://www.scyld.com/expert/NWay.html
305 ftp://ftp.via.com.tw/public/lan/Products/NIC/VT86C100A/Datasheet/VT86C100A03.pdf
306 ftp://ftp.via.com.tw/public/lan/Products/NIC/VT6102/Datasheet/VT6102_021.PDF
311 The VT86C100A manual is not reliable information.
312 The 3043 chip does not handle unaligned transmit or receive buffers, resulting
313 in significant performance degradation for bounce buffer copies on transmit
314 and unaligned IP headers on receive.
315 The chip does not pad to minimum transmit length.
320 /* This table drives the PCI probe routines. It's mostly boilerplate in all
321 of the drivers, and will likely be provided by some future kernel.
322 Note the matching code -- the first table entry matchs all 56** cards but
323 second only the 1234 card.
330 VT8231
= 0x50, /* Integrated MAC */
331 VT8233
= 0x60, /* Integrated MAC */
332 VT8235
= 0x74, /* Integrated MAC */
333 VT8237
= 0x78, /* Integrated MAC */
340 VT6105M
= 0x90, /* Management adapter */
344 rqWOL
= 0x0001, /* Wake-On-LAN support */
345 rqForceReset
= 0x0002,
346 rq6patterns
= 0x0040, /* 6 instead of 4 patterns for WOL */
347 rqStatusWBRace
= 0x0080, /* Tx Status Writeback Error possible */
348 rqRhineI
= 0x0100, /* See comment below */
351 * rqRhineI: VT86C100A (aka Rhine-I) uses different bits to enable
352 * MMIO as well as for the collision counter and the Tx FIFO underflow
353 * indicator. In addition, Tx and Rx buffers need to 4 byte aligned.
356 /* Beware of PCI posted writes */
357 #define IOSYNC do { ioread8(ioaddr + StationAddr); } while (0)
359 static struct pci_device_id rhine_pci_tbl
[] =
361 {0x1106, 0x3043, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, }, /* VT86C100A */
362 {0x1106, 0x3065, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, }, /* VT6102 */
363 {0x1106, 0x3106, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, }, /* 6105{,L,LOM} */
364 {0x1106, 0x3053, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, }, /* VT6105M */
365 { } /* terminate list */
367 MODULE_DEVICE_TABLE(pci
, rhine_pci_tbl
);
370 /* Offsets to the device registers. */
371 enum register_offsets
{
372 StationAddr
=0x00, RxConfig
=0x06, TxConfig
=0x07, ChipCmd
=0x08,
374 IntrStatus
=0x0C, IntrEnable
=0x0E,
375 MulticastFilter0
=0x10, MulticastFilter1
=0x14,
376 RxRingPtr
=0x18, TxRingPtr
=0x1C, GFIFOTest
=0x54,
377 MIIPhyAddr
=0x6C, MIIStatus
=0x6D, PCIBusConfig
=0x6E,
378 MIICmd
=0x70, MIIRegAddr
=0x71, MIIData
=0x72, MACRegEEcsr
=0x74,
379 ConfigA
=0x78, ConfigB
=0x79, ConfigC
=0x7A, ConfigD
=0x7B,
380 RxMissed
=0x7C, RxCRCErrs
=0x7E, MiscCmd
=0x81,
381 StickyHW
=0x83, IntrStatus2
=0x84,
382 WOLcrSet
=0xA0, PwcfgSet
=0xA1, WOLcgSet
=0xA3, WOLcrClr
=0xA4,
383 WOLcrClr1
=0xA6, WOLcgClr
=0xA7,
384 PwrcsrSet
=0xA8, PwrcsrSet1
=0xA9, PwrcsrClr
=0xAC, PwrcsrClr1
=0xAD,
387 /* Bits in ConfigD */
389 BackOptional
=0x01, BackModify
=0x02,
390 BackCaptureEffect
=0x04, BackRandom
=0x08
394 /* Registers we check that mmio and reg are the same. */
395 static const int mmio_verify_registers
[] = {
396 RxConfig
, TxConfig
, IntrEnable
, ConfigA
, ConfigB
, ConfigC
, ConfigD
,
401 /* Bits in the interrupt status/mask registers. */
402 enum intr_status_bits
{
403 IntrRxDone
=0x0001, IntrRxErr
=0x0004, IntrRxEmpty
=0x0020,
404 IntrTxDone
=0x0002, IntrTxError
=0x0008, IntrTxUnderrun
=0x0210,
406 IntrStatsMax
=0x0080, IntrRxEarly
=0x0100,
407 IntrRxOverflow
=0x0400, IntrRxDropped
=0x0800, IntrRxNoBuf
=0x1000,
408 IntrTxAborted
=0x2000, IntrLinkChange
=0x4000,
410 IntrNormalSummary
=0x0003, IntrAbnormalSummary
=0xC260,
411 IntrTxDescRace
=0x080000, /* mapped from IntrStatus2 */
412 IntrTxErrSummary
=0x082218,
415 /* Bits in WOLcrSet/WOLcrClr and PwrcsrSet/PwrcsrClr */
424 /* The Rx and Tx buffer descriptors. */
427 u32 desc_length
; /* Chain flag, Buffer/frame length */
433 u32 desc_length
; /* Chain flag, Tx Config, Frame length */
438 /* Initial value for tx_desc.desc_length, Buffer size goes to bits 0-10 */
439 #define TXDESC 0x00e08000
441 enum rx_status_bits
{
442 RxOK
=0x8000, RxWholePkt
=0x0300, RxErr
=0x008F
445 /* Bits in *_desc.*_status */
446 enum desc_status_bits
{
450 /* Bits in ChipCmd. */
452 CmdInit
=0x01, CmdStart
=0x02, CmdStop
=0x04, CmdRxOn
=0x08,
453 CmdTxOn
=0x10, Cmd1TxDemand
=0x20, CmdRxDemand
=0x40,
454 Cmd1EarlyRx
=0x01, Cmd1EarlyTx
=0x02, Cmd1FDuplex
=0x04,
455 Cmd1NoTxPoll
=0x08, Cmd1Reset
=0x80,
458 struct rhine_private
{
459 /* Descriptor rings */
460 struct rx_desc
*rx_ring
;
461 struct tx_desc
*tx_ring
;
462 dma_addr_t rx_ring_dma
;
463 dma_addr_t tx_ring_dma
;
465 /* The addresses of receive-in-place skbuffs. */
466 struct sk_buff
*rx_skbuff
[RX_RING_SIZE
];
467 dma_addr_t rx_skbuff_dma
[RX_RING_SIZE
];
469 /* The saved address of a sent-in-place packet/buffer, for later free(). */
470 struct sk_buff
*tx_skbuff
[TX_RING_SIZE
];
471 dma_addr_t tx_skbuff_dma
[TX_RING_SIZE
];
473 /* Tx bounce buffers (Rhine-I only) */
474 unsigned char *tx_buf
[TX_RING_SIZE
];
475 unsigned char *tx_bufs
;
476 dma_addr_t tx_bufs_dma
;
478 struct pci_dev
*pdev
;
480 struct net_device_stats stats
;
483 /* Frequently used values: keep some adjacent for cache effect. */
485 struct rx_desc
*rx_head_desc
;
486 unsigned int cur_rx
, dirty_rx
; /* Producer/consumer ring indices */
487 unsigned int cur_tx
, dirty_tx
;
488 unsigned int rx_buf_sz
; /* Based on MTU+slack. */
491 u8 tx_thresh
, rx_thresh
;
493 struct mii_if_info mii_if
;
497 static int mdio_read(struct net_device
*dev
, int phy_id
, int location
);
498 static void mdio_write(struct net_device
*dev
, int phy_id
, int location
, int value
);
499 static int rhine_open(struct net_device
*dev
);
500 static void rhine_tx_timeout(struct net_device
*dev
);
501 static int rhine_start_tx(struct sk_buff
*skb
, struct net_device
*dev
);
502 static irqreturn_t
rhine_interrupt(int irq
, void *dev_instance
, struct pt_regs
*regs
);
503 static void rhine_tx(struct net_device
*dev
);
504 static void rhine_rx(struct net_device
*dev
);
505 static void rhine_error(struct net_device
*dev
, int intr_status
);
506 static void rhine_set_rx_mode(struct net_device
*dev
);
507 static struct net_device_stats
*rhine_get_stats(struct net_device
*dev
);
508 static int netdev_ioctl(struct net_device
*dev
, struct ifreq
*rq
, int cmd
);
509 static struct ethtool_ops netdev_ethtool_ops
;
510 static int rhine_close(struct net_device
*dev
);
511 static void rhine_shutdown (struct pci_dev
*pdev
);
513 #define RHINE_WAIT_FOR(condition) do { \
515 while (!(condition) && --i) \
517 if (debug > 1 && i < 512) \
518 printk(KERN_INFO "%s: %4d cycles used @ %s:%d\n", \
519 DRV_NAME, 1024-i, __func__, __LINE__); \
522 static inline u32
get_intr_status(struct net_device
*dev
)
524 struct rhine_private
*rp
= netdev_priv(dev
);
525 void __iomem
*ioaddr
= rp
->base
;
528 intr_status
= ioread16(ioaddr
+ IntrStatus
);
529 /* On Rhine-II, Bit 3 indicates Tx descriptor write-back race. */
530 if (rp
->quirks
& rqStatusWBRace
)
531 intr_status
|= ioread8(ioaddr
+ IntrStatus2
) << 16;
536 * Get power related registers into sane state.
537 * Notify user about past WOL event.
539 static void rhine_power_init(struct net_device
*dev
)
541 struct rhine_private
*rp
= netdev_priv(dev
);
542 void __iomem
*ioaddr
= rp
->base
;
545 if (rp
->quirks
& rqWOL
) {
546 /* Make sure chip is in power state D0 */
547 iowrite8(ioread8(ioaddr
+ StickyHW
) & 0xFC, ioaddr
+ StickyHW
);
549 /* Disable "force PME-enable" */
550 iowrite8(0x80, ioaddr
+ WOLcgClr
);
552 /* Clear power-event config bits (WOL) */
553 iowrite8(0xFF, ioaddr
+ WOLcrClr
);
554 /* More recent cards can manage two additional patterns */
555 if (rp
->quirks
& rq6patterns
)
556 iowrite8(0x03, ioaddr
+ WOLcrClr1
);
558 /* Save power-event status bits */
559 wolstat
= ioread8(ioaddr
+ PwrcsrSet
);
560 if (rp
->quirks
& rq6patterns
)
561 wolstat
|= (ioread8(ioaddr
+ PwrcsrSet1
) & 0x03) << 8;
563 /* Clear power-event status bits */
564 iowrite8(0xFF, ioaddr
+ PwrcsrClr
);
565 if (rp
->quirks
& rq6patterns
)
566 iowrite8(0x03, ioaddr
+ PwrcsrClr1
);
572 reason
= "Magic packet";
575 reason
= "Link went up";
578 reason
= "Link went down";
581 reason
= "Unicast packet";
584 reason
= "Multicast/broadcast packet";
589 printk(KERN_INFO
"%s: Woke system up. Reason: %s.\n",
595 static void rhine_chip_reset(struct net_device
*dev
)
597 struct rhine_private
*rp
= netdev_priv(dev
);
598 void __iomem
*ioaddr
= rp
->base
;
600 iowrite8(Cmd1Reset
, ioaddr
+ ChipCmd1
);
603 if (ioread8(ioaddr
+ ChipCmd1
) & Cmd1Reset
) {
604 printk(KERN_INFO
"%s: Reset not complete yet. "
605 "Trying harder.\n", DRV_NAME
);
608 if (rp
->quirks
& rqForceReset
)
609 iowrite8(0x40, ioaddr
+ MiscCmd
);
611 /* Reset can take somewhat longer (rare) */
612 RHINE_WAIT_FOR(!(ioread8(ioaddr
+ ChipCmd1
) & Cmd1Reset
));
616 printk(KERN_INFO
"%s: Reset %s.\n", dev
->name
,
617 (ioread8(ioaddr
+ ChipCmd1
) & Cmd1Reset
) ?
618 "failed" : "succeeded");
622 static void enable_mmio(long pioaddr
, u32 quirks
)
625 if (quirks
& rqRhineI
) {
626 /* More recent docs say that this bit is reserved ... */
627 n
= inb(pioaddr
+ ConfigA
) | 0x20;
628 outb(n
, pioaddr
+ ConfigA
);
630 n
= inb(pioaddr
+ ConfigD
) | 0x80;
631 outb(n
, pioaddr
+ ConfigD
);
637 * Loads bytes 0x00-0x05, 0x6E-0x6F, 0x78-0x7B from EEPROM
638 * (plus 0x6C for Rhine-I/II)
640 static void __devinit
rhine_reload_eeprom(long pioaddr
, struct net_device
*dev
)
642 struct rhine_private
*rp
= netdev_priv(dev
);
643 void __iomem
*ioaddr
= rp
->base
;
645 outb(0x20, pioaddr
+ MACRegEEcsr
);
646 RHINE_WAIT_FOR(!(inb(pioaddr
+ MACRegEEcsr
) & 0x20));
650 * Reloading from EEPROM overwrites ConfigA-D, so we must re-enable
651 * MMIO. If reloading EEPROM was done first this could be avoided, but
652 * it is not known if that still works with the "win98-reboot" problem.
654 enable_mmio(pioaddr
, rp
->quirks
);
657 /* Turn off EEPROM-controlled wake-up (magic packet) */
658 if (rp
->quirks
& rqWOL
)
659 iowrite8(ioread8(ioaddr
+ ConfigA
) & 0xFC, ioaddr
+ ConfigA
);
663 #ifdef CONFIG_NET_POLL_CONTROLLER
664 static void rhine_poll(struct net_device
*dev
)
666 disable_irq(dev
->irq
);
667 rhine_interrupt(dev
->irq
, (void *)dev
, NULL
);
668 enable_irq(dev
->irq
);
672 static void rhine_hw_init(struct net_device
*dev
, long pioaddr
)
674 struct rhine_private
*rp
= netdev_priv(dev
);
676 /* Reset the chip to erase previous misconfiguration. */
677 rhine_chip_reset(dev
);
679 /* Rhine-I needs extra time to recuperate before EEPROM reload */
680 if (rp
->quirks
& rqRhineI
)
683 /* Reload EEPROM controlled bytes cleared by soft reset */
684 rhine_reload_eeprom(pioaddr
, dev
);
687 static int __devinit
rhine_init_one(struct pci_dev
*pdev
,
688 const struct pci_device_id
*ent
)
690 struct net_device
*dev
;
691 struct rhine_private
*rp
;
697 void __iomem
*ioaddr
;
706 /* when built into the kernel, we only print version if device is found */
708 static int printed_version
;
709 if (!printed_version
++)
713 pci_read_config_byte(pdev
, PCI_REVISION_ID
, &pci_rev
);
719 if (pci_rev
< VTunknown0
) {
723 else if (pci_rev
>= VT6102
) {
724 quirks
= rqWOL
| rqForceReset
;
725 if (pci_rev
< VT6105
) {
727 quirks
|= rqStatusWBRace
; /* Rhine-II exclusive */
730 phy_id
= 1; /* Integrated PHY, phy_id fixed to 1 */
731 if (pci_rev
>= VT6105_B0
)
732 quirks
|= rq6patterns
;
733 if (pci_rev
< VT6105M
)
736 name
= "Rhine III (Management Adapter)";
740 rc
= pci_enable_device(pdev
);
744 /* this should always be supported */
745 rc
= pci_set_dma_mask(pdev
, DMA_32BIT_MASK
);
747 printk(KERN_ERR
"32-bit PCI DMA addresses not supported by "
753 if ((pci_resource_len(pdev
, 0) < io_size
) ||
754 (pci_resource_len(pdev
, 1) < io_size
)) {
756 printk(KERN_ERR
"Insufficient PCI resources, aborting\n");
760 pioaddr
= pci_resource_start(pdev
, 0);
761 memaddr
= pci_resource_start(pdev
, 1);
763 pci_set_master(pdev
);
765 dev
= alloc_etherdev(sizeof(struct rhine_private
));
768 printk(KERN_ERR
"alloc_etherdev failed\n");
771 SET_MODULE_OWNER(dev
);
772 SET_NETDEV_DEV(dev
, &pdev
->dev
);
774 rp
= netdev_priv(dev
);
776 rp
->pioaddr
= pioaddr
;
779 rc
= pci_request_regions(pdev
, DRV_NAME
);
781 goto err_out_free_netdev
;
783 ioaddr
= pci_iomap(pdev
, bar
, io_size
);
786 printk(KERN_ERR
"ioremap failed for device %s, region 0x%X "
787 "@ 0x%lX\n", pci_name(pdev
), io_size
, memaddr
);
788 goto err_out_free_res
;
792 enable_mmio(pioaddr
, quirks
);
794 /* Check that selected MMIO registers match the PIO ones */
796 while (mmio_verify_registers
[i
]) {
797 int reg
= mmio_verify_registers
[i
++];
798 unsigned char a
= inb(pioaddr
+reg
);
799 unsigned char b
= readb(ioaddr
+reg
);
802 printk(KERN_ERR
"MMIO do not match PIO [%02x] "
803 "(%02x != %02x)\n", reg
, a
, b
);
807 #endif /* USE_MMIO */
809 dev
->base_addr
= (unsigned long)ioaddr
;
812 /* Get chip registers into a sane state */
813 rhine_power_init(dev
);
814 rhine_hw_init(dev
, pioaddr
);
816 for (i
= 0; i
< 6; i
++)
817 dev
->dev_addr
[i
] = ioread8(ioaddr
+ StationAddr
+ i
);
818 memcpy(dev
->perm_addr
, dev
->dev_addr
, dev
->addr_len
);
820 if (!is_valid_ether_addr(dev
->perm_addr
)) {
822 printk(KERN_ERR
"Invalid MAC address\n");
826 /* For Rhine-I/II, phy_id is loaded from EEPROM */
828 phy_id
= ioread8(ioaddr
+ 0x6C);
830 dev
->irq
= pdev
->irq
;
832 spin_lock_init(&rp
->lock
);
833 rp
->mii_if
.dev
= dev
;
834 rp
->mii_if
.mdio_read
= mdio_read
;
835 rp
->mii_if
.mdio_write
= mdio_write
;
836 rp
->mii_if
.phy_id_mask
= 0x1f;
837 rp
->mii_if
.reg_num_mask
= 0x1f;
839 /* The chip-specific entries in the device structure. */
840 dev
->open
= rhine_open
;
841 dev
->hard_start_xmit
= rhine_start_tx
;
842 dev
->stop
= rhine_close
;
843 dev
->get_stats
= rhine_get_stats
;
844 dev
->set_multicast_list
= rhine_set_rx_mode
;
845 dev
->do_ioctl
= netdev_ioctl
;
846 dev
->ethtool_ops
= &netdev_ethtool_ops
;
847 dev
->tx_timeout
= rhine_tx_timeout
;
848 dev
->watchdog_timeo
= TX_TIMEOUT
;
849 #ifdef CONFIG_NET_POLL_CONTROLLER
850 dev
->poll_controller
= rhine_poll
;
852 if (rp
->quirks
& rqRhineI
)
853 dev
->features
|= NETIF_F_SG
|NETIF_F_HW_CSUM
;
855 /* dev->name not defined before register_netdev()! */
856 rc
= register_netdev(dev
);
860 printk(KERN_INFO
"%s: VIA %s at 0x%lx, ",
869 for (i
= 0; i
< 5; i
++)
870 printk("%2.2x:", dev
->dev_addr
[i
]);
871 printk("%2.2x, IRQ %d.\n", dev
->dev_addr
[i
], pdev
->irq
);
873 pci_set_drvdata(pdev
, dev
);
877 int mii_status
= mdio_read(dev
, phy_id
, 1);
878 mii_cmd
= mdio_read(dev
, phy_id
, MII_BMCR
) & ~BMCR_ISOLATE
;
879 mdio_write(dev
, phy_id
, MII_BMCR
, mii_cmd
);
880 if (mii_status
!= 0xffff && mii_status
!= 0x0000) {
881 rp
->mii_if
.advertising
= mdio_read(dev
, phy_id
, 4);
882 printk(KERN_INFO
"%s: MII PHY found at address "
883 "%d, status 0x%4.4x advertising %4.4x "
884 "Link %4.4x.\n", dev
->name
, phy_id
,
885 mii_status
, rp
->mii_if
.advertising
,
886 mdio_read(dev
, phy_id
, 5));
888 /* set IFF_RUNNING */
889 if (mii_status
& BMSR_LSTATUS
)
890 netif_carrier_on(dev
);
892 netif_carrier_off(dev
);
896 rp
->mii_if
.phy_id
= phy_id
;
901 pci_iounmap(pdev
, ioaddr
);
903 pci_release_regions(pdev
);
910 static int alloc_ring(struct net_device
* dev
)
912 struct rhine_private
*rp
= netdev_priv(dev
);
916 ring
= pci_alloc_consistent(rp
->pdev
,
917 RX_RING_SIZE
* sizeof(struct rx_desc
) +
918 TX_RING_SIZE
* sizeof(struct tx_desc
),
921 printk(KERN_ERR
"Could not allocate DMA memory.\n");
924 if (rp
->quirks
& rqRhineI
) {
925 rp
->tx_bufs
= pci_alloc_consistent(rp
->pdev
,
926 PKT_BUF_SZ
* TX_RING_SIZE
,
928 if (rp
->tx_bufs
== NULL
) {
929 pci_free_consistent(rp
->pdev
,
930 RX_RING_SIZE
* sizeof(struct rx_desc
) +
931 TX_RING_SIZE
* sizeof(struct tx_desc
),
938 rp
->tx_ring
= ring
+ RX_RING_SIZE
* sizeof(struct rx_desc
);
939 rp
->rx_ring_dma
= ring_dma
;
940 rp
->tx_ring_dma
= ring_dma
+ RX_RING_SIZE
* sizeof(struct rx_desc
);
945 static void free_ring(struct net_device
* dev
)
947 struct rhine_private
*rp
= netdev_priv(dev
);
949 pci_free_consistent(rp
->pdev
,
950 RX_RING_SIZE
* sizeof(struct rx_desc
) +
951 TX_RING_SIZE
* sizeof(struct tx_desc
),
952 rp
->rx_ring
, rp
->rx_ring_dma
);
956 pci_free_consistent(rp
->pdev
, PKT_BUF_SZ
* TX_RING_SIZE
,
957 rp
->tx_bufs
, rp
->tx_bufs_dma
);
963 static void alloc_rbufs(struct net_device
*dev
)
965 struct rhine_private
*rp
= netdev_priv(dev
);
969 rp
->dirty_rx
= rp
->cur_rx
= 0;
971 rp
->rx_buf_sz
= (dev
->mtu
<= 1500 ? PKT_BUF_SZ
: dev
->mtu
+ 32);
972 rp
->rx_head_desc
= &rp
->rx_ring
[0];
973 next
= rp
->rx_ring_dma
;
975 /* Init the ring entries */
976 for (i
= 0; i
< RX_RING_SIZE
; i
++) {
977 rp
->rx_ring
[i
].rx_status
= 0;
978 rp
->rx_ring
[i
].desc_length
= cpu_to_le32(rp
->rx_buf_sz
);
979 next
+= sizeof(struct rx_desc
);
980 rp
->rx_ring
[i
].next_desc
= cpu_to_le32(next
);
981 rp
->rx_skbuff
[i
] = NULL
;
983 /* Mark the last entry as wrapping the ring. */
984 rp
->rx_ring
[i
-1].next_desc
= cpu_to_le32(rp
->rx_ring_dma
);
986 /* Fill in the Rx buffers. Handle allocation failure gracefully. */
987 for (i
= 0; i
< RX_RING_SIZE
; i
++) {
988 struct sk_buff
*skb
= dev_alloc_skb(rp
->rx_buf_sz
);
989 rp
->rx_skbuff
[i
] = skb
;
992 skb
->dev
= dev
; /* Mark as being used by this device. */
994 rp
->rx_skbuff_dma
[i
] =
995 pci_map_single(rp
->pdev
, skb
->data
, rp
->rx_buf_sz
,
998 rp
->rx_ring
[i
].addr
= cpu_to_le32(rp
->rx_skbuff_dma
[i
]);
999 rp
->rx_ring
[i
].rx_status
= cpu_to_le32(DescOwn
);
1001 rp
->dirty_rx
= (unsigned int)(i
- RX_RING_SIZE
);
1004 static void free_rbufs(struct net_device
* dev
)
1006 struct rhine_private
*rp
= netdev_priv(dev
);
1009 /* Free all the skbuffs in the Rx queue. */
1010 for (i
= 0; i
< RX_RING_SIZE
; i
++) {
1011 rp
->rx_ring
[i
].rx_status
= 0;
1012 rp
->rx_ring
[i
].addr
= cpu_to_le32(0xBADF00D0); /* An invalid address. */
1013 if (rp
->rx_skbuff
[i
]) {
1014 pci_unmap_single(rp
->pdev
,
1015 rp
->rx_skbuff_dma
[i
],
1016 rp
->rx_buf_sz
, PCI_DMA_FROMDEVICE
);
1017 dev_kfree_skb(rp
->rx_skbuff
[i
]);
1019 rp
->rx_skbuff
[i
] = NULL
;
1023 static void alloc_tbufs(struct net_device
* dev
)
1025 struct rhine_private
*rp
= netdev_priv(dev
);
1029 rp
->dirty_tx
= rp
->cur_tx
= 0;
1030 next
= rp
->tx_ring_dma
;
1031 for (i
= 0; i
< TX_RING_SIZE
; i
++) {
1032 rp
->tx_skbuff
[i
] = NULL
;
1033 rp
->tx_ring
[i
].tx_status
= 0;
1034 rp
->tx_ring
[i
].desc_length
= cpu_to_le32(TXDESC
);
1035 next
+= sizeof(struct tx_desc
);
1036 rp
->tx_ring
[i
].next_desc
= cpu_to_le32(next
);
1037 if (rp
->quirks
& rqRhineI
)
1038 rp
->tx_buf
[i
] = &rp
->tx_bufs
[i
* PKT_BUF_SZ
];
1040 rp
->tx_ring
[i
-1].next_desc
= cpu_to_le32(rp
->tx_ring_dma
);
1044 static void free_tbufs(struct net_device
* dev
)
1046 struct rhine_private
*rp
= netdev_priv(dev
);
1049 for (i
= 0; i
< TX_RING_SIZE
; i
++) {
1050 rp
->tx_ring
[i
].tx_status
= 0;
1051 rp
->tx_ring
[i
].desc_length
= cpu_to_le32(TXDESC
);
1052 rp
->tx_ring
[i
].addr
= cpu_to_le32(0xBADF00D0); /* An invalid address. */
1053 if (rp
->tx_skbuff
[i
]) {
1054 if (rp
->tx_skbuff_dma
[i
]) {
1055 pci_unmap_single(rp
->pdev
,
1056 rp
->tx_skbuff_dma
[i
],
1057 rp
->tx_skbuff
[i
]->len
,
1060 dev_kfree_skb(rp
->tx_skbuff
[i
]);
1062 rp
->tx_skbuff
[i
] = NULL
;
1063 rp
->tx_buf
[i
] = NULL
;
1067 static void rhine_check_media(struct net_device
*dev
, unsigned int init_media
)
1069 struct rhine_private
*rp
= netdev_priv(dev
);
1070 void __iomem
*ioaddr
= rp
->base
;
1072 mii_check_media(&rp
->mii_if
, debug
, init_media
);
1074 if (rp
->mii_if
.full_duplex
)
1075 iowrite8(ioread8(ioaddr
+ ChipCmd1
) | Cmd1FDuplex
,
1078 iowrite8(ioread8(ioaddr
+ ChipCmd1
) & ~Cmd1FDuplex
,
1081 printk(KERN_INFO
"%s: force_media %d, carrier %d\n", dev
->name
,
1082 rp
->mii_if
.force_media
, netif_carrier_ok(dev
));
1085 /* Called after status of force_media possibly changed */
1086 static void rhine_set_carrier(struct mii_if_info
*mii
)
1088 if (mii
->force_media
) {
1089 /* autoneg is off: Link is always assumed to be up */
1090 if (!netif_carrier_ok(mii
->dev
))
1091 netif_carrier_on(mii
->dev
);
1093 else /* Let MMI library update carrier status */
1094 rhine_check_media(mii
->dev
, 0);
1096 printk(KERN_INFO
"%s: force_media %d, carrier %d\n",
1097 mii
->dev
->name
, mii
->force_media
,
1098 netif_carrier_ok(mii
->dev
));
1101 static void init_registers(struct net_device
*dev
)
1103 struct rhine_private
*rp
= netdev_priv(dev
);
1104 void __iomem
*ioaddr
= rp
->base
;
1107 for (i
= 0; i
< 6; i
++)
1108 iowrite8(dev
->dev_addr
[i
], ioaddr
+ StationAddr
+ i
);
1110 /* Initialize other registers. */
1111 iowrite16(0x0006, ioaddr
+ PCIBusConfig
); /* Tune configuration??? */
1112 /* Configure initial FIFO thresholds. */
1113 iowrite8(0x20, ioaddr
+ TxConfig
);
1114 rp
->tx_thresh
= 0x20;
1115 rp
->rx_thresh
= 0x60; /* Written in rhine_set_rx_mode(). */
1117 iowrite32(rp
->rx_ring_dma
, ioaddr
+ RxRingPtr
);
1118 iowrite32(rp
->tx_ring_dma
, ioaddr
+ TxRingPtr
);
1120 rhine_set_rx_mode(dev
);
1122 /* Enable interrupts by setting the interrupt mask. */
1123 iowrite16(IntrRxDone
| IntrRxErr
| IntrRxEmpty
| IntrRxOverflow
|
1124 IntrRxDropped
| IntrRxNoBuf
| IntrTxAborted
|
1125 IntrTxDone
| IntrTxError
| IntrTxUnderrun
|
1126 IntrPCIErr
| IntrStatsMax
| IntrLinkChange
,
1127 ioaddr
+ IntrEnable
);
1129 iowrite16(CmdStart
| CmdTxOn
| CmdRxOn
| (Cmd1NoTxPoll
<< 8),
1131 rhine_check_media(dev
, 1);
1134 /* Enable MII link status auto-polling (required for IntrLinkChange) */
1135 static void rhine_enable_linkmon(void __iomem
*ioaddr
)
1137 iowrite8(0, ioaddr
+ MIICmd
);
1138 iowrite8(MII_BMSR
, ioaddr
+ MIIRegAddr
);
1139 iowrite8(0x80, ioaddr
+ MIICmd
);
1141 RHINE_WAIT_FOR((ioread8(ioaddr
+ MIIRegAddr
) & 0x20));
1143 iowrite8(MII_BMSR
| 0x40, ioaddr
+ MIIRegAddr
);
1146 /* Disable MII link status auto-polling (required for MDIO access) */
1147 static void rhine_disable_linkmon(void __iomem
*ioaddr
, u32 quirks
)
1149 iowrite8(0, ioaddr
+ MIICmd
);
1151 if (quirks
& rqRhineI
) {
1152 iowrite8(0x01, ioaddr
+ MIIRegAddr
); // MII_BMSR
1154 /* Can be called from ISR. Evil. */
1157 /* 0x80 must be set immediately before turning it off */
1158 iowrite8(0x80, ioaddr
+ MIICmd
);
1160 RHINE_WAIT_FOR(ioread8(ioaddr
+ MIIRegAddr
) & 0x20);
1162 /* Heh. Now clear 0x80 again. */
1163 iowrite8(0, ioaddr
+ MIICmd
);
1166 RHINE_WAIT_FOR(ioread8(ioaddr
+ MIIRegAddr
) & 0x80);
1169 /* Read and write over the MII Management Data I/O (MDIO) interface. */
1171 static int mdio_read(struct net_device
*dev
, int phy_id
, int regnum
)
1173 struct rhine_private
*rp
= netdev_priv(dev
);
1174 void __iomem
*ioaddr
= rp
->base
;
1177 rhine_disable_linkmon(ioaddr
, rp
->quirks
);
1179 /* rhine_disable_linkmon already cleared MIICmd */
1180 iowrite8(phy_id
, ioaddr
+ MIIPhyAddr
);
1181 iowrite8(regnum
, ioaddr
+ MIIRegAddr
);
1182 iowrite8(0x40, ioaddr
+ MIICmd
); /* Trigger read */
1183 RHINE_WAIT_FOR(!(ioread8(ioaddr
+ MIICmd
) & 0x40));
1184 result
= ioread16(ioaddr
+ MIIData
);
1186 rhine_enable_linkmon(ioaddr
);
1190 static void mdio_write(struct net_device
*dev
, int phy_id
, int regnum
, int value
)
1192 struct rhine_private
*rp
= netdev_priv(dev
);
1193 void __iomem
*ioaddr
= rp
->base
;
1195 rhine_disable_linkmon(ioaddr
, rp
->quirks
);
1197 /* rhine_disable_linkmon already cleared MIICmd */
1198 iowrite8(phy_id
, ioaddr
+ MIIPhyAddr
);
1199 iowrite8(regnum
, ioaddr
+ MIIRegAddr
);
1200 iowrite16(value
, ioaddr
+ MIIData
);
1201 iowrite8(0x20, ioaddr
+ MIICmd
); /* Trigger write */
1202 RHINE_WAIT_FOR(!(ioread8(ioaddr
+ MIICmd
) & 0x20));
1204 rhine_enable_linkmon(ioaddr
);
1207 static int rhine_open(struct net_device
*dev
)
1209 struct rhine_private
*rp
= netdev_priv(dev
);
1210 void __iomem
*ioaddr
= rp
->base
;
1213 rc
= request_irq(rp
->pdev
->irq
, &rhine_interrupt
, SA_SHIRQ
, dev
->name
,
1219 printk(KERN_DEBUG
"%s: rhine_open() irq %d.\n",
1220 dev
->name
, rp
->pdev
->irq
);
1222 rc
= alloc_ring(dev
);
1224 free_irq(rp
->pdev
->irq
, dev
);
1229 rhine_chip_reset(dev
);
1230 init_registers(dev
);
1232 printk(KERN_DEBUG
"%s: Done rhine_open(), status %4.4x "
1233 "MII status: %4.4x.\n",
1234 dev
->name
, ioread16(ioaddr
+ ChipCmd
),
1235 mdio_read(dev
, rp
->mii_if
.phy_id
, MII_BMSR
));
1237 netif_start_queue(dev
);
1242 static void rhine_tx_timeout(struct net_device
*dev
)
1244 struct rhine_private
*rp
= netdev_priv(dev
);
1245 void __iomem
*ioaddr
= rp
->base
;
1247 printk(KERN_WARNING
"%s: Transmit timed out, status %4.4x, PHY status "
1248 "%4.4x, resetting...\n",
1249 dev
->name
, ioread16(ioaddr
+ IntrStatus
),
1250 mdio_read(dev
, rp
->mii_if
.phy_id
, MII_BMSR
));
1252 /* protect against concurrent rx interrupts */
1253 disable_irq(rp
->pdev
->irq
);
1255 spin_lock(&rp
->lock
);
1257 /* clear all descriptors */
1263 /* Reinitialize the hardware. */
1264 rhine_chip_reset(dev
);
1265 init_registers(dev
);
1267 spin_unlock(&rp
->lock
);
1268 enable_irq(rp
->pdev
->irq
);
1270 dev
->trans_start
= jiffies
;
1271 rp
->stats
.tx_errors
++;
1272 netif_wake_queue(dev
);
1275 static int rhine_start_tx(struct sk_buff
*skb
, struct net_device
*dev
)
1277 struct rhine_private
*rp
= netdev_priv(dev
);
1278 void __iomem
*ioaddr
= rp
->base
;
1281 /* Caution: the write order is important here, set the field
1282 with the "ownership" bits last. */
1284 /* Calculate the next Tx descriptor entry. */
1285 entry
= rp
->cur_tx
% TX_RING_SIZE
;
1287 if (skb
->len
< ETH_ZLEN
) {
1288 skb
= skb_padto(skb
, ETH_ZLEN
);
1293 rp
->tx_skbuff
[entry
] = skb
;
1295 if ((rp
->quirks
& rqRhineI
) &&
1296 (((unsigned long)skb
->data
& 3) || skb_shinfo(skb
)->nr_frags
!= 0 || skb
->ip_summed
== CHECKSUM_HW
)) {
1297 /* Must use alignment buffer. */
1298 if (skb
->len
> PKT_BUF_SZ
) {
1299 /* packet too long, drop it */
1301 rp
->tx_skbuff
[entry
] = NULL
;
1302 rp
->stats
.tx_dropped
++;
1306 /* Padding is not copied and so must be redone. */
1307 skb_copy_and_csum_dev(skb
, rp
->tx_buf
[entry
]);
1308 if (skb
->len
< ETH_ZLEN
)
1309 memset(rp
->tx_buf
[entry
] + skb
->len
, 0,
1310 ETH_ZLEN
- skb
->len
);
1311 rp
->tx_skbuff_dma
[entry
] = 0;
1312 rp
->tx_ring
[entry
].addr
= cpu_to_le32(rp
->tx_bufs_dma
+
1313 (rp
->tx_buf
[entry
] -
1316 rp
->tx_skbuff_dma
[entry
] =
1317 pci_map_single(rp
->pdev
, skb
->data
, skb
->len
,
1319 rp
->tx_ring
[entry
].addr
= cpu_to_le32(rp
->tx_skbuff_dma
[entry
]);
1322 rp
->tx_ring
[entry
].desc_length
=
1323 cpu_to_le32(TXDESC
| (skb
->len
>= ETH_ZLEN
? skb
->len
: ETH_ZLEN
));
1326 spin_lock_irq(&rp
->lock
);
1328 rp
->tx_ring
[entry
].tx_status
= cpu_to_le32(DescOwn
);
1333 /* Non-x86 Todo: explicitly flush cache lines here. */
1335 /* Wake the potentially-idle transmit channel */
1336 iowrite8(ioread8(ioaddr
+ ChipCmd1
) | Cmd1TxDemand
,
1340 if (rp
->cur_tx
== rp
->dirty_tx
+ TX_QUEUE_LEN
)
1341 netif_stop_queue(dev
);
1343 dev
->trans_start
= jiffies
;
1345 spin_unlock_irq(&rp
->lock
);
1348 printk(KERN_DEBUG
"%s: Transmit frame #%d queued in slot %d.\n",
1349 dev
->name
, rp
->cur_tx
-1, entry
);
1354 /* The interrupt handler does all of the Rx thread work and cleans up
1355 after the Tx thread. */
1356 static irqreturn_t
rhine_interrupt(int irq
, void *dev_instance
, struct pt_regs
*rgs
)
1358 struct net_device
*dev
= dev_instance
;
1359 struct rhine_private
*rp
= netdev_priv(dev
);
1360 void __iomem
*ioaddr
= rp
->base
;
1362 int boguscnt
= max_interrupt_work
;
1365 while ((intr_status
= get_intr_status(dev
))) {
1368 /* Acknowledge all of the current interrupt sources ASAP. */
1369 if (intr_status
& IntrTxDescRace
)
1370 iowrite8(0x08, ioaddr
+ IntrStatus2
);
1371 iowrite16(intr_status
& 0xffff, ioaddr
+ IntrStatus
);
1375 printk(KERN_DEBUG
"%s: Interrupt, status %8.8x.\n",
1376 dev
->name
, intr_status
);
1378 if (intr_status
& (IntrRxDone
| IntrRxErr
| IntrRxDropped
|
1379 IntrRxWakeUp
| IntrRxEmpty
| IntrRxNoBuf
))
1382 if (intr_status
& (IntrTxErrSummary
| IntrTxDone
)) {
1383 if (intr_status
& IntrTxErrSummary
) {
1384 /* Avoid scavenging before Tx engine turned off */
1385 RHINE_WAIT_FOR(!(ioread8(ioaddr
+ChipCmd
) & CmdTxOn
));
1387 ioread8(ioaddr
+ChipCmd
) & CmdTxOn
)
1388 printk(KERN_WARNING
"%s: "
1389 "rhine_interrupt() Tx engine"
1390 "still on.\n", dev
->name
);
1395 /* Abnormal error summary/uncommon events handlers. */
1396 if (intr_status
& (IntrPCIErr
| IntrLinkChange
|
1397 IntrStatsMax
| IntrTxError
| IntrTxAborted
|
1398 IntrTxUnderrun
| IntrTxDescRace
))
1399 rhine_error(dev
, intr_status
);
1401 if (--boguscnt
< 0) {
1402 printk(KERN_WARNING
"%s: Too much work at interrupt, "
1404 dev
->name
, intr_status
);
1410 printk(KERN_DEBUG
"%s: exiting interrupt, status=%8.8x.\n",
1411 dev
->name
, ioread16(ioaddr
+ IntrStatus
));
1412 return IRQ_RETVAL(handled
);
1415 /* This routine is logically part of the interrupt handler, but isolated
1417 static void rhine_tx(struct net_device
*dev
)
1419 struct rhine_private
*rp
= netdev_priv(dev
);
1420 int txstatus
= 0, entry
= rp
->dirty_tx
% TX_RING_SIZE
;
1422 spin_lock(&rp
->lock
);
1424 /* find and cleanup dirty tx descriptors */
1425 while (rp
->dirty_tx
!= rp
->cur_tx
) {
1426 txstatus
= le32_to_cpu(rp
->tx_ring
[entry
].tx_status
);
1428 printk(KERN_DEBUG
"Tx scavenge %d status %8.8x.\n",
1430 if (txstatus
& DescOwn
)
1432 if (txstatus
& 0x8000) {
1434 printk(KERN_DEBUG
"%s: Transmit error, "
1435 "Tx status %8.8x.\n",
1436 dev
->name
, txstatus
);
1437 rp
->stats
.tx_errors
++;
1438 if (txstatus
& 0x0400) rp
->stats
.tx_carrier_errors
++;
1439 if (txstatus
& 0x0200) rp
->stats
.tx_window_errors
++;
1440 if (txstatus
& 0x0100) rp
->stats
.tx_aborted_errors
++;
1441 if (txstatus
& 0x0080) rp
->stats
.tx_heartbeat_errors
++;
1442 if (((rp
->quirks
& rqRhineI
) && txstatus
& 0x0002) ||
1443 (txstatus
& 0x0800) || (txstatus
& 0x1000)) {
1444 rp
->stats
.tx_fifo_errors
++;
1445 rp
->tx_ring
[entry
].tx_status
= cpu_to_le32(DescOwn
);
1446 break; /* Keep the skb - we try again */
1448 /* Transmitter restarted in 'abnormal' handler. */
1450 if (rp
->quirks
& rqRhineI
)
1451 rp
->stats
.collisions
+= (txstatus
>> 3) & 0x0F;
1453 rp
->stats
.collisions
+= txstatus
& 0x0F;
1455 printk(KERN_DEBUG
"collisions: %1.1x:%1.1x\n",
1456 (txstatus
>> 3) & 0xF,
1458 rp
->stats
.tx_bytes
+= rp
->tx_skbuff
[entry
]->len
;
1459 rp
->stats
.tx_packets
++;
1461 /* Free the original skb. */
1462 if (rp
->tx_skbuff_dma
[entry
]) {
1463 pci_unmap_single(rp
->pdev
,
1464 rp
->tx_skbuff_dma
[entry
],
1465 rp
->tx_skbuff
[entry
]->len
,
1468 dev_kfree_skb_irq(rp
->tx_skbuff
[entry
]);
1469 rp
->tx_skbuff
[entry
] = NULL
;
1470 entry
= (++rp
->dirty_tx
) % TX_RING_SIZE
;
1472 if ((rp
->cur_tx
- rp
->dirty_tx
) < TX_QUEUE_LEN
- 4)
1473 netif_wake_queue(dev
);
1475 spin_unlock(&rp
->lock
);
1478 /* This routine is logically part of the interrupt handler, but isolated
1479 for clarity and better register allocation. */
1480 static void rhine_rx(struct net_device
*dev
)
1482 struct rhine_private
*rp
= netdev_priv(dev
);
1483 int entry
= rp
->cur_rx
% RX_RING_SIZE
;
1484 int boguscnt
= rp
->dirty_rx
+ RX_RING_SIZE
- rp
->cur_rx
;
1487 printk(KERN_DEBUG
"%s: rhine_rx(), entry %d status %8.8x.\n",
1489 le32_to_cpu(rp
->rx_head_desc
->rx_status
));
1492 /* If EOP is set on the next entry, it's a new packet. Send it up. */
1493 while (!(rp
->rx_head_desc
->rx_status
& cpu_to_le32(DescOwn
))) {
1494 struct rx_desc
*desc
= rp
->rx_head_desc
;
1495 u32 desc_status
= le32_to_cpu(desc
->rx_status
);
1496 int data_size
= desc_status
>> 16;
1499 printk(KERN_DEBUG
"rhine_rx() status is %8.8x.\n",
1503 if ((desc_status
& (RxWholePkt
| RxErr
)) != RxWholePkt
) {
1504 if ((desc_status
& RxWholePkt
) != RxWholePkt
) {
1505 printk(KERN_WARNING
"%s: Oversized Ethernet "
1506 "frame spanned multiple buffers, entry "
1507 "%#x length %d status %8.8x!\n",
1508 dev
->name
, entry
, data_size
,
1510 printk(KERN_WARNING
"%s: Oversized Ethernet "
1511 "frame %p vs %p.\n", dev
->name
,
1512 rp
->rx_head_desc
, &rp
->rx_ring
[entry
]);
1513 rp
->stats
.rx_length_errors
++;
1514 } else if (desc_status
& RxErr
) {
1515 /* There was a error. */
1517 printk(KERN_DEBUG
"rhine_rx() Rx "
1518 "error was %8.8x.\n",
1520 rp
->stats
.rx_errors
++;
1521 if (desc_status
& 0x0030) rp
->stats
.rx_length_errors
++;
1522 if (desc_status
& 0x0048) rp
->stats
.rx_fifo_errors
++;
1523 if (desc_status
& 0x0004) rp
->stats
.rx_frame_errors
++;
1524 if (desc_status
& 0x0002) {
1525 /* this can also be updated outside the interrupt handler */
1526 spin_lock(&rp
->lock
);
1527 rp
->stats
.rx_crc_errors
++;
1528 spin_unlock(&rp
->lock
);
1532 struct sk_buff
*skb
;
1533 /* Length should omit the CRC */
1534 int pkt_len
= data_size
- 4;
1536 /* Check if the packet is long enough to accept without
1537 copying to a minimally-sized skbuff. */
1538 if (pkt_len
< rx_copybreak
&&
1539 (skb
= dev_alloc_skb(pkt_len
+ 2)) != NULL
) {
1541 skb_reserve(skb
, 2); /* 16 byte align the IP header */
1542 pci_dma_sync_single_for_cpu(rp
->pdev
,
1543 rp
->rx_skbuff_dma
[entry
],
1545 PCI_DMA_FROMDEVICE
);
1547 eth_copy_and_sum(skb
,
1548 rp
->rx_skbuff
[entry
]->data
,
1550 skb_put(skb
, pkt_len
);
1551 pci_dma_sync_single_for_device(rp
->pdev
,
1552 rp
->rx_skbuff_dma
[entry
],
1554 PCI_DMA_FROMDEVICE
);
1556 skb
= rp
->rx_skbuff
[entry
];
1558 printk(KERN_ERR
"%s: Inconsistent Rx "
1559 "descriptor chain.\n",
1563 rp
->rx_skbuff
[entry
] = NULL
;
1564 skb_put(skb
, pkt_len
);
1565 pci_unmap_single(rp
->pdev
,
1566 rp
->rx_skbuff_dma
[entry
],
1568 PCI_DMA_FROMDEVICE
);
1570 skb
->protocol
= eth_type_trans(skb
, dev
);
1572 dev
->last_rx
= jiffies
;
1573 rp
->stats
.rx_bytes
+= pkt_len
;
1574 rp
->stats
.rx_packets
++;
1576 entry
= (++rp
->cur_rx
) % RX_RING_SIZE
;
1577 rp
->rx_head_desc
= &rp
->rx_ring
[entry
];
1580 /* Refill the Rx ring buffers. */
1581 for (; rp
->cur_rx
- rp
->dirty_rx
> 0; rp
->dirty_rx
++) {
1582 struct sk_buff
*skb
;
1583 entry
= rp
->dirty_rx
% RX_RING_SIZE
;
1584 if (rp
->rx_skbuff
[entry
] == NULL
) {
1585 skb
= dev_alloc_skb(rp
->rx_buf_sz
);
1586 rp
->rx_skbuff
[entry
] = skb
;
1588 break; /* Better luck next round. */
1589 skb
->dev
= dev
; /* Mark as being used by this device. */
1590 rp
->rx_skbuff_dma
[entry
] =
1591 pci_map_single(rp
->pdev
, skb
->data
,
1593 PCI_DMA_FROMDEVICE
);
1594 rp
->rx_ring
[entry
].addr
= cpu_to_le32(rp
->rx_skbuff_dma
[entry
]);
1596 rp
->rx_ring
[entry
].rx_status
= cpu_to_le32(DescOwn
);
1601 * Clears the "tally counters" for CRC errors and missed frames(?).
1602 * It has been reported that some chips need a write of 0 to clear
1603 * these, for others the counters are set to 1 when written to and
1604 * instead cleared when read. So we clear them both ways ...
1606 static inline void clear_tally_counters(void __iomem
*ioaddr
)
1608 iowrite32(0, ioaddr
+ RxMissed
);
1609 ioread16(ioaddr
+ RxCRCErrs
);
1610 ioread16(ioaddr
+ RxMissed
);
1613 static void rhine_restart_tx(struct net_device
*dev
) {
1614 struct rhine_private
*rp
= netdev_priv(dev
);
1615 void __iomem
*ioaddr
= rp
->base
;
1616 int entry
= rp
->dirty_tx
% TX_RING_SIZE
;
1620 * If new errors occured, we need to sort them out before doing Tx.
1621 * In that case the ISR will be back here RSN anyway.
1623 intr_status
= get_intr_status(dev
);
1625 if ((intr_status
& IntrTxErrSummary
) == 0) {
1627 /* We know better than the chip where it should continue. */
1628 iowrite32(rp
->tx_ring_dma
+ entry
* sizeof(struct tx_desc
),
1629 ioaddr
+ TxRingPtr
);
1631 iowrite8(ioread8(ioaddr
+ ChipCmd
) | CmdTxOn
,
1633 iowrite8(ioread8(ioaddr
+ ChipCmd1
) | Cmd1TxDemand
,
1638 /* This should never happen */
1640 printk(KERN_WARNING
"%s: rhine_restart_tx() "
1641 "Another error occured %8.8x.\n",
1642 dev
->name
, intr_status
);
1647 static void rhine_error(struct net_device
*dev
, int intr_status
)
1649 struct rhine_private
*rp
= netdev_priv(dev
);
1650 void __iomem
*ioaddr
= rp
->base
;
1652 spin_lock(&rp
->lock
);
1654 if (intr_status
& IntrLinkChange
)
1655 rhine_check_media(dev
, 0);
1656 if (intr_status
& IntrStatsMax
) {
1657 rp
->stats
.rx_crc_errors
+= ioread16(ioaddr
+ RxCRCErrs
);
1658 rp
->stats
.rx_missed_errors
+= ioread16(ioaddr
+ RxMissed
);
1659 clear_tally_counters(ioaddr
);
1661 if (intr_status
& IntrTxAborted
) {
1663 printk(KERN_INFO
"%s: Abort %8.8x, frame dropped.\n",
1664 dev
->name
, intr_status
);
1666 if (intr_status
& IntrTxUnderrun
) {
1667 if (rp
->tx_thresh
< 0xE0)
1668 iowrite8(rp
->tx_thresh
+= 0x20, ioaddr
+ TxConfig
);
1670 printk(KERN_INFO
"%s: Transmitter underrun, Tx "
1671 "threshold now %2.2x.\n",
1672 dev
->name
, rp
->tx_thresh
);
1674 if (intr_status
& IntrTxDescRace
) {
1676 printk(KERN_INFO
"%s: Tx descriptor write-back race.\n",
1679 if ((intr_status
& IntrTxError
) &&
1680 (intr_status
& (IntrTxAborted
|
1681 IntrTxUnderrun
| IntrTxDescRace
)) == 0) {
1682 if (rp
->tx_thresh
< 0xE0) {
1683 iowrite8(rp
->tx_thresh
+= 0x20, ioaddr
+ TxConfig
);
1686 printk(KERN_INFO
"%s: Unspecified error. Tx "
1687 "threshold now %2.2x.\n",
1688 dev
->name
, rp
->tx_thresh
);
1690 if (intr_status
& (IntrTxAborted
| IntrTxUnderrun
| IntrTxDescRace
|
1692 rhine_restart_tx(dev
);
1694 if (intr_status
& ~(IntrLinkChange
| IntrStatsMax
| IntrTxUnderrun
|
1695 IntrTxError
| IntrTxAborted
| IntrNormalSummary
|
1698 printk(KERN_ERR
"%s: Something Wicked happened! "
1699 "%8.8x.\n", dev
->name
, intr_status
);
1702 spin_unlock(&rp
->lock
);
1705 static struct net_device_stats
*rhine_get_stats(struct net_device
*dev
)
1707 struct rhine_private
*rp
= netdev_priv(dev
);
1708 void __iomem
*ioaddr
= rp
->base
;
1709 unsigned long flags
;
1711 spin_lock_irqsave(&rp
->lock
, flags
);
1712 rp
->stats
.rx_crc_errors
+= ioread16(ioaddr
+ RxCRCErrs
);
1713 rp
->stats
.rx_missed_errors
+= ioread16(ioaddr
+ RxMissed
);
1714 clear_tally_counters(ioaddr
);
1715 spin_unlock_irqrestore(&rp
->lock
, flags
);
1720 static void rhine_set_rx_mode(struct net_device
*dev
)
1722 struct rhine_private
*rp
= netdev_priv(dev
);
1723 void __iomem
*ioaddr
= rp
->base
;
1724 u32 mc_filter
[2]; /* Multicast hash filter */
1725 u8 rx_mode
; /* Note: 0x02=accept runt, 0x01=accept errs */
1727 if (dev
->flags
& IFF_PROMISC
) { /* Set promiscuous. */
1728 /* Unconditionally log net taps. */
1729 printk(KERN_NOTICE
"%s: Promiscuous mode enabled.\n",
1732 iowrite32(0xffffffff, ioaddr
+ MulticastFilter0
);
1733 iowrite32(0xffffffff, ioaddr
+ MulticastFilter1
);
1734 } else if ((dev
->mc_count
> multicast_filter_limit
)
1735 || (dev
->flags
& IFF_ALLMULTI
)) {
1736 /* Too many to match, or accept all multicasts. */
1737 iowrite32(0xffffffff, ioaddr
+ MulticastFilter0
);
1738 iowrite32(0xffffffff, ioaddr
+ MulticastFilter1
);
1741 struct dev_mc_list
*mclist
;
1743 memset(mc_filter
, 0, sizeof(mc_filter
));
1744 for (i
= 0, mclist
= dev
->mc_list
; mclist
&& i
< dev
->mc_count
;
1745 i
++, mclist
= mclist
->next
) {
1746 int bit_nr
= ether_crc(ETH_ALEN
, mclist
->dmi_addr
) >> 26;
1748 mc_filter
[bit_nr
>> 5] |= 1 << (bit_nr
& 31);
1750 iowrite32(mc_filter
[0], ioaddr
+ MulticastFilter0
);
1751 iowrite32(mc_filter
[1], ioaddr
+ MulticastFilter1
);
1754 iowrite8(rp
->rx_thresh
| rx_mode
, ioaddr
+ RxConfig
);
1757 static void netdev_get_drvinfo(struct net_device
*dev
, struct ethtool_drvinfo
*info
)
1759 struct rhine_private
*rp
= netdev_priv(dev
);
1761 strcpy(info
->driver
, DRV_NAME
);
1762 strcpy(info
->version
, DRV_VERSION
);
1763 strcpy(info
->bus_info
, pci_name(rp
->pdev
));
1766 static int netdev_get_settings(struct net_device
*dev
, struct ethtool_cmd
*cmd
)
1768 struct rhine_private
*rp
= netdev_priv(dev
);
1771 spin_lock_irq(&rp
->lock
);
1772 rc
= mii_ethtool_gset(&rp
->mii_if
, cmd
);
1773 spin_unlock_irq(&rp
->lock
);
1778 static int netdev_set_settings(struct net_device
*dev
, struct ethtool_cmd
*cmd
)
1780 struct rhine_private
*rp
= netdev_priv(dev
);
1783 spin_lock_irq(&rp
->lock
);
1784 rc
= mii_ethtool_sset(&rp
->mii_if
, cmd
);
1785 spin_unlock_irq(&rp
->lock
);
1786 rhine_set_carrier(&rp
->mii_if
);
1791 static int netdev_nway_reset(struct net_device
*dev
)
1793 struct rhine_private
*rp
= netdev_priv(dev
);
1795 return mii_nway_restart(&rp
->mii_if
);
1798 static u32
netdev_get_link(struct net_device
*dev
)
1800 struct rhine_private
*rp
= netdev_priv(dev
);
1802 return mii_link_ok(&rp
->mii_if
);
1805 static u32
netdev_get_msglevel(struct net_device
*dev
)
1810 static void netdev_set_msglevel(struct net_device
*dev
, u32 value
)
1815 static void rhine_get_wol(struct net_device
*dev
, struct ethtool_wolinfo
*wol
)
1817 struct rhine_private
*rp
= netdev_priv(dev
);
1819 if (!(rp
->quirks
& rqWOL
))
1822 spin_lock_irq(&rp
->lock
);
1823 wol
->supported
= WAKE_PHY
| WAKE_MAGIC
|
1824 WAKE_UCAST
| WAKE_MCAST
| WAKE_BCAST
; /* Untested */
1825 wol
->wolopts
= rp
->wolopts
;
1826 spin_unlock_irq(&rp
->lock
);
1829 static int rhine_set_wol(struct net_device
*dev
, struct ethtool_wolinfo
*wol
)
1831 struct rhine_private
*rp
= netdev_priv(dev
);
1832 u32 support
= WAKE_PHY
| WAKE_MAGIC
|
1833 WAKE_UCAST
| WAKE_MCAST
| WAKE_BCAST
; /* Untested */
1835 if (!(rp
->quirks
& rqWOL
))
1838 if (wol
->wolopts
& ~support
)
1841 spin_lock_irq(&rp
->lock
);
1842 rp
->wolopts
= wol
->wolopts
;
1843 spin_unlock_irq(&rp
->lock
);
1848 static struct ethtool_ops netdev_ethtool_ops
= {
1849 .get_drvinfo
= netdev_get_drvinfo
,
1850 .get_settings
= netdev_get_settings
,
1851 .set_settings
= netdev_set_settings
,
1852 .nway_reset
= netdev_nway_reset
,
1853 .get_link
= netdev_get_link
,
1854 .get_msglevel
= netdev_get_msglevel
,
1855 .set_msglevel
= netdev_set_msglevel
,
1856 .get_wol
= rhine_get_wol
,
1857 .set_wol
= rhine_set_wol
,
1858 .get_sg
= ethtool_op_get_sg
,
1859 .get_tx_csum
= ethtool_op_get_tx_csum
,
1860 .get_perm_addr
= ethtool_op_get_perm_addr
,
1863 static int netdev_ioctl(struct net_device
*dev
, struct ifreq
*rq
, int cmd
)
1865 struct rhine_private
*rp
= netdev_priv(dev
);
1868 if (!netif_running(dev
))
1871 spin_lock_irq(&rp
->lock
);
1872 rc
= generic_mii_ioctl(&rp
->mii_if
, if_mii(rq
), cmd
, NULL
);
1873 spin_unlock_irq(&rp
->lock
);
1874 rhine_set_carrier(&rp
->mii_if
);
1879 static int rhine_close(struct net_device
*dev
)
1881 struct rhine_private
*rp
= netdev_priv(dev
);
1882 void __iomem
*ioaddr
= rp
->base
;
1884 spin_lock_irq(&rp
->lock
);
1886 netif_stop_queue(dev
);
1889 printk(KERN_DEBUG
"%s: Shutting down ethercard, "
1890 "status was %4.4x.\n",
1891 dev
->name
, ioread16(ioaddr
+ ChipCmd
));
1893 /* Switch to loopback mode to avoid hardware races. */
1894 iowrite8(rp
->tx_thresh
| 0x02, ioaddr
+ TxConfig
);
1896 /* Disable interrupts by clearing the interrupt mask. */
1897 iowrite16(0x0000, ioaddr
+ IntrEnable
);
1899 /* Stop the chip's Tx and Rx processes. */
1900 iowrite16(CmdStop
, ioaddr
+ ChipCmd
);
1902 spin_unlock_irq(&rp
->lock
);
1904 free_irq(rp
->pdev
->irq
, dev
);
1913 static void __devexit
rhine_remove_one(struct pci_dev
*pdev
)
1915 struct net_device
*dev
= pci_get_drvdata(pdev
);
1916 struct rhine_private
*rp
= netdev_priv(dev
);
1918 unregister_netdev(dev
);
1920 pci_iounmap(pdev
, rp
->base
);
1921 pci_release_regions(pdev
);
1924 pci_disable_device(pdev
);
1925 pci_set_drvdata(pdev
, NULL
);
1928 static void rhine_shutdown (struct pci_dev
*pdev
)
1930 struct net_device
*dev
= pci_get_drvdata(pdev
);
1931 struct rhine_private
*rp
= netdev_priv(dev
);
1932 void __iomem
*ioaddr
= rp
->base
;
1934 if (!(rp
->quirks
& rqWOL
))
1935 return; /* Nothing to do for non-WOL adapters */
1937 rhine_power_init(dev
);
1939 /* Make sure we use pattern 0, 1 and not 4, 5 */
1940 if (rp
->quirks
& rq6patterns
)
1941 iowrite8(0x04, ioaddr
+ 0xA7);
1943 if (rp
->wolopts
& WAKE_MAGIC
) {
1944 iowrite8(WOLmagic
, ioaddr
+ WOLcrSet
);
1946 * Turn EEPROM-controlled wake-up back on -- some hardware may
1947 * not cooperate otherwise.
1949 iowrite8(ioread8(ioaddr
+ ConfigA
) | 0x03, ioaddr
+ ConfigA
);
1952 if (rp
->wolopts
& (WAKE_BCAST
|WAKE_MCAST
))
1953 iowrite8(WOLbmcast
, ioaddr
+ WOLcgSet
);
1955 if (rp
->wolopts
& WAKE_PHY
)
1956 iowrite8(WOLlnkon
| WOLlnkoff
, ioaddr
+ WOLcrSet
);
1958 if (rp
->wolopts
& WAKE_UCAST
)
1959 iowrite8(WOLucast
, ioaddr
+ WOLcrSet
);
1962 /* Enable legacy WOL (for old motherboards) */
1963 iowrite8(0x01, ioaddr
+ PwcfgSet
);
1964 iowrite8(ioread8(ioaddr
+ StickyHW
) | 0x04, ioaddr
+ StickyHW
);
1967 /* Hit power state D3 (sleep) */
1968 iowrite8(ioread8(ioaddr
+ StickyHW
) | 0x03, ioaddr
+ StickyHW
);
1970 /* TODO: Check use of pci_enable_wake() */
1975 static int rhine_suspend(struct pci_dev
*pdev
, pm_message_t state
)
1977 struct net_device
*dev
= pci_get_drvdata(pdev
);
1978 struct rhine_private
*rp
= netdev_priv(dev
);
1979 unsigned long flags
;
1981 if (!netif_running(dev
))
1984 netif_device_detach(dev
);
1985 pci_save_state(pdev
);
1987 spin_lock_irqsave(&rp
->lock
, flags
);
1988 rhine_shutdown(pdev
);
1989 spin_unlock_irqrestore(&rp
->lock
, flags
);
1991 free_irq(dev
->irq
, dev
);
1995 static int rhine_resume(struct pci_dev
*pdev
)
1997 struct net_device
*dev
= pci_get_drvdata(pdev
);
1998 struct rhine_private
*rp
= netdev_priv(dev
);
1999 unsigned long flags
;
2002 if (!netif_running(dev
))
2005 if (request_irq(dev
->irq
, rhine_interrupt
, SA_SHIRQ
, dev
->name
, dev
))
2006 printk(KERN_ERR
"via-rhine %s: request_irq failed\n", dev
->name
);
2008 ret
= pci_set_power_state(pdev
, PCI_D0
);
2010 printk(KERN_INFO
"%s: Entering power state D0 %s (%d).\n",
2011 dev
->name
, ret
? "failed" : "succeeded", ret
);
2013 pci_restore_state(pdev
);
2015 spin_lock_irqsave(&rp
->lock
, flags
);
2017 enable_mmio(rp
->pioaddr
, rp
->quirks
);
2019 rhine_power_init(dev
);
2024 init_registers(dev
);
2025 spin_unlock_irqrestore(&rp
->lock
, flags
);
2027 netif_device_attach(dev
);
2031 #endif /* CONFIG_PM */
2033 static struct pci_driver rhine_driver
= {
2035 .id_table
= rhine_pci_tbl
,
2036 .probe
= rhine_init_one
,
2037 .remove
= __devexit_p(rhine_remove_one
),
2039 .suspend
= rhine_suspend
,
2040 .resume
= rhine_resume
,
2041 #endif /* CONFIG_PM */
2042 .shutdown
= rhine_shutdown
,
2046 static int __init
rhine_init(void)
2048 /* when a module, this is printed whether or not devices are found in probe */
2052 return pci_module_init(&rhine_driver
);
2056 static void __exit
rhine_cleanup(void)
2058 pci_unregister_driver(&rhine_driver
);
2062 module_init(rhine_init
);
2063 module_exit(rhine_cleanup
);