1224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * include/linux/eventpoll.h ( Efficient event polling implementation ) 3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Copyright (C) 2001,...,2006 Davide Libenzi 4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * This program is free software; you can redistribute it and/or modify 6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * it under the terms of the GNU General Public License as published by 7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * the Free Software Foundation; either version 2 of the License, or 8224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * (at your option) any later version. 9224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Davide Libenzi <davidel@xmailserver.org> 11224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 12224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 13224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 14224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef _UAPI_LINUX_EVENTPOLL_H 15224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _UAPI_LINUX_EVENTPOLL_H 16224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 17224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* For O_CLOEXEC */ 18224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/fcntl.h> 19224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h> 20224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 21224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Flags for epoll_create1. */ 22224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define EPOLL_CLOEXEC O_CLOEXEC 23224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 24224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Valid opcodes to issue to sys_epoll_ctl() */ 25224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define EPOLL_CTL_ADD 1 26224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define EPOLL_CTL_DEL 2 27224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define EPOLL_CTL_MOD 3 28224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 29224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 30224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Request the handling of system wakeup events so as to prevent system suspends 31224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * from happening while those events are being processed. 32224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 33224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Assuming neither EPOLLET nor EPOLLONESHOT is set, system suspends will not be 34224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * re-allowed until epoll_wait is called again after consuming the wakeup 35224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * event(s). 36224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 37224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Requires CAP_BLOCK_SUSPEND 38224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 39224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define EPOLLWAKEUP (1 << 29) 40224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 41224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Set the One Shot behaviour for the target file descriptor */ 42224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define EPOLLONESHOT (1 << 30) 43224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 44224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Set the Edge Triggered behaviour for the target file descriptor */ 45224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define EPOLLET (1 << 31) 46224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 47224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 48224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * On x86-64 make the 64bit structure have the same alignment as the 49224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 32bit structure. This makes 32bit emulation easier. 50224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 51224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * UML/x86_64 needs the same packing as x86_64 52224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 53224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifdef __x86_64__ 54224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define EPOLL_PACKED __attribute__((packed)) 55224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#else 56224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define EPOLL_PACKED 57224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 58224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 59224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct epoll_event { 60224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u32 events; 61224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __u64 data; 62224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng} EPOLL_PACKED; 63224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 64e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#ifdef CONFIG_PM_SLEEP 65e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferrisstatic inline void ep_take_care_of_epollwakeup(struct epoll_event *epev) 66e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris{ 67e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris if ((epev->events & EPOLLWAKEUP) && !capable(CAP_BLOCK_SUSPEND)) 68e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris epev->events &= ~EPOLLWAKEUP; 69e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris} 70e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#else 71e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferrisstatic inline void ep_take_care_of_epollwakeup(struct epoll_event *epev) 72e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris{ 73e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris epev->events &= ~EPOLLWAKEUP; 74e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris} 75e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#endif 76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif /* _UAPI_LINUX_EVENTPOLL_H */ 77