123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /** @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;
- }
|