https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2f9dde09e1c94a9f3f405…
commit 2f9dde09e1c94a9f3f4051d7a8a0ab8b286e7b62
Author: Timo Kreuzer <timo.kreuzer(a)reactos.org>
AuthorDate: Wed Oct 2 12:32:36 2024 +0200
Commit: Timo Kreuzer <timo.kreuzer(a)reactos.org>
CommitDate: Tue Feb 4 16:45:48 2025 +0200
[FREELDR] Replace some macros/inline functions and global variables with functions
This allows to easily import them from a 2nd stage loader without having to bother
about _declspec(dllimport)
---
boot/freeldr/freeldr/arch/arcemul.c | 21 +++++++++++++++++
boot/freeldr/freeldr/arch/archwsup.c | 15 ++++++++++++
boot/freeldr/freeldr/arch/i386/hwacpi.c | 5 ++++
boot/freeldr/freeldr/arch/uefi/uefihw.c | 5 ++++
boot/freeldr/freeldr/bootmgr.c | 19 +++++++--------
boot/freeldr/freeldr/disk/scsiport.c | 2 +-
boot/freeldr/freeldr/freeldr.c | 15 ++++++++++++
boot/freeldr/freeldr/include/disk.h | 4 ++++
boot/freeldr/freeldr/include/inifile.h | 1 +
boot/freeldr/freeldr/include/machine.h | 14 ++++--------
boot/freeldr/freeldr/include/mm.h | 33 ++++++++-------------------
boot/freeldr/freeldr/include/settings.h | 2 ++
boot/freeldr/freeldr/include/ui.h | 9 ++++++++
boot/freeldr/freeldr/lib/inifile/inifile.c | 5 ++++
boot/freeldr/freeldr/lib/mm/heap.c | 30 ++++++++++++++++++++++--
boot/freeldr/freeldr/lib/mm/meminit.c | 19 +++++++++++++++
boot/freeldr/freeldr/lib/mm/mm.c | 5 ++++
boot/freeldr/freeldr/lib/rtl/libsupp.c | 4 ++--
boot/freeldr/freeldr/miscboot.c | 4 ++--
boot/freeldr/freeldr/ntldr/arch/i386/winldr.c | 2 +-
boot/freeldr/freeldr/ntldr/winldr.c | 19 ++++++++-------
boot/freeldr/freeldr/ntldr/winldr.h | 17 --------------
boot/freeldr/freeldr/ntldr/wlmemory.c | 15 +++++-------
boot/freeldr/freeldr/options.c | 4 ++--
boot/freeldr/freeldr/oslist.c | 2 +-
boot/freeldr/freeldr/settings.c | 7 +++++-
boot/freeldr/freeldr/ui/ui.c | 28 +++++++++++++++++++++++
27 files changed, 216 insertions(+), 90 deletions(-)
diff --git a/boot/freeldr/freeldr/arch/arcemul.c b/boot/freeldr/freeldr/arch/arcemul.c
index a72f492bc5d..f44ffaf7b6c 100644
--- a/boot/freeldr/freeldr/arch/arcemul.c
+++ b/boot/freeldr/freeldr/arch/arcemul.c
@@ -40,4 +40,25 @@ ArcGetRelativeTime(VOID)
return ret;
}
+PCONFIGURATION_COMPONENT_DATA
+MachHwDetect(_In_opt_ PCSTR Options)
+{
+ return MachVtbl.HwDetect(Options);
+}
+
+VOID MachPrepareForReactOS(VOID)
+{
+ MachVtbl.PrepareForReactOS();
+}
+
+VOID MachGetExtendedBIOSData(PULONG ExtendedBIOSDataArea, PULONG ExtendedBIOSDataSize)
+{
+ MachVtbl.GetExtendedBIOSData(ExtendedBIOSDataArea, ExtendedBIOSDataSize);
+}
+
+VOID MachVideoGetFontsFromFirmware(PULONG RomFontPointers)
+{
+ MachVtbl.VideoGetFontsFromFirmware(RomFontPointers);
+}
+
/* EOF */
diff --git a/boot/freeldr/freeldr/arch/archwsup.c b/boot/freeldr/freeldr/arch/archwsup.c
index f112270ad25..e46a8f87498 100644
--- a/boot/freeldr/freeldr/arch/archwsup.c
+++ b/boot/freeldr/freeldr/arch/archwsup.c
@@ -243,3 +243,18 @@ FldrCreateComponentKey(
/* Return the child */
*ComponentKey = ComponentData;
}
+
+ULONG ArcGetDiskCount(VOID)
+{
+ return reactos_disk_count;
+}
+
+PARC_DISK_SIGNATURE_EX ArcGetDiskInfo(ULONG Index)
+{
+ if (Index >= reactos_disk_count)
+ {
+ return NULL;
+ }
+
+ return &reactos_arc_disk_info[Index];
+}
diff --git a/boot/freeldr/freeldr/arch/i386/hwacpi.c
b/boot/freeldr/freeldr/arch/i386/hwacpi.c
index ccd42b144e0..f2b43fde015 100644
--- a/boot/freeldr/freeldr/arch/i386/hwacpi.c
+++ b/boot/freeldr/freeldr/arch/i386/hwacpi.c
@@ -25,6 +25,11 @@ DBG_DEFAULT_CHANNEL(HWDETECT);
BOOLEAN AcpiPresent = FALSE;
+BOOLEAN IsAcpiPresent(VOID)
+{
+ return AcpiPresent;
+}
+
static PRSDP_DESCRIPTOR
FindAcpiBios(VOID)
{
diff --git a/boot/freeldr/freeldr/arch/uefi/uefihw.c
b/boot/freeldr/freeldr/arch/uefi/uefihw.c
index f671446b474..674d4bff84d 100644
--- a/boot/freeldr/freeldr/arch/uefi/uefihw.c
+++ b/boot/freeldr/freeldr/arch/uefi/uefihw.c
@@ -24,6 +24,11 @@ BOOLEAN AcpiPresent = FALSE;
/* FUNCTIONS *****************************************************************/
+BOOLEAN IsAcpiPresent(VOID)
+{
+ return AcpiPresent;
+}
+
static
PRSDP_DESCRIPTOR
FindAcpiBios(VOID)
diff --git a/boot/freeldr/freeldr/bootmgr.c b/boot/freeldr/freeldr/bootmgr.c
index ce977170d5d..51030b03641 100644
--- a/boot/freeldr/freeldr/bootmgr.c
+++ b/boot/freeldr/freeldr/bootmgr.c
@@ -85,7 +85,7 @@ WarnDeprecated(
CHAR msgString[300];
/* If the user didn't cancel the timeout, don't display the warning */
- if (BootMgrInfo.TimeOut >= 0)
+ if (GetBootMgrInfo()->TimeOut >= 0)
return;
va_start(ap, MsgFmt);
@@ -183,6 +183,7 @@ BuildArgvForOsLoader(
PCHAR* Argv;
PCHAR* Args;
PCHAR SettingName, SettingValue;
+ PCCHAR BootPath = FrLdrGetBootPath();
*pArgc = 0;
@@ -208,7 +209,7 @@ BuildArgvForOsLoader(
/* i == 0: Program name */
// TODO: Provide one in the future...
/* i == 1: SystemPartition : from where FreeLdr has been started */
- Size += (strlen("SystemPartition=") + strlen(FrLdrBootPath) + 1) *
sizeof(CHAR);
+ Size += (strlen("SystemPartition=") + strlen(BootPath) + 1) *
sizeof(CHAR);
/* i == 2: LoadIdentifier : ASCII string that may be used
* to associate an identifier with a set of load parameters */
if (LoadIdentifier)
@@ -236,7 +237,7 @@ BuildArgvForOsLoader(
/* i == 1: SystemPartition */
{
strcpy(SettingName, "SystemPartition=");
- strcat(SettingName, FrLdrBootPath);
+ strcat(SettingName, BootPath);
*Args++ = SettingName;
SettingName += (strlen(SettingName) + 1);
@@ -333,7 +334,7 @@ MainBootMenuKeyPressFilter(
IN PVOID Context OPTIONAL)
{
/* Any key-press cancels the global timeout */
- BootMgrInfo.TimeOut = -1;
+ GetBootMgrInfo()->TimeOut = -1;
switch (KeyPress)
{
@@ -394,7 +395,7 @@ VOID RunLoader(VOID)
#endif
/* Debugger main initialization */
- DebugInit(BootMgrInfo.DebugString);
+ DebugInit(GetBootMgrInfo()->DebugString);
/* UI main initialization */
if (!UiInitialize(TRUE))
@@ -427,7 +428,7 @@ VOID RunLoader(VOID)
}
/* Find all the message box settings and run them */
- UiShowMessageBoxesInSection(BootMgrInfo.FrLdrSection);
+ UiShowMessageBoxesInSection(GetBootMgrInfo()->FrLdrSection);
for (;;)
{
@@ -442,7 +443,7 @@ VOID RunLoader(VOID)
OperatingSystemDisplayNames,
OperatingSystemCount,
DefaultOperatingSystem,
- BootMgrInfo.TimeOut,
+ GetBootMgrInfo()->TimeOut,
&SelectedOperatingSystem,
FALSE,
MainBootMenuKeyPressFilter,
@@ -455,12 +456,12 @@ VOID RunLoader(VOID)
/* Load the chosen operating system */
LoadOperatingSystem(&OperatingSystemList[SelectedOperatingSystem]);
- BootMgrInfo.TimeOut = -1;
+ GetBootMgrInfo()->TimeOut = -1;
/* If we get there, the OS loader failed. As it may have
* messed up the display, re-initialize the UI. */
#ifndef _M_ARM
- UiVtbl.UnInitialize();
+ UiUnInitialize("");
#endif
UiInitialize(TRUE);
}
diff --git a/boot/freeldr/freeldr/disk/scsiport.c b/boot/freeldr/freeldr/disk/scsiport.c
index 52d6fd4ecc6..fa63d6e6387 100644
--- a/boot/freeldr/freeldr/disk/scsiport.c
+++ b/boot/freeldr/freeldr/disk/scsiport.c
@@ -1647,7 +1647,7 @@ LoadBootDeviceDriver(VOID)
#endif
/* Create full ntbootdd.sys path */
- strcpy(NtBootDdPath, FrLdrBootPath);
+ strcpy(NtBootDdPath, FrLdrGetBootPath());
strcat(NtBootDdPath, "\\NTBOOTDD.SYS");
/* Load ntbootdd.sys */
diff --git a/boot/freeldr/freeldr/freeldr.c b/boot/freeldr/freeldr/freeldr.c
index d533061fb5d..612216b9c5b 100644
--- a/boot/freeldr/freeldr/freeldr.c
+++ b/boot/freeldr/freeldr/freeldr.c
@@ -124,3 +124,18 @@ double log10(double x)
__debugbreak();
return 0.0;
}
+
+PCCHAR FrLdrGetBootPath(VOID)
+{
+ return FrLdrBootPath;
+}
+
+UCHAR FrldrGetBootDrive(VOID)
+{
+ return FrldrBootDrive;
+}
+
+ULONG FrldrGetBootPartition(VOID)
+{
+ return FrldrBootPartition;
+}
diff --git a/boot/freeldr/freeldr/include/disk.h b/boot/freeldr/freeldr/include/disk.h
index ec12a8f4b31..2bf598901e9 100644
--- a/boot/freeldr/freeldr/include/disk.h
+++ b/boot/freeldr/freeldr/include/disk.h
@@ -153,3 +153,7 @@ DiskGetPartitionEntry(
* SCSI support (disk/scsiport.c)
*/
ULONG LoadBootDeviceDriver(VOID);
+
+PCCHAR FrLdrGetBootPath(VOID);
+UCHAR FrldrGetBootDrive(VOID);
+ULONG FrldrGetBootPartition(VOID);
diff --git a/boot/freeldr/freeldr/include/inifile.h
b/boot/freeldr/freeldr/include/inifile.h
index 0bc8e60968a..7a33a992bff 100644
--- a/boot/freeldr/freeldr/include/inifile.h
+++ b/boot/freeldr/freeldr/include/inifile.h
@@ -83,3 +83,4 @@ BOOLEAN IniAddSection(PCSTR SectionName, ULONG_PTR* SectionId);
BOOLEAN IniAddSettingValueToSection(ULONG_PTR SectionId, PCSTR SettingName, PCSTR
SettingValue);
BOOLEAN IniModifySettingValue(ULONG_PTR SectionId, PCSTR SettingName, PCSTR
SettingValue);
VOID IniCleanup(VOID);
+PLIST_ENTRY IniGetFileSectionListHead(VOID);
diff --git a/boot/freeldr/freeldr/include/machine.h
b/boot/freeldr/freeldr/include/machine.h
index 7e6e5c249be..2cab94982e1 100644
--- a/boot/freeldr/freeldr/include/machine.h
+++ b/boot/freeldr/freeldr/include/machine.h
@@ -97,8 +97,6 @@ VOID MachInit(const char *CmdLine);
MachVtbl.VideoGetDisplaySize((W), (H), (D))
#define MachVideoGetBufferSize() \
MachVtbl.VideoGetBufferSize()
-#define MachVideoGetFontsFromFirmware(RomFontPointers) \
- MachVtbl.VideoGetFontsFromFirmware((RomFontPointers))
#define MachVideoSetTextCursorPosition(X, Y) \
MachVtbl.VideoSetTextCursorPosition((X), (Y))
#define MachVideoHideShowTextCursor(Show) \
@@ -117,10 +115,6 @@ VOID MachInit(const char *CmdLine);
MachVtbl.VideoSync()
#define MachBeep() \
MachVtbl.Beep()
-#define MachPrepareForReactOS() \
- MachVtbl.PrepareForReactOS()
-#define MachGetExtendedBIOSData(ExtendedBIOSDataArea, ExtendedBIOSDataSize) \
- MachVtbl.GetExtendedBIOSData((ExtendedBIOSDataArea), (ExtendedBIOSDataSize))
#define MachGetFloppyCount() \
MachVtbl.GetFloppyCount()
#define MachDiskReadLogicalSectors(Drive, Start, Count, Buf) \
@@ -133,9 +127,6 @@ VOID MachInit(const char *CmdLine);
#define MachInitializeBootDevices() \
MachVtbl.InitializeBootDevices()
-#define MachHwDetect(Options) \
- MachVtbl.HwDetect(Options)
-
#define MachHwIdle() \
MachVtbl.HwIdle()
@@ -144,4 +135,9 @@ VOID MachInit(const char *CmdLine);
TIMEINFO* ArcGetTime(VOID);
ULONG ArcGetRelativeTime(VOID);
+PCONFIGURATION_COMPONENT_DATA MachHwDetect(_In_opt_ PCSTR Options);
+VOID MachPrepareForReactOS(VOID);
+VOID MachGetExtendedBIOSData(PULONG ExtendedBIOSDataArea, PULONG ExtendedBIOSDataSize);
+VOID MachVideoGetFontsFromFirmware(PULONG RomFontPointers);
+
/* EOF */
diff --git a/boot/freeldr/freeldr/include/mm.h b/boot/freeldr/freeldr/include/mm.h
index a3f34a55f78..2c934153674 100644
--- a/boot/freeldr/freeldr/include/mm.h
+++ b/boot/freeldr/freeldr/include/mm.h
@@ -118,7 +118,7 @@ BOOLEAN MmAreMemoryPagesAvailable(PVOID PageLookupTable, PFN_NUMBER
TotalPageCou
VOID MmSetMemoryType(PVOID MemoryAddress, SIZE_T MemorySize, TYPE_OF_MEMORY NewType); //
Use with EXTREME caution!
PPAGE_LOOKUP_TABLE_ITEM MmGetMemoryMap(PFN_NUMBER *NoEntries); // Returns a
pointer to the memory mapping table and a number of entries in it
-
+PFN_NUMBER MmGetTotalPagesInLookupTable(VOID);
//BOOLEAN MmInitializeMemoryManager(ULONG LowMemoryStart, ULONG LowMemoryLength);
BOOLEAN MmInitializeMemoryManager(VOID);
@@ -129,12 +129,14 @@ VOID MmFreeMemory(PVOID MemoryPointer);
PVOID MmAllocateMemoryAtAddress(SIZE_T MemorySize, PVOID DesiredAddress,
TYPE_OF_MEMORY MemoryType);
PVOID MmAllocateHighestMemoryBelowAddress(SIZE_T MemorySize, PVOID DesiredAddress,
TYPE_OF_MEMORY MemoryType);
+PFN_NUMBER MmGetHighestPhysicalPage(VOID);
+PFN_NUMBER MmGetLoaderPagesSpanned(VOID);
+ULONG MmGetBiosMemoryMap(_Out_ PFREELDR_MEMORY_DESCRIPTOR *MemoryMap);
+
/* Heap */
#define DEFAULT_HEAP_SIZE (1024 * 1024)
#define TEMP_HEAP_SIZE (32 * 1024 * 1024)
-extern PVOID FrLdrDefaultHeap;
-extern PVOID FrLdrTempHeap;
extern SIZE_T FrLdrImageSize;
PVOID
@@ -169,34 +171,17 @@ FrLdrHeapFreeEx(
PVOID Pointer,
ULONG Tag);
-FORCEINLINE
PVOID
-FrLdrHeapAlloc(SIZE_T MemorySize, ULONG Tag)
-{
- return FrLdrHeapAllocateEx(FrLdrDefaultHeap, MemorySize, Tag);
-}
+FrLdrHeapAlloc(SIZE_T MemorySize, ULONG Tag);
-FORCEINLINE
VOID
-FrLdrHeapFree(PVOID MemoryPointer, ULONG Tag)
-{
- FrLdrHeapFreeEx(FrLdrDefaultHeap, MemoryPointer, Tag);
-}
+FrLdrHeapFree(PVOID MemoryPointer, ULONG Tag);
-FORCEINLINE
PVOID
FrLdrTempAlloc(
_In_ SIZE_T Size,
- _In_ ULONG Tag)
-{
- return FrLdrHeapAllocateEx(FrLdrTempHeap, Size, Tag);
-}
+ _In_ ULONG Tag);
-FORCEINLINE
VOID
FrLdrTempFree(
- PVOID Allocation, ULONG Tag)
-{
- FrLdrHeapFreeEx(FrLdrTempHeap, Allocation, Tag);
-}
-
+ PVOID Allocation, ULONG Tag);
diff --git a/boot/freeldr/freeldr/include/settings.h
b/boot/freeldr/freeldr/include/settings.h
index 8c60a145068..e5f5c9c58b4 100644
--- a/boot/freeldr/freeldr/include/settings.h
+++ b/boot/freeldr/freeldr/include/settings.h
@@ -17,6 +17,8 @@ typedef struct _BOOTMGRINFO
extern BOOTMGRINFO BootMgrInfo;
+PBOOTMGRINFO GetBootMgrInfo(VOID);
+
VOID
LoadSettings(
_In_opt_ PCSTR CmdLine);
diff --git a/boot/freeldr/freeldr/include/ui.h b/boot/freeldr/freeldr/include/ui.h
index 1b47cc89447..ee613a9ad42 100644
--- a/boot/freeldr/freeldr/include/ui.h
+++ b/boot/freeldr/freeldr/include/ui.h
@@ -103,6 +103,12 @@ VOID
UiMessageBoxCritical(
_In_ PCSTR MessageText);
+ULONG
+UiGetScreenHeight(VOID);
+
+UCHAR
+UiGetMenuBgColor(VOID);
+
/* Loading Progress-Bar Functions ********************************************/
/*
@@ -302,6 +308,9 @@ typedef struct tagUIVTBL
VOID UiInit(const char *CmdLine);
+VOID
+UiResetForSOS(VOID);
+
extern UIVTBL UiVtbl;
/*
diff --git a/boot/freeldr/freeldr/lib/inifile/inifile.c
b/boot/freeldr/freeldr/lib/inifile/inifile.c
index a1bd7c9f91a..64130c8a24d 100644
--- a/boot/freeldr/freeldr/lib/inifile/inifile.c
+++ b/boot/freeldr/freeldr/lib/inifile/inifile.c
@@ -22,6 +22,11 @@
#include <debug.h>
DBG_DEFAULT_CHANNEL(INIFILE);
+PLIST_ENTRY IniGetFileSectionListHead(VOID)
+{
+ return &IniFileSectionListHead;
+}
+
BOOLEAN IniOpenSection(PCSTR SectionName, ULONG_PTR* SectionId)
{
PLIST_ENTRY Entry;
diff --git a/boot/freeldr/freeldr/lib/mm/heap.c b/boot/freeldr/freeldr/lib/mm/heap.c
index 35adcd35039..66a8c6a8f23 100644
--- a/boot/freeldr/freeldr/lib/mm/heap.c
+++ b/boot/freeldr/freeldr/lib/mm/heap.c
@@ -31,8 +31,8 @@ DBG_DEFAULT_CHANNEL(HEAP);
#define REDZONE_LOW(Block) ((ULONG64*)Block->Data + 1)
#define REDZONE_HI(Block) ((ULONG64*)((PUCHAR)Block->Data + 16 +
*REDZONE_SIZE(Block)))
-PVOID FrLdrDefaultHeap;
-PVOID FrLdrTempHeap;
+static PVOID FrLdrDefaultHeap;
+static PVOID FrLdrTempHeap;
typedef struct _BLOCK_DATA
{
@@ -529,6 +529,32 @@ FrLdrHeapFreeEx(
#endif
}
+PVOID
+FrLdrHeapAlloc(SIZE_T MemorySize, ULONG Tag)
+{
+ return FrLdrHeapAllocateEx(FrLdrDefaultHeap, MemorySize, Tag);
+}
+
+VOID
+FrLdrHeapFree(PVOID MemoryPointer, ULONG Tag)
+{
+ FrLdrHeapFreeEx(FrLdrDefaultHeap, MemoryPointer, Tag);
+}
+
+PVOID
+FrLdrTempAlloc(
+ _In_ SIZE_T Size,
+ _In_ ULONG Tag)
+{
+ return FrLdrHeapAllocateEx(FrLdrTempHeap, Size, Tag);
+}
+
+VOID
+FrLdrTempFree(
+ PVOID Allocation, ULONG Tag)
+{
+ FrLdrHeapFreeEx(FrLdrTempHeap, Allocation, Tag);
+}
/* Wrapper functions *********************************************************/
diff --git a/boot/freeldr/freeldr/lib/mm/meminit.c
b/boot/freeldr/freeldr/lib/mm/meminit.c
index 953b6596330..fe3d29ebb12 100644
--- a/boot/freeldr/freeldr/lib/mm/meminit.c
+++ b/boot/freeldr/freeldr/lib/mm/meminit.c
@@ -34,6 +34,19 @@ PFREELDR_MEMORY_DESCRIPTOR BiosMemoryMap;
ULONG BiosMemoryMapEntryCount;
SIZE_T FrLdrImageSize;
+ULONG
+MmGetBiosMemoryMap(_Out_ PFREELDR_MEMORY_DESCRIPTOR *MemoryMap)
+{
+ *MemoryMap = BiosMemoryMap;
+ return BiosMemoryMapEntryCount;
+}
+
+PFN_NUMBER
+MmGetTotalPagesInLookupTable(VOID)
+{
+ return TotalPagesInLookupTable;
+}
+
#if DBG
typedef struct
{
@@ -702,3 +715,9 @@ BOOLEAN MmAreMemoryPagesAvailable(PVOID PageLookupTable, PFN_NUMBER
TotalPageCou
return TRUE;
}
+
+PFN_NUMBER
+MmGetHighestPhysicalPage(VOID)
+{
+ return MmHighestPhysicalPage;
+}
diff --git a/boot/freeldr/freeldr/lib/mm/mm.c b/boot/freeldr/freeldr/lib/mm/mm.c
index 7153c70f62f..92967231d55 100644
--- a/boot/freeldr/freeldr/lib/mm/mm.c
+++ b/boot/freeldr/freeldr/lib/mm/mm.c
@@ -303,3 +303,8 @@ PPAGE_LOOKUP_TABLE_ITEM MmGetMemoryMap(PFN_NUMBER *NoEntries)
return RealPageLookupTable;
}
+PFN_NUMBER
+MmGetLoaderPagesSpanned(VOID)
+{
+ return LoaderPagesSpanned;
+}
diff --git a/boot/freeldr/freeldr/lib/rtl/libsupp.c
b/boot/freeldr/freeldr/lib/rtl/libsupp.c
index 585164d03f3..8ab6d9e0075 100644
--- a/boot/freeldr/freeldr/lib/rtl/libsupp.c
+++ b/boot/freeldr/freeldr/lib/rtl/libsupp.c
@@ -35,7 +35,7 @@ NTAPI
RtlpAllocateMemory(ULONG Bytes,
ULONG Tag)
{
- return FrLdrHeapAllocateEx(FrLdrDefaultHeap, Bytes, Tag);
+ return FrLdrHeapAlloc(Bytes, Tag);
}
@@ -44,7 +44,7 @@ NTAPI
RtlpFreeMemory(PVOID Mem,
ULONG Tag)
{
- FrLdrHeapFreeEx(FrLdrDefaultHeap, Mem, Tag);
+ FrLdrHeapFree(Mem, Tag);
}
NTSTATUS
diff --git a/boot/freeldr/freeldr/miscboot.c b/boot/freeldr/freeldr/miscboot.c
index 5243d8c9186..b080fdfbed1 100644
--- a/boot/freeldr/freeldr/miscboot.c
+++ b/boot/freeldr/freeldr/miscboot.c
@@ -145,8 +145,8 @@ LoadAndBootSector(
BiosDriveNumber = 0;
if (!BiosDriveNumber)
{
- BiosDriveNumber = FrldrBootDrive;
- PartitionNumber = FrldrBootPartition;
+ BiosDriveNumber = FrldrGetBootDrive();
+ PartitionNumber = FrldrGetBootPartition();
}
diff --git a/boot/freeldr/freeldr/ntldr/arch/i386/winldr.c
b/boot/freeldr/freeldr/ntldr/arch/i386/winldr.c
index 0999baf60d0..2a2054ff405 100644
--- a/boot/freeldr/freeldr/ntldr/arch/i386/winldr.c
+++ b/boot/freeldr/freeldr/ntldr/arch/i386/winldr.c
@@ -117,7 +117,7 @@ MempAllocatePageTables(VOID)
// Max number of entries = MaxPageNum >> 10
// FIXME: This is a number to describe ALL physical memory
// and windows doesn't expect ALL memory mapped...
- NumPageTables = TotalPagesInLookupTable >> 10;
+ NumPageTables = MmGetTotalPagesInLookupTable() >> 10;
TRACE("NumPageTables = %d\n", NumPageTables);
diff --git a/boot/freeldr/freeldr/ntldr/winldr.c b/boot/freeldr/freeldr/ntldr/winldr.c
index f3405b70ba3..5dc97f2acb5 100644
--- a/boot/freeldr/freeldr/ntldr/winldr.c
+++ b/boot/freeldr/freeldr/ntldr/winldr.c
@@ -15,12 +15,10 @@
#include <debug.h>
DBG_DEFAULT_CHANNEL(WINDOWS);
-// FIXME: Find a better way to retrieve ARC disk information
-extern ULONG reactos_disk_count;
-extern ARC_DISK_SIGNATURE_EX reactos_arc_disk_info[];
+ULONG ArcGetDiskCount(VOID);
+PARC_DISK_SIGNATURE_EX ArcGetDiskInfo(ULONG Index);
-extern ULONG LoaderPagesSpanned;
-extern BOOLEAN AcpiPresent;
+BOOLEAN IsAcpiPresent(VOID);
extern HEADLESS_LOADER_BLOCK LoaderRedirectionInformation;
extern BOOLEAN WinLdrTerminalConnected;
@@ -199,7 +197,8 @@ WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock,
InitializeListHead(&LoaderBlock->ArcDiskInformation->DiskSignatureListHead);
/* Convert ARC disk information from freeldr to a correct format */
- for (i = 0; i < reactos_disk_count; i++)
+ ULONG DiscCount = ArcGetDiskCount();
+ for (i = 0; i < DiscCount; i++)
{
PARC_DISK_SIGNATURE_EX ArcDiskSig;
@@ -208,12 +207,12 @@ WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock,
if (!ArcDiskSig)
{
ERR("Failed to allocate ARC structure! Ignoring remaining ARC disks. (i
= %lu, DiskCount = %lu)\n",
- i, reactos_disk_count);
+ i, DiscCount);
break;
}
/* Copy the data over */
- RtlCopyMemory(ArcDiskSig, &reactos_arc_disk_info[i],
sizeof(ARC_DISK_SIGNATURE_EX));
+ RtlCopyMemory(ArcDiskSig, ArcGetDiskInfo(i), sizeof(ARC_DISK_SIGNATURE_EX));
/* Set the ARC Name pointer */
ArcDiskSig->DiskSignature.ArcName = PaToVa(ArcDiskSig->ArcName);
@@ -248,7 +247,7 @@ WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock,
Extension->Profile.Status = 2;
/* Check if FreeLdr detected a ACPI table */
- if (AcpiPresent)
+ if (IsAcpiPresent())
{
/* Set the pointer to something for compatibility */
Extension->AcpiTable = (PVOID)1;
@@ -1265,7 +1264,7 @@ LoadAndBootWindowsCommon(
WinLdrSetProcessorContext(OperatingSystemVersion);
/* Save final value of LoaderPagesSpanned */
- LoaderBlock->Extension->LoaderPagesSpanned = LoaderPagesSpanned;
+ LoaderBlock->Extension->LoaderPagesSpanned = MmGetLoaderPagesSpanned();
TRACE("Hello from paged mode, KiSystemStartup %p, LoaderBlockVA %p!\n",
KiSystemStartup, LoaderBlockVA);
diff --git a/boot/freeldr/freeldr/ntldr/winldr.h b/boot/freeldr/freeldr/ntldr/winldr.h
index b18c8f4f78a..0d8ba5fc264 100644
--- a/boot/freeldr/freeldr/ntldr/winldr.h
+++ b/boot/freeldr/freeldr/ntldr/winldr.h
@@ -79,23 +79,6 @@ extern BOOLEAN SosEnabled;
extern BOOLEAN PaeModeOn;
#endif
-FORCEINLINE
-VOID
-UiResetForSOS(VOID)
-{
-#ifdef _M_ARM
- /* Re-initialize the UI */
- UiInitialize(TRUE);
-#else
- /* Reset the UI and switch to MiniTui */
- UiVtbl.UnInitialize();
- UiVtbl = MiniTuiVtbl;
- UiVtbl.Initialize();
-#endif
- /* Disable the progress bar */
- UiProgressBar.Show = FALSE;
-}
-
VOID
NtLdrOutputLoadMsg(
_In_ PCSTR FileName,
diff --git a/boot/freeldr/freeldr/ntldr/wlmemory.c
b/boot/freeldr/freeldr/ntldr/wlmemory.c
index f784e1b2ef5..1be38e97864 100644
--- a/boot/freeldr/freeldr/ntldr/wlmemory.c
+++ b/boot/freeldr/freeldr/ntldr/wlmemory.c
@@ -14,8 +14,6 @@
#include <debug.h>
DBG_DEFAULT_CHANNEL(WINDOWS);
-extern ULONG LoaderPagesSpanned;
-
static const PCSTR MemTypeDesc[] = {
"ExceptionBlock ", // ?
"SystemBlock ", // ?
@@ -47,11 +45,6 @@ static VOID
WinLdrInsertDescriptor(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
IN PMEMORY_ALLOCATION_DESCRIPTOR NewDescriptor);
-extern PFREELDR_MEMORY_DESCRIPTOR BiosMemoryMap;
-extern ULONG BiosMemoryMapEntryCount;
-extern PFN_NUMBER MmLowestPhysicalPage;
-extern PFN_NUMBER MmHighestPhysicalPage;
-
/* GLOBALS ***************************************************************/
MEMORY_ALLOCATION_DESCRIPTOR *Mad;
@@ -114,7 +107,7 @@ MempSetupPagingForRegion(
BasePage, PageCount, Type);
/* Make sure we don't map too high */
- if (BasePage + PageCount > LoaderPagesSpanned) return;
+ if (BasePage + PageCount > MmGetLoaderPagesSpanned()) return;
switch (Type)
{
@@ -310,12 +303,16 @@ WinLdrSetupMemoryLayout(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock)
MadCount++;
}
#endif
+ PFREELDR_MEMORY_DESCRIPTOR BiosMemoryMap;
+ ULONG BiosMemoryMapEntryCount;
+
+ BiosMemoryMapEntryCount = MmGetBiosMemoryMap(&BiosMemoryMap);
/* Now we need to add high descriptors from the bios memory map */
for (i = 0; i < BiosMemoryMapEntryCount; i++)
{
/* Check if its higher than the lookup table */
- if (BiosMemoryMap->BasePage > MmHighestPhysicalPage)
+ if (BiosMemoryMap->BasePage > MmGetHighestPhysicalPage())
{
/* Copy this descriptor */
MempAddMemoryBlock(LoaderBlock,
diff --git a/boot/freeldr/freeldr/options.c b/boot/freeldr/freeldr/options.c
index ac302254bf5..9a604bf90b3 100644
--- a/boot/freeldr/freeldr/options.c
+++ b/boot/freeldr/freeldr/options.c
@@ -244,9 +244,9 @@ VOID DisplayBootTimeOptions(VOID)
/* Display the chosen boot options */
UiDrawText(0,
- UiScreenHeight - 2,
+ UiGetScreenHeight() - 2,
BootOptions,
- ATTR(COLOR_LIGHTBLUE, UiMenuBgColor));
+ ATTR(COLOR_LIGHTBLUE, UiGetMenuBgColor()));
}
VOID AppendBootTimeOptions(PCHAR BootOptions)
diff --git a/boot/freeldr/freeldr/oslist.c b/boot/freeldr/freeldr/oslist.c
index a472345aa87..d38d7f8aa33 100644
--- a/boot/freeldr/freeldr/oslist.c
+++ b/boot/freeldr/freeldr/oslist.c
@@ -75,7 +75,7 @@ InitOperatingSystemList(
return NULL;
/* Retrieve the default OS */
- DefaultOSName = BootMgrInfo.DefaultOs;
+ DefaultOSName = GetBootMgrInfo()->DefaultOs;
/* Now loop through the operating system section and load each item */
for (i = 0; i < Count; ++i)
diff --git a/boot/freeldr/freeldr/settings.c b/boot/freeldr/freeldr/settings.c
index fdf284c460c..510ac25d635 100644
--- a/boot/freeldr/freeldr/settings.c
+++ b/boot/freeldr/freeldr/settings.c
@@ -120,7 +120,7 @@ LoadSettings(
CmdLineParse(CmdLine);
return;
}
- else if (IsListEmpty(&IniFileSectionListHead))
+ else if (IsListEmpty(IniGetFileSectionListHead()))
{
// ERR("LoadSettings() called but no freeldr.ini\n");
return;
@@ -188,4 +188,9 @@ LoadSettings(
}
}
+PBOOTMGRINFO GetBootMgrInfo(VOID)
+{
+ return &BootMgrInfo;
+}
+
/* EOF */
diff --git a/boot/freeldr/freeldr/ui/ui.c b/boot/freeldr/freeldr/ui/ui.c
index 6da20152e32..2583517e847 100644
--- a/boot/freeldr/freeldr/ui/ui.c
+++ b/boot/freeldr/freeldr/ui/ui.c
@@ -636,4 +636,32 @@ BOOLEAN UiEditBox(PCSTR MessageText, PCHAR EditTextBuffer, ULONG
Length)
return UiVtbl.EditBox(MessageText, EditTextBuffer, Length);
}
+VOID
+UiResetForSOS(VOID)
+{
+#ifdef _M_ARM
+ /* Re-initialize the UI */
+ UiInitialize(TRUE);
+#else
+ /* Reset the UI and switch to MiniTui */
+ UiVtbl.UnInitialize();
+ UiVtbl = MiniTuiVtbl;
+ UiVtbl.Initialize();
+#endif
+ /* Disable the progress bar */
+ UiProgressBar.Show = FALSE;
+}
+
+ULONG
+UiGetScreenHeight(VOID)
+{
+ return UiScreenHeight;
+}
+
+UCHAR
+UiGetMenuBgColor(VOID)
+{
+ return UiMenuBgColor;
+}
+
/* EOF */