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 ******************************************************************/
27 #include <DevicePath.h>
28 #include <LoadedImage.h>
31 EarlyPrint(_In_ PWCHAR Format
, ...);
33 /* DEFINES *******************************************************************/
35 #define BL_APPLICATION_FLAG_CONVERTED_FROM_EFI 0x01
37 #define BL_APP_ENTRY_SIGNATURE "BTAPENT"
39 #define BOOT_APPLICATION_SIGNATURE_1 'TOOB'
40 #define BOOT_APPLICATION_SIGNATURE_2 ' PPA'
42 #define BOOT_MEMORY_TRANSLATION_TYPE_PHYSICAL 0
43 #define BOOT_MEMORY_TRANSLATION_TYPE_VIRTUAL 1
45 #define BOOT_APPLICATION_VERSION 2
46 #define BL_MEMORY_DATA_VERSION 1
47 #define BL_RETURN_ARGUMENTS_VERSION 1
48 #define BL_FIRMWARE_DESCRIPTOR_VERSION 2
50 #define BL_APPLICATION_ENTRY_FLAG_NO_GUID 0x01
52 #define BL_CONTEXT_PAGING_ON 1
53 #define BL_CONTEXT_INTERRUPTS_ON 2
55 #define BL_MM_FLAG_USE_FIRMWARE_FOR_MEMORY_MAP_BUFFERS 0x01
56 #define BL_MM_FLAG_UNKNOWN 0x02
58 #define BL_LIBRARY_FLAG_REINITIALIZE 0x02
59 #define BL_LIBRARY_FLAG_REINITIALIZE_ALL 0x04
60 #define BL_LIBRARY_FLAG_INITIALIZATION_COMPLETED 0x20
62 /* ENUMERATIONS **************************************************************/
64 typedef enum _BL_TRANSLATION_TYPE
70 } BL_TRANSLATION_TYPE
;
72 typedef enum _BL_ARCH_MODE
81 typedef enum _BL_DEVICE_TYPE
92 typedef enum _BL_LOCAL_DEVICE_TYPE
97 } BL_LOCAL_DEVICE_TYPE
;
102 typedef enum _BL_PARTITION_TYPE
112 typedef enum _BL_PATH_TYPE
120 typedef enum _BL_MEMORY_CLASS
130 typedef enum _BL_MEMORY_TYPE
135 BlLoaderMemory
= 0xD0000002,
136 BlLoaderPageDirectory
= 0xD0000006,
137 BlLoaderReferencePage
= 0xD0000007,
138 BlLoaderRamDisk
= 0xD0000008,
139 BlLoaderData
= 0xD000000A,
140 BlLoaderSelfMap
= 0xD000000F,
143 // Application Memory
145 BlApplicationData
= 0xE0000004,
150 BlConventionalMemory
= 0xF0000001,
151 BlUnusableMemory
= 0xF0000002,
152 BlReservedMemory
= 0xF0000003,
153 BlEfiBootMemory
= 0xF0000004,
154 BlEfiRuntimeMemory
= 0xF0000006,
155 BlAcpiReclaimMemory
= 0xF0000008,
156 BlAcpiNvsMemory
= 0xF0000009,
157 BlDeviceIoMemory
= 0xF000000A,
158 BlDevicePortMemory
= 0xF000000B,
159 BlPalMemory
= 0xF000000C,
162 typedef enum _BL_MEMORY_ATTR
164 BlMemoryUncached
= 1,
165 BlMemoryWriteCombined
= 2,
166 BlMemoryWriteThrough
= 4,
167 BlMemoryWriteBack
= 8,
168 BlMemoryUncachedExported
= 0x10,
169 BlMemoryWriteProtected
= 0x100,
170 BlMemoryReadProtected
= 0x200,
171 BlMemoryExecuteProtected
= 0x400,
172 BlMemoryRuntime
= 0x1000000
175 /* DATA STRUCTURES ***********************************************************/
177 typedef struct _BL_LIBRARY_PARAMETERS
180 ULONG TranslationType
;
181 ULONG MinimumAllocationCount
;
182 ULONG MinimumHeapSize
;
183 ULONG HeapAllocationAttributes
;
184 PWCHAR ApplicationBaseDirectory
;
185 ULONG DescriptorCount
;
186 PWCHAR FontBaseDirectory
;
187 } BL_LIBRARY_PARAMETERS
, *PBL_LIBRARY_PARAMETERS
;
189 /* This should eventually go into a more public header */
190 typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK
192 /* This header tells the library what image we're dealing with */
197 ULONG MemoryTranslationType
;
199 /* Where is the image located */
203 /* Offset to BL_MEMORY_DATA */
204 ULONG MemoryDataOffset
;
206 /* Offset to BL_APPLICATION_ENTRY */
207 ULONG AppEntryOffset
;
209 /* Offset to BL_DEVICE_DESCRPIPTOR */
210 ULONG BootDeviceOffset
;
212 /* Offset to BL_FIRMWARE_PARAMETERS */
213 ULONG FirmwareParametersOffset
;
215 /* Offset to BL_RETURN_ARGUMENTS */
216 ULONG ReturnArgumentsOffset
;
217 } BOOT_APPLICATION_PARAMETER_BLOCK
, *PBOOT_APPLICATION_PARAMETER_BLOCK
;
219 typedef struct _BL_MEMORY_DATA
223 ULONG DescriptorCount
;
224 ULONG DescriptorSize
;
226 } BL_MEMORY_DATA
, *PBL_MEMORY_DATA
;
228 typedef struct _BL_FIRMWARE_DESCRIPTOR
232 EFI_HANDLE ImageHandle
;
233 EFI_SYSTEM_TABLE
*SystemTable
;
234 } BL_FIRMWARE_DESCRIPTOR
, *PBL_FIRMWARE_DESCRIPTOR
;
236 typedef struct _BL_RETURN_ARGUMENTS
239 ULONG ReturnArgumentData
[6];
240 } BL_RETURN_ARGUMENTS
, *PBL_RETURN_ARGUMENTS
;
242 typedef struct _BL_MEMORY_DESCRIPTOR
244 LIST_ENTRY ListEntry
;
250 ULONGLONG VirtualPage
;
254 ULONGLONG BaseAddress
;
255 ULONGLONG VirtualAddress
;
261 } BL_MEMORY_DESCRIPTOR
, *PBL_MEMORY_DESCRIPTOR
;
263 typedef struct _BL_BCD_OPTION
269 ULONG NextEntryOffset
;
271 } BL_BCD_OPTION
, *PBL_BCD_OPTION
;
273 typedef struct _BL_APPLICATION_ENTRY
279 BL_BCD_OPTION BcdData
;
280 } BL_APPLICATION_ENTRY
, *PBL_APPLICATION_ENTRY
;
282 typedef struct _BL_HARDDISK_DEVICE
289 ULONG PartitionSignature
;
294 GUID PartitionSignature
;
302 } BL_HARDDISK_DEVICE
;
304 typedef struct _BL_LOCAL_DEVICE
314 BL_HARDDISK_DEVICE HardDisk
;
318 PHYSICAL_ADDRESS ImageBase
;
319 LARGE_INTEGER ImageSize
;
325 typedef struct _BL_DEVICE_DESCRIPTOR
329 DEVICE_TYPE DeviceType
;
333 BL_LOCAL_DEVICE Local
;
344 ULONG PartitionNumber
;
352 BL_LOCAL_DEVICE Disk
;
355 } BL_DEVICE_DESCRIPTOR
, *PBL_DEVICE_DESCRIPTOR
;
357 typedef struct _BL_FILE_PATH_DESCRIPTOR
362 UCHAR Path
[ANYSIZE_ARRAY
];
363 } BL_FILE_PATH_DESCRIPTOR
, *PBL_FILE_PATH_DESCRIPTOR
;
365 typedef struct _BL_WINDOWS_LOAD_OPTIONS
371 WCHAR LoadOptions
[ANYSIZE_ARRAY
];
372 } BL_WINDOWS_LOAD_OPTIONS
, *PBL_WINDOWS_LOAD_OPTIONS
;
374 typedef struct _BL_ARCH_CONTEXT
377 BL_TRANSLATION_TYPE TranslationType
;
379 } BL_ARCH_CONTEXT
, *PBL_ARCH_CONTEXT
;
381 typedef struct _BL_MEMORY_DESCRIPTOR_LIST
387 } BL_MEMORY_DESCRIPTOR_LIST
, *PBL_MEMORY_DESCRIPTOR_LIST
;
389 /* INLINE ROUTINES ***********************************************************/
393 BlSetupDefaultParameters (
394 _Out_ PBL_LIBRARY_PARAMETERS LibraryParameters
397 BL_LIBRARY_PARAMETERS DefaultParameters
=
409 /* Copy the defaults */
410 RtlCopyMemory(LibraryParameters
, &DefaultParameters
, sizeof(*LibraryParameters
));
415 MmMdInitializeListHead (
416 _In_ PBL_MEMORY_DESCRIPTOR_LIST List
419 /* Initialize the list */
420 InitializeListHead(&List
->ListHead
);
421 List
->First
= &List
->ListHead
;
425 /* INITIALIZATION ROUTINES ***************************************************/
429 _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters
,
430 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
441 _In_ PBL_FIRMWARE_DESCRIPTOR FirmwareParameters
446 _In_ PBL_MEMORY_DATA MemoryData
,
447 _In_ BL_TRANSLATION_TYPE TranslationType
,
448 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
451 /* UTILITY ROUTINES **********************************************************/
460 _In_ EFI_STATUS EfiStatus
463 /* BCD ROUTINES **************************************************************/
466 BlGetBootOptionSize (
467 _In_ PBL_BCD_OPTION BcdOption
470 /* CONTEXT ROUTINES **********************************************************/
473 BlpArchSwitchContext (
474 _In_ BL_ARCH_MODE NewMode
477 /* MEMORY MANAGER ROUTINES ***************************************************/
486 _In_ PBL_MEMORY_DATA MemoryData
,
487 _In_ ULONG MinimumPages
493 _In_ PBL_MEMORY_DATA MemoryData
,
494 _In_ BL_TRANSLATION_TYPE TranslationType
,
495 _In_ BL_TRANSLATION_TYPE LibraryTranslationType
501 _In_ ULONG HeapAttributes
507 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
512 _Out_ PBL_MEMORY_DESCRIPTOR_LIST MemoryMap
,
518 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
521 extern ULONG MmDescriptorCallTreeCount
;
522 extern ULONG BlpApplicationFlags
;
523 extern BL_LIBRARY_PARAMETERS BlpLibraryParameters
;
524 extern BL_TRANSLATION_TYPE MmTranslationType
;
525 extern PBL_ARCH_CONTEXT CurrentExecutionContext
;