]>
git.saurik.com Git - apple/bootx.git/blob - bootx.tproj/include.subproj/sl.h
2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
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.
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
20 * @APPLE_LICENSE_HEADER_END@
23 * sl.h - Headers for configuring the Secondary Loader
25 * Copyright (c) 1998-2005 Apple Computer, Inc.
33 // i.e. should we put up our failure screen; else back to OF
34 #define kFailToBoot (1)
38 Memory Map: assumed 96 MB (temporarily bumping to 112 MB for 4359362)
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]
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]
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]
70 #define kVectorAddr (0x00000000)
71 #define kVectorSize (0x00004000)
74 #define kImageAddr (0x00004000)
75 #define kImageSize (0x03FFC000)
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)
86 #define kLoadAddr (0x04000000)
87 #define kLoadSize (0x02000000) // 32 MB @ 64
88 #define kMaxMKextSize (0x01000000) // only allow 16 MB of drivers
90 #define kFSCacheAddr (0x06000000)
91 #define kFSCacheSize (0x00400000) // 4 MB @ 96
93 #define kMallocAddr (0x06400000)
94 #define kMallocSize (0x00200000) // 2 MB @ 100
96 #define kMallocAddr_H (0x06400000) // ditto for hibernate
97 #define kMallocSize_H (0x00200000)
98 #define kImageAddr_H (0x07000000) // fallback for hiberate image buffer
100 // Default Output Level
101 #define kOutputLevelOff (0)
102 #define kOutputLevelFull (16)
105 #define kOFVersion1x (0x01000000)
106 #define kOFVersion2x (0x02000000)
107 #define kOFVersion3x (0x03000000)
108 #define kOFVersion4x (0x04000000)
112 kUnknownDeviceType
= 0,
117 // File Permissions and Types
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,
129 kOwnerNotRoot
= 1 << 9,
130 kFileTypeUnknown
= 0x0 << 16,
131 kFileTypeFlat
= 0x1 << 16,
132 kFileTypeDirectory
= 0x2 << 16,
133 kFileTypeLink
= 0x3 << 16,
134 kFileTypeMask
= 0x3 << 16
138 #define kCommandKey (0x200)
139 #define kOptKey (0x201)
140 #define kShiftKey (0x202)
141 #define kControlKey (0x203)
142 #define kDeleteKey (0x204)
144 // Mac OS X Booter Signature 'MOSX'
145 #define kMacOSXSignature (0x4D4F5358)
154 #include <sys/stat.h>
155 #include <sys/types.h>
159 #include <sl_words.h>
160 #include <libclite.h>
162 #include <boot_args.h>
184 typedef struct Tag Tag
, *TagPtr
;
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
;
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
;
204 extern char gTempStr
[4096];
206 extern long *gDeviceTreeMMTmp
;
208 extern long gOFVersion
;
210 extern char *gKeyMap
;
212 extern long gRootAddrCells
;
213 extern long gRootSizeCells
;
215 extern CICell gChosenPH
;
216 extern CICell gOptionsPH
;
217 extern CICell gScreenPH
;
218 extern CICell gMemoryMapPH
;
219 extern CICell gStdOutPH
;
221 extern CICell gMMUIH
;
222 extern CICell gMemoryIH
;
223 extern CICell gStdOutIH
;
224 extern CICell gKeyboardIH
;
226 // useful to activate debug logs near when a problem happens
227 //extern int gDebugCount;
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
);
238 // Externs for macho.c
239 extern long ThinFatBinaryMachO(void **binary
, unsigned long *length
);
240 extern long DecodeMachO(void *binary
);
243 extern long ThinFatBinaryElf(void **binary
, unsigned long *length
);
244 extern long DecodeElf(void *binary
);
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
);
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
);
259 // Externs for bmdecompress.c
260 extern int DecompressData(void *srcbase
, void *dstbase
,
261 int dw
, int dh
, int bytesPerPixel
, int rowbytes
);
263 // Externs for drivers.c
264 extern long LoadDrivers(char *dirPath
);
266 // Externs for config.c
267 extern long InitConfig(void);
268 extern long ParseConfigFile(char *addr
);
270 // Externs for lzss.c
271 extern int decompress_lzss(u_int8_t
*dst
, u_int8_t
*src
, u_int32_t srclen
);
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
);
279 extern void DumpTag(TagPtr tag
, long depth
);
283 // Externs/types for raid.c
284 typedef struct RAIDMember
*RAIDDevicePtr
;
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
);
295 #endif /* ! _BOOTX_SL_H_ */