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