Lines Matching full:adapter

14 static int iavf_setup_all_tx_resources(struct iavf_adapter *adapter);
15 static int iavf_setup_all_rx_resources(struct iavf_adapter *adapter);
17 static void iavf_init_get_resources(struct iavf_adapter *adapter);
161 * iavf_pdev_to_adapter - go from pci_dev to adapter
171 * @adapter: board private structure
173 static bool iavf_is_reset_in_progress(struct iavf_adapter *adapter) in iavf_is_reset_in_progress() argument
175 if (adapter->state == __IAVF_RESETTING || in iavf_is_reset_in_progress()
176 adapter->flags & (IAVF_FLAG_RESET_PENDING | in iavf_is_reset_in_progress()
185 * @adapter: board private structure
189 int iavf_wait_for_reset(struct iavf_adapter *adapter) in iavf_wait_for_reset() argument
191 int ret = wait_event_interruptible_timeout(adapter->reset_waitqueue, in iavf_wait_for_reset()
192 !iavf_is_reset_in_progress(adapter), in iavf_wait_for_reset()
219 struct iavf_adapter *adapter = (struct iavf_adapter *)hw->back; in iavf_allocate_dma_mem_d() local
225 mem->va = dma_alloc_coherent(&adapter->pdev->dev, mem->size, in iavf_allocate_dma_mem_d()
240 struct iavf_adapter *adapter = (struct iavf_adapter *)hw->back; in iavf_free_dma_mem() local
244 dma_free_coherent(&adapter->pdev->dev, mem->size, in iavf_free_dma_mem()
282 * @adapter: board private structure
285 void iavf_schedule_reset(struct iavf_adapter *adapter, u64 flags) in iavf_schedule_reset() argument
287 if (!test_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section) && in iavf_schedule_reset()
288 !(adapter->flags & in iavf_schedule_reset()
290 adapter->flags |= flags; in iavf_schedule_reset()
291 queue_work(adapter->wq, &adapter->reset_task); in iavf_schedule_reset()
297 * @adapter: board private structure
300 void iavf_schedule_aq_request(struct iavf_adapter *adapter, u64 flags) in iavf_schedule_aq_request() argument
302 adapter->aq_required |= flags; in iavf_schedule_aq_request()
303 mod_delayed_work(adapter->wq, &adapter->watchdog_task, 0); in iavf_schedule_aq_request()
313 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_tx_timeout() local
315 adapter->tx_timeout_count++; in iavf_tx_timeout()
316 iavf_schedule_reset(adapter, IAVF_FLAG_RESET_NEEDED); in iavf_tx_timeout()
321 * @adapter: board private structure
323 static void iavf_misc_irq_disable(struct iavf_adapter *adapter) in iavf_misc_irq_disable() argument
325 struct iavf_hw *hw = &adapter->hw; in iavf_misc_irq_disable()
327 if (!adapter->msix_entries) in iavf_misc_irq_disable()
334 synchronize_irq(adapter->msix_entries[0].vector); in iavf_misc_irq_disable()
339 * @adapter: board private structure
341 static void iavf_misc_irq_enable(struct iavf_adapter *adapter) in iavf_misc_irq_enable() argument
343 struct iavf_hw *hw = &adapter->hw; in iavf_misc_irq_enable()
354 * @adapter: board private structure
356 static void iavf_irq_disable(struct iavf_adapter *adapter) in iavf_irq_disable() argument
359 struct iavf_hw *hw = &adapter->hw; in iavf_irq_disable()
361 if (!adapter->msix_entries) in iavf_irq_disable()
364 for (i = 1; i < adapter->num_msix_vectors; i++) { in iavf_irq_disable()
366 synchronize_irq(adapter->msix_entries[i].vector); in iavf_irq_disable()
373 * @adapter: board private structure
375 static void iavf_irq_enable_queues(struct iavf_adapter *adapter) in iavf_irq_enable_queues() argument
377 struct iavf_hw *hw = &adapter->hw; in iavf_irq_enable_queues()
380 for (i = 1; i < adapter->num_msix_vectors; i++) { in iavf_irq_enable_queues()
389 * @adapter: board private structure
392 void iavf_irq_enable(struct iavf_adapter *adapter, bool flush) in iavf_irq_enable() argument
394 struct iavf_hw *hw = &adapter->hw; in iavf_irq_enable()
396 iavf_misc_irq_enable(adapter); in iavf_irq_enable()
397 iavf_irq_enable_queues(adapter); in iavf_irq_enable()
411 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_msix_aq() local
412 struct iavf_hw *hw = &adapter->hw; in iavf_msix_aq()
418 if (adapter->state != __IAVF_REMOVE) in iavf_msix_aq()
420 queue_work(adapter->wq, &adapter->adminq_task); in iavf_msix_aq()
444 * @adapter: board private structure
449 iavf_map_vector_to_rxq(struct iavf_adapter *adapter, int v_idx, int r_idx) in iavf_map_vector_to_rxq() argument
451 struct iavf_q_vector *q_vector = &adapter->q_vectors[v_idx]; in iavf_map_vector_to_rxq()
452 struct iavf_ring *rx_ring = &adapter->rx_rings[r_idx]; in iavf_map_vector_to_rxq()
453 struct iavf_hw *hw = &adapter->hw; in iavf_map_vector_to_rxq()
457 rx_ring->vsi = &adapter->vsi; in iavf_map_vector_to_rxq()
470 * @adapter: board private structure
475 iavf_map_vector_to_txq(struct iavf_adapter *adapter, int v_idx, int t_idx) in iavf_map_vector_to_txq() argument
477 struct iavf_q_vector *q_vector = &adapter->q_vectors[v_idx]; in iavf_map_vector_to_txq()
478 struct iavf_ring *tx_ring = &adapter->tx_rings[t_idx]; in iavf_map_vector_to_txq()
479 struct iavf_hw *hw = &adapter->hw; in iavf_map_vector_to_txq()
483 tx_ring->vsi = &adapter->vsi; in iavf_map_vector_to_txq()
496 * @adapter: board private structure to initialize
504 static void iavf_map_rings_to_vectors(struct iavf_adapter *adapter) in iavf_map_rings_to_vectors() argument
506 int rings_remaining = adapter->num_active_queues; in iavf_map_rings_to_vectors()
510 q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_map_rings_to_vectors()
513 iavf_map_vector_to_rxq(adapter, vidx, ridx); in iavf_map_rings_to_vectors()
514 iavf_map_vector_to_txq(adapter, vidx, ridx); in iavf_map_rings_to_vectors()
523 adapter->aq_required |= IAVF_FLAG_AQ_MAP_VECTORS; in iavf_map_rings_to_vectors()
555 * @adapter: board private structure
562 iavf_request_traffic_irqs(struct iavf_adapter *adapter, char *basename) in iavf_request_traffic_irqs() argument
569 iavf_irq_disable(adapter); in iavf_request_traffic_irqs()
571 q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_request_traffic_irqs()
574 struct iavf_q_vector *q_vector = &adapter->q_vectors[vector]; in iavf_request_traffic_irqs()
576 irq_num = adapter->msix_entries[vector + NONQ_VECS].vector; in iavf_request_traffic_irqs()
598 dev_info(&adapter->pdev->dev, in iavf_request_traffic_irqs()
620 irq_num = adapter->msix_entries[vector + NONQ_VECS].vector; in iavf_request_traffic_irqs()
623 free_irq(irq_num, &adapter->q_vectors[vector]); in iavf_request_traffic_irqs()
630 * @adapter: board private structure
636 static int iavf_request_misc_irq(struct iavf_adapter *adapter) in iavf_request_misc_irq() argument
638 struct net_device *netdev = adapter->netdev; in iavf_request_misc_irq()
641 snprintf(adapter->misc_vector_name, in iavf_request_misc_irq()
642 sizeof(adapter->misc_vector_name) - 1, "iavf-%s:mbx", in iavf_request_misc_irq()
643 dev_name(&adapter->pdev->dev)); in iavf_request_misc_irq()
644 err = request_irq(adapter->msix_entries[0].vector, in iavf_request_misc_irq()
646 adapter->misc_vector_name, netdev); in iavf_request_misc_irq()
648 dev_err(&adapter->pdev->dev, in iavf_request_misc_irq()
650 adapter->misc_vector_name, err); in iavf_request_misc_irq()
651 free_irq(adapter->msix_entries[0].vector, netdev); in iavf_request_misc_irq()
658 * @adapter: board private structure
662 static void iavf_free_traffic_irqs(struct iavf_adapter *adapter) in iavf_free_traffic_irqs() argument
666 if (!adapter->msix_entries) in iavf_free_traffic_irqs()
669 q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_free_traffic_irqs()
672 irq_num = adapter->msix_entries[vector + NONQ_VECS].vector; in iavf_free_traffic_irqs()
675 free_irq(irq_num, &adapter->q_vectors[vector]); in iavf_free_traffic_irqs()
681 * @adapter: board private structure
685 static void iavf_free_misc_irq(struct iavf_adapter *adapter) in iavf_free_misc_irq() argument
687 struct net_device *netdev = adapter->netdev; in iavf_free_misc_irq()
689 if (!adapter->msix_entries) in iavf_free_misc_irq()
692 free_irq(adapter->msix_entries[0].vector, netdev); in iavf_free_misc_irq()
697 * @adapter: board private structure
701 static void iavf_configure_tx(struct iavf_adapter *adapter) in iavf_configure_tx() argument
703 struct iavf_hw *hw = &adapter->hw; in iavf_configure_tx()
706 for (i = 0; i < adapter->num_active_queues; i++) in iavf_configure_tx()
707 adapter->tx_rings[i].tail = hw->hw_addr + IAVF_QTX_TAIL1(i); in iavf_configure_tx()
712 * @adapter: board private structure
716 static void iavf_configure_rx(struct iavf_adapter *adapter) in iavf_configure_rx() argument
719 struct iavf_hw *hw = &adapter->hw; in iavf_configure_rx()
724 if (!(adapter->flags & IAVF_FLAG_LEGACY_RX)) { in iavf_configure_rx()
725 struct net_device *netdev = adapter->netdev; in iavf_configure_rx()
743 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_configure_rx()
744 adapter->rx_rings[i].tail = hw->hw_addr + IAVF_QRX_TAIL1(i); in iavf_configure_rx()
745 adapter->rx_rings[i].rx_buf_len = rx_buf_len; in iavf_configure_rx()
747 if (adapter->flags & IAVF_FLAG_LEGACY_RX) in iavf_configure_rx()
748 clear_ring_build_skb_enabled(&adapter->rx_rings[i]); in iavf_configure_rx()
750 set_ring_build_skb_enabled(&adapter->rx_rings[i]); in iavf_configure_rx()
756 * @adapter: board private structure
763 iavf_vlan_filter *iavf_find_vlan(struct iavf_adapter *adapter, in iavf_find_vlan() argument
768 list_for_each_entry(f, &adapter->vlan_filter_list, list) { in iavf_find_vlan()
779 * @adapter: board private structure
785 iavf_vlan_filter *iavf_add_vlan(struct iavf_adapter *adapter, in iavf_add_vlan() argument
790 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_add_vlan()
792 f = iavf_find_vlan(adapter, vlan); in iavf_add_vlan()
800 list_add_tail(&f->list, &adapter->vlan_filter_list); in iavf_add_vlan()
802 adapter->num_vlan_filters++; in iavf_add_vlan()
803 iavf_schedule_aq_request(adapter, IAVF_FLAG_AQ_ADD_VLAN_FILTER); in iavf_add_vlan()
812 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_add_vlan()
818 * @adapter: board private structure
821 static void iavf_del_vlan(struct iavf_adapter *adapter, struct iavf_vlan vlan) in iavf_del_vlan() argument
825 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_del_vlan()
827 f = iavf_find_vlan(adapter, vlan); in iavf_del_vlan()
835 adapter->num_vlan_filters--; in iavf_del_vlan()
838 iavf_schedule_aq_request(adapter, in iavf_del_vlan()
843 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_del_vlan()
848 * @adapter: board private structure
852 static void iavf_restore_filters(struct iavf_adapter *adapter) in iavf_restore_filters() argument
857 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_restore_filters()
859 list_for_each_entry(f, &adapter->vlan_filter_list, list) { in iavf_restore_filters()
864 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_restore_filters()
865 adapter->aq_required |= IAVF_FLAG_AQ_ADD_VLAN_FILTER; in iavf_restore_filters()
870 * @adapter: board private structure
872 u16 iavf_get_num_vlans_added(struct iavf_adapter *adapter) in iavf_get_num_vlans_added() argument
874 return adapter->num_vlan_filters; in iavf_get_num_vlans_added()
879 * @adapter: board private structure
885 static u16 iavf_get_max_vlans_allowed(struct iavf_adapter *adapter) in iavf_get_max_vlans_allowed() argument
890 if (VLAN_ALLOWED(adapter)) in iavf_get_max_vlans_allowed()
892 else if (VLAN_V2_ALLOWED(adapter)) in iavf_get_max_vlans_allowed()
893 return adapter->vlan_v2_caps.filtering.max_filters; in iavf_get_max_vlans_allowed()
900 * @adapter: board private structure
902 static bool iavf_max_vlans_added(struct iavf_adapter *adapter) in iavf_max_vlans_added() argument
904 if (iavf_get_num_vlans_added(adapter) < in iavf_max_vlans_added()
905 iavf_get_max_vlans_allowed(adapter)) in iavf_max_vlans_added()
920 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_vlan_rx_add_vid() local
926 if (!VLAN_FILTERING_ALLOWED(adapter)) in iavf_vlan_rx_add_vid()
929 if (iavf_max_vlans_added(adapter)) { in iavf_vlan_rx_add_vid()
931 iavf_get_max_vlans_allowed(adapter)); in iavf_vlan_rx_add_vid()
935 if (!iavf_add_vlan(adapter, IAVF_VLAN(vid, be16_to_cpu(proto)))) in iavf_vlan_rx_add_vid()
950 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_vlan_rx_kill_vid() local
956 iavf_del_vlan(adapter, IAVF_VLAN(vid, be16_to_cpu(proto))); in iavf_vlan_rx_kill_vid()
962 * @adapter: board private structure
969 iavf_mac_filter *iavf_find_filter(struct iavf_adapter *adapter, in iavf_find_filter() argument
977 list_for_each_entry(f, &adapter->mac_filter_list, list) { in iavf_find_filter()
986 * @adapter: board private structure
991 struct iavf_mac_filter *iavf_add_filter(struct iavf_adapter *adapter, in iavf_add_filter() argument
999 f = iavf_find_filter(adapter, macaddr); in iavf_add_filter()
1007 list_add_tail(&f->list, &adapter->mac_filter_list); in iavf_add_filter()
1011 f->is_primary = ether_addr_equal(macaddr, adapter->hw.mac.addr); in iavf_add_filter()
1012 adapter->aq_required |= IAVF_FLAG_AQ_ADD_MAC_FILTER; in iavf_add_filter()
1022 * @adapter: board private structure
1031 static int iavf_replace_primary_mac(struct iavf_adapter *adapter, in iavf_replace_primary_mac() argument
1034 struct iavf_hw *hw = &adapter->hw; in iavf_replace_primary_mac()
1038 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_replace_primary_mac()
1040 new_f = iavf_add_filter(adapter, new_mac); in iavf_replace_primary_mac()
1042 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_replace_primary_mac()
1046 old_f = iavf_find_filter(adapter, hw->mac.addr); in iavf_replace_primary_mac()
1050 adapter->aq_required |= IAVF_FLAG_AQ_DEL_MAC_FILTER; in iavf_replace_primary_mac()
1057 adapter->aq_required |= IAVF_FLAG_AQ_ADD_MAC_FILTER; in iavf_replace_primary_mac()
1060 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_replace_primary_mac()
1063 mod_delayed_work(adapter->wq, &adapter->watchdog_task, 0); in iavf_replace_primary_mac()
1077 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_is_mac_set_handled() local
1081 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_is_mac_set_handled()
1083 f = iavf_find_filter(adapter, macaddr); in iavf_is_mac_set_handled()
1088 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_is_mac_set_handled()
1102 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_set_mac() local
1109 ret = iavf_replace_primary_mac(adapter, addr->sa_data); in iavf_set_mac()
1114 ret = wait_event_interruptible_timeout(adapter->vc_waitqueue, in iavf_set_mac()
1146 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_addr_sync() local
1148 if (iavf_add_filter(adapter, addr)) in iavf_addr_sync()
1164 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_addr_unsync() local
1175 f = iavf_find_filter(adapter, addr); in iavf_addr_unsync()
1178 adapter->aq_required |= IAVF_FLAG_AQ_DEL_MAC_FILTER; in iavf_addr_unsync()
1185 * @adapter: device specific adapter
1187 bool iavf_promiscuous_mode_changed(struct iavf_adapter *adapter) in iavf_promiscuous_mode_changed() argument
1189 return (adapter->current_netdev_promisc_flags ^ adapter->netdev->flags) & in iavf_promiscuous_mode_changed()
1199 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_set_rx_mode() local
1201 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_set_rx_mode()
1204 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_set_rx_mode()
1206 spin_lock_bh(&adapter->current_netdev_promisc_flags_lock); in iavf_set_rx_mode()
1207 if (iavf_promiscuous_mode_changed(adapter)) in iavf_set_rx_mode()
1208 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_PROMISC_MODE; in iavf_set_rx_mode()
1209 spin_unlock_bh(&adapter->current_netdev_promisc_flags_lock); in iavf_set_rx_mode()
1214 * @adapter: board private structure
1216 static void iavf_napi_enable_all(struct iavf_adapter *adapter) in iavf_napi_enable_all() argument
1220 int q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_napi_enable_all()
1225 q_vector = &adapter->q_vectors[q_idx]; in iavf_napi_enable_all()
1233 * @adapter: board private structure
1235 static void iavf_napi_disable_all(struct iavf_adapter *adapter) in iavf_napi_disable_all() argument
1239 int q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_napi_disable_all()
1242 q_vector = &adapter->q_vectors[q_idx]; in iavf_napi_disable_all()
1249 * @adapter: board private structure
1251 static void iavf_configure(struct iavf_adapter *adapter) in iavf_configure() argument
1253 struct net_device *netdev = adapter->netdev; in iavf_configure()
1258 iavf_configure_tx(adapter); in iavf_configure()
1259 iavf_configure_rx(adapter); in iavf_configure()
1260 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_QUEUES; in iavf_configure()
1262 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_configure()
1263 struct iavf_ring *ring = &adapter->rx_rings[i]; in iavf_configure()
1271 * @adapter: board private structure
1275 static void iavf_up_complete(struct iavf_adapter *adapter) in iavf_up_complete() argument
1277 iavf_change_state(adapter, __IAVF_RUNNING); in iavf_up_complete()
1278 clear_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_up_complete()
1280 iavf_napi_enable_all(adapter); in iavf_up_complete()
1282 adapter->aq_required |= IAVF_FLAG_AQ_ENABLE_QUEUES; in iavf_up_complete()
1283 if (CLIENT_ENABLED(adapter)) in iavf_up_complete()
1284 adapter->flags |= IAVF_FLAG_CLIENT_NEEDS_OPEN; in iavf_up_complete()
1285 mod_delayed_work(adapter->wq, &adapter->watchdog_task, 0); in iavf_up_complete()
1291 * @adapter: board private structure
1293 static void iavf_clear_mac_vlan_filters(struct iavf_adapter *adapter) in iavf_clear_mac_vlan_filters() argument
1298 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_clear_mac_vlan_filters()
1300 __dev_uc_unsync(adapter->netdev, NULL); in iavf_clear_mac_vlan_filters()
1301 __dev_mc_unsync(adapter->netdev, NULL); in iavf_clear_mac_vlan_filters()
1304 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, in iavf_clear_mac_vlan_filters()
1315 list_for_each_entry_safe(vlf, vlftmp, &adapter->vlan_filter_list, in iavf_clear_mac_vlan_filters()
1319 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_clear_mac_vlan_filters()
1325 * @adapter: board private structure
1327 static void iavf_clear_cloud_filters(struct iavf_adapter *adapter) in iavf_clear_cloud_filters() argument
1332 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_clear_cloud_filters()
1333 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, in iavf_clear_cloud_filters()
1338 adapter->num_cloud_filters--; in iavf_clear_cloud_filters()
1343 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_clear_cloud_filters()
1349 * @adapter: board private structure
1351 static void iavf_clear_fdir_filters(struct iavf_adapter *adapter) in iavf_clear_fdir_filters() argument
1356 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_clear_fdir_filters()
1357 list_for_each_entry(fdir, &adapter->fdir_list_head, list) { in iavf_clear_fdir_filters()
1369 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_clear_fdir_filters()
1375 * @adapter: board private structure
1377 static void iavf_clear_adv_rss_conf(struct iavf_adapter *adapter) in iavf_clear_adv_rss_conf() argument
1382 spin_lock_bh(&adapter->adv_rss_lock); in iavf_clear_adv_rss_conf()
1383 list_for_each_entry_safe(rss, rsstmp, &adapter->adv_rss_list_head, in iavf_clear_adv_rss_conf()
1392 spin_unlock_bh(&adapter->adv_rss_lock); in iavf_clear_adv_rss_conf()
1397 * @adapter: board private structure
1401 void iavf_down(struct iavf_adapter *adapter) in iavf_down() argument
1403 struct net_device *netdev = adapter->netdev; in iavf_down()
1405 if (adapter->state <= __IAVF_DOWN_PENDING) in iavf_down()
1410 adapter->link_up = false; in iavf_down()
1411 iavf_napi_disable_all(adapter); in iavf_down()
1412 iavf_irq_disable(adapter); in iavf_down()
1414 iavf_clear_mac_vlan_filters(adapter); in iavf_down()
1415 iavf_clear_cloud_filters(adapter); in iavf_down()
1416 iavf_clear_fdir_filters(adapter); in iavf_down()
1417 iavf_clear_adv_rss_conf(adapter); in iavf_down()
1419 if (!(adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) && in iavf_down()
1420 !(test_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section))) { in iavf_down()
1422 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_down()
1427 if (!list_empty(&adapter->mac_filter_list)) in iavf_down()
1428 adapter->aq_required |= IAVF_FLAG_AQ_DEL_MAC_FILTER; in iavf_down()
1429 if (!list_empty(&adapter->vlan_filter_list)) in iavf_down()
1430 adapter->aq_required |= IAVF_FLAG_AQ_DEL_VLAN_FILTER; in iavf_down()
1431 if (!list_empty(&adapter->cloud_filter_list)) in iavf_down()
1432 adapter->aq_required |= IAVF_FLAG_AQ_DEL_CLOUD_FILTER; in iavf_down()
1433 if (!list_empty(&adapter->fdir_list_head)) in iavf_down()
1434 adapter->aq_required |= IAVF_FLAG_AQ_DEL_FDIR_FILTER; in iavf_down()
1435 if (!list_empty(&adapter->adv_rss_list_head)) in iavf_down()
1436 adapter->aq_required |= IAVF_FLAG_AQ_DEL_ADV_RSS_CFG; in iavf_down()
1439 adapter->aq_required |= IAVF_FLAG_AQ_DISABLE_QUEUES; in iavf_down()
1440 mod_delayed_work(adapter->wq, &adapter->watchdog_task, 0); in iavf_down()
1445 * @adapter: board private structure
1453 iavf_acquire_msix_vectors(struct iavf_adapter *adapter, int vectors) in iavf_acquire_msix_vectors() argument
1469 err = pci_enable_msix_range(adapter->pdev, adapter->msix_entries, in iavf_acquire_msix_vectors()
1472 dev_err(&adapter->pdev->dev, "Unable to allocate MSI-X interrupts\n"); in iavf_acquire_msix_vectors()
1473 kfree(adapter->msix_entries); in iavf_acquire_msix_vectors()
1474 adapter->msix_entries = NULL; in iavf_acquire_msix_vectors()
1482 adapter->num_msix_vectors = err; in iavf_acquire_msix_vectors()
1488 * @adapter: board private structure to initialize
1492 static void iavf_free_queues(struct iavf_adapter *adapter) in iavf_free_queues() argument
1494 if (!adapter->vsi_res) in iavf_free_queues()
1496 adapter->num_active_queues = 0; in iavf_free_queues()
1497 kfree(adapter->tx_rings); in iavf_free_queues()
1498 adapter->tx_rings = NULL; in iavf_free_queues()
1499 kfree(adapter->rx_rings); in iavf_free_queues()
1500 adapter->rx_rings = NULL; in iavf_free_queues()
1505 * @adapter: board private structure
1512 void iavf_set_queue_vlan_tag_loc(struct iavf_adapter *adapter) in iavf_set_queue_vlan_tag_loc() argument
1516 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_set_queue_vlan_tag_loc()
1517 struct iavf_ring *tx_ring = &adapter->tx_rings[i]; in iavf_set_queue_vlan_tag_loc()
1518 struct iavf_ring *rx_ring = &adapter->rx_rings[i]; in iavf_set_queue_vlan_tag_loc()
1528 if (VLAN_ALLOWED(adapter)) { in iavf_set_queue_vlan_tag_loc()
1531 } else if (VLAN_V2_ALLOWED(adapter)) { in iavf_set_queue_vlan_tag_loc()
1536 &adapter->vlan_v2_caps.offloads.stripping_support; in iavf_set_queue_vlan_tag_loc()
1538 &adapter->vlan_v2_caps.offloads.insertion_support; in iavf_set_queue_vlan_tag_loc()
1585 * @adapter: board private structure to initialize
1591 static int iavf_alloc_queues(struct iavf_adapter *adapter) in iavf_alloc_queues() argument
1600 if (adapter->num_req_queues) in iavf_alloc_queues()
1601 num_active_queues = adapter->num_req_queues; in iavf_alloc_queues()
1602 else if ((adapter->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_ADQ) && in iavf_alloc_queues()
1603 adapter->num_tc) in iavf_alloc_queues()
1604 num_active_queues = adapter->ch_config.total_qps; in iavf_alloc_queues()
1607 adapter->vsi_res->num_queue_pairs, in iavf_alloc_queues()
1611 adapter->tx_rings = kcalloc(num_active_queues, in iavf_alloc_queues()
1613 if (!adapter->tx_rings) in iavf_alloc_queues()
1615 adapter->rx_rings = kcalloc(num_active_queues, in iavf_alloc_queues()
1617 if (!adapter->rx_rings) in iavf_alloc_queues()
1624 tx_ring = &adapter->tx_rings[i]; in iavf_alloc_queues()
1627 tx_ring->netdev = adapter->netdev; in iavf_alloc_queues()
1628 tx_ring->dev = &adapter->pdev->dev; in iavf_alloc_queues()
1629 tx_ring->count = adapter->tx_desc_count; in iavf_alloc_queues()
1631 if (adapter->flags & IAVF_FLAG_WB_ON_ITR_CAPABLE) in iavf_alloc_queues()
1634 rx_ring = &adapter->rx_rings[i]; in iavf_alloc_queues()
1636 rx_ring->netdev = adapter->netdev; in iavf_alloc_queues()
1637 rx_ring->dev = &adapter->pdev->dev; in iavf_alloc_queues()
1638 rx_ring->count = adapter->rx_desc_count; in iavf_alloc_queues()
1642 adapter->num_active_queues = num_active_queues; in iavf_alloc_queues()
1644 iavf_set_queue_vlan_tag_loc(adapter); in iavf_alloc_queues()
1649 iavf_free_queues(adapter); in iavf_alloc_queues()
1655 * @adapter: board private structure to initialize
1660 static int iavf_set_interrupt_capability(struct iavf_adapter *adapter) in iavf_set_interrupt_capability() argument
1666 if (!adapter->vsi_res) { in iavf_set_interrupt_capability()
1670 pairs = adapter->num_active_queues; in iavf_set_interrupt_capability()
1678 (int)adapter->vf_res->max_vectors); in iavf_set_interrupt_capability()
1680 adapter->msix_entries = kcalloc(v_budget, in iavf_set_interrupt_capability()
1682 if (!adapter->msix_entries) { in iavf_set_interrupt_capability()
1688 adapter->msix_entries[vector].entry = vector; in iavf_set_interrupt_capability()
1690 err = iavf_acquire_msix_vectors(adapter, v_budget); in iavf_set_interrupt_capability()
1692 iavf_schedule_finish_config(adapter); in iavf_set_interrupt_capability()
1700 * @adapter: board private structure
1704 static int iavf_config_rss_aq(struct iavf_adapter *adapter) in iavf_config_rss_aq() argument
1707 (struct iavf_aqc_get_set_rss_key_data *)adapter->rss_key; in iavf_config_rss_aq()
1708 struct iavf_hw *hw = &adapter->hw; in iavf_config_rss_aq()
1711 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_config_rss_aq()
1713 dev_err(&adapter->pdev->dev, "Cannot configure RSS, command %d pending\n", in iavf_config_rss_aq()
1714 adapter->current_op); in iavf_config_rss_aq()
1718 status = iavf_aq_set_rss_key(hw, adapter->vsi.id, rss_key); in iavf_config_rss_aq()
1720 dev_err(&adapter->pdev->dev, "Cannot set RSS key, err %s aq_err %s\n", in iavf_config_rss_aq()
1727 status = iavf_aq_set_rss_lut(hw, adapter->vsi.id, false, in iavf_config_rss_aq()
1728 adapter->rss_lut, adapter->rss_lut_size); in iavf_config_rss_aq()
1730 dev_err(&adapter->pdev->dev, "Cannot set RSS lut, err %s aq_err %s\n", in iavf_config_rss_aq()
1742 * @adapter: board private structure
1746 static int iavf_config_rss_reg(struct iavf_adapter *adapter) in iavf_config_rss_reg() argument
1748 struct iavf_hw *hw = &adapter->hw; in iavf_config_rss_reg()
1752 dw = (u32 *)adapter->rss_key; in iavf_config_rss_reg()
1753 for (i = 0; i <= adapter->rss_key_size / 4; i++) in iavf_config_rss_reg()
1756 dw = (u32 *)adapter->rss_lut; in iavf_config_rss_reg()
1757 for (i = 0; i <= adapter->rss_lut_size / 4; i++) in iavf_config_rss_reg()
1767 * @adapter: board private structure
1771 int iavf_config_rss(struct iavf_adapter *adapter) in iavf_config_rss() argument
1774 if (RSS_PF(adapter)) { in iavf_config_rss()
1775 adapter->aq_required |= IAVF_FLAG_AQ_SET_RSS_LUT | in iavf_config_rss()
1778 } else if (RSS_AQ(adapter)) { in iavf_config_rss()
1779 return iavf_config_rss_aq(adapter); in iavf_config_rss()
1781 return iavf_config_rss_reg(adapter); in iavf_config_rss()
1787 * @adapter: board private structure
1789 static void iavf_fill_rss_lut(struct iavf_adapter *adapter) in iavf_fill_rss_lut() argument
1793 for (i = 0; i < adapter->rss_lut_size; i++) in iavf_fill_rss_lut()
1794 adapter->rss_lut[i] = i % adapter->num_active_queues; in iavf_fill_rss_lut()
1799 * @adapter: board private structure
1803 static int iavf_init_rss(struct iavf_adapter *adapter) in iavf_init_rss() argument
1805 struct iavf_hw *hw = &adapter->hw; in iavf_init_rss()
1807 if (!RSS_PF(adapter)) { in iavf_init_rss()
1809 if (adapter->vf_res->vf_cap_flags & in iavf_init_rss()
1811 adapter->hena = IAVF_DEFAULT_RSS_HENA_EXPANDED; in iavf_init_rss()
1813 adapter->hena = IAVF_DEFAULT_RSS_HENA; in iavf_init_rss()
1815 wr32(hw, IAVF_VFQF_HENA(0), (u32)adapter->hena); in iavf_init_rss()
1816 wr32(hw, IAVF_VFQF_HENA(1), (u32)(adapter->hena >> 32)); in iavf_init_rss()
1819 iavf_fill_rss_lut(adapter); in iavf_init_rss()
1820 netdev_rss_key_fill((void *)adapter->rss_key, adapter->rss_key_size); in iavf_init_rss()
1822 return iavf_config_rss(adapter); in iavf_init_rss()
1827 * @adapter: board private structure to initialize
1832 static int iavf_alloc_q_vectors(struct iavf_adapter *adapter) in iavf_alloc_q_vectors() argument
1837 num_q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_alloc_q_vectors()
1838 adapter->q_vectors = kcalloc(num_q_vectors, sizeof(*q_vector), in iavf_alloc_q_vectors()
1840 if (!adapter->q_vectors) in iavf_alloc_q_vectors()
1844 q_vector = &adapter->q_vectors[q_idx]; in iavf_alloc_q_vectors()
1845 q_vector->adapter = adapter; in iavf_alloc_q_vectors()
1846 q_vector->vsi = &adapter->vsi; in iavf_alloc_q_vectors()
1850 netif_napi_add(adapter->netdev, &q_vector->napi, in iavf_alloc_q_vectors()
1859 * @adapter: board private structure to initialize
1865 static void iavf_free_q_vectors(struct iavf_adapter *adapter) in iavf_free_q_vectors() argument
1869 if (!adapter->q_vectors) in iavf_free_q_vectors()
1872 num_q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_free_q_vectors()
1875 struct iavf_q_vector *q_vector = &adapter->q_vectors[q_idx]; in iavf_free_q_vectors()
1879 kfree(adapter->q_vectors); in iavf_free_q_vectors()
1880 adapter->q_vectors = NULL; in iavf_free_q_vectors()
1885 * @adapter: board private structure
1888 static void iavf_reset_interrupt_capability(struct iavf_adapter *adapter) in iavf_reset_interrupt_capability() argument
1890 if (!adapter->msix_entries) in iavf_reset_interrupt_capability()
1893 pci_disable_msix(adapter->pdev); in iavf_reset_interrupt_capability()
1894 kfree(adapter->msix_entries); in iavf_reset_interrupt_capability()
1895 adapter->msix_entries = NULL; in iavf_reset_interrupt_capability()
1900 * @adapter: board private structure to initialize
1903 static int iavf_init_interrupt_scheme(struct iavf_adapter *adapter) in iavf_init_interrupt_scheme() argument
1907 err = iavf_alloc_queues(adapter); in iavf_init_interrupt_scheme()
1909 dev_err(&adapter->pdev->dev, in iavf_init_interrupt_scheme()
1914 err = iavf_set_interrupt_capability(adapter); in iavf_init_interrupt_scheme()
1916 dev_err(&adapter->pdev->dev, in iavf_init_interrupt_scheme()
1921 err = iavf_alloc_q_vectors(adapter); in iavf_init_interrupt_scheme()
1923 dev_err(&adapter->pdev->dev, in iavf_init_interrupt_scheme()
1933 if ((adapter->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_ADQ) && in iavf_init_interrupt_scheme()
1934 adapter->num_tc) in iavf_init_interrupt_scheme()
1935 dev_info(&adapter->pdev->dev, "ADq Enabled, %u TCs created", in iavf_init_interrupt_scheme()
1936 adapter->num_tc); in iavf_init_interrupt_scheme()
1938 dev_info(&adapter->pdev->dev, "Multiqueue %s: Queue pair count = %u", in iavf_init_interrupt_scheme()
1939 (adapter->num_active_queues > 1) ? "Enabled" : "Disabled", in iavf_init_interrupt_scheme()
1940 adapter->num_active_queues); in iavf_init_interrupt_scheme()
1944 iavf_reset_interrupt_capability(adapter); in iavf_init_interrupt_scheme()
1946 iavf_free_queues(adapter); in iavf_init_interrupt_scheme()
1953 * @adapter: board private structure
1955 static void iavf_free_rss(struct iavf_adapter *adapter) in iavf_free_rss() argument
1957 kfree(adapter->rss_key); in iavf_free_rss()
1958 adapter->rss_key = NULL; in iavf_free_rss()
1960 kfree(adapter->rss_lut); in iavf_free_rss()
1961 adapter->rss_lut = NULL; in iavf_free_rss()
1966 * @adapter: board private structure
1967 * @running: true if adapter->state == __IAVF_RUNNING
1971 static int iavf_reinit_interrupt_scheme(struct iavf_adapter *adapter, bool running) in iavf_reinit_interrupt_scheme() argument
1973 struct net_device *netdev = adapter->netdev; in iavf_reinit_interrupt_scheme()
1977 iavf_free_traffic_irqs(adapter); in iavf_reinit_interrupt_scheme()
1978 iavf_free_misc_irq(adapter); in iavf_reinit_interrupt_scheme()
1979 iavf_reset_interrupt_capability(adapter); in iavf_reinit_interrupt_scheme()
1980 iavf_free_q_vectors(adapter); in iavf_reinit_interrupt_scheme()
1981 iavf_free_queues(adapter); in iavf_reinit_interrupt_scheme()
1983 err = iavf_init_interrupt_scheme(adapter); in iavf_reinit_interrupt_scheme()
1989 err = iavf_request_misc_irq(adapter); in iavf_reinit_interrupt_scheme()
1993 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_reinit_interrupt_scheme()
1995 iavf_map_rings_to_vectors(adapter); in iavf_reinit_interrupt_scheme()
2008 struct iavf_adapter *adapter; in iavf_finish_config() local
2011 adapter = container_of(work, struct iavf_adapter, finish_config); in iavf_finish_config()
2015 mutex_lock(&adapter->crit_lock); in iavf_finish_config()
2017 if ((adapter->flags & IAVF_FLAG_SETUP_NETDEV_FEATURES) && in iavf_finish_config()
2018 adapter->netdev_registered && in iavf_finish_config()
2019 !test_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section)) { in iavf_finish_config()
2020 netdev_update_features(adapter->netdev); in iavf_finish_config()
2021 adapter->flags &= ~IAVF_FLAG_SETUP_NETDEV_FEATURES; in iavf_finish_config()
2024 switch (adapter->state) { in iavf_finish_config()
2026 if (!adapter->netdev_registered) { in iavf_finish_config()
2027 err = register_netdevice(adapter->netdev); in iavf_finish_config()
2029 dev_err(&adapter->pdev->dev, "Unable to register netdev (%d)\n", in iavf_finish_config()
2033 iavf_free_rss(adapter); in iavf_finish_config()
2034 iavf_free_misc_irq(adapter); in iavf_finish_config()
2035 iavf_reset_interrupt_capability(adapter); in iavf_finish_config()
2036 iavf_change_state(adapter, in iavf_finish_config()
2040 adapter->netdev_registered = true; in iavf_finish_config()
2048 pairs = adapter->num_active_queues; in iavf_finish_config()
2049 netif_set_real_num_rx_queues(adapter->netdev, pairs); in iavf_finish_config()
2050 netif_set_real_num_tx_queues(adapter->netdev, pairs); in iavf_finish_config()
2058 mutex_unlock(&adapter->crit_lock); in iavf_finish_config()
2064 * @adapter: board private structure
2066 void iavf_schedule_finish_config(struct iavf_adapter *adapter) in iavf_schedule_finish_config() argument
2068 if (!test_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section)) in iavf_schedule_finish_config()
2069 queue_work(adapter->wq, &adapter->finish_config); in iavf_schedule_finish_config()
2075 * @adapter: pointer to iavf adapter structure
2081 static int iavf_process_aq_command(struct iavf_adapter *adapter) in iavf_process_aq_command() argument
2083 if (adapter->aq_required & IAVF_FLAG_AQ_GET_CONFIG) in iavf_process_aq_command()
2084 return iavf_send_vf_config_msg(adapter); in iavf_process_aq_command()
2085 if (adapter->aq_required & IAVF_FLAG_AQ_GET_OFFLOAD_VLAN_V2_CAPS) in iavf_process_aq_command()
2086 return iavf_send_vf_offload_vlan_v2_msg(adapter); in iavf_process_aq_command()
2087 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_QUEUES) { in iavf_process_aq_command()
2088 iavf_disable_queues(adapter); in iavf_process_aq_command()
2092 if (adapter->aq_required & IAVF_FLAG_AQ_MAP_VECTORS) { in iavf_process_aq_command()
2093 iavf_map_queues(adapter); in iavf_process_aq_command()
2097 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_MAC_FILTER) { in iavf_process_aq_command()
2098 iavf_add_ether_addrs(adapter); in iavf_process_aq_command()
2102 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_VLAN_FILTER) { in iavf_process_aq_command()
2103 iavf_add_vlans(adapter); in iavf_process_aq_command()
2107 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_MAC_FILTER) { in iavf_process_aq_command()
2108 iavf_del_ether_addrs(adapter); in iavf_process_aq_command()
2112 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_VLAN_FILTER) { in iavf_process_aq_command()
2113 iavf_del_vlans(adapter); in iavf_process_aq_command()
2117 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_VLAN_STRIPPING) { in iavf_process_aq_command()
2118 iavf_enable_vlan_stripping(adapter); in iavf_process_aq_command()
2122 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_VLAN_STRIPPING) { in iavf_process_aq_command()
2123 iavf_disable_vlan_stripping(adapter); in iavf_process_aq_command()
2127 if (adapter->aq_required & IAVF_FLAG_AQ_CONFIGURE_QUEUES) { in iavf_process_aq_command()
2128 iavf_configure_queues(adapter); in iavf_process_aq_command()
2132 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_QUEUES) { in iavf_process_aq_command()
2133 iavf_enable_queues(adapter); in iavf_process_aq_command()
2137 if (adapter->aq_required & IAVF_FLAG_AQ_CONFIGURE_RSS) { in iavf_process_aq_command()
2142 adapter->aq_required &= ~IAVF_FLAG_AQ_CONFIGURE_RSS; in iavf_process_aq_command()
2145 if (adapter->aq_required & IAVF_FLAG_AQ_GET_HENA) { in iavf_process_aq_command()
2146 iavf_get_hena(adapter); in iavf_process_aq_command()
2149 if (adapter->aq_required & IAVF_FLAG_AQ_SET_HENA) { in iavf_process_aq_command()
2150 iavf_set_hena(adapter); in iavf_process_aq_command()
2153 if (adapter->aq_required & IAVF_FLAG_AQ_SET_RSS_KEY) { in iavf_process_aq_command()
2154 iavf_set_rss_key(adapter); in iavf_process_aq_command()
2157 if (adapter->aq_required & IAVF_FLAG_AQ_SET_RSS_LUT) { in iavf_process_aq_command()
2158 iavf_set_rss_lut(adapter); in iavf_process_aq_command()
2162 if (adapter->aq_required & IAVF_FLAG_AQ_CONFIGURE_PROMISC_MODE) { in iavf_process_aq_command()
2163 iavf_set_promiscuous(adapter); in iavf_process_aq_command()
2167 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_CHANNELS) { in iavf_process_aq_command()
2168 iavf_enable_channels(adapter); in iavf_process_aq_command()
2172 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_CHANNELS) { in iavf_process_aq_command()
2173 iavf_disable_channels(adapter); in iavf_process_aq_command()
2176 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_CLOUD_FILTER) { in iavf_process_aq_command()
2177 iavf_add_cloud_filter(adapter); in iavf_process_aq_command()
2181 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_CLOUD_FILTER) { in iavf_process_aq_command()
2182 iavf_del_cloud_filter(adapter); in iavf_process_aq_command()
2185 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_CLOUD_FILTER) { in iavf_process_aq_command()
2186 iavf_del_cloud_filter(adapter); in iavf_process_aq_command()
2189 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_CLOUD_FILTER) { in iavf_process_aq_command()
2190 iavf_add_cloud_filter(adapter); in iavf_process_aq_command()
2193 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_FDIR_FILTER) { in iavf_process_aq_command()
2194 iavf_add_fdir_filter(adapter); in iavf_process_aq_command()
2197 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_FDIR_FILTER) { in iavf_process_aq_command()
2198 iavf_del_fdir_filter(adapter); in iavf_process_aq_command()
2201 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_ADV_RSS_CFG) { in iavf_process_aq_command()
2202 iavf_add_adv_rss_cfg(adapter); in iavf_process_aq_command()
2205 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_ADV_RSS_CFG) { in iavf_process_aq_command()
2206 iavf_del_adv_rss_cfg(adapter); in iavf_process_aq_command()
2209 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_CTAG_VLAN_STRIPPING) { in iavf_process_aq_command()
2210 iavf_disable_vlan_stripping_v2(adapter, ETH_P_8021Q); in iavf_process_aq_command()
2213 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_STAG_VLAN_STRIPPING) { in iavf_process_aq_command()
2214 iavf_disable_vlan_stripping_v2(adapter, ETH_P_8021AD); in iavf_process_aq_command()
2217 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_CTAG_VLAN_STRIPPING) { in iavf_process_aq_command()
2218 iavf_enable_vlan_stripping_v2(adapter, ETH_P_8021Q); in iavf_process_aq_command()
2221 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_STAG_VLAN_STRIPPING) { in iavf_process_aq_command()
2222 iavf_enable_vlan_stripping_v2(adapter, ETH_P_8021AD); in iavf_process_aq_command()
2225 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_CTAG_VLAN_INSERTION) { in iavf_process_aq_command()
2226 iavf_disable_vlan_insertion_v2(adapter, ETH_P_8021Q); in iavf_process_aq_command()
2229 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_STAG_VLAN_INSERTION) { in iavf_process_aq_command()
2230 iavf_disable_vlan_insertion_v2(adapter, ETH_P_8021AD); in iavf_process_aq_command()
2233 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_CTAG_VLAN_INSERTION) { in iavf_process_aq_command()
2234 iavf_enable_vlan_insertion_v2(adapter, ETH_P_8021Q); in iavf_process_aq_command()
2237 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_STAG_VLAN_INSERTION) { in iavf_process_aq_command()
2238 iavf_enable_vlan_insertion_v2(adapter, ETH_P_8021AD); in iavf_process_aq_command()
2242 if (adapter->aq_required & IAVF_FLAG_AQ_REQUEST_STATS) { in iavf_process_aq_command()
2243 iavf_request_stats(adapter); in iavf_process_aq_command()
2252 * @adapter: board private structure
2262 iavf_set_vlan_offload_features(struct iavf_adapter *adapter, in iavf_set_vlan_offload_features() argument
2292 if (VLAN_ALLOWED(adapter)) { in iavf_set_vlan_offload_features()
2302 } else if (VLAN_V2_ALLOWED(adapter)) { in iavf_set_vlan_offload_features()
2330 adapter->aq_required |= aq_required; in iavf_set_vlan_offload_features()
2331 mod_delayed_work(adapter->wq, &adapter->watchdog_task, 0); in iavf_set_vlan_offload_features()
2337 * @adapter: board private structure
2343 static void iavf_startup(struct iavf_adapter *adapter) in iavf_startup() argument
2345 struct pci_dev *pdev = adapter->pdev; in iavf_startup()
2346 struct iavf_hw *hw = &adapter->hw; in iavf_startup()
2350 WARN_ON(adapter->state != __IAVF_STARTUP); in iavf_startup()
2353 adapter->flags &= ~IAVF_FLAG_PF_COMMS_FAILED; in iavf_startup()
2354 adapter->flags &= ~IAVF_FLAG_RESET_PENDING; in iavf_startup()
2378 ret = iavf_send_api_ver(adapter); in iavf_startup()
2384 iavf_change_state(adapter, __IAVF_INIT_VERSION_CHECK); in iavf_startup()
2387 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_startup()
2392 * @adapter: board private structure
2398 static void iavf_init_version_check(struct iavf_adapter *adapter) in iavf_init_version_check() argument
2400 struct pci_dev *pdev = adapter->pdev; in iavf_init_version_check()
2401 struct iavf_hw *hw = &adapter->hw; in iavf_init_version_check()
2404 WARN_ON(adapter->state != __IAVF_INIT_VERSION_CHECK); in iavf_init_version_check()
2409 iavf_change_state(adapter, __IAVF_STARTUP); in iavf_init_version_check()
2414 err = iavf_verify_api_ver(adapter); in iavf_init_version_check()
2417 err = iavf_send_api_ver(adapter); in iavf_init_version_check()
2420 adapter->pf_version.major, in iavf_init_version_check()
2421 adapter->pf_version.minor, in iavf_init_version_check()
2426 err = iavf_send_vf_config_msg(adapter); in iavf_init_version_check()
2432 iavf_change_state(adapter, __IAVF_INIT_GET_RESOURCES); in iavf_init_version_check()
2435 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_init_version_check()
2440 * @adapter: board private structure
2442 int iavf_parse_vf_resource_msg(struct iavf_adapter *adapter) in iavf_parse_vf_resource_msg() argument
2444 int i, num_req_queues = adapter->num_req_queues; in iavf_parse_vf_resource_msg()
2445 struct iavf_vsi *vsi = &adapter->vsi; in iavf_parse_vf_resource_msg()
2447 for (i = 0; i < adapter->vf_res->num_vsis; i++) { in iavf_parse_vf_resource_msg()
2448 if (adapter->vf_res->vsi_res[i].vsi_type == VIRTCHNL_VSI_SRIOV) in iavf_parse_vf_resource_msg()
2449 adapter->vsi_res = &adapter->vf_res->vsi_res[i]; in iavf_parse_vf_resource_msg()
2451 if (!adapter->vsi_res) { in iavf_parse_vf_resource_msg()
2452 dev_err(&adapter->pdev->dev, "No LAN VSI found\n"); in iavf_parse_vf_resource_msg()
2457 num_req_queues > adapter->vsi_res->num_queue_pairs) { in iavf_parse_vf_resource_msg()
2462 dev_err(&adapter->pdev->dev, in iavf_parse_vf_resource_msg()
2465 adapter->vsi_res->num_queue_pairs); in iavf_parse_vf_resource_msg()
2466 adapter->flags |= IAVF_FLAG_REINIT_MSIX_NEEDED; in iavf_parse_vf_resource_msg()
2467 adapter->num_req_queues = adapter->vsi_res->num_queue_pairs; in iavf_parse_vf_resource_msg()
2468 iavf_schedule_reset(adapter, IAVF_FLAG_RESET_NEEDED); in iavf_parse_vf_resource_msg()
2472 adapter->num_req_queues = 0; in iavf_parse_vf_resource_msg()
2473 adapter->vsi.id = adapter->vsi_res->vsi_id; in iavf_parse_vf_resource_msg()
2475 adapter->vsi.back = adapter; in iavf_parse_vf_resource_msg()
2476 adapter->vsi.base_vector = 1; in iavf_parse_vf_resource_msg()
2477 vsi->netdev = adapter->netdev; in iavf_parse_vf_resource_msg()
2478 vsi->qs_handle = adapter->vsi_res->qset_handle; in iavf_parse_vf_resource_msg()
2479 if (adapter->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_RSS_PF) { in iavf_parse_vf_resource_msg()
2480 adapter->rss_key_size = adapter->vf_res->rss_key_size; in iavf_parse_vf_resource_msg()
2481 adapter->rss_lut_size = adapter->vf_res->rss_lut_size; in iavf_parse_vf_resource_msg()
2483 adapter->rss_key_size = IAVF_HKEY_ARRAY_SIZE; in iavf_parse_vf_resource_msg()
2484 adapter->rss_lut_size = IAVF_HLUT_ARRAY_SIZE; in iavf_parse_vf_resource_msg()
2492 * @adapter: board private structure
2499 static void iavf_init_get_resources(struct iavf_adapter *adapter) in iavf_init_get_resources() argument
2501 struct pci_dev *pdev = adapter->pdev; in iavf_init_get_resources()
2502 struct iavf_hw *hw = &adapter->hw; in iavf_init_get_resources()
2505 WARN_ON(adapter->state != __IAVF_INIT_GET_RESOURCES); in iavf_init_get_resources()
2507 if (!adapter->vf_res) { in iavf_init_get_resources()
2508 adapter->vf_res = kzalloc(IAVF_VIRTCHNL_VF_RESOURCE_SIZE, in iavf_init_get_resources()
2510 if (!adapter->vf_res) { in iavf_init_get_resources()
2515 err = iavf_get_vf_config(adapter); in iavf_init_get_resources()
2517 err = iavf_send_vf_config_msg(adapter); in iavf_init_get_resources()
2533 err = iavf_parse_vf_resource_msg(adapter); in iavf_init_get_resources()
2543 adapter->extended_caps = IAVF_EXTENDED_CAPS; in iavf_init_get_resources()
2545 iavf_change_state(adapter, __IAVF_INIT_EXTENDED_CAPS); in iavf_init_get_resources()
2549 kfree(adapter->vf_res); in iavf_init_get_resources()
2550 adapter->vf_res = NULL; in iavf_init_get_resources()
2552 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_init_get_resources()
2557 * @adapter: board private structure
2563 static void iavf_init_send_offload_vlan_v2_caps(struct iavf_adapter *adapter) in iavf_init_send_offload_vlan_v2_caps() argument
2567 WARN_ON(!(adapter->extended_caps & IAVF_EXTENDED_CAP_SEND_VLAN_V2)); in iavf_init_send_offload_vlan_v2_caps()
2569 ret = iavf_send_vf_offload_vlan_v2_msg(adapter); in iavf_init_send_offload_vlan_v2_caps()
2575 adapter->extended_caps &= ~IAVF_EXTENDED_CAP_RECV_VLAN_V2; in iavf_init_send_offload_vlan_v2_caps()
2579 adapter->extended_caps &= ~IAVF_EXTENDED_CAP_SEND_VLAN_V2; in iavf_init_send_offload_vlan_v2_caps()
2584 * @adapter: board private structure
2589 static void iavf_init_recv_offload_vlan_v2_caps(struct iavf_adapter *adapter) in iavf_init_recv_offload_vlan_v2_caps() argument
2593 WARN_ON(!(adapter->extended_caps & IAVF_EXTENDED_CAP_RECV_VLAN_V2)); in iavf_init_recv_offload_vlan_v2_caps()
2595 memset(&adapter->vlan_v2_caps, 0, sizeof(adapter->vlan_v2_caps)); in iavf_init_recv_offload_vlan_v2_caps()
2597 ret = iavf_get_vf_vlan_v2_caps(adapter); in iavf_init_recv_offload_vlan_v2_caps()
2602 adapter->extended_caps &= ~IAVF_EXTENDED_CAP_RECV_VLAN_V2; in iavf_init_recv_offload_vlan_v2_caps()
2608 adapter->extended_caps |= IAVF_EXTENDED_CAP_SEND_VLAN_V2; in iavf_init_recv_offload_vlan_v2_caps()
2609 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_init_recv_offload_vlan_v2_caps()
2614 * @adapter: board private structure
2623 static void iavf_init_process_extended_caps(struct iavf_adapter *adapter) in iavf_init_process_extended_caps() argument
2625 WARN_ON(adapter->state != __IAVF_INIT_EXTENDED_CAPS); in iavf_init_process_extended_caps()
2628 if (adapter->extended_caps & IAVF_EXTENDED_CAP_SEND_VLAN_V2) { in iavf_init_process_extended_caps()
2629 iavf_init_send_offload_vlan_v2_caps(adapter); in iavf_init_process_extended_caps()
2631 } else if (adapter->extended_caps & IAVF_EXTENDED_CAP_RECV_VLAN_V2) { in iavf_init_process_extended_caps()
2632 iavf_init_recv_offload_vlan_v2_caps(adapter); in iavf_init_process_extended_caps()
2639 iavf_change_state(adapter, __IAVF_INIT_CONFIG_ADAPTER); in iavf_init_process_extended_caps()
2644 * @adapter: board private structure
2649 static void iavf_init_config_adapter(struct iavf_adapter *adapter) in iavf_init_config_adapter() argument
2651 struct net_device *netdev = adapter->netdev; in iavf_init_config_adapter()
2652 struct pci_dev *pdev = adapter->pdev; in iavf_init_config_adapter()
2655 WARN_ON(adapter->state != __IAVF_INIT_CONFIG_ADAPTER); in iavf_init_config_adapter()
2657 if (iavf_process_config(adapter)) in iavf_init_config_adapter()
2660 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_init_config_adapter()
2662 adapter->flags |= IAVF_FLAG_RX_CSUM_ENABLED; in iavf_init_config_adapter()
2672 if (!is_valid_ether_addr(adapter->hw.mac.addr)) { in iavf_init_config_adapter()
2674 adapter->hw.mac.addr); in iavf_init_config_adapter()
2676 ether_addr_copy(adapter->hw.mac.addr, netdev->dev_addr); in iavf_init_config_adapter()
2678 eth_hw_addr_set(netdev, adapter->hw.mac.addr); in iavf_init_config_adapter()
2679 ether_addr_copy(netdev->perm_addr, adapter->hw.mac.addr); in iavf_init_config_adapter()
2682 adapter->tx_desc_count = IAVF_DEFAULT_TXD; in iavf_init_config_adapter()
2683 adapter->rx_desc_count = IAVF_DEFAULT_RXD; in iavf_init_config_adapter()
2684 err = iavf_init_interrupt_scheme(adapter); in iavf_init_config_adapter()
2687 iavf_map_rings_to_vectors(adapter); in iavf_init_config_adapter()
2688 if (adapter->vf_res->vf_cap_flags & in iavf_init_config_adapter()
2690 adapter->flags |= IAVF_FLAG_WB_ON_ITR_CAPABLE; in iavf_init_config_adapter()
2692 err = iavf_request_misc_irq(adapter); in iavf_init_config_adapter()
2697 adapter->link_up = false; in iavf_init_config_adapter()
2700 if (CLIENT_ALLOWED(adapter)) { in iavf_init_config_adapter()
2701 err = iavf_lan_add_device(adapter); in iavf_init_config_adapter()
2706 dev_info(&pdev->dev, "MAC address: %pM\n", adapter->hw.mac.addr); in iavf_init_config_adapter()
2710 iavf_change_state(adapter, __IAVF_DOWN); in iavf_init_config_adapter()
2711 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_init_config_adapter()
2713 iavf_misc_irq_enable(adapter); in iavf_init_config_adapter()
2714 wake_up(&adapter->down_waitqueue); in iavf_init_config_adapter()
2716 adapter->rss_key = kzalloc(adapter->rss_key_size, GFP_KERNEL); in iavf_init_config_adapter()
2717 adapter->rss_lut = kzalloc(adapter->rss_lut_size, GFP_KERNEL); in iavf_init_config_adapter()
2718 if (!adapter->rss_key || !adapter->rss_lut) { in iavf_init_config_adapter()
2722 if (RSS_AQ(adapter)) in iavf_init_config_adapter()
2723 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_RSS; in iavf_init_config_adapter()
2725 iavf_init_rss(adapter); in iavf_init_config_adapter()
2727 if (VLAN_V2_ALLOWED(adapter)) in iavf_init_config_adapter()
2729 iavf_set_vlan_offload_features(adapter, 0, netdev->features); in iavf_init_config_adapter()
2731 iavf_schedule_finish_config(adapter); in iavf_init_config_adapter()
2735 iavf_free_rss(adapter); in iavf_init_config_adapter()
2736 iavf_free_misc_irq(adapter); in iavf_init_config_adapter()
2738 iavf_reset_interrupt_capability(adapter); in iavf_init_config_adapter()
2740 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_init_config_adapter()
2749 struct iavf_adapter *adapter = container_of(work, in iavf_watchdog_task() local
2752 struct iavf_hw *hw = &adapter->hw; in iavf_watchdog_task()
2755 if (!mutex_trylock(&adapter->crit_lock)) { in iavf_watchdog_task()
2756 if (adapter->state == __IAVF_REMOVE) in iavf_watchdog_task()
2762 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) in iavf_watchdog_task()
2763 iavf_change_state(adapter, __IAVF_COMM_FAILED); in iavf_watchdog_task()
2765 switch (adapter->state) { in iavf_watchdog_task()
2767 iavf_startup(adapter); in iavf_watchdog_task()
2768 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2769 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2773 iavf_init_version_check(adapter); in iavf_watchdog_task()
2774 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2775 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2779 iavf_init_get_resources(adapter); in iavf_watchdog_task()
2780 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2781 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2785 iavf_init_process_extended_caps(adapter); in iavf_watchdog_task()
2786 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2787 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2791 iavf_init_config_adapter(adapter); in iavf_watchdog_task()
2792 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2793 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2798 &adapter->crit_section)) { in iavf_watchdog_task()
2803 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2806 if (++adapter->aq_wait_count > IAVF_AQ_MAX_ERR) { in iavf_watchdog_task()
2807 dev_err(&adapter->pdev->dev, in iavf_watchdog_task()
2809 adapter->flags |= IAVF_FLAG_PF_COMMS_FAILED; in iavf_watchdog_task()
2811 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2812 queue_delayed_work(adapter->wq, in iavf_watchdog_task()
2813 &adapter->watchdog_task, (5 * HZ)); in iavf_watchdog_task()
2817 iavf_change_state(adapter, adapter->last_state); in iavf_watchdog_task()
2818 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2819 queue_delayed_work(adapter->wq, &adapter->watchdog_task, HZ); in iavf_watchdog_task()
2823 &adapter->crit_section)) { in iavf_watchdog_task()
2828 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_watchdog_task()
2829 adapter->flags &= ~IAVF_FLAG_PF_COMMS_FAILED; in iavf_watchdog_task()
2830 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2838 dev_err(&adapter->pdev->dev, in iavf_watchdog_task()
2844 iavf_change_state(adapter, __IAVF_STARTUP); in iavf_watchdog_task()
2845 adapter->flags &= ~IAVF_FLAG_PF_COMMS_FAILED; in iavf_watchdog_task()
2847 adapter->aq_required = 0; in iavf_watchdog_task()
2848 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_watchdog_task()
2849 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2850 queue_delayed_work(adapter->wq, in iavf_watchdog_task()
2851 &adapter->watchdog_task, in iavf_watchdog_task()
2855 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2856 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2863 if (adapter->current_op) { in iavf_watchdog_task()
2865 dev_dbg(&adapter->pdev->dev, in iavf_watchdog_task()
2867 iavf_send_api_ver(adapter); in iavf_watchdog_task()
2870 int ret = iavf_process_aq_command(adapter); in iavf_watchdog_task()
2877 adapter->state == __IAVF_RUNNING) in iavf_watchdog_task()
2878 iavf_request_stats(adapter); in iavf_watchdog_task()
2880 if (adapter->state == __IAVF_RUNNING) in iavf_watchdog_task()
2881 iavf_detect_recover_hung(&adapter->vsi); in iavf_watchdog_task()
2885 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2892 adapter->aq_required = 0; in iavf_watchdog_task()
2893 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_watchdog_task()
2894 dev_err(&adapter->pdev->dev, "Hardware reset detected\n"); in iavf_watchdog_task()
2895 iavf_schedule_reset(adapter, IAVF_FLAG_RESET_PENDING); in iavf_watchdog_task()
2896 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2897 queue_delayed_work(adapter->wq, in iavf_watchdog_task()
2898 &adapter->watchdog_task, HZ * 2); in iavf_watchdog_task()
2902 schedule_delayed_work(&adapter->client_task, msecs_to_jiffies(5)); in iavf_watchdog_task()
2903 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2905 if (adapter->state >= __IAVF_DOWN) in iavf_watchdog_task()
2906 queue_work(adapter->wq, &adapter->adminq_task); in iavf_watchdog_task()
2907 if (adapter->aq_required) in iavf_watchdog_task()
2908 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2911 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_watchdog_task()
2917 * @adapter: board private structure
2922 static void iavf_disable_vf(struct iavf_adapter *adapter) in iavf_disable_vf() argument
2928 adapter->flags |= IAVF_FLAG_PF_COMMS_FAILED; in iavf_disable_vf()
2934 if (adapter->state == __IAVF_RUNNING) { in iavf_disable_vf()
2935 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_disable_vf()
2936 netif_carrier_off(adapter->netdev); in iavf_disable_vf()
2937 netif_tx_disable(adapter->netdev); in iavf_disable_vf()
2938 adapter->link_up = false; in iavf_disable_vf()
2939 iavf_napi_disable_all(adapter); in iavf_disable_vf()
2940 iavf_irq_disable(adapter); in iavf_disable_vf()
2941 iavf_free_traffic_irqs(adapter); in iavf_disable_vf()
2942 iavf_free_all_tx_resources(adapter); in iavf_disable_vf()
2943 iavf_free_all_rx_resources(adapter); in iavf_disable_vf()
2946 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_disable_vf()
2949 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_disable_vf()
2954 list_for_each_entry_safe(fv, fvtmp, &adapter->vlan_filter_list, list) { in iavf_disable_vf()
2958 adapter->num_vlan_filters = 0; in iavf_disable_vf()
2960 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_disable_vf()
2962 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_disable_vf()
2963 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, list) { in iavf_disable_vf()
2966 adapter->num_cloud_filters--; in iavf_disable_vf()
2968 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_disable_vf()
2970 iavf_free_misc_irq(adapter); in iavf_disable_vf()
2971 iavf_reset_interrupt_capability(adapter); in iavf_disable_vf()
2972 iavf_free_q_vectors(adapter); in iavf_disable_vf()
2973 iavf_free_queues(adapter); in iavf_disable_vf()
2974 memset(adapter->vf_res, 0, IAVF_VIRTCHNL_VF_RESOURCE_SIZE); in iavf_disable_vf()
2975 iavf_shutdown_adminq(&adapter->hw); in iavf_disable_vf()
2976 adapter->flags &= ~IAVF_FLAG_RESET_PENDING; in iavf_disable_vf()
2977 iavf_change_state(adapter, __IAVF_DOWN); in iavf_disable_vf()
2978 wake_up(&adapter->down_waitqueue); in iavf_disable_vf()
2979 dev_info(&adapter->pdev->dev, "Reset task did not complete, VF disabled\n"); in iavf_disable_vf()
2992 struct iavf_adapter *adapter = container_of(work, in iavf_reset_task() local
2995 struct virtchnl_vf_resource *vfres = adapter->vf_res; in iavf_reset_task()
2996 struct net_device *netdev = adapter->netdev; in iavf_reset_task()
2997 struct iavf_hw *hw = &adapter->hw; in iavf_reset_task()
3008 if (!mutex_trylock(&adapter->crit_lock)) { in iavf_reset_task()
3009 if (adapter->state != __IAVF_REMOVE) in iavf_reset_task()
3010 queue_work(adapter->wq, &adapter->reset_task); in iavf_reset_task()
3015 while (!mutex_trylock(&adapter->client_lock)) in iavf_reset_task()
3017 if (CLIENT_ENABLED(adapter)) { in iavf_reset_task()
3018 adapter->flags &= ~(IAVF_FLAG_CLIENT_NEEDS_OPEN | in iavf_reset_task()
3022 cancel_delayed_work_sync(&adapter->client_task); in iavf_reset_task()
3023 iavf_notify_client_close(&adapter->vsi, true); in iavf_reset_task()
3025 iavf_misc_irq_disable(adapter); in iavf_reset_task()
3026 if (adapter->flags & IAVF_FLAG_RESET_NEEDED) { in iavf_reset_task()
3027 adapter->flags &= ~IAVF_FLAG_RESET_NEEDED; in iavf_reset_task()
3033 iavf_request_reset(adapter); in iavf_reset_task()
3035 adapter->flags |= IAVF_FLAG_RESET_PENDING; in iavf_reset_task()
3046 dev_info(&adapter->pdev->dev, "Never saw reset\n"); in iavf_reset_task()
3061 pci_set_master(adapter->pdev); in iavf_reset_task()
3062 pci_restore_msi_state(adapter->pdev); in iavf_reset_task()
3065 dev_err(&adapter->pdev->dev, "Reset never finished (%x)\n", in iavf_reset_task()
3067 iavf_disable_vf(adapter); in iavf_reset_task()
3068 mutex_unlock(&adapter->client_lock); in iavf_reset_task()
3069 mutex_unlock(&adapter->crit_lock); in iavf_reset_task()
3078 running = adapter->state == __IAVF_RUNNING; in iavf_reset_task()
3083 adapter->link_up = false; in iavf_reset_task()
3084 iavf_napi_disable_all(adapter); in iavf_reset_task()
3086 iavf_irq_disable(adapter); in iavf_reset_task()
3088 iavf_change_state(adapter, __IAVF_RESETTING); in iavf_reset_task()
3089 adapter->flags &= ~IAVF_FLAG_RESET_PENDING; in iavf_reset_task()
3094 iavf_free_all_rx_resources(adapter); in iavf_reset_task()
3095 iavf_free_all_tx_resources(adapter); in iavf_reset_task()
3097 adapter->flags |= IAVF_FLAG_QUEUES_DISABLED; in iavf_reset_task()
3100 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_reset_task()
3103 dev_info(&adapter->pdev->dev, "Failed to init adminq: %d\n", in iavf_reset_task()
3107 adapter->aq_required = 0; in iavf_reset_task()
3109 if ((adapter->flags & IAVF_FLAG_REINIT_MSIX_NEEDED) || in iavf_reset_task()
3110 (adapter->flags & IAVF_FLAG_REINIT_ITR_NEEDED)) { in iavf_reset_task()
3111 err = iavf_reinit_interrupt_scheme(adapter, running); in iavf_reset_task()
3116 if (RSS_AQ(adapter)) { in iavf_reset_task()
3117 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_RSS; in iavf_reset_task()
3119 err = iavf_init_rss(adapter); in iavf_reset_task()
3124 adapter->aq_required |= IAVF_FLAG_AQ_GET_CONFIG; in iavf_reset_task()
3131 adapter->aq_required |= IAVF_FLAG_AQ_GET_OFFLOAD_VLAN_V2_CAPS; in iavf_reset_task()
3132 adapter->aq_required |= IAVF_FLAG_AQ_MAP_VECTORS; in iavf_reset_task()
3134 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_reset_task()
3140 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_reset_task()
3141 if (ether_addr_equal(f->macaddr, adapter->hw.mac.addr)) { in iavf_reset_task()
3147 list_for_each_entry(f, &adapter->mac_filter_list, list) { in iavf_reset_task()
3150 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_reset_task()
3153 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_reset_task()
3155 adapter->num_tc) { in iavf_reset_task()
3156 list_for_each_entry(cf, &adapter->cloud_filter_list, list) { in iavf_reset_task()
3160 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_reset_task()
3162 adapter->aq_required |= IAVF_FLAG_AQ_ADD_MAC_FILTER; in iavf_reset_task()
3163 adapter->aq_required |= IAVF_FLAG_AQ_ADD_CLOUD_FILTER; in iavf_reset_task()
3164 iavf_misc_irq_enable(adapter); in iavf_reset_task()
3166 mod_delayed_work(adapter->wq, &adapter->watchdog_task, 2); in iavf_reset_task()
3173 err = iavf_setup_all_tx_resources(adapter); in iavf_reset_task()
3178 err = iavf_setup_all_rx_resources(adapter); in iavf_reset_task()
3182 if ((adapter->flags & IAVF_FLAG_REINIT_MSIX_NEEDED) || in iavf_reset_task()
3183 (adapter->flags & IAVF_FLAG_REINIT_ITR_NEEDED)) { in iavf_reset_task()
3184 err = iavf_request_traffic_irqs(adapter, netdev->name); in iavf_reset_task()
3188 adapter->flags &= ~IAVF_FLAG_REINIT_MSIX_NEEDED; in iavf_reset_task()
3191 iavf_configure(adapter); in iavf_reset_task()
3196 iavf_up_complete(adapter); in iavf_reset_task()
3198 iavf_irq_enable(adapter, true); in iavf_reset_task()
3200 iavf_change_state(adapter, __IAVF_DOWN); in iavf_reset_task()
3201 wake_up(&adapter->down_waitqueue); in iavf_reset_task()
3204 adapter->flags &= ~IAVF_FLAG_REINIT_ITR_NEEDED; in iavf_reset_task()
3206 wake_up(&adapter->reset_waitqueue); in iavf_reset_task()
3207 mutex_unlock(&adapter->client_lock); in iavf_reset_task()
3208 mutex_unlock(&adapter->crit_lock); in iavf_reset_task()
3213 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_reset_task()
3214 iavf_free_traffic_irqs(adapter); in iavf_reset_task()
3216 iavf_disable_vf(adapter); in iavf_reset_task()
3218 mutex_unlock(&adapter->client_lock); in iavf_reset_task()
3219 mutex_unlock(&adapter->crit_lock); in iavf_reset_task()
3220 dev_err(&adapter->pdev->dev, "failed to allocate resources during reinit\n"); in iavf_reset_task()
3229 struct iavf_adapter *adapter = in iavf_adminq_task() local
3231 struct iavf_hw *hw = &adapter->hw; in iavf_adminq_task()
3238 if (!mutex_trylock(&adapter->crit_lock)) { in iavf_adminq_task()
3239 if (adapter->state == __IAVF_REMOVE) in iavf_adminq_task()
3242 queue_work(adapter->wq, &adapter->adminq_task); in iavf_adminq_task()
3246 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) in iavf_adminq_task()
3262 iavf_virtchnl_completion(adapter, v_op, v_ret, event.msg_buf, in iavf_adminq_task()
3268 if (iavf_is_reset_in_progress(adapter)) in iavf_adminq_task()
3277 dev_info(&adapter->pdev->dev, "ARQ VF Error detected\n"); in iavf_adminq_task()
3281 dev_info(&adapter->pdev->dev, "ARQ Overflow Error detected\n"); in iavf_adminq_task()
3285 dev_info(&adapter->pdev->dev, "ARQ Critical Error detected\n"); in iavf_adminq_task()
3294 dev_info(&adapter->pdev->dev, "ASQ VF Error detected\n"); in iavf_adminq_task()
3298 dev_info(&adapter->pdev->dev, "ASQ Overflow Error detected\n"); in iavf_adminq_task()
3302 dev_info(&adapter->pdev->dev, "ASQ Critical Error detected\n"); in iavf_adminq_task()
3311 mutex_unlock(&adapter->crit_lock); in iavf_adminq_task()
3314 iavf_misc_irq_enable(adapter); in iavf_adminq_task()
3326 struct iavf_adapter *adapter = in iavf_client_task() local
3333 if (!mutex_trylock(&adapter->client_lock)) in iavf_client_task()
3336 if (adapter->flags & IAVF_FLAG_SERVICE_CLIENT_REQUESTED) { in iavf_client_task()
3337 iavf_client_subtask(adapter); in iavf_client_task()
3338 adapter->flags &= ~IAVF_FLAG_SERVICE_CLIENT_REQUESTED; in iavf_client_task()
3341 if (adapter->flags & IAVF_FLAG_CLIENT_NEEDS_L2_PARAMS) { in iavf_client_task()
3342 iavf_notify_client_l2_params(&adapter->vsi); in iavf_client_task()
3343 adapter->flags &= ~IAVF_FLAG_CLIENT_NEEDS_L2_PARAMS; in iavf_client_task()
3346 if (adapter->flags & IAVF_FLAG_CLIENT_NEEDS_CLOSE) { in iavf_client_task()
3347 iavf_notify_client_close(&adapter->vsi, false); in iavf_client_task()
3348 adapter->flags &= ~IAVF_FLAG_CLIENT_NEEDS_CLOSE; in iavf_client_task()
3351 if (adapter->flags & IAVF_FLAG_CLIENT_NEEDS_OPEN) { in iavf_client_task()
3352 iavf_notify_client_open(&adapter->vsi); in iavf_client_task()
3353 adapter->flags &= ~IAVF_FLAG_CLIENT_NEEDS_OPEN; in iavf_client_task()
3356 mutex_unlock(&adapter->client_lock); in iavf_client_task()
3361 * @adapter: board private structure
3365 void iavf_free_all_tx_resources(struct iavf_adapter *adapter) in iavf_free_all_tx_resources() argument
3369 if (!adapter->tx_rings) in iavf_free_all_tx_resources()
3372 for (i = 0; i < adapter->num_active_queues; i++) in iavf_free_all_tx_resources()
3373 if (adapter->tx_rings[i].desc) in iavf_free_all_tx_resources()
3374 iavf_free_tx_resources(&adapter->tx_rings[i]); in iavf_free_all_tx_resources()
3379 * @adapter: board private structure
3387 static int iavf_setup_all_tx_resources(struct iavf_adapter *adapter) in iavf_setup_all_tx_resources() argument
3391 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_setup_all_tx_resources()
3392 adapter->tx_rings[i].count = adapter->tx_desc_count; in iavf_setup_all_tx_resources()
3393 err = iavf_setup_tx_descriptors(&adapter->tx_rings[i]); in iavf_setup_all_tx_resources()
3396 dev_err(&adapter->pdev->dev, in iavf_setup_all_tx_resources()
3406 * @adapter: board private structure
3414 static int iavf_setup_all_rx_resources(struct iavf_adapter *adapter) in iavf_setup_all_rx_resources() argument
3418 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_setup_all_rx_resources()
3419 adapter->rx_rings[i].count = adapter->rx_desc_count; in iavf_setup_all_rx_resources()
3420 err = iavf_setup_rx_descriptors(&adapter->rx_rings[i]); in iavf_setup_all_rx_resources()
3423 dev_err(&adapter->pdev->dev, in iavf_setup_all_rx_resources()
3432 * @adapter: board private structure
3436 void iavf_free_all_rx_resources(struct iavf_adapter *adapter) in iavf_free_all_rx_resources() argument
3440 if (!adapter->rx_rings) in iavf_free_all_rx_resources()
3443 for (i = 0; i < adapter->num_active_queues; i++) in iavf_free_all_rx_resources()
3444 if (adapter->rx_rings[i].desc) in iavf_free_all_rx_resources()
3445 iavf_free_rx_resources(&adapter->rx_rings[i]); in iavf_free_all_rx_resources()
3450 * @adapter: board private structure
3453 static int iavf_validate_tx_bandwidth(struct iavf_adapter *adapter, in iavf_validate_tx_bandwidth() argument
3458 if (ADV_LINK_SUPPORT(adapter)) { in iavf_validate_tx_bandwidth()
3459 if (adapter->link_speed_mbps < U32_MAX) { in iavf_validate_tx_bandwidth()
3460 speed = adapter->link_speed_mbps; in iavf_validate_tx_bandwidth()
3463 dev_err(&adapter->pdev->dev, "Unknown link speed\n"); in iavf_validate_tx_bandwidth()
3468 switch (adapter->link_speed) { in iavf_validate_tx_bandwidth()
3499 dev_err(&adapter->pdev->dev, in iavf_validate_tx_bandwidth()
3509 * @adapter: board private structure
3516 static int iavf_validate_ch_config(struct iavf_adapter *adapter, in iavf_validate_ch_config() argument
3534 dev_err(&adapter->pdev->dev, in iavf_validate_ch_config()
3546 dev_err(&adapter->pdev->dev, in iavf_validate_ch_config()
3555 dev_err(&adapter->pdev->dev, in iavf_validate_ch_config()
3564 if (num_qps > adapter->num_active_queues) { in iavf_validate_ch_config()
3565 dev_err(&adapter->pdev->dev, in iavf_validate_ch_config()
3570 ret = iavf_validate_tx_bandwidth(adapter, total_max_rate); in iavf_validate_ch_config()
3576 * @adapter: board private structure
3578 static void iavf_del_all_cloud_filters(struct iavf_adapter *adapter) in iavf_del_all_cloud_filters() argument
3582 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_del_all_cloud_filters()
3583 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, in iavf_del_all_cloud_filters()
3587 adapter->num_cloud_filters--; in iavf_del_all_cloud_filters()
3589 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_del_all_cloud_filters()
3594 * TC config already configured on this adapter.
3595 * @adapter: board private structure
3599 * with the config already configured on the adapter.
3603 static bool iavf_is_tc_config_same(struct iavf_adapter *adapter, in iavf_is_tc_config_same() argument
3606 struct virtchnl_channel_info *ch = &adapter->ch_config.ch_info[0]; in iavf_is_tc_config_same()
3609 if (adapter->num_tc != mqprio_qopt->num_tc) in iavf_is_tc_config_same()
3612 for (i = 0; i < adapter->num_tc; i++) { in iavf_is_tc_config_same()
3634 struct iavf_adapter *adapter = netdev_priv(netdev); in __iavf_setup_tc() local
3635 struct virtchnl_vf_resource *vfres = adapter->vf_res; in __iavf_setup_tc()
3647 if (adapter->ch_config.state == __IAVF_TC_RUNNING) { in __iavf_setup_tc()
3650 adapter->num_tc = 0; in __iavf_setup_tc()
3653 iavf_del_all_cloud_filters(adapter); in __iavf_setup_tc()
3654 adapter->aq_required = IAVF_FLAG_AQ_DISABLE_CHANNELS; in __iavf_setup_tc()
3655 total_qps = adapter->orig_num_active_queues; in __iavf_setup_tc()
3665 dev_err(&adapter->pdev->dev, "ADq not supported\n"); in __iavf_setup_tc()
3668 if (adapter->ch_config.state != __IAVF_TC_INVALID) { in __iavf_setup_tc()
3669 dev_err(&adapter->pdev->dev, "TC configuration already exists\n"); in __iavf_setup_tc()
3673 ret = iavf_validate_ch_config(adapter, mqprio_qopt); in __iavf_setup_tc()
3677 if (iavf_is_tc_config_same(adapter, &mqprio_qopt->qopt)) in __iavf_setup_tc()
3679 adapter->num_tc = num_tc; in __iavf_setup_tc()
3683 adapter->ch_config.ch_info[i].count = in __iavf_setup_tc()
3685 adapter->ch_config.ch_info[i].offset = in __iavf_setup_tc()
3692 adapter->ch_config.ch_info[i].max_tx_rate = in __iavf_setup_tc()
3695 adapter->ch_config.ch_info[i].count = 1; in __iavf_setup_tc()
3696 adapter->ch_config.ch_info[i].offset = 0; in __iavf_setup_tc()
3706 adapter->orig_num_active_queues = adapter->num_active_queues; in __iavf_setup_tc()
3712 adapter->ch_config.total_qps = total_qps; in __iavf_setup_tc()
3716 adapter->aq_required |= IAVF_FLAG_AQ_ENABLE_CHANNELS; in __iavf_setup_tc()
3719 netdev_set_num_tc(adapter->netdev, num_tc); in __iavf_setup_tc()
3730 if (test_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section)) in __iavf_setup_tc()
3741 * @adapter: board private structure
3745 static int iavf_parse_cls_flower(struct iavf_adapter *adapter, in iavf_parse_cls_flower() argument
3768 dev_err(&adapter->pdev->dev, "Unsupported key used: 0x%llx\n", in iavf_parse_cls_flower()
3801 dev_info(&adapter->pdev->dev, "Only TCP transport is supported\n"); in iavf_parse_cls_flower()
3816 dev_err(&adapter->pdev->dev, "Bad ether dest mask %pM\n", in iavf_parse_cls_flower()
3826 dev_err(&adapter->pdev->dev, "Bad ether src mask %pM\n", in iavf_parse_cls_flower()
3861 dev_err(&adapter->pdev->dev, "Bad vlan mask %u\n", in iavf_parse_cls_flower()
3885 dev_err(&adapter->pdev->dev, "Bad ip dst mask 0x%08x\n", in iavf_parse_cls_flower()
3895 dev_err(&adapter->pdev->dev, "Bad ip src mask 0x%08x\n", in iavf_parse_cls_flower()
3902 dev_info(&adapter->pdev->dev, "Tenant id not allowed for ip filter\n"); in iavf_parse_cls_flower()
3922 dev_err(&adapter->pdev->dev, "Bad ipv6 dst mask 0x%02x\n", in iavf_parse_cls_flower()
3932 dev_err(&adapter->pdev->dev, in iavf_parse_cls_flower()
3957 dev_err(&adapter->pdev->dev, "Bad src port mask %u\n", in iavf_parse_cls_flower()
3967 dev_err(&adapter->pdev->dev, "Bad dst port mask %u\n", in iavf_parse_cls_flower()
3989 * @adapter: board private structure
3993 static int iavf_handle_tclass(struct iavf_adapter *adapter, u32 tc, in iavf_handle_tclass() argument
3998 if (tc < adapter->num_tc) { in iavf_handle_tclass()
4000 dev_err(&adapter->pdev->dev, in iavf_handle_tclass()
4013 * @adapter: Board private structure
4019 static struct iavf_cloud_filter *iavf_find_cf(struct iavf_adapter *adapter, in iavf_find_cf() argument
4027 list_for_each_entry(filter, &adapter->cloud_filter_list, list) { in iavf_find_cf()
4036 * @adapter: board private structure
4039 static int iavf_configure_clsflower(struct iavf_adapter *adapter, in iavf_configure_clsflower() argument
4042 int tc = tc_classid_to_hwtc(adapter->netdev, cls_flower->classid); in iavf_configure_clsflower()
4047 dev_err(&adapter->pdev->dev, "Invalid traffic class\n"); in iavf_configure_clsflower()
4055 while (!mutex_trylock(&adapter->crit_lock)) { in iavf_configure_clsflower()
4066 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_configure_clsflower()
4067 if (iavf_find_cf(adapter, &cls_flower->cookie)) { in iavf_configure_clsflower()
4068 dev_err(&adapter->pdev->dev, "Failed to add TC Flower filter, it already exists\n"); in iavf_configure_clsflower()
4072 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_configure_clsflower()
4078 err = iavf_parse_cls_flower(adapter, cls_flower, filter); in iavf_configure_clsflower()
4082 err = iavf_handle_tclass(adapter, tc, filter); in iavf_configure_clsflower()
4087 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_configure_clsflower()
4088 list_add_tail(&filter->list, &adapter->cloud_filter_list); in iavf_configure_clsflower()
4089 adapter->num_cloud_filters++; in iavf_configure_clsflower()
4091 adapter->aq_required |= IAVF_FLAG_AQ_ADD_CLOUD_FILTER; in iavf_configure_clsflower()
4093 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_configure_clsflower()
4098 mutex_unlock(&adapter->crit_lock); in iavf_configure_clsflower()
4104 * @adapter: board private structure
4107 static int iavf_delete_clsflower(struct iavf_adapter *adapter, in iavf_delete_clsflower() argument
4113 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_delete_clsflower()
4114 filter = iavf_find_cf(adapter, &cls_flower->cookie); in iavf_delete_clsflower()
4117 adapter->aq_required |= IAVF_FLAG_AQ_DEL_CLOUD_FILTER; in iavf_delete_clsflower()
4121 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_delete_clsflower()
4128 * @adapter: board private structure
4131 static int iavf_setup_tc_cls_flower(struct iavf_adapter *adapter, in iavf_setup_tc_cls_flower() argument
4136 return iavf_configure_clsflower(adapter, cls_flower); in iavf_setup_tc_cls_flower()
4138 return iavf_delete_clsflower(adapter, cls_flower); in iavf_setup_tc_cls_flower()
4157 struct iavf_adapter *adapter = cb_priv; in iavf_setup_tc_block_cb() local
4159 if (!tc_cls_can_offload_and_chain0(adapter->netdev, type_data)) in iavf_setup_tc_block_cb()
4186 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_setup_tc() local
4195 adapter, adapter, true); in iavf_setup_tc()
4203 * @adapter: board private structure
4207 static void iavf_restore_fdir_filters(struct iavf_adapter *adapter) in iavf_restore_fdir_filters() argument
4211 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_restore_fdir_filters()
4212 list_for_each_entry(f, &adapter->fdir_list_head, list) { in iavf_restore_fdir_filters()
4222 adapter->aq_required |= IAVF_FLAG_AQ_ADD_FDIR_FILTER; in iavf_restore_fdir_filters()
4225 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_restore_fdir_filters()
4242 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_open() local
4245 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) { in iavf_open()
4246 dev_err(&adapter->pdev->dev, "Unable to open device due to PF driver failure.\n"); in iavf_open()
4250 while (!mutex_trylock(&adapter->crit_lock)) { in iavf_open()
4256 if (adapter->state == __IAVF_INIT_CONFIG_ADAPTER) in iavf_open()
4262 if (adapter->state != __IAVF_DOWN) { in iavf_open()
4267 if (adapter->state == __IAVF_RUNNING && in iavf_open()
4268 !test_bit(__IAVF_VSI_DOWN, adapter->vsi.state)) { in iavf_open()
4269 dev_dbg(&adapter->pdev->dev, "VF is already open.\n"); in iavf_open()
4275 err = iavf_setup_all_tx_resources(adapter); in iavf_open()
4280 err = iavf_setup_all_rx_resources(adapter); in iavf_open()
4285 err = iavf_request_traffic_irqs(adapter, netdev->name); in iavf_open()
4289 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_open()
4291 iavf_add_filter(adapter, adapter->hw.mac.addr); in iavf_open()
4293 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_open()
4296 iavf_restore_filters(adapter); in iavf_open()
4297 iavf_restore_fdir_filters(adapter); in iavf_open()
4299 iavf_configure(adapter); in iavf_open()
4301 iavf_up_complete(adapter); in iavf_open()
4303 iavf_irq_enable(adapter, true); in iavf_open()
4305 mutex_unlock(&adapter->crit_lock); in iavf_open()
4310 iavf_down(adapter); in iavf_open()
4311 iavf_free_traffic_irqs(adapter); in iavf_open()
4313 iavf_free_all_rx_resources(adapter); in iavf_open()
4315 iavf_free_all_tx_resources(adapter); in iavf_open()
4317 mutex_unlock(&adapter->crit_lock); in iavf_open()
4335 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_close() local
4339 mutex_lock(&adapter->crit_lock); in iavf_close()
4341 if (adapter->state <= __IAVF_DOWN_PENDING) { in iavf_close()
4342 mutex_unlock(&adapter->crit_lock); in iavf_close()
4346 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_close()
4347 if (CLIENT_ENABLED(adapter)) in iavf_close()
4348 adapter->flags |= IAVF_FLAG_CLIENT_NEEDS_CLOSE; in iavf_close()
4358 aq_to_restore = adapter->aq_required; in iavf_close()
4359 adapter->aq_required &= IAVF_FLAG_AQ_GET_CONFIG; in iavf_close()
4373 iavf_down(adapter); in iavf_close()
4374 iavf_change_state(adapter, __IAVF_DOWN_PENDING); in iavf_close()
4375 iavf_free_traffic_irqs(adapter); in iavf_close()
4377 mutex_unlock(&adapter->crit_lock); in iavf_close()
4390 status = wait_event_timeout(adapter->down_waitqueue, in iavf_close()
4391 adapter->state == __IAVF_DOWN, in iavf_close()
4396 mutex_lock(&adapter->crit_lock); in iavf_close()
4397 adapter->aq_required |= aq_to_restore; in iavf_close()
4398 mutex_unlock(&adapter->crit_lock); in iavf_close()
4411 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_change_mtu() local
4417 if (CLIENT_ENABLED(adapter)) { in iavf_change_mtu()
4418 iavf_notify_client_l2_params(&adapter->vsi); in iavf_change_mtu()
4419 adapter->flags |= IAVF_FLAG_SERVICE_CLIENT_REQUESTED; in iavf_change_mtu()
4423 iavf_schedule_reset(adapter, IAVF_FLAG_RESET_NEEDED); in iavf_change_mtu()
4424 ret = iavf_wait_for_reset(adapter); in iavf_change_mtu()
4436 * @adapter: board private structure
4438 static void iavf_disable_fdir(struct iavf_adapter *adapter) in iavf_disable_fdir() argument
4443 adapter->flags &= ~IAVF_FLAG_FDIR_ENABLED; in iavf_disable_fdir()
4446 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_disable_fdir()
4447 list_for_each_entry_safe(fdir, fdirtmp, &adapter->fdir_list_head, in iavf_disable_fdir()
4454 adapter->fdir_active_fltr--; in iavf_disable_fdir()
4469 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_disable_fdir()
4472 adapter->aq_required |= IAVF_FLAG_AQ_DEL_FDIR_FILTER; in iavf_disable_fdir()
4473 mod_delayed_work(adapter->wq, &adapter->watchdog_task, 0); in iavf_disable_fdir()
4491 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_set_features() local
4496 iavf_set_vlan_offload_features(adapter, netdev->features, in iavf_set_features()
4501 adapter->flags |= IAVF_FLAG_FDIR_ENABLED; in iavf_set_features()
4503 iavf_disable_fdir(adapter); in iavf_set_features()
4569 * @adapter: board private structure
4575 iavf_get_netdev_vlan_hw_features(struct iavf_adapter *adapter) in iavf_get_netdev_vlan_hw_features() argument
4579 if (!adapter->vf_res || !adapter->vf_res->vf_cap_flags) in iavf_get_netdev_vlan_hw_features()
4583 if (VLAN_ALLOWED(adapter)) { in iavf_get_netdev_vlan_hw_features()
4586 } else if (VLAN_V2_ALLOWED(adapter)) { in iavf_get_netdev_vlan_hw_features()
4588 &adapter->vlan_v2_caps; in iavf_get_netdev_vlan_hw_features()
4631 * @adapter: board private structure
4637 iavf_get_netdev_vlan_features(struct iavf_adapter *adapter) in iavf_get_netdev_vlan_features() argument
4641 if (!adapter->vf_res || !adapter->vf_res->vf_cap_flags) in iavf_get_netdev_vlan_features()
4644 if (VLAN_ALLOWED(adapter)) { in iavf_get_netdev_vlan_features()
4647 } else if (VLAN_V2_ALLOWED(adapter)) { in iavf_get_netdev_vlan_features()
4649 &adapter->vlan_v2_caps; in iavf_get_netdev_vlan_features()
4734 * @adapter: board private structure
4738 iavf_fix_netdev_vlan_features(struct iavf_adapter *adapter, in iavf_fix_netdev_vlan_features() argument
4743 allowed_features = iavf_get_netdev_vlan_hw_features(adapter) | in iavf_fix_netdev_vlan_features()
4744 iavf_get_netdev_vlan_features(adapter); in iavf_fix_netdev_vlan_features()
4779 adapter->vlan_v2_caps.offloads.ethertype_match == in iavf_fix_netdev_vlan_features()
4781 …netdev_warn(adapter->netdev, "cannot support CTAG and STAG VLAN stripping and/or insertion simulta… in iavf_fix_netdev_vlan_features()
4799 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_fix_features() local
4801 if (!FDIR_FLTR_SUPPORT(adapter)) in iavf_fix_features()
4804 return iavf_fix_netdev_vlan_features(adapter, features); in iavf_fix_features()
4848 * @adapter: board private structure
4853 int iavf_process_config(struct iavf_adapter *adapter) in iavf_process_config() argument
4855 struct virtchnl_vf_resource *vfres = adapter->vf_res; in iavf_process_config()
4857 struct net_device *netdev = adapter->netdev; in iavf_process_config()
4905 hw_vlan_features = iavf_get_netdev_vlan_hw_features(adapter); in iavf_process_config()
4914 vlan_features = iavf_get_netdev_vlan_features(adapter); in iavf_process_config()
4921 if (FDIR_FLTR_SUPPORT(adapter)) { in iavf_process_config()
4924 adapter->flags |= IAVF_FLAG_FDIR_ENABLED; in iavf_process_config()
4957 * iavf_probe initializes an adapter identified by a pci_dev structure.
4958 * The OS initialization, configuring of the adapter private structure,
4964 struct iavf_adapter *adapter = NULL; in iavf_probe() local
4998 adapter = netdev_priv(netdev); in iavf_probe()
5000 adapter->netdev = netdev; in iavf_probe()
5001 adapter->pdev = pdev; in iavf_probe()
5003 hw = &adapter->hw; in iavf_probe()
5004 hw->back = adapter; in iavf_probe()
5006 adapter->wq = alloc_ordered_workqueue("%s", WQ_MEM_RECLAIM, in iavf_probe()
5008 if (!adapter->wq) { in iavf_probe()
5013 adapter->msg_enable = BIT(DEFAULT_DEBUG_LEVEL_SHIFT) - 1; in iavf_probe()
5014 iavf_change_state(adapter, __IAVF_STARTUP); in iavf_probe()
5016 /* Call save state here because it relies on the adapter struct. */ in iavf_probe()
5037 mutex_init(&adapter->crit_lock); in iavf_probe()
5038 mutex_init(&adapter->client_lock); in iavf_probe()
5042 spin_lock_init(&adapter->mac_vlan_list_lock); in iavf_probe()
5043 spin_lock_init(&adapter->cloud_filter_list_lock); in iavf_probe()
5044 spin_lock_init(&adapter->fdir_fltr_lock); in iavf_probe()
5045 spin_lock_init(&adapter->adv_rss_lock); in iavf_probe()
5046 spin_lock_init(&adapter->current_netdev_promisc_flags_lock); in iavf_probe()
5048 INIT_LIST_HEAD(&adapter->mac_filter_list); in iavf_probe()
5049 INIT_LIST_HEAD(&adapter->vlan_filter_list); in iavf_probe()
5050 INIT_LIST_HEAD(&adapter->cloud_filter_list); in iavf_probe()
5051 INIT_LIST_HEAD(&adapter->fdir_list_head); in iavf_probe()
5052 INIT_LIST_HEAD(&adapter->adv_rss_list_head); in iavf_probe()
5054 INIT_WORK(&adapter->reset_task, iavf_reset_task); in iavf_probe()
5055 INIT_WORK(&adapter->adminq_task, iavf_adminq_task); in iavf_probe()
5056 INIT_WORK(&adapter->finish_config, iavf_finish_config); in iavf_probe()
5057 INIT_DELAYED_WORK(&adapter->watchdog_task, iavf_watchdog_task); in iavf_probe()
5058 INIT_DELAYED_WORK(&adapter->client_task, iavf_client_task); in iavf_probe()
5061 init_waitqueue_head(&adapter->down_waitqueue); in iavf_probe()
5064 init_waitqueue_head(&adapter->reset_waitqueue); in iavf_probe()
5067 init_waitqueue_head(&adapter->vc_waitqueue); in iavf_probe()
5069 queue_delayed_work(adapter->wq, &adapter->watchdog_task, in iavf_probe()
5075 destroy_workqueue(adapter->wq); in iavf_probe()
5095 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_suspend() local
5099 while (!mutex_trylock(&adapter->crit_lock)) in iavf_suspend()
5104 iavf_down(adapter); in iavf_suspend()
5107 iavf_free_misc_irq(adapter); in iavf_suspend()
5108 iavf_reset_interrupt_capability(adapter); in iavf_suspend()
5110 mutex_unlock(&adapter->crit_lock); in iavf_suspend()
5124 struct iavf_adapter *adapter; in iavf_resume() local
5127 adapter = iavf_pdev_to_adapter(pdev); in iavf_resume()
5132 err = iavf_set_interrupt_capability(adapter); in iavf_resume()
5138 err = iavf_request_misc_irq(adapter); in iavf_resume()
5145 queue_work(adapter->wq, &adapter->reset_task); in iavf_resume()
5147 netif_device_attach(adapter->netdev); in iavf_resume()
5168 struct iavf_adapter *adapter; in iavf_remove() local
5178 adapter = iavf_pdev_to_adapter(pdev); in iavf_remove()
5179 hw = &adapter->hw; in iavf_remove()
5181 if (test_and_set_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section)) in iavf_remove()
5188 mutex_lock(&adapter->crit_lock); in iavf_remove()
5189 if (adapter->state == __IAVF_RUNNING || in iavf_remove()
5190 adapter->state == __IAVF_DOWN || in iavf_remove()
5191 adapter->state == __IAVF_INIT_FAILED) { in iavf_remove()
5192 mutex_unlock(&adapter->crit_lock); in iavf_remove()
5196 if (adapter->state == __IAVF_REMOVE) { in iavf_remove()
5197 mutex_unlock(&adapter->crit_lock); in iavf_remove()
5201 mutex_unlock(&adapter->crit_lock); in iavf_remove()
5204 cancel_delayed_work_sync(&adapter->watchdog_task); in iavf_remove()
5205 cancel_work_sync(&adapter->finish_config); in iavf_remove()
5208 if (adapter->netdev_registered) { in iavf_remove()
5210 adapter->netdev_registered = false; in iavf_remove()
5214 if (CLIENT_ALLOWED(adapter)) { in iavf_remove()
5215 err = iavf_lan_del_device(adapter); in iavf_remove()
5221 mutex_lock(&adapter->crit_lock); in iavf_remove()
5222 dev_info(&adapter->pdev->dev, "Removing device\n"); in iavf_remove()
5223 iavf_change_state(adapter, __IAVF_REMOVE); in iavf_remove()
5225 iavf_request_reset(adapter); in iavf_remove()
5229 iavf_request_reset(adapter); in iavf_remove()
5233 iavf_misc_irq_disable(adapter); in iavf_remove()
5235 cancel_work_sync(&adapter->reset_task); in iavf_remove()
5236 cancel_delayed_work_sync(&adapter->watchdog_task); in iavf_remove()
5237 cancel_work_sync(&adapter->adminq_task); in iavf_remove()
5238 cancel_delayed_work_sync(&adapter->client_task); in iavf_remove()
5240 adapter->aq_required = 0; in iavf_remove()
5241 adapter->flags &= ~IAVF_FLAG_REINIT_ITR_NEEDED; in iavf_remove()
5243 iavf_free_all_tx_resources(adapter); in iavf_remove()
5244 iavf_free_all_rx_resources(adapter); in iavf_remove()
5245 iavf_free_misc_irq(adapter); in iavf_remove()
5247 iavf_reset_interrupt_capability(adapter); in iavf_remove()
5248 iavf_free_q_vectors(adapter); in iavf_remove()
5250 iavf_free_rss(adapter); in iavf_remove()
5258 mutex_destroy(&adapter->client_lock); in iavf_remove()
5259 mutex_unlock(&adapter->crit_lock); in iavf_remove()
5260 mutex_destroy(&adapter->crit_lock); in iavf_remove()
5264 iavf_free_queues(adapter); in iavf_remove()
5265 kfree(adapter->vf_res); in iavf_remove()
5266 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_remove()
5270 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_remove()
5274 list_for_each_entry_safe(vlf, vlftmp, &adapter->vlan_filter_list, in iavf_remove()
5280 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_remove()
5282 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_remove()
5283 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, list) { in iavf_remove()
5287 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_remove()
5289 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_remove()
5290 list_for_each_entry_safe(fdir, fdirtmp, &adapter->fdir_list_head, list) { in iavf_remove()
5294 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_remove()
5296 spin_lock_bh(&adapter->adv_rss_lock); in iavf_remove()
5297 list_for_each_entry_safe(rss, rsstmp, &adapter->adv_rss_list_head, in iavf_remove()
5302 spin_unlock_bh(&adapter->adv_rss_lock); in iavf_remove()
5304 destroy_workqueue(adapter->wq); in iavf_remove()