]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFsp2Pkg/Library/BaseFspPlatformLib/FspPlatformMemory.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / IntelFsp2Pkg / Library / BaseFspPlatformLib / FspPlatformMemory.c
CommitLineData
cf1d4549
JY
1/** @file\r
2\r
e37bb20c 3 Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>\r
9672cd30 4 SPDX-License-Identifier: BSD-2-Clause-Patent\r
cf1d4549
JY
5\r
6**/\r
7\r
8#include <PiPei.h>\r
9#include <Library/BaseLib.h>\r
10#include <Library/BaseMemoryLib.h>\r
11#include <Library/MemoryAllocationLib.h>\r
12#include <Library/DebugLib.h>\r
13#include <Library/PcdLib.h>\r
14#include <Library/HobLib.h>\r
15#include <Library/PeiServicesLib.h>\r
16#include <Library/FspCommonLib.h>\r
17#include <FspGlobalData.h>\r
18#include <FspEas.h>\r
19\r
20/**\r
21 Get system memory resource descriptor by owner.\r
22\r
23 @param[in] OwnerGuid resource owner guid\r
24**/\r
25EFI_HOB_RESOURCE_DESCRIPTOR *\r
26EFIAPI\r
27FspGetResourceDescriptorByOwner (\r
111f2228 28 IN EFI_GUID *OwnerGuid\r
cf1d4549
JY
29 )\r
30{\r
111f2228 31 EFI_PEI_HOB_POINTERS Hob;\r
cf1d4549
JY
32\r
33 //\r
34 // Get the HOB list for processing\r
35 //\r
36 Hob.Raw = GetHobList ();\r
37\r
38 //\r
39 // Collect memory ranges\r
40 //\r
41 while (!END_OF_HOB_LIST (Hob)) {\r
42 if (Hob.Header->HobType == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {\r
43 if ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_MEMORY_RESERVED) && \\r
111f2228
MK
44 (CompareGuid (&Hob.ResourceDescriptor->Owner, OwnerGuid)))\r
45 {\r
46 return Hob.ResourceDescriptor;\r
cf1d4549
JY
47 }\r
48 }\r
111f2228 49\r
cf1d4549
JY
50 Hob.Raw = GET_NEXT_HOB (Hob);\r
51 }\r
e37bb20c 52\r
cf1d4549
JY
53 return NULL;\r
54}\r
55\r
56/**\r
57 Get system memory from HOB.\r
58\r
59 @param[in,out] LowMemoryLength less than 4G memory length\r
60 @param[in,out] HighMemoryLength greater than 4G memory length\r
61**/\r
62VOID\r
63EFIAPI\r
64FspGetSystemMemorySize (\r
111f2228
MK
65 IN OUT UINT64 *LowMemoryLength,\r
66 IN OUT UINT64 *HighMemoryLength\r
cf1d4549
JY
67 )\r
68{\r
111f2228
MK
69 EFI_STATUS Status;\r
70 EFI_BOOT_MODE BootMode;\r
71 EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttribute;\r
72 EFI_PEI_HOB_POINTERS Hob;\r
cf1d4549
JY
73\r
74 ResourceAttribute = (\r
75 EFI_RESOURCE_ATTRIBUTE_PRESENT |\r
76 EFI_RESOURCE_ATTRIBUTE_INITIALIZED |\r
77 EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |\r
78 EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |\r
79 EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |\r
80 EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE\r
81 );\r
82\r
83 Status = PeiServicesGetBootMode (&BootMode);\r
84 ASSERT_EFI_ERROR (Status);\r
85\r
86 if (BootMode != BOOT_ON_S3_RESUME) {\r
87 ResourceAttribute |= EFI_RESOURCE_ATTRIBUTE_TESTED;\r
88 }\r
89\r
90 *HighMemoryLength = 0;\r
91 *LowMemoryLength = SIZE_1MB;\r
92 //\r
93 // Get the HOB list for processing\r
94 //\r
95 Hob.Raw = GetHobList ();\r
96\r
97 //\r
98 // Collect memory ranges\r
99 //\r
100 while (!END_OF_HOB_LIST (Hob)) {\r
101 if (Hob.Header->HobType == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {\r
102 if ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) ||\r
103 ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_MEMORY_RESERVED) &&\r
111f2228
MK
104 (Hob.ResourceDescriptor->ResourceAttribute == ResourceAttribute)))\r
105 {\r
cf1d4549
JY
106 //\r
107 // Need memory above 1MB to be collected here\r
108 //\r
111f2228
MK
109 if ((Hob.ResourceDescriptor->PhysicalStart >= BASE_1MB) &&\r
110 (Hob.ResourceDescriptor->PhysicalStart < (EFI_PHYSICAL_ADDRESS)BASE_4GB))\r
111 {\r
112 *LowMemoryLength += (UINT64)(Hob.ResourceDescriptor->ResourceLength);\r
113 } else if (Hob.ResourceDescriptor->PhysicalStart >= (EFI_PHYSICAL_ADDRESS)BASE_4GB) {\r
114 *HighMemoryLength += (UINT64)(Hob.ResourceDescriptor->ResourceLength);\r
cf1d4549
JY
115 }\r
116 }\r
117 }\r
111f2228 118\r
cf1d4549
JY
119 Hob.Raw = GET_NEXT_HOB (Hob);\r
120 }\r
121}\r