#ifndef SM_H
#define SM_H
#define SM_CACHED_MEM 0x00
#define SM_DMA_MEM 0x01
#define SM_CACHED_DMA_MEM 0x02
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,
} smStatus_t;
typedef enum
{
smIOSuccess,
smIOOverRun,
smIOUnderRun,
smIOFailed,
smIODifError,
smIOEncryptError,
smIORetry,
smIOSTPResourceBusy,
} smIOStatus_t;
typedef enum
{
smDetailBusy,
smDetailNotValid,
smDetailNoLogin,
smDetailAbortLogin,
smDetailAbortReset,
smDetailAborted,
smDetailDifMismatch,
smDetailDifAppTagMismatch,
smDetailDifRefTagMismatch,
smDetailDifCrcMismatch,
smDetailDekKeyCacheMiss,
smDetailCipherModeInvalid,
smDetailDekIVMismatch,
smDetailDekRamInterfaceError,
smDetailDekIndexOutofBounds,
smDetailOtherError
} smIOStatusDetail_t;
typedef enum
{
smDirectionIn = 0x0000,
smDirectionOut = 0x0001
}smDataDirection_t;
typedef enum
{
smIntrEventTypeCnxError,
smIntrEventTypeDiscovery,
smIntrEventTypeTransportRecovery,
smIntrEventTypeTaskManagement,
smIntrEventTypeDeviceChange,
smIntrEventTypeLogin,
smIntrEventTypeLocalAbort
} smIntrEventType_t;
typedef enum
{
smTMOK,
smTMFailed
} smTMEventStatus_t;
#define SM_SCSI_INITIATOR_DIF 0x00000001
#define SM_SCSI_INITIATOR_ENCRYPT 0x00000002
#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];
} 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;
#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;
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