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>
33 #include <DevicePath.h>
34 #include <LoadedImage.h>
35 #include <GraphicsOutput.h>
39 /* Registry Headers */
43 /* DEFINES *******************************************************************/
45 #define BL_APPLICATION_FLAG_CONVERTED_FROM_EFI 0x01
47 #define BL_APP_ENTRY_SIGNATURE "BTAPENT"
49 #define BOOT_APPLICATION_SIGNATURE_1 'TOOB'
50 #define BOOT_APPLICATION_SIGNATURE_2 ' PPA'
52 #define BOOT_MEMORY_TRANSLATION_TYPE_PHYSICAL 0
53 #define BOOT_MEMORY_TRANSLATION_TYPE_VIRTUAL 1
55 #define BOOT_APPLICATION_VERSION 2
56 #define BL_MEMORY_DATA_VERSION 1
57 #define BL_RETURN_ARGUMENTS_VERSION 1
58 #define BL_FIRMWARE_DESCRIPTOR_VERSION 2
60 #define BL_APPLICATION_ENTRY_FLAG_NO_GUID 0x01
61 #define BL_APPLICATION_ENTRY_BCD_OPTIONS_INTERNAL 0x02
62 #define BL_APPLICATION_ENTRY_REBOOT_ON_ERROR 0x20
63 #define BL_APPLICATION_ENTRY_BCD_OPTIONS_EXTERNAL 0x80
65 #define BL_CONTEXT_PAGING_ON 1
66 #define BL_CONTEXT_INTERRUPTS_ON 2
68 #define BL_MM_FLAG_USE_FIRMWARE_FOR_MEMORY_MAP_BUFFERS 0x01
69 #define BL_MM_FLAG_REQUEST_COALESCING 0x02
71 #define BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG 0x01
72 #define BL_MM_ADD_DESCRIPTOR_TRUNCATE_FLAG 0x02
73 #define BL_MM_ADD_DESCRIPTOR_NEVER_COALESCE_FLAG 0x10
74 #define BL_MM_ADD_DESCRIPTOR_NEVER_TRUNCATE_FLAG 0x20
75 #define BL_MM_ADD_DESCRIPTOR_UPDATE_LIST_POINTER_FLAG 0x2000
77 #define BL_MM_REQUEST_DEFAULT_TYPE 1
78 #define BL_MM_REQUEST_TOP_DOWN_TYPE 2
80 #define BL_MM_REMOVE_VIRTUAL_REGION_FLAG 0x80000000
82 #define BL_LIBRARY_FLAG_NO_DISPLAY 0x01
83 #define BL_LIBRARY_FLAG_REINITIALIZE 0x02
84 #define BL_LIBRARY_FLAG_REINITIALIZE_ALL 0x04
85 #define BL_LIBRARY_FLAG_ZERO_HEAP_ALLOCATIONS_ON_FREE 0x10
86 #define BL_LIBRARY_FLAG_INITIALIZATION_COMPLETED 0x20
87 #define BL_LIBRARY_FLAG_NO_GRAPHICS_CONSOLE 0x800
89 #define BL_DISPLAY_GRAPHICS_FORCED_VIDEO_MODE_FLAG 0x01
90 #define BL_DISPLAY_GRAPHICS_FORCED_HIGH_RES_MODE_FLAG 0x02
92 #define BL_HT_VALUE_IS_INLINE 0x01
94 #define BL_FS_REGISTER_AT_HEAD_FLAG 1
96 #define BL_BLOCK_DEVICE_REMOVABLE_FLAG 0x01
98 #define BL_MEMORY_CLASS_SHIFT 28
100 #define BL_FILE_READ_ACCESS 0x01
101 #define BL_FILE_WRITE_ACCESS 0x02
102 #define BL_DIRECTORY_ACCESS 0x04
103 #define BL_UNKNOWN_ACCESS 0x10
105 #define BL_DEVICE_READ_ACCESS 0x01
106 #define BL_DEVICE_WRITE_ACCESS 0x02
108 #define BL_DEVICE_ENTRY_OPENED 0x01
109 #define BL_DEVICE_ENTRY_READ_ACCESS 0x02
110 #define BL_DEVICE_ENTRY_WRITE_ACCESS 0x04
112 #define BL_FILE_ENTRY_OPENED 0x01
113 #define BL_FILE_ENTRY_READ_ACCESS 0x02
114 #define BL_FILE_ENTRY_WRITE_ACCESS 0x04
115 #define BL_FILE_ENTRY_UNKNOWN_ACCESS 0x10
117 #define BL_IMG_VALID_FILE 0x01
118 #define BL_IMG_MEMORY_FILE 0x02
119 #define BL_IMG_REMOTE_FILE 0x04
121 #define BL_LOAD_IMG_VIRTUAL_BUFFER 0x01
122 #define BL_LOAD_IMG_EXISTING_BUFFER 0x04
123 #define BL_LOAD_IMG_UNKNOWN_BUFFER_FLAG 0x08
124 #define BL_LOAD_IMG_COMPUTE_SIGNATURE 0x10
125 #define BL_LOAD_IMG_COMPUTE_HASH 0x40000
127 /* ENUMERATIONS **************************************************************/
129 typedef enum _BL_COLOR
147 } BL_COLOR
, *PBL_COLOR
;
149 typedef enum _BL_MEMORY_DESCRIPTOR_TYPE
153 } BL_MEMORY_DESCRIPTOR_TYPE
;
155 typedef enum _BL_TRANSLATION_TYPE
161 } BL_TRANSLATION_TYPE
;
163 typedef enum _BL_ARCH_MODE
172 typedef enum _BL_DEVICE_TYPE
175 LegacyPartitionDevice
= 2,
184 // Local Device Types
186 typedef enum _BL_LOCAL_DEVICE_TYPE
193 VirtualDiskDevice
= 6
194 } BL_LOCAL_DEVICE_TYPE
;
199 typedef enum _BL_PARTITION_TYPE
209 typedef enum _BL_PATH_TYPE
218 typedef enum _BL_MEMORY_CLASS
228 typedef enum _BL_MEMORY_TYPE
233 BlLoaderMemory
= 0xD0000002,
234 BlLoaderDeviceMemory
= 0xD0000004,
235 BlLoaderHeap
= 0xD0000005,
236 BlLoaderPageDirectory
= 0xD0000006,
237 BlLoaderReferencePage
= 0xD0000007,
238 BlLoaderRamDisk
= 0xD0000008,
239 BlLoaderData
= 0xD000000A,
240 BlLoaderRegistry
= 0xD000000B,
241 BlLoaderBlockMemory
= 0xD000000C,
242 BlLoaderSelfMap
= 0xD000000F,
245 // Application Memory
247 BlApplicationReserved
= 0xE0000001,
248 BlApplicationData
= 0xE0000004,
253 BlConventionalMemory
= 0xF0000001,
254 BlUnusableMemory
= 0xF0000002,
255 BlReservedMemory
= 0xF0000003,
256 BlEfiBootMemory
= 0xF0000004,
257 BlEfiRuntimeMemory
= 0xF0000006,
258 BlAcpiReclaimMemory
= 0xF0000008,
259 BlAcpiNvsMemory
= 0xF0000009,
260 BlDeviceIoMemory
= 0xF000000A,
261 BlDevicePortMemory
= 0xF000000B,
262 BlPalMemory
= 0xF000000C,
265 typedef enum _BL_MEMORY_ATTR
268 // Memory Caching Attributes
270 BlMemoryUncached
= 0x00000001,
271 BlMemoryWriteCombined
= 0x00000002,
272 BlMemoryWriteThrough
= 0x00000004,
273 BlMemoryWriteBack
= 0x00000008,
274 BlMemoryUncachedExported
= 0x00000010,
275 BlMemoryValidCacheAttributes
= BlMemoryUncached
| BlMemoryWriteCombined
| BlMemoryWriteThrough
| BlMemoryWriteBack
| BlMemoryUncachedExported
,
276 BlMemoryValidCacheAttributeMask
= 0x000000FF,
279 // Memory Protection Attributes
281 BlMemoryWriteProtected
= 0x00000100,
282 BlMemoryReadProtected
= 0x00000200,
283 BlMemoryExecuteProtected
= 0x00000400,
284 BlMemoryValidProtectionAttributes
= BlMemoryWriteProtected
| BlMemoryReadProtected
| BlMemoryExecuteProtected
,
285 BlMemoryValidProtectionAttributeMask
= 0x0000FF00,
288 // Memory Allocation Attributes
290 BlMemoryNonFixed
= 0x00020000,
291 BlMemoryFixed
= 0x00040000,
292 BlMemoryReserved
= 0x00080000,
293 BlMemoryValidAllocationAttributes
= BlMemoryNonFixed
| BlMemoryFixed
| BlMemoryReserved
,
294 BlMemoryValidAllocationAttributeMask
= 0x00FF0000,
297 // Memory Type Attributes
299 BlMemoryRuntime
= 0x01000000,
300 BlMemoryCoalesced
= 0x02000000,
301 BlMemoryUpdate
= 0x04000000,
302 BlMemoryNonFirmware
= 0x08000000,
303 BlMemorySpecial
= 0x20000000,
304 BlMemoryFirmware
= 0x80000000,
305 BlMemoryValidTypeAttributes
= BlMemoryRuntime
| BlMemoryCoalesced
| BlMemoryUpdate
| BlMemoryNonFirmware
| BlMemorySpecial
| BlMemoryFirmware
,
306 BlMemoryValidTypeAttributeMask
= 0xFF000000,
309 /* CALLBACKS *****************************************************************/
311 struct _BL_FILE_ENTRY
;
312 struct _BL_FILE_INFORMATION
;
316 _In_
struct _BL_FILE_ENTRY
* Directory
,
317 _In_ PWCHAR FileName
,
319 _Out_
struct _BL_FILE_ENTRY
** FileEntry
325 _In_
struct _BL_FILE_ENTRY
* FileEntry
331 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
334 _Out_opt_ PULONG BytesRead
345 (*PBL_FILE_GET_NEXT
) (
351 (*PBL_FILE_GET_INFO
) (
352 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
353 _Out_
struct _BL_FILE_INFORMATION
* FileInfo
358 (*PBL_FILE_SET_INFO
) (
359 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
360 _In_
struct _BL_FILE_INFORMATION
* FileInfo
365 (*PBL_FS_INIT_CALLBACK
) (
371 (*PBL_FS_DESTROY_CALLBACK
) (
377 (*PBL_FS_MOUNT_CALLBACK
) (
380 _Out_
struct _BL_FILE_ENTRY
** FileEntry
385 (*PBL_FS_PURGE_CALLBACK
) (
391 (*PBL_FILE_DESTROY_CALLBACK
) (
395 struct _BL_TEXT_CONSOLE
;
396 struct _BL_DISPLAY_STATE
;
397 struct _BL_DISPLAY_MODE
;
398 struct _BL_INPUT_CONSOLE
;
399 struct _BL_REMOTE_CONSOLE
;
400 struct _BL_GRAPHICS_CONSOLE
;
403 (*PCONSOLE_DESTRUCT
) (
404 _In_
struct _BL_TEXT_CONSOLE
* Console
409 (*PCONSOLE_REINITIALIZE
) (
410 _In_
struct _BL_TEXT_CONSOLE
* Console
415 (*PCONSOLE_GET_TEXT_STATE
) (
416 _In_
struct _BL_TEXT_CONSOLE
* Console
,
417 _Out_
struct _BL_DISPLAY_STATE
* TextState
422 (*PCONSOLE_SET_TEXT_STATE
) (
423 _In_
struct _BL_TEXT_CONSOLE
* Console
,
425 _In_
struct _BL_DISPLAY_STATE
* TextState
430 (*PCONSOLE_GET_TEXT_RESOLUTION
) (
431 _In_
struct _BL_TEXT_CONSOLE
* Console
,
432 _Out_ PULONG TextResolution
437 (*PCONSOLE_SET_TEXT_RESOLUTION
) (
438 _In_
struct _BL_TEXT_CONSOLE
* Console
,
439 _In_ ULONG NewTextResolution
,
440 _Out_ PULONG OldTextResolution
445 (*PCONSOLE_CLEAR_TEXT
) (
446 _In_
struct _BL_TEXT_CONSOLE
* Console
,
452 (*PCONSOLE_IS_ENABLED
) (
453 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
458 (*PCONSOLE_GET_GRAPHICAL_RESOLUTION
) (
459 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
460 _Out_
struct _BL_DISPLAY_MODE
* DisplayMode
465 (*PCONSOLE_SET_GRAPHICAL_RESOLUTION
) (
466 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
467 _In_
struct _BL_DISPLAY_MODE DisplayMode
473 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
479 (*PCONSOLE_WRITE_TEXT
) (
480 _In_
struct _BL_TEXT_CONSOLE
* Console
,
487 (*PBL_TBL_LOOKUP_ROUTINE
) (
489 _In_ PVOID Argument1
,
490 _In_ PVOID Argument2
,
491 _In_ PVOID Argument3
,
497 (*PBL_TBL_MAP_ROUTINE
) (
499 _In_ ULONG EntryIndex
504 (*PBL_TBL_SET_ROUTINE
) (
510 (*PBL_IO_DESTROY_ROUTINE
) (
514 struct _BL_HASH_ENTRY
;
517 (*PBL_HASH_TABLE_COMPARE_FUNCTION
) (
518 _In_
struct _BL_HASH_ENTRY
* Entry1
,
519 _In_
struct _BL_HASH_ENTRY
* Entry2
524 (*PBL_HASH_TABLE_HASH_FUNCTION
) (
525 _In_
struct _BL_HASH_ENTRY
* Entry
,
529 struct _BL_DEVICE_ENTRY
;
530 struct _BL_DEVICE_DESCRIPTOR
;
531 struct _BL_DEVICE_INFORMATION
;
535 (*PBL_DEVICE_ENUMERATE_DEVICE_CLASS
) (
542 _In_
struct _BL_DEVICE_DESCRIPTOR
* Device
,
543 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
548 (*PBL_DEVICE_CLOSE
) (
549 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
555 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
558 _Out_ PULONG BytesRead
563 (*PBL_DEVICE_WRITE
) (
569 (*PBL_DEVICE_GET_INFORMATION
) (
570 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
571 _Out_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
576 (*PBL_DEVICE_SET_INFORMATION
) (
577 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
578 _In_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
583 (*PBL_DEVICE_RESET
) (
589 (*PBL_DEVICE_FLUSH
) (
595 (*PBL_DEVICE_CREATE
) (
600 /* DATA STRUCTURES ***********************************************************/
602 typedef struct _BL_LIBRARY_PARAMETERS
605 ULONG TranslationType
;
606 ULONG MinimumAllocationCount
;
607 ULONG MinimumHeapSize
;
608 ULONG HeapAllocationAttributes
;
609 PWCHAR ApplicationBaseDirectory
;
610 ULONG DescriptorCount
;
611 PWCHAR FontBaseDirectory
;
612 } BL_LIBRARY_PARAMETERS
, *PBL_LIBRARY_PARAMETERS
;
614 /* This should eventually go into a more public header */
615 typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK
617 /* This header tells the library what image we're dealing with */
622 ULONG MemoryTranslationType
;
624 /* Where is the image located */
628 /* Offset to BL_MEMORY_DATA */
629 ULONG MemoryDataOffset
;
631 /* Offset to BL_APPLICATION_ENTRY */
632 ULONG AppEntryOffset
;
634 /* Offset to BL_DEVICE_DESCRPIPTOR */
635 ULONG BootDeviceOffset
;
637 /* Offset to BL_FIRMWARE_PARAMETERS */
638 ULONG FirmwareParametersOffset
;
640 /* Offset to BL_RETURN_ARGUMENTS */
641 ULONG ReturnArgumentsOffset
;
642 } BOOT_APPLICATION_PARAMETER_BLOCK
, *PBOOT_APPLICATION_PARAMETER_BLOCK
;
644 typedef struct _BL_MEMORY_DATA
648 ULONG DescriptorCount
;
649 ULONG DescriptorSize
;
650 ULONG DescriptorOffset
;
651 } BL_MEMORY_DATA
, *PBL_MEMORY_DATA
;
653 typedef struct _BL_FIRMWARE_DESCRIPTOR
657 EFI_HANDLE ImageHandle
;
658 EFI_SYSTEM_TABLE
*SystemTable
;
659 } BL_FIRMWARE_DESCRIPTOR
, *PBL_FIRMWARE_DESCRIPTOR
;
661 typedef struct _BL_RETURN_ARGUMENTS
665 ULONG ReturnArgumentData
[5];
666 } BL_RETURN_ARGUMENTS
, *PBL_RETURN_ARGUMENTS
;
668 typedef struct _BL_MEMORY_DESCRIPTOR
670 LIST_ENTRY ListEntry
;
676 ULONGLONG VirtualPage
;
680 ULONGLONG BaseAddress
;
681 ULONGLONG VirtualAddress
;
687 } BL_MEMORY_DESCRIPTOR
, *PBL_MEMORY_DESCRIPTOR
;
689 typedef struct _BL_BCD_OPTION
695 ULONG NextEntryOffset
;
697 } BL_BCD_OPTION
, *PBL_BCD_OPTION
;
699 typedef struct _BL_APPLICATION_ENTRY
705 BL_BCD_OPTION BcdData
;
706 } BL_APPLICATION_ENTRY
, *PBL_APPLICATION_ENTRY
;
708 typedef struct _BL_LOADED_APPLICATION_ENTRY
712 PBL_BCD_OPTION BcdData
;
713 } BL_LOADED_APPLICATION_ENTRY
, *PBL_LOADED_APPLICATION_ENTRY
;
715 typedef struct _BL_HARDDISK_DEVICE
722 ULONG PartitionSignature
;
727 GUID PartitionSignature
;
735 } BL_HARDDISK_DEVICE
;
737 typedef struct _BL_LOCAL_DEVICE
747 BL_HARDDISK_DEVICE HardDisk
;
751 PHYSICAL_ADDRESS ImageBase
;
752 LARGE_INTEGER ImageSize
;
758 typedef struct _BL_DEVICE_DESCRIPTOR
760 DEVICE_TYPE DeviceType
;
766 BL_LOCAL_DEVICE Local
;
777 ULONG PartitionNumber
;
785 BL_LOCAL_DEVICE Disk
;
788 } BL_DEVICE_DESCRIPTOR
, *PBL_DEVICE_DESCRIPTOR
;
790 typedef struct _BL_FILE_PATH_DESCRIPTOR
795 UCHAR Path
[ANYSIZE_ARRAY
];
796 } BL_FILE_PATH_DESCRIPTOR
, *PBL_FILE_PATH_DESCRIPTOR
;
798 typedef struct _BL_WINDOWS_LOAD_OPTIONS
804 WCHAR LoadOptions
[ANYSIZE_ARRAY
];
805 } BL_WINDOWS_LOAD_OPTIONS
, *PBL_WINDOWS_LOAD_OPTIONS
;
807 typedef struct _BL_ARCH_CONTEXT
810 BL_TRANSLATION_TYPE TranslationType
;
812 } BL_ARCH_CONTEXT
, *PBL_ARCH_CONTEXT
;
814 typedef struct _BL_MEMORY_DESCRIPTOR_LIST
820 } BL_MEMORY_DESCRIPTOR_LIST
, *PBL_MEMORY_DESCRIPTOR_LIST
;
822 typedef struct _BL_ADDRESS_RANGE
826 } BL_ADDRESS_RANGE
, *PBL_ADDRESS_RANGE
;
828 typedef struct _BL_FILE_INFORMATION
834 } BL_FILE_INFORMATION
, *PBL_FILE_INFORMATION
;
836 typedef struct _BL_FILE_CALLBACKS
839 PBL_FILE_CLOSE Close
;
841 PBL_FILE_WRITE Write
;
842 PBL_FILE_GET_NEXT GetNext
;
843 PBL_FILE_GET_INFO GetInfo
;
844 PBL_FILE_SET_INFO SetInfo
;
845 } BL_FILE_CALLBACKS
, *PBL_FILE_CALLBACKS
;
847 typedef struct _BL_FILE_ENTRY
853 ULONG ReferenceCount
;
855 ULONGLONG TotalBytesRead
;
857 BL_FILE_CALLBACKS Callbacks
;
858 PVOID FsSpecificData
;
859 } BL_FILE_ENTRY
, *PBL_FILE_ENTRY
;
861 typedef struct _BL_FILE_SYSTEM_ENTRY
863 LIST_ENTRY ListEntry
;
864 PBL_FS_INIT_CALLBACK InitCallback
;
865 PBL_FS_DESTROY_CALLBACK DestroyCallback
;
866 PBL_FS_MOUNT_CALLBACK MountCallback
;
867 PBL_FS_PURGE_CALLBACK PurgeCallback
;
868 } BL_FILE_SYSTEM_ENTRY
, *PBL_FILE_SYSTEM_ENTRY
;
870 typedef struct _BL_FILE_SYSTEM_REGISTRATION_TABLE
872 PBL_FS_INIT_CALLBACK Init
;
873 PBL_FS_DESTROY_CALLBACK Destroy
;
874 PBL_FS_MOUNT_CALLBACK Mount
;
875 PBL_FS_PURGE_CALLBACK Purge
;
876 } BL_FILE_SYSTEM_REGISTRATION_TABLE
;
878 typedef struct _BL_DISPLAY_STATE
885 } BL_DISPLAY_STATE
, *PBL_DISPLAY_STATE
;
887 typedef struct _BL_DISPLAY_MODE
892 } BL_DISPLAY_MODE
, *PBL_DISPLAY_MODE
;
894 typedef struct _BL_TEXT_CONSOLE_VTABLE
896 PCONSOLE_DESTRUCT Destruct
;
897 PCONSOLE_REINITIALIZE Reinitialize
;
898 PCONSOLE_GET_TEXT_STATE GetTextState
;
899 PCONSOLE_SET_TEXT_STATE SetTextState
;
900 PCONSOLE_GET_TEXT_RESOLUTION GetTextResolution
;
901 PCONSOLE_SET_TEXT_RESOLUTION SetTextResolution
;
902 PCONSOLE_CLEAR_TEXT ClearText
;
903 PCONSOLE_WRITE_TEXT WriteText
;
904 } BL_TEXT_CONSOLE_VTABLE
, *PBL_TEXT_CONSOLE_VTABLE
;
906 typedef struct _BL_GRAPHICS_CONSOLE_VTABLE
908 BL_TEXT_CONSOLE_VTABLE Text
;
909 PCONSOLE_IS_ENABLED IsEnabled
;
910 PCONSOLE_ENABLE Enable
;
911 PVOID GetConsoleResolution
;
912 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetGraphicalResolution
;
913 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetOriginalResolution
;
914 PCONSOLE_SET_GRAPHICAL_RESOLUTION SetOriginalResolution
;
915 /// more for graphics ///
916 } BL_GRAPHICS_CONSOLE_VTABLE
, *PBL_GRAPHICS_CONSOLE_VTABLE
;
918 typedef struct _BL_TEXT_CONSOLE
920 PBL_TEXT_CONSOLE_VTABLE Callbacks
;
921 BL_DISPLAY_STATE State
;
922 BL_DISPLAY_MODE DisplayMode
;
924 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
* Protocol
;
926 EFI_SIMPLE_TEXT_OUTPUT_MODE OldMode
;
927 } BL_TEXT_CONSOLE
, *PBL_TEXT_CONSOLE
;
929 typedef struct _BL_INPUT_CONSOLE_VTABLE
931 PCONSOLE_DESTRUCT Destruct
;
932 PCONSOLE_REINITIALIZE Reinitialize
;
933 //PCONSOLE_IS_KEY_PENDING IsKeyPending;
934 //PCONSOLE_READ_INPUT ReadInput;
935 //PCONSOLE_ERASE_BUFFER EraseBuffer;
936 //PCONSOLE_FILL_BUFFER FillBuffer;
937 } BL_INPUT_CONSOLE_VTABLE
, *PBL_INPUT_CONSOLE_VTABLE
;
939 typedef struct _BL_INPUT_CONSOLE
941 PBL_INPUT_CONSOLE_VTABLE Callbacks
;
946 } BL_INPUT_CONSOLE
, *PBL_INPUT_CONSOLE
;
948 typedef enum _BL_GRAPHICS_CONSOLE_TYPE
952 } BL_GRAPHICS_CONSOLE_TYPE
;
954 typedef struct _BL_GRAPHICS_CONSOLE
956 BL_TEXT_CONSOLE TextConsole
;
957 BL_DISPLAY_MODE DisplayMode
;
961 BL_DISPLAY_MODE OldDisplayMode
;
964 BL_GRAPHICS_CONSOLE_TYPE Type
;
965 EFI_GRAPHICS_OUTPUT_PROTOCOL
* Protocol
;
967 ULONG FrameBufferSize
;
968 ULONG PixelsPerScanLine
;
971 } BL_GRAPHICS_CONSOLE
, *PBL_GRAPHICS_CONSOLE
;
973 typedef struct _BL_REMOTE_CONSOLE
975 BL_TEXT_CONSOLE TextConsole
;
976 } BL_REMOTE_CONSOLE
, *PBL_REMOTE_CONSOLE
;
978 typedef struct _BL_HASH_TABLE
980 PLIST_ENTRY HashLinks
;
982 PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
;
983 PBL_HASH_TABLE_HASH_FUNCTION HashFunction
;
984 } BL_HASH_TABLE
, *PBL_HASH_TABLE
;
986 typedef struct _BL_HASH_ENTRY
991 } BL_HASH_ENTRY
, *PBL_HASH_ENTRY
;
993 typedef struct _BL_HASH_VALUE
997 } BL_HASH_VALUE
, *PBL_HASH_VALUE
;
999 typedef struct _BL_HASH_NODE
1001 LIST_ENTRY ListEntry
;
1002 BL_HASH_ENTRY Entry
;
1003 BL_HASH_VALUE Value
;
1004 } BL_HASH_NODE
, *PBL_HASH_NODE
;
1006 typedef struct _BL_BLOCK_DEVICE_INFORMATION
1008 BL_LOCAL_DEVICE_TYPE Type
;
1011 BL_PARTITION_TYPE PartitionType
;
1014 ULONGLONG LastBlock
;
1031 } BL_BLOCK_DEVICE_INFORMATION
, *PBL_BLOCK_DEVICE_INFORMATION
;
1033 typedef struct _BL_DEVICE_INFORMATION
1035 BL_DEVICE_TYPE DeviceType
;
1038 BL_BLOCK_DEVICE_INFORMATION BlockDeviceInfo
;
1040 } BL_DEVICE_INFORMATION
, *PBL_DEVICE_INFORMATION
;
1042 typedef struct _BL_BLOCK_DEVICE
1044 BL_BLOCK_DEVICE_INFORMATION
;
1045 ULONGLONG StartOffset
;
1046 EFI_BLOCK_IO
* Protocol
;
1048 } BL_BLOCK_DEVICE
, *PBL_BLOCK_DEVICE
;
1050 typedef struct _BL_PROTOCOL_HANDLE
1054 } BL_PROTOCOL_HANDLE
, *PBL_PROTOCOL_HANDLE
;
1056 typedef struct _BL_DEVICE_CALLBACKS
1058 PBL_DEVICE_ENUMERATE_DEVICE_CLASS EnumerateDeviceClass
;
1059 PBL_DEVICE_OPEN Open
;
1060 PBL_DEVICE_CLOSE Close
;
1061 PBL_DEVICE_READ Read
;
1062 PBL_DEVICE_WRITE Write
;
1063 PBL_DEVICE_GET_INFORMATION GetInformation
;
1064 PBL_DEVICE_SET_INFORMATION SetInformation
;
1065 PBL_DEVICE_RESET Reset
;
1066 PBL_DEVICE_FLUSH Flush
;
1067 PBL_DEVICE_CREATE Create
;
1068 } BL_DEVICE_CALLBACKS
, *PBL_DEVICE_CALLBACKS
;
1070 typedef struct _BL_DEVICE_ENTRY
1075 ULONG ReferenceCount
;
1076 BL_DEVICE_CALLBACKS Callbacks
;
1077 PVOID DeviceSpecificData
;
1078 PBL_DEVICE_DESCRIPTOR DeviceDescriptor
;
1079 } BL_DEVICE_ENTRY
, *PBL_DEVICE_ENTRY
;
1081 typedef struct _BL_IMG_FILE
1091 } BL_IMG_FILE
, *PBL_IMG_FILE
;
1093 typedef struct _BL_DEFERRED_FONT_FILE
1095 LIST_ENTRY ListEntry
;
1097 PBL_DEVICE_DESCRIPTOR Device
;
1099 } BL_DEFERRED_FONT_FILE
, *PBL_DEFERRED_FONT_FILE
;;
1101 /* INLINE ROUTINES ***********************************************************/
1105 BlSetupDefaultParameters (
1106 _Out_ PBL_LIBRARY_PARAMETERS LibraryParameters
1109 BL_LIBRARY_PARAMETERS DefaultParameters
=
1121 /* Copy the defaults */
1122 RtlCopyMemory(LibraryParameters
, &DefaultParameters
, sizeof(*LibraryParameters
));
1127 MmMdInitializeListHead (
1128 _In_ PBL_MEMORY_DESCRIPTOR_LIST List
1131 /* Initialize the list */
1132 InitializeListHead(&List
->ListHead
);
1133 List
->First
= &List
->ListHead
;
1137 /* INITIALIZATION ROUTINES ***************************************************/
1140 BlInitializeLibrary(
1141 _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters
,
1142 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1153 _In_ PBL_FIRMWARE_DESCRIPTOR FirmwareParameters
1158 _In_ PBL_MEMORY_DATA MemoryData
,
1159 _In_ BL_TRANSLATION_TYPE TranslationType
,
1160 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1170 _In_ PBL_MEMORY_DATA MemoryData
,
1171 _In_ ULONG MinimumPages
1177 _In_ PBL_MEMORY_DATA MemoryData
,
1178 _In_ BL_TRANSLATION_TYPE TranslationType
,
1179 _In_ BL_TRANSLATION_TYPE LibraryTranslationType
1184 _In_ ULONG HeapSize
,
1185 _In_ ULONG HeapAttributes
1191 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1195 BlpDeviceInitialize (
1210 BlpDisplayInitialize (
1224 /* FIRMWARE ROUTINES *********************************************************/
1236 _Inout_ EFI_PHYSICAL_ADDRESS
* Memory
1241 _In_ ULONG StallTime
1255 EfiConOutQueryMode (
1256 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1258 _In_ UINTN
* Columns
,
1264 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1269 EfiConOutReadCurrentMode (
1270 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1271 _Out_ EFI_SIMPLE_TEXT_OUTPUT_MODE
* Mode
1275 EfiConOutSetAttribute (
1276 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1277 _In_ ULONG Attribute
1281 EfiConOutSetCursorPosition (
1282 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1288 EfiConOutEnableCursor (
1289 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1290 _In_ BOOLEAN Visible
1294 EfiLocateHandleBuffer (
1295 _In_ EFI_LOCATE_SEARCH_TYPE SearchType
,
1296 _In_ EFI_GUID
*Protocol
,
1297 _Inout_ PULONG HandleCount
,
1298 _Inout_ EFI_HANDLE
** Buffer
1303 _In_ EFI_HANDLE Handle
,
1304 _In_ EFI_GUID
*Protocol
,
1305 _Out_ PVOID
* Interface
1310 _In_ EFI_HANDLE Handle
,
1311 _In_ EFI_GUID
*Protocol
1315 EfiGopGetCurrentMode (
1316 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1318 _Out_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
*Information
1323 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1328 EfiGopGetFrameBuffer (
1329 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1330 _Out_ PHYSICAL_ADDRESS
* FrameBuffer
,
1331 _Out_ UINTN
*FrameBufferSize
1336 _In_ EFI_RESET_TYPE ResetType
1341 _In_ EFI_DEVICE_PATH
*DevicePath
1345 EfiIsDevicePathParent (
1346 _In_ EFI_DEVICE_PATH
*DevicePath1
,
1347 _In_ EFI_DEVICE_PATH
*DevicePath2
1350 /* PLATFORM TIMER ROUTINES ***************************************************/
1353 BlpTimeCalibratePerformanceCounter (
1357 /* RESOURCE LOCALE INTERNATIONALIZATION ROUTINES *****************************/
1360 BlpDisplayRegisterLocale (
1364 /* FONT ROUTINES *************************************************************/
1367 BfiFreeDeferredFontFile (
1368 _In_ PBL_DEFERRED_FONT_FILE DeferredFontFile
1373 _In_ PBL_DEVICE_DESCRIPTOR Device
,
1374 _In_ PWCHAR FontPath
1378 BfLoadDeferredFontFiles (
1382 /* FILESYSTEM ROUTINES *******************************************************/
1391 _In_ ULONG DeviceId
,
1393 _Out_ PBL_FILE_ENTRY
* FileEntry
1403 _In_ ULONG DeviceId
,
1405 _Out_ PBL_FILE_ENTRY
* FileEntry
1408 /* DEBUG ROUTINES ************************************************************/
1412 BlBdDebuggerEnabled (
1417 BlBdPullRemoteFile (
1418 _In_ PWCHAR FilePath
,
1419 _Out_ PVOID BaseAddress
,
1420 _Out_ PULONGLONG FileSize
1431 _In_ ULONG ErrorCode
,
1432 _In_ ULONG Parameter1
,
1433 _In_ ULONG_PTR Parameter2
,
1434 _In_ ULONG_PTR Parameter3
,
1435 _In_ ULONG_PTR Parameter4
1438 /* UTILITY ROUTINES **********************************************************/
1441 BlUtlUpdateProgress (
1442 _In_ ULONG Percentage
,
1443 _Out_opt_ PBOOLEAN Completed
1447 EfiGetEfiStatusCode(
1448 _In_ NTSTATUS Status
1452 EfiGetNtStatusCode (
1453 _In_ EFI_STATUS EfiStatus
1467 BlGetApplicationIdentifier (
1472 BlGetApplicationBaseAndSize (
1473 _Out_ PVOID
* ImageBase
,
1474 _Out_ PULONG ImageSize
1478 BlResourceFindMessage (
1483 BlResourceFindHtml (
1488 BlpResourceInitialize (
1492 /* TABLE ROUTINES ************************************************************/
1498 _In_ PBL_TBL_MAP_ROUTINE MapCallback
1505 _Out_ PULONG EntryIndex
,
1506 _In_ PBL_TBL_LOOKUP_ROUTINE Callback
,
1507 _In_ PVOID Argument1
,
1508 _In_ PVOID Argument2
,
1509 _In_ PVOID Argument3
,
1510 _In_ PVOID Argument4
1515 _Inout_ PVOID
** Table
,
1516 _Inout_ PULONG Count
,
1518 _Out_ PULONG EntryIndex
,
1519 _In_ PBL_TBL_SET_ROUTINE Callback
1523 TblDoNotPurgeEntry (
1527 /* HASH TABLE ROUTINES *******************************************************/
1532 _In_ PBL_HASH_ENTRY Entry
,
1540 _In_ PBL_HASH_ENTRY Entry
,
1541 _Out_ PBL_HASH_VALUE
*Value
1547 _In_ PBL_HASH_TABLE_HASH_FUNCTION HashFunction
,
1548 _In_ PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
,
1552 /* BCD OPTION ROUTINES *******************************************************/
1556 _In_ PBL_BCD_OPTION List
,
1561 BlGetBootOptionListSize (
1562 _In_ PBL_BCD_OPTION BcdOption
1566 BlGetBootOptionSize (
1567 _In_ PBL_BCD_OPTION BcdOption
1571 BlGetBootOptionString (
1572 _In_ PBL_BCD_OPTION List
,
1578 BlGetBootOptionInteger (
1579 _In_ PBL_BCD_OPTION List
,
1581 _Out_ PULONGLONG Value
1585 BlGetBootOptionBoolean (
1586 _In_ PBL_BCD_OPTION List
,
1588 _Out_ PBOOLEAN Value
1592 BlpGetBootOptionIntegerList (
1593 _In_ PBL_BCD_OPTION List
,
1595 _Out_ PULONGLONG
* Value
,
1596 _Out_ PULONGLONG Count
,
1601 BlGetBootOptionDevice (
1602 _In_ PBL_BCD_OPTION List
,
1604 _Out_ PBL_DEVICE_DESCRIPTOR
* Value
,
1605 _In_opt_ PBL_BCD_OPTION
* ExtraOptions
1609 BlGetBootOptionGuidList (
1610 _In_ PBL_BCD_OPTION List
,
1618 _In_ PBL_BCD_OPTION OptionList
,
1619 _Out_ PBL_BCD_OPTION
*CopiedOptions
1623 BlAppendBootOptions (
1624 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1625 _In_ PBL_BCD_OPTION Options
1628 /* BOOT REGISTRY ROUTINES ****************************************************/
1632 _In_ HANDLE KeyHandle
1637 _In_ HANDLE ParentHandle
,
1638 _In_ PWCHAR KeyName
,
1639 _Out_ PHANDLE Handle
1644 _In_ PBL_FILE_PATH_DESCRIPTOR FilePath
,
1645 _Out_ PHANDLE HiveHandle
1649 BiGetRegistryValue (
1650 _In_ HANDLE KeyHandle
,
1651 _In_ PWCHAR ValueName
,
1652 _In_ PWCHAR KeyName
,
1654 _Out_ PVOID
* Buffer
,
1655 _Out_ PULONG ValueLength
1659 BiEnumerateSubKeys (
1660 _In_ HANDLE KeyHandle
,
1661 _Out_ PWCHAR
** SubKeyList
,
1662 _Out_ PULONG SubKeyCount
1667 _In_ HANDLE KeyHandle
1670 /* CONTEXT ROUTINES **********************************************************/
1673 BlpArchSwitchContext (
1674 _In_ BL_ARCH_MODE NewMode
1677 /* MEMORY DESCRIPTOR ROUTINES ************************************************/
1681 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
1684 PBL_MEMORY_DESCRIPTOR
1685 MmMdInitByteGranularDescriptor (
1687 _In_ BL_MEMORY_TYPE Type
,
1688 _In_ ULONGLONG BasePage
,
1689 _In_ ULONGLONG VirtualPage
,
1690 _In_ ULONGLONG PageCount
1694 MmMdFreeGlobalDescriptors (
1699 MmMdAddDescriptorToList (
1700 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1701 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
,
1706 MmMdRemoveDescriptorFromList (
1707 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1708 _In_ PBL_MEMORY_DESCRIPTOR Entry
1712 MmMdFindSatisfyingRegion (
1713 _In_ PBL_MEMORY_DESCRIPTOR Descriptor
,
1714 _Out_ PBL_MEMORY_DESCRIPTOR NewDescriptor
,
1715 _In_ ULONGLONG Pages
,
1716 _In_ PBL_ADDRESS_RANGE BaseRange
,
1717 _In_ PBL_ADDRESS_RANGE VirtualRange
,
1718 _In_ BOOLEAN TopDown
,
1719 _In_ BL_MEMORY_TYPE MemoryType
,
1721 _In_ ULONG Alignment
1725 MmMdRemoveRegionFromMdlEx (
1726 __in PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1728 __in ULONGLONG BasePage
,
1729 __in ULONGLONG PageCount
,
1730 __in PBL_MEMORY_DESCRIPTOR_LIST NewMdList
1734 MmMdFreeDescriptor (
1735 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
1738 /* PAGE ALLOCATOR ROUTINES ***************************************************/
1741 BlMmAllocatePhysicalPages(
1742 _Inout_ PPHYSICAL_ADDRESS Address
,
1743 _In_ BL_MEMORY_TYPE MemoryType
,
1744 _In_ ULONGLONG PageCount
,
1745 _In_ ULONG Attributes
,
1746 _In_ ULONG Alignment
1750 MmPapAllocatePhysicalPagesInRange (
1751 _Inout_ PPHYSICAL_ADDRESS BaseAddress
,
1752 _In_ BL_MEMORY_TYPE MemoryType
,
1753 _In_ ULONGLONG Pages
,
1754 _In_ ULONG Attributes
,
1755 _In_ ULONG Alignment
,
1756 _In_ PBL_MEMORY_DESCRIPTOR_LIST NewList
,
1757 _In_opt_ PBL_ADDRESS_RANGE Range
,
1758 _In_ ULONG RangeType
1762 BlMmFreePhysicalPages (
1763 _In_ PHYSICAL_ADDRESS Address
1767 MmPapAllocatePagesInRange (
1768 _Inout_ PVOID
* PhysicalAddress
,
1769 _In_ BL_MEMORY_TYPE MemoryType
,
1770 _In_ ULONGLONG Pages
,
1771 _In_ ULONG Attributes
,
1772 _In_ ULONG Alignment
,
1773 _In_opt_ PBL_ADDRESS_RANGE Range
,
1779 _Out_ PBL_MEMORY_DESCRIPTOR_LIST MemoryMap
,
1784 BlpMmInitializeConstraints (
1789 BlMmRemoveBadMemory (
1793 /* VIRTUAL MEMORY ROUTINES ***************************************************/
1796 BlMmMapPhysicalAddressEx (
1797 _In_ PVOID
* VirtualAddress
,
1798 _In_ ULONG Attributes
,
1799 _In_ ULONGLONG Size
,
1800 _In_ PHYSICAL_ADDRESS PhysicalAddress
1804 BlMmUnmapVirtualAddressEx (
1805 _In_ PVOID VirtualAddress
,
1809 /* BLOCK ALLOCATOR ROUTINES **************************************************/
1812 BlpMmCreateBlockAllocator (
1816 /* HEAP ALLOCATOR ROUTINES ***************************************************/
1828 /* DISPLAY ROUTINES **********************************************************/
1831 BlDisplayGetTextCellResolution (
1832 _Out_ PULONG TextWidth
,
1833 _Out_ PULONG TextHeight
1837 BlDisplaySetScreenResolution (
1842 BlDisplayGetScreenResolution (
1847 /* I/O ROUTINES **************************************************************/
1850 BlpIoRegisterDestroyRoutine (
1851 _In_ PBL_IO_DESTROY_ROUTINE DestroyRoutine
1861 _In_ PBL_DEVICE_DESCRIPTOR Device
,
1864 _Out_ PULONG DeviceId
1868 BlDeviceGetInformation (
1869 _In_ ULONG DeviceId
,
1870 _Out_ PBL_DEVICE_INFORMATION DeviceInformation
1874 BlDeviceSetInformation (
1875 _In_ ULONG DeviceId
,
1876 _In_ PBL_DEVICE_INFORMATION DeviceInformation
1880 BlDeviceReadAtOffset (
1881 _In_ ULONG DeviceId
,
1883 _In_ ULONGLONG Offset
,
1885 _Out_ PULONG BytesRead
1888 /* IMAGE ROUTINES ************************************************************/
1891 BlImgLoadImageWithProgress2 (
1892 _In_ ULONG DeviceId
,
1893 _In_ BL_MEMORY_TYPE MemoryType
,
1894 _In_ PWCHAR FileName
,
1895 _Inout_ PVOID
* MappedBase
,
1896 _Inout_ PULONG MappedSize
,
1897 _In_ ULONG ImageFlags
,
1898 _In_ BOOLEAN ShowProgress
,
1899 _Out_opt_ PUCHAR
* HashBuffer
,
1900 _Out_opt_ PULONG HashSize
1903 PIMAGE_SECTION_HEADER
1905 _In_ PVOID ImageBase
,
1906 _In_ ULONG ImageSize
1909 /* FILE I/O ROUTINES *********************************************************/
1917 BlFileReadAtOffsetEx (
1920 _In_ ULONGLONG ByteOffset
,
1922 _Out_ PULONG BytesReturned
,
1927 BlFileGetInformation (
1929 _In_ PBL_FILE_INFORMATION FileInfo
1934 _In_ ULONG DeviceId
,
1935 _In_ PWCHAR FileName
,
1940 /* INPUT CONSOLE ROUTINES ****************************************************/
1943 ConsoleInputLocalDestruct (
1944 _In_
struct _BL_INPUT_CONSOLE
* Console
1948 ConsoleInputBaseReinitialize (
1949 _In_
struct _BL_INPUT_CONSOLE
* Console
1953 ConsoleCreateLocalInputCnsole (
1957 /* TEXT CONSOLE ROUTINES *****************************************************/
1960 ConsoleGraphicalDestruct (
1961 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
1965 ConsoleGraphicalReinitialize (
1966 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
1970 ConsoleGraphicalIsEnabled (
1971 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
1975 ConsoleGraphicalGetGraphicalResolution (
1976 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
1977 _In_ PBL_DISPLAY_MODE DisplayMode
1981 ConsoleGraphicalGetOriginalResolution (
1982 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
1983 _In_ PBL_DISPLAY_MODE DisplayMode
1987 ConsoleGraphicalEnable (
1988 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
1993 ConsoleTextLocalDestruct (
1994 _In_
struct _BL_TEXT_CONSOLE
* Console
1998 ConsoleTextLocalReinitialize (
1999 _In_
struct _BL_TEXT_CONSOLE
* Console
2003 ConsoleTextBaseGetTextState (
2004 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2005 _Out_ PBL_DISPLAY_STATE TextState
2009 ConsoleTextLocalSetTextState (
2010 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2012 _In_ PBL_DISPLAY_STATE TextState
2016 ConsoleTextBaseGetTextResolution (
2017 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2018 _Out_ PULONG TextResolution
2022 ConsoleTextLocalSetTextResolution (
2023 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2024 _In_ ULONG NewTextResolution
,
2025 _Out_ PULONG OldTextResolution
2029 ConsoleTextLocalClearText (
2030 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2031 _In_ ULONG Attribute
2035 ConsoleTextLocalWriteText (
2036 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2038 _In_ ULONG Attribute
2042 ConsoleTextLocalConstruct (
2043 _In_ PBL_TEXT_CONSOLE TextConsole
,
2044 _In_ BOOLEAN Activate
2048 ConsolepFindResolution (
2049 _In_ PBL_DISPLAY_MODE Mode
,
2050 _In_ PBL_DISPLAY_MODE List
,
2055 ConsoleFirmwareTextClose (
2056 _In_ PBL_TEXT_CONSOLE TextConsole
2060 ConsoleFirmwareTextOpen (
2061 _In_ PBL_TEXT_CONSOLE TextConsole
2065 ConsoleFirmwareTextSetState (
2066 _In_ PBL_TEXT_CONSOLE TextConsole
,
2068 _In_ PBL_DISPLAY_STATE State
2072 ConsoleGraphicalConstruct (
2073 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2077 ConsoleCreateRemoteConsole (
2078 _In_ PBL_TEXT_CONSOLE
* TextConsole
2082 ConsoleEfiGraphicalOpenProtocol (
2083 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2084 _In_ BL_GRAPHICS_CONSOLE_TYPE Type
2088 ConsoleFirmwareGraphicalClose (
2089 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2093 ConsoleFirmwareGraphicalDisable (
2094 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2098 ConsoleFirmwareGraphicalEnable (
2099 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2104 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2108 ConsoleEfiUgaClose (
2109 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2113 ConsoleEfiGopClose (
2114 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2119 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2123 ConsoleEfiGopEnable (
2124 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2128 ConsoleEfiUgaSetResolution (
2129 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2130 _In_ PBL_DISPLAY_MODE DisplayMode
,
2131 _In_ ULONG DisplayModeCount
2135 ConsoleCreateLocalInputConsole (
2140 ConsoleInputLocalEraseBuffer (
2141 _In_ PBL_INPUT_CONSOLE Console
,
2142 _In_opt_ PULONG ValueToFill
2145 extern ULONG MmDescriptorCallTreeCount
;
2146 extern ULONG BlpApplicationFlags
;
2147 extern BL_LIBRARY_PARAMETERS BlpLibraryParameters
;
2148 extern BL_TRANSLATION_TYPE MmTranslationType
;
2149 extern PBL_ARCH_CONTEXT CurrentExecutionContext
;
2150 extern PBL_DEVICE_DESCRIPTOR BlpBootDevice
;
2151 extern BL_LOADED_APPLICATION_ENTRY BlpApplicationEntry
;
2152 extern EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*EfiConOut
;
2153 extern EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL
*EfiConInEx
;
2154 extern EFI_GUID EfiGraphicsOutputProtocol
;
2155 extern EFI_GUID EfiUgaDrawProtocol
;
2156 extern EFI_GUID EfiLoadedImageProtocol
;
2157 extern EFI_GUID EfiDevicePathProtocol
;
2158 extern EFI_GUID EfiBlockIoProtocol
;
2159 extern EFI_GUID EfiSimpleTextInputExProtocol
;
2160 extern ULONG ConsoleGraphicalResolutionListFlags
;
2161 extern BL_DISPLAY_MODE ConsoleGraphicalResolutionList
[];
2162 extern BL_DISPLAY_MODE ConsoleTextResolutionList
[];
2163 extern ULONG ConsoleGraphicalResolutionListSize
;
2164 extern PVOID DspRemoteInputConsole
;
2165 extern PVOID DspLocalInputConsole
;
2166 extern WCHAR BlScratchBuffer
[8192];
2167 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedAllocated
;