]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/PlatformPei/Platform.c
NetworkPkg: comments clean up.
[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
c756b2ab 169\r
170 //\r
171 // Set the PM I/O base address to 0x400\r
172 //\r
173 PciAndThenOr32 (PCI_LIB_ADDRESS (0, 1, 3, 0x40), (UINT32) ~0xfc0, 0x400);\r
49ba9447 174}\r
175\r
176\r
77ba993c 177VOID\r
178ReserveEmuVariableNvStore (\r
179 )\r
180{\r
181 EFI_PHYSICAL_ADDRESS VariableStore;\r
182\r
183 //\r
184 // Allocate storage for NV variables early on so it will be\r
185 // at a consistent address. Since VM memory is preserved\r
186 // across reboots, this allows the NV variable storage to survive\r
187 // a VM reboot.\r
188 //\r
189 VariableStore =\r
190 (EFI_PHYSICAL_ADDRESS)(UINTN)\r
27f58ea1 191 AllocateRuntimePool (\r
29a3f139 192 2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)\r
27f58ea1 193 );\r
77ba993c 194 DEBUG ((EFI_D_INFO,\r
195 "Reserved variable store memory: 0x%lX; size: %dkb\n",\r
196 VariableStore,\r
29a3f139 197 (2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)) / 1024\r
77ba993c 198 ));\r
199 PcdSet64 (PcdEmuVariableNvStoreReserved, VariableStore);\r
200}\r
201\r
202\r
49ba9447 203/**\r
204 Perform Platform PEI initialization.\r
205\r
206 @param FileHandle Handle of the file being invoked.\r
207 @param PeiServices Describes the list of possible PEI Services.\r
208\r
209 @return EFI_SUCCESS The PEIM initialized successfully.\r
210\r
211**/\r
212EFI_STATUS\r
213EFIAPI\r
214InitializePlatform (\r
215 IN EFI_PEI_FILE_HANDLE FileHandle,\r
216 IN CONST EFI_PEI_SERVICES **PeiServices\r
217 )\r
218{\r
55cdb67a 219 EFI_PHYSICAL_ADDRESS TopOfMemory;\r
220\r
49ba9447 221 DEBUG ((EFI_D_ERROR, "Platform PEIM Loaded\n"));\r
222\r
55cdb67a 223 TopOfMemory = MemDetect ();\r
49ba9447 224\r
77ba993c 225 ReserveEmuVariableNvStore ();\r
226\r
49ba9447 227 PeiFvInitialization ();\r
228\r
55cdb67a 229 MemMapInitialization (TopOfMemory);\r
49ba9447 230\r
231 MiscInitialization ();\r
232\r
233 return EFI_SUCCESS;\r
234}\r