Chameleon

Chameleon Svn Source Tree

Root/branches/xZenu/src/arch/ppc/include/sl.h

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
38Memory Map: assumed 96 MB (temporarily bumping to 112 MB for 4359362)
39
40Physical Address
41
42Open Firmware Version 3x, 4x, ...
4300000000 - 00003FFF : Exception Vectors
4400004000 - 057FFFFF : Free Memory
45// 05800000 - 05FFFFFF : OF Image (top 8 MB reserved) [96 MB map]
4606800000 - 06FFFFFF : OF Image (top 8 MB reserved) [112 MB map]
47
48
49Logical Address
50
51// 96 MB map (currently unused - 4363357 tracks re-adoption)
5200000000 - 00003FFF : Exception Vectors
5300004000 - 03FFFFFF : Kernel Image, Boot Struct and Drivers (~64 MB)
5404000000 - 04FFFFFF : File Load Area (16 MB) [80 MB]
5505000000 - 053FFFFF : FS Cache (4 MB) [84 MB]
5605400000 - 055FFFFF : Malloc Zone (2 MB)[86 MB]
5705600000 - 057FFFFF : BootX Image (2 MB)[88 MB]
5805800000 - 05FFFFFF : Unused/OF (8 MB)[96 MB]
59
60// 112 MB map (per 4359362)
6100000000 - 00003FFF : Exception Vectors
6200004000 - 03FFFFFF : Kernel Image, Boot Struct and Drivers (~64 MB)
6304000000 - 05FFFFFF : File Load Area (32 MB) [96 MB]
6406000000 - 063FFFFF : FS Cache (4 MB) [100 MB]
6506400000 - 065FFFFF : Malloc Zone (2 MB)[102 MB]
6606600000 - 067FFFFF : BootX Image (2 MB)[104 MB]
6706800000 - 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
111enum {
112 kUnknownDeviceType = 0,
113 kNetworkDeviceType,
114 kBlockDeviceType
115};
116
117// File Permissions and Types
118enum {
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
148enum {
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
165typedef 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
178struct Tag {
179 TagType type;
180 char *string;
181 struct Tag *tag;
182 struct Tag *tagNext;
183};
184typedef struct Tag Tag, *TagPtr;
185
186// Externs for main.c
187extern char *gVectorSaveAddr;
188extern long gKernelEntryPoint;
189extern long gDeviceTreeAddr;
190extern long gDeviceTreeSize;
191extern long gBootArgsAddr;
192extern long gBootArgsSize;
193extern long gSymbolTableAddr;
194extern long gSymbolTableSize;
195
196extern long gBootMode;
197extern long gBootDeviceType;
198extern long gBootFileType;
199extern char gHaveKernelCache;
200extern char gBootDevice[256];
201extern char gBootFile[256];
202extern TagPtr gBootDict;
203
204extern char gTempStr[4096];
205
206extern long *gDeviceTreeMMTmp;
207
208extern long gOFVersion;
209
210extern char *gKeyMap;
211
212extern long gRootAddrCells;
213extern long gRootSizeCells;
214
215extern CICell gChosenPH;
216extern CICell gOptionsPH;
217extern CICell gScreenPH;
218extern CICell gMemoryMapPH;
219extern CICell gStdOutPH;
220
221extern CICell gMMUIH;
222extern CICell gMemoryIH;
223extern CICell gStdOutIH;
224extern CICell gKeyboardIH;
225
226// useful to activate debug logs near when a problem happens
227//extern int gDebugCount;
228
229extern long ThinFatBinary(void **binary, unsigned long *length);
230extern long GetDeviceType(char *devSpec);
231extern long ConvertFileSpec(char *fileSpec, char *devSpec, char **filePath);
232extern long MatchThis(CICell phandle, char *string);
233extern void *AllocateBootXMemory(long size);
234extern long AllocateKernelMemory(long size);
235extern long AllocateMemoryRange(char *rangeName, long start, long length);
236extern unsigned long Adler32(unsigned char *buffer, long length);
237
238// Externs for macho.c
239extern long ThinFatBinaryMachO(void **binary, unsigned long *length);
240extern long DecodeMachO(void *binary);
241
242// Externs for elf.c
243extern long ThinFatBinaryElf(void **binary, unsigned long *length);
244extern long DecodeElf(void *binary);
245
246// Externs for device_tree.c
247extern long FlattenDeviceTree(void);
248extern CICell SearchForNode(CICell ph, long top, char *prop, char *value);
249extern CICell SearchForNodeMatching(CICell ph, long top, char *value);
250
251// Externs for display.c
252extern long InitDisplays(int fill);
253extern long DrawSplashScreen(long stage);
254extern long DrawFailedBootPicture(void);
255extern void GetMainScreenPH(Boot_Video_Ptr video, int setProperties);
256void SplashPreview(void *src, u_int8_t * saveunder, u_int32_t savelen);
257void SplashProgress(u_int8_t * saveunder, int32_t firstBlob, int32_t select);
258
259// Externs for bmdecompress.c
260extern int DecompressData(void *srcbase, void *dstbase,
261 int dw, int dh, int bytesPerPixel, int rowbytes);
262
263// Externs for drivers.c
264extern long LoadDrivers(char *dirPath);
265
266// Externs for config.c
267extern long InitConfig(void);
268extern long ParseConfigFile(char *addr);
269
270// Externs for lzss.c
271extern int decompress_lzss(u_int8_t *dst, u_int8_t *src, u_int32_t srclen);
272
273
274// Externs for plist.c
275extern TagPtr GetProperty(TagPtr dict, char *key);
276extern long ParseXML(char *buffer, TagPtr *dict);
277extern void FreeTag(TagPtr tag);
278#if PLIST_DEBUG
279extern void DumpTag(TagPtr tag, long depth);
280#endif
281
282
283// Externs/types for raid.c
284typedef struct RAIDMember *RAIDDevicePtr;
285
286extern int isRAIDPath(char *devSpec);
287extern int isRAIDDevice(void *ih);
288extern long LookForRAID(TagPtr bootDict);
289extern RAIDDevicePtr RAIDOpen(char *devSpec);
290extern void RAIDClose(RAIDDevicePtr raid);
291extern long RAIDRead(RAIDDevicePtr raid, long a, long n, long long offset);
292extern long RAIDSeek(RAIDDevicePtr raid, long long position);
293
294
295#endif /* ! _BOOTX_SL_H_ */
296

Archive Download this file

Revision: 1305