1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#define DRV_NAME "tulip"
17#ifdef CONFIG_TULIP_NAPI
18#define DRV_VERSION "1.1.15-NAPI"
19#else
20#define DRV_VERSION "1.1.15"
21#endif
22#define DRV_RELDATE "Feb 27, 2007"
23
24
25#include <linux/module.h>
26#include <linux/pci.h>
27#include "tulip.h"
28#include <linux/init.h>
29#include <linux/etherdevice.h>
30#include <linux/delay.h>
31#include <linux/mii.h>
32#include <linux/ethtool.h>
33#include <linux/crc32.h>
34#include <asm/unaligned.h>
35#include <asm/uaccess.h>
36
37#ifdef CONFIG_SPARC
38#include <asm/prom.h>
39#endif
40
41static char version[] __devinitdata =
42 "Linux Tulip driver version " DRV_VERSION " (" DRV_RELDATE ")\n";
43
44
45
46
47
48static unsigned int max_interrupt_work = 25;
49
50#define MAX_UNITS 8
51
52static int full_duplex[MAX_UNITS];
53static int options[MAX_UNITS];
54static int mtu[MAX_UNITS];
55
56
57const char * const medianame[32] = {
58 "10baseT", "10base2", "AUI", "100baseTx",
59 "10baseT-FDX", "100baseTx-FDX", "100baseT4", "100baseFx",
60 "100baseFx-FDX", "MII 10baseT", "MII 10baseT-FDX", "MII",
61 "10baseT(forced)", "MII 100baseTx", "MII 100baseTx-FDX", "MII 100baseT4",
62 "MII 100baseFx-HDX", "MII 100baseFx-FDX", "Home-PNA 1Mbps", "Invalid-19",
63 "","","","", "","","","", "","","","Transceiver reset",
64};
65
66
67#if defined(__alpha__) || defined(__arm__) || defined(__hppa__) \
68 || defined(CONFIG_SPARC) || defined(__ia64__) \
69 || defined(__sh__) || defined(__mips__)
70static int rx_copybreak = 1518;
71#else
72static int rx_copybreak = 100;
73#endif
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88#if defined(__alpha__) || defined(__ia64__)
89static int csr0 = 0x01A00000 | 0xE000;
90#elif defined(__i386__) || defined(__powerpc__) || defined(__x86_64__)
91static int csr0 = 0x01A00000 | 0x8000;
92#elif defined(CONFIG_SPARC) || defined(__hppa__)
93
94
95
96
97static int csr0 = 0x01A00000 | 0x9000;
98#elif defined(__arm__) || defined(__sh__)
99static int csr0 = 0x01A00000 | 0x4800;
100#elif defined(__mips__)
101static int csr0 = 0x00200000 | 0x4000;
102#else
103#warning Processor architecture undefined!
104static int csr0 = 0x00A00000 | 0x4800;
105#endif
106
107
108
109#define TX_TIMEOUT (4*HZ)
110
111
112MODULE_AUTHOR("The Linux Kernel Team");
113MODULE_DESCRIPTION("Digital 21*4* Tulip ethernet driver");
114MODULE_LICENSE("GPL");
115MODULE_VERSION(DRV_VERSION);
116module_param(tulip_debug, int, 0);
117module_param(max_interrupt_work, int, 0);
118module_param(rx_copybreak, int, 0);
119module_param(csr0, int, 0);
120module_param_array(options, int, NULL, 0);
121module_param_array(full_duplex, int, NULL, 0);
122
123#define PFX DRV_NAME ": "
124
125#ifdef TULIP_DEBUG
126int tulip_debug = TULIP_DEBUG;
127#else
128int tulip_debug = 1;
129#endif
130
131static void tulip_timer(unsigned long data)
132{
133 struct net_device *dev = (struct net_device *)data;
134 struct tulip_private *tp = netdev_priv(dev);
135
136 if (netif_running(dev))
137 schedule_work(&tp->media_work);
138}
139
140
141
142
143
144
145
146struct tulip_chip_table tulip_tbl[] = {
147 { },
148 { },
149
150
151 { "Digital DS21140 Tulip", 128, 0x0001ebef,
152 HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM | HAS_PCI_MWI, tulip_timer,
153 tulip_media_task },
154
155
156 { "Digital DS21142/43 Tulip", 128, 0x0801fbff,
157 HAS_MII | HAS_MEDIA_TABLE | ALWAYS_CHECK_MII | HAS_ACPI | HAS_NWAY
158 | HAS_INTR_MITIGATION | HAS_PCI_MWI, tulip_timer, t21142_media_task },
159
160
161 { "Lite-On 82c168 PNIC", 256, 0x0001fbef,
162 HAS_MII | HAS_PNICNWAY, pnic_timer, },
163
164
165 { "Macronix 98713 PMAC", 128, 0x0001ebef,
166 HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM, mxic_timer, },
167
168
169 { "Macronix 98715 PMAC", 256, 0x0001ebef,
170 HAS_MEDIA_TABLE, mxic_timer, },
171
172
173 { "Macronix 98725 PMAC", 256, 0x0001ebef,
174 HAS_MEDIA_TABLE, mxic_timer, },
175
176
177 { "ASIX AX88140", 128, 0x0001fbff,
178 HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM | MC_HASH_ONLY
179 | IS_ASIX, tulip_timer, tulip_media_task },
180
181
182 { "Lite-On PNIC-II", 256, 0x0801fbff,
183 HAS_MII | HAS_NWAY | HAS_8023X | HAS_PCI_MWI, pnic2_timer, },
184
185
186 { "ADMtek Comet", 256, 0x0001abef,
187 HAS_MII | MC_HASH_ONLY | COMET_MAC_ADDR, comet_timer, },
188
189
190 { "Compex 9881 PMAC", 128, 0x0001ebef,
191 HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM, mxic_timer, },
192
193
194 { "Intel DS21145 Tulip", 128, 0x0801fbff,
195 HAS_MII | HAS_MEDIA_TABLE | ALWAYS_CHECK_MII | HAS_ACPI
196 | HAS_NWAY | HAS_PCI_MWI, tulip_timer, tulip_media_task },
197
198
199 { "Davicom DM9102/DM9102A", 128, 0x0001ebef,
200 HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM | HAS_ACPI,
201 tulip_timer, tulip_media_task },
202
203
204 { "Conexant LANfinity", 256, 0x0001ebef,
205 HAS_MII | HAS_ACPI, tulip_timer, tulip_media_task },
206
207};
208
209
210static struct pci_device_id tulip_pci_tbl[] = {
211 { 0x1011, 0x0009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DC21140 },
212 { 0x1011, 0x0019, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DC21143 },
213 { 0x11AD, 0x0002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, LC82C168 },
214 { 0x10d9, 0x0512, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98713 },
215 { 0x10d9, 0x0531, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98715 },
216
217 { 0x125B, 0x1400, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AX88140 },
218 { 0x11AD, 0xc115, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PNIC2 },
219 { 0x1317, 0x0981, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
220 { 0x1317, 0x0985, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
221 { 0x1317, 0x1985, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
222 { 0x1317, 0x9511, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
223 { 0x13D1, 0xAB02, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
224 { 0x13D1, 0xAB03, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
225 { 0x13D1, 0xAB08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
226 { 0x104A, 0x0981, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
227 { 0x104A, 0x2774, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
228 { 0x1259, 0xa120, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
229 { 0x11F6, 0x9881, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMPEX9881 },
230 { 0x8086, 0x0039, PCI_ANY_ID, PCI_ANY_ID, 0, 0, I21145 },
231 { 0x1282, 0x9100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DM910X },
232 { 0x1282, 0x9102, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DM910X },
233 { 0x1113, 0x1216, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
234 { 0x1113, 0x1217, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98715 },
235 { 0x1113, 0x9511, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
236 { 0x1186, 0x1541, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
237 { 0x1186, 0x1561, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
238 { 0x1186, 0x1591, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
239 { 0x14f1, 0x1803, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CONEXANT },
240 { 0x1626, 0x8410, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
241 { 0x1737, 0xAB09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
242 { 0x1737, 0xAB08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
243 { 0x17B3, 0xAB08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
244 { 0x10b7, 0x9300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
245 { 0x14ea, 0xab08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
246 { 0x1414, 0x0002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
247 { }
248};
249MODULE_DEVICE_TABLE(pci, tulip_pci_tbl);
250
251
252
253const char tulip_media_cap[32] =
254{0,0,0,16, 3,19,16,24, 27,4,7,5, 0,20,23,20, 28,31,0,0, };
255
256static void tulip_tx_timeout(struct net_device *dev);
257static void tulip_init_ring(struct net_device *dev);
258static void tulip_free_ring(struct net_device *dev);
259static int tulip_start_xmit(struct sk_buff *skb, struct net_device *dev);
260static int tulip_open(struct net_device *dev);
261static int tulip_close(struct net_device *dev);
262static void tulip_up(struct net_device *dev);
263static void tulip_down(struct net_device *dev);
264static struct net_device_stats *tulip_get_stats(struct net_device *dev);
265static int private_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
266static void set_rx_mode(struct net_device *dev);
267#ifdef CONFIG_NET_POLL_CONTROLLER
268static void poll_tulip(struct net_device *dev);
269#endif
270
271static void tulip_set_power_state (struct tulip_private *tp,
272 int sleep, int snooze)
273{
274 if (tp->flags & HAS_ACPI) {
275 u32 tmp, newtmp;
276 pci_read_config_dword (tp->pdev, CFDD, &tmp);
277 newtmp = tmp & ~(CFDD_Sleep | CFDD_Snooze);
278 if (sleep)
279 newtmp |= CFDD_Sleep;
280 else if (snooze)
281 newtmp |= CFDD_Snooze;
282 if (tmp != newtmp)
283 pci_write_config_dword (tp->pdev, CFDD, newtmp);
284 }
285
286}
287
288
289static void tulip_up(struct net_device *dev)
290{
291 struct tulip_private *tp = netdev_priv(dev);
292 void __iomem *ioaddr = tp->base_addr;
293 int next_tick = 3*HZ;
294 u32 reg;
295 int i;
296
297#ifdef CONFIG_TULIP_NAPI
298 napi_enable(&tp->napi);
299#endif
300
301
302 tulip_set_power_state (tp, 0, 0);
303
304
305 if (tp->mii_cnt || (tp->mtable && tp->mtable->has_mii))
306 iowrite32(0x00040000, ioaddr + CSR6);
307
308
309 iowrite32(0x00000001, ioaddr + CSR0);
310 pci_read_config_dword(tp->pdev, PCI_COMMAND, ®);
311 udelay(100);
312
313
314
315
316 iowrite32(tp->csr0, ioaddr + CSR0);
317 pci_read_config_dword(tp->pdev, PCI_COMMAND, ®);
318 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 = get_unaligned_le32(dev->dev_addr);
330 u32 addr_high = get_unaligned_le16(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
344 u16 *eaddrs = (u16 *)dev->dev_addr;
345 u16 *setup_frm = &tp->setup_frame[15*6];
346 dma_addr_t mapping;
347
348
349 memset(tp->setup_frame, 0xff, sizeof(tp->setup_frame));
350
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
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
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
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
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
431 tp->sym_advertise = 0x01E0;
432
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
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
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
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
473 tulip_stop_rxtx(tp);
474 barrier();
475 udelay(5);
476 iowrite32(tp->csr6 | TxOn, ioaddr + CSR6);
477
478
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);
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
491
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
506 tulip_init_ring (dev);
507
508 retval = request_irq(dev->irq, &tulip_interrupt, IRQF_SHARED, dev->name, dev);
509 if (retval)
510 goto free_ring;
511
512 tulip_up (dev);
513
514 netif_start_queue (dev);
515
516 return 0;
517
518free_ring:
519 tulip_free_ring (dev);
520 return retval;
521}
522
523
524static void tulip_tx_timeout(struct net_device *dev)
525{
526 struct tulip_private *tp = netdev_priv(dev);
527 void __iomem *ioaddr = tp->base_addr;
528 unsigned long flags;
529
530 spin_lock_irqsave (&tp->lock, flags);
531
532 if (tulip_media_cap[dev->if_port] & MediaIsMII) {
533
534 if (tulip_debug > 1)
535 printk(KERN_WARNING "%s: Transmit timeout using MII device.\n",
536 dev->name);
537 } else if (tp->chip_id == DC21140 || tp->chip_id == DC21142
538 || tp->chip_id == MX98713 || tp->chip_id == COMPEX9881
539 || tp->chip_id == DM910X) {
540 printk(KERN_WARNING "%s: 21140 transmit timed out, status %8.8x, "
541 "SIA %8.8x %8.8x %8.8x %8.8x, resetting...\n",
542 dev->name, ioread32(ioaddr + CSR5), ioread32(ioaddr + CSR12),
543 ioread32(ioaddr + CSR13), ioread32(ioaddr + CSR14), ioread32(ioaddr + CSR15));
544 tp->timeout_recovery = 1;
545 schedule_work(&tp->media_work);
546 goto out_unlock;
547 } else if (tp->chip_id == PNIC2) {
548 printk(KERN_WARNING "%s: PNIC2 transmit timed out, status %8.8x, "
549 "CSR6/7 %8.8x / %8.8x CSR12 %8.8x, resetting...\n",
550 dev->name, (int)ioread32(ioaddr + CSR5), (int)ioread32(ioaddr + CSR6),
551 (int)ioread32(ioaddr + CSR7), (int)ioread32(ioaddr + CSR12));
552 } else {
553 printk(KERN_WARNING "%s: Transmit timed out, status %8.8x, CSR12 "
554 "%8.8x, resetting...\n",
555 dev->name, ioread32(ioaddr + CSR5), ioread32(ioaddr + CSR12));
556 dev->if_port = 0;
557 }
558
559#if defined(way_too_many_messages)
560 if (tulip_debug > 3) {
561 int i;
562 for (i = 0; i < RX_RING_SIZE; i++) {
563 u8 *buf = (u8 *)(tp->rx_ring[i].buffer1);
564 int j;
565 printk(KERN_DEBUG "%2d: %8.8x %8.8x %8.8x %8.8x "
566 "%2.2x %2.2x %2.2x.\n",
567 i, (unsigned int)tp->rx_ring[i].status,
568 (unsigned int)tp->rx_ring[i].length,
569 (unsigned int)tp->rx_ring[i].buffer1,
570 (unsigned int)tp->rx_ring[i].buffer2,
571 buf[0], buf[1], buf[2]);
572 for (j = 0; buf[j] != 0xee && j < 1600; j++)
573 if (j < 100)
574 printk(KERN_CONT " %2.2x", buf[j]);
575 printk(KERN_CONT " j=%d.\n", j);
576 }
577 printk(KERN_DEBUG " Rx ring %8.8x: ", (int)tp->rx_ring);
578 for (i = 0; i < RX_RING_SIZE; i++)
579 printk(KERN_CONT " %8.8x",
580 (unsigned int)tp->rx_ring[i].status);
581 printk(KERN_DEBUG " Tx ring %8.8x: ", (int)tp->tx_ring);
582 for (i = 0; i < TX_RING_SIZE; i++)
583 printk(KERN_CONT " %8.8x", (unsigned int)tp->tx_ring[i].status);
584 printk(KERN_CONT "\n");
585 }
586#endif
587
588 tulip_tx_timeout_complete(tp, ioaddr);
589
590out_unlock:
591 spin_unlock_irqrestore (&tp->lock, flags);
592 dev->trans_start = jiffies;
593 netif_wake_queue (dev);
594}
595
596
597
598static void tulip_init_ring(struct net_device *dev)
599{
600 struct tulip_private *tp = netdev_priv(dev);
601 int i;
602
603 tp->susp_rx = 0;
604 tp->ttimer = 0;
605 tp->nir = 0;
606
607 for (i = 0; i < RX_RING_SIZE; i++) {
608 tp->rx_ring[i].status = 0x00000000;
609 tp->rx_ring[i].length = cpu_to_le32(PKT_BUF_SZ);
610 tp->rx_ring[i].buffer2 = cpu_to_le32(tp->rx_ring_dma + sizeof(struct tulip_rx_desc) * (i + 1));
611 tp->rx_buffers[i].skb = NULL;
612 tp->rx_buffers[i].mapping = 0;
613 }
614
615 tp->rx_ring[i-1].length = cpu_to_le32(PKT_BUF_SZ | DESC_RING_WRAP);
616 tp->rx_ring[i-1].buffer2 = cpu_to_le32(tp->rx_ring_dma);
617
618 for (i = 0; i < RX_RING_SIZE; i++) {
619 dma_addr_t mapping;
620
621
622
623
624 struct sk_buff *skb = dev_alloc_skb(PKT_BUF_SZ);
625 tp->rx_buffers[i].skb = skb;
626 if (skb == NULL)
627 break;
628 mapping = pci_map_single(tp->pdev, skb->data,
629 PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
630 tp->rx_buffers[i].mapping = mapping;
631 skb->dev = dev;
632 tp->rx_ring[i].status = cpu_to_le32(DescOwned);
633 tp->rx_ring[i].buffer1 = cpu_to_le32(mapping);
634 }
635 tp->dirty_rx = (unsigned int)(i - RX_RING_SIZE);
636
637
638
639 for (i = 0; i < TX_RING_SIZE; i++) {
640 tp->tx_buffers[i].skb = NULL;
641 tp->tx_buffers[i].mapping = 0;
642 tp->tx_ring[i].status = 0x00000000;
643 tp->tx_ring[i].buffer2 = cpu_to_le32(tp->tx_ring_dma + sizeof(struct tulip_tx_desc) * (i + 1));
644 }
645 tp->tx_ring[i-1].buffer2 = cpu_to_le32(tp->tx_ring_dma);
646}
647
648static int
649tulip_start_xmit(struct sk_buff *skb, struct net_device *dev)
650{
651 struct tulip_private *tp = netdev_priv(dev);
652 int entry;
653 u32 flag;
654 dma_addr_t mapping;
655 unsigned long flags;
656
657 spin_lock_irqsave(&tp->lock, flags);
658
659
660 entry = tp->cur_tx % TX_RING_SIZE;
661
662 tp->tx_buffers[entry].skb = skb;
663 mapping = pci_map_single(tp->pdev, skb->data,
664 skb->len, PCI_DMA_TODEVICE);
665 tp->tx_buffers[entry].mapping = mapping;
666 tp->tx_ring[entry].buffer1 = cpu_to_le32(mapping);
667
668 if (tp->cur_tx - tp->dirty_tx < TX_RING_SIZE/2) {
669 flag = 0x60000000;
670 } else if (tp->cur_tx - tp->dirty_tx == TX_RING_SIZE/2) {
671 flag = 0xe0000000;
672 } else if (tp->cur_tx - tp->dirty_tx < TX_RING_SIZE - 2) {
673 flag = 0x60000000;
674 } else {
675 flag = 0xe0000000;
676 netif_stop_queue(dev);
677 }
678 if (entry == TX_RING_SIZE-1)
679 flag = 0xe0000000 | DESC_RING_WRAP;
680
681 tp->tx_ring[entry].length = cpu_to_le32(skb->len | flag);
682
683
684 tp->tx_ring[entry].status = cpu_to_le32(DescOwned);
685 wmb();
686
687 tp->cur_tx++;
688
689
690 iowrite32(0, tp->base_addr + CSR1);
691
692 spin_unlock_irqrestore(&tp->lock, flags);
693
694 dev->trans_start = jiffies;
695
696 return 0;
697}
698
699static void tulip_clean_tx_ring(struct tulip_private *tp)
700{
701 unsigned int dirty_tx;
702
703 for (dirty_tx = tp->dirty_tx ; tp->cur_tx - dirty_tx > 0;
704 dirty_tx++) {
705 int entry = dirty_tx % TX_RING_SIZE;
706 int status = le32_to_cpu(tp->tx_ring[entry].status);
707
708 if (status < 0) {
709 tp->stats.tx_errors++;
710 tp->tx_ring[entry].status = 0;
711 }
712
713
714 if (tp->tx_buffers[entry].skb == NULL) {
715
716 if (tp->tx_buffers[entry].mapping)
717 pci_unmap_single(tp->pdev,
718 tp->tx_buffers[entry].mapping,
719 sizeof(tp->setup_frame),
720 PCI_DMA_TODEVICE);
721 continue;
722 }
723
724 pci_unmap_single(tp->pdev, tp->tx_buffers[entry].mapping,
725 tp->tx_buffers[entry].skb->len,
726 PCI_DMA_TODEVICE);
727
728
729 dev_kfree_skb_irq(tp->tx_buffers[entry].skb);
730 tp->tx_buffers[entry].skb = NULL;
731 tp->tx_buffers[entry].mapping = 0;
732 }
733}
734
735static void tulip_down (struct net_device *dev)
736{
737 struct tulip_private *tp = netdev_priv(dev);
738 void __iomem *ioaddr = tp->base_addr;
739 unsigned long flags;
740
741 cancel_work_sync(&tp->media_work);
742
743#ifdef CONFIG_TULIP_NAPI
744 napi_disable(&tp->napi);
745#endif
746
747 del_timer_sync (&tp->timer);
748#ifdef CONFIG_TULIP_NAPI
749 del_timer_sync (&tp->oom_timer);
750#endif
751 spin_lock_irqsave (&tp->lock, flags);
752
753
754 iowrite32 (0x00000000, ioaddr + CSR7);
755
756
757 tulip_stop_rxtx(tp);
758
759
760 tulip_refill_rx(dev);
761
762
763 tulip_clean_tx_ring(tp);
764
765 if (ioread32 (ioaddr + CSR6) != 0xffffffff)
766 tp->stats.rx_missed_errors += ioread32 (ioaddr + CSR8) & 0xffff;
767
768 spin_unlock_irqrestore (&tp->lock, flags);
769
770 init_timer(&tp->timer);
771 tp->timer.data = (unsigned long)dev;
772 tp->timer.function = tulip_tbl[tp->chip_id].media_timer;
773
774 dev->if_port = tp->saved_if_port;
775
776
777 tulip_set_power_state (tp, 0, 1);
778}
779
780static void tulip_free_ring (struct net_device *dev)
781{
782 struct tulip_private *tp = netdev_priv(dev);
783 int i;
784
785
786 for (i = 0; i < RX_RING_SIZE; i++) {
787 struct sk_buff *skb = tp->rx_buffers[i].skb;
788 dma_addr_t mapping = tp->rx_buffers[i].mapping;
789
790 tp->rx_buffers[i].skb = NULL;
791 tp->rx_buffers[i].mapping = 0;
792
793 tp->rx_ring[i].status = 0;
794 tp->rx_ring[i].length = 0;
795
796 tp->rx_ring[i].buffer1 = cpu_to_le32(0xBADF00D0);
797 if (skb) {
798 pci_unmap_single(tp->pdev, mapping, PKT_BUF_SZ,
799 PCI_DMA_FROMDEVICE);
800 dev_kfree_skb (skb);
801 }
802 }
803
804 for (i = 0; i < TX_RING_SIZE; i++) {
805 struct sk_buff *skb = tp->tx_buffers[i].skb;
806
807 if (skb != NULL) {
808 pci_unmap_single(tp->pdev, tp->tx_buffers[i].mapping,
809 skb->len, PCI_DMA_TODEVICE);
810 dev_kfree_skb (skb);
811 }
812 tp->tx_buffers[i].skb = NULL;
813 tp->tx_buffers[i].mapping = 0;
814 }
815}
816
817static int tulip_close (struct net_device *dev)
818{
819 struct tulip_private *tp = netdev_priv(dev);
820 void __iomem *ioaddr = tp->base_addr;
821
822 netif_stop_queue (dev);
823
824 tulip_down (dev);
825
826 if (tulip_debug > 1)
827 printk (KERN_DEBUG "%s: Shutting down ethercard, status was %2.2x.\n",
828 dev->name, ioread32 (ioaddr + CSR5));
829
830 free_irq (dev->irq, dev);
831
832 tulip_free_ring (dev);
833
834 return 0;
835}
836
837static struct net_device_stats *tulip_get_stats(struct net_device *dev)
838{
839 struct tulip_private *tp = netdev_priv(dev);
840 void __iomem *ioaddr = tp->base_addr;
841
842 if (netif_running(dev)) {
843 unsigned long flags;
844
845 spin_lock_irqsave (&tp->lock, flags);
846
847 tp->stats.rx_missed_errors += ioread32(ioaddr + CSR8) & 0xffff;
848
849 spin_unlock_irqrestore(&tp->lock, flags);
850 }
851
852 return &tp->stats;
853}
854
855
856static void tulip_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
857{
858 struct tulip_private *np = netdev_priv(dev);
859 strcpy(info->driver, DRV_NAME);
860 strcpy(info->version, DRV_VERSION);
861 strcpy(info->bus_info, pci_name(np->pdev));
862}
863
864static const struct ethtool_ops ops = {
865 .get_drvinfo = tulip_get_drvinfo
866};
867
868
869static int private_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
870{
871 struct tulip_private *tp = netdev_priv(dev);
872 void __iomem *ioaddr = tp->base_addr;
873 struct mii_ioctl_data *data = if_mii(rq);
874 const unsigned int phy_idx = 0;
875 int phy = tp->phys[phy_idx] & 0x1f;
876 unsigned int regnum = data->reg_num;
877
878 switch (cmd) {
879 case SIOCGMIIPHY:
880 if (tp->mii_cnt)
881 data->phy_id = phy;
882 else if (tp->flags & HAS_NWAY)
883 data->phy_id = 32;
884 else if (tp->chip_id == COMET)
885 data->phy_id = 1;
886 else
887 return -ENODEV;
888
889 case SIOCGMIIREG:
890 if (data->phy_id == 32 && (tp->flags & HAS_NWAY)) {
891 int csr12 = ioread32 (ioaddr + CSR12);
892 int csr14 = ioread32 (ioaddr + CSR14);
893 switch (regnum) {
894 case 0:
895 if (((csr14<<5) & 0x1000) ||
896 (dev->if_port == 5 && tp->nwayset))
897 data->val_out = 0x1000;
898 else
899 data->val_out = (tulip_media_cap[dev->if_port]&MediaIs100 ? 0x2000 : 0)
900 | (tulip_media_cap[dev->if_port]&MediaIsFD ? 0x0100 : 0);
901 break;
902 case 1:
903 data->val_out =
904 0x1848 +
905 ((csr12&0x7000) == 0x5000 ? 0x20 : 0) +
906 ((csr12&0x06) == 6 ? 0 : 4);
907 data->val_out |= 0x6048;
908 break;
909 case 4:
910
911 data->val_out =
912 ((ioread32(ioaddr + CSR6) >> 3) & 0x0040) +
913 ((csr14 >> 1) & 0x20) + 1;
914 data->val_out |= ((csr14 >> 9) & 0x03C0);
915 break;
916 case 5: data->val_out = tp->lpar; break;
917 default: data->val_out = 0; break;
918 }
919 } else {
920 data->val_out = tulip_mdio_read (dev, data->phy_id & 0x1f, regnum);
921 }
922 return 0;
923
924 case SIOCSMIIREG:
925 if (!capable (CAP_NET_ADMIN))
926 return -EPERM;
927 if (regnum & ~0x1f)
928 return -EINVAL;
929 if (data->phy_id == phy) {
930 u16 value = data->val_in;
931 switch (regnum) {
932 case 0:
933 tp->full_duplex_lock = (value & 0x9000) ? 0 : 1;
934 if (tp->full_duplex_lock)
935 tp->full_duplex = (value & 0x0100) ? 1 : 0;
936 break;
937 case 4:
938 tp->advertising[phy_idx] =
939 tp->mii_advertise = data->val_in;
940 break;
941 }
942 }
943 if (data->phy_id == 32 && (tp->flags & HAS_NWAY)) {
944 u16 value = data->val_in;
945 if (regnum == 0) {
946 if ((value & 0x1200) == 0x1200) {
947 if (tp->chip_id == PNIC2) {
948 pnic2_start_nway (dev);
949 } else {
950 t21142_start_nway (dev);
951 }
952 }
953 } else if (regnum == 4)
954 tp->sym_advertise = value;
955 } else {
956 tulip_mdio_write (dev, data->phy_id & 0x1f, regnum, data->val_in);
957 }
958 return 0;
959 default:
960 return -EOPNOTSUPP;
961 }
962
963 return -EOPNOTSUPP;
964}
965
966
967
968
969
970
971
972#undef set_bit_le
973#define set_bit_le(i,p) do { ((char *)(p))[(i)/8] |= (1<<((i)%8)); } while(0)
974
975static void build_setup_frame_hash(u16 *setup_frm, struct net_device *dev)
976{
977 struct tulip_private *tp = netdev_priv(dev);
978 u16 hash_table[32];
979 struct dev_mc_list *mclist;
980 int i;
981 u16 *eaddrs;
982
983 memset(hash_table, 0, sizeof(hash_table));
984 set_bit_le(255, hash_table);
985
986 for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
987 i++, mclist = mclist->next) {
988 int index = ether_crc_le(ETH_ALEN, mclist->dmi_addr) & 0x1ff;
989
990 set_bit_le(index, hash_table);
991
992 }
993 for (i = 0; i < 32; i++) {
994 *setup_frm++ = hash_table[i];
995 *setup_frm++ = hash_table[i];
996 }
997 setup_frm = &tp->setup_frame[13*6];
998
999
1000 eaddrs = (u16 *)dev->dev_addr;
1001 *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
1002 *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
1003 *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
1004}
1005
1006static void build_setup_frame_perfect(u16 *setup_frm, struct net_device *dev)
1007{
1008 struct tulip_private *tp = netdev_priv(dev);
1009 struct dev_mc_list *mclist;
1010 int i;
1011 u16 *eaddrs;
1012
1013
1014
1015 for (i = 0, mclist = dev->mc_list; i < dev->mc_count;
1016 i++, mclist = mclist->next) {
1017 eaddrs = (u16 *)mclist->dmi_addr;
1018 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
1019 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
1020 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
1021 }
1022
1023 memset(setup_frm, 0xff, (15-i)*12);
1024 setup_frm = &tp->setup_frame[15*6];
1025
1026
1027 eaddrs = (u16 *)dev->dev_addr;
1028 *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
1029 *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
1030 *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
1031}
1032
1033
1034static void set_rx_mode(struct net_device *dev)
1035{
1036 struct tulip_private *tp = netdev_priv(dev);
1037 void __iomem *ioaddr = tp->base_addr;
1038 int csr6;
1039
1040 csr6 = ioread32(ioaddr + CSR6) & ~0x00D5;
1041
1042 tp->csr6 &= ~0x00D5;
1043 if (dev->flags & IFF_PROMISC) {
1044 tp->csr6 |= AcceptAllMulticast | AcceptAllPhys;
1045 csr6 |= AcceptAllMulticast | AcceptAllPhys;
1046 } else if ((dev->mc_count > 1000) || (dev->flags & IFF_ALLMULTI)) {
1047
1048 tp->csr6 |= AcceptAllMulticast;
1049 csr6 |= AcceptAllMulticast;
1050 } else if (tp->flags & MC_HASH_ONLY) {
1051
1052
1053 struct dev_mc_list *mclist;
1054 int i;
1055 if (dev->mc_count > 64) {
1056 tp->csr6 |= AcceptAllMulticast;
1057 csr6 |= AcceptAllMulticast;
1058 } else {
1059 u32 mc_filter[2] = {0, 0};
1060 int filterbit;
1061 for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
1062 i++, mclist = mclist->next) {
1063 if (tp->flags & COMET_MAC_ADDR)
1064 filterbit = ether_crc_le(ETH_ALEN, mclist->dmi_addr);
1065 else
1066 filterbit = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26;
1067 filterbit &= 0x3f;
1068 mc_filter[filterbit >> 5] |= 1 << (filterbit & 31);
1069 if (tulip_debug > 2)
1070 printk(KERN_INFO "%s: Added filter for %pM"
1071 " %8.8x bit %d.\n",
1072 dev->name, mclist->dmi_addr,
1073 ether_crc(ETH_ALEN, mclist->dmi_addr), filterbit);
1074 }
1075 if (mc_filter[0] == tp->mc_filter[0] &&
1076 mc_filter[1] == tp->mc_filter[1])
1077 ;
1078 else if (tp->flags & IS_ASIX) {
1079 iowrite32(2, ioaddr + CSR13);
1080 iowrite32(mc_filter[0], ioaddr + CSR14);
1081 iowrite32(3, ioaddr + CSR13);
1082 iowrite32(mc_filter[1], ioaddr + CSR14);
1083 } else if (tp->flags & COMET_MAC_ADDR) {
1084 iowrite32(mc_filter[0], ioaddr + 0xAC);
1085 iowrite32(mc_filter[1], ioaddr + 0xB0);
1086 }
1087 tp->mc_filter[0] = mc_filter[0];
1088 tp->mc_filter[1] = mc_filter[1];
1089 }
1090 } else {
1091 unsigned long flags;
1092 u32 tx_flags = 0x08000000 | 192;
1093
1094
1095
1096 if (dev->mc_count > 14) {
1097 build_setup_frame_hash(tp->setup_frame, dev);
1098 tx_flags = 0x08400000 | 192;
1099 } else {
1100 build_setup_frame_perfect(tp->setup_frame, dev);
1101 }
1102
1103 spin_lock_irqsave(&tp->lock, flags);
1104
1105 if (tp->cur_tx - tp->dirty_tx > TX_RING_SIZE - 2) {
1106
1107 } else {
1108 unsigned int entry;
1109 int dummy = -1;
1110
1111
1112
1113 entry = tp->cur_tx++ % TX_RING_SIZE;
1114
1115 if (entry != 0) {
1116
1117 tp->tx_buffers[entry].skb = NULL;
1118 tp->tx_buffers[entry].mapping = 0;
1119 tp->tx_ring[entry].length =
1120 (entry == TX_RING_SIZE-1) ? cpu_to_le32(DESC_RING_WRAP) : 0;
1121 tp->tx_ring[entry].buffer1 = 0;
1122
1123 dummy = entry;
1124 entry = tp->cur_tx++ % TX_RING_SIZE;
1125
1126 }
1127
1128 tp->tx_buffers[entry].skb = NULL;
1129 tp->tx_buffers[entry].mapping =
1130 pci_map_single(tp->pdev, tp->setup_frame,
1131 sizeof(tp->setup_frame),
1132 PCI_DMA_TODEVICE);
1133
1134 if (entry == TX_RING_SIZE-1)
1135 tx_flags |= DESC_RING_WRAP;
1136 tp->tx_ring[entry].length = cpu_to_le32(tx_flags);
1137 tp->tx_ring[entry].buffer1 =
1138 cpu_to_le32(tp->tx_buffers[entry].mapping);
1139 tp->tx_ring[entry].status = cpu_to_le32(DescOwned);
1140 if (dummy >= 0)
1141 tp->tx_ring[dummy].status = cpu_to_le32(DescOwned);
1142 if (tp->cur_tx - tp->dirty_tx >= TX_RING_SIZE - 2)
1143 netif_stop_queue(dev);
1144
1145
1146 iowrite32(0, ioaddr + CSR1);
1147 }
1148
1149 spin_unlock_irqrestore(&tp->lock, flags);
1150 }
1151
1152 iowrite32(csr6, ioaddr + CSR6);
1153}
1154
1155#ifdef CONFIG_TULIP_MWI
1156static void __devinit tulip_mwi_config (struct pci_dev *pdev,
1157 struct net_device *dev)
1158{
1159 struct tulip_private *tp = netdev_priv(dev);
1160 u8 cache;
1161 u16 pci_command;
1162 u32 csr0;
1163
1164 if (tulip_debug > 3)
1165 printk(KERN_DEBUG "%s: tulip_mwi_config()\n", pci_name(pdev));
1166
1167 tp->csr0 = csr0 = 0;
1168
1169
1170 csr0 |= MRM | MWI;
1171
1172
1173
1174
1175 pci_try_set_mwi(pdev);
1176
1177
1178 pci_read_config_word(pdev, PCI_COMMAND, &pci_command);
1179 if ((csr0 & MWI) && (!(pci_command & PCI_COMMAND_INVALIDATE)))
1180 csr0 &= ~MWI;
1181
1182
1183 pci_read_config_byte(pdev, PCI_CACHE_LINE_SIZE, &cache);
1184 if ((csr0 & MWI) && (cache == 0)) {
1185 csr0 &= ~MWI;
1186 pci_clear_mwi(pdev);
1187 }
1188
1189
1190
1191
1192 switch (cache) {
1193 case 8:
1194 csr0 |= MRL | (1 << CALShift) | (16 << BurstLenShift);
1195 break;
1196 case 16:
1197 csr0 |= MRL | (2 << CALShift) | (16 << BurstLenShift);
1198 break;
1199 case 32:
1200 csr0 |= MRL | (3 << CALShift) | (32 << BurstLenShift);
1201 break;
1202 default:
1203 cache = 0;
1204 break;
1205 }
1206
1207
1208
1209
1210 if (cache)
1211 goto out;
1212
1213
1214 if (csr0 & MWI) {
1215 pci_clear_mwi(pdev);
1216 csr0 &= ~MWI;
1217 }
1218
1219
1220
1221
1222 csr0 |= (8 << BurstLenShift) | (1 << CALShift);
1223
1224out:
1225 tp->csr0 = csr0;
1226 if (tulip_debug > 2)
1227 printk(KERN_DEBUG "%s: MWI config cacheline=%d, csr0=%08x\n",
1228 pci_name(pdev), cache, csr0);
1229}
1230#endif
1231
1232
1233
1234
1235
1236
1237static int tulip_uli_dm_quirk(struct pci_dev *pdev)
1238{
1239 if (pdev->vendor == 0x1282 && pdev->device == 0x9102)
1240 return 1;
1241 return 0;
1242}
1243
1244static const struct net_device_ops tulip_netdev_ops = {
1245 .ndo_open = tulip_open,
1246 .ndo_start_xmit = tulip_start_xmit,
1247 .ndo_tx_timeout = tulip_tx_timeout,
1248 .ndo_stop = tulip_close,
1249 .ndo_get_stats = tulip_get_stats,
1250 .ndo_do_ioctl = private_ioctl,
1251 .ndo_set_multicast_list = set_rx_mode,
1252 .ndo_change_mtu = eth_change_mtu,
1253 .ndo_set_mac_address = eth_mac_addr,
1254 .ndo_validate_addr = eth_validate_addr,
1255#ifdef CONFIG_NET_POLL_CONTROLLER
1256 .ndo_poll_controller = poll_tulip,
1257#endif
1258};
1259
1260static int __devinit tulip_init_one (struct pci_dev *pdev,
1261 const struct pci_device_id *ent)
1262{
1263 struct tulip_private *tp;
1264
1265 static unsigned char last_phys_addr[6] = {0x00, 'L', 'i', 'n', 'u', 'x'};
1266 static struct pci_device_id early_486_chipsets[] = {
1267 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82424) },
1268 { PCI_DEVICE(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_496) },
1269 { },
1270 };
1271 static int last_irq;
1272 static int multiport_cnt;
1273 int i, irq;
1274 unsigned short sum;
1275 unsigned char *ee_data;
1276 struct net_device *dev;
1277 void __iomem *ioaddr;
1278 static int board_idx = -1;
1279 int chip_idx = ent->driver_data;
1280 const char *chip_name = tulip_tbl[chip_idx].chip_name;
1281 unsigned int eeprom_missing = 0;
1282 unsigned int force_csr0 = 0;
1283
1284#ifndef MODULE
1285 static int did_version;
1286 if (tulip_debug > 0 && did_version++ == 0)
1287 printk (KERN_INFO "%s", version);
1288#endif
1289
1290 board_idx++;
1291
1292
1293
1294
1295
1296
1297 if (pdev->subsystem_vendor == PCI_VENDOR_ID_LMC) {
1298 printk (KERN_ERR PFX "skipping LMC card.\n");
1299 return -ENODEV;
1300 }
1301
1302
1303
1304
1305
1306 if (pdev->vendor == 0x1282 && pdev->device == 0x9100)
1307 {
1308
1309 if (pdev->revision < 0x30)
1310 {
1311 printk(KERN_ERR PFX "skipping early DM9100 with Crc bug (use dmfe)\n");
1312 return -ENODEV;
1313 }
1314 }
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329 if (pci_dev_present(early_486_chipsets)) {
1330 csr0 = MRL | MRM | (8 << BurstLenShift) | (1 << CALShift);
1331 force_csr0 = 1;
1332 }
1333
1334
1335 if (chip_idx == AX88140) {
1336 if ((csr0 & 0x3f00) == 0)
1337 csr0 |= 0x2000;
1338 }
1339
1340
1341 if (chip_idx == LC82C168)
1342 csr0 &= ~0xfff10000;
1343
1344
1345 if (tulip_uli_dm_quirk(pdev)) {
1346 csr0 &= ~0x01f100ff;
1347#if defined(CONFIG_SPARC)
1348 csr0 = (csr0 & ~0xff00) | 0xe000;
1349#endif
1350 }
1351
1352
1353
1354
1355 i = pci_enable_device(pdev);
1356 if (i) {
1357 printk (KERN_ERR PFX
1358 "Cannot enable tulip board #%d, aborting\n",
1359 board_idx);
1360 return i;
1361 }
1362
1363 irq = pdev->irq;
1364
1365
1366 dev = alloc_etherdev (sizeof (*tp));
1367 if (!dev) {
1368 printk (KERN_ERR PFX "ether device alloc failed, aborting\n");
1369 return -ENOMEM;
1370 }
1371
1372 SET_NETDEV_DEV(dev, &pdev->dev);
1373 if (pci_resource_len (pdev, 0) < tulip_tbl[chip_idx].io_size) {
1374 printk (KERN_ERR PFX "%s: I/O region (0x%llx@0x%llx) too small, "
1375 "aborting\n", pci_name(pdev),
1376 (unsigned long long)pci_resource_len (pdev, 0),
1377 (unsigned long long)pci_resource_start (pdev, 0));
1378 goto err_out_free_netdev;
1379 }
1380
1381
1382
1383 if (pci_request_regions (pdev, "tulip"))
1384 goto err_out_free_netdev;
1385
1386 ioaddr = pci_iomap(pdev, TULIP_BAR, tulip_tbl[chip_idx].io_size);
1387
1388 if (!ioaddr)
1389 goto err_out_free_res;
1390
1391
1392
1393
1394
1395 tp = netdev_priv(dev);
1396 tp->dev = dev;
1397
1398 tp->rx_ring = pci_alloc_consistent(pdev,
1399 sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
1400 sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
1401 &tp->rx_ring_dma);
1402 if (!tp->rx_ring)
1403 goto err_out_mtable;
1404 tp->tx_ring = (struct tulip_tx_desc *)(tp->rx_ring + RX_RING_SIZE);
1405 tp->tx_ring_dma = tp->rx_ring_dma + sizeof(struct tulip_rx_desc) * RX_RING_SIZE;
1406
1407 tp->chip_id = chip_idx;
1408 tp->flags = tulip_tbl[chip_idx].flags;
1409 tp->pdev = pdev;
1410 tp->base_addr = ioaddr;
1411 tp->revision = pdev->revision;
1412 tp->csr0 = csr0;
1413 spin_lock_init(&tp->lock);
1414 spin_lock_init(&tp->mii_lock);
1415 init_timer(&tp->timer);
1416 tp->timer.data = (unsigned long)dev;
1417 tp->timer.function = tulip_tbl[tp->chip_id].media_timer;
1418
1419 INIT_WORK(&tp->media_work, tulip_tbl[tp->chip_id].media_task);
1420
1421 dev->base_addr = (unsigned long)ioaddr;
1422
1423#ifdef CONFIG_TULIP_MWI
1424 if (!force_csr0 && (tp->flags & HAS_PCI_MWI))
1425 tulip_mwi_config (pdev, dev);
1426#endif
1427
1428
1429 tulip_stop_rxtx(tp);
1430
1431 pci_set_master(pdev);
1432
1433#ifdef CONFIG_GSC
1434 if (pdev->subsystem_vendor == PCI_VENDOR_ID_HP) {
1435 switch (pdev->subsystem_device) {
1436 default:
1437 break;
1438 case 0x1061:
1439 case 0x1062:
1440 case 0x1063:
1441 case 0x1098:
1442 case 0x1099:
1443 case 0x10EE:
1444 tp->flags |= HAS_SWAPPED_SEEPROM | NEEDS_FAKE_MEDIA_TABLE;
1445 chip_name = "GSC DS21140 Tulip";
1446 }
1447 }
1448#endif
1449
1450
1451 ioread32(ioaddr + CSR8);
1452
1453
1454
1455
1456
1457 ee_data = tp->eeprom;
1458 memset(ee_data, 0, sizeof(tp->eeprom));
1459 sum = 0;
1460 if (chip_idx == LC82C168) {
1461 for (i = 0; i < 3; i++) {
1462 int value, boguscnt = 100000;
1463 iowrite32(0x600 | i, ioaddr + 0x98);
1464 do {
1465 value = ioread32(ioaddr + CSR9);
1466 } while (value < 0 && --boguscnt > 0);
1467 put_unaligned_le16(value, ((__le16 *)dev->dev_addr) + i);
1468 sum += value & 0xffff;
1469 }
1470 } else if (chip_idx == COMET) {
1471
1472 put_unaligned_le32(ioread32(ioaddr + 0xA4), dev->dev_addr);
1473 put_unaligned_le16(ioread32(ioaddr + 0xA8), dev->dev_addr + 4);
1474 for (i = 0; i < 6; i ++)
1475 sum += dev->dev_addr[i];
1476 } else {
1477
1478 int sa_offset = 0;
1479 int ee_addr_size = tulip_read_eeprom(dev, 0xff, 8) & 0x40000 ? 8 : 6;
1480 int ee_max_addr = ((1 << ee_addr_size) - 1) * sizeof(u16);
1481
1482 if (ee_max_addr > sizeof(tp->eeprom))
1483 ee_max_addr = sizeof(tp->eeprom);
1484
1485 for (i = 0; i < ee_max_addr ; i += sizeof(u16)) {
1486 u16 data = tulip_read_eeprom(dev, i/2, ee_addr_size);
1487 ee_data[i] = data & 0xff;
1488 ee_data[i + 1] = data >> 8;
1489 }
1490
1491
1492
1493
1494 for (i = 0; i < 8; i ++)
1495 if (ee_data[i] != ee_data[16+i])
1496 sa_offset = 20;
1497 if (chip_idx == CONEXANT) {
1498
1499 if (ee_data[0x198] == 0x04 && ee_data[0x199] == 6)
1500 sa_offset = 0x19A;
1501 } else if (ee_data[0] == 0xff && ee_data[1] == 0xff &&
1502 ee_data[2] == 0) {
1503 sa_offset = 2;
1504 multiport_cnt = 4;
1505 }
1506#ifdef CONFIG_MIPS_COBALT
1507 if ((pdev->bus->number == 0) &&
1508 ((PCI_SLOT(pdev->devfn) == 7) ||
1509 (PCI_SLOT(pdev->devfn) == 12))) {
1510
1511 sa_offset = 0;
1512
1513 memcpy(ee_data + 16, ee_data, 8);
1514 }
1515#endif
1516#ifdef CONFIG_GSC
1517
1518 if (ee_data[0] == 0x61 && ee_data[1] == 0x10) {
1519
1520 ee_data[0] = ee_data[2];
1521 ee_data[1] = ee_data[3];
1522 ee_data[2] = 0x61;
1523 ee_data[3] = 0x10;
1524
1525
1526
1527
1528
1529 for (i = 4; i >= 0; i -= 2) {
1530 ee_data[17 + i + 3] = ee_data[17 + i];
1531 ee_data[16 + i + 5] = ee_data[16 + i];
1532 }
1533 }
1534#endif
1535
1536 for (i = 0; i < 6; i ++) {
1537 dev->dev_addr[i] = ee_data[i + sa_offset];
1538 sum += ee_data[i + sa_offset];
1539 }
1540 }
1541
1542 if ((dev->dev_addr[0] == 0xA0 || dev->dev_addr[0] == 0xC0 || dev->dev_addr[0] == 0x02)
1543 && dev->dev_addr[1] == 0x00)
1544 for (i = 0; i < 6; i+=2) {
1545 char tmp = dev->dev_addr[i];
1546 dev->dev_addr[i] = dev->dev_addr[i+1];
1547 dev->dev_addr[i+1] = tmp;
1548 }
1549
1550
1551
1552
1553
1554
1555
1556 if (sum == 0 || sum == 6*0xff) {
1557#if defined(CONFIG_SPARC)
1558 struct device_node *dp = pci_device_to_OF_node(pdev);
1559 const unsigned char *addr;
1560 int len;
1561#endif
1562 eeprom_missing = 1;
1563 for (i = 0; i < 5; i++)
1564 dev->dev_addr[i] = last_phys_addr[i];
1565 dev->dev_addr[i] = last_phys_addr[i] + 1;
1566#if defined(CONFIG_SPARC)
1567 addr = of_get_property(dp, "local-mac-address", &len);
1568 if (addr && len == 6)
1569 memcpy(dev->dev_addr, addr, 6);
1570#endif
1571#if defined(__i386__) || defined(__x86_64__)
1572 if (last_irq)
1573 irq = last_irq;
1574#endif
1575 }
1576
1577 for (i = 0; i < 6; i++)
1578 last_phys_addr[i] = dev->dev_addr[i];
1579 last_irq = irq;
1580 dev->irq = irq;
1581
1582
1583 if (board_idx >= 0 && board_idx < MAX_UNITS) {
1584 if (options[board_idx] & MEDIA_MASK)
1585 tp->default_port = options[board_idx] & MEDIA_MASK;
1586 if ((options[board_idx] & FullDuplex) || full_duplex[board_idx] > 0)
1587 tp->full_duplex = 1;
1588 if (mtu[board_idx] > 0)
1589 dev->mtu = mtu[board_idx];
1590 }
1591 if (dev->mem_start & MEDIA_MASK)
1592 tp->default_port = dev->mem_start & MEDIA_MASK;
1593 if (tp->default_port) {
1594 printk(KERN_INFO "tulip%d: Transceiver selection forced to %s.\n",
1595 board_idx, medianame[tp->default_port & MEDIA_MASK]);
1596 tp->medialock = 1;
1597 if (tulip_media_cap[tp->default_port] & MediaAlwaysFD)
1598 tp->full_duplex = 1;
1599 }
1600 if (tp->full_duplex)
1601 tp->full_duplex_lock = 1;
1602
1603 if (tulip_media_cap[tp->default_port] & MediaIsMII) {
1604 u16 media2advert[] = { 0x20, 0x40, 0x03e0, 0x60, 0x80, 0x100, 0x200 };
1605 tp->mii_advertise = media2advert[tp->default_port - 9];
1606 tp->mii_advertise |= (tp->flags & HAS_8023X);
1607 }
1608
1609 if (tp->flags & HAS_MEDIA_TABLE) {
1610 sprintf(dev->name, "tulip%d", board_idx);
1611 tulip_parse_eeprom(dev);
1612 strcpy(dev->name, "eth%d");
1613 }
1614
1615 if ((tp->flags & ALWAYS_CHECK_MII) ||
1616 (tp->mtable && tp->mtable->has_mii) ||
1617 ( ! tp->mtable && (tp->flags & HAS_MII))) {
1618 if (tp->mtable && tp->mtable->has_mii) {
1619 for (i = 0; i < tp->mtable->leafcount; i++)
1620 if (tp->mtable->mleaf[i].media == 11) {
1621 tp->cur_index = i;
1622 tp->saved_if_port = dev->if_port;
1623 tulip_select_media(dev, 2);
1624 dev->if_port = tp->saved_if_port;
1625 break;
1626 }
1627 }
1628
1629
1630
1631
1632 tulip_find_mii (dev, board_idx);
1633 }
1634
1635
1636 dev->netdev_ops = &tulip_netdev_ops;
1637 dev->watchdog_timeo = TX_TIMEOUT;
1638#ifdef CONFIG_TULIP_NAPI
1639 netif_napi_add(dev, &tp->napi, tulip_poll, 16);
1640#endif
1641 SET_ETHTOOL_OPS(dev, &ops);
1642
1643 if (register_netdev(dev))
1644 goto err_out_free_ring;
1645
1646 printk(KERN_INFO "%s: %s rev %d at "
1647#ifdef CONFIG_TULIP_MMIO
1648 "MMIO"
1649#else
1650 "Port"
1651#endif
1652 " %#llx,", dev->name, chip_name, pdev->revision,
1653 (unsigned long long) pci_resource_start(pdev, TULIP_BAR));
1654 pci_set_drvdata(pdev, dev);
1655
1656 if (eeprom_missing)
1657 printk(" EEPROM not present,");
1658 printk(" %pM", dev->dev_addr);
1659 printk(", IRQ %d.\n", irq);
1660
1661 if (tp->chip_id == PNIC2)
1662 tp->link_change = pnic2_lnk_change;
1663 else if (tp->flags & HAS_NWAY)
1664 tp->link_change = t21142_lnk_change;
1665 else if (tp->flags & HAS_PNICNWAY)
1666 tp->link_change = pnic_lnk_change;
1667
1668
1669 switch (chip_idx) {
1670 case DC21140:
1671 case DM910X:
1672 default:
1673 if (tp->mtable)
1674 iowrite32(tp->mtable->csr12dir | 0x100, ioaddr + CSR12);
1675 break;
1676 case DC21142:
1677 if (tp->mii_cnt || tulip_media_cap[dev->if_port] & MediaIsMII) {
1678 iowrite32(csr6_mask_defstate, ioaddr + CSR6);
1679 iowrite32(0x0000, ioaddr + CSR13);
1680 iowrite32(0x0000, ioaddr + CSR14);
1681 iowrite32(csr6_mask_hdcap, ioaddr + CSR6);
1682 } else
1683 t21142_start_nway(dev);
1684 break;
1685 case PNIC2:
1686
1687 iowrite32(0x0000, ioaddr + CSR13);
1688 iowrite32(0x0000, ioaddr + CSR14);
1689 break;
1690 case LC82C168:
1691 if ( ! tp->mii_cnt) {
1692 tp->nway = 1;
1693 tp->nwayset = 0;
1694 iowrite32(csr6_ttm | csr6_ca, ioaddr + CSR6);
1695 iowrite32(0x30, ioaddr + CSR12);
1696 iowrite32(0x0001F078, ioaddr + CSR6);
1697 iowrite32(0x0201F078, ioaddr + CSR6);
1698 }
1699 break;
1700 case MX98713:
1701 case COMPEX9881:
1702 iowrite32(0x00000000, ioaddr + CSR6);
1703 iowrite32(0x000711C0, ioaddr + CSR14);
1704 iowrite32(0x00000001, ioaddr + CSR13);
1705 break;
1706 case MX98715:
1707 case MX98725:
1708 iowrite32(0x01a80000, ioaddr + CSR6);
1709 iowrite32(0xFFFFFFFF, ioaddr + CSR14);
1710 iowrite32(0x00001000, ioaddr + CSR12);
1711 break;
1712 case COMET:
1713
1714 break;
1715 }
1716
1717
1718 tulip_set_power_state (tp, 0, 1);
1719
1720 return 0;
1721
1722err_out_free_ring:
1723 pci_free_consistent (pdev,
1724 sizeof (struct tulip_rx_desc) * RX_RING_SIZE +
1725 sizeof (struct tulip_tx_desc) * TX_RING_SIZE,
1726 tp->rx_ring, tp->rx_ring_dma);
1727
1728err_out_mtable:
1729 kfree (tp->mtable);
1730 pci_iounmap(pdev, ioaddr);
1731
1732err_out_free_res:
1733 pci_release_regions (pdev);
1734
1735err_out_free_netdev:
1736 free_netdev (dev);
1737 return -ENODEV;
1738}
1739
1740
1741#ifdef CONFIG_PM
1742
1743static int tulip_suspend (struct pci_dev *pdev, pm_message_t state)
1744{
1745 struct net_device *dev = pci_get_drvdata(pdev);
1746
1747 if (!dev)
1748 return -EINVAL;
1749
1750 if (!netif_running(dev))
1751 goto save_state;
1752
1753 tulip_down(dev);
1754
1755 netif_device_detach(dev);
1756 free_irq(dev->irq, dev);
1757
1758save_state:
1759 pci_save_state(pdev);
1760 pci_disable_device(pdev);
1761 pci_set_power_state(pdev, pci_choose_state(pdev, state));
1762
1763 return 0;
1764}
1765
1766
1767static int tulip_resume(struct pci_dev *pdev)
1768{
1769 struct net_device *dev = pci_get_drvdata(pdev);
1770 int retval;
1771
1772 if (!dev)
1773 return -EINVAL;
1774
1775 pci_set_power_state(pdev, PCI_D0);
1776 pci_restore_state(pdev);
1777
1778 if (!netif_running(dev))
1779 return 0;
1780
1781 if ((retval = pci_enable_device(pdev))) {
1782 printk (KERN_ERR "tulip: pci_enable_device failed in resume\n");
1783 return retval;
1784 }
1785
1786 if ((retval = request_irq(dev->irq, &tulip_interrupt, IRQF_SHARED, dev->name, dev))) {
1787 printk (KERN_ERR "tulip: request_irq failed in resume\n");
1788 return retval;
1789 }
1790
1791 netif_device_attach(dev);
1792
1793 if (netif_running(dev))
1794 tulip_up(dev);
1795
1796 return 0;
1797}
1798
1799#endif
1800
1801
1802static void __devexit tulip_remove_one (struct pci_dev *pdev)
1803{
1804 struct net_device *dev = pci_get_drvdata (pdev);
1805 struct tulip_private *tp;
1806
1807 if (!dev)
1808 return;
1809
1810 tp = netdev_priv(dev);
1811 unregister_netdev(dev);
1812 pci_free_consistent (pdev,
1813 sizeof (struct tulip_rx_desc) * RX_RING_SIZE +
1814 sizeof (struct tulip_tx_desc) * TX_RING_SIZE,
1815 tp->rx_ring, tp->rx_ring_dma);
1816 kfree (tp->mtable);
1817 pci_iounmap(pdev, tp->base_addr);
1818 free_netdev (dev);
1819 pci_release_regions (pdev);
1820 pci_set_drvdata (pdev, NULL);
1821
1822
1823}
1824
1825#ifdef CONFIG_NET_POLL_CONTROLLER
1826
1827
1828
1829
1830
1831
1832static void poll_tulip (struct net_device *dev)
1833{
1834
1835
1836 disable_irq(dev->irq);
1837 tulip_interrupt (dev->irq, dev);
1838 enable_irq(dev->irq);
1839}
1840#endif
1841
1842static struct pci_driver tulip_driver = {
1843 .name = DRV_NAME,
1844 .id_table = tulip_pci_tbl,
1845 .probe = tulip_init_one,
1846 .remove = __devexit_p(tulip_remove_one),
1847#ifdef CONFIG_PM
1848 .suspend = tulip_suspend,
1849 .resume = tulip_resume,
1850#endif
1851};
1852
1853
1854static int __init tulip_init (void)
1855{
1856#ifdef MODULE
1857 printk (KERN_INFO "%s", version);
1858#endif
1859
1860
1861 tulip_rx_copybreak = rx_copybreak;
1862 tulip_max_interrupt_work = max_interrupt_work;
1863
1864
1865 return pci_register_driver(&tulip_driver);
1866}
1867
1868
1869static void __exit tulip_cleanup (void)
1870{
1871 pci_unregister_driver (&tulip_driver);
1872}
1873
1874
1875module_init(tulip_init);
1876module_exit(tulip_cleanup);
1877