]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/PlatformPei/Platform.c
OvmfPkg/build.sh: Recognize '-p' switch
[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
55cdb67a 38 { EfiReservedMemoryType, 0x004 },\r
991d9563 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
55cdb67a 107 EFI_PHYSICAL_ADDRESS TopOfMemory\r
49ba9447 108 )\r
109{\r
110 //\r
111 // Create Memory Type Information HOB\r
112 //\r
113 BuildGuidDataHob (\r
114 &gEfiMemoryTypeInformationGuid,\r
115 mDefaultMemoryTypeInformation,\r
116 sizeof(mDefaultMemoryTypeInformation)\r
117 );\r
118\r
991d9563 119 //\r
120 // Add PCI IO Port space available for PCI resource allocations.\r
121 //\r
122 BuildResourceDescriptorHob (\r
123 EFI_RESOURCE_IO,\r
124 EFI_RESOURCE_ATTRIBUTE_PRESENT |\r
125 EFI_RESOURCE_ATTRIBUTE_INITIALIZED,\r
126 0x1000,\r
127 0xF000\r
128 );\r
129\r
130 //\r
131 // Add PCI MMIO space available to PCI resource allocations\r
132 //\r
55cdb67a 133 if (TopOfMemory < BASE_2GB) {\r
134 AddIoMemoryBaseSizeHob (BASE_2GB, 0xFEC00000 - BASE_2GB);\r
135 } else {\r
136 AddIoMemoryBaseSizeHob (TopOfMemory, 0xFEC00000 - TopOfMemory);\r
137 }\r
991d9563 138\r
49ba9447 139 //\r
140 // Local APIC range\r
141 //\r
55cdb67a 142 AddIoMemoryBaseSizeHob (0xFEC80000, SIZE_512KB);\r
49ba9447 143\r
144 //\r
145 // I/O APIC range\r
146 //\r
55cdb67a 147 AddIoMemoryBaseSizeHob (0xFEC00000, SIZE_512KB);\r
49ba9447 148\r
149 //\r
150 // Video memory + Legacy BIOS region\r
151 //\r
55cdb67a 152 AddIoMemoryRangeHob (0x0A0000, BASE_1MB);\r
49ba9447 153}\r
154\r
155\r
156VOID\r
157MiscInitialization (\r
158 )\r
159{\r
160 //\r
161 // Disable A20 Mask\r
162 //\r
55cdb67a 163 IoOr8 (0x92, BIT1);\r
49ba9447 164\r
165 //\r
166 // Build the CPU hob with 36-bit addressing and 16-bits of IO space.\r
167 //\r
168 BuildCpuHob (36, 16);\r
169}\r
170\r
171\r
77ba993c 172VOID\r
173ReserveEmuVariableNvStore (\r
174 )\r
175{\r
176 EFI_PHYSICAL_ADDRESS VariableStore;\r
177\r
178 //\r
179 // Allocate storage for NV variables early on so it will be\r
180 // at a consistent address. Since VM memory is preserved\r
181 // across reboots, this allows the NV variable storage to survive\r
182 // a VM reboot.\r
183 //\r
184 VariableStore =\r
185 (EFI_PHYSICAL_ADDRESS)(UINTN)\r
27f58ea1 186 AllocateRuntimePool (\r
29a3f139 187 2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)\r
27f58ea1 188 );\r
77ba993c 189 DEBUG ((EFI_D_INFO,\r
190 "Reserved variable store memory: 0x%lX; size: %dkb\n",\r
191 VariableStore,\r
29a3f139 192 (2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)) / 1024\r
77ba993c 193 ));\r
194 PcdSet64 (PcdEmuVariableNvStoreReserved, VariableStore);\r
195}\r
196\r
197\r
49ba9447 198/**\r
199 Perform Platform PEI initialization.\r
200\r
201 @param FileHandle Handle of the file being invoked.\r
202 @param PeiServices Describes the list of possible PEI Services.\r
203\r
204 @return EFI_SUCCESS The PEIM initialized successfully.\r
205\r
206**/\r
207EFI_STATUS\r
208EFIAPI\r
209InitializePlatform (\r
210 IN EFI_PEI_FILE_HANDLE FileHandle,\r
211 IN CONST EFI_PEI_SERVICES **PeiServices\r
212 )\r
213{\r
55cdb67a 214 EFI_PHYSICAL_ADDRESS TopOfMemory;\r
215\r
49ba9447 216 DEBUG ((EFI_D_ERROR, "Platform PEIM Loaded\n"));\r
217\r
55cdb67a 218 TopOfMemory = MemDetect ();\r
49ba9447 219\r
77ba993c 220 ReserveEmuVariableNvStore ();\r
221\r
49ba9447 222 PeiFvInitialization ();\r
223\r
55cdb67a 224 MemMapInitialization (TopOfMemory);\r
49ba9447 225\r
226 MiscInitialization ();\r
227\r
228 return EFI_SUCCESS;\r
229}\r