1/* 2 * Copyright (c) 2003 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28/*- 29 * Copyright (c) 1999,2000 Jonathan Lemon <jlemon@FreeBSD.org> 30 * All rights reserved. 31 * 32 * Redistribution and use in source and binary forms, with or without 33 * modification, are permitted provided that the following conditions 34 * are met: 35 * 1. Redistributions of source code must retain the above copyright 36 * notice, this list of conditions and the following disclaimer. 37 * 2. Redistributions in binary form must reproduce the above copyright 38 * notice, this list of conditions and the following disclaimer in the 39 * documentation and/or other materials provided with the distribution. 40 * 41 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 51 * SUCH DAMAGE. 52 * 53 * $FreeBSD: src/sys/sys/eventvar.h,v 1.1.2.2 2000/07/18 21:49:12 jlemon Exp $ 54 */ 55 56#ifndef _SYS_EVENTVAR_H_ 57#define _SYS_EVENTVAR_H_ 58 59#include <sys/event.h> 60#include <sys/select.h> 61#include <kern/kern_types.h> 62 63#define KQ_NEVENTS 16 /* minimize copy{in,out} calls */ 64#define KQEXTENT 256 /* linear growth by this amount */ 65 66struct kqueue { 67 wait_queue_set_t kq_wqs; /* private wait queue set */ 68 decl_lck_spin_data( ,kq_lock) /* kqueue lock */ 69 int kq_state; 70 int kq_count; /* number of queued events */ 71 uint32_t kq_nprocess; /* atomic counter for kqueue_process */ 72 struct kqtailq kq_head; /* list of queued events */ 73 struct selinfo kq_sel; /* parent select/kqueue info */ 74 struct proc *kq_p; /* process containing kqueue */ 75 int kq_level; /* nesting level */ 76 77#define KQ_SEL 0x01 78#define KQ_SLEEP 0x02 79#define KQ_PROCWAIT 0x04 80#define KQ_KEV32 0x08 81#define KQ_KEV64 0x10 82}; 83 84extern struct kqueue *kqueue_alloc(struct proc *); 85extern void kqueue_dealloc(struct kqueue *); 86 87typedef int (*kevent_callback_t)(struct kqueue *, struct kevent64_s *, void *); 88typedef void (*kqueue_continue_t)(struct kqueue *, void *, int); 89 90extern int kevent_register(struct kqueue *, struct kevent64_s *, struct proc *); 91extern int kqueue_scan(struct kqueue *, kevent_callback_t, kqueue_continue_t, 92 void *, struct timeval *, struct proc *); 93extern int kqueue_stat(struct kqueue *, void *, int, proc_t); 94 95#endif /* !_SYS_EVENTVAR_H_ */ 96