]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportAcpiSupportProtocol.c
IntelFrameworkModulePkg: Clean up source files
[mirror_edk2.git] / IntelFrameworkModulePkg / Universal / Acpi / AcpiSupportDxe / AcpiSupportAcpiSupportProtocol.c
index 6312e2ba363a19088cb395770273cd150d8e4cc4..aeacd02f6ab98d85a954eef1b9103e2d7c4f3beb 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   ACPI Support Protocol implementation\r
 \r
-Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
 \r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions\r
@@ -19,9 +19,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 //\r
 #include "AcpiSupport.h"\r
 //\r
-// The maximum number of tables that pre-allocated. \r
+// The maximum number of tables that pre-allocated.\r
 //\r
-UINTN         mEfiAcpiMaxNumTables = EFI_ACPI_MAX_NUM_TABLES; \r
+UINTN         mEfiAcpiMaxNumTables = EFI_ACPI_MAX_NUM_TABLES;\r
 /**\r
   This function adds an ACPI table to the table list.  It will detect FACS and\r
   allocate the correct type of memory and properly align the table.\r
@@ -91,10 +91,10 @@ ChecksumCommonTables (
   );\r
 \r
 /**\r
-  This function returns a table specified by an index if it exists.  \r
-  \r
-  The function returns a buffer containing the table that the caller must free.  \r
-  The function also returns a handle used to identify the table for update or \r
+  This function returns a table specified by an index if it exists.\r
+\r
+  The function returns a buffer containing the table that the caller must free.\r
+  The function also returns a handle used to identify the table for update or\r
   deletion using the SetAcpiTable function.\r
 \r
   @param This        Instance of the protocol.\r
@@ -165,7 +165,7 @@ GetAcpiTable (
 }\r
 /**\r
   This function adds, removes, or updates ACPI tables.  If the address is not\r
-  null and the handle value is null, the table is added.  If both the address and \r
+  null and the handle value is null, the table is added.  If both the address and\r
   handle are not null, the table at handle is updated with the table at address.\r
   If the address is null and the handle is not, the table at handle is deleted.\r
 \r
@@ -371,10 +371,13 @@ PublishTables (
   @param  TableKey             Reurns a key to refer to the ACPI table.\r
 \r
   @return EFI_SUCCESS            The table was successfully inserted.\r
-  @return EFI_INVALID_PARAMETER  Either AcpiTableBuffer is NULL, TableKey is NULL, or AcpiTableBufferSize \r
+  @return EFI_INVALID_PARAMETER  Either AcpiTableBuffer is NULL, TableKey is NULL, or AcpiTableBufferSize\r
                                  and the size field embedded in the ACPI table pointed to by AcpiTableBuffer\r
                                  are not in sync.\r
   @return EFI_OUT_OF_RESOURCES   Insufficient resources exist to complete the request.\r
+  @retval EFI_ACCESS_DENIED      The table signature matches a table already\r
+                                 present in the system and platform policy\r
+                                 does not allow duplicate tables of this type.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -390,8 +393,6 @@ InstallAcpiTable (
   EFI_ACPI_SUPPORT_PROTOCOL *AcpiSupport;\r
   EFI_STATUS                Status;\r
   VOID                      *AcpiTableBufferConst;\r
-  UINT32                    Length;\r
-  UINT8                     Checksum;\r
 \r
   //\r
   // Check for invalid input parameters\r
@@ -401,16 +402,6 @@ InstallAcpiTable (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  Length = ((EFI_ACPI_COMMON_HEADER *) AcpiTableBuffer)->Length;\r
-  Checksum = CalculateCheckSum8 ((UINT8 *)AcpiTableBuffer, Length);\r
-  if (Checksum != 0) {\r
-    AcpiPlatformChecksum (\r
-      (VOID *)AcpiTableBuffer,\r
-      (UINTN)Length,\r
-      OFFSET_OF (EFI_ACPI_DESCRIPTION_HEADER, Checksum)\r
-      );\r
-  }\r
-\r
   //\r
   // Get the instance of the ACPI support protocol\r
   //\r
@@ -422,13 +413,13 @@ InstallAcpiTable (
   //\r
   AcpiTableBufferConst = AllocateCopyPool (AcpiTableBufferSize, AcpiTableBuffer);\r
   *TableKey = 0;\r
-  Status = AcpiSupport->SetAcpiTable (\r
-                          AcpiSupport,\r
-                          AcpiTableBufferConst,\r
-                          FALSE,\r
-                          EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0,\r
-                          TableKey\r
-                          );\r
+  Status = AddTableToList (\r
+             AcpiSupportInstance,\r
+             AcpiTableBufferConst,\r
+             TRUE,\r
+             EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0,\r
+             TableKey\r
+             );\r
   if (!EFI_ERROR (Status)) {\r
     Status = AcpiSupport->PublishTables (\r
                             AcpiSupport,\r
@@ -436,7 +427,7 @@ InstallAcpiTable (
                             );\r
   }\r
   FreePool (AcpiTableBufferConst);\r
-  \r
+\r
   return Status;\r
 }\r
 /**\r
@@ -469,13 +460,11 @@ UninstallAcpiTable (
   //\r
   // Uninstall the ACPI table by using ACPI support protocol\r
   //\r
-  Status = AcpiSupport->SetAcpiTable (\r
-                          AcpiSupport,\r
-                          NULL,\r
-                          FALSE,\r
-                          EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0,\r
-                          &TableKey\r
-                          );\r
+  Status = RemoveTableFromList (\r
+             AcpiSupportInstance,\r
+             EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0,\r
+             TableKey\r
+             );\r
   if (!EFI_ERROR (Status)) {\r
     Status = AcpiSupport->PublishTables (\r
                             AcpiSupport,\r
@@ -511,7 +500,7 @@ ReallocateAcpiTableBuffer (
   EFI_STATUS                 Status;\r
   UINT64                     CurrentData;\r
 \r
-  CopyMem (&TempPrivateData, AcpiSupportInstance, sizeof (EFI_ACPI_SUPPORT_INSTANCE)); \r
+  CopyMem (&TempPrivateData, AcpiSupportInstance, sizeof (EFI_ACPI_SUPPORT_INSTANCE));\r
   //\r
   // Enlarge the max table number from mEfiAcpiMaxNumTables to mEfiAcpiMaxNumTables + EFI_ACPI_MAX_NUM_TABLES\r
   //\r
@@ -549,7 +538,7 @@ ReallocateAcpiTableBuffer (
 \r
   Pointer = (UINT8 *) (UINTN) PageAddress;\r
   ZeroMem (Pointer, TotalSize);\r
-  \r
+\r
   AcpiSupportInstance->Rsdt1 = (EFI_ACPI_DESCRIPTION_HEADER *) Pointer;\r
   Pointer += (sizeof (EFI_ACPI_DESCRIPTION_HEADER) + NewMaxTableNumber * sizeof (UINT32));\r
   AcpiSupportInstance->Rsdt3 = (EFI_ACPI_DESCRIPTION_HEADER *) Pointer;\r
@@ -565,12 +554,12 @@ ReallocateAcpiTableBuffer (
   CopyMem (&AcpiSupportInstance->Rsdp3->XsdtAddress, &CurrentData, sizeof (UINT64));\r
 \r
   //\r
-  // copy the original Rsdt1, Rsdt3 and Xsdt structure to new buffer \r
+  // copy the original Rsdt1, Rsdt3 and Xsdt structure to new buffer\r
   //\r
-  CopyMem (AcpiSupportInstance->Rsdt1, TempPrivateData.Rsdt1, (sizeof (EFI_ACPI_DESCRIPTION_HEADER) + mEfiAcpiMaxNumTables * sizeof (UINT32))); \r
-  CopyMem (AcpiSupportInstance->Rsdt3, TempPrivateData.Rsdt3, (sizeof (EFI_ACPI_DESCRIPTION_HEADER) + mEfiAcpiMaxNumTables * sizeof (UINT32))); \r
+  CopyMem (AcpiSupportInstance->Rsdt1, TempPrivateData.Rsdt1, (sizeof (EFI_ACPI_DESCRIPTION_HEADER) + mEfiAcpiMaxNumTables * sizeof (UINT32)));\r
+  CopyMem (AcpiSupportInstance->Rsdt3, TempPrivateData.Rsdt3, (sizeof (EFI_ACPI_DESCRIPTION_HEADER) + mEfiAcpiMaxNumTables * sizeof (UINT32)));\r
   CopyMem (AcpiSupportInstance->Xsdt, TempPrivateData.Xsdt, (sizeof (EFI_ACPI_DESCRIPTION_HEADER) + mEfiAcpiMaxNumTables * sizeof (UINT64)));\r
-  \r
+\r
   //\r
   // Calculate orignal ACPI table buffer size\r
   //\r
@@ -581,10 +570,10 @@ ReallocateAcpiTableBuffer (
               sizeof (EFI_ACPI_DESCRIPTION_HEADER) +         // for ACPI 2.0/3.0 XSDT\r
               mEfiAcpiMaxNumTables * sizeof (UINT64);\r
   gBS->FreePages ((EFI_PHYSICAL_ADDRESS)(UINTN)TempPrivateData.Rsdt1, EFI_SIZE_TO_PAGES (TotalSize));\r
-  \r
+\r
   //\r
   // Update the Max ACPI table number\r
-  // \r
+  //\r
   mEfiAcpiMaxNumTables = NewMaxTableNumber;\r
   return EFI_SUCCESS;\r
 }\r
@@ -600,8 +589,9 @@ ReallocateAcpiTableBuffer (
 \r
   @return EFI_SUCCESS               The function completed successfully.\r
   @return EFI_OUT_OF_RESOURCES      Could not allocate a required resource.\r
-  @return EFI_ABORTED               The table is a duplicate of a table that is required\r
-                                    to be unique.\r
+  @retval EFI_ACCESS_DENIED         The table signature matches a table already\r
+                                    present in the system and platform policy\r
+                                    does not allow duplicate tables of this type.\r
 **/\r
 EFI_STATUS\r
 AddTableToList (\r
@@ -660,7 +650,7 @@ AddTableToList (
   //\r
   // Allocation memory type depends on the type of the table\r
   //\r
-  if ((CurrentTableSignature == EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE) || \r
+  if ((CurrentTableSignature == EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE) ||\r
       (CurrentTableSignature == EFI_ACPI_4_0_UEFI_ACPI_DATA_TABLE_SIGNATURE)) {\r
     //\r
     // Allocate memory for the FACS.  This structure must be aligned\r
@@ -736,7 +726,7 @@ AddTableToList (
         ) {\r
       gBS->FreePages (CurrentTableList->PageAddress, CurrentTableList->NumberOfPages);\r
       gBS->FreePool (CurrentTableList);\r
-      return EFI_ABORTED;\r
+      return EFI_ACCESS_DENIED;\r
     }\r
     //\r
     // Add the table to the appropriate table version\r
@@ -788,23 +778,32 @@ AddTableToList (
 \r
       //\r
       // Update pointers in FADT.  If tables don't exist this will put NULL pointers there.\r
+      // Note: If the FIRMWARE_CTRL is non-zero, then X_FIRMWARE_CTRL must be zero, and\r
+      // vice-versa.\r
       //\r
-      if (AcpiSupportInstance->Fadt3 != NULL) {\r
-        AcpiSupportInstance->Fadt3->FirmwareCtrl  = (UINT32) (UINTN) AcpiSupportInstance->Facs3;\r
-        Buffer64 = (UINT64) (UINTN) AcpiSupportInstance->Facs3;\r
-        CopyMem (\r
+      if ((UINT64)(UINTN)AcpiSupportInstance->Facs3 < BASE_4GB) {\r
+        AcpiSupportInstance->Fadt3->FirmwareCtrl = (UINT32) (UINTN) AcpiSupportInstance->Facs3;\r
+        ZeroMem (\r
           &AcpiSupportInstance->Fadt3->XFirmwareCtrl,\r
-          &Buffer64,\r
           sizeof (UINT64)\r
           );\r
-        AcpiSupportInstance->Fadt3->Dsdt  = (UINT32) (UINTN) AcpiSupportInstance->Dsdt3;\r
-        Buffer64                          = (UINT64) (UINTN) AcpiSupportInstance->Dsdt3;\r
+      } else {\r
+        AcpiSupportInstance->Fadt3->FirmwareCtrl = 0;\r
+        Buffer64 = (UINT64) (UINTN) AcpiSupportInstance->Facs3;\r
         CopyMem (\r
-          &AcpiSupportInstance->Fadt3->XDsdt,\r
+          &AcpiSupportInstance->Fadt3->XFirmwareCtrl,\r
           &Buffer64,\r
           sizeof (UINT64)\r
           );\r
       }\r
+      AcpiSupportInstance->Fadt3->Dsdt  = (UINT32) (UINTN) AcpiSupportInstance->Dsdt3;\r
+      Buffer64                          = (UINT64) (UINTN) AcpiSupportInstance->Dsdt3;\r
+      CopyMem (\r
+        &AcpiSupportInstance->Fadt3->XDsdt,\r
+        &Buffer64,\r
+        sizeof (UINT64)\r
+        );\r
+\r
       //\r
       // RSDP OEM information is updated to match the FADT OEM information\r
       //\r
@@ -843,7 +842,8 @@ AddTableToList (
         sizeof (UINT64)\r
         );\r
       AcpiSupportInstance->Xsdt->OemRevision = AcpiSupportInstance->Fadt3->Header.OemRevision;\r
-    }    \r
+    }\r
+\r
     //\r
     // Checksum the table\r
     //\r
@@ -867,7 +867,7 @@ AddTableToList (
         ) {\r
       gBS->FreePages (CurrentTableList->PageAddress, CurrentTableList->NumberOfPages);\r
       gBS->FreePool (CurrentTableList);\r
-      return EFI_ABORTED;\r
+      return EFI_ACCESS_DENIED;\r
     }\r
     //\r
     // FACS is referenced by FADT and is not part of RSDT\r
@@ -912,13 +912,20 @@ AddTableToList (
       // If FADT already exists, update table pointers.\r
       //\r
       if (AcpiSupportInstance->Fadt3 != NULL) {\r
-        AcpiSupportInstance->Fadt3->FirmwareCtrl  = (UINT32) (UINTN) AcpiSupportInstance->Facs3;\r
-        Buffer64 = (UINT64) (UINTN) AcpiSupportInstance->Facs3;\r
-        CopyMem (\r
-          &AcpiSupportInstance->Fadt3->XFirmwareCtrl,\r
-          &Buffer64,\r
-          sizeof (UINT64)\r
-          );\r
+        //\r
+        // Note: If the FIRMWARE_CTRL is non-zero, then X_FIRMWARE_CTRL must be zero, and\r
+        // vice-versa.\r
+        //\r
+        if ((UINT64)(UINTN)AcpiSupportInstance->Facs3 < BASE_4GB) {\r
+          AcpiSupportInstance->Fadt3->FirmwareCtrl  = (UINT32) (UINTN) AcpiSupportInstance->Facs3;\r
+        } else {\r
+          Buffer64 = (UINT64) (UINTN) AcpiSupportInstance->Facs3;\r
+          CopyMem (\r
+            &AcpiSupportInstance->Fadt3->XFirmwareCtrl,\r
+            &Buffer64,\r
+            sizeof (UINT64)\r
+            );\r
+        }\r
 \r
         //\r
         // Checksum FADT table\r
@@ -944,7 +951,7 @@ AddTableToList (
         ) {\r
       gBS->FreePages (CurrentTableList->PageAddress, CurrentTableList->NumberOfPages);\r
       gBS->FreePool (CurrentTableList);\r
-      return EFI_ABORTED;\r
+      return EFI_ACCESS_DENIED;\r
     }\r
     //\r
     // DSDT is referenced by FADT and is not part of RSDT\r
@@ -977,7 +984,7 @@ AddTableToList (
           );\r
       }\r
     }\r
-    \r
+\r
      if ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 ||\r
         (Version & EFI_ACPI_TABLE_VERSION_3_0) != 0) {\r
       //\r
@@ -1007,7 +1014,7 @@ AddTableToList (
           Checksum)\r
           );\r
       }\r
-    }        \r
+    }\r
     //\r
     // Checksum the table\r
     //\r
@@ -1087,7 +1094,7 @@ AddTableToList (
        if (AcpiSupportInstance->NumberOfTableEntries3 >= mEfiAcpiMaxNumTables) {\r
          Status = ReallocateAcpiTableBuffer (AcpiSupportInstance);\r
          ASSERT_EFI_ERROR (Status);\r
-       }      \r
+       }\r
       //\r
       // At this time, it is assumed that RSDT and XSDT maintain parallel lists of tables.\r
       // If it becomes necessary to maintain separate table lists, changes will be required.\r
@@ -1152,7 +1159,7 @@ AddTableToList (
 \r
   @param  Handle      Table to find.\r
   @param  TableList   Table list to search\r
-  @param  Table       Pointer to table found. \r
+  @param  Table       Pointer to table found.\r
 \r
   @return EFI_SUCCESS    The function completed successfully.\r
   @return EFI_NOT_FOUND  No table found matching the handle specified.\r
@@ -1200,7 +1207,7 @@ FindTableByHandle (
   For Acpi 1.0 tables, pass in the Rsdt.\r
   For Acpi 2.0 tables, pass in both Rsdt and Xsdt.\r
 \r
-  @param  Table                 Pointer to table found. \r
+  @param  Table                 Pointer to table found.\r
   @param  NumberOfTableEntries  Current number of table entries in the RSDT/XSDT\r
   @param  Rsdt                  Pointer to the RSDT to remove from\r
   @param  Xsdt                  Pointer to the Xsdt to remove from\r
@@ -1336,40 +1343,42 @@ DeleteTable (
   // Init locals\r
   //\r
   RemoveFromRsdt        = TRUE;\r
-  CurrentTableSignature = ((EFI_ACPI_COMMON_HEADER *) Table->Table)->Signature;\r
-\r
-  //\r
-  // Basic tasks to accomplish delete are:\r
-  //   Determine removal requirements (in RSDT/XSDT or not)\r
-  //   Remove entry from RSDT/XSDT\r
-  //   Remove any table references to the table\r
-  //   If no one is using the table\r
-  //      Free the table (removing pointers from private data and tables)\r
-  //      Remove from list\r
-  //      Free list structure\r
-  //\r
-  //\r
-  // Determine if this table is in the RSDT or XSDT\r
-  //\r
-  if ((CurrentTableSignature == EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE) ||\r
-      (CurrentTableSignature == EFI_ACPI_2_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE) ||\r
-      (CurrentTableSignature == EFI_ACPI_3_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE)\r
-      ) {\r
-    RemoveFromRsdt = FALSE;\r
-  }\r
-  //\r
-  // We don't remove the FADT in the standard way because some\r
-  // OS expect the FADT to be early in the table list.\r
-  // So we always put it as the first element in the list.\r
-  //\r
-  if (CurrentTableSignature == EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE) {\r
-    RemoveFromRsdt = FALSE;\r
-  }\r
 \r
-  //\r
-  // Remove the table from RSDT and XSDT\r
-  //\r
   if (Table->Table != NULL) {\r
+    CurrentTableSignature = ((EFI_ACPI_COMMON_HEADER *) Table->Table)->Signature;\r
+\r
+    //\r
+    // Basic tasks to accomplish delete are:\r
+    //   Determine removal requirements (in RSDT/XSDT or not)\r
+    //   Remove entry from RSDT/XSDT\r
+    //   Remove any table references to the table\r
+    //   If no one is using the table\r
+    //      Free the table (removing pointers from private data and tables)\r
+    //      Remove from list\r
+    //      Free list structure\r
+    //\r
+    //\r
+    // Determine if this table is in the RSDT or XSDT\r
+    //\r
+    if ((CurrentTableSignature == EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE) ||\r
+        (CurrentTableSignature == EFI_ACPI_2_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE) ||\r
+        (CurrentTableSignature == EFI_ACPI_3_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE)\r
+        ) {\r
+      RemoveFromRsdt = FALSE;\r
+    }\r
+    //\r
+    // We don't remove the FADT in the standard way because some\r
+    // OS expect the FADT to be early in the table list.\r
+    // So we always put it as the first element in the list.\r
+    //\r
+    if (CurrentTableSignature == EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE) {\r
+      RemoveFromRsdt = FALSE;\r
+    }\r
+\r
+    //\r
+    // Remove the table from RSDT and XSDT\r
+    //\r
+\r
     //\r
     // This is a basic table, remove it from any lists and the Rsdt and/or Xsdt\r
     //\r
@@ -1408,11 +1417,11 @@ DeleteTable (
       //\r
       if (Version & EFI_ACPI_TABLE_VERSION_2_0 & Table->Version) {\r
         Table->Version = Table->Version &~EFI_ACPI_TABLE_VERSION_2_0;\r
-      }      \r
+      }\r
       if (Version & EFI_ACPI_TABLE_VERSION_3_0 & Table->Version) {\r
         Table->Version = Table->Version &~EFI_ACPI_TABLE_VERSION_3_0;\r
       }\r
-      \r
+\r
       //\r
       // Remove from Rsdt and Xsdt.  We don't care about the return value\r
       // because it is acceptable for the table to not exist in Rsdt/Xsdt.\r
@@ -1426,7 +1435,7 @@ DeleteTable (
           AcpiSupportInstance->Xsdt\r
           );\r
       }\r
-    }    \r
+    }\r
     //\r
     // Free the table, clean up any dependent tables and our private data pointers.\r
     //\r
@@ -1486,7 +1495,7 @@ DeleteTable (
             Checksum)\r
             );\r
         }\r
