Lines Matching full:adapter

15 static int iavf_setup_all_tx_resources(struct iavf_adapter *adapter);
16 static int iavf_setup_all_rx_resources(struct iavf_adapter *adapter);
18 static void iavf_init_get_resources(struct iavf_adapter *adapter);
163 * iavf_pdev_to_adapter - go from pci_dev to adapter
173 * @adapter: board private structure
175 static bool iavf_is_reset_in_progress(struct iavf_adapter *adapter) in iavf_is_reset_in_progress() argument
177 if (adapter->state == __IAVF_RESETTING || in iavf_is_reset_in_progress()
178 adapter->flags & (IAVF_FLAG_RESET_PENDING | in iavf_is_reset_in_progress()
187 * @adapter: board private structure
191 int iavf_wait_for_reset(struct iavf_adapter *adapter) in iavf_wait_for_reset() argument
193 int ret = wait_event_interruptible_timeout(adapter->reset_waitqueue, in iavf_wait_for_reset()
194 !iavf_is_reset_in_progress(adapter), in iavf_wait_for_reset()
221 struct iavf_adapter *adapter = (struct iavf_adapter *)hw->back; in iavf_allocate_dma_mem_d() local
227 mem->va = dma_alloc_coherent(&adapter->pdev->dev, mem->size, in iavf_allocate_dma_mem_d()
242 struct iavf_adapter *adapter = (struct iavf_adapter *)hw->back; in iavf_free_dma_mem() local
246 dma_free_coherent(&adapter->pdev->dev, mem->size, in iavf_free_dma_mem()
284 * @adapter: board private structure
287 void iavf_schedule_reset(struct iavf_adapter *adapter, u64 flags) in iavf_schedule_reset() argument
289 if (!test_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section) && in iavf_schedule_reset()
290 !(adapter->flags & in iavf_schedule_reset()
292 adapter->flags |= flags; in iavf_schedule_reset()
293 queue_work(adapter->wq, &adapter->reset_task); in iavf_schedule_reset()
299 * @adapter: board private structure
302 void iavf_schedule_aq_request(struct iavf_adapter *adapter, u64 flags) in iavf_schedule_aq_request() argument
304 adapter->aq_required |= flags; in iavf_schedule_aq_request()
305 mod_delayed_work(adapter->wq, &adapter->watchdog_task, 0); in iavf_schedule_aq_request()
315 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_tx_timeout() local
317 adapter->tx_timeout_count++; in iavf_tx_timeout()
318 iavf_schedule_reset(adapter, IAVF_FLAG_RESET_NEEDED); in iavf_tx_timeout()
323 * @adapter: board private structure
325 static void iavf_misc_irq_disable(struct iavf_adapter *adapter) in iavf_misc_irq_disable() argument
327 struct iavf_hw *hw = &adapter->hw; in iavf_misc_irq_disable()
329 if (!adapter->msix_entries) in iavf_misc_irq_disable()
336 synchronize_irq(adapter->msix_entries[0].vector); in iavf_misc_irq_disable()
341 * @adapter: board private structure
343 static void iavf_misc_irq_enable(struct iavf_adapter *adapter) in iavf_misc_irq_enable() argument
345 struct iavf_hw *hw = &adapter->hw; in iavf_misc_irq_enable()
356 * @adapter: board private structure
358 static void iavf_irq_disable(struct iavf_adapter *adapter) in iavf_irq_disable() argument
361 struct iavf_hw *hw = &adapter->hw; in iavf_irq_disable()
363 if (!adapter->msix_entries) in iavf_irq_disable()
366 for (i = 1; i < adapter->num_msix_vectors; i++) { in iavf_irq_disable()
368 synchronize_irq(adapter->msix_entries[i].vector); in iavf_irq_disable()
375 * @adapter: board private structure
377 static void iavf_irq_enable_queues(struct iavf_adapter *adapter) in iavf_irq_enable_queues() argument
379 struct iavf_hw *hw = &adapter->hw; in iavf_irq_enable_queues()
382 for (i = 1; i < adapter->num_msix_vectors; i++) { in iavf_irq_enable_queues()
391 * @adapter: board private structure
394 void iavf_irq_enable(struct iavf_adapter *adapter, bool flush) in iavf_irq_enable() argument
396 struct iavf_hw *hw = &adapter->hw; in iavf_irq_enable()
398 iavf_misc_irq_enable(adapter); in iavf_irq_enable()
399 iavf_irq_enable_queues(adapter); in iavf_irq_enable()
413 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_msix_aq() local
414 struct iavf_hw *hw = &adapter->hw; in iavf_msix_aq()
420 if (adapter->state != __IAVF_REMOVE) in iavf_msix_aq()
422 queue_work(adapter->wq, &adapter->adminq_task); in iavf_msix_aq()
446 * @adapter: board private structure
451 iavf_map_vector_to_rxq(struct iavf_adapter *adapter, int v_idx, int r_idx) in iavf_map_vector_to_rxq() argument
453 struct iavf_q_vector *q_vector = &adapter->q_vectors[v_idx]; in iavf_map_vector_to_rxq()
454 struct iavf_ring *rx_ring = &adapter->rx_rings[r_idx]; in iavf_map_vector_to_rxq()
455 struct iavf_hw *hw = &adapter->hw; in iavf_map_vector_to_rxq()
459 rx_ring->vsi = &adapter->vsi; in iavf_map_vector_to_rxq()
472 * @adapter: board private structure
477 iavf_map_vector_to_txq(struct iavf_adapter *adapter, int v_idx, int t_idx) in iavf_map_vector_to_txq() argument
479 struct iavf_q_vector *q_vector = &adapter->q_vectors[v_idx]; in iavf_map_vector_to_txq()
480 struct iavf_ring *tx_ring = &adapter->tx_rings[t_idx]; in iavf_map_vector_to_txq()
481 struct iavf_hw *hw = &adapter->hw; in iavf_map_vector_to_txq()
485 tx_ring->vsi = &adapter->vsi; in iavf_map_vector_to_txq()
498 * @adapter: board private structure to initialize
506 static void iavf_map_rings_to_vectors(struct iavf_adapter *adapter) in iavf_map_rings_to_vectors() argument
508 int rings_remaining = adapter->num_active_queues; in iavf_map_rings_to_vectors()
512 q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_map_rings_to_vectors()
515 iavf_map_vector_to_rxq(adapter, vidx, ridx); in iavf_map_rings_to_vectors()
516 iavf_map_vector_to_txq(adapter, vidx, ridx); in iavf_map_rings_to_vectors()
525 adapter->aq_required |= IAVF_FLAG_AQ_MAP_VECTORS; in iavf_map_rings_to_vectors()
557 * @adapter: board private structure
564 iavf_request_traffic_irqs(struct iavf_adapter *adapter, char *basename) in iavf_request_traffic_irqs() argument
571 iavf_irq_disable(adapter); in iavf_request_traffic_irqs()
573 q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_request_traffic_irqs()
576 struct iavf_q_vector *q_vector = &adapter->q_vectors[vector]; in iavf_request_traffic_irqs()
578 irq_num = adapter->msix_entries[vector + NONQ_VECS].vector; in iavf_request_traffic_irqs()
600 dev_info(&adapter->pdev->dev, in iavf_request_traffic_irqs()
622 irq_num = adapter->msix_entries[vector + NONQ_VECS].vector; in iavf_request_traffic_irqs()
625 free_irq(irq_num, &adapter->q_vectors[vector]); in iavf_request_traffic_irqs()
632 * @adapter: board private structure
638 static int iavf_request_misc_irq(struct iavf_adapter *adapter) in iavf_request_misc_irq() argument
640 struct net_device *netdev = adapter->netdev; in iavf_request_misc_irq()
643 snprintf(adapter->misc_vector_name, in iavf_request_misc_irq()
644 sizeof(adapter->misc_vector_name) - 1, "iavf-%s:mbx", in iavf_request_misc_irq()
645 dev_name(&adapter->pdev->dev)); in iavf_request_misc_irq()
646 err = request_irq(adapter->msix_entries[0].vector, in iavf_request_misc_irq()
648 adapter->misc_vector_name, netdev); in iavf_request_misc_irq()
650 dev_err(&adapter->pdev->dev, in iavf_request_misc_irq()
652 adapter->misc_vector_name, err); in iavf_request_misc_irq()
653 free_irq(adapter->msix_entries[0].vector, netdev); in iavf_request_misc_irq()
660 * @adapter: board private structure
664 static void iavf_free_traffic_irqs(struct iavf_adapter *adapter) in iavf_free_traffic_irqs() argument
668 if (!adapter->msix_entries) in iavf_free_traffic_irqs()
671 q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_free_traffic_irqs()
674 irq_num = adapter->msix_entries[vector + NONQ_VECS].vector; in iavf_free_traffic_irqs()
677 free_irq(irq_num, &adapter->q_vectors[vector]); in iavf_free_traffic_irqs()
683 * @adapter: board private structure
687 static void iavf_free_misc_irq(struct iavf_adapter *adapter) in iavf_free_misc_irq() argument
689 struct net_device *netdev = adapter->netdev; in iavf_free_misc_irq()
691 if (!adapter->msix_entries) in iavf_free_misc_irq()
694 free_irq(adapter->msix_entries[0].vector, netdev); in iavf_free_misc_irq()
699 * @adapter: board private structure
703 static void iavf_configure_tx(struct iavf_adapter *adapter) in iavf_configure_tx() argument
705 struct iavf_hw *hw = &adapter->hw; in iavf_configure_tx()
708 for (i = 0; i < adapter->num_active_queues; i++) in iavf_configure_tx()
709 adapter->tx_rings[i].tail = hw->hw_addr + IAVF_QTX_TAIL1(i); in iavf_configure_tx()
714 * @adapter: board private structure
718 static void iavf_configure_rx(struct iavf_adapter *adapter) in iavf_configure_rx() argument
720 struct iavf_hw *hw = &adapter->hw; in iavf_configure_rx()
722 for (u32 i = 0; i < adapter->num_active_queues; i++) in iavf_configure_rx()
723 adapter->rx_rings[i].tail = hw->hw_addr + IAVF_QRX_TAIL1(i); in iavf_configure_rx()
728 * @adapter: board private structure
735 iavf_vlan_filter *iavf_find_vlan(struct iavf_adapter *adapter, in iavf_find_vlan() argument
740 list_for_each_entry(f, &adapter->vlan_filter_list, list) { in iavf_find_vlan()
751 * @adapter: board private structure
757 iavf_vlan_filter *iavf_add_vlan(struct iavf_adapter *adapter, in iavf_add_vlan() argument
762 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_add_vlan()
764 f = iavf_find_vlan(adapter, vlan); in iavf_add_vlan()
772 list_add_tail(&f->list, &adapter->vlan_filter_list); in iavf_add_vlan()
774 adapter->num_vlan_filters++; in iavf_add_vlan()
775 iavf_schedule_aq_request(adapter, IAVF_FLAG_AQ_ADD_VLAN_FILTER); in iavf_add_vlan()
784 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_add_vlan()
790 * @adapter: board private structure
793 static void iavf_del_vlan(struct iavf_adapter *adapter, struct iavf_vlan vlan) in iavf_del_vlan() argument
797 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_del_vlan()
799 f = iavf_find_vlan(adapter, vlan); in iavf_del_vlan()
807 adapter->num_vlan_filters--; in iavf_del_vlan()
810 iavf_schedule_aq_request(adapter, in iavf_del_vlan()
815 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_del_vlan()
820 * @adapter: board private structure
824 static void iavf_restore_filters(struct iavf_adapter *adapter) in iavf_restore_filters() argument
829 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_restore_filters()
831 list_for_each_entry(f, &adapter->vlan_filter_list, list) { in iavf_restore_filters()
836 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_restore_filters()
837 adapter->aq_required |= IAVF_FLAG_AQ_ADD_VLAN_FILTER; in iavf_restore_filters()
842 * @adapter: board private structure
844 u16 iavf_get_num_vlans_added(struct iavf_adapter *adapter) in iavf_get_num_vlans_added() argument
846 return adapter->num_vlan_filters; in iavf_get_num_vlans_added()
851 * @adapter: board private structure
857 static u16 iavf_get_max_vlans_allowed(struct iavf_adapter *adapter) in iavf_get_max_vlans_allowed() argument
862 if (VLAN_ALLOWED(adapter)) in iavf_get_max_vlans_allowed()
864 else if (VLAN_V2_ALLOWED(adapter)) in iavf_get_max_vlans_allowed()
865 return adapter->vlan_v2_caps.filtering.max_filters; in iavf_get_max_vlans_allowed()
872 * @adapter: board private structure
874 static bool iavf_max_vlans_added(struct iavf_adapter *adapter) in iavf_max_vlans_added() argument
876 if (iavf_get_num_vlans_added(adapter) < in iavf_max_vlans_added()
877 iavf_get_max_vlans_allowed(adapter)) in iavf_max_vlans_added()
892 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_vlan_rx_add_vid() local
898 if (!VLAN_FILTERING_ALLOWED(adapter)) in iavf_vlan_rx_add_vid()
901 if (iavf_max_vlans_added(adapter)) { in iavf_vlan_rx_add_vid()
903 iavf_get_max_vlans_allowed(adapter)); in iavf_vlan_rx_add_vid()
907 if (!iavf_add_vlan(adapter, IAVF_VLAN(vid, be16_to_cpu(proto)))) in iavf_vlan_rx_add_vid()
922 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_vlan_rx_kill_vid() local
928 iavf_del_vlan(adapter, IAVF_VLAN(vid, be16_to_cpu(proto))); in iavf_vlan_rx_kill_vid()
934 * @adapter: board private structure
941 iavf_mac_filter *iavf_find_filter(struct iavf_adapter *adapter, in iavf_find_filter() argument
949 list_for_each_entry(f, &adapter->mac_filter_list, list) { in iavf_find_filter()
958 * @adapter: board private structure
963 struct iavf_mac_filter *iavf_add_filter(struct iavf_adapter *adapter, in iavf_add_filter() argument
971 f = iavf_find_filter(adapter, macaddr); in iavf_add_filter()
979 list_add_tail(&f->list, &adapter->mac_filter_list); in iavf_add_filter()
983 f->is_primary = ether_addr_equal(macaddr, adapter->hw.mac.addr); in iavf_add_filter()
984 adapter->aq_required |= IAVF_FLAG_AQ_ADD_MAC_FILTER; in iavf_add_filter()
994 * @adapter: board private structure
1003 static int iavf_replace_primary_mac(struct iavf_adapter *adapter, in iavf_replace_primary_mac() argument
1006 struct iavf_hw *hw = &adapter->hw; in iavf_replace_primary_mac()
1010 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_replace_primary_mac()
1012 new_f = iavf_add_filter(adapter, new_mac); in iavf_replace_primary_mac()
1014 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_replace_primary_mac()
1018 old_f = iavf_find_filter(adapter, hw->mac.addr); in iavf_replace_primary_mac()
1022 adapter->aq_required |= IAVF_FLAG_AQ_DEL_MAC_FILTER; in iavf_replace_primary_mac()
1031 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_replace_primary_mac()
1034 iavf_schedule_aq_request(adapter, IAVF_FLAG_AQ_ADD_MAC_FILTER); in iavf_replace_primary_mac()
1048 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_is_mac_set_handled() local
1052 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_is_mac_set_handled()
1054 f = iavf_find_filter(adapter, macaddr); in iavf_is_mac_set_handled()
1059 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_is_mac_set_handled()
1073 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_set_mac() local
1080 ret = iavf_replace_primary_mac(adapter, addr->sa_data); in iavf_set_mac()
1085 ret = wait_event_interruptible_timeout(adapter->vc_waitqueue, in iavf_set_mac()
1117 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_addr_sync() local
1119 if (iavf_add_filter(adapter, addr)) in iavf_addr_sync()
1135 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_addr_unsync() local
1146 f = iavf_find_filter(adapter, addr); in iavf_addr_unsync()
1149 adapter->aq_required |= IAVF_FLAG_AQ_DEL_MAC_FILTER; in iavf_addr_unsync()
1156 * @adapter: device specific adapter
1158 bool iavf_promiscuous_mode_changed(struct iavf_adapter *adapter) in iavf_promiscuous_mode_changed() argument
1160 return (adapter->current_netdev_promisc_flags ^ adapter->netdev->flags) & in iavf_promiscuous_mode_changed()
1170 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_set_rx_mode() local
1172 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_set_rx_mode()
1175 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_set_rx_mode()
1177 spin_lock_bh(&adapter->current_netdev_promisc_flags_lock); in iavf_set_rx_mode()
1178 if (iavf_promiscuous_mode_changed(adapter)) in iavf_set_rx_mode()
1179 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_PROMISC_MODE; in iavf_set_rx_mode()
1180 spin_unlock_bh(&adapter->current_netdev_promisc_flags_lock); in iavf_set_rx_mode()
1185 * @adapter: board private structure
1187 static void iavf_napi_enable_all(struct iavf_adapter *adapter) in iavf_napi_enable_all() argument
1191 int q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_napi_enable_all()
1196 q_vector = &adapter->q_vectors[q_idx]; in iavf_napi_enable_all()
1204 * @adapter: board private structure
1206 static void iavf_napi_disable_all(struct iavf_adapter *adapter) in iavf_napi_disable_all() argument
1210 int q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_napi_disable_all()
1213 q_vector = &adapter->q_vectors[q_idx]; in iavf_napi_disable_all()
1220 * @adapter: board private structure
1222 static void iavf_configure(struct iavf_adapter *adapter) in iavf_configure() argument
1224 struct net_device *netdev = adapter->netdev; in iavf_configure()
1229 iavf_configure_tx(adapter); in iavf_configure()
1230 iavf_configure_rx(adapter); in iavf_configure()
1231 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_QUEUES; in iavf_configure()
1233 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_configure()
1234 struct iavf_ring *ring = &adapter->rx_rings[i]; in iavf_configure()
1242 * @adapter: board private structure
1246 static void iavf_up_complete(struct iavf_adapter *adapter) in iavf_up_complete() argument
1248 iavf_change_state(adapter, __IAVF_RUNNING); in iavf_up_complete()
1249 clear_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_up_complete()
1251 iavf_napi_enable_all(adapter); in iavf_up_complete()
1253 iavf_schedule_aq_request(adapter, IAVF_FLAG_AQ_ENABLE_QUEUES); in iavf_up_complete()
1259 * @adapter: board private structure
1261 static void iavf_clear_mac_vlan_filters(struct iavf_adapter *adapter) in iavf_clear_mac_vlan_filters() argument
1266 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_clear_mac_vlan_filters()
1268 __dev_uc_unsync(adapter->netdev, NULL); in iavf_clear_mac_vlan_filters()
1269 __dev_mc_unsync(adapter->netdev, NULL); in iavf_clear_mac_vlan_filters()
1272 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, in iavf_clear_mac_vlan_filters()
1283 list_for_each_entry_safe(vlf, vlftmp, &adapter->vlan_filter_list, in iavf_clear_mac_vlan_filters()
1287 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_clear_mac_vlan_filters()
1293 * @adapter: board private structure
1295 static void iavf_clear_cloud_filters(struct iavf_adapter *adapter) in iavf_clear_cloud_filters() argument
1300 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_clear_cloud_filters()
1301 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, in iavf_clear_cloud_filters()
1306 adapter->num_cloud_filters--; in iavf_clear_cloud_filters()
1311 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_clear_cloud_filters()
1317 * @adapter: board private structure
1319 static void iavf_clear_fdir_filters(struct iavf_adapter *adapter) in iavf_clear_fdir_filters() argument
1324 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_clear_fdir_filters()
1325 list_for_each_entry(fdir, &adapter->fdir_list_head, list) { in iavf_clear_fdir_filters()
1337 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_clear_fdir_filters()
1343 * @adapter: board private structure
1345 static void iavf_clear_adv_rss_conf(struct iavf_adapter *adapter) in iavf_clear_adv_rss_conf() argument
1350 spin_lock_bh(&adapter->adv_rss_lock); in iavf_clear_adv_rss_conf()
1351 list_for_each_entry_safe(rss, rsstmp, &adapter->adv_rss_list_head, in iavf_clear_adv_rss_conf()
1360 spin_unlock_bh(&adapter->adv_rss_lock); in iavf_clear_adv_rss_conf()
1365 * @adapter: board private structure
1369 void iavf_down(struct iavf_adapter *adapter) in iavf_down() argument
1371 struct net_device *netdev = adapter->netdev; in iavf_down()
1373 if (adapter->state <= __IAVF_DOWN_PENDING) in iavf_down()
1378 adapter->link_up = false; in iavf_down()
1379 iavf_napi_disable_all(adapter); in iavf_down()
1380 iavf_irq_disable(adapter); in iavf_down()
1382 iavf_clear_mac_vlan_filters(adapter); in iavf_down()
1383 iavf_clear_cloud_filters(adapter); in iavf_down()
1384 iavf_clear_fdir_filters(adapter); in iavf_down()
1385 iavf_clear_adv_rss_conf(adapter); in iavf_down()
1387 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) in iavf_down()
1390 if (!test_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section)) { in iavf_down()
1392 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_down()
1397 if (!list_empty(&adapter->mac_filter_list)) in iavf_down()
1398 adapter->aq_required |= IAVF_FLAG_AQ_DEL_MAC_FILTER; in iavf_down()
1399 if (!list_empty(&adapter->vlan_filter_list)) in iavf_down()
1400 adapter->aq_required |= IAVF_FLAG_AQ_DEL_VLAN_FILTER; in iavf_down()
1401 if (!list_empty(&adapter->cloud_filter_list)) in iavf_down()
1402 adapter->aq_required |= IAVF_FLAG_AQ_DEL_CLOUD_FILTER; in iavf_down()
1403 if (!list_empty(&adapter->fdir_list_head)) in iavf_down()
1404 adapter->aq_required |= IAVF_FLAG_AQ_DEL_FDIR_FILTER; in iavf_down()
1405 if (!list_empty(&adapter->adv_rss_list_head)) in iavf_down()
1406 adapter->aq_required |= IAVF_FLAG_AQ_DEL_ADV_RSS_CFG; in iavf_down()
1409 iavf_schedule_aq_request(adapter, IAVF_FLAG_AQ_DISABLE_QUEUES); in iavf_down()
1414 * @adapter: board private structure
1422 iavf_acquire_msix_vectors(struct iavf_adapter *adapter, int vectors) in iavf_acquire_msix_vectors() argument
1438 err = pci_enable_msix_range(adapter->pdev, adapter->msix_entries, in iavf_acquire_msix_vectors()
1441 dev_err(&adapter->pdev->dev, "Unable to allocate MSI-X interrupts\n"); in iavf_acquire_msix_vectors()
1442 kfree(adapter->msix_entries); in iavf_acquire_msix_vectors()
1443 adapter->msix_entries = NULL; in iavf_acquire_msix_vectors()
1451 adapter->num_msix_vectors = err; in iavf_acquire_msix_vectors()
1457 * @adapter: board private structure to initialize
1461 static void iavf_free_queues(struct iavf_adapter *adapter) in iavf_free_queues() argument
1463 if (!adapter->vsi_res) in iavf_free_queues()
1465 adapter->num_active_queues = 0; in iavf_free_queues()
1466 kfree(adapter->tx_rings); in iavf_free_queues()
1467 adapter->tx_rings = NULL; in iavf_free_queues()
1468 kfree(adapter->rx_rings); in iavf_free_queues()
1469 adapter->rx_rings = NULL; in iavf_free_queues()
1474 * @adapter: board private structure
1481 void iavf_set_queue_vlan_tag_loc(struct iavf_adapter *adapter) in iavf_set_queue_vlan_tag_loc() argument
1485 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_set_queue_vlan_tag_loc()
1486 struct iavf_ring *tx_ring = &adapter->tx_rings[i]; in iavf_set_queue_vlan_tag_loc()
1487 struct iavf_ring *rx_ring = &adapter->rx_rings[i]; in iavf_set_queue_vlan_tag_loc()
1497 if (VLAN_ALLOWED(adapter)) { in iavf_set_queue_vlan_tag_loc()
1500 } else if (VLAN_V2_ALLOWED(adapter)) { in iavf_set_queue_vlan_tag_loc()
1505 &adapter->vlan_v2_caps.offloads.stripping_support; in iavf_set_queue_vlan_tag_loc()
1507 &adapter->vlan_v2_caps.offloads.insertion_support; in iavf_set_queue_vlan_tag_loc()
1554 * @adapter: board private structure to initialize
1560 static int iavf_alloc_queues(struct iavf_adapter *adapter) in iavf_alloc_queues() argument
1569 if (adapter->num_req_queues) in iavf_alloc_queues()
1570 num_active_queues = adapter->num_req_queues; in iavf_alloc_queues()
1571 else if ((adapter->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_ADQ) && in iavf_alloc_queues()
1572 adapter->num_tc) in iavf_alloc_queues()
1573 num_active_queues = adapter->ch_config.total_qps; in iavf_alloc_queues()
1576 adapter->vsi_res->num_queue_pairs, in iavf_alloc_queues()
1580 adapter->tx_rings = kcalloc(num_active_queues, in iavf_alloc_queues()
1582 if (!adapter->tx_rings) in iavf_alloc_queues()
1584 adapter->rx_rings = kcalloc(num_active_queues, in iavf_alloc_queues()
1586 if (!adapter->rx_rings) in iavf_alloc_queues()
1593 tx_ring = &adapter->tx_rings[i]; in iavf_alloc_queues()
1596 tx_ring->netdev = adapter->netdev; in iavf_alloc_queues()
1597 tx_ring->dev = &adapter->pdev->dev; in iavf_alloc_queues()
1598 tx_ring->count = adapter->tx_desc_count; in iavf_alloc_queues()
1600 if (adapter->flags & IAVF_FLAG_WB_ON_ITR_CAPABLE) in iavf_alloc_queues()
1603 rx_ring = &adapter->rx_rings[i]; in iavf_alloc_queues()
1605 rx_ring->netdev = adapter->netdev; in iavf_alloc_queues()
1606 rx_ring->count = adapter->rx_desc_count; in iavf_alloc_queues()
1610 adapter->num_active_queues = num_active_queues; in iavf_alloc_queues()
1612 iavf_set_queue_vlan_tag_loc(adapter); in iavf_alloc_queues()
1617 iavf_free_queues(adapter); in iavf_alloc_queues()
1623 * @adapter: board private structure to initialize
1628 static int iavf_set_interrupt_capability(struct iavf_adapter *adapter) in iavf_set_interrupt_capability() argument
1634 if (!adapter->vsi_res) { in iavf_set_interrupt_capability()
1638 pairs = adapter->num_active_queues; in iavf_set_interrupt_capability()
1646 (int)adapter->vf_res->max_vectors); in iavf_set_interrupt_capability()
1648 adapter->msix_entries = kcalloc(v_budget, in iavf_set_interrupt_capability()
1650 if (!adapter->msix_entries) { in iavf_set_interrupt_capability()
1656 adapter->msix_entries[vector].entry = vector; in iavf_set_interrupt_capability()
1658 err = iavf_acquire_msix_vectors(adapter, v_budget); in iavf_set_interrupt_capability()
1660 iavf_schedule_finish_config(adapter); in iavf_set_interrupt_capability()
1668 * @adapter: board private structure
1672 static int iavf_config_rss_aq(struct iavf_adapter *adapter) in iavf_config_rss_aq() argument
1675 (struct iavf_aqc_get_set_rss_key_data *)adapter->rss_key; in iavf_config_rss_aq()
1676 struct iavf_hw *hw = &adapter->hw; in iavf_config_rss_aq()
1679 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_config_rss_aq()
1681 dev_err(&adapter->pdev->dev, "Cannot configure RSS, command %d pending\n", in iavf_config_rss_aq()
1682 adapter->current_op); in iavf_config_rss_aq()
1686 status = iavf_aq_set_rss_key(hw, adapter->vsi.id, rss_key); in iavf_config_rss_aq()
1688 dev_err(&adapter->pdev->dev, "Cannot set RSS key, err %s aq_err %s\n", in iavf_config_rss_aq()
1695 status = iavf_aq_set_rss_lut(hw, adapter->vsi.id, false, in iavf_config_rss_aq()
1696 adapter->rss_lut, adapter->rss_lut_size); in iavf_config_rss_aq()
1698 dev_err(&adapter->pdev->dev, "Cannot set RSS lut, err %s aq_err %s\n", in iavf_config_rss_aq()
1710 * @adapter: board private structure
1714 static int iavf_config_rss_reg(struct iavf_adapter *adapter) in iavf_config_rss_reg() argument
1716 struct iavf_hw *hw = &adapter->hw; in iavf_config_rss_reg()
1720 dw = (u32 *)adapter->rss_key; in iavf_config_rss_reg()
1721 for (i = 0; i <= adapter->rss_key_size / 4; i++) in iavf_config_rss_reg()
1724 dw = (u32 *)adapter->rss_lut; in iavf_config_rss_reg()
1725 for (i = 0; i <= adapter->rss_lut_size / 4; i++) in iavf_config_rss_reg()
1735 * @adapter: board private structure
1739 int iavf_config_rss(struct iavf_adapter *adapter) in iavf_config_rss() argument
1742 if (RSS_PF(adapter)) { in iavf_config_rss()
1743 adapter->aq_required |= IAVF_FLAG_AQ_SET_RSS_LUT | in iavf_config_rss()
1746 } else if (RSS_AQ(adapter)) { in iavf_config_rss()
1747 return iavf_config_rss_aq(adapter); in iavf_config_rss()
1749 return iavf_config_rss_reg(adapter); in iavf_config_rss()
1755 * @adapter: board private structure
1757 static void iavf_fill_rss_lut(struct iavf_adapter *adapter) in iavf_fill_rss_lut() argument
1761 for (i = 0; i < adapter->rss_lut_size; i++) in iavf_fill_rss_lut()
1762 adapter->rss_lut[i] = i % adapter->num_active_queues; in iavf_fill_rss_lut()
1767 * @adapter: board private structure
1771 static int iavf_init_rss(struct iavf_adapter *adapter) in iavf_init_rss() argument
1773 struct iavf_hw *hw = &adapter->hw; in iavf_init_rss()
1775 if (!RSS_PF(adapter)) { in iavf_init_rss()
1777 if (adapter->vf_res->vf_cap_flags & in iavf_init_rss()
1779 adapter->hena = IAVF_DEFAULT_RSS_HENA_EXPANDED; in iavf_init_rss()
1781 adapter->hena = IAVF_DEFAULT_RSS_HENA; in iavf_init_rss()
1783 wr32(hw, IAVF_VFQF_HENA(0), (u32)adapter->hena); in iavf_init_rss()
1784 wr32(hw, IAVF_VFQF_HENA(1), (u32)(adapter->hena >> 32)); in iavf_init_rss()
1787 iavf_fill_rss_lut(adapter); in iavf_init_rss()
1788 netdev_rss_key_fill((void *)adapter->rss_key, adapter->rss_key_size); in iavf_init_rss()
1790 return iavf_config_rss(adapter); in iavf_init_rss()
1795 * @adapter: board private structure to initialize
1800 static int iavf_alloc_q_vectors(struct iavf_adapter *adapter) in iavf_alloc_q_vectors() argument
1805 num_q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_alloc_q_vectors()
1806 adapter->q_vectors = kcalloc(num_q_vectors, sizeof(*q_vector), in iavf_alloc_q_vectors()
1808 if (!adapter->q_vectors) in iavf_alloc_q_vectors()
1812 q_vector = &adapter->q_vectors[q_idx]; in iavf_alloc_q_vectors()
1813 q_vector->adapter = adapter; in iavf_alloc_q_vectors()
1814 q_vector->vsi = &adapter->vsi; in iavf_alloc_q_vectors()
1818 netif_napi_add_locked(adapter->netdev, &q_vector->napi, in iavf_alloc_q_vectors()
1827 * @adapter: board private structure to initialize
1833 static void iavf_free_q_vectors(struct iavf_adapter *adapter) in iavf_free_q_vectors() argument
1837 if (!adapter->q_vectors) in iavf_free_q_vectors()
1840 num_q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_free_q_vectors()
1843 struct iavf_q_vector *q_vector = &adapter->q_vectors[q_idx]; in iavf_free_q_vectors()
1847 kfree(adapter->q_vectors); in iavf_free_q_vectors()
1848 adapter->q_vectors = NULL; in iavf_free_q_vectors()
1853 * @adapter: board private structure
1856 static void iavf_reset_interrupt_capability(struct iavf_adapter *adapter) in iavf_reset_interrupt_capability() argument
1858 if (!adapter->msix_entries) in iavf_reset_interrupt_capability()
1861 pci_disable_msix(adapter->pdev); in iavf_reset_interrupt_capability()
1862 kfree(adapter->msix_entries); in iavf_reset_interrupt_capability()
1863 adapter->msix_entries = NULL; in iavf_reset_interrupt_capability()
1868 * @adapter: board private structure to initialize
1871 static int iavf_init_interrupt_scheme(struct iavf_adapter *adapter) in iavf_init_interrupt_scheme() argument
1875 err = iavf_alloc_queues(adapter); in iavf_init_interrupt_scheme()
1877 dev_err(&adapter->pdev->dev, in iavf_init_interrupt_scheme()
1882 err = iavf_set_interrupt_capability(adapter); in iavf_init_interrupt_scheme()
1884 dev_err(&adapter->pdev->dev, in iavf_init_interrupt_scheme()
1889 err = iavf_alloc_q_vectors(adapter); in iavf_init_interrupt_scheme()
1891 dev_err(&adapter->pdev->dev, in iavf_init_interrupt_scheme()
1901 if ((adapter->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_ADQ) && in iavf_init_interrupt_scheme()
1902 adapter->num_tc) in iavf_init_interrupt_scheme()
1903 dev_info(&adapter->pdev->dev, "ADq Enabled, %u TCs created", in iavf_init_interrupt_scheme()
1904 adapter->num_tc); in iavf_init_interrupt_scheme()
1906 dev_info(&adapter->pdev->dev, "Multiqueue %s: Queue pair count = %u", in iavf_init_interrupt_scheme()
1907 (adapter->num_active_queues > 1) ? "Enabled" : "Disabled", in iavf_init_interrupt_scheme()
1908 adapter->num_active_queues); in iavf_init_interrupt_scheme()
1912 iavf_reset_interrupt_capability(adapter); in iavf_init_interrupt_scheme()
1914 iavf_free_queues(adapter); in iavf_init_interrupt_scheme()
1921 * @adapter: board private structure
1923 static void iavf_free_interrupt_scheme(struct iavf_adapter *adapter) in iavf_free_interrupt_scheme() argument
1925 iavf_free_q_vectors(adapter); in iavf_free_interrupt_scheme()
1926 iavf_reset_interrupt_capability(adapter); in iavf_free_interrupt_scheme()
1927 iavf_free_queues(adapter); in iavf_free_interrupt_scheme()
1932 * @adapter: board private structure
1934 static void iavf_free_rss(struct iavf_adapter *adapter) in iavf_free_rss() argument
1936 kfree(adapter->rss_key); in iavf_free_rss()
1937 adapter->rss_key = NULL; in iavf_free_rss()
1939 kfree(adapter->rss_lut); in iavf_free_rss()
1940 adapter->rss_lut = NULL; in iavf_free_rss()
1945 * @adapter: board private structure
1946 * @running: true if adapter->state == __IAVF_RUNNING
1950 static int iavf_reinit_interrupt_scheme(struct iavf_adapter *adapter, bool running) in iavf_reinit_interrupt_scheme() argument
1952 struct net_device *netdev = adapter->netdev; in iavf_reinit_interrupt_scheme()
1956 iavf_free_traffic_irqs(adapter); in iavf_reinit_interrupt_scheme()
1957 iavf_free_misc_irq(adapter); in iavf_reinit_interrupt_scheme()
1958 iavf_free_interrupt_scheme(adapter); in iavf_reinit_interrupt_scheme()
1960 err = iavf_init_interrupt_scheme(adapter); in iavf_reinit_interrupt_scheme()
1966 err = iavf_request_misc_irq(adapter); in iavf_reinit_interrupt_scheme()
1970 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_reinit_interrupt_scheme()
1972 iavf_map_rings_to_vectors(adapter); in iavf_reinit_interrupt_scheme()
1985 struct iavf_adapter *adapter; in iavf_finish_config() local
1989 adapter = container_of(work, struct iavf_adapter, finish_config); in iavf_finish_config()
1995 netdev_lock(adapter->netdev); in iavf_finish_config()
1996 mutex_lock(&adapter->crit_lock); in iavf_finish_config()
1998 if ((adapter->flags & IAVF_FLAG_SETUP_NETDEV_FEATURES) && in iavf_finish_config()
1999 adapter->netdev->reg_state == NETREG_REGISTERED && in iavf_finish_config()
2000 !test_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section)) { in iavf_finish_config()
2001 netdev_update_features(adapter->netdev); in iavf_finish_config()
2002 adapter->flags &= ~IAVF_FLAG_SETUP_NETDEV_FEATURES; in iavf_finish_config()
2005 switch (adapter->state) { in iavf_finish_config()
2010 pairs = adapter->num_active_queues; in iavf_finish_config()
2011 netif_set_real_num_rx_queues(adapter->netdev, pairs); in iavf_finish_config()
2012 netif_set_real_num_tx_queues(adapter->netdev, pairs); in iavf_finish_config()
2014 if (adapter->netdev->reg_state != NETREG_REGISTERED) { in iavf_finish_config()
2015 mutex_unlock(&adapter->crit_lock); in iavf_finish_config()
2016 netdev_unlock(adapter->netdev); in iavf_finish_config()
2018 err = register_netdevice(adapter->netdev); in iavf_finish_config()
2020 dev_err(&adapter->pdev->dev, "Unable to register netdev (%d)\n", in iavf_finish_config()
2024 mutex_lock(&adapter->crit_lock); in iavf_finish_config()
2025 iavf_free_rss(adapter); in iavf_finish_config()
2026 iavf_free_misc_irq(adapter); in iavf_finish_config()
2027 iavf_reset_interrupt_capability(adapter); in iavf_finish_config()
2028 iavf_change_state(adapter, in iavf_finish_config()
2030 mutex_unlock(&adapter->crit_lock); in iavf_finish_config()
2036 pairs = adapter->num_active_queues; in iavf_finish_config()
2037 netif_set_real_num_rx_queues(adapter->netdev, pairs); in iavf_finish_config()
2038 netif_set_real_num_tx_queues(adapter->netdev, pairs); in iavf_finish_config()
2047 mutex_unlock(&adapter->crit_lock); in iavf_finish_config()
2048 netdev_unlock(adapter->netdev); in iavf_finish_config()
2055 * @adapter: board private structure
2057 void iavf_schedule_finish_config(struct iavf_adapter *adapter) in iavf_schedule_finish_config() argument
2059 if (!test_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section)) in iavf_schedule_finish_config()
2060 queue_work(adapter->wq, &adapter->finish_config); in iavf_schedule_finish_config()
2066 * @adapter: pointer to iavf adapter structure
2072 static int iavf_process_aq_command(struct iavf_adapter *adapter) in iavf_process_aq_command() argument
2074 if (adapter->aq_required & IAVF_FLAG_AQ_GET_CONFIG) in iavf_process_aq_command()
2075 return iavf_send_vf_config_msg(adapter); in iavf_process_aq_command()
2076 if (adapter->aq_required & IAVF_FLAG_AQ_GET_OFFLOAD_VLAN_V2_CAPS) in iavf_process_aq_command()
2077 return iavf_send_vf_offload_vlan_v2_msg(adapter); in iavf_process_aq_command()
2078 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_QUEUES) { in iavf_process_aq_command()
2079 iavf_disable_queues(adapter); in iavf_process_aq_command()
2083 if (adapter->aq_required & IAVF_FLAG_AQ_MAP_VECTORS) { in iavf_process_aq_command()
2084 iavf_map_queues(adapter); in iavf_process_aq_command()
2088 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_MAC_FILTER) { in iavf_process_aq_command()
2089 iavf_add_ether_addrs(adapter); in iavf_process_aq_command()
2093 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_VLAN_FILTER) { in iavf_process_aq_command()
2094 iavf_add_vlans(adapter); in iavf_process_aq_command()
2098 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_MAC_FILTER) { in iavf_process_aq_command()
2099 iavf_del_ether_addrs(adapter); in iavf_process_aq_command()
2103 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_VLAN_FILTER) { in iavf_process_aq_command()
2104 iavf_del_vlans(adapter); in iavf_process_aq_command()
2108 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_VLAN_STRIPPING) { in iavf_process_aq_command()
2109 iavf_enable_vlan_stripping(adapter); in iavf_process_aq_command()
2113 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_VLAN_STRIPPING) { in iavf_process_aq_command()
2114 iavf_disable_vlan_stripping(adapter); in iavf_process_aq_command()
2118 if (adapter->aq_required & IAVF_FLAG_AQ_CONFIGURE_QUEUES_BW) { in iavf_process_aq_command()
2119 iavf_cfg_queues_bw(adapter); in iavf_process_aq_command()
2123 if (adapter->aq_required & IAVF_FLAG_AQ_GET_QOS_CAPS) { in iavf_process_aq_command()
2124 iavf_get_qos_caps(adapter); in iavf_process_aq_command()
2128 if (adapter->aq_required & IAVF_FLAG_AQ_CFG_QUEUES_QUANTA_SIZE) { in iavf_process_aq_command()
2129 iavf_cfg_queues_quanta_size(adapter); in iavf_process_aq_command()
2133 if (adapter->aq_required & IAVF_FLAG_AQ_CONFIGURE_QUEUES) { in iavf_process_aq_command()
2134 iavf_configure_queues(adapter); in iavf_process_aq_command()
2138 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_QUEUES) { in iavf_process_aq_command()
2139 iavf_enable_queues(adapter); in iavf_process_aq_command()
2143 if (adapter->aq_required & IAVF_FLAG_AQ_CONFIGURE_RSS) { in iavf_process_aq_command()
2148 adapter->aq_required &= ~IAVF_FLAG_AQ_CONFIGURE_RSS; in iavf_process_aq_command()
2151 if (adapter->aq_required & IAVF_FLAG_AQ_GET_HENA) { in iavf_process_aq_command()
2152 iavf_get_hena(adapter); in iavf_process_aq_command()
2155 if (adapter->aq_required & IAVF_FLAG_AQ_SET_HENA) { in iavf_process_aq_command()
2156 iavf_set_hena(adapter); in iavf_process_aq_command()
2159 if (adapter->aq_required & IAVF_FLAG_AQ_SET_RSS_KEY) { in iavf_process_aq_command()
2160 iavf_set_rss_key(adapter); in iavf_process_aq_command()
2163 if (adapter->aq_required & IAVF_FLAG_AQ_SET_RSS_LUT) { in iavf_process_aq_command()
2164 iavf_set_rss_lut(adapter); in iavf_process_aq_command()
2167 if (adapter->aq_required & IAVF_FLAG_AQ_SET_RSS_HFUNC) { in iavf_process_aq_command()
2168 iavf_set_rss_hfunc(adapter); in iavf_process_aq_command()
2172 if (adapter->aq_required & IAVF_FLAG_AQ_CONFIGURE_PROMISC_MODE) { in iavf_process_aq_command()
2173 iavf_set_promiscuous(adapter); in iavf_process_aq_command()
2177 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_CHANNELS) { in iavf_process_aq_command()
2178 iavf_enable_channels(adapter); in iavf_process_aq_command()
2182 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_CHANNELS) { in iavf_process_aq_command()
2183 iavf_disable_channels(adapter); in iavf_process_aq_command()
2186 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_CLOUD_FILTER) { in iavf_process_aq_command()
2187 iavf_add_cloud_filter(adapter); in iavf_process_aq_command()
2190 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_CLOUD_FILTER) { in iavf_process_aq_command()
2191 iavf_del_cloud_filter(adapter); in iavf_process_aq_command()
2194 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_FDIR_FILTER) { in iavf_process_aq_command()
2195 iavf_add_fdir_filter(adapter); in iavf_process_aq_command()
2198 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_FDIR_FILTER) { in iavf_process_aq_command()
2199 iavf_del_fdir_filter(adapter); in iavf_process_aq_command()
2202 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_ADV_RSS_CFG) { in iavf_process_aq_command()
2203 iavf_add_adv_rss_cfg(adapter); in iavf_process_aq_command()
2206 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_ADV_RSS_CFG) { in iavf_process_aq_command()
2207 iavf_del_adv_rss_cfg(adapter); in iavf_process_aq_command()
2210 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_CTAG_VLAN_STRIPPING) { in iavf_process_aq_command()
2211 iavf_disable_vlan_stripping_v2(adapter, ETH_P_8021Q); in iavf_process_aq_command()
2214 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_STAG_VLAN_STRIPPING) { in iavf_process_aq_command()
2215 iavf_disable_vlan_stripping_v2(adapter, ETH_P_8021AD); in iavf_process_aq_command()
2218 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_CTAG_VLAN_STRIPPING) { in iavf_process_aq_command()
2219 iavf_enable_vlan_stripping_v2(adapter, ETH_P_8021Q); in iavf_process_aq_command()
2222 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_STAG_VLAN_STRIPPING) { in iavf_process_aq_command()
2223 iavf_enable_vlan_stripping_v2(adapter, ETH_P_8021AD); in iavf_process_aq_command()
2226 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_CTAG_VLAN_INSERTION) { in iavf_process_aq_command()
2227 iavf_disable_vlan_insertion_v2(adapter, ETH_P_8021Q); in iavf_process_aq_command()
2230 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_STAG_VLAN_INSERTION) { in iavf_process_aq_command()
2231 iavf_disable_vlan_insertion_v2(adapter, ETH_P_8021AD); in iavf_process_aq_command()
2234 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_CTAG_VLAN_INSERTION) { in iavf_process_aq_command()
2235 iavf_enable_vlan_insertion_v2(adapter, ETH_P_8021Q); in iavf_process_aq_command()
2238 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_STAG_VLAN_INSERTION) { in iavf_process_aq_command()
2239 iavf_enable_vlan_insertion_v2(adapter, ETH_P_8021AD); in iavf_process_aq_command()
2243 if (adapter->aq_required & IAVF_FLAG_AQ_REQUEST_STATS) { in iavf_process_aq_command()
2244 iavf_request_stats(adapter); in iavf_process_aq_command()
2253 * @adapter: board private structure
2263 iavf_set_vlan_offload_features(struct iavf_adapter *adapter, in iavf_set_vlan_offload_features() argument
2293 if (VLAN_ALLOWED(adapter)) { in iavf_set_vlan_offload_features()
2303 } else if (VLAN_V2_ALLOWED(adapter)) { in iavf_set_vlan_offload_features()
2331 iavf_schedule_aq_request(adapter, aq_required); in iavf_set_vlan_offload_features()
2336 * @adapter: board private structure
2342 static void iavf_startup(struct iavf_adapter *adapter) in iavf_startup() argument
2344 struct pci_dev *pdev = adapter->pdev; in iavf_startup()
2345 struct iavf_hw *hw = &adapter->hw; in iavf_startup()
2349 WARN_ON(adapter->state != __IAVF_STARTUP); in iavf_startup()
2352 adapter->flags &= ~IAVF_FLAG_PF_COMMS_FAILED; in iavf_startup()
2353 adapter->flags &= ~IAVF_FLAG_RESET_PENDING; in iavf_startup()
2372 ret = iavf_send_api_ver(adapter); in iavf_startup()
2378 iavf_change_state(adapter, __IAVF_INIT_VERSION_CHECK); in iavf_startup()
2381 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_startup()
2386 * @adapter: board private structure
2392 static void iavf_init_version_check(struct iavf_adapter *adapter) in iavf_init_version_check() argument
2394 struct pci_dev *pdev = adapter->pdev; in iavf_init_version_check()
2395 struct iavf_hw *hw = &adapter->hw; in iavf_init_version_check()
2398 WARN_ON(adapter->state != __IAVF_INIT_VERSION_CHECK); in iavf_init_version_check()
2403 iavf_change_state(adapter, __IAVF_STARTUP); in iavf_init_version_check()
2408 err = iavf_verify_api_ver(adapter); in iavf_init_version_check()
2411 err = iavf_send_api_ver(adapter); in iavf_init_version_check()
2414 adapter->pf_version.major, in iavf_init_version_check()
2415 adapter->pf_version.minor, in iavf_init_version_check()
2420 err = iavf_send_vf_config_msg(adapter); in iavf_init_version_check()
2426 iavf_change_state(adapter, __IAVF_INIT_GET_RESOURCES); in iavf_init_version_check()
2429 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_init_version_check()
2434 * @adapter: board private structure
2436 int iavf_parse_vf_resource_msg(struct iavf_adapter *adapter) in iavf_parse_vf_resource_msg() argument
2438 int i, num_req_queues = adapter->num_req_queues; in iavf_parse_vf_resource_msg()
2439 struct iavf_vsi *vsi = &adapter->vsi; in iavf_parse_vf_resource_msg()
2441 for (i = 0; i < adapter->vf_res->num_vsis; i++) { in iavf_parse_vf_resource_msg()
2442 if (adapter->vf_res->vsi_res[i].vsi_type == VIRTCHNL_VSI_SRIOV) in iavf_parse_vf_resource_msg()
2443 adapter->vsi_res = &adapter->vf_res->vsi_res[i]; in iavf_parse_vf_resource_msg()
2445 if (!adapter->vsi_res) { in iavf_parse_vf_resource_msg()
2446 dev_err(&adapter->pdev->dev, "No LAN VSI found\n"); in iavf_parse_vf_resource_msg()
2451 num_req_queues > adapter->vsi_res->num_queue_pairs) { in iavf_parse_vf_resource_msg()
2456 dev_err(&adapter->pdev->dev, in iavf_parse_vf_resource_msg()
2459 adapter->vsi_res->num_queue_pairs); in iavf_parse_vf_resource_msg()
2460 adapter->flags |= IAVF_FLAG_REINIT_MSIX_NEEDED; in iavf_parse_vf_resource_msg()
2461 adapter->num_req_queues = adapter->vsi_res->num_queue_pairs; in iavf_parse_vf_resource_msg()
2462 iavf_schedule_reset(adapter, IAVF_FLAG_RESET_NEEDED); in iavf_parse_vf_resource_msg()
2466 adapter->num_req_queues = 0; in iavf_parse_vf_resource_msg()
2467 adapter->vsi.id = adapter->vsi_res->vsi_id; in iavf_parse_vf_resource_msg()
2469 adapter->vsi.back = adapter; in iavf_parse_vf_resource_msg()
2470 adapter->vsi.base_vector = 1; in iavf_parse_vf_resource_msg()
2471 vsi->netdev = adapter->netdev; in iavf_parse_vf_resource_msg()
2472 vsi->qs_handle = adapter->vsi_res->qset_handle; in iavf_parse_vf_resource_msg()
2473 if (adapter->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_RSS_PF) { in iavf_parse_vf_resource_msg()
2474 adapter->rss_key_size = adapter->vf_res->rss_key_size; in iavf_parse_vf_resource_msg()
2475 adapter->rss_lut_size = adapter->vf_res->rss_lut_size; in iavf_parse_vf_resource_msg()
2477 adapter->rss_key_size = IAVF_HKEY_ARRAY_SIZE; in iavf_parse_vf_resource_msg()
2478 adapter->rss_lut_size = IAVF_HLUT_ARRAY_SIZE; in iavf_parse_vf_resource_msg()
2486 * @adapter: board private structure
2493 static void iavf_init_get_resources(struct iavf_adapter *adapter) in iavf_init_get_resources() argument
2495 struct pci_dev *pdev = adapter->pdev; in iavf_init_get_resources()
2496 struct iavf_hw *hw = &adapter->hw; in iavf_init_get_resources()
2499 WARN_ON(adapter->state != __IAVF_INIT_GET_RESOURCES); in iavf_init_get_resources()
2501 if (!adapter->vf_res) { in iavf_init_get_resources()
2502 adapter->vf_res = kzalloc(IAVF_VIRTCHNL_VF_RESOURCE_SIZE, in iavf_init_get_resources()
2504 if (!adapter->vf_res) { in iavf_init_get_resources()
2509 err = iavf_get_vf_config(adapter); in iavf_init_get_resources()
2511 err = iavf_send_vf_config_msg(adapter); in iavf_init_get_resources()
2527 err = iavf_parse_vf_resource_msg(adapter); in iavf_init_get_resources()
2537 adapter->extended_caps = IAVF_EXTENDED_CAPS; in iavf_init_get_resources()
2539 iavf_change_state(adapter, __IAVF_INIT_EXTENDED_CAPS); in iavf_init_get_resources()
2543 kfree(adapter->vf_res); in iavf_init_get_resources()
2544 adapter->vf_res = NULL; in iavf_init_get_resources()
2546 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_init_get_resources()
2551 * @adapter: board private structure
2557 static void iavf_init_send_offload_vlan_v2_caps(struct iavf_adapter *adapter) in iavf_init_send_offload_vlan_v2_caps() argument
2561 WARN_ON(!(adapter->extended_caps & IAVF_EXTENDED_CAP_SEND_VLAN_V2)); in iavf_init_send_offload_vlan_v2_caps()
2563 ret = iavf_send_vf_offload_vlan_v2_msg(adapter); in iavf_init_send_offload_vlan_v2_caps()
2569 adapter->extended_caps &= ~IAVF_EXTENDED_CAP_RECV_VLAN_V2; in iavf_init_send_offload_vlan_v2_caps()
2573 adapter->extended_caps &= ~IAVF_EXTENDED_CAP_SEND_VLAN_V2; in iavf_init_send_offload_vlan_v2_caps()
2578 * @adapter: board private structure
2583 static void iavf_init_recv_offload_vlan_v2_caps(struct iavf_adapter *adapter) in iavf_init_recv_offload_vlan_v2_caps() argument
2587 WARN_ON(!(adapter->extended_caps & IAVF_EXTENDED_CAP_RECV_VLAN_V2)); in iavf_init_recv_offload_vlan_v2_caps()
2589 memset(&adapter->vlan_v2_caps, 0, sizeof(adapter->vlan_v2_caps)); in iavf_init_recv_offload_vlan_v2_caps()
2591 ret = iavf_get_vf_vlan_v2_caps(adapter); in iavf_init_recv_offload_vlan_v2_caps()
2596 adapter->extended_caps &= ~IAVF_EXTENDED_CAP_RECV_VLAN_V2; in iavf_init_recv_offload_vlan_v2_caps()
2602 adapter->extended_caps |= IAVF_EXTENDED_CAP_SEND_VLAN_V2; in iavf_init_recv_offload_vlan_v2_caps()
2603 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_init_recv_offload_vlan_v2_caps()
2608 * @adapter: board private structure
2617 static void iavf_init_process_extended_caps(struct iavf_adapter *adapter) in iavf_init_process_extended_caps() argument
2619 WARN_ON(adapter->state != __IAVF_INIT_EXTENDED_CAPS); in iavf_init_process_extended_caps()
2622 if (adapter->extended_caps & IAVF_EXTENDED_CAP_SEND_VLAN_V2) { in iavf_init_process_extended_caps()
2623 iavf_init_send_offload_vlan_v2_caps(adapter); in iavf_init_process_extended_caps()
2625 } else if (adapter->extended_caps & IAVF_EXTENDED_CAP_RECV_VLAN_V2) { in iavf_init_process_extended_caps()
2626 iavf_init_recv_offload_vlan_v2_caps(adapter); in iavf_init_process_extended_caps()
2633 iavf_change_state(adapter, __IAVF_INIT_CONFIG_ADAPTER); in iavf_init_process_extended_caps()
2638 * @adapter: board private structure
2643 static void iavf_init_config_adapter(struct iavf_adapter *adapter) in iavf_init_config_adapter() argument
2645 struct net_device *netdev = adapter->netdev; in iavf_init_config_adapter()
2646 struct pci_dev *pdev = adapter->pdev; in iavf_init_config_adapter()
2649 WARN_ON(adapter->state != __IAVF_INIT_CONFIG_ADAPTER); in iavf_init_config_adapter()
2651 if (iavf_process_config(adapter)) in iavf_init_config_adapter()
2654 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_init_config_adapter()
2656 adapter->flags |= IAVF_FLAG_RX_CSUM_ENABLED; in iavf_init_config_adapter()
2665 if (!is_valid_ether_addr(adapter->hw.mac.addr)) { in iavf_init_config_adapter()
2667 adapter->hw.mac.addr); in iavf_init_config_adapter()
2669 ether_addr_copy(adapter->hw.mac.addr, netdev->dev_addr); in iavf_init_config_adapter()
2671 eth_hw_addr_set(netdev, adapter->hw.mac.addr); in iavf_init_config_adapter()
2672 ether_addr_copy(netdev->perm_addr, adapter->hw.mac.addr); in iavf_init_config_adapter()
2675 adapter->tx_desc_count = IAVF_DEFAULT_TXD; in iavf_init_config_adapter()
2676 adapter->rx_desc_count = IAVF_DEFAULT_RXD; in iavf_init_config_adapter()
2677 err = iavf_init_interrupt_scheme(adapter); in iavf_init_config_adapter()
2680 iavf_map_rings_to_vectors(adapter); in iavf_init_config_adapter()
2681 if (adapter->vf_res->vf_cap_flags & in iavf_init_config_adapter()
2683 adapter->flags |= IAVF_FLAG_WB_ON_ITR_CAPABLE; in iavf_init_config_adapter()
2685 err = iavf_request_misc_irq(adapter); in iavf_init_config_adapter()
2690 adapter->link_up = false; in iavf_init_config_adapter()
2693 dev_info(&pdev->dev, "MAC address: %pM\n", adapter->hw.mac.addr); in iavf_init_config_adapter()
2697 iavf_change_state(adapter, __IAVF_DOWN); in iavf_init_config_adapter()
2698 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_init_config_adapter()
2700 iavf_misc_irq_enable(adapter); in iavf_init_config_adapter()
2701 wake_up(&adapter->down_waitqueue); in iavf_init_config_adapter()
2703 adapter->rss_key = kzalloc(adapter->rss_key_size, GFP_KERNEL); in iavf_init_config_adapter()
2704 adapter->rss_lut = kzalloc(adapter->rss_lut_size, GFP_KERNEL); in iavf_init_config_adapter()
2705 if (!adapter->rss_key || !adapter->rss_lut) { in iavf_init_config_adapter()
2709 if (RSS_AQ(adapter)) in iavf_init_config_adapter()
2710 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_RSS; in iavf_init_config_adapter()
2712 iavf_init_rss(adapter); in iavf_init_config_adapter()
2714 if (VLAN_V2_ALLOWED(adapter)) in iavf_init_config_adapter()
2716 iavf_set_vlan_offload_features(adapter, 0, netdev->features); in iavf_init_config_adapter()
2718 if (QOS_ALLOWED(adapter)) in iavf_init_config_adapter()
2719 adapter->aq_required |= IAVF_FLAG_AQ_GET_QOS_CAPS; in iavf_init_config_adapter()
2721 iavf_schedule_finish_config(adapter); in iavf_init_config_adapter()
2725 iavf_free_rss(adapter); in iavf_init_config_adapter()
2726 iavf_free_misc_irq(adapter); in iavf_init_config_adapter()
2728 iavf_reset_interrupt_capability(adapter); in iavf_init_config_adapter()
2730 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_init_config_adapter()
2739 struct iavf_adapter *adapter = container_of(work, in iavf_watchdog_task() local
2742 struct net_device *netdev = adapter->netdev; in iavf_watchdog_task()
2743 struct iavf_hw *hw = &adapter->hw; in iavf_watchdog_task()
2747 if (!mutex_trylock(&adapter->crit_lock)) { in iavf_watchdog_task()
2748 if (adapter->state == __IAVF_REMOVE) { in iavf_watchdog_task()
2756 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) in iavf_watchdog_task()
2757 iavf_change_state(adapter, __IAVF_COMM_FAILED); in iavf_watchdog_task()
2759 switch (adapter->state) { in iavf_watchdog_task()
2761 iavf_startup(adapter); in iavf_watchdog_task()
2762 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2764 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2768 iavf_init_version_check(adapter); in iavf_watchdog_task()
2769 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2771 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2775 iavf_init_get_resources(adapter); in iavf_watchdog_task()
2776 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2778 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2782 iavf_init_process_extended_caps(adapter); in iavf_watchdog_task()
2783 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2785 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2789 iavf_init_config_adapter(adapter); in iavf_watchdog_task()
2790 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2792 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2797 &adapter->crit_section)) { in iavf_watchdog_task()
2802 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2806 if (++adapter->aq_wait_count > IAVF_AQ_MAX_ERR) { in iavf_watchdog_task()
2807 dev_err(&adapter->pdev->dev, in iavf_watchdog_task()
2809 adapter->flags |= IAVF_FLAG_PF_COMMS_FAILED; in iavf_watchdog_task()
2811 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2813 queue_delayed_work(adapter->wq, in iavf_watchdog_task()
2814 &adapter->watchdog_task, (5 * HZ)); in iavf_watchdog_task()
2818 iavf_change_state(adapter, adapter->last_state); in iavf_watchdog_task()
2819 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2821 queue_delayed_work(adapter->wq, &adapter->watchdog_task, HZ); in iavf_watchdog_task()
2825 &adapter->crit_section)) { in iavf_watchdog_task()
2830 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_watchdog_task()
2831 adapter->flags &= ~IAVF_FLAG_PF_COMMS_FAILED; in iavf_watchdog_task()
2832 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2841 dev_err(&adapter->pdev->dev, in iavf_watchdog_task()
2847 iavf_change_state(adapter, __IAVF_STARTUP); in iavf_watchdog_task()
2848 adapter->flags &= ~IAVF_FLAG_PF_COMMS_FAILED; in iavf_watchdog_task()
2850 adapter->aq_required = 0; in iavf_watchdog_task()
2851 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_watchdog_task()
2852 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2854 queue_delayed_work(adapter->wq, in iavf_watchdog_task()
2855 &adapter->watchdog_task, in iavf_watchdog_task()
2859 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2861 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2868 if (adapter->current_op) { in iavf_watchdog_task()
2870 dev_dbg(&adapter->pdev->dev, in iavf_watchdog_task()
2872 iavf_send_api_ver(adapter); in iavf_watchdog_task()
2875 int ret = iavf_process_aq_command(adapter); in iavf_watchdog_task()
2882 adapter->state == __IAVF_RUNNING) in iavf_watchdog_task()
2883 iavf_request_stats(adapter); in iavf_watchdog_task()
2885 if (adapter->state == __IAVF_RUNNING) in iavf_watchdog_task()
2886 iavf_detect_recover_hung(&adapter->vsi); in iavf_watchdog_task()
2890 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2898 adapter->aq_required = 0; in iavf_watchdog_task()
2899 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_watchdog_task()
2900 dev_err(&adapter->pdev->dev, "Hardware reset detected\n"); in iavf_watchdog_task()
2901 iavf_schedule_reset(adapter, IAVF_FLAG_RESET_PENDING); in iavf_watchdog_task()
2902 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2904 queue_delayed_work(adapter->wq, in iavf_watchdog_task()
2905 &adapter->watchdog_task, HZ * 2); in iavf_watchdog_task()
2909 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2912 if (adapter->state >= __IAVF_DOWN) in iavf_watchdog_task()
2913 queue_work(adapter->wq, &adapter->adminq_task); in iavf_watchdog_task()
2914 if (adapter->aq_required) in iavf_watchdog_task()
2915 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2918 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2924 * @adapter: board private structure
2929 static void iavf_disable_vf(struct iavf_adapter *adapter) in iavf_disable_vf() argument
2935 adapter->flags |= IAVF_FLAG_PF_COMMS_FAILED; in iavf_disable_vf()
2941 if (adapter->state == __IAVF_RUNNING) { in iavf_disable_vf()
2942 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_disable_vf()
2943 netif_carrier_off(adapter->netdev); in iavf_disable_vf()
2944 netif_tx_disable(adapter->netdev); in iavf_disable_vf()
2945 adapter->link_up = false; in iavf_disable_vf()
2946 iavf_napi_disable_all(adapter); in iavf_disable_vf()
2947 iavf_irq_disable(adapter); in iavf_disable_vf()
2948 iavf_free_traffic_irqs(adapter); in iavf_disable_vf()
2949 iavf_free_all_tx_resources(adapter); in iavf_disable_vf()
2950 iavf_free_all_rx_resources(adapter); in iavf_disable_vf()
2953 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_disable_vf()
2956 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_disable_vf()
2961 list_for_each_entry_safe(fv, fvtmp, &adapter->vlan_filter_list, list) { in iavf_disable_vf()
2965 adapter->num_vlan_filters = 0; in iavf_disable_vf()
2967 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_disable_vf()
2969 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_disable_vf()
2970 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, list) { in iavf_disable_vf()
2973 adapter->num_cloud_filters--; in iavf_disable_vf()
2975 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_disable_vf()
2977 iavf_free_misc_irq(adapter); in iavf_disable_vf()
2978 iavf_free_interrupt_scheme(adapter); in iavf_disable_vf()
2979 memset(adapter->vf_res, 0, IAVF_VIRTCHNL_VF_RESOURCE_SIZE); in iavf_disable_vf()
2980 iavf_shutdown_adminq(&adapter->hw); in iavf_disable_vf()
2981 adapter->flags &= ~IAVF_FLAG_RESET_PENDING; in iavf_disable_vf()
2982 iavf_change_state(adapter, __IAVF_DOWN); in iavf_disable_vf()
2983 wake_up(&adapter->down_waitqueue); in iavf_disable_vf()
2984 dev_info(&adapter->pdev->dev, "Reset task did not complete, VF disabled\n"); in iavf_disable_vf()
2989 * @adapter: board private structure
2996 static void iavf_reconfig_qs_bw(struct iavf_adapter *adapter) in iavf_reconfig_qs_bw() argument
3000 for (i = 0; i < adapter->num_active_queues; i++) in iavf_reconfig_qs_bw()
3001 if (adapter->tx_rings[i].q_shaper.bw_min || in iavf_reconfig_qs_bw()
3002 adapter->tx_rings[i].q_shaper.bw_max) { in iavf_reconfig_qs_bw()
3003 adapter->tx_rings[i].q_shaper_update = true; in iavf_reconfig_qs_bw()
3008 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_QUEUES_BW; in iavf_reconfig_qs_bw()
3021 struct iavf_adapter *adapter = container_of(work, in iavf_reset_task() local
3024 struct virtchnl_vf_resource *vfres = adapter->vf_res; in iavf_reset_task()
3025 struct net_device *netdev = adapter->netdev; in iavf_reset_task()
3026 struct iavf_hw *hw = &adapter->hw; in iavf_reset_task()
3038 if (!mutex_trylock(&adapter->crit_lock)) { in iavf_reset_task()
3039 if (adapter->state != __IAVF_REMOVE) in iavf_reset_task()
3040 queue_work(adapter->wq, &adapter->reset_task); in iavf_reset_task()
3046 iavf_misc_irq_disable(adapter); in iavf_reset_task()
3047 if (adapter->flags & IAVF_FLAG_RESET_NEEDED) { in iavf_reset_task()
3048 adapter->flags &= ~IAVF_FLAG_RESET_NEEDED; in iavf_reset_task()
3054 iavf_request_reset(adapter); in iavf_reset_task()
3056 adapter->flags |= IAVF_FLAG_RESET_PENDING; in iavf_reset_task()
3067 dev_info(&adapter->pdev->dev, "Never saw reset\n"); in iavf_reset_task()
3082 pci_set_master(adapter->pdev); in iavf_reset_task()
3083 pci_restore_msi_state(adapter->pdev); in iavf_reset_task()
3086 dev_err(&adapter->pdev->dev, "Reset never finished (%x)\n", in iavf_reset_task()
3088 iavf_disable_vf(adapter); in iavf_reset_task()
3089 mutex_unlock(&adapter->crit_lock); in iavf_reset_task()
3099 running = adapter->state == __IAVF_RUNNING; in iavf_reset_task()
3104 adapter->link_up = false; in iavf_reset_task()
3105 iavf_napi_disable_all(adapter); in iavf_reset_task()
3107 iavf_irq_disable(adapter); in iavf_reset_task()
3109 iavf_change_state(adapter, __IAVF_RESETTING); in iavf_reset_task()
3110 adapter->flags &= ~IAVF_FLAG_RESET_PENDING; in iavf_reset_task()
3115 iavf_free_all_rx_resources(adapter); in iavf_reset_task()
3116 iavf_free_all_tx_resources(adapter); in iavf_reset_task()
3118 adapter->flags |= IAVF_FLAG_QUEUES_DISABLED; in iavf_reset_task()
3121 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_reset_task()
3124 dev_info(&adapter->pdev->dev, "Failed to init adminq: %d\n", in iavf_reset_task()
3128 adapter->aq_required = 0; in iavf_reset_task()
3130 if ((adapter->flags & IAVF_FLAG_REINIT_MSIX_NEEDED) || in iavf_reset_task()
3131 (adapter->flags & IAVF_FLAG_REINIT_ITR_NEEDED)) { in iavf_reset_task()
3132 err = iavf_reinit_interrupt_scheme(adapter, running); in iavf_reset_task()
3137 if (RSS_AQ(adapter)) { in iavf_reset_task()
3138 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_RSS; in iavf_reset_task()
3140 err = iavf_init_rss(adapter); in iavf_reset_task()
3145 adapter->aq_required |= IAVF_FLAG_AQ_GET_CONFIG; in iavf_reset_task()
3152 adapter->aq_required |= IAVF_FLAG_AQ_GET_OFFLOAD_VLAN_V2_CAPS; in iavf_reset_task()
3153 adapter->aq_required |= IAVF_FLAG_AQ_MAP_VECTORS; in iavf_reset_task()
3155 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_reset_task()
3161 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_reset_task()
3162 if (ether_addr_equal(f->macaddr, adapter->hw.mac.addr)) { in iavf_reset_task()
3168 list_for_each_entry(f, &adapter->mac_filter_list, list) { in iavf_reset_task()
3171 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_reset_task()
3174 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_reset_task()
3176 adapter->num_tc) { in iavf_reset_task()
3177 list_for_each_entry(cf, &adapter->cloud_filter_list, list) { in iavf_reset_task()
3181 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_reset_task()
3183 adapter->aq_required |= IAVF_FLAG_AQ_ADD_MAC_FILTER; in iavf_reset_task()
3184 adapter->aq_required |= IAVF_FLAG_AQ_ADD_CLOUD_FILTER; in iavf_reset_task()
3185 iavf_misc_irq_enable(adapter); in iavf_reset_task()
3187 mod_delayed_work(adapter->wq, &adapter->watchdog_task, 2); in iavf_reset_task()
3194 err = iavf_setup_all_tx_resources(adapter); in iavf_reset_task()
3199 err = iavf_setup_all_rx_resources(adapter); in iavf_reset_task()
3203 if ((adapter->flags & IAVF_FLAG_REINIT_MSIX_NEEDED) || in iavf_reset_task()
3204 (adapter->flags & IAVF_FLAG_REINIT_ITR_NEEDED)) { in iavf_reset_task()
3205 err = iavf_request_traffic_irqs(adapter, netdev->name); in iavf_reset_task()
3209 adapter->flags &= ~IAVF_FLAG_REINIT_MSIX_NEEDED; in iavf_reset_task()
3212 iavf_configure(adapter); in iavf_reset_task()
3217 iavf_up_complete(adapter); in iavf_reset_task()
3219 iavf_irq_enable(adapter, true); in iavf_reset_task()
3221 iavf_reconfig_qs_bw(adapter); in iavf_reset_task()
3223 iavf_change_state(adapter, __IAVF_DOWN); in iavf_reset_task()
3224 wake_up(&adapter->down_waitqueue); in iavf_reset_task()
3227 adapter->flags &= ~IAVF_FLAG_REINIT_ITR_NEEDED; in iavf_reset_task()
3229 wake_up(&adapter->reset_waitqueue); in iavf_reset_task()
3230 mutex_unlock(&adapter->crit_lock); in iavf_reset_task()
3236 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_reset_task()
3237 iavf_free_traffic_irqs(adapter); in iavf_reset_task()
3239 iavf_disable_vf(adapter); in iavf_reset_task()
3241 mutex_unlock(&adapter->crit_lock); in iavf_reset_task()
3243 dev_err(&adapter->pdev->dev, "failed to allocate resources during reinit\n"); in iavf_reset_task()
3252 struct iavf_adapter *adapter = in iavf_adminq_task() local
3254 struct iavf_hw *hw = &adapter->hw; in iavf_adminq_task()
3261 if (!mutex_trylock(&adapter->crit_lock)) { in iavf_adminq_task()
3262 if (adapter->state == __IAVF_REMOVE) in iavf_adminq_task()
3265 queue_work(adapter->wq, &adapter->adminq_task); in iavf_adminq_task()
3269 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) in iavf_adminq_task()
3285 iavf_virtchnl_completion(adapter, v_op, v_ret, event.msg_buf, in iavf_adminq_task()
3291 if (iavf_is_reset_in_progress(adapter)) in iavf_adminq_task()
3300 dev_info(&adapter->pdev->dev, "ARQ VF Error detected\n"); in iavf_adminq_task()
3304 dev_info(&adapter->pdev->dev, "ARQ Overflow Error detected\n"); in iavf_adminq_task()
3308 dev_info(&adapter->pdev->dev, "ARQ Critical Error detected\n"); in iavf_adminq_task()
3317 dev_info(&adapter->pdev->dev, "ASQ VF Error detected\n"); in iavf_adminq_task()
3321 dev_info(&adapter->pdev->dev, "ASQ Overflow Error detected\n"); in iavf_adminq_task()
3325 dev_info(&adapter->pdev->dev, "ASQ Critical Error detected\n"); in iavf_adminq_task()
3334 mutex_unlock(&adapter->crit_lock); in iavf_adminq_task()
3337 iavf_misc_irq_enable(adapter); in iavf_adminq_task()
3342 * @adapter: board private structure
3346 void iavf_free_all_tx_resources(struct iavf_adapter *adapter) in iavf_free_all_tx_resources() argument
3350 if (!adapter->tx_rings) in iavf_free_all_tx_resources()
3353 for (i = 0; i < adapter->num_active_queues; i++) in iavf_free_all_tx_resources()
3354 if (adapter->tx_rings[i].desc) in iavf_free_all_tx_resources()
3355 iavf_free_tx_resources(&adapter->tx_rings[i]); in iavf_free_all_tx_resources()
3360 * @adapter: board private structure
3368 static int iavf_setup_all_tx_resources(struct iavf_adapter *adapter) in iavf_setup_all_tx_resources() argument
3372 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_setup_all_tx_resources()
3373 adapter->tx_rings[i].count = adapter->tx_desc_count; in iavf_setup_all_tx_resources()
3374 err = iavf_setup_tx_descriptors(&adapter->tx_rings[i]); in iavf_setup_all_tx_resources()
3377 dev_err(&adapter->pdev->dev, in iavf_setup_all_tx_resources()
3387 * @adapter: board private structure
3395 static int iavf_setup_all_rx_resources(struct iavf_adapter *adapter) in iavf_setup_all_rx_resources() argument
3399 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_setup_all_rx_resources()
3400 adapter->rx_rings[i].count = adapter->rx_desc_count; in iavf_setup_all_rx_resources()
3401 err = iavf_setup_rx_descriptors(&adapter->rx_rings[i]); in iavf_setup_all_rx_resources()
3404 dev_err(&adapter->pdev->dev, in iavf_setup_all_rx_resources()
3413 * @adapter: board private structure
3417 void iavf_free_all_rx_resources(struct iavf_adapter *adapter) in iavf_free_all_rx_resources() argument
3421 if (!adapter->rx_rings) in iavf_free_all_rx_resources()
3424 for (i = 0; i < adapter->num_active_queues; i++) in iavf_free_all_rx_resources()
3425 if (adapter->rx_rings[i].desc) in iavf_free_all_rx_resources()
3426 iavf_free_rx_resources(&adapter->rx_rings[i]); in iavf_free_all_rx_resources()
3431 * @adapter: board private structure
3434 static int iavf_validate_tx_bandwidth(struct iavf_adapter *adapter, in iavf_validate_tx_bandwidth() argument
3439 if (ADV_LINK_SUPPORT(adapter)) { in iavf_validate_tx_bandwidth()
3440 if (adapter->link_speed_mbps < U32_MAX) { in iavf_validate_tx_bandwidth()
3441 speed = adapter->link_speed_mbps; in iavf_validate_tx_bandwidth()
3444 dev_err(&adapter->pdev->dev, "Unknown link speed\n"); in iavf_validate_tx_bandwidth()
3449 switch (adapter->link_speed) { in iavf_validate_tx_bandwidth()
3480 dev_err(&adapter->pdev->dev, in iavf_validate_tx_bandwidth()
3490 * @adapter: board private structure
3497 static int iavf_validate_ch_config(struct iavf_adapter *adapter, in iavf_validate_ch_config() argument
3515 dev_err(&adapter->pdev->dev, in iavf_validate_ch_config()
3527 dev_err(&adapter->pdev->dev, in iavf_validate_ch_config()
3536 dev_err(&adapter->pdev->dev, in iavf_validate_ch_config()
3545 if (num_qps > adapter->num_active_queues) { in iavf_validate_ch_config()
3546 dev_err(&adapter->pdev->dev, in iavf_validate_ch_config()
3551 ret = iavf_validate_tx_bandwidth(adapter, total_max_rate); in iavf_validate_ch_config()
3557 * @adapter: board private structure
3559 static void iavf_del_all_cloud_filters(struct iavf_adapter *adapter) in iavf_del_all_cloud_filters() argument
3563 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_del_all_cloud_filters()
3564 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, in iavf_del_all_cloud_filters()
3568 adapter->num_cloud_filters--; in iavf_del_all_cloud_filters()
3570 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_del_all_cloud_filters()
3575 * TC config already configured on this adapter.
3576 * @adapter: board private structure
3580 * with the config already configured on the adapter.
3584 static bool iavf_is_tc_config_same(struct iavf_adapter *adapter, in iavf_is_tc_config_same() argument
3587 struct virtchnl_channel_info *ch = &adapter->ch_config.ch_info[0]; in iavf_is_tc_config_same()
3590 if (adapter->num_tc != mqprio_qopt->num_tc) in iavf_is_tc_config_same()
3593 for (i = 0; i < adapter->num_tc; i++) { in iavf_is_tc_config_same()
3615 struct iavf_adapter *adapter = netdev_priv(netdev); in __iavf_setup_tc() local
3616 struct virtchnl_vf_resource *vfres = adapter->vf_res; in __iavf_setup_tc()
3628 if (adapter->ch_config.state == __IAVF_TC_RUNNING) { in __iavf_setup_tc()
3631 adapter->num_tc = 0; in __iavf_setup_tc()
3634 iavf_del_all_cloud_filters(adapter); in __iavf_setup_tc()
3635 adapter->aq_required = IAVF_FLAG_AQ_DISABLE_CHANNELS; in __iavf_setup_tc()
3636 total_qps = adapter->orig_num_active_queues; in __iavf_setup_tc()
3646 dev_err(&adapter->pdev->dev, "ADq not supported\n"); in __iavf_setup_tc()
3649 if (adapter->ch_config.state != __IAVF_TC_INVALID) { in __iavf_setup_tc()
3650 dev_err(&adapter->pdev->dev, "TC configuration already exists\n"); in __iavf_setup_tc()
3654 ret = iavf_validate_ch_config(adapter, mqprio_qopt); in __iavf_setup_tc()
3658 if (iavf_is_tc_config_same(adapter, &mqprio_qopt->qopt)) in __iavf_setup_tc()
3660 adapter->num_tc = num_tc; in __iavf_setup_tc()
3664 adapter->ch_config.ch_info[i].count = in __iavf_setup_tc()
3666 adapter->ch_config.ch_info[i].offset = in __iavf_setup_tc()
3673 adapter->ch_config.ch_info[i].max_tx_rate = in __iavf_setup_tc()
3676 adapter->ch_config.ch_info[i].count = 1; in __iavf_setup_tc()
3677 adapter->ch_config.ch_info[i].offset = 0; in __iavf_setup_tc()
3687 adapter->orig_num_active_queues = adapter->num_active_queues; in __iavf_setup_tc()
3693 adapter->ch_config.total_qps = total_qps; in __iavf_setup_tc()
3697 adapter->aq_required |= IAVF_FLAG_AQ_ENABLE_CHANNELS; in __iavf_setup_tc()
3700 netdev_set_num_tc(adapter->netdev, num_tc); in __iavf_setup_tc()
3711 if (test_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section)) in __iavf_setup_tc()
3724 * @adapter: board private structure
3728 static int iavf_parse_cls_flower(struct iavf_adapter *adapter, in iavf_parse_cls_flower() argument
3751 dev_err(&adapter->pdev->dev, "Unsupported key used: 0x%llx\n", in iavf_parse_cls_flower()
3784 dev_info(&adapter->pdev->dev, "Only TCP transport is supported\n"); in iavf_parse_cls_flower()
3799 dev_err(&adapter->pdev->dev, "Bad ether dest mask %pM\n", in iavf_parse_cls_flower()
3809 dev_err(&adapter->pdev->dev, "Bad ether src mask %pM\n", in iavf_parse_cls_flower()
3844 dev_err(&adapter->pdev->dev, "Bad vlan mask %u\n", in iavf_parse_cls_flower()
3872 dev_err(&adapter->pdev->dev, "Bad ip dst mask 0x%08x\n", in iavf_parse_cls_flower()
3882 dev_err(&adapter->pdev->dev, "Bad ip src mask 0x%08x\n", in iavf_parse_cls_flower()
3889 dev_info(&adapter->pdev->dev, "Tenant id not allowed for ip filter\n"); in iavf_parse_cls_flower()
3909 dev_err(&adapter->pdev->dev, "Bad ipv6 dst mask 0x%02x\n", in iavf_parse_cls_flower()
3919 dev_err(&adapter->pdev->dev, in iavf_parse_cls_flower()
3944 dev_err(&adapter->pdev->dev, "Bad src port mask %u\n", in iavf_parse_cls_flower()
3954 dev_err(&adapter->pdev->dev, "Bad dst port mask %u\n", in iavf_parse_cls_flower()
3976 * @adapter: board private structure
3980 static int iavf_handle_tclass(struct iavf_adapter *adapter, u32 tc, in iavf_handle_tclass() argument
3985 if (tc < adapter->num_tc) { in iavf_handle_tclass()
3987 dev_err(&adapter->pdev->dev, in iavf_handle_tclass()
4000 * @adapter: Board private structure
4006 static struct iavf_cloud_filter *iavf_find_cf(struct iavf_adapter *adapter, in iavf_find_cf() argument
4014 list_for_each_entry(filter, &adapter->cloud_filter_list, list) { in iavf_find_cf()
4023 * @adapter: board private structure
4026 static int iavf_configure_clsflower(struct iavf_adapter *adapter, in iavf_configure_clsflower() argument
4029 int tc = tc_classid_to_hwtc(adapter->netdev, cls_flower->classid); in iavf_configure_clsflower()
4034 dev_err(&adapter->pdev->dev, "Invalid traffic class\n"); in iavf_configure_clsflower()
4042 while (!mutex_trylock(&adapter->crit_lock)) { in iavf_configure_clsflower()
4053 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_configure_clsflower()
4054 if (iavf_find_cf(adapter, &cls_flower->cookie)) { in iavf_configure_clsflower()
4055 dev_err(&adapter->pdev->dev, "Failed to add TC Flower filter, it already exists\n"); in iavf_configure_clsflower()
4059 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_configure_clsflower()
4065 err = iavf_parse_cls_flower(adapter, cls_flower, filter); in iavf_configure_clsflower()
4069 err = iavf_handle_tclass(adapter, tc, filter); in iavf_configure_clsflower()
4074 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_configure_clsflower()
4075 list_add_tail(&filter->list, &adapter->cloud_filter_list); in iavf_configure_clsflower()
4076 adapter->num_cloud_filters++; in iavf_configure_clsflower()
4078 adapter->aq_required |= IAVF_FLAG_AQ_ADD_CLOUD_FILTER; in iavf_configure_clsflower()
4080 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_configure_clsflower()
4085 mutex_unlock(&adapter->crit_lock); in iavf_configure_clsflower()
4091 * @adapter: board private structure
4094 static int iavf_delete_clsflower(struct iavf_adapter *adapter, in iavf_delete_clsflower() argument
4100 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_delete_clsflower()
4101 filter = iavf_find_cf(adapter, &cls_flower->cookie); in iavf_delete_clsflower()
4104 adapter->aq_required |= IAVF_FLAG_AQ_DEL_CLOUD_FILTER; in iavf_delete_clsflower()
4108 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_delete_clsflower()
4115 * @adapter: pointer to iavf adapter structure
4118 static int iavf_setup_tc_cls_flower(struct iavf_adapter *adapter, in iavf_setup_tc_cls_flower() argument
4123 return iavf_configure_clsflower(adapter, cls_flower); in iavf_setup_tc_cls_flower()
4125 return iavf_delete_clsflower(adapter, cls_flower); in iavf_setup_tc_cls_flower()
4135 * @adapter: pointer to iavf adapter structure
4140 static int iavf_add_cls_u32(struct iavf_adapter *adapter, in iavf_add_cls_u32() argument
4213 if (q_index >= adapter->num_active_queues) { in iavf_add_cls_u32()
4235 fltr->vc_add_msg.vsi_id = adapter->vsi.id; in iavf_add_cls_u32()
4237 return iavf_fdir_add_fltr(adapter, fltr); in iavf_add_cls_u32()
4246 * @adapter: pointer to iavf adapter structure
4251 static int iavf_del_cls_u32(struct iavf_adapter *adapter, in iavf_del_cls_u32() argument
4254 return iavf_fdir_del_fltr(adapter, true, cls_u32->knode.handle); in iavf_del_cls_u32()
4259 * @adapter: pointer to iavf adapter structure
4264 static int iavf_setup_tc_cls_u32(struct iavf_adapter *adapter, in iavf_setup_tc_cls_u32() argument
4267 if (!TC_U32_SUPPORT(adapter) || !FDIR_FLTR_SUPPORT(adapter)) in iavf_setup_tc_cls_u32()
4273 return iavf_add_cls_u32(adapter, cls_u32); in iavf_setup_tc_cls_u32()
4275 return iavf_del_cls_u32(adapter, cls_u32); in iavf_setup_tc_cls_u32()
4292 struct iavf_adapter *adapter = cb_priv; in iavf_setup_tc_block_cb() local
4294 if (!tc_cls_can_offload_and_chain0(adapter->netdev, type_data)) in iavf_setup_tc_block_cb()
4323 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_setup_tc() local
4332 adapter, adapter, true); in iavf_setup_tc()
4340 * @adapter: board private structure
4344 static void iavf_restore_fdir_filters(struct iavf_adapter *adapter) in iavf_restore_fdir_filters() argument
4348 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_restore_fdir_filters()
4349 list_for_each_entry(f, &adapter->fdir_list_head, list) { in iavf_restore_fdir_filters()
4359 adapter->aq_required |= IAVF_FLAG_AQ_ADD_FDIR_FILTER; in iavf_restore_fdir_filters()
4362 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_restore_fdir_filters()
4379 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_open() local
4382 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) { in iavf_open()
4383 dev_err(&adapter->pdev->dev, "Unable to open device due to PF driver failure.\n"); in iavf_open()
4388 while (!mutex_trylock(&adapter->crit_lock)) { in iavf_open()
4394 if (adapter->state == __IAVF_INIT_CONFIG_ADAPTER) { in iavf_open()
4402 if (adapter->state != __IAVF_DOWN) { in iavf_open()
4407 if (adapter->state == __IAVF_RUNNING && in iavf_open()
4408 !test_bit(__IAVF_VSI_DOWN, adapter->vsi.state)) { in iavf_open()
4409 dev_dbg(&adapter->pdev->dev, "VF is already open.\n"); in iavf_open()
4415 err = iavf_setup_all_tx_resources(adapter); in iavf_open()
4420 err = iavf_setup_all_rx_resources(adapter); in iavf_open()
4425 err = iavf_request_traffic_irqs(adapter, netdev->name); in iavf_open()
4429 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_open()
4431 iavf_add_filter(adapter, adapter->hw.mac.addr); in iavf_open()
4433 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_open()
4436 iavf_restore_filters(adapter); in iavf_open()
4437 iavf_restore_fdir_filters(adapter); in iavf_open()
4439 iavf_configure(adapter); in iavf_open()
4441 iavf_up_complete(adapter); in iavf_open()
4443 iavf_irq_enable(adapter, true); in iavf_open()
4445 mutex_unlock(&adapter->crit_lock); in iavf_open()
4451 iavf_down(adapter); in iavf_open()
4452 iavf_free_traffic_irqs(adapter); in iavf_open()
4454 iavf_free_all_rx_resources(adapter); in iavf_open()
4456 iavf_free_all_tx_resources(adapter); in iavf_open()
4458 mutex_unlock(&adapter->crit_lock); in iavf_open()
4477 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_close() local
4482 mutex_lock(&adapter->crit_lock); in iavf_close()
4484 if (adapter->state <= __IAVF_DOWN_PENDING) { in iavf_close()
4485 mutex_unlock(&adapter->crit_lock); in iavf_close()
4490 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_close()
4500 aq_to_restore = adapter->aq_required; in iavf_close()
4501 adapter->aq_required &= IAVF_FLAG_AQ_GET_CONFIG; in iavf_close()
4515 iavf_down(adapter); in iavf_close()
4516 iavf_change_state(adapter, __IAVF_DOWN_PENDING); in iavf_close()
4517 iavf_free_traffic_irqs(adapter); in iavf_close()
4519 mutex_unlock(&adapter->crit_lock); in iavf_close()
4533 status = wait_event_timeout(adapter->down_waitqueue, in iavf_close()
4534 adapter->state == __IAVF_DOWN, in iavf_close()
4539 mutex_lock(&adapter->crit_lock); in iavf_close()
4540 adapter->aq_required |= aq_to_restore; in iavf_close()
4541 mutex_unlock(&adapter->crit_lock); in iavf_close()
4554 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_change_mtu() local
4562 iavf_schedule_reset(adapter, IAVF_FLAG_RESET_NEEDED); in iavf_change_mtu()
4563 ret = iavf_wait_for_reset(adapter); in iavf_change_mtu()
4575 * @adapter: board private structure
4577 static void iavf_disable_fdir(struct iavf_adapter *adapter) in iavf_disable_fdir() argument
4582 adapter->flags &= ~IAVF_FLAG_FDIR_ENABLED; in iavf_disable_fdir()
4585 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_disable_fdir()
4586 list_for_each_entry_safe(fdir, fdirtmp, &adapter->fdir_list_head, in iavf_disable_fdir()
4592 iavf_dec_fdir_active_fltr(adapter, fdir); in iavf_disable_fdir()
4608 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_disable_fdir()
4611 adapter->aq_required |= IAVF_FLAG_AQ_DEL_FDIR_FILTER; in iavf_disable_fdir()
4612 mod_delayed_work(adapter->wq, &adapter->watchdog_task, 0); in iavf_disable_fdir()
4630 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_set_features() local
4635 iavf_set_vlan_offload_features(adapter, netdev->features, in iavf_set_features()
4637 if (CRC_OFFLOAD_ALLOWED(adapter) && in iavf_set_features()
4639 iavf_schedule_reset(adapter, IAVF_FLAG_RESET_NEEDED); in iavf_set_features()
4643 adapter->flags |= IAVF_FLAG_FDIR_ENABLED; in iavf_set_features()
4645 iavf_disable_fdir(adapter); in iavf_set_features()
4711 * @adapter: board private structure
4717 iavf_get_netdev_vlan_hw_features(struct iavf_adapter *adapter) in iavf_get_netdev_vlan_hw_features() argument
4721 if (!adapter->vf_res || !adapter->vf_res->vf_cap_flags) in iavf_get_netdev_vlan_hw_features()
4725 if (VLAN_ALLOWED(adapter)) { in iavf_get_netdev_vlan_hw_features()
4728 } else if (VLAN_V2_ALLOWED(adapter)) { in iavf_get_netdev_vlan_hw_features()
4730 &adapter->vlan_v2_caps; in iavf_get_netdev_vlan_hw_features()
4768 if (CRC_OFFLOAD_ALLOWED(adapter)) in iavf_get_netdev_vlan_hw_features()
4776 * @adapter: board private structure
4782 iavf_get_netdev_vlan_features(struct iavf_adapter *adapter) in iavf_get_netdev_vlan_features() argument
4786 if (!adapter->vf_res || !adapter->vf_res->vf_cap_flags) in iavf_get_netdev_vlan_features()
4789 if (VLAN_ALLOWED(adapter)) { in iavf_get_netdev_vlan_features()
4792 } else if (VLAN_V2_ALLOWED(adapter)) { in iavf_get_netdev_vlan_features()
4794 &adapter->vlan_v2_caps; in iavf_get_netdev_vlan_features()
4879 * @adapter: board private structure
4883 iavf_fix_netdev_vlan_features(struct iavf_adapter *adapter, in iavf_fix_netdev_vlan_features() argument
4888 allowed_features = iavf_get_netdev_vlan_hw_features(adapter) | in iavf_fix_netdev_vlan_features()
4889 iavf_get_netdev_vlan_features(adapter); in iavf_fix_netdev_vlan_features()
4924 adapter->vlan_v2_caps.offloads.ethertype_match == in iavf_fix_netdev_vlan_features()
4926 …netdev_warn(adapter->netdev, "cannot support CTAG and STAG VLAN stripping and/or insertion simulta… in iavf_fix_netdev_vlan_features()
4936 * @adapter: board private structure
4942 iavf_fix_strip_features(struct iavf_adapter *adapter, in iavf_fix_strip_features() argument
4945 struct net_device *netdev = adapter->netdev; in iavf_fix_strip_features()
4950 crc_offload_req = CRC_OFFLOAD_ALLOWED(adapter) && in iavf_fix_strip_features()
4952 num_non_zero_vlan = iavf_get_num_vlans_added(adapter); in iavf_fix_strip_features()
4993 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_fix_features() local
4995 features = iavf_fix_netdev_vlan_features(adapter, features); in iavf_fix_features()
4997 if (!FDIR_FLTR_SUPPORT(adapter)) in iavf_fix_features()
5000 return iavf_fix_strip_features(adapter, features); in iavf_fix_features()
5008 struct iavf_adapter *adapter = netdev_priv(binding->netdev); in iavf_verify_shaper() local
5012 vf_max = adapter->qos_caps->cap[0].shaper.peak; in iavf_verify_shaper()
5028 struct iavf_adapter *adapter = netdev_priv(binding->netdev); in iavf_shaper_set() local
5033 mutex_lock(&adapter->crit_lock); in iavf_shaper_set()
5034 if (handle->id >= adapter->num_active_queues) in iavf_shaper_set()
5041 tx_ring = &adapter->tx_rings[handle->id]; in iavf_shaper_set()
5047 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_QUEUES_BW; in iavf_shaper_set()
5050 mutex_unlock(&adapter->crit_lock); in iavf_shaper_set()
5058 struct iavf_adapter *adapter = netdev_priv(binding->netdev); in iavf_shaper_del() local
5061 mutex_lock(&adapter->crit_lock); in iavf_shaper_del()
5062 if (handle->id >= adapter->num_active_queues) in iavf_shaper_del()
5065 tx_ring = &adapter->tx_rings[handle->id]; in iavf_shaper_del()
5070 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_QUEUES_BW; in iavf_shaper_del()
5073 mutex_unlock(&adapter->crit_lock); in iavf_shaper_del()
5137 * @adapter: board private structure
5142 int iavf_process_config(struct iavf_adapter *adapter) in iavf_process_config() argument
5144 struct virtchnl_vf_resource *vfres = adapter->vf_res; in iavf_process_config()
5146 struct net_device *netdev = adapter->netdev; in iavf_process_config()
5194 hw_vlan_features = iavf_get_netdev_vlan_hw_features(adapter); in iavf_process_config()
5198 TC_U32_SUPPORT(adapter)) in iavf_process_config()
5205 vlan_features = iavf_get_netdev_vlan_features(adapter); in iavf_process_config()
5212 if (FDIR_FLTR_SUPPORT(adapter)) { in iavf_process_config()
5215 adapter->flags |= IAVF_FLAG_FDIR_ENABLED; in iavf_process_config()
5248 * iavf_probe initializes an adapter identified by a pci_dev structure.
5249 * The OS initialization, configuring of the adapter private structure,
5255 struct iavf_adapter *adapter = NULL; in iavf_probe() local
5289 adapter = netdev_priv(netdev); in iavf_probe()
5291 adapter->netdev = netdev; in iavf_probe()
5292 adapter->pdev = pdev; in iavf_probe()
5294 hw = &adapter->hw; in iavf_probe()
5295 hw->back = adapter; in iavf_probe()
5297 adapter->wq = alloc_ordered_workqueue("%s", WQ_MEM_RECLAIM, in iavf_probe()
5299 if (!adapter->wq) { in iavf_probe()
5304 adapter->msg_enable = BIT(DEFAULT_DEBUG_LEVEL_SHIFT) - 1; in iavf_probe()
5305 iavf_change_state(adapter, __IAVF_STARTUP); in iavf_probe()
5307 /* Call save state here because it relies on the adapter struct. */ in iavf_probe()
5325 len = struct_size(adapter->qos_caps, cap, IAVF_MAX_QOS_TC_NUM); in iavf_probe()
5326 adapter->qos_caps = kzalloc(len, GFP_KERNEL); in iavf_probe()
5327 if (!adapter->qos_caps) { in iavf_probe()
5335 mutex_init(&adapter->crit_lock); in iavf_probe()
5339 spin_lock_init(&adapter->mac_vlan_list_lock); in iavf_probe()
5340 spin_lock_init(&adapter->cloud_filter_list_lock); in iavf_probe()
5341 spin_lock_init(&adapter->fdir_fltr_lock); in iavf_probe()
5342 spin_lock_init(&adapter->adv_rss_lock); in iavf_probe()
5343 spin_lock_init(&adapter->current_netdev_promisc_flags_lock); in iavf_probe()
5345 INIT_LIST_HEAD(&adapter->mac_filter_list); in iavf_probe()
5346 INIT_LIST_HEAD(&adapter->vlan_filter_list); in iavf_probe()
5347 INIT_LIST_HEAD(&adapter->cloud_filter_list); in iavf_probe()
5348 INIT_LIST_HEAD(&adapter->fdir_list_head); in iavf_probe()
5349 INIT_LIST_HEAD(&adapter->adv_rss_list_head); in iavf_probe()
5351 INIT_WORK(&adapter->reset_task, iavf_reset_task); in iavf_probe()
5352 INIT_WORK(&adapter->adminq_task, iavf_adminq_task); in iavf_probe()
5353 INIT_WORK(&adapter->finish_config, iavf_finish_config); in iavf_probe()
5354 INIT_DELAYED_WORK(&adapter->watchdog_task, iavf_watchdog_task); in iavf_probe()
5357 init_waitqueue_head(&adapter->down_waitqueue); in iavf_probe()
5360 init_waitqueue_head(&adapter->reset_waitqueue); in iavf_probe()
5363 init_waitqueue_head(&adapter->vc_waitqueue); in iavf_probe()
5365 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_probe()
5373 destroy_workqueue(adapter->wq); in iavf_probe()
5393 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_suspend() local
5398 mutex_lock(&adapter->crit_lock); in iavf_suspend()
5402 iavf_down(adapter); in iavf_suspend()
5405 iavf_free_misc_irq(adapter); in iavf_suspend()
5406 iavf_reset_interrupt_capability(adapter); in iavf_suspend()
5408 mutex_unlock(&adapter->crit_lock); in iavf_suspend()
5423 struct iavf_adapter *adapter; in iavf_resume() local
5426 adapter = iavf_pdev_to_adapter(pdev); in iavf_resume()
5431 err = iavf_set_interrupt_capability(adapter); in iavf_resume()
5437 err = iavf_request_misc_irq(adapter); in iavf_resume()
5444 queue_work(adapter->wq, &adapter->reset_task); in iavf_resume()
5446 netif_device_attach(adapter->netdev); in iavf_resume()
5467 struct iavf_adapter *adapter; in iavf_remove() local
5476 adapter = iavf_pdev_to_adapter(pdev); in iavf_remove()
5477 hw = &adapter->hw; in iavf_remove()
5479 if (test_and_set_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section)) in iavf_remove()
5486 mutex_lock(&adapter->crit_lock); in iavf_remove()
5487 if (adapter->state == __IAVF_RUNNING || in iavf_remove()
5488 adapter->state == __IAVF_DOWN || in iavf_remove()
5489 adapter->state == __IAVF_INIT_FAILED) { in iavf_remove()
5490 mutex_unlock(&adapter->crit_lock); in iavf_remove()
5494 if (adapter->state == __IAVF_REMOVE) { in iavf_remove()
5495 mutex_unlock(&adapter->crit_lock); in iavf_remove()
5499 mutex_unlock(&adapter->crit_lock); in iavf_remove()
5502 cancel_delayed_work_sync(&adapter->watchdog_task); in iavf_remove()
5503 cancel_work_sync(&adapter->finish_config); in iavf_remove()
5509 mutex_lock(&adapter->crit_lock); in iavf_remove()
5510 dev_info(&adapter->pdev->dev, "Removing device\n"); in iavf_remove()
5511 iavf_change_state(adapter, __IAVF_REMOVE); in iavf_remove()
5513 iavf_request_reset(adapter); in iavf_remove()
5517 iavf_request_reset(adapter); in iavf_remove()
5521 iavf_misc_irq_disable(adapter); in iavf_remove()
5523 cancel_work_sync(&adapter->reset_task); in iavf_remove()
5524 cancel_delayed_work_sync(&adapter->watchdog_task); in iavf_remove()
5525 cancel_work_sync(&adapter->adminq_task); in iavf_remove()
5527 adapter->aq_required = 0; in iavf_remove()
5528 adapter->flags &= ~IAVF_FLAG_REINIT_ITR_NEEDED; in iavf_remove()
5530 iavf_free_all_tx_resources(adapter); in iavf_remove()
5531 iavf_free_all_rx_resources(adapter); in iavf_remove()
5532 iavf_free_misc_irq(adapter); in iavf_remove()
5533 iavf_free_interrupt_scheme(adapter); in iavf_remove()
5535 iavf_free_rss(adapter); in iavf_remove()
5543 mutex_unlock(&adapter->crit_lock); in iavf_remove()
5544 mutex_destroy(&adapter->crit_lock); in iavf_remove()
5549 kfree(adapter->vf_res); in iavf_remove()
5550 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_remove()
5554 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_remove()
5558 list_for_each_entry_safe(vlf, vlftmp, &adapter->vlan_filter_list, in iavf_remove()
5564 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_remove()
5566 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_remove()
5567 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, list) { in iavf_remove()
5571 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_remove()
5573 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_remove()
5574 list_for_each_entry_safe(fdir, fdirtmp, &adapter->fdir_list_head, list) { in iavf_remove()
5578 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_remove()
5580 spin_lock_bh(&adapter->adv_rss_lock); in iavf_remove()
5581 list_for_each_entry_safe(rss, rsstmp, &adapter->adv_rss_list_head, in iavf_remove()
5586 spin_unlock_bh(&adapter->adv_rss_lock); in iavf_remove()
5588 destroy_workqueue(adapter->wq); in iavf_remove()