]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
edk2: Remove packages moved to edk2-platforms
[mirror_edk2.git] / Vlv2TbltDevicePkg / AcpiPlatform / AcpiPlatform.c
diff --git a/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c b/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
deleted file mode 100644 (file)
index 5c03f66..0000000
+++ /dev/null
@@ -1,1338 +0,0 @@
-/** @file\r
-\r
-  Copyright (c) 2004  - 2019, Intel Corporation. All rights reserved.<BR>\r
-\r
-\r
-  SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-\r
-\r
-\r
-\r
-\r
-Module Name:\r
-\r
-  AcpiPlatform.c\r
-\r
-Abstract:\r
-\r
-  ACPI Platform Driver\r
-\r
-\r
-**/\r
-\r
-#include <PiDxe.h>\r
-#include <Protocol/TcgService.h>\r
-#include <Protocol/FirmwareVolume2.h>\r
-#include "AcpiPlatform.h"\r
-#include "AcpiPlatformHooks.h"\r
-#include "AcpiPlatformHooksLib.h"\r
-#include "Platform.h"\r
-#include <Hpet.h>\r
-#include <Mcfg.h>\r
-#include "Osfr.h"\r
-#include <Guid/GlobalVariable.h>\r
-#include <Guid/SetupVariable.h>\r
-#include <Guid/PlatformInfo.h>\r
-#include <Protocol/CpuIo.h>\r
-#include <Guid/BoardFeatures.h>\r
-#include <Protocol/AcpiSupport.h>\r
-#include <Protocol/AcpiS3Save.h>\r
-#include <Protocol/Ps2Policy.h>\r
-#include <Library/CpuIA32.h>\r
-#include <SetupMode.h>\r
-#include <Guid/AcpiTableStorage.h>\r
-#include <Guid/EfiVpdData.h>\r
-#include <PchAccess.h>\r
-#include <Guid/Vlv2Variable.h>\r
-#include <Guid/PlatformCpuInfo.h>\r
-#include <IndustryStandard/WindowsSmmSecurityMitigationTable.h>\r
-\r
-\r
-CHAR16    EfiPlatformCpuInfoVariable[] = L"PlatformCpuInfo";\r
-CHAR16    gACPIOSFRModelStringVariableName[] = ACPI_OSFR_MODEL_STRING_VARIABLE_NAME;\r
-CHAR16    gACPIOSFRRefDataBlockVariableName[] = ACPI_OSFR_REF_DATA_BLOCK_VARIABLE_NAME;\r
-CHAR16    gACPIOSFRMfgStringVariableName[] = ACPI_OSFR_MFG_STRING_VARIABLE_NAME;\r
-\r
-EFI_CPU_IO_PROTOCOL                    *mCpuIo;\r
-EFI_GLOBAL_NVS_AREA_PROTOCOL            mGlobalNvsArea;\r
-#ifndef __GNUC__\r
-#pragma optimize("", off)\r
-#endif\r
-BOOLEAN                   mFirstNotify;\r
-EFI_PLATFORM_INFO_HOB     *mPlatformInfo;\r
-EFI_GUID                  mSystemConfigurationGuid = SYSTEM_CONFIGURATION_GUID;\r
-SYSTEM_CONFIGURATION      mSystemConfiguration;\r
-SYSTEM_CONFIGURATION      mSystemConfig;\r
-\r
-UINT8 mSmbusRsvdAddresses[] = PLATFORM_SMBUS_RSVD_ADDRESSES;\r
-UINT8 mNumberSmbusAddress = sizeof( mSmbusRsvdAddresses ) / sizeof( mSmbusRsvdAddresses[0] );\r
-\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
-  @param[in]  Protocol            The protocol to find.\r
-  @param[in]  Instance            Return pointer to the first instance of the protocol.\r
-  @param[in]  Type                The type of protocol to locate.\r
-\r
-  @retval  EFI_SUCCESS            The function completed successfully.\r
-  @retval  EFI_NOT_FOUND          The protocol could not be located.\r
-  @retval  EFI_OUT_OF_RESOURCES   There are not enough resources to find the protocol.\r
-\r
-**/\r
-EFI_STATUS\r
-LocateSupportProtocol (\r
-  IN   EFI_GUID       *Protocol,\r
-  OUT  VOID           **Instance,\r
-  IN   UINT32         Type\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                   Index;\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
-    // Defined errors at this time are not found and out of resources.\r
-    //\r
-    return Status;\r
-  }\r
-\r
-  //\r
-  // Looking for FV with ACPI storage file.\r
-  //\r
-  for (Index = 0; Index < NumberOfHandles; Index++) {\r
-    //\r
-    // Get the protocol on this handle.\r
-    // This should not fail because of LocateHandleBuffer.\r
-    //\r
-    Status = gBS->HandleProtocol (\r
-                    HandleBuffer[Index],\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
-    Status = ((EFI_FIRMWARE_VOLUME_PROTOCOL *) (*Instance))->ReadFile (\r
-                                                              *Instance,\r
-                                                              &gEfiAcpiTableStorageGuid,\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 (!EFI_ERROR (Status)) {\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
-  // Free any allocated buffers.\r
-  //\r
-  gBS->FreePool (HandleBuffer);\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  This function will update any runtime platform specific information.\r
-  This currently includes:\r
-    Setting OEM table values, ID, table ID, creator ID and creator revision.\r
-    Enabling the proper processor entries in the APIC tables.\r
-\r
-  @param[in]  Table       The table to update.\r
-\r
-  @retval  EFI_SUCCESS    The function completed successfully.\r
-\r
-**/\r
-EFI_STATUS\r
-PlatformUpdateTables (\r
-  IN OUT EFI_ACPI_COMMON_HEADER  *Table\r
-  )\r
-{\r
-  EFI_ACPI_DESCRIPTION_HEADER                                 *TableHeader;\r
-  UINT8                                                       *CurrPtr;\r
-  UINT8                                                       *EndPtr;\r
-  ACPI_APIC_STRUCTURE_PTR                                     *ApicPtr;\r
-  UINT8                                                       CurrProcessor;\r
-  EFI_STATUS                                                  Status;\r
-  EFI_MP_SERVICES_PROTOCOL                                    *MpService;\r
-  UINTN                                                       MaximumNumberOfCPUs;\r
-  UINTN                                                       NumberOfEnabledCPUs;\r
-  UINTN                                                       BspIndex;\r
-  EFI_ACPI_1_0_ASF_DESCRIPTION_TABLE                          *AsfEntry;\r
-  EFI_ACPI_HIGH_PRECISION_EVENT_TIMER_TABLE_HEADER            *HpetTbl;\r
-  UINT64                                                      OemIdValue;\r
-  UINT8                                                       Index;\r
-  EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE                   *Facp;\r
-  EFI_ACPI_OSFR_TABLE                                         *OsfrTable;\r
-  EFI_ACPI_OSFR_OCUR_OBJECT                                   *pOcurObject;\r
-  EFI_ACPI_OSFR_OCUR_OBJECT                                   OcurObject = {{0xB46F133D, 0x235F, 0x4634, 0x9F, 0x03, 0xB1, 0xC0, 0x1C, 0x54, 0x78, 0x5B}, 0, 0, 0, 0, 0};\r
-  CHAR16                                                      *OcurMfgStringBuffer = NULL;\r
-  CHAR16                                                      *OcurModelStringBuffer = NULL;\r
-  UINT8                                                       *OcurRefDataBlockBuffer = NULL;\r
-  UINTN                                                       OcurMfgStringBufferSize;\r
-  UINTN                                                       OcurModelStringBufferSize;\r
-  UINTN                                                       OcurRefDataBlockBufferSize;\r
-#if defined (IDCC2_SUPPORTED) && IDCC2_SUPPORTED\r
-  EFI_ACPI_ASPT_TABLE                                         *pSpttTable;\r
-#endif\r
-  UINT16                                                      NumberOfHpets;\r
-  UINT16                                                      HpetCapIdValue;\r
-  UINT32                                                      HpetBlockID;\r
-  EFI_PROCESSOR_INFORMATION                                   ProcessorInfoBuffer;\r
-  UINT8                                                       TempVal;\r
-  EFI_ACPI_3_0_IO_APIC_STRUCTURE                              *IOApicType;\r
-  EFI_ACPI_3_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER         *APICTableHeader;\r
-  EFI_ACPI_WSMT_TABLE                                         *WsmtTable;\r
-\r
-  CurrPtr                 = NULL;\r
-  EndPtr                  = NULL;\r
-  ApicPtr                 = NULL;\r
-  CurrProcessor           = 0;\r
-\r
-\r
- if (Table->Signature != EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE) {\r
-    TableHeader = (EFI_ACPI_DESCRIPTION_HEADER *) Table;\r
-    //\r
-    // Update the OEMID.\r
-    //\r
-    OemIdValue = mPlatformInfo->AcpiOemId;\r
-\r
-    *(UINT32 *)(TableHeader->OemId)     = (UINT32)OemIdValue;\r
-    *(UINT16 *)(TableHeader->OemId + 4) = *(UINT16*)(((UINT8 *)&OemIdValue) + 4);\r
-\r
-    if ((Table->Signature != EFI_ACPI_2_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE)) {\r
-    //\r
-    // Update the OEM Table ID.\r
-    //\r
-      TableHeader->OemTableId = mPlatformInfo->AcpiOemTableId;\r
-    }\r
-\r
-    //\r
-    // Update the OEM Table ID.\r
-    //\r
-    TableHeader->OemRevision = EFI_ACPI_OEM_REVISION;\r
-\r
-    //\r
-    // Update the creator ID.\r
-    //\r
-    TableHeader->CreatorId = EFI_ACPI_CREATOR_ID;\r
-\r
-    //\r
-    // Update the creator revision.\r
-    //\r
-    TableHeader->CreatorRevision = EFI_ACPI_CREATOR_REVISION;\r
-  }\r
-\r
-  //\r
-  // Complete this function.\r
-  //\r
-  //\r
-  // Locate the MP services protocol.\r
-  //\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
-    return Status;\r
-  }\r
-\r
-  //\r
-  // Determine the number of processors.\r
-  //\r
-  MpService->GetNumberOfProcessors (\r
-              MpService,\r
-              &MaximumNumberOfCPUs,\r
-              &NumberOfEnabledCPUs\r
-              );\r
-\r
-  ASSERT (MaximumNumberOfCPUs <= MAX_CPU_NUM && NumberOfEnabledCPUs >= 1);\r
-\r
-\r
-  //\r
-  // Assign a invalid intial value for update.\r
-  //\r
-  //\r
-  // Update the processors in the APIC table.\r
-  //\r
-  switch (Table->Signature) {\r
-    case EFI_ACPI_1_0_ASF_DESCRIPTION_TABLE_SIGNATURE:\r
-      //\r
-      // Update the table if ASF is enabled. Otherwise, return error so caller will not install.\r
-      //\r
-      if (mSystemConfig.Asf == 1) {\r
-        return  EFI_UNSUPPORTED;\r
-      }\r
-      AsfEntry = (EFI_ACPI_1_0_ASF_DESCRIPTION_TABLE *) Table;\r
-      TempVal = (mNumberSmbusAddress < ASF_ADDR_DEVICE_ARRAY_LENGTH)? mNumberSmbusAddress : ASF_ADDR_DEVICE_ARRAY_LENGTH;\r
-      for (Index = 0; Index < TempVal; Index++) {\r
-        AsfEntry->AsfAddr.FixedSmbusAddresses[Index] = mSmbusRsvdAddresses[Index];\r
-      }\r
-      break;\r
-\r
-    case EFI_ACPI_3_0_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE:\r
-\r
-      Status = MpService->WhoAmI (\r
-                            MpService,\r
-                            &BspIndex\r
-                            );\r
-\r
-      //\r
-      // PCAT_COMPAT Set to 1 indicate 8259 vectors should be disabled.\r
-      //\r
-      APICTableHeader = (EFI_ACPI_3_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER *)Table;\r
-      APICTableHeader->Flags |= EFI_ACPI_3_0_PCAT_COMPAT;\r
-\r
-      CurrPtr = (UINT8 *) &((EFI_ACPI_DESCRIPTION_HEADER *) Table)[1];\r
-      CurrPtr = CurrPtr + 8;\r
-\r
-      //\r
-      // Size of Local APIC Address & Flag.\r
-      //\r
-      EndPtr  = (UINT8 *) Table;\r
-      EndPtr  = EndPtr + Table->Length;\r
-      while (CurrPtr < EndPtr) {\r
-        ApicPtr = (ACPI_APIC_STRUCTURE_PTR *) CurrPtr;\r
-        switch (ApicPtr->AcpiApicCommon.Type) {\r
-          case EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC:\r
-            //\r
-            // ESS override\r
-            // Fix for Ordering of MADT to be maintained as it is in MADT table.\r
-            //\r
-            // Update processor enabled or disabled and keep the local APIC\r
-            // order in MADT intact.\r
-            //\r
-            // Sanity check to make sure proc-id is not arbitrary.\r
-            //\r
-            DEBUG ((EFI_D_ERROR, "ApicPtr->AcpiLocalApic.AcpiProcessorId = %x, MaximumNumberOfCPUs = %x\n", \\r
-            ApicPtr->AcpiLocalApic.AcpiProcessorId, MaximumNumberOfCPUs));\r
-            if(ApicPtr->AcpiLocalApic.AcpiProcessorId > MaximumNumberOfCPUs) {\r
-              ApicPtr->AcpiLocalApic.AcpiProcessorId = (UINT8)MaximumNumberOfCPUs;\r
-            }\r
-\r
-            ApicPtr->AcpiLocalApic.Flags  = 0;\r
-\r
-            for (CurrProcessor = 0; CurrProcessor < MaximumNumberOfCPUs; CurrProcessor++) {\r
-              Status = MpService->GetProcessorInfo (\r
-                                    MpService,\r
-                                    CurrProcessor,\r
-                                    &ProcessorInfoBuffer\r
-                                    );\r
-\r
-              if (Status == EFI_SUCCESS && ProcessorInfoBuffer.ProcessorId == ApicPtr->AcpiLocalApic.ApicId) {\r
-                //\r
-                // Check to see whether or not a processor (or thread) is enabled.\r
-                //\r
-                if ((BspIndex == CurrProcessor) || ((ProcessorInfoBuffer.StatusFlag & PROCESSOR_ENABLED_BIT) != 0)) {\r
-                  //\r
-                  // Go on and check if Hyper Threading is enabled. If HT not enabled\r
-                  // hide this thread from OS by not setting the flag to 1.  This is the\r
-                  // software way to disable Hyper Threading.  Basically we just hide it\r
-                  // from the OS.\r
-                  //\r
-                  ApicPtr->AcpiLocalApic.Flags = EFI_ACPI_1_0_LOCAL_APIC_ENABLED;\r
-\r
-\r
-                  if(ProcessorInfoBuffer.Location.Thread != 0) {\r
-                    ApicPtr->AcpiLocalApic.Flags = 0;\r
-                  }\r
-\r
-                  AppendCpuMapTableEntry (&(ApicPtr->AcpiLocalApic));\r
-                }\r
-                break;\r
-              }\r
-            }\r
-\r
-            //\r
-            // If no APIC-ID match, the cpu may not be populated.\r
-            //\r
-            break;\r
-\r
-          case EFI_ACPI_3_0_IO_APIC:\r
-\r
-            IOApicType = (EFI_ACPI_3_0_IO_APIC_STRUCTURE *)CurrPtr;\r
-            IOApicType->IoApicId = 0x02;\r
-            //\r
-            // IO APIC entries can be patched here.\r
-            //\r
-            break;\r
-        }\r
-\r
-        CurrPtr = CurrPtr + ApicPtr->AcpiApicCommon.Length;\r
-      }\r
-      break;\r
-\r
-    case EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE:\r
-\r
-       Facp = (EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE *) Table;\r
-       Facp->Flags &= (UINT32)(~(3<<2));\r
-\r
-      break;\r
-\r
-    case EFI_ACPI_3_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE:\r
-      //\r
-      // Patch the memory resource.\r
-      //\r
-      PatchDsdtTable ((EFI_ACPI_DESCRIPTION_HEADER *) Table);\r
-      break;\r
-\r
-    case EFI_ACPI_3_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE:\r
-      //\r
-      // Gv3 support\r
-      //\r
-      // TBD: Need re-design based on the ValleyTrail platform.\r
-      //\r
-      break;\r
-\r
-    case EFI_ACPI_3_0_HIGH_PRECISION_EVENT_TIMER_TABLE_SIGNATURE:\r
-      //\r
-      // Adjust HPET Table to correct the Base Address.\r
-      //\r
-      // Enable HPET always as Hpet.asi always indicates that Hpet is enabled.\r
-      //\r
-      MmioOr8 (R_PCH_PCH_HPET + R_PCH_PCH_HPET_GCFG, B_PCH_PCH_HPET_GCFG_EN);\r
-\r
-\r
-      HpetTbl = (EFI_ACPI_HIGH_PRECISION_EVENT_TIMER_TABLE_HEADER *) Table;\r
-      HpetTbl->BaseAddressLower32Bit.Address = HPET_BASE_ADDRESS;\r
-      HpetTbl->EventTimerBlockId = *((UINT32*)(UINTN)HPET_BASE_ADDRESS);\r
-\r
-      HpetCapIdValue = *(UINT16 *)(UINTN)(HPET_BASE_ADDRESS);\r
-      NumberOfHpets = HpetCapIdValue & B_PCH_PCH_HPET_GCID_NT;  // Bits [8:12] contains the number of Hpets\r
-      HpetBlockID = EFI_ACPI_EVENT_TIMER_BLOCK_ID;\r
-\r
-      if((NumberOfHpets) && (NumberOfHpets & B_PCH_PCH_HPET_GCID_NT)) {\r
-        HpetBlockID |= (NumberOfHpets);\r
-      }\r
-      HpetTbl->EventTimerBlockId = HpetBlockID;\r
-\r
-      break;\r
-\r
-    case EFI_ACPI_3_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE:\r
-      //\r
-      // Update MCFG base and end bus number.\r
-      //\r
-      ((EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE *) Table)->Segment[0].BaseAddress\r
-        = mPlatformInfo->PciData.PciExpressBase;\r
-      ((EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE *) Table)->Segment[0].EndBusNumber\r
-        = (UINT8)RShiftU64 (mPlatformInfo->PciData.PciExpressSize, 20) - 1;\r
-      break;\r
-\r
-\r
-    case EFI_ACPI_OSFR_TABLE_SIGNATURE:\r
-      //\r
-      // Get size of OSFR variable.\r
-      //\r
-      OcurMfgStringBufferSize = 0;\r
-      Status = gRT->GetVariable (\r
-                      gACPIOSFRMfgStringVariableName,\r
-                      &gACPIOSFRMfgStringVariableGuid,\r
-                      NULL,\r
-                      &OcurMfgStringBufferSize,\r
-                      NULL\r
-                      );\r
-      if (Status != EFI_BUFFER_TOO_SMALL) {\r
-        //\r
-        // Variable must not be present on the system.\r
-        //\r
-        return EFI_UNSUPPORTED;\r
-      }\r
-\r
-      //\r
-      // Allocate memory for variable data.\r
-      //\r
-      OcurMfgStringBuffer = AllocatePool (OcurMfgStringBufferSize);\r
-      Status = gRT->GetVariable (\r
-                      gACPIOSFRMfgStringVariableName,\r
-                      &gACPIOSFRMfgStringVariableGuid,\r
-                      NULL,\r
-                      &OcurMfgStringBufferSize,\r
-                      OcurMfgStringBuffer\r
-                      );\r
-      if (!EFI_ERROR (Status)) {\r
-        OcurModelStringBufferSize = 0;\r
-        Status = gRT->GetVariable (\r
-                        gACPIOSFRModelStringVariableName,\r
-                        &gACPIOSFRModelStringVariableGuid,\r
-                        NULL,\r
-                        &OcurModelStringBufferSize,\r
-                        NULL\r
-                        );\r
-        if (Status != EFI_BUFFER_TOO_SMALL) {\r
-          //\r
-          // Variable must not be present on the system.\r
-          //\r
-          return EFI_UNSUPPORTED;\r
-        }\r
-\r
-        //\r
-        // Allocate memory for variable data.\r
-        //\r
-        OcurModelStringBuffer = AllocatePool (OcurModelStringBufferSize);\r
-        Status = gRT->GetVariable (\r
-                        gACPIOSFRModelStringVariableName,\r
-                        &gACPIOSFRModelStringVariableGuid,\r
-                        NULL,\r
-                        &OcurModelStringBufferSize,\r
-                        OcurModelStringBuffer\r
-                        );\r
-        if (!EFI_ERROR (Status)) {\r
-          OcurRefDataBlockBufferSize = 0;\r
-          Status = gRT->GetVariable (\r
-                          gACPIOSFRRefDataBlockVariableName,\r
-                          &gACPIOSFRRefDataBlockVariableGuid,\r
-                          NULL,\r
-                          &OcurRefDataBlockBufferSize,\r
-                          NULL\r
-                          );\r
-          if (Status == EFI_BUFFER_TOO_SMALL) {\r
-            //\r
-            // Allocate memory for variable data.\r
-            //\r
-            OcurRefDataBlockBuffer = AllocatePool (OcurRefDataBlockBufferSize);\r
-            Status = gRT->GetVariable (\r
-                            gACPIOSFRRefDataBlockVariableName,\r
-                            &gACPIOSFRRefDataBlockVariableGuid,\r
-                            NULL,\r
-                            &OcurRefDataBlockBufferSize,\r
-                            OcurRefDataBlockBuffer\r
-                            );\r
-          }\r
-          OsfrTable = (EFI_ACPI_OSFR_TABLE *) Table;\r
-          //\r
-          // Currently only one object is defined: OCUR_OSFR_TABLE.\r
-          //\r
-          OsfrTable->ObjectCount = 1;\r
-          //\r
-          // Initialize table length to fixed portion of the ACPI OSFR table.\r
-          //\r
-          OsfrTable->Header.Length = sizeof (EFI_ACPI_OSFR_TABLE_FIXED_PORTION);\r
-          *(UINT32 *)((UINTN) OsfrTable + sizeof (EFI_ACPI_OSFR_TABLE_FIXED_PORTION)) = \\r
-            (UINT32) (sizeof (EFI_ACPI_OSFR_TABLE_FIXED_PORTION) + sizeof (UINT32));\r
-          pOcurObject = (EFI_ACPI_OSFR_OCUR_OBJECT *)((UINTN) OsfrTable + sizeof (EFI_ACPI_OSFR_TABLE_FIXED_PORTION) + \\r
-            sizeof (UINT32));\r
-          CopyMem (pOcurObject, &OcurObject, sizeof (EFI_ACPI_OSFR_OCUR_OBJECT));\r
-          pOcurObject->ManufacturerNameStringOffset = (UINT32)((UINTN) pOcurObject - (UINTN) OsfrTable + \\r
-            sizeof (EFI_ACPI_OSFR_OCUR_OBJECT));\r
-          pOcurObject->ModelNameStringOffset = (UINT32)((UINTN) pOcurObject - (UINTN) OsfrTable + \\r
-            sizeof (EFI_ACPI_OSFR_OCUR_OBJECT) + OcurMfgStringBufferSize);\r
-          if (OcurRefDataBlockBufferSize > 0) {\r
-            pOcurObject->MicrosoftReferenceOffset = (UINT32)((UINTN) pOcurObject - (UINTN) OsfrTable + \\r
-              sizeof (EFI_ACPI_OSFR_OCUR_OBJECT) + OcurMfgStringBufferSize + OcurModelStringBufferSize);\r
-          }\r
-          CopyMem ((UINTN *)((UINTN) pOcurObject + sizeof (EFI_ACPI_OSFR_OCUR_OBJECT)), OcurMfgStringBuffer, \\r
-            OcurMfgStringBufferSize);\r
-          CopyMem ((UINTN *)((UINTN) pOcurObject + sizeof (EFI_ACPI_OSFR_OCUR_OBJECT) + OcurMfgStringBufferSize), \\r
-            OcurModelStringBuffer, OcurModelStringBufferSize);\r
-          if (OcurRefDataBlockBufferSize > 0) {\r
-            CopyMem ((UINTN *)((UINTN) pOcurObject + sizeof (EFI_ACPI_OSFR_OCUR_OBJECT) + OcurMfgStringBufferSize + \\r
-            OcurModelStringBufferSize),OcurRefDataBlockBuffer, OcurRefDataBlockBufferSize);\r
-          }\r
-          OsfrTable->Header.Length += (UINT32)(OcurMfgStringBufferSize + OcurModelStringBufferSize + OcurRefDataBlockBufferSize);\r
-          OsfrTable->Header.Length += sizeof (EFI_ACPI_OSFR_OCUR_OBJECT) + sizeof (UINT32);\r
-        }\r
-      }\r
-      gBS->FreePool (OcurMfgStringBuffer);\r
-      gBS->FreePool (OcurModelStringBuffer);\r
-      gBS->FreePool (OcurRefDataBlockBuffer);\r
-      break;\r
-\r
-\r
-    case EFI_ACPI_WINDOWS_SMM_SECURITY_MITIGATION_TABLE_SIGNATURE:\r
-      WsmtTable = (EFI_ACPI_WSMT_TABLE *) Table;\r
-       //\r
-       // Update Microsoft WSMT table Protections flags.\r
-       //\r
-      WsmtTable->ProtectionFlags = ((WsmtTable->ProtectionFlags) | (EFI_WSMT_PROTECTION_FLAGS_FIXED_COMM_BUFFERS | EFI_WSMT_PROTECTION_FLAGS_COMM_BUFFER_NESTED_PTR_PROTECTION ));\r
-      break;\r
-\r
-\r
-    default:\r
-      break;\r
-  }\r
-\r
-  //\r
-  //\r
-  // Update the hardware signature in the FACS structure.\r
-  //\r
-  //\r
-  // Locate the SPCR table and update based on current settings.\r
-  // The user may change CR settings via setup or other methods.\r
-  // The SPCR table must match.\r
-  //\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-\r
-Routine Description:\r
-\r
-  GC_TODO: Add function description.\r
-\r
-Arguments:\r
-\r
-  Event   - GC_TODO: add argument description\r
-  Context - GC_TODO: add argument description\r
-\r
-Returns:\r
-\r
-  GC_TODO: add return values\r
-\r
-**/\r
-STATIC\r
-VOID\r
-EFIAPI\r
-OnReadyToBoot (\r
-  IN      EFI_EVENT                 Event,\r
-  IN      VOID                      *Context\r
-  )\r
-{\r
-  EFI_STATUS                  Status;\r
-  EFI_ACPI_TABLE_VERSION      TableVersion;\r
-  EFI_ACPI_SUPPORT_PROTOCOL   *AcpiSupport;\r
-  EFI_ACPI_S3_SAVE_PROTOCOL   *AcpiS3Save;\r
-  SYSTEM_CONFIGURATION        SetupVarBuffer;\r
-  UINTN                       VariableSize;\r
-  EFI_PLATFORM_CPU_INFO       *PlatformCpuInfoPtr = NULL;\r
-  EFI_PLATFORM_CPU_INFO       PlatformCpuInfo;\r
-  EFI_PEI_HOB_POINTERS          GuidHob;\r
-\r
-  if (mFirstNotify) {\r
-    return;\r
-  }\r
-\r
-  mFirstNotify = TRUE;\r
-\r
-  //\r
-  // To avoid compiler warning of "C4701: potentially uninitialized local variable 'PlatformCpuInfo' used".\r
-  //\r
-  PlatformCpuInfo.CpuVersion.FullCpuId = 0;\r
-\r
-  //\r
-  // Get Platform CPU Info HOB.\r
-  //\r
-  PlatformCpuInfoPtr = NULL;\r
-  ZeroMem (&PlatformCpuInfo, sizeof(EFI_PLATFORM_CPU_INFO));\r
-  VariableSize = sizeof(EFI_PLATFORM_CPU_INFO);\r
-  Status = gRT->GetVariable(\r
-                  EfiPlatformCpuInfoVariable,\r
-                  &gEfiVlv2VariableGuid,\r
-                  NULL,\r
-                  &VariableSize,\r
-                  PlatformCpuInfoPtr\r
-                  );\r
-  if (EFI_ERROR(Status)) {\r
-    GuidHob.Raw = GetHobList ();\r
-    if (GuidHob.Raw != NULL) {\r
-      if ((GuidHob.Raw = GetNextGuidHob (&gEfiPlatformCpuInfoGuid, GuidHob.Raw)) != NULL) {\r
-        PlatformCpuInfoPtr = GET_GUID_HOB_DATA (GuidHob.Guid);\r
-      }\r
-    }\r
-  }\r
-\r
-  if ((PlatformCpuInfoPtr != NULL)) {\r
-    CopyMem(&PlatformCpuInfo, PlatformCpuInfoPtr, sizeof(EFI_PLATFORM_CPU_INFO));\r
-  }\r
-\r
-  //\r
-  // Update the ACPI parameter blocks finally.\r
-  //\r
-  VariableSize = sizeof (SYSTEM_CONFIGURATION);\r
-  Status = gRT->GetVariable (\r
-                  L"Setup",\r
-                  &mSystemConfigurationGuid,\r
-                  NULL,\r
-                  &VariableSize,\r
-                  &SetupVarBuffer\r
-                  );\r
-  if (EFI_ERROR (Status) || VariableSize != sizeof(SYSTEM_CONFIGURATION)) {\r
-    //The setup variable is corrupted\r
-    VariableSize = sizeof(SYSTEM_CONFIGURATION);\r
-    Status = gRT->GetVariable(\r
-              L"SetupRecovery",\r
-              &mSystemConfigurationGuid,\r
-              NULL,\r
-              &VariableSize,\r
-              &SetupVarBuffer\r
-              );\r
-    ASSERT_EFI_ERROR (Status);\r
-  }\r
-\r
-  //\r
-  // Find the AcpiSupport protocol.\r
-  //\r
-  Status = LocateSupportProtocol (&gEfiAcpiSupportProtocolGuid, (VOID **) &AcpiSupport, 0);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  TableVersion = EFI_ACPI_TABLE_VERSION_2_0;\r
-\r
-  //\r
-  // Publish ACPI 1.0 or 2.0 Tables.\r
-  //\r
-  Status = AcpiSupport->PublishTables (\r
-                          AcpiSupport,\r
-                          TableVersion\r
-                          );\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  //\r
-  // S3 script save.\r
-  //\r
-  Status = gBS->LocateProtocol (&gEfiAcpiS3SaveProtocolGuid, NULL, (VOID **) &AcpiS3Save);\r
-  if (!EFI_ERROR (Status)) {\r
-    AcpiS3Save->S3Save (AcpiS3Save, NULL);\r
-  }\r
-\r
-}\r
-\r
-VOID\r
-PR1FSASetting (\r
-  IN VOID\r
-  )\r
-{\r
-  //\r
-  // for FSA on  PR1.\r
-  //\r
-  if (mPlatformInfo->BoardId == BOARD_ID_BL_FFRD && mPlatformInfo->BoardRev >= PR1) {\r
-    DEBUG((EFI_D_ERROR, "Set FSA status = 1 for FFRD PR1\n"));\r
-    mGlobalNvsArea.Area->FsaStatus  = mSystemConfiguration.PchFSAOn;\r
-  }\r
-  if (mPlatformInfo->BoardId == BOARD_ID_BL_FFRD8) {\r
-    DEBUG((EFI_D_ERROR, "Set FSA status = 1 for FFRD8\n"));\r
-    mGlobalNvsArea.Area->FsaStatus  = mSystemConfiguration.PchFSAOn;\r
-  }\r
-\r
-}\r
-\r
-/**\r
-  Entry point for Acpi platform driver.\r
-\r
-  @param[in]  ImageHandle        A handle for the image that is initializing this driver.\r
-  @param[in]  SystemTable        A pointer to the EFI system table.\r
-\r
-  @retval  EFI_SUCCESS           Driver initialized successfully.\r
-  @retval  EFI_LOAD_ERROR        Failed to Initialize or has been loaded.\r
-  @retval  EFI_OUT_OF_RESOURCES  Could not allocate needed resources.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-AcpiPlatformEntryPoint (\r
-  IN EFI_HANDLE         ImageHandle,\r
-  IN EFI_SYSTEM_TABLE   *SystemTable\r
-  )\r
-{\r
-  EFI_STATUS                    Status;\r
-  EFI_STATUS                    AcpiStatus;\r
-  EFI_ACPI_SUPPORT_PROTOCOL     *AcpiSupport;\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_EVENT                     Event;\r
-  EFI_ACPI_TABLE_VERSION        TableVersion;\r
-  UINTN                         VarSize;\r
-  UINTN                         SysCfgSize;\r
-  EFI_HANDLE                    Handle;\r
-  EFI_PS2_POLICY_PROTOCOL       *Ps2Policy;\r
-  EFI_PEI_HOB_POINTERS          GuidHob;\r
-  UINT8                         PortData;\r
-  EFI_MP_SERVICES_PROTOCOL      *MpService;\r
-  UINTN                         MaximumNumberOfCPUs;\r
-  UINTN                         NumberOfEnabledCPUs;\r
-  PCH_STEPPING                  pchStepping;\r
-\r
-  mFirstNotify      = FALSE;\r
-\r
-  TableVersion      = EFI_ACPI_TABLE_VERSION_2_0;\r
-  Instance          = 0;\r
-  CurrentTable      = NULL;\r
-  TableHandle       = 0;\r
-\r
-  //\r
-  // Update HOB variable for PCI resource information.\r
-  // Get the HOB list.  If it is not present, then ASSERT.\r
-  //\r
-  GuidHob.Raw = GetHobList ();\r
-  if (GuidHob.Raw != NULL) {\r
-    if ((GuidHob.Raw = GetNextGuidHob (&gEfiPlatformInfoGuid, GuidHob.Raw)) != NULL) {\r
-      mPlatformInfo = GET_GUID_HOB_DATA (GuidHob.Guid);\r
-    }\r
-  }\r
-\r
-  //\r
-  // Search for the Memory Configuration GUID HOB.  If it is not present, then\r
-  // there's nothing we can do. It may not exist on the update path.\r
-  //\r
-  VarSize = sizeof(SYSTEM_CONFIGURATION);\r
-  Status = gRT->GetVariable(\r
-                  L"Setup",\r
-                  &mSystemConfigurationGuid,\r
-                  NULL,\r
-                  &VarSize,\r
-                  &mSystemConfiguration\r
-                  );\r
-  if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {\r
-    //The setup variable is corrupted\r
-    VarSize = sizeof(SYSTEM_CONFIGURATION);\r
-    Status = gRT->GetVariable(\r
-              L"SetupRecovery",\r
-              &mSystemConfigurationGuid,\r
-              NULL,\r
-              &VarSize,\r
-              &mSystemConfiguration\r
-              );\r
-    ASSERT_EFI_ERROR (Status);\r
-  }\r
-\r
-  //\r
-  // Find the AcpiSupport protocol.\r
-  //\r
-  Status = LocateSupportProtocol (&gEfiAcpiSupportProtocolGuid, (VOID **) &AcpiSupport, 0);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  //\r
-  // Locate the firmware volume protocol.\r
-  //\r
-  Status = LocateSupportProtocol (&gEfiFirmwareVolume2ProtocolGuid, (VOID **) &FwVol, 1);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  //\r
-  // Read the current system configuration variable store.\r
-  //\r
-  SysCfgSize = sizeof(SYSTEM_CONFIGURATION);\r
-  Status = gRT->GetVariable (\r
-                  L"Setup",\r
-                  &gEfiNormalSetupGuid,\r
-                  NULL,\r
-                  &SysCfgSize,\r
-                  &mSystemConfig\r
-                  );\r
-  if (EFI_ERROR (Status) || SysCfgSize != sizeof(SYSTEM_CONFIGURATION)) {\r
-    //The setup variable is corrupted\r
-    SysCfgSize = sizeof(SYSTEM_CONFIGURATION);\r
-    Status = gRT->GetVariable(\r
-              L"SetupRecovery",\r
-              &gEfiNormalSetupGuid,\r
-              NULL,\r
-              &SysCfgSize,\r
-              &mSystemConfig\r
-              );\r
-    ASSERT_EFI_ERROR (Status);\r
-  }\r
-\r
-\r
-  Status    = EFI_SUCCESS;\r
-  Instance  = 0;\r
-\r
-  //\r
-  // TBD: Need re-design based on the ValleyTrail platform.\r
-  //\r
-  Status = gBS->LocateProtocol (\r
-                  &gEfiMpServiceProtocolGuid,\r
-                  NULL,\r
-                  (VOID **) &MpService\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  //\r
-  // Determine the number of processors.\r
-  //\r
-  MpService->GetNumberOfProcessors (\r
-               MpService,\r
-               &MaximumNumberOfCPUs,\r
-               &NumberOfEnabledCPUs\r
-               );\r
-\r
-  //\r
-  // Allocate and initialize the NVS area for SMM and ASL communication.\r
-  //\r
-  Status = gBS->AllocatePool (\r
-                  EfiACPIMemoryNVS,\r
-                  sizeof (EFI_GLOBAL_NVS_AREA),\r
-                  (void **)&mGlobalNvsArea.Area\r
-                  );\r
-  ASSERT_EFI_ERROR (Status);\r
-  gBS->SetMem (\r
-         mGlobalNvsArea.Area,\r
-         sizeof (EFI_GLOBAL_NVS_AREA),\r
-         0\r
-         );\r
-  DEBUG((EFI_D_ERROR, "mGlobalNvsArea.Area is at 0x%X\n", mGlobalNvsArea.Area));\r
-\r
-  //\r
-  // Update global NVS area for ASL and SMM init code to use.\r
-  //\r
-  mGlobalNvsArea.Area->ApicEnable                 = 1;\r
-  mGlobalNvsArea.Area->EmaEnable                  = 0;\r
-\r
-  mGlobalNvsArea.Area->NumberOfBatteries          = 1;\r
-  mGlobalNvsArea.Area->BatteryCapacity0           = 100;\r
-  mGlobalNvsArea.Area->BatteryStatus0             = 84;\r
-  mGlobalNvsArea.Area->OnboardCom                 = 1;\r
-  mGlobalNvsArea.Area->IdeMode                    = 0;\r
-  mGlobalNvsArea.Area->PowerState                 = 0;\r
-\r
-  mGlobalNvsArea.Area->LogicalProcessorCount    = (UINT8)NumberOfEnabledCPUs;\r
-\r
-  mGlobalNvsArea.Area->PassiveThermalTripPoint  = mSystemConfiguration.PassiveThermalTripPoint;\r
-  mGlobalNvsArea.Area->PassiveTc1Value          = mSystemConfiguration.PassiveTc1Value;\r
-  mGlobalNvsArea.Area->PassiveTc2Value          = mSystemConfiguration.PassiveTc2Value;\r
-  mGlobalNvsArea.Area->PassiveTspValue          = mSystemConfiguration.PassiveTspValue;\r
-  mGlobalNvsArea.Area->CriticalThermalTripPoint = mSystemConfiguration.CriticalThermalTripPoint;\r
-\r
-  mGlobalNvsArea.Area->IgdPanelType             = mSystemConfiguration.IgdFlatPanel;\r
-  mGlobalNvsArea.Area->IgdPanelScaling          = mSystemConfiguration.PanelScaling;\r
-  mGlobalNvsArea.Area->IgdSciSmiMode            = 0;\r
-  mGlobalNvsArea.Area->IgdTvFormat              = 0;\r
-  mGlobalNvsArea.Area->IgdTvMinor               = 0;\r
-  mGlobalNvsArea.Area->IgdSscConfig             = 1;\r
-  mGlobalNvsArea.Area->IgdBiaConfig             = mSystemConfiguration.IgdLcdIBia;\r
-  mGlobalNvsArea.Area->IgdBlcConfig             = mSystemConfiguration.IgdLcdIGmchBlc;\r
-  mGlobalNvsArea.Area->IgdDvmtMemSize           =  mSystemConfiguration.IgdDvmt50TotalAlloc;\r
-  mGlobalNvsArea.Area->IgdPAVP                  = mSystemConfiguration.PavpMode;\r
-\r
-  mGlobalNvsArea.Area->AlsEnable                = mSystemConfiguration.AlsEnable;\r
-  mGlobalNvsArea.Area->BacklightControlSupport  = 2;\r
-  mGlobalNvsArea.Area->BrightnessPercentage    = 100;\r
-  mGlobalNvsArea.Area->IgdState = 1;\r
-  mGlobalNvsArea.Area->LidState = 1;\r
-\r
-  mGlobalNvsArea.Area->DeviceId1 = 0x80000100 ;\r
-  mGlobalNvsArea.Area->DeviceId2 = 0x80000400 ;\r
-  mGlobalNvsArea.Area->DeviceId3 = 0x80000200 ;\r
-  mGlobalNvsArea.Area->DeviceId4 = 0x04;\r
-  mGlobalNvsArea.Area->DeviceId5 = 0x05;\r
-  mGlobalNvsArea.Area->NumberOfValidDeviceId = 4 ;\r
-  mGlobalNvsArea.Area->CurrentDeviceList = 0x0F ;\r
-  mGlobalNvsArea.Area->PreviousDeviceList = 0x0F ;\r
-\r
-  mGlobalNvsArea.Area->UartSelection = mSystemConfiguration.UartInterface;\r
-  mGlobalNvsArea.Area->PcuUart1Enable = mSystemConfiguration.PcuUart1;\r
-  mGlobalNvsArea.Area->NativePCIESupport = 1;\r
-  mGlobalNvsArea.Area->RtcBattery = mSystemConfiguration.RtcBattery;\r
-\r
-\r
-\r
-\r
-\r
-  //\r
-  // Update BootMode: 0:ACPI mode; 1:PCI mode\r
-  //\r
-  mGlobalNvsArea.Area->LpssSccMode = mSystemConfiguration.LpssPciModeEnabled;\r
-  if (mSystemConfiguration.LpssMipiHsi == 0) {\r
-    mGlobalNvsArea.Area->MipiHsiAddr  = 0;\r
-    mGlobalNvsArea.Area->MipiHsiLen   = 0;\r
-    mGlobalNvsArea.Area->MipiHsi1Addr = 0;\r
-    mGlobalNvsArea.Area->MipiHsi1Len  = 0;\r
-  }\r
-\r
-  //\r
-  // Platform Flavor\r
-  //\r
-  mGlobalNvsArea.Area->PlatformFlavor = mPlatformInfo->PlatformFlavor;\r
-\r
-  //\r
-  // Update the Platform id\r
-  //\r
-  mGlobalNvsArea.Area->BoardID = mPlatformInfo->BoardId;\r
-\r
-  //\r
-  // Update the  Board Revision\r
-  //\r
-  mGlobalNvsArea.Area->FabID = mPlatformInfo->BoardRev;\r
-\r
-  //\r
-  // Update SOC Stepping\r
-  //\r
-  mGlobalNvsArea.Area->SocStepping = (UINT8)(PchStepping());\r
-\r
-  mGlobalNvsArea.Area->OtgMode = mSystemConfiguration.PchUsbOtg;\r
-\r
-  pchStepping = PchStepping();\r
-  if (mSystemConfiguration.UsbAutoMode == 1) {\r
-    //\r
-    // Auto mode is enabled.\r
-    //\r
-    if (PchA0 == pchStepping) {\r
-      //\r
-      //  For A0, EHCI is enabled as default.\r
-      //\r
-      mSystemConfiguration.PchUsb20       = 1;\r
-      mSystemConfiguration.PchUsb30Mode   = 0;\r
-      mSystemConfiguration.UsbXhciSupport = 0;\r
-      DEBUG ((EFI_D_INFO, "EHCI is enabled as default. SOC 0x%x\n", pchStepping));\r
-    } else {\r
-      //\r
-      //  For A1 and later, XHCI is enabled as default.\r
-      //\r
-      mSystemConfiguration.PchUsb20       = 0;\r
-      mSystemConfiguration.PchUsb30Mode   = 1;\r
-      mSystemConfiguration.UsbXhciSupport = 1;\r
-      DEBUG ((EFI_D_INFO, "XHCI is enabled as default. SOC 0x%x\n", pchStepping));\r
-    }\r
-  }\r
-\r
-  mGlobalNvsArea.Area->XhciMode = mSystemConfiguration.PchUsb30Mode;\r
-\r
-  mGlobalNvsArea.Area->Stepping = mPlatformInfo->IchRevision;\r
-\r
-  //\r
-  // Override invalid Pre-Boot Driver and XhciMode combination.\r
-  //\r
-  if ((mSystemConfiguration.UsbXhciSupport == 0) && (mSystemConfiguration.PchUsb30Mode == 3)) {\r
-    mGlobalNvsArea.Area->XhciMode = 2;\r
-  }\r
-  if ((mSystemConfiguration.UsbXhciSupport == 1) && (mSystemConfiguration.PchUsb30Mode == 2)) {\r
-    mGlobalNvsArea.Area->XhciMode = 3;\r
-  }\r
-\r
-  DEBUG ((EFI_D_ERROR, "ACPI NVS XHCI:0x%x\n", mGlobalNvsArea.Area->XhciMode));\r
-\r
-  mGlobalNvsArea.Area->PmicEnable                       = GLOBAL_NVS_DEVICE_DISABLE;\r
-  mGlobalNvsArea.Area->BatteryChargingSolution          = GLOBAL_NVS_DEVICE_DISABLE;\r
-  mGlobalNvsArea.Area->ISPDevSel                        = mSystemConfiguration.ISPDevSel;\r
-  mGlobalNvsArea.Area->LpeEnable                        = mSystemConfiguration.Lpe;\r
-  mGlobalNvsArea.Area->LpeAudioReportedByDSDT           = mSystemConfiguration.LpeAudioReportedByDSDT;\r
-\r
-  if (mSystemConfiguration.ISPEn == 0) {\r
-    mGlobalNvsArea.Area->ISPDevSel                      = GLOBAL_NVS_DEVICE_DISABLE;\r
-  }\r
-\r
-  mGlobalNvsArea.Area->WittEnable                       = mSystemConfiguration.WittEnable;\r
-  mGlobalNvsArea.Area->UtsEnable                        = mSystemConfiguration.UtsEnable;\r
-  mGlobalNvsArea.Area->SarEnable                        = mSystemConfiguration.SAR1;\r
-\r
-\r
-  mGlobalNvsArea.Area->ReservedO                        = 1;\r
-\r
-  SettingI2CTouchAddress();\r
-  mGlobalNvsArea.Area->IdleReserve= mSystemConfiguration.IdleReserve;\r
-  //\r
-  // Read BMBOUND and store it in GlobalNVS to pass into ASL.\r
-  //\r
-  // BUGBUG: code was moved into silicon reference code.\r
-  //\r
-  if (mSystemConfiguration.eMMCBootMode== 1) {\r
-    //\r
-    // Auto detect mode.\r
-    //\r
-    DEBUG ((EFI_D_ERROR, "Auto detect mode------------start\n"));\r
-\r
-    //\r
-    // Silicon Steppings.\r
-    //\r
-    switch (PchStepping()) {\r
-      case PchA0: // A0/A1\r
-      case PchA1:\r
-        DEBUG ((EFI_D_ERROR, "SOC A0/A1: eMMC 4.41 Configuration\n"));\r
-        mSystemConfiguration.LpsseMMCEnabled            = 1;\r
-        mSystemConfiguration.LpsseMMC45Enabled          = 0;\r
-        break;\r
-\r
-      case PchB0: // B0 and later.\r
-      default:\r
-        DEBUG ((EFI_D_ERROR, "SOC B0 and later: eMMC 4.5 Configuration\n"));\r
-        mSystemConfiguration.LpsseMMCEnabled            = 0;\r
-        mSystemConfiguration.LpsseMMC45Enabled          = 1;\r
-        break;\r
-   }\r
-  } else if (mSystemConfiguration.eMMCBootMode == 2) {\r
-      //\r
-      // eMMC 4.41\r
-      //\r
-      DEBUG ((EFI_D_ERROR, "Force to eMMC 4.41 Configuration\n"));\r
-      mSystemConfiguration.LpsseMMCEnabled            = 1;\r
-      mSystemConfiguration.LpsseMMC45Enabled          = 0;\r
-  } else if (mSystemConfiguration.eMMCBootMode == 3) {\r
-      //\r
-      // eMMC 4.5\r
-      //\r
-      DEBUG ((EFI_D_ERROR, "Force to eMMC 4.5 Configuration\n"));\r
-      mSystemConfiguration.LpsseMMCEnabled            = 0;\r
-      mSystemConfiguration.LpsseMMC45Enabled          = 1;\r
-\r
-  } else {\r
-      //\r
-      // Disable eMMC controllers.\r
-      //\r
-      DEBUG ((EFI_D_ERROR, "Disable eMMC controllers\n"));\r
-      mSystemConfiguration.LpsseMMCEnabled            = 0;\r
-      mSystemConfiguration.LpsseMMC45Enabled          = 0;\r
-  }\r
-\r
-  mGlobalNvsArea.Area->emmcVersion = 0;\r
-  if (mSystemConfiguration.LpsseMMCEnabled) {\r
-     DEBUG ((EFI_D_ERROR, "mGlobalNvsArea.Area->emmcVersion = 0\n"));\r
-     mGlobalNvsArea.Area->emmcVersion = 0;\r
-  }\r
-\r
-  if (mSystemConfiguration.LpsseMMC45Enabled) {\r
-     DEBUG ((EFI_D_ERROR, "mGlobalNvsArea.Area->emmcVersion = 1\n"));\r
-     mGlobalNvsArea.Area->emmcVersion = 1;\r
-  }\r
-\r
-  mGlobalNvsArea.Area->SdCardRemovable = mSystemConfiguration.SdCardRemovable;\r
-\r
-  //\r
-  // Microsoft IOT\r
-  //\r
-  if ((mSystemConfiguration.LpssHsuart0FlowControlEnabled == 1) && \\r
-      (mSystemConfiguration.LpssPwm0Enabled == 0) && \\r
-      (mSystemConfiguration.LpssPwm1Enabled == 0)) {\r
-    mGlobalNvsArea.Area->MicrosoftIoT = GLOBAL_NVS_DEVICE_ENABLE;\r
-    DEBUG ((EFI_D_ERROR, "JP1 is set to be MSFT IOT configuration.\n"));\r
-  } else {\r
-    mGlobalNvsArea.Area->MicrosoftIoT = GLOBAL_NVS_DEVICE_DISABLE;\r
-    DEBUG ((EFI_D_ERROR, "JP1 is not set to be MSFT IOT configuration.\n"));\r
-  }\r
-\r
-  //\r
-  // SIO related option.\r
-  //\r
-  Status = gBS->LocateProtocol (&gEfiCpuIoProtocolGuid, NULL, (void **)&mCpuIo);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  mGlobalNvsArea.Area->WPCN381U = GLOBAL_NVS_DEVICE_DISABLE;\r
-\r
-  mGlobalNvsArea.Area->DockedSioPresent = GLOBAL_NVS_DEVICE_DISABLE;\r
-\r
-  if (mGlobalNvsArea.Area->DockedSioPresent != GLOBAL_NVS_DEVICE_ENABLE) {\r
-    //\r
-    // Check ID for SIO WPCN381U.\r
-    //\r
-    Status = mCpuIo->Io.Read (\r
-                          mCpuIo,\r
-                          EfiCpuIoWidthUint8,\r
-                          WPCN381U_CONFIG_INDEX,\r
-                          1,\r
-                          &PortData\r
-                          );\r
-    ASSERT_EFI_ERROR (Status);\r
-    if (PortData != 0xFF) {\r
-      PortData = 0x20;\r
-      Status = mCpuIo->Io.Write (\r
-                            mCpuIo,\r
-                            EfiCpuIoWidthUint8,\r
-                            WPCN381U_CONFIG_INDEX,\r
-                            1,\r
-                            &PortData\r
-                            );\r
-      ASSERT_EFI_ERROR (Status);\r
-      Status = mCpuIo->Io.Read (\r
-                            mCpuIo,\r
-                            EfiCpuIoWidthUint8,\r
-                            WPCN381U_CONFIG_DATA,\r
-                            1,\r
-                            &PortData\r
-                            );\r
-      ASSERT_EFI_ERROR (Status);\r
-      if ((PortData == WPCN381U_CHIP_ID) || (PortData == WDCP376_CHIP_ID)) {\r
-        mGlobalNvsArea.Area->WPCN381U = GLOBAL_NVS_DEVICE_ENABLE;\r
-        mGlobalNvsArea.Area->OnboardCom = GLOBAL_NVS_DEVICE_ENABLE;\r
-        mGlobalNvsArea.Area->OnboardComCir = GLOBAL_NVS_DEVICE_DISABLE;\r
-      }\r
-    }\r
-  }\r
-\r
-\r
-\r
-  //\r
-  // Get Ps2 policy to set. Will be use if present.\r
-  //\r
-  Status =  gBS->LocateProtocol (\r
-                   &gEfiPs2PolicyProtocolGuid,\r
-                   NULL,\r
-                   (VOID **)&Ps2Policy\r
-                   );\r
-  if (!EFI_ERROR (Status)) {\r
-          Status = Ps2Policy->Ps2InitHardware (ImageHandle);\r
-  }\r
-\r
-  mGlobalNvsArea.Area->SDIOMode = mSystemConfiguration.LpssSdioMode;\r
-\r
-  Handle = NULL;\r
-  Status = gBS->InstallMultipleProtocolInterfaces (\r
-                  &Handle,\r
-                  &gEfiGlobalNvsAreaProtocolGuid,\r
-                  &mGlobalNvsArea,\r
-                  NULL\r
-                  );\r
-\r
-  //\r
-  // Read tables from the storage file.\r
-  //\r
-  while (!EFI_ERROR (Status)) {\r
-    CurrentTable = NULL;\r
-\r
-    Status = FwVol->ReadSection (\r
-                      FwVol,\r
-                      &gEfiAcpiTableStorageGuid,\r
-                      EFI_SECTION_RAW,\r
-                      Instance,\r
-                      (VOID **) &CurrentTable,\r
-                      &Size,\r
-                      &FvStatus\r
-                      );\r
-\r
-    if (!EFI_ERROR (Status)) {\r
-      //\r
-      // Allow platform specific code to reject the table or update it.\r
-      //\r
-      AcpiStatus = AcpiPlatformHooksIsActiveTable (CurrentTable);\r
-\r
-      if (!EFI_ERROR (AcpiStatus)) {\r
-        //\r
-        // Perform any table specific updates.\r
-        //\r
-        AcpiStatus = PlatformUpdateTables (CurrentTable);\r
-        if (!EFI_ERROR (AcpiStatus)) {\r
-          //\r
-          // Add the table.\r
-          //\r
-          TableHandle = 0;\r
-          AcpiStatus = AcpiSupport->SetAcpiTable (\r
-                                      AcpiSupport,\r
-                                      CurrentTable,\r
-                                      TRUE,\r
-                                      TableVersion,\r
-                                      &TableHandle\r
-                                      );\r
-          ASSERT_EFI_ERROR (AcpiStatus);\r
-        }\r
-      }\r
-\r
-      //\r
-      // Increment the instance.\r
-      //\r
-      Instance++;\r
-    }\r
-  }\r
-\r
-  Status = EfiCreateEventReadyToBootEx (\r
-             TPL_NOTIFY,\r
-             OnReadyToBoot,\r
-             NULL,\r
-             &Event\r
-             );\r
-\r
-  //\r
-  // Finished.\r
-  //\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-UINT8\r
-ReadCmosBank1Byte (\r
-  IN  UINT8                           Index\r
-  )\r
-{\r
-  UINT8                               Data;\r
-\r
-  IoWrite8(0x72, Index);\r
-  Data = IoRead8 (0x73);\r
-  return Data;\r
-}\r
-\r
-VOID\r
-WriteCmosBank1Byte (\r
-  IN  UINT8                           Index,\r
-  IN  UINT8                           Data\r
-  )\r
-{\r
-  IoWrite8 (0x72, Index);\r
-  IoWrite8 (0x73, Data);\r
-}\r
-\r
-\r
-\r
-VOID\r
-SettingI2CTouchAddress (\r
-  IN VOID\r
-  )\r
-{\r
-  if (mSystemConfiguration.I2CTouchAd == 0) {\r
-    //\r
-    // If setup menu select auto set I2C Touch Address base on board id.\r
-    //\r
-    if (mPlatformInfo->BoardId == BOARD_ID_BL_RVP ||\r
-        mPlatformInfo->BoardId == BOARD_ID_BL_STHI ||\r
-        mPlatformInfo->BoardId == BOARD_ID_BL_RVP_DDR3L ) {\r
-      //\r
-      //RVP\r
-      //\r
-      mGlobalNvsArea.Area->I2CTouchAddress = 0x4B;\r
-    } else if (mPlatformInfo->BoardId == BOARD_ID_BL_FFRD) {\r
-      //\r
-      //FFRD\r
-      //\r
-      mGlobalNvsArea.Area->I2CTouchAddress = 0x4A;\r
-    } else if (mPlatformInfo->BoardId == BOARD_ID_BB_RVP) {\r
-      mGlobalNvsArea.Area->I2CTouchAddress = 0x4C;\r
-    } else if (mPlatformInfo->BoardId == BOARD_ID_CVH) {\r
-      mGlobalNvsArea.Area->I2CTouchAddress = 0x4C;\r
-    } else if (mPlatformInfo->BoardId == BOARD_ID_BL_FFRD8) {\r
-      //\r
-      //FFRD8 uses 0x4A.\r
-      //\r
-      mGlobalNvsArea.Area->I2CTouchAddress = 0x4A;\r
-    }\r
-  } else {\r
-    mGlobalNvsArea.Area->I2CTouchAddress = mSystemConfiguration.I2CTouchAd;\r
-  }\r
-  DEBUG((EFI_D_ERROR, "GlobalNvsArea.Area->I2CTouchAddress: [%02x]\n", mGlobalNvsArea.Area->I2CTouchAddress));\r
-}\r
-\r
-\r