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 = (void *)&cmnd->SCp;
121 err = uas_submit_urbs(cmnd, cmnd->device->hostdata);
145 struct scsi_cmnd *cmnd = container_of(scp, struct scsi_cmnd, SCp);
146 struct uas_dev_info *devinfo = cmnd->device->hostdata;
156 struct scsi_cmnd *cmnd;
162 if (!devinfo->cmnd[i])
165 cmnd = devinfo->cmnd[i];
166 cmdinfo = (void *)&cmnd->SCp;
167 uas_log_cmd_state(cmnd, __func__, 0);
170 cmnd->result = result << 16;
171 err = uas_try_complete(cmnd, __func__);
177 static void uas_sense(struct urb *urb, struct scsi_cmnd *cmnd)
180 struct scsi_device *sdev = cmnd->device;
194 memcpy(cmnd->sense_buffer, sense_iu->sense, len);
197 cmnd->result = sense_iu->status;
200 static void uas_log_cmd_state(struct scsi_cmnd *cmnd, const char *prefix,
203 struct uas_cmd_info *ci = (void *)&cmnd->SCp;
204 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
209 scmd_printk(KERN_INFO, cmnd,
224 scsi_print_command(cmnd);
227 static void uas_free_unsubmitted_urbs(struct scsi_cmnd *cmnd)
231 if (!cmnd)
234 cmdinfo = (void *)&cmnd->SCp;
246 static int uas_try_complete(struct scsi_cmnd *cmnd, const char *caller)
248 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
249 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata;
257 devinfo->cmnd[cmdinfo->uas_tag - 1] = NULL;
258 uas_free_unsubmitted_urbs(cmnd);
259 cmnd->scsi_done(cmnd);
263 static void uas_xfer_data(struct urb *urb, struct scsi_cmnd *cmnd,
266 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
270 err = uas_submit_urbs(cmnd, cmnd->device->hostdata);
276 static bool uas_evaluate_response_iu(struct response_iu *riu, struct scsi_cmnd *cmnd)
282 set_host_byte(cmnd, DID_BAD_TARGET);
285 set_host_byte(cmnd, DID_OK);
288 set_host_byte(cmnd, DID_TARGET_FAILURE);
291 uas_log_cmd_state(cmnd, "response iu", response_code);
292 set_host_byte(cmnd, DID_ERROR);
306 struct scsi_cmnd *cmnd;
325 if (idx >= MAX_CMNDS || !devinfo->cmnd[idx]) {
331 cmnd = devinfo->cmnd[idx];
332 cmdinfo = (void *)&cmnd->SCp;
335 uas_log_cmd_state(cmnd, "unexpected status cmplt", 0);
341 uas_sense(urb, cmnd);
342 if (cmnd->result != 0) {
348 uas_try_complete(cmnd, __func__);
353 uas_log_cmd_state(cmnd, "unexpected read rdy", 0);
356 uas_xfer_data(urb, cmnd, SUBMIT_DATA_IN_URB);
361 uas_log_cmd_state(cmnd, "unexpected write rdy", 0);
364 uas_xfer_data(urb, cmnd, SUBMIT_DATA_OUT_URB);
368 success = uas_evaluate_response_iu((struct response_iu *)iu, cmnd);
374 uas_try_complete(cmnd, __func__);
377 uas_log_cmd_state(cmnd, "bogus IU", iu->iu_id);
396 struct scsi_cmnd *cmnd = urb->context;
397 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
398 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata;
399 struct scsi_data_buffer *sdb = &cmnd->sdb;
418 uas_log_cmd_state(cmnd, "unexpected data cmplt", 0);
424 uas_log_cmd_state(cmnd, "data cmplt err", status);
426 scsi_set_resid(cmnd, sdb->length);
428 scsi_set_resid(cmnd, sdb->length - urb->actual_length);
430 uas_try_complete(cmnd, __func__);
445 struct scsi_cmnd *cmnd,
449 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
451 struct scsi_data_buffer *sdb = &cmnd->sdb;
458 uas_data_cmplt, cmnd);
468 struct scsi_cmnd *cmnd)
471 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
483 uas_stat_cmplt, cmnd->device->host);
495 struct scsi_cmnd *cmnd)
498 struct scsi_device *sdev = cmnd->device;
499 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
507 len = cmnd->cmd_len - 16;
520 memcpy(iu->cdb, cmnd->cmnd, cmnd->cmd_len);
538 static struct urb *uas_submit_sense_urb(struct scsi_cmnd *cmnd, gfp_t gfp)
540 struct uas_dev_info *devinfo = cmnd->device->hostdata;
544 urb = uas_alloc_sense_urb(devinfo, gfp, cmnd);
551 uas_log_cmd_state(cmnd, "sense submit err", err);
558 static int uas_submit_urbs(struct scsi_cmnd *cmnd,
561 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
567 urb = uas_submit_sense_urb(cmnd, GFP_ATOMIC);
575 cmnd, DMA_FROM_DEVICE);
586 uas_log_cmd_state(cmnd, "data in submit err", err);
595 cmnd, DMA_TO_DEVICE);
606 uas_log_cmd_state(cmnd, "data out submit err", err);
614 cmdinfo->cmd_urb = uas_alloc_cmd_urb(devinfo, GFP_ATOMIC, cmnd);
625 uas_log_cmd_state(cmnd, "cmd submit err", err);
636 static int uas_queuecommand_lck(struct scsi_cmnd *cmnd,
639 struct scsi_device *sdev = cmnd->device;
641 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
648 if (cmnd->device->host->host_self_blocked)
652 (cmnd->cmnd[0] == ATA_12 || cmnd->cmnd[0] == ATA_16)) {
653 memcpy(cmnd->sense_buffer, usb_stor_sense_invalidCDB,
655 cmnd->result = SAM_STAT_CHECK_CONDITION;
656 cmnd->scsi_done(cmnd);
663 set_host_byte(cmnd, DID_ERROR);
664 cmnd->scsi_done(cmnd);
670 if (!devinfo->cmnd[idx])
678 cmnd->scsi_done = done;
684 switch (cmnd->sc_data_direction) {
700 err = uas_submit_urbs(cmnd, devinfo);
707 set_host_byte(cmnd, DID_ERROR);
708 cmnd->scsi_done(cmnd);
720 devinfo->cmnd[idx] = cmnd;
731 * dropped all references to the cmnd in question once this function exits.
733 static int uas_eh_abort_handler(struct scsi_cmnd *cmnd)
735 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
736 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata;
743 uas_log_cmd_state(cmnd, __func__, 0);
748 /* Drop all refs to this cmnd, kill data urbs to break their ref */
749 devinfo->cmnd[cmdinfo->uas_tag - 1] = NULL;
755 uas_free_unsubmitted_urbs(cmnd);
771 static int uas_eh_device_reset_handler(struct scsi_cmnd *cmnd)
773 struct scsi_device *sdev = cmnd->device;
1066 if (devinfo->cmnd[i]) {