Root/
Source at commit 1305 created 12 years 8 months ago. By meklort, Cleanup arch makefiles. Begin merging of BootX source - will need cleaning up | |
---|---|
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 | * sl.h - Headers for configuring the Secondary Loader␊ |
24 | *␊ |
25 | * Copyright (c) 1998-2005 Apple Computer, Inc.␊ |
26 | *␊ |
27 | * DRI: Josh de Cesare␊ |
28 | */␊ |
29 | ␊ |
30 | #ifndef _BOOTX_SL_H_␊ |
31 | #define _BOOTX_SL_H_␊ |
32 | ␊ |
33 | // i.e. should we put up our failure screen; else back to OF␊ |
34 | #define kFailToBoot (1)␊ |
35 | ␊ |
36 | /*␊ |
37 | ␊ |
38 | Memory Map: assumed 96 MB (temporarily bumping to 112 MB for 4359362)␊ |
39 | ␊ |
40 | Physical Address␊ |
41 | ␊ |
42 | Open Firmware Version 3x, 4x, ...␊ |
43 | 00000000 - 00003FFF : Exception Vectors␊ |
44 | 00004000 - 057FFFFF : Free Memory␊ |
45 | // 05800000 - 05FFFFFF : OF Image (top 8 MB reserved) [96 MB map]␊ |
46 | 06800000 - 06FFFFFF : OF Image (top 8 MB reserved) [112 MB map]␊ |
47 | ␊ |
48 | ␊ |
49 | Logical Address␊ |
50 | ␊ |
51 | // 96 MB map (currently unused - 4363357 tracks re-adoption)␊ |
52 | 00000000 - 00003FFF : Exception Vectors␊ |
53 | 00004000 - 03FFFFFF : Kernel Image, Boot Struct and Drivers (~64 MB)␊ |
54 | 04000000 - 04FFFFFF : File Load Area (16 MB) ␉[80 MB]␊ |
55 | 05000000 - 053FFFFF : FS Cache (4 MB) ␉[84 MB]␊ |
56 | 05400000 - 055FFFFF : Malloc Zone (2 MB)␉[86 MB]␊ |
57 | 05600000 - 057FFFFF : BootX Image (2 MB)␉[88 MB]␊ |
58 | 05800000 - 05FFFFFF : Unused/OF (8 MB)␉[96 MB]␊ |
59 | ␊ |
60 | // 112 MB map (per 4359362)␊ |
61 | 00000000 - 00003FFF : Exception Vectors␊ |
62 | 00004000 - 03FFFFFF : Kernel Image, Boot Struct and Drivers (~64 MB)␊ |
63 | 04000000 - 05FFFFFF : File Load Area (32 MB) ␉[96 MB]␊ |
64 | 06000000 - 063FFFFF : FS Cache (4 MB) ␉[100 MB]␊ |
65 | 06400000 - 065FFFFF : Malloc Zone (2 MB)␉[102 MB]␊ |
66 | 06600000 - 067FFFFF : BootX Image (2 MB)␉[104 MB]␊ |
67 | 06800000 - 06FFFFFF : Unused/OF (8 MB)␉[112 MB]␊ |
68 | */␊ |
69 | ␊ |
70 | #define kVectorAddr (0x00000000)␊ |
71 | #define kVectorSize (0x00004000)␊ |
72 | ␊ |
73 | // OF 3.x␊ |
74 | #define kImageAddr (0x00004000)␊ |
75 | #define kImageSize (0x03FFC000)␊ |
76 | ␊ |
77 | // OF 1.x 2.x␊ |
78 | #define kImageAddr0 (0x00004000)␊ |
79 | #define kImageSize0 (0x002FC000)␊ |
80 | #define kImageAddr1 (0x00300000)␊ |
81 | #define kImageSize1 (0x00200000)␊ |
82 | #define kImageAddr1Phys (0x05800000)␊ |
83 | #define kImageAddr2 (0x00500000)␊ |
84 | #define kImageSize2 (0x03B00000)␊ |
85 | ␊ |
86 | #define kLoadAddr (0x04000000)␊ |
87 | #define kLoadSize (0x02000000)␉// 32 MB @ 64␊ |
88 | #define kMaxMKextSize (0x01000000)␉// only allow 16 MB of drivers␊ |
89 | ␊ |
90 | #define kFSCacheAddr (0x06000000)␊ |
91 | #define kFSCacheSize (0x00400000)␉// 4 MB @ 96␊ |
92 | ␊ |
93 | #define kMallocAddr (0x06400000)␊ |
94 | #define kMallocSize (0x00200000)␉// 2 MB @ 100␊ |
95 | ␊ |
96 | #define kMallocAddr_H (0x06400000)␉// ditto for hibernate␊ |
97 | #define kMallocSize_H (0x00200000)␊ |
98 | #define kImageAddr_H (0x07000000)␉// fallback for hiberate image buffer␊ |
99 | ␊ |
100 | // Default Output Level␊ |
101 | #define kOutputLevelOff (0)␊ |
102 | #define kOutputLevelFull (16)␊ |
103 | ␊ |
104 | // OF versions␊ |
105 | #define kOFVersion1x (0x01000000)␊ |
106 | #define kOFVersion2x (0x02000000)␊ |
107 | #define kOFVersion3x (0x03000000)␊ |
108 | #define kOFVersion4x (0x04000000)␊ |
109 | ␊ |
110 | // Device Types␊ |
111 | enum {␊ |
112 | kUnknownDeviceType = 0,␊ |
113 | kNetworkDeviceType,␊ |
114 | kBlockDeviceType␊ |
115 | };␊ |
116 | ␊ |
117 | // File Permissions and Types␊ |
118 | enum {␊ |
119 | kPermOtherExecute = 1 << 0,␊ |
120 | kPermOtherWrite = 1 << 1,␊ |
121 | kPermOtherRead = 1 << 2,␊ |
122 | kPermGroupExecute = 1 << 3,␊ |
123 | kPermGroupWrite = 1 << 4,␊ |
124 | kPermGroupRead = 1 << 5,␊ |
125 | kPermOwnerExecute = 1 << 6,␊ |
126 | kPermOwnerWrite = 1 << 7,␊ |
127 | kPermOwnerRead = 1 << 8,␊ |
128 | kPermMask = 0x1FF,␊ |
129 | kOwnerNotRoot = 1 << 9,␊ |
130 | kFileTypeUnknown = 0x0 << 16,␊ |
131 | kFileTypeFlat = 0x1 << 16,␊ |
132 | kFileTypeDirectory = 0x2 << 16,␊ |
133 | kFileTypeLink = 0x3 << 16,␊ |
134 | kFileTypeMask = 0x3 << 16␊ |
135 | };␊ |
136 | ␊ |
137 | // Key Numbers␊ |
138 | #define kCommandKey (0x200)␊ |
139 | #define kOptKey (0x201)␊ |
140 | #define kShiftKey (0x202)␊ |
141 | #define kControlKey (0x203)␊ |
142 | #define kDeleteKey (0x204)␊ |
143 | ␊ |
144 | // Mac OS X Booter Signature 'MOSX'␊ |
145 | #define kMacOSXSignature (0x4D4F5358)␊ |
146 | ␊ |
147 | // Boot Modes␊ |
148 | enum {␊ |
149 | kBootModeNormal = 0,␊ |
150 | kBootModeSafe,␊ |
151 | kBootModeSecure␊ |
152 | };␊ |
153 | ␊ |
154 | #include <sys/types.h>␊ |
155 | #include <stdint.h>␊ |
156 | #include <stdio.h>␊ |
157 | ␊ |
158 | #include <ci.h>␊ |
159 | #include <sl_words.h>␊ |
160 | #include <libclite.h>␊ |
161 | #include <fs.h>␊ |
162 | #include <boot_args.h>␊ |
163 | ␊ |
164 | // types for plist.c␊ |
165 | typedef enum {␊ |
166 | kTagTypeNone = 0,␊ |
167 | kTagTypeDict,␊ |
168 | kTagTypeKey,␊ |
169 | kTagTypeString,␊ |
170 | kTagTypeInteger,␊ |
171 | kTagTypeData,␊ |
172 | kTagTypeDate,␊ |
173 | kTagTypeFalse,␊ |
174 | kTagTypeTrue,␊ |
175 | kTagTypeArray␊ |
176 | } TagType;␊ |
177 | ␊ |
178 | struct Tag {␊ |
179 | TagType type;␊ |
180 | char *string;␊ |
181 | struct Tag *tag;␊ |
182 | struct Tag *tagNext;␊ |
183 | };␊ |
184 | typedef struct Tag Tag, *TagPtr;␊ |
185 | ␊ |
186 | // Externs for main.c␊ |
187 | extern char *gVectorSaveAddr;␊ |
188 | extern long gKernelEntryPoint;␊ |
189 | extern long gDeviceTreeAddr;␊ |
190 | extern long gDeviceTreeSize;␊ |
191 | extern long gBootArgsAddr;␊ |
192 | extern long gBootArgsSize;␊ |
193 | extern long gSymbolTableAddr;␊ |
194 | extern long gSymbolTableSize;␊ |
195 | ␊ |
196 | extern long gBootMode;␊ |
197 | extern long gBootDeviceType;␊ |
198 | extern long gBootFileType;␊ |
199 | extern char gHaveKernelCache;␊ |
200 | extern char gBootDevice[256];␊ |
201 | extern char gBootFile[256];␊ |
202 | extern TagPtr gBootDict;␊ |
203 | ␊ |
204 | extern char gTempStr[4096];␊ |
205 | ␊ |
206 | extern long *gDeviceTreeMMTmp;␊ |
207 | ␊ |
208 | extern long gOFVersion;␊ |
209 | ␊ |
210 | extern char *gKeyMap;␊ |
211 | ␊ |
212 | extern long gRootAddrCells;␊ |
213 | extern long gRootSizeCells;␊ |
214 | ␊ |
215 | extern CICell gChosenPH;␊ |
216 | extern CICell gOptionsPH;␊ |
217 | extern CICell gScreenPH;␊ |
218 | extern CICell gMemoryMapPH;␊ |
219 | extern CICell gStdOutPH;␊ |
220 | ␊ |
221 | extern CICell gMMUIH;␊ |
222 | extern CICell gMemoryIH;␊ |
223 | extern CICell gStdOutIH;␊ |
224 | extern CICell gKeyboardIH;␊ |
225 | ␊ |
226 | // useful to activate debug logs near when a problem happens␊ |
227 | //extern int gDebugCount;␊ |
228 | ␊ |
229 | extern long ThinFatBinary(void **binary, unsigned long *length);␊ |
230 | extern long GetDeviceType(char *devSpec);␊ |
231 | extern long ConvertFileSpec(char *fileSpec, char *devSpec, char **filePath);␊ |
232 | extern long MatchThis(CICell phandle, char *string);␊ |
233 | extern void *AllocateBootXMemory(long size);␊ |
234 | extern long AllocateKernelMemory(long size);␊ |
235 | extern long AllocateMemoryRange(char *rangeName, long start, long length);␊ |
236 | extern unsigned long Adler32(unsigned char *buffer, long length);␊ |
237 | ␊ |
238 | // Externs for macho.c␊ |
239 | extern long ThinFatBinaryMachO(void **binary, unsigned long *length);␊ |
240 | extern long DecodeMachO(void *binary);␊ |
241 | ␊ |
242 | // Externs for elf.c␊ |
243 | extern long ThinFatBinaryElf(void **binary, unsigned long *length);␊ |
244 | extern long DecodeElf(void *binary);␊ |
245 | ␊ |
246 | // Externs for device_tree.c␊ |
247 | extern long FlattenDeviceTree(void);␊ |
248 | extern CICell SearchForNode(CICell ph, long top, char *prop, char *value);␊ |
249 | extern CICell SearchForNodeMatching(CICell ph, long top, char *value);␊ |
250 | ␊ |
251 | // Externs for display.c␊ |
252 | extern long InitDisplays(int fill);␊ |
253 | extern long DrawSplashScreen(long stage);␊ |
254 | extern long DrawFailedBootPicture(void);␊ |
255 | extern void GetMainScreenPH(Boot_Video_Ptr video, int setProperties);␊ |
256 | void SplashPreview(void *src, u_int8_t * saveunder, u_int32_t savelen);␊ |
257 | void SplashProgress(u_int8_t * saveunder, int32_t firstBlob, int32_t select);␊ |
258 | ␊ |
259 | // Externs for bmdecompress.c␊ |
260 | extern int DecompressData(void *srcbase, void *dstbase,␊ |
261 | ␉␉ int dw, int dh, int bytesPerPixel, int rowbytes);␊ |
262 | ␊ |
263 | // Externs for drivers.c␊ |
264 | extern long LoadDrivers(char *dirPath);␊ |
265 | ␊ |
266 | // Externs for config.c␊ |
267 | extern long InitConfig(void);␊ |
268 | extern long ParseConfigFile(char *addr);␊ |
269 | ␊ |
270 | // Externs for lzss.c␊ |
271 | extern int decompress_lzss(u_int8_t *dst, u_int8_t *src, u_int32_t srclen);␊ |
272 | ␊ |
273 | ␊ |
274 | // Externs for plist.c␊ |
275 | extern TagPtr GetProperty(TagPtr dict, char *key);␊ |
276 | extern long ParseXML(char *buffer, TagPtr *dict);␊ |
277 | extern void FreeTag(TagPtr tag);␊ |
278 | #if PLIST_DEBUG␊ |
279 | extern void DumpTag(TagPtr tag, long depth);␊ |
280 | #endif␊ |
281 | ␊ |
282 | ␊ |
283 | // Externs/types for raid.c␊ |
284 | typedef struct RAIDMember *RAIDDevicePtr;␊ |
285 | ␊ |
286 | extern int isRAIDPath(char *devSpec);␊ |
287 | extern int isRAIDDevice(void *ih);␊ |
288 | extern long LookForRAID(TagPtr bootDict);␊ |
289 | extern RAIDDevicePtr RAIDOpen(char *devSpec);␊ |
290 | extern void RAIDClose(RAIDDevicePtr raid);␊ |
291 | extern long RAIDRead(RAIDDevicePtr raid, long a, long n, long long offset);␊ |
292 | extern long RAIDSeek(RAIDDevicePtr raid, long long position);␊ |
293 | ␊ |
294 | ␊ |
295 | #endif /* ! _BOOTX_SL_H_ */␊ |
296 |