]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/PlatformPei/Platform.c
EMU Variable: Add support for pre-reserved NV variable store.
[mirror_edk2.git] / OvmfPkg / PlatformPei / Platform.c
CommitLineData
49ba9447 1/**@file\r
2 Platform PEI driver\r
3\r
4 Copyright (c) 2006 - 2009, Intel Corporation\r
5 All rights reserved. This program and the accompanying materials\r
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
26#include <Library/PciLib.h>\r
27#include <Library/PeimEntryPoint.h>\r
28#include <Library/ResourcePublicationLib.h>\r
29#include <Guid/MemoryTypeInformation.h>\r
30\r
31#include "Platform.h"\r
32\r
33EFI_MEMORY_TYPE_INFORMATION mDefaultMemoryTypeInformation[] = {\r
34 { EfiACPIMemoryNVS, 0x004 },\r
35 { EfiACPIReclaimMemory, 0x01C },\r
36 { EfiRuntimeServicesData, 0x050 },\r
37 { EfiRuntimeServicesCode, 0x020 },\r
38 { EfiBootServicesCode, 0x0F0 },\r
39 { EfiBootServicesData, 0xA00 },\r
40 { EfiMaxMemoryType, 0x000 }\r
41};\r
42\r
43\r
44VOID\r
45AddIoMemoryBaseSizeHob (\r
46 EFI_PHYSICAL_ADDRESS MemoryBase,\r
47 UINT64 MemorySize\r
48 )\r
49{\r
50 STATIC EFI_RESOURCE_ATTRIBUTE_TYPE Attributes =\r
51 (\r
52 EFI_RESOURCE_ATTRIBUTE_PRESENT |\r
53 EFI_RESOURCE_ATTRIBUTE_INITIALIZED |\r
54 EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |\r
55 EFI_RESOURCE_ATTRIBUTE_TESTED\r
56 );\r
57\r
58 BuildResourceDescriptorHob (\r
59 EFI_RESOURCE_MEMORY_MAPPED_IO,\r
60 Attributes,\r
61 MemoryBase,\r
62 MemorySize\r
63 );\r
64}\r
65\r
66\r
67VOID\r
68AddIoMemoryRangeHob (\r
69 EFI_PHYSICAL_ADDRESS MemoryBase,\r
70 EFI_PHYSICAL_ADDRESS MemoryLimit\r
71 )\r
72{\r
73 AddIoMemoryBaseSizeHob (MemoryBase, (UINT64)(MemoryLimit - MemoryBase));\r
74}\r
75\r
76\r
77VOID\r
78AddMemoryBaseSizeHob (\r
79 EFI_PHYSICAL_ADDRESS MemoryBase,\r
80 UINT64 MemorySize\r
81 )\r
82{\r
83 STATIC EFI_RESOURCE_ATTRIBUTE_TYPE Attributes =\r
84 (\r
85 EFI_RESOURCE_ATTRIBUTE_PRESENT |\r
86 EFI_RESOURCE_ATTRIBUTE_INITIALIZED |\r
87 EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |\r
88 EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |\r
89 EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |\r
90 EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE |\r
91 EFI_RESOURCE_ATTRIBUTE_TESTED\r
92 );\r
93\r
94 BuildResourceDescriptorHob (\r
95 EFI_RESOURCE_SYSTEM_MEMORY,\r
96 Attributes,\r
97 MemoryBase,\r
98 MemorySize\r
99 );\r
100}\r
101\r
102\r
103VOID\r
104AddMemoryRangeHob (\r
105 EFI_PHYSICAL_ADDRESS MemoryBase,\r
106 EFI_PHYSICAL_ADDRESS MemoryLimit\r
107 )\r
108{\r
109 AddMemoryBaseSizeHob (MemoryBase, (UINT64)(MemoryLimit - MemoryBase));\r
110}\r
111\r
112\r
113VOID\r
114MemMapInitialization (\r
115 )\r
116{\r
117 //\r
118 // Create Memory Type Information HOB\r
119 //\r
120 BuildGuidDataHob (\r
121 &gEfiMemoryTypeInformationGuid,\r
122 mDefaultMemoryTypeInformation,\r
123 sizeof(mDefaultMemoryTypeInformation)\r
124 );\r
125\r
126 //\r
127 // Local APIC range\r
128 //\r
129 AddIoMemoryBaseSizeHob (0xFEC80000, 0x80000);\r
130\r
131 //\r
132 // I/O APIC range\r
133 //\r
134 AddIoMemoryBaseSizeHob (0xFEC00000, 0x80000);\r
135\r
136 //\r
137 // Video memory + Legacy BIOS region\r
138 //\r
a4437ffd 139 AddIoMemoryRangeHob (0x0A0000, 0x100000);\r
49ba9447 140}\r
141\r
142\r
143VOID\r
144MiscInitialization (\r
145 )\r
146{\r
147 //\r
148 // Disable A20 Mask\r
149 //\r
150 IoWrite8 (0x92, (UINT8) (IoRead8 (0x92) | 0x02));\r
151\r
152 //\r
153 // Build the CPU hob with 36-bit addressing and 16-bits of IO space.\r
154 //\r
155 BuildCpuHob (36, 16);\r
156}\r
157\r
158\r
159/**\r
160 Perform Platform PEI initialization.\r
161\r
162 @param FileHandle Handle of the file being invoked.\r
163 @param PeiServices Describes the list of possible PEI Services.\r
164\r
165 @return EFI_SUCCESS The PEIM initialized successfully.\r
166\r
167**/\r
168EFI_STATUS\r
169EFIAPI\r
170InitializePlatform (\r
171 IN EFI_PEI_FILE_HANDLE FileHandle,\r
172 IN CONST EFI_PEI_SERVICES **PeiServices\r
173 )\r
174{\r
175 DEBUG ((EFI_D_ERROR, "Platform PEIM Loaded\n"));\r
176\r
177 MemDetect ();\r
178\r
179 PeiFvInitialization ();\r
180\r
181 MemMapInitialization ();\r
182\r
183 MiscInitialization ();\r
184\r
185 return EFI_SUCCESS;\r
186}\r
187\r