/** @file
Copyright (c) 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _IIO_PLATFORM_DATA_H_
#define _IIO_PLATFORM_DATA_H_
#include
#include
#include
#include
#ifndef MINIBIOS_BUILD
#ifndef IA32
#include
#include
#include
#define IIO_CPU_CSR_ACCESS EFI_CPU_CSR_ACCESS_PROTOCOL
#endif
#endif
#define IIO_HANDLE VOID *
#define IIO_STATUS UINT32
typedef struct {
UINT8 Register;
UINT8 Function;
UINT8 Device;
UINT8 Bus;
UINT32 ExtendedRegister;
} PCI_ROOT_BRIDGE_PCI_ADDRESS;
typedef enum {
DmiTypeVc0,
DmiTypeVc1,
DmiTypeVcm,
MaxDmiVcType
} DMI_VC_TYPE;
typedef enum {
IioDmiTc0,
IioDmiTc1,
IioDmiTc2,
IioDmiTc3,
IioDmiTc4,
IioDmiTc5,
IioDmiTc6,
IioDmiTc7,
IioMaxDmiTc
} IIO_DMI_TC;
typedef enum {
IIOInitPhase1 = 1,
IIOInitPhase2 = 2,
IIOInitPhase3 = 4,
} IIO_INIT_PHASE;
typedef enum {
IioBeforeBifurcation, // Point before IOU Bi-fucuation and link training, no generic inbound access at this point
IioAfterBifurcation, // Point immediately after IOU bifurcation and link training but before any PCIe root port initialization
IioPortEnumeration, // Point before Port initialization, no generic inbound access at this point
IioPortEnumProgramMISCCTRL, // Inside IioPortInit.PcieSlotInit
IioEnumEnd,
IioVtDPreEn,
IioVtDInit,
IioVtDEn, // At this point it has been decided to enable VtD through setup IioVtdInit.VtdInitialization
IioPostInitEnd, // this is the last stage of IIO PCIe port init
IioBeforeResources, // At this point IIO Ports configuration has been completed
IioAfterResources, // At this point PCIe Resources allocation has been completed
IioReadyToBoot
} IIO_INIT_ENUMERATION;
extern const CHAR* IioPortLabel[];
#define IIO_PORT_LABEL(x) ( ((x) < NUMBER_PORTS_PER_SOCKET) ? (IioPortLabel[(x)]) : IioPortLabel[NUMBER_PORTS_PER_SOCKET] )
#pragma pack(1)
typedef union{
struct{
UINT32 Value;
UINT32 ValueHigh;
}Address32bit;
UINT64 Address64bit;
}IIO_PTR_ADDRESS;
typedef struct {
UINT32 Device;
UINT32 Function;
UINT32 RegOffset;
UINT32 AndMask;
UINT32 OrMask;
} PCI_OP_STRUCT;
typedef struct {
UINT32 Instance;
UINT32 RegOffset;
UINT32 AndMask;
UINT32 OrMask;
} CSR_ACCESS_OP_STRUCT;
typedef struct {
UINT8 Isoc;
UINT32 meRequestedSize;
UINT8 Vc1_pri_en;
UINT8 Isoc_Enable;
} ISOC_VC_TABLE_STRUCT;
/*
* Following are the data structure defined to support multiple CBDMA types on a system
*/
typedef struct{
UINT32 DcaSupported : 1;
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 union {
struct {
UINT32 Dev0 : 1;
UINT32 Dev1 : 1;
UINT32 Dev2 : 1;
UINT32 Dev3 : 1;
UINT32 Dev4 : 1;
UINT32 Dev5 : 1;
UINT32 Dev6 : 1;
UINT32 Dev7 : 1;
UINT32 Dev8 : 1;
UINT32 Dev9 : 1;
UINT32 Dev10 : 1;
UINT32 Dev11 : 1;
UINT32 Dev12 : 1;
UINT32 Dev13 : 1;
UINT32 Dev14 : 1;
UINT32 Dev15 : 1;
UINT32 Dev16 : 1;
UINT32 Dev17 : 1;
UINT32 Dev18 : 1;
UINT32 Dev19 : 1;
UINT32 Dev20 : 1;
UINT32 Dev21 : 1;
UINT32 Dev22 : 1;
UINT32 Dev23 : 1;
UINT32 Dev24 : 1;
UINT32 Dev25 : 1;
UINT32 Dev26 : 1;
UINT32 Dev27 : 1;
UINT32 Dev28 : 1;
UINT32 Dev29 : 1;
UINT32 Dev30 : 1;
UINT32 Dev31 : 1;
} Bits;
UINT32 Data;
} DEVHIDE_FIELD;
typedef struct{
UINT32 DevToHide[NUM_DEVHIDE_REGS];
} IIO_DEVFUNHIDE;
typedef struct{
IIO_DEVFUNHIDE IioStackDevHide[MAX_IIO_STACK];
}IIO_DEVFUNHIDE_TABLE;
typedef struct {
UINT8 CpuType;
UINT8 CpuStepping;
UINT8 CpuSubType;
UINT8 SystemRasType;
UINT8 IsocEnable;
UINT8 EVMode;
UINT32 meRequestedSize;
UINT8 DmiVc[MaxDmiVcType];
UINT8 DmiVcId[MaxDmiVcType];
DMI_VC_TYPE DmiTc[IioMaxDmiTc];
UINT8 PlatformType;
UINT8 IOxAPICCallbackBootEvent;
UINT8 RasOperation;
UINT8 SocketUnderOnline;
UINT8 CompletedReadyToBootEventServices;
UINT8 SocketPresent[MaxIIO];
UINT8 SocketBaseBusNumber[MaxIIO];
UINT8 SocketLimitBusNumber[MaxIIO];
UINT8 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];
UINT8 SocketPortBusNumber[MaxIIO][NUMBER_PORTS_PER_SOCKET];
UINT8 StackPerPort[MaxIIO][NUMBER_PORTS_PER_SOCKET];
UINT8 SocketUncoreBusNumber[MaxIIO];
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;
UINT32 PchSegRegBaseAddress;
UINT8 PcieRiser1Type;
UINT8 PcieRiser2Type;
UINT8 DmiVc1;
UINT8 DmiVcm;
UINT8 Emulation;
UINT8 SkuPersonality[MAX_SOCKET];
UINT8 VMDStackEnable[MaxIIO][MAX_IIO_STACK];
UINT8 IODC;
UINT8 MultiPch;
UINT8 FpgaActive[MaxIIO];
} 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 RtoDevice;
UINT8 RtoFunction;
UINT8 RtoClusterDevice;
UINT8 RtoClusterFunction;
UINT8 RtoReutLinkSel;
UINT8 SuperClusterPort;
} 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];
UINT8 LinkedPXPMap[MaxIIO*NUMBER_PORTS_PER_SOCKET];
UINT8 SpeedPXPMap[MaxIIO*NUMBER_PORTS_PER_SOCKET];
UINT8 LaneReversedPXPMap[MaxIIO*NUMBER_PORTS_PER_SOCKET];
UINT8 PciePortMaxWidth[MaxIIO*NUMBER_PORTS_PER_SOCKET];
UINT8 PciePortNegWidth[MaxIIO*NUMBER_PORTS_PER_SOCKET];
UINT8 PciePortNegSpeed[MaxIIO*NUMBER_PORTS_PER_SOCKET];
IIO_PTR_ADDRESS PtrAddress;
IIO_PTR_ADDRESS PtrPcieTopology;
UINT64 McastRsvdMemory;
DMA_HOST DMAhost[MaxIIO];
UINT8 resetRequired;
} 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_