1 /* de2104x.c: A Linux PCI Ethernet driver for Intel/Digital 21040/1 chips. */
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
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>
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;
70 static int rx_copybreak = 100;
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 | \
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.*/
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
156 CacheAlign16 = 0x00008000,
157 BurstLen4 = 0x00000400,
160 NormalTxPoll = (1 << 0),
161 NormalRxPoll = (1 << 0),
163 /* Tx/Rx descriptor status bits */
166 RxErrLong = (1 << 7),
168 RxErrFIFO = (1 << 0),
169 RxErrRunt = (1 << 11),
170 RxErrFrame = (1 << 14),
172 FirstFrag = (1 << 29),
173 LastFrag = (1 << 30),
175 TxFIFOUnder = (1 << 1),
176 TxLinkFail = (1 << 2) | (1 << 10) | (1 << 11),
179 TxJabber = (1 << 14),
180 SetupFrame = (1 << 27),
191 TxState = (1 << 22) | (1 << 21) | (1 << 20),
192 RxState = (1 << 19) | (1 << 18) | (1 << 17),
193 LinkFail = (1 << 12),
195 RxStopped = (1 << 8),
196 TxStopped = (1 << 1),
199 TxEnable = (1 << 13),
201 RxTx = TxEnable | RxEnable,
202 FullDuplex = (1 << 9),
203 AcceptAllMulticast = (1 << 7),
204 AcceptAllPhys = (1 << 6),
206 MacModeClear = (1<<12) | (1<<11) | (1<<10) | (1<<8) | (1<<3) |
207 RxTx | BOCnt | AcceptAllPhys | AcceptAllMulticast,
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. */
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. */
222 RxMissedOver = (1 << 16),
223 RxMissedMask = 0xffff,
225 /* SROM-related bits */
227 MediaBlockMask = 0x3f,
228 MediaCustomCSRs = (1 << 6),
231 PM_Sleep = (1 << 31),
232 PM_Snooze = (1 << 30),
233 PM_Mask = PM_Sleep | PM_Snooze,
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 {
258 } __attribute__((packed));
260 struct de_srom_info_leaf {
264 } __attribute__((packed));
274 u16 type; /* DE_MEDIA_xxx */
291 struct net_device *dev;
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];
303 struct net_device_stats net_stats;
305 struct pci_dev *pdev;
307 u16 setup_frame[DE_SETUP_FRAME_WORDS];
312 struct media_info media[DE_MAX_MEDIA];
313 struct timer_list media_timer;
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 },
338 MODULE_DEVICE_TABLE(pci, de_pci_tbl);
340 static const char * const media_name[DE_MAX_MEDIA] = {
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,
367 if (netif_msg_rx_err (de))
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;
400 struct sk_buff *skb, *copy_skb;
401 unsigned copying_skb, buflen;
403 skb = de->rx_skb[rx_tail].skb;
407 status = le32_to_cpu(de->rx_ring[rx_tail].opts1);
408 if (status & DescOwn)
411 len = ((status >> 16) & 0x7ff) - 4;
412 mapping = de->rx_skb[rx_tail].mapping;
414 if (unlikely(drop)) {
415 de->net_stats.rx_dropped++;
419 if (unlikely((status & 0x38008300) != 0x0300)) {
420 de_rx_err_acct(de, rx_tail, status, len);
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,
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++;
439 copy_skb->dev = de->dev;
442 pci_unmap_single(de->pdev, mapping,
443 buflen, PCI_DMA_FROMDEVICE);
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;
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. */
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;
468 if (rc == NET_RX_DROP)
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);
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);
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;
494 status = dr32(MacStatus);
495 if ((!(status & (IntrOK|IntrErr))) || (status == 0xFFFF))
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)) {
506 if (status & RxEmpty)
507 dw32(RxPoll, NormalRxPoll);
510 spin_lock(&de->lock);
512 if (status & (TxIntr | TxEmpty))
515 if (status & (LinkPass | LinkFail))
516 de_media_interrupt(de, status);
518 spin_unlock(&de->lock);
520 if (status & PciErr) {
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);
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) {
542 status = le32_to_cpu(de->tx_ring[tx_tail].opts1);
543 if (status & DescOwn)
546 skb = de->tx_skb[tx_tail].skb;
549 if (unlikely(skb == DE_DUMMY_SKB))
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);
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++;
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++;
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);
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;
603 spin_lock_irq(&de->lock);
605 tx_free = TX_BUFFS_AVAIL(de);
607 netif_stop_queue(dev);
608 spin_unlock_irq(&de->lock);
615 txd = &de->tx_ring[entry];
618 mapping = pci_map_single(de->pdev, skb->data, len, PCI_DMA_TODEVICE);
619 if (entry == (DE_TX_RING_SIZE - 1))
621 if (!tx_free || (tx_free == (DE_TX_RING_SIZE / 2)))
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;
631 txd->opts1 = cpu_to_le32(DescOwn);
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);
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;
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. */
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;
663 struct dev_mc_list *mclist;
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;
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;
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;
734 if ((dev->mc_count > 1000) || (dev->flags & IFF_ALLMULTI)) {
735 /* Too many to filter well -- accept all multicasts. */
736 macmode |= AcceptAllMulticast;
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);
745 build_setup_frame_perfect (de->setup_frame, dev);
748 * Now add this frame to the Tx list.
753 /* Avoid a chip errata by prefixing a dummy entry. */
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));
777 txd->opts2 = cpu_to_le32(SetupFrame | sizeof (de->setup_frame));
778 txd->addr1 = cpu_to_le32(mapping);
781 txd->opts1 = cpu_to_le32(DescOwn);
785 dummy_txd->opts1 = cpu_to_le32(DescOwn);
789 de->tx_head = NEXT_TX(entry);
791 if (TX_BUFFS_AVAIL(de) < 0)
793 if (TX_BUFFS_AVAIL(de) == 0)
794 netif_stop_queue(dev);
796 /* Trigger an immediate transmit demand. */
797 dw32(TxPoll, NormalTxPoll);
800 if (macmode != dr32(MacMode))
801 dw32(MacMode, macmode);
804 static void de_set_rx_mode (struct net_device *dev)
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;
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))
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)
850 unsigned int work = 1000;
852 macmode = dr32(MacMode);
853 if (macmode & RxTx) {
854 dw32(MacMode, macmode & ~RxTx);
859 if (!de_is_running(de))
864 printk(KERN_WARNING "%s: timeout expired stopping DMA\n", de->dev->name);
867 static inline void de_start_rxtx (struct de_private *de)
871 macmode = dr32(MacMode);
872 if ((macmode & RxTx) != RxTx) {
873 dw32(MacMode, macmode | RxTx);
878 static void de_stop_hw (struct de_private *de)
886 dw32(MacStatus, dr32(MacStatus));
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))
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,
933 if (media == DE_MEDIA_TP_FD)
934 macmode |= FullDuplex;
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)
957 for (i = 0; i < n_media; i++) {
958 if (de_ok_to_advertise(de, media[i])) {
959 de->media_type = media[i];
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;
973 carrier = (status & NetCxnErr) ? 0 : 1;
976 if (de->media_type != DE_MEDIA_AUI && (status & LinkFailStatus))
979 de->media_timer.expires = jiffies + DE_TIMER_LINK;
980 add_timer(&de->media_timer);
981 if (!netif_carrier_ok(dev))
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],
996 if (de->media_type == DE_MEDIA_AUI) {
997 u32 next_state = DE_MEDIA_TP;
998 de_next_media(de, &next_state, 1);
1000 u32 next_state = DE_MEDIA_AUI;
1001 de_next_media(de, &next_state, 1);
1004 spin_lock_irqsave(&de->lock, flags);
1006 spin_unlock_irqrestore(&de->lock, flags);
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))
1025 if (!(de->media_advertise & (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full)))
1029 if (!(de->media_advertise & ADVERTISED_BNC))
1033 if (!(de->media_advertise & ADVERTISED_AUI))
1037 if (!(de->media_advertise & ADVERTISED_10baseT_Half))
1040 case DE_MEDIA_TP_FD:
1041 if (!(de->media_advertise & ADVERTISED_10baseT_Full))
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;
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))
1066 de->media_timer.expires = jiffies + DE_TIMER_LINK;
1067 add_timer(&de->media_timer);
1068 if (!netif_carrier_ok(dev))
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);
1080 /* if media type locked, don't switch 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;
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 */
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));
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));
1132 spin_lock_irqsave(&de->lock, flags);
1134 spin_unlock_irqrestore(&de->lock, flags);
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) {
1151 mod_timer(&de->media_timer, jiffies + DE_TIMER_LINK);
1155 if (!(status & LinkFail))
1158 if (netif_carrier_ok(de->dev)) {
1160 mod_timer(&de->media_timer, jiffies + DE_TIMER_NO_LINK);
1164 static int de_reset_mac (struct de_private *de)
1169 * Reset MAC. de4x5.c and tulip.c examined for "advice"
1173 if (dr32(BusMode) == 0xffffffff)
1176 /* Reset the chip, holding bit 0 set at least 50 PCI cycles. */
1177 dw32 (BusMode, CmdReset);
1180 dw32 (BusMode, de_bus_mode);
1183 for (tmp = 0; tmp < 5; tmp++) {
1190 status = dr32(MacStatus);
1191 if (status & (RxState | TxState))
1193 if (status == 0xffffffff)
1198 static void de_adapter_wake (struct de_private *de)
1205 pci_read_config_dword(de->pdev, PCIPM, &pmctl);
1206 if (pmctl & PM_Mask) {
1208 pci_write_config_dword(de->pdev, PCIPM, pmctl);
1210 /* de4x5.c delays, so we do too */
1215 static void de_adapter_sleep (struct de_private *de)
1222 pci_read_config_dword(de->pdev, PCIPM, &pmctl);
1224 pci_write_config_dword(de->pdev, PCIPM, pmctl);
1227 static int de_init_hw (struct de_private *de)
1229 struct net_device *dev = de->dev;
1233 de_adapter_wake(de);
1235 macmode = dr32(MacMode) & ~MacModeClear;
1237 rc = de_reset_mac(de);
1241 de_set_media(de); /* reset phy */
1243 dw32(RxRingAddr, de->ring_dma);
1244 dw32(TxRingAddr, de->ring_dma + (sizeof(struct de_desc) * DE_RX_RING_SIZE));
1246 dw32(MacMode, RxTx | macmode);
1248 dr32(RxMissed); /* self-clearing */
1250 dw32(IntrMask, de_intr_mask);
1252 de_set_rx_mode(dev);
1257 static int de_refill_rx (struct de_private *de)
1261 for (i = 0; i < DE_RX_RING_SIZE; i++) {
1262 struct sk_buff *skb;
1264 skb = dev_alloc_skb(de->rx_buf_sz);
1270 de->rx_skb[i].mapping = pci_map_single(de->pdev,
1271 skb->tail, de->rx_buf_sz, PCI_DMA_FROMDEVICE);
1272 de->rx_skb[i].skb = skb;
1274 de->rx_ring[i].opts1 = cpu_to_le32(DescOwn);
1275 if (i == (DE_RX_RING_SIZE - 1))
1276 de->rx_ring[i].opts2 =
1277 cpu_to_le32(RingEnd | de->rx_buf_sz);
1279 de->rx_ring[i].opts2 = cpu_to_le32(de->rx_buf_sz);
1280 de->rx_ring[i].addr1 = cpu_to_le32(de->rx_skb[i].mapping);
1281 de->rx_ring[i].addr2 = 0;
1291 static int de_init_rings (struct de_private *de)
1293 memset(de->tx_ring, 0, sizeof(struct de_desc) * DE_TX_RING_SIZE);
1294 de->tx_ring[DE_TX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1297 de->tx_head = de->tx_tail = 0;
1299 return de_refill_rx (de);
1302 static int de_alloc_rings (struct de_private *de)
1304 de->rx_ring = pci_alloc_consistent(de->pdev, DE_RING_BYTES, &de->ring_dma);
1307 de->tx_ring = &de->rx_ring[DE_RX_RING_SIZE];
1308 return de_init_rings(de);
1311 static void de_clean_rings (struct de_private *de)
1315 memset(de->rx_ring, 0, sizeof(struct de_desc) * DE_RX_RING_SIZE);
1316 de->rx_ring[DE_RX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1318 memset(de->tx_ring, 0, sizeof(struct de_desc) * DE_TX_RING_SIZE);
1319 de->tx_ring[DE_TX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1322 for (i = 0; i < DE_RX_RING_SIZE; i++) {
1323 if (de->rx_skb[i].skb) {
1324 pci_unmap_single(de->pdev, de->rx_skb[i].mapping,
1325 de->rx_buf_sz, PCI_DMA_FROMDEVICE);
1326 dev_kfree_skb(de->rx_skb[i].skb);
1330 for (i = 0; i < DE_TX_RING_SIZE; i++) {
1331 struct sk_buff *skb = de->tx_skb[i].skb;
1332 if ((skb) && (skb != DE_DUMMY_SKB)) {
1333 if (skb != DE_SETUP_SKB) {
1335 de->net_stats.tx_dropped++;
1336 pci_unmap_single(de->pdev,
1337 de->tx_skb[i].mapping,
1338 skb->len, PCI_DMA_TODEVICE);
1340 pci_unmap_single(de->pdev,
1341 de->tx_skb[i].mapping,
1342 sizeof(de->setup_frame),
1348 memset(&de->rx_skb, 0, sizeof(struct ring_info) * DE_RX_RING_SIZE);
1349 memset(&de->tx_skb, 0, sizeof(struct ring_info) * DE_TX_RING_SIZE);
1352 static void de_free_rings (struct de_private *de)
1355 pci_free_consistent(de->pdev, DE_RING_BYTES, de->rx_ring, de->ring_dma);
1360 static int de_open (struct net_device *dev)
1362 struct de_private *de = dev->priv;
1364 unsigned long flags;
1366 if (netif_msg_ifup(de))
1367 printk(KERN_DEBUG "%s: enabling interface\n", dev->name);
1369 de->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32);
1371 rc = de_alloc_rings(de);
1373 printk(KERN_ERR "%s: ring allocation failure, err=%d\n",
1378 rc = de_init_hw(de);
1380 printk(KERN_ERR "%s: h/w init failure, err=%d\n",
1385 rc = request_irq(dev->irq, de_interrupt, SA_SHIRQ, dev->name, dev);
1387 printk(KERN_ERR "%s: IRQ %d request failure, err=%d\n",
1388 dev->name, dev->irq, rc);
1392 netif_start_queue(dev);
1393 mod_timer(&de->media_timer, jiffies + DE_TIMER_NO_LINK);
1398 spin_lock_irqsave(&de->lock, flags);
1400 spin_unlock_irqrestore(&de->lock, flags);
1407 static int de_close (struct net_device *dev)
1409 struct de_private *de = dev->priv;
1410 unsigned long flags;
1412 if (netif_msg_ifdown(de))
1413 printk(KERN_DEBUG "%s: disabling interface\n", dev->name);
1415 del_timer_sync(&de->media_timer);
1417 spin_lock_irqsave(&de->lock, flags);
1419 netif_stop_queue(dev);
1420 netif_carrier_off(dev);
1421 spin_unlock_irqrestore(&de->lock, flags);
1423 free_irq(dev->irq, dev);
1426 de_adapter_sleep(de);
1427 pci_disable_device(de->pdev);
1431 static void de_tx_timeout (struct net_device *dev)
1433 struct de_private *de = dev->priv;
1435 printk(KERN_DEBUG "%s: NIC status %08x mode %08x sia %08x desc %u/%u/%u\n",
1436 dev->name, dr32(MacStatus), dr32(MacMode), dr32(SIAStatus),
1437 de->rx_tail, de->tx_head, de->tx_tail);
1439 del_timer_sync(&de->media_timer);
1441 disable_irq(dev->irq);
1442 spin_lock_irq(&de->lock);
1445 netif_stop_queue(dev);
1446 netif_carrier_off(dev);
1448 spin_unlock_irq(&de->lock);
1449 enable_irq(dev->irq);
1451 /* Update the error counts. */
1454 synchronize_irq(dev->irq);
1459 netif_wake_queue(dev);
1462 static void __de_get_regs(struct de_private *de, u8 *buf)
1465 u32 *rbuf = (u32 *)buf;
1468 for (i = 0; i < DE_NUM_REGS; i++)
1469 rbuf[i] = dr32(i * 8);
1471 /* handle self-clearing RxMissed counter, CSR8 */
1472 de_rx_missed(de, rbuf[8]);
1475 static int __de_get_settings(struct de_private *de, struct ethtool_cmd *ecmd)
1477 ecmd->supported = de->media_supported;
1478 ecmd->transceiver = XCVR_INTERNAL;
1479 ecmd->phy_address = 0;
1480 ecmd->advertising = de->media_advertise;
1482 switch (de->media_type) {
1484 ecmd->port = PORT_AUI;
1488 ecmd->port = PORT_BNC;
1492 ecmd->port = PORT_TP;
1493 ecmd->speed = SPEED_10;
1497 if (dr32(MacMode) & FullDuplex)
1498 ecmd->duplex = DUPLEX_FULL;
1500 ecmd->duplex = DUPLEX_HALF;
1503 ecmd->autoneg = AUTONEG_DISABLE;
1505 ecmd->autoneg = AUTONEG_ENABLE;
1507 /* ignore maxtxpkt, maxrxpkt for now */
1512 static int __de_set_settings(struct de_private *de, struct ethtool_cmd *ecmd)
1515 unsigned int media_lock;
1517 if (ecmd->speed != SPEED_10 && ecmd->speed != 5 && ecmd->speed != 2)
1519 if (de->de21040 && ecmd->speed == 2)
1521 if (ecmd->duplex != DUPLEX_HALF && ecmd->duplex != DUPLEX_FULL)
1523 if (ecmd->port != PORT_TP && ecmd->port != PORT_AUI && ecmd->port != PORT_BNC)
1525 if (de->de21040 && ecmd->port == PORT_BNC)
1527 if (ecmd->transceiver != XCVR_INTERNAL)
1529 if (ecmd->autoneg != AUTONEG_DISABLE && ecmd->autoneg != AUTONEG_ENABLE)
1531 if (ecmd->advertising & ~de->media_supported)
1533 if (ecmd->autoneg == AUTONEG_ENABLE &&
1534 (!(ecmd->advertising & ADVERTISED_Autoneg)))
1537 switch (ecmd->port) {
1539 new_media = DE_MEDIA_AUI;
1540 if (!(ecmd->advertising & ADVERTISED_AUI))
1544 new_media = DE_MEDIA_BNC;
1545 if (!(ecmd->advertising & ADVERTISED_BNC))
1549 if (ecmd->autoneg == AUTONEG_ENABLE)
1550 new_media = DE_MEDIA_TP_AUTO;
1551 else if (ecmd->duplex == DUPLEX_FULL)
1552 new_media = DE_MEDIA_TP_FD;
1554 new_media = DE_MEDIA_TP;
1555 if (!(ecmd->advertising & ADVERTISED_TP))
1557 if (!(ecmd->advertising & (ADVERTISED_10baseT_Full | ADVERTISED_10baseT_Half)))
1562 media_lock = (ecmd->autoneg == AUTONEG_ENABLE) ? 0 : 1;
1564 if ((new_media == de->media_type) &&
1565 (media_lock == de->media_lock) &&
1566 (ecmd->advertising == de->media_advertise))
1567 return 0; /* nothing to change */
1572 de->media_type = new_media;
1573 de->media_lock = media_lock;
1574 de->media_advertise = ecmd->advertising;
1580 static void de_get_drvinfo (struct net_device *dev,struct ethtool_drvinfo *info)
1582 struct de_private *de = dev->priv;
1584 strcpy (info->driver, DRV_NAME);
1585 strcpy (info->version, DRV_VERSION);
1586 strcpy (info->bus_info, pci_name(de->pdev));
1587 info->eedump_len = DE_EEPROM_SIZE;
1590 static int de_get_regs_len(struct net_device *dev)
1592 return DE_REGS_SIZE;
1595 static int de_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1597 struct de_private *de = dev->priv;
1600 spin_lock_irq(&de->lock);
1601 rc = __de_get_settings(de, ecmd);
1602 spin_unlock_irq(&de->lock);
1607 static int de_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1609 struct de_private *de = dev->priv;
1612 spin_lock_irq(&de->lock);
1613 rc = __de_set_settings(de, ecmd);
1614 spin_unlock_irq(&de->lock);
1619 static u32 de_get_msglevel(struct net_device *dev)
1621 struct de_private *de = dev->priv;
1623 return de->msg_enable;
1626 static void de_set_msglevel(struct net_device *dev, u32 msglvl)
1628 struct de_private *de = dev->priv;
1630 de->msg_enable = msglvl;
1633 static int de_get_eeprom(struct net_device *dev,
1634 struct ethtool_eeprom *eeprom, u8 *data)
1636 struct de_private *de = dev->priv;
1640 if ((eeprom->offset != 0) || (eeprom->magic != 0) ||
1641 (eeprom->len != DE_EEPROM_SIZE))
1643 memcpy(data, de->ee_data, eeprom->len);
1648 static int de_nway_reset(struct net_device *dev)
1650 struct de_private *de = dev->priv;
1653 if (de->media_type != DE_MEDIA_TP_AUTO)
1655 if (netif_carrier_ok(de->dev))
1658 status = dr32(SIAStatus);
1659 dw32(SIAStatus, (status & ~NWayState) | NWayRestart);
1660 if (netif_msg_link(de))
1661 printk(KERN_INFO "%s: link nway restart, status %x,%x\n",
1662 de->dev->name, status, dr32(SIAStatus));
1666 static void de_get_regs(struct net_device *dev, struct ethtool_regs *regs,
1669 struct de_private *de = dev->priv;
1671 regs->version = (DE_REGS_VER << 2) | de->de21040;
1673 spin_lock_irq(&de->lock);
1674 __de_get_regs(de, data);
1675 spin_unlock_irq(&de->lock);
1678 static struct ethtool_ops de_ethtool_ops = {
1679 .get_link = ethtool_op_get_link,
1680 .get_tx_csum = ethtool_op_get_tx_csum,
1681 .get_sg = ethtool_op_get_sg,
1682 .get_drvinfo = de_get_drvinfo,
1683 .get_regs_len = de_get_regs_len,
1684 .get_settings = de_get_settings,
1685 .set_settings = de_set_settings,
1686 .get_msglevel = de_get_msglevel,
1687 .set_msglevel = de_set_msglevel,
1688 .get_eeprom = de_get_eeprom,
1689 .nway_reset = de_nway_reset,
1690 .get_regs = de_get_regs,
1693 static void __init de21040_get_mac_address (struct de_private *de)
1697 dw32 (ROMCmd, 0); /* Reset the pointer with a dummy write. */
1699 for (i = 0; i < 6; i++) {
1700 int value, boguscnt = 100000;
1702 value = dr32(ROMCmd);
1703 while (value < 0 && --boguscnt > 0);
1704 de->dev->dev_addr[i] = value;
1706 printk(KERN_WARNING PFX "timeout reading 21040 MAC address byte %u\n", i);
1710 static void __init de21040_get_media_info(struct de_private *de)
1714 de->media_type = DE_MEDIA_TP;
1715 de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Full |
1716 SUPPORTED_10baseT_Half | SUPPORTED_AUI;
1717 de->media_advertise = de->media_supported;
1719 for (i = 0; i < DE_MAX_MEDIA; i++) {
1723 case DE_MEDIA_TP_FD:
1724 de->media[i].type = i;
1725 de->media[i].csr13 = t21040_csr13[i];
1726 de->media[i].csr14 = t21040_csr14[i];
1727 de->media[i].csr15 = t21040_csr15[i];
1730 de->media[i].type = DE_MEDIA_INVALID;
1736 /* Note: this routine returns extra data bits for size detection. */
1737 static unsigned __init tulip_read_eeprom(void __iomem *regs, int location, int addr_len)
1740 unsigned retval = 0;
1741 void __iomem *ee_addr = regs + ROMCmd;
1742 int read_cmd = location | (EE_READ_CMD << addr_len);
1744 writel(EE_ENB & ~EE_CS, ee_addr);
1745 writel(EE_ENB, ee_addr);
1747 /* Shift the read command bits out. */
1748 for (i = 4 + addr_len; i >= 0; i--) {
1749 short dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
1750 writel(EE_ENB | dataval, ee_addr);
1752 writel(EE_ENB | dataval | EE_SHIFT_CLK, ee_addr);
1754 retval = (retval << 1) | ((readl(ee_addr) & EE_DATA_READ) ? 1 : 0);
1756 writel(EE_ENB, ee_addr);
1759 for (i = 16; i > 0; i--) {
1760 writel(EE_ENB | EE_SHIFT_CLK, ee_addr);
1762 retval = (retval << 1) | ((readl(ee_addr) & EE_DATA_READ) ? 1 : 0);
1763 writel(EE_ENB, ee_addr);
1767 /* Terminate the EEPROM access. */
1768 writel(EE_ENB & ~EE_CS, ee_addr);
1772 static void __init de21041_get_srom_info (struct de_private *de)
1774 unsigned i, sa_offset = 0, ofs;
1775 u8 ee_data[DE_EEPROM_SIZE + 6] = {};
1776 unsigned ee_addr_size = tulip_read_eeprom(de->regs, 0xff, 8) & 0x40000 ? 8 : 6;
1777 struct de_srom_info_leaf *il;
1780 /* download entire eeprom */
1781 for (i = 0; i < DE_EEPROM_WORDS; i++)
1782 ((u16 *)ee_data)[i] =
1783 le16_to_cpu(tulip_read_eeprom(de->regs, i, ee_addr_size));
1785 /* DEC now has a specification but early board makers
1786 just put the address in the first EEPROM locations. */
1787 /* This does memcmp(eedata, eedata+16, 8) */
1788 for (i = 0; i < 8; i ++)
1789 if (ee_data[i] != ee_data[16+i])
1792 /* store MAC address */
1793 for (i = 0; i < 6; i ++)
1794 de->dev->dev_addr[i] = ee_data[i + sa_offset];
1796 /* get offset of controller 0 info leaf. ignore 2nd byte. */
1797 ofs = ee_data[SROMC0InfoLeaf];
1798 if (ofs >= (sizeof(ee_data) - sizeof(struct de_srom_info_leaf) - sizeof(struct de_srom_media_block)))
1801 /* get pointer to info leaf */
1802 il = (struct de_srom_info_leaf *) &ee_data[ofs];
1804 /* paranoia checks */
1805 if (il->n_blocks == 0)
1807 if ((sizeof(ee_data) - ofs) <
1808 (sizeof(struct de_srom_info_leaf) + (sizeof(struct de_srom_media_block) * il->n_blocks)))
1811 /* get default media type */
1812 switch (DE_UNALIGNED_16(&il->default_media)) {
1813 case 0x0001: de->media_type = DE_MEDIA_BNC; break;
1814 case 0x0002: de->media_type = DE_MEDIA_AUI; break;
1815 case 0x0204: de->media_type = DE_MEDIA_TP_FD; break;
1816 default: de->media_type = DE_MEDIA_TP_AUTO; break;
1819 if (netif_msg_probe(de))
1820 printk(KERN_INFO "de%d: SROM leaf offset %u, default media %s\n",
1822 media_name[de->media_type]);
1824 /* init SIA register values to defaults */
1825 for (i = 0; i < DE_MAX_MEDIA; i++) {
1826 de->media[i].type = DE_MEDIA_INVALID;
1827 de->media[i].csr13 = 0xffff;
1828 de->media[i].csr14 = 0xffff;
1829 de->media[i].csr15 = 0xffff;
1832 /* parse media blocks to see what medias are supported,
1833 * and if any custom CSR values are provided
1835 bufp = ((void *)il) + sizeof(*il);
1836 for (i = 0; i < il->n_blocks; i++) {
1837 struct de_srom_media_block *ib = bufp;
1840 /* index based on media type in media block */
1841 switch(ib->opts & MediaBlockMask) {
1842 case 0: /* 10baseT */
1843 de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Half
1844 | SUPPORTED_Autoneg;
1846 de->media[DE_MEDIA_TP_AUTO].type = DE_MEDIA_TP_AUTO;
1849 de->media_supported |= SUPPORTED_BNC;
1853 de->media_supported |= SUPPORTED_AUI;
1856 case 4: /* 10baseT-FD */
1857 de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Full
1858 | SUPPORTED_Autoneg;
1859 idx = DE_MEDIA_TP_FD;
1860 de->media[DE_MEDIA_TP_AUTO].type = DE_MEDIA_TP_AUTO;
1866 de->media[idx].type = idx;
1868 if (netif_msg_probe(de))
1869 printk(KERN_INFO "de%d: media block #%u: %s",
1871 media_name[de->media[idx].type]);
1873 bufp += sizeof (ib->opts);
1875 if (ib->opts & MediaCustomCSRs) {
1876 de->media[idx].csr13 = DE_UNALIGNED_16(&ib->csr13);
1877 de->media[idx].csr14 = DE_UNALIGNED_16(&ib->csr14);
1878 de->media[idx].csr15 = DE_UNALIGNED_16(&ib->csr15);
1879 bufp += sizeof(ib->csr13) + sizeof(ib->csr14) +
1882 if (netif_msg_probe(de))
1883 printk(" (%x,%x,%x)\n",
1884 de->media[idx].csr13,
1885 de->media[idx].csr14,
1886 de->media[idx].csr15);
1888 } else if (netif_msg_probe(de))
1891 if (bufp > ((void *)&ee_data[DE_EEPROM_SIZE - 3]))
1895 de->media_advertise = de->media_supported;
1898 /* fill in defaults, for cases where custom CSRs not used */
1899 for (i = 0; i < DE_MAX_MEDIA; i++) {
1900 if (de->media[i].csr13 == 0xffff)
1901 de->media[i].csr13 = t21041_csr13[i];
1902 if (de->media[i].csr14 == 0xffff)
1903 de->media[i].csr14 = t21041_csr14[i];
1904 if (de->media[i].csr15 == 0xffff)
1905 de->media[i].csr15 = t21041_csr15[i];
1908 de->ee_data = kmalloc(DE_EEPROM_SIZE, GFP_KERNEL);
1910 memcpy(de->ee_data, &ee_data[0], DE_EEPROM_SIZE);
1915 /* for error cases, it's ok to assume we support all these */
1916 for (i = 0; i < DE_MAX_MEDIA; i++)
1917 de->media[i].type = i;
1918 de->media_supported =
1919 SUPPORTED_10baseT_Half |
1920 SUPPORTED_10baseT_Full |
1928 static int __devinit de_init_one (struct pci_dev *pdev,
1929 const struct pci_device_id *ent)
1931 struct net_device *dev;
1932 struct de_private *de;
1936 static int board_idx = -1;
1942 printk("%s", version);
1945 /* allocate a new ethernet device structure, and fill in defaults */
1946 dev = alloc_etherdev(sizeof(struct de_private));
1950 SET_MODULE_OWNER(dev);
1951 SET_NETDEV_DEV(dev, &pdev->dev);
1952 dev->open = de_open;
1953 dev->stop = de_close;
1954 dev->set_multicast_list = de_set_rx_mode;
1955 dev->hard_start_xmit = de_start_xmit;
1956 dev->get_stats = de_get_stats;
1957 dev->ethtool_ops = &de_ethtool_ops;
1958 dev->tx_timeout = de_tx_timeout;
1959 dev->watchdog_timeo = TX_TIMEOUT;
1961 dev->irq = pdev->irq;
1964 de->de21040 = ent->driver_data == 0 ? 1 : 0;
1967 de->msg_enable = (debug < 0 ? DE_DEF_MSG_ENABLE : debug);
1968 de->board_idx = board_idx;
1969 spin_lock_init (&de->lock);
1970 init_timer(&de->media_timer);
1972 de->media_timer.function = de21040_media_timer;
1974 de->media_timer.function = de21041_media_timer;
1975 de->media_timer.data = (unsigned long) de;
1977 netif_carrier_off(dev);
1978 netif_stop_queue(dev);
1980 /* wake up device, assign resources */
1981 rc = pci_enable_device(pdev);
1985 /* reserve PCI resources to ensure driver atomicity */
1986 rc = pci_request_regions(pdev, DRV_NAME);
1988 goto err_out_disable;
1990 /* check for invalid IRQ value */
1991 if (pdev->irq < 2) {
1993 printk(KERN_ERR PFX "invalid irq (%d) for pci dev %s\n",
1994 pdev->irq, pci_name(pdev));
1998 /* obtain and check validity of PCI I/O address */
1999 pciaddr = pci_resource_start(pdev, 1);
2002 printk(KERN_ERR PFX "no MMIO resource for pci dev %s\n",
2006 if (pci_resource_len(pdev, 1) < DE_REGS_SIZE) {
2008 printk(KERN_ERR PFX "MMIO resource (%lx) too small on pci dev %s\n",
2009 pci_resource_len(pdev, 1), pci_name(pdev));
2013 /* remap CSR registers */
2014 regs = ioremap_nocache(pciaddr, DE_REGS_SIZE);
2017 printk(KERN_ERR PFX "Cannot map PCI MMIO (%lx@%lx) on pci dev %s\n",
2018 pci_resource_len(pdev, 1), pciaddr, pci_name(pdev));
2021 dev->base_addr = (unsigned long) regs;
2024 de_adapter_wake(de);
2026 /* make sure hardware is not running */
2027 rc = de_reset_mac(de);
2029 printk(KERN_ERR PFX "Cannot reset MAC, pci dev %s\n",
2034 /* get MAC address, initialize default media type and
2035 * get list of supported media
2038 de21040_get_mac_address(de);
2039 de21040_get_media_info(de);
2041 de21041_get_srom_info(de);
2044 /* register new network interface with kernel */
2045 rc = register_netdev(dev);
2049 /* print info about board and interface just registered */
2050 printk (KERN_INFO "%s: %s at 0x%lx, "
2051 "%02x:%02x:%02x:%02x:%02x:%02x, "
2054 de->de21040 ? "21040" : "21041",
2056 dev->dev_addr[0], dev->dev_addr[1],
2057 dev->dev_addr[2], dev->dev_addr[3],
2058 dev->dev_addr[4], dev->dev_addr[5],
2061 pci_set_drvdata(pdev, dev);
2063 /* enable busmastering */
2064 pci_set_master(pdev);
2066 /* put adapter to sleep */
2067 de_adapter_sleep(de);
2076 pci_release_regions(pdev);
2078 pci_disable_device(pdev);
2084 static void __exit de_remove_one (struct pci_dev *pdev)
2086 struct net_device *dev = pci_get_drvdata(pdev);
2087 struct de_private *de = dev->priv;
2091 unregister_netdev(dev);
2095 pci_release_regions(pdev);
2096 pci_disable_device(pdev);
2097 pci_set_drvdata(pdev, NULL);
2103 static int de_suspend (struct pci_dev *pdev, u32 state)
2105 struct net_device *dev = pci_get_drvdata (pdev);
2106 struct de_private *de = dev->priv;
2109 if (netif_running (dev)) {
2110 del_timer_sync(&de->media_timer);
2112 disable_irq(dev->irq);
2113 spin_lock_irq(&de->lock);
2116 netif_stop_queue(dev);
2117 netif_device_detach(dev);
2118 netif_carrier_off(dev);
2120 spin_unlock_irq(&de->lock);
2121 enable_irq(dev->irq);
2123 /* Update the error counts. */
2126 synchronize_irq(dev->irq);
2129 de_adapter_sleep(de);
2130 pci_disable_device(pdev);
2132 netif_device_detach(dev);
2138 static int de_resume (struct pci_dev *pdev)
2140 struct net_device *dev = pci_get_drvdata (pdev);
2141 struct de_private *de = dev->priv;
2144 if (netif_device_present(dev))
2146 if (netif_running(dev)) {
2147 pci_enable_device(pdev);
2149 netif_device_attach(dev);
2151 netif_device_attach(dev);
2158 #endif /* CONFIG_PM */
2160 static struct pci_driver de_driver = {
2162 .id_table = de_pci_tbl,
2163 .probe = de_init_one,
2164 .remove = __exit_p(de_remove_one),
2166 .suspend = de_suspend,
2167 .resume = de_resume,
2171 static int __init de_init (void)
2174 printk("%s", version);
2176 return pci_module_init (&de_driver);
2179 static void __exit de_exit (void)
2181 pci_unregister_driver (&de_driver);
2184 module_init(de_init);
2185 module_exit(de_exit);