)\r
{\r
EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttributes;\r
+ UINT64 SystemMemoryTop;\r
\r
// Ensure PcdSystemMemorySize has been set\r
ASSERT (PcdGet64 (PcdSystemMemorySize) != 0);\r
EFI_RESOURCE_ATTRIBUTE_TESTED\r
);\r
\r
- BuildResourceDescriptorHob (\r
- EFI_RESOURCE_SYSTEM_MEMORY,\r
- ResourceAttributes,\r
- PcdGet64 (PcdSystemMemoryBase),\r
- PcdGet64 (PcdSystemMemorySize)\r
- );\r
+ SystemMemoryTop = PcdGet64 (PcdSystemMemoryBase) +\r
+ PcdGet64 (PcdSystemMemorySize);\r
+\r
+ if (SystemMemoryTop - 1 > MAX_ADDRESS) {\r
+ BuildResourceDescriptorHob (\r
+ EFI_RESOURCE_SYSTEM_MEMORY,\r
+ ResourceAttributes,\r
+ PcdGet64 (PcdSystemMemoryBase),\r
+ (UINT64)MAX_ADDRESS - PcdGet64 (PcdSystemMemoryBase) + 1\r
+ );\r
+ BuildResourceDescriptorHob (\r
+ EFI_RESOURCE_SYSTEM_MEMORY,\r
+ ResourceAttributes,\r
+ (UINT64)MAX_ADDRESS + 1,\r
+ SystemMemoryTop - MAX_ADDRESS - 1\r
+ );\r
+ } else {\r
+ BuildResourceDescriptorHob (\r
+ EFI_RESOURCE_SYSTEM_MEMORY,\r
+ ResourceAttributes,\r
+ PcdGet64 (PcdSystemMemoryBase),\r
+ PcdGet64 (PcdSystemMemorySize)\r
+ );\r
+ }\r
\r
//\r
// When running under virtualization, the PI/UEFI memory region may be\r