/** @file UbaSlotUpdateLib implementation. @copyright Copyright 2012 - 2021 Intel Corporation.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include #include #include #include #include EFI_STATUS PlatformGetSlotTableData ( IN OUT IIO_BROADWAY_ADDRESS_DATA_ENTRY **BroadwayTable, IN OUT UINT8 *IOU2Setting, IN OUT UINT8 *FlagValue ) { EFI_STATUS Status; UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL; PLATFORM_SLOT_UPDATE_TABLE IioSlotTable; UINTN TableSize; Status = PeiServicesLocatePpi ( &gUbaConfigDatabasePpiGuid, 0, NULL, &UbaConfigPpi ); if (EFI_ERROR(Status)) { return Status; } TableSize = sizeof(IioSlotTable); Status = UbaConfigPpi->GetData ( UbaConfigPpi, &gPlatformSlotDataGuid, &IioSlotTable, &TableSize ); if (EFI_ERROR(Status)) { return Status; } ASSERT (IioSlotTable.Signature == PLATFORM_SLOT_UPDATE_SIGNATURE); ASSERT (IioSlotTable.Version == PLATFORM_SLOT_UPDATE_VERSION); *BroadwayTable = IioSlotTable.BroadwayTablePtr; *IOU2Setting = IioSlotTable.GetIOU2Setting (*IOU2Setting); *FlagValue = IioSlotTable.FlagValue; return Status; } EFI_STATUS PlatformGetSlotTableData2 ( IN OUT IIO_BROADWAY_ADDRESS_DATA_ENTRY **BroadwayTable, IN OUT UINT8 *IOU0Setting, IN OUT UINT8 *FlagValue, IN OUT UINT8 *IOU2Setting, IN UINT8 SkuPersonalityType ) { EFI_STATUS Status; UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL; PLATFORM_SLOT_UPDATE_TABLE2 IioSlotTable; UINTN TableSize; Status = PeiServicesLocatePpi ( &gUbaConfigDatabasePpiGuid, 0, NULL, &UbaConfigPpi ); if (EFI_ERROR(Status)) { return Status; } TableSize = sizeof(IioSlotTable); if ((SkuPersonalityType == 1) || (SkuPersonalityType == 3)) { Status = UbaConfigPpi->GetData ( UbaConfigPpi, &gPlatformSlotDataGuid2_1, &IioSlotTable, &TableSize ); } else { Status = UbaConfigPpi->GetData ( UbaConfigPpi, &gPlatformSlotDataGuid2, &IioSlotTable, &TableSize ); } if (EFI_ERROR(Status)) { return Status; } ASSERT (IioSlotTable.Signature == PLATFORM_SLOT_UPDATE_SIGNATURE); ASSERT (IioSlotTable.Version == PLATFORM_SLOT_UPDATE_VERSION); *BroadwayTable = IioSlotTable.BroadwayTablePtr; *IOU0Setting = IioSlotTable.GetIOU0Setting (*IOU0Setting); *FlagValue = IioSlotTable.FlagValue; *IOU2Setting = IioSlotTable.GetIOU2Setting (SkuPersonalityType, *IOU2Setting); return Status; } EFI_STATUS PlatformPchGetPciSlotImplementedTableData ( IN OUT UINT8 **SlotImplementedTable ) { EFI_STATUS Status; UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL; PLATFORM_PCH_PCI_SLOT_IMPLEMENTED_UPDATE_TABLE SITable; UINTN TableSize; Status = PeiServicesLocatePpi ( &gUbaConfigDatabasePpiGuid, 0, NULL, (VOID **)&UbaConfigPpi ); if (EFI_ERROR(Status)) { return Status; } TableSize = sizeof(SITable); Status = UbaConfigPpi->GetData ( UbaConfigPpi, &gPlatformPciSlotImplementedGuid, &SITable, &TableSize ); if (EFI_ERROR(Status)) { return Status; } ASSERT (SITable.Signature == PLATFORM_SLOT_UPDATE_SIGNATURE); ASSERT (SITable.Version == PLATFORM_SLOT_UPDATE_VERSION); *SlotImplementedTable = SITable.SlotImplementedTableDataPtr; return Status; }