]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/Library/ResetSystemLib/ResetSystemLibMicrovm.c
OvmfPkg: Apply uncrustify changes
[mirror_edk2.git] / OvmfPkg / Library / ResetSystemLib / ResetSystemLibMicrovm.c
CommitLineData
1d3e89f3
GH
1/** @file\r
2 Reset System Library functions for OVMF\r
3\r
4 Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>\r
5 SPDX-License-Identifier: BSD-2-Clause-Patent\r
6\r
7**/\r
8\r
9#include <Base.h> // BIT1\r
10\r
11#include <Library/BaseLib.h> // CpuDeadLoop()\r
12#include <Library/DebugLib.h> // ASSERT()\r
13#include <Library/IoLib.h> // IoWrite8()\r
14#include <Library/ResetSystemLib.h> // ResetCold()\r
15#include <Library/TimerLib.h> // MicroSecondDelay()\r
16#include <Library/UefiRuntimeLib.h> // EfiGoneVirtual()\r
17#include <OvmfPlatforms.h> // PIIX4_PMBA_VALUE\r
18\r
ac0a286f
MK
19static UINTN\r
20MicrovmGedBase (\r
21 VOID\r
22 )\r
1d3e89f3 23{\r
ac0a286f 24 VOID *Address = (VOID *)(UINTN)MICROVM_GED_MMIO_BASE_REGS;\r
1d3e89f3
GH
25\r
26 if (EfiGoneVirtual ()) {\r
27 EfiConvertPointer (0, &Address);\r
28 DEBUG ((DEBUG_INFO, "%a: virtual -> 0x%x\n", __FUNCTION__, Address));\r
29 } else {\r
30 DEBUG ((DEBUG_INFO, "%a: physical -> 0x%x\n", __FUNCTION__, Address));\r
31 }\r
32\r
ac0a286f 33 return (UINTN)Address;\r
1d3e89f3
GH
34}\r
35\r
ac0a286f
MK
36static VOID\r
37MicrovmReset (\r
38 VOID\r
39 )\r
1d3e89f3 40{\r
ac0a286f 41 UINTN Address = MicrovmGedBase ();\r
1d3e89f3
GH
42\r
43 DEBUG ((DEBUG_INFO, "%a: microvm reset via ged\n", __FUNCTION__));\r
ac0a286f
MK
44 MmioWrite8 (\r
45 Address + MICROVM_ACPI_GED_REG_RESET,\r
46 MICROVM_ACPI_GED_RESET_VALUE\r
47 );\r
1d3e89f3
GH
48 CpuDeadLoop ();\r
49}\r
50\r
ac0a286f
MK
51static VOID\r
52MicrovmShutdown (\r
53 VOID\r
54 )\r
1d3e89f3 55{\r
ac0a286f 56 UINTN Address = MicrovmGedBase ();\r
1d3e89f3
GH
57\r
58 DEBUG ((DEBUG_INFO, "%a: microvm poweroff via ged\n", __FUNCTION__));\r
ac0a286f
MK
59 MmioWrite8 (\r
60 Address + MICROVM_ACPI_GED_REG_SLEEP_CTL,\r
61 (1 << 5) /* enable bit */ |\r
62 (5 << 2) /* typ == S5 */\r
63 );\r
1d3e89f3
GH
64 CpuDeadLoop ();\r
65}\r
66\r
ac0a286f
MK
67VOID EFIAPI\r
68ResetCold (\r
69 VOID\r
70 )\r
1d3e89f3 71{\r
ac0a286f 72 MicrovmReset ();\r
1d3e89f3
GH
73}\r
74\r
ac0a286f
MK
75VOID EFIAPI\r
76ResetWarm (\r
77 VOID\r
78 )\r
1d3e89f3 79{\r
ac0a286f 80 MicrovmReset ();\r
1d3e89f3
GH
81}\r
82\r
83VOID\r
84EFIAPI\r
85ResetPlatformSpecific (\r
ac0a286f
MK
86 IN UINTN DataSize,\r
87 IN VOID *ResetData\r
1d3e89f3
GH
88 )\r
89{\r
ac0a286f 90 MicrovmReset ();\r
1d3e89f3
GH
91}\r
92\r
93VOID\r
94EFIAPI\r
95ResetSystem (\r
ac0a286f
MK
96 IN EFI_RESET_TYPE ResetType,\r
97 IN EFI_STATUS ResetStatus,\r
98 IN UINTN DataSize,\r
99 IN VOID *ResetData OPTIONAL\r
1d3e89f3
GH
100 )\r
101{\r
ac0a286f 102 MicrovmReset ();\r
1d3e89f3
GH
103}\r
104\r
ac0a286f
MK
105VOID EFIAPI\r
106ResetShutdown (\r
107 VOID\r
108 )\r
1d3e89f3 109{\r
ac0a286f 110 MicrovmShutdown ();\r
1d3e89f3 111}\r