eal: query multi-vector interrupt capability

VFIO allows multiple MSI-X vector, others doesn't, but maybe will
allow it in the future.
Device drivers need to be aware of the capability.
It's better to avoid condition check on interrupt type (VFIO) everywhere,
instead a capability api is more flexible for the condition change.

Signed-off-by: Cunming Liang <cunming.liang@intel.com>
Acked-by: David Marchand <david.marchand@6wind.com>
This commit is contained in:
Cunming Liang 2015-11-04 16:45:34 +08:00 committed by Thomas Monjalon
parent 3e692cd3f8
commit d283059b7c
6 changed files with 50 additions and 0 deletions

View File

@ -110,3 +110,10 @@ rte_intr_allow_others(struct rte_intr_handle *intr_handle)
RTE_SET_USED(intr_handle);
return 1;
}
int
rte_intr_cap_multiple(struct rte_intr_handle *intr_handle)
{
RTE_SET_USED(intr_handle);
return 0;
}

View File

@ -122,4 +122,14 @@ int rte_intr_dp_is_en(struct rte_intr_handle *intr_handle);
*/
int rte_intr_allow_others(struct rte_intr_handle *intr_handle);
/**
* The multiple interrupt vector capability of interrupt handle instance.
* It returns zero if no multiple interrupt vector support.
*
* @param intr_handle
* Pointer to the interrupt handle.
*/
int
rte_intr_cap_multiple(struct rte_intr_handle *intr_handle);
#endif /* _RTE_BSDAPP_INTERRUPTS_H_ */

View File

@ -125,3 +125,10 @@ DPDK_2.1 {
rte_memzone_free;
} DPDK_2.0;
DPDK_2.2 {
global:
rte_intr_cap_multiple;
} DPDK_2.1;

View File

@ -1212,3 +1212,12 @@ rte_intr_allow_others(struct rte_intr_handle *intr_handle)
else
return !!(intr_handle->max_intr - intr_handle->nb_efd);
}
int
rte_intr_cap_multiple(struct rte_intr_handle *intr_handle)
{
if (intr_handle->type == RTE_INTR_HANDLE_VFIO_MSIX)
return 1;
return 0;
}

View File

@ -215,4 +215,14 @@ rte_intr_dp_is_en(struct rte_intr_handle *intr_handle);
int
rte_intr_allow_others(struct rte_intr_handle *intr_handle);
/**
* The multiple interrupt vector capability of interrupt handle instance.
* It returns zero if no multiple interrupt vector support.
*
* @param intr_handle
* Pointer to the interrupt handle.
*/
int
rte_intr_cap_multiple(struct rte_intr_handle *intr_handle);
#endif /* _RTE_LINUXAPP_INTERRUPTS_H_ */

View File

@ -128,3 +128,10 @@ DPDK_2.1 {
rte_memzone_free;
} DPDK_2.0;
DPDK_2.2 {
global:
rte_intr_cap_multiple;
} DPDK_2.1;