Annotation of kernel/machdep/i386/pc_support/PCpublic.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
                      7:  * Reserved.  This file contains Original Code and/or Modifications of
                      8:  * Original Code as defined in and that are subject to the Apple Public
                      9:  * Source License Version 1.1 (the "License").  You may not use this file
                     10:  * except in compliance with the License.  Please obtain a copy of the
                     11:  * License at http://www.apple.com/publicsource and read it before using
                     12:  * this file.
                     13:  * 
                     14:  * The Original Code and all software distributed under the License are
                     15:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     16:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     17:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     18:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     19:  * License for the specific language governing rights and limitations
                     20:  * under the License.
                     21:  * 
                     22:  * @APPLE_LICENSE_HEADER_END@
                     23:  */
                     24: 
                     25: /*
                     26:  * Copyright (c) 1993 NeXT Computer, Inc.
                     27:  *
                     28:  * PC support public declarations.
                     29:  *
                     30:  * HISTORY
                     31:  *
                     32:  * 9 Mar 1993 ? at NeXT
                     33:  *     Created.
                     34:  */
                     35:  
                     36: #import <mach/mach_types.h>
                     37: #if    !KERNEL
                     38: #import <mach/vm_param.h>
                     39: #endif
                     40: 
                     41: #import <architecture/i386/sel.h>
                     42: #import <architecture/i386/cpu.h>
                     43: #import <architecture/i386/fpu.h>
                     44: 
                     45: #import <bsd/i386/signal.h>
                     46: 
                     47: /*
                     48:  * PCVERSIONNUMBER is incremented whenever
                     49:  * a change is made that is not backwards
                     50:  * compatible.  This should never be done
                     51:  * after the first release, since it will
                     52:  * break the existing libraries.
                     53:  *
                     54:  * PCRELEASENUMBER is incremented whenever
                     55:  * a change is made that is backwards compatible
                     56:  * but must be distingished from earlier releases.
                     57:  *
                     58:  * NEXTSTEP for Intel Processors Release 3.1 is
                     59:  * defined to be PCVERSIONNUMBER 15, PCRELEASENUMBER 0.
                     60:  */
                     61: 
                     62: #define PCVERSIONNUMBER                15
                     63: #define PCRELEASENUMBER                1
                     64: 
                     65: typedef struct _PCcpuState {
                     66:     unsigned int       eax;
                     67:     unsigned int       ebx;
                     68:     unsigned int       ecx;
                     69:     unsigned int       edx;
                     70:     unsigned int       edi;
                     71:     unsigned int       esi;
                     72:     unsigned int       ebp;
                     73:     unsigned int       esp;
                     74:     sel_t              ss;
                     75:     unsigned short             :16;
                     76:     unsigned int       eflags;
                     77:     unsigned int       eip;
                     78:     sel_t              cs;
                     79:     unsigned short             :16;
                     80:     sel_t              ds;
                     81:     unsigned short             :16;
                     82:     sel_t              es;
                     83:     unsigned short             :16;
                     84:     sel_t              fs;
                     85:     unsigned short             :16;
                     86:     sel_t              gs;
                     87:     unsigned short             :16;
                     88:     cr0_t              cr0;
                     89: } _PCcpuState_t;
                     90: 
                     91: typedef struct fp_state _PCfpuState_t;
                     92: 
                     93: /*
                     94:  * There are a total of PCMAXCONTEXT - 1
                     95:  * contexts, since the initial context is
                     96:  * not really a context.
                     97:  *
                     98:  * Each time a new context is created,
                     99:  * the following fields are copied from
                    100:  * the previous one:
                    101:  *     runOptions
                    102:  *     timeout
                    103:  *     tick
                    104:  */
                    105: 
                    106: #define PCMAXCONTEXT           8
                    107: 
                    108: typedef struct PCcontext {
                    109:     // Saved context of call to PCrun()
                    110:     struct sigcontext  runState;
                    111:     
                    112:     // True when running PC code (not in monitor)
                    113:     boolean_t          running;
                    114: 
                    115:     // Last exception or interrupt info
                    116:     unsigned int       trapNum;
                    117:     unsigned int       errCode;
                    118:     kern_return_t      exceptionResult;
                    119:     unsigned int       callHandler;
                    120: #define PC_HANDLE_NONE 0
                    121: #define PC_HANDLE_FAULT        1
                    122: #define PC_HANDLE_INTN 2
                    123: #define PC_HANDLE_BOP  3
                    124: #define PC_HANDLE_EXIT 4
                    125: 
                    126:     // Monitor callback conditions     
                    127:     unsigned int       runOptions;
                    128: #define PC_RUN_IF_SET          1
                    129: #define PC_RUN_TIMEOUT         2
                    130: #define PC_RUN_TICK            4
                    131:     unsigned int       timeout;
                    132:     unsigned int       tick;
                    133:     
                    134:     // Interrupt flag for instruction emulation
                    135:     boolean_t          IF_flag;
                    136: 
                    137:     // TRUE means all FP instructions should trap 
                    138:     boolean_t          EM_bit;
                    139: 
                    140:     // Extra flag bits for which we must simulate set/clear    
                    141:     unsigned short     X_flags;
                    142:     
                    143:     // Mask of pending callbacks, updated synchronously
                    144:     unsigned int       pendingCallbacks;
                    145: #define PC_CALL_IF_SET PC_RUN_IF_SET
                    146: #define PC_CALL_TIMEOUT        PC_RUN_TIMEOUT
                    147: #define PC_CALL_TICK   PC_RUN_TICK
                    148: #define PC_CALL_WOKEN  8
                    149: 
                    150:     // Mask of timer callbacks to be delivered
                    151:     unsigned int       pendingTimers;
                    152: 
                    153:     // Mask of timers that are scheduled
                    154:     unsigned int       expectedTimers;
                    155: 
                    156:     // Debugging features
                    157:     unsigned int       debugOptions;
                    158: #define PC_DEBUG_PRESERVE_TRACE                1
                    159: } *PCcontext_t;
                    160: 
                    161: typedef unsigned char  PCfaultMask_t[32/BYTE_SIZE];
                    162: typedef unsigned char  PCintNMask_t[256/BYTE_SIZE];
                    163: typedef struct {
                    164:     vm_offset_t                address;
                    165:     vm_size_t          length;
                    166: } PCdescTbl_t;
                    167: 
                    168: /*
                    169:  * Top level structure of the memory
                    170:  * region shared by the kernel and the
                    171:  * library.  The 'versionNumber' field
                    172:  * must come first.
                    173:  */
                    174: 
                    175: typedef struct PCshared {
                    176:     unsigned int       versionNumber;
                    177:     PCfaultMask_t      faultMask;
                    178:     PCintNMask_t       intNMask;
                    179:     void               (*callbackHelper)(void);
                    180:     PCfaultMask_t      machMask;
                    181:     PCdescTbl_t                IDT;
                    182:     PCdescTbl_t                LDT;
                    183:     _PCcpuState_t      cpuState;
                    184:     int                        currentContext;
                    185:     struct PCcontext   contexts[PCMAXCONTEXT];
                    186:     unsigned int       releaseNumber;
                    187:     _PCfpuState_t      fpuState;
                    188:     boolean_t
                    189:                        fpuOwned        :1,
                    190:                        fpuStateValid   :1;
                    191: } *PCshared_t;
                    192: 
                    193: /*
                    194:  * Arguments to mode switch
                    195:  * BOPs (passed on stack).
                    196:  */
                    197: 
                    198: typedef struct {
                    199:     unsigned int       eip;
                    200:     sel_t              cs;
                    201:     unsigned short             :16;
                    202:     unsigned int       eflags;
                    203:     unsigned int       esp;
                    204:     sel_t              ss;
                    205:     unsigned short             :16;
                    206: } PCbopFD_t, PCbopFA_t;
                    207: 
                    208: typedef struct {
                    209:     unsigned short     ip;
                    210:     sel_t              cs;
                    211:     unsigned short     flags;
                    212:     unsigned short     sp;
                    213:     sel_t              ss;
                    214: } PCbopFC_t;

unix.superglobalmegacorp.com

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