Lines Matching refs:scmd
62 struct scsi_cmnd *scmd) in mpi3mr_host_tag_for_scmd() argument
68 unique_tag = blk_mq_unique_tag(scsi_cmd_to_rq(scmd)); in mpi3mr_host_tag_for_scmd()
78 priv = scsi_cmd_priv(scmd); in mpi3mr_host_tag_for_scmd()
81 priv->scmd = scmd; in mpi3mr_host_tag_for_scmd()
104 struct scsi_cmnd *scmd = NULL; in mpi3mr_scmd_from_host_tag() local
113 scmd = scsi_host_find_tag(mrioc->shost, unique_tag); in mpi3mr_scmd_from_host_tag()
114 if (scmd) { in mpi3mr_scmd_from_host_tag()
115 priv = scsi_cmd_priv(scmd); in mpi3mr_scmd_from_host_tag()
117 scmd = NULL; in mpi3mr_scmd_from_host_tag()
120 return scmd; in mpi3mr_scmd_from_host_tag()
134 struct scsi_cmnd *scmd) in mpi3mr_clear_scmd_priv() argument
138 priv = scsi_cmd_priv(scmd); in mpi3mr_clear_scmd_priv()
144 priv->scmd = NULL; in mpi3mr_clear_scmd_priv()
487 struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(rq); in mpi3mr_print_scmd() local
490 if (scmd) { in mpi3mr_print_scmd()
491 priv = scsi_cmd_priv(scmd); in mpi3mr_print_scmd()
497 scsi_print_command(scmd); in mpi3mr_print_scmd()
518 struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(rq); in mpi3mr_flush_scmd() local
521 if (scmd) { in mpi3mr_flush_scmd()
522 priv = scsi_cmd_priv(scmd); in mpi3mr_flush_scmd()
527 dma_unmap_sg(&mrioc->pdev->dev, scsi_prot_sglist(scmd), in mpi3mr_flush_scmd()
528 scsi_prot_sg_count(scmd), scmd->sc_data_direction); in mpi3mr_flush_scmd()
529 mpi3mr_clear_scmd_priv(mrioc, scmd); in mpi3mr_flush_scmd()
530 scsi_dma_unmap(scmd); in mpi3mr_flush_scmd()
531 scmd->result = DID_RESET << 16; in mpi3mr_flush_scmd()
532 scsi_print_command(scmd); in mpi3mr_flush_scmd()
533 scsi_done(scmd); in mpi3mr_flush_scmd()
558 struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(rq); in mpi3mr_count_dev_pending() local
561 if (scmd) { in mpi3mr_count_dev_pending()
562 priv = scsi_cmd_priv(scmd); in mpi3mr_count_dev_pending()
565 if (scmd->device == sdev) in mpi3mr_count_dev_pending()
590 struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(rq); in mpi3mr_count_tgt_pending() local
593 if (scmd) { in mpi3mr_count_tgt_pending()
594 priv = scsi_cmd_priv(scmd); in mpi3mr_count_tgt_pending()
597 if (scmd->device && (scsi_target(scmd->device) == starget)) in mpi3mr_count_tgt_pending()
3073 struct scsi_cmnd *scmd, struct mpi3_scsi_io_request *scsiio_req) in mpi3mr_setup_eedp() argument
3076 unsigned char prot_op = scsi_get_prot_op(scmd); in mpi3mr_setup_eedp()
3100 if (scmd->prot_flags & SCSI_PROT_IP_CHECKSUM) { in mpi3mr_setup_eedp()
3113 if (scmd->prot_flags & SCSI_PROT_GUARD_CHECK) in mpi3mr_setup_eedp()
3116 if (scmd->prot_flags & SCSI_PROT_IP_CHECKSUM) in mpi3mr_setup_eedp()
3119 if (scmd->prot_flags & SCSI_PROT_REF_CHECK) { in mpi3mr_setup_eedp()
3123 cpu_to_be32(scsi_prot_ref_tag(scmd)); in mpi3mr_setup_eedp()
3126 if (scmd->prot_flags & SCSI_PROT_REF_INCREMENT) in mpi3mr_setup_eedp()
3131 switch (scsi_prot_interval(scmd)) { in mpi3mr_setup_eedp()
3202 static void mpi3mr_map_eedp_error(struct scsi_cmnd *scmd, in mpi3mr_map_eedp_error() argument
3222 mpi3mr_build_sense_buffer(0, scmd->sense_buffer, ILLEGAL_REQUEST, in mpi3mr_map_eedp_error()
3224 scmd->result = (DID_ABORT << 16) | SAM_STAT_CHECK_CONDITION; in mpi3mr_map_eedp_error()
3251 struct scsi_cmnd *scmd = NULL; in mpi3mr_process_op_reply_desc() local
3319 scmd = mpi3mr_scmd_from_host_tag(mrioc, host_tag, qidx); in mpi3mr_process_op_reply_desc()
3320 if (!scmd) { in mpi3mr_process_op_reply_desc()
3325 priv = scsi_cmd_priv(scmd); in mpi3mr_process_op_reply_desc()
3327 data_len_blks = scsi_bufflen(scmd) >> 9; in mpi3mr_process_op_reply_desc()
3328 sdev_priv_data = scmd->device->hostdata; in mpi3mr_process_op_reply_desc()
3373 scmd->result = DID_OK << 16; in mpi3mr_process_op_reply_desc()
3377 scsi_set_resid(scmd, scsi_bufflen(scmd) - xfer_count); in mpi3mr_process_op_reply_desc()
3388 memcpy(scmd->sense_buffer, sense_buf, sz); in mpi3mr_process_op_reply_desc()
3394 scmd->result = SAM_STAT_BUSY; in mpi3mr_process_op_reply_desc()
3397 scmd->result = DID_NO_CONNECT << 16; in mpi3mr_process_op_reply_desc()
3400 scmd->result = DID_SOFT_ERROR << 16; in mpi3mr_process_op_reply_desc()
3404 scmd->result = DID_RESET << 16; in mpi3mr_process_op_reply_desc()
3407 if ((xfer_count == 0) || (scmd->underflow > xfer_count)) in mpi3mr_process_op_reply_desc()
3408 scmd->result = DID_SOFT_ERROR << 16; in mpi3mr_process_op_reply_desc()
3410 scmd->result = (DID_OK << 16) | scsi_status; in mpi3mr_process_op_reply_desc()
3413 scmd->result = (DID_OK << 16) | scsi_status; in mpi3mr_process_op_reply_desc()
3416 if (xfer_count < scmd->underflow) { in mpi3mr_process_op_reply_desc()
3418 scmd->result = SAM_STAT_BUSY; in mpi3mr_process_op_reply_desc()
3420 scmd->result = DID_SOFT_ERROR << 16; in mpi3mr_process_op_reply_desc()
3423 scmd->result = DID_SOFT_ERROR << 16; in mpi3mr_process_op_reply_desc()
3425 scmd->result = DID_RESET << 16; in mpi3mr_process_op_reply_desc()
3428 scsi_set_resid(scmd, 0); in mpi3mr_process_op_reply_desc()
3432 scmd->result = (DID_OK << 16) | scsi_status; in mpi3mr_process_op_reply_desc()
3436 scmd->result = DID_SOFT_ERROR << 16; in mpi3mr_process_op_reply_desc()
3438 scmd->result = DID_RESET << 16; in mpi3mr_process_op_reply_desc()
3443 mpi3mr_map_eedp_error(scmd, ioc_status); in mpi3mr_process_op_reply_desc()
3455 scmd->result = DID_SOFT_ERROR << 16; in mpi3mr_process_op_reply_desc()
3459 if (scmd->result != (DID_OK << 16) && (scmd->cmnd[0] != ATA_12) && in mpi3mr_process_op_reply_desc()
3460 (scmd->cmnd[0] != ATA_16) && in mpi3mr_process_op_reply_desc()
3463 scmd->result); in mpi3mr_process_op_reply_desc()
3464 scsi_print_command(scmd); in mpi3mr_process_op_reply_desc()
3482 dma_unmap_sg(&mrioc->pdev->dev, scsi_prot_sglist(scmd), in mpi3mr_process_op_reply_desc()
3483 scsi_prot_sg_count(scmd), scmd->sc_data_direction); in mpi3mr_process_op_reply_desc()
3485 mpi3mr_clear_scmd_priv(mrioc, scmd); in mpi3mr_process_op_reply_desc()
3486 scsi_dma_unmap(scmd); in mpi3mr_process_op_reply_desc()
3487 scsi_done(scmd); in mpi3mr_process_op_reply_desc()
3535 struct scsi_cmnd *scmd, struct mpi3_scsi_io_request *scsiio_req) in mpi3mr_prepare_sg_scmd() argument
3551 priv = scsi_cmd_priv(scmd); in mpi3mr_prepare_sg_scmd()
3571 sg_scmd = scsi_prot_sglist(scmd); in mpi3mr_prepare_sg_scmd()
3573 scsi_prot_sglist(scmd), in mpi3mr_prepare_sg_scmd()
3574 scsi_prot_sg_count(scmd), in mpi3mr_prepare_sg_scmd()
3575 scmd->sc_data_direction); in mpi3mr_prepare_sg_scmd()
3587 if (scmd->cmnd[0] == ZBC_IN && scmd->cmnd[1] == ZI_REPORT_ZONES) in mpi3mr_prepare_sg_scmd()
3588 scmd->sc_data_direction = DMA_BIDIRECTIONAL; in mpi3mr_prepare_sg_scmd()
3589 sg_scmd = scsi_sglist(scmd); in mpi3mr_prepare_sg_scmd()
3590 sges_left = scsi_dma_map(scmd); in mpi3mr_prepare_sg_scmd()
3594 sdev_printk(KERN_ERR, scmd->device, in mpi3mr_prepare_sg_scmd()
3596 scsi_bufflen(scmd)); in mpi3mr_prepare_sg_scmd()
3600 sdev_printk(KERN_ERR, scmd->device, in mpi3mr_prepare_sg_scmd()
3687 struct scsi_cmnd *scmd, struct mpi3_scsi_io_request *scsiio_req) in mpi3mr_build_sg_scmd() argument
3691 ret = mpi3mr_prepare_sg_scmd(mrioc, scmd, scsiio_req); in mpi3mr_build_sg_scmd()
3699 ret = mpi3mr_prepare_sg_scmd(mrioc, scmd, scsiio_req); in mpi3mr_build_sg_scmd()
3787 u8 *resp_code, struct scsi_cmnd *scmd) in mpi3mr_issue_tm() argument
3841 if (scmd) { in mpi3mr_issue_tm()
3842 sdev = scmd->device; in mpi3mr_issue_tm()
4143 struct scsi_cmnd *scmd, struct mpi3_scsi_io_request *scsiio_req, in mpi3mr_setup_divert_ws() argument
4147 u8 opcode = scmd->cmnd[0]; in mpi3mr_setup_divert_ws()
4149 u16 sa = (scmd->cmnd[8] << 8) | (scmd->cmnd[9]); in mpi3mr_setup_divert_ws()
4152 unmap = scmd->cmnd[1] & 0x08; in mpi3mr_setup_divert_ws()
4153 ndob = scmd->cmnd[1] & 0x01; in mpi3mr_setup_divert_ws()
4154 num_blocks = get_unaligned_be32(scmd->cmnd + 10); in mpi3mr_setup_divert_ws()
4156 unmap = scmd->cmnd[10] & 0x08; in mpi3mr_setup_divert_ws()
4157 ndob = scmd->cmnd[10] & 0x01; in mpi3mr_setup_divert_ws()
4158 num_blocks = get_unaligned_be32(scmd->cmnd + 28); in mpi3mr_setup_divert_ws()
4178 static int mpi3mr_eh_host_reset(struct scsi_cmnd *scmd) in mpi3mr_eh_host_reset() argument
4180 struct mpi3mr_ioc *mrioc = shost_priv(scmd->device->host); in mpi3mr_eh_host_reset()
4190 sdev_printk(KERN_INFO, scmd->device, in mpi3mr_eh_host_reset()
4192 ((retval == SUCCESS) ? "SUCCESS" : "FAILED"), scmd); in mpi3mr_eh_host_reset()
4206 static int mpi3mr_eh_bus_reset(struct scsi_cmnd *scmd) in mpi3mr_eh_bus_reset() argument
4208 struct mpi3mr_ioc *mrioc = shost_priv(scmd->device->host); in mpi3mr_eh_bus_reset()
4215 sdev_priv_data = scmd->device->hostdata; in mpi3mr_eh_bus_reset()
4242 sdev_printk(KERN_INFO, scmd->device, in mpi3mr_eh_bus_reset()
4244 ((retval == SUCCESS) ? "SUCCESS" : "FAILED"), scmd); in mpi3mr_eh_bus_reset()
4258 static int mpi3mr_eh_target_reset(struct scsi_cmnd *scmd) in mpi3mr_eh_target_reset() argument
4260 struct mpi3mr_ioc *mrioc = shost_priv(scmd->device->host); in mpi3mr_eh_target_reset()
4267 sdev_printk(KERN_INFO, scmd->device, in mpi3mr_eh_target_reset()
4268 "Attempting Target Reset! scmd(%p)\n", scmd); in mpi3mr_eh_target_reset()
4269 scsi_print_command(scmd); in mpi3mr_eh_target_reset()
4271 sdev_priv_data = scmd->device->hostdata; in mpi3mr_eh_target_reset()
4273 sdev_printk(KERN_INFO, scmd->device, in mpi3mr_eh_target_reset()
4282 struct scmd_priv *cmd_priv = scsi_cmd_priv(scmd); in mpi3mr_eh_target_reset()
4283 sdev_printk(KERN_INFO, scmd->device, in mpi3mr_eh_target_reset()
4292 sdev_printk(KERN_INFO, scmd->device, in mpi3mr_eh_target_reset()
4299 MPI3MR_RESETTM_TIMEOUT, &mrioc->host_tm_cmds, &resp_code, scmd); in mpi3mr_eh_target_reset()
4305 sdev_printk(KERN_INFO, scmd->device, in mpi3mr_eh_target_reset()
4313 sdev_printk(KERN_INFO, scmd->device, in mpi3mr_eh_target_reset()
4315 ((retval == SUCCESS) ? "SUCCESS" : "FAILED"), scmd); in mpi3mr_eh_target_reset()
4330 static int mpi3mr_eh_dev_reset(struct scsi_cmnd *scmd) in mpi3mr_eh_dev_reset() argument
4332 struct mpi3mr_ioc *mrioc = shost_priv(scmd->device->host); in mpi3mr_eh_dev_reset()
4339 sdev_printk(KERN_INFO, scmd->device, in mpi3mr_eh_dev_reset()
4340 "Attempting Device(lun) Reset! scmd(%p)\n", scmd); in mpi3mr_eh_dev_reset()
4341 scsi_print_command(scmd); in mpi3mr_eh_dev_reset()
4343 sdev_priv_data = scmd->device->hostdata; in mpi3mr_eh_dev_reset()
4345 sdev_printk(KERN_INFO, scmd->device, in mpi3mr_eh_dev_reset()
4354 struct scmd_priv *cmd_priv = scsi_cmd_priv(scmd); in mpi3mr_eh_dev_reset()
4355 sdev_printk(KERN_INFO, scmd->device, in mpi3mr_eh_dev_reset()
4364 sdev_printk(KERN_INFO, scmd->device, in mpi3mr_eh_dev_reset()
4370 MPI3MR_RESETTM_TIMEOUT, &mrioc->host_tm_cmds, &resp_code, scmd); in mpi3mr_eh_dev_reset()
4376 sdev_printk(KERN_INFO, scmd->device, in mpi3mr_eh_dev_reset()
4383 sdev_printk(KERN_INFO, scmd->device, in mpi3mr_eh_dev_reset()
4385 ((retval == SUCCESS) ? "SUCCESS" : "FAILED"), scmd); in mpi3mr_eh_dev_reset()
4748 struct scsi_cmnd *scmd) in mpi3mr_check_return_unmap() argument
4753 trunc_param_len = param_len = get_unaligned_be16(scmd->cmnd + 7); in mpi3mr_check_return_unmap()
4758 dprint_scsi_command(mrioc, scmd, MPI3_DEBUG_SCSI_ERROR); in mpi3mr_check_return_unmap()
4762 put_unaligned_be16(trunc_param_len, scmd->cmnd + 7); in mpi3mr_check_return_unmap()
4763 dprint_scsi_command(mrioc, scmd, MPI3_DEBUG_SCSI_ERROR); in mpi3mr_check_return_unmap()
4772 scsi_print_command(scmd); in mpi3mr_check_return_unmap()
4773 scmd->result = DID_OK << 16; in mpi3mr_check_return_unmap()
4774 scsi_done(scmd); in mpi3mr_check_return_unmap()
4782 scsi_print_command(scmd); in mpi3mr_check_return_unmap()
4783 scmd->result = SAM_STAT_CHECK_CONDITION; in mpi3mr_check_return_unmap()
4784 scsi_build_sense_buffer(0, scmd->sense_buffer, ILLEGAL_REQUEST, in mpi3mr_check_return_unmap()
4786 scsi_done(scmd); in mpi3mr_check_return_unmap()
4789 if (param_len != scsi_bufflen(scmd)) { in mpi3mr_check_return_unmap()
4792 __func__, param_len, scsi_bufflen(scmd)); in mpi3mr_check_return_unmap()
4793 scsi_print_command(scmd); in mpi3mr_check_return_unmap()
4794 scmd->result = SAM_STAT_CHECK_CONDITION; in mpi3mr_check_return_unmap()
4795 scsi_build_sense_buffer(0, scmd->sense_buffer, ILLEGAL_REQUEST, in mpi3mr_check_return_unmap()
4797 scsi_done(scmd); in mpi3mr_check_return_unmap()
4800 buf = kzalloc(scsi_bufflen(scmd), GFP_ATOMIC); in mpi3mr_check_return_unmap()
4802 scsi_print_command(scmd); in mpi3mr_check_return_unmap()
4803 scmd->result = SAM_STAT_CHECK_CONDITION; in mpi3mr_check_return_unmap()
4804 scsi_build_sense_buffer(0, scmd->sense_buffer, ILLEGAL_REQUEST, in mpi3mr_check_return_unmap()
4806 scsi_done(scmd); in mpi3mr_check_return_unmap()
4809 scsi_sg_copy_to_buffer(scmd, buf, scsi_bufflen(scmd)); in mpi3mr_check_return_unmap()
4816 scsi_print_command(scmd); in mpi3mr_check_return_unmap()
4817 scmd->result = SAM_STAT_CHECK_CONDITION; in mpi3mr_check_return_unmap()
4818 scsi_build_sense_buffer(0, scmd->sense_buffer, ILLEGAL_REQUEST, in mpi3mr_check_return_unmap()
4820 scsi_done(scmd); in mpi3mr_check_return_unmap()
4827 scsi_print_command(scmd); in mpi3mr_check_return_unmap()
4831 put_unaligned_be16(trunc_param_len, scmd->cmnd + 7); in mpi3mr_check_return_unmap()
4832 scsi_print_command(scmd); in mpi3mr_check_return_unmap()
4848 inline bool mpi3mr_allow_scmd_to_fw(struct scsi_cmnd *scmd) in mpi3mr_allow_scmd_to_fw() argument
4850 switch (scmd->cmnd[0]) { in mpi3mr_allow_scmd_to_fw()
4872 struct scsi_cmnd *scmd) in mpi3mr_qcmd() argument
4884 struct request *rq = scsi_cmd_to_rq(scmd); in mpi3mr_qcmd()
4892 scmd->result = DID_ERROR << 16; in mpi3mr_qcmd()
4893 scsi_done(scmd); in mpi3mr_qcmd()
4897 sdev_priv_data = scmd->device->hostdata; in mpi3mr_qcmd()
4899 scmd->result = DID_NO_CONNECT << 16; in mpi3mr_qcmd()
4900 scsi_done(scmd); in mpi3mr_qcmd()
4905 !(mpi3mr_allow_scmd_to_fw(scmd))) { in mpi3mr_qcmd()
4906 scmd->result = DID_NO_CONNECT << 16; in mpi3mr_qcmd()
4907 scsi_done(scmd); in mpi3mr_qcmd()
4916 if (scmd->device->host->shost_state == SHOST_RECOVERY && in mpi3mr_qcmd()
4917 scmd->cmnd[0] == TEST_UNIT_READY && in mpi3mr_qcmd()
4919 scsi_build_sense(scmd, 0, UNIT_ATTENTION, 0x29, 0x07); in mpi3mr_qcmd()
4920 scsi_done(scmd); in mpi3mr_qcmd()
4932 scmd->result = DID_NO_CONNECT << 16; in mpi3mr_qcmd()
4933 scsi_done(scmd); in mpi3mr_qcmd()
4941 scmd->result = DID_NO_CONNECT << 16; in mpi3mr_qcmd()
4942 scsi_done(scmd); in mpi3mr_qcmd()
4946 scmd->result = DID_NO_CONNECT << 16; in mpi3mr_qcmd()
4947 scsi_done(scmd); in mpi3mr_qcmd()
4953 if ((scmd->cmnd[0] == UNMAP) && is_pcie_dev && in mpi3mr_qcmd()
4955 mpi3mr_check_return_unmap(mrioc, scmd)) in mpi3mr_qcmd()
4958 host_tag = mpi3mr_host_tag_for_scmd(mrioc, scmd); in mpi3mr_qcmd()
4960 scmd->result = DID_ERROR << 16; in mpi3mr_qcmd()
4961 scsi_done(scmd); in mpi3mr_qcmd()
4965 if (scmd->sc_data_direction == DMA_FROM_DEVICE) in mpi3mr_qcmd()
4967 else if (scmd->sc_data_direction == DMA_TO_DEVICE) in mpi3mr_qcmd()
4980 if (scmd->cmd_len > 16) in mpi3mr_qcmd()
4983 scmd_priv_data = scsi_cmd_priv(scmd); in mpi3mr_qcmd()
4989 mpi3mr_setup_eedp(mrioc, scmd, scsiio_req); in mpi3mr_qcmd()
4992 mpi3mr_setup_divert_ws(mrioc, scmd, scsiio_req, &scsiio_flags, in mpi3mr_qcmd()
4995 memcpy(scsiio_req->cdb.cdb32, scmd->cmnd, scmd->cmd_len); in mpi3mr_qcmd()
4996 scsiio_req->data_length = cpu_to_le32(scsi_bufflen(scmd)); in mpi3mr_qcmd()
5002 if (mpi3mr_build_sg_scmd(mrioc, scmd, scsiio_req)) { in mpi3mr_qcmd()
5003 mpi3mr_clear_scmd_priv(mrioc, scmd); in mpi3mr_qcmd()
5008 data_len_blks = scsi_bufflen(scmd) >> 9; in mpi3mr_qcmd()
5044 mpi3mr_clear_scmd_priv(mrioc, scmd); in mpi3mr_qcmd()