/*******************************************************************************
*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$
*
********************************************************************************/
/********************************************************************************
**
** Version Control Information:
**
**
*******************************************************************************/
/********************************************************************************
**
* tidefs.h
*
* Abstract: This module contains enum and #define definition used
* by Transport Independent API (TIAPI) Layer.
*
********************************************************************************/
#ifndef TIDEFS_H
#define TIDEFS_H
#include <dev/pms/freebsd/driver/common/osenv.h>
#include <dev/pms/freebsd/driver/common/ostypes.h>
#include <dev/pms/freebsd/driver/common/osdebug.h>
/*****************************************************************************
* INITIATOR/TARGET SHARED DEFINES AND ENUMS
*****************************************************************************/
/*
* Option mask parameter for tiCOMPortStart()
*/
#define PORTAL_ADD_MASK 0x00000001
/*
* Maximum memory descriptor for Low-Level layer.
*/
#define MAX_LL_LAYER_MEM_DESCRIPTORS 64
/*
* TI API function return types
*/
typedef enum
{
tiSuccess,
tiError,
tiBusy,
tiIONoDevice,
tiMemoryTooLarge,
tiMemoryNotAvail,
tiInvalidHandle,
tiNotSupported,
tiReject,
tiIncorrectLun,
tiDeviceBusy,
} tiStatus_t;
/*
* Type of memory, OR-ed the bit fields.
*/
/* Bit 0-1, cached or dma-uncached dma-cached */
#define TI_DMA_MEM 0x00000000 /* uncached DMA capable memory */
#define TI_CACHED_MEM 0x00000001 /* cached non-DMA capable memory */
#define TI_CACHED_DMA_MEM 0x00000002 /* cached DMA capable memory */
#define TI_DMA_MEM_CHIP 0x00000003 /* Internal HW/chip memory */
/* Bit2-3: location of memory */
#define TI_LOC_HOST 0x00000000 /* default, allocated from host */
#define TI_LOC_ON_CHIP 0x00000004 /* memory is from on-chip RAM */
#define TI_LOC_ON_CARD 0x00000008 /* memory is from on-card RAM */
/* Type of SGL list
*
*/
typedef enum
{
tiSgl=0,
tiSglList=0x80000000,
tiExtHdr
}tiSglType_t;
/*
* Type of mutex semaphoring/synchronization
*/
typedef enum
{
tiSingleMutexLockPerPort,
tiOneMutexLockPerQueue
}tiMutexType_t;
/*
* Context (interrupt or non-interrupt)
*/
typedef enum
{
tiInterruptContext,
tiNonInterruptContext
}tiIntContextType_t;
/*
* Port Event type.
*/
typedef enum
{
tiPortPanic,
tiPortResetComplete,
tiPortNameServerDown,
tiPortLinkDown,
tiPortLinkUp,
tiPortStarted,
tiPortStopped,
tiPortShutdown,
tiPortDiscoveryReady,
tiPortResetNeeded,
tiEncryptOperation,
tiModePageOperation
} tiPortEvent_t;
/*
* tiEncryptOperation Event types
*/
typedef enum
{
tiEncryptGetInfo,
tiEncryptSetMode,
tiEncryptKekAdd,
tiEncryptDekInvalidate,
tiEncryptKekStore,
tiEncryptKekLoad,
tiEncryptAttribRegUpdate,
tiEncryptDekAdd,
/* new */
tiEncryptOperatorManagement,
tiEncryptSelfTest,
tiEncryptSetOperator,
tiEncryptGetOperator
} tiEncryptOp_t;
/*
* ostiPortEvent() status values for tiCOMOperatorManagement()
*/
typedef enum
{
tiOMNotSupported,
tiOMIllegalParam,
tiOMKENUnwrapFail,
tiOMNvramOpFailure,
} tiOperatorManagementStatus_t;
/*
* ostiInitiatorIOCompleted() and ostiTargetIOError() status values
*/
typedef enum
{
tiIOSuccess,
tiIOOverRun,
tiIOUnderRun,
tiIOFailed,
tiIODifError,
tiIOEncryptError,
} tiIOStatus_t;
/*
* ostiInitiatorIOCompleted() and ostiTargetIOError() statusDetail values
*/
typedef enum
{
tiSMPSuccess,
tiSMPAborted,
tiSMPFailed,
} tiSMPStatus_t;
typedef enum
{
tiDetailBusy,
tiDetailNotValid,
tiDetailNoLogin,
tiDetailAbortLogin,
tiDetailAbortReset,
tiDetailAborted,
tiDetailDifMismatch,
tiDetailDifAppTagMismatch,
tiDetailDifRefTagMismatch,
tiDetailDifCrcMismatch,
tiDetailDekKeyCacheMiss,
tiDetailCipherModeInvalid,
tiDetailDekIVMismatch,
tiDetailDekRamInterfaceError,
tiDetailDekIndexOutofBounds,
tiDetailOtherError,
tiDetailOtherErrorNoRetry,
} tiIOStatusDetail_t;
/*
* IOCTL Status Codes
*/
#define IOCTL_ERR_STATUS_OK 0x00
#define IOCTL_ERR_STATUS_MORE_DATA 0x01
#define IOCTL_ERR_STATUS_NO_MORE_DATA 0x02
#define IOCTL_ERR_STATUS_INVALID_CODE 0x03
#define IOCTL_ERR_STATUS_INVALID_DEVICE 0x04
#define IOCTL_ERR_STATUS_NOT_RESPONDING 0x05
#define IOCTL_ERR_STATUS_INTERNAL_ERROR 0x06
#define IOCTL_ERR_STATUS_NOT_SUPPORTED 0x07
#define IOCTL_ERR_FW_EVENTLOG_DISABLED 0x08
#define IOCTL_MJ_FATAL_ERROR_SOFT_RESET_TRIG 0x72
#define IOCTL_MJ_FATAL_ERR_CHK_SEND_TRUE 0x77
#define IOCTL_MJ_FATAL_ERR_CHK_SEND_FALSE 0x76
#define IOCTL_ERROR_NO_FATAL_ERROR 0x77
#define ADAPTER_WWN_START_OFFSET 0x804
#define ADAPTER_WWN_END_OFFSET 0x80b
#define ADAPTER_WWN_SPC_START_OFFSET 0x704
#define ADAPTER_WWN_SPC_END_OFFSET 0x70b
/*
* IOCTL Return Codes
*/
#define IOCTL_CALL_SUCCESS 0x00
#define IOCTL_CALL_FAIL 0x01
#define IOCTL_CALL_PENDING 0x02
#define IOCTL_CALL_INVALID_CODE 0x03
#define IOCTL_CALL_INVALID_DEVICE 0x04
#define IOCTL_CALL_TIMEOUT 0x08
/*
* DIF operation
*/
#define DIF_INSERT 0
#define DIF_VERIFY_FORWARD 1
#define DIF_VERIFY_DELETE 2
#define DIF_VERIFY_REPLACE 3
#define DIF_UDT_SIZE 6
/*
* Login state in tiDeviceInfo_t
*/
#define INI_LGN_STATE_FREE 0x00000000
#define INI_LGN_STATE_LOGIN 0x00000001
#define INI_LGN_STATE_FAIL 0x00000002
#define INI_LGN_STATE_OTHERS 0x0000000F
/*
* SecurityCipherMode in tiEncryptInfo_t and tiCOMEncryptSetMode()
*/
#define TI_ENCRYPT_SEC_MODE_FACT_INIT 0x00000000
#define TI_ENCRYPT_SEC_MODE_A 0x40000000
#define TI_ENCRYPT_SEC_MODE_B 0x80000000
#define TI_ENCRYPT_ATTRIB_ALLOW_SMF 0x00000200
#define TI_ENCRYPT_ATTRIB_AUTH_REQ 0x00000100
#define TI_ENCRYPT_ATTRIB_CIPHER_XTS 0x00000002
#define TI_ENCRYPT_ATTRIB_CIPHER_ECB 0x00000001
/*
* Status in tiEncryptInfo_t
*/
#define TI_ENCRYPT_STATUS_NO_NVRAM 0x00000001
#define TI_ENCRYPT_STATUS_NVRAM_ERROR 0x00000002
#define TI_ENCRYPT_STATUS_ENGINE_ERROR 0x00000004
/*
* EncryptMode in tiEncrypt_t
*/
#define TI_ENCRYPT_MODE_XTS_AES 0x00400000
#define TI_ENCRYPT_MODE_ECB_AES 0x00000000
/*
* Encrypt blob types
*/
#define TI_PLAINTEXT 0
#define TI_ENCRYPTED_KEK_PMCA 1
#define TI_ENCRYPTED_KEK_PMCB 2
/*
* Encrypt DEK table key entry sizes
*/
#define TI_DEK_TABLE_KEY_SIZE16 0
#define TI_DEK_TABLE_KEY_SIZE24 1
#define TI_DEK_TABLE_KEY_SIZE32 2
#define TI_DEK_TABLE_KEY_SIZE40 3
#define TI_DEK_TABLE_KEY_SIZE48 4
#define TI_DEK_TABLE_KEY_SIZE56 5
#define TI_DEK_TABLE_KEY_SIZE64 6
#define TI_DEK_TABLE_KEY_SIZE72 7
#define TI_DEK_TABLE_KEY_SIZE80 8
/* KEK blob size and DEK blob size and host DEK table entry number */
#define TI_KEK_BLOB_SIZE 48
#define TI_KEK_MAX_TABLE_ENTRIES 8
#define TI_DEK_MAX_TABLES 2
#define TI_DEK_MAX_TABLE_ENTRIES (1024*4)
#define TI_DEK_BLOB_SIZE 80
/************************************************************
* tiHWEventMode_t page operation definitions
************************************************************/
#define tiModePageGet 1
#define tiModePageSet 2
/* controller configuration page code */
#define TI_SAS_PROTOCOL_TIMER_CONFIG_PAGE 0x04
#define TI_INTERRUPT_CONFIGURATION_PAGE 0x05
#define TI_ENCRYPTION_GENERAL_CONFIG_PAGE 0x20
#define TI_ENCRYPTION_DEK_CONFIG_PAGE 0x21
#define TI_ENCRYPTION_CONTROL_PARM_PAGE 0x22
#define TI_ENCRYPTION_HMAC_CONFIG_PAGE 0x23
/* encryption self test type */
#define TI_ENCRYPTION_TEST_TYPE_BIST 0x01
#define TI_ENCRYPTION_TEST_TYPE_HMAC 0x02
/* SHA algorithm type */
#define TI_SHA_ALG_1 0x04
#define TI_SHA_ALG_256 0x08
#define TI_SHA_ALG_224 0x10
#define TI_SHA_ALG_512 0x20
#define TI_SHA_ALG_384 0x40
#define TI_SHA_1_DIGEST_SIZE 20
#define TI_SHA_256_DIGEST_SIZE 32
#define TI_SHA_224_DIGEST_SIZE 28
#define TI_SHA_512_DIGEST_SIZE 64
#define TI_SHA_384_DIGEST_SIZE 48
/*****************************************************************************
* INITIATOR SPECIFIC DEFINES AND ENUMS
*****************************************************************************/
/*
* ostiInitiatorIOCompleted() statusDetail contains SCSI status,
* when status passed in ostiInitiatorIOCompleted() is tiIOSuccess.
*/
#define SCSI_STAT_GOOD 0x00
#define SCSI_STAT_CHECK_CONDITION 0x02
#define SCSI_STAT_CONDITION_MET 0x04
#define SCSI_STAT_BUSY 0x08
#define SCSI_STAT_INTERMEDIATE 0x10
#define SCSI_STAT_INTER_CONDIT_MET 0x14
#define SCSI_STAT_RESV_CONFLICT 0x18
#define SCSI_STAT_COMMANDTERMINATED 0x22
#define SCSI_STAT_TASK_SET_FULL 0x28
#define SCSI_STAT_ACA_ACTIVE 0x30
#define SCSI_STAT_TASK_ABORTED 0x40
/*
01: soft error
02: not ready
03: medium error
04: hardware error
05: illegal request
06: unit attention
0b: abort command
*/
#define SCSI_SENSE_KEY_NO_SENSE 0x00
#define SCSI_SENSE_KEY_RECOVERED_ERROR 0x01
#define SCSI_SENSE_KEY_NOT_READY 0x02
#define SCSI_SENSE_KEY_MEDIUM_ERROR 0x03
#define SCSI_SENSE_KEY_HARDWARE_ERROR 0x04
#define SCSI_SENSE_KEY_ILLEGAL_REQUEST 0x05
#define SCSI_SENSE_KEY_UNIT_ATTENTION 0x06
#define SCSI_SENSE_KEY_DATA_PROTECT 0x07
#define SCSI_SENSE_KEY_BLANK_CHECK 0x08
#define SCSI_SENSE_KEY_UNIQUE 0x09
#define SCSI_SENSE_KEY_COPY_ABORTED 0x0A
#define SCSI_SENSE_KEY_ABORTED_COMMAND 0x0B
#define SCSI_SENSE_KEY_EQUAL 0x0C
#define SCSI_SENSE_KEY_VOL_OVERFLOW 0x0D
#define SCSI_SENSE_KEY_MISCOMPARE 0x0E
#define SCSI_SENSE_KEY_RESERVED 0x0F
/*
* Reset option in tiCOMReset()
*/
typedef enum
{
tiSoftReset,
tiHardReset,
tiAutoReset
} tiReset_t;
/*
* Bit 0 Mask for the persistent option in tiINIDiscoverTargets()
*/
#define NORMAL_ASSIGN_MASK 0x00000000
#define FORCE_PERSISTENT_ASSIGN_MASK 0x00000001
/*
* Bit 1 Mask for the auto login option in tiINIDiscoverTargets()
*/
#define AUTO_LOGIN_MASK 0x00000000
#define NO_AUTO_LOGIN_MASK 0x00000002
/*
* Task Management task used in tiINITaskManagement()
*
* 1 AG_ABORT TASK - aborts the task identified by the Referenced Task Tag field.
* 2 AG_ABORT TASK SET - aborts all Tasks issued by this initiator on the Logical Unit
* 3 AG_CLEAR ACA - clears the Auto Contingent Allegiance condition.
* 4 AG_CLEAR TASK SET - Aborts all Tasks (from all initiators) for the Logical Unit.
* 5 AG_LOGICAL UNIT RESET
* 6 AG_TARGET WARM RESET - iSCSI only
* 7 AG_TARGET_COLD_RESET - iSCSI only
* 8 AG_TASK_REASSIGN - iSCSI only
* 9 AG_QUERY_TASK - SAS only
*/
#define AG_ABORT_TASK 1
#define AG_ABORT_TASK_SET 2
#define AG_CLEAR_ACA 3
#define AG_CLEAR_TASK_SET 4
#define AG_LOGICAL_UNIT_RESET 5
#define AG_TARGET_WARM_RESET 6 /* iSCSI only */
#define AG_TARGET_COLD_RESET 7 /* iSCSI only */
#define AG_TASK_REASSIGN 8 /* iSCSI only */
#define AG_QUERY_TASK 9 /* SAS only */
/*
* Event types for ostiInitiatorEvent()
*/
typedef enum
{
tiIntrEventTypeCnxError,
tiIntrEventTypeDiscovery,
tiIntrEventTypeTransportRecovery,
tiIntrEventTypeTaskManagement,
tiIntrEventTypeDeviceChange,
tiIntrEventTypeLogin,
tiIntrEventTypeLocalAbort
} tiIntrEventType_t;
/*
* Event status for ostiInitiatorEvent()
*/
typedef enum
{
tiCnxUp,
tiCnxDown
} tiCnxEventStatus_t;
typedef enum
{
tiDiscOK,
tiDiscFailed
} tiDiscEventStatus_t;
typedef enum
{
tiLoginOK,
tiLoginFailed,
tiLogoutOK,
tiLogoutFailed
} tiLoginEventStatus_t;
typedef enum
{
tiRecOK,
tiRecFailed,
tiRecStarted
} tiRecEventStatus_t;
typedef enum
{
tiTMOK,
tiTMFailed
} tiTMEventStatus_t;
typedef enum
{
tiDeviceRemoval,
tiDeviceArrival,
tiDeviceLoginReceived
} tiDevEventStatus_t;
typedef enum
{
tiAbortOK,
tiAbortFailed,
tiAbortDelayed,
tiAbortInProgress
} tiAbortEventStatus_t;
/*
* SCSI SAM-2 Task Attribute
*/
#define TASK_UNTAGGED 0 /* Untagged */
#define TASK_SIMPLE 1 /* Simple */
#define TASK_ORDERED 2 /* Ordered */
#define TASK_HEAD_OF_QUEUE 3 /* Head of Queue */
#define TASK_ACA 4 /* ACA */
/*
* Data direction for I/O request
*/
typedef enum
{
tiDirectionIn = 0x0000,
tiDirectionOut = 0x0001
}tiDataDirection_t;
/*
* NVRAM error subEvents for encryption
*/
typedef enum
{
tiNVRAMSuccess = 0x0000,
tiNVRAMWriteFail = 0x0001,
tiNVRAMReadFail = 0x0002,
tiNVRAMNotFound = 0x0003,
tiNVRAMAccessTimeout = 0x0004
}tiEncryptSubEvent_t;
/* Event Logging */
/* Event Severity Codes */
#define IOCTL_EVT_SEV_OFF 0x00
#define IOCTL_EVT_SEV_ALWAYS_ON 0x01
#define IOCTL_EVT_SEV_ERROR 0x02
#define IOCTL_EVT_SEV_WARNING 0x03
#define IOCTL_EVT_SEV_INFORMATIONAL 0x04
#define IOCTL_EVT_SEV_DEBUG_L1 0x05
#define IOCTL_EVT_SEV_DEBUG_L2 0x06
#define IOCTL_EVT_SEV_DEBUG_L3 0x07
/* Event Source */
#define IOCTL_EVT_SRC_HW 0xF0000000
#define IOCTL_EVT_SRC_ITSDK 0x0F000000
#define IOCTL_EVT_SRC_FW 0x00F00000
#define IOCTL_EVT_SRC_TD_LAYER 0x000F0000
#define IOCTL_EVT_SRC_TARGET 0x0000F000
#define IOCTL_EVT_SRC_OSLAYER 0x00000F00
#define IOCTL_EVT_SRC_RESERVED 0x000000F0
#define IOCTL_EVT_SRC_RESERVED1 0x0000000F
/* Event Shifter */
#define IOCTL_EVT_SRC_HW_SHIFTER 28
#define IOCTL_EVT_SRC_ITSDK_SHIFTER 24
#define IOCTL_EVT_SRC_FW_SHIFTER 20
#define IOCTL_EVT_SRC_COMMON_LAYER_SHIFTER 16
#define IOCTL_EVT_SRC_TARGET_SHIFTER 12
#define IOCTL_EVT_SRC_OSLAYER_SHIFTER 8
#define IOCTL_EVT_SRC_RESERVED_SHIFTER 4
#define IOCTL_EVT_SRC_RESERVED1_SHIFTER 0
#define EVENTLOG_MAX_MSG_LEN 110
#define EVENT_ID_MAX 0xffffffff
#define DISCOVERY_IN_PROGRESS 0xFFFFFFFF
#define TI_SSP_INDIRECT_CDB_SIZE 64
/*
* Flags in tiSuperScsiInitiatorRequest_t
*/
#define TI_SCSI_INITIATOR_DIF 0x00000001
#define TI_SCSI_INITIATOR_ENCRYPT 0x00000002
#define TI_SCSI_INITIATOR_INDIRECT_CDB 0x00000004
/*****************************************************************************
* TARGET SPECIFIC DEFINES AND ENUMS
*****************************************************************************/
/*
* Event types for ostiTargetEvent()
*/
typedef enum
{
tiTgtEventTypeCnxError,
tiTgtEventTypeDeviceChange
} tiTgtEventType_t;
/*
* Flags in tiSuperScsiTargetRequest_t
*/
#define TI_SCSI_TARGET_DIF 0x00000001
#define TI_SCSI_TARGET_MIRROR 0x00000002
#define TI_SCSI_TARGET_ENCRYPT 0x00000004
#endif /* TIDEFS_H */