1*4d495c6eSApple OSS Distributions /* 2*4d495c6eSApple OSS Distributions * Copyright (c) 2003-2021 Apple Inc. All rights reserved. 3*4d495c6eSApple OSS Distributions * 4*4d495c6eSApple OSS Distributions * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5*4d495c6eSApple OSS Distributions * 6*4d495c6eSApple OSS Distributions * This file contains Original Code and/or Modifications of Original Code 7*4d495c6eSApple OSS Distributions * as defined in and that are subject to the Apple Public Source License 8*4d495c6eSApple OSS Distributions * Version 2.0 (the 'License'). You may not use this file except in 9*4d495c6eSApple OSS Distributions * compliance with the License. The rights granted to you under the License 10*4d495c6eSApple OSS Distributions * may not be used to create, or enable the creation or redistribution of, 11*4d495c6eSApple OSS Distributions * unlawful or unlicensed copies of an Apple operating system, or to 12*4d495c6eSApple OSS Distributions * circumvent, violate, or enable the circumvention or violation of, any 13*4d495c6eSApple OSS Distributions * terms of an Apple operating system software license agreement. 14*4d495c6eSApple OSS Distributions * 15*4d495c6eSApple OSS Distributions * Please obtain a copy of the License at 16*4d495c6eSApple OSS Distributions * http://www.opensource.apple.com/apsl/ and read it before using this file. 17*4d495c6eSApple OSS Distributions * 18*4d495c6eSApple OSS Distributions * The Original Code and all software distributed under the License are 19*4d495c6eSApple OSS Distributions * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20*4d495c6eSApple OSS Distributions * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21*4d495c6eSApple OSS Distributions * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22*4d495c6eSApple OSS Distributions * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23*4d495c6eSApple OSS Distributions * Please see the License for the specific language governing rights and 24*4d495c6eSApple OSS Distributions * limitations under the License. 25*4d495c6eSApple OSS Distributions * 26*4d495c6eSApple OSS Distributions * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27*4d495c6eSApple OSS Distributions */ 28*4d495c6eSApple OSS Distributions /*- 29*4d495c6eSApple OSS Distributions * Copyright (c) 1999,2000,2001 Jonathan Lemon <[email protected]> 30*4d495c6eSApple OSS Distributions * All rights reserved. 31*4d495c6eSApple OSS Distributions * 32*4d495c6eSApple OSS Distributions * Redistribution and use in source and binary forms, with or without 33*4d495c6eSApple OSS Distributions * modification, are permitted provided that the following conditions 34*4d495c6eSApple OSS Distributions * are met: 35*4d495c6eSApple OSS Distributions * 1. Redistributions of source code must retain the above copyright 36*4d495c6eSApple OSS Distributions * notice, this list of conditions and the following disclaimer. 37*4d495c6eSApple OSS Distributions * 2. Redistributions in binary form must reproduce the above copyright 38*4d495c6eSApple OSS Distributions * notice, this list of conditions and the following disclaimer in the 39*4d495c6eSApple OSS Distributions * documentation and/or other materials provided with the distribution. 40*4d495c6eSApple OSS Distributions * 41*4d495c6eSApple OSS Distributions * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 42*4d495c6eSApple OSS Distributions * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 43*4d495c6eSApple OSS Distributions * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 44*4d495c6eSApple OSS Distributions * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 45*4d495c6eSApple OSS Distributions * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 46*4d495c6eSApple OSS Distributions * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 47*4d495c6eSApple OSS Distributions * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 48*4d495c6eSApple OSS Distributions * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 49*4d495c6eSApple OSS Distributions * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 50*4d495c6eSApple OSS Distributions * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 51*4d495c6eSApple OSS Distributions * SUCH DAMAGE. 52*4d495c6eSApple OSS Distributions * 53*4d495c6eSApple OSS Distributions * $FreeBSD: src/sys/sys/event.h,v 1.5.2.5 2001/12/14 19:21:22 jlemon Exp $ 54*4d495c6eSApple OSS Distributions */ 55*4d495c6eSApple OSS Distributions 56*4d495c6eSApple OSS Distributions #ifndef _SYS_EVENT_H_ 57*4d495c6eSApple OSS Distributions #define _SYS_EVENT_H_ 58*4d495c6eSApple OSS Distributions 59*4d495c6eSApple OSS Distributions #include <machine/types.h> 60*4d495c6eSApple OSS Distributions #include <sys/cdefs.h> 61*4d495c6eSApple OSS Distributions #include <sys/queue.h> 62*4d495c6eSApple OSS Distributions #include <stdint.h> 63*4d495c6eSApple OSS Distributions #ifndef KERNEL 64*4d495c6eSApple OSS Distributions #include <sys/types.h> 65*4d495c6eSApple OSS Distributions #endif 66*4d495c6eSApple OSS Distributions 67*4d495c6eSApple OSS Distributions /* 68*4d495c6eSApple OSS Distributions * Filter types 69*4d495c6eSApple OSS Distributions */ 70*4d495c6eSApple OSS Distributions #define EVFILT_READ (-1) 71*4d495c6eSApple OSS Distributions #define EVFILT_WRITE (-2) 72*4d495c6eSApple OSS Distributions #define EVFILT_AIO (-3) /* attached to aio requests */ 73*4d495c6eSApple OSS Distributions #define EVFILT_VNODE (-4) /* attached to vnodes */ 74*4d495c6eSApple OSS Distributions #define EVFILT_PROC (-5) /* attached to struct proc */ 75*4d495c6eSApple OSS Distributions #define EVFILT_SIGNAL (-6) /* attached to struct proc */ 76*4d495c6eSApple OSS Distributions #define EVFILT_TIMER (-7) /* timers */ 77*4d495c6eSApple OSS Distributions #define EVFILT_MACHPORT (-8) /* Mach portsets */ 78*4d495c6eSApple OSS Distributions #define EVFILT_FS (-9) /* Filesystem events */ 79*4d495c6eSApple OSS Distributions #define EVFILT_USER (-10) /* User events */ 80*4d495c6eSApple OSS Distributions #ifdef PRIVATE 81*4d495c6eSApple OSS Distributions /* Additional filter types in event_private.h */ 82*4d495c6eSApple OSS Distributions #endif 83*4d495c6eSApple OSS Distributions #define EVFILT_VM (-12) /* Virtual memory events */ 84*4d495c6eSApple OSS Distributions #define EVFILT_EXCEPT (-15) /* Exception events */ 85*4d495c6eSApple OSS Distributions 86*4d495c6eSApple OSS Distributions #ifdef PRIVATE 87*4d495c6eSApple OSS Distributions /* Make sure to count the filter types in event_private.h! */ 88*4d495c6eSApple OSS Distributions #endif 89*4d495c6eSApple OSS Distributions #define EVFILT_SYSCOUNT 18 90*4d495c6eSApple OSS Distributions #define EVFILT_THREADMARKER EVFILT_SYSCOUNT /* Internal use only */ 91*4d495c6eSApple OSS Distributions 92*4d495c6eSApple OSS Distributions #pragma pack(4) 93*4d495c6eSApple OSS Distributions 94*4d495c6eSApple OSS Distributions struct kevent { 95*4d495c6eSApple OSS Distributions uintptr_t ident; /* identifier for this event */ 96*4d495c6eSApple OSS Distributions int16_t filter; /* filter for event */ 97*4d495c6eSApple OSS Distributions uint16_t flags; /* general flags */ 98*4d495c6eSApple OSS Distributions uint32_t fflags; /* filter-specific flags */ 99*4d495c6eSApple OSS Distributions intptr_t data; /* filter-specific data */ 100*4d495c6eSApple OSS Distributions void *udata; /* opaque user data identifier */ 101*4d495c6eSApple OSS Distributions }; 102*4d495c6eSApple OSS Distributions 103*4d495c6eSApple OSS Distributions #pragma pack() 104*4d495c6eSApple OSS Distributions 105*4d495c6eSApple OSS Distributions struct kevent64_s { 106*4d495c6eSApple OSS Distributions uint64_t ident; /* identifier for this event */ 107*4d495c6eSApple OSS Distributions int16_t filter; /* filter for event */ 108*4d495c6eSApple OSS Distributions uint16_t flags; /* general flags */ 109*4d495c6eSApple OSS Distributions uint32_t fflags; /* filter-specific flags */ 110*4d495c6eSApple OSS Distributions int64_t data; /* filter-specific data */ 111*4d495c6eSApple OSS Distributions uint64_t udata; /* opaque user data identifier */ 112*4d495c6eSApple OSS Distributions uint64_t ext[2]; /* filter-specific extensions */ 113*4d495c6eSApple OSS Distributions }; 114*4d495c6eSApple OSS Distributions 115*4d495c6eSApple OSS Distributions #define EV_SET(kevp, a, b, c, d, e, f) do { \ 116*4d495c6eSApple OSS Distributions struct kevent *__kevp__ = (kevp); \ 117*4d495c6eSApple OSS Distributions __kevp__->ident = (a); \ 118*4d495c6eSApple OSS Distributions __kevp__->filter = (b); \ 119*4d495c6eSApple OSS Distributions __kevp__->flags = (c); \ 120*4d495c6eSApple OSS Distributions __kevp__->fflags = (d); \ 121*4d495c6eSApple OSS Distributions __kevp__->data = (e); \ 122*4d495c6eSApple OSS Distributions __kevp__->udata = (f); \ 123*4d495c6eSApple OSS Distributions } while(0) 124*4d495c6eSApple OSS Distributions 125*4d495c6eSApple OSS Distributions #define EV_SET64(kevp, a, b, c, d, e, f, g, h) do { \ 126*4d495c6eSApple OSS Distributions struct kevent64_s *__kevp__ = (kevp); \ 127*4d495c6eSApple OSS Distributions __kevp__->ident = (a); \ 128*4d495c6eSApple OSS Distributions __kevp__->filter = (b); \ 129*4d495c6eSApple OSS Distributions __kevp__->flags = (c); \ 130*4d495c6eSApple OSS Distributions __kevp__->fflags = (d); \ 131*4d495c6eSApple OSS Distributions __kevp__->data = (e); \ 132*4d495c6eSApple OSS Distributions __kevp__->udata = (f); \ 133*4d495c6eSApple OSS Distributions __kevp__->ext[0] = (g); \ 134*4d495c6eSApple OSS Distributions __kevp__->ext[1] = (h); \ 135*4d495c6eSApple OSS Distributions } while(0) 136*4d495c6eSApple OSS Distributions 137*4d495c6eSApple OSS Distributions 138*4d495c6eSApple OSS Distributions /* kevent system call flags */ 139*4d495c6eSApple OSS Distributions #define KEVENT_FLAG_NONE 0x000000 /* no flag value */ 140*4d495c6eSApple OSS Distributions #define KEVENT_FLAG_IMMEDIATE 0x000001 /* immediate timeout */ 141*4d495c6eSApple OSS Distributions #define KEVENT_FLAG_ERROR_EVENTS 0x000002 /* output events only include change errors */ 142*4d495c6eSApple OSS Distributions 143*4d495c6eSApple OSS Distributions /* actions */ 144*4d495c6eSApple OSS Distributions #define EV_ADD 0x0001 /* add event to kq (implies enable) */ 145*4d495c6eSApple OSS Distributions #define EV_DELETE 0x0002 /* delete event from kq */ 146*4d495c6eSApple OSS Distributions #define EV_ENABLE 0x0004 /* enable event */ 147*4d495c6eSApple OSS Distributions #define EV_DISABLE 0x0008 /* disable event (not reported) */ 148*4d495c6eSApple OSS Distributions 149*4d495c6eSApple OSS Distributions /* flags */ 150*4d495c6eSApple OSS Distributions #define EV_ONESHOT 0x0010 /* only report one occurrence */ 151*4d495c6eSApple OSS Distributions #define EV_CLEAR 0x0020 /* clear event state after reporting */ 152*4d495c6eSApple OSS Distributions #define EV_RECEIPT 0x0040 /* force immediate event output */ 153*4d495c6eSApple OSS Distributions /* ... with or without EV_ERROR */ 154*4d495c6eSApple OSS Distributions /* ... use KEVENT_FLAG_ERROR_EVENTS */ 155*4d495c6eSApple OSS Distributions /* on syscalls supporting flags */ 156*4d495c6eSApple OSS Distributions 157*4d495c6eSApple OSS Distributions #define EV_DISPATCH 0x0080 /* disable event after reporting */ 158*4d495c6eSApple OSS Distributions #define EV_UDATA_SPECIFIC 0x0100 /* unique kevent per udata value */ 159*4d495c6eSApple OSS Distributions 160*4d495c6eSApple OSS Distributions #define EV_DISPATCH2 (EV_DISPATCH | EV_UDATA_SPECIFIC) 161*4d495c6eSApple OSS Distributions /* ... in combination with EV_DELETE */ 162*4d495c6eSApple OSS Distributions /* will defer delete until udata-specific */ 163*4d495c6eSApple OSS Distributions /* event enabled. EINPROGRESS will be */ 164*4d495c6eSApple OSS Distributions /* returned to indicate the deferral */ 165*4d495c6eSApple OSS Distributions 166*4d495c6eSApple OSS Distributions #define EV_VANISHED 0x0200 /* report that source has vanished */ 167*4d495c6eSApple OSS Distributions /* ... only valid with EV_DISPATCH2 */ 168*4d495c6eSApple OSS Distributions 169*4d495c6eSApple OSS Distributions #define EV_SYSFLAGS 0xF000 /* reserved by system */ 170*4d495c6eSApple OSS Distributions #define EV_FLAG0 0x1000 /* filter-specific flag */ 171*4d495c6eSApple OSS Distributions #define EV_FLAG1 0x2000 /* filter-specific flag */ 172*4d495c6eSApple OSS Distributions 173*4d495c6eSApple OSS Distributions /* returned values */ 174*4d495c6eSApple OSS Distributions #define EV_EOF 0x8000 /* EOF detected */ 175*4d495c6eSApple OSS Distributions #define EV_ERROR 0x4000 /* error, data contains errno */ 176*4d495c6eSApple OSS Distributions 177*4d495c6eSApple OSS Distributions /* 178*4d495c6eSApple OSS Distributions * Filter specific flags for EVFILT_READ 179*4d495c6eSApple OSS Distributions * 180*4d495c6eSApple OSS Distributions * The default behavior for EVFILT_READ is to make the "read" determination 181*4d495c6eSApple OSS Distributions * relative to the current file descriptor read pointer. 182*4d495c6eSApple OSS Distributions * 183*4d495c6eSApple OSS Distributions * The EV_POLL flag indicates the determination should be made via poll(2) 184*4d495c6eSApple OSS Distributions * semantics. These semantics dictate always returning true for regular files, 185*4d495c6eSApple OSS Distributions * regardless of the amount of unread data in the file. 186*4d495c6eSApple OSS Distributions * 187*4d495c6eSApple OSS Distributions * On input, EV_OOBAND specifies that filter should actively return in the 188*4d495c6eSApple OSS Distributions * presence of OOB on the descriptor. It implies that filter will return 189*4d495c6eSApple OSS Distributions * if there is OOB data available to read OR when any other condition 190*4d495c6eSApple OSS Distributions * for the read are met (for example number of bytes regular data becomes >= 191*4d495c6eSApple OSS Distributions * low-watermark). 192*4d495c6eSApple OSS Distributions * If EV_OOBAND is not set on input, it implies that the filter should not actively 193*4d495c6eSApple OSS Distributions * return for out of band data on the descriptor. The filter will then only return 194*4d495c6eSApple OSS Distributions * when some other condition for read is met (ex: when number of regular data bytes 195*4d495c6eSApple OSS Distributions * >=low-watermark OR when socket can't receive more data (SS_CANTRCVMORE)). 196*4d495c6eSApple OSS Distributions * 197*4d495c6eSApple OSS Distributions * On output, EV_OOBAND indicates the presence of OOB data on the descriptor. 198*4d495c6eSApple OSS Distributions * If it was not specified as an input parameter, then the data count is the 199*4d495c6eSApple OSS Distributions * number of bytes before the current OOB marker, else data count is the number 200*4d495c6eSApple OSS Distributions * of bytes beyond OOB marker. 201*4d495c6eSApple OSS Distributions */ 202*4d495c6eSApple OSS Distributions #define EV_POLL EV_FLAG0 203*4d495c6eSApple OSS Distributions #define EV_OOBAND EV_FLAG1 204*4d495c6eSApple OSS Distributions 205*4d495c6eSApple OSS Distributions /* 206*4d495c6eSApple OSS Distributions * data/hint fflags for EVFILT_USER, shared with userspace 207*4d495c6eSApple OSS Distributions */ 208*4d495c6eSApple OSS Distributions 209*4d495c6eSApple OSS Distributions /* 210*4d495c6eSApple OSS Distributions * On input, NOTE_TRIGGER causes the event to be triggered for output. 211*4d495c6eSApple OSS Distributions */ 212*4d495c6eSApple OSS Distributions #define NOTE_TRIGGER 0x01000000 213*4d495c6eSApple OSS Distributions 214*4d495c6eSApple OSS Distributions /* 215*4d495c6eSApple OSS Distributions * On input, the top two bits of fflags specifies how the lower twenty four 216*4d495c6eSApple OSS Distributions * bits should be applied to the stored value of fflags. 217*4d495c6eSApple OSS Distributions * 218*4d495c6eSApple OSS Distributions * On output, the top two bits will always be set to NOTE_FFNOP and the 219*4d495c6eSApple OSS Distributions * remaining twenty four bits will contain the stored fflags value. 220*4d495c6eSApple OSS Distributions */ 221*4d495c6eSApple OSS Distributions #define NOTE_FFNOP 0x00000000 /* ignore input fflags */ 222*4d495c6eSApple OSS Distributions #define NOTE_FFAND 0x40000000 /* and fflags */ 223*4d495c6eSApple OSS Distributions #define NOTE_FFOR 0x80000000 /* or fflags */ 224*4d495c6eSApple OSS Distributions #define NOTE_FFCOPY 0xc0000000 /* copy fflags */ 225*4d495c6eSApple OSS Distributions #define NOTE_FFCTRLMASK 0xc0000000 /* mask for operations */ 226*4d495c6eSApple OSS Distributions #define NOTE_FFLAGSMASK 0x00ffffff 227*4d495c6eSApple OSS Distributions 228*4d495c6eSApple OSS Distributions /* 229*4d495c6eSApple OSS Distributions * data/hint fflags for EVFILT_{READ|WRITE}, shared with userspace 230*4d495c6eSApple OSS Distributions * 231*4d495c6eSApple OSS Distributions * The default behavior for EVFILT_READ is to make the determination 232*4d495c6eSApple OSS Distributions * realtive to the current file descriptor read pointer. 233*4d495c6eSApple OSS Distributions */ 234*4d495c6eSApple OSS Distributions #define NOTE_LOWAT 0x00000001 /* low water mark */ 235*4d495c6eSApple OSS Distributions 236*4d495c6eSApple OSS Distributions /* data/hint flags for EVFILT_EXCEPT, shared with userspace */ 237*4d495c6eSApple OSS Distributions #define NOTE_OOB 0x00000002 /* OOB data */ 238*4d495c6eSApple OSS Distributions 239*4d495c6eSApple OSS Distributions /* 240*4d495c6eSApple OSS Distributions * data/hint fflags for EVFILT_VNODE, shared with userspace 241*4d495c6eSApple OSS Distributions */ 242*4d495c6eSApple OSS Distributions #define NOTE_DELETE 0x00000001 /* vnode was removed */ 243*4d495c6eSApple OSS Distributions #define NOTE_WRITE 0x00000002 /* data contents changed */ 244*4d495c6eSApple OSS Distributions #define NOTE_EXTEND 0x00000004 /* size increased */ 245*4d495c6eSApple OSS Distributions #define NOTE_ATTRIB 0x00000008 /* attributes changed */ 246*4d495c6eSApple OSS Distributions #define NOTE_LINK 0x00000010 /* link count changed */ 247*4d495c6eSApple OSS Distributions #define NOTE_RENAME 0x00000020 /* vnode was renamed */ 248*4d495c6eSApple OSS Distributions #define NOTE_REVOKE 0x00000040 /* vnode access was revoked */ 249*4d495c6eSApple OSS Distributions #define NOTE_NONE 0x00000080 /* No specific vnode event: to test for EVFILT_READ activation*/ 250*4d495c6eSApple OSS Distributions #define NOTE_FUNLOCK 0x00000100 /* vnode was unlocked by flock(2) */ 251*4d495c6eSApple OSS Distributions #define NOTE_LEASE_DOWNGRADE 0x00000200 /* lease downgrade requested */ 252*4d495c6eSApple OSS Distributions #define NOTE_LEASE_RELEASE 0x00000400 /* lease release requested */ 253*4d495c6eSApple OSS Distributions 254*4d495c6eSApple OSS Distributions /* 255*4d495c6eSApple OSS Distributions * data/hint fflags for EVFILT_PROC, shared with userspace 256*4d495c6eSApple OSS Distributions * 257*4d495c6eSApple OSS Distributions * Please note that EVFILT_PROC and EVFILT_SIGNAL share the same knote list 258*4d495c6eSApple OSS Distributions * that hangs off the proc structure. They also both play games with the hint 259*4d495c6eSApple OSS Distributions * passed to KNOTE(). If NOTE_SIGNAL is passed as a hint, then the lower bits 260*4d495c6eSApple OSS Distributions * of the hint contain the signal. IF NOTE_FORK is passed, then the lower bits 261*4d495c6eSApple OSS Distributions * contain the PID of the child (but the pid does not get passed through in 262*4d495c6eSApple OSS Distributions * the actual kevent). 263*4d495c6eSApple OSS Distributions */ 264*4d495c6eSApple OSS Distributions enum { 265*4d495c6eSApple OSS Distributions eNoteReapDeprecated __deprecated_enum_msg("This kqueue(2) EVFILT_PROC flag is deprecated") = 0x10000000 266*4d495c6eSApple OSS Distributions }; 267*4d495c6eSApple OSS Distributions 268*4d495c6eSApple OSS Distributions #define NOTE_EXIT 0x80000000 /* process exited */ 269*4d495c6eSApple OSS Distributions #define NOTE_FORK 0x40000000 /* process forked */ 270*4d495c6eSApple OSS Distributions #define NOTE_EXEC 0x20000000 /* process exec'd */ 271*4d495c6eSApple OSS Distributions #define NOTE_REAP ((unsigned int)eNoteReapDeprecated /* 0x10000000 */ ) /* process reaped */ 272*4d495c6eSApple OSS Distributions #define NOTE_SIGNAL 0x08000000 /* shared with EVFILT_SIGNAL */ 273*4d495c6eSApple OSS Distributions #define NOTE_EXITSTATUS 0x04000000 /* exit status to be returned, valid for child process or when allowed to signal target pid */ 274*4d495c6eSApple OSS Distributions #define NOTE_EXIT_DETAIL 0x02000000 /* provide details on reasons for exit */ 275*4d495c6eSApple OSS Distributions 276*4d495c6eSApple OSS Distributions #define NOTE_PDATAMASK 0x000fffff /* mask for signal & exit status */ 277*4d495c6eSApple OSS Distributions #define NOTE_PCTRLMASK (~NOTE_PDATAMASK) 278*4d495c6eSApple OSS Distributions 279*4d495c6eSApple OSS Distributions /* 280*4d495c6eSApple OSS Distributions * If NOTE_EXITSTATUS is present, provide additional info about exiting process. 281*4d495c6eSApple OSS Distributions */ 282*4d495c6eSApple OSS Distributions enum { 283*4d495c6eSApple OSS Distributions eNoteExitReparentedDeprecated __deprecated_enum_msg("This kqueue(2) EVFILT_PROC flag is no longer sent") = 0x00080000 284*4d495c6eSApple OSS Distributions }; 285*4d495c6eSApple OSS Distributions #define NOTE_EXIT_REPARENTED ((unsigned int)eNoteExitReparentedDeprecated) /* exited while reparented */ 286*4d495c6eSApple OSS Distributions 287*4d495c6eSApple OSS Distributions /* 288*4d495c6eSApple OSS Distributions * If NOTE_EXIT_DETAIL is present, these bits indicate specific reasons for exiting. 289*4d495c6eSApple OSS Distributions */ 290*4d495c6eSApple OSS Distributions #define NOTE_EXIT_DETAIL_MASK 0x00070000 291*4d495c6eSApple OSS Distributions #define NOTE_EXIT_DECRYPTFAIL 0x00010000 292*4d495c6eSApple OSS Distributions #define NOTE_EXIT_MEMORY 0x00020000 293*4d495c6eSApple OSS Distributions #define NOTE_EXIT_CSERROR 0x00040000 294*4d495c6eSApple OSS Distributions 295*4d495c6eSApple OSS Distributions /* 296*4d495c6eSApple OSS Distributions * data/hint fflags for EVFILT_VM, shared with userspace. 297*4d495c6eSApple OSS Distributions */ 298*4d495c6eSApple OSS Distributions #define NOTE_VM_PRESSURE 0x80000000 /* will react on memory pressure */ 299*4d495c6eSApple OSS Distributions #define NOTE_VM_PRESSURE_TERMINATE 0x40000000 /* will quit on memory pressure, possibly after cleaning up dirty state */ 300*4d495c6eSApple OSS Distributions #define NOTE_VM_PRESSURE_SUDDEN_TERMINATE 0x20000000 /* will quit immediately on memory pressure */ 301*4d495c6eSApple OSS Distributions #define NOTE_VM_ERROR 0x10000000 /* there was an error */ 302*4d495c6eSApple OSS Distributions 303*4d495c6eSApple OSS Distributions /* 304*4d495c6eSApple OSS Distributions * data/hint fflags for EVFILT_TIMER, shared with userspace. 305*4d495c6eSApple OSS Distributions * The default is a (repeating) interval timer with the data 306*4d495c6eSApple OSS Distributions * specifying the timeout interval in milliseconds. 307*4d495c6eSApple OSS Distributions * 308*4d495c6eSApple OSS Distributions * All timeouts are implicitly EV_CLEAR events. 309*4d495c6eSApple OSS Distributions */ 310*4d495c6eSApple OSS Distributions #define NOTE_SECONDS 0x00000001 /* data is seconds */ 311*4d495c6eSApple OSS Distributions #define NOTE_USECONDS 0x00000002 /* data is microseconds */ 312*4d495c6eSApple OSS Distributions #define NOTE_NSECONDS 0x00000004 /* data is nanoseconds */ 313*4d495c6eSApple OSS Distributions #define NOTE_ABSOLUTE 0x00000008 /* absolute timeout */ 314*4d495c6eSApple OSS Distributions /* ... implicit EV_ONESHOT, timeout uses the gettimeofday epoch */ 315*4d495c6eSApple OSS Distributions #define NOTE_LEEWAY 0x00000010 /* ext[1] holds leeway for power aware timers */ 316*4d495c6eSApple OSS Distributions #define NOTE_CRITICAL 0x00000020 /* system does minimal timer coalescing */ 317*4d495c6eSApple OSS Distributions #define NOTE_BACKGROUND 0x00000040 /* system does maximum timer coalescing */ 318*4d495c6eSApple OSS Distributions #define NOTE_MACH_CONTINUOUS_TIME 0x00000080 319*4d495c6eSApple OSS Distributions /* 320*4d495c6eSApple OSS Distributions * NOTE_MACH_CONTINUOUS_TIME: 321*4d495c6eSApple OSS Distributions * with NOTE_ABSOLUTE: causes the timer to continue to tick across sleep, 322*4d495c6eSApple OSS Distributions * still uses gettimeofday epoch 323*4d495c6eSApple OSS Distributions * with NOTE_MACHTIME and NOTE_ABSOLUTE: uses mach continuous time epoch 324*4d495c6eSApple OSS Distributions * without NOTE_ABSOLUTE (interval timer mode): continues to tick across sleep 325*4d495c6eSApple OSS Distributions */ 326*4d495c6eSApple OSS Distributions #define NOTE_MACHTIME 0x00000100 /* data is mach absolute time units */ 327*4d495c6eSApple OSS Distributions /* timeout uses the mach absolute time epoch */ 328*4d495c6eSApple OSS Distributions 329*4d495c6eSApple OSS Distributions /* 330*4d495c6eSApple OSS Distributions * data/hint fflags for EVFILT_MACHPORT, shared with userspace. 331*4d495c6eSApple OSS Distributions * 332*4d495c6eSApple OSS Distributions * Only portsets are supported at this time. 333*4d495c6eSApple OSS Distributions * 334*4d495c6eSApple OSS Distributions * The fflags field can optionally contain the MACH_RCV_MSG, MACH_RCV_LARGE, 335*4d495c6eSApple OSS Distributions * and related trailer receive options as defined in <mach/message.h>. 336*4d495c6eSApple OSS Distributions * The presence of these flags directs the kevent64() call to attempt to receive 337*4d495c6eSApple OSS Distributions * the message during kevent delivery, rather than just indicate that a message exists. 338*4d495c6eSApple OSS Distributions * On setup, The ext[0] field contains the receive buffer pointer and ext[1] contains 339*4d495c6eSApple OSS Distributions * the receive buffer length. Upon event delivery, the actual received message size 340*4d495c6eSApple OSS Distributions * is returned in ext[1]. As with mach_msg(), the buffer must be large enough to 341*4d495c6eSApple OSS Distributions * receive the message and the requested (or default) message trailers. In addition, 342*4d495c6eSApple OSS Distributions * the fflags field contains the return code normally returned by mach_msg(). 343*4d495c6eSApple OSS Distributions * 344*4d495c6eSApple OSS Distributions * If MACH_RCV_MSG is specified, and the ext[1] field specifies a zero length, the 345*4d495c6eSApple OSS Distributions * system call argument specifying an ouput area (kevent_qos) will be consulted. If 346*4d495c6eSApple OSS Distributions * the system call specified an output data area, the user-space address 347*4d495c6eSApple OSS Distributions * of the received message is carved from that provided output data area (if enough 348*4d495c6eSApple OSS Distributions * space remains there). The address and length of each received message is 349*4d495c6eSApple OSS Distributions * returned in the ext[0] and ext[1] fields (respectively) of the corresponding kevent. 350*4d495c6eSApple OSS Distributions * 351*4d495c6eSApple OSS Distributions * IF_MACH_RCV_VOUCHER_CONTENT is specified, the contents of the message voucher is 352*4d495c6eSApple OSS Distributions * extracted (as specified in the xflags field) and stored in ext[2] up to ext[3] 353*4d495c6eSApple OSS Distributions * length. If the input length is zero, and the system call provided a data area, 354*4d495c6eSApple OSS Distributions * the space for the voucher content is carved from the provided space and its 355*4d495c6eSApple OSS Distributions * address and length is returned in ext[2] and ext[3] respectively. 356*4d495c6eSApple OSS Distributions * 357*4d495c6eSApple OSS Distributions * If no message receipt options were provided in the fflags field on setup, no 358*4d495c6eSApple OSS Distributions * message is received by this call. Instead, on output, the data field simply 359*4d495c6eSApple OSS Distributions * contains the name of the actual port detected with a message waiting. 360*4d495c6eSApple OSS Distributions */ 361*4d495c6eSApple OSS Distributions 362*4d495c6eSApple OSS Distributions /* 363*4d495c6eSApple OSS Distributions * DEPRECATED!!!!!!!!! 364*4d495c6eSApple OSS Distributions * NOTE_TRACK, NOTE_TRACKERR, and NOTE_CHILD are no longer supported as of 10.5 365*4d495c6eSApple OSS Distributions */ 366*4d495c6eSApple OSS Distributions /* additional flags for EVFILT_PROC */ 367*4d495c6eSApple OSS Distributions #define NOTE_TRACK 0x00000001 /* follow across forks */ 368*4d495c6eSApple OSS Distributions #define NOTE_TRACKERR 0x00000002 /* could not track child */ 369*4d495c6eSApple OSS Distributions #define NOTE_CHILD 0x00000004 /* am a child process */ 370*4d495c6eSApple OSS Distributions 371*4d495c6eSApple OSS Distributions 372*4d495c6eSApple OSS Distributions #ifndef KERNEL 373*4d495c6eSApple OSS Distributions /* Temporary solution for BootX to use inode.h till kqueue moves to vfs layer */ 374*4d495c6eSApple OSS Distributions struct knote; 375*4d495c6eSApple OSS Distributions SLIST_HEAD(klist, knote); 376*4d495c6eSApple OSS Distributions 377*4d495c6eSApple OSS Distributions struct timespec; 378*4d495c6eSApple OSS Distributions 379*4d495c6eSApple OSS Distributions __BEGIN_DECLS 380*4d495c6eSApple OSS Distributions int kqueue(void); 381*4d495c6eSApple OSS Distributions int kevent(int kq, 382*4d495c6eSApple OSS Distributions const struct kevent *changelist, int nchanges, 383*4d495c6eSApple OSS Distributions struct kevent *eventlist, int nevents, 384*4d495c6eSApple OSS Distributions const struct timespec *timeout); 385*4d495c6eSApple OSS Distributions int kevent64(int kq, 386*4d495c6eSApple OSS Distributions const struct kevent64_s *changelist, int nchanges, 387*4d495c6eSApple OSS Distributions struct kevent64_s *eventlist, int nevents, 388*4d495c6eSApple OSS Distributions unsigned int flags, 389*4d495c6eSApple OSS Distributions const struct timespec *timeout); 390*4d495c6eSApple OSS Distributions 391*4d495c6eSApple OSS Distributions __END_DECLS 392*4d495c6eSApple OSS Distributions 393*4d495c6eSApple OSS Distributions 394*4d495c6eSApple OSS Distributions #endif /* KERNEL */ 395*4d495c6eSApple OSS Distributions 396*4d495c6eSApple OSS Distributions #ifdef PRIVATE 397*4d495c6eSApple OSS Distributions #include <sys/event_private.h> 398*4d495c6eSApple OSS Distributions #endif /* PRIVATE */ 399*4d495c6eSApple OSS Distributions 400*4d495c6eSApple OSS Distributions #endif /* !_SYS_EVENT_H_ */ 401