blob: 81c464a2c3ec3f9eb612f108b2e69b172c7a9a1b [file] [log] [blame]
David Howells607ca462012-10-13 10:46:48 +01001/*
2 * include/linux/eventpoll.h ( Efficient event polling implementation )
3 * Copyright (C) 2001,...,2006 Davide Libenzi
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * Davide Libenzi <davidel@xmailserver.org>
11 *
12 */
13
14#ifndef _UAPI_LINUX_EVENTPOLL_H
15#define _UAPI_LINUX_EVENTPOLL_H
16
17/* For O_CLOEXEC */
18#include <linux/fcntl.h>
19#include <linux/types.h>
20
21/* Flags for epoll_create1. */
22#define EPOLL_CLOEXEC O_CLOEXEC
23
24/* Valid opcodes to issue to sys_epoll_ctl() */
25#define EPOLL_CTL_ADD 1
26#define EPOLL_CTL_DEL 2
27#define EPOLL_CTL_MOD 3
David Howells607ca462012-10-13 10:46:48 +010028
Jason Barondf0108c2016-01-20 14:59:24 -080029/* Set exclusive wakeup mode for the target file descriptor */
30#define EPOLLEXCLUSIVE (1 << 28)
31
David Howells607ca462012-10-13 10:46:48 +010032/*
33 * Request the handling of system wakeup events so as to prevent system suspends
34 * from happening while those events are being processed.
35 *
36 * Assuming neither EPOLLET nor EPOLLONESHOT is set, system suspends will not be
37 * re-allowed until epoll_wait is called again after consuming the wakeup
38 * event(s).
39 *
40 * Requires CAP_BLOCK_SUSPEND
41 */
42#define EPOLLWAKEUP (1 << 29)
43
44/* Set the One Shot behaviour for the target file descriptor */
45#define EPOLLONESHOT (1 << 30)
46
47/* Set the Edge Triggered behaviour for the target file descriptor */
48#define EPOLLET (1 << 31)
49
50/*
51 * On x86-64 make the 64bit structure have the same alignment as the
52 * 32bit structure. This makes 32bit emulation easier.
53 *
54 * UML/x86_64 needs the same packing as x86_64
55 */
56#ifdef __x86_64__
57#define EPOLL_PACKED __attribute__((packed))
58#else
59#define EPOLL_PACKED
60#endif
61
Prasad Sodagudi09b96e42017-03-10 17:45:30 -080062#ifdef __KERNEL__
David Howells607ca462012-10-13 10:46:48 +010063struct epoll_event {
64 __u32 events;
65 __u64 data;
66} EPOLL_PACKED;
67
Amit Pundir95f19f62013-11-15 12:56:31 +053068#ifdef CONFIG_PM_SLEEP
69static inline void ep_take_care_of_epollwakeup(struct epoll_event *epev)
70{
71 if ((epev->events & EPOLLWAKEUP) && !capable(CAP_BLOCK_SUSPEND))
72 epev->events &= ~EPOLLWAKEUP;
73}
74#else
75static inline void ep_take_care_of_epollwakeup(struct epoll_event *epev)
76{
77 epev->events &= ~EPOLLWAKEUP;
78}
79#endif
Prasad Sodagudi09b96e42017-03-10 17:45:30 -080080#endif /* __KERNEL__ */
David Howells607ca462012-10-13 10:46:48 +010081#endif /* _UAPI_LINUX_EVENTPOLL_H */