xref: /freebsd/sys/dev/pms/RefTisa/sat/api/sm.h (revision 42249ef2)
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 
293