RsdpTableSize += sizeof (EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER);\r
}\r
\r
- PageAddress = 0xFFFFFFFF;\r
- Status = gBS->AllocatePages (\r
- mAcpiTableAllocType,\r
- EfiACPIReclaimMemory,\r
- EFI_SIZE_TO_PAGES (RsdpTableSize),\r
- &PageAddress\r
- );\r
+ if (mAcpiTableAllocType != AllocateAnyPages) {\r
+ PageAddress = 0xFFFFFFFF;\r
+ Status = gBS->AllocatePages (\r
+ mAcpiTableAllocType,\r
+ EfiACPIReclaimMemory,\r
+ EFI_SIZE_TO_PAGES (RsdpTableSize),\r
+ &PageAddress\r
+ );\r
+ } else {\r
+ Status = gBS->AllocatePool (\r
+ EfiACPIReclaimMemory,\r
+ RsdpTableSize,\r
+ (VOID **)&Pointer\r
+ );\r
+ }\r
\r
if (EFI_ERROR (Status)) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- Pointer = (UINT8 *) (UINTN) PageAddress;\r
+ if (mAcpiTableAllocType != AllocateAnyPages) {\r
+ Pointer = (UINT8 *)(UINTN)PageAddress;\r
+ }\r
ZeroMem (Pointer, RsdpTableSize);\r
\r
AcpiTableInstance->Rsdp1 = (EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER *) Pointer;\r
}\r
\r
if (EFI_ERROR (Status)) {\r
- gBS->FreePages ((EFI_PHYSICAL_ADDRESS)(UINTN)AcpiTableInstance->Rsdp1, EFI_SIZE_TO_PAGES (RsdpTableSize));\r
+ if (mAcpiTableAllocType != AllocateAnyPages) {\r
+ gBS->FreePages ((EFI_PHYSICAL_ADDRESS)(UINTN)AcpiTableInstance->Rsdp1,\r
+ EFI_SIZE_TO_PAGES (RsdpTableSize));\r
+ } else {\r
+ gBS->FreePool (AcpiTableInstance->Rsdp1);\r
+ }\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r