MOXA linux-2.6.x / linux-2.6.9-uc0 from sdlinux-moxaart.tgz
[linux-2.6.9-moxart.git] / drivers / net / tulip / de2104x.c
blob71fc3d08416607832dabdb0cafda733c3d27dd21
1 /* de2104x.c: A Linux PCI Ethernet driver for Intel/Digital 21040/1 chips. */
2 /*
3 Copyright 2001,2003 Jeff Garzik <jgarzik@pobox.com>
5 Copyright 1994, 1995 Digital Equipment Corporation. [de4x5.c]
6 Written/copyright 1994-2001 by Donald Becker. [tulip.c]
8 This software may be used and distributed according to the terms of
9 the GNU General Public License (GPL), incorporated herein by reference.
10 Drivers based on or derived from this code fall under the GPL and must
11 retain the authorship, copyright and license notice. This file is not
12 a complete program and may only be used when the entire operating
13 system is licensed under the GPL.
15 See the file COPYING in this distribution for more information.
17 TODO, in rough priority order:
18 * Support forcing media type with a module parameter,
19 like dl2k.c/sundance.c
20 * Constants (module parms?) for Rx work limit
21 * Complete reset on PciErr
22 * Jumbo frames / dev->change_mtu
23 * Adjust Rx FIFO threshold and Max Rx DMA burst on Rx FIFO error
24 * Adjust Tx FIFO threshold and Max Tx DMA burst on Tx FIFO error
25 * Implement Tx software interrupt mitigation via
26 Tx descriptor bit
30 #define DRV_NAME "de2104x"
31 #define DRV_VERSION "0.7"
32 #define DRV_RELDATE "Mar 17, 2004"
34 #include <linux/config.h>
35 #include <linux/module.h>
36 #include <linux/kernel.h>
37 #include <linux/netdevice.h>
38 #include <linux/etherdevice.h>
39 #include <linux/init.h>
40 #include <linux/pci.h>
41 #include <linux/delay.h>
42 #include <linux/ethtool.h>
43 #include <linux/compiler.h>
44 #include <linux/rtnetlink.h>
45 #include <linux/crc32.h>
47 #include <asm/io.h>
48 #include <asm/irq.h>
49 #include <asm/uaccess.h>
50 #include <asm/unaligned.h>
52 /* These identify the driver base version and may not be removed. */
53 static char version[] =
54 KERN_INFO DRV_NAME " PCI Ethernet driver v" DRV_VERSION " (" DRV_RELDATE ")\n";
56 MODULE_AUTHOR("Jeff Garzik <jgarzik@pobox.com>");
57 MODULE_DESCRIPTION("Intel/Digital 21040/1 series PCI Ethernet driver");
58 MODULE_LICENSE("GPL");
60 static int debug = -1;
61 MODULE_PARM (debug, "i");
62 MODULE_PARM_DESC (debug, "de2104x bitmapped message enable number");
64 /* Set the copy breakpoint for the copy-only-tiny-buffer Rx structure. */
65 #if defined(__alpha__) || defined(__arm__) || defined(__hppa__) \
66 || defined(__sparc_) || defined(__ia64__) \
67 || defined(__sh__) || defined(__mips__)
68 static int rx_copybreak = 1518;
69 #else
70 static int rx_copybreak = 100;
71 #endif
72 MODULE_PARM (rx_copybreak, "i");
73 MODULE_PARM_DESC (rx_copybreak, "de2104x Breakpoint at which Rx packets are copied");
75 #define PFX DRV_NAME ": "
77 #define DE_DEF_MSG_ENABLE (NETIF_MSG_DRV | \
78 NETIF_MSG_PROBE | \
79 NETIF_MSG_LINK | \
80 NETIF_MSG_IFDOWN | \
81 NETIF_MSG_IFUP | \
82 NETIF_MSG_RX_ERR | \
83 NETIF_MSG_TX_ERR)
85 #define DE_RX_RING_SIZE 64
86 #define DE_TX_RING_SIZE 64
87 #define DE_RING_BYTES \
88 ((sizeof(struct de_desc) * DE_RX_RING_SIZE) + \
89 (sizeof(struct de_desc) * DE_TX_RING_SIZE))
90 #define NEXT_TX(N) (((N) + 1) & (DE_TX_RING_SIZE - 1))
91 #define NEXT_RX(N) (((N) + 1) & (DE_RX_RING_SIZE - 1))
92 #define TX_BUFFS_AVAIL(CP) \
93 (((CP)->tx_tail <= (CP)->tx_head) ? \
94 (CP)->tx_tail + (DE_TX_RING_SIZE - 1) - (CP)->tx_head : \
95 (CP)->tx_tail - (CP)->tx_head - 1)
97 #define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer.*/
98 #define RX_OFFSET 2
100 #define DE_SETUP_SKB ((struct sk_buff *) 1)
101 #define DE_DUMMY_SKB ((struct sk_buff *) 2)
102 #define DE_SETUP_FRAME_WORDS 96
103 #define DE_EEPROM_WORDS 256
104 #define DE_EEPROM_SIZE (DE_EEPROM_WORDS * sizeof(u16))
105 #define DE_MAX_MEDIA 5
107 #define DE_MEDIA_TP_AUTO 0
108 #define DE_MEDIA_BNC 1
109 #define DE_MEDIA_AUI 2
110 #define DE_MEDIA_TP 3
111 #define DE_MEDIA_TP_FD 4
112 #define DE_MEDIA_INVALID DE_MAX_MEDIA
113 #define DE_MEDIA_FIRST 0
114 #define DE_MEDIA_LAST (DE_MAX_MEDIA - 1)
115 #define DE_AUI_BNC (SUPPORTED_AUI | SUPPORTED_BNC)
117 #define DE_TIMER_LINK (60 * HZ)
118 #define DE_TIMER_NO_LINK (5 * HZ)
120 #define DE_NUM_REGS 16
121 #define DE_REGS_SIZE (DE_NUM_REGS * sizeof(u32))
122 #define DE_REGS_VER 1
124 /* Time in jiffies before concluding the transmitter is hung. */
125 #define TX_TIMEOUT (6*HZ)
127 #define DE_UNALIGNED_16(a) (u16)(get_unaligned((u16 *)(a)))
129 /* This is a mysterious value that can be written to CSR11 in the 21040 (only)
130 to support a pre-NWay full-duplex signaling mechanism using short frames.
131 No one knows what it should be, but if left at its default value some
132 10base2(!) packets trigger a full-duplex-request interrupt. */
133 #define FULL_DUPLEX_MAGIC 0x6969
135 enum {
136 /* NIC registers */
137 BusMode = 0x00,
138 TxPoll = 0x08,
139 RxPoll = 0x10,
140 RxRingAddr = 0x18,
141 TxRingAddr = 0x20,
142 MacStatus = 0x28,
143 MacMode = 0x30,
144 IntrMask = 0x38,
145 RxMissed = 0x40,
146 ROMCmd = 0x48,
147 CSR11 = 0x58,
148 SIAStatus = 0x60,
149 CSR13 = 0x68,
150 CSR14 = 0x70,
151 CSR15 = 0x78,
152 PCIPM = 0x40,
154 /* BusMode bits */
155 CmdReset = (1 << 0),
156 CacheAlign16 = 0x00008000,
157 BurstLen4 = 0x00000400,
159 /* Rx/TxPoll bits */
160 NormalTxPoll = (1 << 0),
161 NormalRxPoll = (1 << 0),
163 /* Tx/Rx descriptor status bits */
164 DescOwn = (1 << 31),
165 RxError = (1 << 15),
166 RxErrLong = (1 << 7),
167 RxErrCRC = (1 << 1),
168 RxErrFIFO = (1 << 0),
169 RxErrRunt = (1 << 11),
170 RxErrFrame = (1 << 14),
171 RingEnd = (1 << 25),
172 FirstFrag = (1 << 29),
173 LastFrag = (1 << 30),
174 TxError = (1 << 15),
175 TxFIFOUnder = (1 << 1),
176 TxLinkFail = (1 << 2) | (1 << 10) | (1 << 11),
177 TxMaxCol = (1 << 8),
178 TxOWC = (1 << 9),
179 TxJabber = (1 << 14),
180 SetupFrame = (1 << 27),
181 TxSwInt = (1 << 31),
183 /* MacStatus bits */
184 IntrOK = (1 << 16),
185 IntrErr = (1 << 15),
186 RxIntr = (1 << 6),
187 RxEmpty = (1 << 7),
188 TxIntr = (1 << 0),
189 TxEmpty = (1 << 2),
190 PciErr = (1 << 13),
191 TxState = (1 << 22) | (1 << 21) | (1 << 20),
192 RxState = (1 << 19) | (1 << 18) | (1 << 17),
193 LinkFail = (1 << 12),
194 LinkPass = (1 << 4),
195 RxStopped = (1 << 8),
196 TxStopped = (1 << 1),
198 /* MacMode bits */
199 TxEnable = (1 << 13),
200 RxEnable = (1 << 1),
201 RxTx = TxEnable | RxEnable,
202 FullDuplex = (1 << 9),
203 AcceptAllMulticast = (1 << 7),
204 AcceptAllPhys = (1 << 6),
205 BOCnt = (1 << 5),
206 MacModeClear = (1<<12) | (1<<11) | (1<<10) | (1<<8) | (1<<3) |
207 RxTx | BOCnt | AcceptAllPhys | AcceptAllMulticast,
209 /* ROMCmd bits */
210 EE_SHIFT_CLK = 0x02, /* EEPROM shift clock. */
211 EE_CS = 0x01, /* EEPROM chip select. */
212 EE_DATA_WRITE = 0x04, /* Data from the Tulip to EEPROM. */
213 EE_WRITE_0 = 0x01,
214 EE_WRITE_1 = 0x05,
215 EE_DATA_READ = 0x08, /* Data from the EEPROM chip. */
216 EE_ENB = (0x4800 | EE_CS),
218 /* The EEPROM commands include the alway-set leading bit. */
219 EE_READ_CMD = 6,
221 /* RxMissed bits */
222 RxMissedOver = (1 << 16),
223 RxMissedMask = 0xffff,
225 /* SROM-related bits */
226 SROMC0InfoLeaf = 27,
227 MediaBlockMask = 0x3f,
228 MediaCustomCSRs = (1 << 6),
230 /* PCIPM bits */
231 PM_Sleep = (1 << 31),
232 PM_Snooze = (1 << 30),
233 PM_Mask = PM_Sleep | PM_Snooze,
235 /* SIAStatus bits */
236 NWayState = (1 << 14) | (1 << 13) | (1 << 12),
237 NWayRestart = (1 << 12),
238 NonselPortActive = (1 << 9),
239 LinkFailStatus = (1 << 2),
240 NetCxnErr = (1 << 1),
243 static const u32 de_intr_mask =
244 IntrOK | IntrErr | RxIntr | RxEmpty | TxIntr | TxEmpty |
245 LinkPass | LinkFail | PciErr;
248 * Set the programmable burst length to 4 longwords for all:
249 * DMA errors result without these values. Cache align 16 long.
251 static const u32 de_bus_mode = CacheAlign16 | BurstLen4;
253 struct de_srom_media_block {
254 u8 opts;
255 u16 csr13;
256 u16 csr14;
257 u16 csr15;
258 } __attribute__((packed));
260 struct de_srom_info_leaf {
261 u16 default_media;
262 u8 n_blocks;
263 u8 unused;
264 } __attribute__((packed));
266 struct de_desc {
267 u32 opts1;
268 u32 opts2;
269 u32 addr1;
270 u32 addr2;
273 struct media_info {
274 u16 type; /* DE_MEDIA_xxx */
275 u16 csr13;
276 u16 csr14;
277 u16 csr15;
280 struct ring_info {
281 struct sk_buff *skb;
282 dma_addr_t mapping;
285 struct de_private {
286 unsigned tx_head;
287 unsigned tx_tail;
288 unsigned rx_tail;
290 void *regs;
291 struct net_device *dev;
292 spinlock_t lock;
294 struct de_desc *rx_ring;
295 struct de_desc *tx_ring;
296 struct ring_info tx_skb[DE_TX_RING_SIZE];
297 struct ring_info rx_skb[DE_RX_RING_SIZE];
298 unsigned rx_buf_sz;
299 dma_addr_t ring_dma;
301 u32 msg_enable;
303 struct net_device_stats net_stats;
305 struct pci_dev *pdev;
307 u16 setup_frame[DE_SETUP_FRAME_WORDS];
309 u32 media_type;
310 u32 media_supported;
311 u32 media_advertise;
312 struct media_info media[DE_MAX_MEDIA];
313 struct timer_list media_timer;
315 u8 *ee_data;
316 unsigned board_idx;
317 unsigned de21040 : 1;
318 unsigned media_lock : 1;
322 static void de_set_rx_mode (struct net_device *dev);
323 static void de_tx (struct de_private *de);
324 static void de_clean_rings (struct de_private *de);
325 static void de_media_interrupt (struct de_private *de, u32 status);
326 static void de21040_media_timer (unsigned long data);
327 static void de21041_media_timer (unsigned long data);
328 static unsigned int de_ok_to_advertise (struct de_private *de, u32 new_media);
331 static struct pci_device_id de_pci_tbl[] = {
332 { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP,
333 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
334 { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_PLUS,
335 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },
336 { },
338 MODULE_DEVICE_TABLE(pci, de_pci_tbl);
340 static const char * const media_name[DE_MAX_MEDIA] = {
341 "10baseT auto",
342 "BNC",
343 "AUI",
344 "10baseT-HD",
345 "10baseT-FD"
348 /* 21040 transceiver register settings:
349 * TP AUTO(unused), BNC(unused), AUI, TP, TP FD*/
350 static u16 t21040_csr13[] = { 0, 0, 0x8F09, 0x8F01, 0x8F01, };
351 static u16 t21040_csr14[] = { 0, 0, 0x0705, 0xFFFF, 0xFFFD, };
352 static u16 t21040_csr15[] = { 0, 0, 0x0006, 0x0000, 0x0000, };
354 /* 21041 transceiver register settings: TP AUTO, BNC, AUI, TP, TP FD*/
355 static u16 t21041_csr13[] = { 0xEF01, 0xEF09, 0xEF09, 0xEF01, 0xEF09, };
356 static u16 t21041_csr14[] = { 0xFFFF, 0xF7FD, 0xF7FD, 0x6F3F, 0x6F3D, };
357 static u16 t21041_csr15[] = { 0x0008, 0x0006, 0x000E, 0x0008, 0x0008, };
360 #define dr32(reg) readl(de->regs + (reg))
361 #define dw32(reg,val) writel((val), de->regs + (reg))
364 static void de_rx_err_acct (struct de_private *de, unsigned rx_tail,
365 u32 status, u32 len)
367 if (netif_msg_rx_err (de))
368 printk (KERN_DEBUG
369 "%s: rx err, slot %d status 0x%x len %d\n",
370 de->dev->name, rx_tail, status, len);
372 if ((status & 0x38000300) != 0x0300) {
373 /* Ingore earlier buffers. */
374 if ((status & 0xffff) != 0x7fff) {
375 if (netif_msg_rx_err(de))
376 printk(KERN_WARNING "%s: Oversized Ethernet frame "
377 "spanned multiple buffers, status %8.8x!\n",
378 de->dev->name, status);
379 de->net_stats.rx_length_errors++;
381 } else if (status & RxError) {
382 /* There was a fatal error. */
383 de->net_stats.rx_errors++; /* end of a packet.*/
384 if (status & 0x0890) de->net_stats.rx_length_errors++;
385 if (status & RxErrCRC) de->net_stats.rx_crc_errors++;
386 if (status & RxErrFIFO) de->net_stats.rx_fifo_errors++;
390 static void de_rx (struct de_private *de)
392 unsigned rx_tail = de->rx_tail;
393 unsigned rx_work = DE_RX_RING_SIZE;
394 unsigned drop = 0;
395 int rc;
397 while (rx_work--) {
398 u32 status, len;
399 dma_addr_t mapping;
400 struct sk_buff *skb, *copy_skb;
401 unsigned copying_skb, buflen;
403 skb = de->rx_skb[rx_tail].skb;
404 if (!skb)
405 BUG();
406 rmb();
407 status = le32_to_cpu(de->rx_ring[rx_tail].opts1);
408 if (status & DescOwn)
409 break;
411 len = ((status >> 16) & 0x7ff) - 4;
412 mapping = de->rx_skb[rx_tail].mapping;
414 if (unlikely(drop)) {
415 de->net_stats.rx_dropped++;
416 goto rx_next;
419 if (unlikely((status & 0x38008300) != 0x0300)) {
420 de_rx_err_acct(de, rx_tail, status, len);
421 goto rx_next;
424 copying_skb = (len <= rx_copybreak);
426 if (unlikely(netif_msg_rx_status(de)))
427 printk(KERN_DEBUG "%s: rx slot %d status 0x%x len %d copying? %d\n",
428 de->dev->name, rx_tail, status, len,
429 copying_skb);
431 buflen = copying_skb ? (len + RX_OFFSET) : de->rx_buf_sz;
432 copy_skb = dev_alloc_skb (buflen);
433 if (unlikely(!copy_skb)) {
434 de->net_stats.rx_dropped++;
435 drop = 1;
436 rx_work = 100;
437 goto rx_next;
439 copy_skb->dev = de->dev;
441 if (!copying_skb) {
442 pci_unmap_single(de->pdev, mapping,
443 buflen, PCI_DMA_FROMDEVICE);
444 skb_put(skb, len);
446 mapping =
447 de->rx_skb[rx_tail].mapping =
448 pci_map_single(de->pdev, copy_skb->tail,
449 buflen, PCI_DMA_FROMDEVICE);
450 de->rx_skb[rx_tail].skb = copy_skb;
451 } else {
452 pci_dma_sync_single_for_cpu(de->pdev, mapping, len, PCI_DMA_FROMDEVICE);
453 skb_reserve(copy_skb, RX_OFFSET);
454 memcpy(skb_put(copy_skb, len), skb->tail, len);
456 pci_dma_sync_single_for_device(de->pdev, mapping, len, PCI_DMA_FROMDEVICE);
458 /* We'll reuse the original ring buffer. */
459 skb = copy_skb;
462 skb->protocol = eth_type_trans (skb, de->dev);
464 de->net_stats.rx_packets++;
465 de->net_stats.rx_bytes += skb->len;
466 de->dev->last_rx = jiffies;
467 rc = netif_rx (skb);
468 if (rc == NET_RX_DROP)
469 drop = 1;
471 rx_next:
472 de->rx_ring[rx_tail].opts1 = cpu_to_le32(DescOwn);
473 if (rx_tail == (DE_RX_RING_SIZE - 1))
474 de->rx_ring[rx_tail].opts2 =
475 cpu_to_le32(RingEnd | de->rx_buf_sz);
476 else
477 de->rx_ring[rx_tail].opts2 = cpu_to_le32(de->rx_buf_sz);
478 de->rx_ring[rx_tail].addr1 = cpu_to_le32(mapping);
479 rx_tail = NEXT_RX(rx_tail);
482 if (!rx_work)
483 printk(KERN_WARNING "%s: rx work limit reached\n", de->dev->name);
485 de->rx_tail = rx_tail;
488 static irqreturn_t de_interrupt (int irq, void *dev_instance, struct pt_regs *regs)
490 struct net_device *dev = dev_instance;
491 struct de_private *de = dev->priv;
492 u32 status;
494 status = dr32(MacStatus);
495 if ((!(status & (IntrOK|IntrErr))) || (status == 0xFFFF))
496 return IRQ_NONE;
498 if (netif_msg_intr(de))
499 printk(KERN_DEBUG "%s: intr, status %08x mode %08x desc %u/%u/%u\n",
500 dev->name, status, dr32(MacMode), de->rx_tail, de->tx_head, de->tx_tail);
502 dw32(MacStatus, status);
504 if (status & (RxIntr | RxEmpty)) {
505 de_rx(de);
506 if (status & RxEmpty)
507 dw32(RxPoll, NormalRxPoll);
510 spin_lock(&de->lock);
512 if (status & (TxIntr | TxEmpty))
513 de_tx(de);
515 if (status & (LinkPass | LinkFail))
516 de_media_interrupt(de, status);
518 spin_unlock(&de->lock);
520 if (status & PciErr) {
521 u16 pci_status;
523 pci_read_config_word(de->pdev, PCI_STATUS, &pci_status);
524 pci_write_config_word(de->pdev, PCI_STATUS, pci_status);
525 printk(KERN_ERR "%s: PCI bus error, status=%08x, PCI status=%04x\n",
526 dev->name, status, pci_status);
529 return IRQ_HANDLED;
532 static void de_tx (struct de_private *de)
534 unsigned tx_head = de->tx_head;
535 unsigned tx_tail = de->tx_tail;
537 while (tx_tail != tx_head) {
538 struct sk_buff *skb;
539 u32 status;
541 rmb();
542 status = le32_to_cpu(de->tx_ring[tx_tail].opts1);
543 if (status & DescOwn)
544 break;
546 skb = de->tx_skb[tx_tail].skb;
547 if (!skb)
548 BUG();
549 if (unlikely(skb == DE_DUMMY_SKB))
550 goto next;
552 if (unlikely(skb == DE_SETUP_SKB)) {
553 pci_unmap_single(de->pdev, de->tx_skb[tx_tail].mapping,
554 sizeof(de->setup_frame), PCI_DMA_TODEVICE);
555 goto next;
558 pci_unmap_single(de->pdev, de->tx_skb[tx_tail].mapping,
559 skb->len, PCI_DMA_TODEVICE);
561 if (status & LastFrag) {
562 if (status & TxError) {
563 if (netif_msg_tx_err(de))
564 printk(KERN_DEBUG "%s: tx err, status 0x%x\n",
565 de->dev->name, status);
566 de->net_stats.tx_errors++;
567 if (status & TxOWC)
568 de->net_stats.tx_window_errors++;
569 if (status & TxMaxCol)
570 de->net_stats.tx_aborted_errors++;
571 if (status & TxLinkFail)
572 de->net_stats.tx_carrier_errors++;
573 if (status & TxFIFOUnder)
574 de->net_stats.tx_fifo_errors++;
575 } else {
576 de->net_stats.tx_packets++;
577 de->net_stats.tx_bytes += skb->len;
578 if (netif_msg_tx_done(de))
579 printk(KERN_DEBUG "%s: tx done, slot %d\n", de->dev->name, tx_tail);
581 dev_kfree_skb_irq(skb);
584 next:
585 de->tx_skb[tx_tail].skb = NULL;
587 tx_tail = NEXT_TX(tx_tail);
590 de->tx_tail = tx_tail;
592 if (netif_queue_stopped(de->dev) && (TX_BUFFS_AVAIL(de) > (DE_TX_RING_SIZE / 4)))
593 netif_wake_queue(de->dev);
596 static int de_start_xmit (struct sk_buff *skb, struct net_device *dev)
598 struct de_private *de = dev->priv;
599 unsigned int entry, tx_free;
600 u32 mapping, len, flags = FirstFrag | LastFrag;
601 struct de_desc *txd;
603 spin_lock_irq(&de->lock);
605 tx_free = TX_BUFFS_AVAIL(de);
606 if (tx_free == 0) {
607 netif_stop_queue(dev);
608 spin_unlock_irq(&de->lock);
609 return 1;
611 tx_free--;
613 entry = de->tx_head;
615 txd = &de->tx_ring[entry];
617 len = skb->len;
618 mapping = pci_map_single(de->pdev, skb->data, len, PCI_DMA_TODEVICE);
619 if (entry == (DE_TX_RING_SIZE - 1))
620 flags |= RingEnd;
621 if (!tx_free || (tx_free == (DE_TX_RING_SIZE / 2)))
622 flags |= TxSwInt;
623 flags |= len;
624 txd->opts2 = cpu_to_le32(flags);
625 txd->addr1 = cpu_to_le32(mapping);
627 de->tx_skb[entry].skb = skb;
628 de->tx_skb[entry].mapping = mapping;
629 wmb();
631 txd->opts1 = cpu_to_le32(DescOwn);
632 wmb();
634 de->tx_head = NEXT_TX(entry);
635 if (netif_msg_tx_queued(de))
636 printk(KERN_DEBUG "%s: tx queued, slot %d, skblen %d\n",
637 dev->name, entry, skb->len);
639 if (tx_free == 0)
640 netif_stop_queue(dev);
642 spin_unlock_irq(&de->lock);
644 /* Trigger an immediate transmit demand. */
645 dw32(TxPoll, NormalTxPoll);
646 dev->trans_start = jiffies;
648 return 0;
651 /* Set or clear the multicast filter for this adaptor.
652 Note that we only use exclusion around actually queueing the
653 new frame, not around filling de->setup_frame. This is non-deterministic
654 when re-entered but still correct. */
656 #undef set_bit_le
657 #define set_bit_le(i,p) do { ((char *)(p))[(i)/8] |= (1<<((i)%8)); } while(0)
659 static void build_setup_frame_hash(u16 *setup_frm, struct net_device *dev)
661 struct de_private *de = dev->priv;
662 u16 hash_table[32];
663 struct dev_mc_list *mclist;
664 int i;
665 u16 *eaddrs;
667 memset(hash_table, 0, sizeof(hash_table));
668 set_bit_le(255, hash_table); /* Broadcast entry */
669 /* This should work on big-endian machines as well. */
670 for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
671 i++, mclist = mclist->next) {
672 int index = ether_crc_le(ETH_ALEN, mclist->dmi_addr) & 0x1ff;
674 set_bit_le(index, hash_table);
676 for (i = 0; i < 32; i++) {
677 *setup_frm++ = hash_table[i];
678 *setup_frm++ = hash_table[i];
680 setup_frm = &de->setup_frame[13*6];
683 /* Fill the final entry with our physical address. */
684 eaddrs = (u16 *)dev->dev_addr;
685 *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
686 *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
687 *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
690 static void build_setup_frame_perfect(u16 *setup_frm, struct net_device *dev)
692 struct de_private *de = dev->priv;
693 struct dev_mc_list *mclist;
694 int i;
695 u16 *eaddrs;
697 /* We have <= 14 addresses so we can use the wonderful
698 16 address perfect filtering of the Tulip. */
699 for (i = 0, mclist = dev->mc_list; i < dev->mc_count;
700 i++, mclist = mclist->next) {
701 eaddrs = (u16 *)mclist->dmi_addr;
702 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
703 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
704 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
706 /* Fill the unused entries with the broadcast address. */
707 memset(setup_frm, 0xff, (15-i)*12);
708 setup_frm = &de->setup_frame[15*6];
710 /* Fill the final entry with our physical address. */
711 eaddrs = (u16 *)dev->dev_addr;
712 *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
713 *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
714 *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
718 static void __de_set_rx_mode (struct net_device *dev)
720 struct de_private *de = dev->priv;
721 u32 macmode;
722 unsigned int entry;
723 u32 mapping;
724 struct de_desc *txd;
725 struct de_desc *dummy_txd = NULL;
727 macmode = dr32(MacMode) & ~(AcceptAllMulticast | AcceptAllPhys);
729 if (dev->flags & IFF_PROMISC) { /* Set promiscuous. */
730 macmode |= AcceptAllMulticast | AcceptAllPhys;
731 goto out;
734 if ((dev->mc_count > 1000) || (dev->flags & IFF_ALLMULTI)) {
735 /* Too many to filter well -- accept all multicasts. */
736 macmode |= AcceptAllMulticast;
737 goto out;
740 /* Note that only the low-address shortword of setup_frame is valid!
741 The values are doubled for big-endian architectures. */
742 if (dev->mc_count > 14) /* Must use a multicast hash table. */
743 build_setup_frame_hash (de->setup_frame, dev);
744 else
745 build_setup_frame_perfect (de->setup_frame, dev);
748 * Now add this frame to the Tx list.
751 entry = de->tx_head;
753 /* Avoid a chip errata by prefixing a dummy entry. */
754 if (entry != 0) {
755 de->tx_skb[entry].skb = DE_DUMMY_SKB;
757 dummy_txd = &de->tx_ring[entry];
758 dummy_txd->opts2 = (entry == (DE_TX_RING_SIZE - 1)) ?
759 cpu_to_le32(RingEnd) : 0;
760 dummy_txd->addr1 = 0;
762 /* Must set DescOwned later to avoid race with chip */
764 entry = NEXT_TX(entry);
767 de->tx_skb[entry].skb = DE_SETUP_SKB;
768 de->tx_skb[entry].mapping = mapping =
769 pci_map_single (de->pdev, de->setup_frame,
770 sizeof (de->setup_frame), PCI_DMA_TODEVICE);
772 /* Put the setup frame on the Tx list. */
773 txd = &de->tx_ring[entry];
774 if (entry == (DE_TX_RING_SIZE - 1))
775 txd->opts2 = cpu_to_le32(SetupFrame | RingEnd | sizeof (de->setup_frame));
776 else
777 txd->opts2 = cpu_to_le32(SetupFrame | sizeof (de->setup_frame));
778 txd->addr1 = cpu_to_le32(mapping);
779 wmb();
781 txd->opts1 = cpu_to_le32(DescOwn);
782 wmb();
784 if (dummy_txd) {
785 dummy_txd->opts1 = cpu_to_le32(DescOwn);
786 wmb();
789 de->tx_head = NEXT_TX(entry);
791 if (TX_BUFFS_AVAIL(de) < 0)
792 BUG();
793 if (TX_BUFFS_AVAIL(de) == 0)
794 netif_stop_queue(dev);
796 /* Trigger an immediate transmit demand. */
797 dw32(TxPoll, NormalTxPoll);
799 out:
800 if (macmode != dr32(MacMode))
801 dw32(MacMode, macmode);
804 static void de_set_rx_mode (struct net_device *dev)
806 unsigned long flags;
807 struct de_private *de = dev->priv;
809 spin_lock_irqsave (&de->lock, flags);
810 __de_set_rx_mode(dev);
811 spin_unlock_irqrestore (&de->lock, flags);
814 static inline void de_rx_missed(struct de_private *de, u32 rx_missed)
816 if (unlikely(rx_missed & RxMissedOver))
817 de->net_stats.rx_missed_errors += RxMissedMask;
818 else
819 de->net_stats.rx_missed_errors += (rx_missed & RxMissedMask);
822 static void __de_get_stats(struct de_private *de)
824 u32 tmp = dr32(RxMissed); /* self-clearing */
826 de_rx_missed(de, tmp);
829 static struct net_device_stats *de_get_stats(struct net_device *dev)
831 struct de_private *de = dev->priv;
833 /* The chip only need report frame silently dropped. */
834 spin_lock_irq(&de->lock);
835 if (netif_running(dev) && netif_device_present(dev))
836 __de_get_stats(de);
837 spin_unlock_irq(&de->lock);
839 return &de->net_stats;
842 static inline int de_is_running (struct de_private *de)
844 return (dr32(MacStatus) & (RxState | TxState)) ? 1 : 0;
847 static void de_stop_rxtx (struct de_private *de)
849 u32 macmode;
850 unsigned int work = 1000;
852 macmode = dr32(MacMode);
853 if (macmode & RxTx) {
854 dw32(MacMode, macmode & ~RxTx);
855 dr32(MacMode);
858 while (--work > 0) {
859 if (!de_is_running(de))
860 return;
861 cpu_relax();
864 printk(KERN_WARNING "%s: timeout expired stopping DMA\n", de->dev->name);
867 static inline void de_start_rxtx (struct de_private *de)
869 u32 macmode;
871 macmode = dr32(MacMode);
872 if ((macmode & RxTx) != RxTx) {
873 dw32(MacMode, macmode | RxTx);
874 dr32(MacMode);
878 static void de_stop_hw (struct de_private *de)
881 udelay(5);
882 dw32(IntrMask, 0);
884 de_stop_rxtx(de);
886 dw32(MacStatus, dr32(MacStatus));
888 udelay(10);
890 de->rx_tail = 0;
891 de->tx_head = de->tx_tail = 0;
894 static void de_link_up(struct de_private *de)
896 if (!netif_carrier_ok(de->dev)) {
897 netif_carrier_on(de->dev);
898 if (netif_msg_link(de))
899 printk(KERN_INFO "%s: link up, media %s\n",
900 de->dev->name, media_name[de->media_type]);
904 static void de_link_down(struct de_private *de)
906 if (netif_carrier_ok(de->dev)) {
907 netif_carrier_off(de->dev);
908 if (netif_msg_link(de))
909 printk(KERN_INFO "%s: link down\n", de->dev->name);
913 static void de_set_media (struct de_private *de)
915 unsigned media = de->media_type;
916 u32 macmode = dr32(MacMode);
918 if (de_is_running(de))
919 BUG();
921 if (de->de21040)
922 dw32(CSR11, FULL_DUPLEX_MAGIC);
923 dw32(CSR13, 0); /* Reset phy */
924 dw32(CSR14, de->media[media].csr14);
925 dw32(CSR15, de->media[media].csr15);
926 dw32(CSR13, de->media[media].csr13);
928 /* must delay 10ms before writing to other registers,
929 * especially CSR6
931 mdelay(10);
933 if (media == DE_MEDIA_TP_FD)
934 macmode |= FullDuplex;
935 else
936 macmode &= ~FullDuplex;
938 if (netif_msg_link(de)) {
939 printk(KERN_INFO "%s: set link %s\n"
940 KERN_INFO "%s: mode 0x%x, sia 0x%x,0x%x,0x%x,0x%x\n"
941 KERN_INFO "%s: set mode 0x%x, set sia 0x%x,0x%x,0x%x\n",
942 de->dev->name, media_name[media],
943 de->dev->name, dr32(MacMode), dr32(SIAStatus),
944 dr32(CSR13), dr32(CSR14), dr32(CSR15),
945 de->dev->name, macmode, de->media[media].csr13,
946 de->media[media].csr14, de->media[media].csr15);
948 if (macmode != dr32(MacMode))
949 dw32(MacMode, macmode);
952 static void de_next_media (struct de_private *de, u32 *media,
953 unsigned int n_media)
955 unsigned int i;
957 for (i = 0; i < n_media; i++) {
958 if (de_ok_to_advertise(de, media[i])) {
959 de->media_type = media[i];
960 return;
965 static void de21040_media_timer (unsigned long data)
967 struct de_private *de = (struct de_private *) data;
968 struct net_device *dev = de->dev;
969 u32 status = dr32(SIAStatus);
970 unsigned int carrier;
971 unsigned long flags;
973 carrier = (status & NetCxnErr) ? 0 : 1;
975 if (carrier) {
976 if (de->media_type != DE_MEDIA_AUI && (status & LinkFailStatus))
977 goto no_link_yet;
979 de->media_timer.expires = jiffies + DE_TIMER_LINK;
980 add_timer(&de->media_timer);
981 if (!netif_carrier_ok(dev))
982 de_link_up(de);
983 else
984 if (netif_msg_timer(de))
985 printk(KERN_INFO "%s: %s link ok, status %x\n",
986 dev->name, media_name[de->media_type],
987 status);
988 return;
991 de_link_down(de);
993 if (de->media_lock)
994 return;
996 if (de->media_type == DE_MEDIA_AUI) {
997 u32 next_state = DE_MEDIA_TP;
998 de_next_media(de, &next_state, 1);
999 } else {
1000 u32 next_state = DE_MEDIA_AUI;
1001 de_next_media(de, &next_state, 1);
1004 spin_lock_irqsave(&de->lock, flags);
1005 de_stop_rxtx(de);
1006 spin_unlock_irqrestore(&de->lock, flags);
1007 de_set_media(de);
1008 de_start_rxtx(de);
1010 no_link_yet:
1011 de->media_timer.expires = jiffies + DE_TIMER_NO_LINK;
1012 add_timer(&de->media_timer);
1014 if (netif_msg_timer(de))
1015 printk(KERN_INFO "%s: no link, trying media %s, status %x\n",
1016 dev->name, media_name[de->media_type], status);
1019 static unsigned int de_ok_to_advertise (struct de_private *de, u32 new_media)
1021 switch (new_media) {
1022 case DE_MEDIA_TP_AUTO:
1023 if (!(de->media_advertise & ADVERTISED_Autoneg))
1024 return 0;
1025 if (!(de->media_advertise & (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full)))
1026 return 0;
1027 break;
1028 case DE_MEDIA_BNC:
1029 if (!(de->media_advertise & ADVERTISED_BNC))
1030 return 0;
1031 break;
1032 case DE_MEDIA_AUI:
1033 if (!(de->media_advertise & ADVERTISED_AUI))
1034 return 0;
1035 break;
1036 case DE_MEDIA_TP:
1037 if (!(de->media_advertise & ADVERTISED_10baseT_Half))
1038 return 0;
1039 break;
1040 case DE_MEDIA_TP_FD:
1041 if (!(de->media_advertise & ADVERTISED_10baseT_Full))
1042 return 0;
1043 break;
1046 return 1;
1049 static void de21041_media_timer (unsigned long data)
1051 struct de_private *de = (struct de_private *) data;
1052 struct net_device *dev = de->dev;
1053 u32 status = dr32(SIAStatus);
1054 unsigned int carrier;
1055 unsigned long flags;
1057 carrier = (status & NetCxnErr) ? 0 : 1;
1059 if (carrier) {
1060 if ((de->media_type == DE_MEDIA_TP_AUTO ||
1061 de->media_type == DE_MEDIA_TP ||
1062 de->media_type == DE_MEDIA_TP_FD) &&
1063 (status & LinkFailStatus))
1064 goto no_link_yet;
1066 de->media_timer.expires = jiffies + DE_TIMER_LINK;
1067 add_timer(&de->media_timer);
1068 if (!netif_carrier_ok(dev))
1069 de_link_up(de);
1070 else
1071 if (netif_msg_timer(de))
1072 printk(KERN_INFO "%s: %s link ok, mode %x status %x\n",
1073 dev->name, media_name[de->media_type],
1074 dr32(MacMode), status);
1075 return;
1078 de_link_down(de);
1080 /* if media type locked, don't switch media */
1081 if (de->media_lock)
1082 goto set_media;
1084 /* if activity detected, use that as hint for new media type */
1085 if (status & NonselPortActive) {
1086 unsigned int have_media = 1;
1088 /* if AUI/BNC selected, then activity is on TP port */
1089 if (de->media_type == DE_MEDIA_AUI ||
1090 de->media_type == DE_MEDIA_BNC) {
1091 if (de_ok_to_advertise(de, DE_MEDIA_TP_AUTO))
1092 de->media_type = DE_MEDIA_TP_AUTO;
1093 else
1094 have_media = 0;
1097 /* TP selected. If there is only TP and BNC, then it's BNC */
1098 else if (((de->media_supported & DE_AUI_BNC) == SUPPORTED_BNC) &&
1099 de_ok_to_advertise(de, DE_MEDIA_BNC))
1100 de->media_type = DE_MEDIA_BNC;
1102 /* TP selected. If there is only TP and AUI, then it's AUI */
1103 else if (((de->media_supported & DE_AUI_BNC) == SUPPORTED_AUI) &&
1104 de_ok_to_advertise(de, DE_MEDIA_AUI))
1105 de->media_type = DE_MEDIA_AUI;
1107 /* otherwise, ignore the hint */
1108 else
1109 have_media = 0;
1111 if (have_media)
1112 goto set_media;
1116 * Absent or ambiguous activity hint, move to next advertised
1117 * media state. If de->media_type is left unchanged, this
1118 * simply resets the PHY and reloads the current media settings.
1120 if (de->media_type == DE_MEDIA_AUI) {
1121 u32 next_states[] = { DE_MEDIA_BNC, DE_MEDIA_TP_AUTO };
1122 de_next_media(de, next_states, ARRAY_SIZE(next_states));
1123 } else if (de->media_type == DE_MEDIA_BNC) {
1124 u32 next_states[] = { DE_MEDIA_TP_AUTO, DE_MEDIA_AUI };
1125 de_next_media(de, next_states, ARRAY_SIZE(next_states));
1126 } else {
1127 u32 next_states[] = { DE_MEDIA_AUI, DE_MEDIA_BNC, DE_MEDIA_TP_AUTO };
1128 de_next_media(de, next_states, ARRAY_SIZE(next_states));
1131 set_media:
1132 spin_lock_irqsave(&de->lock, flags);
1133 de_stop_rxtx(de);
1134 spin_unlock_irqrestore(&de->lock, flags);
1135 de_set_media(de);
1136 de_start_rxtx(de);
1138 no_link_yet:
1139 de->media_timer.expires = jiffies + DE_TIMER_NO_LINK;
1140 add_timer(&de->media_timer);
1142 if (netif_msg_timer(de))
1143 printk(KERN_INFO "%s: no link, trying media %s, status %x\n",
1144 dev->name, media_name[de->media_type], status);
1147 static void de_media_interrupt (struct de_private *de, u32 status)
1149 if (status & LinkPass) {
1150 de_link_up(de);
1151 mod_timer(&de->media_timer, jiffies + DE_TIMER_LINK);
1152 return;
1155 if (!(status & LinkFail))
1156 BUG();
1158 if (netif_carrier_ok(de->dev)) {
1159 de_link_down(de);
1160 mod_timer(&de->media_timer, jiffies + DE_TIMER_NO_LINK);
1164 static int de_reset_mac (struct de_private *de)
1166 u32 status, tmp;
1169 * Reset MAC. de4x5.c and tulip.c examined for "advice"
1170 * in this area.
1173 if (dr32(BusMode) == 0xffffffff)
1174 return -EBUSY;
1176 /* Reset the chip, holding bit 0 set at least 50 PCI cycles. */
1177 dw32 (BusMode, CmdReset);
1178 mdelay (1);
1180 dw32 (BusMode, de_bus_mode);
1181 mdelay (1);
1183 for (tmp = 0; tmp < 5; tmp++) {
1184 dr32 (BusMode);
1185 mdelay (1);
1188 mdelay (1);
1190 status = dr32(MacStatus);
1191 if (status & (RxState | TxState))
1192 return -EBUSY;
1193 if (status == 0xffffffff)
1194 return -ENODEV;
1195 return 0;
1198 static void de_adapter_wake (struct de_private *de)
1200 u32 pmctl;
1202 if (de->de21040)
1203 return;
1205 pci_read_config_dword(de->pdev, PCIPM, &pmctl);
1206 if (pmctl & PM_Mask) {
1207 pmctl &= ~PM_Mask;
1208 pci_write_config_dword(de->pdev, PCIPM, pmctl);
1210 /* de4x5.c delays, so we do too */
1211 current->state = TASK_UNINTERRUPTIBLE;
1212 schedule_timeout(msecs_to_jiffies(10));
1216 static void de_adapter_sleep (struct de_private *de)
1218 u32 pmctl;
1220 if (de->de21040)
1221 return;
1223 pci_read_config_dword(de->pdev, PCIPM, &pmctl);
1224 pmctl |= PM_Sleep;
1225 pci_write_config_dword(de->pdev, PCIPM, pmctl);
1228 static int de_init_hw (struct de_private *de)
1230 struct net_device *dev = de->dev;
1231 u32 macmode;
1232 int rc;
1234 de_adapter_wake(de);
1236 macmode = dr32(MacMode) & ~MacModeClear;
1238 rc = de_reset_mac(de);
1239 if (rc)
1240 return rc;
1242 de_set_media(de); /* reset phy */
1244 dw32(RxRingAddr, de->ring_dma);
1245 dw32(TxRingAddr, de->ring_dma + (sizeof(struct de_desc) * DE_RX_RING_SIZE));
1247 dw32(MacMode, RxTx | macmode);
1249 dr32(RxMissed); /* self-clearing */
1251 dw32(IntrMask, de_intr_mask);
1253 de_set_rx_mode(dev);
1255 return 0;
1258 static int de_refill_rx (struct de_private *de)
1260 unsigned i;
1262 for (i = 0; i < DE_RX_RING_SIZE; i++) {
1263 struct sk_buff *skb;
1265 skb = dev_alloc_skb(de->rx_buf_sz);
1266 if (!skb)
1267 goto err_out;
1269 skb->dev = de->dev;
1271 de->rx_skb[i].mapping = pci_map_single(de->pdev,
1272 skb->tail, de->rx_buf_sz, PCI_DMA_FROMDEVICE);
1273 de->rx_skb[i].skb = skb;
1275 de->rx_ring[i].opts1 = cpu_to_le32(DescOwn);
1276 if (i == (DE_RX_RING_SIZE - 1))
1277 de->rx_ring[i].opts2 =
1278 cpu_to_le32(RingEnd | de->rx_buf_sz);
1279 else
1280 de->rx_ring[i].opts2 = cpu_to_le32(de->rx_buf_sz);
1281 de->rx_ring[i].addr1 = cpu_to_le32(de->rx_skb[i].mapping);
1282 de->rx_ring[i].addr2 = 0;
1285 return 0;
1287 err_out:
1288 de_clean_rings(de);
1289 return -ENOMEM;
1292 static int de_init_rings (struct de_private *de)
1294 memset(de->tx_ring, 0, sizeof(struct de_desc) * DE_TX_RING_SIZE);
1295 de->tx_ring[DE_TX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1297 de->rx_tail = 0;
1298 de->tx_head = de->tx_tail = 0;
1300 return de_refill_rx (de);
1303 static int de_alloc_rings (struct de_private *de)
1305 de->rx_ring = pci_alloc_consistent(de->pdev, DE_RING_BYTES, &de->ring_dma);
1306 if (!de->rx_ring)
1307 return -ENOMEM;
1308 de->tx_ring = &de->rx_ring[DE_RX_RING_SIZE];
1309 return de_init_rings(de);
1312 static void de_clean_rings (struct de_private *de)
1314 unsigned i;
1316 memset(de->rx_ring, 0, sizeof(struct de_desc) * DE_RX_RING_SIZE);
1317 de->rx_ring[DE_RX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1318 wmb();
1319 memset(de->tx_ring, 0, sizeof(struct de_desc) * DE_TX_RING_SIZE);
1320 de->tx_ring[DE_TX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1321 wmb();
1323 for (i = 0; i < DE_RX_RING_SIZE; i++) {
1324 if (de->rx_skb[i].skb) {
1325 pci_unmap_single(de->pdev, de->rx_skb[i].mapping,
1326 de->rx_buf_sz, PCI_DMA_FROMDEVICE);
1327 dev_kfree_skb(de->rx_skb[i].skb);
1331 for (i = 0; i < DE_TX_RING_SIZE; i++) {
1332 struct sk_buff *skb = de->tx_skb[i].skb;
1333 if ((skb) && (skb != DE_DUMMY_SKB)) {
1334 if (skb != DE_SETUP_SKB) {
1335 dev_kfree_skb(skb);
1336 de->net_stats.tx_dropped++;
1337 pci_unmap_single(de->pdev,
1338 de->tx_skb[i].mapping,
1339 skb->len, PCI_DMA_TODEVICE);
1340 } else {
1341 pci_unmap_single(de->pdev,
1342 de->tx_skb[i].mapping,
1343 sizeof(de->setup_frame),
1344 PCI_DMA_TODEVICE);
1349 memset(&de->rx_skb, 0, sizeof(struct ring_info) * DE_RX_RING_SIZE);
1350 memset(&de->tx_skb, 0, sizeof(struct ring_info) * DE_TX_RING_SIZE);
1353 static void de_free_rings (struct de_private *de)
1355 de_clean_rings(de);
1356 pci_free_consistent(de->pdev, DE_RING_BYTES, de->rx_ring, de->ring_dma);
1357 de->rx_ring = NULL;
1358 de->tx_ring = NULL;
1361 static int de_open (struct net_device *dev)
1363 struct de_private *de = dev->priv;
1364 int rc;
1365 unsigned long flags;
1367 if (netif_msg_ifup(de))
1368 printk(KERN_DEBUG "%s: enabling interface\n", dev->name);
1370 de->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32);
1372 rc = de_alloc_rings(de);
1373 if (rc) {
1374 printk(KERN_ERR "%s: ring allocation failure, err=%d\n",
1375 dev->name, rc);
1376 return rc;
1379 rc = de_init_hw(de);
1380 if (rc) {
1381 printk(KERN_ERR "%s: h/w init failure, err=%d\n",
1382 dev->name, rc);
1383 goto err_out_free;
1386 rc = request_irq(dev->irq, de_interrupt, SA_SHIRQ, dev->name, dev);
1387 if (rc) {
1388 printk(KERN_ERR "%s: IRQ %d request failure, err=%d\n",
1389 dev->name, dev->irq, rc);
1390 goto err_out_hw;
1393 netif_start_queue(dev);
1394 mod_timer(&de->media_timer, jiffies + DE_TIMER_NO_LINK);
1396 return 0;
1398 err_out_hw:
1399 spin_lock_irqsave(&de->lock, flags);
1400 de_stop_hw(de);
1401 spin_unlock_irqrestore(&de->lock, flags);
1403 err_out_free:
1404 de_free_rings(de);
1405 return rc;
1408 static int de_close (struct net_device *dev)
1410 struct de_private *de = dev->priv;
1411 unsigned long flags;
1413 if (netif_msg_ifdown(de))
1414 printk(KERN_DEBUG "%s: disabling interface\n", dev->name);
1416 del_timer_sync(&de->media_timer);
1418 spin_lock_irqsave(&de->lock, flags);
1419 de_stop_hw(de);
1420 netif_stop_queue(dev);
1421 netif_carrier_off(dev);
1422 spin_unlock_irqrestore(&de->lock, flags);
1424 free_irq(dev->irq, dev);
1426 de_free_rings(de);
1427 de_adapter_sleep(de);
1428 pci_disable_device(de->pdev);
1429 return 0;
1432 static void de_tx_timeout (struct net_device *dev)
1434 struct de_private *de = dev->priv;
1436 printk(KERN_DEBUG "%s: NIC status %08x mode %08x sia %08x desc %u/%u/%u\n",
1437 dev->name, dr32(MacStatus), dr32(MacMode), dr32(SIAStatus),
1438 de->rx_tail, de->tx_head, de->tx_tail);
1440 del_timer_sync(&de->media_timer);
1442 disable_irq(dev->irq);
1443 spin_lock_irq(&de->lock);
1445 de_stop_hw(de);
1446 netif_stop_queue(dev);
1447 netif_carrier_off(dev);
1449 spin_unlock_irq(&de->lock);
1450 enable_irq(dev->irq);
1452 /* Update the error counts. */
1453 __de_get_stats(de);
1455 synchronize_irq(dev->irq);
1456 de_clean_rings(de);
1458 de_init_hw(de);
1460 netif_wake_queue(dev);
1463 static void __de_get_regs(struct de_private *de, u8 *buf)
1465 int i;
1466 u32 *rbuf = (u32 *)buf;
1468 /* read all CSRs */
1469 for (i = 0; i < DE_NUM_REGS; i++)
1470 rbuf[i] = dr32(i * 8);
1472 /* handle self-clearing RxMissed counter, CSR8 */
1473 de_rx_missed(de, rbuf[8]);
1476 static int __de_get_settings(struct de_private *de, struct ethtool_cmd *ecmd)
1478 ecmd->supported = de->media_supported;
1479 ecmd->transceiver = XCVR_INTERNAL;
1480 ecmd->phy_address = 0;
1481 ecmd->advertising = de->media_advertise;
1483 switch (de->media_type) {
1484 case DE_MEDIA_AUI:
1485 ecmd->port = PORT_AUI;
1486 ecmd->speed = 5;
1487 break;
1488 case DE_MEDIA_BNC:
1489 ecmd->port = PORT_BNC;
1490 ecmd->speed = 2;
1491 break;
1492 default:
1493 ecmd->port = PORT_TP;
1494 ecmd->speed = SPEED_10;
1495 break;
1498 if (dr32(MacMode) & FullDuplex)
1499 ecmd->duplex = DUPLEX_FULL;
1500 else
1501 ecmd->duplex = DUPLEX_HALF;
1503 if (de->media_lock)
1504 ecmd->autoneg = AUTONEG_DISABLE;
1505 else
1506 ecmd->autoneg = AUTONEG_ENABLE;
1508 /* ignore maxtxpkt, maxrxpkt for now */
1510 return 0;
1513 static int __de_set_settings(struct de_private *de, struct ethtool_cmd *ecmd)
1515 u32 new_media;
1516 unsigned int media_lock;
1518 if (ecmd->speed != SPEED_10 && ecmd->speed != 5 && ecmd->speed != 2)
1519 return -EINVAL;
1520 if (de->de21040 && ecmd->speed == 2)
1521 return -EINVAL;
1522 if (ecmd->duplex != DUPLEX_HALF && ecmd->duplex != DUPLEX_FULL)
1523 return -EINVAL;
1524 if (ecmd->port != PORT_TP && ecmd->port != PORT_AUI && ecmd->port != PORT_BNC)
1525 return -EINVAL;
1526 if (de->de21040 && ecmd->port == PORT_BNC)
1527 return -EINVAL;
1528 if (ecmd->transceiver != XCVR_INTERNAL)
1529 return -EINVAL;
1530 if (ecmd->autoneg != AUTONEG_DISABLE && ecmd->autoneg != AUTONEG_ENABLE)
1531 return -EINVAL;
1532 if (ecmd->advertising & ~de->media_supported)
1533 return -EINVAL;
1534 if (ecmd->autoneg == AUTONEG_ENABLE &&
1535 (!(ecmd->advertising & ADVERTISED_Autoneg)))
1536 return -EINVAL;
1538 switch (ecmd->port) {
1539 case PORT_AUI:
1540 new_media = DE_MEDIA_AUI;
1541 if (!(ecmd->advertising & ADVERTISED_AUI))
1542 return -EINVAL;
1543 break;
1544 case PORT_BNC:
1545 new_media = DE_MEDIA_BNC;
1546 if (!(ecmd->advertising & ADVERTISED_BNC))
1547 return -EINVAL;
1548 break;
1549 default:
1550 if (ecmd->autoneg == AUTONEG_ENABLE)
1551 new_media = DE_MEDIA_TP_AUTO;
1552 else if (ecmd->duplex == DUPLEX_FULL)
1553 new_media = DE_MEDIA_TP_FD;
1554 else
1555 new_media = DE_MEDIA_TP;
1556 if (!(ecmd->advertising & ADVERTISED_TP))
1557 return -EINVAL;
1558 if (!(ecmd->advertising & (ADVERTISED_10baseT_Full | ADVERTISED_10baseT_Half)))
1559 return -EINVAL;
1560 break;
1563 media_lock = (ecmd->autoneg == AUTONEG_ENABLE) ? 0 : 1;
1565 if ((new_media == de->media_type) &&
1566 (media_lock == de->media_lock) &&
1567 (ecmd->advertising == de->media_advertise))
1568 return 0; /* nothing to change */
1570 de_link_down(de);
1571 de_stop_rxtx(de);
1573 de->media_type = new_media;
1574 de->media_lock = media_lock;
1575 de->media_advertise = ecmd->advertising;
1576 de_set_media(de);
1578 return 0;
1581 static void de_get_drvinfo (struct net_device *dev,struct ethtool_drvinfo *info)
1583 struct de_private *de = dev->priv;
1585 strcpy (info->driver, DRV_NAME);
1586 strcpy (info->version, DRV_VERSION);
1587 strcpy (info->bus_info, pci_name(de->pdev));
1588 info->eedump_len = DE_EEPROM_SIZE;
1591 static int de_get_regs_len(struct net_device *dev)
1593 return DE_REGS_SIZE;
1596 static int de_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1598 struct de_private *de = dev->priv;
1599 int rc;
1601 spin_lock_irq(&de->lock);
1602 rc = __de_get_settings(de, ecmd);
1603 spin_unlock_irq(&de->lock);
1605 return rc;
1608 static int de_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1610 struct de_private *de = dev->priv;
1611 int rc;
1613 spin_lock_irq(&de->lock);
1614 rc = __de_set_settings(de, ecmd);
1615 spin_unlock_irq(&de->lock);
1617 return rc;
1620 static u32 de_get_msglevel(struct net_device *dev)
1622 struct de_private *de = dev->priv;
1624 return de->msg_enable;
1627 static void de_set_msglevel(struct net_device *dev, u32 msglvl)
1629 struct de_private *de = dev->priv;
1631 de->msg_enable = msglvl;
1634 static int de_get_eeprom(struct net_device *dev,
1635 struct ethtool_eeprom *eeprom, u8 *data)
1637 struct de_private *de = dev->priv;
1639 if (!de->ee_data)
1640 return -EOPNOTSUPP;
1641 if ((eeprom->offset != 0) || (eeprom->magic != 0) ||
1642 (eeprom->len != DE_EEPROM_SIZE))
1643 return -EINVAL;
1644 memcpy(data, de->ee_data, eeprom->len);
1646 return 0;
1649 static int de_nway_reset(struct net_device *dev)
1651 struct de_private *de = dev->priv;
1652 u32 status;
1654 if (de->media_type != DE_MEDIA_TP_AUTO)
1655 return -EINVAL;
1656 if (netif_carrier_ok(de->dev))
1657 de_link_down(de);
1659 status = dr32(SIAStatus);
1660 dw32(SIAStatus, (status & ~NWayState) | NWayRestart);
1661 if (netif_msg_link(de))
1662 printk(KERN_INFO "%s: link nway restart, status %x,%x\n",
1663 de->dev->name, status, dr32(SIAStatus));
1664 return 0;
1667 static void de_get_regs(struct net_device *dev, struct ethtool_regs *regs,
1668 void *data)
1670 struct de_private *de = dev->priv;
1672 regs->version = (DE_REGS_VER << 2) | de->de21040;
1674 spin_lock_irq(&de->lock);
1675 __de_get_regs(de, data);
1676 spin_unlock_irq(&de->lock);
1679 static struct ethtool_ops de_ethtool_ops = {
1680 .get_link = ethtool_op_get_link,
1681 .get_tx_csum = ethtool_op_get_tx_csum,
1682 .get_sg = ethtool_op_get_sg,
1683 .get_drvinfo = de_get_drvinfo,
1684 .get_regs_len = de_get_regs_len,
1685 .get_settings = de_get_settings,
1686 .set_settings = de_set_settings,
1687 .get_msglevel = de_get_msglevel,
1688 .set_msglevel = de_set_msglevel,
1689 .get_eeprom = de_get_eeprom,
1690 .nway_reset = de_nway_reset,
1691 .get_regs = de_get_regs,
1694 static void __init de21040_get_mac_address (struct de_private *de)
1696 unsigned i;
1698 dw32 (ROMCmd, 0); /* Reset the pointer with a dummy write. */
1700 for (i = 0; i < 6; i++) {
1701 int value, boguscnt = 100000;
1703 value = dr32(ROMCmd);
1704 while (value < 0 && --boguscnt > 0);
1705 de->dev->dev_addr[i] = value;
1706 if (boguscnt <= 0)
1707 printk(KERN_WARNING PFX "timeout reading 21040 MAC address byte %u\n", i);
1711 static void __init de21040_get_media_info(struct de_private *de)
1713 unsigned int i;
1715 de->media_type = DE_MEDIA_TP;
1716 de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Full |
1717 SUPPORTED_10baseT_Half | SUPPORTED_AUI;
1718 de->media_advertise = de->media_supported;
1720 for (i = 0; i < DE_MAX_MEDIA; i++) {
1721 switch (i) {
1722 case DE_MEDIA_AUI:
1723 case DE_MEDIA_TP:
1724 case DE_MEDIA_TP_FD:
1725 de->media[i].type = i;
1726 de->media[i].csr13 = t21040_csr13[i];
1727 de->media[i].csr14 = t21040_csr14[i];
1728 de->media[i].csr15 = t21040_csr15[i];
1729 break;
1730 default:
1731 de->media[i].type = DE_MEDIA_INVALID;
1732 break;
1737 /* Note: this routine returns extra data bits for size detection. */
1738 static unsigned __init tulip_read_eeprom(void *regs, int location, int addr_len)
1740 int i;
1741 unsigned retval = 0;
1742 void *ee_addr = regs + ROMCmd;
1743 int read_cmd = location | (EE_READ_CMD << addr_len);
1745 writel(EE_ENB & ~EE_CS, ee_addr);
1746 writel(EE_ENB, ee_addr);
1748 /* Shift the read command bits out. */
1749 for (i = 4 + addr_len; i >= 0; i--) {
1750 short dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
1751 writel(EE_ENB | dataval, ee_addr);
1752 readl(ee_addr);
1753 writel(EE_ENB | dataval | EE_SHIFT_CLK, ee_addr);
1754 readl(ee_addr);
1755 retval = (retval << 1) | ((readl(ee_addr) & EE_DATA_READ) ? 1 : 0);
1757 writel(EE_ENB, ee_addr);
1758 readl(ee_addr);
1760 for (i = 16; i > 0; i--) {
1761 writel(EE_ENB | EE_SHIFT_CLK, ee_addr);
1762 readl(ee_addr);
1763 retval = (retval << 1) | ((readl(ee_addr) & EE_DATA_READ) ? 1 : 0);
1764 writel(EE_ENB, ee_addr);
1765 readl(ee_addr);
1768 /* Terminate the EEPROM access. */
1769 writel(EE_ENB & ~EE_CS, ee_addr);
1770 return retval;
1773 static void __init de21041_get_srom_info (struct de_private *de)
1775 unsigned i, sa_offset = 0, ofs;
1776 u8 ee_data[DE_EEPROM_SIZE + 6] = {};
1777 unsigned ee_addr_size = tulip_read_eeprom(de->regs, 0xff, 8) & 0x40000 ? 8 : 6;
1778 struct de_srom_info_leaf *il;
1779 void *bufp;
1781 /* download entire eeprom */
1782 for (i = 0; i < DE_EEPROM_WORDS; i++)
1783 ((u16 *)ee_data)[i] =
1784 le16_to_cpu(tulip_read_eeprom(de->regs, i, ee_addr_size));
1786 /* DEC now has a specification but early board makers
1787 just put the address in the first EEPROM locations. */
1788 /* This does memcmp(eedata, eedata+16, 8) */
1789 for (i = 0; i < 8; i ++)
1790 if (ee_data[i] != ee_data[16+i])
1791 sa_offset = 20;
1793 /* store MAC address */
1794 for (i = 0; i < 6; i ++)
1795 de->dev->dev_addr[i] = ee_data[i + sa_offset];
1797 /* get offset of controller 0 info leaf. ignore 2nd byte. */
1798 ofs = ee_data[SROMC0InfoLeaf];
1799 if (ofs >= (sizeof(ee_data) - sizeof(struct de_srom_info_leaf) - sizeof(struct de_srom_media_block)))
1800 goto bad_srom;
1802 /* get pointer to info leaf */
1803 il = (struct de_srom_info_leaf *) &ee_data[ofs];
1805 /* paranoia checks */
1806 if (il->n_blocks == 0)
1807 goto bad_srom;
1808 if ((sizeof(ee_data) - ofs) <
1809 (sizeof(struct de_srom_info_leaf) + (sizeof(struct de_srom_media_block) * il->n_blocks)))
1810 goto bad_srom;
1812 /* get default media type */
1813 switch (DE_UNALIGNED_16(&il->default_media)) {
1814 case 0x0001: de->media_type = DE_MEDIA_BNC; break;
1815 case 0x0002: de->media_type = DE_MEDIA_AUI; break;
1816 case 0x0204: de->media_type = DE_MEDIA_TP_FD; break;
1817 default: de->media_type = DE_MEDIA_TP_AUTO; break;
1820 if (netif_msg_probe(de))
1821 printk(KERN_INFO "de%d: SROM leaf offset %u, default media %s\n",
1822 de->board_idx, ofs,
1823 media_name[de->media_type]);
1825 /* init SIA register values to defaults */
1826 for (i = 0; i < DE_MAX_MEDIA; i++) {
1827 de->media[i].type = DE_MEDIA_INVALID;
1828 de->media[i].csr13 = 0xffff;
1829 de->media[i].csr14 = 0xffff;
1830 de->media[i].csr15 = 0xffff;
1833 /* parse media blocks to see what medias are supported,
1834 * and if any custom CSR values are provided
1836 bufp = ((void *)il) + sizeof(*il);
1837 for (i = 0; i < il->n_blocks; i++) {
1838 struct de_srom_media_block *ib = bufp;
1839 unsigned idx;
1841 /* index based on media type in media block */
1842 switch(ib->opts & MediaBlockMask) {
1843 case 0: /* 10baseT */
1844 de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Half
1845 | SUPPORTED_Autoneg;
1846 idx = DE_MEDIA_TP;
1847 de->media[DE_MEDIA_TP_AUTO].type = DE_MEDIA_TP_AUTO;
1848 break;
1849 case 1: /* BNC */
1850 de->media_supported |= SUPPORTED_BNC;
1851 idx = DE_MEDIA_BNC;
1852 break;
1853 case 2: /* AUI */
1854 de->media_supported |= SUPPORTED_AUI;
1855 idx = DE_MEDIA_AUI;
1856 break;
1857 case 4: /* 10baseT-FD */
1858 de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Full
1859 | SUPPORTED_Autoneg;
1860 idx = DE_MEDIA_TP_FD;
1861 de->media[DE_MEDIA_TP_AUTO].type = DE_MEDIA_TP_AUTO;
1862 break;
1863 default:
1864 goto bad_srom;
1867 de->media[idx].type = idx;
1869 if (netif_msg_probe(de))
1870 printk(KERN_INFO "de%d: media block #%u: %s",
1871 de->board_idx, i,
1872 media_name[de->media[idx].type]);
1874 bufp += sizeof (ib->opts);
1876 if (ib->opts & MediaCustomCSRs) {
1877 de->media[idx].csr13 = DE_UNALIGNED_16(&ib->csr13);
1878 de->media[idx].csr14 = DE_UNALIGNED_16(&ib->csr14);
1879 de->media[idx].csr15 = DE_UNALIGNED_16(&ib->csr15);
1880 bufp += sizeof(ib->csr13) + sizeof(ib->csr14) +
1881 sizeof(ib->csr15);
1883 if (netif_msg_probe(de))
1884 printk(" (%x,%x,%x)\n",
1885 de->media[idx].csr13,
1886 de->media[idx].csr14,
1887 de->media[idx].csr15);
1889 } else if (netif_msg_probe(de))
1890 printk("\n");
1892 if (bufp > ((void *)&ee_data[DE_EEPROM_SIZE - 3]))
1893 break;
1896 de->media_advertise = de->media_supported;
1898 fill_defaults:
1899 /* fill in defaults, for cases where custom CSRs not used */
1900 for (i = 0; i < DE_MAX_MEDIA; i++) {
1901 if (de->media[i].csr13 == 0xffff)
1902 de->media[i].csr13 = t21041_csr13[i];
1903 if (de->media[i].csr14 == 0xffff)
1904 de->media[i].csr14 = t21041_csr14[i];
1905 if (de->media[i].csr15 == 0xffff)
1906 de->media[i].csr15 = t21041_csr15[i];
1909 de->ee_data = kmalloc(DE_EEPROM_SIZE, GFP_KERNEL);
1910 if (de->ee_data)
1911 memcpy(de->ee_data, &ee_data[0], DE_EEPROM_SIZE);
1913 return;
1915 bad_srom:
1916 /* for error cases, it's ok to assume we support all these */
1917 for (i = 0; i < DE_MAX_MEDIA; i++)
1918 de->media[i].type = i;
1919 de->media_supported =
1920 SUPPORTED_10baseT_Half |
1921 SUPPORTED_10baseT_Full |
1922 SUPPORTED_Autoneg |
1923 SUPPORTED_TP |
1924 SUPPORTED_AUI |
1925 SUPPORTED_BNC;
1926 goto fill_defaults;
1929 static int __devinit de_init_one (struct pci_dev *pdev,
1930 const struct pci_device_id *ent)
1932 struct net_device *dev;
1933 struct de_private *de;
1934 int rc;
1935 void *regs;
1936 long pciaddr;
1937 static int board_idx = -1;
1939 board_idx++;
1941 #ifndef MODULE
1942 if (board_idx == 0)
1943 printk("%s", version);
1944 #endif
1946 /* allocate a new ethernet device structure, and fill in defaults */
1947 dev = alloc_etherdev(sizeof(struct de_private));
1948 if (!dev)
1949 return -ENOMEM;
1951 SET_MODULE_OWNER(dev);
1952 SET_NETDEV_DEV(dev, &pdev->dev);
1953 dev->open = de_open;
1954 dev->stop = de_close;
1955 dev->set_multicast_list = de_set_rx_mode;
1956 dev->hard_start_xmit = de_start_xmit;
1957 dev->get_stats = de_get_stats;
1958 dev->ethtool_ops = &de_ethtool_ops;
1959 dev->tx_timeout = de_tx_timeout;
1960 dev->watchdog_timeo = TX_TIMEOUT;
1962 dev->irq = pdev->irq;
1964 de = dev->priv;
1965 de->de21040 = ent->driver_data == 0 ? 1 : 0;
1966 de->pdev = pdev;
1967 de->dev = dev;
1968 de->msg_enable = (debug < 0 ? DE_DEF_MSG_ENABLE : debug);
1969 de->board_idx = board_idx;
1970 spin_lock_init (&de->lock);
1971 init_timer(&de->media_timer);
1972 if (de->de21040)
1973 de->media_timer.function = de21040_media_timer;
1974 else
1975 de->media_timer.function = de21041_media_timer;
1976 de->media_timer.data = (unsigned long) de;
1978 netif_carrier_off(dev);
1979 netif_stop_queue(dev);
1981 /* wake up device, assign resources */
1982 rc = pci_enable_device(pdev);
1983 if (rc)
1984 goto err_out_free;
1986 /* reserve PCI resources to ensure driver atomicity */
1987 rc = pci_request_regions(pdev, DRV_NAME);
1988 if (rc)
1989 goto err_out_disable;
1991 /* check for invalid IRQ value */
1992 if (pdev->irq < 2) {
1993 rc = -EIO;
1994 printk(KERN_ERR PFX "invalid irq (%d) for pci dev %s\n",
1995 pdev->irq, pci_name(pdev));
1996 goto err_out_res;
1999 /* obtain and check validity of PCI I/O address */
2000 pciaddr = pci_resource_start(pdev, 1);
2001 if (!pciaddr) {
2002 rc = -EIO;
2003 printk(KERN_ERR PFX "no MMIO resource for pci dev %s\n",
2004 pci_name(pdev));
2005 goto err_out_res;
2007 if (pci_resource_len(pdev, 1) < DE_REGS_SIZE) {
2008 rc = -EIO;
2009 printk(KERN_ERR PFX "MMIO resource (%lx) too small on pci dev %s\n",
2010 pci_resource_len(pdev, 1), pci_name(pdev));
2011 goto err_out_res;
2014 /* remap CSR registers */
2015 regs = ioremap_nocache(pciaddr, DE_REGS_SIZE);
2016 if (!regs) {
2017 rc = -EIO;
2018 printk(KERN_ERR PFX "Cannot map PCI MMIO (%lx@%lx) on pci dev %s\n",
2019 pci_resource_len(pdev, 1), pciaddr, pci_name(pdev));
2020 goto err_out_res;
2022 dev->base_addr = (unsigned long) regs;
2023 de->regs = regs;
2025 de_adapter_wake(de);
2027 /* make sure hardware is not running */
2028 rc = de_reset_mac(de);
2029 if (rc) {
2030 printk(KERN_ERR PFX "Cannot reset MAC, pci dev %s\n",
2031 pci_name(pdev));
2032 goto err_out_iomap;
2035 /* get MAC address, initialize default media type and
2036 * get list of supported media
2038 if (de->de21040) {
2039 de21040_get_mac_address(de);
2040 de21040_get_media_info(de);
2041 } else {
2042 de21041_get_srom_info(de);
2045 /* register new network interface with kernel */
2046 rc = register_netdev(dev);
2047 if (rc)
2048 goto err_out_iomap;
2050 /* print info about board and interface just registered */
2051 printk (KERN_INFO "%s: %s at 0x%lx, "
2052 "%02x:%02x:%02x:%02x:%02x:%02x, "
2053 "IRQ %d\n",
2054 dev->name,
2055 de->de21040 ? "21040" : "21041",
2056 dev->base_addr,
2057 dev->dev_addr[0], dev->dev_addr[1],
2058 dev->dev_addr[2], dev->dev_addr[3],
2059 dev->dev_addr[4], dev->dev_addr[5],
2060 dev->irq);
2062 pci_set_drvdata(pdev, dev);
2064 /* enable busmastering */
2065 pci_set_master(pdev);
2067 /* put adapter to sleep */
2068 de_adapter_sleep(de);
2070 return 0;
2072 err_out_iomap:
2073 if (de->ee_data)
2074 kfree(de->ee_data);
2075 iounmap(regs);
2076 err_out_res:
2077 pci_release_regions(pdev);
2078 err_out_disable:
2079 pci_disable_device(pdev);
2080 err_out_free:
2081 free_netdev(dev);
2082 return rc;
2085 static void __exit de_remove_one (struct pci_dev *pdev)
2087 struct net_device *dev = pci_get_drvdata(pdev);
2088 struct de_private *de = dev->priv;
2090 if (!dev)
2091 BUG();
2092 unregister_netdev(dev);
2093 if (de->ee_data)
2094 kfree(de->ee_data);
2095 iounmap(de->regs);
2096 pci_release_regions(pdev);
2097 pci_disable_device(pdev);
2098 pci_set_drvdata(pdev, NULL);
2099 free_netdev(dev);
2102 #ifdef CONFIG_PM
2104 static int de_suspend (struct pci_dev *pdev, u32 state)
2106 struct net_device *dev = pci_get_drvdata (pdev);
2107 struct de_private *de = dev->priv;
2109 rtnl_lock();
2110 if (netif_running (dev)) {
2111 del_timer_sync(&de->media_timer);
2113 disable_irq(dev->irq);
2114 spin_lock_irq(&de->lock);
2116 de_stop_hw(de);
2117 netif_stop_queue(dev);
2118 netif_device_detach(dev);
2119 netif_carrier_off(dev);
2121 spin_unlock_irq(&de->lock);
2122 enable_irq(dev->irq);
2124 /* Update the error counts. */
2125 __de_get_stats(de);
2127 synchronize_irq(dev->irq);
2128 de_clean_rings(de);
2130 de_adapter_sleep(de);
2131 pci_disable_device(pdev);
2132 } else {
2133 netif_device_detach(dev);
2135 rtnl_unlock();
2136 return 0;
2139 static int de_resume (struct pci_dev *pdev)
2141 struct net_device *dev = pci_get_drvdata (pdev);
2142 struct de_private *de = dev->priv;
2144 rtnl_lock();
2145 if (netif_device_present(dev))
2146 goto out;
2147 if (netif_running(dev)) {
2148 pci_enable_device(pdev);
2149 de_init_hw(de);
2150 netif_device_attach(dev);
2151 } else {
2152 netif_device_attach(dev);
2154 out:
2155 rtnl_unlock();
2156 return 0;
2159 #endif /* CONFIG_PM */
2161 static struct pci_driver de_driver = {
2162 .name = DRV_NAME,
2163 .id_table = de_pci_tbl,
2164 .probe = de_init_one,
2165 .remove = __exit_p(de_remove_one),
2166 #ifdef CONFIG_PM
2167 .suspend = de_suspend,
2168 .resume = de_resume,
2169 #endif
2172 static int __init de_init (void)
2174 #ifdef MODULE
2175 printk("%s", version);
2176 #endif
2177 return pci_module_init (&de_driver);
2180 static void __exit de_exit (void)
2182 pci_unregister_driver (&de_driver);
2185 module_init(de_init);
2186 module_exit(de_exit);