1 /* Copyright (C) 2002-2012 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3 
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
8 
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
13 
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library; if not, see
16    <http://www.gnu.org/licenses/>.  */
17 
18 #ifndef	_SYS_EPOLL_H
19 #define	_SYS_EPOLL_H	1
20 
21 #include <stdint.h>
22 #include <sys/types.h>
23 
24 /* Get __sigset_t.  */
25 #include <bits/sigset.h>
26 
27 #ifndef __sigset_t_defined
28 # define __sigset_t_defined
29 typedef __sigset_t sigset_t;
30 #endif
31 
32 /* Get the platform-dependent flags.  */
33 #include <bits/epoll.h>
34 
35 #ifndef __EPOLL_PACKED
36 # define __EPOLL_PACKED
37 #endif
38 
39 
40 enum EPOLL_EVENTS
41   {
42     EPOLLIN = 0x001,
43 #define EPOLLIN EPOLLIN
44     EPOLLPRI = 0x002,
45 #define EPOLLPRI EPOLLPRI
46     EPOLLOUT = 0x004,
47 #define EPOLLOUT EPOLLOUT
48     EPOLLRDNORM = 0x040,
49 #define EPOLLRDNORM EPOLLRDNORM
50     EPOLLRDBAND = 0x080,
51 #define EPOLLRDBAND EPOLLRDBAND
52     EPOLLWRNORM = 0x100,
53 #define EPOLLWRNORM EPOLLWRNORM
54     EPOLLWRBAND = 0x200,
55 #define EPOLLWRBAND EPOLLWRBAND
56     EPOLLMSG = 0x400,
57 #define EPOLLMSG EPOLLMSG
58     EPOLLERR = 0x008,
59 #define EPOLLERR EPOLLERR
60     EPOLLHUP = 0x010,
61 #define EPOLLHUP EPOLLHUP
62     EPOLLNVAL = 0x020,
63 #define EPOLLNVAL EPOLLNVAL
64     EPOLLRDHUP = 0x2000,
65 #define EPOLLRDHUP EPOLLRDHUP
66     EPOLL_URING_WAKE = 1u << 27,
67 #define EPOLL_URING_WAKE EPOLL_URING_WAKE
68     EPOLLEXCLUSIVE = 1u << 28,
69 #define EPOLLEXCLUSIVE EPOLLEXCLUSIVE
70     EPOLLWAKEUP = 1u << 29,
71 #define EPOLLWAKEUP EPOLLWAKEUP
72     EPOLLONESHOT = 1u << 30,
73 #define EPOLLONESHOT EPOLLONESHOT
74     EPOLLET = 1u << 31
75 #define EPOLLET EPOLLET
76   };
77 
78 
79 /* Valid opcodes ( "op" parameter ) to issue to epoll_ctl().  */
80 #define EPOLL_CTL_ADD 1	/* Add a file descriptor to the interface.  */
81 #define EPOLL_CTL_DEL 2	/* Remove a file descriptor from the interface.  */
82 #define EPOLL_CTL_MOD 3	/* Change file descriptor epoll_event structure.  */
83 
84 
85 typedef union epoll_data
86 {
87   void *ptr;
88   int fd;
89   uint32_t u32;
90   uint64_t u64;
91 } epoll_data_t;
92 
93 struct epoll_event
94 {
95   uint32_t events;	/* Epoll events */
96   epoll_data_t data;	/* User data variable */
97 } __EPOLL_PACKED;
98 
99 
100 __BEGIN_DECLS
101 
102 /* Creates an epoll instance.  Returns an fd for the new instance.
103    The "size" parameter is a hint specifying the number of file
104    descriptors to be associated with the new instance.  The fd
105    returned by epoll_create() should be closed with close().  */
106 extern int epoll_create (int __size) __THROW;
107 
108 /* Same as epoll_create but with an FLAGS parameter.  The unused SIZE
109    parameter has been dropped.  */
110 extern int epoll_create1 (int __flags) __THROW;
111 
112 
113 /* Manipulate an epoll instance "epfd". Returns 0 in case of success,
114    -1 in case of error ( the "errno" variable will contain the
115    specific error code ) The "op" parameter is one of the EPOLL_CTL_*
116    constants defined above. The "fd" parameter is the target of the
117    operation. The "event" parameter describes which events the caller
118    is interested in and any associated user data.  */
119 extern int epoll_ctl (int __epfd, int __op, int __fd,
120 		      struct epoll_event *__event) __THROW;
121 
122 
123 /* Wait for events on an epoll instance "epfd". Returns the number of
124    triggered events returned in "events" buffer. Or -1 in case of
125    error with the "errno" variable set to the specific error code. The
126    "events" parameter is a buffer that will contain triggered
127    events. The "maxevents" is the maximum number of events to be
128    returned ( usually size of "events" ). The "timeout" parameter
129    specifies the maximum wait time in milliseconds (-1 == infinite).
130 
131    This function is a cancellation point and therefore not marked with
132    __THROW.  */
133 extern int epoll_wait (int __epfd, struct epoll_event *__events,
134 		       int __maxevents, int __timeout);
135 
136 
137 /* Same as epoll_wait, but the thread's signal mask is temporarily
138    and atomically replaced with the one provided as parameter.
139 
140    This function is a cancellation point and therefore not marked with
141    __THROW.  */
142 extern int epoll_pwait (int __epfd, struct epoll_event *__events,
143 			int __maxevents, int __timeout,
144 			const __sigset_t *__ss);
145 
146 __END_DECLS
147 
148 #endif /* sys/epoll.h */
149