|
|
1.1 ! root 1: #ifndef __KERNEL_DDI_BASE_H__ ! 2: #define __KERNEL_DDI_BASE_H__ ! 3: ! 4: /* ! 5: * This internal header file defines structures and an access procedure for ! 6: * DDI/DKI process-level data that will not be needed outside the process ! 7: * context. This information corresponds to "U area" data in traditional ! 8: * Unix implementations. Although it may in fact be implemented that way, ! 9: * using an accessor macro guarantees source-level compatibility with systems ! 10: * that do not or can not implement a traditional U area. ! 11: */ ! 12: ! 13: /* ! 14: *-IMPORTS: ! 15: * <common/ccompat.h> ! 16: * __EXTERN_C_BEGIN__ ! 17: * __EXTERN_C_END__ ! 18: * __PROTO () ! 19: * <common/_cred.h> ! 20: * cred_t ! 21: * <sys/uio.h> ! 22: * uio_t ! 23: * iovec_t ! 24: */ ! 25: ! 26: #include <common/ccompat.h> ! 27: #include <common/_cred.h> ! 28: #include <sys/uio.h> ! 29: ! 30: #if __COHERENT__ ! 31: ! 32: /* ! 33: *-IMPORTS: ! 34: * <sys/io.h> ! 35: * IO ! 36: * <sys/uproc.h> ! 37: * UPROC ! 38: * u.u_uid ! 39: * u.u_gid ! 40: */ ! 41: ! 42: #include <sys/io.h> ! 43: ! 44: #define __KERNEL__ 2 ! 45: #include <sys/uproc.h> ! 46: #undef __KERNEL__ ! 47: ! 48: extern UPROC u; ! 49: ! 50: #define U_AREA() (& u) ! 51: ! 52: #elif defined (__MSDOS__) ! 53: ! 54: #include <kernel/dosproc.h> ! 55: ! 56: #endif ! 57: ! 58: ! 59: /* ! 60: * DDI/DKI per-process data needed only at base level. ! 61: * ! 62: * Note that it might seem like a reasonable idea to record the list of sleep ! 63: * locks held by a process for debugging. However, this is not possible, since ! 64: * the DDI/DKI specification defines SLEEP_TRYLOCK () and SLEEP_UNLOCK () as ! 65: * being available at interrupt level, ie. not requiring user context, making ! 66: * this idea impossible (it is not clear whether a process can in fact try to ! 67: * recursively lock a sleep lock if it has arranged for some interrupt-level ! 68: * activity to unlock it, but it seems reasonable). ! 69: */ ! 70: ! 71: struct ddi_base_data { ! 72: char _non_empty; /* make structure non-empty */ ! 73: }; ! 74: ! 75: typedef struct ddi_base_data dbdata_t; ! 76: ! 77: ! 78: __EXTERN_C_BEGIN__ ! 79: ! 80: dbdata_t * ddi_base_data __PROTO ((void)); ! 81: void DESTROY_UIO __PROTO ((uio_t * _uiop, IO * _iop)); ! 82: cred_t * MAKE_CRED __PROTO ((cred_t * _cred)); ! 83: uio_t * MAKE_UIO __PROTO ((uio_t * _uiop, iovec_t * _iovp, ! 84: int _mode, IO * _iop)); ! 85: ! 86: __EXTERN_C_END__ ! 87: ! 88: ! 89: #define ddi_base_data() ((dbdata_t *) U_AREA ()->u_nigel) ! 90: ! 91: ! 92: #endif /* ! defined (__KERNEL_DDI_BASE_H__) */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.