]> git.proxmox.com Git - mirror_edk2.git/blobdiff - QuarkPlatformPkg/Acpi/Dxe/AcpiPlatform/AcpiPciUpdate.c
edk2: Remove packages moved to edk2-platforms
[mirror_edk2.git] / QuarkPlatformPkg / Acpi / Dxe / AcpiPlatform / AcpiPciUpdate.c
diff --git a/QuarkPlatformPkg/Acpi/Dxe/AcpiPlatform/AcpiPciUpdate.c b/QuarkPlatformPkg/Acpi/Dxe/AcpiPlatform/AcpiPciUpdate.c
deleted file mode 100644 (file)
index 0273862..0000000
+++ /dev/null
@@ -1,1402 +0,0 @@
-/** @file\r
-Update the _PRT and _PRW method for pci devices\r
-\r
-Copyright (c) 2013-2016 Intel Corporation.\r
-\r
-SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-\r
-**/\r
-#include "AcpiPlatform.h"\r
-\r
-PCI_DEVICE_INFO *mQNCPciInfo = NULL;\r
-\r
-/**\r
-  Init Pci Device Structure\r
-  @param mConfigData    - Pointer of Pci Device information Structure\r
-\r
-**/\r
-VOID\r
-InitPciDeviceInfoStructure (\r
-  PCI_DEVICE_SETTING            *mConfigData\r
-  )\r
-{\r
-  //\r
-  // Return 0 given that function unsupported.\r
-  // Would need to parse ACPI tables and build mQNCPciInfo above\r
-  // with found _PRT & _PRW methods for PCI devices.\r
-  //\r
-  mConfigData->PciDeviceInfoNumber = 0;\r
-}\r
-\r
-/**\r
-  return Integer value.\r
-\r
-  @param Data    - AML data buffer\r
-  @param Integer - integer value.\r
-\r
-  @return Data size processed.\r
-**/\r
-UINTN\r
-SdtGetInteger (\r
-  IN  UINT8  *Data,\r
-  OUT UINT64 *Integer\r
-  )\r
-{\r
-  *Integer = 0;\r
-  switch (*Data) {\r
-  case AML_ZERO_OP:\r
-    return 1;\r
-  case AML_ONE_OP:\r
-    *Integer = 1;\r
-    return 1;\r
-  case AML_ONES_OP:\r
-    *Integer = (UINTN)-1;\r
-    return 1;\r
-  case AML_BYTE_PREFIX:\r
-    CopyMem (Integer, Data + 1, sizeof(UINT8));\r
-    return 1 + sizeof(UINT8);\r
-  case AML_WORD_PREFIX:\r
-    CopyMem (Integer, Data + 1, sizeof(UINT16));\r
-    return 1 + sizeof(UINT16);\r
-  case AML_DWORD_PREFIX:\r
-    CopyMem (Integer, Data + 1, sizeof(UINT32));\r
-    return 1 + sizeof(UINT32);\r
-  case AML_QWORD_PREFIX:\r
-    CopyMem (Integer, Data + 1, sizeof(UINT64));\r
-    return 1 + sizeof(UINT64);\r
-  default:\r
-    // Something wrong\r
-    ASSERT (FALSE);\r
-    return 1;\r
-  }\r
-}\r
-\r
-\r
-/**\r
-  Check if this handle has expected opcode.\r
-\r
-  @param AcpiSdt    Pointer to Acpi SDT protocol\r
-  @param Handle     ACPI handle\r
-  @param OpCode     Expected OpCode\r
-  @param SubOpCode  Expected SubOpCode\r
-\r
-  @retval TRUE  This handle has expected opcode\r
-  @retval FALSE This handle does not have expected opcode\r
-**/\r
-BOOLEAN\r
-SdtIsThisTypeObject (\r
-  IN EFI_ACPI_SDT_PROTOCOL *AcpiSdt,\r
-  IN EFI_ACPI_HANDLE Handle,\r
-  IN UINT8           OpCode,\r
-  IN UINT8           SubOpCode\r
-  )\r
-{\r
-  EFI_STATUS         Status;\r
-  EFI_ACPI_DATA_TYPE DataType;\r
-  UINT8              *Data;\r
-  UINTN              DataSize;\r
-\r
-  Status = AcpiSdt->GetOption (Handle, 0, &DataType, (CONST VOID **)&Data, &DataSize);\r
-  ASSERT_EFI_ERROR (Status);\r
-  ASSERT (DataType == EFI_ACPI_DATA_TYPE_OPCODE);\r
-\r
-  if (OpCode == AML_EXT_OP) {\r
-    if (Data[1] == SubOpCode) {\r
-      return TRUE;\r
-    }\r
-  } else {\r
-    if (Data[0] == OpCode) {\r
-      return TRUE;\r
-    }\r
-  }\r
-  return FALSE;\r
-}\r
-\r
-/**\r
-  Check if this handle has expected name and name value.\r
-\r
-  @param AcpiSdt    Pointer to Acpi SDT protocol\r
-  @param Handle     ACPI handle\r
-  @param Name       Expected name\r
-  @param Value      Expected name value\r
-\r
-  @retval TRUE  This handle has expected name and name value.\r
-  @retval FALSE This handle does not have expected name and name value.\r
-**/\r
-BOOLEAN\r
-SdtIsNameIntegerValueEqual (\r
-  IN EFI_ACPI_SDT_PROTOCOL *AcpiSdt,\r
-  IN EFI_ACPI_HANDLE Handle,\r
-  IN CHAR8           *Name,\r
-  IN UINT64          Value\r
-  )\r
-{\r
-  EFI_STATUS         Status;\r
-  EFI_ACPI_DATA_TYPE DataType;\r
-  UINT8              *Data;\r
-  UINTN              DataSize;\r
-  UINT64             Integer;\r
-\r
-  Status = AcpiSdt->GetOption (Handle, 1, &DataType, (CONST VOID **)&Data, &DataSize);\r
-  ASSERT_EFI_ERROR (Status);\r
-  ASSERT (DataType == EFI_ACPI_DATA_TYPE_NAME_STRING);\r
-\r
-  if (CompareMem (Data, Name, 4) != 0) {\r
-    return FALSE;\r
-  }\r
-\r
-  //\r
-  // Name match check object\r
-  //\r
-  Status = AcpiSdt->GetOption (Handle, 2, &DataType, (CONST VOID **)&Data, &DataSize);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  Integer = 0;\r
-  SdtGetInteger (Data, &Integer);\r
-  if (Integer != Value) {\r
-    return FALSE;\r
-  }\r
-\r
-  // All match\r
-  return TRUE;\r
-}\r
-\r
-/**\r
-  Check if this handle's children has expected name and name value.\r
-\r
-  @param AcpiSdt          Pointer to Acpi SDT protocol\r
-  @param ParentHandle     ACPI parent handle\r
-  @param Name             Expected name\r
-  @param Value            Expected name value\r
-\r
-  @retval TRUE  This handle's children has expected name and name value.\r
-  @retval FALSE This handle's children does not have expected name and name value.\r
-**/\r
-BOOLEAN\r
-SdtCheckNameIntegerValue (\r
-  IN EFI_ACPI_SDT_PROTOCOL *AcpiSdt,\r
-  IN EFI_ACPI_HANDLE ParentHandle,\r
-  IN CHAR8           *Name,\r
-  IN UINT64          Value\r
-  )\r
-{\r
-  EFI_ACPI_HANDLE PreviousHandle;\r
-  EFI_ACPI_HANDLE Handle;\r
-  EFI_STATUS      Status;\r
-\r
-  Handle = NULL;\r
-  while (TRUE) {\r
-    PreviousHandle = Handle;\r
-    Status = AcpiSdt->GetChild (ParentHandle, &Handle);\r
-    ASSERT_EFI_ERROR (Status);\r
-\r
-    if (PreviousHandle != NULL) {\r
-      Status = AcpiSdt->Close (PreviousHandle);\r
-      ASSERT_EFI_ERROR (Status);\r
-    }\r
-\r
-    //\r
-    // Done\r
-    //\r
-    if (Handle == NULL) {\r
-      return FALSE;\r
-    }\r
-\r
-    //\r
-    // Check this name\r
-    //\r
-    if (SdtIsThisTypeObject (AcpiSdt, Handle, AML_NAME_OP, 0)) {\r
-      if (SdtIsNameIntegerValueEqual (AcpiSdt, Handle, Name, Value)) {\r
-        return TRUE;\r
-      }\r
-    }\r
-  }\r
-\r
-  //\r
-  // Should not run here\r
-  //\r
-}\r
-\r
-/**\r
-  Convert the pci address from VPD (bus,dev,fun) into the address that acpi table\r
-  can recognize.\r
-\r
-  @param PciAddress    Pci address from VPD\r
-\r
-  @retval return the address that acpi table can recognize\r
-**/\r
-UINT32\r
-SdtConvertToAcpiPciAdress (\r
-  IN UINT32 PciAddress\r
-  )\r
-{\r
-  UINT32 ReturnAddress;\r
-\r
-  ReturnAddress = ((PciAddress & 0x0000FF00) << 8) | (PciAddress & 0x000000FF);\r
-\r
-  if ((PciAddress & 0x000000FF) == 0x000000FF)\r
-    ReturnAddress |= 0x0000FFFF;\r
-\r
-  return ReturnAddress;\r
-}\r
-\r
-/**\r
-  return AML NameString size.\r
-\r
-  @param Buffer - AML name string\r
-\r
-  @return AML name string size\r
-**/\r
-UINTN\r
-SdtGetNameStringSize (\r
-  IN UINT8              *Buffer\r
-  )\r
-{\r
-  UINTN                 SegCount;\r
-  UINTN                 Length;\r
-\r
-  Length = 0;\r
-\r
-  //\r
-  // Parse root or prefix\r
-  //\r
-  if (*Buffer == AML_ROOT_CHAR) {\r
-    //\r
-    // RootChar\r
-    //\r
-    Buffer ++;\r
-    Length ++;\r
-  } else if (*Buffer == AML_PARENT_PREFIX_CHAR) {\r
-    //\r
-    // ParentPrefixChar\r
-    //\r
-    Buffer ++;\r
-    Length ++;\r
-    while (*Buffer == AML_PARENT_PREFIX_CHAR) {\r
-      Buffer ++;\r
-      Length ++;\r
-    }\r
-  }\r
-\r
-  //\r
-  // Parse name segment\r
-  //\r
-  if (*Buffer == AML_DUAL_NAME_PREFIX) {\r
-    //\r
-    // DualName\r
-    //\r
-    Buffer ++;\r
-    Length ++;\r
-    SegCount = 2;\r
-  } else if (*Buffer == AML_MULTI_NAME_PREFIX) {\r
-    //\r
-    // MultiName\r
-    //\r
-    Buffer ++;\r
-    Length ++;\r
-    SegCount = *Buffer;\r
-    Buffer ++;\r
-    Length ++;\r
-  } else if (*Buffer == 0) {\r
-    //\r
-    // NULL Name\r
-    //\r
-    SegCount = 0;\r
-    Length ++;\r
-  } else {\r
-    //\r
-    // NameSeg\r
-    //\r
-    SegCount = 1;\r
-  }\r
-\r
-  Buffer += 4 * SegCount;\r
-  Length += 4 * SegCount;\r
-\r
-  return Length;\r
-}\r
-\r
-/**\r
-  The routine to check if this device is PCI root bridge.\r
-\r
-  @param AcpiSdt       Pointer to Acpi SDT protocol\r
-  @param DeviceHandle  ACPI device handle\r
-  @param Context       Context info - not used here\r
-\r
-  @retval TRUE  This is PCI root bridge\r
-  @retval FALSE This is not PCI root bridge\r
-**/\r
-BOOLEAN\r
-SdtFindRootBridgeHandle (\r
-  IN EFI_ACPI_SDT_PROTOCOL  *AcpiSdt,\r
-  IN EFI_ACPI_HANDLE        CheckHandle,\r
-  IN VOID                   *Context\r
-  )\r
-{\r
-  BOOLEAN            Result;\r
-  EFI_ACPI_DATA_TYPE DataType;\r
-  UINT8              *Data;\r
-  UINTN              DataSize;\r
-  EFI_STATUS         Status;\r
-\r
-  if (!SdtIsThisTypeObject (AcpiSdt, CheckHandle, AML_EXT_OP, AML_EXT_DEVICE_OP))\r
-    return FALSE;\r
-\r
-  Result = SdtCheckNameIntegerValue (AcpiSdt,CheckHandle, "_HID", (UINT64)0x080AD041); // PNP0A08\r
-  if (!Result) {\r
-    Result = SdtCheckNameIntegerValue (AcpiSdt, CheckHandle, "_CID", (UINT64)0x030AD041); // PNP0A03\r
-    if (!Result) {\r
-      return Result;\r
-    }\r
-  }\r
-\r
-  //\r
-  // Found\r
-  //\r
-  Status = AcpiSdt->GetOption (CheckHandle, 1, &DataType, (CONST VOID **)&Data, &DataSize);\r
-  ASSERT_EFI_ERROR (Status);\r
-  ASSERT (DataType == EFI_ACPI_DATA_TYPE_NAME_STRING);\r
-\r
-  return Result;\r
-}\r
-\r
-\r
-/**\r
-  The routine to check if this device is wanted.\r
-\r
-  @param AcpiSdt       Pointer to Acpi SDT protocol\r
-  @param DeviceHandle  ACPI device handle\r
-  @param Context       Context info - not used here\r
-\r
-  @retval TRUE  This is PCI device wanted\r
-  @retval FALSE This is not PCI device wanted\r
-**/\r
-BOOLEAN\r
-SdtFindPciDeviceHandle (\r
-  IN EFI_ACPI_SDT_PROTOCOL  *AcpiSdt,\r
-  IN EFI_ACPI_HANDLE        CheckHandle,\r
-  IN VOID                   *Context\r
-  )\r
-{\r
-  BOOLEAN            Result;\r
-  EFI_ACPI_DATA_TYPE DataType;\r
-  UINT8              *Data;\r
-  UINTN              DataSize;\r
-  EFI_STATUS         Status;\r
-\r
-  if (!SdtIsThisTypeObject (AcpiSdt, CheckHandle, AML_EXT_OP, AML_EXT_DEVICE_OP))\r
-    return FALSE;\r
-\r
-  Result = SdtCheckNameIntegerValue (AcpiSdt,CheckHandle, "_ADR", (UINT64)*(UINT32 *)Context);\r
-  if (!Result) {\r
-    return Result;\r
-  }\r
-\r
-  //\r
-  // Found\r
-  //\r
-  Status = AcpiSdt->GetOption (CheckHandle, 1, &DataType, (CONST VOID **)&Data, &DataSize);\r
-  ASSERT_EFI_ERROR (Status);\r
-  ASSERT (DataType == EFI_ACPI_DATA_TYPE_NAME_STRING);\r
-\r
-  return Result;\r
-}\r
-\r
-/**\r
-  Go through the parent handle and find the handle which pass CheckHandleInfo.\r
-\r
-  @param AcpiSdt          Pointer to Acpi SDT protocol\r
-  @param ParentHandle     ACPI parent handle\r
-  @param CheckHandleInfo  The callback routine to check if this handle meet the requirement\r
-  @param Context          The context of CheckHandleInfo\r
-\r
-  @return the handle which is first one can pass CheckHandleInfo.\r
-**/\r
-EFI_ACPI_HANDLE\r
-SdtGetHandleByScanAllChilds (\r
-  IN EFI_ACPI_SDT_PROTOCOL  *AcpiSdt,\r
-  IN EFI_ACPI_HANDLE        ParentHandle,\r
-  IN CHECK_HANDLE_INFO      CheckHandleInfo,\r
-  IN VOID                   *Context\r
-  )\r
-{\r
-  EFI_ACPI_HANDLE    PreviousHandle;\r
-  EFI_ACPI_HANDLE    Handle;\r
-  EFI_STATUS         Status;\r
-  EFI_ACPI_HANDLE    ReturnHandle;\r
-\r
-  //\r
-  // Use deep first algo to enumerate all ACPI object\r
-  //\r
-  Handle = NULL;\r
-  while (TRUE) {\r
-    PreviousHandle = Handle;\r
-    Status = AcpiSdt->GetChild (ParentHandle, &Handle);\r
-    ASSERT_EFI_ERROR (Status);\r
-\r
-    if (PreviousHandle != NULL) {\r
-      Status = AcpiSdt->Close (PreviousHandle);\r
-      ASSERT_EFI_ERROR (Status);\r
-    }\r
-\r
-    //\r
-    // Done\r
-    //\r
-    if (Handle == NULL) {\r
-      return NULL;\r
-    }\r
-\r
-    //\r
-    // Check this handle\r
-    //\r
-    if (CheckHandleInfo (AcpiSdt, Handle, Context)) {\r
-      return Handle;\r
-    }\r
-\r
-    //\r
-    // Enumerate\r
-    //\r
-    ReturnHandle = SdtGetHandleByScanAllChilds (AcpiSdt, Handle, CheckHandleInfo, Context);\r
-    if (ReturnHandle != NULL) {\r
-      return ReturnHandle;\r
-    }\r
-  }\r
-\r
-  //\r
-  // Should not run here\r
-  //\r
-}\r
-\r
-\r
-/**\r
-  Check whether the INTx package is matched\r
-\r
-  @param AcpiSdt          Pointer to Acpi SDT protocol\r
-  @param INTxPkgHandle    ACPI INTx package handle\r
-  @param PciAddress       Acpi pci address\r
-  @param INTx             Index of INTx pin\r
-  @param IsAPIC           Tell whether the returned INTx package is for APIC or not\r
-\r
-  @retval       TRUE      the INTx package is matched\r
-  @retval       FALSE     the INTx package is not matched\r
-\r
-**/\r
-BOOLEAN\r
-SdtCheckINTxPkgIsMatch (\r
-  IN EFI_ACPI_SDT_PROTOCOL  *AcpiSdt,\r
-  IN EFI_ACPI_HANDLE        INTxPkgHandle,\r
-  IN UINT32                 PciAddress,\r
-  IN UINT8                  INTx,\r
-  IN BOOLEAN                *IsAPIC\r
-  )\r
-{\r
-  EFI_ACPI_HANDLE    PreviousHandle;\r
-  EFI_STATUS         Status;\r
-  EFI_ACPI_HANDLE    MemberHandle;\r
-  EFI_ACPI_DATA_TYPE DataType;\r
-  UINT8              *Data;\r
-  UINTN              DataSize;\r
-  UINT64             CurrentPciAddress;\r
-  UINT64             CurrentINTx;\r
-  UINTN              ChildSize;\r
-\r
-\r
-  //\r
-  // Check the pci address\r
-  //\r
-  MemberHandle = NULL;\r
-  Status = AcpiSdt->GetChild (INTxPkgHandle, &MemberHandle);\r
-  ASSERT_EFI_ERROR (Status);\r
-  ASSERT (MemberHandle != NULL);\r
-\r
-  Status = AcpiSdt->GetOption (MemberHandle, 0, &DataType, (CONST VOID **)&Data, &DataSize);\r
-  ASSERT_EFI_ERROR (Status);\r
-  ASSERT (DataType == EFI_ACPI_DATA_TYPE_OPCODE);\r
-\r
-  CurrentPciAddress = 0;\r
-  SdtGetInteger (Data, &CurrentPciAddress);\r
-\r
-  if (CurrentPciAddress != PciAddress) {\r
-\r
-    Status = AcpiSdt->Close (MemberHandle);\r
-    ASSERT_EFI_ERROR (Status);\r
-    return FALSE;\r
-  }\r
-\r
-  //\r
-  // Check the pci interrupt pin\r
-  //\r
-  PreviousHandle = MemberHandle;\r
-  Status = AcpiSdt->GetChild (INTxPkgHandle, &MemberHandle);\r
-  ASSERT_EFI_ERROR (Status);\r
-  ASSERT (MemberHandle != NULL);\r
-\r
-  if (PreviousHandle != NULL) {\r
-    Status = AcpiSdt->Close (PreviousHandle);\r
-    ASSERT_EFI_ERROR (Status);\r
-  }\r
-\r
-  Status = AcpiSdt->GetOption (MemberHandle, 0, &DataType, (CONST VOID **)&Data, &DataSize);\r
-  ASSERT_EFI_ERROR (Status);\r
-  ASSERT (DataType == EFI_ACPI_DATA_TYPE_OPCODE);\r
-\r
-  CurrentINTx = 0;\r
-  ChildSize = SdtGetInteger (Data, &CurrentINTx);\r
-\r
-  Status = AcpiSdt->Close (MemberHandle);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  if (CurrentINTx != INTx)\r
-    return FALSE;\r
-\r
-  Data += ChildSize;\r
-\r
-  if (*Data == AML_BYTE_PREFIX)\r
-    Data += 1;\r
-\r
-  //\r
-  // Check the pci interrupt source\r
-  //\r
-  if (*Data  != 0)\r
-    *IsAPIC = FALSE;\r
-  else\r
-    *IsAPIC = TRUE;\r
-\r
-  return TRUE;\r
-}\r
-\r
-\r
-\r
-\r
-/**\r
-  Get the wanted INTx package inside the parent package\r
-\r
-  @param AcpiSdt          Pointer to Acpi SDT protocol\r
-  @param ParentPkgHandle  ACPI parent package handle\r
-  @param PciAddress       Acpi pci address\r
-  @param INTx             Index of INTx pin\r
-  @param INTxPkgHandle    ACPI INTx package handle\r
-  @param IsAPIC           Tell whether the returned INTx package is for APIC or not\r
-\r
-**/\r
-VOID\r
-SdtGetINTxPkgHandle (\r
-  IN EFI_ACPI_SDT_PROTOCOL  *AcpiSdt,\r
-  IN EFI_ACPI_HANDLE        ParentPkgHandle,\r
-  IN UINT32                 PciAddress,\r
-  IN UINT8                  INTx,\r
-  IN EFI_ACPI_HANDLE        *INTxPkgHandle,\r
-  IN BOOLEAN                *IsAPIC\r
-  )\r
-{\r
-  EFI_ACPI_HANDLE    PreviousHandle;\r
-  EFI_STATUS         Status;\r
-  EFI_ACPI_HANDLE    ChildPkgHandle;\r
-\r
-  ChildPkgHandle = NULL;\r
-  while (TRUE) {\r
-    PreviousHandle = ChildPkgHandle;\r
-    Status = AcpiSdt->GetChild (ParentPkgHandle, &ChildPkgHandle);\r
-    ASSERT_EFI_ERROR (Status);\r
-\r
-    if (PreviousHandle != NULL) {\r
-      Status = AcpiSdt->Close (PreviousHandle);\r
-      ASSERT_EFI_ERROR (Status);\r
-    }\r
-\r
-    if (ChildPkgHandle == NULL) {\r
-      break;\r
-    }\r
-\r
-    if (SdtCheckINTxPkgIsMatch(AcpiSdt, ChildPkgHandle, PciAddress, INTx, IsAPIC)) {\r
-      *INTxPkgHandle = ChildPkgHandle;\r
-      return;\r
-    }\r
-  }\r
-\r
-  return;\r
-}\r
-\r
-/**\r
-  Update the INTx package with the correct pirq value\r
-\r
-  @param AcpiSdt          Pointer to Acpi SDT protocol\r
-  @param INTxPkgHandle    ACPI INTx package handle\r
-  @param PirqValue        Correct pirq value\r
-  @param IsAPIC           Tell whether the INTx package is for APIC or not\r
-\r
-**/\r
-VOID\r
-SdtUpdateINTxPkg (\r
-  IN EFI_ACPI_SDT_PROTOCOL  *AcpiSdt,\r
-  IN EFI_ACPI_HANDLE        INTxPkgHandle,\r
-  IN UINT8                  PirqValue,\r
-  IN BOOLEAN                IsAPIC\r
-  )\r
-{\r
-  EFI_ACPI_HANDLE    PreviousHandle;\r
-  EFI_STATUS         Status;\r
-  EFI_ACPI_HANDLE    MemberHandle;\r
-  EFI_ACPI_DATA_TYPE DataType;\r
-  UINT8              *Data;\r
-  UINTN              DataSize;\r
-  UINT64             TempValue;\r
-  UINTN              ChildSize;\r
-\r
-\r
-  //\r
-  // Check the pci address\r
-  //\r
-  MemberHandle = NULL;\r
-  Status = AcpiSdt->GetChild (INTxPkgHandle, &MemberHandle);\r
-  ASSERT_EFI_ERROR (Status);\r
-  ASSERT (MemberHandle != NULL);\r
-\r
-  //\r
-  // Check the pci interrupt pin\r
-  //\r
-  PreviousHandle = MemberHandle;\r
-  Status = AcpiSdt->GetChild (INTxPkgHandle, &MemberHandle);\r
-  ASSERT_EFI_ERROR (Status);\r
-  ASSERT (MemberHandle != NULL);\r
-\r
-  if (PreviousHandle != NULL) {\r
-    Status = AcpiSdt->Close (PreviousHandle);\r
-    ASSERT_EFI_ERROR (Status);\r
-  }\r
-\r
-  Status = AcpiSdt->GetOption (MemberHandle, 0, &DataType, (CONST VOID **)&Data, &DataSize);\r
-  ASSERT_EFI_ERROR (Status);\r
-  ASSERT (DataType == EFI_ACPI_DATA_TYPE_OPCODE);\r
-\r
-  ChildSize = SdtGetInteger (Data, &TempValue);\r
-\r
-  Status = AcpiSdt->Close (MemberHandle);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  Data += ChildSize;\r
-\r
-  //\r
-  // update the pci interrupt source or source index\r
-  //\r
-  if (!IsAPIC) {\r
-    ChildSize = SdtGetNameStringSize (Data);\r
-    Data += (ChildSize - 1);\r
-\r
-    PirqValue += 0x40;   // change to ascii char\r
-    if (*Data != PirqValue)\r
-      *Data = PirqValue;\r
-  } else {\r
-\r
-    ChildSize = SdtGetInteger (Data, &TempValue);\r
-    Data += ChildSize;\r
-\r
-    Data += 1;\r
-\r
-    if (*Data != PirqValue)\r
-      *Data = PirqValue;\r
-  }\r
-}\r
-\r
-/**\r
-  Check every child package inside this interested parent package for update PRT\r
-\r
-  @param AcpiSdt          Pointer to Acpi SDT protocol\r
-  @param ParentPkgHandle  ACPI parent package handle\r
-  @param PciDeviceInfo    Pointer to PCI_DEVICE_INFO\r
-\r
-**/\r
-VOID\r
-SdtCheckParentPackage (\r
-  IN EFI_ACPI_SDT_PROTOCOL  *AcpiSdt,\r
-  IN EFI_ACPI_HANDLE        ParentPkgHandle,\r
-  IN PCI_DEVICE_INFO        *PciDeviceInfo\r
-  )\r
-{\r
-  EFI_ACPI_HANDLE    INTAPkgHandle;\r
-  EFI_ACPI_HANDLE    INTBPkgHandle;\r
-  EFI_ACPI_HANDLE    INTCPkgHandle;\r
-  EFI_ACPI_HANDLE    INTDPkgHandle;\r
-  UINT32             PciAddress = 0;\r
-  BOOLEAN            IsAllFunctions = FALSE;\r
-  UINT8              IsAPIC = 0;\r
-  EFI_STATUS         Status;\r
-\r
-  INTAPkgHandle = INTBPkgHandle = INTCPkgHandle = INTDPkgHandle = NULL;\r
-\r
-  PciAddress   = SdtConvertToAcpiPciAdress(PciDeviceInfo->DeviceAddress);\r
-\r
-  if ((PciAddress & 0xFFFF) == 0xFFFF) {\r
-    IsAllFunctions = TRUE;\r
-  } else {\r
-    IsAllFunctions = FALSE;\r
-    PciAddress = (PciAddress | 0xFFFF);\r
-  }\r
-\r
-  SdtGetINTxPkgHandle (AcpiSdt, ParentPkgHandle, PciAddress, 0, &INTAPkgHandle, (BOOLEAN *)&IsAPIC);\r
-  SdtGetINTxPkgHandle (AcpiSdt, ParentPkgHandle, PciAddress, 1, &INTBPkgHandle, (BOOLEAN *)&IsAPIC);\r
-  SdtGetINTxPkgHandle (AcpiSdt, ParentPkgHandle, PciAddress, 2, &INTCPkgHandle, (BOOLEAN *)&IsAPIC);\r
-  SdtGetINTxPkgHandle (AcpiSdt, ParentPkgHandle, PciAddress, 3, &INTDPkgHandle, (BOOLEAN *)&IsAPIC);\r
-\r
-  //\r
-  // Check INTA\r
-  //\r
-  if ((PciDeviceInfo->INTA[IsAPIC] != 0xFF) && (INTAPkgHandle != NULL)) {\r
-    //\r
-    // Find INTA package and there is valid INTA update item, update it\r
-    //\r
-    SdtUpdateINTxPkg (AcpiSdt, INTAPkgHandle, (PciDeviceInfo->INTA[IsAPIC]), IsAPIC);\r
-  } else if ((PciDeviceInfo->INTA[IsAPIC] != 0xFF) && (INTAPkgHandle == NULL)) {\r
-    //\r
-    // There is valid INTA update item, but no INA package exist, should add it\r
-    //\r
-    DEBUG ((EFI_D_ERROR, "\n\nShould add INTA item for this device(0x%x)\n\n", PciAddress));\r
-\r
-  } else if ((PciDeviceInfo->INTA[IsAPIC] == 0xFF) && (INTAPkgHandle != NULL) && IsAllFunctions) {\r
-    //\r
-    // For all functions senario, if there is invalid INTA update item, but INTA package does exist, should delete it\r
-    //\r
-    DEBUG ((EFI_D_ERROR, "\n\nShould remove INTA item for this device(0x%x)\n\n", PciAddress));\r
-\r
-  }\r
-\r
-  //\r
-  // Check INTB\r
-  //\r
-  if ((PciDeviceInfo->INTB[IsAPIC] != 0xFF) && (INTBPkgHandle != NULL)) {\r
-    //\r
-    // Find INTB package and there is valid INTB update item, update it\r
-    //\r
-    SdtUpdateINTxPkg (AcpiSdt, INTBPkgHandle, (PciDeviceInfo->INTB[IsAPIC]), IsAPIC);\r
-  } else if ((PciDeviceInfo->INTB[IsAPIC] != 0xFF) && (INTBPkgHandle == NULL)) {\r
-    //\r
-    // There is valid INTB update item, but no INTB package exist, should add it\r
-    //\r
-    DEBUG ((EFI_D_ERROR, "\n\nShould add INTB item for this device(0x%x)\n\n", PciAddress));\r
-\r
-  } else if ((PciDeviceInfo->INTB[IsAPIC] == 0xFF) && (INTBPkgHandle != NULL) && IsAllFunctions) {\r
-    //\r
-    // For all functions senario, if there is invalid INTB update item, but INTB package does exist, should delete it\r
-    //\r
-    DEBUG ((EFI_D_ERROR, "\n\nShould remove INTB item for this device(0x%x)\n\n", PciAddress));\r
-\r
-  }\r
-\r
-  //\r
-  // Check INTC\r
-  //\r
-  if ((PciDeviceInfo->INTC[IsAPIC] != 0xFF) && (INTCPkgHandle != NULL)) {\r
-    //\r
-    // Find INTC package and there is valid INTC update item, update it\r
-    //\r
-    SdtUpdateINTxPkg (AcpiSdt, INTCPkgHandle, (PciDeviceInfo->INTC[IsAPIC]), IsAPIC);\r
-  } else if ((PciDeviceInfo->INTC[IsAPIC] != 0xFF) && (INTCPkgHandle == NULL)) {\r
-    //\r
-    // There is valid INTC update item, but no INTC package exist, should add it\r
-    //\r
-    DEBUG ((EFI_D_ERROR, "\n\nShould add INTC item for this device(0x%x)\n\n", PciAddress));\r
-\r
-  } else if ((PciDeviceInfo->INTC[IsAPIC] == 0xFF) && (INTCPkgHandle != NULL) && IsAllFunctions) {\r
-    //\r
-    // For all functions senario, if there is invalid INTC update item, but INTC package does exist, should delete it\r
-    //\r
-    DEBUG ((EFI_D_ERROR, "\n\nShould remove INTC item for this device(0x%x)\n\n", PciAddress));\r
-  }\r
-\r
-  //\r
-  // Check INTD\r
-  //\r
-  if ((PciDeviceInfo->INTD[IsAPIC] != 0xFF) && (INTDPkgHandle != NULL)) {\r
-    //\r
-    // Find INTD package and there is valid INTD update item, update it\r
-    //\r
-    SdtUpdateINTxPkg (AcpiSdt, INTDPkgHandle, (PciDeviceInfo->INTD[IsAPIC]), IsAPIC);\r
-  } else if ((PciDeviceInfo->INTD[IsAPIC] != 0xFF) && (INTDPkgHandle == NULL)) {\r
-    //\r
-    // There is valid INTD update item, but no INTD package exist, should add it\r
-    //\r
-    DEBUG ((EFI_D_ERROR, "\n\nShould add INTD item for this device(0x%x)\n\n", PciAddress));\r
-\r
-  }  else if ((PciDeviceInfo->INTD[IsAPIC] == 0xFF) && (INTDPkgHandle != NULL) && IsAllFunctions) {\r
-    //\r
-    // For all functions senario, if there is invalid INTD update item, but INTD package does exist, should delete it\r
-    //\r
-    DEBUG ((EFI_D_ERROR, "\n\nShould remove INTD item for this device(0x%x)\n\n", PciAddress));\r
-  }\r
-\r
-\r
-  if (INTAPkgHandle != NULL) {\r
-    Status = AcpiSdt->Close (INTAPkgHandle);\r
-    ASSERT_EFI_ERROR (Status);\r
-  }\r
-\r
-  if (INTBPkgHandle != NULL) {\r
-    Status = AcpiSdt->Close (INTBPkgHandle);\r
-    ASSERT_EFI_ERROR (Status);\r
-  }\r
-\r
-  if (INTCPkgHandle != NULL) {\r
-    Status = AcpiSdt->Close (INTCPkgHandle);\r
-    ASSERT_EFI_ERROR (Status);\r
-  }\r
-\r
-  if (INTDPkgHandle != NULL) {\r
-    Status = AcpiSdt->Close (INTDPkgHandle);\r
-    ASSERT_EFI_ERROR (Status);\r
-  }\r
-\r
-  return;\r
-}\r
-\r
-/**\r
-  Check every return package for update PRT\r
-\r
-  @param AcpiSdt          Pointer to Acpi SDT protocol\r
-  @param ParentHandle     ACPI pci device handle\r
-  @param PciDeviceInfo    Pointer to PCI_DEVICE_INFO\r
-\r
-**/\r
-VOID\r
-SdtCheckReturnPackage (\r
-  IN EFI_ACPI_SDT_PROTOCOL  *AcpiSdt,\r
-  IN EFI_ACPI_HANDLE        MethodHandle,\r
-  IN PCI_DEVICE_INFO        *PciDeviceInfo\r
-  )\r
-{\r
-  EFI_ACPI_HANDLE    PreviousHandle;\r
-  EFI_ACPI_HANDLE    ReturnHandle;\r
-  EFI_ACPI_HANDLE    PackageHandle;\r
-  EFI_ACPI_HANDLE    NamePkgHandle;\r
-  EFI_STATUS         Status;\r
-  EFI_ACPI_DATA_TYPE DataType;\r
-  UINT8              *Data;\r
-  UINTN              DataSize;\r
-  CHAR8              NameStr[128];\r
-\r
-  ReturnHandle = NULL;\r
-  while (TRUE) {\r
-    PreviousHandle = ReturnHandle;\r
-    Status = AcpiSdt->GetChild (MethodHandle, &ReturnHandle);\r
-    ASSERT_EFI_ERROR (Status);\r
-\r
-    if (PreviousHandle != NULL) {\r
-      Status = AcpiSdt->Close (PreviousHandle);\r
-      ASSERT_EFI_ERROR (Status);\r
-    }\r
-\r
-    if (ReturnHandle == NULL) {\r
-      break;\r
-    }\r
-\r
-    Status = AcpiSdt->GetOption (ReturnHandle, 0, &DataType, (CONST VOID **)&Data, &DataSize);\r
-    ASSERT_EFI_ERROR (Status);\r
-    ASSERT (DataType == EFI_ACPI_DATA_TYPE_OPCODE);\r
-\r
-    if (*Data == AML_RETURN_OP) {\r
-      //\r
-      // Find the return method handle, then look for the returned package data\r
-      //\r
-      Status = AcpiSdt->GetOption (ReturnHandle, 1, &DataType, (CONST VOID **)&Data, &DataSize);\r
-      ASSERT_EFI_ERROR (Status);\r
-\r
-\r
-      if (DataType == EFI_ACPI_DATA_TYPE_NAME_STRING) {\r
-        ZeroMem (NameStr, 128);\r
-        AsciiStrCpy (NameStr, "\\_SB.");\r
-        DataSize = SdtGetNameStringSize (Data);\r
-        AsciiStrnCat (NameStr, (CHAR8 *)Data, DataSize);\r
-\r
-        NamePkgHandle = NULL;\r
-        Status = AcpiSdt->FindPath (mDsdtHandle, NameStr, &NamePkgHandle);\r
-        ASSERT_EFI_ERROR (Status);\r
-        ASSERT (NamePkgHandle != NULL);\r
-\r
-        Status = AcpiSdt->GetOption (NamePkgHandle, 0, &DataType, (CONST VOID **)&Data, &DataSize);\r
-        ASSERT_EFI_ERROR (Status);\r
-        ASSERT (DataType == EFI_ACPI_DATA_TYPE_OPCODE);\r
-        ASSERT (*Data == AML_NAME_OP);\r
-\r
-        Status = AcpiSdt->GetOption (NamePkgHandle, 2, &DataType, (CONST VOID **)&Data, &DataSize);\r
-        ASSERT_EFI_ERROR (Status);\r
-        ASSERT (DataType == EFI_ACPI_DATA_TYPE_CHILD);\r
-      }\r
-\r
-      ASSERT (DataType == EFI_ACPI_DATA_TYPE_CHILD);\r
-\r
-      //\r
-      // Get the parent package handle\r
-      //\r
-      PackageHandle = NULL;\r
-      Status = AcpiSdt->Open (Data, &PackageHandle);\r
-      ASSERT_EFI_ERROR (Status);\r
-\r
-      //\r
-      // Check the parent package for update pci routing\r
-      //\r
-      SdtCheckParentPackage (AcpiSdt, PackageHandle, PciDeviceInfo);\r
-\r
-      Status = AcpiSdt->Close (PackageHandle);\r
-      ASSERT_EFI_ERROR (Status);\r
-\r
-      Status = AcpiSdt->Close (ReturnHandle);\r
-      ASSERT_EFI_ERROR (Status);\r
-\r
-      break;\r
-    }\r
-\r
-    //\r
-    // Not ReturnOp, search it as parent\r
-    //\r
-    SdtCheckReturnPackage (AcpiSdt, ReturnHandle, PciDeviceInfo);\r
-  }\r
-\r
-  //\r
-  // Done\r
-  //\r
-  return;\r
-\r
-}\r
-\r
-/**\r
-  update interrupt info inside the PRT method for the given pci device handle\r
-\r
-  @param AcpiSdt       Pointer to Acpi SDT protocol\r
-  @param PciHandle     ACPI pci device handle\r
-  @param PciDeviceInfo Pointer to PCI_DEVICE_INFO\r
-\r
-**/\r
-EFI_STATUS\r
-SdtUpdatePrtMethod (\r
-  IN EFI_ACPI_SDT_PROTOCOL  *AcpiSdt,\r
-  IN EFI_ACPI_HANDLE        PciHandle,\r
-  IN PCI_DEVICE_INFO        *PciDeviceInfo\r
-  )\r
-{\r
-  EFI_STATUS         Status;\r
-  EFI_ACPI_HANDLE    PrtMethodHandle;\r
-\r
-  //\r
-  // Find the PRT method under this pci device\r
-  //\r
-  PrtMethodHandle = NULL;\r
-  Status = AcpiSdt->FindPath (PciHandle, "_PRT", &PrtMethodHandle);\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  if (PrtMethodHandle == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  SdtCheckReturnPackage(AcpiSdt, PrtMethodHandle, PciDeviceInfo);\r
-\r
-  Status = AcpiSdt->Close (PrtMethodHandle);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Update the package inside name op with correct wakeup resources\r
-\r
-  @param AcpiSdt          Pointer to Acpi SDT protocol\r
-  @param InPkgHandle      ACPI inside package handle\r
-  @param GPEPin           Correct gpe pin\r
-  @param SxNum            Correct system state the device can wake up from\r
-\r
-**/\r
-VOID\r
-SdtUpdatePackageInName (\r
-  IN EFI_ACPI_SDT_PROTOCOL  *AcpiSdt,\r
-  IN EFI_ACPI_HANDLE        INTxPkgHandle,\r
-  IN UINT8                  GPEPin,\r
-  IN UINT8                  SxNum\r
-  )\r
-{\r
-  EFI_ACPI_HANDLE    PreviousHandle;\r
-  EFI_STATUS         Status;\r
-  EFI_ACPI_HANDLE    MemberHandle;\r
-  EFI_ACPI_DATA_TYPE DataType;\r
-  UINT8              *Data;\r
-  UINTN              DataSize;\r
-\r
-  //\r
-  // Check the gpe pin\r
-  //\r
-  MemberHandle = NULL;\r
-  Status = AcpiSdt->GetChild (INTxPkgHandle, &MemberHandle);\r
-  ASSERT_EFI_ERROR (Status);\r
-  ASSERT (MemberHandle != NULL);\r
-\r
-  Status = AcpiSdt->GetOption (MemberHandle, 0, &DataType, (CONST VOID **)&Data, &DataSize);\r
-  ASSERT_EFI_ERROR (Status);\r
-  ASSERT (DataType == EFI_ACPI_DATA_TYPE_OPCODE);\r
-\r
-  //\r
-  // Skip byte prefix\r
-  //\r
-  Data += 1;\r
-\r
-  if (*Data != GPEPin) {\r
-\r
-    *Data = GPEPin;\r
-  }\r
-\r
-  //\r
-  // Check the sx number\r
-  //\r
-  PreviousHandle = MemberHandle;\r
-  Status = AcpiSdt->GetChild (INTxPkgHandle, &MemberHandle);\r
-  ASSERT_EFI_ERROR (Status);\r
-  ASSERT (MemberHandle != NULL);\r
-\r
-  if (PreviousHandle != NULL) {\r
-    Status = AcpiSdt->Close (PreviousHandle);\r
-    ASSERT_EFI_ERROR (Status);\r
-  }\r
-\r
-  Status = AcpiSdt->GetOption (MemberHandle, 0, &DataType, (CONST VOID **)&Data, &DataSize);\r
-  ASSERT_EFI_ERROR (Status);\r
-  ASSERT (DataType == EFI_ACPI_DATA_TYPE_OPCODE);\r
-\r
-  //\r
-  // Skip byte prefix\r
-  //\r
-  Data += 1;\r
-\r
-  if (*Data != SxNum) {\r
-\r
-    *Data = SxNum;\r
-  }\r
-\r
-  Status = AcpiSdt->Close (MemberHandle);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-}\r
-\r
-/**\r
-  Check the name package belonged to PRW\r
-\r
-  @param AcpiSdt          Pointer to Acpi SDT protocol\r
-  @param PrwPkgHandle     ACPI PRW package handle\r
-  @param PciDeviceInfo    Pointer to PCI_DEVICE_INFO\r
-\r
-**/\r
-VOID\r
-SdtCheckNamePackage (\r
-  IN EFI_ACPI_SDT_PROTOCOL  *AcpiSdt,\r
-  IN EFI_ACPI_HANDLE        PrwPkgHandle,\r
-  IN PCI_DEVICE_INFO        *PciDeviceInfo\r
-  )\r
-{\r
-  EFI_ACPI_HANDLE    InPkgHandle;\r
-  EFI_STATUS         Status;\r
-  EFI_ACPI_DATA_TYPE DataType;\r
-  UINT8              *Data;\r
-  UINTN              DataSize;\r
-\r
-  Status = AcpiSdt->GetOption (PrwPkgHandle, 0, &DataType, (CONST VOID **)&Data, &DataSize);\r
-  ASSERT_EFI_ERROR (Status);\r
-  ASSERT (DataType == EFI_ACPI_DATA_TYPE_OPCODE);\r
-  ASSERT (*Data == AML_NAME_OP);\r
-\r
-  Status = AcpiSdt->GetOption (PrwPkgHandle, 2, &DataType, (CONST VOID **)&Data, &DataSize);\r
-  ASSERT_EFI_ERROR (Status);\r
-  ASSERT (DataType == EFI_ACPI_DATA_TYPE_CHILD);\r
-\r
-  //\r
-  // Get the inside package handle\r
-  //\r
-  InPkgHandle = NULL;\r
-  Status = AcpiSdt->Open (Data, &InPkgHandle);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  //\r
-  // update the package in name op for wakeup info\r
-  //\r
-  if ((PciDeviceInfo->GPEPin != 0xFF) && (PciDeviceInfo->SxNum != 0xFF))\r
-    SdtUpdatePackageInName (AcpiSdt, InPkgHandle, PciDeviceInfo->GPEPin, PciDeviceInfo->SxNum);\r
-\r
-  Status = AcpiSdt->Close (InPkgHandle);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  return;\r
-\r
-}\r
-\r
-/**\r
-  update wakeup info inside the PRW method for the given pci device handle\r
-\r
-  @param AcpiSdt       Pointer to Acpi SDT protocol\r
-  @param PciHandle     ACPI pci device handle\r
-  @param PciDeviceInfo Pointer to PCI_DEVICE_INFO\r
-\r
-**/\r
-EFI_STATUS\r
-SdtUpdatePrwPackage (\r
-  IN EFI_ACPI_SDT_PROTOCOL  *AcpiSdt,\r
-  IN EFI_ACPI_HANDLE        PciHandle,\r
-  IN PCI_DEVICE_INFO        *PciDeviceInfo\r
-  )\r
-{\r
-  EFI_STATUS         Status;\r
-  EFI_ACPI_HANDLE    PrwPkgHandle;\r
-\r
-  //\r
-  // Find the PRT method under this pci device\r
-  //\r
-  PrwPkgHandle = NULL;\r
-  Status = AcpiSdt->FindPath (PciHandle, "_PRW", &PrwPkgHandle);\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  if (PrwPkgHandle == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  SdtCheckNamePackage(AcpiSdt, PrwPkgHandle, PciDeviceInfo);\r
-\r
-  Status = AcpiSdt->Close (PrwPkgHandle);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  update pci routing information in acpi table based on pcd settings\r
-\r
-  @param AcpiSdt          Pointer to Acpi SDT protocol\r
-  @param PciRootHandle       ACPI root bridge handle\r
-  @param PciDeviceInfo    Pointer to PCI_DEVICE_INFO\r
-\r
-**/\r
-EFI_STATUS\r
-SdtUpdatePciRouting (\r
-  IN EFI_ACPI_SDT_PROTOCOL  *AcpiSdt,\r
-  IN EFI_ACPI_HANDLE        PciRootHandle,\r
-  IN PCI_DEVICE_INFO        *PciDeviceInfo\r
-  )\r
-{\r
-  EFI_STATUS         Status;\r
-  EFI_ACPI_HANDLE    PciBridgeHandle;\r
-  UINT32             PciAddress;\r
-\r
-\r
-  PciBridgeHandle = NULL;\r
-  if (PciDeviceInfo->BridgeAddress == 0x00000000) {\r
-    //\r
-    // Its bridge is the host root bridge\r
-    //\r
-    PciBridgeHandle = PciRootHandle;\r
-\r
-  } else {\r
-\r
-    //\r
-    // Its bridge is just a pci device under the host bridge\r
-    //\r
-\r
-    //\r
-    // Conver the bridge address into one that acpi table can recognize\r
-    //\r
-    PciAddress = SdtConvertToAcpiPciAdress (PciDeviceInfo->BridgeAddress);\r
-\r
-    //\r
-    // Scan the whole table to find the pci device\r
-    //\r
-    PciBridgeHandle = SdtGetHandleByScanAllChilds(AcpiSdt, PciRootHandle, SdtFindPciDeviceHandle, &PciAddress);\r
-    if (PciBridgeHandle == NULL) {\r
-\r
-      return EFI_INVALID_PARAMETER;\r
-    }\r
-  }\r
-\r
-  Status = SdtUpdatePrtMethod(AcpiSdt, PciBridgeHandle, PciDeviceInfo);\r
-\r
-  if (PciDeviceInfo->BridgeAddress != 0x00000000) {\r
-    Status = AcpiSdt->Close (PciBridgeHandle);\r
-    ASSERT_EFI_ERROR (Status);\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  update power resource wake up information in acpi table based on pcd settings\r
-\r
-  @param AcpiSdt          Pointer to Acpi SDT protocol\r
-  @param PciRootHandle    ACPI root bridge handle\r
-  @param PciDeviceInfo    Pointer to PCI_DEVICE_INFO\r
-\r
-**/\r
-EFI_STATUS\r
-SdtUpdatePowerWake (\r
-  IN EFI_ACPI_SDT_PROTOCOL  *AcpiSdt,\r
-  IN EFI_ACPI_HANDLE        PciRootHandle,\r
-  IN PCI_DEVICE_INFO        *PciDeviceInfo\r
-  )\r
-{\r
-  EFI_STATUS         Status;\r
-  EFI_ACPI_HANDLE    PciBridgeHandle;\r
-  EFI_ACPI_HANDLE    PciDeviceHandle;\r
-  UINT32             PciAddress;\r
-\r
-  PciBridgeHandle = NULL;\r
-  if (PciDeviceInfo->BridgeAddress == 0x00000000) {\r
-    //\r
-    // Its bridge is the host root bridge\r
-    //\r
-    PciBridgeHandle = PciRootHandle;\r
-\r
-  } else {\r
-\r
-    //\r
-    // Its bridge is just a pci device under the host bridge\r
-    //\r
-\r
-    //\r
-    // Conver the bridge address into one that acpi table can recognize\r
-    //\r
-    PciAddress = SdtConvertToAcpiPciAdress (PciDeviceInfo->BridgeAddress);\r
-\r
-    //\r
-    // Scan the whole table to find the pci device\r
-    //\r
-    PciBridgeHandle = SdtGetHandleByScanAllChilds(AcpiSdt, PciRootHandle, SdtFindPciDeviceHandle, &PciAddress);\r
-\r
-    if (PciBridgeHandle == NULL) {\r
-\r
-      Status = AcpiSdt->Close (PciRootHandle);\r
-      ASSERT_EFI_ERROR (Status);\r
-\r
-      return EFI_INVALID_PARAMETER;\r
-    }\r
-  }\r
-\r
-  PciDeviceHandle = NULL;\r
-\r
-  //\r
-  // Conver the device address into one that acpi table can recognize\r
-  //\r
-  PciAddress = SdtConvertToAcpiPciAdress (PciDeviceInfo->DeviceAddress);\r
-\r
-  //\r
-  // Scan the whole table to find the pci device\r
-  //\r
-  PciDeviceHandle = SdtGetHandleByScanAllChilds(AcpiSdt, PciBridgeHandle, SdtFindPciDeviceHandle, &PciAddress);\r
-\r
-  if (PciDeviceHandle == NULL) {\r
-    if (PciDeviceInfo->BridgeAddress != 0x00000000) {\r
-      Status = AcpiSdt->Close (PciBridgeHandle);\r
-      ASSERT_EFI_ERROR (Status);\r
-    }\r
-\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  Status = SdtUpdatePrwPackage(AcpiSdt, PciDeviceHandle, PciDeviceInfo);\r
-\r
-  Status = AcpiSdt->Close (PciDeviceHandle);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  if (PciDeviceInfo->BridgeAddress != 0x00000000) {\r
-    Status = AcpiSdt->Close (PciBridgeHandle);\r
-    ASSERT_EFI_ERROR (Status);\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Get the root bridge handle by scanning the acpi table\r
-\r
-  @param AcpiSdt          Pointer to Acpi SDT protocol\r
-  @param DsdtHandle       ACPI root handle\r
-\r
-  @retval EFI_ACPI_HANDLE the handle of the root bridge\r
-**/\r
-EFI_ACPI_HANDLE\r
-SdtGetRootBridgeHandle (\r
-  IN EFI_ACPI_SDT_PROTOCOL  *AcpiSdt,\r
-  IN EFI_ACPI_HANDLE        DsdtHandle\r
-  )\r
-{\r
-  EFI_ACPI_HANDLE    PciRootHandle;\r
-\r
-  //\r
-  // Scan the whole table to find the root bridge\r
-  //\r
-  PciRootHandle = NULL;\r
-  PciRootHandle = SdtGetHandleByScanAllChilds(AcpiSdt, DsdtHandle, SdtFindRootBridgeHandle, NULL);\r
-  ASSERT (PciRootHandle != NULL);\r
-\r
-  return PciRootHandle;\r
-}\r
-\r
-\r
-/**\r
-  Check input Pci device info is changed from the default values\r
-  @param PciDeviceInfo    Pointer to PCI_DEVICE_INFO\r
-  @param UpdatePRT        Pointer to BOOLEAN\r
-  @param UpdatePRW        Pointer to BOOLEAN\r
-\r
-**/\r
-VOID\r
-SdtCheckPciDeviceInfoChanged (\r
-  IN PCI_DEVICE_INFO        *PciDeviceInfo,\r
-  IN BOOLEAN                *UpdatePRT,\r
-  IN BOOLEAN                *UpdatePRW\r
-  )\r
-{\r
-  UINTN Index = 0;\r
-\r
-  if (mQNCPciInfo == NULL) {\r
-    *UpdatePRT = FALSE;\r
-    *UpdatePRW = FALSE;\r
-    return;\r
-  }\r
-\r
-  *UpdatePRT = TRUE;\r
-  *UpdatePRW = TRUE;\r
-\r
-  for (Index = 0;Index < CURRENT_PCI_DEVICE_NUM; Index++) {\r
-    if ((mQNCPciInfo[Index].BridgeAddress == PciDeviceInfo->BridgeAddress)\r
-      && (mQNCPciInfo[Index].DeviceAddress == PciDeviceInfo->DeviceAddress)) {\r
-      //\r
-      // Find one matched entry\r
-      //\r
-      if (CompareMem (&(mQNCPciInfo[Index].INTA[0]), &PciDeviceInfo->INTA[0], 10) == 0) {\r
-        *UpdatePRT = FALSE;\r
-        *UpdatePRW = FALSE;\r
-        //DEBUG ((EFI_D_ERROR, "Find one matched entry[%d] and no change\n", Index));\r
-      } else {\r
-        if (CompareMem (&(mQNCPciInfo[Index].INTA[0]), &PciDeviceInfo->INTA[0], 8) == 0)\r
-          *UpdatePRT = FALSE;\r
-\r
-        if (CompareMem (&(mQNCPciInfo[Index].GPEPin), &PciDeviceInfo->GPEPin, 2) == 0)\r
-          *UpdatePRW = FALSE;\r
-\r
-        if (*(UINT64 *)(&PciDeviceInfo->INTA[0]) == 0xFFFFFFFFFFFFFFFFULL)\r
-          *UpdatePRT = FALSE;\r
-\r
-        if (*(UINT16 *)(&PciDeviceInfo->GPEPin) == 0xFFFF)\r
-          *UpdatePRW = FALSE;\r
-\r
-        //DEBUG ((EFI_D_ERROR, "Find one matched entry[%d] and but need update PRT:0x%x PRW:0x%x\n", Index, *UpdatePRT, *UpdatePRW));\r
-      }\r
-      break;\r
-    }\r
-  }\r
-\r
-  //if (Index == 42) {\r
-  //  DEBUG ((EFI_D_ERROR, "Find No matched entry\n"));\r
-  //}\r
-\r
-  return;\r
-}\r