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_ALLOCATE_FLAG 0x1000
95 #define BL_MM_ADD_DESCRIPTOR_UPDATE_LIST_POINTER_FLAG 0x2000
97 #define BL_MM_INCLUDE_MAPPED_ALLOCATED 0x01
98 #define BL_MM_INCLUDE_MAPPED_UNALLOCATED 0x02
99 #define BL_MM_INCLUDE_UNMAPPED_ALLOCATED 0x04
100 #define BL_MM_INCLUDE_UNMAPPED_UNALLOCATED 0x08
101 #define BL_MM_INCLUDE_RESERVED_ALLOCATED 0x10
102 #define BL_MM_INCLUDE_BAD_MEMORY 0x20
103 #define BL_MM_INCLUDE_FIRMWARE_MEMORY 0x40
104 #define BL_MM_INCLUDE_TRUNCATED_MEMORY 0x80
105 #define BL_MM_INCLUDE_PERSISTENT_MEMORY 0x100
106 #define BL_MM_INCLUDE_FIRMWARE_MEMORY_2 0x200
108 #define BL_MM_INCLUDE_NO_FIRMWARE_MEMORY (BL_MM_INCLUDE_PERSISTENT_MEMORY | \
109 BL_MM_INCLUDE_TRUNCATED_MEMORY | \
110 BL_MM_INCLUDE_BAD_MEMORY | \
111 BL_MM_INCLUDE_RESERVED_ALLOCATED | \
112 BL_MM_INCLUDE_UNMAPPED_UNALLOCATED | \
113 BL_MM_INCLUDE_UNMAPPED_ALLOCATED | \
114 BL_MM_INCLUDE_MAPPED_UNALLOCATED | \
115 BL_MM_INCLUDE_MAPPED_ALLOCATED)
116 C_ASSERT(BL_MM_INCLUDE_NO_FIRMWARE_MEMORY
== 0x1BF);
118 #define BL_MM_INCLUDE_ONLY_FIRMWARE_MEMORY (BL_MM_INCLUDE_FIRMWARE_MEMORY_2 | \
119 BL_MM_INCLUDE_FIRMWARE_MEMORY)
120 C_ASSERT(BL_MM_INCLUDE_ONLY_FIRMWARE_MEMORY
== 0x240);
122 #define BL_MM_REQUEST_DEFAULT_TYPE 1
123 #define BL_MM_REQUEST_TOP_DOWN_TYPE 2
125 #define BL_MM_REMOVE_PHYSICAL_REGION_FLAG 0x40000000
126 #define BL_MM_REMOVE_VIRTUAL_REGION_FLAG 0x80000000
128 #define BL_LIBRARY_FLAG_NO_DISPLAY 0x01
129 #define BL_LIBRARY_FLAG_REINITIALIZE 0x02
130 #define BL_LIBRARY_FLAG_REINITIALIZE_ALL 0x04
131 #define BL_LIBRARY_FLAG_ZERO_HEAP_ALLOCATIONS_ON_FREE 0x10
132 #define BL_LIBRARY_FLAG_INITIALIZATION_COMPLETED 0x20
133 #define BL_LIBRARY_FLAG_NO_GRAPHICS_CONSOLE 0x800
135 #define BL_DISPLAY_GRAPHICS_FORCED_VIDEO_MODE_FLAG 0x01
136 #define BL_DISPLAY_GRAPHICS_FORCED_HIGH_RES_MODE_FLAG 0x02
138 #define BL_HT_VALUE_IS_INLINE 0x01
140 #define BL_FS_REGISTER_AT_HEAD_FLAG 1
142 #define BL_BLOCK_DEVICE_REMOVABLE_FLAG 0x01
143 #define BL_BLOCK_DEVICE_PRESENT_FLAG 0x02
144 #define BL_BLOCK_DEVICE_VIRTUAL_FLAG 0x04
146 #define BL_MEMORY_CLASS_SHIFT 28
148 #define BL_FILE_READ_ACCESS 0x01
149 #define BL_FILE_WRITE_ACCESS 0x02
150 #define BL_DIRECTORY_ACCESS 0x04
151 #define BL_UNKNOWN_ACCESS 0x10
153 #define BL_DEVICE_READ_ACCESS 0x01
154 #define BL_DEVICE_WRITE_ACCESS 0x02
156 #define BL_DEVICE_ENTRY_OPENED 0x01
157 #define BL_DEVICE_ENTRY_READ_ACCESS 0x02
158 #define BL_DEVICE_ENTRY_WRITE_ACCESS 0x04
160 #define BL_FILE_ENTRY_OPENED 0x01
161 #define BL_FILE_ENTRY_READ_ACCESS 0x02
162 #define BL_FILE_ENTRY_WRITE_ACCESS 0x04
163 #define BL_FILE_ENTRY_UNKNOWN_ACCESS 0x10
164 #define BL_FILE_ENTRY_DIRECTORY 0x10000
166 #define BL_ETFS_FILE_ENTRY_DIRECTORY 0x01
168 #define BL_IMG_VALID_FILE 0x01
169 #define BL_IMG_MEMORY_FILE 0x02
170 #define BL_IMG_REMOTE_FILE 0x04
172 #define BL_LOAD_IMG_VIRTUAL_BUFFER 0x01
173 #define BL_LOAD_IMG_EXISTING_BUFFER 0x04
174 #define BL_LOAD_IMG_UNKNOWN_BUFFER_FLAG 0x08
175 #define BL_LOAD_IMG_COMPUTE_SIGNATURE 0x10
176 #define BL_LOAD_IMG_COMPUTE_HASH 0x40000
178 #define BL_LOAD_PE_IMG_VIRTUAL_BUFFER BL_LOAD_IMG_VIRTUAL_BUFFER
179 #define BL_LOAD_PE_IMG_CHECK_MACHINE 0x02
180 #define BL_LOAD_PE_IMG_EXISTING_BUFFER BL_LOAD_IMG_EXISTING_BUFFER
181 #define BL_LOAD_PE_IMG_COMPUTE_HASH 0x10
182 #define BL_LOAD_PE_IMG_CHECK_SUBSYSTEM 0x80
183 #define BL_LOAD_PE_IMG_SKIP_RELOCATIONS 0x100
184 #define BL_LOAD_PE_IMG_CHECK_FORCED_INTEGRITY 0x200
185 #define BL_LOAD_PE_IMG_IGNORE_CHECKSUM_MISMATCH 0x10000
186 #define BL_LOAD_PE_IMG_VALIDATE_ORIGINAL_FILENAME 0x400000
188 #define BL_UTL_CHECKSUM_COMPLEMENT 0x10000
189 #define BL_UTL_CHECKSUM_ROTATE 0x20000
190 #define BL_UTL_CHECKSUM_NEGATE 0x40000
191 #define BL_UTL_CHECKSUM_UCHAR_BUFFER 0x01
192 #define BL_UTL_CHECKSUM_USHORT_BUFFER 0x02
194 /* ENUMERATIONS **************************************************************/
196 typedef enum _BL_COLOR
214 } BL_COLOR
, *PBL_COLOR
;
216 typedef enum _BL_MENU_POLICY
218 MenuPolicyLegacy
= 0,
219 MenuPolicyStandard
= 1
222 typedef enum _BL_MEMORY_DESCRIPTOR_TYPE
227 } BL_MEMORY_DESCRIPTOR_TYPE
;
229 typedef enum _BL_TRANSLATION_TYPE
235 } BL_TRANSLATION_TYPE
;
237 typedef enum _BL_ARCH_MODE
246 typedef enum _BL_DEVICE_TYPE
249 LegacyPartitionDevice
= 2,
258 // Local Device Types
260 typedef enum _BL_LOCAL_DEVICE_TYPE
267 VirtualDiskDevice
= 6
268 } BL_LOCAL_DEVICE_TYPE
;
273 typedef enum _BL_PARTITION_TYPE
283 typedef enum _BL_PATH_TYPE
292 typedef enum _BL_MEMORY_CLASS
302 typedef enum _BL_MEMORY_TYPE
307 BlLoaderMemory
= 0xD0000002,
308 BlLoaderDeviceMemory
= 0xD0000004,
309 BlLoaderHeap
= 0xD0000005,
310 BlLoaderPageDirectory
= 0xD0000006,
311 BlLoaderReferencePage
= 0xD0000007,
312 BlLoaderRamDisk
= 0xD0000008,
313 BlLoaderArchData
= 0xD0000009,
314 BlLoaderData
= 0xD000000A,
315 BlLoaderRegistry
= 0xD000000B,
316 BlLoaderBlockMemory
= 0xD000000C,
317 BlLoaderSelfMap
= 0xD000000F,
320 // Application Memory
322 BlApplicationReserved
= 0xE0000001,
323 BlApplicationData
= 0xE0000004,
328 BlConventionalMemory
= 0xF0000001,
329 BlUnusableMemory
= 0xF0000002,
330 BlReservedMemory
= 0xF0000003,
331 BlEfiBootMemory
= 0xF0000004,
332 BlConventionalZeroedMemory
= 0xF000005,
333 BlEfiRuntimeCodeMemory
= 0xF0000006,
334 BlAcpiReclaimMemory
= 0xF0000008,
335 BlAcpiNvsMemory
= 0xF0000009,
336 BlDeviceIoMemory
= 0xF000000A,
337 BlDevicePortMemory
= 0xF000000B,
338 BlPalMemory
= 0xF000000C,
339 BlEfiRuntimeDataMemory
= 0xF000000E,
342 typedef enum _BL_MEMORY_ATTR
345 // Memory Caching Attributes
347 BlMemoryUncached
= 0x00000001,
348 BlMemoryWriteCombined
= 0x00000002,
349 BlMemoryWriteThrough
= 0x00000004,
350 BlMemoryWriteBack
= 0x00000008,
351 BlMemoryUncachedExported
= 0x00000010,
352 BlMemoryValidCacheAttributes
= BlMemoryUncached
| BlMemoryWriteCombined
| BlMemoryWriteThrough
| BlMemoryWriteBack
| BlMemoryUncachedExported
,
353 BlMemoryValidCacheAttributeMask
= 0x000000FF,
356 // Memory Protection Attributes
358 BlMemoryWriteProtected
= 0x00000100,
359 BlMemoryReadProtected
= 0x00000200,
360 BlMemoryExecuteProtected
= 0x00000400,
361 BlMemoryValidProtectionAttributes
= BlMemoryWriteProtected
| BlMemoryReadProtected
| BlMemoryExecuteProtected
,
362 BlMemoryValidProtectionAttributeMask
= 0x0000FF00,
365 // Memory Allocation Attributes
367 BlMemoryLargePages
= 0x00010000,
368 BlMemoryKernelRange
= 0x00020000,
369 BlMemoryFixed
= 0x00040000,
370 BlMemoryBelow1MB
= 0x00080000,
371 BlMemoryValidAllocationAttributes
= BlMemoryKernelRange
| BlMemoryFixed
| BlMemoryBelow1MB
| BlMemoryLargePages
,
372 BlMemoryValidAllocationAttributeMask
= 0x00FF0000,
375 // Memory Type Attributes
377 BlMemoryRuntime
= 0x01000000,
378 BlMemoryCoalesced
= 0x02000000,
379 BlMemoryUpdate
= 0x04000000,
380 BlMemoryNonFirmware
= 0x08000000,
381 BlMemoryPersistent
= 0x10000000,
382 BlMemorySpecial
= 0x20000000,
383 BlMemoryFirmware
= 0x80000000,
384 BlMemoryValidTypeAttributes
= BlMemoryRuntime
| BlMemoryCoalesced
| BlMemoryUpdate
| BlMemoryNonFirmware
| BlMemoryPersistent
| BlMemorySpecial
| BlMemoryFirmware
,
385 BlMemoryValidTypeAttributeMask
= 0xFF000000,
388 /* CALLBACKS *****************************************************************/
390 struct _BL_FILE_ENTRY
;
391 struct _BL_FILE_INFORMATION
;
395 _In_
struct _BL_FILE_ENTRY
* Directory
,
396 _In_ PWCHAR FileName
,
398 _Out_
struct _BL_FILE_ENTRY
** FileEntry
404 _In_
struct _BL_FILE_ENTRY
* FileEntry
410 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
413 _Out_opt_ PULONG BytesRead
424 (*PBL_FILE_GET_NEXT
) (
430 (*PBL_FILE_GET_INFO
) (
431 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
432 _Out_
struct _BL_FILE_INFORMATION
* FileInfo
437 (*PBL_FILE_SET_INFO
) (
438 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
439 _In_
struct _BL_FILE_INFORMATION
* FileInfo
444 (*PBL_FS_INIT_CALLBACK
) (
450 (*PBL_FS_DESTROY_CALLBACK
) (
456 (*PBL_FS_MOUNT_CALLBACK
) (
459 _Out_
struct _BL_FILE_ENTRY
** FileEntry
464 (*PBL_FS_PURGE_CALLBACK
) (
470 (*PBL_FILE_DESTROY_CALLBACK
) (
474 struct _BL_TEXT_CONSOLE
;
475 struct _BL_DISPLAY_STATE
;
476 struct _BL_DISPLAY_MODE
;
477 struct _BL_INPUT_CONSOLE
;
478 struct _BL_REMOTE_CONSOLE
;
479 struct _BL_GRAPHICS_CONSOLE
;
482 (*PCONSOLE_DESTRUCT
) (
483 _In_
struct _BL_TEXT_CONSOLE
* Console
488 (*PCONSOLE_REINITIALIZE
) (
489 _In_
struct _BL_TEXT_CONSOLE
* Console
494 (*PCONSOLE_GET_TEXT_STATE
) (
495 _In_
struct _BL_TEXT_CONSOLE
* Console
,
496 _Out_
struct _BL_DISPLAY_STATE
* TextState
501 (*PCONSOLE_SET_TEXT_STATE
) (
502 _In_
struct _BL_TEXT_CONSOLE
* Console
,
504 _In_
struct _BL_DISPLAY_STATE
* TextState
509 (*PCONSOLE_GET_TEXT_RESOLUTION
) (
510 _In_
struct _BL_TEXT_CONSOLE
* Console
,
511 _Out_ PULONG TextResolution
516 (*PCONSOLE_SET_TEXT_RESOLUTION
) (
517 _In_
struct _BL_TEXT_CONSOLE
* Console
,
518 _In_ ULONG NewTextResolution
,
519 _Out_ PULONG OldTextResolution
524 (*PCONSOLE_CLEAR_TEXT
) (
525 _In_
struct _BL_TEXT_CONSOLE
* Console
,
526 _In_ BOOLEAN LineOnly
531 (*PCONSOLE_IS_ENABLED
) (
532 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
537 (*PCONSOLE_GET_GRAPHICAL_RESOLUTION
) (
538 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
539 _Out_
struct _BL_DISPLAY_MODE
* DisplayMode
544 (*PCONSOLE_SET_GRAPHICAL_RESOLUTION
) (
545 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
546 _In_
struct _BL_DISPLAY_MODE DisplayMode
552 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
558 (*PCONSOLE_WRITE_TEXT
) (
559 _In_
struct _BL_TEXT_CONSOLE
* Console
,
566 (*PBL_TBL_LOOKUP_ROUTINE
) (
568 _In_ PVOID Argument1
,
569 _In_ PVOID Argument2
,
570 _In_ PVOID Argument3
,
576 (*PBL_TBL_MAP_ROUTINE
) (
578 _In_ ULONG EntryIndex
583 (*PBL_TBL_SET_ROUTINE
) (
589 (*PBL_IO_DESTROY_ROUTINE
) (
593 struct _BL_HASH_ENTRY
;
596 (*PBL_HASH_TABLE_COMPARE_FUNCTION
) (
597 _In_
struct _BL_HASH_ENTRY
* Entry1
,
598 _In_
struct _BL_HASH_ENTRY
* Entry2
603 (*PBL_HASH_TABLE_HASH_FUNCTION
) (
604 _In_
struct _BL_HASH_ENTRY
* Entry
,
608 struct _BL_DEVICE_ENTRY
;
609 struct _BL_DEVICE_DESCRIPTOR
;
610 struct _BL_DEVICE_INFORMATION
;
614 (*PBL_DEVICE_ENUMERATE_DEVICE_CLASS
) (
621 _In_
struct _BL_DEVICE_DESCRIPTOR
* Device
,
622 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
627 (*PBL_DEVICE_CLOSE
) (
628 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
634 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
637 _Out_ PULONG BytesRead
642 (*PBL_DEVICE_WRITE
) (
648 (*PBL_DEVICE_GET_INFORMATION
) (
649 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
650 _Out_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
655 (*PBL_DEVICE_SET_INFORMATION
) (
656 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
657 _In_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
662 (*PBL_DEVICE_RESET
) (
668 (*PBL_DEVICE_FLUSH
) (
674 (*PBL_DEVICE_CREATE
) (
679 (*PBL_MM_FLUSH_TLB
) (
684 (*PBL_MM_RELOCATE_SELF_MAP
) (
689 (*PBL_MM_MOVE_VIRTUAL_ADDRESS_RANGE
) (
690 _In_ PVOID DestinationAddress
,
691 _In_ PVOID SourceAddress
,
696 (*PBL_MM_ZERO_VIRTUAL_ADDRESS_RANGE
) (
697 _In_ PVOID DestinationAddress
,
702 (*PBL_MM_DESTROY_SELF_MAP
) (
707 (*PBL_MM_FLUSH_TLB_ENTRY
) (
708 _In_ PVOID VirtualAddress
712 (*PBL_MM_FLUSH_TLB
) (
717 (*PBL_MM_UNMAP_VIRTUAL_ADDRESS
) (
718 _In_ PVOID VirtualAddress
,
723 (*PBL_MM_REMAP_VIRTUAL_ADDRESS
) (
724 _In_ PPHYSICAL_ADDRESS PhysicalAddress
,
725 _Out_ PVOID VirtualAddress
,
727 _In_ ULONG CacheAttributes
731 (*PBL_MM_MAP_PHYSICAL_ADDRESS
) (
732 _In_ PHYSICAL_ADDRESS PhysicalAddress
,
733 _Out_ PVOID VirtualAddress
,
735 _In_ ULONG CacheAttributes
739 (*PBL_MM_TRANSLATE_VIRTUAL_ADDRESS
) (
740 _In_ PVOID VirtualAddress
,
741 _Out_ PPHYSICAL_ADDRESS PhysicalAddress
,
742 _Out_opt_ PULONG CacheAttributes
746 (*PBL_STATUS_ERROR_HANDLER
) (
747 _In_ ULONG ErrorCode
,
748 _In_ ULONG Parameter1
,
749 _In_ ULONG_PTR Parameter2
,
750 _In_ ULONG_PTR Parameter3
,
751 _In_ ULONG_PTR Parameter4
754 /* DATA STRUCTURES ***********************************************************/
756 typedef struct _BL_LIBRARY_PARAMETERS
759 ULONG TranslationType
;
760 ULONG MinimumAllocationCount
;
761 ULONG MinimumHeapSize
;
762 ULONG HeapAllocationAttributes
;
763 PWCHAR ApplicationBaseDirectory
;
764 ULONG DescriptorCount
;
765 PWCHAR FontBaseDirectory
;
766 } BL_LIBRARY_PARAMETERS
, *PBL_LIBRARY_PARAMETERS
;
768 /* This should eventually go into a more public header */
769 typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK
771 /* This header tells the library what image we're dealing with */
776 ULONG MemoryTranslationType
;
778 /* Where is the image located */
782 /* Offset to BL_MEMORY_DATA */
783 ULONG MemoryDataOffset
;
785 /* Offset to BL_APPLICATION_ENTRY */
786 ULONG AppEntryOffset
;
788 /* Offset to BL_DEVICE_DESCRPIPTOR */
789 ULONG BootDeviceOffset
;
791 /* Offset to BL_FIRMWARE_PARAMETERS */
792 ULONG FirmwareParametersOffset
;
794 /* Offset to BL_RETURN_ARGUMENTS */
795 ULONG ReturnArgumentsOffset
;
796 } BOOT_APPLICATION_PARAMETER_BLOCK
, *PBOOT_APPLICATION_PARAMETER_BLOCK
;
798 typedef struct _BL_MEMORY_DATA
802 ULONG DescriptorCount
;
803 ULONG DescriptorSize
;
804 ULONG DescriptorOffset
;
805 } BL_MEMORY_DATA
, *PBL_MEMORY_DATA
;
807 typedef struct _BL_FIRMWARE_DESCRIPTOR
811 EFI_HANDLE ImageHandle
;
812 EFI_SYSTEM_TABLE
*SystemTable
;
813 } BL_FIRMWARE_DESCRIPTOR
, *PBL_FIRMWARE_DESCRIPTOR
;
815 typedef struct _BL_RETURN_ARGUMENTS
822 } BL_RETURN_ARGUMENTS
, *PBL_RETURN_ARGUMENTS
;
824 typedef struct _BL_MEMORY_DESCRIPTOR
826 LIST_ENTRY ListEntry
;
832 ULONGLONG VirtualPage
;
836 ULONGLONG BaseAddress
;
837 ULONGLONG VirtualAddress
;
843 } BL_MEMORY_DESCRIPTOR
, *PBL_MEMORY_DESCRIPTOR
;
845 typedef struct _BL_BCD_OPTION
851 ULONG NextEntryOffset
;
853 } BL_BCD_OPTION
, *PBL_BCD_OPTION
;
855 typedef struct _BL_APPLICATION_ENTRY
861 BL_BCD_OPTION BcdData
;
862 } BL_APPLICATION_ENTRY
, *PBL_APPLICATION_ENTRY
;
864 typedef struct _BL_LOADED_APPLICATION_ENTRY
868 PBL_BCD_OPTION BcdData
;
869 } BL_LOADED_APPLICATION_ENTRY
, *PBL_LOADED_APPLICATION_ENTRY
;
871 typedef struct _BL_MENU_STATUS
878 ULONG AdvancedOptions
: 1;
879 ULONG BootOptions
: 1;
888 } BL_MENU_STATUS
, *PL_MENU_STATUS
;
890 typedef enum _BL_BOOT_ERROR_STATUS
900 } BL_BOOT_ERROR_STATUS
;
902 typedef struct _BL_HARDDISK_DEVICE
909 ULONG PartitionSignature
;
914 GUID PartitionSignature
;
922 } BL_HARDDISK_DEVICE
;
924 typedef struct _BL_LOCAL_DEVICE
926 BL_LOCAL_DEVICE_TYPE Type
;
934 BL_HARDDISK_DEVICE HardDisk
;
936 BL_HARDDISK_DEVICE VirtualHardDisk
;
940 PHYSICAL_ADDRESS ImageBase
;
941 LARGE_INTEGER ImageSize
;
945 ULONG File
; // unknown for now
947 } BL_LOCAL_DEVICE
, *PBL_LOCAL_DEVICE
;
949 typedef struct _BL_DEVICE_DESCRIPTOR
951 DEVICE_TYPE DeviceType
;
957 BL_LOCAL_DEVICE Local
;
968 ULONG PartitionNumber
;
976 BL_LOCAL_DEVICE Disk
;
979 } BL_DEVICE_DESCRIPTOR
, *PBL_DEVICE_DESCRIPTOR
;
981 typedef struct _BL_FILE_PATH_DESCRIPTOR
986 UCHAR Path
[ANYSIZE_ARRAY
];
987 } BL_FILE_PATH_DESCRIPTOR
, *PBL_FILE_PATH_DESCRIPTOR
;
989 typedef struct _BL_WINDOWS_LOAD_OPTIONS
995 WCHAR LoadOptions
[ANYSIZE_ARRAY
];
996 } BL_WINDOWS_LOAD_OPTIONS
, *PBL_WINDOWS_LOAD_OPTIONS
;
998 typedef struct _BL_ARCH_CONTEXT
1001 BL_TRANSLATION_TYPE TranslationType
;
1003 } BL_ARCH_CONTEXT
, *PBL_ARCH_CONTEXT
;
1005 typedef struct _BL_MEMORY_DESCRIPTOR_LIST
1007 LIST_ENTRY ListHead
;
1011 } BL_MEMORY_DESCRIPTOR_LIST
, *PBL_MEMORY_DESCRIPTOR_LIST
;
1013 typedef struct _BL_ADDRESS_RANGE
1017 } BL_ADDRESS_RANGE
, *PBL_ADDRESS_RANGE
;
1019 typedef struct _BL_FILE_INFORMATION
1025 } BL_FILE_INFORMATION
, *PBL_FILE_INFORMATION
;
1027 typedef struct _BL_FILE_CALLBACKS
1030 PBL_FILE_CLOSE Close
;
1032 PBL_FILE_WRITE Write
;
1033 PBL_FILE_GET_NEXT GetNext
;
1034 PBL_FILE_GET_INFO GetInfo
;
1035 PBL_FILE_SET_INFO SetInfo
;
1036 } BL_FILE_CALLBACKS
, *PBL_FILE_CALLBACKS
;
1038 typedef struct _BL_FILE_ENTRY
1044 ULONG ReferenceCount
;
1046 ULONGLONG TotalBytesRead
;
1048 BL_FILE_CALLBACKS Callbacks
;
1049 PVOID FsSpecificData
;
1050 } BL_FILE_ENTRY
, *PBL_FILE_ENTRY
;
1052 typedef struct _BL_FILE_SYSTEM_ENTRY
1054 LIST_ENTRY ListEntry
;
1055 PBL_FS_INIT_CALLBACK InitCallback
;
1056 PBL_FS_DESTROY_CALLBACK DestroyCallback
;
1057 PBL_FS_MOUNT_CALLBACK MountCallback
;
1058 PBL_FS_PURGE_CALLBACK PurgeCallback
;
1059 } BL_FILE_SYSTEM_ENTRY
, *PBL_FILE_SYSTEM_ENTRY
;
1061 typedef struct _BL_FILE_SYSTEM_REGISTRATION_TABLE
1063 PBL_FS_INIT_CALLBACK Init
;
1064 PBL_FS_DESTROY_CALLBACK Destroy
;
1065 PBL_FS_MOUNT_CALLBACK Mount
;
1066 PBL_FS_PURGE_CALLBACK Purge
;
1067 } BL_FILE_SYSTEM_REGISTRATION_TABLE
;
1069 typedef struct _BL_DISPLAY_STATE
1075 ULONG CursorVisible
;
1076 } BL_DISPLAY_STATE
, *PBL_DISPLAY_STATE
;
1078 typedef struct _BL_DISPLAY_MODE
1083 } BL_DISPLAY_MODE
, *PBL_DISPLAY_MODE
;
1085 typedef struct _BL_TEXT_CONSOLE_VTABLE
1087 PCONSOLE_DESTRUCT Destruct
;
1088 PCONSOLE_REINITIALIZE Reinitialize
;
1089 PCONSOLE_GET_TEXT_STATE GetTextState
;
1090 PCONSOLE_SET_TEXT_STATE SetTextState
;
1091 PCONSOLE_GET_TEXT_RESOLUTION GetTextResolution
;
1092 PCONSOLE_SET_TEXT_RESOLUTION SetTextResolution
;
1093 PCONSOLE_CLEAR_TEXT ClearText
;
1094 PCONSOLE_WRITE_TEXT WriteText
;
1095 } BL_TEXT_CONSOLE_VTABLE
, *PBL_TEXT_CONSOLE_VTABLE
;
1097 typedef struct _BL_GRAPHICS_CONSOLE_VTABLE
1099 BL_TEXT_CONSOLE_VTABLE Text
;
1100 PCONSOLE_IS_ENABLED IsEnabled
;
1101 PCONSOLE_ENABLE Enable
;
1102 PVOID GetConsoleResolution
;
1103 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetGraphicalResolution
;
1104 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetOriginalResolution
;
1105 PCONSOLE_SET_GRAPHICAL_RESOLUTION SetOriginalResolution
;
1106 /// more for graphics ///
1107 } BL_GRAPHICS_CONSOLE_VTABLE
, *PBL_GRAPHICS_CONSOLE_VTABLE
;
1109 typedef struct _BL_TEXT_CONSOLE
1111 PBL_TEXT_CONSOLE_VTABLE Callbacks
;
1112 BL_DISPLAY_STATE State
;
1113 BL_DISPLAY_MODE DisplayMode
;
1115 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
* Protocol
;
1117 EFI_SIMPLE_TEXT_OUTPUT_MODE OldMode
;
1118 } BL_TEXT_CONSOLE
, *PBL_TEXT_CONSOLE
;
1120 typedef struct _BL_INPUT_CONSOLE_VTABLE
1122 PCONSOLE_DESTRUCT Destruct
;
1123 PCONSOLE_REINITIALIZE Reinitialize
;
1124 //PCONSOLE_IS_KEY_PENDING IsKeyPending;
1125 //PCONSOLE_READ_INPUT ReadInput;
1126 //PCONSOLE_ERASE_BUFFER EraseBuffer;
1127 //PCONSOLE_FILL_BUFFER FillBuffer;
1128 } BL_INPUT_CONSOLE_VTABLE
, *PBL_INPUT_CONSOLE_VTABLE
;
1130 typedef struct _BL_INPUT_CONSOLE
1132 PBL_INPUT_CONSOLE_VTABLE Callbacks
;
1137 } BL_INPUT_CONSOLE
, *PBL_INPUT_CONSOLE
;
1139 typedef enum _BL_GRAPHICS_CONSOLE_TYPE
1143 } BL_GRAPHICS_CONSOLE_TYPE
;
1145 typedef struct _BL_GRAPHICS_CONSOLE
1147 BL_TEXT_CONSOLE TextConsole
;
1148 BL_DISPLAY_MODE DisplayMode
;
1152 BL_DISPLAY_MODE OldDisplayMode
;
1153 ULONG OldPixelDepth
;
1155 BL_GRAPHICS_CONSOLE_TYPE Type
;
1156 EFI_GRAPHICS_OUTPUT_PROTOCOL
* Protocol
;
1158 ULONG FrameBufferSize
;
1159 ULONG PixelsPerScanLine
;
1162 } BL_GRAPHICS_CONSOLE
, *PBL_GRAPHICS_CONSOLE
;
1164 typedef struct _BL_REMOTE_CONSOLE
1166 BL_TEXT_CONSOLE TextConsole
;
1167 } BL_REMOTE_CONSOLE
, *PBL_REMOTE_CONSOLE
;
1169 typedef struct _BL_HASH_TABLE
1171 PLIST_ENTRY HashLinks
;
1173 PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
;
1174 PBL_HASH_TABLE_HASH_FUNCTION HashFunction
;
1175 } BL_HASH_TABLE
, *PBL_HASH_TABLE
;
1177 typedef struct _BL_HASH_ENTRY
1182 } BL_HASH_ENTRY
, *PBL_HASH_ENTRY
;
1184 typedef struct _BL_HASH_VALUE
1188 } BL_HASH_VALUE
, *PBL_HASH_VALUE
;
1190 typedef struct _BL_HASH_NODE
1192 LIST_ENTRY ListEntry
;
1193 BL_HASH_ENTRY Entry
;
1194 BL_HASH_VALUE Value
;
1195 } BL_HASH_NODE
, *PBL_HASH_NODE
;
1197 typedef struct _BL_BLOCK_DEVICE_INFORMATION
1199 BL_LOCAL_DEVICE_TYPE Type
;
1202 BL_PARTITION_TYPE PartitionType
;
1205 ULONGLONG LastBlock
;
1222 } BL_BLOCK_DEVICE_INFORMATION
, *PBL_BLOCK_DEVICE_INFORMATION
;
1224 typedef struct _BL_DEVICE_INFORMATION
1226 BL_DEVICE_TYPE DeviceType
;
1229 BL_BLOCK_DEVICE_INFORMATION BlockDeviceInfo
;
1231 } BL_DEVICE_INFORMATION
, *PBL_DEVICE_INFORMATION
;
1233 typedef struct _BL_BLOCK_DEVICE
1235 BL_BLOCK_DEVICE_INFORMATION
;
1236 ULONGLONG StartOffset
;
1237 EFI_BLOCK_IO
* Protocol
;
1239 } BL_BLOCK_DEVICE
, *PBL_BLOCK_DEVICE
;
1241 typedef struct _BL_PROTOCOL_HANDLE
1245 } BL_PROTOCOL_HANDLE
, *PBL_PROTOCOL_HANDLE
;
1247 typedef struct _BL_DEVICE_CALLBACKS
1249 PBL_DEVICE_ENUMERATE_DEVICE_CLASS EnumerateDeviceClass
;
1250 PBL_DEVICE_OPEN Open
;
1251 PBL_DEVICE_CLOSE Close
;
1252 PBL_DEVICE_READ Read
;
1253 PBL_DEVICE_WRITE Write
;
1254 PBL_DEVICE_GET_INFORMATION GetInformation
;
1255 PBL_DEVICE_SET_INFORMATION SetInformation
;
1256 PBL_DEVICE_RESET Reset
;
1257 PBL_DEVICE_FLUSH Flush
;
1258 PBL_DEVICE_CREATE Create
;
1259 } BL_DEVICE_CALLBACKS
, *PBL_DEVICE_CALLBACKS
;
1261 typedef struct _BL_DEVICE_ENTRY
1266 ULONG ReferenceCount
;
1267 BL_DEVICE_CALLBACKS Callbacks
;
1268 PVOID DeviceSpecificData
;
1269 PBL_DEVICE_DESCRIPTOR DeviceDescriptor
;
1270 } BL_DEVICE_ENTRY
, *PBL_DEVICE_ENTRY
;
1272 typedef struct _BL_IMG_FILE
1282 } BL_IMG_FILE
, *PBL_IMG_FILE
;
1284 typedef struct _BL_IMAGE_APPLICATION_ENTRY
1286 PBL_APPLICATION_ENTRY AppEntry
;
1289 } BL_IMAGE_APPLICATION_ENTRY
, *PBL_IMAGE_APPLICATION_ENTRY
;
1291 typedef struct _BL_BUFFER_DESCRIPTOR
1296 } BL_BUFFER_DESCRIPTOR
, *PBL_BUFFER_DESCRIPTOR
;
1298 typedef struct _BL_DEFERRED_FONT_FILE
1300 LIST_ENTRY ListEntry
;
1302 PBL_DEVICE_DESCRIPTOR Device
;
1304 } BL_DEFERRED_FONT_FILE
, *PBL_DEFERRED_FONT_FILE
;
1308 typedef struct _BMP_HEADER
1314 } BMP_HEADER
, *PBMP_HEADER
;
1316 typedef struct _DIB_HEADER
1325 ULONG XPelsPerMeter
;
1326 ULONG YPelsPerMEter
;
1329 } DIB_HEADER
, *PDIB_HEADER
;
1331 typedef struct _BITMAP
1333 BMP_HEADER BmpHeader
;
1334 DIB_HEADER DibHeader
;
1338 typedef struct _COORD
1344 typedef struct _BL_PD_DATA_BLOB
1349 } BL_PD_DATA_BLOB
, *PBL_PD_DATA_BLOB
;
1351 /* INLINE ROUTINES ***********************************************************/
1355 BlSetupDefaultParameters (
1356 _Out_ PBL_LIBRARY_PARAMETERS LibraryParameters
1359 BL_LIBRARY_PARAMETERS DefaultParameters
=
1371 /* Copy the defaults */
1372 RtlCopyMemory(LibraryParameters
, &DefaultParameters
, sizeof(*LibraryParameters
));
1377 MmMdInitializeListHead (
1378 _In_ PBL_MEMORY_DESCRIPTOR_LIST List
1381 /* Initialize the list */
1382 InitializeListHead(&List
->ListHead
);
1383 List
->First
= &List
->ListHead
;
1390 PhysicalAddressToPtr (
1391 _In_ PHYSICAL_ADDRESS PhysicalAddress
)
1393 return (PVOID
)(ULONG_PTR
)PhysicalAddress
.QuadPart
;
1396 /* INITIALIZATION ROUTINES ***************************************************/
1399 BlInitializeLibrary(
1400 _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters
,
1401 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1412 _In_ PBL_FIRMWARE_DESCRIPTOR FirmwareParameters
1417 _In_ PBL_MEMORY_DATA MemoryData
,
1418 _In_ BL_TRANSLATION_TYPE TranslationType
,
1419 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1429 _In_ PBL_MEMORY_DATA MemoryData
,
1430 _In_ ULONG MinimumPages
1436 _In_ PBL_MEMORY_DATA MemoryData
,
1437 _In_ BL_TRANSLATION_TYPE TranslationType
,
1438 _In_ BL_TRANSLATION_TYPE LibraryTranslationType
1443 _In_ ULONG HeapSize
,
1444 _In_ ULONG HeapAttributes
1450 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1454 BlpDeviceInitialize (
1469 BlpDisplayInitialize (
1474 BlpDisplayReinitialize (
1488 /* FIRMWARE ROUTINES *********************************************************/
1498 _In_ PBL_FIRMWARE_DESCRIPTOR Parameters
1502 BlFwEnumerateDevice (
1503 _In_ PBL_DEVICE_DESCRIPTOR Device
1510 _Inout_ EFI_PHYSICAL_ADDRESS
* Memory
1515 _In_ ULONG StallTime
1529 EfiConOutOutputString (
1530 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1535 EfiConOutQueryMode (
1536 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1538 _In_ UINTN
* Columns
,
1544 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1549 EfiConOutReadCurrentMode (
1550 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1551 _Out_ EFI_SIMPLE_TEXT_OUTPUT_MODE
* Mode
1555 EfiConOutSetAttribute (
1556 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1557 _In_ ULONG Attribute
1561 EfiConOutSetCursorPosition (
1562 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1568 EfiConOutEnableCursor (
1569 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1570 _In_ BOOLEAN Visible
1574 EfiLocateHandleBuffer (
1575 _In_ EFI_LOCATE_SEARCH_TYPE SearchType
,
1576 _In_ EFI_GUID
*Protocol
,
1577 _Inout_ PULONG HandleCount
,
1578 _Inout_ EFI_HANDLE
** Buffer
1583 _In_ EFI_HANDLE Handle
,
1584 _In_ EFI_GUID
*Protocol
,
1585 _Out_ PVOID
* Interface
1590 _In_ EFI_HANDLE Handle
,
1591 _In_ EFI_GUID
*Protocol
1595 EfiGopGetCurrentMode (
1596 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1598 _Out_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
*Information
1603 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1608 EfiGopGetFrameBuffer (
1609 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1610 _Out_ PHYSICAL_ADDRESS
* FrameBuffer
,
1611 _Out_ UINTN
*FrameBufferSize
1616 _In_ EFI_RESET_TYPE ResetType
1621 _In_ EFI_DEVICE_PATH
*DevicePath
1625 EfiIsDevicePathParent (
1626 _In_ EFI_DEVICE_PATH
*DevicePath1
,
1627 _In_ EFI_DEVICE_PATH
*DevicePath2
1632 _Out_ PPHYSICAL_ADDRESS FoundRsdt
1638 _In_ EFI_PHYSICAL_ADDRESS PhysicalAddress
1641 /* PLATFORM TIMER ROUTINES ***************************************************/
1644 BlpTimeCalibratePerformanceCounter (
1649 BlTimeQueryPerformanceCounter (
1650 _Out_opt_ PLARGE_INTEGER Frequency
1654 BlArchGetPerformanceCounter (
1658 /* RESOURCE LOCALE INTERNATIONALIZATION ROUTINES *****************************/
1661 BlpDisplayRegisterLocale (
1665 /* FONT ROUTINES *************************************************************/
1668 BfiFreeDeferredFontFile (
1669 _In_ PBL_DEFERRED_FONT_FILE DeferredFontFile
1674 _In_ PBL_DEVICE_DESCRIPTOR Device
,
1675 _In_ PWCHAR FontPath
1679 BfLoadDeferredFontFiles (
1685 _In_ PBL_GRAPHICS_CONSOLE Console
1689 BfClearToEndOfLine (
1690 _In_ PBL_GRAPHICS_CONSOLE Console
1693 /* FILESYSTEM ROUTINES *******************************************************/
1702 _In_ ULONG DeviceId
,
1704 _Out_ PBL_FILE_ENTRY
* FileEntry
1714 _In_ ULONG DeviceId
,
1716 _Out_ PBL_FILE_ENTRY
* FileEntry
1719 /* DEBUG ROUTINES ************************************************************/
1722 BlBdDebuggerEnabled (
1727 BlBdPullRemoteFile (
1728 _In_ PWCHAR FilePath
,
1729 _Out_ PVOID BaseAddress
,
1730 _Out_ PULONGLONG FileSize
1741 _In_ ULONG ErrorCode
,
1742 _In_ ULONG Parameter1
,
1743 _In_ ULONG_PTR Parameter2
,
1744 _In_ ULONG_PTR Parameter3
,
1745 _In_ ULONG_PTR Parameter4
1748 /* UTILITY ROUTINES **********************************************************/
1752 _In_ ULONG Function
,
1753 _In_ ULONG SubFunction
,
1754 _Out_ PCPU_INFO Result
1758 BlArchGetCpuVendor (
1763 BlArchIsCpuIdFunctionSupported (
1768 BlUtlUpdateProgress (
1769 _In_ ULONG Percentage
,
1770 _Out_opt_ PBOOLEAN Completed
1775 _Out_ PVOID
* TableAddress
,
1776 _In_ ULONG Signature
1785 BlUtlRegisterProgressRoutine (
1791 _In_ ULONG PartialSum
,
1798 BlGetApplicationBaseAndSize (
1799 _Out_ PVOID
* ImageBase
,
1800 _Out_ PULONG ImageSize
1804 BlDestroyBootEntry (
1805 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
1810 _In_
const GUID
* DataGuid
,
1812 _Inout_ PBL_PD_DATA_BLOB DataBlob
1815 /* FIRMWARE UTILITY ROUTINES *************************************************/
1818 EfiGetEfiStatusCode(
1819 _In_ NTSTATUS Status
1823 EfiGetNtStatusCode (
1824 _In_ EFI_STATUS EfiStatus
1834 _In_ ULONG BasePage
,
1835 _In_ ULONG PageCount
1839 BlGetApplicationIdentifier (
1844 BlpSecureBootEFIIsEnabled (
1849 BlSecureBootIsEnabled (
1850 _Out_ PBOOLEAN SecureBootEnabled
1854 BlSecureBootCheckForFactoryReset (
1858 /* RESOURCE ROUTINES *********************************************************/
1861 BlResourceFindMessage (
1866 BlResourceFindHtml (
1871 BlpResourceInitialize (
1875 /* TABLE ROUTINES ************************************************************/
1881 _In_ PBL_TBL_MAP_ROUTINE MapCallback
1888 _Out_ PULONG EntryIndex
,
1889 _In_ PBL_TBL_LOOKUP_ROUTINE Callback
,
1890 _In_ PVOID Argument1
,
1891 _In_ PVOID Argument2
,
1892 _In_ PVOID Argument3
,
1893 _In_ PVOID Argument4
1898 _Inout_ PVOID
** Table
,
1899 _Inout_ PULONG Count
,
1901 _Out_ PULONG EntryIndex
,
1902 _In_ PBL_TBL_SET_ROUTINE Callback
1906 TblDoNotPurgeEntry (
1910 /* HASH TABLE ROUTINES *******************************************************/
1915 _In_ PBL_HASH_ENTRY Entry
,
1923 _In_ PBL_HASH_ENTRY Entry
1929 _In_ PBL_HASH_ENTRY Entry
,
1930 _Out_ PBL_HASH_VALUE
*Value
1936 _In_ PBL_HASH_TABLE_HASH_FUNCTION HashFunction
,
1937 _In_ PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
,
1941 /* BCD OPTION ROUTINES *******************************************************/
1945 _In_ PBL_BCD_OPTION List
,
1950 BlGetBootOptionListSize (
1951 _In_ PBL_BCD_OPTION BcdOption
1955 BlGetBootOptionSize (
1956 _In_ PBL_BCD_OPTION BcdOption
1960 BlGetBootOptionString (
1961 _In_ PBL_BCD_OPTION List
,
1967 BlGetBootOptionInteger (
1968 _In_ PBL_BCD_OPTION List
,
1970 _Out_ PULONGLONG Value
1974 BlGetBootOptionBoolean (
1975 _In_ PBL_BCD_OPTION List
,
1977 _Out_ PBOOLEAN Value
1981 BlpGetBootOptionIntegerList (
1982 _In_ PBL_BCD_OPTION List
,
1984 _Out_ PULONGLONG
* Value
,
1985 _Out_ PULONGLONG Count
,
1990 BlGetBootOptionDevice (
1991 _In_ PBL_BCD_OPTION List
,
1993 _Out_ PBL_DEVICE_DESCRIPTOR
* Value
,
1994 _In_opt_ PBL_BCD_OPTION
* ExtraOptions
1998 BlGetBootOptionGuid (
1999 _In_ PBL_BCD_OPTION List
,
2005 BlGetBootOptionGuidList (
2006 _In_ PBL_BCD_OPTION List
,
2014 _In_ PBL_BCD_OPTION OptionList
,
2015 _Out_ PBL_BCD_OPTION
*CopiedOptions
2019 BlAppendBootOptionBoolean (
2020 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
2021 _In_ ULONG OptionId
,
2026 BlAppendBootOptionInteger (
2027 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
2028 _In_ ULONG OptionId
,
2029 _In_ ULONGLONG Value
2033 BlAppendBootOptionString (
2034 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
2035 _In_ ULONG OptionId
,
2036 _In_ PWCHAR OptionString
2040 BlAppendBootOptions (
2041 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
2042 _In_ PBL_BCD_OPTION Options
2046 BlRemoveBootOption (
2047 _In_ PBL_BCD_OPTION List
,
2052 BlReplaceBootOptions (
2053 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
2054 _In_ PBL_BCD_OPTION NewOptions
2057 /* BOOT REGISTRY ROUTINES ****************************************************/
2061 _In_ HANDLE KeyHandle
2066 _In_ HANDLE ParentHandle
,
2067 _In_ PWCHAR KeyName
,
2068 _Out_ PHANDLE Handle
2073 _In_ PBL_FILE_PATH_DESCRIPTOR FilePath
,
2074 _Out_ PHANDLE HiveHandle
2078 BiGetRegistryValue (
2079 _In_ HANDLE KeyHandle
,
2080 _In_ PWCHAR ValueName
,
2082 _Out_ PVOID
* Buffer
,
2083 _Out_ PULONG ValueLength
2087 BiEnumerateSubKeys (
2088 _In_ HANDLE KeyHandle
,
2089 _Out_ PWCHAR
** SubKeyList
,
2090 _Out_ PULONG SubKeyCount
2095 _In_ HANDLE KeyHandle
2100 _In_ HANDLE KeyHandle
2103 /* CONTEXT ROUTINES **********************************************************/
2106 BlpArchSwitchContext (
2107 _In_ BL_ARCH_MODE NewMode
2111 BlpArchEnableTranslation (
2116 Archx86TransferTo32BitApplicationAsm (
2120 /* MEMORY DESCRIPTOR ROUTINES ************************************************/
2124 _In_ PBL_MEMORY_DESCRIPTOR_LIST DescriptorList
,
2125 _In_opt_ ULONG MaxCount
2129 MmMdInitializeList (
2130 _In_ PBL_MEMORY_DESCRIPTOR_LIST DescriptorList
,
2132 _In_ PLIST_ENTRY ListHead
2135 PBL_MEMORY_DESCRIPTOR
2136 MmMdFindDescriptor (
2137 _In_ ULONG WhichList
,
2142 PBL_MEMORY_DESCRIPTOR
2143 MmMdFindDescriptorFromMdl (
2144 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2151 _In_ PBL_MEMORY_DESCRIPTOR_LIST DestinationList
,
2152 _In_ PBL_MEMORY_DESCRIPTOR_LIST SourceList
,
2153 _In_opt_ PBL_MEMORY_DESCRIPTOR ListDescriptor
,
2154 _Out_ PULONG ActualCount
,
2161 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
2166 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
2169 PBL_MEMORY_DESCRIPTOR
2170 MmMdInitByteGranularDescriptor (
2172 _In_ BL_MEMORY_TYPE Type
,
2173 _In_ ULONGLONG BasePage
,
2174 _In_ ULONGLONG VirtualPage
,
2175 _In_ ULONGLONG PageCount
2179 MmMdFreeGlobalDescriptors (
2184 MmMdAddDescriptorToList (
2185 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2186 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
,
2191 MmMdTruncateDescriptors (
2192 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2193 _In_ PBL_MEMORY_DESCRIPTOR_LIST NewList
,
2194 _In_ ULONGLONG BasePage
2198 MmMdRemoveDescriptorFromList (
2199 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2200 _In_ PBL_MEMORY_DESCRIPTOR Entry
2204 MmMdFindSatisfyingRegion (
2205 _In_ PBL_MEMORY_DESCRIPTOR Descriptor
,
2206 _Out_ PBL_MEMORY_DESCRIPTOR NewDescriptor
,
2207 _In_ ULONGLONG Pages
,
2208 _In_ PBL_ADDRESS_RANGE BaseRange
,
2209 _In_ PBL_ADDRESS_RANGE VirtualRange
,
2210 _In_ BOOLEAN TopDown
,
2211 _In_ BL_MEMORY_TYPE MemoryType
,
2213 _In_ ULONG Alignment
2217 MmMdRemoveRegionFromMdlEx (
2218 __in PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2220 __in ULONGLONG BasePage
,
2221 __in ULONGLONG PageCount
,
2222 __in PBL_MEMORY_DESCRIPTOR_LIST NewMdList
2226 MmMdFreeDescriptor (
2227 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
2230 /* PAGE ALLOCATOR ROUTINES ***************************************************/
2233 MmPaTruncateMemory (
2234 _In_ ULONGLONG BasePage
2238 BlMmAllocatePhysicalPages(
2239 _Inout_ PPHYSICAL_ADDRESS Address
,
2240 _In_ BL_MEMORY_TYPE MemoryType
,
2241 _In_ ULONGLONG PageCount
,
2242 _In_ ULONG Attributes
,
2243 _In_ ULONG Alignment
2247 MmPapAllocatePhysicalPagesInRange (
2248 _Inout_ PPHYSICAL_ADDRESS BaseAddress
,
2249 _In_ BL_MEMORY_TYPE MemoryType
,
2250 _In_ ULONGLONG Pages
,
2251 _In_ ULONG Attributes
,
2252 _In_ ULONG Alignment
,
2253 _In_ PBL_MEMORY_DESCRIPTOR_LIST NewList
,
2254 _In_opt_ PBL_ADDRESS_RANGE Range
,
2255 _In_ ULONG RangeType
2259 MmPaReleaseSelfMapPages (
2260 _In_ PHYSICAL_ADDRESS Address
2264 MmPaReserveSelfMapPages (
2265 _Inout_ PPHYSICAL_ADDRESS PhysicalAddress
,
2266 _In_ ULONG Alignment
,
2267 _In_ ULONG PageCount
2271 BlMmFreePhysicalPages (
2272 _In_ PHYSICAL_ADDRESS Address
2278 _In_ ULONG WhichList
2282 MmPapAllocatePagesInRange (
2283 _Inout_ PVOID
* PhysicalAddress
,
2284 _In_ BL_MEMORY_TYPE MemoryType
,
2285 _In_ ULONGLONG Pages
,
2286 _In_ ULONG Attributes
,
2287 _In_ ULONG Alignment
,
2288 _In_opt_ PBL_ADDRESS_RANGE Range
,
2294 _Out_ PBL_MEMORY_DESCRIPTOR_LIST MemoryMap
,
2299 BlpMmInitializeConstraints (
2304 BlMmRemoveBadMemory (
2310 _In_ PLIST_ENTRY MemoryMap
,
2311 _In_ PBL_BUFFER_DESCRIPTOR MemoryParameters
,
2312 _In_ ULONG WhichTypes
,
2316 /* VIRTUAL MEMORY ROUTINES ***************************************************/
2319 MmSelectMappingAddress (
2320 _Out_ PVOID
* MappingAddress
,
2321 _In_ PVOID PreferredAddress
,
2322 _In_ ULONGLONG Size
,
2323 _In_ ULONG AllocationAttributes
,
2325 _In_ PHYSICAL_ADDRESS PhysicalAddress
2329 MmMapPhysicalAddress (
2330 _Inout_ PPHYSICAL_ADDRESS PhysicalAddress
,
2331 _Out_ PVOID
* VirtualAddress
,
2332 _Inout_ PULONGLONG Size
,
2333 _In_ ULONG CacheAttributes
2337 MmUnmapVirtualAddress (
2338 _Inout_ PVOID
* VirtualAddress
,
2339 _Inout_ PULONGLONG Size
2343 BlMmMapPhysicalAddressEx (
2344 _In_ PVOID
* VirtualAddress
,
2345 _In_ ULONG Attributes
,
2346 _In_ ULONGLONG Size
,
2347 _In_ PHYSICAL_ADDRESS PhysicalAddress
2351 BlMmUnmapVirtualAddressEx (
2352 _In_ PVOID VirtualAddress
,
2357 BlMmTranslateVirtualAddress (
2358 _In_ PVOID VirtualAddress
,
2359 _Out_ PPHYSICAL_ADDRESS PhysicalAddress
2363 MmArchTranslateVirtualAddress (
2364 _In_ PVOID VirtualAddress
,
2365 _Out_opt_ PPHYSICAL_ADDRESS PhysicalAddress
,
2366 _Out_opt_ PULONG CachingFlags
2369 /* BLOCK ALLOCATOR ROUTINES **************************************************/
2372 BlpMmCreateBlockAllocator (
2376 /* HEAP ALLOCATOR ROUTINES ***************************************************/
2388 /* DISPLAY ROUTINES **********************************************************/
2391 BlDisplayGetTextCellResolution (
2392 _Out_ PULONG TextWidth
,
2393 _Out_ PULONG TextHeight
2397 BlDisplaySetScreenResolution (
2402 BlDisplayGetScreenResolution (
2408 BlDisplayInvalidateOemBitmap (
2413 BlDisplayGetOemBitmap (
2414 _Out_ PCOORD Offset
,
2415 _Out_opt_ PULONG Flags
2419 BlDisplayValidOemBitmap (
2424 BlDisplayClearScreen (
2429 BlDisplaySetCursorType (
2433 /* I/O ROUTINES **************************************************************/
2436 BlpIoRegisterDestroyRoutine (
2437 _In_ PBL_IO_DESTROY_ROUTINE DestroyRoutine
2446 BlDeviceIsVirtualPartitionDevice (
2447 _In_ PBL_DEVICE_DESCRIPTOR InputDevice
,
2448 _Outptr_ PBL_DEVICE_DESCRIPTOR
* VirtualDevice
2453 _In_ PBL_DEVICE_DESCRIPTOR Device
,
2456 _Out_ PULONG DeviceId
2460 BlDeviceGetInformation (
2461 _In_ ULONG DeviceId
,
2462 _Out_ PBL_DEVICE_INFORMATION DeviceInformation
2466 BlDeviceSetInformation (
2467 _In_ ULONG DeviceId
,
2468 _In_ PBL_DEVICE_INFORMATION DeviceInformation
2472 BlDeviceReadAtOffset (
2473 _In_ ULONG DeviceId
,
2475 _In_ ULONGLONG Offset
,
2477 _Out_ PULONG BytesRead
2480 /* IMAGE ROUTINES ************************************************************/
2483 BlImgLoadImageWithProgress2 (
2484 _In_ ULONG DeviceId
,
2485 _In_ BL_MEMORY_TYPE MemoryType
,
2486 _In_ PWCHAR FileName
,
2487 _Inout_ PVOID
* MappedBase
,
2488 _Inout_ PULONG MappedSize
,
2489 _In_ ULONG ImageFlags
,
2490 _In_ BOOLEAN ShowProgress
,
2491 _Out_opt_ PUCHAR
* HashBuffer
,
2492 _Out_opt_ PULONG HashSize
2495 PIMAGE_SECTION_HEADER
2497 _In_ PVOID ImageBase
,
2498 _In_ ULONG ImageSize
2502 BlImgLoadBootApplication (
2503 _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry
,
2504 _Out_ PULONG AppHandle
2508 BlImgStartBootApplication (
2509 _In_ ULONG AppHandle
,
2510 _Inout_ PBL_RETURN_ARGUMENTS ReturnArguments
2514 BlImgUnloadBootApplication (
2515 _In_ ULONG AppHandle
2519 BlImgQueryCodeIntegrityBootOptions (
2520 _In_ PBL_LOADED_APPLICATION_ENTRY ApplicationEntry
,
2521 _Out_ PBOOLEAN IntegrityChecksDisabled
,
2522 _Out_ PBOOLEAN TestSigning
2525 /* FILE I/O ROUTINES *********************************************************/
2533 BlFileReadAtOffsetEx (
2536 _In_ ULONGLONG ByteOffset
,
2538 _Out_ PULONG BytesReturned
,
2543 BlFileGetInformation (
2545 _In_ PBL_FILE_INFORMATION FileInfo
2550 _In_ ULONG DeviceId
,
2551 _In_ PWCHAR FileName
,
2556 /* BLOCK I/O ROUTINES *******************************************************/
2559 BlockIoEfiCompareDevice (
2560 _In_ PBL_DEVICE_DESCRIPTOR Device
,
2561 _In_ EFI_HANDLE Handle
2564 /* INPUT CONSOLE ROUTINES ****************************************************/
2567 ConsoleInputLocalDestruct (
2568 _In_
struct _BL_INPUT_CONSOLE
* Console
2572 ConsoleInputBaseReinitialize (
2573 _In_
struct _BL_INPUT_CONSOLE
* Console
2577 ConsoleCreateLocalInputCnsole (
2581 /* TEXT CONSOLE ROUTINES *****************************************************/
2584 ConsoleGraphicalDestruct (
2585 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2589 ConsoleGraphicalClearText (
2590 _In_ PBL_GRAPHICS_CONSOLE Console
,
2591 _In_ BOOLEAN LineOnly
2595 ConsoleGraphicalClearPixels (
2596 _In_ PBL_GRAPHICS_CONSOLE Console
,
2601 ConsoleGraphicalReinitialize (
2602 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2606 ConsoleGraphicalSetTextState (
2607 _In_ PBL_GRAPHICS_CONSOLE Console
,
2609 _In_ PBL_DISPLAY_STATE TextState
2613 ConsoleGraphicalIsEnabled (
2614 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2618 ConsoleGraphicalGetGraphicalResolution (
2619 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2620 _In_ PBL_DISPLAY_MODE DisplayMode
2624 ConsoleGraphicalGetOriginalResolution (
2625 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2626 _In_ PBL_DISPLAY_MODE DisplayMode
2630 ConsoleGraphicalEnable (
2631 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2636 ConsoleTextLocalDestruct (
2637 _In_
struct _BL_TEXT_CONSOLE
* Console
2641 ConsoleTextLocalReinitialize (
2642 _In_
struct _BL_TEXT_CONSOLE
* Console
2646 ConsoleTextBaseGetTextState (
2647 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2648 _Out_ PBL_DISPLAY_STATE TextState
2652 ConsoleTextLocalSetTextState (
2653 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2655 _In_ PBL_DISPLAY_STATE TextState
2659 ConsoleTextBaseGetTextResolution (
2660 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2661 _Out_ PULONG TextResolution
2665 ConsoleTextLocalSetTextResolution (
2666 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2667 _In_ ULONG NewTextResolution
,
2668 _Out_ PULONG OldTextResolution
2672 ConsoleTextLocalClearText (
2673 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2674 _In_ BOOLEAN LineOnly
2678 ConsoleTextLocalWriteText (
2679 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2681 _In_ ULONG Attribute
2685 ConsoleTextLocalConstruct (
2686 _In_ PBL_TEXT_CONSOLE TextConsole
,
2687 _In_ BOOLEAN Activate
2691 ConsolepFindResolution (
2692 _In_ PBL_DISPLAY_MODE Mode
,
2693 _In_ PBL_DISPLAY_MODE List
,
2698 ConsoleFirmwareTextClear (
2699 _In_ PBL_TEXT_CONSOLE Console
,
2700 _In_ BOOLEAN LineOnly
2704 ConsoleFirmwareTextClose (
2705 _In_ PBL_TEXT_CONSOLE TextConsole
2709 ConsoleFirmwareTextOpen (
2710 _In_ PBL_TEXT_CONSOLE TextConsole
2714 ConsoleFirmwareTextSetState (
2715 _In_ PBL_TEXT_CONSOLE TextConsole
,
2717 _In_ PBL_DISPLAY_STATE State
2721 ConsoleGraphicalConstruct (
2722 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2726 ConsoleCreateRemoteConsole (
2727 _In_ PBL_TEXT_CONSOLE
* TextConsole
2731 ConsoleEfiGraphicalOpenProtocol (
2732 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2733 _In_ BL_GRAPHICS_CONSOLE_TYPE Type
2737 ConsoleFirmwareGraphicalClose (
2738 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2742 ConsoleFirmwareGraphicalDisable (
2743 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2747 ConsoleFirmwareGraphicalClear (
2748 _In_ PBL_GRAPHICS_CONSOLE Console
,
2753 ConsoleFirmwareGraphicalEnable (
2754 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2759 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2763 ConsoleEfiUgaClose (
2764 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2768 ConsoleEfiGopClose (
2769 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2774 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2778 ConsoleEfiGopEnable (
2779 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2783 ConsoleEfiUgaSetResolution (
2784 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2785 _In_ PBL_DISPLAY_MODE DisplayMode
,
2786 _In_ ULONG DisplayModeCount
2790 ConsoleCreateLocalInputConsole (
2795 ConsoleInputLocalEraseBuffer (
2796 _In_ PBL_INPUT_CONSOLE Console
,
2797 _In_opt_ PULONG ValueToFill
2801 ConsolepClearBuffer (
2802 _In_ PUCHAR FrameBuffer
,
2804 _In_ PUCHAR FillColor
,
2806 _In_ ULONG ScanlineWidth
,
2807 _In_ ULONG PixelDepth
2811 ConsolepConvertColorToPixel (
2812 _In_ BL_COLOR Color
,
2816 extern ULONG MmDescriptorCallTreeCount
;
2817 extern ULONG BlpApplicationFlags
;
2818 extern BL_LIBRARY_PARAMETERS BlpLibraryParameters
;
2819 extern BL_TRANSLATION_TYPE MmTranslationType
;
2820 extern PBL_ARCH_CONTEXT CurrentExecutionContext
;
2821 extern PBL_DEVICE_DESCRIPTOR BlpBootDevice
;
2822 extern BL_LOADED_APPLICATION_ENTRY BlpApplicationEntry
;
2823 extern EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*EfiConOut
;
2824 extern EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL
*EfiConInEx
;
2825 extern EFI_GUID EfiGraphicsOutputProtocol
;
2826 extern EFI_GUID EfiUgaDrawProtocol
;
2827 extern EFI_GUID EfiLoadedImageProtocol
;
2828 extern EFI_GUID EfiDevicePathProtocol
;
2829 extern EFI_GUID EfiBlockIoProtocol
;
2830 extern EFI_GUID EfiSimpleTextInputExProtocol
;
2831 extern EFI_GUID EfiRootAcpiTableGuid
;
2832 extern EFI_GUID EfiRootAcpiTable10Guid
;
2833 extern EFI_GUID EfiGlobalVariable
;
2834 extern ULONG ConsoleGraphicalResolutionListFlags
;
2835 extern BL_DISPLAY_MODE ConsoleGraphicalResolutionList
[];
2836 extern BL_DISPLAY_MODE ConsoleTextResolutionList
[];
2837 extern ULONG ConsoleGraphicalResolutionListSize
;
2838 extern PVOID DspRemoteInputConsole
;
2839 extern PVOID DspLocalInputConsole
;
2840 extern WCHAR BlScratchBuffer
[8192];
2841 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappedAllocated
;
2842 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappedUnallocated
;
2843 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlFwAllocationTracker
;
2844 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedAllocated
;
2845 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedUnallocated
;
2846 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlReservedAllocated
;
2847 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlBadMemory
;
2848 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlTruncatedMemory
;
2849 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlPersistentMemory
;
2850 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlCompleteBadMemory
;
2851 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlFreeVirtual
;
2852 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappingTrackers
;
2853 extern ULONGLONG BlpTimePerformanceFrequency
;
2854 extern LIST_ENTRY RegisteredFileSystems
;
2855 extern BL_ADDRESS_RANGE MmArchKsegAddressRange
;
2856 extern ULONG_PTR MmArchTopOfApplicationAddressSpace
;
2857 extern PBL_MM_RELOCATE_SELF_MAP BlMmRelocateSelfMap
;
2858 extern PBL_MM_FLUSH_TLB BlMmFlushTlb
;
2859 extern PBL_MM_MOVE_VIRTUAL_ADDRESS_RANGE BlMmMoveVirtualAddressRange
;
2860 extern PBL_MM_ZERO_VIRTUAL_ADDRESS_RANGE BlMmZeroVirtualAddressRange
;
2861 extern PBL_STATUS_ERROR_HANDLER BlpStatusErrorHandler
;