2 Reset System Library functions for OVMF
4 Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
9 #include <Base.h> // BIT1
11 #include <Library/BaseLib.h> // CpuDeadLoop()
12 #include <Library/DebugLib.h> // ASSERT()
13 #include <Library/IoLib.h> // IoWrite8()
14 #include <Library/ResetSystemLib.h> // ResetCold()
15 #include <Library/TimerLib.h> // MicroSecondDelay()
16 #include <Library/UefiRuntimeLib.h> // EfiGoneVirtual()
17 #include <OvmfPlatforms.h> // PIIX4_PMBA_VALUE
19 static UINTN
MicrovmGedBase (VOID
)
21 VOID
*Address
= (VOID
*) MICROVM_GED_MMIO_BASE_REGS
;
23 if (EfiGoneVirtual ()) {
24 EfiConvertPointer (0, &Address
);
25 DEBUG ((DEBUG_INFO
, "%a: virtual -> 0x%x\n", __FUNCTION__
, Address
));
27 DEBUG ((DEBUG_INFO
, "%a: physical -> 0x%x\n", __FUNCTION__
, Address
));
30 return (UINTN
) Address
;
33 static VOID
MicrovmReset (VOID
)
35 UINTN Address
= MicrovmGedBase();
37 DEBUG ((DEBUG_INFO
, "%a: microvm reset via ged\n", __FUNCTION__
));
38 MmioWrite8 (Address
+ MICROVM_ACPI_GED_REG_RESET
,
39 MICROVM_ACPI_GED_RESET_VALUE
);
43 static VOID
MicrovmShutdown (VOID
)
45 UINTN Address
= MicrovmGedBase();
47 DEBUG ((DEBUG_INFO
, "%a: microvm poweroff via ged\n", __FUNCTION__
));
48 MmioWrite8 (Address
+ MICROVM_ACPI_GED_REG_SLEEP_CTL
,
49 (1 << 5) /* enable bit */ |
50 (5 << 2) /* typ == S5 */);
54 VOID EFIAPI
ResetCold (VOID
)
59 VOID EFIAPI
ResetWarm (VOID
)
66 ResetPlatformSpecific (
77 IN EFI_RESET_TYPE ResetType
,
78 IN EFI_STATUS ResetStatus
,
80 IN VOID
*ResetData OPTIONAL
86 VOID EFIAPI
ResetShutdown (VOID
)