Lines Matching full:adapter
13 static int iavf_setup_all_tx_resources(struct iavf_adapter *adapter);
14 static int iavf_setup_all_rx_resources(struct iavf_adapter *adapter);
16 static void iavf_init_get_resources(struct iavf_adapter *adapter);
160 * iavf_pdev_to_adapter - go from pci_dev to adapter
170 * @adapter: board private structure
172 static bool iavf_is_reset_in_progress(struct iavf_adapter *adapter) in iavf_is_reset_in_progress() argument
174 if (adapter->state == __IAVF_RESETTING || in iavf_is_reset_in_progress()
175 adapter->flags & (IAVF_FLAG_RESET_PENDING | in iavf_is_reset_in_progress()
184 * @adapter: board private structure
188 int iavf_wait_for_reset(struct iavf_adapter *adapter) in iavf_wait_for_reset() argument
190 int ret = wait_event_interruptible_timeout(adapter->reset_waitqueue, in iavf_wait_for_reset()
191 !iavf_is_reset_in_progress(adapter), in iavf_wait_for_reset()
218 struct iavf_adapter *adapter = (struct iavf_adapter *)hw->back; in iavf_allocate_dma_mem_d() local
224 mem->va = dma_alloc_coherent(&adapter->pdev->dev, mem->size, in iavf_allocate_dma_mem_d()
239 struct iavf_adapter *adapter = (struct iavf_adapter *)hw->back; in iavf_free_dma_mem() local
243 dma_free_coherent(&adapter->pdev->dev, mem->size, in iavf_free_dma_mem()
281 * @adapter: board private structure
284 void iavf_schedule_reset(struct iavf_adapter *adapter, u64 flags) in iavf_schedule_reset() argument
286 if (!test_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section) && in iavf_schedule_reset()
287 !(adapter->flags & in iavf_schedule_reset()
289 adapter->flags |= flags; in iavf_schedule_reset()
290 queue_work(adapter->wq, &adapter->reset_task); in iavf_schedule_reset()
296 * @adapter: board private structure
299 void iavf_schedule_aq_request(struct iavf_adapter *adapter, u64 flags) in iavf_schedule_aq_request() argument
301 adapter->aq_required |= flags; in iavf_schedule_aq_request()
302 mod_delayed_work(adapter->wq, &adapter->watchdog_task, 0); in iavf_schedule_aq_request()
312 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_tx_timeout() local
314 adapter->tx_timeout_count++; in iavf_tx_timeout()
315 iavf_schedule_reset(adapter, IAVF_FLAG_RESET_NEEDED); in iavf_tx_timeout()
320 * @adapter: board private structure
322 static void iavf_misc_irq_disable(struct iavf_adapter *adapter) in iavf_misc_irq_disable() argument
324 struct iavf_hw *hw = &adapter->hw; in iavf_misc_irq_disable()
326 if (!adapter->msix_entries) in iavf_misc_irq_disable()
333 synchronize_irq(adapter->msix_entries[0].vector); in iavf_misc_irq_disable()
338 * @adapter: board private structure
340 static void iavf_misc_irq_enable(struct iavf_adapter *adapter) in iavf_misc_irq_enable() argument
342 struct iavf_hw *hw = &adapter->hw; in iavf_misc_irq_enable()
353 * @adapter: board private structure
355 static void iavf_irq_disable(struct iavf_adapter *adapter) in iavf_irq_disable() argument
358 struct iavf_hw *hw = &adapter->hw; in iavf_irq_disable()
360 if (!adapter->msix_entries) in iavf_irq_disable()
363 for (i = 1; i < adapter->num_msix_vectors; i++) { in iavf_irq_disable()
365 synchronize_irq(adapter->msix_entries[i].vector); in iavf_irq_disable()
372 * @adapter: board private structure
374 static void iavf_irq_enable_queues(struct iavf_adapter *adapter) in iavf_irq_enable_queues() argument
376 struct iavf_hw *hw = &adapter->hw; in iavf_irq_enable_queues()
379 for (i = 1; i < adapter->num_msix_vectors; i++) { in iavf_irq_enable_queues()
388 * @adapter: board private structure
391 void iavf_irq_enable(struct iavf_adapter *adapter, bool flush) in iavf_irq_enable() argument
393 struct iavf_hw *hw = &adapter->hw; in iavf_irq_enable()
395 iavf_misc_irq_enable(adapter); in iavf_irq_enable()
396 iavf_irq_enable_queues(adapter); in iavf_irq_enable()
410 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_msix_aq() local
411 struct iavf_hw *hw = &adapter->hw; in iavf_msix_aq()
417 if (adapter->state != __IAVF_REMOVE) in iavf_msix_aq()
419 queue_work(adapter->wq, &adapter->adminq_task); in iavf_msix_aq()
443 * @adapter: board private structure
448 iavf_map_vector_to_rxq(struct iavf_adapter *adapter, int v_idx, int r_idx) in iavf_map_vector_to_rxq() argument
450 struct iavf_q_vector *q_vector = &adapter->q_vectors[v_idx]; in iavf_map_vector_to_rxq()
451 struct iavf_ring *rx_ring = &adapter->rx_rings[r_idx]; in iavf_map_vector_to_rxq()
452 struct iavf_hw *hw = &adapter->hw; in iavf_map_vector_to_rxq()
456 rx_ring->vsi = &adapter->vsi; in iavf_map_vector_to_rxq()
469 * @adapter: board private structure
474 iavf_map_vector_to_txq(struct iavf_adapter *adapter, int v_idx, int t_idx) in iavf_map_vector_to_txq() argument
476 struct iavf_q_vector *q_vector = &adapter->q_vectors[v_idx]; in iavf_map_vector_to_txq()
477 struct iavf_ring *tx_ring = &adapter->tx_rings[t_idx]; in iavf_map_vector_to_txq()
478 struct iavf_hw *hw = &adapter->hw; in iavf_map_vector_to_txq()
482 tx_ring->vsi = &adapter->vsi; in iavf_map_vector_to_txq()
495 * @adapter: board private structure to initialize
503 static void iavf_map_rings_to_vectors(struct iavf_adapter *adapter) in iavf_map_rings_to_vectors() argument
505 int rings_remaining = adapter->num_active_queues; in iavf_map_rings_to_vectors()
509 q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_map_rings_to_vectors()
512 iavf_map_vector_to_rxq(adapter, vidx, ridx); in iavf_map_rings_to_vectors()
513 iavf_map_vector_to_txq(adapter, vidx, ridx); in iavf_map_rings_to_vectors()
522 adapter->aq_required |= IAVF_FLAG_AQ_MAP_VECTORS; in iavf_map_rings_to_vectors()
554 * @adapter: board private structure
561 iavf_request_traffic_irqs(struct iavf_adapter *adapter, char *basename) in iavf_request_traffic_irqs() argument
568 iavf_irq_disable(adapter); in iavf_request_traffic_irqs()
570 q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_request_traffic_irqs()
573 struct iavf_q_vector *q_vector = &adapter->q_vectors[vector]; in iavf_request_traffic_irqs()
575 irq_num = adapter->msix_entries[vector + NONQ_VECS].vector; in iavf_request_traffic_irqs()
597 dev_info(&adapter->pdev->dev, in iavf_request_traffic_irqs()
619 irq_num = adapter->msix_entries[vector + NONQ_VECS].vector; in iavf_request_traffic_irqs()
622 free_irq(irq_num, &adapter->q_vectors[vector]); in iavf_request_traffic_irqs()
629 * @adapter: board private structure
635 static int iavf_request_misc_irq(struct iavf_adapter *adapter) in iavf_request_misc_irq() argument
637 struct net_device *netdev = adapter->netdev; in iavf_request_misc_irq()
640 snprintf(adapter->misc_vector_name, in iavf_request_misc_irq()
641 sizeof(adapter->misc_vector_name) - 1, "iavf-%s:mbx", in iavf_request_misc_irq()
642 dev_name(&adapter->pdev->dev)); in iavf_request_misc_irq()
643 err = request_irq(adapter->msix_entries[0].vector, in iavf_request_misc_irq()
645 adapter->misc_vector_name, netdev); in iavf_request_misc_irq()
647 dev_err(&adapter->pdev->dev, in iavf_request_misc_irq()
649 adapter->misc_vector_name, err); in iavf_request_misc_irq()
650 free_irq(adapter->msix_entries[0].vector, netdev); in iavf_request_misc_irq()
657 * @adapter: board private structure
661 static void iavf_free_traffic_irqs(struct iavf_adapter *adapter) in iavf_free_traffic_irqs() argument
665 if (!adapter->msix_entries) in iavf_free_traffic_irqs()
668 q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_free_traffic_irqs()
671 irq_num = adapter->msix_entries[vector + NONQ_VECS].vector; in iavf_free_traffic_irqs()
674 free_irq(irq_num, &adapter->q_vectors[vector]); in iavf_free_traffic_irqs()
680 * @adapter: board private structure
684 static void iavf_free_misc_irq(struct iavf_adapter *adapter) in iavf_free_misc_irq() argument
686 struct net_device *netdev = adapter->netdev; in iavf_free_misc_irq()
688 if (!adapter->msix_entries) in iavf_free_misc_irq()
691 free_irq(adapter->msix_entries[0].vector, netdev); in iavf_free_misc_irq()
696 * @adapter: board private structure
700 static void iavf_configure_tx(struct iavf_adapter *adapter) in iavf_configure_tx() argument
702 struct iavf_hw *hw = &adapter->hw; in iavf_configure_tx()
705 for (i = 0; i < adapter->num_active_queues; i++) in iavf_configure_tx()
706 adapter->tx_rings[i].tail = hw->hw_addr + IAVF_QTX_TAIL1(i); in iavf_configure_tx()
711 * @adapter: board private structure
715 static void iavf_configure_rx(struct iavf_adapter *adapter) in iavf_configure_rx() argument
718 struct iavf_hw *hw = &adapter->hw; in iavf_configure_rx()
723 if (!(adapter->flags & IAVF_FLAG_LEGACY_RX)) { in iavf_configure_rx()
724 struct net_device *netdev = adapter->netdev; in iavf_configure_rx()
742 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_configure_rx()
743 adapter->rx_rings[i].tail = hw->hw_addr + IAVF_QRX_TAIL1(i); in iavf_configure_rx()
744 adapter->rx_rings[i].rx_buf_len = rx_buf_len; in iavf_configure_rx()
746 if (adapter->flags & IAVF_FLAG_LEGACY_RX) in iavf_configure_rx()
747 clear_ring_build_skb_enabled(&adapter->rx_rings[i]); in iavf_configure_rx()
749 set_ring_build_skb_enabled(&adapter->rx_rings[i]); in iavf_configure_rx()
755 * @adapter: board private structure
762 iavf_vlan_filter *iavf_find_vlan(struct iavf_adapter *adapter, in iavf_find_vlan() argument
767 list_for_each_entry(f, &adapter->vlan_filter_list, list) { in iavf_find_vlan()
778 * @adapter: board private structure
784 iavf_vlan_filter *iavf_add_vlan(struct iavf_adapter *adapter, in iavf_add_vlan() argument
789 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_add_vlan()
791 f = iavf_find_vlan(adapter, vlan); in iavf_add_vlan()
799 list_add_tail(&f->list, &adapter->vlan_filter_list); in iavf_add_vlan()
801 adapter->num_vlan_filters++; in iavf_add_vlan()
802 iavf_schedule_aq_request(adapter, IAVF_FLAG_AQ_ADD_VLAN_FILTER); in iavf_add_vlan()
806 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_add_vlan()
812 * @adapter: board private structure
815 static void iavf_del_vlan(struct iavf_adapter *adapter, struct iavf_vlan vlan) in iavf_del_vlan() argument
819 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_del_vlan()
821 f = iavf_find_vlan(adapter, vlan); in iavf_del_vlan()
824 iavf_schedule_aq_request(adapter, IAVF_FLAG_AQ_DEL_VLAN_FILTER); in iavf_del_vlan()
827 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_del_vlan()
832 * @adapter: board private structure
836 static void iavf_restore_filters(struct iavf_adapter *adapter) in iavf_restore_filters() argument
841 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_restore_filters()
843 list_for_each_entry(f, &adapter->vlan_filter_list, list) { in iavf_restore_filters()
848 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_restore_filters()
849 adapter->aq_required |= IAVF_FLAG_AQ_ADD_VLAN_FILTER; in iavf_restore_filters()
854 * @adapter: board private structure
856 u16 iavf_get_num_vlans_added(struct iavf_adapter *adapter) in iavf_get_num_vlans_added() argument
858 return adapter->num_vlan_filters; in iavf_get_num_vlans_added()
863 * @adapter: board private structure
869 static u16 iavf_get_max_vlans_allowed(struct iavf_adapter *adapter) in iavf_get_max_vlans_allowed() argument
874 if (VLAN_ALLOWED(adapter)) in iavf_get_max_vlans_allowed()
876 else if (VLAN_V2_ALLOWED(adapter)) in iavf_get_max_vlans_allowed()
877 return adapter->vlan_v2_caps.filtering.max_filters; in iavf_get_max_vlans_allowed()
884 * @adapter: board private structure
886 static bool iavf_max_vlans_added(struct iavf_adapter *adapter) in iavf_max_vlans_added() argument
888 if (iavf_get_num_vlans_added(adapter) < in iavf_max_vlans_added()
889 iavf_get_max_vlans_allowed(adapter)) in iavf_max_vlans_added()
904 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_vlan_rx_add_vid() local
910 if (!VLAN_FILTERING_ALLOWED(adapter)) in iavf_vlan_rx_add_vid()
913 if (iavf_max_vlans_added(adapter)) { in iavf_vlan_rx_add_vid()
915 iavf_get_max_vlans_allowed(adapter)); in iavf_vlan_rx_add_vid()
919 if (!iavf_add_vlan(adapter, IAVF_VLAN(vid, be16_to_cpu(proto)))) in iavf_vlan_rx_add_vid()
934 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_vlan_rx_kill_vid() local
940 iavf_del_vlan(adapter, IAVF_VLAN(vid, be16_to_cpu(proto))); in iavf_vlan_rx_kill_vid()
946 * @adapter: board private structure
953 iavf_mac_filter *iavf_find_filter(struct iavf_adapter *adapter, in iavf_find_filter() argument
961 list_for_each_entry(f, &adapter->mac_filter_list, list) { in iavf_find_filter()
970 * @adapter: board private structure
975 struct iavf_mac_filter *iavf_add_filter(struct iavf_adapter *adapter, in iavf_add_filter() argument
983 f = iavf_find_filter(adapter, macaddr); in iavf_add_filter()
991 list_add_tail(&f->list, &adapter->mac_filter_list); in iavf_add_filter()
995 f->is_primary = ether_addr_equal(macaddr, adapter->hw.mac.addr); in iavf_add_filter()
996 adapter->aq_required |= IAVF_FLAG_AQ_ADD_MAC_FILTER; in iavf_add_filter()
1006 * @adapter: board private structure
1015 static int iavf_replace_primary_mac(struct iavf_adapter *adapter, in iavf_replace_primary_mac() argument
1018 struct iavf_hw *hw = &adapter->hw; in iavf_replace_primary_mac()
1022 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_replace_primary_mac()
1024 new_f = iavf_add_filter(adapter, new_mac); in iavf_replace_primary_mac()
1026 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_replace_primary_mac()
1030 old_f = iavf_find_filter(adapter, hw->mac.addr); in iavf_replace_primary_mac()
1034 adapter->aq_required |= IAVF_FLAG_AQ_DEL_MAC_FILTER; in iavf_replace_primary_mac()
1043 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_replace_primary_mac()
1046 iavf_schedule_aq_request(adapter, IAVF_FLAG_AQ_ADD_MAC_FILTER); in iavf_replace_primary_mac()
1060 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_is_mac_set_handled() local
1064 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_is_mac_set_handled()
1066 f = iavf_find_filter(adapter, macaddr); in iavf_is_mac_set_handled()
1071 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_is_mac_set_handled()
1085 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_set_mac() local
1092 ret = iavf_replace_primary_mac(adapter, addr->sa_data); in iavf_set_mac()
1097 ret = wait_event_interruptible_timeout(adapter->vc_waitqueue, in iavf_set_mac()
1129 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_addr_sync() local
1131 if (iavf_add_filter(adapter, addr)) in iavf_addr_sync()
1147 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_addr_unsync() local
1158 f = iavf_find_filter(adapter, addr); in iavf_addr_unsync()
1161 adapter->aq_required |= IAVF_FLAG_AQ_DEL_MAC_FILTER; in iavf_addr_unsync()
1168 * @adapter: device specific adapter
1170 bool iavf_promiscuous_mode_changed(struct iavf_adapter *adapter) in iavf_promiscuous_mode_changed() argument
1172 return (adapter->current_netdev_promisc_flags ^ adapter->netdev->flags) & in iavf_promiscuous_mode_changed()
1182 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_set_rx_mode() local
1184 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_set_rx_mode()
1187 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_set_rx_mode()
1189 spin_lock_bh(&adapter->current_netdev_promisc_flags_lock); in iavf_set_rx_mode()
1190 if (iavf_promiscuous_mode_changed(adapter)) in iavf_set_rx_mode()
1191 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_PROMISC_MODE; in iavf_set_rx_mode()
1192 spin_unlock_bh(&adapter->current_netdev_promisc_flags_lock); in iavf_set_rx_mode()
1197 * @adapter: board private structure
1199 static void iavf_napi_enable_all(struct iavf_adapter *adapter) in iavf_napi_enable_all() argument
1203 int q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_napi_enable_all()
1208 q_vector = &adapter->q_vectors[q_idx]; in iavf_napi_enable_all()
1216 * @adapter: board private structure
1218 static void iavf_napi_disable_all(struct iavf_adapter *adapter) in iavf_napi_disable_all() argument
1222 int q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_napi_disable_all()
1225 q_vector = &adapter->q_vectors[q_idx]; in iavf_napi_disable_all()
1232 * @adapter: board private structure
1234 static void iavf_configure(struct iavf_adapter *adapter) in iavf_configure() argument
1236 struct net_device *netdev = adapter->netdev; in iavf_configure()
1241 iavf_configure_tx(adapter); in iavf_configure()
1242 iavf_configure_rx(adapter); in iavf_configure()
1243 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_QUEUES; in iavf_configure()
1245 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_configure()
1246 struct iavf_ring *ring = &adapter->rx_rings[i]; in iavf_configure()
1254 * @adapter: board private structure
1258 static void iavf_up_complete(struct iavf_adapter *adapter) in iavf_up_complete() argument
1260 iavf_change_state(adapter, __IAVF_RUNNING); in iavf_up_complete()
1261 clear_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_up_complete()
1263 iavf_napi_enable_all(adapter); in iavf_up_complete()
1265 iavf_schedule_aq_request(adapter, IAVF_FLAG_AQ_ENABLE_QUEUES); in iavf_up_complete()
1271 * @adapter: board private structure
1273 static void iavf_clear_mac_vlan_filters(struct iavf_adapter *adapter) in iavf_clear_mac_vlan_filters() argument
1278 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_clear_mac_vlan_filters()
1280 __dev_uc_unsync(adapter->netdev, NULL); in iavf_clear_mac_vlan_filters()
1281 __dev_mc_unsync(adapter->netdev, NULL); in iavf_clear_mac_vlan_filters()
1284 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, in iavf_clear_mac_vlan_filters()
1295 list_for_each_entry_safe(vlf, vlftmp, &adapter->vlan_filter_list, in iavf_clear_mac_vlan_filters()
1299 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_clear_mac_vlan_filters()
1305 * @adapter: board private structure
1307 static void iavf_clear_cloud_filters(struct iavf_adapter *adapter) in iavf_clear_cloud_filters() argument
1312 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_clear_cloud_filters()
1313 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, in iavf_clear_cloud_filters()
1318 adapter->num_cloud_filters--; in iavf_clear_cloud_filters()
1323 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_clear_cloud_filters()
1329 * @adapter: board private structure
1331 static void iavf_clear_fdir_filters(struct iavf_adapter *adapter) in iavf_clear_fdir_filters() argument
1336 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_clear_fdir_filters()
1337 list_for_each_entry(fdir, &adapter->fdir_list_head, list) { in iavf_clear_fdir_filters()
1349 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_clear_fdir_filters()
1355 * @adapter: board private structure
1357 static void iavf_clear_adv_rss_conf(struct iavf_adapter *adapter) in iavf_clear_adv_rss_conf() argument
1362 spin_lock_bh(&adapter->adv_rss_lock); in iavf_clear_adv_rss_conf()
1363 list_for_each_entry_safe(rss, rsstmp, &adapter->adv_rss_list_head, in iavf_clear_adv_rss_conf()
1372 spin_unlock_bh(&adapter->adv_rss_lock); in iavf_clear_adv_rss_conf()
1377 * @adapter: board private structure
1381 void iavf_down(struct iavf_adapter *adapter) in iavf_down() argument
1383 struct net_device *netdev = adapter->netdev; in iavf_down()
1385 if (adapter->state <= __IAVF_DOWN_PENDING) in iavf_down()
1390 adapter->link_up = false; in iavf_down()
1391 iavf_napi_disable_all(adapter); in iavf_down()
1392 iavf_irq_disable(adapter); in iavf_down()
1394 iavf_clear_mac_vlan_filters(adapter); in iavf_down()
1395 iavf_clear_cloud_filters(adapter); in iavf_down()
1396 iavf_clear_fdir_filters(adapter); in iavf_down()
1397 iavf_clear_adv_rss_conf(adapter); in iavf_down()
1399 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) in iavf_down()
1402 if (!test_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section)) { in iavf_down()
1404 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_down()
1409 if (!list_empty(&adapter->mac_filter_list)) in iavf_down()
1410 adapter->aq_required |= IAVF_FLAG_AQ_DEL_MAC_FILTER; in iavf_down()
1411 if (!list_empty(&adapter->vlan_filter_list)) in iavf_down()
1412 adapter->aq_required |= IAVF_FLAG_AQ_DEL_VLAN_FILTER; in iavf_down()
1413 if (!list_empty(&adapter->cloud_filter_list)) in iavf_down()
1414 adapter->aq_required |= IAVF_FLAG_AQ_DEL_CLOUD_FILTER; in iavf_down()
1415 if (!list_empty(&adapter->fdir_list_head)) in iavf_down()
1416 adapter->aq_required |= IAVF_FLAG_AQ_DEL_FDIR_FILTER; in iavf_down()
1417 if (!list_empty(&adapter->adv_rss_list_head)) in iavf_down()
1418 adapter->aq_required |= IAVF_FLAG_AQ_DEL_ADV_RSS_CFG; in iavf_down()
1421 iavf_schedule_aq_request(adapter, IAVF_FLAG_AQ_DISABLE_QUEUES); in iavf_down()
1426 * @adapter: board private structure
1434 iavf_acquire_msix_vectors(struct iavf_adapter *adapter, int vectors) in iavf_acquire_msix_vectors() argument
1450 err = pci_enable_msix_range(adapter->pdev, adapter->msix_entries, in iavf_acquire_msix_vectors()
1453 dev_err(&adapter->pdev->dev, "Unable to allocate MSI-X interrupts\n"); in iavf_acquire_msix_vectors()
1454 kfree(adapter->msix_entries); in iavf_acquire_msix_vectors()
1455 adapter->msix_entries = NULL; in iavf_acquire_msix_vectors()
1463 adapter->num_msix_vectors = err; in iavf_acquire_msix_vectors()
1469 * @adapter: board private structure to initialize
1473 static void iavf_free_queues(struct iavf_adapter *adapter) in iavf_free_queues() argument
1475 if (!adapter->vsi_res) in iavf_free_queues()
1477 adapter->num_active_queues = 0; in iavf_free_queues()
1478 kfree(adapter->tx_rings); in iavf_free_queues()
1479 adapter->tx_rings = NULL; in iavf_free_queues()
1480 kfree(adapter->rx_rings); in iavf_free_queues()
1481 adapter->rx_rings = NULL; in iavf_free_queues()
1486 * @adapter: board private structure
1493 void iavf_set_queue_vlan_tag_loc(struct iavf_adapter *adapter) in iavf_set_queue_vlan_tag_loc() argument
1497 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_set_queue_vlan_tag_loc()
1498 struct iavf_ring *tx_ring = &adapter->tx_rings[i]; in iavf_set_queue_vlan_tag_loc()
1499 struct iavf_ring *rx_ring = &adapter->rx_rings[i]; in iavf_set_queue_vlan_tag_loc()
1509 if (VLAN_ALLOWED(adapter)) { in iavf_set_queue_vlan_tag_loc()
1512 } else if (VLAN_V2_ALLOWED(adapter)) { in iavf_set_queue_vlan_tag_loc()
1517 &adapter->vlan_v2_caps.offloads.stripping_support; in iavf_set_queue_vlan_tag_loc()
1519 &adapter->vlan_v2_caps.offloads.insertion_support; in iavf_set_queue_vlan_tag_loc()
1566 * @adapter: board private structure to initialize
1572 static int iavf_alloc_queues(struct iavf_adapter *adapter) in iavf_alloc_queues() argument
1581 if (adapter->num_req_queues) in iavf_alloc_queues()
1582 num_active_queues = adapter->num_req_queues; in iavf_alloc_queues()
1583 else if ((adapter->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_ADQ) && in iavf_alloc_queues()
1584 adapter->num_tc) in iavf_alloc_queues()
1585 num_active_queues = adapter->ch_config.total_qps; in iavf_alloc_queues()
1588 adapter->vsi_res->num_queue_pairs, in iavf_alloc_queues()
1592 adapter->tx_rings = kcalloc(num_active_queues, in iavf_alloc_queues()
1594 if (!adapter->tx_rings) in iavf_alloc_queues()
1596 adapter->rx_rings = kcalloc(num_active_queues, in iavf_alloc_queues()
1598 if (!adapter->rx_rings) in iavf_alloc_queues()
1605 tx_ring = &adapter->tx_rings[i]; in iavf_alloc_queues()
1608 tx_ring->netdev = adapter->netdev; in iavf_alloc_queues()
1609 tx_ring->dev = &adapter->pdev->dev; in iavf_alloc_queues()
1610 tx_ring->count = adapter->tx_desc_count; in iavf_alloc_queues()
1612 if (adapter->flags & IAVF_FLAG_WB_ON_ITR_CAPABLE) in iavf_alloc_queues()
1615 rx_ring = &adapter->rx_rings[i]; in iavf_alloc_queues()
1617 rx_ring->netdev = adapter->netdev; in iavf_alloc_queues()
1618 rx_ring->dev = &adapter->pdev->dev; in iavf_alloc_queues()
1619 rx_ring->count = adapter->rx_desc_count; in iavf_alloc_queues()
1623 adapter->num_active_queues = num_active_queues; in iavf_alloc_queues()
1625 iavf_set_queue_vlan_tag_loc(adapter); in iavf_alloc_queues()
1630 iavf_free_queues(adapter); in iavf_alloc_queues()
1636 * @adapter: board private structure to initialize
1641 static int iavf_set_interrupt_capability(struct iavf_adapter *adapter) in iavf_set_interrupt_capability() argument
1647 if (!adapter->vsi_res) { in iavf_set_interrupt_capability()
1651 pairs = adapter->num_active_queues; in iavf_set_interrupt_capability()
1659 (int)adapter->vf_res->max_vectors); in iavf_set_interrupt_capability()
1661 adapter->msix_entries = kcalloc(v_budget, in iavf_set_interrupt_capability()
1663 if (!adapter->msix_entries) { in iavf_set_interrupt_capability()
1669 adapter->msix_entries[vector].entry = vector; in iavf_set_interrupt_capability()
1671 err = iavf_acquire_msix_vectors(adapter, v_budget); in iavf_set_interrupt_capability()
1673 iavf_schedule_finish_config(adapter); in iavf_set_interrupt_capability()
1681 * @adapter: board private structure
1685 static int iavf_config_rss_aq(struct iavf_adapter *adapter) in iavf_config_rss_aq() argument
1688 (struct iavf_aqc_get_set_rss_key_data *)adapter->rss_key; in iavf_config_rss_aq()
1689 struct iavf_hw *hw = &adapter->hw; in iavf_config_rss_aq()
1692 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_config_rss_aq()
1694 dev_err(&adapter->pdev->dev, "Cannot configure RSS, command %d pending\n", in iavf_config_rss_aq()
1695 adapter->current_op); in iavf_config_rss_aq()
1699 status = iavf_aq_set_rss_key(hw, adapter->vsi.id, rss_key); in iavf_config_rss_aq()
1701 dev_err(&adapter->pdev->dev, "Cannot set RSS key, err %s aq_err %s\n", in iavf_config_rss_aq()
1708 status = iavf_aq_set_rss_lut(hw, adapter->vsi.id, false, in iavf_config_rss_aq()
1709 adapter->rss_lut, adapter->rss_lut_size); in iavf_config_rss_aq()
1711 dev_err(&adapter->pdev->dev, "Cannot set RSS lut, err %s aq_err %s\n", in iavf_config_rss_aq()
1723 * @adapter: board private structure
1727 static int iavf_config_rss_reg(struct iavf_adapter *adapter) in iavf_config_rss_reg() argument
1729 struct iavf_hw *hw = &adapter->hw; in iavf_config_rss_reg()
1733 dw = (u32 *)adapter->rss_key; in iavf_config_rss_reg()
1734 for (i = 0; i <= adapter->rss_key_size / 4; i++) in iavf_config_rss_reg()
1737 dw = (u32 *)adapter->rss_lut; in iavf_config_rss_reg()
1738 for (i = 0; i <= adapter->rss_lut_size / 4; i++) in iavf_config_rss_reg()
1748 * @adapter: board private structure
1752 int iavf_config_rss(struct iavf_adapter *adapter) in iavf_config_rss() argument
1755 if (RSS_PF(adapter)) { in iavf_config_rss()
1756 adapter->aq_required |= IAVF_FLAG_AQ_SET_RSS_LUT | in iavf_config_rss()
1759 } else if (RSS_AQ(adapter)) { in iavf_config_rss()
1760 return iavf_config_rss_aq(adapter); in iavf_config_rss()
1762 return iavf_config_rss_reg(adapter); in iavf_config_rss()
1768 * @adapter: board private structure
1770 static void iavf_fill_rss_lut(struct iavf_adapter *adapter) in iavf_fill_rss_lut() argument
1774 for (i = 0; i < adapter->rss_lut_size; i++) in iavf_fill_rss_lut()
1775 adapter->rss_lut[i] = i % adapter->num_active_queues; in iavf_fill_rss_lut()
1780 * @adapter: board private structure
1784 static int iavf_init_rss(struct iavf_adapter *adapter) in iavf_init_rss() argument
1786 struct iavf_hw *hw = &adapter->hw; in iavf_init_rss()
1788 if (!RSS_PF(adapter)) { in iavf_init_rss()
1790 if (adapter->vf_res->vf_cap_flags & in iavf_init_rss()
1792 adapter->hena = IAVF_DEFAULT_RSS_HENA_EXPANDED; in iavf_init_rss()
1794 adapter->hena = IAVF_DEFAULT_RSS_HENA; in iavf_init_rss()
1796 wr32(hw, IAVF_VFQF_HENA(0), (u32)adapter->hena); in iavf_init_rss()
1797 wr32(hw, IAVF_VFQF_HENA(1), (u32)(adapter->hena >> 32)); in iavf_init_rss()
1800 iavf_fill_rss_lut(adapter); in iavf_init_rss()
1801 netdev_rss_key_fill((void *)adapter->rss_key, adapter->rss_key_size); in iavf_init_rss()
1803 return iavf_config_rss(adapter); in iavf_init_rss()
1808 * @adapter: board private structure to initialize
1813 static int iavf_alloc_q_vectors(struct iavf_adapter *adapter) in iavf_alloc_q_vectors() argument
1818 num_q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_alloc_q_vectors()
1819 adapter->q_vectors = kcalloc(num_q_vectors, sizeof(*q_vector), in iavf_alloc_q_vectors()
1821 if (!adapter->q_vectors) in iavf_alloc_q_vectors()
1825 q_vector = &adapter->q_vectors[q_idx]; in iavf_alloc_q_vectors()
1826 q_vector->adapter = adapter; in iavf_alloc_q_vectors()
1827 q_vector->vsi = &adapter->vsi; in iavf_alloc_q_vectors()
1831 netif_napi_add(adapter->netdev, &q_vector->napi, in iavf_alloc_q_vectors()
1840 * @adapter: board private structure to initialize
1846 static void iavf_free_q_vectors(struct iavf_adapter *adapter) in iavf_free_q_vectors() argument
1850 if (!adapter->q_vectors) in iavf_free_q_vectors()
1853 num_q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_free_q_vectors()
1856 struct iavf_q_vector *q_vector = &adapter->q_vectors[q_idx]; in iavf_free_q_vectors()
1860 kfree(adapter->q_vectors); in iavf_free_q_vectors()
1861 adapter->q_vectors = NULL; in iavf_free_q_vectors()
1866 * @adapter: board private structure
1869 static void iavf_reset_interrupt_capability(struct iavf_adapter *adapter) in iavf_reset_interrupt_capability() argument
1871 if (!adapter->msix_entries) in iavf_reset_interrupt_capability()
1874 pci_disable_msix(adapter->pdev); in iavf_reset_interrupt_capability()
1875 kfree(adapter->msix_entries); in iavf_reset_interrupt_capability()
1876 adapter->msix_entries = NULL; in iavf_reset_interrupt_capability()
1881 * @adapter: board private structure to initialize
1884 static int iavf_init_interrupt_scheme(struct iavf_adapter *adapter) in iavf_init_interrupt_scheme() argument
1888 err = iavf_alloc_queues(adapter); in iavf_init_interrupt_scheme()
1890 dev_err(&adapter->pdev->dev, in iavf_init_interrupt_scheme()
1895 err = iavf_set_interrupt_capability(adapter); in iavf_init_interrupt_scheme()
1897 dev_err(&adapter->pdev->dev, in iavf_init_interrupt_scheme()
1902 err = iavf_alloc_q_vectors(adapter); in iavf_init_interrupt_scheme()
1904 dev_err(&adapter->pdev->dev, in iavf_init_interrupt_scheme()
1914 if ((adapter->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_ADQ) && in iavf_init_interrupt_scheme()
1915 adapter->num_tc) in iavf_init_interrupt_scheme()
1916 dev_info(&adapter->pdev->dev, "ADq Enabled, %u TCs created", in iavf_init_interrupt_scheme()
1917 adapter->num_tc); in iavf_init_interrupt_scheme()
1919 dev_info(&adapter->pdev->dev, "Multiqueue %s: Queue pair count = %u", in iavf_init_interrupt_scheme()
1920 (adapter->num_active_queues > 1) ? "Enabled" : "Disabled", in iavf_init_interrupt_scheme()
1921 adapter->num_active_queues); in iavf_init_interrupt_scheme()
1925 iavf_reset_interrupt_capability(adapter); in iavf_init_interrupt_scheme()
1927 iavf_free_queues(adapter); in iavf_init_interrupt_scheme()
1934 * @adapter: board private structure
1936 static void iavf_free_interrupt_scheme(struct iavf_adapter *adapter) in iavf_free_interrupt_scheme() argument
1938 iavf_free_q_vectors(adapter); in iavf_free_interrupt_scheme()
1939 iavf_reset_interrupt_capability(adapter); in iavf_free_interrupt_scheme()
1940 iavf_free_queues(adapter); in iavf_free_interrupt_scheme()
1945 * @adapter: board private structure
1947 static void iavf_free_rss(struct iavf_adapter *adapter) in iavf_free_rss() argument
1949 kfree(adapter->rss_key); in iavf_free_rss()
1950 adapter->rss_key = NULL; in iavf_free_rss()
1952 kfree(adapter->rss_lut); in iavf_free_rss()
1953 adapter->rss_lut = NULL; in iavf_free_rss()
1958 * @adapter: board private structure
1959 * @running: true if adapter->state == __IAVF_RUNNING
1963 static int iavf_reinit_interrupt_scheme(struct iavf_adapter *adapter, bool running) in iavf_reinit_interrupt_scheme() argument
1965 struct net_device *netdev = adapter->netdev; in iavf_reinit_interrupt_scheme()
1969 iavf_free_traffic_irqs(adapter); in iavf_reinit_interrupt_scheme()
1970 iavf_free_misc_irq(adapter); in iavf_reinit_interrupt_scheme()
1971 iavf_free_interrupt_scheme(adapter); in iavf_reinit_interrupt_scheme()
1973 err = iavf_init_interrupt_scheme(adapter); in iavf_reinit_interrupt_scheme()
1979 err = iavf_request_misc_irq(adapter); in iavf_reinit_interrupt_scheme()
1983 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_reinit_interrupt_scheme()
1985 iavf_map_rings_to_vectors(adapter); in iavf_reinit_interrupt_scheme()
1998 struct iavf_adapter *adapter; in iavf_finish_config() local
2001 adapter = container_of(work, struct iavf_adapter, finish_config); in iavf_finish_config()
2005 mutex_lock(&adapter->crit_lock); in iavf_finish_config()
2007 if ((adapter->flags & IAVF_FLAG_SETUP_NETDEV_FEATURES) && in iavf_finish_config()
2008 adapter->netdev->reg_state == NETREG_REGISTERED && in iavf_finish_config()
2009 !test_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section)) { in iavf_finish_config()
2010 netdev_update_features(adapter->netdev); in iavf_finish_config()
2011 adapter->flags &= ~IAVF_FLAG_SETUP_NETDEV_FEATURES; in iavf_finish_config()
2014 switch (adapter->state) { in iavf_finish_config()
2016 if (adapter->netdev->reg_state != NETREG_REGISTERED) { in iavf_finish_config()
2017 err = register_netdevice(adapter->netdev); in iavf_finish_config()
2019 dev_err(&adapter->pdev->dev, "Unable to register netdev (%d)\n", in iavf_finish_config()
2023 iavf_free_rss(adapter); in iavf_finish_config()
2024 iavf_free_misc_irq(adapter); in iavf_finish_config()
2025 iavf_reset_interrupt_capability(adapter); in iavf_finish_config()
2026 iavf_change_state(adapter, in iavf_finish_config()
2037 pairs = adapter->num_active_queues; in iavf_finish_config()
2038 netif_set_real_num_rx_queues(adapter->netdev, pairs); in iavf_finish_config()
2039 netif_set_real_num_tx_queues(adapter->netdev, pairs); in iavf_finish_config()
2047 mutex_unlock(&adapter->crit_lock); in iavf_finish_config()
2053 * @adapter: board private structure
2055 void iavf_schedule_finish_config(struct iavf_adapter *adapter) in iavf_schedule_finish_config() argument
2057 if (!test_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section)) in iavf_schedule_finish_config()
2058 queue_work(adapter->wq, &adapter->finish_config); in iavf_schedule_finish_config()
2064 * @adapter: pointer to iavf adapter structure
2070 static int iavf_process_aq_command(struct iavf_adapter *adapter) in iavf_process_aq_command() argument
2072 if (adapter->aq_required & IAVF_FLAG_AQ_GET_CONFIG) in iavf_process_aq_command()
2073 return iavf_send_vf_config_msg(adapter); in iavf_process_aq_command()
2074 if (adapter->aq_required & IAVF_FLAG_AQ_GET_OFFLOAD_VLAN_V2_CAPS) in iavf_process_aq_command()
2075 return iavf_send_vf_offload_vlan_v2_msg(adapter); in iavf_process_aq_command()
2076 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_QUEUES) { in iavf_process_aq_command()
2077 iavf_disable_queues(adapter); in iavf_process_aq_command()
2081 if (adapter->aq_required & IAVF_FLAG_AQ_MAP_VECTORS) { in iavf_process_aq_command()
2082 iavf_map_queues(adapter); in iavf_process_aq_command()
2086 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_MAC_FILTER) { in iavf_process_aq_command()
2087 iavf_add_ether_addrs(adapter); in iavf_process_aq_command()
2091 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_VLAN_FILTER) { in iavf_process_aq_command()
2092 iavf_add_vlans(adapter); in iavf_process_aq_command()
2096 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_MAC_FILTER) { in iavf_process_aq_command()
2097 iavf_del_ether_addrs(adapter); in iavf_process_aq_command()
2101 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_VLAN_FILTER) { in iavf_process_aq_command()
2102 iavf_del_vlans(adapter); in iavf_process_aq_command()
2106 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_VLAN_STRIPPING) { in iavf_process_aq_command()
2107 iavf_enable_vlan_stripping(adapter); in iavf_process_aq_command()
2111 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_VLAN_STRIPPING) { in iavf_process_aq_command()
2112 iavf_disable_vlan_stripping(adapter); in iavf_process_aq_command()
2116 if (adapter->aq_required & IAVF_FLAG_AQ_CONFIGURE_QUEUES) { in iavf_process_aq_command()
2117 iavf_configure_queues(adapter); in iavf_process_aq_command()
2121 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_QUEUES) { in iavf_process_aq_command()
2122 iavf_enable_queues(adapter); in iavf_process_aq_command()
2126 if (adapter->aq_required & IAVF_FLAG_AQ_CONFIGURE_RSS) { in iavf_process_aq_command()
2131 adapter->aq_required &= ~IAVF_FLAG_AQ_CONFIGURE_RSS; in iavf_process_aq_command()
2134 if (adapter->aq_required & IAVF_FLAG_AQ_GET_HENA) { in iavf_process_aq_command()
2135 iavf_get_hena(adapter); in iavf_process_aq_command()
2138 if (adapter->aq_required & IAVF_FLAG_AQ_SET_HENA) { in iavf_process_aq_command()
2139 iavf_set_hena(adapter); in iavf_process_aq_command()
2142 if (adapter->aq_required & IAVF_FLAG_AQ_SET_RSS_KEY) { in iavf_process_aq_command()
2143 iavf_set_rss_key(adapter); in iavf_process_aq_command()
2146 if (adapter->aq_required & IAVF_FLAG_AQ_SET_RSS_LUT) { in iavf_process_aq_command()
2147 iavf_set_rss_lut(adapter); in iavf_process_aq_command()
2150 if (adapter->aq_required & IAVF_FLAG_AQ_SET_RSS_HFUNC) { in iavf_process_aq_command()
2151 iavf_set_rss_hfunc(adapter); in iavf_process_aq_command()
2155 if (adapter->aq_required & IAVF_FLAG_AQ_CONFIGURE_PROMISC_MODE) { in iavf_process_aq_command()
2156 iavf_set_promiscuous(adapter); in iavf_process_aq_command()
2160 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_CHANNELS) { in iavf_process_aq_command()
2161 iavf_enable_channels(adapter); in iavf_process_aq_command()
2165 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_CHANNELS) { in iavf_process_aq_command()
2166 iavf_disable_channels(adapter); in iavf_process_aq_command()
2169 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_CLOUD_FILTER) { in iavf_process_aq_command()
2170 iavf_add_cloud_filter(adapter); in iavf_process_aq_command()
2174 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_CLOUD_FILTER) { in iavf_process_aq_command()
2175 iavf_del_cloud_filter(adapter); in iavf_process_aq_command()
2178 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_CLOUD_FILTER) { in iavf_process_aq_command()
2179 iavf_del_cloud_filter(adapter); in iavf_process_aq_command()
2182 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_CLOUD_FILTER) { in iavf_process_aq_command()
2183 iavf_add_cloud_filter(adapter); in iavf_process_aq_command()
2186 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_FDIR_FILTER) { in iavf_process_aq_command()
2187 iavf_add_fdir_filter(adapter); in iavf_process_aq_command()
2190 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_FDIR_FILTER) { in iavf_process_aq_command()
2191 iavf_del_fdir_filter(adapter); in iavf_process_aq_command()
2194 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_ADV_RSS_CFG) { in iavf_process_aq_command()
2195 iavf_add_adv_rss_cfg(adapter); in iavf_process_aq_command()
2198 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_ADV_RSS_CFG) { in iavf_process_aq_command()
2199 iavf_del_adv_rss_cfg(adapter); in iavf_process_aq_command()
2202 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_CTAG_VLAN_STRIPPING) { in iavf_process_aq_command()
2203 iavf_disable_vlan_stripping_v2(adapter, ETH_P_8021Q); in iavf_process_aq_command()
2206 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_STAG_VLAN_STRIPPING) { in iavf_process_aq_command()
2207 iavf_disable_vlan_stripping_v2(adapter, ETH_P_8021AD); in iavf_process_aq_command()
2210 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_CTAG_VLAN_STRIPPING) { in iavf_process_aq_command()
2211 iavf_enable_vlan_stripping_v2(adapter, ETH_P_8021Q); in iavf_process_aq_command()
2214 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_STAG_VLAN_STRIPPING) { in iavf_process_aq_command()
2215 iavf_enable_vlan_stripping_v2(adapter, ETH_P_8021AD); in iavf_process_aq_command()
2218 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_CTAG_VLAN_INSERTION) { in iavf_process_aq_command()
2219 iavf_disable_vlan_insertion_v2(adapter, ETH_P_8021Q); in iavf_process_aq_command()
2222 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_STAG_VLAN_INSERTION) { in iavf_process_aq_command()
2223 iavf_disable_vlan_insertion_v2(adapter, ETH_P_8021AD); in iavf_process_aq_command()
2226 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_CTAG_VLAN_INSERTION) { in iavf_process_aq_command()
2227 iavf_enable_vlan_insertion_v2(adapter, ETH_P_8021Q); in iavf_process_aq_command()
2230 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_STAG_VLAN_INSERTION) { in iavf_process_aq_command()
2231 iavf_enable_vlan_insertion_v2(adapter, ETH_P_8021AD); in iavf_process_aq_command()
2235 if (adapter->aq_required & IAVF_FLAG_AQ_REQUEST_STATS) { in iavf_process_aq_command()
2236 iavf_request_stats(adapter); in iavf_process_aq_command()
2245 * @adapter: board private structure
2255 iavf_set_vlan_offload_features(struct iavf_adapter *adapter, in iavf_set_vlan_offload_features() argument
2285 if (VLAN_ALLOWED(adapter)) { in iavf_set_vlan_offload_features()
2295 } else if (VLAN_V2_ALLOWED(adapter)) { in iavf_set_vlan_offload_features()
2323 iavf_schedule_aq_request(adapter, aq_required); in iavf_set_vlan_offload_features()
2328 * @adapter: board private structure
2334 static void iavf_startup(struct iavf_adapter *adapter) in iavf_startup() argument
2336 struct pci_dev *pdev = adapter->pdev; in iavf_startup()
2337 struct iavf_hw *hw = &adapter->hw; in iavf_startup()
2341 WARN_ON(adapter->state != __IAVF_STARTUP); in iavf_startup()
2344 adapter->flags &= ~IAVF_FLAG_PF_COMMS_FAILED; in iavf_startup()
2345 adapter->flags &= ~IAVF_FLAG_RESET_PENDING; in iavf_startup()
2364 ret = iavf_send_api_ver(adapter); in iavf_startup()
2370 iavf_change_state(adapter, __IAVF_INIT_VERSION_CHECK); in iavf_startup()
2373 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_startup()
2378 * @adapter: board private structure
2384 static void iavf_init_version_check(struct iavf_adapter *adapter) in iavf_init_version_check() argument
2386 struct pci_dev *pdev = adapter->pdev; in iavf_init_version_check()
2387 struct iavf_hw *hw = &adapter->hw; in iavf_init_version_check()
2390 WARN_ON(adapter->state != __IAVF_INIT_VERSION_CHECK); in iavf_init_version_check()
2395 iavf_change_state(adapter, __IAVF_STARTUP); in iavf_init_version_check()
2400 err = iavf_verify_api_ver(adapter); in iavf_init_version_check()
2403 err = iavf_send_api_ver(adapter); in iavf_init_version_check()
2406 adapter->pf_version.major, in iavf_init_version_check()
2407 adapter->pf_version.minor, in iavf_init_version_check()
2412 err = iavf_send_vf_config_msg(adapter); in iavf_init_version_check()
2418 iavf_change_state(adapter, __IAVF_INIT_GET_RESOURCES); in iavf_init_version_check()
2421 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_init_version_check()
2426 * @adapter: board private structure
2428 int iavf_parse_vf_resource_msg(struct iavf_adapter *adapter) in iavf_parse_vf_resource_msg() argument
2430 int i, num_req_queues = adapter->num_req_queues; in iavf_parse_vf_resource_msg()
2431 struct iavf_vsi *vsi = &adapter->vsi; in iavf_parse_vf_resource_msg()
2433 for (i = 0; i < adapter->vf_res->num_vsis; i++) { in iavf_parse_vf_resource_msg()
2434 if (adapter->vf_res->vsi_res[i].vsi_type == VIRTCHNL_VSI_SRIOV) in iavf_parse_vf_resource_msg()
2435 adapter->vsi_res = &adapter->vf_res->vsi_res[i]; in iavf_parse_vf_resource_msg()
2437 if (!adapter->vsi_res) { in iavf_parse_vf_resource_msg()
2438 dev_err(&adapter->pdev->dev, "No LAN VSI found\n"); in iavf_parse_vf_resource_msg()
2443 num_req_queues > adapter->vsi_res->num_queue_pairs) { in iavf_parse_vf_resource_msg()
2448 dev_err(&adapter->pdev->dev, in iavf_parse_vf_resource_msg()
2451 adapter->vsi_res->num_queue_pairs); in iavf_parse_vf_resource_msg()
2452 adapter->flags |= IAVF_FLAG_REINIT_MSIX_NEEDED; in iavf_parse_vf_resource_msg()
2453 adapter->num_req_queues = adapter->vsi_res->num_queue_pairs; in iavf_parse_vf_resource_msg()
2454 iavf_schedule_reset(adapter, IAVF_FLAG_RESET_NEEDED); in iavf_parse_vf_resource_msg()
2458 adapter->num_req_queues = 0; in iavf_parse_vf_resource_msg()
2459 adapter->vsi.id = adapter->vsi_res->vsi_id; in iavf_parse_vf_resource_msg()
2461 adapter->vsi.back = adapter; in iavf_parse_vf_resource_msg()
2462 adapter->vsi.base_vector = 1; in iavf_parse_vf_resource_msg()
2463 vsi->netdev = adapter->netdev; in iavf_parse_vf_resource_msg()
2464 vsi->qs_handle = adapter->vsi_res->qset_handle; in iavf_parse_vf_resource_msg()
2465 if (adapter->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_RSS_PF) { in iavf_parse_vf_resource_msg()
2466 adapter->rss_key_size = adapter->vf_res->rss_key_size; in iavf_parse_vf_resource_msg()
2467 adapter->rss_lut_size = adapter->vf_res->rss_lut_size; in iavf_parse_vf_resource_msg()
2469 adapter->rss_key_size = IAVF_HKEY_ARRAY_SIZE; in iavf_parse_vf_resource_msg()
2470 adapter->rss_lut_size = IAVF_HLUT_ARRAY_SIZE; in iavf_parse_vf_resource_msg()
2478 * @adapter: board private structure
2485 static void iavf_init_get_resources(struct iavf_adapter *adapter) in iavf_init_get_resources() argument
2487 struct pci_dev *pdev = adapter->pdev; in iavf_init_get_resources()
2488 struct iavf_hw *hw = &adapter->hw; in iavf_init_get_resources()
2491 WARN_ON(adapter->state != __IAVF_INIT_GET_RESOURCES); in iavf_init_get_resources()
2493 if (!adapter->vf_res) { in iavf_init_get_resources()
2494 adapter->vf_res = kzalloc(IAVF_VIRTCHNL_VF_RESOURCE_SIZE, in iavf_init_get_resources()
2496 if (!adapter->vf_res) { in iavf_init_get_resources()
2501 err = iavf_get_vf_config(adapter); in iavf_init_get_resources()
2503 err = iavf_send_vf_config_msg(adapter); in iavf_init_get_resources()
2519 err = iavf_parse_vf_resource_msg(adapter); in iavf_init_get_resources()
2529 adapter->extended_caps = IAVF_EXTENDED_CAPS; in iavf_init_get_resources()
2531 iavf_change_state(adapter, __IAVF_INIT_EXTENDED_CAPS); in iavf_init_get_resources()
2535 kfree(adapter->vf_res); in iavf_init_get_resources()
2536 adapter->vf_res = NULL; in iavf_init_get_resources()
2538 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_init_get_resources()
2543 * @adapter: board private structure
2549 static void iavf_init_send_offload_vlan_v2_caps(struct iavf_adapter *adapter) in iavf_init_send_offload_vlan_v2_caps() argument
2553 WARN_ON(!(adapter->extended_caps & IAVF_EXTENDED_CAP_SEND_VLAN_V2)); in iavf_init_send_offload_vlan_v2_caps()
2555 ret = iavf_send_vf_offload_vlan_v2_msg(adapter); in iavf_init_send_offload_vlan_v2_caps()
2561 adapter->extended_caps &= ~IAVF_EXTENDED_CAP_RECV_VLAN_V2; in iavf_init_send_offload_vlan_v2_caps()
2565 adapter->extended_caps &= ~IAVF_EXTENDED_CAP_SEND_VLAN_V2; in iavf_init_send_offload_vlan_v2_caps()
2570 * @adapter: board private structure
2575 static void iavf_init_recv_offload_vlan_v2_caps(struct iavf_adapter *adapter) in iavf_init_recv_offload_vlan_v2_caps() argument
2579 WARN_ON(!(adapter->extended_caps & IAVF_EXTENDED_CAP_RECV_VLAN_V2)); in iavf_init_recv_offload_vlan_v2_caps()
2581 memset(&adapter->vlan_v2_caps, 0, sizeof(adapter->vlan_v2_caps)); in iavf_init_recv_offload_vlan_v2_caps()
2583 ret = iavf_get_vf_vlan_v2_caps(adapter); in iavf_init_recv_offload_vlan_v2_caps()
2588 adapter->extended_caps &= ~IAVF_EXTENDED_CAP_RECV_VLAN_V2; in iavf_init_recv_offload_vlan_v2_caps()
2594 adapter->extended_caps |= IAVF_EXTENDED_CAP_SEND_VLAN_V2; in iavf_init_recv_offload_vlan_v2_caps()
2595 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_init_recv_offload_vlan_v2_caps()
2600 * @adapter: board private structure
2609 static void iavf_init_process_extended_caps(struct iavf_adapter *adapter) in iavf_init_process_extended_caps() argument
2611 WARN_ON(adapter->state != __IAVF_INIT_EXTENDED_CAPS); in iavf_init_process_extended_caps()
2614 if (adapter->extended_caps & IAVF_EXTENDED_CAP_SEND_VLAN_V2) { in iavf_init_process_extended_caps()
2615 iavf_init_send_offload_vlan_v2_caps(adapter); in iavf_init_process_extended_caps()
2617 } else if (adapter->extended_caps & IAVF_EXTENDED_CAP_RECV_VLAN_V2) { in iavf_init_process_extended_caps()
2618 iavf_init_recv_offload_vlan_v2_caps(adapter); in iavf_init_process_extended_caps()
2625 iavf_change_state(adapter, __IAVF_INIT_CONFIG_ADAPTER); in iavf_init_process_extended_caps()
2630 * @adapter: board private structure
2635 static void iavf_init_config_adapter(struct iavf_adapter *adapter) in iavf_init_config_adapter() argument
2637 struct net_device *netdev = adapter->netdev; in iavf_init_config_adapter()
2638 struct pci_dev *pdev = adapter->pdev; in iavf_init_config_adapter()
2641 WARN_ON(adapter->state != __IAVF_INIT_CONFIG_ADAPTER); in iavf_init_config_adapter()
2643 if (iavf_process_config(adapter)) in iavf_init_config_adapter()
2646 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_init_config_adapter()
2648 adapter->flags |= IAVF_FLAG_RX_CSUM_ENABLED; in iavf_init_config_adapter()
2658 if (!is_valid_ether_addr(adapter->hw.mac.addr)) { in iavf_init_config_adapter()
2660 adapter->hw.mac.addr); in iavf_init_config_adapter()
2662 ether_addr_copy(adapter->hw.mac.addr, netdev->dev_addr); in iavf_init_config_adapter()
2664 eth_hw_addr_set(netdev, adapter->hw.mac.addr); in iavf_init_config_adapter()
2665 ether_addr_copy(netdev->perm_addr, adapter->hw.mac.addr); in iavf_init_config_adapter()
2668 adapter->tx_desc_count = IAVF_DEFAULT_TXD; in iavf_init_config_adapter()
2669 adapter->rx_desc_count = IAVF_DEFAULT_RXD; in iavf_init_config_adapter()
2670 err = iavf_init_interrupt_scheme(adapter); in iavf_init_config_adapter()
2673 iavf_map_rings_to_vectors(adapter); in iavf_init_config_adapter()
2674 if (adapter->vf_res->vf_cap_flags & in iavf_init_config_adapter()
2676 adapter->flags |= IAVF_FLAG_WB_ON_ITR_CAPABLE; in iavf_init_config_adapter()
2678 err = iavf_request_misc_irq(adapter); in iavf_init_config_adapter()
2683 adapter->link_up = false; in iavf_init_config_adapter()
2686 dev_info(&pdev->dev, "MAC address: %pM\n", adapter->hw.mac.addr); in iavf_init_config_adapter()
2690 iavf_change_state(adapter, __IAVF_DOWN); in iavf_init_config_adapter()
2691 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_init_config_adapter()
2693 iavf_misc_irq_enable(adapter); in iavf_init_config_adapter()
2694 wake_up(&adapter->down_waitqueue); in iavf_init_config_adapter()
2696 adapter->rss_key = kzalloc(adapter->rss_key_size, GFP_KERNEL); in iavf_init_config_adapter()
2697 adapter->rss_lut = kzalloc(adapter->rss_lut_size, GFP_KERNEL); in iavf_init_config_adapter()
2698 if (!adapter->rss_key || !adapter->rss_lut) { in iavf_init_config_adapter()
2702 if (RSS_AQ(adapter)) in iavf_init_config_adapter()
2703 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_RSS; in iavf_init_config_adapter()
2705 iavf_init_rss(adapter); in iavf_init_config_adapter()
2707 if (VLAN_V2_ALLOWED(adapter)) in iavf_init_config_adapter()
2709 iavf_set_vlan_offload_features(adapter, 0, netdev->features); in iavf_init_config_adapter()
2711 iavf_schedule_finish_config(adapter); in iavf_init_config_adapter()
2715 iavf_free_rss(adapter); in iavf_init_config_adapter()
2716 iavf_free_misc_irq(adapter); in iavf_init_config_adapter()
2718 iavf_reset_interrupt_capability(adapter); in iavf_init_config_adapter()
2720 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_init_config_adapter()
2729 struct iavf_adapter *adapter = container_of(work, in iavf_watchdog_task() local
2732 struct iavf_hw *hw = &adapter->hw; in iavf_watchdog_task()
2735 if (!mutex_trylock(&adapter->crit_lock)) { in iavf_watchdog_task()
2736 if (adapter->state == __IAVF_REMOVE) in iavf_watchdog_task()
2742 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) in iavf_watchdog_task()
2743 iavf_change_state(adapter, __IAVF_COMM_FAILED); in iavf_watchdog_task()
2745 switch (adapter->state) { in iavf_watchdog_task()
2747 iavf_startup(adapter); in iavf_watchdog_task()
2748 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2749 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2753 iavf_init_version_check(adapter); in iavf_watchdog_task()
2754 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2755 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2759 iavf_init_get_resources(adapter); in iavf_watchdog_task()
2760 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2761 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2765 iavf_init_process_extended_caps(adapter); in iavf_watchdog_task()
2766 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2767 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2771 iavf_init_config_adapter(adapter); in iavf_watchdog_task()
2772 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2773 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2778 &adapter->crit_section)) { in iavf_watchdog_task()
2783 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2786 if (++adapter->aq_wait_count > IAVF_AQ_MAX_ERR) { in iavf_watchdog_task()
2787 dev_err(&adapter->pdev->dev, in iavf_watchdog_task()
2789 adapter->flags |= IAVF_FLAG_PF_COMMS_FAILED; in iavf_watchdog_task()
2791 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2792 queue_delayed_work(adapter->wq, in iavf_watchdog_task()
2793 &adapter->watchdog_task, (5 * HZ)); in iavf_watchdog_task()
2797 iavf_change_state(adapter, adapter->last_state); in iavf_watchdog_task()
2798 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2799 queue_delayed_work(adapter->wq, &adapter->watchdog_task, HZ); in iavf_watchdog_task()
2803 &adapter->crit_section)) { in iavf_watchdog_task()
2808 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_watchdog_task()
2809 adapter->flags &= ~IAVF_FLAG_PF_COMMS_FAILED; in iavf_watchdog_task()
2810 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2818 dev_err(&adapter->pdev->dev, in iavf_watchdog_task()
2824 iavf_change_state(adapter, __IAVF_STARTUP); in iavf_watchdog_task()
2825 adapter->flags &= ~IAVF_FLAG_PF_COMMS_FAILED; in iavf_watchdog_task()
2827 adapter->aq_required = 0; in iavf_watchdog_task()
2828 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_watchdog_task()
2829 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2830 queue_delayed_work(adapter->wq, in iavf_watchdog_task()
2831 &adapter->watchdog_task, in iavf_watchdog_task()
2835 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2836 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2843 if (adapter->current_op) { in iavf_watchdog_task()
2845 dev_dbg(&adapter->pdev->dev, in iavf_watchdog_task()
2847 iavf_send_api_ver(adapter); in iavf_watchdog_task()
2850 int ret = iavf_process_aq_command(adapter); in iavf_watchdog_task()
2857 adapter->state == __IAVF_RUNNING) in iavf_watchdog_task()
2858 iavf_request_stats(adapter); in iavf_watchdog_task()
2860 if (adapter->state == __IAVF_RUNNING) in iavf_watchdog_task()
2861 iavf_detect_recover_hung(&adapter->vsi); in iavf_watchdog_task()
2865 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2872 adapter->aq_required = 0; in iavf_watchdog_task()
2873 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_watchdog_task()
2874 dev_err(&adapter->pdev->dev, "Hardware reset detected\n"); in iavf_watchdog_task()
2875 iavf_schedule_reset(adapter, IAVF_FLAG_RESET_PENDING); in iavf_watchdog_task()
2876 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2877 queue_delayed_work(adapter->wq, in iavf_watchdog_task()
2878 &adapter->watchdog_task, HZ * 2); in iavf_watchdog_task()
2882 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2884 if (adapter->state >= __IAVF_DOWN) in iavf_watchdog_task()
2885 queue_work(adapter->wq, &adapter->adminq_task); in iavf_watchdog_task()
2886 if (adapter->aq_required) in iavf_watchdog_task()
2887 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2890 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2896 * @adapter: board private structure
2901 static void iavf_disable_vf(struct iavf_adapter *adapter) in iavf_disable_vf() argument
2907 adapter->flags |= IAVF_FLAG_PF_COMMS_FAILED; in iavf_disable_vf()
2913 if (adapter->state == __IAVF_RUNNING) { in iavf_disable_vf()
2914 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_disable_vf()
2915 netif_carrier_off(adapter->netdev); in iavf_disable_vf()
2916 netif_tx_disable(adapter->netdev); in iavf_disable_vf()
2917 adapter->link_up = false; in iavf_disable_vf()
2918 iavf_napi_disable_all(adapter); in iavf_disable_vf()
2919 iavf_irq_disable(adapter); in iavf_disable_vf()
2920 iavf_free_traffic_irqs(adapter); in iavf_disable_vf()
2921 iavf_free_all_tx_resources(adapter); in iavf_disable_vf()
2922 iavf_free_all_rx_resources(adapter); in iavf_disable_vf()
2925 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_disable_vf()
2928 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_disable_vf()
2933 list_for_each_entry_safe(fv, fvtmp, &adapter->vlan_filter_list, list) { in iavf_disable_vf()
2937 adapter->num_vlan_filters = 0; in iavf_disable_vf()
2939 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_disable_vf()
2941 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_disable_vf()
2942 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, list) { in iavf_disable_vf()
2945 adapter->num_cloud_filters--; in iavf_disable_vf()
2947 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_disable_vf()
2949 iavf_free_misc_irq(adapter); in iavf_disable_vf()
2950 iavf_free_interrupt_scheme(adapter); in iavf_disable_vf()
2951 memset(adapter->vf_res, 0, IAVF_VIRTCHNL_VF_RESOURCE_SIZE); in iavf_disable_vf()
2952 iavf_shutdown_adminq(&adapter->hw); in iavf_disable_vf()
2953 adapter->flags &= ~IAVF_FLAG_RESET_PENDING; in iavf_disable_vf()
2954 iavf_change_state(adapter, __IAVF_DOWN); in iavf_disable_vf()
2955 wake_up(&adapter->down_waitqueue); in iavf_disable_vf()
2956 dev_info(&adapter->pdev->dev, "Reset task did not complete, VF disabled\n"); in iavf_disable_vf()
2969 struct iavf_adapter *adapter = container_of(work, in iavf_reset_task() local
2972 struct virtchnl_vf_resource *vfres = adapter->vf_res; in iavf_reset_task()
2973 struct net_device *netdev = adapter->netdev; in iavf_reset_task()
2974 struct iavf_hw *hw = &adapter->hw; in iavf_reset_task()
2985 if (!mutex_trylock(&adapter->crit_lock)) { in iavf_reset_task()
2986 if (adapter->state != __IAVF_REMOVE) in iavf_reset_task()
2987 queue_work(adapter->wq, &adapter->reset_task); in iavf_reset_task()
2992 iavf_misc_irq_disable(adapter); in iavf_reset_task()
2993 if (adapter->flags & IAVF_FLAG_RESET_NEEDED) { in iavf_reset_task()
2994 adapter->flags &= ~IAVF_FLAG_RESET_NEEDED; in iavf_reset_task()
3000 iavf_request_reset(adapter); in iavf_reset_task()
3002 adapter->flags |= IAVF_FLAG_RESET_PENDING; in iavf_reset_task()
3013 dev_info(&adapter->pdev->dev, "Never saw reset\n"); in iavf_reset_task()
3028 pci_set_master(adapter->pdev); in iavf_reset_task()
3029 pci_restore_msi_state(adapter->pdev); in iavf_reset_task()
3032 dev_err(&adapter->pdev->dev, "Reset never finished (%x)\n", in iavf_reset_task()
3034 iavf_disable_vf(adapter); in iavf_reset_task()
3035 mutex_unlock(&adapter->crit_lock); in iavf_reset_task()
3044 running = adapter->state == __IAVF_RUNNING; in iavf_reset_task()
3049 adapter->link_up = false; in iavf_reset_task()
3050 iavf_napi_disable_all(adapter); in iavf_reset_task()
3052 iavf_irq_disable(adapter); in iavf_reset_task()
3054 iavf_change_state(adapter, __IAVF_RESETTING); in iavf_reset_task()
3055 adapter->flags &= ~IAVF_FLAG_RESET_PENDING; in iavf_reset_task()
3060 iavf_free_all_rx_resources(adapter); in iavf_reset_task()
3061 iavf_free_all_tx_resources(adapter); in iavf_reset_task()
3063 adapter->flags |= IAVF_FLAG_QUEUES_DISABLED; in iavf_reset_task()
3066 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_reset_task()
3069 dev_info(&adapter->pdev->dev, "Failed to init adminq: %d\n", in iavf_reset_task()
3073 adapter->aq_required = 0; in iavf_reset_task()
3075 if ((adapter->flags & IAVF_FLAG_REINIT_MSIX_NEEDED) || in iavf_reset_task()
3076 (adapter->flags & IAVF_FLAG_REINIT_ITR_NEEDED)) { in iavf_reset_task()
3077 err = iavf_reinit_interrupt_scheme(adapter, running); in iavf_reset_task()
3082 if (RSS_AQ(adapter)) { in iavf_reset_task()
3083 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_RSS; in iavf_reset_task()
3085 err = iavf_init_rss(adapter); in iavf_reset_task()
3090 adapter->aq_required |= IAVF_FLAG_AQ_GET_CONFIG; in iavf_reset_task()
3097 adapter->aq_required |= IAVF_FLAG_AQ_GET_OFFLOAD_VLAN_V2_CAPS; in iavf_reset_task()
3098 adapter->aq_required |= IAVF_FLAG_AQ_MAP_VECTORS; in iavf_reset_task()
3100 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_reset_task()
3106 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_reset_task()
3107 if (ether_addr_equal(f->macaddr, adapter->hw.mac.addr)) { in iavf_reset_task()
3113 list_for_each_entry(f, &adapter->mac_filter_list, list) { in iavf_reset_task()
3116 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_reset_task()
3119 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_reset_task()
3121 adapter->num_tc) { in iavf_reset_task()
3122 list_for_each_entry(cf, &adapter->cloud_filter_list, list) { in iavf_reset_task()
3126 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_reset_task()
3128 adapter->aq_required |= IAVF_FLAG_AQ_ADD_MAC_FILTER; in iavf_reset_task()
3129 adapter->aq_required |= IAVF_FLAG_AQ_ADD_CLOUD_FILTER; in iavf_reset_task()
3130 iavf_misc_irq_enable(adapter); in iavf_reset_task()
3132 mod_delayed_work(adapter->wq, &adapter->watchdog_task, 2); in iavf_reset_task()
3139 err = iavf_setup_all_tx_resources(adapter); in iavf_reset_task()
3144 err = iavf_setup_all_rx_resources(adapter); in iavf_reset_task()
3148 if ((adapter->flags & IAVF_FLAG_REINIT_MSIX_NEEDED) || in iavf_reset_task()
3149 (adapter->flags & IAVF_FLAG_REINIT_ITR_NEEDED)) { in iavf_reset_task()
3150 err = iavf_request_traffic_irqs(adapter, netdev->name); in iavf_reset_task()
3154 adapter->flags &= ~IAVF_FLAG_REINIT_MSIX_NEEDED; in iavf_reset_task()
3157 iavf_configure(adapter); in iavf_reset_task()
3162 iavf_up_complete(adapter); in iavf_reset_task()
3164 iavf_irq_enable(adapter, true); in iavf_reset_task()
3166 iavf_change_state(adapter, __IAVF_DOWN); in iavf_reset_task()
3167 wake_up(&adapter->down_waitqueue); in iavf_reset_task()
3170 adapter->flags &= ~IAVF_FLAG_REINIT_ITR_NEEDED; in iavf_reset_task()
3172 wake_up(&adapter->reset_waitqueue); in iavf_reset_task()
3173 mutex_unlock(&adapter->crit_lock); in iavf_reset_task()
3178 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_reset_task()
3179 iavf_free_traffic_irqs(adapter); in iavf_reset_task()
3181 iavf_disable_vf(adapter); in iavf_reset_task()
3183 mutex_unlock(&adapter->crit_lock); in iavf_reset_task()
3184 dev_err(&adapter->pdev->dev, "failed to allocate resources during reinit\n"); in iavf_reset_task()
3193 struct iavf_adapter *adapter = in iavf_adminq_task() local
3195 struct iavf_hw *hw = &adapter->hw; in iavf_adminq_task()
3202 if (!mutex_trylock(&adapter->crit_lock)) { in iavf_adminq_task()
3203 if (adapter->state == __IAVF_REMOVE) in iavf_adminq_task()
3206 queue_work(adapter->wq, &adapter->adminq_task); in iavf_adminq_task()
3210 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) in iavf_adminq_task()
3226 iavf_virtchnl_completion(adapter, v_op, v_ret, event.msg_buf, in iavf_adminq_task()
3232 if (iavf_is_reset_in_progress(adapter)) in iavf_adminq_task()
3241 dev_info(&adapter->pdev->dev, "ARQ VF Error detected\n"); in iavf_adminq_task()
3245 dev_info(&adapter->pdev->dev, "ARQ Overflow Error detected\n"); in iavf_adminq_task()
3249 dev_info(&adapter->pdev->dev, "ARQ Critical Error detected\n"); in iavf_adminq_task()
3258 dev_info(&adapter->pdev->dev, "ASQ VF Error detected\n"); in iavf_adminq_task()
3262 dev_info(&adapter->pdev->dev, "ASQ Overflow Error detected\n"); in iavf_adminq_task()
3266 dev_info(&adapter->pdev->dev, "ASQ Critical Error detected\n"); in iavf_adminq_task()
3275 mutex_unlock(&adapter->crit_lock); in iavf_adminq_task()
3278 iavf_misc_irq_enable(adapter); in iavf_adminq_task()
3283 * @adapter: board private structure
3287 void iavf_free_all_tx_resources(struct iavf_adapter *adapter) in iavf_free_all_tx_resources() argument
3291 if (!adapter->tx_rings) in iavf_free_all_tx_resources()
3294 for (i = 0; i < adapter->num_active_queues; i++) in iavf_free_all_tx_resources()
3295 if (adapter->tx_rings[i].desc) in iavf_free_all_tx_resources()
3296 iavf_free_tx_resources(&adapter->tx_rings[i]); in iavf_free_all_tx_resources()
3301 * @adapter: board private structure
3309 static int iavf_setup_all_tx_resources(struct iavf_adapter *adapter) in iavf_setup_all_tx_resources() argument
3313 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_setup_all_tx_resources()
3314 adapter->tx_rings[i].count = adapter->tx_desc_count; in iavf_setup_all_tx_resources()
3315 err = iavf_setup_tx_descriptors(&adapter->tx_rings[i]); in iavf_setup_all_tx_resources()
3318 dev_err(&adapter->pdev->dev, in iavf_setup_all_tx_resources()
3328 * @adapter: board private structure
3336 static int iavf_setup_all_rx_resources(struct iavf_adapter *adapter) in iavf_setup_all_rx_resources() argument
3340 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_setup_all_rx_resources()
3341 adapter->rx_rings[i].count = adapter->rx_desc_count; in iavf_setup_all_rx_resources()
3342 err = iavf_setup_rx_descriptors(&adapter->rx_rings[i]); in iavf_setup_all_rx_resources()
3345 dev_err(&adapter->pdev->dev, in iavf_setup_all_rx_resources()
3354 * @adapter: board private structure
3358 void iavf_free_all_rx_resources(struct iavf_adapter *adapter) in iavf_free_all_rx_resources() argument
3362 if (!adapter->rx_rings) in iavf_free_all_rx_resources()
3365 for (i = 0; i < adapter->num_active_queues; i++) in iavf_free_all_rx_resources()
3366 if (adapter->rx_rings[i].desc) in iavf_free_all_rx_resources()
3367 iavf_free_rx_resources(&adapter->rx_rings[i]); in iavf_free_all_rx_resources()
3372 * @adapter: board private structure
3375 static int iavf_validate_tx_bandwidth(struct iavf_adapter *adapter, in iavf_validate_tx_bandwidth() argument
3380 if (ADV_LINK_SUPPORT(adapter)) { in iavf_validate_tx_bandwidth()
3381 if (adapter->link_speed_mbps < U32_MAX) { in iavf_validate_tx_bandwidth()
3382 speed = adapter->link_speed_mbps; in iavf_validate_tx_bandwidth()
3385 dev_err(&adapter->pdev->dev, "Unknown link speed\n"); in iavf_validate_tx_bandwidth()
3390 switch (adapter->link_speed) { in iavf_validate_tx_bandwidth()
3421 dev_err(&adapter->pdev->dev, in iavf_validate_tx_bandwidth()
3431 * @adapter: board private structure
3438 static int iavf_validate_ch_config(struct iavf_adapter *adapter, in iavf_validate_ch_config() argument
3456 dev_err(&adapter->pdev->dev, in iavf_validate_ch_config()
3468 dev_err(&adapter->pdev->dev, in iavf_validate_ch_config()
3477 dev_err(&adapter->pdev->dev, in iavf_validate_ch_config()
3486 if (num_qps > adapter->num_active_queues) { in iavf_validate_ch_config()
3487 dev_err(&adapter->pdev->dev, in iavf_validate_ch_config()
3492 ret = iavf_validate_tx_bandwidth(adapter, total_max_rate); in iavf_validate_ch_config()
3498 * @adapter: board private structure
3500 static void iavf_del_all_cloud_filters(struct iavf_adapter *adapter) in iavf_del_all_cloud_filters() argument
3504 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_del_all_cloud_filters()
3505 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, in iavf_del_all_cloud_filters()
3509 adapter->num_cloud_filters--; in iavf_del_all_cloud_filters()
3511 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_del_all_cloud_filters()
3528 struct iavf_adapter *adapter = netdev_priv(netdev); in __iavf_setup_tc() local
3529 struct virtchnl_vf_resource *vfres = adapter->vf_res; in __iavf_setup_tc()
3541 if (adapter->ch_config.state == __IAVF_TC_RUNNING) { in __iavf_setup_tc()
3544 adapter->num_tc = 0; in __iavf_setup_tc()
3547 iavf_del_all_cloud_filters(adapter); in __iavf_setup_tc()
3548 adapter->aq_required = IAVF_FLAG_AQ_DISABLE_CHANNELS; in __iavf_setup_tc()
3549 total_qps = adapter->orig_num_active_queues; in __iavf_setup_tc()
3559 dev_err(&adapter->pdev->dev, "ADq not supported\n"); in __iavf_setup_tc()
3562 if (adapter->ch_config.state != __IAVF_TC_INVALID) { in __iavf_setup_tc()
3563 dev_err(&adapter->pdev->dev, "TC configuration already exists\n"); in __iavf_setup_tc()
3567 ret = iavf_validate_ch_config(adapter, mqprio_qopt); in __iavf_setup_tc()
3571 if (adapter->num_tc == num_tc) in __iavf_setup_tc()
3573 adapter->num_tc = num_tc; in __iavf_setup_tc()
3577 adapter->ch_config.ch_info[i].count = in __iavf_setup_tc()
3579 adapter->ch_config.ch_info[i].offset = in __iavf_setup_tc()
3586 adapter->ch_config.ch_info[i].max_tx_rate = in __iavf_setup_tc()
3589 adapter->ch_config.ch_info[i].count = 1; in __iavf_setup_tc()
3590 adapter->ch_config.ch_info[i].offset = 0; in __iavf_setup_tc()
3600 adapter->orig_num_active_queues = adapter->num_active_queues; in __iavf_setup_tc()
3606 adapter->ch_config.total_qps = total_qps; in __iavf_setup_tc()
3610 adapter->aq_required |= IAVF_FLAG_AQ_ENABLE_CHANNELS; in __iavf_setup_tc()
3613 netdev_set_num_tc(adapter->netdev, num_tc); in __iavf_setup_tc()
3624 if (test_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section)) in __iavf_setup_tc()
3635 * @adapter: board private structure
3639 static int iavf_parse_cls_flower(struct iavf_adapter *adapter, in iavf_parse_cls_flower() argument
3662 dev_err(&adapter->pdev->dev, "Unsupported key used: 0x%llx\n", in iavf_parse_cls_flower()
3695 dev_info(&adapter->pdev->dev, "Only TCP transport is supported\n"); in iavf_parse_cls_flower()
3710 dev_err(&adapter->pdev->dev, "Bad ether dest mask %pM\n", in iavf_parse_cls_flower()
3720 dev_err(&adapter->pdev->dev, "Bad ether src mask %pM\n", in iavf_parse_cls_flower()
3755 dev_err(&adapter->pdev->dev, "Bad vlan mask %u\n", in iavf_parse_cls_flower()
3779 dev_err(&adapter->pdev->dev, "Bad ip dst mask 0x%08x\n", in iavf_parse_cls_flower()
3789 dev_err(&adapter->pdev->dev, "Bad ip src mask 0x%08x\n", in iavf_parse_cls_flower()
3796 dev_info(&adapter->pdev->dev, "Tenant id not allowed for ip filter\n"); in iavf_parse_cls_flower()
3816 dev_err(&adapter->pdev->dev, "Bad ipv6 dst mask 0x%02x\n", in iavf_parse_cls_flower()
3826 dev_err(&adapter->pdev->dev, in iavf_parse_cls_flower()
3851 dev_err(&adapter->pdev->dev, "Bad src port mask %u\n", in iavf_parse_cls_flower()
3861 dev_err(&adapter->pdev->dev, "Bad dst port mask %u\n", in iavf_parse_cls_flower()
3883 * @adapter: board private structure
3887 static int iavf_handle_tclass(struct iavf_adapter *adapter, u32 tc, in iavf_handle_tclass() argument
3892 if (tc < adapter->num_tc) { in iavf_handle_tclass()
3894 dev_err(&adapter->pdev->dev, in iavf_handle_tclass()
3907 * @adapter: Board private structure
3913 static struct iavf_cloud_filter *iavf_find_cf(struct iavf_adapter *adapter, in iavf_find_cf() argument
3921 list_for_each_entry(filter, &adapter->cloud_filter_list, list) { in iavf_find_cf()
3930 * @adapter: board private structure
3933 static int iavf_configure_clsflower(struct iavf_adapter *adapter, in iavf_configure_clsflower() argument
3936 int tc = tc_classid_to_hwtc(adapter->netdev, cls_flower->classid); in iavf_configure_clsflower()
3941 dev_err(&adapter->pdev->dev, "Invalid traffic class\n"); in iavf_configure_clsflower()
3949 while (!mutex_trylock(&adapter->crit_lock)) { in iavf_configure_clsflower()
3960 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_configure_clsflower()
3961 if (iavf_find_cf(adapter, &cls_flower->cookie)) { in iavf_configure_clsflower()
3962 dev_err(&adapter->pdev->dev, "Failed to add TC Flower filter, it already exists\n"); in iavf_configure_clsflower()
3966 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_configure_clsflower()
3972 err = iavf_parse_cls_flower(adapter, cls_flower, filter); in iavf_configure_clsflower()
3976 err = iavf_handle_tclass(adapter, tc, filter); in iavf_configure_clsflower()
3981 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_configure_clsflower()
3982 list_add_tail(&filter->list, &adapter->cloud_filter_list); in iavf_configure_clsflower()
3983 adapter->num_cloud_filters++; in iavf_configure_clsflower()
3985 adapter->aq_required |= IAVF_FLAG_AQ_ADD_CLOUD_FILTER; in iavf_configure_clsflower()
3987 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_configure_clsflower()
3992 mutex_unlock(&adapter->crit_lock); in iavf_configure_clsflower()
3998 * @adapter: board private structure
4001 static int iavf_delete_clsflower(struct iavf_adapter *adapter, in iavf_delete_clsflower() argument
4007 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_delete_clsflower()
4008 filter = iavf_find_cf(adapter, &cls_flower->cookie); in iavf_delete_clsflower()
4011 adapter->aq_required |= IAVF_FLAG_AQ_DEL_CLOUD_FILTER; in iavf_delete_clsflower()
4015 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_delete_clsflower()
4022 * @adapter: board private structure
4025 static int iavf_setup_tc_cls_flower(struct iavf_adapter *adapter, in iavf_setup_tc_cls_flower() argument
4030 return iavf_configure_clsflower(adapter, cls_flower); in iavf_setup_tc_cls_flower()
4032 return iavf_delete_clsflower(adapter, cls_flower); in iavf_setup_tc_cls_flower()
4051 struct iavf_adapter *adapter = cb_priv; in iavf_setup_tc_block_cb() local
4053 if (!tc_cls_can_offload_and_chain0(adapter->netdev, type_data)) in iavf_setup_tc_block_cb()
4080 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_setup_tc() local
4089 adapter, adapter, true); in iavf_setup_tc()
4097 * @adapter: board private structure
4101 static void iavf_restore_fdir_filters(struct iavf_adapter *adapter) in iavf_restore_fdir_filters() argument
4105 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_restore_fdir_filters()
4106 list_for_each_entry(f, &adapter->fdir_list_head, list) { in iavf_restore_fdir_filters()
4116 adapter->aq_required |= IAVF_FLAG_AQ_ADD_FDIR_FILTER; in iavf_restore_fdir_filters()
4119 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_restore_fdir_filters()
4136 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_open() local
4139 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) { in iavf_open()
4140 dev_err(&adapter->pdev->dev, "Unable to open device due to PF driver failure.\n"); in iavf_open()
4144 while (!mutex_trylock(&adapter->crit_lock)) { in iavf_open()
4150 if (adapter->state == __IAVF_INIT_CONFIG_ADAPTER) in iavf_open()
4156 if (adapter->state != __IAVF_DOWN) { in iavf_open()
4161 if (adapter->state == __IAVF_RUNNING && in iavf_open()
4162 !test_bit(__IAVF_VSI_DOWN, adapter->vsi.state)) { in iavf_open()
4163 dev_dbg(&adapter->pdev->dev, "VF is already open.\n"); in iavf_open()
4169 err = iavf_setup_all_tx_resources(adapter); in iavf_open()
4174 err = iavf_setup_all_rx_resources(adapter); in iavf_open()
4179 err = iavf_request_traffic_irqs(adapter, netdev->name); in iavf_open()
4183 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_open()
4185 iavf_add_filter(adapter, adapter->hw.mac.addr); in iavf_open()
4187 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_open()
4190 iavf_restore_filters(adapter); in iavf_open()
4191 iavf_restore_fdir_filters(adapter); in iavf_open()
4193 iavf_configure(adapter); in iavf_open()
4195 iavf_up_complete(adapter); in iavf_open()
4197 iavf_irq_enable(adapter, true); in iavf_open()
4199 mutex_unlock(&adapter->crit_lock); in iavf_open()
4204 iavf_down(adapter); in iavf_open()
4205 iavf_free_traffic_irqs(adapter); in iavf_open()
4207 iavf_free_all_rx_resources(adapter); in iavf_open()
4209 iavf_free_all_tx_resources(adapter); in iavf_open()
4211 mutex_unlock(&adapter->crit_lock); in iavf_open()
4229 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_close() local
4233 mutex_lock(&adapter->crit_lock); in iavf_close()
4235 if (adapter->state <= __IAVF_DOWN_PENDING) { in iavf_close()
4236 mutex_unlock(&adapter->crit_lock); in iavf_close()
4240 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_close()
4250 aq_to_restore = adapter->aq_required; in iavf_close()
4251 adapter->aq_required &= IAVF_FLAG_AQ_GET_CONFIG; in iavf_close()
4265 iavf_down(adapter); in iavf_close()
4266 iavf_change_state(adapter, __IAVF_DOWN_PENDING); in iavf_close()
4267 iavf_free_traffic_irqs(adapter); in iavf_close()
4269 mutex_unlock(&adapter->crit_lock); in iavf_close()
4282 status = wait_event_timeout(adapter->down_waitqueue, in iavf_close()
4283 adapter->state == __IAVF_DOWN, in iavf_close()
4288 mutex_lock(&adapter->crit_lock); in iavf_close()
4289 adapter->aq_required |= aq_to_restore; in iavf_close()
4290 mutex_unlock(&adapter->crit_lock); in iavf_close()
4303 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_change_mtu() local
4311 iavf_schedule_reset(adapter, IAVF_FLAG_RESET_NEEDED); in iavf_change_mtu()
4312 ret = iavf_wait_for_reset(adapter); in iavf_change_mtu()
4324 * @adapter: board private structure
4326 static void iavf_disable_fdir(struct iavf_adapter *adapter) in iavf_disable_fdir() argument
4331 adapter->flags &= ~IAVF_FLAG_FDIR_ENABLED; in iavf_disable_fdir()
4334 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_disable_fdir()
4335 list_for_each_entry_safe(fdir, fdirtmp, &adapter->fdir_list_head, in iavf_disable_fdir()
4342 adapter->fdir_active_fltr--; in iavf_disable_fdir()
4357 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_disable_fdir()
4360 adapter->aq_required |= IAVF_FLAG_AQ_DEL_FDIR_FILTER; in iavf_disable_fdir()
4361 mod_delayed_work(adapter->wq, &adapter->watchdog_task, 0); in iavf_disable_fdir()
4379 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_set_features() local
4384 iavf_set_vlan_offload_features(adapter, netdev->features, in iavf_set_features()
4386 if (CRC_OFFLOAD_ALLOWED(adapter) && in iavf_set_features()
4388 iavf_schedule_reset(adapter, IAVF_FLAG_RESET_NEEDED); in iavf_set_features()
4392 adapter->flags |= IAVF_FLAG_FDIR_ENABLED; in iavf_set_features()
4394 iavf_disable_fdir(adapter); in iavf_set_features()
4460 * @adapter: board private structure
4466 iavf_get_netdev_vlan_hw_features(struct iavf_adapter *adapter) in iavf_get_netdev_vlan_hw_features() argument
4470 if (!adapter->vf_res || !adapter->vf_res->vf_cap_flags) in iavf_get_netdev_vlan_hw_features()
4474 if (VLAN_ALLOWED(adapter)) { in iavf_get_netdev_vlan_hw_features()
4477 } else if (VLAN_V2_ALLOWED(adapter)) { in iavf_get_netdev_vlan_hw_features()
4479 &adapter->vlan_v2_caps; in iavf_get_netdev_vlan_hw_features()
4517 if (CRC_OFFLOAD_ALLOWED(adapter)) in iavf_get_netdev_vlan_hw_features()
4525 * @adapter: board private structure
4531 iavf_get_netdev_vlan_features(struct iavf_adapter *adapter) in iavf_get_netdev_vlan_features() argument
4535 if (!adapter->vf_res || !adapter->vf_res->vf_cap_flags) in iavf_get_netdev_vlan_features()
4538 if (VLAN_ALLOWED(adapter)) { in iavf_get_netdev_vlan_features()
4541 } else if (VLAN_V2_ALLOWED(adapter)) { in iavf_get_netdev_vlan_features()
4543 &adapter->vlan_v2_caps; in iavf_get_netdev_vlan_features()
4628 * @adapter: board private structure
4632 iavf_fix_netdev_vlan_features(struct iavf_adapter *adapter, in iavf_fix_netdev_vlan_features() argument
4637 allowed_features = iavf_get_netdev_vlan_hw_features(adapter) | in iavf_fix_netdev_vlan_features()
4638 iavf_get_netdev_vlan_features(adapter); in iavf_fix_netdev_vlan_features()
4673 adapter->vlan_v2_caps.offloads.ethertype_match == in iavf_fix_netdev_vlan_features()
4675 …netdev_warn(adapter->netdev, "cannot support CTAG and STAG VLAN stripping and/or insertion simulta… in iavf_fix_netdev_vlan_features()
4685 * @adapter: board private structure
4691 iavf_fix_strip_features(struct iavf_adapter *adapter, in iavf_fix_strip_features() argument
4694 struct net_device *netdev = adapter->netdev; in iavf_fix_strip_features()
4699 crc_offload_req = CRC_OFFLOAD_ALLOWED(adapter) && in iavf_fix_strip_features()
4701 num_non_zero_vlan = iavf_get_num_vlans_added(adapter); in iavf_fix_strip_features()
4742 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_fix_features() local
4744 features = iavf_fix_netdev_vlan_features(adapter, features); in iavf_fix_features()
4746 if (!FDIR_FLTR_SUPPORT(adapter)) in iavf_fix_features()
4749 return iavf_fix_strip_features(adapter, features); in iavf_fix_features()
4793 * @adapter: board private structure
4798 int iavf_process_config(struct iavf_adapter *adapter) in iavf_process_config() argument
4800 struct virtchnl_vf_resource *vfres = adapter->vf_res; in iavf_process_config()
4802 struct net_device *netdev = adapter->netdev; in iavf_process_config()
4850 hw_vlan_features = iavf_get_netdev_vlan_hw_features(adapter); in iavf_process_config()
4859 vlan_features = iavf_get_netdev_vlan_features(adapter); in iavf_process_config()
4866 if (FDIR_FLTR_SUPPORT(adapter)) { in iavf_process_config()
4869 adapter->flags |= IAVF_FLAG_FDIR_ENABLED; in iavf_process_config()
4902 * iavf_probe initializes an adapter identified by a pci_dev structure.
4903 * The OS initialization, configuring of the adapter private structure,
4909 struct iavf_adapter *adapter = NULL; in iavf_probe() local
4943 adapter = netdev_priv(netdev); in iavf_probe()
4945 adapter->netdev = netdev; in iavf_probe()
4946 adapter->pdev = pdev; in iavf_probe()
4948 hw = &adapter->hw; in iavf_probe()
4949 hw->back = adapter; in iavf_probe()
4951 adapter->wq = alloc_ordered_workqueue("%s", WQ_MEM_RECLAIM, in iavf_probe()
4953 if (!adapter->wq) { in iavf_probe()
4958 adapter->msg_enable = BIT(DEFAULT_DEBUG_LEVEL_SHIFT) - 1; in iavf_probe()
4959 iavf_change_state(adapter, __IAVF_STARTUP); in iavf_probe()
4961 /* Call save state here because it relies on the adapter struct. */ in iavf_probe()
4982 mutex_init(&adapter->crit_lock); in iavf_probe()
4986 spin_lock_init(&adapter->mac_vlan_list_lock); in iavf_probe()
4987 spin_lock_init(&adapter->cloud_filter_list_lock); in iavf_probe()
4988 spin_lock_init(&adapter->fdir_fltr_lock); in iavf_probe()
4989 spin_lock_init(&adapter->adv_rss_lock); in iavf_probe()
4990 spin_lock_init(&adapter->current_netdev_promisc_flags_lock); in iavf_probe()
4992 INIT_LIST_HEAD(&adapter->mac_filter_list); in iavf_probe()
4993 INIT_LIST_HEAD(&adapter->vlan_filter_list); in iavf_probe()
4994 INIT_LIST_HEAD(&adapter->cloud_filter_list); in iavf_probe()
4995 INIT_LIST_HEAD(&adapter->fdir_list_head); in iavf_probe()
4996 INIT_LIST_HEAD(&adapter->adv_rss_list_head); in iavf_probe()
4998 INIT_WORK(&adapter->reset_task, iavf_reset_task); in iavf_probe()
4999 INIT_WORK(&adapter->adminq_task, iavf_adminq_task); in iavf_probe()
5000 INIT_WORK(&adapter->finish_config, iavf_finish_config); in iavf_probe()
5001 INIT_DELAYED_WORK(&adapter->watchdog_task, iavf_watchdog_task); in iavf_probe()
5004 init_waitqueue_head(&adapter->down_waitqueue); in iavf_probe()
5007 init_waitqueue_head(&adapter->reset_waitqueue); in iavf_probe()
5010 init_waitqueue_head(&adapter->vc_waitqueue); in iavf_probe()
5012 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_probe()
5018 destroy_workqueue(adapter->wq); in iavf_probe()
5038 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_suspend() local
5042 mutex_lock(&adapter->crit_lock); in iavf_suspend()
5046 iavf_down(adapter); in iavf_suspend()
5049 iavf_free_misc_irq(adapter); in iavf_suspend()
5050 iavf_reset_interrupt_capability(adapter); in iavf_suspend()
5052 mutex_unlock(&adapter->crit_lock); in iavf_suspend()
5066 struct iavf_adapter *adapter; in iavf_resume() local
5069 adapter = iavf_pdev_to_adapter(pdev); in iavf_resume()
5074 err = iavf_set_interrupt_capability(adapter); in iavf_resume()
5080 err = iavf_request_misc_irq(adapter); in iavf_resume()
5087 queue_work(adapter->wq, &adapter->reset_task); in iavf_resume()
5089 netif_device_attach(adapter->netdev); in iavf_resume()
5110 struct iavf_adapter *adapter; in iavf_remove() local
5119 adapter = iavf_pdev_to_adapter(pdev); in iavf_remove()
5120 hw = &adapter->hw; in iavf_remove()
5122 if (test_and_set_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section)) in iavf_remove()
5129 mutex_lock(&adapter->crit_lock); in iavf_remove()
5130 if (adapter->state == __IAVF_RUNNING || in iavf_remove()
5131 adapter->state == __IAVF_DOWN || in iavf_remove()
5132 adapter->state == __IAVF_INIT_FAILED) { in iavf_remove()
5133 mutex_unlock(&adapter->crit_lock); in iavf_remove()
5137 if (adapter->state == __IAVF_REMOVE) { in iavf_remove()
5138 mutex_unlock(&adapter->crit_lock); in iavf_remove()
5142 mutex_unlock(&adapter->crit_lock); in iavf_remove()
5145 cancel_delayed_work_sync(&adapter->watchdog_task); in iavf_remove()
5146 cancel_work_sync(&adapter->finish_config); in iavf_remove()
5151 mutex_lock(&adapter->crit_lock); in iavf_remove()
5152 dev_info(&adapter->pdev->dev, "Removing device\n"); in iavf_remove()
5153 iavf_change_state(adapter, __IAVF_REMOVE); in iavf_remove()
5155 iavf_request_reset(adapter); in iavf_remove()
5159 iavf_request_reset(adapter); in iavf_remove()
5163 iavf_misc_irq_disable(adapter); in iavf_remove()
5165 cancel_work_sync(&adapter->reset_task); in iavf_remove()
5166 cancel_delayed_work_sync(&adapter->watchdog_task); in iavf_remove()
5167 cancel_work_sync(&adapter->adminq_task); in iavf_remove()
5169 adapter->aq_required = 0; in iavf_remove()
5170 adapter->flags &= ~IAVF_FLAG_REINIT_ITR_NEEDED; in iavf_remove()
5172 iavf_free_all_tx_resources(adapter); in iavf_remove()
5173 iavf_free_all_rx_resources(adapter); in iavf_remove()
5174 iavf_free_misc_irq(adapter); in iavf_remove()
5175 iavf_free_interrupt_scheme(adapter); in iavf_remove()
5177 iavf_free_rss(adapter); in iavf_remove()
5185 mutex_unlock(&adapter->crit_lock); in iavf_remove()
5186 mutex_destroy(&adapter->crit_lock); in iavf_remove()
5190 kfree(adapter->vf_res); in iavf_remove()
5191 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_remove()
5195 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_remove()
5199 list_for_each_entry_safe(vlf, vlftmp, &adapter->vlan_filter_list, in iavf_remove()
5205 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_remove()
5207 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_remove()
5208 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, list) { in iavf_remove()
5212 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_remove()
5214 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_remove()
5215 list_for_each_entry_safe(fdir, fdirtmp, &adapter->fdir_list_head, list) { in iavf_remove()
5219 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_remove()
5221 spin_lock_bh(&adapter->adv_rss_lock); in iavf_remove()
5222 list_for_each_entry_safe(rss, rsstmp, &adapter->adv_rss_list_head, in iavf_remove()
5227 spin_unlock_bh(&adapter->adv_rss_lock); in iavf_remove()
5229 destroy_workqueue(adapter->wq); in iavf_remove()