1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(C) 2021 Marvell International Ltd.
5 #ifndef __RTE_EPOLL_H__
6 #define __RTE_EPOLL_H__
10 * The rte_epoll provides interfaces functions to add delete events,
11 * wait poll for an event.
16 #include <rte_compat.h>
22 #define RTE_INTR_EVENT_ADD 1UL
23 #define RTE_INTR_EVENT_DEL 2UL
25 typedef void (*rte_intr_event_cb_t)(int fd, void *arg);
27 struct rte_epoll_data {
28 uint32_t event; /**< event type */
29 void *data; /**< User data */
30 rte_intr_event_cb_t cb_fun; /**< IN: callback fun */
31 void *cb_arg; /**< IN: callback arg */
35 RTE_EPOLL_INVALID = 0,
40 /** interrupt epoll event obj, taken by epoll_event.ptr */
41 struct rte_epoll_event {
42 uint32_t status; /**< OUT: event status */
43 int fd; /**< OUT: event fd */
44 int epfd; /**< OUT: epoll instance the ev associated with */
45 struct rte_epoll_data epdata;
48 #define RTE_EPOLL_PER_THREAD -1 /**< to hint using per thread epfd */
51 * It waits for events on the epoll instance.
52 * Retries if signal received.
55 * Epoll instance fd on which the caller wait for events.
57 * Memory area contains the events that will be available for the caller.
59 * Up to maxevents are returned, must greater than zero.
61 * Specifying a timeout of -1 causes a block indefinitely.
62 * Specifying a timeout equal to zero cause to return immediately.
64 * - On success, returns the number of available event.
65 * - On failure, a negative value.
68 rte_epoll_wait(int epfd, struct rte_epoll_event *events,
69 int maxevents, int timeout);
72 * It waits for events on the epoll instance.
73 * Does not retry if signal received.
76 * Epoll instance fd on which the caller wait for events.
78 * Memory area contains the events that will be available for the caller.
80 * Up to maxevents are returned, must greater than zero.
82 * Specifying a timeout of -1 causes a block indefinitely.
83 * Specifying a timeout equal to zero cause to return immediately.
85 * - On success, returns the number of available event.
86 * - On failure, a negative value.
90 rte_epoll_wait_interruptible(int epfd, struct rte_epoll_event *events,
91 int maxevents, int timeout);
94 * It performs control operations on epoll instance referred by the epfd.
95 * It requests that the operation op be performed for the target fd.
98 * Epoll instance fd on which the caller perform control operations.
100 * The operation be performed for the target fd.
102 * The target fd on which the control ops perform.
104 * Describes the object linked to the fd.
105 * Note: The caller must take care the object deletion after CTL_DEL.
107 * - On success, zero.
108 * - On failure, a negative value.
111 rte_epoll_ctl(int epfd, int op, int fd,
112 struct rte_epoll_event *event);
118 #endif /* __RTE_EPOLL_H__ */