Lines Matching defs:nic

537 struct nic {
542 u16 (*mdio_ctrl)(struct nic *nic, u32 addr, u32 dir, u32 reg, u16 data);
606 static inline void e100_write_flush(struct nic *nic)
610 (void)ioread8(&nic->csr->scb.status);
613 static void e100_enable_irq(struct nic *nic)
617 spin_lock_irqsave(&nic->cmd_lock, flags);
618 iowrite8(irq_mask_none, &nic->csr->scb.cmd_hi);
619 e100_write_flush(nic);
620 spin_unlock_irqrestore(&nic->cmd_lock, flags);
623 static void e100_disable_irq(struct nic *nic)
627 spin_lock_irqsave(&nic->cmd_lock, flags);
628 iowrite8(irq_mask_all, &nic->csr->scb.cmd_hi);
629 e100_write_flush(nic);
630 spin_unlock_irqrestore(&nic->cmd_lock, flags);
633 static void e100_hw_reset(struct nic *nic)
637 iowrite32(selective_reset, &nic->csr->port);
638 e100_write_flush(nic); udelay(20);
641 iowrite32(software_reset, &nic->csr->port);
642 e100_write_flush(nic); udelay(20);
645 e100_disable_irq(nic);
648 static int e100_self_test(struct nic *nic)
650 u32 dma_addr = nic->dma_addr + offsetof(struct mem, selftest);
655 nic->mem->selftest.signature = 0;
656 nic->mem->selftest.result = 0xFFFFFFFF;
658 iowrite32(selftest | dma_addr, &nic->csr->port);
659 e100_write_flush(nic);
664 e100_disable_irq(nic);
667 if (nic->mem->selftest.result != 0) {
668 netif_err(nic, hw, nic->netdev,
670 nic->mem->selftest.result);
673 if (nic->mem->selftest.signature == 0) {
674 netif_err(nic, hw, nic->netdev, "Self-test failed: timed out\n");
681 static void e100_eeprom_write(struct nic *nic, u16 addr_len, u16 addr, __le16 data)
697 iowrite8(eecs | eesk, &nic->csr->eeprom_ctrl_lo);
698 e100_write_flush(nic); udelay(4);
703 iowrite8(ctrl, &nic->csr->eeprom_ctrl_lo);
704 e100_write_flush(nic); udelay(4);
706 iowrite8(ctrl | eesk, &nic->csr->eeprom_ctrl_lo);
707 e100_write_flush(nic); udelay(4);
713 iowrite8(0, &nic->csr->eeprom_ctrl_lo);
714 e100_write_flush(nic); udelay(4);
719 static __le16 e100_eeprom_read(struct nic *nic, u16 *addr_len, u16 addr)
729 iowrite8(eecs | eesk, &nic->csr->eeprom_ctrl_lo);
730 e100_write_flush(nic); udelay(4);
735 iowrite8(ctrl, &nic->csr->eeprom_ctrl_lo);
736 e100_write_flush(nic); udelay(4);
738 iowrite8(ctrl | eesk, &nic->csr->eeprom_ctrl_lo);
739 e100_write_flush(nic); udelay(4);
743 ctrl = ioread8(&nic->csr->eeprom_ctrl_lo);
753 iowrite8(0, &nic->csr->eeprom_ctrl_lo);
754 e100_write_flush(nic); udelay(4);
760 static int e100_eeprom_load(struct nic *nic)
765 e100_eeprom_read(nic, &addr_len, 0);
766 nic->eeprom_wc = 1 << addr_len;
768 for (addr = 0; addr < nic->eeprom_wc; addr++) {
769 nic->eeprom[addr] = e100_eeprom_read(nic, &addr_len, addr);
770 if (addr < nic->eeprom_wc - 1)
771 checksum += le16_to_cpu(nic->eeprom[addr]);
776 if (cpu_to_le16(0xBABA - checksum) != nic->eeprom[nic->eeprom_wc - 1]) {
777 netif_err(nic, probe, nic->netdev, "EEPROM corrupted\n");
786 static int e100_eeprom_save(struct nic *nic, u16 start, u16 count)
791 e100_eeprom_read(nic, &addr_len, 0);
792 nic->eeprom_wc = 1 << addr_len;
794 if (start + count >= nic->eeprom_wc)
798 e100_eeprom_write(nic, addr_len, addr, nic->eeprom[addr]);
802 for (addr = 0; addr < nic->eeprom_wc - 1; addr++)
803 checksum += le16_to_cpu(nic->eeprom[addr]);
804 nic->eeprom[nic->eeprom_wc - 1] = cpu_to_le16(0xBABA - checksum);
805 e100_eeprom_write(nic, addr_len, nic->eeprom_wc - 1,
806 nic->eeprom[nic->eeprom_wc - 1]);
813 static int e100_exec_cmd(struct nic *nic, u8 cmd, dma_addr_t dma_addr)
819 spin_lock_irqsave(&nic->cmd_lock, flags);
823 if (likely(!ioread8(&nic->csr->scb.cmd_lo)))
835 iowrite32(dma_addr, &nic->csr->scb.gen_ptr);
836 iowrite8(cmd, &nic->csr->scb.cmd_lo);
839 spin_unlock_irqrestore(&nic->cmd_lock, flags);
844 static int e100_exec_cb(struct nic *nic, struct sk_buff *skb,
845 int (*cb_prepare)(struct nic *, struct cb *, struct sk_buff *))
851 spin_lock_irqsave(&nic->cb_lock, flags);
853 if (unlikely(!nic->cbs_avail)) {
858 cb = nic->cb_to_use;
859 nic->cb_to_use = cb->next;
860 nic->cbs_avail--;
863 err = cb_prepare(nic, cb, skb);
867 if (unlikely(!nic->cbs_avail))
877 while (nic->cb_to_send != nic->cb_to_use) {
878 if (unlikely(e100_exec_cmd(nic, nic->cuc_cmd,
879 nic->cb_to_send->dma_addr))) {
887 schedule_work(&nic->tx_timeout_task);
891 nic->cuc_cmd = cuc_resume;
892 nic->cb_to_send = nic->cb_to_send->next;
897 spin_unlock_irqrestore(&nic->cb_lock, flags);
904 struct nic *nic = netdev_priv(netdev);
905 return nic->mdio_ctrl(nic, addr, mdi_read, reg, 0);
910 struct nic *nic = netdev_priv(netdev);
912 nic->mdio_ctrl(nic, addr, mdi_write, reg, data);
916 static u16 mdio_ctrl_hw(struct nic *nic, u32 addr, u32 dir, u32 reg, u16 data)
929 spin_lock_irqsave(&nic->mdio_lock, flags);
931 if (ioread32(&nic->csr->mdi_ctrl) & mdi_ready)
936 netdev_err(nic->netdev, "e100.mdio_ctrl won't go Ready\n");
937 spin_unlock_irqrestore(&nic->mdio_lock, flags);
940 iowrite32((reg << 16) | (addr << 21) | dir | data, &nic->csr->mdi_ctrl);
944 if ((data_out = ioread32(&nic->csr->mdi_ctrl)) & mdi_ready)
947 spin_unlock_irqrestore(&nic->mdio_lock, flags);
948 netif_printk(nic, hw, KERN_DEBUG, nic->netdev,
956 static u16 mdio_ctrl_phy_82552_v(struct nic *nic,
964 u16 advert = mdio_read(nic->netdev, nic->mii.phy_id,
977 return mdio_ctrl_hw(nic, addr, dir, reg, data);
986 static u16 mdio_ctrl_phy_mii_emulated(struct nic *nic,
1011 netif_printk(nic, hw, KERN_DEBUG, nic->netdev,
1020 netif_printk(nic, hw, KERN_DEBUG, nic->netdev,
1028 static inline int e100_phy_supports_mii(struct nic *nic)
1033 return (nic->mdio_ctrl != mdio_ctrl_phy_mii_emulated);
1036 static void e100_get_defaults(struct nic *nic)
1042 nic->mac = (nic->flags & ich) ? mac_82559_D101M : nic->pdev->revision;
1043 if (nic->mac == mac_unknown)
1044 nic->mac = mac_82557_D100_A;
1046 nic->params.rfds = rfds;
1047 nic->params.cbs = cbs;
1050 nic->tx_threshold = 0xE0;
1053 nic->tx_command = cpu_to_le16(cb_tx | cb_tx_sf |
1054 ((nic->mac >= mac_82558_D101_A4) ? cb_cid : cb_i));
1057 nic->blank_rfd.command = 0;
1058 nic->blank_rfd.rbd = cpu_to_le32(0xFFFFFFFF);
1059 nic->blank_rfd.size = cpu_to_le16(VLAN_ETH_FRAME_LEN + ETH_FCS_LEN);
1062 nic->mii.phy_id_mask = 0x1F;
1063 nic->mii.reg_num_mask = 0x1F;
1064 nic->mii.dev = nic->netdev;
1065 nic->mii.mdio_read = mdio_read;
1066 nic->mii.mdio_write = mdio_write;
1069 static int e100_configure(struct nic *nic, struct cb *cb, struct sk_buff *skb)
1073 struct net_device *netdev = nic->netdev;
1086 if (e100_phy_supports_mii(nic))
1105 config->adaptive_ifs = nic->adaptive_ifs;
1106 config->loopback = nic->loopback;
1108 if (nic->mii.force_media && nic->mii.full_duplex)
1111 if (nic->flags & promiscuous || nic->loopback) {
1120 if (nic->flags & multicast_all)
1124 if (netif_running(nic->netdev) || !(nic->flags & wol_magic))
1127 if (nic->mac >= mac_82558_D101_A4) {
1132 if (nic->mac >= mac_82559_D101M) {
1135 if (nic->mac >= mac_82551_10) {
1150 netif_printk(nic, hw, KERN_DEBUG, nic->netdev, "[00-07]=%8ph\n",
1152 netif_printk(nic, hw, KERN_DEBUG, nic->netdev, "[08-15]=%8ph\n",
1154 netif_printk(nic, hw, KERN_DEBUG, nic->netdev, "[16-23]=%8ph\n",
1219 static const struct firmware *e100_request_firmware(struct nic *nic)
1222 const struct firmware *fw = nic->fw;
1228 if (nic->flags & ich)
1244 if (nic->mac == mac_82559_D101M) {
1246 } else if (nic->mac == mac_82559_D101S) {
1248 } else if (nic->mac == mac_82551_F || nic->mac == mac_82551_10) {
1261 err = request_firmware(&fw, fw_name, &nic->pdev->dev);
1265 netif_err(nic, probe, nic->netdev,
1270 netif_info(nic, probe, nic->netdev,
1280 netif_err(nic, probe, nic->netdev,
1294 netif_err(nic, probe, nic->netdev,
1302 * to it in the nic */
1303 nic->fw = fw;
1307 static int e100_setup_ucode(struct nic *nic, struct cb *cb,
1337 static inline int e100_load_ucode_wait(struct nic *nic)
1341 struct cb *cb = nic->cb_to_clean;
1343 fw = e100_request_firmware(nic);
1348 if ((err = e100_exec_cb(nic, (void *)fw, e100_setup_ucode)))
1349 netif_err(nic, probe, nic->netdev,
1353 nic->cuc_cmd = cuc_start;
1356 e100_write_flush(nic);
1366 iowrite8(~0, &nic->csr->scb.stat_ack);
1370 netif_err(nic, probe, nic->netdev, "ucode load failed\n");
1377 static int e100_setup_iaaddr(struct nic *nic, struct cb *cb,
1381 memcpy(cb->u.iaaddr, nic->netdev->dev_addr, ETH_ALEN);
1385 static int e100_dump(struct nic *nic, struct cb *cb, struct sk_buff *skb)
1388 cb->u.dump_buffer_addr = cpu_to_le32(nic->dma_addr +
1393 static int e100_phy_check_without_mii(struct nic *nic)
1398 phy_type = (le16_to_cpu(nic->eeprom[eeprom_phy_iface]) >> 8) & 0x0f;
1410 netif_info(nic, probe, nic->netdev,
1413 nic->mdio_ctrl = mdio_ctrl_phy_mii_emulated;
1414 nic->mii.phy_id = 0; /* is this ok for an MII-less PHY? */
1417 * nic->flags |= ich;
1418 * nic->flags |= ich_10h_workaround; */
1433 static int e100_phy_init(struct nic *nic)
1435 struct net_device *netdev = nic->netdev;
1441 nic->mii.phy_id = (addr == 0) ? 1 : (addr == 1) ? 0 : addr;
1442 bmcr = mdio_read(netdev, nic->mii.phy_id, MII_BMCR);
1443 stat = mdio_read(netdev, nic->mii.phy_id, MII_BMSR);
1444 stat = mdio_read(netdev, nic->mii.phy_id, MII_BMSR);
1453 if (e100_phy_check_without_mii(nic))
1457 netif_err(nic, hw, nic->netdev,
1462 netif_printk(nic, hw, KERN_DEBUG, nic->netdev,
1463 "phy_addr = %d\n", nic->mii.phy_id);
1466 id_lo = mdio_read(netdev, nic->mii.phy_id, MII_PHYSID1);
1467 id_hi = mdio_read(netdev, nic->mii.phy_id, MII_PHYSID2);
1468 nic->phy = (u32)id_hi << 16 | (u32)id_lo;
1469 netif_printk(nic, hw, KERN_DEBUG, nic->netdev,
1470 "phy ID = 0x%08X\n", nic->phy);
1474 if (addr != nic->mii.phy_id) {
1476 } else if (nic->phy != phy_82552_v) {
1487 if (nic->phy == phy_82552_v)
1488 mdio_write(netdev, nic->mii.phy_id, MII_BMCR,
1493 if ((nic->phy & NCS_PHY_MODEL_MASK) == phy_nsc_tx) {
1495 cong = mdio_read(netdev, nic->mii.phy_id, MII_NSC_CONG);
1498 mdio_write(netdev, nic->mii.phy_id, MII_NSC_CONG, cong);
1501 if (nic->phy == phy_82552_v) {
1502 u16 advert = mdio_read(netdev, nic->mii.phy_id, MII_ADVERTISE);
1505 nic->mdio_ctrl = mdio_ctrl_phy_82552_v;
1509 mdio_write(netdev, nic->mii.phy_id, MII_ADVERTISE, advert);
1512 bmcr = mdio_read(netdev, nic->mii.phy_id, MII_BMCR);
1514 mdio_write(netdev, nic->mii.phy_id, MII_BMCR, bmcr);
1515 } else if ((nic->mac >= mac_82550_D102) || ((nic->flags & ich) &&
1516 (mdio_read(netdev, nic->mii.phy_id, MII_TPISTATUS) & 0x8000) &&
1517 (le16_to_cpu(nic->eeprom[eeprom_cnfg_mdix]) & eeprom_mdix_enabled))) {
1519 mdio_write(netdev, nic->mii.phy_id, MII_NCONFIG,
1520 nic->mii.force_media ? 0 : NCONFIG_AUTO_SWITCH);
1526 static int e100_hw_init(struct nic *nic)
1530 e100_hw_reset(nic);
1532 netif_err(nic, hw, nic->netdev, "e100_hw_init\n");
1533 if ((err = e100_self_test(nic)))
1536 if ((err = e100_phy_init(nic)))
1538 if ((err = e100_exec_cmd(nic, cuc_load_base, 0)))
1540 if ((err = e100_exec_cmd(nic, ruc_load_base, 0)))
1542 if ((err = e100_load_ucode_wait(nic)))
1544 if ((err = e100_exec_cb(nic, NULL, e100_configure)))
1546 if ((err = e100_exec_cb(nic, NULL, e100_setup_iaaddr)))
1548 if ((err = e100_exec_cmd(nic, cuc_dump_addr,
1549 nic->dma_addr + offsetof(struct mem, stats))))
1551 if ((err = e100_exec_cmd(nic, cuc_dump_reset, 0)))
1554 e100_disable_irq(nic);
1559 static int e100_multi(struct nic *nic, struct cb *cb, struct sk_buff *skb)
1561 struct net_device *netdev = nic->netdev;
1579 struct nic *nic = netdev_priv(netdev);
1581 netif_printk(nic, hw, KERN_DEBUG, nic->netdev,
1586 nic->flags |= promiscuous;
1588 nic->flags &= ~promiscuous;
1592 nic->flags |= multicast_all;
1594 nic->flags &= ~multicast_all;
1596 e100_exec_cb(nic, NULL, e100_configure);
1597 e100_exec_cb(nic, NULL, e100_multi);
1600 static void e100_update_stats(struct nic *nic)
1602 struct net_device *dev = nic->netdev;
1604 struct stats *s = &nic->mem->stats;
1605 __le32 *complete = (nic->mac < mac_82558_D101_A4) ? &s->fc_xmt_pause :
1606 (nic->mac < mac_82559_D101M) ? (__le32 *)&s->xmt_tco_frames :
1615 nic->tx_frames = le32_to_cpu(s->tx_good_frames);
1616 nic->tx_collisions = le32_to_cpu(s->tx_total_collisions);
1621 ns->collisions += nic->tx_collisions;
1624 nic->rx_short_frame_errors +=
1626 ns->rx_length_errors = nic->rx_short_frame_errors +
1627 nic->rx_over_length_errors;
1637 nic->tx_deferred += le32_to_cpu(s->tx_deferred);
1638 nic->tx_single_collisions +=
1640 nic->tx_multiple_collisions +=
1642 if (nic->mac >= mac_82558_D101_A4) {
1643 nic->tx_fc_pause += le32_to_cpu(s->fc_xmt_pause);
1644 nic->rx_fc_pause += le32_to_cpu(s->fc_rcv_pause);
1645 nic->rx_fc_unsupported +=
1647 if (nic->mac >= mac_82559_D101M) {
1648 nic->tx_tco_frames +=
1650 nic->rx_tco_frames +=
1657 if (e100_exec_cmd(nic, cuc_dump_reset, 0))
1658 netif_printk(nic, tx_err, KERN_DEBUG, nic->netdev,
1662 static void e100_adjust_adaptive_ifs(struct nic *nic, int speed, int duplex)
1668 u32 prev = nic->adaptive_ifs;
1671 if ((nic->tx_frames / 32 < nic->tx_collisions) &&
1672 (nic->tx_frames > min_frames)) {
1673 if (nic->adaptive_ifs < 60)
1674 nic->adaptive_ifs += 5;
1675 } else if (nic->tx_frames < min_frames) {
1676 if (nic->adaptive_ifs >= 5)
1677 nic->adaptive_ifs -= 5;
1679 if (nic->adaptive_ifs != prev)
1680 e100_exec_cb(nic, NULL, e100_configure);
1686 struct nic *nic = from_timer(nic, t, watchdog);
1690 netif_printk(nic, timer, KERN_DEBUG, nic->netdev,
1695 mii_ethtool_gset(&nic->mii, &cmd);
1698 if (mii_link_ok(&nic->mii) && !netif_carrier_ok(nic->netdev)) {
1699 netdev_info(nic->netdev, "NIC Link is Up %u Mbps %s Duplex\n",
1702 } else if (!mii_link_ok(&nic->mii) && netif_carrier_ok(nic->netdev)) {
1703 netdev_info(nic->netdev, "NIC Link is Down\n");
1706 mii_check_link(&nic->mii);
1713 spin_lock_irq(&nic->cmd_lock);
1714 iowrite8(ioread8(&nic->csr->scb.cmd_hi) | irq_sw_gen,&nic->csr->scb.cmd_hi);
1715 e100_write_flush(nic);
1716 spin_unlock_irq(&nic->cmd_lock);
1718 e100_update_stats(nic);
1719 e100_adjust_adaptive_ifs(nic, speed, cmd.duplex);
1721 if (nic->mac <= mac_82557_D100_C)
1723 e100_set_multicast_list(nic->netdev);
1725 if (nic->flags & ich && speed == SPEED_10 && cmd.duplex == DUPLEX_HALF)
1727 nic->flags |= ich_10h_workaround;
1729 nic->flags &= ~ich_10h_workaround;
1731 mod_timer(&nic->watchdog,
1735 static int e100_xmit_prepare(struct nic *nic, struct cb *cb,
1739 cb->command = nic->tx_command;
1741 dma_addr = dma_map_single(&nic->pdev->dev, skb->data, skb->len,
1744 if (dma_mapping_error(&nic->pdev->dev, dma_addr))
1757 if ((nic->cbs_avail & ~15) == nic->cbs_avail)
1761 cb->u.tcb.threshold = nic->tx_threshold;
1772 struct nic *nic = netdev_priv(netdev);
1775 if (nic->flags & ich_10h_workaround) {
1779 if (e100_exec_cmd(nic, cuc_nop, 0))
1780 netif_printk(nic, tx_err, KERN_DEBUG, nic->netdev,
1785 err = e100_exec_cb(nic, skb, e100_xmit_prepare);
1790 netif_printk(nic, tx_err, KERN_DEBUG, nic->netdev,
1796 netif_printk(nic, tx_err, KERN_DEBUG, nic->netdev,
1805 static int e100_tx_clean(struct nic *nic)
1807 struct net_device *dev = nic->netdev;
1811 spin_lock(&nic->cb_lock);
1814 for (cb = nic->cb_to_clean;
1816 cb = nic->cb_to_clean = cb->next) {
1818 netif_printk(nic, tx_done, KERN_DEBUG, nic->netdev,
1820 (int)(((void*)cb - (void*)nic->cbs)/sizeof(struct cb)),
1827 dma_unmap_single(&nic->pdev->dev,
1836 nic->cbs_avail++;
1839 spin_unlock(&nic->cb_lock);
1842 if (unlikely(tx_cleaned && netif_queue_stopped(nic->netdev)))
1843 netif_wake_queue(nic->netdev);
1848 static void e100_clean_cbs(struct nic *nic)
1850 if (nic->cbs) {
1851 while (nic->cbs_avail != nic->params.cbs.count) {
1852 struct cb *cb = nic->cb_to_clean;
1854 dma_unmap_single(&nic->pdev->dev,
1860 nic->cb_to_clean = nic->cb_to_clean->next;
1861 nic->cbs_avail++;
1863 dma_pool_free(nic->cbs_pool, nic->cbs, nic->cbs_dma_addr);
1864 nic->cbs = NULL;
1865 nic->cbs_avail = 0;
1867 nic->cuc_cmd = cuc_start;
1868 nic->cb_to_use = nic->cb_to_send = nic->cb_to_clean =
1869 nic->cbs;
1872 static int e100_alloc_cbs(struct nic *nic)
1875 unsigned int i, count = nic->params.cbs.count;
1877 nic->cuc_cmd = cuc_start;
1878 nic->cb_to_use = nic->cb_to_send = nic->cb_to_clean = NULL;
1879 nic->cbs_avail = 0;
1881 nic->cbs = dma_pool_zalloc(nic->cbs_pool, GFP_KERNEL,
1882 &nic->cbs_dma_addr);
1883 if (!nic->cbs)
1886 for (cb = nic->cbs, i = 0; i < count; cb++, i++) {
1887 cb->next = (i + 1 < count) ? cb + 1 : nic->cbs;
1888 cb->prev = (i == 0) ? nic->cbs + count - 1 : cb - 1;
1890 cb->dma_addr = nic->cbs_dma_addr + i * sizeof(struct cb);
1891 cb->link = cpu_to_le32(nic->cbs_dma_addr +
1895 nic->cb_to_use = nic->cb_to_send = nic->cb_to_clean = nic->cbs;
1896 nic->cbs_avail = count;
1901 static inline void e100_start_receiver(struct nic *nic, struct rx *rx)
1903 if (!nic->rxs) return;
1904 if (RU_SUSPENDED != nic->ru_running) return;
1907 if (!rx) rx = nic->rxs;
1911 e100_exec_cmd(nic, ruc_start, rx->dma_addr);
1912 nic->ru_running = RU_RUNNING;
1917 static int e100_rx_alloc_skb(struct nic *nic, struct rx *rx)
1919 if (!(rx->skb = netdev_alloc_skb_ip_align(nic->netdev, RFD_BUF_LEN)))
1923 skb_copy_to_linear_data(rx->skb, &nic->blank_rfd, sizeof(struct rfd));
1924 rx->dma_addr = dma_map_single(&nic->pdev->dev, rx->skb->data,
1927 if (dma_mapping_error(&nic->pdev->dev, rx->dma_addr)) {
1940 dma_sync_single_for_device(&nic->pdev->dev,
1949 static int e100_rx_indicate(struct nic *nic, struct rx *rx,
1952 struct net_device *dev = nic->netdev;
1962 dma_sync_single_for_cpu(&nic->pdev->dev, rx->dma_addr,
1966 netif_printk(nic, rx_status, KERN_DEBUG, nic->netdev,
1978 (RU_RUNNING == nic->ru_running))
1980 if (ioread8(&nic->csr->scb.status) & rus_no_res)
1981 nic->ru_running = RU_SUSPENDED;
1982 dma_sync_single_for_device(&nic->pdev->dev, rx->dma_addr,
1996 dma_unmap_single(&nic->pdev->dev, rx->dma_addr, RFD_BUF_LEN,
2006 (RU_RUNNING == nic->ru_running)) {
2008 if (ioread8(&nic->csr->scb.status) & rus_no_res)
2009 nic->ru_running = RU_SUSPENDED;
2015 skb->protocol = eth_type_trans(skb, nic->netdev);
2023 nic->rx_over_length_errors++;
2032 nic->rx_over_length_errors++;
2048 static void e100_rx_clean(struct nic *nic, unsigned int *work_done,
2057 for (rx = nic->rx_to_clean; rx->skb; rx = nic->rx_to_clean = rx->next) {
2058 err = e100_rx_indicate(nic, rx, work_done, work_to_do);
2071 if (-EAGAIN != err && RU_SUSPENDED == nic->ru_running)
2074 old_before_last_rx = nic->rx_to_use->prev->prev;
2078 for (rx = nic->rx_to_use; !rx->skb; rx = nic->rx_to_use = rx->next) {
2079 if (unlikely(e100_rx_alloc_skb(nic, rx)))
2083 new_before_last_rx = nic->rx_to_use->prev->prev;
2098 dma_sync_single_for_device(&nic->pdev->dev,
2107 dma_sync_single_for_device(&nic->pdev->dev,
2113 dma_sync_single_for_device(&nic->pdev->dev,
2121 iowrite8(stat_ack_rnr, &nic->csr->scb.stat_ack);
2122 e100_start_receiver(nic, nic->rx_to_clean);
2128 static void e100_rx_clean_list(struct nic *nic)
2131 unsigned int i, count = nic->params.rfds.count;
2133 nic->ru_running = RU_UNINITIALIZED;
2135 if (nic->rxs) {
2136 for (rx = nic->rxs, i = 0; i < count; rx++, i++) {
2138 dma_unmap_single(&nic->pdev->dev,
2144 kfree(nic->rxs);
2145 nic->rxs = NULL;
2148 nic->rx_to_use = nic->rx_to_clean = NULL;
2151 static int e100_rx_alloc_list(struct nic *nic)
2154 unsigned int i, count = nic->params.rfds.count;
2157 nic->rx_to_use = nic->rx_to_clean = NULL;
2158 nic->ru_running = RU_UNINITIALIZED;
2160 if (!(nic->rxs = kcalloc(count, sizeof(struct rx), GFP_KERNEL)))
2163 for (rx = nic->rxs, i = 0; i < count; rx++, i++) {
2164 rx->next = (i + 1 < count) ? rx + 1 : nic->rxs;
2165 rx->prev = (i == 0) ? nic->rxs + count - 1 : rx - 1;
2166 if (e100_rx_alloc_skb(nic, rx)) {
2167 e100_rx_clean_list(nic);
2178 rx = nic->rxs->prev->prev;
2182 dma_sync_single_for_device(&nic->pdev->dev, rx->dma_addr,
2185 nic->rx_to_use = nic->rx_to_clean = nic->rxs;
2186 nic->ru_running = RU_SUSPENDED;
2194 struct nic *nic = netdev_priv(netdev);
2195 u8 stat_ack = ioread8(&nic->csr->scb.stat_ack);
2197 netif_printk(nic, intr, KERN_DEBUG, nic->netdev,
2205 iowrite8(stat_ack, &nic->csr->scb.stat_ack);
2209 nic->ru_running = RU_SUSPENDED;
2211 if (likely(napi_schedule_prep(&nic->napi))) {
2212 e100_disable_irq(nic);
2213 __napi_schedule(&nic->napi);
2221 struct nic *nic = container_of(napi, struct nic, napi);
2224 e100_rx_clean(nic, &work_done, budget);
2225 e100_tx_clean(nic);
2233 e100_enable_irq(nic);
2241 struct nic *nic = netdev_priv(netdev);
2243 e100_disable_irq(nic);
2244 e100_intr(nic->pdev->irq, netdev);
2245 e100_tx_clean(nic);
2246 e100_enable_irq(nic);
2252 struct nic *nic = netdev_priv(netdev);
2259 e100_exec_cb(nic, NULL, e100_setup_iaaddr);
2264 static int e100_asf(struct nic *nic)
2267 return (nic->pdev->device >= 0x1050) && (nic->pdev->device <= 0x1057) &&
2268 (le16_to_cpu(nic->eeprom[eeprom_config_asf]) & eeprom_asf) &&
2269 !(le16_to_cpu(nic->eeprom[eeprom_config_asf]) & eeprom_gcl) &&
2270 ((le16_to_cpu(nic->eeprom[eeprom_smbus_addr]) & 0xFF) != 0xFE);
2273 static int e100_up(struct nic *nic)
2277 if ((err = e100_rx_alloc_list(nic)))
2279 if ((err = e100_alloc_cbs(nic)))
2281 if ((err = e100_hw_init(nic)))
2283 e100_set_multicast_list(nic->netdev);
2284 e100_start_receiver(nic, NULL);
2285 mod_timer(&nic->watchdog, jiffies);
2286 if ((err = request_irq(nic->pdev->irq, e100_intr, IRQF_SHARED,
2287 nic->netdev->name, nic->netdev)))
2289 netif_wake_queue(nic->netdev);
2290 napi_enable(&nic->napi);
2293 e100_enable_irq(nic);
2297 del_timer_sync(&nic->watchdog);
2299 e100_clean_cbs(nic);
2301 e100_rx_clean_list(nic);
2305 static void e100_down(struct nic *nic)
2308 napi_disable(&nic->napi);
2309 netif_stop_queue(nic->netdev);
2310 e100_hw_reset(nic);
2311 free_irq(nic->pdev->irq, nic->netdev);
2312 del_timer_sync(&nic->watchdog);
2313 netif_carrier_off(nic->netdev);
2314 e100_clean_cbs(nic);
2315 e100_rx_clean_list(nic);
2320 struct nic *nic = netdev_priv(netdev);
2324 schedule_work(&nic->tx_timeout_task);
2329 struct nic *nic = container_of(work, struct nic, tx_timeout_task);
2330 struct net_device *netdev = nic->netdev;
2332 netif_printk(nic, tx_err, KERN_DEBUG, nic->netdev,
2333 "scb.status=0x%02X\n", ioread8(&nic->csr->scb.status));
2343 static int e100_loopback_test(struct nic *nic, enum loopback loopback_mode)
2353 if ((err = e100_rx_alloc_list(nic)))
2355 if ((err = e100_alloc_cbs(nic)))
2359 if (nic->flags & ich && loopback_mode == lb_phy)
2362 nic->loopback = loopback_mode;
2363 if ((err = e100_hw_init(nic)))
2367 mdio_write(nic->netdev, nic->mii.phy_id, MII_BMCR,
2370 e100_start_receiver(nic, NULL);
2372 if (!(skb = netdev_alloc_skb(nic->netdev, ETH_DATA_LEN))) {
2378 e100_xmit_frame(skb, nic->netdev);
2382 dma_sync_single_for_cpu(&nic->pdev->dev, nic->rx_to_clean->dma_addr,
2385 if (memcmp(nic->rx_to_clean->skb->data + sizeof(struct rfd),
2390 mdio_write(nic->netdev, nic->mii.phy_id, MII_BMCR, 0);
2391 nic->loopback = lb_none;
2392 e100_clean_cbs(nic);
2393 e100_hw_reset(nic);
2395 e100_rx_clean_list(nic);
2407 struct nic *nic = netdev_priv(netdev);
2409 mii_ethtool_get_link_ksettings(&nic->mii, cmd);
2417 struct nic *nic = netdev_priv(netdev);
2420 mdio_write(netdev, nic->mii.phy_id, MII_BMCR, BMCR_RESET);
2421 err = mii_ethtool_set_link_ksettings(&nic->mii, cmd);
2422 e100_exec_cb(nic, NULL, e100_configure);
2430 struct nic *nic = netdev_priv(netdev);
2432 strscpy(info->bus_info, pci_name(nic->pdev),
2439 struct nic *nic = netdev_priv(netdev);
2444 return (1 + E100_PHY_REGS) * sizeof(u32) + sizeof(nic->mem->dump_buf);
2450 struct nic *nic = netdev_priv(netdev);
2454 regs->version = (1 << 24) | nic->pdev->revision;
2455 buff[0] = ioread8(&nic->csr->scb.cmd_hi) << 24 |
2456 ioread8(&nic->csr->scb.cmd_lo) << 16 |
2457 ioread16(&nic->csr->scb.status);
2463 buff[1 + i] = mdio_read(netdev, nic->mii.phy_id,
2465 memset(nic->mem->dump_buf, 0, sizeof(nic->mem->dump_buf));
2466 e100_exec_cb(nic, NULL, e100_dump);
2468 memcpy(&buff[1 + E100_PHY_REGS], nic->mem->dump_buf,
2469 sizeof(nic->mem->dump_buf));
2474 struct nic *nic = netdev_priv(netdev);
2475 wol->supported = (nic->mac >= mac_82558_D101_A4) ? WAKE_MAGIC : 0;
2476 wol->wolopts = (nic->flags & wol_magic) ? WAKE_MAGIC : 0;
2481 struct nic *nic = netdev_priv(netdev);
2484 !device_can_wakeup(&nic->pdev->dev))
2488 nic->flags |= wol_magic;
2490 nic->flags &= ~wol_magic;
2492 device_set_wakeup_enable(&nic->pdev->dev, wol->wolopts);
2494 e100_exec_cb(nic, NULL, e100_configure);
2501 struct nic *nic = netdev_priv(netdev);
2502 return nic->msg_enable;
2507 struct nic *nic = netdev_priv(netdev);
2508 nic->msg_enable = value;
2513 struct nic *nic = netdev_priv(netdev);
2514 return mii_nway_restart(&nic->mii);
2519 struct nic *nic = netdev_priv(netdev);
2520 return mii_link_ok(&nic->mii);
2525 struct nic *nic = netdev_priv(netdev);
2526 return nic->eeprom_wc << 1;
2533 struct nic *nic = netdev_priv(netdev);
2536 memcpy(bytes, &((u8 *)nic->eeprom)[eeprom->offset], eeprom->len);
2544 struct nic *nic = netdev_priv(netdev);
2549 memcpy(&((u8 *)nic->eeprom)[eeprom->offset], bytes, eeprom->len);
2551 return e100_eeprom_save(nic, eeprom->offset >> 1,
2560 struct nic *nic = netdev_priv(netdev);
2561 struct param_range *rfds = &nic->params.rfds;
2562 struct param_range *cbs = &nic->params.cbs;
2575 struct nic *nic = netdev_priv(netdev);
2576 struct param_range *rfds = &nic->params.rfds;
2577 struct param_range *cbs = &nic->params.cbs;
2583 e100_down(nic);
2588 netif_info(nic, drv, nic->netdev, "Ring Param settings: rx: %d, tx %d\n",
2591 e100_up(nic);
2609 struct nic *nic = netdev_priv(netdev);
2613 data[0] = !mii_link_ok(&nic->mii);
2614 data[1] = e100_eeprom_load(nic);
2618 mii_ethtool_gset(&nic->mii, &cmd);
2621 e100_down(nic);
2622 data[2] = e100_self_test(nic);
2623 data[3] = e100_loopback_test(nic, lb_mac);
2624 data[4] = e100_loopback_test(nic, lb_phy);
2627 mii_ethtool_sset(&nic->mii, &cmd);
2630 e100_up(nic);
2641 struct nic *nic = netdev_priv(netdev);
2648 u16 led_reg = (nic->phy == phy_82552_v) ? E100_82552_LED_OVERRIDE :
2657 leds = (nic->phy == phy_82552_v) ? E100_82552_LED_ON :
2658 (nic->mac < mac_82559_D101M) ? led_on_557 : led_on_559;
2662 leds = (nic->phy == phy_82552_v) ? E100_82552_LED_OFF : led_off;
2669 mdio_write(netdev, nic->mii.phy_id, led_reg, leds);
2704 struct nic *nic = netdev_priv(netdev);
2710 data[i++] = nic->tx_deferred;
2711 data[i++] = nic->tx_single_collisions;
2712 data[i++] = nic->tx_multiple_collisions;
2713 data[i++] = nic->tx_fc_pause;
2714 data[i++] = nic->rx_fc_pause;
2715 data[i++] = nic->rx_fc_unsupported;
2716 data[i++] = nic->tx_tco_frames;
2717 data[i++] = nic->rx_tco_frames;
2718 data[i++] = nic->rx_short_frame_errors;
2719 data[i++] = nic->rx_over_length_errors;
2761 struct nic *nic = netdev_priv(netdev);
2763 return generic_mii_ioctl(&nic->mii, if_mii(ifr), cmd, NULL);
2766 static int e100_alloc(struct nic *nic)
2768 nic->mem = dma_alloc_coherent(&nic->pdev->dev, sizeof(struct mem),
2769 &nic->dma_addr, GFP_KERNEL);
2770 return nic->mem ? 0 : -ENOMEM;
2773 static void e100_free(struct nic *nic)
2775 if (nic->mem) {
2776 dma_free_coherent(&nic->pdev->dev, sizeof(struct mem),
2777 nic->mem, nic->dma_addr);
2778 nic->mem = NULL;
2784 struct nic *nic = netdev_priv(netdev);
2788 if ((err = e100_up(nic)))
2789 netif_err(nic, ifup, nic->netdev, "Cannot open interface, aborting\n");
2802 struct nic *nic = netdev_priv(netdev);
2809 e100_exec_cb(nic, NULL, e100_configure);
2831 struct nic *nic;
2834 if (!(netdev = alloc_etherdev(sizeof(struct nic))))
2846 nic = netdev_priv(netdev);
2847 netif_napi_add_weight(netdev, &nic->napi, e100_poll, E100_NAPI_WEIGHT);
2848 nic->netdev = netdev;
2849 nic->pdev = pdev;
2850 nic->msg_enable = (1 << debug) - 1;
2851 nic->mdio_ctrl = mdio_ctrl_hw;
2855 netif_err(nic, probe, nic->netdev, "Cannot enable PCI device, aborting\n");
2860 netif_err(nic, probe, nic->netdev, "Cannot find proper PCI device base address, aborting\n");
2866 netif_err(nic, probe, nic->netdev, "Cannot obtain PCI resources, aborting\n");
2871 netif_err(nic, probe, nic->netdev, "No usable DMA configuration, aborting\n");
2878 netif_info(nic, probe, nic->netdev, "using i/o access mode\n");
2880 nic->csr = pci_iomap(pdev, (use_io ? 1 : 0), sizeof(struct csr));
2881 if (!nic->csr) {
2882 netif_err(nic, probe, nic->netdev, "Cannot map device registers, aborting\n");
2888 nic->flags |= ich;
2890 nic->flags &= ~ich;
2892 e100_get_defaults(nic);
2895 if (nic->mac < mac_82558_D101_A4)
2899 spin_lock_init(&nic->cb_lock);
2900 spin_lock_init(&nic->cmd_lock);
2901 spin_lock_init(&nic->mdio_lock);
2906 e100_hw_reset(nic);
2910 timer_setup(&nic->watchdog, e100_watchdog, 0);
2912 INIT_WORK(&nic->tx_timeout_task, e100_tx_timeout_task);
2914 if ((err = e100_alloc(nic))) {
2915 netif_err(nic, probe, nic->netdev, "Cannot alloc driver memory, aborting\n");
2919 if ((err = e100_eeprom_load(nic)))
2922 e100_phy_init(nic);
2924 eth_hw_addr_set(netdev, (u8 *)nic->eeprom);
2927 netif_err(nic, probe, nic->netdev, "Invalid MAC address from EEPROM, aborting\n");
2931 netif_err(nic, probe, nic->netdev, "Invalid MAC address from EEPROM, you MUST configure one.\n");
2936 if ((nic->mac >= mac_82558_D101_A4) &&
2937 (le16_to_cpu(nic->eeprom[eeprom_id]) & eeprom_id_wol)) {
2938 nic->flags |= wol_magic;
2947 netif_err(nic, probe, nic->netdev, "Cannot register net device, aborting\n");
2950 nic->cbs_pool = dma_pool_create(netdev->name,
2951 &nic->pdev->dev,
2952 nic->params.cbs.max * sizeof(struct cb),
2955 if (!nic->cbs_pool) {
2956 netif_err(nic, probe, nic->netdev, "Cannot create DMA pool, aborting\n");
2960 netif_info(nic, probe, nic->netdev,
2970 e100_free(nic);
2972 pci_iounmap(pdev, nic->csr);
2987 struct nic *nic = netdev_priv(netdev);
2989 e100_free(nic);
2990 pci_iounmap(pdev, nic->csr);
2991 dma_pool_destroy(nic->cbs_pool);
3004 struct nic *nic = netdev_priv(netdev);
3009 e100_down(nic);
3011 if ((nic->flags & wol_magic) | e100_asf(nic)) {
3013 if (nic->phy == phy_82552_v) {
3014 u16 smartspeed = mdio_read(netdev, nic->mii.phy_id,
3017 mdio_write(netdev, nic->mii.phy_id,
3052 struct nic *nic = netdev_priv(netdev);
3063 if (nic->phy == phy_82552_v) {
3064 u16 smartspeed = mdio_read(netdev, nic->mii.phy_id,
3067 mdio_write(netdev, nic->mii.phy_id,
3073 e100_up(nic);
3097 struct nic *nic = netdev_priv(netdev);
3105 e100_down(nic);
3121 struct nic *nic = netdev_priv(netdev);
3132 e100_hw_reset(nic);
3133 e100_phy_init(nic);
3148 struct nic *nic = netdev_priv(netdev);
3156 mod_timer(&nic->watchdog, jiffies);