2 * COPYRIGHT: See COPYING.ARM in the top level directory
3 * PROJECT: ReactOS UEFI Boot Library
4 * FILE: boot/environ/include/bl.h
5 * PURPOSE: Main Boot Library Header
6 * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
12 /* INCLUDES ******************************************************************/
24 #include <DevicePath.h>
25 #include <LoadedImage.h>
27 /* DEFINES *******************************************************************/
29 #define BL_APPLICATION_FLAG_CONVERTED_FROM_EFI 0x01
31 #define BOOT_APPLICATION_SIGNATURE_1 'TOOB'
32 #define BOOT_APPLICATION_SIGNATURE_2 ' PPA'
34 #define BOOT_MEMORY_TRANSLATION_TYPE_PHYSICAL 0
35 #define BOOT_MEMORY_TRANSLATION_TYPE_VIRTUAL 1
37 #define BOOT_APPLICATION_VERSION 2
38 #define BL_MEMORY_DATA_VERSION 1
39 #define BL_RETURN_ARGUMENTS_VERSION 1
40 #define BL_FIRMWARE_DESCRIPTOR_VERSION 2
42 #define BL_APPLICATION_ENTRY_FLAG_NO_GUID 0x01
44 /* ENUMERATIONS **************************************************************/
49 typedef enum _BL_DEVICE_TYPE
60 typedef enum _BL_LOCAL_DEVICE_TYPE
65 } BL_LOCAL_DEVICE_TYPE
;
70 typedef enum _BL_PARTITION_TYPE
80 typedef enum _BL_PATH_TYPE
88 typedef enum _BL_MEMORY_CLASS
98 typedef enum _BL_MEMORY_TYPE
103 BlLoaderMemory
= 0xD0000002,
104 BlLoaderPageDirectory
= 0xD0000006,
105 BlLoaderReferencePage
= 0xD0000007,
106 BlLoaderRamDisk
= 0xD0000008,
107 BlLoaderData
= 0xD000000A,
108 BlLoaderSelfMap
= 0xD000000F,
111 // Application Memory
113 BlApplicationData
= 0xE0000004,
118 BlConventionalMemory
= 0xF0000001,
119 BlUnusableMemory
= 0xF0000002,
120 BlReservedMemory
= 0xF0000003,
121 BlEfiBootMemory
= 0xF0000004,
122 BlEfiRuntimeMemory
= 0xF0000006,
123 BlAcpiReclaimMemory
= 0xF0000008,
124 BlAcpiNvsMemory
= 0xF0000009,
125 BlDeviceIoMemory
= 0xF000000A,
126 BlDevicePortMemory
= 0xF000000B,
127 BlPalMemory
= 0xF000000C,
130 /* DATA STRUCTURES ***********************************************************/
132 typedef struct _BL_LIBRARY_PARAMETERS
135 ULONG TranslationType
;
136 ULONG MinimumAllocationCount
;
137 ULONG MinimumHeapSize
;
138 ULONG HeapAllocationAttributes
;
139 PWCHAR ApplicationBaseDirectory
;
140 ULONG DescriptorCount
;
141 } BL_LIBRARY_PARAMETERS
, *PBL_LIBRARY_PARAMETERS
;
143 /* This should eventually go into a more public header */
144 typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK
146 /* This header tells the library what image we're dealing with */
151 ULONG MemoryTranslationType
;
153 /* Where is the image located */
157 /* Offset to BL_MEMORY_DATA */
158 ULONG MemoryDataOffset
;
160 /* Offset to BL_APPLICATION_ENTRY */
161 ULONG AppEntryOffset
;
163 /* Offset to BL_DEVICE_DESCRPIPTOR */
164 ULONG BootDeviceOffset
;
166 /* Offset to BL_FIRMWARE_PARAMETERS */
167 ULONG FirmwareParametersOffset
;
169 /* Offset to BL_RETURN_ARGUMENTS */
170 ULONG ReturnArgumentsOffset
;
171 } BOOT_APPLICATION_PARAMETER_BLOCK
, *PBOOT_APPLICATION_PARAMETER_BLOCK
;
173 typedef struct _BL_MEMORY_DATA
177 ULONG DescriptorCount
;
178 ULONG DescriptorSize
;
180 } BL_MEMORY_DATA
, *PBL_MEMORY_DATA
;
182 typedef struct _BL_FIRMWARE_DESCRIPTOR
186 EFI_HANDLE ImageHandle
;
187 EFI_SYSTEM_TABLE
*SystemTable
;
188 } BL_FIRMWARE_DESCRIPTOR
, *PBL_FIRMWARE_DESCRIPTOR
;
190 typedef struct _BL_RETURN_ARGUMENTS
193 ULONG ReturnArgumentData
[6];
194 } BL_RETURN_ARGUMENTS
, *PBL_RETURN_ARGUMENTS
;
196 typedef struct _BL_MEMORY_DESCRIPTOR
198 LIST_ENTRY ListEntry
;
204 ULONGLONG VirtualPage
;
208 ULONGLONG BaseAddress
;
209 ULONGLONG VirtualAddress
;
215 } BL_MEMORY_DESCRIPTOR
, *PBL_MEMORY_DESCRIPTOR
;
217 typedef struct _BL_BCD_OPTION
223 ULONG NextEntryOffset
;
225 } BL_BCD_OPTION
, *PBL_BCD_OPTION
;
227 typedef struct _BL_APPLICATION_ENTRY
233 BL_BCD_OPTION BcdData
;
234 } BL_APPLICATION_ENTRY
, *PBL_APPLICATION_ENTRY
;
236 typedef struct _BL_HARDDISK_DEVICE
243 ULONG PartitionSignature
;
248 GUID PartitionSignature
;
256 } BL_HARDDISK_DEVICE
;
258 typedef struct _BL_LOCAL_DEVICE
268 BL_HARDDISK_DEVICE HardDisk
;
272 PHYSICAL_ADDRESS ImageBase
;
273 LARGE_INTEGER ImageSize
;
279 typedef struct _BL_DEVICE_DESCRIPTOR
283 DEVICE_TYPE DeviceType
;
287 BL_LOCAL_DEVICE Local
;
298 ULONG PartitionNumber
;
306 BL_LOCAL_DEVICE Disk
;
309 } BL_DEVICE_DESCRIPTOR
, *PBL_DEVICE_DESCRIPTOR
;
311 typedef struct _BL_FILE_PATH_DESCRIPTOR
316 UCHAR Path
[ANYSIZE_ARRAY
];
317 } BL_FILE_PATH_DESCRIPTOR
, *PBL_FILE_PATH_DESCRIPTOR
;
319 typedef struct _BL_WINDOWS_LOAD_OPTIONS
325 WCHAR LoadOptions
[ANYSIZE_ARRAY
];
326 } BL_WINDOWS_LOAD_OPTIONS
, *PBL_WINDOWS_LOAD_OPTIONS
;
328 /* INITIALIZATION ROUTINES ***************************************************/
332 _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters
,
333 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
336 /* UTILITY ROUTINES **********************************************************/
343 /* BCD ROUTINES **************************************************************/
346 BlGetBootOptionSize (
347 _In_ PBL_BCD_OPTION BcdOption