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/module.h>
 
  35 #include <linux/kernel.h>
 
  36 #include <linux/netdevice.h>
 
  37 #include <linux/etherdevice.h>
 
  38 #include <linux/init.h>
 
  39 #include <linux/pci.h>
 
  40 #include <linux/delay.h>
 
  41 #include <linux/ethtool.h>
 
  42 #include <linux/compiler.h>
 
  43 #include <linux/rtnetlink.h>
 
  44 #include <linux/crc32.h>
 
  48 #include <asm/uaccess.h>
 
  49 #include <asm/unaligned.h>
 
  51 /* These identify the driver base version and may not be removed. */
 
  52 static char version[] =
 
  53 KERN_INFO DRV_NAME " PCI Ethernet driver v" DRV_VERSION " (" DRV_RELDATE ")\n";
 
  55 MODULE_AUTHOR("Jeff Garzik <jgarzik@pobox.com>");
 
  56 MODULE_DESCRIPTION("Intel/Digital 21040/1 series PCI Ethernet driver");
 
  57 MODULE_LICENSE("GPL");
 
  58 MODULE_VERSION(DRV_VERSION);
 
  60 static int debug = -1;
 
  61 module_param (debug, int, 0);
 
  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(CONFIG_SPARC) || defined(__ia64__) \
 
  67         || defined(__sh__) || defined(__mips__)
 
  68 static int rx_copybreak = 1518;
 
  70 static int rx_copybreak = 100;
 
  72 module_param (rx_copybreak, int, 0);
 
  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 /* This is a mysterious value that can be written to CSR11 in the 21040 (only)
 
 128    to support a pre-NWay full-duplex signaling mechanism using short frames.
 
 129    No one knows what it should be, but if left at its default value some
 
 130    10base2(!) packets trigger a full-duplex-request interrupt. */
 
 131 #define FULL_DUPLEX_MAGIC       0x6969
 
 154         CacheAlign16            = 0x00008000,
 
 155         BurstLen4               = 0x00000400,
 
 158         NormalTxPoll            = (1 << 0),
 
 159         NormalRxPoll            = (1 << 0),
 
 161         /* Tx/Rx descriptor status bits */
 
 164         RxErrLong               = (1 << 7),
 
 166         RxErrFIFO               = (1 << 0),
 
 167         RxErrRunt               = (1 << 11),
 
 168         RxErrFrame              = (1 << 14),
 
 170         FirstFrag               = (1 << 29),
 
 171         LastFrag                = (1 << 30),
 
 173         TxFIFOUnder             = (1 << 1),
 
 174         TxLinkFail              = (1 << 2) | (1 << 10) | (1 << 11),
 
 177         TxJabber                = (1 << 14),
 
 178         SetupFrame              = (1 << 27),
 
 189         TxState                 = (1 << 22) | (1 << 21) | (1 << 20),
 
 190         RxState                 = (1 << 19) | (1 << 18) | (1 << 17),
 
 191         LinkFail                = (1 << 12),
 
 193         RxStopped               = (1 << 8),
 
 194         TxStopped               = (1 << 1),
 
 197         TxEnable                = (1 << 13),
 
 199         RxTx                    = TxEnable | RxEnable,
 
 200         FullDuplex              = (1 << 9),
 
 201         AcceptAllMulticast      = (1 << 7),
 
 202         AcceptAllPhys           = (1 << 6),
 
 204         MacModeClear            = (1<<12) | (1<<11) | (1<<10) | (1<<8) | (1<<3) |
 
 205                                   RxTx | BOCnt | AcceptAllPhys | AcceptAllMulticast,
 
 208         EE_SHIFT_CLK            = 0x02, /* EEPROM shift clock. */
 
 209         EE_CS                   = 0x01, /* EEPROM chip select. */
 
 210         EE_DATA_WRITE           = 0x04, /* Data from the Tulip to EEPROM. */
 
 213         EE_DATA_READ            = 0x08, /* Data from the EEPROM chip. */
 
 214         EE_ENB                  = (0x4800 | EE_CS),
 
 216         /* The EEPROM commands include the alway-set leading bit. */
 
 220         RxMissedOver            = (1 << 16),
 
 221         RxMissedMask            = 0xffff,
 
 223         /* SROM-related bits */
 
 225         MediaBlockMask          = 0x3f,
 
 226         MediaCustomCSRs         = (1 << 6),
 
 229         PM_Sleep                = (1 << 31),
 
 230         PM_Snooze               = (1 << 30),
 
 231         PM_Mask                 = PM_Sleep | PM_Snooze,
 
 234         NWayState               = (1 << 14) | (1 << 13) | (1 << 12),
 
 235         NWayRestart             = (1 << 12),
 
 236         NonselPortActive        = (1 << 9),
 
 237         LinkFailStatus          = (1 << 2),
 
 238         NetCxnErr               = (1 << 1),
 
 241 static const u32 de_intr_mask =
 
 242         IntrOK | IntrErr | RxIntr | RxEmpty | TxIntr | TxEmpty |
 
 243         LinkPass | LinkFail | PciErr;
 
 246  * Set the programmable burst length to 4 longwords for all:
 
 247  * DMA errors result without these values. Cache align 16 long.
 
 249 static const u32 de_bus_mode = CacheAlign16 | BurstLen4;
 
 251 struct de_srom_media_block {
 
 256 } __attribute__((packed));
 
 258 struct de_srom_info_leaf {
 
 262 } __attribute__((packed));
 
 272         u16                     type;   /* DE_MEDIA_xxx */
 
 289         struct net_device       *dev;
 
 292         struct de_desc          *rx_ring;
 
 293         struct de_desc          *tx_ring;
 
 294         struct ring_info        tx_skb[DE_TX_RING_SIZE];
 
 295         struct ring_info        rx_skb[DE_RX_RING_SIZE];
 
 301         struct net_device_stats net_stats;
 
 303         struct pci_dev          *pdev;
 
 305         u16                     setup_frame[DE_SETUP_FRAME_WORDS];
 
 310         struct media_info       media[DE_MAX_MEDIA];
 
 311         struct timer_list       media_timer;
 
 315         unsigned                de21040 : 1;
 
 316         unsigned                media_lock : 1;
 
 320 static void de_set_rx_mode (struct net_device *dev);
 
 321 static void de_tx (struct de_private *de);
 
 322 static void de_clean_rings (struct de_private *de);
 
 323 static void de_media_interrupt (struct de_private *de, u32 status);
 
 324 static void de21040_media_timer (unsigned long data);
 
 325 static void de21041_media_timer (unsigned long data);
 
 326 static unsigned int de_ok_to_advertise (struct de_private *de, u32 new_media);
 
 329 static struct pci_device_id de_pci_tbl[] = {
 
 330         { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP,
 
 331           PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
 
 332         { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_PLUS,
 
 333           PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },
 
 336 MODULE_DEVICE_TABLE(pci, de_pci_tbl);
 
 338 static const char * const media_name[DE_MAX_MEDIA] = {
 
 346 /* 21040 transceiver register settings:
 
 347  * TP AUTO(unused), BNC(unused), AUI, TP, TP FD*/
 
 348 static u16 t21040_csr13[] = { 0, 0, 0x8F09, 0x8F01, 0x8F01, };
 
 349 static u16 t21040_csr14[] = { 0, 0, 0x0705, 0xFFFF, 0xFFFD, };
 
 350 static u16 t21040_csr15[] = { 0, 0, 0x0006, 0x0000, 0x0000, };
 
 352 /* 21041 transceiver register settings: TP AUTO, BNC, AUI, TP, TP FD*/
 
 353 static u16 t21041_csr13[] = { 0xEF01, 0xEF09, 0xEF09, 0xEF01, 0xEF09, };
 
 354 static u16 t21041_csr14[] = { 0xFFFF, 0xF7FD, 0xF7FD, 0x6F3F, 0x6F3D, };
 
 355 static u16 t21041_csr15[] = { 0x0008, 0x0006, 0x000E, 0x0008, 0x0008, };
 
 358 #define dr32(reg)               readl(de->regs + (reg))
 
 359 #define dw32(reg,val)           writel((val), de->regs + (reg))
 
 362 static void de_rx_err_acct (struct de_private *de, unsigned rx_tail,
 
 365         if (netif_msg_rx_err (de))
 
 367                         "%s: rx err, slot %d status 0x%x len %d\n",
 
 368                         de->dev->name, rx_tail, status, len);
 
 370         if ((status & 0x38000300) != 0x0300) {
 
 371                 /* Ingore earlier buffers. */
 
 372                 if ((status & 0xffff) != 0x7fff) {
 
 373                         if (netif_msg_rx_err(de))
 
 374                                 printk(KERN_WARNING "%s: Oversized Ethernet frame "
 
 375                                            "spanned multiple buffers, status %8.8x!\n",
 
 376                                            de->dev->name, status);
 
 377                         de->net_stats.rx_length_errors++;
 
 379         } else if (status & RxError) {
 
 380                 /* There was a fatal error. */
 
 381                 de->net_stats.rx_errors++; /* end of a packet.*/
 
 382                 if (status & 0x0890) de->net_stats.rx_length_errors++;
 
 383                 if (status & RxErrCRC) de->net_stats.rx_crc_errors++;
 
 384                 if (status & RxErrFIFO) de->net_stats.rx_fifo_errors++;
 
 388 static void de_rx (struct de_private *de)
 
 390         unsigned rx_tail = de->rx_tail;
 
 391         unsigned rx_work = DE_RX_RING_SIZE;
 
 398                 struct sk_buff *skb, *copy_skb;
 
 399                 unsigned copying_skb, buflen;
 
 401                 skb = de->rx_skb[rx_tail].skb;
 
 404                 status = le32_to_cpu(de->rx_ring[rx_tail].opts1);
 
 405                 if (status & DescOwn)
 
 408                 len = ((status >> 16) & 0x7ff) - 4;
 
 409                 mapping = de->rx_skb[rx_tail].mapping;
 
 411                 if (unlikely(drop)) {
 
 412                         de->net_stats.rx_dropped++;
 
 416                 if (unlikely((status & 0x38008300) != 0x0300)) {
 
 417                         de_rx_err_acct(de, rx_tail, status, len);
 
 421                 copying_skb = (len <= rx_copybreak);
 
 423                 if (unlikely(netif_msg_rx_status(de)))
 
 424                         printk(KERN_DEBUG "%s: rx slot %d status 0x%x len %d copying? %d\n",
 
 425                                de->dev->name, rx_tail, status, len,
 
 428                 buflen = copying_skb ? (len + RX_OFFSET) : de->rx_buf_sz;
 
 429                 copy_skb = dev_alloc_skb (buflen);
 
 430                 if (unlikely(!copy_skb)) {
 
 431                         de->net_stats.rx_dropped++;
 
 438                         pci_unmap_single(de->pdev, mapping,
 
 439                                          buflen, PCI_DMA_FROMDEVICE);
 
 443                         de->rx_skb[rx_tail].mapping =
 
 444                                 pci_map_single(de->pdev, copy_skb->data,
 
 445                                                buflen, PCI_DMA_FROMDEVICE);
 
 446                         de->rx_skb[rx_tail].skb = copy_skb;
 
 448                         pci_dma_sync_single_for_cpu(de->pdev, mapping, len, PCI_DMA_FROMDEVICE);
 
 449                         skb_reserve(copy_skb, RX_OFFSET);
 
 450                         skb_copy_from_linear_data(skb, skb_put(copy_skb, len),
 
 452                         pci_dma_sync_single_for_device(de->pdev, mapping, len, PCI_DMA_FROMDEVICE);
 
 454                         /* We'll reuse the original ring buffer. */
 
 458                 skb->protocol = eth_type_trans (skb, de->dev);
 
 460                 de->net_stats.rx_packets++;
 
 461                 de->net_stats.rx_bytes += skb->len;
 
 462                 de->dev->last_rx = jiffies;
 
 464                 if (rc == NET_RX_DROP)
 
 468                 de->rx_ring[rx_tail].opts1 = cpu_to_le32(DescOwn);
 
 469                 if (rx_tail == (DE_RX_RING_SIZE - 1))
 
 470                         de->rx_ring[rx_tail].opts2 =
 
 471                                 cpu_to_le32(RingEnd | de->rx_buf_sz);
 
 473                         de->rx_ring[rx_tail].opts2 = cpu_to_le32(de->rx_buf_sz);
 
 474                 de->rx_ring[rx_tail].addr1 = cpu_to_le32(mapping);
 
 475                 rx_tail = NEXT_RX(rx_tail);
 
 479                 printk(KERN_WARNING "%s: rx work limit reached\n", de->dev->name);
 
 481         de->rx_tail = rx_tail;
 
 484 static irqreturn_t de_interrupt (int irq, void *dev_instance)
 
 486         struct net_device *dev = dev_instance;
 
 487         struct de_private *de = dev->priv;
 
 490         status = dr32(MacStatus);
 
 491         if ((!(status & (IntrOK|IntrErr))) || (status == 0xFFFF))
 
 494         if (netif_msg_intr(de))
 
 495                 printk(KERN_DEBUG "%s: intr, status %08x mode %08x desc %u/%u/%u\n",
 
 496                         dev->name, status, dr32(MacMode), de->rx_tail, de->tx_head, de->tx_tail);
 
 498         dw32(MacStatus, status);
 
 500         if (status & (RxIntr | RxEmpty)) {
 
 502                 if (status & RxEmpty)
 
 503                         dw32(RxPoll, NormalRxPoll);
 
 506         spin_lock(&de->lock);
 
 508         if (status & (TxIntr | TxEmpty))
 
 511         if (status & (LinkPass | LinkFail))
 
 512                 de_media_interrupt(de, status);
 
 514         spin_unlock(&de->lock);
 
 516         if (status & PciErr) {
 
 519                 pci_read_config_word(de->pdev, PCI_STATUS, &pci_status);
 
 520                 pci_write_config_word(de->pdev, PCI_STATUS, pci_status);
 
 521                 printk(KERN_ERR "%s: PCI bus error, status=%08x, PCI status=%04x\n",
 
 522                        dev->name, status, pci_status);
 
 528 static void de_tx (struct de_private *de)
 
 530         unsigned tx_head = de->tx_head;
 
 531         unsigned tx_tail = de->tx_tail;
 
 533         while (tx_tail != tx_head) {
 
 538                 status = le32_to_cpu(de->tx_ring[tx_tail].opts1);
 
 539                 if (status & DescOwn)
 
 542                 skb = de->tx_skb[tx_tail].skb;
 
 544                 if (unlikely(skb == DE_DUMMY_SKB))
 
 547                 if (unlikely(skb == DE_SETUP_SKB)) {
 
 548                         pci_unmap_single(de->pdev, de->tx_skb[tx_tail].mapping,
 
 549                                          sizeof(de->setup_frame), PCI_DMA_TODEVICE);
 
 553                 pci_unmap_single(de->pdev, de->tx_skb[tx_tail].mapping,
 
 554                                  skb->len, PCI_DMA_TODEVICE);
 
 556                 if (status & LastFrag) {
 
 557                         if (status & TxError) {
 
 558                                 if (netif_msg_tx_err(de))
 
 559                                         printk(KERN_DEBUG "%s: tx err, status 0x%x\n",
 
 560                                                de->dev->name, status);
 
 561                                 de->net_stats.tx_errors++;
 
 563                                         de->net_stats.tx_window_errors++;
 
 564                                 if (status & TxMaxCol)
 
 565                                         de->net_stats.tx_aborted_errors++;
 
 566                                 if (status & TxLinkFail)
 
 567                                         de->net_stats.tx_carrier_errors++;
 
 568                                 if (status & TxFIFOUnder)
 
 569                                         de->net_stats.tx_fifo_errors++;
 
 571                                 de->net_stats.tx_packets++;
 
 572                                 de->net_stats.tx_bytes += skb->len;
 
 573                                 if (netif_msg_tx_done(de))
 
 574                                         printk(KERN_DEBUG "%s: tx done, slot %d\n", de->dev->name, tx_tail);
 
 576                         dev_kfree_skb_irq(skb);
 
 580                 de->tx_skb[tx_tail].skb = NULL;
 
 582                 tx_tail = NEXT_TX(tx_tail);
 
 585         de->tx_tail = tx_tail;
 
 587         if (netif_queue_stopped(de->dev) && (TX_BUFFS_AVAIL(de) > (DE_TX_RING_SIZE / 4)))
 
 588                 netif_wake_queue(de->dev);
 
 591 static int de_start_xmit (struct sk_buff *skb, struct net_device *dev)
 
 593         struct de_private *de = dev->priv;
 
 594         unsigned int entry, tx_free;
 
 595         u32 mapping, len, flags = FirstFrag | LastFrag;
 
 598         spin_lock_irq(&de->lock);
 
 600         tx_free = TX_BUFFS_AVAIL(de);
 
 602                 netif_stop_queue(dev);
 
 603                 spin_unlock_irq(&de->lock);
 
 610         txd = &de->tx_ring[entry];
 
 613         mapping = pci_map_single(de->pdev, skb->data, len, PCI_DMA_TODEVICE);
 
 614         if (entry == (DE_TX_RING_SIZE - 1))
 
 616         if (!tx_free || (tx_free == (DE_TX_RING_SIZE / 2)))
 
 619         txd->opts2 = cpu_to_le32(flags);
 
 620         txd->addr1 = cpu_to_le32(mapping);
 
 622         de->tx_skb[entry].skb = skb;
 
 623         de->tx_skb[entry].mapping = mapping;
 
 626         txd->opts1 = cpu_to_le32(DescOwn);
 
 629         de->tx_head = NEXT_TX(entry);
 
 630         if (netif_msg_tx_queued(de))
 
 631                 printk(KERN_DEBUG "%s: tx queued, slot %d, skblen %d\n",
 
 632                        dev->name, entry, skb->len);
 
 635                 netif_stop_queue(dev);
 
 637         spin_unlock_irq(&de->lock);
 
 639         /* Trigger an immediate transmit demand. */
 
 640         dw32(TxPoll, NormalTxPoll);
 
 641         dev->trans_start = jiffies;
 
 646 /* Set or clear the multicast filter for this adaptor.
 
 647    Note that we only use exclusion around actually queueing the
 
 648    new frame, not around filling de->setup_frame.  This is non-deterministic
 
 649    when re-entered but still correct. */
 
 652 #define set_bit_le(i,p) do { ((char *)(p))[(i)/8] |= (1<<((i)%8)); } while(0)
 
 654 static void build_setup_frame_hash(u16 *setup_frm, struct net_device *dev)
 
 656         struct de_private *de = dev->priv;
 
 658         struct dev_mc_list *mclist;
 
 662         memset(hash_table, 0, sizeof(hash_table));
 
 663         set_bit_le(255, hash_table);                    /* Broadcast entry */
 
 664         /* This should work on big-endian machines as well. */
 
 665         for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
 
 666              i++, mclist = mclist->next) {
 
 667                 int index = ether_crc_le(ETH_ALEN, mclist->dmi_addr) & 0x1ff;
 
 669                 set_bit_le(index, hash_table);
 
 671                 for (i = 0; i < 32; i++) {
 
 672                         *setup_frm++ = hash_table[i];
 
 673                         *setup_frm++ = hash_table[i];
 
 675                 setup_frm = &de->setup_frame[13*6];
 
 678         /* Fill the final entry with our physical address. */
 
 679         eaddrs = (u16 *)dev->dev_addr;
 
 680         *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
 
 681         *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
 
 682         *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
 
 685 static void build_setup_frame_perfect(u16 *setup_frm, struct net_device *dev)
 
 687         struct de_private *de = dev->priv;
 
 688         struct dev_mc_list *mclist;
 
 692         /* We have <= 14 addresses so we can use the wonderful
 
 693            16 address perfect filtering of the Tulip. */
 
 694         for (i = 0, mclist = dev->mc_list; i < dev->mc_count;
 
 695              i++, mclist = mclist->next) {
 
 696                 eaddrs = (u16 *)mclist->dmi_addr;
 
 697                 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
 
 698                 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
 
 699                 *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
 
 701         /* Fill the unused entries with the broadcast address. */
 
 702         memset(setup_frm, 0xff, (15-i)*12);
 
 703         setup_frm = &de->setup_frame[15*6];
 
 705         /* Fill the final entry with our physical address. */
 
 706         eaddrs = (u16 *)dev->dev_addr;
 
 707         *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
 
 708         *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
 
 709         *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
 
 713 static void __de_set_rx_mode (struct net_device *dev)
 
 715         struct de_private *de = dev->priv;
 
 720         struct de_desc *dummy_txd = NULL;
 
 722         macmode = dr32(MacMode) & ~(AcceptAllMulticast | AcceptAllPhys);
 
 724         if (dev->flags & IFF_PROMISC) { /* Set promiscuous. */
 
 725                 macmode |= AcceptAllMulticast | AcceptAllPhys;
 
 729         if ((dev->mc_count > 1000) || (dev->flags & IFF_ALLMULTI)) {
 
 730                 /* Too many to filter well -- accept all multicasts. */
 
 731                 macmode |= AcceptAllMulticast;
 
 735         /* Note that only the low-address shortword of setup_frame is valid!
 
 736            The values are doubled for big-endian architectures. */
 
 737         if (dev->mc_count > 14) /* Must use a multicast hash table. */
 
 738                 build_setup_frame_hash (de->setup_frame, dev);
 
 740                 build_setup_frame_perfect (de->setup_frame, dev);
 
 743          * Now add this frame to the Tx list.
 
 748         /* Avoid a chip errata by prefixing a dummy entry. */
 
 750                 de->tx_skb[entry].skb = DE_DUMMY_SKB;
 
 752                 dummy_txd = &de->tx_ring[entry];
 
 753                 dummy_txd->opts2 = (entry == (DE_TX_RING_SIZE - 1)) ?
 
 754                                    cpu_to_le32(RingEnd) : 0;
 
 755                 dummy_txd->addr1 = 0;
 
 757                 /* Must set DescOwned later to avoid race with chip */
 
 759                 entry = NEXT_TX(entry);
 
 762         de->tx_skb[entry].skb = DE_SETUP_SKB;
 
 763         de->tx_skb[entry].mapping = mapping =
 
 764             pci_map_single (de->pdev, de->setup_frame,
 
 765                             sizeof (de->setup_frame), PCI_DMA_TODEVICE);
 
 767         /* Put the setup frame on the Tx list. */
 
 768         txd = &de->tx_ring[entry];
 
 769         if (entry == (DE_TX_RING_SIZE - 1))
 
 770                 txd->opts2 = cpu_to_le32(SetupFrame | RingEnd | sizeof (de->setup_frame));
 
 772                 txd->opts2 = cpu_to_le32(SetupFrame | sizeof (de->setup_frame));
 
 773         txd->addr1 = cpu_to_le32(mapping);
 
 776         txd->opts1 = cpu_to_le32(DescOwn);
 
 780                 dummy_txd->opts1 = cpu_to_le32(DescOwn);
 
 784         de->tx_head = NEXT_TX(entry);
 
 786         if (TX_BUFFS_AVAIL(de) == 0)
 
 787                 netif_stop_queue(dev);
 
 789         /* Trigger an immediate transmit demand. */
 
 790         dw32(TxPoll, NormalTxPoll);
 
 793         if (macmode != dr32(MacMode))
 
 794                 dw32(MacMode, macmode);
 
 797 static void de_set_rx_mode (struct net_device *dev)
 
 800         struct de_private *de = dev->priv;
 
 802         spin_lock_irqsave (&de->lock, flags);
 
 803         __de_set_rx_mode(dev);
 
 804         spin_unlock_irqrestore (&de->lock, flags);
 
 807 static inline void de_rx_missed(struct de_private *de, u32 rx_missed)
 
 809         if (unlikely(rx_missed & RxMissedOver))
 
 810                 de->net_stats.rx_missed_errors += RxMissedMask;
 
 812                 de->net_stats.rx_missed_errors += (rx_missed & RxMissedMask);
 
 815 static void __de_get_stats(struct de_private *de)
 
 817         u32 tmp = dr32(RxMissed); /* self-clearing */
 
 819         de_rx_missed(de, tmp);
 
 822 static struct net_device_stats *de_get_stats(struct net_device *dev)
 
 824         struct de_private *de = dev->priv;
 
 826         /* The chip only need report frame silently dropped. */
 
 827         spin_lock_irq(&de->lock);
 
 828         if (netif_running(dev) && netif_device_present(dev))
 
 830         spin_unlock_irq(&de->lock);
 
 832         return &de->net_stats;
 
 835 static inline int de_is_running (struct de_private *de)
 
 837         return (dr32(MacStatus) & (RxState | TxState)) ? 1 : 0;
 
 840 static void de_stop_rxtx (struct de_private *de)
 
 843         unsigned int i = 1300/100;
 
 845         macmode = dr32(MacMode);
 
 846         if (macmode & RxTx) {
 
 847                 dw32(MacMode, macmode & ~RxTx);
 
 851         /* wait until in-flight frame completes.
 
 852          * Max time @ 10BT: 1500*8b/10Mbps == 1200us (+ 100us margin)
 
 853          * Typically expect this loop to end in < 50 us on 100BT.
 
 856                 if (!de_is_running(de))
 
 861         printk(KERN_WARNING "%s: timeout expired stopping DMA\n", de->dev->name);
 
 864 static inline void de_start_rxtx (struct de_private *de)
 
 868         macmode = dr32(MacMode);
 
 869         if ((macmode & RxTx) != RxTx) {
 
 870                 dw32(MacMode, macmode | RxTx);
 
 875 static void de_stop_hw (struct de_private *de)
 
 883         dw32(MacStatus, dr32(MacStatus));
 
 888         de->tx_head = de->tx_tail = 0;
 
 891 static void de_link_up(struct de_private *de)
 
 893         if (!netif_carrier_ok(de->dev)) {
 
 894                 netif_carrier_on(de->dev);
 
 895                 if (netif_msg_link(de))
 
 896                         printk(KERN_INFO "%s: link up, media %s\n",
 
 897                                de->dev->name, media_name[de->media_type]);
 
 901 static void de_link_down(struct de_private *de)
 
 903         if (netif_carrier_ok(de->dev)) {
 
 904                 netif_carrier_off(de->dev);
 
 905                 if (netif_msg_link(de))
 
 906                         printk(KERN_INFO "%s: link down\n", de->dev->name);
 
 910 static void de_set_media (struct de_private *de)
 
 912         unsigned media = de->media_type;
 
 913         u32 macmode = dr32(MacMode);
 
 915         if (de_is_running(de))
 
 916                 printk(KERN_WARNING "%s: chip is running while changing media!\n", de->dev->name);
 
 919                 dw32(CSR11, FULL_DUPLEX_MAGIC);
 
 920         dw32(CSR13, 0); /* Reset phy */
 
 921         dw32(CSR14, de->media[media].csr14);
 
 922         dw32(CSR15, de->media[media].csr15);
 
 923         dw32(CSR13, de->media[media].csr13);
 
 925         /* must delay 10ms before writing to other registers,
 
 930         if (media == DE_MEDIA_TP_FD)
 
 931                 macmode |= FullDuplex;
 
 933                 macmode &= ~FullDuplex;
 
 935         if (netif_msg_link(de)) {
 
 936                 printk(KERN_INFO "%s: set link %s\n"
 
 937                        KERN_INFO "%s:    mode 0x%x, sia 0x%x,0x%x,0x%x,0x%x\n"
 
 938                        KERN_INFO "%s:    set mode 0x%x, set sia 0x%x,0x%x,0x%x\n",
 
 939                        de->dev->name, media_name[media],
 
 940                        de->dev->name, dr32(MacMode), dr32(SIAStatus),
 
 941                        dr32(CSR13), dr32(CSR14), dr32(CSR15),
 
 942                        de->dev->name, macmode, de->media[media].csr13,
 
 943                        de->media[media].csr14, de->media[media].csr15);
 
 945         if (macmode != dr32(MacMode))
 
 946                 dw32(MacMode, macmode);
 
 949 static void de_next_media (struct de_private *de, u32 *media,
 
 950                            unsigned int n_media)
 
 954         for (i = 0; i < n_media; i++) {
 
 955                 if (de_ok_to_advertise(de, media[i])) {
 
 956                         de->media_type = media[i];
 
 962 static void de21040_media_timer (unsigned long data)
 
 964         struct de_private *de = (struct de_private *) data;
 
 965         struct net_device *dev = de->dev;
 
 966         u32 status = dr32(SIAStatus);
 
 967         unsigned int carrier;
 
 970         carrier = (status & NetCxnErr) ? 0 : 1;
 
 973                 if (de->media_type != DE_MEDIA_AUI && (status & LinkFailStatus))
 
 976                 de->media_timer.expires = jiffies + DE_TIMER_LINK;
 
 977                 add_timer(&de->media_timer);
 
 978                 if (!netif_carrier_ok(dev))
 
 981                         if (netif_msg_timer(de))
 
 982                                 printk(KERN_INFO "%s: %s link ok, status %x\n",
 
 983                                        dev->name, media_name[de->media_type],
 
 993         if (de->media_type == DE_MEDIA_AUI) {
 
 994                 u32 next_state = DE_MEDIA_TP;
 
 995                 de_next_media(de, &next_state, 1);
 
 997                 u32 next_state = DE_MEDIA_AUI;
 
 998                 de_next_media(de, &next_state, 1);
 
1001         spin_lock_irqsave(&de->lock, flags);
 
1003         spin_unlock_irqrestore(&de->lock, flags);
 
1008         de->media_timer.expires = jiffies + DE_TIMER_NO_LINK;
 
1009         add_timer(&de->media_timer);
 
1011         if (netif_msg_timer(de))
 
1012                 printk(KERN_INFO "%s: no link, trying media %s, status %x\n",
 
1013                        dev->name, media_name[de->media_type], status);
 
1016 static unsigned int de_ok_to_advertise (struct de_private *de, u32 new_media)
 
1018         switch (new_media) {
 
1019         case DE_MEDIA_TP_AUTO:
 
1020                 if (!(de->media_advertise & ADVERTISED_Autoneg))
 
1022                 if (!(de->media_advertise & (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full)))
 
1026                 if (!(de->media_advertise & ADVERTISED_BNC))
 
1030                 if (!(de->media_advertise & ADVERTISED_AUI))
 
1034                 if (!(de->media_advertise & ADVERTISED_10baseT_Half))
 
1037         case DE_MEDIA_TP_FD:
 
1038                 if (!(de->media_advertise & ADVERTISED_10baseT_Full))
 
1046 static void de21041_media_timer (unsigned long data)
 
1048         struct de_private *de = (struct de_private *) data;
 
1049         struct net_device *dev = de->dev;
 
1050         u32 status = dr32(SIAStatus);
 
1051         unsigned int carrier;
 
1052         unsigned long flags;
 
1054         carrier = (status & NetCxnErr) ? 0 : 1;
 
1057                 if ((de->media_type == DE_MEDIA_TP_AUTO ||
 
1058                      de->media_type == DE_MEDIA_TP ||
 
1059                      de->media_type == DE_MEDIA_TP_FD) &&
 
1060                     (status & LinkFailStatus))
 
1063                 de->media_timer.expires = jiffies + DE_TIMER_LINK;
 
1064                 add_timer(&de->media_timer);
 
1065                 if (!netif_carrier_ok(dev))
 
1068                         if (netif_msg_timer(de))
 
1069                                 printk(KERN_INFO "%s: %s link ok, mode %x status %x\n",
 
1070                                        dev->name, media_name[de->media_type],
 
1071                                        dr32(MacMode), status);
 
1077         /* if media type locked, don't switch media */
 
1081         /* if activity detected, use that as hint for new media type */
 
1082         if (status & NonselPortActive) {
 
1083                 unsigned int have_media = 1;
 
1085                 /* if AUI/BNC selected, then activity is on TP port */
 
1086                 if (de->media_type == DE_MEDIA_AUI ||
 
1087                     de->media_type == DE_MEDIA_BNC) {
 
1088                         if (de_ok_to_advertise(de, DE_MEDIA_TP_AUTO))
 
1089                                 de->media_type = DE_MEDIA_TP_AUTO;
 
1094                 /* TP selected.  If there is only TP and BNC, then it's BNC */
 
1095                 else if (((de->media_supported & DE_AUI_BNC) == SUPPORTED_BNC) &&
 
1096                          de_ok_to_advertise(de, DE_MEDIA_BNC))
 
1097                         de->media_type = DE_MEDIA_BNC;
 
1099                 /* TP selected.  If there is only TP and AUI, then it's AUI */
 
1100                 else if (((de->media_supported & DE_AUI_BNC) == SUPPORTED_AUI) &&
 
1101                          de_ok_to_advertise(de, DE_MEDIA_AUI))
 
1102                         de->media_type = DE_MEDIA_AUI;
 
1104                 /* otherwise, ignore the hint */
 
1113          * Absent or ambiguous activity hint, move to next advertised
 
1114          * media state.  If de->media_type is left unchanged, this
 
1115          * simply resets the PHY and reloads the current media settings.
 
1117         if (de->media_type == DE_MEDIA_AUI) {
 
1118                 u32 next_states[] = { DE_MEDIA_BNC, DE_MEDIA_TP_AUTO };
 
1119                 de_next_media(de, next_states, ARRAY_SIZE(next_states));
 
1120         } else if (de->media_type == DE_MEDIA_BNC) {
 
1121                 u32 next_states[] = { DE_MEDIA_TP_AUTO, DE_MEDIA_AUI };
 
1122                 de_next_media(de, next_states, ARRAY_SIZE(next_states));
 
1124                 u32 next_states[] = { DE_MEDIA_AUI, DE_MEDIA_BNC, DE_MEDIA_TP_AUTO };
 
1125                 de_next_media(de, next_states, ARRAY_SIZE(next_states));
 
1129         spin_lock_irqsave(&de->lock, flags);
 
1131         spin_unlock_irqrestore(&de->lock, flags);
 
1136         de->media_timer.expires = jiffies + DE_TIMER_NO_LINK;
 
1137         add_timer(&de->media_timer);
 
1139         if (netif_msg_timer(de))
 
1140                 printk(KERN_INFO "%s: no link, trying media %s, status %x\n",
 
1141                        dev->name, media_name[de->media_type], status);
 
1144 static void de_media_interrupt (struct de_private *de, u32 status)
 
1146         if (status & LinkPass) {
 
1148                 mod_timer(&de->media_timer, jiffies + DE_TIMER_LINK);
 
1152         BUG_ON(!(status & LinkFail));
 
1154         if (netif_carrier_ok(de->dev)) {
 
1156                 mod_timer(&de->media_timer, jiffies + DE_TIMER_NO_LINK);
 
1160 static int de_reset_mac (struct de_private *de)
 
1165          * Reset MAC.  de4x5.c and tulip.c examined for "advice"
 
1169         if (dr32(BusMode) == 0xffffffff)
 
1172         /* Reset the chip, holding bit 0 set at least 50 PCI cycles. */
 
1173         dw32 (BusMode, CmdReset);
 
1176         dw32 (BusMode, de_bus_mode);
 
1179         for (tmp = 0; tmp < 5; tmp++) {
 
1186         status = dr32(MacStatus);
 
1187         if (status & (RxState | TxState))
 
1189         if (status == 0xffffffff)
 
1194 static void de_adapter_wake (struct de_private *de)
 
1201         pci_read_config_dword(de->pdev, PCIPM, &pmctl);
 
1202         if (pmctl & PM_Mask) {
 
1204                 pci_write_config_dword(de->pdev, PCIPM, pmctl);
 
1206                 /* de4x5.c delays, so we do too */
 
1211 static void de_adapter_sleep (struct de_private *de)
 
1218         pci_read_config_dword(de->pdev, PCIPM, &pmctl);
 
1220         pci_write_config_dword(de->pdev, PCIPM, pmctl);
 
1223 static int de_init_hw (struct de_private *de)
 
1225         struct net_device *dev = de->dev;
 
1229         de_adapter_wake(de);
 
1231         macmode = dr32(MacMode) & ~MacModeClear;
 
1233         rc = de_reset_mac(de);
 
1237         de_set_media(de); /* reset phy */
 
1239         dw32(RxRingAddr, de->ring_dma);
 
1240         dw32(TxRingAddr, de->ring_dma + (sizeof(struct de_desc) * DE_RX_RING_SIZE));
 
1242         dw32(MacMode, RxTx | macmode);
 
1244         dr32(RxMissed); /* self-clearing */
 
1246         dw32(IntrMask, de_intr_mask);
 
1248         de_set_rx_mode(dev);
 
1253 static int de_refill_rx (struct de_private *de)
 
1257         for (i = 0; i < DE_RX_RING_SIZE; i++) {
 
1258                 struct sk_buff *skb;
 
1260                 skb = dev_alloc_skb(de->rx_buf_sz);
 
1266                 de->rx_skb[i].mapping = pci_map_single(de->pdev,
 
1267                         skb->data, de->rx_buf_sz, PCI_DMA_FROMDEVICE);
 
1268                 de->rx_skb[i].skb = skb;
 
1270                 de->rx_ring[i].opts1 = cpu_to_le32(DescOwn);
 
1271                 if (i == (DE_RX_RING_SIZE - 1))
 
1272                         de->rx_ring[i].opts2 =
 
1273                                 cpu_to_le32(RingEnd | de->rx_buf_sz);
 
1275                         de->rx_ring[i].opts2 = cpu_to_le32(de->rx_buf_sz);
 
1276                 de->rx_ring[i].addr1 = cpu_to_le32(de->rx_skb[i].mapping);
 
1277                 de->rx_ring[i].addr2 = 0;
 
1287 static int de_init_rings (struct de_private *de)
 
1289         memset(de->tx_ring, 0, sizeof(struct de_desc) * DE_TX_RING_SIZE);
 
1290         de->tx_ring[DE_TX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
 
1293         de->tx_head = de->tx_tail = 0;
 
1295         return de_refill_rx (de);
 
1298 static int de_alloc_rings (struct de_private *de)
 
1300         de->rx_ring = pci_alloc_consistent(de->pdev, DE_RING_BYTES, &de->ring_dma);
 
1303         de->tx_ring = &de->rx_ring[DE_RX_RING_SIZE];
 
1304         return de_init_rings(de);
 
1307 static void de_clean_rings (struct de_private *de)
 
1311         memset(de->rx_ring, 0, sizeof(struct de_desc) * DE_RX_RING_SIZE);
 
1312         de->rx_ring[DE_RX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
 
1314         memset(de->tx_ring, 0, sizeof(struct de_desc) * DE_TX_RING_SIZE);
 
1315         de->tx_ring[DE_TX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
 
1318         for (i = 0; i < DE_RX_RING_SIZE; i++) {
 
1319                 if (de->rx_skb[i].skb) {
 
1320                         pci_unmap_single(de->pdev, de->rx_skb[i].mapping,
 
1321                                          de->rx_buf_sz, PCI_DMA_FROMDEVICE);
 
1322                         dev_kfree_skb(de->rx_skb[i].skb);
 
1326         for (i = 0; i < DE_TX_RING_SIZE; i++) {
 
1327                 struct sk_buff *skb = de->tx_skb[i].skb;
 
1328                 if ((skb) && (skb != DE_DUMMY_SKB)) {
 
1329                         if (skb != DE_SETUP_SKB) {
 
1330                                 de->net_stats.tx_dropped++;
 
1331                                 pci_unmap_single(de->pdev,
 
1332                                         de->tx_skb[i].mapping,
 
1333                                         skb->len, PCI_DMA_TODEVICE);
 
1336                                 pci_unmap_single(de->pdev,
 
1337                                         de->tx_skb[i].mapping,
 
1338                                         sizeof(de->setup_frame),
 
1344         memset(&de->rx_skb, 0, sizeof(struct ring_info) * DE_RX_RING_SIZE);
 
1345         memset(&de->tx_skb, 0, sizeof(struct ring_info) * DE_TX_RING_SIZE);
 
1348 static void de_free_rings (struct de_private *de)
 
1351         pci_free_consistent(de->pdev, DE_RING_BYTES, de->rx_ring, de->ring_dma);
 
1356 static int de_open (struct net_device *dev)
 
1358         struct de_private *de = dev->priv;
 
1361         if (netif_msg_ifup(de))
 
1362                 printk(KERN_DEBUG "%s: enabling interface\n", dev->name);
 
1364         de->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32);
 
1366         rc = de_alloc_rings(de);
 
1368                 printk(KERN_ERR "%s: ring allocation failure, err=%d\n",
 
1375         rc = request_irq(dev->irq, de_interrupt, IRQF_SHARED, dev->name, dev);
 
1377                 printk(KERN_ERR "%s: IRQ %d request failure, err=%d\n",
 
1378                        dev->name, dev->irq, rc);
 
1382         rc = de_init_hw(de);
 
1384                 printk(KERN_ERR "%s: h/w init failure, err=%d\n",
 
1386                 goto err_out_free_irq;
 
1389         netif_start_queue(dev);
 
1390         mod_timer(&de->media_timer, jiffies + DE_TIMER_NO_LINK);
 
1395         free_irq(dev->irq, dev);
 
1401 static int de_close (struct net_device *dev)
 
1403         struct de_private *de = dev->priv;
 
1404         unsigned long flags;
 
1406         if (netif_msg_ifdown(de))
 
1407                 printk(KERN_DEBUG "%s: disabling interface\n", dev->name);
 
1409         del_timer_sync(&de->media_timer);
 
1411         spin_lock_irqsave(&de->lock, flags);
 
1413         netif_stop_queue(dev);
 
1414         netif_carrier_off(dev);
 
1415         spin_unlock_irqrestore(&de->lock, flags);
 
1417         free_irq(dev->irq, dev);
 
1420         de_adapter_sleep(de);
 
1424 static void de_tx_timeout (struct net_device *dev)
 
1426         struct de_private *de = dev->priv;
 
1428         printk(KERN_DEBUG "%s: NIC status %08x mode %08x sia %08x desc %u/%u/%u\n",
 
1429                dev->name, dr32(MacStatus), dr32(MacMode), dr32(SIAStatus),
 
1430                de->rx_tail, de->tx_head, de->tx_tail);
 
1432         del_timer_sync(&de->media_timer);
 
1434         disable_irq(dev->irq);
 
1435         spin_lock_irq(&de->lock);
 
1438         netif_stop_queue(dev);
 
1439         netif_carrier_off(dev);
 
1441         spin_unlock_irq(&de->lock);
 
1442         enable_irq(dev->irq);
 
1444         /* Update the error counts. */
 
1447         synchronize_irq(dev->irq);
 
1454         netif_wake_queue(dev);
 
1457 static void __de_get_regs(struct de_private *de, u8 *buf)
 
1460         u32 *rbuf = (u32 *)buf;
 
1463         for (i = 0; i < DE_NUM_REGS; i++)
 
1464                 rbuf[i] = dr32(i * 8);
 
1466         /* handle self-clearing RxMissed counter, CSR8 */
 
1467         de_rx_missed(de, rbuf[8]);
 
1470 static int __de_get_settings(struct de_private *de, struct ethtool_cmd *ecmd)
 
1472         ecmd->supported = de->media_supported;
 
1473         ecmd->transceiver = XCVR_INTERNAL;
 
1474         ecmd->phy_address = 0;
 
1475         ecmd->advertising = de->media_advertise;
 
1477         switch (de->media_type) {
 
1479                 ecmd->port = PORT_AUI;
 
1483                 ecmd->port = PORT_BNC;
 
1487                 ecmd->port = PORT_TP;
 
1488                 ecmd->speed = SPEED_10;
 
1492         if (dr32(MacMode) & FullDuplex)
 
1493                 ecmd->duplex = DUPLEX_FULL;
 
1495                 ecmd->duplex = DUPLEX_HALF;
 
1498                 ecmd->autoneg = AUTONEG_DISABLE;
 
1500                 ecmd->autoneg = AUTONEG_ENABLE;
 
1502         /* ignore maxtxpkt, maxrxpkt for now */
 
1507 static int __de_set_settings(struct de_private *de, struct ethtool_cmd *ecmd)
 
1510         unsigned int media_lock;
 
1512         if (ecmd->speed != SPEED_10 && ecmd->speed != 5 && ecmd->speed != 2)
 
1514         if (de->de21040 && ecmd->speed == 2)
 
1516         if (ecmd->duplex != DUPLEX_HALF && ecmd->duplex != DUPLEX_FULL)
 
1518         if (ecmd->port != PORT_TP && ecmd->port != PORT_AUI && ecmd->port != PORT_BNC)
 
1520         if (de->de21040 && ecmd->port == PORT_BNC)
 
1522         if (ecmd->transceiver != XCVR_INTERNAL)
 
1524         if (ecmd->autoneg != AUTONEG_DISABLE && ecmd->autoneg != AUTONEG_ENABLE)
 
1526         if (ecmd->advertising & ~de->media_supported)
 
1528         if (ecmd->autoneg == AUTONEG_ENABLE &&
 
1529             (!(ecmd->advertising & ADVERTISED_Autoneg)))
 
1532         switch (ecmd->port) {
 
1534                 new_media = DE_MEDIA_AUI;
 
1535                 if (!(ecmd->advertising & ADVERTISED_AUI))
 
1539                 new_media = DE_MEDIA_BNC;
 
1540                 if (!(ecmd->advertising & ADVERTISED_BNC))
 
1544                 if (ecmd->autoneg == AUTONEG_ENABLE)
 
1545                         new_media = DE_MEDIA_TP_AUTO;
 
1546                 else if (ecmd->duplex == DUPLEX_FULL)
 
1547                         new_media = DE_MEDIA_TP_FD;
 
1549                         new_media = DE_MEDIA_TP;
 
1550                 if (!(ecmd->advertising & ADVERTISED_TP))
 
1552                 if (!(ecmd->advertising & (ADVERTISED_10baseT_Full | ADVERTISED_10baseT_Half)))
 
1557         media_lock = (ecmd->autoneg == AUTONEG_ENABLE) ? 0 : 1;
 
1559         if ((new_media == de->media_type) &&
 
1560             (media_lock == de->media_lock) &&
 
1561             (ecmd->advertising == de->media_advertise))
 
1562                 return 0; /* nothing to change */
 
1567         de->media_type = new_media;
 
1568         de->media_lock = media_lock;
 
1569         de->media_advertise = ecmd->advertising;
 
1575 static void de_get_drvinfo (struct net_device *dev,struct ethtool_drvinfo *info)
 
1577         struct de_private *de = dev->priv;
 
1579         strcpy (info->driver, DRV_NAME);
 
1580         strcpy (info->version, DRV_VERSION);
 
1581         strcpy (info->bus_info, pci_name(de->pdev));
 
1582         info->eedump_len = DE_EEPROM_SIZE;
 
1585 static int de_get_regs_len(struct net_device *dev)
 
1587         return DE_REGS_SIZE;
 
1590 static int de_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
 
1592         struct de_private *de = dev->priv;
 
1595         spin_lock_irq(&de->lock);
 
1596         rc = __de_get_settings(de, ecmd);
 
1597         spin_unlock_irq(&de->lock);
 
1602 static int de_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
 
1604         struct de_private *de = dev->priv;
 
1607         spin_lock_irq(&de->lock);
 
1608         rc = __de_set_settings(de, ecmd);
 
1609         spin_unlock_irq(&de->lock);
 
1614 static u32 de_get_msglevel(struct net_device *dev)
 
1616         struct de_private *de = dev->priv;
 
1618         return de->msg_enable;
 
1621 static void de_set_msglevel(struct net_device *dev, u32 msglvl)
 
1623         struct de_private *de = dev->priv;
 
1625         de->msg_enable = msglvl;
 
1628 static int de_get_eeprom(struct net_device *dev,
 
1629                          struct ethtool_eeprom *eeprom, u8 *data)
 
1631         struct de_private *de = dev->priv;
 
1635         if ((eeprom->offset != 0) || (eeprom->magic != 0) ||
 
1636             (eeprom->len != DE_EEPROM_SIZE))
 
1638         memcpy(data, de->ee_data, eeprom->len);
 
1643 static int de_nway_reset(struct net_device *dev)
 
1645         struct de_private *de = dev->priv;
 
1648         if (de->media_type != DE_MEDIA_TP_AUTO)
 
1650         if (netif_carrier_ok(de->dev))
 
1653         status = dr32(SIAStatus);
 
1654         dw32(SIAStatus, (status & ~NWayState) | NWayRestart);
 
1655         if (netif_msg_link(de))
 
1656                 printk(KERN_INFO "%s: link nway restart, status %x,%x\n",
 
1657                        de->dev->name, status, dr32(SIAStatus));
 
1661 static void de_get_regs(struct net_device *dev, struct ethtool_regs *regs,
 
1664         struct de_private *de = dev->priv;
 
1666         regs->version = (DE_REGS_VER << 2) | de->de21040;
 
1668         spin_lock_irq(&de->lock);
 
1669         __de_get_regs(de, data);
 
1670         spin_unlock_irq(&de->lock);
 
1673 static const struct ethtool_ops de_ethtool_ops = {
 
1674         .get_link               = ethtool_op_get_link,
 
1675         .get_drvinfo            = de_get_drvinfo,
 
1676         .get_regs_len           = de_get_regs_len,
 
1677         .get_settings           = de_get_settings,
 
1678         .set_settings           = de_set_settings,
 
1679         .get_msglevel           = de_get_msglevel,
 
1680         .set_msglevel           = de_set_msglevel,
 
1681         .get_eeprom             = de_get_eeprom,
 
1682         .nway_reset             = de_nway_reset,
 
1683         .get_regs               = de_get_regs,
 
1686 static void __devinit de21040_get_mac_address (struct de_private *de)
 
1690         dw32 (ROMCmd, 0);       /* Reset the pointer with a dummy write. */
 
1693         for (i = 0; i < 6; i++) {
 
1694                 int value, boguscnt = 100000;
 
1696                         value = dr32(ROMCmd);
 
1697                 while (value < 0 && --boguscnt > 0);
 
1698                 de->dev->dev_addr[i] = value;
 
1701                         printk(KERN_WARNING PFX "timeout reading 21040 MAC address byte %u\n", i);
 
1705 static void __devinit de21040_get_media_info(struct de_private *de)
 
1709         de->media_type = DE_MEDIA_TP;
 
1710         de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Full |
 
1711                                SUPPORTED_10baseT_Half | SUPPORTED_AUI;
 
1712         de->media_advertise = de->media_supported;
 
1714         for (i = 0; i < DE_MAX_MEDIA; i++) {
 
1718                 case DE_MEDIA_TP_FD:
 
1719                         de->media[i].type = i;
 
1720                         de->media[i].csr13 = t21040_csr13[i];
 
1721                         de->media[i].csr14 = t21040_csr14[i];
 
1722                         de->media[i].csr15 = t21040_csr15[i];
 
1725                         de->media[i].type = DE_MEDIA_INVALID;
 
1731 /* Note: this routine returns extra data bits for size detection. */
 
1732 static unsigned __devinit tulip_read_eeprom(void __iomem *regs, int location, int addr_len)
 
1735         unsigned retval = 0;
 
1736         void __iomem *ee_addr = regs + ROMCmd;
 
1737         int read_cmd = location | (EE_READ_CMD << addr_len);
 
1739         writel(EE_ENB & ~EE_CS, ee_addr);
 
1740         writel(EE_ENB, ee_addr);
 
1742         /* Shift the read command bits out. */
 
1743         for (i = 4 + addr_len; i >= 0; i--) {
 
1744                 short dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
 
1745                 writel(EE_ENB | dataval, ee_addr);
 
1747                 writel(EE_ENB | dataval | EE_SHIFT_CLK, ee_addr);
 
1749                 retval = (retval << 1) | ((readl(ee_addr) & EE_DATA_READ) ? 1 : 0);
 
1751         writel(EE_ENB, ee_addr);
 
1754         for (i = 16; i > 0; i--) {
 
1755                 writel(EE_ENB | EE_SHIFT_CLK, ee_addr);
 
1757                 retval = (retval << 1) | ((readl(ee_addr) & EE_DATA_READ) ? 1 : 0);
 
1758                 writel(EE_ENB, ee_addr);
 
1762         /* Terminate the EEPROM access. */
 
1763         writel(EE_ENB & ~EE_CS, ee_addr);
 
1767 static void __devinit de21041_get_srom_info (struct de_private *de)
 
1769         unsigned i, sa_offset = 0, ofs;
 
1770         u8 ee_data[DE_EEPROM_SIZE + 6] = {};
 
1771         unsigned ee_addr_size = tulip_read_eeprom(de->regs, 0xff, 8) & 0x40000 ? 8 : 6;
 
1772         struct de_srom_info_leaf *il;
 
1775         /* download entire eeprom */
 
1776         for (i = 0; i < DE_EEPROM_WORDS; i++)
 
1777                 ((__le16 *)ee_data)[i] =
 
1778                         cpu_to_le16(tulip_read_eeprom(de->regs, i, ee_addr_size));
 
1780         /* DEC now has a specification but early board makers
 
1781            just put the address in the first EEPROM locations. */
 
1782         /* This does  memcmp(eedata, eedata+16, 8) */
 
1784 #ifndef CONFIG_MIPS_COBALT
 
1786         for (i = 0; i < 8; i ++)
 
1787                 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 (get_unaligned(&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 = get_unaligned(&ib->csr13);
 
1877                         de->media[idx].csr14 = get_unaligned(&ib->csr14);
 
1878                         de->media[idx].csr15 = get_unaligned(&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 = kmemdup(&ee_data[0], DE_EEPROM_SIZE, GFP_KERNEL);
 
1913         /* for error cases, it's ok to assume we support all these */
 
1914         for (i = 0; i < DE_MAX_MEDIA; i++)
 
1915                 de->media[i].type = i;
 
1916         de->media_supported =
 
1917                 SUPPORTED_10baseT_Half |
 
1918                 SUPPORTED_10baseT_Full |
 
1926 static int __devinit de_init_one (struct pci_dev *pdev,
 
1927                                   const struct pci_device_id *ent)
 
1929         struct net_device *dev;
 
1930         struct de_private *de;
 
1933         unsigned long pciaddr;
 
1934         static int board_idx = -1;
 
1935         DECLARE_MAC_BUF(mac);
 
1941                 printk("%s", version);
 
1944         /* allocate a new ethernet device structure, and fill in defaults */
 
1945         dev = alloc_etherdev(sizeof(struct de_private));
 
1949         SET_NETDEV_DEV(dev, &pdev->dev);
 
1950         dev->open = de_open;
 
1951         dev->stop = de_close;
 
1952         dev->set_multicast_list = de_set_rx_mode;
 
1953         dev->hard_start_xmit = de_start_xmit;
 
1954         dev->get_stats = de_get_stats;
 
1955         dev->ethtool_ops = &de_ethtool_ops;
 
1956         dev->tx_timeout = de_tx_timeout;
 
1957         dev->watchdog_timeo = TX_TIMEOUT;
 
1960         de->de21040 = ent->driver_data == 0 ? 1 : 0;
 
1963         de->msg_enable = (debug < 0 ? DE_DEF_MSG_ENABLE : debug);
 
1964         de->board_idx = board_idx;
 
1965         spin_lock_init (&de->lock);
 
1966         init_timer(&de->media_timer);
 
1968                 de->media_timer.function = de21040_media_timer;
 
1970                 de->media_timer.function = de21041_media_timer;
 
1971         de->media_timer.data = (unsigned long) de;
 
1973         netif_carrier_off(dev);
 
1974         netif_stop_queue(dev);
 
1976         /* wake up device, assign resources */
 
1977         rc = pci_enable_device(pdev);
 
1981         /* reserve PCI resources to ensure driver atomicity */
 
1982         rc = pci_request_regions(pdev, DRV_NAME);
 
1984                 goto err_out_disable;
 
1986         /* check for invalid IRQ value */
 
1987         if (pdev->irq < 2) {
 
1989                 printk(KERN_ERR PFX "invalid irq (%d) for pci dev %s\n",
 
1990                        pdev->irq, pci_name(pdev));
 
1994         dev->irq = pdev->irq;
 
1996         /* obtain and check validity of PCI I/O address */
 
1997         pciaddr = pci_resource_start(pdev, 1);
 
2000                 printk(KERN_ERR PFX "no MMIO resource for pci dev %s\n",
 
2004         if (pci_resource_len(pdev, 1) < DE_REGS_SIZE) {
 
2006                 printk(KERN_ERR PFX "MMIO resource (%llx) too small on pci dev %s\n",
 
2007                        (unsigned long long)pci_resource_len(pdev, 1), pci_name(pdev));
 
2011         /* remap CSR registers */
 
2012         regs = ioremap_nocache(pciaddr, DE_REGS_SIZE);
 
2015                 printk(KERN_ERR PFX "Cannot map PCI MMIO (%llx@%lx) on pci dev %s\n",
 
2016                         (unsigned long long)pci_resource_len(pdev, 1),
 
2017                         pciaddr, pci_name(pdev));
 
2020         dev->base_addr = (unsigned long) regs;
 
2023         de_adapter_wake(de);
 
2025         /* make sure hardware is not running */
 
2026         rc = de_reset_mac(de);
 
2028                 printk(KERN_ERR PFX "Cannot reset MAC, pci dev %s\n",
 
2033         /* get MAC address, initialize default media type and
 
2034          * get list of supported media
 
2037                 de21040_get_mac_address(de);
 
2038                 de21040_get_media_info(de);
 
2040                 de21041_get_srom_info(de);
 
2043         /* register new network interface with kernel */
 
2044         rc = register_netdev(dev);
 
2048         /* print info about board and interface just registered */
 
2049         printk (KERN_INFO "%s: %s at 0x%lx, %s, IRQ %d\n",
 
2051                 de->de21040 ? "21040" : "21041",
 
2053                 print_mac(mac, dev->dev_addr),
 
2056         pci_set_drvdata(pdev, dev);
 
2058         /* enable busmastering */
 
2059         pci_set_master(pdev);
 
2061         /* put adapter to sleep */
 
2062         de_adapter_sleep(de);
 
2070         pci_release_regions(pdev);
 
2072         pci_disable_device(pdev);
 
2078 static void __devexit de_remove_one (struct pci_dev *pdev)
 
2080         struct net_device *dev = pci_get_drvdata(pdev);
 
2081         struct de_private *de = dev->priv;
 
2084         unregister_netdev(dev);
 
2087         pci_release_regions(pdev);
 
2088         pci_disable_device(pdev);
 
2089         pci_set_drvdata(pdev, NULL);
 
2095 static int de_suspend (struct pci_dev *pdev, pm_message_t state)
 
2097         struct net_device *dev = pci_get_drvdata (pdev);
 
2098         struct de_private *de = dev->priv;
 
2101         if (netif_running (dev)) {
 
2102                 del_timer_sync(&de->media_timer);
 
2104                 disable_irq(dev->irq);
 
2105                 spin_lock_irq(&de->lock);
 
2108                 netif_stop_queue(dev);
 
2109                 netif_device_detach(dev);
 
2110                 netif_carrier_off(dev);
 
2112                 spin_unlock_irq(&de->lock);
 
2113                 enable_irq(dev->irq);
 
2115                 /* Update the error counts. */
 
2118                 synchronize_irq(dev->irq);
 
2121                 de_adapter_sleep(de);
 
2122                 pci_disable_device(pdev);
 
2124                 netif_device_detach(dev);
 
2130 static int de_resume (struct pci_dev *pdev)
 
2132         struct net_device *dev = pci_get_drvdata (pdev);
 
2133         struct de_private *de = dev->priv;
 
2137         if (netif_device_present(dev))
 
2139         if (!netif_running(dev))
 
2141         if ((retval = pci_enable_device(pdev))) {
 
2142                 printk (KERN_ERR "%s: pci_enable_device failed in resume\n",
 
2148         netif_device_attach(dev);
 
2154 #endif /* CONFIG_PM */
 
2156 static struct pci_driver de_driver = {
 
2158         .id_table       = de_pci_tbl,
 
2159         .probe          = de_init_one,
 
2160         .remove         = __devexit_p(de_remove_one),
 
2162         .suspend        = de_suspend,
 
2163         .resume         = de_resume,
 
2167 static int __init de_init (void)
 
2170         printk("%s", version);
 
2172         return pci_register_driver(&de_driver);
 
2175 static void __exit de_exit (void)
 
2177         pci_unregister_driver (&de_driver);
 
2180 module_init(de_init);
 
2181 module_exit(de_exit);