Lines Matching refs:sc

39 	struct scsi_cmnd *sc;  member
129 static void virtscsi_compute_resid(struct scsi_cmnd *sc, u32 resid) in virtscsi_compute_resid() argument
134 if (!scsi_bidi_cmnd(sc)) { in virtscsi_compute_resid()
135 scsi_set_resid(sc, resid); in virtscsi_compute_resid()
139 scsi_in(sc)->resid = min(resid, scsi_in(sc)->length); in virtscsi_compute_resid()
140 scsi_out(sc)->resid = resid - scsi_in(sc)->resid; in virtscsi_compute_resid()
151 struct scsi_cmnd *sc = cmd->sc; in virtscsi_complete_cmd() local
154 scsi_target(sc->device)->hostdata; in virtscsi_complete_cmd()
156 dev_dbg(&sc->device->sdev_gendev, in virtscsi_complete_cmd()
158 sc, resp->response, resp->status, resp->sense_len); in virtscsi_complete_cmd()
160 sc->result = resp->status; in virtscsi_complete_cmd()
161 virtscsi_compute_resid(sc, virtio32_to_cpu(vscsi->vdev, resp->resid)); in virtscsi_complete_cmd()
164 set_host_byte(sc, DID_OK); in virtscsi_complete_cmd()
167 set_host_byte(sc, DID_ERROR); in virtscsi_complete_cmd()
170 set_host_byte(sc, DID_ABORT); in virtscsi_complete_cmd()
173 set_host_byte(sc, DID_BAD_TARGET); in virtscsi_complete_cmd()
176 set_host_byte(sc, DID_RESET); in virtscsi_complete_cmd()
179 set_host_byte(sc, DID_BUS_BUSY); in virtscsi_complete_cmd()
182 set_host_byte(sc, DID_TRANSPORT_DISRUPTED); in virtscsi_complete_cmd()
185 set_host_byte(sc, DID_TARGET_FAILURE); in virtscsi_complete_cmd()
188 set_host_byte(sc, DID_NEXUS_FAILURE); in virtscsi_complete_cmd()
191 scmd_printk(KERN_WARNING, sc, "Unknown response %d", in virtscsi_complete_cmd()
195 set_host_byte(sc, DID_ERROR); in virtscsi_complete_cmd()
201 if (sc->sense_buffer) { in virtscsi_complete_cmd()
202 memcpy(sc->sense_buffer, resp->sense, in virtscsi_complete_cmd()
207 set_driver_byte(sc, DRIVER_SENSE); in virtscsi_complete_cmd()
210 sc->scsi_done(sc); in virtscsi_complete_cmd()
429 struct scsi_cmnd *sc = cmd->sc; in virtscsi_add_cmd() local
436 if (sc && sc->sc_data_direction != DMA_NONE) { in virtscsi_add_cmd()
437 if (sc->sc_data_direction != DMA_FROM_DEVICE) in virtscsi_add_cmd()
438 out = &scsi_out(sc)->table; in virtscsi_add_cmd()
439 if (sc->sc_data_direction != DMA_TO_DEVICE) in virtscsi_add_cmd()
440 in = &scsi_in(sc)->table; in virtscsi_add_cmd()
450 if (scsi_prot_sg_count(sc)) in virtscsi_add_cmd()
451 sgs[out_num++] = scsi_prot_sglist(sc); in virtscsi_add_cmd()
462 if (scsi_prot_sg_count(sc)) in virtscsi_add_cmd()
463 sgs[out_num + in_num++] = scsi_prot_sglist(sc); in virtscsi_add_cmd()
492 struct scsi_cmnd *sc) in virtio_scsi_init_hdr() argument
495 cmd->lun[1] = sc->device->id; in virtio_scsi_init_hdr()
496 cmd->lun[2] = (sc->device->lun >> 8) | 0x40; in virtio_scsi_init_hdr()
497 cmd->lun[3] = sc->device->lun & 0xff; in virtio_scsi_init_hdr()
498 cmd->tag = cpu_to_virtio64(vdev, (unsigned long)sc); in virtio_scsi_init_hdr()
507 struct scsi_cmnd *sc) in virtio_scsi_init_hdr_pi() argument
509 struct request *rq = sc->request; in virtio_scsi_init_hdr_pi()
512 virtio_scsi_init_hdr(vdev, (struct virtio_scsi_cmd_req *)cmd_pi, sc); in virtio_scsi_init_hdr_pi()
514 if (!rq || !scsi_prot_sg_count(sc)) in virtio_scsi_init_hdr_pi()
519 if (sc->sc_data_direction == DMA_TO_DEVICE) in virtio_scsi_init_hdr_pi()
523 else if (sc->sc_data_direction == DMA_FROM_DEVICE) in virtio_scsi_init_hdr_pi()
532 struct scsi_cmnd *sc) in virtscsi_queuecommand() argument
535 struct virtio_scsi_cmd *cmd = scsi_cmd_priv(sc); in virtscsi_queuecommand()
538 BUG_ON(scsi_sg_count(sc) > shost->sg_tablesize); in virtscsi_queuecommand()
541 BUG_ON(sc->sc_data_direction == DMA_BIDIRECTIONAL); in virtscsi_queuecommand()
543 dev_dbg(&sc->device->sdev_gendev, in virtscsi_queuecommand()
544 "cmd %p CDB: %#02x\n", sc, sc->cmnd[0]); in virtscsi_queuecommand()
547 cmd->sc = sc; in virtscsi_queuecommand()
549 BUG_ON(sc->cmd_len > VIRTIO_SCSI_CDB_SIZE); in virtscsi_queuecommand()
553 virtio_scsi_init_hdr_pi(vscsi->vdev, &cmd->req.cmd_pi, sc); in virtscsi_queuecommand()
554 memcpy(cmd->req.cmd_pi.cdb, sc->cmnd, sc->cmd_len); in virtscsi_queuecommand()
559 virtio_scsi_init_hdr(vscsi->vdev, &cmd->req.cmd, sc); in virtscsi_queuecommand()
560 memcpy(cmd->req.cmd.cdb, sc->cmnd, sc->cmd_len); in virtscsi_queuecommand()
570 struct scsi_cmnd *sc) in virtscsi_queuecommand_single() argument
574 scsi_target(sc->device)->hostdata; in virtscsi_queuecommand_single()
577 return virtscsi_queuecommand(vscsi, &vscsi->req_vqs[0], sc); in virtscsi_queuecommand_single()
581 struct scsi_cmnd *sc) in virtscsi_pick_vq_mq() argument
583 u32 tag = blk_mq_unique_tag(sc->request); in virtscsi_pick_vq_mq()
627 struct scsi_cmnd *sc) in virtscsi_queuecommand_multi() argument
631 scsi_target(sc->device)->hostdata; in virtscsi_queuecommand_multi()
635 req_vq = virtscsi_pick_vq_mq(vscsi, sc); in virtscsi_queuecommand_multi()
639 return virtscsi_queuecommand(vscsi, req_vq, sc); in virtscsi_queuecommand_multi()
674 static int virtscsi_device_reset(struct scsi_cmnd *sc) in virtscsi_device_reset() argument
676 struct virtio_scsi *vscsi = shost_priv(sc->device->host); in virtscsi_device_reset()
679 sdev_printk(KERN_INFO, sc->device, "device reset\n"); in virtscsi_device_reset()
685 cmd->sc = sc; in virtscsi_device_reset()
691 .lun[1] = sc->device->id, in virtscsi_device_reset()
692 .lun[2] = (sc->device->lun >> 8) | 0x40, in virtscsi_device_reset()
693 .lun[3] = sc->device->lun & 0xff, in virtscsi_device_reset()
711 static int virtscsi_abort(struct scsi_cmnd *sc) in virtscsi_abort() argument
713 struct virtio_scsi *vscsi = shost_priv(sc->device->host); in virtscsi_abort()
716 scmd_printk(KERN_INFO, sc, "abort\n"); in virtscsi_abort()
722 cmd->sc = sc; in virtscsi_abort()
727 .lun[1] = sc->device->id, in virtscsi_abort()
728 .lun[2] = (sc->device->lun >> 8) | 0x40, in virtscsi_abort()
729 .lun[3] = sc->device->lun & 0xff, in virtscsi_abort()
730 .tag = cpu_to_virtio64(vscsi->vdev, (unsigned long)sc), in virtscsi_abort()