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 *************************************************/ 46typedef 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 62typedef 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 74typedef 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 */ 97typedef 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 */ 107typedef enum 108{ 109 smIntrEventTypeCnxError, 110 smIntrEventTypeDiscovery, 111 smIntrEventTypeTransportRecovery, 112 smIntrEventTypeTaskManagement, 113 smIntrEventTypeDeviceChange, 114 smIntrEventTypeLogin, 115 smIntrEventTypeLocalAbort 116} smIntrEventType_t; 117 118typedef 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 137typedef struct { 138 void *tdData; 139 void *smData; 140} smContext_t; 141 142 143typedef smContext_t smDeviceHandle_t; 144 145typedef smContext_t smIORequest_t; 146 147typedef smContext_t smRoot_t; 148 149typedef struct 150{ 151 bit8 lun[8]; /* logical unit number */ 152} smLUN_t; 153 154typedef struct{ 155 smLUN_t lun; 156 bit32 expDataLength; 157 bit32 taskAttribute; 158 bit32 crn; 159 bit8 cdb[16]; 160} smIniScsiCmnd_t; 161 162 163 164typedef 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 179typedef struct{ 180 bit32 count; 181 smMem_t smMemory[SM_NUM_MEM_CHUNKS]; 182} smMemoryRequirement_t; 183 184typedef 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 203typedef 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 217typedef struct smEncryptDek { 218 bit32 dekTable; 219 bit32 dekIndex; 220} smEncryptDek_t; 221 222typedef 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 241typedef struct smScsiInitiatorRequest { 242 void *sglVirtualAddr; 243 smIniScsiCmnd_t scsiCmnd; 244 smSgl_t smSgl1; 245 smDataDirection_t dataDirection; 246} smScsiInitiatorRequest_t; 247 248typedef 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 266typedef struct{ 267 void *senseData; 268 bit8 senseLen; 269} smSenseData_t; 270 271typedef 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