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_APPLICATION_ENTRY_FLAG_NO_GUID 0x01
68 #define BL_APPLICATION_ENTRY_BCD_OPTIONS_INTERNAL 0x02
69 #define BL_APPLICATION_ENTRY_REBOOT_ON_ERROR 0x20
70 #define BL_APPLICATION_ENTRY_BCD_OPTIONS_EXTERNAL 0x80
72 #define BL_CONTEXT_PAGING_ON 1
73 #define BL_CONTEXT_INTERRUPTS_ON 2
75 #define BL_MM_FLAG_USE_FIRMWARE_FOR_MEMORY_MAP_BUFFERS 0x01
76 #define BL_MM_FLAG_REQUEST_COALESCING 0x02
78 #define BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG 0x01
79 #define BL_MM_ADD_DESCRIPTOR_TRUNCATE_FLAG 0x02
80 #define BL_MM_ADD_DESCRIPTOR_NEVER_COALESCE_FLAG 0x10
81 #define BL_MM_ADD_DESCRIPTOR_NEVER_TRUNCATE_FLAG 0x20
82 #define BL_MM_ADD_DESCRIPTOR_UPDATE_LIST_POINTER_FLAG 0x2000
84 #define BL_MM_REQUEST_DEFAULT_TYPE 1
85 #define BL_MM_REQUEST_TOP_DOWN_TYPE 2
87 #define BL_MM_REMOVE_VIRTUAL_REGION_FLAG 0x80000000
89 #define BL_LIBRARY_FLAG_NO_DISPLAY 0x01
90 #define BL_LIBRARY_FLAG_REINITIALIZE 0x02
91 #define BL_LIBRARY_FLAG_REINITIALIZE_ALL 0x04
92 #define BL_LIBRARY_FLAG_ZERO_HEAP_ALLOCATIONS_ON_FREE 0x10
93 #define BL_LIBRARY_FLAG_INITIALIZATION_COMPLETED 0x20
94 #define BL_LIBRARY_FLAG_NO_GRAPHICS_CONSOLE 0x800
96 #define BL_DISPLAY_GRAPHICS_FORCED_VIDEO_MODE_FLAG 0x01
97 #define BL_DISPLAY_GRAPHICS_FORCED_HIGH_RES_MODE_FLAG 0x02
99 #define BL_HT_VALUE_IS_INLINE 0x01
101 #define BL_FS_REGISTER_AT_HEAD_FLAG 1
103 #define BL_BLOCK_DEVICE_REMOVABLE_FLAG 0x01
105 #define BL_MEMORY_CLASS_SHIFT 28
107 #define BL_FILE_READ_ACCESS 0x01
108 #define BL_FILE_WRITE_ACCESS 0x02
109 #define BL_DIRECTORY_ACCESS 0x04
110 #define BL_UNKNOWN_ACCESS 0x10
112 #define BL_DEVICE_READ_ACCESS 0x01
113 #define BL_DEVICE_WRITE_ACCESS 0x02
115 #define BL_DEVICE_ENTRY_OPENED 0x01
116 #define BL_DEVICE_ENTRY_READ_ACCESS 0x02
117 #define BL_DEVICE_ENTRY_WRITE_ACCESS 0x04
119 #define BL_FILE_ENTRY_OPENED 0x01
120 #define BL_FILE_ENTRY_READ_ACCESS 0x02
121 #define BL_FILE_ENTRY_WRITE_ACCESS 0x04
122 #define BL_FILE_ENTRY_UNKNOWN_ACCESS 0x10
124 #define BL_IMG_VALID_FILE 0x01
125 #define BL_IMG_MEMORY_FILE 0x02
126 #define BL_IMG_REMOTE_FILE 0x04
128 #define BL_LOAD_IMG_VIRTUAL_BUFFER 0x01
129 #define BL_LOAD_IMG_EXISTING_BUFFER 0x04
130 #define BL_LOAD_IMG_UNKNOWN_BUFFER_FLAG 0x08
131 #define BL_LOAD_IMG_COMPUTE_SIGNATURE 0x10
132 #define BL_LOAD_IMG_COMPUTE_HASH 0x40000
134 /* ENUMERATIONS **************************************************************/
136 typedef enum _BL_COLOR
154 } BL_COLOR
, *PBL_COLOR
;
156 typedef enum _BL_MEMORY_DESCRIPTOR_TYPE
160 } BL_MEMORY_DESCRIPTOR_TYPE
;
162 typedef enum _BL_TRANSLATION_TYPE
168 } BL_TRANSLATION_TYPE
;
170 typedef enum _BL_ARCH_MODE
179 typedef enum _BL_DEVICE_TYPE
182 LegacyPartitionDevice
= 2,
191 // Local Device Types
193 typedef enum _BL_LOCAL_DEVICE_TYPE
200 VirtualDiskDevice
= 6
201 } BL_LOCAL_DEVICE_TYPE
;
206 typedef enum _BL_PARTITION_TYPE
216 typedef enum _BL_PATH_TYPE
225 typedef enum _BL_MEMORY_CLASS
235 typedef enum _BL_MEMORY_TYPE
240 BlLoaderMemory
= 0xD0000002,
241 BlLoaderDeviceMemory
= 0xD0000004,
242 BlLoaderHeap
= 0xD0000005,
243 BlLoaderPageDirectory
= 0xD0000006,
244 BlLoaderReferencePage
= 0xD0000007,
245 BlLoaderRamDisk
= 0xD0000008,
246 BlLoaderData
= 0xD000000A,
247 BlLoaderRegistry
= 0xD000000B,
248 BlLoaderBlockMemory
= 0xD000000C,
249 BlLoaderSelfMap
= 0xD000000F,
252 // Application Memory
254 BlApplicationReserved
= 0xE0000001,
255 BlApplicationData
= 0xE0000004,
260 BlConventionalMemory
= 0xF0000001,
261 BlUnusableMemory
= 0xF0000002,
262 BlReservedMemory
= 0xF0000003,
263 BlEfiBootMemory
= 0xF0000004,
264 BlEfiRuntimeMemory
= 0xF0000006,
265 BlAcpiReclaimMemory
= 0xF0000008,
266 BlAcpiNvsMemory
= 0xF0000009,
267 BlDeviceIoMemory
= 0xF000000A,
268 BlDevicePortMemory
= 0xF000000B,
269 BlPalMemory
= 0xF000000C,
272 typedef enum _BL_MEMORY_ATTR
275 // Memory Caching Attributes
277 BlMemoryUncached
= 0x00000001,
278 BlMemoryWriteCombined
= 0x00000002,
279 BlMemoryWriteThrough
= 0x00000004,
280 BlMemoryWriteBack
= 0x00000008,
281 BlMemoryUncachedExported
= 0x00000010,
282 BlMemoryValidCacheAttributes
= BlMemoryUncached
| BlMemoryWriteCombined
| BlMemoryWriteThrough
| BlMemoryWriteBack
| BlMemoryUncachedExported
,
283 BlMemoryValidCacheAttributeMask
= 0x000000FF,
286 // Memory Protection Attributes
288 BlMemoryWriteProtected
= 0x00000100,
289 BlMemoryReadProtected
= 0x00000200,
290 BlMemoryExecuteProtected
= 0x00000400,
291 BlMemoryValidProtectionAttributes
= BlMemoryWriteProtected
| BlMemoryReadProtected
| BlMemoryExecuteProtected
,
292 BlMemoryValidProtectionAttributeMask
= 0x0000FF00,
295 // Memory Allocation Attributes
297 BlMemoryUnknown
= 0x00010000,
298 BlMemoryNonFixed
= 0x00020000,
299 BlMemoryFixed
= 0x00040000,
300 BlMemoryReserved
= 0x00080000,
301 BlMemoryValidAllocationAttributes
= BlMemoryNonFixed
| BlMemoryFixed
| BlMemoryReserved
| BlMemoryUnknown
,
302 BlMemoryValidAllocationAttributeMask
= 0x00FF0000,
305 // Memory Type Attributes
307 BlMemoryRuntime
= 0x01000000,
308 BlMemoryCoalesced
= 0x02000000,
309 BlMemoryUpdate
= 0x04000000,
310 BlMemoryNonFirmware
= 0x08000000,
311 BlMemorySpecial
= 0x20000000,
312 BlMemoryFirmware
= 0x80000000,
313 BlMemoryValidTypeAttributes
= BlMemoryRuntime
| BlMemoryCoalesced
| BlMemoryUpdate
| BlMemoryNonFirmware
| BlMemorySpecial
| BlMemoryFirmware
,
314 BlMemoryValidTypeAttributeMask
= 0xFF000000,
317 /* CALLBACKS *****************************************************************/
319 struct _BL_FILE_ENTRY
;
320 struct _BL_FILE_INFORMATION
;
324 _In_
struct _BL_FILE_ENTRY
* Directory
,
325 _In_ PWCHAR FileName
,
327 _Out_
struct _BL_FILE_ENTRY
** FileEntry
333 _In_
struct _BL_FILE_ENTRY
* FileEntry
339 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
342 _Out_opt_ PULONG BytesRead
353 (*PBL_FILE_GET_NEXT
) (
359 (*PBL_FILE_GET_INFO
) (
360 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
361 _Out_
struct _BL_FILE_INFORMATION
* FileInfo
366 (*PBL_FILE_SET_INFO
) (
367 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
368 _In_
struct _BL_FILE_INFORMATION
* FileInfo
373 (*PBL_FS_INIT_CALLBACK
) (
379 (*PBL_FS_DESTROY_CALLBACK
) (
385 (*PBL_FS_MOUNT_CALLBACK
) (
388 _Out_
struct _BL_FILE_ENTRY
** FileEntry
393 (*PBL_FS_PURGE_CALLBACK
) (
399 (*PBL_FILE_DESTROY_CALLBACK
) (
403 struct _BL_TEXT_CONSOLE
;
404 struct _BL_DISPLAY_STATE
;
405 struct _BL_DISPLAY_MODE
;
406 struct _BL_INPUT_CONSOLE
;
407 struct _BL_REMOTE_CONSOLE
;
408 struct _BL_GRAPHICS_CONSOLE
;
411 (*PCONSOLE_DESTRUCT
) (
412 _In_
struct _BL_TEXT_CONSOLE
* Console
417 (*PCONSOLE_REINITIALIZE
) (
418 _In_
struct _BL_TEXT_CONSOLE
* Console
423 (*PCONSOLE_GET_TEXT_STATE
) (
424 _In_
struct _BL_TEXT_CONSOLE
* Console
,
425 _Out_
struct _BL_DISPLAY_STATE
* TextState
430 (*PCONSOLE_SET_TEXT_STATE
) (
431 _In_
struct _BL_TEXT_CONSOLE
* Console
,
433 _In_
struct _BL_DISPLAY_STATE
* TextState
438 (*PCONSOLE_GET_TEXT_RESOLUTION
) (
439 _In_
struct _BL_TEXT_CONSOLE
* Console
,
440 _Out_ PULONG TextResolution
445 (*PCONSOLE_SET_TEXT_RESOLUTION
) (
446 _In_
struct _BL_TEXT_CONSOLE
* Console
,
447 _In_ ULONG NewTextResolution
,
448 _Out_ PULONG OldTextResolution
453 (*PCONSOLE_CLEAR_TEXT
) (
454 _In_
struct _BL_TEXT_CONSOLE
* Console
,
455 _In_ BOOLEAN LineOnly
460 (*PCONSOLE_IS_ENABLED
) (
461 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
466 (*PCONSOLE_GET_GRAPHICAL_RESOLUTION
) (
467 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
468 _Out_
struct _BL_DISPLAY_MODE
* DisplayMode
473 (*PCONSOLE_SET_GRAPHICAL_RESOLUTION
) (
474 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
475 _In_
struct _BL_DISPLAY_MODE DisplayMode
481 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
487 (*PCONSOLE_WRITE_TEXT
) (
488 _In_
struct _BL_TEXT_CONSOLE
* Console
,
495 (*PBL_TBL_LOOKUP_ROUTINE
) (
497 _In_ PVOID Argument1
,
498 _In_ PVOID Argument2
,
499 _In_ PVOID Argument3
,
505 (*PBL_TBL_MAP_ROUTINE
) (
507 _In_ ULONG EntryIndex
512 (*PBL_TBL_SET_ROUTINE
) (
518 (*PBL_IO_DESTROY_ROUTINE
) (
522 struct _BL_HASH_ENTRY
;
525 (*PBL_HASH_TABLE_COMPARE_FUNCTION
) (
526 _In_
struct _BL_HASH_ENTRY
* Entry1
,
527 _In_
struct _BL_HASH_ENTRY
* Entry2
532 (*PBL_HASH_TABLE_HASH_FUNCTION
) (
533 _In_
struct _BL_HASH_ENTRY
* Entry
,
537 struct _BL_DEVICE_ENTRY
;
538 struct _BL_DEVICE_DESCRIPTOR
;
539 struct _BL_DEVICE_INFORMATION
;
543 (*PBL_DEVICE_ENUMERATE_DEVICE_CLASS
) (
550 _In_
struct _BL_DEVICE_DESCRIPTOR
* Device
,
551 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
556 (*PBL_DEVICE_CLOSE
) (
557 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
563 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
566 _Out_ PULONG BytesRead
571 (*PBL_DEVICE_WRITE
) (
577 (*PBL_DEVICE_GET_INFORMATION
) (
578 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
579 _Out_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
584 (*PBL_DEVICE_SET_INFORMATION
) (
585 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
586 _In_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
591 (*PBL_DEVICE_RESET
) (
597 (*PBL_DEVICE_FLUSH
) (
603 (*PBL_DEVICE_CREATE
) (
608 /* DATA STRUCTURES ***********************************************************/
610 typedef struct _BL_LIBRARY_PARAMETERS
613 ULONG TranslationType
;
614 ULONG MinimumAllocationCount
;
615 ULONG MinimumHeapSize
;
616 ULONG HeapAllocationAttributes
;
617 PWCHAR ApplicationBaseDirectory
;
618 ULONG DescriptorCount
;
619 PWCHAR FontBaseDirectory
;
620 } BL_LIBRARY_PARAMETERS
, *PBL_LIBRARY_PARAMETERS
;
622 /* This should eventually go into a more public header */
623 typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK
625 /* This header tells the library what image we're dealing with */
630 ULONG MemoryTranslationType
;
632 /* Where is the image located */
636 /* Offset to BL_MEMORY_DATA */
637 ULONG MemoryDataOffset
;
639 /* Offset to BL_APPLICATION_ENTRY */
640 ULONG AppEntryOffset
;
642 /* Offset to BL_DEVICE_DESCRPIPTOR */
643 ULONG BootDeviceOffset
;
645 /* Offset to BL_FIRMWARE_PARAMETERS */
646 ULONG FirmwareParametersOffset
;
648 /* Offset to BL_RETURN_ARGUMENTS */
649 ULONG ReturnArgumentsOffset
;
650 } BOOT_APPLICATION_PARAMETER_BLOCK
, *PBOOT_APPLICATION_PARAMETER_BLOCK
;
652 typedef struct _BL_MEMORY_DATA
656 ULONG DescriptorCount
;
657 ULONG DescriptorSize
;
658 ULONG DescriptorOffset
;
659 } BL_MEMORY_DATA
, *PBL_MEMORY_DATA
;
661 typedef struct _BL_FIRMWARE_DESCRIPTOR
665 EFI_HANDLE ImageHandle
;
666 EFI_SYSTEM_TABLE
*SystemTable
;
667 } BL_FIRMWARE_DESCRIPTOR
, *PBL_FIRMWARE_DESCRIPTOR
;
669 typedef struct _BL_RETURN_ARGUMENTS
673 ULONG ReturnArgumentData
[5];
674 } BL_RETURN_ARGUMENTS
, *PBL_RETURN_ARGUMENTS
;
676 typedef struct _BL_MEMORY_DESCRIPTOR
678 LIST_ENTRY ListEntry
;
684 ULONGLONG VirtualPage
;
688 ULONGLONG BaseAddress
;
689 ULONGLONG VirtualAddress
;
695 } BL_MEMORY_DESCRIPTOR
, *PBL_MEMORY_DESCRIPTOR
;
697 typedef struct _BL_BCD_OPTION
703 ULONG NextEntryOffset
;
705 } BL_BCD_OPTION
, *PBL_BCD_OPTION
;
707 typedef struct _BL_APPLICATION_ENTRY
713 BL_BCD_OPTION BcdData
;
714 } BL_APPLICATION_ENTRY
, *PBL_APPLICATION_ENTRY
;
716 typedef struct _BL_LOADED_APPLICATION_ENTRY
720 PBL_BCD_OPTION BcdData
;
721 } BL_LOADED_APPLICATION_ENTRY
, *PBL_LOADED_APPLICATION_ENTRY
;
723 typedef struct _BL_HARDDISK_DEVICE
730 ULONG PartitionSignature
;
735 GUID PartitionSignature
;
743 } BL_HARDDISK_DEVICE
;
745 typedef struct _BL_LOCAL_DEVICE
755 BL_HARDDISK_DEVICE HardDisk
;
759 PHYSICAL_ADDRESS ImageBase
;
760 LARGE_INTEGER ImageSize
;
766 typedef struct _BL_DEVICE_DESCRIPTOR
768 DEVICE_TYPE DeviceType
;
774 BL_LOCAL_DEVICE Local
;
785 ULONG PartitionNumber
;
793 BL_LOCAL_DEVICE Disk
;
796 } BL_DEVICE_DESCRIPTOR
, *PBL_DEVICE_DESCRIPTOR
;
798 typedef struct _BL_FILE_PATH_DESCRIPTOR
803 UCHAR Path
[ANYSIZE_ARRAY
];
804 } BL_FILE_PATH_DESCRIPTOR
, *PBL_FILE_PATH_DESCRIPTOR
;
806 typedef struct _BL_WINDOWS_LOAD_OPTIONS
812 WCHAR LoadOptions
[ANYSIZE_ARRAY
];
813 } BL_WINDOWS_LOAD_OPTIONS
, *PBL_WINDOWS_LOAD_OPTIONS
;
815 typedef struct _BL_ARCH_CONTEXT
818 BL_TRANSLATION_TYPE TranslationType
;
820 } BL_ARCH_CONTEXT
, *PBL_ARCH_CONTEXT
;
822 typedef struct _BL_MEMORY_DESCRIPTOR_LIST
828 } BL_MEMORY_DESCRIPTOR_LIST
, *PBL_MEMORY_DESCRIPTOR_LIST
;
830 typedef struct _BL_ADDRESS_RANGE
834 } BL_ADDRESS_RANGE
, *PBL_ADDRESS_RANGE
;
836 typedef struct _BL_FILE_INFORMATION
842 } BL_FILE_INFORMATION
, *PBL_FILE_INFORMATION
;
844 typedef struct _BL_FILE_CALLBACKS
847 PBL_FILE_CLOSE Close
;
849 PBL_FILE_WRITE Write
;
850 PBL_FILE_GET_NEXT GetNext
;
851 PBL_FILE_GET_INFO GetInfo
;
852 PBL_FILE_SET_INFO SetInfo
;
853 } BL_FILE_CALLBACKS
, *PBL_FILE_CALLBACKS
;
855 typedef struct _BL_FILE_ENTRY
861 ULONG ReferenceCount
;
863 ULONGLONG TotalBytesRead
;
865 BL_FILE_CALLBACKS Callbacks
;
866 PVOID FsSpecificData
;
867 } BL_FILE_ENTRY
, *PBL_FILE_ENTRY
;
869 typedef struct _BL_FILE_SYSTEM_ENTRY
871 LIST_ENTRY ListEntry
;
872 PBL_FS_INIT_CALLBACK InitCallback
;
873 PBL_FS_DESTROY_CALLBACK DestroyCallback
;
874 PBL_FS_MOUNT_CALLBACK MountCallback
;
875 PBL_FS_PURGE_CALLBACK PurgeCallback
;
876 } BL_FILE_SYSTEM_ENTRY
, *PBL_FILE_SYSTEM_ENTRY
;
878 typedef struct _BL_FILE_SYSTEM_REGISTRATION_TABLE
880 PBL_FS_INIT_CALLBACK Init
;
881 PBL_FS_DESTROY_CALLBACK Destroy
;
882 PBL_FS_MOUNT_CALLBACK Mount
;
883 PBL_FS_PURGE_CALLBACK Purge
;
884 } BL_FILE_SYSTEM_REGISTRATION_TABLE
;
886 typedef struct _BL_DISPLAY_STATE
893 } BL_DISPLAY_STATE
, *PBL_DISPLAY_STATE
;
895 typedef struct _BL_DISPLAY_MODE
900 } BL_DISPLAY_MODE
, *PBL_DISPLAY_MODE
;
902 typedef struct _BL_TEXT_CONSOLE_VTABLE
904 PCONSOLE_DESTRUCT Destruct
;
905 PCONSOLE_REINITIALIZE Reinitialize
;
906 PCONSOLE_GET_TEXT_STATE GetTextState
;
907 PCONSOLE_SET_TEXT_STATE SetTextState
;
908 PCONSOLE_GET_TEXT_RESOLUTION GetTextResolution
;
909 PCONSOLE_SET_TEXT_RESOLUTION SetTextResolution
;
910 PCONSOLE_CLEAR_TEXT ClearText
;
911 PCONSOLE_WRITE_TEXT WriteText
;
912 } BL_TEXT_CONSOLE_VTABLE
, *PBL_TEXT_CONSOLE_VTABLE
;
914 typedef struct _BL_GRAPHICS_CONSOLE_VTABLE
916 BL_TEXT_CONSOLE_VTABLE Text
;
917 PCONSOLE_IS_ENABLED IsEnabled
;
918 PCONSOLE_ENABLE Enable
;
919 PVOID GetConsoleResolution
;
920 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetGraphicalResolution
;
921 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetOriginalResolution
;
922 PCONSOLE_SET_GRAPHICAL_RESOLUTION SetOriginalResolution
;
923 /// more for graphics ///
924 } BL_GRAPHICS_CONSOLE_VTABLE
, *PBL_GRAPHICS_CONSOLE_VTABLE
;
926 typedef struct _BL_TEXT_CONSOLE
928 PBL_TEXT_CONSOLE_VTABLE Callbacks
;
929 BL_DISPLAY_STATE State
;
930 BL_DISPLAY_MODE DisplayMode
;
932 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
* Protocol
;
934 EFI_SIMPLE_TEXT_OUTPUT_MODE OldMode
;
935 } BL_TEXT_CONSOLE
, *PBL_TEXT_CONSOLE
;
937 typedef struct _BL_INPUT_CONSOLE_VTABLE
939 PCONSOLE_DESTRUCT Destruct
;
940 PCONSOLE_REINITIALIZE Reinitialize
;
941 //PCONSOLE_IS_KEY_PENDING IsKeyPending;
942 //PCONSOLE_READ_INPUT ReadInput;
943 //PCONSOLE_ERASE_BUFFER EraseBuffer;
944 //PCONSOLE_FILL_BUFFER FillBuffer;
945 } BL_INPUT_CONSOLE_VTABLE
, *PBL_INPUT_CONSOLE_VTABLE
;
947 typedef struct _BL_INPUT_CONSOLE
949 PBL_INPUT_CONSOLE_VTABLE Callbacks
;
954 } BL_INPUT_CONSOLE
, *PBL_INPUT_CONSOLE
;
956 typedef enum _BL_GRAPHICS_CONSOLE_TYPE
960 } BL_GRAPHICS_CONSOLE_TYPE
;
962 typedef struct _BL_GRAPHICS_CONSOLE
964 BL_TEXT_CONSOLE TextConsole
;
965 BL_DISPLAY_MODE DisplayMode
;
969 BL_DISPLAY_MODE OldDisplayMode
;
972 BL_GRAPHICS_CONSOLE_TYPE Type
;
973 EFI_GRAPHICS_OUTPUT_PROTOCOL
* Protocol
;
975 ULONG FrameBufferSize
;
976 ULONG PixelsPerScanLine
;
979 } BL_GRAPHICS_CONSOLE
, *PBL_GRAPHICS_CONSOLE
;
981 typedef struct _BL_REMOTE_CONSOLE
983 BL_TEXT_CONSOLE TextConsole
;
984 } BL_REMOTE_CONSOLE
, *PBL_REMOTE_CONSOLE
;
986 typedef struct _BL_HASH_TABLE
988 PLIST_ENTRY HashLinks
;
990 PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
;
991 PBL_HASH_TABLE_HASH_FUNCTION HashFunction
;
992 } BL_HASH_TABLE
, *PBL_HASH_TABLE
;
994 typedef struct _BL_HASH_ENTRY
999 } BL_HASH_ENTRY
, *PBL_HASH_ENTRY
;
1001 typedef struct _BL_HASH_VALUE
1005 } BL_HASH_VALUE
, *PBL_HASH_VALUE
;
1007 typedef struct _BL_HASH_NODE
1009 LIST_ENTRY ListEntry
;
1010 BL_HASH_ENTRY Entry
;
1011 BL_HASH_VALUE Value
;
1012 } BL_HASH_NODE
, *PBL_HASH_NODE
;
1014 typedef struct _BL_BLOCK_DEVICE_INFORMATION
1016 BL_LOCAL_DEVICE_TYPE Type
;
1019 BL_PARTITION_TYPE PartitionType
;
1022 ULONGLONG LastBlock
;
1039 } BL_BLOCK_DEVICE_INFORMATION
, *PBL_BLOCK_DEVICE_INFORMATION
;
1041 typedef struct _BL_DEVICE_INFORMATION
1043 BL_DEVICE_TYPE DeviceType
;
1046 BL_BLOCK_DEVICE_INFORMATION BlockDeviceInfo
;
1048 } BL_DEVICE_INFORMATION
, *PBL_DEVICE_INFORMATION
;
1050 typedef struct _BL_BLOCK_DEVICE
1052 BL_BLOCK_DEVICE_INFORMATION
;
1053 ULONGLONG StartOffset
;
1054 EFI_BLOCK_IO
* Protocol
;
1056 } BL_BLOCK_DEVICE
, *PBL_BLOCK_DEVICE
;
1058 typedef struct _BL_PROTOCOL_HANDLE
1062 } BL_PROTOCOL_HANDLE
, *PBL_PROTOCOL_HANDLE
;
1064 typedef struct _BL_DEVICE_CALLBACKS
1066 PBL_DEVICE_ENUMERATE_DEVICE_CLASS EnumerateDeviceClass
;
1067 PBL_DEVICE_OPEN Open
;
1068 PBL_DEVICE_CLOSE Close
;
1069 PBL_DEVICE_READ Read
;
1070 PBL_DEVICE_WRITE Write
;
1071 PBL_DEVICE_GET_INFORMATION GetInformation
;
1072 PBL_DEVICE_SET_INFORMATION SetInformation
;
1073 PBL_DEVICE_RESET Reset
;
1074 PBL_DEVICE_FLUSH Flush
;
1075 PBL_DEVICE_CREATE Create
;
1076 } BL_DEVICE_CALLBACKS
, *PBL_DEVICE_CALLBACKS
;
1078 typedef struct _BL_DEVICE_ENTRY
1083 ULONG ReferenceCount
;
1084 BL_DEVICE_CALLBACKS Callbacks
;
1085 PVOID DeviceSpecificData
;
1086 PBL_DEVICE_DESCRIPTOR DeviceDescriptor
;
1087 } BL_DEVICE_ENTRY
, *PBL_DEVICE_ENTRY
;
1089 typedef struct _BL_IMG_FILE
1099 } BL_IMG_FILE
, *PBL_IMG_FILE
;
1101 typedef struct _BL_DEFERRED_FONT_FILE
1103 LIST_ENTRY ListEntry
;
1105 PBL_DEVICE_DESCRIPTOR Device
;
1107 } BL_DEFERRED_FONT_FILE
, *PBL_DEFERRED_FONT_FILE
;
1111 typedef struct _BMP_HEADER
1117 } BMP_HEADER
, *PBMP_HEADER
;
1119 typedef struct _DIB_HEADER
1128 ULONG XPelsPerMeter
;
1129 ULONG YPelsPerMEter
;
1132 } DIB_HEADER
, *PDIB_HEADER
;
1134 typedef struct _BITMAP
1136 BMP_HEADER BmpHeader
;
1137 DIB_HEADER DibHeader
;
1141 typedef struct _COORD
1147 typedef struct _BL_PD_DATA_BLOB
1152 } BL_PD_DATA_BLOB
, *PBL_PD_DATA_BLOB
;
1154 /* INLINE ROUTINES ***********************************************************/
1158 BlSetupDefaultParameters (
1159 _Out_ PBL_LIBRARY_PARAMETERS LibraryParameters
1162 BL_LIBRARY_PARAMETERS DefaultParameters
=
1174 /* Copy the defaults */
1175 RtlCopyMemory(LibraryParameters
, &DefaultParameters
, sizeof(*LibraryParameters
));
1180 MmMdInitializeListHead (
1181 _In_ PBL_MEMORY_DESCRIPTOR_LIST List
1184 /* Initialize the list */
1185 InitializeListHead(&List
->ListHead
);
1186 List
->First
= &List
->ListHead
;
1190 /* INITIALIZATION ROUTINES ***************************************************/
1193 BlInitializeLibrary(
1194 _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters
,
1195 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1206 _In_ PBL_FIRMWARE_DESCRIPTOR FirmwareParameters
1211 _In_ PBL_MEMORY_DATA MemoryData
,
1212 _In_ BL_TRANSLATION_TYPE TranslationType
,
1213 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1223 _In_ PBL_MEMORY_DATA MemoryData
,
1224 _In_ ULONG MinimumPages
1230 _In_ PBL_MEMORY_DATA MemoryData
,
1231 _In_ BL_TRANSLATION_TYPE TranslationType
,
1232 _In_ BL_TRANSLATION_TYPE LibraryTranslationType
1237 _In_ ULONG HeapSize
,
1238 _In_ ULONG HeapAttributes
1244 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1248 BlpDeviceInitialize (
1263 BlpDisplayInitialize (
1277 /* FIRMWARE ROUTINES *********************************************************/
1289 _Inout_ EFI_PHYSICAL_ADDRESS
* Memory
1294 _In_ ULONG StallTime
1308 EfiConOutOutputString (
1309 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1314 EfiConOutQueryMode (
1315 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1317 _In_ UINTN
* Columns
,
1323 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1328 EfiConOutReadCurrentMode (
1329 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1330 _Out_ EFI_SIMPLE_TEXT_OUTPUT_MODE
* Mode
1334 EfiConOutSetAttribute (
1335 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1336 _In_ ULONG Attribute
1340 EfiConOutSetCursorPosition (
1341 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1347 EfiConOutEnableCursor (
1348 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1349 _In_ BOOLEAN Visible
1353 EfiLocateHandleBuffer (
1354 _In_ EFI_LOCATE_SEARCH_TYPE SearchType
,
1355 _In_ EFI_GUID
*Protocol
,
1356 _Inout_ PULONG HandleCount
,
1357 _Inout_ EFI_HANDLE
** Buffer
1362 _In_ EFI_HANDLE Handle
,
1363 _In_ EFI_GUID
*Protocol
,
1364 _Out_ PVOID
* Interface
1369 _In_ EFI_HANDLE Handle
,
1370 _In_ EFI_GUID
*Protocol
1374 EfiGopGetCurrentMode (
1375 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1377 _Out_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
*Information
1382 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1387 EfiGopGetFrameBuffer (
1388 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1389 _Out_ PHYSICAL_ADDRESS
* FrameBuffer
,
1390 _Out_ UINTN
*FrameBufferSize
1395 _In_ EFI_RESET_TYPE ResetType
1400 _In_ EFI_DEVICE_PATH
*DevicePath
1404 EfiIsDevicePathParent (
1405 _In_ EFI_DEVICE_PATH
*DevicePath1
,
1406 _In_ EFI_DEVICE_PATH
*DevicePath2
1411 _Out_ PPHYSICAL_ADDRESS FoundRsdt
1414 /* PLATFORM TIMER ROUTINES ***************************************************/
1417 BlpTimeCalibratePerformanceCounter (
1421 /* RESOURCE LOCALE INTERNATIONALIZATION ROUTINES *****************************/
1424 BlpDisplayRegisterLocale (
1428 /* FONT ROUTINES *************************************************************/
1431 BfiFreeDeferredFontFile (
1432 _In_ PBL_DEFERRED_FONT_FILE DeferredFontFile
1437 _In_ PBL_DEVICE_DESCRIPTOR Device
,
1438 _In_ PWCHAR FontPath
1442 BfLoadDeferredFontFiles (
1448 _In_ PBL_GRAPHICS_CONSOLE Console
1452 BfClearToEndOfLine (
1453 _In_ PBL_GRAPHICS_CONSOLE Console
1456 /* FILESYSTEM ROUTINES *******************************************************/
1465 _In_ ULONG DeviceId
,
1467 _Out_ PBL_FILE_ENTRY
* FileEntry
1477 _In_ ULONG DeviceId
,
1479 _Out_ PBL_FILE_ENTRY
* FileEntry
1482 /* DEBUG ROUTINES ************************************************************/
1486 BlBdDebuggerEnabled (
1491 BlBdPullRemoteFile (
1492 _In_ PWCHAR FilePath
,
1493 _Out_ PVOID BaseAddress
,
1494 _Out_ PULONGLONG FileSize
1505 _In_ ULONG ErrorCode
,
1506 _In_ ULONG Parameter1
,
1507 _In_ ULONG_PTR Parameter2
,
1508 _In_ ULONG_PTR Parameter3
,
1509 _In_ ULONG_PTR Parameter4
1512 /* UTILITY ROUTINES **********************************************************/
1515 BlUtlUpdateProgress (
1516 _In_ ULONG Percentage
,
1517 _Out_opt_ PBOOLEAN Completed
1522 _Out_ PVOID
* TableAddress
,
1523 _In_ ULONG Signature
1532 BlUtlRegisterProgressRoutine (
1537 BlGetApplicationBaseAndSize (
1538 _Out_ PVOID
* ImageBase
,
1539 _Out_ PULONG ImageSize
1543 BlDestroyBootEntry (
1544 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
1549 _In_
const GUID
* DataGuid
,
1551 _Inout_ PBL_PD_DATA_BLOB DataBlob
1554 /* FIRMWARE UTILITY ROUTINES *************************************************/
1557 EfiGetEfiStatusCode(
1558 _In_ NTSTATUS Status
1562 EfiGetNtStatusCode (
1563 _In_ EFI_STATUS EfiStatus
1572 BlGetApplicationIdentifier (
1577 BlpSecureBootEFIIsEnabled (
1582 BlSecureBootIsEnabled (
1583 _Out_ PBOOLEAN SecureBootEnabled
1587 BlSecureBootCheckForFactoryReset (
1591 /* RESOURCE ROUTINES *********************************************************/
1594 BlResourceFindMessage (
1599 BlResourceFindHtml (
1604 BlpResourceInitialize (
1608 /* TABLE ROUTINES ************************************************************/
1614 _In_ PBL_TBL_MAP_ROUTINE MapCallback
1621 _Out_ PULONG EntryIndex
,
1622 _In_ PBL_TBL_LOOKUP_ROUTINE Callback
,
1623 _In_ PVOID Argument1
,
1624 _In_ PVOID Argument2
,
1625 _In_ PVOID Argument3
,
1626 _In_ PVOID Argument4
1631 _Inout_ PVOID
** Table
,
1632 _Inout_ PULONG Count
,
1634 _Out_ PULONG EntryIndex
,
1635 _In_ PBL_TBL_SET_ROUTINE Callback
1639 TblDoNotPurgeEntry (
1643 /* HASH TABLE ROUTINES *******************************************************/
1648 _In_ PBL_HASH_ENTRY Entry
,
1656 _In_ PBL_HASH_ENTRY Entry
,
1657 _Out_ PBL_HASH_VALUE
*Value
1663 _In_ PBL_HASH_TABLE_HASH_FUNCTION HashFunction
,
1664 _In_ PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
,
1668 /* BCD OPTION ROUTINES *******************************************************/
1672 _In_ PBL_BCD_OPTION List
,
1677 BlGetBootOptionListSize (
1678 _In_ PBL_BCD_OPTION BcdOption
1682 BlGetBootOptionSize (
1683 _In_ PBL_BCD_OPTION BcdOption
1687 BlGetBootOptionString (
1688 _In_ PBL_BCD_OPTION List
,
1694 BlGetBootOptionInteger (
1695 _In_ PBL_BCD_OPTION List
,
1697 _Out_ PULONGLONG Value
1701 BlGetBootOptionBoolean (
1702 _In_ PBL_BCD_OPTION List
,
1704 _Out_ PBOOLEAN Value
1708 BlpGetBootOptionIntegerList (
1709 _In_ PBL_BCD_OPTION List
,
1711 _Out_ PULONGLONG
* Value
,
1712 _Out_ PULONGLONG Count
,
1717 BlGetBootOptionDevice (
1718 _In_ PBL_BCD_OPTION List
,
1720 _Out_ PBL_DEVICE_DESCRIPTOR
* Value
,
1721 _In_opt_ PBL_BCD_OPTION
* ExtraOptions
1725 BlGetBootOptionGuid (
1726 _In_ PBL_BCD_OPTION List
,
1732 BlGetBootOptionGuidList (
1733 _In_ PBL_BCD_OPTION List
,
1741 _In_ PBL_BCD_OPTION OptionList
,
1742 _Out_ PBL_BCD_OPTION
*CopiedOptions
1746 BlAppendBootOptions (
1747 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1748 _In_ PBL_BCD_OPTION Options
1752 BlRemoveBootOption (
1753 _In_ PBL_BCD_OPTION List
,
1758 BlReplaceBootOptions (
1759 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1760 _In_ PBL_BCD_OPTION NewOptions
1763 /* BOOT REGISTRY ROUTINES ****************************************************/
1767 _In_ HANDLE KeyHandle
1772 _In_ HANDLE ParentHandle
,
1773 _In_ PWCHAR KeyName
,
1774 _Out_ PHANDLE Handle
1779 _In_ PBL_FILE_PATH_DESCRIPTOR FilePath
,
1780 _Out_ PHANDLE HiveHandle
1784 BiGetRegistryValue (
1785 _In_ HANDLE KeyHandle
,
1786 _In_ PWCHAR ValueName
,
1787 _In_ PWCHAR KeyName
,
1789 _Out_ PVOID
* Buffer
,
1790 _Out_ PULONG ValueLength
1794 BiEnumerateSubKeys (
1795 _In_ HANDLE KeyHandle
,
1796 _Out_ PWCHAR
** SubKeyList
,
1797 _Out_ PULONG SubKeyCount
1802 _In_ HANDLE KeyHandle
1807 _In_ HANDLE KeyHandle
1810 /* CONTEXT ROUTINES **********************************************************/
1813 BlpArchSwitchContext (
1814 _In_ BL_ARCH_MODE NewMode
1817 /* MEMORY DESCRIPTOR ROUTINES ************************************************/
1821 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
1824 PBL_MEMORY_DESCRIPTOR
1825 MmMdInitByteGranularDescriptor (
1827 _In_ BL_MEMORY_TYPE Type
,
1828 _In_ ULONGLONG BasePage
,
1829 _In_ ULONGLONG VirtualPage
,
1830 _In_ ULONGLONG PageCount
1834 MmMdFreeGlobalDescriptors (
1839 MmMdAddDescriptorToList (
1840 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1841 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
,
1846 MmMdRemoveDescriptorFromList (
1847 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1848 _In_ PBL_MEMORY_DESCRIPTOR Entry
1852 MmMdFindSatisfyingRegion (
1853 _In_ PBL_MEMORY_DESCRIPTOR Descriptor
,
1854 _Out_ PBL_MEMORY_DESCRIPTOR NewDescriptor
,
1855 _In_ ULONGLONG Pages
,
1856 _In_ PBL_ADDRESS_RANGE BaseRange
,
1857 _In_ PBL_ADDRESS_RANGE VirtualRange
,
1858 _In_ BOOLEAN TopDown
,
1859 _In_ BL_MEMORY_TYPE MemoryType
,
1861 _In_ ULONG Alignment
1865 MmMdRemoveRegionFromMdlEx (
1866 __in PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1868 __in ULONGLONG BasePage
,
1869 __in ULONGLONG PageCount
,
1870 __in PBL_MEMORY_DESCRIPTOR_LIST NewMdList
1874 MmMdFreeDescriptor (
1875 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
1878 /* PAGE ALLOCATOR ROUTINES ***************************************************/
1881 BlMmAllocatePhysicalPages(
1882 _Inout_ PPHYSICAL_ADDRESS Address
,
1883 _In_ BL_MEMORY_TYPE MemoryType
,
1884 _In_ ULONGLONG PageCount
,
1885 _In_ ULONG Attributes
,
1886 _In_ ULONG Alignment
1890 MmPapAllocatePhysicalPagesInRange (
1891 _Inout_ PPHYSICAL_ADDRESS BaseAddress
,
1892 _In_ BL_MEMORY_TYPE MemoryType
,
1893 _In_ ULONGLONG Pages
,
1894 _In_ ULONG Attributes
,
1895 _In_ ULONG Alignment
,
1896 _In_ PBL_MEMORY_DESCRIPTOR_LIST NewList
,
1897 _In_opt_ PBL_ADDRESS_RANGE Range
,
1898 _In_ ULONG RangeType
1902 BlMmFreePhysicalPages (
1903 _In_ PHYSICAL_ADDRESS Address
1907 MmPapAllocatePagesInRange (
1908 _Inout_ PVOID
* PhysicalAddress
,
1909 _In_ BL_MEMORY_TYPE MemoryType
,
1910 _In_ ULONGLONG Pages
,
1911 _In_ ULONG Attributes
,
1912 _In_ ULONG Alignment
,
1913 _In_opt_ PBL_ADDRESS_RANGE Range
,
1919 _Out_ PBL_MEMORY_DESCRIPTOR_LIST MemoryMap
,
1924 BlpMmInitializeConstraints (
1929 BlMmRemoveBadMemory (
1933 /* VIRTUAL MEMORY ROUTINES ***************************************************/
1936 BlMmMapPhysicalAddressEx (
1937 _In_ PVOID
* VirtualAddress
,
1938 _In_ ULONG Attributes
,
1939 _In_ ULONGLONG Size
,
1940 _In_ PHYSICAL_ADDRESS PhysicalAddress
1944 BlMmUnmapVirtualAddressEx (
1945 _In_ PVOID VirtualAddress
,
1949 /* BLOCK ALLOCATOR ROUTINES **************************************************/
1952 BlpMmCreateBlockAllocator (
1956 /* HEAP ALLOCATOR ROUTINES ***************************************************/
1968 /* DISPLAY ROUTINES **********************************************************/
1971 BlDisplayGetTextCellResolution (
1972 _Out_ PULONG TextWidth
,
1973 _Out_ PULONG TextHeight
1977 BlDisplaySetScreenResolution (
1982 BlDisplayGetScreenResolution (
1988 BlDisplayInvalidateOemBitmap (
1993 BlDisplayGetOemBitmap (
1994 _Out_ PCOORD Offset
,
1995 _Out_opt_ PULONG Flags
1999 BlDisplayValidOemBitmap (
2004 BlDisplayClearScreen (
2009 BlDisplaySetCursorType (
2013 /* I/O ROUTINES **************************************************************/
2016 BlpIoRegisterDestroyRoutine (
2017 _In_ PBL_IO_DESTROY_ROUTINE DestroyRoutine
2027 _In_ PBL_DEVICE_DESCRIPTOR Device
,
2030 _Out_ PULONG DeviceId
2034 BlDeviceGetInformation (
2035 _In_ ULONG DeviceId
,
2036 _Out_ PBL_DEVICE_INFORMATION DeviceInformation
2040 BlDeviceSetInformation (
2041 _In_ ULONG DeviceId
,
2042 _In_ PBL_DEVICE_INFORMATION DeviceInformation
2046 BlDeviceReadAtOffset (
2047 _In_ ULONG DeviceId
,
2049 _In_ ULONGLONG Offset
,
2051 _Out_ PULONG BytesRead
2054 /* IMAGE ROUTINES ************************************************************/
2057 BlImgLoadImageWithProgress2 (
2058 _In_ ULONG DeviceId
,
2059 _In_ BL_MEMORY_TYPE MemoryType
,
2060 _In_ PWCHAR FileName
,
2061 _Inout_ PVOID
* MappedBase
,
2062 _Inout_ PULONG MappedSize
,
2063 _In_ ULONG ImageFlags
,
2064 _In_ BOOLEAN ShowProgress
,
2065 _Out_opt_ PUCHAR
* HashBuffer
,
2066 _Out_opt_ PULONG HashSize
2069 PIMAGE_SECTION_HEADER
2071 _In_ PVOID ImageBase
,
2072 _In_ ULONG ImageSize
2075 /* FILE I/O ROUTINES *********************************************************/
2083 BlFileReadAtOffsetEx (
2086 _In_ ULONGLONG ByteOffset
,
2088 _Out_ PULONG BytesReturned
,
2093 BlFileGetInformation (
2095 _In_ PBL_FILE_INFORMATION FileInfo
2100 _In_ ULONG DeviceId
,
2101 _In_ PWCHAR FileName
,
2106 /* INPUT CONSOLE ROUTINES ****************************************************/
2109 ConsoleInputLocalDestruct (
2110 _In_
struct _BL_INPUT_CONSOLE
* Console
2114 ConsoleInputBaseReinitialize (
2115 _In_
struct _BL_INPUT_CONSOLE
* Console
2119 ConsoleCreateLocalInputCnsole (
2123 /* TEXT CONSOLE ROUTINES *****************************************************/
2126 ConsoleGraphicalDestruct (
2127 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2131 ConsoleGraphicalClearText (
2132 _In_ PBL_GRAPHICS_CONSOLE Console
,
2133 _In_ BOOLEAN LineOnly
2137 ConsoleGraphicalClearPixels (
2138 _In_ PBL_GRAPHICS_CONSOLE Console
,
2143 ConsoleGraphicalReinitialize (
2144 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2148 ConsoleGraphicalSetTextState (
2149 _In_ PBL_GRAPHICS_CONSOLE Console
,
2151 _In_ PBL_DISPLAY_STATE TextState
2155 ConsoleGraphicalIsEnabled (
2156 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2160 ConsoleGraphicalGetGraphicalResolution (
2161 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2162 _In_ PBL_DISPLAY_MODE DisplayMode
2166 ConsoleGraphicalGetOriginalResolution (
2167 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2168 _In_ PBL_DISPLAY_MODE DisplayMode
2172 ConsoleGraphicalEnable (
2173 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2178 ConsoleTextLocalDestruct (
2179 _In_
struct _BL_TEXT_CONSOLE
* Console
2183 ConsoleTextLocalReinitialize (
2184 _In_
struct _BL_TEXT_CONSOLE
* Console
2188 ConsoleTextBaseGetTextState (
2189 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2190 _Out_ PBL_DISPLAY_STATE TextState
2194 ConsoleTextLocalSetTextState (
2195 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2197 _In_ PBL_DISPLAY_STATE TextState
2201 ConsoleTextBaseGetTextResolution (
2202 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2203 _Out_ PULONG TextResolution
2207 ConsoleTextLocalSetTextResolution (
2208 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2209 _In_ ULONG NewTextResolution
,
2210 _Out_ PULONG OldTextResolution
2214 ConsoleTextLocalClearText (
2215 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2216 _In_ BOOLEAN LineOnly
2220 ConsoleTextLocalWriteText (
2221 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2223 _In_ ULONG Attribute
2227 ConsoleTextLocalConstruct (
2228 _In_ PBL_TEXT_CONSOLE TextConsole
,
2229 _In_ BOOLEAN Activate
2233 ConsolepFindResolution (
2234 _In_ PBL_DISPLAY_MODE Mode
,
2235 _In_ PBL_DISPLAY_MODE List
,
2240 ConsoleFirmwareTextClear (
2241 _In_ PBL_TEXT_CONSOLE Console
,
2242 _In_ BOOLEAN LineOnly
2246 ConsoleFirmwareTextClose (
2247 _In_ PBL_TEXT_CONSOLE TextConsole
2251 ConsoleFirmwareTextOpen (
2252 _In_ PBL_TEXT_CONSOLE TextConsole
2256 ConsoleFirmwareTextSetState (
2257 _In_ PBL_TEXT_CONSOLE TextConsole
,
2259 _In_ PBL_DISPLAY_STATE State
2263 ConsoleGraphicalConstruct (
2264 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2268 ConsoleCreateRemoteConsole (
2269 _In_ PBL_TEXT_CONSOLE
* TextConsole
2273 ConsoleEfiGraphicalOpenProtocol (
2274 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2275 _In_ BL_GRAPHICS_CONSOLE_TYPE Type
2279 ConsoleFirmwareGraphicalClose (
2280 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2284 ConsoleFirmwareGraphicalDisable (
2285 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2289 ConsoleFirmwareGraphicalClear (
2290 _In_ PBL_GRAPHICS_CONSOLE Console
,
2295 ConsoleFirmwareGraphicalEnable (
2296 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2301 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2305 ConsoleEfiUgaClose (
2306 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2310 ConsoleEfiGopClose (
2311 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2316 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2320 ConsoleEfiGopEnable (
2321 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2325 ConsoleEfiUgaSetResolution (
2326 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2327 _In_ PBL_DISPLAY_MODE DisplayMode
,
2328 _In_ ULONG DisplayModeCount
2332 ConsoleCreateLocalInputConsole (
2337 ConsoleInputLocalEraseBuffer (
2338 _In_ PBL_INPUT_CONSOLE Console
,
2339 _In_opt_ PULONG ValueToFill
2343 ConsolepClearBuffer (
2344 _In_ PUCHAR FrameBuffer
,
2346 _In_ PUCHAR FillColor
,
2348 _In_ ULONG ScanlineWidth
,
2349 _In_ ULONG PixelDepth
2353 ConsolepConvertColorToPixel (
2354 _In_ BL_COLOR Color
,
2358 extern ULONG MmDescriptorCallTreeCount
;
2359 extern ULONG BlpApplicationFlags
;
2360 extern BL_LIBRARY_PARAMETERS BlpLibraryParameters
;
2361 extern BL_TRANSLATION_TYPE MmTranslationType
;
2362 extern PBL_ARCH_CONTEXT CurrentExecutionContext
;
2363 extern PBL_DEVICE_DESCRIPTOR BlpBootDevice
;
2364 extern BL_LOADED_APPLICATION_ENTRY BlpApplicationEntry
;
2365 extern EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*EfiConOut
;
2366 extern EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL
*EfiConInEx
;
2367 extern EFI_GUID EfiGraphicsOutputProtocol
;
2368 extern EFI_GUID EfiUgaDrawProtocol
;
2369 extern EFI_GUID EfiLoadedImageProtocol
;
2370 extern EFI_GUID EfiDevicePathProtocol
;
2371 extern EFI_GUID EfiBlockIoProtocol
;
2372 extern EFI_GUID EfiSimpleTextInputExProtocol
;
2373 extern EFI_GUID EfiRootAcpiTableGuid
;
2374 extern EFI_GUID EfiRootAcpiTable10Guid
;
2375 extern EFI_GUID EfiGlobalVariable
;
2376 extern ULONG ConsoleGraphicalResolutionListFlags
;
2377 extern BL_DISPLAY_MODE ConsoleGraphicalResolutionList
[];
2378 extern BL_DISPLAY_MODE ConsoleTextResolutionList
[];
2379 extern ULONG ConsoleGraphicalResolutionListSize
;
2380 extern PVOID DspRemoteInputConsole
;
2381 extern PVOID DspLocalInputConsole
;
2382 extern WCHAR BlScratchBuffer
[8192];
2383 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedAllocated
;