1/* 2 * Copyright (c) 2000-2002 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * The contents of this file constitute Original Code as defined in and 7 * are subject to the Apple Public Source License Version 1.1 (the 8 * "License"). You may not use this file except in compliance with the 9 * License. Please obtain a copy of the License at 10 * http://www.apple.com/publicsource and read it before using this file. 11 * 12 * This Original Code and all software distributed under the License are 13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER 14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the 17 * License for the specific language governing rights and limitations 18 * under the License. 19 * 20 * @APPLE_LICENSE_HEADER_END@ 21 */ 22/* Copyright (c) 1995, 1997 Apple Computer, Inc. All Rights Reserved */ 23/* 24 * Copyright (c) 1982, 1986, 1989, 1991, 1993 25 * The Regents of the University of California. All rights reserved. 26 * 27 * Redistribution and use in source and binary forms, with or without 28 * modification, are permitted provided that the following conditions 29 * are met: 30 * 1. Redistributions of source code must retain the above copyright 31 * notice, this list of conditions and the following disclaimer. 32 * 2. Redistributions in binary form must reproduce the above copyright 33 * notice, this list of conditions and the following disclaimer in the 34 * documentation and/or other materials provided with the distribution. 35 * 3. All advertising materials mentioning features or use of this software 36 * must display the following acknowledgement: 37 * This product includes software developed by the University of 38 * California, Berkeley and its contributors. 39 * 4. Neither the name of the University nor the names of its contributors 40 * may be used to endorse or promote products derived from this software 41 * without specific prior written permission. 42 * 43 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 44 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 45 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 46 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 47 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 48 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 49 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 50 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 51 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 52 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 53 * SUCH DAMAGE. 54 * 55 * @(#)user.h 8.2 (Berkeley) 9/23/93 56 */ 57 58#ifndef _SYS_USER_H_ 59#define _SYS_USER_H_ 60 61#include <sys/appleapiopts.h> 62#ifndef KERNEL 63/* stuff that *used* to be included by user.h, or is now needed */ 64#include <errno.h> 65#include <sys/time.h> 66#include <sys/resource.h> 67#include <sys/ucred.h> 68#include <sys/uio.h> 69#endif 70#include <sys/resourcevar.h> 71#ifdef KERNEL_PRIVATE 72#include <sys/signalvar.h> 73#endif 74#include <sys/vm.h> /* XXX */ 75#include <sys/sysctl.h> 76 77#ifdef KERNEL 78#ifdef __APPLE_API_PRIVATE 79#include <sys/eventvar.h> 80 81/* 82 * Per-thread U area. 83 */ 84struct uthread { 85 int *uu_ar0; /* address of users saved R0 */ 86 87 /* syscall parameters, results and catches */ 88 u_int64_t uu_arg[8]; /* arguments to current system call */ 89 int *uu_ap; /* pointer to arglist */ 90 int uu_rval[2]; 91 92 /* thread exception handling */ 93 int uu_code; /* ``code'' to trap */ 94 char uu_cursig; /* p_cursig for exc. */ 95 /* support for select - across system calls */ 96 struct _select { 97 u_int32_t *ibits, *obits; /* bits to select on */ 98 uint nbytes; /* number of bytes in ibits and obits */ 99 wait_queue_set_t wqset; /* cached across select calls */ 100 size_t allocsize; /* ...size of select cache */ 101 u_int64_t abstime; 102 int poll; 103 int error; 104 int count; 105 char * wql; 106 } uu_select; /* saved state for select() */ 107 /* to support continuations */ 108 union { 109 int uu_nfs_myiod; /* saved state for nfsd */ 110 struct _kevent_scan { 111 kevent_callback_t call; /* per-event callback */ 112 kevent_continue_t cont; /* whole call continuation */ 113 uint64_t deadline; /* computed deadline for operation */ 114 void *data; /* caller's private data */ 115 } ss_kevent_scan; /* saved state for kevent_scan() */ 116 struct _kevent { 117 struct _kevent_scan scan;/* space for the generic data */ 118 struct fileproc *fp; /* fileproc we hold iocount on */ 119 int fd; /* filedescriptor for kq */ 120 register_t *retval; /* place to store return val */ 121 user_addr_t eventlist; /* user-level event list address */ 122 int eventcount; /* user-level event count */ 123 int eventout; /* number of events output */ 124 } ss_kevent; /* saved state for kevent() */ 125 } uu_state; 126 /* internal support for continuation framework */ 127 int (*uu_continuation)(int); 128 int uu_pri; 129 int uu_timo; 130 int uu_flag; 131 struct proc * uu_proc; 132 void * uu_userstate; 133 sigset_t uu_siglist; /* signals pending for the thread */ 134 sigset_t uu_sigwait; /* sigwait on this thread*/ 135 sigset_t uu_sigmask; /* signal mask for the thread */ 136 sigset_t uu_oldmask; /* signal mask saved before sigpause */ 137 thread_t uu_act; 138 sigset_t uu_vforkmask; /* saved signal mask during vfork */ 139 140 TAILQ_ENTRY(uthread) uu_list; /* List of uthreads in proc */ 141 142 struct kaudit_record *uu_ar; /* audit record */ 143 struct task* uu_aio_task; /* target task for async io */ 144 145 /* network support for dlil layer locking */ 146 u_int32_t dlil_incremented_read; 147 lck_mtx_t *uu_mtx; 148 149 int uu_lowpri_delay; 150 151 struct ucred *uu_ucred; /* per thread credential */ 152 int uu_defer_reclaims; 153 vnode_t uu_vreclaims; 154 155#ifdef JOE_DEBUG 156 int uu_iocount; 157 int uu_vpindex; 158 void * uu_vps[32]; 159#endif 160}; 161 162typedef struct uthread * uthread_t; 163 164/* Definition of uu_flag */ 165#define UT_SAS_OLDMASK 0x00000001 /* need to restore mask before pause */ 166#define UT_NO_SIGMASK 0x00000002 /* exited thread; invalid sigmask */ 167#define UT_NOTCANCELPT 0x00000004 /* not a cancelation point */ 168#define UT_CANCEL 0x00000008 /* thread marked for cancel */ 169#define UT_CANCELED 0x00000010 /* thread cancelled */ 170#define UT_CANCELDISABLE 0x00000020 /* thread cancel disabled */ 171 172#define UT_VFORK 0x02000000 /* thread has vfork children */ 173#define UT_SETUID 0x04000000 /* thread is settugid() */ 174#define UT_WASSETUID 0x08000000 /* thread was settugid() (in vfork) */ 175 176#endif /* __APPLE_API_PRIVATE */ 177 178#endif /* KERNEL */ 179 180/* 181 * Per process structure containing data that isn't needed in core 182 * when the process isn't running (esp. when swapped out). 183 * This structure may or may not be at the same kernel address 184 * in all processes. 185 */ 186 187struct user { 188 /* NOT USED ANYMORE */ 189}; 190 191#endif /* !_SYS_USER_H_ */ 192

