DPDK  19.11.1
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  volatile uint32_t status;
63  int fd;
64  int epfd;
65  struct rte_epoll_data epdata;
66 };
67 
71  union {
73  int uio_cfg_fd;
74  };
75  int fd;
77  uint32_t max_intr;
78  uint32_t nb_efd;
79  uint8_t efd_counter_size;
80  int efds[RTE_MAX_RXTX_INTR_VEC_ID];
81  struct rte_epoll_event elist[RTE_MAX_RXTX_INTR_VEC_ID];
83  int *intr_vec;
84 };
85 
86 #define RTE_EPOLL_PER_THREAD -1
104 int
105 rte_epoll_wait(int epfd, struct rte_epoll_event *events,
106  int maxevents, int timeout);
107 
125 int
126 rte_epoll_ctl(int epfd, int op, int fd,
127  struct rte_epoll_event *event);
128 
135 int
136 rte_intr_tls_epfd(void);
137 
154 int
155 rte_intr_rx_ctl(struct rte_intr_handle *intr_handle,
156  int epfd, int op, unsigned int vec, void *data);
157 
164 void
165 rte_intr_free_epoll_fd(struct rte_intr_handle *intr_handle);
166 
181 int
182 rte_intr_efd_enable(struct rte_intr_handle *intr_handle, uint32_t nb_efd);
183 
191 void
192 rte_intr_efd_disable(struct rte_intr_handle *intr_handle);
193 
200 int
201 rte_intr_dp_is_en(struct rte_intr_handle *intr_handle);
202 
210 int
211 rte_intr_allow_others(struct rte_intr_handle *intr_handle);
212 
220 int
221 rte_intr_cap_multiple(struct rte_intr_handle *intr_handle);
222 
223 #endif /* _RTE_EAL_INTERRUPTS_H_ */
rte_intr_handle::efds
int efds[RTE_MAX_RXTX_INTR_VEC_ID]
Definition: rte_eal_interrupts.h:80
RTE_INTR_HANDLE_EXT
@ RTE_INTR_HANDLE_EXT
Definition: rte_eal_interrupts.h:35
rte_intr_handle::nb_efd
uint32_t nb_efd
Definition: rte_eal_interrupts.h:78
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:73
rte_intr_tls_epfd
int rte_intr_tls_epfd(void)
rte_intr_handle::max_intr
uint32_t max_intr
Definition: rte_eal_interrupts.h:77
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:76
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:72
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:81
RTE_INTR_HANDLE_UIO_INTX
@ RTE_INTR_HANDLE_UIO_INTX
Definition: rte_eal_interrupts.h:30
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:75
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_event::status
volatile uint32_t status
Definition: rte_eal_interrupts.h:62
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:83
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:79