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