]> git.proxmox.com Git - mirror_edk2.git/blobdiff - QuarkPlatformPkg/Acpi/Dxe/AcpiPlatform/AcpiPlatform.c
edk2: Remove packages moved to edk2-platforms
[mirror_edk2.git] / QuarkPlatformPkg / Acpi / Dxe / AcpiPlatform / AcpiPlatform.c
diff --git a/QuarkPlatformPkg/Acpi/Dxe/AcpiPlatform/AcpiPlatform.c b/QuarkPlatformPkg/Acpi/Dxe/AcpiPlatform/AcpiPlatform.c
deleted file mode 100644 (file)
index bb7cc92..0000000
+++ /dev/null
@@ -1,805 +0,0 @@
-/** @file\r
-ACPI Platform Driver\r
-\r
-Copyright (c) 2013-2016 Intel Corporation.\r
-\r
-SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-\r
-#include <Protocol/AcpiTable.h>\r
-#include <IndustryStandard/Pci22.h>\r
-#include "AcpiPlatform.h"\r
-\r
-//\r
-// Global Variable\r
-//\r
-EFI_GLOBAL_NVS_AREA_PROTOCOL  mGlobalNvsArea;\r
-EFI_ACPI_SDT_PROTOCOL         *mAcpiSdt;\r
-\r
-EFI_ACPI_HANDLE mDsdtHandle = NULL;\r
-\r
-\r
-EFI_STATUS\r
-LocateSupportProtocol (\r
-  IN  EFI_GUID                       *Protocol,\r
-  OUT VOID                           **Instance,\r
-  IN  UINT32                         Type\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Locate the first instance of a protocol.  If the protocol requested is an\r
-  FV protocol, then it will return the first FV that contains the ACPI table\r
-  storage file.\r
-\r
-Arguments:\r
-\r
-  Protocol      The protocol to find.\r
-  Instance      Return pointer to the first instance of the protocol\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS           The function completed successfully.\r
-  EFI_NOT_FOUND         The protocol could not be located.\r
-  EFI_OUT_OF_RESOURCES  There are not enough resources to find the protocol.\r
-\r
---*/\r
-{\r
-  EFI_STATUS              Status;\r
-  EFI_HANDLE              *HandleBuffer;\r
-  UINTN                   NumberOfHandles;\r
-  EFI_FV_FILETYPE         FileType;\r
-  UINT32                  FvStatus;\r
-  EFI_FV_FILE_ATTRIBUTES  Attributes;\r
-  UINTN                   Size;\r
-  UINTN                   i;\r
-\r
-  FvStatus = 0;\r
-\r
-  //\r
-  // Locate protocol.\r
-  //\r
-  Status = gBS->LocateHandleBuffer (\r
-                   ByProtocol,\r
-                   Protocol,\r
-                   NULL,\r
-                   &NumberOfHandles,\r
-                   &HandleBuffer\r
-                   );\r
-  if (EFI_ERROR (Status)) {\r
-\r
-    //\r
-    // Defined errors at this time are not found and out of resources.\r
-    //\r
-    return Status;\r
-  }\r
-\r
-\r
-\r
-  //\r
-  // Looking for FV with ACPI storage file\r
-  //\r
-\r
-  for (i = 0; i < NumberOfHandles; i++) {\r
-    //\r
-    // Get the protocol on this handle\r
-    // This should not fail because of LocateHandleBuffer\r
-    //\r
-    Status = gBS->HandleProtocol (\r
-                     HandleBuffer[i],\r
-                     Protocol,\r
-                     Instance\r
-                     );\r
-    ASSERT_EFI_ERROR (Status);\r
-\r
-    if (!Type) {\r
-      //\r
-      // Not looking for the FV protocol, so find the first instance of the\r
-      // protocol.  There should not be any errors because our handle buffer\r
-      // should always contain at least one or LocateHandleBuffer would have\r
-      // returned not found.\r
-      //\r
-      break;\r
-    }\r
-\r
-    //\r
-    // See if it has the ACPI storage file\r
-    //\r
-\r
-    Status = ((EFI_FIRMWARE_VOLUME2_PROTOCOL*) (*Instance))->ReadFile (*Instance,\r
-                                                              (EFI_GUID*)PcdGetPtr (PcdAcpiTableStorageFile),\r
-                                                              NULL,\r
-                                                              &Size,\r
-                                                              &FileType,\r
-                                                              &Attributes,\r
-                                                              &FvStatus\r
-                                                              );\r
-\r
-    //\r
-    // If we found it, then we are done\r
-    //\r
-    if (Status == EFI_SUCCESS) {\r
-      break;\r
-    }\r
-  }\r
-\r
-  //\r
-  // Our exit status is determined by the success of the previous operations\r
-  // If the protocol was found, Instance already points to it.\r
-  //\r
-\r
-  //\r
-  // Free any allocated buffers\r
-  //\r
-  gBS->FreePool (HandleBuffer);\r
-\r
-  return Status;\r
-}\r
-\r
-\r
-VOID\r
-DsdtTableUpdate (\r
-  IN OUT   EFI_ACPI_DESCRIPTION_HEADER  *TableHeader,\r
-  IN OUT   EFI_ACPI_TABLE_VERSION       *Version\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-\r
-    Update the DSDT table\r
-\r
-  Arguments:\r
-\r
-    Table   - The table to be set\r
-    Version - Version to publish\r
-\r
-  Returns:\r
-\r
-    None\r
-\r
---*/\r
-{\r
-\r
-  UINT8      *CurrPtr;\r
-  UINT8      *DsdtPointer;\r
-  UINT32     *Signature;\r
-  UINT8      *Operation;\r
-  UINT32     *Address;\r
-  UINT16     *Size;\r
-  //\r
-  // Loop through the ASL looking for values that we must fix up.\r
-  //\r
-  CurrPtr = (UINT8 *) TableHeader;\r
-  for (DsdtPointer = CurrPtr;\r
-       DsdtPointer <= (CurrPtr + ((EFI_ACPI_COMMON_HEADER *) CurrPtr)->Length);\r
-       DsdtPointer++\r
-      )\r
-  {\r
-    Signature = (UINT32 *) DsdtPointer;\r
-    switch (*Signature) {\r
-    //\r
-    // MNVS operation region\r
-    //\r
-    case (SIGNATURE_32 ('M', 'N', 'V', 'S')):\r
-      //\r
-      // Conditional match.  For Region Objects, the Operator will always be the\r
-      // byte immediately before the specific name.  Therefore, subtract 1 to check\r
-      // the Operator.\r
-      //\r
-      Operation = DsdtPointer - 1;\r
-      if (*Operation == AML_OPREGION_OP) {\r
-        Address   = (UINT32 *) (DsdtPointer + 6);\r
-        *Address  = (UINT32) (UINTN) mGlobalNvsArea.Area;\r
-        Size      = (UINT16 *) (DsdtPointer + 11);\r
-        *Size     = sizeof (EFI_GLOBAL_NVS_AREA);\r
-      }\r
-      break;\r
-\r
-    //\r
-    // Update processor PBLK register I/O base address\r
-    //\r
-    case (SIGNATURE_32 ('P', 'R', 'I', 'O')):\r
-      //\r
-      // Conditional match. Update the following ASL code:\r
-      // Processor (CPU0, 0x01, 0x4F495250, 0x06) {}\r
-      // The 3rd parameter will be updated to the actual PBLK I/O base address.\r
-      // the Operator.\r
-      //\r
-      Operation = DsdtPointer - 8;\r
-      if ((*Operation == AML_EXT_OP) && (*(Operation + 1) == AML_EXT_PROCESSOR_OP)) {\r
-        *(UINT32 *)DsdtPointer = PcdGet16(PcdPmbaIoBaseAddress);\r
-      }\r
-      break;\r
-    default:\r
-      break;\r
-    }\r
-  }\r
-}\r
-\r
-\r
-VOID\r
-ApicTableUpdate (\r
-  IN OUT   EFI_ACPI_DESCRIPTION_HEADER  *TableHeader,\r
-  IN OUT   EFI_ACPI_TABLE_VERSION       *Version\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-\r
-    Update the processors information in the APIC table\r
-\r
-  Arguments:\r
-\r
-    Table   - The table to be set\r
-    Version - Version to publish\r
-\r
-  Returns:\r
-\r
-    None\r
-\r
---*/\r
-{\r
-  EFI_STATUS                 Status;\r
-  EFI_MP_SERVICES_PROTOCOL   *MpService;\r
-  UINT8                      *CurrPtr;\r
-  UINT8                      *EndPtr;\r
-  UINT8                      CurrIoApic;\r
-  UINT8                      CurrProcessor;\r
-  UINTN                      NumberOfCPUs;\r
-  UINTN                      NumberOfEnabledCPUs;\r
-  EFI_PROCESSOR_INFORMATION  MpContext;\r
-  ACPI_APIC_STRUCTURE_PTR    *ApicPtr;\r
-\r
-  CurrIoApic    = 0;\r
-  CurrProcessor = 0;\r
-  //\r
-  // Find the MP Protocol. This is an MP platform, so MP protocol must be\r
-  // there.\r
-  //\r
-  Status = gBS->LocateProtocol (\r
-                   &gEfiMpServiceProtocolGuid,\r
-                   NULL,\r
-                  (VOID**)&MpService\r
-                   );\r
-  if (EFI_ERROR (Status)) {\r
-    //\r
-    // Failed to get MP information, doesn't publish the invalid table\r
-    //\r
-    *Version = EFI_ACPI_TABLE_VERSION_NONE;\r
-    return;\r
-  }\r
-\r
-  //\r
-  // Determine the number of processors\r
-  //\r
-  MpService->GetNumberOfProcessors (\r
-              MpService,\r
-              &NumberOfCPUs,\r
-              &NumberOfEnabledCPUs\r
-              );\r
-\r
-  CurrPtr = (UINT8*) &(TableHeader[1]);\r
-  CurrPtr = CurrPtr + 8; // Size of Local APIC Address & Flag\r
-  EndPtr  = (UINT8*) TableHeader;\r
-  EndPtr  = EndPtr + TableHeader->Length;\r
-\r
-  while (CurrPtr < EndPtr) {\r
-\r
-    ApicPtr = (ACPI_APIC_STRUCTURE_PTR*) CurrPtr;\r
-    switch (ApicPtr->AcpiApicCommon.Type) {\r
-\r
-      case EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC:\r
-        ApicPtr->AcpiLocalApic.Flags = 0;\r
-        ApicPtr->AcpiLocalApic.ApicId = 0;\r
-        Status = MpService->GetProcessorInfo (\r
-                              MpService,\r
-                              CurrProcessor,\r
-                              &MpContext\r
-                              );\r
-\r
-        if (!EFI_ERROR (Status)) {\r
-          if (MpContext.StatusFlag & PROCESSOR_ENABLED_BIT) {\r
-            ApicPtr->AcpiLocalApic.Flags = EFI_ACPI_3_0_LOCAL_APIC_ENABLED;\r
-          }\r
-          ApicPtr->AcpiLocalApic.ApicId = (UINT8)MpContext.ProcessorId;\r
-        }\r
-        CurrProcessor++;\r
-        break;\r
-\r
-      case EFI_ACPI_1_0_IO_APIC:\r
-        //\r
-        // IO APIC entries can be patched here\r
-        //\r
-        if (CurrIoApic == 0) {\r
-          //\r
-          // Update SOC internel IOAPIC base\r
-          //\r
-          ApicPtr->AcpiIoApic.IoApicId      =  PcdGet8 (PcdIoApicSettingIoApicId);\r
-          ApicPtr->AcpiIoApic.IoApicAddress =  (UINT32)PcdGet64(PcdIoApicBaseAddress);\r
-          ApicPtr->AcpiIoApic.GlobalSystemInterruptBase = 0;\r
-        } else {\r
-          //\r
-          // Porting is required to update other IOAPIC entries if available\r
-          //\r
-          ASSERT (0);\r
-        }\r
-        CurrIoApic++;\r
-        break;\r
-\r
-      default:\r
-        break;\r
-      };\r
-    CurrPtr = CurrPtr + ApicPtr->AcpiApicCommon.Length;\r
-  }\r
-}\r
-\r
-VOID\r
-AcpiUpdateTable (\r
-  IN OUT   EFI_ACPI_DESCRIPTION_HEADER  *TableHeader,\r
-  IN OUT   EFI_ACPI_TABLE_VERSION       *Version\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-\r
-    Set the correct table revision upon the setup value\r
-\r
-  Arguments:\r
-\r
-    Table   - The table to be set\r
-    Version - Version to publish\r
-\r
-  Returns:\r
-\r
-    None\r
-\r
---*/\r
-\r
-{\r
-  EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE *FadtHeader1;\r
-  EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *FadtHeader2;\r
-  EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE *FadtHeader3;\r
-  EFI_ACPI_MEMORY_MAPPED_ENHANCED_CONFIGURATION_SPACE_BASE_ADDRESS_ALLOCATION_STRUCTURE *AllocationStructurePtr;\r
-\r
-  if (TableHeader != NULL && Version != NULL) {\r
-\r
-    *Version = EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0;\r
-    //\r
-    // Here we use all 3.0 signature because all version use same signature if they supported\r
-    //\r
-    switch (TableHeader->Signature) {\r
-    //\r
-    // "APIC" Multiple APIC Description Table\r
-    //\r
-    case EFI_ACPI_3_0_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE:\r
-      ApicTableUpdate (TableHeader, Version);\r
-      break;\r
-    //\r
-    // "DSDT" Differentiated System Description Table\r
-    //\r
-    case EFI_ACPI_3_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE:\r
-      DsdtTableUpdate (TableHeader, Version);\r
-      break;\r
-\r
-    //\r
-    // "FACP" Fixed ACPI Description Table (FADT)\r
-    //\r
-    case EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE:\r
-      *Version = EFI_ACPI_TABLE_VERSION_NONE;\r
-      if (TableHeader->Revision == EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION) {\r
-        *Version = EFI_ACPI_TABLE_VERSION_1_0B;\r
-        FadtHeader1 = (EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE *) TableHeader;\r
-        FadtHeader1->SmiCmd     = PcdGet16(PcdSmmActivationPort);\r
-        FadtHeader1->Pm1aEvtBlk = PcdGet16(PcdPm1blkIoBaseAddress);\r
-        FadtHeader1->Pm1aCntBlk = PcdGet16(PcdPm1blkIoBaseAddress) + R_QNC_PM1BLK_PM1C;\r
-        FadtHeader1->PmTmrBlk   = PcdGet16(PcdPm1blkIoBaseAddress) + R_QNC_PM1BLK_PM1T;\r
-        FadtHeader1->Gpe0Blk    = PcdGet16(PcdGpe0blkIoBaseAddress);\r
-      } else if (TableHeader->Revision == EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION) {\r
-        *Version = EFI_ACPI_TABLE_VERSION_2_0;\r
-        FadtHeader2 = (EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *) TableHeader;\r
-        FadtHeader2->SmiCmd     = PcdGet16(PcdSmmActivationPort);\r
-        FadtHeader2->Pm1aEvtBlk = PcdGet16(PcdPm1blkIoBaseAddress);\r
-        FadtHeader2->Pm1aCntBlk = PcdGet16(PcdPm1blkIoBaseAddress) + R_QNC_PM1BLK_PM1C;\r
-        FadtHeader2->PmTmrBlk   = PcdGet16(PcdPm1blkIoBaseAddress) + R_QNC_PM1BLK_PM1T;\r
-        FadtHeader2->Gpe0Blk    = PcdGet16(PcdGpe0blkIoBaseAddress);\r
-        FadtHeader2->XPm1aEvtBlk.Address = FadtHeader2->Pm1aEvtBlk;\r
-        FadtHeader2->XPm1aCntBlk.Address = FadtHeader2->Pm1aCntBlk;\r
-        FadtHeader2->XPmTmrBlk.Address   = FadtHeader2->PmTmrBlk;\r
-        FadtHeader2->XGpe0Blk.Address    = FadtHeader2->Gpe0Blk;\r
-      } else if (TableHeader->Revision == EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION) {\r
-        *Version = EFI_ACPI_TABLE_VERSION_3_0;\r
-        FadtHeader3 = (EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE *) TableHeader;\r
-        FadtHeader3->SmiCmd     = PcdGet16(PcdSmmActivationPort);\r
-        FadtHeader3->Pm1aEvtBlk = PcdGet16(PcdPm1blkIoBaseAddress);\r
-        FadtHeader3->Pm1aCntBlk = PcdGet16(PcdPm1blkIoBaseAddress) + R_QNC_PM1BLK_PM1C;\r
-        FadtHeader3->PmTmrBlk   = PcdGet16(PcdPm1blkIoBaseAddress) + R_QNC_PM1BLK_PM1T;\r
-        FadtHeader3->Gpe0Blk    = PcdGet16(PcdGpe0blkIoBaseAddress);\r
-        FadtHeader3->XPm1aEvtBlk.Address = FadtHeader3->Pm1aEvtBlk;\r
-        FadtHeader3->XPm1aCntBlk.Address = FadtHeader3->Pm1aCntBlk;\r
-        FadtHeader3->XPmTmrBlk.Address   = FadtHeader3->PmTmrBlk;\r
-        FadtHeader3->XGpe0Blk.Address    = FadtHeader3->Gpe0Blk;\r
-      }\r
-      break;\r
-    //\r
-    // "FACS" Firmware ACPI Control Structure\r
-    //\r
-    case EFI_ACPI_3_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE:\r
-      break;\r
-    //\r
-    // "SSDT" Secondary System Description Table\r
-    //\r
-    case EFI_ACPI_3_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE:\r
-    break;\r
-    //\r
-    // "HPET" IA-PC High Precision Event Timer Table\r
-    //\r
-    case EFI_ACPI_3_0_HIGH_PRECISION_EVENT_TIMER_TABLE_SIGNATURE:\r
-      //\r
-      // If HPET is disabled in setup, don't publish the table.\r
-      //\r
-      if (mGlobalNvsArea.Area->HpetEnable == 0) {\r
-        *Version = EFI_ACPI_TABLE_VERSION_NONE;\r
-      }\r
-      ((EFI_ACPI_HIGH_PRECISION_EVENT_TIMER_TABLE_HEADER *) TableHeader)->BaseAddressLower32Bit.Address\r
-        = PcdGet64 (PcdHpetBaseAddress);\r
-      break;\r
-    //\r
-    // "SPCR" Serial Port Concole Redirection Table\r
-    //\r
-    case EFI_ACPI_3_0_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE:\r
-      break;\r
-    //\r
-    // "MCFG" PCI Express Memory Mapped Configuration Space Base Address Description Table\r
-    //\r
-    case EFI_ACPI_3_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE:\r
-      AllocationStructurePtr = (EFI_ACPI_MEMORY_MAPPED_ENHANCED_CONFIGURATION_SPACE_BASE_ADDRESS_ALLOCATION_STRUCTURE *)\r
-        ((UINT8 *)TableHeader + sizeof(EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE_HEADER));\r
-      AllocationStructurePtr->BaseAddress = PcdGet64(PcdPciExpressBaseAddress);\r
-      break;\r
-    // Lakeport platform doesn't support the following table\r
-    /*\r
-      //\r
-    // "ECDT" Embedded Controller Boot Resources Table\r
-        //\r
-    case EFI_ACPI_3_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE:\r
-      break;\r
-        //\r
-    // "PSDT" Persistent System Description Table\r
-          //\r
-    case EFI_ACPI_3_0_PERSISTENT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE:\r
-      break;\r
-          //\r
-    // "SBST" Smart Battery Specification Table\r
-    //\r
-    case EFI_ACPI_3_0_SMART_BATTERY_SPECIFICATION_TABLE_SIGNATURE:\r
-          break;\r
-    //\r
-    // "SLIT" System Locality Information Table\r
-    //\r
-    case EFI_ACPI_3_0_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE:\r
-          break;\r
-    //\r
-    // "SRAT" Static Resource Affinity Table\r
-    //\r
-    case EFI_ACPI_3_0_STATIC_RESOURCE_AFFINITY_TABLE_SIGNATURE:\r
-    break;\r
-  //\r
-    // "XSDT" Extended System Description Table\r
-  //\r
-    case EFI_ACPI_3_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE:\r
-      break;\r
-  //\r
-    // "BOOT" MS Simple Boot Spec\r
-  //\r
-    case EFI_ACPI_3_0_SIMPLE_BOOT_FLAG_TABLE_SIGNATURE:\r
-      break;\r
-  //\r
-    // "CPEP" Corrected Platform Error Polling Table\r
-  //\r
-    case EFI_ACPI_3_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_SIGNATURE:\r
-      break;\r
-  //\r
-    // "DBGP" MS Debug Port Spec\r
-  //\r
-    case EFI_ACPI_3_0_DEBUG_PORT_TABLE_SIGNATURE:\r
-      break;\r
-    //\r
-    // "ETDT" Event Timer Description Table\r
-    //\r
-    case EFI_ACPI_3_0_EVENT_TIMER_DESCRIPTION_TABLE_SIGNATURE:\r
-      break;\r
-    //\r
-    // "SPMI" Server Platform Management Interface Table\r
-    //\r
-    case EFI_ACPI_3_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE:\r
-      break;\r
-    //\r
-    // "TCPA" Trusted Computing Platform Alliance Capabilities Table\r
-    //\r
-    case EFI_ACPI_3_0_TRUSTED_COMPUTING_PLATFORM_ALLIANCE_CAPABILITIES_TABLE_SIGNATURE:\r
-      break;\r
-    */\r
-    default:\r
-      break;\r
-    }\r
-  }\r
-}\r
-\r
-//\r
-// Description:\r
-//    Entrypoint of Acpi Platform driver\r
-// In:\r
-//    ImageHandle\r
-//    SystemTable\r
-// Out:\r
-//    EFI_SUCCESS\r
-//    EFI_LOAD_ERROR\r
-//    EFI_OUT_OF_RESOURCES\r
-//\r
-\r
-EFI_STATUS\r
-AcpiPlatformEntryPoint (\r
-  IN EFI_HANDLE     ImageHandle,\r
-  IN EFI_SYSTEM_TABLE   *SystemTable\r
-  )\r
-{\r
-  EFI_STATUS                    Status;\r
-  EFI_ACPI_TABLE_PROTOCOL       *AcpiTable;\r
-  EFI_FIRMWARE_VOLUME2_PROTOCOL *FwVol;\r
-  INTN                          Instance;\r
-  EFI_ACPI_COMMON_HEADER        *CurrentTable;\r
-  UINTN                         TableHandle;\r
-  UINT32                        FvStatus;\r
-  UINTN                         Size;\r
-  EFI_ACPI_TABLE_VERSION        Version;\r
-  EFI_HANDLE                    Handle;\r
-  UINTN                         Index;\r
-  PCI_DEVICE_INFO               *PciDeviceInfo;\r
-  EFI_ACPI_HANDLE               PciRootHandle;\r
-  BOOLEAN                       UpdatePRT;\r
-  BOOLEAN                       UpdatePRW;\r
-  PCI_DEVICE_SETTING            *mConfigData;\r
-\r
-  DEBUG((DEBUG_INFO, "ACPI Platform start...\n"));\r
-\r
-  Instance = 0;\r
-  TableHandle = 0;\r
-  CurrentTable = NULL;\r
-  mConfigData  = NULL;\r
-\r
-  //\r
-  // Initialize the EFI Driver Library\r
-  //\r
-\r
-  ASSERT (sizeof (EFI_GLOBAL_NVS_AREA) == 512);\r
-\r
-  Status = gBS->AllocatePool (\r
-                   EfiACPIMemoryNVS,\r
-                   sizeof (EFI_GLOBAL_NVS_AREA),\r
-                   (VOID**)&mGlobalNvsArea.Area\r
-                   );\r
-\r
-  Handle = NULL;\r
-  Status = gBS->InstallProtocolInterface (\r
-                  &Handle,\r
-                  &gEfiGlobalNvsAreaProtocolGuid,\r
-                  EFI_NATIVE_INTERFACE,\r
-                  &mGlobalNvsArea\r
-                  );\r
-\r
-  ASSERT_EFI_ERROR (Status);\r
-  if (!EFI_ERROR (Status)) {\r
-    SetMem (\r
-      mGlobalNvsArea.Area,\r
-      sizeof (EFI_GLOBAL_NVS_AREA),\r
-      0\r
-      );\r
-  }\r
-\r
-  //\r
-  // Initialize the data.  Eventually, this will be controlled by setup options.\r
-  //\r
-  mGlobalNvsArea.Area->HpetEnable           =  PcdGetBool (PcdHpetEnable);\r
-  mGlobalNvsArea.Area->Pm1blkIoBaseAddress  =  PcdGet16(PcdPm1blkIoBaseAddress);\r
-  mGlobalNvsArea.Area->PmbaIoBaseAddress    =  PcdGet16(PcdPmbaIoBaseAddress);\r
-  mGlobalNvsArea.Area->Gpe0blkIoBaseAddress =  PcdGet16(PcdGpe0blkIoBaseAddress);\r
-  mGlobalNvsArea.Area->GbaIoBaseAddress     =  PcdGet16(PcdGbaIoBaseAddress);\r
-  mGlobalNvsArea.Area->SmbaIoBaseAddress    =  PcdGet16(PcdSmbaIoBaseAddress);\r
-  mGlobalNvsArea.Area->WdtbaIoBaseAddress   =  PcdGet16(PcdWdtbaIoBaseAddress);\r
-  mGlobalNvsArea.Area->HpetBaseAddress      =  (UINT32)PcdGet64(PcdHpetBaseAddress);\r
-  mGlobalNvsArea.Area->HpetSize             =  (UINT32)PcdGet64(PcdHpetSize);\r
-  mGlobalNvsArea.Area->PciExpressBaseAddress=  (UINT32)PcdGet64(PcdPciExpressBaseAddress);\r
-  mGlobalNvsArea.Area->PciExpressSize       =  (UINT32)PcdGet64(PcdPciExpressSize);\r
-  mGlobalNvsArea.Area->RcbaMmioBaseAddress  =  (UINT32)PcdGet64(PcdRcbaMmioBaseAddress);\r
-  mGlobalNvsArea.Area->RcbaMmioSize         =  (UINT32)PcdGet64(PcdRcbaMmioSize);\r
-  mGlobalNvsArea.Area->IoApicBaseAddress    =  (UINT32)PcdGet64(PcdIoApicBaseAddress);\r
-  mGlobalNvsArea.Area->IoApicSize           =  (UINT32)PcdGet64(PcdIoApicSize);\r
-  mGlobalNvsArea.Area->TpmPresent           =  (UINT32)(FALSE);\r
-  mGlobalNvsArea.Area->DBG2Present          =  (UINT32)(FALSE);\r
-  mGlobalNvsArea.Area->PlatformType         =  (UINT32)PcdGet16 (PcdPlatformType);\r
-\r
-  //\r
-  // Configure platform IO expander I2C Slave Address.\r
-  //\r
-  if (mGlobalNvsArea.Area->PlatformType == Galileo) {\r
-    if (PlatformLegacyGpioGetLevel (R_QNC_GPIO_RGLVL_RESUME_WELL, GALILEO_DETERMINE_IOEXP_SLA_RESUMEWELL_GPIO)) {\r
-      mGlobalNvsArea.Area->AlternateSla = FALSE;\r
-    } else {\r
-      mGlobalNvsArea.Area->AlternateSla = TRUE;\r
-    }\r
-  }\r
-\r
-  //\r
-  // Find the AcpiTable protocol\r
-  //\r
-  Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID**)&AcpiTable);\r
-  if (EFI_ERROR (Status)) {\r
-    return EFI_ABORTED;\r
-  }\r
-\r
-  //\r
-  // Initialize MADT table\r
-  //\r
-  Status = MadtTableInitialize (&CurrentTable, &Size);\r
-  ASSERT_EFI_ERROR (Status);\r
-  //\r
-  // Perform any table specific updates.\r
-  //\r
-  AcpiUpdateTable ((EFI_ACPI_DESCRIPTION_HEADER *) CurrentTable, &Version);\r
-\r
-  //\r
-  // Update the check sum\r
-  // It needs to be zeroed before the checksum calculation\r
-  //\r
-  ((EFI_ACPI_SDT_HEADER *)CurrentTable)->Checksum = 0;\r
-  ((EFI_ACPI_SDT_HEADER *)CurrentTable)->Checksum =\r
-    CalculateCheckSum8 ((VOID *)CurrentTable, CurrentTable->Length);\r
-\r
-  //\r
-  // Add the table\r
-  //\r
-  TableHandle = 0;\r
-  Status = AcpiTable->InstallAcpiTable (\r
-                            AcpiTable,\r
-                            CurrentTable,\r
-                            CurrentTable->Length,\r
-                          &TableHandle\r
-                          );\r
-  ASSERT_EFI_ERROR (Status);\r
-  CurrentTable = NULL;\r
-\r
-  //\r
-  // Init Pci Device PRT PRW information structure from PCD\r
-  //\r
-  mConfigData = (PCI_DEVICE_SETTING *)AllocateZeroPool (sizeof (PCI_DEVICE_SETTING));\r
-  ASSERT (mConfigData != NULL);\r
-  InitPciDeviceInfoStructure (mConfigData);\r
-  //\r
-  // Get the Acpi SDT protocol for manipulation on acpi table\r
-  //\r
-  Status = gBS->LocateProtocol (&gEfiAcpiSdtProtocolGuid, NULL, (VOID **)&mAcpiSdt);\r
-  ASSERT_EFI_ERROR (Status);\r
-  //\r
-  // Locate the firmware volume protocol\r
-  //\r
-  Status = LocateSupportProtocol (&gEfiFirmwareVolume2ProtocolGuid, (VOID**)&FwVol, 1);\r
-  if (EFI_ERROR (Status)) {\r
-    return EFI_ABORTED;\r
-  }\r
-  //\r
-  // Read tables from the storage file.\r
-  //\r
-\r
-  while (Status == EFI_SUCCESS) {\r
-\r
-    Status = FwVol->ReadSection (\r
-                      FwVol,\r
-                      (EFI_GUID*)PcdGetPtr (PcdAcpiTableStorageFile),\r
-                      EFI_SECTION_RAW,\r
-                      Instance,\r
-                      (VOID**)&CurrentTable,\r
-                      &Size,\r
-                      &FvStatus\r
-                      );\r
-\r
-    if (!EFI_ERROR(Status)) {\r
-      //\r
-      // Perform any table specific updates.\r
-      //\r
-      AcpiUpdateTable ((EFI_ACPI_DESCRIPTION_HEADER *) CurrentTable, &Version);\r
-\r
-      //\r
-      // Update the check sum\r
-      // It needs to be zeroed before the checksum calculation\r
-      //\r
-      ((EFI_ACPI_SDT_HEADER *)CurrentTable)->Checksum = 0;\r
-      ((EFI_ACPI_SDT_HEADER *)CurrentTable)->Checksum =\r
-        CalculateCheckSum8 ((VOID *)CurrentTable, CurrentTable->Length);\r
-\r
-      //\r
-      // Add the table\r
-      //\r
-      TableHandle = 0;\r
-      Status = AcpiTable->InstallAcpiTable (\r
-                            AcpiTable,\r
-                              CurrentTable,\r
-                            ((EFI_ACPI_DESCRIPTION_HEADER *) CurrentTable)->Length,\r
-                              &TableHandle\r
-                              );\r
-      if (EFI_ERROR(Status)) {\r
-        return EFI_ABORTED;\r
-      }\r
-      //\r
-      // If this table is the DSDT table, then update the _PRT and _PRW based on\r
-      // the settings from pcds\r
-      //\r
-      if (CurrentTable->Signature == EFI_ACPI_2_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE) {\r
-        //\r
-        // Create the root handle for DSDT table\r
-        //\r
-        Status = mAcpiSdt->OpenSdt (TableHandle, &mDsdtHandle);\r
-        ASSERT_EFI_ERROR (Status);\r
-\r
-        PciRootHandle = NULL;\r
-        PciRootHandle = SdtGetRootBridgeHandle (mAcpiSdt, mDsdtHandle);\r
-        ASSERT (PciRootHandle != NULL);\r
-\r
-        PciDeviceInfo = NULL;\r
-        for (Index = 0; Index < mConfigData->PciDeviceInfoNumber; Index++) {\r
-          PciDeviceInfo = &(mConfigData->PciDeviceInfo[Index]);\r
-\r
-          //\r
-          // Check whether this is a valid item\r
-          //\r
-          if ((PciDeviceInfo->BridgeAddress != 0xFFFFFFFF) && (PciDeviceInfo->DeviceAddress != 0xFFFFFFFF)) {\r
-\r
-            //DEBUG ((EFI_D_ERROR, "Valid pci info structure: bridge address:0x%x, device address:0x%x\n", PciDeviceInfo->BridgeAddress, PciDeviceInfo->DeviceAddress));\r
-\r
-            UpdatePRT = FALSE;\r
-            UpdatePRW = FALSE;\r
-\r
-            SdtCheckPciDeviceInfoChanged (PciDeviceInfo, &UpdatePRT, &UpdatePRW);\r
-            //\r
-            // Check whether there is any valid pci routing item\r
-            //\r
-            if (UpdatePRT) {\r
-              //\r
-              // Update the pci routing information\r
-              //\r
-              //DEBUG ((EFI_D_ERROR, "Update _PRT\n"));\r
-              SdtUpdatePciRouting (mAcpiSdt, PciRootHandle, PciDeviceInfo);\r
-            }\r
-            //\r
-            // Check whether there is any valid pci routing item\r
-            //\r
-            if (UpdatePRW) {\r
-              //\r
-              // Update the pci wakeup information\r
-              //\r
-              //DEBUG ((EFI_D_ERROR, "Update _PRW\n"));\r
-              SdtUpdatePowerWake (mAcpiSdt, PciRootHandle, PciDeviceInfo);\r
-            }\r
-          }\r
-        }\r
-        Status = mAcpiSdt->Close (PciRootHandle);\r
-        ASSERT_EFI_ERROR (Status);\r
-        //\r
-        // Mark the root handle as modified , let SDT protocol recaculate the checksum\r
-        //\r
-        ((EFI_AML_HANDLE *)mDsdtHandle)->Modified = TRUE;\r
-        Status = mAcpiSdt->Close (mDsdtHandle);\r
-        ASSERT_EFI_ERROR (Status);\r
-      }\r
-      //\r
-      // Increment the instance\r
-      //\r
-      Instance++;\r
-      CurrentTable = NULL;\r
-    }\r
-  }\r
-\r
-  gBS->FreePool (mConfigData);\r
-  return EFI_SUCCESS;\r
-}\r