|
|
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: File: PseudoKernelPriv.h
27:
28: Contains: Interfaces for the TruBlue environment's PseudoKernel
29:
30: Version: Rhapsody
31:
32: Copyright: ) 1996-1997 by Apple Computer, Inc., all rights reserved.
33:
34: File Ownership:
35:
36: DRI: Bob Abeles
37:
38: Other Contact: Jeff Robbin
39:
40: Technology: TruBlue& Virtual Machine
41:
42: Writers:
43:
44: (JM3) Jim Murphy
45: (BEA) Bob Abeles
46:
47: Change History (most recent first):
48:
49: */
50:
51:
52: typedef unsigned char UInt8;
53: typedef unsigned short UInt16;
54: typedef unsigned long UInt32;
55:
56:
57: /* Support firmware CallPseudoKernel architectural extension */
58:
59: struct CallPseudoKernelDescriptor {
60: UInt32 pc;
61: UInt32 gpr0;
62: UInt32 intControlAddr;
63: UInt32 newState;
64: UInt32 intStateMask;
65: UInt32 intCR2Mask;
66: UInt32 intCR2Shift;
67: UInt32 sysContextState;
68: };
69: typedef struct CallPseudoKernelDescriptor CallPseudoKernelDescriptor;
70: typedef CallPseudoKernelDescriptor * CallPseudoKernelDescriptorPtr;
71: typedef CallPseudoKernelDescriptor CPKD_t;
72:
73:
74:
75: /* Support firmware ExitPseudoKernel architectural extension */
76:
77: struct ExitPseudoKernelDescriptor {
78: UInt32 pc;
79: UInt32 sp;
80: UInt32 gpr0;
81: UInt32 gpr3;
82: UInt32 cr;
83: UInt32 intControlAddr;
84: UInt32 newState;
85: UInt32 intStateMask;
86: UInt32 intCR2Mask;
87: UInt32 intCR2Shift;
88: UInt32 sysContextState;
89: UInt32 intPendingMask;
90: UInt32 intPendingPC;
91: UInt32 msrUpdate;
92: };
93: typedef struct ExitPseudoKernelDescriptor ExitPseudoKernelDescriptor;
94: typedef ExitPseudoKernelDescriptor * ExitPseudoKernelDescriptorPtr;
95: typedef ExitPseudoKernelDescriptor EPKD_t;
96:
97:
98: //
99: // EmulatorDescriptor
100: //
101: // Emulator image descriptor record appended to the 68K emulator
102: // image by the BootPowerPC project.
103: //
104: struct EmulatorDescriptor {
105: UInt8 regMap[16]; // table mapping 68K D0..D7, A0..A7 register to PowerPC registers
106: UInt32 bootstrapVersionOffset; // offset within emulator data page of the bootstrap version string
107: UInt32 ecbOffset; // offset within emulator data page of the ECB
108: UInt32 intModeLevelOffset; // offset within emulator data page of the interrupt mode level
109: UInt32 entryAddress; // offset within text of the emulator's main entry point
110: UInt32 kcallTrapTableOffset; // offset within text of the nanokernel(!) call trap table
111: UInt32 postIntMask; // post interrupt mask
112: UInt32 clearIntMask; // clear interrupt mask
113: UInt32 testIntMask; // test interrupt mask
114: UInt32 codeSize; // total size of emulator object code (interpretive + DR)
115: UInt32 hashTableSize; // size of DR emulator's hash table
116: UInt32 drCodeStartOffset; // offset within text of the DR emulator's object code
117: UInt32 drInitOffset; // offset within DR emulator of its initialization entry point
118: UInt32 drAllocateCache; // offset within DR emulator of its cache allocation entry point
119: UInt32 dispatchTableOffset; // offset within text of the encoded instruction dispatch table
120: };
121: typedef struct EmulatorDescriptor EmulatorDescriptor;
122: typedef EmulatorDescriptor *EmulatorDescriptorPtr;
123:
124:
125: enum {
126: // The following define the UInt32 gInterruptState
127: kInUninitialized = 0, // State not yet initialized
128: kInPseudoKernel = 1, // Currently executing within pseudo kernel
129: kInSystemContext = 2, // Currently executing within the system (emulator) context
130: kInAlternateContext = 3, // Currently executing within an alternate (native) context
131: kInExceptionHandler = 4, // Currently executing an exception handler
132: kOutsideBlue = 5, // Currently executing outside of the blue box
133:
134: kInterruptStateMask = 0x000F0000, // Mask to extract interrupt state from gInterruptState
135: kInterruptStateShift = 16, // Shift count to align interrupt state
136:
137: kBackupCR2Mask = 0x0000000F, // Mask to extract backup CR2 from gInterruptState
138: kCR2ToBackupShift = 31-11, // Shift count to align CR2 into the backup CR2 of gInterruptState
139: // (and vice versa)
140: kCR2Mask = 0x00F00000 // Mask to extract CR2 from the PPC CR register
141: };
142:
143:
144: enum {
145: kcReturnFromException = 0,
146: kcRunAlternateContext = 1,
147: kcResetSystem = 2,
148: kcVMDispatch = 3,
149: kcPrioritizeInterrupts = 4,
150: kcPowerDispatch = 5,
151: kcRTASDispatch = 6,
152: kcGetAdapterProcPtrsPPC = 12,
153: kcGetAdapterProcPtrs = 13,
154: kcCallAdapterProc = 14,
155: kcSystemCrash = 15
156: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.