]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/PlatformPei/Platform.c
Update the copyright notice format
[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
37 { EfiACPIReclaimMemory, 0x01C },\r
38 { EfiRuntimeServicesData, 0x050 },\r
39 { EfiRuntimeServicesCode, 0x020 },\r
40 { EfiBootServicesCode, 0x0F0 },\r
41 { EfiBootServicesData, 0xA00 },\r
42 { EfiMaxMemoryType, 0x000 }\r
43};\r
44\r
45\r
46VOID\r
47AddIoMemoryBaseSizeHob (\r
48 EFI_PHYSICAL_ADDRESS MemoryBase,\r
49 UINT64 MemorySize\r
50 )\r
51{\r
52 STATIC EFI_RESOURCE_ATTRIBUTE_TYPE Attributes =\r
53 (\r
54 EFI_RESOURCE_ATTRIBUTE_PRESENT |\r
55 EFI_RESOURCE_ATTRIBUTE_INITIALIZED |\r
56 EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |\r
57 EFI_RESOURCE_ATTRIBUTE_TESTED\r
58 );\r
59\r
60 BuildResourceDescriptorHob (\r
61 EFI_RESOURCE_MEMORY_MAPPED_IO,\r
62 Attributes,\r
63 MemoryBase,\r
64 MemorySize\r
65 );\r
66}\r
67\r
68\r
69VOID\r
70AddIoMemoryRangeHob (\r
71 EFI_PHYSICAL_ADDRESS MemoryBase,\r
72 EFI_PHYSICAL_ADDRESS MemoryLimit\r
73 )\r
74{\r
75 AddIoMemoryBaseSizeHob (MemoryBase, (UINT64)(MemoryLimit - MemoryBase));\r
76}\r
77\r
78\r
79VOID\r
80AddMemoryBaseSizeHob (\r
81 EFI_PHYSICAL_ADDRESS MemoryBase,\r
82 UINT64 MemorySize\r
83 )\r
84{\r
85 STATIC EFI_RESOURCE_ATTRIBUTE_TYPE Attributes =\r
86 (\r
87 EFI_RESOURCE_ATTRIBUTE_PRESENT |\r
88 EFI_RESOURCE_ATTRIBUTE_INITIALIZED |\r
89 EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |\r
90 EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |\r
91 EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |\r
92 EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE |\r
93 EFI_RESOURCE_ATTRIBUTE_TESTED\r
94 );\r
95\r
96 BuildResourceDescriptorHob (\r
97 EFI_RESOURCE_SYSTEM_MEMORY,\r
98 Attributes,\r
99 MemoryBase,\r
100 MemorySize\r
101 );\r
102}\r
103\r
104\r
105VOID\r
106AddMemoryRangeHob (\r
107 EFI_PHYSICAL_ADDRESS MemoryBase,\r
108 EFI_PHYSICAL_ADDRESS MemoryLimit\r
109 )\r
110{\r
111 AddMemoryBaseSizeHob (MemoryBase, (UINT64)(MemoryLimit - MemoryBase));\r
112}\r
113\r
114\r
115VOID\r
116MemMapInitialization (\r
117 )\r
118{\r
119 //\r
120 // Create Memory Type Information HOB\r
121 //\r
122 BuildGuidDataHob (\r
123 &gEfiMemoryTypeInformationGuid,\r
124 mDefaultMemoryTypeInformation,\r
125 sizeof(mDefaultMemoryTypeInformation)\r
126 );\r
127\r
128 //\r
129 // Local APIC range\r
130 //\r
131 AddIoMemoryBaseSizeHob (0xFEC80000, 0x80000);\r
132\r
133 //\r
134 // I/O APIC range\r
135 //\r
136 AddIoMemoryBaseSizeHob (0xFEC00000, 0x80000);\r
137\r
138 //\r
139 // Video memory + Legacy BIOS region\r
140 //\r
a4437ffd 141 AddIoMemoryRangeHob (0x0A0000, 0x100000);\r
49ba9447 142}\r
143\r
144\r
145VOID\r
146MiscInitialization (\r
147 )\r
148{\r
149 //\r
150 // Disable A20 Mask\r
151 //\r
152 IoWrite8 (0x92, (UINT8) (IoRead8 (0x92) | 0x02));\r
153\r
154 //\r
155 // Build the CPU hob with 36-bit addressing and 16-bits of IO space.\r
156 //\r
157 BuildCpuHob (36, 16);\r
158}\r
159\r
160\r
77ba993c 161VOID\r
162ReserveEmuVariableNvStore (\r
163 )\r
164{\r
165 EFI_PHYSICAL_ADDRESS VariableStore;\r
166\r
167 //\r
168 // Allocate storage for NV variables early on so it will be\r
169 // at a consistent address. Since VM memory is preserved\r
170 // across reboots, this allows the NV variable storage to survive\r
171 // a VM reboot.\r
172 //\r
173 VariableStore =\r
174 (EFI_PHYSICAL_ADDRESS)(UINTN)\r
27f58ea1 175 AllocateRuntimePool (\r
29a3f139 176 2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)\r
27f58ea1 177 );\r
77ba993c 178 DEBUG ((EFI_D_INFO,\r
179 "Reserved variable store memory: 0x%lX; size: %dkb\n",\r
180 VariableStore,\r
29a3f139 181 (2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)) / 1024\r
77ba993c 182 ));\r
183 PcdSet64 (PcdEmuVariableNvStoreReserved, VariableStore);\r
184}\r
185\r
186\r
49ba9447 187/**\r
188 Perform Platform PEI initialization.\r
189\r
190 @param FileHandle Handle of the file being invoked.\r
191 @param PeiServices Describes the list of possible PEI Services.\r
192\r
193 @return EFI_SUCCESS The PEIM initialized successfully.\r
194\r
195**/\r
196EFI_STATUS\r
197EFIAPI\r
198InitializePlatform (\r
199 IN EFI_PEI_FILE_HANDLE FileHandle,\r
200 IN CONST EFI_PEI_SERVICES **PeiServices\r
201 )\r
202{\r
203 DEBUG ((EFI_D_ERROR, "Platform PEIM Loaded\n"));\r
204\r
205 MemDetect ();\r
206\r
77ba993c 207 ReserveEmuVariableNvStore ();\r
208\r
49ba9447 209 PeiFvInitialization ();\r
210\r
211 MemMapInitialization ();\r
212\r
213 MiscInitialization ();\r
214\r
215 return EFI_SUCCESS;\r
216}\r
217\r