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