#ifndef _PEXPERT_I386_BOOT_H
#define _PEXPERT_I386_BOOT_H
#define NDRIVERS 500
enum {
kBootDriverTypeInvalid = 0,
kBootDriverTypeKEXT = 1,
kBootDriverTypeMKEXT = 2
};
typedef struct {
unsigned long address; unsigned long size; unsigned long type; } driver_config_t;
typedef struct {
unsigned short major_vers; unsigned short minor_vers;
unsigned long cs32_base;
unsigned long cs16_base;
unsigned long ds_base;
unsigned long cs_length;
unsigned long ds_length;
unsigned long entry_offset;
union {
struct {
unsigned long mode_16 :1;
unsigned long mode_32 :1;
unsigned long idle_slows_cpu :1;
unsigned long reserved :29;
} f;
unsigned long data;
} flags;
unsigned long connected;
} APM_config_t;
typedef struct _PCI_bus_info_t {
union {
struct {
unsigned char configMethod1 :1;
unsigned char configMethod2 :1;
unsigned char :2;
unsigned char specialCycle1 :1;
unsigned char specialCycle2 :1;
} s;
unsigned char d;
} u_bus;
unsigned char maxBusNum;
unsigned char majorVersion;
unsigned char minorVersion;
unsigned char BIOSPresent;
} PCI_bus_info_t;
struct boot_video {
unsigned long v_baseAddr; unsigned long v_display; unsigned long v_rowBytes; unsigned long v_width; unsigned long v_height; unsigned long v_depth; };
typedef struct boot_video boot_video;
#define GRAPHICS_MODE 1
#define TEXT_MODE 0
enum {
kMemoryRangeUsable = 1, kMemoryRangeReserved = 2, kMemoryRangeACPI = 3, kMemoryRangeNVS = 4,
};
typedef struct MemoryRange {
unsigned long long base; unsigned long long length; unsigned long type; unsigned long reserved;
} MemoryRange;
#define kMemoryMapCountMax 40
struct boot_drive_info {
struct drive_params {
unsigned short buf_size;
unsigned short info_flags;
unsigned long phys_cyls;
unsigned long phys_heads;
unsigned long phys_spt;
unsigned long long phys_sectors;
unsigned short phys_nbps;
unsigned short dpte_offset;
unsigned short dpte_segment;
unsigned short key;
unsigned char path_len;
unsigned char reserved1;
unsigned short reserved2;
unsigned char bus_type[4];
unsigned char interface_type[8];
unsigned char interface_path[8];
unsigned char dev_path[8];
unsigned char reserved3;
unsigned char checksum;
} params __attribute__((packed));
struct drive_dpte {
unsigned short io_port_base;
unsigned short control_port_base;
unsigned char head_flags;
unsigned char vendor_info;
unsigned char irq : 4;
unsigned char irq_unused : 4;
unsigned char block_count;
unsigned char dma_channel : 4;
unsigned char dma_type : 4;
unsigned char pio_type : 4;
unsigned char pio_unused : 4;
unsigned short option_flags;
unsigned short reserved;
unsigned char revision;
unsigned char checksum;
} dpte __attribute__((packed));
} __attribute__((packed));
typedef struct boot_drive_info boot_drive_info_t;
#define MAX_BIOS_DEVICES 8
#define OLD_BOOT_STRING_LEN 160
#define BOOT_STRING_LEN 1024
#define CONFIG_SIZE (12 * 4096)
typedef struct {
short version;
char bootString[OLD_BOOT_STRING_LEN]; int magicCookie; int numIDEs; int rootdev; int convmem; int extmem; char bootFile[128]; int firstAddr0; int diskInfo[4]; int graphicsMode; int kernDev; int numBootDrivers; char * configEnd; int kaddr; int ksize; driver_config_t driverConfig[NDRIVERS];
char _reserved[2052];
boot_video video;
PCI_bus_info_t pciInfo;
APM_config_t apmConfig;
char config[CONFIG_SIZE];
} KERNBOOTSTRUCT;
#define KERNSTRUCT_ADDR ((KERNBOOTSTRUCT *) 0x11000)
#define KERNBOOTMAGIC 0xa7a7a7a7
#define BOOT_LINE_LENGTH 256
struct Boot_Video {
unsigned long v_baseAddr;
unsigned long v_display;
unsigned long v_rowBytes;
unsigned long v_width;
unsigned long v_height;
unsigned long v_depth;
};
typedef struct Boot_Video Boot_Video;
#define kMaxDRAMBanks 26
struct DRAMBank
{
unsigned long base;
unsigned long size;
};
typedef struct DRAMBank DRAMBank;
#define kBootArgsVersion 1
#define kBootArgsRevision 1
typedef struct boot_args {
unsigned short Revision;
unsigned short Version;
char CommandLine[BOOT_LINE_LENGTH];
DRAMBank PhysicalDRAM[kMaxDRAMBanks];
Boot_Video Video;
unsigned long machineType;
void *deviceTreeP;
unsigned long deviceTreeLength;
unsigned long topOfKernelData;
} boot_args;
extern boot_args passed_args;
#define KERNEL_BOOT_MAGIC 0xa5b6d7e8
typedef struct KernelBootArgs {
unsigned int magicCookie; unsigned short version;
unsigned short revision;
unsigned int size; int numDrives; int rootdev; int convmem; int extmem; unsigned int firstAddr0; int graphicsMode; int kernDev; int numBootDrivers; char * configEnd; unsigned int kaddr; unsigned int ksize; char bootFile[128]; char bootString[BOOT_STRING_LEN]; driver_config_t driverConfig[NDRIVERS];
unsigned long memoryMapCount;
MemoryRange memoryMap[kMemoryMapCountMax];
boot_drive_info_t driveInfo[MAX_BIOS_DEVICES];
boot_video video;
PCI_bus_info_t pciInfo;
APM_config_t apmConfig;
char config[CONFIG_SIZE];
} KernelBootArgs_t;
#endif