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()
336 if ((adapter->rx_buffer_len > (PAGE_SIZE / 2)) || in igbvf_clean_rx_irq()
370 igbvf_rx_checksum_adv(adapter, staterr, skb); in igbvf_clean_rx_irq()
374 igbvf_receive_skb(adapter, netdev, skb, staterr, in igbvf_clean_rx_irq()
399 adapter->total_rx_packets += total_packets; in igbvf_clean_rx_irq()
400 adapter->total_rx_bytes += total_bytes; in igbvf_clean_rx_irq()
401 adapter->net_stats.rx_bytes += total_bytes; in igbvf_clean_rx_irq()
402 adapter->net_stats.rx_packets += total_packets; in igbvf_clean_rx_irq()
406 static void igbvf_put_txbuf(struct igbvf_adapter *adapter, in igbvf_put_txbuf() argument
411 dma_unmap_page(&adapter->pdev->dev, in igbvf_put_txbuf()
416 dma_unmap_single(&adapter->pdev->dev, in igbvf_put_txbuf()
435 int igbvf_setup_tx_resources(struct igbvf_adapter *adapter, in igbvf_setup_tx_resources() argument
438 struct pci_dev *pdev = adapter->pdev; in igbvf_setup_tx_resources()
455 tx_ring->adapter = adapter; in igbvf_setup_tx_resources()
462 dev_err(&adapter->pdev->dev, in igbvf_setup_tx_resources()
473 int igbvf_setup_rx_resources(struct igbvf_adapter *adapter, in igbvf_setup_rx_resources() argument
476 struct pci_dev *pdev = adapter->pdev; in igbvf_setup_rx_resources()
498 rx_ring->adapter = adapter; in igbvf_setup_rx_resources()
505 dev_err(&adapter->pdev->dev, in igbvf_setup_rx_resources()
516 struct igbvf_adapter *adapter = tx_ring->adapter; in igbvf_clean_tx_ring() local
527 igbvf_put_txbuf(adapter, buffer_info); in igbvf_clean_tx_ring()
539 writel(0, adapter->hw.hw_addr + tx_ring->head); in igbvf_clean_tx_ring()
540 writel(0, adapter->hw.hw_addr + tx_ring->tail); in igbvf_clean_tx_ring()
551 struct pci_dev *pdev = tx_ring->adapter->pdev; in igbvf_free_tx_resources()
570 struct igbvf_adapter *adapter = rx_ring->adapter; in igbvf_clean_rx_ring() local
572 struct pci_dev *pdev = adapter->pdev; in igbvf_clean_rx_ring()
583 if (adapter->rx_ps_hdr_size) { in igbvf_clean_rx_ring()
585 adapter->rx_ps_hdr_size, in igbvf_clean_rx_ring()
589 adapter->rx_buffer_len, in igbvf_clean_rx_ring()
622 writel(0, adapter->hw.hw_addr + rx_ring->head); in igbvf_clean_rx_ring()
623 writel(0, adapter->hw.hw_addr + rx_ring->tail); in igbvf_clean_rx_ring()
635 struct pci_dev *pdev = rx_ring->adapter->pdev; in igbvf_free_rx_resources()
661 static enum latency_range igbvf_update_itr(struct igbvf_adapter *adapter, in igbvf_update_itr() argument
731 static void igbvf_set_itr(struct igbvf_adapter *adapter) in igbvf_set_itr() argument
735 adapter->tx_ring->itr_range = in igbvf_set_itr()
736 igbvf_update_itr(adapter, in igbvf_set_itr()
737 adapter->tx_ring->itr_val, in igbvf_set_itr()
738 adapter->total_tx_packets, in igbvf_set_itr()
739 adapter->total_tx_bytes); in igbvf_set_itr()
742 if (adapter->requested_itr == 3 && in igbvf_set_itr()
743 adapter->tx_ring->itr_range == lowest_latency) in igbvf_set_itr()
744 adapter->tx_ring->itr_range = low_latency; in igbvf_set_itr()
746 new_itr = igbvf_range_to_itr(adapter->tx_ring->itr_range); in igbvf_set_itr()
748 if (new_itr != adapter->tx_ring->itr_val) { in igbvf_set_itr()
749 u32 current_itr = adapter->tx_ring->itr_val; in igbvf_set_itr()
757 adapter->tx_ring->itr_val = new_itr; in igbvf_set_itr()
759 adapter->tx_ring->set_itr = 1; in igbvf_set_itr()
762 adapter->rx_ring->itr_range = in igbvf_set_itr()
763 igbvf_update_itr(adapter, adapter->rx_ring->itr_val, in igbvf_set_itr()
764 adapter->total_rx_packets, in igbvf_set_itr()
765 adapter->total_rx_bytes); in igbvf_set_itr()
766 if (adapter->requested_itr == 3 && in igbvf_set_itr()
767 adapter->rx_ring->itr_range == lowest_latency) in igbvf_set_itr()
768 adapter->rx_ring->itr_range = low_latency; in igbvf_set_itr()
770 new_itr = igbvf_range_to_itr(adapter->rx_ring->itr_range); in igbvf_set_itr()
772 if (new_itr != adapter->rx_ring->itr_val) { in igbvf_set_itr()
773 u32 current_itr = adapter->rx_ring->itr_val; in igbvf_set_itr()
778 adapter->rx_ring->itr_val = new_itr; in igbvf_set_itr()
780 adapter->rx_ring->set_itr = 1; in igbvf_set_itr()
792 struct igbvf_adapter *adapter = tx_ring->adapter; in igbvf_clean_tx_irq() local
793 struct net_device *netdev = adapter->netdev; in igbvf_clean_tx_irq()
837 igbvf_put_txbuf(adapter, buffer_info); in igbvf_clean_tx_irq()
859 !(test_bit(__IGBVF_DOWN, &adapter->state))) { in igbvf_clean_tx_irq()
861 ++adapter->restart_queue; in igbvf_clean_tx_irq()
865 adapter->net_stats.tx_bytes += total_bytes; in igbvf_clean_tx_irq()
866 adapter->net_stats.tx_packets += total_packets; in igbvf_clean_tx_irq()
873 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_msix_other() local
874 struct e1000_hw *hw = &adapter->hw; in igbvf_msix_other()
876 adapter->int_counter1++; in igbvf_msix_other()
880 if (!test_bit(__IGBVF_DOWN, &adapter->state)) in igbvf_msix_other()
881 mod_timer(&adapter->watchdog_timer, jiffies + 1); in igbvf_msix_other()
883 ew32(EIMS, adapter->eims_other); in igbvf_msix_other()
891 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_intr_msix_tx() local
892 struct e1000_hw *hw = &adapter->hw; in igbvf_intr_msix_tx()
893 struct igbvf_ring *tx_ring = adapter->tx_ring; in igbvf_intr_msix_tx()
897 adapter->hw.hw_addr + tx_ring->itr_register); in igbvf_intr_msix_tx()
898 adapter->tx_ring->set_itr = 0; in igbvf_intr_msix_tx()
901 adapter->total_tx_bytes = 0; in igbvf_intr_msix_tx()
902 adapter->total_tx_packets = 0; in igbvf_intr_msix_tx()
919 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_intr_msix_rx() local
921 adapter->int_counter0++; in igbvf_intr_msix_rx()
926 if (adapter->rx_ring->set_itr) { in igbvf_intr_msix_rx()
927 writel(adapter->rx_ring->itr_val, in igbvf_intr_msix_rx()
928 adapter->hw.hw_addr + adapter->rx_ring->itr_register); in igbvf_intr_msix_rx()
929 adapter->rx_ring->set_itr = 0; in igbvf_intr_msix_rx()
932 if (napi_schedule_prep(&adapter->rx_ring->napi)) { in igbvf_intr_msix_rx()
933 adapter->total_rx_bytes = 0; in igbvf_intr_msix_rx()
934 adapter->total_rx_packets = 0; in igbvf_intr_msix_rx()
935 __napi_schedule(&adapter->rx_ring->napi); in igbvf_intr_msix_rx()
943 static void igbvf_assign_vector(struct igbvf_adapter *adapter, int rx_queue, in igbvf_assign_vector() argument
946 struct e1000_hw *hw = &adapter->hw; in igbvf_assign_vector()
966 adapter->rx_ring[rx_queue].eims_value = 1 << msix_vector; in igbvf_assign_vector()
981 adapter->tx_ring[tx_queue].eims_value = 1 << msix_vector; in igbvf_assign_vector()
993 static void igbvf_configure_msix(struct igbvf_adapter *adapter) in igbvf_configure_msix() argument
996 struct e1000_hw *hw = &adapter->hw; in igbvf_configure_msix()
997 struct igbvf_ring *tx_ring = adapter->tx_ring; in igbvf_configure_msix()
998 struct igbvf_ring *rx_ring = adapter->rx_ring; in igbvf_configure_msix()
1001 adapter->eims_enable_mask = 0; in igbvf_configure_msix()
1003 igbvf_assign_vector(adapter, IGBVF_NO_QUEUE, 0, vector++); in igbvf_configure_msix()
1004 adapter->eims_enable_mask |= tx_ring->eims_value; in igbvf_configure_msix()
1006 igbvf_assign_vector(adapter, 0, IGBVF_NO_QUEUE, vector++); in igbvf_configure_msix()
1007 adapter->eims_enable_mask |= rx_ring->eims_value; in igbvf_configure_msix()
1016 adapter->eims_enable_mask = (1 << (vector)) - 1; in igbvf_configure_msix()
1017 adapter->eims_other = 1 << (vector - 1); in igbvf_configure_msix()
1021 static void igbvf_reset_interrupt_capability(struct igbvf_adapter *adapter) in igbvf_reset_interrupt_capability() argument
1023 if (adapter->msix_entries) { in igbvf_reset_interrupt_capability()
1024 pci_disable_msix(adapter->pdev); in igbvf_reset_interrupt_capability()
1025 kfree(adapter->msix_entries); in igbvf_reset_interrupt_capability()
1026 adapter->msix_entries = NULL; in igbvf_reset_interrupt_capability()
1037 static void igbvf_set_interrupt_capability(struct igbvf_adapter *adapter) in igbvf_set_interrupt_capability() argument
1043 adapter->msix_entries = kcalloc(3, sizeof(struct msix_entry), in igbvf_set_interrupt_capability()
1045 if (adapter->msix_entries) { in igbvf_set_interrupt_capability()
1047 adapter->msix_entries[i].entry = i; in igbvf_set_interrupt_capability()
1049 err = pci_enable_msix_range(adapter->pdev, in igbvf_set_interrupt_capability()
1050 adapter->msix_entries, 3, 3); in igbvf_set_interrupt_capability()
1055 dev_err(&adapter->pdev->dev, in igbvf_set_interrupt_capability()
1057 igbvf_reset_interrupt_capability(adapter); in igbvf_set_interrupt_capability()
1068 static int igbvf_request_msix(struct igbvf_adapter *adapter) in igbvf_request_msix() argument
1070 struct net_device *netdev = adapter->netdev; in igbvf_request_msix()
1074 sprintf(adapter->tx_ring->name, "%s-tx-0", netdev->name); in igbvf_request_msix()
1075 sprintf(adapter->rx_ring->name, "%s-rx-0", netdev->name); in igbvf_request_msix()
1077 memcpy(adapter->tx_ring->name, netdev->name, IFNAMSIZ); in igbvf_request_msix()
1078 memcpy(adapter->rx_ring->name, netdev->name, IFNAMSIZ); in igbvf_request_msix()
1081 err = request_irq(adapter->msix_entries[vector].vector, in igbvf_request_msix()
1082 igbvf_intr_msix_tx, 0, adapter->tx_ring->name, in igbvf_request_msix()
1087 adapter->tx_ring->itr_register = E1000_EITR(vector); in igbvf_request_msix()
1088 adapter->tx_ring->itr_val = adapter->current_itr; in igbvf_request_msix()
1091 err = request_irq(adapter->msix_entries[vector].vector, in igbvf_request_msix()
1092 igbvf_intr_msix_rx, 0, adapter->rx_ring->name, in igbvf_request_msix()
1097 adapter->rx_ring->itr_register = E1000_EITR(vector); in igbvf_request_msix()
1098 adapter->rx_ring->itr_val = adapter->current_itr; in igbvf_request_msix()
1101 err = request_irq(adapter->msix_entries[vector].vector, in igbvf_request_msix()
1106 igbvf_configure_msix(adapter); in igbvf_request_msix()
1116 static int igbvf_alloc_queues(struct igbvf_adapter *adapter) in igbvf_alloc_queues() argument
1118 struct net_device *netdev = adapter->netdev; in igbvf_alloc_queues()
1120 adapter->tx_ring = kzalloc(sizeof(struct igbvf_ring), GFP_KERNEL); in igbvf_alloc_queues()
1121 if (!adapter->tx_ring) in igbvf_alloc_queues()
1124 adapter->rx_ring = kzalloc(sizeof(struct igbvf_ring), GFP_KERNEL); in igbvf_alloc_queues()
1125 if (!adapter->rx_ring) { in igbvf_alloc_queues()
1126 kfree(adapter->tx_ring); in igbvf_alloc_queues()
1130 netif_napi_add(netdev, &adapter->rx_ring->napi, igbvf_poll, 64); in igbvf_alloc_queues()
1142 static int igbvf_request_irq(struct igbvf_adapter *adapter) in igbvf_request_irq() argument
1147 if (adapter->msix_entries) in igbvf_request_irq()
1148 err = igbvf_request_msix(adapter); in igbvf_request_irq()
1153 dev_err(&adapter->pdev->dev, in igbvf_request_irq()
1159 static void igbvf_free_irq(struct igbvf_adapter *adapter) in igbvf_free_irq() argument
1161 struct net_device *netdev = adapter->netdev; in igbvf_free_irq()
1164 if (adapter->msix_entries) { in igbvf_free_irq()
1166 free_irq(adapter->msix_entries[vector].vector, netdev); in igbvf_free_irq()
1174 static void igbvf_irq_disable(struct igbvf_adapter *adapter) in igbvf_irq_disable() argument
1176 struct e1000_hw *hw = &adapter->hw; in igbvf_irq_disable()
1180 if (adapter->msix_entries) in igbvf_irq_disable()
1188 static void igbvf_irq_enable(struct igbvf_adapter *adapter) in igbvf_irq_enable() argument
1190 struct e1000_hw *hw = &adapter->hw; in igbvf_irq_enable()
1192 ew32(EIAC, adapter->eims_enable_mask); in igbvf_irq_enable()
1193 ew32(EIAM, adapter->eims_enable_mask); in igbvf_irq_enable()
1194 ew32(EIMS, adapter->eims_enable_mask); in igbvf_irq_enable()
1205 struct igbvf_adapter *adapter = rx_ring->adapter; in igbvf_poll() local
1206 struct e1000_hw *hw = &adapter->hw; in igbvf_poll()
1209 igbvf_clean_rx_irq(adapter, &work_done, budget); in igbvf_poll()
1215 if (adapter->requested_itr & 3) in igbvf_poll()
1216 igbvf_set_itr(adapter); in igbvf_poll()
1218 if (!test_bit(__IGBVF_DOWN, &adapter->state)) in igbvf_poll()
1219 ew32(EIMS, adapter->rx_ring->eims_value); in igbvf_poll()
1231 static void igbvf_set_rlpml(struct igbvf_adapter *adapter) in igbvf_set_rlpml() argument
1234 struct e1000_hw *hw = &adapter->hw; in igbvf_set_rlpml()
1236 max_frame_size = adapter->max_frame_size + VLAN_TAG_SIZE; in igbvf_set_rlpml()
1243 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_vlan_rx_add_vid() local
1244 struct e1000_hw *hw = &adapter->hw; in igbvf_vlan_rx_add_vid()
1247 dev_err(&adapter->pdev->dev, "Failed to add vlan id %d\n", vid); in igbvf_vlan_rx_add_vid()
1250 set_bit(vid, adapter->active_vlans); in igbvf_vlan_rx_add_vid()
1257 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_vlan_rx_kill_vid() local
1258 struct e1000_hw *hw = &adapter->hw; in igbvf_vlan_rx_kill_vid()
1261 dev_err(&adapter->pdev->dev, in igbvf_vlan_rx_kill_vid()
1265 clear_bit(vid, adapter->active_vlans); in igbvf_vlan_rx_kill_vid()
1269 static void igbvf_restore_vlan(struct igbvf_adapter *adapter) in igbvf_restore_vlan() argument
1273 for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) in igbvf_restore_vlan()
1274 igbvf_vlan_rx_add_vid(adapter->netdev, htons(ETH_P_8021Q), vid); in igbvf_restore_vlan()
1283 static void igbvf_configure_tx(struct igbvf_adapter *adapter) in igbvf_configure_tx() argument
1285 struct e1000_hw *hw = &adapter->hw; in igbvf_configure_tx()
1286 struct igbvf_ring *tx_ring = adapter->tx_ring; in igbvf_configure_tx()
1319 adapter->txd_cmd = E1000_ADVTXD_DCMD_EOP | E1000_ADVTXD_DCMD_IFCS; in igbvf_configure_tx()
1322 adapter->txd_cmd |= E1000_ADVTXD_DCMD_RS; in igbvf_configure_tx()
1329 static void igbvf_setup_srrctl(struct igbvf_adapter *adapter) in igbvf_setup_srrctl() argument
1331 struct e1000_hw *hw = &adapter->hw; in igbvf_setup_srrctl()
1342 srrctl |= ALIGN(adapter->rx_buffer_len, 1024) >> in igbvf_setup_srrctl()
1345 if (adapter->rx_buffer_len < 2048) { in igbvf_setup_srrctl()
1346 adapter->rx_ps_hdr_size = 0; in igbvf_setup_srrctl()
1349 adapter->rx_ps_hdr_size = 128; in igbvf_setup_srrctl()
1350 srrctl |= adapter->rx_ps_hdr_size << in igbvf_setup_srrctl()
1364 static void igbvf_configure_rx(struct igbvf_adapter *adapter) in igbvf_configure_rx() argument
1366 struct e1000_hw *hw = &adapter->hw; in igbvf_configure_rx()
1367 struct igbvf_ring *rx_ring = adapter->rx_ring; in igbvf_configure_rx()
1397 igbvf_set_rlpml(adapter); in igbvf_configure_rx()
1414 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_set_multi() local
1415 struct e1000_hw *hw = &adapter->hw; in igbvf_set_multi()
1440 static void igbvf_configure(struct igbvf_adapter *adapter) in igbvf_configure() argument
1442 igbvf_set_multi(adapter->netdev); in igbvf_configure()
1444 igbvf_restore_vlan(adapter); in igbvf_configure()
1446 igbvf_configure_tx(adapter); in igbvf_configure()
1447 igbvf_setup_srrctl(adapter); in igbvf_configure()
1448 igbvf_configure_rx(adapter); in igbvf_configure()
1449 igbvf_alloc_rx_buffers(adapter->rx_ring, in igbvf_configure()
1450 igbvf_desc_unused(adapter->rx_ring)); in igbvf_configure()
1461 static void igbvf_reset(struct igbvf_adapter *adapter) in igbvf_reset() argument
1463 struct e1000_mac_info *mac = &adapter->hw.mac; in igbvf_reset()
1464 struct net_device *netdev = adapter->netdev; in igbvf_reset()
1465 struct e1000_hw *hw = &adapter->hw; in igbvf_reset()
1469 dev_err(&adapter->pdev->dev, "PF still resetting\n"); in igbvf_reset()
1473 if (is_valid_ether_addr(adapter->hw.mac.addr)) { in igbvf_reset()
1474 memcpy(netdev->dev_addr, adapter->hw.mac.addr, in igbvf_reset()
1476 memcpy(netdev->perm_addr, adapter->hw.mac.addr, in igbvf_reset()
1480 adapter->last_reset = jiffies; in igbvf_reset()
1483 int igbvf_up(struct igbvf_adapter *adapter) in igbvf_up() argument
1485 struct e1000_hw *hw = &adapter->hw; in igbvf_up()
1488 igbvf_configure(adapter); in igbvf_up()
1490 clear_bit(__IGBVF_DOWN, &adapter->state); in igbvf_up()
1492 napi_enable(&adapter->rx_ring->napi); in igbvf_up()
1493 if (adapter->msix_entries) in igbvf_up()
1494 igbvf_configure_msix(adapter); in igbvf_up()
1498 igbvf_irq_enable(adapter); in igbvf_up()
1502 mod_timer(&adapter->watchdog_timer, jiffies + 1); in igbvf_up()
1507 void igbvf_down(struct igbvf_adapter *adapter) in igbvf_down() argument
1509 struct net_device *netdev = adapter->netdev; in igbvf_down()
1510 struct e1000_hw *hw = &adapter->hw; in igbvf_down()
1516 set_bit(__IGBVF_DOWN, &adapter->state); in igbvf_down()
1533 napi_disable(&adapter->rx_ring->napi); in igbvf_down()
1535 igbvf_irq_disable(adapter); in igbvf_down()
1537 del_timer_sync(&adapter->watchdog_timer); in igbvf_down()
1540 igbvf_update_stats(adapter); in igbvf_down()
1542 adapter->link_speed = 0; in igbvf_down()
1543 adapter->link_duplex = 0; in igbvf_down()
1545 igbvf_reset(adapter); in igbvf_down()
1546 igbvf_clean_tx_ring(adapter->tx_ring); in igbvf_down()
1547 igbvf_clean_rx_ring(adapter->rx_ring); in igbvf_down()
1550 void igbvf_reinit_locked(struct igbvf_adapter *adapter) in igbvf_reinit_locked() argument
1553 while (test_and_set_bit(__IGBVF_RESETTING, &adapter->state)) in igbvf_reinit_locked()
1555 igbvf_down(adapter); in igbvf_reinit_locked()
1556 igbvf_up(adapter); in igbvf_reinit_locked()
1557 clear_bit(__IGBVF_RESETTING, &adapter->state); in igbvf_reinit_locked()
1568 static int igbvf_sw_init(struct igbvf_adapter *adapter) in igbvf_sw_init() argument
1570 struct net_device *netdev = adapter->netdev; in igbvf_sw_init()
1573 adapter->rx_buffer_len = ETH_FRAME_LEN + VLAN_HLEN + ETH_FCS_LEN; in igbvf_sw_init()
1574 adapter->rx_ps_hdr_size = 0; in igbvf_sw_init()
1575 adapter->max_frame_size = netdev->mtu + ETH_HLEN + ETH_FCS_LEN; in igbvf_sw_init()
1576 adapter->min_frame_size = ETH_ZLEN + ETH_FCS_LEN; in igbvf_sw_init()
1578 adapter->tx_int_delay = 8; in igbvf_sw_init()
1579 adapter->tx_abs_int_delay = 32; in igbvf_sw_init()
1580 adapter->rx_int_delay = 0; in igbvf_sw_init()
1581 adapter->rx_abs_int_delay = 8; in igbvf_sw_init()
1582 adapter->requested_itr = 3; in igbvf_sw_init()
1583 adapter->current_itr = IGBVF_START_ITR; in igbvf_sw_init()
1586 adapter->ei->init_ops(&adapter->hw); in igbvf_sw_init()
1588 rc = adapter->hw.mac.ops.init_params(&adapter->hw); in igbvf_sw_init()
1592 rc = adapter->hw.mbx.ops.init_params(&adapter->hw); in igbvf_sw_init()
1596 igbvf_set_interrupt_capability(adapter); in igbvf_sw_init()
1598 if (igbvf_alloc_queues(adapter)) in igbvf_sw_init()
1601 spin_lock_init(&adapter->tx_queue_lock); in igbvf_sw_init()
1604 igbvf_irq_disable(adapter); in igbvf_sw_init()
1606 spin_lock_init(&adapter->stats_lock); in igbvf_sw_init()
1608 set_bit(__IGBVF_DOWN, &adapter->state); in igbvf_sw_init()
1612 static void igbvf_initialize_last_counter_stats(struct igbvf_adapter *adapter) in igbvf_initialize_last_counter_stats() argument
1614 struct e1000_hw *hw = &adapter->hw; in igbvf_initialize_last_counter_stats()
1616 adapter->stats.last_gprc = er32(VFGPRC); in igbvf_initialize_last_counter_stats()
1617 adapter->stats.last_gorc = er32(VFGORC); in igbvf_initialize_last_counter_stats()
1618 adapter->stats.last_gptc = er32(VFGPTC); in igbvf_initialize_last_counter_stats()
1619 adapter->stats.last_gotc = er32(VFGOTC); in igbvf_initialize_last_counter_stats()
1620 adapter->stats.last_mprc = er32(VFMPRC); in igbvf_initialize_last_counter_stats()
1621 adapter->stats.last_gotlbc = er32(VFGOTLBC); in igbvf_initialize_last_counter_stats()
1622 adapter->stats.last_gptlbc = er32(VFGPTLBC); in igbvf_initialize_last_counter_stats()
1623 adapter->stats.last_gorlbc = er32(VFGORLBC); in igbvf_initialize_last_counter_stats()
1624 adapter->stats.last_gprlbc = er32(VFGPRLBC); in igbvf_initialize_last_counter_stats()
1626 adapter->stats.base_gprc = er32(VFGPRC); in igbvf_initialize_last_counter_stats()
1627 adapter->stats.base_gorc = er32(VFGORC); in igbvf_initialize_last_counter_stats()
1628 adapter->stats.base_gptc = er32(VFGPTC); in igbvf_initialize_last_counter_stats()
1629 adapter->stats.base_gotc = er32(VFGOTC); in igbvf_initialize_last_counter_stats()
1630 adapter->stats.base_mprc = er32(VFMPRC); in igbvf_initialize_last_counter_stats()
1631 adapter->stats.base_gotlbc = er32(VFGOTLBC); in igbvf_initialize_last_counter_stats()
1632 adapter->stats.base_gptlbc = er32(VFGPTLBC); in igbvf_initialize_last_counter_stats()
1633 adapter->stats.base_gorlbc = er32(VFGORLBC); in igbvf_initialize_last_counter_stats()
1634 adapter->stats.base_gprlbc = er32(VFGPRLBC); in igbvf_initialize_last_counter_stats()
1651 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_open() local
1652 struct e1000_hw *hw = &adapter->hw; in igbvf_open()
1656 if (test_bit(__IGBVF_TESTING, &adapter->state)) in igbvf_open()
1660 err = igbvf_setup_tx_resources(adapter, adapter->tx_ring); in igbvf_open()
1665 err = igbvf_setup_rx_resources(adapter, adapter->rx_ring); in igbvf_open()
1674 igbvf_configure(adapter); in igbvf_open()
1676 err = igbvf_request_irq(adapter); in igbvf_open()
1681 clear_bit(__IGBVF_DOWN, &adapter->state); in igbvf_open()
1683 napi_enable(&adapter->rx_ring->napi); in igbvf_open()
1688 igbvf_irq_enable(adapter); in igbvf_open()
1692 mod_timer(&adapter->watchdog_timer, jiffies + 1); in igbvf_open()
1697 igbvf_free_rx_resources(adapter->rx_ring); in igbvf_open()
1699 igbvf_free_tx_resources(adapter->tx_ring); in igbvf_open()
1701 igbvf_reset(adapter); in igbvf_open()
1719 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_close() local
1721 WARN_ON(test_bit(__IGBVF_RESETTING, &adapter->state)); in igbvf_close()
1722 igbvf_down(adapter); in igbvf_close()
1724 igbvf_free_irq(adapter); in igbvf_close()
1726 igbvf_free_tx_resources(adapter->tx_ring); in igbvf_close()
1727 igbvf_free_rx_resources(adapter->rx_ring); in igbvf_close()
1741 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_set_mac() local
1742 struct e1000_hw *hw = &adapter->hw; in igbvf_set_mac()
1763 if (current_counter < adapter->stats.last_##name) \
1764 adapter->stats.name += 0x100000000LL; \
1765 adapter->stats.last_##name = current_counter; \
1766 adapter->stats.name &= 0xFFFFFFFF00000000LL; \
1767 adapter->stats.name |= current_counter; \
1774 void igbvf_update_stats(struct igbvf_adapter *adapter) in igbvf_update_stats() argument
1776 struct e1000_hw *hw = &adapter->hw; in igbvf_update_stats()
1777 struct pci_dev *pdev = adapter->pdev; in igbvf_update_stats()
1782 if (adapter->link_speed == 0) in igbvf_update_stats()
1785 if (test_bit(__IGBVF_RESETTING, &adapter->state)) in igbvf_update_stats()
1802 adapter->net_stats.multicast = adapter->stats.mprc; in igbvf_update_stats()
1805 static void igbvf_print_link_info(struct igbvf_adapter *adapter) in igbvf_print_link_info() argument
1807 dev_info(&adapter->pdev->dev, "Link is Up %d Mbps %s Duplex\n", in igbvf_print_link_info()
1808 adapter->link_speed, in igbvf_print_link_info()
1809 adapter->link_duplex == FULL_DUPLEX ? "Full" : "Half"); in igbvf_print_link_info()
1812 static bool igbvf_has_link(struct igbvf_adapter *adapter) in igbvf_has_link() argument
1814 struct e1000_hw *hw = &adapter->hw; in igbvf_has_link()
1819 if (test_bit(__IGBVF_DOWN, &adapter->state)) in igbvf_has_link()
1826 if (ret_val && time_after(jiffies, adapter->last_reset + (10 * HZ))) in igbvf_has_link()
1827 schedule_work(&adapter->reset_task); in igbvf_has_link()
1838 struct igbvf_adapter *adapter = (struct igbvf_adapter *)data; in igbvf_watchdog() local
1841 schedule_work(&adapter->watchdog_task); in igbvf_watchdog()
1846 struct igbvf_adapter *adapter = container_of(work, in igbvf_watchdog_task() local
1849 struct net_device *netdev = adapter->netdev; in igbvf_watchdog_task()
1850 struct e1000_mac_info *mac = &adapter->hw.mac; in igbvf_watchdog_task()
1851 struct igbvf_ring *tx_ring = adapter->tx_ring; in igbvf_watchdog_task()
1852 struct e1000_hw *hw = &adapter->hw; in igbvf_watchdog_task()
1856 link = igbvf_has_link(adapter); in igbvf_watchdog_task()
1860 mac->ops.get_link_up_info(&adapter->hw, in igbvf_watchdog_task()
1861 &adapter->link_speed, in igbvf_watchdog_task()
1862 &adapter->link_duplex); in igbvf_watchdog_task()
1863 igbvf_print_link_info(adapter); in igbvf_watchdog_task()
1870 adapter->link_speed = 0; in igbvf_watchdog_task()
1871 adapter->link_duplex = 0; in igbvf_watchdog_task()
1872 dev_info(&adapter->pdev->dev, "Link is Down\n"); in igbvf_watchdog_task()
1879 igbvf_update_stats(adapter); in igbvf_watchdog_task()
1889 adapter->tx_timeout_count++; in igbvf_watchdog_task()
1890 schedule_work(&adapter->reset_task); in igbvf_watchdog_task()
1895 ew32(EICS, adapter->rx_ring->eims_value); in igbvf_watchdog_task()
1898 if (!test_bit(__IGBVF_DOWN, &adapter->state)) in igbvf_watchdog_task()
1899 mod_timer(&adapter->watchdog_timer, in igbvf_watchdog_task()
1910 static int igbvf_tso(struct igbvf_adapter *adapter, in igbvf_tso() argument
1926 dev_err(&adapter->pdev->dev, "igbvf_tso returning an error\n"); in igbvf_tso()
1989 static inline bool igbvf_tx_csum(struct igbvf_adapter *adapter, in igbvf_tx_csum() argument
2052 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_maybe_stop_tx() local
2055 if (igbvf_desc_unused(adapter->tx_ring) >= size) in igbvf_maybe_stop_tx()
2067 if (igbvf_desc_unused(adapter->tx_ring) < size) in igbvf_maybe_stop_tx()
2072 ++adapter->restart_queue; in igbvf_maybe_stop_tx()
2079 static inline int igbvf_tx_map_adv(struct igbvf_adapter *adapter, in igbvf_tx_map_adv() argument
2084 struct pci_dev *pdev = adapter->pdev; in igbvf_tx_map_adv()
2145 igbvf_put_txbuf(adapter, buffer_info); in igbvf_tx_map_adv()
2151 static inline void igbvf_tx_queue_adv(struct igbvf_adapter *adapter, in igbvf_tx_queue_adv() argument
2197 tx_desc->read.cmd_type_len |= cpu_to_le32(adapter->txd_cmd); in igbvf_tx_queue_adv()
2207 writel(i, adapter->hw.hw_addr + tx_ring->tail); in igbvf_tx_queue_adv()
2218 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_xmit_frame_ring_adv() local
2225 if (test_bit(__IGBVF_DOWN, &adapter->state)) { in igbvf_xmit_frame_ring_adv()
2258 igbvf_tso(adapter, tx_ring, skb, tx_flags, &hdr_len, protocol) : 0; in igbvf_xmit_frame_ring_adv()
2266 else if (igbvf_tx_csum(adapter, tx_ring, skb, tx_flags, protocol) && in igbvf_xmit_frame_ring_adv()
2273 count = igbvf_tx_map_adv(adapter, tx_ring, skb); in igbvf_xmit_frame_ring_adv()
2276 igbvf_tx_queue_adv(adapter, tx_ring, tx_flags, count, in igbvf_xmit_frame_ring_adv()
2292 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_xmit_frame() local
2295 if (test_bit(__IGBVF_DOWN, &adapter->state)) { in igbvf_xmit_frame()
2300 tx_ring = &adapter->tx_ring[0]; in igbvf_xmit_frame()
2311 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_tx_timeout() local
2314 adapter->tx_timeout_count++; in igbvf_tx_timeout()
2315 schedule_work(&adapter->reset_task); in igbvf_tx_timeout()
2320 struct igbvf_adapter *adapter; in igbvf_reset_task() local
2322 adapter = container_of(work, struct igbvf_adapter, reset_task); in igbvf_reset_task()
2324 igbvf_reinit_locked(adapter); in igbvf_reset_task()
2336 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_get_stats() local
2339 return &adapter->net_stats; in igbvf_get_stats()
2351 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_change_mtu() local
2360 dev_err(&adapter->pdev->dev, "MTU > 9216 not supported.\n"); in igbvf_change_mtu()
2364 while (test_and_set_bit(__IGBVF_RESETTING, &adapter->state)) in igbvf_change_mtu()
2367 adapter->max_frame_size = max_frame; in igbvf_change_mtu()
2369 igbvf_down(adapter); in igbvf_change_mtu()
2380 adapter->rx_buffer_len = 1024; in igbvf_change_mtu()
2382 adapter->rx_buffer_len = 2048; in igbvf_change_mtu()
2385 adapter->rx_buffer_len = 16384; in igbvf_change_mtu()
2387 adapter->rx_buffer_len = PAGE_SIZE / 2; in igbvf_change_mtu()
2393 adapter->rx_buffer_len = ETH_FRAME_LEN + VLAN_HLEN + in igbvf_change_mtu()
2396 dev_info(&adapter->pdev->dev, "changing MTU from %d to %d\n", in igbvf_change_mtu()
2401 igbvf_up(adapter); in igbvf_change_mtu()
2403 igbvf_reset(adapter); in igbvf_change_mtu()
2405 clear_bit(__IGBVF_RESETTING, &adapter->state); in igbvf_change_mtu()
2421 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_suspend() local
2429 WARN_ON(test_bit(__IGBVF_RESETTING, &adapter->state)); in igbvf_suspend()
2430 igbvf_down(adapter); in igbvf_suspend()
2431 igbvf_free_irq(adapter); in igbvf_suspend()
2449 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_resume() local
2462 err = igbvf_request_irq(adapter); in igbvf_resume()
2467 igbvf_reset(adapter); in igbvf_resume()
2470 igbvf_up(adapter); in igbvf_resume()
2490 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_netpoll() local
2492 disable_irq(adapter->pdev->irq); in igbvf_netpoll()
2494 igbvf_clean_tx_irq(adapter->tx_ring); in igbvf_netpoll()
2496 enable_irq(adapter->pdev->irq); in igbvf_netpoll()
2512 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_io_error_detected() local
2520 igbvf_down(adapter); in igbvf_io_error_detected()
2537 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_io_slot_reset() local
2546 igbvf_reset(adapter); in igbvf_io_slot_reset()
2562 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_io_resume() local
2565 if (igbvf_up(adapter)) { in igbvf_io_resume()
2575 static void igbvf_print_device_info(struct igbvf_adapter *adapter) in igbvf_print_device_info() argument
2577 struct e1000_hw *hw = &adapter->hw; in igbvf_print_device_info()
2578 struct net_device *netdev = adapter->netdev; in igbvf_print_device_info()
2579 struct pci_dev *pdev = adapter->pdev; in igbvf_print_device_info()
2591 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_set_features() local
2594 adapter->flags &= ~IGBVF_FLAG_RX_CSUM_DISABLED; in igbvf_set_features()
2596 adapter->flags |= IGBVF_FLAG_RX_CSUM_DISABLED; in igbvf_set_features()
2633 struct igbvf_adapter *adapter; in igbvf_probe() local
2671 adapter = netdev_priv(netdev); in igbvf_probe()
2672 hw = &adapter->hw; in igbvf_probe()
2673 adapter->netdev = netdev; in igbvf_probe()
2674 adapter->pdev = pdev; in igbvf_probe()
2675 adapter->ei = ei; in igbvf_probe()
2676 adapter->pba = ei->pba; in igbvf_probe()
2677 adapter->flags = ei->flags; in igbvf_probe()
2678 adapter->hw.back = adapter; in igbvf_probe()
2679 adapter->hw.mac.type = ei->mac; in igbvf_probe()
2680 adapter->msg_enable = netif_msg_init(debug, DEFAULT_MSG_ENABLE); in igbvf_probe()
2691 adapter->hw.hw_addr = ioremap(pci_resource_start(pdev, 0), in igbvf_probe()
2694 if (!adapter->hw.hw_addr) in igbvf_probe()
2698 err = ei->get_variants(adapter); in igbvf_probe()
2704 err = igbvf_sw_init(adapter); in igbvf_probe()
2715 adapter->bd_number = cards_found++; in igbvf_probe()
2747 else if (is_zero_ether_addr(adapter->hw.mac.addr)) in igbvf_probe()
2750 memcpy(netdev->dev_addr, adapter->hw.mac.addr, in igbvf_probe()
2757 memcpy(adapter->hw.mac.addr, netdev->dev_addr, in igbvf_probe()
2761 setup_timer(&adapter->watchdog_timer, &igbvf_watchdog, in igbvf_probe()
2762 (unsigned long)adapter); in igbvf_probe()
2764 INIT_WORK(&adapter->reset_task, igbvf_reset_task); in igbvf_probe()
2765 INIT_WORK(&adapter->watchdog_task, igbvf_watchdog_task); in igbvf_probe()
2768 adapter->rx_ring->count = 1024; in igbvf_probe()
2769 adapter->tx_ring->count = 1024; in igbvf_probe()
2772 igbvf_reset(adapter); in igbvf_probe()
2775 if (adapter->hw.mac.type == e1000_vfadapt_i350) in igbvf_probe()
2776 adapter->flags |= IGBVF_FLAG_RX_LB_VLAN_BSWAP; in igbvf_probe()
2787 igbvf_print_device_info(adapter); in igbvf_probe()
2789 igbvf_initialize_last_counter_stats(adapter); in igbvf_probe()
2794 kfree(adapter->tx_ring); in igbvf_probe()
2795 kfree(adapter->rx_ring); in igbvf_probe()
2797 igbvf_reset_interrupt_capability(adapter); in igbvf_probe()
2799 iounmap(adapter->hw.hw_addr); in igbvf_probe()
2822 struct igbvf_adapter *adapter = netdev_priv(netdev); in igbvf_remove() local
2823 struct e1000_hw *hw = &adapter->hw; in igbvf_remove()
2828 set_bit(__IGBVF_DOWN, &adapter->state); in igbvf_remove()
2829 del_timer_sync(&adapter->watchdog_timer); in igbvf_remove()
2831 cancel_work_sync(&adapter->reset_task); in igbvf_remove()
2832 cancel_work_sync(&adapter->watchdog_task); in igbvf_remove()
2836 igbvf_reset_interrupt_capability(adapter); in igbvf_remove()
2841 netif_napi_del(&adapter->rx_ring->napi); in igbvf_remove()
2842 kfree(adapter->tx_ring); in igbvf_remove()
2843 kfree(adapter->rx_ring); in igbvf_remove()