}\r
FreePool (AcpiTableBufferConst);\r
\r
+ //\r
+ // Add a new table successfully, notify registed callback\r
+ //\r
+ if (FeaturePcdGet (PcdInstallAcpiSdtProtocol)) {\r
+ if (!EFI_ERROR (Status)) {\r
+ SdtNotifyAcpiList (\r
+ AcpiTableInstance,\r
+ EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0,\r
+ *TableKey\r
+ );\r
+ }\r
+ }\r
+\r
return Status;\r
}\r
\r
mEfiAcpiMaxNumTables * sizeof (UINT32) +\r
sizeof (EFI_ACPI_DESCRIPTION_HEADER) + // for ACPI 2.0/3.0 XSDT\r
mEfiAcpiMaxNumTables * sizeof (UINT64);\r
- gBS->FreePages ((EFI_PHYSICAL_ADDRESS)TempPrivateData.Rsdp1, EFI_SIZE_TO_PAGES (TotalSize));\r
+ gBS->FreePages ((EFI_PHYSICAL_ADDRESS)(UINTN)TempPrivateData.Rsdp1, EFI_SIZE_TO_PAGES (TotalSize));\r
\r
//\r
// Update the Max ACPI table number\r
//\r
// Update pointers in FADT. If tables don't exist this will put NULL pointers there.\r
//\r
- if (AcpiTableInstance->Fadt3 != NULL) {\r
- AcpiTableInstance->Fadt3->FirmwareCtrl = (UINT32) (UINTN) AcpiTableInstance->Facs3;\r
- Buffer64 = (UINT64) (UINTN) AcpiTableInstance->Facs3;\r
- CopyMem (\r
- &AcpiTableInstance->Fadt3->XFirmwareCtrl,\r
- &Buffer64,\r
- sizeof (UINT64)\r
- );\r
- AcpiTableInstance->Fadt3->Dsdt = (UINT32) (UINTN) AcpiTableInstance->Dsdt3;\r
- Buffer64 = (UINT64) (UINTN) AcpiTableInstance->Dsdt3;\r
- CopyMem (\r
- &AcpiTableInstance->Fadt3->XDsdt,\r
- &Buffer64,\r
- sizeof (UINT64)\r
- );\r
+ AcpiTableInstance->Fadt3->FirmwareCtrl = (UINT32) (UINTN) AcpiTableInstance->Facs3;\r
+ Buffer64 = (UINT64) (UINTN) AcpiTableInstance->Facs3;\r
+ CopyMem (\r
+ &AcpiTableInstance->Fadt3->XFirmwareCtrl,\r
+ &Buffer64,\r
+ sizeof (UINT64)\r
+ );\r
+ AcpiTableInstance->Fadt3->Dsdt = (UINT32) (UINTN) AcpiTableInstance->Dsdt3;\r
+ Buffer64 = (UINT64) (UINTN) AcpiTableInstance->Dsdt3;\r
+ CopyMem (\r
+ &AcpiTableInstance->Fadt3->XDsdt,\r
+ &Buffer64,\r
+ sizeof (UINT64)\r
+ );\r
\r
- //\r
- // RSDP OEM information is updated to match the FADT OEM information\r
- //\r
- CopyMem (\r
- &AcpiTableInstance->Rsdp3->OemId,\r
- &AcpiTableInstance->Fadt3->Header.OemId,\r
- 6\r
- );\r
- \r
- //\r
- // RSDT OEM information is updated to match FADT OEM information.\r
- //\r
- CopyMem (\r
- &AcpiTableInstance->Rsdt3->OemId,\r
- &AcpiTableInstance->Fadt3->Header.OemId,\r
- 6\r
- );\r
- CopyMem (\r
- &AcpiTableInstance->Rsdt3->OemTableId,\r
- &AcpiTableInstance->Fadt3->Header.OemTableId,\r
- sizeof (UINT64)\r
- );\r
- AcpiTableInstance->Rsdt3->OemRevision = AcpiTableInstance->Fadt3->Header.OemRevision;\r
- \r
- //\r
- // XSDT OEM information is updated to match FADT OEM information.\r
- //\r
- CopyMem (\r
- &AcpiTableInstance->Xsdt->OemId,\r
- &AcpiTableInstance->Fadt3->Header.OemId,\r
- 6\r
- );\r
- CopyMem (\r
- &AcpiTableInstance->Xsdt->OemTableId,\r
- &AcpiTableInstance->Fadt3->Header.OemTableId,\r
- sizeof (UINT64)\r
- );\r
- AcpiTableInstance->Xsdt->OemRevision = AcpiTableInstance->Fadt3->Header.OemRevision;\r
- }\r
+ //\r
+ // RSDP OEM information is updated to match the FADT OEM information\r
+ //\r
+ CopyMem (\r
+ &AcpiTableInstance->Rsdp3->OemId,\r
+ &AcpiTableInstance->Fadt3->Header.OemId,\r
+ 6\r
+ );\r
+ \r
+ //\r
+ // RSDT OEM information is updated to match FADT OEM information.\r
+ //\r
+ CopyMem (\r
+ &AcpiTableInstance->Rsdt3->OemId,\r
+ &AcpiTableInstance->Fadt3->Header.OemId,\r
+ 6\r
+ );\r
+ CopyMem (\r
+ &AcpiTableInstance->Rsdt3->OemTableId,\r
+ &AcpiTableInstance->Fadt3->Header.OemTableId,\r
+ sizeof (UINT64)\r
+ );\r
+ AcpiTableInstance->Rsdt3->OemRevision = AcpiTableInstance->Fadt3->Header.OemRevision;\r
+ \r
+ //\r
+ // XSDT OEM information is updated to match FADT OEM information.\r
+ //\r
+ CopyMem (\r
+ &AcpiTableInstance->Xsdt->OemId,\r
+ &AcpiTableInstance->Fadt3->Header.OemId,\r
+ 6\r
+ );\r
+ CopyMem (\r
+ &AcpiTableInstance->Xsdt->OemTableId,\r
+ &AcpiTableInstance->Fadt3->Header.OemTableId,\r
+ sizeof (UINT64)\r
+ );\r
+ AcpiTableInstance->Xsdt->OemRevision = AcpiTableInstance->Fadt3->Header.OemRevision;\r
} \r
//\r
// Checksum the table\r
\r
AcpiTableInstance->AcpiTableProtocol.InstallAcpiTable = InstallAcpiTable;\r
AcpiTableInstance->AcpiTableProtocol.UninstallAcpiTable = UninstallAcpiTable;\r
+\r
+ if (FeaturePcdGet (PcdInstallAcpiSdtProtocol)) {\r
+ SdtAcpiTableAcpiSdtConstructor (AcpiTableInstance);\r
+ }\r
+\r
//\r
// Create RSDP, RSDT, XSDT structures\r
// Allocate all buffers\r