1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(C) 2021 Marvell International Ltd. 3 */ 4 5 #ifndef __RTE_EPOLL_H__ 6 #define __RTE_EPOLL_H__ 7 8 /** 9 * @file 10 * The rte_epoll provides interfaces functions to add delete events, 11 * wait poll for an event. 12 */ 13 14 #include <stdint.h> 15 16 #include <rte_compat.h> 17 18 #ifdef __cplusplus 19 extern "C" { 20 #endif 21 22 #define RTE_INTR_EVENT_ADD 1UL 23 #define RTE_INTR_EVENT_DEL 2UL 24 25 typedef void (*rte_intr_event_cb_t)(int fd, void *arg); 26 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 */ 32 }; 33 34 enum { 35 RTE_EPOLL_INVALID = 0, 36 RTE_EPOLL_VALID, 37 RTE_EPOLL_EXEC, 38 }; 39 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; 46 }; 47 48 #define RTE_EPOLL_PER_THREAD -1 /**< to hint using per thread epfd */ 49 50 /** 51 * It waits for events on the epoll instance. 52 * Retries if signal received. 53 * 54 * @param epfd 55 * Epoll instance fd on which the caller wait for events. 56 * @param events 57 * Memory area contains the events that will be available for the caller. 58 * @param maxevents 59 * Up to maxevents are returned, must greater than zero. 60 * @param timeout 61 * Specifying a timeout of -1 causes a block indefinitely. 62 * Specifying a timeout equal to zero cause to return immediately. 63 * @return 64 * - On success, returns the number of available event. 65 * - On failure, a negative value. 66 */ 67 int 68 rte_epoll_wait(int epfd, struct rte_epoll_event *events, 69 int maxevents, int timeout); 70 71 /** 72 * It waits for events on the epoll instance. 73 * Does not retry if signal received. 74 * 75 * @param epfd 76 * Epoll instance fd on which the caller wait for events. 77 * @param events 78 * Memory area contains the events that will be available for the caller. 79 * @param maxevents 80 * Up to maxevents are returned, must greater than zero. 81 * @param timeout 82 * Specifying a timeout of -1 causes a block indefinitely. 83 * Specifying a timeout equal to zero cause to return immediately. 84 * @return 85 * - On success, returns the number of available event. 86 * - On failure, a negative value. 87 */ 88 __rte_experimental 89 int 90 rte_epoll_wait_interruptible(int epfd, struct rte_epoll_event *events, 91 int maxevents, int timeout); 92 93 /** 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. 96 * 97 * @param epfd 98 * Epoll instance fd on which the caller perform control operations. 99 * @param op 100 * The operation be performed for the target fd. 101 * @param fd 102 * The target fd on which the control ops perform. 103 * @param event 104 * Describes the object linked to the fd. 105 * Note: The caller must take care the object deletion after CTL_DEL. 106 * @return 107 * - On success, zero. 108 * - On failure, a negative value. 109 */ 110 int 111 rte_epoll_ctl(int epfd, int op, int fd, 112 struct rte_epoll_event *event); 113 114 #ifdef __cplusplus 115 } 116 #endif 117 118 #endif /* __RTE_EPOLL_H__ */ 119