/** @file
Header file for PchPsfPrivateLib.
Copyright (c) 2021, 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
typedef struct {
UINT32 Id;
PCH_SBI_PID SbPid;
} PSF_SEGMENT;
/**
Get list of supported PSF segments.
@param[out] PsfTable Array of supported PSF segments
@param[out] PsfTableLength Length of PsfTable
**/
VOID
PsfSegments (
OUT PSF_SEGMENT **PsfTable,
OUT UINT32 *PsfTableLength
);
//
// 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
);
/**
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 Dsp bar at PSF level
**/
VOID
PsfDisableDspBar (
VOID
);
/**
Disable THC device at PSF level
@param[in] ThcNumber Touch Host Controller Number THC0 or THC1
**/
VOID
PsfDisableThcDevice (
IN UINT32 ThcNumber
);
/**
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 FPAK device at PSF level
**/
VOID
PsfDisableFpakDevice (
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
);
/**
Specifies the root port configuration of the
PCIe controller. The number on the left of x
signifies the number of root ports in the controller
while value on the right is link width. N stands for
the number of PCIe lanes per root port instance.
**/
typedef enum {
PsfPcieCtrl4xn,
PsfPcieCtrl1x2n_2xn,
PsfPcieCtrl2xn_1x2n,
PsfPcieCtrl2x2n,
PsfPcieCtrl1x4n,
PsfPcieCtrlUndefined
} 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
);
/**
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
);
/**
Enable VTd support in PSF.
**/
VOID
PchPsfEnableVtd (
VOID
);
/**
Disable PSF address-based peer-to-peer decoding.
**/
VOID
PchPsfDisableP2pDecoding (
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_