Lines Matching refs:cmnd

45 	struct scsi_cmnd *cmnd[MAX_CMNDS];
76 static int uas_submit_urbs(struct scsi_cmnd *cmnd,
79 static int uas_try_complete(struct scsi_cmnd *cmnd, const char *caller);
81 static void uas_log_cmd_state(struct scsi_cmnd *cmnd, const char *prefix,
102 struct scsi_cmnd *cmnd;
112 if (!devinfo->cmnd[i])
115 cmnd = devinfo->cmnd[i];
116 cmdinfo = scsi_cmd_priv(cmnd);
121 err = uas_submit_urbs(cmnd, cmnd->device->hostdata);
142 static void uas_add_work(struct scsi_cmnd *cmnd)
144 struct uas_cmd_info *cmdinfo = scsi_cmd_priv(cmnd);
145 struct uas_dev_info *devinfo = cmnd->device->hostdata;
155 struct scsi_cmnd *cmnd;
161 if (!devinfo->cmnd[i])
164 cmnd = devinfo->cmnd[i];
165 cmdinfo = scsi_cmd_priv(cmnd);
166 uas_log_cmd_state(cmnd, __func__, 0);
169 cmnd->result = result << 16;
170 err = uas_try_complete(cmnd, __func__);
176 static void uas_sense(struct urb *urb, struct scsi_cmnd *cmnd)
179 struct scsi_device *sdev = cmnd->device;
193 memcpy(cmnd->sense_buffer, sense_iu->sense, len);
196 cmnd->result = sense_iu->status;
199 static void uas_log_cmd_state(struct scsi_cmnd *cmnd, const char *prefix,
202 struct uas_cmd_info *ci = scsi_cmd_priv(cmnd);
207 scmd_printk(KERN_INFO, cmnd,
222 scsi_print_command(cmnd);
225 static void uas_free_unsubmitted_urbs(struct scsi_cmnd *cmnd)
229 if (!cmnd)
232 cmdinfo = scsi_cmd_priv(cmnd);
244 static int uas_try_complete(struct scsi_cmnd *cmnd, const char *caller)
246 struct uas_cmd_info *cmdinfo = scsi_cmd_priv(cmnd);
247 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata;
255 devinfo->cmnd[cmdinfo->uas_tag - 1] = NULL;
256 uas_free_unsubmitted_urbs(cmnd);
257 scsi_done(cmnd);
261 static void uas_xfer_data(struct urb *urb, struct scsi_cmnd *cmnd,
264 struct uas_cmd_info *cmdinfo = scsi_cmd_priv(cmnd);
268 err = uas_submit_urbs(cmnd, cmnd->device->hostdata);
270 uas_add_work(cmnd);
274 static bool uas_evaluate_response_iu(struct response_iu *riu, struct scsi_cmnd *cmnd)
280 set_host_byte(cmnd, DID_BAD_TARGET);
283 set_host_byte(cmnd, DID_OK);
286 set_host_byte(cmnd, DID_BAD_TARGET);
289 uas_log_cmd_state(cmnd, "response iu", response_code);
290 set_host_byte(cmnd, DID_ERROR);
304 struct scsi_cmnd *cmnd;
323 if (idx >= MAX_CMNDS || !devinfo->cmnd[idx]) {
329 cmnd = devinfo->cmnd[idx];
330 cmdinfo = scsi_cmd_priv(cmnd);
333 uas_log_cmd_state(cmnd, "unexpected status cmplt", 0);
339 uas_sense(urb, cmnd);
340 if (cmnd->result != 0) {
346 uas_try_complete(cmnd, __func__);
351 uas_log_cmd_state(cmnd, "unexpected read rdy", 0);
354 uas_xfer_data(urb, cmnd, SUBMIT_DATA_IN_URB);
359 uas_log_cmd_state(cmnd, "unexpected write rdy", 0);
362 uas_xfer_data(urb, cmnd, SUBMIT_DATA_OUT_URB);
366 success = uas_evaluate_response_iu((struct response_iu *)iu, cmnd);
372 uas_try_complete(cmnd, __func__);
375 uas_log_cmd_state(cmnd, "bogus IU", iu->iu_id);
394 struct scsi_cmnd *cmnd = urb->context;
395 struct uas_cmd_info *cmdinfo = scsi_cmd_priv(cmnd);
396 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata;
397 struct scsi_data_buffer *sdb = &cmnd->sdb;
416 uas_log_cmd_state(cmnd, "unexpected data cmplt", 0);
422 uas_log_cmd_state(cmnd, "data cmplt err", status);
424 scsi_set_resid(cmnd, sdb->length);
426 scsi_set_resid(cmnd, sdb->length - urb->actual_length);
428 uas_try_complete(cmnd, __func__);
443 struct scsi_cmnd *cmnd,
447 struct uas_cmd_info *cmdinfo = scsi_cmd_priv(cmnd);
449 struct scsi_data_buffer *sdb = &cmnd->sdb;
456 uas_data_cmplt, cmnd);
466 struct scsi_cmnd *cmnd)
469 struct uas_cmd_info *cmdinfo = scsi_cmd_priv(cmnd);
481 uas_stat_cmplt, cmnd->device->host);
493 struct scsi_cmnd *cmnd)
496 struct scsi_device *sdev = cmnd->device;
497 struct uas_cmd_info *cmdinfo = scsi_cmd_priv(cmnd);
505 len = cmnd->cmd_len - 16;
518 memcpy(iu->cdb, cmnd->cmnd, cmnd->cmd_len);
536 static struct urb *uas_submit_sense_urb(struct scsi_cmnd *cmnd, gfp_t gfp)
538 struct uas_dev_info *devinfo = cmnd->device->hostdata;
542 urb = uas_alloc_sense_urb(devinfo, gfp, cmnd);
549 uas_log_cmd_state(cmnd, "sense submit err", err);
556 static int uas_submit_urbs(struct scsi_cmnd *cmnd,
559 struct uas_cmd_info *cmdinfo = scsi_cmd_priv(cmnd);
565 urb = uas_submit_sense_urb(cmnd, GFP_ATOMIC);
573 cmnd, DMA_FROM_DEVICE);
584 uas_log_cmd_state(cmnd, "data in submit err", err);
593 cmnd, DMA_TO_DEVICE);
604 uas_log_cmd_state(cmnd, "data out submit err", err);
612 cmdinfo->cmd_urb = uas_alloc_cmd_urb(devinfo, GFP_ATOMIC, cmnd);
623 uas_log_cmd_state(cmnd, "cmd submit err", err);
634 static int uas_queuecommand_lck(struct scsi_cmnd *cmnd)
636 struct scsi_device *sdev = cmnd->device;
638 struct uas_cmd_info *cmdinfo = scsi_cmd_priv(cmnd);
643 if (cmnd->device->host->host_self_blocked)
647 (cmnd->cmnd[0] == ATA_12 || cmnd->cmnd[0] == ATA_16)) {
648 memcpy(cmnd->sense_buffer, usb_stor_sense_invalidCDB,
650 cmnd->result = SAM_STAT_CHECK_CONDITION;
651 scsi_done(cmnd);
658 set_host_byte(cmnd, DID_ERROR);
659 scsi_done(cmnd);
665 if (!devinfo->cmnd[idx])
677 switch (cmnd->sc_data_direction) {
694 err = uas_submit_urbs(cmnd, devinfo);
701 set_host_byte(cmnd, DID_ERROR);
702 scsi_done(cmnd);
711 uas_add_work(cmnd);
714 devinfo->cmnd[idx] = cmnd;
725 * dropped all references to the cmnd in question once this function exits.
727 static int uas_eh_abort_handler(struct scsi_cmnd *cmnd)
729 struct uas_cmd_info *cmdinfo = scsi_cmd_priv(cmnd);
730 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata;
737 uas_log_cmd_state(cmnd, __func__, 0);
742 /* Drop all refs to this cmnd, kill data urbs to break their ref */
743 devinfo->cmnd[cmdinfo->uas_tag - 1] = NULL;
749 uas_free_unsubmitted_urbs(cmnd);
765 static int uas_eh_device_reset_handler(struct scsi_cmnd *cmnd)
767 struct scsi_device *sdev = cmnd->device;
1068 if (devinfo->cmnd[i]) {