]> git.proxmox.com Git - mirror_edk2.git/blame - EmulatorPkg/ResetRuntimeDxe/Reset.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / EmulatorPkg / ResetRuntimeDxe / Reset.c
CommitLineData
949f388f 1/*++ @file\r
2 Reset Architectural Protocol as defined in UEFI/PI under Emulation\r
3\r
4Copyright (c) 2004 - 2009, Intel Corporation. All rights reserved.<BR>\r
5Portions copyright (c) 2010 - 2011, Apple Inc. All rights reserved.\r
e3ba31da 6SPDX-License-Identifier: BSD-2-Clause-Patent\r
949f388f 7\r
8**/\r
9\r
10#include <PiDxe.h>\r
11\r
12#include <Library/BaseLib.h>\r
13#include <Library/DebugLib.h>\r
14#include <Library/UefiLib.h>\r
15#include <Library/UefiDriverEntryPoint.h>\r
16#include <Library/MemoryAllocationLib.h>\r
17#include <Library/UefiBootServicesTableLib.h>\r
18#include <Library/EmuThunkLib.h>\r
19\r
20#include <Protocol/Reset.h>\r
21\r
949f388f 22VOID\r
23EFIAPI\r
24EmuResetSystem (\r
a550d468
MK
25 IN EFI_RESET_TYPE ResetType,\r
26 IN EFI_STATUS ResetStatus,\r
27 IN UINTN DataSize,\r
28 IN VOID *ResetData OPTIONAL\r
949f388f 29 )\r
30{\r
31 EFI_STATUS Status;\r
32 UINTN HandleCount;\r
33 EFI_HANDLE *HandleBuffer;\r
34 UINTN Index;\r
35\r
36 //\r
37 // Disconnect all\r
38 //\r
39 Status = gBS->LocateHandleBuffer (\r
40 AllHandles,\r
41 NULL,\r
42 NULL,\r
43 &HandleCount,\r
44 &HandleBuffer\r
45 );\r
46 if (!EFI_ERROR (Status)) {\r
47 for (Index = 0; Index < HandleCount; Index++) {\r
48 Status = gBS->DisconnectController (HandleBuffer[Index], NULL, NULL);\r
49 }\r
d18d8a1d 50\r
949f388f 51 gBS->FreePool (HandleBuffer);\r
52 }\r
53\r
949f388f 54 //\r
55 // Discard ResetType, always return 0 as exit code\r
56 //\r
57 gEmuThunk->Exit (0);\r
58\r
59 //\r
60 // Should never go here\r
61 //\r
62 ASSERT (FALSE);\r
63\r
64 return;\r
65}\r
66\r
949f388f 67EFI_STATUS\r
68EFIAPI\r
69InitializeEmuReset (\r
70 IN EFI_HANDLE ImageHandle,\r
71 IN EFI_SYSTEM_TABLE *SystemTable\r
72 )\r
a550d468 73\r
949f388f 74/*++\r
75\r
76Routine Description:\r
77\r
78\r
79Arguments:\r
80\r
81 ImageHandle of the loaded driver\r
82 Pointer to the System Table\r
83\r
84Returns:\r
85\r
86 Status\r
87**/\r
88{\r
89 EFI_STATUS Status;\r
90 EFI_HANDLE Handle;\r
91\r
92 SystemTable->RuntimeServices->ResetSystem = EmuResetSystem;\r
93\r
94 Handle = NULL;\r
95 Status = gBS->InstallMultipleProtocolInterfaces (\r
96 &Handle,\r
97 &gEfiResetArchProtocolGuid,\r
98 NULL,\r
99 NULL\r
100 );\r
101 ASSERT_EFI_ERROR (Status);\r
102\r
103 return Status;\r
104}\r