/*
* sl.h - Headers for configuring the Secondary Loader
*
- * Copyright (c) 1998-2002 Apple Computer, Inc.
+ * Copyright (c) 1998-2005 Apple Computer, Inc.
*
* DRI: Josh de Cesare
*/
#ifndef _BOOTX_SL_H_
#define _BOOTX_SL_H_
+// i.e. should we put up our failure screen; else back to OF
#define kFailToBoot (1)
/*
-Memory Map... Assumes 32 MB
+Memory Map: assumed 96 MB (temporarily bumping to 112 MB for 4359362)
Physical Address
-Open Firmware Version 1x, 2x 3x
-00000000 - 00003FFF : Exception Vectors
-00004000 - 002FFFFF : Free Memory
-00300000 - 004FFFFF : OF Image / Free Memory
-00500000 - 01DFFFFF : Free Memory
-01E00000 - 01FFFFFF : Free Memory / OF Image
+Open Firmware Version 3x, 4x, ...
+00000000 - 00003FFF : Exception Vectors
+00004000 - 057FFFFF : Free Memory
+// 05800000 - 05FFFFFF : OF Image (top 8 MB reserved) [96 MB map]
+06800000 - 06FFFFFF : OF Image (top 8 MB reserved) [112 MB map]
Logical Address
+// 96 MB map (currently unused - 4363357 tracks re-adoption)
00000000 - 00003FFF : Exception Vectors
-00004000 - 013FFFFF : Kernel Image, Boot Struct and Drivers
-01400000 - 01BFFFFF : File Load Area
-01C00000 - 01CFFFFF : Secondary Loader Image
-01D00000 - 01DFFFFF : Malloc Area
-01E00000 - 01FFFFFF : Unused
-
-To provide a consistant Logical Memory Usage between OF 1,2 and OF 3
-the Logical Addresses 0x00300000 - 0x004FFFFF will be mapped to
-Physical Address 0x01E00000 - 0x01FFFFFF and will be copied back
-just before the kernel is loaded.
-
-
+00004000 - 03FFFFFF : Kernel Image, Boot Struct and Drivers (~64 MB)
+04000000 - 04FFFFFF : File Load Area (16 MB) [80 MB]
+05000000 - 053FFFFF : FS Cache (4 MB) [84 MB]
+05400000 - 055FFFFF : Malloc Zone (2 MB) [86 MB]
+05600000 - 057FFFFF : BootX Image (2 MB) [88 MB]
+05800000 - 05FFFFFF : Unused/OF (8 MB) [96 MB]
+
+// 112 MB map (per 4359362)
+00000000 - 00003FFF : Exception Vectors
+00004000 - 03FFFFFF : Kernel Image, Boot Struct and Drivers (~64 MB)
+04000000 - 05FFFFFF : File Load Area (32 MB) [96 MB]
+06000000 - 063FFFFF : FS Cache (4 MB) [100 MB]
+06400000 - 065FFFFF : Malloc Zone (2 MB) [102 MB]
+06600000 - 067FFFFF : BootX Image (2 MB) [104 MB]
+06800000 - 06FFFFFF : Unused/OF (8 MB) [112 MB]
*/
#define kVectorAddr (0x00000000)
// OF 3.x
#define kImageAddr (0x00004000)
-#define kImageSize (0x013FC000)
+#define kImageSize (0x03FFC000)
// OF 1.x 2.x
#define kImageAddr0 (0x00004000)
#define kImageSize0 (0x002FC000)
#define kImageAddr1 (0x00300000)
#define kImageSize1 (0x00200000)
-#define kImageAddr1Phys (0x01E00000)
+#define kImageAddr1Phys (0x05800000)
#define kImageAddr2 (0x00500000)
-#define kImageSize2 (0x00F00000)
+#define kImageSize2 (0x03B00000)
+
+#define kLoadAddr (0x04000000)
+#define kLoadSize (0x02000000) // 32 MB @ 64
+#define kMaxMKextSize (0x01000000) // only allow 16 MB of drivers
-#define kLoadAddr (0x01400000)
-#define kLoadSize (0x00800000)
+#define kFSCacheAddr (0x06000000)
+#define kFSCacheSize (0x00400000) // 4 MB @ 96
-#define kMallocAddr (0x01D00000)
-#define kMallocSize (0x00100000)
+#define kMallocAddr (0x06400000)
+#define kMallocSize (0x00200000) // 2 MB @ 100
+
+#define kMallocAddr_H (0x06400000) // ditto for hibernate
+#define kMallocSize_H (0x00200000)
+#define kImageAddr_H (0x07000000) // fallback for hiberate image buffer
// Default Output Level
#define kOutputLevelOff (0)
#define kOFVersion1x (0x01000000)
#define kOFVersion2x (0x02000000)
#define kOFVersion3x (0x03000000)
+#define kOFVersion4x (0x04000000)
// Device Types
enum {
#define kOptKey (0x201)
#define kShiftKey (0x202)
#define kControlKey (0x203)
+#define kDeleteKey (0x204)
// Mac OS X Booter Signature 'MOSX'
#define kMacOSXSignature (0x4D4F5358)
#include <sys/stat.h>
#include <sys/types.h>
+#include <stdint.h>
#include <ci.h>
#include <sl_words.h>
#include <fs.h>
#include <boot_args.h>
+// types for plist.c
+typedef enum {
+ kTagTypeNone = 0,
+ kTagTypeDict,
+ kTagTypeKey,
+ kTagTypeString,
+ kTagTypeInteger,
+ kTagTypeData,
+ kTagTypeDate,
+ kTagTypeFalse,
+ kTagTypeTrue,
+ kTagTypeArray
+} TagType;
+
+struct Tag {
+ TagType type;
+ char *string;
+ struct Tag *tag;
+ struct Tag *tagNext;
+};
+typedef struct Tag Tag, *TagPtr;
+
// Externs for main.c
extern char *gVectorSaveAddr;
extern long gKernelEntryPoint;
extern long gBootMode;
extern long gBootDeviceType;
extern long gBootFileType;
+extern char gHaveKernelCache;
extern char gBootDevice[256];
extern char gBootFile[256];
-extern char gRootDir[256];
+extern TagPtr gBootDict;
extern char gTempStr[4096];
extern char *gKeyMap;
+extern long gRootAddrCells;
+extern long gRootSizeCells;
+
extern CICell gChosenPH;
extern CICell gOptionsPH;
extern CICell gScreenPH;
extern CICell gStdOutIH;
extern CICell gKeyboardIH;
+// useful to activate debug logs near when a problem happens
+//extern int gDebugCount;
+
+extern long ThinFatBinary(void **binary, unsigned long *length);
extern long GetDeviceType(char *devSpec);
extern long ConvertFileSpec(char *fileSpec, char *devSpec, char **filePath);
extern long MatchThis(CICell phandle, char *string);
extern void *AllocateBootXMemory(long size);
extern long AllocateKernelMemory(long size);
extern long AllocateMemoryRange(char *rangeName, long start, long length);
-extern unsigned long Alder32(unsigned char *buffer, long length);
+extern unsigned long Adler32(unsigned char *buffer, long length);
// Externs for macho.c
-extern long DecodeMachO(void);
+extern long ThinFatBinaryMachO(void **binary, unsigned long *length);
+extern long DecodeMachO(void *binary);
// Externs for elf.c
-extern long DecodeElf(void);
+extern long ThinFatBinaryElf(void **binary, unsigned long *length);
+extern long DecodeElf(void *binary);
// Externs for device_tree.c
extern long FlattenDeviceTree(void);
extern CICell SearchForNodeMatching(CICell ph, long top, char *value);
// Externs for display.c
-extern long InitDisplays(void);
+extern long InitDisplays(int fill);
extern long DrawSplashScreen(long stage);
extern long DrawFailedBootPicture(void);
-extern void GetMainScreenPH(Boot_Video_Ptr video);
+extern void GetMainScreenPH(Boot_Video_Ptr video, int setProperties);
+void SplashPreview(void *src, u_int8_t * saveunder, u_int32_t savelen);
+void SplashProgress(u_int8_t * saveunder, int32_t firstBlob, int32_t select);
+
+// Externs for bmdecompress.c
+extern int DecompressData(void *srcbase, void *dstbase,
+ int dw, int dh, int bytesPerPixel, int rowbytes);
// Externs for drivers.c
extern long LoadDrivers(char *dirPath);
extern long InitConfig(void);
extern long ParseConfigFile(char *addr);
+// Externs for lzss.c
+extern int decompress_lzss(u_int8_t *dst, u_int8_t *src, u_int32_t srclen);
+
+
+// Externs for plist.c
+#define PLIST_DEBUG 0 // whether report parsing errors, etc
+
+extern TagPtr GetProperty(TagPtr dict, char *key);
+extern long ParseXML(char *buffer, TagPtr *dict);
+extern void FreeTag(TagPtr tag);
+#if PLIST_DEBUG
+extern void DumpTag(TagPtr tag, long depth);
+#endif
+
+
+// Externs/types for raid.c
+typedef struct RAIDMember *RAIDDevicePtr;
+
+extern int isRAIDPath(char *devSpec);
+extern int isRAIDDevice(void *ih);
+extern long LookForRAID(TagPtr bootDict);
+extern RAIDDevicePtr RAIDOpen(char *devSpec);
+extern void RAIDClose(RAIDDevicePtr raid);
+extern long RAIDRead(RAIDDevicePtr raid, long a, long n, long long offset);
+extern long RAIDSeek(RAIDDevicePtr raid, long long position);
+
+
#endif /* ! _BOOTX_SL_H_ */