]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c
MdeModulePkg:
[mirror_edk2.git] / MdeModulePkg / Universal / Acpi / AcpiTableDxe / AcpiTableProtocol.c
index b7efceba2de43c9d5209a8f9a77057954a05ee99..c551d0bd5d2e3ad752edf6b0ad75fb5a7f2aa493 100644 (file)
@@ -357,6 +357,19 @@ InstallAcpiTable (
   }\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
@@ -514,7 +527,7 @@ ReallocateAcpiTableBuffer (
       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
@@ -719,61 +732,59 @@ AddTableToList (
       //\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
@@ -1709,6 +1720,11 @@ AcpiTableAcpiTableConstructor (
 \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