/** @file Header file for PchPsfPrivateLib. Copyright (c) 2019 Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _PCH_PSF_PRIVATE_LIB_H_ #define _PCH_PSF_PRIVATE_LIB_H_ #include #include // // Structure for storing data on both PSF SideBand Port ID and // PSF port register offset for specific device // typedef struct { PCH_SBI_PID PsfPid; UINT16 RegBase; } PSF_PORT; /** Disable device at PSF level Method not for bridges (e.g. PCIe Root Port) @param[in] PsfPort PSF PORT data structure **/ VOID PsfDisableDevice ( IN PSF_PORT PsfPort ); /** Enable device at PSF level Method not for bridges (e.g. PCIe Root Port) @param[in] PsfPort PSF PORT data structure **/ VOID PsfEnableDevice ( IN PSF_PORT PsfPort ); /** Hide PciCfgSpace of device at PSF level Method not for bridges (e.g. PCIe Root Port) @param[in] PsfPort PSF PORT data structure **/ VOID PsfHideDevice ( IN PSF_PORT PsfPort ); /** Unhide PciCfgSpace of device at PSF level Method not for bridges (e.g. PCIe Root Port) @param[in] PsfPort PSF PORT data structure **/ VOID PsfUnhideDevice ( IN PSF_PORT PsfPort ); /** Disable device BARs at PSF level Method not for bridges (e.g. PCIe Root Port) @param[in] PsfPort PSF PORT data structure @param[in] BarDisMask BIT0-BAR0, BIT1-BAR1,... Mask corresponds to 32bit wide BARs **/ VOID PsfDisableDeviceBar ( IN PSF_PORT PsfPort, IN UINT32 BarDisMask ); /** Enable device BARs at PSF level Method not for bridges (e.g. PCIe Root Port) @param[in] PsfPort PSF PORT data structure @param[in] BarEnMask BIT0-BAR0, BIT1-BAR1,... Mask corresponds to 32bit wide BARs **/ VOID PsfEnableDeviceBar ( IN PSF_PORT PsfPort, IN UINT32 BarEnMask ); /** Return PSF_PORT for SerialIO I2C device @param[in] I2cNum Serial IO I2C device (I2C0, I2C1, ....) @retval PsfPort PSF PORT structure for SerialIO I2C device **/ PSF_PORT PsfSerialIoI2cPort ( IN UINT32 I2cNum ); /** Return PSF_PORT for SerialIO SPI device @param[in] SpiNum Serial IO SPI device (SPI0, SPI1, ....) @retval PsfPort PSF PORT structure for SerialIO SPI device **/ PSF_PORT PsfSerialIoSpiPort ( IN UINT32 SpiNum ); /** Return PSF_PORT for SerialIO UART device @param[in] UartNum Serial IO UART device (UART0, UART1, ....) @retval PsfPort PSF PORT structure for SerialIO UART device **/ PSF_PORT PsfSerialIoUartPort ( IN UINT32 UartNum ); /** This procedure will set BARx value for TraceHub ACPI device at PSF level @param[in] BarNum BAR Number (0:BAR0, 1:BAR1) @param[in] BarValue 32bit BAR value **/ VOID PsfSetTraceHubAcpiDeviceBarValue ( IN UINT8 BarNum, IN UINT32 BarValue ); /** This procedure will enable MSE for TraceHub ACPI device at PSF level **/ VOID PsfEnableTraceHubAcpiDeviceMemorySpace ( VOID ); /** Enable HECI device at PSF level @param[in] HeciDevice HECIx Device (HECI1-4) **/ VOID PsfEnableHeciDevice ( IN UINT8 HeciDevice ); /** Disable HECI device at PSF level @param[in] HeciDevice HECIx Device (HECI1-4) **/ VOID PsfDisableHeciDevice ( IN UINT8 HeciDevice ); /** Disable IDER device at PSF level **/ VOID PsfDisableIderDevice ( VOID ); /** Enable SOL device at PSF level **/ VOID PsfEnableSolDevice ( VOID ); /** Disable SOL device at PSF level **/ VOID PsfDisableSolDevice ( VOID ); /** Set PMC ABASE value in PSF @param[in] Address Address for ACPI base. **/ VOID PsfSetPmcAbase ( IN UINT16 Address ); /** Get PMC ABASE value from PSF @retval Address Address for ACPI base. **/ UINT16 PsfGetPmcAbase ( VOID ); /** Get PMC PWRMBASE value from PSF @retval Address Address for PWRM base. **/ UINT32 PsfGetPmcPwrmBase ( VOID ); /** Hide Cnvi WiFi device's PciCfgSpace at PSF level **/ VOID PsfHideCnviWifiDevice ( VOID ); /** Disable Cnvi Wifi device at PSF level **/ VOID PsfDisableCnviWifiDevice ( VOID ); /** Disable HDAudio device at PSF level **/ VOID PsfDisableHdaDevice ( VOID ); /** Disable xDCI device at PSF level **/ VOID PsfDisableXdciDevice ( VOID ); /** Disable xHCI device at PSF level **/ VOID PsfDisableXhciDevice ( VOID ); /** Disable xHCI VTIO Phantom device at PSF level **/ VOID PsfDisableXhciVtioDevice ( VOID ); /** Disable SATA device at PSF level @param[in] SataCtrlIndex SATA controller index **/ VOID PsfDisableSataDevice ( IN UINT32 SataCtrlIndex ); /** Return PSF_PORT for SCS eMMC device @retval PsfPort PSF PORT structure for SCS eMMC device **/ PSF_PORT PsfScsEmmcPort ( VOID ); /** Return PSF_PORT for SCS SD Card device @retval PsfPort PSF PORT structure for SCS SD Card device **/ PSF_PORT PsfScsSdCardPort ( VOID ); /** Return PSF_PORT for SCS UFS device @param[in] UfsNum UFS Device @retval PsfPort PSF PORT structure for SCS UFS device **/ PSF_PORT PsfScsUfsPort ( IN UINT32 UfsNum ); /** Disable ISH device at PSF level **/ VOID PsfDisableIshDevice ( VOID ); /** Disable ISH BAR1 at PSF level **/ VOID PsfDisableIshBar1 ( VOID ); /** Disable GbE device at PSF level **/ VOID PsfDisableGbeDevice ( VOID ); /** Disable SMBUS device at PSF level **/ VOID PsfDisableSmbusDevice ( VOID ); /** Disable TraceHub ACPI devices at PSF level **/ VOID PsfDisableTraceHubAcpiDevice ( VOID ); /** Hide TraceHub ACPI devices PciCfgSpace at PSF level **/ VOID PsfHideTraceHubAcpiDevice ( VOID ); /** This procedure will hide TraceHub PciCfgSpace at PSF level **/ VOID PsfHideTraceHubDevice ( VOID ); /** This procedure will unhide TraceHub PciCfgSpace at PSF level **/ VOID PsfUnhideTraceHubDevice ( VOID ); /** This procedure will disable TraceHub device at PSF level **/ VOID PsfDisableTraceHubDevice ( VOID ); /** Configures rootspace 3 bus number for PCIe IMR use @param[in] Rs3Bus bus number **/ VOID PsfSetRs3Bus ( UINT8 Rs3Bus ); /** Disable PCIe Root Port at PSF level @param[in] RpIndex PCIe Root Port Index (0 based) **/ VOID PsfDisablePcieRootPort ( IN UINT32 RpIndex ); /** Program PSF grant counts for SATA Call this before SATA ports are accessed for enumeration **/ VOID PsfConfigureSataGrantCounts ( VOID ); typedef enum { PsfPcieCtrl4x1, PsfPcieCtrl1x2_2x1, PsfPcieCtrl2x2, PsfPcieCtrl1x4 } PSF_PCIE_CTRL_CONFIG; /** Program PSF grant counts for PCI express depending on controllers configuration @param[in] PsfPcieCtrlConfigTable Table with PCIe controllers configuration @param[in] NumberOfPcieControllers Number of PCIe controllers. This is also the size of PsfPcieCtrlConfig table **/ VOID PsfConfigurePcieGrantCounts ( IN PSF_PCIE_CTRL_CONFIG *PsfPcieCtrlConfigTable, IN UINT32 NumberOfPcieControllers ); /** Program PSF EOI Multicast configuration for ITSS **/ VOID PsfConfigurEoiForItss ( VOID ); /** This function enables EOI message forwarding in PSF for PCIe ports for cases where IOAPIC is present behind this root port. @param[in] RpIndex Root port index (0 based) @retval Status **/ EFI_STATUS PsfConfigurEoiForPciePort ( IN UINT32 RpIndex ); // // Structure for PSF Port Destination ID // typedef union { UINT32 RegVal; struct { UINT32 ChannelId : 8; // Channel ID UINT32 PortId : 7; // Port ID UINT32 PortGroupId : 1; // Port Group ID UINT32 PsfId : 8; // PSF ID UINT32 Rsvd : 7; // Reserved UINT32 ChanMap : 1; // Channel map } Fields; } PSF_PORT_DEST_ID; /** PCIe PSF port destination ID (psf_id:port_group_id:port_id:channel_id) @param[in] RpIndex PCIe Root Port Index (0 based) @retval Destination ID **/ PSF_PORT_DEST_ID PsfPcieDestinationId ( IN UINT32 RpIndex ); /** PSF early initialization. **/ VOID PsfEarlyInit ( VOID ); /** Assign new function number for PCIe Port Number. @param[in] RpIndex PCIe Root Port Index (0 based) @param[in] NewFunction New Function number **/ VOID PsfSetPcieFunction ( IN UINT32 RpIndex, IN UINT32 NewFunction ); /** This function enables PCIe Relaxed Order in PSF **/ VOID PsfEnablePcieRelaxedOrder ( VOID ); /** Configure PSF power management. Must be called after all PSF configuration is completed. **/ VOID PsfConfigurePowerManagement ( VOID ); /** Enable VTd support in PSF. **/ VOID PchPsfEnableVtd ( VOID ); /** Disable PSF address-based peer-to-peer decoding. **/ VOID PchPsfDisableP2pDecoding ( VOID ); /** Perform registers programming required for Management Component Transport Protocol Broadcast Cycle. Agent Destination Addresses are being programmed only when adequate PCIe root port controllers are function enabled. Function sets CSME PMT as a message broadcaster and programs the targets of the message in registers only if adequate PCIe root port controllers are function enabled. Conditionally, if the CPU PEG exist and is function enabled, DMI is also a target. **/ VOID PsfConfigureMctpCycle ( VOID ); /** This procedure will hide PMC device at PSF level **/ VOID PsfHidePmcDevice ( VOID ); /** This procedure will disable D3:F0 device at PSF level for PCH-LP **/ VOID PsfDisableD3F0 ( VOID ); /** This procedure will disable PSF upstream completion tracking for HDAudio on PCH-LP **/ VOID PsfDisableUpstreamCompletionTrackingForHda ( VOID ); #endif // _PCH_PSF_PRIVATE_LIB_H_