Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
[platform/kernel/linux-starfive.git] / drivers / net / ethernet / dec / tulip / tulip_core.c
1 /*      tulip_core.c: A DEC 21x4x-family ethernet driver for Linux.
2
3         Copyright 2000,2001  The Linux Kernel Team
4         Written/copyright 1994-2001 by Donald Becker.
5
6         This software may be used and distributed according to the terms
7         of the GNU General Public License, incorporated herein by reference.
8
9         Please submit bugs to http://bugzilla.kernel.org/ .
10 */
11
12 #define pr_fmt(fmt) "tulip: " fmt
13
14 #define DRV_NAME        "tulip"
15
16 #include <linux/module.h>
17 #include <linux/pci.h>
18 #include <linux/slab.h>
19 #include "tulip.h"
20 #include <linux/init.h>
21 #include <linux/interrupt.h>
22 #include <linux/etherdevice.h>
23 #include <linux/delay.h>
24 #include <linux/mii.h>
25 #include <linux/crc32.h>
26 #include <asm/unaligned.h>
27 #include <linux/uaccess.h>
28
29 #ifdef CONFIG_SPARC
30 #include <asm/prom.h>
31 #endif
32
33 /* A few user-configurable values. */
34
35 /* Maximum events (Rx packets, etc.) to handle at each interrupt. */
36 static unsigned int max_interrupt_work = 25;
37
38 #define MAX_UNITS 8
39 /* Used to pass the full-duplex flag, etc. */
40 static int full_duplex[MAX_UNITS];
41 static int options[MAX_UNITS];
42 static int mtu[MAX_UNITS];                      /* Jumbo MTU for interfaces. */
43
44 /*  The possible media types that can be set in options[] are: */
45 const char * const medianame[32] = {
46         "10baseT", "10base2", "AUI", "100baseTx",
47         "10baseT-FDX", "100baseTx-FDX", "100baseT4", "100baseFx",
48         "100baseFx-FDX", "MII 10baseT", "MII 10baseT-FDX", "MII",
49         "10baseT(forced)", "MII 100baseTx", "MII 100baseTx-FDX", "MII 100baseT4",
50         "MII 100baseFx-HDX", "MII 100baseFx-FDX", "Home-PNA 1Mbps", "Invalid-19",
51         "","","","", "","","","",  "","","","Transceiver reset",
52 };
53
54 /* Set the copy breakpoint for the copy-only-tiny-buffer Rx structure. */
55 #if defined(__alpha__) || defined(__arm__) || defined(__hppa__) || \
56         defined(CONFIG_SPARC) || defined(__ia64__) || \
57         defined(__sh__) || defined(__mips__)
58 static int rx_copybreak = 1518;
59 #else
60 static int rx_copybreak = 100;
61 #endif
62
63 /*
64   Set the bus performance register.
65         Typical: Set 16 longword cache alignment, no burst limit.
66         Cache alignment bits 15:14           Burst length 13:8
67                 0000    No alignment  0x00000000 unlimited              0800 8 longwords
68                 4000    8  longwords            0100 1 longword         1000 16 longwords
69                 8000    16 longwords            0200 2 longwords        2000 32 longwords
70                 C000    32  longwords           0400 4 longwords
71         Warning: many older 486 systems are broken and require setting 0x00A04800
72            8 longword cache alignment, 8 longword burst.
73         ToDo: Non-Intel setting could be better.
74 */
75
76 #if defined(__alpha__) || defined(__ia64__)
77 static int csr0 = 0x01A00000 | 0xE000;
78 #elif defined(__i386__) || defined(__powerpc__) || defined(__x86_64__)
79 static int csr0 = 0x01A00000 | 0x8000;
80 #elif defined(CONFIG_SPARC) || defined(__hppa__)
81 /* The UltraSparc PCI controllers will disconnect at every 64-byte
82  * crossing anyways so it makes no sense to tell Tulip to burst
83  * any more than that.
84  */
85 static int csr0 = 0x01A00000 | 0x9000;
86 #elif defined(__arm__) || defined(__sh__)
87 static int csr0 = 0x01A00000 | 0x4800;
88 #elif defined(__mips__)
89 static int csr0 = 0x00200000 | 0x4000;
90 #else
91 static int csr0;
92 #endif
93
94 /* Operational parameters that usually are not changed. */
95 /* Time in jiffies before concluding the transmitter is hung. */
96 #define TX_TIMEOUT  (4*HZ)
97
98
99 MODULE_AUTHOR("The Linux Kernel Team");
100 MODULE_DESCRIPTION("Digital 21*4* Tulip ethernet driver");
101 MODULE_LICENSE("GPL");
102 module_param(tulip_debug, int, 0);
103 module_param(max_interrupt_work, int, 0);
104 module_param(rx_copybreak, int, 0);
105 module_param(csr0, int, 0);
106 module_param_array(options, int, NULL, 0);
107 module_param_array(full_duplex, int, NULL, 0);
108
109 #ifdef TULIP_DEBUG
110 int tulip_debug = TULIP_DEBUG;
111 #else
112 int tulip_debug = 1;
113 #endif
114
115 static void tulip_timer(struct timer_list *t)
116 {
117         struct tulip_private *tp = from_timer(tp, t, timer);
118         struct net_device *dev = tp->dev;
119
120         if (netif_running(dev))
121                 schedule_work(&tp->media_work);
122 }
123
124 /*
125  * This table use during operation for capabilities and media timer.
126  *
127  * It is indexed via the values in 'enum chips'
128  */
129
130 const struct tulip_chip_table tulip_tbl[] = {
131   { }, /* placeholder for array, slot unused currently */
132   { }, /* placeholder for array, slot unused currently */
133
134   /* DC21140 */
135   { "Digital DS21140 Tulip", 128, 0x0001ebef,
136         HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM | HAS_PCI_MWI, tulip_timer,
137         tulip_media_task },
138
139   /* DC21142, DC21143 */
140   { "Digital DS21142/43 Tulip", 128, 0x0801fbff,
141         HAS_MII | HAS_MEDIA_TABLE | ALWAYS_CHECK_MII | HAS_ACPI | HAS_NWAY
142         | HAS_INTR_MITIGATION | HAS_PCI_MWI, tulip_timer, t21142_media_task },
143
144   /* LC82C168 */
145   { "Lite-On 82c168 PNIC", 256, 0x0001fbef,
146         HAS_MII | HAS_PNICNWAY, pnic_timer, },
147
148   /* MX98713 */
149   { "Macronix 98713 PMAC", 128, 0x0001ebef,
150         HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM, mxic_timer, },
151
152   /* MX98715 */
153   { "Macronix 98715 PMAC", 256, 0x0001ebef,
154         HAS_MEDIA_TABLE, mxic_timer, },
155
156   /* MX98725 */
157   { "Macronix 98725 PMAC", 256, 0x0001ebef,
158         HAS_MEDIA_TABLE, mxic_timer, },
159
160   /* AX88140 */
161   { "ASIX AX88140", 128, 0x0001fbff,
162         HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM | MC_HASH_ONLY
163         | IS_ASIX, tulip_timer, tulip_media_task },
164
165   /* PNIC2 */
166   { "Lite-On PNIC-II", 256, 0x0801fbff,
167         HAS_MII | HAS_NWAY | HAS_8023X | HAS_PCI_MWI, pnic2_timer, },
168
169   /* COMET */
170   { "ADMtek Comet", 256, 0x0001abef,
171         HAS_MII | MC_HASH_ONLY | COMET_MAC_ADDR, comet_timer, },
172
173   /* COMPEX9881 */
174   { "Compex 9881 PMAC", 128, 0x0001ebef,
175         HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM, mxic_timer, },
176
177   /* I21145 */
178   { "Intel DS21145 Tulip", 128, 0x0801fbff,
179         HAS_MII | HAS_MEDIA_TABLE | ALWAYS_CHECK_MII | HAS_ACPI
180         | HAS_NWAY | HAS_PCI_MWI, tulip_timer, tulip_media_task },
181
182   /* DM910X */
183 #ifdef CONFIG_TULIP_DM910X
184   { "Davicom DM9102/DM9102A", 128, 0x0001ebef,
185         HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM | HAS_ACPI,
186         tulip_timer, tulip_media_task },
187 #else
188   { NULL },
189 #endif
190
191   /* RS7112 */
192   { "Conexant LANfinity", 256, 0x0001ebef,
193         HAS_MII | HAS_ACPI, tulip_timer, tulip_media_task },
194
195 };
196
197
198 static const struct pci_device_id tulip_pci_tbl[] = {
199         { 0x1011, 0x0009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DC21140 },
200         { 0x1011, 0x0019, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DC21143 },
201         { 0x11AD, 0x0002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, LC82C168 },
202         { 0x10d9, 0x0512, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98713 },
203         { 0x10d9, 0x0531, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98715 },
204 /*      { 0x10d9, 0x0531, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98725 },*/
205         { 0x125B, 0x1400, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AX88140 },
206         { 0x11AD, 0xc115, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PNIC2 },
207         { 0x1317, 0x0981, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
208         { 0x1317, 0x0985, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
209         { 0x1317, 0x1985, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
210         { 0x1317, 0x9511, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
211         { 0x13D1, 0xAB02, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
212         { 0x13D1, 0xAB03, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
213         { 0x13D1, 0xAB08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
214         { 0x104A, 0x0981, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
215         { 0x104A, 0x2774, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
216         { 0x1259, 0xa120, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
217         { 0x11F6, 0x9881, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMPEX9881 },
218         { 0x8086, 0x0039, PCI_ANY_ID, PCI_ANY_ID, 0, 0, I21145 },
219 #ifdef CONFIG_TULIP_DM910X
220         { 0x1282, 0x9100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DM910X },
221         { 0x1282, 0x9102, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DM910X },
222 #endif
223         { 0x1113, 0x1216, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
224         { 0x1113, 0x1217, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98715 },
225         { 0x1113, 0x9511, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
226         { 0x1186, 0x1541, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
227         { 0x1186, 0x1561, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
228         { 0x1186, 0x1591, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
229         { 0x14f1, 0x1803, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CONEXANT },
230         { 0x1626, 0x8410, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
231         { 0x1737, 0xAB09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
232         { 0x1737, 0xAB08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
233         { 0x17B3, 0xAB08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
234         { 0x10b7, 0x9300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, /* 3Com 3CSOHO100B-TX */
235         { 0x14ea, 0xab08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, /* Planex FNW-3602-TX */
236         { 0x1414, 0x0001, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, /* Microsoft MN-120 */
237         { 0x1414, 0x0002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
238         { } /* terminate list */
239 };
240 MODULE_DEVICE_TABLE(pci, tulip_pci_tbl);
241
242
243 /* A full-duplex map for media types. */
244 const char tulip_media_cap[32] =
245 {0,0,0,16,  3,19,16,24,  27,4,7,5, 0,20,23,20,  28,31,0,0, };
246
247 static void tulip_tx_timeout(struct net_device *dev, unsigned int txqueue);
248 static void tulip_init_ring(struct net_device *dev);
249 static void tulip_free_ring(struct net_device *dev);
250 static netdev_tx_t tulip_start_xmit(struct sk_buff *skb,
251                                           struct net_device *dev);
252 static int tulip_open(struct net_device *dev);
253 static int tulip_close(struct net_device *dev);
254 static void tulip_up(struct net_device *dev);
255 static void tulip_down(struct net_device *dev);
256 static struct net_device_stats *tulip_get_stats(struct net_device *dev);
257 static int private_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
258 static void set_rx_mode(struct net_device *dev);
259 static void tulip_set_wolopts(struct pci_dev *pdev, u32 wolopts);
260 #ifdef CONFIG_NET_POLL_CONTROLLER
261 static void poll_tulip(struct net_device *dev);
262 #endif
263
264 static void tulip_set_power_state (struct tulip_private *tp,
265                                    int sleep, int snooze)
266 {
267         if (tp->flags & HAS_ACPI) {
268                 u32 tmp, newtmp;
269                 pci_read_config_dword (tp->pdev, CFDD, &tmp);
270                 newtmp = tmp & ~(CFDD_Sleep | CFDD_Snooze);
271                 if (sleep)
272                         newtmp |= CFDD_Sleep;
273                 else if (snooze)
274                         newtmp |= CFDD_Snooze;
275                 if (tmp != newtmp)
276                         pci_write_config_dword (tp->pdev, CFDD, newtmp);
277         }
278
279 }
280
281
282 static void tulip_up(struct net_device *dev)
283 {
284         struct tulip_private *tp = netdev_priv(dev);
285         void __iomem *ioaddr = tp->base_addr;
286         int next_tick = 3*HZ;
287         u32 reg;
288         int i;
289
290 #ifdef CONFIG_TULIP_NAPI
291         napi_enable(&tp->napi);
292 #endif
293
294         /* Wake the chip from sleep/snooze mode. */
295         tulip_set_power_state (tp, 0, 0);
296
297         /* Disable all WOL events */
298         pci_enable_wake(tp->pdev, PCI_D3hot, 0);
299         pci_enable_wake(tp->pdev, PCI_D3cold, 0);
300         tulip_set_wolopts(tp->pdev, 0);
301
302         /* On some chip revs we must set the MII/SYM port before the reset!? */
303         if (tp->mii_cnt  ||  (tp->mtable  &&  tp->mtable->has_mii))
304                 iowrite32(0x00040000, ioaddr + CSR6);
305
306         /* Reset the chip, holding bit 0 set at least 50 PCI cycles. */
307         iowrite32(0x00000001, ioaddr + CSR0);
308         pci_read_config_dword(tp->pdev, PCI_COMMAND, &reg);  /* flush write */
309         udelay(100);
310
311         /* Deassert reset.
312            Wait the specified 50 PCI cycles after a reset by initializing
313            Tx and Rx queues and the address filter list. */
314         iowrite32(tp->csr0, ioaddr + CSR0);
315         pci_read_config_dword(tp->pdev, PCI_COMMAND, &reg);  /* flush write */
316         udelay(100);
317
318         if (tulip_debug > 1)
319                 netdev_dbg(dev, "tulip_up(), irq==%d\n", tp->pdev->irq);
320
321         iowrite32(tp->rx_ring_dma, ioaddr + CSR3);
322         iowrite32(tp->tx_ring_dma, ioaddr + CSR4);
323         tp->cur_rx = tp->cur_tx = 0;
324         tp->dirty_rx = tp->dirty_tx = 0;
325
326         if (tp->flags & MC_HASH_ONLY) {
327                 u32 addr_low = get_unaligned_le32(dev->dev_addr);
328                 u32 addr_high = get_unaligned_le16(dev->dev_addr + 4);
329                 if (tp->chip_id == AX88140) {
330                         iowrite32(0, ioaddr + CSR13);
331                         iowrite32(addr_low,  ioaddr + CSR14);
332                         iowrite32(1, ioaddr + CSR13);
333                         iowrite32(addr_high, ioaddr + CSR14);
334                 } else if (tp->flags & COMET_MAC_ADDR) {
335                         iowrite32(addr_low,  ioaddr + 0xA4);
336                         iowrite32(addr_high, ioaddr + 0xA8);
337                         iowrite32(0, ioaddr + CSR27);
338                         iowrite32(0, ioaddr + CSR28);
339                 }
340         } else {
341                 /* This is set_rx_mode(), but without starting the transmitter. */
342                 const u16 *eaddrs = (const u16 *)dev->dev_addr;
343                 u16 *setup_frm = &tp->setup_frame[15*6];
344                 dma_addr_t mapping;
345
346                 /* 21140 bug: you must add the broadcast address. */
347                 memset(tp->setup_frame, 0xff, sizeof(tp->setup_frame));
348                 /* Fill the final entry of the table with our physical address. */
349                 *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
350                 *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
351                 *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
352
353                 mapping = dma_map_single(&tp->pdev->dev, tp->setup_frame,
354                                          sizeof(tp->setup_frame),
355                                          DMA_TO_DEVICE);
356                 tp->tx_buffers[tp->cur_tx].skb = NULL;
357                 tp->tx_buffers[tp->cur_tx].mapping = mapping;
358
359                 /* Put the setup frame on the Tx list. */
360                 tp->tx_ring[tp->cur_tx].length = cpu_to_le32(0x08000000 | 192);
361                 tp->tx_ring[tp->cur_tx].buffer1 = cpu_to_le32(mapping);
362                 tp->tx_ring[tp->cur_tx].status = cpu_to_le32(DescOwned);
363
364                 tp->cur_tx++;
365         }
366
367         tp->saved_if_port = dev->if_port;
368         if (dev->if_port == 0)
369                 dev->if_port = tp->default_port;
370
371         /* Allow selecting a default media. */
372         i = 0;
373         if (tp->mtable == NULL)
374                 goto media_picked;
375         if (dev->if_port) {
376                 int looking_for = tulip_media_cap[dev->if_port] & MediaIsMII ? 11 :
377                         (dev->if_port == 12 ? 0 : dev->if_port);
378                 for (i = 0; i < tp->mtable->leafcount; i++)
379                         if (tp->mtable->mleaf[i].media == looking_for) {
380                                 dev_info(&dev->dev,
381                                          "Using user-specified media %s\n",
382                                          medianame[dev->if_port]);
383                                 goto media_picked;
384                         }
385         }
386         if ((tp->mtable->defaultmedia & 0x0800) == 0) {
387                 int looking_for = tp->mtable->defaultmedia & MEDIA_MASK;
388                 for (i = 0; i < tp->mtable->leafcount; i++)
389                         if (tp->mtable->mleaf[i].media == looking_for) {
390                                 dev_info(&dev->dev,
391                                          "Using EEPROM-set media %s\n",
392                                          medianame[looking_for]);
393                                 goto media_picked;
394                         }
395         }
396         /* Start sensing first non-full-duplex media. */
397         for (i = tp->mtable->leafcount - 1;
398                  (tulip_media_cap[tp->mtable->mleaf[i].media] & MediaAlwaysFD) && i > 0; i--)
399                 ;
400 media_picked:
401
402         tp->csr6 = 0;
403         tp->cur_index = i;
404         tp->nwayset = 0;
405
406         if (dev->if_port) {
407                 if (tp->chip_id == DC21143  &&
408                     (tulip_media_cap[dev->if_port] & MediaIsMII)) {
409                         /* We must reset the media CSRs when we force-select MII mode. */
410                         iowrite32(0x0000, ioaddr + CSR13);
411                         iowrite32(0x0000, ioaddr + CSR14);
412                         iowrite32(0x0008, ioaddr + CSR15);
413                 }
414                 tulip_select_media(dev, 1);
415         } else if (tp->chip_id == DC21142) {
416                 if (tp->mii_cnt) {
417                         tulip_select_media(dev, 1);
418                         if (tulip_debug > 1)
419                                 dev_info(&dev->dev,
420                                          "Using MII transceiver %d, status %04x\n",
421                                          tp->phys[0],
422                                          tulip_mdio_read(dev, tp->phys[0], 1));
423                         iowrite32(csr6_mask_defstate, ioaddr + CSR6);
424                         tp->csr6 = csr6_mask_hdcap;
425                         dev->if_port = 11;
426                         iowrite32(0x0000, ioaddr + CSR13);
427                         iowrite32(0x0000, ioaddr + CSR14);
428                 } else
429                         t21142_start_nway(dev);
430         } else if (tp->chip_id == PNIC2) {
431                 /* for initial startup advertise 10/100 Full and Half */
432                 tp->sym_advertise = 0x01E0;
433                 /* enable autonegotiate end interrupt */
434                 iowrite32(ioread32(ioaddr+CSR5)| 0x00008010, ioaddr + CSR5);
435                 iowrite32(ioread32(ioaddr+CSR7)| 0x00008010, ioaddr + CSR7);
436                 pnic2_start_nway(dev);
437         } else if (tp->chip_id == LC82C168  &&  ! tp->medialock) {
438                 if (tp->mii_cnt) {
439                         dev->if_port = 11;
440                         tp->csr6 = 0x814C0000 | (tp->full_duplex ? 0x0200 : 0);
441                         iowrite32(0x0001, ioaddr + CSR15);
442                 } else if (ioread32(ioaddr + CSR5) & TPLnkPass)
443                         pnic_do_nway(dev);
444                 else {
445                         /* Start with 10mbps to do autonegotiation. */
446                         iowrite32(0x32, ioaddr + CSR12);
447                         tp->csr6 = 0x00420000;
448                         iowrite32(0x0001B078, ioaddr + 0xB8);
449                         iowrite32(0x0201B078, ioaddr + 0xB8);
450                         next_tick = 1*HZ;
451                 }
452         } else if ((tp->chip_id == MX98713 || tp->chip_id == COMPEX9881) &&
453                    ! tp->medialock) {
454                 dev->if_port = 0;
455                 tp->csr6 = 0x01880000 | (tp->full_duplex ? 0x0200 : 0);
456                 iowrite32(0x0f370000 | ioread16(ioaddr + 0x80), ioaddr + 0x80);
457         } else if (tp->chip_id == MX98715 || tp->chip_id == MX98725) {
458                 /* Provided by BOLO, Macronix - 12/10/1998. */
459                 dev->if_port = 0;
460                 tp->csr6 = 0x01a80200;
461                 iowrite32(0x0f370000 | ioread16(ioaddr + 0x80), ioaddr + 0x80);
462                 iowrite32(0x11000 | ioread16(ioaddr + 0xa0), ioaddr + 0xa0);
463         } else if (tp->chip_id == COMET || tp->chip_id == CONEXANT) {
464                 /* Enable automatic Tx underrun recovery. */
465                 iowrite32(ioread32(ioaddr + 0x88) | 1, ioaddr + 0x88);
466                 dev->if_port = tp->mii_cnt ? 11 : 0;
467                 tp->csr6 = 0x00040000;
468         } else if (tp->chip_id == AX88140) {
469                 tp->csr6 = tp->mii_cnt ? 0x00040100 : 0x00000100;
470         } else
471                 tulip_select_media(dev, 1);
472
473         /* Start the chip's Tx to process setup frame. */
474         tulip_stop_rxtx(tp);
475         barrier();
476         udelay(5);
477         iowrite32(tp->csr6 | TxOn, ioaddr + CSR6);
478
479         /* Enable interrupts by setting the interrupt mask. */
480         iowrite32(tulip_tbl[tp->chip_id].valid_intrs, ioaddr + CSR5);
481         iowrite32(tulip_tbl[tp->chip_id].valid_intrs, ioaddr + CSR7);
482         tulip_start_rxtx(tp);
483         iowrite32(0, ioaddr + CSR2);            /* Rx poll demand */
484
485         if (tulip_debug > 2) {
486                 netdev_dbg(dev, "Done tulip_up(), CSR0 %08x, CSR5 %08x CSR6 %08x\n",
487                            ioread32(ioaddr + CSR0),
488                            ioread32(ioaddr + CSR5),
489                            ioread32(ioaddr + CSR6));
490         }
491
492         /* Set the timer to switch to check for link beat and perhaps switch
493            to an alternate media type. */
494         tp->timer.expires = RUN_AT(next_tick);
495         add_timer(&tp->timer);
496 #ifdef CONFIG_TULIP_NAPI
497         timer_setup(&tp->oom_timer, oom_timer, 0);
498 #endif
499 }
500
501 static int
502 tulip_open(struct net_device *dev)
503 {
504         struct tulip_private *tp = netdev_priv(dev);
505         int retval;
506
507         tulip_init_ring (dev);
508
509         retval = request_irq(tp->pdev->irq, tulip_interrupt, IRQF_SHARED,
510                              dev->name, dev);
511         if (retval)
512                 goto free_ring;
513
514         tulip_up (dev);
515
516         netif_start_queue (dev);
517
518         return 0;
519
520 free_ring:
521         tulip_free_ring (dev);
522         return retval;
523 }
524
525
526 static void tulip_tx_timeout(struct net_device *dev, unsigned int txqueue)
527 {
528         struct tulip_private *tp = netdev_priv(dev);
529         void __iomem *ioaddr = tp->base_addr;
530         unsigned long flags;
531
532         spin_lock_irqsave (&tp->lock, flags);
533
534         if (tulip_media_cap[dev->if_port] & MediaIsMII) {
535                 /* Do nothing -- the media monitor should handle this. */
536                 if (tulip_debug > 1)
537                         dev_warn(&dev->dev,
538                                  "Transmit timeout using MII device\n");
539         } else if (tp->chip_id == DC21140 || tp->chip_id == DC21142 ||
540                    tp->chip_id == MX98713 || tp->chip_id == COMPEX9881 ||
541                    tp->chip_id == DM910X) {
542                 dev_warn(&dev->dev,
543                          "21140 transmit timed out, status %08x, SIA %08x %08x %08x %08x, resetting...\n",
544                          ioread32(ioaddr + CSR5), ioread32(ioaddr + CSR12),
545                          ioread32(ioaddr + CSR13), ioread32(ioaddr + CSR14),
546                          ioread32(ioaddr + CSR15));
547                 tp->timeout_recovery = 1;
548                 schedule_work(&tp->media_work);
549                 goto out_unlock;
550         } else if (tp->chip_id == PNIC2) {
551                 dev_warn(&dev->dev,
552                          "PNIC2 transmit timed out, status %08x, CSR6/7 %08x / %08x CSR12 %08x, resetting...\n",
553                          (int)ioread32(ioaddr + CSR5),
554                          (int)ioread32(ioaddr + CSR6),
555                          (int)ioread32(ioaddr + CSR7),
556                          (int)ioread32(ioaddr + CSR12));
557         } else {
558                 dev_warn(&dev->dev,
559                          "Transmit timed out, status %08x, CSR12 %08x, resetting...\n",
560                          ioread32(ioaddr + CSR5), ioread32(ioaddr + CSR12));
561                 dev->if_port = 0;
562         }
563
564 #if defined(way_too_many_messages)
565         if (tulip_debug > 3) {
566                 int i;
567                 for (i = 0; i < RX_RING_SIZE; i++) {
568                         u8 *buf = (u8 *)(tp->rx_ring[i].buffer1);
569                         int j;
570                         printk(KERN_DEBUG
571                                "%2d: %08x %08x %08x %08x  %02x %02x %02x\n",
572                                i,
573                                (unsigned int)tp->rx_ring[i].status,
574                                (unsigned int)tp->rx_ring[i].length,
575                                (unsigned int)tp->rx_ring[i].buffer1,
576                                (unsigned int)tp->rx_ring[i].buffer2,
577                                buf[0], buf[1], buf[2]);
578                         for (j = 0; ((j < 1600) && buf[j] != 0xee); j++)
579                                 if (j < 100)
580                                         pr_cont(" %02x", buf[j]);
581                         pr_cont(" j=%d\n", j);
582                 }
583                 printk(KERN_DEBUG "  Rx ring %p: ", tp->rx_ring);
584                 for (i = 0; i < RX_RING_SIZE; i++)
585                         pr_cont(" %08x", (unsigned int)tp->rx_ring[i].status);
586                 printk(KERN_DEBUG "  Tx ring %p: ", tp->tx_ring);
587                 for (i = 0; i < TX_RING_SIZE; i++)
588                         pr_cont(" %08x", (unsigned int)tp->tx_ring[i].status);
589                 pr_cont("\n");
590         }
591 #endif
592
593         tulip_tx_timeout_complete(tp, ioaddr);
594
595 out_unlock:
596         spin_unlock_irqrestore (&tp->lock, flags);
597         netif_trans_update(dev); /* prevent tx timeout */
598         netif_wake_queue (dev);
599 }
600
601
602 /* Initialize the Rx and Tx rings, along with various 'dev' bits. */
603 static void tulip_init_ring(struct net_device *dev)
604 {
605         struct tulip_private *tp = netdev_priv(dev);
606         int i;
607
608         tp->susp_rx = 0;
609         tp->ttimer = 0;
610         tp->nir = 0;
611
612         for (i = 0; i < RX_RING_SIZE; i++) {
613                 tp->rx_ring[i].status = 0x00000000;
614                 tp->rx_ring[i].length = cpu_to_le32(PKT_BUF_SZ);
615                 tp->rx_ring[i].buffer2 = cpu_to_le32(tp->rx_ring_dma + sizeof(struct tulip_rx_desc) * (i + 1));
616                 tp->rx_buffers[i].skb = NULL;
617                 tp->rx_buffers[i].mapping = 0;
618         }
619         /* Mark the last entry as wrapping the ring. */
620         tp->rx_ring[i-1].length = cpu_to_le32(PKT_BUF_SZ | DESC_RING_WRAP);
621         tp->rx_ring[i-1].buffer2 = cpu_to_le32(tp->rx_ring_dma);
622
623         for (i = 0; i < RX_RING_SIZE; i++) {
624                 dma_addr_t mapping;
625
626                 /* Note the receive buffer must be longword aligned.
627                    netdev_alloc_skb() provides 16 byte alignment.  But do *not*
628                    use skb_reserve() to align the IP header! */
629                 struct sk_buff *skb = netdev_alloc_skb(dev, PKT_BUF_SZ);
630                 tp->rx_buffers[i].skb = skb;
631                 if (skb == NULL)
632                         break;
633                 mapping = dma_map_single(&tp->pdev->dev, skb->data,
634                                          PKT_BUF_SZ, DMA_FROM_DEVICE);
635                 tp->rx_buffers[i].mapping = mapping;
636                 tp->rx_ring[i].status = cpu_to_le32(DescOwned); /* Owned by Tulip chip */
637                 tp->rx_ring[i].buffer1 = cpu_to_le32(mapping);
638         }
639         tp->dirty_rx = (unsigned int)(i - RX_RING_SIZE);
640
641         /* The Tx buffer descriptor is filled in as needed, but we
642            do need to clear the ownership bit. */
643         for (i = 0; i < TX_RING_SIZE; i++) {
644                 tp->tx_buffers[i].skb = NULL;
645                 tp->tx_buffers[i].mapping = 0;
646                 tp->tx_ring[i].status = 0x00000000;
647                 tp->tx_ring[i].buffer2 = cpu_to_le32(tp->tx_ring_dma + sizeof(struct tulip_tx_desc) * (i + 1));
648         }
649         tp->tx_ring[i-1].buffer2 = cpu_to_le32(tp->tx_ring_dma);
650 }
651
652 static netdev_tx_t
653 tulip_start_xmit(struct sk_buff *skb, struct net_device *dev)
654 {
655         struct tulip_private *tp = netdev_priv(dev);
656         int entry;
657         u32 flag;
658         dma_addr_t mapping;
659         unsigned long flags;
660
661         spin_lock_irqsave(&tp->lock, flags);
662
663         /* Calculate the next Tx descriptor entry. */
664         entry = tp->cur_tx % TX_RING_SIZE;
665
666         tp->tx_buffers[entry].skb = skb;
667         mapping = dma_map_single(&tp->pdev->dev, skb->data, skb->len,
668                                  DMA_TO_DEVICE);
669         tp->tx_buffers[entry].mapping = mapping;
670         tp->tx_ring[entry].buffer1 = cpu_to_le32(mapping);
671
672         if (tp->cur_tx - tp->dirty_tx < TX_RING_SIZE/2) {/* Typical path */
673                 flag = 0x60000000; /* No interrupt */
674         } else if (tp->cur_tx - tp->dirty_tx == TX_RING_SIZE/2) {
675                 flag = 0xe0000000; /* Tx-done intr. */
676         } else if (tp->cur_tx - tp->dirty_tx < TX_RING_SIZE - 2) {
677                 flag = 0x60000000; /* No Tx-done intr. */
678         } else {                /* Leave room for set_rx_mode() to fill entries. */
679                 flag = 0xe0000000; /* Tx-done intr. */
680                 netif_stop_queue(dev);
681         }
682         if (entry == TX_RING_SIZE-1)
683                 flag = 0xe0000000 | DESC_RING_WRAP;
684
685         tp->tx_ring[entry].length = cpu_to_le32(skb->len | flag);
686         /* if we were using Transmit Automatic Polling, we would need a
687          * wmb() here. */
688         tp->tx_ring[entry].status = cpu_to_le32(DescOwned);
689         wmb();
690
691         tp->cur_tx++;
692
693         /* Trigger an immediate transmit demand. */
694         iowrite32(0, tp->base_addr + CSR1);
695
696         spin_unlock_irqrestore(&tp->lock, flags);
697
698         return NETDEV_TX_OK;
699 }
700
701 static void tulip_clean_tx_ring(struct tulip_private *tp)
702 {
703         unsigned int dirty_tx;
704
705         for (dirty_tx = tp->dirty_tx ; tp->cur_tx - dirty_tx > 0;
706                 dirty_tx++) {
707                 int entry = dirty_tx % TX_RING_SIZE;
708                 int status = le32_to_cpu(tp->tx_ring[entry].status);
709
710                 if (status < 0) {
711                         tp->dev->stats.tx_errors++;     /* It wasn't Txed */
712                         tp->tx_ring[entry].status = 0;
713                 }
714
715                 /* Check for Tx filter setup frames. */
716                 if (tp->tx_buffers[entry].skb == NULL) {
717                         /* test because dummy frames not mapped */
718                         if (tp->tx_buffers[entry].mapping)
719                                 dma_unmap_single(&tp->pdev->dev,
720                                                  tp->tx_buffers[entry].mapping,
721                                                  sizeof(tp->setup_frame),
722                                                  DMA_TO_DEVICE);
723                         continue;
724                 }
725
726                 dma_unmap_single(&tp->pdev->dev,
727                                  tp->tx_buffers[entry].mapping,
728                                  tp->tx_buffers[entry].skb->len,
729                                  DMA_TO_DEVICE);
730
731                 /* Free the original skb. */
732                 dev_kfree_skb_irq(tp->tx_buffers[entry].skb);
733                 tp->tx_buffers[entry].skb = NULL;
734                 tp->tx_buffers[entry].mapping = 0;
735         }
736 }
737
738 static void tulip_down (struct net_device *dev)
739 {
740         struct tulip_private *tp = netdev_priv(dev);
741         void __iomem *ioaddr = tp->base_addr;
742         unsigned long flags;
743
744         cancel_work_sync(&tp->media_work);
745
746 #ifdef CONFIG_TULIP_NAPI
747         napi_disable(&tp->napi);
748 #endif
749
750         del_timer_sync (&tp->timer);
751 #ifdef CONFIG_TULIP_NAPI
752         del_timer_sync (&tp->oom_timer);
753 #endif
754         spin_lock_irqsave (&tp->lock, flags);
755
756         /* Disable interrupts by clearing the interrupt mask. */
757         iowrite32 (0x00000000, ioaddr + CSR7);
758
759         /* Stop the Tx and Rx processes. */
760         tulip_stop_rxtx(tp);
761
762         /* prepare receive buffers */
763         tulip_refill_rx(dev);
764
765         /* release any unconsumed transmit buffers */
766         tulip_clean_tx_ring(tp);
767
768         if (ioread32(ioaddr + CSR6) != 0xffffffff)
769                 dev->stats.rx_missed_errors += ioread32(ioaddr + CSR8) & 0xffff;
770
771         spin_unlock_irqrestore (&tp->lock, flags);
772
773         timer_setup(&tp->timer, tulip_tbl[tp->chip_id].media_timer, 0);
774
775         dev->if_port = tp->saved_if_port;
776
777         /* Leave the driver in snooze, not sleep, mode. */
778         tulip_set_power_state (tp, 0, 1);
779 }
780
781 static void tulip_free_ring (struct net_device *dev)
782 {
783         struct tulip_private *tp = netdev_priv(dev);
784         int i;
785
786         /* Free all the skbuffs in the Rx queue. */
787         for (i = 0; i < RX_RING_SIZE; i++) {
788                 struct sk_buff *skb = tp->rx_buffers[i].skb;
789                 dma_addr_t mapping = tp->rx_buffers[i].mapping;
790
791                 tp->rx_buffers[i].skb = NULL;
792                 tp->rx_buffers[i].mapping = 0;
793
794                 tp->rx_ring[i].status = 0;      /* Not owned by Tulip chip. */
795                 tp->rx_ring[i].length = 0;
796                 /* An invalid address. */
797                 tp->rx_ring[i].buffer1 = cpu_to_le32(0xBADF00D0);
798                 if (skb) {
799                         dma_unmap_single(&tp->pdev->dev, mapping, PKT_BUF_SZ,
800                                          DMA_FROM_DEVICE);
801                         dev_kfree_skb (skb);
802                 }
803         }
804
805         for (i = 0; i < TX_RING_SIZE; i++) {
806                 struct sk_buff *skb = tp->tx_buffers[i].skb;
807
808                 if (skb != NULL) {
809                         dma_unmap_single(&tp->pdev->dev,
810                                          tp->tx_buffers[i].mapping, skb->len,
811                                          DMA_TO_DEVICE);
812                         dev_kfree_skb (skb);
813                 }
814                 tp->tx_buffers[i].skb = NULL;
815                 tp->tx_buffers[i].mapping = 0;
816         }
817 }
818
819 static int tulip_close (struct net_device *dev)
820 {
821         struct tulip_private *tp = netdev_priv(dev);
822         void __iomem *ioaddr = tp->base_addr;
823
824         netif_stop_queue (dev);
825
826         tulip_down (dev);
827
828         if (tulip_debug > 1)
829                 netdev_dbg(dev, "Shutting down ethercard, status was %02x\n",
830                            ioread32 (ioaddr + CSR5));
831
832         free_irq (tp->pdev->irq, dev);
833
834         tulip_free_ring (dev);
835
836         return 0;
837 }
838
839 static struct net_device_stats *tulip_get_stats(struct net_device *dev)
840 {
841         struct tulip_private *tp = netdev_priv(dev);
842         void __iomem *ioaddr = tp->base_addr;
843
844         if (netif_running(dev)) {
845                 unsigned long flags;
846
847                 spin_lock_irqsave (&tp->lock, flags);
848
849                 dev->stats.rx_missed_errors += ioread32(ioaddr + CSR8) & 0xffff;
850
851                 spin_unlock_irqrestore(&tp->lock, flags);
852         }
853
854         return &dev->stats;
855 }
856
857
858 static void tulip_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
859 {
860         struct tulip_private *np = netdev_priv(dev);
861         strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
862         strlcpy(info->bus_info, pci_name(np->pdev), sizeof(info->bus_info));
863 }
864
865
866 static int tulip_ethtool_set_wol(struct net_device *dev,
867                                  struct ethtool_wolinfo *wolinfo)
868 {
869         struct tulip_private *tp = netdev_priv(dev);
870
871         if (wolinfo->wolopts & (~tp->wolinfo.supported))
872                    return -EOPNOTSUPP;
873
874         tp->wolinfo.wolopts = wolinfo->wolopts;
875         device_set_wakeup_enable(&tp->pdev->dev, tp->wolinfo.wolopts);
876         return 0;
877 }
878
879 static void tulip_ethtool_get_wol(struct net_device *dev,
880                                   struct ethtool_wolinfo *wolinfo)
881 {
882         struct tulip_private *tp = netdev_priv(dev);
883
884         wolinfo->supported = tp->wolinfo.supported;
885         wolinfo->wolopts = tp->wolinfo.wolopts;
886         return;
887 }
888
889
890 static const struct ethtool_ops ops = {
891         .get_drvinfo = tulip_get_drvinfo,
892         .set_wol     = tulip_ethtool_set_wol,
893         .get_wol     = tulip_ethtool_get_wol,
894 };
895
896 /* Provide ioctl() calls to examine the MII xcvr state. */
897 static int private_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
898 {
899         struct tulip_private *tp = netdev_priv(dev);
900         void __iomem *ioaddr = tp->base_addr;
901         struct mii_ioctl_data *data = if_mii(rq);
902         const unsigned int phy_idx = 0;
903         int phy = tp->phys[phy_idx] & 0x1f;
904         unsigned int regnum = data->reg_num;
905
906         switch (cmd) {
907         case SIOCGMIIPHY:               /* Get address of MII PHY in use. */
908                 if (tp->mii_cnt)
909                         data->phy_id = phy;
910                 else if (tp->flags & HAS_NWAY)
911                         data->phy_id = 32;
912                 else if (tp->chip_id == COMET)
913                         data->phy_id = 1;
914                 else
915                         return -ENODEV;
916                 fallthrough;
917
918         case SIOCGMIIREG:               /* Read MII PHY register. */
919                 if (data->phy_id == 32 && (tp->flags & HAS_NWAY)) {
920                         int csr12 = ioread32 (ioaddr + CSR12);
921                         int csr14 = ioread32 (ioaddr + CSR14);
922                         switch (regnum) {
923                         case 0:
924                                 if (((csr14<<5) & 0x1000) ||
925                                         (dev->if_port == 5 && tp->nwayset))
926                                         data->val_out = 0x1000;
927                                 else
928                                         data->val_out = (tulip_media_cap[dev->if_port]&MediaIs100 ? 0x2000 : 0)
929                                                 | (tulip_media_cap[dev->if_port]&MediaIsFD ? 0x0100 : 0);
930                                 break;
931                         case 1:
932                                 data->val_out =
933                                         0x1848 +
934                                         ((csr12&0x7000) == 0x5000 ? 0x20 : 0) +
935                                         ((csr12&0x06) == 6 ? 0 : 4);
936                                 data->val_out |= 0x6048;
937                                 break;
938                         case 4:
939                                 /* Advertised value, bogus 10baseTx-FD value from CSR6. */
940                                 data->val_out =
941                                         ((ioread32(ioaddr + CSR6) >> 3) & 0x0040) +
942                                         ((csr14 >> 1) & 0x20) + 1;
943                                 data->val_out |= ((csr14 >> 9) & 0x03C0);
944                                 break;
945                         case 5: data->val_out = tp->lpar; break;
946                         default: data->val_out = 0; break;
947                         }
948                 } else {
949                         data->val_out = tulip_mdio_read (dev, data->phy_id & 0x1f, regnum);
950                 }
951                 return 0;
952
953         case SIOCSMIIREG:               /* Write MII PHY register. */
954                 if (regnum & ~0x1f)
955                         return -EINVAL;
956                 if (data->phy_id == phy) {
957                         u16 value = data->val_in;
958                         switch (regnum) {
959                         case 0: /* Check for autonegotiation on or reset. */
960                                 tp->full_duplex_lock = (value & 0x9000) ? 0 : 1;
961                                 if (tp->full_duplex_lock)
962                                         tp->full_duplex = (value & 0x0100) ? 1 : 0;
963                                 break;
964                         case 4:
965                                 tp->advertising[phy_idx] =
966                                 tp->mii_advertise = data->val_in;
967                                 break;
968                         }
969                 }
970                 if (data->phy_id == 32 && (tp->flags & HAS_NWAY)) {
971                         u16 value = data->val_in;
972                         if (regnum == 0) {
973                           if ((value & 0x1200) == 0x1200) {
974                             if (tp->chip_id == PNIC2) {
975                                    pnic2_start_nway (dev);
976                             } else {
977                                    t21142_start_nway (dev);
978                             }
979                           }
980                         } else if (regnum == 4)
981                                 tp->sym_advertise = value;
982                 } else {
983                         tulip_mdio_write (dev, data->phy_id & 0x1f, regnum, data->val_in);
984                 }
985                 return 0;
986         default:
987                 return -EOPNOTSUPP;
988         }
989
990         return -EOPNOTSUPP;
991 }
992
993
994 /* Set or clear the multicast filter for this adaptor.
995    Note that we only use exclusion around actually queueing the
996    new frame, not around filling tp->setup_frame.  This is non-deterministic
997    when re-entered but still correct. */
998
999 static void build_setup_frame_hash(u16 *setup_frm, struct net_device *dev)
1000 {
1001         struct tulip_private *tp = netdev_priv(dev);
1002         u16 hash_table[32];
1003         struct netdev_hw_addr *ha;
1004         const u16 *eaddrs;
1005         int i;
1006
1007         memset(hash_table, 0, sizeof(hash_table));
1008         __set_bit_le(255, hash_table);                  /* Broadcast entry */
1009         /* This should work on big-endian machines as well. */
1010         netdev_for_each_mc_addr(ha, dev) {
1011                 int index = ether_crc_le(ETH_ALEN, ha->addr) & 0x1ff;
1012
1013                 __set_bit_le(index, hash_table);
1014         }
1015         for (i = 0; i < 32; i++) {
1016                 *setup_frm++ = hash_table[i];
1017                 *setup_frm++ = hash_table[i];
1018         }
1019         setup_frm = &tp->setup_frame[13*6];
1020
1021         /* Fill the final entry with our physical address. */
1022         eaddrs = (const u16 *)dev->dev_addr;
1023         *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
1024         *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
1025         *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
1026 }
1027
1028 static void build_setup_frame_perfect(u16 *setup_frm, struct net_device *dev)
1029 {
1030         struct tulip_private *tp = netdev_priv(dev);
1031         struct netdev_hw_addr *ha;
1032         const u16 *eaddrs;
1033
1034         /* We have <= 14 addresses so we can use the wonderful
1035            16 address perfect filtering of the Tulip. */
1036         netdev_for_each_mc_addr(ha, dev) {
1037                 eaddrs = (u16 *) ha->addr;
1038                 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
1039                 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
1040                 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
1041         }
1042         /* Fill the unused entries with the broadcast address. */
1043         memset(setup_frm, 0xff, (15 - netdev_mc_count(dev)) * 12);
1044         setup_frm = &tp->setup_frame[15*6];
1045
1046         /* Fill the final entry with our physical address. */
1047         eaddrs = (const u16 *)dev->dev_addr;
1048         *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
1049         *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
1050         *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
1051 }
1052
1053
1054 static void set_rx_mode(struct net_device *dev)
1055 {
1056         struct tulip_private *tp = netdev_priv(dev);
1057         void __iomem *ioaddr = tp->base_addr;
1058         int csr6;
1059
1060         csr6 = ioread32(ioaddr + CSR6) & ~0x00D5;
1061
1062         tp->csr6 &= ~0x00D5;
1063         if (dev->flags & IFF_PROMISC) {                 /* Set promiscuous. */
1064                 tp->csr6 |= AcceptAllMulticast | AcceptAllPhys;
1065                 csr6 |= AcceptAllMulticast | AcceptAllPhys;
1066         } else if ((netdev_mc_count(dev) > 1000) ||
1067                    (dev->flags & IFF_ALLMULTI)) {
1068                 /* Too many to filter well -- accept all multicasts. */
1069                 tp->csr6 |= AcceptAllMulticast;
1070                 csr6 |= AcceptAllMulticast;
1071         } else  if (tp->flags & MC_HASH_ONLY) {
1072                 /* Some work-alikes have only a 64-entry hash filter table. */
1073                 /* Should verify correctness on big-endian/__powerpc__ */
1074                 struct netdev_hw_addr *ha;
1075                 if (netdev_mc_count(dev) > 64) {
1076                         /* Arbitrary non-effective limit. */
1077                         tp->csr6 |= AcceptAllMulticast;
1078                         csr6 |= AcceptAllMulticast;
1079                 } else {
1080                         u32 mc_filter[2] = {0, 0};               /* Multicast hash filter */
1081                         int filterbit;
1082                         netdev_for_each_mc_addr(ha, dev) {
1083                                 if (tp->flags & COMET_MAC_ADDR)
1084                                         filterbit = ether_crc_le(ETH_ALEN,
1085                                                                  ha->addr);
1086                                 else
1087                                         filterbit = ether_crc(ETH_ALEN,
1088                                                               ha->addr) >> 26;
1089                                 filterbit &= 0x3f;
1090                                 mc_filter[filterbit >> 5] |= 1 << (filterbit & 31);
1091                                 if (tulip_debug > 2)
1092                                         dev_info(&dev->dev,
1093                                                  "Added filter for %pM  %08x bit %d\n",
1094                                                  ha->addr,
1095                                                  ether_crc(ETH_ALEN, ha->addr),
1096                                                  filterbit);
1097                         }
1098                         if (mc_filter[0] == tp->mc_filter[0]  &&
1099                                 mc_filter[1] == tp->mc_filter[1])
1100                                 ;                               /* No change. */
1101                         else if (tp->flags & IS_ASIX) {
1102                                 iowrite32(2, ioaddr + CSR13);
1103                                 iowrite32(mc_filter[0], ioaddr + CSR14);
1104                                 iowrite32(3, ioaddr + CSR13);
1105                                 iowrite32(mc_filter[1], ioaddr + CSR14);
1106                         } else if (tp->flags & COMET_MAC_ADDR) {
1107                                 iowrite32(mc_filter[0], ioaddr + CSR27);
1108                                 iowrite32(mc_filter[1], ioaddr + CSR28);
1109                         }
1110                         tp->mc_filter[0] = mc_filter[0];
1111                         tp->mc_filter[1] = mc_filter[1];
1112                 }
1113         } else {
1114                 unsigned long flags;
1115                 u32 tx_flags = 0x08000000 | 192;
1116
1117                 /* Note that only the low-address shortword of setup_frame is valid!
1118                    The values are doubled for big-endian architectures. */
1119                 if (netdev_mc_count(dev) > 14) {
1120                         /* Must use a multicast hash table. */
1121                         build_setup_frame_hash(tp->setup_frame, dev);
1122                         tx_flags = 0x08400000 | 192;
1123                 } else {
1124                         build_setup_frame_perfect(tp->setup_frame, dev);
1125                 }
1126
1127                 spin_lock_irqsave(&tp->lock, flags);
1128
1129                 if (tp->cur_tx - tp->dirty_tx > TX_RING_SIZE - 2) {
1130                         /* Same setup recently queued, we need not add it. */
1131                 } else {
1132                         unsigned int entry;
1133                         int dummy = -1;
1134
1135                         /* Now add this frame to the Tx list. */
1136
1137                         entry = tp->cur_tx++ % TX_RING_SIZE;
1138
1139                         if (entry != 0) {
1140                                 /* Avoid a chip errata by prefixing a dummy entry. */
1141                                 tp->tx_buffers[entry].skb = NULL;
1142                                 tp->tx_buffers[entry].mapping = 0;
1143                                 tp->tx_ring[entry].length =
1144                                         (entry == TX_RING_SIZE-1) ? cpu_to_le32(DESC_RING_WRAP) : 0;
1145                                 tp->tx_ring[entry].buffer1 = 0;
1146                                 /* Must set DescOwned later to avoid race with chip */
1147                                 dummy = entry;
1148                                 entry = tp->cur_tx++ % TX_RING_SIZE;
1149
1150                         }
1151
1152                         tp->tx_buffers[entry].skb = NULL;
1153                         tp->tx_buffers[entry].mapping =
1154                                 dma_map_single(&tp->pdev->dev,
1155                                                tp->setup_frame,
1156                                                sizeof(tp->setup_frame),
1157                                                DMA_TO_DEVICE);
1158                         /* Put the setup frame on the Tx list. */
1159                         if (entry == TX_RING_SIZE-1)
1160                                 tx_flags |= DESC_RING_WRAP;             /* Wrap ring. */
1161                         tp->tx_ring[entry].length = cpu_to_le32(tx_flags);
1162                         tp->tx_ring[entry].buffer1 =
1163                                 cpu_to_le32(tp->tx_buffers[entry].mapping);
1164                         tp->tx_ring[entry].status = cpu_to_le32(DescOwned);
1165                         if (dummy >= 0)
1166                                 tp->tx_ring[dummy].status = cpu_to_le32(DescOwned);
1167                         if (tp->cur_tx - tp->dirty_tx >= TX_RING_SIZE - 2)
1168                                 netif_stop_queue(dev);
1169
1170                         /* Trigger an immediate transmit demand. */
1171                         iowrite32(0, ioaddr + CSR1);
1172                 }
1173
1174                 spin_unlock_irqrestore(&tp->lock, flags);
1175         }
1176
1177         iowrite32(csr6, ioaddr + CSR6);
1178 }
1179
1180 #ifdef CONFIG_TULIP_MWI
1181 static void tulip_mwi_config(struct pci_dev *pdev, struct net_device *dev)
1182 {
1183         struct tulip_private *tp = netdev_priv(dev);
1184         u8 cache;
1185         u16 pci_command;
1186         u32 csr0;
1187
1188         if (tulip_debug > 3)
1189                 netdev_dbg(dev, "tulip_mwi_config()\n");
1190
1191         tp->csr0 = csr0 = 0;
1192
1193         /* if we have any cache line size at all, we can do MRM and MWI */
1194         csr0 |= MRM | MWI;
1195
1196         /* Enable MWI in the standard PCI command bit.
1197          * Check for the case where MWI is desired but not available
1198          */
1199         pci_try_set_mwi(pdev);
1200
1201         /* read result from hardware (in case bit refused to enable) */
1202         pci_read_config_word(pdev, PCI_COMMAND, &pci_command);
1203         if ((csr0 & MWI) && (!(pci_command & PCI_COMMAND_INVALIDATE)))
1204                 csr0 &= ~MWI;
1205
1206         /* if cache line size hardwired to zero, no MWI */
1207         pci_read_config_byte(pdev, PCI_CACHE_LINE_SIZE, &cache);
1208         if ((csr0 & MWI) && (cache == 0)) {
1209                 csr0 &= ~MWI;
1210                 pci_clear_mwi(pdev);
1211         }
1212
1213         /* assign per-cacheline-size cache alignment and
1214          * burst length values
1215          */
1216         switch (cache) {
1217         case 8:
1218                 csr0 |= MRL | (1 << CALShift) | (16 << BurstLenShift);
1219                 break;
1220         case 16:
1221                 csr0 |= MRL | (2 << CALShift) | (16 << BurstLenShift);
1222                 break;
1223         case 32:
1224                 csr0 |= MRL | (3 << CALShift) | (32 << BurstLenShift);
1225                 break;
1226         default:
1227                 cache = 0;
1228                 break;
1229         }
1230
1231         /* if we have a good cache line size, we by now have a good
1232          * csr0, so save it and exit
1233          */
1234         if (cache)
1235                 goto out;
1236
1237         /* we don't have a good csr0 or cache line size, disable MWI */
1238         if (csr0 & MWI) {
1239                 pci_clear_mwi(pdev);
1240                 csr0 &= ~MWI;
1241         }
1242
1243         /* sane defaults for burst length and cache alignment
1244          * originally from de4x5 driver
1245          */
1246         csr0 |= (8 << BurstLenShift) | (1 << CALShift);
1247
1248 out:
1249         tp->csr0 = csr0;
1250         if (tulip_debug > 2)
1251                 netdev_dbg(dev, "MWI config cacheline=%d, csr0=%08x\n",
1252                            cache, csr0);
1253 }
1254 #endif
1255
1256 /*
1257  *      Chips that have the MRM/reserved bit quirk and the burst quirk. That
1258  *      is the DM910X and the on chip ULi devices
1259  */
1260
1261 static int tulip_uli_dm_quirk(struct pci_dev *pdev)
1262 {
1263         if (pdev->vendor == 0x1282 && pdev->device == 0x9102)
1264                 return 1;
1265         return 0;
1266 }
1267
1268 static const struct net_device_ops tulip_netdev_ops = {
1269         .ndo_open               = tulip_open,
1270         .ndo_start_xmit         = tulip_start_xmit,
1271         .ndo_tx_timeout         = tulip_tx_timeout,
1272         .ndo_stop               = tulip_close,
1273         .ndo_get_stats          = tulip_get_stats,
1274         .ndo_eth_ioctl          = private_ioctl,
1275         .ndo_set_rx_mode        = set_rx_mode,
1276         .ndo_set_mac_address    = eth_mac_addr,
1277         .ndo_validate_addr      = eth_validate_addr,
1278 #ifdef CONFIG_NET_POLL_CONTROLLER
1279         .ndo_poll_controller     = poll_tulip,
1280 #endif
1281 };
1282
1283 static const struct pci_device_id early_486_chipsets[] = {
1284         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82424) },
1285         { PCI_DEVICE(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_496) },
1286         { },
1287 };
1288
1289 static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1290 {
1291         struct tulip_private *tp;
1292         /* See note below on the multiport cards. */
1293         static unsigned char last_phys_addr[ETH_ALEN] = {
1294                 0x00, 'L', 'i', 'n', 'u', 'x'
1295         };
1296 #if defined(__i386__) || defined(__x86_64__)    /* Patch up x86 BIOS bug. */
1297         static int last_irq;
1298 #endif
1299         int i, irq;
1300         unsigned short sum;
1301         unsigned char *ee_data;
1302         struct net_device *dev;
1303         void __iomem *ioaddr;
1304         static int board_idx = -1;
1305         int chip_idx = ent->driver_data;
1306         const char *chip_name = tulip_tbl[chip_idx].chip_name;
1307         unsigned int eeprom_missing = 0;
1308         u8 addr[ETH_ALEN] __aligned(2);
1309         unsigned int force_csr0 = 0;
1310
1311         board_idx++;
1312
1313         /*
1314          *      Lan media wire a tulip chip to a wan interface. Needs a very
1315          *      different driver (lmc driver)
1316          */
1317
1318         if (pdev->subsystem_vendor == PCI_VENDOR_ID_LMC) {
1319                 pr_err("skipping LMC card\n");
1320                 return -ENODEV;
1321         } else if (pdev->subsystem_vendor == PCI_VENDOR_ID_SBE &&
1322                    (pdev->subsystem_device == PCI_SUBDEVICE_ID_SBE_T3E3 ||
1323                     pdev->subsystem_device == PCI_SUBDEVICE_ID_SBE_2T3E3_P0 ||
1324                     pdev->subsystem_device == PCI_SUBDEVICE_ID_SBE_2T3E3_P1)) {
1325                 pr_err("skipping SBE T3E3 port\n");
1326                 return -ENODEV;
1327         }
1328
1329         /*
1330          *      DM910x chips should be handled by the dmfe driver, except
1331          *      on-board chips on SPARC systems.  Also, early DM9100s need
1332          *      software CRC which only the dmfe driver supports.
1333          */
1334
1335 #ifdef CONFIG_TULIP_DM910X
1336         if (chip_idx == DM910X) {
1337                 struct device_node *dp;
1338
1339                 if (pdev->vendor == 0x1282 && pdev->device == 0x9100 &&
1340                     pdev->revision < 0x30) {
1341                         pr_info("skipping early DM9100 with Crc bug (use dmfe)\n");
1342                         return -ENODEV;
1343                 }
1344
1345                 dp = pci_device_to_OF_node(pdev);
1346                 if (!(dp && of_get_property(dp, "local-mac-address", NULL))) {
1347                         pr_info("skipping DM910x expansion card (use dmfe)\n");
1348                         return -ENODEV;
1349                 }
1350         }
1351 #endif
1352
1353         /*
1354          *      Looks for early PCI chipsets where people report hangs
1355          *      without the workarounds being on.
1356          */
1357
1358         /* 1. Intel Saturn. Switch to 8 long words burst, 8 long word cache
1359               aligned.  Aries might need this too. The Saturn errata are not
1360               pretty reading but thankfully it's an old 486 chipset.
1361
1362            2. The dreaded SiS496 486 chipset. Same workaround as Intel
1363               Saturn.
1364         */
1365
1366         if (pci_dev_present(early_486_chipsets)) {
1367                 csr0 = MRL | MRM | (8 << BurstLenShift) | (1 << CALShift);
1368                 force_csr0 = 1;
1369         }
1370
1371         /* bugfix: the ASIX must have a burst limit or horrible things happen. */
1372         if (chip_idx == AX88140) {
1373                 if ((csr0 & 0x3f00) == 0)
1374                         csr0 |= 0x2000;
1375         }
1376
1377         /* PNIC doesn't have MWI/MRL/MRM... */
1378         if (chip_idx == LC82C168)
1379                 csr0 &= ~0xfff10000; /* zero reserved bits 31:20, 16 */
1380
1381         /* DM9102A has troubles with MRM & clear reserved bits 24:22, 20, 16, 7:1 */
1382         if (tulip_uli_dm_quirk(pdev)) {
1383                 csr0 &= ~0x01f100ff;
1384 #if defined(CONFIG_SPARC)
1385                 csr0 = (csr0 & ~0xff00) | 0xe000;
1386 #endif
1387         }
1388         /*
1389          *      And back to business
1390          */
1391
1392         i = pci_enable_device(pdev);
1393         if (i) {
1394                 pr_err("Cannot enable tulip board #%d, aborting\n", board_idx);
1395                 return i;
1396         }
1397
1398         irq = pdev->irq;
1399
1400         /* alloc_etherdev ensures aligned and zeroed private structures */
1401         dev = alloc_etherdev (sizeof (*tp));
1402         if (!dev) {
1403                 pci_disable_device(pdev);
1404                 return -ENOMEM;
1405         }
1406
1407         SET_NETDEV_DEV(dev, &pdev->dev);
1408         if (pci_resource_len (pdev, 0) < tulip_tbl[chip_idx].io_size) {
1409                 pr_err("%s: I/O region (0x%llx@0x%llx) too small, aborting\n",
1410                        pci_name(pdev),
1411                        (unsigned long long)pci_resource_len (pdev, 0),
1412                        (unsigned long long)pci_resource_start (pdev, 0));
1413                 goto err_out_free_netdev;
1414         }
1415
1416         /* grab all resources from both PIO and MMIO regions, as we
1417          * don't want anyone else messing around with our hardware */
1418         if (pci_request_regions (pdev, DRV_NAME))
1419                 goto err_out_free_netdev;
1420
1421         ioaddr =  pci_iomap(pdev, TULIP_BAR, tulip_tbl[chip_idx].io_size);
1422
1423         if (!ioaddr)
1424                 goto err_out_free_res;
1425
1426         /*
1427          * initialize private data structure 'tp'
1428          * it is zeroed and aligned in alloc_etherdev
1429          */
1430         tp = netdev_priv(dev);
1431         tp->dev = dev;
1432
1433         tp->rx_ring = dma_alloc_coherent(&pdev->dev,
1434                                          sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
1435                                          sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
1436                                          &tp->rx_ring_dma, GFP_KERNEL);
1437         if (!tp->rx_ring)
1438                 goto err_out_mtable;
1439         tp->tx_ring = (struct tulip_tx_desc *)(tp->rx_ring + RX_RING_SIZE);
1440         tp->tx_ring_dma = tp->rx_ring_dma + sizeof(struct tulip_rx_desc) * RX_RING_SIZE;
1441
1442         tp->chip_id = chip_idx;
1443         tp->flags = tulip_tbl[chip_idx].flags;
1444
1445         tp->wolinfo.supported = 0;
1446         tp->wolinfo.wolopts = 0;
1447         /* COMET: Enable power management only for AN983B */
1448         if (chip_idx == COMET ) {
1449                 u32 sig;
1450                 pci_read_config_dword (pdev, 0x80, &sig);
1451                 if (sig == 0x09811317) {
1452                         tp->flags |= COMET_PM;
1453                         tp->wolinfo.supported = WAKE_PHY | WAKE_MAGIC;
1454                         pr_info("%s: Enabled WOL support for AN983B\n",
1455                                 __func__);
1456                 }
1457         }
1458         tp->pdev = pdev;
1459         tp->base_addr = ioaddr;
1460         tp->revision = pdev->revision;
1461         tp->csr0 = csr0;
1462         spin_lock_init(&tp->lock);
1463         spin_lock_init(&tp->mii_lock);
1464         timer_setup(&tp->timer, tulip_tbl[tp->chip_id].media_timer, 0);
1465
1466         INIT_WORK(&tp->media_work, tulip_tbl[tp->chip_id].media_task);
1467
1468 #ifdef CONFIG_TULIP_MWI
1469         if (!force_csr0 && (tp->flags & HAS_PCI_MWI))
1470                 tulip_mwi_config (pdev, dev);
1471 #endif
1472
1473         /* Stop the chip's Tx and Rx processes. */
1474         tulip_stop_rxtx(tp);
1475
1476         pci_set_master(pdev);
1477
1478 #ifdef CONFIG_GSC
1479         if (pdev->subsystem_vendor == PCI_VENDOR_ID_HP) {
1480                 switch (pdev->subsystem_device) {
1481                 default:
1482                         break;
1483                 case 0x1061:
1484                 case 0x1062:
1485                 case 0x1063:
1486                 case 0x1098:
1487                 case 0x1099:
1488                 case 0x10EE:
1489                         tp->flags |= HAS_SWAPPED_SEEPROM | NEEDS_FAKE_MEDIA_TABLE;
1490                         chip_name = "GSC DS21140 Tulip";
1491                 }
1492         }
1493 #endif
1494
1495         /* Clear the missed-packet counter. */
1496         ioread32(ioaddr + CSR8);
1497
1498         /* The station address ROM is read byte serially.  The register must
1499            be polled, waiting for the value to be read bit serially from the
1500            EEPROM.
1501            */
1502         ee_data = tp->eeprom;
1503         memset(ee_data, 0, sizeof(tp->eeprom));
1504         sum = 0;
1505         if (chip_idx == LC82C168) {
1506                 for (i = 0; i < 3; i++) {
1507                         int value, boguscnt = 100000;
1508                         iowrite32(0x600 | i, ioaddr + 0x98);
1509                         do {
1510                                 value = ioread32(ioaddr + CSR9);
1511                         } while (value < 0  && --boguscnt > 0);
1512                         put_unaligned_le16(value, ((__le16 *)addr) + i);
1513                         sum += value & 0xffff;
1514                 }
1515                 eth_hw_addr_set(dev, addr);
1516         } else if (chip_idx == COMET) {
1517                 /* No need to read the EEPROM. */
1518                 put_unaligned_le32(ioread32(ioaddr + 0xA4), addr);
1519                 put_unaligned_le16(ioread32(ioaddr + 0xA8), addr + 4);
1520                 eth_hw_addr_set(dev, addr);
1521                 for (i = 0; i < 6; i ++)
1522                         sum += dev->dev_addr[i];
1523         } else {
1524                 /* A serial EEPROM interface, we read now and sort it out later. */
1525                 int sa_offset = 0;
1526                 int ee_addr_size = tulip_read_eeprom(dev, 0xff, 8) & 0x40000 ? 8 : 6;
1527                 int ee_max_addr = ((1 << ee_addr_size) - 1) * sizeof(u16);
1528
1529                 if (ee_max_addr > sizeof(tp->eeprom))
1530                         ee_max_addr = sizeof(tp->eeprom);
1531
1532                 for (i = 0; i < ee_max_addr ; i += sizeof(u16)) {
1533                         u16 data = tulip_read_eeprom(dev, i/2, ee_addr_size);
1534                         ee_data[i] = data & 0xff;
1535                         ee_data[i + 1] = data >> 8;
1536                 }
1537
1538                 /* DEC now has a specification (see Notes) but early board makers
1539                    just put the address in the first EEPROM locations. */
1540                 /* This does  memcmp(ee_data, ee_data+16, 8) */
1541                 for (i = 0; i < 8; i ++)
1542                         if (ee_data[i] != ee_data[16+i])
1543                                 sa_offset = 20;
1544                 if (chip_idx == CONEXANT) {
1545                         /* Check that the tuple type and length is correct. */
1546                         if (ee_data[0x198] == 0x04  &&  ee_data[0x199] == 6)
1547                                 sa_offset = 0x19A;
1548                 } else if (ee_data[0] == 0xff  &&  ee_data[1] == 0xff &&
1549                                    ee_data[2] == 0) {
1550                         sa_offset = 2;          /* Grrr, damn Matrox boards. */
1551                 }
1552 #ifdef CONFIG_MIPS_COBALT
1553                if ((pdev->bus->number == 0) &&
1554                    ((PCI_SLOT(pdev->devfn) == 7) ||
1555                     (PCI_SLOT(pdev->devfn) == 12))) {
1556                        /* Cobalt MAC address in first EEPROM locations. */
1557                        sa_offset = 0;
1558                        /* Ensure our media table fixup get's applied */
1559                        memcpy(ee_data + 16, ee_data, 8);
1560                }
1561 #endif
1562 #ifdef CONFIG_GSC
1563                 /* Check to see if we have a broken srom */
1564                 if (ee_data[0] == 0x61 && ee_data[1] == 0x10) {
1565                         /* pci_vendor_id and subsystem_id are swapped */
1566                         ee_data[0] = ee_data[2];
1567                         ee_data[1] = ee_data[3];
1568                         ee_data[2] = 0x61;
1569                         ee_data[3] = 0x10;
1570
1571                         /* HSC-PCI boards need to be byte-swaped and shifted
1572                          * up 1 word.  This shift needs to happen at the end
1573                          * of the MAC first because of the 2 byte overlap.
1574                          */
1575                         for (i = 4; i >= 0; i -= 2) {
1576                                 ee_data[17 + i + 3] = ee_data[17 + i];
1577                                 ee_data[16 + i + 5] = ee_data[16 + i];
1578                         }
1579                 }
1580 #endif
1581
1582                 for (i = 0; i < 6; i ++) {
1583                         addr[i] = ee_data[i + sa_offset];
1584                         sum += ee_data[i + sa_offset];
1585                 }
1586                 eth_hw_addr_set(dev, addr);
1587         }
1588         /* Lite-On boards have the address byte-swapped. */
1589         if ((dev->dev_addr[0] == 0xA0 ||
1590              dev->dev_addr[0] == 0xC0 ||
1591              dev->dev_addr[0] == 0x02) &&
1592             dev->dev_addr[1] == 0x00) {
1593                 for (i = 0; i < 6; i+=2) {
1594                         addr[i] = dev->dev_addr[i+1];
1595                         addr[i+1] = dev->dev_addr[i];
1596                 }
1597                 eth_hw_addr_set(dev, addr);
1598         }
1599
1600         /* On the Zynx 315 Etherarray and other multiport boards only the
1601            first Tulip has an EEPROM.
1602            On Sparc systems the mac address is held in the OBP property
1603            "local-mac-address".
1604            The addresses of the subsequent ports are derived from the first.
1605            Many PCI BIOSes also incorrectly report the IRQ line, so we correct
1606            that here as well. */
1607         if (sum == 0  || sum == 6*0xff) {
1608 #if defined(CONFIG_SPARC)
1609                 struct device_node *dp = pci_device_to_OF_node(pdev);
1610                 const unsigned char *addr2;
1611                 int len;
1612 #endif
1613                 eeprom_missing = 1;
1614                 for (i = 0; i < 5; i++)
1615                         addr[i] = last_phys_addr[i];
1616                 addr[i] = last_phys_addr[i] + 1;
1617                 eth_hw_addr_set(dev, addr);
1618 #if defined(CONFIG_SPARC)
1619                 addr2 = of_get_property(dp, "local-mac-address", &len);
1620                 if (addr2 && len == ETH_ALEN)
1621                         eth_hw_addr_set(dev, addr2);
1622 #endif
1623 #if defined(__i386__) || defined(__x86_64__)    /* Patch up x86 BIOS bug. */
1624                 if (last_irq)
1625                         irq = last_irq;
1626 #endif
1627         }
1628
1629         for (i = 0; i < 6; i++)
1630                 last_phys_addr[i] = dev->dev_addr[i];
1631 #if defined(__i386__) || defined(__x86_64__)    /* Patch up x86 BIOS bug. */
1632         last_irq = irq;
1633 #endif
1634
1635         /* The lower four bits are the media type. */
1636         if (board_idx >= 0  &&  board_idx < MAX_UNITS) {
1637                 if (options[board_idx] & MEDIA_MASK)
1638                         tp->default_port = options[board_idx] & MEDIA_MASK;
1639                 if ((options[board_idx] & FullDuplex) || full_duplex[board_idx] > 0)
1640                         tp->full_duplex = 1;
1641                 if (mtu[board_idx] > 0)
1642                         dev->mtu = mtu[board_idx];
1643         }
1644         if (dev->mem_start & MEDIA_MASK)
1645                 tp->default_port = dev->mem_start & MEDIA_MASK;
1646         if (tp->default_port) {
1647                 pr_info(DRV_NAME "%d: Transceiver selection forced to %s\n",
1648                         board_idx, medianame[tp->default_port & MEDIA_MASK]);
1649                 tp->medialock = 1;
1650                 if (tulip_media_cap[tp->default_port] & MediaAlwaysFD)
1651                         tp->full_duplex = 1;
1652         }
1653         if (tp->full_duplex)
1654                 tp->full_duplex_lock = 1;
1655
1656         if (tulip_media_cap[tp->default_port] & MediaIsMII) {
1657                 static const u16 media2advert[] = {
1658                         0x20, 0x40, 0x03e0, 0x60, 0x80, 0x100, 0x200
1659                 };
1660                 tp->mii_advertise = media2advert[tp->default_port - 9];
1661                 tp->mii_advertise |= (tp->flags & HAS_8023X); /* Matching bits! */
1662         }
1663
1664         if (tp->flags & HAS_MEDIA_TABLE) {
1665                 sprintf(dev->name, DRV_NAME "%d", board_idx);   /* hack */
1666                 tulip_parse_eeprom(dev);
1667                 strcpy(dev->name, "eth%d");                     /* un-hack */
1668         }
1669
1670         if ((tp->flags & ALWAYS_CHECK_MII) ||
1671                 (tp->mtable  &&  tp->mtable->has_mii) ||
1672                 ( ! tp->mtable  &&  (tp->flags & HAS_MII))) {
1673                 if (tp->mtable  &&  tp->mtable->has_mii) {
1674                         for (i = 0; i < tp->mtable->leafcount; i++)
1675                                 if (tp->mtable->mleaf[i].media == 11) {
1676                                         tp->cur_index = i;
1677                                         tp->saved_if_port = dev->if_port;
1678                                         tulip_select_media(dev, 2);
1679                                         dev->if_port = tp->saved_if_port;
1680                                         break;
1681                                 }
1682                 }
1683
1684                 /* Find the connected MII xcvrs.
1685                    Doing this in open() would allow detecting external xcvrs
1686                    later, but takes much time. */
1687                 tulip_find_mii (dev, board_idx);
1688         }
1689
1690         /* The Tulip-specific entries in the device structure. */
1691         dev->netdev_ops = &tulip_netdev_ops;
1692         dev->watchdog_timeo = TX_TIMEOUT;
1693 #ifdef CONFIG_TULIP_NAPI
1694         netif_napi_add_weight(dev, &tp->napi, tulip_poll, 16);
1695 #endif
1696         dev->ethtool_ops = &ops;
1697
1698         if (register_netdev(dev))
1699                 goto err_out_free_ring;
1700
1701         pci_set_drvdata(pdev, dev);
1702
1703         dev_info(&dev->dev,
1704 #ifdef CONFIG_TULIP_MMIO
1705                  "%s rev %d at MMIO %#llx,%s %pM, IRQ %d\n",
1706 #else
1707                  "%s rev %d at Port %#llx,%s %pM, IRQ %d\n",
1708 #endif
1709                  chip_name, pdev->revision,
1710                  (unsigned long long)pci_resource_start(pdev, TULIP_BAR),
1711                  eeprom_missing ? " EEPROM not present," : "",
1712                  dev->dev_addr, irq);
1713
1714         if (tp->chip_id == PNIC2)
1715                 tp->link_change = pnic2_lnk_change;
1716         else if (tp->flags & HAS_NWAY)
1717                 tp->link_change = t21142_lnk_change;
1718         else if (tp->flags & HAS_PNICNWAY)
1719                 tp->link_change = pnic_lnk_change;
1720
1721         /* Reset the xcvr interface and turn on heartbeat. */
1722         switch (chip_idx) {
1723         case DC21140:
1724         case DM910X:
1725         default:
1726                 if (tp->mtable)
1727                         iowrite32(tp->mtable->csr12dir | 0x100, ioaddr + CSR12);
1728                 break;
1729         case DC21142:
1730                 if (tp->mii_cnt  ||  tulip_media_cap[dev->if_port] & MediaIsMII) {
1731                         iowrite32(csr6_mask_defstate, ioaddr + CSR6);
1732                         iowrite32(0x0000, ioaddr + CSR13);
1733                         iowrite32(0x0000, ioaddr + CSR14);
1734                         iowrite32(csr6_mask_hdcap, ioaddr + CSR6);
1735                 } else
1736                         t21142_start_nway(dev);
1737                 break;
1738         case PNIC2:
1739                 /* just do a reset for sanity sake */
1740                 iowrite32(0x0000, ioaddr + CSR13);
1741                 iowrite32(0x0000, ioaddr + CSR14);
1742                 break;
1743         case LC82C168:
1744                 if ( ! tp->mii_cnt) {
1745                         tp->nway = 1;
1746                         tp->nwayset = 0;
1747                         iowrite32(csr6_ttm | csr6_ca, ioaddr + CSR6);
1748                         iowrite32(0x30, ioaddr + CSR12);
1749                         iowrite32(0x0001F078, ioaddr + CSR6);
1750                         iowrite32(0x0201F078, ioaddr + CSR6); /* Turn on autonegotiation. */
1751                 }
1752                 break;
1753         case MX98713:
1754         case COMPEX9881:
1755                 iowrite32(0x00000000, ioaddr + CSR6);
1756                 iowrite32(0x000711C0, ioaddr + CSR14); /* Turn on NWay. */
1757                 iowrite32(0x00000001, ioaddr + CSR13);
1758                 break;
1759         case MX98715:
1760         case MX98725:
1761                 iowrite32(0x01a80000, ioaddr + CSR6);
1762                 iowrite32(0xFFFFFFFF, ioaddr + CSR14);
1763                 iowrite32(0x00001000, ioaddr + CSR12);
1764                 break;
1765         case COMET:
1766                 /* No initialization necessary. */
1767                 break;
1768         }
1769
1770         /* put the chip in snooze mode until opened */
1771         tulip_set_power_state (tp, 0, 1);
1772
1773         return 0;
1774
1775 err_out_free_ring:
1776         dma_free_coherent(&pdev->dev,
1777                           sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
1778                           sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
1779                           tp->rx_ring, tp->rx_ring_dma);
1780
1781 err_out_mtable:
1782         kfree (tp->mtable);
1783         pci_iounmap(pdev, ioaddr);
1784
1785 err_out_free_res:
1786         pci_release_regions (pdev);
1787
1788 err_out_free_netdev:
1789         free_netdev (dev);
1790         pci_disable_device(pdev);
1791         return -ENODEV;
1792 }
1793
1794
1795 /* set the registers according to the given wolopts */
1796 static void tulip_set_wolopts (struct pci_dev *pdev, u32 wolopts)
1797 {
1798         struct net_device *dev = pci_get_drvdata(pdev);
1799         struct tulip_private *tp = netdev_priv(dev);
1800         void __iomem *ioaddr = tp->base_addr;
1801
1802         if (tp->flags & COMET_PM) {
1803                 unsigned int tmp;
1804
1805                 tmp = ioread32(ioaddr + CSR18);
1806                 tmp &= ~(comet_csr18_pmes_sticky | comet_csr18_apm_mode | comet_csr18_d3a);
1807                 tmp |= comet_csr18_pm_mode;
1808                 iowrite32(tmp, ioaddr + CSR18);
1809
1810                 /* Set the Wake-up Control/Status Register to the given WOL options*/
1811                 tmp = ioread32(ioaddr + CSR13);
1812                 tmp &= ~(comet_csr13_linkoffe | comet_csr13_linkone | comet_csr13_wfre | comet_csr13_lsce | comet_csr13_mpre);
1813                 if (wolopts & WAKE_MAGIC)
1814                         tmp |= comet_csr13_mpre;
1815                 if (wolopts & WAKE_PHY)
1816                         tmp |= comet_csr13_linkoffe | comet_csr13_linkone | comet_csr13_lsce;
1817                 /* Clear the event flags */
1818                 tmp |= comet_csr13_wfr | comet_csr13_mpr | comet_csr13_lsc;
1819                 iowrite32(tmp, ioaddr + CSR13);
1820         }
1821 }
1822
1823 static int __maybe_unused tulip_suspend(struct device *dev_d)
1824 {
1825         struct net_device *dev = dev_get_drvdata(dev_d);
1826         struct tulip_private *tp = netdev_priv(dev);
1827
1828         if (!dev)
1829                 return -EINVAL;
1830
1831         if (!netif_running(dev))
1832                 goto save_state;
1833
1834         tulip_down(dev);
1835
1836         netif_device_detach(dev);
1837         /* FIXME: it needlessly adds an error path. */
1838         free_irq(tp->pdev->irq, dev);
1839
1840 save_state:
1841         tulip_set_wolopts(to_pci_dev(dev_d), tp->wolinfo.wolopts);
1842         device_set_wakeup_enable(dev_d, !!tp->wolinfo.wolopts);
1843
1844         return 0;
1845 }
1846
1847 static int __maybe_unused tulip_resume(struct device *dev_d)
1848 {
1849         struct pci_dev *pdev = to_pci_dev(dev_d);
1850         struct net_device *dev = dev_get_drvdata(dev_d);
1851         struct tulip_private *tp = netdev_priv(dev);
1852         void __iomem *ioaddr = tp->base_addr;
1853         unsigned int tmp;
1854         int retval = 0;
1855
1856         if (!dev)
1857                 return -EINVAL;
1858
1859         if (!netif_running(dev))
1860                 return 0;
1861
1862         retval = request_irq(pdev->irq, tulip_interrupt, IRQF_SHARED,
1863                              dev->name, dev);
1864         if (retval) {
1865                 pr_err("request_irq failed in resume\n");
1866                 return retval;
1867         }
1868
1869         if (tp->flags & COMET_PM) {
1870                 device_set_wakeup_enable(dev_d, 0);
1871
1872                 /* Clear the PMES flag */
1873                 tmp = ioread32(ioaddr + CSR20);
1874                 tmp |= comet_csr20_pmes;
1875                 iowrite32(tmp, ioaddr + CSR20);
1876
1877                 /* Disable all wake-up events */
1878                 tulip_set_wolopts(pdev, 0);
1879         }
1880         netif_device_attach(dev);
1881
1882         if (netif_running(dev))
1883                 tulip_up(dev);
1884
1885         return 0;
1886 }
1887
1888 static void tulip_remove_one(struct pci_dev *pdev)
1889 {
1890         struct net_device *dev = pci_get_drvdata (pdev);
1891         struct tulip_private *tp;
1892
1893         if (!dev)
1894                 return;
1895
1896         tp = netdev_priv(dev);
1897         unregister_netdev(dev);
1898         dma_free_coherent(&pdev->dev,
1899                           sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
1900                           sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
1901                           tp->rx_ring, tp->rx_ring_dma);
1902         kfree (tp->mtable);
1903         pci_iounmap(pdev, tp->base_addr);
1904         free_netdev (dev);
1905         pci_release_regions (pdev);
1906         pci_disable_device(pdev);
1907
1908         /* pci_power_off (pdev, -1); */
1909 }
1910
1911 #ifdef CONFIG_NET_POLL_CONTROLLER
1912 /*
1913  * Polling 'interrupt' - used by things like netconsole to send skbs
1914  * without having to re-enable interrupts. It's not called while
1915  * the interrupt routine is executing.
1916  */
1917
1918 static void poll_tulip (struct net_device *dev)
1919 {
1920         struct tulip_private *tp = netdev_priv(dev);
1921         const int irq = tp->pdev->irq;
1922
1923         /* disable_irq here is not very nice, but with the lockless
1924            interrupt handler we have no other choice. */
1925         disable_irq(irq);
1926         tulip_interrupt (irq, dev);
1927         enable_irq(irq);
1928 }
1929 #endif
1930
1931 static SIMPLE_DEV_PM_OPS(tulip_pm_ops, tulip_suspend, tulip_resume);
1932
1933 static struct pci_driver tulip_driver = {
1934         .name           = DRV_NAME,
1935         .id_table       = tulip_pci_tbl,
1936         .probe          = tulip_init_one,
1937         .remove         = tulip_remove_one,
1938         .driver.pm      = &tulip_pm_ops,
1939 };
1940
1941
1942 static int __init tulip_init (void)
1943 {
1944         if (!csr0) {
1945                 pr_warn("tulip: unknown CPU architecture, using default csr0\n");
1946                 /* default to 8 longword cache line alignment */
1947                 csr0 = 0x00A00000 | 0x4800;
1948         }
1949
1950         /* copy module parms into globals */
1951         tulip_rx_copybreak = rx_copybreak;
1952         tulip_max_interrupt_work = max_interrupt_work;
1953
1954         /* probe for and init boards */
1955         return pci_register_driver(&tulip_driver);
1956 }
1957
1958
1959 static void __exit tulip_cleanup (void)
1960 {
1961         pci_unregister_driver (&tulip_driver);
1962 }
1963
1964
1965 module_init(tulip_init);
1966 module_exit(tulip_cleanup);