]> git.proxmox.com Git - mirror_edk2.git/blame - EmulatorPkg/AutoScanPei/AutoScanPei.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / EmulatorPkg / AutoScanPei / AutoScanPei.c
CommitLineData
949f388f 1/*++ @file\r
2\r
54ee6176 3Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
949f388f 4Portions copyright (c) 2011, Apple Inc. All rights reserved.\r
e3ba31da 5SPDX-License-Identifier: BSD-2-Clause-Patent\r
949f388f 6\r
7**/\r
8\r
9#include "PiPei.h"\r
10#include <Ppi/EmuThunk.h>\r
11#include <Ppi/MemoryDiscovered.h>\r
12\r
13#include <Library/DebugLib.h>\r
14#include <Library/PeimEntryPoint.h>\r
15#include <Library/BaseLib.h>\r
16#include <Library/BaseMemoryLib.h>\r
17#include <Library/HobLib.h>\r
18#include <Library/PeiServicesLib.h>\r
19#include <Library/PeiServicesTablePointerLib.h>\r
20\r
21EFI_STATUS\r
22EFIAPI\r
23PeimInitializeAutoScanPei (\r
a550d468
MK
24 IN EFI_PEI_FILE_HANDLE FileHandle,\r
25 IN CONST EFI_PEI_SERVICES **PeiServices\r
949f388f 26 )\r
a550d468 27\r
949f388f 28/*++\r
29\r
30Routine Description:\r
31 Perform a call-back into the SEC simulator to get a memory value\r
32\r
33Arguments:\r
34 FfsHeader - General purpose data available to every PEIM\r
35 PeiServices - General purpose services available to every PEIM.\r
d18d8a1d 36\r
949f388f 37Returns:\r
38 None\r
39\r
40**/\r
41{\r
a550d468
MK
42 EFI_STATUS Status;\r
43 EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor;\r
44 EMU_THUNK_PPI *Thunk;\r
45 UINT64 MemorySize;\r
46 EFI_PHYSICAL_ADDRESS MemoryBase;\r
47 UINTN Index;\r
48 EFI_RESOURCE_ATTRIBUTE_TYPE Attributes;\r
949f388f 49\r
9c7da8d8 50 DEBUG ((DEBUG_ERROR, "Emu Autoscan PEIM Loaded\n"));\r
949f388f 51\r
52 //\r
53 // Get the PEI UNIX Autoscan PPI\r
54 //\r
55 Status = PeiServicesLocatePpi (\r
56 &gEmuThunkPpiGuid, // GUID\r
57 0, // INSTANCE\r
58 &PpiDescriptor, // EFI_PEI_PPI_DESCRIPTOR\r
59 (VOID **)&Thunk // PPI\r
60 );\r
61 ASSERT_EFI_ERROR (Status);\r
62\r
63 Index = 0;\r
64 do {\r
65 Status = Thunk->MemoryAutoScan (Index, &MemoryBase, &MemorySize);\r
66 if (!EFI_ERROR (Status)) {\r
67 Attributes =\r
68 (\r
a550d468
MK
69 EFI_RESOURCE_ATTRIBUTE_PRESENT |\r
70 EFI_RESOURCE_ATTRIBUTE_INITIALIZED |\r
71 EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |\r
72 EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |\r
73 EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |\r
74 EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE\r
949f388f 75 );\r
76\r
77 if (Index == 0) {\r
78 //\r
79 // Register the memory with the PEI Core\r
80 //\r
81 Status = PeiServicesInstallPeiMemory (MemoryBase, MemorySize);\r
82 ASSERT_EFI_ERROR (Status);\r
83\r
84 Attributes |= EFI_RESOURCE_ATTRIBUTE_TESTED;\r
85 }\r
d18d8a1d 86\r
949f388f 87 BuildResourceDescriptorHob (\r
88 EFI_RESOURCE_SYSTEM_MEMORY,\r
89 Attributes,\r
90 MemoryBase,\r
91 MemorySize\r
92 );\r
93 }\r
a550d468 94\r
949f388f 95 Index++;\r
96 } while (!EFI_ERROR (Status));\r
97\r
98 //\r
54ee6176 99 // Build the CPU hob with 57-bit addressing and 16-bits of IO space.\r
949f388f 100 //\r
54ee6176 101 BuildCpuHob (57, 16);\r
d18d8a1d 102\r
949f388f 103 return Status;\r
104}\r