[BOOTLIB]: Implement BlMmIsTranslationEnabled and MmMapPhysicalAddress. MmDefpMapPhys...
[reactos.git] / reactos / boot / environ / include / bl.h
index c78683e..cfdd687 100644 (file)
@@ -39,6 +39,7 @@
 #include <UgaDraw.h>
 #include <BlockIo.h>
 #include <Acpi.h>
+#include <GlobalVariable.h>
 
 /* Registry Headers */
 #define __FREELDR_H
@@ -46,6 +47,8 @@
 
 /* DEFINES *******************************************************************/
 
+DEFINE_GUID(BadMemoryGuid, 0x54B8275B, 0xD431, 0x473F, 0xAC, 0xFB, 0xE5, 0x36, 0xA0, 0x84, 0x94, 0xA3);
+
 #define BL_APPLICATION_FLAG_CONVERTED_FROM_EFI          0x01
 
 #define BL_APP_ENTRY_SIGNATURE                          "BTAPENT"
 #define BL_RETURN_ARGUMENTS_VERSION                     1
 #define BL_FIRMWARE_DESCRIPTOR_VERSION                  2
 
+#define BL_RETURN_ARGUMENTS_NO_PAE_FLAG                 0x40
+
 #define BL_APPLICATION_ENTRY_FLAG_NO_GUID               0x01
 #define BL_APPLICATION_ENTRY_BCD_OPTIONS_INTERNAL       0x02
+#define BL_APPLICATION_ENTRY_WINLOAD                    0x04
+#define BL_APPLICATION_ENTRY_STARTUP                    0x08
 #define BL_APPLICATION_ENTRY_REBOOT_ON_ERROR            0x20
+#define BL_APPLICATION_ENTRY_NTLDR                      0x40
 #define BL_APPLICATION_ENTRY_BCD_OPTIONS_EXTERNAL       0x80
+#define BL_APPLICATION_ENTRY_WINRESUME                  0x100
+#define BL_APPLICATION_ENTRY_SETUPLDR                   0x200
+#define BL_APPLICATION_ENTRY_BOOTSECTOR                 0x400
+#define BL_APPLICATION_ENTRY_BOOTMGR                    0x1000
+#define BL_APPLICATION_ENTRY_DISPLAY_ORDER              0x800000
+#define BL_APPLICATION_ENTRY_FIXED_SEQUENCE             0x20000000
+#define BL_APPLICATION_ENTRY_RECOVERY                   0x40000000
 
 #define BL_CONTEXT_PAGING_ON                            1
 #define BL_CONTEXT_INTERRUPTS_ON                        2
 #define BL_MM_ADD_DESCRIPTOR_TRUNCATE_FLAG              0x02
 #define BL_MM_ADD_DESCRIPTOR_NEVER_COALESCE_FLAG        0x10
 #define BL_MM_ADD_DESCRIPTOR_NEVER_TRUNCATE_FLAG        0x20
+#define BL_MM_ADD_DESCRIPTOR_ALLOCATE_FLAG              0x1000
 #define BL_MM_ADD_DESCRIPTOR_UPDATE_LIST_POINTER_FLAG   0x2000
 
