int scsi_tgt_uspace_send_cmd(struct scsi_cmnd *cmd, u64 itn_id, struct scsi_lun *lun, u64 tag) { struct Scsi_Host *shost = scsi_tgt_cmd_to_host(cmd); struct tgt_event ev; int err; memset(&ev, 0, sizeof(ev)); ev.p.cmd_req.host_no = shost->host_no; ev.p.cmd_req.itn_id = itn_id; ev.p.cmd_req.data_len = scsi_bufflen(cmd); memcpy(ev.p.cmd_req.scb, cmd->cmnd, sizeof(ev.p.cmd_req.scb)); memcpy(ev.p.cmd_req.lun, lun, sizeof(ev.p.cmd_req.lun)); ev.p.cmd_req.attribute = cmd->tag; ev.p.cmd_req.tag = tag; dprintk("%p %d %u %x %llx\n", cmd, shost->host_no, ev.p.cmd_req.data_len, cmd->tag, (unsigned long long) ev.p.cmd_req.tag); err = tgt_uspace_send_event(TGT_KEVENT_CMD_REQ, &ev); if (err) eprintk("tx buf is full, could not send\n"); return err; }
int scsi_tgt_uspace_send_status(struct scsi_cmnd *cmd, u64 tag) { struct Scsi_Host *shost = scsi_tgt_cmd_to_host(cmd); struct tgt_event ev; int err; memset(&ev, 0, sizeof(ev)); ev.p.cmd_done.host_no = shost->host_no; ev.p.cmd_done.tag = tag; ev.p.cmd_done.result = cmd->result; dprintk("%p %d %llu %u %x\n", cmd, shost->host_no, (unsigned long long) ev.p.cmd_req.tag, ev.p.cmd_req.data_len, cmd->tag); err = tgt_uspace_send_event(TGT_KEVENT_CMD_DONE, &ev); if (err) eprintk("tx buf is full, could not send\n"); return err; }