blob: 7040a59fa3c963ae01e30656cbfe27d5e99d75f9 [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) {
329 u32 addr_low = le32_to_cpu(get_unaligned((u32 *)dev->dev_addr));
330 u32 addr_high = le16_to_cpu(get_unaligned((u16 *)(dev->dev_addr+4)));
331 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) {
1054 printk(KERN_INFO "%s: Added filter for %2.2x:%2.2x:%2.2x:"
1055 "%2.2x:%2.2x:%2.2x %8.8x bit %d.\n", dev->name,
1056 mclist->dmi_addr[0], mclist->dmi_addr[1],
1057 mclist->dmi_addr[2], mclist->dmi_addr[3],
1058 mclist->dmi_addr[4], mclist->dmi_addr[5],
1059 ether_crc(ETH_ALEN, mclist->dmi_addr), filterbit);
1060 }
1061 }
1062 if (mc_filter[0] == tp->mc_filter[0] &&
1063 mc_filter[1] == tp->mc_filter[1])
1064 ; /* No change. */
1065 else if (tp->flags & IS_ASIX) {
1066 iowrite32(2, ioaddr + CSR13);
1067 iowrite32(mc_filter[0], ioaddr + CSR14);
1068 iowrite32(3, ioaddr + CSR13);
1069 iowrite32(mc_filter[1], ioaddr + CSR14);
1070 } else if (tp->flags & COMET_MAC_ADDR) {
1071 iowrite32(mc_filter[0], ioaddr + 0xAC);
1072 iowrite32(mc_filter[1], ioaddr + 0xB0);
1073 }
1074 tp->mc_filter[0] = mc_filter[0];
1075 tp->mc_filter[1] = mc_filter[1];
1076 }
1077 } else {
1078 unsigned long flags;
1079 u32 tx_flags = 0x08000000 | 192;
1080
1081 /* Note that only the low-address shortword of setup_frame is valid!
1082 The values are doubled for big-endian architectures. */
1083 if (dev->mc_count > 14) { /* Must use a multicast hash table. */
1084 build_setup_frame_hash(tp->setup_frame, dev);
1085 tx_flags = 0x08400000 | 192;
1086 } else {
1087 build_setup_frame_perfect(tp->setup_frame, dev);
1088 }
1089
1090 spin_lock_irqsave(&tp->lock, flags);
1091
1092 if (tp->cur_tx - tp->dirty_tx > TX_RING_SIZE - 2) {
1093 /* Same setup recently queued, we need not add it. */
1094 } else {
1095 unsigned int entry;
1096 int dummy = -1;
1097
1098 /* Now add this frame to the Tx list. */
1099
1100 entry = tp->cur_tx++ % TX_RING_SIZE;
1101
1102 if (entry != 0) {
Peer Chenea8f4002005-08-11 15:09:23 -04001103 /* Avoid a chip errata by prefixing a dummy entry. */
1104 tp->tx_buffers[entry].skb = NULL;
1105 tp->tx_buffers[entry].mapping = 0;
1106 tp->tx_ring[entry].length =
1107 (entry == TX_RING_SIZE-1) ? cpu_to_le32(DESC_RING_WRAP) : 0;
1108 tp->tx_ring[entry].buffer1 = 0;
1109 /* Must set DescOwned later to avoid race with chip */
1110 dummy = entry;
1111 entry = tp->cur_tx++ % TX_RING_SIZE;
1112
Linus Torvalds1da177e2005-04-16 15:20:36 -07001113 }
1114
1115 tp->tx_buffers[entry].skb = NULL;
1116 tp->tx_buffers[entry].mapping =
1117 pci_map_single(tp->pdev, tp->setup_frame,
1118 sizeof(tp->setup_frame),
1119 PCI_DMA_TODEVICE);
1120 /* Put the setup frame on the Tx list. */
1121 if (entry == TX_RING_SIZE-1)
1122 tx_flags |= DESC_RING_WRAP; /* Wrap ring. */
1123 tp->tx_ring[entry].length = cpu_to_le32(tx_flags);
1124 tp->tx_ring[entry].buffer1 =
1125 cpu_to_le32(tp->tx_buffers[entry].mapping);
1126 tp->tx_ring[entry].status = cpu_to_le32(DescOwned);
1127 if (dummy >= 0)
1128 tp->tx_ring[dummy].status = cpu_to_le32(DescOwned);
1129 if (tp->cur_tx - tp->dirty_tx >= TX_RING_SIZE - 2)
1130 netif_stop_queue(dev);
1131
1132 /* Trigger an immediate transmit demand. */
1133 iowrite32(0, ioaddr + CSR1);
1134 }
1135
1136 spin_unlock_irqrestore(&tp->lock, flags);
1137 }
1138
1139 iowrite32(csr6, ioaddr + CSR6);
1140}
1141
1142#ifdef CONFIG_TULIP_MWI
1143static void __devinit tulip_mwi_config (struct pci_dev *pdev,
1144 struct net_device *dev)
1145{
1146 struct tulip_private *tp = netdev_priv(dev);
1147 u8 cache;
1148 u16 pci_command;
1149 u32 csr0;
1150
1151 if (tulip_debug > 3)
1152 printk(KERN_DEBUG "%s: tulip_mwi_config()\n", pci_name(pdev));
1153
1154 tp->csr0 = csr0 = 0;
1155
1156 /* if we have any cache line size at all, we can do MRM */
1157 csr0 |= MRM;
1158
1159 /* ...and barring hardware bugs, MWI */
1160 if (!(tp->chip_id == DC21143 && tp->revision == 65))
1161 csr0 |= MWI;
1162
1163 /* set or disable MWI in the standard PCI command bit.
1164 * Check for the case where mwi is desired but not available
1165 */
Randy Dunlap694625c2007-07-09 11:55:54 -07001166 if (csr0 & MWI) pci_try_set_mwi(pdev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001167 else pci_clear_mwi(pdev);
1168
1169 /* read result from hardware (in case bit refused to enable) */
1170 pci_read_config_word(pdev, PCI_COMMAND, &pci_command);
1171 if ((csr0 & MWI) && (!(pci_command & PCI_COMMAND_INVALIDATE)))
1172 csr0 &= ~MWI;
1173
1174 /* if cache line size hardwired to zero, no MWI */
1175 pci_read_config_byte(pdev, PCI_CACHE_LINE_SIZE, &cache);
1176 if ((csr0 & MWI) && (cache == 0)) {
1177 csr0 &= ~MWI;
1178 pci_clear_mwi(pdev);
1179 }
1180
1181 /* assign per-cacheline-size cache alignment and
1182 * burst length values
1183 */
1184 switch (cache) {
1185 case 8:
1186 csr0 |= MRL | (1 << CALShift) | (16 << BurstLenShift);
1187 break;
1188 case 16:
1189 csr0 |= MRL | (2 << CALShift) | (16 << BurstLenShift);
1190 break;
1191 case 32:
1192 csr0 |= MRL | (3 << CALShift) | (32 << BurstLenShift);
1193 break;
1194 default:
1195 cache = 0;
1196 break;
1197 }
1198
1199 /* if we have a good cache line size, we by now have a good
1200 * csr0, so save it and exit
1201 */
1202 if (cache)
1203 goto out;
1204
1205 /* we don't have a good csr0 or cache line size, disable MWI */
1206 if (csr0 & MWI) {
1207 pci_clear_mwi(pdev);
1208 csr0 &= ~MWI;
1209 }
1210
1211 /* sane defaults for burst length and cache alignment
1212 * originally from de4x5 driver
1213 */
1214 csr0 |= (8 << BurstLenShift) | (1 << CALShift);
1215
1216out:
1217 tp->csr0 = csr0;
1218 if (tulip_debug > 2)
1219 printk(KERN_DEBUG "%s: MWI config cacheline=%d, csr0=%08x\n",
1220 pci_name(pdev), cache, csr0);
1221}
1222#endif
1223
1224/*
1225 * Chips that have the MRM/reserved bit quirk and the burst quirk. That
1226 * is the DM910X and the on chip ULi devices
1227 */
Jeff Garzikf3b197a2006-05-26 21:39:03 -04001228
Linus Torvalds1da177e2005-04-16 15:20:36 -07001229static int tulip_uli_dm_quirk(struct pci_dev *pdev)
1230{
1231 if (pdev->vendor == 0x1282 && pdev->device == 0x9102)
1232 return 1;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001233 return 0;
1234}
1235
1236static int __devinit tulip_init_one (struct pci_dev *pdev,
1237 const struct pci_device_id *ent)
1238{
1239 struct tulip_private *tp;
1240 /* See note below on the multiport cards. */
1241 static unsigned char last_phys_addr[6] = {0x00, 'L', 'i', 'n', 'u', 'x'};
1242 static struct pci_device_id early_486_chipsets[] = {
1243 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82424) },
1244 { PCI_DEVICE(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_496) },
1245 { },
1246 };
1247 static int last_irq;
1248 static int multiport_cnt; /* For four-port boards w/one EEPROM */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001249 int i, irq;
1250 unsigned short sum;
1251 unsigned char *ee_data;
1252 struct net_device *dev;
1253 void __iomem *ioaddr;
1254 static int board_idx = -1;
1255 int chip_idx = ent->driver_data;
1256 const char *chip_name = tulip_tbl[chip_idx].chip_name;
1257 unsigned int eeprom_missing = 0;
1258 unsigned int force_csr0 = 0;
1259
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
1348 SET_MODULE_OWNER(dev);
1349 SET_NETDEV_DEV(dev, &pdev->dev);
1350 if (pci_resource_len (pdev, 0) < tulip_tbl[chip_idx].io_size) {
Greg Kroah-Hartman7c7459d2006-06-12 15:13:08 -07001351 printk (KERN_ERR PFX "%s: I/O region (0x%llx@0x%llx) too small, "
Linus Torvalds1da177e2005-04-16 15:20:36 -07001352 "aborting\n", pci_name(pdev),
Greg Kroah-Hartman7c7459d2006-06-12 15:13:08 -07001353 (unsigned long long)pci_resource_len (pdev, 0),
1354 (unsigned long long)pci_resource_start (pdev, 0));
Linus Torvalds1da177e2005-04-16 15:20:36 -07001355 goto err_out_free_netdev;
1356 }
1357
1358 /* grab all resources from both PIO and MMIO regions, as we
1359 * don't want anyone else messing around with our hardware */
1360 if (pci_request_regions (pdev, "tulip"))
1361 goto err_out_free_netdev;
1362
Grant Grundler7f2b1242006-09-08 11:15:39 -07001363 ioaddr = pci_iomap(pdev, TULIP_BAR, tulip_tbl[chip_idx].io_size);
1364
Linus Torvalds1da177e2005-04-16 15:20:36 -07001365 if (!ioaddr)
1366 goto err_out_free_res;
1367
Linus Torvalds1da177e2005-04-16 15:20:36 -07001368 /*
1369 * initialize private data structure 'tp'
1370 * it is zeroed and aligned in alloc_etherdev
1371 */
1372 tp = netdev_priv(dev);
David Howellsc4028952006-11-22 14:57:56 +00001373 tp->dev = dev;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001374
1375 tp->rx_ring = pci_alloc_consistent(pdev,
1376 sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
1377 sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
1378 &tp->rx_ring_dma);
1379 if (!tp->rx_ring)
1380 goto err_out_mtable;
1381 tp->tx_ring = (struct tulip_tx_desc *)(tp->rx_ring + RX_RING_SIZE);
1382 tp->tx_ring_dma = tp->rx_ring_dma + sizeof(struct tulip_rx_desc) * RX_RING_SIZE;
1383
1384 tp->chip_id = chip_idx;
1385 tp->flags = tulip_tbl[chip_idx].flags;
1386 tp->pdev = pdev;
1387 tp->base_addr = ioaddr;
Auke Kok44c10132007-06-08 15:46:36 -07001388 tp->revision = pdev->revision;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001389 tp->csr0 = csr0;
1390 spin_lock_init(&tp->lock);
1391 spin_lock_init(&tp->mii_lock);
1392 init_timer(&tp->timer);
1393 tp->timer.data = (unsigned long)dev;
1394 tp->timer.function = tulip_tbl[tp->chip_id].media_timer;
1395
David Howellsc4028952006-11-22 14:57:56 +00001396 INIT_WORK(&tp->media_work, tulip_tbl[tp->chip_id].media_task);
Francois Romieu0bb3cf72006-09-08 11:15:38 -07001397
Linus Torvalds1da177e2005-04-16 15:20:36 -07001398 dev->base_addr = (unsigned long)ioaddr;
1399
1400#ifdef CONFIG_TULIP_MWI
1401 if (!force_csr0 && (tp->flags & HAS_PCI_MWI))
1402 tulip_mwi_config (pdev, dev);
1403#else
1404 /* MWI is broken for DC21143 rev 65... */
Auke Kok44c10132007-06-08 15:46:36 -07001405 if (chip_idx == DC21143 && pdev->revision == 65)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001406 tp->csr0 &= ~MWI;
1407#endif
1408
1409 /* Stop the chip's Tx and Rx processes. */
1410 tulip_stop_rxtx(tp);
1411
1412 pci_set_master(pdev);
1413
1414#ifdef CONFIG_GSC
1415 if (pdev->subsystem_vendor == PCI_VENDOR_ID_HP) {
1416 switch (pdev->subsystem_device) {
1417 default:
1418 break;
1419 case 0x1061:
1420 case 0x1062:
1421 case 0x1063:
1422 case 0x1098:
1423 case 0x1099:
1424 case 0x10EE:
1425 tp->flags |= HAS_SWAPPED_SEEPROM | NEEDS_FAKE_MEDIA_TABLE;
1426 chip_name = "GSC DS21140 Tulip";
1427 }
1428 }
1429#endif
1430
1431 /* Clear the missed-packet counter. */
1432 ioread32(ioaddr + CSR8);
1433
1434 /* The station address ROM is read byte serially. The register must
1435 be polled, waiting for the value to be read bit serially from the
1436 EEPROM.
1437 */
1438 ee_data = tp->eeprom;
1439 sum = 0;
1440 if (chip_idx == LC82C168) {
1441 for (i = 0; i < 3; i++) {
1442 int value, boguscnt = 100000;
1443 iowrite32(0x600 | i, ioaddr + 0x98);
1444 do
1445 value = ioread32(ioaddr + CSR9);
1446 while (value < 0 && --boguscnt > 0);
1447 put_unaligned(le16_to_cpu(value), ((u16*)dev->dev_addr) + i);
1448 sum += value & 0xffff;
1449 }
1450 } else if (chip_idx == COMET) {
1451 /* No need to read the EEPROM. */
1452 put_unaligned(cpu_to_le32(ioread32(ioaddr + 0xA4)), (u32 *)dev->dev_addr);
1453 put_unaligned(cpu_to_le16(ioread32(ioaddr + 0xA8)), (u16 *)(dev->dev_addr + 4));
1454 for (i = 0; i < 6; i ++)
1455 sum += dev->dev_addr[i];
1456 } else {
1457 /* A serial EEPROM interface, we read now and sort it out later. */
1458 int sa_offset = 0;
1459 int ee_addr_size = tulip_read_eeprom(dev, 0xff, 8) & 0x40000 ? 8 : 6;
1460
1461 for (i = 0; i < sizeof(tp->eeprom); i+=2) {
1462 u16 data = tulip_read_eeprom(dev, i/2, ee_addr_size);
1463 ee_data[i] = data & 0xff;
1464 ee_data[i + 1] = data >> 8;
1465 }
1466
1467 /* DEC now has a specification (see Notes) but early board makers
1468 just put the address in the first EEPROM locations. */
1469 /* This does memcmp(ee_data, ee_data+16, 8) */
1470 for (i = 0; i < 8; i ++)
1471 if (ee_data[i] != ee_data[16+i])
1472 sa_offset = 20;
1473 if (chip_idx == CONEXANT) {
1474 /* Check that the tuple type and length is correct. */
1475 if (ee_data[0x198] == 0x04 && ee_data[0x199] == 6)
1476 sa_offset = 0x19A;
1477 } else if (ee_data[0] == 0xff && ee_data[1] == 0xff &&
1478 ee_data[2] == 0) {
1479 sa_offset = 2; /* Grrr, damn Matrox boards. */
1480 multiport_cnt = 4;
1481 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001482#ifdef CONFIG_MIPS_COBALT
Jeff Garzikf3b197a2006-05-26 21:39:03 -04001483 if ((pdev->bus->number == 0) &&
Linus Torvalds1da177e2005-04-16 15:20:36 -07001484 ((PCI_SLOT(pdev->devfn) == 7) ||
1485 (PCI_SLOT(pdev->devfn) == 12))) {
1486 /* Cobalt MAC address in first EEPROM locations. */
1487 sa_offset = 0;
Ralf Baechle12755c12005-06-26 17:45:52 -04001488 /* Ensure our media table fixup get's applied */
1489 memcpy(ee_data + 16, ee_data, 8);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001490 }
1491#endif
1492#ifdef CONFIG_GSC
1493 /* Check to see if we have a broken srom */
1494 if (ee_data[0] == 0x61 && ee_data[1] == 0x10) {
1495 /* pci_vendor_id and subsystem_id are swapped */
1496 ee_data[0] = ee_data[2];
1497 ee_data[1] = ee_data[3];
1498 ee_data[2] = 0x61;
1499 ee_data[3] = 0x10;
1500
1501 /* HSC-PCI boards need to be byte-swaped and shifted
1502 * up 1 word. This shift needs to happen at the end
1503 * of the MAC first because of the 2 byte overlap.
1504 */
1505 for (i = 4; i >= 0; i -= 2) {
1506 ee_data[17 + i + 3] = ee_data[17 + i];
1507 ee_data[16 + i + 5] = ee_data[16 + i];
1508 }
1509 }
1510#endif
1511
1512 for (i = 0; i < 6; i ++) {
1513 dev->dev_addr[i] = ee_data[i + sa_offset];
1514 sum += ee_data[i + sa_offset];
1515 }
1516 }
1517 /* Lite-On boards have the address byte-swapped. */
1518 if ((dev->dev_addr[0] == 0xA0 || dev->dev_addr[0] == 0xC0 || dev->dev_addr[0] == 0x02)
1519 && dev->dev_addr[1] == 0x00)
1520 for (i = 0; i < 6; i+=2) {
1521 char tmp = dev->dev_addr[i];
1522 dev->dev_addr[i] = dev->dev_addr[i+1];
1523 dev->dev_addr[i+1] = tmp;
1524 }
1525 /* On the Zynx 315 Etherarray and other multiport boards only the
1526 first Tulip has an EEPROM.
1527 On Sparc systems the mac address is held in the OBP property
1528 "local-mac-address".
1529 The addresses of the subsequent ports are derived from the first.
1530 Many PCI BIOSes also incorrectly report the IRQ line, so we correct
1531 that here as well. */
1532 if (sum == 0 || sum == 6*0xff) {
David S. Miller49345102007-03-29 01:39:44 -07001533#if defined(CONFIG_SPARC)
David S. Millerd297c312007-03-29 01:41:28 -07001534 struct device_node *dp = pci_device_to_OF_node(pdev);
1535 const unsigned char *addr;
1536 int len;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001537#endif
1538 eeprom_missing = 1;
1539 for (i = 0; i < 5; i++)
1540 dev->dev_addr[i] = last_phys_addr[i];
1541 dev->dev_addr[i] = last_phys_addr[i] + 1;
David S. Miller49345102007-03-29 01:39:44 -07001542#if defined(CONFIG_SPARC)
David S. Millerd297c312007-03-29 01:41:28 -07001543 addr = of_get_property(dp, "local-mac-address", &len);
1544 if (addr && len == 6)
1545 memcpy(dev->dev_addr, addr, 6);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001546#endif
Christoph Dworzakb9c4c602006-01-06 14:49:22 -05001547#if defined(__i386__) || defined(__x86_64__) /* Patch up x86 BIOS bug. */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001548 if (last_irq)
1549 irq = last_irq;
1550#endif
1551 }
1552
1553 for (i = 0; i < 6; i++)
1554 last_phys_addr[i] = dev->dev_addr[i];
1555 last_irq = irq;
1556 dev->irq = irq;
1557
1558 /* The lower four bits are the media type. */
1559 if (board_idx >= 0 && board_idx < MAX_UNITS) {
1560 if (options[board_idx] & MEDIA_MASK)
1561 tp->default_port = options[board_idx] & MEDIA_MASK;
1562 if ((options[board_idx] & FullDuplex) || full_duplex[board_idx] > 0)
1563 tp->full_duplex = 1;
1564 if (mtu[board_idx] > 0)
1565 dev->mtu = mtu[board_idx];
1566 }
1567 if (dev->mem_start & MEDIA_MASK)
1568 tp->default_port = dev->mem_start & MEDIA_MASK;
1569 if (tp->default_port) {
1570 printk(KERN_INFO "tulip%d: Transceiver selection forced to %s.\n",
1571 board_idx, medianame[tp->default_port & MEDIA_MASK]);
1572 tp->medialock = 1;
1573 if (tulip_media_cap[tp->default_port] & MediaAlwaysFD)
1574 tp->full_duplex = 1;
1575 }
1576 if (tp->full_duplex)
1577 tp->full_duplex_lock = 1;
1578
1579 if (tulip_media_cap[tp->default_port] & MediaIsMII) {
1580 u16 media2advert[] = { 0x20, 0x40, 0x03e0, 0x60, 0x80, 0x100, 0x200 };
1581 tp->mii_advertise = media2advert[tp->default_port - 9];
1582 tp->mii_advertise |= (tp->flags & HAS_8023X); /* Matching bits! */
1583 }
1584
1585 if (tp->flags & HAS_MEDIA_TABLE) {
1586 sprintf(dev->name, "tulip%d", board_idx); /* hack */
1587 tulip_parse_eeprom(dev);
1588 strcpy(dev->name, "eth%d"); /* un-hack */
1589 }
1590
1591 if ((tp->flags & ALWAYS_CHECK_MII) ||
1592 (tp->mtable && tp->mtable->has_mii) ||
1593 ( ! tp->mtable && (tp->flags & HAS_MII))) {
1594 if (tp->mtable && tp->mtable->has_mii) {
1595 for (i = 0; i < tp->mtable->leafcount; i++)
1596 if (tp->mtable->mleaf[i].media == 11) {
1597 tp->cur_index = i;
1598 tp->saved_if_port = dev->if_port;
1599 tulip_select_media(dev, 2);
1600 dev->if_port = tp->saved_if_port;
1601 break;
1602 }
1603 }
1604
1605 /* Find the connected MII xcvrs.
1606 Doing this in open() would allow detecting external xcvrs
1607 later, but takes much time. */
1608 tulip_find_mii (dev, board_idx);
1609 }
1610
1611 /* The Tulip-specific entries in the device structure. */
1612 dev->open = tulip_open;
1613 dev->hard_start_xmit = tulip_start_xmit;
1614 dev->tx_timeout = tulip_tx_timeout;
1615 dev->watchdog_timeo = TX_TIMEOUT;
1616#ifdef CONFIG_TULIP_NAPI
Stephen Hemmingerbea33482007-10-03 16:41:36 -07001617 netif_napi_add(dev, &tp->napi, tulip_poll, 16);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001618#endif
1619 dev->stop = tulip_close;
1620 dev->get_stats = tulip_get_stats;
1621 dev->do_ioctl = private_ioctl;
1622 dev->set_multicast_list = set_rx_mode;
1623#ifdef CONFIG_NET_POLL_CONTROLLER
1624 dev->poll_controller = &poll_tulip;
1625#endif
1626 SET_ETHTOOL_OPS(dev, &ops);
1627
1628 if (register_netdev(dev))
1629 goto err_out_free_ring;
1630
Grant Grundlerc69f4122006-09-08 11:15:35 -07001631 printk(KERN_INFO "%s: %s rev %d at "
1632#ifdef CONFIG_TULIP_MMIO
1633 "MMIO"
1634#else
1635 "Port"
1636#endif
Auke Kok44c10132007-06-08 15:46:36 -07001637 " %#llx,", dev->name, chip_name, pdev->revision,
Grant Grundlerc69f4122006-09-08 11:15:35 -07001638 (unsigned long long) pci_resource_start(pdev, TULIP_BAR));
Linus Torvalds1da177e2005-04-16 15:20:36 -07001639 pci_set_drvdata(pdev, dev);
1640
1641 if (eeprom_missing)
1642 printk(" EEPROM not present,");
1643 for (i = 0; i < 6; i++)
1644 printk("%c%2.2X", i ? ':' : ' ', dev->dev_addr[i]);
1645 printk(", IRQ %d.\n", irq);
1646
1647 if (tp->chip_id == PNIC2)
1648 tp->link_change = pnic2_lnk_change;
1649 else if (tp->flags & HAS_NWAY)
1650 tp->link_change = t21142_lnk_change;
1651 else if (tp->flags & HAS_PNICNWAY)
1652 tp->link_change = pnic_lnk_change;
1653
1654 /* Reset the xcvr interface and turn on heartbeat. */
1655 switch (chip_idx) {
1656 case DC21140:
1657 case DM910X:
Linus Torvalds1da177e2005-04-16 15:20:36 -07001658 default:
1659 if (tp->mtable)
1660 iowrite32(tp->mtable->csr12dir | 0x100, ioaddr + CSR12);
1661 break;
1662 case DC21142:
1663 if (tp->mii_cnt || tulip_media_cap[dev->if_port] & MediaIsMII) {
1664 iowrite32(csr6_mask_defstate, ioaddr + CSR6);
1665 iowrite32(0x0000, ioaddr + CSR13);
1666 iowrite32(0x0000, ioaddr + CSR14);
1667 iowrite32(csr6_mask_hdcap, ioaddr + CSR6);
1668 } else
1669 t21142_start_nway(dev);
1670 break;
1671 case PNIC2:
1672 /* just do a reset for sanity sake */
1673 iowrite32(0x0000, ioaddr + CSR13);
1674 iowrite32(0x0000, ioaddr + CSR14);
1675 break;
1676 case LC82C168:
1677 if ( ! tp->mii_cnt) {
1678 tp->nway = 1;
1679 tp->nwayset = 0;
1680 iowrite32(csr6_ttm | csr6_ca, ioaddr + CSR6);
1681 iowrite32(0x30, ioaddr + CSR12);
1682 iowrite32(0x0001F078, ioaddr + CSR6);
1683 iowrite32(0x0201F078, ioaddr + CSR6); /* Turn on autonegotiation. */
1684 }
1685 break;
1686 case MX98713:
1687 case COMPEX9881:
1688 iowrite32(0x00000000, ioaddr + CSR6);
1689 iowrite32(0x000711C0, ioaddr + CSR14); /* Turn on NWay. */
1690 iowrite32(0x00000001, ioaddr + CSR13);
1691 break;
1692 case MX98715:
1693 case MX98725:
1694 iowrite32(0x01a80000, ioaddr + CSR6);
1695 iowrite32(0xFFFFFFFF, ioaddr + CSR14);
1696 iowrite32(0x00001000, ioaddr + CSR12);
1697 break;
1698 case COMET:
1699 /* No initialization necessary. */
1700 break;
1701 }
1702
1703 /* put the chip in snooze mode until opened */
1704 tulip_set_power_state (tp, 0, 1);
1705
1706 return 0;
1707
1708err_out_free_ring:
1709 pci_free_consistent (pdev,
1710 sizeof (struct tulip_rx_desc) * RX_RING_SIZE +
1711 sizeof (struct tulip_tx_desc) * TX_RING_SIZE,
1712 tp->rx_ring, tp->rx_ring_dma);
1713
1714err_out_mtable:
Jesper Juhlb4558ea2005-10-28 16:53:13 -04001715 kfree (tp->mtable);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001716 pci_iounmap(pdev, ioaddr);
1717
1718err_out_free_res:
1719 pci_release_regions (pdev);
1720
1721err_out_free_netdev:
1722 free_netdev (dev);
1723 return -ENODEV;
1724}
1725
1726
1727#ifdef CONFIG_PM
1728
1729static int tulip_suspend (struct pci_dev *pdev, pm_message_t state)
1730{
1731 struct net_device *dev = pci_get_drvdata(pdev);
1732
Adam Belay1fe2cb32005-06-20 14:28:41 -07001733 if (!dev)
1734 return -EINVAL;
1735
1736 if (netif_running(dev))
1737 tulip_down(dev);
1738
1739 netif_device_detach(dev);
1740 free_irq(dev->irq, dev);
1741
1742 pci_save_state(pdev);
1743 pci_disable_device(pdev);
1744 pci_set_power_state(pdev, pci_choose_state(pdev, state));
1745
Linus Torvalds1da177e2005-04-16 15:20:36 -07001746 return 0;
1747}
1748
1749
1750static int tulip_resume(struct pci_dev *pdev)
1751{
1752 struct net_device *dev = pci_get_drvdata(pdev);
Adam Belay1fe2cb32005-06-20 14:28:41 -07001753 int retval;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001754
Adam Belay1fe2cb32005-06-20 14:28:41 -07001755 if (!dev)
1756 return -EINVAL;
1757
1758 pci_set_power_state(pdev, PCI_D0);
1759 pci_restore_state(pdev);
1760
Valerie Henson9f486ae2006-09-08 11:15:41 -07001761 if ((retval = pci_enable_device(pdev))) {
1762 printk (KERN_ERR "tulip: pci_enable_device failed in resume\n");
1763 return retval;
1764 }
Adam Belay1fe2cb32005-06-20 14:28:41 -07001765
Thomas Gleixner1fb9df52006-07-01 19:29:39 -07001766 if ((retval = request_irq(dev->irq, &tulip_interrupt, IRQF_SHARED, dev->name, dev))) {
Adam Belay1fe2cb32005-06-20 14:28:41 -07001767 printk (KERN_ERR "tulip: request_irq failed in resume\n");
1768 return retval;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001769 }
Adam Belay1fe2cb32005-06-20 14:28:41 -07001770
1771 netif_device_attach(dev);
1772
1773 if (netif_running(dev))
1774 tulip_up(dev);
1775
Linus Torvalds1da177e2005-04-16 15:20:36 -07001776 return 0;
1777}
1778
1779#endif /* CONFIG_PM */
1780
1781
1782static void __devexit tulip_remove_one (struct pci_dev *pdev)
1783{
1784 struct net_device *dev = pci_get_drvdata (pdev);
1785 struct tulip_private *tp;
1786
1787 if (!dev)
1788 return;
1789
1790 tp = netdev_priv(dev);
1791 unregister_netdev(dev);
1792 pci_free_consistent (pdev,
1793 sizeof (struct tulip_rx_desc) * RX_RING_SIZE +
1794 sizeof (struct tulip_tx_desc) * TX_RING_SIZE,
1795 tp->rx_ring, tp->rx_ring_dma);
Jesper Juhlb4558ea2005-10-28 16:53:13 -04001796 kfree (tp->mtable);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001797 pci_iounmap(pdev, tp->base_addr);
1798 free_netdev (dev);
1799 pci_release_regions (pdev);
1800 pci_set_drvdata (pdev, NULL);
1801
1802 /* pci_power_off (pdev, -1); */
1803}
1804
1805#ifdef CONFIG_NET_POLL_CONTROLLER
1806/*
1807 * Polling 'interrupt' - used by things like netconsole to send skbs
1808 * without having to re-enable interrupts. It's not called while
1809 * the interrupt routine is executing.
1810 */
1811
1812static void poll_tulip (struct net_device *dev)
1813{
1814 /* disable_irq here is not very nice, but with the lockless
1815 interrupt handler we have no other choice. */
1816 disable_irq(dev->irq);
David Howells7d12e782006-10-05 14:55:46 +01001817 tulip_interrupt (dev->irq, dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001818 enable_irq(dev->irq);
1819}
1820#endif
1821
1822static struct pci_driver tulip_driver = {
1823 .name = DRV_NAME,
1824 .id_table = tulip_pci_tbl,
1825 .probe = tulip_init_one,
1826 .remove = __devexit_p(tulip_remove_one),
1827#ifdef CONFIG_PM
1828 .suspend = tulip_suspend,
1829 .resume = tulip_resume,
1830#endif /* CONFIG_PM */
1831};
1832
1833
1834static int __init tulip_init (void)
1835{
1836#ifdef MODULE
1837 printk (KERN_INFO "%s", version);
1838#endif
1839
1840 /* copy module parms into globals */
1841 tulip_rx_copybreak = rx_copybreak;
1842 tulip_max_interrupt_work = max_interrupt_work;
1843
1844 /* probe for and init boards */
Jeff Garzik29917622006-08-19 17:48:59 -04001845 return pci_register_driver(&tulip_driver);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001846}
1847
1848
1849static void __exit tulip_cleanup (void)
1850{
1851 pci_unregister_driver (&tulip_driver);
1852}
1853
1854
1855module_init(tulip_init);
1856module_exit(tulip_cleanup);