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
Cache object: ece8f482198bbbc4a1c396b2ed50f8e0
|