Merge /spare/repo/linux-2.6/
authorJeff Garzik <jgarzik@pobox.com>
Thu, 22 Sep 2005 02:34:08 +0000 (22:34 -0400)
committerJeff Garzik <jgarzik@pobox.com>
Thu, 22 Sep 2005 02:34:08 +0000 (22:34 -0400)
1  2 
drivers/net/8139cp.c
drivers/net/Kconfig
drivers/net/e100.c
drivers/net/e1000/e1000_main.c
drivers/net/ixgb/ixgb_main.c
drivers/net/skge.c

diff --combined drivers/net/8139cp.c
index bd99c268e2daba16e3579246a9adf39cf71bf210,bc537440ca025931124c278d81f66a3d742cabf6..f822cd3025ff07b154e48e7cd2d226e21f4f6898
@@@ -353,8 -353,6 +353,6 @@@ struct cp_private 
  
        struct net_device_stats net_stats;
        struct cp_extra_stats   cp_stats;
-       struct cp_dma_stats     *nic_stats;
-       dma_addr_t              nic_stats_dma;
  
        unsigned                rx_tail         ____cacheline_aligned;
        struct cp_desc          *rx_ring;
@@@ -1029,7 -1027,8 +1027,7 @@@ static void cp_reset_hw (struct cp_priv
                if (!(cpr8(Cmd) & CmdReset))
                        return;
  
 -              set_current_state(TASK_UNINTERRUPTIBLE);
 -              schedule_timeout(10);
 +              schedule_timeout_uninterruptible(10);
        }
  
        printk(KERN_ERR "%s: hardware reset timeout\n", cp->dev->name);
@@@ -1142,10 -1141,6 +1140,6 @@@ static int cp_alloc_rings (struct cp_pr
        cp->rx_ring = mem;
        cp->tx_ring = &cp->rx_ring[CP_RX_RING_SIZE];
  
-       mem += (CP_RING_BYTES - CP_STATS_SIZE);
-       cp->nic_stats = mem;
-       cp->nic_stats_dma = cp->ring_dma + (CP_RING_BYTES - CP_STATS_SIZE);
        return cp_init_rings(cp);
  }
  
@@@ -1186,7 -1181,6 +1180,6 @@@ static void cp_free_rings (struct cp_pr
        pci_free_consistent(cp->pdev, CP_RING_BYTES, cp->rx_ring, cp->ring_dma);
        cp->rx_ring = NULL;
        cp->tx_ring = NULL;
-       cp->nic_stats = NULL;
  }
  
  static int cp_open (struct net_device *dev)
