Lines Matching refs:adapter
58 static void atl1c_start_mac(struct atl1c_adapter *adapter);
59 static void atl1c_clean_rx_irq(struct atl1c_adapter *adapter,
61 static int atl1c_up(struct atl1c_adapter *adapter);
62 static void atl1c_down(struct atl1c_adapter *adapter);
64 static void atl1c_reset_dma_ring(struct atl1c_adapter *adapter);
65 static int atl1c_configure(struct atl1c_adapter *adapter);
66 static int atl1c_alloc_rx_buffer(struct atl1c_adapter *adapter);
126 struct pci_dev *pdev = hw->adapter->pdev; in atl1c_reset_pcie()
175 static inline void atl1c_irq_enable(struct atl1c_adapter *adapter) in atl1c_irq_enable() argument
177 if (likely(atomic_dec_and_test(&adapter->irq_sem))) { in atl1c_irq_enable()
178 AT_WRITE_REG(&adapter->hw, REG_ISR, 0x7FFFFFFF); in atl1c_irq_enable()
179 AT_WRITE_REG(&adapter->hw, REG_IMR, adapter->hw.intr_mask); in atl1c_irq_enable()
180 AT_WRITE_FLUSH(&adapter->hw); in atl1c_irq_enable()
188 static inline void atl1c_irq_disable(struct atl1c_adapter *adapter) in atl1c_irq_disable() argument
190 atomic_inc(&adapter->irq_sem); in atl1c_irq_disable()
191 AT_WRITE_REG(&adapter->hw, REG_IMR, 0); in atl1c_irq_disable()
192 AT_WRITE_REG(&adapter->hw, REG_ISR, ISR_DIS_INT); in atl1c_irq_disable()
193 AT_WRITE_FLUSH(&adapter->hw); in atl1c_irq_disable()
194 synchronize_irq(adapter->pdev->irq); in atl1c_irq_disable()
201 static inline void atl1c_irq_reset(struct atl1c_adapter *adapter) in atl1c_irq_reset() argument
203 atomic_set(&adapter->irq_sem, 1); in atl1c_irq_reset()
204 atl1c_irq_enable(adapter); in atl1c_irq_reset()
231 struct atl1c_adapter *adapter = (struct atl1c_adapter *) data; in atl1c_phy_config() local
232 struct atl1c_hw *hw = &adapter->hw; in atl1c_phy_config()
235 spin_lock_irqsave(&adapter->mdio_lock, flags); in atl1c_phy_config()
237 spin_unlock_irqrestore(&adapter->mdio_lock, flags); in atl1c_phy_config()
240 void atl1c_reinit_locked(struct atl1c_adapter *adapter) in atl1c_reinit_locked() argument
243 atl1c_down(adapter); in atl1c_reinit_locked()
244 atl1c_up(adapter); in atl1c_reinit_locked()
245 clear_bit(__AT_RESETTING, &adapter->flags); in atl1c_reinit_locked()
248 static void atl1c_check_link_status(struct atl1c_adapter *adapter) in atl1c_check_link_status() argument
250 struct atl1c_hw *hw = &adapter->hw; in atl1c_check_link_status()
251 struct net_device *netdev = adapter->netdev; in atl1c_check_link_status()
252 struct pci_dev *pdev = adapter->pdev; in atl1c_check_link_status()
257 spin_lock_irqsave(&adapter->mdio_lock, flags); in atl1c_check_link_status()
261 spin_unlock_irqrestore(&adapter->mdio_lock, flags); in atl1c_check_link_status()
268 if (netif_msg_hw(adapter)) in atl1c_check_link_status()
272 atl1c_reset_dma_ring(adapter); in atl1c_check_link_status()
273 atl1c_configure(adapter); in atl1c_check_link_status()
277 spin_lock_irqsave(&adapter->mdio_lock, flags); in atl1c_check_link_status()
279 spin_unlock_irqrestore(&adapter->mdio_lock, flags); in atl1c_check_link_status()
283 if (adapter->link_speed != speed || in atl1c_check_link_status()
284 adapter->link_duplex != duplex) { in atl1c_check_link_status()
285 adapter->link_speed = speed; in atl1c_check_link_status()
286 adapter->link_duplex = duplex; in atl1c_check_link_status()
289 atl1c_start_mac(adapter); in atl1c_check_link_status()
290 if (netif_msg_link(adapter)) in atl1c_check_link_status()
294 adapter->link_speed, in atl1c_check_link_status()
295 adapter->link_duplex == FULL_DUPLEX ? in atl1c_check_link_status()
303 static void atl1c_link_chg_event(struct atl1c_adapter *adapter) in atl1c_link_chg_event() argument
305 struct net_device *netdev = adapter->netdev; in atl1c_link_chg_event()
306 struct pci_dev *pdev = adapter->pdev; in atl1c_link_chg_event()
310 spin_lock(&adapter->mdio_lock); in atl1c_link_chg_event()
311 atl1c_read_phy_reg(&adapter->hw, MII_BMSR, &phy_data); in atl1c_link_chg_event()
312 atl1c_read_phy_reg(&adapter->hw, MII_BMSR, &phy_data); in atl1c_link_chg_event()
313 spin_unlock(&adapter->mdio_lock); in atl1c_link_chg_event()
320 if (netif_msg_link(adapter)) in atl1c_link_chg_event()
324 adapter->link_speed = SPEED_0; in atl1c_link_chg_event()
328 set_bit(ATL1C_WORK_EVENT_LINK_CHANGE, &adapter->work_event); in atl1c_link_chg_event()
329 schedule_work(&adapter->common_task); in atl1c_link_chg_event()
334 struct atl1c_adapter *adapter; in atl1c_common_task() local
337 adapter = container_of(work, struct atl1c_adapter, common_task); in atl1c_common_task()
338 netdev = adapter->netdev; in atl1c_common_task()
340 if (test_bit(__AT_DOWN, &adapter->flags)) in atl1c_common_task()
343 if (test_and_clear_bit(ATL1C_WORK_EVENT_RESET, &adapter->work_event)) { in atl1c_common_task()
345 atl1c_down(adapter); in atl1c_common_task()
346 atl1c_up(adapter); in atl1c_common_task()
351 &adapter->work_event)) { in atl1c_common_task()
352 atl1c_irq_disable(adapter); in atl1c_common_task()
353 atl1c_check_link_status(adapter); in atl1c_common_task()
354 atl1c_irq_enable(adapter); in atl1c_common_task()
359 static void atl1c_del_timer(struct atl1c_adapter *adapter) in atl1c_del_timer() argument
361 del_timer_sync(&adapter->phy_config_timer); in atl1c_del_timer()
371 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_tx_timeout() local
374 set_bit(ATL1C_WORK_EVENT_RESET, &adapter->work_event); in atl1c_tx_timeout()
375 schedule_work(&adapter->common_task); in atl1c_tx_timeout()
389 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_set_multi() local
390 struct atl1c_hw *hw = &adapter->hw; in atl1c_set_multi()
434 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_vlan_mode() local
435 struct pci_dev *pdev = adapter->pdev; in atl1c_vlan_mode()
438 if (netif_msg_pktdata(adapter)) in atl1c_vlan_mode()
441 atl1c_irq_disable(adapter); in atl1c_vlan_mode()
442 AT_READ_REG(&adapter->hw, REG_MAC_CTRL, &mac_ctrl_data); in atl1c_vlan_mode()
444 AT_WRITE_REG(&adapter->hw, REG_MAC_CTRL, mac_ctrl_data); in atl1c_vlan_mode()
445 atl1c_irq_enable(adapter); in atl1c_vlan_mode()
448 static void atl1c_restore_vlan(struct atl1c_adapter *adapter) in atl1c_restore_vlan() argument
450 struct pci_dev *pdev = adapter->pdev; in atl1c_restore_vlan()
452 if (netif_msg_pktdata(adapter)) in atl1c_restore_vlan()
454 atl1c_vlan_mode(adapter->netdev, adapter->netdev->features); in atl1c_restore_vlan()
466 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_set_mac_addr() local
476 memcpy(adapter->hw.mac_addr, addr->sa_data, netdev->addr_len); in atl1c_set_mac_addr()
478 atl1c_hw_set_mac_addr(&adapter->hw, adapter->hw.mac_addr); in atl1c_set_mac_addr()
483 static void atl1c_set_rxbufsize(struct atl1c_adapter *adapter, in atl1c_set_rxbufsize() argument
489 adapter->rx_buffer_len = mtu > AT_RX_BUF_SIZE ? in atl1c_set_rxbufsize()
492 head_size = SKB_DATA_ALIGN(adapter->rx_buffer_len + NET_SKB_PAD) + in atl1c_set_rxbufsize()
494 adapter->rx_frag_size = roundup_pow_of_two(head_size); in atl1c_set_rxbufsize()
535 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_change_mtu() local
536 struct atl1c_hw *hw = &adapter->hw; in atl1c_change_mtu()
546 if (netif_msg_link(adapter)) in atl1c_change_mtu()
547 dev_warn(&adapter->pdev->dev, "invalid MTU setting\n"); in atl1c_change_mtu()
552 while (test_and_set_bit(__AT_RESETTING, &adapter->flags)) in atl1c_change_mtu()
555 adapter->hw.max_frame_size = new_mtu; in atl1c_change_mtu()
556 atl1c_set_rxbufsize(adapter, netdev); in atl1c_change_mtu()
557 atl1c_down(adapter); in atl1c_change_mtu()
559 atl1c_up(adapter); in atl1c_change_mtu()
560 clear_bit(__AT_RESETTING, &adapter->flags); in atl1c_change_mtu()
570 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_mdio_read() local
573 atl1c_read_phy_reg(&adapter->hw, reg_num, &result); in atl1c_mdio_read()
580 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_mdio_write() local
582 atl1c_write_phy_reg(&adapter->hw, reg_num, val); in atl1c_mdio_write()
588 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_mii_ioctl() local
589 struct pci_dev *pdev = adapter->pdev; in atl1c_mii_ioctl()
597 spin_lock_irqsave(&adapter->mdio_lock, flags); in atl1c_mii_ioctl()
604 if (atl1c_read_phy_reg(&adapter->hw, data->reg_num & 0x1F, in atl1c_mii_ioctl()
619 if (atl1c_write_phy_reg(&adapter->hw, in atl1c_mii_ioctl()
631 spin_unlock_irqrestore(&adapter->mdio_lock, flags); in atl1c_mii_ioctl()
652 static int atl1c_alloc_queues(struct atl1c_adapter *adapter) in atl1c_alloc_queues() argument
736 struct pci_dev *pdev = hw->adapter->pdev; in atl1c_patch_assign()
773 static int atl1c_sw_init(struct atl1c_adapter *adapter) in atl1c_sw_init() argument
775 struct atl1c_hw *hw = &adapter->hw; in atl1c_sw_init()
776 struct pci_dev *pdev = adapter->pdev; in atl1c_sw_init()
780 adapter->wol = 0; in atl1c_sw_init()
782 adapter->link_speed = SPEED_0; in atl1c_sw_init()
783 adapter->link_duplex = FULL_DUPLEX; in atl1c_sw_init()
784 adapter->tpd_ring[0].count = 1024; in atl1c_sw_init()
785 adapter->rfd_ring.count = 512; in atl1c_sw_init()
805 hw->max_frame_size = adapter->netdev->mtu; in atl1c_sw_init()
820 if (atl1c_alloc_queues(adapter)) { in atl1c_sw_init()
825 atl1c_set_rxbufsize(adapter, adapter->netdev); in atl1c_sw_init()
826 atomic_set(&adapter->irq_sem, 1); in atl1c_sw_init()
827 spin_lock_init(&adapter->mdio_lock); in atl1c_sw_init()
828 spin_lock_init(&adapter->tx_lock); in atl1c_sw_init()
829 set_bit(__AT_DOWN, &adapter->flags); in atl1c_sw_init()
863 static void atl1c_clean_tx_ring(struct atl1c_adapter *adapter, in atl1c_clean_tx_ring() argument
866 struct atl1c_tpd_ring *tpd_ring = &adapter->tpd_ring[type]; in atl1c_clean_tx_ring()
868 struct pci_dev *pdev = adapter->pdev; in atl1c_clean_tx_ring()
877 netdev_reset_queue(adapter->netdev); in atl1c_clean_tx_ring()
890 static void atl1c_clean_rx_ring(struct atl1c_adapter *adapter) in atl1c_clean_rx_ring() argument
892 struct atl1c_rfd_ring *rfd_ring = &adapter->rfd_ring; in atl1c_clean_rx_ring()
893 struct atl1c_rrd_ring *rrd_ring = &adapter->rrd_ring; in atl1c_clean_rx_ring()
895 struct pci_dev *pdev = adapter->pdev; in atl1c_clean_rx_ring()
913 static void atl1c_init_ring_ptrs(struct atl1c_adapter *adapter) in atl1c_init_ring_ptrs() argument
915 struct atl1c_tpd_ring *tpd_ring = adapter->tpd_ring; in atl1c_init_ring_ptrs()
916 struct atl1c_rfd_ring *rfd_ring = &adapter->rfd_ring; in atl1c_init_ring_ptrs()
917 struct atl1c_rrd_ring *rrd_ring = &adapter->rrd_ring; in atl1c_init_ring_ptrs()
945 static void atl1c_free_ring_resources(struct atl1c_adapter *adapter) in atl1c_free_ring_resources() argument
947 struct pci_dev *pdev = adapter->pdev; in atl1c_free_ring_resources()
949 pci_free_consistent(pdev, adapter->ring_header.size, in atl1c_free_ring_resources()
950 adapter->ring_header.desc, in atl1c_free_ring_resources()
951 adapter->ring_header.dma); in atl1c_free_ring_resources()
952 adapter->ring_header.desc = NULL; in atl1c_free_ring_resources()
956 if (adapter->tpd_ring[0].buffer_info) { in atl1c_free_ring_resources()
957 kfree(adapter->tpd_ring[0].buffer_info); in atl1c_free_ring_resources()
958 adapter->tpd_ring[0].buffer_info = NULL; in atl1c_free_ring_resources()
960 if (adapter->rx_page) { in atl1c_free_ring_resources()
961 put_page(adapter->rx_page); in atl1c_free_ring_resources()
962 adapter->rx_page = NULL; in atl1c_free_ring_resources()
972 static int atl1c_setup_ring_resources(struct atl1c_adapter *adapter) in atl1c_setup_ring_resources() argument
974 struct pci_dev *pdev = adapter->pdev; in atl1c_setup_ring_resources()
975 struct atl1c_tpd_ring *tpd_ring = adapter->tpd_ring; in atl1c_setup_ring_resources()
976 struct atl1c_rfd_ring *rfd_ring = &adapter->rfd_ring; in atl1c_setup_ring_resources()
977 struct atl1c_rrd_ring *rrd_ring = &adapter->rrd_ring; in atl1c_setup_ring_resources()
978 struct atl1c_ring_header *ring_header = &adapter->ring_header; in atl1c_setup_ring_resources()
1056 static void atl1c_configure_des_ring(struct atl1c_adapter *adapter) in atl1c_configure_des_ring() argument
1058 struct atl1c_hw *hw = &adapter->hw; in atl1c_configure_des_ring()
1059 struct atl1c_rfd_ring *rfd_ring = &adapter->rfd_ring; in atl1c_configure_des_ring()
1060 struct atl1c_rrd_ring *rrd_ring = &adapter->rrd_ring; in atl1c_configure_des_ring()
1062 adapter->tpd_ring; in atl1c_configure_des_ring()
1088 adapter->rx_buffer_len & RX_BUF_SIZE_MASK); in atl1c_configure_des_ring()
1110 static void atl1c_configure_tx(struct atl1c_adapter *adapter) in atl1c_configure_tx() argument
1112 struct atl1c_hw *hw = &adapter->hw; in atl1c_configure_tx()
1120 max_pay_load = pcie_get_readrq(adapter->pdev) >> 8; in atl1c_configure_tx()
1127 pcie_set_readrq(adapter->pdev, 128 << DEVICE_CTRL_MAXRRS_MIN); in atl1c_configure_tx()
1137 static void atl1c_configure_rx(struct atl1c_adapter *adapter) in atl1c_configure_rx() argument
1139 struct atl1c_hw *hw = &adapter->hw; in atl1c_configure_rx()
1156 static void atl1c_configure_dma(struct atl1c_adapter *adapter) in atl1c_configure_dma() argument
1158 struct atl1c_hw *hw = &adapter->hw; in atl1c_configure_dma()
1197 static void atl1c_start_mac(struct atl1c_adapter *adapter) in atl1c_start_mac() argument
1199 struct atl1c_hw *hw = &adapter->hw; in atl1c_start_mac()
1202 hw->mac_duplex = adapter->link_duplex == FULL_DUPLEX ? true : false; in atl1c_start_mac()
1203 hw->mac_speed = adapter->link_speed == SPEED_1000 ? in atl1c_start_mac()
1236 struct atl1c_adapter *adapter = hw->adapter; in atl1c_reset_mac() local
1237 struct pci_dev *pdev = adapter->pdev; in atl1c_reset_mac()
1378 static int atl1c_configure_mac(struct atl1c_adapter *adapter) in atl1c_configure_mac() argument
1380 struct atl1c_hw *hw = &adapter->hw; in atl1c_configure_mac()
1409 atl1c_configure_des_ring(adapter); in atl1c_configure_mac()
1434 atl1c_configure_tx(adapter); in atl1c_configure_mac()
1435 atl1c_configure_rx(adapter); in atl1c_configure_mac()
1436 atl1c_configure_dma(adapter); in atl1c_configure_mac()
1441 static int atl1c_configure(struct atl1c_adapter *adapter) in atl1c_configure() argument
1443 struct net_device *netdev = adapter->netdev; in atl1c_configure()
1446 atl1c_init_ring_ptrs(adapter); in atl1c_configure()
1448 atl1c_restore_vlan(adapter); in atl1c_configure()
1450 num = atl1c_alloc_rx_buffer(adapter); in atl1c_configure()
1454 if (atl1c_configure_mac(adapter)) in atl1c_configure()
1460 static void atl1c_update_hw_stats(struct atl1c_adapter *adapter) in atl1c_update_hw_stats() argument
1468 stats_item = &adapter->hw_stats.rx_ok; in atl1c_update_hw_stats()
1470 AT_READ_REG(&adapter->hw, hw_reg_addr, &data); in atl1c_update_hw_stats()
1477 stats_item = &adapter->hw_stats.tx_ok; in atl1c_update_hw_stats()
1479 AT_READ_REG(&adapter->hw, hw_reg_addr, &data); in atl1c_update_hw_stats()
1495 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_get_stats() local
1496 struct atl1c_hw_stats *hw_stats = &adapter->hw_stats; in atl1c_get_stats()
1499 atl1c_update_hw_stats(adapter); in atl1c_get_stats()
1537 static inline void atl1c_clear_phy_int(struct atl1c_adapter *adapter) in atl1c_clear_phy_int() argument
1541 spin_lock(&adapter->mdio_lock); in atl1c_clear_phy_int()
1542 atl1c_read_phy_reg(&adapter->hw, MII_ISR, &phy_data); in atl1c_clear_phy_int()
1543 spin_unlock(&adapter->mdio_lock); in atl1c_clear_phy_int()
1546 static bool atl1c_clean_tx_irq(struct atl1c_adapter *adapter, in atl1c_clean_tx_irq() argument
1549 struct atl1c_tpd_ring *tpd_ring = &adapter->tpd_ring[type]; in atl1c_clean_tx_irq()
1551 struct pci_dev *pdev = adapter->pdev; in atl1c_clean_tx_irq()
1559 AT_READ_REGW(&adapter->hw, reg, &hw_next_to_clean); in atl1c_clean_tx_irq()
1573 netdev_completed_queue(adapter->netdev, total_packets, total_bytes); in atl1c_clean_tx_irq()
1575 if (netif_queue_stopped(adapter->netdev) && in atl1c_clean_tx_irq()
1576 netif_carrier_ok(adapter->netdev)) { in atl1c_clean_tx_irq()
1577 netif_wake_queue(adapter->netdev); in atl1c_clean_tx_irq()
1591 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_intr() local
1592 struct pci_dev *pdev = adapter->pdev; in atl1c_intr()
1593 struct atl1c_hw *hw = &adapter->hw; in atl1c_intr()
1610 atl1c_clear_phy_int(adapter); in atl1c_intr()
1614 if (likely(napi_schedule_prep(&adapter->napi))) { in atl1c_intr()
1617 __napi_schedule(&adapter->napi); in atl1c_intr()
1621 atl1c_clean_tx_irq(adapter, atl1c_trans_normal); in atl1c_intr()
1626 if (netif_msg_hw(adapter)) in atl1c_intr()
1631 set_bit(ATL1C_WORK_EVENT_RESET, &adapter->work_event); in atl1c_intr()
1632 schedule_work(&adapter->common_task); in atl1c_intr()
1637 if (netif_msg_intr(adapter)) in atl1c_intr()
1645 atl1c_link_chg_event(adapter); in atl1c_intr()
1651 AT_WRITE_REG(&adapter->hw, REG_ISR, 0); in atl1c_intr()
1655 static inline void atl1c_rx_checksum(struct atl1c_adapter *adapter, in atl1c_rx_checksum() argument
1666 static struct sk_buff *atl1c_alloc_skb(struct atl1c_adapter *adapter) in atl1c_alloc_skb() argument
1671 if (adapter->rx_frag_size > PAGE_SIZE) in atl1c_alloc_skb()
1672 return netdev_alloc_skb(adapter->netdev, in atl1c_alloc_skb()
1673 adapter->rx_buffer_len); in atl1c_alloc_skb()
1675 page = adapter->rx_page; in atl1c_alloc_skb()
1677 adapter->rx_page = page = alloc_page(GFP_ATOMIC); in atl1c_alloc_skb()
1680 adapter->rx_page_offset = 0; in atl1c_alloc_skb()
1683 skb = build_skb(page_address(page) + adapter->rx_page_offset, in atl1c_alloc_skb()
1684 adapter->rx_frag_size); in atl1c_alloc_skb()
1686 adapter->rx_page_offset += adapter->rx_frag_size; in atl1c_alloc_skb()
1687 if (adapter->rx_page_offset >= PAGE_SIZE) in atl1c_alloc_skb()
1688 adapter->rx_page = NULL; in atl1c_alloc_skb()
1695 static int atl1c_alloc_rx_buffer(struct atl1c_adapter *adapter) in atl1c_alloc_rx_buffer() argument
1697 struct atl1c_rfd_ring *rfd_ring = &adapter->rfd_ring; in atl1c_alloc_rx_buffer()
1698 struct pci_dev *pdev = adapter->pdev; in atl1c_alloc_rx_buffer()
1716 skb = atl1c_alloc_skb(adapter); in atl1c_alloc_rx_buffer()
1718 if (netif_msg_rx_err(adapter)) in atl1c_alloc_rx_buffer()
1731 buffer_info->length = adapter->rx_buffer_len; in atl1c_alloc_rx_buffer()
1740 netif_warn(adapter, rx_err, adapter->netdev, "RX pci_map_single failed"); in atl1c_alloc_rx_buffer()
1759 AT_WRITE_REG(&adapter->hw, REG_MB_RFD0_PROD_IDX, in atl1c_alloc_rx_buffer()
1798 static void atl1c_clean_rx_irq(struct atl1c_adapter *adapter, in atl1c_clean_rx_irq() argument
1804 struct pci_dev *pdev = adapter->pdev; in atl1c_clean_rx_irq()
1805 struct net_device *netdev = adapter->netdev; in atl1c_clean_rx_irq()
1806 struct atl1c_rfd_ring *rfd_ring = &adapter->rfd_ring; in atl1c_clean_rx_irq()
1807 struct atl1c_rrd_ring *rrd_ring = &adapter->rrd_ring; in atl1c_clean_rx_irq()
1821 if (netif_msg_rx_err(adapter)) in atl1c_clean_rx_irq()
1832 if (netif_msg_rx_err(adapter)) in atl1c_clean_rx_irq()
1851 if (netif_msg_rx_err(adapter)) in atl1c_clean_rx_irq()
1859 atl1c_rx_checksum(adapter, skb, rrs); in atl1c_clean_rx_irq()
1873 atl1c_alloc_rx_buffer(adapter); in atl1c_clean_rx_irq()
1881 struct atl1c_adapter *adapter = in atl1c_clean() local
1886 if (!netif_carrier_ok(adapter->netdev)) in atl1c_clean()
1889 atl1c_clean_rx_irq(adapter, &work_done, budget); in atl1c_clean()
1894 adapter->hw.intr_mask |= ISR_RX_PKT; in atl1c_clean()
1895 AT_WRITE_REG(&adapter->hw, REG_IMR, adapter->hw.intr_mask); in atl1c_clean()
1909 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_netpoll() local
1911 disable_irq(adapter->pdev->irq); in atl1c_netpoll()
1912 atl1c_intr(adapter->pdev->irq, netdev); in atl1c_netpoll()
1913 enable_irq(adapter->pdev->irq); in atl1c_netpoll()
1917 static inline u16 atl1c_tpd_avail(struct atl1c_adapter *adapter, enum atl1c_trans_queue type) in atl1c_tpd_avail() argument
1919 struct atl1c_tpd_ring *tpd_ring = &adapter->tpd_ring[type]; in atl1c_tpd_avail()
1936 static struct atl1c_tpd_desc *atl1c_get_tpd(struct atl1c_adapter *adapter, in atl1c_get_tpd() argument
1939 struct atl1c_tpd_ring *tpd_ring = &adapter->tpd_ring[type]; in atl1c_get_tpd()
1952 atl1c_get_tx_buffer(struct atl1c_adapter *adapter, struct atl1c_tpd_desc *tpd) in atl1c_get_tx_buffer() argument
1954 struct atl1c_tpd_ring *tpd_ring = adapter->tpd_ring; in atl1c_get_tx_buffer()
1978 static int atl1c_tso_csum(struct atl1c_adapter *adapter, in atl1c_tso_csum() argument
1983 struct pci_dev *pdev = adapter->pdev; in atl1c_tso_csum()
2007 if (netif_msg_tx_queued(adapter)) in atl1c_tso_csum()
2026 *tpd = atl1c_get_tpd(adapter, type); in atl1c_tso_csum()
2032 if (netif_msg_tx_queued(adapter)) in atl1c_tso_csum()
2061 if (netif_msg_tx_err(adapter)) in atl1c_tso_csum()
2062 dev_err(&adapter->pdev->dev, in atl1c_tso_csum()
2100 static int atl1c_tx_map(struct atl1c_adapter *adapter, in atl1c_tx_map() argument
2121 buffer_info = atl1c_get_tx_buffer(adapter, use_tpd); in atl1c_tx_map()
2123 buffer_info->dma = pci_map_single(adapter->pdev, in atl1c_tx_map()
2125 if (unlikely(pci_dma_mapping_error(adapter->pdev, in atl1c_tx_map()
2142 use_tpd = atl1c_get_tpd(adapter, type); in atl1c_tx_map()
2145 buffer_info = atl1c_get_tx_buffer(adapter, use_tpd); in atl1c_tx_map()
2148 pci_map_single(adapter->pdev, skb->data + mapped_len, in atl1c_tx_map()
2150 if (unlikely(pci_dma_mapping_error(adapter->pdev, in atl1c_tx_map()
2166 use_tpd = atl1c_get_tpd(adapter, type); in atl1c_tx_map()
2169 buffer_info = atl1c_get_tx_buffer(adapter, use_tpd); in atl1c_tx_map()
2171 buffer_info->dma = skb_frag_dma_map(&adapter->pdev->dev, in atl1c_tx_map()
2175 if (dma_mapping_error(&adapter->pdev->dev, buffer_info->dma)) in atl1c_tx_map()
2199 static void atl1c_tx_queue(struct atl1c_adapter *adapter, struct sk_buff *skb, in atl1c_tx_queue() argument
2202 struct atl1c_tpd_ring *tpd_ring = &adapter->tpd_ring[type]; in atl1c_tx_queue()
2206 AT_WRITE_REGW(&adapter->hw, reg, tpd_ring->next_to_use); in atl1c_tx_queue()
2212 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_xmit_frame() local
2218 if (test_bit(__AT_DOWN, &adapter->flags)) { in atl1c_xmit_frame()
2224 if (!spin_trylock_irqsave(&adapter->tx_lock, flags)) { in atl1c_xmit_frame()
2225 if (netif_msg_pktdata(adapter)) in atl1c_xmit_frame()
2226 dev_info(&adapter->pdev->dev, "tx locked\n"); in atl1c_xmit_frame()
2230 if (atl1c_tpd_avail(adapter, type) < tpd_req) { in atl1c_xmit_frame()
2233 spin_unlock_irqrestore(&adapter->tx_lock, flags); in atl1c_xmit_frame()
2237 tpd = atl1c_get_tpd(adapter, type); in atl1c_xmit_frame()
2240 if (atl1c_tso_csum(adapter, skb, &tpd, type) != 0) { in atl1c_xmit_frame()
2241 spin_unlock_irqrestore(&adapter->tx_lock, flags); in atl1c_xmit_frame()
2259 if (atl1c_tx_map(adapter, skb, tpd, type) < 0) { in atl1c_xmit_frame()
2260 netif_info(adapter, tx_done, adapter->netdev, in atl1c_xmit_frame()
2263 atl1c_tx_rollback(adapter, tpd, type); in atl1c_xmit_frame()
2264 spin_unlock_irqrestore(&adapter->tx_lock, flags); in atl1c_xmit_frame()
2267 netdev_sent_queue(adapter->netdev, skb->len); in atl1c_xmit_frame()
2268 atl1c_tx_queue(adapter, skb, tpd, type); in atl1c_xmit_frame()
2269 spin_unlock_irqrestore(&adapter->tx_lock, flags); in atl1c_xmit_frame()
2275 static void atl1c_free_irq(struct atl1c_adapter *adapter) in atl1c_free_irq() argument
2277 struct net_device *netdev = adapter->netdev; in atl1c_free_irq()
2279 free_irq(adapter->pdev->irq, netdev); in atl1c_free_irq()
2281 if (adapter->have_msi) in atl1c_free_irq()
2282 pci_disable_msi(adapter->pdev); in atl1c_free_irq()
2285 static int atl1c_request_irq(struct atl1c_adapter *adapter) in atl1c_request_irq() argument
2287 struct pci_dev *pdev = adapter->pdev; in atl1c_request_irq()
2288 struct net_device *netdev = adapter->netdev; in atl1c_request_irq()
2292 adapter->have_msi = true; in atl1c_request_irq()
2293 err = pci_enable_msi(adapter->pdev); in atl1c_request_irq()
2295 if (netif_msg_ifup(adapter)) in atl1c_request_irq()
2299 adapter->have_msi = false; in atl1c_request_irq()
2302 if (!adapter->have_msi) in atl1c_request_irq()
2304 err = request_irq(adapter->pdev->irq, atl1c_intr, flags, in atl1c_request_irq()
2307 if (netif_msg_ifup(adapter)) in atl1c_request_irq()
2311 if (adapter->have_msi) in atl1c_request_irq()
2312 pci_disable_msi(adapter->pdev); in atl1c_request_irq()
2315 if (netif_msg_ifup(adapter)) in atl1c_request_irq()
2321 static void atl1c_reset_dma_ring(struct atl1c_adapter *adapter) in atl1c_reset_dma_ring() argument
2324 atl1c_clean_tx_ring(adapter, atl1c_trans_normal); in atl1c_reset_dma_ring()
2325 atl1c_clean_tx_ring(adapter, atl1c_trans_high); in atl1c_reset_dma_ring()
2326 atl1c_clean_rx_ring(adapter); in atl1c_reset_dma_ring()
2329 static int atl1c_up(struct atl1c_adapter *adapter) in atl1c_up() argument
2331 struct net_device *netdev = adapter->netdev; in atl1c_up()
2336 err = atl1c_configure(adapter); in atl1c_up()
2340 err = atl1c_request_irq(adapter); in atl1c_up()
2344 atl1c_check_link_status(adapter); in atl1c_up()
2345 clear_bit(__AT_DOWN, &adapter->flags); in atl1c_up()
2346 napi_enable(&adapter->napi); in atl1c_up()
2347 atl1c_irq_enable(adapter); in atl1c_up()
2352 atl1c_clean_rx_ring(adapter); in atl1c_up()
2356 static void atl1c_down(struct atl1c_adapter *adapter) in atl1c_down() argument
2358 struct net_device *netdev = adapter->netdev; in atl1c_down()
2360 atl1c_del_timer(adapter); in atl1c_down()
2361 adapter->work_event = 0; /* clear all event */ in atl1c_down()
2364 set_bit(__AT_DOWN, &adapter->flags); in atl1c_down()
2366 napi_disable(&adapter->napi); in atl1c_down()
2367 atl1c_irq_disable(adapter); in atl1c_down()
2368 atl1c_free_irq(adapter); in atl1c_down()
2370 atl1c_disable_l0s_l1(&adapter->hw); in atl1c_down()
2372 atl1c_reset_mac(&adapter->hw); in atl1c_down()
2375 adapter->link_speed = SPEED_0; in atl1c_down()
2376 adapter->link_duplex = -1; in atl1c_down()
2377 atl1c_reset_dma_ring(adapter); in atl1c_down()
2394 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_open() local
2398 if (test_bit(__AT_TESTING, &adapter->flags)) in atl1c_open()
2402 err = atl1c_setup_ring_resources(adapter); in atl1c_open()
2406 err = atl1c_up(adapter); in atl1c_open()
2413 atl1c_free_irq(adapter); in atl1c_open()
2414 atl1c_free_ring_resources(adapter); in atl1c_open()
2415 atl1c_reset_mac(&adapter->hw); in atl1c_open()
2432 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_close() local
2434 WARN_ON(test_bit(__AT_RESETTING, &adapter->flags)); in atl1c_close()
2435 set_bit(__AT_DOWN, &adapter->flags); in atl1c_close()
2436 cancel_work_sync(&adapter->common_task); in atl1c_close()
2437 atl1c_down(adapter); in atl1c_close()
2438 atl1c_free_ring_resources(adapter); in atl1c_close()
2446 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_suspend() local
2447 struct atl1c_hw *hw = &adapter->hw; in atl1c_suspend()
2448 u32 wufc = adapter->wol; in atl1c_suspend()
2452 WARN_ON(test_bit(__AT_RESETTING, &adapter->flags)); in atl1c_suspend()
2453 atl1c_down(adapter); in atl1c_suspend()
2471 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_resume() local
2473 AT_WRITE_REG(&adapter->hw, REG_WOL_CTRL, 0); in atl1c_resume()
2474 atl1c_reset_pcie(&adapter->hw, ATL1C_PCIE_L0S_L1_DISABLE); in atl1c_resume()
2476 atl1c_phy_reset(&adapter->hw); in atl1c_resume()
2477 atl1c_reset_mac(&adapter->hw); in atl1c_resume()
2478 atl1c_phy_init(&adapter->hw); in atl1c_resume()
2481 AT_READ_REG(&adapter->hw, REG_PM_CTRLSTAT, &pm_data); in atl1c_resume()
2483 AT_WRITE_REG(&adapter->hw, REG_PM_CTRLSTAT, pm_data); in atl1c_resume()
2488 atl1c_up(adapter); in atl1c_resume()
2497 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_shutdown() local
2500 pci_wake_from_d3(pdev, adapter->wol); in atl1c_shutdown()
2556 struct atl1c_adapter *adapter; in atl1c_probe() local
2603 adapter = netdev_priv(netdev); in atl1c_probe()
2604 adapter->bd_number = cards_found; in atl1c_probe()
2605 adapter->netdev = netdev; in atl1c_probe()
2606 adapter->pdev = pdev; in atl1c_probe()
2607 adapter->hw.adapter = adapter; in atl1c_probe()
2608 adapter->msg_enable = netif_msg_init(-1, atl1c_default_msg); in atl1c_probe()
2609 adapter->hw.hw_addr = ioremap(pci_resource_start(pdev, 0), pci_resource_len(pdev, 0)); in atl1c_probe()
2610 if (!adapter->hw.hw_addr) { in atl1c_probe()
2617 adapter->mii.dev = netdev; in atl1c_probe()
2618 adapter->mii.mdio_read = atl1c_mdio_read; in atl1c_probe()
2619 adapter->mii.mdio_write = atl1c_mdio_write; in atl1c_probe()
2620 adapter->mii.phy_id_mask = 0x1f; in atl1c_probe()
2621 adapter->mii.reg_num_mask = MDIO_CTRL_REG_MASK; in atl1c_probe()
2622 netif_napi_add(netdev, &adapter->napi, atl1c_clean, 64); in atl1c_probe()
2623 setup_timer(&adapter->phy_config_timer, atl1c_phy_config, in atl1c_probe()
2624 (unsigned long)adapter); in atl1c_probe()
2626 err = atl1c_sw_init(adapter); in atl1c_probe()
2631 atl1c_reset_pcie(&adapter->hw, ATL1C_PCIE_L0S_L1_DISABLE); in atl1c_probe()
2634 atl1c_phy_reset(&adapter->hw); in atl1c_probe()
2636 err = atl1c_reset_mac(&adapter->hw); in atl1c_probe()
2644 err = atl1c_phy_init(&adapter->hw); in atl1c_probe()
2649 if (atl1c_read_mac_addr(&adapter->hw)) { in atl1c_probe()
2653 memcpy(netdev->dev_addr, adapter->hw.mac_addr, netdev->addr_len); in atl1c_probe()
2654 if (netif_msg_probe(adapter)) in atl1c_probe()
2656 adapter->hw.mac_addr); in atl1c_probe()
2658 atl1c_hw_set_mac_addr(&adapter->hw, adapter->hw.mac_addr); in atl1c_probe()
2659 INIT_WORK(&adapter->common_task, atl1c_common_task); in atl1c_probe()
2660 adapter->work_event = 0; in atl1c_probe()
2667 if (netif_msg_probe(adapter)) in atl1c_probe()
2675 iounmap(adapter->hw.hw_addr); in atl1c_probe()
2699 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_remove() local
2703 atl1c_hw_set_mac_addr(&adapter->hw, adapter->hw.perm_mac_addr); in atl1c_remove()
2704 atl1c_phy_disable(&adapter->hw); in atl1c_remove()
2706 iounmap(adapter->hw.hw_addr); in atl1c_remove()
2725 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_io_error_detected() local
2733 atl1c_down(adapter); in atl1c_io_error_detected()
2751 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_io_slot_reset() local
2754 if (netif_msg_hw(adapter)) in atl1c_io_slot_reset()
2764 atl1c_reset_mac(&adapter->hw); in atl1c_io_slot_reset()
2780 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_io_resume() local
2783 if (atl1c_up(adapter)) { in atl1c_io_resume()
2784 if (netif_msg_hw(adapter)) in atl1c_io_resume()