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 51a13fa..836e483 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 3d138bf..70a7087 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 64fdfb1..8b00761 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 8938067..95beb4c 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 b44e69c..3dacbff 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 dbb8fa1..cb9f4d6 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