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