blob: ee08292bcf8579f3f23bcb748702aad8ae1761db [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/* tulip_core.c: A DEC 21x4x-family ethernet driver for Linux. */
2
3/*
Valerie Henson6b928012006-09-08 11:15:34 -07004 Maintained by Valerie Henson <val_henson@linux.intel.com>
Linus Torvalds1da177e2005-04-16 15:20:36 -07005 Copyright 2000,2001 The Linux Kernel Team
6 Written/copyright 1994-2001 by Donald Becker.
7
8 This software may be used and distributed according to the terms
9 of the GNU General Public License, incorporated herein by reference.
10
11 Please refer to Documentation/DocBook/tulip-user.{pdf,ps,html}
12 for more information on this driver, or visit the project
13 Web page at http://sourceforge.net/projects/tulip/
14
15*/
16
Linus Torvalds1da177e2005-04-16 15:20:36 -070017
18#define DRV_NAME "tulip"
19#ifdef CONFIG_TULIP_NAPI
Valerie Henson6bab99b2007-03-12 02:31:34 -070020#define DRV_VERSION "1.1.15-NAPI" /* Keep at least for test */
Linus Torvalds1da177e2005-04-16 15:20:36 -070021#else
Valerie Henson6bab99b2007-03-12 02:31:34 -070022#define DRV_VERSION "1.1.15"
Linus Torvalds1da177e2005-04-16 15:20:36 -070023#endif
Valerie Henson6bab99b2007-03-12 02:31:34 -070024#define DRV_RELDATE "Feb 27, 2007"
Linus Torvalds1da177e2005-04-16 15:20:36 -070025
26
27#include <linux/module.h>
28#include <linux/pci.h>
29#include "tulip.h"
30#include <linux/init.h>
31#include <linux/etherdevice.h>
32#include <linux/delay.h>
33#include <linux/mii.h>
34#include <linux/ethtool.h>
35#include <linux/crc32.h>
36#include <asm/unaligned.h>
37#include <asm/uaccess.h>
38
David S. Miller49345102007-03-29 01:39:44 -070039#ifdef CONFIG_SPARC
David S. Millerd297c312007-03-29 01:41:28 -070040#include <asm/prom.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070041#endif
42
43static char version[] __devinitdata =
44 "Linux Tulip driver version " DRV_VERSION " (" DRV_RELDATE ")\n";
45
46
47/* A few user-configurable values. */
48
49/* Maximum events (Rx packets, etc.) to handle at each interrupt. */
50static unsigned int max_interrupt_work = 25;
51
52#define MAX_UNITS 8
53/* Used to pass the full-duplex flag, etc. */
54static int full_duplex[MAX_UNITS];
55static int options[MAX_UNITS];
56static int mtu[MAX_UNITS]; /* Jumbo MTU for interfaces. */
57
58/* The possible media types that can be set in options[] are: */
59const char * const medianame[32] = {
60 "10baseT", "10base2", "AUI", "100baseTx",
61 "10baseT-FDX", "100baseTx-FDX", "100baseT4", "100baseFx",
62 "100baseFx-FDX", "MII 10baseT", "MII 10baseT-FDX", "MII",
63 "10baseT(forced)", "MII 100baseTx", "MII 100baseTx-FDX", "MII 100baseT4",
64 "MII 100baseFx-HDX", "MII 100baseFx-FDX", "Home-PNA 1Mbps", "Invalid-19",
65 "","","","", "","","","", "","","","Transceiver reset",
66};
67
68/* Set the copy breakpoint for the copy-only-tiny-buffer Rx structure. */
69#if defined(__alpha__) || defined(__arm__) || defined(__hppa__) \
David S. Miller49345102007-03-29 01:39:44 -070070 || defined(CONFIG_SPARC) || defined(__ia64__) \
Linus Torvalds1da177e2005-04-16 15:20:36 -070071 || defined(__sh__) || defined(__mips__)
72static int rx_copybreak = 1518;
73#else
74static int rx_copybreak = 100;
75#endif
76
77/*
78 Set the bus performance register.
79 Typical: Set 16 longword cache alignment, no burst limit.
80 Cache alignment bits 15:14 Burst length 13:8
81 0000 No alignment 0x00000000 unlimited 0800 8 longwords
82 4000 8 longwords 0100 1 longword 1000 16 longwords
83 8000 16 longwords 0200 2 longwords 2000 32 longwords
84 C000 32 longwords 0400 4 longwords
85 Warning: many older 486 systems are broken and require setting 0x00A04800
86 8 longword cache alignment, 8 longword burst.
87 ToDo: Non-Intel setting could be better.
88*/
89
90#if defined(__alpha__) || defined(__ia64__)
91static int csr0 = 0x01A00000 | 0xE000;
92#elif defined(__i386__) || defined(__powerpc__) || defined(__x86_64__)
93static int csr0 = 0x01A00000 | 0x8000;
David S. Miller49345102007-03-29 01:39:44 -070094#elif defined(CONFIG_SPARC) || defined(__hppa__)
Linus Torvalds1da177e2005-04-16 15:20:36 -070095/* The UltraSparc PCI controllers will disconnect at every 64-byte
96 * crossing anyways so it makes no sense to tell Tulip to burst
97 * any more than that.
98 */
99static int csr0 = 0x01A00000 | 0x9000;
100#elif defined(__arm__) || defined(__sh__)
101static int csr0 = 0x01A00000 | 0x4800;
102#elif defined(__mips__)
103static int csr0 = 0x00200000 | 0x4000;
104#else
105#warning Processor architecture undefined!
106static int csr0 = 0x00A00000 | 0x4800;
107#endif
108
109/* Operational parameters that usually are not changed. */
110/* Time in jiffies before concluding the transmitter is hung. */
111#define TX_TIMEOUT (4*HZ)
112
113
114MODULE_AUTHOR("The Linux Kernel Team");
115MODULE_DESCRIPTION("Digital 21*4* Tulip ethernet driver");
116MODULE_LICENSE("GPL");
117MODULE_VERSION(DRV_VERSION);
118module_param(tulip_debug, int, 0);
119module_param(max_interrupt_work, int, 0);
120module_param(rx_copybreak, int, 0);
121module_param(csr0, int, 0);
122module_param_array(options, int, NULL, 0);
123module_param_array(full_duplex, int, NULL, 0);
124
125#define PFX DRV_NAME ": "
126
127#ifdef TULIP_DEBUG
128int tulip_debug = TULIP_DEBUG;
129#else
130int tulip_debug = 1;
131#endif
132
Francois Romieu0bb3cf72006-09-08 11:15:38 -0700133static void tulip_timer(unsigned long data)
134{
135 struct net_device *dev = (struct net_device *)data;
136 struct tulip_private *tp = netdev_priv(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700137
Francois Romieu0bb3cf72006-09-08 11:15:38 -0700138 if (netif_running(dev))
139 schedule_work(&tp->media_work);
140}
Linus Torvalds1da177e2005-04-16 15:20:36 -0700141
142/*
143 * This table use during operation for capabilities and media timer.
144 *
145 * It is indexed via the values in 'enum chips'
146 */
147
148struct tulip_chip_table tulip_tbl[] = {
149 { }, /* placeholder for array, slot unused currently */
150 { }, /* placeholder for array, slot unused currently */
151
152 /* DC21140 */
153 { "Digital DS21140 Tulip", 128, 0x0001ebef,
Francois Romieu0bb3cf72006-09-08 11:15:38 -0700154 HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM | HAS_PCI_MWI, tulip_timer,
155 tulip_media_task },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700156
157 /* DC21142, DC21143 */
Thibaut Vareneb892de02006-09-08 11:15:36 -0700158 { "Digital DS21142/43 Tulip", 128, 0x0801fbff,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700159 HAS_MII | HAS_MEDIA_TABLE | ALWAYS_CHECK_MII | HAS_ACPI | HAS_NWAY
Francois Romieu0bb3cf72006-09-08 11:15:38 -0700160 | HAS_INTR_MITIGATION | HAS_PCI_MWI, tulip_timer, t21142_media_task },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700161
162 /* LC82C168 */
163 { "Lite-On 82c168 PNIC", 256, 0x0001fbef,
Francois Romieu0bb3cf72006-09-08 11:15:38 -0700164 HAS_MII | HAS_PNICNWAY, pnic_timer, },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700165
166 /* MX98713 */
167 { "Macronix 98713 PMAC", 128, 0x0001ebef,
Francois Romieu0bb3cf72006-09-08 11:15:38 -0700168 HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM, mxic_timer, },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700169
170 /* MX98715 */
171 { "Macronix 98715 PMAC", 256, 0x0001ebef,
Francois Romieu0bb3cf72006-09-08 11:15:38 -0700172 HAS_MEDIA_TABLE, mxic_timer, },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700173
174 /* MX98725 */
175 { "Macronix 98725 PMAC", 256, 0x0001ebef,
Francois Romieu0bb3cf72006-09-08 11:15:38 -0700176 HAS_MEDIA_TABLE, mxic_timer, },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700177
178 /* AX88140 */
179 { "ASIX AX88140", 128, 0x0001fbff,
180 HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM | MC_HASH_ONLY
Francois Romieu0bb3cf72006-09-08 11:15:38 -0700181 | IS_ASIX, tulip_timer, tulip_media_task },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700182
183 /* PNIC2 */
184 { "Lite-On PNIC-II", 256, 0x0801fbff,
Francois Romieu0bb3cf72006-09-08 11:15:38 -0700185 HAS_MII | HAS_NWAY | HAS_8023X | HAS_PCI_MWI, pnic2_timer, },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700186
187 /* COMET */
188 { "ADMtek Comet", 256, 0x0001abef,
Francois Romieu0bb3cf72006-09-08 11:15:38 -0700189 HAS_MII | MC_HASH_ONLY | COMET_MAC_ADDR, comet_timer, },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700190
191 /* COMPEX9881 */
192 { "Compex 9881 PMAC", 128, 0x0001ebef,
Francois Romieu0bb3cf72006-09-08 11:15:38 -0700193 HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM, mxic_timer, },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700194
195 /* I21145 */
196 { "Intel DS21145 Tulip", 128, 0x0801fbff,
197 HAS_MII | HAS_MEDIA_TABLE | ALWAYS_CHECK_MII | HAS_ACPI
Francois Romieu0bb3cf72006-09-08 11:15:38 -0700198 | HAS_NWAY | HAS_PCI_MWI, tulip_timer, tulip_media_task },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700199
200 /* DM910X */
201 { "Davicom DM9102/DM9102A", 128, 0x0001ebef,
202 HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM | HAS_ACPI,
Francois Romieu0bb3cf72006-09-08 11:15:38 -0700203 tulip_timer, tulip_media_task },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700204
205 /* RS7112 */
206 { "Conexant LANfinity", 256, 0x0001ebef,
Francois Romieu0bb3cf72006-09-08 11:15:38 -0700207 HAS_MII | HAS_ACPI, tulip_timer, tulip_media_task },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700208
Linus Torvalds1da177e2005-04-16 15:20:36 -0700209};
210
211
212static struct pci_device_id tulip_pci_tbl[] = {
213 { 0x1011, 0x0009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DC21140 },
214 { 0x1011, 0x0019, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DC21143 },
215 { 0x11AD, 0x0002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, LC82C168 },
216 { 0x10d9, 0x0512, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98713 },
217 { 0x10d9, 0x0531, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98715 },
218/* { 0x10d9, 0x0531, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98725 },*/
219 { 0x125B, 0x1400, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AX88140 },
220 { 0x11AD, 0xc115, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PNIC2 },
221 { 0x1317, 0x0981, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
222 { 0x1317, 0x0985, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
223 { 0x1317, 0x1985, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
224 { 0x1317, 0x9511, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
225 { 0x13D1, 0xAB02, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
226 { 0x13D1, 0xAB03, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
227 { 0x13D1, 0xAB08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
228 { 0x104A, 0x0981, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
229 { 0x104A, 0x2774, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
230 { 0x1259, 0xa120, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
231 { 0x11F6, 0x9881, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMPEX9881 },
232 { 0x8086, 0x0039, PCI_ANY_ID, PCI_ANY_ID, 0, 0, I21145 },
233 { 0x1282, 0x9100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DM910X },
234 { 0x1282, 0x9102, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DM910X },
235 { 0x1113, 0x1216, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
236 { 0x1113, 0x1217, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98715 },
237 { 0x1113, 0x9511, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
238 { 0x1186, 0x1541, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
239 { 0x1186, 0x1561, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
240 { 0x1186, 0x1591, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
241 { 0x14f1, 0x1803, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CONEXANT },
242 { 0x1626, 0x8410, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
243 { 0x1737, 0xAB09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
244 { 0x1737, 0xAB08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
245 { 0x17B3, 0xAB08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700246 { 0x10b7, 0x9300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, /* 3Com 3CSOHO100B-TX */
Hideki Yamane9b259782005-06-27 00:18:32 -0400247 { 0x14ea, 0xab08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, /* Planex FNW-3602-TX */
Jeff Garzik1a449352005-08-31 05:48:59 -0400248 { 0x1414, 0x0002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700249 { } /* terminate list */
250};
251MODULE_DEVICE_TABLE(pci, tulip_pci_tbl);
252
253
254/* A full-duplex map for media types. */
255const char tulip_media_cap[32] =
256{0,0,0,16, 3,19,16,24, 27,4,7,5, 0,20,23,20, 28,31,0,0, };
257
258static void tulip_tx_timeout(struct net_device *dev);
259static void tulip_init_ring(struct net_device *dev);
260static int tulip_start_xmit(struct sk_buff *skb, struct net_device *dev);
261static int tulip_open(struct net_device *dev);
262static int tulip_close(struct net_device *dev);
263static void tulip_up(struct net_device *dev);
264static void tulip_down(struct net_device *dev);
265static struct net_device_stats *tulip_get_stats(struct net_device *dev);
266static int private_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
267static void set_rx_mode(struct net_device *dev);
268#ifdef CONFIG_NET_POLL_CONTROLLER
269static void poll_tulip(struct net_device *dev);
270#endif
271
272static void tulip_set_power_state (struct tulip_private *tp,
273 int sleep, int snooze)
274{
275 if (tp->flags & HAS_ACPI) {
276 u32 tmp, newtmp;
277 pci_read_config_dword (tp->pdev, CFDD, &tmp);
278 newtmp = tmp & ~(CFDD_Sleep | CFDD_Snooze);
279 if (sleep)
280 newtmp |= CFDD_Sleep;
281 else if (snooze)
282 newtmp |= CFDD_Snooze;
283 if (tmp != newtmp)
284 pci_write_config_dword (tp->pdev, CFDD, newtmp);
285 }
286
287}
288
289
290static void tulip_up(struct net_device *dev)
291{
292 struct tulip_private *tp = netdev_priv(dev);
293 void __iomem *ioaddr = tp->base_addr;
294 int next_tick = 3*HZ;
295 int i;
296
Stephen Hemmingerbea33482007-10-03 16:41:36 -0700297#ifdef CONFIG_TULIP_NAPI
298 napi_enable(&tp->napi);
299#endif
300
Linus Torvalds1da177e2005-04-16 15:20:36 -0700301 /* Wake the chip from sleep/snooze mode. */
302 tulip_set_power_state (tp, 0, 0);
303
304 /* On some chip revs we must set the MII/SYM port before the reset!? */
305 if (tp->mii_cnt || (tp->mtable && tp->mtable->has_mii))
306 iowrite32(0x00040000, ioaddr + CSR6);
307
308 /* Reset the chip, holding bit 0 set at least 50 PCI cycles. */
309 iowrite32(0x00000001, ioaddr + CSR0);
Grant Grundler40c0d872006-09-08 11:15:37 -0700310 pci_read_config_dword(tp->pdev, PCI_COMMAND, &i); /* flush write */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700311 udelay(100);
312
313 /* Deassert reset.
314 Wait the specified 50 PCI cycles after a reset by initializing
315 Tx and Rx queues and the address filter list. */
316 iowrite32(tp->csr0, ioaddr + CSR0);
Grant Grundler40c0d872006-09-08 11:15:37 -0700317 pci_read_config_dword(tp->pdev, PCI_COMMAND, &i); /* flush write */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700318 udelay(100);
319
320 if (tulip_debug > 1)
321 printk(KERN_DEBUG "%s: tulip_up(), irq==%d.\n", dev->name, dev->irq);
322
323 iowrite32(tp->rx_ring_dma, ioaddr + CSR3);
324 iowrite32(tp->tx_ring_dma, ioaddr + CSR4);
325 tp->cur_rx = tp->cur_tx = 0;
326 tp->dirty_rx = tp->dirty_tx = 0;
327
328 if (tp->flags & MC_HASH_ONLY) {
Al Viroc559a5b2007-08-23 00:43:22 -0400329 u32 addr_low = le32_to_cpu(get_unaligned((__le32 *)dev->dev_addr));
330 u32 addr_high = le16_to_cpu(get_unaligned((__le16 *)(dev->dev_addr+4)));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700331 if (tp->chip_id == AX88140) {
332 iowrite32(0, ioaddr + CSR13);
333 iowrite32(addr_low, ioaddr + CSR14);
334 iowrite32(1, ioaddr + CSR13);
335 iowrite32(addr_high, ioaddr + CSR14);
336 } else if (tp->flags & COMET_MAC_ADDR) {
337 iowrite32(addr_low, ioaddr + 0xA4);
338 iowrite32(addr_high, ioaddr + 0xA8);
339 iowrite32(0, ioaddr + 0xAC);
340 iowrite32(0, ioaddr + 0xB0);
341 }
342 } else {
343 /* This is set_rx_mode(), but without starting the transmitter. */
344 u16 *eaddrs = (u16 *)dev->dev_addr;
345 u16 *setup_frm = &tp->setup_frame[15*6];
346 dma_addr_t mapping;
347
348 /* 21140 bug: you must add the broadcast address. */
349 memset(tp->setup_frame, 0xff, sizeof(tp->setup_frame));
350 /* Fill the final entry of the table with our physical address. */
351 *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
352 *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
353 *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
354
355 mapping = pci_map_single(tp->pdev, tp->setup_frame,
356 sizeof(tp->setup_frame),
357 PCI_DMA_TODEVICE);
358 tp->tx_buffers[tp->cur_tx].skb = NULL;
359 tp->tx_buffers[tp->cur_tx].mapping = mapping;
360
361 /* Put the setup frame on the Tx list. */
362 tp->tx_ring[tp->cur_tx].length = cpu_to_le32(0x08000000 | 192);
363 tp->tx_ring[tp->cur_tx].buffer1 = cpu_to_le32(mapping);
364 tp->tx_ring[tp->cur_tx].status = cpu_to_le32(DescOwned);
365
366 tp->cur_tx++;
367 }
368
369 tp->saved_if_port = dev->if_port;
370 if (dev->if_port == 0)
371 dev->if_port = tp->default_port;
372
373 /* Allow selecting a default media. */
374 i = 0;
375 if (tp->mtable == NULL)
376 goto media_picked;
377 if (dev->if_port) {
378 int looking_for = tulip_media_cap[dev->if_port] & MediaIsMII ? 11 :
379 (dev->if_port == 12 ? 0 : dev->if_port);
380 for (i = 0; i < tp->mtable->leafcount; i++)
381 if (tp->mtable->mleaf[i].media == looking_for) {
382 printk(KERN_INFO "%s: Using user-specified media %s.\n",
383 dev->name, medianame[dev->if_port]);
384 goto media_picked;
385 }
386 }
387 if ((tp->mtable->defaultmedia & 0x0800) == 0) {
388 int looking_for = tp->mtable->defaultmedia & MEDIA_MASK;
389 for (i = 0; i < tp->mtable->leafcount; i++)
390 if (tp->mtable->mleaf[i].media == looking_for) {
391 printk(KERN_INFO "%s: Using EEPROM-set media %s.\n",
392 dev->name, 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 ;
400media_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 printk(KERN_INFO "%s: Using MII transceiver %d, status "
420 "%4.4x.\n",
421 dev->name, tp->phys[0], tulip_mdio_read(dev, tp->phys[0], 1));
422 iowrite32(csr6_mask_defstate, ioaddr + CSR6);
423 tp->csr6 = csr6_mask_hdcap;
424 dev->if_port = 11;
425 iowrite32(0x0000, ioaddr + CSR13);
426 iowrite32(0x0000, ioaddr + CSR14);
427 } else
428 t21142_start_nway(dev);
429 } else if (tp->chip_id == PNIC2) {
430 /* for initial startup advertise 10/100 Full and Half */
431 tp->sym_advertise = 0x01E0;
432 /* enable autonegotiate end interrupt */
433 iowrite32(ioread32(ioaddr+CSR5)| 0x00008010, ioaddr + CSR5);
434 iowrite32(ioread32(ioaddr+CSR7)| 0x00008010, ioaddr + CSR7);
435 pnic2_start_nway(dev);
436 } else if (tp->chip_id == LC82C168 && ! tp->medialock) {
437 if (tp->mii_cnt) {
438 dev->if_port = 11;
439 tp->csr6 = 0x814C0000 | (tp->full_duplex ? 0x0200 : 0);
440 iowrite32(0x0001, ioaddr + CSR15);
441 } else if (ioread32(ioaddr + CSR5) & TPLnkPass)
442 pnic_do_nway(dev);
443 else {
444 /* Start with 10mbps to do autonegotiation. */
445 iowrite32(0x32, ioaddr + CSR12);
446 tp->csr6 = 0x00420000;
447 iowrite32(0x0001B078, ioaddr + 0xB8);
448 iowrite32(0x0201B078, ioaddr + 0xB8);
449 next_tick = 1*HZ;
450 }
451 } else if ((tp->chip_id == MX98713 || tp->chip_id == COMPEX9881)
452 && ! tp->medialock) {
453 dev->if_port = 0;
454 tp->csr6 = 0x01880000 | (tp->full_duplex ? 0x0200 : 0);
455 iowrite32(0x0f370000 | ioread16(ioaddr + 0x80), ioaddr + 0x80);
456 } else if (tp->chip_id == MX98715 || tp->chip_id == MX98725) {
457 /* Provided by BOLO, Macronix - 12/10/1998. */
458 dev->if_port = 0;
459 tp->csr6 = 0x01a80200;
460 iowrite32(0x0f370000 | ioread16(ioaddr + 0x80), ioaddr + 0x80);
461 iowrite32(0x11000 | ioread16(ioaddr + 0xa0), ioaddr + 0xa0);
462 } else if (tp->chip_id == COMET || tp->chip_id == CONEXANT) {
463 /* Enable automatic Tx underrun recovery. */
464 iowrite32(ioread32(ioaddr + 0x88) | 1, ioaddr + 0x88);
465 dev->if_port = tp->mii_cnt ? 11 : 0;
466 tp->csr6 = 0x00040000;
467 } else if (tp->chip_id == AX88140) {
468 tp->csr6 = tp->mii_cnt ? 0x00040100 : 0x00000100;
469 } else
470 tulip_select_media(dev, 1);
471
472 /* Start the chip's Tx to process setup frame. */
473 tulip_stop_rxtx(tp);
474 barrier();
475 udelay(5);
476 iowrite32(tp->csr6 | TxOn, ioaddr + CSR6);
477
478 /* Enable interrupts by setting the interrupt mask. */
479 iowrite32(tulip_tbl[tp->chip_id].valid_intrs, ioaddr + CSR5);
480 iowrite32(tulip_tbl[tp->chip_id].valid_intrs, ioaddr + CSR7);
481 tulip_start_rxtx(tp);
482 iowrite32(0, ioaddr + CSR2); /* Rx poll demand */
483
484 if (tulip_debug > 2) {
485 printk(KERN_DEBUG "%s: Done tulip_up(), CSR0 %8.8x, CSR5 %8.8x CSR6 %8.8x.\n",
486 dev->name, ioread32(ioaddr + CSR0), ioread32(ioaddr + CSR5),
487 ioread32(ioaddr + CSR6));
488 }
489
490 /* Set the timer to switch to check for link beat and perhaps switch
491 to an alternate media type. */
492 tp->timer.expires = RUN_AT(next_tick);
493 add_timer(&tp->timer);
494#ifdef CONFIG_TULIP_NAPI
495 init_timer(&tp->oom_timer);
496 tp->oom_timer.data = (unsigned long)dev;
497 tp->oom_timer.function = oom_timer;
498#endif
499}
500
501static int
502tulip_open(struct net_device *dev)
503{
504 int retval;
505
Thomas Gleixner1fb9df52006-07-01 19:29:39 -0700506 if ((retval = request_irq(dev->irq, &tulip_interrupt, IRQF_SHARED, dev->name, dev)))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700507 return retval;
508
509 tulip_init_ring (dev);
510
511 tulip_up (dev);
512
513 netif_start_queue (dev);
514
515 return 0;
516}
517
518
519static void tulip_tx_timeout(struct net_device *dev)
520{
521 struct tulip_private *tp = netdev_priv(dev);
522 void __iomem *ioaddr = tp->base_addr;
523 unsigned long flags;
524
525 spin_lock_irqsave (&tp->lock, flags);
526
527 if (tulip_media_cap[dev->if_port] & MediaIsMII) {
528 /* Do nothing -- the media monitor should handle this. */
529 if (tulip_debug > 1)
530 printk(KERN_WARNING "%s: Transmit timeout using MII device.\n",
531 dev->name);
532 } else if (tp->chip_id == DC21140 || tp->chip_id == DC21142
533 || tp->chip_id == MX98713 || tp->chip_id == COMPEX9881
Peer Chenea8f4002005-08-11 15:09:23 -0400534 || tp->chip_id == DM910X) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700535 printk(KERN_WARNING "%s: 21140 transmit timed out, status %8.8x, "
536 "SIA %8.8x %8.8x %8.8x %8.8x, resetting...\n",
537 dev->name, ioread32(ioaddr + CSR5), ioread32(ioaddr + CSR12),
538 ioread32(ioaddr + CSR13), ioread32(ioaddr + CSR14), ioread32(ioaddr + CSR15));
Francois Romieu0bb3cf72006-09-08 11:15:38 -0700539 tp->timeout_recovery = 1;
540 schedule_work(&tp->media_work);
541 goto out_unlock;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700542 } else if (tp->chip_id == PNIC2) {
543 printk(KERN_WARNING "%s: PNIC2 transmit timed out, status %8.8x, "
544 "CSR6/7 %8.8x / %8.8x CSR12 %8.8x, resetting...\n",
545 dev->name, (int)ioread32(ioaddr + CSR5), (int)ioread32(ioaddr + CSR6),
546 (int)ioread32(ioaddr + CSR7), (int)ioread32(ioaddr + CSR12));
547 } else {
548 printk(KERN_WARNING "%s: Transmit timed out, status %8.8x, CSR12 "
549 "%8.8x, resetting...\n",
550 dev->name, ioread32(ioaddr + CSR5), ioread32(ioaddr + CSR12));
551 dev->if_port = 0;
552 }
553
554#if defined(way_too_many_messages)
555 if (tulip_debug > 3) {
556 int i;
557 for (i = 0; i < RX_RING_SIZE; i++) {
558 u8 *buf = (u8 *)(tp->rx_ring[i].buffer1);
559 int j;
560 printk(KERN_DEBUG "%2d: %8.8x %8.8x %8.8x %8.8x "
561 "%2.2x %2.2x %2.2x.\n",
562 i, (unsigned int)tp->rx_ring[i].status,
563 (unsigned int)tp->rx_ring[i].length,
564 (unsigned int)tp->rx_ring[i].buffer1,
565 (unsigned int)tp->rx_ring[i].buffer2,
566 buf[0], buf[1], buf[2]);
567 for (j = 0; buf[j] != 0xee && j < 1600; j++)
568 if (j < 100) printk(" %2.2x", buf[j]);
569 printk(" j=%d.\n", j);
570 }
571 printk(KERN_DEBUG " Rx ring %8.8x: ", (int)tp->rx_ring);
572 for (i = 0; i < RX_RING_SIZE; i++)
573 printk(" %8.8x", (unsigned int)tp->rx_ring[i].status);
574 printk("\n" KERN_DEBUG " Tx ring %8.8x: ", (int)tp->tx_ring);
575 for (i = 0; i < TX_RING_SIZE; i++)
576 printk(" %8.8x", (unsigned int)tp->tx_ring[i].status);
577 printk("\n");
578 }
579#endif
580
Francois Romieu0bb3cf72006-09-08 11:15:38 -0700581 tulip_tx_timeout_complete(tp, ioaddr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700582
Francois Romieu0bb3cf72006-09-08 11:15:38 -0700583out_unlock:
Linus Torvalds1da177e2005-04-16 15:20:36 -0700584 spin_unlock_irqrestore (&tp->lock, flags);
585 dev->trans_start = jiffies;
586 netif_wake_queue (dev);
587}
588
589
590/* Initialize the Rx and Tx rings, along with various 'dev' bits. */
591static void tulip_init_ring(struct net_device *dev)
592{
593 struct tulip_private *tp = netdev_priv(dev);
594 int i;
595
596 tp->susp_rx = 0;
597 tp->ttimer = 0;
598 tp->nir = 0;
599
600 for (i = 0; i < RX_RING_SIZE; i++) {
601 tp->rx_ring[i].status = 0x00000000;
602 tp->rx_ring[i].length = cpu_to_le32(PKT_BUF_SZ);
603 tp->rx_ring[i].buffer2 = cpu_to_le32(tp->rx_ring_dma + sizeof(struct tulip_rx_desc) * (i + 1));
604 tp->rx_buffers[i].skb = NULL;
605 tp->rx_buffers[i].mapping = 0;
606 }
607 /* Mark the last entry as wrapping the ring. */
608 tp->rx_ring[i-1].length = cpu_to_le32(PKT_BUF_SZ | DESC_RING_WRAP);
609 tp->rx_ring[i-1].buffer2 = cpu_to_le32(tp->rx_ring_dma);
610
611 for (i = 0; i < RX_RING_SIZE; i++) {
612 dma_addr_t mapping;
613
614 /* Note the receive buffer must be longword aligned.
615 dev_alloc_skb() provides 16 byte alignment. But do *not*
616 use skb_reserve() to align the IP header! */
617 struct sk_buff *skb = dev_alloc_skb(PKT_BUF_SZ);
618 tp->rx_buffers[i].skb = skb;
619 if (skb == NULL)
620 break;
David S. Miller689be432005-06-28 15:25:31 -0700621 mapping = pci_map_single(tp->pdev, skb->data,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700622 PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
623 tp->rx_buffers[i].mapping = mapping;
624 skb->dev = dev; /* Mark as being used by this device. */
625 tp->rx_ring[i].status = cpu_to_le32(DescOwned); /* Owned by Tulip chip */
626 tp->rx_ring[i].buffer1 = cpu_to_le32(mapping);
627 }
628 tp->dirty_rx = (unsigned int)(i - RX_RING_SIZE);
629
630 /* The Tx buffer descriptor is filled in as needed, but we
631 do need to clear the ownership bit. */
632 for (i = 0; i < TX_RING_SIZE; i++) {
633 tp->tx_buffers[i].skb = NULL;
634 tp->tx_buffers[i].mapping = 0;
635 tp->tx_ring[i].status = 0x00000000;
636 tp->tx_ring[i].buffer2 = cpu_to_le32(tp->tx_ring_dma + sizeof(struct tulip_tx_desc) * (i + 1));
637 }
638 tp->tx_ring[i-1].buffer2 = cpu_to_le32(tp->tx_ring_dma);
639}
640
641static int
642tulip_start_xmit(struct sk_buff *skb, struct net_device *dev)
643{
644 struct tulip_private *tp = netdev_priv(dev);
645 int entry;
646 u32 flag;
647 dma_addr_t mapping;
648
649 spin_lock_irq(&tp->lock);
650
651 /* Calculate the next Tx descriptor entry. */
652 entry = tp->cur_tx % TX_RING_SIZE;
653
654 tp->tx_buffers[entry].skb = skb;
655 mapping = pci_map_single(tp->pdev, skb->data,
656 skb->len, PCI_DMA_TODEVICE);
657 tp->tx_buffers[entry].mapping = mapping;
658 tp->tx_ring[entry].buffer1 = cpu_to_le32(mapping);
659
660 if (tp->cur_tx - tp->dirty_tx < TX_RING_SIZE/2) {/* Typical path */
661 flag = 0x60000000; /* No interrupt */
662 } else if (tp->cur_tx - tp->dirty_tx == TX_RING_SIZE/2) {
663 flag = 0xe0000000; /* Tx-done intr. */
664 } else if (tp->cur_tx - tp->dirty_tx < TX_RING_SIZE - 2) {
665 flag = 0x60000000; /* No Tx-done intr. */
666 } else { /* Leave room for set_rx_mode() to fill entries. */
667 flag = 0xe0000000; /* Tx-done intr. */
668 netif_stop_queue(dev);
669 }
670 if (entry == TX_RING_SIZE-1)
671 flag = 0xe0000000 | DESC_RING_WRAP;
672
673 tp->tx_ring[entry].length = cpu_to_le32(skb->len | flag);
674 /* if we were using Transmit Automatic Polling, we would need a
675 * wmb() here. */
676 tp->tx_ring[entry].status = cpu_to_le32(DescOwned);
677 wmb();
678
679 tp->cur_tx++;
680
681 /* Trigger an immediate transmit demand. */
682 iowrite32(0, tp->base_addr + CSR1);
683
684 spin_unlock_irq(&tp->lock);
685
686 dev->trans_start = jiffies;
687
688 return 0;
689}
690
691static void tulip_clean_tx_ring(struct tulip_private *tp)
692{
693 unsigned int dirty_tx;
694
695 for (dirty_tx = tp->dirty_tx ; tp->cur_tx - dirty_tx > 0;
696 dirty_tx++) {
697 int entry = dirty_tx % TX_RING_SIZE;
698 int status = le32_to_cpu(tp->tx_ring[entry].status);
699
700 if (status < 0) {
701 tp->stats.tx_errors++; /* It wasn't Txed */
702 tp->tx_ring[entry].status = 0;
703 }
704
705 /* Check for Tx filter setup frames. */
706 if (tp->tx_buffers[entry].skb == NULL) {
707 /* test because dummy frames not mapped */
708 if (tp->tx_buffers[entry].mapping)
709 pci_unmap_single(tp->pdev,
710 tp->tx_buffers[entry].mapping,
711 sizeof(tp->setup_frame),
712 PCI_DMA_TODEVICE);
713 continue;
714 }
715
716 pci_unmap_single(tp->pdev, tp->tx_buffers[entry].mapping,
717 tp->tx_buffers[entry].skb->len,
718 PCI_DMA_TODEVICE);
719
720 /* Free the original skb. */
721 dev_kfree_skb_irq(tp->tx_buffers[entry].skb);
722 tp->tx_buffers[entry].skb = NULL;
723 tp->tx_buffers[entry].mapping = 0;
724 }
725}
726
727static void tulip_down (struct net_device *dev)
728{
729 struct tulip_private *tp = netdev_priv(dev);
730 void __iomem *ioaddr = tp->base_addr;
731 unsigned long flags;
732
Francois Romieu0bb3cf72006-09-08 11:15:38 -0700733 flush_scheduled_work();
734
Stephen Hemmingerbea33482007-10-03 16:41:36 -0700735#ifdef CONFIG_TULIP_NAPI
736 napi_disable(&tp->napi);
737#endif
738
Linus Torvalds1da177e2005-04-16 15:20:36 -0700739 del_timer_sync (&tp->timer);
740#ifdef CONFIG_TULIP_NAPI
741 del_timer_sync (&tp->oom_timer);
742#endif
743 spin_lock_irqsave (&tp->lock, flags);
744
745 /* Disable interrupts by clearing the interrupt mask. */
746 iowrite32 (0x00000000, ioaddr + CSR7);
747
748 /* Stop the Tx and Rx processes. */
749 tulip_stop_rxtx(tp);
750
751 /* prepare receive buffers */
752 tulip_refill_rx(dev);
753
754 /* release any unconsumed transmit buffers */
755 tulip_clean_tx_ring(tp);
756
757 if (ioread32 (ioaddr + CSR6) != 0xffffffff)
758 tp->stats.rx_missed_errors += ioread32 (ioaddr + CSR8) & 0xffff;
759
760 spin_unlock_irqrestore (&tp->lock, flags);
761
762 init_timer(&tp->timer);
763 tp->timer.data = (unsigned long)dev;
764 tp->timer.function = tulip_tbl[tp->chip_id].media_timer;
765
766 dev->if_port = tp->saved_if_port;
767
768 /* Leave the driver in snooze, not sleep, mode. */
769 tulip_set_power_state (tp, 0, 1);
770}
771
772
773static int tulip_close (struct net_device *dev)
774{
775 struct tulip_private *tp = netdev_priv(dev);
776 void __iomem *ioaddr = tp->base_addr;
777 int i;
778
779 netif_stop_queue (dev);
780
781 tulip_down (dev);
782
783 if (tulip_debug > 1)
784 printk (KERN_DEBUG "%s: Shutting down ethercard, status was %2.2x.\n",
785 dev->name, ioread32 (ioaddr + CSR5));
786
787 free_irq (dev->irq, dev);
788
789 /* Free all the skbuffs in the Rx queue. */
790 for (i = 0; i < RX_RING_SIZE; i++) {
791 struct sk_buff *skb = tp->rx_buffers[i].skb;
792 dma_addr_t mapping = tp->rx_buffers[i].mapping;
793
794 tp->rx_buffers[i].skb = NULL;
795 tp->rx_buffers[i].mapping = 0;
796
797 tp->rx_ring[i].status = 0; /* Not owned by Tulip chip. */
798 tp->rx_ring[i].length = 0;
799 tp->rx_ring[i].buffer1 = 0xBADF00D0; /* An invalid address. */
800 if (skb) {
801 pci_unmap_single(tp->pdev, mapping, PKT_BUF_SZ,
802 PCI_DMA_FROMDEVICE);
803 dev_kfree_skb (skb);
804 }
805 }
806 for (i = 0; i < TX_RING_SIZE; i++) {
807 struct sk_buff *skb = tp->tx_buffers[i].skb;
808
809 if (skb != NULL) {
810 pci_unmap_single(tp->pdev, tp->tx_buffers[i].mapping,
811 skb->len, PCI_DMA_TODEVICE);
812 dev_kfree_skb (skb);
813 }
814 tp->tx_buffers[i].skb = NULL;
815 tp->tx_buffers[i].mapping = 0;
816 }
817
818 return 0;
819}
820
821static struct net_device_stats *tulip_get_stats(struct net_device *dev)
822{
823 struct tulip_private *tp = netdev_priv(dev);
824 void __iomem *ioaddr = tp->base_addr;
825
826 if (netif_running(dev)) {
827 unsigned long flags;
828
829 spin_lock_irqsave (&tp->lock, flags);
830
831 tp->stats.rx_missed_errors += ioread32(ioaddr + CSR8) & 0xffff;
832
833 spin_unlock_irqrestore(&tp->lock, flags);
834 }
835
836 return &tp->stats;
837}
838
839
840static void tulip_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
841{
842 struct tulip_private *np = netdev_priv(dev);
843 strcpy(info->driver, DRV_NAME);
844 strcpy(info->version, DRV_VERSION);
845 strcpy(info->bus_info, pci_name(np->pdev));
846}
847
Jeff Garzik7282d492006-09-13 14:30:00 -0400848static const struct ethtool_ops ops = {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700849 .get_drvinfo = tulip_get_drvinfo
850};
851
852/* Provide ioctl() calls to examine the MII xcvr state. */
853static int private_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
854{
855 struct tulip_private *tp = netdev_priv(dev);
856 void __iomem *ioaddr = tp->base_addr;
857 struct mii_ioctl_data *data = if_mii(rq);
858 const unsigned int phy_idx = 0;
859 int phy = tp->phys[phy_idx] & 0x1f;
860 unsigned int regnum = data->reg_num;
861
862 switch (cmd) {
863 case SIOCGMIIPHY: /* Get address of MII PHY in use. */
864 if (tp->mii_cnt)
865 data->phy_id = phy;
866 else if (tp->flags & HAS_NWAY)
867 data->phy_id = 32;
868 else if (tp->chip_id == COMET)
869 data->phy_id = 1;
870 else
871 return -ENODEV;
872
873 case SIOCGMIIREG: /* Read MII PHY register. */
874 if (data->phy_id == 32 && (tp->flags & HAS_NWAY)) {
875 int csr12 = ioread32 (ioaddr + CSR12);
876 int csr14 = ioread32 (ioaddr + CSR14);
877 switch (regnum) {
878 case 0:
879 if (((csr14<<5) & 0x1000) ||
880 (dev->if_port == 5 && tp->nwayset))
881 data->val_out = 0x1000;
882 else
883 data->val_out = (tulip_media_cap[dev->if_port]&MediaIs100 ? 0x2000 : 0)
884 | (tulip_media_cap[dev->if_port]&MediaIsFD ? 0x0100 : 0);
885 break;
886 case 1:
887 data->val_out =
888 0x1848 +
889 ((csr12&0x7000) == 0x5000 ? 0x20 : 0) +
890 ((csr12&0x06) == 6 ? 0 : 4);
891 data->val_out |= 0x6048;
892 break;
893 case 4:
894 /* Advertised value, bogus 10baseTx-FD value from CSR6. */
895 data->val_out =
896 ((ioread32(ioaddr + CSR6) >> 3) & 0x0040) +
897 ((csr14 >> 1) & 0x20) + 1;
898 data->val_out |= ((csr14 >> 9) & 0x03C0);
899 break;
900 case 5: data->val_out = tp->lpar; break;
901 default: data->val_out = 0; break;
902 }
903 } else {
904 data->val_out = tulip_mdio_read (dev, data->phy_id & 0x1f, regnum);
905 }
906 return 0;
907
908 case SIOCSMIIREG: /* Write MII PHY register. */
909 if (!capable (CAP_NET_ADMIN))
910 return -EPERM;
911 if (regnum & ~0x1f)
912 return -EINVAL;
913 if (data->phy_id == phy) {
914 u16 value = data->val_in;
915 switch (regnum) {
916 case 0: /* Check for autonegotiation on or reset. */
917 tp->full_duplex_lock = (value & 0x9000) ? 0 : 1;
918 if (tp->full_duplex_lock)
919 tp->full_duplex = (value & 0x0100) ? 1 : 0;
920 break;
921 case 4:
922 tp->advertising[phy_idx] =
923 tp->mii_advertise = data->val_in;
924 break;
925 }
926 }
927 if (data->phy_id == 32 && (tp->flags & HAS_NWAY)) {
928 u16 value = data->val_in;
929 if (regnum == 0) {
930 if ((value & 0x1200) == 0x1200) {
931 if (tp->chip_id == PNIC2) {
932 pnic2_start_nway (dev);
933 } else {
934 t21142_start_nway (dev);
935 }
936 }
937 } else if (regnum == 4)
938 tp->sym_advertise = value;
939 } else {
940 tulip_mdio_write (dev, data->phy_id & 0x1f, regnum, data->val_in);
941 }
942 return 0;
943 default:
944 return -EOPNOTSUPP;
945 }
946
947 return -EOPNOTSUPP;
948}
949
950
951/* Set or clear the multicast filter for this adaptor.
952 Note that we only use exclusion around actually queueing the
953 new frame, not around filling tp->setup_frame. This is non-deterministic
954 when re-entered but still correct. */
955
956#undef set_bit_le
957#define set_bit_le(i,p) do { ((char *)(p))[(i)/8] |= (1<<((i)%8)); } while(0)
958
959static void build_setup_frame_hash(u16 *setup_frm, struct net_device *dev)
960{
961 struct tulip_private *tp = netdev_priv(dev);
962 u16 hash_table[32];
963 struct dev_mc_list *mclist;
964 int i;
965 u16 *eaddrs;
966
967 memset(hash_table, 0, sizeof(hash_table));
968 set_bit_le(255, hash_table); /* Broadcast entry */
969 /* This should work on big-endian machines as well. */
970 for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
971 i++, mclist = mclist->next) {
972 int index = ether_crc_le(ETH_ALEN, mclist->dmi_addr) & 0x1ff;
973
974 set_bit_le(index, hash_table);
975
976 }
977 for (i = 0; i < 32; i++) {
978 *setup_frm++ = hash_table[i];
979 *setup_frm++ = hash_table[i];
980 }
981 setup_frm = &tp->setup_frame[13*6];
982
983 /* Fill the final entry with our physical address. */
984 eaddrs = (u16 *)dev->dev_addr;
985 *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
986 *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
987 *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
988}
989
990static void build_setup_frame_perfect(u16 *setup_frm, struct net_device *dev)
991{
992 struct tulip_private *tp = netdev_priv(dev);
993 struct dev_mc_list *mclist;
994 int i;
995 u16 *eaddrs;
996
997 /* We have <= 14 addresses so we can use the wonderful
998 16 address perfect filtering of the Tulip. */
999 for (i = 0, mclist = dev->mc_list; i < dev->mc_count;
1000 i++, mclist = mclist->next) {
1001 eaddrs = (u16 *)mclist->dmi_addr;
1002 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
1003 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
1004 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
1005 }
1006 /* Fill the unused entries with the broadcast address. */
1007 memset(setup_frm, 0xff, (15-i)*12);
1008 setup_frm = &tp->setup_frame[15*6];
1009
1010 /* Fill the final entry with our physical address. */
1011 eaddrs = (u16 *)dev->dev_addr;
1012 *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
1013 *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
1014 *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
1015}
1016
1017
1018static void set_rx_mode(struct net_device *dev)
1019{
1020 struct tulip_private *tp = netdev_priv(dev);
1021 void __iomem *ioaddr = tp->base_addr;
1022 int csr6;
1023
1024 csr6 = ioread32(ioaddr + CSR6) & ~0x00D5;
1025
1026 tp->csr6 &= ~0x00D5;
1027 if (dev->flags & IFF_PROMISC) { /* Set promiscuous. */
1028 tp->csr6 |= AcceptAllMulticast | AcceptAllPhys;
1029 csr6 |= AcceptAllMulticast | AcceptAllPhys;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001030 } else if ((dev->mc_count > 1000) || (dev->flags & IFF_ALLMULTI)) {
1031 /* Too many to filter well -- accept all multicasts. */
1032 tp->csr6 |= AcceptAllMulticast;
1033 csr6 |= AcceptAllMulticast;
1034 } else if (tp->flags & MC_HASH_ONLY) {
1035 /* Some work-alikes have only a 64-entry hash filter table. */
1036 /* Should verify correctness on big-endian/__powerpc__ */
1037 struct dev_mc_list *mclist;
1038 int i;
1039 if (dev->mc_count > 64) { /* Arbitrary non-effective limit. */
1040 tp->csr6 |= AcceptAllMulticast;
1041 csr6 |= AcceptAllMulticast;
1042 } else {
1043 u32 mc_filter[2] = {0, 0}; /* Multicast hash filter */
1044 int filterbit;
1045 for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
1046 i++, mclist = mclist->next) {
1047 if (tp->flags & COMET_MAC_ADDR)
1048 filterbit = ether_crc_le(ETH_ALEN, mclist->dmi_addr);
1049 else
1050 filterbit = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26;
1051 filterbit &= 0x3f;
1052 mc_filter[filterbit >> 5] |= 1 << (filterbit & 31);
1053 if (tulip_debug > 2) {
Joe Perches0795af52007-10-03 17:59:30 -07001054 DECLARE_MAC_BUF(mac);
1055 printk(KERN_INFO "%s: Added filter for %s"
1056 " %8.8x bit %d.\n",
1057 dev->name, print_mac(mac, mclist->dmi_addr),
1058 ether_crc(ETH_ALEN, mclist->dmi_addr), filterbit);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001059 }
1060 }
1061 if (mc_filter[0] == tp->mc_filter[0] &&
1062 mc_filter[1] == tp->mc_filter[1])
1063 ; /* No change. */
1064 else if (tp->flags & IS_ASIX) {
1065 iowrite32(2, ioaddr + CSR13);
1066 iowrite32(mc_filter[0], ioaddr + CSR14);
1067 iowrite32(3, ioaddr + CSR13);
1068 iowrite32(mc_filter[1], ioaddr + CSR14);
1069 } else if (tp->flags & COMET_MAC_ADDR) {
1070 iowrite32(mc_filter[0], ioaddr + 0xAC);
1071 iowrite32(mc_filter[1], ioaddr + 0xB0);
1072 }
1073 tp->mc_filter[0] = mc_filter[0];
1074 tp->mc_filter[1] = mc_filter[1];
1075 }
1076 } else {
1077 unsigned long flags;
1078 u32 tx_flags = 0x08000000 | 192;
1079
1080 /* Note that only the low-address shortword of setup_frame is valid!
1081 The values are doubled for big-endian architectures. */
1082 if (dev->mc_count > 14) { /* Must use a multicast hash table. */
1083 build_setup_frame_hash(tp->setup_frame, dev);
1084 tx_flags = 0x08400000 | 192;
1085 } else {
1086 build_setup_frame_perfect(tp->setup_frame, dev);
1087 }
1088
1089 spin_lock_irqsave(&tp->lock, flags);
1090
1091 if (tp->cur_tx - tp->dirty_tx > TX_RING_SIZE - 2) {
1092 /* Same setup recently queued, we need not add it. */
1093 } else {
1094 unsigned int entry;
1095 int dummy = -1;
1096
1097 /* Now add this frame to the Tx list. */
1098
1099 entry = tp->cur_tx++ % TX_RING_SIZE;
1100
1101 if (entry != 0) {
Peer Chenea8f4002005-08-11 15:09:23 -04001102 /* Avoid a chip errata by prefixing a dummy entry. */
1103 tp->tx_buffers[entry].skb = NULL;
1104 tp->tx_buffers[entry].mapping = 0;
1105 tp->tx_ring[entry].length =
1106 (entry == TX_RING_SIZE-1) ? cpu_to_le32(DESC_RING_WRAP) : 0;
1107 tp->tx_ring[entry].buffer1 = 0;
1108 /* Must set DescOwned later to avoid race with chip */
1109 dummy = entry;
1110 entry = tp->cur_tx++ % TX_RING_SIZE;
1111
Linus Torvalds1da177e2005-04-16 15:20:36 -07001112 }
1113
1114 tp->tx_buffers[entry].skb = NULL;
1115 tp->tx_buffers[entry].mapping =
1116 pci_map_single(tp->pdev, tp->setup_frame,
1117 sizeof(tp->setup_frame),
1118 PCI_DMA_TODEVICE);
1119 /* Put the setup frame on the Tx list. */
1120 if (entry == TX_RING_SIZE-1)
1121 tx_flags |= DESC_RING_WRAP; /* Wrap ring. */
1122 tp->tx_ring[entry].length = cpu_to_le32(tx_flags);
1123 tp->tx_ring[entry].buffer1 =
1124 cpu_to_le32(tp->tx_buffers[entry].mapping);
1125 tp->tx_ring[entry].status = cpu_to_le32(DescOwned);
1126 if (dummy >= 0)
1127 tp->tx_ring[dummy].status = cpu_to_le32(DescOwned);
1128 if (tp->cur_tx - tp->dirty_tx >= TX_RING_SIZE - 2)
1129 netif_stop_queue(dev);
1130
1131 /* Trigger an immediate transmit demand. */
1132 iowrite32(0, ioaddr + CSR1);
1133 }
1134
1135 spin_unlock_irqrestore(&tp->lock, flags);
1136 }
1137
1138 iowrite32(csr6, ioaddr + CSR6);
1139}
1140
1141#ifdef CONFIG_TULIP_MWI
1142static void __devinit tulip_mwi_config (struct pci_dev *pdev,
1143 struct net_device *dev)
1144{
1145 struct tulip_private *tp = netdev_priv(dev);
1146 u8 cache;
1147 u16 pci_command;
1148 u32 csr0;
1149
1150 if (tulip_debug > 3)
1151 printk(KERN_DEBUG "%s: tulip_mwi_config()\n", pci_name(pdev));
1152
1153 tp->csr0 = csr0 = 0;
1154
1155 /* if we have any cache line size at all, we can do MRM */
1156 csr0 |= MRM;
1157
1158 /* ...and barring hardware bugs, MWI */
1159 if (!(tp->chip_id == DC21143 && tp->revision == 65))
1160 csr0 |= MWI;
1161
1162 /* set or disable MWI in the standard PCI command bit.
1163 * Check for the case where mwi is desired but not available
1164 */
Randy Dunlap694625c2007-07-09 11:55:54 -07001165 if (csr0 & MWI) pci_try_set_mwi(pdev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001166 else pci_clear_mwi(pdev);
1167
1168 /* read result from hardware (in case bit refused to enable) */
1169 pci_read_config_word(pdev, PCI_COMMAND, &pci_command);
1170 if ((csr0 & MWI) && (!(pci_command & PCI_COMMAND_INVALIDATE)))
1171 csr0 &= ~MWI;
1172
1173 /* if cache line size hardwired to zero, no MWI */
1174 pci_read_config_byte(pdev, PCI_CACHE_LINE_SIZE, &cache);
1175 if ((csr0 & MWI) && (cache == 0)) {
1176 csr0 &= ~MWI;
1177 pci_clear_mwi(pdev);
1178 }
1179
1180 /* assign per-cacheline-size cache alignment and
1181 * burst length values
1182 */
1183 switch (cache) {
1184 case 8:
1185 csr0 |= MRL | (1 << CALShift) | (16 << BurstLenShift);
1186 break;
1187 case 16:
1188 csr0 |= MRL | (2 << CALShift) | (16 << BurstLenShift);
1189 break;
1190 case 32:
1191 csr0 |= MRL | (3 << CALShift) | (32 << BurstLenShift);
1192 break;
1193 default:
1194 cache = 0;
1195 break;
1196 }
1197
1198 /* if we have a good cache line size, we by now have a good
1199 * csr0, so save it and exit
1200 */
1201 if (cache)
1202 goto out;
1203
1204 /* we don't have a good csr0 or cache line size, disable MWI */
1205 if (csr0 & MWI) {
1206 pci_clear_mwi(pdev);
1207 csr0 &= ~MWI;
1208 }
1209
1210 /* sane defaults for burst length and cache alignment
1211 * originally from de4x5 driver
1212 */
1213 csr0 |= (8 << BurstLenShift) | (1 << CALShift);
1214
1215out:
1216 tp->csr0 = csr0;
1217 if (tulip_debug > 2)
1218 printk(KERN_DEBUG "%s: MWI config cacheline=%d, csr0=%08x\n",
1219 pci_name(pdev), cache, csr0);
1220}
1221#endif
1222
1223/*
1224 * Chips that have the MRM/reserved bit quirk and the burst quirk. That
1225 * is the DM910X and the on chip ULi devices
1226 */
Jeff Garzikf3b197a2006-05-26 21:39:03 -04001227
Linus Torvalds1da177e2005-04-16 15:20:36 -07001228static int tulip_uli_dm_quirk(struct pci_dev *pdev)
1229{
1230 if (pdev->vendor == 0x1282 && pdev->device == 0x9102)
1231 return 1;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001232 return 0;
1233}
1234
1235static int __devinit tulip_init_one (struct pci_dev *pdev,
1236 const struct pci_device_id *ent)
1237{
1238 struct tulip_private *tp;
1239 /* See note below on the multiport cards. */
1240 static unsigned char last_phys_addr[6] = {0x00, 'L', 'i', 'n', 'u', 'x'};
1241 static struct pci_device_id early_486_chipsets[] = {
1242 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82424) },
1243 { PCI_DEVICE(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_496) },
1244 { },
1245 };
1246 static int last_irq;
1247 static int multiport_cnt; /* For four-port boards w/one EEPROM */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001248 int i, irq;
1249 unsigned short sum;
1250 unsigned char *ee_data;
1251 struct net_device *dev;
1252 void __iomem *ioaddr;
1253 static int board_idx = -1;
1254 int chip_idx = ent->driver_data;
1255 const char *chip_name = tulip_tbl[chip_idx].chip_name;
1256 unsigned int eeprom_missing = 0;
1257 unsigned int force_csr0 = 0;
Joe Perches0795af52007-10-03 17:59:30 -07001258 DECLARE_MAC_BUF(mac);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001259
1260#ifndef MODULE
1261 static int did_version; /* Already printed version info. */
1262 if (tulip_debug > 0 && did_version++ == 0)
1263 printk (KERN_INFO "%s", version);
1264#endif
1265
1266 board_idx++;
1267
1268 /*
1269 * Lan media wire a tulip chip to a wan interface. Needs a very
1270 * different driver (lmc driver)
1271 */
1272
1273 if (pdev->subsystem_vendor == PCI_VENDOR_ID_LMC) {
1274 printk (KERN_ERR PFX "skipping LMC card.\n");
1275 return -ENODEV;
1276 }
1277
1278 /*
1279 * Early DM9100's need software CRC and the DMFE driver
1280 */
1281
1282 if (pdev->vendor == 0x1282 && pdev->device == 0x9100)
1283 {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001284 /* Read Chip revision */
Al Viro8ca7ee62007-07-15 21:01:02 +01001285 if (pdev->revision < 0x30)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001286 {
1287 printk(KERN_ERR PFX "skipping early DM9100 with Crc bug (use dmfe)\n");
1288 return -ENODEV;
1289 }
1290 }
1291
1292 /*
1293 * Looks for early PCI chipsets where people report hangs
1294 * without the workarounds being on.
1295 */
1296
1297 /* 1. Intel Saturn. Switch to 8 long words burst, 8 long word cache
Jeff Garzikf3b197a2006-05-26 21:39:03 -04001298 aligned. Aries might need this too. The Saturn errata are not
Linus Torvalds1da177e2005-04-16 15:20:36 -07001299 pretty reading but thankfully it's an old 486 chipset.
1300
1301 2. The dreaded SiS496 486 chipset. Same workaround as Intel
1302 Saturn.
1303 */
1304
1305 if (pci_dev_present(early_486_chipsets)) {
1306 csr0 = MRL | MRM | (8 << BurstLenShift) | (1 << CALShift);
1307 force_csr0 = 1;
1308 }
1309
1310 /* bugfix: the ASIX must have a burst limit or horrible things happen. */
1311 if (chip_idx == AX88140) {
1312 if ((csr0 & 0x3f00) == 0)
1313 csr0 |= 0x2000;
1314 }
1315
1316 /* PNIC doesn't have MWI/MRL/MRM... */
1317 if (chip_idx == LC82C168)
1318 csr0 &= ~0xfff10000; /* zero reserved bits 31:20, 16 */
1319
1320 /* DM9102A has troubles with MRM & clear reserved bits 24:22, 20, 16, 7:1 */
1321 if (tulip_uli_dm_quirk(pdev)) {
1322 csr0 &= ~0x01f100ff;
David S. Miller49345102007-03-29 01:39:44 -07001323#if defined(CONFIG_SPARC)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001324 csr0 = (csr0 & ~0xff00) | 0xe000;
1325#endif
1326 }
1327 /*
1328 * And back to business
1329 */
1330
1331 i = pci_enable_device(pdev);
1332 if (i) {
1333 printk (KERN_ERR PFX
1334 "Cannot enable tulip board #%d, aborting\n",
1335 board_idx);
1336 return i;
1337 }
1338
1339 irq = pdev->irq;
1340
1341 /* alloc_etherdev ensures aligned and zeroed private structures */
1342 dev = alloc_etherdev (sizeof (*tp));
1343 if (!dev) {
1344 printk (KERN_ERR PFX "ether device alloc failed, aborting\n");
1345 return -ENOMEM;
1346 }
1347
Linus Torvalds1da177e2005-04-16 15:20:36 -07001348 SET_NETDEV_DEV(dev, &pdev->dev);
1349 if (pci_resource_len (pdev, 0) < tulip_tbl[chip_idx].io_size) {
Greg Kroah-Hartman7c7459d2006-06-12 15:13:08 -07001350 printk (KERN_ERR PFX "%s: I/O region (0x%llx@0x%llx) too small, "
Linus Torvalds1da177e2005-04-16 15:20:36 -07001351 "aborting\n", pci_name(pdev),
Greg Kroah-Hartman7c7459d2006-06-12 15:13:08 -07001352 (unsigned long long)pci_resource_len (pdev, 0),
1353 (unsigned long long)pci_resource_start (pdev, 0));
Linus Torvalds1da177e2005-04-16 15:20:36 -07001354 goto err_out_free_netdev;
1355 }
1356
1357 /* grab all resources from both PIO and MMIO regions, as we
1358 * don't want anyone else messing around with our hardware */
1359 if (pci_request_regions (pdev, "tulip"))
1360 goto err_out_free_netdev;
1361
Grant Grundler7f2b1242006-09-08 11:15:39 -07001362 ioaddr = pci_iomap(pdev, TULIP_BAR, tulip_tbl[chip_idx].io_size);
1363
Linus Torvalds1da177e2005-04-16 15:20:36 -07001364 if (!ioaddr)
1365 goto err_out_free_res;
1366
Linus Torvalds1da177e2005-04-16 15:20:36 -07001367 /*
1368 * initialize private data structure 'tp'
1369 * it is zeroed and aligned in alloc_etherdev
1370 */
1371 tp = netdev_priv(dev);
David Howellsc4028952006-11-22 14:57:56 +00001372 tp->dev = dev;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001373
1374 tp->rx_ring = pci_alloc_consistent(pdev,
1375 sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
1376 sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
1377 &tp->rx_ring_dma);
1378 if (!tp->rx_ring)
1379 goto err_out_mtable;
1380 tp->tx_ring = (struct tulip_tx_desc *)(tp->rx_ring + RX_RING_SIZE);
1381 tp->tx_ring_dma = tp->rx_ring_dma + sizeof(struct tulip_rx_desc) * RX_RING_SIZE;
1382
1383 tp->chip_id = chip_idx;
1384 tp->flags = tulip_tbl[chip_idx].flags;
1385 tp->pdev = pdev;
1386 tp->base_addr = ioaddr;
Auke Kok44c10132007-06-08 15:46:36 -07001387 tp->revision = pdev->revision;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001388 tp->csr0 = csr0;
1389 spin_lock_init(&tp->lock);
1390 spin_lock_init(&tp->mii_lock);
1391 init_timer(&tp->timer);
1392 tp->timer.data = (unsigned long)dev;
1393 tp->timer.function = tulip_tbl[tp->chip_id].media_timer;
1394
David Howellsc4028952006-11-22 14:57:56 +00001395 INIT_WORK(&tp->media_work, tulip_tbl[tp->chip_id].media_task);
Francois Romieu0bb3cf72006-09-08 11:15:38 -07001396
Linus Torvalds1da177e2005-04-16 15:20:36 -07001397 dev->base_addr = (unsigned long)ioaddr;
1398
1399#ifdef CONFIG_TULIP_MWI
1400 if (!force_csr0 && (tp->flags & HAS_PCI_MWI))
1401 tulip_mwi_config (pdev, dev);
1402#else
1403 /* MWI is broken for DC21143 rev 65... */
Auke Kok44c10132007-06-08 15:46:36 -07001404 if (chip_idx == DC21143 && pdev->revision == 65)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001405 tp->csr0 &= ~MWI;
1406#endif
1407
1408 /* Stop the chip's Tx and Rx processes. */
1409 tulip_stop_rxtx(tp);
1410
1411 pci_set_master(pdev);
1412
1413#ifdef CONFIG_GSC
1414 if (pdev->subsystem_vendor == PCI_VENDOR_ID_HP) {
1415 switch (pdev->subsystem_device) {
1416 default:
1417 break;
1418 case 0x1061:
1419 case 0x1062:
1420 case 0x1063:
1421 case 0x1098:
1422 case 0x1099:
1423 case 0x10EE:
1424 tp->flags |= HAS_SWAPPED_SEEPROM | NEEDS_FAKE_MEDIA_TABLE;
1425 chip_name = "GSC DS21140 Tulip";
1426 }
1427 }
1428#endif
1429
1430 /* Clear the missed-packet counter. */
1431 ioread32(ioaddr + CSR8);
1432
1433 /* The station address ROM is read byte serially. The register must
1434 be polled, waiting for the value to be read bit serially from the
1435 EEPROM.
1436 */
1437 ee_data = tp->eeprom;
1438 sum = 0;
1439 if (chip_idx == LC82C168) {
1440 for (i = 0; i < 3; i++) {
1441 int value, boguscnt = 100000;
1442 iowrite32(0x600 | i, ioaddr + 0x98);
1443 do
1444 value = ioread32(ioaddr + CSR9);
1445 while (value < 0 && --boguscnt > 0);
Al Viroc559a5b2007-08-23 00:43:22 -04001446 put_unaligned(cpu_to_le16(value), ((__le16*)dev->dev_addr) + i);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001447 sum += value & 0xffff;
1448 }
1449 } else if (chip_idx == COMET) {
1450 /* No need to read the EEPROM. */
Al Viroc559a5b2007-08-23 00:43:22 -04001451 put_unaligned(cpu_to_le32(ioread32(ioaddr + 0xA4)), (__le32 *)dev->dev_addr);
1452 put_unaligned(cpu_to_le16(ioread32(ioaddr + 0xA8)), (__le16 *)(dev->dev_addr + 4));
Linus Torvalds1da177e2005-04-16 15:20:36 -07001453 for (i = 0; i < 6; i ++)
1454 sum += dev->dev_addr[i];
1455 } else {
1456 /* A serial EEPROM interface, we read now and sort it out later. */
1457 int sa_offset = 0;
1458 int ee_addr_size = tulip_read_eeprom(dev, 0xff, 8) & 0x40000 ? 8 : 6;
1459
1460 for (i = 0; i < sizeof(tp->eeprom); i+=2) {
1461 u16 data = tulip_read_eeprom(dev, i/2, ee_addr_size);
1462 ee_data[i] = data & 0xff;
1463 ee_data[i + 1] = data >> 8;
1464 }
1465
1466 /* DEC now has a specification (see Notes) but early board makers
1467 just put the address in the first EEPROM locations. */
1468 /* This does memcmp(ee_data, ee_data+16, 8) */
1469 for (i = 0; i < 8; i ++)
1470 if (ee_data[i] != ee_data[16+i])
1471 sa_offset = 20;
1472 if (chip_idx == CONEXANT) {
1473 /* Check that the tuple type and length is correct. */
1474 if (ee_data[0x198] == 0x04 && ee_data[0x199] == 6)
1475 sa_offset = 0x19A;
1476 } else if (ee_data[0] == 0xff && ee_data[1] == 0xff &&
1477 ee_data[2] == 0) {
1478 sa_offset = 2; /* Grrr, damn Matrox boards. */
1479 multiport_cnt = 4;
1480 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001481#ifdef CONFIG_MIPS_COBALT
Jeff Garzikf3b197a2006-05-26 21:39:03 -04001482 if ((pdev->bus->number == 0) &&
Linus Torvalds1da177e2005-04-16 15:20:36 -07001483 ((PCI_SLOT(pdev->devfn) == 7) ||
1484 (PCI_SLOT(pdev->devfn) == 12))) {
1485 /* Cobalt MAC address in first EEPROM locations. */
1486 sa_offset = 0;
Ralf Baechle12755c12005-06-26 17:45:52 -04001487 /* Ensure our media table fixup get's applied */
1488 memcpy(ee_data + 16, ee_data, 8);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001489 }
1490#endif
1491#ifdef CONFIG_GSC
1492 /* Check to see if we have a broken srom */
1493 if (ee_data[0] == 0x61 && ee_data[1] == 0x10) {
1494 /* pci_vendor_id and subsystem_id are swapped */
1495 ee_data[0] = ee_data[2];
1496 ee_data[1] = ee_data[3];
1497 ee_data[2] = 0x61;
1498 ee_data[3] = 0x10;
1499
1500 /* HSC-PCI boards need to be byte-swaped and shifted
1501 * up 1 word. This shift needs to happen at the end
1502 * of the MAC first because of the 2 byte overlap.
1503 */
1504 for (i = 4; i >= 0; i -= 2) {
1505 ee_data[17 + i + 3] = ee_data[17 + i];
1506 ee_data[16 + i + 5] = ee_data[16 + i];
1507 }
1508 }
1509#endif
1510
1511 for (i = 0; i < 6; i ++) {
1512 dev->dev_addr[i] = ee_data[i + sa_offset];
1513 sum += ee_data[i + sa_offset];
1514 }
1515 }
1516 /* Lite-On boards have the address byte-swapped. */
1517 if ((dev->dev_addr[0] == 0xA0 || dev->dev_addr[0] == 0xC0 || dev->dev_addr[0] == 0x02)
1518 && dev->dev_addr[1] == 0x00)
1519 for (i = 0; i < 6; i+=2) {
1520 char tmp = dev->dev_addr[i];
1521 dev->dev_addr[i] = dev->dev_addr[i+1];
1522 dev->dev_addr[i+1] = tmp;
1523 }
1524 /* On the Zynx 315 Etherarray and other multiport boards only the
1525 first Tulip has an EEPROM.
1526 On Sparc systems the mac address is held in the OBP property
1527 "local-mac-address".
1528 The addresses of the subsequent ports are derived from the first.
1529 Many PCI BIOSes also incorrectly report the IRQ line, so we correct
1530 that here as well. */
1531 if (sum == 0 || sum == 6*0xff) {
David S. Miller49345102007-03-29 01:39:44 -07001532#if defined(CONFIG_SPARC)
David S. Millerd297c312007-03-29 01:41:28 -07001533 struct device_node *dp = pci_device_to_OF_node(pdev);
1534 const unsigned char *addr;
1535 int len;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001536#endif
1537 eeprom_missing = 1;
1538 for (i = 0; i < 5; i++)
1539 dev->dev_addr[i] = last_phys_addr[i];
1540 dev->dev_addr[i] = last_phys_addr[i] + 1;
David S. Miller49345102007-03-29 01:39:44 -07001541#if defined(CONFIG_SPARC)
David S. Millerd297c312007-03-29 01:41:28 -07001542 addr = of_get_property(dp, "local-mac-address", &len);
1543 if (addr && len == 6)
1544 memcpy(dev->dev_addr, addr, 6);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001545#endif
Christoph Dworzakb9c4c602006-01-06 14:49:22 -05001546#if defined(__i386__) || defined(__x86_64__) /* Patch up x86 BIOS bug. */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001547 if (last_irq)
1548 irq = last_irq;
1549#endif
1550 }
1551
1552 for (i = 0; i < 6; i++)
1553 last_phys_addr[i] = dev->dev_addr[i];
1554 last_irq = irq;
1555 dev->irq = irq;
1556
1557 /* The lower four bits are the media type. */
1558 if (board_idx >= 0 && board_idx < MAX_UNITS) {
1559 if (options[board_idx] & MEDIA_MASK)
1560 tp->default_port = options[board_idx] & MEDIA_MASK;
1561 if ((options[board_idx] & FullDuplex) || full_duplex[board_idx] > 0)
1562 tp->full_duplex = 1;
1563 if (mtu[board_idx] > 0)
1564 dev->mtu = mtu[board_idx];
1565 }
1566 if (dev->mem_start & MEDIA_MASK)
1567 tp->default_port = dev->mem_start & MEDIA_MASK;
1568 if (tp->default_port) {
1569 printk(KERN_INFO "tulip%d: Transceiver selection forced to %s.\n",
1570 board_idx, medianame[tp->default_port & MEDIA_MASK]);
1571 tp->medialock = 1;
1572 if (tulip_media_cap[tp->default_port] & MediaAlwaysFD)
1573 tp->full_duplex = 1;
1574 }
1575 if (tp->full_duplex)
1576 tp->full_duplex_lock = 1;
1577
1578 if (tulip_media_cap[tp->default_port] & MediaIsMII) {
1579 u16 media2advert[] = { 0x20, 0x40, 0x03e0, 0x60, 0x80, 0x100, 0x200 };
1580 tp->mii_advertise = media2advert[tp->default_port - 9];
1581 tp->mii_advertise |= (tp->flags & HAS_8023X); /* Matching bits! */
1582 }
1583
1584 if (tp->flags & HAS_MEDIA_TABLE) {
1585 sprintf(dev->name, "tulip%d", board_idx); /* hack */
1586 tulip_parse_eeprom(dev);
1587 strcpy(dev->name, "eth%d"); /* un-hack */
1588 }
1589
1590 if ((tp->flags & ALWAYS_CHECK_MII) ||
1591 (tp->mtable && tp->mtable->has_mii) ||
1592 ( ! tp->mtable && (tp->flags & HAS_MII))) {
1593 if (tp->mtable && tp->mtable->has_mii) {
1594 for (i = 0; i < tp->mtable->leafcount; i++)
1595 if (tp->mtable->mleaf[i].media == 11) {
1596 tp->cur_index = i;
1597 tp->saved_if_port = dev->if_port;
1598 tulip_select_media(dev, 2);
1599 dev->if_port = tp->saved_if_port;
1600 break;
1601 }
1602 }
1603
1604 /* Find the connected MII xcvrs.
1605 Doing this in open() would allow detecting external xcvrs
1606 later, but takes much time. */
1607 tulip_find_mii (dev, board_idx);
1608 }
1609
1610 /* The Tulip-specific entries in the device structure. */
1611 dev->open = tulip_open;
1612 dev->hard_start_xmit = tulip_start_xmit;
1613 dev->tx_timeout = tulip_tx_timeout;
1614 dev->watchdog_timeo = TX_TIMEOUT;
1615#ifdef CONFIG_TULIP_NAPI
Stephen Hemmingerbea33482007-10-03 16:41:36 -07001616 netif_napi_add(dev, &tp->napi, tulip_poll, 16);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001617#endif
1618 dev->stop = tulip_close;
1619 dev->get_stats = tulip_get_stats;
1620 dev->do_ioctl = private_ioctl;
1621 dev->set_multicast_list = set_rx_mode;
1622#ifdef CONFIG_NET_POLL_CONTROLLER
1623 dev->poll_controller = &poll_tulip;
1624#endif
1625 SET_ETHTOOL_OPS(dev, &ops);
1626
1627 if (register_netdev(dev))
1628 goto err_out_free_ring;
1629
Grant Grundlerc69f4122006-09-08 11:15:35 -07001630 printk(KERN_INFO "%s: %s rev %d at "
1631#ifdef CONFIG_TULIP_MMIO
1632 "MMIO"
1633#else
1634 "Port"
1635#endif
Auke Kok44c10132007-06-08 15:46:36 -07001636 " %#llx,", dev->name, chip_name, pdev->revision,
Grant Grundlerc69f4122006-09-08 11:15:35 -07001637 (unsigned long long) pci_resource_start(pdev, TULIP_BAR));
Linus Torvalds1da177e2005-04-16 15:20:36 -07001638 pci_set_drvdata(pdev, dev);
1639
1640 if (eeprom_missing)
1641 printk(" EEPROM not present,");
Joe Perches0795af52007-10-03 17:59:30 -07001642 printk(" %s", print_mac(mac, dev->dev_addr));
Linus Torvalds1da177e2005-04-16 15:20:36 -07001643 printk(", IRQ %d.\n", irq);
1644
1645 if (tp->chip_id == PNIC2)
1646 tp->link_change = pnic2_lnk_change;
1647 else if (tp->flags & HAS_NWAY)
1648 tp->link_change = t21142_lnk_change;
1649 else if (tp->flags & HAS_PNICNWAY)
1650 tp->link_change = pnic_lnk_change;
1651
1652 /* Reset the xcvr interface and turn on heartbeat. */
1653 switch (chip_idx) {
1654 case DC21140:
1655 case DM910X:
Linus Torvalds1da177e2005-04-16 15:20:36 -07001656 default:
1657 if (tp->mtable)
1658 iowrite32(tp->mtable->csr12dir | 0x100, ioaddr + CSR12);
1659 break;
1660 case DC21142:
1661 if (tp->mii_cnt || tulip_media_cap[dev->if_port] & MediaIsMII) {
1662 iowrite32(csr6_mask_defstate, ioaddr + CSR6);
1663 iowrite32(0x0000, ioaddr + CSR13);
1664 iowrite32(0x0000, ioaddr + CSR14);
1665 iowrite32(csr6_mask_hdcap, ioaddr + CSR6);
1666 } else
1667 t21142_start_nway(dev);
1668 break;
1669 case PNIC2:
1670 /* just do a reset for sanity sake */
1671 iowrite32(0x0000, ioaddr + CSR13);
1672 iowrite32(0x0000, ioaddr + CSR14);
1673 break;
1674 case LC82C168:
1675 if ( ! tp->mii_cnt) {
1676 tp->nway = 1;
1677 tp->nwayset = 0;
1678 iowrite32(csr6_ttm | csr6_ca, ioaddr + CSR6);
1679 iowrite32(0x30, ioaddr + CSR12);
1680 iowrite32(0x0001F078, ioaddr + CSR6);
1681 iowrite32(0x0201F078, ioaddr + CSR6); /* Turn on autonegotiation. */
1682 }
1683 break;
1684 case MX98713:
1685 case COMPEX9881:
1686 iowrite32(0x00000000, ioaddr + CSR6);
1687 iowrite32(0x000711C0, ioaddr + CSR14); /* Turn on NWay. */
1688 iowrite32(0x00000001, ioaddr + CSR13);
1689 break;
1690 case MX98715:
1691 case MX98725:
1692 iowrite32(0x01a80000, ioaddr + CSR6);
1693 iowrite32(0xFFFFFFFF, ioaddr + CSR14);
1694 iowrite32(0x00001000, ioaddr + CSR12);
1695 break;
1696 case COMET:
1697 /* No initialization necessary. */
1698 break;
1699 }
1700
1701 /* put the chip in snooze mode until opened */
1702 tulip_set_power_state (tp, 0, 1);
1703
1704 return 0;
1705
1706err_out_free_ring:
1707 pci_free_consistent (pdev,
1708 sizeof (struct tulip_rx_desc) * RX_RING_SIZE +
1709 sizeof (struct tulip_tx_desc) * TX_RING_SIZE,
1710 tp->rx_ring, tp->rx_ring_dma);
1711
1712err_out_mtable:
Jesper Juhlb4558ea2005-10-28 16:53:13 -04001713 kfree (tp->mtable);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001714 pci_iounmap(pdev, ioaddr);
1715
1716err_out_free_res:
1717 pci_release_regions (pdev);
1718
1719err_out_free_netdev:
1720 free_netdev (dev);
1721 return -ENODEV;
1722}
1723
1724
1725#ifdef CONFIG_PM
1726
1727static int tulip_suspend (struct pci_dev *pdev, pm_message_t state)
1728{
1729 struct net_device *dev = pci_get_drvdata(pdev);
1730
Adam Belay1fe2cb32005-06-20 14:28:41 -07001731 if (!dev)
1732 return -EINVAL;
1733
1734 if (netif_running(dev))
1735 tulip_down(dev);
1736
1737 netif_device_detach(dev);
1738 free_irq(dev->irq, dev);
1739
1740 pci_save_state(pdev);
1741 pci_disable_device(pdev);
1742 pci_set_power_state(pdev, pci_choose_state(pdev, state));
1743
Linus Torvalds1da177e2005-04-16 15:20:36 -07001744 return 0;
1745}
1746
1747
1748static int tulip_resume(struct pci_dev *pdev)
1749{
1750 struct net_device *dev = pci_get_drvdata(pdev);
Adam Belay1fe2cb32005-06-20 14:28:41 -07001751 int retval;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001752
Adam Belay1fe2cb32005-06-20 14:28:41 -07001753 if (!dev)
1754 return -EINVAL;
1755
1756 pci_set_power_state(pdev, PCI_D0);
1757 pci_restore_state(pdev);
1758
Valerie Henson9f486ae2006-09-08 11:15:41 -07001759 if ((retval = pci_enable_device(pdev))) {
1760 printk (KERN_ERR "tulip: pci_enable_device failed in resume\n");
1761 return retval;
1762 }
Adam Belay1fe2cb32005-06-20 14:28:41 -07001763
Thomas Gleixner1fb9df52006-07-01 19:29:39 -07001764 if ((retval = request_irq(dev->irq, &tulip_interrupt, IRQF_SHARED, dev->name, dev))) {
Adam Belay1fe2cb32005-06-20 14:28:41 -07001765 printk (KERN_ERR "tulip: request_irq failed in resume\n");
1766 return retval;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001767 }
Adam Belay1fe2cb32005-06-20 14:28:41 -07001768
1769 netif_device_attach(dev);
1770
1771 if (netif_running(dev))
1772 tulip_up(dev);
1773
Linus Torvalds1da177e2005-04-16 15:20:36 -07001774 return 0;
1775}
1776
1777#endif /* CONFIG_PM */
1778
1779
1780static void __devexit tulip_remove_one (struct pci_dev *pdev)
1781{
1782 struct net_device *dev = pci_get_drvdata (pdev);
1783 struct tulip_private *tp;
1784
1785 if (!dev)
1786 return;
1787
1788 tp = netdev_priv(dev);
1789 unregister_netdev(dev);
1790 pci_free_consistent (pdev,
1791 sizeof (struct tulip_rx_desc) * RX_RING_SIZE +
1792 sizeof (struct tulip_tx_desc) * TX_RING_SIZE,
1793 tp->rx_ring, tp->rx_ring_dma);
Jesper Juhlb4558ea2005-10-28 16:53:13 -04001794 kfree (tp->mtable);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001795 pci_iounmap(pdev, tp->base_addr);
1796 free_netdev (dev);
1797 pci_release_regions (pdev);
1798 pci_set_drvdata (pdev, NULL);
1799
1800 /* pci_power_off (pdev, -1); */
1801}
1802
1803#ifdef CONFIG_NET_POLL_CONTROLLER
1804/*
1805 * Polling 'interrupt' - used by things like netconsole to send skbs
1806 * without having to re-enable interrupts. It's not called while
1807 * the interrupt routine is executing.
1808 */
1809
1810static void poll_tulip (struct net_device *dev)
1811{
1812 /* disable_irq here is not very nice, but with the lockless
1813 interrupt handler we have no other choice. */
1814 disable_irq(dev->irq);
David Howells7d12e782006-10-05 14:55:46 +01001815 tulip_interrupt (dev->irq, dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001816 enable_irq(dev->irq);
1817}
1818#endif
1819
1820static struct pci_driver tulip_driver = {
1821 .name = DRV_NAME,
1822 .id_table = tulip_pci_tbl,
1823 .probe = tulip_init_one,
1824 .remove = __devexit_p(tulip_remove_one),
1825#ifdef CONFIG_PM
1826 .suspend = tulip_suspend,
1827 .resume = tulip_resume,
1828#endif /* CONFIG_PM */
1829};
1830
1831
1832static int __init tulip_init (void)
1833{
1834#ifdef MODULE
1835 printk (KERN_INFO "%s", version);
1836#endif
1837
1838 /* copy module parms into globals */
1839 tulip_rx_copybreak = rx_copybreak;
1840 tulip_max_interrupt_work = max_interrupt_work;
1841
1842 /* probe for and init boards */
Jeff Garzik29917622006-08-19 17:48:59 -04001843 return pci_register_driver(&tulip_driver);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001844}
1845
1846
1847static void __exit tulip_cleanup (void)
1848{
1849 pci_unregister_driver (&tulip_driver);
1850}
1851
1852
1853module_init(tulip_init);
1854module_exit(tulip_cleanup);