https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2f9dde09e1c94a9f3f4051d7a8a0ab8b286e7b62
commit 2f9dde09e1c94a9f3f4051d7a8a0ab8b286e7b62 Author: Timo Kreuzer <timo.kreu...@reactos.org> AuthorDate: Wed Oct 2 12:32:36 2024 +0200 Commit: Timo Kreuzer <timo.kreu...@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 */