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