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_REQUEST_DEFAULT_TYPE 1
97 #define BL_MM_REQUEST_TOP_DOWN_TYPE 2
99 #define BL_MM_REMOVE_VIRTUAL_REGION_FLAG 0x80000000
101 #define BL_LIBRARY_FLAG_NO_DISPLAY 0x01
102 #define BL_LIBRARY_FLAG_REINITIALIZE 0x02
103 #define BL_LIBRARY_FLAG_REINITIALIZE_ALL 0x04
104 #define BL_LIBRARY_FLAG_ZERO_HEAP_ALLOCATIONS_ON_FREE 0x10
105 #define BL_LIBRARY_FLAG_INITIALIZATION_COMPLETED 0x20
106 #define BL_LIBRARY_FLAG_NO_GRAPHICS_CONSOLE 0x800
108 #define BL_DISPLAY_GRAPHICS_FORCED_VIDEO_MODE_FLAG 0x01
109 #define BL_DISPLAY_GRAPHICS_FORCED_HIGH_RES_MODE_FLAG 0x02
111 #define BL_HT_VALUE_IS_INLINE 0x01
113 #define BL_FS_REGISTER_AT_HEAD_FLAG 1
115 #define BL_BLOCK_DEVICE_REMOVABLE_FLAG 0x01
116 #define BL_BLOCK_DEVICE_PRESENT_FLAG 0x02
117 #define BL_BLOCK_DEVICE_VIRTUAL_FLAG 0x04
119 #define BL_MEMORY_CLASS_SHIFT 28
121 #define BL_FILE_READ_ACCESS 0x01
122 #define BL_FILE_WRITE_ACCESS 0x02
123 #define BL_DIRECTORY_ACCESS 0x04
124 #define BL_UNKNOWN_ACCESS 0x10
126 #define BL_DEVICE_READ_ACCESS 0x01
127 #define BL_DEVICE_WRITE_ACCESS 0x02
129 #define BL_DEVICE_ENTRY_OPENED 0x01
130 #define BL_DEVICE_ENTRY_READ_ACCESS 0x02
131 #define BL_DEVICE_ENTRY_WRITE_ACCESS 0x04
133 #define BL_FILE_ENTRY_OPENED 0x01
134 #define BL_FILE_ENTRY_READ_ACCESS 0x02
135 #define BL_FILE_ENTRY_WRITE_ACCESS 0x04
136 #define BL_FILE_ENTRY_UNKNOWN_ACCESS 0x10
138 #define BL_IMG_VALID_FILE 0x01
139 #define BL_IMG_MEMORY_FILE 0x02
140 #define BL_IMG_REMOTE_FILE 0x04
142 #define BL_LOAD_IMG_VIRTUAL_BUFFER 0x01
143 #define BL_LOAD_IMG_EXISTING_BUFFER 0x04
144 #define BL_LOAD_IMG_UNKNOWN_BUFFER_FLAG 0x08
145 #define BL_LOAD_IMG_COMPUTE_SIGNATURE 0x10
146 #define BL_LOAD_IMG_COMPUTE_HASH 0x40000
148 /* ENUMERATIONS **************************************************************/
150 typedef enum _BL_COLOR
168 } BL_COLOR
, *PBL_COLOR
;
170 typedef enum _BL_MENU_POLICY
172 MenuPolicyLegacy
= 0,
173 MenuPolicyStandard
= 1
176 typedef enum _BL_MEMORY_DESCRIPTOR_TYPE
180 } BL_MEMORY_DESCRIPTOR_TYPE
;
182 typedef enum _BL_TRANSLATION_TYPE
188 } BL_TRANSLATION_TYPE
;
190 typedef enum _BL_ARCH_MODE
199 typedef enum _BL_DEVICE_TYPE
202 LegacyPartitionDevice
= 2,
211 // Local Device Types
213 typedef enum _BL_LOCAL_DEVICE_TYPE
220 VirtualDiskDevice
= 6
221 } BL_LOCAL_DEVICE_TYPE
;
226 typedef enum _BL_PARTITION_TYPE
236 typedef enum _BL_PATH_TYPE
245 typedef enum _BL_MEMORY_CLASS
255 typedef enum _BL_MEMORY_TYPE
260 BlLoaderMemory
= 0xD0000002,
261 BlLoaderDeviceMemory
= 0xD0000004,
262 BlLoaderHeap
= 0xD0000005,
263 BlLoaderPageDirectory
= 0xD0000006,
264 BlLoaderReferencePage
= 0xD0000007,
265 BlLoaderRamDisk
= 0xD0000008,
266 BlLoaderData
= 0xD000000A,
267 BlLoaderRegistry
= 0xD000000B,
268 BlLoaderBlockMemory
= 0xD000000C,
269 BlLoaderSelfMap
= 0xD000000F,
272 // Application Memory
274 BlApplicationReserved
= 0xE0000001,
275 BlApplicationData
= 0xE0000004,
280 BlConventionalMemory
= 0xF0000001,
281 BlUnusableMemory
= 0xF0000002,
282 BlReservedMemory
= 0xF0000003,
283 BlEfiBootMemory
= 0xF0000004,
284 BlEfiRuntimeMemory
= 0xF0000006,
285 BlAcpiReclaimMemory
= 0xF0000008,
286 BlAcpiNvsMemory
= 0xF0000009,
287 BlDeviceIoMemory
= 0xF000000A,
288 BlDevicePortMemory
= 0xF000000B,
289 BlPalMemory
= 0xF000000C,
292 typedef enum _BL_MEMORY_ATTR
295 // Memory Caching Attributes
297 BlMemoryUncached
= 0x00000001,
298 BlMemoryWriteCombined
= 0x00000002,
299 BlMemoryWriteThrough
= 0x00000004,
300 BlMemoryWriteBack
= 0x00000008,
301 BlMemoryUncachedExported
= 0x00000010,
302 BlMemoryValidCacheAttributes
= BlMemoryUncached
| BlMemoryWriteCombined
| BlMemoryWriteThrough
| BlMemoryWriteBack
| BlMemoryUncachedExported
,
303 BlMemoryValidCacheAttributeMask
= 0x000000FF,
306 // Memory Protection Attributes
308 BlMemoryWriteProtected
= 0x00000100,
309 BlMemoryReadProtected
= 0x00000200,
310 BlMemoryExecuteProtected
= 0x00000400,
311 BlMemoryValidProtectionAttributes
= BlMemoryWriteProtected
| BlMemoryReadProtected
| BlMemoryExecuteProtected
,
312 BlMemoryValidProtectionAttributeMask
= 0x0000FF00,
315 // Memory Allocation Attributes
317 BlMemoryUnknown
= 0x00010000,
318 BlMemoryNonFixed
= 0x00020000,
319 BlMemoryFixed
= 0x00040000,
320 BlMemoryReserved
= 0x00080000,
321 BlMemoryValidAllocationAttributes
= BlMemoryNonFixed
| BlMemoryFixed
| BlMemoryReserved
| BlMemoryUnknown
,
322 BlMemoryValidAllocationAttributeMask
= 0x00FF0000,
325 // Memory Type Attributes
327 BlMemoryRuntime
= 0x01000000,
328 BlMemoryCoalesced
= 0x02000000,
329 BlMemoryUpdate
= 0x04000000,
330 BlMemoryNonFirmware
= 0x08000000,
331 BlMemorySpecial
= 0x20000000,
332 BlMemoryFirmware
= 0x80000000,
333 BlMemoryValidTypeAttributes
= BlMemoryRuntime
| BlMemoryCoalesced
| BlMemoryUpdate
| BlMemoryNonFirmware
| BlMemorySpecial
| BlMemoryFirmware
,
334 BlMemoryValidTypeAttributeMask
= 0xFF000000,
337 /* CALLBACKS *****************************************************************/
339 struct _BL_FILE_ENTRY
;
340 struct _BL_FILE_INFORMATION
;
344 _In_
struct _BL_FILE_ENTRY
* Directory
,
345 _In_ PWCHAR FileName
,
347 _Out_
struct _BL_FILE_ENTRY
** FileEntry
353 _In_
struct _BL_FILE_ENTRY
* FileEntry
359 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
362 _Out_opt_ PULONG BytesRead
373 (*PBL_FILE_GET_NEXT
) (
379 (*PBL_FILE_GET_INFO
) (
380 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
381 _Out_
struct _BL_FILE_INFORMATION
* FileInfo
386 (*PBL_FILE_SET_INFO
) (
387 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
388 _In_
struct _BL_FILE_INFORMATION
* FileInfo
393 (*PBL_FS_INIT_CALLBACK
) (
399 (*PBL_FS_DESTROY_CALLBACK
) (
405 (*PBL_FS_MOUNT_CALLBACK
) (
408 _Out_
struct _BL_FILE_ENTRY
** FileEntry
413 (*PBL_FS_PURGE_CALLBACK
) (
419 (*PBL_FILE_DESTROY_CALLBACK
) (
423 struct _BL_TEXT_CONSOLE
;
424 struct _BL_DISPLAY_STATE
;
425 struct _BL_DISPLAY_MODE
;
426 struct _BL_INPUT_CONSOLE
;
427 struct _BL_REMOTE_CONSOLE
;
428 struct _BL_GRAPHICS_CONSOLE
;
431 (*PCONSOLE_DESTRUCT
) (
432 _In_
struct _BL_TEXT_CONSOLE
* Console
437 (*PCONSOLE_REINITIALIZE
) (
438 _In_
struct _BL_TEXT_CONSOLE
* Console
443 (*PCONSOLE_GET_TEXT_STATE
) (
444 _In_
struct _BL_TEXT_CONSOLE
* Console
,
445 _Out_
struct _BL_DISPLAY_STATE
* TextState
450 (*PCONSOLE_SET_TEXT_STATE
) (
451 _In_
struct _BL_TEXT_CONSOLE
* Console
,
453 _In_
struct _BL_DISPLAY_STATE
* TextState
458 (*PCONSOLE_GET_TEXT_RESOLUTION
) (
459 _In_
struct _BL_TEXT_CONSOLE
* Console
,
460 _Out_ PULONG TextResolution
465 (*PCONSOLE_SET_TEXT_RESOLUTION
) (
466 _In_
struct _BL_TEXT_CONSOLE
* Console
,
467 _In_ ULONG NewTextResolution
,
468 _Out_ PULONG OldTextResolution
473 (*PCONSOLE_CLEAR_TEXT
) (
474 _In_
struct _BL_TEXT_CONSOLE
* Console
,
475 _In_ BOOLEAN LineOnly
480 (*PCONSOLE_IS_ENABLED
) (
481 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
486 (*PCONSOLE_GET_GRAPHICAL_RESOLUTION
) (
487 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
488 _Out_
struct _BL_DISPLAY_MODE
* DisplayMode
493 (*PCONSOLE_SET_GRAPHICAL_RESOLUTION
) (
494 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
495 _In_
struct _BL_DISPLAY_MODE DisplayMode
501 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
507 (*PCONSOLE_WRITE_TEXT
) (
508 _In_
struct _BL_TEXT_CONSOLE
* Console
,
515 (*PBL_TBL_LOOKUP_ROUTINE
) (
517 _In_ PVOID Argument1
,
518 _In_ PVOID Argument2
,
519 _In_ PVOID Argument3
,
525 (*PBL_TBL_MAP_ROUTINE
) (
527 _In_ ULONG EntryIndex
532 (*PBL_TBL_SET_ROUTINE
) (
538 (*PBL_IO_DESTROY_ROUTINE
) (
542 struct _BL_HASH_ENTRY
;
545 (*PBL_HASH_TABLE_COMPARE_FUNCTION
) (
546 _In_
struct _BL_HASH_ENTRY
* Entry1
,
547 _In_
struct _BL_HASH_ENTRY
* Entry2
552 (*PBL_HASH_TABLE_HASH_FUNCTION
) (
553 _In_
struct _BL_HASH_ENTRY
* Entry
,
557 struct _BL_DEVICE_ENTRY
;
558 struct _BL_DEVICE_DESCRIPTOR
;
559 struct _BL_DEVICE_INFORMATION
;
563 (*PBL_DEVICE_ENUMERATE_DEVICE_CLASS
) (
570 _In_
struct _BL_DEVICE_DESCRIPTOR
* Device
,
571 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
576 (*PBL_DEVICE_CLOSE
) (
577 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
583 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
586 _Out_ PULONG BytesRead
591 (*PBL_DEVICE_WRITE
) (
597 (*PBL_DEVICE_GET_INFORMATION
) (
598 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
599 _Out_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
604 (*PBL_DEVICE_SET_INFORMATION
) (
605 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
606 _In_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
611 (*PBL_DEVICE_RESET
) (
617 (*PBL_DEVICE_FLUSH
) (
623 (*PBL_DEVICE_CREATE
) (
628 /* DATA STRUCTURES ***********************************************************/
630 typedef struct _BL_LIBRARY_PARAMETERS
633 ULONG TranslationType
;
634 ULONG MinimumAllocationCount
;
635 ULONG MinimumHeapSize
;
636 ULONG HeapAllocationAttributes
;
637 PWCHAR ApplicationBaseDirectory
;
638 ULONG DescriptorCount
;
639 PWCHAR FontBaseDirectory
;
640 } BL_LIBRARY_PARAMETERS
, *PBL_LIBRARY_PARAMETERS
;
642 /* This should eventually go into a more public header */
643 typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK
645 /* This header tells the library what image we're dealing with */
650 ULONG MemoryTranslationType
;
652 /* Where is the image located */
656 /* Offset to BL_MEMORY_DATA */
657 ULONG MemoryDataOffset
;
659 /* Offset to BL_APPLICATION_ENTRY */
660 ULONG AppEntryOffset
;
662 /* Offset to BL_DEVICE_DESCRPIPTOR */
663 ULONG BootDeviceOffset
;
665 /* Offset to BL_FIRMWARE_PARAMETERS */
666 ULONG FirmwareParametersOffset
;
668 /* Offset to BL_RETURN_ARGUMENTS */
669 ULONG ReturnArgumentsOffset
;
670 } BOOT_APPLICATION_PARAMETER_BLOCK
, *PBOOT_APPLICATION_PARAMETER_BLOCK
;
672 typedef struct _BL_MEMORY_DATA
676 ULONG DescriptorCount
;
677 ULONG DescriptorSize
;
678 ULONG DescriptorOffset
;
679 } BL_MEMORY_DATA
, *PBL_MEMORY_DATA
;
681 typedef struct _BL_FIRMWARE_DESCRIPTOR
685 EFI_HANDLE ImageHandle
;
686 EFI_SYSTEM_TABLE
*SystemTable
;
687 } BL_FIRMWARE_DESCRIPTOR
, *PBL_FIRMWARE_DESCRIPTOR
;
689 typedef struct _BL_RETURN_ARGUMENTS
696 } BL_RETURN_ARGUMENTS
, *PBL_RETURN_ARGUMENTS
;
698 typedef struct _BL_MEMORY_DESCRIPTOR
700 LIST_ENTRY ListEntry
;
706 ULONGLONG VirtualPage
;
710 ULONGLONG BaseAddress
;
711 ULONGLONG VirtualAddress
;
717 } BL_MEMORY_DESCRIPTOR
, *PBL_MEMORY_DESCRIPTOR
;
719 typedef struct _BL_BCD_OPTION
725 ULONG NextEntryOffset
;
727 } BL_BCD_OPTION
, *PBL_BCD_OPTION
;
729 typedef struct _BL_APPLICATION_ENTRY
735 BL_BCD_OPTION BcdData
;
736 } BL_APPLICATION_ENTRY
, *PBL_APPLICATION_ENTRY
;
738 typedef struct _BL_LOADED_APPLICATION_ENTRY
742 PBL_BCD_OPTION BcdData
;
743 } BL_LOADED_APPLICATION_ENTRY
, *PBL_LOADED_APPLICATION_ENTRY
;
745 typedef struct _BL_MENU_STATUS
752 ULONG AdvancedOptions
: 1;
753 ULONG BootOptions
: 1;
762 } BL_MENU_STATUS
, *PL_MENU_STATUS
;
764 typedef enum _BL_BOOT_ERROR_STATUS
774 } BL_BOOT_ERROR_STATUS
;
776 typedef struct _BL_HARDDISK_DEVICE
783 ULONG PartitionSignature
;
788 GUID PartitionSignature
;
796 } BL_HARDDISK_DEVICE
;
798 typedef struct _BL_LOCAL_DEVICE
808 BL_HARDDISK_DEVICE HardDisk
;
812 PHYSICAL_ADDRESS ImageBase
;
813 LARGE_INTEGER ImageSize
;
817 ULONG File
; // unknown for now
819 } BL_LOCAL_DEVICE
, *PBL_LOCAL_DEVICE
;
821 typedef struct _BL_DEVICE_DESCRIPTOR
823 DEVICE_TYPE DeviceType
;
829 BL_LOCAL_DEVICE Local
;
840 ULONG PartitionNumber
;
848 BL_LOCAL_DEVICE Disk
;
851 } BL_DEVICE_DESCRIPTOR
, *PBL_DEVICE_DESCRIPTOR
;
853 typedef struct _BL_FILE_PATH_DESCRIPTOR
858 UCHAR Path
[ANYSIZE_ARRAY
];
859 } BL_FILE_PATH_DESCRIPTOR
, *PBL_FILE_PATH_DESCRIPTOR
;
861 typedef struct _BL_WINDOWS_LOAD_OPTIONS
867 WCHAR LoadOptions
[ANYSIZE_ARRAY
];
868 } BL_WINDOWS_LOAD_OPTIONS
, *PBL_WINDOWS_LOAD_OPTIONS
;
870 typedef struct _BL_ARCH_CONTEXT
873 BL_TRANSLATION_TYPE TranslationType
;
875 } BL_ARCH_CONTEXT
, *PBL_ARCH_CONTEXT
;
877 typedef struct _BL_MEMORY_DESCRIPTOR_LIST
883 } BL_MEMORY_DESCRIPTOR_LIST
, *PBL_MEMORY_DESCRIPTOR_LIST
;
885 typedef struct _BL_ADDRESS_RANGE
889 } BL_ADDRESS_RANGE
, *PBL_ADDRESS_RANGE
;
891 typedef struct _BL_FILE_INFORMATION
897 } BL_FILE_INFORMATION
, *PBL_FILE_INFORMATION
;
899 typedef struct _BL_FILE_CALLBACKS
902 PBL_FILE_CLOSE Close
;
904 PBL_FILE_WRITE Write
;
905 PBL_FILE_GET_NEXT GetNext
;
906 PBL_FILE_GET_INFO GetInfo
;
907 PBL_FILE_SET_INFO SetInfo
;
908 } BL_FILE_CALLBACKS
, *PBL_FILE_CALLBACKS
;
910 typedef struct _BL_FILE_ENTRY
916 ULONG ReferenceCount
;
918 ULONGLONG TotalBytesRead
;
920 BL_FILE_CALLBACKS Callbacks
;
921 PVOID FsSpecificData
;
922 } BL_FILE_ENTRY
, *PBL_FILE_ENTRY
;
924 typedef struct _BL_FILE_SYSTEM_ENTRY
926 LIST_ENTRY ListEntry
;
927 PBL_FS_INIT_CALLBACK InitCallback
;
928 PBL_FS_DESTROY_CALLBACK DestroyCallback
;
929 PBL_FS_MOUNT_CALLBACK MountCallback
;
930 PBL_FS_PURGE_CALLBACK PurgeCallback
;
931 } BL_FILE_SYSTEM_ENTRY
, *PBL_FILE_SYSTEM_ENTRY
;
933 typedef struct _BL_FILE_SYSTEM_REGISTRATION_TABLE
935 PBL_FS_INIT_CALLBACK Init
;
936 PBL_FS_DESTROY_CALLBACK Destroy
;
937 PBL_FS_MOUNT_CALLBACK Mount
;
938 PBL_FS_PURGE_CALLBACK Purge
;
939 } BL_FILE_SYSTEM_REGISTRATION_TABLE
;
941 typedef struct _BL_DISPLAY_STATE
948 } BL_DISPLAY_STATE
, *PBL_DISPLAY_STATE
;
950 typedef struct _BL_DISPLAY_MODE
955 } BL_DISPLAY_MODE
, *PBL_DISPLAY_MODE
;
957 typedef struct _BL_TEXT_CONSOLE_VTABLE
959 PCONSOLE_DESTRUCT Destruct
;
960 PCONSOLE_REINITIALIZE Reinitialize
;
961 PCONSOLE_GET_TEXT_STATE GetTextState
;
962 PCONSOLE_SET_TEXT_STATE SetTextState
;
963 PCONSOLE_GET_TEXT_RESOLUTION GetTextResolution
;
964 PCONSOLE_SET_TEXT_RESOLUTION SetTextResolution
;
965 PCONSOLE_CLEAR_TEXT ClearText
;
966 PCONSOLE_WRITE_TEXT WriteText
;
967 } BL_TEXT_CONSOLE_VTABLE
, *PBL_TEXT_CONSOLE_VTABLE
;
969 typedef struct _BL_GRAPHICS_CONSOLE_VTABLE
971 BL_TEXT_CONSOLE_VTABLE Text
;
972 PCONSOLE_IS_ENABLED IsEnabled
;
973 PCONSOLE_ENABLE Enable
;
974 PVOID GetConsoleResolution
;
975 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetGraphicalResolution
;
976 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetOriginalResolution
;
977 PCONSOLE_SET_GRAPHICAL_RESOLUTION SetOriginalResolution
;
978 /// more for graphics ///
979 } BL_GRAPHICS_CONSOLE_VTABLE
, *PBL_GRAPHICS_CONSOLE_VTABLE
;
981 typedef struct _BL_TEXT_CONSOLE
983 PBL_TEXT_CONSOLE_VTABLE Callbacks
;
984 BL_DISPLAY_STATE State
;
985 BL_DISPLAY_MODE DisplayMode
;
987 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
* Protocol
;
989 EFI_SIMPLE_TEXT_OUTPUT_MODE OldMode
;
990 } BL_TEXT_CONSOLE
, *PBL_TEXT_CONSOLE
;
992 typedef struct _BL_INPUT_CONSOLE_VTABLE
994 PCONSOLE_DESTRUCT Destruct
;
995 PCONSOLE_REINITIALIZE Reinitialize
;
996 //PCONSOLE_IS_KEY_PENDING IsKeyPending;
997 //PCONSOLE_READ_INPUT ReadInput;
998 //PCONSOLE_ERASE_BUFFER EraseBuffer;
999 //PCONSOLE_FILL_BUFFER FillBuffer;
1000 } BL_INPUT_CONSOLE_VTABLE
, *PBL_INPUT_CONSOLE_VTABLE
;
1002 typedef struct _BL_INPUT_CONSOLE
1004 PBL_INPUT_CONSOLE_VTABLE Callbacks
;
1009 } BL_INPUT_CONSOLE
, *PBL_INPUT_CONSOLE
;
1011 typedef enum _BL_GRAPHICS_CONSOLE_TYPE
1015 } BL_GRAPHICS_CONSOLE_TYPE
;
1017 typedef struct _BL_GRAPHICS_CONSOLE
1019 BL_TEXT_CONSOLE TextConsole
;
1020 BL_DISPLAY_MODE DisplayMode
;
1024 BL_DISPLAY_MODE OldDisplayMode
;
1025 ULONG OldPixelDepth
;
1027 BL_GRAPHICS_CONSOLE_TYPE Type
;
1028 EFI_GRAPHICS_OUTPUT_PROTOCOL
* Protocol
;
1030 ULONG FrameBufferSize
;
1031 ULONG PixelsPerScanLine
;
1034 } BL_GRAPHICS_CONSOLE
, *PBL_GRAPHICS_CONSOLE
;
1036 typedef struct _BL_REMOTE_CONSOLE
1038 BL_TEXT_CONSOLE TextConsole
;
1039 } BL_REMOTE_CONSOLE
, *PBL_REMOTE_CONSOLE
;
1041 typedef struct _BL_HASH_TABLE
1043 PLIST_ENTRY HashLinks
;
1045 PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
;
1046 PBL_HASH_TABLE_HASH_FUNCTION HashFunction
;
1047 } BL_HASH_TABLE
, *PBL_HASH_TABLE
;
1049 typedef struct _BL_HASH_ENTRY
1054 } BL_HASH_ENTRY
, *PBL_HASH_ENTRY
;
1056 typedef struct _BL_HASH_VALUE
1060 } BL_HASH_VALUE
, *PBL_HASH_VALUE
;
1062 typedef struct _BL_HASH_NODE
1064 LIST_ENTRY ListEntry
;
1065 BL_HASH_ENTRY Entry
;
1066 BL_HASH_VALUE Value
;
1067 } BL_HASH_NODE
, *PBL_HASH_NODE
;
1069 typedef struct _BL_BLOCK_DEVICE_INFORMATION
1071 BL_LOCAL_DEVICE_TYPE Type
;
1074 BL_PARTITION_TYPE PartitionType
;
1077 ULONGLONG LastBlock
;
1094 } BL_BLOCK_DEVICE_INFORMATION
, *PBL_BLOCK_DEVICE_INFORMATION
;
1096 typedef struct _BL_DEVICE_INFORMATION
1098 BL_DEVICE_TYPE DeviceType
;
1101 BL_BLOCK_DEVICE_INFORMATION BlockDeviceInfo
;
1103 } BL_DEVICE_INFORMATION
, *PBL_DEVICE_INFORMATION
;
1105 typedef struct _BL_BLOCK_DEVICE
1107 BL_BLOCK_DEVICE_INFORMATION
;
1108 ULONGLONG StartOffset
;
1109 EFI_BLOCK_IO
* Protocol
;
1111 } BL_BLOCK_DEVICE
, *PBL_BLOCK_DEVICE
;
1113 typedef struct _BL_PROTOCOL_HANDLE
1117 } BL_PROTOCOL_HANDLE
, *PBL_PROTOCOL_HANDLE
;
1119 typedef struct _BL_DEVICE_CALLBACKS
1121 PBL_DEVICE_ENUMERATE_DEVICE_CLASS EnumerateDeviceClass
;
1122 PBL_DEVICE_OPEN Open
;
1123 PBL_DEVICE_CLOSE Close
;
1124 PBL_DEVICE_READ Read
;
1125 PBL_DEVICE_WRITE Write
;
1126 PBL_DEVICE_GET_INFORMATION GetInformation
;
1127 PBL_DEVICE_SET_INFORMATION SetInformation
;
1128 PBL_DEVICE_RESET Reset
;
1129 PBL_DEVICE_FLUSH Flush
;
1130 PBL_DEVICE_CREATE Create
;
1131 } BL_DEVICE_CALLBACKS
, *PBL_DEVICE_CALLBACKS
;
1133 typedef struct _BL_DEVICE_ENTRY
1138 ULONG ReferenceCount
;
1139 BL_DEVICE_CALLBACKS Callbacks
;
1140 PVOID DeviceSpecificData
;
1141 PBL_DEVICE_DESCRIPTOR DeviceDescriptor
;
1142 } BL_DEVICE_ENTRY
, *PBL_DEVICE_ENTRY
;
1144 typedef struct _BL_IMG_FILE
1154 } BL_IMG_FILE
, *PBL_IMG_FILE
;
1156 typedef struct _BL_IMAGE_APPLICATION_ENTRY
1158 PBL_APPLICATION_ENTRY AppEntry
;
1161 } BL_IMAGE_APPLICATION_ENTRY
, *PBL_IMAGE_APPLICATION_ENTRY
;
1163 typedef struct _BL_DEFERRED_FONT_FILE
1165 LIST_ENTRY ListEntry
;
1167 PBL_DEVICE_DESCRIPTOR Device
;
1169 } BL_DEFERRED_FONT_FILE
, *PBL_DEFERRED_FONT_FILE
;
1173 typedef struct _BMP_HEADER
1179 } BMP_HEADER
, *PBMP_HEADER
;
1181 typedef struct _DIB_HEADER
1190 ULONG XPelsPerMeter
;
1191 ULONG YPelsPerMEter
;
1194 } DIB_HEADER
, *PDIB_HEADER
;
1196 typedef struct _BITMAP
1198 BMP_HEADER BmpHeader
;
1199 DIB_HEADER DibHeader
;
1203 typedef struct _COORD
1209 typedef struct _BL_PD_DATA_BLOB
1214 } BL_PD_DATA_BLOB
, *PBL_PD_DATA_BLOB
;
1216 /* INLINE ROUTINES ***********************************************************/
1220 BlSetupDefaultParameters (
1221 _Out_ PBL_LIBRARY_PARAMETERS LibraryParameters
1224 BL_LIBRARY_PARAMETERS DefaultParameters
=
1236 /* Copy the defaults */
1237 RtlCopyMemory(LibraryParameters
, &DefaultParameters
, sizeof(*LibraryParameters
));
1242 MmMdInitializeListHead (
1243 _In_ PBL_MEMORY_DESCRIPTOR_LIST List
1246 /* Initialize the list */
1247 InitializeListHead(&List
->ListHead
);
1248 List
->First
= &List
->ListHead
;
1252 /* INITIALIZATION ROUTINES ***************************************************/
1255 BlInitializeLibrary(
1256 _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters
,
1257 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1268 _In_ PBL_FIRMWARE_DESCRIPTOR FirmwareParameters
1273 _In_ PBL_MEMORY_DATA MemoryData
,
1274 _In_ BL_TRANSLATION_TYPE TranslationType
,
1275 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1285 _In_ PBL_MEMORY_DATA MemoryData
,
1286 _In_ ULONG MinimumPages
1292 _In_ PBL_MEMORY_DATA MemoryData
,
1293 _In_ BL_TRANSLATION_TYPE TranslationType
,
1294 _In_ BL_TRANSLATION_TYPE LibraryTranslationType
1299 _In_ ULONG HeapSize
,
1300 _In_ ULONG HeapAttributes
1306 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1310 BlpDeviceInitialize (
1325 BlpDisplayInitialize (
1339 /* FIRMWARE ROUTINES *********************************************************/
1348 BlFwEnumerateDevice (
1349 _In_ PBL_DEVICE_DESCRIPTOR Device
1356 _Inout_ EFI_PHYSICAL_ADDRESS
* Memory
1361 _In_ ULONG StallTime
1375 EfiConOutOutputString (
1376 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1381 EfiConOutQueryMode (
1382 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1384 _In_ UINTN
* Columns
,
1390 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1395 EfiConOutReadCurrentMode (
1396 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1397 _Out_ EFI_SIMPLE_TEXT_OUTPUT_MODE
* Mode
1401 EfiConOutSetAttribute (
1402 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1403 _In_ ULONG Attribute
1407 EfiConOutSetCursorPosition (
1408 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1414 EfiConOutEnableCursor (
1415 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1416 _In_ BOOLEAN Visible
1420 EfiLocateHandleBuffer (
1421 _In_ EFI_LOCATE_SEARCH_TYPE SearchType
,
1422 _In_ EFI_GUID
*Protocol
,
1423 _Inout_ PULONG HandleCount
,
1424 _Inout_ EFI_HANDLE
** Buffer
1429 _In_ EFI_HANDLE Handle
,
1430 _In_ EFI_GUID
*Protocol
,
1431 _Out_ PVOID
* Interface
1436 _In_ EFI_HANDLE Handle
,
1437 _In_ EFI_GUID
*Protocol
1441 EfiGopGetCurrentMode (
1442 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1444 _Out_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
*Information
1449 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1454 EfiGopGetFrameBuffer (
1455 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1456 _Out_ PHYSICAL_ADDRESS
* FrameBuffer
,
1457 _Out_ UINTN
*FrameBufferSize
1462 _In_ EFI_RESET_TYPE ResetType
1467 _In_ EFI_DEVICE_PATH
*DevicePath
1471 EfiIsDevicePathParent (
1472 _In_ EFI_DEVICE_PATH
*DevicePath1
,
1473 _In_ EFI_DEVICE_PATH
*DevicePath2
1478 _Out_ PPHYSICAL_ADDRESS FoundRsdt
1481 /* PLATFORM TIMER ROUTINES ***************************************************/
1484 BlpTimeCalibratePerformanceCounter (
1489 BlTimeQueryPerformanceCounter (
1490 _Out_opt_ PLARGE_INTEGER Frequency
1493 /* RESOURCE LOCALE INTERNATIONALIZATION ROUTINES *****************************/
1496 BlpDisplayRegisterLocale (
1500 /* FONT ROUTINES *************************************************************/
1503 BfiFreeDeferredFontFile (
1504 _In_ PBL_DEFERRED_FONT_FILE DeferredFontFile
1509 _In_ PBL_DEVICE_DESCRIPTOR Device
,
1510 _In_ PWCHAR FontPath
1514 BfLoadDeferredFontFiles (
1520 _In_ PBL_GRAPHICS_CONSOLE Console
1524 BfClearToEndOfLine (
1525 _In_ PBL_GRAPHICS_CONSOLE Console
1528 /* FILESYSTEM ROUTINES *******************************************************/
1537 _In_ ULONG DeviceId
,
1539 _Out_ PBL_FILE_ENTRY
* FileEntry
1549 _In_ ULONG DeviceId
,
1551 _Out_ PBL_FILE_ENTRY
* FileEntry
1554 /* DEBUG ROUTINES ************************************************************/
1558 BlBdDebuggerEnabled (
1563 BlBdPullRemoteFile (
1564 _In_ PWCHAR FilePath
,
1565 _Out_ PVOID BaseAddress
,
1566 _Out_ PULONGLONG FileSize
1577 _In_ ULONG ErrorCode
,
1578 _In_ ULONG Parameter1
,
1579 _In_ ULONG_PTR Parameter2
,
1580 _In_ ULONG_PTR Parameter3
,
1581 _In_ ULONG_PTR Parameter4
1584 /* UTILITY ROUTINES **********************************************************/
1587 BlUtlUpdateProgress (
1588 _In_ ULONG Percentage
,
1589 _Out_opt_ PBOOLEAN Completed
1594 _Out_ PVOID
* TableAddress
,
1595 _In_ ULONG Signature
1604 BlUtlRegisterProgressRoutine (
1609 BlGetApplicationBaseAndSize (
1610 _Out_ PVOID
* ImageBase
,
1611 _Out_ PULONG ImageSize
1615 BlDestroyBootEntry (
1616 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
1621 _In_
const GUID
* DataGuid
,
1623 _Inout_ PBL_PD_DATA_BLOB DataBlob
1626 /* FIRMWARE UTILITY ROUTINES *************************************************/
1629 EfiGetEfiStatusCode(
1630 _In_ NTSTATUS Status
1634 EfiGetNtStatusCode (
1635 _In_ EFI_STATUS EfiStatus
1644 BlGetApplicationIdentifier (
1649 BlpSecureBootEFIIsEnabled (
1654 BlSecureBootIsEnabled (
1655 _Out_ PBOOLEAN SecureBootEnabled
1659 BlSecureBootCheckForFactoryReset (
1663 /* RESOURCE ROUTINES *********************************************************/
1666 BlResourceFindMessage (
1671 BlResourceFindHtml (
1676 BlpResourceInitialize (
1680 /* TABLE ROUTINES ************************************************************/
1686 _In_ PBL_TBL_MAP_ROUTINE MapCallback
1693 _Out_ PULONG EntryIndex
,
1694 _In_ PBL_TBL_LOOKUP_ROUTINE Callback
,
1695 _In_ PVOID Argument1
,
1696 _In_ PVOID Argument2
,
1697 _In_ PVOID Argument3
,
1698 _In_ PVOID Argument4
1703 _Inout_ PVOID
** Table
,
1704 _Inout_ PULONG Count
,
1706 _Out_ PULONG EntryIndex
,
1707 _In_ PBL_TBL_SET_ROUTINE Callback
1711 TblDoNotPurgeEntry (
1715 /* HASH TABLE ROUTINES *******************************************************/
1720 _In_ PBL_HASH_ENTRY Entry
,
1728 _In_ PBL_HASH_ENTRY Entry
,
1729 _Out_ PBL_HASH_VALUE
*Value
1735 _In_ PBL_HASH_TABLE_HASH_FUNCTION HashFunction
,
1736 _In_ PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
,
1740 /* BCD OPTION ROUTINES *******************************************************/
1744 _In_ PBL_BCD_OPTION List
,
1749 BlGetBootOptionListSize (
1750 _In_ PBL_BCD_OPTION BcdOption
1754 BlGetBootOptionSize (
1755 _In_ PBL_BCD_OPTION BcdOption
1759 BlGetBootOptionString (
1760 _In_ PBL_BCD_OPTION List
,
1766 BlGetBootOptionInteger (
1767 _In_ PBL_BCD_OPTION List
,
1769 _Out_ PULONGLONG Value
1773 BlGetBootOptionBoolean (
1774 _In_ PBL_BCD_OPTION List
,
1776 _Out_ PBOOLEAN Value
1780 BlpGetBootOptionIntegerList (
1781 _In_ PBL_BCD_OPTION List
,
1783 _Out_ PULONGLONG
* Value
,
1784 _Out_ PULONGLONG Count
,
1789 BlGetBootOptionDevice (
1790 _In_ PBL_BCD_OPTION List
,
1792 _Out_ PBL_DEVICE_DESCRIPTOR
* Value
,
1793 _In_opt_ PBL_BCD_OPTION
* ExtraOptions
1797 BlGetBootOptionGuid (
1798 _In_ PBL_BCD_OPTION List
,
1804 BlGetBootOptionGuidList (
1805 _In_ PBL_BCD_OPTION List
,
1813 _In_ PBL_BCD_OPTION OptionList
,
1814 _Out_ PBL_BCD_OPTION
*CopiedOptions
1818 BlAppendBootOptionBoolean (
1819 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1824 BlAppendBootOptionInteger (
1825 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1826 _In_ ULONG OptionId
,
1827 _In_ ULONGLONG Value
1831 BlAppendBootOptionString (
1832 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1833 _In_ PWCHAR OptionString
1837 BlAppendBootOptions (
1838 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1839 _In_ PBL_BCD_OPTION Options
1843 BlRemoveBootOption (
1844 _In_ PBL_BCD_OPTION List
,
1849 BlReplaceBootOptions (
1850 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1851 _In_ PBL_BCD_OPTION NewOptions
1854 /* BOOT REGISTRY ROUTINES ****************************************************/
1858 _In_ HANDLE KeyHandle
1863 _In_ HANDLE ParentHandle
,
1864 _In_ PWCHAR KeyName
,
1865 _Out_ PHANDLE Handle
1870 _In_ PBL_FILE_PATH_DESCRIPTOR FilePath
,
1871 _Out_ PHANDLE HiveHandle
1875 BiGetRegistryValue (
1876 _In_ HANDLE KeyHandle
,
1877 _In_ PWCHAR ValueName
,
1879 _Out_ PVOID
* Buffer
,
1880 _Out_ PULONG ValueLength
1884 BiEnumerateSubKeys (
1885 _In_ HANDLE KeyHandle
,
1886 _Out_ PWCHAR
** SubKeyList
,
1887 _Out_ PULONG SubKeyCount
1892 _In_ HANDLE KeyHandle
1897 _In_ HANDLE KeyHandle
1900 /* CONTEXT ROUTINES **********************************************************/
1903 BlpArchSwitchContext (
1904 _In_ BL_ARCH_MODE NewMode
1907 /* MEMORY DESCRIPTOR ROUTINES ************************************************/
1911 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
1914 PBL_MEMORY_DESCRIPTOR
1915 MmMdInitByteGranularDescriptor (
1917 _In_ BL_MEMORY_TYPE Type
,
1918 _In_ ULONGLONG BasePage
,
1919 _In_ ULONGLONG VirtualPage
,
1920 _In_ ULONGLONG PageCount
1924 MmMdFreeGlobalDescriptors (
1929 MmMdAddDescriptorToList (
1930 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1931 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
,
1936 MmMdRemoveDescriptorFromList (
1937 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1938 _In_ PBL_MEMORY_DESCRIPTOR Entry
1942 MmMdFindSatisfyingRegion (
1943 _In_ PBL_MEMORY_DESCRIPTOR Descriptor
,
1944 _Out_ PBL_MEMORY_DESCRIPTOR NewDescriptor
,
1945 _In_ ULONGLONG Pages
,
1946 _In_ PBL_ADDRESS_RANGE BaseRange
,
1947 _In_ PBL_ADDRESS_RANGE VirtualRange
,
1948 _In_ BOOLEAN TopDown
,
1949 _In_ BL_MEMORY_TYPE MemoryType
,
1951 _In_ ULONG Alignment
1955 MmMdRemoveRegionFromMdlEx (
1956 __in PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1958 __in ULONGLONG BasePage
,
1959 __in ULONGLONG PageCount
,
1960 __in PBL_MEMORY_DESCRIPTOR_LIST NewMdList
1964 MmMdFreeDescriptor (
1965 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
1968 /* PAGE ALLOCATOR ROUTINES ***************************************************/
1971 BlMmAllocatePhysicalPages(
1972 _Inout_ PPHYSICAL_ADDRESS Address
,
1973 _In_ BL_MEMORY_TYPE MemoryType
,
1974 _In_ ULONGLONG PageCount
,
1975 _In_ ULONG Attributes
,
1976 _In_ ULONG Alignment
1980 MmPapAllocatePhysicalPagesInRange (
1981 _Inout_ PPHYSICAL_ADDRESS BaseAddress
,
1982 _In_ BL_MEMORY_TYPE MemoryType
,
1983 _In_ ULONGLONG Pages
,
1984 _In_ ULONG Attributes
,
1985 _In_ ULONG Alignment
,
1986 _In_ PBL_MEMORY_DESCRIPTOR_LIST NewList
,
1987 _In_opt_ PBL_ADDRESS_RANGE Range
,
1988 _In_ ULONG RangeType
1992 BlMmFreePhysicalPages (
1993 _In_ PHYSICAL_ADDRESS Address
1997 MmPapAllocatePagesInRange (
1998 _Inout_ PVOID
* PhysicalAddress
,
1999 _In_ BL_MEMORY_TYPE MemoryType
,
2000 _In_ ULONGLONG Pages
,
2001 _In_ ULONG Attributes
,
2002 _In_ ULONG Alignment
,
2003 _In_opt_ PBL_ADDRESS_RANGE Range
,
2009 _Out_ PBL_MEMORY_DESCRIPTOR_LIST MemoryMap
,
2014 BlpMmInitializeConstraints (
2019 BlMmRemoveBadMemory (
2023 /* VIRTUAL MEMORY ROUTINES ***************************************************/
2026 BlMmMapPhysicalAddressEx (
2027 _In_ PVOID
* VirtualAddress
,
2028 _In_ ULONG Attributes
,
2029 _In_ ULONGLONG Size
,
2030 _In_ PHYSICAL_ADDRESS PhysicalAddress
2034 BlMmUnmapVirtualAddressEx (
2035 _In_ PVOID VirtualAddress
,
2039 /* BLOCK ALLOCATOR ROUTINES **************************************************/
2042 BlpMmCreateBlockAllocator (
2046 /* HEAP ALLOCATOR ROUTINES ***************************************************/
2058 /* DISPLAY ROUTINES **********************************************************/
2061 BlDisplayGetTextCellResolution (
2062 _Out_ PULONG TextWidth
,
2063 _Out_ PULONG TextHeight
2067 BlDisplaySetScreenResolution (
2072 BlDisplayGetScreenResolution (
2078 BlDisplayInvalidateOemBitmap (
2083 BlDisplayGetOemBitmap (
2084 _Out_ PCOORD Offset
,
2085 _Out_opt_ PULONG Flags
2089 BlDisplayValidOemBitmap (
2094 BlDisplayClearScreen (
2099 BlDisplaySetCursorType (
2103 /* I/O ROUTINES **************************************************************/
2106 BlpIoRegisterDestroyRoutine (
2107 _In_ PBL_IO_DESTROY_ROUTINE DestroyRoutine
2117 _In_ PBL_DEVICE_DESCRIPTOR Device
,
2120 _Out_ PULONG DeviceId
2124 BlDeviceGetInformation (
2125 _In_ ULONG DeviceId
,
2126 _Out_ PBL_DEVICE_INFORMATION DeviceInformation
2130 BlDeviceSetInformation (
2131 _In_ ULONG DeviceId
,
2132 _In_ PBL_DEVICE_INFORMATION DeviceInformation
2136 BlDeviceReadAtOffset (
2137 _In_ ULONG DeviceId
,
2139 _In_ ULONGLONG Offset
,
2141 _Out_ PULONG BytesRead
2144 /* IMAGE ROUTINES ************************************************************/
2147 BlImgLoadImageWithProgress2 (
2148 _In_ ULONG DeviceId
,
2149 _In_ BL_MEMORY_TYPE MemoryType
,
2150 _In_ PWCHAR FileName
,
2151 _Inout_ PVOID
* MappedBase
,
2152 _Inout_ PULONG MappedSize
,
2153 _In_ ULONG ImageFlags
,
2154 _In_ BOOLEAN ShowProgress
,
2155 _Out_opt_ PUCHAR
* HashBuffer
,
2156 _Out_opt_ PULONG HashSize
2159 PIMAGE_SECTION_HEADER
2161 _In_ PVOID ImageBase
,
2162 _In_ ULONG ImageSize
2166 BlImgLoadBootApplication (
2167 _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry
,
2168 _Out_ PULONG AppHandle
2172 BlImgStartBootApplication (
2173 _In_ ULONG AppHandle
,
2174 _Inout_ PBL_RETURN_ARGUMENTS ReturnArguments
2178 BlImgUnloadBootApplication (
2179 _In_ ULONG AppHandle
2183 BlImgQueryCodeIntegrityBootOptions (
2184 _In_ PBL_LOADED_APPLICATION_ENTRY ApplicationEntry
,
2185 _Out_ PBOOLEAN IntegrityChecksDisabled
,
2186 _Out_ PBOOLEAN TestSigning
2189 /* FILE I/O ROUTINES *********************************************************/
2197 BlFileReadAtOffsetEx (
2200 _In_ ULONGLONG ByteOffset
,
2202 _Out_ PULONG BytesReturned
,
2207 BlFileGetInformation (
2209 _In_ PBL_FILE_INFORMATION FileInfo
2214 _In_ ULONG DeviceId
,
2215 _In_ PWCHAR FileName
,
2220 /* BLOCK I/O ROUTINES *******************************************************/
2223 BlockIoEfiCompareDevice (
2224 _In_ PBL_DEVICE_DESCRIPTOR Device
,
2225 _In_ EFI_HANDLE Handle
2228 /* INPUT CONSOLE ROUTINES ****************************************************/
2231 ConsoleInputLocalDestruct (
2232 _In_
struct _BL_INPUT_CONSOLE
* Console
2236 ConsoleInputBaseReinitialize (
2237 _In_
struct _BL_INPUT_CONSOLE
* Console
2241 ConsoleCreateLocalInputCnsole (
2245 /* TEXT CONSOLE ROUTINES *****************************************************/
2248 ConsoleGraphicalDestruct (
2249 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2253 ConsoleGraphicalClearText (
2254 _In_ PBL_GRAPHICS_CONSOLE Console
,
2255 _In_ BOOLEAN LineOnly
2259 ConsoleGraphicalClearPixels (
2260 _In_ PBL_GRAPHICS_CONSOLE Console
,
2265 ConsoleGraphicalReinitialize (
2266 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2270 ConsoleGraphicalSetTextState (
2271 _In_ PBL_GRAPHICS_CONSOLE Console
,
2273 _In_ PBL_DISPLAY_STATE TextState
2277 ConsoleGraphicalIsEnabled (
2278 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2282 ConsoleGraphicalGetGraphicalResolution (
2283 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2284 _In_ PBL_DISPLAY_MODE DisplayMode
2288 ConsoleGraphicalGetOriginalResolution (
2289 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2290 _In_ PBL_DISPLAY_MODE DisplayMode
2294 ConsoleGraphicalEnable (
2295 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2300 ConsoleTextLocalDestruct (
2301 _In_
struct _BL_TEXT_CONSOLE
* Console
2305 ConsoleTextLocalReinitialize (
2306 _In_
struct _BL_TEXT_CONSOLE
* Console
2310 ConsoleTextBaseGetTextState (
2311 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2312 _Out_ PBL_DISPLAY_STATE TextState
2316 ConsoleTextLocalSetTextState (
2317 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2319 _In_ PBL_DISPLAY_STATE TextState
2323 ConsoleTextBaseGetTextResolution (
2324 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2325 _Out_ PULONG TextResolution
2329 ConsoleTextLocalSetTextResolution (
2330 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2331 _In_ ULONG NewTextResolution
,
2332 _Out_ PULONG OldTextResolution
2336 ConsoleTextLocalClearText (
2337 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2338 _In_ BOOLEAN LineOnly
2342 ConsoleTextLocalWriteText (
2343 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2345 _In_ ULONG Attribute
2349 ConsoleTextLocalConstruct (
2350 _In_ PBL_TEXT_CONSOLE TextConsole
,
2351 _In_ BOOLEAN Activate
2355 ConsolepFindResolution (
2356 _In_ PBL_DISPLAY_MODE Mode
,
2357 _In_ PBL_DISPLAY_MODE List
,
2362 ConsoleFirmwareTextClear (
2363 _In_ PBL_TEXT_CONSOLE Console
,
2364 _In_ BOOLEAN LineOnly
2368 ConsoleFirmwareTextClose (
2369 _In_ PBL_TEXT_CONSOLE TextConsole
2373 ConsoleFirmwareTextOpen (
2374 _In_ PBL_TEXT_CONSOLE TextConsole
2378 ConsoleFirmwareTextSetState (
2379 _In_ PBL_TEXT_CONSOLE TextConsole
,
2381 _In_ PBL_DISPLAY_STATE State
2385 ConsoleGraphicalConstruct (
2386 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2390 ConsoleCreateRemoteConsole (
2391 _In_ PBL_TEXT_CONSOLE
* TextConsole
2395 ConsoleEfiGraphicalOpenProtocol (
2396 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2397 _In_ BL_GRAPHICS_CONSOLE_TYPE Type
2401 ConsoleFirmwareGraphicalClose (
2402 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2406 ConsoleFirmwareGraphicalDisable (
2407 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2411 ConsoleFirmwareGraphicalClear (
2412 _In_ PBL_GRAPHICS_CONSOLE Console
,
2417 ConsoleFirmwareGraphicalEnable (
2418 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2423 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2427 ConsoleEfiUgaClose (
2428 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2432 ConsoleEfiGopClose (
2433 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2438 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2442 ConsoleEfiGopEnable (
2443 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2447 ConsoleEfiUgaSetResolution (
2448 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2449 _In_ PBL_DISPLAY_MODE DisplayMode
,
2450 _In_ ULONG DisplayModeCount
2454 ConsoleCreateLocalInputConsole (
2459 ConsoleInputLocalEraseBuffer (
2460 _In_ PBL_INPUT_CONSOLE Console
,
2461 _In_opt_ PULONG ValueToFill
2465 ConsolepClearBuffer (
2466 _In_ PUCHAR FrameBuffer
,
2468 _In_ PUCHAR FillColor
,
2470 _In_ ULONG ScanlineWidth
,
2471 _In_ ULONG PixelDepth
2475 ConsolepConvertColorToPixel (
2476 _In_ BL_COLOR Color
,
2480 extern ULONG MmDescriptorCallTreeCount
;
2481 extern ULONG BlpApplicationFlags
;
2482 extern BL_LIBRARY_PARAMETERS BlpLibraryParameters
;
2483 extern BL_TRANSLATION_TYPE MmTranslationType
;
2484 extern PBL_ARCH_CONTEXT CurrentExecutionContext
;
2485 extern PBL_DEVICE_DESCRIPTOR BlpBootDevice
;
2486 extern BL_LOADED_APPLICATION_ENTRY BlpApplicationEntry
;
2487 extern EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*EfiConOut
;
2488 extern EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL
*EfiConInEx
;
2489 extern EFI_GUID EfiGraphicsOutputProtocol
;
2490 extern EFI_GUID EfiUgaDrawProtocol
;
2491 extern EFI_GUID EfiLoadedImageProtocol
;
2492 extern EFI_GUID EfiDevicePathProtocol
;
2493 extern EFI_GUID EfiBlockIoProtocol
;
2494 extern EFI_GUID EfiSimpleTextInputExProtocol
;
2495 extern EFI_GUID EfiRootAcpiTableGuid
;
2496 extern EFI_GUID EfiRootAcpiTable10Guid
;
2497 extern EFI_GUID EfiGlobalVariable
;
2498 extern ULONG ConsoleGraphicalResolutionListFlags
;
2499 extern BL_DISPLAY_MODE ConsoleGraphicalResolutionList
[];
2500 extern BL_DISPLAY_MODE ConsoleTextResolutionList
[];
2501 extern ULONG ConsoleGraphicalResolutionListSize
;
2502 extern PVOID DspRemoteInputConsole
;
2503 extern PVOID DspLocalInputConsole
;
2504 extern WCHAR BlScratchBuffer
[8192];
2505 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedAllocated
;
2506 extern ULONGLONG BlpTimePerformanceFrequency
;
2507 extern LIST_ENTRY RegisteredFileSystems
;