Back to home page

OSCL-LXR

 
 

    


0001 /*  tulip_core.c: A DEC 21x4x-family ethernet driver for Linux.
0002 
0003     Copyright 2000,2001  The Linux Kernel Team
0004     Written/copyright 1994-2001 by Donald Becker.
0005 
0006     This software may be used and distributed according to the terms
0007     of the GNU General Public License, incorporated herein by reference.
0008 
0009     Please submit bugs to http://bugzilla.kernel.org/ .
0010 */
0011 
0012 #define pr_fmt(fmt) "tulip: " fmt
0013 
0014 #define DRV_NAME    "tulip"
0015 
0016 #include <linux/module.h>
0017 #include <linux/pci.h>
0018 #include <linux/slab.h>
0019 #include "tulip.h"
0020 #include <linux/init.h>
0021 #include <linux/interrupt.h>
0022 #include <linux/etherdevice.h>
0023 #include <linux/delay.h>
0024 #include <linux/mii.h>
0025 #include <linux/crc32.h>
0026 #include <asm/unaligned.h>
0027 #include <linux/uaccess.h>
0028 
0029 #ifdef CONFIG_SPARC
0030 #include <asm/prom.h>
0031 #endif
0032 
0033 /* A few user-configurable values. */
0034 
0035 /* Maximum events (Rx packets, etc.) to handle at each interrupt. */
0036 static unsigned int max_interrupt_work = 25;
0037 
0038 #define MAX_UNITS 8
0039 /* Used to pass the full-duplex flag, etc. */
0040 static int full_duplex[MAX_UNITS];
0041 static int options[MAX_UNITS];
0042 static int mtu[MAX_UNITS];          /* Jumbo MTU for interfaces. */
0043 
0044 /*  The possible media types that can be set in options[] are: */
0045 const char * const medianame[32] = {
0046     "10baseT", "10base2", "AUI", "100baseTx",
0047     "10baseT-FDX", "100baseTx-FDX", "100baseT4", "100baseFx",
0048     "100baseFx-FDX", "MII 10baseT", "MII 10baseT-FDX", "MII",
0049     "10baseT(forced)", "MII 100baseTx", "MII 100baseTx-FDX", "MII 100baseT4",
0050     "MII 100baseFx-HDX", "MII 100baseFx-FDX", "Home-PNA 1Mbps", "Invalid-19",
0051     "","","","", "","","","",  "","","","Transceiver reset",
0052 };
0053 
0054 /* Set the copy breakpoint for the copy-only-tiny-buffer Rx structure. */
0055 #if defined(__alpha__) || defined(__arm__) || defined(__hppa__) || \
0056     defined(CONFIG_SPARC) || defined(__ia64__) || \
0057     defined(__sh__) || defined(__mips__)
0058 static int rx_copybreak = 1518;
0059 #else
0060 static int rx_copybreak = 100;
0061 #endif
0062 
0063 /*
0064   Set the bus performance register.
0065     Typical: Set 16 longword cache alignment, no burst limit.
0066     Cache alignment bits 15:14       Burst length 13:8
0067         0000    No alignment  0x00000000 unlimited      0800 8 longwords
0068         4000    8  longwords        0100 1 longword     1000 16 longwords
0069         8000    16 longwords        0200 2 longwords    2000 32 longwords
0070         C000    32  longwords       0400 4 longwords
0071     Warning: many older 486 systems are broken and require setting 0x00A04800
0072        8 longword cache alignment, 8 longword burst.
0073     ToDo: Non-Intel setting could be better.
0074 */
0075 
0076 #if defined(__alpha__) || defined(__ia64__)
0077 static int csr0 = 0x01A00000 | 0xE000;
0078 #elif defined(__i386__) || defined(__powerpc__) || defined(__x86_64__)
0079 static int csr0 = 0x01A00000 | 0x8000;
0080 #elif defined(CONFIG_SPARC) || defined(__hppa__)
0081 /* The UltraSparc PCI controllers will disconnect at every 64-byte
0082  * crossing anyways so it makes no sense to tell Tulip to burst
0083  * any more than that.
0084  */
0085 static int csr0 = 0x01A00000 | 0x9000;
0086 #elif defined(__arm__) || defined(__sh__)
0087 static int csr0 = 0x01A00000 | 0x4800;
0088 #elif defined(__mips__)
0089 static int csr0 = 0x00200000 | 0x4000;
0090 #else
0091 static int csr0;
0092 #endif
0093 
0094 /* Operational parameters that usually are not changed. */
0095 /* Time in jiffies before concluding the transmitter is hung. */
0096 #define TX_TIMEOUT  (4*HZ)
0097 
0098 
0099 MODULE_AUTHOR("The Linux Kernel Team");
0100 MODULE_DESCRIPTION("Digital 21*4* Tulip ethernet driver");
0101 MODULE_LICENSE("GPL");
0102 module_param(tulip_debug, int, 0);
0103 module_param(max_interrupt_work, int, 0);
0104 module_param(rx_copybreak, int, 0);
0105 module_param(csr0, int, 0);
0106 module_param_array(options, int, NULL, 0);
0107 module_param_array(full_duplex, int, NULL, 0);
0108 
0109 #ifdef TULIP_DEBUG
0110 int tulip_debug = TULIP_DEBUG;
0111 #else
0112 int tulip_debug = 1;
0113 #endif
0114 
0115 static void tulip_timer(struct timer_list *t)
0116 {
0117     struct tulip_private *tp = from_timer(tp, t, timer);
0118     struct net_device *dev = tp->dev;
0119 
0120     if (netif_running(dev))
0121         schedule_work(&tp->media_work);
0122 }
0123 
0124 /*
0125  * This table use during operation for capabilities and media timer.
0126  *
0127  * It is indexed via the values in 'enum chips'
0128  */
0129 
0130 const struct tulip_chip_table tulip_tbl[] = {
0131   { }, /* placeholder for array, slot unused currently */
0132   { }, /* placeholder for array, slot unused currently */
0133 
0134   /* DC21140 */
0135   { "Digital DS21140 Tulip", 128, 0x0001ebef,
0136     HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM | HAS_PCI_MWI, tulip_timer,
0137     tulip_media_task },
0138 
0139   /* DC21142, DC21143 */
0140   { "Digital DS21142/43 Tulip", 128, 0x0801fbff,
0141     HAS_MII | HAS_MEDIA_TABLE | ALWAYS_CHECK_MII | HAS_ACPI | HAS_NWAY
0142     | HAS_INTR_MITIGATION | HAS_PCI_MWI, tulip_timer, t21142_media_task },
0143 
0144   /* LC82C168 */
0145   { "Lite-On 82c168 PNIC", 256, 0x0001fbef,
0146     HAS_MII | HAS_PNICNWAY, pnic_timer, },
0147 
0148   /* MX98713 */
0149   { "Macronix 98713 PMAC", 128, 0x0001ebef,
0150     HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM, mxic_timer, },
0151 
0152   /* MX98715 */
0153   { "Macronix 98715 PMAC", 256, 0x0001ebef,
0154     HAS_MEDIA_TABLE, mxic_timer, },
0155 
0156   /* MX98725 */
0157   { "Macronix 98725 PMAC", 256, 0x0001ebef,
0158     HAS_MEDIA_TABLE, mxic_timer, },
0159 
0160   /* AX88140 */
0161   { "ASIX AX88140", 128, 0x0001fbff,
0162     HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM | MC_HASH_ONLY
0163     | IS_ASIX, tulip_timer, tulip_media_task },
0164 
0165   /* PNIC2 */
0166   { "Lite-On PNIC-II", 256, 0x0801fbff,
0167     HAS_MII | HAS_NWAY | HAS_8023X | HAS_PCI_MWI, pnic2_timer, },
0168 
0169   /* COMET */
0170   { "ADMtek Comet", 256, 0x0001abef,
0171     HAS_MII | MC_HASH_ONLY | COMET_MAC_ADDR, comet_timer, },
0172 
0173   /* COMPEX9881 */
0174   { "Compex 9881 PMAC", 128, 0x0001ebef,
0175     HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM, mxic_timer, },
0176 
0177   /* I21145 */
0178   { "Intel DS21145 Tulip", 128, 0x0801fbff,
0179     HAS_MII | HAS_MEDIA_TABLE | ALWAYS_CHECK_MII | HAS_ACPI
0180     | HAS_NWAY | HAS_PCI_MWI, tulip_timer, tulip_media_task },
0181 
0182   /* DM910X */
0183 #ifdef CONFIG_TULIP_DM910X
0184   { "Davicom DM9102/DM9102A", 128, 0x0001ebef,
0185     HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM | HAS_ACPI,
0186     tulip_timer, tulip_media_task },
0187 #else
0188   { NULL },
0189 #endif
0190 
0191   /* RS7112 */
0192   { "Conexant LANfinity", 256, 0x0001ebef,
0193     HAS_MII | HAS_ACPI, tulip_timer, tulip_media_task },
0194 
0195 };
0196 
0197 
0198 static const struct pci_device_id tulip_pci_tbl[] = {
0199     { 0x1011, 0x0009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DC21140 },
0200     { 0x1011, 0x0019, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DC21143 },
0201     { 0x11AD, 0x0002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, LC82C168 },
0202     { 0x10d9, 0x0512, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98713 },
0203     { 0x10d9, 0x0531, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98715 },
0204 /*  { 0x10d9, 0x0531, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98725 },*/
0205     { 0x125B, 0x1400, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AX88140 },
0206     { 0x11AD, 0xc115, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PNIC2 },
0207     { 0x1317, 0x0981, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0208     { 0x1317, 0x0985, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0209     { 0x1317, 0x1985, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0210     { 0x1317, 0x9511, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0211     { 0x13D1, 0xAB02, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0212     { 0x13D1, 0xAB03, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0213     { 0x13D1, 0xAB08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0214     { 0x104A, 0x0981, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0215     { 0x104A, 0x2774, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0216     { 0x1259, 0xa120, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0217     { 0x11F6, 0x9881, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMPEX9881 },
0218     { 0x8086, 0x0039, PCI_ANY_ID, PCI_ANY_ID, 0, 0, I21145 },
0219 #ifdef CONFIG_TULIP_DM910X
0220     { 0x1282, 0x9100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DM910X },
0221     { 0x1282, 0x9102, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DM910X },
0222 #endif
0223     { 0x1113, 0x1216, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0224     { 0x1113, 0x1217, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98715 },
0225     { 0x1113, 0x9511, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0226     { 0x1186, 0x1541, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0227     { 0x1186, 0x1561, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0228     { 0x1186, 0x1591, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0229     { 0x14f1, 0x1803, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CONEXANT },
0230     { 0x1626, 0x8410, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0231     { 0x1737, 0xAB09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0232     { 0x1737, 0xAB08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0233     { 0x17B3, 0xAB08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0234     { 0x10b7, 0x9300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, /* 3Com 3CSOHO100B-TX */
0235     { 0x14ea, 0xab08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, /* Planex FNW-3602-TX */
0236     { 0x1414, 0x0001, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, /* Microsoft MN-120 */
0237     { 0x1414, 0x0002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET },
0238     { } /* terminate list */
0239 };
0240 MODULE_DEVICE_TABLE(pci, tulip_pci_tbl);
0241 
0242 
0243 /* A full-duplex map for media types. */
0244 const char tulip_media_cap[32] =
0245 {0,0,0,16,  3,19,16,24,  27,4,7,5, 0,20,23,20,  28,31,0,0, };
0246 
0247 static void tulip_tx_timeout(struct net_device *dev, unsigned int txqueue);
0248 static void tulip_init_ring(struct net_device *dev);
0249 static void tulip_free_ring(struct net_device *dev);
0250 static netdev_tx_t tulip_start_xmit(struct sk_buff *skb,
0251                       struct net_device *dev);
0252 static int tulip_open(struct net_device *dev);
0253 static int tulip_close(struct net_device *dev);
0254 static void tulip_up(struct net_device *dev);
0255 static void tulip_down(struct net_device *dev);
0256 static struct net_device_stats *tulip_get_stats(struct net_device *dev);
0257 static int private_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
0258 static void set_rx_mode(struct net_device *dev);
0259 static void tulip_set_wolopts(struct pci_dev *pdev, u32 wolopts);
0260 #ifdef CONFIG_NET_POLL_CONTROLLER
0261 static void poll_tulip(struct net_device *dev);
0262 #endif
0263 
0264 static void tulip_set_power_state (struct tulip_private *tp,
0265                    int sleep, int snooze)
0266 {
0267     if (tp->flags & HAS_ACPI) {
0268         u32 tmp, newtmp;
0269         pci_read_config_dword (tp->pdev, CFDD, &tmp);
0270         newtmp = tmp & ~(CFDD_Sleep | CFDD_Snooze);
0271         if (sleep)
0272             newtmp |= CFDD_Sleep;
0273         else if (snooze)
0274             newtmp |= CFDD_Snooze;
0275         if (tmp != newtmp)
0276             pci_write_config_dword (tp->pdev, CFDD, newtmp);
0277     }
0278 
0279 }
0280 
0281 
0282 static void tulip_up(struct net_device *dev)
0283 {
0284     struct tulip_private *tp = netdev_priv(dev);
0285     void __iomem *ioaddr = tp->base_addr;
0286     int next_tick = 3*HZ;
0287     u32 reg;
0288     int i;
0289 
0290 #ifdef CONFIG_TULIP_NAPI
0291     napi_enable(&tp->napi);
0292 #endif
0293 
0294     /* Wake the chip from sleep/snooze mode. */
0295     tulip_set_power_state (tp, 0, 0);
0296 
0297     /* Disable all WOL events */
0298     pci_enable_wake(tp->pdev, PCI_D3hot, 0);
0299     pci_enable_wake(tp->pdev, PCI_D3cold, 0);
0300     tulip_set_wolopts(tp->pdev, 0);
0301 
0302     /* On some chip revs we must set the MII/SYM port before the reset!? */
0303     if (tp->mii_cnt  ||  (tp->mtable  &&  tp->mtable->has_mii))
0304         iowrite32(0x00040000, ioaddr + CSR6);
0305 
0306     /* Reset the chip, holding bit 0 set at least 50 PCI cycles. */
0307     iowrite32(0x00000001, ioaddr + CSR0);
0308     pci_read_config_dword(tp->pdev, PCI_COMMAND, &reg);  /* flush write */
0309     udelay(100);
0310 
0311     /* Deassert reset.
0312        Wait the specified 50 PCI cycles after a reset by initializing
0313        Tx and Rx queues and the address filter list. */
0314     iowrite32(tp->csr0, ioaddr + CSR0);
0315     pci_read_config_dword(tp->pdev, PCI_COMMAND, &reg);  /* flush write */
0316     udelay(100);
0317 
0318     if (tulip_debug > 1)
0319         netdev_dbg(dev, "tulip_up(), irq==%d\n", tp->pdev->irq);
0320 
0321     iowrite32(tp->rx_ring_dma, ioaddr + CSR3);
0322     iowrite32(tp->tx_ring_dma, ioaddr + CSR4);
0323     tp->cur_rx = tp->cur_tx = 0;
0324     tp->dirty_rx = tp->dirty_tx = 0;
0325 
0326     if (tp->flags & MC_HASH_ONLY) {
0327         u32 addr_low = get_unaligned_le32(dev->dev_addr);
0328         u32 addr_high = get_unaligned_le16(dev->dev_addr + 4);
0329         if (tp->chip_id == AX88140) {
0330             iowrite32(0, ioaddr + CSR13);
0331             iowrite32(addr_low,  ioaddr + CSR14);
0332             iowrite32(1, ioaddr + CSR13);
0333             iowrite32(addr_high, ioaddr + CSR14);
0334         } else if (tp->flags & COMET_MAC_ADDR) {
0335             iowrite32(addr_low,  ioaddr + 0xA4);
0336             iowrite32(addr_high, ioaddr + 0xA8);
0337             iowrite32(0, ioaddr + CSR27);
0338             iowrite32(0, ioaddr + CSR28);
0339         }
0340     } else {
0341         /* This is set_rx_mode(), but without starting the transmitter. */
0342         const u16 *eaddrs = (const u16 *)dev->dev_addr;
0343         u16 *setup_frm = &tp->setup_frame[15*6];
0344         dma_addr_t mapping;
0345 
0346         /* 21140 bug: you must add the broadcast address. */
0347         memset(tp->setup_frame, 0xff, sizeof(tp->setup_frame));
0348         /* Fill the final entry of the table with our physical address. */
0349         *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
0350         *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
0351         *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
0352 
0353         mapping = dma_map_single(&tp->pdev->dev, tp->setup_frame,
0354                      sizeof(tp->setup_frame),
0355                      DMA_TO_DEVICE);
0356         tp->tx_buffers[tp->cur_tx].skb = NULL;
0357         tp->tx_buffers[tp->cur_tx].mapping = mapping;
0358 
0359         /* Put the setup frame on the Tx list. */
0360         tp->tx_ring[tp->cur_tx].length = cpu_to_le32(0x08000000 | 192);
0361         tp->tx_ring[tp->cur_tx].buffer1 = cpu_to_le32(mapping);
0362         tp->tx_ring[tp->cur_tx].status = cpu_to_le32(DescOwned);
0363 
0364         tp->cur_tx++;
0365     }
0366 
0367     tp->saved_if_port = dev->if_port;
0368     if (dev->if_port == 0)
0369         dev->if_port = tp->default_port;
0370 
0371     /* Allow selecting a default media. */
0372     i = 0;
0373     if (tp->mtable == NULL)
0374         goto media_picked;
0375     if (dev->if_port) {
0376         int looking_for = tulip_media_cap[dev->if_port] & MediaIsMII ? 11 :
0377             (dev->if_port == 12 ? 0 : dev->if_port);
0378         for (i = 0; i < tp->mtable->leafcount; i++)
0379             if (tp->mtable->mleaf[i].media == looking_for) {
0380                 dev_info(&dev->dev,
0381                      "Using user-specified media %s\n",
0382                      medianame[dev->if_port]);
0383                 goto media_picked;
0384             }
0385     }
0386     if ((tp->mtable->defaultmedia & 0x0800) == 0) {
0387         int looking_for = tp->mtable->defaultmedia & MEDIA_MASK;
0388         for (i = 0; i < tp->mtable->leafcount; i++)
0389             if (tp->mtable->mleaf[i].media == looking_for) {
0390                 dev_info(&dev->dev,
0391                      "Using EEPROM-set media %s\n",
0392                      medianame[looking_for]);
0393                 goto media_picked;
0394             }
0395     }
0396     /* Start sensing first non-full-duplex media. */
0397     for (i = tp->mtable->leafcount - 1;
0398          (tulip_media_cap[tp->mtable->mleaf[i].media] & MediaAlwaysFD) && i > 0; i--)
0399         ;
0400 media_picked:
0401 
0402     tp->csr6 = 0;
0403     tp->cur_index = i;
0404     tp->nwayset = 0;
0405 
0406     if (dev->if_port) {
0407         if (tp->chip_id == DC21143  &&
0408             (tulip_media_cap[dev->if_port] & MediaIsMII)) {
0409             /* We must reset the media CSRs when we force-select MII mode. */
0410             iowrite32(0x0000, ioaddr + CSR13);
0411             iowrite32(0x0000, ioaddr + CSR14);
0412             iowrite32(0x0008, ioaddr + CSR15);
0413         }
0414         tulip_select_media(dev, 1);
0415     } else if (tp->chip_id == DC21142) {
0416         if (tp->mii_cnt) {
0417             tulip_select_media(dev, 1);
0418             if (tulip_debug > 1)
0419                 dev_info(&dev->dev,
0420                      "Using MII transceiver %d, status %04x\n",
0421                      tp->phys[0],
0422                      tulip_mdio_read(dev, tp->phys[0], 1));
0423             iowrite32(csr6_mask_defstate, ioaddr + CSR6);
0424             tp->csr6 = csr6_mask_hdcap;
0425             dev->if_port = 11;
0426             iowrite32(0x0000, ioaddr + CSR13);
0427             iowrite32(0x0000, ioaddr + CSR14);
0428         } else
0429             t21142_start_nway(dev);
0430     } else if (tp->chip_id == PNIC2) {
0431             /* for initial startup advertise 10/100 Full and Half */
0432             tp->sym_advertise = 0x01E0;
0433                 /* enable autonegotiate end interrupt */
0434             iowrite32(ioread32(ioaddr+CSR5)| 0x00008010, ioaddr + CSR5);
0435             iowrite32(ioread32(ioaddr+CSR7)| 0x00008010, ioaddr + CSR7);
0436         pnic2_start_nway(dev);
0437     } else if (tp->chip_id == LC82C168  &&  ! tp->medialock) {
0438         if (tp->mii_cnt) {
0439             dev->if_port = 11;
0440             tp->csr6 = 0x814C0000 | (tp->full_duplex ? 0x0200 : 0);
0441             iowrite32(0x0001, ioaddr + CSR15);
0442         } else if (ioread32(ioaddr + CSR5) & TPLnkPass)
0443             pnic_do_nway(dev);
0444         else {
0445             /* Start with 10mbps to do autonegotiation. */
0446             iowrite32(0x32, ioaddr + CSR12);
0447             tp->csr6 = 0x00420000;
0448             iowrite32(0x0001B078, ioaddr + 0xB8);
0449             iowrite32(0x0201B078, ioaddr + 0xB8);
0450             next_tick = 1*HZ;
0451         }
0452     } else if ((tp->chip_id == MX98713 || tp->chip_id == COMPEX9881) &&
0453            ! tp->medialock) {
0454         dev->if_port = 0;
0455         tp->csr6 = 0x01880000 | (tp->full_duplex ? 0x0200 : 0);
0456         iowrite32(0x0f370000 | ioread16(ioaddr + 0x80), ioaddr + 0x80);
0457     } else if (tp->chip_id == MX98715 || tp->chip_id == MX98725) {
0458         /* Provided by BOLO, Macronix - 12/10/1998. */
0459         dev->if_port = 0;
0460         tp->csr6 = 0x01a80200;
0461         iowrite32(0x0f370000 | ioread16(ioaddr + 0x80), ioaddr + 0x80);
0462         iowrite32(0x11000 | ioread16(ioaddr + 0xa0), ioaddr + 0xa0);
0463     } else if (tp->chip_id == COMET || tp->chip_id == CONEXANT) {
0464         /* Enable automatic Tx underrun recovery. */
0465         iowrite32(ioread32(ioaddr + 0x88) | 1, ioaddr + 0x88);
0466         dev->if_port = tp->mii_cnt ? 11 : 0;
0467         tp->csr6 = 0x00040000;
0468     } else if (tp->chip_id == AX88140) {
0469         tp->csr6 = tp->mii_cnt ? 0x00040100 : 0x00000100;
0470     } else
0471         tulip_select_media(dev, 1);
0472 
0473     /* Start the chip's Tx to process setup frame. */
0474     tulip_stop_rxtx(tp);
0475     barrier();
0476     udelay(5);
0477     iowrite32(tp->csr6 | TxOn, ioaddr + CSR6);
0478 
0479     /* Enable interrupts by setting the interrupt mask. */
0480     iowrite32(tulip_tbl[tp->chip_id].valid_intrs, ioaddr + CSR5);
0481     iowrite32(tulip_tbl[tp->chip_id].valid_intrs, ioaddr + CSR7);
0482     tulip_start_rxtx(tp);
0483     iowrite32(0, ioaddr + CSR2);        /* Rx poll demand */
0484 
0485     if (tulip_debug > 2) {
0486         netdev_dbg(dev, "Done tulip_up(), CSR0 %08x, CSR5 %08x CSR6 %08x\n",
0487                ioread32(ioaddr + CSR0),
0488                ioread32(ioaddr + CSR5),
0489                ioread32(ioaddr + CSR6));
0490     }
0491 
0492     /* Set the timer to switch to check for link beat and perhaps switch
0493        to an alternate media type. */
0494     tp->timer.expires = RUN_AT(next_tick);
0495     add_timer(&tp->timer);
0496 #ifdef CONFIG_TULIP_NAPI
0497     timer_setup(&tp->oom_timer, oom_timer, 0);
0498 #endif
0499 }
0500 
0501 static int
0502 tulip_open(struct net_device *dev)
0503 {
0504     struct tulip_private *tp = netdev_priv(dev);
0505     int retval;
0506 
0507     tulip_init_ring (dev);
0508 
0509     retval = request_irq(tp->pdev->irq, tulip_interrupt, IRQF_SHARED,
0510                  dev->name, dev);
0511     if (retval)
0512         goto free_ring;
0513 
0514     tulip_up (dev);
0515 
0516     netif_start_queue (dev);
0517 
0518     return 0;
0519 
0520 free_ring:
0521     tulip_free_ring (dev);
0522     return retval;
0523 }
0524 
0525 
0526 static void tulip_tx_timeout(struct net_device *dev, unsigned int txqueue)
0527 {
0528     struct tulip_private *tp = netdev_priv(dev);
0529     void __iomem *ioaddr = tp->base_addr;
0530     unsigned long flags;
0531 
0532     spin_lock_irqsave (&tp->lock, flags);
0533 
0534     if (tulip_media_cap[dev->if_port] & MediaIsMII) {
0535         /* Do nothing -- the media monitor should handle this. */
0536         if (tulip_debug > 1)
0537             dev_warn(&dev->dev,
0538                  "Transmit timeout using MII device\n");
0539     } else if (tp->chip_id == DC21140 || tp->chip_id == DC21142 ||
0540            tp->chip_id == MX98713 || tp->chip_id == COMPEX9881 ||
0541            tp->chip_id == DM910X) {
0542         dev_warn(&dev->dev,
0543              "21140 transmit timed out, status %08x, SIA %08x %08x %08x %08x, resetting...\n",
0544              ioread32(ioaddr + CSR5), ioread32(ioaddr + CSR12),
0545              ioread32(ioaddr + CSR13), ioread32(ioaddr + CSR14),
0546              ioread32(ioaddr + CSR15));
0547         tp->timeout_recovery = 1;
0548         schedule_work(&tp->media_work);
0549         goto out_unlock;
0550     } else if (tp->chip_id == PNIC2) {
0551         dev_warn(&dev->dev,
0552              "PNIC2 transmit timed out, status %08x, CSR6/7 %08x / %08x CSR12 %08x, resetting...\n",
0553              (int)ioread32(ioaddr + CSR5),
0554              (int)ioread32(ioaddr + CSR6),
0555              (int)ioread32(ioaddr + CSR7),
0556              (int)ioread32(ioaddr + CSR12));
0557     } else {
0558         dev_warn(&dev->dev,
0559              "Transmit timed out, status %08x, CSR12 %08x, resetting...\n",
0560              ioread32(ioaddr + CSR5), ioread32(ioaddr + CSR12));
0561         dev->if_port = 0;
0562     }
0563 
0564 #if defined(way_too_many_messages)
0565     if (tulip_debug > 3) {
0566         int i;
0567         for (i = 0; i < RX_RING_SIZE; i++) {
0568             u8 *buf = (u8 *)(tp->rx_ring[i].buffer1);
0569             int j;
0570             printk(KERN_DEBUG
0571                    "%2d: %08x %08x %08x %08x  %02x %02x %02x\n",
0572                    i,
0573                    (unsigned int)tp->rx_ring[i].status,
0574                    (unsigned int)tp->rx_ring[i].length,
0575                    (unsigned int)tp->rx_ring[i].buffer1,
0576                    (unsigned int)tp->rx_ring[i].buffer2,
0577                    buf[0], buf[1], buf[2]);
0578             for (j = 0; ((j < 1600) && buf[j] != 0xee); j++)
0579                 if (j < 100)
0580                     pr_cont(" %02x", buf[j]);
0581             pr_cont(" j=%d\n", j);
0582         }
0583         printk(KERN_DEBUG "  Rx ring %p: ", tp->rx_ring);
0584         for (i = 0; i < RX_RING_SIZE; i++)
0585             pr_cont(" %08x", (unsigned int)tp->rx_ring[i].status);
0586         printk(KERN_DEBUG "  Tx ring %p: ", tp->tx_ring);
0587         for (i = 0; i < TX_RING_SIZE; i++)
0588             pr_cont(" %08x", (unsigned int)tp->tx_ring[i].status);
0589         pr_cont("\n");
0590     }
0591 #endif
0592 
0593     tulip_tx_timeout_complete(tp, ioaddr);
0594 
0595 out_unlock:
0596     spin_unlock_irqrestore (&tp->lock, flags);
0597     netif_trans_update(dev); /* prevent tx timeout */
0598     netif_wake_queue (dev);
0599 }
0600 
0601 
0602 /* Initialize the Rx and Tx rings, along with various 'dev' bits. */
0603 static void tulip_init_ring(struct net_device *dev)
0604 {
0605     struct tulip_private *tp = netdev_priv(dev);
0606     int i;
0607 
0608     tp->susp_rx = 0;
0609     tp->ttimer = 0;
0610     tp->nir = 0;
0611 
0612     for (i = 0; i < RX_RING_SIZE; i++) {
0613         tp->rx_ring[i].status = 0x00000000;
0614         tp->rx_ring[i].length = cpu_to_le32(PKT_BUF_SZ);
0615         tp->rx_ring[i].buffer2 = cpu_to_le32(tp->rx_ring_dma + sizeof(struct tulip_rx_desc) * (i + 1));
0616         tp->rx_buffers[i].skb = NULL;
0617         tp->rx_buffers[i].mapping = 0;
0618     }
0619     /* Mark the last entry as wrapping the ring. */
0620     tp->rx_ring[i-1].length = cpu_to_le32(PKT_BUF_SZ | DESC_RING_WRAP);
0621     tp->rx_ring[i-1].buffer2 = cpu_to_le32(tp->rx_ring_dma);
0622 
0623     for (i = 0; i < RX_RING_SIZE; i++) {
0624         dma_addr_t mapping;
0625 
0626         /* Note the receive buffer must be longword aligned.
0627            netdev_alloc_skb() provides 16 byte alignment.  But do *not*
0628            use skb_reserve() to align the IP header! */
0629         struct sk_buff *skb = netdev_alloc_skb(dev, PKT_BUF_SZ);
0630         tp->rx_buffers[i].skb = skb;
0631         if (skb == NULL)
0632             break;
0633         mapping = dma_map_single(&tp->pdev->dev, skb->data,
0634                      PKT_BUF_SZ, DMA_FROM_DEVICE);
0635         tp->rx_buffers[i].mapping = mapping;
0636         tp->rx_ring[i].status = cpu_to_le32(DescOwned); /* Owned by Tulip chip */
0637         tp->rx_ring[i].buffer1 = cpu_to_le32(mapping);
0638     }
0639     tp->dirty_rx = (unsigned int)(i - RX_RING_SIZE);
0640 
0641     /* The Tx buffer descriptor is filled in as needed, but we
0642        do need to clear the ownership bit. */
0643     for (i = 0; i < TX_RING_SIZE; i++) {
0644         tp->tx_buffers[i].skb = NULL;
0645         tp->tx_buffers[i].mapping = 0;
0646         tp->tx_ring[i].status = 0x00000000;
0647         tp->tx_ring[i].buffer2 = cpu_to_le32(tp->tx_ring_dma + sizeof(struct tulip_tx_desc) * (i + 1));
0648     }
0649     tp->tx_ring[i-1].buffer2 = cpu_to_le32(tp->tx_ring_dma);
0650 }
0651 
0652 static netdev_tx_t
0653 tulip_start_xmit(struct sk_buff *skb, struct net_device *dev)
0654 {
0655     struct tulip_private *tp = netdev_priv(dev);
0656     int entry;
0657     u32 flag;
0658     dma_addr_t mapping;
0659     unsigned long flags;
0660 
0661     spin_lock_irqsave(&tp->lock, flags);
0662 
0663     /* Calculate the next Tx descriptor entry. */
0664     entry = tp->cur_tx % TX_RING_SIZE;
0665 
0666     tp->tx_buffers[entry].skb = skb;
0667     mapping = dma_map_single(&tp->pdev->dev, skb->data, skb->len,
0668                  DMA_TO_DEVICE);
0669     tp->tx_buffers[entry].mapping = mapping;
0670     tp->tx_ring[entry].buffer1 = cpu_to_le32(mapping);
0671 
0672     if (tp->cur_tx - tp->dirty_tx < TX_RING_SIZE/2) {/* Typical path */
0673         flag = 0x60000000; /* No interrupt */
0674     } else if (tp->cur_tx - tp->dirty_tx == TX_RING_SIZE/2) {
0675         flag = 0xe0000000; /* Tx-done intr. */
0676     } else if (tp->cur_tx - tp->dirty_tx < TX_RING_SIZE - 2) {
0677         flag = 0x60000000; /* No Tx-done intr. */
0678     } else {        /* Leave room for set_rx_mode() to fill entries. */
0679         flag = 0xe0000000; /* Tx-done intr. */
0680         netif_stop_queue(dev);
0681     }
0682     if (entry == TX_RING_SIZE-1)
0683         flag = 0xe0000000 | DESC_RING_WRAP;
0684 
0685     tp->tx_ring[entry].length = cpu_to_le32(skb->len | flag);
0686     /* if we were using Transmit Automatic Polling, we would need a
0687      * wmb() here. */
0688     tp->tx_ring[entry].status = cpu_to_le32(DescOwned);
0689     wmb();
0690 
0691     tp->cur_tx++;
0692 
0693     /* Trigger an immediate transmit demand. */
0694     iowrite32(0, tp->base_addr + CSR1);
0695 
0696     spin_unlock_irqrestore(&tp->lock, flags);
0697 
0698     return NETDEV_TX_OK;
0699 }
0700 
0701 static void tulip_clean_tx_ring(struct tulip_private *tp)
0702 {
0703     unsigned int dirty_tx;
0704 
0705     for (dirty_tx = tp->dirty_tx ; tp->cur_tx - dirty_tx > 0;
0706         dirty_tx++) {
0707         int entry = dirty_tx % TX_RING_SIZE;
0708         int status = le32_to_cpu(tp->tx_ring[entry].status);
0709 
0710         if (status < 0) {
0711             tp->dev->stats.tx_errors++; /* It wasn't Txed */
0712             tp->tx_ring[entry].status = 0;
0713         }
0714 
0715         /* Check for Tx filter setup frames. */
0716         if (tp->tx_buffers[entry].skb == NULL) {
0717             /* test because dummy frames not mapped */
0718             if (tp->tx_buffers[entry].mapping)
0719                 dma_unmap_single(&tp->pdev->dev,
0720                          tp->tx_buffers[entry].mapping,
0721                          sizeof(tp->setup_frame),
0722                          DMA_TO_DEVICE);
0723             continue;
0724         }
0725 
0726         dma_unmap_single(&tp->pdev->dev,
0727                  tp->tx_buffers[entry].mapping,
0728                  tp->tx_buffers[entry].skb->len,
0729                  DMA_TO_DEVICE);
0730 
0731         /* Free the original skb. */
0732         dev_kfree_skb_irq(tp->tx_buffers[entry].skb);
0733         tp->tx_buffers[entry].skb = NULL;
0734         tp->tx_buffers[entry].mapping = 0;
0735     }
0736 }
0737 
0738 static void tulip_down (struct net_device *dev)
0739 {
0740     struct tulip_private *tp = netdev_priv(dev);
0741     void __iomem *ioaddr = tp->base_addr;
0742     unsigned long flags;
0743 
0744     cancel_work_sync(&tp->media_work);
0745 
0746 #ifdef CONFIG_TULIP_NAPI
0747     napi_disable(&tp->napi);
0748 #endif
0749 
0750     del_timer_sync (&tp->timer);
0751 #ifdef CONFIG_TULIP_NAPI
0752     del_timer_sync (&tp->oom_timer);
0753 #endif
0754     spin_lock_irqsave (&tp->lock, flags);
0755 
0756     /* Disable interrupts by clearing the interrupt mask. */
0757     iowrite32 (0x00000000, ioaddr + CSR7);
0758 
0759     /* Stop the Tx and Rx processes. */
0760     tulip_stop_rxtx(tp);
0761 
0762     /* prepare receive buffers */
0763     tulip_refill_rx(dev);
0764 
0765     /* release any unconsumed transmit buffers */
0766     tulip_clean_tx_ring(tp);
0767 
0768     if (ioread32(ioaddr + CSR6) != 0xffffffff)
0769         dev->stats.rx_missed_errors += ioread32(ioaddr + CSR8) & 0xffff;
0770 
0771     spin_unlock_irqrestore (&tp->lock, flags);
0772 
0773     timer_setup(&tp->timer, tulip_tbl[tp->chip_id].media_timer, 0);
0774 
0775     dev->if_port = tp->saved_if_port;
0776 
0777     /* Leave the driver in snooze, not sleep, mode. */
0778     tulip_set_power_state (tp, 0, 1);
0779 }
0780 
0781 static void tulip_free_ring (struct net_device *dev)
0782 {
0783     struct tulip_private *tp = netdev_priv(dev);
0784     int i;
0785 
0786     /* Free all the skbuffs in the Rx queue. */
0787     for (i = 0; i < RX_RING_SIZE; i++) {
0788         struct sk_buff *skb = tp->rx_buffers[i].skb;
0789         dma_addr_t mapping = tp->rx_buffers[i].mapping;
0790 
0791         tp->rx_buffers[i].skb = NULL;
0792         tp->rx_buffers[i].mapping = 0;
0793 
0794         tp->rx_ring[i].status = 0;  /* Not owned by Tulip chip. */
0795         tp->rx_ring[i].length = 0;
0796         /* An invalid address. */
0797         tp->rx_ring[i].buffer1 = cpu_to_le32(0xBADF00D0);
0798         if (skb) {
0799             dma_unmap_single(&tp->pdev->dev, mapping, PKT_BUF_SZ,
0800                      DMA_FROM_DEVICE);
0801             dev_kfree_skb (skb);
0802         }
0803     }
0804 
0805     for (i = 0; i < TX_RING_SIZE; i++) {
0806         struct sk_buff *skb = tp->tx_buffers[i].skb;
0807 
0808         if (skb != NULL) {
0809             dma_unmap_single(&tp->pdev->dev,
0810                      tp->tx_buffers[i].mapping, skb->len,
0811                      DMA_TO_DEVICE);
0812             dev_kfree_skb (skb);
0813         }
0814         tp->tx_buffers[i].skb = NULL;
0815         tp->tx_buffers[i].mapping = 0;
0816     }
0817 }
0818 
0819 static int tulip_close (struct net_device *dev)
0820 {
0821     struct tulip_private *tp = netdev_priv(dev);
0822     void __iomem *ioaddr = tp->base_addr;
0823 
0824     netif_stop_queue (dev);
0825 
0826     tulip_down (dev);
0827 
0828     if (tulip_debug > 1)
0829         netdev_dbg(dev, "Shutting down ethercard, status was %02x\n",
0830                ioread32 (ioaddr + CSR5));
0831 
0832     free_irq (tp->pdev->irq, dev);
0833 
0834     tulip_free_ring (dev);
0835 
0836     return 0;
0837 }
0838 
0839 static struct net_device_stats *tulip_get_stats(struct net_device *dev)
0840 {
0841     struct tulip_private *tp = netdev_priv(dev);
0842     void __iomem *ioaddr = tp->base_addr;
0843 
0844     if (netif_running(dev)) {
0845         unsigned long flags;
0846 
0847         spin_lock_irqsave (&tp->lock, flags);
0848 
0849         dev->stats.rx_missed_errors += ioread32(ioaddr + CSR8) & 0xffff;
0850 
0851         spin_unlock_irqrestore(&tp->lock, flags);
0852     }
0853 
0854     return &dev->stats;
0855 }
0856 
0857 
0858 static void tulip_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
0859 {
0860     struct tulip_private *np = netdev_priv(dev);
0861     strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
0862     strlcpy(info->bus_info, pci_name(np->pdev), sizeof(info->bus_info));
0863 }
0864 
0865 
0866 static int tulip_ethtool_set_wol(struct net_device *dev,
0867                  struct ethtool_wolinfo *wolinfo)
0868 {
0869     struct tulip_private *tp = netdev_priv(dev);
0870 
0871     if (wolinfo->wolopts & (~tp->wolinfo.supported))
0872            return -EOPNOTSUPP;
0873 
0874     tp->wolinfo.wolopts = wolinfo->wolopts;
0875     device_set_wakeup_enable(&tp->pdev->dev, tp->wolinfo.wolopts);
0876     return 0;
0877 }
0878 
0879 static void tulip_ethtool_get_wol(struct net_device *dev,
0880                   struct ethtool_wolinfo *wolinfo)
0881 {
0882     struct tulip_private *tp = netdev_priv(dev);
0883 
0884     wolinfo->supported = tp->wolinfo.supported;
0885     wolinfo->wolopts = tp->wolinfo.wolopts;
0886     return;
0887 }
0888 
0889 
0890 static const struct ethtool_ops ops = {
0891     .get_drvinfo = tulip_get_drvinfo,
0892     .set_wol     = tulip_ethtool_set_wol,
0893     .get_wol     = tulip_ethtool_get_wol,
0894 };
0895 
0896 /* Provide ioctl() calls to examine the MII xcvr state. */
0897 static int private_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
0898 {
0899     struct tulip_private *tp = netdev_priv(dev);
0900     void __iomem *ioaddr = tp->base_addr;
0901     struct mii_ioctl_data *data = if_mii(rq);
0902     const unsigned int phy_idx = 0;
0903     int phy = tp->phys[phy_idx] & 0x1f;
0904     unsigned int regnum = data->reg_num;
0905 
0906     switch (cmd) {
0907     case SIOCGMIIPHY:       /* Get address of MII PHY in use. */
0908         if (tp->mii_cnt)
0909             data->phy_id = phy;
0910         else if (tp->flags & HAS_NWAY)
0911             data->phy_id = 32;
0912         else if (tp->chip_id == COMET)
0913             data->phy_id = 1;
0914         else
0915             return -ENODEV;
0916         fallthrough;
0917 
0918     case SIOCGMIIREG:       /* Read MII PHY register. */
0919         if (data->phy_id == 32 && (tp->flags & HAS_NWAY)) {
0920             int csr12 = ioread32 (ioaddr + CSR12);
0921             int csr14 = ioread32 (ioaddr + CSR14);
0922             switch (regnum) {
0923             case 0:
0924                                 if (((csr14<<5) & 0x1000) ||
0925                                         (dev->if_port == 5 && tp->nwayset))
0926                                         data->val_out = 0x1000;
0927                                 else
0928                                         data->val_out = (tulip_media_cap[dev->if_port]&MediaIs100 ? 0x2000 : 0)
0929                                                 | (tulip_media_cap[dev->if_port]&MediaIsFD ? 0x0100 : 0);
0930                 break;
0931             case 1:
0932                                 data->val_out =
0933                     0x1848 +
0934                     ((csr12&0x7000) == 0x5000 ? 0x20 : 0) +
0935                     ((csr12&0x06) == 6 ? 0 : 4);
0936                                 data->val_out |= 0x6048;
0937                 break;
0938             case 4:
0939                                 /* Advertised value, bogus 10baseTx-FD value from CSR6. */
0940                                 data->val_out =
0941                     ((ioread32(ioaddr + CSR6) >> 3) & 0x0040) +
0942                     ((csr14 >> 1) & 0x20) + 1;
0943                                 data->val_out |= ((csr14 >> 9) & 0x03C0);
0944                 break;
0945             case 5: data->val_out = tp->lpar; break;
0946             default: data->val_out = 0; break;
0947             }
0948         } else {
0949             data->val_out = tulip_mdio_read (dev, data->phy_id & 0x1f, regnum);
0950         }
0951         return 0;
0952 
0953     case SIOCSMIIREG:       /* Write MII PHY register. */
0954         if (regnum & ~0x1f)
0955             return -EINVAL;
0956         if (data->phy_id == phy) {
0957             u16 value = data->val_in;
0958             switch (regnum) {
0959             case 0: /* Check for autonegotiation on or reset. */
0960                 tp->full_duplex_lock = (value & 0x9000) ? 0 : 1;
0961                 if (tp->full_duplex_lock)
0962                     tp->full_duplex = (value & 0x0100) ? 1 : 0;
0963                 break;
0964             case 4:
0965                 tp->advertising[phy_idx] =
0966                 tp->mii_advertise = data->val_in;
0967                 break;
0968             }
0969         }
0970         if (data->phy_id == 32 && (tp->flags & HAS_NWAY)) {
0971             u16 value = data->val_in;
0972             if (regnum == 0) {
0973               if ((value & 0x1200) == 0x1200) {
0974                 if (tp->chip_id == PNIC2) {
0975                                    pnic2_start_nway (dev);
0976                             } else {
0977                    t21142_start_nway (dev);
0978                             }
0979               }
0980             } else if (regnum == 4)
0981                 tp->sym_advertise = value;
0982         } else {
0983             tulip_mdio_write (dev, data->phy_id & 0x1f, regnum, data->val_in);
0984         }
0985         return 0;
0986     default:
0987         return -EOPNOTSUPP;
0988     }
0989 
0990     return -EOPNOTSUPP;
0991 }
0992 
0993 
0994 /* Set or clear the multicast filter for this adaptor.
0995    Note that we only use exclusion around actually queueing the
0996    new frame, not around filling tp->setup_frame.  This is non-deterministic
0997    when re-entered but still correct. */
0998 
0999 static void build_setup_frame_hash(u16 *setup_frm, struct net_device *dev)
1000 {
1001     struct tulip_private *tp = netdev_priv(dev);
1002     u16 hash_table[32];
1003     struct netdev_hw_addr *ha;
1004     const u16 *eaddrs;
1005     int i;
1006 
1007     memset(hash_table, 0, sizeof(hash_table));
1008     __set_bit_le(255, hash_table);          /* Broadcast entry */
1009     /* This should work on big-endian machines as well. */
1010     netdev_for_each_mc_addr(ha, dev) {
1011         int index = ether_crc_le(ETH_ALEN, ha->addr) & 0x1ff;
1012 
1013         __set_bit_le(index, hash_table);
1014     }
1015     for (i = 0; i < 32; i++) {
1016         *setup_frm++ = hash_table[i];
1017         *setup_frm++ = hash_table[i];
1018     }
1019     setup_frm = &tp->setup_frame[13*6];
1020 
1021     /* Fill the final entry with our physical address. */
1022     eaddrs = (const u16 *)dev->dev_addr;
1023     *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
1024     *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
1025     *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
1026 }
1027 
1028 static void build_setup_frame_perfect(u16 *setup_frm, struct net_device *dev)
1029 {
1030     struct tulip_private *tp = netdev_priv(dev);
1031     struct netdev_hw_addr *ha;
1032     const u16 *eaddrs;
1033 
1034     /* We have <= 14 addresses so we can use the wonderful
1035        16 address perfect filtering of the Tulip. */
1036     netdev_for_each_mc_addr(ha, dev) {
1037         eaddrs = (u16 *) ha->addr;
1038         *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
1039         *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
1040         *setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
1041     }
1042     /* Fill the unused entries with the broadcast address. */
1043     memset(setup_frm, 0xff, (15 - netdev_mc_count(dev)) * 12);
1044     setup_frm = &tp->setup_frame[15*6];
1045 
1046     /* Fill the final entry with our physical address. */
1047     eaddrs = (const u16 *)dev->dev_addr;
1048     *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
1049     *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
1050     *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
1051 }
1052 
1053 
1054 static void set_rx_mode(struct net_device *dev)
1055 {
1056     struct tulip_private *tp = netdev_priv(dev);
1057     void __iomem *ioaddr = tp->base_addr;
1058     int csr6;
1059 
1060     csr6 = ioread32(ioaddr + CSR6) & ~0x00D5;
1061 
1062     tp->csr6 &= ~0x00D5;
1063     if (dev->flags & IFF_PROMISC) {         /* Set promiscuous. */
1064         tp->csr6 |= AcceptAllMulticast | AcceptAllPhys;
1065         csr6 |= AcceptAllMulticast | AcceptAllPhys;
1066     } else if ((netdev_mc_count(dev) > 1000) ||
1067            (dev->flags & IFF_ALLMULTI)) {
1068         /* Too many to filter well -- accept all multicasts. */
1069         tp->csr6 |= AcceptAllMulticast;
1070         csr6 |= AcceptAllMulticast;
1071     } else  if (tp->flags & MC_HASH_ONLY) {
1072         /* Some work-alikes have only a 64-entry hash filter table. */
1073         /* Should verify correctness on big-endian/__powerpc__ */
1074         struct netdev_hw_addr *ha;
1075         if (netdev_mc_count(dev) > 64) {
1076             /* Arbitrary non-effective limit. */
1077             tp->csr6 |= AcceptAllMulticast;
1078             csr6 |= AcceptAllMulticast;
1079         } else {
1080             u32 mc_filter[2] = {0, 0};       /* Multicast hash filter */
1081             int filterbit;
1082             netdev_for_each_mc_addr(ha, dev) {
1083                 if (tp->flags & COMET_MAC_ADDR)
1084                     filterbit = ether_crc_le(ETH_ALEN,
1085                                  ha->addr);
1086                 else
1087                     filterbit = ether_crc(ETH_ALEN,
1088                                   ha->addr) >> 26;
1089                 filterbit &= 0x3f;
1090                 mc_filter[filterbit >> 5] |= 1 << (filterbit & 31);
1091                 if (tulip_debug > 2)
1092                     dev_info(&dev->dev,
1093                          "Added filter for %pM  %08x bit %d\n",
1094                          ha->addr,
1095                          ether_crc(ETH_ALEN, ha->addr),
1096                          filterbit);
1097             }
1098             if (mc_filter[0] == tp->mc_filter[0]  &&
1099                 mc_filter[1] == tp->mc_filter[1])
1100                 ;               /* No change. */
1101             else if (tp->flags & IS_ASIX) {
1102                 iowrite32(2, ioaddr + CSR13);
1103                 iowrite32(mc_filter[0], ioaddr + CSR14);
1104                 iowrite32(3, ioaddr + CSR13);
1105                 iowrite32(mc_filter[1], ioaddr + CSR14);
1106             } else if (tp->flags & COMET_MAC_ADDR) {
1107                 iowrite32(mc_filter[0], ioaddr + CSR27);
1108                 iowrite32(mc_filter[1], ioaddr + CSR28);
1109             }
1110             tp->mc_filter[0] = mc_filter[0];
1111             tp->mc_filter[1] = mc_filter[1];
1112         }
1113     } else {
1114         unsigned long flags;
1115         u32 tx_flags = 0x08000000 | 192;
1116 
1117         /* Note that only the low-address shortword of setup_frame is valid!
1118            The values are doubled for big-endian architectures. */
1119         if (netdev_mc_count(dev) > 14) {
1120             /* Must use a multicast hash table. */
1121             build_setup_frame_hash(tp->setup_frame, dev);
1122             tx_flags = 0x08400000 | 192;
1123         } else {
1124             build_setup_frame_perfect(tp->setup_frame, dev);
1125         }
1126 
1127         spin_lock_irqsave(&tp->lock, flags);
1128 
1129         if (tp->cur_tx - tp->dirty_tx > TX_RING_SIZE - 2) {
1130             /* Same setup recently queued, we need not add it. */
1131         } else {
1132             unsigned int entry;
1133             int dummy = -1;
1134 
1135             /* Now add this frame to the Tx list. */
1136 
1137             entry = tp->cur_tx++ % TX_RING_SIZE;
1138 
1139             if (entry != 0) {
1140                 /* Avoid a chip errata by prefixing a dummy entry. */
1141                 tp->tx_buffers[entry].skb = NULL;
1142                 tp->tx_buffers[entry].mapping = 0;
1143                 tp->tx_ring[entry].length =
1144                     (entry == TX_RING_SIZE-1) ? cpu_to_le32(DESC_RING_WRAP) : 0;
1145                 tp->tx_ring[entry].buffer1 = 0;
1146                 /* Must set DescOwned later to avoid race with chip */
1147                 dummy = entry;
1148                 entry = tp->cur_tx++ % TX_RING_SIZE;
1149 
1150             }
1151 
1152             tp->tx_buffers[entry].skb = NULL;
1153             tp->tx_buffers[entry].mapping =
1154                 dma_map_single(&tp->pdev->dev,
1155                            tp->setup_frame,
1156                            sizeof(tp->setup_frame),
1157                            DMA_TO_DEVICE);
1158             /* Put the setup frame on the Tx list. */
1159             if (entry == TX_RING_SIZE-1)
1160                 tx_flags |= DESC_RING_WRAP;     /* Wrap ring. */
1161             tp->tx_ring[entry].length = cpu_to_le32(tx_flags);
1162             tp->tx_ring[entry].buffer1 =
1163                 cpu_to_le32(tp->tx_buffers[entry].mapping);
1164             tp->tx_ring[entry].status = cpu_to_le32(DescOwned);
1165             if (dummy >= 0)
1166                 tp->tx_ring[dummy].status = cpu_to_le32(DescOwned);
1167             if (tp->cur_tx - tp->dirty_tx >= TX_RING_SIZE - 2)
1168                 netif_stop_queue(dev);
1169 
1170             /* Trigger an immediate transmit demand. */
1171             iowrite32(0, ioaddr + CSR1);
1172         }
1173 
1174         spin_unlock_irqrestore(&tp->lock, flags);
1175     }
1176 
1177     iowrite32(csr6, ioaddr + CSR6);
1178 }
1179 
1180 #ifdef CONFIG_TULIP_MWI
1181 static void tulip_mwi_config(struct pci_dev *pdev, struct net_device *dev)
1182 {
1183     struct tulip_private *tp = netdev_priv(dev);
1184     u8 cache;
1185     u16 pci_command;
1186     u32 csr0;
1187 
1188     if (tulip_debug > 3)
1189         netdev_dbg(dev, "tulip_mwi_config()\n");
1190 
1191     tp->csr0 = csr0 = 0;
1192 
1193     /* if we have any cache line size at all, we can do MRM and MWI */
1194     csr0 |= MRM | MWI;
1195 
1196     /* Enable MWI in the standard PCI command bit.
1197      * Check for the case where MWI is desired but not available
1198      */
1199     pci_try_set_mwi(pdev);
1200 
1201     /* read result from hardware (in case bit refused to enable) */
1202     pci_read_config_word(pdev, PCI_COMMAND, &pci_command);
1203     if ((csr0 & MWI) && (!(pci_command & PCI_COMMAND_INVALIDATE)))
1204         csr0 &= ~MWI;
1205 
1206     /* if cache line size hardwired to zero, no MWI */
1207     pci_read_config_byte(pdev, PCI_CACHE_LINE_SIZE, &cache);
1208     if ((csr0 & MWI) && (cache == 0)) {
1209         csr0 &= ~MWI;
1210         pci_clear_mwi(pdev);
1211     }
1212 
1213     /* assign per-cacheline-size cache alignment and
1214      * burst length values
1215      */
1216     switch (cache) {
1217     case 8:
1218         csr0 |= MRL | (1 << CALShift) | (16 << BurstLenShift);
1219         break;
1220     case 16:
1221         csr0 |= MRL | (2 << CALShift) | (16 << BurstLenShift);
1222         break;
1223     case 32:
1224         csr0 |= MRL | (3 << CALShift) | (32 << BurstLenShift);
1225         break;
1226     default:
1227         cache = 0;
1228         break;
1229     }
1230 
1231     /* if we have a good cache line size, we by now have a good
1232      * csr0, so save it and exit
1233      */
1234     if (cache)
1235         goto out;
1236 
1237     /* we don't have a good csr0 or cache line size, disable MWI */
1238     if (csr0 & MWI) {
1239         pci_clear_mwi(pdev);
1240         csr0 &= ~MWI;
1241     }
1242 
1243     /* sane defaults for burst length and cache alignment
1244      * originally from de4x5 driver
1245      */
1246     csr0 |= (8 << BurstLenShift) | (1 << CALShift);
1247 
1248 out:
1249     tp->csr0 = csr0;
1250     if (tulip_debug > 2)
1251         netdev_dbg(dev, "MWI config cacheline=%d, csr0=%08x\n",
1252                cache, csr0);
1253 }
1254 #endif
1255 
1256 /*
1257  *  Chips that have the MRM/reserved bit quirk and the burst quirk. That
1258  *  is the DM910X and the on chip ULi devices
1259  */
1260 
1261 static int tulip_uli_dm_quirk(struct pci_dev *pdev)
1262 {
1263     if (pdev->vendor == 0x1282 && pdev->device == 0x9102)
1264         return 1;
1265     return 0;
1266 }
1267 
1268 static const struct net_device_ops tulip_netdev_ops = {
1269     .ndo_open       = tulip_open,
1270     .ndo_start_xmit     = tulip_start_xmit,
1271     .ndo_tx_timeout     = tulip_tx_timeout,
1272     .ndo_stop       = tulip_close,
1273     .ndo_get_stats      = tulip_get_stats,
1274     .ndo_eth_ioctl      = private_ioctl,
1275     .ndo_set_rx_mode    = set_rx_mode,
1276     .ndo_set_mac_address    = eth_mac_addr,
1277     .ndo_validate_addr  = eth_validate_addr,
1278 #ifdef CONFIG_NET_POLL_CONTROLLER
1279     .ndo_poll_controller     = poll_tulip,
1280 #endif
1281 };
1282 
1283 static const struct pci_device_id early_486_chipsets[] = {
1284     { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82424) },
1285     { PCI_DEVICE(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_496) },
1286     { },
1287 };
1288 
1289 static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1290 {
1291     struct tulip_private *tp;
1292     /* See note below on the multiport cards. */
1293     static unsigned char last_phys_addr[ETH_ALEN] = {
1294         0x00, 'L', 'i', 'n', 'u', 'x'
1295     };
1296 #if defined(__i386__) || defined(__x86_64__)    /* Patch up x86 BIOS bug. */
1297     static int last_irq;
1298 #endif
1299     int i, irq;
1300     unsigned short sum;
1301     unsigned char *ee_data;
1302     struct net_device *dev;
1303     void __iomem *ioaddr;
1304     static int board_idx = -1;
1305     int chip_idx = ent->driver_data;
1306     const char *chip_name = tulip_tbl[chip_idx].chip_name;
1307     unsigned int eeprom_missing = 0;
1308     u8 addr[ETH_ALEN] __aligned(2);
1309     unsigned int force_csr0 = 0;
1310 
1311     board_idx++;
1312 
1313     /*
1314      *  Lan media wire a tulip chip to a wan interface. Needs a very
1315      *  different driver (lmc driver)
1316      */
1317 
1318         if (pdev->subsystem_vendor == PCI_VENDOR_ID_LMC) {
1319         pr_err("skipping LMC card\n");
1320         return -ENODEV;
1321     } else if (pdev->subsystem_vendor == PCI_VENDOR_ID_SBE &&
1322            (pdev->subsystem_device == PCI_SUBDEVICE_ID_SBE_T3E3 ||
1323             pdev->subsystem_device == PCI_SUBDEVICE_ID_SBE_2T3E3_P0 ||
1324             pdev->subsystem_device == PCI_SUBDEVICE_ID_SBE_2T3E3_P1)) {
1325         pr_err("skipping SBE T3E3 port\n");
1326         return -ENODEV;
1327     }
1328 
1329     /*
1330      *  DM910x chips should be handled by the dmfe driver, except
1331      *  on-board chips on SPARC systems.  Also, early DM9100s need
1332      *  software CRC which only the dmfe driver supports.
1333      */
1334 
1335 #ifdef CONFIG_TULIP_DM910X
1336     if (chip_idx == DM910X) {
1337         struct device_node *dp;
1338 
1339         if (pdev->vendor == 0x1282 && pdev->device == 0x9100 &&
1340             pdev->revision < 0x30) {
1341             pr_info("skipping early DM9100 with Crc bug (use dmfe)\n");
1342             return -ENODEV;
1343         }
1344 
1345         dp = pci_device_to_OF_node(pdev);
1346         if (!(dp && of_get_property(dp, "local-mac-address", NULL))) {
1347             pr_info("skipping DM910x expansion card (use dmfe)\n");
1348             return -ENODEV;
1349         }
1350     }
1351 #endif
1352 
1353     /*
1354      *  Looks for early PCI chipsets where people report hangs
1355      *  without the workarounds being on.
1356      */
1357 
1358     /* 1. Intel Saturn. Switch to 8 long words burst, 8 long word cache
1359           aligned.  Aries might need this too. The Saturn errata are not
1360           pretty reading but thankfully it's an old 486 chipset.
1361 
1362        2. The dreaded SiS496 486 chipset. Same workaround as Intel
1363           Saturn.
1364     */
1365 
1366     if (pci_dev_present(early_486_chipsets)) {
1367         csr0 = MRL | MRM | (8 << BurstLenShift) | (1 << CALShift);
1368         force_csr0 = 1;
1369     }
1370 
1371     /* bugfix: the ASIX must have a burst limit or horrible things happen. */
1372     if (chip_idx == AX88140) {
1373         if ((csr0 & 0x3f00) == 0)
1374             csr0 |= 0x2000;
1375     }
1376 
1377     /* PNIC doesn't have MWI/MRL/MRM... */
1378     if (chip_idx == LC82C168)
1379         csr0 &= ~0xfff10000; /* zero reserved bits 31:20, 16 */
1380 
1381     /* DM9102A has troubles with MRM & clear reserved bits 24:22, 20, 16, 7:1 */
1382     if (tulip_uli_dm_quirk(pdev)) {
1383         csr0 &= ~0x01f100ff;
1384 #if defined(CONFIG_SPARC)
1385                 csr0 = (csr0 & ~0xff00) | 0xe000;
1386 #endif
1387     }
1388     /*
1389      *  And back to business
1390      */
1391 
1392     i = pcim_enable_device(pdev);
1393     if (i) {
1394         pr_err("Cannot enable tulip board #%d, aborting\n", board_idx);
1395         return i;
1396     }
1397 
1398     irq = pdev->irq;
1399 
1400     /* alloc_etherdev ensures aligned and zeroed private structures */
1401     dev = devm_alloc_etherdev(&pdev->dev, sizeof(*tp));
1402     if (!dev)
1403         return -ENOMEM;
1404 
1405     SET_NETDEV_DEV(dev, &pdev->dev);
1406     if (pci_resource_len (pdev, 0) < tulip_tbl[chip_idx].io_size) {
1407         pr_err("%s: I/O region (0x%llx@0x%llx) too small, aborting\n",
1408                pci_name(pdev),
1409                (unsigned long long)pci_resource_len (pdev, 0),
1410                (unsigned long long)pci_resource_start (pdev, 0));
1411         return -ENODEV;
1412     }
1413 
1414     /* grab all resources from both PIO and MMIO regions, as we
1415      * don't want anyone else messing around with our hardware */
1416     if (pci_request_regions(pdev, DRV_NAME))
1417         return -ENODEV;
1418 
1419     ioaddr = pcim_iomap(pdev, TULIP_BAR, tulip_tbl[chip_idx].io_size);
1420 
1421     if (!ioaddr)
1422         return -ENODEV;
1423 
1424     /*
1425      * initialize private data structure 'tp'
1426      * it is zeroed and aligned in alloc_etherdev
1427      */
1428     tp = netdev_priv(dev);
1429     tp->dev = dev;
1430 
1431     tp->rx_ring = dmam_alloc_coherent(&pdev->dev,
1432                       sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
1433                       sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
1434                       &tp->rx_ring_dma, GFP_KERNEL);
1435     if (!tp->rx_ring)
1436         return -ENODEV;
1437     tp->tx_ring = (struct tulip_tx_desc *)(tp->rx_ring + RX_RING_SIZE);
1438     tp->tx_ring_dma = tp->rx_ring_dma + sizeof(struct tulip_rx_desc) * RX_RING_SIZE;
1439 
1440     tp->chip_id = chip_idx;
1441     tp->flags = tulip_tbl[chip_idx].flags;
1442 
1443     tp->wolinfo.supported = 0;
1444     tp->wolinfo.wolopts = 0;
1445     /* COMET: Enable power management only for AN983B */
1446     if (chip_idx == COMET ) {
1447         u32 sig;
1448         pci_read_config_dword (pdev, 0x80, &sig);
1449         if (sig == 0x09811317) {
1450             tp->flags |= COMET_PM;
1451             tp->wolinfo.supported = WAKE_PHY | WAKE_MAGIC;
1452             pr_info("%s: Enabled WOL support for AN983B\n",
1453                 __func__);
1454         }
1455     }
1456     tp->pdev = pdev;
1457     tp->base_addr = ioaddr;
1458     tp->revision = pdev->revision;
1459     tp->csr0 = csr0;
1460     spin_lock_init(&tp->lock);
1461     spin_lock_init(&tp->mii_lock);
1462     timer_setup(&tp->timer, tulip_tbl[tp->chip_id].media_timer, 0);
1463 
1464     INIT_WORK(&tp->media_work, tulip_tbl[tp->chip_id].media_task);
1465 
1466 #ifdef CONFIG_TULIP_MWI
1467     if (!force_csr0 && (tp->flags & HAS_PCI_MWI))
1468         tulip_mwi_config (pdev, dev);
1469 #endif
1470 
1471     /* Stop the chip's Tx and Rx processes. */
1472     tulip_stop_rxtx(tp);
1473 
1474     pci_set_master(pdev);
1475 
1476 #ifdef CONFIG_GSC
1477     if (pdev->subsystem_vendor == PCI_VENDOR_ID_HP) {
1478         switch (pdev->subsystem_device) {
1479         default:
1480             break;
1481         case 0x1061:
1482         case 0x1062:
1483         case 0x1063:
1484         case 0x1098:
1485         case 0x1099:
1486         case 0x10EE:
1487             tp->flags |= HAS_SWAPPED_SEEPROM | NEEDS_FAKE_MEDIA_TABLE;
1488             chip_name = "GSC DS21140 Tulip";
1489         }
1490     }
1491 #endif
1492 
1493     /* Clear the missed-packet counter. */
1494     ioread32(ioaddr + CSR8);
1495 
1496     /* The station address ROM is read byte serially.  The register must
1497        be polled, waiting for the value to be read bit serially from the
1498        EEPROM.
1499        */
1500     ee_data = tp->eeprom;
1501     memset(ee_data, 0, sizeof(tp->eeprom));
1502     sum = 0;
1503     if (chip_idx == LC82C168) {
1504         for (i = 0; i < 3; i++) {
1505             int value, boguscnt = 100000;
1506             iowrite32(0x600 | i, ioaddr + 0x98);
1507             do {
1508                 value = ioread32(ioaddr + CSR9);
1509             } while (value < 0  && --boguscnt > 0);
1510             put_unaligned_le16(value, ((__le16 *)addr) + i);
1511             sum += value & 0xffff;
1512         }
1513         eth_hw_addr_set(dev, addr);
1514     } else if (chip_idx == COMET) {
1515         /* No need to read the EEPROM. */
1516         put_unaligned_le32(ioread32(ioaddr + 0xA4), addr);
1517         put_unaligned_le16(ioread32(ioaddr + 0xA8), addr + 4);
1518         eth_hw_addr_set(dev, addr);
1519         for (i = 0; i < 6; i ++)
1520             sum += dev->dev_addr[i];
1521     } else {
1522         /* A serial EEPROM interface, we read now and sort it out later. */
1523         int sa_offset = 0;
1524         int ee_addr_size = tulip_read_eeprom(dev, 0xff, 8) & 0x40000 ? 8 : 6;
1525         int ee_max_addr = ((1 << ee_addr_size) - 1) * sizeof(u16);
1526 
1527         if (ee_max_addr > sizeof(tp->eeprom))
1528             ee_max_addr = sizeof(tp->eeprom);
1529 
1530         for (i = 0; i < ee_max_addr ; i += sizeof(u16)) {
1531             u16 data = tulip_read_eeprom(dev, i/2, ee_addr_size);
1532             ee_data[i] = data & 0xff;
1533             ee_data[i + 1] = data >> 8;
1534         }
1535 
1536         /* DEC now has a specification (see Notes) but early board makers
1537            just put the address in the first EEPROM locations. */
1538         /* This does  memcmp(ee_data, ee_data+16, 8) */
1539         for (i = 0; i < 8; i ++)
1540             if (ee_data[i] != ee_data[16+i])
1541                 sa_offset = 20;
1542         if (chip_idx == CONEXANT) {
1543             /* Check that the tuple type and length is correct. */
1544             if (ee_data[0x198] == 0x04  &&  ee_data[0x199] == 6)
1545                 sa_offset = 0x19A;
1546         } else if (ee_data[0] == 0xff  &&  ee_data[1] == 0xff &&
1547                    ee_data[2] == 0) {
1548             sa_offset = 2;      /* Grrr, damn Matrox boards. */
1549         }
1550 #ifdef CONFIG_MIPS_COBALT
1551                if ((pdev->bus->number == 0) &&
1552                    ((PCI_SLOT(pdev->devfn) == 7) ||
1553                     (PCI_SLOT(pdev->devfn) == 12))) {
1554                        /* Cobalt MAC address in first EEPROM locations. */
1555                        sa_offset = 0;
1556                /* Ensure our media table fixup get's applied */
1557                memcpy(ee_data + 16, ee_data, 8);
1558                }
1559 #endif
1560 #ifdef CONFIG_GSC
1561         /* Check to see if we have a broken srom */
1562         if (ee_data[0] == 0x61 && ee_data[1] == 0x10) {
1563             /* pci_vendor_id and subsystem_id are swapped */
1564             ee_data[0] = ee_data[2];
1565             ee_data[1] = ee_data[3];
1566             ee_data[2] = 0x61;
1567             ee_data[3] = 0x10;
1568 
1569             /* HSC-PCI boards need to be byte-swaped and shifted
1570              * up 1 word.  This shift needs to happen at the end
1571              * of the MAC first because of the 2 byte overlap.
1572              */
1573             for (i = 4; i >= 0; i -= 2) {
1574                 ee_data[17 + i + 3] = ee_data[17 + i];
1575                 ee_data[16 + i + 5] = ee_data[16 + i];
1576             }
1577         }
1578 #endif
1579 
1580         for (i = 0; i < 6; i ++) {
1581             addr[i] = ee_data[i + sa_offset];
1582             sum += ee_data[i + sa_offset];
1583         }
1584         eth_hw_addr_set(dev, addr);
1585     }
1586     /* Lite-On boards have the address byte-swapped. */
1587     if ((dev->dev_addr[0] == 0xA0 ||
1588          dev->dev_addr[0] == 0xC0 ||
1589          dev->dev_addr[0] == 0x02) &&
1590         dev->dev_addr[1] == 0x00) {
1591         for (i = 0; i < 6; i+=2) {
1592             addr[i] = dev->dev_addr[i+1];
1593             addr[i+1] = dev->dev_addr[i];
1594         }
1595         eth_hw_addr_set(dev, addr);
1596     }
1597 
1598     /* On the Zynx 315 Etherarray and other multiport boards only the
1599        first Tulip has an EEPROM.
1600        On Sparc systems the mac address is held in the OBP property
1601        "local-mac-address".
1602        The addresses of the subsequent ports are derived from the first.
1603        Many PCI BIOSes also incorrectly report the IRQ line, so we correct
1604        that here as well. */
1605     if (sum == 0  || sum == 6*0xff) {
1606 #if defined(CONFIG_SPARC)
1607         struct device_node *dp = pci_device_to_OF_node(pdev);
1608         const unsigned char *addr2;
1609         int len;
1610 #endif
1611         eeprom_missing = 1;
1612         for (i = 0; i < 5; i++)
1613             addr[i] = last_phys_addr[i];
1614         addr[i] = last_phys_addr[i] + 1;
1615         eth_hw_addr_set(dev, addr);
1616 #if defined(CONFIG_SPARC)
1617         addr2 = of_get_property(dp, "local-mac-address", &len);
1618         if (addr2 && len == ETH_ALEN)
1619             eth_hw_addr_set(dev, addr2);
1620 #endif
1621 #if defined(__i386__) || defined(__x86_64__)    /* Patch up x86 BIOS bug. */
1622         if (last_irq)
1623             irq = last_irq;
1624 #endif
1625     }
1626 
1627     for (i = 0; i < 6; i++)
1628         last_phys_addr[i] = dev->dev_addr[i];
1629 #if defined(__i386__) || defined(__x86_64__)    /* Patch up x86 BIOS bug. */
1630     last_irq = irq;
1631 #endif
1632 
1633     /* The lower four bits are the media type. */
1634     if (board_idx >= 0  &&  board_idx < MAX_UNITS) {
1635         if (options[board_idx] & MEDIA_MASK)
1636             tp->default_port = options[board_idx] & MEDIA_MASK;
1637         if ((options[board_idx] & FullDuplex) || full_duplex[board_idx] > 0)
1638             tp->full_duplex = 1;
1639         if (mtu[board_idx] > 0)
1640             dev->mtu = mtu[board_idx];
1641     }
1642     if (dev->mem_start & MEDIA_MASK)
1643         tp->default_port = dev->mem_start & MEDIA_MASK;
1644     if (tp->default_port) {
1645         pr_info(DRV_NAME "%d: Transceiver selection forced to %s\n",
1646             board_idx, medianame[tp->default_port & MEDIA_MASK]);
1647         tp->medialock = 1;
1648         if (tulip_media_cap[tp->default_port] & MediaAlwaysFD)
1649             tp->full_duplex = 1;
1650     }
1651     if (tp->full_duplex)
1652         tp->full_duplex_lock = 1;
1653 
1654     if (tulip_media_cap[tp->default_port] & MediaIsMII) {
1655         static const u16 media2advert[] = {
1656             0x20, 0x40, 0x03e0, 0x60, 0x80, 0x100, 0x200
1657         };
1658         tp->mii_advertise = media2advert[tp->default_port - 9];
1659         tp->mii_advertise |= (tp->flags & HAS_8023X); /* Matching bits! */
1660     }
1661 
1662     if (tp->flags & HAS_MEDIA_TABLE) {
1663         sprintf(dev->name, DRV_NAME "%d", board_idx);   /* hack */
1664         tulip_parse_eeprom(dev);
1665         strcpy(dev->name, "eth%d");         /* un-hack */
1666     }
1667 
1668     if ((tp->flags & ALWAYS_CHECK_MII) ||
1669         (tp->mtable  &&  tp->mtable->has_mii) ||
1670         ( ! tp->mtable  &&  (tp->flags & HAS_MII))) {
1671         if (tp->mtable  &&  tp->mtable->has_mii) {
1672             for (i = 0; i < tp->mtable->leafcount; i++)
1673                 if (tp->mtable->mleaf[i].media == 11) {
1674                     tp->cur_index = i;
1675                     tp->saved_if_port = dev->if_port;
1676                     tulip_select_media(dev, 2);
1677                     dev->if_port = tp->saved_if_port;
1678                     break;
1679                 }
1680         }
1681 
1682         /* Find the connected MII xcvrs.
1683            Doing this in open() would allow detecting external xcvrs
1684            later, but takes much time. */
1685         tulip_find_mii (dev, board_idx);
1686     }
1687 
1688     /* The Tulip-specific entries in the device structure. */
1689     dev->netdev_ops = &tulip_netdev_ops;
1690     dev->watchdog_timeo = TX_TIMEOUT;
1691 #ifdef CONFIG_TULIP_NAPI
1692     netif_napi_add_weight(dev, &tp->napi, tulip_poll, 16);
1693 #endif
1694     dev->ethtool_ops = &ops;
1695 
1696     i = register_netdev(dev);
1697     if (i)
1698         return i;
1699 
1700     pci_set_drvdata(pdev, dev);
1701 
1702     dev_info(&dev->dev,
1703 #ifdef CONFIG_TULIP_MMIO
1704          "%s rev %d at MMIO %#llx,%s %pM, IRQ %d\n",
1705 #else
1706          "%s rev %d at Port %#llx,%s %pM, IRQ %d\n",
1707 #endif
1708          chip_name, pdev->revision,
1709          (unsigned long long)pci_resource_start(pdev, TULIP_BAR),
1710          eeprom_missing ? " EEPROM not present," : "",
1711          dev->dev_addr, irq);
1712 
1713         if (tp->chip_id == PNIC2)
1714         tp->link_change = pnic2_lnk_change;
1715     else if (tp->flags & HAS_NWAY)
1716         tp->link_change = t21142_lnk_change;
1717     else if (tp->flags & HAS_PNICNWAY)
1718         tp->link_change = pnic_lnk_change;
1719 
1720     /* Reset the xcvr interface and turn on heartbeat. */
1721     switch (chip_idx) {
1722     case DC21140:
1723     case DM910X:
1724     default:
1725         if (tp->mtable)
1726             iowrite32(tp->mtable->csr12dir | 0x100, ioaddr + CSR12);
1727         break;
1728     case DC21142:
1729         if (tp->mii_cnt  ||  tulip_media_cap[dev->if_port] & MediaIsMII) {
1730             iowrite32(csr6_mask_defstate, ioaddr + CSR6);
1731             iowrite32(0x0000, ioaddr + CSR13);
1732             iowrite32(0x0000, ioaddr + CSR14);
1733             iowrite32(csr6_mask_hdcap, ioaddr + CSR6);
1734         } else
1735             t21142_start_nway(dev);
1736         break;
1737     case PNIC2:
1738             /* just do a reset for sanity sake */
1739         iowrite32(0x0000, ioaddr + CSR13);
1740         iowrite32(0x0000, ioaddr + CSR14);
1741         break;
1742     case LC82C168:
1743         if ( ! tp->mii_cnt) {
1744             tp->nway = 1;
1745             tp->nwayset = 0;
1746             iowrite32(csr6_ttm | csr6_ca, ioaddr + CSR6);
1747             iowrite32(0x30, ioaddr + CSR12);
1748             iowrite32(0x0001F078, ioaddr + CSR6);
1749             iowrite32(0x0201F078, ioaddr + CSR6); /* Turn on autonegotiation. */
1750         }
1751         break;
1752     case MX98713:
1753     case COMPEX9881:
1754         iowrite32(0x00000000, ioaddr + CSR6);
1755         iowrite32(0x000711C0, ioaddr + CSR14); /* Turn on NWay. */
1756         iowrite32(0x00000001, ioaddr + CSR13);
1757         break;
1758     case MX98715:
1759     case MX98725:
1760         iowrite32(0x01a80000, ioaddr + CSR6);
1761         iowrite32(0xFFFFFFFF, ioaddr + CSR14);
1762         iowrite32(0x00001000, ioaddr + CSR12);
1763         break;
1764     case COMET:
1765         /* No initialization necessary. */
1766         break;
1767     }
1768 
1769     /* put the chip in snooze mode until opened */
1770     tulip_set_power_state (tp, 0, 1);
1771 
1772     return 0;
1773 }
1774 
1775 
1776 /* set the registers according to the given wolopts */
1777 static void tulip_set_wolopts (struct pci_dev *pdev, u32 wolopts)
1778 {
1779     struct net_device *dev = pci_get_drvdata(pdev);
1780     struct tulip_private *tp = netdev_priv(dev);
1781     void __iomem *ioaddr = tp->base_addr;
1782 
1783     if (tp->flags & COMET_PM) {
1784         unsigned int tmp;
1785 
1786         tmp = ioread32(ioaddr + CSR18);
1787         tmp &= ~(comet_csr18_pmes_sticky | comet_csr18_apm_mode | comet_csr18_d3a);
1788         tmp |= comet_csr18_pm_mode;
1789         iowrite32(tmp, ioaddr + CSR18);
1790 
1791         /* Set the Wake-up Control/Status Register to the given WOL options*/
1792         tmp = ioread32(ioaddr + CSR13);
1793         tmp &= ~(comet_csr13_linkoffe | comet_csr13_linkone | comet_csr13_wfre | comet_csr13_lsce | comet_csr13_mpre);
1794         if (wolopts & WAKE_MAGIC)
1795             tmp |= comet_csr13_mpre;
1796         if (wolopts & WAKE_PHY)
1797             tmp |= comet_csr13_linkoffe | comet_csr13_linkone | comet_csr13_lsce;
1798         /* Clear the event flags */
1799         tmp |= comet_csr13_wfr | comet_csr13_mpr | comet_csr13_lsc;
1800         iowrite32(tmp, ioaddr + CSR13);
1801     }
1802 }
1803 
1804 static int __maybe_unused tulip_suspend(struct device *dev_d)
1805 {
1806     struct net_device *dev = dev_get_drvdata(dev_d);
1807     struct tulip_private *tp = netdev_priv(dev);
1808 
1809     if (!dev)
1810         return -EINVAL;
1811 
1812     if (!netif_running(dev))
1813         goto save_state;
1814 
1815     tulip_down(dev);
1816 
1817     netif_device_detach(dev);
1818     /* FIXME: it needlessly adds an error path. */
1819     free_irq(tp->pdev->irq, dev);
1820 
1821 save_state:
1822     tulip_set_wolopts(to_pci_dev(dev_d), tp->wolinfo.wolopts);
1823     device_set_wakeup_enable(dev_d, !!tp->wolinfo.wolopts);
1824 
1825     return 0;
1826 }
1827 
1828 static int __maybe_unused tulip_resume(struct device *dev_d)
1829 {
1830     struct pci_dev *pdev = to_pci_dev(dev_d);
1831     struct net_device *dev = dev_get_drvdata(dev_d);
1832     struct tulip_private *tp = netdev_priv(dev);
1833     void __iomem *ioaddr = tp->base_addr;
1834     unsigned int tmp;
1835     int retval = 0;
1836 
1837     if (!dev)
1838         return -EINVAL;
1839 
1840     if (!netif_running(dev))
1841         return 0;
1842 
1843     retval = request_irq(pdev->irq, tulip_interrupt, IRQF_SHARED,
1844                  dev->name, dev);
1845     if (retval) {
1846         pr_err("request_irq failed in resume\n");
1847         return retval;
1848     }
1849 
1850     if (tp->flags & COMET_PM) {
1851         device_set_wakeup_enable(dev_d, 0);
1852 
1853         /* Clear the PMES flag */
1854         tmp = ioread32(ioaddr + CSR20);
1855         tmp |= comet_csr20_pmes;
1856         iowrite32(tmp, ioaddr + CSR20);
1857 
1858         /* Disable all wake-up events */
1859         tulip_set_wolopts(pdev, 0);
1860     }
1861     netif_device_attach(dev);
1862 
1863     if (netif_running(dev))
1864         tulip_up(dev);
1865 
1866     return 0;
1867 }
1868 
1869 static void tulip_remove_one(struct pci_dev *pdev)
1870 {
1871     struct net_device *dev = pci_get_drvdata (pdev);
1872 
1873     if (!dev)
1874         return;
1875 
1876     unregister_netdev(dev);
1877 }
1878 
1879 #ifdef CONFIG_NET_POLL_CONTROLLER
1880 /*
1881  * Polling 'interrupt' - used by things like netconsole to send skbs
1882  * without having to re-enable interrupts. It's not called while
1883  * the interrupt routine is executing.
1884  */
1885 
1886 static void poll_tulip (struct net_device *dev)
1887 {
1888     struct tulip_private *tp = netdev_priv(dev);
1889     const int irq = tp->pdev->irq;
1890 
1891     /* disable_irq here is not very nice, but with the lockless
1892        interrupt handler we have no other choice. */
1893     disable_irq(irq);
1894     tulip_interrupt (irq, dev);
1895     enable_irq(irq);
1896 }
1897 #endif
1898 
1899 static SIMPLE_DEV_PM_OPS(tulip_pm_ops, tulip_suspend, tulip_resume);
1900 
1901 static struct pci_driver tulip_driver = {
1902     .name       = DRV_NAME,
1903     .id_table   = tulip_pci_tbl,
1904     .probe      = tulip_init_one,
1905     .remove     = tulip_remove_one,
1906     .driver.pm  = &tulip_pm_ops,
1907 };
1908 
1909 
1910 static int __init tulip_init (void)
1911 {
1912     if (!csr0) {
1913         pr_warn("tulip: unknown CPU architecture, using default csr0\n");
1914         /* default to 8 longword cache line alignment */
1915         csr0 = 0x00A00000 | 0x4800;
1916     }
1917 
1918     /* copy module parms into globals */
1919     tulip_rx_copybreak = rx_copybreak;
1920     tulip_max_interrupt_work = max_interrupt_work;
1921 
1922     /* probe for and init boards */
1923     return pci_register_driver(&tulip_driver);
1924 }
1925 
1926 
1927 static void __exit tulip_cleanup (void)
1928 {
1929     pci_unregister_driver (&tulip_driver);
1930 }
1931 
1932 
1933 module_init(tulip_init);
1934 module_exit(tulip_cleanup);