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 ******************************************************************/
25 /* NT SafeInt Header */
26 #include <ntintsafe.h>
32 #include <drivers/acpi/acpi.h>
36 #include <DevicePath.h>
37 #include <LoadedImage.h>
38 #include <GraphicsOutput.h>
42 #include <GlobalVariable.h>
44 /* Registry Headers */
48 /* DEFINES *******************************************************************/
50 DEFINE_GUID(BadMemoryGuid
, 0x54B8275B, 0xD431, 0x473F, 0xAC, 0xFB, 0xE5, 0x36, 0xA0, 0x84, 0x94, 0xA3);
52 #define BL_APPLICATION_FLAG_CONVERTED_FROM_EFI 0x01
54 #define BL_APP_ENTRY_SIGNATURE "BTAPENT"
56 #define BOOT_APPLICATION_SIGNATURE_1 'TOOB'
57 #define BOOT_APPLICATION_SIGNATURE_2 ' PPA'
59 #define BOOT_MEMORY_TRANSLATION_TYPE_PHYSICAL 0
60 #define BOOT_MEMORY_TRANSLATION_TYPE_VIRTUAL 1
62 #define BOOT_APPLICATION_VERSION 2
63 #define BL_MEMORY_DATA_VERSION 1
64 #define BL_RETURN_ARGUMENTS_VERSION 1
65 #define BL_FIRMWARE_DESCRIPTOR_VERSION 2
67 #define BL_RETURN_ARGUMENTS_NO_PAE_FLAG 0x40
69 #define BL_APPLICATION_ENTRY_FLAG_NO_GUID 0x01
70 #define BL_APPLICATION_ENTRY_BCD_OPTIONS_INTERNAL 0x02
71 #define BL_APPLICATION_ENTRY_WINLOAD 0x04
72 #define BL_APPLICATION_ENTRY_STARTUP 0x08
73 #define BL_APPLICATION_ENTRY_REBOOT_ON_ERROR 0x20
74 #define BL_APPLICATION_ENTRY_NTLDR 0x40
75 #define BL_APPLICATION_ENTRY_BCD_OPTIONS_EXTERNAL 0x80
76 #define BL_APPLICATION_ENTRY_WINRESUME 0x100
77 #define BL_APPLICATION_ENTRY_SETUPLDR 0x200
78 #define BL_APPLICATION_ENTRY_BOOTSECTOR 0x400
79 #define BL_APPLICATION_ENTRY_BOOTMGR 0x1000
80 #define BL_APPLICATION_ENTRY_DISPLAY_ORDER 0x800000
81 #define BL_APPLICATION_ENTRY_FIXED_SEQUENCE 0x20000000
82 #define BL_APPLICATION_ENTRY_RECOVERY 0x40000000
84 #define BL_CONTEXT_PAGING_ON 1
85 #define BL_CONTEXT_INTERRUPTS_ON 2
87 #define BL_MM_FLAG_USE_FIRMWARE_FOR_MEMORY_MAP_BUFFERS 0x01
88 #define BL_MM_FLAG_REQUEST_COALESCING 0x02
90 #define BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG 0x01
91 #define BL_MM_ADD_DESCRIPTOR_TRUNCATE_FLAG 0x02
92 #define BL_MM_ADD_DESCRIPTOR_NEVER_COALESCE_FLAG 0x10
93 #define BL_MM_ADD_DESCRIPTOR_NEVER_TRUNCATE_FLAG 0x20
94 #define BL_MM_ADD_DESCRIPTOR_UPDATE_LIST_POINTER_FLAG 0x2000
96 #define BL_MM_INCLUDE_MAPPED_ALLOCATED 0x01
97 #define BL_MM_INCLUDE_MAPPED_UNALLOCATED 0x02
98 #define BL_MM_INCLUDE_UNMAPPED_ALLOCATED 0x04
99 #define BL_MM_INCLUDE_UNMAPPED_UNALLOCATED 0x08
100 #define BL_MM_INCLUDE_RESERVED_ALLOCATED 0x10
101 #define BL_MM_INCLUDE_BAD_MEMORY 0x20
102 #define BL_MM_INCLUDE_FIRMWARE_MEMORY 0x40
103 #define BL_MM_INCLUDE_TRUNCATED_MEMORY 0x80
104 #define BL_MM_INCLUDE_PERSISTEND_MEMORY 0x100
106 #define BL_MM_REQUEST_DEFAULT_TYPE 1
107 #define BL_MM_REQUEST_TOP_DOWN_TYPE 2
109 #define BL_MM_REMOVE_VIRTUAL_REGION_FLAG 0x80000000
111 #define BL_LIBRARY_FLAG_NO_DISPLAY 0x01
112 #define BL_LIBRARY_FLAG_REINITIALIZE 0x02
113 #define BL_LIBRARY_FLAG_REINITIALIZE_ALL 0x04
114 #define BL_LIBRARY_FLAG_ZERO_HEAP_ALLOCATIONS_ON_FREE 0x10
115 #define BL_LIBRARY_FLAG_INITIALIZATION_COMPLETED 0x20
116 #define BL_LIBRARY_FLAG_NO_GRAPHICS_CONSOLE 0x800
118 #define BL_DISPLAY_GRAPHICS_FORCED_VIDEO_MODE_FLAG 0x01
119 #define BL_DISPLAY_GRAPHICS_FORCED_HIGH_RES_MODE_FLAG 0x02
121 #define BL_HT_VALUE_IS_INLINE 0x01
123 #define BL_FS_REGISTER_AT_HEAD_FLAG 1
125 #define BL_BLOCK_DEVICE_REMOVABLE_FLAG 0x01
126 #define BL_BLOCK_DEVICE_PRESENT_FLAG 0x02
127 #define BL_BLOCK_DEVICE_VIRTUAL_FLAG 0x04
129 #define BL_MEMORY_CLASS_SHIFT 28
131 #define BL_FILE_READ_ACCESS 0x01
132 #define BL_FILE_WRITE_ACCESS 0x02
133 #define BL_DIRECTORY_ACCESS 0x04
134 #define BL_UNKNOWN_ACCESS 0x10
136 #define BL_DEVICE_READ_ACCESS 0x01
137 #define BL_DEVICE_WRITE_ACCESS 0x02
139 #define BL_DEVICE_ENTRY_OPENED 0x01
140 #define BL_DEVICE_ENTRY_READ_ACCESS 0x02
141 #define BL_DEVICE_ENTRY_WRITE_ACCESS 0x04
143 #define BL_FILE_ENTRY_OPENED 0x01
144 #define BL_FILE_ENTRY_READ_ACCESS 0x02
145 #define BL_FILE_ENTRY_WRITE_ACCESS 0x04
146 #define BL_FILE_ENTRY_UNKNOWN_ACCESS 0x10
147 #define BL_FILE_ENTRY_DIRECTORY 0x10000
149 #define BL_ETFS_FILE_ENTRY_DIRECTORY 0x01
151 #define BL_IMG_VALID_FILE 0x01
152 #define BL_IMG_MEMORY_FILE 0x02
153 #define BL_IMG_REMOTE_FILE 0x04
155 #define BL_LOAD_IMG_VIRTUAL_BUFFER 0x01
156 #define BL_LOAD_IMG_EXISTING_BUFFER 0x04
157 #define BL_LOAD_IMG_UNKNOWN_BUFFER_FLAG 0x08
158 #define BL_LOAD_IMG_COMPUTE_SIGNATURE 0x10
159 #define BL_LOAD_IMG_COMPUTE_HASH 0x40000
161 #define BL_LOAD_PE_IMG_VIRTUAL_BUFFER BL_LOAD_IMG_VIRTUAL_BUFFER
162 #define BL_LOAD_PE_IMG_CHECK_MACHINE 0x02
163 #define BL_LOAD_PE_IMG_EXISTING_BUFFER BL_LOAD_IMG_EXISTING_BUFFER
164 #define BL_LOAD_PE_IMG_COMPUTE_HASH 0x10
165 #define BL_LOAD_PE_IMG_CHECK_SUBSYSTEM 0x80
166 #define BL_LOAD_PE_IMG_SKIP_RELOCATIONS 0x100
167 #define BL_LOAD_PE_IMG_CHECK_FORCED_INTEGRITY 0x200
168 #define BL_LOAD_PE_IMG_IGNORE_CHECKSUM_MISMATCH 0x10000
169 #define BL_LOAD_PE_IMG_VALIDATE_ORIGINAL_FILENAME 0x400000
172 #define BL_UTL_CHECKSUM_COMPLEMENT 0x10000
173 #define BL_UTL_CHECKSUM_ROTATE 0x20000
174 #define BL_UTL_CHECKSUM_NEGATE 0x40000
175 #define BL_UTL_CHECKSUM_UCHAR_BUFFER 0x01
176 #define BL_UTL_CHECKSUM_USHORT_BUFFER 0x02
178 /* ENUMERATIONS **************************************************************/
180 typedef enum _BL_COLOR
198 } BL_COLOR
, *PBL_COLOR
;
200 typedef enum _BL_MENU_POLICY
202 MenuPolicyLegacy
= 0,
203 MenuPolicyStandard
= 1
206 typedef enum _BL_MEMORY_DESCRIPTOR_TYPE
210 } BL_MEMORY_DESCRIPTOR_TYPE
;
212 typedef enum _BL_TRANSLATION_TYPE
218 } BL_TRANSLATION_TYPE
;
220 typedef enum _BL_ARCH_MODE
229 typedef enum _BL_DEVICE_TYPE
232 LegacyPartitionDevice
= 2,
241 // Local Device Types
243 typedef enum _BL_LOCAL_DEVICE_TYPE
250 VirtualDiskDevice
= 6
251 } BL_LOCAL_DEVICE_TYPE
;
256 typedef enum _BL_PARTITION_TYPE
266 typedef enum _BL_PATH_TYPE
275 typedef enum _BL_MEMORY_CLASS
285 typedef enum _BL_MEMORY_TYPE
290 BlLoaderMemory
= 0xD0000002,
291 BlLoaderDeviceMemory
= 0xD0000004,
292 BlLoaderHeap
= 0xD0000005,
293 BlLoaderPageDirectory
= 0xD0000006,
294 BlLoaderReferencePage
= 0xD0000007,
295 BlLoaderRamDisk
= 0xD0000008,
296 BlLoaderArchData
= 0xD0000009,
297 BlLoaderData
= 0xD000000A,
298 BlLoaderRegistry
= 0xD000000B,
299 BlLoaderBlockMemory
= 0xD000000C,
300 BlLoaderSelfMap
= 0xD000000F,
303 // Application Memory
305 BlApplicationReserved
= 0xE0000001,
306 BlApplicationData
= 0xE0000004,
311 BlConventionalMemory
= 0xF0000001,
312 BlUnusableMemory
= 0xF0000002,
313 BlReservedMemory
= 0xF0000003,
314 BlEfiBootMemory
= 0xF0000004,
315 BlEfiRuntimeMemory
= 0xF0000006,
316 BlAcpiReclaimMemory
= 0xF0000008,
317 BlAcpiNvsMemory
= 0xF0000009,
318 BlDeviceIoMemory
= 0xF000000A,
319 BlDevicePortMemory
= 0xF000000B,
320 BlPalMemory
= 0xF000000C,
323 typedef enum _BL_MEMORY_ATTR
326 // Memory Caching Attributes
328 BlMemoryUncached
= 0x00000001,
329 BlMemoryWriteCombined
= 0x00000002,
330 BlMemoryWriteThrough
= 0x00000004,
331 BlMemoryWriteBack
= 0x00000008,
332 BlMemoryUncachedExported
= 0x00000010,
333 BlMemoryValidCacheAttributes
= BlMemoryUncached
| BlMemoryWriteCombined
| BlMemoryWriteThrough
| BlMemoryWriteBack
| BlMemoryUncachedExported
,
334 BlMemoryValidCacheAttributeMask
= 0x000000FF,
337 // Memory Protection Attributes
339 BlMemoryWriteProtected
= 0x00000100,
340 BlMemoryReadProtected
= 0x00000200,
341 BlMemoryExecuteProtected
= 0x00000400,
342 BlMemoryValidProtectionAttributes
= BlMemoryWriteProtected
| BlMemoryReadProtected
| BlMemoryExecuteProtected
,
343 BlMemoryValidProtectionAttributeMask
= 0x0000FF00,
346 // Memory Allocation Attributes
348 BlMemoryUnknown
= 0x00010000,
349 BlMemoryNonFixed
= 0x00020000,
350 BlMemoryFixed
= 0x00040000,
351 BlMemoryReserved
= 0x00080000,
352 BlMemoryValidAllocationAttributes
= BlMemoryNonFixed
| BlMemoryFixed
| BlMemoryReserved
| BlMemoryUnknown
,
353 BlMemoryValidAllocationAttributeMask
= 0x00FF0000,
356 // Memory Type Attributes
358 BlMemoryRuntime
= 0x01000000,
359 BlMemoryCoalesced
= 0x02000000,
360 BlMemoryUpdate
= 0x04000000,
361 BlMemoryNonFirmware
= 0x08000000,
362 BlMemorySpecial
= 0x20000000,
363 BlMemoryFirmware
= 0x80000000,
364 BlMemoryValidTypeAttributes
= BlMemoryRuntime
| BlMemoryCoalesced
| BlMemoryUpdate
| BlMemoryNonFirmware
| BlMemorySpecial
| BlMemoryFirmware
,
365 BlMemoryValidTypeAttributeMask
= 0xFF000000,
368 /* CALLBACKS *****************************************************************/
370 struct _BL_FILE_ENTRY
;
371 struct _BL_FILE_INFORMATION
;
375 _In_
struct _BL_FILE_ENTRY
* Directory
,
376 _In_ PWCHAR FileName
,
378 _Out_
struct _BL_FILE_ENTRY
** FileEntry
384 _In_
struct _BL_FILE_ENTRY
* FileEntry
390 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
393 _Out_opt_ PULONG BytesRead
404 (*PBL_FILE_GET_NEXT
) (
410 (*PBL_FILE_GET_INFO
) (
411 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
412 _Out_
struct _BL_FILE_INFORMATION
* FileInfo
417 (*PBL_FILE_SET_INFO
) (
418 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
419 _In_
struct _BL_FILE_INFORMATION
* FileInfo
424 (*PBL_FS_INIT_CALLBACK
) (
430 (*PBL_FS_DESTROY_CALLBACK
) (
436 (*PBL_FS_MOUNT_CALLBACK
) (
439 _Out_
struct _BL_FILE_ENTRY
** FileEntry
444 (*PBL_FS_PURGE_CALLBACK
) (
450 (*PBL_FILE_DESTROY_CALLBACK
) (
454 struct _BL_TEXT_CONSOLE
;
455 struct _BL_DISPLAY_STATE
;
456 struct _BL_DISPLAY_MODE
;
457 struct _BL_INPUT_CONSOLE
;
458 struct _BL_REMOTE_CONSOLE
;
459 struct _BL_GRAPHICS_CONSOLE
;
462 (*PCONSOLE_DESTRUCT
) (
463 _In_
struct _BL_TEXT_CONSOLE
* Console
468 (*PCONSOLE_REINITIALIZE
) (
469 _In_
struct _BL_TEXT_CONSOLE
* Console
474 (*PCONSOLE_GET_TEXT_STATE
) (
475 _In_
struct _BL_TEXT_CONSOLE
* Console
,
476 _Out_
struct _BL_DISPLAY_STATE
* TextState
481 (*PCONSOLE_SET_TEXT_STATE
) (
482 _In_
struct _BL_TEXT_CONSOLE
* Console
,
484 _In_
struct _BL_DISPLAY_STATE
* TextState
489 (*PCONSOLE_GET_TEXT_RESOLUTION
) (
490 _In_
struct _BL_TEXT_CONSOLE
* Console
,
491 _Out_ PULONG TextResolution
496 (*PCONSOLE_SET_TEXT_RESOLUTION
) (
497 _In_
struct _BL_TEXT_CONSOLE
* Console
,
498 _In_ ULONG NewTextResolution
,
499 _Out_ PULONG OldTextResolution
504 (*PCONSOLE_CLEAR_TEXT
) (
505 _In_
struct _BL_TEXT_CONSOLE
* Console
,
506 _In_ BOOLEAN LineOnly
511 (*PCONSOLE_IS_ENABLED
) (
512 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
517 (*PCONSOLE_GET_GRAPHICAL_RESOLUTION
) (
518 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
519 _Out_
struct _BL_DISPLAY_MODE
* DisplayMode
524 (*PCONSOLE_SET_GRAPHICAL_RESOLUTION
) (
525 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
526 _In_
struct _BL_DISPLAY_MODE DisplayMode
532 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
538 (*PCONSOLE_WRITE_TEXT
) (
539 _In_
struct _BL_TEXT_CONSOLE
* Console
,
546 (*PBL_TBL_LOOKUP_ROUTINE
) (
548 _In_ PVOID Argument1
,
549 _In_ PVOID Argument2
,
550 _In_ PVOID Argument3
,
556 (*PBL_TBL_MAP_ROUTINE
) (
558 _In_ ULONG EntryIndex
563 (*PBL_TBL_SET_ROUTINE
) (
569 (*PBL_IO_DESTROY_ROUTINE
) (
573 struct _BL_HASH_ENTRY
;
576 (*PBL_HASH_TABLE_COMPARE_FUNCTION
) (
577 _In_
struct _BL_HASH_ENTRY
* Entry1
,
578 _In_
struct _BL_HASH_ENTRY
* Entry2
583 (*PBL_HASH_TABLE_HASH_FUNCTION
) (
584 _In_
struct _BL_HASH_ENTRY
* Entry
,
588 struct _BL_DEVICE_ENTRY
;
589 struct _BL_DEVICE_DESCRIPTOR
;
590 struct _BL_DEVICE_INFORMATION
;
594 (*PBL_DEVICE_ENUMERATE_DEVICE_CLASS
) (
601 _In_
struct _BL_DEVICE_DESCRIPTOR
* Device
,
602 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
607 (*PBL_DEVICE_CLOSE
) (
608 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
614 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
617 _Out_ PULONG BytesRead
622 (*PBL_DEVICE_WRITE
) (
628 (*PBL_DEVICE_GET_INFORMATION
) (
629 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
630 _Out_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
635 (*PBL_DEVICE_SET_INFORMATION
) (
636 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
637 _In_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
642 (*PBL_DEVICE_RESET
) (
648 (*PBL_DEVICE_FLUSH
) (
654 (*PBL_DEVICE_CREATE
) (
659 /* DATA STRUCTURES ***********************************************************/
661 typedef struct _BL_LIBRARY_PARAMETERS
664 ULONG TranslationType
;
665 ULONG MinimumAllocationCount
;
666 ULONG MinimumHeapSize
;
667 ULONG HeapAllocationAttributes
;
668 PWCHAR ApplicationBaseDirectory
;
669 ULONG DescriptorCount
;
670 PWCHAR FontBaseDirectory
;
671 } BL_LIBRARY_PARAMETERS
, *PBL_LIBRARY_PARAMETERS
;
673 /* This should eventually go into a more public header */
674 typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK
676 /* This header tells the library what image we're dealing with */
681 ULONG MemoryTranslationType
;
683 /* Where is the image located */
687 /* Offset to BL_MEMORY_DATA */
688 ULONG MemoryDataOffset
;
690 /* Offset to BL_APPLICATION_ENTRY */
691 ULONG AppEntryOffset
;
693 /* Offset to BL_DEVICE_DESCRPIPTOR */
694 ULONG BootDeviceOffset
;
696 /* Offset to BL_FIRMWARE_PARAMETERS */
697 ULONG FirmwareParametersOffset
;
699 /* Offset to BL_RETURN_ARGUMENTS */
700 ULONG ReturnArgumentsOffset
;
701 } BOOT_APPLICATION_PARAMETER_BLOCK
, *PBOOT_APPLICATION_PARAMETER_BLOCK
;
703 typedef struct _BL_MEMORY_DATA
707 ULONG DescriptorCount
;
708 ULONG DescriptorSize
;
709 ULONG DescriptorOffset
;
710 } BL_MEMORY_DATA
, *PBL_MEMORY_DATA
;
712 typedef struct _BL_FIRMWARE_DESCRIPTOR
716 EFI_HANDLE ImageHandle
;
717 EFI_SYSTEM_TABLE
*SystemTable
;
718 } BL_FIRMWARE_DESCRIPTOR
, *PBL_FIRMWARE_DESCRIPTOR
;
720 typedef struct _BL_RETURN_ARGUMENTS
727 } BL_RETURN_ARGUMENTS
, *PBL_RETURN_ARGUMENTS
;
729 typedef struct _BL_MEMORY_DESCRIPTOR
731 LIST_ENTRY ListEntry
;
737 ULONGLONG VirtualPage
;
741 ULONGLONG BaseAddress
;
742 ULONGLONG VirtualAddress
;
748 } BL_MEMORY_DESCRIPTOR
, *PBL_MEMORY_DESCRIPTOR
;
750 typedef struct _BL_BCD_OPTION
756 ULONG NextEntryOffset
;
758 } BL_BCD_OPTION
, *PBL_BCD_OPTION
;
760 typedef struct _BL_APPLICATION_ENTRY
766 BL_BCD_OPTION BcdData
;
767 } BL_APPLICATION_ENTRY
, *PBL_APPLICATION_ENTRY
;
769 typedef struct _BL_LOADED_APPLICATION_ENTRY
773 PBL_BCD_OPTION BcdData
;
774 } BL_LOADED_APPLICATION_ENTRY
, *PBL_LOADED_APPLICATION_ENTRY
;
776 typedef struct _BL_MENU_STATUS
783 ULONG AdvancedOptions
: 1;
784 ULONG BootOptions
: 1;
793 } BL_MENU_STATUS
, *PL_MENU_STATUS
;
795 typedef enum _BL_BOOT_ERROR_STATUS
805 } BL_BOOT_ERROR_STATUS
;
807 typedef struct _BL_HARDDISK_DEVICE
814 ULONG PartitionSignature
;
819 GUID PartitionSignature
;
827 } BL_HARDDISK_DEVICE
;
829 typedef struct _BL_LOCAL_DEVICE
839 BL_HARDDISK_DEVICE HardDisk
;
843 PHYSICAL_ADDRESS ImageBase
;
844 LARGE_INTEGER ImageSize
;
848 ULONG File
; // unknown for now
850 } BL_LOCAL_DEVICE
, *PBL_LOCAL_DEVICE
;
852 typedef struct _BL_DEVICE_DESCRIPTOR
854 DEVICE_TYPE DeviceType
;
860 BL_LOCAL_DEVICE Local
;
871 ULONG PartitionNumber
;
879 BL_LOCAL_DEVICE Disk
;
882 } BL_DEVICE_DESCRIPTOR
, *PBL_DEVICE_DESCRIPTOR
;
884 typedef struct _BL_FILE_PATH_DESCRIPTOR
889 UCHAR Path
[ANYSIZE_ARRAY
];
890 } BL_FILE_PATH_DESCRIPTOR
, *PBL_FILE_PATH_DESCRIPTOR
;
892 typedef struct _BL_WINDOWS_LOAD_OPTIONS
898 WCHAR LoadOptions
[ANYSIZE_ARRAY
];
899 } BL_WINDOWS_LOAD_OPTIONS
, *PBL_WINDOWS_LOAD_OPTIONS
;
901 typedef struct _BL_ARCH_CONTEXT
904 BL_TRANSLATION_TYPE TranslationType
;
906 } BL_ARCH_CONTEXT
, *PBL_ARCH_CONTEXT
;
908 typedef struct _BL_MEMORY_DESCRIPTOR_LIST
914 } BL_MEMORY_DESCRIPTOR_LIST
, *PBL_MEMORY_DESCRIPTOR_LIST
;
916 typedef struct _BL_ADDRESS_RANGE
920 } BL_ADDRESS_RANGE
, *PBL_ADDRESS_RANGE
;
922 typedef struct _BL_FILE_INFORMATION
928 } BL_FILE_INFORMATION
, *PBL_FILE_INFORMATION
;
930 typedef struct _BL_FILE_CALLBACKS
933 PBL_FILE_CLOSE Close
;
935 PBL_FILE_WRITE Write
;
936 PBL_FILE_GET_NEXT GetNext
;
937 PBL_FILE_GET_INFO GetInfo
;
938 PBL_FILE_SET_INFO SetInfo
;
939 } BL_FILE_CALLBACKS
, *PBL_FILE_CALLBACKS
;
941 typedef struct _BL_FILE_ENTRY
947 ULONG ReferenceCount
;
949 ULONGLONG TotalBytesRead
;
951 BL_FILE_CALLBACKS Callbacks
;
952 PVOID FsSpecificData
;
953 } BL_FILE_ENTRY
, *PBL_FILE_ENTRY
;
955 typedef struct _BL_FILE_SYSTEM_ENTRY
957 LIST_ENTRY ListEntry
;
958 PBL_FS_INIT_CALLBACK InitCallback
;
959 PBL_FS_DESTROY_CALLBACK DestroyCallback
;
960 PBL_FS_MOUNT_CALLBACK MountCallback
;
961 PBL_FS_PURGE_CALLBACK PurgeCallback
;
962 } BL_FILE_SYSTEM_ENTRY
, *PBL_FILE_SYSTEM_ENTRY
;
964 typedef struct _BL_FILE_SYSTEM_REGISTRATION_TABLE
966 PBL_FS_INIT_CALLBACK Init
;
967 PBL_FS_DESTROY_CALLBACK Destroy
;
968 PBL_FS_MOUNT_CALLBACK Mount
;
969 PBL_FS_PURGE_CALLBACK Purge
;
970 } BL_FILE_SYSTEM_REGISTRATION_TABLE
;
972 typedef struct _BL_DISPLAY_STATE
979 } BL_DISPLAY_STATE
, *PBL_DISPLAY_STATE
;
981 typedef struct _BL_DISPLAY_MODE
986 } BL_DISPLAY_MODE
, *PBL_DISPLAY_MODE
;
988 typedef struct _BL_TEXT_CONSOLE_VTABLE
990 PCONSOLE_DESTRUCT Destruct
;
991 PCONSOLE_REINITIALIZE Reinitialize
;
992 PCONSOLE_GET_TEXT_STATE GetTextState
;
993 PCONSOLE_SET_TEXT_STATE SetTextState
;
994 PCONSOLE_GET_TEXT_RESOLUTION GetTextResolution
;
995 PCONSOLE_SET_TEXT_RESOLUTION SetTextResolution
;
996 PCONSOLE_CLEAR_TEXT ClearText
;
997 PCONSOLE_WRITE_TEXT WriteText
;
998 } BL_TEXT_CONSOLE_VTABLE
, *PBL_TEXT_CONSOLE_VTABLE
;
1000 typedef struct _BL_GRAPHICS_CONSOLE_VTABLE
1002 BL_TEXT_CONSOLE_VTABLE Text
;
1003 PCONSOLE_IS_ENABLED IsEnabled
;
1004 PCONSOLE_ENABLE Enable
;
1005 PVOID GetConsoleResolution
;
1006 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetGraphicalResolution
;
1007 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetOriginalResolution
;
1008 PCONSOLE_SET_GRAPHICAL_RESOLUTION SetOriginalResolution
;
1009 /// more for graphics ///
1010 } BL_GRAPHICS_CONSOLE_VTABLE
, *PBL_GRAPHICS_CONSOLE_VTABLE
;
1012 typedef struct _BL_TEXT_CONSOLE
1014 PBL_TEXT_CONSOLE_VTABLE Callbacks
;
1015 BL_DISPLAY_STATE State
;
1016 BL_DISPLAY_MODE DisplayMode
;
1018 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
* Protocol
;
1020 EFI_SIMPLE_TEXT_OUTPUT_MODE OldMode
;
1021 } BL_TEXT_CONSOLE
, *PBL_TEXT_CONSOLE
;
1023 typedef struct _BL_INPUT_CONSOLE_VTABLE
1025 PCONSOLE_DESTRUCT Destruct
;
1026 PCONSOLE_REINITIALIZE Reinitialize
;
1027 //PCONSOLE_IS_KEY_PENDING IsKeyPending;
1028 //PCONSOLE_READ_INPUT ReadInput;
1029 //PCONSOLE_ERASE_BUFFER EraseBuffer;
1030 //PCONSOLE_FILL_BUFFER FillBuffer;
1031 } BL_INPUT_CONSOLE_VTABLE
, *PBL_INPUT_CONSOLE_VTABLE
;
1033 typedef struct _BL_INPUT_CONSOLE
1035 PBL_INPUT_CONSOLE_VTABLE Callbacks
;
1040 } BL_INPUT_CONSOLE
, *PBL_INPUT_CONSOLE
;
1042 typedef enum _BL_GRAPHICS_CONSOLE_TYPE
1046 } BL_GRAPHICS_CONSOLE_TYPE
;
1048 typedef struct _BL_GRAPHICS_CONSOLE
1050 BL_TEXT_CONSOLE TextConsole
;
1051 BL_DISPLAY_MODE DisplayMode
;
1055 BL_DISPLAY_MODE OldDisplayMode
;
1056 ULONG OldPixelDepth
;
1058 BL_GRAPHICS_CONSOLE_TYPE Type
;
1059 EFI_GRAPHICS_OUTPUT_PROTOCOL
* Protocol
;
1061 ULONG FrameBufferSize
;
1062 ULONG PixelsPerScanLine
;
1065 } BL_GRAPHICS_CONSOLE
, *PBL_GRAPHICS_CONSOLE
;
1067 typedef struct _BL_REMOTE_CONSOLE
1069 BL_TEXT_CONSOLE TextConsole
;
1070 } BL_REMOTE_CONSOLE
, *PBL_REMOTE_CONSOLE
;
1072 typedef struct _BL_HASH_TABLE
1074 PLIST_ENTRY HashLinks
;
1076 PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
;
1077 PBL_HASH_TABLE_HASH_FUNCTION HashFunction
;
1078 } BL_HASH_TABLE
, *PBL_HASH_TABLE
;
1080 typedef struct _BL_HASH_ENTRY
1085 } BL_HASH_ENTRY
, *PBL_HASH_ENTRY
;
1087 typedef struct _BL_HASH_VALUE
1091 } BL_HASH_VALUE
, *PBL_HASH_VALUE
;
1093 typedef struct _BL_HASH_NODE
1095 LIST_ENTRY ListEntry
;
1096 BL_HASH_ENTRY Entry
;
1097 BL_HASH_VALUE Value
;
1098 } BL_HASH_NODE
, *PBL_HASH_NODE
;
1100 typedef struct _BL_BLOCK_DEVICE_INFORMATION
1102 BL_LOCAL_DEVICE_TYPE Type
;
1105 BL_PARTITION_TYPE PartitionType
;
1108 ULONGLONG LastBlock
;
1125 } BL_BLOCK_DEVICE_INFORMATION
, *PBL_BLOCK_DEVICE_INFORMATION
;
1127 typedef struct _BL_DEVICE_INFORMATION
1129 BL_DEVICE_TYPE DeviceType
;
1132 BL_BLOCK_DEVICE_INFORMATION BlockDeviceInfo
;
1134 } BL_DEVICE_INFORMATION
, *PBL_DEVICE_INFORMATION
;
1136 typedef struct _BL_BLOCK_DEVICE
1138 BL_BLOCK_DEVICE_INFORMATION
;
1139 ULONGLONG StartOffset
;
1140 EFI_BLOCK_IO
* Protocol
;
1142 } BL_BLOCK_DEVICE
, *PBL_BLOCK_DEVICE
;
1144 typedef struct _BL_PROTOCOL_HANDLE
1148 } BL_PROTOCOL_HANDLE
, *PBL_PROTOCOL_HANDLE
;
1150 typedef struct _BL_DEVICE_CALLBACKS
1152 PBL_DEVICE_ENUMERATE_DEVICE_CLASS EnumerateDeviceClass
;
1153 PBL_DEVICE_OPEN Open
;
1154 PBL_DEVICE_CLOSE Close
;
1155 PBL_DEVICE_READ Read
;
1156 PBL_DEVICE_WRITE Write
;
1157 PBL_DEVICE_GET_INFORMATION GetInformation
;
1158 PBL_DEVICE_SET_INFORMATION SetInformation
;
1159 PBL_DEVICE_RESET Reset
;
1160 PBL_DEVICE_FLUSH Flush
;
1161 PBL_DEVICE_CREATE Create
;
1162 } BL_DEVICE_CALLBACKS
, *PBL_DEVICE_CALLBACKS
;
1164 typedef struct _BL_DEVICE_ENTRY
1169 ULONG ReferenceCount
;
1170 BL_DEVICE_CALLBACKS Callbacks
;
1171 PVOID DeviceSpecificData
;
1172 PBL_DEVICE_DESCRIPTOR DeviceDescriptor
;
1173 } BL_DEVICE_ENTRY
, *PBL_DEVICE_ENTRY
;
1175 typedef struct _BL_IMG_FILE
1185 } BL_IMG_FILE
, *PBL_IMG_FILE
;
1187 typedef struct _BL_IMAGE_APPLICATION_ENTRY
1189 PBL_APPLICATION_ENTRY AppEntry
;
1192 } BL_IMAGE_APPLICATION_ENTRY
, *PBL_IMAGE_APPLICATION_ENTRY
;
1194 typedef struct _BL_IMAGE_PARAMETERS
1199 } BL_IMAGE_PARAMETERS
, *PBL_IMAGE_PARAMETERS
;
1201 typedef struct _BL_DEFERRED_FONT_FILE
1203 LIST_ENTRY ListEntry
;
1205 PBL_DEVICE_DESCRIPTOR Device
;
1207 } BL_DEFERRED_FONT_FILE
, *PBL_DEFERRED_FONT_FILE
;
1211 typedef struct _BMP_HEADER
1217 } BMP_HEADER
, *PBMP_HEADER
;
1219 typedef struct _DIB_HEADER
1228 ULONG XPelsPerMeter
;
1229 ULONG YPelsPerMEter
;
1232 } DIB_HEADER
, *PDIB_HEADER
;
1234 typedef struct _BITMAP
1236 BMP_HEADER BmpHeader
;
1237 DIB_HEADER DibHeader
;
1241 typedef struct _COORD
1247 typedef struct _BL_PD_DATA_BLOB
1252 } BL_PD_DATA_BLOB
, *PBL_PD_DATA_BLOB
;
1254 /* INLINE ROUTINES ***********************************************************/
1258 BlSetupDefaultParameters (
1259 _Out_ PBL_LIBRARY_PARAMETERS LibraryParameters
1262 BL_LIBRARY_PARAMETERS DefaultParameters
=
1274 /* Copy the defaults */
1275 RtlCopyMemory(LibraryParameters
, &DefaultParameters
, sizeof(*LibraryParameters
));
1280 MmMdInitializeListHead (
1281 _In_ PBL_MEMORY_DESCRIPTOR_LIST List
1284 /* Initialize the list */
1285 InitializeListHead(&List
->ListHead
);
1286 List
->First
= &List
->ListHead
;
1290 /* INITIALIZATION ROUTINES ***************************************************/
1293 BlInitializeLibrary(
1294 _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters
,
1295 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1306 _In_ PBL_FIRMWARE_DESCRIPTOR FirmwareParameters
1311 _In_ PBL_MEMORY_DATA MemoryData
,
1312 _In_ BL_TRANSLATION_TYPE TranslationType
,
1313 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1323 _In_ PBL_MEMORY_DATA MemoryData
,
1324 _In_ ULONG MinimumPages
1330 _In_ PBL_MEMORY_DATA MemoryData
,
1331 _In_ BL_TRANSLATION_TYPE TranslationType
,
1332 _In_ BL_TRANSLATION_TYPE LibraryTranslationType
1337 _In_ ULONG HeapSize
,
1338 _In_ ULONG HeapAttributes
1344 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1348 BlpDeviceInitialize (
1363 BlpDisplayInitialize (
1368 BlpDisplayReinitialize (
1382 /* FIRMWARE ROUTINES *********************************************************/
1391 BlFwEnumerateDevice (
1392 _In_ PBL_DEVICE_DESCRIPTOR Device
1399 _Inout_ EFI_PHYSICAL_ADDRESS
* Memory
1404 _In_ ULONG StallTime
1418 EfiConOutOutputString (
1419 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1424 EfiConOutQueryMode (
1425 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1427 _In_ UINTN
* Columns
,
1433 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1438 EfiConOutReadCurrentMode (
1439 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1440 _Out_ EFI_SIMPLE_TEXT_OUTPUT_MODE
* Mode
1444 EfiConOutSetAttribute (
1445 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1446 _In_ ULONG Attribute
1450 EfiConOutSetCursorPosition (
1451 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1457 EfiConOutEnableCursor (
1458 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1459 _In_ BOOLEAN Visible
1463 EfiLocateHandleBuffer (
1464 _In_ EFI_LOCATE_SEARCH_TYPE SearchType
,
1465 _In_ EFI_GUID
*Protocol
,
1466 _Inout_ PULONG HandleCount
,
1467 _Inout_ EFI_HANDLE
** Buffer
1472 _In_ EFI_HANDLE Handle
,
1473 _In_ EFI_GUID
*Protocol
,
1474 _Out_ PVOID
* Interface
1479 _In_ EFI_HANDLE Handle
,
1480 _In_ EFI_GUID
*Protocol
1484 EfiGopGetCurrentMode (
1485 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1487 _Out_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
*Information
1492 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1497 EfiGopGetFrameBuffer (
1498 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1499 _Out_ PHYSICAL_ADDRESS
* FrameBuffer
,
1500 _Out_ UINTN
*FrameBufferSize
1505 _In_ EFI_RESET_TYPE ResetType
1510 _In_ EFI_DEVICE_PATH
*DevicePath
1514 EfiIsDevicePathParent (
1515 _In_ EFI_DEVICE_PATH
*DevicePath1
,
1516 _In_ EFI_DEVICE_PATH
*DevicePath2
1521 _Out_ PPHYSICAL_ADDRESS FoundRsdt
1524 /* PLATFORM TIMER ROUTINES ***************************************************/
1527 BlpTimeCalibratePerformanceCounter (
1532 BlTimeQueryPerformanceCounter (
1533 _Out_opt_ PLARGE_INTEGER Frequency
1536 /* RESOURCE LOCALE INTERNATIONALIZATION ROUTINES *****************************/
1539 BlpDisplayRegisterLocale (
1543 /* FONT ROUTINES *************************************************************/
1546 BfiFreeDeferredFontFile (
1547 _In_ PBL_DEFERRED_FONT_FILE DeferredFontFile
1552 _In_ PBL_DEVICE_DESCRIPTOR Device
,
1553 _In_ PWCHAR FontPath
1557 BfLoadDeferredFontFiles (
1563 _In_ PBL_GRAPHICS_CONSOLE Console
1567 BfClearToEndOfLine (
1568 _In_ PBL_GRAPHICS_CONSOLE Console
1571 /* FILESYSTEM ROUTINES *******************************************************/
1580 _In_ ULONG DeviceId
,
1582 _Out_ PBL_FILE_ENTRY
* FileEntry
1592 _In_ ULONG DeviceId
,
1594 _Out_ PBL_FILE_ENTRY
* FileEntry
1597 /* DEBUG ROUTINES ************************************************************/
1601 BlBdDebuggerEnabled (
1606 BlBdPullRemoteFile (
1607 _In_ PWCHAR FilePath
,
1608 _Out_ PVOID BaseAddress
,
1609 _Out_ PULONGLONG FileSize
1620 _In_ ULONG ErrorCode
,
1621 _In_ ULONG Parameter1
,
1622 _In_ ULONG_PTR Parameter2
,
1623 _In_ ULONG_PTR Parameter3
,
1624 _In_ ULONG_PTR Parameter4
1627 /* UTILITY ROUTINES **********************************************************/
1630 BlUtlUpdateProgress (
1631 _In_ ULONG Percentage
,
1632 _Out_opt_ PBOOLEAN Completed
1637 _Out_ PVOID
* TableAddress
,
1638 _In_ ULONG Signature
1647 BlUtlRegisterProgressRoutine (
1653 _In_ ULONG PartialSum
,
1660 BlGetApplicationBaseAndSize (
1661 _Out_ PVOID
* ImageBase
,
1662 _Out_ PULONG ImageSize
1666 BlDestroyBootEntry (
1667 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
1672 _In_
const GUID
* DataGuid
,
1674 _Inout_ PBL_PD_DATA_BLOB DataBlob
1677 /* FIRMWARE UTILITY ROUTINES *************************************************/
1680 EfiGetEfiStatusCode(
1681 _In_ NTSTATUS Status
1685 EfiGetNtStatusCode (
1686 _In_ EFI_STATUS EfiStatus
1695 BlGetApplicationIdentifier (
1700 BlpSecureBootEFIIsEnabled (
1705 BlSecureBootIsEnabled (
1706 _Out_ PBOOLEAN SecureBootEnabled
1710 BlSecureBootCheckForFactoryReset (
1714 /* RESOURCE ROUTINES *********************************************************/
1717 BlResourceFindMessage (
1722 BlResourceFindHtml (
1727 BlpResourceInitialize (
1731 /* TABLE ROUTINES ************************************************************/
1737 _In_ PBL_TBL_MAP_ROUTINE MapCallback
1744 _Out_ PULONG EntryIndex
,
1745 _In_ PBL_TBL_LOOKUP_ROUTINE Callback
,
1746 _In_ PVOID Argument1
,
1747 _In_ PVOID Argument2
,
1748 _In_ PVOID Argument3
,
1749 _In_ PVOID Argument4
1754 _Inout_ PVOID
** Table
,
1755 _Inout_ PULONG Count
,
1757 _Out_ PULONG EntryIndex
,
1758 _In_ PBL_TBL_SET_ROUTINE Callback
1762 TblDoNotPurgeEntry (
1766 /* HASH TABLE ROUTINES *******************************************************/
1771 _In_ PBL_HASH_ENTRY Entry
,
1779 _In_ PBL_HASH_ENTRY Entry
,
1780 _Out_ PBL_HASH_VALUE
*Value
1786 _In_ PBL_HASH_TABLE_HASH_FUNCTION HashFunction
,
1787 _In_ PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
,
1791 /* BCD OPTION ROUTINES *******************************************************/
1795 _In_ PBL_BCD_OPTION List
,
1800 BlGetBootOptionListSize (
1801 _In_ PBL_BCD_OPTION BcdOption
1805 BlGetBootOptionSize (
1806 _In_ PBL_BCD_OPTION BcdOption
1810 BlGetBootOptionString (
1811 _In_ PBL_BCD_OPTION List
,
1817 BlGetBootOptionInteger (
1818 _In_ PBL_BCD_OPTION List
,
1820 _Out_ PULONGLONG Value
1824 BlGetBootOptionBoolean (
1825 _In_ PBL_BCD_OPTION List
,
1827 _Out_ PBOOLEAN Value
1831 BlpGetBootOptionIntegerList (
1832 _In_ PBL_BCD_OPTION List
,
1834 _Out_ PULONGLONG
* Value
,
1835 _Out_ PULONGLONG Count
,
1840 BlGetBootOptionDevice (
1841 _In_ PBL_BCD_OPTION List
,
1843 _Out_ PBL_DEVICE_DESCRIPTOR
* Value
,
1844 _In_opt_ PBL_BCD_OPTION
* ExtraOptions
1848 BlGetBootOptionGuid (
1849 _In_ PBL_BCD_OPTION List
,
1855 BlGetBootOptionGuidList (
1856 _In_ PBL_BCD_OPTION List
,
1864 _In_ PBL_BCD_OPTION OptionList
,
1865 _Out_ PBL_BCD_OPTION
*CopiedOptions
1869 BlAppendBootOptionBoolean (
1870 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1875 BlAppendBootOptionInteger (
1876 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1877 _In_ ULONG OptionId
,
1878 _In_ ULONGLONG Value
1882 BlAppendBootOptionString (
1883 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1884 _In_ PWCHAR OptionString
1888 BlAppendBootOptions (
1889 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1890 _In_ PBL_BCD_OPTION Options
1894 BlRemoveBootOption (
1895 _In_ PBL_BCD_OPTION List
,
1900 BlReplaceBootOptions (
1901 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1902 _In_ PBL_BCD_OPTION NewOptions
1905 /* BOOT REGISTRY ROUTINES ****************************************************/
1909 _In_ HANDLE KeyHandle
1914 _In_ HANDLE ParentHandle
,
1915 _In_ PWCHAR KeyName
,
1916 _Out_ PHANDLE Handle
1921 _In_ PBL_FILE_PATH_DESCRIPTOR FilePath
,
1922 _Out_ PHANDLE HiveHandle
1926 BiGetRegistryValue (
1927 _In_ HANDLE KeyHandle
,
1928 _In_ PWCHAR ValueName
,
1930 _Out_ PVOID
* Buffer
,
1931 _Out_ PULONG ValueLength
1935 BiEnumerateSubKeys (
1936 _In_ HANDLE KeyHandle
,
1937 _Out_ PWCHAR
** SubKeyList
,
1938 _Out_ PULONG SubKeyCount
1943 _In_ HANDLE KeyHandle
1948 _In_ HANDLE KeyHandle
1951 /* CONTEXT ROUTINES **********************************************************/
1954 BlpArchSwitchContext (
1955 _In_ BL_ARCH_MODE NewMode
1959 Archx86TransferTo32BitApplicationAsm (
1963 /* MEMORY DESCRIPTOR ROUTINES ************************************************/
1967 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
1970 PBL_MEMORY_DESCRIPTOR
1971 MmMdInitByteGranularDescriptor (
1973 _In_ BL_MEMORY_TYPE Type
,
1974 _In_ ULONGLONG BasePage
,
1975 _In_ ULONGLONG VirtualPage
,
1976 _In_ ULONGLONG PageCount
1980 MmMdFreeGlobalDescriptors (
1985 MmMdAddDescriptorToList (
1986 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1987 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
,
1992 MmMdRemoveDescriptorFromList (
1993 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1994 _In_ PBL_MEMORY_DESCRIPTOR Entry
1998 MmMdFindSatisfyingRegion (
1999 _In_ PBL_MEMORY_DESCRIPTOR Descriptor
,
2000 _Out_ PBL_MEMORY_DESCRIPTOR NewDescriptor
,
2001 _In_ ULONGLONG Pages
,
2002 _In_ PBL_ADDRESS_RANGE BaseRange
,
2003 _In_ PBL_ADDRESS_RANGE VirtualRange
,
2004 _In_ BOOLEAN TopDown
,
2005 _In_ BL_MEMORY_TYPE MemoryType
,
2007 _In_ ULONG Alignment
2011 MmMdRemoveRegionFromMdlEx (
2012 __in PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2014 __in ULONGLONG BasePage
,
2015 __in ULONGLONG PageCount
,
2016 __in PBL_MEMORY_DESCRIPTOR_LIST NewMdList
2020 MmMdFreeDescriptor (
2021 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
2024 /* PAGE ALLOCATOR ROUTINES ***************************************************/
2027 BlMmAllocatePhysicalPages(
2028 _Inout_ PPHYSICAL_ADDRESS Address
,
2029 _In_ BL_MEMORY_TYPE MemoryType
,
2030 _In_ ULONGLONG PageCount
,
2031 _In_ ULONG Attributes
,
2032 _In_ ULONG Alignment
2036 MmPapAllocatePhysicalPagesInRange (
2037 _Inout_ PPHYSICAL_ADDRESS BaseAddress
,
2038 _In_ BL_MEMORY_TYPE MemoryType
,
2039 _In_ ULONGLONG Pages
,
2040 _In_ ULONG Attributes
,
2041 _In_ ULONG Alignment
,
2042 _In_ PBL_MEMORY_DESCRIPTOR_LIST NewList
,
2043 _In_opt_ PBL_ADDRESS_RANGE Range
,
2044 _In_ ULONG RangeType
2048 BlMmFreePhysicalPages (
2049 _In_ PHYSICAL_ADDRESS Address
2053 MmPapAllocatePagesInRange (
2054 _Inout_ PVOID
* PhysicalAddress
,
2055 _In_ BL_MEMORY_TYPE MemoryType
,
2056 _In_ ULONGLONG Pages
,
2057 _In_ ULONG Attributes
,
2058 _In_ ULONG Alignment
,
2059 _In_opt_ PBL_ADDRESS_RANGE Range
,
2065 _Out_ PBL_MEMORY_DESCRIPTOR_LIST MemoryMap
,
2070 BlpMmInitializeConstraints (
2075 BlMmRemoveBadMemory (
2079 /* VIRTUAL MEMORY ROUTINES ***************************************************/
2082 BlMmMapPhysicalAddressEx (
2083 _In_ PVOID
* VirtualAddress
,
2084 _In_ ULONG Attributes
,
2085 _In_ ULONGLONG Size
,
2086 _In_ PHYSICAL_ADDRESS PhysicalAddress
2090 BlMmUnmapVirtualAddressEx (
2091 _In_ PVOID VirtualAddress
,
2095 /* BLOCK ALLOCATOR ROUTINES **************************************************/
2098 BlpMmCreateBlockAllocator (
2102 /* HEAP ALLOCATOR ROUTINES ***************************************************/
2114 /* DISPLAY ROUTINES **********************************************************/
2117 BlDisplayGetTextCellResolution (
2118 _Out_ PULONG TextWidth
,
2119 _Out_ PULONG TextHeight
2123 BlDisplaySetScreenResolution (
2128 BlDisplayGetScreenResolution (
2134 BlDisplayInvalidateOemBitmap (
2139 BlDisplayGetOemBitmap (
2140 _Out_ PCOORD Offset
,
2141 _Out_opt_ PULONG Flags
2145 BlDisplayValidOemBitmap (
2150 BlDisplayClearScreen (
2155 BlDisplaySetCursorType (
2159 /* I/O ROUTINES **************************************************************/
2162 BlpIoRegisterDestroyRoutine (
2163 _In_ PBL_IO_DESTROY_ROUTINE DestroyRoutine
2173 _In_ PBL_DEVICE_DESCRIPTOR Device
,
2176 _Out_ PULONG DeviceId
2180 BlDeviceGetInformation (
2181 _In_ ULONG DeviceId
,
2182 _Out_ PBL_DEVICE_INFORMATION DeviceInformation
2186 BlDeviceSetInformation (
2187 _In_ ULONG DeviceId
,
2188 _In_ PBL_DEVICE_INFORMATION DeviceInformation
2192 BlDeviceReadAtOffset (
2193 _In_ ULONG DeviceId
,
2195 _In_ ULONGLONG Offset
,
2197 _Out_ PULONG BytesRead
2200 /* IMAGE ROUTINES ************************************************************/
2203 BlImgLoadImageWithProgress2 (
2204 _In_ ULONG DeviceId
,
2205 _In_ BL_MEMORY_TYPE MemoryType
,
2206 _In_ PWCHAR FileName
,
2207 _Inout_ PVOID
* MappedBase
,
2208 _Inout_ PULONG MappedSize
,
2209 _In_ ULONG ImageFlags
,
2210 _In_ BOOLEAN ShowProgress
,
2211 _Out_opt_ PUCHAR
* HashBuffer
,
2212 _Out_opt_ PULONG HashSize
2215 PIMAGE_SECTION_HEADER
2217 _In_ PVOID ImageBase
,
2218 _In_ ULONG ImageSize
2222 BlImgLoadBootApplication (
2223 _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry
,
2224 _Out_ PULONG AppHandle
2228 BlImgStartBootApplication (
2229 _In_ ULONG AppHandle
,
2230 _Inout_ PBL_RETURN_ARGUMENTS ReturnArguments
2234 BlImgUnloadBootApplication (
2235 _In_ ULONG AppHandle
2239 BlImgQueryCodeIntegrityBootOptions (
2240 _In_ PBL_LOADED_APPLICATION_ENTRY ApplicationEntry
,
2241 _Out_ PBOOLEAN IntegrityChecksDisabled
,
2242 _Out_ PBOOLEAN TestSigning
2245 /* FILE I/O ROUTINES *********************************************************/
2253 BlFileReadAtOffsetEx (
2256 _In_ ULONGLONG ByteOffset
,
2258 _Out_ PULONG BytesReturned
,
2263 BlFileGetInformation (
2265 _In_ PBL_FILE_INFORMATION FileInfo
2270 _In_ ULONG DeviceId
,
2271 _In_ PWCHAR FileName
,
2276 /* BLOCK I/O ROUTINES *******************************************************/
2279 BlockIoEfiCompareDevice (
2280 _In_ PBL_DEVICE_DESCRIPTOR Device
,
2281 _In_ EFI_HANDLE Handle
2284 /* INPUT CONSOLE ROUTINES ****************************************************/
2287 ConsoleInputLocalDestruct (
2288 _In_
struct _BL_INPUT_CONSOLE
* Console
2292 ConsoleInputBaseReinitialize (
2293 _In_
struct _BL_INPUT_CONSOLE
* Console
2297 ConsoleCreateLocalInputCnsole (
2301 /* TEXT CONSOLE ROUTINES *****************************************************/
2304 ConsoleGraphicalDestruct (
2305 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2309 ConsoleGraphicalClearText (
2310 _In_ PBL_GRAPHICS_CONSOLE Console
,
2311 _In_ BOOLEAN LineOnly
2315 ConsoleGraphicalClearPixels (
2316 _In_ PBL_GRAPHICS_CONSOLE Console
,
2321 ConsoleGraphicalReinitialize (
2322 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2326 ConsoleGraphicalSetTextState (
2327 _In_ PBL_GRAPHICS_CONSOLE Console
,
2329 _In_ PBL_DISPLAY_STATE TextState
2333 ConsoleGraphicalIsEnabled (
2334 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2338 ConsoleGraphicalGetGraphicalResolution (
2339 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2340 _In_ PBL_DISPLAY_MODE DisplayMode
2344 ConsoleGraphicalGetOriginalResolution (
2345 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2346 _In_ PBL_DISPLAY_MODE DisplayMode
2350 ConsoleGraphicalEnable (
2351 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2356 ConsoleTextLocalDestruct (
2357 _In_
struct _BL_TEXT_CONSOLE
* Console
2361 ConsoleTextLocalReinitialize (
2362 _In_
struct _BL_TEXT_CONSOLE
* Console
2366 ConsoleTextBaseGetTextState (
2367 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2368 _Out_ PBL_DISPLAY_STATE TextState
2372 ConsoleTextLocalSetTextState (
2373 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2375 _In_ PBL_DISPLAY_STATE TextState
2379 ConsoleTextBaseGetTextResolution (
2380 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2381 _Out_ PULONG TextResolution
2385 ConsoleTextLocalSetTextResolution (
2386 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2387 _In_ ULONG NewTextResolution
,
2388 _Out_ PULONG OldTextResolution
2392 ConsoleTextLocalClearText (
2393 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2394 _In_ BOOLEAN LineOnly
2398 ConsoleTextLocalWriteText (
2399 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2401 _In_ ULONG Attribute
2405 ConsoleTextLocalConstruct (
2406 _In_ PBL_TEXT_CONSOLE TextConsole
,
2407 _In_ BOOLEAN Activate
2411 ConsolepFindResolution (
2412 _In_ PBL_DISPLAY_MODE Mode
,
2413 _In_ PBL_DISPLAY_MODE List
,
2418 ConsoleFirmwareTextClear (
2419 _In_ PBL_TEXT_CONSOLE Console
,
2420 _In_ BOOLEAN LineOnly
2424 ConsoleFirmwareTextClose (
2425 _In_ PBL_TEXT_CONSOLE TextConsole
2429 ConsoleFirmwareTextOpen (
2430 _In_ PBL_TEXT_CONSOLE TextConsole
2434 ConsoleFirmwareTextSetState (
2435 _In_ PBL_TEXT_CONSOLE TextConsole
,
2437 _In_ PBL_DISPLAY_STATE State
2441 ConsoleGraphicalConstruct (
2442 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2446 ConsoleCreateRemoteConsole (
2447 _In_ PBL_TEXT_CONSOLE
* TextConsole
2451 ConsoleEfiGraphicalOpenProtocol (
2452 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2453 _In_ BL_GRAPHICS_CONSOLE_TYPE Type
2457 ConsoleFirmwareGraphicalClose (
2458 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2462 ConsoleFirmwareGraphicalDisable (
2463 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2467 ConsoleFirmwareGraphicalClear (
2468 _In_ PBL_GRAPHICS_CONSOLE Console
,
2473 ConsoleFirmwareGraphicalEnable (
2474 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2479 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2483 ConsoleEfiUgaClose (
2484 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2488 ConsoleEfiGopClose (
2489 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2494 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2498 ConsoleEfiGopEnable (
2499 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2503 ConsoleEfiUgaSetResolution (
2504 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2505 _In_ PBL_DISPLAY_MODE DisplayMode
,
2506 _In_ ULONG DisplayModeCount
2510 ConsoleCreateLocalInputConsole (
2515 ConsoleInputLocalEraseBuffer (
2516 _In_ PBL_INPUT_CONSOLE Console
,
2517 _In_opt_ PULONG ValueToFill
2521 ConsolepClearBuffer (
2522 _In_ PUCHAR FrameBuffer
,
2524 _In_ PUCHAR FillColor
,
2526 _In_ ULONG ScanlineWidth
,
2527 _In_ ULONG PixelDepth
2531 ConsolepConvertColorToPixel (
2532 _In_ BL_COLOR Color
,
2536 extern ULONG MmDescriptorCallTreeCount
;
2537 extern ULONG BlpApplicationFlags
;
2538 extern BL_LIBRARY_PARAMETERS BlpLibraryParameters
;
2539 extern BL_TRANSLATION_TYPE MmTranslationType
;
2540 extern PBL_ARCH_CONTEXT CurrentExecutionContext
;
2541 extern PBL_DEVICE_DESCRIPTOR BlpBootDevice
;
2542 extern BL_LOADED_APPLICATION_ENTRY BlpApplicationEntry
;
2543 extern EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*EfiConOut
;
2544 extern EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL
*EfiConInEx
;
2545 extern EFI_GUID EfiGraphicsOutputProtocol
;
2546 extern EFI_GUID EfiUgaDrawProtocol
;
2547 extern EFI_GUID EfiLoadedImageProtocol
;
2548 extern EFI_GUID EfiDevicePathProtocol
;
2549 extern EFI_GUID EfiBlockIoProtocol
;
2550 extern EFI_GUID EfiSimpleTextInputExProtocol
;
2551 extern EFI_GUID EfiRootAcpiTableGuid
;
2552 extern EFI_GUID EfiRootAcpiTable10Guid
;
2553 extern EFI_GUID EfiGlobalVariable
;
2554 extern ULONG ConsoleGraphicalResolutionListFlags
;
2555 extern BL_DISPLAY_MODE ConsoleGraphicalResolutionList
[];
2556 extern BL_DISPLAY_MODE ConsoleTextResolutionList
[];
2557 extern ULONG ConsoleGraphicalResolutionListSize
;
2558 extern PVOID DspRemoteInputConsole
;
2559 extern PVOID DspLocalInputConsole
;
2560 extern WCHAR BlScratchBuffer
[8192];
2561 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedAllocated
;
2562 extern ULONGLONG BlpTimePerformanceFrequency
;
2563 extern LIST_ENTRY RegisteredFileSystems
;