[reboot] Generalise warm reboot indicator to a flags bitmask

Allow for the possibility of additional reboot types by extending the
reboot() function to use a flags bitmask rather than a single flag.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2025-04-28 13:42:32 +01:00
parent ba2135d0fd
commit 7eaa2daf6f
6 changed files with 24 additions and 15 deletions

View File

@@ -37,13 +37,15 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
/**
* Reboot system
*
* @v warm Perform a warm reboot
* @v flags Reboot flags
*/
static void sbi_reboot ( int warm ) {
static void sbi_reboot ( int flags ) {
struct sbi_return ret;
int warm;
int rc;
/* Reboot system */
warm = ( flags & REBOOT_WARM );
ret = sbi_ecall_2 ( SBI_SRST, SBI_SRST_SYSTEM_RESET,
( warm ? SBI_RESET_WARM : SBI_RESET_COLD ), 0 );

View File

@@ -38,14 +38,14 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
/**
* Reboot system
*
* @v warm Perform a warm reboot
* @v flags Reboot flags
*/
static void bios_reboot ( int warm ) {
uint16_t flag;
static void bios_reboot ( int flags ) {
uint16_t type;
/* Configure BIOS for cold/warm reboot */
flag = ( warm ? BDA_REBOOT_WARM : 0 );
put_real ( flag, BDA_SEG, BDA_REBOOT );
type = ( ( flags & REBOOT_WARM ) ? BDA_REBOOT_WARM : 0 );
put_real ( type, BDA_SEG, BDA_REBOOT );
/* Jump to system reset vector */
__asm__ __volatile__ ( REAL_CODE ( "ljmp $0xf000, $0xfff0" ) : );