- // Create RSDP, RSDT, XSDT structures\r
- // Allocate all buffers\r
+ // Create RSDP table\r
+ //\r
+ RsdpTableSize = sizeof (EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER) +\r
+ sizeof (EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER);\r
+\r
+ PageAddress = 0xFFFFFFFF;\r
+ Status = gBS->AllocatePages (\r
+ AllocateMaxAddress,\r
+ EfiACPIReclaimMemory,\r
+ EFI_SIZE_TO_PAGES (RsdpTableSize),\r
+ &PageAddress\r
+ );\r
+\r
+ if (EFI_ERROR (Status)) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+\r
+ Pointer = (UINT8 *) (UINTN) PageAddress;\r
+ ZeroMem (Pointer, RsdpTableSize);\r
+\r
+ AcpiTableInstance->Rsdp1 = (EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER *) Pointer;\r
+ Pointer += sizeof (EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER);\r
+ AcpiTableInstance->Rsdp3 = (EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *) Pointer;\r
+\r
+ //\r
+ // Create RSDT, XSDT structures\r