184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo/* Copyright (C) 2002 Free Software Foundation, Inc.
284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   This file is part of the GNU C Library.
384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   The GNU C Library is free software; you can redistribute it and/or
584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   modify it under the terms of the GNU Lesser General Public
684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   License as published by the Free Software Foundation; either
784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   version 2.1 of the License, or (at your option) any later version.
884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   The GNU C Library is distributed in the hope that it will be useful,
1084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   but WITHOUT ANY WARRANTY; without even the implied warranty of
1184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   Lesser General Public License for more details.
1384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
1484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   You should have received a copy of the GNU Lesser General Public
1584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   License along with the GNU C Library; if not, write to the Free
1684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
1784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   02111-1307 USA.  */
1884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
1984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#ifndef	_SYS_EPOLL_H
2084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define	_SYS_EPOLL_H	1
2184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
2284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#include <stdint.h>
2384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#include <sys/types.h>
2484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
2584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
2684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajoenum EPOLL_EVENTS
2784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo  {
2884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo    EPOLLIN = 0x001,
2984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLIN EPOLLIN
3084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo    EPOLLPRI = 0x002,
3184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLPRI EPOLLPRI
3284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo    EPOLLOUT = 0x004,
3384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLOUT EPOLLOUT
3484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo    EPOLLRDNORM = 0x040,
3584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLRDNORM EPOLLRDNORM
3684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo    EPOLLRDBAND = 0x080,
3784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLRDBAND EPOLLRDBAND
3884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo    EPOLLWRNORM = 0x100,
3984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLWRNORM EPOLLWRNORM
4084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo    EPOLLWRBAND = 0x200,
4184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLWRBAND EPOLLWRBAND
4284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo    EPOLLMSG = 0x400,
4384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLMSG EPOLLMSG
4484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo    EPOLLERR = 0x008,
4584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLERR EPOLLERR
4684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo    EPOLLHUP = 0x010,
4784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLHUP EPOLLHUP
4884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo    EPOLLONESHOT = (1 << 30),
4984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLONESHOT EPOLLONESHOT
5084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo    EPOLLET = (1 << 31)
5184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLLET EPOLLET
5284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
5384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo  };
5484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
5584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
5684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo/* Valid opcodes ( "op" parameter ) to issue to epoll_ctl().  */
5784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLL_CTL_ADD 1	/* Add a file decriptor to the interface.  */
5884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLL_CTL_DEL 2	/* Remove a file decriptor from the interface.  */
5984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLL_CTL_MOD 3	/* Change file decriptor epoll_event structure.  */
6084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
6184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
6237550cf5a86c7ca7424a2a318dd64e550f13f5dfChris Dearman/*
6384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo * On x86-64 make the 64bit structure have the same alignment as the
6484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo * 32bit structure. This makes 32bit emulation easier.
6584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo */
6684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#ifdef __x86_64__
6784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLL_PACKED __attribute__((packed))
6884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#else
6984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#define EPOLL_PACKED
7084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#endif
7184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
7284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
7384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajotypedef union epoll_data
7484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo{
7584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo  void *ptr;
7684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo  int fd;
7784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo  uint32_t u32;
7884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo  uint64_t u64;
7984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo} epoll_data_t;
8084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
8184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajostruct epoll_event
8284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo{
8384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo  uint32_t events;	/* Epoll events */
8484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo  epoll_data_t data;	/* User data variable */
8584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo} EPOLL_PACKED;
8684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
8784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
8884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo__BEGIN_DECLS
8984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
9084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo/* Creates an epoll instance.  Returns an fd for the new instance.
9184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   The "size" parameter is a hint specifying the number of file
9284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   descriptors to be associated with the new instance.  The fd
9384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   returned by epoll_create() should be closed with close().  */
9484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajoextern int epoll_create (int __size) __THROW;
9584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
9684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
9784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo/* Manipulate an epoll instance "epfd". Returns 0 in case of success,
9884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   -1 in case of error ( the "errno" variable will contain the
9984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   specific error code ) The "op" parameter is one of the EPOLL_CTL_*
10084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   constants defined above. The "fd" parameter is the target of the
10184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   operation. The "event" parameter describes which events the caller
10284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   is interested in and any associated user data.  */
10384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajoextern int epoll_ctl (int __epfd, int __op, int __fd,
10484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo		      struct epoll_event *__event) __THROW;
10584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
10684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
10784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo/* Wait for events on an epoll instance "epfd". Returns the number of
10884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   triggered events returned in "events" buffer. Or -1 in case of
10984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   error with the "errno" variable set to the specific error code. The
11084c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   "events" parameter is a buffer that will contain triggered
11184c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   events. The "maxevents" is the maximum number of events to be
11284c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   returned ( usually size of "events" ). The "timeout" parameter
11384c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo   specifies the maximum wait time in milliseconds (-1 == infinite).  */
11484c7ae74ed6ed24fa3849752e924aa11aae859eesonyajoextern int epoll_wait (int __epfd, struct epoll_event *__events,
11584c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo		       int __maxevents, int __timeout) __THROW;
11684c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
11784c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo__END_DECLS
11884c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo
11984c7ae74ed6ed24fa3849752e924aa11aae859eesonyajo#endif /* sys/epoll.h */
120