+#define BL_MM_INCLUDE_MAPPED_ALLOCATED                  0x01
+#define BL_MM_INCLUDE_MAPPED_UNALLOCATED                0x02
+#define BL_MM_INCLUDE_UNMAPPED_ALLOCATED                0x04
+#define BL_MM_INCLUDE_UNMAPPED_UNALLOCATED              0x08
+#define BL_MM_INCLUDE_RESERVED_ALLOCATED                0x10
+#define BL_MM_INCLUDE_BAD_MEMORY                        0x20
+#define BL_MM_INCLUDE_FIRMWARE_MEMORY                   0x40
+#define BL_MM_INCLUDE_TRUNCATED_MEMORY                  0x80
+#define BL_MM_INCLUDE_PERSISTENT_MEMORY                 0x100
+#define BL_MM_INCLUDE_FIRMWARE_MEMORY_2                 0x200
+
+#define BL_MM_INCLUDE_NO_FIRMWARE_MEMORY                (BL_MM_INCLUDE_PERSISTENT_MEMORY | \
+                                                         BL_MM_INCLUDE_TRUNCATED_MEMORY | \
+                                                         BL_MM_INCLUDE_BAD_MEMORY | \
+                                                         BL_MM_INCLUDE_RESERVED_ALLOCATED | \
+                                                         BL_MM_INCLUDE_UNMAPPED_UNALLOCATED | \
+                                                         BL_MM_INCLUDE_UNMAPPED_ALLOCATED | \
+                                                         BL_MM_INCLUDE_MAPPED_UNALLOCATED | \
+                                                         BL_MM_INCLUDE_MAPPED_ALLOCATED)
+C_ASSERT(BL_MM_INCLUDE_NO_FIRMWARE_MEMORY == 0x1BF);
+
+#define BL_MM_INCLUDE_ONLY_FIRMWARE_MEMORY              (BL_MM_INCLUDE_FIRMWARE_MEMORY_2 | \
+                                                         BL_MM_INCLUDE_FIRMWARE_MEMORY)
+C_ASSERT(BL_MM_INCLUDE_ONLY_FIRMWARE_MEMORY == 0x240);
+
 #define BL_MM_REQUEST_DEFAULT_TYPE                      1
 #define BL_MM_REQUEST_TOP_DOWN_TYPE                     2
 
+#define BL_MM_REMOVE_PHYSICAL_REGION_FLAG               0x40000000
 #define BL_MM_REMOVE_VIRTUAL_REGION_FLAG                0x80000000
 
 #define BL_LIBRARY_FLAG_NO_DISPLAY                      0x01
 #define BL_FS_REGISTER_AT_HEAD_FLAG                     1
 
 #define BL_BLOCK_DEVICE_REMOVABLE_FLAG                  0x01
+#define BL_BLOCK_DEVICE_PRESENT_FLAG                    0x02
+#define BL_BLOCK_DEVICE_VIRTUAL_FLAG                    0x04
 
 #define BL_MEMORY_CLASS_SHIFT                           28
 
 #define BL_FILE_ENTRY_READ_ACCESS                       0x02
 #define BL_FILE_ENTRY_WRITE_ACCESS                      0x04
 #define BL_FILE_ENTRY_UNKNOWN_ACCESS                    0x10
+#define BL_FILE_ENTRY_DIRECTORY                         0x10000
+
+#define BL_ETFS_FILE_ENTRY_DIRECTORY                    0x01
 
 #define BL_IMG_VALID_FILE                               0x01
 #define BL_IMG_MEMORY_FILE                              0x02
 #define BL_LOAD_IMG_COMPUTE_SIGNATURE                   0x10
 #define BL_LOAD_IMG_COMPUTE_HASH                        0x40000
 
+#define BL_LOAD_PE_IMG_VIRTUAL_BUFFER                   BL_LOAD_IMG_VIRTUAL_BUFFER
+#define BL_LOAD_PE_IMG_CHECK_MACHINE                    0x02
+#define BL_LOAD_PE_IMG_EXISTING_BUFFER                  BL_LOAD_IMG_EXISTING_BUFFER 
+#define BL_LOAD_PE_IMG_COMPUTE_HASH                     0x10
+#define BL_LOAD_PE_IMG_CHECK_SUBSYSTEM                  0x80
+#define BL_LOAD_PE_IMG_SKIP_RELOCATIONS                 0x100
+#define BL_LOAD_PE_IMG_CHECK_FORCED_INTEGRITY           0x200
+#define BL_LOAD_PE_IMG_IGNORE_CHECKSUM_MISMATCH         0x10000
+#define BL_LOAD_PE_IMG_VALIDATE_ORIGINAL_FILENAME       0x400000
+
+#define BL_UTL_CHECKSUM_COMPLEMENT                      0x10000
+#define BL_UTL_CHECKSUM_ROTATE                          0x20000
+#define BL_UTL_CHECKSUM_NEGATE                          0x40000
+#define BL_UTL_CHECKSUM_UCHAR_BUFFER                    0x01
+#define BL_UTL_CHECKSUM_USHORT_BUFFER                   0x02
+
 /* ENUMERATIONS **************************************************************/
 
 typedef enum _BL_COLOR
