1 /* tulip_core.c: A DEC 21x4x-family ethernet driver for Linux. */
4 Maintained by Jeff Garzik <jgarzik@pobox.com>
5 Copyright 2000,2001 The Linux Kernel Team
6 Written/copyright 1994-2001 by Donald Becker.
8 This software may be used and distributed according to the terms
9 of the GNU General Public License, incorporated herein by reference.
11 Please refer to Documentation/DocBook/tulip-user.{pdf,ps,html}
12 for more information on this driver, or visit the project
13 Web page at http://sourceforge.net/projects/tulip/
17 #include <linux/config.h>
19 #define DRV_NAME "tulip"
20 #ifdef CONFIG_TULIP_NAPI
21 #define DRV_VERSION "1.1.13-NAPI" /* Keep at least for test */
23 #define DRV_VERSION "1.1.13"
25 #define DRV_RELDATE "May 11, 2002"
28 #include <linux/module.h>
30 #include <linux/pci.h>
31 #include <linux/init.h>
32 #include <linux/etherdevice.h>
33 #include <linux/delay.h>
34 #include <linux/mii.h>
35 #include <linux/ethtool.h>
36 #include <linux/crc32.h>
37 #include <asm/unaligned.h>
38 #include <asm/uaccess.h>
44 static char version
[] __devinitdata
=
45 "Linux Tulip driver version " DRV_VERSION
" (" DRV_RELDATE
")\n";
48 /* A few user-configurable values. */
50 /* Maximum events (Rx packets, etc.) to handle at each interrupt. */
51 static unsigned int max_interrupt_work
= 25;
54 /* Used to pass the full-duplex flag, etc. */
55 static int full_duplex
[MAX_UNITS
];
56 static int options
[MAX_UNITS
];
57 static int mtu
[MAX_UNITS
]; /* Jumbo MTU for interfaces. */
59 /* The possible media types that can be set in options[] are: */
60 const char * const medianame
[32] = {
61 "10baseT", "10base2", "AUI", "100baseTx",
62 "10baseT-FDX", "100baseTx-FDX", "100baseT4", "100baseFx",
63 "100baseFx-FDX", "MII 10baseT", "MII 10baseT-FDX", "MII",
64 "10baseT(forced)", "MII 100baseTx", "MII 100baseTx-FDX", "MII 100baseT4",
65 "MII 100baseFx-HDX", "MII 100baseFx-FDX", "Home-PNA 1Mbps", "Invalid-19",
66 "","","","", "","","","", "","","","Transceiver reset",
69 /* Set the copy breakpoint for the copy-only-tiny-buffer Rx structure. */
70 #if defined(__alpha__) || defined(__arm__) || defined(__hppa__) \
71 || defined(__sparc_) || defined(__ia64__) \
72 || defined(__sh__) || defined(__mips__)
73 static int rx_copybreak
= 1518;
75 static int rx_copybreak
= 100;
79 Set the bus performance register.
80 Typical: Set 16 longword cache alignment, no burst limit.
81 Cache alignment bits 15:14 Burst length 13:8
82 0000 No alignment 0x00000000 unlimited 0800 8 longwords
83 4000 8 longwords 0100 1 longword 1000 16 longwords
84 8000 16 longwords 0200 2 longwords 2000 32 longwords
85 C000 32 longwords 0400 4 longwords
86 Warning: many older 486 systems are broken and require setting 0x00A04800
87 8 longword cache alignment, 8 longword burst.
88 ToDo: Non-Intel setting could be better.
91 #if defined(__alpha__) || defined(__ia64__) || defined(__x86_64__)
92 static int csr0
= 0x01A00000 | 0xE000;
93 #elif defined(__i386__) || defined(__powerpc__)
94 static int csr0
= 0x01A00000 | 0x8000;
95 #elif defined(__sparc__) || defined(__hppa__)
96 /* The UltraSparc PCI controllers will disconnect at every 64-byte
97 * crossing anyways so it makes no sense to tell Tulip to burst
100 static int csr0
= 0x01A00000 | 0x9000;
101 #elif defined(__arm__) || defined(__sh__)
102 static int csr0
= 0x01A00000 | 0x4800;
103 #elif defined(__mips__)
104 static int csr0
= 0x00200000 | 0x4000;
106 #warning Processor architecture undefined!
107 static int csr0
= 0x00A00000 | 0x4800;
110 /* Operational parameters that usually are not changed. */
111 /* Time in jiffies before concluding the transmitter is hung. */
112 #define TX_TIMEOUT (4*HZ)
115 MODULE_AUTHOR("The Linux Kernel Team");
116 MODULE_DESCRIPTION("Digital 21*4* Tulip ethernet driver");
117 MODULE_LICENSE("GPL");
118 MODULE_PARM(tulip_debug
, "i");
119 MODULE_PARM(max_interrupt_work
, "i");
120 MODULE_PARM(rx_copybreak
, "i");
121 MODULE_PARM(csr0
, "i");
122 MODULE_PARM(options
, "1-" __MODULE_STRING(MAX_UNITS
) "i");
123 MODULE_PARM(full_duplex
, "1-" __MODULE_STRING(MAX_UNITS
) "i");
125 #define PFX DRV_NAME ": "
128 int tulip_debug
= TULIP_DEBUG
;
136 * This table use during operation for capabilities and media timer.
138 * It is indexed via the values in 'enum chips'
141 struct tulip_chip_table tulip_tbl
[] = {
142 { }, /* placeholder for array, slot unused currently */
143 { }, /* placeholder for array, slot unused currently */
146 { "Digital DS21140 Tulip", 128, 0x0001ebef,
147 HAS_MII
| HAS_MEDIA_TABLE
| CSR12_IN_SROM
| HAS_PCI_MWI
, tulip_timer
},
149 /* DC21142, DC21143 */
150 { "Digital DS21143 Tulip", 128, 0x0801fbff,
151 HAS_MII
| HAS_MEDIA_TABLE
| ALWAYS_CHECK_MII
| HAS_ACPI
| HAS_NWAY
152 | HAS_INTR_MITIGATION
| HAS_PCI_MWI
, t21142_timer
},
155 { "Lite-On 82c168 PNIC", 256, 0x0001fbef,
156 HAS_MII
| HAS_PNICNWAY
, pnic_timer
},
159 { "Macronix 98713 PMAC", 128, 0x0001ebef,
160 HAS_MII
| HAS_MEDIA_TABLE
| CSR12_IN_SROM
, mxic_timer
},
163 { "Macronix 98715 PMAC", 256, 0x0001ebef,
164 HAS_MEDIA_TABLE
, mxic_timer
},
167 { "Macronix 98725 PMAC", 256, 0x0001ebef,
168 HAS_MEDIA_TABLE
, mxic_timer
},
171 { "ASIX AX88140", 128, 0x0001fbff,
172 HAS_MII
| HAS_MEDIA_TABLE
| CSR12_IN_SROM
| MC_HASH_ONLY
173 | IS_ASIX
, tulip_timer
},
176 { "Lite-On PNIC-II", 256, 0x0801fbff,
177 HAS_MII
| HAS_NWAY
| HAS_8023X
| HAS_PCI_MWI
, pnic2_timer
},
180 { "ADMtek Comet", 256, 0x0001abef,
181 HAS_MII
| MC_HASH_ONLY
| COMET_MAC_ADDR
, comet_timer
},
184 { "Compex 9881 PMAC", 128, 0x0001ebef,
185 HAS_MII
| HAS_MEDIA_TABLE
| CSR12_IN_SROM
, mxic_timer
},
188 { "Intel DS21145 Tulip", 128, 0x0801fbff,
189 HAS_MII
| HAS_MEDIA_TABLE
| ALWAYS_CHECK_MII
| HAS_ACPI
190 | HAS_NWAY
| HAS_PCI_MWI
, t21142_timer
},
193 { "Davicom DM9102/DM9102A", 128, 0x0001ebef,
194 HAS_MII
| HAS_MEDIA_TABLE
| CSR12_IN_SROM
| HAS_ACPI
,
198 { "Conexant LANfinity", 256, 0x0001ebef,
199 HAS_MII
| HAS_ACPI
, tulip_timer
},
203 static struct pci_device_id tulip_pci_tbl
[] = {
204 { 0x1011, 0x0009, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, DC21140
},
205 { 0x1011, 0x0019, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, DC21143
},
206 { 0x11AD, 0x0002, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, LC82C168
},
207 { 0x10d9, 0x0512, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, MX98713
},
208 { 0x10d9, 0x0531, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, MX98715
},
209 /* { 0x10d9, 0x0531, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98725 },*/
210 { 0x125B, 0x1400, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, AX88140
},
211 { 0x11AD, 0xc115, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, PNIC2
},
212 { 0x1317, 0x0981, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, COMET
},
213 { 0x1317, 0x0985, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, COMET
},
214 { 0x1317, 0x1985, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, COMET
},
215 { 0x1317, 0x9511, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, COMET
},
216 { 0x13D1, 0xAB02, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, COMET
},
217 { 0x13D1, 0xAB03, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, COMET
},
218 { 0x13D1, 0xAB08, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, COMET
},
219 { 0x104A, 0x0981, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, COMET
},
220 { 0x104A, 0x2774, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, COMET
},
221 { 0x1259, 0xa120, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, COMET
},
222 { 0x11F6, 0x9881, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, COMPEX9881
},
223 { 0x8086, 0x0039, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, I21145
},
224 { 0x1282, 0x9100, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, DM910X
},
225 { 0x1282, 0x9102, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, DM910X
},
226 { 0x1113, 0x1216, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, COMET
},
227 { 0x1113, 0x1217, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, MX98715
},
228 { 0x1113, 0x9511, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, COMET
},
229 { 0x1186, 0x1541, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, COMET
},
230 { 0x1186, 0x1561, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, COMET
},
231 { 0x14f1, 0x1803, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, CONEXANT
},
232 { 0x1626, 0x8410, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, COMET
},
233 { 0x1737, 0xAB09, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, COMET
},
234 { 0x1737, 0xAB08, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, COMET
},
235 { 0x17B3, 0xAB08, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, COMET
},
236 { 0x10b9, 0x5261, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, DM910X
}, /* ALi 1563 integrated ethernet */
237 { 0x10b7, 0x9300, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, COMET
}, /* 3Com 3CSOHO100B-TX */
238 { } /* terminate list */
240 MODULE_DEVICE_TABLE(pci
, tulip_pci_tbl
);
243 /* A full-duplex map for media types. */
244 const char tulip_media_cap
[32] =
245 {0,0,0,16, 3,19,16,24, 27,4,7,5, 0,20,23,20, 28,31,0,0, };
247 static void tulip_tx_timeout(struct net_device
*dev
);
248 static void tulip_init_ring(struct net_device
*dev
);
249 static int tulip_start_xmit(struct sk_buff
*skb
, struct net_device
*dev
);
250 static int tulip_open(struct net_device
*dev
);
251 static int tulip_close(struct net_device
*dev
);
252 static void tulip_up(struct net_device
*dev
);
253 static void tulip_down(struct net_device
*dev
);
254 static struct net_device_stats
*tulip_get_stats(struct net_device
*dev
);
255 static int private_ioctl(struct net_device
*dev
, struct ifreq
*rq
, int cmd
);
256 static void set_rx_mode(struct net_device
*dev
);
257 #ifdef CONFIG_NET_POLL_CONTROLLER
258 static void poll_tulip(struct net_device
*dev
);
261 static void tulip_set_power_state (struct tulip_private
*tp
,
262 int sleep
, int snooze
)
264 if (tp
->flags
& HAS_ACPI
) {
266 pci_read_config_dword (tp
->pdev
, CFDD
, &tmp
);
267 newtmp
= tmp
& ~(CFDD_Sleep
| CFDD_Snooze
);
269 newtmp
|= CFDD_Sleep
;
271 newtmp
|= CFDD_Snooze
;
273 pci_write_config_dword (tp
->pdev
, CFDD
, newtmp
);
279 static void tulip_up(struct net_device
*dev
)
281 struct tulip_private
*tp
= netdev_priv(dev
);
282 long ioaddr
= dev
->base_addr
;
283 int next_tick
= 3*HZ
;
286 /* Wake the chip from sleep/snooze mode. */
287 tulip_set_power_state (tp
, 0, 0);
289 /* On some chip revs we must set the MII/SYM port before the reset!? */
290 if (tp
->mii_cnt
|| (tp
->mtable
&& tp
->mtable
->has_mii
))
291 outl(0x00040000, ioaddr
+ CSR6
);
293 /* Reset the chip, holding bit 0 set at least 50 PCI cycles. */
294 outl(0x00000001, ioaddr
+ CSR0
);
298 Wait the specified 50 PCI cycles after a reset by initializing
299 Tx and Rx queues and the address filter list. */
300 outl(tp
->csr0
, ioaddr
+ CSR0
);
304 printk(KERN_DEBUG
"%s: tulip_up(), irq==%d.\n", dev
->name
, dev
->irq
);
306 outl(tp
->rx_ring_dma
, ioaddr
+ CSR3
);
307 outl(tp
->tx_ring_dma
, ioaddr
+ CSR4
);
308 tp
->cur_rx
= tp
->cur_tx
= 0;
309 tp
->dirty_rx
= tp
->dirty_tx
= 0;
311 if (tp
->flags
& MC_HASH_ONLY
) {
312 u32 addr_low
= le32_to_cpu(get_unaligned((u32
*)dev
->dev_addr
));
313 u32 addr_high
= le16_to_cpu(get_unaligned((u16
*)(dev
->dev_addr
+4)));
314 if (tp
->chip_id
== AX88140
) {
315 outl(0, ioaddr
+ CSR13
);
316 outl(addr_low
, ioaddr
+ CSR14
);
317 outl(1, ioaddr
+ CSR13
);
318 outl(addr_high
, ioaddr
+ CSR14
);
319 } else if (tp
->flags
& COMET_MAC_ADDR
) {
320 outl(addr_low
, ioaddr
+ 0xA4);
321 outl(addr_high
, ioaddr
+ 0xA8);
322 outl(0, ioaddr
+ 0xAC);
323 outl(0, ioaddr
+ 0xB0);
326 /* This is set_rx_mode(), but without starting the transmitter. */
327 u16
*eaddrs
= (u16
*)dev
->dev_addr
;
328 u16
*setup_frm
= &tp
->setup_frame
[15*6];
331 /* 21140 bug: you must add the broadcast address. */
332 memset(tp
->setup_frame
, 0xff, sizeof(tp
->setup_frame
));
333 /* Fill the final entry of the table with our physical address. */
334 *setup_frm
++ = eaddrs
[0]; *setup_frm
++ = eaddrs
[0];
335 *setup_frm
++ = eaddrs
[1]; *setup_frm
++ = eaddrs
[1];
336 *setup_frm
++ = eaddrs
[2]; *setup_frm
++ = eaddrs
[2];
338 mapping
= pci_map_single(tp
->pdev
, tp
->setup_frame
,
339 sizeof(tp
->setup_frame
),
341 tp
->tx_buffers
[tp
->cur_tx
].skb
= NULL
;
342 tp
->tx_buffers
[tp
->cur_tx
].mapping
= mapping
;
344 /* Put the setup frame on the Tx list. */
345 tp
->tx_ring
[tp
->cur_tx
].length
= cpu_to_le32(0x08000000 | 192);
346 tp
->tx_ring
[tp
->cur_tx
].buffer1
= cpu_to_le32(mapping
);
347 tp
->tx_ring
[tp
->cur_tx
].status
= cpu_to_le32(DescOwned
);
352 tp
->saved_if_port
= dev
->if_port
;
353 if (dev
->if_port
== 0)
354 dev
->if_port
= tp
->default_port
;
356 /* Allow selecting a default media. */
358 if (tp
->mtable
== NULL
)
361 int looking_for
= tulip_media_cap
[dev
->if_port
] & MediaIsMII
? 11 :
362 (dev
->if_port
== 12 ? 0 : dev
->if_port
);
363 for (i
= 0; i
< tp
->mtable
->leafcount
; i
++)
364 if (tp
->mtable
->mleaf
[i
].media
== looking_for
) {
365 printk(KERN_INFO
"%s: Using user-specified media %s.\n",
366 dev
->name
, medianame
[dev
->if_port
]);
370 if ((tp
->mtable
->defaultmedia
& 0x0800) == 0) {
371 int looking_for
= tp
->mtable
->defaultmedia
& MEDIA_MASK
;
372 for (i
= 0; i
< tp
->mtable
->leafcount
; i
++)
373 if (tp
->mtable
->mleaf
[i
].media
== looking_for
) {
374 printk(KERN_INFO
"%s: Using EEPROM-set media %s.\n",
375 dev
->name
, medianame
[looking_for
]);
379 /* Start sensing first non-full-duplex media. */
380 for (i
= tp
->mtable
->leafcount
- 1;
381 (tulip_media_cap
[tp
->mtable
->mleaf
[i
].media
] & MediaAlwaysFD
) && i
> 0; i
--)
390 if (tp
->chip_id
== DC21143
&&
391 (tulip_media_cap
[dev
->if_port
] & MediaIsMII
)) {
392 /* We must reset the media CSRs when we force-select MII mode. */
393 outl(0x0000, ioaddr
+ CSR13
);
394 outl(0x0000, ioaddr
+ CSR14
);
395 outl(0x0008, ioaddr
+ CSR15
);
397 tulip_select_media(dev
, 1);
398 } else if (tp
->chip_id
== DC21142
) {
400 tulip_select_media(dev
, 1);
402 printk(KERN_INFO
"%s: Using MII transceiver %d, status "
404 dev
->name
, tp
->phys
[0], tulip_mdio_read(dev
, tp
->phys
[0], 1));
405 outl(csr6_mask_defstate
, ioaddr
+ CSR6
);
406 tp
->csr6
= csr6_mask_hdcap
;
408 outl(0x0000, ioaddr
+ CSR13
);
409 outl(0x0000, ioaddr
+ CSR14
);
411 t21142_start_nway(dev
);
412 } else if (tp
->chip_id
== PNIC2
) {
413 /* for initial startup advertise 10/100 Full and Half */
414 tp
->sym_advertise
= 0x01E0;
415 /* enable autonegotiate end interrupt */
416 outl(inl(ioaddr
+CSR5
)| 0x00008010, ioaddr
+ CSR5
);
417 outl(inl(ioaddr
+CSR7
)| 0x00008010, ioaddr
+ CSR7
);
418 pnic2_start_nway(dev
);
419 } else if (tp
->chip_id
== LC82C168
&& ! tp
->medialock
) {
422 tp
->csr6
= 0x814C0000 | (tp
->full_duplex
? 0x0200 : 0);
423 outl(0x0001, ioaddr
+ CSR15
);
424 } else if (inl(ioaddr
+ CSR5
) & TPLnkPass
)
427 /* Start with 10mbps to do autonegotiation. */
428 outl(0x32, ioaddr
+ CSR12
);
429 tp
->csr6
= 0x00420000;
430 outl(0x0001B078, ioaddr
+ 0xB8);
431 outl(0x0201B078, ioaddr
+ 0xB8);
434 } else if ((tp
->chip_id
== MX98713
|| tp
->chip_id
== COMPEX9881
)
435 && ! tp
->medialock
) {
437 tp
->csr6
= 0x01880000 | (tp
->full_duplex
? 0x0200 : 0);
438 outl(0x0f370000 | inw(ioaddr
+ 0x80), ioaddr
+ 0x80);
439 } else if (tp
->chip_id
== MX98715
|| tp
->chip_id
== MX98725
) {
440 /* Provided by BOLO, Macronix - 12/10/1998. */
442 tp
->csr6
= 0x01a80200;
443 outl(0x0f370000 | inw(ioaddr
+ 0x80), ioaddr
+ 0x80);
444 outl(0x11000 | inw(ioaddr
+ 0xa0), ioaddr
+ 0xa0);
445 } else if (tp
->chip_id
== COMET
|| tp
->chip_id
== CONEXANT
) {
446 /* Enable automatic Tx underrun recovery. */
447 outl(inl(ioaddr
+ 0x88) | 1, ioaddr
+ 0x88);
448 dev
->if_port
= tp
->mii_cnt
? 11 : 0;
449 tp
->csr6
= 0x00040000;
450 } else if (tp
->chip_id
== AX88140
) {
451 tp
->csr6
= tp
->mii_cnt
? 0x00040100 : 0x00000100;
453 tulip_select_media(dev
, 1);
455 /* Start the chip's Tx to process setup frame. */
459 outl(tp
->csr6
| TxOn
, ioaddr
+ CSR6
);
461 /* Enable interrupts by setting the interrupt mask. */
462 outl(tulip_tbl
[tp
->chip_id
].valid_intrs
, ioaddr
+ CSR5
);
463 outl(tulip_tbl
[tp
->chip_id
].valid_intrs
, ioaddr
+ CSR7
);
464 tulip_start_rxtx(tp
);
465 outl(0, ioaddr
+ CSR2
); /* Rx poll demand */
467 if (tulip_debug
> 2) {
468 printk(KERN_DEBUG
"%s: Done tulip_up(), CSR0 %8.8x, CSR5 %8.8x CSR6 %8.8x.\n",
469 dev
->name
, inl(ioaddr
+ CSR0
), inl(ioaddr
+ CSR5
),
473 /* Set the timer to switch to check for link beat and perhaps switch
474 to an alternate media type. */
475 tp
->timer
.expires
= RUN_AT(next_tick
);
476 add_timer(&tp
->timer
);
477 #ifdef CONFIG_TULIP_NAPI
478 init_timer(&tp
->oom_timer
);
479 tp
->oom_timer
.data
= (unsigned long)dev
;
480 tp
->oom_timer
.function
= oom_timer
;
485 tulip_open(struct net_device
*dev
)
489 if ((retval
= request_irq(dev
->irq
, &tulip_interrupt
, SA_SHIRQ
, dev
->name
, dev
)))
492 tulip_init_ring (dev
);
496 netif_start_queue (dev
);
502 static void tulip_tx_timeout(struct net_device
*dev
)
504 struct tulip_private
*tp
= netdev_priv(dev
);
505 long ioaddr
= dev
->base_addr
;
508 spin_lock_irqsave (&tp
->lock
, flags
);
510 if (tulip_media_cap
[dev
->if_port
] & MediaIsMII
) {
511 /* Do nothing -- the media monitor should handle this. */
513 printk(KERN_WARNING
"%s: Transmit timeout using MII device.\n",
515 } else if (tp
->chip_id
== DC21140
|| tp
->chip_id
== DC21142
516 || tp
->chip_id
== MX98713
|| tp
->chip_id
== COMPEX9881
517 || tp
->chip_id
== DM910X
) {
518 printk(KERN_WARNING
"%s: 21140 transmit timed out, status %8.8x, "
519 "SIA %8.8x %8.8x %8.8x %8.8x, resetting...\n",
520 dev
->name
, inl(ioaddr
+ CSR5
), inl(ioaddr
+ CSR12
),
521 inl(ioaddr
+ CSR13
), inl(ioaddr
+ CSR14
), inl(ioaddr
+ CSR15
));
522 if ( ! tp
->medialock
&& tp
->mtable
) {
525 while (tp
->cur_index
>= 0
526 && (tulip_media_cap
[tp
->mtable
->mleaf
[tp
->cur_index
].media
]
528 if (--tp
->cur_index
< 0) {
529 /* We start again, but should instead look for default. */
530 tp
->cur_index
= tp
->mtable
->leafcount
- 1;
532 tulip_select_media(dev
, 0);
533 printk(KERN_WARNING
"%s: transmit timed out, switching to %s "
534 "media.\n", dev
->name
, medianame
[dev
->if_port
]);
536 } else if (tp
->chip_id
== PNIC2
) {
537 printk(KERN_WARNING
"%s: PNIC2 transmit timed out, status %8.8x, "
538 "CSR6/7 %8.8x / %8.8x CSR12 %8.8x, resetting...\n",
539 dev
->name
, (int)inl(ioaddr
+ CSR5
), (int)inl(ioaddr
+ CSR6
),
540 (int)inl(ioaddr
+ CSR7
), (int)inl(ioaddr
+ CSR12
));
542 printk(KERN_WARNING
"%s: Transmit timed out, status %8.8x, CSR12 "
543 "%8.8x, resetting...\n",
544 dev
->name
, inl(ioaddr
+ CSR5
), inl(ioaddr
+ CSR12
));
548 #if defined(way_too_many_messages)
549 if (tulip_debug
> 3) {
551 for (i
= 0; i
< RX_RING_SIZE
; i
++) {
552 u8
*buf
= (u8
*)(tp
->rx_ring
[i
].buffer1
);
554 printk(KERN_DEBUG
"%2d: %8.8x %8.8x %8.8x %8.8x "
555 "%2.2x %2.2x %2.2x.\n",
556 i
, (unsigned int)tp
->rx_ring
[i
].status
,
557 (unsigned int)tp
->rx_ring
[i
].length
,
558 (unsigned int)tp
->rx_ring
[i
].buffer1
,
559 (unsigned int)tp
->rx_ring
[i
].buffer2
,
560 buf
[0], buf
[1], buf
[2]);
561 for (j
= 0; buf
[j
] != 0xee && j
< 1600; j
++)
562 if (j
< 100) printk(" %2.2x", buf
[j
]);
563 printk(" j=%d.\n", j
);
565 printk(KERN_DEBUG
" Rx ring %8.8x: ", (int)tp
->rx_ring
);
566 for (i
= 0; i
< RX_RING_SIZE
; i
++)
567 printk(" %8.8x", (unsigned int)tp
->rx_ring
[i
].status
);
568 printk("\n" KERN_DEBUG
" Tx ring %8.8x: ", (int)tp
->tx_ring
);
569 for (i
= 0; i
< TX_RING_SIZE
; i
++)
570 printk(" %8.8x", (unsigned int)tp
->tx_ring
[i
].status
);
575 /* Stop and restart the chip's Tx processes . */
577 tulip_restart_rxtx(tp
);
578 /* Trigger an immediate transmit demand. */
579 outl(0, ioaddr
+ CSR1
);
581 tp
->stats
.tx_errors
++;
583 spin_unlock_irqrestore (&tp
->lock
, flags
);
584 dev
->trans_start
= jiffies
;
585 netif_wake_queue (dev
);
589 /* Initialize the Rx and Tx rings, along with various 'dev' bits. */
590 static void tulip_init_ring(struct net_device
*dev
)
592 struct tulip_private
*tp
= netdev_priv(dev
);
599 for (i
= 0; i
< RX_RING_SIZE
; i
++) {
600 tp
->rx_ring
[i
].status
= 0x00000000;
601 tp
->rx_ring
[i
].length
= cpu_to_le32(PKT_BUF_SZ
);
602 tp
->rx_ring
[i
].buffer2
= cpu_to_le32(tp
->rx_ring_dma
+ sizeof(struct tulip_rx_desc
) * (i
+ 1));
603 tp
->rx_buffers
[i
].skb
= NULL
;
604 tp
->rx_buffers
[i
].mapping
= 0;
606 /* Mark the last entry as wrapping the ring. */
607 tp
->rx_ring
[i
-1].length
= cpu_to_le32(PKT_BUF_SZ
| DESC_RING_WRAP
);
608 tp
->rx_ring
[i
-1].buffer2
= cpu_to_le32(tp
->rx_ring_dma
);
610 for (i
= 0; i
< RX_RING_SIZE
; i
++) {
613 /* Note the receive buffer must be longword aligned.
614 dev_alloc_skb() provides 16 byte alignment. But do *not*
615 use skb_reserve() to align the IP header! */
616 struct sk_buff
*skb
= dev_alloc_skb(PKT_BUF_SZ
);
617 tp
->rx_buffers
[i
].skb
= skb
;
620 mapping
= pci_map_single(tp
->pdev
, skb
->tail
,
621 PKT_BUF_SZ
, PCI_DMA_FROMDEVICE
);
622 tp
->rx_buffers
[i
].mapping
= mapping
;
623 skb
->dev
= dev
; /* Mark as being used by this device. */
624 tp
->rx_ring
[i
].status
= cpu_to_le32(DescOwned
); /* Owned by Tulip chip */
625 tp
->rx_ring
[i
].buffer1
= cpu_to_le32(mapping
);
627 tp
->dirty_rx
= (unsigned int)(i
- RX_RING_SIZE
);
629 /* The Tx buffer descriptor is filled in as needed, but we
630 do need to clear the ownership bit. */
631 for (i
= 0; i
< TX_RING_SIZE
; i
++) {
632 tp
->tx_buffers
[i
].skb
= NULL
;
633 tp
->tx_buffers
[i
].mapping
= 0;
634 tp
->tx_ring
[i
].status
= 0x00000000;
635 tp
->tx_ring
[i
].buffer2
= cpu_to_le32(tp
->tx_ring_dma
+ sizeof(struct tulip_tx_desc
) * (i
+ 1));
637 tp
->tx_ring
[i
-1].buffer2
= cpu_to_le32(tp
->tx_ring_dma
);
641 tulip_start_xmit(struct sk_buff
*skb
, struct net_device
*dev
)
643 struct tulip_private
*tp
= netdev_priv(dev
);
648 spin_lock_irq(&tp
->lock
);
650 /* Calculate the next Tx descriptor entry. */
651 entry
= tp
->cur_tx
% TX_RING_SIZE
;
653 tp
->tx_buffers
[entry
].skb
= skb
;
654 mapping
= pci_map_single(tp
->pdev
, skb
->data
,
655 skb
->len
, PCI_DMA_TODEVICE
);
656 tp
->tx_buffers
[entry
].mapping
= mapping
;
657 tp
->tx_ring
[entry
].buffer1
= cpu_to_le32(mapping
);
659 if (tp
->cur_tx
- tp
->dirty_tx
< TX_RING_SIZE
/2) {/* Typical path */
660 flag
= 0x60000000; /* No interrupt */
661 } else if (tp
->cur_tx
- tp
->dirty_tx
== TX_RING_SIZE
/2) {
662 flag
= 0xe0000000; /* Tx-done intr. */
663 } else if (tp
->cur_tx
- tp
->dirty_tx
< TX_RING_SIZE
- 2) {
664 flag
= 0x60000000; /* No Tx-done intr. */
665 } else { /* Leave room for set_rx_mode() to fill entries. */
666 flag
= 0xe0000000; /* Tx-done intr. */
667 netif_stop_queue(dev
);
669 if (entry
== TX_RING_SIZE
-1)
670 flag
= 0xe0000000 | DESC_RING_WRAP
;
672 tp
->tx_ring
[entry
].length
= cpu_to_le32(skb
->len
| flag
);
673 /* if we were using Transmit Automatic Polling, we would need a
675 tp
->tx_ring
[entry
].status
= cpu_to_le32(DescOwned
);
680 /* Trigger an immediate transmit demand. */
681 outl(0, dev
->base_addr
+ CSR1
);
683 spin_unlock_irq(&tp
->lock
);
685 dev
->trans_start
= jiffies
;
690 static void tulip_clean_tx_ring(struct tulip_private
*tp
)
692 unsigned int dirty_tx
;
694 for (dirty_tx
= tp
->dirty_tx
; tp
->cur_tx
- dirty_tx
> 0;
696 int entry
= dirty_tx
% TX_RING_SIZE
;
697 int status
= le32_to_cpu(tp
->tx_ring
[entry
].status
);
700 tp
->stats
.tx_errors
++; /* It wasn't Txed */
701 tp
->tx_ring
[entry
].status
= 0;
704 /* Check for Tx filter setup frames. */
705 if (tp
->tx_buffers
[entry
].skb
== NULL
) {
706 /* test because dummy frames not mapped */
707 if (tp
->tx_buffers
[entry
].mapping
)
708 pci_unmap_single(tp
->pdev
,
709 tp
->tx_buffers
[entry
].mapping
,
710 sizeof(tp
->setup_frame
),
715 pci_unmap_single(tp
->pdev
, tp
->tx_buffers
[entry
].mapping
,
716 tp
->tx_buffers
[entry
].skb
->len
,
719 /* Free the original skb. */
720 dev_kfree_skb_irq(tp
->tx_buffers
[entry
].skb
);
721 tp
->tx_buffers
[entry
].skb
= NULL
;
722 tp
->tx_buffers
[entry
].mapping
= 0;
726 static void tulip_down (struct net_device
*dev
)
728 long ioaddr
= dev
->base_addr
;
729 struct tulip_private
*tp
= netdev_priv(dev
);
732 del_timer_sync (&tp
->timer
);
733 #ifdef CONFIG_TULIP_NAPI
734 del_timer_sync (&tp
->oom_timer
);
736 spin_lock_irqsave (&tp
->lock
, flags
);
738 /* Disable interrupts by clearing the interrupt mask. */
739 outl (0x00000000, ioaddr
+ CSR7
);
741 /* Stop the Tx and Rx processes. */
744 /* prepare receive buffers */
745 tulip_refill_rx(dev
);
747 /* release any unconsumed transmit buffers */
748 tulip_clean_tx_ring(tp
);
750 if (inl (ioaddr
+ CSR6
) != 0xffffffff)
751 tp
->stats
.rx_missed_errors
+= inl (ioaddr
+ CSR8
) & 0xffff;
753 spin_unlock_irqrestore (&tp
->lock
, flags
);
755 init_timer(&tp
->timer
);
756 tp
->timer
.data
= (unsigned long)dev
;
757 tp
->timer
.function
= tulip_tbl
[tp
->chip_id
].media_timer
;
759 dev
->if_port
= tp
->saved_if_port
;
761 /* Leave the driver in snooze, not sleep, mode. */
762 tulip_set_power_state (tp
, 0, 1);
766 static int tulip_close (struct net_device
*dev
)
768 long ioaddr
= dev
->base_addr
;
769 struct tulip_private
*tp
= netdev_priv(dev
);
772 netif_stop_queue (dev
);
777 printk (KERN_DEBUG
"%s: Shutting down ethercard, status was %2.2x.\n",
778 dev
->name
, inl (ioaddr
+ CSR5
));
780 free_irq (dev
->irq
, dev
);
782 /* Free all the skbuffs in the Rx queue. */
783 for (i
= 0; i
< RX_RING_SIZE
; i
++) {
784 struct sk_buff
*skb
= tp
->rx_buffers
[i
].skb
;
785 dma_addr_t mapping
= tp
->rx_buffers
[i
].mapping
;
787 tp
->rx_buffers
[i
].skb
= NULL
;
788 tp
->rx_buffers
[i
].mapping
= 0;
790 tp
->rx_ring
[i
].status
= 0; /* Not owned by Tulip chip. */
791 tp
->rx_ring
[i
].length
= 0;
792 tp
->rx_ring
[i
].buffer1
= 0xBADF00D0; /* An invalid address. */
794 pci_unmap_single(tp
->pdev
, mapping
, PKT_BUF_SZ
,
799 for (i
= 0; i
< TX_RING_SIZE
; i
++) {
800 struct sk_buff
*skb
= tp
->tx_buffers
[i
].skb
;
803 pci_unmap_single(tp
->pdev
, tp
->tx_buffers
[i
].mapping
,
804 skb
->len
, PCI_DMA_TODEVICE
);
807 tp
->tx_buffers
[i
].skb
= NULL
;
808 tp
->tx_buffers
[i
].mapping
= 0;
814 static struct net_device_stats
*tulip_get_stats(struct net_device
*dev
)
816 struct tulip_private
*tp
= netdev_priv(dev
);
817 long ioaddr
= dev
->base_addr
;
819 if (netif_running(dev
)) {
822 spin_lock_irqsave (&tp
->lock
, flags
);
824 tp
->stats
.rx_missed_errors
+= inl(ioaddr
+ CSR8
) & 0xffff;
826 spin_unlock_irqrestore(&tp
->lock
, flags
);
833 static int netdev_ethtool_ioctl(struct net_device
*dev
, void __user
*useraddr
)
835 struct tulip_private
*np
= netdev_priv(dev
);
838 if (copy_from_user(ðcmd
, useraddr
, sizeof(ethcmd
)))
842 case ETHTOOL_GDRVINFO
: {
843 struct ethtool_drvinfo info
= {ETHTOOL_GDRVINFO
};
844 strcpy(info
.driver
, DRV_NAME
);
845 strcpy(info
.version
, DRV_VERSION
);
846 strcpy(info
.bus_info
, pci_name(np
->pdev
));
847 if (copy_to_user(useraddr
, &info
, sizeof(info
)))
857 /* Provide ioctl() calls to examine the MII xcvr state. */
858 static int private_ioctl (struct net_device
*dev
, struct ifreq
*rq
, int cmd
)
860 struct tulip_private
*tp
= netdev_priv(dev
);
861 long ioaddr
= dev
->base_addr
;
862 struct mii_ioctl_data
*data
= if_mii(rq
);
863 const unsigned int phy_idx
= 0;
864 int phy
= tp
->phys
[phy_idx
] & 0x1f;
865 unsigned int regnum
= data
->reg_num
;
869 return netdev_ethtool_ioctl(dev
, rq
->ifr_data
);
871 case SIOCGMIIPHY
: /* Get address of MII PHY in use. */
874 else if (tp
->flags
& HAS_NWAY
)
876 else if (tp
->chip_id
== COMET
)
881 case SIOCGMIIREG
: /* Read MII PHY register. */
882 if (data
->phy_id
== 32 && (tp
->flags
& HAS_NWAY
)) {
883 int csr12
= inl (ioaddr
+ CSR12
);
884 int csr14
= inl (ioaddr
+ CSR14
);
887 if (((csr14
<<5) & 0x1000) ||
888 (dev
->if_port
== 5 && tp
->nwayset
))
889 data
->val_out
= 0x1000;
891 data
->val_out
= (tulip_media_cap
[dev
->if_port
]&MediaIs100
? 0x2000 : 0)
892 | (tulip_media_cap
[dev
->if_port
]&MediaIsFD
? 0x0100 : 0);
897 ((csr12
&0x7000) == 0x5000 ? 0x20 : 0) +
898 ((csr12
&0x06) == 6 ? 0 : 4);
899 data
->val_out
|= 0x6048;
902 /* Advertised value, bogus 10baseTx-FD value from CSR6. */
904 ((inl(ioaddr
+ CSR6
) >> 3) & 0x0040) +
905 ((csr14
>> 1) & 0x20) + 1;
906 data
->val_out
|= ((csr14
>> 9) & 0x03C0);
908 case 5: data
->val_out
= tp
->lpar
; break;
909 default: data
->val_out
= 0; break;
912 data
->val_out
= tulip_mdio_read (dev
, data
->phy_id
& 0x1f, regnum
);
916 case SIOCSMIIREG
: /* Write MII PHY register. */
917 if (!capable (CAP_NET_ADMIN
))
921 if (data
->phy_id
== phy
) {
922 u16 value
= data
->val_in
;
924 case 0: /* Check for autonegotiation on or reset. */
925 tp
->full_duplex_lock
= (value
& 0x9000) ? 0 : 1;
926 if (tp
->full_duplex_lock
)
927 tp
->full_duplex
= (value
& 0x0100) ? 1 : 0;
930 tp
->advertising
[phy_idx
] =
931 tp
->mii_advertise
= data
->val_in
;
935 if (data
->phy_id
== 32 && (tp
->flags
& HAS_NWAY
)) {
936 u16 value
= data
->val_in
;
938 if ((value
& 0x1200) == 0x1200) {
939 if (tp
->chip_id
== PNIC2
) {
940 pnic2_start_nway (dev
);
942 t21142_start_nway (dev
);
945 } else if (regnum
== 4)
946 tp
->sym_advertise
= value
;
948 tulip_mdio_write (dev
, data
->phy_id
& 0x1f, regnum
, data
->val_in
);
959 /* Set or clear the multicast filter for this adaptor.
960 Note that we only use exclusion around actually queueing the
961 new frame, not around filling tp->setup_frame. This is non-deterministic
962 when re-entered but still correct. */
965 #define set_bit_le(i,p) do { ((char *)(p))[(i)/8] |= (1<<((i)%8)); } while(0)
967 static void build_setup_frame_hash(u16
*setup_frm
, struct net_device
*dev
)
969 struct tulip_private
*tp
= netdev_priv(dev
);
971 struct dev_mc_list
*mclist
;
975 memset(hash_table
, 0, sizeof(hash_table
));
976 set_bit_le(255, hash_table
); /* Broadcast entry */
977 /* This should work on big-endian machines as well. */
978 for (i
= 0, mclist
= dev
->mc_list
; mclist
&& i
< dev
->mc_count
;
979 i
++, mclist
= mclist
->next
) {
980 int index
= ether_crc_le(ETH_ALEN
, mclist
->dmi_addr
) & 0x1ff;
982 set_bit_le(index
, hash_table
);
985 for (i
= 0; i
< 32; i
++) {
986 *setup_frm
++ = hash_table
[i
];
987 *setup_frm
++ = hash_table
[i
];
989 setup_frm
= &tp
->setup_frame
[13*6];
991 /* Fill the final entry with our physical address. */
992 eaddrs
= (u16
*)dev
->dev_addr
;
993 *setup_frm
++ = eaddrs
[0]; *setup_frm
++ = eaddrs
[0];
994 *setup_frm
++ = eaddrs
[1]; *setup_frm
++ = eaddrs
[1];
995 *setup_frm
++ = eaddrs
[2]; *setup_frm
++ = eaddrs
[2];
998 static void build_setup_frame_perfect(u16
*setup_frm
, struct net_device
*dev
)
1000 struct tulip_private
*tp
= netdev_priv(dev
);
1001 struct dev_mc_list
*mclist
;
1005 /* We have <= 14 addresses so we can use the wonderful
1006 16 address perfect filtering of the Tulip. */
1007 for (i
= 0, mclist
= dev
->mc_list
; i
< dev
->mc_count
;
1008 i
++, mclist
= mclist
->next
) {
1009 eaddrs
= (u16
*)mclist
->dmi_addr
;
1010 *setup_frm
++ = *eaddrs
; *setup_frm
++ = *eaddrs
++;
1011 *setup_frm
++ = *eaddrs
; *setup_frm
++ = *eaddrs
++;
1012 *setup_frm
++ = *eaddrs
; *setup_frm
++ = *eaddrs
++;
1014 /* Fill the unused entries with the broadcast address. */
1015 memset(setup_frm
, 0xff, (15-i
)*12);
1016 setup_frm
= &tp
->setup_frame
[15*6];
1018 /* Fill the final entry with our physical address. */
1019 eaddrs
= (u16
*)dev
->dev_addr
;
1020 *setup_frm
++ = eaddrs
[0]; *setup_frm
++ = eaddrs
[0];
1021 *setup_frm
++ = eaddrs
[1]; *setup_frm
++ = eaddrs
[1];
1022 *setup_frm
++ = eaddrs
[2]; *setup_frm
++ = eaddrs
[2];
1026 static void set_rx_mode(struct net_device
*dev
)
1028 struct tulip_private
*tp
= netdev_priv(dev
);
1029 long ioaddr
= dev
->base_addr
;
1032 csr6
= inl(ioaddr
+ CSR6
) & ~0x00D5;
1034 tp
->csr6
&= ~0x00D5;
1035 if (dev
->flags
& IFF_PROMISC
) { /* Set promiscuous. */
1036 tp
->csr6
|= AcceptAllMulticast
| AcceptAllPhys
;
1037 csr6
|= AcceptAllMulticast
| AcceptAllPhys
;
1038 /* Unconditionally log net taps. */
1039 printk(KERN_INFO
"%s: Promiscuous mode enabled.\n", dev
->name
);
1040 } else if ((dev
->mc_count
> 1000) || (dev
->flags
& IFF_ALLMULTI
)) {
1041 /* Too many to filter well -- accept all multicasts. */
1042 tp
->csr6
|= AcceptAllMulticast
;
1043 csr6
|= AcceptAllMulticast
;
1044 } else if (tp
->flags
& MC_HASH_ONLY
) {
1045 /* Some work-alikes have only a 64-entry hash filter table. */
1046 /* Should verify correctness on big-endian/__powerpc__ */
1047 struct dev_mc_list
*mclist
;
1049 if (dev
->mc_count
> 64) { /* Arbitrary non-effective limit. */
1050 tp
->csr6
|= AcceptAllMulticast
;
1051 csr6
|= AcceptAllMulticast
;
1053 u32 mc_filter
[2] = {0, 0}; /* Multicast hash filter */
1055 for (i
= 0, mclist
= dev
->mc_list
; mclist
&& i
< dev
->mc_count
;
1056 i
++, mclist
= mclist
->next
) {
1057 if (tp
->flags
& COMET_MAC_ADDR
)
1058 filterbit
= ether_crc_le(ETH_ALEN
, mclist
->dmi_addr
);
1060 filterbit
= ether_crc(ETH_ALEN
, mclist
->dmi_addr
) >> 26;
1062 mc_filter
[filterbit
>> 5] |= cpu_to_le32(1 << (filterbit
& 31));
1063 if (tulip_debug
> 2) {
1064 printk(KERN_INFO
"%s: Added filter for %2.2x:%2.2x:%2.2x:"
1065 "%2.2x:%2.2x:%2.2x %8.8x bit %d.\n", dev
->name
,
1066 mclist
->dmi_addr
[0], mclist
->dmi_addr
[1],
1067 mclist
->dmi_addr
[2], mclist
->dmi_addr
[3],
1068 mclist
->dmi_addr
[4], mclist
->dmi_addr
[5],
1069 ether_crc(ETH_ALEN
, mclist
->dmi_addr
), filterbit
);
1072 if (mc_filter
[0] == tp
->mc_filter
[0] &&
1073 mc_filter
[1] == tp
->mc_filter
[1])
1075 else if (tp
->flags
& IS_ASIX
) {
1076 outl(2, ioaddr
+ CSR13
);
1077 outl(mc_filter
[0], ioaddr
+ CSR14
);
1078 outl(3, ioaddr
+ CSR13
);
1079 outl(mc_filter
[1], ioaddr
+ CSR14
);
1080 } else if (tp
->flags
& COMET_MAC_ADDR
) {
1081 outl(mc_filter
[0], ioaddr
+ 0xAC);
1082 outl(mc_filter
[1], ioaddr
+ 0xB0);
1084 tp
->mc_filter
[0] = mc_filter
[0];
1085 tp
->mc_filter
[1] = mc_filter
[1];
1088 unsigned long flags
;
1089 u32 tx_flags
= 0x08000000 | 192;
1091 /* Note that only the low-address shortword of setup_frame is valid!
1092 The values are doubled for big-endian architectures. */
1093 if (dev
->mc_count
> 14) { /* Must use a multicast hash table. */
1094 build_setup_frame_hash(tp
->setup_frame
, dev
);
1095 tx_flags
= 0x08400000 | 192;
1097 build_setup_frame_perfect(tp
->setup_frame
, dev
);
1100 spin_lock_irqsave(&tp
->lock
, flags
);
1102 if (tp
->cur_tx
- tp
->dirty_tx
> TX_RING_SIZE
- 2) {
1103 /* Same setup recently queued, we need not add it. */
1108 /* Now add this frame to the Tx list. */
1110 entry
= tp
->cur_tx
++ % TX_RING_SIZE
;
1113 /* Avoid a chip errata by prefixing a dummy entry. */
1114 tp
->tx_buffers
[entry
].skb
= NULL
;
1115 tp
->tx_buffers
[entry
].mapping
= 0;
1116 tp
->tx_ring
[entry
].length
=
1117 (entry
== TX_RING_SIZE
-1) ? cpu_to_le32(DESC_RING_WRAP
) : 0;
1118 tp
->tx_ring
[entry
].buffer1
= 0;
1119 /* Must set DescOwned later to avoid race with chip */
1121 entry
= tp
->cur_tx
++ % TX_RING_SIZE
;
1124 tp
->tx_buffers
[entry
].skb
= NULL
;
1125 tp
->tx_buffers
[entry
].mapping
=
1126 pci_map_single(tp
->pdev
, tp
->setup_frame
,
1127 sizeof(tp
->setup_frame
),
1129 /* Put the setup frame on the Tx list. */
1130 if (entry
== TX_RING_SIZE
-1)
1131 tx_flags
|= DESC_RING_WRAP
; /* Wrap ring. */
1132 tp
->tx_ring
[entry
].length
= cpu_to_le32(tx_flags
);
1133 tp
->tx_ring
[entry
].buffer1
=
1134 cpu_to_le32(tp
->tx_buffers
[entry
].mapping
);
1135 tp
->tx_ring
[entry
].status
= cpu_to_le32(DescOwned
);
1137 tp
->tx_ring
[dummy
].status
= cpu_to_le32(DescOwned
);
1138 if (tp
->cur_tx
- tp
->dirty_tx
>= TX_RING_SIZE
- 2)
1139 netif_stop_queue(dev
);
1141 /* Trigger an immediate transmit demand. */
1142 outl(0, ioaddr
+ CSR1
);
1145 spin_unlock_irqrestore(&tp
->lock
, flags
);
1148 outl(csr6
, ioaddr
+ CSR6
);
1151 #ifdef CONFIG_TULIP_MWI
1152 static void __devinit
tulip_mwi_config (struct pci_dev
*pdev
,
1153 struct net_device
*dev
)
1155 struct tulip_private
*tp
= netdev_priv(dev
);
1160 if (tulip_debug
> 3)
1161 printk(KERN_DEBUG
"%s: tulip_mwi_config()\n", pci_name(pdev
));
1163 tp
->csr0
= csr0
= 0;
1165 /* if we have any cache line size at all, we can do MRM */
1168 /* ...and barring hardware bugs, MWI */
1169 if (!(tp
->chip_id
== DC21143
&& tp
->revision
== 65))
1172 /* set or disable MWI in the standard PCI command bit.
1173 * Check for the case where mwi is desired but not available
1175 if (csr0
& MWI
) pci_set_mwi(pdev
);
1176 else pci_clear_mwi(pdev
);
1178 /* read result from hardware (in case bit refused to enable) */
1179 pci_read_config_word(pdev
, PCI_COMMAND
, &pci_command
);
1180 if ((csr0
& MWI
) && (!(pci_command
& PCI_COMMAND_INVALIDATE
)))
1183 /* if cache line size hardwired to zero, no MWI */
1184 pci_read_config_byte(pdev
, PCI_CACHE_LINE_SIZE
, &cache
);
1185 if ((csr0
& MWI
) && (cache
== 0)) {
1187 pci_clear_mwi(pdev
);
1190 /* assign per-cacheline-size cache alignment and
1191 * burst length values
1195 csr0
|= MRL
| (1 << CALShift
) | (16 << BurstLenShift
);
1198 csr0
|= MRL
| (2 << CALShift
) | (16 << BurstLenShift
);
1201 csr0
|= MRL
| (3 << CALShift
) | (32 << BurstLenShift
);
1208 /* if we have a good cache line size, we by now have a good
1209 * csr0, so save it and exit
1214 /* we don't have a good csr0 or cache line size, disable MWI */
1216 pci_clear_mwi(pdev
);
1220 /* sane defaults for burst length and cache alignment
1221 * originally from de4x5 driver
1223 csr0
|= (8 << BurstLenShift
) | (1 << CALShift
);
1227 if (tulip_debug
> 2)
1228 printk(KERN_DEBUG
"%s: MWI config cacheline=%d, csr0=%08x\n",
1229 pci_name(pdev
), cache
, csr0
);
1233 static int __devinit
tulip_init_one (struct pci_dev
*pdev
,
1234 const struct pci_device_id
*ent
)
1236 struct tulip_private
*tp
;
1237 /* See note below on the multiport cards. */
1238 static unsigned char last_phys_addr
[6] = {0x00, 'L', 'i', 'n', 'u', 'x'};
1239 static int last_irq
;
1240 static int multiport_cnt
; /* For four-port boards w/one EEPROM */
1244 unsigned char *ee_data
;
1245 struct net_device
*dev
;
1247 static int board_idx
= -1;
1248 int chip_idx
= ent
->driver_data
;
1249 const char *chip_name
= tulip_tbl
[chip_idx
].chip_name
;
1250 unsigned int eeprom_missing
= 0;
1251 unsigned int force_csr0
= 0;
1254 static int did_version
; /* Already printed version info. */
1255 if (tulip_debug
> 0 && did_version
++ == 0)
1256 printk (KERN_INFO
"%s", version
);
1262 * Lan media wire a tulip chip to a wan interface. Needs a very
1263 * different driver (lmc driver)
1266 if (pdev
->subsystem_vendor
== PCI_VENDOR_ID_LMC
) {
1267 printk (KERN_ERR PFX
"skipping LMC card.\n");
1272 * Early DM9100's need software CRC and the DMFE driver
1275 if (pdev
->vendor
== 0x1282 && pdev
->device
== 0x9100)
1278 /* Read Chip revision */
1279 pci_read_config_dword(pdev
, PCI_REVISION_ID
, &dev_rev
);
1280 if(dev_rev
< 0x02000030)
1282 printk(KERN_ERR PFX
"skipping early DM9100 with Crc bug (use dmfe)\n");
1288 * Looks for early PCI chipsets where people report hangs
1289 * without the workarounds being on.
1292 /* Intel Saturn. Switch to 8 long words burst, 8 long word cache aligned
1293 Aries might need this too. The Saturn errata are not pretty reading but
1294 thankfully it's an old 486 chipset.
1297 if (pci_find_device(PCI_VENDOR_ID_INTEL
, PCI_DEVICE_ID_INTEL_82424
, NULL
)) {
1298 csr0
= MRL
| MRM
| (8 << BurstLenShift
) | (1 << CALShift
);
1301 /* The dreaded SiS496 486 chipset. Same workaround as above. */
1302 if (pci_find_device(PCI_VENDOR_ID_SI
, PCI_DEVICE_ID_SI_496
, NULL
)) {
1303 csr0
= MRL
| MRM
| (8 << BurstLenShift
) | (1 << CALShift
);
1307 /* bugfix: the ASIX must have a burst limit or horrible things happen. */
1308 if (chip_idx
== AX88140
) {
1309 if ((csr0
& 0x3f00) == 0)
1313 /* PNIC doesn't have MWI/MRL/MRM... */
1314 if (chip_idx
== LC82C168
)
1315 csr0
&= ~0xfff10000; /* zero reserved bits 31:20, 16 */
1317 /* DM9102A has troubles with MRM & clear reserved bits 24:22, 20, 16, 7:1 */
1318 if ((pdev
->vendor
== 0x1282 && pdev
->device
== 0x9102)
1319 || (pdev
->vendor
== 0x10b9 && pdev
->device
== 0x5261))
1320 csr0
&= ~0x01f100ff;
1322 #if defined(__sparc__)
1323 /* DM9102A needs 32-dword alignment/burst length on sparc - chip bug? */
1324 if ((pdev
->vendor
== 0x1282 && pdev
->device
== 0x9102)
1325 || (pdev
->vendor
== 0x10b9 && pdev
->device
== 0x5261))
1326 csr0
= (csr0
& ~0xff00) | 0xe000;
1330 * And back to business
1333 i
= pci_enable_device(pdev
);
1335 printk (KERN_ERR PFX
1336 "Cannot enable tulip board #%d, aborting\n",
1341 ioaddr
= pci_resource_start (pdev
, 0);
1344 /* alloc_etherdev ensures aligned and zeroed private structures */
1345 dev
= alloc_etherdev (sizeof (*tp
));
1347 printk (KERN_ERR PFX
"ether device alloc failed, aborting\n");
1351 SET_MODULE_OWNER(dev
);
1352 SET_NETDEV_DEV(dev
, &pdev
->dev
);
1353 if (pci_resource_len (pdev
, 0) < tulip_tbl
[chip_idx
].io_size
) {
1354 printk (KERN_ERR PFX
"%s: I/O region (0x%lx@0x%lx) too small, "
1355 "aborting\n", pci_name(pdev
),
1356 pci_resource_len (pdev
, 0),
1357 pci_resource_start (pdev
, 0));
1358 goto err_out_free_netdev
;
1361 /* grab all resources from both PIO and MMIO regions, as we
1362 * don't want anyone else messing around with our hardware */
1363 if (pci_request_regions (pdev
, "tulip"))
1364 goto err_out_free_netdev
;
1367 ioaddr
= (unsigned long) ioremap (pci_resource_start (pdev
, 1),
1368 tulip_tbl
[chip_idx
].io_size
);
1370 goto err_out_free_res
;
1373 pci_read_config_byte (pdev
, PCI_REVISION_ID
, &chip_rev
);
1376 * initialize private data structure 'tp'
1377 * it is zeroed and aligned in alloc_etherdev
1379 tp
= netdev_priv(dev
);
1381 tp
->rx_ring
= pci_alloc_consistent(pdev
,
1382 sizeof(struct tulip_rx_desc
) * RX_RING_SIZE
+
1383 sizeof(struct tulip_tx_desc
) * TX_RING_SIZE
,
1386 goto err_out_mtable
;
1387 tp
->tx_ring
= (struct tulip_tx_desc
*)(tp
->rx_ring
+ RX_RING_SIZE
);
1388 tp
->tx_ring_dma
= tp
->rx_ring_dma
+ sizeof(struct tulip_rx_desc
) * RX_RING_SIZE
;
1390 tp
->chip_id
= chip_idx
;
1391 tp
->flags
= tulip_tbl
[chip_idx
].flags
;
1393 tp
->base_addr
= ioaddr
;
1394 tp
->revision
= chip_rev
;
1396 spin_lock_init(&tp
->lock
);
1397 spin_lock_init(&tp
->mii_lock
);
1398 init_timer(&tp
->timer
);
1399 tp
->timer
.data
= (unsigned long)dev
;
1400 tp
->timer
.function
= tulip_tbl
[tp
->chip_id
].media_timer
;
1402 dev
->base_addr
= ioaddr
;
1404 #ifdef CONFIG_TULIP_MWI
1405 if (!force_csr0
&& (tp
->flags
& HAS_PCI_MWI
))
1406 tulip_mwi_config (pdev
, dev
);
1408 /* MWI is broken for DC21143 rev 65... */
1409 if (chip_idx
== DC21143
&& chip_rev
== 65)
1413 /* Stop the chip's Tx and Rx processes. */
1414 tulip_stop_rxtx(tp
);
1416 pci_set_master(pdev
);
1419 if (pdev
->subsystem_vendor
== PCI_VENDOR_ID_HP
) {
1420 switch (pdev
->subsystem_device
) {
1429 tp
->flags
|= HAS_SWAPPED_SEEPROM
| NEEDS_FAKE_MEDIA_TABLE
;
1430 chip_name
= "GSC DS21140 Tulip";
1435 /* Clear the missed-packet counter. */
1438 /* The station address ROM is read byte serially. The register must
1439 be polled, waiting for the value to be read bit serially from the
1442 ee_data
= tp
->eeprom
;
1444 if (chip_idx
== LC82C168
) {
1445 for (i
= 0; i
< 3; i
++) {
1446 int value
, boguscnt
= 100000;
1447 outl(0x600 | i
, ioaddr
+ 0x98);
1449 value
= inl(ioaddr
+ CSR9
);
1450 while (value
< 0 && --boguscnt
> 0);
1451 put_unaligned(le16_to_cpu(value
), ((u16
*)dev
->dev_addr
) + i
);
1452 sum
+= value
& 0xffff;
1454 } else if (chip_idx
== COMET
) {
1455 /* No need to read the EEPROM. */
1456 put_unaligned(cpu_to_le32(inl(ioaddr
+ 0xA4)), (u32
*)dev
->dev_addr
);
1457 put_unaligned(cpu_to_le16(inl(ioaddr
+ 0xA8)), (u16
*)(dev
->dev_addr
+ 4));
1458 for (i
= 0; i
< 6; i
++)
1459 sum
+= dev
->dev_addr
[i
];
1461 /* A serial EEPROM interface, we read now and sort it out later. */
1463 int ee_addr_size
= tulip_read_eeprom(dev
, 0xff, 8) & 0x40000 ? 8 : 6;
1465 for (i
= 0; i
< sizeof(tp
->eeprom
); i
+=2) {
1466 u16 data
= tulip_read_eeprom(dev
, i
/2, ee_addr_size
);
1467 ee_data
[i
] = data
& 0xff;
1468 ee_data
[i
+ 1] = data
>> 8;
1471 /* DEC now has a specification (see Notes) but early board makers
1472 just put the address in the first EEPROM locations. */
1473 /* This does memcmp(ee_data, ee_data+16, 8) */
1474 for (i
= 0; i
< 8; i
++)
1475 if (ee_data
[i
] != ee_data
[16+i
])
1477 if (chip_idx
== CONEXANT
) {
1478 /* Check that the tuple type and length is correct. */
1479 if (ee_data
[0x198] == 0x04 && ee_data
[0x199] == 6)
1481 } else if (ee_data
[0] == 0xff && ee_data
[1] == 0xff &&
1483 sa_offset
= 2; /* Grrr, damn Matrox boards. */
1486 #ifdef CONFIG_DDB5476
1487 if ((pdev
->bus
->number
== 0) && (PCI_SLOT(pdev
->devfn
) == 6)) {
1488 /* DDB5476 MAC address in first EEPROM locations. */
1490 /* No media table either */
1491 tp
->flags
&= ~HAS_MEDIA_TABLE
;
1494 #ifdef CONFIG_DDB5477
1495 if ((pdev
->bus
->number
== 0) && (PCI_SLOT(pdev
->devfn
) == 4)) {
1496 /* DDB5477 MAC address in first EEPROM locations. */
1498 /* No media table either */
1499 tp
->flags
&= ~HAS_MEDIA_TABLE
;
1502 #ifdef CONFIG_MIPS_COBALT
1503 if ((pdev
->bus
->number
== 0) &&
1504 ((PCI_SLOT(pdev
->devfn
) == 7) ||
1505 (PCI_SLOT(pdev
->devfn
) == 12))) {
1506 /* Cobalt MAC address in first EEPROM locations. */
1508 /* No media table either */
1509 tp
->flags
&= ~HAS_MEDIA_TABLE
;
1513 /* Check to see if we have a broken srom */
1514 if (ee_data
[0] == 0x61 && ee_data
[1] == 0x10) {
1515 /* pci_vendor_id and subsystem_id are swapped */
1516 ee_data
[0] = ee_data
[2];
1517 ee_data
[1] = ee_data
[3];
1521 /* HSC-PCI boards need to be byte-swaped and shifted
1522 * up 1 word. This shift needs to happen at the end
1523 * of the MAC first because of the 2 byte overlap.
1525 for (i
= 4; i
>= 0; i
-= 2) {
1526 ee_data
[17 + i
+ 3] = ee_data
[17 + i
];
1527 ee_data
[16 + i
+ 5] = ee_data
[16 + i
];
1532 for (i
= 0; i
< 6; i
++) {
1533 dev
->dev_addr
[i
] = ee_data
[i
+ sa_offset
];
1534 sum
+= ee_data
[i
+ sa_offset
];
1537 /* Lite-On boards have the address byte-swapped. */
1538 if ((dev
->dev_addr
[0] == 0xA0 || dev
->dev_addr
[0] == 0xC0 || dev
->dev_addr
[0] == 0x02)
1539 && dev
->dev_addr
[1] == 0x00)
1540 for (i
= 0; i
< 6; i
+=2) {
1541 char tmp
= dev
->dev_addr
[i
];
1542 dev
->dev_addr
[i
] = dev
->dev_addr
[i
+1];
1543 dev
->dev_addr
[i
+1] = tmp
;
1545 /* On the Zynx 315 Etherarray and other multiport boards only the
1546 first Tulip has an EEPROM.
1547 On Sparc systems the mac address is held in the OBP property
1548 "local-mac-address".
1549 The addresses of the subsequent ports are derived from the first.
1550 Many PCI BIOSes also incorrectly report the IRQ line, so we correct
1551 that here as well. */
1552 if (sum
== 0 || sum
== 6*0xff) {
1553 #if defined(__sparc__)
1554 struct pcidev_cookie
*pcp
= pdev
->sysdata
;
1557 for (i
= 0; i
< 5; i
++)
1558 dev
->dev_addr
[i
] = last_phys_addr
[i
];
1559 dev
->dev_addr
[i
] = last_phys_addr
[i
] + 1;
1560 #if defined(__sparc__)
1561 if ((pcp
!= NULL
) && prom_getproplen(pcp
->prom_node
,
1562 "local-mac-address") == 6) {
1563 prom_getproperty(pcp
->prom_node
, "local-mac-address",
1567 #if defined(__i386__) /* Patch up x86 BIOS bug. */
1573 for (i
= 0; i
< 6; i
++)
1574 last_phys_addr
[i
] = dev
->dev_addr
[i
];
1578 /* The lower four bits are the media type. */
1579 if (board_idx
>= 0 && board_idx
< MAX_UNITS
) {
1580 if (options
[board_idx
] & MEDIA_MASK
)
1581 tp
->default_port
= options
[board_idx
] & MEDIA_MASK
;
1582 if ((options
[board_idx
] & FullDuplex
) || full_duplex
[board_idx
] > 0)
1583 tp
->full_duplex
= 1;
1584 if (mtu
[board_idx
] > 0)
1585 dev
->mtu
= mtu
[board_idx
];
1587 if (dev
->mem_start
& MEDIA_MASK
)
1588 tp
->default_port
= dev
->mem_start
& MEDIA_MASK
;
1589 if (tp
->default_port
) {
1590 printk(KERN_INFO
"tulip%d: Transceiver selection forced to %s.\n",
1591 board_idx
, medianame
[tp
->default_port
& MEDIA_MASK
]);
1593 if (tulip_media_cap
[tp
->default_port
] & MediaAlwaysFD
)
1594 tp
->full_duplex
= 1;
1596 if (tp
->full_duplex
)
1597 tp
->full_duplex_lock
= 1;
1599 if (tulip_media_cap
[tp
->default_port
] & MediaIsMII
) {
1600 u16 media2advert
[] = { 0x20, 0x40, 0x03e0, 0x60, 0x80, 0x100, 0x200 };
1601 tp
->mii_advertise
= media2advert
[tp
->default_port
- 9];
1602 tp
->mii_advertise
|= (tp
->flags
& HAS_8023X
); /* Matching bits! */
1605 if (tp
->flags
& HAS_MEDIA_TABLE
) {
1606 sprintf(dev
->name
, "tulip%d", board_idx
); /* hack */
1607 tulip_parse_eeprom(dev
);
1608 strcpy(dev
->name
, "eth%d"); /* un-hack */
1611 if ((tp
->flags
& ALWAYS_CHECK_MII
) ||
1612 (tp
->mtable
&& tp
->mtable
->has_mii
) ||
1613 ( ! tp
->mtable
&& (tp
->flags
& HAS_MII
))) {
1614 if (tp
->mtable
&& tp
->mtable
->has_mii
) {
1615 for (i
= 0; i
< tp
->mtable
->leafcount
; i
++)
1616 if (tp
->mtable
->mleaf
[i
].media
== 11) {
1618 tp
->saved_if_port
= dev
->if_port
;
1619 tulip_select_media(dev
, 2);
1620 dev
->if_port
= tp
->saved_if_port
;
1625 /* Find the connected MII xcvrs.
1626 Doing this in open() would allow detecting external xcvrs
1627 later, but takes much time. */
1628 tulip_find_mii (dev
, board_idx
);
1631 /* The Tulip-specific entries in the device structure. */
1632 dev
->open
= tulip_open
;
1633 dev
->hard_start_xmit
= tulip_start_xmit
;
1634 dev
->tx_timeout
= tulip_tx_timeout
;
1635 dev
->watchdog_timeo
= TX_TIMEOUT
;
1636 #ifdef CONFIG_TULIP_NAPI
1637 dev
->poll
= tulip_poll
;
1640 dev
->stop
= tulip_close
;
1641 dev
->get_stats
= tulip_get_stats
;
1642 dev
->do_ioctl
= private_ioctl
;
1643 dev
->set_multicast_list
= set_rx_mode
;
1644 #ifdef CONFIG_NET_POLL_CONTROLLER
1645 dev
->poll_controller
= &poll_tulip
;
1648 if (register_netdev(dev
))
1649 goto err_out_free_ring
;
1651 printk(KERN_INFO
"%s: %s rev %d at %#3lx,",
1652 dev
->name
, chip_name
, chip_rev
, ioaddr
);
1653 pci_set_drvdata(pdev
, dev
);
1656 printk(" EEPROM not present,");
1657 for (i
= 0; i
< 6; i
++)
1658 printk("%c%2.2X", i
? ':' : ' ', dev
->dev_addr
[i
]);
1659 printk(", IRQ %d.\n", irq
);
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
;
1668 /* Reset the xcvr interface and turn on heartbeat. */
1674 outl(tp
->mtable
->csr12dir
| 0x100, ioaddr
+ CSR12
);
1677 if (tp
->mii_cnt
|| tulip_media_cap
[dev
->if_port
] & MediaIsMII
) {
1678 outl(csr6_mask_defstate
, ioaddr
+ CSR6
);
1679 outl(0x0000, ioaddr
+ CSR13
);
1680 outl(0x0000, ioaddr
+ CSR14
);
1681 outl(csr6_mask_hdcap
, ioaddr
+ CSR6
);
1683 t21142_start_nway(dev
);
1686 /* just do a reset for sanity sake */
1687 outl(0x0000, ioaddr
+ CSR13
);
1688 outl(0x0000, ioaddr
+ CSR14
);
1691 if ( ! tp
->mii_cnt
) {
1694 outl(csr6_ttm
| csr6_ca
, ioaddr
+ CSR6
);
1695 outl(0x30, ioaddr
+ CSR12
);
1696 outl(0x0001F078, ioaddr
+ CSR6
);
1697 outl(0x0201F078, ioaddr
+ CSR6
); /* Turn on autonegotiation. */
1702 outl(0x00000000, ioaddr
+ CSR6
);
1703 outl(0x000711C0, ioaddr
+ CSR14
); /* Turn on NWay. */
1704 outl(0x00000001, ioaddr
+ CSR13
);
1708 outl(0x01a80000, ioaddr
+ CSR6
);
1709 outl(0xFFFFFFFF, ioaddr
+ CSR14
);
1710 outl(0x00001000, ioaddr
+ CSR12
);
1713 /* No initialization necessary. */
1717 /* put the chip in snooze mode until opened */
1718 tulip_set_power_state (tp
, 0, 1);
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
);
1732 iounmap((void *)ioaddr
);
1736 pci_release_regions (pdev
);
1738 err_out_free_netdev
:
1746 static int tulip_suspend (struct pci_dev
*pdev
, u32 state
)
1748 struct net_device
*dev
= pci_get_drvdata(pdev
);
1750 if (dev
&& netif_running (dev
) && netif_device_present (dev
)) {
1751 netif_device_detach (dev
);
1753 /* pci_power_off(pdev, -1); */
1759 static int tulip_resume(struct pci_dev
*pdev
)
1761 struct net_device
*dev
= pci_get_drvdata(pdev
);
1763 if (dev
&& netif_running (dev
) && !netif_device_present (dev
)) {
1765 pci_enable_device (pdev
);
1767 /* pci_power_on(pdev); */
1769 netif_device_attach (dev
);
1774 #endif /* CONFIG_PM */
1777 static void __devexit
tulip_remove_one (struct pci_dev
*pdev
)
1779 struct net_device
*dev
= pci_get_drvdata (pdev
);
1780 struct tulip_private
*tp
;
1785 tp
= netdev_priv(dev
);
1786 unregister_netdev(dev
);
1787 pci_free_consistent (pdev
,
1788 sizeof (struct tulip_rx_desc
) * RX_RING_SIZE
+
1789 sizeof (struct tulip_tx_desc
) * TX_RING_SIZE
,
1790 tp
->rx_ring
, tp
->rx_ring_dma
);
1794 iounmap((void *)dev
->base_addr
);
1797 pci_release_regions (pdev
);
1798 pci_set_drvdata (pdev
, NULL
);
1800 /* pci_power_off (pdev, -1); */
1803 #ifdef CONFIG_NET_POLL_CONTROLLER
1805 * Polling 'interrupt' - used by things like netconsole to send skbs
1806 * without having to re-enable interrupts. It's not called while
1807 * the interrupt routine is executing.
1810 static void poll_tulip (struct net_device
*dev
)
1812 /* disable_irq here is not very nice, but with the lockless
1813 interrupt handler we have no other choice. */
1814 disable_irq(dev
->irq
);
1815 tulip_interrupt (dev
->irq
, dev
, NULL
);
1816 enable_irq(dev
->irq
);
1820 static struct pci_driver tulip_driver
= {
1822 .id_table
= tulip_pci_tbl
,
1823 .probe
= tulip_init_one
,
1824 .remove
= __devexit_p(tulip_remove_one
),
1826 .suspend
= tulip_suspend
,
1827 .resume
= tulip_resume
,
1828 #endif /* CONFIG_PM */
1832 static int __init
tulip_init (void)
1835 printk (KERN_INFO
"%s", version
);
1838 /* copy module parms into globals */
1839 tulip_rx_copybreak
= rx_copybreak
;
1840 tulip_max_interrupt_work
= max_interrupt_work
;
1842 /* probe for and init boards */
1843 return pci_module_init (&tulip_driver
);
1847 static void __exit
tulip_cleanup (void)
1849 pci_unregister_driver (&tulip_driver
);
1853 module_init(tulip_init
);
1854 module_exit(tulip_cleanup
);