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()
888 static void atl1c_clean_rx_ring(struct atl1c_adapter *adapter) in atl1c_clean_rx_ring() argument
890 struct atl1c_rfd_ring *rfd_ring = &adapter->rfd_ring; in atl1c_clean_rx_ring()
891 struct atl1c_rrd_ring *rrd_ring = &adapter->rrd_ring; in atl1c_clean_rx_ring()
893 struct pci_dev *pdev = adapter->pdev; in atl1c_clean_rx_ring()
911 static void atl1c_init_ring_ptrs(struct atl1c_adapter *adapter) in atl1c_init_ring_ptrs() argument
913 struct atl1c_tpd_ring *tpd_ring = adapter->tpd_ring; in atl1c_init_ring_ptrs()
914 struct atl1c_rfd_ring *rfd_ring = &adapter->rfd_ring; in atl1c_init_ring_ptrs()
915 struct atl1c_rrd_ring *rrd_ring = &adapter->rrd_ring; in atl1c_init_ring_ptrs()
943 static void atl1c_free_ring_resources(struct atl1c_adapter *adapter) in atl1c_free_ring_resources() argument
945 struct pci_dev *pdev = adapter->pdev; in atl1c_free_ring_resources()
947 pci_free_consistent(pdev, adapter->ring_header.size, in atl1c_free_ring_resources()
948 adapter->ring_header.desc, in atl1c_free_ring_resources()
949 adapter->ring_header.dma); in atl1c_free_ring_resources()
950 adapter->ring_header.desc = NULL; in atl1c_free_ring_resources()
954 if (adapter->tpd_ring[0].buffer_info) { in atl1c_free_ring_resources()
955 kfree(adapter->tpd_ring[0].buffer_info); in atl1c_free_ring_resources()
956 adapter->tpd_ring[0].buffer_info = NULL; in atl1c_free_ring_resources()
958 if (adapter->rx_page) { in atl1c_free_ring_resources()
959 put_page(adapter->rx_page); in atl1c_free_ring_resources()
960 adapter->rx_page = NULL; in atl1c_free_ring_resources()
970 static int atl1c_setup_ring_resources(struct atl1c_adapter *adapter) in atl1c_setup_ring_resources() argument
972 struct pci_dev *pdev = adapter->pdev; in atl1c_setup_ring_resources()
973 struct atl1c_tpd_ring *tpd_ring = adapter->tpd_ring; in atl1c_setup_ring_resources()
974 struct atl1c_rfd_ring *rfd_ring = &adapter->rfd_ring; in atl1c_setup_ring_resources()
975 struct atl1c_rrd_ring *rrd_ring = &adapter->rrd_ring; in atl1c_setup_ring_resources()
976 struct atl1c_ring_header *ring_header = &adapter->ring_header; in atl1c_setup_ring_resources()
1054 static void atl1c_configure_des_ring(struct atl1c_adapter *adapter) in atl1c_configure_des_ring() argument
1056 struct atl1c_hw *hw = &adapter->hw; in atl1c_configure_des_ring()
1057 struct atl1c_rfd_ring *rfd_ring = &adapter->rfd_ring; in atl1c_configure_des_ring()
1058 struct atl1c_rrd_ring *rrd_ring = &adapter->rrd_ring; in atl1c_configure_des_ring()
1060 adapter->tpd_ring; in atl1c_configure_des_ring()
1086 adapter->rx_buffer_len & RX_BUF_SIZE_MASK); in atl1c_configure_des_ring()
1108 static void atl1c_configure_tx(struct atl1c_adapter *adapter) in atl1c_configure_tx() argument
1110 struct atl1c_hw *hw = &adapter->hw; in atl1c_configure_tx()
1118 max_pay_load = pcie_get_readrq(adapter->pdev) >> 8; in atl1c_configure_tx()
1125 pcie_set_readrq(adapter->pdev, 128 << DEVICE_CTRL_MAXRRS_MIN); in atl1c_configure_tx()
1135 static void atl1c_configure_rx(struct atl1c_adapter *adapter) in atl1c_configure_rx() argument
1137 struct atl1c_hw *hw = &adapter->hw; in atl1c_configure_rx()
1154 static void atl1c_configure_dma(struct atl1c_adapter *adapter) in atl1c_configure_dma() argument
1156 struct atl1c_hw *hw = &adapter->hw; in atl1c_configure_dma()
1195 static void atl1c_start_mac(struct atl1c_adapter *adapter) in atl1c_start_mac() argument
1197 struct atl1c_hw *hw = &adapter->hw; in atl1c_start_mac()
1200 hw->mac_duplex = adapter->link_duplex == FULL_DUPLEX ? true : false; in atl1c_start_mac()
1201 hw->mac_speed = adapter->link_speed == SPEED_1000 ? in atl1c_start_mac()
1234 struct atl1c_adapter *adapter = hw->adapter; in atl1c_reset_mac() local
1235 struct pci_dev *pdev = adapter->pdev; in atl1c_reset_mac()
1376 static int atl1c_configure_mac(struct atl1c_adapter *adapter) in atl1c_configure_mac() argument
1378 struct atl1c_hw *hw = &adapter->hw; in atl1c_configure_mac()
1407 atl1c_configure_des_ring(adapter); in atl1c_configure_mac()
1432 atl1c_configure_tx(adapter); in atl1c_configure_mac()
1433 atl1c_configure_rx(adapter); in atl1c_configure_mac()
1434 atl1c_configure_dma(adapter); in atl1c_configure_mac()
1439 static int atl1c_configure(struct atl1c_adapter *adapter) in atl1c_configure() argument
1441 struct net_device *netdev = adapter->netdev; in atl1c_configure()
1444 atl1c_init_ring_ptrs(adapter); in atl1c_configure()
1446 atl1c_restore_vlan(adapter); in atl1c_configure()
1448 num = atl1c_alloc_rx_buffer(adapter); in atl1c_configure()
1452 if (atl1c_configure_mac(adapter)) in atl1c_configure()
1458 static void atl1c_update_hw_stats(struct atl1c_adapter *adapter) in atl1c_update_hw_stats() argument
1466 stats_item = &adapter->hw_stats.rx_ok; in atl1c_update_hw_stats()
1468 AT_READ_REG(&adapter->hw, hw_reg_addr, &data); in atl1c_update_hw_stats()
1475 stats_item = &adapter->hw_stats.tx_ok; in atl1c_update_hw_stats()
1477 AT_READ_REG(&adapter->hw, hw_reg_addr, &data); in atl1c_update_hw_stats()
1493 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_get_stats() local
1494 struct atl1c_hw_stats *hw_stats = &adapter->hw_stats; in atl1c_get_stats()
1497 atl1c_update_hw_stats(adapter); in atl1c_get_stats()
1535 static inline void atl1c_clear_phy_int(struct atl1c_adapter *adapter) in atl1c_clear_phy_int() argument
1539 spin_lock(&adapter->mdio_lock); in atl1c_clear_phy_int()
1540 atl1c_read_phy_reg(&adapter->hw, MII_ISR, &phy_data); in atl1c_clear_phy_int()
1541 spin_unlock(&adapter->mdio_lock); in atl1c_clear_phy_int()
1544 static bool atl1c_clean_tx_irq(struct atl1c_adapter *adapter, in atl1c_clean_tx_irq() argument
1547 struct atl1c_tpd_ring *tpd_ring = &adapter->tpd_ring[type]; in atl1c_clean_tx_irq()
1549 struct pci_dev *pdev = adapter->pdev; in atl1c_clean_tx_irq()
1556 AT_READ_REGW(&adapter->hw, reg, &hw_next_to_clean); in atl1c_clean_tx_irq()
1566 if (netif_queue_stopped(adapter->netdev) && in atl1c_clean_tx_irq()
1567 netif_carrier_ok(adapter->netdev)) { in atl1c_clean_tx_irq()
1568 netif_wake_queue(adapter->netdev); in atl1c_clean_tx_irq()
1582 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_intr() local
1583 struct pci_dev *pdev = adapter->pdev; in atl1c_intr()
1584 struct atl1c_hw *hw = &adapter->hw; in atl1c_intr()
1601 atl1c_clear_phy_int(adapter); in atl1c_intr()
1605 if (likely(napi_schedule_prep(&adapter->napi))) { in atl1c_intr()
1608 __napi_schedule(&adapter->napi); in atl1c_intr()
1612 atl1c_clean_tx_irq(adapter, atl1c_trans_normal); in atl1c_intr()
1617 if (netif_msg_hw(adapter)) in atl1c_intr()
1622 set_bit(ATL1C_WORK_EVENT_RESET, &adapter->work_event); in atl1c_intr()
1623 schedule_work(&adapter->common_task); in atl1c_intr()
1628 if (netif_msg_intr(adapter)) in atl1c_intr()
1636 atl1c_link_chg_event(adapter); in atl1c_intr()
1642 AT_WRITE_REG(&adapter->hw, REG_ISR, 0); in atl1c_intr()
1646 static inline void atl1c_rx_checksum(struct atl1c_adapter *adapter, in atl1c_rx_checksum() argument
1657 static struct sk_buff *atl1c_alloc_skb(struct atl1c_adapter *adapter) in atl1c_alloc_skb() argument
1662 if (adapter->rx_frag_size > PAGE_SIZE) in atl1c_alloc_skb()
1663 return netdev_alloc_skb(adapter->netdev, in atl1c_alloc_skb()
1664 adapter->rx_buffer_len); in atl1c_alloc_skb()
1666 page = adapter->rx_page; in atl1c_alloc_skb()
1668 adapter->rx_page = page = alloc_page(GFP_ATOMIC); in atl1c_alloc_skb()
1671 adapter->rx_page_offset = 0; in atl1c_alloc_skb()
1674 skb = build_skb(page_address(page) + adapter->rx_page_offset, in atl1c_alloc_skb()
1675 adapter->rx_frag_size); in atl1c_alloc_skb()
1677 adapter->rx_page_offset += adapter->rx_frag_size; in atl1c_alloc_skb()
1678 if (adapter->rx_page_offset >= PAGE_SIZE) in atl1c_alloc_skb()
1679 adapter->rx_page = NULL; in atl1c_alloc_skb()
1686 static int atl1c_alloc_rx_buffer(struct atl1c_adapter *adapter) in atl1c_alloc_rx_buffer() argument
1688 struct atl1c_rfd_ring *rfd_ring = &adapter->rfd_ring; in atl1c_alloc_rx_buffer()
1689 struct pci_dev *pdev = adapter->pdev; in atl1c_alloc_rx_buffer()
1707 skb = atl1c_alloc_skb(adapter); in atl1c_alloc_rx_buffer()
1709 if (netif_msg_rx_err(adapter)) in atl1c_alloc_rx_buffer()
1722 buffer_info->length = adapter->rx_buffer_len; in atl1c_alloc_rx_buffer()
1731 netif_warn(adapter, rx_err, adapter->netdev, "RX pci_map_single failed"); in atl1c_alloc_rx_buffer()
1750 AT_WRITE_REG(&adapter->hw, REG_MB_RFD0_PROD_IDX, in atl1c_alloc_rx_buffer()
1789 static void atl1c_clean_rx_irq(struct atl1c_adapter *adapter, in atl1c_clean_rx_irq() argument
1795 struct pci_dev *pdev = adapter->pdev; in atl1c_clean_rx_irq()
1796 struct net_device *netdev = adapter->netdev; in atl1c_clean_rx_irq()
1797 struct atl1c_rfd_ring *rfd_ring = &adapter->rfd_ring; in atl1c_clean_rx_irq()
1798 struct atl1c_rrd_ring *rrd_ring = &adapter->rrd_ring; in atl1c_clean_rx_irq()
1812 if (netif_msg_rx_err(adapter)) in atl1c_clean_rx_irq()
1823 if (netif_msg_rx_err(adapter)) in atl1c_clean_rx_irq()
1842 if (netif_msg_rx_err(adapter)) in atl1c_clean_rx_irq()
1850 atl1c_rx_checksum(adapter, skb, rrs); in atl1c_clean_rx_irq()
1864 atl1c_alloc_rx_buffer(adapter); in atl1c_clean_rx_irq()
1872 struct atl1c_adapter *adapter = in atl1c_clean() local
1877 if (!netif_carrier_ok(adapter->netdev)) in atl1c_clean()
1880 atl1c_clean_rx_irq(adapter, &work_done, budget); in atl1c_clean()
1885 adapter->hw.intr_mask |= ISR_RX_PKT; in atl1c_clean()
1886 AT_WRITE_REG(&adapter->hw, REG_IMR, adapter->hw.intr_mask); in atl1c_clean()
1900 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_netpoll() local
1902 disable_irq(adapter->pdev->irq); in atl1c_netpoll()
1903 atl1c_intr(adapter->pdev->irq, netdev); in atl1c_netpoll()
1904 enable_irq(adapter->pdev->irq); in atl1c_netpoll()
1908 static inline u16 atl1c_tpd_avail(struct atl1c_adapter *adapter, enum atl1c_trans_queue type) in atl1c_tpd_avail() argument
1910 struct atl1c_tpd_ring *tpd_ring = &adapter->tpd_ring[type]; in atl1c_tpd_avail()
1927 static struct atl1c_tpd_desc *atl1c_get_tpd(struct atl1c_adapter *adapter, in atl1c_get_tpd() argument
1930 struct atl1c_tpd_ring *tpd_ring = &adapter->tpd_ring[type]; in atl1c_get_tpd()
1943 atl1c_get_tx_buffer(struct atl1c_adapter *adapter, struct atl1c_tpd_desc *tpd) in atl1c_get_tx_buffer() argument
1945 struct atl1c_tpd_ring *tpd_ring = adapter->tpd_ring; in atl1c_get_tx_buffer()
1969 static int atl1c_tso_csum(struct atl1c_adapter *adapter, in atl1c_tso_csum() argument
1974 struct pci_dev *pdev = adapter->pdev; in atl1c_tso_csum()
1998 if (netif_msg_tx_queued(adapter)) in atl1c_tso_csum()
2017 *tpd = atl1c_get_tpd(adapter, type); in atl1c_tso_csum()
2023 if (netif_msg_tx_queued(adapter)) in atl1c_tso_csum()
2052 if (netif_msg_tx_err(adapter)) in atl1c_tso_csum()
2053 dev_err(&adapter->pdev->dev, in atl1c_tso_csum()
2091 static int atl1c_tx_map(struct atl1c_adapter *adapter, in atl1c_tx_map() argument
2112 buffer_info = atl1c_get_tx_buffer(adapter, use_tpd); in atl1c_tx_map()
2114 buffer_info->dma = pci_map_single(adapter->pdev, in atl1c_tx_map()
2116 if (unlikely(pci_dma_mapping_error(adapter->pdev, in atl1c_tx_map()
2133 use_tpd = atl1c_get_tpd(adapter, type); in atl1c_tx_map()
2136 buffer_info = atl1c_get_tx_buffer(adapter, use_tpd); in atl1c_tx_map()
2139 pci_map_single(adapter->pdev, skb->data + mapped_len, in atl1c_tx_map()
2141 if (unlikely(pci_dma_mapping_error(adapter->pdev, in atl1c_tx_map()
2157 use_tpd = atl1c_get_tpd(adapter, type); in atl1c_tx_map()
2160 buffer_info = atl1c_get_tx_buffer(adapter, use_tpd); in atl1c_tx_map()
2162 buffer_info->dma = skb_frag_dma_map(&adapter->pdev->dev, in atl1c_tx_map()
2166 if (dma_mapping_error(&adapter->pdev->dev, buffer_info->dma)) in atl1c_tx_map()
2190 static void atl1c_tx_queue(struct atl1c_adapter *adapter, struct sk_buff *skb, in atl1c_tx_queue() argument
2193 struct atl1c_tpd_ring *tpd_ring = &adapter->tpd_ring[type]; in atl1c_tx_queue()
2197 AT_WRITE_REGW(&adapter->hw, reg, tpd_ring->next_to_use); in atl1c_tx_queue()
2203 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_xmit_frame() local
2209 if (test_bit(__AT_DOWN, &adapter->flags)) { in atl1c_xmit_frame()
2215 if (!spin_trylock_irqsave(&adapter->tx_lock, flags)) { in atl1c_xmit_frame()
2216 if (netif_msg_pktdata(adapter)) in atl1c_xmit_frame()
2217 dev_info(&adapter->pdev->dev, "tx locked\n"); in atl1c_xmit_frame()
2221 if (atl1c_tpd_avail(adapter, type) < tpd_req) { in atl1c_xmit_frame()
2224 spin_unlock_irqrestore(&adapter->tx_lock, flags); in atl1c_xmit_frame()
2228 tpd = atl1c_get_tpd(adapter, type); in atl1c_xmit_frame()
2231 if (atl1c_tso_csum(adapter, skb, &tpd, type) != 0) { in atl1c_xmit_frame()
2232 spin_unlock_irqrestore(&adapter->tx_lock, flags); in atl1c_xmit_frame()
2250 if (atl1c_tx_map(adapter, skb, tpd, type) < 0) { in atl1c_xmit_frame()
2251 netif_info(adapter, tx_done, adapter->netdev, in atl1c_xmit_frame()
2254 atl1c_tx_rollback(adapter, tpd, type); in atl1c_xmit_frame()
2255 spin_unlock_irqrestore(&adapter->tx_lock, flags); in atl1c_xmit_frame()
2258 atl1c_tx_queue(adapter, skb, tpd, type); in atl1c_xmit_frame()
2259 spin_unlock_irqrestore(&adapter->tx_lock, flags); in atl1c_xmit_frame()
2265 static void atl1c_free_irq(struct atl1c_adapter *adapter) in atl1c_free_irq() argument
2267 struct net_device *netdev = adapter->netdev; in atl1c_free_irq()
2269 free_irq(adapter->pdev->irq, netdev); in atl1c_free_irq()
2271 if (adapter->have_msi) in atl1c_free_irq()
2272 pci_disable_msi(adapter->pdev); in atl1c_free_irq()
2275 static int atl1c_request_irq(struct atl1c_adapter *adapter) in atl1c_request_irq() argument
2277 struct pci_dev *pdev = adapter->pdev; in atl1c_request_irq()
2278 struct net_device *netdev = adapter->netdev; in atl1c_request_irq()
2282 adapter->have_msi = true; in atl1c_request_irq()
2283 err = pci_enable_msi(adapter->pdev); in atl1c_request_irq()
2285 if (netif_msg_ifup(adapter)) in atl1c_request_irq()
2289 adapter->have_msi = false; in atl1c_request_irq()
2292 if (!adapter->have_msi) in atl1c_request_irq()
2294 err = request_irq(adapter->pdev->irq, atl1c_intr, flags, in atl1c_request_irq()
2297 if (netif_msg_ifup(adapter)) in atl1c_request_irq()
2301 if (adapter->have_msi) in atl1c_request_irq()
2302 pci_disable_msi(adapter->pdev); in atl1c_request_irq()
2305 if (netif_msg_ifup(adapter)) in atl1c_request_irq()
2311 static void atl1c_reset_dma_ring(struct atl1c_adapter *adapter) in atl1c_reset_dma_ring() argument
2314 atl1c_clean_tx_ring(adapter, atl1c_trans_normal); in atl1c_reset_dma_ring()
2315 atl1c_clean_tx_ring(adapter, atl1c_trans_high); in atl1c_reset_dma_ring()
2316 atl1c_clean_rx_ring(adapter); in atl1c_reset_dma_ring()
2319 static int atl1c_up(struct atl1c_adapter *adapter) in atl1c_up() argument
2321 struct net_device *netdev = adapter->netdev; in atl1c_up()
2326 err = atl1c_configure(adapter); in atl1c_up()
2330 err = atl1c_request_irq(adapter); in atl1c_up()
2334 atl1c_check_link_status(adapter); in atl1c_up()
2335 clear_bit(__AT_DOWN, &adapter->flags); in atl1c_up()
2336 napi_enable(&adapter->napi); in atl1c_up()
2337 atl1c_irq_enable(adapter); in atl1c_up()
2342 atl1c_clean_rx_ring(adapter); in atl1c_up()
2346 static void atl1c_down(struct atl1c_adapter *adapter) in atl1c_down() argument
2348 struct net_device *netdev = adapter->netdev; in atl1c_down()
2350 atl1c_del_timer(adapter); in atl1c_down()
2351 adapter->work_event = 0; /* clear all event */ in atl1c_down()
2354 set_bit(__AT_DOWN, &adapter->flags); in atl1c_down()
2356 napi_disable(&adapter->napi); in atl1c_down()
2357 atl1c_irq_disable(adapter); in atl1c_down()
2358 atl1c_free_irq(adapter); in atl1c_down()
2360 atl1c_disable_l0s_l1(&adapter->hw); in atl1c_down()
2362 atl1c_reset_mac(&adapter->hw); in atl1c_down()
2365 adapter->link_speed = SPEED_0; in atl1c_down()
2366 adapter->link_duplex = -1; in atl1c_down()
2367 atl1c_reset_dma_ring(adapter); in atl1c_down()
2384 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_open() local
2388 if (test_bit(__AT_TESTING, &adapter->flags)) in atl1c_open()
2392 err = atl1c_setup_ring_resources(adapter); in atl1c_open()
2396 err = atl1c_up(adapter); in atl1c_open()
2403 atl1c_free_irq(adapter); in atl1c_open()
2404 atl1c_free_ring_resources(adapter); in atl1c_open()
2405 atl1c_reset_mac(&adapter->hw); in atl1c_open()
2422 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_close() local
2424 WARN_ON(test_bit(__AT_RESETTING, &adapter->flags)); in atl1c_close()
2425 set_bit(__AT_DOWN, &adapter->flags); in atl1c_close()
2426 cancel_work_sync(&adapter->common_task); in atl1c_close()
2427 atl1c_down(adapter); in atl1c_close()
2428 atl1c_free_ring_resources(adapter); in atl1c_close()
2436 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_suspend() local
2437 struct atl1c_hw *hw = &adapter->hw; in atl1c_suspend()
2438 u32 wufc = adapter->wol; in atl1c_suspend()
2442 WARN_ON(test_bit(__AT_RESETTING, &adapter->flags)); in atl1c_suspend()
2443 atl1c_down(adapter); in atl1c_suspend()
2461 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_resume() local
2463 AT_WRITE_REG(&adapter->hw, REG_WOL_CTRL, 0); in atl1c_resume()
2464 atl1c_reset_pcie(&adapter->hw, ATL1C_PCIE_L0S_L1_DISABLE); in atl1c_resume()
2466 atl1c_phy_reset(&adapter->hw); in atl1c_resume()
2467 atl1c_reset_mac(&adapter->hw); in atl1c_resume()
2468 atl1c_phy_init(&adapter->hw); in atl1c_resume()
2471 AT_READ_REG(&adapter->hw, REG_PM_CTRLSTAT, &pm_data); in atl1c_resume()
2473 AT_WRITE_REG(&adapter->hw, REG_PM_CTRLSTAT, pm_data); in atl1c_resume()
2478 atl1c_up(adapter); in atl1c_resume()
2487 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_shutdown() local
2490 pci_wake_from_d3(pdev, adapter->wol); in atl1c_shutdown()
2546 struct atl1c_adapter *adapter; in atl1c_probe() local
2593 adapter = netdev_priv(netdev); in atl1c_probe()
2594 adapter->bd_number = cards_found; in atl1c_probe()
2595 adapter->netdev = netdev; in atl1c_probe()
2596 adapter->pdev = pdev; in atl1c_probe()
2597 adapter->hw.adapter = adapter; in atl1c_probe()
2598 adapter->msg_enable = netif_msg_init(-1, atl1c_default_msg); in atl1c_probe()
2599 adapter->hw.hw_addr = ioremap(pci_resource_start(pdev, 0), pci_resource_len(pdev, 0)); in atl1c_probe()
2600 if (!adapter->hw.hw_addr) { in atl1c_probe()
2607 adapter->mii.dev = netdev; in atl1c_probe()
2608 adapter->mii.mdio_read = atl1c_mdio_read; in atl1c_probe()
2609 adapter->mii.mdio_write = atl1c_mdio_write; in atl1c_probe()
2610 adapter->mii.phy_id_mask = 0x1f; in atl1c_probe()
2611 adapter->mii.reg_num_mask = MDIO_CTRL_REG_MASK; in atl1c_probe()
2612 netif_napi_add(netdev, &adapter->napi, atl1c_clean, 64); in atl1c_probe()
2613 setup_timer(&adapter->phy_config_timer, atl1c_phy_config, in atl1c_probe()
2614 (unsigned long)adapter); in atl1c_probe()
2616 err = atl1c_sw_init(adapter); in atl1c_probe()
2621 atl1c_reset_pcie(&adapter->hw, ATL1C_PCIE_L0S_L1_DISABLE); in atl1c_probe()
2624 atl1c_phy_reset(&adapter->hw); in atl1c_probe()
2626 err = atl1c_reset_mac(&adapter->hw); in atl1c_probe()
2634 err = atl1c_phy_init(&adapter->hw); in atl1c_probe()
2639 if (atl1c_read_mac_addr(&adapter->hw)) { in atl1c_probe()
2643 memcpy(netdev->dev_addr, adapter->hw.mac_addr, netdev->addr_len); in atl1c_probe()
2644 if (netif_msg_probe(adapter)) in atl1c_probe()
2646 adapter->hw.mac_addr); in atl1c_probe()
2648 atl1c_hw_set_mac_addr(&adapter->hw, adapter->hw.mac_addr); in atl1c_probe()
2649 INIT_WORK(&adapter->common_task, atl1c_common_task); in atl1c_probe()
2650 adapter->work_event = 0; in atl1c_probe()
2657 if (netif_msg_probe(adapter)) in atl1c_probe()
2665 iounmap(adapter->hw.hw_addr); in atl1c_probe()
2689 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_remove() local
2693 atl1c_hw_set_mac_addr(&adapter->hw, adapter->hw.perm_mac_addr); in atl1c_remove()
2694 atl1c_phy_disable(&adapter->hw); in atl1c_remove()
2696 iounmap(adapter->hw.hw_addr); in atl1c_remove()
2715 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_io_error_detected() local
2723 atl1c_down(adapter); in atl1c_io_error_detected()
2741 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_io_slot_reset() local
2744 if (netif_msg_hw(adapter)) in atl1c_io_slot_reset()
2754 atl1c_reset_mac(&adapter->hw); in atl1c_io_slot_reset()
2770 struct atl1c_adapter *adapter = netdev_priv(netdev); in atl1c_io_resume() local
2773 if (atl1c_up(adapter)) { in atl1c_io_resume()
2774 if (netif_msg_hw(adapter)) in atl1c_io_resume()