@@ -150,10 +213,17 @@ typedef enum _BL_COLOR
     White
 } BL_COLOR, *PBL_COLOR;
 
+typedef enum _BL_MENU_POLICY
+{
+    MenuPolicyLegacy = 0,
+    MenuPolicyStandard = 1
+} BL_MENU_POLICY;
+
 typedef enum _BL_MEMORY_DESCRIPTOR_TYPE
 {
     BlMdPhysical,
     BlMdVirtual,
+    BlMdTracker
 } BL_MEMORY_DESCRIPTOR_TYPE;
 
 typedef enum _BL_TRANSLATION_TYPE
@@ -240,6 +310,7 @@ typedef enum _BL_MEMORY_TYPE
     BlLoaderPageDirectory = 0xD0000006,
     BlLoaderReferencePage = 0xD0000007,
     BlLoaderRamDisk = 0xD0000008,
+    BlLoaderArchData = 0xD0000009,
     BlLoaderData = 0xD000000A,
     BlLoaderRegistry = 0xD000000B,
     BlLoaderBlockMemory = 0xD000000C,
@@ -294,8 +365,8 @@ typedef enum _BL_MEMORY_ATTR
     BlMemoryUnknown =           0x00010000,
     BlMemoryNonFixed =          0x00020000,
     BlMemoryFixed =             0x00040000,
-    BlMemoryReserved =          0x00080000,
-    BlMemoryValidAllocationAttributes       = BlMemoryNonFixed | BlMemoryFixed | BlMemoryReserved | BlMemoryUnknown,
+    BlMemoryBelow1MB =          0x00080000,
+    BlMemoryValidAllocationAttributes       = BlMemoryNonFixed | BlMemoryFixed | BlMemoryBelow1MB | BlMemoryUnknown,
     BlMemoryValidAllocationAttributeMask    = 0x00FF0000,
 
     //
@@ -305,9 +376,10 @@ typedef enum _BL_MEMORY_ATTR
     BlMemoryCoalesced =         0x02000000,
     BlMemoryUpdate =            0x04000000,
     BlMemoryNonFirmware =       0x08000000,
+    BlMemoryPersistent =        0x10000000,
     BlMemorySpecial =           0x20000000,
     BlMemoryFirmware =          0x80000000,
-    BlMemoryValidTypeAttributes             = BlMemoryRuntime | BlMemoryCoalesced | BlMemoryUpdate | BlMemoryNonFirmware | BlMemorySpecial | BlMemoryFirmware,
+    BlMemoryValidTypeAttributes             = BlMemoryRuntime | BlMemoryCoalesced | BlMemoryUpdate | BlMemoryNonFirmware | BlMemoryPersistent | BlMemorySpecial | BlMemoryFirmware,
     BlMemoryValidTypeAttributeMask          = 0xFF000000,
 } BL_MEMORY_ATTR;
 
@@ -601,7 +673,6 @@ NTSTATUS
     VOID
     );
 
-
 /* DATA STRUCTURES ***********************************************************/
 
 typedef struct _BL_LIBRARY_PARAMETERS
@@ -667,7 +738,9 @@ typedef struct _BL_RETURN_ARGUMENTS
 {
     ULONG Version;
     NTSTATUS Status;
-    ULONG ReturnArgumentData[5];
+    ULONG Flags;
+    ULONGLONG DataSize;
+    ULONGLONG DataPage;
 } BL_RETURN_ARGUMENTS, *PBL_RETURN_ARGUMENTS;
 
 typedef struct _BL_MEMORY_DESCRIPTOR
@@ -717,6 +790,37 @@ typedef struct _BL_LOADED_APPLICATION_ENTRY
     PBL_BCD_OPTION BcdData;
 } BL_LOADED_APPLICATION_ENTRY, *PBL_LOADED_APPLICATION_ENTRY;
 