@@@ -1515,13 -1509,17 +1508,17 @@@ static void cp_get_ethtool_stats (struc
                                  struct ethtool_stats *estats, u64 *tmp_stats)
  {
        struct cp_private *cp = netdev_priv(dev);
+       struct cp_dma_stats *nic_stats;
+       dma_addr_t dma;
        int i;
  
-       memset(cp->nic_stats, 0, sizeof(struct cp_dma_stats));
+       nic_stats = pci_alloc_consistent(cp->pdev, sizeof(*nic_stats), &dma);
+       if (!nic_stats)
+               return;
  
        /* begin NIC statistics dump */
-       cpw32(StatsAddr + 4, (cp->nic_stats_dma >> 16) >> 16);
-       cpw32(StatsAddr, (cp->nic_stats_dma & 0xffffffff) | DumpStats);
+       cpw32(StatsAddr + 4, (u64)dma >> 32);
+       cpw32(StatsAddr, ((u64)dma & DMA_32BIT_MASK) | DumpStats);
        cpr32(StatsAddr);
  
        for (i = 0; i < 1000; i++) {
        }
        cpw32(StatsAddr, 0);
        cpw32(StatsAddr + 4, 0);
+       cpr32(StatsAddr);
  
        i = 0;
-       tmp_stats[i++] = le64_to_cpu(cp->nic_stats->tx_ok);
-       tmp_stats[i++] = le64_to_cpu(cp->nic_stats->rx_ok);
-       tmp_stats[i++] = le64_to_cpu(cp->nic_stats->tx_err);
-       tmp_stats[i++] = le32_to_cpu(cp->nic_stats->rx_err);
-       tmp_stats[i++] = le16_to_cpu(cp->nic_stats->rx_fifo);
-       tmp_stats[i++] = le16_to_cpu(cp->nic_stats->frame_align);
-       tmp_stats[i++] = le32_to_cpu(cp->nic_stats->tx_ok_1col);
-       tmp_stats[i++] = le32_to_cpu(cp->nic_stats->tx_ok_mcol);
-       tmp_stats[i++] = le64_to_cpu(cp->nic_stats->rx_ok_phys);
-       tmp_stats[i++] = le64_to_cpu(cp->nic_stats->rx_ok_bcast);
-       tmp_stats[i++] = le32_to_cpu(cp->nic_stats->rx_ok_mcast);
-       tmp_stats[i++] = le16_to_cpu(cp->nic_stats->tx_abort);
-       tmp_stats[i++] = le16_to_cpu(cp->nic_stats->tx_underrun);
+       tmp_stats[i++] = le64_to_cpu(nic_stats->tx_ok);
+       tmp_stats[i++] = le64_to_cpu(nic_stats->rx_ok);
+       tmp_stats[i++] = le64_to_cpu(nic_stats->tx_err);
+       tmp_stats[i++] = le32_to_cpu(nic_stats->rx_err);
+       tmp_stats[i++] = le16_to_cpu(nic_stats->rx_fifo);
+       tmp_stats[i++] = le16_to_cpu(nic_stats->frame_align);
+       tmp_stats[i++] = le32_to_cpu(nic_stats->tx_ok_1col);
+       tmp_stats[i++] = le32_to_cpu(nic_stats->tx_ok_mcol);
+       tmp_stats[i++] = le64_to_cpu(nic_stats->rx_ok_phys);
+       tmp_stats[i++] = le64_to_cpu(nic_stats->rx_ok_bcast);
+       tmp_stats[i++] = le32_to_cpu(nic_stats->rx_ok_mcast);
+       tmp_stats[i++] = le16_to_cpu(nic_stats->tx_abort);
+       tmp_stats[i++] = le16_to_cpu(nic_stats->tx_underrun);
        tmp_stats[i++] = cp->cp_stats.rx_frags;
        if (i != CP_NUM_STATS)
                BUG();
+       pci_free_consistent(cp->pdev, sizeof(*nic_stats), nic_stats, dma);
  }
  
  static struct ethtool_ops cp_ethtool_ops = {
        .set_wol                = cp_set_wol,
        .get_strings            = cp_get_strings,
        .get_ethtool_stats      = cp_get_ethtool_stats,
 +      .get_perm_addr          = ethtool_op_get_perm_addr,
  };
  
  static int cp_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
