Lines Matching refs:adapter

520 static int eeprom_write(struct et131x_adapter *adapter, u32 addr, u8 data)  in eeprom_write()  argument
522 struct pci_dev *pdev = adapter->pdev; in eeprom_write()
576 adapter->pdev->revision == 0) in eeprom_write()
628 static int eeprom_read(struct et131x_adapter *adapter, u32 addr, u8 *pdata) in eeprom_read() argument
630 struct pci_dev *pdev = adapter->pdev; in eeprom_read()
668 static int et131x_init_eeprom(struct et131x_adapter *adapter) in et131x_init_eeprom() argument
670 struct pci_dev *pdev = adapter->pdev; in et131x_init_eeprom()
702 if (eeprom_write(adapter, i, eedata[i]) < 0) in et131x_init_eeprom()
716 adapter->has_eeprom = 0; in et131x_init_eeprom()
720 adapter->has_eeprom = 1; in et131x_init_eeprom()
725 eeprom_read(adapter, 0x70, &adapter->eeprom_data[0]); in et131x_init_eeprom()
726 eeprom_read(adapter, 0x71, &adapter->eeprom_data[1]); in et131x_init_eeprom()
728 if (adapter->eeprom_data[0] != 0xcd) in et131x_init_eeprom()
730 adapter->eeprom_data[1] = 0x00; in et131x_init_eeprom()
735 static void et131x_rx_dma_enable(struct et131x_adapter *adapter) in et131x_rx_dma_enable() argument
739 struct rx_ring *rx_ring = &adapter->rx_ring; in et131x_rx_dma_enable()
755 writel(csr, &adapter->regs->rxdma.csr); in et131x_rx_dma_enable()
757 csr = readl(&adapter->regs->rxdma.csr); in et131x_rx_dma_enable()
760 csr = readl(&adapter->regs->rxdma.csr); in et131x_rx_dma_enable()
762 dev_err(&adapter->pdev->dev, in et131x_rx_dma_enable()
769 static void et131x_rx_dma_disable(struct et131x_adapter *adapter) in et131x_rx_dma_disable() argument
774 &adapter->regs->rxdma.csr); in et131x_rx_dma_disable()
775 csr = readl(&adapter->regs->rxdma.csr); in et131x_rx_dma_disable()
778 csr = readl(&adapter->regs->rxdma.csr); in et131x_rx_dma_disable()
780 dev_err(&adapter->pdev->dev, in et131x_rx_dma_disable()
786 static void et131x_tx_dma_enable(struct et131x_adapter *adapter) in et131x_tx_dma_enable() argument
792 &adapter->regs->txdma.csr); in et131x_tx_dma_enable()
805 static void et1310_config_mac_regs1(struct et131x_adapter *adapter) in et1310_config_mac_regs1() argument
807 struct mac_regs __iomem *macregs = &adapter->regs->mac; in et1310_config_mac_regs1()
841 station2 = (adapter->addr[1] << ET_MAC_STATION_ADDR2_OC2_SHIFT) | in et1310_config_mac_regs1()
842 (adapter->addr[0] << ET_MAC_STATION_ADDR2_OC1_SHIFT); in et1310_config_mac_regs1()
843 station1 = (adapter->addr[5] << ET_MAC_STATION_ADDR1_OC6_SHIFT) | in et1310_config_mac_regs1()
844 (adapter->addr[4] << ET_MAC_STATION_ADDR1_OC5_SHIFT) | in et1310_config_mac_regs1()
845 (adapter->addr[3] << ET_MAC_STATION_ADDR1_OC4_SHIFT) | in et1310_config_mac_regs1()
846 adapter->addr[2]; in et1310_config_mac_regs1()
857 writel(adapter->registry_jumbo_packet + 4, &macregs->max_fm_len); in et1310_config_mac_regs1()
863 static void et1310_config_mac_regs2(struct et131x_adapter *adapter) in et1310_config_mac_regs2() argument
866 struct mac_regs __iomem *mac = &adapter->regs->mac; in et1310_config_mac_regs2()
867 struct phy_device *phydev = adapter->phydev; in et1310_config_mac_regs2()
873 ctl = readl(&adapter->regs->txmac.ctl); in et1310_config_mac_regs2()
892 if (adapter->flow == FLOW_RXONLY || adapter->flow == FLOW_BOTH) in et1310_config_mac_regs2()
924 dev_warn(&adapter->pdev->dev, in et1310_config_mac_regs2()
930 writel(ctl, &adapter->regs->txmac.ctl); in et1310_config_mac_regs2()
932 if (adapter->flags & FMP_ADAPTER_LOWER_POWER) { in et1310_config_mac_regs2()
933 et131x_rx_dma_enable(adapter); in et1310_config_mac_regs2()
934 et131x_tx_dma_enable(adapter); in et1310_config_mac_regs2()
938 static int et1310_in_phy_coma(struct et131x_adapter *adapter) in et1310_in_phy_coma() argument
940 u32 pmcsr = readl(&adapter->regs->global.pm_csr); in et1310_in_phy_coma()
945 static void et1310_setup_device_for_multicast(struct et131x_adapter *adapter) in et1310_setup_device_for_multicast() argument
947 struct rxmac_regs __iomem *rxmac = &adapter->regs->rxmac; in et1310_setup_device_for_multicast()
959 if (adapter->packet_filter & ET131X_PACKET_TYPE_MULTICAST) { in et1310_setup_device_for_multicast()
963 for (i = 0; i < adapter->multicast_addr_count; i++) { in et1310_setup_device_for_multicast()
966 result = ether_crc(6, adapter->multicast_list[i]); in et1310_setup_device_for_multicast()
986 pm_csr = readl(&adapter->regs->global.pm_csr); in et1310_setup_device_for_multicast()
987 if (!et1310_in_phy_coma(adapter)) { in et1310_setup_device_for_multicast()
995 static void et1310_setup_device_for_unicast(struct et131x_adapter *adapter) in et1310_setup_device_for_unicast() argument
997 struct rxmac_regs __iomem *rxmac = &adapter->regs->rxmac; in et1310_setup_device_for_unicast()
1012 uni_pf3 = (adapter->addr[0] << ET_RX_UNI_PF_ADDR2_1_SHIFT) | in et1310_setup_device_for_unicast()
1013 (adapter->addr[1] << ET_RX_UNI_PF_ADDR2_2_SHIFT) | in et1310_setup_device_for_unicast()
1014 (adapter->addr[0] << ET_RX_UNI_PF_ADDR1_1_SHIFT) | in et1310_setup_device_for_unicast()
1015 adapter->addr[1]; in et1310_setup_device_for_unicast()
1017 uni_pf2 = (adapter->addr[2] << ET_RX_UNI_PF_ADDR2_3_SHIFT) | in et1310_setup_device_for_unicast()
1018 (adapter->addr[3] << ET_RX_UNI_PF_ADDR2_4_SHIFT) | in et1310_setup_device_for_unicast()
1019 (adapter->addr[4] << ET_RX_UNI_PF_ADDR2_5_SHIFT) | in et1310_setup_device_for_unicast()
1020 adapter->addr[5]; in et1310_setup_device_for_unicast()
1022 uni_pf1 = (adapter->addr[2] << ET_RX_UNI_PF_ADDR1_3_SHIFT) | in et1310_setup_device_for_unicast()
1023 (adapter->addr[3] << ET_RX_UNI_PF_ADDR1_4_SHIFT) | in et1310_setup_device_for_unicast()
1024 (adapter->addr[4] << ET_RX_UNI_PF_ADDR1_5_SHIFT) | in et1310_setup_device_for_unicast()
1025 adapter->addr[5]; in et1310_setup_device_for_unicast()
1027 pm_csr = readl(&adapter->regs->global.pm_csr); in et1310_setup_device_for_unicast()
1028 if (!et1310_in_phy_coma(adapter)) { in et1310_setup_device_for_unicast()
1035 static void et1310_config_rxmac_regs(struct et131x_adapter *adapter) in et1310_config_rxmac_regs() argument
1037 struct rxmac_regs __iomem *rxmac = &adapter->regs->rxmac; in et1310_config_rxmac_regs()
1038 struct phy_device *phydev = adapter->phydev; in et1310_config_rxmac_regs()
1060 sa_lo = (adapter->addr[2] << ET_RX_WOL_LO_SA3_SHIFT) | in et1310_config_rxmac_regs()
1061 (adapter->addr[3] << ET_RX_WOL_LO_SA4_SHIFT) | in et1310_config_rxmac_regs()
1062 (adapter->addr[4] << ET_RX_WOL_LO_SA5_SHIFT) | in et1310_config_rxmac_regs()
1063 adapter->addr[5]; in et1310_config_rxmac_regs()
1066 sa_hi = (u32)(adapter->addr[0] << ET_RX_WOL_HI_SA1_SHIFT) | in et1310_config_rxmac_regs()
1067 adapter->addr[1]; in et1310_config_rxmac_regs()
1074 if (adapter->packet_filter & ET131X_PACKET_TYPE_DIRECTED) { in et1310_config_rxmac_regs()
1075 et1310_setup_device_for_unicast(adapter); in et1310_config_rxmac_regs()
1084 if (!(adapter->packet_filter & ET131X_PACKET_TYPE_ALL_MULTICAST)) { in et1310_config_rxmac_regs()
1086 et1310_setup_device_for_multicast(adapter); in et1310_config_rxmac_regs()
1093 if (adapter->registry_jumbo_packet > 8192) in et1310_config_rxmac_regs()
1140 static void et1310_config_txmac_regs(struct et131x_adapter *adapter) in et1310_config_txmac_regs() argument
1142 struct txmac_regs __iomem *txmac = &adapter->regs->txmac; in et1310_config_txmac_regs()
1148 if (adapter->flow == FLOW_NONE) in et1310_config_txmac_regs()
1154 static void et1310_config_macstat_regs(struct et131x_adapter *adapter) in et1310_config_macstat_regs() argument
1156 struct macstat_regs __iomem *macstat = &adapter->regs->macstat; in et1310_config_macstat_regs()
1172 static int et131x_phy_mii_read(struct et131x_adapter *adapter, u8 addr, in et131x_phy_mii_read() argument
1175 struct mac_regs __iomem *mac = &adapter->regs->mac; in et131x_phy_mii_read()
1204 dev_warn(&adapter->pdev->dev, in et131x_phy_mii_read()
1206 dev_warn(&adapter->pdev->dev, "status is 0x%08x\n", in et131x_phy_mii_read()
1231 static int et131x_mii_read(struct et131x_adapter *adapter, u8 reg, u16 *value) in et131x_mii_read() argument
1233 struct phy_device *phydev = adapter->phydev; in et131x_mii_read()
1238 return et131x_phy_mii_read(adapter, phydev->addr, reg, value); in et131x_mii_read()
1241 static int et131x_mii_write(struct et131x_adapter *adapter, u8 addr, u8 reg, in et131x_mii_write() argument
1244 struct mac_regs __iomem *mac = &adapter->regs->mac; in et131x_mii_write()
1276 dev_warn(&adapter->pdev->dev, in et131x_mii_write()
1278 dev_warn(&adapter->pdev->dev, "status is 0x%08x\n", in et131x_mii_write()
1280 dev_warn(&adapter->pdev->dev, "command is 0x%08x\n", in et131x_mii_write()
1283 et131x_mii_read(adapter, reg, &tmp); in et131x_mii_write()
1299 static void et1310_phy_read_mii_bit(struct et131x_adapter *adapter, in et1310_phy_read_mii_bit() argument
1307 et131x_mii_read(adapter, regnum, &reg); in et1310_phy_read_mii_bit()
1312 static void et1310_config_flow_control(struct et131x_adapter *adapter) in et1310_config_flow_control() argument
1314 struct phy_device *phydev = adapter->phydev; in et1310_config_flow_control()
1317 adapter->flow = FLOW_NONE; in et1310_config_flow_control()
1321 et1310_phy_read_mii_bit(adapter, 5, 10, &remote_pause); in et1310_config_flow_control()
1322 et1310_phy_read_mii_bit(adapter, 5, 11, &remote_async_pause); in et1310_config_flow_control()
1325 adapter->flow = adapter->wanted_flow; in et1310_config_flow_control()
1327 if (adapter->wanted_flow == FLOW_BOTH) in et1310_config_flow_control()
1328 adapter->flow = FLOW_BOTH; in et1310_config_flow_control()
1330 adapter->flow = FLOW_NONE; in et1310_config_flow_control()
1332 adapter->flow = FLOW_NONE; in et1310_config_flow_control()
1334 if (adapter->wanted_flow == FLOW_BOTH) in et1310_config_flow_control()
1335 adapter->flow = FLOW_RXONLY; in et1310_config_flow_control()
1337 adapter->flow = FLOW_NONE; in et1310_config_flow_control()
1343 static void et1310_update_macstat_host_counters(struct et131x_adapter *adapter) in et1310_update_macstat_host_counters() argument
1345 struct ce_stats *stats = &adapter->stats; in et1310_update_macstat_host_counters()
1347 &adapter->regs->macstat; in et1310_update_macstat_host_counters()
1373 static void et1310_handle_macstat_interrupt(struct et131x_adapter *adapter) in et1310_handle_macstat_interrupt() argument
1381 carry_reg1 = readl(&adapter->regs->macstat.carry_reg1); in et1310_handle_macstat_interrupt()
1382 carry_reg2 = readl(&adapter->regs->macstat.carry_reg2); in et1310_handle_macstat_interrupt()
1384 writel(carry_reg1, &adapter->regs->macstat.carry_reg1); in et1310_handle_macstat_interrupt()
1385 writel(carry_reg2, &adapter->regs->macstat.carry_reg2); in et1310_handle_macstat_interrupt()
1394 adapter->stats.rx_code_violations += COUNTER_WRAP_16_BIT; in et1310_handle_macstat_interrupt()
1396 adapter->stats.rx_align_errs += COUNTER_WRAP_12_BIT; in et1310_handle_macstat_interrupt()
1398 adapter->stats.rx_length_errs += COUNTER_WRAP_16_BIT; in et1310_handle_macstat_interrupt()
1400 adapter->stats.rx_other_errs += COUNTER_WRAP_16_BIT; in et1310_handle_macstat_interrupt()
1402 adapter->stats.rx_crc_errs += COUNTER_WRAP_16_BIT; in et1310_handle_macstat_interrupt()
1404 adapter->stats.rx_overflows += COUNTER_WRAP_16_BIT; in et1310_handle_macstat_interrupt()
1406 adapter->stats.rcvd_pkts_dropped += COUNTER_WRAP_16_BIT; in et1310_handle_macstat_interrupt()
1408 adapter->stats.tx_max_pkt_errs += COUNTER_WRAP_12_BIT; in et1310_handle_macstat_interrupt()
1410 adapter->stats.tx_underflows += COUNTER_WRAP_12_BIT; in et1310_handle_macstat_interrupt()
1412 adapter->stats.tx_first_collisions += COUNTER_WRAP_12_BIT; in et1310_handle_macstat_interrupt()
1414 adapter->stats.tx_deferred += COUNTER_WRAP_12_BIT; in et1310_handle_macstat_interrupt()
1416 adapter->stats.tx_excessive_collisions += COUNTER_WRAP_12_BIT; in et1310_handle_macstat_interrupt()
1418 adapter->stats.tx_late_collisions += COUNTER_WRAP_12_BIT; in et1310_handle_macstat_interrupt()
1420 adapter->stats.tx_collisions += COUNTER_WRAP_12_BIT; in et1310_handle_macstat_interrupt()
1426 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_mdio_read() local
1430 ret = et131x_phy_mii_read(adapter, phy_addr, reg, &value); in et131x_mdio_read()
1442 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_mdio_write() local
1444 return et131x_mii_write(adapter, phy_addr, reg, value); in et131x_mdio_write()
1456 static void et1310_phy_power_switch(struct et131x_adapter *adapter, bool down) in et1310_phy_power_switch() argument
1459 struct phy_device *phydev = adapter->phydev; in et1310_phy_power_switch()
1461 et131x_mii_read(adapter, MII_BMCR, &data); in et1310_phy_power_switch()
1465 et131x_mii_write(adapter, phydev->addr, MII_BMCR, data); in et1310_phy_power_switch()
1469 static void et131x_xcvr_init(struct et131x_adapter *adapter) in et131x_xcvr_init() argument
1472 struct phy_device *phydev = adapter->phydev; in et131x_xcvr_init()
1482 if ((adapter->eeprom_data[1] & 0x4) == 0) { in et131x_xcvr_init()
1483 et131x_mii_read(adapter, PHY_LED_2, &lcr2); in et131x_xcvr_init()
1488 if ((adapter->eeprom_data[1] & 0x8) == 0) in et131x_xcvr_init()
1493 et131x_mii_write(adapter, phydev->addr, PHY_LED_2, lcr2); in et131x_xcvr_init()
1498 static void et131x_configure_global_regs(struct et131x_adapter *adapter) in et131x_configure_global_regs() argument
1500 struct global_regs __iomem *regs = &adapter->regs->global; in et131x_configure_global_regs()
1505 if (adapter->registry_jumbo_packet < 2048) { in et131x_configure_global_regs()
1513 } else if (adapter->registry_jumbo_packet < 8192) { in et131x_configure_global_regs()
1539 static void et131x_config_rx_dma_regs(struct et131x_adapter *adapter) in et131x_config_rx_dma_regs() argument
1541 struct rxdma_regs __iomem *rx_dma = &adapter->regs->rxdma; in et131x_config_rx_dma_regs()
1542 struct rx_ring *rx_local = &adapter->rx_ring; in et131x_config_rx_dma_regs()
1549 et131x_rx_dma_disable(adapter); in et131x_config_rx_dma_regs()
1567 spin_lock_irqsave(&adapter->rcv_lock, flags); in et131x_config_rx_dma_regs()
1631 spin_unlock_irqrestore(&adapter->rcv_lock, flags); in et131x_config_rx_dma_regs()
1639 static void et131x_config_tx_dma_regs(struct et131x_adapter *adapter) in et131x_config_tx_dma_regs() argument
1641 struct txdma_regs __iomem *txdma = &adapter->regs->txdma; in et131x_config_tx_dma_regs()
1642 struct tx_ring *tx_ring = &adapter->tx_ring; in et131x_config_tx_dma_regs()
1662 static void et131x_adapter_setup(struct et131x_adapter *adapter) in et131x_adapter_setup() argument
1664 et131x_configure_global_regs(adapter); in et131x_adapter_setup()
1665 et1310_config_mac_regs1(adapter); in et131x_adapter_setup()
1669 writel(ET_MMC_ENABLE, &adapter->regs->mmc.mmc_ctrl); in et131x_adapter_setup()
1671 et1310_config_rxmac_regs(adapter); in et131x_adapter_setup()
1672 et1310_config_txmac_regs(adapter); in et131x_adapter_setup()
1674 et131x_config_rx_dma_regs(adapter); in et131x_adapter_setup()
1675 et131x_config_tx_dma_regs(adapter); in et131x_adapter_setup()
1677 et1310_config_macstat_regs(adapter); in et131x_adapter_setup()
1679 et1310_phy_power_switch(adapter, 0); in et131x_adapter_setup()
1680 et131x_xcvr_init(adapter); in et131x_adapter_setup()
1684 static void et131x_soft_reset(struct et131x_adapter *adapter) in et131x_soft_reset() argument
1692 writel(reg, &adapter->regs->mac.cfg1); in et131x_soft_reset()
1695 writel(reg, &adapter->regs->global.sw_reset); in et131x_soft_reset()
1699 writel(reg, &adapter->regs->mac.cfg1); in et131x_soft_reset()
1700 writel(0, &adapter->regs->mac.cfg1); in et131x_soft_reset()
1703 static void et131x_enable_interrupts(struct et131x_adapter *adapter) in et131x_enable_interrupts() argument
1707 if (adapter->flow == FLOW_TXONLY || adapter->flow == FLOW_BOTH) in et131x_enable_interrupts()
1712 writel(mask, &adapter->regs->global.int_mask); in et131x_enable_interrupts()
1715 static void et131x_disable_interrupts(struct et131x_adapter *adapter) in et131x_disable_interrupts() argument
1717 writel(INT_MASK_DISABLE, &adapter->regs->global.int_mask); in et131x_disable_interrupts()
1720 static void et131x_tx_dma_disable(struct et131x_adapter *adapter) in et131x_tx_dma_disable() argument
1724 &adapter->regs->txdma.csr); in et131x_tx_dma_disable()
1729 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_enable_txrx() local
1731 et131x_rx_dma_enable(adapter); in et131x_enable_txrx()
1732 et131x_tx_dma_enable(adapter); in et131x_enable_txrx()
1734 if (adapter->flags & FMP_ADAPTER_INTERRUPT_IN_USE) in et131x_enable_txrx()
1735 et131x_enable_interrupts(adapter); in et131x_enable_txrx()
1742 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_disable_txrx() local
1746 et131x_rx_dma_disable(adapter); in et131x_disable_txrx()
1747 et131x_tx_dma_disable(adapter); in et131x_disable_txrx()
1749 et131x_disable_interrupts(adapter); in et131x_disable_txrx()
1752 static void et131x_init_send(struct et131x_adapter *adapter) in et131x_init_send() argument
1755 struct tx_ring *tx_ring = &adapter->tx_ring; in et131x_init_send()
1785 static void et1310_enable_phy_coma(struct et131x_adapter *adapter) in et1310_enable_phy_coma() argument
1787 u32 pmcsr = readl(&adapter->regs->global.pm_csr); in et1310_enable_phy_coma()
1790 adapter->flags |= FMP_ADAPTER_LOWER_POWER; in et1310_enable_phy_coma()
1793 et131x_disable_txrx(adapter->netdev); in et1310_enable_phy_coma()
1797 writel(pmcsr, &adapter->regs->global.pm_csr); in et1310_enable_phy_coma()
1801 writel(pmcsr, &adapter->regs->global.pm_csr); in et1310_enable_phy_coma()
1804 static void et1310_disable_phy_coma(struct et131x_adapter *adapter) in et1310_disable_phy_coma() argument
1808 pmcsr = readl(&adapter->regs->global.pm_csr); in et1310_disable_phy_coma()
1813 writel(pmcsr, &adapter->regs->global.pm_csr); in et1310_disable_phy_coma()
1820 et131x_init_send(adapter); in et1310_disable_phy_coma()
1826 et131x_soft_reset(adapter); in et1310_disable_phy_coma()
1828 et131x_adapter_setup(adapter); in et1310_disable_phy_coma()
1831 adapter->flags &= ~FMP_ADAPTER_LOWER_POWER; in et1310_disable_phy_coma()
1833 et131x_enable_txrx(adapter->netdev); in et1310_disable_phy_coma()
1861 static int et131x_rx_dma_memory_alloc(struct et131x_adapter *adapter) in et131x_rx_dma_memory_alloc() argument
1868 struct rx_ring *rx_ring = &adapter->rx_ring; in et131x_rx_dma_memory_alloc()
1896 if (adapter->registry_jumbo_packet < 2048) { in et131x_rx_dma_memory_alloc()
1901 } else if (adapter->registry_jumbo_packet < 4096) { in et131x_rx_dma_memory_alloc()
1920 fbr->ring_virtaddr = dma_alloc_coherent(&adapter->pdev->dev, in et131x_rx_dma_memory_alloc()
1925 dev_err(&adapter->pdev->dev, in et131x_rx_dma_memory_alloc()
1940 &adapter->pdev->dev, fbr_chunksize, in et131x_rx_dma_memory_alloc()
1945 dev_err(&adapter->pdev->dev, in et131x_rx_dma_memory_alloc()
1975 rx_ring->ps_ring_virtaddr = dma_alloc_coherent(&adapter->pdev->dev, in et131x_rx_dma_memory_alloc()
1981 dev_err(&adapter->pdev->dev, in et131x_rx_dma_memory_alloc()
1987 rx_ring->rx_status_block = dma_alloc_coherent(&adapter->pdev->dev, in et131x_rx_dma_memory_alloc()
1992 dev_err(&adapter->pdev->dev, in et131x_rx_dma_memory_alloc()
2005 static void et131x_rx_dma_memory_free(struct et131x_adapter *adapter) in et131x_rx_dma_memory_free() argument
2012 struct rx_ring *rx_ring = &adapter->rx_ring; in et131x_rx_dma_memory_free()
2039 dma_free_coherent(&adapter->pdev->dev, in et131x_rx_dma_memory_free()
2050 dma_free_coherent(&adapter->pdev->dev, in et131x_rx_dma_memory_free()
2062 dma_free_coherent(&adapter->pdev->dev, psr_size, in et131x_rx_dma_memory_free()
2071 dma_free_coherent(&adapter->pdev->dev, in et131x_rx_dma_memory_free()
2087 static int et131x_init_recv(struct et131x_adapter *adapter) in et131x_init_recv() argument
2091 struct rx_ring *rx_ring = &adapter->rx_ring; in et131x_init_recv()
2112 static void et131x_set_rx_dma_timer(struct et131x_adapter *adapter) in et131x_set_rx_dma_timer() argument
2114 struct phy_device *phydev = adapter->phydev; in et131x_set_rx_dma_timer()
2120 writel(0, &adapter->regs->rxdma.max_pkt_time); in et131x_set_rx_dma_timer()
2121 writel(1, &adapter->regs->rxdma.num_pkt_done); in et131x_set_rx_dma_timer()
2126 static void nic_return_rfd(struct et131x_adapter *adapter, struct rfd *rfd) in nic_return_rfd() argument
2128 struct rx_ring *rx_local = &adapter->rx_ring; in nic_return_rfd()
2129 struct rxdma_regs __iomem *rx_dma = &adapter->regs->rxdma; in nic_return_rfd()
2163 dev_err(&adapter->pdev->dev, in nic_return_rfd()
2170 spin_lock_irqsave(&adapter->rcv_lock, flags); in nic_return_rfd()
2173 spin_unlock_irqrestore(&adapter->rcv_lock, flags); in nic_return_rfd()
2185 static struct rfd *nic_rx_pkts(struct et131x_adapter *adapter) in nic_rx_pkts() argument
2187 struct rx_ring *rx_local = &adapter->rx_ring; in nic_rx_pkts()
2234 writel(rx_local->local_psr_full, &adapter->regs->rxdma.psr_full_offset); in nic_rx_pkts()
2238 dev_err(&adapter->pdev->dev, in nic_rx_pkts()
2245 spin_lock_irqsave(&adapter->rcv_lock, flags); in nic_rx_pkts()
2251 spin_unlock_irqrestore(&adapter->rcv_lock, flags); in nic_rx_pkts()
2258 spin_unlock_irqrestore(&adapter->rcv_lock, flags); in nic_rx_pkts()
2268 adapter->stats.rx_other_errs++; in nic_rx_pkts()
2274 adapter->stats.multicast_pkts_rcvd++; in nic_rx_pkts()
2282 adapter->netdev->stats.rx_bytes += rfd->len; in nic_rx_pkts()
2286 skb->protocol = eth_type_trans(skb, adapter->netdev); in nic_rx_pkts()
2291 nic_return_rfd(adapter, rfd); in nic_rx_pkts()
2295 static int et131x_handle_recv_pkts(struct et131x_adapter *adapter, int budget) in et131x_handle_recv_pkts() argument
2301 struct rx_ring *rx_ring = &adapter->rx_ring; in et131x_handle_recv_pkts()
2314 rfd = nic_rx_pkts(adapter); in et131x_handle_recv_pkts()
2324 if (!adapter->packet_filter || in et131x_handle_recv_pkts()
2325 !netif_carrier_ok(adapter->netdev) || in et131x_handle_recv_pkts()
2329 adapter->netdev->stats.rx_packets++; in et131x_handle_recv_pkts()
2332 dev_warn(&adapter->pdev->dev, "RFD's are running out\n"); in et131x_handle_recv_pkts()
2340 &adapter->regs->global.watchdog_timer); in et131x_handle_recv_pkts()
2357 static int et131x_tx_dma_memory_alloc(struct et131x_adapter *adapter) in et131x_tx_dma_memory_alloc() argument
2360 struct tx_ring *tx_ring = &adapter->tx_ring; in et131x_tx_dma_memory_alloc()
2369 tx_ring->tx_desc_ring = dma_alloc_coherent(&adapter->pdev->dev, in et131x_tx_dma_memory_alloc()
2374 dev_err(&adapter->pdev->dev, in et131x_tx_dma_memory_alloc()
2379 tx_ring->tx_status = dma_alloc_coherent(&adapter->pdev->dev, in et131x_tx_dma_memory_alloc()
2384 dev_err(&adapter->pdev->dev, in et131x_tx_dma_memory_alloc()
2391 static void et131x_tx_dma_memory_free(struct et131x_adapter *adapter) in et131x_tx_dma_memory_free() argument
2394 struct tx_ring *tx_ring = &adapter->tx_ring; in et131x_tx_dma_memory_free()
2399 dma_free_coherent(&adapter->pdev->dev, in et131x_tx_dma_memory_free()
2408 dma_free_coherent(&adapter->pdev->dev, in et131x_tx_dma_memory_free()
2420 static int nic_send_packet(struct et131x_adapter *adapter, struct tcb *tcb) in nic_send_packet() argument
2429 struct phy_device *phydev = adapter->phydev; in nic_send_packet()
2431 struct tx_ring *tx_ring = &adapter->tx_ring; in nic_send_packet()
2462 dma_addr = dma_map_single(&adapter->pdev->dev, in nic_send_packet()
2471 dma_addr = dma_map_single(&adapter->pdev->dev, in nic_send_packet()
2480 dma_addr = dma_map_single(&adapter->pdev->dev, in nic_send_packet()
2491 dma_addr = skb_frag_dma_map(&adapter->pdev->dev, in nic_send_packet()
2559 spin_lock(&adapter->tcb_send_qlock); in nic_send_packet()
2572 spin_unlock(&adapter->tcb_send_qlock); in nic_send_packet()
2575 writel(tx_ring->send_idx, &adapter->regs->txdma.service_request); in nic_send_packet()
2582 &adapter->regs->global.watchdog_timer); in nic_send_packet()
2587 static int send_packet(struct sk_buff *skb, struct et131x_adapter *adapter) in send_packet() argument
2592 struct tx_ring *tx_ring = &adapter->tx_ring; in send_packet()
2598 spin_lock_irqsave(&adapter->tcb_ready_qlock, flags); in send_packet()
2603 spin_unlock_irqrestore(&adapter->tcb_ready_qlock, flags); in send_packet()
2612 spin_unlock_irqrestore(&adapter->tcb_ready_qlock, flags); in send_packet()
2617 status = nic_send_packet(adapter, tcb); in send_packet()
2620 spin_lock_irqsave(&adapter->tcb_ready_qlock, flags); in send_packet()
2629 spin_unlock_irqrestore(&adapter->tcb_ready_qlock, flags); in send_packet()
2637 static inline void free_send_packet(struct et131x_adapter *adapter, in free_send_packet() argument
2642 struct net_device_stats *stats = &adapter->netdev->stats; in free_send_packet()
2643 struct tx_ring *tx_ring = &adapter->tx_ring; in free_send_packet()
2660 dma_unmap_single(&adapter->pdev->dev, in free_send_packet()
2678 spin_lock_irqsave(&adapter->tcb_ready_qlock, flags); in free_send_packet()
2689 spin_unlock_irqrestore(&adapter->tcb_ready_qlock, flags); in free_send_packet()
2694 static void et131x_free_busy_send_packets(struct et131x_adapter *adapter) in et131x_free_busy_send_packets() argument
2699 struct tx_ring *tx_ring = &adapter->tx_ring; in et131x_free_busy_send_packets()
2702 spin_lock_irqsave(&adapter->tcb_send_qlock, flags); in et131x_free_busy_send_packets()
2716 spin_unlock_irqrestore(&adapter->tcb_send_qlock, flags); in et131x_free_busy_send_packets()
2719 free_send_packet(adapter, tcb); in et131x_free_busy_send_packets()
2721 spin_lock_irqsave(&adapter->tcb_send_qlock, flags); in et131x_free_busy_send_packets()
2728 spin_unlock_irqrestore(&adapter->tcb_send_qlock, flags); in et131x_free_busy_send_packets()
2738 static void et131x_handle_send_pkts(struct et131x_adapter *adapter) in et131x_handle_send_pkts() argument
2744 struct tx_ring *tx_ring = &adapter->tx_ring; in et131x_handle_send_pkts()
2746 serviced = readl(&adapter->regs->txdma.new_service_complete); in et131x_handle_send_pkts()
2752 spin_lock_irqsave(&adapter->tcb_send_qlock, flags); in et131x_handle_send_pkts()
2764 spin_unlock_irqrestore(&adapter->tcb_send_qlock, flags); in et131x_handle_send_pkts()
2765 free_send_packet(adapter, tcb); in et131x_handle_send_pkts()
2766 spin_lock_irqsave(&adapter->tcb_send_qlock, flags); in et131x_handle_send_pkts()
2779 spin_unlock_irqrestore(&adapter->tcb_send_qlock, flags); in et131x_handle_send_pkts()
2780 free_send_packet(adapter, tcb); in et131x_handle_send_pkts()
2781 spin_lock_irqsave(&adapter->tcb_send_qlock, flags); in et131x_handle_send_pkts()
2789 netif_wake_queue(adapter->netdev); in et131x_handle_send_pkts()
2791 spin_unlock_irqrestore(&adapter->tcb_send_qlock, flags); in et131x_handle_send_pkts()
2797 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_get_settings() local
2799 return phy_ethtool_gset(adapter->phydev, cmd); in et131x_get_settings()
2805 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_set_settings() local
2807 return phy_ethtool_sset(adapter->phydev, cmd); in et131x_set_settings()
2819 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_get_regs() local
2820 struct address_map __iomem *aregs = adapter->regs; in et131x_get_regs()
2827 regs->version = (1 << 24) | (adapter->pdev->revision << 16) | in et131x_get_regs()
2828 adapter->pdev->device; in et131x_get_regs()
2831 et131x_mii_read(adapter, MII_BMCR, &tmp); in et131x_get_regs()
2833 et131x_mii_read(adapter, MII_BMSR, &tmp); in et131x_get_regs()
2835 et131x_mii_read(adapter, MII_PHYSID1, &tmp); in et131x_get_regs()
2837 et131x_mii_read(adapter, MII_PHYSID2, &tmp); in et131x_get_regs()
2839 et131x_mii_read(adapter, MII_ADVERTISE, &tmp); in et131x_get_regs()
2841 et131x_mii_read(adapter, MII_LPA, &tmp); in et131x_get_regs()
2843 et131x_mii_read(adapter, MII_EXPANSION, &tmp); in et131x_get_regs()
2846 et131x_mii_read(adapter, 0x07, &tmp); in et131x_get_regs()
2849 et131x_mii_read(adapter, 0x08, &tmp); in et131x_get_regs()
2851 et131x_mii_read(adapter, MII_CTRL1000, &tmp); in et131x_get_regs()
2853 et131x_mii_read(adapter, MII_STAT1000, &tmp); in et131x_get_regs()
2855 et131x_mii_read(adapter, 0x0b, &tmp); in et131x_get_regs()
2857 et131x_mii_read(adapter, 0x0c, &tmp); in et131x_get_regs()
2859 et131x_mii_read(adapter, MII_MMD_CTRL, &tmp); in et131x_get_regs()
2861 et131x_mii_read(adapter, MII_MMD_DATA, &tmp); in et131x_get_regs()
2863 et131x_mii_read(adapter, MII_ESTATUS, &tmp); in et131x_get_regs()
2866 et131x_mii_read(adapter, PHY_INDEX_REG, &tmp); in et131x_get_regs()
2868 et131x_mii_read(adapter, PHY_DATA_REG, &tmp); in et131x_get_regs()
2870 et131x_mii_read(adapter, PHY_MPHY_CONTROL_REG, &tmp); in et131x_get_regs()
2872 et131x_mii_read(adapter, PHY_LOOPBACK_CONTROL, &tmp); in et131x_get_regs()
2874 et131x_mii_read(adapter, PHY_LOOPBACK_CONTROL + 1, &tmp); in et131x_get_regs()
2877 et131x_mii_read(adapter, PHY_REGISTER_MGMT_CONTROL, &tmp); in et131x_get_regs()
2879 et131x_mii_read(adapter, PHY_CONFIG, &tmp); in et131x_get_regs()
2881 et131x_mii_read(adapter, PHY_PHY_CONTROL, &tmp); in et131x_get_regs()
2883 et131x_mii_read(adapter, PHY_INTERRUPT_MASK, &tmp); in et131x_get_regs()
2885 et131x_mii_read(adapter, PHY_INTERRUPT_STATUS, &tmp); in et131x_get_regs()
2887 et131x_mii_read(adapter, PHY_PHY_STATUS, &tmp); in et131x_get_regs()
2889 et131x_mii_read(adapter, PHY_LED_1, &tmp); in et131x_get_regs()
2891 et131x_mii_read(adapter, PHY_LED_2, &tmp); in et131x_get_regs()
2900 regs_buff[num++] = adapter->stats.interrupt_status; in et131x_get_regs()
2973 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_get_drvinfo() local
2977 strlcpy(info->bus_info, pci_name(adapter->pdev), in et131x_get_drvinfo()
2991 static void et131x_hwaddr_init(struct et131x_adapter *adapter) in et131x_hwaddr_init() argument
2997 if (is_zero_ether_addr(adapter->rom_addr)) { in et131x_hwaddr_init()
3002 get_random_bytes(&adapter->addr[5], 1); in et131x_hwaddr_init()
3007 ether_addr_copy(adapter->rom_addr, adapter->addr); in et131x_hwaddr_init()
3013 ether_addr_copy(adapter->addr, adapter->rom_addr); in et131x_hwaddr_init()
3017 static int et131x_pci_init(struct et131x_adapter *adapter, in et131x_pci_init() argument
3023 rc = et131x_init_eeprom(adapter); in et131x_pci_init()
3072 if (!adapter->has_eeprom) { in et131x_pci_init()
3073 et131x_hwaddr_init(adapter); in et131x_pci_init()
3079 adapter->rom_addr + i)) { in et131x_pci_init()
3084 ether_addr_copy(adapter->addr, adapter->rom_addr); in et131x_pci_init()
3100 struct et131x_adapter *adapter = (struct et131x_adapter *)data; in et131x_error_timer_handler() local
3101 struct phy_device *phydev = adapter->phydev; in et131x_error_timer_handler()
3103 if (et1310_in_phy_coma(adapter)) { in et131x_error_timer_handler()
3108 et1310_disable_phy_coma(adapter); in et131x_error_timer_handler()
3109 adapter->boot_coma = 20; in et131x_error_timer_handler()
3111 et1310_update_macstat_host_counters(adapter); in et131x_error_timer_handler()
3114 if (!phydev->link && adapter->boot_coma < 11) in et131x_error_timer_handler()
3115 adapter->boot_coma++; in et131x_error_timer_handler()
3117 if (adapter->boot_coma == 10) { in et131x_error_timer_handler()
3119 if (!et1310_in_phy_coma(adapter)) { in et131x_error_timer_handler()
3123 et131x_enable_interrupts(adapter); in et131x_error_timer_handler()
3124 et1310_enable_phy_coma(adapter); in et131x_error_timer_handler()
3130 mod_timer(&adapter->error_timer, jiffies + in et131x_error_timer_handler()
3134 static void et131x_adapter_memory_free(struct et131x_adapter *adapter) in et131x_adapter_memory_free() argument
3136 et131x_tx_dma_memory_free(adapter); in et131x_adapter_memory_free()
3137 et131x_rx_dma_memory_free(adapter); in et131x_adapter_memory_free()
3140 static int et131x_adapter_memory_alloc(struct et131x_adapter *adapter) in et131x_adapter_memory_alloc() argument
3144 status = et131x_tx_dma_memory_alloc(adapter); in et131x_adapter_memory_alloc()
3146 dev_err(&adapter->pdev->dev, in et131x_adapter_memory_alloc()
3148 et131x_tx_dma_memory_free(adapter); in et131x_adapter_memory_alloc()
3152 status = et131x_rx_dma_memory_alloc(adapter); in et131x_adapter_memory_alloc()
3154 dev_err(&adapter->pdev->dev, in et131x_adapter_memory_alloc()
3156 et131x_adapter_memory_free(adapter); in et131x_adapter_memory_alloc()
3160 status = et131x_init_recv(adapter); in et131x_adapter_memory_alloc()
3162 dev_err(&adapter->pdev->dev, "et131x_init_recv FAILED\n"); in et131x_adapter_memory_alloc()
3163 et131x_adapter_memory_free(adapter); in et131x_adapter_memory_alloc()
3170 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_adjust_link() local
3171 struct phy_device *phydev = adapter->phydev; in et131x_adjust_link()
3175 if (phydev->link == adapter->link) in et131x_adjust_link()
3182 if (et1310_in_phy_coma(adapter)) in et131x_adjust_link()
3183 et1310_disable_phy_coma(adapter); in et131x_adjust_link()
3185 adapter->link = phydev->link; in et131x_adjust_link()
3189 adapter->boot_coma = 20; in et131x_adjust_link()
3193 et131x_mii_read(adapter, PHY_MPHY_CONTROL_REG, in et131x_adjust_link()
3195 et131x_mii_write(adapter, phydev->addr, in et131x_adjust_link()
3198 et131x_mii_write(adapter, phydev->addr, PHY_INDEX_REG, in et131x_adjust_link()
3200 et131x_mii_write(adapter, phydev->addr, PHY_DATA_REG, in et131x_adjust_link()
3202 et131x_mii_write(adapter, phydev->addr, in et131x_adjust_link()
3206 et1310_config_flow_control(adapter); in et131x_adjust_link()
3209 adapter->registry_jumbo_packet > 2048) { in et131x_adjust_link()
3212 et131x_mii_read(adapter, PHY_CONFIG, &reg); in et131x_adjust_link()
3215 et131x_mii_write(adapter, phydev->addr, PHY_CONFIG, in et131x_adjust_link()
3219 et131x_set_rx_dma_timer(adapter); in et131x_adjust_link()
3220 et1310_config_mac_regs2(adapter); in et131x_adjust_link()
3222 adapter->boot_coma = 0; in et131x_adjust_link()
3227 et131x_mii_read(adapter, PHY_MPHY_CONTROL_REG, in et131x_adjust_link()
3229 et131x_mii_write(adapter, phydev->addr, in et131x_adjust_link()
3232 et131x_mii_write(adapter, phydev->addr, in et131x_adjust_link()
3234 et131x_mii_write(adapter, phydev->addr, in et131x_adjust_link()
3236 et131x_mii_write(adapter, phydev->addr, in et131x_adjust_link()
3240 et131x_free_busy_send_packets(adapter); in et131x_adjust_link()
3241 et131x_init_send(adapter); in et131x_adjust_link()
3248 et131x_soft_reset(adapter); in et131x_adjust_link()
3250 et131x_adapter_setup(adapter); in et131x_adjust_link()
3259 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_mii_probe() local
3262 phydev = phy_find_first(adapter->mii_bus); in et131x_mii_probe()
3264 dev_err(&adapter->pdev->dev, "no PHY found\n"); in et131x_mii_probe()
3272 dev_err(&adapter->pdev->dev, "Could not attach to PHY\n"); in et131x_mii_probe()
3284 if (adapter->pdev->device != ET131X_PCI_DEVICE_ID_FAST) in et131x_mii_probe()
3290 adapter->phydev = phydev; in et131x_mii_probe()
3292 dev_info(&adapter->pdev->dev, in et131x_mii_probe()
3304 struct et131x_adapter *adapter; in et131x_adapter_init() local
3306 adapter = netdev_priv(netdev); in et131x_adapter_init()
3307 adapter->pdev = pci_dev_get(pdev); in et131x_adapter_init()
3308 adapter->netdev = netdev; in et131x_adapter_init()
3310 spin_lock_init(&adapter->tcb_send_qlock); in et131x_adapter_init()
3311 spin_lock_init(&adapter->tcb_ready_qlock); in et131x_adapter_init()
3312 spin_lock_init(&adapter->rcv_lock); in et131x_adapter_init()
3314 adapter->registry_jumbo_packet = 1514; /* 1514-9216 */ in et131x_adapter_init()
3316 ether_addr_copy(adapter->addr, default_mac); in et131x_adapter_init()
3318 return adapter; in et131x_adapter_init()
3324 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_pci_remove() local
3327 netif_napi_del(&adapter->napi); in et131x_pci_remove()
3328 phy_disconnect(adapter->phydev); in et131x_pci_remove()
3329 mdiobus_unregister(adapter->mii_bus); in et131x_pci_remove()
3330 kfree(adapter->mii_bus->irq); in et131x_pci_remove()
3331 mdiobus_free(adapter->mii_bus); in et131x_pci_remove()
3333 et131x_adapter_memory_free(adapter); in et131x_pci_remove()
3334 iounmap(adapter->regs); in et131x_pci_remove()
3344 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_up() local
3347 phy_start(adapter->phydev); in et131x_up()
3352 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_down() local
3357 phy_stop(adapter->phydev); in et131x_down()
3398 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_isr() local
3399 struct address_map __iomem *iomem = adapter->regs; in et131x_isr()
3400 struct rx_ring *rx_ring = &adapter->rx_ring; in et131x_isr()
3401 struct tx_ring *tx_ring = &adapter->tx_ring; in et131x_isr()
3410 et131x_disable_interrupts(adapter); in et131x_isr()
3412 status = readl(&adapter->regs->global.int_status); in et131x_isr()
3414 if (adapter->flow == FLOW_TXONLY || adapter->flow == FLOW_BOTH) in et131x_isr()
3422 et131x_enable_interrupts(adapter); in et131x_isr()
3437 writel(0, &adapter->regs->global.watchdog_timer); in et131x_isr()
3444 napi_schedule(&adapter->napi); in et131x_isr()
3456 dev_warn(&adapter->pdev->dev, in et131x_isr()
3477 if (adapter->flow == FLOW_TXONLY || adapter->flow == FLOW_BOTH) { in et131x_isr()
3484 if (!et1310_in_phy_coma(adapter)) in et131x_isr()
3517 dev_warn(&adapter->pdev->dev, "RxDMA_ERR interrupt, error %x\n", in et131x_isr()
3527 dev_err(&adapter->pdev->dev, "WAKE_ON_LAN interrupt\n"); in et131x_isr()
3541 dev_warn(&adapter->pdev->dev, "TXMAC interrupt, error 0x%08x\n", in et131x_isr()
3554 dev_warn(&adapter->pdev->dev, in et131x_isr()
3558 dev_warn(&adapter->pdev->dev, in et131x_isr()
3573 et1310_handle_macstat_interrupt(adapter); in et131x_isr()
3587 et131x_enable_interrupts(adapter); in et131x_isr()
3594 struct et131x_adapter *adapter = in et131x_poll() local
3596 int work_done = et131x_handle_recv_pkts(adapter, budget); in et131x_poll()
3598 et131x_handle_send_pkts(adapter); in et131x_poll()
3601 napi_complete(&adapter->napi); in et131x_poll()
3602 et131x_enable_interrupts(adapter); in et131x_poll()
3611 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_stats() local
3612 struct net_device_stats *stats = &adapter->netdev->stats; in et131x_stats()
3613 struct ce_stats *devstat = &adapter->stats; in et131x_stats()
3644 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_open() local
3645 struct pci_dev *pdev = adapter->pdev; in et131x_open()
3650 init_timer(&adapter->error_timer); in et131x_open()
3651 adapter->error_timer.expires = jiffies + in et131x_open()
3653 adapter->error_timer.function = et131x_error_timer_handler; in et131x_open()
3654 adapter->error_timer.data = (unsigned long)adapter; in et131x_open()
3655 add_timer(&adapter->error_timer); in et131x_open()
3664 adapter->flags |= FMP_ADAPTER_INTERRUPT_IN_USE; in et131x_open()
3666 napi_enable(&adapter->napi); in et131x_open()
3675 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_close() local
3678 napi_disable(&adapter->napi); in et131x_close()
3680 adapter->flags &= ~FMP_ADAPTER_INTERRUPT_IN_USE; in et131x_close()
3681 free_irq(adapter->pdev->irq, netdev); in et131x_close()
3684 return del_timer_sync(&adapter->error_timer); in et131x_close()
3690 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_ioctl() local
3692 if (!adapter->phydev) in et131x_ioctl()
3695 return phy_mii_ioctl(adapter->phydev, reqbuf, cmd); in et131x_ioctl()
3699 static int et131x_set_packet_filter(struct et131x_adapter *adapter) in et131x_set_packet_filter() argument
3701 int filter = adapter->packet_filter; in et131x_set_packet_filter()
3705 ctrl = readl(&adapter->regs->rxmac.ctrl); in et131x_set_packet_filter()
3706 pf_ctrl = readl(&adapter->regs->rxmac.pf_ctrl); in et131x_set_packet_filter()
3724 et1310_setup_device_for_multicast(adapter); in et131x_set_packet_filter()
3731 et1310_setup_device_for_unicast(adapter); in et131x_set_packet_filter()
3748 writel(pf_ctrl, &adapter->regs->rxmac.pf_ctrl); in et131x_set_packet_filter()
3749 writel(ctrl, &adapter->regs->rxmac.ctrl); in et131x_set_packet_filter()
3756 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_multicast() local
3765 packet_filter = adapter->packet_filter; in et131x_multicast()
3778 adapter->packet_filter |= ET131X_PACKET_TYPE_PROMISCUOUS; in et131x_multicast()
3780 adapter->packet_filter &= ~ET131X_PACKET_TYPE_PROMISCUOUS; in et131x_multicast()
3784 adapter->packet_filter |= ET131X_PACKET_TYPE_ALL_MULTICAST; in et131x_multicast()
3787 adapter->packet_filter &= ~ET131X_PACKET_TYPE_ALL_MULTICAST; in et131x_multicast()
3788 adapter->packet_filter &= ~ET131X_PACKET_TYPE_MULTICAST; in et131x_multicast()
3790 adapter->packet_filter |= ET131X_PACKET_TYPE_MULTICAST; in et131x_multicast()
3798 ether_addr_copy(adapter->multicast_list[i++], ha->addr); in et131x_multicast()
3800 adapter->multicast_addr_count = i; in et131x_multicast()
3808 if (packet_filter != adapter->packet_filter) in et131x_multicast()
3809 et131x_set_packet_filter(adapter); in et131x_multicast()
3814 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_tx() local
3815 struct tx_ring *tx_ring = &adapter->tx_ring; in et131x_tx()
3828 if ((adapter->flags & FMP_ADAPTER_FAIL_SEND_MASK) || in et131x_tx()
3832 if (send_packet(skb, adapter)) in et131x_tx()
3839 adapter->netdev->stats.tx_dropped++; in et131x_tx()
3851 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_tx_timeout() local
3852 struct tx_ring *tx_ring = &adapter->tx_ring; in et131x_tx_timeout()
3857 if (~(adapter->flags & FMP_ADAPTER_INTERRUPT_IN_USE)) in et131x_tx_timeout()
3863 if (adapter->flags & FMP_ADAPTER_NON_RECOVER_ERROR) in et131x_tx_timeout()
3867 if (adapter->flags & FMP_ADAPTER_HARDWARE_ERROR) { in et131x_tx_timeout()
3868 dev_err(&adapter->pdev->dev, "hardware error - reset\n"); in et131x_tx_timeout()
3873 spin_lock_irqsave(&adapter->tcb_send_qlock, flags); in et131x_tx_timeout()
3875 spin_unlock_irqrestore(&adapter->tcb_send_qlock, flags); in et131x_tx_timeout()
3881 dev_warn(&adapter->pdev->dev, in et131x_tx_timeout()
3885 adapter->netdev->stats.tx_errors++; in et131x_tx_timeout()
3897 struct et131x_adapter *adapter = netdev_priv(netdev); in et131x_change_mtu() local
3906 et131x_adapter_memory_free(adapter); in et131x_change_mtu()
3909 adapter->registry_jumbo_packet = new_mtu + 14; in et131x_change_mtu()
3910 et131x_soft_reset(adapter); in et131x_change_mtu()
3912 result = et131x_adapter_memory_alloc(adapter); in et131x_change_mtu()
3914 dev_warn(&adapter->pdev->dev, in et131x_change_mtu()
3919 et131x_init_send(adapter); in et131x_change_mtu()
3920 et131x_hwaddr_init(adapter); in et131x_change_mtu()
3921 ether_addr_copy(netdev->dev_addr, adapter->addr); in et131x_change_mtu()
3924 et131x_adapter_setup(adapter); in et131x_change_mtu()
3947 struct et131x_adapter *adapter; in et131x_pci_setup() local
3993 adapter = et131x_adapter_init(netdev, pdev); in et131x_pci_setup()
3995 rc = et131x_pci_init(adapter, pdev); in et131x_pci_setup()
4000 adapter->regs = pci_ioremap_bar(pdev, 0); in et131x_pci_setup()
4001 if (!adapter->regs) { in et131x_pci_setup()
4008 writel(ET_PMCSR_INIT, &adapter->regs->global.pm_csr); in et131x_pci_setup()
4010 et131x_soft_reset(adapter); in et131x_pci_setup()
4011 et131x_disable_interrupts(adapter); in et131x_pci_setup()
4013 rc = et131x_adapter_memory_alloc(adapter); in et131x_pci_setup()
4019 et131x_init_send(adapter); in et131x_pci_setup()
4021 netif_napi_add(netdev, &adapter->napi, et131x_poll, 64); in et131x_pci_setup()
4023 ether_addr_copy(netdev->dev_addr, adapter->addr); in et131x_pci_setup()
4027 adapter->mii_bus = mdiobus_alloc(); in et131x_pci_setup()
4028 if (!adapter->mii_bus) { in et131x_pci_setup()
4033 adapter->mii_bus->name = "et131x_eth_mii"; in et131x_pci_setup()
4034 snprintf(adapter->mii_bus->id, MII_BUS_ID_SIZE, "%x", in et131x_pci_setup()
4035 (adapter->pdev->bus->number << 8) | adapter->pdev->devfn); in et131x_pci_setup()
4036 adapter->mii_bus->priv = netdev; in et131x_pci_setup()
4037 adapter->mii_bus->read = et131x_mdio_read; in et131x_pci_setup()
4038 adapter->mii_bus->write = et131x_mdio_write; in et131x_pci_setup()
4039 adapter->mii_bus->irq = kmalloc_array(PHY_MAX_ADDR, sizeof(int), in et131x_pci_setup()
4041 if (!adapter->mii_bus->irq) in et131x_pci_setup()
4045 adapter->mii_bus->irq[ii] = PHY_POLL; in et131x_pci_setup()
4047 rc = mdiobus_register(adapter->mii_bus); in et131x_pci_setup()
4059 et131x_adapter_setup(adapter); in et131x_pci_setup()
4062 adapter->boot_coma = 0; in et131x_pci_setup()
4063 et1310_disable_phy_coma(adapter); in et131x_pci_setup()
4087 phy_disconnect(adapter->phydev); in et131x_pci_setup()
4089 mdiobus_unregister(adapter->mii_bus); in et131x_pci_setup()
4091 kfree(adapter->mii_bus->irq); in et131x_pci_setup()
4093 mdiobus_free(adapter->mii_bus); in et131x_pci_setup()
4095 et131x_adapter_memory_free(adapter); in et131x_pci_setup()
4097 iounmap(adapter->regs); in et131x_pci_setup()