1*4e1bc9a0SAchim Leubner /******************************************************************************* 2*4e1bc9a0SAchim Leubner *Copyright (c) 2014 PMC-Sierra, Inc. All rights reserved. 3*4e1bc9a0SAchim Leubner * 4*4e1bc9a0SAchim Leubner *Redistribution and use in source and binary forms, with or without modification, are permitted provided 5*4e1bc9a0SAchim Leubner *that the following conditions are met: 6*4e1bc9a0SAchim Leubner *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the 7*4e1bc9a0SAchim Leubner *following disclaimer. 8*4e1bc9a0SAchim Leubner *2. Redistributions in binary form must reproduce the above copyright notice, 9*4e1bc9a0SAchim Leubner *this list of conditions and the following disclaimer in the documentation and/or other materials provided 10*4e1bc9a0SAchim Leubner *with the distribution. 11*4e1bc9a0SAchim Leubner * 12*4e1bc9a0SAchim Leubner *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED 13*4e1bc9a0SAchim Leubner *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 14*4e1bc9a0SAchim Leubner *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 15*4e1bc9a0SAchim Leubner *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 16*4e1bc9a0SAchim Leubner *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 17*4e1bc9a0SAchim Leubner *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 18*4e1bc9a0SAchim Leubner *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 19*4e1bc9a0SAchim Leubner *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE 20*4e1bc9a0SAchim Leubner 21*4e1bc9a0SAchim Leubner ********************************************************************************/ 22*4e1bc9a0SAchim Leubner /*******************************************************************************/ 23*4e1bc9a0SAchim Leubner /** \file 24*4e1bc9a0SAchim Leubner * 25*4e1bc9a0SAchim Leubner * $RCSfile: ttdtxchg.h,v $ 26*4e1bc9a0SAchim Leubner * 27*4e1bc9a0SAchim Leubner * Copyright 2006 PMC-Sierra, Inc. 28*4e1bc9a0SAchim Leubner * 29*4e1bc9a0SAchim Leubner * 30*4e1bc9a0SAchim Leubner * #define and data structures for SAS target in SAS/SATA TD layer 31*4e1bc9a0SAchim Leubner * 32*4e1bc9a0SAchim Leubner */ 33*4e1bc9a0SAchim Leubner 34*4e1bc9a0SAchim Leubner typedef struct sas_resp_s 35*4e1bc9a0SAchim Leubner { 36*4e1bc9a0SAchim Leubner agsaSSPResponseInfoUnit_t agResp; 37*4e1bc9a0SAchim Leubner bit8 RespData[4]; 38*4e1bc9a0SAchim Leubner bit8 SenseData[64]; 39*4e1bc9a0SAchim Leubner } sas_resp_t; 40*4e1bc9a0SAchim Leubner 41*4e1bc9a0SAchim Leubner typedef struct smp_resp_s 42*4e1bc9a0SAchim Leubner { 43*4e1bc9a0SAchim Leubner bit8 RespData[1024]; /* SAS Spec */ 44*4e1bc9a0SAchim Leubner } smp_resp_t; 45*4e1bc9a0SAchim Leubner 46*4e1bc9a0SAchim Leubner 47*4e1bc9a0SAchim Leubner typedef struct 48*4e1bc9a0SAchim Leubner { 49*4e1bc9a0SAchim Leubner bit8 *virtAddr; 50*4e1bc9a0SAchim Leubner bit32 phyAddrUpper; 51*4e1bc9a0SAchim Leubner bit32 phyAddrLower; 52*4e1bc9a0SAchim Leubner bit32 length; 53*4e1bc9a0SAchim Leubner } ttdsaDmaMemoryArea_t; 54*4e1bc9a0SAchim Leubner 55*4e1bc9a0SAchim Leubner struct tdsaDeviceData_s; 56*4e1bc9a0SAchim Leubner 57*4e1bc9a0SAchim Leubner /* I/O structurre */ 58*4e1bc9a0SAchim Leubner typedef struct ttdsaXchg_s 59*4e1bc9a0SAchim Leubner { 60*4e1bc9a0SAchim Leubner 61*4e1bc9a0SAchim Leubner tdIORequestBody_t IORequestBody; /* has to be at the top */ 62*4e1bc9a0SAchim Leubner tdssSMPRequestBody_t SMPRequestBody; /* has to be at the second top */ 63*4e1bc9a0SAchim Leubner 64*4e1bc9a0SAchim Leubner tdList_t XchgLinks; 65*4e1bc9a0SAchim Leubner /* pointer to device(initiator) for which the I/O was initiated */ 66*4e1bc9a0SAchim Leubner struct tdsaDeviceData_s *DeviceData; 67*4e1bc9a0SAchim Leubner struct ttdsaXchg_s *pTMResp; 68*4e1bc9a0SAchim Leubner bit32 oustandingIos; 69*4e1bc9a0SAchim Leubner bit32 isAborting; 70*4e1bc9a0SAchim Leubner bit32 oslayerAborting; 71*4e1bc9a0SAchim Leubner bit32 isTMRequest; 72*4e1bc9a0SAchim Leubner bit32 index; /* index of structure */ 73*4e1bc9a0SAchim Leubner agsaSSPCmdInfoUnit_t agSSPCmndIU; 74*4e1bc9a0SAchim Leubner agsaSSPScsiTaskMgntReq_t agTMIU; 75*4e1bc9a0SAchim Leubner /* SSPTargetRead/SSPTargetWrite */ 76*4e1bc9a0SAchim Leubner bit32 XchType; 77*4e1bc9a0SAchim Leubner bit32 FrameType; /* cmnd or TM */ 78*4e1bc9a0SAchim Leubner agsaRoot_t *agRoot; 79*4e1bc9a0SAchim Leubner tiRoot_t *tiRoot; 80*4e1bc9a0SAchim Leubner /* indicates that at the completion of this data phase, this 81*4e1bc9a0SAchim Leubner exchange structure will be freed */ 82*4e1bc9a0SAchim Leubner bit32 statusSent; 83*4e1bc9a0SAchim Leubner bit32 responseSent; 84*4e1bc9a0SAchim Leubner bit32 readRspCollapsed : 1; 85*4e1bc9a0SAchim Leubner bit32 wrtRspCollapsed : 1; 86*4e1bc9a0SAchim Leubner bit32 readWrtCollapsedRes : 30; 87*4e1bc9a0SAchim Leubner tiTargetScsiCmnd_t tiTgtScsiCmnd; 88*4e1bc9a0SAchim Leubner 89*4e1bc9a0SAchim Leubner /* initiator tag a target received */ 90*4e1bc9a0SAchim Leubner bit16 tag; 91*4e1bc9a0SAchim Leubner bit64 dataLen; 92*4e1bc9a0SAchim Leubner bit32 respLen; 93*4e1bc9a0SAchim Leubner bit32 smprespLen; 94*4e1bc9a0SAchim Leubner ttdsaDmaMemoryArea_t resp; /* sas response */ 95*4e1bc9a0SAchim Leubner ttdsaDmaMemoryArea_t smpresp; /* sas smp response */ 96*4e1bc9a0SAchim Leubner bit32 usedEsgl; 97*4e1bc9a0SAchim Leubner /* for abort task io which is not founded in TD */ 98*4e1bc9a0SAchim Leubner bit32 io_found; 99*4e1bc9a0SAchim Leubner /* for debugging only */ 100*4e1bc9a0SAchim Leubner bit32 id; 101*4e1bc9a0SAchim Leubner /* PhyId for SMP*/ 102*4e1bc9a0SAchim Leubner bit32 SMPphyId; 103*4e1bc9a0SAchim Leubner bit32 state; 104*4e1bc9a0SAchim Leubner bit32 TLR; /* Transport Layer Retransmit bits */ 105*4e1bc9a0SAchim Leubner bit32 retries; /* retries */ 106*4e1bc9a0SAchim Leubner tiIORequest_t *tiIOToBeAbortedRequest; /* IO to be aborted */ 107*4e1bc9a0SAchim Leubner struct ttdsaXchg_s *XchgToBeAborted; /* Xchg to be aborted */ 108*4e1bc9a0SAchim Leubner } ttdsaXchg_t; 109*4e1bc9a0SAchim Leubner 110*4e1bc9a0SAchim Leubner /************************************************************************* 111*4e1bc9a0SAchim Leubner ** now ttdssIOData_t and old tgtXchgData_t - 112*4e1bc9a0SAchim Leubner **************************************************************************/ 113*4e1bc9a0SAchim Leubner 114*4e1bc9a0SAchim Leubner typedef struct ttdsaXchgData_s 115*4e1bc9a0SAchim Leubner { 116*4e1bc9a0SAchim Leubner bit32 maxNumXchgs; 117*4e1bc9a0SAchim Leubner tdList_t xchgFreeList; 118*4e1bc9a0SAchim Leubner tdList_t xchgBusyList; 119*4e1bc9a0SAchim Leubner bit32 noUsed; 120*4e1bc9a0SAchim Leubner bit32 noFreed; 121*4e1bc9a0SAchim Leubner bit32 noCmdRcvd; 122*4e1bc9a0SAchim Leubner bit32 noStartIo; 123*4e1bc9a0SAchim Leubner bit32 noSendRsp; 124*4e1bc9a0SAchim Leubner bit32 noCompleted; 125*4e1bc9a0SAchim Leubner } ttdsaXchgData_t; 126*4e1bc9a0SAchim Leubner 127*4e1bc9a0SAchim Leubner 128