UbaPchPcieBifurcationLib.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /** @file
  2. @copyright
  3. Copyright 2017 - 2021 Intel Corporation. <BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #include <PiPei.h>
  7. #include <Uefi/UefiSpec.h>
  8. #include <Ppi/UbaCfgDb.h>
  9. #include <Library/PeimEntryPoint.h>
  10. #include <Library/PeiServicesLib.h>
  11. #include <Library/PeiServicesTablePointerLib.h>
  12. #include <Library/DebugLib.h>
  13. #include <Library/IoLib.h>
  14. #include <Library/UbaPcieBifurcationUpdateLib.h>
  15. EFI_STATUS
  16. PlatformGetPchPcieBifurcationConfig (
  17. IN OUT PCIE_BIFURCATION_CONFIG **PchPcieBifurcationConfig,
  18. IN OUT PCH_SLOT_CONFIG_DATA_ENTRY_EX **PchSlotConfig
  19. )
  20. {
  21. EFI_STATUS Status;
  22. UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
  23. PLATFORM_PCH_PCIE_BIFURCATION_UPDATE_TABLE BifurcationUpdateTable;
  24. UINTN TableSize;
  25. Status = PeiServicesLocatePpi (
  26. &gUbaConfigDatabasePpiGuid,
  27. 0,
  28. NULL,
  29. (VOID **) &UbaConfigPpi
  30. );
  31. if (EFI_ERROR(Status)) {
  32. return Status;
  33. }
  34. TableSize = sizeof(BifurcationUpdateTable);
  35. Status = UbaConfigPpi->GetData (
  36. UbaConfigPpi,
  37. &gPlatformUbaPcieBifurcationGuid,
  38. &BifurcationUpdateTable,
  39. &TableSize
  40. );
  41. if (EFI_ERROR(Status)) {
  42. return Status;
  43. }
  44. ASSERT (BifurcationUpdateTable.Signature == PLATFORM_PCH_PCIE_BIFURCATION_UPDATE_SIGNATURE);
  45. ASSERT (BifurcationUpdateTable.Version == PLATFORM_PCH_PCIE_BIFURCATION_UPDATE_VERSION);
  46. BifurcationUpdateTable.CallPcieBifurcationUpdate(PchPcieBifurcationConfig, PchSlotConfig);
  47. return Status;
  48. }