#ifndef _SYS_FC4_FCP_H
#define _SYS_FC4_FCP_H
#ifdef __cplusplus
extern "C" {
#endif
#define FCP_SCSI_DATA 0x01
#define FCP_SCSI_CMD 0x02
#define FCP_SCSI_RSP 0x03
#define FCP_SCSI_XFER_RDY 0x05
typedef struct fcp_cntl {
uchar_t cntl_reserved_0;
uchar_t cntl_reserved_1 : 5,
cntl_qtype : 3;
uchar_t cntl_kill_tsk : 1,
cntl_clr_aca : 1,
cntl_reset : 1,
cntl_reserved_2 : 2,
cntl_clr_tsk : 1,
cntl_abort_tsk : 1,
cntl_reserved_3 : 1;
uchar_t cntl_reserved_4 : 6,
cntl_read_data : 1,
cntl_write_data : 1;
} fcp_cntl_t;
#define FCP_QTYPE_SIMPLE 0
#define FCP_QTYPE_HEAD_OF_Q 1
#define FCP_QTYPE_ORDERED 2
#define FCP_QTYPE_ACA_Q_TAG 4
#define FCP_QTYPE_UNTAGGED 5
typedef struct fcp_ent_addr {
ushort_t ent_addr_0;
ushort_t ent_addr_1;
ushort_t ent_addr_2;
ushort_t ent_addr_3;
} fcp_ent_addr_t;
#define FCP_CDB_SIZE 16
#define FCP_LUN_SIZE 8
typedef struct fcp_cmd {
fcp_ent_addr_t fcp_ent_addr;
fcp_cntl_t fcp_cntl;
uchar_t fcp_cdb[FCP_CDB_SIZE];
int fcp_data_len;
} fcp_cmd_t;
typedef struct fcp_status {
ushort_t reserved_0;
uchar_t reserved_1 : 4,
resid_under : 1,
resid_over : 1,
sense_len_set : 1,
rsp_len_set : 1;
uchar_t scsi_status;
} fcp_status_t;
#define resid_len_set resid_over
typedef struct fcp_rsp {
uint_t reserved_0;
uint_t reserved_1;
union {
fcp_status_t fcp_status;
uint_t i_fcp_status;
}fcp_u;
uint_t fcp_resid;
uint_t fcp_sense_len;
uint_t fcp_response_len;
} fcp_rsp_t;
#define FCP_MAX_RSP_IU_SIZE 256
struct fcp_rsp_info {
uchar_t resvd1;
uchar_t resvd2;
uchar_t resvd3;
uchar_t rsp_code;
uchar_t resvd4;
uchar_t resvd5;
uchar_t resvd6;
uchar_t resvd7;
};
#define FCP_NO_FAILURE 0x0
#define FCP_DL_LEN_MISMATCH 0x1
#define FCP_CMND_INVALID 0x2
#define FCP_DATA_RO_MISMATCH 0x3
#define FCP_TASK_MGMT_NOT_SUPPTD 0x4
#define FCP_TASK_MGMT_FAILED 0x5
typedef struct fcp_xfer_rdy {
ulong_t fcp_seq_offset;
ulong_t fcp_burst_len;
ulong_t reserved;
} fcp_xfer_rdy_t;
struct fcp_prli {
uchar_t type;
uchar_t resvd1;
uint_t orig_process_assoc_valid:1;
uint_t resp_process_assoc_valid:1;
uint_t establish_image_pair:1;
uint_t resvd2:13;
uint_t orig_process_associator;
uint_t resp_process_associator;
uint_t resvd3:25;
uint_t data_overlay_allowed:1;
uint_t initiator_fn:1;
uint_t target_fn:1;
uint_t cmd_data_mixed:1;
uint_t data_resp_mixed:1;
uint_t read_xfer_rdy_disabled:1;
uint_t write_xfer_rdy_disabled:1;
};
struct fcp_prli_acc {
uchar_t type;
uchar_t resvd1;
uint_t orig_process_assoc_valid:1;
uint_t resp_process_assoc_valid:1;
uint_t image_pair_establsihed:1;
uint_t resvd2:1;
uint_t accept_response_code:4;
uint_t resvd3:8;
uint_t orig_process_associator;
uint_t resp_process_associator;
uint_t resvd4:26;
uint_t initiator_fn:1;
uint_t target_fn:1;
uint_t cmd_data_mixed:1;
uint_t data_resp_mixed:1;
uint_t read_xfer_rdy_disabled:1;
uint_t write_xfer_rdy_disabled:1;
};
#ifdef __cplusplus
}
#endif
#endif