]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OVMF: Support greater than 2GB of memory
authorjljusten <jljusten@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 13 Oct 2010 07:07:29 +0000 (07:07 +0000)
committerjljusten <jljusten@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 13 Oct 2010 07:07:29 +0000 (07:07 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10928 6f19259b-4bc3-4df7-8a09-765794883524

OvmfPkg/PlatformPei/MemDetect.c
OvmfPkg/PlatformPei/Platform.c
OvmfPkg/PlatformPei/Platform.h

index 5e09cc93750e8c9b79a9829a4f6519d1f62a326d..9a82cc79d04e241fb420b03d6f4c9475fcfa3ae1 100644 (file)
@@ -54,7 +54,7 @@ GetSystemMemorySize (
   Cmos0x34 = (UINT8) CmosRead8 (0x34);\r
   Cmos0x35 = (UINT8) CmosRead8 (0x35);\r
 \r
-  return ((((Cmos0x35 << 8) + Cmos0x34) << 16) + SIZE_16MB);\r
+  return (((UINTN)((Cmos0x35 << 8) + Cmos0x34) << 16) + SIZE_16MB);\r
 }\r
 \r
 \r
@@ -64,7 +64,7 @@ GetSystemMemorySize (
   @return EFI_SUCCESS     The PEIM initialized successfully.\r
 \r
 **/\r
-EFI_STATUS\r
+EFI_PHYSICAL_ADDRESS\r
 MemDetect (\r
   )\r
 {\r
@@ -103,6 +103,6 @@ MemDetect (
   AddMemoryRangeHob (BASE_1MB, MemoryBase);\r
   AddMemoryRangeHob (0, BASE_512KB + BASE_128KB);\r
 \r
-  return EFI_SUCCESS;\r
+  return MemoryBase + MemorySize;\r
 }\r
 \r
index d35a1fbb5c0115e8df198330799693136f187574..c379f88b4d6cd17f42a6192a7f63439ca0aac0f1 100644 (file)
@@ -35,7 +35,7 @@
 EFI_MEMORY_TYPE_INFORMATION mDefaultMemoryTypeInformation[] = {\r
   { EfiACPIMemoryNVS,       0x004 },\r
   { EfiACPIReclaimMemory,   0x008 },\r
-  { EfiReservedMemoryType,  0x004 },     \r
+  { EfiReservedMemoryType,  0x004 },\r
   { EfiRuntimeServicesData, 0x024 },\r
   { EfiRuntimeServicesCode, 0x030 },\r
   { EfiBootServicesCode,    0x180 },\r
@@ -104,6 +104,7 @@ AddMemoryRangeHob (
 \r
 VOID\r
 MemMapInitialization (\r
+  EFI_PHYSICAL_ADDRESS  TopOfMemory\r
   )\r
 {\r
   //\r
@@ -129,22 +130,26 @@ MemMapInitialization (
   //\r
   // Add PCI MMIO space available to PCI resource allocations\r
   //\r
-  AddIoMemoryBaseSizeHob (0x80000000, 0xFEC00000 - 0x80000000);\r
+  if (TopOfMemory < BASE_2GB) {\r
+    AddIoMemoryBaseSizeHob (BASE_2GB, 0xFEC00000 - BASE_2GB);\r
+  } else {\r
+    AddIoMemoryBaseSizeHob (TopOfMemory, 0xFEC00000 - TopOfMemory);\r
+  }\r
 \r
   //\r
   // Local APIC range\r
   //\r
-  AddIoMemoryBaseSizeHob (0xFEC80000, 0x80000);\r
+  AddIoMemoryBaseSizeHob (0xFEC80000, SIZE_512KB);\r
 \r
   //\r
   // I/O APIC range\r
   //\r
-  AddIoMemoryBaseSizeHob (0xFEC00000, 0x80000);\r
+  AddIoMemoryBaseSizeHob (0xFEC00000, SIZE_512KB);\r
 \r
   //\r
   // Video memory + Legacy BIOS region\r
   //\r
-  AddIoMemoryRangeHob (0x0A0000, 0x100000);\r
+  AddIoMemoryRangeHob (0x0A0000, BASE_1MB);\r
 }\r
 \r
 \r
@@ -155,7 +160,7 @@ MiscInitialization (
   //\r
   // Disable A20 Mask\r
   //\r
-  IoWrite8 (0x92, (UINT8) (IoRead8 (0x92) | 0x02));\r
+  IoOr8 (0x92, BIT1);\r
 \r
   //\r
   // Build the CPU hob with 36-bit addressing and 16-bits of IO space.\r
@@ -206,15 +211,17 @@ InitializePlatform (
   IN CONST EFI_PEI_SERVICES     **PeiServices\r
   )\r
 {\r
+  EFI_PHYSICAL_ADDRESS  TopOfMemory;\r
+\r
   DEBUG ((EFI_D_ERROR, "Platform PEIM Loaded\n"));\r
 \r
-  MemDetect ();\r
+  TopOfMemory = MemDetect ();\r
 \r
   ReserveEmuVariableNvStore ();\r
 \r
   PeiFvInitialization ();\r
 \r
-  MemMapInitialization ();\r
+  MemMapInitialization (TopOfMemory);\r
 \r
   MiscInitialization ();\r
 \r
index 53090ac2c713565381f0f6aebd026090f1ffa0a8..0829f89d3b6fc61837043d6bbf6ea8cda59cfaf7 100644 (file)
@@ -39,7 +39,7 @@ AddMemoryRangeHob (
   EFI_PHYSICAL_ADDRESS        MemoryLimit\r
   );\r
 \r
-EFI_STATUS\r
+EFI_PHYSICAL_ADDRESS\r
 MemDetect (\r
   VOID\r
   );\r