+typedef struct _BL_MENU_STATUS
+{
+    union
+    {
+        struct
+        {
+            ULONG AnyKey : 1;
+            ULONG AdvancedOptions : 1;
+            ULONG BootOptions : 1;
+            ULONG OemKey : 1;
+            ULONG Exit : 1;
+            ULONG Reserved : 27;
+        };
+        ULONG AsULong;
+    };
+    ULONG BootIndex;
+    WCHAR KeyValue;
+} BL_MENU_STATUS, *PL_MENU_STATUS;
+
+typedef enum _BL_BOOT_ERROR_STATUS
+{
+    Reboot = 1,
+    Recover = 2,
+    RecoverOem = 3,
+    OsSelection = 4,
+    NextOs = 5,
+    TryAgain = 6,
+    AdvancedOptions = 7,
+    BootOptions = 8
+} BL_BOOT_ERROR_STATUS;
+
 typedef struct _BL_HARDDISK_DEVICE
 {
     ULONG PartitionType;
@@ -757,8 +861,10 @@ typedef struct _BL_LOCAL_DEVICE
             LARGE_INTEGER ImageSize;
             ULONG ImageOffset;
         } RamDisk;
+
+        ULONG File; // unknown for now
     };
-} BL_LOCAL_DEVICE;
+} BL_LOCAL_DEVICE, *PBL_LOCAL_DEVICE;
 
 typedef struct _BL_DEVICE_DESCRIPTOR
 {
@@ -1095,6 +1201,20 @@ typedef struct _BL_IMG_FILE
     PWCHAR FileName;
 } BL_IMG_FILE, *PBL_IMG_FILE;
 
+typedef struct _BL_IMAGE_APPLICATION_ENTRY
+{
+    PBL_APPLICATION_ENTRY AppEntry;
+    PVOID ImageBase;
+    ULONG ImageSize;
+} BL_IMAGE_APPLICATION_ENTRY, *PBL_IMAGE_APPLICATION_ENTRY;
+
+typedef struct _BL_IMAGE_PARAMETERS
+{
+    PVOID Buffer;
+    ULONG ActualSize;
+    ULONG BufferSize;
+} BL_IMAGE_PARAMETERS, *PBL_IMAGE_PARAMETERS;
+
 typedef struct _BL_DEFERRED_FONT_FILE
 {
     LIST_ENTRY ListEntry;
@@ -1141,6 +1261,13 @@ typedef struct _COORD
     ULONG Y;
 } COORD, *PCOORD;
 
+typedef struct _BL_PD_DATA_BLOB
+{
+    PVOID Data;
+    ULONG DataSize;
+    ULONG BlobSize;
+} BL_PD_DATA_BLOB, *PBL_PD_DATA_BLOB;
+
 /* INLINE ROUTINES ***********************************************************/
 
 FORCEINLINE
@@ -1175,6 +1302,7 @@ MmMdInitializeListHead (
     InitializeListHead(&List->ListHead);
     List->First = &List->ListHead;
     List->This = NULL;
+    List->Type = 0;
 }
 
 /* INITIALIZATION ROUTINES ***************************************************/
@@ -1254,6 +1382,11 @@ BlpDisplayInitialize (
     _In_ ULONG Flags
     );
 
