/** @file This file provides required platform data structure for IOH. @copyright Copyright 1999 - 2021 Intel Corporation.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _IIO_PLATFORM_DATA_H_ #define _IIO_PLATFORM_DATA_H_ #include #include #include typedef enum { DmiTypeVc0, DmiTypeVc1, DmiTypeVcm, MaxDmiVcType } DMI_VC_TYPE; typedef enum { DmiTypeTc0, DmiTypeTc1, DmiTypeTc2, DmiTypeTc3, DmiTypeTc4, DmiTypeTc5, DmiTypeTc6, DmiTypeTc7, MaxDmiTcType }DMI_TC_TYPE; #pragma pack(1) typedef union { struct { UINT32 Value; UINT32 ValueHigh; } Address32bit; UINT64 Address64bit; } IIO_PTR_ADDRESS; /* * Following are the data structure defined to support multiple CBDMA types on a system */ typedef struct { UINT32 NoSnoopSupported : 1; UINT32 RelaxOrderSupported : 1; } CB_CONFIG_CAPABILITY; typedef struct { UINT8 CB_VER; UINT8 BusNo; UINT8 DevNo; UINT8 FunNo; UINT8 MaxNoChannels; CB_CONFIG_CAPABILITY CBConfigCap; } CBDMA_CONTROLLER; typedef struct { CBDMA_CONTROLLER CbDmaDevice; } DMA_HOST; // <<<< end of CBDMA data structures >>>> typedef struct { UINT8 LinkWidth; UINT8 LinkSpeed; } IIO_DMI_DATA; typedef struct { UINT8 SystemRasType; BOOLEAN IsocEnable; UINT8 EVMode; UINT32 meRequestedSize; UINT32 ieRequestedSize; UINT8 DmiVc[MaxDmiVcType]; UINT8 DmiVcId[MaxDmiVcType]; UINT8 DmiTc[MaxDmiTcType]; UINT8 PlatformType; UINT8 IOxAPICCallbackBootEvent; UINT8 RasOperation; UINT8 SocketUnderOnline; UINT8 CompletedReadyToBootEventServices; UINT8 SocketPresent[MaxIIO]; UINT8 SocketBaseBusNumber[MaxIIO]; UINT8 SocketLimitBusNumber[MaxIIO]; UINT32 StackPresentBitmap[MaxIIO]; UINT64_STRUCT SegMmcfgBase[MaxIIO]; UINT8 SegmentSocket[MaxIIO]; UINT8 SocketStackPersonality[MaxIIO][MAX_IIO_STACK]; UINT8 SocketStackBus[MaxIIO][MAX_IIO_STACK]; UINT8 SocketStackBaseBusNumber[MaxIIO][MAX_IIO_STACK]; UINT8 SocketStackLimitBusNumber[MaxIIO][MAX_IIO_STACK]; UINT32 SocketStackMmiolBase[MaxIIO][MAX_IIO_STACK]; UINT32 SocketStackMmiolLimit[MaxIIO][MAX_IIO_STACK]; UINT8 SocketPortBusNumber[MaxIIO][NUMBER_PORTS_PER_SOCKET]; UINT8 StackPerPort[MaxIIO][NUMBER_PORTS_PER_SOCKET]; UINT8 SocketUncoreBusNumber[MaxIIO][MAX_UNCORE_STACK]; // 10nm only UINT32 PchIoApicBase; UINT32 PciResourceMem32Base[MaxIIO]; UINT32 PciResourceMem32Limit[MaxIIO]; UINT8 Pci64BitResourceAllocation; UINT32 StackPciResourceMem32Limit[MaxIIO][MAX_IIO_STACK]; UINT32 VtdBarAddress[MaxIIO][MAX_IIO_STACK]; UINT32 IoApicBase[MaxIIO][MAX_IIO_STACK]; UINT32 RcBaseAddress; UINT64 PciExpressBase; UINT32 PmBase[MaxIIO]; UINT32 PchSegRegBaseAddress[MaxIIO]; UINT8 PcieRiser1Type; UINT8 PcieRiser2Type; UINT8 DmiVc1; UINT8 DmiVcm; UINT8 Emulation; UINT8 SkuPersonality[MAX_SOCKET]; UINT8 StackPersonality[MaxIIO][MAX_IIO_STACK]; UINT8 StackId[MaxIIO][MAX_IIO_STACK]; UINT8 VMDStackEnable[MaxIIO][MAX_IIO_STACK]; UINT8 IODC; UINT8 MultiPch; UINT8 FpgaActive[MaxIIO]; UINT32 TraceHubMemBase; UINT8 DmiSocketMap; IIO_DMI_DATA DmiSocketData[MAX_SOCKET]; UINT64 PciTrainingStartTime; // time in microseconds } IIO_V_DATA; typedef struct { UINT8 Device; UINT8 Function; } IIO_PORT_INFO; typedef struct { UINT8 Valid; UINT8 IioUplinkPortIndex; //defines platform specific uplink port index (if any else FF) IIO_PORT_INFO UplinkPortInfo; } IIO_UPLINK_PORT_INFO; typedef struct _INTEL_IIO_PORT_INFO { UINT8 Device; UINT8 Function; UINT8 Reserved137; UINT8 Reserved138; UINT8 Reserved139; UINT8 Reserved140; UINT8 Reserved141; UINT8 SuperClusterPort; UINT8 NtbDevice; UINT8 NtbFunction; } INTEL_IIO_PORT_INFO; typedef struct _INTEL_DMI_PCIE_INFO { INTEL_IIO_PORT_INFO PortInfo[NUMBER_PORTS_PER_SOCKET]; } INTEL_DMI_PCIE_INFO; typedef struct _INTEL_IIO_PRELINK_DATA { INTEL_DMI_PCIE_INFO PcieInfo; IIO_UPLINK_PORT_INFO UplinkInfo[MaxIIO]; } INTEL_IIO_PRELINK_DATA; typedef struct { UINT8 PciePortPresent[MaxIIO*NUMBER_PORTS_PER_SOCKET]; UINT8 PciePortConfig[MaxIIO*NUMBER_PORTS_PER_SOCKET]; UINT8 PciePortOwnership[MaxIIO*NUMBER_PORTS_PER_SOCKET]; UINT8 CurrentPXPMap[MaxIIO*NUMBER_PORTS_PER_SOCKET]; UINT8 MaxPXPMap[MaxIIO * NUMBER_PORTS_PER_SOCKET]; // Max link width BOOLEAN LaneReversedPXPMap[MaxIIO][MAX_IOU_PER_SOCKET]; UINT8 PciePortMaxWidth[MaxIIO*NUMBER_PORTS_PER_SOCKET]; UINT8 PciePortNegWidth[MaxIIO*NUMBER_PORTS_PER_SOCKET]; UINT8 PciePortNegSpeed[MaxIIO*NUMBER_PORTS_PER_SOCKET]; UINT8 RetimerConnectCount[MaxIIO*NUMBER_PORTS_PER_SOCKET]; IIO_PTR_ADDRESS PtrAddress; IIO_PTR_ADDRESS PtrPcieTopology; UINT64 McastRsvdMemory; DMA_HOST DMAhost[MaxIIO]; UINT8 resetRequired; UINT8 MaxPciePortNumberPerSocket[MaxIIO]; // // IsSocketSmbEnabled and TimeoutOnVppOccured are needed only as a WA for SMB issue in socket // BOOLEAN IsSocketSmbEnabled[MaxIIO]; // contains TRUE if socket smb controller was enabled for given IIO (socket) BOOLEAN TimeoutOnVppOccurred[MaxIIO]; // contains TRUE if there was a timeout after VPP programming } IIO_OUT_DATA; typedef struct { IIO_V_DATA IioVData; INTEL_IIO_PRELINK_DATA PreLinkData; IIO_OUT_DATA IioOutData; } IIO_VAR; typedef struct { IIO_CONFIG SetupData; IIO_VAR IioVar; } IIO_GLOBALS; #pragma pack() #endif //_IIO_PLATFORM_DATA_H_