14e1bc9a0SAchim Leubner /******************************************************************************* 24e1bc9a0SAchim Leubner *Copyright (c) 2014 PMC-Sierra, Inc. All rights reserved. 34e1bc9a0SAchim Leubner * 44e1bc9a0SAchim Leubner *Redistribution and use in source and binary forms, with or without modification, are permitted provided 54e1bc9a0SAchim Leubner *that the following conditions are met: 64e1bc9a0SAchim Leubner *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the 74e1bc9a0SAchim Leubner *following disclaimer. 84e1bc9a0SAchim Leubner *2. Redistributions in binary form must reproduce the above copyright notice, 94e1bc9a0SAchim Leubner *this list of conditions and the following disclaimer in the documentation and/or other materials provided 104e1bc9a0SAchim Leubner *with the distribution. 114e1bc9a0SAchim Leubner * 124e1bc9a0SAchim Leubner *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED 134e1bc9a0SAchim Leubner *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 144e1bc9a0SAchim Leubner *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 154e1bc9a0SAchim Leubner *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 164e1bc9a0SAchim Leubner *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 174e1bc9a0SAchim Leubner *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 184e1bc9a0SAchim Leubner *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 194e1bc9a0SAchim Leubner *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE 204e1bc9a0SAchim Leubner 214e1bc9a0SAchim Leubner ********************************************************************************/ 224e1bc9a0SAchim Leubner /*******************************************************************************/ 234e1bc9a0SAchim Leubner /** \file 244e1bc9a0SAchim Leubner * 254e1bc9a0SAchim Leubner * $RCSfile: ttdtxchg.h,v $ 264e1bc9a0SAchim Leubner * 274e1bc9a0SAchim Leubner * Copyright 2006 PMC-Sierra, Inc. 284e1bc9a0SAchim Leubner * 294e1bc9a0SAchim Leubner * 304e1bc9a0SAchim Leubner * #define and data structures for SAS target in SAS/SATA TD layer 314e1bc9a0SAchim Leubner * 324e1bc9a0SAchim Leubner */ 334e1bc9a0SAchim Leubner 344e1bc9a0SAchim Leubner typedef struct sas_resp_s 354e1bc9a0SAchim Leubner { 364e1bc9a0SAchim Leubner agsaSSPResponseInfoUnit_t agResp; 374e1bc9a0SAchim Leubner bit8 RespData[4]; 384e1bc9a0SAchim Leubner bit8 SenseData[64]; 394e1bc9a0SAchim Leubner } sas_resp_t; 404e1bc9a0SAchim Leubner 414e1bc9a0SAchim Leubner typedef struct smp_resp_s 424e1bc9a0SAchim Leubner { 434e1bc9a0SAchim Leubner bit8 RespData[1024]; /* SAS Spec */ 444e1bc9a0SAchim Leubner } smp_resp_t; 454e1bc9a0SAchim Leubner 464e1bc9a0SAchim Leubner 474e1bc9a0SAchim Leubner typedef struct 484e1bc9a0SAchim Leubner { 494e1bc9a0SAchim Leubner bit8 *virtAddr; 504e1bc9a0SAchim Leubner bit32 phyAddrUpper; 514e1bc9a0SAchim Leubner bit32 phyAddrLower; 524e1bc9a0SAchim Leubner bit32 length; 534e1bc9a0SAchim Leubner } ttdsaDmaMemoryArea_t; 544e1bc9a0SAchim Leubner 554e1bc9a0SAchim Leubner struct tdsaDeviceData_s; 564e1bc9a0SAchim Leubner 574e1bc9a0SAchim Leubner /* I/O structurre */ 584e1bc9a0SAchim Leubner typedef struct ttdsaXchg_s 594e1bc9a0SAchim Leubner { 604e1bc9a0SAchim Leubner 614e1bc9a0SAchim Leubner tdIORequestBody_t IORequestBody; /* has to be at the top */ 624e1bc9a0SAchim Leubner tdssSMPRequestBody_t SMPRequestBody; /* has to be at the second top */ 634e1bc9a0SAchim Leubner 644e1bc9a0SAchim Leubner tdList_t XchgLinks; 654e1bc9a0SAchim Leubner /* pointer to device(initiator) for which the I/O was initiated */ 664e1bc9a0SAchim Leubner struct tdsaDeviceData_s *DeviceData; 674e1bc9a0SAchim Leubner struct ttdsaXchg_s *pTMResp; 684e1bc9a0SAchim Leubner bit32 oustandingIos; 694e1bc9a0SAchim Leubner bit32 isAborting; 704e1bc9a0SAchim Leubner bit32 oslayerAborting; 714e1bc9a0SAchim Leubner bit32 isTMRequest; 724e1bc9a0SAchim Leubner bit32 index; /* index of structure */ 734e1bc9a0SAchim Leubner agsaSSPCmdInfoUnit_t agSSPCmndIU; 744e1bc9a0SAchim Leubner agsaSSPScsiTaskMgntReq_t agTMIU; 754e1bc9a0SAchim Leubner /* SSPTargetRead/SSPTargetWrite */ 764e1bc9a0SAchim Leubner bit32 XchType; 774e1bc9a0SAchim Leubner bit32 FrameType; /* cmnd or TM */ 784e1bc9a0SAchim Leubner agsaRoot_t *agRoot; 794e1bc9a0SAchim Leubner tiRoot_t *tiRoot; 804e1bc9a0SAchim Leubner /* indicates that at the completion of this data phase, this 814e1bc9a0SAchim Leubner exchange structure will be freed */ 824e1bc9a0SAchim Leubner bit32 statusSent; 834e1bc9a0SAchim Leubner bit32 responseSent; 844e1bc9a0SAchim Leubner bit32 readRspCollapsed : 1; 854e1bc9a0SAchim Leubner bit32 wrtRspCollapsed : 1; 864e1bc9a0SAchim Leubner bit32 readWrtCollapsedRes : 30; 874e1bc9a0SAchim Leubner tiTargetScsiCmnd_t tiTgtScsiCmnd; 884e1bc9a0SAchim Leubner 894e1bc9a0SAchim Leubner /* initiator tag a target received */ 904e1bc9a0SAchim Leubner bit16 tag; 914e1bc9a0SAchim Leubner bit64 dataLen; 924e1bc9a0SAchim Leubner bit32 respLen; 934e1bc9a0SAchim Leubner bit32 smprespLen; 944e1bc9a0SAchim Leubner ttdsaDmaMemoryArea_t resp; /* sas response */ 954e1bc9a0SAchim Leubner ttdsaDmaMemoryArea_t smpresp; /* sas smp response */ 964e1bc9a0SAchim Leubner bit32 usedEsgl; 974e1bc9a0SAchim Leubner /* for abort task io which is not founded in TD */ 984e1bc9a0SAchim Leubner bit32 io_found; 994e1bc9a0SAchim Leubner /* for debugging only */ 1004e1bc9a0SAchim Leubner bit32 id; 1014e1bc9a0SAchim Leubner /* PhyId for SMP*/ 1024e1bc9a0SAchim Leubner bit32 SMPphyId; 1034e1bc9a0SAchim Leubner bit32 state; 1044e1bc9a0SAchim Leubner bit32 TLR; /* Transport Layer Retransmit bits */ 1054e1bc9a0SAchim Leubner bit32 retries; /* retries */ 1064e1bc9a0SAchim Leubner tiIORequest_t *tiIOToBeAbortedRequest; /* IO to be aborted */ 1074e1bc9a0SAchim Leubner struct ttdsaXchg_s *XchgToBeAborted; /* Xchg to be aborted */ 1084e1bc9a0SAchim Leubner } ttdsaXchg_t; 1094e1bc9a0SAchim Leubner 1104e1bc9a0SAchim Leubner /************************************************************************* 1114e1bc9a0SAchim Leubner ** now ttdssIOData_t and old tgtXchgData_t - 1124e1bc9a0SAchim Leubner **************************************************************************/ 1134e1bc9a0SAchim Leubner 1144e1bc9a0SAchim Leubner typedef struct ttdsaXchgData_s 1154e1bc9a0SAchim Leubner { 1164e1bc9a0SAchim Leubner bit32 maxNumXchgs; 1174e1bc9a0SAchim Leubner tdList_t xchgFreeList; 1184e1bc9a0SAchim Leubner tdList_t xchgBusyList; 1194e1bc9a0SAchim Leubner bit32 noUsed; 1204e1bc9a0SAchim Leubner bit32 noFreed; 1214e1bc9a0SAchim Leubner bit32 noCmdRcvd; 1224e1bc9a0SAchim Leubner bit32 noStartIo; 1234e1bc9a0SAchim Leubner bit32 noSendRsp; 1244e1bc9a0SAchim Leubner bit32 noCompleted; 1254e1bc9a0SAchim Leubner } ttdsaXchgData_t; 1264e1bc9a0SAchim Leubner 1274e1bc9a0SAchim Leubner 128