Lines Matching refs:cmnd
45 struct scsi_cmnd *cmnd[MAX_CMNDS]; member
75 static int uas_submit_urbs(struct scsi_cmnd *cmnd,
78 static int uas_try_complete(struct scsi_cmnd *cmnd, const char *caller);
80 static void uas_log_cmd_state(struct scsi_cmnd *cmnd, const char *prefix,
88 struct scsi_cmnd *cmnd; in uas_do_work() local
98 if (!devinfo->cmnd[i]) in uas_do_work()
101 cmnd = devinfo->cmnd[i]; in uas_do_work()
102 cmdinfo = (void *)&cmnd->SCp; in uas_do_work()
107 err = uas_submit_urbs(cmnd, cmnd->device->hostdata); in uas_do_work()
120 struct scsi_cmnd *cmnd = container_of(scp, struct scsi_cmnd, SCp); in uas_add_work() local
121 struct uas_dev_info *devinfo = cmnd->device->hostdata; in uas_add_work()
131 struct scsi_cmnd *cmnd; in uas_zap_pending() local
137 if (!devinfo->cmnd[i]) in uas_zap_pending()
140 cmnd = devinfo->cmnd[i]; in uas_zap_pending()
141 cmdinfo = (void *)&cmnd->SCp; in uas_zap_pending()
142 uas_log_cmd_state(cmnd, __func__, 0); in uas_zap_pending()
145 cmnd->result = result << 16; in uas_zap_pending()
146 err = uas_try_complete(cmnd, __func__); in uas_zap_pending()
152 static void uas_sense(struct urb *urb, struct scsi_cmnd *cmnd) in uas_sense() argument
155 struct scsi_device *sdev = cmnd->device; in uas_sense()
169 memcpy(cmnd->sense_buffer, sense_iu->sense, len); in uas_sense()
172 cmnd->result = sense_iu->status; in uas_sense()
175 static void uas_log_cmd_state(struct scsi_cmnd *cmnd, const char *prefix, in uas_log_cmd_state() argument
178 struct uas_cmd_info *ci = (void *)&cmnd->SCp; in uas_log_cmd_state()
179 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp; in uas_log_cmd_state()
181 scmd_printk(KERN_INFO, cmnd, in uas_log_cmd_state()
196 scsi_print_command(cmnd); in uas_log_cmd_state()
199 static void uas_free_unsubmitted_urbs(struct scsi_cmnd *cmnd) in uas_free_unsubmitted_urbs() argument
203 if (!cmnd) in uas_free_unsubmitted_urbs()
206 cmdinfo = (void *)&cmnd->SCp; in uas_free_unsubmitted_urbs()
218 static int uas_try_complete(struct scsi_cmnd *cmnd, const char *caller) in uas_try_complete() argument
220 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp; in uas_try_complete()
221 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata; in uas_try_complete()
229 devinfo->cmnd[cmdinfo->uas_tag - 1] = NULL; in uas_try_complete()
230 uas_free_unsubmitted_urbs(cmnd); in uas_try_complete()
231 cmnd->scsi_done(cmnd); in uas_try_complete()
235 static void uas_xfer_data(struct urb *urb, struct scsi_cmnd *cmnd, in uas_xfer_data() argument
238 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp; in uas_xfer_data()
242 err = uas_submit_urbs(cmnd, cmnd->device->hostdata); in uas_xfer_data()
248 static bool uas_evaluate_response_iu(struct response_iu *riu, struct scsi_cmnd *cmnd) in uas_evaluate_response_iu() argument
254 cmnd->result = DID_BAD_TARGET << 16; in uas_evaluate_response_iu()
257 cmnd->result = DID_OK << 16; in uas_evaluate_response_iu()
260 cmnd->result = DID_TARGET_FAILURE << 16; in uas_evaluate_response_iu()
263 uas_log_cmd_state(cmnd, "response iu", response_code); in uas_evaluate_response_iu()
264 cmnd->result = DID_ERROR << 16; in uas_evaluate_response_iu()
278 struct scsi_cmnd *cmnd; in uas_stat_cmplt() local
297 if (idx >= MAX_CMNDS || !devinfo->cmnd[idx]) { in uas_stat_cmplt()
303 cmnd = devinfo->cmnd[idx]; in uas_stat_cmplt()
304 cmdinfo = (void *)&cmnd->SCp; in uas_stat_cmplt()
307 uas_log_cmd_state(cmnd, "unexpected status cmplt", 0); in uas_stat_cmplt()
313 uas_sense(urb, cmnd); in uas_stat_cmplt()
314 if (cmnd->result != 0) { in uas_stat_cmplt()
320 uas_try_complete(cmnd, __func__); in uas_stat_cmplt()
325 uas_log_cmd_state(cmnd, "unexpected read rdy", 0); in uas_stat_cmplt()
328 uas_xfer_data(urb, cmnd, SUBMIT_DATA_IN_URB); in uas_stat_cmplt()
333 uas_log_cmd_state(cmnd, "unexpected write rdy", 0); in uas_stat_cmplt()
336 uas_xfer_data(urb, cmnd, SUBMIT_DATA_OUT_URB); in uas_stat_cmplt()
340 success = uas_evaluate_response_iu((struct response_iu *)iu, cmnd); in uas_stat_cmplt()
346 uas_try_complete(cmnd, __func__); in uas_stat_cmplt()
349 uas_log_cmd_state(cmnd, "bogus IU", iu->iu_id); in uas_stat_cmplt()
368 struct scsi_cmnd *cmnd = urb->context; in uas_data_cmplt() local
369 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp; in uas_data_cmplt()
370 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata; in uas_data_cmplt()
371 struct scsi_data_buffer *sdb = &cmnd->sdb; in uas_data_cmplt()
390 uas_log_cmd_state(cmnd, "unexpected data cmplt", 0); in uas_data_cmplt()
396 uas_log_cmd_state(cmnd, "data cmplt err", status); in uas_data_cmplt()
398 scsi_set_resid(cmnd, sdb->length); in uas_data_cmplt()
400 scsi_set_resid(cmnd, sdb->length - urb->actual_length); in uas_data_cmplt()
402 uas_try_complete(cmnd, __func__); in uas_data_cmplt()
417 struct scsi_cmnd *cmnd, in uas_alloc_data_urb() argument
421 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp; in uas_alloc_data_urb()
423 struct scsi_data_buffer *sdb = &cmnd->sdb; in uas_alloc_data_urb()
430 uas_data_cmplt, cmnd); in uas_alloc_data_urb()
440 struct scsi_cmnd *cmnd) in uas_alloc_sense_urb() argument
443 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp; in uas_alloc_sense_urb()
455 uas_stat_cmplt, cmnd->device->host); in uas_alloc_sense_urb()
467 struct scsi_cmnd *cmnd) in uas_alloc_cmd_urb() argument
470 struct scsi_device *sdev = cmnd->device; in uas_alloc_cmd_urb()
471 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp; in uas_alloc_cmd_urb()
479 len = cmnd->cmd_len - 16; in uas_alloc_cmd_urb()
492 memcpy(iu->cdb, cmnd->cmnd, cmnd->cmd_len); in uas_alloc_cmd_urb()
510 static struct urb *uas_submit_sense_urb(struct scsi_cmnd *cmnd, gfp_t gfp) in uas_submit_sense_urb() argument
512 struct uas_dev_info *devinfo = cmnd->device->hostdata; in uas_submit_sense_urb()
516 urb = uas_alloc_sense_urb(devinfo, gfp, cmnd); in uas_submit_sense_urb()
523 uas_log_cmd_state(cmnd, "sense submit err", err); in uas_submit_sense_urb()
530 static int uas_submit_urbs(struct scsi_cmnd *cmnd, in uas_submit_urbs() argument
533 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp; in uas_submit_urbs()
539 urb = uas_submit_sense_urb(cmnd, GFP_ATOMIC); in uas_submit_urbs()
547 cmnd, DMA_FROM_DEVICE); in uas_submit_urbs()
558 uas_log_cmd_state(cmnd, "data in submit err", err); in uas_submit_urbs()
567 cmnd, DMA_TO_DEVICE); in uas_submit_urbs()
578 uas_log_cmd_state(cmnd, "data out submit err", err); in uas_submit_urbs()
586 cmdinfo->cmd_urb = uas_alloc_cmd_urb(devinfo, GFP_ATOMIC, cmnd); in uas_submit_urbs()
597 uas_log_cmd_state(cmnd, "cmd submit err", err); in uas_submit_urbs()
608 static int uas_queuecommand_lck(struct scsi_cmnd *cmnd, in uas_queuecommand_lck() argument
611 struct scsi_device *sdev = cmnd->device; in uas_queuecommand_lck()
613 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp; in uas_queuecommand_lck()
620 if (cmnd->device->host->host_self_blocked) in uas_queuecommand_lck()
624 (cmnd->cmnd[0] == ATA_12 || cmnd->cmnd[0] == ATA_16)) { in uas_queuecommand_lck()
625 memcpy(cmnd->sense_buffer, usb_stor_sense_invalidCDB, in uas_queuecommand_lck()
627 cmnd->result = SAM_STAT_CHECK_CONDITION; in uas_queuecommand_lck()
628 cmnd->scsi_done(cmnd); in uas_queuecommand_lck()
635 cmnd->result = DID_ERROR << 16; in uas_queuecommand_lck()
636 cmnd->scsi_done(cmnd); in uas_queuecommand_lck()
643 if (!devinfo->cmnd[idx]) in uas_queuecommand_lck()
651 cmnd->scsi_done = done; in uas_queuecommand_lck()
657 switch (cmnd->sc_data_direction) { in uas_queuecommand_lck()
673 err = uas_submit_urbs(cmnd, devinfo); in uas_queuecommand_lck()
683 devinfo->cmnd[idx] = cmnd; in uas_queuecommand_lck()
695 static int uas_eh_abort_handler(struct scsi_cmnd *cmnd) in DEF_SCSI_QCMD()
697 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp; in DEF_SCSI_QCMD()
698 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata; in DEF_SCSI_QCMD()
705 uas_log_cmd_state(cmnd, __func__, 0); in DEF_SCSI_QCMD()
711 devinfo->cmnd[cmdinfo->uas_tag - 1] = NULL; in DEF_SCSI_QCMD()
717 uas_free_unsubmitted_urbs(cmnd); in DEF_SCSI_QCMD()
733 static int uas_eh_device_reset_handler(struct scsi_cmnd *cmnd) in uas_eh_device_reset_handler() argument
735 struct scsi_device *sdev = cmnd->device; in uas_eh_device_reset_handler()
1013 if (devinfo->cmnd[i]) { in uas_cmnd_list_empty()