mirror of https://github.com/acidanthera/audk.git
60 lines
1.4 KiB
C
60 lines
1.4 KiB
C
/** @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;
|
|
}
|