Annotation of sys/sys/systm.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: systm.h,v 1.72 2007/06/01 19:25:08 deraadt Exp $ */
! 2: /* $NetBSD: systm.h,v 1.50 1996/06/09 04:55:09 briggs Exp $ */
! 3:
! 4: /*-
! 5: * Copyright (c) 1982, 1988, 1991, 1993
! 6: * The Regents of the University of California. All rights reserved.
! 7: * (c) UNIX System Laboratories, Inc.
! 8: * All or some portions of this file are derived from material licensed
! 9: * to the University of California by American Telephone and Telegraph
! 10: * Co. or Unix System Laboratories, Inc. and are reproduced herein with
! 11: * the permission of UNIX System Laboratories, Inc.
! 12: *
! 13: * Redistribution and use in source and binary forms, with or without
! 14: * modification, are permitted provided that the following conditions
! 15: * are met:
! 16: * 1. Redistributions of source code must retain the above copyright
! 17: * notice, this list of conditions and the following disclaimer.
! 18: * 2. Redistributions in binary form must reproduce the above copyright
! 19: * notice, this list of conditions and the following disclaimer in the
! 20: * documentation and/or other materials provided with the distribution.
! 21: * 3. Neither the name of the University nor the names of its contributors
! 22: * may be used to endorse or promote products derived from this software
! 23: * without specific prior written permission.
! 24: *
! 25: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
! 26: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 27: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 28: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
! 29: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 30: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 31: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 32: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 33: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 34: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 35: * SUCH DAMAGE.
! 36: *
! 37: * @(#)systm.h 8.4 (Berkeley) 2/23/94
! 38: */
! 39:
! 40: #ifndef __SYSTM_H__
! 41: #define __SYSTM_H__
! 42:
! 43: #include <sys/queue.h>
! 44: #include <sys/stdarg.h>
! 45:
! 46: /*
! 47: * The `securelevel' variable controls the security level of the system.
! 48: * It can only be decreased by process 1 (/sbin/init).
! 49: *
! 50: * Security levels are as follows:
! 51: * -1 permanently insecure mode - always run system in level 0 mode.
! 52: * 0 insecure mode - immutable and append-only flags may be turned off.
! 53: * All devices may be read or written subject to permission modes.
! 54: * 1 secure mode - immutable and append-only flags may not be changed;
! 55: * raw disks of mounted filesystems, /dev/mem, and /dev/kmem are
! 56: * read-only.
! 57: * 2 highly secure mode - same as (1) plus raw disks are always
! 58: * read-only whether mounted or not. This level precludes tampering
! 59: * with filesystems by unmounting them, but also inhibits running
! 60: * newfs while the system is secured.
! 61: *
! 62: * In normal operation, the system runs in level 0 mode while single user
! 63: * and in level 1 mode while multiuser. If level 2 mode is desired while
! 64: * running multiuser, it can be set in the multiuser startup script
! 65: * (/etc/rc.local) using sysctl(1). If it is desired to run the system
! 66: * in level 0 mode while multiuser, initialize the variable securelevel
! 67: * in /sys/kern/kern_sysctl.c to -1. Note that it is NOT initialized to
! 68: * zero as that would allow the vmunix binary to be patched to -1.
! 69: * Without initialization, securelevel loads in the BSS area which only
! 70: * comes into existence when the kernel is loaded and hence cannot be
! 71: * patched by a stalking hacker.
! 72: */
! 73: extern int securelevel; /* system security level */
! 74: extern const char *panicstr; /* panic message */
! 75: extern const char version[]; /* system version */
! 76: extern const char copyright[]; /* system copyright */
! 77: extern const char ostype[];
! 78: extern const char osversion[];
! 79: extern const char osrelease[];
! 80: extern int cold; /* cold start flag initialized in locore */
! 81:
! 82: extern int ncpus; /* number of CPUs */
! 83: extern int nblkdev; /* number of entries in bdevsw */
! 84: extern int nchrdev; /* number of entries in cdevsw */
! 85:
! 86: extern int selwait; /* select timeout address */
! 87:
! 88: #ifdef MULTIPROCESSOR
! 89: #define curpriority (curcpu()->ci_schedstate.spc_curpriority)
! 90: #else
! 91: extern u_char curpriority; /* priority of current process */
! 92: #endif
! 93:
! 94: extern int maxmem; /* max memory per process */
! 95: extern int physmem; /* physical memory */
! 96:
! 97: extern dev_t dumpdev; /* dump device */
! 98: extern long dumplo; /* offset into dumpdev */
! 99:
! 100: extern dev_t rootdev; /* root device */
! 101: extern struct vnode *rootvp; /* vnode equivalent to above */
! 102:
! 103: extern dev_t swapdev; /* swapping device */
! 104: extern struct vnode *swapdev_vp;/* vnode equivalent to above */
! 105:
! 106: struct proc;
! 107:
! 108: typedef int sy_call_t(struct proc *, void *, register_t *);
! 109:
! 110: extern struct sysent { /* system call table */
! 111: short sy_narg; /* number of args */
! 112: short sy_argsize; /* total size of arguments */
! 113: sy_call_t *sy_call; /* implementing function */
! 114: } sysent[];
! 115: #if _BYTE_ORDER == _BIG_ENDIAN
! 116: #define SCARG(p, k) ((p)->k.be.datum) /* get arg from args pointer */
! 117: #elif _BYTE_ORDER == _LITTLE_ENDIAN
! 118: #define SCARG(p, k) ((p)->k.le.datum) /* get arg from args pointer */
! 119: #else
! 120: #error "what byte order is this machine?"
! 121: #endif
! 122:
! 123: #if defined(_KERNEL) && defined(SYSCALL_DEBUG)
! 124: void scdebug_call(struct proc *p, register_t code, register_t retval[]);
! 125: void scdebug_ret(struct proc *p, register_t code, int error, register_t retval[]);
! 126: #endif /* _KERNEL && SYSCALL_DEBUG */
! 127:
! 128: extern int boothowto; /* reboot flags, from console subsystem */
! 129:
! 130: extern void (*v_putc)(int); /* Virtual console putc routine */
! 131:
! 132: /*
! 133: * General function declarations.
! 134: */
! 135: int nullop(void *);
! 136: int enodev(void);
! 137: int enosys(void);
! 138: int enoioctl(void);
! 139: int enxio(void);
! 140: int eopnotsupp(void *);
! 141:
! 142: int lkmenodev(void);
! 143:
! 144: struct vnodeopv_desc;
! 145: void vfs_opv_init(void);
! 146: void vfs_opv_init_explicit(struct vnodeopv_desc *);
! 147: void vfs_opv_init_default(struct vnodeopv_desc *);
! 148: void vfs_op_init(void);
! 149:
! 150: int seltrue(dev_t dev, int which, struct proc *);
! 151: void *hashinit(int, int, int, u_long *);
! 152: int sys_nosys(struct proc *, void *, register_t *);
! 153:
! 154: void panic(const char *, ...)
! 155: __attribute__((__noreturn__,__format__(__kprintf__,1,2)));
! 156: void __assert(const char *, const char *, int, const char *)
! 157: __attribute__((__noreturn__));
! 158: int printf(const char *, ...)
! 159: __attribute__((__format__(__kprintf__,1,2)));
! 160: void uprintf(const char *, ...)
! 161: __attribute__((__format__(__kprintf__,1,2)));
! 162: int vprintf(const char *, va_list);
! 163: int vsnprintf(char *, size_t, const char *, va_list);
! 164: int snprintf(char *buf, size_t, const char *, ...)
! 165: __attribute__((__format__(__kprintf__,3,4)));
! 166: struct tty;
! 167: void ttyprintf(struct tty *, const char *, ...)
! 168: __attribute__((__format__(__kprintf__,2,3)));
! 169:
! 170: void splassert_fail(int, int, const char *);
! 171: extern int splassert_ctl;
! 172:
! 173: void tablefull(const char *);
! 174:
! 175: int kcopy(const void *, void *, size_t)
! 176: __attribute__ ((__bounded__(__buffer__,1,3)))
! 177: __attribute__ ((__bounded__(__buffer__,2,3)));
! 178:
! 179: void bcopy(const void *, void *, size_t)
! 180: __attribute__ ((__bounded__(__buffer__,1,3)))
! 181: __attribute__ ((__bounded__(__buffer__,2,3)));
! 182: void ovbcopy(const void *, void *, size_t)
! 183: __attribute__ ((__bounded__(__buffer__,1,3)))
! 184: __attribute__ ((__bounded__(__buffer__,2,3)));
! 185: void bzero(void *, size_t)
! 186: __attribute__ ((__bounded__(__buffer__,1,2)));
! 187: int bcmp(const void *, const void *, size_t);
! 188: void *memcpy(void *, const void *, size_t)
! 189: __attribute__ ((__bounded__(__buffer__,1,3)))
! 190: __attribute__ ((__bounded__(__buffer__,2,3)));
! 191: void *memmove(void *, const void *, size_t)
! 192: __attribute__ ((__bounded__(__buffer__,1,3)))
! 193: __attribute__ ((__bounded__(__buffer__,2,3)));
! 194: void *memset(void *, int, size_t)
! 195: __attribute__ ((__bounded__(__buffer__,1,3)));
! 196:
! 197: int copystr(const void *, void *, size_t, size_t *)
! 198: __attribute__ ((__bounded__(__string__,2,3)));
! 199: int copyinstr(const void *, void *, size_t, size_t *)
! 200: __attribute__ ((__bounded__(__string__,2,3)));
! 201: int copyoutstr(const void *, void *, size_t, size_t *);
! 202: int copyin(const void *, void *, size_t)
! 203: __attribute__ ((__bounded__(__buffer__,2,3)));
! 204: int copyout(const void *, void *, size_t);
! 205:
! 206: struct timeval;
! 207: int hzto(struct timeval *);
! 208: int tvtohz(struct timeval *);
! 209: void realitexpire(void *);
! 210:
! 211: struct clockframe;
! 212: void hardclock(struct clockframe *);
! 213: void softclock(void);
! 214: void statclock(struct clockframe *);
! 215:
! 216: void initclocks(void);
! 217: void inittodr(time_t);
! 218: void resettodr(void);
! 219: void cpu_initclocks(void);
! 220:
! 221: void startprofclock(struct proc *);
! 222: void stopprofclock(struct proc *);
! 223: void setstatclockrate(int);
! 224:
! 225: void wdog_register(void *, int (*)(void *, int));
! 226:
! 227: /*
! 228: * Startup/shutdown hooks. Startup hooks are functions running after
! 229: * the scheduler has started but before any threads have been created
! 230: * or root has been mounted. The shutdown hooks are functions to be run
! 231: * with all interrupts disabled immediately before the system is
! 232: * halted or rebooted.
! 233: */
! 234:
! 235: struct hook_desc {
! 236: TAILQ_ENTRY(hook_desc) hd_list;
! 237: void (*hd_fn)(void *);
! 238: void *hd_arg;
! 239: };
! 240: TAILQ_HEAD(hook_desc_head, hook_desc);
! 241:
! 242: extern struct hook_desc_head shutdownhook_list, startuphook_list,
! 243: mountroothook_list;
! 244:
! 245: void *hook_establish(struct hook_desc_head *, int, void (*)(void *), void *);
! 246: void hook_disestablish(struct hook_desc_head *, void *);
! 247: void dohooks(struct hook_desc_head *, int);
! 248:
! 249: #define HOOK_REMOVE 0x01
! 250: #define HOOK_FREE 0x02
! 251:
! 252: #define startuphook_establish(fn, arg) \
! 253: hook_establish(&startuphook_list, 1, (fn), (arg))
! 254: #define startuphook_disestablish(vhook) \
! 255: hook_disestablish(&startuphook_list, (vhook))
! 256: #define dostartuphooks() dohooks(&startuphook_list, HOOK_REMOVE|HOOK_FREE)
! 257:
! 258: #define shutdownhook_establish(fn, arg) \
! 259: hook_establish(&shutdownhook_list, 0, (fn), (arg))
! 260: #define shutdownhook_disestablish(vhook) \
! 261: hook_disestablish(&shutdownhook_list, (vhook))
! 262: #define doshutdownhooks() dohooks(&shutdownhook_list, HOOK_REMOVE)
! 263:
! 264: #define mountroothook_establish(fn, arg) \
! 265: hook_establish(&mountroothook_list, 0, (fn), (arg))
! 266: #define mountroothook_disestablish(vhook) \
! 267: hook_disestablish(&mountroothook_list, (vhook))
! 268: #define domountroothooks() dohooks(&mountroothook_list, HOOK_REMOVE|HOOK_FREE)
! 269:
! 270: /*
! 271: * Power management hooks.
! 272: */
! 273: void *powerhook_establish(void (*)(int, void *), void *);
! 274: void powerhook_disestablish(void *);
! 275: void dopowerhooks(int);
! 276: #define PWR_RESUME 0
! 277: #define PWR_SUSPEND 1
! 278: #define PWR_STANDBY 2
! 279:
! 280: struct uio;
! 281: int uiomove(void *, int, struct uio *);
! 282:
! 283: #if defined(_KERNEL)
! 284: int setjmp(label_t *);
! 285: void longjmp(label_t *);
! 286: #endif
! 287:
! 288: void consinit(void);
! 289:
! 290: void cpu_startup(void);
! 291: void cpu_configure(void);
! 292: void diskconf(void);
! 293:
! 294: #ifdef GPROF
! 295: void kmstartup(void);
! 296: #endif
! 297:
! 298: int nfs_mountroot(void);
! 299: int dk_mountroot(void);
! 300: extern int (*mountroot)(void);
! 301:
! 302: #include <lib/libkern/libkern.h>
! 303:
! 304: #if defined(DDB) || defined(KGDB)
! 305: /* debugger entry points */
! 306: void Debugger(void); /* in DDB only */
! 307: int read_symtab_from_file(struct proc *,struct vnode *,const char *);
! 308: #endif
! 309:
! 310: #ifdef BOOT_CONFIG
! 311: void user_config(void);
! 312: #endif
! 313:
! 314: #if defined(MULTIPROCESSOR)
! 315: void _kernel_lock_init(void);
! 316: void _kernel_lock(void);
! 317: void _kernel_unlock(void);
! 318: void _kernel_proc_lock(struct proc *);
! 319: void _kernel_proc_unlock(struct proc *);
! 320:
! 321: #define KERNEL_LOCK_INIT() _kernel_lock_init()
! 322: #define KERNEL_LOCK() _kernel_lock()
! 323: #define KERNEL_UNLOCK() _kernel_unlock()
! 324: #define KERNEL_PROC_LOCK(p) _kernel_proc_lock((p))
! 325: #define KERNEL_PROC_UNLOCK(p) _kernel_proc_unlock((p))
! 326:
! 327: #else /* ! MULTIPROCESSOR */
! 328:
! 329: #define KERNEL_LOCK_INIT() /* nothing */
! 330: #define KERNEL_LOCK() /* nothing */
! 331: #define KERNEL_UNLOCK() /* nothing */
! 332: #define KERNEL_PROC_LOCK(p) /* nothing */
! 333: #define KERNEL_PROC_UNLOCK(p) /* nothing */
! 334:
! 335: #endif /* MULTIPROCESSOR */
! 336:
! 337: #endif /* __SYSTM_H__ */
CVSweb