Lines Matching refs: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);
74 struct iavf_adapter *adapter = (struct iavf_adapter *)hw->back; in iavf_allocate_dma_mem_d() local
80 mem->va = dma_alloc_coherent(&adapter->pdev->dev, mem->size, in iavf_allocate_dma_mem_d()
96 struct iavf_adapter *adapter = (struct iavf_adapter *)hw->back; in iavf_free_dma_mem_d() local
100 dma_free_coherent(&adapter->pdev->dev, mem->size, in iavf_free_dma_mem_d()
168 void iavf_schedule_reset(struct iavf_adapter *adapter) in iavf_schedule_reset() argument
170 if (!(adapter->flags & in iavf_schedule_reset()
172 adapter->flags |= IAVF_FLAG_RESET_NEEDED; in iavf_schedule_reset()
173 queue_work(iavf_wq, &adapter->reset_task); in iavf_schedule_reset()
184 void iavf_schedule_request_stats(struct iavf_adapter *adapter) in iavf_schedule_request_stats() argument
186 adapter->aq_required |= IAVF_FLAG_AQ_REQUEST_STATS; in iavf_schedule_request_stats()
187 mod_delayed_work(iavf_wq, &adapter->watchdog_task, 0); in iavf_schedule_request_stats()
197 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_tx_timeout() local
199 adapter->tx_timeout_count++; in iavf_tx_timeout()
200 iavf_schedule_reset(adapter); in iavf_tx_timeout()
207 static void iavf_misc_irq_disable(struct iavf_adapter *adapter) in iavf_misc_irq_disable() argument
209 struct iavf_hw *hw = &adapter->hw; in iavf_misc_irq_disable()
211 if (!adapter->msix_entries) in iavf_misc_irq_disable()
218 synchronize_irq(adapter->msix_entries[0].vector); in iavf_misc_irq_disable()
225 static void iavf_misc_irq_enable(struct iavf_adapter *adapter) in iavf_misc_irq_enable() argument
227 struct iavf_hw *hw = &adapter->hw; in iavf_misc_irq_enable()
240 static void iavf_irq_disable(struct iavf_adapter *adapter) in iavf_irq_disable() argument
243 struct iavf_hw *hw = &adapter->hw; in iavf_irq_disable()
245 if (!adapter->msix_entries) in iavf_irq_disable()
248 for (i = 1; i < adapter->num_msix_vectors; i++) { in iavf_irq_disable()
250 synchronize_irq(adapter->msix_entries[i].vector); in iavf_irq_disable()
260 void iavf_irq_enable_queues(struct iavf_adapter *adapter, u32 mask) in iavf_irq_enable_queues() argument
262 struct iavf_hw *hw = &adapter->hw; in iavf_irq_enable_queues()
265 for (i = 1; i < adapter->num_msix_vectors; i++) { in iavf_irq_enable_queues()
279 void iavf_irq_enable(struct iavf_adapter *adapter, bool flush) in iavf_irq_enable() argument
281 struct iavf_hw *hw = &adapter->hw; in iavf_irq_enable()
283 iavf_misc_irq_enable(adapter); in iavf_irq_enable()
284 iavf_irq_enable_queues(adapter, ~0); in iavf_irq_enable()
298 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_msix_aq() local
299 struct iavf_hw *hw = &adapter->hw; in iavf_msix_aq()
306 queue_work(iavf_wq, &adapter->adminq_task); in iavf_msix_aq()
335 iavf_map_vector_to_rxq(struct iavf_adapter *adapter, int v_idx, int r_idx) in iavf_map_vector_to_rxq() argument
337 struct iavf_q_vector *q_vector = &adapter->q_vectors[v_idx]; in iavf_map_vector_to_rxq()
338 struct iavf_ring *rx_ring = &adapter->rx_rings[r_idx]; in iavf_map_vector_to_rxq()
339 struct iavf_hw *hw = &adapter->hw; in iavf_map_vector_to_rxq()
343 rx_ring->vsi = &adapter->vsi; in iavf_map_vector_to_rxq()
361 iavf_map_vector_to_txq(struct iavf_adapter *adapter, int v_idx, int t_idx) in iavf_map_vector_to_txq() argument
363 struct iavf_q_vector *q_vector = &adapter->q_vectors[v_idx]; in iavf_map_vector_to_txq()
364 struct iavf_ring *tx_ring = &adapter->tx_rings[t_idx]; in iavf_map_vector_to_txq()
365 struct iavf_hw *hw = &adapter->hw; in iavf_map_vector_to_txq()
369 tx_ring->vsi = &adapter->vsi; in iavf_map_vector_to_txq()
390 static void iavf_map_rings_to_vectors(struct iavf_adapter *adapter) in iavf_map_rings_to_vectors() argument
392 int rings_remaining = adapter->num_active_queues; in iavf_map_rings_to_vectors()
396 q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_map_rings_to_vectors()
399 iavf_map_vector_to_rxq(adapter, vidx, ridx); in iavf_map_rings_to_vectors()
400 iavf_map_vector_to_txq(adapter, vidx, ridx); in iavf_map_rings_to_vectors()
409 adapter->aq_required |= IAVF_FLAG_AQ_MAP_VECTORS; in iavf_map_rings_to_vectors()
448 iavf_request_traffic_irqs(struct iavf_adapter *adapter, char *basename) in iavf_request_traffic_irqs() argument
455 iavf_irq_disable(adapter); in iavf_request_traffic_irqs()
457 q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_request_traffic_irqs()
460 struct iavf_q_vector *q_vector = &adapter->q_vectors[vector]; in iavf_request_traffic_irqs()
462 irq_num = adapter->msix_entries[vector + NONQ_VECS].vector; in iavf_request_traffic_irqs()
484 dev_info(&adapter->pdev->dev, in iavf_request_traffic_irqs()
506 irq_num = adapter->msix_entries[vector + NONQ_VECS].vector; in iavf_request_traffic_irqs()
509 free_irq(irq_num, &adapter->q_vectors[vector]); in iavf_request_traffic_irqs()
522 static int iavf_request_misc_irq(struct iavf_adapter *adapter) in iavf_request_misc_irq() argument
524 struct net_device *netdev = adapter->netdev; in iavf_request_misc_irq()
527 snprintf(adapter->misc_vector_name, in iavf_request_misc_irq()
528 sizeof(adapter->misc_vector_name) - 1, "iavf-%s:mbx", in iavf_request_misc_irq()
529 dev_name(&adapter->pdev->dev)); in iavf_request_misc_irq()
530 err = request_irq(adapter->msix_entries[0].vector, in iavf_request_misc_irq()
532 adapter->misc_vector_name, netdev); in iavf_request_misc_irq()
534 dev_err(&adapter->pdev->dev, in iavf_request_misc_irq()
536 adapter->misc_vector_name, err); in iavf_request_misc_irq()
537 free_irq(adapter->msix_entries[0].vector, netdev); in iavf_request_misc_irq()
548 static void iavf_free_traffic_irqs(struct iavf_adapter *adapter) in iavf_free_traffic_irqs() argument
552 if (!adapter->msix_entries) in iavf_free_traffic_irqs()
555 q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_free_traffic_irqs()
558 irq_num = adapter->msix_entries[vector + NONQ_VECS].vector; in iavf_free_traffic_irqs()
561 free_irq(irq_num, &adapter->q_vectors[vector]); in iavf_free_traffic_irqs()
571 static void iavf_free_misc_irq(struct iavf_adapter *adapter) in iavf_free_misc_irq() argument
573 struct net_device *netdev = adapter->netdev; in iavf_free_misc_irq()
575 if (!adapter->msix_entries) in iavf_free_misc_irq()
578 free_irq(adapter->msix_entries[0].vector, netdev); in iavf_free_misc_irq()
587 static void iavf_configure_tx(struct iavf_adapter *adapter) in iavf_configure_tx() argument
589 struct iavf_hw *hw = &adapter->hw; in iavf_configure_tx()
592 for (i = 0; i < adapter->num_active_queues; i++) in iavf_configure_tx()
593 adapter->tx_rings[i].tail = hw->hw_addr + IAVF_QTX_TAIL1(i); in iavf_configure_tx()
602 static void iavf_configure_rx(struct iavf_adapter *adapter) in iavf_configure_rx() argument
605 struct iavf_hw *hw = &adapter->hw; in iavf_configure_rx()
610 if (!(adapter->flags & IAVF_FLAG_LEGACY_RX)) { in iavf_configure_rx()
611 struct net_device *netdev = adapter->netdev; in iavf_configure_rx()
629 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_configure_rx()
630 adapter->rx_rings[i].tail = hw->hw_addr + IAVF_QRX_TAIL1(i); in iavf_configure_rx()
631 adapter->rx_rings[i].rx_buf_len = rx_buf_len; in iavf_configure_rx()
633 if (adapter->flags & IAVF_FLAG_LEGACY_RX) in iavf_configure_rx()
634 clear_ring_build_skb_enabled(&adapter->rx_rings[i]); in iavf_configure_rx()
636 set_ring_build_skb_enabled(&adapter->rx_rings[i]); in iavf_configure_rx()
649 iavf_vlan_filter *iavf_find_vlan(struct iavf_adapter *adapter, u16 vlan) in iavf_find_vlan() argument
653 list_for_each_entry(f, &adapter->vlan_filter_list, list) { in iavf_find_vlan()
668 iavf_vlan_filter *iavf_add_vlan(struct iavf_adapter *adapter, u16 vlan) in iavf_add_vlan() argument
672 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_add_vlan()
674 f = iavf_find_vlan(adapter, vlan); in iavf_add_vlan()
682 list_add_tail(&f->list, &adapter->vlan_filter_list); in iavf_add_vlan()
684 adapter->aq_required |= IAVF_FLAG_AQ_ADD_VLAN_FILTER; in iavf_add_vlan()
688 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_add_vlan()
697 static void iavf_del_vlan(struct iavf_adapter *adapter, u16 vlan) in iavf_del_vlan() argument
701 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_del_vlan()
703 f = iavf_find_vlan(adapter, vlan); in iavf_del_vlan()
706 adapter->aq_required |= IAVF_FLAG_AQ_DEL_VLAN_FILTER; in iavf_del_vlan()
709 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_del_vlan()
718 static void iavf_restore_filters(struct iavf_adapter *adapter) in iavf_restore_filters() argument
723 for_each_set_bit(vid, adapter->vsi.active_vlans, VLAN_N_VID) in iavf_restore_filters()
724 iavf_add_vlan(adapter, vid); in iavf_restore_filters()
736 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_vlan_rx_add_vid() local
738 if (!VLAN_ALLOWED(adapter)) in iavf_vlan_rx_add_vid()
741 if (iavf_add_vlan(adapter, vid) == NULL) in iavf_vlan_rx_add_vid()
744 set_bit(vid, adapter->vsi.active_vlans); in iavf_vlan_rx_add_vid()
757 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_vlan_rx_kill_vid() local
759 iavf_del_vlan(adapter, vid); in iavf_vlan_rx_kill_vid()
760 clear_bit(vid, adapter->vsi.active_vlans); in iavf_vlan_rx_kill_vid()
774 iavf_mac_filter *iavf_find_filter(struct iavf_adapter *adapter, in iavf_find_filter() argument
782 list_for_each_entry(f, &adapter->mac_filter_list, list) { in iavf_find_filter()
796 struct iavf_mac_filter *iavf_add_filter(struct iavf_adapter *adapter, in iavf_add_filter() argument
804 f = iavf_find_filter(adapter, macaddr); in iavf_add_filter()
812 list_add_tail(&f->list, &adapter->mac_filter_list); in iavf_add_filter()
815 adapter->aq_required |= IAVF_FLAG_AQ_ADD_MAC_FILTER; in iavf_add_filter()
832 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_set_mac() local
833 struct iavf_hw *hw = &adapter->hw; in iavf_set_mac()
843 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_set_mac()
845 f = iavf_find_filter(adapter, hw->mac.addr); in iavf_set_mac()
848 adapter->aq_required |= IAVF_FLAG_AQ_DEL_MAC_FILTER; in iavf_set_mac()
851 f = iavf_add_filter(adapter, addr->sa_data); in iavf_set_mac()
853 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_set_mac()
872 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_addr_sync() local
874 if (iavf_add_filter(adapter, addr)) in iavf_addr_sync()
890 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_addr_unsync() local
901 f = iavf_find_filter(adapter, addr); in iavf_addr_unsync()
904 adapter->aq_required |= IAVF_FLAG_AQ_DEL_MAC_FILTER; in iavf_addr_unsync()
915 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_set_rx_mode() local
917 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_set_rx_mode()
920 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_set_rx_mode()
923 !(adapter->flags & IAVF_FLAG_PROMISC_ON)) in iavf_set_rx_mode()
924 adapter->aq_required |= IAVF_FLAG_AQ_REQUEST_PROMISC; in iavf_set_rx_mode()
926 adapter->flags & IAVF_FLAG_PROMISC_ON) in iavf_set_rx_mode()
927 adapter->aq_required |= IAVF_FLAG_AQ_RELEASE_PROMISC; in iavf_set_rx_mode()
930 !(adapter->flags & IAVF_FLAG_ALLMULTI_ON)) in iavf_set_rx_mode()
931 adapter->aq_required |= IAVF_FLAG_AQ_REQUEST_ALLMULTI; in iavf_set_rx_mode()
933 adapter->flags & IAVF_FLAG_ALLMULTI_ON) in iavf_set_rx_mode()
934 adapter->aq_required |= IAVF_FLAG_AQ_RELEASE_ALLMULTI; in iavf_set_rx_mode()
941 static void iavf_napi_enable_all(struct iavf_adapter *adapter) in iavf_napi_enable_all() argument
945 int q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_napi_enable_all()
950 q_vector = &adapter->q_vectors[q_idx]; in iavf_napi_enable_all()
960 static void iavf_napi_disable_all(struct iavf_adapter *adapter) in iavf_napi_disable_all() argument
964 int q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_napi_disable_all()
967 q_vector = &adapter->q_vectors[q_idx]; in iavf_napi_disable_all()
976 static void iavf_configure(struct iavf_adapter *adapter) in iavf_configure() argument
978 struct net_device *netdev = adapter->netdev; in iavf_configure()
983 iavf_configure_tx(adapter); in iavf_configure()
984 iavf_configure_rx(adapter); in iavf_configure()
985 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_QUEUES; in iavf_configure()
987 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_configure()
988 struct iavf_ring *ring = &adapter->rx_rings[i]; in iavf_configure()
1000 static void iavf_up_complete(struct iavf_adapter *adapter) in iavf_up_complete() argument
1002 iavf_change_state(adapter, __IAVF_RUNNING); in iavf_up_complete()
1003 clear_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_up_complete()
1005 iavf_napi_enable_all(adapter); in iavf_up_complete()
1007 adapter->aq_required |= IAVF_FLAG_AQ_ENABLE_QUEUES; in iavf_up_complete()
1008 if (CLIENT_ENABLED(adapter)) in iavf_up_complete()
1009 adapter->flags |= IAVF_FLAG_CLIENT_NEEDS_OPEN; in iavf_up_complete()
1010 mod_delayed_work(iavf_wq, &adapter->watchdog_task, 0); in iavf_up_complete()
1019 void iavf_down(struct iavf_adapter *adapter) in iavf_down() argument
1021 struct net_device *netdev = adapter->netdev; in iavf_down()
1028 if (adapter->state <= __IAVF_DOWN_PENDING) in iavf_down()
1033 adapter->link_up = false; in iavf_down()
1034 iavf_napi_disable_all(adapter); in iavf_down()
1035 iavf_irq_disable(adapter); in iavf_down()
1037 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_down()
1040 __dev_uc_unsync(adapter->netdev, NULL); in iavf_down()
1041 __dev_mc_unsync(adapter->netdev, NULL); in iavf_down()
1044 list_for_each_entry(f, &adapter->mac_filter_list, list) { in iavf_down()
1049 list_for_each_entry(vlf, &adapter->vlan_filter_list, list) { in iavf_down()
1053 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_down()
1056 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_down()
1057 list_for_each_entry(cf, &adapter->cloud_filter_list, list) { in iavf_down()
1060 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_down()
1063 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_down()
1064 list_for_each_entry(fdir, &adapter->fdir_list_head, list) { in iavf_down()
1067 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_down()
1070 spin_lock_bh(&adapter->adv_rss_lock); in iavf_down()
1071 list_for_each_entry(rss, &adapter->adv_rss_list_head, list) in iavf_down()
1073 spin_unlock_bh(&adapter->adv_rss_lock); in iavf_down()
1075 if (!(adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) && in iavf_down()
1076 adapter->state != __IAVF_RESETTING) { in iavf_down()
1078 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_down()
1083 adapter->aq_required = IAVF_FLAG_AQ_DEL_MAC_FILTER; in iavf_down()
1084 adapter->aq_required |= IAVF_FLAG_AQ_DEL_VLAN_FILTER; in iavf_down()
1085 adapter->aq_required |= IAVF_FLAG_AQ_DEL_CLOUD_FILTER; in iavf_down()
1086 adapter->aq_required |= IAVF_FLAG_AQ_DEL_FDIR_FILTER; in iavf_down()
1087 adapter->aq_required |= IAVF_FLAG_AQ_DEL_ADV_RSS_CFG; in iavf_down()
1088 adapter->aq_required |= IAVF_FLAG_AQ_DISABLE_QUEUES; in iavf_down()
1091 mod_delayed_work(iavf_wq, &adapter->watchdog_task, 0); in iavf_down()
1104 iavf_acquire_msix_vectors(struct iavf_adapter *adapter, int vectors) in iavf_acquire_msix_vectors() argument
1120 err = pci_enable_msix_range(adapter->pdev, adapter->msix_entries, in iavf_acquire_msix_vectors()
1123 dev_err(&adapter->pdev->dev, "Unable to allocate MSI-X interrupts\n"); in iavf_acquire_msix_vectors()
1124 kfree(adapter->msix_entries); in iavf_acquire_msix_vectors()
1125 adapter->msix_entries = NULL; in iavf_acquire_msix_vectors()
1133 adapter->num_msix_vectors = err; in iavf_acquire_msix_vectors()
1143 static void iavf_free_queues(struct iavf_adapter *adapter) in iavf_free_queues() argument
1145 if (!adapter->vsi_res) in iavf_free_queues()
1147 adapter->num_active_queues = 0; in iavf_free_queues()
1148 kfree(adapter->tx_rings); in iavf_free_queues()
1149 adapter->tx_rings = NULL; in iavf_free_queues()
1150 kfree(adapter->rx_rings); in iavf_free_queues()
1151 adapter->rx_rings = NULL; in iavf_free_queues()
1162 static int iavf_alloc_queues(struct iavf_adapter *adapter) in iavf_alloc_queues() argument
1171 if (adapter->num_req_queues) in iavf_alloc_queues()
1172 num_active_queues = adapter->num_req_queues; in iavf_alloc_queues()
1173 else if ((adapter->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_ADQ) && in iavf_alloc_queues()
1174 adapter->num_tc) in iavf_alloc_queues()
1175 num_active_queues = adapter->ch_config.total_qps; in iavf_alloc_queues()
1178 adapter->vsi_res->num_queue_pairs, in iavf_alloc_queues()
1182 adapter->tx_rings = kcalloc(num_active_queues, in iavf_alloc_queues()
1184 if (!adapter->tx_rings) in iavf_alloc_queues()
1186 adapter->rx_rings = kcalloc(num_active_queues, in iavf_alloc_queues()
1188 if (!adapter->rx_rings) in iavf_alloc_queues()
1195 tx_ring = &adapter->tx_rings[i]; in iavf_alloc_queues()
1198 tx_ring->netdev = adapter->netdev; in iavf_alloc_queues()
1199 tx_ring->dev = &adapter->pdev->dev; in iavf_alloc_queues()
1200 tx_ring->count = adapter->tx_desc_count; in iavf_alloc_queues()
1202 if (adapter->flags & IAVF_FLAG_WB_ON_ITR_CAPABLE) in iavf_alloc_queues()
1205 rx_ring = &adapter->rx_rings[i]; in iavf_alloc_queues()
1207 rx_ring->netdev = adapter->netdev; in iavf_alloc_queues()
1208 rx_ring->dev = &adapter->pdev->dev; in iavf_alloc_queues()
1209 rx_ring->count = adapter->rx_desc_count; in iavf_alloc_queues()
1213 adapter->num_active_queues = num_active_queues; in iavf_alloc_queues()
1218 iavf_free_queues(adapter); in iavf_alloc_queues()
1229 static int iavf_set_interrupt_capability(struct iavf_adapter *adapter) in iavf_set_interrupt_capability() argument
1235 if (!adapter->vsi_res) { in iavf_set_interrupt_capability()
1239 pairs = adapter->num_active_queues; in iavf_set_interrupt_capability()
1247 (int)adapter->vf_res->max_vectors); in iavf_set_interrupt_capability()
1249 adapter->msix_entries = kcalloc(v_budget, in iavf_set_interrupt_capability()
1251 if (!adapter->msix_entries) { in iavf_set_interrupt_capability()
1257 adapter->msix_entries[vector].entry = vector; in iavf_set_interrupt_capability()
1259 err = iavf_acquire_msix_vectors(adapter, v_budget); in iavf_set_interrupt_capability()
1262 netif_set_real_num_rx_queues(adapter->netdev, pairs); in iavf_set_interrupt_capability()
1263 netif_set_real_num_tx_queues(adapter->netdev, pairs); in iavf_set_interrupt_capability()
1273 static int iavf_config_rss_aq(struct iavf_adapter *adapter) in iavf_config_rss_aq() argument
1276 (struct iavf_aqc_get_set_rss_key_data *)adapter->rss_key; in iavf_config_rss_aq()
1277 struct iavf_hw *hw = &adapter->hw; in iavf_config_rss_aq()
1280 if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) { in iavf_config_rss_aq()
1282 dev_err(&adapter->pdev->dev, "Cannot configure RSS, command %d pending\n", in iavf_config_rss_aq()
1283 adapter->current_op); in iavf_config_rss_aq()
1287 ret = iavf_aq_set_rss_key(hw, adapter->vsi.id, rss_key); in iavf_config_rss_aq()
1289 dev_err(&adapter->pdev->dev, "Cannot set RSS key, err %s aq_err %s\n", in iavf_config_rss_aq()
1296 ret = iavf_aq_set_rss_lut(hw, adapter->vsi.id, false, in iavf_config_rss_aq()
1297 adapter->rss_lut, adapter->rss_lut_size); in iavf_config_rss_aq()
1299 dev_err(&adapter->pdev->dev, "Cannot set RSS lut, err %s aq_err %s\n", in iavf_config_rss_aq()
1314 static int iavf_config_rss_reg(struct iavf_adapter *adapter) in iavf_config_rss_reg() argument
1316 struct iavf_hw *hw = &adapter->hw; in iavf_config_rss_reg()
1320 dw = (u32 *)adapter->rss_key; in iavf_config_rss_reg()
1321 for (i = 0; i <= adapter->rss_key_size / 4; i++) in iavf_config_rss_reg()
1324 dw = (u32 *)adapter->rss_lut; in iavf_config_rss_reg()
1325 for (i = 0; i <= adapter->rss_lut_size / 4; i++) in iavf_config_rss_reg()
1339 int iavf_config_rss(struct iavf_adapter *adapter) in iavf_config_rss() argument
1342 if (RSS_PF(adapter)) { in iavf_config_rss()
1343 adapter->aq_required |= IAVF_FLAG_AQ_SET_RSS_LUT | in iavf_config_rss()
1346 } else if (RSS_AQ(adapter)) { in iavf_config_rss()
1347 return iavf_config_rss_aq(adapter); in iavf_config_rss()
1349 return iavf_config_rss_reg(adapter); in iavf_config_rss()
1357 static void iavf_fill_rss_lut(struct iavf_adapter *adapter) in iavf_fill_rss_lut() argument
1361 for (i = 0; i < adapter->rss_lut_size; i++) in iavf_fill_rss_lut()
1362 adapter->rss_lut[i] = i % adapter->num_active_queues; in iavf_fill_rss_lut()
1371 static int iavf_init_rss(struct iavf_adapter *adapter) in iavf_init_rss() argument
1373 struct iavf_hw *hw = &adapter->hw; in iavf_init_rss()
1376 if (!RSS_PF(adapter)) { in iavf_init_rss()
1378 if (adapter->vf_res->vf_cap_flags & in iavf_init_rss()
1380 adapter->hena = IAVF_DEFAULT_RSS_HENA_EXPANDED; in iavf_init_rss()
1382 adapter->hena = IAVF_DEFAULT_RSS_HENA; in iavf_init_rss()
1384 wr32(hw, IAVF_VFQF_HENA(0), (u32)adapter->hena); in iavf_init_rss()
1385 wr32(hw, IAVF_VFQF_HENA(1), (u32)(adapter->hena >> 32)); in iavf_init_rss()
1388 iavf_fill_rss_lut(adapter); in iavf_init_rss()
1389 netdev_rss_key_fill((void *)adapter->rss_key, adapter->rss_key_size); in iavf_init_rss()
1390 ret = iavf_config_rss(adapter); in iavf_init_rss()
1402 static int iavf_alloc_q_vectors(struct iavf_adapter *adapter) in iavf_alloc_q_vectors() argument
1407 num_q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_alloc_q_vectors()
1408 adapter->q_vectors = kcalloc(num_q_vectors, sizeof(*q_vector), in iavf_alloc_q_vectors()
1410 if (!adapter->q_vectors) in iavf_alloc_q_vectors()
1414 q_vector = &adapter->q_vectors[q_idx]; in iavf_alloc_q_vectors()
1415 q_vector->adapter = adapter; in iavf_alloc_q_vectors()
1416 q_vector->vsi = &adapter->vsi; in iavf_alloc_q_vectors()
1420 netif_napi_add(adapter->netdev, &q_vector->napi, in iavf_alloc_q_vectors()
1435 static void iavf_free_q_vectors(struct iavf_adapter *adapter) in iavf_free_q_vectors() argument
1440 if (!adapter->q_vectors) in iavf_free_q_vectors()
1443 num_q_vectors = adapter->num_msix_vectors - NONQ_VECS; in iavf_free_q_vectors()
1444 napi_vectors = adapter->num_active_queues; in iavf_free_q_vectors()
1447 struct iavf_q_vector *q_vector = &adapter->q_vectors[q_idx]; in iavf_free_q_vectors()
1452 kfree(adapter->q_vectors); in iavf_free_q_vectors()
1453 adapter->q_vectors = NULL; in iavf_free_q_vectors()
1461 void iavf_reset_interrupt_capability(struct iavf_adapter *adapter) in iavf_reset_interrupt_capability() argument
1463 if (!adapter->msix_entries) in iavf_reset_interrupt_capability()
1466 pci_disable_msix(adapter->pdev); in iavf_reset_interrupt_capability()
1467 kfree(adapter->msix_entries); in iavf_reset_interrupt_capability()
1468 adapter->msix_entries = NULL; in iavf_reset_interrupt_capability()
1476 int iavf_init_interrupt_scheme(struct iavf_adapter *adapter) in iavf_init_interrupt_scheme() argument
1480 err = iavf_alloc_queues(adapter); in iavf_init_interrupt_scheme()
1482 dev_err(&adapter->pdev->dev, in iavf_init_interrupt_scheme()
1488 err = iavf_set_interrupt_capability(adapter); in iavf_init_interrupt_scheme()
1491 dev_err(&adapter->pdev->dev, in iavf_init_interrupt_scheme()
1496 err = iavf_alloc_q_vectors(adapter); in iavf_init_interrupt_scheme()
1498 dev_err(&adapter->pdev->dev, in iavf_init_interrupt_scheme()
1508 if ((adapter->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_ADQ) && in iavf_init_interrupt_scheme()
1509 adapter->num_tc) in iavf_init_interrupt_scheme()
1510 dev_info(&adapter->pdev->dev, "ADq Enabled, %u TCs created", in iavf_init_interrupt_scheme()
1511 adapter->num_tc); in iavf_init_interrupt_scheme()
1513 dev_info(&adapter->pdev->dev, "Multiqueue %s: Queue pair count = %u", in iavf_init_interrupt_scheme()
1514 (adapter->num_active_queues > 1) ? "Enabled" : "Disabled", in iavf_init_interrupt_scheme()
1515 adapter->num_active_queues); in iavf_init_interrupt_scheme()
1519 iavf_reset_interrupt_capability(adapter); in iavf_init_interrupt_scheme()
1521 iavf_free_queues(adapter); in iavf_init_interrupt_scheme()
1530 static void iavf_free_rss(struct iavf_adapter *adapter) in iavf_free_rss() argument
1532 kfree(adapter->rss_key); in iavf_free_rss()
1533 adapter->rss_key = NULL; in iavf_free_rss()
1535 kfree(adapter->rss_lut); in iavf_free_rss()
1536 adapter->rss_lut = NULL; in iavf_free_rss()
1545 static int iavf_reinit_interrupt_scheme(struct iavf_adapter *adapter) in iavf_reinit_interrupt_scheme() argument
1547 struct net_device *netdev = adapter->netdev; in iavf_reinit_interrupt_scheme()
1551 iavf_free_traffic_irqs(adapter); in iavf_reinit_interrupt_scheme()
1552 iavf_free_misc_irq(adapter); in iavf_reinit_interrupt_scheme()
1553 iavf_reset_interrupt_capability(adapter); in iavf_reinit_interrupt_scheme()
1554 iavf_free_q_vectors(adapter); in iavf_reinit_interrupt_scheme()
1555 iavf_free_queues(adapter); in iavf_reinit_interrupt_scheme()
1557 err = iavf_init_interrupt_scheme(adapter); in iavf_reinit_interrupt_scheme()
1563 err = iavf_request_misc_irq(adapter); in iavf_reinit_interrupt_scheme()
1567 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_reinit_interrupt_scheme()
1569 iavf_map_rings_to_vectors(adapter); in iavf_reinit_interrupt_scheme()
1583 static int iavf_process_aq_command(struct iavf_adapter *adapter) in iavf_process_aq_command() argument
1585 if (adapter->aq_required & IAVF_FLAG_AQ_GET_CONFIG) in iavf_process_aq_command()
1586 return iavf_send_vf_config_msg(adapter); in iavf_process_aq_command()
1587 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_QUEUES) { in iavf_process_aq_command()
1588 iavf_disable_queues(adapter); in iavf_process_aq_command()
1592 if (adapter->aq_required & IAVF_FLAG_AQ_MAP_VECTORS) { in iavf_process_aq_command()
1593 iavf_map_queues(adapter); in iavf_process_aq_command()
1597 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_MAC_FILTER) { in iavf_process_aq_command()
1598 iavf_add_ether_addrs(adapter); in iavf_process_aq_command()
1602 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_VLAN_FILTER) { in iavf_process_aq_command()
1603 iavf_add_vlans(adapter); in iavf_process_aq_command()
1607 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_MAC_FILTER) { in iavf_process_aq_command()
1608 iavf_del_ether_addrs(adapter); in iavf_process_aq_command()
1612 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_VLAN_FILTER) { in iavf_process_aq_command()
1613 iavf_del_vlans(adapter); in iavf_process_aq_command()
1617 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_VLAN_STRIPPING) { in iavf_process_aq_command()
1618 iavf_enable_vlan_stripping(adapter); in iavf_process_aq_command()
1622 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_VLAN_STRIPPING) { in iavf_process_aq_command()
1623 iavf_disable_vlan_stripping(adapter); in iavf_process_aq_command()
1627 if (adapter->aq_required & IAVF_FLAG_AQ_CONFIGURE_QUEUES) { in iavf_process_aq_command()
1628 iavf_configure_queues(adapter); in iavf_process_aq_command()
1632 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_QUEUES) { in iavf_process_aq_command()
1633 iavf_enable_queues(adapter); in iavf_process_aq_command()
1637 if (adapter->aq_required & IAVF_FLAG_AQ_CONFIGURE_RSS) { in iavf_process_aq_command()
1642 adapter->aq_required &= ~IAVF_FLAG_AQ_CONFIGURE_RSS; in iavf_process_aq_command()
1645 if (adapter->aq_required & IAVF_FLAG_AQ_GET_HENA) { in iavf_process_aq_command()
1646 iavf_get_hena(adapter); in iavf_process_aq_command()
1649 if (adapter->aq_required & IAVF_FLAG_AQ_SET_HENA) { in iavf_process_aq_command()
1650 iavf_set_hena(adapter); in iavf_process_aq_command()
1653 if (adapter->aq_required & IAVF_FLAG_AQ_SET_RSS_KEY) { in iavf_process_aq_command()
1654 iavf_set_rss_key(adapter); in iavf_process_aq_command()
1657 if (adapter->aq_required & IAVF_FLAG_AQ_SET_RSS_LUT) { in iavf_process_aq_command()
1658 iavf_set_rss_lut(adapter); in iavf_process_aq_command()
1662 if (adapter->aq_required & IAVF_FLAG_AQ_REQUEST_PROMISC) { in iavf_process_aq_command()
1663 iavf_set_promiscuous(adapter, FLAG_VF_UNICAST_PROMISC | in iavf_process_aq_command()
1668 if (adapter->aq_required & IAVF_FLAG_AQ_REQUEST_ALLMULTI) { in iavf_process_aq_command()
1669 iavf_set_promiscuous(adapter, FLAG_VF_MULTICAST_PROMISC); in iavf_process_aq_command()
1672 if ((adapter->aq_required & IAVF_FLAG_AQ_RELEASE_PROMISC) || in iavf_process_aq_command()
1673 (adapter->aq_required & IAVF_FLAG_AQ_RELEASE_ALLMULTI)) { in iavf_process_aq_command()
1674 iavf_set_promiscuous(adapter, 0); in iavf_process_aq_command()
1678 if (adapter->aq_required & IAVF_FLAG_AQ_ENABLE_CHANNELS) { in iavf_process_aq_command()
1679 iavf_enable_channels(adapter); in iavf_process_aq_command()
1683 if (adapter->aq_required & IAVF_FLAG_AQ_DISABLE_CHANNELS) { in iavf_process_aq_command()
1684 iavf_disable_channels(adapter); in iavf_process_aq_command()
1687 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_CLOUD_FILTER) { in iavf_process_aq_command()
1688 iavf_add_cloud_filter(adapter); in iavf_process_aq_command()
1692 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_CLOUD_FILTER) { in iavf_process_aq_command()
1693 iavf_del_cloud_filter(adapter); in iavf_process_aq_command()
1696 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_CLOUD_FILTER) { in iavf_process_aq_command()
1697 iavf_del_cloud_filter(adapter); in iavf_process_aq_command()
1700 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_CLOUD_FILTER) { in iavf_process_aq_command()
1701 iavf_add_cloud_filter(adapter); in iavf_process_aq_command()
1704 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_FDIR_FILTER) { in iavf_process_aq_command()
1705 iavf_add_fdir_filter(adapter); in iavf_process_aq_command()
1708 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_FDIR_FILTER) { in iavf_process_aq_command()
1709 iavf_del_fdir_filter(adapter); in iavf_process_aq_command()
1712 if (adapter->aq_required & IAVF_FLAG_AQ_ADD_ADV_RSS_CFG) { in iavf_process_aq_command()
1713 iavf_add_adv_rss_cfg(adapter); in iavf_process_aq_command()
1716 if (adapter->aq_required & IAVF_FLAG_AQ_DEL_ADV_RSS_CFG) { in iavf_process_aq_command()
1717 iavf_del_adv_rss_cfg(adapter); in iavf_process_aq_command()
1720 if (adapter->aq_required & IAVF_FLAG_AQ_REQUEST_STATS) { in iavf_process_aq_command()
1721 iavf_request_stats(adapter); in iavf_process_aq_command()
1736 static void iavf_startup(struct iavf_adapter *adapter) in iavf_startup() argument
1738 struct pci_dev *pdev = adapter->pdev; in iavf_startup()
1739 struct iavf_hw *hw = &adapter->hw; in iavf_startup()
1742 WARN_ON(adapter->state != __IAVF_STARTUP); in iavf_startup()
1745 adapter->flags &= ~IAVF_FLAG_PF_COMMS_FAILED; in iavf_startup()
1746 adapter->flags &= ~IAVF_FLAG_RESET_PENDING; in iavf_startup()
1769 err = iavf_send_api_ver(adapter); in iavf_startup()
1775 iavf_change_state(adapter, __IAVF_INIT_VERSION_CHECK); in iavf_startup()
1778 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_startup()
1789 static void iavf_init_version_check(struct iavf_adapter *adapter) in iavf_init_version_check() argument
1791 struct pci_dev *pdev = adapter->pdev; in iavf_init_version_check()
1792 struct iavf_hw *hw = &adapter->hw; in iavf_init_version_check()
1795 WARN_ON(adapter->state != __IAVF_INIT_VERSION_CHECK); in iavf_init_version_check()
1800 iavf_change_state(adapter, __IAVF_STARTUP); in iavf_init_version_check()
1805 err = iavf_verify_api_ver(adapter); in iavf_init_version_check()
1808 err = iavf_send_api_ver(adapter); in iavf_init_version_check()
1811 adapter->pf_version.major, in iavf_init_version_check()
1812 adapter->pf_version.minor, in iavf_init_version_check()
1817 err = iavf_send_vf_config_msg(adapter); in iavf_init_version_check()
1823 iavf_change_state(adapter, __IAVF_INIT_GET_RESOURCES); in iavf_init_version_check()
1826 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_init_version_check()
1838 static void iavf_init_get_resources(struct iavf_adapter *adapter) in iavf_init_get_resources() argument
1840 struct net_device *netdev = adapter->netdev; in iavf_init_get_resources()
1841 struct pci_dev *pdev = adapter->pdev; in iavf_init_get_resources()
1842 struct iavf_hw *hw = &adapter->hw; in iavf_init_get_resources()
1845 WARN_ON(adapter->state != __IAVF_INIT_GET_RESOURCES); in iavf_init_get_resources()
1847 if (!adapter->vf_res) { in iavf_init_get_resources()
1848 adapter->vf_res = kzalloc(IAVF_VIRTCHNL_VF_RESOURCE_SIZE, in iavf_init_get_resources()
1850 if (!adapter->vf_res) { in iavf_init_get_resources()
1855 err = iavf_get_vf_config(adapter); in iavf_init_get_resources()
1857 err = iavf_send_vf_config_msg(adapter); in iavf_init_get_resources()
1873 err = iavf_process_config(adapter); in iavf_init_get_resources()
1876 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_init_get_resources()
1878 adapter->flags |= IAVF_FLAG_RX_CSUM_ENABLED; in iavf_init_get_resources()
1888 if (!is_valid_ether_addr(adapter->hw.mac.addr)) { in iavf_init_get_resources()
1890 adapter->hw.mac.addr); in iavf_init_get_resources()
1892 ether_addr_copy(adapter->hw.mac.addr, netdev->dev_addr); in iavf_init_get_resources()
1894 eth_hw_addr_set(netdev, adapter->hw.mac.addr); in iavf_init_get_resources()
1895 ether_addr_copy(netdev->perm_addr, adapter->hw.mac.addr); in iavf_init_get_resources()
1898 adapter->tx_desc_count = IAVF_DEFAULT_TXD; in iavf_init_get_resources()
1899 adapter->rx_desc_count = IAVF_DEFAULT_RXD; in iavf_init_get_resources()
1900 err = iavf_init_interrupt_scheme(adapter); in iavf_init_get_resources()
1903 iavf_map_rings_to_vectors(adapter); in iavf_init_get_resources()
1904 if (adapter->vf_res->vf_cap_flags & in iavf_init_get_resources()
1906 adapter->flags |= IAVF_FLAG_WB_ON_ITR_CAPABLE; in iavf_init_get_resources()
1908 err = iavf_request_misc_irq(adapter); in iavf_init_get_resources()
1913 adapter->link_up = false; in iavf_init_get_resources()
1919 if (!adapter->netdev_registered) { in iavf_init_get_resources()
1927 adapter->netdev_registered = true; in iavf_init_get_resources()
1930 if (CLIENT_ALLOWED(adapter)) { in iavf_init_get_resources()
1931 err = iavf_lan_add_device(adapter); in iavf_init_get_resources()
1936 dev_info(&pdev->dev, "MAC address: %pM\n", adapter->hw.mac.addr); in iavf_init_get_resources()
1940 iavf_change_state(adapter, __IAVF_DOWN); in iavf_init_get_resources()
1941 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_init_get_resources()
1944 iavf_misc_irq_enable(adapter); in iavf_init_get_resources()
1945 wake_up(&adapter->down_waitqueue); in iavf_init_get_resources()
1947 adapter->rss_key = kzalloc(adapter->rss_key_size, GFP_KERNEL); in iavf_init_get_resources()
1948 adapter->rss_lut = kzalloc(adapter->rss_lut_size, GFP_KERNEL); in iavf_init_get_resources()
1949 if (!adapter->rss_key || !adapter->rss_lut) { in iavf_init_get_resources()
1953 if (RSS_AQ(adapter)) in iavf_init_get_resources()
1954 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_RSS; in iavf_init_get_resources()
1956 iavf_init_rss(adapter); in iavf_init_get_resources()
1960 iavf_free_rss(adapter); in iavf_init_get_resources()
1962 iavf_free_misc_irq(adapter); in iavf_init_get_resources()
1964 iavf_reset_interrupt_capability(adapter); in iavf_init_get_resources()
1966 kfree(adapter->vf_res); in iavf_init_get_resources()
1967 adapter->vf_res = NULL; in iavf_init_get_resources()
1969 iavf_change_state(adapter, __IAVF_INIT_FAILED); in iavf_init_get_resources()
1978 struct iavf_adapter *adapter = container_of(work, in iavf_watchdog_task() local
1981 struct iavf_hw *hw = &adapter->hw; in iavf_watchdog_task()
1984 if (!mutex_trylock(&adapter->crit_lock)) in iavf_watchdog_task()
1987 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) in iavf_watchdog_task()
1988 iavf_change_state(adapter, __IAVF_COMM_FAILED); in iavf_watchdog_task()
1990 if (adapter->flags & IAVF_FLAG_RESET_NEEDED && in iavf_watchdog_task()
1991 adapter->state != __IAVF_RESETTING) { in iavf_watchdog_task()
1992 iavf_change_state(adapter, __IAVF_RESETTING); in iavf_watchdog_task()
1993 adapter->aq_required = 0; in iavf_watchdog_task()
1994 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_watchdog_task()
1997 switch (adapter->state) { in iavf_watchdog_task()
1999 iavf_startup(adapter); in iavf_watchdog_task()
2000 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2001 queue_delayed_work(iavf_wq, &adapter->watchdog_task, in iavf_watchdog_task()
2005 iavf_init_version_check(adapter); in iavf_watchdog_task()
2006 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2007 queue_delayed_work(iavf_wq, &adapter->watchdog_task, in iavf_watchdog_task()
2011 iavf_init_get_resources(adapter); in iavf_watchdog_task()
2012 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2013 queue_delayed_work(iavf_wq, &adapter->watchdog_task, in iavf_watchdog_task()
2017 if (++adapter->aq_wait_count > IAVF_AQ_MAX_ERR) { in iavf_watchdog_task()
2018 dev_err(&adapter->pdev->dev, in iavf_watchdog_task()
2020 adapter->flags |= IAVF_FLAG_PF_COMMS_FAILED; in iavf_watchdog_task()
2022 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2024 &adapter->watchdog_task, (5 * HZ)); in iavf_watchdog_task()
2028 iavf_change_state(adapter, adapter->last_state); in iavf_watchdog_task()
2029 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2030 queue_delayed_work(iavf_wq, &adapter->watchdog_task, HZ); in iavf_watchdog_task()
2038 dev_err(&adapter->pdev->dev, in iavf_watchdog_task()
2044 iavf_change_state(adapter, __IAVF_STARTUP); in iavf_watchdog_task()
2045 adapter->flags &= ~IAVF_FLAG_PF_COMMS_FAILED; in iavf_watchdog_task()
2047 adapter->aq_required = 0; in iavf_watchdog_task()
2048 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_watchdog_task()
2049 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2051 &adapter->watchdog_task, in iavf_watchdog_task()
2055 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2056 queue_delayed_work(iavf_wq, &adapter->watchdog_task, HZ * 2); in iavf_watchdog_task()
2062 if (adapter->current_op) { in iavf_watchdog_task()
2064 dev_dbg(&adapter->pdev->dev, in iavf_watchdog_task()
2066 iavf_send_api_ver(adapter); in iavf_watchdog_task()
2072 if (iavf_process_aq_command(adapter) && in iavf_watchdog_task()
2073 adapter->state == __IAVF_RUNNING) in iavf_watchdog_task()
2074 iavf_request_stats(adapter); in iavf_watchdog_task()
2076 if (adapter->state == __IAVF_RUNNING) in iavf_watchdog_task()
2077 iavf_detect_recover_hung(&adapter->vsi); in iavf_watchdog_task()
2081 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2088 adapter->flags |= IAVF_FLAG_RESET_PENDING; in iavf_watchdog_task()
2089 adapter->aq_required = 0; in iavf_watchdog_task()
2090 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_watchdog_task()
2091 dev_err(&adapter->pdev->dev, "Hardware reset detected\n"); in iavf_watchdog_task()
2092 queue_work(iavf_wq, &adapter->reset_task); in iavf_watchdog_task()
2093 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2095 &adapter->watchdog_task, HZ * 2); in iavf_watchdog_task()
2099 schedule_delayed_work(&adapter->client_task, msecs_to_jiffies(5)); in iavf_watchdog_task()
2100 mutex_unlock(&adapter->crit_lock); in iavf_watchdog_task()
2102 queue_work(iavf_wq, &adapter->adminq_task); in iavf_watchdog_task()
2103 if (adapter->aq_required) in iavf_watchdog_task()
2104 queue_delayed_work(iavf_wq, &adapter->watchdog_task, in iavf_watchdog_task()
2107 queue_delayed_work(iavf_wq, &adapter->watchdog_task, HZ * 2); in iavf_watchdog_task()
2110 static void iavf_disable_vf(struct iavf_adapter *adapter) in iavf_disable_vf() argument
2116 adapter->flags |= IAVF_FLAG_PF_COMMS_FAILED; in iavf_disable_vf()
2122 if (adapter->state == __IAVF_RUNNING) { in iavf_disable_vf()
2123 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_disable_vf()
2124 netif_carrier_off(adapter->netdev); in iavf_disable_vf()
2125 netif_tx_disable(adapter->netdev); in iavf_disable_vf()
2126 adapter->link_up = false; in iavf_disable_vf()
2127 iavf_napi_disable_all(adapter); in iavf_disable_vf()
2128 iavf_irq_disable(adapter); in iavf_disable_vf()
2129 iavf_free_traffic_irqs(adapter); in iavf_disable_vf()
2130 iavf_free_all_tx_resources(adapter); in iavf_disable_vf()
2131 iavf_free_all_rx_resources(adapter); in iavf_disable_vf()
2134 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_disable_vf()
2137 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_disable_vf()
2142 list_for_each_entry_safe(fv, fvtmp, &adapter->vlan_filter_list, list) { in iavf_disable_vf()
2147 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_disable_vf()
2149 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_disable_vf()
2150 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, list) { in iavf_disable_vf()
2153 adapter->num_cloud_filters--; in iavf_disable_vf()
2155 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_disable_vf()
2157 iavf_free_misc_irq(adapter); in iavf_disable_vf()
2158 iavf_reset_interrupt_capability(adapter); in iavf_disable_vf()
2159 iavf_free_q_vectors(adapter); in iavf_disable_vf()
2160 iavf_free_queues(adapter); in iavf_disable_vf()
2161 memset(adapter->vf_res, 0, IAVF_VIRTCHNL_VF_RESOURCE_SIZE); in iavf_disable_vf()
2162 iavf_shutdown_adminq(&adapter->hw); in iavf_disable_vf()
2163 adapter->netdev->flags &= ~IFF_UP; in iavf_disable_vf()
2164 mutex_unlock(&adapter->crit_lock); in iavf_disable_vf()
2165 adapter->flags &= ~IAVF_FLAG_RESET_PENDING; in iavf_disable_vf()
2166 iavf_change_state(adapter, __IAVF_DOWN); in iavf_disable_vf()
2167 wake_up(&adapter->down_waitqueue); in iavf_disable_vf()
2168 dev_info(&adapter->pdev->dev, "Reset task did not complete, VF disabled\n"); in iavf_disable_vf()
2181 struct iavf_adapter *adapter = container_of(work, in iavf_reset_task() local
2184 struct virtchnl_vf_resource *vfres = adapter->vf_res; in iavf_reset_task()
2185 struct net_device *netdev = adapter->netdev; in iavf_reset_task()
2186 struct iavf_hw *hw = &adapter->hw; in iavf_reset_task()
2196 if (mutex_is_locked(&adapter->remove_lock)) in iavf_reset_task()
2199 if (iavf_lock_timeout(&adapter->crit_lock, 200)) { in iavf_reset_task()
2200 schedule_work(&adapter->reset_task); in iavf_reset_task()
2203 while (!mutex_trylock(&adapter->client_lock)) in iavf_reset_task()
2205 if (CLIENT_ENABLED(adapter)) { in iavf_reset_task()
2206 adapter->flags &= ~(IAVF_FLAG_CLIENT_NEEDS_OPEN | in iavf_reset_task()
2210 cancel_delayed_work_sync(&adapter->client_task); in iavf_reset_task()
2211 iavf_notify_client_close(&adapter->vsi, true); in iavf_reset_task()
2213 iavf_misc_irq_disable(adapter); in iavf_reset_task()
2214 if (adapter->flags & IAVF_FLAG_RESET_NEEDED) { in iavf_reset_task()
2215 adapter->flags &= ~IAVF_FLAG_RESET_NEEDED; in iavf_reset_task()
2221 iavf_request_reset(adapter); in iavf_reset_task()
2223 adapter->flags |= IAVF_FLAG_RESET_PENDING; in iavf_reset_task()
2234 dev_info(&adapter->pdev->dev, "Never saw reset\n"); in iavf_reset_task()
2249 pci_set_master(adapter->pdev); in iavf_reset_task()
2250 pci_restore_msi_state(adapter->pdev); in iavf_reset_task()
2253 dev_err(&adapter->pdev->dev, "Reset never finished (%x)\n", in iavf_reset_task()
2255 iavf_disable_vf(adapter); in iavf_reset_task()
2256 mutex_unlock(&adapter->client_lock); in iavf_reset_task()
2265 running = ((adapter->state == __IAVF_RUNNING) || in iavf_reset_task()
2266 (adapter->state == __IAVF_RESETTING)); in iavf_reset_task()
2272 adapter->link_up = false; in iavf_reset_task()
2273 iavf_napi_disable_all(adapter); in iavf_reset_task()
2275 iavf_irq_disable(adapter); in iavf_reset_task()
2277 iavf_change_state(adapter, __IAVF_RESETTING); in iavf_reset_task()
2278 adapter->flags &= ~IAVF_FLAG_RESET_PENDING; in iavf_reset_task()
2283 iavf_free_all_rx_resources(adapter); in iavf_reset_task()
2284 iavf_free_all_tx_resources(adapter); in iavf_reset_task()
2286 adapter->flags |= IAVF_FLAG_QUEUES_DISABLED; in iavf_reset_task()
2289 adapter->current_op = VIRTCHNL_OP_UNKNOWN; in iavf_reset_task()
2292 dev_info(&adapter->pdev->dev, "Failed to init adminq: %d\n", in iavf_reset_task()
2294 adapter->aq_required = 0; in iavf_reset_task()
2296 if (adapter->flags & IAVF_FLAG_REINIT_ITR_NEEDED) { in iavf_reset_task()
2297 err = iavf_reinit_interrupt_scheme(adapter); in iavf_reset_task()
2302 if (RSS_AQ(adapter)) { in iavf_reset_task()
2303 adapter->aq_required |= IAVF_FLAG_AQ_CONFIGURE_RSS; in iavf_reset_task()
2305 err = iavf_init_rss(adapter); in iavf_reset_task()
2310 adapter->aq_required |= IAVF_FLAG_AQ_GET_CONFIG; in iavf_reset_task()
2311 adapter->aq_required |= IAVF_FLAG_AQ_MAP_VECTORS; in iavf_reset_task()
2313 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_reset_task()
2319 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_reset_task()
2320 if (ether_addr_equal(f->macaddr, adapter->hw.mac.addr)) { in iavf_reset_task()
2326 list_for_each_entry(f, &adapter->mac_filter_list, list) { in iavf_reset_task()
2329 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_reset_task()
2332 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_reset_task()
2334 adapter->num_tc) { in iavf_reset_task()
2335 list_for_each_entry(cf, &adapter->cloud_filter_list, list) { in iavf_reset_task()
2339 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_reset_task()
2341 adapter->aq_required |= IAVF_FLAG_AQ_ADD_MAC_FILTER; in iavf_reset_task()
2342 adapter->aq_required |= IAVF_FLAG_AQ_ADD_CLOUD_FILTER; in iavf_reset_task()
2343 iavf_misc_irq_enable(adapter); in iavf_reset_task()
2345 mod_delayed_work(iavf_wq, &adapter->watchdog_task, 2); in iavf_reset_task()
2352 err = iavf_setup_all_tx_resources(adapter); in iavf_reset_task()
2357 err = iavf_setup_all_rx_resources(adapter); in iavf_reset_task()
2361 if (adapter->flags & IAVF_FLAG_REINIT_ITR_NEEDED) { in iavf_reset_task()
2362 err = iavf_request_traffic_irqs(adapter, netdev->name); in iavf_reset_task()
2366 adapter->flags &= ~IAVF_FLAG_REINIT_ITR_NEEDED; in iavf_reset_task()
2369 iavf_configure(adapter); in iavf_reset_task()
2374 iavf_up_complete(adapter); in iavf_reset_task()
2376 iavf_irq_enable(adapter, true); in iavf_reset_task()
2378 iavf_change_state(adapter, __IAVF_DOWN); in iavf_reset_task()
2379 wake_up(&adapter->down_waitqueue); in iavf_reset_task()
2381 mutex_unlock(&adapter->client_lock); in iavf_reset_task()
2382 mutex_unlock(&adapter->crit_lock); in iavf_reset_task()
2386 mutex_unlock(&adapter->client_lock); in iavf_reset_task()
2387 mutex_unlock(&adapter->crit_lock); in iavf_reset_task()
2389 iavf_change_state(adapter, __IAVF_RUNNING); in iavf_reset_task()
2392 dev_err(&adapter->pdev->dev, "failed to allocate resources during reinit\n"); in iavf_reset_task()
2402 struct iavf_adapter *adapter = in iavf_adminq_task() local
2404 struct iavf_hw *hw = &adapter->hw; in iavf_adminq_task()
2411 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) in iavf_adminq_task()
2419 if (iavf_lock_timeout(&adapter->crit_lock, 200)) in iavf_adminq_task()
2429 iavf_virtchnl_completion(adapter, v_op, v_ret, event.msg_buf, in iavf_adminq_task()
2434 mutex_unlock(&adapter->crit_lock); in iavf_adminq_task()
2436 if ((adapter->flags & in iavf_adminq_task()
2438 adapter->state == __IAVF_RESETTING) in iavf_adminq_task()
2447 dev_info(&adapter->pdev->dev, "ARQ VF Error detected\n"); in iavf_adminq_task()
2451 dev_info(&adapter->pdev->dev, "ARQ Overflow Error detected\n"); in iavf_adminq_task()
2455 dev_info(&adapter->pdev->dev, "ARQ Critical Error detected\n"); in iavf_adminq_task()
2464 dev_info(&adapter->pdev->dev, "ASQ VF Error detected\n"); in iavf_adminq_task()
2468 dev_info(&adapter->pdev->dev, "ASQ Overflow Error detected\n"); in iavf_adminq_task()
2472 dev_info(&adapter->pdev->dev, "ASQ Critical Error detected\n"); in iavf_adminq_task()
2482 iavf_misc_irq_enable(adapter); in iavf_adminq_task()
2494 struct iavf_adapter *adapter = in iavf_client_task() local
2501 if (!mutex_trylock(&adapter->client_lock)) in iavf_client_task()
2504 if (adapter->flags & IAVF_FLAG_SERVICE_CLIENT_REQUESTED) { in iavf_client_task()
2505 iavf_client_subtask(adapter); in iavf_client_task()
2506 adapter->flags &= ~IAVF_FLAG_SERVICE_CLIENT_REQUESTED; in iavf_client_task()
2509 if (adapter->flags & IAVF_FLAG_CLIENT_NEEDS_L2_PARAMS) { in iavf_client_task()
2510 iavf_notify_client_l2_params(&adapter->vsi); in iavf_client_task()
2511 adapter->flags &= ~IAVF_FLAG_CLIENT_NEEDS_L2_PARAMS; in iavf_client_task()
2514 if (adapter->flags & IAVF_FLAG_CLIENT_NEEDS_CLOSE) { in iavf_client_task()
2515 iavf_notify_client_close(&adapter->vsi, false); in iavf_client_task()
2516 adapter->flags &= ~IAVF_FLAG_CLIENT_NEEDS_CLOSE; in iavf_client_task()
2519 if (adapter->flags & IAVF_FLAG_CLIENT_NEEDS_OPEN) { in iavf_client_task()
2520 iavf_notify_client_open(&adapter->vsi); in iavf_client_task()
2521 adapter->flags &= ~IAVF_FLAG_CLIENT_NEEDS_OPEN; in iavf_client_task()
2524 mutex_unlock(&adapter->client_lock); in iavf_client_task()
2533 void iavf_free_all_tx_resources(struct iavf_adapter *adapter) in iavf_free_all_tx_resources() argument
2537 if (!adapter->tx_rings) in iavf_free_all_tx_resources()
2540 for (i = 0; i < adapter->num_active_queues; i++) in iavf_free_all_tx_resources()
2541 if (adapter->tx_rings[i].desc) in iavf_free_all_tx_resources()
2542 iavf_free_tx_resources(&adapter->tx_rings[i]); in iavf_free_all_tx_resources()
2555 static int iavf_setup_all_tx_resources(struct iavf_adapter *adapter) in iavf_setup_all_tx_resources() argument
2559 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_setup_all_tx_resources()
2560 adapter->tx_rings[i].count = adapter->tx_desc_count; in iavf_setup_all_tx_resources()
2561 err = iavf_setup_tx_descriptors(&adapter->tx_rings[i]); in iavf_setup_all_tx_resources()
2564 dev_err(&adapter->pdev->dev, in iavf_setup_all_tx_resources()
2582 static int iavf_setup_all_rx_resources(struct iavf_adapter *adapter) in iavf_setup_all_rx_resources() argument
2586 for (i = 0; i < adapter->num_active_queues; i++) { in iavf_setup_all_rx_resources()
2587 adapter->rx_rings[i].count = adapter->rx_desc_count; in iavf_setup_all_rx_resources()
2588 err = iavf_setup_rx_descriptors(&adapter->rx_rings[i]); in iavf_setup_all_rx_resources()
2591 dev_err(&adapter->pdev->dev, in iavf_setup_all_rx_resources()
2604 void iavf_free_all_rx_resources(struct iavf_adapter *adapter) in iavf_free_all_rx_resources() argument
2608 if (!adapter->rx_rings) in iavf_free_all_rx_resources()
2611 for (i = 0; i < adapter->num_active_queues; i++) in iavf_free_all_rx_resources()
2612 if (adapter->rx_rings[i].desc) in iavf_free_all_rx_resources()
2613 iavf_free_rx_resources(&adapter->rx_rings[i]); in iavf_free_all_rx_resources()
2621 static int iavf_validate_tx_bandwidth(struct iavf_adapter *adapter, in iavf_validate_tx_bandwidth() argument
2626 if (ADV_LINK_SUPPORT(adapter)) { in iavf_validate_tx_bandwidth()
2627 if (adapter->link_speed_mbps < U32_MAX) { in iavf_validate_tx_bandwidth()
2628 speed = adapter->link_speed_mbps; in iavf_validate_tx_bandwidth()
2631 dev_err(&adapter->pdev->dev, "Unknown link speed\n"); in iavf_validate_tx_bandwidth()
2636 switch (adapter->link_speed) { in iavf_validate_tx_bandwidth()
2667 dev_err(&adapter->pdev->dev, in iavf_validate_tx_bandwidth()
2684 static int iavf_validate_ch_config(struct iavf_adapter *adapter, in iavf_validate_ch_config() argument
2701 dev_err(&adapter->pdev->dev, in iavf_validate_ch_config()
2711 if (num_qps > adapter->num_active_queues) { in iavf_validate_ch_config()
2712 dev_err(&adapter->pdev->dev, in iavf_validate_ch_config()
2717 ret = iavf_validate_tx_bandwidth(adapter, total_max_rate); in iavf_validate_ch_config()
2725 static void iavf_del_all_cloud_filters(struct iavf_adapter *adapter) in iavf_del_all_cloud_filters() argument
2729 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_del_all_cloud_filters()
2730 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, in iavf_del_all_cloud_filters()
2734 adapter->num_cloud_filters--; in iavf_del_all_cloud_filters()
2736 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_del_all_cloud_filters()
2753 struct iavf_adapter *adapter = netdev_priv(netdev); in __iavf_setup_tc() local
2754 struct virtchnl_vf_resource *vfres = adapter->vf_res; in __iavf_setup_tc()
2766 if (adapter->ch_config.state == __IAVF_TC_RUNNING) { in __iavf_setup_tc()
2769 adapter->num_tc = 0; in __iavf_setup_tc()
2772 iavf_del_all_cloud_filters(adapter); in __iavf_setup_tc()
2773 adapter->aq_required = IAVF_FLAG_AQ_DISABLE_CHANNELS; in __iavf_setup_tc()
2783 dev_err(&adapter->pdev->dev, "ADq not supported\n"); in __iavf_setup_tc()
2786 if (adapter->ch_config.state != __IAVF_TC_INVALID) { in __iavf_setup_tc()
2787 dev_err(&adapter->pdev->dev, "TC configuration already exists\n"); in __iavf_setup_tc()
2791 ret = iavf_validate_ch_config(adapter, mqprio_qopt); in __iavf_setup_tc()
2795 if (adapter->num_tc == num_tc) in __iavf_setup_tc()
2797 adapter->num_tc = num_tc; in __iavf_setup_tc()
2801 adapter->ch_config.ch_info[i].count = in __iavf_setup_tc()
2803 adapter->ch_config.ch_info[i].offset = in __iavf_setup_tc()
2810 adapter->ch_config.ch_info[i].max_tx_rate = in __iavf_setup_tc()
2813 adapter->ch_config.ch_info[i].count = 1; in __iavf_setup_tc()
2814 adapter->ch_config.ch_info[i].offset = 0; in __iavf_setup_tc()
2817 adapter->ch_config.total_qps = total_qps; in __iavf_setup_tc()
2820 adapter->aq_required |= IAVF_FLAG_AQ_ENABLE_CHANNELS; in __iavf_setup_tc()
2823 netdev_set_num_tc(adapter->netdev, num_tc); in __iavf_setup_tc()
2843 static int iavf_parse_cls_flower(struct iavf_adapter *adapter, in iavf_parse_cls_flower() argument
2866 dev_err(&adapter->pdev->dev, "Unsupported key used: 0x%x\n", in iavf_parse_cls_flower()
2899 dev_info(&adapter->pdev->dev, "Only TCP transport is supported\n"); in iavf_parse_cls_flower()
2914 dev_err(&adapter->pdev->dev, "Bad ether dest mask %pM\n", in iavf_parse_cls_flower()
2924 dev_err(&adapter->pdev->dev, "Bad ether src mask %pM\n", in iavf_parse_cls_flower()
2959 dev_err(&adapter->pdev->dev, "Bad vlan mask %u\n", in iavf_parse_cls_flower()
2983 dev_err(&adapter->pdev->dev, "Bad ip dst mask 0x%08x\n", in iavf_parse_cls_flower()
2993 dev_err(&adapter->pdev->dev, "Bad ip src mask 0x%08x\n", in iavf_parse_cls_flower()
3000 dev_info(&adapter->pdev->dev, "Tenant id not allowed for ip filter\n"); in iavf_parse_cls_flower()
3020 dev_err(&adapter->pdev->dev, "Bad ipv6 dst mask 0x%02x\n", in iavf_parse_cls_flower()
3030 dev_err(&adapter->pdev->dev, in iavf_parse_cls_flower()
3055 dev_err(&adapter->pdev->dev, "Bad src port mask %u\n", in iavf_parse_cls_flower()
3065 dev_err(&adapter->pdev->dev, "Bad dst port mask %u\n", in iavf_parse_cls_flower()
3091 static int iavf_handle_tclass(struct iavf_adapter *adapter, u32 tc, in iavf_handle_tclass() argument
3096 if (tc < adapter->num_tc) { in iavf_handle_tclass()
3098 dev_err(&adapter->pdev->dev, in iavf_handle_tclass()
3114 static int iavf_configure_clsflower(struct iavf_adapter *adapter, in iavf_configure_clsflower() argument
3117 int tc = tc_classid_to_hwtc(adapter->netdev, cls_flower->classid); in iavf_configure_clsflower()
3122 dev_err(&adapter->pdev->dev, "Invalid traffic class\n"); in iavf_configure_clsflower()
3130 while (!mutex_trylock(&adapter->crit_lock)) { in iavf_configure_clsflower()
3144 err = iavf_parse_cls_flower(adapter, cls_flower, filter); in iavf_configure_clsflower()
3148 err = iavf_handle_tclass(adapter, tc, filter); in iavf_configure_clsflower()
3153 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_configure_clsflower()
3154 list_add_tail(&filter->list, &adapter->cloud_filter_list); in iavf_configure_clsflower()
3155 adapter->num_cloud_filters++; in iavf_configure_clsflower()
3157 adapter->aq_required |= IAVF_FLAG_AQ_ADD_CLOUD_FILTER; in iavf_configure_clsflower()
3158 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_configure_clsflower()
3163 mutex_unlock(&adapter->crit_lock); in iavf_configure_clsflower()
3174 static struct iavf_cloud_filter *iavf_find_cf(struct iavf_adapter *adapter, in iavf_find_cf() argument
3182 list_for_each_entry(filter, &adapter->cloud_filter_list, list) { in iavf_find_cf()
3194 static int iavf_delete_clsflower(struct iavf_adapter *adapter, in iavf_delete_clsflower() argument
3200 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_delete_clsflower()
3201 filter = iavf_find_cf(adapter, &cls_flower->cookie); in iavf_delete_clsflower()
3204 adapter->aq_required |= IAVF_FLAG_AQ_DEL_CLOUD_FILTER; in iavf_delete_clsflower()
3208 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_delete_clsflower()
3218 static int iavf_setup_tc_cls_flower(struct iavf_adapter *adapter, in iavf_setup_tc_cls_flower() argument
3223 return iavf_configure_clsflower(adapter, cls_flower); in iavf_setup_tc_cls_flower()
3225 return iavf_delete_clsflower(adapter, cls_flower); in iavf_setup_tc_cls_flower()
3244 struct iavf_adapter *adapter = cb_priv; in iavf_setup_tc_block_cb() local
3246 if (!tc_cls_can_offload_and_chain0(adapter->netdev, type_data)) in iavf_setup_tc_block_cb()
3273 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_setup_tc() local
3282 adapter, adapter, true); in iavf_setup_tc()
3302 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_open() local
3305 if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED) { in iavf_open()
3306 dev_err(&adapter->pdev->dev, "Unable to open device due to PF driver failure.\n"); in iavf_open()
3310 while (!mutex_trylock(&adapter->crit_lock)) in iavf_open()
3313 if (adapter->state != __IAVF_DOWN) { in iavf_open()
3318 if (adapter->state == __IAVF_RUNNING && in iavf_open()
3319 !test_bit(__IAVF_VSI_DOWN, adapter->vsi.state)) { in iavf_open()
3320 dev_dbg(&adapter->pdev->dev, "VF is already open.\n"); in iavf_open()
3326 err = iavf_setup_all_tx_resources(adapter); in iavf_open()
3331 err = iavf_setup_all_rx_resources(adapter); in iavf_open()
3336 err = iavf_request_traffic_irqs(adapter, netdev->name); in iavf_open()
3340 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_open()
3342 iavf_add_filter(adapter, adapter->hw.mac.addr); in iavf_open()
3344 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_open()
3347 iavf_restore_filters(adapter); in iavf_open()
3349 iavf_configure(adapter); in iavf_open()
3351 iavf_up_complete(adapter); in iavf_open()
3353 iavf_irq_enable(adapter, true); in iavf_open()
3355 mutex_unlock(&adapter->crit_lock); in iavf_open()
3360 iavf_down(adapter); in iavf_open()
3361 iavf_free_traffic_irqs(adapter); in iavf_open()
3363 iavf_free_all_rx_resources(adapter); in iavf_open()
3365 iavf_free_all_tx_resources(adapter); in iavf_open()
3367 mutex_unlock(&adapter->crit_lock); in iavf_open()
3385 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_close() local
3388 if (adapter->state <= __IAVF_DOWN_PENDING) in iavf_close()
3391 while (!mutex_trylock(&adapter->crit_lock)) in iavf_close()
3394 set_bit(__IAVF_VSI_DOWN, adapter->vsi.state); in iavf_close()
3395 if (CLIENT_ENABLED(adapter)) in iavf_close()
3396 adapter->flags |= IAVF_FLAG_CLIENT_NEEDS_CLOSE; in iavf_close()
3398 iavf_down(adapter); in iavf_close()
3399 iavf_change_state(adapter, __IAVF_DOWN_PENDING); in iavf_close()
3400 iavf_free_traffic_irqs(adapter); in iavf_close()
3402 mutex_unlock(&adapter->crit_lock); in iavf_close()
3415 status = wait_event_timeout(adapter->down_waitqueue, in iavf_close()
3416 adapter->state == __IAVF_DOWN, in iavf_close()
3432 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_change_mtu() local
3435 if (CLIENT_ENABLED(adapter)) { in iavf_change_mtu()
3436 iavf_notify_client_l2_params(&adapter->vsi); in iavf_change_mtu()
3437 adapter->flags |= IAVF_FLAG_SERVICE_CLIENT_REQUESTED; in iavf_change_mtu()
3439 adapter->flags |= IAVF_FLAG_RESET_NEEDED; in iavf_change_mtu()
3440 queue_work(iavf_wq, &adapter->reset_task); in iavf_change_mtu()
3454 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_set_features() local
3459 if (!VLAN_ALLOWED(adapter)) { in iavf_set_features()
3469 adapter->aq_required |= in iavf_set_features()
3472 adapter->aq_required |= in iavf_set_features()
3547 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_fix_features() local
3549 if (adapter->vf_res && in iavf_fix_features()
3550 !(adapter->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN)) in iavf_fix_features()
3604 int iavf_process_config(struct iavf_adapter *adapter) in iavf_process_config() argument
3606 struct virtchnl_vf_resource *vfres = adapter->vf_res; in iavf_process_config()
3607 int i, num_req_queues = adapter->num_req_queues; in iavf_process_config()
3608 struct net_device *netdev = adapter->netdev; in iavf_process_config()
3609 struct iavf_vsi *vsi = &adapter->vsi; in iavf_process_config()
3616 adapter->vsi_res = &vfres->vsi_res[i]; in iavf_process_config()
3618 if (!adapter->vsi_res) { in iavf_process_config()
3619 dev_err(&adapter->pdev->dev, "No LAN VSI found\n"); in iavf_process_config()
3624 num_req_queues > adapter->vsi_res->num_queue_pairs) { in iavf_process_config()
3629 dev_err(&adapter->pdev->dev, in iavf_process_config()
3632 adapter->vsi_res->num_queue_pairs); in iavf_process_config()
3633 adapter->flags |= IAVF_FLAG_REINIT_ITR_NEEDED; in iavf_process_config()
3634 adapter->num_req_queues = adapter->vsi_res->num_queue_pairs; in iavf_process_config()
3635 iavf_schedule_reset(adapter); in iavf_process_config()
3638 adapter->num_req_queues = 0; in iavf_process_config()
3720 adapter->vsi.id = adapter->vsi_res->vsi_id; in iavf_process_config()
3722 adapter->vsi.back = adapter; in iavf_process_config()
3723 adapter->vsi.base_vector = 1; in iavf_process_config()
3724 adapter->vsi.work_limit = IAVF_DEFAULT_IRQ_WORK; in iavf_process_config()
3725 vsi->netdev = adapter->netdev; in iavf_process_config()
3726 vsi->qs_handle = adapter->vsi_res->qset_handle; in iavf_process_config()
3728 adapter->rss_key_size = vfres->rss_key_size; in iavf_process_config()
3729 adapter->rss_lut_size = vfres->rss_lut_size; in iavf_process_config()
3731 adapter->rss_key_size = IAVF_HKEY_ARRAY_SIZE; in iavf_process_config()
3732 adapter->rss_lut_size = IAVF_HLUT_ARRAY_SIZE; in iavf_process_config()
3744 struct iavf_adapter *adapter = iavf_pdev_to_adapter(pdev); in iavf_shutdown() local
3745 struct net_device *netdev = adapter->netdev; in iavf_shutdown()
3752 if (iavf_lock_timeout(&adapter->crit_lock, 5000)) in iavf_shutdown()
3753 dev_warn(&adapter->pdev->dev, "failed to acquire crit_lock in %s\n", __FUNCTION__); in iavf_shutdown()
3755 iavf_change_state(adapter, __IAVF_REMOVE); in iavf_shutdown()
3756 adapter->aq_required = 0; in iavf_shutdown()
3757 mutex_unlock(&adapter->crit_lock); in iavf_shutdown()
3780 struct iavf_adapter *adapter = NULL; in iavf_probe() local
3819 adapter = netdev_priv(netdev); in iavf_probe()
3821 adapter->netdev = netdev; in iavf_probe()
3822 adapter->pdev = pdev; in iavf_probe()
3824 hw = &adapter->hw; in iavf_probe()
3825 hw->back = adapter; in iavf_probe()
3827 adapter->msg_enable = BIT(DEFAULT_DEBUG_LEVEL_SHIFT) - 1; in iavf_probe()
3828 iavf_change_state(adapter, __IAVF_STARTUP); in iavf_probe()
3851 mutex_init(&adapter->crit_lock); in iavf_probe()
3852 mutex_init(&adapter->client_lock); in iavf_probe()
3853 mutex_init(&adapter->remove_lock); in iavf_probe()
3857 spin_lock_init(&adapter->mac_vlan_list_lock); in iavf_probe()
3858 spin_lock_init(&adapter->cloud_filter_list_lock); in iavf_probe()
3859 spin_lock_init(&adapter->fdir_fltr_lock); in iavf_probe()
3860 spin_lock_init(&adapter->adv_rss_lock); in iavf_probe()
3862 INIT_LIST_HEAD(&adapter->mac_filter_list); in iavf_probe()
3863 INIT_LIST_HEAD(&adapter->vlan_filter_list); in iavf_probe()
3864 INIT_LIST_HEAD(&adapter->cloud_filter_list); in iavf_probe()
3865 INIT_LIST_HEAD(&adapter->fdir_list_head); in iavf_probe()
3866 INIT_LIST_HEAD(&adapter->adv_rss_list_head); in iavf_probe()
3868 INIT_WORK(&adapter->reset_task, iavf_reset_task); in iavf_probe()
3869 INIT_WORK(&adapter->adminq_task, iavf_adminq_task); in iavf_probe()
3870 INIT_DELAYED_WORK(&adapter->watchdog_task, iavf_watchdog_task); in iavf_probe()
3871 INIT_DELAYED_WORK(&adapter->client_task, iavf_client_task); in iavf_probe()
3872 queue_delayed_work(iavf_wq, &adapter->watchdog_task, in iavf_probe()
3876 init_waitqueue_head(&adapter->down_waitqueue); in iavf_probe()
3900 struct iavf_adapter *adapter = netdev_priv(netdev); in iavf_suspend() local
3904 while (!mutex_trylock(&adapter->crit_lock)) in iavf_suspend()
3909 iavf_down(adapter); in iavf_suspend()
3912 iavf_free_misc_irq(adapter); in iavf_suspend()
3913 iavf_reset_interrupt_capability(adapter); in iavf_suspend()
3915 mutex_unlock(&adapter->crit_lock); in iavf_suspend()
3929 struct iavf_adapter *adapter; in iavf_resume() local
3932 adapter = iavf_pdev_to_adapter(pdev); in iavf_resume()
3937 err = iavf_set_interrupt_capability(adapter); in iavf_resume()
3943 err = iavf_request_misc_irq(adapter); in iavf_resume()
3950 queue_work(iavf_wq, &adapter->reset_task); in iavf_resume()
3952 netif_device_attach(adapter->netdev); in iavf_resume()
3968 struct iavf_adapter *adapter = iavf_pdev_to_adapter(pdev); in iavf_remove() local
3969 enum iavf_state_t prev_state = adapter->last_state; in iavf_remove()
3970 struct net_device *netdev = adapter->netdev; in iavf_remove()
3976 struct iavf_hw *hw = &adapter->hw; in iavf_remove()
3979 mutex_lock(&adapter->remove_lock); in iavf_remove()
3980 cancel_work_sync(&adapter->reset_task); in iavf_remove()
3981 cancel_delayed_work_sync(&adapter->watchdog_task); in iavf_remove()
3982 cancel_delayed_work_sync(&adapter->client_task); in iavf_remove()
3983 if (adapter->netdev_registered) { in iavf_remove()
3985 adapter->netdev_registered = false; in iavf_remove()
3987 if (CLIENT_ALLOWED(adapter)) { in iavf_remove()
3988 err = iavf_lan_del_device(adapter); in iavf_remove()
3994 iavf_request_reset(adapter); in iavf_remove()
3998 iavf_request_reset(adapter); in iavf_remove()
4001 if (iavf_lock_timeout(&adapter->crit_lock, 5000)) in iavf_remove()
4002 dev_warn(&adapter->pdev->dev, "failed to acquire crit_lock in %s\n", __FUNCTION__); in iavf_remove()
4005 iavf_change_state(adapter, __IAVF_REMOVE); in iavf_remove()
4006 adapter->aq_required = 0; in iavf_remove()
4007 adapter->flags &= ~IAVF_FLAG_REINIT_ITR_NEEDED; in iavf_remove()
4009 iavf_free_all_tx_resources(adapter); in iavf_remove()
4010 iavf_free_all_rx_resources(adapter); in iavf_remove()
4011 iavf_misc_irq_disable(adapter); in iavf_remove()
4012 iavf_free_misc_irq(adapter); in iavf_remove()
4018 if ((adapter->last_state == __IAVF_RESETTING && in iavf_remove()
4020 (adapter->last_state == __IAVF_RUNNING && in iavf_remove()
4022 iavf_free_traffic_irqs(adapter); in iavf_remove()
4024 iavf_reset_interrupt_capability(adapter); in iavf_remove()
4025 iavf_free_q_vectors(adapter); in iavf_remove()
4027 cancel_delayed_work_sync(&adapter->watchdog_task); in iavf_remove()
4029 cancel_work_sync(&adapter->adminq_task); in iavf_remove()
4031 iavf_free_rss(adapter); in iavf_remove()
4039 mutex_destroy(&adapter->client_lock); in iavf_remove()
4040 mutex_unlock(&adapter->crit_lock); in iavf_remove()
4041 mutex_destroy(&adapter->crit_lock); in iavf_remove()
4042 mutex_unlock(&adapter->remove_lock); in iavf_remove()
4043 mutex_destroy(&adapter->remove_lock); in iavf_remove()
4047 iavf_free_queues(adapter); in iavf_remove()
4048 kfree(adapter->vf_res); in iavf_remove()
4049 spin_lock_bh(&adapter->mac_vlan_list_lock); in iavf_remove()
4053 list_for_each_entry_safe(f, ftmp, &adapter->mac_filter_list, list) { in iavf_remove()
4057 list_for_each_entry_safe(vlf, vlftmp, &adapter->vlan_filter_list, in iavf_remove()
4063 spin_unlock_bh(&adapter->mac_vlan_list_lock); in iavf_remove()
4065 spin_lock_bh(&adapter->cloud_filter_list_lock); in iavf_remove()
4066 list_for_each_entry_safe(cf, cftmp, &adapter->cloud_filter_list, list) { in iavf_remove()
4070 spin_unlock_bh(&adapter->cloud_filter_list_lock); in iavf_remove()
4072 spin_lock_bh(&adapter->fdir_fltr_lock); in iavf_remove()
4073 list_for_each_entry_safe(fdir, fdirtmp, &adapter->fdir_list_head, list) { in iavf_remove()
4077 spin_unlock_bh(&adapter->fdir_fltr_lock); in iavf_remove()
4079 spin_lock_bh(&adapter->adv_rss_lock); in iavf_remove()
4080 list_for_each_entry_safe(rss, rsstmp, &adapter->adv_rss_list_head, in iavf_remove()
4085 spin_unlock_bh(&adapter->adv_rss_lock); in iavf_remove()