eal/linux: add interrupt type for vdev
[dpdk.git] / lib / librte_eal / linuxapp / eal / include / exec-env / rte_interrupts.h
index b095b86..6daffeb 100644 (file)
@@ -39,6 +39,8 @@
 #define _RTE_LINUXAPP_INTERRUPTS_H_
 
 #define RTE_MAX_RXTX_INTR_VEC_ID     32
+#define RTE_INTR_VEC_ZERO_OFFSET      0
+#define RTE_INTR_VEC_RXTX_OFFSET      1
 
 enum rte_intr_handle_type {
        RTE_INTR_HANDLE_UNKNOWN = 0,
@@ -47,8 +49,9 @@ enum rte_intr_handle_type {
        RTE_INTR_HANDLE_VFIO_LEGACY,  /**< vfio device handle (legacy) */
        RTE_INTR_HANDLE_VFIO_MSI,     /**< vfio device handle (MSI) */
        RTE_INTR_HANDLE_VFIO_MSIX,    /**< vfio device handle (MSIX) */
-       RTE_INTR_HANDLE_ALARM,    /**< alarm handle */
-       RTE_INTR_HANDLE_EXT, /**< external handler */
+       RTE_INTR_HANDLE_ALARM,        /**< alarm handle */
+       RTE_INTR_HANDLE_EXT,          /**< external handler */
+       RTE_INTR_HANDLE_VDEV,         /**< virtual device */
        RTE_INTR_HANDLE_MAX
 };
 
@@ -80,6 +83,7 @@ struct rte_epoll_event {
 
 /** Handle for interrupts. */
 struct rte_intr_handle {
+       RTE_STD_C11
        union {
                int vfio_dev_fd;  /**< VFIO device file descriptor */
                int uio_cfg_fd;  /**< UIO config file descriptor
@@ -167,6 +171,15 @@ int
 rte_intr_rx_ctl(struct rte_intr_handle *intr_handle,
                int epfd, int op, unsigned int vec, void *data);
 
+/**
+ * It deletes registered eventfds.
+ *
+ * @param intr_handle
+ *   Pointer to the interrupt handle.
+ */
+void
+rte_intr_free_epoll_fd(struct rte_intr_handle *intr_handle);
+
 /**
  * It enables the packet I/O interrupt event if it's necessary.
  * It creates event fd for each interrupt vector when MSIX is used,
@@ -174,8 +187,9 @@ rte_intr_rx_ctl(struct rte_intr_handle *intr_handle,
  *
  * @param intr_handle
  *   Pointer to the interrupt handle.
- * @param nb_vec
+ * @param nb_efd
  *   Number of interrupt vector trying to enable.
+ *   The value 0 is not allowed.
  * @return
  *   - On success, zero.
  *   - On failure, a negative value.
@@ -212,4 +226,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_ */