Annotation of XNU/osfmk/i386/seg.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 2000 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: /*
                     23:  * @OSF_COPYRIGHT@
                     24:  */
                     25: /* 
                     26:  * Mach Operating System
                     27:  * Copyright (c) 1991,1990 Carnegie Mellon University
                     28:  * All Rights Reserved.
                     29:  * 
                     30:  * Permission to use, copy, modify and distribute this software and its
                     31:  * documentation is hereby granted, provided that both the copyright
                     32:  * notice and this permission notice appear in all copies of the
                     33:  * software, derivative works or modified versions, and any portions
                     34:  * thereof, and that both notices appear in supporting documentation.
                     35:  * 
                     36:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
                     37:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
                     38:  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
                     39:  * 
                     40:  * Carnegie Mellon requests users of this software to return to
                     41:  * 
                     42:  *  Software Distribution Coordinator  or  [email protected]
                     43:  *  School of Computer Science
                     44:  *  Carnegie Mellon University
                     45:  *  Pittsburgh PA 15213-3890
                     46:  * 
                     47:  * any improvements or extensions that they make and grant Carnegie Mellon
                     48:  * the rights to redistribute these changes.
                     49:  */
                     50: /*
                     51:  */
                     52: 
                     53: #ifndef        _I386_SEG_H_
                     54: #define        _I386_SEG_H_
                     55: #include <mach_kdb.h>
                     56: 
                     57: /*
                     58:  * i386 segmentation.
                     59:  */
                     60: 
                     61: #ifndef        __ASSEMBLER__
                     62: /*
                     63:  * Real segment descriptor.
                     64:  */
                     65: struct real_descriptor {
                     66:        unsigned int    limit_low:16,   /* limit 0..15 */
                     67:                        base_low:16,    /* base  0..15 */
                     68:                        base_med:8,     /* base  16..23 */
                     69:                        access:8,       /* access byte */
                     70:                        limit_high:4,   /* limit 16..19 */
                     71:                        granularity:4,  /* granularity */
                     72:                        base_high:8;    /* base 24..31 */
                     73: };
                     74: 
                     75: struct real_gate {
                     76:        unsigned int    offset_low:16,  /* offset 0..15 */
                     77:                        selector:16,
                     78:                        word_count:8,
                     79:                        access:8,
                     80:                        offset_high:16; /* offset 16..31 */
                     81: };
                     82: 
                     83: /*
                     84:  * We build descriptors and gates in a 'fake' format to let the
                     85:  * fields be contiguous.  We shuffle them into the real format
                     86:  * at runtime.
                     87:  */
                     88: struct fake_descriptor {
                     89:        unsigned int    offset:32;              /* offset */
                     90:        unsigned int    lim_or_seg:20;          /* limit */
                     91:                                                /* or segment, for gate */
                     92:        unsigned int    size_or_wdct:4;         /* size/granularity */
                     93:                                                /* word count, for gate */
                     94:        unsigned int    access:8;               /* access */
                     95: };
                     96: #endif /*__ASSEMBLER__*/
                     97: 
                     98: #define        SZ_32           0x4                     /* 32-bit segment */
                     99: #define        SZ_G            0x8                     /* 4K limit field */
                    100: 
                    101: #define        ACC_A           0x01                    /* accessed */
                    102: #define        ACC_TYPE        0x1e                    /* type field: */
                    103: 
                    104: #define        ACC_TYPE_SYSTEM 0x00                    /* system descriptors: */
                    105: 
                    106: #define        ACC_LDT         0x02                        /* LDT */
                    107: #define        ACC_CALL_GATE_16 0x04                       /* 16-bit call gate */
                    108: #define        ACC_TASK_GATE   0x05                        /* task gate */
                    109: #define        ACC_TSS         0x09                        /* task segment */
                    110: #define        ACC_CALL_GATE   0x0c                        /* call gate */
                    111: #define        ACC_INTR_GATE   0x0e                        /* interrupt gate */
                    112: #define        ACC_TRAP_GATE   0x0f                        /* trap gate */
                    113: 
                    114: #define        ACC_TSS_BUSY    0x02                        /* task busy */
                    115: 
                    116: #define        ACC_TYPE_USER   0x10                    /* user descriptors */
                    117: 
                    118: #define        ACC_DATA        0x10                        /* data */
                    119: #define        ACC_DATA_W      0x12                        /* data, writable */
                    120: #define        ACC_DATA_E      0x14                        /* data, expand-down */
                    121: #define        ACC_DATA_EW     0x16                        /* data, expand-down,
                    122:                                                             writable */
                    123: #define        ACC_CODE        0x18                        /* code */
                    124: #define        ACC_CODE_R      0x1a                        /* code, readable */
                    125: #define        ACC_CODE_C      0x1c                        /* code, conforming */
                    126: #define        ACC_CODE_CR     0x1e                        /* code, conforming,
                    127:                                                       readable */
                    128: #define        ACC_PL          0x60                    /* access rights: */
                    129: #define        ACC_PL_K        0x00                    /* kernel access only */
                    130: #define        ACC_PL_U        0x60                    /* user access */
                    131: #define        ACC_P           0x80                    /* segment present */
                    132: 
                    133: /*
                    134:  * Components of a selector
                    135:  */
                    136: #define        SEL_LDTS        0x04                    /* local selector */
                    137: #define        SEL_PL          0x03                    /* privilege level: */
                    138: #define        SEL_PL_K        0x00                        /* kernel selector */
                    139: #define        SEL_PL_U        0x03                        /* user selector */
                    140: 
                    141: /*
                    142:  * Convert selector to descriptor table index.
                    143:  */
                    144: #define        sel_idx(sel)    ((sel)>>3)
                    145: 
                    146: /*
                    147:  * User descriptors for MACH - 32-bit flat address space
                    148:  */
                    149: #define        USER_SCALL      0x07            /* system call gate */
                    150: #define        USER_RPC        0x0f            /* mach rpc call gate */
                    151: #define        USER_CS         0x17            /* user code segment */
                    152: #define        USER_DS         0x1f            /* user data segment */
                    153: 
                    154: #define        LDTSZ           4
                    155: 
                    156: /*
                    157:  * Kernel descriptors for MACH - 32-bit flat address space.
                    158:  */
                    159: #define        KERNEL_CS       0x08            /* kernel code */
                    160: #define        KERNEL_DS       0x10            /* kernel data */
                    161: #define        KERNEL_LDT      0x18            /* master LDT */
                    162: #define        KERNEL_TSS      0x20            /* master TSS (uniprocessor) */
                    163: #ifdef MACH_BSD
                    164: #define        BSD_SCALL_SEL   0x28            /* BSD System calls */
                    165: #define        MK25_SCALL_SEL  0x30            /* MK25 System Calls */
                    166: #define        MACHDEP_SCALL_SEL 0x38          /* Machdep SYstem calls */
                    167: #else
                    168: #define        USER_LDT        0x28            /* place for per-thread LDT */
                    169: #define        USER_TSS        0x30            /* place for per-thread TSS
                    170:                                           that holds IO bitmap */
                    171: #define        FPE_CS          0x38            /* floating-point emulator code */
                    172: #endif
                    173: #define        USER_FPREGS     0x40            /* user-mode access to saved
                    174:                                           floating-point registers */
                    175: #define        CPU_DATA        0x48            /* per-cpu data */
                    176: 
                    177: #ifdef MACH_BSD
                    178: #define        USER_LDT        0x58
                    179: #define        USER_TSS        0x60
                    180: #define        FPE_CS          0x68
                    181: #endif
                    182: 
                    183: #if    MACH_KDB
                    184: #define        DEBUG_TSS       0x50            /* debug TSS (uniprocessor) */
                    185: 
                    186: #ifdef MACH_BSD
                    187: #define        GDTSZ           14
                    188: #else
                    189: #define        GDTSZ           11
                    190: #endif
                    191: #else
                    192: 
                    193: #ifdef MACH_BSD
                    194: #define        GDTSZ           13
                    195: #else
                    196: #define        GDTSZ           10
                    197: #endif
                    198: #endif
                    199: 
                    200: /*
                    201:  * Interrupt table is always 256 entries long.
                    202:  */
                    203: #define        IDTSZ           256
                    204: 
                    205: #endif /* _I386_SEG_H_ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.