root/usr/src/uts/common/io/bnxe/577xx/drivers/common/lm/fw/57xx_iscsi_rfc_constants.h
#ifndef __57XX_ISCSI_RFC_CONSTANTS_H_
#define __57XX_ISCSI_RFC_CONSTANTS_H_

/**
* This file defines SCSI/iSCSI RFC constants
*/

/* iSCSI request op codes */
#define ISCSI_OPCODE_NOP_OUT        (0 | 0x40)
#define ISCSI_OPCODE_SCSI_CMD       (1)
#define ISCSI_OPCODE_TMF_REQUEST    (2 | 0x40)
#define ISCSI_OPCODE_LOGIN_REQUEST  (3 | 0x40)
#define ISCSI_OPCODE_TEXT_REQUEST   (4 | 0x40)
#define ISCSI_OPCODE_DATA_OUT       (5)
#define ISCSI_OPCODE_LOGOUT_REQUEST (6 | 0x00)

/* iSCSI response/messages op codes */
#define ISCSI_OPCODE_NOP_IN             (0x20)
#define ISCSI_OPCODE_SCSI_RESPONSE      (0x21)
#define ISCSI_OPCODE_TMF_RESPONSE       (0x22)
#define ISCSI_OPCODE_LOGIN_RESPONSE     (0x23)
#define ISCSI_OPCODE_TEXT_RESPONSE      (0x24)
#define ISCSI_OPCODE_DATA_IN            (0x25)
#define ISCSI_OPCODE_LOGOUT_RESPONSE    (0x26)
#define ISCSI_OPCODE_R2T                (0x31)
#define ISCSI_OPCODE_ASYNC_MSG          (0x32)
#define ISCSI_OPCODE_REJECT             (0x3f)

/* iSCSI stages */
#define ISCSI_STAGE_SECURITY_NEGOTIATION            (0)
#define ISCSI_STAGE_LOGIN_OPERATIONAL_NEGOTIATION   (1)
#define ISCSI_STAGE_FULL_FEATURE_PHASE              (3)

/* SCSI command response codes */
#define ISCSI_SCSI_CMD_RESPONSE_CMD_COMPLETED   (0x00)
#define ISCSI_SCSI_CMD_RESPONSE_TARGET_FAILURE  (0x01)

/* SCSI command status codes */
#define ISCSI_SCSI_CMD_STATUS_GOOD              (0x00)
#define ISCSI_SCSI_CMD_STATUS_CHECK_CONDITION   (0x02)
#define ISCSI_SCSI_CMD_STATUS_INTERMIDIATE      (0x10)
#define ISCSI_SCSI_CMD_STATUS_ACA_ACTIVE                (0x30)

/* TMF codes */
#define ISCSI_TMF_ABORT_TASK            (1)
#define ISCSI_TMF_LOGICAL_UNIT_RESET    (5)
#define ISCSI_TMF_FUNCTION_MASK         (0x7F)

/* TMF response codes */
#define ISCSI_TMF_RESPONSE_FUNCTION_COMPLETE                (0x00)
#define ISCSI_TMF_RESPONSE_TASK_DOESNT_EXIST                (0x01)
#define ISCSI_TMF_RESPONSE_LUN_DOESNT_EXIST                 (0x02)
#define ISCSI_TMF_RESPONSE_TASK_STILL_ALLEGIANT             (0x03)
#define ISCSI_TMF_RESPONSE_FUNCTION_NOT_SUPPORTED           (0x05)
#define ISCSI_TMF_RESPONSE_FUNCTION_AUTHORIZATION_FAILED    (0x06)
#define ISCSI_TMF_RESPONSE_FUNCTION_REJECTED                (0xff)

/* Logout reason codes */
#define ISCSI_LOGOUT_REASON_CLOSE_CONNECTION    (1)

/* Logout response codes */
#define ISCSI_LOGOUT_RESPONSE_CONNECTION_CLOSED (0)
#define ISCSI_LOGOUT_RESPONSE_CID_NOT_FOUND     (1)
#define ISCSI_LOGOUT_RESPONSE_CLEANUP_FAILED    (3)

/* iSCSI parameter defaults */
#define ISCSI_DEFAULT_HEADER_DIGEST         (0)
#define ISCSI_DEFAULT_DATA_DIGEST           (0)
#define ISCSI_DEFAULT_INITIAL_R2T           (1)
#define ISCSI_DEFAULT_IMMEDIATE_DATA        (1)
#define ISCSI_DEFAULT_MAX_PDU_LENGTH        (0x2000)
#define ISCSI_DEFAULT_FIRST_BURST_LENGTH    (0x10000)
#define ISCSI_DEFAULT_MAX_BURST_LENGTH      (0x40000)
#define ISCSI_DEFAULT_MAX_OUTSTANDING_R2T   (1)

/* iSCSI parameter limits */
#define ISCSI_MIN_VAL_MAX_PDU_LENGTH        (0x200)
#define ISCSI_MAX_VAL_MAX_PDU_LENGTH        (0xffffff)
#define ISCSI_MIN_VAL_BURST_LENGTH          (0x200)
#define ISCSI_MAX_VAL_BURST_LENGTH          (0xffffff)
#define ISCSI_MIN_VAL_MAX_OUTSTANDING_R2T   (1)
#define ISCSI_MAX_VAL_MAX_OUTSTANDING_R2T   (0xff) // 0x10000 according to RFC

#endif /*__57XX_ISCSI_RFC_CONSTANTS_H_ */