]> git.droids-corp.org - dpdk.git/commitdiff
eal: query multi-vector interrupt capability
authorCunming Liang <cunming.liang@intel.com>
Wed, 4 Nov 2015 08:45:34 +0000 (16:45 +0800)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Wed, 4 Nov 2015 14:27:41 +0000 (15:27 +0100)
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>
lib/librte_eal/bsdapp/eal/eal_interrupts.c
lib/librte_eal/bsdapp/eal/include/exec-env/rte_interrupts.h
lib/librte_eal/bsdapp/eal/rte_eal_version.map
lib/librte_eal/linuxapp/eal/eal_interrupts.c
lib/librte_eal/linuxapp/eal/include/exec-env/rte_interrupts.h
lib/librte_eal/linuxapp/eal/rte_eal_version.map

index 51a13fa264ff9fb12edcd95550584164bd852a1a..836e483690a21a2db149c539b485cb22eaf0d194 100644 (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;
+}
index 3d138bf5fce01de510212649df4e289905ee2a1b..70a7087362e496a608953ae46db7b4359a055c58 100644 (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_ */
index 64fdfb1ecd8def8413a9ea1d9ffa5595ec50aff0..8b00761d946b9c738fbe32c43840d276830b1666 100644 (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;
\ No newline at end of file
index 89380675ef219508ffdc43f265713bb28d39e0f5..95beb4c7097820a866ef475f6a503c907afb8a02 100644 (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;
+}
index b44e69cc83e4448bfeb32a59559cc66598fab8c6..3dacbff88c6e6e1264e2cf637c1201497ed5e92e 100644 (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_ */
index dbb8fa1582bd34062a89b95bf8f4a96dc6c5525b..cb9f4d67a3328556dacd6af5c7b1a435ba0aff99 100644 (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;
\ No newline at end of file