Lines Matching refs:cmnd

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