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
28 [link no longer provides useful info -jgarzik]
32 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
34 #define DRV_NAME "via-rhine"
35 #define DRV_VERSION "1.5.1"
36 #define DRV_RELDATE "2010-10-09"
38 #include <linux/types.h>
40 /* A few user-configurable values.
41 These may be modified when a driver module is loaded. */
43 #define RHINE_MSG_DEFAULT \
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;
53 static int rx_copybreak
;
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 */
61 * In case you are looking for 'options[]' or 'full_duplex[]', they
62 * are gone. Use ethtool(8) instead.
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;
70 /* Operational parameters that are set at compile time. */
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 * With BQL support, we can increase TX ring safely.
77 * There are no ill effects from too-large receive rings.
79 #define TX_RING_SIZE 64
80 #define TX_QUEUE_LEN (TX_RING_SIZE - 6) /* Limit ring entries actually used. */
81 #define RX_RING_SIZE 64
83 /* Operational parameters that usually are not changed. */
85 /* Time in jiffies before concluding the transmitter is hung. */
86 #define TX_TIMEOUT (2*HZ)
88 #define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer.*/
90 #include <linux/module.h>
91 #include <linux/moduleparam.h>
92 #include <linux/kernel.h>
93 #include <linux/string.h>
94 #include <linux/timer.h>
95 #include <linux/errno.h>
96 #include <linux/ioport.h>
97 #include <linux/interrupt.h>
98 #include <linux/pci.h>
99 #include <linux/of_device.h>
100 #include <linux/of_irq.h>
101 #include <linux/platform_device.h>
102 #include <linux/dma-mapping.h>
103 #include <linux/netdevice.h>
104 #include <linux/etherdevice.h>
105 #include <linux/skbuff.h>
106 #include <linux/init.h>
107 #include <linux/delay.h>
108 #include <linux/mii.h>
109 #include <linux/ethtool.h>
110 #include <linux/crc32.h>
111 #include <linux/if_vlan.h>
112 #include <linux/bitops.h>
113 #include <linux/workqueue.h>
114 #include <asm/processor.h> /* Processor type for cache alignment. */
117 #include <linux/uaccess.h>
118 #include <linux/dmi.h>
120 /* These identify the driver base version and may not be removed. */
121 static const char version
[] =
122 "v1.10-LK" DRV_VERSION
" " DRV_RELDATE
" Written by Donald Becker";
124 MODULE_AUTHOR("Donald Becker <becker@scyld.com>");
125 MODULE_DESCRIPTION("VIA Rhine PCI Fast Ethernet driver");
126 MODULE_LICENSE("GPL");
128 module_param(debug
, int, 0);
129 module_param(rx_copybreak
, int, 0);
130 module_param(avoid_D3
, bool, 0);
131 MODULE_PARM_DESC(debug
, "VIA Rhine debug message flags");
132 MODULE_PARM_DESC(rx_copybreak
, "VIA Rhine copy breakpoint for copy-only-tiny-frames");
133 MODULE_PARM_DESC(avoid_D3
, "Avoid power state D3 (work-around for broken BIOSes)");
141 I. Board Compatibility
143 This driver is designed for the VIA 86c100A Rhine-II PCI Fast Ethernet
146 II. Board-specific settings
148 Boards with this chip are functional only in a bus-master PCI slot.
150 Many operational settings are loaded from the EEPROM to the Config word at
151 offset 0x78. For most of these settings, this driver assumes that they are
153 If this driver is compiled to use PCI memory space operations the EEPROM
154 must be configured to enable memory ops.
156 III. Driver operation
160 This driver uses two statically allocated fixed-size descriptor lists
161 formed into rings by a branch from the final descriptor to the beginning of
162 the list. The ring sizes are set at compile time by RX/TX_RING_SIZE.
164 IIIb/c. Transmit/Receive Structure
166 This driver attempts to use a zero-copy receive and transmit scheme.
168 Alas, all data buffers are required to start on a 32 bit boundary, so
169 the driver must often copy transmit packets into bounce buffers.
171 The driver allocates full frame size skbuffs for the Rx ring buffers at
172 open() time and passes the skb->data field to the chip as receive data
173 buffers. When an incoming frame is less than RX_COPYBREAK bytes long,
174 a fresh skbuff is allocated and the frame is copied to the new skbuff.
175 When the incoming frame is larger, the skbuff is passed directly up the
176 protocol stack. Buffers consumed this way are replaced by newly allocated
177 skbuffs in the last phase of rhine_rx().
179 The RX_COPYBREAK value is chosen to trade-off the memory wasted by
180 using a full-sized skbuff for small frames vs. the copying costs of larger
181 frames. New boards are typically used in generously configured machines
182 and the underfilled buffers have negligible impact compared to the benefit of
183 a single allocation size, so the default value of zero results in never
184 copying packets. When copying is done, the cost is usually mitigated by using
185 a combined copy/checksum routine. Copying also preloads the cache, which is
186 most useful with small frames.
188 Since the VIA chips are only able to transfer data to buffers on 32 bit
189 boundaries, the IP header at offset 14 in an ethernet frame isn't
190 longword aligned for further processing. Copying these unaligned buffers
191 has the beneficial effect of 16-byte aligning the IP header.
193 IIId. Synchronization
195 The driver runs as two independent, single-threaded flows of control. One
196 is the send-packet routine, which enforces single-threaded use by the
197 netdev_priv(dev)->lock spinlock. The other thread is the interrupt handler,
198 which is single threaded by the hardware and interrupt handling software.
200 The send packet thread has partial control over the Tx ring. It locks the
201 netdev_priv(dev)->lock whenever it's queuing a Tx packet. If the next slot in
202 the ring is not available it stops the transmit queue by
203 calling netif_stop_queue.
205 The interrupt handler has exclusive control over the Rx ring and records stats
206 from the Tx ring. After reaping the stats, it marks the Tx queue entry as
207 empty by incrementing the dirty_tx mark. If at least half of the entries in
208 the Rx ring are available the transmit queue is woken up if it was stopped.
214 Preliminary VT86C100A manual from http://www.via.com.tw/
215 http://www.scyld.com/expert/100mbps.html
216 http://www.scyld.com/expert/NWay.html
217 ftp://ftp.via.com.tw/public/lan/Products/NIC/VT86C100A/Datasheet/VT86C100A03.pdf
218 ftp://ftp.via.com.tw/public/lan/Products/NIC/VT6102/Datasheet/VT6102_021.PDF
223 The VT86C100A manual is not reliable information.
224 The 3043 chip does not handle unaligned transmit or receive buffers, resulting
225 in significant performance degradation for bounce buffer copies on transmit
226 and unaligned IP headers on receive.
227 The chip does not pad to minimum transmit length.
232 /* This table drives the PCI probe routines. It's mostly boilerplate in all
233 of the drivers, and will likely be provided by some future kernel.
234 Note the matching code -- the first table entry matchs all 56** cards but
235 second only the 1234 card.
242 VT8231
= 0x50, /* Integrated MAC */
243 VT8233
= 0x60, /* Integrated MAC */
244 VT8235
= 0x74, /* Integrated MAC */
245 VT8237
= 0x78, /* Integrated MAC */
252 VT6105M
= 0x90, /* Management adapter */
256 rqWOL
= 0x0001, /* Wake-On-LAN support */
257 rqForceReset
= 0x0002,
258 rq6patterns
= 0x0040, /* 6 instead of 4 patterns for WOL */
259 rqStatusWBRace
= 0x0080, /* Tx Status Writeback Error possible */
260 rqRhineI
= 0x0100, /* See comment below */
261 rqIntPHY
= 0x0200, /* Integrated PHY */
262 rqMgmt
= 0x0400, /* Management adapter */
263 rqNeedEnMMIO
= 0x0800, /* Whether the core needs to be
264 * switched from PIO mode to MMIO
265 * (only applies to PCI)
269 * rqRhineI: VT86C100A (aka Rhine-I) uses different bits to enable
270 * MMIO as well as for the collision counter and the Tx FIFO underflow
271 * indicator. In addition, Tx and Rx buffers need to 4 byte aligned.
274 /* Beware of PCI posted writes */
275 #define IOSYNC do { ioread8(ioaddr + StationAddr); } while (0)
277 static const struct pci_device_id rhine_pci_tbl
[] = {
278 { 0x1106, 0x3043, PCI_ANY_ID
, PCI_ANY_ID
, }, /* VT86C100A */
279 { 0x1106, 0x3065, PCI_ANY_ID
, PCI_ANY_ID
, }, /* VT6102 */
280 { 0x1106, 0x3106, PCI_ANY_ID
, PCI_ANY_ID
, }, /* 6105{,L,LOM} */
281 { 0x1106, 0x3053, PCI_ANY_ID
, PCI_ANY_ID
, }, /* VT6105M */
282 { } /* terminate list */
284 MODULE_DEVICE_TABLE(pci
, rhine_pci_tbl
);
286 /* OpenFirmware identifiers for platform-bus devices
287 * The .data field is currently only used to store quirks
289 static u32 vt8500_quirks
= rqWOL
| rqForceReset
| rq6patterns
;
290 static const struct of_device_id rhine_of_tbl
[] = {
291 { .compatible
= "via,vt8500-rhine", .data
= &vt8500_quirks
},
292 { } /* terminate list */
294 MODULE_DEVICE_TABLE(of
, rhine_of_tbl
);
296 /* Offsets to the device registers. */
297 enum register_offsets
{
298 StationAddr
=0x00, RxConfig
=0x06, TxConfig
=0x07, ChipCmd
=0x08,
299 ChipCmd1
=0x09, TQWake
=0x0A,
300 IntrStatus
=0x0C, IntrEnable
=0x0E,
301 MulticastFilter0
=0x10, MulticastFilter1
=0x14,
302 RxRingPtr
=0x18, TxRingPtr
=0x1C, GFIFOTest
=0x54,
303 MIIPhyAddr
=0x6C, MIIStatus
=0x6D, PCIBusConfig
=0x6E, PCIBusConfig1
=0x6F,
304 MIICmd
=0x70, MIIRegAddr
=0x71, MIIData
=0x72, MACRegEEcsr
=0x74,
305 ConfigA
=0x78, ConfigB
=0x79, ConfigC
=0x7A, ConfigD
=0x7B,
306 RxMissed
=0x7C, RxCRCErrs
=0x7E, MiscCmd
=0x81,
307 StickyHW
=0x83, IntrStatus2
=0x84,
308 CamMask
=0x88, CamCon
=0x92, CamAddr
=0x93,
309 WOLcrSet
=0xA0, PwcfgSet
=0xA1, WOLcgSet
=0xA3, WOLcrClr
=0xA4,
310 WOLcrClr1
=0xA6, WOLcgClr
=0xA7,
311 PwrcsrSet
=0xA8, PwrcsrSet1
=0xA9, PwrcsrClr
=0xAC, PwrcsrClr1
=0xAD,
314 /* Bits in ConfigD */
316 BackOptional
=0x01, BackModify
=0x02,
317 BackCaptureEffect
=0x04, BackRandom
=0x08
320 /* Bits in the TxConfig (TCR) register */
323 TCR_LB0
=0x02, /* loopback[0] */
324 TCR_LB1
=0x04, /* loopback[1] */
332 /* Bits in the CamCon (CAMC) register */
340 /* Bits in the PCIBusConfig1 (BCR1) register */
348 BCR1_TXQNOBK
=0x40, /* for VT6105 */
349 BCR1_VIDFR
=0x80, /* for VT6105 */
350 BCR1_MED0
=0x40, /* for VT6102 */
351 BCR1_MED1
=0x80, /* for VT6102 */
354 /* Registers we check that mmio and reg are the same. */
355 static const int mmio_verify_registers
[] = {
356 RxConfig
, TxConfig
, IntrEnable
, ConfigA
, ConfigB
, ConfigC
, ConfigD
,
360 /* Bits in the interrupt status/mask registers. */
361 enum intr_status_bits
{
365 IntrTxError
= 0x0008,
366 IntrRxEmpty
= 0x0020,
368 IntrStatsMax
= 0x0080,
369 IntrRxEarly
= 0x0100,
370 IntrTxUnderrun
= 0x0210,
371 IntrRxOverflow
= 0x0400,
372 IntrRxDropped
= 0x0800,
373 IntrRxNoBuf
= 0x1000,
374 IntrTxAborted
= 0x2000,
375 IntrLinkChange
= 0x4000,
376 IntrRxWakeUp
= 0x8000,
377 IntrTxDescRace
= 0x080000, /* mapped from IntrStatus2 */
378 IntrNormalSummary
= IntrRxDone
| IntrTxDone
,
379 IntrTxErrSummary
= IntrTxDescRace
| IntrTxAborted
| IntrTxError
|
383 /* Bits in WOLcrSet/WOLcrClr and PwrcsrSet/PwrcsrClr */
392 /* The Rx and Tx buffer descriptors. */
395 __le32 desc_length
; /* Chain flag, Buffer/frame length */
401 __le32 desc_length
; /* Chain flag, Tx Config, Frame length */
406 /* Initial value for tx_desc.desc_length, Buffer size goes to bits 0-10 */
407 #define TXDESC 0x00e08000
409 enum rx_status_bits
{
410 RxOK
=0x8000, RxWholePkt
=0x0300, RxErr
=0x008F
413 /* Bits in *_desc.*_status */
414 enum desc_status_bits
{
418 /* Bits in *_desc.*_length */
419 enum desc_length_bits
{
423 /* Bits in ChipCmd. */
425 CmdInit
=0x01, CmdStart
=0x02, CmdStop
=0x04, CmdRxOn
=0x08,
426 CmdTxOn
=0x10, Cmd1TxDemand
=0x20, CmdRxDemand
=0x40,
427 Cmd1EarlyRx
=0x01, Cmd1EarlyTx
=0x02, Cmd1FDuplex
=0x04,
428 Cmd1NoTxPoll
=0x08, Cmd1Reset
=0x80,
434 struct u64_stats_sync syncp
;
437 struct rhine_private
{
438 /* Bit mask for configured VLAN ids */
439 unsigned long active_vlans
[BITS_TO_LONGS(VLAN_N_VID
)];
441 /* Descriptor rings */
442 struct rx_desc
*rx_ring
;
443 struct tx_desc
*tx_ring
;
444 dma_addr_t rx_ring_dma
;
445 dma_addr_t tx_ring_dma
;
447 /* The addresses of receive-in-place skbuffs. */
448 struct sk_buff
*rx_skbuff
[RX_RING_SIZE
];
449 dma_addr_t rx_skbuff_dma
[RX_RING_SIZE
];
451 /* The saved address of a sent-in-place packet/buffer, for later free(). */
452 struct sk_buff
*tx_skbuff
[TX_RING_SIZE
];
453 dma_addr_t tx_skbuff_dma
[TX_RING_SIZE
];
455 /* Tx bounce buffers (Rhine-I only) */
456 unsigned char *tx_buf
[TX_RING_SIZE
];
457 unsigned char *tx_bufs
;
458 dma_addr_t tx_bufs_dma
;
462 struct net_device
*dev
;
463 struct napi_struct napi
;
465 struct mutex task_lock
;
467 struct work_struct slow_event_task
;
468 struct work_struct reset_task
;
472 /* Frequently used values: keep some adjacent for cache effect. */
475 unsigned int cur_tx
, dirty_tx
;
476 unsigned int rx_buf_sz
; /* Based on MTU+slack. */
477 struct rhine_stats rx_stats
;
478 struct rhine_stats tx_stats
;
481 u8 tx_thresh
, rx_thresh
;
483 struct mii_if_info mii_if
;
487 #define BYTE_REG_BITS_ON(x, p) do { iowrite8((ioread8((p))|(x)), (p)); } while (0)
488 #define WORD_REG_BITS_ON(x, p) do { iowrite16((ioread16((p))|(x)), (p)); } while (0)
489 #define DWORD_REG_BITS_ON(x, p) do { iowrite32((ioread32((p))|(x)), (p)); } while (0)
491 #define BYTE_REG_BITS_IS_ON(x, p) (ioread8((p)) & (x))
492 #define WORD_REG_BITS_IS_ON(x, p) (ioread16((p)) & (x))
493 #define DWORD_REG_BITS_IS_ON(x, p) (ioread32((p)) & (x))
495 #define BYTE_REG_BITS_OFF(x, p) do { iowrite8(ioread8((p)) & (~(x)), (p)); } while (0)
496 #define WORD_REG_BITS_OFF(x, p) do { iowrite16(ioread16((p)) & (~(x)), (p)); } while (0)
497 #define DWORD_REG_BITS_OFF(x, p) do { iowrite32(ioread32((p)) & (~(x)), (p)); } while (0)
499 #define BYTE_REG_BITS_SET(x, m, p) do { iowrite8((ioread8((p)) & (~(m)))|(x), (p)); } while (0)
500 #define WORD_REG_BITS_SET(x, m, p) do { iowrite16((ioread16((p)) & (~(m)))|(x), (p)); } while (0)
501 #define DWORD_REG_BITS_SET(x, m, p) do { iowrite32((ioread32((p)) & (~(m)))|(x), (p)); } while (0)
504 static int mdio_read(struct net_device
*dev
, int phy_id
, int location
);
505 static void mdio_write(struct net_device
*dev
, int phy_id
, int location
, int value
);
506 static int rhine_open(struct net_device
*dev
);
507 static void rhine_reset_task(struct work_struct
*work
);
508 static void rhine_slow_event_task(struct work_struct
*work
);
509 static void rhine_tx_timeout(struct net_device
*dev
, unsigned int txqueue
);
510 static netdev_tx_t
rhine_start_tx(struct sk_buff
*skb
,
511 struct net_device
*dev
);
512 static irqreturn_t
rhine_interrupt(int irq
, void *dev_instance
);
513 static void rhine_tx(struct net_device
*dev
);
514 static int rhine_rx(struct net_device
*dev
, int limit
);
515 static void rhine_set_rx_mode(struct net_device
*dev
);
516 static void rhine_get_stats64(struct net_device
*dev
,
517 struct rtnl_link_stats64
*stats
);
518 static int netdev_ioctl(struct net_device
*dev
, struct ifreq
*rq
, int cmd
);
519 static const struct ethtool_ops netdev_ethtool_ops
;
520 static int rhine_close(struct net_device
*dev
);
521 static int rhine_vlan_rx_add_vid(struct net_device
*dev
,
522 __be16 proto
, u16 vid
);
523 static int rhine_vlan_rx_kill_vid(struct net_device
*dev
,
524 __be16 proto
, u16 vid
);
525 static void rhine_restart_tx(struct net_device
*dev
);
527 static void rhine_wait_bit(struct rhine_private
*rp
, u8 reg
, u8 mask
, bool low
)
529 void __iomem
*ioaddr
= rp
->base
;
532 for (i
= 0; i
< 1024; i
++) {
533 bool has_mask_bits
= !!(ioread8(ioaddr
+ reg
) & mask
);
535 if (low
^ has_mask_bits
)
540 netif_dbg(rp
, hw
, rp
->dev
, "%s bit wait (%02x/%02x) cycle "
541 "count: %04d\n", low
? "low" : "high", reg
, mask
, i
);
545 static void rhine_wait_bit_high(struct rhine_private
*rp
, u8 reg
, u8 mask
)
547 rhine_wait_bit(rp
, reg
, mask
, false);
550 static void rhine_wait_bit_low(struct rhine_private
*rp
, u8 reg
, u8 mask
)
552 rhine_wait_bit(rp
, reg
, mask
, true);
555 static u32
rhine_get_events(struct rhine_private
*rp
)
557 void __iomem
*ioaddr
= rp
->base
;
560 intr_status
= ioread16(ioaddr
+ IntrStatus
);
561 /* On Rhine-II, Bit 3 indicates Tx descriptor write-back race. */
562 if (rp
->quirks
& rqStatusWBRace
)
563 intr_status
|= ioread8(ioaddr
+ IntrStatus2
) << 16;
567 static void rhine_ack_events(struct rhine_private
*rp
, u32 mask
)
569 void __iomem
*ioaddr
= rp
->base
;
571 if (rp
->quirks
& rqStatusWBRace
)
572 iowrite8(mask
>> 16, ioaddr
+ IntrStatus2
);
573 iowrite16(mask
, ioaddr
+ IntrStatus
);
577 * Get power related registers into sane state.
578 * Notify user about past WOL event.
580 static void rhine_power_init(struct net_device
*dev
)
582 struct rhine_private
*rp
= netdev_priv(dev
);
583 void __iomem
*ioaddr
= rp
->base
;
586 if (rp
->quirks
& rqWOL
) {
587 /* Make sure chip is in power state D0 */
588 iowrite8(ioread8(ioaddr
+ StickyHW
) & 0xFC, ioaddr
+ StickyHW
);
590 /* Disable "force PME-enable" */
591 iowrite8(0x80, ioaddr
+ WOLcgClr
);
593 /* Clear power-event config bits (WOL) */
594 iowrite8(0xFF, ioaddr
+ WOLcrClr
);
595 /* More recent cards can manage two additional patterns */
596 if (rp
->quirks
& rq6patterns
)
597 iowrite8(0x03, ioaddr
+ WOLcrClr1
);
599 /* Save power-event status bits */
600 wolstat
= ioread8(ioaddr
+ PwrcsrSet
);
601 if (rp
->quirks
& rq6patterns
)
602 wolstat
|= (ioread8(ioaddr
+ PwrcsrSet1
) & 0x03) << 8;
604 /* Clear power-event status bits */
605 iowrite8(0xFF, ioaddr
+ PwrcsrClr
);
606 if (rp
->quirks
& rq6patterns
)
607 iowrite8(0x03, ioaddr
+ PwrcsrClr1
);
613 reason
= "Magic packet";
616 reason
= "Link went up";
619 reason
= "Link went down";
622 reason
= "Unicast packet";
625 reason
= "Multicast/broadcast packet";
630 netdev_info(dev
, "Woke system up. Reason: %s\n",
636 static void rhine_chip_reset(struct net_device
*dev
)
638 struct rhine_private
*rp
= netdev_priv(dev
);
639 void __iomem
*ioaddr
= rp
->base
;
642 iowrite8(Cmd1Reset
, ioaddr
+ ChipCmd1
);
645 if (ioread8(ioaddr
+ ChipCmd1
) & Cmd1Reset
) {
646 netdev_info(dev
, "Reset not complete yet. Trying harder.\n");
649 if (rp
->quirks
& rqForceReset
)
650 iowrite8(0x40, ioaddr
+ MiscCmd
);
652 /* Reset can take somewhat longer (rare) */
653 rhine_wait_bit_low(rp
, ChipCmd1
, Cmd1Reset
);
656 cmd1
= ioread8(ioaddr
+ ChipCmd1
);
657 netif_info(rp
, hw
, dev
, "Reset %s\n", (cmd1
& Cmd1Reset
) ?
658 "failed" : "succeeded");
661 static void enable_mmio(long pioaddr
, u32 quirks
)
665 if (quirks
& rqNeedEnMMIO
) {
666 if (quirks
& rqRhineI
) {
667 /* More recent docs say that this bit is reserved */
668 n
= inb(pioaddr
+ ConfigA
) | 0x20;
669 outb(n
, pioaddr
+ ConfigA
);
671 n
= inb(pioaddr
+ ConfigD
) | 0x80;
672 outb(n
, pioaddr
+ ConfigD
);
677 static inline int verify_mmio(struct device
*hwdev
,
679 void __iomem
*ioaddr
,
682 if (quirks
& rqNeedEnMMIO
) {
685 /* Check that selected MMIO registers match the PIO ones */
686 while (mmio_verify_registers
[i
]) {
687 int reg
= mmio_verify_registers
[i
++];
688 unsigned char a
= inb(pioaddr
+reg
);
689 unsigned char b
= readb(ioaddr
+reg
);
693 "MMIO do not match PIO [%02x] (%02x != %02x)\n",
703 * Loads bytes 0x00-0x05, 0x6E-0x6F, 0x78-0x7B from EEPROM
704 * (plus 0x6C for Rhine-I/II)
706 static void rhine_reload_eeprom(long pioaddr
, struct net_device
*dev
)
708 struct rhine_private
*rp
= netdev_priv(dev
);
709 void __iomem
*ioaddr
= rp
->base
;
712 outb(0x20, pioaddr
+ MACRegEEcsr
);
713 for (i
= 0; i
< 1024; i
++) {
714 if (!(inb(pioaddr
+ MACRegEEcsr
) & 0x20))
718 pr_info("%4d cycles used @ %s:%d\n", i
, __func__
, __LINE__
);
721 * Reloading from EEPROM overwrites ConfigA-D, so we must re-enable
722 * MMIO. If reloading EEPROM was done first this could be avoided, but
723 * it is not known if that still works with the "win98-reboot" problem.
725 enable_mmio(pioaddr
, rp
->quirks
);
727 /* Turn off EEPROM-controlled wake-up (magic packet) */
728 if (rp
->quirks
& rqWOL
)
729 iowrite8(ioread8(ioaddr
+ ConfigA
) & 0xFC, ioaddr
+ ConfigA
);
733 #ifdef CONFIG_NET_POLL_CONTROLLER
734 static void rhine_poll(struct net_device
*dev
)
736 struct rhine_private
*rp
= netdev_priv(dev
);
737 const int irq
= rp
->irq
;
740 rhine_interrupt(irq
, dev
);
745 static void rhine_kick_tx_threshold(struct rhine_private
*rp
)
747 if (rp
->tx_thresh
< 0xe0) {
748 void __iomem
*ioaddr
= rp
->base
;
750 rp
->tx_thresh
+= 0x20;
751 BYTE_REG_BITS_SET(rp
->tx_thresh
, 0x80, ioaddr
+ TxConfig
);
755 static void rhine_tx_err(struct rhine_private
*rp
, u32 status
)
757 struct net_device
*dev
= rp
->dev
;
759 if (status
& IntrTxAborted
) {
760 netif_info(rp
, tx_err
, dev
,
761 "Abort %08x, frame dropped\n", status
);
764 if (status
& IntrTxUnderrun
) {
765 rhine_kick_tx_threshold(rp
);
766 netif_info(rp
, tx_err
,dev
, "Transmitter underrun, "
767 "Tx threshold now %02x\n", rp
->tx_thresh
);
770 if (status
& IntrTxDescRace
)
771 netif_info(rp
, tx_err
, dev
, "Tx descriptor write-back race\n");
773 if ((status
& IntrTxError
) &&
774 (status
& (IntrTxAborted
| IntrTxUnderrun
| IntrTxDescRace
)) == 0) {
775 rhine_kick_tx_threshold(rp
);
776 netif_info(rp
, tx_err
, dev
, "Unspecified error. "
777 "Tx threshold now %02x\n", rp
->tx_thresh
);
780 rhine_restart_tx(dev
);
783 static void rhine_update_rx_crc_and_missed_errord(struct rhine_private
*rp
)
785 void __iomem
*ioaddr
= rp
->base
;
786 struct net_device_stats
*stats
= &rp
->dev
->stats
;
788 stats
->rx_crc_errors
+= ioread16(ioaddr
+ RxCRCErrs
);
789 stats
->rx_missed_errors
+= ioread16(ioaddr
+ RxMissed
);
792 * Clears the "tally counters" for CRC errors and missed frames(?).
793 * It has been reported that some chips need a write of 0 to clear
794 * these, for others the counters are set to 1 when written to and
795 * instead cleared when read. So we clear them both ways ...
797 iowrite32(0, ioaddr
+ RxMissed
);
798 ioread16(ioaddr
+ RxCRCErrs
);
799 ioread16(ioaddr
+ RxMissed
);
802 #define RHINE_EVENT_NAPI_RX (IntrRxDone | \
810 #define RHINE_EVENT_NAPI_TX_ERR (IntrTxError | \
814 #define RHINE_EVENT_NAPI_TX (IntrTxDone | RHINE_EVENT_NAPI_TX_ERR)
816 #define RHINE_EVENT_NAPI (RHINE_EVENT_NAPI_RX | \
817 RHINE_EVENT_NAPI_TX | \
819 #define RHINE_EVENT_SLOW (IntrPCIErr | IntrLinkChange)
820 #define RHINE_EVENT (RHINE_EVENT_NAPI | RHINE_EVENT_SLOW)
822 static int rhine_napipoll(struct napi_struct
*napi
, int budget
)
824 struct rhine_private
*rp
= container_of(napi
, struct rhine_private
, napi
);
825 struct net_device
*dev
= rp
->dev
;
826 void __iomem
*ioaddr
= rp
->base
;
827 u16 enable_mask
= RHINE_EVENT
& 0xffff;
831 status
= rhine_get_events(rp
);
832 rhine_ack_events(rp
, status
& ~RHINE_EVENT_SLOW
);
834 if (status
& RHINE_EVENT_NAPI_RX
)
835 work_done
+= rhine_rx(dev
, budget
);
837 if (status
& RHINE_EVENT_NAPI_TX
) {
838 if (status
& RHINE_EVENT_NAPI_TX_ERR
) {
839 /* Avoid scavenging before Tx engine turned off */
840 rhine_wait_bit_low(rp
, ChipCmd
, CmdTxOn
);
841 if (ioread8(ioaddr
+ ChipCmd
) & CmdTxOn
)
842 netif_warn(rp
, tx_err
, dev
, "Tx still on\n");
847 if (status
& RHINE_EVENT_NAPI_TX_ERR
)
848 rhine_tx_err(rp
, status
);
851 if (status
& IntrStatsMax
) {
852 spin_lock(&rp
->lock
);
853 rhine_update_rx_crc_and_missed_errord(rp
);
854 spin_unlock(&rp
->lock
);
857 if (status
& RHINE_EVENT_SLOW
) {
858 enable_mask
&= ~RHINE_EVENT_SLOW
;
859 schedule_work(&rp
->slow_event_task
);
862 if (work_done
< budget
) {
863 napi_complete_done(napi
, work_done
);
864 iowrite16(enable_mask
, ioaddr
+ IntrEnable
);
869 static void rhine_hw_init(struct net_device
*dev
, long pioaddr
)
871 struct rhine_private
*rp
= netdev_priv(dev
);
873 /* Reset the chip to erase previous misconfiguration. */
874 rhine_chip_reset(dev
);
876 /* Rhine-I needs extra time to recuperate before EEPROM reload */
877 if (rp
->quirks
& rqRhineI
)
880 /* Reload EEPROM controlled bytes cleared by soft reset */
881 if (dev_is_pci(dev
->dev
.parent
))
882 rhine_reload_eeprom(pioaddr
, dev
);
885 static const struct net_device_ops rhine_netdev_ops
= {
886 .ndo_open
= rhine_open
,
887 .ndo_stop
= rhine_close
,
888 .ndo_start_xmit
= rhine_start_tx
,
889 .ndo_get_stats64
= rhine_get_stats64
,
890 .ndo_set_rx_mode
= rhine_set_rx_mode
,
891 .ndo_validate_addr
= eth_validate_addr
,
892 .ndo_set_mac_address
= eth_mac_addr
,
893 .ndo_do_ioctl
= netdev_ioctl
,
894 .ndo_tx_timeout
= rhine_tx_timeout
,
895 .ndo_vlan_rx_add_vid
= rhine_vlan_rx_add_vid
,
896 .ndo_vlan_rx_kill_vid
= rhine_vlan_rx_kill_vid
,
897 #ifdef CONFIG_NET_POLL_CONTROLLER
898 .ndo_poll_controller
= rhine_poll
,
902 static int rhine_init_one_common(struct device
*hwdev
, u32 quirks
,
903 long pioaddr
, void __iomem
*ioaddr
, int irq
)
905 struct net_device
*dev
;
906 struct rhine_private
*rp
;
910 /* this should always be supported */
911 rc
= dma_set_mask(hwdev
, DMA_BIT_MASK(32));
913 dev_err(hwdev
, "32-bit DMA addresses not supported by the card!?\n");
917 dev
= alloc_etherdev(sizeof(struct rhine_private
));
922 SET_NETDEV_DEV(dev
, hwdev
);
924 rp
= netdev_priv(dev
);
927 rp
->pioaddr
= pioaddr
;
930 rp
->msg_enable
= netif_msg_init(debug
, RHINE_MSG_DEFAULT
);
932 phy_id
= rp
->quirks
& rqIntPHY
? 1 : 0;
934 u64_stats_init(&rp
->tx_stats
.syncp
);
935 u64_stats_init(&rp
->rx_stats
.syncp
);
937 /* Get chip registers into a sane state */
938 rhine_power_init(dev
);
939 rhine_hw_init(dev
, pioaddr
);
941 for (i
= 0; i
< 6; i
++)
942 dev
->dev_addr
[i
] = ioread8(ioaddr
+ StationAddr
+ i
);
944 if (!is_valid_ether_addr(dev
->dev_addr
)) {
945 /* Report it and use a random ethernet address instead */
946 netdev_err(dev
, "Invalid MAC address: %pM\n", dev
->dev_addr
);
947 eth_hw_addr_random(dev
);
948 netdev_info(dev
, "Using random MAC address: %pM\n",
952 /* For Rhine-I/II, phy_id is loaded from EEPROM */
954 phy_id
= ioread8(ioaddr
+ 0x6C);
956 spin_lock_init(&rp
->lock
);
957 mutex_init(&rp
->task_lock
);
958 INIT_WORK(&rp
->reset_task
, rhine_reset_task
);
959 INIT_WORK(&rp
->slow_event_task
, rhine_slow_event_task
);
961 rp
->mii_if
.dev
= dev
;
962 rp
->mii_if
.mdio_read
= mdio_read
;
963 rp
->mii_if
.mdio_write
= mdio_write
;
964 rp
->mii_if
.phy_id_mask
= 0x1f;
965 rp
->mii_if
.reg_num_mask
= 0x1f;
967 /* The chip-specific entries in the device structure. */
968 dev
->netdev_ops
= &rhine_netdev_ops
;
969 dev
->ethtool_ops
= &netdev_ethtool_ops
;
970 dev
->watchdog_timeo
= TX_TIMEOUT
;
972 netif_napi_add(dev
, &rp
->napi
, rhine_napipoll
, 64);
974 if (rp
->quirks
& rqRhineI
)
975 dev
->features
|= NETIF_F_SG
|NETIF_F_HW_CSUM
;
977 if (rp
->quirks
& rqMgmt
)
978 dev
->features
|= NETIF_F_HW_VLAN_CTAG_TX
|
979 NETIF_F_HW_VLAN_CTAG_RX
|
980 NETIF_F_HW_VLAN_CTAG_FILTER
;
982 /* dev->name not defined before register_netdev()! */
983 rc
= register_netdev(dev
);
985 goto err_out_free_netdev
;
987 if (rp
->quirks
& rqRhineI
)
989 else if (rp
->quirks
& rqStatusWBRace
)
991 else if (rp
->quirks
& rqMgmt
)
992 name
= "Rhine III (Management Adapter)";
996 netdev_info(dev
, "VIA %s at %p, %pM, IRQ %d\n",
997 name
, ioaddr
, dev
->dev_addr
, rp
->irq
);
999 dev_set_drvdata(hwdev
, dev
);
1003 int mii_status
= mdio_read(dev
, phy_id
, 1);
1004 mii_cmd
= mdio_read(dev
, phy_id
, MII_BMCR
) & ~BMCR_ISOLATE
;
1005 mdio_write(dev
, phy_id
, MII_BMCR
, mii_cmd
);
1006 if (mii_status
!= 0xffff && mii_status
!= 0x0000) {
1007 rp
->mii_if
.advertising
= mdio_read(dev
, phy_id
, 4);
1009 "MII PHY found at address %d, status 0x%04x advertising %04x Link %04x\n",
1011 mii_status
, rp
->mii_if
.advertising
,
1012 mdio_read(dev
, phy_id
, 5));
1014 /* set IFF_RUNNING */
1015 if (mii_status
& BMSR_LSTATUS
)
1016 netif_carrier_on(dev
);
1018 netif_carrier_off(dev
);
1022 rp
->mii_if
.phy_id
= phy_id
;
1024 netif_info(rp
, probe
, dev
, "No D3 power state at shutdown\n");
1028 err_out_free_netdev
:
1034 static int rhine_init_one_pci(struct pci_dev
*pdev
,
1035 const struct pci_device_id
*ent
)
1037 struct device
*hwdev
= &pdev
->dev
;
1039 long pioaddr
, memaddr
;
1040 void __iomem
*ioaddr
;
1041 int io_size
= pdev
->revision
< VTunknown0
? 128 : 256;
1043 /* This driver was written to use PCI memory space. Some early versions
1044 * of the Rhine may only work correctly with I/O space accesses.
1045 * TODO: determine for which revisions this is true and assign the flag
1046 * in code as opposed to this Kconfig option (???)
1048 #ifdef CONFIG_VIA_RHINE_MMIO
1049 u32 quirks
= rqNeedEnMMIO
;
1054 /* when built into the kernel, we only print version if device is found */
1056 pr_info_once("%s\n", version
);
1059 rc
= pci_enable_device(pdev
);
1063 if (pdev
->revision
< VTunknown0
) {
1065 } else if (pdev
->revision
>= VT6102
) {
1066 quirks
|= rqWOL
| rqForceReset
;
1067 if (pdev
->revision
< VT6105
) {
1068 quirks
|= rqStatusWBRace
;
1071 if (pdev
->revision
>= VT6105_B0
)
1072 quirks
|= rq6patterns
;
1073 if (pdev
->revision
>= VT6105M
)
1079 if ((pci_resource_len(pdev
, 0) < io_size
) ||
1080 (pci_resource_len(pdev
, 1) < io_size
)) {
1082 dev_err(hwdev
, "Insufficient PCI resources, aborting\n");
1083 goto err_out_pci_disable
;
1086 pioaddr
= pci_resource_start(pdev
, 0);
1087 memaddr
= pci_resource_start(pdev
, 1);
1089 pci_set_master(pdev
);
1091 rc
= pci_request_regions(pdev
, DRV_NAME
);
1093 goto err_out_pci_disable
;
1095 ioaddr
= pci_iomap(pdev
, (quirks
& rqNeedEnMMIO
? 1 : 0), io_size
);
1099 "ioremap failed for device %s, region 0x%X @ 0x%lX\n",
1100 dev_name(hwdev
), io_size
, memaddr
);
1101 goto err_out_free_res
;
1104 enable_mmio(pioaddr
, quirks
);
1106 rc
= verify_mmio(hwdev
, pioaddr
, ioaddr
, quirks
);
1110 rc
= rhine_init_one_common(&pdev
->dev
, quirks
,
1111 pioaddr
, ioaddr
, pdev
->irq
);
1116 pci_iounmap(pdev
, ioaddr
);
1118 pci_release_regions(pdev
);
1119 err_out_pci_disable
:
1120 pci_disable_device(pdev
);
1125 static int rhine_init_one_platform(struct platform_device
*pdev
)
1127 const struct of_device_id
*match
;
1130 void __iomem
*ioaddr
;
1132 match
= of_match_device(rhine_of_tbl
, &pdev
->dev
);
1136 ioaddr
= devm_platform_ioremap_resource(pdev
, 0);
1138 return PTR_ERR(ioaddr
);
1140 irq
= irq_of_parse_and_map(pdev
->dev
.of_node
, 0);
1144 quirks
= match
->data
;
1148 return rhine_init_one_common(&pdev
->dev
, *quirks
,
1149 (long)ioaddr
, ioaddr
, irq
);
1152 static int alloc_ring(struct net_device
* dev
)
1154 struct rhine_private
*rp
= netdev_priv(dev
);
1155 struct device
*hwdev
= dev
->dev
.parent
;
1157 dma_addr_t ring_dma
;
1159 ring
= dma_alloc_coherent(hwdev
,
1160 RX_RING_SIZE
* sizeof(struct rx_desc
) +
1161 TX_RING_SIZE
* sizeof(struct tx_desc
),
1165 netdev_err(dev
, "Could not allocate DMA memory\n");
1168 if (rp
->quirks
& rqRhineI
) {
1169 rp
->tx_bufs
= dma_alloc_coherent(hwdev
,
1170 PKT_BUF_SZ
* TX_RING_SIZE
,
1173 if (rp
->tx_bufs
== NULL
) {
1174 dma_free_coherent(hwdev
,
1175 RX_RING_SIZE
* sizeof(struct rx_desc
) +
1176 TX_RING_SIZE
* sizeof(struct tx_desc
),
1183 rp
->tx_ring
= ring
+ RX_RING_SIZE
* sizeof(struct rx_desc
);
1184 rp
->rx_ring_dma
= ring_dma
;
1185 rp
->tx_ring_dma
= ring_dma
+ RX_RING_SIZE
* sizeof(struct rx_desc
);
1190 static void free_ring(struct net_device
* dev
)
1192 struct rhine_private
*rp
= netdev_priv(dev
);
1193 struct device
*hwdev
= dev
->dev
.parent
;
1195 dma_free_coherent(hwdev
,
1196 RX_RING_SIZE
* sizeof(struct rx_desc
) +
1197 TX_RING_SIZE
* sizeof(struct tx_desc
),
1198 rp
->rx_ring
, rp
->rx_ring_dma
);
1202 dma_free_coherent(hwdev
, PKT_BUF_SZ
* TX_RING_SIZE
,
1203 rp
->tx_bufs
, rp
->tx_bufs_dma
);
1209 struct rhine_skb_dma
{
1210 struct sk_buff
*skb
;
1214 static inline int rhine_skb_dma_init(struct net_device
*dev
,
1215 struct rhine_skb_dma
*sd
)
1217 struct rhine_private
*rp
= netdev_priv(dev
);
1218 struct device
*hwdev
= dev
->dev
.parent
;
1219 const int size
= rp
->rx_buf_sz
;
1221 sd
->skb
= netdev_alloc_skb(dev
, size
);
1225 sd
->dma
= dma_map_single(hwdev
, sd
->skb
->data
, size
, DMA_FROM_DEVICE
);
1226 if (unlikely(dma_mapping_error(hwdev
, sd
->dma
))) {
1227 netif_err(rp
, drv
, dev
, "Rx DMA mapping failure\n");
1228 dev_kfree_skb_any(sd
->skb
);
1235 static void rhine_reset_rbufs(struct rhine_private
*rp
)
1241 for (i
= 0; i
< RX_RING_SIZE
; i
++)
1242 rp
->rx_ring
[i
].rx_status
= cpu_to_le32(DescOwn
);
1245 static inline void rhine_skb_dma_nic_store(struct rhine_private
*rp
,
1246 struct rhine_skb_dma
*sd
, int entry
)
1248 rp
->rx_skbuff_dma
[entry
] = sd
->dma
;
1249 rp
->rx_skbuff
[entry
] = sd
->skb
;
1251 rp
->rx_ring
[entry
].addr
= cpu_to_le32(sd
->dma
);
1255 static void free_rbufs(struct net_device
* dev
);
1257 static int alloc_rbufs(struct net_device
*dev
)
1259 struct rhine_private
*rp
= netdev_priv(dev
);
1263 rp
->rx_buf_sz
= (dev
->mtu
<= 1500 ? PKT_BUF_SZ
: dev
->mtu
+ 32);
1264 next
= rp
->rx_ring_dma
;
1266 /* Init the ring entries */
1267 for (i
= 0; i
< RX_RING_SIZE
; i
++) {
1268 rp
->rx_ring
[i
].rx_status
= 0;
1269 rp
->rx_ring
[i
].desc_length
= cpu_to_le32(rp
->rx_buf_sz
);
1270 next
+= sizeof(struct rx_desc
);
1271 rp
->rx_ring
[i
].next_desc
= cpu_to_le32(next
);
1272 rp
->rx_skbuff
[i
] = NULL
;
1274 /* Mark the last entry as wrapping the ring. */
1275 rp
->rx_ring
[i
-1].next_desc
= cpu_to_le32(rp
->rx_ring_dma
);
1277 /* Fill in the Rx buffers. Handle allocation failure gracefully. */
1278 for (i
= 0; i
< RX_RING_SIZE
; i
++) {
1279 struct rhine_skb_dma sd
;
1281 rc
= rhine_skb_dma_init(dev
, &sd
);
1287 rhine_skb_dma_nic_store(rp
, &sd
, i
);
1290 rhine_reset_rbufs(rp
);
1295 static void free_rbufs(struct net_device
* dev
)
1297 struct rhine_private
*rp
= netdev_priv(dev
);
1298 struct device
*hwdev
= dev
->dev
.parent
;
1301 /* Free all the skbuffs in the Rx queue. */
1302 for (i
= 0; i
< RX_RING_SIZE
; i
++) {
1303 rp
->rx_ring
[i
].rx_status
= 0;
1304 rp
->rx_ring
[i
].addr
= cpu_to_le32(0xBADF00D0); /* An invalid address. */
1305 if (rp
->rx_skbuff
[i
]) {
1306 dma_unmap_single(hwdev
,
1307 rp
->rx_skbuff_dma
[i
],
1308 rp
->rx_buf_sz
, DMA_FROM_DEVICE
);
1309 dev_kfree_skb(rp
->rx_skbuff
[i
]);
1311 rp
->rx_skbuff
[i
] = NULL
;
1315 static void alloc_tbufs(struct net_device
* dev
)
1317 struct rhine_private
*rp
= netdev_priv(dev
);
1321 rp
->dirty_tx
= rp
->cur_tx
= 0;
1322 next
= rp
->tx_ring_dma
;
1323 for (i
= 0; i
< TX_RING_SIZE
; i
++) {
1324 rp
->tx_skbuff
[i
] = NULL
;
1325 rp
->tx_ring
[i
].tx_status
= 0;
1326 rp
->tx_ring
[i
].desc_length
= cpu_to_le32(TXDESC
);
1327 next
+= sizeof(struct tx_desc
);
1328 rp
->tx_ring
[i
].next_desc
= cpu_to_le32(next
);
1329 if (rp
->quirks
& rqRhineI
)
1330 rp
->tx_buf
[i
] = &rp
->tx_bufs
[i
* PKT_BUF_SZ
];
1332 rp
->tx_ring
[i
-1].next_desc
= cpu_to_le32(rp
->tx_ring_dma
);
1334 netdev_reset_queue(dev
);
1337 static void free_tbufs(struct net_device
* dev
)
1339 struct rhine_private
*rp
= netdev_priv(dev
);
1340 struct device
*hwdev
= dev
->dev
.parent
;
1343 for (i
= 0; i
< TX_RING_SIZE
; i
++) {
1344 rp
->tx_ring
[i
].tx_status
= 0;
1345 rp
->tx_ring
[i
].desc_length
= cpu_to_le32(TXDESC
);
1346 rp
->tx_ring
[i
].addr
= cpu_to_le32(0xBADF00D0); /* An invalid address. */
1347 if (rp
->tx_skbuff
[i
]) {
1348 if (rp
->tx_skbuff_dma
[i
]) {
1349 dma_unmap_single(hwdev
,
1350 rp
->tx_skbuff_dma
[i
],
1351 rp
->tx_skbuff
[i
]->len
,
1354 dev_kfree_skb(rp
->tx_skbuff
[i
]);
1356 rp
->tx_skbuff
[i
] = NULL
;
1357 rp
->tx_buf
[i
] = NULL
;
1361 static void rhine_check_media(struct net_device
*dev
, unsigned int init_media
)
1363 struct rhine_private
*rp
= netdev_priv(dev
);
1364 void __iomem
*ioaddr
= rp
->base
;
1366 if (!rp
->mii_if
.force_media
)
1367 mii_check_media(&rp
->mii_if
, netif_msg_link(rp
), init_media
);
1369 if (rp
->mii_if
.full_duplex
)
1370 iowrite8(ioread8(ioaddr
+ ChipCmd1
) | Cmd1FDuplex
,
1373 iowrite8(ioread8(ioaddr
+ ChipCmd1
) & ~Cmd1FDuplex
,
1376 netif_info(rp
, link
, dev
, "force_media %d, carrier %d\n",
1377 rp
->mii_if
.force_media
, netif_carrier_ok(dev
));
1380 /* Called after status of force_media possibly changed */
1381 static void rhine_set_carrier(struct mii_if_info
*mii
)
1383 struct net_device
*dev
= mii
->dev
;
1384 struct rhine_private
*rp
= netdev_priv(dev
);
1386 if (mii
->force_media
) {
1387 /* autoneg is off: Link is always assumed to be up */
1388 if (!netif_carrier_ok(dev
))
1389 netif_carrier_on(dev
);
1392 rhine_check_media(dev
, 0);
1394 netif_info(rp
, link
, dev
, "force_media %d, carrier %d\n",
1395 mii
->force_media
, netif_carrier_ok(dev
));
1399 * rhine_set_cam - set CAM multicast filters
1400 * @ioaddr: register block of this Rhine
1401 * @idx: multicast CAM index [0..MCAM_SIZE-1]
1402 * @addr: multicast address (6 bytes)
1404 * Load addresses into multicast filters.
1406 static void rhine_set_cam(void __iomem
*ioaddr
, int idx
, u8
*addr
)
1410 iowrite8(CAMC_CAMEN
, ioaddr
+ CamCon
);
1413 /* Paranoid -- idx out of range should never happen */
1414 idx
&= (MCAM_SIZE
- 1);
1416 iowrite8((u8
) idx
, ioaddr
+ CamAddr
);
1418 for (i
= 0; i
< 6; i
++, addr
++)
1419 iowrite8(*addr
, ioaddr
+ MulticastFilter0
+ i
);
1423 iowrite8(CAMC_CAMWR
| CAMC_CAMEN
, ioaddr
+ CamCon
);
1426 iowrite8(0, ioaddr
+ CamCon
);
1430 * rhine_set_vlan_cam - set CAM VLAN filters
1431 * @ioaddr: register block of this Rhine
1432 * @idx: VLAN CAM index [0..VCAM_SIZE-1]
1433 * @addr: VLAN ID (2 bytes)
1435 * Load addresses into VLAN filters.
1437 static void rhine_set_vlan_cam(void __iomem
*ioaddr
, int idx
, u8
*addr
)
1439 iowrite8(CAMC_CAMEN
| CAMC_VCAMSL
, ioaddr
+ CamCon
);
1442 /* Paranoid -- idx out of range should never happen */
1443 idx
&= (VCAM_SIZE
- 1);
1445 iowrite8((u8
) idx
, ioaddr
+ CamAddr
);
1447 iowrite16(*((u16
*) addr
), ioaddr
+ MulticastFilter0
+ 6);
1451 iowrite8(CAMC_CAMWR
| CAMC_CAMEN
, ioaddr
+ CamCon
);
1454 iowrite8(0, ioaddr
+ CamCon
);
1458 * rhine_set_cam_mask - set multicast CAM mask
1459 * @ioaddr: register block of this Rhine
1460 * @mask: multicast CAM mask
1462 * Mask sets multicast filters active/inactive.
1464 static void rhine_set_cam_mask(void __iomem
*ioaddr
, u32 mask
)
1466 iowrite8(CAMC_CAMEN
, ioaddr
+ CamCon
);
1470 iowrite32(mask
, ioaddr
+ CamMask
);
1473 iowrite8(0, ioaddr
+ CamCon
);
1477 * rhine_set_vlan_cam_mask - set VLAN CAM mask
1478 * @ioaddr: register block of this Rhine
1479 * @mask: VLAN CAM mask
1481 * Mask sets VLAN filters active/inactive.
1483 static void rhine_set_vlan_cam_mask(void __iomem
*ioaddr
, u32 mask
)
1485 iowrite8(CAMC_CAMEN
| CAMC_VCAMSL
, ioaddr
+ CamCon
);
1489 iowrite32(mask
, ioaddr
+ CamMask
);
1492 iowrite8(0, ioaddr
+ CamCon
);
1496 * rhine_init_cam_filter - initialize CAM filters
1497 * @dev: network device
1499 * Initialize (disable) hardware VLAN and multicast support on this
1502 static void rhine_init_cam_filter(struct net_device
*dev
)
1504 struct rhine_private
*rp
= netdev_priv(dev
);
1505 void __iomem
*ioaddr
= rp
->base
;
1507 /* Disable all CAMs */
1508 rhine_set_vlan_cam_mask(ioaddr
, 0);
1509 rhine_set_cam_mask(ioaddr
, 0);
1511 /* disable hardware VLAN support */
1512 BYTE_REG_BITS_ON(TCR_PQEN
, ioaddr
+ TxConfig
);
1513 BYTE_REG_BITS_OFF(BCR1_VIDFR
, ioaddr
+ PCIBusConfig1
);
1517 * rhine_update_vcam - update VLAN CAM filters
1518 * @rp: rhine_private data of this Rhine
1520 * Update VLAN CAM filters to match configuration change.
1522 static void rhine_update_vcam(struct net_device
*dev
)
1524 struct rhine_private
*rp
= netdev_priv(dev
);
1525 void __iomem
*ioaddr
= rp
->base
;
1527 u32 vCAMmask
= 0; /* 32 vCAMs (6105M and better) */
1530 for_each_set_bit(vid
, rp
->active_vlans
, VLAN_N_VID
) {
1531 rhine_set_vlan_cam(ioaddr
, i
, (u8
*)&vid
);
1533 if (++i
>= VCAM_SIZE
)
1536 rhine_set_vlan_cam_mask(ioaddr
, vCAMmask
);
1539 static int rhine_vlan_rx_add_vid(struct net_device
*dev
, __be16 proto
, u16 vid
)
1541 struct rhine_private
*rp
= netdev_priv(dev
);
1543 spin_lock_bh(&rp
->lock
);
1544 set_bit(vid
, rp
->active_vlans
);
1545 rhine_update_vcam(dev
);
1546 spin_unlock_bh(&rp
->lock
);
1550 static int rhine_vlan_rx_kill_vid(struct net_device
*dev
, __be16 proto
, u16 vid
)
1552 struct rhine_private
*rp
= netdev_priv(dev
);
1554 spin_lock_bh(&rp
->lock
);
1555 clear_bit(vid
, rp
->active_vlans
);
1556 rhine_update_vcam(dev
);
1557 spin_unlock_bh(&rp
->lock
);
1561 static void init_registers(struct net_device
*dev
)
1563 struct rhine_private
*rp
= netdev_priv(dev
);
1564 void __iomem
*ioaddr
= rp
->base
;
1567 for (i
= 0; i
< 6; i
++)
1568 iowrite8(dev
->dev_addr
[i
], ioaddr
+ StationAddr
+ i
);
1570 /* Initialize other registers. */
1571 iowrite16(0x0006, ioaddr
+ PCIBusConfig
); /* Tune configuration??? */
1572 /* Configure initial FIFO thresholds. */
1573 iowrite8(0x20, ioaddr
+ TxConfig
);
1574 rp
->tx_thresh
= 0x20;
1575 rp
->rx_thresh
= 0x60; /* Written in rhine_set_rx_mode(). */
1577 iowrite32(rp
->rx_ring_dma
, ioaddr
+ RxRingPtr
);
1578 iowrite32(rp
->tx_ring_dma
, ioaddr
+ TxRingPtr
);
1580 rhine_set_rx_mode(dev
);
1582 if (rp
->quirks
& rqMgmt
)
1583 rhine_init_cam_filter(dev
);
1585 napi_enable(&rp
->napi
);
1587 iowrite16(RHINE_EVENT
& 0xffff, ioaddr
+ IntrEnable
);
1589 iowrite16(CmdStart
| CmdTxOn
| CmdRxOn
| (Cmd1NoTxPoll
<< 8),
1591 rhine_check_media(dev
, 1);
1594 /* Enable MII link status auto-polling (required for IntrLinkChange) */
1595 static void rhine_enable_linkmon(struct rhine_private
*rp
)
1597 void __iomem
*ioaddr
= rp
->base
;
1599 iowrite8(0, ioaddr
+ MIICmd
);
1600 iowrite8(MII_BMSR
, ioaddr
+ MIIRegAddr
);
1601 iowrite8(0x80, ioaddr
+ MIICmd
);
1603 rhine_wait_bit_high(rp
, MIIRegAddr
, 0x20);
1605 iowrite8(MII_BMSR
| 0x40, ioaddr
+ MIIRegAddr
);
1608 /* Disable MII link status auto-polling (required for MDIO access) */
1609 static void rhine_disable_linkmon(struct rhine_private
*rp
)
1611 void __iomem
*ioaddr
= rp
->base
;
1613 iowrite8(0, ioaddr
+ MIICmd
);
1615 if (rp
->quirks
& rqRhineI
) {
1616 iowrite8(0x01, ioaddr
+ MIIRegAddr
); // MII_BMSR
1618 /* Can be called from ISR. Evil. */
1621 /* 0x80 must be set immediately before turning it off */
1622 iowrite8(0x80, ioaddr
+ MIICmd
);
1624 rhine_wait_bit_high(rp
, MIIRegAddr
, 0x20);
1626 /* Heh. Now clear 0x80 again. */
1627 iowrite8(0, ioaddr
+ MIICmd
);
1630 rhine_wait_bit_high(rp
, MIIRegAddr
, 0x80);
1633 /* Read and write over the MII Management Data I/O (MDIO) interface. */
1635 static int mdio_read(struct net_device
*dev
, int phy_id
, int regnum
)
1637 struct rhine_private
*rp
= netdev_priv(dev
);
1638 void __iomem
*ioaddr
= rp
->base
;
1641 rhine_disable_linkmon(rp
);
1643 /* rhine_disable_linkmon already cleared MIICmd */
1644 iowrite8(phy_id
, ioaddr
+ MIIPhyAddr
);
1645 iowrite8(regnum
, ioaddr
+ MIIRegAddr
);
1646 iowrite8(0x40, ioaddr
+ MIICmd
); /* Trigger read */
1647 rhine_wait_bit_low(rp
, MIICmd
, 0x40);
1648 result
= ioread16(ioaddr
+ MIIData
);
1650 rhine_enable_linkmon(rp
);
1654 static void mdio_write(struct net_device
*dev
, int phy_id
, int regnum
, int value
)
1656 struct rhine_private
*rp
= netdev_priv(dev
);
1657 void __iomem
*ioaddr
= rp
->base
;
1659 rhine_disable_linkmon(rp
);
1661 /* rhine_disable_linkmon already cleared MIICmd */
1662 iowrite8(phy_id
, ioaddr
+ MIIPhyAddr
);
1663 iowrite8(regnum
, ioaddr
+ MIIRegAddr
);
1664 iowrite16(value
, ioaddr
+ MIIData
);
1665 iowrite8(0x20, ioaddr
+ MIICmd
); /* Trigger write */
1666 rhine_wait_bit_low(rp
, MIICmd
, 0x20);
1668 rhine_enable_linkmon(rp
);
1671 static void rhine_task_disable(struct rhine_private
*rp
)
1673 mutex_lock(&rp
->task_lock
);
1674 rp
->task_enable
= false;
1675 mutex_unlock(&rp
->task_lock
);
1677 cancel_work_sync(&rp
->slow_event_task
);
1678 cancel_work_sync(&rp
->reset_task
);
1681 static void rhine_task_enable(struct rhine_private
*rp
)
1683 mutex_lock(&rp
->task_lock
);
1684 rp
->task_enable
= true;
1685 mutex_unlock(&rp
->task_lock
);
1688 static int rhine_open(struct net_device
*dev
)
1690 struct rhine_private
*rp
= netdev_priv(dev
);
1691 void __iomem
*ioaddr
= rp
->base
;
1694 rc
= request_irq(rp
->irq
, rhine_interrupt
, IRQF_SHARED
, dev
->name
, dev
);
1698 netif_dbg(rp
, ifup
, dev
, "%s() irq %d\n", __func__
, rp
->irq
);
1700 rc
= alloc_ring(dev
);
1704 rc
= alloc_rbufs(dev
);
1709 rhine_chip_reset(dev
);
1710 rhine_task_enable(rp
);
1711 init_registers(dev
);
1713 netif_dbg(rp
, ifup
, dev
, "%s() Done - status %04x MII status: %04x\n",
1714 __func__
, ioread16(ioaddr
+ ChipCmd
),
1715 mdio_read(dev
, rp
->mii_if
.phy_id
, MII_BMSR
));
1717 netif_start_queue(dev
);
1725 free_irq(rp
->irq
, dev
);
1729 static void rhine_reset_task(struct work_struct
*work
)
1731 struct rhine_private
*rp
= container_of(work
, struct rhine_private
,
1733 struct net_device
*dev
= rp
->dev
;
1735 mutex_lock(&rp
->task_lock
);
1737 if (!rp
->task_enable
)
1740 napi_disable(&rp
->napi
);
1741 netif_tx_disable(dev
);
1742 spin_lock_bh(&rp
->lock
);
1744 /* clear all descriptors */
1748 rhine_reset_rbufs(rp
);
1750 /* Reinitialize the hardware. */
1751 rhine_chip_reset(dev
);
1752 init_registers(dev
);
1754 spin_unlock_bh(&rp
->lock
);
1756 netif_trans_update(dev
); /* prevent tx timeout */
1757 dev
->stats
.tx_errors
++;
1758 netif_wake_queue(dev
);
1761 mutex_unlock(&rp
->task_lock
);
1764 static void rhine_tx_timeout(struct net_device
*dev
, unsigned int txqueue
)
1766 struct rhine_private
*rp
= netdev_priv(dev
);
1767 void __iomem
*ioaddr
= rp
->base
;
1769 netdev_warn(dev
, "Transmit timed out, status %04x, PHY status %04x, resetting...\n",
1770 ioread16(ioaddr
+ IntrStatus
),
1771 mdio_read(dev
, rp
->mii_if
.phy_id
, MII_BMSR
));
1773 schedule_work(&rp
->reset_task
);
1776 static inline bool rhine_tx_queue_full(struct rhine_private
*rp
)
1778 return (rp
->cur_tx
- rp
->dirty_tx
) >= TX_QUEUE_LEN
;
1781 static netdev_tx_t
rhine_start_tx(struct sk_buff
*skb
,
1782 struct net_device
*dev
)
1784 struct rhine_private
*rp
= netdev_priv(dev
);
1785 struct device
*hwdev
= dev
->dev
.parent
;
1786 void __iomem
*ioaddr
= rp
->base
;
1789 /* Caution: the write order is important here, set the field
1790 with the "ownership" bits last. */
1792 /* Calculate the next Tx descriptor entry. */
1793 entry
= rp
->cur_tx
% TX_RING_SIZE
;
1795 if (skb_padto(skb
, ETH_ZLEN
))
1796 return NETDEV_TX_OK
;
1798 rp
->tx_skbuff
[entry
] = skb
;
1800 if ((rp
->quirks
& rqRhineI
) &&
1801 (((unsigned long)skb
->data
& 3) || skb_shinfo(skb
)->nr_frags
!= 0 || skb
->ip_summed
== CHECKSUM_PARTIAL
)) {
1802 /* Must use alignment buffer. */
1803 if (skb
->len
> PKT_BUF_SZ
) {
1804 /* packet too long, drop it */
1805 dev_kfree_skb_any(skb
);
1806 rp
->tx_skbuff
[entry
] = NULL
;
1807 dev
->stats
.tx_dropped
++;
1808 return NETDEV_TX_OK
;
1811 /* Padding is not copied and so must be redone. */
1812 skb_copy_and_csum_dev(skb
, rp
->tx_buf
[entry
]);
1813 if (skb
->len
< ETH_ZLEN
)
1814 memset(rp
->tx_buf
[entry
] + skb
->len
, 0,
1815 ETH_ZLEN
- skb
->len
);
1816 rp
->tx_skbuff_dma
[entry
] = 0;
1817 rp
->tx_ring
[entry
].addr
= cpu_to_le32(rp
->tx_bufs_dma
+
1818 (rp
->tx_buf
[entry
] -
1821 rp
->tx_skbuff_dma
[entry
] =
1822 dma_map_single(hwdev
, skb
->data
, skb
->len
,
1824 if (dma_mapping_error(hwdev
, rp
->tx_skbuff_dma
[entry
])) {
1825 dev_kfree_skb_any(skb
);
1826 rp
->tx_skbuff_dma
[entry
] = 0;
1827 dev
->stats
.tx_dropped
++;
1828 return NETDEV_TX_OK
;
1830 rp
->tx_ring
[entry
].addr
= cpu_to_le32(rp
->tx_skbuff_dma
[entry
]);
1833 rp
->tx_ring
[entry
].desc_length
=
1834 cpu_to_le32(TXDESC
| (skb
->len
>= ETH_ZLEN
? skb
->len
: ETH_ZLEN
));
1836 if (unlikely(skb_vlan_tag_present(skb
))) {
1837 u16 vid_pcp
= skb_vlan_tag_get(skb
);
1839 /* drop CFI/DEI bit, register needs VID and PCP */
1840 vid_pcp
= (vid_pcp
& VLAN_VID_MASK
) |
1841 ((vid_pcp
& VLAN_PRIO_MASK
) >> 1);
1842 rp
->tx_ring
[entry
].tx_status
= cpu_to_le32((vid_pcp
) << 16);
1843 /* request tagging */
1844 rp
->tx_ring
[entry
].desc_length
|= cpu_to_le32(0x020000);
1847 rp
->tx_ring
[entry
].tx_status
= 0;
1849 netdev_sent_queue(dev
, skb
->len
);
1852 rp
->tx_ring
[entry
].tx_status
|= cpu_to_le32(DescOwn
);
1857 * Nobody wants cur_tx write to rot for ages after the NIC will have
1858 * seen the transmit request, especially as the transmit completion
1859 * handler could miss it.
1863 /* Non-x86 Todo: explicitly flush cache lines here. */
1865 if (skb_vlan_tag_present(skb
))
1866 /* Tx queues are bits 7-0 (first Tx queue: bit 7) */
1867 BYTE_REG_BITS_ON(1 << 7, ioaddr
+ TQWake
);
1869 /* Wake the potentially-idle transmit channel */
1870 iowrite8(ioread8(ioaddr
+ ChipCmd1
) | Cmd1TxDemand
,
1874 /* dirty_tx may be pessimistically out-of-sync. See rhine_tx. */
1875 if (rhine_tx_queue_full(rp
)) {
1876 netif_stop_queue(dev
);
1879 if (!rhine_tx_queue_full(rp
))
1880 netif_wake_queue(dev
);
1883 netif_dbg(rp
, tx_queued
, dev
, "Transmit frame #%d queued in slot %d\n",
1884 rp
->cur_tx
- 1, entry
);
1886 return NETDEV_TX_OK
;
1889 static void rhine_irq_disable(struct rhine_private
*rp
)
1891 iowrite16(0x0000, rp
->base
+ IntrEnable
);
1894 /* The interrupt handler does all of the Rx thread work and cleans up
1895 after the Tx thread. */
1896 static irqreturn_t
rhine_interrupt(int irq
, void *dev_instance
)
1898 struct net_device
*dev
= dev_instance
;
1899 struct rhine_private
*rp
= netdev_priv(dev
);
1903 status
= rhine_get_events(rp
);
1905 netif_dbg(rp
, intr
, dev
, "Interrupt, status %08x\n", status
);
1907 if (status
& RHINE_EVENT
) {
1910 rhine_irq_disable(rp
);
1911 napi_schedule(&rp
->napi
);
1914 if (status
& ~(IntrLinkChange
| IntrStatsMax
| RHINE_EVENT_NAPI
)) {
1915 netif_err(rp
, intr
, dev
, "Something Wicked happened! %08x\n",
1919 return IRQ_RETVAL(handled
);
1922 /* This routine is logically part of the interrupt handler, but isolated
1924 static void rhine_tx(struct net_device
*dev
)
1926 struct rhine_private
*rp
= netdev_priv(dev
);
1927 struct device
*hwdev
= dev
->dev
.parent
;
1928 unsigned int pkts_compl
= 0, bytes_compl
= 0;
1929 unsigned int dirty_tx
= rp
->dirty_tx
;
1930 unsigned int cur_tx
;
1931 struct sk_buff
*skb
;
1934 * The race with rhine_start_tx does not matter here as long as the
1935 * driver enforces a value of cur_tx that was relevant when the
1936 * packet was scheduled to the network chipset.
1937 * Executive summary: smp_rmb() balances smp_wmb() in rhine_start_tx.
1940 cur_tx
= rp
->cur_tx
;
1941 /* find and cleanup dirty tx descriptors */
1942 while (dirty_tx
!= cur_tx
) {
1943 unsigned int entry
= dirty_tx
% TX_RING_SIZE
;
1944 u32 txstatus
= le32_to_cpu(rp
->tx_ring
[entry
].tx_status
);
1946 netif_dbg(rp
, tx_done
, dev
, "Tx scavenge %d status %08x\n",
1948 if (txstatus
& DescOwn
)
1950 skb
= rp
->tx_skbuff
[entry
];
1951 if (txstatus
& 0x8000) {
1952 netif_dbg(rp
, tx_done
, dev
,
1953 "Transmit error, Tx status %08x\n", txstatus
);
1954 dev
->stats
.tx_errors
++;
1955 if (txstatus
& 0x0400)
1956 dev
->stats
.tx_carrier_errors
++;
1957 if (txstatus
& 0x0200)
1958 dev
->stats
.tx_window_errors
++;
1959 if (txstatus
& 0x0100)
1960 dev
->stats
.tx_aborted_errors
++;
1961 if (txstatus
& 0x0080)
1962 dev
->stats
.tx_heartbeat_errors
++;
1963 if (((rp
->quirks
& rqRhineI
) && txstatus
& 0x0002) ||
1964 (txstatus
& 0x0800) || (txstatus
& 0x1000)) {
1965 dev
->stats
.tx_fifo_errors
++;
1966 rp
->tx_ring
[entry
].tx_status
= cpu_to_le32(DescOwn
);
1967 break; /* Keep the skb - we try again */
1969 /* Transmitter restarted in 'abnormal' handler. */
1971 if (rp
->quirks
& rqRhineI
)
1972 dev
->stats
.collisions
+= (txstatus
>> 3) & 0x0F;
1974 dev
->stats
.collisions
+= txstatus
& 0x0F;
1975 netif_dbg(rp
, tx_done
, dev
, "collisions: %1.1x:%1.1x\n",
1976 (txstatus
>> 3) & 0xF, txstatus
& 0xF);
1978 u64_stats_update_begin(&rp
->tx_stats
.syncp
);
1979 rp
->tx_stats
.bytes
+= skb
->len
;
1980 rp
->tx_stats
.packets
++;
1981 u64_stats_update_end(&rp
->tx_stats
.syncp
);
1983 /* Free the original skb. */
1984 if (rp
->tx_skbuff_dma
[entry
]) {
1985 dma_unmap_single(hwdev
,
1986 rp
->tx_skbuff_dma
[entry
],
1990 bytes_compl
+= skb
->len
;
1992 dev_consume_skb_any(skb
);
1993 rp
->tx_skbuff
[entry
] = NULL
;
1997 rp
->dirty_tx
= dirty_tx
;
1998 /* Pity we can't rely on the nearby BQL completion implicit barrier. */
2001 netdev_completed_queue(dev
, pkts_compl
, bytes_compl
);
2003 /* cur_tx may be optimistically out-of-sync. See rhine_start_tx. */
2004 if (!rhine_tx_queue_full(rp
) && netif_queue_stopped(dev
)) {
2005 netif_wake_queue(dev
);
2008 if (rhine_tx_queue_full(rp
))
2009 netif_stop_queue(dev
);
2014 * rhine_get_vlan_tci - extract TCI from Rx data buffer
2015 * @skb: pointer to sk_buff
2016 * @data_size: used data area of the buffer including CRC
2018 * If hardware VLAN tag extraction is enabled and the chip indicates a 802.1Q
2019 * packet, the extracted 802.1Q header (2 bytes TPID + 2 bytes TCI) is 4-byte
2020 * aligned following the CRC.
2022 static inline u16
rhine_get_vlan_tci(struct sk_buff
*skb
, int data_size
)
2024 u8
*trailer
= (u8
*)skb
->data
+ ((data_size
+ 3) & ~3) + 2;
2025 return be16_to_cpup((__be16
*)trailer
);
2028 static inline void rhine_rx_vlan_tag(struct sk_buff
*skb
, struct rx_desc
*desc
,
2032 if (unlikely(desc
->desc_length
& cpu_to_le32(DescTag
))) {
2035 vlan_tci
= rhine_get_vlan_tci(skb
, data_size
);
2036 __vlan_hwaccel_put_tag(skb
, htons(ETH_P_8021Q
), vlan_tci
);
2040 /* Process up to limit frames from receive ring */
2041 static int rhine_rx(struct net_device
*dev
, int limit
)
2043 struct rhine_private
*rp
= netdev_priv(dev
);
2044 struct device
*hwdev
= dev
->dev
.parent
;
2045 int entry
= rp
->cur_rx
% RX_RING_SIZE
;
2048 netif_dbg(rp
, rx_status
, dev
, "%s(), entry %d status %08x\n", __func__
,
2049 entry
, le32_to_cpu(rp
->rx_ring
[entry
].rx_status
));
2051 /* If EOP is set on the next entry, it's a new packet. Send it up. */
2052 for (count
= 0; count
< limit
; ++count
) {
2053 struct rx_desc
*desc
= rp
->rx_ring
+ entry
;
2054 u32 desc_status
= le32_to_cpu(desc
->rx_status
);
2055 int data_size
= desc_status
>> 16;
2057 if (desc_status
& DescOwn
)
2060 netif_dbg(rp
, rx_status
, dev
, "%s() status %08x\n", __func__
,
2063 if ((desc_status
& (RxWholePkt
| RxErr
)) != RxWholePkt
) {
2064 if ((desc_status
& RxWholePkt
) != RxWholePkt
) {
2066 "Oversized Ethernet frame spanned multiple buffers, "
2067 "entry %#x length %d status %08x!\n",
2070 dev
->stats
.rx_length_errors
++;
2071 } else if (desc_status
& RxErr
) {
2072 /* There was a error. */
2073 netif_dbg(rp
, rx_err
, dev
,
2074 "%s() Rx error %08x\n", __func__
,
2076 dev
->stats
.rx_errors
++;
2077 if (desc_status
& 0x0030)
2078 dev
->stats
.rx_length_errors
++;
2079 if (desc_status
& 0x0048)
2080 dev
->stats
.rx_fifo_errors
++;
2081 if (desc_status
& 0x0004)
2082 dev
->stats
.rx_frame_errors
++;
2083 if (desc_status
& 0x0002) {
2084 /* this can also be updated outside the interrupt handler */
2085 spin_lock(&rp
->lock
);
2086 dev
->stats
.rx_crc_errors
++;
2087 spin_unlock(&rp
->lock
);
2091 /* Length should omit the CRC */
2092 int pkt_len
= data_size
- 4;
2093 struct sk_buff
*skb
;
2095 /* Check if the packet is long enough to accept without
2096 copying to a minimally-sized skbuff. */
2097 if (pkt_len
< rx_copybreak
) {
2098 skb
= netdev_alloc_skb_ip_align(dev
, pkt_len
);
2102 dma_sync_single_for_cpu(hwdev
,
2103 rp
->rx_skbuff_dma
[entry
],
2107 skb_copy_to_linear_data(skb
,
2108 rp
->rx_skbuff
[entry
]->data
,
2111 dma_sync_single_for_device(hwdev
,
2112 rp
->rx_skbuff_dma
[entry
],
2116 struct rhine_skb_dma sd
;
2118 if (unlikely(rhine_skb_dma_init(dev
, &sd
) < 0))
2121 skb
= rp
->rx_skbuff
[entry
];
2123 dma_unmap_single(hwdev
,
2124 rp
->rx_skbuff_dma
[entry
],
2127 rhine_skb_dma_nic_store(rp
, &sd
, entry
);
2130 skb_put(skb
, pkt_len
);
2132 rhine_rx_vlan_tag(skb
, desc
, data_size
);
2134 skb
->protocol
= eth_type_trans(skb
, dev
);
2136 netif_receive_skb(skb
);
2138 u64_stats_update_begin(&rp
->rx_stats
.syncp
);
2139 rp
->rx_stats
.bytes
+= pkt_len
;
2140 rp
->rx_stats
.packets
++;
2141 u64_stats_update_end(&rp
->rx_stats
.syncp
);
2143 give_descriptor_to_nic
:
2144 desc
->rx_status
= cpu_to_le32(DescOwn
);
2145 entry
= (++rp
->cur_rx
) % RX_RING_SIZE
;
2151 dev
->stats
.rx_dropped
++;
2152 goto give_descriptor_to_nic
;
2155 static void rhine_restart_tx(struct net_device
*dev
) {
2156 struct rhine_private
*rp
= netdev_priv(dev
);
2157 void __iomem
*ioaddr
= rp
->base
;
2158 int entry
= rp
->dirty_tx
% TX_RING_SIZE
;
2162 * If new errors occurred, we need to sort them out before doing Tx.
2163 * In that case the ISR will be back here RSN anyway.
2165 intr_status
= rhine_get_events(rp
);
2167 if ((intr_status
& IntrTxErrSummary
) == 0) {
2169 /* We know better than the chip where it should continue. */
2170 iowrite32(rp
->tx_ring_dma
+ entry
* sizeof(struct tx_desc
),
2171 ioaddr
+ TxRingPtr
);
2173 iowrite8(ioread8(ioaddr
+ ChipCmd
) | CmdTxOn
,
2176 if (rp
->tx_ring
[entry
].desc_length
& cpu_to_le32(0x020000))
2177 /* Tx queues are bits 7-0 (first Tx queue: bit 7) */
2178 BYTE_REG_BITS_ON(1 << 7, ioaddr
+ TQWake
);
2180 iowrite8(ioread8(ioaddr
+ ChipCmd1
) | Cmd1TxDemand
,
2185 /* This should never happen */
2186 netif_warn(rp
, tx_err
, dev
, "another error occurred %08x\n",
2192 static void rhine_slow_event_task(struct work_struct
*work
)
2194 struct rhine_private
*rp
=
2195 container_of(work
, struct rhine_private
, slow_event_task
);
2196 struct net_device
*dev
= rp
->dev
;
2199 mutex_lock(&rp
->task_lock
);
2201 if (!rp
->task_enable
)
2204 intr_status
= rhine_get_events(rp
);
2205 rhine_ack_events(rp
, intr_status
& RHINE_EVENT_SLOW
);
2207 if (intr_status
& IntrLinkChange
)
2208 rhine_check_media(dev
, 0);
2210 if (intr_status
& IntrPCIErr
)
2211 netif_warn(rp
, hw
, dev
, "PCI error\n");
2213 iowrite16(RHINE_EVENT
& 0xffff, rp
->base
+ IntrEnable
);
2216 mutex_unlock(&rp
->task_lock
);
2220 rhine_get_stats64(struct net_device
*dev
, struct rtnl_link_stats64
*stats
)
2222 struct rhine_private
*rp
= netdev_priv(dev
);
2225 spin_lock_bh(&rp
->lock
);
2226 rhine_update_rx_crc_and_missed_errord(rp
);
2227 spin_unlock_bh(&rp
->lock
);
2229 netdev_stats_to_stats64(stats
, &dev
->stats
);
2232 start
= u64_stats_fetch_begin_irq(&rp
->rx_stats
.syncp
);
2233 stats
->rx_packets
= rp
->rx_stats
.packets
;
2234 stats
->rx_bytes
= rp
->rx_stats
.bytes
;
2235 } while (u64_stats_fetch_retry_irq(&rp
->rx_stats
.syncp
, start
));
2238 start
= u64_stats_fetch_begin_irq(&rp
->tx_stats
.syncp
);
2239 stats
->tx_packets
= rp
->tx_stats
.packets
;
2240 stats
->tx_bytes
= rp
->tx_stats
.bytes
;
2241 } while (u64_stats_fetch_retry_irq(&rp
->tx_stats
.syncp
, start
));
2244 static void rhine_set_rx_mode(struct net_device
*dev
)
2246 struct rhine_private
*rp
= netdev_priv(dev
);
2247 void __iomem
*ioaddr
= rp
->base
;
2248 u32 mc_filter
[2]; /* Multicast hash filter */
2249 u8 rx_mode
= 0x0C; /* Note: 0x02=accept runt, 0x01=accept errs */
2250 struct netdev_hw_addr
*ha
;
2252 if (dev
->flags
& IFF_PROMISC
) { /* Set promiscuous. */
2254 iowrite32(0xffffffff, ioaddr
+ MulticastFilter0
);
2255 iowrite32(0xffffffff, ioaddr
+ MulticastFilter1
);
2256 } else if ((netdev_mc_count(dev
) > multicast_filter_limit
) ||
2257 (dev
->flags
& IFF_ALLMULTI
)) {
2258 /* Too many to match, or accept all multicasts. */
2259 iowrite32(0xffffffff, ioaddr
+ MulticastFilter0
);
2260 iowrite32(0xffffffff, ioaddr
+ MulticastFilter1
);
2261 } else if (rp
->quirks
& rqMgmt
) {
2263 u32 mCAMmask
= 0; /* 32 mCAMs (6105M and better) */
2264 netdev_for_each_mc_addr(ha
, dev
) {
2267 rhine_set_cam(ioaddr
, i
, ha
->addr
);
2271 rhine_set_cam_mask(ioaddr
, mCAMmask
);
2273 memset(mc_filter
, 0, sizeof(mc_filter
));
2274 netdev_for_each_mc_addr(ha
, dev
) {
2275 int bit_nr
= ether_crc(ETH_ALEN
, ha
->addr
) >> 26;
2277 mc_filter
[bit_nr
>> 5] |= 1 << (bit_nr
& 31);
2279 iowrite32(mc_filter
[0], ioaddr
+ MulticastFilter0
);
2280 iowrite32(mc_filter
[1], ioaddr
+ MulticastFilter1
);
2282 /* enable/disable VLAN receive filtering */
2283 if (rp
->quirks
& rqMgmt
) {
2284 if (dev
->flags
& IFF_PROMISC
)
2285 BYTE_REG_BITS_OFF(BCR1_VIDFR
, ioaddr
+ PCIBusConfig1
);
2287 BYTE_REG_BITS_ON(BCR1_VIDFR
, ioaddr
+ PCIBusConfig1
);
2289 BYTE_REG_BITS_ON(rx_mode
, ioaddr
+ RxConfig
);
2292 static void netdev_get_drvinfo(struct net_device
*dev
, struct ethtool_drvinfo
*info
)
2294 struct device
*hwdev
= dev
->dev
.parent
;
2296 strlcpy(info
->driver
, DRV_NAME
, sizeof(info
->driver
));
2297 strlcpy(info
->version
, DRV_VERSION
, sizeof(info
->version
));
2298 strlcpy(info
->bus_info
, dev_name(hwdev
), sizeof(info
->bus_info
));
2301 static int netdev_get_link_ksettings(struct net_device
*dev
,
2302 struct ethtool_link_ksettings
*cmd
)
2304 struct rhine_private
*rp
= netdev_priv(dev
);
2306 mutex_lock(&rp
->task_lock
);
2307 mii_ethtool_get_link_ksettings(&rp
->mii_if
, cmd
);
2308 mutex_unlock(&rp
->task_lock
);
2313 static int netdev_set_link_ksettings(struct net_device
*dev
,
2314 const struct ethtool_link_ksettings
*cmd
)
2316 struct rhine_private
*rp
= netdev_priv(dev
);
2319 mutex_lock(&rp
->task_lock
);
2320 rc
= mii_ethtool_set_link_ksettings(&rp
->mii_if
, cmd
);
2321 rhine_set_carrier(&rp
->mii_if
);
2322 mutex_unlock(&rp
->task_lock
);
2327 static int netdev_nway_reset(struct net_device
*dev
)
2329 struct rhine_private
*rp
= netdev_priv(dev
);
2331 return mii_nway_restart(&rp
->mii_if
);
2334 static u32
netdev_get_link(struct net_device
*dev
)
2336 struct rhine_private
*rp
= netdev_priv(dev
);
2338 return mii_link_ok(&rp
->mii_if
);
2341 static u32
netdev_get_msglevel(struct net_device
*dev
)
2343 struct rhine_private
*rp
= netdev_priv(dev
);
2345 return rp
->msg_enable
;
2348 static void netdev_set_msglevel(struct net_device
*dev
, u32 value
)
2350 struct rhine_private
*rp
= netdev_priv(dev
);
2352 rp
->msg_enable
= value
;
2355 static void rhine_get_wol(struct net_device
*dev
, struct ethtool_wolinfo
*wol
)
2357 struct rhine_private
*rp
= netdev_priv(dev
);
2359 if (!(rp
->quirks
& rqWOL
))
2362 spin_lock_irq(&rp
->lock
);
2363 wol
->supported
= WAKE_PHY
| WAKE_MAGIC
|
2364 WAKE_UCAST
| WAKE_MCAST
| WAKE_BCAST
; /* Untested */
2365 wol
->wolopts
= rp
->wolopts
;
2366 spin_unlock_irq(&rp
->lock
);
2369 static int rhine_set_wol(struct net_device
*dev
, struct ethtool_wolinfo
*wol
)
2371 struct rhine_private
*rp
= netdev_priv(dev
);
2372 u32 support
= WAKE_PHY
| WAKE_MAGIC
|
2373 WAKE_UCAST
| WAKE_MCAST
| WAKE_BCAST
; /* Untested */
2375 if (!(rp
->quirks
& rqWOL
))
2378 if (wol
->wolopts
& ~support
)
2381 spin_lock_irq(&rp
->lock
);
2382 rp
->wolopts
= wol
->wolopts
;
2383 spin_unlock_irq(&rp
->lock
);
2388 static const struct ethtool_ops netdev_ethtool_ops
= {
2389 .get_drvinfo
= netdev_get_drvinfo
,
2390 .nway_reset
= netdev_nway_reset
,
2391 .get_link
= netdev_get_link
,
2392 .get_msglevel
= netdev_get_msglevel
,
2393 .set_msglevel
= netdev_set_msglevel
,
2394 .get_wol
= rhine_get_wol
,
2395 .set_wol
= rhine_set_wol
,
2396 .get_link_ksettings
= netdev_get_link_ksettings
,
2397 .set_link_ksettings
= netdev_set_link_ksettings
,
2400 static int netdev_ioctl(struct net_device
*dev
, struct ifreq
*rq
, int cmd
)
2402 struct rhine_private
*rp
= netdev_priv(dev
);
2405 if (!netif_running(dev
))
2408 mutex_lock(&rp
->task_lock
);
2409 rc
= generic_mii_ioctl(&rp
->mii_if
, if_mii(rq
), cmd
, NULL
);
2410 rhine_set_carrier(&rp
->mii_if
);
2411 mutex_unlock(&rp
->task_lock
);
2416 static int rhine_close(struct net_device
*dev
)
2418 struct rhine_private
*rp
= netdev_priv(dev
);
2419 void __iomem
*ioaddr
= rp
->base
;
2421 rhine_task_disable(rp
);
2422 napi_disable(&rp
->napi
);
2423 netif_stop_queue(dev
);
2425 netif_dbg(rp
, ifdown
, dev
, "Shutting down ethercard, status was %04x\n",
2426 ioread16(ioaddr
+ ChipCmd
));
2428 /* Switch to loopback mode to avoid hardware races. */
2429 iowrite8(rp
->tx_thresh
| 0x02, ioaddr
+ TxConfig
);
2431 rhine_irq_disable(rp
);
2433 /* Stop the chip's Tx and Rx processes. */
2434 iowrite16(CmdStop
, ioaddr
+ ChipCmd
);
2436 free_irq(rp
->irq
, dev
);
2445 static void rhine_remove_one_pci(struct pci_dev
*pdev
)
2447 struct net_device
*dev
= pci_get_drvdata(pdev
);
2448 struct rhine_private
*rp
= netdev_priv(dev
);
2450 unregister_netdev(dev
);
2452 pci_iounmap(pdev
, rp
->base
);
2453 pci_release_regions(pdev
);
2456 pci_disable_device(pdev
);
2459 static int rhine_remove_one_platform(struct platform_device
*pdev
)
2461 struct net_device
*dev
= platform_get_drvdata(pdev
);
2462 struct rhine_private
*rp
= netdev_priv(dev
);
2464 unregister_netdev(dev
);
2473 static void rhine_shutdown_pci(struct pci_dev
*pdev
)
2475 struct net_device
*dev
= pci_get_drvdata(pdev
);
2476 struct rhine_private
*rp
= netdev_priv(dev
);
2477 void __iomem
*ioaddr
= rp
->base
;
2479 if (!(rp
->quirks
& rqWOL
))
2480 return; /* Nothing to do for non-WOL adapters */
2482 rhine_power_init(dev
);
2484 /* Make sure we use pattern 0, 1 and not 4, 5 */
2485 if (rp
->quirks
& rq6patterns
)
2486 iowrite8(0x04, ioaddr
+ WOLcgClr
);
2488 spin_lock(&rp
->lock
);
2490 if (rp
->wolopts
& WAKE_MAGIC
) {
2491 iowrite8(WOLmagic
, ioaddr
+ WOLcrSet
);
2493 * Turn EEPROM-controlled wake-up back on -- some hardware may
2494 * not cooperate otherwise.
2496 iowrite8(ioread8(ioaddr
+ ConfigA
) | 0x03, ioaddr
+ ConfigA
);
2499 if (rp
->wolopts
& (WAKE_BCAST
|WAKE_MCAST
))
2500 iowrite8(WOLbmcast
, ioaddr
+ WOLcgSet
);
2502 if (rp
->wolopts
& WAKE_PHY
)
2503 iowrite8(WOLlnkon
| WOLlnkoff
, ioaddr
+ WOLcrSet
);
2505 if (rp
->wolopts
& WAKE_UCAST
)
2506 iowrite8(WOLucast
, ioaddr
+ WOLcrSet
);
2509 /* Enable legacy WOL (for old motherboards) */
2510 iowrite8(0x01, ioaddr
+ PwcfgSet
);
2511 iowrite8(ioread8(ioaddr
+ StickyHW
) | 0x04, ioaddr
+ StickyHW
);
2514 spin_unlock(&rp
->lock
);
2516 if (system_state
== SYSTEM_POWER_OFF
&& !avoid_D3
) {
2517 iowrite8(ioread8(ioaddr
+ StickyHW
) | 0x03, ioaddr
+ StickyHW
);
2519 pci_wake_from_d3(pdev
, true);
2520 pci_set_power_state(pdev
, PCI_D3hot
);
2524 #ifdef CONFIG_PM_SLEEP
2525 static int rhine_suspend(struct device
*device
)
2527 struct net_device
*dev
= dev_get_drvdata(device
);
2528 struct rhine_private
*rp
= netdev_priv(dev
);
2530 if (!netif_running(dev
))
2533 rhine_task_disable(rp
);
2534 rhine_irq_disable(rp
);
2535 napi_disable(&rp
->napi
);
2537 netif_device_detach(dev
);
2539 if (dev_is_pci(device
))
2540 rhine_shutdown_pci(to_pci_dev(device
));
2545 static int rhine_resume(struct device
*device
)
2547 struct net_device
*dev
= dev_get_drvdata(device
);
2548 struct rhine_private
*rp
= netdev_priv(dev
);
2550 if (!netif_running(dev
))
2553 enable_mmio(rp
->pioaddr
, rp
->quirks
);
2554 rhine_power_init(dev
);
2557 rhine_reset_rbufs(rp
);
2558 rhine_task_enable(rp
);
2559 spin_lock_bh(&rp
->lock
);
2560 init_registers(dev
);
2561 spin_unlock_bh(&rp
->lock
);
2563 netif_device_attach(dev
);
2568 static SIMPLE_DEV_PM_OPS(rhine_pm_ops
, rhine_suspend
, rhine_resume
);
2569 #define RHINE_PM_OPS (&rhine_pm_ops)
2573 #define RHINE_PM_OPS NULL
2575 #endif /* !CONFIG_PM_SLEEP */
2577 static struct pci_driver rhine_driver_pci
= {
2579 .id_table
= rhine_pci_tbl
,
2580 .probe
= rhine_init_one_pci
,
2581 .remove
= rhine_remove_one_pci
,
2582 .shutdown
= rhine_shutdown_pci
,
2583 .driver
.pm
= RHINE_PM_OPS
,
2586 static struct platform_driver rhine_driver_platform
= {
2587 .probe
= rhine_init_one_platform
,
2588 .remove
= rhine_remove_one_platform
,
2591 .of_match_table
= rhine_of_tbl
,
2596 static const struct dmi_system_id rhine_dmi_table
[] __initconst
= {
2600 DMI_MATCH(DMI_BIOS_VENDOR
, "Award Software International, Inc."),
2601 DMI_MATCH(DMI_BIOS_VERSION
, "6.00 PG"),
2607 DMI_MATCH(DMI_BIOS_VENDOR
, "Phoenix Technologies, LTD"),
2608 DMI_MATCH(DMI_BIOS_VERSION
, "6.00 PG"),
2614 static int __init
rhine_init(void)
2616 int ret_pci
, ret_platform
;
2618 /* when a module, this is printed whether or not devices are found in probe */
2620 pr_info("%s\n", version
);
2622 if (dmi_check_system(rhine_dmi_table
)) {
2623 /* these BIOSes fail at PXE boot if chip is in D3 */
2625 pr_warn("Broken BIOS detected, avoid_D3 enabled\n");
2628 pr_info("avoid_D3 set\n");
2630 ret_pci
= pci_register_driver(&rhine_driver_pci
);
2631 ret_platform
= platform_driver_register(&rhine_driver_platform
);
2632 if ((ret_pci
< 0) && (ret_platform
< 0))
2639 static void __exit
rhine_cleanup(void)
2641 platform_driver_unregister(&rhine_driver_platform
);
2642 pci_unregister_driver(&rhine_driver_pci
);
2646 module_init(rhine_init
);
2647 module_exit(rhine_cleanup
);