-      }    \r
+      }\r
       break;\r
 \r
     case EFI_ACPI_3_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE:\r
@@ -1511,7 +1520,7 @@ DeleteTable (
         }\r
       }\r
 \r
-      \r
+\r
       if ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 ||\r
           (Version & EFI_ACPI_TABLE_VERSION_3_0) != 0) {\r
         AcpiSupportInstance->Dsdt3 = NULL;\r
@@ -1724,12 +1733,12 @@ ChecksumCommonTables (
     OFFSET_OF (EFI_ACPI_DESCRIPTION_HEADER,\r
     Checksum)\r
     );\r
-  \r
+\r
   return EFI_SUCCESS;\r
 }\r
-/** \r
+/**\r
   Constructor for the ACPI support protocol to initializes instance data.\r
-  \r
+\r
   @param AcpiSupportInstance   Instance to construct\r
 \r
   @retval EFI_SUCCESS             Instance initialized.\r
@@ -1760,7 +1769,7 @@ AcpiSupportAcpiSupportConstructor (
 \r
   AcpiSupportInstance->AcpiTableProtocol.InstallAcpiTable   = InstallAcpiTable;\r
   AcpiSupportInstance->AcpiTableProtocol.UninstallAcpiTable = UninstallAcpiTable;\r
-  \r
+\r
   //\r
   // Create RSDP table\r
   //\r
@@ -1832,13 +1841,13 @@ AcpiSupportAcpiSupportConstructor (
   //\r
   CurrentData = EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE;\r
   CopyMem (&AcpiSupportInstance->Rsdp1->Signature, &CurrentData, sizeof (UINT64));\r
-  CopyMem (AcpiSupportInstance->Rsdp1->OemId, EFI_ACPI_OEM_ID, 6);\r
+  CopyMem (AcpiSupportInstance->Rsdp1->OemId, PcdGetPtr (PcdAcpiDefaultOemId), sizeof (AcpiSupportInstance->Rsdp1->OemId));\r
   AcpiSupportInstance->Rsdp1->Reserved    = EFI_ACPI_RESERVED_BYTE;\r
   AcpiSupportInstance->Rsdp1->RsdtAddress = (UINT32) (UINTN) AcpiSupportInstance->Rsdt1;\r
 \r
   CurrentData = EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE;\r
   CopyMem (&AcpiSupportInstance->Rsdp3->Signature, &CurrentData, sizeof (UINT64));\r
-  CopyMem (AcpiSupportInstance->Rsdp3->OemId, EFI_ACPI_OEM_ID, 6);\r
+  CopyMem (AcpiSupportInstance->Rsdp3->OemId, PcdGetPtr (PcdAcpiDefaultOemId), sizeof (AcpiSupportInstance->Rsdp3->OemId));\r
   AcpiSupportInstance->Rsdp3->Revision    = EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION;\r
   AcpiSupportInstance->Rsdp3->RsdtAddress = (UINT32) (UINTN) AcpiSupportInstance->Rsdt3;\r
   AcpiSupportInstance->Rsdp3->Length      = sizeof (EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER);\r
@@ -1856,12 +1865,12 @@ AcpiSupportAcpiSupportConstructor (
   AcpiSupportInstance->Rsdt1->Signature = EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE;\r
   AcpiSupportInstance->Rsdt1->Length    = sizeof (EFI_ACPI_DESCRIPTION_HEADER);\r
   AcpiSupportInstance->Rsdt1->Revision  = EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_TABLE_REVISION;\r
-  CopyMem (AcpiSupportInstance->Rsdt1->OemId, EFI_ACPI_OEM_ID, 6);\r
-  CurrentData = EFI_ACPI_OEM_TABLE_ID;\r
+  CopyMem (AcpiSupportInstance->Rsdt1->OemId, PcdGetPtr (PcdAcpiDefaultOemId), sizeof (AcpiSupportInstance->Rsdt1->OemId));\r
+  CurrentData = PcdGet64 (PcdAcpiDefaultOemTableId);\r
   CopyMem (&AcpiSupportInstance->Rsdt1->OemTableId, &CurrentData, sizeof (UINT64));\r
-  AcpiSupportInstance->Rsdt1->OemRevision     = EFI_ACPI_OEM_REVISION;\r
-  AcpiSupportInstance->Rsdt1->CreatorId       = EFI_ACPI_CREATOR_ID;\r
-  AcpiSupportInstance->Rsdt1->CreatorRevision = EFI_ACPI_CREATOR_REVISION;\r
+  AcpiSupportInstance->Rsdt1->OemRevision     = PcdGet32 (PcdAcpiDefaultOemRevision);\r
+  AcpiSupportInstance->Rsdt1->CreatorId       = PcdGet32 (PcdAcpiDefaultCreatorId);\r
+  AcpiSupportInstance->Rsdt1->CreatorRevision = PcdGet32 (PcdAcpiDefaultCreatorRevision);\r
   //\r
   // We always reserve first one for FADT\r
   //\r
@@ -1871,12 +1880,12 @@ AcpiSupportAcpiSupportConstructor (
   AcpiSupportInstance->Rsdt3->Signature       = EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE;\r
   AcpiSupportInstance->Rsdt3->Length          = sizeof (EFI_ACPI_DESCRIPTION_HEADER);\r
   AcpiSupportInstance->Rsdt3->Revision        = EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_TABLE_REVISION;\r
-  CopyMem (AcpiSupportInstance->Rsdt3->OemId, EFI_ACPI_OEM_ID, 6);\r
-  CurrentData = EFI_ACPI_OEM_TABLE_ID;\r
+  CopyMem (AcpiSupportInstance->Rsdt3->OemId, PcdGetPtr (PcdAcpiDefaultOemId), sizeof (AcpiSupportInstance->Rsdt3->OemId));\r
+  CurrentData = PcdGet64 (PcdAcpiDefaultOemTableId);\r
   CopyMem (&AcpiSupportInstance->Rsdt3->OemTableId, &CurrentData, sizeof (UINT64));\r
-  AcpiSupportInstance->Rsdt3->OemRevision     = EFI_ACPI_OEM_REVISION;\r
-  AcpiSupportInstance->Rsdt3->CreatorId       = EFI_ACPI_CREATOR_ID;\r
-  AcpiSupportInstance->Rsdt3->CreatorRevision = EFI_ACPI_CREATOR_REVISION;\r
+  AcpiSupportInstance->Rsdt3->OemRevision     = PcdGet32 (PcdAcpiDefaultOemRevision);\r
+  AcpiSupportInstance->Rsdt3->CreatorId       = PcdGet32 (PcdAcpiDefaultCreatorId);\r
+  AcpiSupportInstance->Rsdt3->CreatorRevision = PcdGet32 (PcdAcpiDefaultCreatorRevision);\r
   //\r
   // We always reserve first one for FADT\r
   //\r
@@ -1889,12 +1898,12 @@ AcpiSupportAcpiSupportConstructor (
   AcpiSupportInstance->Xsdt->Signature  = EFI_ACPI_3_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE;\r
   AcpiSupportInstance->Xsdt->Length     = sizeof (EFI_ACPI_DESCRIPTION_HEADER);\r
   AcpiSupportInstance->Xsdt->Revision   = EFI_ACPI_3_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_REVISION;\r
-  CopyMem (AcpiSupportInstance->Xsdt->OemId, EFI_ACPI_OEM_ID, 6);\r
-  CurrentData = EFI_ACPI_OEM_TABLE_ID;\r
+  CopyMem (AcpiSupportInstance->Xsdt->OemId, PcdGetPtr (PcdAcpiDefaultOemId), sizeof (AcpiSupportInstance->Xsdt->OemId));\r
+  CurrentData = PcdGet64 (PcdAcpiDefaultOemTableId);\r
   CopyMem (&AcpiSupportInstance->Xsdt->OemTableId, &CurrentData, sizeof (UINT64));\r
-  AcpiSupportInstance->Xsdt->OemRevision      = EFI_ACPI_OEM_REVISION;\r
-  AcpiSupportInstance->Xsdt->CreatorId        = EFI_ACPI_CREATOR_ID;\r
-  AcpiSupportInstance->Xsdt->CreatorRevision  = EFI_ACPI_CREATOR_REVISION;\r
+  AcpiSupportInstance->Xsdt->OemRevision      = PcdGet32 (PcdAcpiDefaultOemRevision);\r
+  AcpiSupportInstance->Xsdt->CreatorId        = PcdGet32 (PcdAcpiDefaultCreatorId);\r
+  AcpiSupportInstance->Xsdt->CreatorRevision  = PcdGet32 (PcdAcpiDefaultCreatorRevision);\r
   //\r
   // We always reserve first one for FADT\r
   //\r