diff --git a/boot/freeldr/freeldr/arch/uefi/uefildr.c b/boot/freeldr/freeldr/arch/uefi/uefildr.c index 7764ecfd039..582fc13334d 100644 --- a/boot/freeldr/freeldr/arch/uefi/uefildr.c +++ b/boot/freeldr/freeldr/arch/uefi/uefildr.c @@ -104,15 +104,32 @@ ExecuteLoaderCleanly(PVOID PreviousStack) UNREACHABLE; } -#ifndef _M_ARM DECLSPEC_NORETURN VOID __cdecl Reboot(VOID) { - //TODO: Replace with a true firmware reboot eventually - WARN("Something has gone wrong - halting FreeLoader\n"); + WARN("Performing cold reset\n"); + + if (GlobalSystemTable && GlobalSystemTable->RuntimeServices) + { + /* Attempt a native firmware cold reset */ + GlobalSystemTable->RuntimeServices->ResetSystem( + EfiResetCold, + EFI_SUCCESS, + 0, + NULL + ); + } + + /* Fallback dead-loop if runtime services are missing or fail to respond */ for (;;) { +#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_AMD64)) + __halt(); +#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) + __asm__ __volatile__("hlt"); +#else + /* Fallback placeholder loop for other platforms */ NOTHING; +#endif } } -#endif diff --git a/boot/freeldr/freeldr/include/arch/arm/hardware.h b/boot/freeldr/freeldr/include/arch/arm/hardware.h index a821391265a..08ccec1c2e5 100644 --- a/boot/freeldr/freeldr/include/arch/arm/hardware.h +++ b/boot/freeldr/freeldr/include/arch/arm/hardware.h @@ -34,12 +34,6 @@ extern ULONG gDiskReadBuffer, gFileSysBuffer; #define DriveMapGetBiosDriveNumber(DeviceName) 0 -DECLSPEC_NORETURN -FORCEINLINE VOID Reboot(VOID) -{ - DbgBreakPoint(); -} - typedef struct _PAGE_TABLE_ARM { HARDWARE_PTE_ARMV6 Pte[1024];