2  * Copyright (c) 2000-2012 Apple Inc. All rights reserved. 
   4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 
   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. 
  15  * Please obtain a copy of the License at 
  16  * http://www.opensource.apple.com/apsl/ and read it before using this file. 
  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. 
  26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 
  28 /* Copyright (c) 1995, 1997 Apple Computer, Inc. All Rights Reserved */ 
  30  * Copyright (c) 1982, 1986, 1989, 1991, 1993 
  31  *      The Regents of the University of California.  All rights reserved. 
  33  * Redistribution and use in source and binary forms, with or without 
  34  * modification, are permitted provided that the following conditions 
  36  * 1. Redistributions of source code must retain the above copyright 
  37  *    notice, this list of conditions and the following disclaimer. 
  38  * 2. Redistributions in binary form must reproduce the above copyright 
  39  *    notice, this list of conditions and the following disclaimer in the 
  40  *    documentation and/or other materials provided with the distribution. 
  41  * 3. All advertising materials mentioning features or use of this software 
  42  *    must display the following acknowledgement: 
  43  *      This product includes software developed by the University of 
  44  *      California, Berkeley and its contributors. 
  45  * 4. Neither the name of the University nor the names of its contributors 
  46  *    may be used to endorse or promote products derived from this software 
  47  *    without specific prior written permission. 
  49  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 
  50  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
  51  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
  52  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 
  53  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
  54  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
  55  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
  56  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
  57  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
  58  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
  61  *      @(#)user.h      8.2 (Berkeley) 9/23/93 
  67 #include <sys/appleapiopts.h> 
  69 /* stuff that *used* to be included by user.h, or is now needed */ 
  72 #include <sys/resource.h> 
  73 #include <sys/ucred.h> 
  76 #ifdef XNU_KERNEL_PRIVATE 
  77 #include <sys/resourcevar.h> 
  78 #include <sys/signalvar.h> 
  80 #include <sys/vm.h>             /* XXX */ 
  81 #include <sys/sysctl.h> 
  84 #ifdef BSD_KERNEL_PRIVATE 
  85 #include <sys/pthread_internal.h> /* for uu_kwe entry */ 
  86 #endif  /* BSD_KERNEL_PRIVATE */ 
  87 #ifdef __APPLE_API_PRIVATE 
  88 #include <sys/eventvar.h> 
  90 #if !defined(__LP64__) || defined(XNU_KERNEL_PRIVATE) 
  92  * VFS context structure (part of uthread) 
  95         thread_t        vc_thread
;              /* pointer to Mach thread */ 
  96         kauth_cred_t    vc_ucred
;               /* per thread credential */ 
 100  * struct representing a document "tombstone" that's recorded 
 101  * when a thread manipulates files marked with a document-id. 
 102  * if the thread recreates the same item, this tombstone is 
 103  * used to preserve the document_id on the new file. 
 105  * It is a separate structure because of its size - we want to 
 106  * allocate it on demand instead of just stuffing it into the 
 109 struct doc_tombstone 
{ 
 110         struct vnode     
*t_lastop_parent
; 
 111         struct vnode     
*t_lastop_item
; 
 112         uint32_t          t_lastop_parent_vid
; 
 113         uint32_t          t_lastop_item_vid
; 
 114         uint64_t          t_lastop_fileid
; 
 115         uint64_t          t_lastop_document_id
; 
 116         unsigned char     t_lastop_filename
[NAME_MAX
+1]; 
 119 #endif /* !__LP64 || XNU_KERNEL_PRIVATE */ 
 121 #ifdef BSD_KERNEL_PRIVATE 
 122 /* XXX Deprecated: xnu source compatability */ 
 123 #define uu_ucred        uu_context.vc_ucred 
 125 struct label
;           /* MAC label dummy struct */ 
 127 #define MAXTHREADNAMESIZE 64 
 133         /* syscall parameters, results and catches */ 
 134         u_int64_t uu_arg
[8]; /* arguments to current system call */ 
 136         unsigned int syscall_code
; /* current syscall code */ 
 138         /* thread exception handling */ 
 139         mach_exception_code_t uu_code
;  /* ``code'' to trap */ 
 140         mach_exception_subcode_t uu_subcode
; 
 142         char uu_cursig
;                 /* p_cursig for exc. */ 
 143         /* support for syscalls which use continuations */ 
 145                 struct _select_data 
{ 
 149                         struct select_nocancel_args 
*args
;      /* original syscall arguments */ 
 150                         int32_t *retval
;                                        /* place to store return val */ 
 152                 struct _kqueue_scan 
{ 
 153                         kevent_callback_t call
; /* per-event callback */ 
 154                         kqueue_continue_t cont
; /* whole call continuation */ 
 155                         uint64_t deadline
;      /* computed deadline for operation */ 
 156                         void *data
;             /* caller's private data */ 
 157                 } ss_kqueue_scan
;               /* saved state for kevent_scan() */ 
 159                         struct _kqueue_scan scan
;/* space for the generic data */ 
 160                         struct fileproc 
*fp
;     /* fileproc we hold iocount on */ 
 161                         int fd
;                  /* filedescriptor for kq */ 
 162                         int32_t *retval
;         /* place to store return val */ 
 163                         user_addr_t eventlist
;   /* user-level event list address */ 
 164                         size_t eventsize
;       /* kevent or kevent64_s */ 
 165                         int eventcount
;         /* user-level event count */ 
 166                         int eventout
;            /* number of events output */ 
 167                 } ss_kevent
;                     /* saved state for kevent() */ 
 170                         user_addr_t message
;    /* message in progress */ 
 173                 struct ksyn_waitq_element  uu_kwe
;              /* user for pthread synch */ 
 175                 struct _waitid_data 
{ 
 176                         struct waitid_nocancel_args 
*args
;      /* original syscall arguments */ 
 177                         int32_t *retval
;                        /* place to store return val */ 
 181                         struct wait4_nocancel_args 
*args
;       /* original syscall arguments */ 
 182                         int32_t *retval
;                        /* place to store return val */ 
 186         /* Persistent memory allocations across system calls */ 
 188                         u_int32_t       
*ibits
, *obits
; /* bits to select on */ 
 189                         uint    nbytes
; /* number of bytes in ibits and obits */ 
 190         } uu_select
;                    /* saved state for select() */ 
 192   /* internal support for continuation framework */ 
 193     int (*uu_continuation
)(int); 
 196         caddr_t uu_wchan
;                       /* sleeping thread wait channel */ 
 197         const char *uu_wmesg
;                   /* ... wait message */ 
 198         struct proc 
* uu_proc
; 
 201         wait_queue_set_t uu_wqset
;                      /* cached across select calls */ 
 202         size_t uu_allocsize
;                            /* ...size of select cache */ 
 204         sigset_t uu_siglist
;                            /* signals pending for the thread */ 
 205         sigset_t  uu_sigwait
;                           /*  sigwait on this thread*/ 
 206         sigset_t  uu_sigmask
;                           /* signal mask for the thread */ 
 207         sigset_t  uu_oldmask
;                           /* signal mask saved before sigpause */ 
 208         sigset_t  uu_vforkmask
;                         /* saved signal mask during vfork */ 
 209         struct vfs_context uu_context
;                  /* thread + cred */ 
 211         TAILQ_ENTRY(uthread
) uu_list
;           /* List of uthreads in proc */ 
 213         struct kaudit_record    
*uu_ar
;                 /* audit record */ 
 214         struct task
*    uu_aio_task
;                    /* target task for async io */ 
 218         TAILQ_ENTRY(uthread
) uu_throttlelist
;   /* List of uthreads currently throttled */ 
 219         void    *       uu_throttle_info
;       /* pointer to throttled I/Os info */ 
 220         int             uu_on_throttlelist
; 
 221         int             uu_lowpri_window
; 
 222         boolean_t       uu_throttle_bc
; 
 224         u_int32_t       uu_network_marks
;       /* network control flow marks */ 
 226         struct kern_sigaltstack uu_sigstk
; 
 227         vnode_t         uu_vreclaims
; 
 228         vnode_t         uu_cdir
;                /* per thread CWD */ 
 229         int             uu_dupfd
;               /* fd in fdesc_open/dupfdopen */ 
 230         int             uu_defer_reclaims
; 
 236         void    *       uu_pcs
[32][10]; 
 239         uint32_t        t_dtrace_errno
; /* Most recent errno */ 
 240         siginfo_t       t_dtrace_siginfo
; 
 241         uint64_t        t_dtrace_resumepid
; /* DTrace's pidresume() pid */ 
 242         uint8_t         t_dtrace_stop
;  /* indicates a DTrace desired stop */ 
 243         uint8_t         t_dtrace_sig
;   /* signal sent via DTrace's raise() */ 
 247                         uint8_t _t_dtrace_on
;   /* hit a fasttrap tracepoint */ 
 248                         uint8_t _t_dtrace_step
; /* about to return to kernel */ 
 249                         uint8_t _t_dtrace_ret
;  /* handling a return probe */ 
 250                         uint8_t _t_dtrace_ast
;  /* saved ast flag */ 
 251 #if __sol64 || defined(__APPLE__) 
 252                         uint8_t _t_dtrace_reg
;  /* modified register */ 
 255                 u_int32_t _t_dtrace_ft
;           /* bitwise or of these flags */ 
 257 #define t_dtrace_ft     _tdu._t_dtrace_ft 
 258 #define t_dtrace_on     _tdu._tds._t_dtrace_on 
 259 #define t_dtrace_step   _tdu._tds._t_dtrace_step 
 260 #define t_dtrace_ret    _tdu._tds._t_dtrace_ret 
 261 #define t_dtrace_ast    _tdu._tds._t_dtrace_ast 
 262 #if __sol64 || defined(__APPLE__) 
 263 #define t_dtrace_reg    _tdu._tds._t_dtrace_reg 
 266         user_addr_t     t_dtrace_pc
;    /* DTrace saved pc from fasttrap */ 
 267         user_addr_t     t_dtrace_npc
;   /* DTrace next pc from fasttrap */ 
 268         user_addr_t     t_dtrace_scrpc
; /* DTrace per-thread scratch location */ 
 269         user_addr_t     t_dtrace_astpc
; /* DTrace return sequence location */ 
 271         struct dtrace_ptss_page_entry
*  t_dtrace_scratch
; /* scratch space entry */ 
 273 #if __sol64 || defined(__APPLE__) 
 274         uint64_t        t_dtrace_regv
;  /* DTrace saved reg from fasttrap */ 
 276         void *          t_dtrace_syscall_args
; 
 277 #endif /* CONFIG_DTRACE */ 
 278         void *          uu_threadlist
; 
 280         struct label 
*  uu_label
;       /* MAC label */ 
 282         /* Document Tracking struct used to track a "tombstone" for a document */ 
 283         struct doc_tombstone 
*t_tombstone
; 
 286 typedef struct uthread 
* uthread_t
; 
 288 /* Definition of uu_flag */ 
 289 #define UT_SAS_OLDMASK  0x00000001      /* need to restore mask before pause */ 
 290 #define UT_NO_SIGMASK   0x00000002      /* exited thread; invalid sigmask */ 
 291 #define UT_NOTCANCELPT  0x00000004             /* not a cancelation point */ 
 292 #define UT_CANCEL       0x00000008             /* thread marked for cancel */ 
 293 #define UT_CANCELED     0x00000010            /* thread cancelled */ 
 294 #define UT_CANCELDISABLE 0x00000020            /* thread cancel disabled */ 
 295 #define UT_ALTSTACK     0x00000040      /* this thread has alt stack for signals */ 
 296 #define UT_THROTTLE_IO  0x00000080      /* this thread issues throttle I/O */ 
 297 #define UT_PASSIVE_IO   0x00000100      /* this thread issues passive I/O */ 
 298 #define UT_PROCEXIT     0x00000200      /* this thread completed the  proc exit */ 
 299 #define UT_RAGE_VNODES  0x00000400      /* rapid age any vnodes created by this thread */        
 300 /* 0x00000800 unused, used to be UT_BACKGROUND */ 
 301 /* 0x00001000 unused, used to be UT_BACKGROUND_TRAFFIC_MGT */ 
 303 #define UT_VFORK        0x02000000      /* thread has vfork children */ 
 304 #define UT_SETUID       0x04000000      /* thread is settugid() */ 
 305 #define UT_WASSETUID    0x08000000      /* thread was settugid() (in vfork) */ 
 306 #define UT_VFORKING     0x10000000      /* thread in vfork() syscall */ 
 308 #endif /* BSD_KERNEL_PRIVATE */ 
 310 #endif /* __APPLE_API_PRIVATE */ 
 315  * Per process structure containing data that isn't needed in core 
 316  * when the process isn't running (esp. when swapped out). 
 317  * This structure may or may not be at the same kernel address 
 322   /* NOT USED ANYMORE */ 
 325 #endif  /* !_SYS_USER_H_ */