]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - sys/dev/pms/RefTisa/sat/api/sm.h
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / sys / dev / pms / RefTisa / sat / api / sm.h
1 /*******************************************************************************
2 *Copyright (c) 2014 PMC-Sierra, Inc.  All rights reserved. 
3 *
4 *Redistribution and use in source and binary forms, with or without modification, are permitted provided 
5 *that the following conditions are met: 
6 *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
7 *following disclaimer. 
8 *2. Redistributions in binary form must reproduce the above copyright notice, 
9 *this list of conditions and the following disclaimer in the documentation and/or other materials provided
10 *with the distribution. 
11 *
12 *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED 
13 *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
14 *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
15 *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
16 *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
17 *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
18 *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
19 *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
20 *
21 * $FreeBSD$
22 *
23 ********************************************************************************/
24 /********************************************************************************
25 **    
26 *   sm.h 
27 *
28 *   Abstract:   This module defines the contants, enum and #define definition used
29 *               by SAT Moduled (SM).
30 *     
31 ********************************************************************************/
32
33 #ifndef SM_H
34 #define SM_H
35
36 /*************************************************
37  *   constants for type field in smMem_t
38  *************************************************/
39 #define SM_CACHED_MEM                             0x00     /**< CACHED memory type */
40 #define SM_DMA_MEM                                0x01     /**< DMA memory type */
41 #define SM_CACHED_DMA_MEM                         0x02     /**< CACHED DMA memory type */
42
43 /*************************************************
44  *   constants for API return values
45  *************************************************/
46 typedef enum
47 {
48   SM_RC_SUCCESS,
49   SM_RC_FAILURE,
50   SM_RC_BUSY,
51   SM_RC_NODEVICE,
52   SM_RC_VERSION_INCOMPATIBLE,
53   SM_RC_VERSION_UNTESTED,
54   SM_RC_RSV1,
55   SM_RC_RSV2,
56   SM_RC_RSV3,
57   SM_RC_RSV4,
58   SM_RC_DEVICE_BUSY, /* must be the same as tiDeviceBusy */
59   
60 } smStatus_t;
61
62 typedef enum
63 {
64   smIOSuccess,
65   smIOOverRun,
66   smIOUnderRun,
67   smIOFailed,
68   smIODifError,
69   smIOEncryptError,
70   smIORetry,           /* open retry timeout */
71   smIOSTPResourceBusy, /* stp resource busy */
72 } smIOStatus_t;
73
74 typedef enum
75 {
76   smDetailBusy,
77   smDetailNotValid,
78   smDetailNoLogin,
79   smDetailAbortLogin,
80   smDetailAbortReset,
81   smDetailAborted,
82   smDetailDifMismatch,
83   smDetailDifAppTagMismatch,
84   smDetailDifRefTagMismatch,
85   smDetailDifCrcMismatch,
86   smDetailDekKeyCacheMiss,
87   smDetailCipherModeInvalid,
88   smDetailDekIVMismatch,
89   smDetailDekRamInterfaceError,
90   smDetailDekIndexOutofBounds,
91   smDetailOtherError
92 } smIOStatusDetail_t;
93
94 /*
95  * Data direction for I/O request
96  */
97 typedef enum
98 {
99   smDirectionIn   = 0x0000,
100   smDirectionOut  = 0x0001
101 }smDataDirection_t;
102
103 /*
104  * Event types for tdsmEventCB()
105  * do not change: Needs to be in sync with TISA API
106  */
107 typedef enum
108 {
109   smIntrEventTypeCnxError,
110   smIntrEventTypeDiscovery,
111   smIntrEventTypeTransportRecovery,
112   smIntrEventTypeTaskManagement,
113   smIntrEventTypeDeviceChange,
114   smIntrEventTypeLogin,
115   smIntrEventTypeLocalAbort  
116 } smIntrEventType_t;
117
118 typedef enum
119 {
120   smTMOK,
121   smTMFailed
122 } smTMEventStatus_t;
123
124 /*
125  * Flags in smSuperScsiInitiatorRequest_t
126  */
127 #define SM_SCSI_INITIATOR_DIF         0x00000001
128 #define SM_SCSI_INITIATOR_ENCRYPT     0x00000002
129
130 /*
131  * Flags in smSuperScsiInitiatorRequest_t
132  */
133 #define SM_SCSI_TARGET_DIF         0x00000001
134 #define SM_SCSI_TARGET_MIRROR      0x00000002
135 #define SM_SCSI_TARGET_ENCRYPT     0x00000004
136
137 typedef struct {
138                 void            *tdData;
139                 void            *smData;
140 } smContext_t;
141
142
143 typedef    smContext_t    smDeviceHandle_t;
144
145 typedef    smContext_t    smIORequest_t;
146
147 typedef    smContext_t    smRoot_t;
148
149 typedef struct 
150 {
151         bit8  lun[8];               /* logical unit number  */
152 } smLUN_t;
153
154 typedef struct{
155                 smLUN_t         lun;
156                 bit32           expDataLength;
157                 bit32           taskAttribute;
158                 bit32           crn;
159                 bit8            cdb[16];
160 } smIniScsiCmnd_t;
161
162
163
164 typedef struct{
165                void     *virtPtr;
166                void     *osHandle;
167                bit32    physAddrUpper;
168                bit32    physAddrLower;
169                bit32    totalLength;
170                bit32    numElements;
171                bit32    singleElementLength;
172                bit32    alignment;
173                bit32    type;
174                bit32    reserved;
175 } smMem_t;
176
177 #define SM_NUM_MEM_CHUNKS 8
178
179 typedef struct{
180                bit32            count;
181                smMem_t          smMemory[SM_NUM_MEM_CHUNKS];
182 } smMemoryRequirement_t;
183
184 typedef struct{
185                bit32    lower;
186                bit32    upper;
187                bit32    len;
188                bit32    type;
189 } smSgl_t;
190
191 /*
192  * DIF operation
193  */
194 #define DIF_INSERT                     0
195 #define DIF_VERIFY_FORWARD             1
196 #define DIF_VERIFY_DELETE              2
197 #define DIF_VERIFY_REPLACE             3
198 #define DIF_VERIFY_UDT_REPLACE_CRC     5
199 #define DIF_REPLACE_UDT_REPLACE_CRC    7
200
201 #define DIF_UDT_SIZE              6
202
203 typedef struct smDif
204 {
205   agBOOLEAN   enableDIFPerLA;
206   bit32       flag;
207   bit16       initialIOSeed;
208   bit16       reserved;
209   bit32       DIFPerLAAddrLo;
210   bit32       DIFPerLAAddrHi;
211   bit16       DIFPerLARegion0SecCount;
212   bit16       DIFPerLANumOfRegions;
213   bit8        udtArray[DIF_UDT_SIZE];
214   bit8        udrtArray[DIF_UDT_SIZE];  
215 } smDif_t;
216
217 typedef struct smEncryptDek {
218     bit32          dekTable;
219     bit32          dekIndex;
220 } smEncryptDek_t;
221
222 typedef struct smEncrypt {
223   smEncryptDek_t     dekInfo;   
224   bit32          kekIndex;
225   agBOOLEAN      keyTagCheck;
226   agBOOLEAN        enableEncryptionPerLA;    
227   bit32          sectorSizeIndex;
228   bit32          encryptMode;
229   bit32          keyTag_W0;
230   bit32          keyTag_W1;
231   bit32          tweakVal_W0;
232   bit32          tweakVal_W1;
233   bit32          tweakVal_W2;
234   bit32          tweakVal_W3;
235   bit32          EncryptionPerLAAddrLo;
236   bit32          EncryptionPerLAAddrHi;
237   bit16          EncryptionPerLRegion0SecCount;
238   bit16          reserved;
239 } smEncrypt_t;
240
241 typedef struct smScsiInitiatorRequest {
242               void                     *sglVirtualAddr;
243               smIniScsiCmnd_t          scsiCmnd;
244               smSgl_t                  smSgl1;
245               smDataDirection_t        dataDirection;
246 } smScsiInitiatorRequest_t;
247
248 typedef struct smSuperScsiInitiatorRequest
249 {
250   void                *sglVirtualAddr;
251   smIniScsiCmnd_t     scsiCmnd;     
252   smSgl_t             smSgl1;
253   smDataDirection_t   dataDirection;
254   bit32               flags; /* 
255                                bit 0-1: reserved
256                                bit 2: enable encryption
257                                bit 3: enable dif
258                                bit 4-7: reserved
259                                bit 8-23: DIF SKIP Bytes
260                                bit 24-31: Reserved
261                              */
262   smDif_t             Dif;
263   smEncrypt_t         Encrypt;
264 } smSuperScsiInitiatorRequest_t;
265
266 typedef struct{
267                void     *senseData;
268                bit8     senseLen;
269 } smSenseData_t;
270
271 typedef struct{
272                bit32                    maxActiveIOs;
273                bit32                    numDevHandles;
274 #ifdef SM_DEBUG
275                bit32                    SMDebugLevel;
276 #endif
277 } smSwConfig_t;
278
279
280 #define smBOOLEAN  bit32
281
282
283
284
285
286
287
288
289
290
291 #endif  /* SM_H */
292