#ifndef _QL_IOCB_H
#define _QL_IOCB_H
#ifdef __cplusplus
extern "C" {
#endif
typedef struct ql_64bit_data_seg {
uint32_t address[2];
uint32_t length;
} ql_64bit_data_seg_t;
typedef struct ql_32bit_data_seg {
uint32_t address;
uint32_t length;
} ql_32bit_data_seg_t;
#define ABORTED_ENTRY_TYPE 0
#define IOCB_CMD_TYPE_2 0x11
#define MAX_CMDSZ 16
#define CMD_TYPE_2_DATA_SEGMENTS 3
typedef struct cmd_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint8_t target_l;
uint8_t target_h;
uint8_t lun_l;
uint8_t lun_h;
uint8_t control_flags_l;
uint8_t control_flags_h;
uint8_t reserved_1[2];
uint16_t timeout;
uint16_t dseg_count;
uint8_t scsi_cdb[MAX_CMDSZ];
uint32_t byte_count;
ql_32bit_data_seg_t dseg[3];
} cmd_entry_t, request_t;
#define CF_HTAG BIT_1
#define CF_OTAG BIT_2
#define CF_STAG BIT_3
#define CF_DATA_IN BIT_5
#define CF_DATA_OUT BIT_6
#define IOCB_CMD_TYPE_7 0x18
#define CMD_TYPE_7_DATA_SEGMENTS 1
typedef struct cmd7_24xx_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint16_t n_port_hdl;
uint16_t timeout;
uint16_t dseg_count;
uint8_t reserved_1[2];
uint8_t fcp_lun[8];
uint8_t control_flags;
uint8_t task_mgmt;
uint8_t task;
uint8_t crn;
uint8_t scsi_cdb[MAX_CMDSZ];
uint32_t total_byte_count;
uint8_t target_id[3];
uint8_t vp_index;
ql_64bit_data_seg_t dseg;
} cmd7_24xx_entry_t;
#define IOCB_CMD_TYPE_6 0x48
#define CMD_TYPE_6_DATA_SEGMENTS 1
typedef struct cmd6_24xx_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint16_t n_port_hdl;
uint16_t timeout;
uint16_t dseg_count;
uint16_t rsp_length;
uint8_t fcp_lun[8];
uint16_t control_flags;
uint16_t cmnd_length;
uint32_t cmnd_address[2];
uint32_t rsp_address[2];
uint32_t total_byte_count;
uint8_t target_id[3];
uint8_t vp_index;
ql_64bit_data_seg_t dseg;
} cmd6_24xx_entry_t;
typedef struct fcp_cmnd {
uint8_t fcp_lun[8];
uint8_t crn;
uint8_t task;
uint8_t task_mgmt;
uint8_t control_flags;
uint8_t scsi_cdb[MAX_CMDSZ];
uint32_t dl;
} fcp_cmnd_t;
typedef struct cmd6_2400_dma {
fcp_cmnd_t cmd;
uint32_t cookie_list[QL_DMA_SG_LIST_LENGTH + 1][3];
} cmd6_2400_dma_t;
#define TF_TARGET_RESET BIT_13
#define TF_LUN_RESET BIT_12
#define TF_CLEAR_TASK_SET BIT_10
#define TF_ABORT_TASK_SET BIT_9
#define TA_STAG 0
#define TA_HTAG 1
#define TA_OTAG 2
#define TA_ACA 4
#define TA_UNTAGGED 5
#define CF_DSD_PTR BIT_2
#define CF_RD BIT_1
#define CF_WR BIT_0
#define IOCB_CMD_TYPE_3 0x19
#define CMD_TYPE_3_DATA_SEGMENTS 2
typedef struct cmd_3_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint8_t target_l;
uint8_t target_h;
uint8_t lun_l;
uint8_t lun_h;
uint8_t control_flags_l;
uint8_t control_flags_h;
uint8_t reserved_1[2];
uint16_t timeout;
uint16_t dseg_count;
uint8_t scsi_cdb[MAX_CMDSZ];
uint32_t byte_count;
ql_64bit_data_seg_t dseg[2];
} cmd_3_entry_t;
#define COMMAND_CHAINING_TYPE 0x15
typedef struct cmd_chaining_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint8_t reserved;
uint8_t target;
uint8_t lun_l;
uint8_t lun_h;
uint8_t control_flags_l;
uint8_t control_flags_h;
uint8_t crn;
uint8_t vp_index;
uint8_t timeout_l;
uint8_t timeout_h;
uint8_t dseg_count_l;
uint8_t dseg_count_h;
uint8_t scsi_cdb[MAX_CMDSZ];
uint32_t byte_count;
uint16_t list_type;
uint16_t base_address[2];
uint16_t list_address[4];
uint8_t reserved_2[10];
} cmd_chaining_entry_t;
#define CONTINUATION_TYPE_0 0x02
#define CONT_TYPE_0_DATA_SEGMENTS 7
typedef struct cont_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t reserved;
ql_32bit_data_seg_t dseg[7];
} cont_entry_t;
#define CONTINUATION_TYPE_1 0x0A
#define CONT_TYPE_1_DATA_SEGMENTS 5
typedef struct cont_type_1_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
ql_64bit_data_seg_t dseg[5];
} cont_type_1_entry_t;
#define STATUS_TYPE 0x03
typedef struct sts_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint8_t scsi_status_l;
uint8_t scsi_status_h;
uint16_t comp_status;
uint8_t state_flags_l;
uint8_t state_flags_h;
uint8_t status_flags_l;
uint8_t status_flags_h;
uint16_t rsp_info_length;
uint16_t req_sense_length;
uint32_t residual_length;
uint8_t rsp_info[8];
uint8_t req_sense_data[32];
} sts_entry_t, response_t;
#define RF_INV_E_ORDER BIT_5
#define RF_INV_E_COUNT BIT_4
#define RF_INV_E_PARAM BIT_3
#define RF_INV_E_TYPE BIT_2
#define RF_BUSY BIT_1
#define FCP_CONF_REQ BIT_4
#define FCP_RESID_UNDER BIT_3
#define FCP_RESID_OVER BIT_2
#define FCP_SNS_LEN_VALID BIT_1
#define FCP_RSP_LEN_VALID BIT_0
#define FCP_RSP_MASK (FCP_RESID_UNDER | FCP_RESID_OVER | \
FCP_RSP_LEN_VALID)
#define SF_ARQ_DONE BIT_5
#define SF_GOT_STATUS BIT_4
#define SF_XFERRED_DATA BIT_3
#define SF_SENT_CMD BIT_2
#define SF_GOT_TARGET BIT_1
#define SF_GOT_BUS BIT_0
#define SF_NO_FAST_POST BIT_7
#define SF_DATA_OUT BIT_6
#define SF_DATA_IN BIT_5
#define SF_SIMPLE_Q BIT_3
#define SF_ORDERED_Q BIT_2
#define SF_HEAD_OF_Q BIT_1
#define SF_ACA_Q BIT_0
#define CS_COMPLETE 0x0
#define CS_INCOMPLETE 0x1
#define CS_DMA_ERROR 0x2
#define CS_PORT_ID_CHANGE 0x2
#define CS_TRANSPORT 0x3
#define CS_RESET 0x4
#define CS_ABORTED 0x5
#define CS_TIMEOUT 0x6
#define CS_DATA_OVERRUN 0x7
#define CS_INVALID_RX_ID 0x8
#define CS_DATA_REASSEM_ERROR 0x11
#define CS_ABTS_REC 0x13
#define CS_DATA_UNDERRUN 0x15
#define CS_QUEUE_FULL 0x1C
#define CS_PORT_UNAVAILABLE 0x28
#define CS_PORT_LOGGED_OUT 0x29
#define CS_PORT_CONFIG_CHG 0x2A
#define CS_PORT_BUSY 0x2B
#define CS_RESOUCE_UNAVAILABLE 0x2C
#define CS_TASK_MGMT_OVERRUN 0x30
#define CS_LOGIN_LOGOUT_ERROR 0x31
#define CS_SEQ_COMPLETE 0x40
#define CS_ABORTED_SEQ_REC 0x47
#define CS_DEV_NOT_READY 0x81
#define CS_INVALID_PARAMETER 0x102
#define CS_ERROR_RESOURCE 0x103
#define CS_IP_NOT_INITIALIZED 0x104
#define CS_BAD_PAYLOAD 0x180
#define CS_UNKNOWN 0x181
#define CS_CMD_FAILED 0x182
#define CS_LOOP_DOWN_ABORT 0x183
#define CS_FCP_RESPONSE_ERROR 0x184
#define CS_DEVICE_UNAVAILABLE 0x185
typedef struct sts_24xx_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint16_t comp_status;
uint16_t ox_id;
uint32_t residual_length;
uint16_t reserved;
uint8_t state_flags_l;
uint8_t state_flags_h;
uint16_t reserved_1;
uint8_t scsi_status_l;
uint8_t scsi_status_h;
uint32_t fcp_rsp_residual_count;
uint32_t fcp_sense_length;
uint32_t fcp_rsp_data_length;
uint8_t rsp_sense_data[28];
} sts_24xx_entry_t;
#define STATUS_CONT_TYPE 0x10
typedef struct sts_cont_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint8_t req_sense_data[60];
} sts_cont_entry_t;
#define MARKER_TYPE 0x04
typedef struct mrk_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t sys_define_2;
uint8_t target_l;
uint8_t target_h;
uint8_t modifier;
uint8_t reserved_1;
uint8_t sequence_number[2];
uint8_t lun_l;
uint8_t lun_h;
uint8_t reserved_2[48];
} mrk_entry_t;
#define MK_SYNC_ID_LUN 0
#define MK_SYNC_ID 1
#define MK_SYNC_ALL 2
#define MK_SYNC_LIP 3
typedef struct marker_24xx_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint16_t n_port_hdl;
uint8_t modifier;
uint8_t reserved[2];
uint8_t vp_index;
uint8_t reserved_1[2];
uint8_t fcp_lun[8];
uint8_t reserved_2[40];
} marker_24xx_entry_t;
#define MS_TYPE 0x29
#define MS_DATA_SEGMENTS 1
typedef struct ms_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint8_t loop_id_l;
uint8_t loop_id_h;
uint16_t comp_status;
uint8_t control_flags_l;
uint8_t control_flags_h;
uint8_t reserved_1[2];
uint16_t timeout;
uint8_t cmd_dseg_count_l;
uint8_t cmd_dseg_count_h;
uint16_t total_dseg_count;
uint8_t reserved_2[10];
uint32_t resp_byte_count;
uint32_t cmd_byte_count;
ql_64bit_data_seg_t dseg[2];
} ms_entry_t;
#define CF_ELS_PASSTHROUGH BIT_7
#define CT_PASSTHRU_TYPE 0x29
#define CT_PASSTHRU_DATA_SEGMENTS 1
typedef struct ct_passthru_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint16_t status;
uint16_t n_port_hdl;
uint16_t cmd_dseg_count;
uint8_t vp_index;
uint8_t reserved;
uint16_t timeout;
uint16_t reserved_1;
uint16_t resp_dseg_count;
uint8_t reserved_2[10];
uint32_t resp_byte_count;
uint32_t cmd_byte_count;
ql_64bit_data_seg_t dseg[2];
} ct_passthru_entry_t;
#define ELS_PASSTHRU_TYPE 0x53
typedef struct els_passthru_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint16_t reserved_8_9;
uint16_t n_port_hdl;
uint16_t xmt_dseg_count;
uint8_t vp_index;
uint8_t sof_type;
uint32_t rcv_exch_address;
uint16_t rcv_dseg_count;
uint8_t els_cmd_opcode;
uint8_t reserved_17;
uint8_t d_id_7_0;
uint8_t d_id_15_8;
uint8_t d_id_23_16;
uint8_t s_id_23_16;
uint8_t s_id_7_0;
uint8_t s_id_15_8;
uint16_t control_flags;
uint32_t rcv_payld_data_bcnt;
uint32_t xmt_payld_data_bcnt;
ql_64bit_data_seg_t dseg[2];
} els_passthru_entry_t;
typedef struct els_passthru_entry_rsp {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint16_t comp_status;
uint16_t n_port_hdl;
uint16_t reserved_c_d;
uint8_t vp_index;
uint8_t sof_type;
uint32_t rcv_exch_addr;
uint16_t reserved_14_15;
uint8_t els_cmd_opcode;
uint8_t reserved_17;
uint8_t d_id_7_0;
uint8_t d_id_15_8;
uint8_t d_id_23_16;
uint8_t s_id_23_16;
uint8_t s_id_7_0;
uint8_t s_id_15_8;
uint16_t control_flags;
uint32_t total_data_bcnt;
uint32_t error_subcode1;
uint32_t error_subcode2;
uint8_t reserved_2c_3f[20];
} els_passthru_entry_rsp_t;
#define TASK_MGMT_TYPE 0x14
typedef struct task_mgmt_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint16_t n_port_hdl;
uint16_t reserved;
uint16_t delay;
uint16_t timeout;
uint8_t fcp_lun[8];
uint32_t control_flags;
uint8_t reserved_1[20];
uint8_t target_id[3];
uint8_t vp_index;
uint8_t reserved_2[12];
} task_mgmt_entry_t;
#define CF_DO_NOT_SEND BIT_31
#define CF_LUN_RESET BIT_4
#define CF_ABORT_TASK_SET BIT_3
#define CF_CLEAR_TASK_SET BIT_2
#define CF_TARGET_RESET BIT_1
#define CF_CLEAR_ACA BIT_0
#define ABORT_CMD_TYPE 0x33
typedef struct abort_cmd_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint16_t n_port_hdl;
uint8_t options;
uint8_t options_h;
uint32_t cmd_handle;
uint8_t reserved[32];
uint8_t target_id[3];
uint8_t vp_index;
uint8_t reserved_1[12];
} abort_cmd_entry_t;
#define AF_NO_ABTS BIT_0
#define LOG_TYPE 0x52
typedef struct log_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint16_t status;
uint16_t n_port_hdl;
uint16_t control_flags;
uint8_t vp_index;
uint8_t reserved;
uint8_t port_id[3];
uint8_t rsp_size;
uint32_t io_param[11];
} log_entry_t;
#define CF_CMD_PLOGI 0x00
#define CF_CMD_PRLI 0x01
#define CF_CMD_PDISC 0x02
#define CF_CMD_ADISC 0x03
#define CF_CMD_LOGO 0x08
#define CF_CMD_PRLO 0x09
#define CF_CMD_TPRLO 0x0A
#define CFO_COND_PLOGI BIT_4
#define CFO_SKIP_PRLI BIT_5
#define CFO_COMMON_FEATURES BIT_7
#define CFO_CLASS_2 BIT_8
#define CFO_FCP_2_OVR BIT_9
#define CFO_IMPLICIT_LOGO BIT_4
#define CFO_IMPLICIT_LOGO_ALL BIT_5
#define CFO_EXPLICIT_LOGO BIT_6
#define CFO_FREE_N_PORT_HANDLE BIT_7
#define CFO_IMPLICIT_PRLO BIT_4
#define CS0_NO_LINK 0x01
#define CS0_NO_IOCB 0x02
#define CS0_NO_EXCH_CTRL_BLK 0x03
#define CS0_COMMAND_FAILED 0x04
#define CS0_NO_FABRIC_PRESENT 0x05
#define CS0_FIRMWARE_NOT_READY 0x07
#define CS0_PORT_NOT_LOGGED_IN 0x09
#define CS0_NO_PCB_ALLOCATED 0x0A
#define CS0_ELS_REJECT_RECEIVED 0x18
#define CS0_CMD_PARAMETER_ERROR 0x19
#define CS0_PORT_ID_USED 0x1A
#define CS0_N_PORT_HANDLE_USED 0x1B
#define CS0_NO_N_PORT_HANDLE_AVAILABLE 0x1C
#define CS0_NO_FLOGI_ACC 0x1F
#define CS1_PLOGI_FAILED 0x02
#define CS1_PLOGI_RESPONSE_FAILED 0x03
#define CS1_PRLI_FAILED 0x04
#define CS1_PRLI_RESPONSE_FAILED 0x05
#define CS1_COMMAND_LOGGED_OUT 0x07
#define ENABLE_LUN_TYPE 0xB
typedef struct enable_lun_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint8_t reserved[8];
uint8_t status;
uint8_t reserved_1;
uint8_t command_count;
uint8_t immediate_notify_count;
uint8_t reserved_2[2];
uint8_t timeout_l;
uint8_t timeout_h;
uint8_t reserved_3[40];
} enable_lun_entry_t;
#define MODIFY_LUN_TYPE 0xC
typedef struct modify_lun_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint8_t reserved[2];
uint8_t operators;
uint8_t reserved_1[5];
uint8_t status;
uint8_t reserved_2;
uint8_t command_count;
uint8_t immediate_notify_count;
uint8_t reserved_3[2];
uint8_t timeout_l;
uint8_t timeout_h;
uint8_t reserved_4[40];
} modify_lun_entry_t;
#define IMMEDIATE_NOTIFY_TYPE 0xD
typedef struct immediate_notify_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint8_t initiator_id_l;
uint8_t initiator_id_h;
uint8_t lun_l;
uint8_t lun_h;
uint8_t reserved_1[4];
uint16_t status;
uint8_t task_flags_l;
uint8_t task_flags_h;
uint16_t sequence_id;
uint8_t reserved_3[40];
uint16_t ox_id;
} immediate_notify_entry_t;
typedef struct immd_notify_24xx_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t reserved;
uint16_t n_port_hdl;
uint16_t reserved_1;
uint16_t flags;
uint16_t srr_rx_id;
uint16_t status;
uint8_t status_subcode;
uint8_t reserved_2;
uint32_t receive_exchange_address;
uint32_t srr_relative_offset;
uint16_t srr_iu;
uint16_t srr_ox_id;
uint8_t reserved_3[19];
uint8_t vp_index;
uint8_t reserved_4[10];
uint16_t ox_id;
} immd_notify_24xx_entry_t;
#define NOTIFY_ACKNOWLEDGE_TYPE 0xE
typedef struct notify_acknowledge_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint8_t initiator_id_l;
uint8_t initiator_id_h;
uint8_t reserved_1[2];
uint8_t flags_l;
uint8_t flags_h;
uint8_t reserved_2[2];
uint16_t status;
uint8_t task_flags_l;
uint8_t task_flags_h;
uint16_t sequence_id;
uint8_t reserved_3[42];
} notify_acknowledge_entry_t;
typedef struct notify_ack_24xx_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint16_t n_port_hdl;
uint16_t reserved_1;
uint16_t flags;
uint16_t srr_rx_id;
uint16_t status;
uint8_t status_subcode;
uint8_t reserved_2;
uint32_t receive_exchange_address;
uint32_t srr_relative_offset;
uint16_t srr_iu;
uint16_t srr_flags;
uint8_t reserved_3[19];
uint8_t vp_index;
uint8_t srr_reject_vendor_unique;
uint8_t srr_reject_code_explanation;
uint8_t srr_reject_code;
uint8_t reserved_4[7];
uint16_t ox_id;
} notify_ack_24xx_entry_t;
#define ATIO_TYPE 0x16
typedef struct atio_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint8_t initiator_id_l;
uint8_t initiator_id_h;
uint16_t rx_id;
uint8_t flags_l;
uint8_t flags_h;
uint16_t status;
uint8_t reserved_1;
uint8_t task_codes : 3,
reserved_2 : 5;
uint8_t task_flags;
uint8_t execution_codes;
uint8_t cdb[MAX_CMDSZ];
uint32_t data_length;
uint8_t lun_l;
uint8_t lun_h;
uint8_t reserved_3[20];
uint16_t ox_id;
} atio_entry_t;
#define ATIO_24xx_TYPE 0x06
typedef struct atio_24xx_entry {
uint8_t entry_type;
uint8_t entry_count;
uint16_t len_attr;
uint32_t receive_exchange_address;
uint8_t frame_hdr[24];
uint8_t payload[32];
} atio_24xx_entry_t;
#define CTIO_TYPE_2 0x17
#define CTIO_TYPE_3 0x1F
typedef struct ctio_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint8_t initiator_id_l;
uint8_t initiator_id_h;
uint16_t rx_id;
uint8_t flags_l;
uint8_t flags_h;
uint16_t status;
uint16_t timeout;
uint8_t dseg_count_l;
uint8_t dseg_count_h;
uint32_t relative_offset;
uint32_t residual_transfer_length;
uint8_t reserved_1[4];
union {
struct {
uint8_t reserved_2[2];
uint8_t scsi_status_l;
uint8_t scsi_status_h;
uint32_t byte_count;
ql_32bit_data_seg_t dseg[3];
}s0_32bit;
struct {
uint8_t reserved_3[2];
uint8_t scsi_status_l;
uint8_t scsi_status_h;
uint32_t byte_count;
ql_64bit_data_seg_t dseg[2];
}s0_64bit;
struct {
uint8_t sense_length_l;
uint8_t sense_length_h;
uint8_t scsi_status_l;
uint8_t scsi_status_h;
uint8_t response_length_l;
uint8_t response_length_h;
uint8_t response_info[26];
}s1;
struct {
uint8_t reserved_4[2];
uint32_t response_length;
uint32_t response_pointer;
uint8_t reserved[16];
}s2;
}type;
} ctio_entry_t;
#define CTIO_24xx_TYPE 0x12
typedef struct ctio_snd_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint16_t n_port_hdl;
uint16_t timeout;
uint16_t dseg_count;
uint8_t vp_index;
uint8_t flags;
uint8_t initiator_id[3];
uint8_t reserved_1;
uint32_t receive_exchange_address;
union {
struct {
uint16_t reserved_2;
uint16_t flags;
uint32_t residual_length;
uint16_t ox_id;
uint16_t scsi_status;
uint32_t relative_offset;
uint32_t reserved_3;
uint32_t transfer_length;
uint32_t reserved_4;
ql_64bit_data_seg_t dseg;
}s0;
struct {
uint16_t sense_length;
uint16_t flags;
uint32_t residual_length;
uint16_t ox_id;
uint16_t scsi_status;
uint16_t response_length;
uint16_t reserved_2;
uint8_t rsp_sense_data[24];
}s1;
struct {
uint16_t reserved_2;
uint16_t flags;
uint32_t residual_length;
uint16_t ox_id;
uint8_t reserved_3[10];
uint32_t transfer_length;
uint32_t reserved_4;
ql_64bit_data_seg_t dseg;
}s2;
}type;
} ctio_snd_entry_t;
typedef struct ctio_rcv_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint16_t status;
uint16_t timeout;
uint16_t dseg_count;
uint8_t reserved[6];
uint8_t vp_index;
uint8_t flags;
uint8_t initiator_id[3];
uint8_t reserved_1;
uint32_t receive_exchange_address;
union {
struct {
uint16_t reserved_2;
uint16_t flags;
uint32_t residual_length;
uint16_t ox_id;
uint16_t scsi_status;
uint32_t relative_offset;
uint32_t reserved_3;
uint32_t transfer_length;
uint32_t reserved_4;
ql_64bit_data_seg_t dseg;
}s0;
struct {
uint16_t sense_length;
uint16_t flags;
uint32_t residual_length;
uint16_t ox_id;
uint16_t scsi_status;
uint16_t response_length;
uint16_t reserved_2;
uint8_t rsp_sense_data[24];
}s1;
struct {
uint16_t reserved_2;
uint16_t flags;
uint32_t residual_length;
uint16_t ox_id;
uint8_t reserved_3[10];
uint32_t transfer_length;
uint32_t reserved_4;
ql_64bit_data_seg_t dseg;
}s2;
}type;
} ctio_rcv_entry_t;
#define IP_TYPE 0x13
#define IP_DATA_SEGMENTS 3
typedef struct ip_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint8_t loop_id_l;
uint8_t loop_id_h;
uint16_t comp_status;
uint8_t control_flags_l;
uint8_t control_flags_h;
uint8_t reserved_1[2];
uint16_t timeout;
uint16_t dseg_count;
uint8_t reserved_2[16];
uint32_t byte_count;
ql_32bit_data_seg_t dseg[3];
} ip_entry_t;
#define IP_A64_TYPE 0x1B
#define IP_A64_DATA_SEGMENTS 2
typedef struct ip_a64_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint8_t reserved;
uint8_t loop_id;
uint16_t comp_status;
uint8_t control_flags_l;
uint8_t control_flags_h;
uint8_t reserved_1[2];
uint16_t timeout;
uint16_t dseg_count;
uint8_t reserved_2[16];
uint32_t byte_count;
ql_64bit_data_seg_t dseg[2];
} ip_a64_entry_t;
#define IP_CMD_TYPE 0x3B
#define IP_CMD_DATA_SEGMENTS 1
typedef struct ip_cmd_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint16_t hdl_status;
uint16_t timeout_hdl;
uint16_t dseg_count;
uint8_t reserved_1[6];
uint32_t exch_addr;
uint16_t control_flags;
uint16_t frame_hdr_cntrl_flgs;
uint8_t reserved_2[12];
uint32_t sys_define_2;
uint32_t byte_count;
uint8_t reserved_3[4];
ql_64bit_data_seg_t dseg;
} ip_cmd_entry_t;
#define IPCF_TERMINATE_EXCH BIT_1
#define IPCF_FIRST_SEQ BIT_5
#define IPCF_LAST_SEQ BIT_4
#define IP_RCVBUF_HANDLES 24
#define IP_RECEIVE_TYPE 0x23
typedef struct ip_rcv_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t segment_count;
uint8_t entry_status;
uint8_t s_id[3];
uint8_t reserved[2];
uint8_t loop_id;
uint16_t comp_status;
uint8_t class_of_srv_l;
uint8_t class_of_srv_h;
uint16_t seq_length;
uint16_t buffer_handle[IP_RCVBUF_HANDLES];
} ip_rcv_entry_t;
#define IP_RCVBUF_CONT_HANDLES 30
#define IP_RECEIVE_CONT_TYPE 0x2B
typedef struct ip_rcv_cont_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t reserved;
uint8_t entry_status;
uint16_t buffer_handle[IP_RCVBUF_CONT_HANDLES];
} ip_rcv_cont_entry_t;
#define IP_24XX_RCVBUF_HANDLES 4
#define IP_24XX_RECEIVE_TYPE 0x3c
typedef struct ip_rcv_24xx_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t segment_count;
uint8_t entry_status;
uint8_t s_id[3];
uint8_t reserved[1];
uint16_t comp_status;
uint16_t n_port_hdl;
uint8_t class_of_srv_l;
uint8_t class_of_srv_h;
uint16_t seq_length;
uint16_t buffer_handle[IP_24XX_RCVBUF_HANDLES];
} ip_rcv_24xx_entry_t;
typedef struct rcvbuf {
uint32_t bufp[2];
uint16_t handle;
uint16_t reserved;
} rcvbuf_t;
#define IP_POOL_BUFFERS 4
#define IP_BUF_POOL_TYPE 0x3d
typedef struct ip_buf_pool_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint16_t status;
uint16_t buffer_pool_id;
uint16_t option;
uint8_t buffer_count;
uint8_t buffer_count_h;
rcvbuf_t buffers[IP_POOL_BUFFERS];
} ip_buf_pool_entry_t;
#define VP_MODIFY_TYPE 0x31
typedef struct vp_modify_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint16_t reserved;
uint16_t status;
uint8_t command;
uint8_t vp_count;
uint8_t first_vp_index;
uint8_t second_vp_index;
uint8_t first_options;
uint8_t first_hard_prev_addr;
uint8_t reserved_2[2];
uint8_t first_port_name[8];
uint8_t first_node_name[8];
uint8_t second_options;
uint8_t second_hard_prev_addr;
uint8_t reserved_3[2];
uint8_t second_port_name[8];
uint8_t second_node_name[8];
uint8_t reserved_4[6];
uint16_t fcf_index;
} vp_modify_entry_t;
#define VPM_MODIFY 0x0
#define VPM_MODIFY_ENABLE 0x1
#define VP_CONTROL_TYPE 0x30
typedef struct vp_control_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint16_t vp_index_failed;
uint16_t status;
uint8_t command;
uint8_t command_h;
uint8_t vp_count;
uint8_t vp_count_h;
uint8_t vp_index[16];
uint8_t reserved[30];
uint16_t fcf_index;
} vp_control_entry_t;
#define VPC_ENABLE 0x0
#define VPC_DISABLE 0x8
#define VPC_DISABLE_INIT 0x9
#define VPC_DISABLE_LOGOUT 0xa
#define VPC_DISABLE_LOGOUT_ALL 0xb
#define REPORT_ID_TYPE 0x32
typedef struct report_id_0 {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint8_t vp_acquired;
uint8_t vp_setup;
uint8_t reserved[2];
uint8_t port_id[3];
uint8_t format;
uint8_t vp_index[16];
uint8_t reserved_1[32];
} report_id_0_t;
typedef struct report_id_1 {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint16_t vp_count;
uint8_t vp_index;
uint8_t vp_status;
uint8_t port_id[3];
uint8_t format;
uint8_t reserved[48];
} report_id_1_t;
typedef struct report_id_acq {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint8_t vp_acquired;
uint8_t vp_setup;
uint8_t vp_index;
uint8_t vp_status;
uint8_t port_id[3];
uint8_t format;
uint8_t status_subcode;
uint8_t flags;
uint16_t fip_flags;
uint16_t fcf_index;
uint16_t mac[3];
uint8_t reserved[4];
uint8_t ls_rjt_subcode;
uint8_t ls_rjt_explanation;
uint8_t ls_rjt_reason_code;
uint8_t reserved_1[29];
} report_id_acq_t;
#define VERIFY_MENLO_TYPE 0x1b
typedef struct vfy_menlo_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint16_t options_status;
uint16_t failure_code;
uint16_t dseg_count;
uint16_t reserved_1[3];
uint32_t fw_version;
uint32_t exch_addr;
uint32_t reserved_2[3];
uint32_t fw_size;
uint32_t fw_sequence_size;
uint32_t relative_offset;
ql_64bit_data_seg_t dseg;
} vfy_menlo_entry_t;
#define VMO_DSD_CHAINING BIT_15
#define VM_END_OF_DATA BIT_14
#define VMF_DIAGNOSTIC_FW BIT_3
#define VMF_DO_NOT_RESET BIT_2
#define VMF_FORCE_UPDATE_FW BIT_1
#define VMF_DO_NOT_UPDATE_FW BIT_0
#define MENLO_DATA_TYPE 0x2b
typedef struct menlo_data_entry {
uint8_t entry_type;
uint8_t entry_count;
uint8_t sys_define;
uint8_t entry_status;
uint32_t handle;
uint16_t options_status;
uint16_t failure_code;
uint16_t dseg_count;
uint16_t reserved_1[3];
uint32_t parameter_1;
uint32_t parameter_2;
uint32_t parameter_3;
uint32_t reserved_2[3];
uint32_t total_byte_count;
uint32_t reserved_3;
ql_64bit_data_seg_t dseg;
} menlo_data_entry_t;
typedef union ql_mbx_iocb {
cmd_entry_t cmd;
cmd_3_entry_t cmd3;
cmd7_24xx_entry_t cmd24;
ms_entry_t ms;
ct_passthru_entry_t ms24;
abort_cmd_entry_t abo;
task_mgmt_entry_t mgmt;
sts_entry_t sts;
sts_24xx_entry_t sts24;
log_entry_t log;
vp_control_entry_t vpc;
vp_modify_entry_t vpm;
vfy_menlo_entry_t mvfy;
menlo_data_entry_t mdata;
els_passthru_entry_t els;
} ql_mbx_iocb_t;
void ql_start_iocb(ql_adapter_state_t *, ql_srb_t *);
int ql_marker(ql_adapter_state_t *, uint16_t, ql_lun_t *lq, uint8_t);
void ql_isp_rcvbuf(ql_adapter_state_t *);
void ql_command_iocb(ql_adapter_state_t *, ql_request_q_t *, ql_srb_t *,
void *);
void ql_ms_iocb(ql_adapter_state_t *, ql_request_q_t *, ql_srb_t *, void *);
void ql_ip_iocb(ql_adapter_state_t *, ql_request_q_t *, ql_srb_t *, void *);
void ql_command_24xx_iocb(ql_adapter_state_t *, ql_request_q_t *, ql_srb_t *,
void *);
void ql_ms_24xx_iocb(ql_adapter_state_t *, ql_request_q_t *, ql_srb_t *,
void *);
void ql_ip_24xx_iocb(ql_adapter_state_t *, ql_request_q_t *, ql_srb_t *,
void *);
#ifdef __cplusplus
}
#endif
#endif