master
  1/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
  2/*
  3 *  include/linux/eventpoll.h ( Efficient event polling implementation )
  4 *  Copyright (C) 2001,...,2006	 Davide Libenzi
  5 *
  6 *  This program is free software; you can redistribute it and/or modify
  7 *  it under the terms of the GNU General Public License as published by
  8 *  the Free Software Foundation; either version 2 of the License, or
  9 *  (at your option) any later version.
 10 *
 11 *  Davide Libenzi <davidel@xmailserver.org>
 12 *
 13 */
 14
 15#ifndef _LINUX_EVENTPOLL_H
 16#define _LINUX_EVENTPOLL_H
 17
 18/* For O_CLOEXEC */
 19#include <linux/fcntl.h>
 20#include <linux/types.h>
 21
 22/* Flags for epoll_create1.  */
 23#define EPOLL_CLOEXEC O_CLOEXEC
 24
 25/* Valid opcodes to issue to sys_epoll_ctl() */
 26#define EPOLL_CTL_ADD 1
 27#define EPOLL_CTL_DEL 2
 28#define EPOLL_CTL_MOD 3
 29
 30/* Epoll event masks */
 31#define EPOLLIN		(__poll_t)0x00000001
 32#define EPOLLPRI	(__poll_t)0x00000002
 33#define EPOLLOUT	(__poll_t)0x00000004
 34#define EPOLLERR	(__poll_t)0x00000008
 35#define EPOLLHUP	(__poll_t)0x00000010
 36#define EPOLLNVAL	(__poll_t)0x00000020
 37#define EPOLLRDNORM	(__poll_t)0x00000040
 38#define EPOLLRDBAND	(__poll_t)0x00000080
 39#define EPOLLWRNORM	(__poll_t)0x00000100
 40#define EPOLLWRBAND	(__poll_t)0x00000200
 41#define EPOLLMSG	(__poll_t)0x00000400
 42#define EPOLLRDHUP	(__poll_t)0x00002000
 43
 44/*
 45 * Internal flag - wakeup generated by io_uring, used to detect recursion back
 46 * into the io_uring poll handler.
 47 */
 48#define EPOLL_URING_WAKE	((__poll_t)(1U << 27))
 49
 50/* Set exclusive wakeup mode for the target file descriptor */
 51#define EPOLLEXCLUSIVE	((__poll_t)(1U << 28))
 52
 53/*
 54 * Request the handling of system wakeup events so as to prevent system suspends
 55 * from happening while those events are being processed.
 56 *
 57 * Assuming neither EPOLLET nor EPOLLONESHOT is set, system suspends will not be
 58 * re-allowed until epoll_wait is called again after consuming the wakeup
 59 * event(s).
 60 *
 61 * Requires CAP_BLOCK_SUSPEND
 62 */
 63#define EPOLLWAKEUP	((__poll_t)(1U << 29))
 64
 65/* Set the One Shot behaviour for the target file descriptor */
 66#define EPOLLONESHOT	((__poll_t)(1U << 30))
 67
 68/* Set the Edge Triggered behaviour for the target file descriptor */
 69#define EPOLLET		((__poll_t)(1U << 31))
 70
 71/* 
 72 * On x86-64 make the 64bit structure have the same alignment as the
 73 * 32bit structure. This makes 32bit emulation easier.
 74 *
 75 * UML/x86_64 needs the same packing as x86_64
 76 */
 77#ifdef __x86_64__
 78#define EPOLL_PACKED __attribute__((packed))
 79#else
 80#define EPOLL_PACKED
 81#endif
 82
 83struct epoll_event {
 84	__poll_t events;
 85	__u64 data;
 86} EPOLL_PACKED;
 87
 88struct epoll_params {
 89	__u32 busy_poll_usecs;
 90	__u16 busy_poll_budget;
 91	__u8 prefer_busy_poll;
 92
 93	/* pad the struct to a multiple of 64bits */
 94	__u8 __pad;
 95};
 96
 97#define EPOLL_IOC_TYPE 0x8A
 98#define EPIOCSPARAMS _IOW(EPOLL_IOC_TYPE, 0x01, struct epoll_params)
 99#define EPIOCGPARAMS _IOR(EPOLL_IOC_TYPE, 0x02, struct epoll_params)
100
101#endif /* _LINUX_EVENTPOLL_H */