#ifndef _SYS_PPPT_IC_IF_H
#define _SYS_PPPT_IC_IF_H
#include <sys/stmf_defines.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
STMF_ICM_REGISTER_PROXY_PORT = 0,
STMF_ICM_DEREGISTER_PROXY_PORT,
STMF_ICM_REGISTER_LUN,
STMF_ICM_DEREGISTER_LUN,
STMF_ICM_SCSI_CMD,
STMF_ICM_SCSI_DATA,
STMF_ICM_SCSI_DATA_XFER_DONE,
STMF_ICM_SCSI_STATUS,
STMF_ICM_R2T,
STMF_ICM_STATUS,
STMF_ICM_SESSION_CREATE,
STMF_ICM_SESSION_DESTROY,
STMF_ICM_ECHO_REQUEST,
STMF_ICM_ECHO_REPLY,
STMF_ICM_LUN_ACTIVE,
STMF_ICM_MAX_MSG_TYPE
} stmf_ic_msg_type_t;
typedef uint64_t stmf_ic_msgid_t;
typedef struct stmf_ic_msg {
stmf_ic_msg_type_t icm_msg_type;
stmf_ic_msgid_t icm_msgid;
nvlist_t *icm_nvlist;
void *icm_msg;
} stmf_ic_msg_t;
typedef struct {
scsi_devid_desc_t *icrp_port_id;
uint16_t icrp_relative_port_id;
uint16_t icrp_cb_arg_len;
uint8_t *icrp_cb_arg;
} stmf_ic_reg_port_msg_t;
typedef struct {
scsi_devid_desc_t *icdp_port_id;
uint16_t icdp_cb_arg_len;
uint8_t *icdp_cb_arg;
} stmf_ic_dereg_port_msg_t;
typedef struct {
uint8_t icrl_lun_id[16];
char *icrl_lu_provider_name;
uint16_t icrl_cb_arg_len;
uint8_t *icrl_cb_arg;
} stmf_ic_reg_dereg_lun_msg_t;
typedef struct {
stmf_ic_msgid_t icsc_task_msgid;
scsi_devid_desc_t *icsc_ini_devid;
scsi_devid_desc_t *icsc_tgt_devid;
stmf_remote_port_t *icsc_rport;
uint8_t icsc_lun_id[16];
uint64_t icsc_session_id;
uint8_t icsc_task_lun_no[8];
uint32_t icsc_task_expected_xfer_length;
uint16_t icsc_task_cdb_length;
uint8_t *icsc_task_cdb;
uint8_t icsc_task_flags;
uint8_t icsc_task_priority;
uint8_t icsc_task_mgmt_function;
uint32_t icsc_immed_data_len;
uint8_t *icsc_immed_data;
} stmf_ic_scsi_cmd_msg_t;
typedef struct {
stmf_ic_msgid_t icsd_task_msgid;
uint64_t icsd_session_id;
uint8_t icsd_lun_id[16];
uint64_t icsd_data_len;
uint8_t *icsd_data;
} stmf_ic_scsi_data_msg_t;
typedef struct {
stmf_ic_msgid_t icsx_task_msgid;
uint64_t icsx_session_id;
stmf_status_t icsx_status;
} stmf_ic_scsi_data_xfer_done_msg_t;
typedef struct {
stmf_ic_msgid_t icss_task_msgid;
uint64_t icss_session_id;
uint8_t icss_lun_id[16];
uint8_t icss_response;
uint8_t icss_status;
uint8_t icss_flags;
uint32_t icss_resid;
uint8_t icss_sense_len;
uint8_t *icss_sense;
} stmf_ic_scsi_status_msg_t;
typedef struct {
stmf_ic_msgid_t icrt_task_msgid;
uint64_t icrt_session_id;
uint32_t icrt_offset;
uint32_t icrt_length;
} stmf_ic_r2t_msg_t;
typedef struct {
stmf_ic_msg_type_t ics_msg_type;
stmf_ic_msgid_t ics_msgid;
stmf_status_t ics_status;
} stmf_ic_status_msg_t;
typedef struct {
uint64_t icscd_session_id;
scsi_devid_desc_t *icscd_ini_devid;
scsi_devid_desc_t *icscd_tgt_devid;
stmf_remote_port_t *icscd_rport;
} stmf_ic_session_create_destroy_msg_t;
typedef struct {
uint8_t *icerr_data;
uint32_t icerr_datalen;
} stmf_ic_echo_request_reply_msg_t;
typedef enum {
STMF_IC_MSG_SUCCESS = 0,
STMF_IC_MSG_IC_DOWN,
STMF_IC_MSG_TIMED_OUT,
STMF_IC_MSG_INTERNAL_ERROR
} stmf_ic_msg_status_t;
void stmf_ic_ioctl_cmd(void *ibuf, uint32_t ibuf_size);
typedef
stmf_ic_msg_t *(*stmf_ic_reg_port_msg_alloc_func_t)(
scsi_devid_desc_t *port_id,
uint16_t relative_port_id,
uint16_t cb_arg_len,
uint8_t *cb_arg,
stmf_ic_msgid_t msgid);
stmf_ic_msg_t *stmf_ic_reg_port_msg_alloc(
scsi_devid_desc_t *port_id,
uint16_t relative_port_id,
uint16_t cb_arg_len,
uint8_t *cb_arg,
stmf_ic_msgid_t msgid);
typedef
stmf_ic_msg_t *(*stmf_ic_dereg_port_msg_alloc_func_t)(
scsi_devid_desc_t *port_id,
uint16_t cb_arg_len,
uint8_t *cb_arg,
stmf_ic_msgid_t msgid);
stmf_ic_msg_t *stmf_ic_dereg_port_msg_alloc(
scsi_devid_desc_t *port_id,
uint16_t cb_arg_len,
uint8_t *cb_arg,
stmf_ic_msgid_t msgid);
typedef
stmf_ic_msg_t *(*stmf_ic_reg_lun_msg_alloc_func_t)(
uint8_t *icrl_lun_id,
char *lu_provider_name,
uint16_t cb_arg_len,
uint8_t *cb_arg,
stmf_ic_msgid_t msgid);
stmf_ic_msg_t *stmf_ic_reg_lun_msg_alloc(
uint8_t *icrl_lun_id,
char *lu_provider_name,
uint16_t cb_arg_len,
uint8_t *cb_arg,
stmf_ic_msgid_t msgid);
typedef
stmf_ic_msg_t *(*stmf_ic_lun_active_msg_alloc_func_t)(
uint8_t *icrl_lun_id,
char *lu_provider_name,
uint16_t cb_arg_len,
uint8_t *cb_arg,
stmf_ic_msgid_t msgid);
stmf_ic_msg_t *stmf_ic_lun_active_msg_alloc(
uint8_t *icrl_lun_id,
char *lu_provider_name,
uint16_t cb_arg_len,
uint8_t *cb_arg,
stmf_ic_msgid_t msgid);
typedef
stmf_ic_msg_t *(*stmf_ic_dereg_lun_msg_alloc_func_t)(
uint8_t *icrl_lun_id,
char *lu_provider_name,
uint16_t cb_arg_len,
uint8_t *cb_arg,
stmf_ic_msgid_t msgid);
stmf_ic_msg_t *stmf_ic_dereg_lun_msg_alloc(
uint8_t *icrl_lun_id,
char *lu_provider_name,
uint16_t cb_arg_len,
uint8_t *cb_arg,
stmf_ic_msgid_t msgid);
typedef
stmf_ic_msg_t *(*stmf_ic_scsi_cmd_msg_alloc_func_t)(
stmf_ic_msgid_t task_msgid,
scsi_task_t *scsi_task,
uint32_t immed_data_len,
uint8_t *immed_data,
stmf_ic_msgid_t msgid);
stmf_ic_msg_t *stmf_ic_scsi_cmd_msg_alloc(
stmf_ic_msgid_t task_msgid,
scsi_task_t *scsi_task,
uint32_t immed_data_len,
uint8_t *immed_data,
stmf_ic_msgid_t msgid);
typedef
stmf_ic_msg_t *(*stmf_ic_scsi_data_msg_alloc_func_t)(
stmf_ic_msgid_t task_msgid,
uint64_t session_id,
uint8_t *lun_id,
uint64_t data_len,
uint8_t *data,
stmf_ic_msgid_t msgid);
stmf_ic_msg_t *stmf_ic_scsi_data_msg_alloc(
stmf_ic_msgid_t task_msgid,
uint64_t session_id,
uint8_t *lun_id,
uint64_t data_len,
uint8_t *data,
stmf_ic_msgid_t msgid);
typedef
stmf_ic_msg_t *(*stmf_ic_scsi_data_xfer_done_msg_alloc_func_t)(
stmf_ic_msgid_t task_msgid,
uint64_t session_id,
stmf_status_t status,
stmf_ic_msgid_t msgid);
stmf_ic_msg_t *stmf_ic_scsi_data_xfer_done_msg_alloc(
stmf_ic_msgid_t task_msgid,
uint64_t session_id,
stmf_status_t status,
stmf_ic_msgid_t msgid);
stmf_ic_msg_t *stmf_ic_scsi_status_msg_alloc(
stmf_ic_msgid_t task_msgid,
uint64_t session_id,
uint8_t *lun_id,
uint8_t response,
uint8_t status,
uint8_t flags,
uint32_t resid,
uint8_t sense_len,
uint8_t *sense,
stmf_ic_msgid_t msgid);
stmf_ic_msg_t *stmf_ic_r2t_msg_alloc(
stmf_ic_msgid_t task_msgid,
uint64_t session_id,
uint32_t offset,
uint32_t length,
stmf_ic_msgid_t msgid);
stmf_ic_msg_t *stmf_ic_status_msg_alloc(
stmf_status_t status,
stmf_ic_msg_type_t msg_type,
stmf_ic_msgid_t msgid);
typedef
stmf_ic_msg_t *(*stmf_ic_session_create_msg_alloc_func_t)(
stmf_scsi_session_t *session,
stmf_ic_msgid_t msgid);
stmf_ic_msg_t *stmf_ic_session_create_msg_alloc(
stmf_scsi_session_t *session,
stmf_ic_msgid_t msgid);
typedef
stmf_ic_msg_t *(*stmf_ic_session_destroy_msg_alloc_func_t)(
stmf_scsi_session_t *session,
stmf_ic_msgid_t msgid);
stmf_ic_msg_t *stmf_ic_session_destroy_msg_alloc(
stmf_scsi_session_t *session,
stmf_ic_msgid_t msgid);
stmf_ic_msg_t *stmf_ic_echo_request_msg_alloc(
uint32_t data_len,
uint8_t *data,
stmf_ic_msgid_t msgid);
stmf_ic_msg_t *stmf_ic_echo_reply_msg_alloc(
uint32_t data_len,
uint8_t *data,
stmf_ic_msgid_t msgid);
typedef void (*stmf_ic_msg_free_func_t)(stmf_ic_msg_t *msg);
void stmf_ic_msg_free(stmf_ic_msg_t *msg);
typedef stmf_ic_msg_status_t (*stmf_ic_tx_msg_func_t)(stmf_ic_msg_t *msg);
stmf_ic_msg_status_t stmf_ic_tx_msg(stmf_ic_msg_t *msg);
void stmf_ic_rx_msg(char *buf, size_t len);
stmf_status_t stmf_msg_rx(stmf_ic_msg_t *msg);
#ifdef __cplusplus
}
#endif
#endif