]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/PlatformPei/Platform.c
OVMF BDS: Don't call BdsLibSaveMemoryTypeInformation
[mirror_edk2.git] / OvmfPkg / PlatformPei / Platform.c
CommitLineData
49ba9447 1/**@file\r
2 Platform PEI driver\r
3\r
56d7640a
HT
4 Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
5 This program and the accompanying materials\r
49ba9447 6 are licensed and made available under the terms and conditions of the BSD License\r
7 which accompanies this distribution. The full text of the license may be found at\r
8 http://opensource.org/licenses/bsd-license.php\r
9\r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14\r
15//\r
16// The package level header files this module uses\r
17//\r
18#include <PiPei.h>\r
19\r
20//\r
21// The Library classes this module consumes\r
22//\r
23#include <Library/DebugLib.h>\r
24#include <Library/HobLib.h>\r
25#include <Library/IoLib.h>\r
77ba993c 26#include <Library/MemoryAllocationLib.h>\r
27#include <Library/PcdLib.h>\r
49ba9447 28#include <Library/PciLib.h>\r
29#include <Library/PeimEntryPoint.h>\r
30#include <Library/ResourcePublicationLib.h>\r
31#include <Guid/MemoryTypeInformation.h>\r
32\r
33#include "Platform.h"\r
34\r
35EFI_MEMORY_TYPE_INFORMATION mDefaultMemoryTypeInformation[] = {\r
36 { EfiACPIMemoryNVS, 0x004 },\r
991d9563 37 { EfiACPIReclaimMemory, 0x008 },\r
38 { EfiReservedMemoryType, 0x004 }, \r
39 { EfiRuntimeServicesData, 0x024 },\r
40 { EfiRuntimeServicesCode, 0x030 },\r
41 { EfiBootServicesCode, 0x180 },\r
42 { EfiBootServicesData, 0xF00 },\r
49ba9447 43 { EfiMaxMemoryType, 0x000 }\r
44};\r
45\r
46\r
47VOID\r
48AddIoMemoryBaseSizeHob (\r
49 EFI_PHYSICAL_ADDRESS MemoryBase,\r
50 UINT64 MemorySize\r
51 )\r
52{\r
991d9563 53 BuildResourceDescriptorHob (\r
54 EFI_RESOURCE_MEMORY_MAPPED_IO,\r
49ba9447 55 EFI_RESOURCE_ATTRIBUTE_PRESENT |\r
56 EFI_RESOURCE_ATTRIBUTE_INITIALIZED |\r
57 EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |\r
991d9563 58 EFI_RESOURCE_ATTRIBUTE_TESTED,\r
49ba9447 59 MemoryBase,\r
60 MemorySize\r
61 );\r
62}\r
63\r
64\r
65VOID\r
66AddIoMemoryRangeHob (\r
67 EFI_PHYSICAL_ADDRESS MemoryBase,\r
68 EFI_PHYSICAL_ADDRESS MemoryLimit\r
69 )\r
70{\r
71 AddIoMemoryBaseSizeHob (MemoryBase, (UINT64)(MemoryLimit - MemoryBase));\r
72}\r
73\r
74\r
75VOID\r
76AddMemoryBaseSizeHob (\r
77 EFI_PHYSICAL_ADDRESS MemoryBase,\r
78 UINT64 MemorySize\r
79 )\r
80{\r
991d9563 81 BuildResourceDescriptorHob (\r
82 EFI_RESOURCE_SYSTEM_MEMORY,\r
49ba9447 83 EFI_RESOURCE_ATTRIBUTE_PRESENT |\r
84 EFI_RESOURCE_ATTRIBUTE_INITIALIZED |\r
85 EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |\r
86 EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |\r
87 EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |\r
88 EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE |\r
991d9563 89 EFI_RESOURCE_ATTRIBUTE_TESTED,\r
49ba9447 90 MemoryBase,\r
91 MemorySize\r
92 );\r
93}\r
94\r
95\r
96VOID\r
97AddMemoryRangeHob (\r
98 EFI_PHYSICAL_ADDRESS MemoryBase,\r
99 EFI_PHYSICAL_ADDRESS MemoryLimit\r
100 )\r
101{\r
102 AddMemoryBaseSizeHob (MemoryBase, (UINT64)(MemoryLimit - MemoryBase));\r
103}\r
104\r
49ba9447 105VOID\r
106MemMapInitialization (\r
107 )\r
108{\r
109 //\r
110 // Create Memory Type Information HOB\r
111 //\r
112 BuildGuidDataHob (\r
113 &gEfiMemoryTypeInformationGuid,\r
114 mDefaultMemoryTypeInformation,\r
115 sizeof(mDefaultMemoryTypeInformation)\r
116 );\r
117\r
991d9563 118 //\r
119 // Add PCI IO Port space available for PCI resource allocations.\r
120 //\r
121 BuildResourceDescriptorHob (\r
122 EFI_RESOURCE_IO,\r
123 EFI_RESOURCE_ATTRIBUTE_PRESENT |\r
124 EFI_RESOURCE_ATTRIBUTE_INITIALIZED,\r
125 0x1000,\r
126 0xF000\r
127 );\r
128\r
129 //\r
130 // Add PCI MMIO space available to PCI resource allocations\r
131 //\r
132 AddIoMemoryBaseSizeHob (0x80000000, 0xFEC00000 - 0x80000000);\r
133\r
49ba9447 134 //\r
135 // Local APIC range\r
136 //\r
137 AddIoMemoryBaseSizeHob (0xFEC80000, 0x80000);\r
138\r
139 //\r
140 // I/O APIC range\r
141 //\r
142 AddIoMemoryBaseSizeHob (0xFEC00000, 0x80000);\r
143\r
144 //\r
145 // Video memory + Legacy BIOS region\r
146 //\r
a4437ffd 147 AddIoMemoryRangeHob (0x0A0000, 0x100000);\r
49ba9447 148}\r
149\r
150\r
151VOID\r
152MiscInitialization (\r
153 )\r
154{\r
155 //\r
156 // Disable A20 Mask\r
157 //\r
158 IoWrite8 (0x92, (UINT8) (IoRead8 (0x92) | 0x02));\r
159\r
160 //\r
161 // Build the CPU hob with 36-bit addressing and 16-bits of IO space.\r
162 //\r
163 BuildCpuHob (36, 16);\r
164}\r
165\r
166\r
77ba993c 167VOID\r
168ReserveEmuVariableNvStore (\r
169 )\r
170{\r
171 EFI_PHYSICAL_ADDRESS VariableStore;\r
172\r
173 //\r
174 // Allocate storage for NV variables early on so it will be\r
175 // at a consistent address. Since VM memory is preserved\r
176 // across reboots, this allows the NV variable storage to survive\r
177 // a VM reboot.\r
178 //\r
179 VariableStore =\r
180 (EFI_PHYSICAL_ADDRESS)(UINTN)\r
27f58ea1 181 AllocateRuntimePool (\r
29a3f139 182 2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)\r
27f58ea1 183 );\r
77ba993c 184 DEBUG ((EFI_D_INFO,\r
185 "Reserved variable store memory: 0x%lX; size: %dkb\n",\r
186 VariableStore,\r
29a3f139 187 (2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)) / 1024\r
77ba993c 188 ));\r
189 PcdSet64 (PcdEmuVariableNvStoreReserved, VariableStore);\r
190}\r
191\r
192\r
49ba9447 193/**\r
194 Perform Platform PEI initialization.\r
195\r
196 @param FileHandle Handle of the file being invoked.\r
197 @param PeiServices Describes the list of possible PEI Services.\r
198\r
199 @return EFI_SUCCESS The PEIM initialized successfully.\r
200\r
201**/\r
202EFI_STATUS\r
203EFIAPI\r
204InitializePlatform (\r
205 IN EFI_PEI_FILE_HANDLE FileHandle,\r
206 IN CONST EFI_PEI_SERVICES **PeiServices\r
207 )\r
208{\r
209 DEBUG ((EFI_D_ERROR, "Platform PEIM Loaded\n"));\r
210\r
211 MemDetect ();\r
212\r
77ba993c 213 ReserveEmuVariableNvStore ();\r
214\r
49ba9447 215 PeiFvInitialization ();\r
216\r
217 MemMapInitialization ();\r
218\r
219 MiscInitialization ();\r
220\r
221 return EFI_SUCCESS;\r
222}\r