/** @file Header file for CpuPcieInitCommonLib. Copyright (c) 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _CPU_PCIE_INIT_COMMON_H_ #define _CPU_PCIE_INIT_COMMON_H_ #include /** Print registers value @param[in] PrintMmioBase Mmio base address @param[in] PrintSize Number of registers @param[in] OffsetFromBase Offset from mmio base address @retval None **/ VOID SaPrintRegisters ( IN UINTN PrintMmioBase, IN UINT32 PrintSize, IN UINT32 OffsetFromBase ); /** Print registers value @param[in] PrintPciSegmentBase Pci segment base address @param[in] PrintSize Number of registers @param[in] OffsetFromBase Offset from mmio base address @retval None **/ VOID SaPrintPciRegisters ( IN UINT64 PrintPciSegmentBase, IN UINT32 PrintSize, IN UINT32 OffsetFromBase ); // // 2LM: PegPcie APIs for Sideband Access Mechanism in 2LM mode // /** Reads an 8-bit PCI configuration register. Its a wrapper library function. This function uses side band access for PEG60 when 2LM mode is enabled. Other calls to this function will be routed to core PciSegmentRead8 function. @param Address Address that encodes the PCI Segment, Bus, Device, Function, and Register. @return The 8-bit PCI configuration register specified by Address. **/ UINT8 EFIAPI PegPciSegmentRead8 ( IN UINT64 Address ); /** Writes an 8-bit PCI configuration register. Its a wrapper library function. This function uses side band access for PEG60 when 2LM mode is enabled. Other calls to this function will be routed to core PciSegmentWrite8 function. @param Address Address that encodes the PCI Segment, Bus, Device, Function, and Register. @param Value The value to write. @return The value written to the PCI configuration register. **/ UINT8 EFIAPI PegPciSegmentWrite8 ( IN UINT64 Address, IN UINT8 Value ); /** Reads a 16-bit PCI configuration register. Its a wrapper library function. This function uses side band access for PEG60 when 2LM mode is enabled. Other calls to this function will be routed to core PciSegmentRead16 function. @param Address Address that encodes the PCI Segment, Bus, Device, Function, and Register. @return The 16-bit PCI configuration register specified by Address. **/ UINT16 EFIAPI PegPciSegmentRead16 ( IN UINT64 Address ); /** Writes a 16-bit PCI configuration register. Its a wrapper library function. This function uses side band access for PEG60 when 2LM mode is enabled. Other calls to this function will be routed to core PciSegmentWrite16 function. @param Address Address that encodes the PCI Segment, Bus, Device, Function, and Register. @param Value The value to write. @return The parameter of Value. **/ UINT16 EFIAPI PegPciSegmentWrite16 ( IN UINT64 Address, IN UINT16 Value ); /** Reads a 32-bit PCI configuration register. Its a wrapper library function. This function uses side band access for PEG60 when 2LM mode is enabled. Other calls to this function will be routed to core PciSegmentRead32 function. @param Address Address that encodes the PCI Segment, Bus, Device, Function, and Register. @return The 32-bit PCI configuration register specified by Address. **/ UINT32 EFIAPI PegPciSegmentRead32 ( IN UINT64 Address ); /** Writes a 32-bit PCI configuration register. Its a wrapper library function. This function uses side band access for PEG60 when 2LM mode is enabled. Other calls to this function will be routed to core PciSegmentWrite32 function. @param Address Address that encodes the PCI Segment, Bus, Device, Function, and Register. @param Value The value to write. @return The parameter of Value. **/ UINT32 EFIAPI PegPciSegmentWrite32 ( IN UINT64 Address, IN UINT32 Value ); /** Performs a bitwise OR of a 16-bit PCI configuration register with a 16-bit value. Its a wrapper library function. This function uses side band access for PEG60 when 2LM mode is enabled. Other calls to this function will be routed to core PciSegmentOr16 function. @param Address Address that encodes the PCI Segment, Bus, Device, Function, and Register. @param OrData The value to OR with the PCI configuration register. @return The value written to the PCI configuration register. **/ UINT16 EFIAPI PegPciSegmentOr16 ( IN UINT64 Address, IN UINT16 OrData ); /** Performs a bitwise AND of a 16-bit PCI configuration register with a 16-bit value. Its a wrapper library function. This function uses side band access for PEG60 when 2LM mode is enabled. Other calls to this function will be routed to core PciSegmentAnd32 function. @param Address Address that encodes the PCI Segment, Bus, Device, Function, and Register. @param AndData The value to AND with the PCI configuration register. @return The value written to the PCI configuration register. **/ UINT16 EFIAPI PegPciSegmentAnd16 ( IN UINT64 Address, IN UINT16 AndData ); /** Performs a bitwise AND of a 8-bit PCI configuration register with a 8-bit value. Its a wrapper library function. This function uses side band access for PEG60 when 2LM mode is enabled. Other calls to this function will be routed to core PciSegmentAnd8 function. @param Address Address that encodes the PCI Segment, Bus, Device, Function, and Register. @param AndData The value to AND with the PCI configuration register. @return The value written to the PCI configuration register. **/ UINT8 EFIAPI PegPciSegmentAnd8 ( IN UINT64 Address, IN UINT8 AndData ); /** Performs a bitwise OR of a 32-bit PCI configuration register with a 32-bit value. Its a wrapper library function. This function uses side band access for PEG60 when 2LM mode is enabled. Other calls to this function will be routed to core PciSegmentOr32 function. @param Address Address that encodes the PCI Segment, Bus, Device, Function, and Register. @param OrData The value to OR with the PCI configuration register. @return The value written to the PCI configuration register. **/ UINT32 EFIAPI PegPciSegmentOr32 ( IN UINT64 Address, IN UINT32 OrData ); /** Performs a bitwise OR of a 8-bit PCI configuration register with a 8-bit value. Its a wrapper library function. This function uses side band access for PEG60 when 2LM mode is enabled. Other calls to this function will be routed to core PciSegmentOr8 function. @param Address Address that encodes the PCI Segment, Bus, Device, Function, and Register. @param OrData The value to OR with the PCI configuration register. @return The value written to the PCI configuration register. **/ UINT8 EFIAPI PegPciSegmentOr8 ( IN UINT64 Address, IN UINT8 OrData ); /** Performs a bitwise AND of a 32-bit PCI configuration register with a 32-bit value. Its a wrapper library function. This function uses side band access for PEG60 when 2LM mode is enabled. Other calls to this function will be routed to core PciSegmentAnd32 function. @param Address Address that encodes the PCI Segment, Bus, Device, Function, and Register. @param AndData The value to AND with the PCI configuration register. @return The value written to the PCI configuration register. **/ UINT32 EFIAPI PegPciSegmentAnd32 ( IN UINT64 Address, IN UINT32 AndData ); /** Performs a bitwise AND of a 32-bit PCI configuration register with a 32-bit value, followed a bitwise OR with another 32-bit value. Its a wrapper library function. This function uses side band access for PEG60 when 2LM mode is enabled. Other calls to this function will be routed to core PciSegmentAndThenOr32 function. @param Address Address that encodes the PCI Segment, Bus, Device, Function, and Register. @param AndData The value to AND with the PCI configuration register. @param OrData The value to OR with the PCI configuration register. @return The value written to the PCI configuration register. **/ UINT32 EFIAPI PegPciSegmentAndThenOr32 ( IN UINT64 Address, IN UINT32 AndData, IN UINT32 OrData ); /** Performs a bitwise AND of a 16-bit PCI configuration register with a 16-bit value, followed a bitwise OR with another 16-bit value. Its a wrapper library function. This function uses side band access for PEG60 when 2LM mode is enabled. Other calls to this function will be routed to core PciSegmentAndThenOr16 function. @param Address Address that encodes the PCI Segment, Bus, Device, Function, and Register. @param AndData The value to AND with the PCI configuration register. @param OrData The value to OR with the PCI configuration register. @return The value written to the PCI configuration register. **/ UINT16 EFIAPI PegPciSegmentAndThenOr16 ( IN UINT64 Address, IN UINT16 AndData, IN UINT16 OrData ); /** Performs a bitwise AND of a 8-bit PCI configuration register with a 8-bit value, followed a bitwise OR with another 8-bit value. Its a wrapper library function. This function uses side band access for PEG60 when 2LM mode is enabled. Other calls to this function will be routed to core PciSegmentAndThenOr8 function. @param Address Address that encodes the PCI Segment, Bus, Device, Function, and Register. @param AndData The value to AND with the PCI configuration register. @param OrData The value to OR with the PCI configuration register. @return The value written to the PCI configuration register. **/ UINT8 EFIAPI PegPciSegmentAndThenOr8 ( IN UINT64 Address, IN UINT8 AndData, IN UINT8 OrData ); /** Find the Offset to a Capabilities ID @param[in] Segment Pci Segment Number @param[in] Bus Pci Bus Number @param[in] Device Pci Device Number @param[in] Function Pci Function Number @param[in] CapId CAPID to search for @retval 0 CAPID not found @retval Other CAPID found, Offset of desired CAPID **/ UINT8 PegPcieFindCapId ( IN UINT8 Segment, IN UINT8 Bus, IN UINT8 Device, IN UINT8 Function, IN UINT8 CapId ); #endif // _CPU_PCIE_INIT_COMMON_H_