]> git.saurik.com Git - apple/bootx.git/blobdiff - bootx.tproj/include.subproj/sl.h
BootX-75.tar.gz
[apple/bootx.git] / bootx.tproj / include.subproj / sl.h
index 2a89cf1e09e5d54b4181d34ff10b65eda9fa8484..9c6f9711799cb383cd1668e303d5140c6c912ead 100644 (file)
@@ -22,7 +22,7 @@
 /*
  *  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)
@@ -68,22 +72,30 @@ just before the kernel is loaded.
 
 // 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)
@@ -93,6 +105,7 @@ just before the kernel is loaded.
 #define kOFVersion1x    (0x01000000)
 #define kOFVersion2x    (0x02000000)
 #define kOFVersion3x    (0x03000000)
+#define kOFVersion4x    (0x04000000)
 
 // Device Types
 enum {
@@ -126,6 +139,7 @@ enum {
 #define kOptKey     (0x201)
 #define kShiftKey   (0x202)
 #define kControlKey (0x203)
+#define kDeleteKey  (0x204)
 
 // Mac OS X Booter Signature 'MOSX'
 #define kMacOSXSignature (0x4D4F5358)
@@ -139,6 +153,7 @@ enum {
 
 #include <sys/stat.h>
 #include <sys/types.h>
+#include <stdint.h>
 
 #include <ci.h>
 #include <sl_words.h>
@@ -146,6 +161,28 @@ enum {
 #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;
@@ -159,9 +196,10 @@ extern long gSymbolTableSize;
 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];
 
@@ -171,6 +209,9 @@ extern long gOFVersion;
 
 extern char *gKeyMap;
 
+extern long gRootAddrCells;
+extern long gRootSizeCells;
+
 extern CICell gChosenPH;
 extern CICell gOptionsPH;
 extern CICell gScreenPH;
@@ -182,19 +223,25 @@ extern CICell gMemoryIH;
 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);
@@ -202,10 +249,16 @@ extern CICell SearchForNode(CICell ph, long top, char *prop, char *value);
 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);
@@ -214,4 +267,31 @@ 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_ */