1a5eb7107SBryan Cantrill /* 2a5eb7107SBryan Cantrill * This file and its contents are supplied under the terms of the 3a5eb7107SBryan Cantrill * Common Development and Distribution License ("CDDL"), version 1.0. 4a5eb7107SBryan Cantrill * You may only use this file in accordance with the terms of version 5a5eb7107SBryan Cantrill * 1.0 of the CDDL. 6a5eb7107SBryan Cantrill * 7a5eb7107SBryan Cantrill * A full copy of the text of the CDDL should have accompanied this 8a5eb7107SBryan Cantrill * source. A copy of the CDDL is also available via the Internet at 9a5eb7107SBryan Cantrill * http://www.illumos.org/license/CDDL. 10a5eb7107SBryan Cantrill */ 11a5eb7107SBryan Cantrill 12a5eb7107SBryan Cantrill /* 13a5eb7107SBryan Cantrill * Copyright (c) 2014, Joyent, Inc. All rights reserved. 1466373fa7SPatrick Mooney * Copyright 2020 Oxide Computer Company 15a5eb7107SBryan Cantrill */ 16a5eb7107SBryan Cantrill 17a5eb7107SBryan Cantrill #ifndef _SYS_EPOLL_H 18a5eb7107SBryan Cantrill #define _SYS_EPOLL_H 19a5eb7107SBryan Cantrill 20a5eb7107SBryan Cantrill #include <sys/types.h> 21a5eb7107SBryan Cantrill #include <sys/poll.h> 22a5eb7107SBryan Cantrill 23a5eb7107SBryan Cantrill #ifdef __cplusplus 24a5eb7107SBryan Cantrill extern "C" { 25a5eb7107SBryan Cantrill #endif 26a5eb7107SBryan Cantrill 27a5eb7107SBryan Cantrill typedef union epoll_data { 28a5eb7107SBryan Cantrill void *ptr; 29a5eb7107SBryan Cantrill int fd; 30a5eb7107SBryan Cantrill uint32_t u32; 31a5eb7107SBryan Cantrill uint64_t u64; 32a5eb7107SBryan Cantrill } epoll_data_t; 33a5eb7107SBryan Cantrill 34a5eb7107SBryan Cantrill #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 35a5eb7107SBryan Cantrill #pragma pack(4) 36a5eb7107SBryan Cantrill #endif 37a5eb7107SBryan Cantrill 38a5eb7107SBryan Cantrill typedef struct epoll_event { 39a5eb7107SBryan Cantrill uint32_t events; /* events */ 40a5eb7107SBryan Cantrill epoll_data_t data; /* user-specified data */ 41a5eb7107SBryan Cantrill } epoll_event_t; 42a5eb7107SBryan Cantrill 43a5eb7107SBryan Cantrill #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 44a5eb7107SBryan Cantrill #pragma pack() 45a5eb7107SBryan Cantrill #endif 46a5eb7107SBryan Cantrill 47a5eb7107SBryan Cantrill /* 48*bbf21555SRichard Lowe * Define the EPOLL* constants in terms of their poll(2)/poll(4D) equivalents. 49a5eb7107SBryan Cantrill * Note that the values match the equivalents in Linux to allow for any binary 50a5eb7107SBryan Cantrill * compatibility layers to not need to translate them. 51a5eb7107SBryan Cantrill */ 52a5eb7107SBryan Cantrill #define EPOLLIN 0x0001 53a5eb7107SBryan Cantrill #define EPOLLPRI 0x0002 54a5eb7107SBryan Cantrill #define EPOLLOUT 0x0004 55a5eb7107SBryan Cantrill #define EPOLLRDNORM 0x0040 56a5eb7107SBryan Cantrill #define EPOLLRDBAND 0x0080 57a5eb7107SBryan Cantrill #define EPOLLWRNORM 0x0100 58a5eb7107SBryan Cantrill #define EPOLLWRBAND 0x0200 59a5eb7107SBryan Cantrill #define EPOLLMSG 0x0400 /* not used */ 60a5eb7107SBryan Cantrill #define EPOLLERR 0x0008 61a5eb7107SBryan Cantrill #define EPOLLHUP 0x0010 62a5eb7107SBryan Cantrill #define EPOLLRDHUP 0x2000 63a5eb7107SBryan Cantrill 6466373fa7SPatrick Mooney #define EPOLLEXCLUSIVE (1UL << 28) /* sets exclusive wake-up mode */ 65a5eb7107SBryan Cantrill #define EPOLLWAKEUP (1UL << 29) /* no meaning; silently ignored */ 66a5eb7107SBryan Cantrill #define EPOLLONESHOT (1UL << 30) /* translated to POLLONESHOT */ 67a5eb7107SBryan Cantrill #define EPOLLET (1UL << 31) /* translated to POLLET */ 68a5eb7107SBryan Cantrill 69a5eb7107SBryan Cantrill #define EPOLL_CTL_ADD 1 70a5eb7107SBryan Cantrill #define EPOLL_CTL_DEL 2 71a5eb7107SBryan Cantrill #define EPOLL_CTL_MOD 3 72a5eb7107SBryan Cantrill 73a5eb7107SBryan Cantrill #define EPOLL_CLOEXEC 02000000 74a5eb7107SBryan Cantrill 75a5eb7107SBryan Cantrill #if !defined(_KERNEL) 76a5eb7107SBryan Cantrill 77a5eb7107SBryan Cantrill extern int epoll_create(int size); 78a5eb7107SBryan Cantrill extern int epoll_create1(int flags); 79a5eb7107SBryan Cantrill extern int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); 80a5eb7107SBryan Cantrill extern int epoll_wait(int epfd, struct epoll_event *events, 81a5eb7107SBryan Cantrill int maxevents, int timeout); 82a5eb7107SBryan Cantrill extern int epoll_pwait(int epfd, struct epoll_event *events, 83a5eb7107SBryan Cantrill int maxevents, int timeout, const sigset_t *sigmask); 84a5eb7107SBryan Cantrill 85a5eb7107SBryan Cantrill #endif /* !_KERNEL */ 86a5eb7107SBryan Cantrill 87a5eb7107SBryan Cantrill #ifdef __cplusplus 88a5eb7107SBryan Cantrill } 89a5eb7107SBryan Cantrill #endif 90a5eb7107SBryan Cantrill 91a5eb7107SBryan Cantrill #endif /* _SYS_EPOLL_H */ 92