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 ******************************************************************/
27 #include <DevicePath.h>
28 #include <LoadedImage.h>
29 #include <GraphicsOutput.h>
33 /* DEFINES *******************************************************************/
35 #define BL_APPLICATION_FLAG_CONVERTED_FROM_EFI 0x01
37 #define BL_APP_ENTRY_SIGNATURE "BTAPENT"
39 #define BOOT_APPLICATION_SIGNATURE_1 'TOOB'
40 #define BOOT_APPLICATION_SIGNATURE_2 ' PPA'
42 #define BOOT_MEMORY_TRANSLATION_TYPE_PHYSICAL 0
43 #define BOOT_MEMORY_TRANSLATION_TYPE_VIRTUAL 1
45 #define BOOT_APPLICATION_VERSION 2
46 #define BL_MEMORY_DATA_VERSION 1
47 #define BL_RETURN_ARGUMENTS_VERSION 1
48 #define BL_FIRMWARE_DESCRIPTOR_VERSION 2
50 #define BL_APPLICATION_ENTRY_FLAG_NO_GUID 0x01
51 #define BL_APPLICATION_ENTRY_REBOOT_ON_ERROR 0x20
53 #define BL_CONTEXT_PAGING_ON 1
54 #define BL_CONTEXT_INTERRUPTS_ON 2
56 #define BL_MM_FLAG_USE_FIRMWARE_FOR_MEMORY_MAP_BUFFERS 0x01
57 #define BL_MM_FLAG_REQUEST_COALESCING 0x02
59 #define BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG 0x01
60 #define BL_MM_ADD_DESCRIPTOR_TRUNCATE_FLAG 0x02
61 #define BL_MM_ADD_DESCRIPTOR_NEVER_COALESCE_FLAG 0x10
62 #define BL_MM_ADD_DESCRIPTOR_NEVER_TRUNCATE_FLAG 0x20
63 #define BL_MM_ADD_DESCRIPTOR_UPDATE_LIST_POINTER_FLAG 0x2000
65 #define BL_MM_REQUEST_DEFAULT_TYPE 1
66 #define BL_MM_REQUEST_TOP_DOWN_TYPE 2
68 #define BL_MM_REMOVE_VIRTUAL_REGION_FLAG 0x80000000
70 #define BL_LIBRARY_FLAG_NO_DISPLAY 0x01
71 #define BL_LIBRARY_FLAG_REINITIALIZE 0x02
72 #define BL_LIBRARY_FLAG_REINITIALIZE_ALL 0x04
73 #define BL_LIBRARY_FLAG_ZERO_HEAP_ALLOCATIONS_ON_FREE 0x10
74 #define BL_LIBRARY_FLAG_INITIALIZATION_COMPLETED 0x20
75 #define BL_LIBRARY_FLAG_NO_GRAPHICS_CONSOLE 0x800
77 #define BL_DISPLAY_GRAPHICS_FORCED_VIDEO_MODE_FLAG 0x01
78 #define BL_DISPLAY_GRAPHICS_FORCED_HIGH_RES_MODE_FLAG 0x02
80 #define BL_HT_VALUE_IS_INLINE 0x01
82 #define BL_FS_REGISTER_AT_HEAD_FLAG 1
84 #define BL_BLOCK_DEVICE_REMOVABLE_FLAG 0x01
86 #define BL_MEMORY_CLASS_SHIFT 28
88 /* ENUMERATIONS **************************************************************/
90 typedef enum _BL_COLOR
108 } BL_COLOR
, *PBL_COLOR
;
110 typedef enum _BL_MEMORY_DESCRIPTOR_TYPE
114 } BL_MEMORY_DESCRIPTOR_TYPE
;
116 typedef enum _BL_TRANSLATION_TYPE
122 } BL_TRANSLATION_TYPE
;
124 typedef enum _BL_ARCH_MODE
133 typedef enum _BL_DEVICE_TYPE
136 LegacyPartitionDevice
= 2,
145 // Local Device Types
147 typedef enum _BL_LOCAL_DEVICE_TYPE
154 VirtualDiskDevice
= 6
155 } BL_LOCAL_DEVICE_TYPE
;
160 typedef enum _BL_PARTITION_TYPE
170 typedef enum _BL_PATH_TYPE
178 typedef enum _BL_MEMORY_CLASS
188 typedef enum _BL_MEMORY_TYPE
193 BlLoaderMemory
= 0xD0000002,
194 BlLoaderDeviceMemory
= 0xD0000004,
195 BlLoaderHeap
= 0xD0000005,
196 BlLoaderPageDirectory
= 0xD0000006,
197 BlLoaderReferencePage
= 0xD0000007,
198 BlLoaderRamDisk
= 0xD0000008,
199 BlLoaderData
= 0xD000000A,
200 BlLoaderBlockMemory
= 0xD000000C,
201 BlLoaderSelfMap
= 0xD000000F,
204 // Application Memory
206 BlApplicationData
= 0xE0000004,
211 BlConventionalMemory
= 0xF0000001,
212 BlUnusableMemory
= 0xF0000002,
213 BlReservedMemory
= 0xF0000003,
214 BlEfiBootMemory
= 0xF0000004,
215 BlEfiRuntimeMemory
= 0xF0000006,
216 BlAcpiReclaimMemory
= 0xF0000008,
217 BlAcpiNvsMemory
= 0xF0000009,
218 BlDeviceIoMemory
= 0xF000000A,
219 BlDevicePortMemory
= 0xF000000B,
220 BlPalMemory
= 0xF000000C,
223 typedef enum _BL_MEMORY_ATTR
226 // Memory Caching Attributes
228 BlMemoryUncached
= 0x00000001,
229 BlMemoryWriteCombined
= 0x00000002,
230 BlMemoryWriteThrough
= 0x00000004,
231 BlMemoryWriteBack
= 0x00000008,
232 BlMemoryUncachedExported
= 0x00000010,
233 BlMemoryValidCacheAttributes
= BlMemoryUncached
| BlMemoryWriteCombined
| BlMemoryWriteThrough
| BlMemoryWriteBack
| BlMemoryUncachedExported
,
234 BlMemoryValidCacheAttributeMask
= 0x000000FF,
237 // Memory Protection Attributes
239 BlMemoryWriteProtected
= 0x00000100,
240 BlMemoryReadProtected
= 0x00000200,
241 BlMemoryExecuteProtected
= 0x00000400,
242 BlMemoryValidProtectionAttributes
= BlMemoryWriteProtected
| BlMemoryReadProtected
| BlMemoryExecuteProtected
,
243 BlMemoryValidProtectionAttributeMask
= 0x0000FF00,
246 // Memory Allocation Attributes
248 BlMemoryNonFixed
= 0x00020000,
249 BlMemoryFixed
= 0x00040000,
250 BlMemoryValidAllocationAttributes
= BlMemoryNonFixed
| BlMemoryFixed
,
251 BlMemoryValidAllocationAttributeMask
= 0x00FF0000,
254 // Memory Type Attributes
256 BlMemoryRuntime
= 0x01000000,
257 BlMemoryCoalesced
= 0x02000000,
258 BlMemoryUpdate
= 0x04000000,
259 BlMemoryNonFirmware
= 0x08000000,
260 BlMemorySpecial
= 0x20000000,
261 BlMemoryFirmware
= 0x80000000,
262 BlMemoryValidTypeAttributes
= BlMemoryRuntime
| BlMemoryCoalesced
| BlMemoryUpdate
| BlMemoryNonFirmware
| BlMemorySpecial
| BlMemoryFirmware
,
263 BlMemoryValidTypeAttributeMask
= 0xFF000000,
266 /* CALLBACKS *****************************************************************/
268 struct _BL_FILE_ENTRY
;
272 _In_
struct _BL_FILE_ENTRY
* ParentFileEntry
,
273 _In_ PWCHAR FileName
,
274 _In_ ULONG OpenFlags
,
275 _Out_
struct _BL_FILE_ENTRY
** FileEntry
281 _In_
struct _BL_FILE_ENTRY
* FileEntry
298 (*PBL_FILE_GET_NEXT
) (
304 (*PBL_FILE_GET_INFO
) (
310 (*PBL_FILE_SET_INFO
) (
316 (*PBL_FS_INIT_CALLBACK
) (
322 (*PBL_FS_DESTROY_CALLBACK
) (
328 (*PBL_FS_MOUNT_CALLBACK
) (
331 _Out_
struct _BL_FILE_ENTRY
** FileEntry
336 (*PBL_FS_PURGE_CALLBACK
) (
342 (*PBL_FILE_DESTROY_CALLBACK
) (
346 struct _BL_TEXT_CONSOLE
;
347 struct _BL_DISPLAY_STATE
;
350 (*PCONSOLE_DESTRUCT
) (
351 _In_
struct _BL_TEXT_CONSOLE
* Console
356 (*PCONSOLE_REINITIALIZE
) (
357 _In_
struct _BL_TEXT_CONSOLE
* Console
362 (*PCONSOLE_GET_TEXT_STATE
) (
363 _In_
struct _BL_TEXT_CONSOLE
* Console
,
364 _Out_
struct _BL_DISPLAY_STATE
* TextState
369 (*PCONSOLE_SET_TEXT_STATE
) (
370 _In_
struct _BL_TEXT_CONSOLE
* Console
,
372 _In_
struct _BL_DISPLAY_STATE
* TextState
377 (*PCONSOLE_GET_TEXT_RESOLUTION
) (
378 _In_
struct _BL_TEXT_CONSOLE
* Console
,
379 _Out_ PULONG TextResolution
384 (*PCONSOLE_SET_TEXT_RESOLUTION
) (
385 _In_
struct _BL_TEXT_CONSOLE
* Console
,
386 _In_ ULONG NewTextResolution
,
387 _Out_ PULONG OldTextResolution
392 (*PCONSOLE_CLEAR_TEXT
) (
393 _In_
struct _BL_TEXT_CONSOLE
* Console
,
399 (*PCONSOLE_WRITE_TEXT
) (
400 _In_
struct _BL_TEXT_CONSOLE
* Console
,
407 (*PBL_TBL_LOOKUP_ROUTINE
) (
409 _In_ PVOID Argument1
,
410 _In_ PVOID Argument2
,
411 _In_ PVOID Argument3
,
417 (*PBL_TBL_MAP_ROUTINE
) (
419 _In_ ULONG EntryIndex
424 (*PBL_TBL_SET_ROUTINE
) (
430 (*PBL_IO_DESTROY_ROUTINE
) (
434 struct _BL_HASH_ENTRY
;
437 (*PBL_HASH_TABLE_COMPARE_FUNCTION
) (
438 _In_
struct _BL_HASH_ENTRY
* Entry1
,
439 _In_
struct _BL_HASH_ENTRY
* Entry2
444 (*PBL_HASH_TABLE_HASH_FUNCTION
) (
445 _In_
struct _BL_HASH_ENTRY
* Entry
,
449 struct _BL_DEVICE_ENTRY
;
450 struct _BL_DEVICE_DESCRIPTOR
;
451 struct _BL_DEVICE_INFORMATION
;
455 (*PBL_DEVICE_ENUMERATE_DEVICE_CLASS
) (
462 _In_
struct _BL_DEVICE_DESCRIPTOR
* Device
,
463 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
468 (*PBL_DEVICE_CLOSE
) (
469 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
480 (*PBL_DEVICE_WRITE
) (
486 (*PBL_DEVICE_GET_INFORMATION
) (
487 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
488 _Out_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
493 (*PBL_DEVICE_SET_INFORMATION
) (
499 (*PBL_DEVICE_RESET
) (
505 (*PBL_DEVICE_FLUSH
) (
511 (*PBL_DEVICE_CREATE
) (
516 /* DATA STRUCTURES ***********************************************************/
518 typedef struct _BL_LIBRARY_PARAMETERS
521 ULONG TranslationType
;
522 ULONG MinimumAllocationCount
;
523 ULONG MinimumHeapSize
;
524 ULONG HeapAllocationAttributes
;
525 PWCHAR ApplicationBaseDirectory
;
526 ULONG DescriptorCount
;
527 PWCHAR FontBaseDirectory
;
528 } BL_LIBRARY_PARAMETERS
, *PBL_LIBRARY_PARAMETERS
;
530 /* This should eventually go into a more public header */
531 typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK
533 /* This header tells the library what image we're dealing with */
538 ULONG MemoryTranslationType
;
540 /* Where is the image located */
544 /* Offset to BL_MEMORY_DATA */
545 ULONG MemoryDataOffset
;
547 /* Offset to BL_APPLICATION_ENTRY */
548 ULONG AppEntryOffset
;
550 /* Offset to BL_DEVICE_DESCRPIPTOR */
551 ULONG BootDeviceOffset
;
553 /* Offset to BL_FIRMWARE_PARAMETERS */
554 ULONG FirmwareParametersOffset
;
556 /* Offset to BL_RETURN_ARGUMENTS */
557 ULONG ReturnArgumentsOffset
;
558 } BOOT_APPLICATION_PARAMETER_BLOCK
, *PBOOT_APPLICATION_PARAMETER_BLOCK
;
560 typedef struct _BL_MEMORY_DATA
564 ULONG DescriptorCount
;
565 ULONG DescriptorSize
;
566 ULONG DescriptorOffset
;
567 } BL_MEMORY_DATA
, *PBL_MEMORY_DATA
;
569 typedef struct _BL_FIRMWARE_DESCRIPTOR
573 EFI_HANDLE ImageHandle
;
574 EFI_SYSTEM_TABLE
*SystemTable
;
575 } BL_FIRMWARE_DESCRIPTOR
, *PBL_FIRMWARE_DESCRIPTOR
;
577 typedef struct _BL_RETURN_ARGUMENTS
581 ULONG ReturnArgumentData
[5];
582 } BL_RETURN_ARGUMENTS
, *PBL_RETURN_ARGUMENTS
;
584 typedef struct _BL_MEMORY_DESCRIPTOR
586 LIST_ENTRY ListEntry
;
592 ULONGLONG VirtualPage
;
596 ULONGLONG BaseAddress
;
597 ULONGLONG VirtualAddress
;
603 } BL_MEMORY_DESCRIPTOR
, *PBL_MEMORY_DESCRIPTOR
;
605 typedef struct _BL_BCD_OPTION
611 ULONG NextEntryOffset
;
613 } BL_BCD_OPTION
, *PBL_BCD_OPTION
;
615 typedef struct _BL_APPLICATION_ENTRY
621 BL_BCD_OPTION BcdData
;
622 } BL_APPLICATION_ENTRY
, *PBL_APPLICATION_ENTRY
;
624 typedef struct _BL_LOADED_APPLICATION_ENTRY
628 PBL_BCD_OPTION BcdData
;
629 } BL_LOADED_APPLICATION_ENTRY
, *PBL_LOADED_APPLICATION_ENTRY
;
631 typedef struct _BL_HARDDISK_DEVICE
638 ULONG PartitionSignature
;
643 GUID PartitionSignature
;
651 } BL_HARDDISK_DEVICE
;
653 typedef struct _BL_LOCAL_DEVICE
663 BL_HARDDISK_DEVICE HardDisk
;
667 PHYSICAL_ADDRESS ImageBase
;
668 LARGE_INTEGER ImageSize
;
674 typedef struct _BL_DEVICE_DESCRIPTOR
678 DEVICE_TYPE DeviceType
;
682 BL_LOCAL_DEVICE Local
;
693 ULONG PartitionNumber
;
701 BL_LOCAL_DEVICE Disk
;
704 } BL_DEVICE_DESCRIPTOR
, *PBL_DEVICE_DESCRIPTOR
;
706 typedef struct _BL_FILE_PATH_DESCRIPTOR
711 UCHAR Path
[ANYSIZE_ARRAY
];
712 } BL_FILE_PATH_DESCRIPTOR
, *PBL_FILE_PATH_DESCRIPTOR
;
714 typedef struct _BL_WINDOWS_LOAD_OPTIONS
720 WCHAR LoadOptions
[ANYSIZE_ARRAY
];
721 } BL_WINDOWS_LOAD_OPTIONS
, *PBL_WINDOWS_LOAD_OPTIONS
;
723 typedef struct _BL_ARCH_CONTEXT
726 BL_TRANSLATION_TYPE TranslationType
;
728 } BL_ARCH_CONTEXT
, *PBL_ARCH_CONTEXT
;
730 typedef struct _BL_MEMORY_DESCRIPTOR_LIST
736 } BL_MEMORY_DESCRIPTOR_LIST
, *PBL_MEMORY_DESCRIPTOR_LIST
;
738 typedef struct _BL_ADDRESS_RANGE
742 } BL_ADDRESS_RANGE
, *PBL_ADDRESS_RANGE
;
744 typedef struct _BL_FILE_CALLBACKS
747 PBL_FILE_CLOSE Close
;
749 PBL_FILE_WRITE Write
;
750 PBL_FILE_GET_NEXT GetNext
;
751 PBL_FILE_GET_INFO GetInfo
;
752 PBL_FILE_SET_INFO SetInfo
;
753 } BL_FILE_CALLBACKS
, *PBL_FILE_CALLBACKS
;
755 typedef struct _BL_FILE_ENTRY
757 ULONG ReferenceCount
;
765 BL_FILE_CALLBACKS Callbacks
;
766 PBL_FILE_DESTROY_CALLBACK DestroyCallback
;
767 } BL_FILE_ENTRY
, *PBL_FILE_ENTRY
;
769 typedef struct _BL_FILE_SYSTEM_ENTRY
771 LIST_ENTRY ListEntry
;
772 PBL_FS_INIT_CALLBACK InitCallback
;
773 PBL_FS_DESTROY_CALLBACK DestroyCallback
;
774 PBL_FS_MOUNT_CALLBACK MountCallback
;
775 PBL_FS_PURGE_CALLBACK PurgeCallback
;
776 } BL_FILE_SYSTEM_ENTRY
, *PBL_FILE_SYSTEM_ENTRY
;
778 typedef struct _BL_FILE_SYSTEM_REGISTRATION_TABLE
780 PBL_FS_INIT_CALLBACK Init
;
781 PBL_FS_DESTROY_CALLBACK Destroy
;
782 PBL_FS_MOUNT_CALLBACK Mount
;
783 PBL_FS_PURGE_CALLBACK Purge
;
784 } BL_FILE_SYSTEM_REGISTRATION_TABLE
;
786 typedef struct _BL_DISPLAY_STATE
793 } BL_DISPLAY_STATE
, *PBL_DISPLAY_STATE
;
795 typedef struct _BL_DISPLAY_MODE
800 } BL_DISPLAY_MODE
, *PBL_DISPLAY_MODE
;
802 typedef struct _BL_TEXT_CONSOLE_VTABLE
804 PCONSOLE_DESTRUCT Destruct
;
805 PCONSOLE_REINITIALIZE Reinitialize
;
806 PCONSOLE_GET_TEXT_STATE GetTextState
;
807 PCONSOLE_SET_TEXT_STATE SetTextState
;
808 PCONSOLE_GET_TEXT_RESOLUTION GetTextResolution
;
809 PCONSOLE_SET_TEXT_RESOLUTION SetTextResolution
;
810 PCONSOLE_CLEAR_TEXT ClearText
;
811 PCONSOLE_WRITE_TEXT WriteText
;
812 } BL_TEXT_CONSOLE_VTABLE
, *PBL_TEXT_CONSOLE_VTABLE
;
814 typedef struct _BL_GRAPHICS_CONSOLE_VTABLE
816 BL_TEXT_CONSOLE_VTABLE Text
;
817 /// more for graphics ///
818 } BL_GRAPHICS_CONSOLE_VTABLE
, *PBL_GRAPHICS_CONSOLE_VTABLE
;
820 typedef struct _BL_TEXT_CONSOLE
822 PBL_TEXT_CONSOLE_VTABLE Callbacks
;
823 BL_DISPLAY_STATE State
;
824 BL_DISPLAY_MODE DisplayMode
;
826 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
* Protocol
;
828 EFI_SIMPLE_TEXT_OUTPUT_MODE OldMode
;
829 } BL_TEXT_CONSOLE
, *PBL_TEXT_CONSOLE
;
831 typedef enum _BL_GRAPHICS_CONSOLE_TYPE
835 } BL_GRAPHICS_CONSOLE_TYPE
;
837 typedef struct _BL_GRAPHICS_CONSOLE
839 BL_TEXT_CONSOLE TextConsole
;
840 BL_DISPLAY_MODE DisplayMode
;
844 BL_DISPLAY_MODE OldDisplayMode
;
847 BL_GRAPHICS_CONSOLE_TYPE Type
;
848 EFI_GRAPHICS_OUTPUT_PROTOCOL
* Protocol
;
850 ULONG FrameBufferSize
;
851 ULONG PixelsPerScanLine
;
854 } BL_GRAPHICS_CONSOLE
, *PBL_GRAPHICS_CONSOLE
;
856 typedef struct _BL_REMOTE_CONSOLE
858 BL_TEXT_CONSOLE TextConsole
;
859 } BL_REMOTE_CONSOLE
, *PBL_REMOTE_CONSOLE
;
861 typedef struct _BL_HASH_TABLE
863 PLIST_ENTRY HashLinks
;
865 PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
;
866 PBL_HASH_TABLE_HASH_FUNCTION HashFunction
;
867 } BL_HASH_TABLE
, *PBL_HASH_TABLE
;
869 typedef struct _BL_HASH_ENTRY
874 } BL_HASH_ENTRY
, *PBL_HASH_ENTRY
;
876 typedef struct _BL_HASH_VALUE
880 } BL_HASH_VALUE
, *PBL_HASH_VALUE
;
882 typedef struct _BL_HASH_NODE
884 LIST_ENTRY ListEntry
;
887 } BL_HASH_NODE
, *PBL_HASH_NODE
;
889 typedef struct _BL_BLOCK_DEVICE_INFORMATION
891 BL_LOCAL_DEVICE_TYPE Type
;
894 BL_PARTITION_TYPE PartitionType
;
911 } BL_BLOCK_DEVICE_INFORMATION
, *PBL_BLOCK_DEVICE_INFORMATION
;
913 typedef struct _BL_DEVICE_INFORMATION
915 BL_DEVICE_TYPE DeviceType
;
918 BL_BLOCK_DEVICE_INFORMATION BlockDeviceInfo
;
920 } BL_DEVICE_INFORMATION
, *PBL_DEVICE_INFORMATION
;
922 typedef struct _BL_BLOCK_DEVICE
924 BL_BLOCK_DEVICE_INFORMATION
;
926 EFI_BLOCK_IO
* Protocol
;
928 } BL_BLOCK_DEVICE
, *PBL_BLOCK_DEVICE
;
930 typedef struct _BL_PROTOCOL_HANDLE
934 } BL_PROTOCOL_HANDLE
, *PBL_PROTOCOL_HANDLE
;
936 typedef struct _BL_DEVICE_CALLBACKS
938 PBL_DEVICE_ENUMERATE_DEVICE_CLASS EnumerateDeviceClass
;
939 PBL_DEVICE_OPEN Open
;
940 PBL_DEVICE_CLOSE Close
;
941 PBL_DEVICE_READ Read
;
942 PBL_DEVICE_WRITE Write
;
943 PBL_DEVICE_GET_INFORMATION GetInformation
;
944 PBL_DEVICE_SET_INFORMATION SetInformation
;
945 PBL_DEVICE_RESET Reset
;
946 PBL_DEVICE_FLUSH Flush
;
947 PBL_DEVICE_CREATE Create
;
948 } BL_DEVICE_CALLBACKS
, *PBL_DEVICE_CALLBACKS
;
950 typedef struct _BL_DEVICE_ENTRY
955 ULONG ReferenceCount
;
956 BL_DEVICE_CALLBACKS Callbacks
;
957 PVOID DeviceSpecificData
;
958 PBL_DEVICE_DESCRIPTOR DeviceDescriptor
;
959 } BL_DEVICE_ENTRY
, *PBL_DEVICE_ENTRY
;
961 /* INLINE ROUTINES ***********************************************************/
965 BlSetupDefaultParameters (
966 _Out_ PBL_LIBRARY_PARAMETERS LibraryParameters
969 BL_LIBRARY_PARAMETERS DefaultParameters
=
981 /* Copy the defaults */
982 RtlCopyMemory(LibraryParameters
, &DefaultParameters
, sizeof(*LibraryParameters
));
987 MmMdInitializeListHead (
988 _In_ PBL_MEMORY_DESCRIPTOR_LIST List
991 /* Initialize the list */
992 InitializeListHead(&List
->ListHead
);
993 List
->First
= &List
->ListHead
;
997 /* INITIALIZATION ROUTINES ***************************************************/
1000 BlInitializeLibrary(
1001 _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters
,
1002 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1013 _In_ PBL_FIRMWARE_DESCRIPTOR FirmwareParameters
1018 _In_ PBL_MEMORY_DATA MemoryData
,
1019 _In_ BL_TRANSLATION_TYPE TranslationType
,
1020 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1030 _In_ PBL_MEMORY_DATA MemoryData
,
1031 _In_ ULONG MinimumPages
1037 _In_ PBL_MEMORY_DATA MemoryData
,
1038 _In_ BL_TRANSLATION_TYPE TranslationType
,
1039 _In_ BL_TRANSLATION_TYPE LibraryTranslationType
1044 _In_ ULONG HeapSize
,
1045 _In_ ULONG HeapAttributes
1051 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1055 BlpDeviceInitialize (
1070 BlpDisplayInitialize (
1084 /* FIRMWARE ROUTINES *********************************************************/
1096 _Inout_ EFI_PHYSICAL_ADDRESS
* Memory
1101 _In_ ULONG StallTime
1105 EfiConOutQueryMode (
1106 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1108 _In_ UINTN
* Columns
,
1114 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1119 EfiConOutReadCurrentMode (
1120 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1121 _Out_ EFI_SIMPLE_TEXT_OUTPUT_MODE
* Mode
1125 EfiConOutSetAttribute (
1126 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1127 _In_ ULONG Attribute
1131 EfiConOutSetCursorPosition (
1132 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1138 EfiConOutEnableCursor (
1139 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1140 _In_ BOOLEAN Visible
1144 EfiLocateHandleBuffer (
1145 _In_ EFI_LOCATE_SEARCH_TYPE SearchType
,
1146 _In_ EFI_GUID
*Protocol
,
1147 _Inout_ PULONG HandleCount
,
1148 _Inout_ EFI_HANDLE
** Buffer
1153 _In_ EFI_HANDLE Handle
,
1154 _In_ EFI_GUID
*Protocol
,
1155 _Out_ PVOID
* Interface
1160 _In_ EFI_HANDLE Handle
,
1161 _In_ EFI_GUID
*Protocol
1165 EfiGopGetCurrentMode (
1166 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1168 _Out_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
*Information
1173 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1178 EfiGopGetFrameBuffer (
1179 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1180 _Out_ PHYSICAL_ADDRESS
* FrameBuffer
,
1181 _Out_ UINTN
*FrameBufferSize
1186 _In_ EFI_RESET_TYPE ResetType
1191 _In_ EFI_DEVICE_PATH
*DevicePath
1195 EfiIsDevicePathParent (
1196 _In_ EFI_DEVICE_PATH
*DevicePath1
,
1197 _In_ EFI_DEVICE_PATH
*DevicePath2
1200 /* PLATFORM TIMER ROUTINES ***************************************************/
1203 BlpTimeCalibratePerformanceCounter (
1207 /* FILESYSTEM ROUTINES *******************************************************/
1216 _In_ ULONG DeviceId
,
1218 _Out_ PBL_FILE_ENTRY
* FileEntry
1221 /* UTILITY ROUTINES **********************************************************/
1224 EfiGetEfiStatusCode(
1225 _In_ NTSTATUS Status
1229 EfiGetNtStatusCode (
1230 _In_ EFI_STATUS EfiStatus
1244 BlGetApplicationIdentifier (
1248 /* TABLE ROUTINES ************************************************************/
1254 _In_ PBL_TBL_MAP_ROUTINE MapCallback
1261 _Out_ PULONG EntryIndex
,
1262 _In_ PBL_TBL_LOOKUP_ROUTINE Callback
,
1263 _In_ PVOID Argument1
,
1264 _In_ PVOID Argument2
,
1265 _In_ PVOID Argument3
,
1266 _In_ PVOID Argument4
1271 _Inout_ PVOID
** Table
,
1272 _Inout_ PULONG Count
,
1274 _Out_ PULONG EntryIndex
,
1275 _In_ PBL_TBL_SET_ROUTINE Callback
1279 TblDoNotPurgeEntry (
1283 /* HASH TABLE ROUTINES *******************************************************/
1288 _In_ PBL_HASH_ENTRY Entry
,
1296 _In_ PBL_HASH_ENTRY Entry
,
1297 _Out_ PBL_HASH_VALUE
*Value
1303 _In_ PBL_HASH_TABLE_HASH_FUNCTION HashFunction
,
1304 _In_ PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
,
1308 /* BCD ROUTINES **************************************************************/
1311 BlGetBootOptionSize (
1312 _In_ PBL_BCD_OPTION BcdOption
1316 BlGetBootOptionString (
1317 _In_ PBL_BCD_OPTION List
,
1323 BlGetBootOptionInteger (
1324 _In_ PBL_BCD_OPTION List
,
1326 _Out_ PULONGLONG Value
1330 BlGetBootOptionBoolean (
1331 _In_ PBL_BCD_OPTION List
,
1333 _Out_ PBOOLEAN Value
1336 /* CONTEXT ROUTINES **********************************************************/
1339 BlpArchSwitchContext (
1340 _In_ BL_ARCH_MODE NewMode
1343 /* MEMORY DESCRIPTOR ROUTINES ************************************************/
1347 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
1350 PBL_MEMORY_DESCRIPTOR
1351 MmMdInitByteGranularDescriptor (
1353 _In_ BL_MEMORY_TYPE Type
,
1354 _In_ ULONGLONG BasePage
,
1355 _In_ ULONGLONG VirtualPage
,
1356 _In_ ULONGLONG PageCount
1360 MmMdFreeGlobalDescriptors (
1365 MmMdAddDescriptorToList (
1366 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1367 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
,
1372 MmMdRemoveDescriptorFromList (
1373 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1374 _In_ PBL_MEMORY_DESCRIPTOR Entry
1378 MmMdFindSatisfyingRegion (
1379 _In_ PBL_MEMORY_DESCRIPTOR Descriptor
,
1380 _Out_ PBL_MEMORY_DESCRIPTOR NewDescriptor
,
1381 _In_ ULONGLONG Pages
,
1382 _In_ PBL_ADDRESS_RANGE BaseRange
,
1383 _In_ PBL_ADDRESS_RANGE VirtualRange
,
1384 _In_ BOOLEAN TopDown
,
1385 _In_ BL_MEMORY_TYPE MemoryType
,
1387 _In_ ULONG Alignment
1391 MmMdRemoveRegionFromMdlEx (
1392 __in PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1394 __in ULONGLONG BasePage
,
1395 __in ULONGLONG PageCount
,
1396 __in PBL_MEMORY_DESCRIPTOR_LIST NewMdList
1400 MmMdFreeDescriptor (
1401 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
1404 /* PAGE ALLOCATOR ROUTINES ***************************************************/
1407 MmPapAllocatePagesInRange (
1408 _Inout_ PVOID
* PhysicalAddress
,
1409 _In_ BL_MEMORY_TYPE MemoryType
,
1410 _In_ ULONGLONG Pages
,
1411 _In_ ULONG Attributes
,
1412 _In_ ULONG Alignment
,
1413 _In_opt_ PBL_ADDRESS_RANGE Range
,
1419 _Out_ PBL_MEMORY_DESCRIPTOR_LIST MemoryMap
,
1423 /* VIRTUAL MEMORY ROUTINES ***************************************************/
1426 BlMmMapPhysicalAddressEx (
1427 _In_ PVOID
* VirtualAddress
,
1428 _In_ ULONG Attributes
,
1429 _In_ ULONGLONG Size
,
1430 _In_ PHYSICAL_ADDRESS PhysicalAddress
1433 /* BLOCK ALLOCATOR ROUTINES **************************************************/
1436 BlpMmCreateBlockAllocator (
1440 /* HEAP ALLOCATOR ROUTINES ***************************************************/
1452 /* DISPLAY ROUTINES **********************************************************/
1455 BlDisplayGetTextCellResolution (
1456 _Out_ PULONG TextWidth
,
1457 _Out_ PULONG TextHeight
1460 /* I/O ROUTINES **************************************************************/
1463 BlpIoRegisterDestroyRoutine (
1464 _In_ PBL_IO_DESTROY_ROUTINE DestroyRoutine
1474 _In_ PBL_DEVICE_DESCRIPTOR Device
,
1477 _Out_ PULONG DeviceId
1481 BlDeviceGetInformation (
1482 _In_ ULONG DeviceId
,
1483 _Out_ PBL_DEVICE_INFORMATION DeviceInformation
1486 /* FILE I/O ROUTINES *********************************************************/
1495 _In_ ULONG DeviceId
,
1496 _In_ PWCHAR FileName
,
1497 _In_ ULONG OpenFlags
,
1501 /* TEXT CONSOLE ROUTINES *****************************************************/
1504 ConsoleTextLocalDestruct (
1505 _In_
struct _BL_TEXT_CONSOLE
* Console
1509 ConsoleTextLocalReinitialize (
1510 _In_
struct _BL_TEXT_CONSOLE
* Console
1514 ConsoleTextBaseGetTextState (
1515 _In_
struct _BL_TEXT_CONSOLE
* Console
,
1516 _Out_ PBL_DISPLAY_STATE TextState
1520 ConsoleTextLocalSetTextState (
1521 _In_
struct _BL_TEXT_CONSOLE
* Console
,
1523 _In_ PBL_DISPLAY_STATE TextState
1527 ConsoleTextBaseGetTextResolution (
1528 _In_
struct _BL_TEXT_CONSOLE
* Console
,
1529 _Out_ PULONG TextResolution
1533 ConsoleTextLocalSetTextResolution (
1534 _In_
struct _BL_TEXT_CONSOLE
* Console
,
1535 _In_ ULONG NewTextResolution
,
1536 _Out_ PULONG OldTextResolution
1540 ConsoleTextLocalClearText (
1541 _In_
struct _BL_TEXT_CONSOLE
* Console
,
1542 _In_ ULONG Attribute
1546 ConsoleTextLocalWriteText (
1547 _In_
struct _BL_TEXT_CONSOLE
* Console
,
1549 _In_ ULONG Attribute
1553 ConsoleTextLocalConstruct (
1554 _In_ PBL_TEXT_CONSOLE TextConsole
,
1555 _In_ BOOLEAN Activate
1559 ConsolepFindResolution (
1560 _In_ PBL_DISPLAY_MODE Mode
,
1561 _In_ PBL_DISPLAY_MODE List
,
1566 ConsoleFirmwareTextClose (
1567 _In_ PBL_TEXT_CONSOLE TextConsole
1571 ConsoleFirmwareTextOpen (
1572 _In_ PBL_TEXT_CONSOLE TextConsole
1576 ConsoleFirmwareTextSetState (
1577 _In_ PBL_TEXT_CONSOLE TextConsole
,
1579 _In_ PBL_DISPLAY_STATE State
1583 ConsoleGraphicalConstruct (
1584 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1588 ConsoleCreateRemoteConsole (
1589 _In_ PBL_TEXT_CONSOLE
* TextConsole
1593 ConsoleEfiGraphicalOpenProtocol (
1594 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
1595 _In_ BL_GRAPHICS_CONSOLE_TYPE Type
1599 ConsoleFirmwareGraphicalClose (
1600 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1604 ConsoleFirmwareGraphicalEnable (
1605 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1610 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1614 ConsoleEfiUgaClose (
1615 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1619 ConsoleEfiGopClose (
1620 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1625 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1629 ConsoleEfiGopEnable (
1630 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1634 ConsoleEfiUgaSetResolution (
1635 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
1636 _In_ PBL_DISPLAY_MODE DisplayMode
,
1637 _In_ ULONG DisplayModeCount
1640 extern ULONG MmDescriptorCallTreeCount
;
1641 extern ULONG BlpApplicationFlags
;
1642 extern BL_LIBRARY_PARAMETERS BlpLibraryParameters
;
1643 extern BL_TRANSLATION_TYPE MmTranslationType
;
1644 extern PBL_ARCH_CONTEXT CurrentExecutionContext
;
1645 extern PBL_DEVICE_DESCRIPTOR BlpBootDevice
;
1646 extern BL_LOADED_APPLICATION_ENTRY BlpApplicationEntry
;
1647 extern SIMPLE_TEXT_OUTPUT_INTERFACE
*EfiConOut
;
1648 extern EFI_GUID EfiGraphicsOutputProtocol
;
1649 extern EFI_GUID EfiUgaDrawProtocol
;
1650 extern EFI_GUID EfiLoadedImageProtocol
;
1651 extern EFI_GUID EfiDevicePathProtocol
;
1652 extern EFI_GUID EfiBlockIoProtocol
;
1653 extern EFI_GUID EfiSimpleTextInputExProtocol
;
1654 extern ULONG ConsoleGraphicalResolutionListFlags
;
1655 extern BL_DISPLAY_MODE ConsoleGraphicalResolutionList
[];
1656 extern BL_DISPLAY_MODE ConsoleTextResolutionList
[];
1657 extern ULONG ConsoleGraphicalResolutionListSize
;
1658 extern PVOID DspRemoteInputConsole
;