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
137 #define BL_FILE_ENTRY_DIRECTORY 0x10000
139 #define BL_ETFS_FILE_ENTRY_DIRECTORY 0x01
141 #define BL_IMG_VALID_FILE 0x01
142 #define BL_IMG_MEMORY_FILE 0x02
143 #define BL_IMG_REMOTE_FILE 0x04
145 #define BL_LOAD_IMG_VIRTUAL_BUFFER 0x01
146 #define BL_LOAD_IMG_EXISTING_BUFFER 0x04
147 #define BL_LOAD_IMG_UNKNOWN_BUFFER_FLAG 0x08
148 #define BL_LOAD_IMG_COMPUTE_SIGNATURE 0x10
149 #define BL_LOAD_IMG_COMPUTE_HASH 0x40000
151 #define BL_LOAD_PE_IMG_VIRTUAL_BUFFER BL_LOAD_IMG_VIRTUAL_BUFFER
152 #define BL_LOAD_PE_IMG_CHECK_MACHINE 0x02
153 #define BL_LOAD_PE_IMG_EXISTING_BUFFER BL_LOAD_IMG_EXISTING_BUFFER
154 #define BL_LOAD_PE_IMG_COMPUTE_HASH 0x10
155 #define BL_LOAD_PE_IMG_CHECK_SUBSYSTEM 0x80
156 #define BL_LOAD_PE_IMG_SKIP_RELOCATIONS 0x100
157 #define BL_LOAD_PE_IMG_CHECK_FORCED_INTEGRITY 0x200
158 #define BL_LOAD_PE_IMG_IGNORE_CHECKSUM_MISMATCH 0x10000
159 #define BL_LOAD_PE_IMG_VALIDATE_ORIGINAL_FILENAME 0x400000
162 #define BL_UTL_CHECKSUM_COMPLEMENT 0x10000
163 #define BL_UTL_CHECKSUM_ROTATE 0x20000
164 #define BL_UTL_CHECKSUM_NEGATE 0x40000
165 #define BL_UTL_CHECKSUM_UCHAR_BUFFER 0x01
166 #define BL_UTL_CHECKSUM_USHORT_BUFFER 0x02
168 /* ENUMERATIONS **************************************************************/
170 typedef enum _BL_COLOR
188 } BL_COLOR
, *PBL_COLOR
;
190 typedef enum _BL_MENU_POLICY
192 MenuPolicyLegacy
= 0,
193 MenuPolicyStandard
= 1
196 typedef enum _BL_MEMORY_DESCRIPTOR_TYPE
200 } BL_MEMORY_DESCRIPTOR_TYPE
;
202 typedef enum _BL_TRANSLATION_TYPE
208 } BL_TRANSLATION_TYPE
;
210 typedef enum _BL_ARCH_MODE
219 typedef enum _BL_DEVICE_TYPE
222 LegacyPartitionDevice
= 2,
231 // Local Device Types
233 typedef enum _BL_LOCAL_DEVICE_TYPE
240 VirtualDiskDevice
= 6
241 } BL_LOCAL_DEVICE_TYPE
;
246 typedef enum _BL_PARTITION_TYPE
256 typedef enum _BL_PATH_TYPE
265 typedef enum _BL_MEMORY_CLASS
275 typedef enum _BL_MEMORY_TYPE
280 BlLoaderMemory
= 0xD0000002,
281 BlLoaderDeviceMemory
= 0xD0000004,
282 BlLoaderHeap
= 0xD0000005,
283 BlLoaderPageDirectory
= 0xD0000006,
284 BlLoaderReferencePage
= 0xD0000007,
285 BlLoaderRamDisk
= 0xD0000008,
286 BlLoaderArchData
= 0xD0000009,
287 BlLoaderData
= 0xD000000A,
288 BlLoaderRegistry
= 0xD000000B,
289 BlLoaderBlockMemory
= 0xD000000C,
290 BlLoaderSelfMap
= 0xD000000F,
293 // Application Memory
295 BlApplicationReserved
= 0xE0000001,
296 BlApplicationData
= 0xE0000004,
301 BlConventionalMemory
= 0xF0000001,
302 BlUnusableMemory
= 0xF0000002,
303 BlReservedMemory
= 0xF0000003,
304 BlEfiBootMemory
= 0xF0000004,
305 BlEfiRuntimeMemory
= 0xF0000006,
306 BlAcpiReclaimMemory
= 0xF0000008,
307 BlAcpiNvsMemory
= 0xF0000009,
308 BlDeviceIoMemory
= 0xF000000A,
309 BlDevicePortMemory
= 0xF000000B,
310 BlPalMemory
= 0xF000000C,
313 typedef enum _BL_MEMORY_ATTR
316 // Memory Caching Attributes
318 BlMemoryUncached
= 0x00000001,
319 BlMemoryWriteCombined
= 0x00000002,
320 BlMemoryWriteThrough
= 0x00000004,
321 BlMemoryWriteBack
= 0x00000008,
322 BlMemoryUncachedExported
= 0x00000010,
323 BlMemoryValidCacheAttributes
= BlMemoryUncached
| BlMemoryWriteCombined
| BlMemoryWriteThrough
| BlMemoryWriteBack
| BlMemoryUncachedExported
,
324 BlMemoryValidCacheAttributeMask
= 0x000000FF,
327 // Memory Protection Attributes
329 BlMemoryWriteProtected
= 0x00000100,
330 BlMemoryReadProtected
= 0x00000200,
331 BlMemoryExecuteProtected
= 0x00000400,
332 BlMemoryValidProtectionAttributes
= BlMemoryWriteProtected
| BlMemoryReadProtected
| BlMemoryExecuteProtected
,
333 BlMemoryValidProtectionAttributeMask
= 0x0000FF00,
336 // Memory Allocation Attributes
338 BlMemoryUnknown
= 0x00010000,
339 BlMemoryNonFixed
= 0x00020000,
340 BlMemoryFixed
= 0x00040000,
341 BlMemoryReserved
= 0x00080000,
342 BlMemoryValidAllocationAttributes
= BlMemoryNonFixed
| BlMemoryFixed
| BlMemoryReserved
| BlMemoryUnknown
,
343 BlMemoryValidAllocationAttributeMask
= 0x00FF0000,
346 // Memory Type Attributes
348 BlMemoryRuntime
= 0x01000000,
349 BlMemoryCoalesced
= 0x02000000,
350 BlMemoryUpdate
= 0x04000000,
351 BlMemoryNonFirmware
= 0x08000000,
352 BlMemorySpecial
= 0x20000000,
353 BlMemoryFirmware
= 0x80000000,
354 BlMemoryValidTypeAttributes
= BlMemoryRuntime
| BlMemoryCoalesced
| BlMemoryUpdate
| BlMemoryNonFirmware
| BlMemorySpecial
| BlMemoryFirmware
,
355 BlMemoryValidTypeAttributeMask
= 0xFF000000,
358 /* CALLBACKS *****************************************************************/
360 struct _BL_FILE_ENTRY
;
361 struct _BL_FILE_INFORMATION
;
365 _In_
struct _BL_FILE_ENTRY
* Directory
,
366 _In_ PWCHAR FileName
,
368 _Out_
struct _BL_FILE_ENTRY
** FileEntry
374 _In_
struct _BL_FILE_ENTRY
* FileEntry
380 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
383 _Out_opt_ PULONG BytesRead
394 (*PBL_FILE_GET_NEXT
) (
400 (*PBL_FILE_GET_INFO
) (
401 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
402 _Out_
struct _BL_FILE_INFORMATION
* FileInfo
407 (*PBL_FILE_SET_INFO
) (
408 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
409 _In_
struct _BL_FILE_INFORMATION
* FileInfo
414 (*PBL_FS_INIT_CALLBACK
) (
420 (*PBL_FS_DESTROY_CALLBACK
) (
426 (*PBL_FS_MOUNT_CALLBACK
) (
429 _Out_
struct _BL_FILE_ENTRY
** FileEntry
434 (*PBL_FS_PURGE_CALLBACK
) (
440 (*PBL_FILE_DESTROY_CALLBACK
) (
444 struct _BL_TEXT_CONSOLE
;
445 struct _BL_DISPLAY_STATE
;
446 struct _BL_DISPLAY_MODE
;
447 struct _BL_INPUT_CONSOLE
;
448 struct _BL_REMOTE_CONSOLE
;
449 struct _BL_GRAPHICS_CONSOLE
;
452 (*PCONSOLE_DESTRUCT
) (
453 _In_
struct _BL_TEXT_CONSOLE
* Console
458 (*PCONSOLE_REINITIALIZE
) (
459 _In_
struct _BL_TEXT_CONSOLE
* Console
464 (*PCONSOLE_GET_TEXT_STATE
) (
465 _In_
struct _BL_TEXT_CONSOLE
* Console
,
466 _Out_
struct _BL_DISPLAY_STATE
* TextState
471 (*PCONSOLE_SET_TEXT_STATE
) (
472 _In_
struct _BL_TEXT_CONSOLE
* Console
,
474 _In_
struct _BL_DISPLAY_STATE
* TextState
479 (*PCONSOLE_GET_TEXT_RESOLUTION
) (
480 _In_
struct _BL_TEXT_CONSOLE
* Console
,
481 _Out_ PULONG TextResolution
486 (*PCONSOLE_SET_TEXT_RESOLUTION
) (
487 _In_
struct _BL_TEXT_CONSOLE
* Console
,
488 _In_ ULONG NewTextResolution
,
489 _Out_ PULONG OldTextResolution
494 (*PCONSOLE_CLEAR_TEXT
) (
495 _In_
struct _BL_TEXT_CONSOLE
* Console
,
496 _In_ BOOLEAN LineOnly
501 (*PCONSOLE_IS_ENABLED
) (
502 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
507 (*PCONSOLE_GET_GRAPHICAL_RESOLUTION
) (
508 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
509 _Out_
struct _BL_DISPLAY_MODE
* DisplayMode
514 (*PCONSOLE_SET_GRAPHICAL_RESOLUTION
) (
515 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
516 _In_
struct _BL_DISPLAY_MODE DisplayMode
522 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
528 (*PCONSOLE_WRITE_TEXT
) (
529 _In_
struct _BL_TEXT_CONSOLE
* Console
,
536 (*PBL_TBL_LOOKUP_ROUTINE
) (
538 _In_ PVOID Argument1
,
539 _In_ PVOID Argument2
,
540 _In_ PVOID Argument3
,
546 (*PBL_TBL_MAP_ROUTINE
) (
548 _In_ ULONG EntryIndex
553 (*PBL_TBL_SET_ROUTINE
) (
559 (*PBL_IO_DESTROY_ROUTINE
) (
563 struct _BL_HASH_ENTRY
;
566 (*PBL_HASH_TABLE_COMPARE_FUNCTION
) (
567 _In_
struct _BL_HASH_ENTRY
* Entry1
,
568 _In_
struct _BL_HASH_ENTRY
* Entry2
573 (*PBL_HASH_TABLE_HASH_FUNCTION
) (
574 _In_
struct _BL_HASH_ENTRY
* Entry
,
578 struct _BL_DEVICE_ENTRY
;
579 struct _BL_DEVICE_DESCRIPTOR
;
580 struct _BL_DEVICE_INFORMATION
;
584 (*PBL_DEVICE_ENUMERATE_DEVICE_CLASS
) (
591 _In_
struct _BL_DEVICE_DESCRIPTOR
* Device
,
592 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
597 (*PBL_DEVICE_CLOSE
) (
598 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
604 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
607 _Out_ PULONG BytesRead
612 (*PBL_DEVICE_WRITE
) (
618 (*PBL_DEVICE_GET_INFORMATION
) (
619 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
620 _Out_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
625 (*PBL_DEVICE_SET_INFORMATION
) (
626 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
627 _In_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
632 (*PBL_DEVICE_RESET
) (
638 (*PBL_DEVICE_FLUSH
) (
644 (*PBL_DEVICE_CREATE
) (
649 /* DATA STRUCTURES ***********************************************************/
651 typedef struct _BL_LIBRARY_PARAMETERS
654 ULONG TranslationType
;
655 ULONG MinimumAllocationCount
;
656 ULONG MinimumHeapSize
;
657 ULONG HeapAllocationAttributes
;
658 PWCHAR ApplicationBaseDirectory
;
659 ULONG DescriptorCount
;
660 PWCHAR FontBaseDirectory
;
661 } BL_LIBRARY_PARAMETERS
, *PBL_LIBRARY_PARAMETERS
;
663 /* This should eventually go into a more public header */
664 typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK
666 /* This header tells the library what image we're dealing with */
671 ULONG MemoryTranslationType
;
673 /* Where is the image located */
677 /* Offset to BL_MEMORY_DATA */
678 ULONG MemoryDataOffset
;
680 /* Offset to BL_APPLICATION_ENTRY */
681 ULONG AppEntryOffset
;
683 /* Offset to BL_DEVICE_DESCRPIPTOR */
684 ULONG BootDeviceOffset
;
686 /* Offset to BL_FIRMWARE_PARAMETERS */
687 ULONG FirmwareParametersOffset
;
689 /* Offset to BL_RETURN_ARGUMENTS */
690 ULONG ReturnArgumentsOffset
;
691 } BOOT_APPLICATION_PARAMETER_BLOCK
, *PBOOT_APPLICATION_PARAMETER_BLOCK
;
693 typedef struct _BL_MEMORY_DATA
697 ULONG DescriptorCount
;
698 ULONG DescriptorSize
;
699 ULONG DescriptorOffset
;
700 } BL_MEMORY_DATA
, *PBL_MEMORY_DATA
;
702 typedef struct _BL_FIRMWARE_DESCRIPTOR
706 EFI_HANDLE ImageHandle
;
707 EFI_SYSTEM_TABLE
*SystemTable
;
708 } BL_FIRMWARE_DESCRIPTOR
, *PBL_FIRMWARE_DESCRIPTOR
;
710 typedef struct _BL_RETURN_ARGUMENTS
717 } BL_RETURN_ARGUMENTS
, *PBL_RETURN_ARGUMENTS
;
719 typedef struct _BL_MEMORY_DESCRIPTOR
721 LIST_ENTRY ListEntry
;
727 ULONGLONG VirtualPage
;
731 ULONGLONG BaseAddress
;
732 ULONGLONG VirtualAddress
;
738 } BL_MEMORY_DESCRIPTOR
, *PBL_MEMORY_DESCRIPTOR
;
740 typedef struct _BL_BCD_OPTION
746 ULONG NextEntryOffset
;
748 } BL_BCD_OPTION
, *PBL_BCD_OPTION
;
750 typedef struct _BL_APPLICATION_ENTRY
756 BL_BCD_OPTION BcdData
;
757 } BL_APPLICATION_ENTRY
, *PBL_APPLICATION_ENTRY
;
759 typedef struct _BL_LOADED_APPLICATION_ENTRY
763 PBL_BCD_OPTION BcdData
;
764 } BL_LOADED_APPLICATION_ENTRY
, *PBL_LOADED_APPLICATION_ENTRY
;
766 typedef struct _BL_MENU_STATUS
773 ULONG AdvancedOptions
: 1;
774 ULONG BootOptions
: 1;
783 } BL_MENU_STATUS
, *PL_MENU_STATUS
;
785 typedef enum _BL_BOOT_ERROR_STATUS
795 } BL_BOOT_ERROR_STATUS
;
797 typedef struct _BL_HARDDISK_DEVICE
804 ULONG PartitionSignature
;
809 GUID PartitionSignature
;
817 } BL_HARDDISK_DEVICE
;
819 typedef struct _BL_LOCAL_DEVICE
829 BL_HARDDISK_DEVICE HardDisk
;
833 PHYSICAL_ADDRESS ImageBase
;
834 LARGE_INTEGER ImageSize
;
838 ULONG File
; // unknown for now
840 } BL_LOCAL_DEVICE
, *PBL_LOCAL_DEVICE
;
842 typedef struct _BL_DEVICE_DESCRIPTOR
844 DEVICE_TYPE DeviceType
;
850 BL_LOCAL_DEVICE Local
;
861 ULONG PartitionNumber
;
869 BL_LOCAL_DEVICE Disk
;
872 } BL_DEVICE_DESCRIPTOR
, *PBL_DEVICE_DESCRIPTOR
;
874 typedef struct _BL_FILE_PATH_DESCRIPTOR
879 UCHAR Path
[ANYSIZE_ARRAY
];
880 } BL_FILE_PATH_DESCRIPTOR
, *PBL_FILE_PATH_DESCRIPTOR
;
882 typedef struct _BL_WINDOWS_LOAD_OPTIONS
888 WCHAR LoadOptions
[ANYSIZE_ARRAY
];
889 } BL_WINDOWS_LOAD_OPTIONS
, *PBL_WINDOWS_LOAD_OPTIONS
;
891 typedef struct _BL_ARCH_CONTEXT
894 BL_TRANSLATION_TYPE TranslationType
;
896 } BL_ARCH_CONTEXT
, *PBL_ARCH_CONTEXT
;
898 typedef struct _BL_MEMORY_DESCRIPTOR_LIST
904 } BL_MEMORY_DESCRIPTOR_LIST
, *PBL_MEMORY_DESCRIPTOR_LIST
;
906 typedef struct _BL_ADDRESS_RANGE
910 } BL_ADDRESS_RANGE
, *PBL_ADDRESS_RANGE
;
912 typedef struct _BL_FILE_INFORMATION
918 } BL_FILE_INFORMATION
, *PBL_FILE_INFORMATION
;
920 typedef struct _BL_FILE_CALLBACKS
923 PBL_FILE_CLOSE Close
;
925 PBL_FILE_WRITE Write
;
926 PBL_FILE_GET_NEXT GetNext
;
927 PBL_FILE_GET_INFO GetInfo
;
928 PBL_FILE_SET_INFO SetInfo
;
929 } BL_FILE_CALLBACKS
, *PBL_FILE_CALLBACKS
;
931 typedef struct _BL_FILE_ENTRY
937 ULONG ReferenceCount
;
939 ULONGLONG TotalBytesRead
;
941 BL_FILE_CALLBACKS Callbacks
;
942 PVOID FsSpecificData
;
943 } BL_FILE_ENTRY
, *PBL_FILE_ENTRY
;
945 typedef struct _BL_FILE_SYSTEM_ENTRY
947 LIST_ENTRY ListEntry
;
948 PBL_FS_INIT_CALLBACK InitCallback
;
949 PBL_FS_DESTROY_CALLBACK DestroyCallback
;
950 PBL_FS_MOUNT_CALLBACK MountCallback
;
951 PBL_FS_PURGE_CALLBACK PurgeCallback
;
952 } BL_FILE_SYSTEM_ENTRY
, *PBL_FILE_SYSTEM_ENTRY
;
954 typedef struct _BL_FILE_SYSTEM_REGISTRATION_TABLE
956 PBL_FS_INIT_CALLBACK Init
;
957 PBL_FS_DESTROY_CALLBACK Destroy
;
958 PBL_FS_MOUNT_CALLBACK Mount
;
959 PBL_FS_PURGE_CALLBACK Purge
;
960 } BL_FILE_SYSTEM_REGISTRATION_TABLE
;
962 typedef struct _BL_DISPLAY_STATE
969 } BL_DISPLAY_STATE
, *PBL_DISPLAY_STATE
;
971 typedef struct _BL_DISPLAY_MODE
976 } BL_DISPLAY_MODE
, *PBL_DISPLAY_MODE
;
978 typedef struct _BL_TEXT_CONSOLE_VTABLE
980 PCONSOLE_DESTRUCT Destruct
;
981 PCONSOLE_REINITIALIZE Reinitialize
;
982 PCONSOLE_GET_TEXT_STATE GetTextState
;
983 PCONSOLE_SET_TEXT_STATE SetTextState
;
984 PCONSOLE_GET_TEXT_RESOLUTION GetTextResolution
;
985 PCONSOLE_SET_TEXT_RESOLUTION SetTextResolution
;
986 PCONSOLE_CLEAR_TEXT ClearText
;
987 PCONSOLE_WRITE_TEXT WriteText
;
988 } BL_TEXT_CONSOLE_VTABLE
, *PBL_TEXT_CONSOLE_VTABLE
;
990 typedef struct _BL_GRAPHICS_CONSOLE_VTABLE
992 BL_TEXT_CONSOLE_VTABLE Text
;
993 PCONSOLE_IS_ENABLED IsEnabled
;
994 PCONSOLE_ENABLE Enable
;
995 PVOID GetConsoleResolution
;
996 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetGraphicalResolution
;
997 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetOriginalResolution
;
998 PCONSOLE_SET_GRAPHICAL_RESOLUTION SetOriginalResolution
;
999 /// more for graphics ///
1000 } BL_GRAPHICS_CONSOLE_VTABLE
, *PBL_GRAPHICS_CONSOLE_VTABLE
;
1002 typedef struct _BL_TEXT_CONSOLE
1004 PBL_TEXT_CONSOLE_VTABLE Callbacks
;
1005 BL_DISPLAY_STATE State
;
1006 BL_DISPLAY_MODE DisplayMode
;
1008 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
* Protocol
;
1010 EFI_SIMPLE_TEXT_OUTPUT_MODE OldMode
;
1011 } BL_TEXT_CONSOLE
, *PBL_TEXT_CONSOLE
;
1013 typedef struct _BL_INPUT_CONSOLE_VTABLE
1015 PCONSOLE_DESTRUCT Destruct
;
1016 PCONSOLE_REINITIALIZE Reinitialize
;
1017 //PCONSOLE_IS_KEY_PENDING IsKeyPending;
1018 //PCONSOLE_READ_INPUT ReadInput;
1019 //PCONSOLE_ERASE_BUFFER EraseBuffer;
1020 //PCONSOLE_FILL_BUFFER FillBuffer;
1021 } BL_INPUT_CONSOLE_VTABLE
, *PBL_INPUT_CONSOLE_VTABLE
;
1023 typedef struct _BL_INPUT_CONSOLE
1025 PBL_INPUT_CONSOLE_VTABLE Callbacks
;
1030 } BL_INPUT_CONSOLE
, *PBL_INPUT_CONSOLE
;
1032 typedef enum _BL_GRAPHICS_CONSOLE_TYPE
1036 } BL_GRAPHICS_CONSOLE_TYPE
;
1038 typedef struct _BL_GRAPHICS_CONSOLE
1040 BL_TEXT_CONSOLE TextConsole
;
1041 BL_DISPLAY_MODE DisplayMode
;
1045 BL_DISPLAY_MODE OldDisplayMode
;
1046 ULONG OldPixelDepth
;
1048 BL_GRAPHICS_CONSOLE_TYPE Type
;
1049 EFI_GRAPHICS_OUTPUT_PROTOCOL
* Protocol
;
1051 ULONG FrameBufferSize
;
1052 ULONG PixelsPerScanLine
;
1055 } BL_GRAPHICS_CONSOLE
, *PBL_GRAPHICS_CONSOLE
;
1057 typedef struct _BL_REMOTE_CONSOLE
1059 BL_TEXT_CONSOLE TextConsole
;
1060 } BL_REMOTE_CONSOLE
, *PBL_REMOTE_CONSOLE
;
1062 typedef struct _BL_HASH_TABLE
1064 PLIST_ENTRY HashLinks
;
1066 PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
;
1067 PBL_HASH_TABLE_HASH_FUNCTION HashFunction
;
1068 } BL_HASH_TABLE
, *PBL_HASH_TABLE
;
1070 typedef struct _BL_HASH_ENTRY
1075 } BL_HASH_ENTRY
, *PBL_HASH_ENTRY
;
1077 typedef struct _BL_HASH_VALUE
1081 } BL_HASH_VALUE
, *PBL_HASH_VALUE
;
1083 typedef struct _BL_HASH_NODE
1085 LIST_ENTRY ListEntry
;
1086 BL_HASH_ENTRY Entry
;
1087 BL_HASH_VALUE Value
;
1088 } BL_HASH_NODE
, *PBL_HASH_NODE
;
1090 typedef struct _BL_BLOCK_DEVICE_INFORMATION
1092 BL_LOCAL_DEVICE_TYPE Type
;
1095 BL_PARTITION_TYPE PartitionType
;
1098 ULONGLONG LastBlock
;
1115 } BL_BLOCK_DEVICE_INFORMATION
, *PBL_BLOCK_DEVICE_INFORMATION
;
1117 typedef struct _BL_DEVICE_INFORMATION
1119 BL_DEVICE_TYPE DeviceType
;
1122 BL_BLOCK_DEVICE_INFORMATION BlockDeviceInfo
;
1124 } BL_DEVICE_INFORMATION
, *PBL_DEVICE_INFORMATION
;
1126 typedef struct _BL_BLOCK_DEVICE
1128 BL_BLOCK_DEVICE_INFORMATION
;
1129 ULONGLONG StartOffset
;
1130 EFI_BLOCK_IO
* Protocol
;
1132 } BL_BLOCK_DEVICE
, *PBL_BLOCK_DEVICE
;
1134 typedef struct _BL_PROTOCOL_HANDLE
1138 } BL_PROTOCOL_HANDLE
, *PBL_PROTOCOL_HANDLE
;
1140 typedef struct _BL_DEVICE_CALLBACKS
1142 PBL_DEVICE_ENUMERATE_DEVICE_CLASS EnumerateDeviceClass
;
1143 PBL_DEVICE_OPEN Open
;
1144 PBL_DEVICE_CLOSE Close
;
1145 PBL_DEVICE_READ Read
;
1146 PBL_DEVICE_WRITE Write
;
1147 PBL_DEVICE_GET_INFORMATION GetInformation
;
1148 PBL_DEVICE_SET_INFORMATION SetInformation
;
1149 PBL_DEVICE_RESET Reset
;
1150 PBL_DEVICE_FLUSH Flush
;
1151 PBL_DEVICE_CREATE Create
;
1152 } BL_DEVICE_CALLBACKS
, *PBL_DEVICE_CALLBACKS
;
1154 typedef struct _BL_DEVICE_ENTRY
1159 ULONG ReferenceCount
;
1160 BL_DEVICE_CALLBACKS Callbacks
;
1161 PVOID DeviceSpecificData
;
1162 PBL_DEVICE_DESCRIPTOR DeviceDescriptor
;
1163 } BL_DEVICE_ENTRY
, *PBL_DEVICE_ENTRY
;
1165 typedef struct _BL_IMG_FILE
1175 } BL_IMG_FILE
, *PBL_IMG_FILE
;
1177 typedef struct _BL_IMAGE_APPLICATION_ENTRY
1179 PBL_APPLICATION_ENTRY AppEntry
;
1182 } BL_IMAGE_APPLICATION_ENTRY
, *PBL_IMAGE_APPLICATION_ENTRY
;
1184 typedef struct _BL_IMAGE_PARAMETERS
1189 } BL_IMAGE_PARAMETERS
, *PBL_IMAGE_PARAMETERS
;
1191 typedef struct _BL_DEFERRED_FONT_FILE
1193 LIST_ENTRY ListEntry
;
1195 PBL_DEVICE_DESCRIPTOR Device
;
1197 } BL_DEFERRED_FONT_FILE
, *PBL_DEFERRED_FONT_FILE
;
1201 typedef struct _BMP_HEADER
1207 } BMP_HEADER
, *PBMP_HEADER
;
1209 typedef struct _DIB_HEADER
1218 ULONG XPelsPerMeter
;
1219 ULONG YPelsPerMEter
;
1222 } DIB_HEADER
, *PDIB_HEADER
;
1224 typedef struct _BITMAP
1226 BMP_HEADER BmpHeader
;
1227 DIB_HEADER DibHeader
;
1231 typedef struct _COORD
1237 typedef struct _BL_PD_DATA_BLOB
1242 } BL_PD_DATA_BLOB
, *PBL_PD_DATA_BLOB
;
1244 /* INLINE ROUTINES ***********************************************************/
1248 BlSetupDefaultParameters (
1249 _Out_ PBL_LIBRARY_PARAMETERS LibraryParameters
1252 BL_LIBRARY_PARAMETERS DefaultParameters
=
1264 /* Copy the defaults */
1265 RtlCopyMemory(LibraryParameters
, &DefaultParameters
, sizeof(*LibraryParameters
));
1270 MmMdInitializeListHead (
1271 _In_ PBL_MEMORY_DESCRIPTOR_LIST List
1274 /* Initialize the list */
1275 InitializeListHead(&List
->ListHead
);
1276 List
->First
= &List
->ListHead
;
1280 /* INITIALIZATION ROUTINES ***************************************************/
1283 BlInitializeLibrary(
1284 _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters
,
1285 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1296 _In_ PBL_FIRMWARE_DESCRIPTOR FirmwareParameters
1301 _In_ PBL_MEMORY_DATA MemoryData
,
1302 _In_ BL_TRANSLATION_TYPE TranslationType
,
1303 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1313 _In_ PBL_MEMORY_DATA MemoryData
,
1314 _In_ ULONG MinimumPages
1320 _In_ PBL_MEMORY_DATA MemoryData
,
1321 _In_ BL_TRANSLATION_TYPE TranslationType
,
1322 _In_ BL_TRANSLATION_TYPE LibraryTranslationType
1327 _In_ ULONG HeapSize
,
1328 _In_ ULONG HeapAttributes
1334 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1338 BlpDeviceInitialize (
1353 BlpDisplayInitialize (
1358 BlpDisplayReinitialize (
1372 /* FIRMWARE ROUTINES *********************************************************/
1381 BlFwEnumerateDevice (
1382 _In_ PBL_DEVICE_DESCRIPTOR Device
1389 _Inout_ EFI_PHYSICAL_ADDRESS
* Memory
1394 _In_ ULONG StallTime
1408 EfiConOutOutputString (
1409 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1414 EfiConOutQueryMode (
1415 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1417 _In_ UINTN
* Columns
,
1423 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1428 EfiConOutReadCurrentMode (
1429 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1430 _Out_ EFI_SIMPLE_TEXT_OUTPUT_MODE
* Mode
1434 EfiConOutSetAttribute (
1435 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1436 _In_ ULONG Attribute
1440 EfiConOutSetCursorPosition (
1441 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1447 EfiConOutEnableCursor (
1448 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1449 _In_ BOOLEAN Visible
1453 EfiLocateHandleBuffer (
1454 _In_ EFI_LOCATE_SEARCH_TYPE SearchType
,
1455 _In_ EFI_GUID
*Protocol
,
1456 _Inout_ PULONG HandleCount
,
1457 _Inout_ EFI_HANDLE
** Buffer
1462 _In_ EFI_HANDLE Handle
,
1463 _In_ EFI_GUID
*Protocol
,
1464 _Out_ PVOID
* Interface
1469 _In_ EFI_HANDLE Handle
,
1470 _In_ EFI_GUID
*Protocol
1474 EfiGopGetCurrentMode (
1475 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1477 _Out_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
*Information
1482 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1487 EfiGopGetFrameBuffer (
1488 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1489 _Out_ PHYSICAL_ADDRESS
* FrameBuffer
,
1490 _Out_ UINTN
*FrameBufferSize
1495 _In_ EFI_RESET_TYPE ResetType
1500 _In_ EFI_DEVICE_PATH
*DevicePath
1504 EfiIsDevicePathParent (
1505 _In_ EFI_DEVICE_PATH
*DevicePath1
,
1506 _In_ EFI_DEVICE_PATH
*DevicePath2
1511 _Out_ PPHYSICAL_ADDRESS FoundRsdt
1514 /* PLATFORM TIMER ROUTINES ***************************************************/
1517 BlpTimeCalibratePerformanceCounter (
1522 BlTimeQueryPerformanceCounter (
1523 _Out_opt_ PLARGE_INTEGER Frequency
1526 /* RESOURCE LOCALE INTERNATIONALIZATION ROUTINES *****************************/
1529 BlpDisplayRegisterLocale (
1533 /* FONT ROUTINES *************************************************************/
1536 BfiFreeDeferredFontFile (
1537 _In_ PBL_DEFERRED_FONT_FILE DeferredFontFile
1542 _In_ PBL_DEVICE_DESCRIPTOR Device
,
1543 _In_ PWCHAR FontPath
1547 BfLoadDeferredFontFiles (
1553 _In_ PBL_GRAPHICS_CONSOLE Console
1557 BfClearToEndOfLine (
1558 _In_ PBL_GRAPHICS_CONSOLE Console
1561 /* FILESYSTEM ROUTINES *******************************************************/
1570 _In_ ULONG DeviceId
,
1572 _Out_ PBL_FILE_ENTRY
* FileEntry
1582 _In_ ULONG DeviceId
,
1584 _Out_ PBL_FILE_ENTRY
* FileEntry
1587 /* DEBUG ROUTINES ************************************************************/
1591 BlBdDebuggerEnabled (
1596 BlBdPullRemoteFile (
1597 _In_ PWCHAR FilePath
,
1598 _Out_ PVOID BaseAddress
,
1599 _Out_ PULONGLONG FileSize
1610 _In_ ULONG ErrorCode
,
1611 _In_ ULONG Parameter1
,
1612 _In_ ULONG_PTR Parameter2
,
1613 _In_ ULONG_PTR Parameter3
,
1614 _In_ ULONG_PTR Parameter4
1617 /* UTILITY ROUTINES **********************************************************/
1620 BlUtlUpdateProgress (
1621 _In_ ULONG Percentage
,
1622 _Out_opt_ PBOOLEAN Completed
1627 _Out_ PVOID
* TableAddress
,
1628 _In_ ULONG Signature
1637 BlUtlRegisterProgressRoutine (
1643 _In_ ULONG PartialSum
,
1650 BlGetApplicationBaseAndSize (
1651 _Out_ PVOID
* ImageBase
,
1652 _Out_ PULONG ImageSize
1656 BlDestroyBootEntry (
1657 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
1662 _In_
const GUID
* DataGuid
,
1664 _Inout_ PBL_PD_DATA_BLOB DataBlob
1667 /* FIRMWARE UTILITY ROUTINES *************************************************/
1670 EfiGetEfiStatusCode(
1671 _In_ NTSTATUS Status
1675 EfiGetNtStatusCode (
1676 _In_ EFI_STATUS EfiStatus
1685 BlGetApplicationIdentifier (
1690 BlpSecureBootEFIIsEnabled (
1695 BlSecureBootIsEnabled (
1696 _Out_ PBOOLEAN SecureBootEnabled
1700 BlSecureBootCheckForFactoryReset (
1704 /* RESOURCE ROUTINES *********************************************************/
1707 BlResourceFindMessage (
1712 BlResourceFindHtml (
1717 BlpResourceInitialize (
1721 /* TABLE ROUTINES ************************************************************/
1727 _In_ PBL_TBL_MAP_ROUTINE MapCallback
1734 _Out_ PULONG EntryIndex
,
1735 _In_ PBL_TBL_LOOKUP_ROUTINE Callback
,
1736 _In_ PVOID Argument1
,
1737 _In_ PVOID Argument2
,
1738 _In_ PVOID Argument3
,
1739 _In_ PVOID Argument4
1744 _Inout_ PVOID
** Table
,
1745 _Inout_ PULONG Count
,
1747 _Out_ PULONG EntryIndex
,
1748 _In_ PBL_TBL_SET_ROUTINE Callback
1752 TblDoNotPurgeEntry (
1756 /* HASH TABLE ROUTINES *******************************************************/
1761 _In_ PBL_HASH_ENTRY Entry
,
1769 _In_ PBL_HASH_ENTRY Entry
,
1770 _Out_ PBL_HASH_VALUE
*Value
1776 _In_ PBL_HASH_TABLE_HASH_FUNCTION HashFunction
,
1777 _In_ PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
,
1781 /* BCD OPTION ROUTINES *******************************************************/
1785 _In_ PBL_BCD_OPTION List
,
1790 BlGetBootOptionListSize (
1791 _In_ PBL_BCD_OPTION BcdOption
1795 BlGetBootOptionSize (
1796 _In_ PBL_BCD_OPTION BcdOption
1800 BlGetBootOptionString (
1801 _In_ PBL_BCD_OPTION List
,
1807 BlGetBootOptionInteger (
1808 _In_ PBL_BCD_OPTION List
,
1810 _Out_ PULONGLONG Value
1814 BlGetBootOptionBoolean (
1815 _In_ PBL_BCD_OPTION List
,
1817 _Out_ PBOOLEAN Value
1821 BlpGetBootOptionIntegerList (
1822 _In_ PBL_BCD_OPTION List
,
1824 _Out_ PULONGLONG
* Value
,
1825 _Out_ PULONGLONG Count
,
1830 BlGetBootOptionDevice (
1831 _In_ PBL_BCD_OPTION List
,
1833 _Out_ PBL_DEVICE_DESCRIPTOR
* Value
,
1834 _In_opt_ PBL_BCD_OPTION
* ExtraOptions
1838 BlGetBootOptionGuid (
1839 _In_ PBL_BCD_OPTION List
,
1845 BlGetBootOptionGuidList (
1846 _In_ PBL_BCD_OPTION List
,
1854 _In_ PBL_BCD_OPTION OptionList
,
1855 _Out_ PBL_BCD_OPTION
*CopiedOptions
1859 BlAppendBootOptionBoolean (
1860 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1865 BlAppendBootOptionInteger (
1866 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1867 _In_ ULONG OptionId
,
1868 _In_ ULONGLONG Value
1872 BlAppendBootOptionString (
1873 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1874 _In_ PWCHAR OptionString
1878 BlAppendBootOptions (
1879 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1880 _In_ PBL_BCD_OPTION Options
1884 BlRemoveBootOption (
1885 _In_ PBL_BCD_OPTION List
,
1890 BlReplaceBootOptions (
1891 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1892 _In_ PBL_BCD_OPTION NewOptions
1895 /* BOOT REGISTRY ROUTINES ****************************************************/
1899 _In_ HANDLE KeyHandle
1904 _In_ HANDLE ParentHandle
,
1905 _In_ PWCHAR KeyName
,
1906 _Out_ PHANDLE Handle
1911 _In_ PBL_FILE_PATH_DESCRIPTOR FilePath
,
1912 _Out_ PHANDLE HiveHandle
1916 BiGetRegistryValue (
1917 _In_ HANDLE KeyHandle
,
1918 _In_ PWCHAR ValueName
,
1920 _Out_ PVOID
* Buffer
,
1921 _Out_ PULONG ValueLength
1925 BiEnumerateSubKeys (
1926 _In_ HANDLE KeyHandle
,
1927 _Out_ PWCHAR
** SubKeyList
,
1928 _Out_ PULONG SubKeyCount
1933 _In_ HANDLE KeyHandle
1938 _In_ HANDLE KeyHandle
1941 /* CONTEXT ROUTINES **********************************************************/
1944 BlpArchSwitchContext (
1945 _In_ BL_ARCH_MODE NewMode
1949 Archx86TransferTo32BitApplicationAsm (
1953 /* MEMORY DESCRIPTOR ROUTINES ************************************************/
1957 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
1960 PBL_MEMORY_DESCRIPTOR
1961 MmMdInitByteGranularDescriptor (
1963 _In_ BL_MEMORY_TYPE Type
,
1964 _In_ ULONGLONG BasePage
,
1965 _In_ ULONGLONG VirtualPage
,
1966 _In_ ULONGLONG PageCount
1970 MmMdFreeGlobalDescriptors (
1975 MmMdAddDescriptorToList (
1976 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1977 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
,
1982 MmMdRemoveDescriptorFromList (
1983 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1984 _In_ PBL_MEMORY_DESCRIPTOR Entry
1988 MmMdFindSatisfyingRegion (
1989 _In_ PBL_MEMORY_DESCRIPTOR Descriptor
,
1990 _Out_ PBL_MEMORY_DESCRIPTOR NewDescriptor
,
1991 _In_ ULONGLONG Pages
,
1992 _In_ PBL_ADDRESS_RANGE BaseRange
,
1993 _In_ PBL_ADDRESS_RANGE VirtualRange
,
1994 _In_ BOOLEAN TopDown
,
1995 _In_ BL_MEMORY_TYPE MemoryType
,
1997 _In_ ULONG Alignment
2001 MmMdRemoveRegionFromMdlEx (
2002 __in PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2004 __in ULONGLONG BasePage
,
2005 __in ULONGLONG PageCount
,
2006 __in PBL_MEMORY_DESCRIPTOR_LIST NewMdList
2010 MmMdFreeDescriptor (
2011 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
2014 /* PAGE ALLOCATOR ROUTINES ***************************************************/
2017 BlMmAllocatePhysicalPages(
2018 _Inout_ PPHYSICAL_ADDRESS Address
,
2019 _In_ BL_MEMORY_TYPE MemoryType
,
2020 _In_ ULONGLONG PageCount
,
2021 _In_ ULONG Attributes
,
2022 _In_ ULONG Alignment
2026 MmPapAllocatePhysicalPagesInRange (
2027 _Inout_ PPHYSICAL_ADDRESS BaseAddress
,
2028 _In_ BL_MEMORY_TYPE MemoryType
,
2029 _In_ ULONGLONG Pages
,
2030 _In_ ULONG Attributes
,
2031 _In_ ULONG Alignment
,
2032 _In_ PBL_MEMORY_DESCRIPTOR_LIST NewList
,
2033 _In_opt_ PBL_ADDRESS_RANGE Range
,
2034 _In_ ULONG RangeType
2038 BlMmFreePhysicalPages (
2039 _In_ PHYSICAL_ADDRESS Address
2043 MmPapAllocatePagesInRange (
2044 _Inout_ PVOID
* PhysicalAddress
,
2045 _In_ BL_MEMORY_TYPE MemoryType
,
2046 _In_ ULONGLONG Pages
,
2047 _In_ ULONG Attributes
,
2048 _In_ ULONG Alignment
,
2049 _In_opt_ PBL_ADDRESS_RANGE Range
,
2055 _Out_ PBL_MEMORY_DESCRIPTOR_LIST MemoryMap
,
2060 BlpMmInitializeConstraints (
2065 BlMmRemoveBadMemory (
2069 /* VIRTUAL MEMORY ROUTINES ***************************************************/
2072 BlMmMapPhysicalAddressEx (
2073 _In_ PVOID
* VirtualAddress
,
2074 _In_ ULONG Attributes
,
2075 _In_ ULONGLONG Size
,
2076 _In_ PHYSICAL_ADDRESS PhysicalAddress
2080 BlMmUnmapVirtualAddressEx (
2081 _In_ PVOID VirtualAddress
,
2085 /* BLOCK ALLOCATOR ROUTINES **************************************************/
2088 BlpMmCreateBlockAllocator (
2092 /* HEAP ALLOCATOR ROUTINES ***************************************************/
2104 /* DISPLAY ROUTINES **********************************************************/
2107 BlDisplayGetTextCellResolution (
2108 _Out_ PULONG TextWidth
,
2109 _Out_ PULONG TextHeight
2113 BlDisplaySetScreenResolution (
2118 BlDisplayGetScreenResolution (
2124 BlDisplayInvalidateOemBitmap (
2129 BlDisplayGetOemBitmap (
2130 _Out_ PCOORD Offset
,
2131 _Out_opt_ PULONG Flags
2135 BlDisplayValidOemBitmap (
2140 BlDisplayClearScreen (
2145 BlDisplaySetCursorType (
2149 /* I/O ROUTINES **************************************************************/
2152 BlpIoRegisterDestroyRoutine (
2153 _In_ PBL_IO_DESTROY_ROUTINE DestroyRoutine
2163 _In_ PBL_DEVICE_DESCRIPTOR Device
,
2166 _Out_ PULONG DeviceId
2170 BlDeviceGetInformation (
2171 _In_ ULONG DeviceId
,
2172 _Out_ PBL_DEVICE_INFORMATION DeviceInformation
2176 BlDeviceSetInformation (
2177 _In_ ULONG DeviceId
,
2178 _In_ PBL_DEVICE_INFORMATION DeviceInformation
2182 BlDeviceReadAtOffset (
2183 _In_ ULONG DeviceId
,
2185 _In_ ULONGLONG Offset
,
2187 _Out_ PULONG BytesRead
2190 /* IMAGE ROUTINES ************************************************************/
2193 BlImgLoadImageWithProgress2 (
2194 _In_ ULONG DeviceId
,
2195 _In_ BL_MEMORY_TYPE MemoryType
,
2196 _In_ PWCHAR FileName
,
2197 _Inout_ PVOID
* MappedBase
,
2198 _Inout_ PULONG MappedSize
,
2199 _In_ ULONG ImageFlags
,
2200 _In_ BOOLEAN ShowProgress
,
2201 _Out_opt_ PUCHAR
* HashBuffer
,
2202 _Out_opt_ PULONG HashSize
2205 PIMAGE_SECTION_HEADER
2207 _In_ PVOID ImageBase
,
2208 _In_ ULONG ImageSize
2212 BlImgLoadBootApplication (
2213 _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry
,
2214 _Out_ PULONG AppHandle
2218 BlImgStartBootApplication (
2219 _In_ ULONG AppHandle
,
2220 _Inout_ PBL_RETURN_ARGUMENTS ReturnArguments
2224 BlImgUnloadBootApplication (
2225 _In_ ULONG AppHandle
2229 BlImgQueryCodeIntegrityBootOptions (
2230 _In_ PBL_LOADED_APPLICATION_ENTRY ApplicationEntry
,
2231 _Out_ PBOOLEAN IntegrityChecksDisabled
,
2232 _Out_ PBOOLEAN TestSigning
2235 /* FILE I/O ROUTINES *********************************************************/
2243 BlFileReadAtOffsetEx (
2246 _In_ ULONGLONG ByteOffset
,
2248 _Out_ PULONG BytesReturned
,
2253 BlFileGetInformation (
2255 _In_ PBL_FILE_INFORMATION FileInfo
2260 _In_ ULONG DeviceId
,
2261 _In_ PWCHAR FileName
,
2266 /* BLOCK I/O ROUTINES *******************************************************/
2269 BlockIoEfiCompareDevice (
2270 _In_ PBL_DEVICE_DESCRIPTOR Device
,
2271 _In_ EFI_HANDLE Handle
2274 /* INPUT CONSOLE ROUTINES ****************************************************/
2277 ConsoleInputLocalDestruct (
2278 _In_
struct _BL_INPUT_CONSOLE
* Console
2282 ConsoleInputBaseReinitialize (
2283 _In_
struct _BL_INPUT_CONSOLE
* Console
2287 ConsoleCreateLocalInputCnsole (
2291 /* TEXT CONSOLE ROUTINES *****************************************************/
2294 ConsoleGraphicalDestruct (
2295 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2299 ConsoleGraphicalClearText (
2300 _In_ PBL_GRAPHICS_CONSOLE Console
,
2301 _In_ BOOLEAN LineOnly
2305 ConsoleGraphicalClearPixels (
2306 _In_ PBL_GRAPHICS_CONSOLE Console
,
2311 ConsoleGraphicalReinitialize (
2312 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2316 ConsoleGraphicalSetTextState (
2317 _In_ PBL_GRAPHICS_CONSOLE Console
,
2319 _In_ PBL_DISPLAY_STATE TextState
2323 ConsoleGraphicalIsEnabled (
2324 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2328 ConsoleGraphicalGetGraphicalResolution (
2329 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2330 _In_ PBL_DISPLAY_MODE DisplayMode
2334 ConsoleGraphicalGetOriginalResolution (
2335 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2336 _In_ PBL_DISPLAY_MODE DisplayMode
2340 ConsoleGraphicalEnable (
2341 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2346 ConsoleTextLocalDestruct (
2347 _In_
struct _BL_TEXT_CONSOLE
* Console
2351 ConsoleTextLocalReinitialize (
2352 _In_
struct _BL_TEXT_CONSOLE
* Console
2356 ConsoleTextBaseGetTextState (
2357 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2358 _Out_ PBL_DISPLAY_STATE TextState
2362 ConsoleTextLocalSetTextState (
2363 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2365 _In_ PBL_DISPLAY_STATE TextState
2369 ConsoleTextBaseGetTextResolution (
2370 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2371 _Out_ PULONG TextResolution
2375 ConsoleTextLocalSetTextResolution (
2376 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2377 _In_ ULONG NewTextResolution
,
2378 _Out_ PULONG OldTextResolution
2382 ConsoleTextLocalClearText (
2383 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2384 _In_ BOOLEAN LineOnly
2388 ConsoleTextLocalWriteText (
2389 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2391 _In_ ULONG Attribute
2395 ConsoleTextLocalConstruct (
2396 _In_ PBL_TEXT_CONSOLE TextConsole
,
2397 _In_ BOOLEAN Activate
2401 ConsolepFindResolution (
2402 _In_ PBL_DISPLAY_MODE Mode
,
2403 _In_ PBL_DISPLAY_MODE List
,
2408 ConsoleFirmwareTextClear (
2409 _In_ PBL_TEXT_CONSOLE Console
,
2410 _In_ BOOLEAN LineOnly
2414 ConsoleFirmwareTextClose (
2415 _In_ PBL_TEXT_CONSOLE TextConsole
2419 ConsoleFirmwareTextOpen (
2420 _In_ PBL_TEXT_CONSOLE TextConsole
2424 ConsoleFirmwareTextSetState (
2425 _In_ PBL_TEXT_CONSOLE TextConsole
,
2427 _In_ PBL_DISPLAY_STATE State
2431 ConsoleGraphicalConstruct (
2432 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2436 ConsoleCreateRemoteConsole (
2437 _In_ PBL_TEXT_CONSOLE
* TextConsole
2441 ConsoleEfiGraphicalOpenProtocol (
2442 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2443 _In_ BL_GRAPHICS_CONSOLE_TYPE Type
2447 ConsoleFirmwareGraphicalClose (
2448 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2452 ConsoleFirmwareGraphicalDisable (
2453 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2457 ConsoleFirmwareGraphicalClear (
2458 _In_ PBL_GRAPHICS_CONSOLE Console
,
2463 ConsoleFirmwareGraphicalEnable (
2464 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2469 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2473 ConsoleEfiUgaClose (
2474 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2478 ConsoleEfiGopClose (
2479 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2484 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2488 ConsoleEfiGopEnable (
2489 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2493 ConsoleEfiUgaSetResolution (
2494 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2495 _In_ PBL_DISPLAY_MODE DisplayMode
,
2496 _In_ ULONG DisplayModeCount
2500 ConsoleCreateLocalInputConsole (
2505 ConsoleInputLocalEraseBuffer (
2506 _In_ PBL_INPUT_CONSOLE Console
,
2507 _In_opt_ PULONG ValueToFill
2511 ConsolepClearBuffer (
2512 _In_ PUCHAR FrameBuffer
,
2514 _In_ PUCHAR FillColor
,
2516 _In_ ULONG ScanlineWidth
,
2517 _In_ ULONG PixelDepth
2521 ConsolepConvertColorToPixel (
2522 _In_ BL_COLOR Color
,
2526 extern ULONG MmDescriptorCallTreeCount
;
2527 extern ULONG BlpApplicationFlags
;
2528 extern BL_LIBRARY_PARAMETERS BlpLibraryParameters
;
2529 extern BL_TRANSLATION_TYPE MmTranslationType
;
2530 extern PBL_ARCH_CONTEXT CurrentExecutionContext
;
2531 extern PBL_DEVICE_DESCRIPTOR BlpBootDevice
;
2532 extern BL_LOADED_APPLICATION_ENTRY BlpApplicationEntry
;
2533 extern EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*EfiConOut
;
2534 extern EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL
*EfiConInEx
;
2535 extern EFI_GUID EfiGraphicsOutputProtocol
;
2536 extern EFI_GUID EfiUgaDrawProtocol
;
2537 extern EFI_GUID EfiLoadedImageProtocol
;
2538 extern EFI_GUID EfiDevicePathProtocol
;
2539 extern EFI_GUID EfiBlockIoProtocol
;
2540 extern EFI_GUID EfiSimpleTextInputExProtocol
;
2541 extern EFI_GUID EfiRootAcpiTableGuid
;
2542 extern EFI_GUID EfiRootAcpiTable10Guid
;
2543 extern EFI_GUID EfiGlobalVariable
;
2544 extern ULONG ConsoleGraphicalResolutionListFlags
;
2545 extern BL_DISPLAY_MODE ConsoleGraphicalResolutionList
[];
2546 extern BL_DISPLAY_MODE ConsoleTextResolutionList
[];
2547 extern ULONG ConsoleGraphicalResolutionListSize
;
2548 extern PVOID DspRemoteInputConsole
;
2549 extern PVOID DspLocalInputConsole
;
2550 extern WCHAR BlScratchBuffer
[8192];
2551 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedAllocated
;
2552 extern ULONGLONG BlpTimePerformanceFrequency
;
2553 extern LIST_ENTRY RegisteredFileSystems
;