Lines Matching full:adapter
17 static int iavf_setup_all_tx_resources(struct iavf_adapter *adapter);
18 static int iavf_setup_all_rx_resources(struct iavf_adapter *adapter);
20 static void iavf_init_get_resources(struct iavf_adapter *adapter);
165 * iavf_pdev_to_adapter - go from pci_dev to adapter
175 * @adapter: board private structure
177 static bool iavf_is_reset_in_progress(struct iavf_adapter *adapter) in iavf_is_reset_in_progress() argument
179 if (adapter->state == __IAVF_RESETTING || in iavf_is_reset_in_progress()
180 adapter->flags & (IAVF_FLAG_RESET_PENDING | in iavf_is_reset_in_progress()
189 * @adapter: board private structure
193 int iavf_wait_for_reset(struct iavf_adapter *adapter) in iavf_wait_for_reset() argument
195 int ret = wait_event_interruptible_timeout(adapter->reset_waitqueue, in iavf_wait_for_reset()
196 !iavf_is_reset_in_progress(adapter), in iavf_wait_for_reset()
223 struct iavf_adapter *adapter = (struct iavf_adapter *)hw->back; in iavf_allocate_dma_mem_d() local
229 mem->va = dma_alloc_coherent(&adapter->pdev->dev, mem->size, in iavf_allocate_dma_mem_d()
244 struct iavf_adapter *adapter = (struct iavf_adapter *)hw->back; in iavf_free_dma_mem() local
248 dma_free_coherent(&adapter->pdev->dev, mem->size, in iavf_free_dma_mem()
286 * @adapter: board private structure
289 void iavf_schedule_reset(struct iavf_adapter *adapter, u64 flags) in iavf_schedule_reset() argument
291 if (!test_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section) && in iavf_schedule_reset()
292 !(adapter->flags & in iavf_schedule_reset()
294 adapter->flags |= flags; in iavf_schedule_reset()
295 queue_work(adapter->wq, &adapter->reset_task); in iavf_schedule_reset()
301 * @adapter: board private structure
304 void iavf_schedule_aq_request(struct iavf_adapter *adapter, u64 flags) in iavf_schedule_aq_request() argument
306 adapter->aq_required |= flags; in iavf_schedule_aq_request()
307 mod_delayed_work(adapter->wq, &adapter->watchdog_task, 0); in iavf_schedule_aq_request()
317 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_tx_timeout() local
319 adapter->tx_timeout_count++; in iavf_tx_timeout()
320 iavf_schedule_reset(adapter, IAVF_FLAG_RESET_NEEDED); in iavf_tx_timeout()
325 * @adapter: board private structure
327 static void iavf_misc_irq_disable(struct iavf_adapter *adapter) in iavf_misc_irq_disable() argument
329 struct iavf_hw *hw = &adapter->hw; in iavf_misc_irq_disable()
331 if (!adapter->msix_entries) in iavf_misc_irq_disable()
338 synchronize_irq(adapter->msix_entries[0].vector); in iavf_misc_irq_disable()
343 * @adapter: board private structure
345 static void iavf_misc_irq_enable(struct iavf_adapter *adapter) in iavf_misc_irq_enable() argument
347 struct iavf_hw *hw = &adapter->hw; in iavf_misc_irq_enable()
358 * @adapter: board private structure
360 static void iavf_irq_disable(struct iavf_adapter *adapter) in iavf_irq_disable() argument
363 struct iavf_hw *hw = &adapter->hw; in iavf_irq_disable()
365 if (!adapter->msix_entries) in iavf_irq_disable()
368 for (i = 1; i < adapter->num_msix_vectors; i++) { in iavf_irq_disable()
370 synchronize_irq(adapter->msix_entries[i].vector); in iavf_irq_disable()
377 * @adapter: board private structure
379 static void iavf_irq_enable_queues(struct iavf_adapter *adapter) in iavf_irq_enable_queues() argument
381 struct iavf_hw *hw = &adapter->hw; in iavf_irq_enable_queues()
384 for (i = 1; i < adapter->num_msix_vectors; i++) { in iavf_irq_enable_queues()
393 * @adapter: board private structure
396 void iavf_irq_enable(struct iavf_adapter *adapter, bool flush) in iavf_irq_enable() argument
398 struct iavf_hw *hw = &adapter->hw; in iavf_irq_enable()
400 iavf_misc_irq_enable(adapter); in iavf_irq_enable()
401 iavf_irq_enable_queues(adapter); in iavf_irq_enable()
415 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_msix_aq() local
416 struct iavf_hw *hw = &adapter->hw; in iavf_msix_aq()
422 if (adapter->state != __IAVF_REMOVE) in iavf_msix_aq()
424 queue_work(adapter->wq, &adapter->adminq_task); in iavf_msix_aq()
448 * @adapter: board private structure
453 iavf_map_vector_to_rxq(struct iavf_adapter *adapter, int v_idx, int r_idx) in iavf_map_vector_to_rxq() argument
455 struct iavf_q_vector *q_vector = &adapter->q_vectors[v_idx]; in iavf_map_vector_to_rxq()
456 struct iavf_ring *rx_ring = &adapter->rx_rings[r_idx]; in iavf_map_vector_to_rxq()
457 struct iavf_hw *hw = &adapter->hw; in iavf_map_vector_to_rxq()
461 rx_ring->vsi = &adapter->vsi; in iavf_map_vector_to_rxq()
474 * @adapter: board private structure
479 iavf_map_vector_to_txq(struct iavf_adapter *adapter, int v_idx, int t_idx) in iavf_map_vector_to_txq() argument
481 struct iavf_q_vector *q_vector = &adapter->q_vectors[v_idx]; in iavf_map_vector_to_txq()
482 struct iavf_ring *tx_ring = &adapter->tx_rings[t_idx]; in iavf_map_vector_to_txq()
483 struct iavf_hw *hw = &adapter->hw; in iavf_map_vector_to_txq()
487 tx_ring->vsi = &adapter->vsi; in iavf_map_vector_to_txq()
500 * @adapter: board private structure to initialize
508 static void iavf_map_rings_to_vectors(struct iavf_adapter *adapter) in iavf_map_rings_to_vectors() argument
510 int rings_remaining = adapter->num_active_queues; in iavf_map_rings_to_vectors()
514 q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_map_rings_to_vectors()
517 iavf_map_vector_to_rxq(adapter, vidx, ridx); in iavf_map_rings_to_vectors()
518 iavf_map_vector_to_txq(adapter, vidx, ridx); in iavf_map_rings_to_vectors()
527 adapter->aq_required |= IAVF_FLAG_AQ_MAP_VECTORS; in iavf_map_rings_to_vectors()
559 * @adapter: board private structure
566 iavf_request_traffic_irqs(struct iavf_adapter *adapter, char *basename) in iavf_request_traffic_irqs() argument
573 iavf_irq_disable(adapter); in iavf_request_traffic_irqs()
575 q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_request_traffic_irqs()
578 struct iavf_q_vector *q_vector = &adapter->q_vectors[vector]; in iavf_request_traffic_irqs()
580 irq_num = adapter->msix_entries[vector + NONQ_VECS].vector; in iavf_request_traffic_irqs()
602 dev_info(&adapter->pdev->dev, in iavf_request_traffic_irqs()
624 irq_num = adapter->msix_entries[vector + NONQ_VECS].vector; in iavf_request_traffic_irqs()
627 free_irq(irq_num, &adapter->q_vectors[vector]); in iavf_request_traffic_irqs()
634 * @adapter: board private structure
640 static int iavf_request_misc_irq(struct iavf_adapter *adapter) in iavf_request_misc_irq() argument
642 struct net_device *netdev = adapter->netdev; in iavf_request_misc_irq()
645 snprintf(adapter->misc_vector_name, in iavf_request_misc_irq()
646 sizeof(adapter->misc_vector_name) - 1, "iavf-%s:mbx", in iavf_request_misc_irq()
647 dev_name(&adapter->pdev->dev)); in iavf_request_misc_irq()
648 err = request_irq(adapter->msix_entries[0].vector, in iavf_request_misc_irq()
650 adapter->misc_vector_name, netdev); in iavf_request_misc_irq()
652 dev_err(&adapter->pdev->dev, in iavf_request_misc_irq()
654 adapter->misc_vector_name, err); in iavf_request_misc_irq()
655 free_irq(adapter->msix_entries[0].vector, netdev); in iavf_request_misc_irq()
662 * @adapter: board private structure
666 static void iavf_free_traffic_irqs(struct iavf_adapter *adapter) in iavf_free_traffic_irqs() argument
670 if (!adapter->msix_entries) in iavf_free_traffic_irqs()
673 q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_free_traffic_irqs()
676 irq_num = adapter->msix_entries[vector + NONQ_VECS].vector; in iavf_free_traffic_irqs()
679 free_irq(irq_num, &adapter->q_vectors[vector]); in iavf_free_traffic_irqs()
685 * @adapter: board private structure
689 static void iavf_free_misc_irq(struct iavf_adapter *adapter) in iavf_free_misc_irq() argument
691 struct net_device *netdev = adapter->netdev; in iavf_free_misc_irq()
693 if (!adapter->msix_entries) in iavf_free_misc_irq()
696 free_irq(adapter->msix_entries[0].vector, netdev); in iavf_free_misc_irq()
701 * @adapter: board private structure
705 static void iavf_configure_tx(struct iavf_adapter *adapter) in iavf_configure_tx() argument
707 struct iavf_hw *hw = &adapter->hw; in iavf_configure_tx()
710 for (i = 0; i < adapter->num_active_queues; i++) in iavf_configure_tx()
711 adapter->tx_rings[i].tail = hw->hw_addr + IAVF_QTX_TAIL1(i); in iavf_configure_tx()
716 * @adapter: adapter private structure
724 static u8 iavf_select_rx_desc_format(const struct iavf_adapter *adapter) in iavf_select_rx_desc_format() argument
726 u64 rxdids = adapter->supp_rxdids; in iavf_select_rx_desc_format()
731 if (!IAVF_RXDID_ALLOWED(adapter)) in iavf_select_rx_desc_format()
735 if (iavf_ptp_cap_supported(adapter, VIRTCHNL_1588_PTP_CAP_RX_TSTAMP)) { in iavf_select_rx_desc_format()
739 pci_warn(adapter->pdev, in iavf_select_rx_desc_format()
750 netdev_warn(adapter->netdev, "PF does not list support for default Rx descriptor format\n"); in iavf_select_rx_desc_format()
757 * @adapter: board private structure
761 static void iavf_configure_rx(struct iavf_adapter *adapter) in iavf_configure_rx() argument
763 struct iavf_hw *hw = &adapter->hw; in iavf_configure_rx()
765 adapter->rxdid = iavf_select_rx_desc_format(adapter); in iavf_configure_rx()
767 for (u32 i = 0; i < adapter->num_active_queues; i++) { in iavf_configure_rx()
768 adapter->rx_rings[i].tail = hw->hw_addr + IAVF_QRX_TAIL1(i); in iavf_configure_rx()
769 adapter->rx_rings[i].rxdid = adapter->rxdid; in iavf_configure_rx()
775 * @adapter: board private structure
782 iavf_vlan_filter *iavf_find_vlan(struct iavf_adapter *adapter, in iavf_find_vlan() argument
787 list_for_each_entry(f, &adapter->vlan_filter_list, list) { in iavf_find_vlan()
798 * @adapter: board private structure
804 iavf_vlan_filter *iavf_add_vlan(struct iavf_adapter *adapter, in iavf_add_vlan() argument
809 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_add_vlan()
811 f = iavf_find_vlan(adapter, vlan); in iavf_add_vlan()
819 list_add_tail(&f->list, &adapter->vlan_filter_list); in iavf_add_vlan()
821 adapter->num_vlan_filters++; in iavf_add_vlan()
822 iavf_schedule_aq_request(adapter, IAVF_FLAG_AQ_ADD_VLAN_FILTER); in iavf_add_vlan()
831 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_add_vlan()
837 * @adapter: board private structure
840 static void iavf_del_vlan(struct iavf_adapter *adapter, struct iavf_vlan vlan) in iavf_del_vlan() argument
844 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_del_vlan()
846 f = iavf_find_vlan(adapter, vlan); in iavf_del_vlan()
854 adapter->num_vlan_filters--; in iavf_del_vlan()
857 iavf_schedule_aq_request(adapter, in iavf_del_vlan()
862 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_del_vlan()
867 * @adapter: board private structure
871 static void iavf_restore_filters(struct iavf_adapter *adapter) in iavf_restore_filters() argument
876 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_restore_filters()
878 list_for_each_entry(f, &adapter->vlan_filter_list, list) { in iavf_restore_filters()
883 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_restore_filters()
884 adapter->aq_required |= IAVF_FLAG_AQ_ADD_VLAN_FILTER; in iavf_restore_filters()
889 * @adapter: board private structure
891 u16 iavf_get_num_vlans_added(struct iavf_adapter *adapter) in iavf_get_num_vlans_added() argument
893 return adapter->num_vlan_filters; in iavf_get_num_vlans_added()
898 * @adapter: board private structure
904 static u16 iavf_get_max_vlans_allowed(struct iavf_adapter *adapter) in iavf_get_max_vlans_allowed() argument
909 if (VLAN_ALLOWED(adapter)) in iavf_get_max_vlans_allowed()
911 else if (VLAN_V2_ALLOWED(adapter)) in iavf_get_max_vlans_allowed()
912 return adapter->vlan_v2_caps.filtering.max_filters; in iavf_get_max_vlans_allowed()
919 * @adapter: board private structure
921 static bool iavf_max_vlans_added(struct iavf_adapter *adapter) in iavf_max_vlans_added() argument
923 if (iavf_get_num_vlans_added(adapter) < in iavf_max_vlans_added()
924 iavf_get_max_vlans_allowed(adapter)) in iavf_max_vlans_added()
939 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_vlan_rx_add_vid() local
945 if (!VLAN_FILTERING_ALLOWED(adapter)) in iavf_vlan_rx_add_vid()
948 if (iavf_max_vlans_added(adapter)) { in iavf_vlan_rx_add_vid()
950 iavf_get_max_vlans_allowed(adapter)); in iavf_vlan_rx_add_vid()
954 if (!iavf_add_vlan(adapter, IAVF_VLAN(vid, be16_to_cpu(proto)))) in iavf_vlan_rx_add_vid()
969 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_vlan_rx_kill_vid() local
975 iavf_del_vlan(adapter, IAVF_VLAN(vid, be16_to_cpu(proto))); in iavf_vlan_rx_kill_vid()
981 * @adapter: board private structure
988 iavf_mac_filter *iavf_find_filter(struct iavf_adapter *adapter, in iavf_find_filter() argument
996 list_for_each_entry(f, &adapter->mac_filter_list, list) { in iavf_find_filter()
1005 * @adapter: board private structure
1010 struct iavf_mac_filter *iavf_add_filter(struct iavf_adapter *adapter, in iavf_add_filter() argument
1018 f = iavf_find_filter(adapter, macaddr); in iavf_add_filter()
1026 list_add_tail(&f->list, &adapter->mac_filter_list); in iavf_add_filter()
1030 f->is_primary = ether_addr_equal(macaddr, adapter->hw.mac.addr); in iavf_add_filter()
1031 adapter->aq_required |= IAVF_FLAG_AQ_ADD_MAC_FILTER; in iavf_add_filter()
1041 * @adapter: board private structure
1050 static int iavf_replace_primary_mac(struct iavf_adapter *adapter, in iavf_replace_primary_mac() argument
1053 struct iavf_hw *hw = &adapter->hw; in iavf_replace_primary_mac()
1057 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_replace_primary_mac()
1059 new_f = iavf_add_filter(adapter, new_mac); in iavf_replace_primary_mac()
1061 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_replace_primary_mac()
1065 old_f = iavf_find_filter(adapter, hw->mac.addr); in iavf_replace_primary_mac()
1069 adapter->aq_required |= IAVF_FLAG_AQ_DEL_MAC_FILTER; in iavf_replace_primary_mac()
1078 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_replace_primary_mac()
1081 iavf_schedule_aq_request(adapter, IAVF_FLAG_AQ_ADD_MAC_FILTER); in iavf_replace_primary_mac()
1095 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_is_mac_set_handled() local
1099 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_is_mac_set_handled()
1101 f = iavf_find_filter(adapter, macaddr); in iavf_is_mac_set_handled()
1106 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_is_mac_set_handled()
1120 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_set_mac() local
1127 ret = iavf_replace_primary_mac(adapter, addr->sa_data); in iavf_set_mac()
1132 ret = wait_event_interruptible_timeout(adapter->vc_waitqueue, in iavf_set_mac()
1164 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_addr_sync() local
1166 if (iavf_add_filter(adapter, addr)) in iavf_addr_sync()
1182 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_addr_unsync() local
1193 f = iavf_find_filter(adapter, addr); in iavf_addr_unsync()
1196 adapter->aq_required |= IAVF_FLAG_AQ_DEL_MAC_FILTER; in iavf_addr_unsync()
1203 * @adapter: device specific adapter
1205 bool iavf_promiscuous_mode_changed(struct iavf_adapter *adapter) in iavf_promiscuous_mode_changed() argument
1207 return (adapter->current_netdev_promisc_flags ^ adapter->netdev->flags) & in iavf_promiscuous_mode_changed()
1217 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_set_rx_mode() local
1219 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_set_rx_mode()
1222 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_set_rx_mode()
1224 spin_lock_bh(&adapter->current_netdev_promisc_flags_lock); in iavf_set_rx_mode()
1225 if (iavf_promiscuous_mode_changed(adapter)) in iavf_set_rx_mode()
1226 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_PROMISC_MODE; in iavf_set_rx_mode()
1227 spin_unlock_bh(&adapter->current_netdev_promisc_flags_lock); in iavf_set_rx_mode()
1232 * @adapter: board private structure
1234 static void iavf_napi_enable_all(struct iavf_adapter *adapter) in iavf_napi_enable_all() argument
1238 int q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_napi_enable_all()
1243 q_vector = &adapter->q_vectors[q_idx]; in iavf_napi_enable_all()
1251 * @adapter: board private structure
1253 static void iavf_napi_disable_all(struct iavf_adapter *adapter) in iavf_napi_disable_all() argument
1257 int q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_napi_disable_all()
1260 q_vector = &adapter->q_vectors[q_idx]; in iavf_napi_disable_all()
1267 * @adapter: board private structure
1269 static void iavf_configure(struct iavf_adapter *adapter) in iavf_configure() argument
1271 struct net_device *netdev = adapter->netdev; in iavf_configure()
1276 iavf_configure_tx(adapter); in iavf_configure()
1277 iavf_configure_rx(adapter); in iavf_configure()
1278 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_QUEUES; in iavf_configure()
1280 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_configure()
1281 struct iavf_ring *ring = &adapter->rx_rings[i]; in iavf_configure()
1289 * @adapter: board private structure
1293 static void iavf_up_complete(struct iavf_adapter *adapter) in iavf_up_complete() argument
1295 iavf_change_state(adapter, __IAVF_RUNNING); in iavf_up_complete()
1296 clear_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_up_complete()
1298 iavf_napi_enable_all(adapter); in iavf_up_complete()
1300 iavf_schedule_aq_request(adapter, IAVF_FLAG_AQ_ENABLE_QUEUES); in iavf_up_complete()
1306 * @adapter: board private structure
1308 static void iavf_clear_mac_vlan_filters(struct iavf_adapter *adapter) in iavf_clear_mac_vlan_filters() argument
1313 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_clear_mac_vlan_filters()
1315 __dev_uc_unsync(adapter->netdev, NULL); in iavf_clear_mac_vlan_filters()
1316 __dev_mc_unsync(adapter->netdev, NULL); in iavf_clear_mac_vlan_filters()
1319 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, in iavf_clear_mac_vlan_filters()
1330 list_for_each_entry_safe(vlf, vlftmp, &adapter->vlan_filter_list, in iavf_clear_mac_vlan_filters()
1334 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_clear_mac_vlan_filters()
1340 * @adapter: board private structure
1342 static void iavf_clear_cloud_filters(struct iavf_adapter *adapter) in iavf_clear_cloud_filters() argument
1347 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_clear_cloud_filters()
1348 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, in iavf_clear_cloud_filters()
1353 adapter->num_cloud_filters--; in iavf_clear_cloud_filters()
1358 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_clear_cloud_filters()
1364 * @adapter: board private structure
1366 static void iavf_clear_fdir_filters(struct iavf_adapter *adapter) in iavf_clear_fdir_filters() argument
1371 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_clear_fdir_filters()
1372 list_for_each_entry(fdir, &adapter->fdir_list_head, list) { in iavf_clear_fdir_filters()
1384 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_clear_fdir_filters()
1390 * @adapter: board private structure
1392 static void iavf_clear_adv_rss_conf(struct iavf_adapter *adapter) in iavf_clear_adv_rss_conf() argument
1397 spin_lock_bh(&adapter->adv_rss_lock); in iavf_clear_adv_rss_conf()
1398 list_for_each_entry_safe(rss, rsstmp, &adapter->adv_rss_list_head, in iavf_clear_adv_rss_conf()
1407 spin_unlock_bh(&adapter->adv_rss_lock); in iavf_clear_adv_rss_conf()
1412 * @adapter: board private structure
1416 void iavf_down(struct iavf_adapter *adapter) in iavf_down() argument
1418 struct net_device *netdev = adapter->netdev; in iavf_down()
1420 if (adapter->state <= __IAVF_DOWN_PENDING) in iavf_down()
1425 adapter->link_up = false; in iavf_down()
1426 iavf_napi_disable_all(adapter); in iavf_down()
1427 iavf_irq_disable(adapter); in iavf_down()
1429 iavf_clear_mac_vlan_filters(adapter); in iavf_down()
1430 iavf_clear_cloud_filters(adapter); in iavf_down()
1431 iavf_clear_fdir_filters(adapter); in iavf_down()
1432 iavf_clear_adv_rss_conf(adapter); in iavf_down()
1434 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) in iavf_down()
1437 if (!test_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section)) { in iavf_down()
1439 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_down()
1444 if (!list_empty(&adapter->mac_filter_list)) in iavf_down()
1445 adapter->aq_required |= IAVF_FLAG_AQ_DEL_MAC_FILTER; in iavf_down()
1446 if (!list_empty(&adapter->vlan_filter_list)) in iavf_down()
1447 adapter->aq_required |= IAVF_FLAG_AQ_DEL_VLAN_FILTER; in iavf_down()
1448 if (!list_empty(&adapter->cloud_filter_list)) in iavf_down()
1449 adapter->aq_required |= IAVF_FLAG_AQ_DEL_CLOUD_FILTER; in iavf_down()
1450 if (!list_empty(&adapter->fdir_list_head)) in iavf_down()
1451 adapter->aq_required |= IAVF_FLAG_AQ_DEL_FDIR_FILTER; in iavf_down()
1452 if (!list_empty(&adapter->adv_rss_list_head)) in iavf_down()
1453 adapter->aq_required |= IAVF_FLAG_AQ_DEL_ADV_RSS_CFG; in iavf_down()
1456 iavf_schedule_aq_request(adapter, IAVF_FLAG_AQ_DISABLE_QUEUES); in iavf_down()
1461 * @adapter: board private structure
1469 iavf_acquire_msix_vectors(struct iavf_adapter *adapter, int vectors) in iavf_acquire_msix_vectors() argument
1485 err = pci_enable_msix_range(adapter->pdev, adapter->msix_entries, in iavf_acquire_msix_vectors()
1488 dev_err(&adapter->pdev->dev, "Unable to allocate MSI-X interrupts\n"); in iavf_acquire_msix_vectors()
1489 kfree(adapter->msix_entries); in iavf_acquire_msix_vectors()
1490 adapter->msix_entries = NULL; in iavf_acquire_msix_vectors()
1498 adapter->num_msix_vectors = err; in iavf_acquire_msix_vectors()
1504 * @adapter: board private structure to initialize
1508 static void iavf_free_queues(struct iavf_adapter *adapter) in iavf_free_queues() argument
1510 if (!adapter->vsi_res) in iavf_free_queues()
1512 adapter->num_active_queues = 0; in iavf_free_queues()
1513 kfree(adapter->tx_rings); in iavf_free_queues()
1514 adapter->tx_rings = NULL; in iavf_free_queues()
1515 kfree(adapter->rx_rings); in iavf_free_queues()
1516 adapter->rx_rings = NULL; in iavf_free_queues()
1521 * @adapter: board private structure
1528 void iavf_set_queue_vlan_tag_loc(struct iavf_adapter *adapter) in iavf_set_queue_vlan_tag_loc() argument
1532 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_set_queue_vlan_tag_loc()
1533 struct iavf_ring *tx_ring = &adapter->tx_rings[i]; in iavf_set_queue_vlan_tag_loc()
1534 struct iavf_ring *rx_ring = &adapter->rx_rings[i]; in iavf_set_queue_vlan_tag_loc()
1544 if (VLAN_ALLOWED(adapter)) { in iavf_set_queue_vlan_tag_loc()
1547 } else if (VLAN_V2_ALLOWED(adapter)) { in iavf_set_queue_vlan_tag_loc()
1552 &adapter->vlan_v2_caps.offloads.stripping_support; in iavf_set_queue_vlan_tag_loc()
1554 &adapter->vlan_v2_caps.offloads.insertion_support; in iavf_set_queue_vlan_tag_loc()
1601 * @adapter: board private structure to initialize
1607 static int iavf_alloc_queues(struct iavf_adapter *adapter) in iavf_alloc_queues() argument
1616 if (adapter->num_req_queues) in iavf_alloc_queues()
1617 num_active_queues = adapter->num_req_queues; in iavf_alloc_queues()
1618 else if ((adapter->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_ADQ) && in iavf_alloc_queues()
1619 adapter->num_tc) in iavf_alloc_queues()
1620 num_active_queues = adapter->ch_config.total_qps; in iavf_alloc_queues()
1623 adapter->vsi_res->num_queue_pairs, in iavf_alloc_queues()
1627 adapter->tx_rings = kcalloc(num_active_queues, in iavf_alloc_queues()
1629 if (!adapter->tx_rings) in iavf_alloc_queues()
1631 adapter->rx_rings = kcalloc(num_active_queues, in iavf_alloc_queues()
1633 if (!adapter->rx_rings) in iavf_alloc_queues()
1640 tx_ring = &adapter->tx_rings[i]; in iavf_alloc_queues()
1643 tx_ring->netdev = adapter->netdev; in iavf_alloc_queues()
1644 tx_ring->dev = &adapter->pdev->dev; in iavf_alloc_queues()
1645 tx_ring->count = adapter->tx_desc_count; in iavf_alloc_queues()
1647 if (adapter->flags & IAVF_FLAG_WB_ON_ITR_CAPABLE) in iavf_alloc_queues()
1650 rx_ring = &adapter->rx_rings[i]; in iavf_alloc_queues()
1652 rx_ring->netdev = adapter->netdev; in iavf_alloc_queues()
1653 rx_ring->count = adapter->rx_desc_count; in iavf_alloc_queues()
1657 adapter->num_active_queues = num_active_queues; in iavf_alloc_queues()
1659 iavf_set_queue_vlan_tag_loc(adapter); in iavf_alloc_queues()
1664 iavf_free_queues(adapter); in iavf_alloc_queues()
1670 * @adapter: board private structure to initialize
1675 static int iavf_set_interrupt_capability(struct iavf_adapter *adapter) in iavf_set_interrupt_capability() argument
1681 if (!adapter->vsi_res) { in iavf_set_interrupt_capability()
1685 pairs = adapter->num_active_queues; in iavf_set_interrupt_capability()
1693 (int)adapter->vf_res->max_vectors); in iavf_set_interrupt_capability()
1695 adapter->msix_entries = kcalloc(v_budget, in iavf_set_interrupt_capability()
1697 if (!adapter->msix_entries) { in iavf_set_interrupt_capability()
1703 adapter->msix_entries[vector].entry = vector; in iavf_set_interrupt_capability()
1705 err = iavf_acquire_msix_vectors(adapter, v_budget); in iavf_set_interrupt_capability()
1707 iavf_schedule_finish_config(adapter); in iavf_set_interrupt_capability()
1715 * @adapter: board private structure
1719 static int iavf_config_rss_aq(struct iavf_adapter *adapter) in iavf_config_rss_aq() argument
1722 (struct iavf_aqc_get_set_rss_key_data *)adapter->rss_key; in iavf_config_rss_aq()
1723 struct iavf_hw *hw = &adapter->hw; in iavf_config_rss_aq()
1726 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_config_rss_aq()
1728 dev_err(&adapter->pdev->dev, "Cannot configure RSS, command %d pending\n", in iavf_config_rss_aq()
1729 adapter->current_op); in iavf_config_rss_aq()
1733 status = iavf_aq_set_rss_key(hw, adapter->vsi.id, rss_key); in iavf_config_rss_aq()
1735 dev_err(&adapter->pdev->dev, "Cannot set RSS key, err %s aq_err %s\n", in iavf_config_rss_aq()
1742 status = iavf_aq_set_rss_lut(hw, adapter->vsi.id, false, in iavf_config_rss_aq()
1743 adapter->rss_lut, adapter->rss_lut_size); in iavf_config_rss_aq()
1745 dev_err(&adapter->pdev->dev, "Cannot set RSS lut, err %s aq_err %s\n", in iavf_config_rss_aq()
1757 * @adapter: board private structure
1761 static int iavf_config_rss_reg(struct iavf_adapter *adapter) in iavf_config_rss_reg() argument
1763 struct iavf_hw *hw = &adapter->hw; in iavf_config_rss_reg()
1767 dw = (u32 *)adapter->rss_key; in iavf_config_rss_reg()
1768 for (i = 0; i <= adapter->rss_key_size / 4; i++) in iavf_config_rss_reg()
1771 dw = (u32 *)adapter->rss_lut; in iavf_config_rss_reg()
1772 for (i = 0; i <= adapter->rss_lut_size / 4; i++) in iavf_config_rss_reg()
1782 * @adapter: board private structure
1786 int iavf_config_rss(struct iavf_adapter *adapter) in iavf_config_rss() argument
1789 if (RSS_PF(adapter)) { in iavf_config_rss()
1790 adapter->aq_required |= IAVF_FLAG_AQ_SET_RSS_LUT | in iavf_config_rss()
1793 } else if (RSS_AQ(adapter)) { in iavf_config_rss()
1794 return iavf_config_rss_aq(adapter); in iavf_config_rss()
1796 return iavf_config_rss_reg(adapter); in iavf_config_rss()
1802 * @adapter: board private structure
1804 static void iavf_fill_rss_lut(struct iavf_adapter *adapter) in iavf_fill_rss_lut() argument
1808 for (i = 0; i < adapter->rss_lut_size; i++) in iavf_fill_rss_lut()
1809 adapter->rss_lut[i] = i % adapter->num_active_queues; in iavf_fill_rss_lut()
1814 * @adapter: board private structure
1818 static int iavf_init_rss(struct iavf_adapter *adapter) in iavf_init_rss() argument
1820 struct iavf_hw *hw = &adapter->hw; in iavf_init_rss()
1822 if (!RSS_PF(adapter)) { in iavf_init_rss()
1824 if (adapter->vf_res->vf_cap_flags & in iavf_init_rss()
1826 adapter->hena = IAVF_DEFAULT_RSS_HENA_EXPANDED; in iavf_init_rss()
1828 adapter->hena = IAVF_DEFAULT_RSS_HENA; in iavf_init_rss()
1830 wr32(hw, IAVF_VFQF_HENA(0), (u32)adapter->hena); in iavf_init_rss()
1831 wr32(hw, IAVF_VFQF_HENA(1), (u32)(adapter->hena >> 32)); in iavf_init_rss()
1834 iavf_fill_rss_lut(adapter); in iavf_init_rss()
1835 netdev_rss_key_fill((void *)adapter->rss_key, adapter->rss_key_size); in iavf_init_rss()
1837 return iavf_config_rss(adapter); in iavf_init_rss()
1842 * @adapter: board private structure to initialize
1847 static int iavf_alloc_q_vectors(struct iavf_adapter *adapter) in iavf_alloc_q_vectors() argument
1852 num_q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_alloc_q_vectors()
1853 adapter->q_vectors = kcalloc(num_q_vectors, sizeof(*q_vector), in iavf_alloc_q_vectors()
1855 if (!adapter->q_vectors) in iavf_alloc_q_vectors()
1859 q_vector = &adapter->q_vectors[q_idx]; in iavf_alloc_q_vectors()
1860 q_vector->adapter = adapter; in iavf_alloc_q_vectors()
1861 q_vector->vsi = &adapter->vsi; in iavf_alloc_q_vectors()
1865 netif_napi_add_locked(adapter->netdev, &q_vector->napi, in iavf_alloc_q_vectors()
1874 * @adapter: board private structure to initialize
1880 static void iavf_free_q_vectors(struct iavf_adapter *adapter) in iavf_free_q_vectors() argument
1884 if (!adapter->q_vectors) in iavf_free_q_vectors()
1887 num_q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_free_q_vectors()
1890 struct iavf_q_vector *q_vector = &adapter->q_vectors[q_idx]; in iavf_free_q_vectors()
1894 kfree(adapter->q_vectors); in iavf_free_q_vectors()
1895 adapter->q_vectors = NULL; in iavf_free_q_vectors()
1900 * @adapter: board private structure
1903 static void iavf_reset_interrupt_capability(struct iavf_adapter *adapter) in iavf_reset_interrupt_capability() argument
1905 if (!adapter->msix_entries) in iavf_reset_interrupt_capability()
1908 pci_disable_msix(adapter->pdev); in iavf_reset_interrupt_capability()
1909 kfree(adapter->msix_entries); in iavf_reset_interrupt_capability()
1910 adapter->msix_entries = NULL; in iavf_reset_interrupt_capability()
1915 * @adapter: board private structure to initialize
1918 static int iavf_init_interrupt_scheme(struct iavf_adapter *adapter) in iavf_init_interrupt_scheme() argument
1922 err = iavf_alloc_queues(adapter); in iavf_init_interrupt_scheme()
1924 dev_err(&adapter->pdev->dev, in iavf_init_interrupt_scheme()
1929 err = iavf_set_interrupt_capability(adapter); in iavf_init_interrupt_scheme()
1931 dev_err(&adapter->pdev->dev, in iavf_init_interrupt_scheme()
1936 err = iavf_alloc_q_vectors(adapter); in iavf_init_interrupt_scheme()
1938 dev_err(&adapter->pdev->dev, in iavf_init_interrupt_scheme()
1948 if ((adapter->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_ADQ) && in iavf_init_interrupt_scheme()
1949 adapter->num_tc) in iavf_init_interrupt_scheme()
1950 dev_info(&adapter->pdev->dev, "ADq Enabled, %u TCs created", in iavf_init_interrupt_scheme()
1951 adapter->num_tc); in iavf_init_interrupt_scheme()
1953 dev_info(&adapter->pdev->dev, "Multiqueue %s: Queue pair count = %u", in iavf_init_interrupt_scheme()
1954 (adapter->num_active_queues > 1) ? "Enabled" : "Disabled", in iavf_init_interrupt_scheme()
1955 adapter->num_active_queues); in iavf_init_interrupt_scheme()
1959 iavf_reset_interrupt_capability(adapter); in iavf_init_interrupt_scheme()
1961 iavf_free_queues(adapter); in iavf_init_interrupt_scheme()
1968 * @adapter: board private structure
1970 static void iavf_free_interrupt_scheme(struct iavf_adapter *adapter) in iavf_free_interrupt_scheme() argument
1972 iavf_free_q_vectors(adapter); in iavf_free_interrupt_scheme()
1973 iavf_reset_interrupt_capability(adapter); in iavf_free_interrupt_scheme()
1974 iavf_free_queues(adapter); in iavf_free_interrupt_scheme()
1979 * @adapter: board private structure
1981 static void iavf_free_rss(struct iavf_adapter *adapter) in iavf_free_rss() argument
1983 kfree(adapter->rss_key); in iavf_free_rss()
1984 adapter->rss_key = NULL; in iavf_free_rss()
1986 kfree(adapter->rss_lut); in iavf_free_rss()
1987 adapter->rss_lut = NULL; in iavf_free_rss()
1992 * @adapter: board private structure
1993 * @running: true if adapter->state == __IAVF_RUNNING
1997 static int iavf_reinit_interrupt_scheme(struct iavf_adapter *adapter, bool running) in iavf_reinit_interrupt_scheme() argument
1999 struct net_device *netdev = adapter->netdev; in iavf_reinit_interrupt_scheme()
2003 iavf_free_traffic_irqs(adapter); in iavf_reinit_interrupt_scheme()
2004 iavf_free_misc_irq(adapter); in iavf_reinit_interrupt_scheme()
2005 iavf_free_interrupt_scheme(adapter); in iavf_reinit_interrupt_scheme()
2007 err = iavf_init_interrupt_scheme(adapter); in iavf_reinit_interrupt_scheme()
2013 err = iavf_request_misc_irq(adapter); in iavf_reinit_interrupt_scheme()
2017 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_reinit_interrupt_scheme()
2019 iavf_map_rings_to_vectors(adapter); in iavf_reinit_interrupt_scheme()
2032 struct iavf_adapter *adapter; in iavf_finish_config() local
2036 adapter = container_of(work, struct iavf_adapter, finish_config); in iavf_finish_config()
2042 netdev_lock(adapter->netdev); in iavf_finish_config()
2043 mutex_lock(&adapter->crit_lock); in iavf_finish_config()
2045 if ((adapter->flags & IAVF_FLAG_SETUP_NETDEV_FEATURES) && in iavf_finish_config()
2046 adapter->netdev->reg_state == NETREG_REGISTERED && in iavf_finish_config()
2047 !test_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section)) { in iavf_finish_config()
2048 netdev_update_features(adapter->netdev); in iavf_finish_config()
2049 adapter->flags &= ~IAVF_FLAG_SETUP_NETDEV_FEATURES; in iavf_finish_config()
2052 switch (adapter->state) { in iavf_finish_config()
2057 pairs = adapter->num_active_queues; in iavf_finish_config()
2058 netif_set_real_num_rx_queues(adapter->netdev, pairs); in iavf_finish_config()
2059 netif_set_real_num_tx_queues(adapter->netdev, pairs); in iavf_finish_config()
2061 if (adapter->netdev->reg_state != NETREG_REGISTERED) { in iavf_finish_config()
2062 mutex_unlock(&adapter->crit_lock); in iavf_finish_config()
2063 netdev_unlock(adapter->netdev); in iavf_finish_config()
2065 err = register_netdevice(adapter->netdev); in iavf_finish_config()
2067 dev_err(&adapter->pdev->dev, "Unable to register netdev (%d)\n", in iavf_finish_config()
2071 mutex_lock(&adapter->crit_lock); in iavf_finish_config()
2072 iavf_free_rss(adapter); in iavf_finish_config()
2073 iavf_free_misc_irq(adapter); in iavf_finish_config()
2074 iavf_reset_interrupt_capability(adapter); in iavf_finish_config()
2075 iavf_change_state(adapter, in iavf_finish_config()
2077 mutex_unlock(&adapter->crit_lock); in iavf_finish_config()
2083 pairs = adapter->num_active_queues; in iavf_finish_config()
2084 netif_set_real_num_rx_queues(adapter->netdev, pairs); in iavf_finish_config()
2085 netif_set_real_num_tx_queues(adapter->netdev, pairs); in iavf_finish_config()
2094 mutex_unlock(&adapter->crit_lock); in iavf_finish_config()
2095 netdev_unlock(adapter->netdev); in iavf_finish_config()
2102 * @adapter: board private structure
2104 void iavf_schedule_finish_config(struct iavf_adapter *adapter) in iavf_schedule_finish_config() argument
2106 if (!test_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section)) in iavf_schedule_finish_config()
2107 queue_work(adapter->wq, &adapter->finish_config); in iavf_schedule_finish_config()
2113 * @adapter: pointer to iavf adapter structure
2119 static int iavf_process_aq_command(struct iavf_adapter *adapter) in iavf_process_aq_command() argument
2121 if (adapter->aq_required & IAVF_FLAG_AQ_GET_CONFIG) in iavf_process_aq_command()
2122 return iavf_send_vf_config_msg(adapter); in iavf_process_aq_command()
2123 if (adapter->aq_required & IAVF_FLAG_AQ_GET_OFFLOAD_VLAN_V2_CAPS) in iavf_process_aq_command()
2124 return iavf_send_vf_offload_vlan_v2_msg(adapter); in iavf_process_aq_command()
2125 if (adapter->aq_required & IAVF_FLAG_AQ_GET_SUPPORTED_RXDIDS) in iavf_process_aq_command()
2126 return iavf_send_vf_supported_rxdids_msg(adapter); in iavf_process_aq_command()
2127 if (adapter->aq_required & IAVF_FLAG_AQ_GET_PTP_CAPS) in iavf_process_aq_command()
2128 return iavf_send_vf_ptp_caps_msg(adapter); in iavf_process_aq_command()
2129 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_QUEUES) { in iavf_process_aq_command()
2130 iavf_disable_queues(adapter); in iavf_process_aq_command()
2134 if (adapter->aq_required & IAVF_FLAG_AQ_MAP_VECTORS) { in iavf_process_aq_command()
2135 iavf_map_queues(adapter); in iavf_process_aq_command()
2139 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_MAC_FILTER) { in iavf_process_aq_command()
2140 iavf_add_ether_addrs(adapter); in iavf_process_aq_command()
2144 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_VLAN_FILTER) { in iavf_process_aq_command()
2145 iavf_add_vlans(adapter); in iavf_process_aq_command()
2149 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_MAC_FILTER) { in iavf_process_aq_command()
2150 iavf_del_ether_addrs(adapter); in iavf_process_aq_command()
2154 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_VLAN_FILTER) { in iavf_process_aq_command()
2155 iavf_del_vlans(adapter); in iavf_process_aq_command()
2159 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_VLAN_STRIPPING) { in iavf_process_aq_command()
2160 iavf_enable_vlan_stripping(adapter); in iavf_process_aq_command()
2164 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_VLAN_STRIPPING) { in iavf_process_aq_command()
2165 iavf_disable_vlan_stripping(adapter); in iavf_process_aq_command()
2169 if (adapter->aq_required & IAVF_FLAG_AQ_CONFIGURE_QUEUES_BW) { in iavf_process_aq_command()
2170 iavf_cfg_queues_bw(adapter); in iavf_process_aq_command()
2174 if (adapter->aq_required & IAVF_FLAG_AQ_GET_QOS_CAPS) { in iavf_process_aq_command()
2175 iavf_get_qos_caps(adapter); in iavf_process_aq_command()
2179 if (adapter->aq_required & IAVF_FLAG_AQ_CFG_QUEUES_QUANTA_SIZE) { in iavf_process_aq_command()
2180 iavf_cfg_queues_quanta_size(adapter); in iavf_process_aq_command()
2184 if (adapter->aq_required & IAVF_FLAG_AQ_CONFIGURE_QUEUES) { in iavf_process_aq_command()
2185 iavf_configure_queues(adapter); in iavf_process_aq_command()
2189 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_QUEUES) { in iavf_process_aq_command()
2190 iavf_enable_queues(adapter); in iavf_process_aq_command()
2194 if (adapter->aq_required & IAVF_FLAG_AQ_CONFIGURE_RSS) { in iavf_process_aq_command()
2199 adapter->aq_required &= ~IAVF_FLAG_AQ_CONFIGURE_RSS; in iavf_process_aq_command()
2202 if (adapter->aq_required & IAVF_FLAG_AQ_GET_HENA) { in iavf_process_aq_command()
2203 iavf_get_hena(adapter); in iavf_process_aq_command()
2206 if (adapter->aq_required & IAVF_FLAG_AQ_SET_HENA) { in iavf_process_aq_command()
2207 iavf_set_hena(adapter); in iavf_process_aq_command()
2210 if (adapter->aq_required & IAVF_FLAG_AQ_SET_RSS_KEY) { in iavf_process_aq_command()
2211 iavf_set_rss_key(adapter); in iavf_process_aq_command()
2214 if (adapter->aq_required & IAVF_FLAG_AQ_SET_RSS_LUT) { in iavf_process_aq_command()
2215 iavf_set_rss_lut(adapter); in iavf_process_aq_command()
2218 if (adapter->aq_required & IAVF_FLAG_AQ_SET_RSS_HFUNC) { in iavf_process_aq_command()
2219 iavf_set_rss_hfunc(adapter); in iavf_process_aq_command()
2223 if (adapter->aq_required & IAVF_FLAG_AQ_CONFIGURE_PROMISC_MODE) { in iavf_process_aq_command()
2224 iavf_set_promiscuous(adapter); in iavf_process_aq_command()
2228 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_CHANNELS) { in iavf_process_aq_command()
2229 iavf_enable_channels(adapter); in iavf_process_aq_command()
2233 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_CHANNELS) { in iavf_process_aq_command()
2234 iavf_disable_channels(adapter); in iavf_process_aq_command()
2237 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_CLOUD_FILTER) { in iavf_process_aq_command()
2238 iavf_add_cloud_filter(adapter); in iavf_process_aq_command()
2241 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_CLOUD_FILTER) { in iavf_process_aq_command()
2242 iavf_del_cloud_filter(adapter); in iavf_process_aq_command()
2245 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_FDIR_FILTER) { in iavf_process_aq_command()
2246 iavf_add_fdir_filter(adapter); in iavf_process_aq_command()
2249 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_FDIR_FILTER) { in iavf_process_aq_command()
2250 iavf_del_fdir_filter(adapter); in iavf_process_aq_command()
2253 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_ADV_RSS_CFG) { in iavf_process_aq_command()
2254 iavf_add_adv_rss_cfg(adapter); in iavf_process_aq_command()
2257 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_ADV_RSS_CFG) { in iavf_process_aq_command()
2258 iavf_del_adv_rss_cfg(adapter); in iavf_process_aq_command()
2261 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_CTAG_VLAN_STRIPPING) { in iavf_process_aq_command()
2262 iavf_disable_vlan_stripping_v2(adapter, ETH_P_8021Q); in iavf_process_aq_command()
2265 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_STAG_VLAN_STRIPPING) { in iavf_process_aq_command()
2266 iavf_disable_vlan_stripping_v2(adapter, ETH_P_8021AD); in iavf_process_aq_command()
2269 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_CTAG_VLAN_STRIPPING) { in iavf_process_aq_command()
2270 iavf_enable_vlan_stripping_v2(adapter, ETH_P_8021Q); in iavf_process_aq_command()
2273 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_STAG_VLAN_STRIPPING) { in iavf_process_aq_command()
2274 iavf_enable_vlan_stripping_v2(adapter, ETH_P_8021AD); in iavf_process_aq_command()
2277 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_CTAG_VLAN_INSERTION) { in iavf_process_aq_command()
2278 iavf_disable_vlan_insertion_v2(adapter, ETH_P_8021Q); in iavf_process_aq_command()
2281 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_STAG_VLAN_INSERTION) { in iavf_process_aq_command()
2282 iavf_disable_vlan_insertion_v2(adapter, ETH_P_8021AD); in iavf_process_aq_command()
2285 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_CTAG_VLAN_INSERTION) { in iavf_process_aq_command()
2286 iavf_enable_vlan_insertion_v2(adapter, ETH_P_8021Q); in iavf_process_aq_command()
2289 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_STAG_VLAN_INSERTION) { in iavf_process_aq_command()
2290 iavf_enable_vlan_insertion_v2(adapter, ETH_P_8021AD); in iavf_process_aq_command()
2293 if (adapter->aq_required & IAVF_FLAG_AQ_SEND_PTP_CMD) { in iavf_process_aq_command()
2294 iavf_virtchnl_send_ptp_cmd(adapter); in iavf_process_aq_command()
2297 if (adapter->aq_required & IAVF_FLAG_AQ_REQUEST_STATS) { in iavf_process_aq_command()
2298 iavf_request_stats(adapter); in iavf_process_aq_command()
2307 * @adapter: board private structure
2317 iavf_set_vlan_offload_features(struct iavf_adapter *adapter, in iavf_set_vlan_offload_features() argument
2347 if (VLAN_ALLOWED(adapter)) { in iavf_set_vlan_offload_features()
2357 } else if (VLAN_V2_ALLOWED(adapter)) { in iavf_set_vlan_offload_features()
2385 iavf_schedule_aq_request(adapter, aq_required); in iavf_set_vlan_offload_features()
2390 * @adapter: board private structure
2396 static void iavf_startup(struct iavf_adapter *adapter) in iavf_startup() argument
2398 struct pci_dev *pdev = adapter->pdev; in iavf_startup()
2399 struct iavf_hw *hw = &adapter->hw; in iavf_startup()
2403 WARN_ON(adapter->state != __IAVF_STARTUP); in iavf_startup()
2406 adapter->flags &= ~IAVF_FLAG_PF_COMMS_FAILED; in iavf_startup()
2407 adapter->flags &= ~IAVF_FLAG_RESET_PENDING; in iavf_startup()
2426 ret = iavf_send_api_ver(adapter); in iavf_startup()
2432 iavf_change_state(adapter, __IAVF_INIT_VERSION_CHECK); in iavf_startup()
2435 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_startup()
2440 * @adapter: board private structure
2446 static void iavf_init_version_check(struct iavf_adapter *adapter) in iavf_init_version_check() argument
2448 struct pci_dev *pdev = adapter->pdev; in iavf_init_version_check()
2449 struct iavf_hw *hw = &adapter->hw; in iavf_init_version_check()
2452 WARN_ON(adapter->state != __IAVF_INIT_VERSION_CHECK); in iavf_init_version_check()
2457 iavf_change_state(adapter, __IAVF_STARTUP); in iavf_init_version_check()
2462 err = iavf_verify_api_ver(adapter); in iavf_init_version_check()
2465 err = iavf_send_api_ver(adapter); in iavf_init_version_check()
2468 adapter->pf_version.major, in iavf_init_version_check()
2469 adapter->pf_version.minor, in iavf_init_version_check()
2474 err = iavf_send_vf_config_msg(adapter); in iavf_init_version_check()
2480 iavf_change_state(adapter, __IAVF_INIT_GET_RESOURCES); in iavf_init_version_check()
2483 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_init_version_check()
2488 * @adapter: board private structure
2490 int iavf_parse_vf_resource_msg(struct iavf_adapter *adapter) in iavf_parse_vf_resource_msg() argument
2492 int i, num_req_queues = adapter->num_req_queues; in iavf_parse_vf_resource_msg()
2493 struct iavf_vsi *vsi = &adapter->vsi; in iavf_parse_vf_resource_msg()
2495 for (i = 0; i < adapter->vf_res->num_vsis; i++) { in iavf_parse_vf_resource_msg()
2496 if (adapter->vf_res->vsi_res[i].vsi_type == VIRTCHNL_VSI_SRIOV) in iavf_parse_vf_resource_msg()
2497 adapter->vsi_res = &adapter->vf_res->vsi_res[i]; in iavf_parse_vf_resource_msg()
2499 if (!adapter->vsi_res) { in iavf_parse_vf_resource_msg()
2500 dev_err(&adapter->pdev->dev, "No LAN VSI found\n"); in iavf_parse_vf_resource_msg()
2505 num_req_queues > adapter->vsi_res->num_queue_pairs) { in iavf_parse_vf_resource_msg()
2510 dev_err(&adapter->pdev->dev, in iavf_parse_vf_resource_msg()
2513 adapter->vsi_res->num_queue_pairs); in iavf_parse_vf_resource_msg()
2514 adapter->flags |= IAVF_FLAG_REINIT_MSIX_NEEDED; in iavf_parse_vf_resource_msg()
2515 adapter->num_req_queues = adapter->vsi_res->num_queue_pairs; in iavf_parse_vf_resource_msg()
2516 iavf_schedule_reset(adapter, IAVF_FLAG_RESET_NEEDED); in iavf_parse_vf_resource_msg()
2520 adapter->num_req_queues = 0; in iavf_parse_vf_resource_msg()
2521 adapter->vsi.id = adapter->vsi_res->vsi_id; in iavf_parse_vf_resource_msg()
2523 adapter->vsi.back = adapter; in iavf_parse_vf_resource_msg()
2524 adapter->vsi.base_vector = 1; in iavf_parse_vf_resource_msg()
2525 vsi->netdev = adapter->netdev; in iavf_parse_vf_resource_msg()
2526 vsi->qs_handle = adapter->vsi_res->qset_handle; in iavf_parse_vf_resource_msg()
2527 if (adapter->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_RSS_PF) { in iavf_parse_vf_resource_msg()
2528 adapter->rss_key_size = adapter->vf_res->rss_key_size; in iavf_parse_vf_resource_msg()
2529 adapter->rss_lut_size = adapter->vf_res->rss_lut_size; in iavf_parse_vf_resource_msg()
2531 adapter->rss_key_size = IAVF_HKEY_ARRAY_SIZE; in iavf_parse_vf_resource_msg()
2532 adapter->rss_lut_size = IAVF_HLUT_ARRAY_SIZE; in iavf_parse_vf_resource_msg()
2540 * @adapter: board private structure
2547 static void iavf_init_get_resources(struct iavf_adapter *adapter) in iavf_init_get_resources() argument
2549 struct pci_dev *pdev = adapter->pdev; in iavf_init_get_resources()
2550 struct iavf_hw *hw = &adapter->hw; in iavf_init_get_resources()
2553 WARN_ON(adapter->state != __IAVF_INIT_GET_RESOURCES); in iavf_init_get_resources()
2555 if (!adapter->vf_res) { in iavf_init_get_resources()
2556 adapter->vf_res = kzalloc(IAVF_VIRTCHNL_VF_RESOURCE_SIZE, in iavf_init_get_resources()
2558 if (!adapter->vf_res) { in iavf_init_get_resources()
2563 err = iavf_get_vf_config(adapter); in iavf_init_get_resources()
2565 err = iavf_send_vf_config_msg(adapter); in iavf_init_get_resources()
2581 err = iavf_parse_vf_resource_msg(adapter); in iavf_init_get_resources()
2591 adapter->extended_caps = IAVF_EXTENDED_CAPS; in iavf_init_get_resources()
2593 iavf_change_state(adapter, __IAVF_INIT_EXTENDED_CAPS); in iavf_init_get_resources()
2597 kfree(adapter->vf_res); in iavf_init_get_resources()
2598 adapter->vf_res = NULL; in iavf_init_get_resources()
2600 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_init_get_resources()
2605 * @adapter: board private structure
2611 static void iavf_init_send_offload_vlan_v2_caps(struct iavf_adapter *adapter) in iavf_init_send_offload_vlan_v2_caps() argument
2615 WARN_ON(!(adapter->extended_caps & IAVF_EXTENDED_CAP_SEND_VLAN_V2)); in iavf_init_send_offload_vlan_v2_caps()
2617 ret = iavf_send_vf_offload_vlan_v2_msg(adapter); in iavf_init_send_offload_vlan_v2_caps()
2623 adapter->extended_caps &= ~IAVF_EXTENDED_CAP_RECV_VLAN_V2; in iavf_init_send_offload_vlan_v2_caps()
2627 adapter->extended_caps &= ~IAVF_EXTENDED_CAP_SEND_VLAN_V2; in iavf_init_send_offload_vlan_v2_caps()
2632 * @adapter: board private structure
2637 static void iavf_init_recv_offload_vlan_v2_caps(struct iavf_adapter *adapter) in iavf_init_recv_offload_vlan_v2_caps() argument
2641 WARN_ON(!(adapter->extended_caps & IAVF_EXTENDED_CAP_RECV_VLAN_V2)); in iavf_init_recv_offload_vlan_v2_caps()
2643 memset(&adapter->vlan_v2_caps, 0, sizeof(adapter->vlan_v2_caps)); in iavf_init_recv_offload_vlan_v2_caps()
2645 ret = iavf_get_vf_vlan_v2_caps(adapter); in iavf_init_recv_offload_vlan_v2_caps()
2650 adapter->extended_caps &= ~IAVF_EXTENDED_CAP_RECV_VLAN_V2; in iavf_init_recv_offload_vlan_v2_caps()
2656 adapter->extended_caps |= IAVF_EXTENDED_CAP_SEND_VLAN_V2; in iavf_init_recv_offload_vlan_v2_caps()
2657 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_init_recv_offload_vlan_v2_caps()
2663 * @adapter: board private structure
2669 static void iavf_init_send_supported_rxdids(struct iavf_adapter *adapter) in iavf_init_send_supported_rxdids() argument
2673 ret = iavf_send_vf_supported_rxdids_msg(adapter); in iavf_init_send_supported_rxdids()
2679 adapter->extended_caps &= ~IAVF_EXTENDED_CAP_RECV_RXDID; in iavf_init_send_supported_rxdids()
2683 adapter->extended_caps &= ~IAVF_EXTENDED_CAP_SEND_RXDID; in iavf_init_send_supported_rxdids()
2689 * @adapter: board private structure
2693 static void iavf_init_recv_supported_rxdids(struct iavf_adapter *adapter) in iavf_init_recv_supported_rxdids() argument
2697 memset(&adapter->supp_rxdids, 0, sizeof(adapter->supp_rxdids)); in iavf_init_recv_supported_rxdids()
2699 ret = iavf_get_vf_supported_rxdids(adapter); in iavf_init_recv_supported_rxdids()
2706 adapter->extended_caps &= ~IAVF_EXTENDED_CAP_RECV_RXDID; in iavf_init_recv_supported_rxdids()
2713 adapter->extended_caps |= IAVF_EXTENDED_CAP_SEND_RXDID; in iavf_init_recv_supported_rxdids()
2714 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_init_recv_supported_rxdids()
2719 * @adapter: board private structure
2725 static void iavf_init_send_ptp_caps(struct iavf_adapter *adapter) in iavf_init_send_ptp_caps() argument
2727 if (iavf_send_vf_ptp_caps_msg(adapter) == -EOPNOTSUPP) { in iavf_init_send_ptp_caps()
2732 adapter->extended_caps &= ~IAVF_EXTENDED_CAP_RECV_PTP; in iavf_init_send_ptp_caps()
2736 adapter->extended_caps &= ~IAVF_EXTENDED_CAP_SEND_PTP; in iavf_init_send_ptp_caps()
2741 * @adapter: board private structure
2745 static void iavf_init_recv_ptp_caps(struct iavf_adapter *adapter) in iavf_init_recv_ptp_caps() argument
2747 memset(&adapter->ptp.hw_caps, 0, sizeof(adapter->ptp.hw_caps)); in iavf_init_recv_ptp_caps()
2749 if (iavf_get_vf_ptp_caps(adapter)) in iavf_init_recv_ptp_caps()
2755 adapter->extended_caps &= ~IAVF_EXTENDED_CAP_RECV_PTP; in iavf_init_recv_ptp_caps()
2762 adapter->extended_caps |= IAVF_EXTENDED_CAP_SEND_PTP; in iavf_init_recv_ptp_caps()
2763 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_init_recv_ptp_caps()
2768 * @adapter: board private structure
2777 static void iavf_init_process_extended_caps(struct iavf_adapter *adapter) in iavf_init_process_extended_caps() argument
2779 WARN_ON(adapter->state != __IAVF_INIT_EXTENDED_CAPS); in iavf_init_process_extended_caps()
2782 if (adapter->extended_caps & IAVF_EXTENDED_CAP_SEND_VLAN_V2) { in iavf_init_process_extended_caps()
2783 iavf_init_send_offload_vlan_v2_caps(adapter); in iavf_init_process_extended_caps()
2785 } else if (adapter->extended_caps & IAVF_EXTENDED_CAP_RECV_VLAN_V2) { in iavf_init_process_extended_caps()
2786 iavf_init_recv_offload_vlan_v2_caps(adapter); in iavf_init_process_extended_caps()
2791 if (adapter->extended_caps & IAVF_EXTENDED_CAP_SEND_RXDID) { in iavf_init_process_extended_caps()
2792 iavf_init_send_supported_rxdids(adapter); in iavf_init_process_extended_caps()
2794 } else if (adapter->extended_caps & IAVF_EXTENDED_CAP_RECV_RXDID) { in iavf_init_process_extended_caps()
2795 iavf_init_recv_supported_rxdids(adapter); in iavf_init_process_extended_caps()
2800 if (adapter->extended_caps & IAVF_EXTENDED_CAP_SEND_PTP) { in iavf_init_process_extended_caps()
2801 iavf_init_send_ptp_caps(adapter); in iavf_init_process_extended_caps()
2803 } else if (adapter->extended_caps & IAVF_EXTENDED_CAP_RECV_PTP) { in iavf_init_process_extended_caps()
2804 iavf_init_recv_ptp_caps(adapter); in iavf_init_process_extended_caps()
2811 iavf_change_state(adapter, __IAVF_INIT_CONFIG_ADAPTER); in iavf_init_process_extended_caps()
2816 * @adapter: board private structure
2821 static void iavf_init_config_adapter(struct iavf_adapter *adapter) in iavf_init_config_adapter() argument
2823 struct net_device *netdev = adapter->netdev; in iavf_init_config_adapter()
2824 struct pci_dev *pdev = adapter->pdev; in iavf_init_config_adapter()
2827 WARN_ON(adapter->state != __IAVF_INIT_CONFIG_ADAPTER); in iavf_init_config_adapter()
2829 if (iavf_process_config(adapter)) in iavf_init_config_adapter()
2832 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_init_config_adapter()
2834 adapter->flags |= IAVF_FLAG_RX_CSUM_ENABLED; in iavf_init_config_adapter()
2843 if (!is_valid_ether_addr(adapter->hw.mac.addr)) { in iavf_init_config_adapter()
2845 adapter->hw.mac.addr); in iavf_init_config_adapter()
2847 ether_addr_copy(adapter->hw.mac.addr, netdev->dev_addr); in iavf_init_config_adapter()
2849 eth_hw_addr_set(netdev, adapter->hw.mac.addr); in iavf_init_config_adapter()
2850 ether_addr_copy(netdev->perm_addr, adapter->hw.mac.addr); in iavf_init_config_adapter()
2853 adapter->tx_desc_count = IAVF_DEFAULT_TXD; in iavf_init_config_adapter()
2854 adapter->rx_desc_count = IAVF_DEFAULT_RXD; in iavf_init_config_adapter()
2855 err = iavf_init_interrupt_scheme(adapter); in iavf_init_config_adapter()
2858 iavf_map_rings_to_vectors(adapter); in iavf_init_config_adapter()
2859 if (adapter->vf_res->vf_cap_flags & in iavf_init_config_adapter()
2861 adapter->flags |= IAVF_FLAG_WB_ON_ITR_CAPABLE; in iavf_init_config_adapter()
2863 err = iavf_request_misc_irq(adapter); in iavf_init_config_adapter()
2868 adapter->link_up = false; in iavf_init_config_adapter()
2871 dev_info(&pdev->dev, "MAC address: %pM\n", adapter->hw.mac.addr); in iavf_init_config_adapter()
2875 iavf_change_state(adapter, __IAVF_DOWN); in iavf_init_config_adapter()
2876 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_init_config_adapter()
2878 iavf_misc_irq_enable(adapter); in iavf_init_config_adapter()
2879 wake_up(&adapter->down_waitqueue); in iavf_init_config_adapter()
2881 adapter->rss_key = kzalloc(adapter->rss_key_size, GFP_KERNEL); in iavf_init_config_adapter()
2882 adapter->rss_lut = kzalloc(adapter->rss_lut_size, GFP_KERNEL); in iavf_init_config_adapter()
2883 if (!adapter->rss_key || !adapter->rss_lut) { in iavf_init_config_adapter()
2887 if (RSS_AQ(adapter)) in iavf_init_config_adapter()
2888 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_RSS; in iavf_init_config_adapter()
2890 iavf_init_rss(adapter); in iavf_init_config_adapter()
2892 if (VLAN_V2_ALLOWED(adapter)) in iavf_init_config_adapter()
2894 iavf_set_vlan_offload_features(adapter, 0, netdev->features); in iavf_init_config_adapter()
2896 if (QOS_ALLOWED(adapter)) in iavf_init_config_adapter()
2897 adapter->aq_required |= IAVF_FLAG_AQ_GET_QOS_CAPS; in iavf_init_config_adapter()
2900 iavf_ptp_init(adapter); in iavf_init_config_adapter()
2902 iavf_schedule_finish_config(adapter); in iavf_init_config_adapter()
2906 iavf_free_rss(adapter); in iavf_init_config_adapter()
2907 iavf_free_misc_irq(adapter); in iavf_init_config_adapter()
2909 iavf_reset_interrupt_capability(adapter); in iavf_init_config_adapter()
2911 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_init_config_adapter()
2920 struct iavf_adapter *adapter = container_of(work, in iavf_watchdog_task() local
2923 struct net_device *netdev = adapter->netdev; in iavf_watchdog_task()
2924 struct iavf_hw *hw = &adapter->hw; in iavf_watchdog_task()
2928 if (!mutex_trylock(&adapter->crit_lock)) { in iavf_watchdog_task()
2929 if (adapter->state == __IAVF_REMOVE) { in iavf_watchdog_task()
2937 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) in iavf_watchdog_task()
2938 iavf_change_state(adapter, __IAVF_COMM_FAILED); in iavf_watchdog_task()
2940 switch (adapter->state) { in iavf_watchdog_task()
2942 iavf_startup(adapter); in iavf_watchdog_task()
2943 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2945 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2949 iavf_init_version_check(adapter); in iavf_watchdog_task()
2950 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2952 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2956 iavf_init_get_resources(adapter); in iavf_watchdog_task()
2957 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2959 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2963 iavf_init_process_extended_caps(adapter); in iavf_watchdog_task()
2964 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2966 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2970 iavf_init_config_adapter(adapter); in iavf_watchdog_task()
2971 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2973 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2978 &adapter->crit_section)) { in iavf_watchdog_task()
2983 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2987 if (++adapter->aq_wait_count > IAVF_AQ_MAX_ERR) { in iavf_watchdog_task()
2988 dev_err(&adapter->pdev->dev, in iavf_watchdog_task()
2990 adapter->flags |= IAVF_FLAG_PF_COMMS_FAILED; in iavf_watchdog_task()
2992 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2994 queue_delayed_work(adapter->wq, in iavf_watchdog_task()
2995 &adapter->watchdog_task, (5 * HZ)); in iavf_watchdog_task()
2999 iavf_change_state(adapter, adapter->last_state); in iavf_watchdog_task()
3000 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
3002 queue_delayed_work(adapter->wq, &adapter->watchdog_task, HZ); in iavf_watchdog_task()
3006 &adapter->crit_section)) { in iavf_watchdog_task()
3011 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_watchdog_task()
3012 adapter->flags &= ~IAVF_FLAG_PF_COMMS_FAILED; in iavf_watchdog_task()
3013 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
3022 dev_err(&adapter->pdev->dev, in iavf_watchdog_task()
3028 iavf_change_state(adapter, __IAVF_STARTUP); in iavf_watchdog_task()
3029 adapter->flags &= ~IAVF_FLAG_PF_COMMS_FAILED; in iavf_watchdog_task()
3031 adapter->aq_required = 0; in iavf_watchdog_task()
3032 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_watchdog_task()
3033 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
3035 queue_delayed_work(adapter->wq, in iavf_watchdog_task()
3036 &adapter->watchdog_task, in iavf_watchdog_task()
3040 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
3042 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
3049 if (adapter->current_op) { in iavf_watchdog_task()
3051 dev_dbg(&adapter->pdev->dev, in iavf_watchdog_task()
3053 iavf_send_api_ver(adapter); in iavf_watchdog_task()
3056 int ret = iavf_process_aq_command(adapter); in iavf_watchdog_task()
3063 adapter->state == __IAVF_RUNNING) in iavf_watchdog_task()
3064 iavf_request_stats(adapter); in iavf_watchdog_task()
3066 if (adapter->state == __IAVF_RUNNING) in iavf_watchdog_task()
3067 iavf_detect_recover_hung(&adapter->vsi); in iavf_watchdog_task()
3071 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
3079 adapter->aq_required = 0; in iavf_watchdog_task()
3080 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_watchdog_task()
3081 dev_err(&adapter->pdev->dev, "Hardware reset detected\n"); in iavf_watchdog_task()
3082 iavf_schedule_reset(adapter, IAVF_FLAG_RESET_PENDING); in iavf_watchdog_task()
3083 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
3085 queue_delayed_work(adapter->wq, in iavf_watchdog_task()
3086 &adapter->watchdog_task, HZ * 2); in iavf_watchdog_task()
3090 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
3093 if (adapter->state >= __IAVF_DOWN) in iavf_watchdog_task()
3094 queue_work(adapter->wq, &adapter->adminq_task); in iavf_watchdog_task()
3095 if (adapter->aq_required) in iavf_watchdog_task()
3096 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
3099 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
3105 * @adapter: board private structure
3110 static void iavf_disable_vf(struct iavf_adapter *adapter) in iavf_disable_vf() argument
3116 adapter->flags |= IAVF_FLAG_PF_COMMS_FAILED; in iavf_disable_vf()
3122 if (adapter->state == __IAVF_RUNNING) { in iavf_disable_vf()
3123 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_disable_vf()
3124 netif_carrier_off(adapter->netdev); in iavf_disable_vf()
3125 netif_tx_disable(adapter->netdev); in iavf_disable_vf()
3126 adapter->link_up = false; in iavf_disable_vf()
3127 iavf_napi_disable_all(adapter); in iavf_disable_vf()
3128 iavf_irq_disable(adapter); in iavf_disable_vf()
3129 iavf_free_traffic_irqs(adapter); in iavf_disable_vf()
3130 iavf_free_all_tx_resources(adapter); in iavf_disable_vf()
3131 iavf_free_all_rx_resources(adapter); in iavf_disable_vf()
3134 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_disable_vf()
3137 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_disable_vf()
3142 list_for_each_entry_safe(fv, fvtmp, &adapter->vlan_filter_list, list) { in iavf_disable_vf()
3146 adapter->num_vlan_filters = 0; in iavf_disable_vf()
3148 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_disable_vf()
3150 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_disable_vf()
3151 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, list) { in iavf_disable_vf()
3154 adapter->num_cloud_filters--; in iavf_disable_vf()
3156 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_disable_vf()
3158 iavf_free_misc_irq(adapter); in iavf_disable_vf()
3159 iavf_free_interrupt_scheme(adapter); in iavf_disable_vf()
3160 memset(adapter->vf_res, 0, IAVF_VIRTCHNL_VF_RESOURCE_SIZE); in iavf_disable_vf()
3161 iavf_shutdown_adminq(&adapter->hw); in iavf_disable_vf()
3162 adapter->flags &= ~IAVF_FLAG_RESET_PENDING; in iavf_disable_vf()
3163 iavf_change_state(adapter, __IAVF_DOWN); in iavf_disable_vf()
3164 wake_up(&adapter->down_waitqueue); in iavf_disable_vf()
3165 dev_info(&adapter->pdev->dev, "Reset task did not complete, VF disabled\n"); in iavf_disable_vf()
3170 * @adapter: board private structure
3177 static void iavf_reconfig_qs_bw(struct iavf_adapter *adapter) in iavf_reconfig_qs_bw() argument
3181 for (i = 0; i < adapter->num_active_queues; i++) in iavf_reconfig_qs_bw()
3182 if (adapter->tx_rings[i].q_shaper.bw_min || in iavf_reconfig_qs_bw()
3183 adapter->tx_rings[i].q_shaper.bw_max) { in iavf_reconfig_qs_bw()
3184 adapter->tx_rings[i].q_shaper_update = true; in iavf_reconfig_qs_bw()
3189 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_QUEUES_BW; in iavf_reconfig_qs_bw()
3202 struct iavf_adapter *adapter = container_of(work, in iavf_reset_task() local
3205 struct virtchnl_vf_resource *vfres = adapter->vf_res; in iavf_reset_task()
3206 struct net_device *netdev = adapter->netdev; in iavf_reset_task()
3207 struct iavf_hw *hw = &adapter->hw; in iavf_reset_task()
3219 if (!mutex_trylock(&adapter->crit_lock)) { in iavf_reset_task()
3220 if (adapter->state != __IAVF_REMOVE) in iavf_reset_task()
3221 queue_work(adapter->wq, &adapter->reset_task); in iavf_reset_task()
3227 iavf_misc_irq_disable(adapter); in iavf_reset_task()
3228 if (adapter->flags & IAVF_FLAG_RESET_NEEDED) { in iavf_reset_task()
3229 adapter->flags &= ~IAVF_FLAG_RESET_NEEDED; in iavf_reset_task()
3235 iavf_request_reset(adapter); in iavf_reset_task()
3237 adapter->flags |= IAVF_FLAG_RESET_PENDING; in iavf_reset_task()
3248 dev_info(&adapter->pdev->dev, "Never saw reset\n"); in iavf_reset_task()
3263 pci_set_master(adapter->pdev); in iavf_reset_task()
3264 pci_restore_msi_state(adapter->pdev); in iavf_reset_task()
3267 dev_err(&adapter->pdev->dev, "Reset never finished (%x)\n", in iavf_reset_task()
3269 iavf_disable_vf(adapter); in iavf_reset_task()
3270 mutex_unlock(&adapter->crit_lock); in iavf_reset_task()
3280 running = adapter->state == __IAVF_RUNNING; in iavf_reset_task()
3285 adapter->link_up = false; in iavf_reset_task()
3286 iavf_napi_disable_all(adapter); in iavf_reset_task()
3288 iavf_irq_disable(adapter); in iavf_reset_task()
3290 iavf_change_state(adapter, __IAVF_RESETTING); in iavf_reset_task()
3291 adapter->flags &= ~IAVF_FLAG_RESET_PENDING; in iavf_reset_task()
3296 iavf_free_all_rx_resources(adapter); in iavf_reset_task()
3297 iavf_free_all_tx_resources(adapter); in iavf_reset_task()
3299 adapter->flags |= IAVF_FLAG_QUEUES_DISABLED; in iavf_reset_task()
3302 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_reset_task()
3305 dev_info(&adapter->pdev->dev, "Failed to init adminq: %d\n", in iavf_reset_task()
3309 adapter->aq_required = 0; in iavf_reset_task()
3311 if ((adapter->flags & IAVF_FLAG_REINIT_MSIX_NEEDED) || in iavf_reset_task()
3312 (adapter->flags & IAVF_FLAG_REINIT_ITR_NEEDED)) { in iavf_reset_task()
3313 err = iavf_reinit_interrupt_scheme(adapter, running); in iavf_reset_task()
3318 if (RSS_AQ(adapter)) { in iavf_reset_task()
3319 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_RSS; in iavf_reset_task()
3321 err = iavf_init_rss(adapter); in iavf_reset_task()
3326 adapter->aq_required |= IAVF_FLAG_AQ_GET_CONFIG; in iavf_reset_task()
3327 adapter->aq_required |= IAVF_FLAG_AQ_MAP_VECTORS; in iavf_reset_task()
3337 adapter->aq_required |= IAVF_FLAG_AQ_EXTENDED_CAPS; in iavf_reset_task()
3339 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_reset_task()
3345 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_reset_task()
3346 if (ether_addr_equal(f->macaddr, adapter->hw.mac.addr)) { in iavf_reset_task()
3352 list_for_each_entry(f, &adapter->mac_filter_list, list) { in iavf_reset_task()
3355 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_reset_task()
3358 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_reset_task()
3360 adapter->num_tc) { in iavf_reset_task()
3361 list_for_each_entry(cf, &adapter->cloud_filter_list, list) { in iavf_reset_task()
3365 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_reset_task()
3367 adapter->aq_required |= IAVF_FLAG_AQ_ADD_MAC_FILTER; in iavf_reset_task()
3368 adapter->aq_required |= IAVF_FLAG_AQ_ADD_CLOUD_FILTER; in iavf_reset_task()
3369 iavf_misc_irq_enable(adapter); in iavf_reset_task()
3371 mod_delayed_work(adapter->wq, &adapter->watchdog_task, 2); in iavf_reset_task()
3378 err = iavf_setup_all_tx_resources(adapter); in iavf_reset_task()
3383 err = iavf_setup_all_rx_resources(adapter); in iavf_reset_task()
3387 if ((adapter->flags & IAVF_FLAG_REINIT_MSIX_NEEDED) || in iavf_reset_task()
3388 (adapter->flags & IAVF_FLAG_REINIT_ITR_NEEDED)) { in iavf_reset_task()
3389 err = iavf_request_traffic_irqs(adapter, netdev->name); in iavf_reset_task()
3393 adapter->flags &= ~IAVF_FLAG_REINIT_MSIX_NEEDED; in iavf_reset_task()
3396 iavf_configure(adapter); in iavf_reset_task()
3401 iavf_up_complete(adapter); in iavf_reset_task()
3403 iavf_irq_enable(adapter, true); in iavf_reset_task()
3405 iavf_reconfig_qs_bw(adapter); in iavf_reset_task()
3407 iavf_change_state(adapter, __IAVF_DOWN); in iavf_reset_task()
3408 wake_up(&adapter->down_waitqueue); in iavf_reset_task()
3411 adapter->flags &= ~IAVF_FLAG_REINIT_ITR_NEEDED; in iavf_reset_task()
3413 wake_up(&adapter->reset_waitqueue); in iavf_reset_task()
3414 mutex_unlock(&adapter->crit_lock); in iavf_reset_task()
3420 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_reset_task()
3421 iavf_free_traffic_irqs(adapter); in iavf_reset_task()
3423 iavf_disable_vf(adapter); in iavf_reset_task()
3425 mutex_unlock(&adapter->crit_lock); in iavf_reset_task()
3427 dev_err(&adapter->pdev->dev, "failed to allocate resources during reinit\n"); in iavf_reset_task()
3436 struct iavf_adapter *adapter = in iavf_adminq_task() local
3438 struct iavf_hw *hw = &adapter->hw; in iavf_adminq_task()
3445 if (!mutex_trylock(&adapter->crit_lock)) { in iavf_adminq_task()
3446 if (adapter->state == __IAVF_REMOVE) in iavf_adminq_task()
3449 queue_work(adapter->wq, &adapter->adminq_task); in iavf_adminq_task()
3453 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) in iavf_adminq_task()
3469 iavf_virtchnl_completion(adapter, v_op, v_ret, event.msg_buf, in iavf_adminq_task()
3475 if (iavf_is_reset_in_progress(adapter)) in iavf_adminq_task()
3484 dev_info(&adapter->pdev->dev, "ARQ VF Error detected\n"); in iavf_adminq_task()
3488 dev_info(&adapter->pdev->dev, "ARQ Overflow Error detected\n"); in iavf_adminq_task()
3492 dev_info(&adapter->pdev->dev, "ARQ Critical Error detected\n"); in iavf_adminq_task()
3501 dev_info(&adapter->pdev->dev, "ASQ VF Error detected\n"); in iavf_adminq_task()
3505 dev_info(&adapter->pdev->dev, "ASQ Overflow Error detected\n"); in iavf_adminq_task()
3509 dev_info(&adapter->pdev->dev, "ASQ Critical Error detected\n"); in iavf_adminq_task()
3518 mutex_unlock(&adapter->crit_lock); in iavf_adminq_task()
3521 iavf_misc_irq_enable(adapter); in iavf_adminq_task()
3526 * @adapter: board private structure
3530 void iavf_free_all_tx_resources(struct iavf_adapter *adapter) in iavf_free_all_tx_resources() argument
3534 if (!adapter->tx_rings) in iavf_free_all_tx_resources()
3537 for (i = 0; i < adapter->num_active_queues; i++) in iavf_free_all_tx_resources()
3538 if (adapter->tx_rings[i].desc) in iavf_free_all_tx_resources()
3539 iavf_free_tx_resources(&adapter->tx_rings[i]); in iavf_free_all_tx_resources()
3544 * @adapter: board private structure
3552 static int iavf_setup_all_tx_resources(struct iavf_adapter *adapter) in iavf_setup_all_tx_resources() argument
3556 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_setup_all_tx_resources()
3557 adapter->tx_rings[i].count = adapter->tx_desc_count; in iavf_setup_all_tx_resources()
3558 err = iavf_setup_tx_descriptors(&adapter->tx_rings[i]); in iavf_setup_all_tx_resources()
3561 dev_err(&adapter->pdev->dev, in iavf_setup_all_tx_resources()
3571 * @adapter: board private structure
3579 static int iavf_setup_all_rx_resources(struct iavf_adapter *adapter) in iavf_setup_all_rx_resources() argument
3583 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_setup_all_rx_resources()
3584 adapter->rx_rings[i].count = adapter->rx_desc_count; in iavf_setup_all_rx_resources()
3585 err = iavf_setup_rx_descriptors(&adapter->rx_rings[i]); in iavf_setup_all_rx_resources()
3588 dev_err(&adapter->pdev->dev, in iavf_setup_all_rx_resources()
3597 * @adapter: board private structure
3601 void iavf_free_all_rx_resources(struct iavf_adapter *adapter) in iavf_free_all_rx_resources() argument
3605 if (!adapter->rx_rings) in iavf_free_all_rx_resources()
3608 for (i = 0; i < adapter->num_active_queues; i++) in iavf_free_all_rx_resources()
3609 if (adapter->rx_rings[i].desc) in iavf_free_all_rx_resources()
3610 iavf_free_rx_resources(&adapter->rx_rings[i]); in iavf_free_all_rx_resources()
3615 * @adapter: board private structure
3618 static int iavf_validate_tx_bandwidth(struct iavf_adapter *adapter, in iavf_validate_tx_bandwidth() argument
3623 if (ADV_LINK_SUPPORT(adapter)) { in iavf_validate_tx_bandwidth()
3624 if (adapter->link_speed_mbps < U32_MAX) { in iavf_validate_tx_bandwidth()
3625 speed = adapter->link_speed_mbps; in iavf_validate_tx_bandwidth()
3628 dev_err(&adapter->pdev->dev, "Unknown link speed\n"); in iavf_validate_tx_bandwidth()
3633 switch (adapter->link_speed) { in iavf_validate_tx_bandwidth()
3664 dev_err(&adapter->pdev->dev, in iavf_validate_tx_bandwidth()
3674 * @adapter: board private structure
3681 static int iavf_validate_ch_config(struct iavf_adapter *adapter, in iavf_validate_ch_config() argument
3699 dev_err(&adapter->pdev->dev, in iavf_validate_ch_config()
3711 dev_err(&adapter->pdev->dev, in iavf_validate_ch_config()
3720 dev_err(&adapter->pdev->dev, in iavf_validate_ch_config()
3729 if (num_qps > adapter->num_active_queues) { in iavf_validate_ch_config()
3730 dev_err(&adapter->pdev->dev, in iavf_validate_ch_config()
3735 ret = iavf_validate_tx_bandwidth(adapter, total_max_rate); in iavf_validate_ch_config()
3741 * @adapter: board private structure
3743 static void iavf_del_all_cloud_filters(struct iavf_adapter *adapter) in iavf_del_all_cloud_filters() argument
3747 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_del_all_cloud_filters()
3748 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, in iavf_del_all_cloud_filters()
3752 adapter->num_cloud_filters--; in iavf_del_all_cloud_filters()
3754 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_del_all_cloud_filters()
3759 * TC config already configured on this adapter.
3760 * @adapter: board private structure
3764 * with the config already configured on the adapter.
3768 static bool iavf_is_tc_config_same(struct iavf_adapter *adapter, in iavf_is_tc_config_same() argument
3771 struct virtchnl_channel_info *ch = &adapter->ch_config.ch_info[0]; in iavf_is_tc_config_same()
3774 if (adapter->num_tc != mqprio_qopt->num_tc) in iavf_is_tc_config_same()
3777 for (i = 0; i < adapter->num_tc; i++) { in iavf_is_tc_config_same()
3799 struct iavf_adapter *adapter = netdev_priv(netdev); in __iavf_setup_tc() local
3800 struct virtchnl_vf_resource *vfres = adapter->vf_res; in __iavf_setup_tc()
3812 if (adapter->ch_config.state == __IAVF_TC_RUNNING) { in __iavf_setup_tc()
3815 adapter->num_tc = 0; in __iavf_setup_tc()
3818 iavf_del_all_cloud_filters(adapter); in __iavf_setup_tc()
3819 adapter->aq_required = IAVF_FLAG_AQ_DISABLE_CHANNELS; in __iavf_setup_tc()
3820 total_qps = adapter->orig_num_active_queues; in __iavf_setup_tc()
3830 dev_err(&adapter->pdev->dev, "ADq not supported\n"); in __iavf_setup_tc()
3833 if (adapter->ch_config.state != __IAVF_TC_INVALID) { in __iavf_setup_tc()
3834 dev_err(&adapter->pdev->dev, "TC configuration already exists\n"); in __iavf_setup_tc()
3838 ret = iavf_validate_ch_config(adapter, mqprio_qopt); in __iavf_setup_tc()
3842 if (iavf_is_tc_config_same(adapter, &mqprio_qopt->qopt)) in __iavf_setup_tc()
3844 adapter->num_tc = num_tc; in __iavf_setup_tc()
3848 adapter->ch_config.ch_info[i].count = in __iavf_setup_tc()
3850 adapter->ch_config.ch_info[i].offset = in __iavf_setup_tc()
3857 adapter->ch_config.ch_info[i].max_tx_rate = in __iavf_setup_tc()
3860 adapter->ch_config.ch_info[i].count = 1; in __iavf_setup_tc()
3861 adapter->ch_config.ch_info[i].offset = 0; in __iavf_setup_tc()
3871 adapter->orig_num_active_queues = adapter->num_active_queues; in __iavf_setup_tc()
3877 adapter->ch_config.total_qps = total_qps; in __iavf_setup_tc()
3881 adapter->aq_required |= IAVF_FLAG_AQ_ENABLE_CHANNELS; in __iavf_setup_tc()
3884 netdev_set_num_tc(adapter->netdev, num_tc); in __iavf_setup_tc()
3895 if (test_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section)) in __iavf_setup_tc()
3906 * @adapter: board private structure
3910 static int iavf_parse_cls_flower(struct iavf_adapter *adapter, in iavf_parse_cls_flower() argument
3933 dev_err(&adapter->pdev->dev, "Unsupported key used: 0x%llx\n", in iavf_parse_cls_flower()
3966 dev_info(&adapter->pdev->dev, "Only TCP transport is supported\n"); in iavf_parse_cls_flower()
3981 dev_err(&adapter->pdev->dev, "Bad ether dest mask %pM\n", in iavf_parse_cls_flower()
3991 dev_err(&adapter->pdev->dev, "Bad ether src mask %pM\n", in iavf_parse_cls_flower()
4026 dev_err(&adapter->pdev->dev, "Bad vlan mask %u\n", in iavf_parse_cls_flower()
4054 dev_err(&adapter->pdev->dev, "Bad ip dst mask 0x%08x\n", in iavf_parse_cls_flower()
4064 dev_err(&adapter->pdev->dev, "Bad ip src mask 0x%08x\n", in iavf_parse_cls_flower()
4071 dev_info(&adapter->pdev->dev, "Tenant id not allowed for ip filter\n"); in iavf_parse_cls_flower()
4091 dev_err(&adapter->pdev->dev, "Bad ipv6 dst mask 0x%02x\n", in iavf_parse_cls_flower()
4101 dev_err(&adapter->pdev->dev, in iavf_parse_cls_flower()
4126 dev_err(&adapter->pdev->dev, "Bad src port mask %u\n", in iavf_parse_cls_flower()
4136 dev_err(&adapter->pdev->dev, "Bad dst port mask %u\n", in iavf_parse_cls_flower()
4158 * @adapter: board private structure
4162 static int iavf_handle_tclass(struct iavf_adapter *adapter, u32 tc, in iavf_handle_tclass() argument
4167 if (tc < adapter->num_tc) { in iavf_handle_tclass()
4169 dev_err(&adapter->pdev->dev, in iavf_handle_tclass()
4182 * @adapter: Board private structure
4188 static struct iavf_cloud_filter *iavf_find_cf(struct iavf_adapter *adapter, in iavf_find_cf() argument
4196 list_for_each_entry(filter, &adapter->cloud_filter_list, list) { in iavf_find_cf()
4205 * @adapter: board private structure
4208 static int iavf_configure_clsflower(struct iavf_adapter *adapter, in iavf_configure_clsflower() argument
4211 int tc = tc_classid_to_hwtc(adapter->netdev, cls_flower->classid); in iavf_configure_clsflower()
4216 dev_err(&adapter->pdev->dev, "Invalid traffic class\n"); in iavf_configure_clsflower()
4224 while (!mutex_trylock(&adapter->crit_lock)) { in iavf_configure_clsflower()
4235 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_configure_clsflower()
4236 if (iavf_find_cf(adapter, &cls_flower->cookie)) { in iavf_configure_clsflower()
4237 dev_err(&adapter->pdev->dev, "Failed to add TC Flower filter, it already exists\n"); in iavf_configure_clsflower()
4241 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_configure_clsflower()
4247 err = iavf_parse_cls_flower(adapter, cls_flower, filter); in iavf_configure_clsflower()
4251 err = iavf_handle_tclass(adapter, tc, filter); in iavf_configure_clsflower()
4256 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_configure_clsflower()
4257 list_add_tail(&filter->list, &adapter->cloud_filter_list); in iavf_configure_clsflower()
4258 adapter->num_cloud_filters++; in iavf_configure_clsflower()
4260 adapter->aq_required |= IAVF_FLAG_AQ_ADD_CLOUD_FILTER; in iavf_configure_clsflower()
4262 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_configure_clsflower()
4267 mutex_unlock(&adapter->crit_lock); in iavf_configure_clsflower()
4273 * @adapter: board private structure
4276 static int iavf_delete_clsflower(struct iavf_adapter *adapter, in iavf_delete_clsflower() argument
4282 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_delete_clsflower()
4283 filter = iavf_find_cf(adapter, &cls_flower->cookie); in iavf_delete_clsflower()
4286 adapter->aq_required |= IAVF_FLAG_AQ_DEL_CLOUD_FILTER; in iavf_delete_clsflower()
4290 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_delete_clsflower()
4297 * @adapter: pointer to iavf adapter structure
4300 static int iavf_setup_tc_cls_flower(struct iavf_adapter *adapter, in iavf_setup_tc_cls_flower() argument
4305 return iavf_configure_clsflower(adapter, cls_flower); in iavf_setup_tc_cls_flower()
4307 return iavf_delete_clsflower(adapter, cls_flower); in iavf_setup_tc_cls_flower()
4317 * @adapter: pointer to iavf adapter structure
4322 static int iavf_add_cls_u32(struct iavf_adapter *adapter, in iavf_add_cls_u32() argument
4395 if (q_index >= adapter->num_active_queues) { in iavf_add_cls_u32()
4417 fltr->vc_add_msg.vsi_id = adapter->vsi.id; in iavf_add_cls_u32()
4419 return iavf_fdir_add_fltr(adapter, fltr); in iavf_add_cls_u32()
4428 * @adapter: pointer to iavf adapter structure
4433 static int iavf_del_cls_u32(struct iavf_adapter *adapter, in iavf_del_cls_u32() argument
4436 return iavf_fdir_del_fltr(adapter, true, cls_u32->knode.handle); in iavf_del_cls_u32()
4441 * @adapter: pointer to iavf adapter structure
4446 static int iavf_setup_tc_cls_u32(struct iavf_adapter *adapter, in iavf_setup_tc_cls_u32() argument
4449 if (!TC_U32_SUPPORT(adapter) || !FDIR_FLTR_SUPPORT(adapter)) in iavf_setup_tc_cls_u32()
4455 return iavf_add_cls_u32(adapter, cls_u32); in iavf_setup_tc_cls_u32()
4457 return iavf_del_cls_u32(adapter, cls_u32); in iavf_setup_tc_cls_u32()
4474 struct iavf_adapter *adapter = cb_priv; in iavf_setup_tc_block_cb() local
4476 if (!tc_cls_can_offload_and_chain0(adapter->netdev, type_data)) in iavf_setup_tc_block_cb()
4505 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_setup_tc() local
4514 adapter, adapter, true); in iavf_setup_tc()
4522 * @adapter: board private structure
4526 static void iavf_restore_fdir_filters(struct iavf_adapter *adapter) in iavf_restore_fdir_filters() argument
4530 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_restore_fdir_filters()
4531 list_for_each_entry(f, &adapter->fdir_list_head, list) { in iavf_restore_fdir_filters()
4541 adapter->aq_required |= IAVF_FLAG_AQ_ADD_FDIR_FILTER; in iavf_restore_fdir_filters()
4544 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_restore_fdir_filters()
4561 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_open() local
4566 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) { in iavf_open()
4567 dev_err(&adapter->pdev->dev, "Unable to open device due to PF driver failure.\n"); in iavf_open()
4571 while (!mutex_trylock(&adapter->crit_lock)) { in iavf_open()
4577 if (adapter->state == __IAVF_INIT_CONFIG_ADAPTER) in iavf_open()
4583 if (adapter->state != __IAVF_DOWN) { in iavf_open()
4588 if (adapter->state == __IAVF_RUNNING && in iavf_open()
4589 !test_bit(__IAVF_VSI_DOWN, adapter->vsi.state)) { in iavf_open()
4590 dev_dbg(&adapter->pdev->dev, "VF is already open.\n"); in iavf_open()
4596 err = iavf_setup_all_tx_resources(adapter); in iavf_open()
4601 err = iavf_setup_all_rx_resources(adapter); in iavf_open()
4606 err = iavf_request_traffic_irqs(adapter, netdev->name); in iavf_open()
4610 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_open()
4612 iavf_add_filter(adapter, adapter->hw.mac.addr); in iavf_open()
4614 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_open()
4617 iavf_restore_filters(adapter); in iavf_open()
4618 iavf_restore_fdir_filters(adapter); in iavf_open()
4620 iavf_configure(adapter); in iavf_open()
4622 iavf_up_complete(adapter); in iavf_open()
4624 iavf_irq_enable(adapter, true); in iavf_open()
4626 mutex_unlock(&adapter->crit_lock); in iavf_open()
4631 iavf_down(adapter); in iavf_open()
4632 iavf_free_traffic_irqs(adapter); in iavf_open()
4634 iavf_free_all_rx_resources(adapter); in iavf_open()
4636 iavf_free_all_tx_resources(adapter); in iavf_open()
4638 mutex_unlock(&adapter->crit_lock); in iavf_open()
4656 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_close() local
4662 mutex_lock(&adapter->crit_lock); in iavf_close()
4664 if (adapter->state <= __IAVF_DOWN_PENDING) { in iavf_close()
4665 mutex_unlock(&adapter->crit_lock); in iavf_close()
4669 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_close()
4679 aq_to_restore = adapter->aq_required; in iavf_close()
4680 adapter->aq_required &= IAVF_FLAG_AQ_GET_CONFIG; in iavf_close()
4694 iavf_down(adapter); in iavf_close()
4695 iavf_change_state(adapter, __IAVF_DOWN_PENDING); in iavf_close()
4696 iavf_free_traffic_irqs(adapter); in iavf_close()
4698 mutex_unlock(&adapter->crit_lock); in iavf_close()
4712 status = wait_event_timeout(adapter->down_waitqueue, in iavf_close()
4713 adapter->state == __IAVF_DOWN, in iavf_close()
4719 mutex_lock(&adapter->crit_lock); in iavf_close()
4720 adapter->aq_required |= aq_to_restore; in iavf_close()
4721 mutex_unlock(&adapter->crit_lock); in iavf_close()
4734 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_change_mtu() local
4742 iavf_schedule_reset(adapter, IAVF_FLAG_RESET_NEEDED); in iavf_change_mtu()
4743 ret = iavf_wait_for_reset(adapter); in iavf_change_mtu()
4755 * @adapter: board private structure
4757 static void iavf_disable_fdir(struct iavf_adapter *adapter) in iavf_disable_fdir() argument
4762 adapter->flags &= ~IAVF_FLAG_FDIR_ENABLED; in iavf_disable_fdir()
4765 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_disable_fdir()
4766 list_for_each_entry_safe(fdir, fdirtmp, &adapter->fdir_list_head, in iavf_disable_fdir()
4772 iavf_dec_fdir_active_fltr(adapter, fdir); in iavf_disable_fdir()
4788 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_disable_fdir()
4791 adapter->aq_required |= IAVF_FLAG_AQ_DEL_FDIR_FILTER; in iavf_disable_fdir()
4792 mod_delayed_work(adapter->wq, &adapter->watchdog_task, 0); in iavf_disable_fdir()
4810 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_set_features() local
4815 iavf_set_vlan_offload_features(adapter, netdev->features, in iavf_set_features()
4817 if (CRC_OFFLOAD_ALLOWED(adapter) && in iavf_set_features()
4819 iavf_schedule_reset(adapter, IAVF_FLAG_RESET_NEEDED); in iavf_set_features()
4823 adapter->flags |= IAVF_FLAG_FDIR_ENABLED; in iavf_set_features()
4825 iavf_disable_fdir(adapter); in iavf_set_features()
4891 * @adapter: board private structure
4897 iavf_get_netdev_vlan_hw_features(struct iavf_adapter *adapter) in iavf_get_netdev_vlan_hw_features() argument
4901 if (!adapter->vf_res || !adapter->vf_res->vf_cap_flags) in iavf_get_netdev_vlan_hw_features()
4905 if (VLAN_ALLOWED(adapter)) { in iavf_get_netdev_vlan_hw_features()
4908 } else if (VLAN_V2_ALLOWED(adapter)) { in iavf_get_netdev_vlan_hw_features()
4910 &adapter->vlan_v2_caps; in iavf_get_netdev_vlan_hw_features()
4948 if (CRC_OFFLOAD_ALLOWED(adapter)) in iavf_get_netdev_vlan_hw_features()
4956 * @adapter: board private structure
4962 iavf_get_netdev_vlan_features(struct iavf_adapter *adapter) in iavf_get_netdev_vlan_features() argument
4966 if (!adapter->vf_res || !adapter->vf_res->vf_cap_flags) in iavf_get_netdev_vlan_features()
4969 if (VLAN_ALLOWED(adapter)) { in iavf_get_netdev_vlan_features()
4972 } else if (VLAN_V2_ALLOWED(adapter)) { in iavf_get_netdev_vlan_features()
4974 &adapter->vlan_v2_caps; in iavf_get_netdev_vlan_features()
5059 * @adapter: board private structure
5063 iavf_fix_netdev_vlan_features(struct iavf_adapter *adapter, in iavf_fix_netdev_vlan_features() argument
5068 allowed_features = iavf_get_netdev_vlan_hw_features(adapter) | in iavf_fix_netdev_vlan_features()
5069 iavf_get_netdev_vlan_features(adapter); in iavf_fix_netdev_vlan_features()
5104 adapter->vlan_v2_caps.offloads.ethertype_match == in iavf_fix_netdev_vlan_features()
5106 …netdev_warn(adapter->netdev, "cannot support CTAG and STAG VLAN stripping and/or insertion simulta… in iavf_fix_netdev_vlan_features()
5116 * @adapter: board private structure
5122 iavf_fix_strip_features(struct iavf_adapter *adapter, in iavf_fix_strip_features() argument
5125 struct net_device *netdev = adapter->netdev; in iavf_fix_strip_features()
5130 crc_offload_req = CRC_OFFLOAD_ALLOWED(adapter) && in iavf_fix_strip_features()
5132 num_non_zero_vlan = iavf_get_num_vlans_added(adapter); in iavf_fix_strip_features()
5173 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_fix_features() local
5175 features = iavf_fix_netdev_vlan_features(adapter, features); in iavf_fix_features()
5177 if (!FDIR_FLTR_SUPPORT(adapter)) in iavf_fix_features()
5180 return iavf_fix_strip_features(adapter, features); in iavf_fix_features()
5186 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_hwstamp_get() local
5188 *config = adapter->ptp.hwtstamp_config; in iavf_hwstamp_get()
5197 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_hwstamp_set() local
5199 return iavf_ptp_set_ts_config(adapter, config, extack); in iavf_hwstamp_set()
5207 struct iavf_adapter *adapter = netdev_priv(binding->netdev); in iavf_verify_shaper() local
5211 vf_max = adapter->qos_caps->cap[0].shaper.peak; in iavf_verify_shaper()
5227 struct iavf_adapter *adapter = netdev_priv(binding->netdev); in iavf_shaper_set() local
5232 mutex_lock(&adapter->crit_lock); in iavf_shaper_set()
5233 if (handle->id >= adapter->num_active_queues) in iavf_shaper_set()
5240 tx_ring = &adapter->tx_rings[handle->id]; in iavf_shaper_set()
5246 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_QUEUES_BW; in iavf_shaper_set()
5249 mutex_unlock(&adapter->crit_lock); in iavf_shaper_set()
5257 struct iavf_adapter *adapter = netdev_priv(binding->netdev); in iavf_shaper_del() local
5260 mutex_lock(&adapter->crit_lock); in iavf_shaper_del()
5261 if (handle->id >= adapter->num_active_queues) in iavf_shaper_del()
5264 tx_ring = &adapter->tx_rings[handle->id]; in iavf_shaper_del()
5269 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_QUEUES_BW; in iavf_shaper_del()
5272 mutex_unlock(&adapter->crit_lock); in iavf_shaper_del()
5338 * @adapter: board private structure
5343 int iavf_process_config(struct iavf_adapter *adapter) in iavf_process_config() argument
5345 struct virtchnl_vf_resource *vfres = adapter->vf_res; in iavf_process_config()
5347 struct net_device *netdev = adapter->netdev; in iavf_process_config()
5395 hw_vlan_features = iavf_get_netdev_vlan_hw_features(adapter); in iavf_process_config()
5399 TC_U32_SUPPORT(adapter)) in iavf_process_config()
5406 vlan_features = iavf_get_netdev_vlan_features(adapter); in iavf_process_config()
5413 if (FDIR_FLTR_SUPPORT(adapter)) { in iavf_process_config()
5416 adapter->flags |= IAVF_FLAG_FDIR_ENABLED; in iavf_process_config()
5449 * iavf_probe initializes an adapter identified by a pci_dev structure.
5450 * The OS initialization, configuring of the adapter private structure,
5456 struct iavf_adapter *adapter = NULL; in iavf_probe() local
5490 adapter = netdev_priv(netdev); in iavf_probe()
5492 adapter->netdev = netdev; in iavf_probe()
5493 adapter->pdev = pdev; in iavf_probe()
5495 hw = &adapter->hw; in iavf_probe()
5496 hw->back = adapter; in iavf_probe()
5498 adapter->wq = alloc_ordered_workqueue("%s", WQ_MEM_RECLAIM, in iavf_probe()
5500 if (!adapter->wq) { in iavf_probe()
5505 adapter->msg_enable = BIT(DEFAULT_DEBUG_LEVEL_SHIFT) - 1; in iavf_probe()
5506 iavf_change_state(adapter, __IAVF_STARTUP); in iavf_probe()
5508 /* Call save state here because it relies on the adapter struct. */ in iavf_probe()
5526 len = struct_size(adapter->qos_caps, cap, IAVF_MAX_QOS_TC_NUM); in iavf_probe()
5527 adapter->qos_caps = kzalloc(len, GFP_KERNEL); in iavf_probe()
5528 if (!adapter->qos_caps) { in iavf_probe()
5536 mutex_init(&adapter->crit_lock); in iavf_probe()
5540 spin_lock_init(&adapter->mac_vlan_list_lock); in iavf_probe()
5541 spin_lock_init(&adapter->cloud_filter_list_lock); in iavf_probe()
5542 spin_lock_init(&adapter->fdir_fltr_lock); in iavf_probe()
5543 spin_lock_init(&adapter->adv_rss_lock); in iavf_probe()
5544 spin_lock_init(&adapter->current_netdev_promisc_flags_lock); in iavf_probe()
5546 INIT_LIST_HEAD(&adapter->mac_filter_list); in iavf_probe()
5547 INIT_LIST_HEAD(&adapter->vlan_filter_list); in iavf_probe()
5548 INIT_LIST_HEAD(&adapter->cloud_filter_list); in iavf_probe()
5549 INIT_LIST_HEAD(&adapter->fdir_list_head); in iavf_probe()
5550 INIT_LIST_HEAD(&adapter->adv_rss_list_head); in iavf_probe()
5552 INIT_WORK(&adapter->reset_task, iavf_reset_task); in iavf_probe()
5553 INIT_WORK(&adapter->adminq_task, iavf_adminq_task); in iavf_probe()
5554 INIT_WORK(&adapter->finish_config, iavf_finish_config); in iavf_probe()
5555 INIT_DELAYED_WORK(&adapter->watchdog_task, iavf_watchdog_task); in iavf_probe()
5558 init_waitqueue_head(&adapter->down_waitqueue); in iavf_probe()
5561 init_waitqueue_head(&adapter->reset_waitqueue); in iavf_probe()
5564 init_waitqueue_head(&adapter->vc_waitqueue); in iavf_probe()
5566 INIT_LIST_HEAD(&adapter->ptp.aq_cmds); in iavf_probe()
5567 init_waitqueue_head(&adapter->ptp.phc_time_waitqueue); in iavf_probe()
5568 mutex_init(&adapter->ptp.aq_cmd_lock); in iavf_probe()
5570 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_probe()
5578 destroy_workqueue(adapter->wq); in iavf_probe()
5598 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_suspend() local
5603 mutex_lock(&adapter->crit_lock); in iavf_suspend()
5607 iavf_down(adapter); in iavf_suspend()
5610 iavf_free_misc_irq(adapter); in iavf_suspend()
5611 iavf_reset_interrupt_capability(adapter); in iavf_suspend()
5613 mutex_unlock(&adapter->crit_lock); in iavf_suspend()
5628 struct iavf_adapter *adapter; in iavf_resume() local
5631 adapter = iavf_pdev_to_adapter(pdev); in iavf_resume()
5636 err = iavf_set_interrupt_capability(adapter); in iavf_resume()
5642 err = iavf_request_misc_irq(adapter); in iavf_resume()
5649 queue_work(adapter->wq, &adapter->reset_task); in iavf_resume()
5651 netif_device_attach(adapter->netdev); in iavf_resume()
5672 struct iavf_adapter *adapter; in iavf_remove() local
5681 adapter = iavf_pdev_to_adapter(pdev); in iavf_remove()
5682 hw = &adapter->hw; in iavf_remove()
5684 if (test_and_set_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section)) in iavf_remove()
5691 mutex_lock(&adapter->crit_lock); in iavf_remove()
5692 if (adapter->state == __IAVF_RUNNING || in iavf_remove()
5693 adapter->state == __IAVF_DOWN || in iavf_remove()
5694 adapter->state == __IAVF_INIT_FAILED) { in iavf_remove()
5695 mutex_unlock(&adapter->crit_lock); in iavf_remove()
5699 if (adapter->state == __IAVF_REMOVE) { in iavf_remove()
5700 mutex_unlock(&adapter->crit_lock); in iavf_remove()
5704 mutex_unlock(&adapter->crit_lock); in iavf_remove()
5707 cancel_delayed_work_sync(&adapter->watchdog_task); in iavf_remove()
5708 cancel_work_sync(&adapter->finish_config); in iavf_remove()
5714 mutex_lock(&adapter->crit_lock); in iavf_remove()
5715 dev_info(&adapter->pdev->dev, "Removing device\n"); in iavf_remove()
5716 iavf_change_state(adapter, __IAVF_REMOVE); in iavf_remove()
5718 iavf_request_reset(adapter); in iavf_remove()
5722 iavf_request_reset(adapter); in iavf_remove()
5726 iavf_ptp_release(adapter); in iavf_remove()
5728 iavf_misc_irq_disable(adapter); in iavf_remove()
5730 cancel_work_sync(&adapter->reset_task); in iavf_remove()
5731 cancel_delayed_work_sync(&adapter->watchdog_task); in iavf_remove()
5732 cancel_work_sync(&adapter->adminq_task); in iavf_remove()
5734 adapter->aq_required = 0; in iavf_remove()
5735 adapter->flags &= ~IAVF_FLAG_REINIT_ITR_NEEDED; in iavf_remove()
5737 iavf_free_all_tx_resources(adapter); in iavf_remove()
5738 iavf_free_all_rx_resources(adapter); in iavf_remove()
5739 iavf_free_misc_irq(adapter); in iavf_remove()
5740 iavf_free_interrupt_scheme(adapter); in iavf_remove()
5742 iavf_free_rss(adapter); in iavf_remove()
5750 mutex_unlock(&adapter->crit_lock); in iavf_remove()
5751 mutex_destroy(&adapter->crit_lock); in iavf_remove()
5756 kfree(adapter->vf_res); in iavf_remove()
5757 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_remove()
5761 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_remove()
5765 list_for_each_entry_safe(vlf, vlftmp, &adapter->vlan_filter_list, in iavf_remove()
5771 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_remove()
5773 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_remove()
5774 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, list) { in iavf_remove()
5778 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_remove()
5780 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_remove()
5781 list_for_each_entry_safe(fdir, fdirtmp, &adapter->fdir_list_head, list) { in iavf_remove()
5785 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_remove()
5787 spin_lock_bh(&adapter->adv_rss_lock); in iavf_remove()
5788 list_for_each_entry_safe(rss, rsstmp, &adapter->adv_rss_list_head, in iavf_remove()
5793 spin_unlock_bh(&adapter->adv_rss_lock); in iavf_remove()
5795 destroy_workqueue(adapter->wq); in iavf_remove()