123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- /** @file
- MCFG table parser
- Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent
- @par Reference(s):
- - PCI Firmware Specification - Revision 3.2, January 26, 2015.
- **/
- #include <IndustryStandard/Acpi.h>
- #include <Library/UefiLib.h>
- #include "AcpiParser.h"
- #include "AcpiTableParser.h"
- // Local variables
- STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
- /**
- An ACPI_PARSER array describing the ACPI MCFG Table.
- **/
- STATIC CONST ACPI_PARSER McfgParser[] = {
- PARSE_ACPI_HEADER (&AcpiHdrInfo),
- { L"Reserved", 8,36, L"0x%lx", NULL, NULL, NULL, NULL },
- };
- /**
- An ACPI_PARSER array describing the PCI configuration Space Base Address structure.
- **/
- STATIC CONST ACPI_PARSER PciCfgSpaceBaseAddrParser[] = {
- { L"Base Address", 8, 0, L"0x%lx", NULL, NULL, NULL, NULL },
- { L"PCI Segment Group No.", 2, 8, L"0x%x", NULL, NULL, NULL, NULL },
- { L"Start Bus No.", 1, 10, L"0x%x", NULL, NULL, NULL, NULL },
- { L"End Bus No.", 1, 11, L"0x%x", NULL, NULL, NULL, NULL },
- { L"Reserved", 4, 12, L"0x%x", NULL, NULL, NULL, NULL }
- };
- /**
- This function parses the ACPI MCFG table.
- When trace is enabled this function parses the MCFG table and
- traces the ACPI table fields.
- This function also performs validation of the ACPI table fields.
- @param [in] Trace If TRUE, trace the ACPI fields.
- @param [in] Ptr Pointer to the start of the buffer.
- @param [in] AcpiTableLength Length of the ACPI table.
- @param [in] AcpiTableRevision Revision of the ACPI table.
- **/
- VOID
- EFIAPI
- ParseAcpiMcfg (
- IN BOOLEAN Trace,
- IN UINT8 *Ptr,
- IN UINT32 AcpiTableLength,
- IN UINT8 AcpiTableRevision
- )
- {
- UINT32 Offset;
- UINT32 PciCfgOffset;
- UINT8 *PciCfgSpacePtr;
- if (!Trace) {
- return;
- }
- Offset = ParseAcpi (
- TRUE,
- 0,
- "MCFG",
- Ptr,
- AcpiTableLength,
- PARSER_PARAMS (McfgParser)
- );
- PciCfgSpacePtr = Ptr + Offset;
- while (Offset < AcpiTableLength) {
- PciCfgOffset = ParseAcpi (
- TRUE,
- 2,
- "PCI Configuration Space",
- PciCfgSpacePtr,
- (AcpiTableLength - Offset),
- PARSER_PARAMS (PciCfgSpaceBaseAddrParser)
- );
- PciCfgSpacePtr += PciCfgOffset;
- Offset += PciCfgOffset;
- }
- }
|