CloverBootloader/OsxAptioFixDrv/BootArgs.h
2019-09-03 12:58:42 +03:00

163 lines
4.9 KiB
C

/**
Methods for finding, checking and fixing boot args
by dmazar (defs from Clover)
**/
/*
* Video information..
*/
struct Boot_Video {
UINT32 v_baseAddr; /* Base address of video memory */
UINT32 v_display; /* Display Code (if Applicable */
UINT32 v_rowBytes; /* Number of bytes per pixel row */
UINT32 v_width; /* Width */
UINT32 v_height; /* Height */
UINT32 v_depth; /* Pixel Depth */
};
typedef struct Boot_Video Boot_Video;
/* Values for v_display */
#define GRAPHICS_MODE 1
#define FB_TEXT_MODE 2
/* Boot argument structure - passed into Mach kernel at boot time.
* "Revision" can be incremented for compatible changes
*/
#define kBootArgsRevision 0
#define kBootArgsVersion 2
/* Snapshot constants of previous revisions that are supported */
#define kBootArgsVersion1 1
#define kBootArgsRevision1_4 4
#define kBootArgsRevision1_5 5
#define kBootArgsRevision1_6 6
#define kBootArgsVersion2 2
#define kBootArgsRevision2_0 0
#define kBootArgsEfiMode32 32
#define kBootArgsEfiMode64 64
/* Bitfields for boot_args->flags */
#define kBootArgsFlagRebootOnPanic (1 << 0)
#define kBootArgsFlagHiDPI (1 << 1)
#define BOOT_LINE_LENGTH 1024
/* version 1 before Lion */
typedef struct {
UINT16 Revision; /* Revision of boot_args structure */
UINT16 Version; /* Version of boot_args structure */
CHAR8 CommandLine[BOOT_LINE_LENGTH]; /* Passed in command line */
UINT32 MemoryMap; /* Physical address of memory map */
UINT32 MemoryMapSize;
UINT32 MemoryMapDescriptorSize;
UINT32 MemoryMapDescriptorVersion;
Boot_Video Video; /* Video Information */
UINT32 deviceTreeP; /* Physical address of flattened device tree */
UINT32 deviceTreeLength; /* Length of flattened tree */
UINT32 kaddr; /* Physical address of beginning of kernel text */
UINT32 ksize; /* Size of combined kernel text+data+efi */
UINT32 efiRuntimeServicesPageStart; /* physical address of defragmented runtime pages */
UINT32 efiRuntimeServicesPageCount;
UINT32 efiSystemTable; /* physical address of system table in runtime area */
UINT8 efiMode; /* 32 = 32-bit, 64 = 64-bit */
UINT8 __reserved1[3];
UINT32 __reserved2[1];
UINT32 performanceDataStart; /* physical address of log */
UINT32 performanceDataSize;
UINT64 efiRuntimeServicesVirtualPageStart; /* virtual address of defragmented runtime pages */
UINT32 __reserved3[2];
} BootArgs1;
/* version2 as used in Lion */
typedef struct {
UINT16 Revision; /* Revision of boot_args structure */
UINT16 Version; /* Version of boot_args structure */
UINT8 efiMode; /* 32 = 32-bit, 64 = 64-bit */
UINT8 debugMode; /* Bit field with behavior changes */
UINT16 flags;
CHAR8 CommandLine[BOOT_LINE_LENGTH]; /* Passed in command line */
UINT32 MemoryMap; /* Physical address of memory map */
UINT32 MemoryMapSize;
UINT32 MemoryMapDescriptorSize;
UINT32 MemoryMapDescriptorVersion;
Boot_Video Video; /* Video Information */
UINT32 deviceTreeP; /* Physical address of flattened device tree */
UINT32 deviceTreeLength; /* Length of flattened tree */
UINT32 kaddr; /* Physical address of beginning of kernel text */
UINT32 ksize; /* Size of combined kernel text+data+efi */
UINT32 efiRuntimeServicesPageStart; /* physical address of defragmented runtime pages */
UINT32 efiRuntimeServicesPageCount;
UINT64 efiRuntimeServicesVirtualPageStart; /* virtual address of defragmented runtime pages */
UINT32 efiSystemTable; /* physical address of system table in runtime area */
UINT32 kslide;
UINT32 performanceDataStart; /* physical address of log */
UINT32 performanceDataSize;
UINT32 keyStoreDataStart; /* physical address of key store data */
UINT32 keyStoreDataSize;
UINT64 bootMemStart; /* physical address of interpreter boot memory */
UINT64 bootMemSize;
UINT64 PhysicalMemorySize;
UINT64 FSBFrequency;
UINT64 pciConfigSpaceBaseAddress;
UINT32 pciConfigSpaceStartBusNumber;
UINT32 pciConfigSpaceEndBusNumber;
UINT32 __reserved4[730];
} BootArgs2;
/** Our internal structure to hold boot args params to make the code independent of the boot args version. */
typedef struct _BootArgs {
UINT32 *MemoryMap; /* We will change this value so we need pointer to original field. */
UINT32 *MemoryMapSize;
UINT32 *MemoryMapDescriptorSize;
UINT32 *MemoryMapDescriptorVersion;
UINT32 *deviceTreeP;
UINT32 *deviceTreeLength;
UINT32 *kaddr;
UINT32 *ksize;
UINT32 *efiRuntimeServicesPageStart;
UINT32 *efiRuntimeServicesPageCount;
UINT64 *efiRuntimeServicesVirtualPageStart;
UINT32 *efiSystemTable;
} BootArgs;
VOID EFIAPI BootArgsPrint(VOID *bootArgs);
BootArgs* EFIAPI GetBootArgs(VOID *bootArgs);
VOID EFIAPI BootArgsFix(BootArgs *BA, EFI_PHYSICAL_ADDRESS gRellocBase);
VOID* EFIAPI BootArgsFind(IN EFI_PHYSICAL_ADDRESS Start);