/** @file | |
PCI Segment Information Library that returns one segment whose | |
segment base address is retrieved from AcpiBoardInfo HOB. | |
Copyright (c) 2020, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#include <PiDxe.h> | |
#include <Guid/AcpiBoardInfoGuid.h> | |
#include <Library/HobLib.h> | |
#include <Library/PciSegmentInfoLib.h> | |
#include <Library/DebugLib.h> | |
STATIC PCI_SEGMENT_INFO mPciSegment0 = { | |
0, // Segment number | |
0, // To be fixed later | |
0, // Start bus number | |
255 // End bus number | |
}; | |
/** | |
Return an array of PCI_SEGMENT_INFO holding the segment information. | |
Note: The returned array/buffer is owned by callee. | |
@param Count Return the count of segments. | |
@retval A callee owned array holding the segment information. | |
**/ | |
PCI_SEGMENT_INFO * | |
EFIAPI | |
GetPciSegmentInfo ( | |
UINTN *Count | |
) | |
{ | |
EFI_HOB_GUID_TYPE *GuidHob; | |
ACPI_BOARD_INFO *AcpiBoardInfo; | |
ASSERT (Count != NULL); | |
if (Count == NULL) { | |
return NULL; | |
} | |
if (mPciSegment0.BaseAddress == 0) { | |
// | |
// Find the acpi board information guid hob | |
// | |
GuidHob = GetFirstGuidHob (&gUefiAcpiBoardInfoGuid); | |
ASSERT (GuidHob != NULL); | |
AcpiBoardInfo = (ACPI_BOARD_INFO *)GET_GUID_HOB_DATA (GuidHob); | |
mPciSegment0.BaseAddress = AcpiBoardInfo->PcieBaseAddress; | |
} | |
*Count = 1; | |
return &mPciSegment0; | |
} |