1/* Copyright (C) 2002-2016 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
29typedef __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
40enum 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 EPOLLRDHUP = 0x2000,
63#define EPOLLRDHUP EPOLLRDHUP
64 EPOLLEXCLUSIVE = 1u << 28,
65#define EPOLLEXCLUSIVE EPOLLEXCLUSIVE
66 EPOLLWAKEUP = 1u << 29,
67#define EPOLLWAKEUP EPOLLWAKEUP
68 EPOLLONESHOT = 1u << 30,
69#define EPOLLONESHOT EPOLLONESHOT
70 EPOLLET = 1u << 31
71#define EPOLLET EPOLLET
72 };
73
74
75/* Valid opcodes ( "op" parameter ) to issue to epoll_ctl(). */
76#define EPOLL_CTL_ADD 1 /* Add a file descriptor to the interface. */
77#define EPOLL_CTL_DEL 2 /* Remove a file descriptor from the interface. */
78#define EPOLL_CTL_MOD 3 /* Change file descriptor epoll_event structure. */
79
80
81typedef union epoll_data
82{
83 void *ptr;
84 int fd;
85 uint32_t u32;
86 uint64_t u64;
87} epoll_data_t;
88
89struct epoll_event
90{
91 uint32_t events; /* Epoll events */
92 epoll_data_t data; /* User data variable */
93} __EPOLL_PACKED;
94
95
96__BEGIN_DECLS
97
98/* Creates an epoll instance. Returns an fd for the new instance.
99 The "size" parameter is a hint specifying the number of file
100 descriptors to be associated with the new instance. The fd
101 returned by epoll_create() should be closed with close(). */
102extern int epoll_create (int __size) __THROW;
103
104/* Same as epoll_create but with an FLAGS parameter. The unused SIZE
105 parameter has been dropped. */
106extern int epoll_create1 (int __flags) __THROW;
107
108
109/* Manipulate an epoll instance "epfd". Returns 0 in case of success,
110 -1 in case of error ( the "errno" variable will contain the
111 specific error code ) The "op" parameter is one of the EPOLL_CTL_*
112 constants defined above. The "fd" parameter is the target of the
113 operation. The "event" parameter describes which events the caller
114 is interested in and any associated user data. */
115extern int epoll_ctl (int __epfd, int __op, int __fd,
116 struct epoll_event *__event) __THROW;
117
118
119/* Wait for events on an epoll instance "epfd". Returns the number of
120 triggered events returned in "events" buffer. Or -1 in case of
121 error with the "errno" variable set to the specific error code. The
122 "events" parameter is a buffer that will contain triggered
123 events. The "maxevents" is the maximum number of events to be
124 returned ( usually size of "events" ). The "timeout" parameter
125 specifies the maximum wait time in milliseconds (-1 == infinite).
126
127 This function is a cancellation point and therefore not marked with
128 __THROW. */
129extern int epoll_wait (int __epfd, struct epoll_event *__events,
130 int __maxevents, int __timeout);
131
132
133/* Same as epoll_wait, but the thread's signal mask is temporarily
134 and atomically replaced with the one provided as parameter.
135
136 This function is a cancellation point and therefore not marked with
137 __THROW. */
138extern int epoll_pwait (int __epfd, struct epoll_event *__events,
139 int __maxevents, int __timeout,
140 const __sigset_t *__ss);
141
142__END_DECLS
143
144#endif /* sys/epoll.h */
145