@@@ -1773,7 -1773,6 +1773,7 @@@ static int cp_init_one (struct pci_dev 
        for (i = 0; i < 3; i++)
                ((u16 *) (dev->dev_addr))[i] =
                    le16_to_cpu (read_eeprom (regs, i + 7, addr_len));
 +      memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
  
        dev->open = cp_open;
        dev->stop = cp_close;
diff --combined drivers/net/Kconfig
index 82603e419d767e6b3b807bfc62b376910c9b988a,96f14ab1c1f52f805e64c62959fadc84d1b1e412..ff3fccd7513b59a4a39895d5f56ddc3bdda3124c
@@@ -1951,7 -1951,7 +1951,7 @@@ config SKG
        ---help---
          This driver support the Marvell Yukon or SysKonnect SK-98xx/SK-95xx
          and related Gigabit Ethernet adapters. It is a new smaller driver
-         driver with better performance and more complete ethtool support.
+         with better performance and more complete ethtool support.
  
          It does not support the link failover and network management 
          features that "portable" vendor supplied sk98lin driver does.
@@@ -2235,20 -2235,6 +2235,20 @@@ config ISERIES_VET
        tristate "iSeries Virtual Ethernet driver support"
        depends on PPC_ISERIES
  
 +config RIONET
 +      tristate "RapidIO Ethernet over messaging driver support"
 +      depends on NETDEVICES && RAPIDIO
 +
 +config RIONET_TX_SIZE
 +      int "Number of outbound queue entries"
 +      depends on RIONET
 +      default "128"
 +
 +config RIONET_RX_SIZE
 +      int "Number of inbound queue entries"
 +      depends on RIONET
 +      default "128"
 +
  config FDDI
        bool "FDDI driver support"
        depends on (PCI || EISA)
diff --combined drivers/net/e100.c
index 1c918309539f5101e87bdf5ead9f93bc1934180c,fbf1c06ec5c12aac8c83defb67221339325337e3..c15406d46418d4f76a3f13185b902557392d86a8
@@@ -1387,13 -1387,13 +1387,13 @@@ static void e100_update_stats(struct ni
                ns->collisions += nic->tx_collisions;
                ns->tx_errors += le32_to_cpu(s->tx_max_collisions) +
                        le32_to_cpu(s->tx_lost_crs);
-               ns->rx_dropped += le32_to_cpu(s->rx_resource_errors);
                ns->rx_length_errors += le32_to_cpu(s->rx_short_frame_errors) +
                        nic->rx_over_length_errors;
                ns->rx_crc_errors += le32_to_cpu(s->rx_crc_errors);
                ns->rx_frame_errors += le32_to_cpu(s->rx_alignment_errors);
                ns->rx_over_errors += le32_to_cpu(s->rx_overrun_errors);
                ns->rx_fifo_errors += le32_to_cpu(s->rx_overrun_errors);
+               ns->rx_missed_errors += le32_to_cpu(s->rx_resource_errors);
                ns->rx_errors += le32_to_cpu(s->rx_crc_errors) +
                        le32_to_cpu(s->rx_alignment_errors) +
                        le32_to_cpu(s->rx_short_frame_errors) +
@@@ -1727,12 -1727,10 +1727,10 @@@ static inline int e100_rx_indicate(stru
  
        if(unlikely(!(rfd_status & cb_ok))) {
                /* Don't indicate if hardware indicates errors */
-               nic->net_stats.rx_dropped++;
                dev_kfree_skb_any(skb);
        } else if(actual_size > ETH_DATA_LEN + VLAN_ETH_HLEN) {
                /* Don't indicate oversized frames */
                nic->rx_over_length_errors++;
-               nic->net_stats.rx_dropped++;
                dev_kfree_skb_any(skb);
        } else {
                nic->net_stats.rx_packets++;
@@@ -2391,7 -2389,6 +2389,7 @@@ static struct ethtool_ops e100_ethtool_
        .phys_id                = e100_phys_id,
        .get_stats_count        = e100_get_stats_count,
        .get_ethtool_stats      = e100_get_ethtool_stats,
 +      .get_perm_addr          = ethtool_op_get_perm_addr,
  };
  
  static int e100_do_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
@@@ -2542,8 -2539,7 +2540,8 @@@ static int __devinit e100_probe(struct 
        e100_phy_init(nic);
  
        memcpy(netdev->dev_addr, nic->eeprom, ETH_ALEN);
 -      if(!is_valid_ether_addr(netdev->dev_addr)) {
 +      memcpy(netdev->perm_addr, nic->eeprom, ETH_ALEN);
 +      if(!is_valid_ether_addr(netdev->perm_addr)) {
                DPRINTK(PROBE, ERR, "Invalid MAC address from "
                        "EEPROM, aborting.\n");
                err = -EAGAIN;
index d02883dcc9b3f4dc9953f8d024f8368fb5f5e9b8,ee687c902a20be52d0bdf95ef4fc58b03f5317a3..c062b0ad8262202b1b4fb2fbbf1cb9dab1c85852
@@@ -614,9 -614,8 +614,9 @@@ e1000_probe(struct pci_dev *pdev
        if(e1000_read_mac_addr(&adapter->hw))
                DPRINTK(PROBE, ERR, "EEPROM Read Error\n");
        memcpy(netdev->dev_addr, adapter->hw.mac_addr, netdev->addr_len);
 +      memcpy(netdev->perm_addr, adapter->hw.mac_addr, netdev->addr_len);
  
 -      if(!is_valid_ether_addr(netdev->dev_addr)) {
 +      if(!is_valid_ether_addr(netdev->perm_addr)) {
                DPRINTK(PROBE, ERR, "Invalid MAC Address\n");
                err = -EIO;
                goto err_eeprom;
@@@ -2545,7 -2544,6 +2545,6 @@@ e1000_update_stats(struct e1000_adapte
                adapter->stats.crcerrs + adapter->stats.algnerrc +
                adapter->stats.rlec + adapter->stats.mpc + 
                adapter->stats.cexterr;
-       adapter->net_stats.rx_dropped = adapter->stats.mpc;
        adapter->net_stats.rx_length_errors = adapter->stats.rlec;
        adapter->net_stats.rx_crc_errors = adapter->stats.crcerrs;
        adapter->net_stats.rx_frame_errors = adapter->stats.algnerrc;
index 5015eaf4e20a5472c594d49212b2349d2c9120f3,89d6d69be382a3d625892823d8859cbae8237908..176680cb153e8b114797f4e6a8bad2f1837c678c
@@@ -460,9 -460,8 +460,9 @@@ ixgb_probe(struct pci_dev *pdev
        }
  
        ixgb_get_ee_mac_addr(&adapter->hw, netdev->dev_addr);
 +      memcpy(netdev->perm_addr, netdev->dev_addr, netdev->addr_len);
  
 -      if(!is_valid_ether_addr(netdev->dev_addr)) {
 +      if(!is_valid_ether_addr(netdev->perm_addr)) {
                err = -EIO;
                goto err_eeprom;
        }
@@@ -1617,8 -1616,6 +1617,6 @@@ ixgb_update_stats(struct ixgb_adapter *
            adapter->stats.icbc +
            adapter->stats.ecbc + adapter->stats.mpc;
  
-       adapter->net_stats.rx_dropped = adapter->stats.mpc;
        /* see above
         * adapter->net_stats.rx_length_errors = adapter->stats.rlec;
         */
diff --combined drivers/net/skge.c
index 757c83387a296a556a14d5bf49ce8983ee107003,0208258e7826efabf26f81d889e7d65165272c50..7ce734ec6ba8c94f5ebcb4cb4aebbfef3f926a21
@@@ -42,7 -42,7 +42,7 @@@
  #include "skge.h"
  
  #define DRV_NAME              "skge"
- #define DRV_VERSION           "0.9"
+ #define DRV_VERSION           "1.0"
  #define PFX                   DRV_NAME " "
  
  #define DEFAULT_TX_RING_SIZE  128
@@@ -669,7 -669,7 +669,7 @@@ static void skge_led(struct skge_port *
                                     PHY_M_LED_BLINK_RT(BLINK_84MS) |
                                     PHY_M_LEDC_TX_CTRL |
                                     PHY_M_LEDC_DP_CTRL);
-               
                        gm_phy_write(hw, port, PHY_MARV_LED_OVER,
                                     PHY_M_LED_MO_RX(MO_LED_OFF) |
                                     (skge->speed == SPEED_100 ?
@@@ -743,7 -743,6 +743,7 @@@ static struct ethtool_ops skge_ethtool_
        .phys_id        = skge_phys_id,
        .get_stats_count = skge_get_stats_count,
        .get_ethtool_stats = skge_get_ethtool_stats,
 +      .get_perm_addr  = ethtool_op_get_perm_addr,
  };
  
  /*
@@@ -877,7 -876,7 +877,7 @@@ static int skge_rx_fill(struct skge_por
  
  static void skge_link_up(struct skge_port *skge)
  {
-       skge_write8(skge->hw, SK_REG(skge->port, LNK_LED_REG), 
+       skge_write8(skge->hw, SK_REG(skge->port, LNK_LED_REG),
                    LED_BLK_OFF|LED_SYNC_OFF|LED_ON);
  
        netif_carrier_on(skge->netdev);
@@@ -988,6 -987,8 +988,8 @@@ static void genesis_reset(struct skge_h
  {
        const u8 zero[8]  = { 0 };
  
+       skge_write8(hw, SK_REG(port, GMAC_IRQ_MSK), 0);
        /* reset the statistics module */
        xm_write32(hw, port, XM_GP_PORT, XM_GP_RES_STAT);
        xm_write16(hw, port, XM_IMSK, 0xffff);  /* disable XMAC IRQs */
@@@ -1022,8 -1023,6 +1024,6 @@@ static void bcom_check_link(struct skge
        (void) xm_phy_read(hw, port, PHY_BCOM_STAT);
        status = xm_phy_read(hw, port, PHY_BCOM_STAT);
  
-       pr_debug("bcom_check_link status=0x%x\n", status);
        if ((status & PHY_ST_LSYNC) == 0) {
                u16 cmd = xm_read16(hw, port, XM_MMU_CMD);
                cmd &= ~(XM_MMU_ENA_RX | XM_MMU_ENA_TX);
@@@ -1107,8 -1106,6 +1107,6 @@@ static void bcom_phy_init(struct skge_p
                { 0x17, 0x0013 }, { 0x15, 0x0A04 }, { 0x18, 0x0420 },
        };
  
-       pr_debug("bcom_phy_init\n");
        /* read Id from external PHY (all have the same address) */
        id1 = xm_phy_read(hw, port, PHY_XMAC_ID1);
  
@@@ -1341,6 -1338,8 +1339,8 @@@ static void genesis_stop(struct skge_po
        int port = skge->port;
        u32 reg;
  
+       genesis_reset(hw, port);
        /* Clear Tx packet arbiter timeout IRQ */
        skge_write16(hw, B3_PA_CTRL,
                     port == 0 ? PA_CLR_TO_TX1 : PA_CLR_TO_TX2);
@@@ -1466,7 -1465,6 +1466,6 @@@ static void genesis_link_up(struct skge
        u16 cmd;
        u32 mode, msk;
  
-       pr_debug("genesis_link_up\n");
        cmd = xm_read16(hw, port, XM_MMU_CMD);
  
        /*
@@@ -1579,7 -1577,6 +1578,6 @@@ static void yukon_init(struct skge_hw *
        struct skge_port *skge = netdev_priv(hw->dev[port]);
        u16 ctrl, ct1000, adv;
  
-       pr_debug("yukon_init\n");
        if (skge->autoneg == AUTONEG_ENABLE) {
                u16 ectrl = gm_phy_read(hw, port, PHY_MARV_EXT_CTRL);
  
@@@ -1678,9 -1675,11 +1676,11 @@@ static void yukon_mac_init(struct skge_
  
        /* WA code for COMA mode -- set PHY reset */
        if (hw->chip_id == CHIP_ID_YUKON_LITE &&
-           hw->chip_rev >= CHIP_REV_YU_LITE_A3)
-               skge_write32(hw, B2_GP_IO,
-                            (skge_read32(hw, B2_GP_IO) | GP_DIR_9 | GP_IO_9));
+           hw->chip_rev >= CHIP_REV_YU_LITE_A3) {
+               reg = skge_read32(hw, B2_GP_IO);
+               reg |= GP_DIR_9 | GP_IO_9;
+               skge_write32(hw, B2_GP_IO, reg);
+       }
  
        /* hard reset */
        skge_write32(hw, SK_REG(port, GPHY_CTRL), GPC_RST_SET);
  
        /* WA code for COMA mode -- clear PHY reset */
        if (hw->chip_id == CHIP_ID_YUKON_LITE &&
-           hw->chip_rev >= CHIP_REV_YU_LITE_A3)
-               skge_write32(hw, B2_GP_IO,
-                            (skge_read32(hw, B2_GP_IO) | GP_DIR_9)
-                            & ~GP_IO_9);
+           hw->chip_rev >= CHIP_REV_YU_LITE_A3) {
+               reg = skge_read32(hw, B2_GP_IO);
+               reg |= GP_DIR_9;
+               reg &= ~GP_IO_9;
+               skge_write32(hw, B2_GP_IO, reg);
+       }
  
        /* Set hardware config mode */
        reg = GPC_INT_POL_HI | GPC_DIS_FC | GPC_DIS_SLEEP |
        }
  
        gma_write16(hw, port, GM_GP_CTRL, reg);
-       skge_read16(hw, GMAC_IRQ_SRC);
+       skge_read16(hw, SK_REG(port, GMAC_IRQ_SRC));
  
        yukon_init(hw, port);
  
@@@ -1802,20 -1803,26 +1804,26 @@@ static void yukon_stop(struct skge_por
        struct skge_hw *hw = skge->hw;
        int port = skge->port;
  
-       if (hw->chip_id == CHIP_ID_YUKON_LITE &&
-           hw->chip_rev >= CHIP_REV_YU_LITE_A3) {
-               skge_write32(hw, B2_GP_IO,
-                            skge_read32(hw, B2_GP_IO) | GP_DIR_9 | GP_IO_9);
-       }
+       skge_write8(hw, SK_REG(port, GMAC_IRQ_MSK), 0);
+       yukon_reset(hw, port);
  
        gma_write16(hw, port, GM_GP_CTRL,
                         gma_read16(hw, port, GM_GP_CTRL)
                         & ~(GM_GPCR_TX_ENA|GM_GPCR_RX_ENA));
        gma_read16(hw, port, GM_GP_CTRL);
  
+       if (hw->chip_id == CHIP_ID_YUKON_LITE &&
+           hw->chip_rev >= CHIP_REV_YU_LITE_A3) {
+               u32 io = skge_read32(hw, B2_GP_IO);
+               io |= GP_DIR_9 | GP_IO_9;
+               skge_write32(hw, B2_GP_IO, io);
+               skge_read32(hw, B2_GP_IO);
+       }
        /* set GPHY Control reset */
-       skge_write32(hw, SK_REG(port, GPHY_CTRL), GPC_RST_SET);
-       skge_write32(hw, SK_REG(port, GMAC_CTRL), GMC_RST_SET);
+       skge_write8(hw, SK_REG(port, GPHY_CTRL), GPC_RST_SET);
+       skge_write8(hw, SK_REG(port, GMAC_CTRL), GMC_RST_SET);
  }
  
  static void yukon_get_stats(struct skge_port *skge, u64 *data)
@@@ -1874,10 -1881,8 +1882,8 @@@ static void yukon_link_up(struct skge_p
        int port = skge->port;
        u16 reg;
  
-       pr_debug("yukon_link_up\n");
        /* Enable Transmit FIFO Underrun */
-       skge_write8(hw, GMAC_IRQ_MSK, GMAC_DEF_MSK);
+       skge_write8(hw, SK_REG(port, GMAC_IRQ_MSK), GMAC_DEF_MSK);
  
        reg = gma_read16(hw, port, GM_GP_CTRL);
        if (skge->duplex == DUPLEX_FULL || skge->autoneg == AUTONEG_ENABLE)
@@@ -1897,7 -1902,6 +1903,6 @@@ static void yukon_link_down(struct skge
        int port = skge->port;
        u16 ctrl;
  
-       pr_debug("yukon_link_down\n");
        gm_phy_write(hw, port, PHY_MARV_INT_MASK, 0);
  
        ctrl = gma_read16(hw, port, GM_GP_CTRL);
@@@ -2113,7 -2117,6 +2118,6 @@@ static int skge_up(struct net_device *d
        skge_write8(hw, Q_ADDR(rxqaddr[port], Q_CSR), CSR_START | CSR_IRQ_CL_F);
        skge_led(skge, LED_MODE_ON);
  
-       pr_debug("skge_up completed\n");
        return 0;
  
   free_rx_ring:
@@@ -2136,15 -2139,20 +2140,20 @@@ static int skge_down(struct net_device 
  
        netif_stop_queue(dev);
  
+       skge_write8(skge->hw, SK_REG(skge->port, LNK_LED_REG), LED_OFF);
+       if (hw->chip_id == CHIP_ID_GENESIS)
+               genesis_stop(skge);
+       else
+               yukon_stop(skge);
+       hw->intr_mask &= ~portirqmask[skge->port];
+       skge_write32(hw, B0_IMSK, hw->intr_mask);
        /* Stop transmitter */
        skge_write8(hw, Q_ADDR(txqaddr[port], Q_CSR), CSR_STOP);
        skge_write32(hw, RB_ADDR(txqaddr[port], RB_CTRL),
                     RB_RST_SET|RB_DIS_OP_MD);
  
-       if (hw->chip_id == CHIP_ID_GENESIS)
-               genesis_stop(skge);
-       else
-               yukon_stop(skge);
  
        /* Disable Force Sync bit and Enable Alloc bit */
        skge_write8(hw, SK_REG(port, TXA_CTRL),
@@@ -2368,8 -2376,6 +2377,6 @@@ static void genesis_set_multicast(struc
        u32 mode;
        u8 filter[8];
  
-       pr_debug("genesis_set_multicast flags=%x count=%d\n", dev->flags, dev->mc_count);
        mode = xm_read32(hw, port, XM_MODE);
        mode |= XM_MD_ENA_HASH;
        if (dev->flags & IFF_PROMISC)
@@@ -2531,8 -2537,6 +2538,6 @@@ static int skge_poll(struct net_device 
        unsigned int to_do = min(dev->quota, *budget);
        unsigned int work_done = 0;
  
-       pr_debug("skge_poll\n");
        for (e = ring->to_clean; work_done < to_do; e = e->next) {
                struct skge_rx_desc *rd = e->desc;
                struct sk_buff *skb;
@@@ -2673,9 -2677,9 +2678,9 @@@ static void skge_error_irq(struct skge_
        if (hw->chip_id == CHIP_ID_GENESIS) {
                /* clear xmac errors */
                if (hwstatus & (IS_NO_STAT_M1|IS_NO_TIST_M1))
-                       skge_write16(hw, SK_REG(0, RX_MFF_CTRL1), MFF_CLR_INSTAT);
+                       skge_write16(hw, RX_MFF_CTRL1, MFF_CLR_INSTAT);
                if (hwstatus & (IS_NO_STAT_M2|IS_NO_TIST_M2))
-                       skge_write16(hw, SK_REG(0, RX_MFF_CTRL2), MFF_CLR_INSTAT);
+                       skge_write16(hw, RX_MFF_CTRL2, MFF_CLR_INSTAT);
        } else {
                /* Timestamp (unused) overflow */
                if (hwstatus & IS_IRQ_TIST_OV)
@@@ -3001,9 -3005,6 +3006,6 @@@ static int skge_reset(struct skge_hw *h
  
        skge_write32(hw, B0_IMSK, hw->intr_mask);
  
-       if (hw->chip_id != CHIP_ID_GENESIS)
-               skge_write8(hw, GMAC_IRQ_MSK, 0);
        spin_lock_bh(&hw->phy_lock);
        for (i = 0; i < hw->ports; i++) {
                if (hw->chip_id == CHIP_ID_GENESIS)
@@@ -3081,7 -3082,6 +3083,7 @@@ static struct net_device *skge_devinit(
  
        /* read the mac address */
        memcpy_fromio(dev->dev_addr, hw->regs + B2_MAC_1 + port*8, ETH_ALEN);
 +      memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
  
        /* device is off until link detection */
        netif_carrier_off(dev);
@@@ -3232,6 -3232,11 +3234,11 @@@ static void __devexit skge_remove(struc
        dev0 = hw->dev[0];
        unregister_netdev(dev0);
  
+       skge_write32(hw, B0_IMSK, 0);
+       skge_write16(hw, B0_LED, LED_STAT_OFF);
+       skge_pci_clear(hw);
+       skge_write8(hw, B0_CTST, CS_RST_SET);
        tasklet_kill(&hw->ext_tasklet);
  
        free_irq(pdev->irq, hw);
        if (dev1)
                free_netdev(dev1);
        free_netdev(dev0);
-       skge_write16(hw, B0_LED, LED_STAT_OFF);
        iounmap(hw->regs);
        kfree(hw);
        pci_set_drvdata(pdev, NULL);
@@@ -3259,7 -3264,10 +3266,10 @@@ static int skge_suspend(struct pci_dev 
                        struct skge_port *skge = netdev_priv(dev);
                        if (netif_running(dev)) {
                                netif_carrier_off(dev);
-                               skge_down(dev);
+                               if (skge->wol)
+                                       netif_stop_queue(dev);
+                               else
+                                       skge_down(dev);
                        }
                        netif_device_detach(dev);
                        wol |= skge->wol;
This page took 0.041763 seconds and 5 git commands to generate.