xref: /freebsd/sys/dev/pms/RefTisa/tisa/sassata/sas/tgt/ttdtxchg.h (revision b5ff185e19f6013ca565b2a15bc2d6abce933f46)
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