Lines Matching refs:adapter
207 static void atl1_check_options(struct atl1_adapter *adapter) in atl1_check_options() argument
209 struct pci_dev *pdev = adapter->pdev; in atl1_check_options()
210 int bd = adapter->bd_number; in atl1_check_options()
229 adapter->imt = (u16) val; in atl1_check_options()
231 adapter->imt = (u16) (opt.def); in atl1_check_options()
260 struct atl1_adapter *adapter = hw->back; in atl1_reset_hw() local
300 if (netif_msg_hw(adapter)) in atl1_reset_hw()
655 struct atl1_adapter *adapter = hw->back; in atl1_phy_reset() local
688 if (netif_msg_hw(adapter)) in atl1_phy_reset()
699 if (netif_msg_hw(adapter)) in atl1_phy_reset()
792 struct atl1_adapter *adapter = hw->back; in atl1_setup_link() local
803 if (netif_msg_link(adapter)) in atl1_setup_link()
811 if (netif_msg_link(adapter)) in atl1_setup_link()
887 struct atl1_adapter *adapter = hw->back; in atl1_get_speed_and_duplex() local
910 if (netif_msg_hw(adapter)) in atl1_get_speed_and_duplex()
947 static int atl1_sw_init(struct atl1_adapter *adapter) in atl1_sw_init() argument
949 struct atl1_hw *hw = &adapter->hw; in atl1_sw_init()
950 struct net_device *netdev = adapter->netdev; in atl1_sw_init()
955 adapter->wol = 0; in atl1_sw_init()
956 device_set_wakeup_enable(&adapter->pdev->dev, false); in atl1_sw_init()
957 adapter->rx_buffer_len = (hw->max_frame_size + 7) & ~7; in atl1_sw_init()
958 adapter->ict = 50000; /* 100ms */ in atl1_sw_init()
959 adapter->link_speed = SPEED_0; /* hardware init */ in atl1_sw_init()
960 adapter->link_duplex = FULL_DUPLEX; in atl1_sw_init()
974 hw->rx_jumbo_th = adapter->rx_buffer_len / 8; in atl1_sw_init()
992 spin_lock_init(&adapter->lock); in atl1_sw_init()
993 spin_lock_init(&adapter->mb_lock); in atl1_sw_init()
1000 struct atl1_adapter *adapter = netdev_priv(netdev); in mdio_read() local
1003 atl1_read_phy_reg(&adapter->hw, reg_num & 0x1f, &result); in mdio_read()
1011 struct atl1_adapter *adapter = netdev_priv(netdev); in mdio_write() local
1013 atl1_write_phy_reg(&adapter->hw, reg_num, val); in mdio_write()
1018 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_mii_ioctl() local
1025 spin_lock_irqsave(&adapter->lock, flags); in atl1_mii_ioctl()
1026 retval = generic_mii_ioctl(&adapter->mii, if_mii(ifr), cmd, NULL); in atl1_mii_ioctl()
1027 spin_unlock_irqrestore(&adapter->lock, flags); in atl1_mii_ioctl()
1038 static s32 atl1_setup_ring_resources(struct atl1_adapter *adapter) in atl1_setup_ring_resources() argument
1040 struct atl1_tpd_ring *tpd_ring = &adapter->tpd_ring; in atl1_setup_ring_resources()
1041 struct atl1_rfd_ring *rfd_ring = &adapter->rfd_ring; in atl1_setup_ring_resources()
1042 struct atl1_rrd_ring *rrd_ring = &adapter->rrd_ring; in atl1_setup_ring_resources()
1043 struct atl1_ring_header *ring_header = &adapter->ring_header; in atl1_setup_ring_resources()
1044 struct pci_dev *pdev = adapter->pdev; in atl1_setup_ring_resources()
1051 if (netif_msg_drv(adapter)) in atl1_setup_ring_resources()
1075 if (netif_msg_drv(adapter)) in atl1_setup_ring_resources()
1106 adapter->cmb.dma = rrd_ring->dma + rrd_ring->size; in atl1_setup_ring_resources()
1107 offset = (adapter->cmb.dma & 0x7) ? (8 - (adapter->cmb.dma & 0x7)) : 0; in atl1_setup_ring_resources()
1108 adapter->cmb.dma += offset; in atl1_setup_ring_resources()
1109 adapter->cmb.cmb = (struct coals_msg_block *) in atl1_setup_ring_resources()
1113 adapter->smb.dma = adapter->cmb.dma + sizeof(struct coals_msg_block); in atl1_setup_ring_resources()
1114 offset = (adapter->smb.dma & 0x7) ? (8 - (adapter->smb.dma & 0x7)) : 0; in atl1_setup_ring_resources()
1115 adapter->smb.dma += offset; in atl1_setup_ring_resources()
1116 adapter->smb.smb = (struct stats_msg_block *) in atl1_setup_ring_resources()
1117 ((u8 *) adapter->cmb.cmb + in atl1_setup_ring_resources()
1127 static void atl1_init_ring_ptrs(struct atl1_adapter *adapter) in atl1_init_ring_ptrs() argument
1129 struct atl1_tpd_ring *tpd_ring = &adapter->tpd_ring; in atl1_init_ring_ptrs()
1130 struct atl1_rfd_ring *rfd_ring = &adapter->rfd_ring; in atl1_init_ring_ptrs()
1131 struct atl1_rrd_ring *rrd_ring = &adapter->rrd_ring; in atl1_init_ring_ptrs()
1147 static void atl1_clean_rx_ring(struct atl1_adapter *adapter) in atl1_clean_rx_ring() argument
1149 struct atl1_rfd_ring *rfd_ring = &adapter->rfd_ring; in atl1_clean_rx_ring()
1150 struct atl1_rrd_ring *rrd_ring = &adapter->rrd_ring; in atl1_clean_rx_ring()
1152 struct pci_dev *pdev = adapter->pdev; in atl1_clean_rx_ring()
1187 static void atl1_clean_tx_ring(struct atl1_adapter *adapter) in atl1_clean_tx_ring() argument
1189 struct atl1_tpd_ring *tpd_ring = &adapter->tpd_ring; in atl1_clean_tx_ring()
1191 struct pci_dev *pdev = adapter->pdev; in atl1_clean_tx_ring()
1229 static void atl1_free_ring_resources(struct atl1_adapter *adapter) in atl1_free_ring_resources() argument
1231 struct pci_dev *pdev = adapter->pdev; in atl1_free_ring_resources()
1232 struct atl1_tpd_ring *tpd_ring = &adapter->tpd_ring; in atl1_free_ring_resources()
1233 struct atl1_rfd_ring *rfd_ring = &adapter->rfd_ring; in atl1_free_ring_resources()
1234 struct atl1_rrd_ring *rrd_ring = &adapter->rrd_ring; in atl1_free_ring_resources()
1235 struct atl1_ring_header *ring_header = &adapter->ring_header; in atl1_free_ring_resources()
1237 atl1_clean_tx_ring(adapter); in atl1_free_ring_resources()
1238 atl1_clean_rx_ring(adapter); in atl1_free_ring_resources()
1255 adapter->cmb.dma = 0; in atl1_free_ring_resources()
1256 adapter->cmb.cmb = NULL; in atl1_free_ring_resources()
1258 adapter->smb.dma = 0; in atl1_free_ring_resources()
1259 adapter->smb.smb = NULL; in atl1_free_ring_resources()
1262 static void atl1_setup_mac_ctrl(struct atl1_adapter *adapter) in atl1_setup_mac_ctrl() argument
1265 struct atl1_hw *hw = &adapter->hw; in atl1_setup_mac_ctrl()
1266 struct net_device *netdev = adapter->netdev; in atl1_setup_mac_ctrl()
1270 if (FULL_DUPLEX == adapter->link_duplex) in atl1_setup_mac_ctrl()
1273 value |= ((u32) ((SPEED_1000 == adapter->link_speed) ? in atl1_setup_mac_ctrl()
1281 value |= (((u32) adapter->hw.preamble_len in atl1_setup_mac_ctrl()
1299 static u32 atl1_check_link(struct atl1_adapter *adapter) in atl1_check_link() argument
1301 struct atl1_hw *hw = &adapter->hw; in atl1_check_link()
1302 struct net_device *netdev = adapter->netdev; in atl1_check_link()
1314 if (netif_msg_link(adapter)) in atl1_check_link()
1315 dev_info(&adapter->pdev->dev, "link is down\n"); in atl1_check_link()
1316 adapter->link_speed = SPEED_0; in atl1_check_link()
1352 if (adapter->link_speed != speed || in atl1_check_link()
1353 adapter->link_duplex != duplex) { in atl1_check_link()
1354 adapter->link_speed = speed; in atl1_check_link()
1355 adapter->link_duplex = duplex; in atl1_check_link()
1356 atl1_setup_mac_ctrl(adapter); in atl1_check_link()
1357 if (netif_msg_link(adapter)) in atl1_check_link()
1358 dev_info(&adapter->pdev->dev, in atl1_check_link()
1360 netdev->name, adapter->link_speed, in atl1_check_link()
1361 adapter->link_duplex == FULL_DUPLEX ? in atl1_check_link()
1373 adapter->link_speed = SPEED_0; in atl1_check_link()
1402 if (!adapter->phy_timer_pending) { in atl1_check_link()
1403 adapter->phy_timer_pending = true; in atl1_check_link()
1404 mod_timer(&adapter->phy_config_timer, in atl1_check_link()
1411 static void set_flow_ctrl_old(struct atl1_adapter *adapter) in set_flow_ctrl_old() argument
1416 value = adapter->rfd_ring.count; in set_flow_ctrl_old()
1424 iowrite32(value, adapter->hw.hw_addr + REG_RXQ_RXF_PAUSE_THRESH); in set_flow_ctrl_old()
1427 value = adapter->rrd_ring.count; in set_flow_ctrl_old()
1434 iowrite32(value, adapter->hw.hw_addr + REG_RXQ_RRD_PAUSE_THRESH); in set_flow_ctrl_old()
1472 static u32 atl1_configure(struct atl1_adapter *adapter) in atl1_configure() argument
1474 struct atl1_hw *hw = &adapter->hw; in atl1_configure()
1478 iowrite32(0xffffffff, adapter->hw.hw_addr + REG_ISR); in atl1_configure()
1492 iowrite32((u32) ((adapter->tpd_ring.dma & 0xffffffff00000000ULL) >> 32), in atl1_configure()
1495 iowrite32((u32) (adapter->rfd_ring.dma & 0x00000000ffffffffULL), in atl1_configure()
1497 iowrite32((u32) (adapter->rrd_ring.dma & 0x00000000ffffffffULL), in atl1_configure()
1499 iowrite32((u32) (adapter->tpd_ring.dma & 0x00000000ffffffffULL), in atl1_configure()
1501 iowrite32((u32) (adapter->cmb.dma & 0x00000000ffffffffULL), in atl1_configure()
1503 iowrite32((u32) (adapter->smb.dma & 0x00000000ffffffffULL), in atl1_configure()
1507 value = adapter->rrd_ring.count; in atl1_configure()
1509 value += adapter->rfd_ring.count; in atl1_configure()
1511 iowrite32(adapter->tpd_ring.count, hw->hw_addr + in atl1_configure()
1518 value = ((atomic_read(&adapter->tpd_ring.next_to_use) in atl1_configure()
1520 ((atomic_read(&adapter->rrd_ring.next_to_clean) in atl1_configure()
1522 ((atomic_read(&adapter->rfd_ring.next_to_use) in atl1_configure()
1548 iowrite16(adapter->imt, hw->hw_addr + REG_IRQ_MODU_TIMER_INIT); in atl1_configure()
1552 iowrite16(adapter->ict, hw->hw_addr + REG_CMBDISDMA_TIMER); in atl1_configure()
1572 set_flow_ctrl_old(adapter); in atl1_configure()
1618 value = (hw->cmb_tpd > adapter->tpd_ring.count) ? in atl1_configure()
1619 hw->cmb_tpd : adapter->tpd_ring.count; in atl1_configure()
1631 value = ioread32(adapter->hw.hw_addr + REG_ISR); in atl1_configure()
1638 iowrite32(0x3fffffff, adapter->hw.hw_addr + REG_ISR); in atl1_configure()
1639 iowrite32(0, adapter->hw.hw_addr + REG_ISR); in atl1_configure()
1646 static void atl1_pcie_patch(struct atl1_adapter *adapter) in atl1_pcie_patch() argument
1652 iowrite32(value, adapter->hw.hw_addr + 0x12FC); in atl1_pcie_patch()
1654 value = ioread32(adapter->hw.hw_addr + 0x1008); in atl1_pcie_patch()
1656 iowrite32(value, adapter->hw.hw_addr + 0x1008); in atl1_pcie_patch()
1665 static void atl1_via_workaround(struct atl1_adapter *adapter) in atl1_via_workaround() argument
1669 value = ioread16(adapter->hw.hw_addr + PCI_COMMAND); in atl1_via_workaround()
1672 iowrite32(value, adapter->hw.hw_addr + PCI_COMMAND); in atl1_via_workaround()
1675 static void atl1_inc_smb(struct atl1_adapter *adapter) in atl1_inc_smb() argument
1677 struct net_device *netdev = adapter->netdev; in atl1_inc_smb()
1678 struct stats_msg_block *smb = adapter->smb.smb; in atl1_inc_smb()
1693 adapter->soft_stats.rx_packets += smb->rx_ok + new_rx_errors; in atl1_inc_smb()
1694 adapter->soft_stats.tx_packets += smb->tx_ok + new_tx_errors; in atl1_inc_smb()
1695 adapter->soft_stats.rx_bytes += smb->rx_byte_cnt; in atl1_inc_smb()
1696 adapter->soft_stats.tx_bytes += smb->tx_byte_cnt; in atl1_inc_smb()
1697 adapter->soft_stats.multicast += smb->rx_mcast; in atl1_inc_smb()
1698 adapter->soft_stats.collisions += smb->tx_1_col + in atl1_inc_smb()
1704 adapter->soft_stats.rx_errors += new_rx_errors; in atl1_inc_smb()
1705 adapter->soft_stats.rx_fifo_errors += smb->rx_rxf_ov; in atl1_inc_smb()
1706 adapter->soft_stats.rx_length_errors += smb->rx_len_err; in atl1_inc_smb()
1707 adapter->soft_stats.rx_crc_errors += smb->rx_fcs_err; in atl1_inc_smb()
1708 adapter->soft_stats.rx_frame_errors += smb->rx_align_err; in atl1_inc_smb()
1710 adapter->soft_stats.rx_pause += smb->rx_pause; in atl1_inc_smb()
1711 adapter->soft_stats.rx_rrd_ov += smb->rx_rrd_ov; in atl1_inc_smb()
1712 adapter->soft_stats.rx_trunc += smb->rx_sz_ov; in atl1_inc_smb()
1715 adapter->soft_stats.tx_errors += new_tx_errors; in atl1_inc_smb()
1716 adapter->soft_stats.tx_fifo_errors += smb->tx_underrun; in atl1_inc_smb()
1717 adapter->soft_stats.tx_aborted_errors += smb->tx_abort_col; in atl1_inc_smb()
1718 adapter->soft_stats.tx_window_errors += smb->tx_late_col; in atl1_inc_smb()
1720 adapter->soft_stats.excecol += smb->tx_abort_col; in atl1_inc_smb()
1721 adapter->soft_stats.deffer += smb->tx_defer; in atl1_inc_smb()
1722 adapter->soft_stats.scc += smb->tx_1_col; in atl1_inc_smb()
1723 adapter->soft_stats.mcc += smb->tx_2_col; in atl1_inc_smb()
1724 adapter->soft_stats.latecol += smb->tx_late_col; in atl1_inc_smb()
1725 adapter->soft_stats.tx_underun += smb->tx_underrun; in atl1_inc_smb()
1726 adapter->soft_stats.tx_trunc += smb->tx_trunc; in atl1_inc_smb()
1727 adapter->soft_stats.tx_pause += smb->tx_pause; in atl1_inc_smb()
1729 netdev->stats.rx_bytes = adapter->soft_stats.rx_bytes; in atl1_inc_smb()
1730 netdev->stats.tx_bytes = adapter->soft_stats.tx_bytes; in atl1_inc_smb()
1731 netdev->stats.multicast = adapter->soft_stats.multicast; in atl1_inc_smb()
1732 netdev->stats.collisions = adapter->soft_stats.collisions; in atl1_inc_smb()
1733 netdev->stats.rx_errors = adapter->soft_stats.rx_errors; in atl1_inc_smb()
1735 adapter->soft_stats.rx_length_errors; in atl1_inc_smb()
1736 netdev->stats.rx_crc_errors = adapter->soft_stats.rx_crc_errors; in atl1_inc_smb()
1738 adapter->soft_stats.rx_frame_errors; in atl1_inc_smb()
1739 netdev->stats.rx_fifo_errors = adapter->soft_stats.rx_fifo_errors; in atl1_inc_smb()
1740 netdev->stats.rx_dropped = adapter->soft_stats.rx_rrd_ov; in atl1_inc_smb()
1741 netdev->stats.tx_errors = adapter->soft_stats.tx_errors; in atl1_inc_smb()
1742 netdev->stats.tx_fifo_errors = adapter->soft_stats.tx_fifo_errors; in atl1_inc_smb()
1744 adapter->soft_stats.tx_aborted_errors; in atl1_inc_smb()
1746 adapter->soft_stats.tx_window_errors; in atl1_inc_smb()
1748 adapter->soft_stats.tx_carrier_errors; in atl1_inc_smb()
1750 netdev->stats.rx_packets = adapter->soft_stats.rx_packets; in atl1_inc_smb()
1751 netdev->stats.tx_packets = adapter->soft_stats.tx_packets; in atl1_inc_smb()
1754 static void atl1_update_mailbox(struct atl1_adapter *adapter) in atl1_update_mailbox() argument
1762 spin_lock_irqsave(&adapter->mb_lock, flags); in atl1_update_mailbox()
1764 tpd_next_to_use = atomic_read(&adapter->tpd_ring.next_to_use); in atl1_update_mailbox()
1765 rfd_next_to_use = atomic_read(&adapter->rfd_ring.next_to_use); in atl1_update_mailbox()
1766 rrd_next_to_clean = atomic_read(&adapter->rrd_ring.next_to_clean); in atl1_update_mailbox()
1774 iowrite32(value, adapter->hw.hw_addr + REG_MAILBOX); in atl1_update_mailbox()
1776 spin_unlock_irqrestore(&adapter->mb_lock, flags); in atl1_update_mailbox()
1779 static void atl1_clean_alloc_flag(struct atl1_adapter *adapter, in atl1_clean_alloc_flag() argument
1782 struct atl1_rfd_ring *rfd_ring = &adapter->rfd_ring; in atl1_clean_alloc_flag()
1792 static void atl1_update_rfd_index(struct atl1_adapter *adapter, in atl1_update_rfd_index() argument
1797 num_buf = (rrd->xsz.xsum_sz.pkt_size + adapter->rx_buffer_len - 1) / in atl1_update_rfd_index()
1798 adapter->rx_buffer_len; in atl1_update_rfd_index()
1801 atl1_clean_alloc_flag(adapter, rrd, num_buf); in atl1_update_rfd_index()
1804 static void atl1_rx_checksum(struct atl1_adapter *adapter, in atl1_rx_checksum() argument
1807 struct pci_dev *pdev = adapter->pdev; in atl1_rx_checksum()
1825 adapter->hw_csum_err++; in atl1_rx_checksum()
1826 if (netif_msg_rx_err(adapter)) in atl1_rx_checksum()
1842 adapter->hw_csum_good++; in atl1_rx_checksum()
1851 static u16 atl1_alloc_rx_buffers(struct atl1_adapter *adapter) in atl1_alloc_rx_buffers() argument
1853 struct atl1_rfd_ring *rfd_ring = &adapter->rfd_ring; in atl1_alloc_rx_buffers()
1854 struct pci_dev *pdev = adapter->pdev; in atl1_alloc_rx_buffers()
1877 skb = netdev_alloc_skb_ip_align(adapter->netdev, in atl1_alloc_rx_buffers()
1878 adapter->rx_buffer_len); in atl1_alloc_rx_buffers()
1881 adapter->soft_stats.rx_dropped++; in atl1_alloc_rx_buffers()
1887 buffer_info->length = (u16) adapter->rx_buffer_len; in atl1_alloc_rx_buffers()
1891 adapter->rx_buffer_len, in atl1_alloc_rx_buffers()
1894 rfd_desc->buf_len = cpu_to_le16(adapter->rx_buffer_len); in atl1_alloc_rx_buffers()
1920 static int atl1_intr_rx(struct atl1_adapter *adapter, int budget) in atl1_intr_rx() argument
1926 struct atl1_rfd_ring *rfd_ring = &adapter->rfd_ring; in atl1_intr_rx()
1927 struct atl1_rrd_ring *rrd_ring = &adapter->rrd_ring; in atl1_intr_rx()
1944 else if (netif_msg_rx_err(adapter)) { in atl1_intr_rx()
1945 dev_printk(KERN_DEBUG, &adapter->pdev->dev, in atl1_intr_rx()
1947 dev_printk(KERN_DEBUG, &adapter->pdev->dev, in atl1_intr_rx()
1949 adapter->rx_buffer_len); in atl1_intr_rx()
1950 dev_printk(KERN_DEBUG, &adapter->pdev->dev, in atl1_intr_rx()
1953 dev_printk(KERN_DEBUG, &adapter->pdev->dev, in atl1_intr_rx()
1956 dev_printk(KERN_DEBUG, &adapter->pdev->dev, in atl1_intr_rx()
1959 dev_printk(KERN_DEBUG, &adapter->pdev->dev, in atl1_intr_rx()
1962 dev_printk(KERN_DEBUG, &adapter->pdev->dev, in atl1_intr_rx()
1974 if (netif_msg_rx_err(adapter)) in atl1_intr_rx()
1975 dev_printk(KERN_DEBUG, &adapter->pdev->dev, in atl1_intr_rx()
1979 atl1_update_rfd_index(adapter, rrd); in atl1_intr_rx()
1993 atl1_clean_alloc_flag(adapter, rrd, 0); in atl1_intr_rx()
2016 pci_unmap_page(adapter->pdev, buffer_info->dma, in atl1_intr_rx()
2025 atl1_rx_checksum(adapter, rrd, skb); in atl1_intr_rx()
2026 skb->protocol = eth_type_trans(skb, adapter->netdev); in atl1_intr_rx()
2045 atl1_alloc_rx_buffers(adapter); in atl1_intr_rx()
2052 spin_lock(&adapter->mb_lock); in atl1_intr_rx()
2054 tpd_next_to_use = atomic_read(&adapter->tpd_ring.next_to_use); in atl1_intr_rx()
2056 atomic_read(&adapter->rfd_ring.next_to_use); in atl1_intr_rx()
2058 atomic_read(&adapter->rrd_ring.next_to_clean); in atl1_intr_rx()
2065 iowrite32(value, adapter->hw.hw_addr + REG_MAILBOX); in atl1_intr_rx()
2066 spin_unlock(&adapter->mb_lock); in atl1_intr_rx()
2072 static int atl1_intr_tx(struct atl1_adapter *adapter) in atl1_intr_tx() argument
2074 struct atl1_tpd_ring *tpd_ring = &adapter->tpd_ring; in atl1_intr_tx()
2081 cmb_tpd_next_to_clean = le16_to_cpu(adapter->cmb.cmb->tpd_cons_idx); in atl1_intr_tx()
2086 pci_unmap_page(adapter->pdev, buffer_info->dma, in atl1_intr_tx()
2103 if (netif_queue_stopped(adapter->netdev) && in atl1_intr_tx()
2104 netif_carrier_ok(adapter->netdev)) in atl1_intr_tx()
2105 netif_wake_queue(adapter->netdev); in atl1_intr_tx()
2119 static int atl1_tso(struct atl1_adapter *adapter, struct sk_buff *skb, in atl1_tso() argument
2179 static int atl1_tx_csum(struct atl1_adapter *adapter, struct sk_buff *skb, in atl1_tx_csum() argument
2189 if (netif_msg_tx_err(adapter)) in atl1_tx_csum()
2190 dev_printk(KERN_DEBUG, &adapter->pdev->dev, in atl1_tx_csum()
2204 static void atl1_tx_map(struct atl1_adapter *adapter, struct sk_buff *skb, in atl1_tx_map() argument
2207 struct atl1_tpd_ring *tpd_ring = &adapter->tpd_ring; in atl1_tx_map()
2234 buffer_info->dma = pci_map_page(adapter->pdev, page, in atl1_tx_map()
2260 buffer_info->dma = pci_map_page(adapter->pdev, in atl1_tx_map()
2272 buffer_info->dma = pci_map_page(adapter->pdev, page, in atl1_tx_map()
2295 buffer_info->dma = skb_frag_dma_map(&adapter->pdev->dev, in atl1_tx_map()
2308 static void atl1_tx_queue(struct atl1_adapter *adapter, u16 count, in atl1_tx_queue() argument
2311 struct atl1_tpd_ring *tpd_ring = &adapter->tpd_ring; in atl1_tx_queue()
2320 tpd = ATL1_TPD_DESC(&adapter->tpd_ring, next_to_use); in atl1_tx_queue()
2361 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_xmit_frame() local
2362 struct atl1_tpd_ring *tpd_ring = &adapter->tpd_ring; in atl1_xmit_frame()
2405 if (atl1_tpd_avail(&adapter->tpd_ring) < count) { in atl1_xmit_frame()
2408 if (netif_msg_tx_queued(adapter)) in atl1_xmit_frame()
2409 dev_printk(KERN_DEBUG, &adapter->pdev->dev, in atl1_xmit_frame()
2427 tso = atl1_tso(adapter, skb, ptpd); in atl1_xmit_frame()
2434 ret_val = atl1_tx_csum(adapter, skb, ptpd); in atl1_xmit_frame()
2441 atl1_tx_map(adapter, skb, ptpd); in atl1_xmit_frame()
2442 atl1_tx_queue(adapter, count, ptpd); in atl1_xmit_frame()
2443 atl1_update_mailbox(adapter); in atl1_xmit_frame()
2450 struct atl1_adapter *adapter = container_of(napi, struct atl1_adapter, napi); in atl1_rings_clean() local
2451 int work_done = atl1_intr_rx(adapter, budget); in atl1_rings_clean()
2453 if (atl1_intr_tx(adapter)) in atl1_rings_clean()
2462 if (likely(adapter->int_enabled)) in atl1_rings_clean()
2463 atlx_imr_set(adapter, IMR_NORMAL_MASK); in atl1_rings_clean()
2467 static inline int atl1_sched_rings_clean(struct atl1_adapter* adapter) in atl1_sched_rings_clean() argument
2469 if (!napi_schedule_prep(&adapter->napi)) in atl1_sched_rings_clean()
2477 __napi_schedule(&adapter->napi); in atl1_sched_rings_clean()
2484 if (!adapter->int_enabled) in atl1_sched_rings_clean()
2487 atlx_imr_set(adapter, IMR_NORXTX_MASK); in atl1_sched_rings_clean()
2498 struct atl1_adapter *adapter = netdev_priv(data); in atl1_intr() local
2501 status = adapter->cmb.cmb->int_stats; in atl1_intr()
2510 adapter->cmb.cmb->int_stats = status & (ISR_CMB_TX | ISR_CMB_RX); in atl1_intr()
2513 atlx_clear_phy_int(adapter); in atl1_intr()
2516 iowrite32(status | ISR_DIS_INT, adapter->hw.hw_addr + REG_ISR); in atl1_intr()
2520 atl1_inc_smb(adapter); in atl1_intr()
2524 if (netif_msg_intr(adapter)) in atl1_intr()
2525 dev_printk(KERN_DEBUG, &adapter->pdev->dev, in atl1_intr()
2527 if (netif_running(adapter->netdev)) { /* reset MAC */ in atl1_intr()
2528 atlx_irq_disable(adapter); in atl1_intr()
2529 schedule_work(&adapter->reset_dev_task); in atl1_intr()
2536 if (netif_msg_intr(adapter)) in atl1_intr()
2537 dev_printk(KERN_DEBUG, &adapter->pdev->dev, in atl1_intr()
2540 atlx_irq_disable(adapter); in atl1_intr()
2541 schedule_work(&adapter->reset_dev_task); in atl1_intr()
2547 adapter->soft_stats.tx_carrier_errors++; in atl1_intr()
2548 atl1_check_for_link(adapter); in atl1_intr()
2553 atl1_sched_rings_clean(adapter)) in atl1_intr()
2554 adapter->cmb.cmb->int_stats = adapter->cmb.cmb->int_stats & in atl1_intr()
2561 if (netif_msg_intr(adapter)) in atl1_intr()
2563 &adapter->pdev->dev, in atl1_intr()
2566 atl1_sched_rings_clean(adapter); in atl1_intr()
2570 iowrite32(ISR_DIS_SMB | ISR_DIS_DMA, adapter->hw.hw_addr + REG_ISR); in atl1_intr()
2581 struct atl1_adapter *adapter = (struct atl1_adapter *)data; in atl1_phy_config() local
2582 struct atl1_hw *hw = &adapter->hw; in atl1_phy_config()
2585 spin_lock_irqsave(&adapter->lock, flags); in atl1_phy_config()
2586 adapter->phy_timer_pending = false; in atl1_phy_config()
2590 spin_unlock_irqrestore(&adapter->lock, flags); in atl1_phy_config()
2604 static int atl1_reset(struct atl1_adapter *adapter) in atl1_reset() argument
2607 ret = atl1_reset_hw(&adapter->hw); in atl1_reset()
2610 return atl1_init_hw(&adapter->hw); in atl1_reset()
2613 static s32 atl1_up(struct atl1_adapter *adapter) in atl1_up() argument
2615 struct net_device *netdev = adapter->netdev; in atl1_up()
2621 atl1_init_ring_ptrs(adapter); in atl1_up()
2622 atlx_restore_vlan(adapter); in atl1_up()
2623 err = atl1_alloc_rx_buffers(adapter); in atl1_up()
2628 if (unlikely(atl1_configure(adapter))) { in atl1_up()
2633 err = pci_enable_msi(adapter->pdev); in atl1_up()
2635 if (netif_msg_ifup(adapter)) in atl1_up()
2636 dev_info(&adapter->pdev->dev, in atl1_up()
2641 err = request_irq(adapter->pdev->irq, atl1_intr, irq_flags, in atl1_up()
2646 napi_enable(&adapter->napi); in atl1_up()
2647 atlx_irq_enable(adapter); in atl1_up()
2648 atl1_check_link(adapter); in atl1_up()
2653 pci_disable_msi(adapter->pdev); in atl1_up()
2655 atl1_clean_rx_ring(adapter); in atl1_up()
2659 static void atl1_down(struct atl1_adapter *adapter) in atl1_down() argument
2661 struct net_device *netdev = adapter->netdev; in atl1_down()
2663 napi_disable(&adapter->napi); in atl1_down()
2665 del_timer_sync(&adapter->phy_config_timer); in atl1_down()
2666 adapter->phy_timer_pending = false; in atl1_down()
2668 atlx_irq_disable(adapter); in atl1_down()
2669 free_irq(adapter->pdev->irq, netdev); in atl1_down()
2670 pci_disable_msi(adapter->pdev); in atl1_down()
2671 atl1_reset_hw(&adapter->hw); in atl1_down()
2672 adapter->cmb.cmb->int_stats = 0; in atl1_down()
2674 adapter->link_speed = SPEED_0; in atl1_down()
2675 adapter->link_duplex = -1; in atl1_down()
2678 atl1_clean_tx_ring(adapter); in atl1_down()
2679 atl1_clean_rx_ring(adapter); in atl1_down()
2684 struct atl1_adapter *adapter = in atl1_reset_dev_task() local
2686 struct net_device *netdev = adapter->netdev; in atl1_reset_dev_task()
2689 atl1_down(adapter); in atl1_reset_dev_task()
2690 atl1_up(adapter); in atl1_reset_dev_task()
2703 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_change_mtu() local
2709 if (netif_msg_link(adapter)) in atl1_change_mtu()
2710 dev_warn(&adapter->pdev->dev, "invalid MTU setting\n"); in atl1_change_mtu()
2714 adapter->hw.max_frame_size = max_frame; in atl1_change_mtu()
2715 adapter->hw.tx_jumbo_task_th = (max_frame + 7) >> 3; in atl1_change_mtu()
2716 adapter->rx_buffer_len = (max_frame + 7) & ~7; in atl1_change_mtu()
2717 adapter->hw.rx_jumbo_th = adapter->rx_buffer_len / 8; in atl1_change_mtu()
2721 atl1_down(adapter); in atl1_change_mtu()
2722 atl1_up(adapter); in atl1_change_mtu()
2742 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_open() local
2748 err = atl1_setup_ring_resources(adapter); in atl1_open()
2752 err = atl1_up(adapter); in atl1_open()
2759 atl1_reset(adapter); in atl1_open()
2776 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_close() local
2777 atl1_down(adapter); in atl1_close()
2778 atl1_free_ring_resources(adapter); in atl1_close()
2787 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_suspend() local
2788 struct atl1_hw *hw = &adapter->hw; in atl1_suspend()
2790 u32 wufc = adapter->wol; in atl1_suspend()
2797 atl1_down(adapter); in atl1_suspend()
2810 if (netif_msg_ifdown(adapter)) in atl1_suspend()
2830 ctrl |= (((u32)adapter->hw.preamble_len & in atl1_suspend()
2870 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_resume() local
2872 iowrite32(0, adapter->hw.hw_addr + REG_WOL_CTRL); in atl1_resume()
2874 atl1_reset_hw(&adapter->hw); in atl1_resume()
2877 adapter->cmb.cmb->int_stats = 0; in atl1_resume()
2878 atl1_up(adapter); in atl1_resume()
2891 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_shutdown() local
2896 pci_wake_from_d3(pdev, adapter->wol); in atl1_shutdown()
2940 struct atl1_adapter *adapter; in atl1_probe() local
2985 adapter = netdev_priv(netdev); in atl1_probe()
2986 adapter->netdev = netdev; in atl1_probe()
2987 adapter->pdev = pdev; in atl1_probe()
2988 adapter->hw.back = adapter; in atl1_probe()
2989 adapter->msg_enable = netif_msg_init(debug, atl1_default_msg); in atl1_probe()
2991 adapter->hw.hw_addr = pci_iomap(pdev, 0, 0); in atl1_probe()
2992 if (!adapter->hw.hw_addr) { in atl1_probe()
2997 adapter->hw.dev_rev = ioread16(adapter->hw.hw_addr + in atl1_probe()
2999 if (netif_msg_probe(adapter)) in atl1_probe()
3003 adapter->rfd_ring.count = adapter->rrd_ring.count = ATL1_DEFAULT_RFD; in atl1_probe()
3004 adapter->tpd_ring.count = ATL1_DEFAULT_TPD; in atl1_probe()
3006 adapter->mii.dev = netdev; in atl1_probe()
3007 adapter->mii.mdio_read = mdio_read; in atl1_probe()
3008 adapter->mii.mdio_write = mdio_write; in atl1_probe()
3009 adapter->mii.phy_id_mask = 0x1f; in atl1_probe()
3010 adapter->mii.reg_num_mask = 0x1f; in atl1_probe()
3014 netif_napi_add(netdev, &adapter->napi, atl1_rings_clean, 64); in atl1_probe()
3017 adapter->bd_number = cards_found; in atl1_probe()
3020 err = atl1_sw_init(adapter); in atl1_probe()
3042 iowrite16(0, adapter->hw.hw_addr + REG_PHY_ENABLE); in atl1_probe()
3048 if (atl1_reset_hw(&adapter->hw)) { in atl1_probe()
3054 if (atl1_read_mac_addr(&adapter->hw)) { in atl1_probe()
3058 memcpy(netdev->dev_addr, adapter->hw.mac_addr, netdev->addr_len); in atl1_probe()
3065 atl1_check_options(adapter); in atl1_probe()
3068 err = atl1_init_hw(&adapter->hw); in atl1_probe()
3074 atl1_pcie_patch(adapter); in atl1_probe()
3078 setup_timer(&adapter->phy_config_timer, atl1_phy_config, in atl1_probe()
3079 (unsigned long)adapter); in atl1_probe()
3080 adapter->phy_timer_pending = false; in atl1_probe()
3082 INIT_WORK(&adapter->reset_dev_task, atl1_reset_dev_task); in atl1_probe()
3084 INIT_WORK(&adapter->link_chg_task, atlx_link_chg_task); in atl1_probe()
3091 atl1_via_workaround(adapter); in atl1_probe()
3095 pci_iounmap(pdev, adapter->hw.hw_addr); in atl1_probe()
3118 struct atl1_adapter *adapter; in atl1_remove() local
3123 adapter = netdev_priv(netdev); in atl1_remove()
3130 if (!ether_addr_equal_unaligned(adapter->hw.mac_addr, in atl1_remove()
3131 adapter->hw.perm_mac_addr)) { in atl1_remove()
3132 memcpy(adapter->hw.mac_addr, adapter->hw.perm_mac_addr, in atl1_remove()
3134 atl1_set_mac_addr(&adapter->hw); in atl1_remove()
3137 iowrite16(0, adapter->hw.hw_addr + REG_PHY_ENABLE); in atl1_remove()
3139 pci_iounmap(pdev, adapter->hw.hw_addr); in atl1_remove()
3198 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_get_ethtool_stats() local
3203 p = (char *)adapter+atl1_gstrings_stats[i].stat_offset; in atl1_get_ethtool_stats()
3223 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_get_settings() local
3224 struct atl1_hw *hw = &adapter->hw; in atl1_get_settings()
3251 if (netif_carrier_ok(adapter->netdev)) { in atl1_get_settings()
3275 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_set_settings() local
3276 struct atl1_hw *hw = &adapter->hw; in atl1_set_settings()
3281 if (netif_running(adapter->netdev)) { in atl1_set_settings()
3282 if (netif_msg_link(adapter)) in atl1_set_settings()
3283 dev_dbg(&adapter->pdev->dev, in atl1_set_settings()
3285 atl1_down(adapter); in atl1_set_settings()
3294 if (netif_msg_link(adapter)) in atl1_set_settings()
3295 dev_warn(&adapter->pdev->dev, in atl1_set_settings()
3334 if (netif_msg_link(adapter)) in atl1_set_settings()
3335 dev_warn(&adapter->pdev->dev, in atl1_set_settings()
3367 if (netif_running(adapter->netdev)) { in atl1_set_settings()
3368 if (netif_msg_link(adapter)) in atl1_set_settings()
3369 dev_dbg(&adapter->pdev->dev, in atl1_set_settings()
3371 atl1_up(adapter); in atl1_set_settings()
3373 if (netif_msg_link(adapter)) in atl1_set_settings()
3374 dev_dbg(&adapter->pdev->dev, in atl1_set_settings()
3376 atl1_reset(adapter); in atl1_set_settings()
3384 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_get_drvinfo() local
3389 strlcpy(drvinfo->bus_info, pci_name(adapter->pdev), in atl1_get_drvinfo()
3397 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_get_wol() local
3401 if (adapter->wol & ATLX_WUFC_MAG) in atl1_get_wol()
3408 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_set_wol() local
3413 adapter->wol = 0; in atl1_set_wol()
3415 adapter->wol |= ATLX_WUFC_MAG; in atl1_set_wol()
3417 device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol); in atl1_set_wol()
3424 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_get_msglevel() local
3425 return adapter->msg_enable; in atl1_get_msglevel()
3430 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_set_msglevel() local
3431 adapter->msg_enable = value; in atl1_set_msglevel()
3442 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_get_regs() local
3443 struct atl1_hw *hw = &adapter->hw; in atl1_get_regs()
3488 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_get_ringparam() local
3489 struct atl1_tpd_ring *txdr = &adapter->tpd_ring; in atl1_get_ringparam()
3490 struct atl1_rfd_ring *rxdr = &adapter->rfd_ring; in atl1_get_ringparam()
3501 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_set_ringparam() local
3502 struct atl1_tpd_ring *tpdr = &adapter->tpd_ring; in atl1_set_ringparam()
3503 struct atl1_rrd_ring *rrdr = &adapter->rrd_ring; in atl1_set_ringparam()
3504 struct atl1_rfd_ring *rfdr = &adapter->rfd_ring; in atl1_set_ringparam()
3514 tpd_old = adapter->tpd_ring; in atl1_set_ringparam()
3515 rfd_old = adapter->rfd_ring; in atl1_set_ringparam()
3516 rrd_old = adapter->rrd_ring; in atl1_set_ringparam()
3517 rhdr_old = adapter->ring_header; in atl1_set_ringparam()
3519 if (netif_running(adapter->netdev)) in atl1_set_ringparam()
3520 atl1_down(adapter); in atl1_set_ringparam()
3533 if (netif_running(adapter->netdev)) { in atl1_set_ringparam()
3535 err = atl1_setup_ring_resources(adapter); in atl1_set_ringparam()
3544 rfd_new = adapter->rfd_ring; in atl1_set_ringparam()
3545 rrd_new = adapter->rrd_ring; in atl1_set_ringparam()
3546 tpd_new = adapter->tpd_ring; in atl1_set_ringparam()
3547 rhdr_new = adapter->ring_header; in atl1_set_ringparam()
3548 adapter->rfd_ring = rfd_old; in atl1_set_ringparam()
3549 adapter->rrd_ring = rrd_old; in atl1_set_ringparam()
3550 adapter->tpd_ring = tpd_old; in atl1_set_ringparam()
3551 adapter->ring_header = rhdr_old; in atl1_set_ringparam()
3556 smb = adapter->smb; in atl1_set_ringparam()
3557 cmb = adapter->cmb; in atl1_set_ringparam()
3558 atl1_free_ring_resources(adapter); in atl1_set_ringparam()
3559 adapter->rfd_ring = rfd_new; in atl1_set_ringparam()
3560 adapter->rrd_ring = rrd_new; in atl1_set_ringparam()
3561 adapter->tpd_ring = tpd_new; in atl1_set_ringparam()
3562 adapter->ring_header = rhdr_new; in atl1_set_ringparam()
3563 adapter->smb = smb; in atl1_set_ringparam()
3564 adapter->cmb = cmb; in atl1_set_ringparam()
3566 err = atl1_up(adapter); in atl1_set_ringparam()
3573 adapter->rfd_ring = rfd_old; in atl1_set_ringparam()
3574 adapter->rrd_ring = rrd_old; in atl1_set_ringparam()
3575 adapter->tpd_ring = tpd_old; in atl1_set_ringparam()
3576 adapter->ring_header = rhdr_old; in atl1_set_ringparam()
3577 atl1_up(adapter); in atl1_set_ringparam()
3584 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_get_pauseparam() local
3585 struct atl1_hw *hw = &adapter->hw; in atl1_get_pauseparam()
3600 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_set_pauseparam() local
3601 struct atl1_hw *hw = &adapter->hw; in atl1_set_pauseparam()
3635 struct atl1_adapter *adapter = netdev_priv(netdev); in atl1_nway_reset() local
3636 struct atl1_hw *hw = &adapter->hw; in atl1_nway_reset()
3640 atl1_down(adapter); in atl1_nway_reset()
3664 atl1_up(adapter); in atl1_nway_reset()