/** @file
PCH PCIe Bifurcation Update Library Header File.
@copyright
Copyright 2017 - 2021 Intel Corporation.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _UBA_PCIE_BIFURCATION_UPDATE_LIB_H
#define _UBA_PCIE_BIFURCATION_UPDATE_LIB_H
#include
#include
#include
#define PLATFORM_PCH_PCIE_BIFURCATION_UPDATE_SIGNATURE SIGNATURE_32 ('P', 'P', 'C', 'I')
#define PLATFORM_PCH_PCIE_BIFURCATION_UPDATE_VERSION 01
typedef struct {
UINT8 PortIndex;
UINT16 SlotNumber; // 0xff if slot not implemented , Slot number if slot implemented
BOOLEAN InterLockPresent; // Yes / No
UINT8 SlotPowerLimitScale;
UINT8 SlotPowerLimitValue;
BOOLEAN HotPlugCapable; // Yes / No
UINT8 VppPort; // 0xff if Vpp not enabled
UINT8 VppAddress;
BOOLEAN PcieSSDCapable; // Yes / No
UINT8 PcieSSDVppPort; // 0xff if Vpp not enabled
UINT8 PcieSSDVppAddress; // 0xff if Vpp not enabled
BOOLEAN Hidden; // deprecate this as it should be purely based on bifurcation
BOOLEAN CommonClock; // Yes / No - whether the both side of the link are in same clock domain or not
BOOLEAN UplinkPortConnected; // Yes / No - indicate the PCIe RP is connected to Uplink port of another chip
BOOLEAN RetimerConnected; // Yes / No - BIOS would have overhead to bifurcate the retimers explicitly
UINT8 RetimerSMBusAddress; // SNBus address to read the retimer status and bifurcate if required
BOOLEAN ExtensionCardSupport; // Yes / No, any PCIe Port extension card which are supported in board thro' SMBus address (typically BW5)
UINT8 ExtnCardSMBusPort; //SMBus Port for the PCIe extension card - use to dynamically determine PCIe bifurcation
UINT8 ExtnCardSMBusAddress; //SNBus address for the PCIe extension card - use to dynamically determine PCIe bifurcation
BOOLEAN ExtnCardRetimerSupport; //yes - retimer on this PCIe extension card (BW5), or No
UINT8 ExtnCardRetimerSMBusAddress; // SNBus address to read the retimer status and bifurcate if required
BOOLEAN ExtnCardHotPlugCapable; // yes / No, independent of board, indicates slot in which this PCIe extn. Card is mounted
UINT8 ExtnCardHPVppPort; // 0xff if VPP not enabled
UINT8 ExtnCardHPVppAddress; // 0xff if VPP not enabled
UINT8 RetimerConnectCount; // number of Retimers (1 or 2) intercepted between the PCIe port and the slot device. Retimer may appear mutually exclusive.
} PCH_SLOT_CONFIG_DATA_ENTRY_EX;
// {187576ac-fec1-41bf-91f6-7d1ace7f2bee}
#define PLATFORM_UBA_PCIE_BIFURCATION_GUID \
{ 0x187576ac, 0xfec1, 0x41bf, { 0x91, 0xf6, 0x7d, 0x1a, 0xce, 0x7f, 0x2b, 0xee } }
typedef
EFI_STATUS
(*PCIE_BIFURCATION_UPDATE_CALLBACK) (
IN OUT PCIE_BIFURCATION_CONFIG **PchPcieBifurcationConfig,
IN OUT PCH_SLOT_CONFIG_DATA_ENTRY_EX **PchSlotConfig
);
typedef struct _PLATFORM_PCH_PCIE_BIFURCATION_UPDATE_TABLE{
UINT32 Signature;
UINT32 Version;
PCIE_BIFURCATION_UPDATE_CALLBACK CallPcieBifurcationUpdate;
} PLATFORM_PCH_PCIE_BIFURCATION_UPDATE_TABLE;
#define ENABLE 1
#define DISABLE 0
#define NO_SLT_IMP 0xFF
#define SLT_IMP 1
#define HIDE 1
#define NOT_HIDE 0
#define VPP_PORT_0 0
#define VPP_PORT_1 1
#define VPP_PORT_MAX 0xFF
#define VPP_ADDR_MAX 0xFF
#define PWR_VAL_MAX 0xFF
#define PWR_SCL_MAX 0xFF
#define SMB_ADDR_MAX 0xFF
#define NO_BIF_INPUT 0xFF
#define PORT_0_INDEX 0
#define PORT_1_INDEX 1
#define PORT_2_INDEX 2
#define PORT_3_INDEX 3
#define PORT_4_INDEX 4
#define PORT_5_INDEX 5
#define PORT_6_INDEX 6
#define PORT_7_INDEX 7
#define PORT_8_INDEX 8
#define PORT_9_INDEX 9
#define PORT_10_INDEX 10
#define PORT_11_INDEX 11
#define PORT_12_INDEX 12
#define PORT_13_INDEX 13
#define PORT_14_INDEX 14
#define PORT_15_INDEX 15
#define PORT_16_INDEX 16 // Added dummy ports(16-27) TODO_FHF
#define PORT_17_INDEX 17
#define PORT_18_INDEX 18
#define PORT_19_INDEX 19
#define PORT_20_INDEX 20
#define PORT_21_INDEX 21
#define PORT_22_INDEX 22
#define PORT_23_INDEX 23
#define PORT_24_INDEX 24
#define PORT_25_INDEX 25
#define PORT_26_INDEX 26
#define PORT_27_INDEX 27
//-----------------------------------------------------------------------------------
// PCIE port index for SKX
//------------------------------------------------------------------------------------
#define SOCKET_0_INDEX 0
#define SOCKET_1_INDEX 21
#define SOCKET_2_INDEX 42
#define SOCKET_3_INDEX 63
#define SOCKET_4_INDEX 84
#define SOCKET_5_INDEX 105
#define SOCKET_6_INDEX 126
#define SOCKET_7_INDEX 147
EFI_STATUS
PlatformGetPchPcieBifurcationConfig (
IN OUT PCIE_BIFURCATION_CONFIG **PchPcieBifurcationConfig,
IN OUT PCH_SLOT_CONFIG_DATA_ENTRY_EX **PchSlotConfig
);
STATIC EFI_GUID gPlatformUbaPcieBifurcationGuid = PLATFORM_UBA_PCIE_BIFURCATION_GUID;
#endif //_UBA_PCIE_BIFURCATION_UPDATE_LIB_H