eal: allow external interrupt handler
[dpdk.git] / lib / librte_eal / linuxapp / eal / include / exec-env / rte_interrupts.h
index acf4be9..b095b86 100644 (file)
@@ -48,6 +48,7 @@ enum rte_intr_handle_type {
        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_MAX
 };
 
@@ -86,14 +87,12 @@ struct rte_intr_handle {
        };
        int fd;  /**< interrupt event file descriptor */
        enum rte_intr_handle_type type;  /**< handle type */
-#ifdef RTE_NEXT_ABI
        uint32_t max_intr;             /**< max interrupt requested */
        uint32_t nb_efd;               /**< number of available efd(event fd) */
        int efds[RTE_MAX_RXTX_INTR_VEC_ID];  /**< intr vectors/efds mapping */
        struct rte_epoll_event elist[RTE_MAX_RXTX_INTR_VEC_ID];
                                       /**< intr vector epoll event */
        int *intr_vec;                 /**< intr vector number array */
-#endif
 };
 
 #define RTE_EPOLL_PER_THREAD        -1  /**< to hint using per thread epfd */
@@ -168,4 +167,49 @@ int
 rte_intr_rx_ctl(struct rte_intr_handle *intr_handle,
                int epfd, int op, unsigned int vec, void *data);
 
+/**
+ * It enables the packet I/O interrupt event if it's necessary.
+ * It creates event fd for each interrupt vector when MSIX is used,
+ * otherwise it multiplexes a single event fd.
+ *
+ * @param intr_handle
+ *   Pointer to the interrupt handle.
+ * @param nb_vec
+ *   Number of interrupt vector trying to enable.
+ * @return
+ *   - On success, zero.
+ *   - On failure, a negative value.
+ */
+int
+rte_intr_efd_enable(struct rte_intr_handle *intr_handle, uint32_t nb_efd);
+
+/**
+ * It disables the packet I/O interrupt event.
+ * It deletes registered eventfds and closes the open fds.
+ *
+ * @param intr_handle
+ *   Pointer to the interrupt handle.
+ */
+void
+rte_intr_efd_disable(struct rte_intr_handle *intr_handle);
+
+/**
+ * The packet I/O interrupt on datapath is enabled or not.
+ *
+ * @param intr_handle
+ *   Pointer to the interrupt handle.
+ */
+int
+rte_intr_dp_is_en(struct rte_intr_handle *intr_handle);
+
+/**
+ * The interrupt handle instance allows other causes or not.
+ * Other causes stand for any none packet I/O interrupts.
+ *
+ * @param intr_handle
+ *   Pointer to the interrupt handle.
+ */
+int
+rte_intr_allow_others(struct rte_intr_handle *intr_handle);
+
 #endif /* _RTE_LINUXAPP_INTERRUPTS_H_ */