Lines Matching refs:adapter
51 static void atl1e_setup_mac_ctrl(struct atl1e_adapter *adapter);
96 static inline void atl1e_irq_enable(struct atl1e_adapter *adapter) in atl1e_irq_enable() argument
98 if (likely(atomic_dec_and_test(&adapter->irq_sem))) { in atl1e_irq_enable()
99 AT_WRITE_REG(&adapter->hw, REG_ISR, 0); in atl1e_irq_enable()
100 AT_WRITE_REG(&adapter->hw, REG_IMR, IMR_NORMAL_MASK); in atl1e_irq_enable()
101 AT_WRITE_FLUSH(&adapter->hw); in atl1e_irq_enable()
109 static inline void atl1e_irq_disable(struct atl1e_adapter *adapter) in atl1e_irq_disable() argument
111 atomic_inc(&adapter->irq_sem); in atl1e_irq_disable()
112 AT_WRITE_REG(&adapter->hw, REG_IMR, 0); in atl1e_irq_disable()
113 AT_WRITE_FLUSH(&adapter->hw); in atl1e_irq_disable()
114 synchronize_irq(adapter->pdev->irq); in atl1e_irq_disable()
121 static inline void atl1e_irq_reset(struct atl1e_adapter *adapter) in atl1e_irq_reset() argument
123 atomic_set(&adapter->irq_sem, 0); in atl1e_irq_reset()
124 AT_WRITE_REG(&adapter->hw, REG_ISR, 0); in atl1e_irq_reset()
125 AT_WRITE_REG(&adapter->hw, REG_IMR, 0); in atl1e_irq_reset()
126 AT_WRITE_FLUSH(&adapter->hw); in atl1e_irq_reset()
135 struct atl1e_adapter *adapter = (struct atl1e_adapter *) data; in atl1e_phy_config() local
136 struct atl1e_hw *hw = &adapter->hw; in atl1e_phy_config()
139 spin_lock_irqsave(&adapter->mdio_lock, flags); in atl1e_phy_config()
141 spin_unlock_irqrestore(&adapter->mdio_lock, flags); in atl1e_phy_config()
144 void atl1e_reinit_locked(struct atl1e_adapter *adapter) in atl1e_reinit_locked() argument
148 while (test_and_set_bit(__AT_RESETTING, &adapter->flags)) in atl1e_reinit_locked()
150 atl1e_down(adapter); in atl1e_reinit_locked()
151 atl1e_up(adapter); in atl1e_reinit_locked()
152 clear_bit(__AT_RESETTING, &adapter->flags); in atl1e_reinit_locked()
157 struct atl1e_adapter *adapter; in atl1e_reset_task() local
158 adapter = container_of(work, struct atl1e_adapter, reset_task); in atl1e_reset_task()
160 atl1e_reinit_locked(adapter); in atl1e_reset_task()
163 static int atl1e_check_link(struct atl1e_adapter *adapter) in atl1e_check_link() argument
165 struct atl1e_hw *hw = &adapter->hw; in atl1e_check_link()
166 struct net_device *netdev = adapter->netdev; in atl1e_check_link()
181 adapter->link_speed = SPEED_0; in atl1e_check_link()
192 if (adapter->link_speed != speed || in atl1e_check_link()
193 adapter->link_duplex != duplex) { in atl1e_check_link()
194 adapter->link_speed = speed; in atl1e_check_link()
195 adapter->link_duplex = duplex; in atl1e_check_link()
196 atl1e_setup_mac_ctrl(adapter); in atl1e_check_link()
199 adapter->link_speed, in atl1e_check_link()
200 adapter->link_duplex == FULL_DUPLEX ? in atl1e_check_link()
219 struct atl1e_adapter *adapter; in atl1e_link_chg_task() local
222 adapter = container_of(work, struct atl1e_adapter, link_chg_task); in atl1e_link_chg_task()
223 spin_lock_irqsave(&adapter->mdio_lock, flags); in atl1e_link_chg_task()
224 atl1e_check_link(adapter); in atl1e_link_chg_task()
225 spin_unlock_irqrestore(&adapter->mdio_lock, flags); in atl1e_link_chg_task()
228 static void atl1e_link_chg_event(struct atl1e_adapter *adapter) in atl1e_link_chg_event() argument
230 struct net_device *netdev = adapter->netdev; in atl1e_link_chg_event()
234 spin_lock(&adapter->mdio_lock); in atl1e_link_chg_event()
235 atl1e_read_phy_reg(&adapter->hw, MII_BMSR, &phy_data); in atl1e_link_chg_event()
236 atl1e_read_phy_reg(&adapter->hw, MII_BMSR, &phy_data); in atl1e_link_chg_event()
237 spin_unlock(&adapter->mdio_lock); in atl1e_link_chg_event()
244 adapter->link_speed = SPEED_0; in atl1e_link_chg_event()
248 schedule_work(&adapter->link_chg_task); in atl1e_link_chg_event()
251 static void atl1e_del_timer(struct atl1e_adapter *adapter) in atl1e_del_timer() argument
253 del_timer_sync(&adapter->phy_config_timer); in atl1e_del_timer()
256 static void atl1e_cancel_work(struct atl1e_adapter *adapter) in atl1e_cancel_work() argument
258 cancel_work_sync(&adapter->reset_task); in atl1e_cancel_work()
259 cancel_work_sync(&adapter->link_chg_task); in atl1e_cancel_work()
268 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_tx_timeout() local
271 schedule_work(&adapter->reset_task); in atl1e_tx_timeout()
285 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_set_multi() local
286 struct atl1e_hw *hw = &adapter->hw; in atl1e_set_multi()
331 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_rx_mode() local
334 netdev_dbg(adapter->netdev, "%s\n", __func__); in atl1e_rx_mode()
336 atl1e_irq_disable(adapter); in atl1e_rx_mode()
337 mac_ctrl_data = AT_READ_REG(&adapter->hw, REG_MAC_CTRL); in atl1e_rx_mode()
339 AT_WRITE_REG(&adapter->hw, REG_MAC_CTRL, mac_ctrl_data); in atl1e_rx_mode()
340 atl1e_irq_enable(adapter); in atl1e_rx_mode()
358 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_vlan_mode() local
361 netdev_dbg(adapter->netdev, "%s\n", __func__); in atl1e_vlan_mode()
363 atl1e_irq_disable(adapter); in atl1e_vlan_mode()
364 mac_ctrl_data = AT_READ_REG(&adapter->hw, REG_MAC_CTRL); in atl1e_vlan_mode()
366 AT_WRITE_REG(&adapter->hw, REG_MAC_CTRL, mac_ctrl_data); in atl1e_vlan_mode()
367 atl1e_irq_enable(adapter); in atl1e_vlan_mode()
370 static void atl1e_restore_vlan(struct atl1e_adapter *adapter) in atl1e_restore_vlan() argument
372 netdev_dbg(adapter->netdev, "%s\n", __func__); in atl1e_restore_vlan()
373 atl1e_vlan_mode(adapter->netdev, adapter->netdev->features); in atl1e_restore_vlan()
385 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_set_mac_addr() local
395 memcpy(adapter->hw.mac_addr, addr->sa_data, netdev->addr_len); in atl1e_set_mac_addr()
397 atl1e_hw_set_mac_addr(&adapter->hw); in atl1e_set_mac_addr()
441 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_change_mtu() local
447 netdev_warn(adapter->netdev, "invalid MTU setting\n"); in atl1e_change_mtu()
452 while (test_and_set_bit(__AT_RESETTING, &adapter->flags)) in atl1e_change_mtu()
455 adapter->hw.max_frame_size = new_mtu; in atl1e_change_mtu()
456 adapter->hw.rx_jumbo_th = (max_frame + 7) >> 3; in atl1e_change_mtu()
457 atl1e_down(adapter); in atl1e_change_mtu()
458 atl1e_up(adapter); in atl1e_change_mtu()
459 clear_bit(__AT_RESETTING, &adapter->flags); in atl1e_change_mtu()
469 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_mdio_read() local
472 atl1e_read_phy_reg(&adapter->hw, reg_num & MDIO_REG_ADDR_MASK, &result); in atl1e_mdio_read()
479 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_mdio_write() local
481 atl1e_write_phy_reg(&adapter->hw, reg_num & MDIO_REG_ADDR_MASK, val); in atl1e_mdio_write()
487 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_mii_ioctl() local
495 spin_lock_irqsave(&adapter->mdio_lock, flags); in atl1e_mii_ioctl()
502 if (atl1e_read_phy_reg(&adapter->hw, data->reg_num & 0x1F, in atl1e_mii_ioctl()
515 netdev_dbg(adapter->netdev, "<atl1e_mii_ioctl> write %x %x\n", in atl1e_mii_ioctl()
517 if (atl1e_write_phy_reg(&adapter->hw, in atl1e_mii_ioctl()
529 spin_unlock_irqrestore(&adapter->mdio_lock, flags); in atl1e_mii_ioctl()
569 static int atl1e_alloc_queues(struct atl1e_adapter *adapter) in atl1e_alloc_queues() argument
582 static int atl1e_sw_init(struct atl1e_adapter *adapter) in atl1e_sw_init() argument
584 struct atl1e_hw *hw = &adapter->hw; in atl1e_sw_init()
585 struct pci_dev *pdev = adapter->pdev; in atl1e_sw_init()
588 adapter->wol = 0; in atl1e_sw_init()
589 adapter->link_speed = SPEED_0; /* hardware init */ in atl1e_sw_init()
590 adapter->link_duplex = FULL_DUPLEX; in atl1e_sw_init()
591 adapter->num_rx_queues = 1; in atl1e_sw_init()
622 hw->max_frame_size = adapter->netdev->mtu; in atl1e_sw_init()
636 hw->tpd_thresh = adapter->tx_ring.count / 2; in atl1e_sw_init()
644 if (atl1e_alloc_queues(adapter)) { in atl1e_sw_init()
645 netdev_err(adapter->netdev, "Unable to allocate memory for queues\n"); in atl1e_sw_init()
649 atomic_set(&adapter->irq_sem, 1); in atl1e_sw_init()
650 spin_lock_init(&adapter->mdio_lock); in atl1e_sw_init()
651 spin_lock_init(&adapter->tx_lock); in atl1e_sw_init()
653 set_bit(__AT_DOWN, &adapter->flags); in atl1e_sw_init()
662 static void atl1e_clean_tx_ring(struct atl1e_adapter *adapter) in atl1e_clean_tx_ring() argument
664 struct atl1e_tx_ring *tx_ring = &adapter->tx_ring; in atl1e_clean_tx_ring()
666 struct pci_dev *pdev = adapter->pdev; in atl1e_clean_tx_ring()
705 static void atl1e_clean_rx_ring(struct atl1e_adapter *adapter) in atl1e_clean_rx_ring() argument
708 &adapter->rx_ring; in atl1e_clean_rx_ring()
713 if (adapter->ring_vir_addr == NULL) in atl1e_clean_rx_ring()
716 for (i = 0; i < adapter->num_rx_queues; i++) { in atl1e_clean_rx_ring()
726 static void atl1e_cal_ring_size(struct atl1e_adapter *adapter, u32 *ring_size) in atl1e_cal_ring_size() argument
728 *ring_size = ((u32)(adapter->tx_ring.count * in atl1e_cal_ring_size()
731 + adapter->rx_ring.real_page_size * AT_PAGE_NUM_PER_QUEUE * in atl1e_cal_ring_size()
732 adapter->num_rx_queues + 31 in atl1e_cal_ring_size()
734 + (1 + AT_PAGE_NUM_PER_QUEUE * adapter->num_rx_queues) * in atl1e_cal_ring_size()
739 static void atl1e_init_ring_resources(struct atl1e_adapter *adapter) in atl1e_init_ring_resources() argument
743 rx_ring = &adapter->rx_ring; in atl1e_init_ring_resources()
745 rx_ring->real_page_size = adapter->rx_ring.page_size in atl1e_init_ring_resources()
746 + adapter->hw.max_frame_size in atl1e_init_ring_resources()
750 atl1e_cal_ring_size(adapter, &adapter->ring_size); in atl1e_init_ring_resources()
752 adapter->ring_vir_addr = NULL; in atl1e_init_ring_resources()
753 adapter->rx_ring.desc = NULL; in atl1e_init_ring_resources()
754 rwlock_init(&adapter->tx_ring.tx_lock); in atl1e_init_ring_resources()
760 static void atl1e_init_ring_ptrs(struct atl1e_adapter *adapter) in atl1e_init_ring_ptrs() argument
767 tx_ring = &adapter->tx_ring; in atl1e_init_ring_ptrs()
768 rx_ring = &adapter->rx_ring; in atl1e_init_ring_ptrs()
774 for (i = 0; i < adapter->num_rx_queues; i++) { in atl1e_init_ring_ptrs()
790 static void atl1e_free_ring_resources(struct atl1e_adapter *adapter) in atl1e_free_ring_resources() argument
792 struct pci_dev *pdev = adapter->pdev; in atl1e_free_ring_resources()
794 atl1e_clean_tx_ring(adapter); in atl1e_free_ring_resources()
795 atl1e_clean_rx_ring(adapter); in atl1e_free_ring_resources()
797 if (adapter->ring_vir_addr) { in atl1e_free_ring_resources()
798 pci_free_consistent(pdev, adapter->ring_size, in atl1e_free_ring_resources()
799 adapter->ring_vir_addr, adapter->ring_dma); in atl1e_free_ring_resources()
800 adapter->ring_vir_addr = NULL; in atl1e_free_ring_resources()
803 if (adapter->tx_ring.tx_buffer) { in atl1e_free_ring_resources()
804 kfree(adapter->tx_ring.tx_buffer); in atl1e_free_ring_resources()
805 adapter->tx_ring.tx_buffer = NULL; in atl1e_free_ring_resources()
815 static int atl1e_setup_ring_resources(struct atl1e_adapter *adapter) in atl1e_setup_ring_resources() argument
817 struct pci_dev *pdev = adapter->pdev; in atl1e_setup_ring_resources()
825 if (adapter->ring_vir_addr != NULL) in atl1e_setup_ring_resources()
828 tx_ring = &adapter->tx_ring; in atl1e_setup_ring_resources()
829 rx_ring = &adapter->rx_ring; in atl1e_setup_ring_resources()
833 size = adapter->ring_size; in atl1e_setup_ring_resources()
834 adapter->ring_vir_addr = pci_zalloc_consistent(pdev, adapter->ring_size, in atl1e_setup_ring_resources()
835 &adapter->ring_dma); in atl1e_setup_ring_resources()
836 if (adapter->ring_vir_addr == NULL) { in atl1e_setup_ring_resources()
837 netdev_err(adapter->netdev, in atl1e_setup_ring_resources()
845 tx_ring->dma = roundup(adapter->ring_dma, 8); in atl1e_setup_ring_resources()
846 offset = tx_ring->dma - adapter->ring_dma; in atl1e_setup_ring_resources()
847 tx_ring->desc = adapter->ring_vir_addr + offset; in atl1e_setup_ring_resources()
859 for (i = 0; i < adapter->num_rx_queues; i++) { in atl1e_setup_ring_resources()
862 adapter->ring_dma + offset; in atl1e_setup_ring_resources()
864 adapter->ring_vir_addr + offset; in atl1e_setup_ring_resources()
870 tx_ring->cmb_dma = adapter->ring_dma + offset; in atl1e_setup_ring_resources()
871 tx_ring->cmb = adapter->ring_vir_addr + offset; in atl1e_setup_ring_resources()
874 for (i = 0; i < adapter->num_rx_queues; i++) { in atl1e_setup_ring_resources()
877 adapter->ring_dma + offset; in atl1e_setup_ring_resources()
879 adapter->ring_vir_addr + offset; in atl1e_setup_ring_resources()
884 if (unlikely(offset > adapter->ring_size)) { in atl1e_setup_ring_resources()
885 netdev_err(adapter->netdev, "offset(%d) > ring size(%d) !!\n", in atl1e_setup_ring_resources()
886 offset, adapter->ring_size); in atl1e_setup_ring_resources()
893 if (adapter->ring_vir_addr != NULL) { in atl1e_setup_ring_resources()
894 pci_free_consistent(pdev, adapter->ring_size, in atl1e_setup_ring_resources()
895 adapter->ring_vir_addr, adapter->ring_dma); in atl1e_setup_ring_resources()
896 adapter->ring_vir_addr = NULL; in atl1e_setup_ring_resources()
901 static inline void atl1e_configure_des_ring(struct atl1e_adapter *adapter) in atl1e_configure_des_ring() argument
904 struct atl1e_hw *hw = &adapter->hw; in atl1e_configure_des_ring()
905 struct atl1e_rx_ring *rx_ring = &adapter->rx_ring; in atl1e_configure_des_ring()
906 struct atl1e_tx_ring *tx_ring = &adapter->tx_ring; in atl1e_configure_des_ring()
911 (u32)((adapter->ring_dma & AT_DMA_HI_ADDR_MASK) >> 32)); in atl1e_configure_des_ring()
922 (u32)((adapter->ring_dma & in atl1e_configure_des_ring()
945 static inline void atl1e_configure_tx(struct atl1e_adapter *adapter) in atl1e_configure_tx() argument
947 struct atl1e_hw *hw = &adapter->hw; in atl1e_configure_tx()
988 static inline void atl1e_configure_rx(struct atl1e_adapter *adapter) in atl1e_configure_rx() argument
990 struct atl1e_hw *hw = &adapter->hw; in atl1e_configure_rx()
1041 static inline void atl1e_configure_dma(struct atl1e_adapter *adapter) in atl1e_configure_dma() argument
1043 struct atl1e_hw *hw = &adapter->hw; in atl1e_configure_dma()
1060 static void atl1e_setup_mac_ctrl(struct atl1e_adapter *adapter) in atl1e_setup_mac_ctrl() argument
1063 struct atl1e_hw *hw = &adapter->hw; in atl1e_setup_mac_ctrl()
1064 struct net_device *netdev = adapter->netdev; in atl1e_setup_mac_ctrl()
1070 if (FULL_DUPLEX == adapter->link_duplex) in atl1e_setup_mac_ctrl()
1073 value |= ((u32)((SPEED_1000 == adapter->link_speed) ? in atl1e_setup_mac_ctrl()
1079 value |= (((u32)adapter->hw.preamble_len & in atl1e_setup_mac_ctrl()
1100 static int atl1e_configure(struct atl1e_adapter *adapter) in atl1e_configure() argument
1102 struct atl1e_hw *hw = &adapter->hw; in atl1e_configure()
1120 atl1e_configure_des_ring(adapter); in atl1e_configure()
1142 atl1e_configure_tx(adapter); in atl1e_configure()
1145 atl1e_configure_rx(adapter); in atl1e_configure()
1148 atl1e_configure_dma(adapter); in atl1e_configure()
1155 netdev_err(adapter->netdev, in atl1e_configure()
1173 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_get_stats() local
1174 struct atl1e_hw_stats *hw_stats = &adapter->hw_stats; in atl1e_get_stats()
1214 static void atl1e_update_hw_stats(struct atl1e_adapter *adapter) in atl1e_update_hw_stats() argument
1221 stats_item = &adapter->hw_stats.rx_ok; in atl1e_update_hw_stats()
1223 *stats_item += AT_READ_REG(&adapter->hw, hw_reg_addr); in atl1e_update_hw_stats()
1229 stats_item = &adapter->hw_stats.tx_ok; in atl1e_update_hw_stats()
1231 *stats_item += AT_READ_REG(&adapter->hw, hw_reg_addr); in atl1e_update_hw_stats()
1237 static inline void atl1e_clear_phy_int(struct atl1e_adapter *adapter) in atl1e_clear_phy_int() argument
1241 spin_lock(&adapter->mdio_lock); in atl1e_clear_phy_int()
1242 atl1e_read_phy_reg(&adapter->hw, MII_INT_STATUS, &phy_data); in atl1e_clear_phy_int()
1243 spin_unlock(&adapter->mdio_lock); in atl1e_clear_phy_int()
1246 static bool atl1e_clean_tx_irq(struct atl1e_adapter *adapter) in atl1e_clean_tx_irq() argument
1248 struct atl1e_tx_ring *tx_ring = &adapter->tx_ring; in atl1e_clean_tx_irq()
1250 u16 hw_next_to_clean = AT_READ_REGW(&adapter->hw, REG_TPD_CONS_IDX); in atl1e_clean_tx_irq()
1257 pci_unmap_single(adapter->pdev, tx_buffer->dma, in atl1e_clean_tx_irq()
1260 pci_unmap_page(adapter->pdev, tx_buffer->dma, in atl1e_clean_tx_irq()
1276 if (netif_queue_stopped(adapter->netdev) && in atl1e_clean_tx_irq()
1277 netif_carrier_ok(adapter->netdev)) { in atl1e_clean_tx_irq()
1278 netif_wake_queue(adapter->netdev); in atl1e_clean_tx_irq()
1292 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_intr() local
1293 struct atl1e_hw *hw = &adapter->hw; in atl1e_intr()
1308 atl1e_clear_phy_int(adapter); in atl1e_intr()
1315 netdev_err(adapter->netdev, in atl1e_intr()
1317 if (netif_running(adapter->netdev)) { in atl1e_intr()
1319 atl1e_irq_reset(adapter); in atl1e_intr()
1320 schedule_work(&adapter->reset_task); in atl1e_intr()
1327 netdev_err(adapter->netdev, in atl1e_intr()
1330 atl1e_irq_reset(adapter); in atl1e_intr()
1331 schedule_work(&adapter->reset_task); in atl1e_intr()
1336 atl1e_update_hw_stats(adapter); in atl1e_intr()
1341 atl1e_link_chg_event(adapter); in atl1e_intr()
1347 atl1e_clean_tx_irq(adapter); in atl1e_intr()
1358 &adapter->napi))) in atl1e_intr()
1359 __napi_schedule(&adapter->napi); in atl1e_intr()
1363 AT_WRITE_REG(&adapter->hw, REG_ISR, 0); in atl1e_intr()
1368 static inline void atl1e_rx_checksum(struct atl1e_adapter *adapter, in atl1e_rx_checksum() argument
1399 static struct atl1e_rx_page *atl1e_get_rx_page(struct atl1e_adapter *adapter, in atl1e_get_rx_page() argument
1403 (struct atl1e_rx_page_desc *) adapter->rx_ring.rx_page_desc; in atl1e_get_rx_page()
1409 static void atl1e_clean_rx_irq(struct atl1e_adapter *adapter, u8 que, in atl1e_clean_rx_irq() argument
1412 struct net_device *netdev = adapter->netdev; in atl1e_clean_rx_irq()
1413 struct atl1e_rx_ring *rx_ring = &adapter->rx_ring; in atl1e_clean_rx_irq()
1417 struct atl1e_rx_page *rx_page = atl1e_get_rx_page(adapter, que); in atl1e_clean_rx_irq()
1438 AT_WRITE_REG(&adapter->hw, REG_DEBUG_DATA0, in atl1e_clean_rx_irq()
1471 atl1e_rx_checksum(adapter, skb, prrs); in atl1e_clean_rx_irq()
1502 AT_WRITE_REGB(&adapter->hw, reg_addr, 1); in atl1e_clean_rx_irq()
1504 rx_page = atl1e_get_rx_page(adapter, que); in atl1e_clean_rx_irq()
1513 if (!test_bit(__AT_DOWN, &adapter->flags)) in atl1e_clean_rx_irq()
1514 schedule_work(&adapter->reset_task); in atl1e_clean_rx_irq()
1522 struct atl1e_adapter *adapter = in atl1e_clean() local
1528 if (!netif_carrier_ok(adapter->netdev)) in atl1e_clean()
1531 atl1e_clean_rx_irq(adapter, 0, &work_done, budget); in atl1e_clean()
1537 imr_data = AT_READ_REG(&adapter->hw, REG_IMR); in atl1e_clean()
1538 AT_WRITE_REG(&adapter->hw, REG_IMR, imr_data | ISR_RX_EVENT); in atl1e_clean()
1540 if (test_bit(__AT_DOWN, &adapter->flags)) { in atl1e_clean()
1541 atomic_dec(&adapter->irq_sem); in atl1e_clean()
1542 netdev_err(adapter->netdev, in atl1e_clean()
1561 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_netpoll() local
1563 disable_irq(adapter->pdev->irq); in atl1e_netpoll()
1564 atl1e_intr(adapter->pdev->irq, netdev); in atl1e_netpoll()
1565 enable_irq(adapter->pdev->irq); in atl1e_netpoll()
1569 static inline u16 atl1e_tpd_avail(struct atl1e_adapter *adapter) in atl1e_tpd_avail() argument
1571 struct atl1e_tx_ring *tx_ring = &adapter->tx_ring; in atl1e_tpd_avail()
1588 static struct atl1e_tpd_desc *atl1e_get_tpd(struct atl1e_adapter *adapter) in atl1e_get_tpd() argument
1590 struct atl1e_tx_ring *tx_ring = &adapter->tx_ring; in atl1e_get_tpd()
1602 atl1e_get_tx_buffer(struct atl1e_adapter *adapter, struct atl1e_tpd_desc *tpd) in atl1e_get_tx_buffer() argument
1604 struct atl1e_tx_ring *tx_ring = &adapter->tx_ring; in atl1e_get_tx_buffer()
1638 static int atl1e_tso_csum(struct atl1e_adapter *adapter, in atl1e_tso_csum() argument
1664 netdev_warn(adapter->netdev, in atl1e_tso_csum()
1694 netdev_err(adapter->netdev, in atl1e_tso_csum()
1710 static int atl1e_tx_map(struct atl1e_adapter *adapter, in atl1e_tx_map() argument
1722 int ring_start = adapter->tx_ring.next_to_use; in atl1e_tx_map()
1732 tx_buffer = atl1e_get_tx_buffer(adapter, use_tpd); in atl1e_tx_map()
1734 tx_buffer->dma = pci_map_single(adapter->pdev, in atl1e_tx_map()
1736 if (dma_mapping_error(&adapter->pdev->dev, tx_buffer->dma)) in atl1e_tx_map()
1753 use_tpd = atl1e_get_tpd(adapter); in atl1e_tx_map()
1756 tx_buffer = atl1e_get_tx_buffer(adapter, use_tpd); in atl1e_tx_map()
1763 pci_map_single(adapter->pdev, skb->data + mapped_len, in atl1e_tx_map()
1766 if (dma_mapping_error(&adapter->pdev->dev, tx_buffer->dma)) { in atl1e_tx_map()
1768 ring_end = adapter->tx_ring.next_to_use; in atl1e_tx_map()
1769 adapter->tx_ring.next_to_use = ring_start; in atl1e_tx_map()
1770 while (adapter->tx_ring.next_to_use != ring_end) { in atl1e_tx_map()
1771 tpd = atl1e_get_tpd(adapter); in atl1e_tx_map()
1772 tx_buffer = atl1e_get_tx_buffer(adapter, tpd); in atl1e_tx_map()
1773 pci_unmap_single(adapter->pdev, tx_buffer->dma, in atl1e_tx_map()
1777 adapter->tx_ring.next_to_use = ring_start; in atl1e_tx_map()
1799 use_tpd = atl1e_get_tpd(adapter); in atl1e_tx_map()
1802 tx_buffer = atl1e_get_tx_buffer(adapter, use_tpd); in atl1e_tx_map()
1811 tx_buffer->dma = skb_frag_dma_map(&adapter->pdev->dev, in atl1e_tx_map()
1817 if (dma_mapping_error(&adapter->pdev->dev, tx_buffer->dma)) { in atl1e_tx_map()
1819 ring_end = adapter->tx_ring.next_to_use; in atl1e_tx_map()
1820 adapter->tx_ring.next_to_use = ring_start; in atl1e_tx_map()
1821 while (adapter->tx_ring.next_to_use != ring_end) { in atl1e_tx_map()
1822 tpd = atl1e_get_tpd(adapter); in atl1e_tx_map()
1823 tx_buffer = atl1e_get_tx_buffer(adapter, tpd); in atl1e_tx_map()
1824 dma_unmap_page(&adapter->pdev->dev, tx_buffer->dma, in atl1e_tx_map()
1829 adapter->tx_ring.next_to_use = ring_start; in atl1e_tx_map()
1853 static void atl1e_tx_queue(struct atl1e_adapter *adapter, u16 count, in atl1e_tx_queue() argument
1856 struct atl1e_tx_ring *tx_ring = &adapter->tx_ring; in atl1e_tx_queue()
1862 AT_WRITE_REG(&adapter->hw, REG_MB_TPD_PROD_IDX, tx_ring->next_to_use); in atl1e_tx_queue()
1868 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_xmit_frame() local
1873 if (test_bit(__AT_DOWN, &adapter->flags)) { in atl1e_xmit_frame()
1883 if (!spin_trylock_irqsave(&adapter->tx_lock, flags)) in atl1e_xmit_frame()
1886 if (atl1e_tpd_avail(adapter) < tpd_req) { in atl1e_xmit_frame()
1889 spin_unlock_irqrestore(&adapter->tx_lock, flags); in atl1e_xmit_frame()
1893 tpd = atl1e_get_tpd(adapter); in atl1e_xmit_frame()
1912 if (atl1e_tso_csum(adapter, skb, tpd) != 0) { in atl1e_xmit_frame()
1913 spin_unlock_irqrestore(&adapter->tx_lock, flags); in atl1e_xmit_frame()
1918 if (atl1e_tx_map(adapter, skb, tpd)) { in atl1e_xmit_frame()
1923 atl1e_tx_queue(adapter, tpd_req, tpd); in atl1e_xmit_frame()
1927 spin_unlock_irqrestore(&adapter->tx_lock, flags); in atl1e_xmit_frame()
1931 static void atl1e_free_irq(struct atl1e_adapter *adapter) in atl1e_free_irq() argument
1933 struct net_device *netdev = adapter->netdev; in atl1e_free_irq()
1935 free_irq(adapter->pdev->irq, netdev); in atl1e_free_irq()
1938 static int atl1e_request_irq(struct atl1e_adapter *adapter) in atl1e_request_irq() argument
1940 struct pci_dev *pdev = adapter->pdev; in atl1e_request_irq()
1941 struct net_device *netdev = adapter->netdev; in atl1e_request_irq()
1947 netdev_dbg(adapter->netdev, in atl1e_request_irq()
1955 int atl1e_up(struct atl1e_adapter *adapter) in atl1e_up() argument
1957 struct net_device *netdev = adapter->netdev; in atl1e_up()
1962 err = atl1e_init_hw(&adapter->hw); in atl1e_up()
1967 atl1e_init_ring_ptrs(adapter); in atl1e_up()
1969 atl1e_restore_vlan(adapter); in atl1e_up()
1971 if (atl1e_configure(adapter)) { in atl1e_up()
1976 clear_bit(__AT_DOWN, &adapter->flags); in atl1e_up()
1977 napi_enable(&adapter->napi); in atl1e_up()
1978 atl1e_irq_enable(adapter); in atl1e_up()
1979 val = AT_READ_REG(&adapter->hw, REG_MASTER_CTRL); in atl1e_up()
1980 AT_WRITE_REG(&adapter->hw, REG_MASTER_CTRL, in atl1e_up()
1987 void atl1e_down(struct atl1e_adapter *adapter) in atl1e_down() argument
1989 struct net_device *netdev = adapter->netdev; in atl1e_down()
1993 set_bit(__AT_DOWN, &adapter->flags); in atl1e_down()
1998 atl1e_reset_hw(&adapter->hw); in atl1e_down()
2001 napi_disable(&adapter->napi); in atl1e_down()
2002 atl1e_del_timer(adapter); in atl1e_down()
2003 atl1e_irq_disable(adapter); in atl1e_down()
2006 adapter->link_speed = SPEED_0; in atl1e_down()
2007 adapter->link_duplex = -1; in atl1e_down()
2008 atl1e_clean_tx_ring(adapter); in atl1e_down()
2009 atl1e_clean_rx_ring(adapter); in atl1e_down()
2026 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_open() local
2030 if (test_bit(__AT_TESTING, &adapter->flags)) in atl1e_open()
2034 atl1e_init_ring_resources(adapter); in atl1e_open()
2035 err = atl1e_setup_ring_resources(adapter); in atl1e_open()
2039 err = atl1e_request_irq(adapter); in atl1e_open()
2043 err = atl1e_up(adapter); in atl1e_open()
2050 atl1e_free_irq(adapter); in atl1e_open()
2052 atl1e_free_ring_resources(adapter); in atl1e_open()
2053 atl1e_reset_hw(&adapter->hw); in atl1e_open()
2071 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_close() local
2073 WARN_ON(test_bit(__AT_RESETTING, &adapter->flags)); in atl1e_close()
2074 atl1e_down(adapter); in atl1e_close()
2075 atl1e_free_irq(adapter); in atl1e_close()
2076 atl1e_free_ring_resources(adapter); in atl1e_close()
2084 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_suspend() local
2085 struct atl1e_hw *hw = &adapter->hw; in atl1e_suspend()
2092 u32 wufc = adapter->wol; in atl1e_suspend()
2099 WARN_ON(test_bit(__AT_RESETTING, &adapter->flags)); in atl1e_suspend()
2100 atl1e_down(adapter); in atl1e_suspend()
2121 netdev_dbg(adapter->netdev, "set phy register failed\n"); in atl1e_suspend()
2143 netdev_dbg(adapter->netdev, in atl1e_suspend()
2149 netdev_dbg(adapter->netdev, in atl1e_suspend()
2160 mac_ctrl_data |= (((u32)adapter->hw.preamble_len & in atl1e_suspend()
2170 netdev_dbg(adapter->netdev, "suspend MAC=0x%x\n", in atl1e_suspend()
2200 atl1e_free_irq(adapter); in atl1e_suspend()
2213 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_resume() local
2221 netdev_err(adapter->netdev, in atl1e_resume()
2228 AT_READ_REG(&adapter->hw, REG_WOL_CTRL); /* clear WOL status */ in atl1e_resume()
2233 AT_WRITE_REG(&adapter->hw, REG_WOL_CTRL, 0); in atl1e_resume()
2236 err = atl1e_request_irq(adapter); in atl1e_resume()
2241 atl1e_reset_hw(&adapter->hw); in atl1e_resume()
2244 atl1e_up(adapter); in atl1e_resume()
2309 struct atl1e_adapter *adapter = NULL; in atl1e_probe() local
2355 adapter = netdev_priv(netdev); in atl1e_probe()
2356 adapter->bd_number = cards_found; in atl1e_probe()
2357 adapter->netdev = netdev; in atl1e_probe()
2358 adapter->pdev = pdev; in atl1e_probe()
2359 adapter->hw.adapter = adapter; in atl1e_probe()
2360 adapter->hw.hw_addr = pci_iomap(pdev, BAR_0, 0); in atl1e_probe()
2361 if (!adapter->hw.hw_addr) { in atl1e_probe()
2368 adapter->mii.dev = netdev; in atl1e_probe()
2369 adapter->mii.mdio_read = atl1e_mdio_read; in atl1e_probe()
2370 adapter->mii.mdio_write = atl1e_mdio_write; in atl1e_probe()
2371 adapter->mii.phy_id_mask = 0x1f; in atl1e_probe()
2372 adapter->mii.reg_num_mask = MDIO_REG_ADDR_MASK; in atl1e_probe()
2374 netif_napi_add(netdev, &adapter->napi, atl1e_clean, 64); in atl1e_probe()
2376 setup_timer(&adapter->phy_config_timer, atl1e_phy_config, in atl1e_probe()
2377 (unsigned long)adapter); in atl1e_probe()
2380 atl1e_check_options(adapter); in atl1e_probe()
2389 err = atl1e_sw_init(adapter); in atl1e_probe()
2396 atl1e_phy_init(&adapter->hw); in atl1e_probe()
2399 err = atl1e_reset_hw(&adapter->hw); in atl1e_probe()
2405 if (atl1e_read_mac_addr(&adapter->hw) != 0) { in atl1e_probe()
2411 memcpy(netdev->dev_addr, adapter->hw.mac_addr, netdev->addr_len); in atl1e_probe()
2412 netdev_dbg(netdev, "mac address : %pM\n", adapter->hw.mac_addr); in atl1e_probe()
2414 INIT_WORK(&adapter->reset_task, atl1e_reset_task); in atl1e_probe()
2415 INIT_WORK(&adapter->link_chg_task, atl1e_link_chg_task); in atl1e_probe()
2435 pci_iounmap(pdev, adapter->hw.hw_addr); in atl1e_probe()
2459 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_remove() local
2465 set_bit(__AT_DOWN, &adapter->flags); in atl1e_remove()
2467 atl1e_del_timer(adapter); in atl1e_remove()
2468 atl1e_cancel_work(adapter); in atl1e_remove()
2471 atl1e_free_ring_resources(adapter); in atl1e_remove()
2472 atl1e_force_ps(&adapter->hw); in atl1e_remove()
2473 pci_iounmap(pdev, adapter->hw.hw_addr); in atl1e_remove()
2491 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_io_error_detected() local
2499 atl1e_down(adapter); in atl1e_io_error_detected()
2517 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_io_slot_reset() local
2520 netdev_err(adapter->netdev, in atl1e_io_slot_reset()
2529 atl1e_reset_hw(&adapter->hw); in atl1e_io_slot_reset()
2545 struct atl1e_adapter *adapter = netdev_priv(netdev); in atl1e_io_resume() local
2548 if (atl1e_up(adapter)) { in atl1e_io_resume()
2549 netdev_err(adapter->netdev, in atl1e_io_resume()