]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/Library/ResetSystemLib/BaseResetShutdown.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / OvmfPkg / Library / ResetSystemLib / BaseResetShutdown.c
CommitLineData
b6d542e9 1/** @file\r
d70cdcf0 2 Base Reset System Library Shutdown API implementation for OVMF.\r
b6d542e9
LE
3\r
4 Copyright (C) 2020, Red Hat, Inc.\r
5 Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>\r
6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
7**/\r
8\r
9#include <Base.h> // BIT13\r
10\r
11#include <Library/BaseLib.h> // CpuDeadLoop()\r
12#include <Library/DebugLib.h> // ASSERT()\r
13#include <Library/IoLib.h> // IoOr16()\r
14#include <Library/PciLib.h> // PciRead16()\r
15#include <Library/ResetSystemLib.h> // ResetShutdown()\r
16#include <OvmfPlatforms.h> // OVMF_HOSTBRIDGE_DID\r
17\r
18/**\r
19 Calling this function causes the system to enter a power state equivalent\r
20 to the ACPI G2/S5 or G3 states.\r
21\r
22 System shutdown should not return, if it returns, it means the system does\r
23 not support shut down reset.\r
24**/\r
25VOID\r
26EFIAPI\r
27ResetShutdown (\r
28 VOID\r
29 )\r
30{\r
ac0a286f
MK
31 UINT16 AcpiPmBaseAddress;\r
32 UINT16 HostBridgeDevId;\r
b6d542e9
LE
33\r
34 AcpiPmBaseAddress = 0;\r
ac0a286f 35 HostBridgeDevId = PciRead16 (OVMF_HOSTBRIDGE_DID);\r
b6d542e9 36 switch (HostBridgeDevId) {\r
ac0a286f
MK
37 case INTEL_82441_DEVICE_ID:\r
38 AcpiPmBaseAddress = PIIX4_PMBA_VALUE;\r
39 break;\r
40 case INTEL_Q35_MCH_DEVICE_ID:\r
41 AcpiPmBaseAddress = ICH9_PMBASE_VALUE;\r
42 break;\r
9afcd48a
SB
43 case CLOUDHV_DEVICE_ID:\r
44 IoWrite8 (CLOUDHV_ACPI_SHUTDOWN_IO_ADDRESS, 5 << 2 | 1 << 5);\r
45 CpuDeadLoop ();\r
ac0a286f
MK
46 default:\r
47 ASSERT (FALSE);\r
48 CpuDeadLoop ();\r
b6d542e9
LE
49 }\r
50\r
51 IoBitFieldWrite16 (AcpiPmBaseAddress + 4, 10, 13, 0);\r
52 IoOr16 (AcpiPmBaseAddress + 4, BIT13);\r
53 CpuDeadLoop ();\r
54}\r