Lines Matching refs:pf
51 static void i40e_handle_reset_warning(struct i40e_pf *pf);
54 static int i40e_setup_pf_switch(struct i40e_pf *pf, bool reinit);
55 static int i40e_setup_misc_vector(struct i40e_pf *pf);
56 static void i40e_determine_queue_usage(struct i40e_pf *pf);
57 static int i40e_setup_pf_filter_control(struct i40e_pf *pf);
58 static void i40e_fdir_sb_setup(struct i40e_pf *pf);
104 struct i40e_pf *pf = (struct i40e_pf *)hw->back; in i40e_allocate_dma_mem_d() local
107 mem->va = dma_zalloc_coherent(&pf->pdev->dev, mem->size, in i40e_allocate_dma_mem_d()
122 struct i40e_pf *pf = (struct i40e_pf *)hw->back; in i40e_free_dma_mem_d() local
124 dma_free_coherent(&pf->pdev->dev, mem->size, mem->va, mem->pa); in i40e_free_dma_mem_d()
178 static int i40e_get_lump(struct i40e_pf *pf, struct i40e_lump_tracking *pile, in i40e_get_lump() argument
185 dev_info(&pf->pdev->dev, in i40e_get_lump()
257 struct i40e_vsi *i40e_find_vsi_from_id(struct i40e_pf *pf, u16 id) in i40e_find_vsi_from_id() argument
261 for (i = 0; i < pf->num_alloc_vsi; i++) in i40e_find_vsi_from_id()
262 if (pf->vsi[i] && (pf->vsi[i]->id == id)) in i40e_find_vsi_from_id()
263 return pf->vsi[i]; in i40e_find_vsi_from_id()
274 static void i40e_service_event_schedule(struct i40e_pf *pf) in i40e_service_event_schedule() argument
276 if (!test_bit(__I40E_DOWN, &pf->state) && in i40e_service_event_schedule()
277 !test_bit(__I40E_RESET_RECOVERY_PENDING, &pf->state) && in i40e_service_event_schedule()
278 !test_and_set_bit(__I40E_SERVICE_SCHED, &pf->state)) in i40e_service_event_schedule()
279 schedule_work(&pf->service_task); in i40e_service_event_schedule()
298 struct i40e_pf *pf = vsi->back; in i40e_tx_timeout() local
300 pf->tx_timeout_count++; in i40e_tx_timeout()
302 if (time_after(jiffies, (pf->tx_timeout_last_recovery + HZ*20))) in i40e_tx_timeout()
303 pf->tx_timeout_recovery_level = 1; in i40e_tx_timeout()
304 pf->tx_timeout_last_recovery = jiffies; in i40e_tx_timeout()
306 pf->tx_timeout_recovery_level); in i40e_tx_timeout()
308 switch (pf->tx_timeout_recovery_level) { in i40e_tx_timeout()
312 set_bit(__I40E_REINIT_REQUESTED, &pf->state); in i40e_tx_timeout()
319 set_bit(__I40E_PF_RESET_REQUESTED, &pf->state); in i40e_tx_timeout()
322 set_bit(__I40E_CORE_RESET_REQUESTED, &pf->state); in i40e_tx_timeout()
325 set_bit(__I40E_GLOBAL_RESET_REQUESTED, &pf->state); in i40e_tx_timeout()
329 set_bit(__I40E_DOWN_REQUESTED, &pf->state); in i40e_tx_timeout()
333 i40e_service_event_schedule(pf); in i40e_tx_timeout()
334 pf->tx_timeout_recovery_level++; in i40e_tx_timeout()
473 void i40e_pf_reset_stats(struct i40e_pf *pf) in i40e_pf_reset_stats() argument
477 memset(&pf->stats, 0, sizeof(pf->stats)); in i40e_pf_reset_stats()
478 memset(&pf->stats_offsets, 0, sizeof(pf->stats_offsets)); in i40e_pf_reset_stats()
479 pf->stat_offsets_loaded = false; in i40e_pf_reset_stats()
482 if (pf->veb[i]) { in i40e_pf_reset_stats()
483 memset(&pf->veb[i]->stats, 0, in i40e_pf_reset_stats()
484 sizeof(pf->veb[i]->stats)); in i40e_pf_reset_stats()
485 memset(&pf->veb[i]->stats_offsets, 0, in i40e_pf_reset_stats()
486 sizeof(pf->veb[i]->stats_offsets)); in i40e_pf_reset_stats()
487 pf->veb[i]->stat_offsets_loaded = false; in i40e_pf_reset_stats()
556 struct i40e_pf *pf = vsi->back; in i40e_update_eth_stats() local
557 struct i40e_hw *hw = &pf->hw; in i40e_update_eth_stats()
620 struct i40e_pf *pf = veb->pf; in i40e_update_veb_stats() local
621 struct i40e_hw *hw = &pf->hw; in i40e_update_veb_stats()
674 struct i40e_pf *pf = vsi->back; in i40e_update_fcoe_stats() local
675 struct i40e_hw *hw = &pf->hw; in i40e_update_fcoe_stats()
683 idx = (pf->pf_seid - I40E_BASE_PF_SEID) + I40E_FCOE_PF_STAT_OFFSET; in i40e_update_fcoe_stats()
722 static void i40e_update_link_xoff_rx(struct i40e_pf *pf) in i40e_update_link_xoff_rx() argument
724 struct i40e_hw_port_stats *osd = &pf->stats_offsets; in i40e_update_link_xoff_rx()
725 struct i40e_hw_port_stats *nsd = &pf->stats; in i40e_update_link_xoff_rx()
726 struct i40e_hw *hw = &pf->hw; in i40e_update_link_xoff_rx()
736 pf->stat_offsets_loaded, in i40e_update_link_xoff_rx()
744 for (v = 0; v < pf->num_alloc_vsi; v++) { in i40e_update_link_xoff_rx()
745 struct i40e_vsi *vsi = pf->vsi[v]; in i40e_update_link_xoff_rx()
763 static void i40e_update_prio_xoff_rx(struct i40e_pf *pf) in i40e_update_prio_xoff_rx() argument
765 struct i40e_hw_port_stats *osd = &pf->stats_offsets; in i40e_update_prio_xoff_rx()
766 struct i40e_hw_port_stats *nsd = &pf->stats; in i40e_update_prio_xoff_rx()
769 struct i40e_hw *hw = &pf->hw; in i40e_update_prio_xoff_rx()
776 if (!(pf->flags & I40E_FLAG_DCB_ENABLED) || in i40e_update_prio_xoff_rx()
778 i40e_update_link_xoff_rx(pf); in i40e_update_prio_xoff_rx()
785 pf->stat_offsets_loaded, in i40e_update_prio_xoff_rx()
798 for (v = 0; v < pf->num_alloc_vsi; v++) { in i40e_update_prio_xoff_rx()
799 struct i40e_vsi *vsi = pf->vsi[v]; in i40e_update_prio_xoff_rx()
827 struct i40e_pf *pf = vsi->back; in i40e_update_vsi_stats() local
842 test_bit(__I40E_CONFIG_BUSY, &pf->state)) in i40e_update_vsi_stats()
908 if (vsi == pf->vsi[pf->lan_vsi]) { in i40e_update_vsi_stats()
909 ns->rx_crc_errors = pf->stats.crc_errors; in i40e_update_vsi_stats()
910 ns->rx_errors = pf->stats.crc_errors + pf->stats.illegal_bytes; in i40e_update_vsi_stats()
911 ns->rx_length_errors = pf->stats.rx_length_errors; in i40e_update_vsi_stats()
919 static void i40e_update_pf_stats(struct i40e_pf *pf) in i40e_update_pf_stats() argument
921 struct i40e_hw_port_stats *osd = &pf->stats_offsets; in i40e_update_pf_stats()
922 struct i40e_hw_port_stats *nsd = &pf->stats; in i40e_update_pf_stats()
923 struct i40e_hw *hw = &pf->hw; in i40e_update_pf_stats()
929 pf->stat_offsets_loaded, in i40e_update_pf_stats()
933 pf->stat_offsets_loaded, in i40e_update_pf_stats()
936 pf->stat_offsets_loaded, in i40e_update_pf_stats()
941 pf->stat_offsets_loaded, in i40e_update_pf_stats()
946 pf->stat_offsets_loaded, in i40e_update_pf_stats()
951 pf->stat_offsets_loaded, in i40e_update_pf_stats()
956 pf->stat_offsets_loaded, in i40e_update_pf_stats()
961 pf->stat_offsets_loaded, in i40e_update_pf_stats()
966 pf->stat_offsets_loaded, in i40e_update_pf_stats()
971 pf->stat_offsets_loaded, in i40e_update_pf_stats()
976 pf->stat_offsets_loaded, in i40e_update_pf_stats()
980 pf->stat_offsets_loaded, in i40e_update_pf_stats()
984 pf->stat_offsets_loaded, in i40e_update_pf_stats()
988 pf->stat_offsets_loaded, in i40e_update_pf_stats()
993 pf->stat_offsets_loaded, in i40e_update_pf_stats()
998 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1001 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1003 i40e_update_prio_xoff_rx(pf); /* handles I40E_GLPRT_LXOFFRXC */ in i40e_update_pf_stats()
1005 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1010 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1014 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1018 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1023 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1030 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1034 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1038 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1042 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1046 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1050 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1054 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1059 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1063 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1067 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1071 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1075 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1079 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1083 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1087 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1090 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1093 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1096 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1100 i40e_stat_update32(hw, I40E_GLQF_PCNT(pf->fd_atr_cnt_idx), in i40e_update_pf_stats()
1101 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1103 i40e_stat_update32(hw, I40E_GLQF_PCNT(pf->fd_sb_cnt_idx), in i40e_update_pf_stats()
1104 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1115 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1118 pf->stat_offsets_loaded, in i40e_update_pf_stats()
1121 pf->stat_offsets_loaded = true; in i40e_update_pf_stats()
1132 struct i40e_pf *pf = vsi->back; in i40e_update_stats() local
1134 if (vsi == pf->vsi[pf->lan_vsi]) in i40e_update_stats()
1135 i40e_update_pf_stats(pf); in i40e_update_stats()
1261 struct i40e_pf *pf = vsi->back; in i40e_rm_default_mac_filter() local
1273 aq_ret = i40e_aq_remove_macvlan(&pf->hw, vsi->seid, &element, 1, NULL); in i40e_rm_default_mac_filter()
1406 struct i40e_pf *pf = vsi->back; in i40e_set_mac() local
1407 struct i40e_hw *hw = &pf->hw; in i40e_set_mac()
1449 i40e_aq_remove_macvlan(&pf->hw, vsi->seid, &element, 1, NULL); in i40e_set_mac()
1461 i40e_aq_add_macvlan(&pf->hw, vsi->seid, &element, 1, NULL); in i40e_set_mac()
1496 struct i40e_pf *pf = vsi->back; in i40e_vsi_setup_queue_map() local
1516 dev_warn(&pf->pdev->dev, "DCB is enabled but no TC enabled, forcing TC0\n"); in i40e_vsi_setup_queue_map()
1531 qcount = min_t(int, vsi->alloc_queue_pairs, pf->num_lan_msix); in i40e_vsi_setup_queue_map()
1543 qcount = min_t(int, pf->rss_size, num_tc_qps); in i40e_vsi_setup_queue_map()
1595 vsi->num_queue_pairs = pf->num_lan_msix; in i40e_vsi_setup_queue_map()
1715 struct i40e_pf *pf; in i40e_sync_vsi_filters() local
1726 pf = vsi->back; in i40e_sync_vsi_filters()
1736 filter_list_len = pf->hw.aq.asq_buf_size / in i40e_sync_vsi_filters()
1769 aq_ret = i40e_aq_remove_macvlan(&pf->hw, in i40e_sync_vsi_filters()
1776 pf->hw.aq.asq_last_status != in i40e_sync_vsi_filters()
1778 dev_info(&pf->pdev->dev, in i40e_sync_vsi_filters()
1781 pf->hw.aq.asq_last_status); in i40e_sync_vsi_filters()
1785 aq_ret = i40e_aq_remove_macvlan(&pf->hw, vsi->seid, in i40e_sync_vsi_filters()
1790 pf->hw.aq.asq_last_status != I40E_AQ_RC_ENOENT) in i40e_sync_vsi_filters()
1791 dev_info(&pf->pdev->dev, in i40e_sync_vsi_filters()
1793 aq_ret, pf->hw.aq.asq_last_status); in i40e_sync_vsi_filters()
1800 filter_list_len = pf->hw.aq.asq_buf_size / in i40e_sync_vsi_filters()
1831 aq_ret = i40e_aq_add_macvlan(&pf->hw, vsi->seid, in i40e_sync_vsi_filters()
1842 aq_ret = i40e_aq_add_macvlan(&pf->hw, vsi->seid, in i40e_sync_vsi_filters()
1850 pf->hw.aq.asq_last_status != I40E_AQ_RC_EINVAL) { in i40e_sync_vsi_filters()
1851 dev_info(&pf->pdev->dev, in i40e_sync_vsi_filters()
1853 aq_ret, pf->hw.aq.asq_last_status); in i40e_sync_vsi_filters()
1854 if ((pf->hw.aq.asq_last_status == I40E_AQ_RC_ENOSPC) && in i40e_sync_vsi_filters()
1860 dev_info(&pf->pdev->dev, "promiscuous mode forced on\n"); in i40e_sync_vsi_filters()
1874 dev_info(&pf->pdev->dev, in i40e_sync_vsi_filters()
1876 aq_ret, pf->hw.aq.asq_last_status); in i40e_sync_vsi_filters()
1887 dev_info(&pf->pdev->dev, in i40e_sync_vsi_filters()
1889 aq_ret, pf->hw.aq.asq_last_status); in i40e_sync_vsi_filters()
1894 dev_info(&pf->pdev->dev, in i40e_sync_vsi_filters()
1896 aq_ret, pf->hw.aq.asq_last_status); in i40e_sync_vsi_filters()
1907 static void i40e_sync_filters_subtask(struct i40e_pf *pf) in i40e_sync_filters_subtask() argument
1911 if (!pf || !(pf->flags & I40E_FLAG_FILTER_SYNC)) in i40e_sync_filters_subtask()
1913 pf->flags &= ~I40E_FLAG_FILTER_SYNC; in i40e_sync_filters_subtask()
1915 for (v = 0; v < pf->num_alloc_vsi; v++) { in i40e_sync_filters_subtask()
1916 if (pf->vsi[v] && in i40e_sync_filters_subtask()
1917 (pf->vsi[v]->flags & I40E_VSI_FLAG_FILTER_CHANGED)) in i40e_sync_filters_subtask()
1918 i40e_sync_vsi_filters(pf->vsi[v]); in i40e_sync_filters_subtask()
1957 struct i40e_pf *pf = np->vsi->back; in i40e_ioctl() local
1961 return i40e_ptp_get_ts_config(pf, ifr); in i40e_ioctl()
1963 return i40e_ptp_set_ts_config(pf, ifr); in i40e_ioctl()
2760 struct i40e_pf *pf = vsi->back; in i40e_fdir_filter_restore() local
2763 if (!(pf->flags & I40E_FLAG_FD_SB_ENABLED)) in i40e_fdir_filter_restore()
2767 &pf->fdir_filter_list, fdir_node) { in i40e_fdir_filter_restore()
2796 struct i40e_pf *pf = vsi->back; in i40e_vsi_configure_msix() local
2798 struct i40e_hw *hw = &pf->hw; in i40e_vsi_configure_msix()
2857 static void i40e_enable_misc_int_causes(struct i40e_pf *pf) in i40e_enable_misc_int_causes() argument
2859 struct i40e_hw *hw = &pf->hw; in i40e_enable_misc_int_causes()
2875 if (pf->flags & I40E_FLAG_PTP) in i40e_enable_misc_int_causes()
2895 struct i40e_pf *pf = vsi->back; in i40e_configure_msi_and_legacy() local
2896 struct i40e_hw *hw = &pf->hw; in i40e_configure_msi_and_legacy()
2907 i40e_enable_misc_int_causes(pf); in i40e_configure_msi_and_legacy()
2931 void i40e_irq_dynamic_disable_icr0(struct i40e_pf *pf) in i40e_irq_dynamic_disable_icr0() argument
2933 struct i40e_hw *hw = &pf->hw; in i40e_irq_dynamic_disable_icr0()
2944 void i40e_irq_dynamic_enable_icr0(struct i40e_pf *pf) in i40e_irq_dynamic_enable_icr0() argument
2946 struct i40e_hw *hw = &pf->hw; in i40e_irq_dynamic_enable_icr0()
2964 struct i40e_pf *pf = vsi->back; in i40e_irq_dynamic_enable() local
2965 struct i40e_hw *hw = &pf->hw; in i40e_irq_dynamic_enable()
2982 struct i40e_pf *pf = vsi->back; in i40e_irq_dynamic_disable() local
2983 struct i40e_hw *hw = &pf->hw; in i40e_irq_dynamic_disable()
3018 struct i40e_pf *pf = vsi->back; in i40e_vsi_request_irq_msix() local
3041 err = request_irq(pf->msix_entries[base + vector].vector, in i40e_vsi_request_irq_msix()
3047 dev_info(&pf->pdev->dev, in i40e_vsi_request_irq_msix()
3053 irq_set_affinity_hint(pf->msix_entries[base + vector].vector, in i40e_vsi_request_irq_msix()
3063 irq_set_affinity_hint(pf->msix_entries[base + vector].vector, in i40e_vsi_request_irq_msix()
3065 free_irq(pf->msix_entries[base + vector].vector, in i40e_vsi_request_irq_msix()
3077 struct i40e_pf *pf = vsi->back; in i40e_vsi_disable_irq() local
3078 struct i40e_hw *hw = &pf->hw; in i40e_vsi_disable_irq()
3087 if (pf->flags & I40E_FLAG_MSIX_ENABLED) { in i40e_vsi_disable_irq()
3094 synchronize_irq(pf->msix_entries[i + base].vector); in i40e_vsi_disable_irq()
3100 synchronize_irq(pf->pdev->irq); in i40e_vsi_disable_irq()
3110 struct i40e_pf *pf = vsi->back; in i40e_vsi_enable_irq() local
3113 if (pf->flags & I40E_FLAG_MSIX_ENABLED) { in i40e_vsi_enable_irq()
3118 i40e_irq_dynamic_enable_icr0(pf); in i40e_vsi_enable_irq()
3121 i40e_flush(&pf->hw); in i40e_vsi_enable_irq()
3129 static void i40e_stop_misc_vector(struct i40e_pf *pf) in i40e_stop_misc_vector() argument
3132 wr32(&pf->hw, I40E_PFINT_ICR0_ENA, 0); in i40e_stop_misc_vector()
3133 i40e_flush(&pf->hw); in i40e_stop_misc_vector()
3147 struct i40e_pf *pf = (struct i40e_pf *)data; in i40e_intr() local
3148 struct i40e_hw *hw = &pf->hw; in i40e_intr()
3163 pf->sw_int_count++; in i40e_intr()
3177 if (!test_bit(__I40E_DOWN, &pf->state)) in i40e_intr()
3178 napi_schedule(&pf->vsi[pf->lan_vsi]->q_vectors[0]->napi); in i40e_intr()
3183 set_bit(__I40E_ADMINQ_EVENT_PENDING, &pf->state); in i40e_intr()
3188 set_bit(__I40E_MDD_EVENT_PENDING, &pf->state); in i40e_intr()
3193 set_bit(__I40E_VFLR_EVENT_PENDING, &pf->state); in i40e_intr()
3197 if (!test_bit(__I40E_RESET_RECOVERY_PENDING, &pf->state)) in i40e_intr()
3198 set_bit(__I40E_RESET_INTR_RECEIVED, &pf->state); in i40e_intr()
3204 pf->corer_count++; in i40e_intr()
3206 pf->globr_count++; in i40e_intr()
3208 pf->empr_count++; in i40e_intr()
3209 set_bit(__I40E_EMP_RESET_INTR_RECEIVED, &pf->state); in i40e_intr()
3215 dev_info(&pf->pdev->dev, "HMC error interrupt\n"); in i40e_intr()
3216 dev_info(&pf->pdev->dev, "HMC error info 0x%x, HMC error data 0x%x\n", in i40e_intr()
3226 i40e_ptp_tx_hwtstamp(pf); in i40e_intr()
3236 dev_info(&pf->pdev->dev, "unhandled interrupt icr0=0x%08x\n", in i40e_intr()
3241 dev_info(&pf->pdev->dev, "device will be reset\n"); in i40e_intr()
3242 set_bit(__I40E_PF_RESET_REQUESTED, &pf->state); in i40e_intr()
3243 i40e_service_event_schedule(pf); in i40e_intr()
3252 if (!test_bit(__I40E_DOWN, &pf->state)) { in i40e_intr()
3253 i40e_service_event_schedule(pf); in i40e_intr()
3254 i40e_irq_dynamic_enable_icr0(pf); in i40e_intr()
3439 struct i40e_pf *pf = vsi->back; in i40e_vsi_request_irq() local
3442 if (pf->flags & I40E_FLAG_MSIX_ENABLED) in i40e_vsi_request_irq()
3444 else if (pf->flags & I40E_FLAG_MSI_ENABLED) in i40e_vsi_request_irq()
3445 err = request_irq(pf->pdev->irq, i40e_intr, 0, in i40e_vsi_request_irq()
3446 pf->int_name, pf); in i40e_vsi_request_irq()
3448 err = request_irq(pf->pdev->irq, i40e_intr, IRQF_SHARED, in i40e_vsi_request_irq()
3449 pf->int_name, pf); in i40e_vsi_request_irq()
3452 dev_info(&pf->pdev->dev, "request_irq failed, Error %d\n", err); in i40e_vsi_request_irq()
3473 struct i40e_pf *pf = vsi->back; in i40e_netpoll() local
3480 pf->flags |= I40E_FLAG_IN_NETPOLL; in i40e_netpoll()
3481 if (pf->flags & I40E_FLAG_MSIX_ENABLED) { in i40e_netpoll()
3485 i40e_intr(pf->pdev->irq, netdev); in i40e_netpoll()
3487 pf->flags &= ~I40E_FLAG_IN_NETPOLL; in i40e_netpoll()
3502 static int i40e_pf_txq_wait(struct i40e_pf *pf, int pf_q, bool enable) in i40e_pf_txq_wait() argument
3508 tx_reg = rd32(&pf->hw, I40E_QTX_ENA(pf_q)); in i40e_pf_txq_wait()
3527 struct i40e_pf *pf = vsi->back; in i40e_vsi_control_tx() local
3528 struct i40e_hw *hw = &pf->hw; in i40e_vsi_control_tx()
3536 i40e_pre_tx_queue_cfg(&pf->hw, pf_q, enable); in i40e_vsi_control_tx()
3561 if (!enable && test_bit(__I40E_PORT_TX_SUSPENDED, &pf->state)) in i40e_vsi_control_tx()
3565 ret = i40e_pf_txq_wait(pf, pf_q, enable); in i40e_vsi_control_tx()
3567 dev_info(&pf->pdev->dev, in i40e_vsi_control_tx()
3591 static int i40e_pf_rxq_wait(struct i40e_pf *pf, int pf_q, bool enable) in i40e_pf_rxq_wait() argument
3597 rx_reg = rd32(&pf->hw, I40E_QRX_ENA(pf_q)); in i40e_pf_rxq_wait()
3616 struct i40e_pf *pf = vsi->back; in i40e_vsi_control_rx() local
3617 struct i40e_hw *hw = &pf->hw; in i40e_vsi_control_rx()
3643 ret = i40e_pf_rxq_wait(pf, pf_q, enable); in i40e_vsi_control_rx()
3645 dev_info(&pf->pdev->dev, in i40e_vsi_control_rx()
3686 struct i40e_pf *pf = vsi->back; in i40e_vsi_free_irq() local
3687 struct i40e_hw *hw = &pf->hw; in i40e_vsi_free_irq()
3692 if (pf->flags & I40E_FLAG_MSIX_ENABLED) { in i40e_vsi_free_irq()
3709 irq_set_affinity_hint(pf->msix_entries[vector].vector, in i40e_vsi_free_irq()
3711 free_irq(pf->msix_entries[vector].vector, in i40e_vsi_free_irq()
3761 free_irq(pf->pdev->irq, pf); in i40e_vsi_free_irq()
3847 static void i40e_reset_interrupt_capability(struct i40e_pf *pf) in i40e_reset_interrupt_capability() argument
3850 if (pf->flags & I40E_FLAG_MSIX_ENABLED) { in i40e_reset_interrupt_capability()
3851 pci_disable_msix(pf->pdev); in i40e_reset_interrupt_capability()
3852 kfree(pf->msix_entries); in i40e_reset_interrupt_capability()
3853 pf->msix_entries = NULL; in i40e_reset_interrupt_capability()
3854 kfree(pf->irq_pile); in i40e_reset_interrupt_capability()
3855 pf->irq_pile = NULL; in i40e_reset_interrupt_capability()
3856 } else if (pf->flags & I40E_FLAG_MSI_ENABLED) { in i40e_reset_interrupt_capability()
3857 pci_disable_msi(pf->pdev); in i40e_reset_interrupt_capability()
3859 pf->flags &= ~(I40E_FLAG_MSIX_ENABLED | I40E_FLAG_MSI_ENABLED); in i40e_reset_interrupt_capability()
3869 static void i40e_clear_interrupt_scheme(struct i40e_pf *pf) in i40e_clear_interrupt_scheme() argument
3873 i40e_stop_misc_vector(pf); in i40e_clear_interrupt_scheme()
3874 if (pf->flags & I40E_FLAG_MSIX_ENABLED) { in i40e_clear_interrupt_scheme()
3875 synchronize_irq(pf->msix_entries[0].vector); in i40e_clear_interrupt_scheme()
3876 free_irq(pf->msix_entries[0].vector, pf); in i40e_clear_interrupt_scheme()
3879 i40e_put_lump(pf->irq_pile, 0, I40E_PILE_VALID_BIT-1); in i40e_clear_interrupt_scheme()
3880 for (i = 0; i < pf->num_alloc_vsi; i++) in i40e_clear_interrupt_scheme()
3881 if (pf->vsi[i]) in i40e_clear_interrupt_scheme()
3882 i40e_vsi_free_q_vectors(pf->vsi[i]); in i40e_clear_interrupt_scheme()
3883 i40e_reset_interrupt_capability(pf); in i40e_clear_interrupt_scheme()
3975 static void i40e_pf_quiesce_all_vsi(struct i40e_pf *pf) in i40e_pf_quiesce_all_vsi() argument
3979 for (v = 0; v < pf->num_alloc_vsi; v++) { in i40e_pf_quiesce_all_vsi()
3980 if (pf->vsi[v]) in i40e_pf_quiesce_all_vsi()
3981 i40e_quiesce_vsi(pf->vsi[v]); in i40e_pf_quiesce_all_vsi()
3989 static void i40e_pf_unquiesce_all_vsi(struct i40e_pf *pf) in i40e_pf_unquiesce_all_vsi() argument
3993 for (v = 0; v < pf->num_alloc_vsi; v++) { in i40e_pf_unquiesce_all_vsi()
3994 if (pf->vsi[v]) in i40e_pf_unquiesce_all_vsi()
3995 i40e_unquiesce_vsi(pf->vsi[v]); in i40e_pf_unquiesce_all_vsi()
4008 struct i40e_pf *pf = vsi->back; in i40e_vsi_wait_txq_disabled() local
4014 ret = i40e_pf_txq_wait(pf, pf_q, false); in i40e_vsi_wait_txq_disabled()
4016 dev_info(&pf->pdev->dev, in i40e_vsi_wait_txq_disabled()
4033 static int i40e_pf_wait_txq_disabled(struct i40e_pf *pf) in i40e_pf_wait_txq_disabled() argument
4037 for (v = 0; v < pf->hw.func_caps.num_vsis; v++) { in i40e_pf_wait_txq_disabled()
4039 if (pf->vsi[v] && pf->vsi[v]->type != I40E_VSI_FCOE) { in i40e_pf_wait_txq_disabled()
4040 ret = i40e_vsi_wait_txq_disabled(pf->vsi[v]); in i40e_pf_wait_txq_disabled()
4057 static u8 i40e_get_iscsi_tc_map(struct i40e_pf *pf) in i40e_get_iscsi_tc_map() argument
4060 struct i40e_hw *hw = &pf->hw; in i40e_get_iscsi_tc_map()
4131 static u8 i40e_pf_get_num_tc(struct i40e_pf *pf) in i40e_pf_get_num_tc() argument
4133 struct i40e_hw *hw = &pf->hw; in i40e_pf_get_num_tc()
4139 if (!(pf->flags & I40E_FLAG_DCB_ENABLED)) in i40e_pf_get_num_tc()
4143 if (!(pf->flags & I40E_FLAG_MFP_ENABLED)) in i40e_pf_get_num_tc()
4147 if (pf->hw.func_caps.iscsi) in i40e_pf_get_num_tc()
4148 enabled_tc = i40e_get_iscsi_tc_map(pf); in i40e_pf_get_num_tc()
4167 static u8 i40e_pf_get_default_tc(struct i40e_pf *pf) in i40e_pf_get_default_tc() argument
4169 u8 enabled_tc = pf->hw.func_caps.enabled_tcmap; in i40e_pf_get_default_tc()
4190 static u8 i40e_pf_get_tc_map(struct i40e_pf *pf) in i40e_pf_get_tc_map() argument
4193 if (!(pf->flags & I40E_FLAG_DCB_ENABLED)) in i40e_pf_get_tc_map()
4194 return i40e_pf_get_default_tc(pf); in i40e_pf_get_tc_map()
4197 if (!(pf->flags & I40E_FLAG_MFP_ENABLED)) in i40e_pf_get_tc_map()
4198 return i40e_dcb_get_enabled_tc(&pf->hw.local_dcbx_config); in i40e_pf_get_tc_map()
4201 if (pf->hw.func_caps.iscsi) in i40e_pf_get_tc_map()
4202 return i40e_get_iscsi_tc_map(pf); in i40e_pf_get_tc_map()
4204 return i40e_pf_get_default_tc(pf); in i40e_pf_get_tc_map()
4217 struct i40e_pf *pf = vsi->back; in i40e_vsi_get_bw_info() local
4218 struct i40e_hw *hw = &pf->hw; in i40e_vsi_get_bw_info()
4226 dev_info(&pf->pdev->dev, in i40e_vsi_get_bw_info()
4228 aq_ret, pf->hw.aq.asq_last_status); in i40e_vsi_get_bw_info()
4236 dev_info(&pf->pdev->dev, in i40e_vsi_get_bw_info()
4238 aq_ret, pf->hw.aq.asq_last_status); in i40e_vsi_get_bw_info()
4243 dev_info(&pf->pdev->dev, in i40e_vsi_get_bw_info()
4308 struct i40e_pf *pf = vsi->back; in i40e_vsi_config_netdev_tc() local
4309 struct i40e_hw *hw = &pf->hw; in i40e_vsi_config_netdev_tc()
4454 struct i40e_pf *pf = veb->pf; in i40e_veb_config_tc() local
4471 ret = i40e_aq_config_switch_comp_bw_config(&pf->hw, veb->seid, in i40e_veb_config_tc()
4474 dev_info(&pf->pdev->dev, in i40e_veb_config_tc()
4476 pf->hw.aq.asq_last_status); in i40e_veb_config_tc()
4483 dev_info(&pf->pdev->dev, in i40e_veb_config_tc()
4485 pf->hw.aq.asq_last_status); in i40e_veb_config_tc()
4501 static void i40e_dcb_reconfigure(struct i40e_pf *pf) in i40e_dcb_reconfigure() argument
4508 tc_map = i40e_pf_get_tc_map(pf); in i40e_dcb_reconfigure()
4510 if (!pf->veb[v]) in i40e_dcb_reconfigure()
4512 ret = i40e_veb_config_tc(pf->veb[v], tc_map); in i40e_dcb_reconfigure()
4514 dev_info(&pf->pdev->dev, in i40e_dcb_reconfigure()
4516 pf->veb[v]->seid); in i40e_dcb_reconfigure()
4522 for (v = 0; v < pf->num_alloc_vsi; v++) { in i40e_dcb_reconfigure()
4523 if (!pf->vsi[v]) in i40e_dcb_reconfigure()
4533 if (v == pf->lan_vsi) in i40e_dcb_reconfigure()
4534 tc_map = i40e_pf_get_tc_map(pf); in i40e_dcb_reconfigure()
4536 tc_map = i40e_pf_get_default_tc(pf); in i40e_dcb_reconfigure()
4538 if (pf->vsi[v]->type == I40E_VSI_FCOE) in i40e_dcb_reconfigure()
4539 tc_map = i40e_get_fcoe_tc_map(pf); in i40e_dcb_reconfigure()
4542 ret = i40e_vsi_config_tc(pf->vsi[v], tc_map); in i40e_dcb_reconfigure()
4544 dev_info(&pf->pdev->dev, in i40e_dcb_reconfigure()
4546 pf->vsi[v]->seid); in i40e_dcb_reconfigure()
4550 i40e_vsi_map_rings_to_vectors(pf->vsi[v]); in i40e_dcb_reconfigure()
4551 if (pf->vsi[v]->netdev) in i40e_dcb_reconfigure()
4552 i40e_dcbnl_set_all(pf->vsi[v]); in i40e_dcb_reconfigure()
4564 static int i40e_resume_port_tx(struct i40e_pf *pf) in i40e_resume_port_tx() argument
4566 struct i40e_hw *hw = &pf->hw; in i40e_resume_port_tx()
4571 dev_info(&pf->pdev->dev, in i40e_resume_port_tx()
4573 pf->hw.aq.asq_last_status); in i40e_resume_port_tx()
4575 set_bit(__I40E_PF_RESET_REQUESTED, &pf->state); in i40e_resume_port_tx()
4576 i40e_service_event_schedule(pf); in i40e_resume_port_tx()
4589 static int i40e_init_pf_dcb(struct i40e_pf *pf) in i40e_init_pf_dcb() argument
4591 struct i40e_hw *hw = &pf->hw; in i40e_init_pf_dcb()
4595 if (((pf->hw.aq.fw_maj_ver == 4) && (pf->hw.aq.fw_min_ver < 33)) || in i40e_init_pf_dcb()
4596 (pf->hw.aq.fw_maj_ver < 4)) in i40e_init_pf_dcb()
4605 dev_info(&pf->pdev->dev, in i40e_init_pf_dcb()
4608 if (pf->flags & I40E_FLAG_MFP_ENABLED) in i40e_init_pf_dcb()
4613 pf->dcbx_cap = DCB_CAP_DCBX_LLD_MANAGED | in i40e_init_pf_dcb()
4616 pf->flags |= I40E_FLAG_DCB_CAPABLE; in i40e_init_pf_dcb()
4619 pf->flags |= I40E_FLAG_DCB_ENABLED; in i40e_init_pf_dcb()
4620 dev_dbg(&pf->pdev->dev, in i40e_init_pf_dcb()
4624 dev_info(&pf->pdev->dev, in i40e_init_pf_dcb()
4626 pf->hw.aq.asq_last_status); in i40e_init_pf_dcb()
4703 struct i40e_pf *pf = vsi->back; in i40e_up_complete() local
4706 if (pf->flags & I40E_FLAG_MSIX_ENABLED) in i40e_up_complete()
4720 if ((pf->hw.phy.link_info.link_info & I40E_AQ_LINK_UP) && in i40e_up_complete()
4728 if ((pf->hw.phy.link_info.link_info & in i40e_up_complete()
4730 (!(pf->hw.phy.link_info.an_info & in i40e_up_complete()
4739 pf->fd_add_err = pf->fd_atr_cnt = 0; in i40e_up_complete()
4740 if (pf->fd_tcp_rule > 0) { in i40e_up_complete()
4741 pf->flags &= ~I40E_FLAG_FD_ATR_ENABLED; in i40e_up_complete()
4742 dev_info(&pf->pdev->dev, "Forcing ATR off, sideband rules for TCP/IPv4 exist\n"); in i40e_up_complete()
4743 pf->fd_tcp_rule = 0; in i40e_up_complete()
4747 i40e_service_event_schedule(pf); in i40e_up_complete()
4761 struct i40e_pf *pf = vsi->back; in i40e_vsi_reinit_locked() local
4764 while (test_and_set_bit(__I40E_CONFIG_BUSY, &pf->state)) in i40e_vsi_reinit_locked()
4775 clear_bit(__I40E_CONFIG_BUSY, &pf->state); in i40e_vsi_reinit_locked()
4831 struct i40e_pf *pf = vsi->back; in i40e_setup_tc() local
4837 if (!(pf->flags & I40E_FLAG_DCB_ENABLED)) { in i40e_setup_tc()
4843 if (pf->flags & I40E_FLAG_MFP_ENABLED) { in i40e_setup_tc()
4849 if (tc > i40e_pf_get_num_tc(pf)) { in i40e_setup_tc()
4896 struct i40e_pf *pf = vsi->back; in i40e_open() local
4900 if (test_bit(__I40E_TESTING, &pf->state) || in i40e_open()
4901 test_bit(__I40E_BAD_EEPROM, &pf->state)) in i40e_open()
4911 wr32(&pf->hw, I40E_GLLAN_TSOMSK_F, be32_to_cpu(TCP_FLAG_PSH | in i40e_open()
4913 wr32(&pf->hw, I40E_GLLAN_TSOMSK_M, be32_to_cpu(TCP_FLAG_PSH | in i40e_open()
4916 wr32(&pf->hw, I40E_GLLAN_TSOMSK_L, be32_to_cpu(TCP_FLAG_CWR) >> 16); in i40e_open()
4935 struct i40e_pf *pf = vsi->back; in i40e_vsi_open() local
4953 dev_driver_string(&pf->pdev->dev), vsi->netdev->name); in i40e_vsi_open()
4971 dev_driver_string(&pf->pdev->dev), in i40e_vsi_open()
4972 dev_name(&pf->pdev->dev)); in i40e_vsi_open()
4994 if (vsi == pf->vsi[pf->lan_vsi]) in i40e_vsi_open()
4995 i40e_do_reset(pf, (1 << __I40E_PF_RESET_REQUESTED)); in i40e_vsi_open()
5007 static void i40e_fdir_filter_exit(struct i40e_pf *pf) in i40e_fdir_filter_exit() argument
5013 &pf->fdir_filter_list, fdir_node) { in i40e_fdir_filter_exit()
5017 pf->fdir_pf_active_filters = 0; in i40e_fdir_filter_exit()
5053 void i40e_do_reset(struct i40e_pf *pf, u32 reset_flags) in i40e_do_reset() argument
5059 if (i40e_check_asq_alive(&pf->hw)) in i40e_do_reset()
5060 i40e_vc_notify_reset(pf); in i40e_do_reset()
5073 dev_dbg(&pf->pdev->dev, "GlobalR requested\n"); in i40e_do_reset()
5074 val = rd32(&pf->hw, I40E_GLGEN_RTRIG); in i40e_do_reset()
5076 wr32(&pf->hw, I40E_GLGEN_RTRIG, val); in i40e_do_reset()
5084 dev_dbg(&pf->pdev->dev, "CoreR requested\n"); in i40e_do_reset()
5085 val = rd32(&pf->hw, I40E_GLGEN_RTRIG); in i40e_do_reset()
5087 wr32(&pf->hw, I40E_GLGEN_RTRIG, val); in i40e_do_reset()
5088 i40e_flush(&pf->hw); in i40e_do_reset()
5100 dev_dbg(&pf->pdev->dev, "PFR requested\n"); in i40e_do_reset()
5101 i40e_handle_reset_warning(pf); in i40e_do_reset()
5107 dev_info(&pf->pdev->dev, in i40e_do_reset()
5109 for (v = 0; v < pf->num_alloc_vsi; v++) { in i40e_do_reset()
5110 struct i40e_vsi *vsi = pf->vsi[v]; in i40e_do_reset()
5113 i40e_vsi_reinit_locked(pf->vsi[v]); in i40e_do_reset()
5124 dev_info(&pf->pdev->dev, "VSI down requested\n"); in i40e_do_reset()
5125 for (v = 0; v < pf->num_alloc_vsi; v++) { in i40e_do_reset()
5126 struct i40e_vsi *vsi = pf->vsi[v]; in i40e_do_reset()
5138 dev_info(&pf->pdev->dev, in i40e_do_reset()
5151 bool i40e_dcb_need_reconfig(struct i40e_pf *pf, in i40e_dcb_need_reconfig() argument
5166 dev_dbg(&pf->pdev->dev, "ETS UP2TC changed.\n"); in i40e_dcb_need_reconfig()
5172 dev_dbg(&pf->pdev->dev, "ETS TC BW Table changed.\n"); in i40e_dcb_need_reconfig()
5177 dev_dbg(&pf->pdev->dev, "ETS TSA Table changed.\n"); in i40e_dcb_need_reconfig()
5185 dev_dbg(&pf->pdev->dev, "PFC config change detected.\n"); in i40e_dcb_need_reconfig()
5193 dev_dbg(&pf->pdev->dev, "APP Table change detected.\n"); in i40e_dcb_need_reconfig()
5196 dev_dbg(&pf->pdev->dev, "%s: need_reconfig=%d\n", __func__, in i40e_dcb_need_reconfig()
5206 static int i40e_handle_lldp_event(struct i40e_pf *pf, in i40e_handle_lldp_event() argument
5211 struct i40e_hw *hw = &pf->hw; in i40e_handle_lldp_event()
5218 if (!(pf->flags & I40E_FLAG_DCB_CAPABLE)) in i40e_handle_lldp_event()
5224 dev_dbg(&pf->pdev->dev, in i40e_handle_lldp_event()
5231 dev_dbg(&pf->pdev->dev, in i40e_handle_lldp_event()
5248 ret = i40e_get_dcb_config(&pf->hw); in i40e_handle_lldp_event()
5250 dev_info(&pf->pdev->dev, "Failed querying DCB configuration data from firmware.\n"); in i40e_handle_lldp_event()
5257 dev_dbg(&pf->pdev->dev, "No change detected in DCBX configuration.\n"); in i40e_handle_lldp_event()
5261 need_reconfig = i40e_dcb_need_reconfig(pf, &tmp_dcbx_cfg, in i40e_handle_lldp_event()
5264 i40e_dcbnl_flush_apps(pf, &tmp_dcbx_cfg, &hw->local_dcbx_config); in i40e_handle_lldp_event()
5271 pf->flags |= I40E_FLAG_DCB_ENABLED; in i40e_handle_lldp_event()
5273 pf->flags &= ~I40E_FLAG_DCB_ENABLED; in i40e_handle_lldp_event()
5275 set_bit(__I40E_PORT_TX_SUSPENDED, &pf->state); in i40e_handle_lldp_event()
5277 i40e_pf_quiesce_all_vsi(pf); in i40e_handle_lldp_event()
5280 i40e_dcb_reconfigure(pf); in i40e_handle_lldp_event()
5282 ret = i40e_resume_port_tx(pf); in i40e_handle_lldp_event()
5284 clear_bit(__I40E_PORT_TX_SUSPENDED, &pf->state); in i40e_handle_lldp_event()
5290 ret = i40e_pf_wait_txq_disabled(pf); in i40e_handle_lldp_event()
5293 set_bit(__I40E_PF_RESET_REQUESTED, &pf->state); in i40e_handle_lldp_event()
5294 i40e_service_event_schedule(pf); in i40e_handle_lldp_event()
5296 i40e_pf_unquiesce_all_vsi(pf); in i40e_handle_lldp_event()
5310 void i40e_do_reset_safe(struct i40e_pf *pf, u32 reset_flags) in i40e_do_reset_safe() argument
5313 i40e_do_reset(pf, reset_flags); in i40e_do_reset_safe()
5325 static void i40e_handle_lan_overflow_event(struct i40e_pf *pf, in i40e_handle_lan_overflow_event() argument
5332 struct i40e_hw *hw = &pf->hw; in i40e_handle_lan_overflow_event()
5336 dev_dbg(&pf->pdev->dev, "overflow Rx Queue Number = %d QTX_CTL=0x%08x\n", in i40e_handle_lan_overflow_event()
5345 vf = &pf->vf[vf_id]; in i40e_handle_lan_overflow_event()
5357 static void i40e_service_event_complete(struct i40e_pf *pf) in i40e_service_event_complete() argument
5359 BUG_ON(!test_bit(__I40E_SERVICE_SCHED, &pf->state)); in i40e_service_event_complete()
5363 clear_bit(__I40E_SERVICE_SCHED, &pf->state); in i40e_service_event_complete()
5370 u32 i40e_get_cur_guaranteed_fd_count(struct i40e_pf *pf) in i40e_get_cur_guaranteed_fd_count() argument
5374 val = rd32(&pf->hw, I40E_PFQF_FDSTAT); in i40e_get_cur_guaranteed_fd_count()
5383 u32 i40e_get_current_fd_count(struct i40e_pf *pf) in i40e_get_current_fd_count() argument
5387 val = rd32(&pf->hw, I40E_PFQF_FDSTAT); in i40e_get_current_fd_count()
5398 u32 i40e_get_global_fd_count(struct i40e_pf *pf) in i40e_get_global_fd_count() argument
5402 val = rd32(&pf->hw, I40E_GLQF_FDCNT_0); in i40e_get_global_fd_count()
5413 void i40e_fdir_check_and_reenable(struct i40e_pf *pf) in i40e_fdir_check_and_reenable() argument
5417 if (test_bit(__I40E_FD_FLUSH_REQUESTED, &pf->state)) in i40e_fdir_check_and_reenable()
5423 fcnt_prog = i40e_get_global_fd_count(pf); in i40e_fdir_check_and_reenable()
5424 fcnt_avail = pf->fdir_pf_filter_count; in i40e_fdir_check_and_reenable()
5426 (pf->fd_add_err == 0) || in i40e_fdir_check_and_reenable()
5427 (i40e_get_current_atr_cnt(pf) < pf->fd_atr_cnt)) { in i40e_fdir_check_and_reenable()
5428 if ((pf->flags & I40E_FLAG_FD_SB_ENABLED) && in i40e_fdir_check_and_reenable()
5429 (pf->auto_disable_flags & I40E_FLAG_FD_SB_ENABLED)) { in i40e_fdir_check_and_reenable()
5430 pf->auto_disable_flags &= ~I40E_FLAG_FD_SB_ENABLED; in i40e_fdir_check_and_reenable()
5431 …dev_info(&pf->pdev->dev, "FD Sideband/ntuple is being enabled since we have space in the table now… in i40e_fdir_check_and_reenable()
5436 if ((pf->flags & I40E_FLAG_FD_ATR_ENABLED) && in i40e_fdir_check_and_reenable()
5437 (pf->auto_disable_flags & I40E_FLAG_FD_ATR_ENABLED)) { in i40e_fdir_check_and_reenable()
5438 pf->auto_disable_flags &= ~I40E_FLAG_FD_ATR_ENABLED; in i40e_fdir_check_and_reenable()
5439 dev_info(&pf->pdev->dev, "ATR is being enabled since we have space in the table now\n"); in i40e_fdir_check_and_reenable()
5450 static void i40e_fdir_flush_and_replay(struct i40e_pf *pf) in i40e_fdir_flush_and_replay() argument
5458 if (!(pf->flags & (I40E_FLAG_FD_SB_ENABLED | I40E_FLAG_FD_ATR_ENABLED))) in i40e_fdir_flush_and_replay()
5461 if (time_after(jiffies, pf->fd_flush_timestamp + in i40e_fdir_flush_and_replay()
5466 min_flush_time = pf->fd_flush_timestamp in i40e_fdir_flush_and_replay()
5468 fd_room = pf->fdir_pf_filter_count - pf->fdir_pf_active_filters; in i40e_fdir_flush_and_replay()
5472 dev_info(&pf->pdev->dev, "ATR disabled, not enough FD filter space.\n"); in i40e_fdir_flush_and_replay()
5476 pf->fd_flush_timestamp = jiffies; in i40e_fdir_flush_and_replay()
5477 pf->flags &= ~I40E_FLAG_FD_ATR_ENABLED; in i40e_fdir_flush_and_replay()
5479 wr32(&pf->hw, I40E_PFQF_CTL_1, in i40e_fdir_flush_and_replay()
5481 i40e_flush(&pf->hw); in i40e_fdir_flush_and_replay()
5482 pf->fd_flush_cnt++; in i40e_fdir_flush_and_replay()
5483 pf->fd_add_err = 0; in i40e_fdir_flush_and_replay()
5487 reg = rd32(&pf->hw, I40E_PFQF_CTL_1); in i40e_fdir_flush_and_replay()
5492 dev_warn(&pf->pdev->dev, "FD table did not flush, needs more time\n"); in i40e_fdir_flush_and_replay()
5495 i40e_fdir_filter_restore(pf->vsi[pf->lan_vsi]); in i40e_fdir_flush_and_replay()
5497 pf->flags |= I40E_FLAG_FD_ATR_ENABLED; in i40e_fdir_flush_and_replay()
5498 clear_bit(__I40E_FD_FLUSH_REQUESTED, &pf->state); in i40e_fdir_flush_and_replay()
5499 dev_info(&pf->pdev->dev, "FD Filter table flushed and FD-SB replayed.\n"); in i40e_fdir_flush_and_replay()
5508 u32 i40e_get_current_atr_cnt(struct i40e_pf *pf) in i40e_get_current_atr_cnt() argument
5510 return i40e_get_current_fd_count(pf) - pf->fdir_pf_active_filters; in i40e_get_current_atr_cnt()
5524 static void i40e_fdir_reinit_subtask(struct i40e_pf *pf) in i40e_fdir_reinit_subtask() argument
5528 if (test_bit(__I40E_DOWN, &pf->state)) in i40e_fdir_reinit_subtask()
5531 if (!(pf->flags & (I40E_FLAG_FD_SB_ENABLED | I40E_FLAG_FD_ATR_ENABLED))) in i40e_fdir_reinit_subtask()
5534 if (test_bit(__I40E_FD_FLUSH_REQUESTED, &pf->state)) in i40e_fdir_reinit_subtask()
5535 i40e_fdir_flush_and_replay(pf); in i40e_fdir_reinit_subtask()
5537 i40e_fdir_check_and_reenable(pf); in i40e_fdir_reinit_subtask()
5585 struct i40e_pf *pf; in i40e_veb_link_event() local
5588 if (!veb || !veb->pf) in i40e_veb_link_event()
5590 pf = veb->pf; in i40e_veb_link_event()
5594 if (pf->veb[i] && (pf->veb[i]->uplink_seid == veb->seid)) in i40e_veb_link_event()
5595 i40e_veb_link_event(pf->veb[i], link_up); in i40e_veb_link_event()
5598 for (i = 0; i < pf->num_alloc_vsi; i++) in i40e_veb_link_event()
5599 if (pf->vsi[i] && (pf->vsi[i]->uplink_seid == veb->seid)) in i40e_veb_link_event()
5600 i40e_vsi_link_event(pf->vsi[i], link_up); in i40e_veb_link_event()
5607 static void i40e_link_event(struct i40e_pf *pf) in i40e_link_event() argument
5610 struct i40e_vsi *vsi = pf->vsi[pf->lan_vsi]; in i40e_link_event()
5614 pf->hw.phy.get_link_info = true; in i40e_link_event()
5616 old_link = (pf->hw.phy.link_info_old.link_info & I40E_AQ_LINK_UP); in i40e_link_event()
5617 new_link = i40e_get_link_status(&pf->hw); in i40e_link_event()
5618 old_link_speed = pf->hw.phy.link_info_old.link_speed; in i40e_link_event()
5619 new_link_speed = pf->hw.phy.link_info.link_speed; in i40e_link_event()
5633 if (pf->lan_veb != I40E_NO_VEB && pf->veb[pf->lan_veb]) in i40e_link_event()
5634 i40e_veb_link_event(pf->veb[pf->lan_veb], new_link); in i40e_link_event()
5638 if (pf->vf) in i40e_link_event()
5639 i40e_vc_notify_link_state(pf); in i40e_link_event()
5641 if (pf->flags & I40E_FLAG_PTP) in i40e_link_event()
5642 i40e_ptp_set_increment(pf); in i40e_link_event()
5652 static void i40e_check_hang_subtask(struct i40e_pf *pf) in i40e_check_hang_subtask() argument
5657 if (test_bit(__I40E_DOWN, &pf->state) || in i40e_check_hang_subtask()
5658 test_bit(__I40E_CONFIG_BUSY, &pf->state)) in i40e_check_hang_subtask()
5667 for (v = 0; v < pf->num_alloc_vsi; v++) { in i40e_check_hang_subtask()
5668 struct i40e_vsi *vsi = pf->vsi[v]; in i40e_check_hang_subtask()
5671 if (!pf->vsi[v] || in i40e_check_hang_subtask()
5684 if (!(pf->flags & I40E_FLAG_MSIX_ENABLED)) { in i40e_check_hang_subtask()
5711 static void i40e_watchdog_subtask(struct i40e_pf *pf) in i40e_watchdog_subtask() argument
5716 if (test_bit(__I40E_DOWN, &pf->state) || in i40e_watchdog_subtask()
5717 test_bit(__I40E_CONFIG_BUSY, &pf->state)) in i40e_watchdog_subtask()
5721 if (time_before(jiffies, (pf->service_timer_previous + in i40e_watchdog_subtask()
5722 pf->service_timer_period))) in i40e_watchdog_subtask()
5724 pf->service_timer_previous = jiffies; in i40e_watchdog_subtask()
5726 i40e_check_hang_subtask(pf); in i40e_watchdog_subtask()
5727 i40e_link_event(pf); in i40e_watchdog_subtask()
5732 for (i = 0; i < pf->num_alloc_vsi; i++) in i40e_watchdog_subtask()
5733 if (pf->vsi[i] && pf->vsi[i]->netdev) in i40e_watchdog_subtask()
5734 i40e_update_stats(pf->vsi[i]); in i40e_watchdog_subtask()
5738 if (pf->veb[i]) in i40e_watchdog_subtask()
5739 i40e_update_veb_stats(pf->veb[i]); in i40e_watchdog_subtask()
5741 i40e_ptp_rx_hang(pf->vsi[pf->lan_vsi]); in i40e_watchdog_subtask()
5748 static void i40e_reset_subtask(struct i40e_pf *pf) in i40e_reset_subtask() argument
5753 if (test_bit(__I40E_REINIT_REQUESTED, &pf->state)) { in i40e_reset_subtask()
5755 clear_bit(__I40E_REINIT_REQUESTED, &pf->state); in i40e_reset_subtask()
5757 if (test_bit(__I40E_PF_RESET_REQUESTED, &pf->state)) { in i40e_reset_subtask()
5759 clear_bit(__I40E_PF_RESET_REQUESTED, &pf->state); in i40e_reset_subtask()
5761 if (test_bit(__I40E_CORE_RESET_REQUESTED, &pf->state)) { in i40e_reset_subtask()
5763 clear_bit(__I40E_CORE_RESET_REQUESTED, &pf->state); in i40e_reset_subtask()
5765 if (test_bit(__I40E_GLOBAL_RESET_REQUESTED, &pf->state)) { in i40e_reset_subtask()
5767 clear_bit(__I40E_GLOBAL_RESET_REQUESTED, &pf->state); in i40e_reset_subtask()
5769 if (test_bit(__I40E_DOWN_REQUESTED, &pf->state)) { in i40e_reset_subtask()
5771 clear_bit(__I40E_DOWN_REQUESTED, &pf->state); in i40e_reset_subtask()
5777 if (test_bit(__I40E_RESET_INTR_RECEIVED, &pf->state)) { in i40e_reset_subtask()
5778 i40e_handle_reset_warning(pf); in i40e_reset_subtask()
5784 !test_bit(__I40E_DOWN, &pf->state) && in i40e_reset_subtask()
5785 !test_bit(__I40E_CONFIG_BUSY, &pf->state)) in i40e_reset_subtask()
5786 i40e_do_reset(pf, reset_flags); in i40e_reset_subtask()
5797 static void i40e_handle_link_event(struct i40e_pf *pf, in i40e_handle_link_event() argument
5800 struct i40e_hw *hw = &pf->hw; in i40e_handle_link_event()
5813 i40e_link_event(pf); in i40e_handle_link_event()
5819 dev_err(&pf->pdev->dev, in i40e_handle_link_event()
5827 static void i40e_clean_adminq_subtask(struct i40e_pf *pf) in i40e_clean_adminq_subtask() argument
5830 struct i40e_hw *hw = &pf->hw; in i40e_clean_adminq_subtask()
5838 if (test_bit(__I40E_RESET_FAILED, &pf->state)) in i40e_clean_adminq_subtask()
5842 val = rd32(&pf->hw, pf->hw.aq.arq.len); in i40e_clean_adminq_subtask()
5845 dev_info(&pf->pdev->dev, "ARQ VF Error detected\n"); in i40e_clean_adminq_subtask()
5849 dev_info(&pf->pdev->dev, "ARQ Overflow Error detected\n"); in i40e_clean_adminq_subtask()
5853 dev_info(&pf->pdev->dev, "ARQ Critical Error detected\n"); in i40e_clean_adminq_subtask()
5857 wr32(&pf->hw, pf->hw.aq.arq.len, val); in i40e_clean_adminq_subtask()
5859 val = rd32(&pf->hw, pf->hw.aq.asq.len); in i40e_clean_adminq_subtask()
5862 dev_info(&pf->pdev->dev, "ASQ VF Error detected\n"); in i40e_clean_adminq_subtask()
5866 dev_info(&pf->pdev->dev, "ASQ Overflow Error detected\n"); in i40e_clean_adminq_subtask()
5870 dev_info(&pf->pdev->dev, "ASQ Critical Error detected\n"); in i40e_clean_adminq_subtask()
5874 wr32(&pf->hw, pf->hw.aq.asq.len, val); in i40e_clean_adminq_subtask()
5886 dev_info(&pf->pdev->dev, "ARQ event error %d\n", ret); in i40e_clean_adminq_subtask()
5894 i40e_handle_link_event(pf, &event); in i40e_clean_adminq_subtask()
5897 ret = i40e_vc_process_vf_msg(pf, in i40e_clean_adminq_subtask()
5905 dev_dbg(&pf->pdev->dev, "ARQ: Update LLDP MIB event received\n"); in i40e_clean_adminq_subtask()
5908 ret = i40e_handle_lldp_event(pf, &event); in i40e_clean_adminq_subtask()
5913 dev_dbg(&pf->pdev->dev, "ARQ LAN queue overflow event received\n"); in i40e_clean_adminq_subtask()
5914 i40e_handle_lan_overflow_event(pf, &event); in i40e_clean_adminq_subtask()
5917 dev_info(&pf->pdev->dev, "ARQ: Msg from other pf\n"); in i40e_clean_adminq_subtask()
5921 i40e_debug(&pf->hw, I40E_DEBUG_NVM, "ARQ NVM operation completed\n"); in i40e_clean_adminq_subtask()
5924 dev_info(&pf->pdev->dev, in i40e_clean_adminq_subtask()
5929 } while (pending && (i++ < pf->adminq_work_limit)); in i40e_clean_adminq_subtask()
5931 clear_bit(__I40E_ADMINQ_EVENT_PENDING, &pf->state); in i40e_clean_adminq_subtask()
5945 static void i40e_verify_eeprom(struct i40e_pf *pf) in i40e_verify_eeprom() argument
5949 err = i40e_diag_eeprom_test(&pf->hw); in i40e_verify_eeprom()
5952 err = i40e_diag_eeprom_test(&pf->hw); in i40e_verify_eeprom()
5954 dev_info(&pf->pdev->dev, "eeprom check failed (%d), Tx/Rx traffic disabled\n", in i40e_verify_eeprom()
5956 set_bit(__I40E_BAD_EEPROM, &pf->state); in i40e_verify_eeprom()
5960 if (!err && test_bit(__I40E_BAD_EEPROM, &pf->state)) { in i40e_verify_eeprom()
5961 dev_info(&pf->pdev->dev, "eeprom check passed, Tx/Rx traffic enabled\n"); in i40e_verify_eeprom()
5962 clear_bit(__I40E_BAD_EEPROM, &pf->state); in i40e_verify_eeprom()
5972 static void i40e_enable_pf_switch_lb(struct i40e_pf *pf) in i40e_enable_pf_switch_lb() argument
5974 struct i40e_vsi *vsi = pf->vsi[pf->lan_vsi]; in i40e_enable_pf_switch_lb()
5978 ctxt.seid = pf->main_vsi_seid; in i40e_enable_pf_switch_lb()
5979 ctxt.pf_num = pf->hw.pf_id; in i40e_enable_pf_switch_lb()
5981 aq_ret = i40e_aq_get_vsi_params(&pf->hw, &ctxt, NULL); in i40e_enable_pf_switch_lb()
5983 dev_info(&pf->pdev->dev, in i40e_enable_pf_switch_lb()
5985 __func__, aq_ret, pf->hw.aq.asq_last_status); in i40e_enable_pf_switch_lb()
5994 dev_info(&pf->pdev->dev, in i40e_enable_pf_switch_lb()
6006 static void i40e_disable_pf_switch_lb(struct i40e_pf *pf) in i40e_disable_pf_switch_lb() argument
6008 struct i40e_vsi *vsi = pf->vsi[pf->lan_vsi]; in i40e_disable_pf_switch_lb()
6012 ctxt.seid = pf->main_vsi_seid; in i40e_disable_pf_switch_lb()
6013 ctxt.pf_num = pf->hw.pf_id; in i40e_disable_pf_switch_lb()
6015 aq_ret = i40e_aq_get_vsi_params(&pf->hw, &ctxt, NULL); in i40e_disable_pf_switch_lb()
6017 dev_info(&pf->pdev->dev, in i40e_disable_pf_switch_lb()
6019 __func__, aq_ret, pf->hw.aq.asq_last_status); in i40e_disable_pf_switch_lb()
6028 dev_info(&pf->pdev->dev, in i40e_disable_pf_switch_lb()
6044 struct i40e_pf *pf = veb->pf; in i40e_config_bridge_mode() local
6046 dev_info(&pf->pdev->dev, "enabling bridge mode: %s\n", in i40e_config_bridge_mode()
6049 i40e_disable_pf_switch_lb(pf); in i40e_config_bridge_mode()
6051 i40e_enable_pf_switch_lb(pf); in i40e_config_bridge_mode()
6066 struct i40e_pf *pf = veb->pf; in i40e_reconstitute_veb() local
6071 for (v = 0; v < pf->num_alloc_vsi && !ctl_vsi; v++) { in i40e_reconstitute_veb()
6072 if (pf->vsi[v] && in i40e_reconstitute_veb()
6073 pf->vsi[v]->veb_idx == veb->idx && in i40e_reconstitute_veb()
6074 pf->vsi[v]->flags & I40E_VSI_FLAG_VEB_OWNER) { in i40e_reconstitute_veb()
6075 ctl_vsi = pf->vsi[v]; in i40e_reconstitute_veb()
6080 dev_info(&pf->pdev->dev, in i40e_reconstitute_veb()
6085 if (ctl_vsi != pf->vsi[pf->lan_vsi]) in i40e_reconstitute_veb()
6086 ctl_vsi->uplink_seid = pf->vsi[pf->lan_vsi]->uplink_seid; in i40e_reconstitute_veb()
6089 dev_info(&pf->pdev->dev, in i40e_reconstitute_veb()
6100 if (pf->flags & I40E_FLAG_VEB_MODE_ENABLED) in i40e_reconstitute_veb()
6107 for (v = 0; v < pf->num_alloc_vsi; v++) { in i40e_reconstitute_veb()
6108 if (!pf->vsi[v] || pf->vsi[v] == ctl_vsi) in i40e_reconstitute_veb()
6111 if (pf->vsi[v]->veb_idx == veb->idx) { in i40e_reconstitute_veb()
6112 struct i40e_vsi *vsi = pf->vsi[v]; in i40e_reconstitute_veb()
6116 dev_info(&pf->pdev->dev, in i40e_reconstitute_veb()
6127 if (pf->veb[veb_idx] && pf->veb[veb_idx]->veb_idx == veb->idx) { in i40e_reconstitute_veb()
6128 pf->veb[veb_idx]->uplink_seid = veb->seid; in i40e_reconstitute_veb()
6129 ret = i40e_reconstitute_veb(pf->veb[veb_idx]); in i40e_reconstitute_veb()
6143 static int i40e_get_capabilities(struct i40e_pf *pf) in i40e_get_capabilities() argument
6157 err = i40e_aq_discover_capabilities(&pf->hw, cap_buf, buf_len, in i40e_get_capabilities()
6164 if (pf->hw.aq.asq_last_status == I40E_AQ_RC_ENOMEM) { in i40e_get_capabilities()
6167 } else if (pf->hw.aq.asq_last_status != I40E_AQ_RC_OK) { in i40e_get_capabilities()
6168 dev_info(&pf->pdev->dev, in i40e_get_capabilities()
6170 pf->hw.aq.asq_last_status); in i40e_get_capabilities()
6175 if (((pf->hw.aq.fw_maj_ver == 2) && (pf->hw.aq.fw_min_ver < 22)) || in i40e_get_capabilities()
6176 (pf->hw.aq.fw_maj_ver < 2)) { in i40e_get_capabilities()
6177 pf->hw.func_caps.num_msix_vectors++; in i40e_get_capabilities()
6178 pf->hw.func_caps.num_msix_vectors_vf++; in i40e_get_capabilities()
6181 if (pf->hw.debug_mask & I40E_DEBUG_USER) in i40e_get_capabilities()
6182 dev_info(&pf->pdev->dev, in i40e_get_capabilities()
6184 pf->hw.pf_id, pf->hw.func_caps.num_vfs, in i40e_get_capabilities()
6185 pf->hw.func_caps.num_msix_vectors, in i40e_get_capabilities()
6186 pf->hw.func_caps.num_msix_vectors_vf, in i40e_get_capabilities()
6187 pf->hw.func_caps.fd_filters_guaranteed, in i40e_get_capabilities()
6188 pf->hw.func_caps.fd_filters_best_effort, in i40e_get_capabilities()
6189 pf->hw.func_caps.num_tx_qp, in i40e_get_capabilities()
6190 pf->hw.func_caps.num_vsis); in i40e_get_capabilities()
6192 #define DEF_NUM_VSI (1 + (pf->hw.func_caps.fcoe ? 1 : 0) \ in i40e_get_capabilities()
6193 + pf->hw.func_caps.num_vfs) in i40e_get_capabilities()
6194 if (pf->hw.revision_id == 0 && (DEF_NUM_VSI > pf->hw.func_caps.num_vsis)) { in i40e_get_capabilities()
6195 dev_info(&pf->pdev->dev, in i40e_get_capabilities()
6197 pf->hw.func_caps.num_vsis, DEF_NUM_VSI); in i40e_get_capabilities()
6198 pf->hw.func_caps.num_vsis = DEF_NUM_VSI; in i40e_get_capabilities()
6210 static void i40e_fdir_sb_setup(struct i40e_pf *pf) in i40e_fdir_sb_setup() argument
6218 if (!rd32(&pf->hw, I40E_GLQF_HKEY(0))) { in i40e_fdir_sb_setup()
6226 wr32(&pf->hw, I40E_GLQF_HKEY(i), hkey[i]); in i40e_fdir_sb_setup()
6229 if (!(pf->flags & I40E_FLAG_FD_SB_ENABLED)) in i40e_fdir_sb_setup()
6234 for (i = 0; i < pf->num_alloc_vsi; i++) { in i40e_fdir_sb_setup()
6235 if (pf->vsi[i] && pf->vsi[i]->type == I40E_VSI_FDIR) { in i40e_fdir_sb_setup()
6236 vsi = pf->vsi[i]; in i40e_fdir_sb_setup()
6243 vsi = i40e_vsi_setup(pf, I40E_VSI_FDIR, in i40e_fdir_sb_setup()
6244 pf->vsi[pf->lan_vsi]->seid, 0); in i40e_fdir_sb_setup()
6246 dev_info(&pf->pdev->dev, "Couldn't create FDir VSI\n"); in i40e_fdir_sb_setup()
6247 pf->flags &= ~I40E_FLAG_FD_SB_ENABLED; in i40e_fdir_sb_setup()
6259 static void i40e_fdir_teardown(struct i40e_pf *pf) in i40e_fdir_teardown() argument
6263 i40e_fdir_filter_exit(pf); in i40e_fdir_teardown()
6264 for (i = 0; i < pf->num_alloc_vsi; i++) { in i40e_fdir_teardown()
6265 if (pf->vsi[i] && pf->vsi[i]->type == I40E_VSI_FDIR) { in i40e_fdir_teardown()
6266 i40e_vsi_release(pf->vsi[i]); in i40e_fdir_teardown()
6278 static void i40e_prep_for_reset(struct i40e_pf *pf) in i40e_prep_for_reset() argument
6280 struct i40e_hw *hw = &pf->hw; in i40e_prep_for_reset()
6284 clear_bit(__I40E_RESET_INTR_RECEIVED, &pf->state); in i40e_prep_for_reset()
6285 if (test_and_set_bit(__I40E_RESET_RECOVERY_PENDING, &pf->state)) in i40e_prep_for_reset()
6288 dev_dbg(&pf->pdev->dev, "Tearing down internal switch for reset\n"); in i40e_prep_for_reset()
6291 i40e_pf_quiesce_all_vsi(pf); in i40e_prep_for_reset()
6293 for (v = 0; v < pf->num_alloc_vsi; v++) { in i40e_prep_for_reset()
6294 if (pf->vsi[v]) in i40e_prep_for_reset()
6295 pf->vsi[v]->seid = 0; in i40e_prep_for_reset()
6298 i40e_shutdown_adminq(&pf->hw); in i40e_prep_for_reset()
6304 dev_warn(&pf->pdev->dev, in i40e_prep_for_reset()
6313 static void i40e_send_version(struct i40e_pf *pf) in i40e_send_version() argument
6322 i40e_aq_send_driver_version(&pf->hw, &dv, NULL); in i40e_send_version()
6330 static void i40e_reset_and_rebuild(struct i40e_pf *pf, bool reinit) in i40e_reset_and_rebuild() argument
6332 struct i40e_hw *hw = &pf->hw; in i40e_reset_and_rebuild()
6343 dev_info(&pf->pdev->dev, "PF reset failed, %d\n", ret); in i40e_reset_and_rebuild()
6344 set_bit(__I40E_RESET_FAILED, &pf->state); in i40e_reset_and_rebuild()
6347 pf->pfr_count++; in i40e_reset_and_rebuild()
6349 if (test_bit(__I40E_DOWN, &pf->state)) in i40e_reset_and_rebuild()
6351 dev_dbg(&pf->pdev->dev, "Rebuilding internal switch\n"); in i40e_reset_and_rebuild()
6354 ret = i40e_init_adminq(&pf->hw); in i40e_reset_and_rebuild()
6356 dev_info(&pf->pdev->dev, "Rebuild AdminQ failed, %d\n", ret); in i40e_reset_and_rebuild()
6361 if (test_and_clear_bit(__I40E_EMP_RESET_INTR_RECEIVED, &pf->state)) in i40e_reset_and_rebuild()
6362 i40e_verify_eeprom(pf); in i40e_reset_and_rebuild()
6365 ret = i40e_get_capabilities(pf); in i40e_reset_and_rebuild()
6367 dev_info(&pf->pdev->dev, "i40e_get_capabilities failed, %d\n", in i40e_reset_and_rebuild()
6374 pf->fcoe_hmc_cntx_num, pf->fcoe_hmc_filt_num); in i40e_reset_and_rebuild()
6376 dev_info(&pf->pdev->dev, "init_lan_hmc failed: %d\n", ret); in i40e_reset_and_rebuild()
6381 dev_info(&pf->pdev->dev, "configure_lan_hmc failed: %d\n", ret); in i40e_reset_and_rebuild()
6386 ret = i40e_init_pf_dcb(pf); in i40e_reset_and_rebuild()
6388 dev_info(&pf->pdev->dev, "DCB init failed %d, disabled\n", ret); in i40e_reset_and_rebuild()
6389 pf->flags &= ~I40E_FLAG_DCB_CAPABLE; in i40e_reset_and_rebuild()
6394 ret = i40e_init_pf_fcoe(pf); in i40e_reset_and_rebuild()
6396 dev_info(&pf->pdev->dev, "init_pf_fcoe failed: %d\n", ret); in i40e_reset_and_rebuild()
6400 ret = i40e_setup_pf_switch(pf, reinit); in i40e_reset_and_rebuild()
6407 ret = i40e_aq_set_phy_int_mask(&pf->hw, in i40e_reset_and_rebuild()
6411 dev_info(&pf->pdev->dev, "set phy mask fail, aq_err %d\n", ret); in i40e_reset_and_rebuild()
6414 ret = i40e_set_fc(&pf->hw, &set_fc_aq_fail, true); in i40e_reset_and_rebuild()
6416 dev_info(&pf->pdev->dev, "set fc fail, aq_err %d\n", ret); in i40e_reset_and_rebuild()
6425 if (pf->vsi[pf->lan_vsi]->uplink_seid != pf->mac_seid) { in i40e_reset_and_rebuild()
6426 dev_dbg(&pf->pdev->dev, "attempting to rebuild switch\n"); in i40e_reset_and_rebuild()
6429 if (!pf->veb[v]) in i40e_reset_and_rebuild()
6432 if (pf->veb[v]->uplink_seid == pf->mac_seid || in i40e_reset_and_rebuild()
6433 pf->veb[v]->uplink_seid == 0) { in i40e_reset_and_rebuild()
6434 ret = i40e_reconstitute_veb(pf->veb[v]); in i40e_reset_and_rebuild()
6445 if (pf->veb[v]->uplink_seid == pf->mac_seid) { in i40e_reset_and_rebuild()
6446 dev_info(&pf->pdev->dev, in i40e_reset_and_rebuild()
6449 pf->vsi[pf->lan_vsi]->uplink_seid in i40e_reset_and_rebuild()
6450 = pf->mac_seid; in i40e_reset_and_rebuild()
6452 } else if (pf->veb[v]->uplink_seid == 0) { in i40e_reset_and_rebuild()
6453 dev_info(&pf->pdev->dev, in i40e_reset_and_rebuild()
6461 if (pf->vsi[pf->lan_vsi]->uplink_seid == pf->mac_seid) { in i40e_reset_and_rebuild()
6462 dev_dbg(&pf->pdev->dev, "attempting to rebuild PF VSI\n"); in i40e_reset_and_rebuild()
6464 ret = i40e_add_vsi(pf->vsi[pf->lan_vsi]); in i40e_reset_and_rebuild()
6466 dev_info(&pf->pdev->dev, in i40e_reset_and_rebuild()
6472 if (((pf->hw.aq.fw_maj_ver == 4) && (pf->hw.aq.fw_min_ver < 33)) || in i40e_reset_and_rebuild()
6473 (pf->hw.aq.fw_maj_ver < 4)) { in i40e_reset_and_rebuild()
6475 ret = i40e_aq_set_link_restart_an(&pf->hw, true, NULL); in i40e_reset_and_rebuild()
6477 dev_info(&pf->pdev->dev, "link restart failed, aq_err=%d\n", in i40e_reset_and_rebuild()
6478 pf->hw.aq.asq_last_status); in i40e_reset_and_rebuild()
6481 if (pf->flags & I40E_FLAG_MSIX_ENABLED) in i40e_reset_and_rebuild()
6482 ret = i40e_setup_misc_vector(pf); in i40e_reset_and_rebuild()
6485 i40e_pf_unquiesce_all_vsi(pf); in i40e_reset_and_rebuild()
6487 if (pf->num_alloc_vfs) { in i40e_reset_and_rebuild()
6488 for (v = 0; v < pf->num_alloc_vfs; v++) in i40e_reset_and_rebuild()
6489 i40e_reset_vf(&pf->vf[v], true); in i40e_reset_and_rebuild()
6493 i40e_send_version(pf); in i40e_reset_and_rebuild()
6496 clear_bit(__I40E_RESET_FAILED, &pf->state); in i40e_reset_and_rebuild()
6498 clear_bit(__I40E_RESET_RECOVERY_PENDING, &pf->state); in i40e_reset_and_rebuild()
6508 static void i40e_handle_reset_warning(struct i40e_pf *pf) in i40e_handle_reset_warning() argument
6510 i40e_prep_for_reset(pf); in i40e_handle_reset_warning()
6511 i40e_reset_and_rebuild(pf, false); in i40e_handle_reset_warning()
6520 static void i40e_handle_mdd_event(struct i40e_pf *pf) in i40e_handle_mdd_event() argument
6522 struct i40e_hw *hw = &pf->hw; in i40e_handle_mdd_event()
6529 if (!test_bit(__I40E_MDD_EVENT_PENDING, &pf->state)) in i40e_handle_mdd_event()
6543 pf->hw.func_caps.base_queue; in i40e_handle_mdd_event()
6544 if (netif_msg_tx_err(pf)) in i40e_handle_mdd_event()
6545 …dev_info(&pf->pdev->dev, "Malicious Driver Detection event 0x%02x on TX queue %d PF number 0x%02x … in i40e_handle_mdd_event()
6558 pf->hw.func_caps.base_queue; in i40e_handle_mdd_event()
6559 if (netif_msg_rx_err(pf)) in i40e_handle_mdd_event()
6560 …dev_info(&pf->pdev->dev, "Malicious Driver Detection event 0x%02x on RX queue %d of function 0x%02… in i40e_handle_mdd_event()
6570 dev_info(&pf->pdev->dev, "TX driver issue detected, PF reset issued\n"); in i40e_handle_mdd_event()
6576 dev_info(&pf->pdev->dev, "RX driver issue detected, PF reset issued\n"); in i40e_handle_mdd_event()
6581 set_bit(__I40E_PF_RESET_REQUESTED, &pf->state); in i40e_handle_mdd_event()
6582 i40e_service_event_schedule(pf); in i40e_handle_mdd_event()
6587 for (i = 0; i < pf->num_alloc_vfs && mdd_detected; i++) { in i40e_handle_mdd_event()
6588 vf = &(pf->vf[i]); in i40e_handle_mdd_event()
6593 dev_info(&pf->pdev->dev, "TX driver issue detected on VF %d\n", in i40e_handle_mdd_event()
6601 dev_info(&pf->pdev->dev, "RX driver issue detected on VF %d\n", in i40e_handle_mdd_event()
6606 dev_info(&pf->pdev->dev, in i40e_handle_mdd_event()
6608 dev_info(&pf->pdev->dev, in i40e_handle_mdd_event()
6615 clear_bit(__I40E_MDD_EVENT_PENDING, &pf->state); in i40e_handle_mdd_event()
6627 static void i40e_sync_vxlan_filters_subtask(struct i40e_pf *pf) in i40e_sync_vxlan_filters_subtask() argument
6629 struct i40e_hw *hw = &pf->hw; in i40e_sync_vxlan_filters_subtask()
6634 if (!(pf->flags & I40E_FLAG_VXLAN_FILTER_SYNC)) in i40e_sync_vxlan_filters_subtask()
6637 pf->flags &= ~I40E_FLAG_VXLAN_FILTER_SYNC; in i40e_sync_vxlan_filters_subtask()
6640 if (pf->pending_vxlan_bitmap & (1 << i)) { in i40e_sync_vxlan_filters_subtask()
6641 pf->pending_vxlan_bitmap &= ~(1 << i); in i40e_sync_vxlan_filters_subtask()
6642 port = pf->vxlan_ports[i]; in i40e_sync_vxlan_filters_subtask()
6651 dev_info(&pf->pdev->dev, in i40e_sync_vxlan_filters_subtask()
6655 pf->hw.aq.asq_last_status); in i40e_sync_vxlan_filters_subtask()
6656 pf->vxlan_ports[i] = 0; in i40e_sync_vxlan_filters_subtask()
6669 struct i40e_pf *pf = container_of(work, in i40e_service_task() local
6675 if (test_bit(__I40E_RESET_RECOVERY_PENDING, &pf->state)) { in i40e_service_task()
6676 i40e_service_event_complete(pf); in i40e_service_task()
6680 i40e_reset_subtask(pf); in i40e_service_task()
6681 i40e_handle_mdd_event(pf); in i40e_service_task()
6682 i40e_vc_process_vflr_event(pf); in i40e_service_task()
6683 i40e_watchdog_subtask(pf); in i40e_service_task()
6684 i40e_fdir_reinit_subtask(pf); in i40e_service_task()
6685 i40e_sync_filters_subtask(pf); in i40e_service_task()
6687 i40e_sync_vxlan_filters_subtask(pf); in i40e_service_task()
6689 i40e_clean_adminq_subtask(pf); in i40e_service_task()
6691 i40e_service_event_complete(pf); in i40e_service_task()
6697 if (time_after(jiffies, (start_time + pf->service_timer_period)) || in i40e_service_task()
6698 test_bit(__I40E_ADMINQ_EVENT_PENDING, &pf->state) || in i40e_service_task()
6699 test_bit(__I40E_MDD_EVENT_PENDING, &pf->state) || in i40e_service_task()
6700 test_bit(__I40E_VFLR_EVENT_PENDING, &pf->state)) in i40e_service_task()
6701 i40e_service_event_schedule(pf); in i40e_service_task()
6710 struct i40e_pf *pf = (struct i40e_pf *)data; in i40e_service_timer() local
6712 mod_timer(&pf->service_timer, in i40e_service_timer()
6713 round_jiffies(jiffies + pf->service_timer_period)); in i40e_service_timer()
6714 i40e_service_event_schedule(pf); in i40e_service_timer()
6723 struct i40e_pf *pf = vsi->back; in i40e_set_num_rings_in_vsi() local
6727 vsi->alloc_queue_pairs = pf->num_lan_qps; in i40e_set_num_rings_in_vsi()
6730 if (pf->flags & I40E_FLAG_MSIX_ENABLED) in i40e_set_num_rings_in_vsi()
6731 vsi->num_q_vectors = pf->num_lan_msix; in i40e_set_num_rings_in_vsi()
6745 vsi->alloc_queue_pairs = pf->num_vmdq_qps; in i40e_set_num_rings_in_vsi()
6748 vsi->num_q_vectors = pf->num_vmdq_msix; in i40e_set_num_rings_in_vsi()
6752 vsi->alloc_queue_pairs = pf->num_vf_qps; in i40e_set_num_rings_in_vsi()
6759 vsi->alloc_queue_pairs = pf->num_fcoe_qps; in i40e_set_num_rings_in_vsi()
6762 vsi->num_q_vectors = pf->num_fcoe_msix; in i40e_set_num_rings_in_vsi()
6818 static int i40e_vsi_mem_alloc(struct i40e_pf *pf, enum i40e_vsi_type type) in i40e_vsi_mem_alloc() argument
6826 mutex_lock(&pf->switch_mutex); in i40e_vsi_mem_alloc()
6834 i = pf->next_vsi; in i40e_vsi_mem_alloc()
6835 while (i < pf->num_alloc_vsi && pf->vsi[i]) in i40e_vsi_mem_alloc()
6837 if (i >= pf->num_alloc_vsi) { in i40e_vsi_mem_alloc()
6839 while (i < pf->next_vsi && pf->vsi[i]) in i40e_vsi_mem_alloc()
6843 if (i < pf->num_alloc_vsi && !pf->vsi[i]) { in i40e_vsi_mem_alloc()
6849 pf->next_vsi = ++i; in i40e_vsi_mem_alloc()
6857 vsi->back = pf; in i40e_vsi_mem_alloc()
6861 vsi->rx_itr_setting = pf->rx_itr_default; in i40e_vsi_mem_alloc()
6862 vsi->tx_itr_setting = pf->tx_itr_default; in i40e_vsi_mem_alloc()
6864 pf->rss_table_size : 64; in i40e_vsi_mem_alloc()
6881 pf->vsi[vsi_idx] = vsi; in i40e_vsi_mem_alloc()
6886 pf->next_vsi = i - 1; in i40e_vsi_mem_alloc()
6889 mutex_unlock(&pf->switch_mutex); in i40e_vsi_mem_alloc()
6919 struct i40e_pf *pf; in i40e_vsi_clear() local
6926 pf = vsi->back; in i40e_vsi_clear()
6928 mutex_lock(&pf->switch_mutex); in i40e_vsi_clear()
6929 if (!pf->vsi[vsi->idx]) { in i40e_vsi_clear()
6930 dev_err(&pf->pdev->dev, "pf->vsi[%d] is NULL, just free vsi[%d](%p,type %d)\n", in i40e_vsi_clear()
6935 if (pf->vsi[vsi->idx] != vsi) { in i40e_vsi_clear()
6936 dev_err(&pf->pdev->dev, in i40e_vsi_clear()
6938 pf->vsi[vsi->idx]->idx, in i40e_vsi_clear()
6939 pf->vsi[vsi->idx], in i40e_vsi_clear()
6940 pf->vsi[vsi->idx]->type, in i40e_vsi_clear()
6946 i40e_put_lump(pf->qp_pile, vsi->base_queue, vsi->idx); in i40e_vsi_clear()
6947 i40e_put_lump(pf->irq_pile, vsi->base_vector, vsi->idx); in i40e_vsi_clear()
6951 pf->vsi[vsi->idx] = NULL; in i40e_vsi_clear()
6952 if (vsi->idx < pf->next_vsi) in i40e_vsi_clear()
6953 pf->next_vsi = vsi->idx; in i40e_vsi_clear()
6956 mutex_unlock(&pf->switch_mutex); in i40e_vsi_clear()
6987 struct i40e_pf *pf = vsi->back; in i40e_alloc_rings() local
7002 tx_ring->dev = &pf->pdev->dev; in i40e_alloc_rings()
7014 rx_ring->dev = &pf->pdev->dev; in i40e_alloc_rings()
7018 if (pf->flags & I40E_FLAG_16BYTE_RX_DESC_ENABLED) in i40e_alloc_rings()
7039 static int i40e_reserve_msix_vectors(struct i40e_pf *pf, int vectors) in i40e_reserve_msix_vectors() argument
7041 vectors = pci_enable_msix_range(pf->pdev, pf->msix_entries, in i40e_reserve_msix_vectors()
7044 dev_info(&pf->pdev->dev, in i40e_reserve_msix_vectors()
7060 static int i40e_init_msix(struct i40e_pf *pf) in i40e_init_msix() argument
7062 struct i40e_hw *hw = &pf->hw; in i40e_init_msix()
7067 if (!(pf->flags & I40E_FLAG_MSIX_ENABLED)) in i40e_init_msix()
7097 pf->num_lan_msix = min_t(int, num_online_cpus(), vectors_left); in i40e_init_msix()
7098 vectors_left -= pf->num_lan_msix; in i40e_init_msix()
7099 v_budget += pf->num_lan_msix; in i40e_init_msix()
7102 if (pf->flags & I40E_FLAG_FD_SB_ENABLED) { in i40e_init_msix()
7107 pf->flags &= ~I40E_FLAG_FD_SB_ENABLED; in i40e_init_msix()
7113 if (pf->flags & I40E_FLAG_FCOE_ENABLED) { in i40e_init_msix()
7115 pf->num_fcoe_msix = 0; in i40e_init_msix()
7116 else if (vectors_left >= pf->num_fcoe_qps) in i40e_init_msix()
7117 pf->num_fcoe_msix = pf->num_fcoe_qps; in i40e_init_msix()
7119 pf->num_fcoe_msix = 1; in i40e_init_msix()
7120 v_budget += pf->num_fcoe_msix; in i40e_init_msix()
7121 vectors_left -= pf->num_fcoe_msix; in i40e_init_msix()
7126 if (pf->flags & I40E_FLAG_VMDQ_ENABLED) { in i40e_init_msix()
7127 int vmdq_vecs_wanted = pf->num_vmdq_vsis * pf->num_vmdq_qps; in i40e_init_msix()
7137 pf->num_vmdq_qps = 1; in i40e_init_msix()
7138 pf->num_vmdq_msix = pf->num_vmdq_qps; in i40e_init_msix()
7144 pf->msix_entries = kcalloc(v_budget, sizeof(struct msix_entry), in i40e_init_msix()
7146 if (!pf->msix_entries) in i40e_init_msix()
7150 pf->msix_entries[i].entry = i; in i40e_init_msix()
7151 v_actual = i40e_reserve_msix_vectors(pf, v_budget); in i40e_init_msix()
7160 pf->num_fcoe_qps = 0; in i40e_init_msix()
7161 pf->num_fcoe_msix = 0; in i40e_init_msix()
7163 pf->num_vmdq_msix = 0; in i40e_init_msix()
7167 pf->flags &= ~I40E_FLAG_MSIX_ENABLED; in i40e_init_msix()
7168 kfree(pf->msix_entries); in i40e_init_msix()
7169 pf->msix_entries = NULL; in i40e_init_msix()
7174 pf->num_vmdq_vsis = 0; in i40e_init_msix()
7175 pf->num_vmdq_qps = 0; in i40e_init_msix()
7176 pf->num_lan_qps = 1; in i40e_init_msix()
7177 pf->num_lan_msix = 1; in i40e_init_msix()
7186 pf->num_vmdq_msix = 1; /* force VMDqs to only one vector */ in i40e_init_msix()
7187 pf->num_vmdq_vsis = 1; in i40e_init_msix()
7188 pf->num_vmdq_qps = 1; in i40e_init_msix()
7189 pf->flags &= ~I40E_FLAG_FD_SB_ENABLED; in i40e_init_msix()
7194 pf->num_lan_msix = 1; in i40e_init_msix()
7199 if (pf->flags & I40E_FLAG_FCOE_ENABLED) { in i40e_init_msix()
7200 pf->num_lan_msix = 1; in i40e_init_msix()
7201 pf->num_fcoe_msix = 1; in i40e_init_msix()
7204 pf->num_lan_msix = 2; in i40e_init_msix()
7210 if (pf->flags & I40E_FLAG_FCOE_ENABLED) { in i40e_init_msix()
7211 pf->num_fcoe_msix = 1; in i40e_init_msix()
7216 pf->num_lan_msix = min_t(int, vec, pf->num_lan_qps); in i40e_init_msix()
7221 if ((pf->flags & I40E_FLAG_VMDQ_ENABLED) && in i40e_init_msix()
7222 (pf->num_vmdq_msix == 0)) { in i40e_init_msix()
7223 dev_info(&pf->pdev->dev, "VMDq disabled, not enough MSI-X vectors\n"); in i40e_init_msix()
7224 pf->flags &= ~I40E_FLAG_VMDQ_ENABLED; in i40e_init_msix()
7228 if ((pf->flags & I40E_FLAG_FCOE_ENABLED) && (pf->num_fcoe_msix == 0)) { in i40e_init_msix()
7229 dev_info(&pf->pdev->dev, "FCOE disabled, not enough MSI-X vectors\n"); in i40e_init_msix()
7230 pf->flags &= ~I40E_FLAG_FCOE_ENABLED; in i40e_init_msix()
7277 struct i40e_pf *pf = vsi->back; in i40e_vsi_alloc_q_vectors() local
7282 if (pf->flags & I40E_FLAG_MSIX_ENABLED) in i40e_vsi_alloc_q_vectors()
7284 else if (vsi == pf->vsi[pf->lan_vsi]) in i40e_vsi_alloc_q_vectors()
7308 static int i40e_init_interrupt_scheme(struct i40e_pf *pf) in i40e_init_interrupt_scheme() argument
7313 if (pf->flags & I40E_FLAG_MSIX_ENABLED) { in i40e_init_interrupt_scheme()
7314 vectors = i40e_init_msix(pf); in i40e_init_interrupt_scheme()
7316 pf->flags &= ~(I40E_FLAG_MSIX_ENABLED | in i40e_init_interrupt_scheme()
7328 i40e_determine_queue_usage(pf); in i40e_init_interrupt_scheme()
7332 if (!(pf->flags & I40E_FLAG_MSIX_ENABLED) && in i40e_init_interrupt_scheme()
7333 (pf->flags & I40E_FLAG_MSI_ENABLED)) { in i40e_init_interrupt_scheme()
7334 dev_info(&pf->pdev->dev, "MSI-X not available, trying MSI\n"); in i40e_init_interrupt_scheme()
7335 vectors = pci_enable_msi(pf->pdev); in i40e_init_interrupt_scheme()
7337 dev_info(&pf->pdev->dev, "MSI init failed - %d\n", in i40e_init_interrupt_scheme()
7339 pf->flags &= ~I40E_FLAG_MSI_ENABLED; in i40e_init_interrupt_scheme()
7344 if (!(pf->flags & (I40E_FLAG_MSIX_ENABLED | I40E_FLAG_MSI_ENABLED))) in i40e_init_interrupt_scheme()
7345 dev_info(&pf->pdev->dev, "MSI-X and MSI not available, falling back to Legacy IRQ\n"); in i40e_init_interrupt_scheme()
7349 pf->irq_pile = kzalloc(size, GFP_KERNEL); in i40e_init_interrupt_scheme()
7350 if (!pf->irq_pile) { in i40e_init_interrupt_scheme()
7351 dev_err(&pf->pdev->dev, "error allocating irq_pile memory\n"); in i40e_init_interrupt_scheme()
7354 pf->irq_pile->num_entries = vectors; in i40e_init_interrupt_scheme()
7355 pf->irq_pile->search_hint = 0; in i40e_init_interrupt_scheme()
7358 (void)i40e_get_lump(pf, pf->irq_pile, 1, I40E_PILE_VALID_BIT - 1); in i40e_init_interrupt_scheme()
7371 static int i40e_setup_misc_vector(struct i40e_pf *pf) in i40e_setup_misc_vector() argument
7373 struct i40e_hw *hw = &pf->hw; in i40e_setup_misc_vector()
7379 if (!test_bit(__I40E_RESET_RECOVERY_PENDING, &pf->state)) { in i40e_setup_misc_vector()
7380 err = request_irq(pf->msix_entries[0].vector, in i40e_setup_misc_vector()
7381 i40e_intr, 0, pf->int_name, pf); in i40e_setup_misc_vector()
7383 dev_info(&pf->pdev->dev, in i40e_setup_misc_vector()
7385 pf->int_name, err); in i40e_setup_misc_vector()
7390 i40e_enable_misc_int_causes(pf); in i40e_setup_misc_vector()
7398 i40e_irq_dynamic_enable_icr0(pf); in i40e_setup_misc_vector()
7407 static int i40e_config_rss(struct i40e_pf *pf) in i40e_config_rss() argument
7410 struct i40e_vsi *vsi = pf->vsi[pf->lan_vsi]; in i40e_config_rss()
7411 struct i40e_hw *hw = &pf->hw; in i40e_config_rss()
7428 vsi->rss_size = min_t(int, pf->rss_size, vsi->num_queue_pairs); in i40e_config_rss()
7432 if (pf->rss_table_size == 512) in i40e_config_rss()
7439 for (i = 0, j = 0; i < pf->rss_table_size; i++, j++) { in i40e_config_rss()
7452 ((0x1 << pf->hw.func_caps.rss_table_entry_width) - 1)); in i40e_config_rss()
7470 int i40e_reconfig_rss_queues(struct i40e_pf *pf, int queue_count) in i40e_reconfig_rss_queues() argument
7472 struct i40e_vsi *vsi = pf->vsi[pf->lan_vsi]; in i40e_reconfig_rss_queues()
7475 if (!(pf->flags & I40E_FLAG_RSS_ENABLED)) in i40e_reconfig_rss_queues()
7478 new_rss_size = min_t(int, queue_count, pf->rss_size_max); in i40e_reconfig_rss_queues()
7482 i40e_prep_for_reset(pf); in i40e_reconfig_rss_queues()
7484 pf->rss_size = new_rss_size; in i40e_reconfig_rss_queues()
7486 i40e_reset_and_rebuild(pf, true); in i40e_reconfig_rss_queues()
7487 i40e_config_rss(pf); in i40e_reconfig_rss_queues()
7489 dev_info(&pf->pdev->dev, "RSS count: %d\n", pf->rss_size); in i40e_reconfig_rss_queues()
7490 return pf->rss_size; in i40e_reconfig_rss_queues()
7497 i40e_status i40e_get_npar_bw_setting(struct i40e_pf *pf) in i40e_get_npar_bw_setting() argument
7503 status = i40e_read_bw_from_alt_ram(&pf->hw, &max_bw, &min_bw, in i40e_get_npar_bw_setting()
7508 pf->npar_min_bw = min_bw; in i40e_get_npar_bw_setting()
7510 pf->npar_max_bw = max_bw; in i40e_get_npar_bw_setting()
7520 i40e_status i40e_set_npar_bw_setting(struct i40e_pf *pf) in i40e_set_npar_bw_setting() argument
7526 bw_data.pf_valid_bits = cpu_to_le16(1 << pf->hw.pf_id); in i40e_set_npar_bw_setting()
7527 bw_data.max_bw[pf->hw.pf_id] = pf->npar_max_bw & I40E_ALT_BW_VALUE_MASK; in i40e_set_npar_bw_setting()
7528 bw_data.min_bw[pf->hw.pf_id] = pf->npar_min_bw & I40E_ALT_BW_VALUE_MASK; in i40e_set_npar_bw_setting()
7531 status = i40e_aq_configure_partition_bw(&pf->hw, &bw_data, NULL); in i40e_set_npar_bw_setting()
7540 i40e_status i40e_commit_npar_bw_setting(struct i40e_pf *pf) in i40e_commit_npar_bw_setting() argument
7547 if (pf->hw.partition_id != 1) { in i40e_commit_npar_bw_setting()
7548 dev_info(&pf->pdev->dev, in i40e_commit_npar_bw_setting()
7550 pf->hw.partition_id); in i40e_commit_npar_bw_setting()
7556 ret = i40e_acquire_nvm(&pf->hw, I40E_RESOURCE_READ); in i40e_commit_npar_bw_setting()
7557 last_aq_status = pf->hw.aq.asq_last_status; in i40e_commit_npar_bw_setting()
7559 dev_info(&pf->pdev->dev, in i40e_commit_npar_bw_setting()
7566 ret = i40e_aq_read_nvm(&pf->hw, in i40e_commit_npar_bw_setting()
7573 last_aq_status = pf->hw.aq.asq_last_status; in i40e_commit_npar_bw_setting()
7574 i40e_release_nvm(&pf->hw); in i40e_commit_npar_bw_setting()
7576 dev_info(&pf->pdev->dev, "NVM read error, err %d aq_err %d\n", in i40e_commit_npar_bw_setting()
7585 ret = i40e_acquire_nvm(&pf->hw, I40E_RESOURCE_WRITE); in i40e_commit_npar_bw_setting()
7586 last_aq_status = pf->hw.aq.asq_last_status; in i40e_commit_npar_bw_setting()
7588 dev_info(&pf->pdev->dev, in i40e_commit_npar_bw_setting()
7597 ret = i40e_aq_update_nvm(&pf->hw, in i40e_commit_npar_bw_setting()
7604 last_aq_status = pf->hw.aq.asq_last_status; in i40e_commit_npar_bw_setting()
7605 i40e_release_nvm(&pf->hw); in i40e_commit_npar_bw_setting()
7607 dev_info(&pf->pdev->dev, in i40e_commit_npar_bw_setting()
7623 static int i40e_sw_init(struct i40e_pf *pf) in i40e_sw_init() argument
7628 pf->msg_enable = netif_msg_init(I40E_DEFAULT_MSG_ENABLE, in i40e_sw_init()
7630 pf->hw.debug_mask = pf->msg_enable | I40E_DEBUG_DIAG; in i40e_sw_init()
7633 pf->hw.debug_mask = debug; in i40e_sw_init()
7634 pf->msg_enable = netif_msg_init((debug & ~I40E_DEBUG_USER), in i40e_sw_init()
7639 pf->flags = I40E_FLAG_RX_CSUM_ENABLED | in i40e_sw_init()
7644 pf->flags |= I40E_FLAG_RX_PS_ENABLED; in i40e_sw_init()
7646 pf->flags |= I40E_FLAG_RX_1BUF_ENABLED; in i40e_sw_init()
7649 pf->rx_itr_default = I40E_ITR_DYNAMIC | I40E_ITR_RX_DEF; in i40e_sw_init()
7650 pf->tx_itr_default = I40E_ITR_DYNAMIC | I40E_ITR_TX_DEF; in i40e_sw_init()
7655 pf->rss_size_max = 0x1 << pf->hw.func_caps.rss_table_entry_width; in i40e_sw_init()
7656 pf->rss_size = 1; in i40e_sw_init()
7657 pf->rss_table_size = pf->hw.func_caps.rss_table_size; in i40e_sw_init()
7658 pf->rss_size_max = min_t(int, pf->rss_size_max, in i40e_sw_init()
7659 pf->hw.func_caps.num_tx_qp); in i40e_sw_init()
7660 if (pf->hw.func_caps.rss) { in i40e_sw_init()
7661 pf->flags |= I40E_FLAG_RSS_ENABLED; in i40e_sw_init()
7662 pf->rss_size = min_t(int, pf->rss_size_max, num_online_cpus()); in i40e_sw_init()
7666 if (pf->hw.func_caps.npar_enable || pf->hw.func_caps.mfp_mode_1) { in i40e_sw_init()
7667 pf->flags |= I40E_FLAG_MFP_ENABLED; in i40e_sw_init()
7668 dev_info(&pf->pdev->dev, "MFP mode Enabled\n"); in i40e_sw_init()
7669 if (i40e_get_npar_bw_setting(pf)) in i40e_sw_init()
7670 dev_warn(&pf->pdev->dev, in i40e_sw_init()
7673 dev_info(&pf->pdev->dev, in i40e_sw_init()
7675 pf->npar_min_bw, pf->npar_max_bw); in i40e_sw_init()
7679 if ((pf->hw.func_caps.fd_filters_guaranteed > 0) || in i40e_sw_init()
7680 (pf->hw.func_caps.fd_filters_best_effort > 0)) { in i40e_sw_init()
7681 pf->flags |= I40E_FLAG_FD_ATR_ENABLED; in i40e_sw_init()
7682 pf->atr_sample_rate = I40E_DEFAULT_ATR_SAMPLE_RATE; in i40e_sw_init()
7684 pf->fd_atr_cnt_idx = I40E_FD_ATR_STAT_IDX(pf->hw.pf_id); in i40e_sw_init()
7685 if (!(pf->flags & I40E_FLAG_MFP_ENABLED)) { in i40e_sw_init()
7686 pf->flags |= I40E_FLAG_FD_SB_ENABLED; in i40e_sw_init()
7688 pf->fd_sb_cnt_idx = I40E_FD_SB_STAT_IDX(pf->hw.pf_id); in i40e_sw_init()
7690 dev_info(&pf->pdev->dev, in i40e_sw_init()
7693 pf->fdir_pf_filter_count = in i40e_sw_init()
7694 pf->hw.func_caps.fd_filters_guaranteed; in i40e_sw_init()
7695 pf->hw.fdir_shared_filter_count = in i40e_sw_init()
7696 pf->hw.func_caps.fd_filters_best_effort; in i40e_sw_init()
7699 if (pf->hw.func_caps.vmdq) { in i40e_sw_init()
7700 pf->flags |= I40E_FLAG_VMDQ_ENABLED; in i40e_sw_init()
7701 pf->num_vmdq_vsis = I40E_DEFAULT_NUM_VMDQ_VSI; in i40e_sw_init()
7702 pf->num_vmdq_qps = I40E_DEFAULT_QUEUES_PER_VMDQ; in i40e_sw_init()
7706 err = i40e_init_pf_fcoe(pf); in i40e_sw_init()
7708 dev_info(&pf->pdev->dev, "init_pf_fcoe failed: %d\n", err); in i40e_sw_init()
7712 if (pf->hw.func_caps.num_vfs && pf->hw.partition_id == 1) { in i40e_sw_init()
7713 pf->num_vf_qps = I40E_DEFAULT_QUEUES_PER_VF; in i40e_sw_init()
7714 pf->flags |= I40E_FLAG_SRIOV_ENABLED; in i40e_sw_init()
7715 pf->num_req_vfs = min_t(int, in i40e_sw_init()
7716 pf->hw.func_caps.num_vfs, in i40e_sw_init()
7720 pf->eeprom_version = 0xDEAD; in i40e_sw_init()
7721 pf->lan_veb = I40E_NO_VEB; in i40e_sw_init()
7722 pf->lan_vsi = I40E_NO_VSI; in i40e_sw_init()
7726 + (sizeof(u16) * pf->hw.func_caps.num_tx_qp); in i40e_sw_init()
7727 pf->qp_pile = kzalloc(size, GFP_KERNEL); in i40e_sw_init()
7728 if (!pf->qp_pile) { in i40e_sw_init()
7732 pf->qp_pile->num_entries = pf->hw.func_caps.num_tx_qp; in i40e_sw_init()
7733 pf->qp_pile->search_hint = 0; in i40e_sw_init()
7735 pf->tx_timeout_recovery_level = 1; in i40e_sw_init()
7737 mutex_init(&pf->switch_mutex); in i40e_sw_init()
7740 if (pf->hw.func_caps.npar_enable && (!i40e_get_npar_bw_setting(pf))) in i40e_sw_init()
7741 i40e_set_npar_bw_setting(pf); in i40e_sw_init()
7754 bool i40e_set_ntuple(struct i40e_pf *pf, netdev_features_t features) in i40e_set_ntuple() argument
7763 if (!(pf->flags & I40E_FLAG_FD_SB_ENABLED)) in i40e_set_ntuple()
7765 pf->flags |= I40E_FLAG_FD_SB_ENABLED; in i40e_set_ntuple()
7768 if (pf->flags & I40E_FLAG_FD_SB_ENABLED) { in i40e_set_ntuple()
7770 i40e_fdir_filter_exit(pf); in i40e_set_ntuple()
7772 pf->flags &= ~I40E_FLAG_FD_SB_ENABLED; in i40e_set_ntuple()
7773 pf->auto_disable_flags &= ~I40E_FLAG_FD_SB_ENABLED; in i40e_set_ntuple()
7775 pf->fd_add_err = pf->fd_atr_cnt = pf->fd_tcp_rule = 0; in i40e_set_ntuple()
7776 pf->fdir_pf_active_filters = 0; in i40e_set_ntuple()
7777 pf->flags |= I40E_FLAG_FD_ATR_ENABLED; in i40e_set_ntuple()
7778 dev_info(&pf->pdev->dev, "ATR re-enabled.\n"); in i40e_set_ntuple()
7780 if ((pf->flags & I40E_FLAG_FD_ATR_ENABLED) && in i40e_set_ntuple()
7781 (pf->auto_disable_flags & I40E_FLAG_FD_ATR_ENABLED)) in i40e_set_ntuple()
7782 pf->auto_disable_flags &= ~I40E_FLAG_FD_ATR_ENABLED; in i40e_set_ntuple()
7797 struct i40e_pf *pf = vsi->back; in i40e_set_features() local
7805 need_reset = i40e_set_ntuple(pf, features); in i40e_set_features()
7808 i40e_do_reset(pf, (1 << __I40E_PF_RESET_REQUESTED)); in i40e_set_features()
7821 static u8 i40e_get_vxlan_port_idx(struct i40e_pf *pf, __be16 port) in i40e_get_vxlan_port_idx() argument
7826 if (pf->vxlan_ports[i] == port) in i40e_get_vxlan_port_idx()
7844 struct i40e_pf *pf = vsi->back; in i40e_add_vxlan_port() local
7851 idx = i40e_get_vxlan_port_idx(pf, port); in i40e_add_vxlan_port()
7861 next_idx = i40e_get_vxlan_port_idx(pf, 0); in i40e_add_vxlan_port()
7870 pf->vxlan_ports[next_idx] = port; in i40e_add_vxlan_port()
7871 pf->pending_vxlan_bitmap |= (1 << next_idx); in i40e_add_vxlan_port()
7872 pf->flags |= I40E_FLAG_VXLAN_FILTER_SYNC; in i40e_add_vxlan_port()
7874 dev_info(&pf->pdev->dev, "adding vxlan port %d\n", ntohs(port)); in i40e_add_vxlan_port()
7888 struct i40e_pf *pf = vsi->back; in i40e_del_vxlan_port() local
7894 idx = i40e_get_vxlan_port_idx(pf, port); in i40e_del_vxlan_port()
7901 pf->vxlan_ports[idx] = 0; in i40e_del_vxlan_port()
7902 pf->pending_vxlan_bitmap |= (1 << idx); in i40e_del_vxlan_port()
7903 pf->flags |= I40E_FLAG_VXLAN_FILTER_SYNC; in i40e_del_vxlan_port()
7905 dev_info(&pf->pdev->dev, "deleting vxlan port %d\n", in i40e_del_vxlan_port()
7918 struct i40e_pf *pf = np->vsi->back; in i40e_get_phys_port_id() local
7919 struct i40e_hw *hw = &pf->hw; in i40e_get_phys_port_id()
7921 if (!(pf->flags & I40E_FLAG_PORT_ID_VALID)) in i40e_get_phys_port_id()
7944 struct i40e_pf *pf = np->vsi->back; in i40e_ndo_fdb_add() local
7947 if (!(pf->flags & I40E_FLAG_SRIOV_ENABLED)) in i40e_ndo_fdb_add()
7995 struct i40e_pf *pf = vsi->back; in i40e_ndo_bridge_setlink() local
8001 if (vsi->seid != pf->vsi[pf->lan_vsi]->seid) in i40e_ndo_bridge_setlink()
8006 if (pf->veb[i] && pf->veb[i]->seid == vsi->uplink_seid) in i40e_ndo_bridge_setlink()
8007 veb = pf->veb[i]; in i40e_ndo_bridge_setlink()
8025 veb = i40e_veb_setup(pf, 0, vsi->uplink_seid, vsi->seid, in i40e_ndo_bridge_setlink()
8040 pf->flags |= I40E_FLAG_VEB_MODE_ENABLED; in i40e_ndo_bridge_setlink()
8042 pf->flags &= ~I40E_FLAG_VEB_MODE_ENABLED; in i40e_ndo_bridge_setlink()
8043 i40e_do_reset(pf, BIT_ULL(__I40E_PF_RESET_REQUESTED)); in i40e_ndo_bridge_setlink()
8073 struct i40e_pf *pf = vsi->back; in i40e_ndo_bridge_getlink() local
8078 if (vsi->seid != pf->vsi[pf->lan_vsi]->seid) in i40e_ndo_bridge_getlink()
8083 if (pf->veb[i] && pf->veb[i]->seid == vsi->uplink_seid) in i40e_ndo_bridge_getlink()
8084 veb = pf->veb[i]; in i40e_ndo_bridge_getlink()
8144 struct i40e_pf *pf = vsi->back; in i40e_config_netdev() local
8145 struct i40e_hw *hw = &pf->hw; in i40e_config_netdev()
8180 if (!(pf->flags & I40E_FLAG_MFP_ENABLED)) in i40e_config_netdev()
8187 SET_NETDEV_DEV(netdev, &pf->pdev->dev); in i40e_config_netdev()
8200 pf->vsi[pf->lan_vsi]->netdev->name); in i40e_config_netdev()
8253 struct i40e_pf *pf = vsi->back; in i40e_is_vsi_uplink_mode_veb() local
8259 veb = pf->veb[vsi->veb_idx]; in i40e_is_vsi_uplink_mode_veb()
8279 struct i40e_pf *pf = vsi->back; in i40e_add_vsi() local
8280 struct i40e_hw *hw = &pf->hw; in i40e_add_vsi()
8293 ctxt.seid = pf->main_vsi_seid; in i40e_add_vsi()
8294 ctxt.pf_num = pf->hw.pf_id; in i40e_add_vsi()
8296 ret = i40e_aq_get_vsi_params(&pf->hw, &ctxt, NULL); in i40e_add_vsi()
8299 dev_info(&pf->pdev->dev, in i40e_add_vsi()
8301 ret, pf->hw.aq.asq_last_status); in i40e_add_vsi()
8310 enabled_tc = i40e_pf_get_tc_map(pf); in i40e_add_vsi()
8313 if ((pf->flags & I40E_FLAG_MFP_ENABLED) && in i40e_add_vsi()
8314 !(pf->hw.func_caps.iscsi)) { /* NIC type PF */ in i40e_add_vsi()
8316 ctxt.seid = pf->main_vsi_seid; in i40e_add_vsi()
8317 ctxt.pf_num = pf->hw.pf_id; in i40e_add_vsi()
8322 dev_info(&pf->pdev->dev, in i40e_add_vsi()
8324 pf->hw.aq.asq_last_status); in i40e_add_vsi()
8340 dev_info(&pf->pdev->dev, in i40e_add_vsi()
8343 pf->hw.aq.asq_last_status); in i40e_add_vsi()
8355 if ((pf->flags & I40E_FLAG_VEB_MODE_ENABLED) && in i40e_add_vsi()
8405 if (pf->vf[vsi->vf_id].spoofchk) { in i40e_add_vsi()
8420 dev_info(&pf->pdev->dev, "failed to initialize FCoE VSI\n"); in i40e_add_vsi()
8473 pf->flags |= I40E_FLAG_FILTER_SYNC; in i40e_add_vsi()
8479 dev_info(&pf->pdev->dev, in i40e_add_vsi()
8481 ret, pf->hw.aq.asq_last_status); in i40e_add_vsi()
8500 struct i40e_pf *pf; in i40e_vsi_release() local
8504 pf = vsi->back; in i40e_vsi_release()
8508 dev_info(&pf->pdev->dev, "VSI %d has existing VEB %d\n", in i40e_vsi_release()
8512 if (vsi == pf->vsi[pf->lan_vsi] && in i40e_vsi_release()
8513 !test_bit(__I40E_DOWN, &pf->state)) { in i40e_vsi_release()
8514 dev_info(&pf->pdev->dev, "Can't remove PF VSI\n"); in i40e_vsi_release()
8554 for (n = 0, i = 0; i < pf->num_alloc_vsi; i++) { in i40e_vsi_release()
8555 if (pf->vsi[i] && in i40e_vsi_release()
8556 pf->vsi[i]->uplink_seid == uplink_seid && in i40e_vsi_release()
8557 (pf->vsi[i]->flags & I40E_VSI_FLAG_VEB_OWNER) == 0) { in i40e_vsi_release()
8562 if (!pf->veb[i]) in i40e_vsi_release()
8564 if (pf->veb[i]->uplink_seid == uplink_seid) in i40e_vsi_release()
8566 if (pf->veb[i]->seid == uplink_seid) in i40e_vsi_release()
8567 veb = pf->veb[i]; in i40e_vsi_release()
8588 struct i40e_pf *pf = vsi->back; in i40e_vsi_setup_vectors() local
8591 dev_info(&pf->pdev->dev, "VSI %d has existing q_vectors\n", in i40e_vsi_setup_vectors()
8597 dev_info(&pf->pdev->dev, "VSI %d has non-zero base vector %d\n", in i40e_vsi_setup_vectors()
8604 dev_info(&pf->pdev->dev, in i40e_vsi_setup_vectors()
8612 vsi->base_vector = i40e_get_lump(pf, pf->irq_pile, in i40e_vsi_setup_vectors()
8615 dev_info(&pf->pdev->dev, in i40e_vsi_setup_vectors()
8638 struct i40e_pf *pf = vsi->back; in i40e_vsi_reinit_setup() local
8642 i40e_put_lump(pf->qp_pile, vsi->base_queue, vsi->idx); in i40e_vsi_reinit_setup()
8651 ret = i40e_get_lump(pf, pf->qp_pile, vsi->alloc_queue_pairs, vsi->idx); in i40e_vsi_reinit_setup()
8653 dev_info(&pf->pdev->dev, in i40e_vsi_reinit_setup()
8663 enabled_tc = pf->vsi[pf->lan_vsi]->tc_config.enabled_tc; in i40e_vsi_reinit_setup()
8664 pf->vsi[pf->lan_vsi]->tc_config.enabled_tc = 0; in i40e_vsi_reinit_setup()
8665 pf->vsi[pf->lan_vsi]->seid = pf->main_vsi_seid; in i40e_vsi_reinit_setup()
8666 i40e_vsi_config_tc(pf->vsi[pf->lan_vsi], enabled_tc); in i40e_vsi_reinit_setup()
8685 i40e_aq_delete_element(&pf->hw, vsi->seid, NULL); in i40e_vsi_reinit_setup()
8704 struct i40e_vsi *i40e_vsi_setup(struct i40e_pf *pf, u8 type, in i40e_vsi_setup() argument
8726 if (pf->veb[i] && pf->veb[i]->seid == uplink_seid) { in i40e_vsi_setup()
8727 veb = pf->veb[i]; in i40e_vsi_setup()
8732 if (!veb && uplink_seid != pf->mac_seid) { in i40e_vsi_setup()
8734 for (i = 0; i < pf->num_alloc_vsi; i++) { in i40e_vsi_setup()
8735 if (pf->vsi[i] && pf->vsi[i]->seid == uplink_seid) { in i40e_vsi_setup()
8736 vsi = pf->vsi[i]; in i40e_vsi_setup()
8741 dev_info(&pf->pdev->dev, "no such uplink_seid %d\n", in i40e_vsi_setup()
8746 if (vsi->uplink_seid == pf->mac_seid) in i40e_vsi_setup()
8747 veb = i40e_veb_setup(pf, 0, pf->mac_seid, vsi->seid, in i40e_vsi_setup()
8750 veb = i40e_veb_setup(pf, 0, vsi->uplink_seid, vsi->seid, in i40e_vsi_setup()
8753 if (vsi->seid != pf->vsi[pf->lan_vsi]->seid) { in i40e_vsi_setup()
8763 if (!(pf->flags & I40E_FLAG_VEB_MODE_ENABLED)) { in i40e_vsi_setup()
8765 pf->flags &= ~I40E_FLAG_VEB_MODE_ENABLED; in i40e_vsi_setup()
8770 if (pf->veb[i] && pf->veb[i]->seid == vsi->uplink_seid) in i40e_vsi_setup()
8771 veb = pf->veb[i]; in i40e_vsi_setup()
8774 dev_info(&pf->pdev->dev, "couldn't add VEB\n"); in i40e_vsi_setup()
8783 v_idx = i40e_vsi_mem_alloc(pf, type); in i40e_vsi_setup()
8786 vsi = pf->vsi[v_idx]; in i40e_vsi_setup()
8793 pf->lan_vsi = v_idx; in i40e_vsi_setup()
8797 ret = i40e_get_lump(pf, pf->qp_pile, vsi->alloc_queue_pairs, in i40e_vsi_setup()
8800 dev_info(&pf->pdev->dev, in i40e_vsi_setup()
8865 i40e_aq_delete_element(&pf->hw, vsi->seid, NULL); in i40e_vsi_setup()
8882 struct i40e_pf *pf = veb->pf; in i40e_veb_get_bw_info() local
8883 struct i40e_hw *hw = &pf->hw; in i40e_veb_get_bw_info()
8891 dev_info(&pf->pdev->dev, in i40e_veb_get_bw_info()
8900 dev_info(&pf->pdev->dev, in i40e_veb_get_bw_info()
8930 static int i40e_veb_mem_alloc(struct i40e_pf *pf) in i40e_veb_mem_alloc() argument
8937 mutex_lock(&pf->switch_mutex); in i40e_veb_mem_alloc()
8946 while ((i < I40E_MAX_VEB) && (pf->veb[i] != NULL)) in i40e_veb_mem_alloc()
8958 veb->pf = pf; in i40e_veb_mem_alloc()
8962 pf->veb[i] = veb; in i40e_veb_mem_alloc()
8965 mutex_unlock(&pf->switch_mutex); in i40e_veb_mem_alloc()
8978 struct i40e_pf *pf = branch->pf; in i40e_switch_branch_release() local
8985 if (!pf->veb[i]) in i40e_switch_branch_release()
8987 if (pf->veb[i]->uplink_seid == branch->seid) in i40e_switch_branch_release()
8988 i40e_switch_branch_release(pf->veb[i]); in i40e_switch_branch_release()
8996 for (i = 0; i < pf->num_alloc_vsi; i++) { in i40e_switch_branch_release()
8997 if (!pf->vsi[i]) in i40e_switch_branch_release()
8999 if (pf->vsi[i]->uplink_seid == branch_seid && in i40e_switch_branch_release()
9000 (pf->vsi[i]->flags & I40E_VSI_FLAG_VEB_OWNER) == 0) { in i40e_switch_branch_release()
9001 i40e_vsi_release(pf->vsi[i]); in i40e_switch_branch_release()
9010 if (pf->veb[veb_idx]) in i40e_switch_branch_release()
9011 i40e_veb_release(pf->veb[veb_idx]); in i40e_switch_branch_release()
9023 if (veb->pf) { in i40e_veb_clear()
9024 struct i40e_pf *pf = veb->pf; in i40e_veb_clear() local
9026 mutex_lock(&pf->switch_mutex); in i40e_veb_clear()
9027 if (pf->veb[veb->idx] == veb) in i40e_veb_clear()
9028 pf->veb[veb->idx] = NULL; in i40e_veb_clear()
9029 mutex_unlock(&pf->switch_mutex); in i40e_veb_clear()
9042 struct i40e_pf *pf; in i40e_veb_release() local
9045 pf = veb->pf; in i40e_veb_release()
9048 for (i = 0; i < pf->num_alloc_vsi; i++) { in i40e_veb_release()
9049 if (pf->vsi[i] && pf->vsi[i]->uplink_seid == veb->seid) { in i40e_veb_release()
9051 vsi = pf->vsi[i]; in i40e_veb_release()
9055 dev_info(&pf->pdev->dev, in i40e_veb_release()
9065 if (veb->uplink_seid == pf->mac_seid) in i40e_veb_release()
9071 vsi->uplink_seid = pf->vsi[pf->lan_vsi]->uplink_seid; in i40e_veb_release()
9072 vsi->veb_idx = pf->vsi[pf->lan_vsi]->veb_idx; in i40e_veb_release()
9075 i40e_aq_delete_element(&pf->hw, veb->seid, NULL); in i40e_veb_release()
9091 ret = i40e_aq_add_veb(&veb->pf->hw, veb->uplink_seid, vsi->seid, in i40e_add_veb()
9095 dev_info(&veb->pf->pdev->dev, in i40e_add_veb()
9097 ret, veb->pf->hw.aq.asq_last_status); in i40e_add_veb()
9102 ret = i40e_aq_get_veb_parameters(&veb->pf->hw, veb->seid, NULL, NULL, in i40e_add_veb()
9105 dev_info(&veb->pf->pdev->dev, in i40e_add_veb()
9107 ret, veb->pf->hw.aq.asq_last_status); in i40e_add_veb()
9112 dev_info(&veb->pf->pdev->dev, in i40e_add_veb()
9114 ret, veb->pf->hw.aq.asq_last_status); in i40e_add_veb()
9115 i40e_aq_delete_element(&veb->pf->hw, veb->seid, NULL); in i40e_add_veb()
9142 struct i40e_veb *i40e_veb_setup(struct i40e_pf *pf, u16 flags, in i40e_veb_setup() argument
9153 dev_info(&pf->pdev->dev, in i40e_veb_setup()
9160 for (vsi_idx = 0; vsi_idx < pf->num_alloc_vsi; vsi_idx++) in i40e_veb_setup()
9161 if (pf->vsi[vsi_idx] && pf->vsi[vsi_idx]->seid == vsi_seid) in i40e_veb_setup()
9163 if (vsi_idx >= pf->num_alloc_vsi && vsi_seid != 0) { in i40e_veb_setup()
9164 dev_info(&pf->pdev->dev, "vsi seid %d not found\n", in i40e_veb_setup()
9169 if (uplink_seid && uplink_seid != pf->mac_seid) { in i40e_veb_setup()
9171 if (pf->veb[veb_idx] && in i40e_veb_setup()
9172 pf->veb[veb_idx]->seid == uplink_seid) { in i40e_veb_setup()
9173 uplink_veb = pf->veb[veb_idx]; in i40e_veb_setup()
9178 dev_info(&pf->pdev->dev, in i40e_veb_setup()
9185 veb_idx = i40e_veb_mem_alloc(pf); in i40e_veb_setup()
9188 veb = pf->veb[veb_idx]; in i40e_veb_setup()
9195 ret = i40e_add_veb(veb, pf->vsi[vsi_idx]); in i40e_veb_setup()
9198 if (vsi_idx == pf->lan_vsi) in i40e_veb_setup()
9199 pf->lan_veb = veb->idx; in i40e_veb_setup()
9218 static void i40e_setup_pf_switch_element(struct i40e_pf *pf, in i40e_setup_pf_switch_element() argument
9228 dev_info(&pf->pdev->dev, in i40e_setup_pf_switch_element()
9234 pf->mac_seid = seid; in i40e_setup_pf_switch_element()
9238 if (uplink_seid != pf->mac_seid) in i40e_setup_pf_switch_element()
9240 if (pf->lan_veb == I40E_NO_VEB) { in i40e_setup_pf_switch_element()
9245 if (pf->veb[v] && (pf->veb[v]->seid == seid)) { in i40e_setup_pf_switch_element()
9246 pf->lan_veb = v; in i40e_setup_pf_switch_element()
9250 if (pf->lan_veb == I40E_NO_VEB) { in i40e_setup_pf_switch_element()
9251 v = i40e_veb_mem_alloc(pf); in i40e_setup_pf_switch_element()
9254 pf->lan_veb = v; in i40e_setup_pf_switch_element()
9258 pf->veb[pf->lan_veb]->seid = seid; in i40e_setup_pf_switch_element()
9259 pf->veb[pf->lan_veb]->uplink_seid = pf->mac_seid; in i40e_setup_pf_switch_element()
9260 pf->veb[pf->lan_veb]->pf = pf; in i40e_setup_pf_switch_element()
9261 pf->veb[pf->lan_veb]->veb_idx = I40E_NO_VEB; in i40e_setup_pf_switch_element()
9269 pf->mac_seid = uplink_seid; in i40e_setup_pf_switch_element()
9270 pf->pf_seid = downlink_seid; in i40e_setup_pf_switch_element()
9271 pf->main_vsi_seid = seid; in i40e_setup_pf_switch_element()
9273 dev_info(&pf->pdev->dev, in i40e_setup_pf_switch_element()
9275 pf->pf_seid, pf->main_vsi_seid); in i40e_setup_pf_switch_element()
9286 dev_info(&pf->pdev->dev, "unknown element type=%d seid=%d\n", in i40e_setup_pf_switch_element()
9300 int i40e_fetch_switch_configuration(struct i40e_pf *pf, bool printconfig) in i40e_fetch_switch_configuration() argument
9316 ret = i40e_aq_get_switch_config(&pf->hw, sw_config, in i40e_fetch_switch_configuration()
9320 dev_info(&pf->pdev->dev, in i40e_fetch_switch_configuration()
9322 ret, pf->hw.aq.asq_last_status); in i40e_fetch_switch_configuration()
9331 dev_info(&pf->pdev->dev, in i40e_fetch_switch_configuration()
9339 i40e_setup_pf_switch_element(pf, ele, num_reported, in i40e_fetch_switch_configuration()
9355 static int i40e_setup_pf_switch(struct i40e_pf *pf, bool reinit) in i40e_setup_pf_switch() argument
9360 ret = i40e_fetch_switch_configuration(pf, false); in i40e_setup_pf_switch()
9362 dev_info(&pf->pdev->dev, in i40e_setup_pf_switch()
9364 ret, pf->hw.aq.asq_last_status); in i40e_setup_pf_switch()
9367 i40e_pf_reset_stats(pf); in i40e_setup_pf_switch()
9370 if (pf->lan_vsi == I40E_NO_VSI || reinit) { in i40e_setup_pf_switch()
9377 if (pf->lan_veb != I40E_NO_VEB && pf->veb[pf->lan_veb]) in i40e_setup_pf_switch()
9378 uplink_seid = pf->veb[pf->lan_veb]->seid; in i40e_setup_pf_switch()
9380 uplink_seid = pf->mac_seid; in i40e_setup_pf_switch()
9381 if (pf->lan_vsi == I40E_NO_VSI) in i40e_setup_pf_switch()
9382 vsi = i40e_vsi_setup(pf, I40E_VSI_MAIN, uplink_seid, 0); in i40e_setup_pf_switch()
9384 vsi = i40e_vsi_reinit_setup(pf->vsi[pf->lan_vsi]); in i40e_setup_pf_switch()
9386 dev_info(&pf->pdev->dev, "setup of MAIN VSI failed\n"); in i40e_setup_pf_switch()
9387 i40e_fdir_teardown(pf); in i40e_setup_pf_switch()
9392 u8 enabled_tc = pf->vsi[pf->lan_vsi]->tc_config.enabled_tc; in i40e_setup_pf_switch()
9393 pf->vsi[pf->lan_vsi]->tc_config.enabled_tc = 0; in i40e_setup_pf_switch()
9394 pf->vsi[pf->lan_vsi]->seid = pf->main_vsi_seid; in i40e_setup_pf_switch()
9395 i40e_vsi_config_tc(pf->vsi[pf->lan_vsi], enabled_tc); in i40e_setup_pf_switch()
9397 i40e_vlan_stripping_disable(pf->vsi[pf->lan_vsi]); in i40e_setup_pf_switch()
9399 i40e_fdir_sb_setup(pf); in i40e_setup_pf_switch()
9402 ret = i40e_setup_pf_filter_control(pf); in i40e_setup_pf_switch()
9404 dev_info(&pf->pdev->dev, "setup_pf_filter_control failed: %d\n", in i40e_setup_pf_switch()
9412 if ((pf->flags & I40E_FLAG_RSS_ENABLED)) in i40e_setup_pf_switch()
9413 i40e_config_rss(pf); in i40e_setup_pf_switch()
9416 i40e_aq_get_link_info(&pf->hw, true, NULL, NULL); in i40e_setup_pf_switch()
9417 i40e_link_event(pf); in i40e_setup_pf_switch()
9420 pf->fc_autoneg_status = ((pf->hw.phy.link_info.an_info & in i40e_setup_pf_switch()
9423 i40e_ptp_init(pf); in i40e_setup_pf_switch()
9432 static void i40e_determine_queue_usage(struct i40e_pf *pf) in i40e_determine_queue_usage() argument
9436 pf->num_lan_qps = 0; in i40e_determine_queue_usage()
9438 pf->num_fcoe_qps = 0; in i40e_determine_queue_usage()
9445 queues_left = pf->hw.func_caps.num_tx_qp; in i40e_determine_queue_usage()
9448 !(pf->flags & I40E_FLAG_MSIX_ENABLED)) { in i40e_determine_queue_usage()
9451 pf->rss_size = pf->num_lan_qps = 1; in i40e_determine_queue_usage()
9454 pf->flags &= ~(I40E_FLAG_RSS_ENABLED | in i40e_determine_queue_usage()
9463 } else if (!(pf->flags & (I40E_FLAG_RSS_ENABLED | in i40e_determine_queue_usage()
9468 pf->rss_size = pf->num_lan_qps = 1; in i40e_determine_queue_usage()
9469 queues_left -= pf->num_lan_qps; in i40e_determine_queue_usage()
9471 pf->flags &= ~(I40E_FLAG_RSS_ENABLED | in i40e_determine_queue_usage()
9481 if ((pf->flags & I40E_FLAG_DCB_CAPABLE) && in i40e_determine_queue_usage()
9483 pf->flags &= ~I40E_FLAG_DCB_CAPABLE; in i40e_determine_queue_usage()
9484 dev_info(&pf->pdev->dev, "not enough queues for DCB. DCB is disabled.\n"); in i40e_determine_queue_usage()
9486 pf->num_lan_qps = max_t(int, pf->rss_size_max, in i40e_determine_queue_usage()
9488 pf->num_lan_qps = min_t(int, pf->num_lan_qps, in i40e_determine_queue_usage()
9489 pf->hw.func_caps.num_tx_qp); in i40e_determine_queue_usage()
9491 queues_left -= pf->num_lan_qps; in i40e_determine_queue_usage()
9495 if (pf->flags & I40E_FLAG_FCOE_ENABLED) { in i40e_determine_queue_usage()
9497 pf->num_fcoe_qps = I40E_DEFAULT_FCOE; in i40e_determine_queue_usage()
9499 pf->num_fcoe_qps = I40E_MINIMUM_FCOE; in i40e_determine_queue_usage()
9501 pf->num_fcoe_qps = 0; in i40e_determine_queue_usage()
9502 pf->flags &= ~I40E_FLAG_FCOE_ENABLED; in i40e_determine_queue_usage()
9503 dev_info(&pf->pdev->dev, "not enough queues for FCoE. FCoE feature will be disabled\n"); in i40e_determine_queue_usage()
9506 queues_left -= pf->num_fcoe_qps; in i40e_determine_queue_usage()
9510 if (pf->flags & I40E_FLAG_FD_SB_ENABLED) { in i40e_determine_queue_usage()
9514 pf->flags &= ~I40E_FLAG_FD_SB_ENABLED; in i40e_determine_queue_usage()
9515 …dev_info(&pf->pdev->dev, "not enough queues for Flow Director. Flow Director feature is disabled\n… in i40e_determine_queue_usage()
9519 if ((pf->flags & I40E_FLAG_SRIOV_ENABLED) && in i40e_determine_queue_usage()
9520 pf->num_vf_qps && pf->num_req_vfs && queues_left) { in i40e_determine_queue_usage()
9521 pf->num_req_vfs = min_t(int, pf->num_req_vfs, in i40e_determine_queue_usage()
9522 (queues_left / pf->num_vf_qps)); in i40e_determine_queue_usage()
9523 queues_left -= (pf->num_req_vfs * pf->num_vf_qps); in i40e_determine_queue_usage()
9526 if ((pf->flags & I40E_FLAG_VMDQ_ENABLED) && in i40e_determine_queue_usage()
9527 pf->num_vmdq_vsis && pf->num_vmdq_qps && queues_left) { in i40e_determine_queue_usage()
9528 pf->num_vmdq_vsis = min_t(int, pf->num_vmdq_vsis, in i40e_determine_queue_usage()
9529 (queues_left / pf->num_vmdq_qps)); in i40e_determine_queue_usage()
9530 queues_left -= (pf->num_vmdq_vsis * pf->num_vmdq_qps); in i40e_determine_queue_usage()
9533 pf->queues_left = queues_left; in i40e_determine_queue_usage()
9535 dev_info(&pf->pdev->dev, "fcoe queues = %d\n", pf->num_fcoe_qps); in i40e_determine_queue_usage()
9550 static int i40e_setup_pf_filter_control(struct i40e_pf *pf) in i40e_setup_pf_filter_control() argument
9552 struct i40e_filter_control_settings *settings = &pf->filter_settings; in i40e_setup_pf_filter_control()
9557 if (pf->flags & (I40E_FLAG_FD_SB_ENABLED | I40E_FLAG_FD_ATR_ENABLED)) in i40e_setup_pf_filter_control()
9564 if (i40e_set_filter_control(&pf->hw, settings)) in i40e_setup_pf_filter_control()
9571 static void i40e_print_features(struct i40e_pf *pf) in i40e_print_features() argument
9573 struct i40e_hw *hw = &pf->hw; in i40e_print_features()
9578 dev_err(&pf->pdev->dev, "Features string allocation failed\n"); in i40e_print_features()
9586 buf += sprintf(buf, "VFs: %d ", pf->num_req_vfs); in i40e_print_features()
9589 pf->hw.func_caps.num_vsis, in i40e_print_features()
9590 pf->vsi[pf->lan_vsi]->num_queue_pairs, in i40e_print_features()
9591 pf->flags & I40E_FLAG_RX_PS_ENABLED ? "PS" : "1BUF"); in i40e_print_features()
9593 if (pf->flags & I40E_FLAG_RSS_ENABLED) in i40e_print_features()
9595 if (pf->flags & I40E_FLAG_FD_ATR_ENABLED) in i40e_print_features()
9597 if (pf->flags & I40E_FLAG_FD_SB_ENABLED) { in i40e_print_features()
9601 if (pf->flags & I40E_FLAG_DCB_CAPABLE) in i40e_print_features()
9603 if (pf->flags & I40E_FLAG_PTP) in i40e_print_features()
9606 if (pf->flags & I40E_FLAG_FCOE_ENABLED) in i40e_print_features()
9611 dev_info(&pf->pdev->dev, "%s\n", string); in i40e_print_features()
9630 struct i40e_pf *pf; in i40e_probe() local
9670 pf = kzalloc(sizeof(*pf), GFP_KERNEL); in i40e_probe()
9671 if (!pf) { in i40e_probe()
9675 pf->next_vsi = 0; in i40e_probe()
9676 pf->pdev = pdev; in i40e_probe()
9677 set_bit(__I40E_DOWN, &pf->state); in i40e_probe()
9679 hw = &pf->hw; in i40e_probe()
9680 hw->back = pf; in i40e_probe()
9700 pf->instance = pfs_found; in i40e_probe()
9703 pf->msg_enable = pf->hw.debug_mask; in i40e_probe()
9704 pf->msg_enable = debug; in i40e_probe()
9713 pf->corer_count++; in i40e_probe()
9725 pf->pfr_count++; in i40e_probe()
9731 pf->adminq_work_limit = I40E_AQ_WORK_LIMIT; in i40e_probe()
9733 snprintf(pf->int_name, sizeof(pf->int_name) - 1, in i40e_probe()
9735 dev_driver_string(&pf->pdev->dev), dev_name(&pdev->dev)); in i40e_probe()
9744 pf->hw.fc.requested_mode = I40E_FC_NONE; in i40e_probe()
9763 i40e_verify_eeprom(pf); in i40e_probe()
9770 err = i40e_get_capabilities(pf); in i40e_probe()
9774 err = i40e_sw_init(pf); in i40e_probe()
9782 pf->fcoe_hmc_cntx_num, pf->fcoe_hmc_filt_num); in i40e_probe()
9799 if (((pf->hw.aq.fw_maj_ver == 4) && (pf->hw.aq.fw_min_ver < 3)) || in i40e_probe()
9800 (pf->hw.aq.fw_maj_ver < 4)) { in i40e_probe()
9815 pf->flags |= I40E_FLAG_PORT_ID_VALID; in i40e_probe()
9826 dev_info(&pf->pdev->dev, "SAN MAC: %pM\n", hw->mac.san_addr); in i40e_probe()
9829 pci_set_drvdata(pdev, pf); in i40e_probe()
9832 err = i40e_init_pf_dcb(pf); in i40e_probe()
9835 pf->flags &= ~I40E_FLAG_DCB_CAPABLE; in i40e_probe()
9841 setup_timer(&pf->service_timer, i40e_service_timer, (unsigned long)pf); in i40e_probe()
9842 pf->service_timer_period = HZ; in i40e_probe()
9844 INIT_WORK(&pf->service_task, i40e_service_task); in i40e_probe()
9845 clear_bit(__I40E_SERVICE_SCHED, &pf->state); in i40e_probe()
9846 pf->flags |= I40E_FLAG_NEED_LINK_UPDATE; in i40e_probe()
9847 pf->link_check_timeout = jiffies; in i40e_probe()
9850 pf->wol_en = false; in i40e_probe()
9851 device_set_wakeup_enable(&pf->pdev->dev, pf->wol_en); in i40e_probe()
9854 i40e_determine_queue_usage(pf); in i40e_probe()
9855 err = i40e_init_interrupt_scheme(pf); in i40e_probe()
9864 if (pf->hw.func_caps.num_vsis < I40E_MIN_VSI_ALLOC) in i40e_probe()
9865 pf->num_alloc_vsi = I40E_MIN_VSI_ALLOC; in i40e_probe()
9867 pf->num_alloc_vsi = pf->hw.func_caps.num_vsis; in i40e_probe()
9870 len = sizeof(struct i40e_vsi *) * pf->num_alloc_vsi; in i40e_probe()
9871 pf->vsi = kzalloc(len, GFP_KERNEL); in i40e_probe()
9872 if (!pf->vsi) { in i40e_probe()
9879 if ((pf->flags & I40E_FLAG_SRIOV_ENABLED) && in i40e_probe()
9880 (pf->flags & I40E_FLAG_MSIX_ENABLED) && in i40e_probe()
9881 !test_bit(__I40E_BAD_EEPROM, &pf->state)) { in i40e_probe()
9883 pf->flags |= I40E_FLAG_VEB_MODE_ENABLED; in i40e_probe()
9886 err = i40e_setup_pf_switch(pf, false); in i40e_probe()
9892 for (i = 0; i < pf->num_alloc_vsi; i++) { in i40e_probe()
9893 if (pf->vsi[i] && pf->vsi[i]->type == I40E_VSI_FDIR) { in i40e_probe()
9894 i40e_vsi_open(pf->vsi[i]); in i40e_probe()
9902 err = i40e_aq_set_phy_int_mask(&pf->hw, in i40e_probe()
9906 dev_info(&pf->pdev->dev, "set phy mask fail, aq_err %d\n", err); in i40e_probe()
9908 if (((pf->hw.aq.fw_maj_ver == 4) && (pf->hw.aq.fw_min_ver < 33)) || in i40e_probe()
9909 (pf->hw.aq.fw_maj_ver < 4)) { in i40e_probe()
9911 err = i40e_aq_set_link_restart_an(&pf->hw, true, NULL); in i40e_probe()
9913 dev_info(&pf->pdev->dev, "link restart failed, aq_err=%d\n", in i40e_probe()
9914 pf->hw.aq.asq_last_status); in i40e_probe()
9920 clear_bit(__I40E_DOWN, &pf->state); in i40e_probe()
9927 if (pf->flags & I40E_FLAG_MSIX_ENABLED) { in i40e_probe()
9928 err = i40e_setup_misc_vector(pf); in i40e_probe()
9938 if ((pf->flags & I40E_FLAG_SRIOV_ENABLED) && in i40e_probe()
9939 (pf->flags & I40E_FLAG_MSIX_ENABLED) && in i40e_probe()
9940 !test_bit(__I40E_BAD_EEPROM, &pf->state)) { in i40e_probe()
9952 err = i40e_alloc_vfs(pf, pci_num_vf(pdev)); in i40e_probe()
9963 i40e_dbg_pf_init(pf); in i40e_probe()
9966 i40e_send_version(pf); in i40e_probe()
9969 mod_timer(&pf->service_timer, in i40e_probe()
9970 round_jiffies(jiffies + pf->service_timer_period)); in i40e_probe()
9974 i40e_fcoe_vsi_setup(pf); in i40e_probe()
9978 pcie_capability_read_word(pf->pdev, PCI_EXP_LNKSTA, &link_status); in i40e_probe()
10002 …dev_info(&pf->pdev->dev, "get phy abilities failed, aq_err %d, advertised speed settings may not b… in i40e_probe()
10004 pf->hw.phy.link_info.requested_speeds = abilities.link_speed; in i40e_probe()
10007 i40e_print_features(pf); in i40e_probe()
10013 set_bit(__I40E_DOWN, &pf->state); in i40e_probe()
10014 i40e_clear_interrupt_scheme(pf); in i40e_probe()
10015 kfree(pf->vsi); in i40e_probe()
10017 i40e_reset_interrupt_capability(pf); in i40e_probe()
10018 del_timer_sync(&pf->service_timer); in i40e_probe()
10023 kfree(pf->qp_pile); in i40e_probe()
10030 kfree(pf); in i40e_probe()
10052 struct i40e_pf *pf = pci_get_drvdata(pdev); in i40e_remove() local
10056 i40e_dbg_pf_exit(pf); in i40e_remove()
10058 i40e_ptp_stop(pf); in i40e_remove()
10061 set_bit(__I40E_DOWN, &pf->state); in i40e_remove()
10062 del_timer_sync(&pf->service_timer); in i40e_remove()
10063 cancel_work_sync(&pf->service_task); in i40e_remove()
10064 i40e_fdir_teardown(pf); in i40e_remove()
10066 if (pf->flags & I40E_FLAG_SRIOV_ENABLED) { in i40e_remove()
10067 i40e_free_vfs(pf); in i40e_remove()
10068 pf->flags &= ~I40E_FLAG_SRIOV_ENABLED; in i40e_remove()
10071 i40e_fdir_teardown(pf); in i40e_remove()
10077 if (!pf->veb[i]) in i40e_remove()
10080 if (pf->veb[i]->uplink_seid == pf->mac_seid || in i40e_remove()
10081 pf->veb[i]->uplink_seid == 0) in i40e_remove()
10082 i40e_switch_branch_release(pf->veb[i]); in i40e_remove()
10088 if (pf->vsi[pf->lan_vsi]) in i40e_remove()
10089 i40e_vsi_release(pf->vsi[pf->lan_vsi]); in i40e_remove()
10092 if (pf->hw.hmc.hmc_obj) { in i40e_remove()
10093 ret_code = i40e_shutdown_lan_hmc(&pf->hw); in i40e_remove()
10101 ret_code = i40e_shutdown_adminq(&pf->hw); in i40e_remove()
10108 i40e_clear_interrupt_scheme(pf); in i40e_remove()
10109 for (i = 0; i < pf->num_alloc_vsi; i++) { in i40e_remove()
10110 if (pf->vsi[i]) { in i40e_remove()
10111 i40e_vsi_clear_rings(pf->vsi[i]); in i40e_remove()
10112 i40e_vsi_clear(pf->vsi[i]); in i40e_remove()
10113 pf->vsi[i] = NULL; in i40e_remove()
10118 kfree(pf->veb[i]); in i40e_remove()
10119 pf->veb[i] = NULL; in i40e_remove()
10122 kfree(pf->qp_pile); in i40e_remove()
10123 kfree(pf->vsi); in i40e_remove()
10125 iounmap(pf->hw.hw_addr); in i40e_remove()
10126 kfree(pf); in i40e_remove()
10145 struct i40e_pf *pf = pci_get_drvdata(pdev); in i40e_pci_error_detected() local
10150 if (!test_bit(__I40E_SUSPENDED, &pf->state)) { in i40e_pci_error_detected()
10152 i40e_prep_for_reset(pf); in i40e_pci_error_detected()
10171 struct i40e_pf *pf = pci_get_drvdata(pdev); in i40e_pci_error_slot_reset() local
10187 reg = rd32(&pf->hw, I40E_GLGEN_RTRIG); in i40e_pci_error_slot_reset()
10214 struct i40e_pf *pf = pci_get_drvdata(pdev); in i40e_pci_error_resume() local
10217 if (test_bit(__I40E_SUSPENDED, &pf->state)) in i40e_pci_error_resume()
10221 i40e_handle_reset_warning(pf); in i40e_pci_error_resume()
10231 struct i40e_pf *pf = pci_get_drvdata(pdev); in i40e_shutdown() local
10232 struct i40e_hw *hw = &pf->hw; in i40e_shutdown()
10234 set_bit(__I40E_SUSPENDED, &pf->state); in i40e_shutdown()
10235 set_bit(__I40E_DOWN, &pf->state); in i40e_shutdown()
10237 i40e_prep_for_reset(pf); in i40e_shutdown()
10240 wr32(hw, I40E_PFPM_APM, (pf->wol_en ? I40E_PFPM_APM_APME_MASK : 0)); in i40e_shutdown()
10241 wr32(hw, I40E_PFPM_WUFC, (pf->wol_en ? I40E_PFPM_WUFC_MAG_MASK : 0)); in i40e_shutdown()
10243 i40e_clear_interrupt_scheme(pf); in i40e_shutdown()
10246 pci_wake_from_d3(pdev, pf->wol_en); in i40e_shutdown()
10258 struct i40e_pf *pf = pci_get_drvdata(pdev); in i40e_suspend() local
10259 struct i40e_hw *hw = &pf->hw; in i40e_suspend()
10261 set_bit(__I40E_SUSPENDED, &pf->state); in i40e_suspend()
10262 set_bit(__I40E_DOWN, &pf->state); in i40e_suspend()
10263 del_timer_sync(&pf->service_timer); in i40e_suspend()
10264 cancel_work_sync(&pf->service_task); in i40e_suspend()
10265 i40e_fdir_teardown(pf); in i40e_suspend()
10268 i40e_prep_for_reset(pf); in i40e_suspend()
10271 wr32(hw, I40E_PFPM_APM, (pf->wol_en ? I40E_PFPM_APM_APME_MASK : 0)); in i40e_suspend()
10272 wr32(hw, I40E_PFPM_WUFC, (pf->wol_en ? I40E_PFPM_WUFC_MAG_MASK : 0)); in i40e_suspend()
10274 pci_wake_from_d3(pdev, pf->wol_en); in i40e_suspend()
10286 struct i40e_pf *pf = pci_get_drvdata(pdev); in i40e_resume() local
10309 if (test_and_clear_bit(__I40E_SUSPENDED, &pf->state)) { in i40e_resume()
10310 clear_bit(__I40E_DOWN, &pf->state); in i40e_resume()
10312 i40e_reset_and_rebuild(pf, false); in i40e_resume()