srp_cmd
uint32_t max_iu_len = sizeof(struct srp_cmd) + SRP_MAX_ADD_CDB_LEN +
struct srp_cmd *cmd = req->cmd->buf;
return sizeof(struct srp_cmd) + cmd->add_cdb_len;
len = sizeof(struct srp_cmd) + cmd->add_cdb_len +
len = sizeof(struct srp_cmd) + cmd->add_cdb_len +
struct srp_cmd *cmd;
target_host->max_cmd_len = sizeof ((struct srp_cmd *) (void *) 0L)->cdb;
BUILD_BUG_ON(sizeof(struct srp_cmd) != 48);
SRP_IMM_DATA_OFFSET = sizeof(struct srp_cmd) +
static inline void *srpt_get_desc_buf(struct srp_cmd *srp_cmd)
BUILD_BUG_ON(!__same_type(srp_cmd->add_data[0], (s8)0) &&
!__same_type(srp_cmd->add_data[0], (u8)0));
return srp_cmd->add_data + (srp_cmd->add_cdb_len & ~3);
struct srp_cmd *srp_cmd, enum dma_data_direction *dir,
if (srp_cmd->buf_fmt & 0xf)
else if (srp_cmd->buf_fmt >> 4)
if (((srp_cmd->buf_fmt & 0xf) == SRP_DATA_DESC_DIRECT) ||
((srp_cmd->buf_fmt >> 4) == SRP_DATA_DESC_DIRECT)) {
struct srp_direct_buf *db = srpt_get_desc_buf(srp_cmd);
} else if (((srp_cmd->buf_fmt & 0xf) == SRP_DATA_DESC_INDIRECT) ||
((srp_cmd->buf_fmt >> 4) == SRP_DATA_DESC_INDIRECT)) {
struct srp_indirect_buf *idb = srpt_get_desc_buf(srp_cmd);
(srp_cmd->data_out_desc_cnt + srp_cmd->data_in_desc_cnt)) {
srp_cmd->data_out_desc_cnt,
srp_cmd->data_in_desc_cnt,
} else if ((srp_cmd->buf_fmt >> 4) == SRP_DATA_DESC_IMM) {
struct srp_imm_buf *imm_buf = srpt_get_desc_buf(srp_cmd);
void *data = (void *)srp_cmd + imm_data_offset;
struct srp_cmd *srp_cmd;
srp_cmd = recv_ioctx->ioctx.buf + recv_ioctx->ioctx.offset;
cmd->tag = srp_cmd->tag;
switch (srp_cmd->task_attr) {
rc = srpt_get_desc_tbl(recv_ioctx, send_ioctx, srp_cmd, &dir,
srp_cmd->tag);
scsilun_to_int(&srp_cmd->lun), data_len,
srp_cmd->tag);
if (target_submit_prep(cmd, srp_cmd->cdb, sg, sg_cnt, NULL, 0, NULL, 0,
struct srp_cmd *srp_cmd;
srp_cmd = recv_ioctx->ioctx.buf + recv_ioctx->ioctx.offset;
opcode = srp_cmd->opcode;
if (imm_data_offset >= sizeof(struct srp_cmd)) {
DEFAULT_MAX_REQ_SIZE_1 = sizeof(struct srp_cmd)/*48*/ +
struct srp_cmd *srp_cmd;
srp_cmd = &evt_struct->iu.srp.cmd;
srp_cmd->opcode = SRP_CMD;
memcpy(srp_cmd->cdb, cmnd->cmnd, sizeof(srp_cmd->cdb));
int_to_scsilun(lun, &srp_cmd->lun);
if (!map_data_for_srp_cmd(cmnd, evt_struct, srp_cmd, hostdata->dev)) {
indirect = (struct srp_indirect_buf *) srp_cmd->add_data;
out_fmt = srp_cmd->buf_fmt >> 4;
in_fmt = srp_cmd->buf_fmt & ((1U << 4) - 1);
offsetof(struct srp_cmd, add_data) +
struct srp_cmd *srp_cmd,
srp_cmd->data_out_desc_cnt = numbuf;
srp_cmd->data_in_desc_cnt = numbuf;
srp_cmd->buf_fmt = fmt << 4;
srp_cmd->buf_fmt = fmt;
static void unmap_cmd_data(struct srp_cmd *cmd,
struct srp_cmd *srp_cmd, struct device *dev)
(struct srp_direct_buf *) srp_cmd->add_data;
set_srp_direction(cmd, srp_cmd, sg_mapped);
struct srp_cmd *srp_cmd, struct device *dev)
return map_sg_data(cmd, evt_struct, srp_cmd, dev);
struct srp_cmd *srp;
struct srp_cmd *srp = (struct srp_cmd *)iue->sbuf->buf;
struct srp_cmd *srp = (struct srp_cmd *)iue->sbuf->buf;
static int srp_indirect_data(struct ibmvscsis_cmd *cmd, struct srp_cmd *srp_cmd,
if ((dir == DMA_FROM_DEVICE && nmd == srp_cmd->data_in_desc_cnt) ||
(dir == DMA_TO_DEVICE && nmd == srp_cmd->data_out_desc_cnt)) {
static int data_out_desc_size(struct srp_cmd *cmd)
int srp_transfer_data(struct ibmvscsis_cmd *cmd, struct srp_cmd *srp_cmd,
offset = srp_cmd->add_cdb_len & ~3;
dir = srp_cmd_direction(srp_cmd);
offset += data_out_desc_size(srp_cmd);
format = srp_cmd->buf_fmt >> 4;
format = srp_cmd->buf_fmt & ((1U << 4) - 1);
md = (struct srp_direct_buf *)(srp_cmd->add_data + offset);
id = (struct srp_indirect_buf *)(srp_cmd->add_data + offset);
err = srp_indirect_data(cmd, srp_cmd, id, dir, rdma_io, dma_map,
u64 srp_data_length(struct srp_cmd *cmd, enum dma_data_direction dir)
int srp_get_desc_table(struct srp_cmd *srp_cmd, enum dma_data_direction *dir,
BUILD_BUG_ON(!__same_type(srp_cmd->add_data[0], (s8)0)
&& !__same_type(srp_cmd->add_data[0], (u8)0));
if (srp_cmd->buf_fmt & 0xf)
else if (srp_cmd->buf_fmt >> 4)
add_cdb_offset = srp_cmd->add_cdb_len & ~3;
if (((srp_cmd->buf_fmt & 0xf) == SRP_DATA_DESC_DIRECT) ||
((srp_cmd->buf_fmt >> 4) == SRP_DATA_DESC_DIRECT)) {
db = (struct srp_direct_buf *)(srp_cmd->add_data
} else if (((srp_cmd->buf_fmt & 0xf) == SRP_DATA_DESC_INDIRECT) ||
((srp_cmd->buf_fmt >> 4) == SRP_DATA_DESC_INDIRECT)) {
idb = (struct srp_indirect_buf *)(srp_cmd->add_data
int srp_transfer_data(struct ibmvscsis_cmd *, struct srp_cmd *,
u64 srp_data_length(struct srp_cmd *cmd, enum dma_data_direction dir);
int srp_get_desc_table(struct srp_cmd *srp_cmd, enum dma_data_direction *dir,
static inline int srp_cmd_direction(struct srp_cmd *cmd)
struct srp_cmd cmd;