Lines Matching refs:adapter
105 static void igbvf_receive_skb(struct igbvf_adapter *adapter, in igbvf_receive_skb() argument
113 if ((adapter->flags & IGBVF_FLAG_RX_LB_VLAN_BSWAP) && in igbvf_receive_skb()
118 if (test_bit(vid, adapter->active_vlans)) in igbvf_receive_skb()
122 napi_gro_receive(&adapter->rx_ring->napi, skb); in igbvf_receive_skb()
125 static inline void igbvf_rx_checksum_adv(struct igbvf_adapter *adapter, in igbvf_rx_checksum_adv() argument
132 (adapter->flags & IGBVF_FLAG_RX_CSUM_DISABLED)) in igbvf_rx_checksum_adv()
139 adapter->hw_csum_err++; in igbvf_rx_checksum_adv()
147 adapter->hw_csum_good++; in igbvf_rx_checksum_adv()
158 struct igbvf_adapter *adapter = rx_ring->adapter; in igbvf_alloc_rx_buffers() local
159 struct net_device *netdev = adapter->netdev; in igbvf_alloc_rx_buffers()
160 struct pci_dev *pdev = adapter->pdev; in igbvf_alloc_rx_buffers()
170 if (adapter->rx_ps_hdr_size) in igbvf_alloc_rx_buffers()
171 bufsz = adapter->rx_ps_hdr_size; in igbvf_alloc_rx_buffers()
173 bufsz = adapter->rx_buffer_len; in igbvf_alloc_rx_buffers()
178 if (adapter->rx_ps_hdr_size && !buffer_info->page_dma) { in igbvf_alloc_rx_buffers()
182 adapter->alloc_rx_buff_failed++; in igbvf_alloc_rx_buffers()
206 adapter->alloc_rx_buff_failed++; in igbvf_alloc_rx_buffers()
224 if (adapter->rx_ps_hdr_size) { in igbvf_alloc_rx_buffers()
253 writel(i, adapter->hw.hw_addr + rx_ring->tail); in igbvf_alloc_rx_buffers()
264 static bool igbvf_clean_rx_irq(struct igbvf_adapter *adapter, in igbvf_clean_rx_irq() argument
267 struct igbvf_ring *rx_ring = adapter->rx_ring; in igbvf_clean_rx_irq()
268 struct net_device *netdev = adapter->netdev; in igbvf_clean_rx_irq()
269 struct pci_dev *pdev = adapter->pdev; in igbvf_clean_rx_irq()
299 if (hlen > adapter->rx_ps_hdr_size) in igbvf_clean_rx_irq()
300 hlen = adapter->rx_ps_hdr_size; in igbvf_clean_rx_irq()
309 if (!adapter->rx_ps_hdr_size) { in igbvf_clean_rx_irq()
311 adapter->rx_buffer_len, in igbvf_clean_rx_irq()
320 adapter->rx_ps_hdr_size, in igbvf_clean_rx_irq()
337 if ((adapter->rx_buffer_len > (PAGE_SIZE / 2)) || in igbvf_clean_rx_irq()
371 igbvf_rx_checksum_adv(adapter, staterr, skb); in igbvf_clean_rx_irq()
375 igbvf_receive_skb(adapter, netdev, skb, staterr, in igbvf_clean_rx_irq()
400 adapter->total_rx_packets += total_packets; in igbvf_clean_rx_irq()
401 adapter->total_rx_bytes += total_bytes; in igbvf_clean_rx_irq()
402 adapter->net_stats.rx_bytes += total_bytes; in igbvf_clean_rx_irq()
403 adapter->net_stats.rx_packets += total_packets; in igbvf_clean_rx_irq()
407 static void igbvf_put_txbuf(struct igbvf_adapter *adapter, in igbvf_put_txbuf() argument
412 dma_unmap_page(&adapter->pdev->dev, in igbvf_put_txbuf()
417 dma_unmap_single(&adapter->pdev->dev, in igbvf_put_txbuf()
436 int igbvf_setup_tx_resources(struct igbvf_adapter *adapter, in igbvf_setup_tx_resources() argument
439 struct pci_dev *pdev = adapter->pdev; in igbvf_setup_tx_resources()
456 tx_ring->adapter = adapter; in igbvf_setup_tx_resources()
463 dev_err(&adapter->pdev->dev, in igbvf_setup_tx_resources()
474 int igbvf_setup_rx_resources(struct igbvf_adapter *adapter, in igbvf_setup_rx_resources() argument
477 struct pci_dev *pdev = adapter->pdev; in igbvf_setup_rx_resources()
499 rx_ring->adapter = adapter; in igbvf_setup_rx_resources()
506 dev_err(&adapter->pdev->dev, in igbvf_setup_rx_resources()
517 struct igbvf_adapter *adapter = tx_ring->adapter; in igbvf_clean_tx_ring() local
528 igbvf_put_txbuf(adapter, buffer_info); in igbvf_clean_tx_ring()
540 writel(0, adapter->hw.hw_addr + tx_ring->head); in igbvf_clean_tx_ring()
541 writel(0, adapter->hw.hw_addr + tx_ring->tail); in igbvf_clean_tx_ring()
552 struct pci_dev *pdev = tx_ring->adapter->pdev; in igbvf_free_tx_resources()
571 struct igbvf_adapter *adapter = rx_ring->adapter; in igbvf_clean_rx_ring() local
573 struct pci_dev *pdev = adapter->pdev; in igbvf_clean_rx_ring()
584 if (adapter->rx_ps_hdr_size) { in igbvf_clean_rx_ring()
586 adapter->rx_ps_hdr_size, in igbvf_clean_rx_ring()
590 adapter->rx_buffer_len, in igbvf_clean_rx_ring()
623 writel(0, adapter->hw.hw_addr + rx_ring->head); in igbvf_clean_rx_ring()
624 writel(0, adapter->hw.hw_addr + rx_ring->tail); in igbvf_clean_rx_ring()
636 struct pci_dev *pdev = rx_ring->adapter->pdev; in igbvf_free_rx_resources()
662 static enum latency_range igbvf_update_itr(struct igbvf_adapter *adapter, in igbvf_update_itr() argument
732 static void igbvf_set_itr(struct igbvf_adapter *adapter) in igbvf_set_itr() argument
736 adapter->tx_ring->itr_range = in igbvf_set_itr()
737 igbvf_update_itr(adapter, in igbvf_set_itr()
738 adapter->tx_ring->itr_val, in igbvf_set_itr()
739 adapter->total_tx_packets, in igbvf_set_itr()
740 adapter->total_tx_bytes); in igbvf_set_itr()
743 if (adapter->requested_itr == 3 && in igbvf_set_itr()
744 adapter->tx_ring->itr_range == lowest_latency) in igbvf_set_itr()
745 adapter->tx_ring->itr_range = low_latency; in igbvf_set_itr()
747 new_itr = igbvf_range_to_itr(adapter->tx_ring->itr_range); in igbvf_set_itr()
749 if (new_itr != adapter->tx_ring->itr_val) { in igbvf_set_itr()
750 u32 current_itr = adapter->tx_ring->itr_val; in igbvf_set_itr()
758 adapter->tx_ring->itr_val = new_itr; in igbvf_set_itr()
760 adapter->tx_ring->set_itr = 1; in igbvf_set_itr()
763 adapter->rx_ring->itr_range = in igbvf_set_itr()
764 igbvf_update_itr(adapter, adapter->rx_ring->itr_val, in igbvf_set_itr()
765 adapter->total_rx_packets, in igbvf_set_itr()
766 adapter->total_rx_bytes); in igbvf_set_itr()
767 if (adapter->requested_itr == 3 && in igbvf_set_itr()
768 adapter->rx_ring->itr_range == lowest_latency) in igbvf_set_itr()
769 adapter->rx_ring->itr_range = low_latency; in igbvf_set_itr()
771 new_itr = igbvf_range_to_itr(adapter->rx_ring->itr_range); in igbvf_set_itr()
773 if (new_itr != adapter->rx_ring->itr_val) { in igbvf_set_itr()
774 u32 current_itr = adapter->rx_ring->itr_val; in igbvf_set_itr()
779 adapter->rx_ring->itr_val = new_itr; in igbvf_set_itr()
781 adapter->rx_ring->set_itr = 1; in igbvf_set_itr()
793 struct igbvf_adapter *adapter = tx_ring->adapter; in igbvf_clean_tx_irq() local
794 struct net_device *netdev = adapter->netdev; in igbvf_clean_tx_irq()
838 igbvf_put_txbuf(adapter, buffer_info); in igbvf_clean_tx_irq()
860 !(test_bit(__IGBVF_DOWN, &adapter->state))) { in igbvf_clean_tx_irq()
862 ++adapter->restart_queue; in igbvf_clean_tx_irq()
866 adapter->net_stats.tx_bytes += total_bytes; in igbvf_clean_tx_irq()
867 adapter->net_stats.tx_packets += total_packets; in igbvf_clean_tx_irq()
874 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_msix_other() local
875 struct e1000_hw *hw = &adapter->hw; in igbvf_msix_other()
877 adapter->int_counter1++; in igbvf_msix_other()
881 if (!test_bit(__IGBVF_DOWN, &adapter->state)) in igbvf_msix_other()
882 mod_timer(&adapter->watchdog_timer, jiffies + 1); in igbvf_msix_other()
884 ew32(EIMS, adapter->eims_other); in igbvf_msix_other()
892 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_intr_msix_tx() local
893 struct e1000_hw *hw = &adapter->hw; in igbvf_intr_msix_tx()
894 struct igbvf_ring *tx_ring = adapter->tx_ring; in igbvf_intr_msix_tx()
898 adapter->hw.hw_addr + tx_ring->itr_register); in igbvf_intr_msix_tx()
899 adapter->tx_ring->set_itr = 0; in igbvf_intr_msix_tx()
902 adapter->total_tx_bytes = 0; in igbvf_intr_msix_tx()
903 adapter->total_tx_packets = 0; in igbvf_intr_msix_tx()
920 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_intr_msix_rx() local
922 adapter->int_counter0++; in igbvf_intr_msix_rx()
927 if (adapter->rx_ring->set_itr) { in igbvf_intr_msix_rx()
928 writel(adapter->rx_ring->itr_val, in igbvf_intr_msix_rx()
929 adapter->hw.hw_addr + adapter->rx_ring->itr_register); in igbvf_intr_msix_rx()
930 adapter->rx_ring->set_itr = 0; in igbvf_intr_msix_rx()
933 if (napi_schedule_prep(&adapter->rx_ring->napi)) { in igbvf_intr_msix_rx()
934 adapter->total_rx_bytes = 0; in igbvf_intr_msix_rx()
935 adapter->total_rx_packets = 0; in igbvf_intr_msix_rx()
936 __napi_schedule(&adapter->rx_ring->napi); in igbvf_intr_msix_rx()
944 static void igbvf_assign_vector(struct igbvf_adapter *adapter, int rx_queue, in igbvf_assign_vector() argument
947 struct e1000_hw *hw = &adapter->hw; in igbvf_assign_vector()
967 adapter->rx_ring[rx_queue].eims_value = 1 << msix_vector; in igbvf_assign_vector()
982 adapter->tx_ring[tx_queue].eims_value = 1 << msix_vector; in igbvf_assign_vector()
994 static void igbvf_configure_msix(struct igbvf_adapter *adapter) in igbvf_configure_msix() argument
997 struct e1000_hw *hw = &adapter->hw; in igbvf_configure_msix()
998 struct igbvf_ring *tx_ring = adapter->tx_ring; in igbvf_configure_msix()
999 struct igbvf_ring *rx_ring = adapter->rx_ring; in igbvf_configure_msix()
1002 adapter->eims_enable_mask = 0; in igbvf_configure_msix()
1004 igbvf_assign_vector(adapter, IGBVF_NO_QUEUE, 0, vector++); in igbvf_configure_msix()
1005 adapter->eims_enable_mask |= tx_ring->eims_value; in igbvf_configure_msix()
1007 igbvf_assign_vector(adapter, 0, IGBVF_NO_QUEUE, vector++); in igbvf_configure_msix()
1008 adapter->eims_enable_mask |= rx_ring->eims_value; in igbvf_configure_msix()
1017 adapter->eims_enable_mask = (1 << (vector)) - 1; in igbvf_configure_msix()
1018 adapter->eims_other = 1 << (vector - 1); in igbvf_configure_msix()
1022 static void igbvf_reset_interrupt_capability(struct igbvf_adapter *adapter) in igbvf_reset_interrupt_capability() argument
1024 if (adapter->msix_entries) { in igbvf_reset_interrupt_capability()
1025 pci_disable_msix(adapter->pdev); in igbvf_reset_interrupt_capability()
1026 kfree(adapter->msix_entries); in igbvf_reset_interrupt_capability()
1027 adapter->msix_entries = NULL; in igbvf_reset_interrupt_capability()
1038 static void igbvf_set_interrupt_capability(struct igbvf_adapter *adapter) in igbvf_set_interrupt_capability() argument
1044 adapter->msix_entries = kcalloc(3, sizeof(struct msix_entry), in igbvf_set_interrupt_capability()
1046 if (adapter->msix_entries) { in igbvf_set_interrupt_capability()
1048 adapter->msix_entries[i].entry = i; in igbvf_set_interrupt_capability()
1050 err = pci_enable_msix_range(adapter->pdev, in igbvf_set_interrupt_capability()
1051 adapter->msix_entries, 3, 3); in igbvf_set_interrupt_capability()
1056 dev_err(&adapter->pdev->dev, in igbvf_set_interrupt_capability()
1058 igbvf_reset_interrupt_capability(adapter); in igbvf_set_interrupt_capability()
1069 static int igbvf_request_msix(struct igbvf_adapter *adapter) in igbvf_request_msix() argument
1071 struct net_device *netdev = adapter->netdev; in igbvf_request_msix()
1075 sprintf(adapter->tx_ring->name, "%s-tx-0", netdev->name); in igbvf_request_msix()
1076 sprintf(adapter->rx_ring->name, "%s-rx-0", netdev->name); in igbvf_request_msix()
1078 memcpy(adapter->tx_ring->name, netdev->name, IFNAMSIZ); in igbvf_request_msix()
1079 memcpy(adapter->rx_ring->name, netdev->name, IFNAMSIZ); in igbvf_request_msix()
1082 err = request_irq(adapter->msix_entries[vector].vector, in igbvf_request_msix()
1083 igbvf_intr_msix_tx, 0, adapter->tx_ring->name, in igbvf_request_msix()
1088 adapter->tx_ring->itr_register = E1000_EITR(vector); in igbvf_request_msix()
1089 adapter->tx_ring->itr_val = adapter->current_itr; in igbvf_request_msix()
1092 err = request_irq(adapter->msix_entries[vector].vector, in igbvf_request_msix()
1093 igbvf_intr_msix_rx, 0, adapter->rx_ring->name, in igbvf_request_msix()
1098 adapter->rx_ring->itr_register = E1000_EITR(vector); in igbvf_request_msix()
1099 adapter->rx_ring->itr_val = adapter->current_itr; in igbvf_request_msix()
1102 err = request_irq(adapter->msix_entries[vector].vector, in igbvf_request_msix()
1107 igbvf_configure_msix(adapter); in igbvf_request_msix()
1117 static int igbvf_alloc_queues(struct igbvf_adapter *adapter) in igbvf_alloc_queues() argument
1119 struct net_device *netdev = adapter->netdev; in igbvf_alloc_queues()
1121 adapter->tx_ring = kzalloc(sizeof(struct igbvf_ring), GFP_KERNEL); in igbvf_alloc_queues()
1122 if (!adapter->tx_ring) in igbvf_alloc_queues()
1125 adapter->rx_ring = kzalloc(sizeof(struct igbvf_ring), GFP_KERNEL); in igbvf_alloc_queues()
1126 if (!adapter->rx_ring) { in igbvf_alloc_queues()
1127 kfree(adapter->tx_ring); in igbvf_alloc_queues()
1131 netif_napi_add(netdev, &adapter->rx_ring->napi, igbvf_poll, 64); in igbvf_alloc_queues()
1143 static int igbvf_request_irq(struct igbvf_adapter *adapter) in igbvf_request_irq() argument
1148 if (adapter->msix_entries) in igbvf_request_irq()
1149 err = igbvf_request_msix(adapter); in igbvf_request_irq()
1154 dev_err(&adapter->pdev->dev, in igbvf_request_irq()
1160 static void igbvf_free_irq(struct igbvf_adapter *adapter) in igbvf_free_irq() argument
1162 struct net_device *netdev = adapter->netdev; in igbvf_free_irq()
1165 if (adapter->msix_entries) { in igbvf_free_irq()
1167 free_irq(adapter->msix_entries[vector].vector, netdev); in igbvf_free_irq()
1175 static void igbvf_irq_disable(struct igbvf_adapter *adapter) in igbvf_irq_disable() argument
1177 struct e1000_hw *hw = &adapter->hw; in igbvf_irq_disable()
1181 if (adapter->msix_entries) in igbvf_irq_disable()
1189 static void igbvf_irq_enable(struct igbvf_adapter *adapter) in igbvf_irq_enable() argument
1191 struct e1000_hw *hw = &adapter->hw; in igbvf_irq_enable()
1193 ew32(EIAC, adapter->eims_enable_mask); in igbvf_irq_enable()
1194 ew32(EIAM, adapter->eims_enable_mask); in igbvf_irq_enable()
1195 ew32(EIMS, adapter->eims_enable_mask); in igbvf_irq_enable()
1206 struct igbvf_adapter *adapter = rx_ring->adapter; in igbvf_poll() local
1207 struct e1000_hw *hw = &adapter->hw; in igbvf_poll()
1210 igbvf_clean_rx_irq(adapter, &work_done, budget); in igbvf_poll()
1216 if (adapter->requested_itr & 3) in igbvf_poll()
1217 igbvf_set_itr(adapter); in igbvf_poll()
1219 if (!test_bit(__IGBVF_DOWN, &adapter->state)) in igbvf_poll()
1220 ew32(EIMS, adapter->rx_ring->eims_value); in igbvf_poll()
1232 static void igbvf_set_rlpml(struct igbvf_adapter *adapter) in igbvf_set_rlpml() argument
1235 struct e1000_hw *hw = &adapter->hw; in igbvf_set_rlpml()
1237 max_frame_size = adapter->max_frame_size + VLAN_TAG_SIZE; in igbvf_set_rlpml()
1244 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_vlan_rx_add_vid() local
1245 struct e1000_hw *hw = &adapter->hw; in igbvf_vlan_rx_add_vid()
1248 dev_err(&adapter->pdev->dev, "Failed to add vlan id %d\n", vid); in igbvf_vlan_rx_add_vid()
1251 set_bit(vid, adapter->active_vlans); in igbvf_vlan_rx_add_vid()
1258 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_vlan_rx_kill_vid() local
1259 struct e1000_hw *hw = &adapter->hw; in igbvf_vlan_rx_kill_vid()
1262 dev_err(&adapter->pdev->dev, in igbvf_vlan_rx_kill_vid()
1266 clear_bit(vid, adapter->active_vlans); in igbvf_vlan_rx_kill_vid()
1270 static void igbvf_restore_vlan(struct igbvf_adapter *adapter) in igbvf_restore_vlan() argument
1274 for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) in igbvf_restore_vlan()
1275 igbvf_vlan_rx_add_vid(adapter->netdev, htons(ETH_P_8021Q), vid); in igbvf_restore_vlan()
1284 static void igbvf_configure_tx(struct igbvf_adapter *adapter) in igbvf_configure_tx() argument
1286 struct e1000_hw *hw = &adapter->hw; in igbvf_configure_tx()
1287 struct igbvf_ring *tx_ring = adapter->tx_ring; in igbvf_configure_tx()
1320 adapter->txd_cmd = E1000_ADVTXD_DCMD_EOP | E1000_ADVTXD_DCMD_IFCS; in igbvf_configure_tx()
1323 adapter->txd_cmd |= E1000_ADVTXD_DCMD_RS; in igbvf_configure_tx()
1330 static void igbvf_setup_srrctl(struct igbvf_adapter *adapter) in igbvf_setup_srrctl() argument
1332 struct e1000_hw *hw = &adapter->hw; in igbvf_setup_srrctl()
1343 srrctl |= ALIGN(adapter->rx_buffer_len, 1024) >> in igbvf_setup_srrctl()
1346 if (adapter->rx_buffer_len < 2048) { in igbvf_setup_srrctl()
1347 adapter->rx_ps_hdr_size = 0; in igbvf_setup_srrctl()
1350 adapter->rx_ps_hdr_size = 128; in igbvf_setup_srrctl()
1351 srrctl |= adapter->rx_ps_hdr_size << in igbvf_setup_srrctl()
1365 static void igbvf_configure_rx(struct igbvf_adapter *adapter) in igbvf_configure_rx() argument
1367 struct e1000_hw *hw = &adapter->hw; in igbvf_configure_rx()
1368 struct igbvf_ring *rx_ring = adapter->rx_ring; in igbvf_configure_rx()
1398 igbvf_set_rlpml(adapter); in igbvf_configure_rx()
1415 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_set_multi() local
1416 struct e1000_hw *hw = &adapter->hw; in igbvf_set_multi()
1441 static void igbvf_configure(struct igbvf_adapter *adapter) in igbvf_configure() argument
1443 igbvf_set_multi(adapter->netdev); in igbvf_configure()
1445 igbvf_restore_vlan(adapter); in igbvf_configure()
1447 igbvf_configure_tx(adapter); in igbvf_configure()
1448 igbvf_setup_srrctl(adapter); in igbvf_configure()
1449 igbvf_configure_rx(adapter); in igbvf_configure()
1450 igbvf_alloc_rx_buffers(adapter->rx_ring, in igbvf_configure()
1451 igbvf_desc_unused(adapter->rx_ring)); in igbvf_configure()
1462 static void igbvf_reset(struct igbvf_adapter *adapter) in igbvf_reset() argument
1464 struct e1000_mac_info *mac = &adapter->hw.mac; in igbvf_reset()
1465 struct net_device *netdev = adapter->netdev; in igbvf_reset()
1466 struct e1000_hw *hw = &adapter->hw; in igbvf_reset()
1470 dev_err(&adapter->pdev->dev, "PF still resetting\n"); in igbvf_reset()
1474 if (is_valid_ether_addr(adapter->hw.mac.addr)) { in igbvf_reset()
1475 memcpy(netdev->dev_addr, adapter->hw.mac.addr, in igbvf_reset()
1477 memcpy(netdev->perm_addr, adapter->hw.mac.addr, in igbvf_reset()
1481 adapter->last_reset = jiffies; in igbvf_reset()
1484 int igbvf_up(struct igbvf_adapter *adapter) in igbvf_up() argument
1486 struct e1000_hw *hw = &adapter->hw; in igbvf_up()
1489 igbvf_configure(adapter); in igbvf_up()
1491 clear_bit(__IGBVF_DOWN, &adapter->state); in igbvf_up()
1493 napi_enable(&adapter->rx_ring->napi); in igbvf_up()
1494 if (adapter->msix_entries) in igbvf_up()
1495 igbvf_configure_msix(adapter); in igbvf_up()
1499 igbvf_irq_enable(adapter); in igbvf_up()
1503 mod_timer(&adapter->watchdog_timer, jiffies + 1); in igbvf_up()
1508 void igbvf_down(struct igbvf_adapter *adapter) in igbvf_down() argument
1510 struct net_device *netdev = adapter->netdev; in igbvf_down()
1511 struct e1000_hw *hw = &adapter->hw; in igbvf_down()
1517 set_bit(__IGBVF_DOWN, &adapter->state); in igbvf_down()
1534 napi_disable(&adapter->rx_ring->napi); in igbvf_down()
1536 igbvf_irq_disable(adapter); in igbvf_down()
1538 del_timer_sync(&adapter->watchdog_timer); in igbvf_down()
1541 igbvf_update_stats(adapter); in igbvf_down()
1543 adapter->link_speed = 0; in igbvf_down()
1544 adapter->link_duplex = 0; in igbvf_down()
1546 igbvf_reset(adapter); in igbvf_down()
1547 igbvf_clean_tx_ring(adapter->tx_ring); in igbvf_down()
1548 igbvf_clean_rx_ring(adapter->rx_ring); in igbvf_down()
1551 void igbvf_reinit_locked(struct igbvf_adapter *adapter) in igbvf_reinit_locked() argument
1554 while (test_and_set_bit(__IGBVF_RESETTING, &adapter->state)) in igbvf_reinit_locked()
1556 igbvf_down(adapter); in igbvf_reinit_locked()
1557 igbvf_up(adapter); in igbvf_reinit_locked()
1558 clear_bit(__IGBVF_RESETTING, &adapter->state); in igbvf_reinit_locked()
1569 static int igbvf_sw_init(struct igbvf_adapter *adapter) in igbvf_sw_init() argument
1571 struct net_device *netdev = adapter->netdev; in igbvf_sw_init()
1574 adapter->rx_buffer_len = ETH_FRAME_LEN + VLAN_HLEN + ETH_FCS_LEN; in igbvf_sw_init()
1575 adapter->rx_ps_hdr_size = 0; in igbvf_sw_init()
1576 adapter->max_frame_size = netdev->mtu + ETH_HLEN + ETH_FCS_LEN; in igbvf_sw_init()
1577 adapter->min_frame_size = ETH_ZLEN + ETH_FCS_LEN; in igbvf_sw_init()
1579 adapter->tx_int_delay = 8; in igbvf_sw_init()
1580 adapter->tx_abs_int_delay = 32; in igbvf_sw_init()
1581 adapter->rx_int_delay = 0; in igbvf_sw_init()
1582 adapter->rx_abs_int_delay = 8; in igbvf_sw_init()
1583 adapter->requested_itr = 3; in igbvf_sw_init()
1584 adapter->current_itr = IGBVF_START_ITR; in igbvf_sw_init()
1587 adapter->ei->init_ops(&adapter->hw); in igbvf_sw_init()
1589 rc = adapter->hw.mac.ops.init_params(&adapter->hw); in igbvf_sw_init()
1593 rc = adapter->hw.mbx.ops.init_params(&adapter->hw); in igbvf_sw_init()
1597 igbvf_set_interrupt_capability(adapter); in igbvf_sw_init()
1599 if (igbvf_alloc_queues(adapter)) in igbvf_sw_init()
1602 spin_lock_init(&adapter->tx_queue_lock); in igbvf_sw_init()
1605 igbvf_irq_disable(adapter); in igbvf_sw_init()
1607 spin_lock_init(&adapter->stats_lock); in igbvf_sw_init()
1609 set_bit(__IGBVF_DOWN, &adapter->state); in igbvf_sw_init()
1613 static void igbvf_initialize_last_counter_stats(struct igbvf_adapter *adapter) in igbvf_initialize_last_counter_stats() argument
1615 struct e1000_hw *hw = &adapter->hw; in igbvf_initialize_last_counter_stats()
1617 adapter->stats.last_gprc = er32(VFGPRC); in igbvf_initialize_last_counter_stats()
1618 adapter->stats.last_gorc = er32(VFGORC); in igbvf_initialize_last_counter_stats()
1619 adapter->stats.last_gptc = er32(VFGPTC); in igbvf_initialize_last_counter_stats()
1620 adapter->stats.last_gotc = er32(VFGOTC); in igbvf_initialize_last_counter_stats()
1621 adapter->stats.last_mprc = er32(VFMPRC); in igbvf_initialize_last_counter_stats()
1622 adapter->stats.last_gotlbc = er32(VFGOTLBC); in igbvf_initialize_last_counter_stats()
1623 adapter->stats.last_gptlbc = er32(VFGPTLBC); in igbvf_initialize_last_counter_stats()
1624 adapter->stats.last_gorlbc = er32(VFGORLBC); in igbvf_initialize_last_counter_stats()
1625 adapter->stats.last_gprlbc = er32(VFGPRLBC); in igbvf_initialize_last_counter_stats()
1627 adapter->stats.base_gprc = er32(VFGPRC); in igbvf_initialize_last_counter_stats()
1628 adapter->stats.base_gorc = er32(VFGORC); in igbvf_initialize_last_counter_stats()
1629 adapter->stats.base_gptc = er32(VFGPTC); in igbvf_initialize_last_counter_stats()
1630 adapter->stats.base_gotc = er32(VFGOTC); in igbvf_initialize_last_counter_stats()
1631 adapter->stats.base_mprc = er32(VFMPRC); in igbvf_initialize_last_counter_stats()
1632 adapter->stats.base_gotlbc = er32(VFGOTLBC); in igbvf_initialize_last_counter_stats()
1633 adapter->stats.base_gptlbc = er32(VFGPTLBC); in igbvf_initialize_last_counter_stats()
1634 adapter->stats.base_gorlbc = er32(VFGORLBC); in igbvf_initialize_last_counter_stats()
1635 adapter->stats.base_gprlbc = er32(VFGPRLBC); in igbvf_initialize_last_counter_stats()
1652 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_open() local
1653 struct e1000_hw *hw = &adapter->hw; in igbvf_open()
1657 if (test_bit(__IGBVF_TESTING, &adapter->state)) in igbvf_open()
1661 err = igbvf_setup_tx_resources(adapter, adapter->tx_ring); in igbvf_open()
1666 err = igbvf_setup_rx_resources(adapter, adapter->rx_ring); in igbvf_open()
1675 igbvf_configure(adapter); in igbvf_open()
1677 err = igbvf_request_irq(adapter); in igbvf_open()
1682 clear_bit(__IGBVF_DOWN, &adapter->state); in igbvf_open()
1684 napi_enable(&adapter->rx_ring->napi); in igbvf_open()
1689 igbvf_irq_enable(adapter); in igbvf_open()
1693 mod_timer(&adapter->watchdog_timer, jiffies + 1); in igbvf_open()
1698 igbvf_free_rx_resources(adapter->rx_ring); in igbvf_open()
1700 igbvf_free_tx_resources(adapter->tx_ring); in igbvf_open()
1702 igbvf_reset(adapter); in igbvf_open()
1720 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_close() local
1722 WARN_ON(test_bit(__IGBVF_RESETTING, &adapter->state)); in igbvf_close()
1723 igbvf_down(adapter); in igbvf_close()
1725 igbvf_free_irq(adapter); in igbvf_close()
1727 igbvf_free_tx_resources(adapter->tx_ring); in igbvf_close()
1728 igbvf_free_rx_resources(adapter->rx_ring); in igbvf_close()
1742 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_set_mac() local
1743 struct e1000_hw *hw = &adapter->hw; in igbvf_set_mac()
1764 if (current_counter < adapter->stats.last_##name) \
1765 adapter->stats.name += 0x100000000LL; \
1766 adapter->stats.last_##name = current_counter; \
1767 adapter->stats.name &= 0xFFFFFFFF00000000LL; \
1768 adapter->stats.name |= current_counter; \
1775 void igbvf_update_stats(struct igbvf_adapter *adapter) in igbvf_update_stats() argument
1777 struct e1000_hw *hw = &adapter->hw; in igbvf_update_stats()
1778 struct pci_dev *pdev = adapter->pdev; in igbvf_update_stats()
1783 if (adapter->link_speed == 0) in igbvf_update_stats()
1786 if (test_bit(__IGBVF_RESETTING, &adapter->state)) in igbvf_update_stats()
1803 adapter->net_stats.multicast = adapter->stats.mprc; in igbvf_update_stats()
1806 static void igbvf_print_link_info(struct igbvf_adapter *adapter) in igbvf_print_link_info() argument
1808 dev_info(&adapter->pdev->dev, "Link is Up %d Mbps %s Duplex\n", in igbvf_print_link_info()
1809 adapter->link_speed, in igbvf_print_link_info()
1810 adapter->link_duplex == FULL_DUPLEX ? "Full" : "Half"); in igbvf_print_link_info()
1813 static bool igbvf_has_link(struct igbvf_adapter *adapter) in igbvf_has_link() argument
1815 struct e1000_hw *hw = &adapter->hw; in igbvf_has_link()
1820 if (test_bit(__IGBVF_DOWN, &adapter->state)) in igbvf_has_link()
1827 if (ret_val && time_after(jiffies, adapter->last_reset + (10 * HZ))) in igbvf_has_link()
1828 schedule_work(&adapter->reset_task); in igbvf_has_link()
1839 struct igbvf_adapter *adapter = (struct igbvf_adapter *)data; in igbvf_watchdog() local
1842 schedule_work(&adapter->watchdog_task); in igbvf_watchdog()
1847 struct igbvf_adapter *adapter = container_of(work, in igbvf_watchdog_task() local
1850 struct net_device *netdev = adapter->netdev; in igbvf_watchdog_task()
1851 struct e1000_mac_info *mac = &adapter->hw.mac; in igbvf_watchdog_task()
1852 struct igbvf_ring *tx_ring = adapter->tx_ring; in igbvf_watchdog_task()
1853 struct e1000_hw *hw = &adapter->hw; in igbvf_watchdog_task()
1857 link = igbvf_has_link(adapter); in igbvf_watchdog_task()
1861 mac->ops.get_link_up_info(&adapter->hw, in igbvf_watchdog_task()
1862 &adapter->link_speed, in igbvf_watchdog_task()
1863 &adapter->link_duplex); in igbvf_watchdog_task()
1864 igbvf_print_link_info(adapter); in igbvf_watchdog_task()
1871 adapter->link_speed = 0; in igbvf_watchdog_task()
1872 adapter->link_duplex = 0; in igbvf_watchdog_task()
1873 dev_info(&adapter->pdev->dev, "Link is Down\n"); in igbvf_watchdog_task()
1880 igbvf_update_stats(adapter); in igbvf_watchdog_task()
1890 adapter->tx_timeout_count++; in igbvf_watchdog_task()
1891 schedule_work(&adapter->reset_task); in igbvf_watchdog_task()
1896 ew32(EICS, adapter->rx_ring->eims_value); in igbvf_watchdog_task()
1899 if (!test_bit(__IGBVF_DOWN, &adapter->state)) in igbvf_watchdog_task()
1900 mod_timer(&adapter->watchdog_timer, in igbvf_watchdog_task()
1911 static int igbvf_tso(struct igbvf_adapter *adapter, in igbvf_tso() argument
1927 dev_err(&adapter->pdev->dev, "igbvf_tso returning an error\n"); in igbvf_tso()
1990 static inline bool igbvf_tx_csum(struct igbvf_adapter *adapter, in igbvf_tx_csum() argument
2053 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_maybe_stop_tx() local
2056 if (igbvf_desc_unused(adapter->tx_ring) >= size) in igbvf_maybe_stop_tx()
2068 if (igbvf_desc_unused(adapter->tx_ring) < size) in igbvf_maybe_stop_tx()
2073 ++adapter->restart_queue; in igbvf_maybe_stop_tx()
2080 static inline int igbvf_tx_map_adv(struct igbvf_adapter *adapter, in igbvf_tx_map_adv() argument
2085 struct pci_dev *pdev = adapter->pdev; in igbvf_tx_map_adv()
2146 igbvf_put_txbuf(adapter, buffer_info); in igbvf_tx_map_adv()
2152 static inline void igbvf_tx_queue_adv(struct igbvf_adapter *adapter, in igbvf_tx_queue_adv() argument
2198 tx_desc->read.cmd_type_len |= cpu_to_le32(adapter->txd_cmd); in igbvf_tx_queue_adv()
2208 writel(i, adapter->hw.hw_addr + tx_ring->tail); in igbvf_tx_queue_adv()
2219 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_xmit_frame_ring_adv() local
2226 if (test_bit(__IGBVF_DOWN, &adapter->state)) { in igbvf_xmit_frame_ring_adv()
2259 igbvf_tso(adapter, tx_ring, skb, tx_flags, &hdr_len, protocol) : 0; in igbvf_xmit_frame_ring_adv()
2267 else if (igbvf_tx_csum(adapter, tx_ring, skb, tx_flags, protocol) && in igbvf_xmit_frame_ring_adv()
2274 count = igbvf_tx_map_adv(adapter, tx_ring, skb); in igbvf_xmit_frame_ring_adv()
2277 igbvf_tx_queue_adv(adapter, tx_ring, tx_flags, count, in igbvf_xmit_frame_ring_adv()
2293 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_xmit_frame() local
2296 if (test_bit(__IGBVF_DOWN, &adapter->state)) { in igbvf_xmit_frame()
2301 tx_ring = &adapter->tx_ring[0]; in igbvf_xmit_frame()
2312 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_tx_timeout() local
2315 adapter->tx_timeout_count++; in igbvf_tx_timeout()
2316 schedule_work(&adapter->reset_task); in igbvf_tx_timeout()
2321 struct igbvf_adapter *adapter; in igbvf_reset_task() local
2323 adapter = container_of(work, struct igbvf_adapter, reset_task); in igbvf_reset_task()
2325 igbvf_reinit_locked(adapter); in igbvf_reset_task()
2337 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_get_stats() local
2340 return &adapter->net_stats; in igbvf_get_stats()
2352 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_change_mtu() local
2361 dev_err(&adapter->pdev->dev, "MTU > 9216 not supported.\n"); in igbvf_change_mtu()
2365 while (test_and_set_bit(__IGBVF_RESETTING, &adapter->state)) in igbvf_change_mtu()
2368 adapter->max_frame_size = max_frame; in igbvf_change_mtu()
2370 igbvf_down(adapter); in igbvf_change_mtu()
2381 adapter->rx_buffer_len = 1024; in igbvf_change_mtu()
2383 adapter->rx_buffer_len = 2048; in igbvf_change_mtu()
2386 adapter->rx_buffer_len = 16384; in igbvf_change_mtu()
2388 adapter->rx_buffer_len = PAGE_SIZE / 2; in igbvf_change_mtu()
2394 adapter->rx_buffer_len = ETH_FRAME_LEN + VLAN_HLEN + in igbvf_change_mtu()
2397 dev_info(&adapter->pdev->dev, "changing MTU from %d to %d\n", in igbvf_change_mtu()
2402 igbvf_up(adapter); in igbvf_change_mtu()
2404 igbvf_reset(adapter); in igbvf_change_mtu()
2406 clear_bit(__IGBVF_RESETTING, &adapter->state); in igbvf_change_mtu()
2422 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_suspend() local
2430 WARN_ON(test_bit(__IGBVF_RESETTING, &adapter->state)); in igbvf_suspend()
2431 igbvf_down(adapter); in igbvf_suspend()
2432 igbvf_free_irq(adapter); in igbvf_suspend()
2450 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_resume() local
2463 err = igbvf_request_irq(adapter); in igbvf_resume()
2468 igbvf_reset(adapter); in igbvf_resume()
2471 igbvf_up(adapter); in igbvf_resume()
2491 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_netpoll() local
2493 disable_irq(adapter->pdev->irq); in igbvf_netpoll()
2495 igbvf_clean_tx_irq(adapter->tx_ring); in igbvf_netpoll()
2497 enable_irq(adapter->pdev->irq); in igbvf_netpoll()
2513 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_io_error_detected() local
2521 igbvf_down(adapter); in igbvf_io_error_detected()
2538 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_io_slot_reset() local
2547 igbvf_reset(adapter); in igbvf_io_slot_reset()
2563 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_io_resume() local
2566 if (igbvf_up(adapter)) { in igbvf_io_resume()
2576 static void igbvf_print_device_info(struct igbvf_adapter *adapter) in igbvf_print_device_info() argument
2578 struct e1000_hw *hw = &adapter->hw; in igbvf_print_device_info()
2579 struct net_device *netdev = adapter->netdev; in igbvf_print_device_info()
2580 struct pci_dev *pdev = adapter->pdev; in igbvf_print_device_info()
2592 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_set_features() local
2595 adapter->flags &= ~IGBVF_FLAG_RX_CSUM_DISABLED; in igbvf_set_features()
2597 adapter->flags |= IGBVF_FLAG_RX_CSUM_DISABLED; in igbvf_set_features()
2635 struct igbvf_adapter *adapter; in igbvf_probe() local
2673 adapter = netdev_priv(netdev); in igbvf_probe()
2674 hw = &adapter->hw; in igbvf_probe()
2675 adapter->netdev = netdev; in igbvf_probe()
2676 adapter->pdev = pdev; in igbvf_probe()
2677 adapter->ei = ei; in igbvf_probe()
2678 adapter->pba = ei->pba; in igbvf_probe()
2679 adapter->flags = ei->flags; in igbvf_probe()
2680 adapter->hw.back = adapter; in igbvf_probe()
2681 adapter->hw.mac.type = ei->mac; in igbvf_probe()
2682 adapter->msg_enable = netif_msg_init(debug, DEFAULT_MSG_ENABLE); in igbvf_probe()
2693 adapter->hw.hw_addr = ioremap(pci_resource_start(pdev, 0), in igbvf_probe()
2696 if (!adapter->hw.hw_addr) in igbvf_probe()
2700 err = ei->get_variants(adapter); in igbvf_probe()
2706 err = igbvf_sw_init(adapter); in igbvf_probe()
2717 adapter->bd_number = cards_found++; in igbvf_probe()
2749 else if (is_zero_ether_addr(adapter->hw.mac.addr)) in igbvf_probe()
2752 memcpy(netdev->dev_addr, adapter->hw.mac.addr, in igbvf_probe()
2759 memcpy(adapter->hw.mac.addr, netdev->dev_addr, in igbvf_probe()
2763 setup_timer(&adapter->watchdog_timer, &igbvf_watchdog, in igbvf_probe()
2764 (unsigned long)adapter); in igbvf_probe()
2766 INIT_WORK(&adapter->reset_task, igbvf_reset_task); in igbvf_probe()
2767 INIT_WORK(&adapter->watchdog_task, igbvf_watchdog_task); in igbvf_probe()
2770 adapter->rx_ring->count = 1024; in igbvf_probe()
2771 adapter->tx_ring->count = 1024; in igbvf_probe()
2774 igbvf_reset(adapter); in igbvf_probe()
2777 if (adapter->hw.mac.type == e1000_vfadapt_i350) in igbvf_probe()
2778 adapter->flags |= IGBVF_FLAG_RX_LB_VLAN_BSWAP; in igbvf_probe()
2789 igbvf_print_device_info(adapter); in igbvf_probe()
2791 igbvf_initialize_last_counter_stats(adapter); in igbvf_probe()
2796 kfree(adapter->tx_ring); in igbvf_probe()
2797 kfree(adapter->rx_ring); in igbvf_probe()
2799 igbvf_reset_interrupt_capability(adapter); in igbvf_probe()
2801 iounmap(adapter->hw.hw_addr); in igbvf_probe()
2824 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_remove() local
2825 struct e1000_hw *hw = &adapter->hw; in igbvf_remove()
2830 set_bit(__IGBVF_DOWN, &adapter->state); in igbvf_remove()
2831 del_timer_sync(&adapter->watchdog_timer); in igbvf_remove()
2833 cancel_work_sync(&adapter->reset_task); in igbvf_remove()
2834 cancel_work_sync(&adapter->watchdog_task); in igbvf_remove()
2838 igbvf_reset_interrupt_capability(adapter); in igbvf_remove()
2843 netif_napi_del(&adapter->rx_ring->napi); in igbvf_remove()
2844 kfree(adapter->tx_ring); in igbvf_remove()
2845 kfree(adapter->rx_ring); in igbvf_remove()