Lines Matching refs:pf

10  * @pf: board private structure
15 ice_init_irq_tracker(struct ice_pf *pf, unsigned int max_vectors,
18 pf->irq_tracker.num_entries = max_vectors;
19 pf->irq_tracker.num_static = num_static;
20 xa_init_flags(&pf->irq_tracker.entries, XA_FLAGS_ALLOC);
25 * @pf: board private structure
27 static void ice_deinit_irq_tracker(struct ice_pf *pf)
29 xa_destroy(&pf->irq_tracker.entries);
34 * @pf: board private structure
37 static void ice_free_irq_res(struct ice_pf *pf, u16 index)
41 entry = xa_erase(&pf->irq_tracker.entries, index);
47 * @pf: board private structure
56 static struct ice_irq_entry *ice_get_irq_res(struct ice_pf *pf, bool dyn_only)
58 struct xa_limit limit = { .max = pf->irq_tracker.num_entries,
60 unsigned int num_static = pf->irq_tracker.num_static;
73 ret = xa_alloc(&pf->irq_tracker.entries, &index, entry, limit,
89 * @pf: board private structure
93 * pf->num_lan_msix and pf->num_rdma_msix values are set based on number of
96 static void ice_reduce_msix_usage(struct ice_pf *pf, int v_remain)
100 if (!ice_is_rdma_ena(pf)) {
101 pf->num_lan_msix = v_remain;
109 dev_warn(ice_pf_to_dev(pf), "Not enough MSI-X vectors to support RDMA.\n");
110 clear_bit(ICE_FLAG_RDMA_ENA, pf->flags);
112 pf->num_rdma_msix = 0;
113 pf->num_lan_msix = ICE_MIN_LAN_TXRX_MSIX;
118 pf->num_rdma_msix = ICE_MIN_RDMA_MSIX;
119 pf->num_lan_msix = v_remain - ICE_MIN_RDMA_MSIX;
123 pf->num_rdma_msix = (v_remain - ICE_RDMA_NUM_AEQ_MSIX) / 2 +
125 pf->num_lan_msix = v_remain - pf->num_rdma_msix;
131 * @pf: board private structure
137 static int ice_ena_msix_range(struct ice_pf *pf)
140 struct device *dev = ice_pf_to_dev(pf);
143 hw_num_msix = pf->hw.func_caps.common_cap.num_msix_vectors;
150 if (test_bit(ICE_FLAG_FD_ENA, pf->flags))
159 pf->num_lan_msix = num_cpus;
160 v_wanted += pf->num_lan_msix;
163 if (ice_is_rdma_ena(pf)) {
164 pf->num_rdma_msix = num_cpus + ICE_RDMA_NUM_AEQ_MSIX;
165 v_wanted += pf->num_rdma_msix;
185 ice_reduce_msix_usage(pf, v_remain);
186 v_wanted = pf->num_lan_msix + pf->num_rdma_msix + v_other;
189 pf->num_lan_msix);
190 if (ice_is_rdma_ena(pf))
192 pf->num_rdma_msix);
196 v_actual = pci_alloc_irq_vectors(pf->pdev, ICE_MIN_MSIX, v_wanted,
210 pci_free_irq_vectors(pf->pdev);
219 ice_reduce_msix_usage(pf, v_remain);
222 pf->num_lan_msix);
224 if (ice_is_rdma_ena(pf))
226 pf->num_rdma_msix);
233 pf->num_rdma_msix = 0;
234 pf->num_lan_msix = 0;
240 * @pf: board private structure
242 void ice_clear_interrupt_scheme(struct ice_pf *pf)
244 pci_free_irq_vectors(pf->pdev);
245 ice_deinit_irq_tracker(pf);
250 * @pf: board private structure to initialize
252 int ice_init_interrupt_scheme(struct ice_pf *pf)
254 int total_vectors = pf->hw.func_caps.common_cap.num_msix_vectors;
257 vectors = ice_ena_msix_range(pf);
262 if (pci_msix_can_alloc_dyn(pf->pdev))
267 ice_init_irq_tracker(pf, max_vectors, vectors);
274 * @pf: board private structure
294 struct msi_map ice_alloc_irq(struct ice_pf *pf, bool dyn_only)
296 int sriov_base_vector = pf->sriov_base_vector;
298 struct device *dev = ice_pf_to_dev(pf);
301 entry = ice_get_irq_res(pf, dyn_only);
309 if (pci_msix_can_alloc_dyn(pf->pdev) && entry->dynamic) {
310 map = pci_msix_alloc_irq_at(pf->pdev, entry->index, NULL);
316 map.virq = pci_irq_vector(pf->pdev, map.index);
323 ice_free_irq_res(pf, entry->index);
329 * @pf: board private structure
335 void ice_free_irq(struct ice_pf *pf, struct msi_map map)
339 entry = xa_load(&pf->irq_tracker.entries, map.index);
342 dev_err(ice_pf_to_dev(pf), "Failed to get MSIX interrupt entry at index %d",
347 dev_dbg(ice_pf_to_dev(pf), "Free irq at index %d\n", map.index);
350 pci_msix_free_irq(pf->pdev, map);
352 ice_free_irq_res(pf, map.index);
357 * @pf: board private structure
363 int ice_get_max_used_msix_vector(struct ice_pf *pf)
369 start = pf->irq_tracker.num_static;
372 xa_for_each_start(&pf->irq_tracker.entries, index, entry, start) {