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 *****************************************************************/
270 (*PBL_FS_INIT_CALLBACK
) (
276 (*PBL_FS_DESTROY_CALLBACK
) (
282 (*PBL_FS_MOUNT_CALLBACK
) (
288 (*PBL_FS_PURGE_CALLBACK
) (
294 (*PBL_FILE_DESTROY_CALLBACK
) (
298 struct _BL_TEXT_CONSOLE
;
299 struct _BL_DISPLAY_STATE
;
302 (*PCONSOLE_DESTRUCT
) (
303 _In_
struct _BL_TEXT_CONSOLE
* Console
308 (*PCONSOLE_REINITIALIZE
) (
309 _In_
struct _BL_TEXT_CONSOLE
* Console
314 (*PCONSOLE_GET_TEXT_STATE
) (
315 _In_
struct _BL_TEXT_CONSOLE
* Console
,
316 _Out_
struct _BL_DISPLAY_STATE
* TextState
321 (*PCONSOLE_SET_TEXT_STATE
) (
322 _In_
struct _BL_TEXT_CONSOLE
* Console
,
324 _In_
struct _BL_DISPLAY_STATE
* TextState
329 (*PCONSOLE_GET_TEXT_RESOLUTION
) (
330 _In_
struct _BL_TEXT_CONSOLE
* Console
,
331 _Out_ PULONG TextResolution
336 (*PCONSOLE_SET_TEXT_RESOLUTION
) (
337 _In_
struct _BL_TEXT_CONSOLE
* Console
,
338 _In_ ULONG NewTextResolution
,
339 _Out_ PULONG OldTextResolution
344 (*PCONSOLE_CLEAR_TEXT
) (
345 _In_
struct _BL_TEXT_CONSOLE
* Console
,
351 (*PCONSOLE_WRITE_TEXT
) (
352 _In_
struct _BL_TEXT_CONSOLE
* Console
,
359 (*PBL_TBL_LOOKUP_ROUTINE
) (
361 _In_ PVOID Argument1
,
362 _In_ PVOID Argument2
,
363 _In_ PVOID Argument3
,
369 (*PBL_TBL_MAP_ROUTINE
) (
371 _In_ ULONG EntryIndex
376 (*PBL_TBL_SET_ROUTINE
) (
382 (*PBL_IO_DESTROY_ROUTINE
) (
386 struct _BL_HASH_ENTRY
;
389 (*PBL_HASH_TABLE_COMPARE_FUNCTION
) (
390 _In_
struct _BL_HASH_ENTRY
* Entry1
,
391 _In_
struct _BL_HASH_ENTRY
* Entry2
396 (*PBL_HASH_TABLE_HASH_FUNCTION
) (
397 _In_
struct _BL_HASH_ENTRY
* Entry
,
401 /* DATA STRUCTURES ***********************************************************/
403 typedef struct _BL_LIBRARY_PARAMETERS
406 ULONG TranslationType
;
407 ULONG MinimumAllocationCount
;
408 ULONG MinimumHeapSize
;
409 ULONG HeapAllocationAttributes
;
410 PWCHAR ApplicationBaseDirectory
;
411 ULONG DescriptorCount
;
412 PWCHAR FontBaseDirectory
;
413 } BL_LIBRARY_PARAMETERS
, *PBL_LIBRARY_PARAMETERS
;
415 /* This should eventually go into a more public header */
416 typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK
418 /* This header tells the library what image we're dealing with */
423 ULONG MemoryTranslationType
;
425 /* Where is the image located */
429 /* Offset to BL_MEMORY_DATA */
430 ULONG MemoryDataOffset
;
432 /* Offset to BL_APPLICATION_ENTRY */
433 ULONG AppEntryOffset
;
435 /* Offset to BL_DEVICE_DESCRPIPTOR */
436 ULONG BootDeviceOffset
;
438 /* Offset to BL_FIRMWARE_PARAMETERS */
439 ULONG FirmwareParametersOffset
;
441 /* Offset to BL_RETURN_ARGUMENTS */
442 ULONG ReturnArgumentsOffset
;
443 } BOOT_APPLICATION_PARAMETER_BLOCK
, *PBOOT_APPLICATION_PARAMETER_BLOCK
;
445 typedef struct _BL_MEMORY_DATA
449 ULONG DescriptorCount
;
450 ULONG DescriptorSize
;
451 ULONG DescriptorOffset
;
452 } BL_MEMORY_DATA
, *PBL_MEMORY_DATA
;
454 typedef struct _BL_FIRMWARE_DESCRIPTOR
458 EFI_HANDLE ImageHandle
;
459 EFI_SYSTEM_TABLE
*SystemTable
;
460 } BL_FIRMWARE_DESCRIPTOR
, *PBL_FIRMWARE_DESCRIPTOR
;
462 typedef struct _BL_RETURN_ARGUMENTS
466 ULONG ReturnArgumentData
[5];
467 } BL_RETURN_ARGUMENTS
, *PBL_RETURN_ARGUMENTS
;
469 typedef struct _BL_MEMORY_DESCRIPTOR
471 LIST_ENTRY ListEntry
;
477 ULONGLONG VirtualPage
;
481 ULONGLONG BaseAddress
;
482 ULONGLONG VirtualAddress
;
488 } BL_MEMORY_DESCRIPTOR
, *PBL_MEMORY_DESCRIPTOR
;
490 typedef struct _BL_BCD_OPTION
496 ULONG NextEntryOffset
;
498 } BL_BCD_OPTION
, *PBL_BCD_OPTION
;
500 typedef struct _BL_APPLICATION_ENTRY
506 BL_BCD_OPTION BcdData
;
507 } BL_APPLICATION_ENTRY
, *PBL_APPLICATION_ENTRY
;
509 typedef struct _BL_HARDDISK_DEVICE
516 ULONG PartitionSignature
;
521 GUID PartitionSignature
;
529 } BL_HARDDISK_DEVICE
;
531 typedef struct _BL_LOCAL_DEVICE
541 BL_HARDDISK_DEVICE HardDisk
;
545 PHYSICAL_ADDRESS ImageBase
;
546 LARGE_INTEGER ImageSize
;
552 typedef struct _BL_DEVICE_DESCRIPTOR
556 DEVICE_TYPE DeviceType
;
560 BL_LOCAL_DEVICE Local
;
571 ULONG PartitionNumber
;
579 BL_LOCAL_DEVICE Disk
;
582 } BL_DEVICE_DESCRIPTOR
, *PBL_DEVICE_DESCRIPTOR
;
584 typedef struct _BL_FILE_PATH_DESCRIPTOR
589 UCHAR Path
[ANYSIZE_ARRAY
];
590 } BL_FILE_PATH_DESCRIPTOR
, *PBL_FILE_PATH_DESCRIPTOR
;
592 typedef struct _BL_WINDOWS_LOAD_OPTIONS
598 WCHAR LoadOptions
[ANYSIZE_ARRAY
];
599 } BL_WINDOWS_LOAD_OPTIONS
, *PBL_WINDOWS_LOAD_OPTIONS
;
601 typedef struct _BL_ARCH_CONTEXT
604 BL_TRANSLATION_TYPE TranslationType
;
606 } BL_ARCH_CONTEXT
, *PBL_ARCH_CONTEXT
;
608 typedef struct _BL_MEMORY_DESCRIPTOR_LIST
614 } BL_MEMORY_DESCRIPTOR_LIST
, *PBL_MEMORY_DESCRIPTOR_LIST
;
616 typedef struct _BL_ADDRESS_RANGE
620 } BL_ADDRESS_RANGE
, *PBL_ADDRESS_RANGE
;
622 typedef struct _BL_FILE_ENTRY
625 PBL_FILE_DESTROY_CALLBACK DestroyCallback
;
626 } BL_FILE_ENTRY
, *PBL_FILE_ENTRY
;
628 typedef struct _BL_FILE_SYSTEM_ENTRY
630 LIST_ENTRY ListEntry
;
631 PBL_FS_INIT_CALLBACK InitCallback
;
632 PBL_FS_DESTROY_CALLBACK DestroyCallback
;
633 PBL_FS_MOUNT_CALLBACK MountCallback
;
634 PBL_FS_PURGE_CALLBACK PurgeCallback
;
635 } BL_FILE_SYSTEM_ENTRY
, *PBL_FILE_SYSTEM_ENTRY
;
637 typedef struct _BL_FILE_SYSTEM_REGISTRATION_TABLE
639 PBL_FS_INIT_CALLBACK Init
;
640 PBL_FS_DESTROY_CALLBACK Destroy
;
641 PBL_FS_MOUNT_CALLBACK Mount
;
642 PBL_FS_PURGE_CALLBACK Purge
;
643 } BL_FILE_SYSTEM_REGISTRATION_TABLE
;
645 typedef struct _BL_DISPLAY_STATE
652 } BL_DISPLAY_STATE
, *PBL_DISPLAY_STATE
;
654 typedef struct _BL_DISPLAY_MODE
659 } BL_DISPLAY_MODE
, *PBL_DISPLAY_MODE
;
661 typedef struct _BL_TEXT_CONSOLE_VTABLE
663 PCONSOLE_DESTRUCT Destruct
;
664 PCONSOLE_REINITIALIZE Reinitialize
;
665 PCONSOLE_GET_TEXT_STATE GetTextState
;
666 PCONSOLE_SET_TEXT_STATE SetTextState
;
667 PCONSOLE_GET_TEXT_RESOLUTION GetTextResolution
;
668 PCONSOLE_SET_TEXT_RESOLUTION SetTextResolution
;
669 PCONSOLE_CLEAR_TEXT ClearText
;
670 PCONSOLE_WRITE_TEXT WriteText
;
671 } BL_TEXT_CONSOLE_VTABLE
, *PBL_TEXT_CONSOLE_VTABLE
;
673 typedef struct _BL_GRAPHICS_CONSOLE_VTABLE
675 BL_TEXT_CONSOLE_VTABLE Text
;
676 /// more for graphics ///
677 } BL_GRAPHICS_CONSOLE_VTABLE
, *PBL_GRAPHICS_CONSOLE_VTABLE
;
679 typedef struct _BL_TEXT_CONSOLE
681 PBL_TEXT_CONSOLE_VTABLE Callbacks
;
682 BL_DISPLAY_STATE State
;
683 BL_DISPLAY_MODE DisplayMode
;
685 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
* Protocol
;
687 EFI_SIMPLE_TEXT_OUTPUT_MODE OldMode
;
688 } BL_TEXT_CONSOLE
, *PBL_TEXT_CONSOLE
;
690 typedef enum _BL_GRAPHICS_CONSOLE_TYPE
694 } BL_GRAPHICS_CONSOLE_TYPE
;
696 typedef struct _BL_GRAPHICS_CONSOLE
698 BL_TEXT_CONSOLE TextConsole
;
699 BL_DISPLAY_MODE DisplayMode
;
703 BL_DISPLAY_MODE OldDisplayMode
;
706 BL_GRAPHICS_CONSOLE_TYPE Type
;
707 EFI_GRAPHICS_OUTPUT_PROTOCOL
* Protocol
;
709 ULONG FrameBufferSize
;
710 ULONG PixelsPerScanLine
;
713 } BL_GRAPHICS_CONSOLE
, *PBL_GRAPHICS_CONSOLE
;
715 typedef struct _BL_REMOTE_CONSOLE
717 BL_TEXT_CONSOLE TextConsole
;
718 } BL_REMOTE_CONSOLE
, *PBL_REMOTE_CONSOLE
;
720 typedef struct _BL_HASH_TABLE
722 PLIST_ENTRY HashLinks
;
724 PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
;
725 PBL_HASH_TABLE_HASH_FUNCTION HashFunction
;
726 } BL_HASH_TABLE
, *PBL_HASH_TABLE
;
728 typedef struct _BL_HASH_ENTRY
733 } BL_HASH_ENTRY
, *PBL_HASH_ENTRY
;
735 typedef struct _BL_HASH_VALUE
739 } BL_HASH_VALUE
, *PBL_HASH_VALUE
;
741 typedef struct _BL_HASH_NODE
743 LIST_ENTRY ListEntry
;
746 } BL_HASH_NODE
, *PBL_HASH_NODE
;
748 typedef struct _BL_BLOCK_DEVICE
750 BL_LOCAL_DEVICE_TYPE Type
;
753 BL_PARTITION_TYPE PartitionType
;
771 EFI_BLOCK_IO
* Protocol
;
773 } BL_BLOCK_DEVICE
, *PBL_BLOCK_DEVICE
;
775 typedef struct _BL_PROTOCOL_HANDLE
779 } BL_PROTOCOL_HANDLE
, *PBL_PROTOCOL_HANDLE
;
781 /* INLINE ROUTINES ***********************************************************/
785 BlSetupDefaultParameters (
786 _Out_ PBL_LIBRARY_PARAMETERS LibraryParameters
789 BL_LIBRARY_PARAMETERS DefaultParameters
=
801 /* Copy the defaults */
802 RtlCopyMemory(LibraryParameters
, &DefaultParameters
, sizeof(*LibraryParameters
));
807 MmMdInitializeListHead (
808 _In_ PBL_MEMORY_DESCRIPTOR_LIST List
811 /* Initialize the list */
812 InitializeListHead(&List
->ListHead
);
813 List
->First
= &List
->ListHead
;
817 /* INITIALIZATION ROUTINES ***************************************************/
821 _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters
,
822 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
833 _In_ PBL_FIRMWARE_DESCRIPTOR FirmwareParameters
838 _In_ PBL_MEMORY_DATA MemoryData
,
839 _In_ BL_TRANSLATION_TYPE TranslationType
,
840 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
850 _In_ PBL_MEMORY_DATA MemoryData
,
851 _In_ ULONG MinimumPages
857 _In_ PBL_MEMORY_DATA MemoryData
,
858 _In_ BL_TRANSLATION_TYPE TranslationType
,
859 _In_ BL_TRANSLATION_TYPE LibraryTranslationType
865 _In_ ULONG HeapAttributes
871 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
875 BlpDeviceInitialize (
895 BlpDisplayInitialize (
909 /* FIRMWARE ROUTINES *********************************************************/
921 _Inout_ EFI_PHYSICAL_ADDRESS
* Memory
931 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
939 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
944 EfiConOutReadCurrentMode (
945 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
946 _Out_ EFI_SIMPLE_TEXT_OUTPUT_MODE
* Mode
950 EfiConOutSetAttribute (
951 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
956 EfiConOutSetCursorPosition (
957 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
963 EfiConOutEnableCursor (
964 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
969 EfiLocateHandleBuffer (
970 _In_ EFI_LOCATE_SEARCH_TYPE SearchType
,
971 _In_ EFI_GUID
*Protocol
,
972 _Inout_ PULONG HandleCount
,
973 _Inout_ EFI_HANDLE
** Buffer
978 _In_ EFI_HANDLE Handle
,
979 _In_ EFI_GUID
*Protocol
,
980 _Out_ PVOID
* Interface
985 _In_ EFI_HANDLE Handle
,
986 _In_ EFI_GUID
*Protocol
990 EfiGopGetCurrentMode (
991 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
993 _Out_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
*Information
998 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1003 EfiGopGetFrameBuffer (
1004 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1005 _Out_ PHYSICAL_ADDRESS
* FrameBuffer
,
1006 _Out_ UINTN
*FrameBufferSize
1011 _In_ EFI_RESET_TYPE ResetType
1016 _In_ EFI_DEVICE_PATH
*DevicePath
1020 EfiIsDevicePathParent (
1021 _In_ EFI_DEVICE_PATH
*DevicePath1
,
1022 _In_ EFI_DEVICE_PATH
*DevicePath2
1025 /* PLATFORM TIMER ROUTINES ***************************************************/
1028 BlpTimeCalibratePerformanceCounter (
1032 /* UTILITY ROUTINES **********************************************************/
1035 EfiGetEfiStatusCode(
1036 _In_ NTSTATUS Status
1040 EfiGetNtStatusCode (
1041 _In_ EFI_STATUS EfiStatus
1055 BlGetApplicationIdentifier (
1059 /* TABLE ROUTINES ************************************************************/
1065 _In_ PBL_TBL_MAP_ROUTINE MapCallback
1072 _Out_ PULONG EntryIndex
,
1073 _In_ PBL_TBL_LOOKUP_ROUTINE Callback
,
1074 _In_ PVOID Argument1
,
1075 _In_ PVOID Argument2
,
1076 _In_ PVOID Argument3
,
1077 _In_ PVOID Argument4
1082 _Inout_ PVOID
** Table
,
1083 _Inout_ PULONG Count
,
1085 _Out_ PULONG EntryIndex
,
1086 _In_ PBL_TBL_SET_ROUTINE Callback
1090 TblDoNotPurgeEntry (
1094 /* HASH TABLE ROUTINES *******************************************************/
1099 _In_ PBL_HASH_ENTRY Entry
,
1107 _In_ PBL_HASH_ENTRY Entry
,
1108 _Out_ PBL_HASH_VALUE
*Value
1114 _In_ PBL_HASH_TABLE_HASH_FUNCTION HashFunction
,
1115 _In_ PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
,
1119 /* BCD ROUTINES **************************************************************/
1122 BlGetBootOptionSize (
1123 _In_ PBL_BCD_OPTION BcdOption
1126 /* CONTEXT ROUTINES **********************************************************/
1129 BlpArchSwitchContext (
1130 _In_ BL_ARCH_MODE NewMode
1133 /* MEMORY DESCRIPTOR ROUTINES ************************************************/
1137 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
1140 PBL_MEMORY_DESCRIPTOR
1141 MmMdInitByteGranularDescriptor (
1143 _In_ BL_MEMORY_TYPE Type
,
1144 _In_ ULONGLONG BasePage
,
1145 _In_ ULONGLONG VirtualPage
,
1146 _In_ ULONGLONG PageCount
1150 MmMdFreeGlobalDescriptors (
1155 MmMdAddDescriptorToList (
1156 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1157 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
,
1162 MmMdRemoveDescriptorFromList (
1163 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1164 _In_ PBL_MEMORY_DESCRIPTOR Entry
1168 MmMdFindSatisfyingRegion (
1169 _In_ PBL_MEMORY_DESCRIPTOR Descriptor
,
1170 _Out_ PBL_MEMORY_DESCRIPTOR NewDescriptor
,
1171 _In_ ULONGLONG Pages
,
1172 _In_ PBL_ADDRESS_RANGE BaseRange
,
1173 _In_ PBL_ADDRESS_RANGE VirtualRange
,
1174 _In_ BOOLEAN TopDown
,
1175 _In_ BL_MEMORY_TYPE MemoryType
,
1177 _In_ ULONG Alignment
1181 MmMdRemoveRegionFromMdlEx (
1182 __in PBL_MEMORY_DESCRIPTOR_LIST MdList
,
1184 __in ULONGLONG BasePage
,
1185 __in ULONGLONG PageCount
,
1186 __in PBL_MEMORY_DESCRIPTOR_LIST NewMdList
1190 MmMdFreeDescriptor (
1191 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
1194 /* PAGE ALLOCATOR ROUTINES ***************************************************/
1197 MmPapAllocatePagesInRange (
1198 _Inout_ PVOID
* PhysicalAddress
,
1199 _In_ BL_MEMORY_TYPE MemoryType
,
1200 _In_ ULONGLONG Pages
,
1201 _In_ ULONG Attributes
,
1202 _In_ ULONG Alignment
,
1203 _In_opt_ PBL_ADDRESS_RANGE Range
,
1209 _Out_ PBL_MEMORY_DESCRIPTOR_LIST MemoryMap
,
1213 /* VIRTUAL MEMORY ROUTINES ***************************************************/
1216 BlMmMapPhysicalAddressEx (
1217 _In_ PVOID
* VirtualAddress
,
1218 _In_ ULONG Attributes
,
1219 _In_ ULONGLONG Size
,
1220 _In_ PHYSICAL_ADDRESS PhysicalAddress
1223 /* BLOCK ALLOCATOR ROUTINES **************************************************/
1226 BlpMmCreateBlockAllocator (
1230 /* HEAP ALLOCATOR ROUTINES ***************************************************/
1242 /* DISPLAY ROUTINES **********************************************************/
1245 BlDisplayGetTextCellResolution (
1246 _Out_ PULONG TextWidth
,
1247 _Out_ PULONG TextHeight
1250 /* I/O ROUTINES **************************************************************/
1253 BlpIoRegisterDestroyRoutine (
1254 _In_ PBL_IO_DESTROY_ROUTINE DestroyRoutine
1264 _In_ PBL_DEVICE_DESCRIPTOR Device
,
1267 _Out_ PULONG DeviceId
1270 /* TEXT CONSOLE ROUTINES *****************************************************/
1273 ConsoleTextLocalDestruct (
1274 _In_
struct _BL_TEXT_CONSOLE
* Console
1278 ConsoleTextLocalReinitialize (
1279 _In_
struct _BL_TEXT_CONSOLE
* Console
1283 ConsoleTextBaseGetTextState (
1284 _In_
struct _BL_TEXT_CONSOLE
* Console
,
1285 _Out_ PBL_DISPLAY_STATE TextState
1289 ConsoleTextLocalSetTextState (
1290 _In_
struct _BL_TEXT_CONSOLE
* Console
,
1292 _In_ PBL_DISPLAY_STATE TextState
1296 ConsoleTextBaseGetTextResolution (
1297 _In_
struct _BL_TEXT_CONSOLE
* Console
,
1298 _Out_ PULONG TextResolution
1302 ConsoleTextLocalSetTextResolution (
1303 _In_
struct _BL_TEXT_CONSOLE
* Console
,
1304 _In_ ULONG NewTextResolution
,
1305 _Out_ PULONG OldTextResolution
1309 ConsoleTextLocalClearText (
1310 _In_
struct _BL_TEXT_CONSOLE
* Console
,
1311 _In_ ULONG Attribute
1315 ConsoleTextLocalWriteText (
1316 _In_
struct _BL_TEXT_CONSOLE
* Console
,
1318 _In_ ULONG Attribute
1322 ConsoleTextLocalConstruct (
1323 _In_ PBL_TEXT_CONSOLE TextConsole
,
1324 _In_ BOOLEAN Activate
1328 ConsolepFindResolution (
1329 _In_ PBL_DISPLAY_MODE Mode
,
1330 _In_ PBL_DISPLAY_MODE List
,
1335 ConsoleFirmwareTextClose (
1336 _In_ PBL_TEXT_CONSOLE TextConsole
1340 ConsoleFirmwareTextOpen (
1341 _In_ PBL_TEXT_CONSOLE TextConsole
1345 ConsoleFirmwareTextSetState (
1346 _In_ PBL_TEXT_CONSOLE TextConsole
,
1348 _In_ PBL_DISPLAY_STATE State
1352 ConsoleGraphicalConstruct (
1353 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1357 ConsoleCreateRemoteConsole (
1358 _In_ PBL_TEXT_CONSOLE
* TextConsole
1362 ConsoleEfiGraphicalOpenProtocol (
1363 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
1364 _In_ BL_GRAPHICS_CONSOLE_TYPE Type
1368 ConsoleFirmwareGraphicalClose (
1369 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1373 ConsoleFirmwareGraphicalEnable (
1374 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1379 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1383 ConsoleEfiUgaClose (
1384 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1388 ConsoleEfiGopClose (
1389 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1394 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1398 ConsoleEfiGopEnable (
1399 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
1403 ConsoleEfiUgaSetResolution (
1404 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
1405 _In_ PBL_DISPLAY_MODE DisplayMode
,
1406 _In_ ULONG DisplayModeCount
1409 extern ULONG MmDescriptorCallTreeCount
;
1410 extern ULONG BlpApplicationFlags
;
1411 extern BL_LIBRARY_PARAMETERS BlpLibraryParameters
;
1412 extern BL_TRANSLATION_TYPE MmTranslationType
;
1413 extern PBL_ARCH_CONTEXT CurrentExecutionContext
;
1414 extern PBL_DEVICE_DESCRIPTOR BlpBootDevice
;
1415 extern BL_APPLICATION_ENTRY BlpApplicationEntry
;
1416 extern SIMPLE_TEXT_OUTPUT_INTERFACE
*EfiConOut
;
1417 extern EFI_GUID EfiGraphicsOutputProtocol
;
1418 extern EFI_GUID EfiUgaDrawProtocol
;
1419 extern EFI_GUID EfiLoadedImageProtocol
;
1420 extern EFI_GUID EfiDevicePathProtocol
;
1421 extern EFI_GUID EfiBlockIoProtocol
;
1422 extern EFI_GUID EfiSimpleTextInputExProtocol
;
1423 extern ULONG ConsoleGraphicalResolutionListFlags
;
1424 extern BL_DISPLAY_MODE ConsoleGraphicalResolutionList
[];
1425 extern BL_DISPLAY_MODE ConsoleTextResolutionList
[];
1426 extern ULONG ConsoleGraphicalResolutionListSize
;
1427 extern PVOID DspRemoteInputConsole
;