/** @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