/******************************************************************************* *Copyright (c) 2014 PMC-Sierra, Inc. All rights reserved. * *Redistribution and use in source and binary forms, with or without modification, are permitted provided *that the following conditions are met: *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the *following disclaimer. *2. Redistributions in binary form must reproduce the above copyright notice, *this list of conditions and the following disclaimer in the documentation and/or other materials provided *with the distribution. * *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE * * $FreeBSD$ * ********************************************************************************/ /******************************************************************************** ** * sm.h * * Abstract: This module defines the contants, enum and #define definition used * by SAT Moduled (SM). * ********************************************************************************/ #ifndef SM_H #define SM_H /************************************************* * constants for type field in smMem_t *************************************************/ #define SM_CACHED_MEM 0x00 /**< CACHED memory type */ #define SM_DMA_MEM 0x01 /**< DMA memory type */ #define SM_CACHED_DMA_MEM 0x02 /**< CACHED DMA memory type */ /************************************************* * constants for API return values *************************************************/ typedef enum { SM_RC_SUCCESS, SM_RC_FAILURE, SM_RC_BUSY, SM_RC_NODEVICE, SM_RC_VERSION_INCOMPATIBLE, SM_RC_VERSION_UNTESTED, SM_RC_RSV1, SM_RC_RSV2, SM_RC_RSV3, SM_RC_RSV4, SM_RC_DEVICE_BUSY, /* must be the same as tiDeviceBusy */ } smStatus_t; typedef enum { smIOSuccess, smIOOverRun, smIOUnderRun, smIOFailed, smIODifError, smIOEncryptError, smIORetry, /* open retry timeout */ smIOSTPResourceBusy, /* stp resource busy */ } smIOStatus_t; typedef enum { smDetailBusy, smDetailNotValid, smDetailNoLogin, smDetailAbortLogin, smDetailAbortReset, smDetailAborted, smDetailDifMismatch, smDetailDifAppTagMismatch, smDetailDifRefTagMismatch, smDetailDifCrcMismatch, smDetailDekKeyCacheMiss, smDetailCipherModeInvalid, smDetailDekIVMismatch, smDetailDekRamInterfaceError, smDetailDekIndexOutofBounds, smDetailOtherError } smIOStatusDetail_t; /* * Data direction for I/O request */ typedef enum { smDirectionIn = 0x0000, smDirectionOut = 0x0001 }smDataDirection_t; /* * Event types for tdsmEventCB() * do not change: Needs to be in sync with TISA API */ typedef enum { smIntrEventTypeCnxError, smIntrEventTypeDiscovery, smIntrEventTypeTransportRecovery, smIntrEventTypeTaskManagement, smIntrEventTypeDeviceChange, smIntrEventTypeLogin, smIntrEventTypeLocalAbort } smIntrEventType_t; typedef enum { smTMOK, smTMFailed } smTMEventStatus_t; /* * Flags in smSuperScsiInitiatorRequest_t */ #define SM_SCSI_INITIATOR_DIF 0x00000001 #define SM_SCSI_INITIATOR_ENCRYPT 0x00000002 /* * Flags in smSuperScsiInitiatorRequest_t */ #define SM_SCSI_TARGET_DIF 0x00000001 #define SM_SCSI_TARGET_MIRROR 0x00000002 #define SM_SCSI_TARGET_ENCRYPT 0x00000004 typedef struct { void *tdData; void *smData; } smContext_t; typedef smContext_t smDeviceHandle_t; typedef smContext_t smIORequest_t; typedef smContext_t smRoot_t; typedef struct { bit8 lun[8]; /* logical unit number */ } smLUN_t; typedef struct{ smLUN_t lun; bit32 expDataLength; bit32 taskAttribute; bit32 crn; bit8 cdb[16]; } smIniScsiCmnd_t; typedef struct{ void *virtPtr; void *osHandle; bit32 physAddrUpper; bit32 physAddrLower; bit32 totalLength; bit32 numElements; bit32 singleElementLength; bit32 alignment; bit32 type; bit32 reserved; } smMem_t; #define SM_NUM_MEM_CHUNKS 8 typedef struct{ bit32 count; smMem_t smMemory[SM_NUM_MEM_CHUNKS]; } smMemoryRequirement_t; typedef struct{ bit32 lower; bit32 upper; bit32 len; bit32 type; } smSgl_t; /* * DIF operation */ #define DIF_INSERT 0 #define DIF_VERIFY_FORWARD 1 #define DIF_VERIFY_DELETE 2 #define DIF_VERIFY_REPLACE 3 #define DIF_VERIFY_UDT_REPLACE_CRC 5 #define DIF_REPLACE_UDT_REPLACE_CRC 7 #define DIF_UDT_SIZE 6 typedef struct smDif { agBOOLEAN enableDIFPerLA; bit32 flag; bit16 initialIOSeed; bit16 reserved; bit32 DIFPerLAAddrLo; bit32 DIFPerLAAddrHi; bit16 DIFPerLARegion0SecCount; bit16 DIFPerLANumOfRegions; bit8 udtArray[DIF_UDT_SIZE]; bit8 udrtArray[DIF_UDT_SIZE]; } smDif_t; typedef struct smEncryptDek { bit32 dekTable; bit32 dekIndex; } smEncryptDek_t; typedef struct smEncrypt { smEncryptDek_t dekInfo; bit32 kekIndex; agBOOLEAN keyTagCheck; agBOOLEAN enableEncryptionPerLA; bit32 sectorSizeIndex; bit32 encryptMode; bit32 keyTag_W0; bit32 keyTag_W1; bit32 tweakVal_W0; bit32 tweakVal_W1; bit32 tweakVal_W2; bit32 tweakVal_W3; bit32 EncryptionPerLAAddrLo; bit32 EncryptionPerLAAddrHi; bit16 EncryptionPerLRegion0SecCount; bit16 reserved; } smEncrypt_t; typedef struct smScsiInitiatorRequest { void *sglVirtualAddr; smIniScsiCmnd_t scsiCmnd; smSgl_t smSgl1; smDataDirection_t dataDirection; } smScsiInitiatorRequest_t; typedef struct smSuperScsiInitiatorRequest { void *sglVirtualAddr; smIniScsiCmnd_t scsiCmnd; smSgl_t smSgl1; smDataDirection_t dataDirection; bit32 flags; /* bit 0-1: reserved bit 2: enable encryption bit 3: enable dif bit 4-7: reserved bit 8-23: DIF SKIP Bytes bit 24-31: Reserved */ smDif_t Dif; smEncrypt_t Encrypt; } smSuperScsiInitiatorRequest_t; typedef struct{ void *senseData; bit8 senseLen; } smSenseData_t; typedef struct{ bit32 maxActiveIOs; bit32 numDevHandles; #ifdef SM_DEBUG bit32 SMDebugLevel; #endif } smSwConfig_t; #define smBOOLEAN bit32 #endif /* SM_H */