Lines Matching refs:nic
540 struct nic { struct
545 u16 (*mdio_ctrl)(struct nic *nic, u32 addr, u32 dir, u32 reg, u16 data); argument
609 static inline void e100_write_flush(struct nic *nic) in e100_write_flush() argument
613 (void)ioread8(&nic->csr->scb.status); in e100_write_flush()
616 static void e100_enable_irq(struct nic *nic) in e100_enable_irq() argument
620 spin_lock_irqsave(&nic->cmd_lock, flags); in e100_enable_irq()
621 iowrite8(irq_mask_none, &nic->csr->scb.cmd_hi); in e100_enable_irq()
622 e100_write_flush(nic); in e100_enable_irq()
623 spin_unlock_irqrestore(&nic->cmd_lock, flags); in e100_enable_irq()
626 static void e100_disable_irq(struct nic *nic) in e100_disable_irq() argument
630 spin_lock_irqsave(&nic->cmd_lock, flags); in e100_disable_irq()
631 iowrite8(irq_mask_all, &nic->csr->scb.cmd_hi); in e100_disable_irq()
632 e100_write_flush(nic); in e100_disable_irq()
633 spin_unlock_irqrestore(&nic->cmd_lock, flags); in e100_disable_irq()
636 static void e100_hw_reset(struct nic *nic) in e100_hw_reset() argument
640 iowrite32(selective_reset, &nic->csr->port); in e100_hw_reset()
641 e100_write_flush(nic); udelay(20); in e100_hw_reset()
644 iowrite32(software_reset, &nic->csr->port); in e100_hw_reset()
645 e100_write_flush(nic); udelay(20); in e100_hw_reset()
648 e100_disable_irq(nic); in e100_hw_reset()
651 static int e100_self_test(struct nic *nic) in e100_self_test() argument
653 u32 dma_addr = nic->dma_addr + offsetof(struct mem, selftest); in e100_self_test()
658 nic->mem->selftest.signature = 0; in e100_self_test()
659 nic->mem->selftest.result = 0xFFFFFFFF; in e100_self_test()
661 iowrite32(selftest | dma_addr, &nic->csr->port); in e100_self_test()
662 e100_write_flush(nic); in e100_self_test()
667 e100_disable_irq(nic); in e100_self_test()
670 if (nic->mem->selftest.result != 0) { in e100_self_test()
671 netif_err(nic, hw, nic->netdev, in e100_self_test()
673 nic->mem->selftest.result); in e100_self_test()
676 if (nic->mem->selftest.signature == 0) { in e100_self_test()
677 netif_err(nic, hw, nic->netdev, "Self-test failed: timed out\n"); in e100_self_test()
684 static void e100_eeprom_write(struct nic *nic, u16 addr_len, u16 addr, __le16 data) in e100_eeprom_write() argument
700 iowrite8(eecs | eesk, &nic->csr->eeprom_ctrl_lo); in e100_eeprom_write()
701 e100_write_flush(nic); udelay(4); in e100_eeprom_write()
706 iowrite8(ctrl, &nic->csr->eeprom_ctrl_lo); in e100_eeprom_write()
707 e100_write_flush(nic); udelay(4); in e100_eeprom_write()
709 iowrite8(ctrl | eesk, &nic->csr->eeprom_ctrl_lo); in e100_eeprom_write()
710 e100_write_flush(nic); udelay(4); in e100_eeprom_write()
716 iowrite8(0, &nic->csr->eeprom_ctrl_lo); in e100_eeprom_write()
717 e100_write_flush(nic); udelay(4); in e100_eeprom_write()
722 static __le16 e100_eeprom_read(struct nic *nic, u16 *addr_len, u16 addr) in e100_eeprom_read() argument
732 iowrite8(eecs | eesk, &nic->csr->eeprom_ctrl_lo); in e100_eeprom_read()
733 e100_write_flush(nic); udelay(4); in e100_eeprom_read()
738 iowrite8(ctrl, &nic->csr->eeprom_ctrl_lo); in e100_eeprom_read()
739 e100_write_flush(nic); udelay(4); in e100_eeprom_read()
741 iowrite8(ctrl | eesk, &nic->csr->eeprom_ctrl_lo); in e100_eeprom_read()
742 e100_write_flush(nic); udelay(4); in e100_eeprom_read()
746 ctrl = ioread8(&nic->csr->eeprom_ctrl_lo); in e100_eeprom_read()
756 iowrite8(0, &nic->csr->eeprom_ctrl_lo); in e100_eeprom_read()
757 e100_write_flush(nic); udelay(4); in e100_eeprom_read()
763 static int e100_eeprom_load(struct nic *nic) in e100_eeprom_load() argument
768 e100_eeprom_read(nic, &addr_len, 0); in e100_eeprom_load()
769 nic->eeprom_wc = 1 << addr_len; in e100_eeprom_load()
771 for (addr = 0; addr < nic->eeprom_wc; addr++) { in e100_eeprom_load()
772 nic->eeprom[addr] = e100_eeprom_read(nic, &addr_len, addr); in e100_eeprom_load()
773 if (addr < nic->eeprom_wc - 1) in e100_eeprom_load()
774 checksum += le16_to_cpu(nic->eeprom[addr]); in e100_eeprom_load()
779 if (cpu_to_le16(0xBABA - checksum) != nic->eeprom[nic->eeprom_wc - 1]) { in e100_eeprom_load()
780 netif_err(nic, probe, nic->netdev, "EEPROM corrupted\n"); in e100_eeprom_load()
789 static int e100_eeprom_save(struct nic *nic, u16 start, u16 count) in e100_eeprom_save() argument
794 e100_eeprom_read(nic, &addr_len, 0); in e100_eeprom_save()
795 nic->eeprom_wc = 1 << addr_len; in e100_eeprom_save()
797 if (start + count >= nic->eeprom_wc) in e100_eeprom_save()
801 e100_eeprom_write(nic, addr_len, addr, nic->eeprom[addr]); in e100_eeprom_save()
805 for (addr = 0; addr < nic->eeprom_wc - 1; addr++) in e100_eeprom_save()
806 checksum += le16_to_cpu(nic->eeprom[addr]); in e100_eeprom_save()
807 nic->eeprom[nic->eeprom_wc - 1] = cpu_to_le16(0xBABA - checksum); in e100_eeprom_save()
808 e100_eeprom_write(nic, addr_len, nic->eeprom_wc - 1, in e100_eeprom_save()
809 nic->eeprom[nic->eeprom_wc - 1]); in e100_eeprom_save()
816 static int e100_exec_cmd(struct nic *nic, u8 cmd, dma_addr_t dma_addr) in e100_exec_cmd() argument
822 spin_lock_irqsave(&nic->cmd_lock, flags); in e100_exec_cmd()
826 if (likely(!ioread8(&nic->csr->scb.cmd_lo))) in e100_exec_cmd()
838 iowrite32(dma_addr, &nic->csr->scb.gen_ptr); in e100_exec_cmd()
839 iowrite8(cmd, &nic->csr->scb.cmd_lo); in e100_exec_cmd()
842 spin_unlock_irqrestore(&nic->cmd_lock, flags); in e100_exec_cmd()
847 static int e100_exec_cb(struct nic *nic, struct sk_buff *skb, in e100_exec_cb() argument
848 int (*cb_prepare)(struct nic *, struct cb *, struct sk_buff *)) in e100_exec_cb() argument
854 spin_lock_irqsave(&nic->cb_lock, flags); in e100_exec_cb()
856 if (unlikely(!nic->cbs_avail)) { in e100_exec_cb()
861 cb = nic->cb_to_use; in e100_exec_cb()
862 nic->cb_to_use = cb->next; in e100_exec_cb()
863 nic->cbs_avail--; in e100_exec_cb()
866 err = cb_prepare(nic, cb, skb); in e100_exec_cb()
870 if (unlikely(!nic->cbs_avail)) in e100_exec_cb()
880 while (nic->cb_to_send != nic->cb_to_use) { in e100_exec_cb()
881 if (unlikely(e100_exec_cmd(nic, nic->cuc_cmd, in e100_exec_cb()
882 nic->cb_to_send->dma_addr))) { in e100_exec_cb()
890 schedule_work(&nic->tx_timeout_task); in e100_exec_cb()
894 nic->cuc_cmd = cuc_resume; in e100_exec_cb()
895 nic->cb_to_send = nic->cb_to_send->next; in e100_exec_cb()
900 spin_unlock_irqrestore(&nic->cb_lock, flags); in e100_exec_cb()
907 struct nic *nic = netdev_priv(netdev); in mdio_read() local
908 return nic->mdio_ctrl(nic, addr, mdi_read, reg, 0); in mdio_read()
913 struct nic *nic = netdev_priv(netdev); in mdio_write() local
915 nic->mdio_ctrl(nic, addr, mdi_write, reg, data); in mdio_write()
919 static u16 mdio_ctrl_hw(struct nic *nic, u32 addr, u32 dir, u32 reg, u16 data) in mdio_ctrl_hw() argument
932 spin_lock_irqsave(&nic->mdio_lock, flags); in mdio_ctrl_hw()
934 if (ioread32(&nic->csr->mdi_ctrl) & mdi_ready) in mdio_ctrl_hw()
939 netdev_err(nic->netdev, "e100.mdio_ctrl won't go Ready\n"); in mdio_ctrl_hw()
940 spin_unlock_irqrestore(&nic->mdio_lock, flags); in mdio_ctrl_hw()
943 iowrite32((reg << 16) | (addr << 21) | dir | data, &nic->csr->mdi_ctrl); in mdio_ctrl_hw()
947 if ((data_out = ioread32(&nic->csr->mdi_ctrl)) & mdi_ready) in mdio_ctrl_hw()
950 spin_unlock_irqrestore(&nic->mdio_lock, flags); in mdio_ctrl_hw()
951 netif_printk(nic, hw, KERN_DEBUG, nic->netdev, in mdio_ctrl_hw()
959 static u16 mdio_ctrl_phy_82552_v(struct nic *nic, in mdio_ctrl_phy_82552_v() argument
967 u16 advert = mdio_read(nic->netdev, nic->mii.phy_id, in mdio_ctrl_phy_82552_v()
980 return mdio_ctrl_hw(nic, addr, dir, reg, data); in mdio_ctrl_phy_82552_v()
989 static u16 mdio_ctrl_phy_mii_emulated(struct nic *nic, in mdio_ctrl_phy_mii_emulated() argument
1014 netif_printk(nic, hw, KERN_DEBUG, nic->netdev, in mdio_ctrl_phy_mii_emulated()
1023 netif_printk(nic, hw, KERN_DEBUG, nic->netdev, in mdio_ctrl_phy_mii_emulated()
1031 static inline int e100_phy_supports_mii(struct nic *nic) in e100_phy_supports_mii() argument
1036 return (nic->mdio_ctrl != mdio_ctrl_phy_mii_emulated); in e100_phy_supports_mii()
1039 static void e100_get_defaults(struct nic *nic) in e100_get_defaults() argument
1045 nic->mac = (nic->flags & ich) ? mac_82559_D101M : nic->pdev->revision; in e100_get_defaults()
1046 if (nic->mac == mac_unknown) in e100_get_defaults()
1047 nic->mac = mac_82557_D100_A; in e100_get_defaults()
1049 nic->params.rfds = rfds; in e100_get_defaults()
1050 nic->params.cbs = cbs; in e100_get_defaults()
1053 nic->tx_threshold = 0xE0; in e100_get_defaults()
1056 nic->tx_command = cpu_to_le16(cb_tx | cb_tx_sf | in e100_get_defaults()
1057 ((nic->mac >= mac_82558_D101_A4) ? cb_cid : cb_i)); in e100_get_defaults()
1060 nic->blank_rfd.command = 0; in e100_get_defaults()
1061 nic->blank_rfd.rbd = cpu_to_le32(0xFFFFFFFF); in e100_get_defaults()
1062 nic->blank_rfd.size = cpu_to_le16(VLAN_ETH_FRAME_LEN + ETH_FCS_LEN); in e100_get_defaults()
1065 nic->mii.phy_id_mask = 0x1F; in e100_get_defaults()
1066 nic->mii.reg_num_mask = 0x1F; in e100_get_defaults()
1067 nic->mii.dev = nic->netdev; in e100_get_defaults()
1068 nic->mii.mdio_read = mdio_read; in e100_get_defaults()
1069 nic->mii.mdio_write = mdio_write; in e100_get_defaults()
1072 static int e100_configure(struct nic *nic, struct cb *cb, struct sk_buff *skb) in e100_configure() argument
1076 struct net_device *netdev = nic->netdev; in e100_configure()
1089 if (e100_phy_supports_mii(nic)) in e100_configure()
1108 config->adaptive_ifs = nic->adaptive_ifs; in e100_configure()
1109 config->loopback = nic->loopback; in e100_configure()
1111 if (nic->mii.force_media && nic->mii.full_duplex) in e100_configure()
1114 if (nic->flags & promiscuous || nic->loopback) { in e100_configure()
1123 if (nic->flags & multicast_all) in e100_configure()
1127 if (netif_running(nic->netdev) || !(nic->flags & wol_magic)) in e100_configure()
1130 if (nic->mac >= mac_82558_D101_A4) { in e100_configure()
1135 if (nic->mac >= mac_82559_D101M) { in e100_configure()
1138 if (nic->mac >= mac_82551_10) { in e100_configure()
1153 netif_printk(nic, hw, KERN_DEBUG, nic->netdev, "[00-07]=%8ph\n", in e100_configure()
1155 netif_printk(nic, hw, KERN_DEBUG, nic->netdev, "[08-15]=%8ph\n", in e100_configure()
1157 netif_printk(nic, hw, KERN_DEBUG, nic->netdev, "[16-23]=%8ph\n", in e100_configure()
1222 static const struct firmware *e100_request_firmware(struct nic *nic) in e100_request_firmware() argument
1225 const struct firmware *fw = nic->fw; in e100_request_firmware()
1231 if (nic->flags & ich) in e100_request_firmware()
1247 if (nic->mac == mac_82559_D101M) { in e100_request_firmware()
1249 } else if (nic->mac == mac_82559_D101S) { in e100_request_firmware()
1251 } else if (nic->mac == mac_82551_F || nic->mac == mac_82551_10) { in e100_request_firmware()
1264 err = request_firmware(&fw, fw_name, &nic->pdev->dev); in e100_request_firmware()
1268 netif_err(nic, probe, nic->netdev, in e100_request_firmware()
1273 netif_info(nic, probe, nic->netdev, in e100_request_firmware()
1283 netif_err(nic, probe, nic->netdev, in e100_request_firmware()
1297 netif_err(nic, probe, nic->netdev, in e100_request_firmware()
1306 nic->fw = fw; in e100_request_firmware()
1310 static int e100_setup_ucode(struct nic *nic, struct cb *cb, in e100_setup_ucode() argument
1340 static inline int e100_load_ucode_wait(struct nic *nic) in e100_load_ucode_wait() argument
1344 struct cb *cb = nic->cb_to_clean; in e100_load_ucode_wait()
1346 fw = e100_request_firmware(nic); in e100_load_ucode_wait()
1351 if ((err = e100_exec_cb(nic, (void *)fw, e100_setup_ucode))) in e100_load_ucode_wait()
1352 netif_err(nic, probe, nic->netdev, in e100_load_ucode_wait()
1356 nic->cuc_cmd = cuc_start; in e100_load_ucode_wait()
1359 e100_write_flush(nic); in e100_load_ucode_wait()
1369 iowrite8(~0, &nic->csr->scb.stat_ack); in e100_load_ucode_wait()
1373 netif_err(nic, probe, nic->netdev, "ucode load failed\n"); in e100_load_ucode_wait()
1380 static int e100_setup_iaaddr(struct nic *nic, struct cb *cb, in e100_setup_iaaddr() argument
1384 memcpy(cb->u.iaaddr, nic->netdev->dev_addr, ETH_ALEN); in e100_setup_iaaddr()
1388 static int e100_dump(struct nic *nic, struct cb *cb, struct sk_buff *skb) in e100_dump() argument
1391 cb->u.dump_buffer_addr = cpu_to_le32(nic->dma_addr + in e100_dump()
1396 static int e100_phy_check_without_mii(struct nic *nic) in e100_phy_check_without_mii() argument
1401 phy_type = (nic->eeprom[eeprom_phy_iface] >> 8) & 0x0f; in e100_phy_check_without_mii()
1413 netif_info(nic, probe, nic->netdev, in e100_phy_check_without_mii()
1416 nic->mdio_ctrl = mdio_ctrl_phy_mii_emulated; in e100_phy_check_without_mii()
1417 nic->mii.phy_id = 0; /* is this ok for an MII-less PHY? */ in e100_phy_check_without_mii()
1437 static int e100_phy_init(struct nic *nic) in e100_phy_init() argument
1439 struct net_device *netdev = nic->netdev; in e100_phy_init()
1445 nic->mii.phy_id = (addr == 0) ? 1 : (addr == 1) ? 0 : addr; in e100_phy_init()
1446 bmcr = mdio_read(netdev, nic->mii.phy_id, MII_BMCR); in e100_phy_init()
1447 stat = mdio_read(netdev, nic->mii.phy_id, MII_BMSR); in e100_phy_init()
1448 stat = mdio_read(netdev, nic->mii.phy_id, MII_BMSR); in e100_phy_init()
1457 if (e100_phy_check_without_mii(nic)) in e100_phy_init()
1461 netif_err(nic, hw, nic->netdev, in e100_phy_init()
1466 netif_printk(nic, hw, KERN_DEBUG, nic->netdev, in e100_phy_init()
1467 "phy_addr = %d\n", nic->mii.phy_id); in e100_phy_init()
1470 id_lo = mdio_read(netdev, nic->mii.phy_id, MII_PHYSID1); in e100_phy_init()
1471 id_hi = mdio_read(netdev, nic->mii.phy_id, MII_PHYSID2); in e100_phy_init()
1472 nic->phy = (u32)id_hi << 16 | (u32)id_lo; in e100_phy_init()
1473 netif_printk(nic, hw, KERN_DEBUG, nic->netdev, in e100_phy_init()
1474 "phy ID = 0x%08X\n", nic->phy); in e100_phy_init()
1478 if (addr != nic->mii.phy_id) { in e100_phy_init()
1480 } else if (nic->phy != phy_82552_v) { in e100_phy_init()
1491 if (nic->phy == phy_82552_v) in e100_phy_init()
1492 mdio_write(netdev, nic->mii.phy_id, MII_BMCR, in e100_phy_init()
1497 if ((nic->phy & NCS_PHY_MODEL_MASK) == phy_nsc_tx) { in e100_phy_init()
1499 cong = mdio_read(netdev, nic->mii.phy_id, MII_NSC_CONG); in e100_phy_init()
1502 mdio_write(netdev, nic->mii.phy_id, MII_NSC_CONG, cong); in e100_phy_init()
1505 if (nic->phy == phy_82552_v) { in e100_phy_init()
1506 u16 advert = mdio_read(netdev, nic->mii.phy_id, MII_ADVERTISE); in e100_phy_init()
1509 nic->mdio_ctrl = mdio_ctrl_phy_82552_v; in e100_phy_init()
1513 mdio_write(netdev, nic->mii.phy_id, MII_ADVERTISE, advert); in e100_phy_init()
1516 bmcr = mdio_read(netdev, nic->mii.phy_id, MII_BMCR); in e100_phy_init()
1518 mdio_write(netdev, nic->mii.phy_id, MII_BMCR, bmcr); in e100_phy_init()
1519 } else if ((nic->mac >= mac_82550_D102) || ((nic->flags & ich) && in e100_phy_init()
1520 (mdio_read(netdev, nic->mii.phy_id, MII_TPISTATUS) & 0x8000) && in e100_phy_init()
1521 (nic->eeprom[eeprom_cnfg_mdix] & eeprom_mdix_enabled))) { in e100_phy_init()
1523 mdio_write(netdev, nic->mii.phy_id, MII_NCONFIG, in e100_phy_init()
1524 nic->mii.force_media ? 0 : NCONFIG_AUTO_SWITCH); in e100_phy_init()
1530 static int e100_hw_init(struct nic *nic) in e100_hw_init() argument
1534 e100_hw_reset(nic); in e100_hw_init()
1536 netif_err(nic, hw, nic->netdev, "e100_hw_init\n"); in e100_hw_init()
1537 if (!in_interrupt() && (err = e100_self_test(nic))) in e100_hw_init()
1540 if ((err = e100_phy_init(nic))) in e100_hw_init()
1542 if ((err = e100_exec_cmd(nic, cuc_load_base, 0))) in e100_hw_init()
1544 if ((err = e100_exec_cmd(nic, ruc_load_base, 0))) in e100_hw_init()
1546 if ((err = e100_load_ucode_wait(nic))) in e100_hw_init()
1548 if ((err = e100_exec_cb(nic, NULL, e100_configure))) in e100_hw_init()
1550 if ((err = e100_exec_cb(nic, NULL, e100_setup_iaaddr))) in e100_hw_init()
1552 if ((err = e100_exec_cmd(nic, cuc_dump_addr, in e100_hw_init()
1553 nic->dma_addr + offsetof(struct mem, stats)))) in e100_hw_init()
1555 if ((err = e100_exec_cmd(nic, cuc_dump_reset, 0))) in e100_hw_init()
1558 e100_disable_irq(nic); in e100_hw_init()
1563 static int e100_multi(struct nic *nic, struct cb *cb, struct sk_buff *skb) in e100_multi() argument
1565 struct net_device *netdev = nic->netdev; in e100_multi()
1583 struct nic *nic = netdev_priv(netdev); in e100_set_multicast_list() local
1585 netif_printk(nic, hw, KERN_DEBUG, nic->netdev, in e100_set_multicast_list()
1590 nic->flags |= promiscuous; in e100_set_multicast_list()
1592 nic->flags &= ~promiscuous; in e100_set_multicast_list()
1596 nic->flags |= multicast_all; in e100_set_multicast_list()
1598 nic->flags &= ~multicast_all; in e100_set_multicast_list()
1600 e100_exec_cb(nic, NULL, e100_configure); in e100_set_multicast_list()
1601 e100_exec_cb(nic, NULL, e100_multi); in e100_set_multicast_list()
1604 static void e100_update_stats(struct nic *nic) in e100_update_stats() argument
1606 struct net_device *dev = nic->netdev; in e100_update_stats()
1608 struct stats *s = &nic->mem->stats; in e100_update_stats()
1609 __le32 *complete = (nic->mac < mac_82558_D101_A4) ? &s->fc_xmt_pause : in e100_update_stats()
1610 (nic->mac < mac_82559_D101M) ? (__le32 *)&s->xmt_tco_frames : in e100_update_stats()
1619 nic->tx_frames = le32_to_cpu(s->tx_good_frames); in e100_update_stats()
1620 nic->tx_collisions = le32_to_cpu(s->tx_total_collisions); in e100_update_stats()
1625 ns->collisions += nic->tx_collisions; in e100_update_stats()
1628 nic->rx_short_frame_errors += in e100_update_stats()
1630 ns->rx_length_errors = nic->rx_short_frame_errors + in e100_update_stats()
1631 nic->rx_over_length_errors; in e100_update_stats()
1641 nic->tx_deferred += le32_to_cpu(s->tx_deferred); in e100_update_stats()
1642 nic->tx_single_collisions += in e100_update_stats()
1644 nic->tx_multiple_collisions += in e100_update_stats()
1646 if (nic->mac >= mac_82558_D101_A4) { in e100_update_stats()
1647 nic->tx_fc_pause += le32_to_cpu(s->fc_xmt_pause); in e100_update_stats()
1648 nic->rx_fc_pause += le32_to_cpu(s->fc_rcv_pause); in e100_update_stats()
1649 nic->rx_fc_unsupported += in e100_update_stats()
1651 if (nic->mac >= mac_82559_D101M) { in e100_update_stats()
1652 nic->tx_tco_frames += in e100_update_stats()
1654 nic->rx_tco_frames += in e100_update_stats()
1661 if (e100_exec_cmd(nic, cuc_dump_reset, 0)) in e100_update_stats()
1662 netif_printk(nic, tx_err, KERN_DEBUG, nic->netdev, in e100_update_stats()
1666 static void e100_adjust_adaptive_ifs(struct nic *nic, int speed, int duplex) in e100_adjust_adaptive_ifs() argument
1672 u32 prev = nic->adaptive_ifs; in e100_adjust_adaptive_ifs()
1675 if ((nic->tx_frames / 32 < nic->tx_collisions) && in e100_adjust_adaptive_ifs()
1676 (nic->tx_frames > min_frames)) { in e100_adjust_adaptive_ifs()
1677 if (nic->adaptive_ifs < 60) in e100_adjust_adaptive_ifs()
1678 nic->adaptive_ifs += 5; in e100_adjust_adaptive_ifs()
1679 } else if (nic->tx_frames < min_frames) { in e100_adjust_adaptive_ifs()
1680 if (nic->adaptive_ifs >= 5) in e100_adjust_adaptive_ifs()
1681 nic->adaptive_ifs -= 5; in e100_adjust_adaptive_ifs()
1683 if (nic->adaptive_ifs != prev) in e100_adjust_adaptive_ifs()
1684 e100_exec_cb(nic, NULL, e100_configure); in e100_adjust_adaptive_ifs()
1690 struct nic *nic = from_timer(nic, t, watchdog); in e100_watchdog() local
1694 netif_printk(nic, timer, KERN_DEBUG, nic->netdev, in e100_watchdog()
1699 mii_ethtool_gset(&nic->mii, &cmd); in e100_watchdog()
1702 if (mii_link_ok(&nic->mii) && !netif_carrier_ok(nic->netdev)) { in e100_watchdog()
1703 netdev_info(nic->netdev, "NIC Link is Up %u Mbps %s Duplex\n", in e100_watchdog()
1706 } else if (!mii_link_ok(&nic->mii) && netif_carrier_ok(nic->netdev)) { in e100_watchdog()
1707 netdev_info(nic->netdev, "NIC Link is Down\n"); in e100_watchdog()
1710 mii_check_link(&nic->mii); in e100_watchdog()
1717 spin_lock_irq(&nic->cmd_lock); in e100_watchdog()
1718 iowrite8(ioread8(&nic->csr->scb.cmd_hi) | irq_sw_gen,&nic->csr->scb.cmd_hi); in e100_watchdog()
1719 e100_write_flush(nic); in e100_watchdog()
1720 spin_unlock_irq(&nic->cmd_lock); in e100_watchdog()
1722 e100_update_stats(nic); in e100_watchdog()
1723 e100_adjust_adaptive_ifs(nic, speed, cmd.duplex); in e100_watchdog()
1725 if (nic->mac <= mac_82557_D100_C) in e100_watchdog()
1727 e100_set_multicast_list(nic->netdev); in e100_watchdog()
1729 if (nic->flags & ich && speed == SPEED_10 && cmd.duplex == DUPLEX_HALF) in e100_watchdog()
1731 nic->flags |= ich_10h_workaround; in e100_watchdog()
1733 nic->flags &= ~ich_10h_workaround; in e100_watchdog()
1735 mod_timer(&nic->watchdog, in e100_watchdog()
1739 static int e100_xmit_prepare(struct nic *nic, struct cb *cb, in e100_xmit_prepare() argument
1743 cb->command = nic->tx_command; in e100_xmit_prepare()
1745 dma_addr = pci_map_single(nic->pdev, in e100_xmit_prepare()
1748 if (pci_dma_mapping_error(nic->pdev, dma_addr)) { in e100_xmit_prepare()
1764 if ((nic->cbs_avail & ~15) == nic->cbs_avail) in e100_xmit_prepare()
1768 cb->u.tcb.threshold = nic->tx_threshold; in e100_xmit_prepare()
1779 struct nic *nic = netdev_priv(netdev); in e100_xmit_frame() local
1782 if (nic->flags & ich_10h_workaround) { in e100_xmit_frame()
1786 if (e100_exec_cmd(nic, cuc_nop, 0)) in e100_xmit_frame()
1787 netif_printk(nic, tx_err, KERN_DEBUG, nic->netdev, in e100_xmit_frame()
1792 err = e100_exec_cb(nic, skb, e100_xmit_prepare); in e100_xmit_frame()
1797 netif_printk(nic, tx_err, KERN_DEBUG, nic->netdev, in e100_xmit_frame()
1803 netif_printk(nic, tx_err, KERN_DEBUG, nic->netdev, in e100_xmit_frame()
1812 static int e100_tx_clean(struct nic *nic) in e100_tx_clean() argument
1814 struct net_device *dev = nic->netdev; in e100_tx_clean()
1818 spin_lock(&nic->cb_lock); in e100_tx_clean()
1821 for (cb = nic->cb_to_clean; in e100_tx_clean()
1823 cb = nic->cb_to_clean = cb->next) { in e100_tx_clean()
1825 netif_printk(nic, tx_done, KERN_DEBUG, nic->netdev, in e100_tx_clean()
1827 (int)(((void*)cb - (void*)nic->cbs)/sizeof(struct cb)), in e100_tx_clean()
1834 pci_unmap_single(nic->pdev, in e100_tx_clean()
1843 nic->cbs_avail++; in e100_tx_clean()
1846 spin_unlock(&nic->cb_lock); in e100_tx_clean()
1849 if (unlikely(tx_cleaned && netif_queue_stopped(nic->netdev))) in e100_tx_clean()
1850 netif_wake_queue(nic->netdev); in e100_tx_clean()
1855 static void e100_clean_cbs(struct nic *nic) in e100_clean_cbs() argument
1857 if (nic->cbs) { in e100_clean_cbs()
1858 while (nic->cbs_avail != nic->params.cbs.count) { in e100_clean_cbs()
1859 struct cb *cb = nic->cb_to_clean; in e100_clean_cbs()
1861 pci_unmap_single(nic->pdev, in e100_clean_cbs()
1867 nic->cb_to_clean = nic->cb_to_clean->next; in e100_clean_cbs()
1868 nic->cbs_avail++; in e100_clean_cbs()
1870 dma_pool_free(nic->cbs_pool, nic->cbs, nic->cbs_dma_addr); in e100_clean_cbs()
1871 nic->cbs = NULL; in e100_clean_cbs()
1872 nic->cbs_avail = 0; in e100_clean_cbs()
1874 nic->cuc_cmd = cuc_start; in e100_clean_cbs()
1875 nic->cb_to_use = nic->cb_to_send = nic->cb_to_clean = in e100_clean_cbs()
1876 nic->cbs; in e100_clean_cbs()
1879 static int e100_alloc_cbs(struct nic *nic) in e100_alloc_cbs() argument
1882 unsigned int i, count = nic->params.cbs.count; in e100_alloc_cbs()
1884 nic->cuc_cmd = cuc_start; in e100_alloc_cbs()
1885 nic->cb_to_use = nic->cb_to_send = nic->cb_to_clean = NULL; in e100_alloc_cbs()
1886 nic->cbs_avail = 0; in e100_alloc_cbs()
1888 nic->cbs = dma_pool_zalloc(nic->cbs_pool, GFP_KERNEL, in e100_alloc_cbs()
1889 &nic->cbs_dma_addr); in e100_alloc_cbs()
1890 if (!nic->cbs) in e100_alloc_cbs()
1893 for (cb = nic->cbs, i = 0; i < count; cb++, i++) { in e100_alloc_cbs()
1894 cb->next = (i + 1 < count) ? cb + 1 : nic->cbs; in e100_alloc_cbs()
1895 cb->prev = (i == 0) ? nic->cbs + count - 1 : cb - 1; in e100_alloc_cbs()
1897 cb->dma_addr = nic->cbs_dma_addr + i * sizeof(struct cb); in e100_alloc_cbs()
1898 cb->link = cpu_to_le32(nic->cbs_dma_addr + in e100_alloc_cbs()
1902 nic->cb_to_use = nic->cb_to_send = nic->cb_to_clean = nic->cbs; in e100_alloc_cbs()
1903 nic->cbs_avail = count; in e100_alloc_cbs()
1908 static inline void e100_start_receiver(struct nic *nic, struct rx *rx) in e100_start_receiver() argument
1910 if (!nic->rxs) return; in e100_start_receiver()
1911 if (RU_SUSPENDED != nic->ru_running) return; in e100_start_receiver()
1914 if (!rx) rx = nic->rxs; in e100_start_receiver()
1918 e100_exec_cmd(nic, ruc_start, rx->dma_addr); in e100_start_receiver()
1919 nic->ru_running = RU_RUNNING; in e100_start_receiver()
1924 static int e100_rx_alloc_skb(struct nic *nic, struct rx *rx) in e100_rx_alloc_skb() argument
1926 if (!(rx->skb = netdev_alloc_skb_ip_align(nic->netdev, RFD_BUF_LEN))) in e100_rx_alloc_skb()
1930 skb_copy_to_linear_data(rx->skb, &nic->blank_rfd, sizeof(struct rfd)); in e100_rx_alloc_skb()
1931 rx->dma_addr = pci_map_single(nic->pdev, rx->skb->data, in e100_rx_alloc_skb()
1934 if (pci_dma_mapping_error(nic->pdev, rx->dma_addr)) { in e100_rx_alloc_skb()
1947 pci_dma_sync_single_for_device(nic->pdev, rx->prev->dma_addr, in e100_rx_alloc_skb()
1954 static int e100_rx_indicate(struct nic *nic, struct rx *rx, in e100_rx_indicate() argument
1957 struct net_device *dev = nic->netdev; in e100_rx_indicate()
1967 pci_dma_sync_single_for_cpu(nic->pdev, rx->dma_addr, in e100_rx_indicate()
1971 netif_printk(nic, rx_status, KERN_DEBUG, nic->netdev, in e100_rx_indicate()
1983 (RU_RUNNING == nic->ru_running)) in e100_rx_indicate()
1985 if (ioread8(&nic->csr->scb.status) & rus_no_res) in e100_rx_indicate()
1986 nic->ru_running = RU_SUSPENDED; in e100_rx_indicate()
1987 pci_dma_sync_single_for_device(nic->pdev, rx->dma_addr, in e100_rx_indicate()
2001 pci_unmap_single(nic->pdev, rx->dma_addr, in e100_rx_indicate()
2011 (RU_RUNNING == nic->ru_running)) { in e100_rx_indicate()
2013 if (ioread8(&nic->csr->scb.status) & rus_no_res) in e100_rx_indicate()
2014 nic->ru_running = RU_SUSPENDED; in e100_rx_indicate()
2020 skb->protocol = eth_type_trans(skb, nic->netdev); in e100_rx_indicate()
2028 nic->rx_over_length_errors++; in e100_rx_indicate()
2037 nic->rx_over_length_errors++; in e100_rx_indicate()
2053 static void e100_rx_clean(struct nic *nic, unsigned int *work_done, in e100_rx_clean() argument
2062 for (rx = nic->rx_to_clean; rx->skb; rx = nic->rx_to_clean = rx->next) { in e100_rx_clean()
2063 err = e100_rx_indicate(nic, rx, work_done, work_to_do); in e100_rx_clean()
2076 if (-EAGAIN != err && RU_SUSPENDED == nic->ru_running) in e100_rx_clean()
2079 old_before_last_rx = nic->rx_to_use->prev->prev; in e100_rx_clean()
2083 for (rx = nic->rx_to_use; !rx->skb; rx = nic->rx_to_use = rx->next) { in e100_rx_clean()
2084 if (unlikely(e100_rx_alloc_skb(nic, rx))) in e100_rx_clean()
2088 new_before_last_rx = nic->rx_to_use->prev->prev; in e100_rx_clean()
2103 pci_dma_sync_single_for_device(nic->pdev, in e100_rx_clean()
2111 pci_dma_sync_single_for_device(nic->pdev, in e100_rx_clean()
2116 pci_dma_sync_single_for_device(nic->pdev, in e100_rx_clean()
2123 iowrite8(stat_ack_rnr, &nic->csr->scb.stat_ack); in e100_rx_clean()
2124 e100_start_receiver(nic, nic->rx_to_clean); in e100_rx_clean()
2130 static void e100_rx_clean_list(struct nic *nic) in e100_rx_clean_list() argument
2133 unsigned int i, count = nic->params.rfds.count; in e100_rx_clean_list()
2135 nic->ru_running = RU_UNINITIALIZED; in e100_rx_clean_list()
2137 if (nic->rxs) { in e100_rx_clean_list()
2138 for (rx = nic->rxs, i = 0; i < count; rx++, i++) { in e100_rx_clean_list()
2140 pci_unmap_single(nic->pdev, rx->dma_addr, in e100_rx_clean_list()
2145 kfree(nic->rxs); in e100_rx_clean_list()
2146 nic->rxs = NULL; in e100_rx_clean_list()
2149 nic->rx_to_use = nic->rx_to_clean = NULL; in e100_rx_clean_list()
2152 static int e100_rx_alloc_list(struct nic *nic) in e100_rx_alloc_list() argument
2155 unsigned int i, count = nic->params.rfds.count; in e100_rx_alloc_list()
2158 nic->rx_to_use = nic->rx_to_clean = NULL; in e100_rx_alloc_list()
2159 nic->ru_running = RU_UNINITIALIZED; in e100_rx_alloc_list()
2161 if (!(nic->rxs = kcalloc(count, sizeof(struct rx), GFP_ATOMIC))) in e100_rx_alloc_list()
2164 for (rx = nic->rxs, i = 0; i < count; rx++, i++) { in e100_rx_alloc_list()
2165 rx->next = (i + 1 < count) ? rx + 1 : nic->rxs; in e100_rx_alloc_list()
2166 rx->prev = (i == 0) ? nic->rxs + count - 1 : rx - 1; in e100_rx_alloc_list()
2167 if (e100_rx_alloc_skb(nic, rx)) { in e100_rx_alloc_list()
2168 e100_rx_clean_list(nic); in e100_rx_alloc_list()
2179 rx = nic->rxs->prev->prev; in e100_rx_alloc_list()
2183 pci_dma_sync_single_for_device(nic->pdev, rx->dma_addr, in e100_rx_alloc_list()
2186 nic->rx_to_use = nic->rx_to_clean = nic->rxs; in e100_rx_alloc_list()
2187 nic->ru_running = RU_SUSPENDED; in e100_rx_alloc_list()
2195 struct nic *nic = netdev_priv(netdev); in e100_intr() local
2196 u8 stat_ack = ioread8(&nic->csr->scb.stat_ack); in e100_intr()
2198 netif_printk(nic, intr, KERN_DEBUG, nic->netdev, in e100_intr()
2206 iowrite8(stat_ack, &nic->csr->scb.stat_ack); in e100_intr()
2210 nic->ru_running = RU_SUSPENDED; in e100_intr()
2212 if (likely(napi_schedule_prep(&nic->napi))) { in e100_intr()
2213 e100_disable_irq(nic); in e100_intr()
2214 __napi_schedule(&nic->napi); in e100_intr()
2222 struct nic *nic = container_of(napi, struct nic, napi); in e100_poll() local
2225 e100_rx_clean(nic, &work_done, budget); in e100_poll()
2226 e100_tx_clean(nic); in e100_poll()
2234 e100_enable_irq(nic); in e100_poll()
2242 struct nic *nic = netdev_priv(netdev); in e100_netpoll() local
2244 e100_disable_irq(nic); in e100_netpoll()
2245 e100_intr(nic->pdev->irq, netdev); in e100_netpoll()
2246 e100_tx_clean(nic); in e100_netpoll()
2247 e100_enable_irq(nic); in e100_netpoll()
2253 struct nic *nic = netdev_priv(netdev); in e100_set_mac_address() local
2260 e100_exec_cb(nic, NULL, e100_setup_iaaddr); in e100_set_mac_address()
2265 static int e100_asf(struct nic *nic) in e100_asf() argument
2268 return (nic->pdev->device >= 0x1050) && (nic->pdev->device <= 0x1057) && in e100_asf()
2269 (nic->eeprom[eeprom_config_asf] & eeprom_asf) && in e100_asf()
2270 !(nic->eeprom[eeprom_config_asf] & eeprom_gcl) && in e100_asf()
2271 ((nic->eeprom[eeprom_smbus_addr] & 0xFF) != 0xFE); in e100_asf()
2274 static int e100_up(struct nic *nic) in e100_up() argument
2278 if ((err = e100_rx_alloc_list(nic))) in e100_up()
2280 if ((err = e100_alloc_cbs(nic))) in e100_up()
2282 if ((err = e100_hw_init(nic))) in e100_up()
2284 e100_set_multicast_list(nic->netdev); in e100_up()
2285 e100_start_receiver(nic, NULL); in e100_up()
2286 mod_timer(&nic->watchdog, jiffies); in e100_up()
2287 if ((err = request_irq(nic->pdev->irq, e100_intr, IRQF_SHARED, in e100_up()
2288 nic->netdev->name, nic->netdev))) in e100_up()
2290 netif_wake_queue(nic->netdev); in e100_up()
2291 napi_enable(&nic->napi); in e100_up()
2294 e100_enable_irq(nic); in e100_up()
2298 del_timer_sync(&nic->watchdog); in e100_up()
2300 e100_clean_cbs(nic); in e100_up()
2302 e100_rx_clean_list(nic); in e100_up()
2306 static void e100_down(struct nic *nic) in e100_down() argument
2309 napi_disable(&nic->napi); in e100_down()
2310 netif_stop_queue(nic->netdev); in e100_down()
2311 e100_hw_reset(nic); in e100_down()
2312 free_irq(nic->pdev->irq, nic->netdev); in e100_down()
2313 del_timer_sync(&nic->watchdog); in e100_down()
2314 netif_carrier_off(nic->netdev); in e100_down()
2315 e100_clean_cbs(nic); in e100_down()
2316 e100_rx_clean_list(nic); in e100_down()
2321 struct nic *nic = netdev_priv(netdev); in e100_tx_timeout() local
2325 schedule_work(&nic->tx_timeout_task); in e100_tx_timeout()
2330 struct nic *nic = container_of(work, struct nic, tx_timeout_task); in e100_tx_timeout_task() local
2331 struct net_device *netdev = nic->netdev; in e100_tx_timeout_task()
2333 netif_printk(nic, tx_err, KERN_DEBUG, nic->netdev, in e100_tx_timeout_task()
2334 "scb.status=0x%02X\n", ioread8(&nic->csr->scb.status)); in e100_tx_timeout_task()
2344 static int e100_loopback_test(struct nic *nic, enum loopback loopback_mode) in e100_loopback_test() argument
2354 if ((err = e100_rx_alloc_list(nic))) in e100_loopback_test()
2356 if ((err = e100_alloc_cbs(nic))) in e100_loopback_test()
2360 if (nic->flags & ich && loopback_mode == lb_phy) in e100_loopback_test()
2363 nic->loopback = loopback_mode; in e100_loopback_test()
2364 if ((err = e100_hw_init(nic))) in e100_loopback_test()
2368 mdio_write(nic->netdev, nic->mii.phy_id, MII_BMCR, in e100_loopback_test()
2371 e100_start_receiver(nic, NULL); in e100_loopback_test()
2373 if (!(skb = netdev_alloc_skb(nic->netdev, ETH_DATA_LEN))) { in e100_loopback_test()
2379 e100_xmit_frame(skb, nic->netdev); in e100_loopback_test()
2383 pci_dma_sync_single_for_cpu(nic->pdev, nic->rx_to_clean->dma_addr, in e100_loopback_test()
2386 if (memcmp(nic->rx_to_clean->skb->data + sizeof(struct rfd), in e100_loopback_test()
2391 mdio_write(nic->netdev, nic->mii.phy_id, MII_BMCR, 0); in e100_loopback_test()
2392 nic->loopback = lb_none; in e100_loopback_test()
2393 e100_clean_cbs(nic); in e100_loopback_test()
2394 e100_hw_reset(nic); in e100_loopback_test()
2396 e100_rx_clean_list(nic); in e100_loopback_test()
2408 struct nic *nic = netdev_priv(netdev); in e100_get_link_ksettings() local
2410 mii_ethtool_get_link_ksettings(&nic->mii, cmd); in e100_get_link_ksettings()
2418 struct nic *nic = netdev_priv(netdev); in e100_set_link_ksettings() local
2421 mdio_write(netdev, nic->mii.phy_id, MII_BMCR, BMCR_RESET); in e100_set_link_ksettings()
2422 err = mii_ethtool_set_link_ksettings(&nic->mii, cmd); in e100_set_link_ksettings()
2423 e100_exec_cb(nic, NULL, e100_configure); in e100_set_link_ksettings()
2431 struct nic *nic = netdev_priv(netdev); in e100_get_drvinfo() local
2434 strlcpy(info->bus_info, pci_name(nic->pdev), in e100_get_drvinfo()
2441 struct nic *nic = netdev_priv(netdev); in e100_get_regs_len() local
2442 return 1 + E100_PHY_REGS + sizeof(nic->mem->dump_buf); in e100_get_regs_len()
2448 struct nic *nic = netdev_priv(netdev); in e100_get_regs() local
2452 regs->version = (1 << 24) | nic->pdev->revision; in e100_get_regs()
2453 buff[0] = ioread8(&nic->csr->scb.cmd_hi) << 24 | in e100_get_regs()
2454 ioread8(&nic->csr->scb.cmd_lo) << 16 | in e100_get_regs()
2455 ioread16(&nic->csr->scb.status); in e100_get_regs()
2458 mdio_read(netdev, nic->mii.phy_id, i); in e100_get_regs()
2459 memset(nic->mem->dump_buf, 0, sizeof(nic->mem->dump_buf)); in e100_get_regs()
2460 e100_exec_cb(nic, NULL, e100_dump); in e100_get_regs()
2462 memcpy(&buff[2 + E100_PHY_REGS], nic->mem->dump_buf, in e100_get_regs()
2463 sizeof(nic->mem->dump_buf)); in e100_get_regs()
2468 struct nic *nic = netdev_priv(netdev); in e100_get_wol() local
2469 wol->supported = (nic->mac >= mac_82558_D101_A4) ? WAKE_MAGIC : 0; in e100_get_wol()
2470 wol->wolopts = (nic->flags & wol_magic) ? WAKE_MAGIC : 0; in e100_get_wol()
2475 struct nic *nic = netdev_priv(netdev); in e100_set_wol() local
2478 !device_can_wakeup(&nic->pdev->dev)) in e100_set_wol()
2482 nic->flags |= wol_magic; in e100_set_wol()
2484 nic->flags &= ~wol_magic; in e100_set_wol()
2486 device_set_wakeup_enable(&nic->pdev->dev, wol->wolopts); in e100_set_wol()
2488 e100_exec_cb(nic, NULL, e100_configure); in e100_set_wol()
2495 struct nic *nic = netdev_priv(netdev); in e100_get_msglevel() local
2496 return nic->msg_enable; in e100_get_msglevel()
2501 struct nic *nic = netdev_priv(netdev); in e100_set_msglevel() local
2502 nic->msg_enable = value; in e100_set_msglevel()
2507 struct nic *nic = netdev_priv(netdev); in e100_nway_reset() local
2508 return mii_nway_restart(&nic->mii); in e100_nway_reset()
2513 struct nic *nic = netdev_priv(netdev); in e100_get_link() local
2514 return mii_link_ok(&nic->mii); in e100_get_link()
2519 struct nic *nic = netdev_priv(netdev); in e100_get_eeprom_len() local
2520 return nic->eeprom_wc << 1; in e100_get_eeprom_len()
2527 struct nic *nic = netdev_priv(netdev); in e100_get_eeprom() local
2530 memcpy(bytes, &((u8 *)nic->eeprom)[eeprom->offset], eeprom->len); in e100_get_eeprom()
2538 struct nic *nic = netdev_priv(netdev); in e100_set_eeprom() local
2543 memcpy(&((u8 *)nic->eeprom)[eeprom->offset], bytes, eeprom->len); in e100_set_eeprom()
2545 return e100_eeprom_save(nic, eeprom->offset >> 1, in e100_set_eeprom()
2552 struct nic *nic = netdev_priv(netdev); in e100_get_ringparam() local
2553 struct param_range *rfds = &nic->params.rfds; in e100_get_ringparam()
2554 struct param_range *cbs = &nic->params.cbs; in e100_get_ringparam()
2565 struct nic *nic = netdev_priv(netdev); in e100_set_ringparam() local
2566 struct param_range *rfds = &nic->params.rfds; in e100_set_ringparam()
2567 struct param_range *cbs = &nic->params.cbs; in e100_set_ringparam()
2573 e100_down(nic); in e100_set_ringparam()
2578 netif_info(nic, drv, nic->netdev, "Ring Param settings: rx: %d, tx %d\n", in e100_set_ringparam()
2581 e100_up(nic); in e100_set_ringparam()
2599 struct nic *nic = netdev_priv(netdev); in e100_diag_test() local
2603 data[0] = !mii_link_ok(&nic->mii); in e100_diag_test()
2604 data[1] = e100_eeprom_load(nic); in e100_diag_test()
2608 err = mii_ethtool_gset(&nic->mii, &cmd); in e100_diag_test()
2611 e100_down(nic); in e100_diag_test()
2612 data[2] = e100_self_test(nic); in e100_diag_test()
2613 data[3] = e100_loopback_test(nic, lb_mac); in e100_diag_test()
2614 data[4] = e100_loopback_test(nic, lb_phy); in e100_diag_test()
2617 err = mii_ethtool_sset(&nic->mii, &cmd); in e100_diag_test()
2620 e100_up(nic); in e100_diag_test()
2631 struct nic *nic = netdev_priv(netdev); in e100_set_phys_id() local
2638 u16 led_reg = (nic->phy == phy_82552_v) ? E100_82552_LED_OVERRIDE : in e100_set_phys_id()
2647 leds = (nic->phy == phy_82552_v) ? E100_82552_LED_ON : in e100_set_phys_id()
2648 (nic->mac < mac_82559_D101M) ? led_on_557 : led_on_559; in e100_set_phys_id()
2652 leds = (nic->phy == phy_82552_v) ? E100_82552_LED_OFF : led_off; in e100_set_phys_id()
2659 mdio_write(netdev, nic->mii.phy_id, led_reg, leds); in e100_set_phys_id()
2694 struct nic *nic = netdev_priv(netdev); in e100_get_ethtool_stats() local
2700 data[i++] = nic->tx_deferred; in e100_get_ethtool_stats()
2701 data[i++] = nic->tx_single_collisions; in e100_get_ethtool_stats()
2702 data[i++] = nic->tx_multiple_collisions; in e100_get_ethtool_stats()
2703 data[i++] = nic->tx_fc_pause; in e100_get_ethtool_stats()
2704 data[i++] = nic->rx_fc_pause; in e100_get_ethtool_stats()
2705 data[i++] = nic->rx_fc_unsupported; in e100_get_ethtool_stats()
2706 data[i++] = nic->tx_tco_frames; in e100_get_ethtool_stats()
2707 data[i++] = nic->rx_tco_frames; in e100_get_ethtool_stats()
2708 data[i++] = nic->rx_short_frame_errors; in e100_get_ethtool_stats()
2709 data[i++] = nic->rx_over_length_errors; in e100_get_ethtool_stats()
2751 struct nic *nic = netdev_priv(netdev); in e100_do_ioctl() local
2753 return generic_mii_ioctl(&nic->mii, if_mii(ifr), cmd, NULL); in e100_do_ioctl()
2756 static int e100_alloc(struct nic *nic) in e100_alloc() argument
2758 nic->mem = pci_alloc_consistent(nic->pdev, sizeof(struct mem), in e100_alloc()
2759 &nic->dma_addr); in e100_alloc()
2760 return nic->mem ? 0 : -ENOMEM; in e100_alloc()
2763 static void e100_free(struct nic *nic) in e100_free() argument
2765 if (nic->mem) { in e100_free()
2766 pci_free_consistent(nic->pdev, sizeof(struct mem), in e100_free()
2767 nic->mem, nic->dma_addr); in e100_free()
2768 nic->mem = NULL; in e100_free()
2774 struct nic *nic = netdev_priv(netdev); in e100_open() local
2778 if ((err = e100_up(nic))) in e100_open()
2779 netif_err(nic, ifup, nic->netdev, "Cannot open interface, aborting\n"); in e100_open()
2792 struct nic *nic = netdev_priv(netdev); in e100_set_features() local
2799 e100_exec_cb(nic, NULL, e100_configure); in e100_set_features()
2821 struct nic *nic; in e100_probe() local
2824 if (!(netdev = alloc_etherdev(sizeof(struct nic)))) in e100_probe()
2836 nic = netdev_priv(netdev); in e100_probe()
2837 netif_napi_add(netdev, &nic->napi, e100_poll, E100_NAPI_WEIGHT); in e100_probe()
2838 nic->netdev = netdev; in e100_probe()
2839 nic->pdev = pdev; in e100_probe()
2840 nic->msg_enable = (1 << debug) - 1; in e100_probe()
2841 nic->mdio_ctrl = mdio_ctrl_hw; in e100_probe()
2845 netif_err(nic, probe, nic->netdev, "Cannot enable PCI device, aborting\n"); in e100_probe()
2850 netif_err(nic, probe, nic->netdev, "Cannot find proper PCI device base address, aborting\n"); in e100_probe()
2856 netif_err(nic, probe, nic->netdev, "Cannot obtain PCI resources, aborting\n"); in e100_probe()
2861 netif_err(nic, probe, nic->netdev, "No usable DMA configuration, aborting\n"); in e100_probe()
2868 netif_info(nic, probe, nic->netdev, "using i/o access mode\n"); in e100_probe()
2870 nic->csr = pci_iomap(pdev, (use_io ? 1 : 0), sizeof(struct csr)); in e100_probe()
2871 if (!nic->csr) { in e100_probe()
2872 netif_err(nic, probe, nic->netdev, "Cannot map device registers, aborting\n"); in e100_probe()
2878 nic->flags |= ich; in e100_probe()
2880 nic->flags &= ~ich; in e100_probe()
2882 e100_get_defaults(nic); in e100_probe()
2885 if (nic->mac < mac_82558_D101_A4) in e100_probe()
2889 spin_lock_init(&nic->cb_lock); in e100_probe()
2890 spin_lock_init(&nic->cmd_lock); in e100_probe()
2891 spin_lock_init(&nic->mdio_lock); in e100_probe()
2896 e100_hw_reset(nic); in e100_probe()
2900 timer_setup(&nic->watchdog, e100_watchdog, 0); in e100_probe()
2902 INIT_WORK(&nic->tx_timeout_task, e100_tx_timeout_task); in e100_probe()
2904 if ((err = e100_alloc(nic))) { in e100_probe()
2905 netif_err(nic, probe, nic->netdev, "Cannot alloc driver memory, aborting\n"); in e100_probe()
2909 if ((err = e100_eeprom_load(nic))) in e100_probe()
2912 e100_phy_init(nic); in e100_probe()
2914 memcpy(netdev->dev_addr, nic->eeprom, ETH_ALEN); in e100_probe()
2917 netif_err(nic, probe, nic->netdev, "Invalid MAC address from EEPROM, aborting\n"); in e100_probe()
2921 netif_err(nic, probe, nic->netdev, "Invalid MAC address from EEPROM, you MUST configure one.\n"); in e100_probe()
2926 if ((nic->mac >= mac_82558_D101_A4) && in e100_probe()
2927 (nic->eeprom[eeprom_id] & eeprom_id_wol)) { in e100_probe()
2928 nic->flags |= wol_magic; in e100_probe()
2937 netif_err(nic, probe, nic->netdev, "Cannot register net device, aborting\n"); in e100_probe()
2940 nic->cbs_pool = dma_pool_create(netdev->name, in e100_probe()
2941 &nic->pdev->dev, in e100_probe()
2942 nic->params.cbs.max * sizeof(struct cb), in e100_probe()
2945 if (!nic->cbs_pool) { in e100_probe()
2946 netif_err(nic, probe, nic->netdev, "Cannot create DMA pool, aborting\n"); in e100_probe()
2950 netif_info(nic, probe, nic->netdev, in e100_probe()
2960 e100_free(nic); in e100_probe()
2962 pci_iounmap(pdev, nic->csr); in e100_probe()
2977 struct nic *nic = netdev_priv(netdev); in e100_remove() local
2979 e100_free(nic); in e100_remove()
2980 pci_iounmap(pdev, nic->csr); in e100_remove()
2981 dma_pool_destroy(nic->cbs_pool); in e100_remove()
2994 struct nic *nic = netdev_priv(netdev); in __e100_shutdown() local
2997 e100_down(nic); in __e100_shutdown()
3002 if ((nic->flags & wol_magic) | e100_asf(nic)) { in __e100_shutdown()
3004 if (nic->phy == phy_82552_v) { in __e100_shutdown()
3005 u16 smartspeed = mdio_read(netdev, nic->mii.phy_id, in __e100_shutdown()
3008 mdio_write(netdev, nic->mii.phy_id, in __e100_shutdown()
3042 struct nic *nic = netdev_priv(netdev); in e100_resume() local
3050 if (nic->phy == phy_82552_v) { in e100_resume()
3051 u16 smartspeed = mdio_read(netdev, nic->mii.phy_id, in e100_resume()
3054 mdio_write(netdev, nic->mii.phy_id, in e100_resume()
3061 e100_up(nic); in e100_resume()
3084 struct nic *nic = netdev_priv(netdev); in e100_io_error_detected() local
3092 e100_down(nic); in e100_io_error_detected()
3108 struct nic *nic = netdev_priv(netdev); in e100_io_slot_reset() local
3119 e100_hw_reset(nic); in e100_io_slot_reset()
3120 e100_phy_init(nic); in e100_io_slot_reset()
3135 struct nic *nic = netdev_priv(netdev); in e100_io_resume() local
3143 mod_timer(&nic->watchdog, jiffies); in e100_io_resume()