From 9ba1849a9765b049527c0bf60f8a91efe70e2991 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Tue, 20 Jun 2023 22:28:31 +0200 Subject: [PATCH] [HAL][MINIHAL] Minor cleanup in reboot.c files (#5359) And remove pic/processor.c from minihal compilation. --- hal/halarm/generic/reboot.c | 16 +++++++++---- hal/halx86/generic/reboot.c | 23 ++++++++++-------- hal/halx86/minihal/CMakeLists.txt | 1 - hal/halx86/pc98/reboot.c | 35 ++++++++++++++++----------- hal/halx86/pic/processor.c | 1 - hal/halx86/xbox/reboot.c | 39 ++++++++++++++++++++----------- 6 files changed, 71 insertions(+), 44 deletions(-) diff --git a/hal/halarm/generic/reboot.c b/hal/halarm/generic/reboot.c index 51de4862bc8..408313c98c2 100644 --- a/hal/halarm/generic/reboot.c +++ b/hal/halarm/generic/reboot.c @@ -9,35 +9,41 @@ /* INCLUDES ******************************************************************/ #include -#define NDEBUG -#include /* PUBLIC FUNCTIONS **********************************************************/ +#ifndef _MINIHAL_ /* * @implemented */ VOID NTAPI -HalReturnToFirmware(IN FIRMWARE_REENTRY Action) +HalReturnToFirmware( + _In_ FIRMWARE_REENTRY Action) { /* Check what kind of action this is */ switch (Action) { /* All recognized actions */ case HalHaltRoutine: + case HalPowerDownRoutine: + case HalRestartRoutine: case HalRebootRoutine: - + { /* Acquire the display */ InbvAcquireDisplayOwnership(); + // TODO: Reboot + } /* Anything else */ default: - + { /* Print message and break */ DbgPrint("HalReturnToFirmware called!\n"); DbgBreakPoint(); + } } } +#endif // _MINIHAL_ /* EOF */ diff --git a/hal/halx86/generic/reboot.c b/hal/halx86/generic/reboot.c index 587b116c6f0..ca83b3fb733 100644 --- a/hal/halx86/generic/reboot.c +++ b/hal/halx86/generic/reboot.c @@ -10,21 +10,18 @@ /* INCLUDES ******************************************************************/ #include -#define NDEBUG -#include /* PRIVATE FUNCTIONS *********************************************************/ -VOID -NTAPI +static VOID HalpWriteResetCommand(VOID) { /* Generate RESET signal via keyboard controller */ WRITE_PORT_UCHAR((PUCHAR)0x64, 0xFE); }; +DECLSPEC_NORETURN VOID -NTAPI HalpReboot(VOID) { PHYSICAL_ADDRESS PhysicalAddress; @@ -69,39 +66,45 @@ HalpReboot(VOID) /* Halt the CPU */ __halt(); + UNREACHABLE; } /* PUBLIC FUNCTIONS **********************************************************/ +#ifndef _MINIHAL_ /* * @implemented */ VOID NTAPI -HalReturnToFirmware(IN FIRMWARE_REENTRY Action) +HalReturnToFirmware( + _In_ FIRMWARE_REENTRY Action) { /* Check what kind of action this is */ switch (Action) { /* All recognized actions */ case HalHaltRoutine: + case HalPowerDownRoutine: + case HalRestartRoutine: case HalRebootRoutine: - -#ifndef _MINIHAL_ + { /* Acquire the display */ InbvAcquireDisplayOwnership(); -#endif /* Call the internal reboot function */ HalpReboot(); + } /* Anything else */ default: - + { /* Print message and break */ DbgPrint("HalReturnToFirmware called!\n"); DbgBreakPoint(); + } } } +#endif // _MINIHAL_ /* EOF */ diff --git a/hal/halx86/minihal/CMakeLists.txt b/hal/halx86/minihal/CMakeLists.txt index de7f4de04ed..d446bf3cc7b 100644 --- a/hal/halx86/minihal/CMakeLists.txt +++ b/hal/halx86/minihal/CMakeLists.txt @@ -14,7 +14,6 @@ list(APPEND MINI_HAL_SOURCE ../generic/timer.c ../generic/usage.c ../pic/pic.c - ../pic/processor.c ../include/hal.h halinit.c) diff --git a/hal/halx86/pc98/reboot.c b/hal/halx86/pc98/reboot.c index d26fef2d1d2..6944ace3315 100644 --- a/hal/halx86/pc98/reboot.c +++ b/hal/halx86/pc98/reboot.c @@ -9,24 +9,22 @@ #include -#define NDEBUG -#include - /* PRIVATE FUNCTIONS *********************************************************/ -static VOID -DECLSPEC_NORETURN -NTAPI +#ifndef _MINIHAL_ +static DECLSPEC_NORETURN +VOID HalpFreezeSystem(VOID) { - HaliHaltSystem(); - - while (TRUE) - NOTHING; + /* Disable interrupts and halt the CPU */ + _disable(); + __halt(); + UNREACHABLE; } +#endif +DECLSPEC_NORETURN VOID -NTAPI HalpReboot(VOID) { /* Disable interrupts */ @@ -42,10 +40,12 @@ HalpReboot(VOID) /* Halt the CPU */ __halt(); + UNREACHABLE; } /* PUBLIC FUNCTIONS **********************************************************/ +#ifndef _MINIHAL_ VOID NTAPI HalReturnToFirmware( @@ -53,23 +53,30 @@ HalReturnToFirmware( { switch (Action) { + /* All recognized actions */ + case HalHaltRoutine: case HalPowerDownRoutine: HalpFreezeSystem(); - case HalHaltRoutine: + case HalRestartRoutine: case HalRebootRoutine: -#ifndef _MINIHAL_ + { /* Acquire the display */ InbvAcquireDisplayOwnership(); -#endif /* Call the internal reboot function */ HalpReboot(); + } /* Anything else */ default: + { /* Print message and break */ DbgPrint("HalReturnToFirmware called!\n"); DbgBreakPoint(); + } } } +#endif // _MINIHAL_ + +/* EOF */ diff --git a/hal/halx86/pic/processor.c b/hal/halx86/pic/processor.c index 58bf6e0187e..2ea03b57326 100644 --- a/hal/halx86/pic/processor.c +++ b/hal/halx86/pic/processor.c @@ -27,7 +27,6 @@ HaliHaltSystem(VOID) /* FUNCTIONS *****************************************************************/ - /* * @implemented */ diff --git a/hal/halx86/xbox/reboot.c b/hal/halx86/xbox/reboot.c index 1f2dec387c1..21de1d93073 100644 --- a/hal/halx86/xbox/reboot.c +++ b/hal/halx86/xbox/reboot.c @@ -15,14 +15,13 @@ #include "halxbox.h" -#define NDEBUG -#include - /* PRIVATE FUNCTIONS *********************************************************/ -VOID -NTAPI -SMBusWriteByte(UCHAR Address, UCHAR Register, UCHAR Data) +static VOID +SMBusWriteByte( + _In_ UCHAR Address, + _In_ UCHAR Register, + _In_ UCHAR Data) { INT Retries = 50; @@ -63,35 +62,47 @@ SMBusWriteByte(UCHAR Address, UCHAR Register, UCHAR Data) } } +static DECLSPEC_NORETURN VOID -DECLSPEC_NORETURN -NTAPI -HalpXboxPowerAction(IN UCHAR Action) +HalpXboxPowerAction( + _In_ UCHAR Action) { + /* Disable interrupts */ + _disable(); + + /* Send the command */ SMBusWriteByte(SMB_DEVICE_SMC_PIC16LC, SMC_REG_POWER, Action); /* Halt the CPU */ __halt(); + UNREACHABLE; +} - while (TRUE); /* 'noreturn' function */ +DECLSPEC_NORETURN +VOID +HalpReboot(VOID) +{ + HalpXboxPowerAction(SMC_REG_POWER_RESET); } /* PUBLIC FUNCTIONS **********************************************************/ +#ifndef _MINIHAL_ /* * @implemented */ VOID NTAPI -HalReturnToFirmware(IN FIRMWARE_REENTRY Action) +HalReturnToFirmware( + _In_ FIRMWARE_REENTRY Action) { /* Check what kind of action this is */ switch (Action) { - /* All recognized actions */ + /* All recognized actions: call the internal power function */ + case HalHaltRoutine: case HalPowerDownRoutine: { - /* Call the internal power function */ HalpXboxPowerAction(SMC_REG_POWER_SHUTDOWN); } case HalRestartRoutine: @@ -102,6 +113,7 @@ HalReturnToFirmware(IN FIRMWARE_REENTRY Action) { HalpXboxPowerAction(SMC_REG_POWER_RESET); } + /* Anything else */ default: { @@ -111,5 +123,6 @@ HalReturnToFirmware(IN FIRMWARE_REENTRY Action) } } } +#endif // _MINIHAL_ /* EOF */