Lines Matching full:adapter
14 static int iavf_setup_all_tx_resources(struct iavf_adapter *adapter);
15 static int iavf_setup_all_rx_resources(struct iavf_adapter *adapter);
17 static int iavf_init_get_resources(struct iavf_adapter *adapter);
65 struct iavf_adapter *adapter = (struct iavf_adapter *)hw->back; in iavf_allocate_dma_mem_d() local
71 mem->va = dma_alloc_coherent(&adapter->pdev->dev, mem->size, in iavf_allocate_dma_mem_d()
87 struct iavf_adapter *adapter = (struct iavf_adapter *)hw->back; in iavf_free_dma_mem_d() local
91 dma_free_coherent(&adapter->pdev->dev, mem->size, in iavf_free_dma_mem_d()
157 * @adapter: board private structure
159 void iavf_schedule_reset(struct iavf_adapter *adapter) in iavf_schedule_reset() argument
161 if (!(adapter->flags & in iavf_schedule_reset()
163 adapter->flags |= IAVF_FLAG_RESET_NEEDED; in iavf_schedule_reset()
164 queue_work(iavf_wq, &adapter->reset_task); in iavf_schedule_reset()
175 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_tx_timeout() local
177 adapter->tx_timeout_count++; in iavf_tx_timeout()
178 iavf_schedule_reset(adapter); in iavf_tx_timeout()
183 * @adapter: board private structure
185 static void iavf_misc_irq_disable(struct iavf_adapter *adapter) in iavf_misc_irq_disable() argument
187 struct iavf_hw *hw = &adapter->hw; in iavf_misc_irq_disable()
189 if (!adapter->msix_entries) in iavf_misc_irq_disable()
196 synchronize_irq(adapter->msix_entries[0].vector); in iavf_misc_irq_disable()
201 * @adapter: board private structure
203 static void iavf_misc_irq_enable(struct iavf_adapter *adapter) in iavf_misc_irq_enable() argument
205 struct iavf_hw *hw = &adapter->hw; in iavf_misc_irq_enable()
216 * @adapter: board private structure
218 static void iavf_irq_disable(struct iavf_adapter *adapter) in iavf_irq_disable() argument
221 struct iavf_hw *hw = &adapter->hw; in iavf_irq_disable()
223 if (!adapter->msix_entries) in iavf_irq_disable()
226 for (i = 1; i < adapter->num_msix_vectors; i++) { in iavf_irq_disable()
228 synchronize_irq(adapter->msix_entries[i].vector); in iavf_irq_disable()
235 * @adapter: board private structure
238 void iavf_irq_enable_queues(struct iavf_adapter *adapter, u32 mask) in iavf_irq_enable_queues() argument
240 struct iavf_hw *hw = &adapter->hw; in iavf_irq_enable_queues()
243 for (i = 1; i < adapter->num_msix_vectors; i++) { in iavf_irq_enable_queues()
254 * @adapter: board private structure
257 void iavf_irq_enable(struct iavf_adapter *adapter, bool flush) in iavf_irq_enable() argument
259 struct iavf_hw *hw = &adapter->hw; in iavf_irq_enable()
261 iavf_misc_irq_enable(adapter); in iavf_irq_enable()
262 iavf_irq_enable_queues(adapter, ~0); in iavf_irq_enable()
276 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_msix_aq() local
277 struct iavf_hw *hw = &adapter->hw; in iavf_msix_aq()
284 queue_work(iavf_wq, &adapter->adminq_task); in iavf_msix_aq()
308 * @adapter: board private structure
313 iavf_map_vector_to_rxq(struct iavf_adapter *adapter, int v_idx, int r_idx) in iavf_map_vector_to_rxq() argument
315 struct iavf_q_vector *q_vector = &adapter->q_vectors[v_idx]; in iavf_map_vector_to_rxq()
316 struct iavf_ring *rx_ring = &adapter->rx_rings[r_idx]; in iavf_map_vector_to_rxq()
317 struct iavf_hw *hw = &adapter->hw; in iavf_map_vector_to_rxq()
321 rx_ring->vsi = &adapter->vsi; in iavf_map_vector_to_rxq()
334 * @adapter: board private structure
339 iavf_map_vector_to_txq(struct iavf_adapter *adapter, int v_idx, int t_idx) in iavf_map_vector_to_txq() argument
341 struct iavf_q_vector *q_vector = &adapter->q_vectors[v_idx]; in iavf_map_vector_to_txq()
342 struct iavf_ring *tx_ring = &adapter->tx_rings[t_idx]; in iavf_map_vector_to_txq()
343 struct iavf_hw *hw = &adapter->hw; in iavf_map_vector_to_txq()
347 tx_ring->vsi = &adapter->vsi; in iavf_map_vector_to_txq()
360 * @adapter: board private structure to initialize
368 static void iavf_map_rings_to_vectors(struct iavf_adapter *adapter) in iavf_map_rings_to_vectors() argument
370 int rings_remaining = adapter->num_active_queues; in iavf_map_rings_to_vectors()
374 q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_map_rings_to_vectors()
377 iavf_map_vector_to_rxq(adapter, vidx, ridx); in iavf_map_rings_to_vectors()
378 iavf_map_vector_to_txq(adapter, vidx, ridx); in iavf_map_rings_to_vectors()
387 adapter->aq_required |= IAVF_FLAG_AQ_MAP_VECTORS; in iavf_map_rings_to_vectors()
419 * @adapter: board private structure
426 iavf_request_traffic_irqs(struct iavf_adapter *adapter, char *basename) in iavf_request_traffic_irqs() argument
433 iavf_irq_disable(adapter); in iavf_request_traffic_irqs()
435 q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_request_traffic_irqs()
438 struct iavf_q_vector *q_vector = &adapter->q_vectors[vector]; in iavf_request_traffic_irqs()
440 irq_num = adapter->msix_entries[vector + NONQ_VECS].vector; in iavf_request_traffic_irqs()
462 dev_info(&adapter->pdev->dev, in iavf_request_traffic_irqs()
484 irq_num = adapter->msix_entries[vector + NONQ_VECS].vector; in iavf_request_traffic_irqs()
487 free_irq(irq_num, &adapter->q_vectors[vector]); in iavf_request_traffic_irqs()
494 * @adapter: board private structure
500 static int iavf_request_misc_irq(struct iavf_adapter *adapter) in iavf_request_misc_irq() argument
502 struct net_device *netdev = adapter->netdev; in iavf_request_misc_irq()
505 snprintf(adapter->misc_vector_name, in iavf_request_misc_irq()
506 sizeof(adapter->misc_vector_name) - 1, "iavf-%s:mbx", in iavf_request_misc_irq()
507 dev_name(&adapter->pdev->dev)); in iavf_request_misc_irq()
508 err = request_irq(adapter->msix_entries[0].vector, in iavf_request_misc_irq()
510 adapter->misc_vector_name, netdev); in iavf_request_misc_irq()
512 dev_err(&adapter->pdev->dev, in iavf_request_misc_irq()
514 adapter->misc_vector_name, err); in iavf_request_misc_irq()
515 free_irq(adapter->msix_entries[0].vector, netdev); in iavf_request_misc_irq()
522 * @adapter: board private structure
526 static void iavf_free_traffic_irqs(struct iavf_adapter *adapter) in iavf_free_traffic_irqs() argument
530 if (!adapter->msix_entries) in iavf_free_traffic_irqs()
533 q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_free_traffic_irqs()
536 irq_num = adapter->msix_entries[vector + NONQ_VECS].vector; in iavf_free_traffic_irqs()
539 free_irq(irq_num, &adapter->q_vectors[vector]); in iavf_free_traffic_irqs()
545 * @adapter: board private structure
549 static void iavf_free_misc_irq(struct iavf_adapter *adapter) in iavf_free_misc_irq() argument
551 struct net_device *netdev = adapter->netdev; in iavf_free_misc_irq()
553 if (!adapter->msix_entries) in iavf_free_misc_irq()
556 free_irq(adapter->msix_entries[0].vector, netdev); in iavf_free_misc_irq()
561 * @adapter: board private structure
565 static void iavf_configure_tx(struct iavf_adapter *adapter) in iavf_configure_tx() argument
567 struct iavf_hw *hw = &adapter->hw; in iavf_configure_tx()
570 for (i = 0; i < adapter->num_active_queues; i++) in iavf_configure_tx()
571 adapter->tx_rings[i].tail = hw->hw_addr + IAVF_QTX_TAIL1(i); in iavf_configure_tx()
576 * @adapter: board private structure
580 static void iavf_configure_rx(struct iavf_adapter *adapter) in iavf_configure_rx() argument
583 struct iavf_hw *hw = &adapter->hw; in iavf_configure_rx()
588 if (!(adapter->flags & IAVF_FLAG_LEGACY_RX)) { in iavf_configure_rx()
589 struct net_device *netdev = adapter->netdev; in iavf_configure_rx()
607 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_configure_rx()
608 adapter->rx_rings[i].tail = hw->hw_addr + IAVF_QRX_TAIL1(i); in iavf_configure_rx()
609 adapter->rx_rings[i].rx_buf_len = rx_buf_len; in iavf_configure_rx()
611 if (adapter->flags & IAVF_FLAG_LEGACY_RX) in iavf_configure_rx()
612 clear_ring_build_skb_enabled(&adapter->rx_rings[i]); in iavf_configure_rx()
614 set_ring_build_skb_enabled(&adapter->rx_rings[i]); in iavf_configure_rx()
620 * @adapter: board private structure
627 iavf_vlan_filter *iavf_find_vlan(struct iavf_adapter *adapter, u16 vlan) in iavf_find_vlan() argument
631 list_for_each_entry(f, &adapter->vlan_filter_list, list) { in iavf_find_vlan()
640 * @adapter: board private structure
646 iavf_vlan_filter *iavf_add_vlan(struct iavf_adapter *adapter, u16 vlan) in iavf_add_vlan() argument
650 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_add_vlan()
652 f = iavf_find_vlan(adapter, vlan); in iavf_add_vlan()
660 list_add_tail(&f->list, &adapter->vlan_filter_list); in iavf_add_vlan()
662 adapter->aq_required |= IAVF_FLAG_AQ_ADD_VLAN_FILTER; in iavf_add_vlan()
666 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_add_vlan()
672 * @adapter: board private structure
675 static void iavf_del_vlan(struct iavf_adapter *adapter, u16 vlan) in iavf_del_vlan() argument
679 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_del_vlan()
681 f = iavf_find_vlan(adapter, vlan); in iavf_del_vlan()
684 adapter->aq_required |= IAVF_FLAG_AQ_DEL_VLAN_FILTER; in iavf_del_vlan()
687 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_del_vlan()
699 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_vlan_rx_add_vid() local
701 if (!VLAN_ALLOWED(adapter)) in iavf_vlan_rx_add_vid()
703 if (iavf_add_vlan(adapter, vid) == NULL) in iavf_vlan_rx_add_vid()
717 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_vlan_rx_kill_vid() local
719 if (VLAN_ALLOWED(adapter)) { in iavf_vlan_rx_kill_vid()
720 iavf_del_vlan(adapter, vid); in iavf_vlan_rx_kill_vid()
728 * @adapter: board private structure
735 iavf_mac_filter *iavf_find_filter(struct iavf_adapter *adapter, in iavf_find_filter() argument
743 list_for_each_entry(f, &adapter->mac_filter_list, list) { in iavf_find_filter()
752 * @adapter: board private structure
757 struct iavf_mac_filter *iavf_add_filter(struct iavf_adapter *adapter, in iavf_add_filter() argument
765 f = iavf_find_filter(adapter, macaddr); in iavf_add_filter()
773 list_add_tail(&f->list, &adapter->mac_filter_list); in iavf_add_filter()
776 adapter->aq_required |= IAVF_FLAG_AQ_ADD_MAC_FILTER; in iavf_add_filter()
793 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_set_mac() local
794 struct iavf_hw *hw = &adapter->hw; in iavf_set_mac()
804 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_set_mac()
806 f = iavf_find_filter(adapter, hw->mac.addr); in iavf_set_mac()
809 adapter->aq_required |= IAVF_FLAG_AQ_DEL_MAC_FILTER; in iavf_set_mac()
812 f = iavf_add_filter(adapter, addr->sa_data); in iavf_set_mac()
814 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_set_mac()
833 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_addr_sync() local
835 if (iavf_add_filter(adapter, addr)) in iavf_addr_sync()
851 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_addr_unsync() local
862 f = iavf_find_filter(adapter, addr); in iavf_addr_unsync()
865 adapter->aq_required |= IAVF_FLAG_AQ_DEL_MAC_FILTER; in iavf_addr_unsync()
876 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_set_rx_mode() local
878 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_set_rx_mode()
881 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_set_rx_mode()
884 !(adapter->flags & IAVF_FLAG_PROMISC_ON)) in iavf_set_rx_mode()
885 adapter->aq_required |= IAVF_FLAG_AQ_REQUEST_PROMISC; in iavf_set_rx_mode()
887 adapter->flags & IAVF_FLAG_PROMISC_ON) in iavf_set_rx_mode()
888 adapter->aq_required |= IAVF_FLAG_AQ_RELEASE_PROMISC; in iavf_set_rx_mode()
891 !(adapter->flags & IAVF_FLAG_ALLMULTI_ON)) in iavf_set_rx_mode()
892 adapter->aq_required |= IAVF_FLAG_AQ_REQUEST_ALLMULTI; in iavf_set_rx_mode()
894 adapter->flags & IAVF_FLAG_ALLMULTI_ON) in iavf_set_rx_mode()
895 adapter->aq_required |= IAVF_FLAG_AQ_RELEASE_ALLMULTI; in iavf_set_rx_mode()
900 * @adapter: board private structure
902 static void iavf_napi_enable_all(struct iavf_adapter *adapter) in iavf_napi_enable_all() argument
906 int q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_napi_enable_all()
911 q_vector = &adapter->q_vectors[q_idx]; in iavf_napi_enable_all()
919 * @adapter: board private structure
921 static void iavf_napi_disable_all(struct iavf_adapter *adapter) in iavf_napi_disable_all() argument
925 int q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_napi_disable_all()
928 q_vector = &adapter->q_vectors[q_idx]; in iavf_napi_disable_all()
935 * @adapter: board private structure
937 static void iavf_configure(struct iavf_adapter *adapter) in iavf_configure() argument
939 struct net_device *netdev = adapter->netdev; in iavf_configure()
944 iavf_configure_tx(adapter); in iavf_configure()
945 iavf_configure_rx(adapter); in iavf_configure()
946 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_QUEUES; in iavf_configure()
948 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_configure()
949 struct iavf_ring *ring = &adapter->rx_rings[i]; in iavf_configure()
957 * @adapter: board private structure
961 static void iavf_up_complete(struct iavf_adapter *adapter) in iavf_up_complete() argument
963 adapter->state = __IAVF_RUNNING; in iavf_up_complete()
964 clear_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_up_complete()
966 iavf_napi_enable_all(adapter); in iavf_up_complete()
968 adapter->aq_required |= IAVF_FLAG_AQ_ENABLE_QUEUES; in iavf_up_complete()
969 if (CLIENT_ENABLED(adapter)) in iavf_up_complete()
970 adapter->flags |= IAVF_FLAG_CLIENT_NEEDS_OPEN; in iavf_up_complete()
971 mod_delayed_work(iavf_wq, &adapter->watchdog_task, 0); in iavf_up_complete()
976 * @adapter: board private structure
980 void iavf_down(struct iavf_adapter *adapter) in iavf_down() argument
982 struct net_device *netdev = adapter->netdev; in iavf_down()
989 if (adapter->state <= __IAVF_DOWN_PENDING) in iavf_down()
994 adapter->link_up = false; in iavf_down()
995 iavf_napi_disable_all(adapter); in iavf_down()
996 iavf_irq_disable(adapter); in iavf_down()
998 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_down()
1001 __dev_uc_unsync(adapter->netdev, NULL); in iavf_down()
1002 __dev_mc_unsync(adapter->netdev, NULL); in iavf_down()
1005 list_for_each_entry(f, &adapter->mac_filter_list, list) { in iavf_down()
1010 list_for_each_entry(vlf, &adapter->vlan_filter_list, list) { in iavf_down()
1014 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_down()
1017 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_down()
1018 list_for_each_entry(cf, &adapter->cloud_filter_list, list) { in iavf_down()
1021 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_down()
1024 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_down()
1025 list_for_each_entry(fdir, &adapter->fdir_list_head, list) { in iavf_down()
1028 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_down()
1031 spin_lock_bh(&adapter->adv_rss_lock); in iavf_down()
1032 list_for_each_entry(rss, &adapter->adv_rss_list_head, list) in iavf_down()
1034 spin_unlock_bh(&adapter->adv_rss_lock); in iavf_down()
1036 if (!(adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) && in iavf_down()
1037 adapter->state != __IAVF_RESETTING) { in iavf_down()
1039 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_down()
1044 adapter->aq_required = IAVF_FLAG_AQ_DEL_MAC_FILTER; in iavf_down()
1045 adapter->aq_required |= IAVF_FLAG_AQ_DEL_VLAN_FILTER; in iavf_down()
1046 adapter->aq_required |= IAVF_FLAG_AQ_DEL_CLOUD_FILTER; in iavf_down()
1047 adapter->aq_required |= IAVF_FLAG_AQ_DEL_FDIR_FILTER; in iavf_down()
1048 adapter->aq_required |= IAVF_FLAG_AQ_DEL_ADV_RSS_CFG; in iavf_down()
1049 adapter->aq_required |= IAVF_FLAG_AQ_DISABLE_QUEUES; in iavf_down()
1052 mod_delayed_work(iavf_wq, &adapter->watchdog_task, 0); in iavf_down()
1057 * @adapter: board private structure
1065 iavf_acquire_msix_vectors(struct iavf_adapter *adapter, int vectors) in iavf_acquire_msix_vectors() argument
1081 err = pci_enable_msix_range(adapter->pdev, adapter->msix_entries, in iavf_acquire_msix_vectors()
1084 dev_err(&adapter->pdev->dev, "Unable to allocate MSI-X interrupts\n"); in iavf_acquire_msix_vectors()
1085 kfree(adapter->msix_entries); in iavf_acquire_msix_vectors()
1086 adapter->msix_entries = NULL; in iavf_acquire_msix_vectors()
1094 adapter->num_msix_vectors = err; in iavf_acquire_msix_vectors()
1100 * @adapter: board private structure to initialize
1104 static void iavf_free_queues(struct iavf_adapter *adapter) in iavf_free_queues() argument
1106 if (!adapter->vsi_res) in iavf_free_queues()
1108 adapter->num_active_queues = 0; in iavf_free_queues()
1109 kfree(adapter->tx_rings); in iavf_free_queues()
1110 adapter->tx_rings = NULL; in iavf_free_queues()
1111 kfree(adapter->rx_rings); in iavf_free_queues()
1112 adapter->rx_rings = NULL; in iavf_free_queues()
1117 * @adapter: board private structure to initialize
1123 static int iavf_alloc_queues(struct iavf_adapter *adapter) in iavf_alloc_queues() argument
1132 if (adapter->num_req_queues) in iavf_alloc_queues()
1133 num_active_queues = adapter->num_req_queues; in iavf_alloc_queues()
1134 else if ((adapter->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_ADQ) && in iavf_alloc_queues()
1135 adapter->num_tc) in iavf_alloc_queues()
1136 num_active_queues = adapter->ch_config.total_qps; in iavf_alloc_queues()
1139 adapter->vsi_res->num_queue_pairs, in iavf_alloc_queues()
1143 adapter->tx_rings = kcalloc(num_active_queues, in iavf_alloc_queues()
1145 if (!adapter->tx_rings) in iavf_alloc_queues()
1147 adapter->rx_rings = kcalloc(num_active_queues, in iavf_alloc_queues()
1149 if (!adapter->rx_rings) in iavf_alloc_queues()
1156 tx_ring = &adapter->tx_rings[i]; in iavf_alloc_queues()
1159 tx_ring->netdev = adapter->netdev; in iavf_alloc_queues()
1160 tx_ring->dev = &adapter->pdev->dev; in iavf_alloc_queues()
1161 tx_ring->count = adapter->tx_desc_count; in iavf_alloc_queues()
1163 if (adapter->flags & IAVF_FLAG_WB_ON_ITR_CAPABLE) in iavf_alloc_queues()
1166 rx_ring = &adapter->rx_rings[i]; in iavf_alloc_queues()
1168 rx_ring->netdev = adapter->netdev; in iavf_alloc_queues()
1169 rx_ring->dev = &adapter->pdev->dev; in iavf_alloc_queues()
1170 rx_ring->count = adapter->rx_desc_count; in iavf_alloc_queues()
1174 adapter->num_active_queues = num_active_queues; in iavf_alloc_queues()
1179 iavf_free_queues(adapter); in iavf_alloc_queues()
1185 * @adapter: board private structure to initialize
1190 static int iavf_set_interrupt_capability(struct iavf_adapter *adapter) in iavf_set_interrupt_capability() argument
1196 if (!adapter->vsi_res) { in iavf_set_interrupt_capability()
1200 pairs = adapter->num_active_queues; in iavf_set_interrupt_capability()
1208 (int)adapter->vf_res->max_vectors); in iavf_set_interrupt_capability()
1210 adapter->msix_entries = kcalloc(v_budget, in iavf_set_interrupt_capability()
1212 if (!adapter->msix_entries) { in iavf_set_interrupt_capability()
1218 adapter->msix_entries[vector].entry = vector; in iavf_set_interrupt_capability()
1220 err = iavf_acquire_msix_vectors(adapter, v_budget); in iavf_set_interrupt_capability()
1223 netif_set_real_num_rx_queues(adapter->netdev, pairs); in iavf_set_interrupt_capability()
1224 netif_set_real_num_tx_queues(adapter->netdev, pairs); in iavf_set_interrupt_capability()
1230 * @adapter: board private structure
1234 static int iavf_config_rss_aq(struct iavf_adapter *adapter) in iavf_config_rss_aq() argument
1237 (struct iavf_aqc_get_set_rss_key_data *)adapter->rss_key; in iavf_config_rss_aq()
1238 struct iavf_hw *hw = &adapter->hw; in iavf_config_rss_aq()
1241 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_config_rss_aq()
1243 dev_err(&adapter->pdev->dev, "Cannot configure RSS, command %d pending\n", in iavf_config_rss_aq()
1244 adapter->current_op); in iavf_config_rss_aq()
1248 ret = iavf_aq_set_rss_key(hw, adapter->vsi.id, rss_key); in iavf_config_rss_aq()
1250 dev_err(&adapter->pdev->dev, "Cannot set RSS key, err %s aq_err %s\n", in iavf_config_rss_aq()
1257 ret = iavf_aq_set_rss_lut(hw, adapter->vsi.id, false, in iavf_config_rss_aq()
1258 adapter->rss_lut, adapter->rss_lut_size); in iavf_config_rss_aq()
1260 dev_err(&adapter->pdev->dev, "Cannot set RSS lut, err %s aq_err %s\n", in iavf_config_rss_aq()
1271 * @adapter: board private structure
1275 static int iavf_config_rss_reg(struct iavf_adapter *adapter) in iavf_config_rss_reg() argument
1277 struct iavf_hw *hw = &adapter->hw; in iavf_config_rss_reg()
1281 dw = (u32 *)adapter->rss_key; in iavf_config_rss_reg()
1282 for (i = 0; i <= adapter->rss_key_size / 4; i++) in iavf_config_rss_reg()
1285 dw = (u32 *)adapter->rss_lut; in iavf_config_rss_reg()
1286 for (i = 0; i <= adapter->rss_lut_size / 4; i++) in iavf_config_rss_reg()
1296 * @adapter: board private structure
1300 int iavf_config_rss(struct iavf_adapter *adapter) in iavf_config_rss() argument
1303 if (RSS_PF(adapter)) { in iavf_config_rss()
1304 adapter->aq_required |= IAVF_FLAG_AQ_SET_RSS_LUT | in iavf_config_rss()
1307 } else if (RSS_AQ(adapter)) { in iavf_config_rss()
1308 return iavf_config_rss_aq(adapter); in iavf_config_rss()
1310 return iavf_config_rss_reg(adapter); in iavf_config_rss()
1316 * @adapter: board private structure
1318 static void iavf_fill_rss_lut(struct iavf_adapter *adapter) in iavf_fill_rss_lut() argument
1322 for (i = 0; i < adapter->rss_lut_size; i++) in iavf_fill_rss_lut()
1323 adapter->rss_lut[i] = i % adapter->num_active_queues; in iavf_fill_rss_lut()
1328 * @adapter: board private structure
1332 static int iavf_init_rss(struct iavf_adapter *adapter) in iavf_init_rss() argument
1334 struct iavf_hw *hw = &adapter->hw; in iavf_init_rss()
1337 if (!RSS_PF(adapter)) { in iavf_init_rss()
1339 if (adapter->vf_res->vf_cap_flags & in iavf_init_rss()
1341 adapter->hena = IAVF_DEFAULT_RSS_HENA_EXPANDED; in iavf_init_rss()
1343 adapter->hena = IAVF_DEFAULT_RSS_HENA; in iavf_init_rss()
1345 wr32(hw, IAVF_VFQF_HENA(0), (u32)adapter->hena); in iavf_init_rss()
1346 wr32(hw, IAVF_VFQF_HENA(1), (u32)(adapter->hena >> 32)); in iavf_init_rss()
1349 iavf_fill_rss_lut(adapter); in iavf_init_rss()
1350 netdev_rss_key_fill((void *)adapter->rss_key, adapter->rss_key_size); in iavf_init_rss()
1351 ret = iavf_config_rss(adapter); in iavf_init_rss()
1358 * @adapter: board private structure to initialize
1363 static int iavf_alloc_q_vectors(struct iavf_adapter *adapter) in iavf_alloc_q_vectors() argument
1368 num_q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_alloc_q_vectors()
1369 adapter->q_vectors = kcalloc(num_q_vectors, sizeof(*q_vector), in iavf_alloc_q_vectors()
1371 if (!adapter->q_vectors) in iavf_alloc_q_vectors()
1375 q_vector = &adapter->q_vectors[q_idx]; in iavf_alloc_q_vectors()
1376 q_vector->adapter = adapter; in iavf_alloc_q_vectors()
1377 q_vector->vsi = &adapter->vsi; in iavf_alloc_q_vectors()
1381 netif_napi_add(adapter->netdev, &q_vector->napi, in iavf_alloc_q_vectors()
1390 * @adapter: board private structure to initialize
1396 static void iavf_free_q_vectors(struct iavf_adapter *adapter) in iavf_free_q_vectors() argument
1401 if (!adapter->q_vectors) in iavf_free_q_vectors()
1404 num_q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_free_q_vectors()
1405 napi_vectors = adapter->num_active_queues; in iavf_free_q_vectors()
1408 struct iavf_q_vector *q_vector = &adapter->q_vectors[q_idx]; in iavf_free_q_vectors()
1413 kfree(adapter->q_vectors); in iavf_free_q_vectors()
1414 adapter->q_vectors = NULL; in iavf_free_q_vectors()
1419 * @adapter: board private structure
1422 void iavf_reset_interrupt_capability(struct iavf_adapter *adapter) in iavf_reset_interrupt_capability() argument
1424 if (!adapter->msix_entries) in iavf_reset_interrupt_capability()
1427 pci_disable_msix(adapter->pdev); in iavf_reset_interrupt_capability()
1428 kfree(adapter->msix_entries); in iavf_reset_interrupt_capability()
1429 adapter->msix_entries = NULL; in iavf_reset_interrupt_capability()
1434 * @adapter: board private structure to initialize
1437 int iavf_init_interrupt_scheme(struct iavf_adapter *adapter) in iavf_init_interrupt_scheme() argument
1441 err = iavf_alloc_queues(adapter); in iavf_init_interrupt_scheme()
1443 dev_err(&adapter->pdev->dev, in iavf_init_interrupt_scheme()
1449 err = iavf_set_interrupt_capability(adapter); in iavf_init_interrupt_scheme()
1452 dev_err(&adapter->pdev->dev, in iavf_init_interrupt_scheme()
1457 err = iavf_alloc_q_vectors(adapter); in iavf_init_interrupt_scheme()
1459 dev_err(&adapter->pdev->dev, in iavf_init_interrupt_scheme()
1469 if ((adapter->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_ADQ) && in iavf_init_interrupt_scheme()
1470 adapter->num_tc) in iavf_init_interrupt_scheme()
1471 dev_info(&adapter->pdev->dev, "ADq Enabled, %u TCs created", in iavf_init_interrupt_scheme()
1472 adapter->num_tc); in iavf_init_interrupt_scheme()
1474 dev_info(&adapter->pdev->dev, "Multiqueue %s: Queue pair count = %u", in iavf_init_interrupt_scheme()
1475 (adapter->num_active_queues > 1) ? "Enabled" : "Disabled", in iavf_init_interrupt_scheme()
1476 adapter->num_active_queues); in iavf_init_interrupt_scheme()
1480 iavf_reset_interrupt_capability(adapter); in iavf_init_interrupt_scheme()
1482 iavf_free_queues(adapter); in iavf_init_interrupt_scheme()
1489 * @adapter: board private structure
1491 static void iavf_free_rss(struct iavf_adapter *adapter) in iavf_free_rss() argument
1493 kfree(adapter->rss_key); in iavf_free_rss()
1494 adapter->rss_key = NULL; in iavf_free_rss()
1496 kfree(adapter->rss_lut); in iavf_free_rss()
1497 adapter->rss_lut = NULL; in iavf_free_rss()
1502 * @adapter: board private structure
1506 static int iavf_reinit_interrupt_scheme(struct iavf_adapter *adapter) in iavf_reinit_interrupt_scheme() argument
1508 struct net_device *netdev = adapter->netdev; in iavf_reinit_interrupt_scheme()
1512 iavf_free_traffic_irqs(adapter); in iavf_reinit_interrupt_scheme()
1513 iavf_free_misc_irq(adapter); in iavf_reinit_interrupt_scheme()
1514 iavf_reset_interrupt_capability(adapter); in iavf_reinit_interrupt_scheme()
1515 iavf_free_q_vectors(adapter); in iavf_reinit_interrupt_scheme()
1516 iavf_free_queues(adapter); in iavf_reinit_interrupt_scheme()
1518 err = iavf_init_interrupt_scheme(adapter); in iavf_reinit_interrupt_scheme()
1524 err = iavf_request_misc_irq(adapter); in iavf_reinit_interrupt_scheme()
1528 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_reinit_interrupt_scheme()
1530 iavf_map_rings_to_vectors(adapter); in iavf_reinit_interrupt_scheme()
1538 * @adapter: pointer to iavf adapter structure
1544 static int iavf_process_aq_command(struct iavf_adapter *adapter) in iavf_process_aq_command() argument
1546 if (adapter->aq_required & IAVF_FLAG_AQ_GET_CONFIG) in iavf_process_aq_command()
1547 return iavf_send_vf_config_msg(adapter); in iavf_process_aq_command()
1548 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_QUEUES) { in iavf_process_aq_command()
1549 iavf_disable_queues(adapter); in iavf_process_aq_command()
1553 if (adapter->aq_required & IAVF_FLAG_AQ_MAP_VECTORS) { in iavf_process_aq_command()
1554 iavf_map_queues(adapter); in iavf_process_aq_command()
1558 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_MAC_FILTER) { in iavf_process_aq_command()
1559 iavf_add_ether_addrs(adapter); in iavf_process_aq_command()
1563 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_VLAN_FILTER) { in iavf_process_aq_command()
1564 iavf_add_vlans(adapter); in iavf_process_aq_command()
1568 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_MAC_FILTER) { in iavf_process_aq_command()
1569 iavf_del_ether_addrs(adapter); in iavf_process_aq_command()
1573 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_VLAN_FILTER) { in iavf_process_aq_command()
1574 iavf_del_vlans(adapter); in iavf_process_aq_command()
1578 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_VLAN_STRIPPING) { in iavf_process_aq_command()
1579 iavf_enable_vlan_stripping(adapter); in iavf_process_aq_command()
1583 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_VLAN_STRIPPING) { in iavf_process_aq_command()
1584 iavf_disable_vlan_stripping(adapter); in iavf_process_aq_command()
1588 if (adapter->aq_required & IAVF_FLAG_AQ_CONFIGURE_QUEUES) { in iavf_process_aq_command()
1589 iavf_configure_queues(adapter); in iavf_process_aq_command()
1593 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_QUEUES) { in iavf_process_aq_command()
1594 iavf_enable_queues(adapter); in iavf_process_aq_command()
1598 if (adapter->aq_required & IAVF_FLAG_AQ_CONFIGURE_RSS) { in iavf_process_aq_command()
1603 adapter->aq_required &= ~IAVF_FLAG_AQ_CONFIGURE_RSS; in iavf_process_aq_command()
1606 if (adapter->aq_required & IAVF_FLAG_AQ_GET_HENA) { in iavf_process_aq_command()
1607 iavf_get_hena(adapter); in iavf_process_aq_command()
1610 if (adapter->aq_required & IAVF_FLAG_AQ_SET_HENA) { in iavf_process_aq_command()
1611 iavf_set_hena(adapter); in iavf_process_aq_command()
1614 if (adapter->aq_required & IAVF_FLAG_AQ_SET_RSS_KEY) { in iavf_process_aq_command()
1615 iavf_set_rss_key(adapter); in iavf_process_aq_command()
1618 if (adapter->aq_required & IAVF_FLAG_AQ_SET_RSS_LUT) { in iavf_process_aq_command()
1619 iavf_set_rss_lut(adapter); in iavf_process_aq_command()
1623 if (adapter->aq_required & IAVF_FLAG_AQ_REQUEST_PROMISC) { in iavf_process_aq_command()
1624 iavf_set_promiscuous(adapter, FLAG_VF_UNICAST_PROMISC | in iavf_process_aq_command()
1629 if (adapter->aq_required & IAVF_FLAG_AQ_REQUEST_ALLMULTI) { in iavf_process_aq_command()
1630 iavf_set_promiscuous(adapter, FLAG_VF_MULTICAST_PROMISC); in iavf_process_aq_command()
1634 if ((adapter->aq_required & IAVF_FLAG_AQ_RELEASE_PROMISC) && in iavf_process_aq_command()
1635 (adapter->aq_required & IAVF_FLAG_AQ_RELEASE_ALLMULTI)) { in iavf_process_aq_command()
1636 iavf_set_promiscuous(adapter, 0); in iavf_process_aq_command()
1640 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_CHANNELS) { in iavf_process_aq_command()
1641 iavf_enable_channels(adapter); in iavf_process_aq_command()
1645 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_CHANNELS) { in iavf_process_aq_command()
1646 iavf_disable_channels(adapter); in iavf_process_aq_command()
1649 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_CLOUD_FILTER) { in iavf_process_aq_command()
1650 iavf_add_cloud_filter(adapter); in iavf_process_aq_command()
1654 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_CLOUD_FILTER) { in iavf_process_aq_command()
1655 iavf_del_cloud_filter(adapter); in iavf_process_aq_command()
1658 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_CLOUD_FILTER) { in iavf_process_aq_command()
1659 iavf_del_cloud_filter(adapter); in iavf_process_aq_command()
1662 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_CLOUD_FILTER) { in iavf_process_aq_command()
1663 iavf_add_cloud_filter(adapter); in iavf_process_aq_command()
1666 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_FDIR_FILTER) { in iavf_process_aq_command()
1667 iavf_add_fdir_filter(adapter); in iavf_process_aq_command()
1670 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_FDIR_FILTER) { in iavf_process_aq_command()
1671 iavf_del_fdir_filter(adapter); in iavf_process_aq_command()
1674 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_ADV_RSS_CFG) { in iavf_process_aq_command()
1675 iavf_add_adv_rss_cfg(adapter); in iavf_process_aq_command()
1678 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_ADV_RSS_CFG) { in iavf_process_aq_command()
1679 iavf_del_adv_rss_cfg(adapter); in iavf_process_aq_command()
1687 * @adapter: board private structure
1693 static int iavf_startup(struct iavf_adapter *adapter) in iavf_startup() argument
1695 struct pci_dev *pdev = adapter->pdev; in iavf_startup()
1696 struct iavf_hw *hw = &adapter->hw; in iavf_startup()
1699 WARN_ON(adapter->state != __IAVF_STARTUP); in iavf_startup()
1702 adapter->flags &= ~IAVF_FLAG_PF_COMMS_FAILED; in iavf_startup()
1703 adapter->flags &= ~IAVF_FLAG_RESET_PENDING; in iavf_startup()
1726 err = iavf_send_api_ver(adapter); in iavf_startup()
1732 adapter->state = __IAVF_INIT_VERSION_CHECK; in iavf_startup()
1739 * @adapter: board private structure
1745 static int iavf_init_version_check(struct iavf_adapter *adapter) in iavf_init_version_check() argument
1747 struct pci_dev *pdev = adapter->pdev; in iavf_init_version_check()
1748 struct iavf_hw *hw = &adapter->hw; in iavf_init_version_check()
1751 WARN_ON(adapter->state != __IAVF_INIT_VERSION_CHECK); in iavf_init_version_check()
1756 adapter->state = __IAVF_STARTUP; in iavf_init_version_check()
1761 err = iavf_verify_api_ver(adapter); in iavf_init_version_check()
1764 err = iavf_send_api_ver(adapter); in iavf_init_version_check()
1767 adapter->pf_version.major, in iavf_init_version_check()
1768 adapter->pf_version.minor, in iavf_init_version_check()
1773 err = iavf_send_vf_config_msg(adapter); in iavf_init_version_check()
1779 adapter->state = __IAVF_INIT_GET_RESOURCES; in iavf_init_version_check()
1787 * @adapter: board private structure
1794 static int iavf_init_get_resources(struct iavf_adapter *adapter) in iavf_init_get_resources() argument
1796 struct net_device *netdev = adapter->netdev; in iavf_init_get_resources()
1797 struct pci_dev *pdev = adapter->pdev; in iavf_init_get_resources()
1798 struct iavf_hw *hw = &adapter->hw; in iavf_init_get_resources()
1801 WARN_ON(adapter->state != __IAVF_INIT_GET_RESOURCES); in iavf_init_get_resources()
1803 if (!adapter->vf_res) { in iavf_init_get_resources()
1804 adapter->vf_res = kzalloc(IAVF_VIRTCHNL_VF_RESOURCE_SIZE, in iavf_init_get_resources()
1806 if (!adapter->vf_res) { in iavf_init_get_resources()
1811 err = iavf_get_vf_config(adapter); in iavf_init_get_resources()
1813 err = iavf_send_vf_config_msg(adapter); in iavf_init_get_resources()
1829 err = iavf_process_config(adapter); in iavf_init_get_resources()
1832 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_init_get_resources()
1834 adapter->flags |= IAVF_FLAG_RX_CSUM_ENABLED; in iavf_init_get_resources()
1844 if (!is_valid_ether_addr(adapter->hw.mac.addr)) { in iavf_init_get_resources()
1846 adapter->hw.mac.addr); in iavf_init_get_resources()
1848 ether_addr_copy(adapter->hw.mac.addr, netdev->dev_addr); in iavf_init_get_resources()
1850 ether_addr_copy(netdev->dev_addr, adapter->hw.mac.addr); in iavf_init_get_resources()
1851 ether_addr_copy(netdev->perm_addr, adapter->hw.mac.addr); in iavf_init_get_resources()
1854 adapter->tx_desc_count = IAVF_DEFAULT_TXD; in iavf_init_get_resources()
1855 adapter->rx_desc_count = IAVF_DEFAULT_RXD; in iavf_init_get_resources()
1856 err = iavf_init_interrupt_scheme(adapter); in iavf_init_get_resources()
1859 iavf_map_rings_to_vectors(adapter); in iavf_init_get_resources()
1860 if (adapter->vf_res->vf_cap_flags & in iavf_init_get_resources()
1862 adapter->flags |= IAVF_FLAG_WB_ON_ITR_CAPABLE; in iavf_init_get_resources()
1864 err = iavf_request_misc_irq(adapter); in iavf_init_get_resources()
1869 adapter->link_up = false; in iavf_init_get_resources()
1875 if (!adapter->netdev_registered) { in iavf_init_get_resources()
1883 adapter->netdev_registered = true; in iavf_init_get_resources()
1886 if (CLIENT_ALLOWED(adapter)) { in iavf_init_get_resources()
1887 err = iavf_lan_add_device(adapter); in iavf_init_get_resources()
1892 dev_info(&pdev->dev, "MAC address: %pM\n", adapter->hw.mac.addr); in iavf_init_get_resources()
1896 adapter->state = __IAVF_DOWN; in iavf_init_get_resources()
1897 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_init_get_resources()
1900 iavf_misc_irq_enable(adapter); in iavf_init_get_resources()
1901 wake_up(&adapter->down_waitqueue); in iavf_init_get_resources()
1903 adapter->rss_key = kzalloc(adapter->rss_key_size, GFP_KERNEL); in iavf_init_get_resources()
1904 adapter->rss_lut = kzalloc(adapter->rss_lut_size, GFP_KERNEL); in iavf_init_get_resources()
1905 if (!adapter->rss_key || !adapter->rss_lut) { in iavf_init_get_resources()
1909 if (RSS_AQ(adapter)) in iavf_init_get_resources()
1910 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_RSS; in iavf_init_get_resources()
1912 iavf_init_rss(adapter); in iavf_init_get_resources()
1916 iavf_free_rss(adapter); in iavf_init_get_resources()
1918 iavf_free_misc_irq(adapter); in iavf_init_get_resources()
1920 iavf_reset_interrupt_capability(adapter); in iavf_init_get_resources()
1922 kfree(adapter->vf_res); in iavf_init_get_resources()
1923 adapter->vf_res = NULL; in iavf_init_get_resources()
1934 struct iavf_adapter *adapter = container_of(work, in iavf_watchdog_task() local
1937 struct iavf_hw *hw = &adapter->hw; in iavf_watchdog_task()
1940 if (!mutex_trylock(&adapter->crit_lock)) in iavf_watchdog_task()
1943 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) in iavf_watchdog_task()
1944 adapter->state = __IAVF_COMM_FAILED; in iavf_watchdog_task()
1946 switch (adapter->state) { in iavf_watchdog_task()
1953 dev_err(&adapter->pdev->dev, in iavf_watchdog_task()
1955 adapter->state = __IAVF_STARTUP; in iavf_watchdog_task()
1956 adapter->flags &= ~IAVF_FLAG_PF_COMMS_FAILED; in iavf_watchdog_task()
1957 queue_delayed_work(iavf_wq, &adapter->init_task, 10); in iavf_watchdog_task()
1958 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
1966 adapter->aq_required = 0; in iavf_watchdog_task()
1967 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_watchdog_task()
1969 &adapter->watchdog_task, in iavf_watchdog_task()
1973 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
1974 queue_delayed_work(iavf_wq, &adapter->watchdog_task, HZ * 2); in iavf_watchdog_task()
1980 if (adapter->current_op) { in iavf_watchdog_task()
1982 dev_dbg(&adapter->pdev->dev, in iavf_watchdog_task()
1984 iavf_send_api_ver(adapter); in iavf_watchdog_task()
1990 if (iavf_process_aq_command(adapter) && in iavf_watchdog_task()
1991 adapter->state == __IAVF_RUNNING) in iavf_watchdog_task()
1992 iavf_request_stats(adapter); in iavf_watchdog_task()
1996 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2005 adapter->flags |= IAVF_FLAG_RESET_PENDING; in iavf_watchdog_task()
2006 adapter->aq_required = 0; in iavf_watchdog_task()
2007 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_watchdog_task()
2008 dev_err(&adapter->pdev->dev, "Hardware reset detected\n"); in iavf_watchdog_task()
2009 queue_work(iavf_wq, &adapter->reset_task); in iavf_watchdog_task()
2013 schedule_delayed_work(&adapter->client_task, msecs_to_jiffies(5)); in iavf_watchdog_task()
2015 if (adapter->state == __IAVF_RUNNING || in iavf_watchdog_task()
2016 adapter->state == __IAVF_COMM_FAILED) in iavf_watchdog_task()
2017 iavf_detect_recover_hung(&adapter->vsi); in iavf_watchdog_task()
2018 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2020 if (adapter->aq_required) in iavf_watchdog_task()
2021 queue_delayed_work(iavf_wq, &adapter->watchdog_task, in iavf_watchdog_task()
2024 queue_delayed_work(iavf_wq, &adapter->watchdog_task, HZ * 2); in iavf_watchdog_task()
2025 queue_work(iavf_wq, &adapter->adminq_task); in iavf_watchdog_task()
2028 static void iavf_disable_vf(struct iavf_adapter *adapter) in iavf_disable_vf() argument
2034 adapter->flags |= IAVF_FLAG_PF_COMMS_FAILED; in iavf_disable_vf()
2040 if (adapter->state == __IAVF_RUNNING) { in iavf_disable_vf()
2041 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_disable_vf()
2042 netif_carrier_off(adapter->netdev); in iavf_disable_vf()
2043 netif_tx_disable(adapter->netdev); in iavf_disable_vf()
2044 adapter->link_up = false; in iavf_disable_vf()
2045 iavf_napi_disable_all(adapter); in iavf_disable_vf()
2046 iavf_irq_disable(adapter); in iavf_disable_vf()
2047 iavf_free_traffic_irqs(adapter); in iavf_disable_vf()
2048 iavf_free_all_tx_resources(adapter); in iavf_disable_vf()
2049 iavf_free_all_rx_resources(adapter); in iavf_disable_vf()
2052 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_disable_vf()
2055 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_disable_vf()
2060 list_for_each_entry_safe(fv, fvtmp, &adapter->vlan_filter_list, list) { in iavf_disable_vf()
2065 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_disable_vf()
2067 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_disable_vf()
2068 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, list) { in iavf_disable_vf()
2071 adapter->num_cloud_filters--; in iavf_disable_vf()
2073 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_disable_vf()
2075 iavf_free_misc_irq(adapter); in iavf_disable_vf()
2076 iavf_reset_interrupt_capability(adapter); in iavf_disable_vf()
2077 iavf_free_queues(adapter); in iavf_disable_vf()
2078 iavf_free_q_vectors(adapter); in iavf_disable_vf()
2079 memset(adapter->vf_res, 0, IAVF_VIRTCHNL_VF_RESOURCE_SIZE); in iavf_disable_vf()
2080 iavf_shutdown_adminq(&adapter->hw); in iavf_disable_vf()
2081 adapter->netdev->flags &= ~IFF_UP; in iavf_disable_vf()
2082 mutex_unlock(&adapter->crit_lock); in iavf_disable_vf()
2083 adapter->flags &= ~IAVF_FLAG_RESET_PENDING; in iavf_disable_vf()
2084 adapter->state = __IAVF_DOWN; in iavf_disable_vf()
2085 wake_up(&adapter->down_waitqueue); in iavf_disable_vf()
2086 dev_info(&adapter->pdev->dev, "Reset task did not complete, VF disabled\n"); in iavf_disable_vf()
2099 struct iavf_adapter *adapter = container_of(work, in iavf_reset_task() local
2102 struct virtchnl_vf_resource *vfres = adapter->vf_res; in iavf_reset_task()
2103 struct net_device *netdev = adapter->netdev; in iavf_reset_task()
2104 struct iavf_hw *hw = &adapter->hw; in iavf_reset_task()
2115 if (mutex_is_locked(&adapter->remove_lock)) in iavf_reset_task()
2118 if (iavf_lock_timeout(&adapter->crit_lock, 200)) { in iavf_reset_task()
2119 schedule_work(&adapter->reset_task); in iavf_reset_task()
2122 while (!mutex_trylock(&adapter->client_lock)) in iavf_reset_task()
2124 if (CLIENT_ENABLED(adapter)) { in iavf_reset_task()
2125 adapter->flags &= ~(IAVF_FLAG_CLIENT_NEEDS_OPEN | in iavf_reset_task()
2129 cancel_delayed_work_sync(&adapter->client_task); in iavf_reset_task()
2130 iavf_notify_client_close(&adapter->vsi, true); in iavf_reset_task()
2132 iavf_misc_irq_disable(adapter); in iavf_reset_task()
2133 if (adapter->flags & IAVF_FLAG_RESET_NEEDED) { in iavf_reset_task()
2134 adapter->flags &= ~IAVF_FLAG_RESET_NEEDED; in iavf_reset_task()
2140 iavf_request_reset(adapter); in iavf_reset_task()
2142 adapter->flags |= IAVF_FLAG_RESET_PENDING; in iavf_reset_task()
2153 dev_info(&adapter->pdev->dev, "Never saw reset\n"); in iavf_reset_task()
2168 pci_set_master(adapter->pdev); in iavf_reset_task()
2171 dev_err(&adapter->pdev->dev, "Reset never finished (%x)\n", in iavf_reset_task()
2173 iavf_disable_vf(adapter); in iavf_reset_task()
2174 mutex_unlock(&adapter->client_lock); in iavf_reset_task()
2183 running = ((adapter->state == __IAVF_RUNNING) || in iavf_reset_task()
2184 (adapter->state == __IAVF_RESETTING)); in iavf_reset_task()
2189 adapter->link_up = false; in iavf_reset_task()
2190 iavf_napi_disable_all(adapter); in iavf_reset_task()
2192 iavf_irq_disable(adapter); in iavf_reset_task()
2194 adapter->state = __IAVF_RESETTING; in iavf_reset_task()
2195 adapter->flags &= ~IAVF_FLAG_RESET_PENDING; in iavf_reset_task()
2200 iavf_free_all_rx_resources(adapter); in iavf_reset_task()
2201 iavf_free_all_tx_resources(adapter); in iavf_reset_task()
2203 adapter->flags |= IAVF_FLAG_QUEUES_DISABLED; in iavf_reset_task()
2206 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_reset_task()
2209 dev_info(&adapter->pdev->dev, "Failed to init adminq: %d\n", in iavf_reset_task()
2211 adapter->aq_required = 0; in iavf_reset_task()
2213 if (adapter->flags & IAVF_FLAG_REINIT_ITR_NEEDED) { in iavf_reset_task()
2214 err = iavf_reinit_interrupt_scheme(adapter); in iavf_reset_task()
2219 if (RSS_AQ(adapter)) { in iavf_reset_task()
2220 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_RSS; in iavf_reset_task()
2222 err = iavf_init_rss(adapter); in iavf_reset_task()
2227 adapter->aq_required |= IAVF_FLAG_AQ_GET_CONFIG; in iavf_reset_task()
2228 adapter->aq_required |= IAVF_FLAG_AQ_MAP_VECTORS; in iavf_reset_task()
2230 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_reset_task()
2236 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_reset_task()
2237 if (ether_addr_equal(f->macaddr, adapter->hw.mac.addr)) { in iavf_reset_task()
2243 list_for_each_entry(f, &adapter->mac_filter_list, list) { in iavf_reset_task()
2247 list_for_each_entry(vlf, &adapter->vlan_filter_list, list) { in iavf_reset_task()
2251 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_reset_task()
2254 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_reset_task()
2256 adapter->num_tc) { in iavf_reset_task()
2257 list_for_each_entry(cf, &adapter->cloud_filter_list, list) { in iavf_reset_task()
2261 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_reset_task()
2263 adapter->aq_required |= IAVF_FLAG_AQ_ADD_MAC_FILTER; in iavf_reset_task()
2264 adapter->aq_required |= IAVF_FLAG_AQ_ADD_VLAN_FILTER; in iavf_reset_task()
2265 adapter->aq_required |= IAVF_FLAG_AQ_ADD_CLOUD_FILTER; in iavf_reset_task()
2266 iavf_misc_irq_enable(adapter); in iavf_reset_task()
2268 mod_delayed_work(iavf_wq, &adapter->watchdog_task, 2); in iavf_reset_task()
2275 err = iavf_setup_all_tx_resources(adapter); in iavf_reset_task()
2280 err = iavf_setup_all_rx_resources(adapter); in iavf_reset_task()
2284 if (adapter->flags & IAVF_FLAG_REINIT_ITR_NEEDED) { in iavf_reset_task()
2285 err = iavf_request_traffic_irqs(adapter, netdev->name); in iavf_reset_task()
2289 adapter->flags &= ~IAVF_FLAG_REINIT_ITR_NEEDED; in iavf_reset_task()
2292 iavf_configure(adapter); in iavf_reset_task()
2294 iavf_up_complete(adapter); in iavf_reset_task()
2296 iavf_irq_enable(adapter, true); in iavf_reset_task()
2298 adapter->state = __IAVF_DOWN; in iavf_reset_task()
2299 wake_up(&adapter->down_waitqueue); in iavf_reset_task()
2301 mutex_unlock(&adapter->client_lock); in iavf_reset_task()
2302 mutex_unlock(&adapter->crit_lock); in iavf_reset_task()
2306 mutex_unlock(&adapter->client_lock); in iavf_reset_task()
2307 mutex_unlock(&adapter->crit_lock); in iavf_reset_task()
2308 dev_err(&adapter->pdev->dev, "failed to allocate resources during reinit\n"); in iavf_reset_task()
2318 struct iavf_adapter *adapter = in iavf_adminq_task() local
2320 struct iavf_hw *hw = &adapter->hw; in iavf_adminq_task()
2327 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) in iavf_adminq_task()
2335 if (iavf_lock_timeout(&adapter->crit_lock, 200)) in iavf_adminq_task()
2345 iavf_virtchnl_completion(adapter, v_op, v_ret, event.msg_buf, in iavf_adminq_task()
2350 mutex_unlock(&adapter->crit_lock); in iavf_adminq_task()
2352 if ((adapter->flags & in iavf_adminq_task()
2354 adapter->state == __IAVF_RESETTING) in iavf_adminq_task()
2363 dev_info(&adapter->pdev->dev, "ARQ VF Error detected\n"); in iavf_adminq_task()
2367 dev_info(&adapter->pdev->dev, "ARQ Overflow Error detected\n"); in iavf_adminq_task()
2371 dev_info(&adapter->pdev->dev, "ARQ Critical Error detected\n"); in iavf_adminq_task()
2380 dev_info(&adapter->pdev->dev, "ASQ VF Error detected\n"); in iavf_adminq_task()
2384 dev_info(&adapter->pdev->dev, "ASQ Overflow Error detected\n"); in iavf_adminq_task()
2388 dev_info(&adapter->pdev->dev, "ASQ Critical Error detected\n"); in iavf_adminq_task()
2398 iavf_misc_irq_enable(adapter); in iavf_adminq_task()
2410 struct iavf_adapter *adapter = in iavf_client_task() local
2417 if (!mutex_trylock(&adapter->client_lock)) in iavf_client_task()
2420 if (adapter->flags & IAVF_FLAG_SERVICE_CLIENT_REQUESTED) { in iavf_client_task()
2421 iavf_client_subtask(adapter); in iavf_client_task()
2422 adapter->flags &= ~IAVF_FLAG_SERVICE_CLIENT_REQUESTED; in iavf_client_task()
2425 if (adapter->flags & IAVF_FLAG_CLIENT_NEEDS_L2_PARAMS) { in iavf_client_task()
2426 iavf_notify_client_l2_params(&adapter->vsi); in iavf_client_task()
2427 adapter->flags &= ~IAVF_FLAG_CLIENT_NEEDS_L2_PARAMS; in iavf_client_task()
2430 if (adapter->flags & IAVF_FLAG_CLIENT_NEEDS_CLOSE) { in iavf_client_task()
2431 iavf_notify_client_close(&adapter->vsi, false); in iavf_client_task()
2432 adapter->flags &= ~IAVF_FLAG_CLIENT_NEEDS_CLOSE; in iavf_client_task()
2435 if (adapter->flags & IAVF_FLAG_CLIENT_NEEDS_OPEN) { in iavf_client_task()
2436 iavf_notify_client_open(&adapter->vsi); in iavf_client_task()
2437 adapter->flags &= ~IAVF_FLAG_CLIENT_NEEDS_OPEN; in iavf_client_task()
2440 mutex_unlock(&adapter->client_lock); in iavf_client_task()
2445 * @adapter: board private structure
2449 void iavf_free_all_tx_resources(struct iavf_adapter *adapter) in iavf_free_all_tx_resources() argument
2453 if (!adapter->tx_rings) in iavf_free_all_tx_resources()
2456 for (i = 0; i < adapter->num_active_queues; i++) in iavf_free_all_tx_resources()
2457 if (adapter->tx_rings[i].desc) in iavf_free_all_tx_resources()
2458 iavf_free_tx_resources(&adapter->tx_rings[i]); in iavf_free_all_tx_resources()
2463 * @adapter: board private structure
2471 static int iavf_setup_all_tx_resources(struct iavf_adapter *adapter) in iavf_setup_all_tx_resources() argument
2475 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_setup_all_tx_resources()
2476 adapter->tx_rings[i].count = adapter->tx_desc_count; in iavf_setup_all_tx_resources()
2477 err = iavf_setup_tx_descriptors(&adapter->tx_rings[i]); in iavf_setup_all_tx_resources()
2480 dev_err(&adapter->pdev->dev, in iavf_setup_all_tx_resources()
2490 * @adapter: board private structure
2498 static int iavf_setup_all_rx_resources(struct iavf_adapter *adapter) in iavf_setup_all_rx_resources() argument
2502 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_setup_all_rx_resources()
2503 adapter->rx_rings[i].count = adapter->rx_desc_count; in iavf_setup_all_rx_resources()
2504 err = iavf_setup_rx_descriptors(&adapter->rx_rings[i]); in iavf_setup_all_rx_resources()
2507 dev_err(&adapter->pdev->dev, in iavf_setup_all_rx_resources()
2516 * @adapter: board private structure
2520 void iavf_free_all_rx_resources(struct iavf_adapter *adapter) in iavf_free_all_rx_resources() argument
2524 if (!adapter->rx_rings) in iavf_free_all_rx_resources()
2527 for (i = 0; i < adapter->num_active_queues; i++) in iavf_free_all_rx_resources()
2528 if (adapter->rx_rings[i].desc) in iavf_free_all_rx_resources()
2529 iavf_free_rx_resources(&adapter->rx_rings[i]); in iavf_free_all_rx_resources()
2534 * @adapter: board private structure
2537 static int iavf_validate_tx_bandwidth(struct iavf_adapter *adapter, in iavf_validate_tx_bandwidth() argument
2542 if (ADV_LINK_SUPPORT(adapter)) { in iavf_validate_tx_bandwidth()
2543 if (adapter->link_speed_mbps < U32_MAX) { in iavf_validate_tx_bandwidth()
2544 speed = adapter->link_speed_mbps; in iavf_validate_tx_bandwidth()
2547 dev_err(&adapter->pdev->dev, "Unknown link speed\n"); in iavf_validate_tx_bandwidth()
2552 switch (adapter->link_speed) { in iavf_validate_tx_bandwidth()
2583 dev_err(&adapter->pdev->dev, in iavf_validate_tx_bandwidth()
2593 * @adapter: board private structure
2600 static int iavf_validate_ch_config(struct iavf_adapter *adapter, in iavf_validate_ch_config() argument
2617 dev_err(&adapter->pdev->dev, in iavf_validate_ch_config()
2630 ret = iavf_validate_tx_bandwidth(adapter, total_max_rate); in iavf_validate_ch_config()
2636 * @adapter: board private structure
2638 static void iavf_del_all_cloud_filters(struct iavf_adapter *adapter) in iavf_del_all_cloud_filters() argument
2642 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_del_all_cloud_filters()
2643 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, in iavf_del_all_cloud_filters()
2647 adapter->num_cloud_filters--; in iavf_del_all_cloud_filters()
2649 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_del_all_cloud_filters()
2666 struct iavf_adapter *adapter = netdev_priv(netdev); in __iavf_setup_tc() local
2667 struct virtchnl_vf_resource *vfres = adapter->vf_res; in __iavf_setup_tc()
2679 if (adapter->ch_config.state == __IAVF_TC_RUNNING) { in __iavf_setup_tc()
2682 adapter->num_tc = 0; in __iavf_setup_tc()
2685 iavf_del_all_cloud_filters(adapter); in __iavf_setup_tc()
2686 adapter->aq_required = IAVF_FLAG_AQ_DISABLE_CHANNELS; in __iavf_setup_tc()
2696 dev_err(&adapter->pdev->dev, "ADq not supported\n"); in __iavf_setup_tc()
2699 if (adapter->ch_config.state != __IAVF_TC_INVALID) { in __iavf_setup_tc()
2700 dev_err(&adapter->pdev->dev, "TC configuration already exists\n"); in __iavf_setup_tc()
2704 ret = iavf_validate_ch_config(adapter, mqprio_qopt); in __iavf_setup_tc()
2708 if (adapter->num_tc == num_tc) in __iavf_setup_tc()
2710 adapter->num_tc = num_tc; in __iavf_setup_tc()
2714 adapter->ch_config.ch_info[i].count = in __iavf_setup_tc()
2716 adapter->ch_config.ch_info[i].offset = in __iavf_setup_tc()
2723 adapter->ch_config.ch_info[i].max_tx_rate = in __iavf_setup_tc()
2726 adapter->ch_config.ch_info[i].count = 1; in __iavf_setup_tc()
2727 adapter->ch_config.ch_info[i].offset = 0; in __iavf_setup_tc()
2730 adapter->ch_config.total_qps = total_qps; in __iavf_setup_tc()
2733 adapter->aq_required |= IAVF_FLAG_AQ_ENABLE_CHANNELS; in __iavf_setup_tc()
2736 netdev_set_num_tc(adapter->netdev, num_tc); in __iavf_setup_tc()
2752 * @adapter: board private structure
2756 static int iavf_parse_cls_flower(struct iavf_adapter *adapter, in iavf_parse_cls_flower() argument
2779 dev_err(&adapter->pdev->dev, "Unsupported key used: 0x%x\n", in iavf_parse_cls_flower()
2812 dev_info(&adapter->pdev->dev, "Only TCP transport is supported\n"); in iavf_parse_cls_flower()
2827 dev_err(&adapter->pdev->dev, "Bad ether dest mask %pM\n", in iavf_parse_cls_flower()
2837 dev_err(&adapter->pdev->dev, "Bad ether src mask %pM\n", in iavf_parse_cls_flower()
2872 dev_err(&adapter->pdev->dev, "Bad vlan mask %u\n", in iavf_parse_cls_flower()
2896 dev_err(&adapter->pdev->dev, "Bad ip dst mask 0x%08x\n", in iavf_parse_cls_flower()
2906 dev_err(&adapter->pdev->dev, "Bad ip src mask 0x%08x\n", in iavf_parse_cls_flower()
2913 dev_info(&adapter->pdev->dev, "Tenant id not allowed for ip filter\n"); in iavf_parse_cls_flower()
2933 dev_err(&adapter->pdev->dev, "Bad ipv6 dst mask 0x%02x\n", in iavf_parse_cls_flower()
2943 dev_err(&adapter->pdev->dev, in iavf_parse_cls_flower()
2968 dev_err(&adapter->pdev->dev, "Bad src port mask %u\n", in iavf_parse_cls_flower()
2978 dev_err(&adapter->pdev->dev, "Bad dst port mask %u\n", in iavf_parse_cls_flower()
3000 * @adapter: board private structure
3004 static int iavf_handle_tclass(struct iavf_adapter *adapter, u32 tc, in iavf_handle_tclass() argument
3009 if (tc < adapter->num_tc) { in iavf_handle_tclass()
3011 dev_err(&adapter->pdev->dev, in iavf_handle_tclass()
3024 * @adapter: board private structure
3027 static int iavf_configure_clsflower(struct iavf_adapter *adapter, in iavf_configure_clsflower() argument
3030 int tc = tc_classid_to_hwtc(adapter->netdev, cls_flower->classid); in iavf_configure_clsflower()
3035 dev_err(&adapter->pdev->dev, "Invalid traffic class\n"); in iavf_configure_clsflower()
3043 while (!mutex_trylock(&adapter->crit_lock)) { in iavf_configure_clsflower()
3055 err = iavf_parse_cls_flower(adapter, cls_flower, filter); in iavf_configure_clsflower()
3059 err = iavf_handle_tclass(adapter, tc, filter); in iavf_configure_clsflower()
3064 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_configure_clsflower()
3065 list_add_tail(&filter->list, &adapter->cloud_filter_list); in iavf_configure_clsflower()
3066 adapter->num_cloud_filters++; in iavf_configure_clsflower()
3068 adapter->aq_required |= IAVF_FLAG_AQ_ADD_CLOUD_FILTER; in iavf_configure_clsflower()
3069 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_configure_clsflower()
3074 mutex_unlock(&adapter->crit_lock); in iavf_configure_clsflower()
3079 * @adapter: Board private structure
3085 static struct iavf_cloud_filter *iavf_find_cf(struct iavf_adapter *adapter, in iavf_find_cf() argument
3093 list_for_each_entry(filter, &adapter->cloud_filter_list, list) { in iavf_find_cf()
3102 * @adapter: board private structure
3105 static int iavf_delete_clsflower(struct iavf_adapter *adapter, in iavf_delete_clsflower() argument
3111 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_delete_clsflower()
3112 filter = iavf_find_cf(adapter, &cls_flower->cookie); in iavf_delete_clsflower()
3115 adapter->aq_required |= IAVF_FLAG_AQ_DEL_CLOUD_FILTER; in iavf_delete_clsflower()
3119 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_delete_clsflower()
3126 * @adapter: board private structure
3129 static int iavf_setup_tc_cls_flower(struct iavf_adapter *adapter, in iavf_setup_tc_cls_flower() argument
3134 return iavf_configure_clsflower(adapter, cls_flower); in iavf_setup_tc_cls_flower()
3136 return iavf_delete_clsflower(adapter, cls_flower); in iavf_setup_tc_cls_flower()
3155 struct iavf_adapter *adapter = cb_priv; in iavf_setup_tc_block_cb() local
3157 if (!tc_cls_can_offload_and_chain0(adapter->netdev, type_data)) in iavf_setup_tc_block_cb()
3184 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_setup_tc() local
3193 adapter, adapter, true); in iavf_setup_tc()
3213 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_open() local
3216 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) { in iavf_open()
3217 dev_err(&adapter->pdev->dev, "Unable to open device due to PF driver failure.\n"); in iavf_open()
3221 while (!mutex_trylock(&adapter->crit_lock)) in iavf_open()
3224 if (adapter->state != __IAVF_DOWN) { in iavf_open()
3230 err = iavf_setup_all_tx_resources(adapter); in iavf_open()
3235 err = iavf_setup_all_rx_resources(adapter); in iavf_open()
3240 err = iavf_request_traffic_irqs(adapter, netdev->name); in iavf_open()
3244 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_open()
3246 iavf_add_filter(adapter, adapter->hw.mac.addr); in iavf_open()
3248 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_open()
3250 iavf_configure(adapter); in iavf_open()
3252 iavf_up_complete(adapter); in iavf_open()
3254 iavf_irq_enable(adapter, true); in iavf_open()
3256 mutex_unlock(&adapter->crit_lock); in iavf_open()
3261 iavf_down(adapter); in iavf_open()
3262 iavf_free_traffic_irqs(adapter); in iavf_open()
3264 iavf_free_all_rx_resources(adapter); in iavf_open()
3266 iavf_free_all_tx_resources(adapter); in iavf_open()
3268 mutex_unlock(&adapter->crit_lock); in iavf_open()
3286 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_close() local
3289 if (adapter->state <= __IAVF_DOWN_PENDING) in iavf_close()
3292 while (!mutex_trylock(&adapter->crit_lock)) in iavf_close()
3295 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_close()
3296 if (CLIENT_ENABLED(adapter)) in iavf_close()
3297 adapter->flags |= IAVF_FLAG_CLIENT_NEEDS_CLOSE; in iavf_close()
3299 iavf_down(adapter); in iavf_close()
3300 adapter->state = __IAVF_DOWN_PENDING; in iavf_close()
3301 iavf_free_traffic_irqs(adapter); in iavf_close()
3303 mutex_unlock(&adapter->crit_lock); in iavf_close()
3316 status = wait_event_timeout(adapter->down_waitqueue, in iavf_close()
3317 adapter->state == __IAVF_DOWN, in iavf_close()
3333 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_change_mtu() local
3336 if (CLIENT_ENABLED(adapter)) { in iavf_change_mtu()
3337 iavf_notify_client_l2_params(&adapter->vsi); in iavf_change_mtu()
3338 adapter->flags |= IAVF_FLAG_SERVICE_CLIENT_REQUESTED; in iavf_change_mtu()
3340 adapter->flags |= IAVF_FLAG_RESET_NEEDED; in iavf_change_mtu()
3341 queue_work(iavf_wq, &adapter->reset_task); in iavf_change_mtu()
3355 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_set_features() local
3357 /* Don't allow changing VLAN_RX flag when adapter is not capable in iavf_set_features()
3360 if (!VLAN_ALLOWED(adapter)) { in iavf_set_features()
3365 adapter->aq_required |= in iavf_set_features()
3368 adapter->aq_required |= in iavf_set_features()
3443 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_fix_features() local
3445 if (!(adapter->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN)) in iavf_fix_features()
3494 * @adapter: board private structure
3499 int iavf_process_config(struct iavf_adapter *adapter) in iavf_process_config() argument
3501 struct virtchnl_vf_resource *vfres = adapter->vf_res; in iavf_process_config()
3502 int i, num_req_queues = adapter->num_req_queues; in iavf_process_config()
3503 struct net_device *netdev = adapter->netdev; in iavf_process_config()
3504 struct iavf_vsi *vsi = &adapter->vsi; in iavf_process_config()
3511 adapter->vsi_res = &vfres->vsi_res[i]; in iavf_process_config()
3513 if (!adapter->vsi_res) { in iavf_process_config()
3514 dev_err(&adapter->pdev->dev, "No LAN VSI found\n"); in iavf_process_config()
3519 num_req_queues > adapter->vsi_res->num_queue_pairs) { in iavf_process_config()
3524 dev_err(&adapter->pdev->dev, in iavf_process_config()
3527 adapter->vsi_res->num_queue_pairs); in iavf_process_config()
3528 adapter->flags |= IAVF_FLAG_REINIT_ITR_NEEDED; in iavf_process_config()
3529 adapter->num_req_queues = adapter->vsi_res->num_queue_pairs; in iavf_process_config()
3530 iavf_schedule_reset(adapter); in iavf_process_config()
3533 adapter->num_req_queues = 0; in iavf_process_config()
3615 adapter->vsi.id = adapter->vsi_res->vsi_id; in iavf_process_config()
3617 adapter->vsi.back = adapter; in iavf_process_config()
3618 adapter->vsi.base_vector = 1; in iavf_process_config()
3619 adapter->vsi.work_limit = IAVF_DEFAULT_IRQ_WORK; in iavf_process_config()
3620 vsi->netdev = adapter->netdev; in iavf_process_config()
3621 vsi->qs_handle = adapter->vsi_res->qset_handle; in iavf_process_config()
3623 adapter->rss_key_size = vfres->rss_key_size; in iavf_process_config()
3624 adapter->rss_lut_size = vfres->rss_lut_size; in iavf_process_config()
3626 adapter->rss_key_size = IAVF_HKEY_ARRAY_SIZE; in iavf_process_config()
3627 adapter->rss_lut_size = IAVF_HLUT_ARRAY_SIZE; in iavf_process_config()
3647 struct iavf_adapter *adapter = container_of(work, in iavf_init_task() local
3650 struct iavf_hw *hw = &adapter->hw; in iavf_init_task()
3652 if (iavf_lock_timeout(&adapter->crit_lock, 5000)) { in iavf_init_task()
3653 dev_warn(&adapter->pdev->dev, "failed to acquire crit_lock in %s\n", __FUNCTION__); in iavf_init_task()
3656 switch (adapter->state) { in iavf_init_task()
3658 if (iavf_startup(adapter) < 0) in iavf_init_task()
3662 if (iavf_init_version_check(adapter) < 0) in iavf_init_task()
3666 if (iavf_init_get_resources(adapter) < 0) in iavf_init_task()
3673 queue_delayed_work(iavf_wq, &adapter->init_task, in iavf_init_task()
3677 if (++adapter->aq_wait_count > IAVF_AQ_MAX_ERR) { in iavf_init_task()
3678 dev_err(&adapter->pdev->dev, in iavf_init_task()
3680 adapter->flags |= IAVF_FLAG_PF_COMMS_FAILED; in iavf_init_task()
3682 adapter->state = __IAVF_STARTUP; in iavf_init_task()
3683 queue_delayed_work(iavf_wq, &adapter->init_task, HZ * 5); in iavf_init_task()
3686 queue_delayed_work(iavf_wq, &adapter->init_task, HZ); in iavf_init_task()
3688 mutex_unlock(&adapter->crit_lock); in iavf_init_task()
3698 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_shutdown() local
3705 if (iavf_lock_timeout(&adapter->crit_lock, 5000)) in iavf_shutdown()
3706 dev_warn(&adapter->pdev->dev, "failed to acquire crit_lock in %s\n", __FUNCTION__); in iavf_shutdown()
3708 adapter->state = __IAVF_REMOVE; in iavf_shutdown()
3709 adapter->aq_required = 0; in iavf_shutdown()
3710 mutex_unlock(&adapter->crit_lock); in iavf_shutdown()
3726 * iavf_probe initializes an adapter identified by a pci_dev structure.
3727 * The OS initialization, configuring of the adapter private structure,
3733 struct iavf_adapter *adapter = NULL; in iavf_probe() local
3772 adapter = netdev_priv(netdev); in iavf_probe()
3774 adapter->netdev = netdev; in iavf_probe()
3775 adapter->pdev = pdev; in iavf_probe()
3777 hw = &adapter->hw; in iavf_probe()
3778 hw->back = adapter; in iavf_probe()
3780 adapter->msg_enable = BIT(DEFAULT_DEBUG_LEVEL_SHIFT) - 1; in iavf_probe()
3781 adapter->state = __IAVF_STARTUP; in iavf_probe()
3783 /* Call save state here because it relies on the adapter struct. */ in iavf_probe()
3804 mutex_init(&adapter->crit_lock); in iavf_probe()
3805 mutex_init(&adapter->client_lock); in iavf_probe()
3806 mutex_init(&adapter->remove_lock); in iavf_probe()
3810 spin_lock_init(&adapter->mac_vlan_list_lock); in iavf_probe()
3811 spin_lock_init(&adapter->cloud_filter_list_lock); in iavf_probe()
3812 spin_lock_init(&adapter->fdir_fltr_lock); in iavf_probe()
3813 spin_lock_init(&adapter->adv_rss_lock); in iavf_probe()
3815 INIT_LIST_HEAD(&adapter->mac_filter_list); in iavf_probe()
3816 INIT_LIST_HEAD(&adapter->vlan_filter_list); in iavf_probe()
3817 INIT_LIST_HEAD(&adapter->cloud_filter_list); in iavf_probe()
3818 INIT_LIST_HEAD(&adapter->fdir_list_head); in iavf_probe()
3819 INIT_LIST_HEAD(&adapter->adv_rss_list_head); in iavf_probe()
3821 INIT_WORK(&adapter->reset_task, iavf_reset_task); in iavf_probe()
3822 INIT_WORK(&adapter->adminq_task, iavf_adminq_task); in iavf_probe()
3823 INIT_DELAYED_WORK(&adapter->watchdog_task, iavf_watchdog_task); in iavf_probe()
3824 INIT_DELAYED_WORK(&adapter->client_task, iavf_client_task); in iavf_probe()
3825 INIT_DELAYED_WORK(&adapter->init_task, iavf_init_task); in iavf_probe()
3826 queue_delayed_work(iavf_wq, &adapter->init_task, in iavf_probe()
3830 init_waitqueue_head(&adapter->down_waitqueue); in iavf_probe()
3854 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_suspend() local
3858 while (!mutex_trylock(&adapter->crit_lock)) in iavf_suspend()
3863 iavf_down(adapter); in iavf_suspend()
3866 iavf_free_misc_irq(adapter); in iavf_suspend()
3867 iavf_reset_interrupt_capability(adapter); in iavf_suspend()
3869 mutex_unlock(&adapter->crit_lock); in iavf_suspend()
3884 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_resume() local
3890 err = iavf_set_interrupt_capability(adapter); in iavf_resume()
3896 err = iavf_request_misc_irq(adapter); in iavf_resume()
3903 queue_work(iavf_wq, &adapter->reset_task); in iavf_resume()
3922 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_remove() local
3928 struct iavf_hw *hw = &adapter->hw; in iavf_remove()
3931 mutex_lock(&adapter->remove_lock); in iavf_remove()
3932 cancel_delayed_work_sync(&adapter->init_task); in iavf_remove()
3933 cancel_work_sync(&adapter->reset_task); in iavf_remove()
3934 cancel_delayed_work_sync(&adapter->client_task); in iavf_remove()
3935 if (adapter->netdev_registered) { in iavf_remove()
3937 adapter->netdev_registered = false; in iavf_remove()
3939 if (CLIENT_ALLOWED(adapter)) { in iavf_remove()
3940 err = iavf_lan_del_device(adapter); in iavf_remove()
3946 iavf_request_reset(adapter); in iavf_remove()
3950 iavf_request_reset(adapter); in iavf_remove()
3953 if (iavf_lock_timeout(&adapter->crit_lock, 5000)) in iavf_remove()
3954 dev_warn(&adapter->pdev->dev, "failed to acquire crit_lock in %s\n", __FUNCTION__); in iavf_remove()
3957 adapter->state = __IAVF_REMOVE; in iavf_remove()
3958 adapter->aq_required = 0; in iavf_remove()
3959 adapter->flags &= ~IAVF_FLAG_REINIT_ITR_NEEDED; in iavf_remove()
3960 iavf_free_all_tx_resources(adapter); in iavf_remove()
3961 iavf_free_all_rx_resources(adapter); in iavf_remove()
3962 iavf_misc_irq_disable(adapter); in iavf_remove()
3963 iavf_free_misc_irq(adapter); in iavf_remove()
3964 iavf_reset_interrupt_capability(adapter); in iavf_remove()
3965 iavf_free_q_vectors(adapter); in iavf_remove()
3967 cancel_delayed_work_sync(&adapter->watchdog_task); in iavf_remove()
3969 cancel_work_sync(&adapter->adminq_task); in iavf_remove()
3971 iavf_free_rss(adapter); in iavf_remove()
3979 mutex_destroy(&adapter->client_lock); in iavf_remove()
3980 mutex_unlock(&adapter->crit_lock); in iavf_remove()
3981 mutex_destroy(&adapter->crit_lock); in iavf_remove()
3982 mutex_unlock(&adapter->remove_lock); in iavf_remove()
3983 mutex_destroy(&adapter->remove_lock); in iavf_remove()
3987 iavf_free_queues(adapter); in iavf_remove()
3988 kfree(adapter->vf_res); in iavf_remove()
3989 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_remove()
3993 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_remove()
3997 list_for_each_entry_safe(vlf, vlftmp, &adapter->vlan_filter_list, in iavf_remove()
4003 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_remove()
4005 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_remove()
4006 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, list) { in iavf_remove()
4010 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_remove()
4012 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_remove()
4013 list_for_each_entry_safe(fdir, fdirtmp, &adapter->fdir_list_head, list) { in iavf_remove()
4017 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_remove()
4019 spin_lock_bh(&adapter->adv_rss_lock); in iavf_remove()
4020 list_for_each_entry_safe(rss, rsstmp, &adapter->adv_rss_list_head, in iavf_remove()
4025 spin_unlock_bh(&adapter->adv_rss_lock); in iavf_remove()