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_WINLOAD 0x04
70 #define BL_APPLICATION_ENTRY_STARTUP 0x08
71 #define BL_APPLICATION_ENTRY_REBOOT_ON_ERROR 0x20
72 #define BL_APPLICATION_ENTRY_NTLDR 0x40
73 #define BL_APPLICATION_ENTRY_BCD_OPTIONS_EXTERNAL 0x80
74 #define BL_APPLICATION_ENTRY_WINRESUME 0x100
75 #define BL_APPLICATION_ENTRY_SETUPLDR 0x200
76 #define BL_APPLICATION_ENTRY_BOOTSECTOR 0x400
77 #define BL_APPLICATION_ENTRY_BOOTMGR 0x1000
78 #define BL_APPLICATION_ENTRY_DISPLAY_ORDER 0x800000
79 #define BL_APPLICATION_ENTRY_FIXED_SEQUENCE 0x20000000
81 #define BL_CONTEXT_PAGING_ON 1
82 #define BL_CONTEXT_INTERRUPTS_ON 2
84 #define BL_MM_FLAG_USE_FIRMWARE_FOR_MEMORY_MAP_BUFFERS 0x01
85 #define BL_MM_FLAG_REQUEST_COALESCING 0x02
87 #define BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG 0x01
88 #define BL_MM_ADD_DESCRIPTOR_TRUNCATE_FLAG 0x02
89 #define BL_MM_ADD_DESCRIPTOR_NEVER_COALESCE_FLAG 0x10
90 #define BL_MM_ADD_DESCRIPTOR_NEVER_TRUNCATE_FLAG 0x20
91 #define BL_MM_ADD_DESCRIPTOR_UPDATE_LIST_POINTER_FLAG 0x2000
93 #define BL_MM_REQUEST_DEFAULT_TYPE 1
94 #define BL_MM_REQUEST_TOP_DOWN_TYPE 2
96 #define BL_MM_REMOVE_VIRTUAL_REGION_FLAG 0x80000000
98 #define BL_LIBRARY_FLAG_NO_DISPLAY 0x01
99 #define BL_LIBRARY_FLAG_REINITIALIZE 0x02
100 #define BL_LIBRARY_FLAG_REINITIALIZE_ALL 0x04
101 #define BL_LIBRARY_FLAG_ZERO_HEAP_ALLOCATIONS_ON_FREE 0x10
102 #define BL_LIBRARY_FLAG_INITIALIZATION_COMPLETED 0x20
103 #define BL_LIBRARY_FLAG_NO_GRAPHICS_CONSOLE 0x800
105 #define BL_DISPLAY_GRAPHICS_FORCED_VIDEO_MODE_FLAG 0x01
106 #define BL_DISPLAY_GRAPHICS_FORCED_HIGH_RES_MODE_FLAG 0x02
108 #define BL_HT_VALUE_IS_INLINE 0x01
110 #define BL_FS_REGISTER_AT_HEAD_FLAG 1
112 #define BL_BLOCK_DEVICE_REMOVABLE_FLAG 0x01
114 #define BL_MEMORY_CLASS_SHIFT 28
116 #define BL_FILE_READ_ACCESS 0x01
117 #define BL_FILE_WRITE_ACCESS 0x02
118 #define BL_DIRECTORY_ACCESS 0x04
119 #define BL_UNKNOWN_ACCESS 0x10
121 #define BL_DEVICE_READ_ACCESS 0x01
122 #define BL_DEVICE_WRITE_ACCESS 0x02
124 #define BL_DEVICE_ENTRY_OPENED 0x01
125 #define BL_DEVICE_ENTRY_READ_ACCESS 0x02
126 #define BL_DEVICE_ENTRY_WRITE_ACCESS 0x04
128 #define BL_FILE_ENTRY_OPENED 0x01
129 #define BL_FILE_ENTRY_READ_ACCESS 0x02
130 #define BL_FILE_ENTRY_WRITE_ACCESS 0x04
131 #define BL_FILE_ENTRY_UNKNOWN_ACCESS 0x10
133 #define BL_IMG_VALID_FILE 0x01
134 #define BL_IMG_MEMORY_FILE 0x02
135 #define BL_IMG_REMOTE_FILE 0x04
137 #define BL_LOAD_IMG_VIRTUAL_BUFFER 0x01
138 #define BL_LOAD_IMG_EXISTING_BUFFER 0x04
139 #define BL_LOAD_IMG_UNKNOWN_BUFFER_FLAG 0x08
140 #define BL_LOAD_IMG_COMPUTE_SIGNATURE 0x10
141 #define BL_LOAD_IMG_COMPUTE_HASH 0x40000
143 /* ENUMERATIONS **************************************************************/
145 typedef enum _BL_COLOR
163 } BL_COLOR
, *PBL_COLOR
;
165 typedef enum _BL_MEMORY_DESCRIPTOR_TYPE
169 } BL_MEMORY_DESCRIPTOR_TYPE
;
171 typedef enum _BL_TRANSLATION_TYPE
177 } BL_TRANSLATION_TYPE
;
179 typedef enum _BL_ARCH_MODE
188 typedef enum _BL_DEVICE_TYPE
191 LegacyPartitionDevice
= 2,
200 // Local Device Types
202 typedef enum _BL_LOCAL_DEVICE_TYPE
209 VirtualDiskDevice
= 6
210 } BL_LOCAL_DEVICE_TYPE
;
215 typedef enum _BL_PARTITION_TYPE
225 typedef enum _BL_PATH_TYPE
234 typedef enum _BL_MEMORY_CLASS
244 typedef enum _BL_MEMORY_TYPE
249 BlLoaderMemory
= 0xD0000002,
250 BlLoaderDeviceMemory
= 0xD0000004,
251 BlLoaderHeap
= 0xD0000005,
252 BlLoaderPageDirectory
= 0xD0000006,
253 BlLoaderReferencePage
= 0xD0000007,
254 BlLoaderRamDisk
= 0xD0000008,
255 BlLoaderData
= 0xD000000A,
256 BlLoaderRegistry
= 0xD000000B,
257 BlLoaderBlockMemory
= 0xD000000C,
258 BlLoaderSelfMap
= 0xD000000F,
261 // Application Memory
263 BlApplicationReserved
= 0xE0000001,
264 BlApplicationData
= 0xE0000004,
269 BlConventionalMemory
= 0xF0000001,
270 BlUnusableMemory
= 0xF0000002,
271 BlReservedMemory
= 0xF0000003,
272 BlEfiBootMemory
= 0xF0000004,
273 BlEfiRuntimeMemory
= 0xF0000006,
274 BlAcpiReclaimMemory
= 0xF0000008,
275 BlAcpiNvsMemory
= 0xF0000009,
276 BlDeviceIoMemory
= 0xF000000A,
277 BlDevicePortMemory
= 0xF000000B,
278 BlPalMemory
= 0xF000000C,
281 typedef enum _BL_MEMORY_ATTR
284 // Memory Caching Attributes
286 BlMemoryUncached
= 0x00000001,
287 BlMemoryWriteCombined
= 0x00000002,
288 BlMemoryWriteThrough
= 0x00000004,
289 BlMemoryWriteBack
= 0x00000008,
290 BlMemoryUncachedExported
= 0x00000010,
291 BlMemoryValidCacheAttributes
= BlMemoryUncached
| BlMemoryWriteCombined
| BlMemoryWriteThrough
| BlMemoryWriteBack
| BlMemoryUncachedExported
,
292 BlMemoryValidCacheAttributeMask
= 0x000000FF,
295 // Memory Protection Attributes
297 BlMemoryWriteProtected
= 0x00000100,
298 BlMemoryReadProtected
= 0x00000200,
299 BlMemoryExecuteProtected
= 0x00000400,
300 BlMemoryValidProtectionAttributes
= BlMemoryWriteProtected
| BlMemoryReadProtected
| BlMemoryExecuteProtected
,
301 BlMemoryValidProtectionAttributeMask
= 0x0000FF00,
304 // Memory Allocation Attributes
306 BlMemoryUnknown
= 0x00010000,
307 BlMemoryNonFixed
= 0x00020000,
308 BlMemoryFixed
= 0x00040000,
309 BlMemoryReserved
= 0x00080000,
310 BlMemoryValidAllocationAttributes
= BlMemoryNonFixed
| BlMemoryFixed
| BlMemoryReserved
| BlMemoryUnknown
,
311 BlMemoryValidAllocationAttributeMask
= 0x00FF0000,
314 // Memory Type Attributes
316 BlMemoryRuntime
= 0x01000000,
317 BlMemoryCoalesced
= 0x02000000,
318 BlMemoryUpdate
= 0x04000000,
319 BlMemoryNonFirmware
= 0x08000000,
320 BlMemorySpecial
= 0x20000000,
321 BlMemoryFirmware
= 0x80000000,
322 BlMemoryValidTypeAttributes
= BlMemoryRuntime
| BlMemoryCoalesced
| BlMemoryUpdate
| BlMemoryNonFirmware
| BlMemorySpecial
| BlMemoryFirmware
,
323 BlMemoryValidTypeAttributeMask
= 0xFF000000,
326 /* CALLBACKS *****************************************************************/
328 struct _BL_FILE_ENTRY
;
329 struct _BL_FILE_INFORMATION
;
333 _In_
struct _BL_FILE_ENTRY
* Directory
,
334 _In_ PWCHAR FileName
,
336 _Out_
struct _BL_FILE_ENTRY
** FileEntry
342 _In_
struct _BL_FILE_ENTRY
* FileEntry
348 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
351 _Out_opt_ PULONG BytesRead
362 (*PBL_FILE_GET_NEXT
) (
368 (*PBL_FILE_GET_INFO
) (
369 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
370 _Out_
struct _BL_FILE_INFORMATION
* FileInfo
375 (*PBL_FILE_SET_INFO
) (
376 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
377 _In_
struct _BL_FILE_INFORMATION
* FileInfo
382 (*PBL_FS_INIT_CALLBACK
) (
388 (*PBL_FS_DESTROY_CALLBACK
) (
394 (*PBL_FS_MOUNT_CALLBACK
) (
397 _Out_
struct _BL_FILE_ENTRY
** FileEntry
402 (*PBL_FS_PURGE_CALLBACK
) (
408 (*PBL_FILE_DESTROY_CALLBACK
) (
412 struct _BL_TEXT_CONSOLE
;
413 struct _BL_DISPLAY_STATE
;
414 struct _BL_DISPLAY_MODE
;
415 struct _BL_INPUT_CONSOLE
;
416 struct _BL_REMOTE_CONSOLE
;
417 struct _BL_GRAPHICS_CONSOLE
;
420 (*PCONSOLE_DESTRUCT
) (
421 _In_
struct _BL_TEXT_CONSOLE
* Console
426 (*PCONSOLE_REINITIALIZE
) (
427 _In_
struct _BL_TEXT_CONSOLE
* Console
432 (*PCONSOLE_GET_TEXT_STATE
) (
433 _In_
struct _BL_TEXT_CONSOLE
* Console
,
434 _Out_
struct _BL_DISPLAY_STATE
* TextState
439 (*PCONSOLE_SET_TEXT_STATE
) (
440 _In_
struct _BL_TEXT_CONSOLE
* Console
,
442 _In_
struct _BL_DISPLAY_STATE
* TextState
447 (*PCONSOLE_GET_TEXT_RESOLUTION
) (
448 _In_
struct _BL_TEXT_CONSOLE
* Console
,
449 _Out_ PULONG TextResolution
454 (*PCONSOLE_SET_TEXT_RESOLUTION
) (
455 _In_
struct _BL_TEXT_CONSOLE
* Console
,
456 _In_ ULONG NewTextResolution
,
457 _Out_ PULONG OldTextResolution
462 (*PCONSOLE_CLEAR_TEXT
) (
463 _In_
struct _BL_TEXT_CONSOLE
* Console
,
464 _In_ BOOLEAN LineOnly
469 (*PCONSOLE_IS_ENABLED
) (
470 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
475 (*PCONSOLE_GET_GRAPHICAL_RESOLUTION
) (
476 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
477 _Out_
struct _BL_DISPLAY_MODE
* DisplayMode
482 (*PCONSOLE_SET_GRAPHICAL_RESOLUTION
) (
483 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
484 _In_
struct _BL_DISPLAY_MODE DisplayMode
490 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
496 (*PCONSOLE_WRITE_TEXT
) (
497 _In_
struct _BL_TEXT_CONSOLE
* Console
,
504 (*PBL_TBL_LOOKUP_ROUTINE
) (
506 _In_ PVOID Argument1
,
507 _In_ PVOID Argument2
,
508 _In_ PVOID Argument3
,
514 (*PBL_TBL_MAP_ROUTINE
) (
516 _In_ ULONG EntryIndex
521 (*PBL_TBL_SET_ROUTINE
) (
527 (*PBL_IO_DESTROY_ROUTINE
) (
531 struct _BL_HASH_ENTRY
;
534 (*PBL_HASH_TABLE_COMPARE_FUNCTION
) (
535 _In_
struct _BL_HASH_ENTRY
* Entry1
,
536 _In_
struct _BL_HASH_ENTRY
* Entry2
541 (*PBL_HASH_TABLE_HASH_FUNCTION
) (
542 _In_
struct _BL_HASH_ENTRY
* Entry
,
546 struct _BL_DEVICE_ENTRY
;
547 struct _BL_DEVICE_DESCRIPTOR
;
548 struct _BL_DEVICE_INFORMATION
;
552 (*PBL_DEVICE_ENUMERATE_DEVICE_CLASS
) (
559 _In_
struct _BL_DEVICE_DESCRIPTOR
* Device
,
560 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
565 (*PBL_DEVICE_CLOSE
) (
566 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
572 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
575 _Out_ PULONG BytesRead
580 (*PBL_DEVICE_WRITE
) (
586 (*PBL_DEVICE_GET_INFORMATION
) (
587 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
588 _Out_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
593 (*PBL_DEVICE_SET_INFORMATION
) (
594 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
595 _In_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
600 (*PBL_DEVICE_RESET
) (
606 (*PBL_DEVICE_FLUSH
) (
612 (*PBL_DEVICE_CREATE
) (
617 /* DATA STRUCTURES ***********************************************************/
619 typedef struct _BL_LIBRARY_PARAMETERS
622 ULONG TranslationType
;
623 ULONG MinimumAllocationCount
;
624 ULONG MinimumHeapSize
;
625 ULONG HeapAllocationAttributes
;
626 PWCHAR ApplicationBaseDirectory
;
627 ULONG DescriptorCount
;
628 PWCHAR FontBaseDirectory
;
629 } BL_LIBRARY_PARAMETERS
, *PBL_LIBRARY_PARAMETERS
;
631 /* This should eventually go into a more public header */
632 typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK
634 /* This header tells the library what image we're dealing with */
639 ULONG MemoryTranslationType
;
641 /* Where is the image located */
645 /* Offset to BL_MEMORY_DATA */
646 ULONG MemoryDataOffset
;
648 /* Offset to BL_APPLICATION_ENTRY */
649 ULONG AppEntryOffset
;
651 /* Offset to BL_DEVICE_DESCRPIPTOR */
652 ULONG BootDeviceOffset
;
654 /* Offset to BL_FIRMWARE_PARAMETERS */
655 ULONG FirmwareParametersOffset
;
657 /* Offset to BL_RETURN_ARGUMENTS */
658 ULONG ReturnArgumentsOffset
;
659 } BOOT_APPLICATION_PARAMETER_BLOCK
, *PBOOT_APPLICATION_PARAMETER_BLOCK
;
661 typedef struct _BL_MEMORY_DATA
665 ULONG DescriptorCount
;
666 ULONG DescriptorSize
;
667 ULONG DescriptorOffset
;
668 } BL_MEMORY_DATA
, *PBL_MEMORY_DATA
;
670 typedef struct _BL_FIRMWARE_DESCRIPTOR
674 EFI_HANDLE ImageHandle
;
675 EFI_SYSTEM_TABLE
*SystemTable
;
676 } BL_FIRMWARE_DESCRIPTOR
, *PBL_FIRMWARE_DESCRIPTOR
;
678 typedef struct _BL_RETURN_ARGUMENTS
682 ULONG ReturnArgumentData
[5];
683 } BL_RETURN_ARGUMENTS
, *PBL_RETURN_ARGUMENTS
;
685 typedef struct _BL_MEMORY_DESCRIPTOR
687 LIST_ENTRY ListEntry
;
693 ULONGLONG VirtualPage
;
697 ULONGLONG BaseAddress
;
698 ULONGLONG VirtualAddress
;
704 } BL_MEMORY_DESCRIPTOR
, *PBL_MEMORY_DESCRIPTOR
;
706 typedef struct _BL_BCD_OPTION
712 ULONG NextEntryOffset
;
714 } BL_BCD_OPTION
, *PBL_BCD_OPTION
;
716 typedef struct _BL_APPLICATION_ENTRY
722 BL_BCD_OPTION BcdData
;
723 } BL_APPLICATION_ENTRY
, *PBL_APPLICATION_ENTRY
;
725 typedef struct _BL_LOADED_APPLICATION_ENTRY
729 PBL_BCD_OPTION BcdData
;
730 } BL_LOADED_APPLICATION_ENTRY
, *PBL_LOADED_APPLICATION_ENTRY
;
732 typedef struct _BL_HARDDISK_DEVICE
739 ULONG PartitionSignature
;
744 GUID PartitionSignature
;
752 } BL_HARDDISK_DEVICE
;
754 typedef struct _BL_LOCAL_DEVICE
764 BL_HARDDISK_DEVICE HardDisk
;
768 PHYSICAL_ADDRESS ImageBase
;
769 LARGE_INTEGER ImageSize
;
775 typedef struct _BL_DEVICE_DESCRIPTOR
777 DEVICE_TYPE DeviceType
;
783 BL_LOCAL_DEVICE Local
;
794 ULONG PartitionNumber
;
802 BL_LOCAL_DEVICE Disk
;
805 } BL_DEVICE_DESCRIPTOR
, *PBL_DEVICE_DESCRIPTOR
;
807 typedef struct _BL_FILE_PATH_DESCRIPTOR
812 UCHAR Path
[ANYSIZE_ARRAY
];
813 } BL_FILE_PATH_DESCRIPTOR
, *PBL_FILE_PATH_DESCRIPTOR
;
815 typedef struct _BL_WINDOWS_LOAD_OPTIONS
821 WCHAR LoadOptions
[ANYSIZE_ARRAY
];
822 } BL_WINDOWS_LOAD_OPTIONS
, *PBL_WINDOWS_LOAD_OPTIONS
;
824 typedef struct _BL_ARCH_CONTEXT
827 BL_TRANSLATION_TYPE TranslationType
;
829 } BL_ARCH_CONTEXT
, *PBL_ARCH_CONTEXT
;
831 typedef struct _BL_MEMORY_DESCRIPTOR_LIST
837 } BL_MEMORY_DESCRIPTOR_LIST
, *PBL_MEMORY_DESCRIPTOR_LIST
;
839 typedef struct _BL_ADDRESS_RANGE
843 } BL_ADDRESS_RANGE
, *PBL_ADDRESS_RANGE
;
845 typedef struct _BL_FILE_INFORMATION
851 } BL_FILE_INFORMATION
, *PBL_FILE_INFORMATION
;
853 typedef struct _BL_FILE_CALLBACKS
856 PBL_FILE_CLOSE Close
;
858 PBL_FILE_WRITE Write
;
859 PBL_FILE_GET_NEXT GetNext
;
860 PBL_FILE_GET_INFO GetInfo
;
861 PBL_FILE_SET_INFO SetInfo
;
862 } BL_FILE_CALLBACKS
, *PBL_FILE_CALLBACKS
;
864 typedef struct _BL_FILE_ENTRY
870 ULONG ReferenceCount
;
872 ULONGLONG TotalBytesRead
;
874 BL_FILE_CALLBACKS Callbacks
;
875 PVOID FsSpecificData
;
876 } BL_FILE_ENTRY
, *PBL_FILE_ENTRY
;
878 typedef struct _BL_FILE_SYSTEM_ENTRY
880 LIST_ENTRY ListEntry
;
881 PBL_FS_INIT_CALLBACK InitCallback
;
882 PBL_FS_DESTROY_CALLBACK DestroyCallback
;
883 PBL_FS_MOUNT_CALLBACK MountCallback
;
884 PBL_FS_PURGE_CALLBACK PurgeCallback
;
885 } BL_FILE_SYSTEM_ENTRY
, *PBL_FILE_SYSTEM_ENTRY
;
887 typedef struct _BL_FILE_SYSTEM_REGISTRATION_TABLE
889 PBL_FS_INIT_CALLBACK Init
;
890 PBL_FS_DESTROY_CALLBACK Destroy
;
891 PBL_FS_MOUNT_CALLBACK Mount
;
892 PBL_FS_PURGE_CALLBACK Purge
;
893 } BL_FILE_SYSTEM_REGISTRATION_TABLE
;
895 typedef struct _BL_DISPLAY_STATE
902 } BL_DISPLAY_STATE
, *PBL_DISPLAY_STATE
;
904 typedef struct _BL_DISPLAY_MODE
909 } BL_DISPLAY_MODE
, *PBL_DISPLAY_MODE
;
911 typedef struct _BL_TEXT_CONSOLE_VTABLE
913 PCONSOLE_DESTRUCT Destruct
;
914 PCONSOLE_REINITIALIZE Reinitialize
;
915 PCONSOLE_GET_TEXT_STATE GetTextState
;
916 PCONSOLE_SET_TEXT_STATE SetTextState
;
917 PCONSOLE_GET_TEXT_RESOLUTION GetTextResolution
;
918 PCONSOLE_SET_TEXT_RESOLUTION SetTextResolution
;
919 PCONSOLE_CLEAR_TEXT ClearText
;
920 PCONSOLE_WRITE_TEXT WriteText
;
921 } BL_TEXT_CONSOLE_VTABLE
, *PBL_TEXT_CONSOLE_VTABLE
;
923 typedef struct _BL_GRAPHICS_CONSOLE_VTABLE
925 BL_TEXT_CONSOLE_VTABLE Text
;
926 PCONSOLE_IS_ENABLED IsEnabled
;
927 PCONSOLE_ENABLE Enable
;
928 PVOID GetConsoleResolution
;
929 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetGraphicalResolution
;
930 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetOriginalResolution
;
931 PCONSOLE_SET_GRAPHICAL_RESOLUTION SetOriginalResolution
;
932 /// more for graphics ///
933 } BL_GRAPHICS_CONSOLE_VTABLE
, *PBL_GRAPHICS_CONSOLE_VTABLE
;
935 typedef struct _BL_TEXT_CONSOLE
937 PBL_TEXT_CONSOLE_VTABLE Callbacks
;
938 BL_DISPLAY_STATE State
;
939 BL_DISPLAY_MODE DisplayMode
;
941 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
* Protocol
;
943 EFI_SIMPLE_TEXT_OUTPUT_MODE OldMode
;
944 } BL_TEXT_CONSOLE
, *PBL_TEXT_CONSOLE
;
946 typedef struct _BL_INPUT_CONSOLE_VTABLE
948 PCONSOLE_DESTRUCT Destruct
;
949 PCONSOLE_REINITIALIZE Reinitialize
;
950 //PCONSOLE_IS_KEY_PENDING IsKeyPending;
951 //PCONSOLE_READ_INPUT ReadInput;
952 //PCONSOLE_ERASE_BUFFER EraseBuffer;
953 //PCONSOLE_FILL_BUFFER FillBuffer;
954 } BL_INPUT_CONSOLE_VTABLE
, *PBL_INPUT_CONSOLE_VTABLE
;
956 typedef struct _BL_INPUT_CONSOLE
958 PBL_INPUT_CONSOLE_VTABLE Callbacks
;
963 } BL_INPUT_CONSOLE
, *PBL_INPUT_CONSOLE
;
965 typedef enum _BL_GRAPHICS_CONSOLE_TYPE
969 } BL_GRAPHICS_CONSOLE_TYPE
;
971 typedef struct _BL_GRAPHICS_CONSOLE
973 BL_TEXT_CONSOLE TextConsole
;
974 BL_DISPLAY_MODE DisplayMode
;
978 BL_DISPLAY_MODE OldDisplayMode
;
981 BL_GRAPHICS_CONSOLE_TYPE Type
;
982 EFI_GRAPHICS_OUTPUT_PROTOCOL
* Protocol
;
984 ULONG FrameBufferSize
;
985 ULONG PixelsPerScanLine
;
988 } BL_GRAPHICS_CONSOLE
, *PBL_GRAPHICS_CONSOLE
;
990 typedef struct _BL_REMOTE_CONSOLE
992 BL_TEXT_CONSOLE TextConsole
;
993 } BL_REMOTE_CONSOLE
, *PBL_REMOTE_CONSOLE
;
995 typedef struct _BL_HASH_TABLE
997 PLIST_ENTRY HashLinks
;
999 PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
;
1000 PBL_HASH_TABLE_HASH_FUNCTION HashFunction
;
1001 } BL_HASH_TABLE
, *PBL_HASH_TABLE
;
1003 typedef struct _BL_HASH_ENTRY
1008 } BL_HASH_ENTRY
, *PBL_HASH_ENTRY
;
1010 typedef struct _BL_HASH_VALUE
1014 } BL_HASH_VALUE
, *PBL_HASH_VALUE
;
1016 typedef struct _BL_HASH_NODE
1018 LIST_ENTRY ListEntry
;
1019 BL_HASH_ENTRY Entry
;
1020 BL_HASH_VALUE Value
;
1021 } BL_HASH_NODE
, *PBL_HASH_NODE
;
1023 typedef struct _BL_BLOCK_DEVICE_INFORMATION
1025 BL_LOCAL_DEVICE_TYPE Type
;
1028 BL_PARTITION_TYPE PartitionType
;
1031 ULONGLONG LastBlock
;
1048 } BL_BLOCK_DEVICE_INFORMATION
, *PBL_BLOCK_DEVICE_INFORMATION
;
1050 typedef struct _BL_DEVICE_INFORMATION
1052 BL_DEVICE_TYPE DeviceType
;
1055 BL_BLOCK_DEVICE_INFORMATION BlockDeviceInfo
;
1057 } BL_DEVICE_INFORMATION
, *PBL_DEVICE_INFORMATION
;
1059 typedef struct _BL_BLOCK_DEVICE
1061 BL_BLOCK_DEVICE_INFORMATION
;
1062 ULONGLONG StartOffset
;
1063 EFI_BLOCK_IO
* Protocol
;
1065 } BL_BLOCK_DEVICE
, *PBL_BLOCK_DEVICE
;
1067 typedef struct _BL_PROTOCOL_HANDLE
1071 } BL_PROTOCOL_HANDLE
, *PBL_PROTOCOL_HANDLE
;
1073 typedef struct _BL_DEVICE_CALLBACKS
1075 PBL_DEVICE_ENUMERATE_DEVICE_CLASS EnumerateDeviceClass
;
1076 PBL_DEVICE_OPEN Open
;
1077 PBL_DEVICE_CLOSE Close
;
1078 PBL_DEVICE_READ Read
;
1079 PBL_DEVICE_WRITE Write
;
1080 PBL_DEVICE_GET_INFORMATION GetInformation
;
1081 PBL_DEVICE_SET_INFORMATION SetInformation
;
1082 PBL_DEVICE_RESET Reset
;
1083 PBL_DEVICE_FLUSH Flush
;
1084 PBL_DEVICE_CREATE Create
;
1085 } BL_DEVICE_CALLBACKS
, *PBL_DEVICE_CALLBACKS
;
1087 typedef struct _BL_DEVICE_ENTRY
1092 ULONG ReferenceCount
;
1093 BL_DEVICE_CALLBACKS Callbacks
;
1094 PVOID DeviceSpecificData
;
1095 PBL_DEVICE_DESCRIPTOR DeviceDescriptor
;
1096 } BL_DEVICE_ENTRY
, *PBL_DEVICE_ENTRY
;
1098 typedef struct _BL_IMG_FILE
1108 } BL_IMG_FILE
, *PBL_IMG_FILE
;
1110 typedef struct _BL_DEFERRED_FONT_FILE
1112 LIST_ENTRY ListEntry
;
1114 PBL_DEVICE_DESCRIPTOR Device
;
1116 } BL_DEFERRED_FONT_FILE
, *PBL_DEFERRED_FONT_FILE
;
1120 typedef struct _BMP_HEADER
1126 } BMP_HEADER
, *PBMP_HEADER
;
1128 typedef struct _DIB_HEADER
1137 ULONG XPelsPerMeter
;
1138 ULONG YPelsPerMEter
;
1141 } DIB_HEADER
, *PDIB_HEADER
;
1143 typedef struct _BITMAP
1145 BMP_HEADER BmpHeader
;
1146 DIB_HEADER DibHeader
;
1150 typedef struct _COORD
1156 typedef struct _BL_PD_DATA_BLOB
1161 } BL_PD_DATA_BLOB
, *PBL_PD_DATA_BLOB
;
1163 /* INLINE ROUTINES ***********************************************************/
1167 BlSetupDefaultParameters (
1168 _Out_ PBL_LIBRARY_PARAMETERS LibraryParameters
1171 BL_LIBRARY_PARAMETERS DefaultParameters
=
1183 /* Copy the defaults */
1184 RtlCopyMemory(LibraryParameters
, &DefaultParameters
, sizeof(*LibraryParameters
));
1189 MmMdInitializeListHead (
1190 _In_ PBL_MEMORY_DESCRIPTOR_LIST List
1193 /* Initialize the list */
1194 InitializeListHead(&List
->ListHead
);
1195 List
->First
= &List
->ListHead
;
1199 /* INITIALIZATION ROUTINES ***************************************************/
1202 BlInitializeLibrary(
1203 _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters
,
1204 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1215 _In_ PBL_FIRMWARE_DESCRIPTOR FirmwareParameters
1220 _In_ PBL_MEMORY_DATA MemoryData
,
1221 _In_ BL_TRANSLATION_TYPE TranslationType
,
1222 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1232 _In_ PBL_MEMORY_DATA MemoryData
,
1233 _In_ ULONG MinimumPages
1239 _In_ PBL_MEMORY_DATA MemoryData
,
1240 _In_ BL_TRANSLATION_TYPE TranslationType
,
1241 _In_ BL_TRANSLATION_TYPE LibraryTranslationType
1246 _In_ ULONG HeapSize
,
1247 _In_ ULONG HeapAttributes
1253 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1257 BlpDeviceInitialize (
1272 BlpDisplayInitialize (
1286 /* FIRMWARE ROUTINES *********************************************************/
1298 _Inout_ EFI_PHYSICAL_ADDRESS
* Memory
1303 _In_ ULONG StallTime
1317 EfiConOutOutputString (
1318 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1323 EfiConOutQueryMode (
1324 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1326 _In_ UINTN
* Columns
,
1332 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1337 EfiConOutReadCurrentMode (
1338 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1339 _Out_ EFI_SIMPLE_TEXT_OUTPUT_MODE
* Mode
1343 EfiConOutSetAttribute (
1344 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1345 _In_ ULONG Attribute
1349 EfiConOutSetCursorPosition (
1350 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1356 EfiConOutEnableCursor (
1357 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1358 _In_ BOOLEAN Visible
1362 EfiLocateHandleBuffer (
1363 _In_ EFI_LOCATE_SEARCH_TYPE SearchType
,
1364 _In_ EFI_GUID
*Protocol
,
1365 _Inout_ PULONG HandleCount
,
1366 _Inout_ EFI_HANDLE
** Buffer
1371 _In_ EFI_HANDLE Handle
,
1372 _In_ EFI_GUID
*Protocol
,
1373 _Out_ PVOID
* Interface
1378 _In_ EFI_HANDLE Handle
,
1379 _In_ EFI_GUID
*Protocol
1383 EfiGopGetCurrentMode (
1384 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1386 _Out_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
*Information
1391 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1396 EfiGopGetFrameBuffer (
1397 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1398 _Out_ PHYSICAL_ADDRESS
* FrameBuffer
,
1399 _Out_ UINTN
*FrameBufferSize
1404 _In_ EFI_RESET_TYPE ResetType
1409 _In_ EFI_DEVICE_PATH
*DevicePath
1413 EfiIsDevicePathParent (
1414 _In_ EFI_DEVICE_PATH
*DevicePath1
,
1415 _In_ EFI_DEVICE_PATH
*DevicePath2
1420 _Out_ PPHYSICAL_ADDRESS FoundRsdt
1423 /* PLATFORM TIMER ROUTINES ***************************************************/
1426 BlpTimeCalibratePerformanceCounter (
1430 /* RESOURCE LOCALE INTERNATIONALIZATION ROUTINES *****************************/
1433 BlpDisplayRegisterLocale (
1437 /* FONT ROUTINES *************************************************************/
1440 BfiFreeDeferredFontFile (
1441 _In_ PBL_DEFERRED_FONT_FILE DeferredFontFile
1446 _In_ PBL_DEVICE_DESCRIPTOR Device
,
1447 _In_ PWCHAR FontPath
1451 BfLoadDeferredFontFiles (
1457 _In_ PBL_GRAPHICS_CONSOLE Console
1461 BfClearToEndOfLine (
1462 _In_ PBL_GRAPHICS_CONSOLE Console
1465 /* FILESYSTEM ROUTINES *******************************************************/
1474 _In_ ULONG DeviceId
,
1476 _Out_ PBL_FILE_ENTRY
* FileEntry
1486 _In_ ULONG DeviceId
,
1488 _Out_ PBL_FILE_ENTRY
* FileEntry
1491 /* DEBUG ROUTINES ************************************************************/
1495 BlBdDebuggerEnabled (
1500 BlBdPullRemoteFile (
1501 _In_ PWCHAR FilePath
,
1502 _Out_ PVOID BaseAddress
,
1503 _Out_ PULONGLONG FileSize
1514 _In_ ULONG ErrorCode
,
1515 _In_ ULONG Parameter1
,
1516 _In_ ULONG_PTR Parameter2
,
1517 _In_ ULONG_PTR Parameter3
,
1518 _In_ ULONG_PTR Parameter4
1521 /* UTILITY ROUTINES **********************************************************/
1524 BlUtlUpdateProgress (
1525 _In_ ULONG Percentage
,
1526 _Out_opt_ PBOOLEAN Completed
1531 _Out_ PVOID
* TableAddress
,
1532 _In_ ULONG Signature
1541 BlUtlRegisterProgressRoutine (
1546 BlGetApplicationBaseAndSize (
1547 _Out_ PVOID
* ImageBase
,
1548 _Out_ PULONG ImageSize
1552 BlDestroyBootEntry (
1553 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
1558 _In_
const GUID
* DataGuid
,
1560 _Inout_ PBL_PD_DATA_BLOB DataBlob
1563 /* FIRMWARE UTILITY ROUTINES *************************************************/
1566 EfiGetEfiStatusCode(
1567 _In_ NTSTATUS Status
1571 EfiGetNtStatusCode (
1572 _In_ EFI_STATUS EfiStatus
1581 BlGetApplicationIdentifier (
1586 BlpSecureBootEFIIsEnabled (
1591 BlSecureBootIsEnabled (
1592 _Out_ PBOOLEAN SecureBootEnabled
1596 BlSecureBootCheckForFactoryReset (
1600 /* RESOURCE ROUTINES *********************************************************/
1603 BlResourceFindMessage (
1608 BlResourceFindHtml (
1613 BlpResourceInitialize (
1617 /* TABLE ROUTINES ************************************************************/
1623 _In_ PBL_TBL_MAP_ROUTINE MapCallback
1630 _Out_ PULONG EntryIndex
,
1631 _In_ PBL_TBL_LOOKUP_ROUTINE Callback
,
1632 _In_ PVOID Argument1
,
1633 _In_ PVOID Argument2
,
1634 _In_ PVOID Argument3
,
1635 _In_ PVOID Argument4
1640 _Inout_ PVOID
** Table
,
1641 _Inout_ PULONG Count
,
1643 _Out_ PULONG EntryIndex
,
1644 _In_ PBL_TBL_SET_ROUTINE Callback
1648 TblDoNotPurgeEntry (
1652 /* HASH TABLE ROUTINES *******************************************************/
1657 _In_ PBL_HASH_ENTRY Entry
,
1665 _In_ PBL_HASH_ENTRY Entry
,
1666 _Out_ PBL_HASH_VALUE
*Value
1672 _In_ PBL_HASH_TABLE_HASH_FUNCTION HashFunction
,
1673 _In_ PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
,
1677 /* BCD OPTION ROUTINES *******************************************************/
1681 _In_ PBL_BCD_OPTION List
,
1686 BlGetBootOptionListSize (
1687 _In_ PBL_BCD_OPTION BcdOption
1691 BlGetBootOptionSize (
1692 _In_ PBL_BCD_OPTION BcdOption
1696 BlGetBootOptionString (
1697 _In_ PBL_BCD_OPTION List
,
1703 BlGetBootOptionInteger (
1704 _In_ PBL_BCD_OPTION List
,
1706 _Out_ PULONGLONG Value
1710 BlGetBootOptionBoolean (
1711 _In_ PBL_BCD_OPTION List
,
1713 _Out_ PBOOLEAN Value
1717 BlpGetBootOptionIntegerList (
1718 _In_ PBL_BCD_OPTION List
,
1720 _Out_ PULONGLONG
* Value
,
1721 _Out_ PULONGLONG Count
,
1726 BlGetBootOptionDevice (
1727 _In_ PBL_BCD_OPTION List
,
1729 _Out_ PBL_DEVICE_DESCRIPTOR
* Value
,
1730 _In_opt_ PBL_BCD_OPTION
* ExtraOptions
1734 BlGetBootOptionGuid (
1735 _In_ PBL_BCD_OPTION List
,
1741 BlGetBootOptionGuidList (
1742 _In_ PBL_BCD_OPTION List
,
1750 _In_ PBL_BCD_OPTION OptionList
,
1751 _Out_ PBL_BCD_OPTION
*CopiedOptions
1755 BlAppendBootOptionString (
1756 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1757 _In_ PWCHAR OptionString
1761 BlAppendBootOptions (
1762 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1763 _In_ PBL_BCD_OPTION Options
1767 BlRemoveBootOption (
1768 _In_ PBL_BCD_OPTION List
,
1773 BlReplaceBootOptions (
1774 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1775 _In_ PBL_BCD_OPTION NewOptions
1778 /* BOOT REGISTRY ROUTINES ****************************************************/
1782 _In_ HANDLE KeyHandle
1787 _In_ HANDLE ParentHandle
,
1788 _In_ PWCHAR KeyName
,
1789 _Out_ PHANDLE Handle
1794 _In_ PBL_FILE_PATH_DESCRIPTOR FilePath
,
1795 _Out_ PHANDLE HiveHandle
1799 BiGetRegistryValue (
1800 _In_ HANDLE KeyHandle
,
1801 _In_ PWCHAR ValueName
,
1803 _Out_ PVOID
* Buffer
,
1804 _Out_ PULONG ValueLength
1808 BiEnumerateSubKeys (
1809 _In_ HANDLE KeyHandle
,
1810 _Out_ PWCHAR
** SubKeyList
,
1811 _Out_ PULONG SubKeyCount
1816 _In_ HANDLE KeyHandle
1821 _In_ HANDLE KeyHandle
1824 /* CONTEXT ROUTINES **********************************************************/
1827 BlpArchSwitchContext (
1828 _In_ BL_ARCH_MODE NewMode
1831 /* MEMORY DESCRIPTOR ROUTINES ************************************************/
1835 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
1838 PBL_MEMORY_DESCRIPTOR
1839 MmMdInitByteGranularDescriptor (
1841 _In_ BL_MEMORY_TYPE Type
,
1842 _In_ ULONGLONG BasePage
,
1843 _In_ ULONGLONG VirtualPage
,
1844 _In_ ULONGLONG PageCount
1848 MmMdFreeGlobalDescriptors (
1853 MmMdAddDescriptorToList (
1854 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1855 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
,
1860 MmMdRemoveDescriptorFromList (
1861 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1862 _In_ PBL_MEMORY_DESCRIPTOR Entry
1866 MmMdFindSatisfyingRegion (
1867 _In_ PBL_MEMORY_DESCRIPTOR Descriptor
,
1868 _Out_ PBL_MEMORY_DESCRIPTOR NewDescriptor
,
1869 _In_ ULONGLONG Pages
,
1870 _In_ PBL_ADDRESS_RANGE BaseRange
,
1871 _In_ PBL_ADDRESS_RANGE VirtualRange
,
1872 _In_ BOOLEAN TopDown
,
1873 _In_ BL_MEMORY_TYPE MemoryType
,
1875 _In_ ULONG Alignment
1879 MmMdRemoveRegionFromMdlEx (
1880 __in PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1882 __in ULONGLONG BasePage
,
1883 __in ULONGLONG PageCount
,
1884 __in PBL_MEMORY_DESCRIPTOR_LIST NewMdList
1888 MmMdFreeDescriptor (
1889 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
1892 /* PAGE ALLOCATOR ROUTINES ***************************************************/
1895 BlMmAllocatePhysicalPages(
1896 _Inout_ PPHYSICAL_ADDRESS Address
,
1897 _In_ BL_MEMORY_TYPE MemoryType
,
1898 _In_ ULONGLONG PageCount
,
1899 _In_ ULONG Attributes
,
1900 _In_ ULONG Alignment
1904 MmPapAllocatePhysicalPagesInRange (
1905 _Inout_ PPHYSICAL_ADDRESS BaseAddress
,
1906 _In_ BL_MEMORY_TYPE MemoryType
,
1907 _In_ ULONGLONG Pages
,
1908 _In_ ULONG Attributes
,
1909 _In_ ULONG Alignment
,
1910 _In_ PBL_MEMORY_DESCRIPTOR_LIST NewList
,
1911 _In_opt_ PBL_ADDRESS_RANGE Range
,
1912 _In_ ULONG RangeType
1916 BlMmFreePhysicalPages (
1917 _In_ PHYSICAL_ADDRESS Address
1921 MmPapAllocatePagesInRange (
1922 _Inout_ PVOID
* PhysicalAddress
,
1923 _In_ BL_MEMORY_TYPE MemoryType
,
1924 _In_ ULONGLONG Pages
,
1925 _In_ ULONG Attributes
,
1926 _In_ ULONG Alignment
,
1927 _In_opt_ PBL_ADDRESS_RANGE Range
,
1933 _Out_ PBL_MEMORY_DESCRIPTOR_LIST MemoryMap
,
1938 BlpMmInitializeConstraints (
1943 BlMmRemoveBadMemory (
1947 /* VIRTUAL MEMORY ROUTINES ***************************************************/
1950 BlMmMapPhysicalAddressEx (
1951 _In_ PVOID
* VirtualAddress
,
1952 _In_ ULONG Attributes
,
1953 _In_ ULONGLONG Size
,
1954 _In_ PHYSICAL_ADDRESS PhysicalAddress
1958 BlMmUnmapVirtualAddressEx (
1959 _In_ PVOID VirtualAddress
,
1963 /* BLOCK ALLOCATOR ROUTINES **************************************************/
1966 BlpMmCreateBlockAllocator (
1970 /* HEAP ALLOCATOR ROUTINES ***************************************************/
1982 /* DISPLAY ROUTINES **********************************************************/
1985 BlDisplayGetTextCellResolution (
1986 _Out_ PULONG TextWidth
,
1987 _Out_ PULONG TextHeight
1991 BlDisplaySetScreenResolution (
1996 BlDisplayGetScreenResolution (
2002 BlDisplayInvalidateOemBitmap (
2007 BlDisplayGetOemBitmap (
2008 _Out_ PCOORD Offset
,
2009 _Out_opt_ PULONG Flags
2013 BlDisplayValidOemBitmap (
2018 BlDisplayClearScreen (
2023 BlDisplaySetCursorType (
2027 /* I/O ROUTINES **************************************************************/
2030 BlpIoRegisterDestroyRoutine (
2031 _In_ PBL_IO_DESTROY_ROUTINE DestroyRoutine
2041 _In_ PBL_DEVICE_DESCRIPTOR Device
,
2044 _Out_ PULONG DeviceId
2048 BlDeviceGetInformation (
2049 _In_ ULONG DeviceId
,
2050 _Out_ PBL_DEVICE_INFORMATION DeviceInformation
2054 BlDeviceSetInformation (
2055 _In_ ULONG DeviceId
,
2056 _In_ PBL_DEVICE_INFORMATION DeviceInformation
2060 BlDeviceReadAtOffset (
2061 _In_ ULONG DeviceId
,
2063 _In_ ULONGLONG Offset
,
2065 _Out_ PULONG BytesRead
2068 /* IMAGE ROUTINES ************************************************************/
2071 BlImgLoadImageWithProgress2 (
2072 _In_ ULONG DeviceId
,
2073 _In_ BL_MEMORY_TYPE MemoryType
,
2074 _In_ PWCHAR FileName
,
2075 _Inout_ PVOID
* MappedBase
,
2076 _Inout_ PULONG MappedSize
,
2077 _In_ ULONG ImageFlags
,
2078 _In_ BOOLEAN ShowProgress
,
2079 _Out_opt_ PUCHAR
* HashBuffer
,
2080 _Out_opt_ PULONG HashSize
2083 PIMAGE_SECTION_HEADER
2085 _In_ PVOID ImageBase
,
2086 _In_ ULONG ImageSize
2089 /* FILE I/O ROUTINES *********************************************************/
2097 BlFileReadAtOffsetEx (
2100 _In_ ULONGLONG ByteOffset
,
2102 _Out_ PULONG BytesReturned
,
2107 BlFileGetInformation (
2109 _In_ PBL_FILE_INFORMATION FileInfo
2114 _In_ ULONG DeviceId
,
2115 _In_ PWCHAR FileName
,
2120 /* INPUT CONSOLE ROUTINES ****************************************************/
2123 ConsoleInputLocalDestruct (
2124 _In_
struct _BL_INPUT_CONSOLE
* Console
2128 ConsoleInputBaseReinitialize (
2129 _In_
struct _BL_INPUT_CONSOLE
* Console
2133 ConsoleCreateLocalInputCnsole (
2137 /* TEXT CONSOLE ROUTINES *****************************************************/
2140 ConsoleGraphicalDestruct (
2141 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2145 ConsoleGraphicalClearText (
2146 _In_ PBL_GRAPHICS_CONSOLE Console
,
2147 _In_ BOOLEAN LineOnly
2151 ConsoleGraphicalClearPixels (
2152 _In_ PBL_GRAPHICS_CONSOLE Console
,
2157 ConsoleGraphicalReinitialize (
2158 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2162 ConsoleGraphicalSetTextState (
2163 _In_ PBL_GRAPHICS_CONSOLE Console
,
2165 _In_ PBL_DISPLAY_STATE TextState
2169 ConsoleGraphicalIsEnabled (
2170 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2174 ConsoleGraphicalGetGraphicalResolution (
2175 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2176 _In_ PBL_DISPLAY_MODE DisplayMode
2180 ConsoleGraphicalGetOriginalResolution (
2181 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2182 _In_ PBL_DISPLAY_MODE DisplayMode
2186 ConsoleGraphicalEnable (
2187 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2192 ConsoleTextLocalDestruct (
2193 _In_
struct _BL_TEXT_CONSOLE
* Console
2197 ConsoleTextLocalReinitialize (
2198 _In_
struct _BL_TEXT_CONSOLE
* Console
2202 ConsoleTextBaseGetTextState (
2203 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2204 _Out_ PBL_DISPLAY_STATE TextState
2208 ConsoleTextLocalSetTextState (
2209 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2211 _In_ PBL_DISPLAY_STATE TextState
2215 ConsoleTextBaseGetTextResolution (
2216 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2217 _Out_ PULONG TextResolution
2221 ConsoleTextLocalSetTextResolution (
2222 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2223 _In_ ULONG NewTextResolution
,
2224 _Out_ PULONG OldTextResolution
2228 ConsoleTextLocalClearText (
2229 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2230 _In_ BOOLEAN LineOnly
2234 ConsoleTextLocalWriteText (
2235 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2237 _In_ ULONG Attribute
2241 ConsoleTextLocalConstruct (
2242 _In_ PBL_TEXT_CONSOLE TextConsole
,
2243 _In_ BOOLEAN Activate
2247 ConsolepFindResolution (
2248 _In_ PBL_DISPLAY_MODE Mode
,
2249 _In_ PBL_DISPLAY_MODE List
,
2254 ConsoleFirmwareTextClear (
2255 _In_ PBL_TEXT_CONSOLE Console
,
2256 _In_ BOOLEAN LineOnly
2260 ConsoleFirmwareTextClose (
2261 _In_ PBL_TEXT_CONSOLE TextConsole
2265 ConsoleFirmwareTextOpen (
2266 _In_ PBL_TEXT_CONSOLE TextConsole
2270 ConsoleFirmwareTextSetState (
2271 _In_ PBL_TEXT_CONSOLE TextConsole
,
2273 _In_ PBL_DISPLAY_STATE State
2277 ConsoleGraphicalConstruct (
2278 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2282 ConsoleCreateRemoteConsole (
2283 _In_ PBL_TEXT_CONSOLE
* TextConsole
2287 ConsoleEfiGraphicalOpenProtocol (
2288 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2289 _In_ BL_GRAPHICS_CONSOLE_TYPE Type
2293 ConsoleFirmwareGraphicalClose (
2294 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2298 ConsoleFirmwareGraphicalDisable (
2299 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2303 ConsoleFirmwareGraphicalClear (
2304 _In_ PBL_GRAPHICS_CONSOLE Console
,
2309 ConsoleFirmwareGraphicalEnable (
2310 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2315 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2319 ConsoleEfiUgaClose (
2320 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2324 ConsoleEfiGopClose (
2325 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2330 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2334 ConsoleEfiGopEnable (
2335 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2339 ConsoleEfiUgaSetResolution (
2340 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2341 _In_ PBL_DISPLAY_MODE DisplayMode
,
2342 _In_ ULONG DisplayModeCount
2346 ConsoleCreateLocalInputConsole (
2351 ConsoleInputLocalEraseBuffer (
2352 _In_ PBL_INPUT_CONSOLE Console
,
2353 _In_opt_ PULONG ValueToFill
2357 ConsolepClearBuffer (
2358 _In_ PUCHAR FrameBuffer
,
2360 _In_ PUCHAR FillColor
,
2362 _In_ ULONG ScanlineWidth
,
2363 _In_ ULONG PixelDepth
2367 ConsolepConvertColorToPixel (
2368 _In_ BL_COLOR Color
,
2372 extern ULONG MmDescriptorCallTreeCount
;
2373 extern ULONG BlpApplicationFlags
;
2374 extern BL_LIBRARY_PARAMETERS BlpLibraryParameters
;
2375 extern BL_TRANSLATION_TYPE MmTranslationType
;
2376 extern PBL_ARCH_CONTEXT CurrentExecutionContext
;
2377 extern PBL_DEVICE_DESCRIPTOR BlpBootDevice
;
2378 extern BL_LOADED_APPLICATION_ENTRY BlpApplicationEntry
;
2379 extern EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*EfiConOut
;
2380 extern EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL
*EfiConInEx
;
2381 extern EFI_GUID EfiGraphicsOutputProtocol
;
2382 extern EFI_GUID EfiUgaDrawProtocol
;
2383 extern EFI_GUID EfiLoadedImageProtocol
;
2384 extern EFI_GUID EfiDevicePathProtocol
;
2385 extern EFI_GUID EfiBlockIoProtocol
;
2386 extern EFI_GUID EfiSimpleTextInputExProtocol
;
2387 extern EFI_GUID EfiRootAcpiTableGuid
;
2388 extern EFI_GUID EfiRootAcpiTable10Guid
;
2389 extern EFI_GUID EfiGlobalVariable
;
2390 extern ULONG ConsoleGraphicalResolutionListFlags
;
2391 extern BL_DISPLAY_MODE ConsoleGraphicalResolutionList
[];
2392 extern BL_DISPLAY_MODE ConsoleTextResolutionList
[];
2393 extern ULONG ConsoleGraphicalResolutionListSize
;
2394 extern PVOID DspRemoteInputConsole
;
2395 extern PVOID DspLocalInputConsole
;
2396 extern WCHAR BlScratchBuffer
[8192];
2397 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedAllocated
;