[BOOT] Create input parameters structures.
This commit is contained in:
@@ -17,6 +17,27 @@ Abstract:
|
||||
#define _BOOTMGR_H
|
||||
|
||||
#include <nt.h>
|
||||
#include "efi.h"
|
||||
|
||||
//
|
||||
// Set machine type.
|
||||
//
|
||||
#if defined(__x86_64__)
|
||||
#define BOOT_MACHINE_TYPE IMAGE_FILE_MACHINE_AMD64
|
||||
#elif defined(__i386__)
|
||||
#define BOOT_MACHINE_TYPE IMAGE_FILE_MACHINE_I386
|
||||
#endif
|
||||
|
||||
//
|
||||
// No address translation.
|
||||
//
|
||||
#define BOOT_TRANSLATION_TYPE 0
|
||||
|
||||
//
|
||||
// Use EFI page size.
|
||||
//
|
||||
#define PAGE_SIZE EFI_PAGE_SIZE
|
||||
#define PAGE_SHIFT EFI_PAGE_SHIFT
|
||||
|
||||
#define BOOT_INPUT_PARAMETERS_SIGNATURE 0x50504120544f4f42 /* "BOOT APP" */
|
||||
#define BOOT_INPUT_PARAMETERS_VERSION 2
|
||||
@@ -24,8 +45,82 @@ Abstract:
|
||||
typedef struct {
|
||||
ULONGLONG Signature;
|
||||
ULONG Version;
|
||||
ULONG Size;
|
||||
|
||||
//
|
||||
// Machine information.
|
||||
//
|
||||
ULONG MachineType;
|
||||
ULONG TranslationType;
|
||||
|
||||
//
|
||||
// Image information.
|
||||
//
|
||||
PVOID ImageBase;
|
||||
ULONG ImageSize;
|
||||
|
||||
//
|
||||
// Offsets to ancillary structures.
|
||||
//
|
||||
ULONG MemoryInfoOffset;
|
||||
ULONG ApplicationEntryOffset;
|
||||
ULONG BootDeviceOffset;
|
||||
ULONG FirmwareDataOffset;
|
||||
ULONG ReturnDataOffset;
|
||||
|
||||
ULONG PlatformDataOffset;
|
||||
} BOOT_INPUT_PARAMETERS, *PBOOT_INPUT_PARAMETERS;
|
||||
|
||||
#define BOOT_APPLICATION_ENTRY_SIGNATURE 0x544e4550415442
|
||||
|
||||
typedef struct {
|
||||
ULONGLONG Signature;
|
||||
} BOOT_APPLICATION_ENTRY, *PBOOT_APPLICATION_ENTRY;
|
||||
|
||||
#define BOOT_MEMORY_INFO_VERSION 1
|
||||
|
||||
typedef struct {
|
||||
ULONG Version;
|
||||
ULONG MdlOffset;
|
||||
ULONG DescriptorCount;
|
||||
ULONG DescriptorSize;
|
||||
ULONG BasePageOffset;
|
||||
} BOOT_MEMORY_INFO, *PBOOT_MEMORY_INFO;
|
||||
|
||||
#define MEMORY_FLAG_CACHE_WB 0x08
|
||||
#define MEMORY_TYPE_BOOT_APPLICATION 0xd0000002
|
||||
|
||||
typedef struct {
|
||||
LIST_ENTRY ListEntry;
|
||||
|
||||
ULONGLONG BasePage;
|
||||
ULONG Pages;
|
||||
|
||||
ULONG Flags;
|
||||
ULONG Type;
|
||||
} BOOT_MEMORY_DESCRIPTOR, *PBOOT_MEMORY_DESCRIPTOR;
|
||||
|
||||
#define BOOT_FIRMWARE_DATA_VERSION 2
|
||||
|
||||
typedef struct {
|
||||
ULONG Version;
|
||||
ULONG Reserved;
|
||||
EFI_HANDLE ImageHandle;
|
||||
EFI_SYSTEM_TABLE *SystemTable;
|
||||
} BOOT_FIRMWARE_DATA, *PBOOT_FIRMWARE_DATA;
|
||||
|
||||
#define BOOT_RETURN_DATA_VERSION 1
|
||||
|
||||
typedef struct {
|
||||
ULONG Version;
|
||||
NTSTATUS Status;
|
||||
ULONG Flags;
|
||||
} BOOT_RETURN_DATA, *PBOOT_RETURN_DATA;
|
||||
|
||||
typedef struct {
|
||||
ULONG Size;
|
||||
} BOOT_DEVICE, *PBOOT_DEVICE;
|
||||
|
||||
NTSTATUS
|
||||
BmMain (
|
||||
IN PBOOT_INPUT_PARAMETERS InputParameters
|
||||
|
@@ -107,6 +107,22 @@ typedef struct {
|
||||
#define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42
|
||||
#define EFI_BOOT_SERVICES_REVISION EFI_SPECIFICATION_VERSION
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_ALLOCATE_PAGES) (
|
||||
IN EFI_ALLOCATE_TYPE Type,
|
||||
IN EFI_MEMORY_TYPE MemoryType,
|
||||
IN UINTN Pages,
|
||||
IN OUT EFI_PHYSICAL_ADDRESS *Memory
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_FREE_PAGES) (
|
||||
IN EFI_PHYSICAL_ADDRESS Memory,
|
||||
IN UINTN Pages
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_HANDLE_PROTOCOL) (
|
||||
@@ -121,8 +137,8 @@ typedef struct _EFI_BOOT_SERVICES {
|
||||
EFI_HANDLE RaiseTPL;
|
||||
EFI_HANDLE RestoreTPL;
|
||||
|
||||
EFI_HANDLE AllocatePages;
|
||||
EFI_HANDLE FreePages;
|
||||
EFI_ALLOCATE_PAGES AllocatePages;
|
||||
EFI_FREE_PAGES FreePages;
|
||||
EFI_HANDLE GetMemoryMap;
|
||||
EFI_HANDLE AllocatePool;
|
||||
EFI_HANDLE FreePool;
|
||||
|
@@ -146,4 +146,35 @@ typedef union ULARGE_INTEGER {
|
||||
#define FIELD_OFFSET(type, field) ((ULONG)__builtin_offsetof(type, field))
|
||||
#endif
|
||||
|
||||
//
|
||||
// Alignment helpers.
|
||||
//
|
||||
#define ALIGN_DOWN(x, a) ((x) & ~((a) - 1))
|
||||
#define ALIGN_UP(x, a) ALIGN_DOWN((x) + (a) - 1, a)
|
||||
|
||||
//
|
||||
// Doubly-linked list entry.
|
||||
//
|
||||
typedef struct _LIST_ENTRY {
|
||||
struct _LIST_ENTRY *ForwardLink;
|
||||
struct _LIST_ENTRY *BackLink;
|
||||
} LIST_ENTRY, *PLIST_ENTRY;
|
||||
|
||||
//
|
||||
// Runtime library definitions.
|
||||
//
|
||||
|
||||
PVOID
|
||||
RtlCopyMemory (
|
||||
PVOID Destination,
|
||||
CONST PVOID Source,
|
||||
ULONG Length
|
||||
);
|
||||
|
||||
PVOID
|
||||
RtlZeroMemory (
|
||||
PVOID Destination,
|
||||
ULONG Length
|
||||
);
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user