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 BL_APPLICATION_FLAG_CONVERTED_FROM_EFI 0x01
52 #define BL_APP_ENTRY_SIGNATURE "BTAPENT"
54 #define BOOT_APPLICATION_SIGNATURE_1 'TOOB'
55 #define BOOT_APPLICATION_SIGNATURE_2 ' PPA'
57 #define BOOT_MEMORY_TRANSLATION_TYPE_PHYSICAL 0
58 #define BOOT_MEMORY_TRANSLATION_TYPE_VIRTUAL 1
60 #define BOOT_APPLICATION_VERSION 2
61 #define BL_MEMORY_DATA_VERSION 1
62 #define BL_RETURN_ARGUMENTS_VERSION 1
63 #define BL_FIRMWARE_DESCRIPTOR_VERSION 2
65 #define BL_APPLICATION_ENTRY_FLAG_NO_GUID 0x01
66 #define BL_APPLICATION_ENTRY_BCD_OPTIONS_INTERNAL 0x02
67 #define BL_APPLICATION_ENTRY_REBOOT_ON_ERROR 0x20
68 #define BL_APPLICATION_ENTRY_BCD_OPTIONS_EXTERNAL 0x80
70 #define BL_CONTEXT_PAGING_ON 1
71 #define BL_CONTEXT_INTERRUPTS_ON 2
73 #define BL_MM_FLAG_USE_FIRMWARE_FOR_MEMORY_MAP_BUFFERS 0x01
74 #define BL_MM_FLAG_REQUEST_COALESCING 0x02
76 #define BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG 0x01
77 #define BL_MM_ADD_DESCRIPTOR_TRUNCATE_FLAG 0x02
78 #define BL_MM_ADD_DESCRIPTOR_NEVER_COALESCE_FLAG 0x10
79 #define BL_MM_ADD_DESCRIPTOR_NEVER_TRUNCATE_FLAG 0x20
80 #define BL_MM_ADD_DESCRIPTOR_UPDATE_LIST_POINTER_FLAG 0x2000
82 #define BL_MM_REQUEST_DEFAULT_TYPE 1
83 #define BL_MM_REQUEST_TOP_DOWN_TYPE 2
85 #define BL_MM_REMOVE_VIRTUAL_REGION_FLAG 0x80000000
87 #define BL_LIBRARY_FLAG_NO_DISPLAY 0x01
88 #define BL_LIBRARY_FLAG_REINITIALIZE 0x02
89 #define BL_LIBRARY_FLAG_REINITIALIZE_ALL 0x04
90 #define BL_LIBRARY_FLAG_ZERO_HEAP_ALLOCATIONS_ON_FREE 0x10
91 #define BL_LIBRARY_FLAG_INITIALIZATION_COMPLETED 0x20
92 #define BL_LIBRARY_FLAG_NO_GRAPHICS_CONSOLE 0x800
94 #define BL_DISPLAY_GRAPHICS_FORCED_VIDEO_MODE_FLAG 0x01
95 #define BL_DISPLAY_GRAPHICS_FORCED_HIGH_RES_MODE_FLAG 0x02
97 #define BL_HT_VALUE_IS_INLINE 0x01
99 #define BL_FS_REGISTER_AT_HEAD_FLAG 1
101 #define BL_BLOCK_DEVICE_REMOVABLE_FLAG 0x01
103 #define BL_MEMORY_CLASS_SHIFT 28
105 #define BL_FILE_READ_ACCESS 0x01
106 #define BL_FILE_WRITE_ACCESS 0x02
107 #define BL_DIRECTORY_ACCESS 0x04
108 #define BL_UNKNOWN_ACCESS 0x10
110 #define BL_DEVICE_READ_ACCESS 0x01
111 #define BL_DEVICE_WRITE_ACCESS 0x02
113 #define BL_DEVICE_ENTRY_OPENED 0x01
114 #define BL_DEVICE_ENTRY_READ_ACCESS 0x02
115 #define BL_DEVICE_ENTRY_WRITE_ACCESS 0x04
117 #define BL_FILE_ENTRY_OPENED 0x01
118 #define BL_FILE_ENTRY_READ_ACCESS 0x02
119 #define BL_FILE_ENTRY_WRITE_ACCESS 0x04
120 #define BL_FILE_ENTRY_UNKNOWN_ACCESS 0x10
122 #define BL_IMG_VALID_FILE 0x01
123 #define BL_IMG_MEMORY_FILE 0x02
124 #define BL_IMG_REMOTE_FILE 0x04
126 #define BL_LOAD_IMG_VIRTUAL_BUFFER 0x01
127 #define BL_LOAD_IMG_EXISTING_BUFFER 0x04
128 #define BL_LOAD_IMG_UNKNOWN_BUFFER_FLAG 0x08
129 #define BL_LOAD_IMG_COMPUTE_SIGNATURE 0x10
130 #define BL_LOAD_IMG_COMPUTE_HASH 0x40000
132 /* ENUMERATIONS **************************************************************/
134 typedef enum _BL_COLOR
152 } BL_COLOR
, *PBL_COLOR
;
154 typedef enum _BL_MEMORY_DESCRIPTOR_TYPE
158 } BL_MEMORY_DESCRIPTOR_TYPE
;
160 typedef enum _BL_TRANSLATION_TYPE
166 } BL_TRANSLATION_TYPE
;
168 typedef enum _BL_ARCH_MODE
177 typedef enum _BL_DEVICE_TYPE
180 LegacyPartitionDevice
= 2,
189 // Local Device Types
191 typedef enum _BL_LOCAL_DEVICE_TYPE
198 VirtualDiskDevice
= 6
199 } BL_LOCAL_DEVICE_TYPE
;
204 typedef enum _BL_PARTITION_TYPE
214 typedef enum _BL_PATH_TYPE
223 typedef enum _BL_MEMORY_CLASS
233 typedef enum _BL_MEMORY_TYPE
238 BlLoaderMemory
= 0xD0000002,
239 BlLoaderDeviceMemory
= 0xD0000004,
240 BlLoaderHeap
= 0xD0000005,
241 BlLoaderPageDirectory
= 0xD0000006,
242 BlLoaderReferencePage
= 0xD0000007,
243 BlLoaderRamDisk
= 0xD0000008,
244 BlLoaderData
= 0xD000000A,
245 BlLoaderRegistry
= 0xD000000B,
246 BlLoaderBlockMemory
= 0xD000000C,
247 BlLoaderSelfMap
= 0xD000000F,
250 // Application Memory
252 BlApplicationReserved
= 0xE0000001,
253 BlApplicationData
= 0xE0000004,
258 BlConventionalMemory
= 0xF0000001,
259 BlUnusableMemory
= 0xF0000002,
260 BlReservedMemory
= 0xF0000003,
261 BlEfiBootMemory
= 0xF0000004,
262 BlEfiRuntimeMemory
= 0xF0000006,
263 BlAcpiReclaimMemory
= 0xF0000008,
264 BlAcpiNvsMemory
= 0xF0000009,
265 BlDeviceIoMemory
= 0xF000000A,
266 BlDevicePortMemory
= 0xF000000B,
267 BlPalMemory
= 0xF000000C,
270 typedef enum _BL_MEMORY_ATTR
273 // Memory Caching Attributes
275 BlMemoryUncached
= 0x00000001,
276 BlMemoryWriteCombined
= 0x00000002,
277 BlMemoryWriteThrough
= 0x00000004,
278 BlMemoryWriteBack
= 0x00000008,
279 BlMemoryUncachedExported
= 0x00000010,
280 BlMemoryValidCacheAttributes
= BlMemoryUncached
| BlMemoryWriteCombined
| BlMemoryWriteThrough
| BlMemoryWriteBack
| BlMemoryUncachedExported
,
281 BlMemoryValidCacheAttributeMask
= 0x000000FF,
284 // Memory Protection Attributes
286 BlMemoryWriteProtected
= 0x00000100,
287 BlMemoryReadProtected
= 0x00000200,
288 BlMemoryExecuteProtected
= 0x00000400,
289 BlMemoryValidProtectionAttributes
= BlMemoryWriteProtected
| BlMemoryReadProtected
| BlMemoryExecuteProtected
,
290 BlMemoryValidProtectionAttributeMask
= 0x0000FF00,
293 // Memory Allocation Attributes
295 BlMemoryUnknown
= 0x00010000,
296 BlMemoryNonFixed
= 0x00020000,
297 BlMemoryFixed
= 0x00040000,
298 BlMemoryReserved
= 0x00080000,
299 BlMemoryValidAllocationAttributes
= BlMemoryNonFixed
| BlMemoryFixed
| BlMemoryReserved
| BlMemoryUnknown
,
300 BlMemoryValidAllocationAttributeMask
= 0x00FF0000,
303 // Memory Type Attributes
305 BlMemoryRuntime
= 0x01000000,
306 BlMemoryCoalesced
= 0x02000000,
307 BlMemoryUpdate
= 0x04000000,
308 BlMemoryNonFirmware
= 0x08000000,
309 BlMemorySpecial
= 0x20000000,
310 BlMemoryFirmware
= 0x80000000,
311 BlMemoryValidTypeAttributes
= BlMemoryRuntime
| BlMemoryCoalesced
| BlMemoryUpdate
| BlMemoryNonFirmware
| BlMemorySpecial
| BlMemoryFirmware
,
312 BlMemoryValidTypeAttributeMask
= 0xFF000000,
315 /* CALLBACKS *****************************************************************/
317 struct _BL_FILE_ENTRY
;
318 struct _BL_FILE_INFORMATION
;
322 _In_
struct _BL_FILE_ENTRY
* Directory
,
323 _In_ PWCHAR FileName
,
325 _Out_
struct _BL_FILE_ENTRY
** FileEntry
331 _In_
struct _BL_FILE_ENTRY
* FileEntry
337 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
340 _Out_opt_ PULONG BytesRead
351 (*PBL_FILE_GET_NEXT
) (
357 (*PBL_FILE_GET_INFO
) (
358 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
359 _Out_
struct _BL_FILE_INFORMATION
* FileInfo
364 (*PBL_FILE_SET_INFO
) (
365 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
366 _In_
struct _BL_FILE_INFORMATION
* FileInfo
371 (*PBL_FS_INIT_CALLBACK
) (
377 (*PBL_FS_DESTROY_CALLBACK
) (
383 (*PBL_FS_MOUNT_CALLBACK
) (
386 _Out_
struct _BL_FILE_ENTRY
** FileEntry
391 (*PBL_FS_PURGE_CALLBACK
) (
397 (*PBL_FILE_DESTROY_CALLBACK
) (
401 struct _BL_TEXT_CONSOLE
;
402 struct _BL_DISPLAY_STATE
;
403 struct _BL_DISPLAY_MODE
;
404 struct _BL_INPUT_CONSOLE
;
405 struct _BL_REMOTE_CONSOLE
;
406 struct _BL_GRAPHICS_CONSOLE
;
409 (*PCONSOLE_DESTRUCT
) (
410 _In_
struct _BL_TEXT_CONSOLE
* Console
415 (*PCONSOLE_REINITIALIZE
) (
416 _In_
struct _BL_TEXT_CONSOLE
* Console
421 (*PCONSOLE_GET_TEXT_STATE
) (
422 _In_
struct _BL_TEXT_CONSOLE
* Console
,
423 _Out_
struct _BL_DISPLAY_STATE
* TextState
428 (*PCONSOLE_SET_TEXT_STATE
) (
429 _In_
struct _BL_TEXT_CONSOLE
* Console
,
431 _In_
struct _BL_DISPLAY_STATE
* TextState
436 (*PCONSOLE_GET_TEXT_RESOLUTION
) (
437 _In_
struct _BL_TEXT_CONSOLE
* Console
,
438 _Out_ PULONG TextResolution
443 (*PCONSOLE_SET_TEXT_RESOLUTION
) (
444 _In_
struct _BL_TEXT_CONSOLE
* Console
,
445 _In_ ULONG NewTextResolution
,
446 _Out_ PULONG OldTextResolution
451 (*PCONSOLE_CLEAR_TEXT
) (
452 _In_
struct _BL_TEXT_CONSOLE
* Console
,
453 _In_ BOOLEAN LineOnly
458 (*PCONSOLE_IS_ENABLED
) (
459 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
464 (*PCONSOLE_GET_GRAPHICAL_RESOLUTION
) (
465 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
466 _Out_
struct _BL_DISPLAY_MODE
* DisplayMode
471 (*PCONSOLE_SET_GRAPHICAL_RESOLUTION
) (
472 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
473 _In_
struct _BL_DISPLAY_MODE DisplayMode
479 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
485 (*PCONSOLE_WRITE_TEXT
) (
486 _In_
struct _BL_TEXT_CONSOLE
* Console
,
493 (*PBL_TBL_LOOKUP_ROUTINE
) (
495 _In_ PVOID Argument1
,
496 _In_ PVOID Argument2
,
497 _In_ PVOID Argument3
,
503 (*PBL_TBL_MAP_ROUTINE
) (
505 _In_ ULONG EntryIndex
510 (*PBL_TBL_SET_ROUTINE
) (
516 (*PBL_IO_DESTROY_ROUTINE
) (
520 struct _BL_HASH_ENTRY
;
523 (*PBL_HASH_TABLE_COMPARE_FUNCTION
) (
524 _In_
struct _BL_HASH_ENTRY
* Entry1
,
525 _In_
struct _BL_HASH_ENTRY
* Entry2
530 (*PBL_HASH_TABLE_HASH_FUNCTION
) (
531 _In_
struct _BL_HASH_ENTRY
* Entry
,
535 struct _BL_DEVICE_ENTRY
;
536 struct _BL_DEVICE_DESCRIPTOR
;
537 struct _BL_DEVICE_INFORMATION
;
541 (*PBL_DEVICE_ENUMERATE_DEVICE_CLASS
) (
548 _In_
struct _BL_DEVICE_DESCRIPTOR
* Device
,
549 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
554 (*PBL_DEVICE_CLOSE
) (
555 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
561 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
564 _Out_ PULONG BytesRead
569 (*PBL_DEVICE_WRITE
) (
575 (*PBL_DEVICE_GET_INFORMATION
) (
576 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
577 _Out_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
582 (*PBL_DEVICE_SET_INFORMATION
) (
583 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
584 _In_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
589 (*PBL_DEVICE_RESET
) (
595 (*PBL_DEVICE_FLUSH
) (
601 (*PBL_DEVICE_CREATE
) (
606 /* DATA STRUCTURES ***********************************************************/
608 typedef struct _BL_LIBRARY_PARAMETERS
611 ULONG TranslationType
;
612 ULONG MinimumAllocationCount
;
613 ULONG MinimumHeapSize
;
614 ULONG HeapAllocationAttributes
;
615 PWCHAR ApplicationBaseDirectory
;
616 ULONG DescriptorCount
;
617 PWCHAR FontBaseDirectory
;
618 } BL_LIBRARY_PARAMETERS
, *PBL_LIBRARY_PARAMETERS
;
620 /* This should eventually go into a more public header */
621 typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK
623 /* This header tells the library what image we're dealing with */
628 ULONG MemoryTranslationType
;
630 /* Where is the image located */
634 /* Offset to BL_MEMORY_DATA */
635 ULONG MemoryDataOffset
;
637 /* Offset to BL_APPLICATION_ENTRY */
638 ULONG AppEntryOffset
;
640 /* Offset to BL_DEVICE_DESCRPIPTOR */
641 ULONG BootDeviceOffset
;
643 /* Offset to BL_FIRMWARE_PARAMETERS */
644 ULONG FirmwareParametersOffset
;
646 /* Offset to BL_RETURN_ARGUMENTS */
647 ULONG ReturnArgumentsOffset
;
648 } BOOT_APPLICATION_PARAMETER_BLOCK
, *PBOOT_APPLICATION_PARAMETER_BLOCK
;
650 typedef struct _BL_MEMORY_DATA
654 ULONG DescriptorCount
;
655 ULONG DescriptorSize
;
656 ULONG DescriptorOffset
;
657 } BL_MEMORY_DATA
, *PBL_MEMORY_DATA
;
659 typedef struct _BL_FIRMWARE_DESCRIPTOR
663 EFI_HANDLE ImageHandle
;
664 EFI_SYSTEM_TABLE
*SystemTable
;
665 } BL_FIRMWARE_DESCRIPTOR
, *PBL_FIRMWARE_DESCRIPTOR
;
667 typedef struct _BL_RETURN_ARGUMENTS
671 ULONG ReturnArgumentData
[5];
672 } BL_RETURN_ARGUMENTS
, *PBL_RETURN_ARGUMENTS
;
674 typedef struct _BL_MEMORY_DESCRIPTOR
676 LIST_ENTRY ListEntry
;
682 ULONGLONG VirtualPage
;
686 ULONGLONG BaseAddress
;
687 ULONGLONG VirtualAddress
;
693 } BL_MEMORY_DESCRIPTOR
, *PBL_MEMORY_DESCRIPTOR
;
695 typedef struct _BL_BCD_OPTION
701 ULONG NextEntryOffset
;
703 } BL_BCD_OPTION
, *PBL_BCD_OPTION
;
705 typedef struct _BL_APPLICATION_ENTRY
711 BL_BCD_OPTION BcdData
;
712 } BL_APPLICATION_ENTRY
, *PBL_APPLICATION_ENTRY
;
714 typedef struct _BL_LOADED_APPLICATION_ENTRY
718 PBL_BCD_OPTION BcdData
;
719 } BL_LOADED_APPLICATION_ENTRY
, *PBL_LOADED_APPLICATION_ENTRY
;
721 typedef struct _BL_HARDDISK_DEVICE
728 ULONG PartitionSignature
;
733 GUID PartitionSignature
;
741 } BL_HARDDISK_DEVICE
;
743 typedef struct _BL_LOCAL_DEVICE
753 BL_HARDDISK_DEVICE HardDisk
;
757 PHYSICAL_ADDRESS ImageBase
;
758 LARGE_INTEGER ImageSize
;
764 typedef struct _BL_DEVICE_DESCRIPTOR
766 DEVICE_TYPE DeviceType
;
772 BL_LOCAL_DEVICE Local
;
783 ULONG PartitionNumber
;
791 BL_LOCAL_DEVICE Disk
;
794 } BL_DEVICE_DESCRIPTOR
, *PBL_DEVICE_DESCRIPTOR
;
796 typedef struct _BL_FILE_PATH_DESCRIPTOR
801 UCHAR Path
[ANYSIZE_ARRAY
];
802 } BL_FILE_PATH_DESCRIPTOR
, *PBL_FILE_PATH_DESCRIPTOR
;
804 typedef struct _BL_WINDOWS_LOAD_OPTIONS
810 WCHAR LoadOptions
[ANYSIZE_ARRAY
];
811 } BL_WINDOWS_LOAD_OPTIONS
, *PBL_WINDOWS_LOAD_OPTIONS
;
813 typedef struct _BL_ARCH_CONTEXT
816 BL_TRANSLATION_TYPE TranslationType
;
818 } BL_ARCH_CONTEXT
, *PBL_ARCH_CONTEXT
;
820 typedef struct _BL_MEMORY_DESCRIPTOR_LIST
826 } BL_MEMORY_DESCRIPTOR_LIST
, *PBL_MEMORY_DESCRIPTOR_LIST
;
828 typedef struct _BL_ADDRESS_RANGE
832 } BL_ADDRESS_RANGE
, *PBL_ADDRESS_RANGE
;
834 typedef struct _BL_FILE_INFORMATION
840 } BL_FILE_INFORMATION
, *PBL_FILE_INFORMATION
;
842 typedef struct _BL_FILE_CALLBACKS
845 PBL_FILE_CLOSE Close
;
847 PBL_FILE_WRITE Write
;
848 PBL_FILE_GET_NEXT GetNext
;
849 PBL_FILE_GET_INFO GetInfo
;
850 PBL_FILE_SET_INFO SetInfo
;
851 } BL_FILE_CALLBACKS
, *PBL_FILE_CALLBACKS
;
853 typedef struct _BL_FILE_ENTRY
859 ULONG ReferenceCount
;
861 ULONGLONG TotalBytesRead
;
863 BL_FILE_CALLBACKS Callbacks
;
864 PVOID FsSpecificData
;
865 } BL_FILE_ENTRY
, *PBL_FILE_ENTRY
;
867 typedef struct _BL_FILE_SYSTEM_ENTRY
869 LIST_ENTRY ListEntry
;
870 PBL_FS_INIT_CALLBACK InitCallback
;
871 PBL_FS_DESTROY_CALLBACK DestroyCallback
;
872 PBL_FS_MOUNT_CALLBACK MountCallback
;
873 PBL_FS_PURGE_CALLBACK PurgeCallback
;
874 } BL_FILE_SYSTEM_ENTRY
, *PBL_FILE_SYSTEM_ENTRY
;
876 typedef struct _BL_FILE_SYSTEM_REGISTRATION_TABLE
878 PBL_FS_INIT_CALLBACK Init
;
879 PBL_FS_DESTROY_CALLBACK Destroy
;
880 PBL_FS_MOUNT_CALLBACK Mount
;
881 PBL_FS_PURGE_CALLBACK Purge
;
882 } BL_FILE_SYSTEM_REGISTRATION_TABLE
;
884 typedef struct _BL_DISPLAY_STATE
891 } BL_DISPLAY_STATE
, *PBL_DISPLAY_STATE
;
893 typedef struct _BL_DISPLAY_MODE
898 } BL_DISPLAY_MODE
, *PBL_DISPLAY_MODE
;
900 typedef struct _BL_TEXT_CONSOLE_VTABLE
902 PCONSOLE_DESTRUCT Destruct
;
903 PCONSOLE_REINITIALIZE Reinitialize
;
904 PCONSOLE_GET_TEXT_STATE GetTextState
;
905 PCONSOLE_SET_TEXT_STATE SetTextState
;
906 PCONSOLE_GET_TEXT_RESOLUTION GetTextResolution
;
907 PCONSOLE_SET_TEXT_RESOLUTION SetTextResolution
;
908 PCONSOLE_CLEAR_TEXT ClearText
;
909 PCONSOLE_WRITE_TEXT WriteText
;
910 } BL_TEXT_CONSOLE_VTABLE
, *PBL_TEXT_CONSOLE_VTABLE
;
912 typedef struct _BL_GRAPHICS_CONSOLE_VTABLE
914 BL_TEXT_CONSOLE_VTABLE Text
;
915 PCONSOLE_IS_ENABLED IsEnabled
;
916 PCONSOLE_ENABLE Enable
;
917 PVOID GetConsoleResolution
;
918 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetGraphicalResolution
;
919 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetOriginalResolution
;
920 PCONSOLE_SET_GRAPHICAL_RESOLUTION SetOriginalResolution
;
921 /// more for graphics ///
922 } BL_GRAPHICS_CONSOLE_VTABLE
, *PBL_GRAPHICS_CONSOLE_VTABLE
;
924 typedef struct _BL_TEXT_CONSOLE
926 PBL_TEXT_CONSOLE_VTABLE Callbacks
;
927 BL_DISPLAY_STATE State
;
928 BL_DISPLAY_MODE DisplayMode
;
930 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
* Protocol
;
932 EFI_SIMPLE_TEXT_OUTPUT_MODE OldMode
;
933 } BL_TEXT_CONSOLE
, *PBL_TEXT_CONSOLE
;
935 typedef struct _BL_INPUT_CONSOLE_VTABLE
937 PCONSOLE_DESTRUCT Destruct
;
938 PCONSOLE_REINITIALIZE Reinitialize
;
939 //PCONSOLE_IS_KEY_PENDING IsKeyPending;
940 //PCONSOLE_READ_INPUT ReadInput;
941 //PCONSOLE_ERASE_BUFFER EraseBuffer;
942 //PCONSOLE_FILL_BUFFER FillBuffer;
943 } BL_INPUT_CONSOLE_VTABLE
, *PBL_INPUT_CONSOLE_VTABLE
;
945 typedef struct _BL_INPUT_CONSOLE
947 PBL_INPUT_CONSOLE_VTABLE Callbacks
;
952 } BL_INPUT_CONSOLE
, *PBL_INPUT_CONSOLE
;
954 typedef enum _BL_GRAPHICS_CONSOLE_TYPE
958 } BL_GRAPHICS_CONSOLE_TYPE
;
960 typedef struct _BL_GRAPHICS_CONSOLE
962 BL_TEXT_CONSOLE TextConsole
;
963 BL_DISPLAY_MODE DisplayMode
;
967 BL_DISPLAY_MODE OldDisplayMode
;
970 BL_GRAPHICS_CONSOLE_TYPE Type
;
971 EFI_GRAPHICS_OUTPUT_PROTOCOL
* Protocol
;
973 ULONG FrameBufferSize
;
974 ULONG PixelsPerScanLine
;
977 } BL_GRAPHICS_CONSOLE
, *PBL_GRAPHICS_CONSOLE
;
979 typedef struct _BL_REMOTE_CONSOLE
981 BL_TEXT_CONSOLE TextConsole
;
982 } BL_REMOTE_CONSOLE
, *PBL_REMOTE_CONSOLE
;
984 typedef struct _BL_HASH_TABLE
986 PLIST_ENTRY HashLinks
;
988 PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
;
989 PBL_HASH_TABLE_HASH_FUNCTION HashFunction
;
990 } BL_HASH_TABLE
, *PBL_HASH_TABLE
;
992 typedef struct _BL_HASH_ENTRY
997 } BL_HASH_ENTRY
, *PBL_HASH_ENTRY
;
999 typedef struct _BL_HASH_VALUE
1003 } BL_HASH_VALUE
, *PBL_HASH_VALUE
;
1005 typedef struct _BL_HASH_NODE
1007 LIST_ENTRY ListEntry
;
1008 BL_HASH_ENTRY Entry
;
1009 BL_HASH_VALUE Value
;
1010 } BL_HASH_NODE
, *PBL_HASH_NODE
;
1012 typedef struct _BL_BLOCK_DEVICE_INFORMATION
1014 BL_LOCAL_DEVICE_TYPE Type
;
1017 BL_PARTITION_TYPE PartitionType
;
1020 ULONGLONG LastBlock
;
1037 } BL_BLOCK_DEVICE_INFORMATION
, *PBL_BLOCK_DEVICE_INFORMATION
;
1039 typedef struct _BL_DEVICE_INFORMATION
1041 BL_DEVICE_TYPE DeviceType
;
1044 BL_BLOCK_DEVICE_INFORMATION BlockDeviceInfo
;
1046 } BL_DEVICE_INFORMATION
, *PBL_DEVICE_INFORMATION
;
1048 typedef struct _BL_BLOCK_DEVICE
1050 BL_BLOCK_DEVICE_INFORMATION
;
1051 ULONGLONG StartOffset
;
1052 EFI_BLOCK_IO
* Protocol
;
1054 } BL_BLOCK_DEVICE
, *PBL_BLOCK_DEVICE
;
1056 typedef struct _BL_PROTOCOL_HANDLE
1060 } BL_PROTOCOL_HANDLE
, *PBL_PROTOCOL_HANDLE
;
1062 typedef struct _BL_DEVICE_CALLBACKS
1064 PBL_DEVICE_ENUMERATE_DEVICE_CLASS EnumerateDeviceClass
;
1065 PBL_DEVICE_OPEN Open
;
1066 PBL_DEVICE_CLOSE Close
;
1067 PBL_DEVICE_READ Read
;
1068 PBL_DEVICE_WRITE Write
;
1069 PBL_DEVICE_GET_INFORMATION GetInformation
;
1070 PBL_DEVICE_SET_INFORMATION SetInformation
;
1071 PBL_DEVICE_RESET Reset
;
1072 PBL_DEVICE_FLUSH Flush
;
1073 PBL_DEVICE_CREATE Create
;
1074 } BL_DEVICE_CALLBACKS
, *PBL_DEVICE_CALLBACKS
;
1076 typedef struct _BL_DEVICE_ENTRY
1081 ULONG ReferenceCount
;
1082 BL_DEVICE_CALLBACKS Callbacks
;
1083 PVOID DeviceSpecificData
;
1084 PBL_DEVICE_DESCRIPTOR DeviceDescriptor
;
1085 } BL_DEVICE_ENTRY
, *PBL_DEVICE_ENTRY
;
1087 typedef struct _BL_IMG_FILE
1097 } BL_IMG_FILE
, *PBL_IMG_FILE
;
1099 typedef struct _BL_DEFERRED_FONT_FILE
1101 LIST_ENTRY ListEntry
;
1103 PBL_DEVICE_DESCRIPTOR Device
;
1105 } BL_DEFERRED_FONT_FILE
, *PBL_DEFERRED_FONT_FILE
;
1109 typedef struct _BMP_HEADER
1115 } BMP_HEADER
, *PBMP_HEADER
;
1117 typedef struct _DIB_HEADER
1126 ULONG XPelsPerMeter
;
1127 ULONG YPelsPerMEter
;
1130 } DIB_HEADER
, *PDIB_HEADER
;
1132 typedef struct _BITMAP
1134 BMP_HEADER BmpHeader
;
1135 DIB_HEADER DibHeader
;
1139 typedef struct _COORD
1145 /* INLINE ROUTINES ***********************************************************/
1149 BlSetupDefaultParameters (
1150 _Out_ PBL_LIBRARY_PARAMETERS LibraryParameters
1153 BL_LIBRARY_PARAMETERS DefaultParameters
=
1165 /* Copy the defaults */
1166 RtlCopyMemory(LibraryParameters
, &DefaultParameters
, sizeof(*LibraryParameters
));
1171 MmMdInitializeListHead (
1172 _In_ PBL_MEMORY_DESCRIPTOR_LIST List
1175 /* Initialize the list */
1176 InitializeListHead(&List
->ListHead
);
1177 List
->First
= &List
->ListHead
;
1181 /* INITIALIZATION ROUTINES ***************************************************/
1184 BlInitializeLibrary(
1185 _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters
,
1186 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1197 _In_ PBL_FIRMWARE_DESCRIPTOR FirmwareParameters
1202 _In_ PBL_MEMORY_DATA MemoryData
,
1203 _In_ BL_TRANSLATION_TYPE TranslationType
,
1204 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1214 _In_ PBL_MEMORY_DATA MemoryData
,
1215 _In_ ULONG MinimumPages
1221 _In_ PBL_MEMORY_DATA MemoryData
,
1222 _In_ BL_TRANSLATION_TYPE TranslationType
,
1223 _In_ BL_TRANSLATION_TYPE LibraryTranslationType
1228 _In_ ULONG HeapSize
,
1229 _In_ ULONG HeapAttributes
1235 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1239 BlpDeviceInitialize (
1254 BlpDisplayInitialize (
1268 /* FIRMWARE ROUTINES *********************************************************/
1280 _Inout_ EFI_PHYSICAL_ADDRESS
* Memory
1285 _In_ ULONG StallTime
1299 EfiConOutOutputString (
1300 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1305 EfiConOutQueryMode (
1306 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1308 _In_ UINTN
* Columns
,
1314 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1319 EfiConOutReadCurrentMode (
1320 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1321 _Out_ EFI_SIMPLE_TEXT_OUTPUT_MODE
* Mode
1325 EfiConOutSetAttribute (
1326 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1327 _In_ ULONG Attribute
1331 EfiConOutSetCursorPosition (
1332 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1338 EfiConOutEnableCursor (
1339 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1340 _In_ BOOLEAN Visible
1344 EfiLocateHandleBuffer (
1345 _In_ EFI_LOCATE_SEARCH_TYPE SearchType
,
1346 _In_ EFI_GUID
*Protocol
,
1347 _Inout_ PULONG HandleCount
,
1348 _Inout_ EFI_HANDLE
** Buffer
1353 _In_ EFI_HANDLE Handle
,
1354 _In_ EFI_GUID
*Protocol
,
1355 _Out_ PVOID
* Interface
1360 _In_ EFI_HANDLE Handle
,
1361 _In_ EFI_GUID
*Protocol
1365 EfiGopGetCurrentMode (
1366 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1368 _Out_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
*Information
1373 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1378 EfiGopGetFrameBuffer (
1379 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1380 _Out_ PHYSICAL_ADDRESS
* FrameBuffer
,
1381 _Out_ UINTN
*FrameBufferSize
1386 _In_ EFI_RESET_TYPE ResetType
1391 _In_ EFI_DEVICE_PATH
*DevicePath
1395 EfiIsDevicePathParent (
1396 _In_ EFI_DEVICE_PATH
*DevicePath1
,
1397 _In_ EFI_DEVICE_PATH
*DevicePath2
1402 _Out_ PPHYSICAL_ADDRESS FoundRsdt
1405 /* PLATFORM TIMER ROUTINES ***************************************************/
1408 BlpTimeCalibratePerformanceCounter (
1412 /* RESOURCE LOCALE INTERNATIONALIZATION ROUTINES *****************************/
1415 BlpDisplayRegisterLocale (
1419 /* FONT ROUTINES *************************************************************/
1422 BfiFreeDeferredFontFile (
1423 _In_ PBL_DEFERRED_FONT_FILE DeferredFontFile
1428 _In_ PBL_DEVICE_DESCRIPTOR Device
,
1429 _In_ PWCHAR FontPath
1433 BfLoadDeferredFontFiles (
1439 _In_ PBL_GRAPHICS_CONSOLE Console
1443 BfClearToEndOfLine (
1444 _In_ PBL_GRAPHICS_CONSOLE Console
1447 /* FILESYSTEM ROUTINES *******************************************************/
1456 _In_ ULONG DeviceId
,
1458 _Out_ PBL_FILE_ENTRY
* FileEntry
1468 _In_ ULONG DeviceId
,
1470 _Out_ PBL_FILE_ENTRY
* FileEntry
1473 /* DEBUG ROUTINES ************************************************************/
1477 BlBdDebuggerEnabled (
1482 BlBdPullRemoteFile (
1483 _In_ PWCHAR FilePath
,
1484 _Out_ PVOID BaseAddress
,
1485 _Out_ PULONGLONG FileSize
1496 _In_ ULONG ErrorCode
,
1497 _In_ ULONG Parameter1
,
1498 _In_ ULONG_PTR Parameter2
,
1499 _In_ ULONG_PTR Parameter3
,
1500 _In_ ULONG_PTR Parameter4
1503 /* UTILITY ROUTINES **********************************************************/
1506 BlUtlUpdateProgress (
1507 _In_ ULONG Percentage
,
1508 _Out_opt_ PBOOLEAN Completed
1513 _Out_ PVOID
* TableAddress
,
1514 _In_ ULONG Signature
1523 BlUtlRegisterProgressRoutine (
1528 BlGetApplicationBaseAndSize (
1529 _Out_ PVOID
* ImageBase
,
1530 _Out_ PULONG ImageSize
1534 BlDestroyBootEntry (
1535 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
1538 /* FIRMWARE UTILITY ROUTINES *************************************************/
1541 EfiGetEfiStatusCode(
1542 _In_ NTSTATUS Status
1546 EfiGetNtStatusCode (
1547 _In_ EFI_STATUS EfiStatus
1556 BlGetApplicationIdentifier (
1561 BlpSecureBootEFIIsEnabled (
1566 BlSecureBootIsEnabled (
1567 _Out_ PBOOLEAN SecureBootEnabled
1571 BlSecureBootCheckForFactoryReset (
1575 /* RESOURCE ROUTINES *********************************************************/
1578 BlResourceFindMessage (
1583 BlResourceFindHtml (
1588 BlpResourceInitialize (
1592 /* TABLE ROUTINES ************************************************************/
1598 _In_ PBL_TBL_MAP_ROUTINE MapCallback
1605 _Out_ PULONG EntryIndex
,
1606 _In_ PBL_TBL_LOOKUP_ROUTINE Callback
,
1607 _In_ PVOID Argument1
,
1608 _In_ PVOID Argument2
,
1609 _In_ PVOID Argument3
,
1610 _In_ PVOID Argument4
1615 _Inout_ PVOID
** Table
,
1616 _Inout_ PULONG Count
,
1618 _Out_ PULONG EntryIndex
,
1619 _In_ PBL_TBL_SET_ROUTINE Callback
1623 TblDoNotPurgeEntry (
1627 /* HASH TABLE ROUTINES *******************************************************/
1632 _In_ PBL_HASH_ENTRY Entry
,
1640 _In_ PBL_HASH_ENTRY Entry
,
1641 _Out_ PBL_HASH_VALUE
*Value
1647 _In_ PBL_HASH_TABLE_HASH_FUNCTION HashFunction
,
1648 _In_ PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
,
1652 /* BCD OPTION ROUTINES *******************************************************/
1656 _In_ PBL_BCD_OPTION List
,
1661 BlGetBootOptionListSize (
1662 _In_ PBL_BCD_OPTION BcdOption
1666 BlGetBootOptionSize (
1667 _In_ PBL_BCD_OPTION BcdOption
1671 BlGetBootOptionString (
1672 _In_ PBL_BCD_OPTION List
,
1678 BlGetBootOptionInteger (
1679 _In_ PBL_BCD_OPTION List
,
1681 _Out_ PULONGLONG Value
1685 BlGetBootOptionBoolean (
1686 _In_ PBL_BCD_OPTION List
,
1688 _Out_ PBOOLEAN Value
1692 BlpGetBootOptionIntegerList (
1693 _In_ PBL_BCD_OPTION List
,
1695 _Out_ PULONGLONG
* Value
,
1696 _Out_ PULONGLONG Count
,
1701 BlGetBootOptionDevice (
1702 _In_ PBL_BCD_OPTION List
,
1704 _Out_ PBL_DEVICE_DESCRIPTOR
* Value
,
1705 _In_opt_ PBL_BCD_OPTION
* ExtraOptions
1709 BlGetBootOptionGuidList (
1710 _In_ PBL_BCD_OPTION List
,
1718 _In_ PBL_BCD_OPTION OptionList
,
1719 _Out_ PBL_BCD_OPTION
*CopiedOptions
1723 BlAppendBootOptions (
1724 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1725 _In_ PBL_BCD_OPTION Options
1729 BlRemoveBootOption (
1730 _In_ PBL_BCD_OPTION List
,
1735 BlReplaceBootOptions (
1736 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1737 _In_ PBL_BCD_OPTION NewOptions
1740 /* BOOT REGISTRY ROUTINES ****************************************************/
1744 _In_ HANDLE KeyHandle
1749 _In_ HANDLE ParentHandle
,
1750 _In_ PWCHAR KeyName
,
1751 _Out_ PHANDLE Handle
1756 _In_ PBL_FILE_PATH_DESCRIPTOR FilePath
,
1757 _Out_ PHANDLE HiveHandle
1761 BiGetRegistryValue (
1762 _In_ HANDLE KeyHandle
,
1763 _In_ PWCHAR ValueName
,
1764 _In_ PWCHAR KeyName
,
1766 _Out_ PVOID
* Buffer
,
1767 _Out_ PULONG ValueLength
1771 BiEnumerateSubKeys (
1772 _In_ HANDLE KeyHandle
,
1773 _Out_ PWCHAR
** SubKeyList
,
1774 _Out_ PULONG SubKeyCount
1779 _In_ HANDLE KeyHandle
1782 /* CONTEXT ROUTINES **********************************************************/
1785 BlpArchSwitchContext (
1786 _In_ BL_ARCH_MODE NewMode
1789 /* MEMORY DESCRIPTOR ROUTINES ************************************************/
1793 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
1796 PBL_MEMORY_DESCRIPTOR
1797 MmMdInitByteGranularDescriptor (
1799 _In_ BL_MEMORY_TYPE Type
,
1800 _In_ ULONGLONG BasePage
,
1801 _In_ ULONGLONG VirtualPage
,
1802 _In_ ULONGLONG PageCount
1806 MmMdFreeGlobalDescriptors (
1811 MmMdAddDescriptorToList (
1812 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1813 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
,
1818 MmMdRemoveDescriptorFromList (
1819 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1820 _In_ PBL_MEMORY_DESCRIPTOR Entry
1824 MmMdFindSatisfyingRegion (
1825 _In_ PBL_MEMORY_DESCRIPTOR Descriptor
,
1826 _Out_ PBL_MEMORY_DESCRIPTOR NewDescriptor
,
1827 _In_ ULONGLONG Pages
,
1828 _In_ PBL_ADDRESS_RANGE BaseRange
,
1829 _In_ PBL_ADDRESS_RANGE VirtualRange
,
1830 _In_ BOOLEAN TopDown
,
1831 _In_ BL_MEMORY_TYPE MemoryType
,
1833 _In_ ULONG Alignment
1837 MmMdRemoveRegionFromMdlEx (
1838 __in PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1840 __in ULONGLONG BasePage
,
1841 __in ULONGLONG PageCount
,
1842 __in PBL_MEMORY_DESCRIPTOR_LIST NewMdList
1846 MmMdFreeDescriptor (
1847 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
1850 /* PAGE ALLOCATOR ROUTINES ***************************************************/
1853 BlMmAllocatePhysicalPages(
1854 _Inout_ PPHYSICAL_ADDRESS Address
,
1855 _In_ BL_MEMORY_TYPE MemoryType
,
1856 _In_ ULONGLONG PageCount
,
1857 _In_ ULONG Attributes
,
1858 _In_ ULONG Alignment
1862 MmPapAllocatePhysicalPagesInRange (
1863 _Inout_ PPHYSICAL_ADDRESS BaseAddress
,
1864 _In_ BL_MEMORY_TYPE MemoryType
,
1865 _In_ ULONGLONG Pages
,
1866 _In_ ULONG Attributes
,
1867 _In_ ULONG Alignment
,
1868 _In_ PBL_MEMORY_DESCRIPTOR_LIST NewList
,
1869 _In_opt_ PBL_ADDRESS_RANGE Range
,
1870 _In_ ULONG RangeType
1874 BlMmFreePhysicalPages (
1875 _In_ PHYSICAL_ADDRESS Address
1879 MmPapAllocatePagesInRange (
1880 _Inout_ PVOID
* PhysicalAddress
,
1881 _In_ BL_MEMORY_TYPE MemoryType
,
1882 _In_ ULONGLONG Pages
,
1883 _In_ ULONG Attributes
,
1884 _In_ ULONG Alignment
,
1885 _In_opt_ PBL_ADDRESS_RANGE Range
,
1891 _Out_ PBL_MEMORY_DESCRIPTOR_LIST MemoryMap
,
1896 BlpMmInitializeConstraints (
1901 BlMmRemoveBadMemory (
1905 /* VIRTUAL MEMORY ROUTINES ***************************************************/
1908 BlMmMapPhysicalAddressEx (
1909 _In_ PVOID
* VirtualAddress
,
1910 _In_ ULONG Attributes
,
1911 _In_ ULONGLONG Size
,
1912 _In_ PHYSICAL_ADDRESS PhysicalAddress
1916 BlMmUnmapVirtualAddressEx (
1917 _In_ PVOID VirtualAddress
,
1921 /* BLOCK ALLOCATOR ROUTINES **************************************************/
1924 BlpMmCreateBlockAllocator (
1928 /* HEAP ALLOCATOR ROUTINES ***************************************************/
1940 /* DISPLAY ROUTINES **********************************************************/
1943 BlDisplayGetTextCellResolution (
1944 _Out_ PULONG TextWidth
,
1945 _Out_ PULONG TextHeight
1949 BlDisplaySetScreenResolution (
1954 BlDisplayGetScreenResolution (
1960 BlDisplayInvalidateOemBitmap (
1965 BlDisplayGetOemBitmap (
1966 _Out_ PCOORD Offset
,
1967 _Out_opt_ PULONG Flags
1971 BlDisplayValidOemBitmap (
1976 BlDisplayClearScreen (
1981 BlDisplaySetCursorType (
1985 /* I/O ROUTINES **************************************************************/
1988 BlpIoRegisterDestroyRoutine (
1989 _In_ PBL_IO_DESTROY_ROUTINE DestroyRoutine
1999 _In_ PBL_DEVICE_DESCRIPTOR Device
,
2002 _Out_ PULONG DeviceId
2006 BlDeviceGetInformation (
2007 _In_ ULONG DeviceId
,
2008 _Out_ PBL_DEVICE_INFORMATION DeviceInformation
2012 BlDeviceSetInformation (
2013 _In_ ULONG DeviceId
,
2014 _In_ PBL_DEVICE_INFORMATION DeviceInformation
2018 BlDeviceReadAtOffset (
2019 _In_ ULONG DeviceId
,
2021 _In_ ULONGLONG Offset
,
2023 _Out_ PULONG BytesRead
2026 /* IMAGE ROUTINES ************************************************************/
2029 BlImgLoadImageWithProgress2 (
2030 _In_ ULONG DeviceId
,
2031 _In_ BL_MEMORY_TYPE MemoryType
,
2032 _In_ PWCHAR FileName
,
2033 _Inout_ PVOID
* MappedBase
,
2034 _Inout_ PULONG MappedSize
,
2035 _In_ ULONG ImageFlags
,
2036 _In_ BOOLEAN ShowProgress
,
2037 _Out_opt_ PUCHAR
* HashBuffer
,
2038 _Out_opt_ PULONG HashSize
2041 PIMAGE_SECTION_HEADER
2043 _In_ PVOID ImageBase
,
2044 _In_ ULONG ImageSize
2047 /* FILE I/O ROUTINES *********************************************************/
2055 BlFileReadAtOffsetEx (
2058 _In_ ULONGLONG ByteOffset
,
2060 _Out_ PULONG BytesReturned
,
2065 BlFileGetInformation (
2067 _In_ PBL_FILE_INFORMATION FileInfo
2072 _In_ ULONG DeviceId
,
2073 _In_ PWCHAR FileName
,
2078 /* INPUT CONSOLE ROUTINES ****************************************************/
2081 ConsoleInputLocalDestruct (
2082 _In_
struct _BL_INPUT_CONSOLE
* Console
2086 ConsoleInputBaseReinitialize (
2087 _In_
struct _BL_INPUT_CONSOLE
* Console
2091 ConsoleCreateLocalInputCnsole (
2095 /* TEXT CONSOLE ROUTINES *****************************************************/
2098 ConsoleGraphicalDestruct (
2099 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2103 ConsoleGraphicalClearText (
2104 _In_ PBL_GRAPHICS_CONSOLE Console
,
2105 _In_ BOOLEAN LineOnly
2109 ConsoleGraphicalClearPixels (
2110 _In_ PBL_GRAPHICS_CONSOLE Console
,
2115 ConsoleGraphicalReinitialize (
2116 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2120 ConsoleGraphicalSetTextState (
2121 _In_ PBL_GRAPHICS_CONSOLE Console
,
2123 _In_ PBL_DISPLAY_STATE TextState
2127 ConsoleGraphicalIsEnabled (
2128 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2132 ConsoleGraphicalGetGraphicalResolution (
2133 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2134 _In_ PBL_DISPLAY_MODE DisplayMode
2138 ConsoleGraphicalGetOriginalResolution (
2139 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2140 _In_ PBL_DISPLAY_MODE DisplayMode
2144 ConsoleGraphicalEnable (
2145 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2150 ConsoleTextLocalDestruct (
2151 _In_
struct _BL_TEXT_CONSOLE
* Console
2155 ConsoleTextLocalReinitialize (
2156 _In_
struct _BL_TEXT_CONSOLE
* Console
2160 ConsoleTextBaseGetTextState (
2161 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2162 _Out_ PBL_DISPLAY_STATE TextState
2166 ConsoleTextLocalSetTextState (
2167 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2169 _In_ PBL_DISPLAY_STATE TextState
2173 ConsoleTextBaseGetTextResolution (
2174 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2175 _Out_ PULONG TextResolution
2179 ConsoleTextLocalSetTextResolution (
2180 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2181 _In_ ULONG NewTextResolution
,
2182 _Out_ PULONG OldTextResolution
2186 ConsoleTextLocalClearText (
2187 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2188 _In_ BOOLEAN LineOnly
2192 ConsoleTextLocalWriteText (
2193 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2195 _In_ ULONG Attribute
2199 ConsoleTextLocalConstruct (
2200 _In_ PBL_TEXT_CONSOLE TextConsole
,
2201 _In_ BOOLEAN Activate
2205 ConsolepFindResolution (
2206 _In_ PBL_DISPLAY_MODE Mode
,
2207 _In_ PBL_DISPLAY_MODE List
,
2212 ConsoleFirmwareTextClear (
2213 _In_ PBL_TEXT_CONSOLE Console
,
2214 _In_ BOOLEAN LineOnly
2218 ConsoleFirmwareTextClose (
2219 _In_ PBL_TEXT_CONSOLE TextConsole
2223 ConsoleFirmwareTextOpen (
2224 _In_ PBL_TEXT_CONSOLE TextConsole
2228 ConsoleFirmwareTextSetState (
2229 _In_ PBL_TEXT_CONSOLE TextConsole
,
2231 _In_ PBL_DISPLAY_STATE State
2235 ConsoleGraphicalConstruct (
2236 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2240 ConsoleCreateRemoteConsole (
2241 _In_ PBL_TEXT_CONSOLE
* TextConsole
2245 ConsoleEfiGraphicalOpenProtocol (
2246 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2247 _In_ BL_GRAPHICS_CONSOLE_TYPE Type
2251 ConsoleFirmwareGraphicalClose (
2252 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2256 ConsoleFirmwareGraphicalDisable (
2257 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2261 ConsoleFirmwareGraphicalClear (
2262 _In_ PBL_GRAPHICS_CONSOLE Console
,
2267 ConsoleFirmwareGraphicalEnable (
2268 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2273 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2277 ConsoleEfiUgaClose (
2278 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2282 ConsoleEfiGopClose (
2283 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2288 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2292 ConsoleEfiGopEnable (
2293 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2297 ConsoleEfiUgaSetResolution (
2298 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2299 _In_ PBL_DISPLAY_MODE DisplayMode
,
2300 _In_ ULONG DisplayModeCount
2304 ConsoleCreateLocalInputConsole (
2309 ConsoleInputLocalEraseBuffer (
2310 _In_ PBL_INPUT_CONSOLE Console
,
2311 _In_opt_ PULONG ValueToFill
2315 ConsolepClearBuffer (
2316 _In_ PUCHAR FrameBuffer
,
2318 _In_ PUCHAR FillColor
,
2320 _In_ ULONG ScanlineWidth
,
2321 _In_ ULONG PixelDepth
2325 ConsolepConvertColorToPixel (
2326 _In_ BL_COLOR Color
,
2330 extern ULONG MmDescriptorCallTreeCount
;
2331 extern ULONG BlpApplicationFlags
;
2332 extern BL_LIBRARY_PARAMETERS BlpLibraryParameters
;
2333 extern BL_TRANSLATION_TYPE MmTranslationType
;
2334 extern PBL_ARCH_CONTEXT CurrentExecutionContext
;
2335 extern PBL_DEVICE_DESCRIPTOR BlpBootDevice
;
2336 extern BL_LOADED_APPLICATION_ENTRY BlpApplicationEntry
;
2337 extern EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*EfiConOut
;
2338 extern EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL
*EfiConInEx
;
2339 extern EFI_GUID EfiGraphicsOutputProtocol
;
2340 extern EFI_GUID EfiUgaDrawProtocol
;
2341 extern EFI_GUID EfiLoadedImageProtocol
;
2342 extern EFI_GUID EfiDevicePathProtocol
;
2343 extern EFI_GUID EfiBlockIoProtocol
;
2344 extern EFI_GUID EfiSimpleTextInputExProtocol
;
2345 extern EFI_GUID EfiRootAcpiTableGuid
;
2346 extern EFI_GUID EfiRootAcpiTable10Guid
;
2347 extern EFI_GUID EfiGlobalVariable
;
2348 extern ULONG ConsoleGraphicalResolutionListFlags
;
2349 extern BL_DISPLAY_MODE ConsoleGraphicalResolutionList
[];
2350 extern BL_DISPLAY_MODE ConsoleTextResolutionList
[];
2351 extern ULONG ConsoleGraphicalResolutionListSize
;
2352 extern PVOID DspRemoteInputConsole
;
2353 extern PVOID DspLocalInputConsole
;
2354 extern WCHAR BlScratchBuffer
[8192];
2355 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedAllocated
;