DPDK  20.11.0
rte_eal_interrupts.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2010-2014 Intel Corporation
3  */
4 
5 #ifndef _RTE_INTERRUPTS_H_
6 #error "don't include this file directly, please include generic <rte_interrupts.h>"
7 #endif
8 
17 #ifndef _RTE_EAL_INTERRUPTS_H_
18 #define _RTE_EAL_INTERRUPTS_H_
19 
20 #define RTE_MAX_RXTX_INTR_VEC_ID 512
21 #define RTE_INTR_VEC_ZERO_OFFSET 0
22 #define RTE_INTR_VEC_RXTX_OFFSET 1
23 
40 };
41 
42 #define RTE_INTR_EVENT_ADD 1UL
43 #define RTE_INTR_EVENT_DEL 2UL
44 
45 typedef void (*rte_intr_event_cb_t)(int fd, void *arg);
46 
47 struct rte_epoll_data {
48  uint32_t event;
49  void *data;
50  rte_intr_event_cb_t cb_fun;
51  void *cb_arg;
52 };
53 
54 enum {
55  RTE_EPOLL_INVALID = 0,
56  RTE_EPOLL_VALID,
57  RTE_EPOLL_EXEC,
58 };
59 
62  uint32_t status;
63  int fd;
64  int epfd;
65  struct rte_epoll_data epdata;
66 };
67 
71  union {
72  struct {
74  union {
79  };
80  int fd;
81  };
82  void *handle;
83  };
85  uint32_t max_intr;
86  uint32_t nb_efd;
87  uint8_t efd_counter_size;
88  int efds[RTE_MAX_RXTX_INTR_VEC_ID];
89  struct rte_epoll_event elist[RTE_MAX_RXTX_INTR_VEC_ID];
91  int *intr_vec;
92 };
93 
94 #define RTE_EPOLL_PER_THREAD -1
113 int
114 rte_epoll_wait(int epfd, struct rte_epoll_event *events,
115  int maxevents, int timeout);
116 
134 __rte_experimental
135 int
137  int maxevents, int timeout);
138 
156 int
157 rte_epoll_ctl(int epfd, int op, int fd,
158  struct rte_epoll_event *event);
159 
166 int
168 
185 int
186 rte_intr_rx_ctl(struct rte_intr_handle *intr_handle,
187  int epfd, int op, unsigned int vec, void *data);
188 
195 void
197 
212 int
213 rte_intr_efd_enable(struct rte_intr_handle *intr_handle, uint32_t nb_efd);
214 
222 void
224 
231 int
232 rte_intr_dp_is_en(struct rte_intr_handle *intr_handle);
233 
241 int
243 
251 int
253 
265 __rte_experimental
266 int
268 
269 #endif /* _RTE_EAL_INTERRUPTS_H_ */
rte_intr_handle::efds
int efds[RTE_MAX_RXTX_INTR_VEC_ID]
Definition: rte_eal_interrupts.h:88
RTE_INTR_HANDLE_EXT
@ RTE_INTR_HANDLE_EXT
Definition: rte_eal_interrupts.h:35
rte_epoll_event::status
uint32_t status
Definition: rte_eal_interrupts.h:62
rte_intr_handle::nb_efd
uint32_t nb_efd
Definition: rte_eal_interrupts.h:86
RTE_INTR_HANDLE_UNKNOWN
@ RTE_INTR_HANDLE_UNKNOWN
Definition: rte_eal_interrupts.h:28
rte_intr_allow_others
int rte_intr_allow_others(struct rte_intr_handle *intr_handle)
rte_intr_handle
Definition: rte_eal_interrupts.h:69
rte_intr_handle::uio_cfg_fd
int uio_cfg_fd
Definition: rte_eal_interrupts.h:78
rte_intr_tls_epfd
int rte_intr_tls_epfd(void)
rte_intr_handle::max_intr
uint32_t max_intr
Definition: rte_eal_interrupts.h:85
RTE_INTR_HANDLE_VDEV
@ RTE_INTR_HANDLE_VDEV
Definition: rte_eal_interrupts.h:36
rte_epoll_wait
int rte_epoll_wait(int epfd, struct rte_epoll_event *events, int maxevents, int timeout)
RTE_INTR_HANDLE_VFIO_MSIX
@ RTE_INTR_HANDLE_VFIO_MSIX
Definition: rte_eal_interrupts.h:33
rte_intr_handle::type
enum rte_intr_handle_type type
Definition: rte_eal_interrupts.h:84
rte_intr_efd_disable
void rte_intr_efd_disable(struct rte_intr_handle *intr_handle)
RTE_INTR_HANDLE_VFIO_LEGACY
@ RTE_INTR_HANDLE_VFIO_LEGACY
Definition: rte_eal_interrupts.h:31
rte_intr_cap_multiple
int rte_intr_cap_multiple(struct rte_intr_handle *intr_handle)
rte_intr_rx_ctl
int rte_intr_rx_ctl(struct rte_intr_handle *intr_handle, int epfd, int op, unsigned int vec, void *data)
rte_intr_handle::vfio_dev_fd
int vfio_dev_fd
Definition: rte_eal_interrupts.h:76
RTE_INTR_HANDLE_DEV_EVENT
@ RTE_INTR_HANDLE_DEV_EVENT
Definition: rte_eal_interrupts.h:37
RTE_INTR_HANDLE_MAX
@ RTE_INTR_HANDLE_MAX
Definition: rte_eal_interrupts.h:39
rte_intr_handle::elist
struct rte_epoll_event elist[RTE_MAX_RXTX_INTR_VEC_ID]
Definition: rte_eal_interrupts.h:89
RTE_INTR_HANDLE_UIO_INTX
@ RTE_INTR_HANDLE_UIO_INTX
Definition: rte_eal_interrupts.h:30
rte_epoll_wait_interruptible
__rte_experimental int rte_epoll_wait_interruptible(int epfd, struct rte_epoll_event *events, int maxevents, int timeout)
rte_epoll_event
Definition: rte_eal_interrupts.h:61
rte_intr_dp_is_en
int rte_intr_dp_is_en(struct rte_intr_handle *intr_handle)
rte_epoll_event::epfd
int epfd
Definition: rte_eal_interrupts.h:64
rte_intr_handle_type
rte_intr_handle_type
Definition: rte_eal_interrupts.h:27
rte_intr_handle::fd
int fd
Definition: rte_eal_interrupts.h:80
rte_intr_handle::handle
void * handle
Definition: rte_eal_interrupts.h:82
RTE_STD_C11
#define RTE_STD_C11
Definition: rte_common.h:40
rte_intr_efd_enable
int rte_intr_efd_enable(struct rte_intr_handle *intr_handle, uint32_t nb_efd)
rte_epoll_ctl
int rte_epoll_ctl(int epfd, int op, int fd, struct rte_epoll_event *event)
rte_epoll_event::fd
int fd
Definition: rte_eal_interrupts.h:63
RTE_INTR_HANDLE_ALARM
@ RTE_INTR_HANDLE_ALARM
Definition: rte_eal_interrupts.h:34
rte_intr_free_epoll_fd
void rte_intr_free_epoll_fd(struct rte_intr_handle *intr_handle)
rte_intr_handle::intr_vec
int * intr_vec
Definition: rte_eal_interrupts.h:91
RTE_INTR_HANDLE_UIO
@ RTE_INTR_HANDLE_UIO
Definition: rte_eal_interrupts.h:29
RTE_INTR_HANDLE_VFIO_REQ
@ RTE_INTR_HANDLE_VFIO_REQ
Definition: rte_eal_interrupts.h:38
RTE_INTR_HANDLE_VFIO_MSI
@ RTE_INTR_HANDLE_VFIO_MSI
Definition: rte_eal_interrupts.h:32
rte_intr_handle::efd_counter_size
uint8_t efd_counter_size
Definition: rte_eal_interrupts.h:87
rte_thread_is_intr
__rte_experimental int rte_thread_is_intr(void)