+NTSTATUS
+BlpDisplayReinitialize (
+    VOID
+    );
+
 VOID
 BlDestroyLibrary (
     VOID
@@ -1272,6 +1405,16 @@ EfiPrintf (
     ...
     );
 
+NTSTATUS
+BlFwGetParameters(
+    _In_ PBL_FIRMWARE_DESCRIPTOR Parameters
+    );
+
+NTSTATUS
+BlFwEnumerateDevice (
+    _In_ PBL_DEVICE_DESCRIPTOR Device
+    );
+
 NTSTATUS
 EfiAllocatePages (
     _In_ ULONG Type,
@@ -1401,6 +1544,12 @@ EfipGetRsdt (
     _Out_ PPHYSICAL_ADDRESS FoundRsdt
     );
 
+NTSTATUS
+EfiFreePages (
+    _In_ ULONG Pages,
+    _In_ EFI_PHYSICAL_ADDRESS PhysicalAddress
+    );
+
 /* PLATFORM TIMER ROUTINES ***************************************************/
 
 NTSTATUS
@@ -1408,6 +1557,16 @@ BlpTimeCalibratePerformanceCounter (
     VOID
     );
 
+ULONGLONG
+BlTimeQueryPerformanceCounter (
+    _Out_opt_ PLARGE_INTEGER Frequency
+    );
+
+ULONGLONG
+BlArchGetPerformanceCounter (
+    VOID
+    );
+
 /* RESOURCE LOCALE INTERNATIONALIZATION ROUTINES *****************************/
 
 NTSTATUS
@@ -1501,6 +1660,18 @@ BlStatusError (
 
 /* UTILITY ROUTINES **********************************************************/
 
+VOID
+BlArchCpuId (
+    _In_ ULONG Function,
+    _In_ ULONG SubFunction,
+    _Out_ INT* Result
+    );
+
+BOOLEAN
+BlArchIsCpuIdFunctionSupported (
+    _In_ ULONG Function
+    );
+
 VOID
 BlUtlUpdateProgress (
     _In_ ULONG Percentage,
@@ -1513,6 +1684,44 @@ BlUtlGetAcpiTable (
     _In_ ULONG Signature
     );
 
+NTSTATUS
+BlUtlInitialize (
+    VOID
+    );
+
+NTSTATUS
+BlUtlRegisterProgressRoutine (
+    VOID
+    );
+
+ULONG
+BlUtlCheckSum (
+    _In_ ULONG PartialSum,
+    _In_ PUCHAR Buffer,
+    _In_ ULONG Length,
+    _In_ ULONG Flags
+    );
+
+NTSTATUS
+BlGetApplicationBaseAndSize (
+    _Out_ PVOID* ImageBase,
+    _Out_ PULONG ImageSize
+    );
+
+VOID
+BlDestroyBootEntry (
+    _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
+    );
+
+NTSTATUS
+BlPdQueryData (
+    _In_ const GUID* DataGuid,
+    _In_ PVOID Unknown,
+    _Inout_ PBL_PD_DATA_BLOB DataBlob
+    );
+
+/* FIRMWARE UTILITY ROUTINES *************************************************/
+
 EFI_STATUS
 EfiGetEfiStatusCode(
     _In_ NTSTATUS Status
@@ -1523,27 +1732,39 @@ EfiGetNtStatusCode (
     _In_ EFI_STATUS EfiStatus
     );
 
-NTSTATUS
-BlUtlInitialize (
-    VOID
-    );
-
 VOID
 BlFwReboot (
     VOID
     );
 
+NTSTATUS
+MmFwFreePages (
+    _In_ ULONG BasePage,
+    _In_ ULONG PageCount
+    );
+
 PGUID
 BlGetApplicationIdentifier (
     VOID
     );
 
 NTSTATUS
-BlGetApplicationBaseAndSize (
-    _Out_ PVOID* ImageBase,
-    _Out_ PULONG ImageSize
+BlpSecureBootEFIIsEnabled (
+    VOID
     );
 
+NTSTATUS
+BlSecureBootIsEnabled (
+    _Out_ PBOOLEAN SecureBootEnabled
+    );
+
+NTSTATUS
+BlSecureBootCheckForFactoryReset (
+    VOID
+    );
+
+/* RESOURCE ROUTINES *********************************************************/
+
 PWCHAR
 BlResourceFindMessage (
     _In_ ULONG MsgId
@@ -1675,6 +1896,13 @@ BlGetBootOptionDevice (
     _In_opt_ PBL_BCD_OPTION* ExtraOptions
     );
 
+NTSTATUS
+BlGetBootOptionGuid (
+    _In_ PBL_BCD_OPTION List,
+    _In_ ULONG Type,
+    _Out_ PGUID Value
+    );
+
 NTSTATUS
 BlGetBootOptionGuidList (
     _In_ PBL_BCD_OPTION List,
@@ -1689,12 +1917,43 @@ BlCopyBootOptions (
     _Out_ PBL_BCD_OPTION *CopiedOptions
     );
 
+NTSTATUS
+BlAppendBootOptionBoolean (
+    _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
+    _In_ ULONG OptionId
+    );
+
+NTSTATUS
+BlAppendBootOptionInteger (
+    _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
+    _In_ ULONG OptionId,
+    _In_ ULONGLONG Value
+    );
+
+NTSTATUS
+BlAppendBootOptionString (
+    _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
+    _In_ PWCHAR OptionString
+    );
+
 NTSTATUS
 BlAppendBootOptions (
     _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
     _In_ PBL_BCD_OPTION Options
     );
 
+VOID
+BlRemoveBootOption (
+    _In_ PBL_BCD_OPTION List,
+    _In_ ULONG Type
+    );
+
+NTSTATUS
+BlReplaceBootOptions (
+    _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
+    _In_ PBL_BCD_OPTION NewOptions
+    );
+
 /* BOOT REGISTRY ROUTINES ****************************************************/
 
 VOID
@@ -1719,7 +1978,6 @@ NTSTATUS
 BiGetRegistryValue (
     _In_ HANDLE KeyHandle,
     _In_ PWCHAR ValueName,
-    _In_ PWCHAR KeyName,
     _In_ ULONG Type,
     _Out_ PVOID* Buffer,
     _Out_ PULONG ValueLength
@@ -1732,6 +1990,11 @@ BiEnumerateSubKeys (
     _Out_ PULONG SubKeyCount
     );
 
+NTSTATUS
+BiDeleteKey (
+    _In_ HANDLE KeyHandle
+    );
+
 VOID
 BiDereferenceHive (
     _In_ HANDLE KeyHandle
@@ -1744,8 +2007,49 @@ BlpArchSwitchContext (
     _In_ BL_ARCH_MODE NewMode
     );
 
+VOID
+Archx86TransferTo32BitApplicationAsm (
+    VOID
+    );
+
 /* MEMORY DESCRIPTOR ROUTINES ************************************************/
 
+VOID
+MmMdInitializeList (
+    _In_ PBL_MEMORY_DESCRIPTOR_LIST DescriptorList,
+    _In_ ULONG Type,
+    _In_ PLIST_ENTRY ListHead
+    );
+
+PBL_MEMORY_DESCRIPTOR
+MmMdFindDescriptor (
+    _In_ ULONG WhichList,
+    _In_ ULONG Flags,
+    _In_ ULONGLONG Page
+    );
+
+PBL_MEMORY_DESCRIPTOR
+MmMdFindDescriptorFromMdl (
+    _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
+    _In_ ULONG Flags,
+    _In_ ULONGLONG Page
+    );
+
+NTSTATUS
+MmMdCopyList (
+    _In_ PBL_MEMORY_DESCRIPTOR_LIST DestinationList,
+    _In_ PBL_MEMORY_DESCRIPTOR_LIST SourceList,
+    _In_opt_ PBL_MEMORY_DESCRIPTOR ListDescriptor,
+    _Out_ PULONG ActualCount,
+    _In_ ULONG Count,
+    _In_ ULONG Flags
+    );
+
+ULONG
+MmMdCountList (
+    _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
+    );
+
 VOID
 MmMdFreeList(
     _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
@@ -1829,10 +2133,27 @@ MmPapAllocatePhysicalPagesInRange (
     );
 
 NTSTATUS
+MmPaReleaseSelfMapPages (
+    _In_ PHYSICAL_ADDRESS Address
+    );
+
+NTSTATUS
+MmPaReserveSelfMapPages (
+    _Inout_ PPHYSICAL_ADDRESS PhysicalAddress,
+    _In_ ULONG Alignment,
+    _In_ ULONG PageCount
+    );
+NTSTATUS
 BlMmFreePhysicalPages (
     _In_ PHYSICAL_ADDRESS Address
     );
 
+NTSTATUS
+MmPapFreePages (
+    _In_ PVOID Address,
+    _In_ ULONG WhichList
+    );
+
 NTSTATUS
 MmPapAllocatePagesInRange (
     _Inout_ PVOID* PhysicalAddress,
@@ -1860,8 +2181,39 @@ BlMmRemoveBadMemory (
     VOID
     );
 
+NTSTATUS
+BlMmGetMemoryMap (
+    _In_ PLIST_ENTRY MemoryMap,
+    _In_ PBL_IMAGE_PARAMETERS MemoryParameters,
+    _In_ ULONG WhichTypes,
+    _In_ ULONG Flags
+    );
+
 /* VIRTUAL MEMORY ROUTINES ***************************************************/
 
+NTSTATUS
+MmSelectMappingAddress (
+    _Out_ PVOID* MappingAddress,
+    _In_ ULONGLONG Size,
+    _In_ ULONG AllocationAttributes,
+    _In_ ULONG Flags,
+    _In_ PHYSICAL_ADDRESS PhysicalAddress
+    );
+
+NTSTATUS
+MmMapPhysicalAddress (
+    _Inout_ PPHYSICAL_ADDRESS PhysicalAddress,
+    _Out_ PVOID* VirtualAddress,
+    _Inout_ PULONGLONG Size,
+    _In_ ULONG CacheAttributes
+    );
+
+NTSTATUS
+MmUnmapVirtualAddress (
+    _Inout_ PVOID* VirtualAddress,
+    _Inout_ PULONGLONG Size
+    );
+
 NTSTATUS
 BlMmMapPhysicalAddressEx (
     _In_ PVOID* VirtualAddress,
@@ -1876,6 +2228,19 @@ BlMmUnmapVirtualAddressEx (
     _In_ ULONGLONG Size
     );
 
+BOOLEAN
+BlMmTranslateVirtualAddress (
+    _In_ PVOID VirtualAddress,
+    _Out_ PPHYSICAL_ADDRESS PhysicalAddress
+    );
+
+BOOLEAN
+MmArchTranslateVirtualAddress (
+    _In_ PVOID VirtualAddress,
+    _Out_opt_ PPHYSICAL_ADDRESS PhysicalAddress,
+    _Out_opt_ PULONG CachingFlags
+    );
+
 /* BLOCK ALLOCATOR ROUTINES **************************************************/
 
 NTSTATUS
@@ -2002,6 +2367,30 @@ BlImgFindSection (
     _In_ ULONG ImageSize
     );
 
+NTSTATUS
+BlImgLoadBootApplication (
+    _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry,
+    _Out_ PULONG AppHandle
+    );
+
+NTSTATUS
+BlImgStartBootApplication (
+    _In_ ULONG AppHandle,
+    _Inout_ PBL_RETURN_ARGUMENTS ReturnArguments
+    );
+
+NTSTATUS
+BlImgUnloadBootApplication (
+    _In_ ULONG AppHandle
+    );
+
+VOID
+BlImgQueryCodeIntegrityBootOptions (
+    _In_ PBL_LOADED_APPLICATION_ENTRY ApplicationEntry,
+    _Out_ PBOOLEAN IntegrityChecksDisabled,
+    _Out_ PBOOLEAN TestSigning
+    );
+
 /* FILE I/O ROUTINES *********************************************************/
 
 NTSTATUS
@@ -2033,6 +2422,14 @@ BlFileOpen (
     _Out_ PULONG FileId
     );
 
+/* BLOCK I/O ROUTINES *******************************************************/
+
+NTSTATUS
+BlockIoEfiCompareDevice (
+    _In_ PBL_DEVICE_DESCRIPTOR Device,
+    _In_ EFI_HANDLE Handle
+    );
+
 /* INPUT CONSOLE ROUTINES ****************************************************/
 
 VOID
@@ -2302,6 +2699,7 @@ extern EFI_GUID EfiBlockIoProtocol;
 extern EFI_GUID EfiSimpleTextInputExProtocol;
 extern EFI_GUID EfiRootAcpiTableGuid;
 extern EFI_GUID EfiRootAcpiTable10Guid;
+extern EFI_GUID EfiGlobalVariable;
 extern ULONG ConsoleGraphicalResolutionListFlags;
 extern BL_DISPLAY_MODE ConsoleGraphicalResolutionList[];
 extern BL_DISPLAY_MODE ConsoleTextResolutionList[];
@@ -2309,5 +2707,19 @@ extern ULONG ConsoleGraphicalResolutionListSize;
 extern PVOID DspRemoteInputConsole;
 extern PVOID DspLocalInputConsole;
 extern WCHAR BlScratchBuffer[8192];
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappedAllocated;
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappedUnallocated;
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlFwAllocationTracker;
 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedAllocated;
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedUnallocated;
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlReservedAllocated;
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlBadMemory;
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlTruncatedMemory;
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlPersistentMemory;
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlCompleteBadMemory;
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlFreeVirtual;
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappingTrackers;
+extern ULONGLONG BlpTimePerformanceFrequency;
+extern LIST_ENTRY RegisteredFileSystems;
+
 #endif