#ifndef __TDTYPES_H__
#define __TDTYPES_H__
#include <dev/pms/freebsd/driver/common/osenv.h>
#include <dev/pms/freebsd/driver/common/ostypes.h>
#include <dev/pms/freebsd/driver/common/osdebug.h>
#include <dev/pms/RefTisa/sallsdk/api/sa.h>
#include <dev/pms/RefTisa/sallsdk/api/saapi.h>
#include <dev/pms/RefTisa/sallsdk/api/saosapi.h>
#ifdef FDS_SM
#include <dev/pms/RefTisa/sat/api/sm.h>
#include <dev/pms/RefTisa/sat/src/smtypes.h>
#endif
#ifdef FDS_DM
#include <dev/pms/RefTisa/discovery/api/dm.h>
#endif
#include <dev/pms/RefTisa/tisa/sassata/common/tddefs.h>
#include <dev/pms/RefTisa/tisa/sassata/common/tdlist.h>
#include <dev/pms/RefTisa/tisa/api/tiscsi.h>
typedef void (*tdssSSPReqReceived_t) (
agsaRoot_t *,
agsaDevHandle_t *,
agsaFrameHandle_t,
bit32,
bit32,
bit32
);
typedef void (*tdssSMPReqReceived_t) (
agsaRoot_t *,
agsaDevHandle_t *,
agsaSMPFrameHeader_t *,
agsaFrameHandle_t,
bit32,
bit32
);
typedef bit32 (*tdssGetSGLChunk_t) (agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agChunkOffset,
bit32 *agChunkUpper32,
bit32 *agChunkLower32,
bit32 *agChunkLen);
typedef void (*tdssIOCompleted_t) (agsaRoot_t *,
agsaIORequest_t *,
bit32,
bit32,
agsaFrameHandle_t,
bit32);
typedef void (*tdssSMPCompleted_t) (
agsaRoot_t *,
agsaIORequest_t *,
bit32 ,
bit32 ,
agsaFrameHandle_t
);
typedef struct tdsaJumpTable_s {
tdssSSPReqReceived_t pSSPReqReceived;
tdssSMPReqReceived_t pSMPReqReceived;
tdssIOCompleted_t pSSPIOCompleted;
tdssSMPCompleted_t pSMPCompleted;
tdssGetSGLChunk_t pGetSGLChunk;
} tdsaJumpTable_t;
typedef void (*tdsaTimerCBFunc_t)(tiRoot_t *tiRoot, void *timerData1, void *timerData2, void *timerData3);
typedef struct tdsaTimerRequest_s {
bit32 timeout;
void *timerData1;
void *timerData2;
void *timerData3;
tdsaTimerCBFunc_t timerCBFunc;
tdList_t timerLink;
bit32 timerRunning;
} tdsaTimerRequest_t;
typedef struct tdssIORequestData_s {
tdsaJumpTable_t *pJumpTable;
} tdssIORequestData_t;
typedef struct tdsaRootOsData_s {
tiRoot_t *tiRoot;
void *tdsaAllShared;
void *itdsaIni;
void *ttdsaTgt;
void *tdstHost;
void *tdstDevice;
agBOOLEAN IntContext;
} tdsaRootOsData_t;
typedef struct tdssPortFlags_s {
agBOOLEAN portStarted;
agBOOLEAN portInitialized;
agBOOLEAN portReadyForDiscoverySent;
agBOOLEAN portStoppedByOSLayer;
agBOOLEAN failPortInit;
agBOOLEAN pseudoPortInitDone;
agBOOLEAN pseudoPortStartDone;
} tdssPortFlags_t;
typedef struct tdsaComMemFlags_s {
agBOOLEAN sysIntsActive;
agBOOLEAN resetInProgress;
agBOOLEAN resetFailed;
} tdsaComMemFlags_t;
typedef struct satInternalIo_s
{
tdList_t satIntIoLink;
tiIORequest_t satIntTiIORequest;
void *satIntRequestBody;
tiScsiInitiatorRequest_t satIntTiScsiXchg;
tiMem_t satIntDmaMem;
tiMem_t satIntReqBodyMem;
bit32 satIntFlag;
tiIORequest_t *satOrgTiIORequest;
bit32 id;
} satInternalIo_t;
#define SAT_NONNCQ_MAX 1
#define SAT_NCQ_MAX 32
#define SAT_MAX_INT_IO 16
typedef struct TDSASAddressID_s
{
bit32 sasAddressLo;
bit32 sasAddressHi;
bit8 phyIdentifier;
} TDSASAddressID_t;
struct tdsaExpander_s;
typedef struct tdsaDiscovery_s
{
tdList_t discoveringExpanderList;
tdList_t UpdiscoveringExpanderList;
bit32 status;
TDSASAddressID_t sasAddressIDDiscoverError;
agsaSATAIdentifyData_t *pSataIdentifyData;
struct tdsaExpander_s *RootExp;
bit32 NumOfUpExp;
bit32 type;
bit32 retries;
bit32 configureRouteRetries;
bit32 deviceRetistrationRetries;
tdsaTimerRequest_t discoveryTimer;
tdsaTimerRequest_t configureRouteTimer;
tdsaTimerRequest_t deviceRegistrationTimer;
tdsaTimerRequest_t BCTimer;
smpRespDiscover_t SMPDiscoverResp;
bit32 pendingSMP;
bit32 SeenBC;
bit32 forcedOK;
tdsaTimerRequest_t SMPBusyTimer;
bit32 SMPRetries;
bit32 ResetTriggerred;
tdsaTimerRequest_t DiscoverySMPTimer;
} tdsaDiscovery_t;
typedef struct
{
tdList_t satIoLinkList;
tdList_t satFreeIntIoLinkList;
tdList_t satActiveIntIoLinkList;
satInternalIo_t satIntIo[SAT_MAX_INT_IO];
agsaSATAIdentifyData_t satIdentifyData;
bit8 SN_id_limit[25];
bit32 satNCQ;
bit32 sat48BitSupport;
bit32 satSMARTSelfTest;
bit32 satSMARTFeatureSet;
bit32 satSMARTEnabled;
bit32 satRemovableMedia;
bit32 satRemovableMediaEnabled;
bit32 satDMASupport;
bit32 satDMAEnabled;
bit32 satDMADIRSupport;
bit32 satWWNSupport;
bit32 satPendingIO;
bit32 satPendingNCQIO;
bit32 satPendingNONNCQIO;
bit32 satNCQMaxIO;
bit32 satDriveState;
bit32 satAbortAfterReset;
bit32 satAbortCalled;
bit32 satVerifyState;
bit32 satMaxUserAddrSectors;
bit32 satWriteCacheEnabled;
bit32 satLookAheadEnabled;
bit32 satDeviceFaultState;
bit32 satStopState;
bit32 satFormatState;
bit32 satPMField;
bit8 satSignature[8];
bit32 satDeviceType;
bit32 satSectorDone;
bit32 freeSATAFDMATagBitmap;
bit32 IDDeviceValid;
bit8 satMaxLBA[8];
bit32 satBGPendingDiag;
bit32 NumOfFCA;
bit32 NumOfIDRetries;
tiIORequest_t *satTmTaskTag;
void *satSaDeviceData;
bit32 ID_Retries;
bit32 IDPending;
} satDeviceData_t;
typedef struct tdsaDeviceData_s {
tdsaJumpTable_t *pJumpTable;
tiDeviceHandle_t tiDeviceHandle;
tdList_t FreeLink;
tdList_t MainLink;
tdList_t IncDisLink;
bit32 id;
bit32 InQID;
bit32 OutQID;
bit8 DeviceType;
agsaRoot_t *agRoot;
agsaDevHandle_t *agDevHandle;
TDSASAddressID_t SASAddressID;
bit8 initiator_ssp_stp_smp;
bit8 target_ssp_stp_smp;
bit8 numOfPhys;
satDeviceData_t satDevData;
struct tdsaPortContext_s *tdPortContext;
bit8 valid;
bit8 valid2;
bit8 processed;
#ifdef AGTIAPI_CTL
bit8 discovered;
#endif
agsaDeviceInfo_t agDeviceInfo;
agsaContext_t agContext;
struct tdsaExpander_s *tdExpander;
struct tdsaDeviceData_s *ExpDevice;
bit8 phyID;
agsaSASIdentify_t sasIdentify;
bit8 connectionRate;
bit8 registered;
bit8 directlyAttached;
bit8 SASSpecDeviceType;
bit32 IOStart;
bit32 IOResponse;
agsaContext_t agDeviceResetContext;
tiIORequest_t TransportRecoveryIO;
bit32 TRflag;
bit32 ResetCnt;
tdsaTimerRequest_t SATAIDDeviceTimer;
bit32 OSAbortAll;
#ifdef FDS_DM
bit32 devMCN;
bit32 finalMCN;
#endif
#ifdef FDS_SM
smDeviceHandle_t smDeviceHandle;
bit32 SMNumOfFCA;
bit32 SMNumOfID;
tdsaTimerRequest_t tdIDTimer;
#endif
} tdsaDeviceData_t;
typedef struct tdsaSASSubID_s
{
bit32 sasAddressHi;
bit32 sasAddressLo;
bit8 initiator_ssp_stp_smp;
bit8 target_ssp_stp_smp;
} tdsaSASSubID_t;
struct tdsaDeviceData_s;
typedef struct tdsaPortContext_s
{
bit32 Count;
bit32 DiscoveryState;
bit32 discoveryOptions;
bit32 DiscoveryRdyGiven;
bit32 SeenLinkUp;
bit32 numAvailableTargets;
bit32 osInitiatedDiscovery;
bit32 id;
tdList_t FreeLink;
tdList_t MainLink;
bit32 sasRemoteAddressHi;
bit32 sasRemoteAddressLo;
agsaSASIdentify_t sasIDframe;
bit32 sasLocalAddressHi;
bit32 sasLocalAddressLo;
bit8 PhyIDList[TD_MAX_NUM_PHYS];
tiPortalContext_t *tiPortalContext;
agsaRoot_t *agRoot;
agsaPortContext_t *agPortContext;
bit8 nativeSATAMode;
bit8 remoteSignature[8];
bit8 directAttatchedSAS;
tdsaDiscovery_t discovery;
bit32 valid;
bit8 LinkRate;
bit32 RegisteredDevNums;
bit32 eventPhyID;
bit32 Transient;
agsaContext_t agContext;
bit32 PortRecoverPhyID;
bit32 DiscFailNSeenBC;
bit8 remoteName[68];
#ifdef FDS_DM
dmPortContext_t dmPortContext;
bit32 DMDiscoveryState;
bit32 UseDM;
bit32 UpdateMCN;
#endif
} tdsaPortContext_t;
typedef struct tdsaPortStartInfo_s {
tiPortalContext_t *tiPortalContext;
tdsaPortContext_t *portContext;
agsaSASIdentify_t SASID;
tdssPortFlags_t flags;
agsaPhyConfig_t agPhyConfig;
} tdsaPortStartInfo_t;
#define REPORT_LUN_LEN 16
#define REPORT_LUN_OPCODE 0xa0
typedef struct tdDeviceLUNInfo_s
{
unsigned long tiDeviceHandle;
bit32 numOfLun;
}tdDeviceLUNInfoIOCTL_t;
typedef struct tdsaExpander_s
{
tdList_t linkNode;
tdList_t upNode;
tdsaDeviceData_t *tdDevice;
struct tdsaExpander_s *tdUpStreamExpander;
bit8 hasUpStreamDevice;
bit8 discoveringPhyId;
bit16 routingIndex;
bit16 currentIndex[TD_MAX_EXPANDER_PHYS];
tdsaDeviceData_t *tdDeviceToProcess;
bit32 configSASAddressHi;
bit32 configSASAddressLo;
struct tdsaExpander_s *tdCurrentDownStreamExpander;
bit8 upStreamPhys[TD_MAX_EXPANDER_PHYS];
bit16 numOfUpStreamPhys;
bit16 currentUpStreamPhyIndex;
bit32 upStreamSASAddressHi;
bit32 upStreamSASAddressLo;
bit32 underDiscovering;
bit32 configRouteTable: 1;
bit32 configuring: 1;
bit32 configReserved: 30;
bit32 id;
struct tdsaExpander_s *tdReturnginExpander;
bit8 downStreamPhys[TD_MAX_EXPANDER_PHYS];
bit16 numOfDownStreamPhys;
bit16 currentDownStreamPhyIndex;
bit32 discoverSMPAllowed;
bit8 routingAttribute[TD_MAX_EXPANDER_PHYS];
bit32 configSASAddressHiTable[DEFAULT_MAX_DEV];
bit32 configSASAddressLoTable[DEFAULT_MAX_DEV];
bit32 configSASAddrTableIndex;
} tdsaExpander_t;
typedef void (*satCompleteCbPtr_t )(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle,
void *satIOContext
);
typedef struct satIOContext_s
{
tdList_t satIoContextLink;
satDeviceData_t *pSatDevData;
agsaFisRegHostToDevice_t *pFis;
tiIniScsiCmnd_t *pScsiCmnd;
scsiRspSense_t *pSense;
tiSenseData_t *pTiSenseData;
void *tiRequestBody;
void *tiScsiXchg;
bit32 reqType;
bit32 interruptContext;
satCompleteCbPtr_t satCompleteCB;
satInternalIo_t *satIntIoContext;
tiDeviceHandle_t *ptiDeviceHandle;
bit8 sataTag;
bit8 superIOFlag;
bit8 reserved1;
bit8 reserved2;
bit32 currentLBA;
bit32 ATACmd;
bit32 OrgTL;
bit32 LoopNum;
bit32 LoopNum2;
bit8 LBA[8];
bit32 ParmIndex;
bit32 ParmLen;
bit32 NotifyOS;
bit32 TMF;
struct satIOContext_s *satToBeAbortedIOContext;
struct satIOContext_s *satOrgIOContext;
bit32 pid;
} satIOContext_t;
typedef struct tdIORequestBody_s {
tdssIOCompleted_t IOCompletionFunc;
tiDeviceHandle_t *tiDevHandle;
tiIORequest_t *tiIORequest;
agsaIORequest_t agIORequest;
tiIORequest_t *tiIOToBeAbortedRequest;
agsaContext_t agContext;
#ifdef FDS_SM
smIORequestBody_t smIORequestBody;
smIORequest_t smIORequest;
void *osMemHandle;
bit32 pid;
bit32 superIOFlag;
union {
smScsiInitiatorRequest_t smSCSIRequest;
smSuperScsiInitiatorRequest_t smSuperSCSIRequest;
} SM;
#endif
union {
struct {
agsaSASRequestBody_t agSASRequestBody;
} SAS;
struct {
agsaSATAInitiatorRequest_t agSATARequestBody;
scsiRspSense_t sensePayload;
tiSenseData_t tiSenseData;
satIOContext_t satIOContext;
} SATA;
} transport;
bit32 ioStarted;
bit32 ioCompleted;
bit32 reTries;
tdList_t EsglPageList;
bit32 agRequestType;
union {
struct {
bit32 expDataLength;
tiSgl_t tiSgl1;
tiSgl_t tiSgl2;
void *sglVirtualAddr;
} InitiatorRegIO;
struct {
void *osMemHandle;
tiIORequest_t *CurrentTaskTag;
tiIORequest_t *TaskTag;
} InitiatorTMIO;
struct {
tiIORequest_t tiIORequest;
union {
struct {
tiSgl_t tiSgl1;
void * sglVirtualAddr;
} RegIO;
struct {
tiSgl_t tiSgl1;
void * sglVirtualAddr;
tiSgl_t tiSglMirror;
void * sglMirrorVirtualAddr;
tdList_t EsglMirrorPageList;
} MirrorIO;
} TargetIOType;
} TargetIO;
} IOType;
} tdIORequestBody_t;
typedef struct tdssSMPRequestBody_s {
tdIORequestBody_t IORequestBody;
tdssSMPCompleted_t SMPCompletionFunc;
tiDeviceHandle_t *tiDevHandle;
agsaIORequest_t agIORequest;
agsaSASRequestBody_t agSASRequestBody;
agsaSATAInitiatorRequest_t agSATARequestBody;
void *osMemHandle;
tdsaDeviceData_t *tdDevice;
tiIORequest_t *CurrentTaskTag;
tdsaPortContext_t *tdPortContext;
bit8 smpPayload[SMP_DIRECT_PAYLOAD_LIMIT];
bit32 retries;
bit32 queueNumber;
void *IndirectSMPReqosMemHandle;
void *IndirectSMPReq;
bit32 IndirectSMPReqLen;
void *IndirectSMPResposMemHandle;
void *IndirectSMPResp;
bit32 IndirectSMPRespLen;
} tdssSMPRequestBody_t;
#ifdef AGTIAPI_CTL
typedef struct tdIORequest_s
{
tiIORequest_t tiIORequest;
tdIORequestBody_t tdIORequestBody;
void *osMemHandle;
void *osMemHandle2;
bit32 physUpper32;
bit32 physLower32;
void *virtAddr;
tiIntrEventType_t eventType;
bit32 eventStatus;
} tdIORequest_t;
#endif
#ifdef PASSTHROUGH
typedef struct tdPassthroughCmndBody_s
{
ostiPassthroughCmndEvent_t EventCB;
tiPassthroughRequest_t *tiPassthroughRequest;
tiDeviceHandle_t *tiDevHandle;
bit32 tiPassthroughCmndType;
union {
struct {
#ifdef TO_DO
tiSMPFunction_t SMPFn;
tiSMPFunctionResult_t SMPFnResult;
bit32 IT;
tiSMPFrameHeader_t SMPHeader;
#endif
tdssSMPRequestBody_t SMPBody;
} SMP;
struct {
tiDataDirection_t dataDirection;
} RMC;
} protocol;
} tdPassthroughCmndBody_t;
#endif
#endif