]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFsp2Pkg/Library/BaseFspPlatformLib/FspPlatformMemory.c
IntelFsp2Pkg: Replace BSD License with BSD+Patent License
[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
28 IN EFI_GUID *OwnerGuid\r
29 )\r
30{\r
31 EFI_PEI_HOB_POINTERS Hob;\r
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
44 (CompareGuid (&Hob.ResourceDescriptor->Owner, OwnerGuid))) {\r
e37bb20c 45 return Hob.ResourceDescriptor;\r
cf1d4549
JY
46 }\r
47 }\r
48 Hob.Raw = GET_NEXT_HOB (Hob);\r
49 }\r
e37bb20c 50\r
cf1d4549
JY
51 return NULL;\r
52}\r
53\r
54/**\r
55 Get system memory from HOB.\r
56\r
57 @param[in,out] LowMemoryLength less than 4G memory length\r
58 @param[in,out] HighMemoryLength greater than 4G memory length\r
59**/\r
60VOID\r
61EFIAPI\r
62FspGetSystemMemorySize (\r
63 IN OUT UINT64 *LowMemoryLength,\r
64 IN OUT UINT64 *HighMemoryLength\r
65 )\r
66{\r
67 EFI_STATUS Status;\r
68 EFI_BOOT_MODE BootMode;\r
69 EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttribute;\r
70 EFI_PEI_HOB_POINTERS Hob;\r
71\r
72 ResourceAttribute = (\r
73 EFI_RESOURCE_ATTRIBUTE_PRESENT |\r
74 EFI_RESOURCE_ATTRIBUTE_INITIALIZED |\r
75 EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |\r
76 EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |\r
77 EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |\r
78 EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE\r
79 );\r
80\r
81 Status = PeiServicesGetBootMode (&BootMode);\r
82 ASSERT_EFI_ERROR (Status);\r
83\r
84 if (BootMode != BOOT_ON_S3_RESUME) {\r
85 ResourceAttribute |= EFI_RESOURCE_ATTRIBUTE_TESTED;\r
86 }\r
87\r
88 *HighMemoryLength = 0;\r
89 *LowMemoryLength = SIZE_1MB;\r
90 //\r
91 // Get the HOB list for processing\r
92 //\r
93 Hob.Raw = GetHobList ();\r
94\r
95 //\r
96 // Collect memory ranges\r
97 //\r
98 while (!END_OF_HOB_LIST (Hob)) {\r
99 if (Hob.Header->HobType == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {\r
100 if ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) ||\r
101 ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_MEMORY_RESERVED) &&\r
102 (Hob.ResourceDescriptor->ResourceAttribute == ResourceAttribute))) {\r
103 //\r
104 // Need memory above 1MB to be collected here\r
105 //\r
106 if (Hob.ResourceDescriptor->PhysicalStart >= BASE_1MB &&\r
107 Hob.ResourceDescriptor->PhysicalStart < (EFI_PHYSICAL_ADDRESS) BASE_4GB) {\r
108 *LowMemoryLength += (UINT64) (Hob.ResourceDescriptor->ResourceLength);\r
109 } else if (Hob.ResourceDescriptor->PhysicalStart >= (EFI_PHYSICAL_ADDRESS) BASE_4GB) {\r
110 *HighMemoryLength += (UINT64) (Hob.ResourceDescriptor->ResourceLength);\r
111 }\r
112 }\r
113 }\r
114 Hob.Raw = GET_NEXT_HOB (Hob);\r
115 }\r
116}\r