Lines Matching refs:lpfc_cmd

101 				struct lpfc_io_buf *lpfc_cmd)  in lpfc_sli4_set_rsp_sgl_last()  argument
103 struct sli4_sge *sgl = (struct sli4_sge *)lpfc_cmd->dma_sgl; in lpfc_sli4_set_rsp_sgl_last()
563 struct lpfc_io_buf *lpfc_cmd = NULL; in lpfc_get_scsi_buf_s3() local
568 list_remove_head(scsi_buf_list_get, lpfc_cmd, struct lpfc_io_buf, in lpfc_get_scsi_buf_s3()
570 if (!lpfc_cmd) { in lpfc_get_scsi_buf_s3()
575 list_remove_head(scsi_buf_list_get, lpfc_cmd, in lpfc_get_scsi_buf_s3()
581 if (lpfc_ndlp_check_qdepth(phba, ndlp) && lpfc_cmd) { in lpfc_get_scsi_buf_s3()
583 lpfc_cmd->flags |= LPFC_SBUF_BUMP_QDEPTH; in lpfc_get_scsi_buf_s3()
585 return lpfc_cmd; in lpfc_get_scsi_buf_s3()
604 struct lpfc_io_buf *lpfc_cmd; in lpfc_get_scsi_buf_s4() local
621 lpfc_cmd = lpfc_get_io_buf(phba, ndlp, idx, in lpfc_get_scsi_buf_s4()
623 if (!lpfc_cmd) { in lpfc_get_scsi_buf_s4()
632 lpfc_cmd->cur_iocbq.cmd_flag = LPFC_IO_FCP; in lpfc_get_scsi_buf_s4()
633 lpfc_cmd->prot_seg_cnt = 0; in lpfc_get_scsi_buf_s4()
634 lpfc_cmd->seg_cnt = 0; in lpfc_get_scsi_buf_s4()
635 lpfc_cmd->timeout = 0; in lpfc_get_scsi_buf_s4()
636 lpfc_cmd->flags = 0; in lpfc_get_scsi_buf_s4()
637 lpfc_cmd->start_time = jiffies; in lpfc_get_scsi_buf_s4()
638 lpfc_cmd->waitq = NULL; in lpfc_get_scsi_buf_s4()
639 lpfc_cmd->cpu = cpu; in lpfc_get_scsi_buf_s4()
641 lpfc_cmd->prot_data_type = 0; in lpfc_get_scsi_buf_s4()
643 tmp = lpfc_get_cmd_rsp_buf_per_hdwq(phba, lpfc_cmd); in lpfc_get_scsi_buf_s4()
645 lpfc_release_io_buf(phba, lpfc_cmd, lpfc_cmd->hdwq); in lpfc_get_scsi_buf_s4()
649 lpfc_cmd->fcp_cmnd = tmp->fcp_cmnd; in lpfc_get_scsi_buf_s4()
650 lpfc_cmd->fcp_rsp = tmp->fcp_rsp; in lpfc_get_scsi_buf_s4()
657 sgl = (struct sli4_sge *)lpfc_cmd->dma_sgl; in lpfc_get_scsi_buf_s4()
678 lpfc_cmd->flags |= LPFC_SBUF_BUMP_QDEPTH; in lpfc_get_scsi_buf_s4()
680 return lpfc_cmd; in lpfc_get_scsi_buf_s4()
809 lpfc_scsi_prep_dma_buf_s3(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd) in lpfc_scsi_prep_dma_buf_s3() argument
811 struct scsi_cmnd *scsi_cmnd = lpfc_cmd->pCmd; in lpfc_scsi_prep_dma_buf_s3()
813 struct fcp_cmnd *fcp_cmnd = lpfc_cmd->fcp_cmnd; in lpfc_scsi_prep_dma_buf_s3()
814 struct ulp_bde64 *bpl = (struct ulp_bde64 *)lpfc_cmd->dma_sgl; in lpfc_scsi_prep_dma_buf_s3()
815 struct lpfc_iocbq *iocbq = &lpfc_cmd->cur_iocbq; in lpfc_scsi_prep_dma_buf_s3()
816 IOCB_t *iocb_cmd = &lpfc_cmd->cur_iocbq.iocb; in lpfc_scsi_prep_dma_buf_s3()
842 lpfc_cmd->seg_cnt = nseg; in lpfc_scsi_prep_dma_buf_s3()
843 if (lpfc_cmd->seg_cnt > phba->cfg_sg_seg_cnt) { in lpfc_scsi_prep_dma_buf_s3()
848 lpfc_cmd->seg_cnt); in lpfc_scsi_prep_dma_buf_s3()
849 WARN_ON_ONCE(lpfc_cmd->seg_cnt > phba->cfg_sg_seg_cnt); in lpfc_scsi_prep_dma_buf_s3()
850 lpfc_cmd->seg_cnt = 0; in lpfc_scsi_prep_dma_buf_s3()
903 physaddr = lpfc_cmd->dma_handle; in lpfc_scsi_prep_dma_buf_s3()
963 struct lpfc_io_buf *lpfc_cmd = NULL; in lpfc_bg_err_inject() local
1022 lpfc_cmd = (struct lpfc_io_buf *)sc->host_scribble; in lpfc_bg_err_inject()
1050 if (lpfc_cmd) { in lpfc_bg_err_inject()
1051 lpfc_cmd->prot_data_type = in lpfc_bg_err_inject()
1053 lpfc_cmd->prot_data_segment = in lpfc_bg_err_inject()
1055 lpfc_cmd->prot_data = in lpfc_bg_err_inject()
1171 if (lpfc_cmd) { in lpfc_bg_err_inject()
1172 lpfc_cmd->prot_data_type = in lpfc_bg_err_inject()
1174 lpfc_cmd->prot_data_segment = in lpfc_bg_err_inject()
1176 lpfc_cmd->prot_data = in lpfc_bg_err_inject()
1924 struct lpfc_io_buf *lpfc_cmd) in lpfc_bg_setup_sgl() argument
2012 sgl_xtra = lpfc_get_sgl_per_hdwq(phba, lpfc_cmd); in lpfc_bg_setup_sgl()
2015 lpfc_cmd->seg_cnt = 0; in lpfc_bg_setup_sgl()
2105 struct lpfc_io_buf *lpfc_cmd) in lpfc_bg_setup_sgl_prot() argument
2174 sgl_xtra = lpfc_get_sgl_per_hdwq(phba, lpfc_cmd); in lpfc_bg_setup_sgl_prot()
2300 lpfc_cmd); in lpfc_bg_setup_sgl_prot()
2451 struct lpfc_io_buf *lpfc_cmd) in lpfc_bg_scsi_adjust_dl() argument
2453 struct scsi_cmnd *sc = lpfc_cmd->pCmd; in lpfc_bg_scsi_adjust_dl()
2494 struct lpfc_io_buf *lpfc_cmd) in lpfc_bg_scsi_prep_dma_buf_s3() argument
2496 struct scsi_cmnd *scsi_cmnd = lpfc_cmd->pCmd; in lpfc_bg_scsi_prep_dma_buf_s3()
2497 struct fcp_cmnd *fcp_cmnd = lpfc_cmd->fcp_cmnd; in lpfc_bg_scsi_prep_dma_buf_s3()
2498 struct ulp_bde64 *bpl = (struct ulp_bde64 *)lpfc_cmd->dma_sgl; in lpfc_bg_scsi_prep_dma_buf_s3()
2499 IOCB_t *iocb_cmd = &lpfc_cmd->cur_iocbq.iocb; in lpfc_bg_scsi_prep_dma_buf_s3()
2525 lpfc_cmd->seg_cnt = datasegcnt; in lpfc_bg_scsi_prep_dma_buf_s3()
2528 if (lpfc_cmd->seg_cnt > phba->cfg_sg_seg_cnt) { in lpfc_bg_scsi_prep_dma_buf_s3()
2529 WARN_ON_ONCE(lpfc_cmd->seg_cnt > phba->cfg_sg_seg_cnt); in lpfc_bg_scsi_prep_dma_buf_s3()
2540 if ((lpfc_cmd->seg_cnt + 2) > phba->cfg_total_seg_cnt) { in lpfc_bg_scsi_prep_dma_buf_s3()
2568 lpfc_cmd->prot_seg_cnt = protsegcnt; in lpfc_bg_scsi_prep_dma_buf_s3()
2574 if ((lpfc_cmd->prot_seg_cnt * 4) > in lpfc_bg_scsi_prep_dma_buf_s3()
2593 lpfc_cmd->seg_cnt = 0; in lpfc_bg_scsi_prep_dma_buf_s3()
2613 fcpdl = lpfc_bg_scsi_adjust_dl(phba, lpfc_cmd); in lpfc_bg_scsi_prep_dma_buf_s3()
2632 if (lpfc_cmd->seg_cnt) in lpfc_bg_scsi_prep_dma_buf_s3()
2634 if (lpfc_cmd->prot_seg_cnt) in lpfc_bg_scsi_prep_dma_buf_s3()
2642 lpfc_cmd->seg_cnt, lpfc_cmd->prot_seg_cnt, in lpfc_bg_scsi_prep_dma_buf_s3()
2646 lpfc_cmd->seg_cnt = 0; in lpfc_bg_scsi_prep_dma_buf_s3()
2647 lpfc_cmd->prot_seg_cnt = 0; in lpfc_bg_scsi_prep_dma_buf_s3()
2686 lpfc_calc_bg_err(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd) in lpfc_calc_bg_err() argument
2690 struct scsi_cmnd *cmd = lpfc_cmd->pCmd; in lpfc_calc_bg_err()
2720 protsegcnt = lpfc_cmd->prot_seg_cnt; in lpfc_calc_bg_err()
2865 lpfc_parse_bg_err(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd, in lpfc_parse_bg_err() argument
2868 struct scsi_cmnd *cmd = lpfc_cmd->pCmd; in lpfc_parse_bg_err()
3025 lpfc_calc_bg_err(phba, lpfc_cmd); in lpfc_parse_bg_err()
3045 lpfc_scsi_prep_dma_buf_s4(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd) in lpfc_scsi_prep_dma_buf_s4() argument
3047 struct scsi_cmnd *scsi_cmnd = lpfc_cmd->pCmd; in lpfc_scsi_prep_dma_buf_s4()
3049 struct fcp_cmnd *fcp_cmnd = lpfc_cmd->fcp_cmnd; in lpfc_scsi_prep_dma_buf_s4()
3050 struct sli4_sge *sgl = (struct sli4_sge *)lpfc_cmd->dma_sgl; in lpfc_scsi_prep_dma_buf_s4()
3052 struct lpfc_iocbq *pwqeq = &lpfc_cmd->cur_iocbq; in lpfc_scsi_prep_dma_buf_s4()
3087 lpfc_cmd->seg_cnt = nseg; in lpfc_scsi_prep_dma_buf_s4()
3089 lpfc_cmd->seg_cnt > phba->cfg_sg_seg_cnt) { in lpfc_scsi_prep_dma_buf_s4()
3095 lpfc_cmd->seg_cnt); in lpfc_scsi_prep_dma_buf_s4()
3096 WARN_ON_ONCE(lpfc_cmd->seg_cnt > phba->cfg_sg_seg_cnt); in lpfc_scsi_prep_dma_buf_s4()
3097 lpfc_cmd->seg_cnt = 0; in lpfc_scsi_prep_dma_buf_s4()
3133 phba, lpfc_cmd); in lpfc_scsi_prep_dma_buf_s4()
3136 lpfc_cmd->seg_cnt = 0; in lpfc_scsi_prep_dma_buf_s4()
3256 lpfc_cmd->cur_iocbq.cmd_flag |= (LPFC_IO_OAS | LPFC_IO_FOF); in lpfc_scsi_prep_dma_buf_s4()
3257 lpfc_cmd->cur_iocbq.priority = ((struct lpfc_device_data *) in lpfc_scsi_prep_dma_buf_s4()
3264 if (lpfc_cmd->cur_iocbq.priority) in lpfc_scsi_prep_dma_buf_s4()
3266 (lpfc_cmd->cur_iocbq.priority << 1)); in lpfc_scsi_prep_dma_buf_s4()
3290 struct lpfc_io_buf *lpfc_cmd) in lpfc_bg_scsi_prep_dma_buf_s4() argument
3292 struct scsi_cmnd *scsi_cmnd = lpfc_cmd->pCmd; in lpfc_bg_scsi_prep_dma_buf_s4()
3293 struct fcp_cmnd *fcp_cmnd = lpfc_cmd->fcp_cmnd; in lpfc_bg_scsi_prep_dma_buf_s4()
3294 struct sli4_sge *sgl = (struct sli4_sge *)(lpfc_cmd->dma_sgl); in lpfc_bg_scsi_prep_dma_buf_s4()
3295 struct lpfc_iocbq *pwqeq = &lpfc_cmd->cur_iocbq; in lpfc_bg_scsi_prep_dma_buf_s4()
3328 lpfc_cmd->seg_cnt = datasegcnt; in lpfc_bg_scsi_prep_dma_buf_s4()
3331 if (lpfc_cmd->seg_cnt > phba->cfg_sg_seg_cnt && in lpfc_bg_scsi_prep_dma_buf_s4()
3333 WARN_ON_ONCE(lpfc_cmd->seg_cnt > phba->cfg_sg_seg_cnt); in lpfc_bg_scsi_prep_dma_buf_s4()
3343 if (((lpfc_cmd->seg_cnt + 1) > in lpfc_bg_scsi_prep_dma_buf_s4()
3351 datasegcnt, lpfc_cmd); in lpfc_bg_scsi_prep_dma_buf_s4()
3374 lpfc_cmd->prot_seg_cnt = protsegcnt; in lpfc_bg_scsi_prep_dma_buf_s4()
3379 if (((lpfc_cmd->prot_seg_cnt * 3) > in lpfc_bg_scsi_prep_dma_buf_s4()
3387 datasegcnt, protsegcnt, lpfc_cmd); in lpfc_bg_scsi_prep_dma_buf_s4()
3401 lpfc_cmd->seg_cnt = 0; in lpfc_bg_scsi_prep_dma_buf_s4()
3413 lpfc_cmd->cur_iocbq.cmd_flag |= LPFC_IO_DIF_STRIP; in lpfc_bg_scsi_prep_dma_buf_s4()
3417 lpfc_cmd->cur_iocbq.cmd_flag |= LPFC_IO_DIF_INSERT; in lpfc_bg_scsi_prep_dma_buf_s4()
3421 lpfc_cmd->cur_iocbq.cmd_flag |= LPFC_IO_DIF_PASS; in lpfc_bg_scsi_prep_dma_buf_s4()
3425 fcpdl = lpfc_bg_scsi_adjust_dl(phba, lpfc_cmd); in lpfc_bg_scsi_prep_dma_buf_s4()
3452 lpfc_cmd->cur_iocbq.cmd_flag |= (LPFC_IO_OAS | LPFC_IO_FOF); in lpfc_bg_scsi_prep_dma_buf_s4()
3462 if (lpfc_cmd->cur_iocbq.cmd_flag & LPFC_IO_DIF_PASS) in lpfc_bg_scsi_prep_dma_buf_s4()
3464 else if (lpfc_cmd->cur_iocbq.cmd_flag & LPFC_IO_DIF_STRIP) in lpfc_bg_scsi_prep_dma_buf_s4()
3466 else if (lpfc_cmd->cur_iocbq.cmd_flag & LPFC_IO_DIF_INSERT) in lpfc_bg_scsi_prep_dma_buf_s4()
3469 lpfc_cmd->cur_iocbq.cmd_flag &= ~(LPFC_IO_DIF_PASS | in lpfc_bg_scsi_prep_dma_buf_s4()
3474 if (lpfc_cmd->seg_cnt) in lpfc_bg_scsi_prep_dma_buf_s4()
3476 if (lpfc_cmd->prot_seg_cnt) in lpfc_bg_scsi_prep_dma_buf_s4()
3484 lpfc_cmd->seg_cnt, lpfc_cmd->prot_seg_cnt, in lpfc_bg_scsi_prep_dma_buf_s4()
3488 lpfc_cmd->seg_cnt = 0; in lpfc_bg_scsi_prep_dma_buf_s4()
3489 lpfc_cmd->prot_seg_cnt = 0; in lpfc_bg_scsi_prep_dma_buf_s4()
3506 lpfc_scsi_prep_dma_buf(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd) in lpfc_scsi_prep_dma_buf() argument
3508 return phba->lpfc_scsi_prep_dma_buf(phba, lpfc_cmd); in lpfc_scsi_prep_dma_buf()
3525 lpfc_bg_scsi_prep_dma_buf(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd) in lpfc_bg_scsi_prep_dma_buf() argument
3527 return phba->lpfc_bg_scsi_prep_dma_buf(phba, lpfc_cmd); in lpfc_bg_scsi_prep_dma_buf()
3544 lpfc_scsi_prep_cmnd_buf(struct lpfc_vport *vport, struct lpfc_io_buf *lpfc_cmd, in lpfc_scsi_prep_cmnd_buf() argument
3547 return vport->phba->lpfc_scsi_prep_cmnd_buf(vport, lpfc_cmd, tmo); in lpfc_scsi_prep_cmnd_buf()
3562 struct lpfc_io_buf *lpfc_cmd, uint32_t fcpi_parm) { in lpfc_send_scsi_error_event() argument
3563 struct scsi_cmnd *cmnd = lpfc_cmd->pCmd; in lpfc_send_scsi_error_event()
3564 struct fcp_rsp *fcprsp = lpfc_cmd->fcp_rsp; in lpfc_send_scsi_error_event()
3568 struct lpfc_nodelist *pnode = lpfc_cmd->rdata->pnode; in lpfc_send_scsi_error_event()
3818 lpfc_handle_fcp_err(struct lpfc_vport *vport, struct lpfc_io_buf *lpfc_cmd, in lpfc_handle_fcp_err() argument
3821 struct scsi_cmnd *cmnd = lpfc_cmd->pCmd; in lpfc_handle_fcp_err()
3822 struct fcp_cmnd *fcpcmd = lpfc_cmd->fcp_cmnd; in lpfc_handle_fcp_err()
3823 struct fcp_rsp *fcprsp = lpfc_cmd->fcp_rsp; in lpfc_handle_fcp_err()
3988 lpfc_send_scsi_error_event(vport->phba, vport, lpfc_cmd, fcpi_parm); in lpfc_handle_fcp_err()
4005 struct lpfc_io_buf *lpfc_cmd = pwqeIn->io_buf; in lpfc_fcp_io_cmd_wqe_cmpl() local
4020 if (!lpfc_cmd) { in lpfc_fcp_io_cmd_wqe_cmpl()
4027 rdata = lpfc_cmd->rdata; in lpfc_fcp_io_cmd_wqe_cmpl()
4031 cmd = lpfc_cmd->pCmd; in lpfc_fcp_io_cmd_wqe_cmpl()
4035 lpfc_release_scsi_buf(phba, lpfc_cmd); in lpfc_fcp_io_cmd_wqe_cmpl()
4039 spin_lock(&lpfc_cmd->buf_lock); in lpfc_fcp_io_cmd_wqe_cmpl()
4040 idx = lpfc_cmd->cur_iocbq.hba_wqidx; in lpfc_fcp_io_cmd_wqe_cmpl()
4050 lpfc_cmd->status = bf_get(lpfc_wcqe_c_status, wcqe); in lpfc_fcp_io_cmd_wqe_cmpl()
4051 lpfc_cmd->result = (wcqe->parameter & IOERR_PARAM_MASK); in lpfc_fcp_io_cmd_wqe_cmpl()
4053 lpfc_cmd->flags &= ~LPFC_SBUF_XBUSY; in lpfc_fcp_io_cmd_wqe_cmpl()
4055 lpfc_cmd->flags |= LPFC_SBUF_XBUSY; in lpfc_fcp_io_cmd_wqe_cmpl()
4061 if (lpfc_cmd->prot_data_type) { in lpfc_fcp_io_cmd_wqe_cmpl()
4064 src = (struct scsi_dif_tuple *)lpfc_cmd->prot_data_segment; in lpfc_fcp_io_cmd_wqe_cmpl()
4069 switch (lpfc_cmd->prot_data_type) { in lpfc_fcp_io_cmd_wqe_cmpl()
4072 lpfc_cmd->prot_data; in lpfc_fcp_io_cmd_wqe_cmpl()
4076 (uint16_t)lpfc_cmd->prot_data; in lpfc_fcp_io_cmd_wqe_cmpl()
4080 (uint16_t)lpfc_cmd->prot_data; in lpfc_fcp_io_cmd_wqe_cmpl()
4086 lpfc_cmd->prot_data = 0; in lpfc_fcp_io_cmd_wqe_cmpl()
4087 lpfc_cmd->prot_data_type = 0; in lpfc_fcp_io_cmd_wqe_cmpl()
4088 lpfc_cmd->prot_data_segment = NULL; in lpfc_fcp_io_cmd_wqe_cmpl()
4091 if (unlikely(lpfc_cmd->status)) { in lpfc_fcp_io_cmd_wqe_cmpl()
4092 if (lpfc_cmd->status == IOSTAT_FCP_RSP_ERROR && in lpfc_fcp_io_cmd_wqe_cmpl()
4093 !lpfc_cmd->fcp_rsp->rspStatus3 && in lpfc_fcp_io_cmd_wqe_cmpl()
4094 (lpfc_cmd->fcp_rsp->rspStatus2 & RESID_UNDER) && in lpfc_fcp_io_cmd_wqe_cmpl()
4107 lpfc_cmd->status, lpfc_cmd->result, in lpfc_fcp_io_cmd_wqe_cmpl()
4110 lpfc_cmd->cur_iocbq.sli4_xritag, in lpfc_fcp_io_cmd_wqe_cmpl()
4112 lpfc_cmd->cur_iocbq.iotag); in lpfc_fcp_io_cmd_wqe_cmpl()
4115 switch (lpfc_cmd->status) { in lpfc_fcp_io_cmd_wqe_cmpl()
4120 lpfc_handle_fcp_err(vport, lpfc_cmd, in lpfc_fcp_io_cmd_wqe_cmpl()
4133 (lpfc_cmd->status == IOSTAT_NPORT_BSY) ? in lpfc_fcp_io_cmd_wqe_cmpl()
4160 lpfc_cmd->status, lpfc_cmd->result, in lpfc_fcp_io_cmd_wqe_cmpl()
4163 lpfc_cmd->cur_iocbq.sli4_xritag, in lpfc_fcp_io_cmd_wqe_cmpl()
4166 lpfc_cmd->cur_iocbq.iocb.ulpIoTag); in lpfc_fcp_io_cmd_wqe_cmpl()
4170 lpfc_cmd->result = IOERR_RX_DMA_FAILED; in lpfc_fcp_io_cmd_wqe_cmpl()
4172 lpfc_cmd->result = IOERR_TX_DMA_FAILED; in lpfc_fcp_io_cmd_wqe_cmpl()
4176 lpfc_cmd->cur_iocbq.sli4_xritag, in lpfc_fcp_io_cmd_wqe_cmpl()
4177 lpfc_cmd->status, wcqe->parameter, in lpfc_fcp_io_cmd_wqe_cmpl()
4181 lpfc_parse_bg_err(phba, lpfc_cmd, pwqeOut); in lpfc_fcp_io_cmd_wqe_cmpl()
4195 lpfc_cmd->cur_iocbq.sli4_lxritag, in lpfc_fcp_io_cmd_wqe_cmpl()
4200 if (lpfc_cmd->result & IOERR_DRVR_MASK) in lpfc_fcp_io_cmd_wqe_cmpl()
4201 lpfc_cmd->status = IOSTAT_DRIVER_REJECT; in lpfc_fcp_io_cmd_wqe_cmpl()
4202 if (lpfc_cmd->result == IOERR_ELXSEC_KEY_UNWRAP_ERROR || in lpfc_fcp_io_cmd_wqe_cmpl()
4203 lpfc_cmd->result == in lpfc_fcp_io_cmd_wqe_cmpl()
4205 lpfc_cmd->result == IOERR_ELXSEC_CRYPTO_ERROR || in lpfc_fcp_io_cmd_wqe_cmpl()
4206 lpfc_cmd->result == in lpfc_fcp_io_cmd_wqe_cmpl()
4211 if (lpfc_cmd->result == IOERR_INVALID_RPI || in lpfc_fcp_io_cmd_wqe_cmpl()
4212 lpfc_cmd->result == IOERR_LINK_DOWN || in lpfc_fcp_io_cmd_wqe_cmpl()
4213 lpfc_cmd->result == IOERR_NO_RESOURCES || in lpfc_fcp_io_cmd_wqe_cmpl()
4214 lpfc_cmd->result == IOERR_ABORT_REQUESTED || in lpfc_fcp_io_cmd_wqe_cmpl()
4215 lpfc_cmd->result == IOERR_RPI_SUSPENDED || in lpfc_fcp_io_cmd_wqe_cmpl()
4216 lpfc_cmd->result == IOERR_SLER_CMD_RCV_FAILURE) { in lpfc_fcp_io_cmd_wqe_cmpl()
4229 lpfc_cmd->status, lpfc_cmd->result, in lpfc_fcp_io_cmd_wqe_cmpl()
4232 lpfc_cmd->cur_iocbq.sli4_xritag, in lpfc_fcp_io_cmd_wqe_cmpl()
4235 lpfc_cmd->cur_iocbq.iocb.ulpIoTag); in lpfc_fcp_io_cmd_wqe_cmpl()
4243 lpfc_cmd->cur_iocbq.sli4_xritag, in lpfc_fcp_io_cmd_wqe_cmpl()
4244 lpfc_cmd->status, lpfc_cmd->result, in lpfc_fcp_io_cmd_wqe_cmpl()
4248 if (cmd->result || lpfc_cmd->fcp_rsp->rspSnsLen) { in lpfc_fcp_io_cmd_wqe_cmpl()
4262 time_after(jiffies, lpfc_cmd->start_time + in lpfc_fcp_io_cmd_wqe_cmpl()
4279 lpfc_scsi_unprep_dma_buf(phba, lpfc_cmd); in lpfc_fcp_io_cmd_wqe_cmpl()
4282 if (lpfc_cmd->ts_cmd_start) { in lpfc_fcp_io_cmd_wqe_cmpl()
4283 lpfc_cmd->ts_isr_cmpl = lpfc_cmd->cur_iocbq.isr_timestamp; in lpfc_fcp_io_cmd_wqe_cmpl()
4284 lpfc_cmd->ts_data_io = ktime_get_ns(); in lpfc_fcp_io_cmd_wqe_cmpl()
4285 phba->ktime_last_cmd = lpfc_cmd->ts_data_io; in lpfc_fcp_io_cmd_wqe_cmpl()
4286 lpfc_io_ktime(phba, lpfc_cmd); in lpfc_fcp_io_cmd_wqe_cmpl()
4290 lpfc_cmd->pCmd = NULL; in lpfc_fcp_io_cmd_wqe_cmpl()
4291 spin_unlock(&lpfc_cmd->buf_lock); in lpfc_fcp_io_cmd_wqe_cmpl()
4298 lat = ktime_get_ns() - lpfc_cmd->rx_cmd_start; in lpfc_fcp_io_cmd_wqe_cmpl()
4312 spin_lock(&lpfc_cmd->buf_lock); in lpfc_fcp_io_cmd_wqe_cmpl()
4313 lpfc_cmd->cur_iocbq.cmd_flag &= ~LPFC_DRIVER_ABORTED; in lpfc_fcp_io_cmd_wqe_cmpl()
4314 if (lpfc_cmd->waitq) in lpfc_fcp_io_cmd_wqe_cmpl()
4315 wake_up(lpfc_cmd->waitq); in lpfc_fcp_io_cmd_wqe_cmpl()
4316 spin_unlock(&lpfc_cmd->buf_lock); in lpfc_fcp_io_cmd_wqe_cmpl()
4318 lpfc_release_scsi_buf(phba, lpfc_cmd); in lpfc_fcp_io_cmd_wqe_cmpl()
4335 struct lpfc_io_buf *lpfc_cmd = in lpfc_scsi_cmd_iocb_cmpl() local
4338 struct lpfc_rport_data *rdata = lpfc_cmd->rdata; in lpfc_scsi_cmd_iocb_cmpl()
4348 spin_lock(&lpfc_cmd->buf_lock); in lpfc_scsi_cmd_iocb_cmpl()
4351 cmd = lpfc_cmd->pCmd; in lpfc_scsi_cmd_iocb_cmpl()
4355 spin_unlock(&lpfc_cmd->buf_lock); in lpfc_scsi_cmd_iocb_cmpl()
4359 idx = lpfc_cmd->cur_iocbq.hba_wqidx; in lpfc_scsi_cmd_iocb_cmpl()
4369 lpfc_cmd->result = (pIocbOut->iocb.un.ulpWord[4] & IOERR_PARAM_MASK); in lpfc_scsi_cmd_iocb_cmpl()
4370 lpfc_cmd->status = pIocbOut->iocb.ulpStatus; in lpfc_scsi_cmd_iocb_cmpl()
4372 lpfc_cmd->flags &= ~LPFC_SBUF_XBUSY; in lpfc_scsi_cmd_iocb_cmpl()
4374 lpfc_cmd->flags |= LPFC_SBUF_XBUSY; in lpfc_scsi_cmd_iocb_cmpl()
4377 if (lpfc_cmd->prot_data_type) { in lpfc_scsi_cmd_iocb_cmpl()
4380 src = (struct scsi_dif_tuple *)lpfc_cmd->prot_data_segment; in lpfc_scsi_cmd_iocb_cmpl()
4385 switch (lpfc_cmd->prot_data_type) { in lpfc_scsi_cmd_iocb_cmpl()
4388 lpfc_cmd->prot_data; in lpfc_scsi_cmd_iocb_cmpl()
4392 (uint16_t)lpfc_cmd->prot_data; in lpfc_scsi_cmd_iocb_cmpl()
4396 (uint16_t)lpfc_cmd->prot_data; in lpfc_scsi_cmd_iocb_cmpl()
4402 lpfc_cmd->prot_data = 0; in lpfc_scsi_cmd_iocb_cmpl()
4403 lpfc_cmd->prot_data_type = 0; in lpfc_scsi_cmd_iocb_cmpl()
4404 lpfc_cmd->prot_data_segment = NULL; in lpfc_scsi_cmd_iocb_cmpl()
4408 if (unlikely(lpfc_cmd->status)) { in lpfc_scsi_cmd_iocb_cmpl()
4409 if (lpfc_cmd->status == IOSTAT_LOCAL_REJECT && in lpfc_scsi_cmd_iocb_cmpl()
4410 (lpfc_cmd->result & IOERR_DRVR_MASK)) in lpfc_scsi_cmd_iocb_cmpl()
4411 lpfc_cmd->status = IOSTAT_DRIVER_REJECT; in lpfc_scsi_cmd_iocb_cmpl()
4412 else if (lpfc_cmd->status >= IOSTAT_CNT) in lpfc_scsi_cmd_iocb_cmpl()
4413 lpfc_cmd->status = IOSTAT_DEFAULT; in lpfc_scsi_cmd_iocb_cmpl()
4414 if (lpfc_cmd->status == IOSTAT_FCP_RSP_ERROR && in lpfc_scsi_cmd_iocb_cmpl()
4415 !lpfc_cmd->fcp_rsp->rspStatus3 && in lpfc_scsi_cmd_iocb_cmpl()
4416 (lpfc_cmd->fcp_rsp->rspStatus2 & RESID_UNDER) && in lpfc_scsi_cmd_iocb_cmpl()
4429 lpfc_cmd->status, lpfc_cmd->result, in lpfc_scsi_cmd_iocb_cmpl()
4433 lpfc_cmd->cur_iocbq.sli4_xritag : 0xffff, in lpfc_scsi_cmd_iocb_cmpl()
4435 lpfc_cmd->cur_iocbq.iocb.ulpIoTag); in lpfc_scsi_cmd_iocb_cmpl()
4437 switch (lpfc_cmd->status) { in lpfc_scsi_cmd_iocb_cmpl()
4440 lpfc_handle_fcp_err(vport, lpfc_cmd, in lpfc_scsi_cmd_iocb_cmpl()
4452 (lpfc_cmd->status == IOSTAT_NPORT_BSY) ? in lpfc_scsi_cmd_iocb_cmpl()
4473 if (lpfc_cmd->result == IOERR_ELXSEC_KEY_UNWRAP_ERROR || in lpfc_scsi_cmd_iocb_cmpl()
4474 lpfc_cmd->result == in lpfc_scsi_cmd_iocb_cmpl()
4476 lpfc_cmd->result == IOERR_ELXSEC_CRYPTO_ERROR || in lpfc_scsi_cmd_iocb_cmpl()
4477 lpfc_cmd->result == in lpfc_scsi_cmd_iocb_cmpl()
4482 if (lpfc_cmd->result == IOERR_INVALID_RPI || in lpfc_scsi_cmd_iocb_cmpl()
4483 lpfc_cmd->result == IOERR_NO_RESOURCES || in lpfc_scsi_cmd_iocb_cmpl()
4484 lpfc_cmd->result == IOERR_ABORT_REQUESTED || in lpfc_scsi_cmd_iocb_cmpl()
4485 lpfc_cmd->result == IOERR_SLER_CMD_RCV_FAILURE) { in lpfc_scsi_cmd_iocb_cmpl()
4489 if ((lpfc_cmd->result == IOERR_RX_DMA_FAILED || in lpfc_scsi_cmd_iocb_cmpl()
4490 lpfc_cmd->result == IOERR_TX_DMA_FAILED) && in lpfc_scsi_cmd_iocb_cmpl()
4497 lpfc_parse_bg_err(phba, lpfc_cmd, in lpfc_scsi_cmd_iocb_cmpl()
4507 if ((lpfc_cmd->status == IOSTAT_REMOTE_STOP) in lpfc_scsi_cmd_iocb_cmpl()
4515 lpfc_cmd->cur_iocbq.sli4_lxritag, in lpfc_scsi_cmd_iocb_cmpl()
4530 if (cmd->result || lpfc_cmd->fcp_rsp->rspSnsLen) { in lpfc_scsi_cmd_iocb_cmpl()
4542 time_after(jiffies, lpfc_cmd->start_time + in lpfc_scsi_cmd_iocb_cmpl()
4559 lpfc_scsi_unprep_dma_buf(phba, lpfc_cmd); in lpfc_scsi_cmd_iocb_cmpl()
4561 lpfc_cmd->pCmd = NULL; in lpfc_scsi_cmd_iocb_cmpl()
4562 spin_unlock(&lpfc_cmd->buf_lock); in lpfc_scsi_cmd_iocb_cmpl()
4565 if (lpfc_cmd->ts_cmd_start) { in lpfc_scsi_cmd_iocb_cmpl()
4566 lpfc_cmd->ts_isr_cmpl = pIocbIn->isr_timestamp; in lpfc_scsi_cmd_iocb_cmpl()
4567 lpfc_cmd->ts_data_io = ktime_get_ns(); in lpfc_scsi_cmd_iocb_cmpl()
4568 phba->ktime_last_cmd = lpfc_cmd->ts_data_io; in lpfc_scsi_cmd_iocb_cmpl()
4569 lpfc_io_ktime(phba, lpfc_cmd); in lpfc_scsi_cmd_iocb_cmpl()
4580 spin_lock(&lpfc_cmd->buf_lock); in lpfc_scsi_cmd_iocb_cmpl()
4581 lpfc_cmd->cur_iocbq.cmd_flag &= ~LPFC_DRIVER_ABORTED; in lpfc_scsi_cmd_iocb_cmpl()
4582 if (lpfc_cmd->waitq) in lpfc_scsi_cmd_iocb_cmpl()
4583 wake_up(lpfc_cmd->waitq); in lpfc_scsi_cmd_iocb_cmpl()
4584 spin_unlock(&lpfc_cmd->buf_lock); in lpfc_scsi_cmd_iocb_cmpl()
4586 lpfc_release_scsi_buf(phba, lpfc_cmd); in lpfc_scsi_cmd_iocb_cmpl()
4602 struct lpfc_io_buf *lpfc_cmd, in lpfc_scsi_prep_cmnd_buf_s3() argument
4605 IOCB_t *iocb_cmd = &lpfc_cmd->cur_iocbq.iocb; in lpfc_scsi_prep_cmnd_buf_s3()
4606 struct lpfc_iocbq *piocbq = &lpfc_cmd->cur_iocbq; in lpfc_scsi_prep_cmnd_buf_s3()
4607 struct scsi_cmnd *scsi_cmnd = lpfc_cmd->pCmd; in lpfc_scsi_prep_cmnd_buf_s3()
4608 struct fcp_cmnd *fcp_cmnd = lpfc_cmd->fcp_cmnd; in lpfc_scsi_prep_cmnd_buf_s3()
4609 struct lpfc_nodelist *pnode = lpfc_cmd->ndlp; in lpfc_scsi_prep_cmnd_buf_s3()
4658 piocbq->io_buf = lpfc_cmd; in lpfc_scsi_prep_cmnd_buf_s3()
4679 struct lpfc_io_buf *lpfc_cmd, in lpfc_scsi_prep_cmnd_buf_s4() argument
4683 struct scsi_cmnd *scsi_cmnd = lpfc_cmd->pCmd; in lpfc_scsi_prep_cmnd_buf_s4()
4684 struct fcp_cmnd *fcp_cmnd = lpfc_cmd->fcp_cmnd; in lpfc_scsi_prep_cmnd_buf_s4()
4686 struct lpfc_iocbq *pwqeq = &lpfc_cmd->cur_iocbq; in lpfc_scsi_prep_cmnd_buf_s4()
4687 struct lpfc_nodelist *pnode = lpfc_cmd->ndlp; in lpfc_scsi_prep_cmnd_buf_s4()
4689 u16 idx = lpfc_cmd->hdwq_no; in lpfc_scsi_prep_cmnd_buf_s4()
4770 pwqeq->io_buf = lpfc_cmd; in lpfc_scsi_prep_cmnd_buf_s4()
4771 pwqeq->hba_wqidx = lpfc_cmd->hdwq_no; in lpfc_scsi_prep_cmnd_buf_s4()
4787 lpfc_scsi_prep_cmnd(struct lpfc_vport *vport, struct lpfc_io_buf *lpfc_cmd, in lpfc_scsi_prep_cmnd() argument
4790 struct scsi_cmnd *scsi_cmnd = lpfc_cmd->pCmd; in lpfc_scsi_prep_cmnd()
4791 struct fcp_cmnd *fcp_cmnd = lpfc_cmd->fcp_cmnd; in lpfc_scsi_prep_cmnd()
4797 lpfc_cmd->fcp_rsp->rspSnsLen = 0; in lpfc_scsi_prep_cmnd()
4799 lpfc_cmd->fcp_cmnd->fcpCntl2 = 0; in lpfc_scsi_prep_cmnd()
4801 int_to_scsilun(lpfc_cmd->pCmd->device->lun, in lpfc_scsi_prep_cmnd()
4802 &lpfc_cmd->fcp_cmnd->fcp_lun); in lpfc_scsi_prep_cmnd()
4813 lpfc_scsi_prep_cmnd_buf(vport, lpfc_cmd, lpfc_cmd->timeout); in lpfc_scsi_prep_cmnd()
4834 struct lpfc_io_buf *lpfc_cmd, in lpfc_scsi_prep_task_mgmt_cmd_s3() argument
4840 struct lpfc_rport_data *rdata = lpfc_cmd->rdata; in lpfc_scsi_prep_task_mgmt_cmd_s3()
4846 piocbq = &(lpfc_cmd->cur_iocbq); in lpfc_scsi_prep_task_mgmt_cmd_s3()
4851 fcp_cmnd = lpfc_cmd->fcp_cmnd; in lpfc_scsi_prep_task_mgmt_cmd_s3()
4866 if (lpfc_cmd->timeout > 0xff) { in lpfc_scsi_prep_task_mgmt_cmd_s3()
4873 piocb->ulpTimeout = lpfc_cmd->timeout; in lpfc_scsi_prep_task_mgmt_cmd_s3()
4894 struct lpfc_io_buf *lpfc_cmd, in lpfc_scsi_prep_task_mgmt_cmd_s4() argument
4897 struct lpfc_iocbq *pwqeq = &lpfc_cmd->cur_iocbq; in lpfc_scsi_prep_task_mgmt_cmd_s4()
4900 struct lpfc_rport_data *rdata = lpfc_cmd->rdata; in lpfc_scsi_prep_task_mgmt_cmd_s4()
4914 fcp_cmnd = lpfc_cmd->fcp_cmnd; in lpfc_scsi_prep_task_mgmt_cmd_s4()
4932 if (lpfc_cmd->timeout > 0xff) { in lpfc_scsi_prep_task_mgmt_cmd_s4()
4939 bf_set(wqe_tmo, &wqe->fcp_icmd.wqe_com, lpfc_cmd->timeout); in lpfc_scsi_prep_task_mgmt_cmd_s4()
4942 lpfc_prep_embed_io(vport->phba, lpfc_cmd); in lpfc_scsi_prep_task_mgmt_cmd_s4()
4947 lpfc_sli4_set_rsp_sgl_last(vport->phba, lpfc_cmd); in lpfc_scsi_prep_task_mgmt_cmd_s4()
5010 struct lpfc_io_buf *lpfc_cmd = cmdiocbq->io_buf; in lpfc_tskmgmt_def_cmpl() local
5011 if (lpfc_cmd) in lpfc_tskmgmt_def_cmpl()
5012 lpfc_release_scsi_buf(phba, lpfc_cmd); in lpfc_tskmgmt_def_cmpl()
5219 struct lpfc_io_buf *lpfc_cmd; in lpfc_queuecommand() local
5299 lpfc_cmd = lpfc_get_scsi_buf(phba, ndlp, cmnd); in lpfc_queuecommand()
5300 if (lpfc_cmd == NULL) { in lpfc_queuecommand()
5308 lpfc_cmd->rx_cmd_start = start; in lpfc_queuecommand()
5310 cur_iocbq = &lpfc_cmd->cur_iocbq; in lpfc_queuecommand()
5315 lpfc_cmd->pCmd = cmnd; in lpfc_queuecommand()
5316 lpfc_cmd->rdata = rdata; in lpfc_queuecommand()
5317 lpfc_cmd->ndlp = ndlp; in lpfc_queuecommand()
5319 cmnd->host_scribble = (unsigned char *)lpfc_cmd; in lpfc_queuecommand()
5321 err = lpfc_scsi_prep_cmnd(vport, lpfc_cmd, ndlp); in lpfc_queuecommand()
5337 err = lpfc_bg_scsi_prep_dma_buf(phba, lpfc_cmd); in lpfc_queuecommand()
5349 err = lpfc_scsi_prep_dma_buf(phba, lpfc_cmd); in lpfc_queuecommand()
5388 lpfc_cmd->ts_cmd_start = start; in lpfc_queuecommand()
5389 lpfc_cmd->ts_last_cmd = phba->ktime_last_cmd; in lpfc_queuecommand()
5390 lpfc_cmd->ts_cmd_wqput = ktime_get_ns(); in lpfc_queuecommand()
5392 lpfc_cmd->ts_cmd_start = 0; in lpfc_queuecommand()
5429 lpfc_keep_pvt_pool_above_lowwm(phba, lpfc_cmd->hdwq_no); in lpfc_queuecommand()
5434 idx = lpfc_cmd->hdwq_no; in lpfc_queuecommand()
5435 lpfc_scsi_unprep_dma_buf(phba, lpfc_cmd); in lpfc_queuecommand()
5437 switch (lpfc_cmd->fcp_cmnd->fcpCntl3) { in lpfc_queuecommand()
5449 lpfc_release_scsi_buf(phba, lpfc_cmd); in lpfc_queuecommand()
5462 lpfc_release_scsi_buf(phba, lpfc_cmd); in lpfc_queuecommand()
5515 struct lpfc_io_buf *lpfc_cmd; in lpfc_abort_handler() local
5527 lpfc_cmd = (struct lpfc_io_buf *)cmnd->host_scribble; in lpfc_abort_handler()
5528 if (!lpfc_cmd) in lpfc_abort_handler()
5532 spin_lock_irqsave(&lpfc_cmd->buf_lock, flags); in lpfc_abort_handler()
5544 if (!lpfc_cmd->pCmd) { in lpfc_abort_handler()
5552 iocb = &lpfc_cmd->cur_iocbq; in lpfc_abort_handler()
5575 if (lpfc_cmd->pCmd != cmnd) { in lpfc_abort_handler()
5582 WARN_ON(iocb->io_buf != lpfc_cmd); in lpfc_abort_handler()
5591 spin_unlock_irqrestore(&lpfc_cmd->buf_lock, flags); in lpfc_abort_handler()
5595 lpfc_cmd->waitq = &waitq; in lpfc_abort_handler()
5611 lpfc_cmd->waitq = NULL; in lpfc_abort_handler()
5618 spin_unlock_irqrestore(&lpfc_cmd->buf_lock, flags); in lpfc_abort_handler()
5630 (lpfc_cmd->pCmd != cmnd), in lpfc_abort_handler()
5633 spin_lock(&lpfc_cmd->buf_lock); in lpfc_abort_handler()
5635 if (lpfc_cmd->pCmd == cmnd) { in lpfc_abort_handler()
5645 lpfc_cmd->waitq = NULL; in lpfc_abort_handler()
5647 spin_unlock(&lpfc_cmd->buf_lock); in lpfc_abort_handler()
5655 spin_unlock_irqrestore(&lpfc_cmd->buf_lock, flags); in lpfc_abort_handler()
5700 lpfc_check_fcp_rsp(struct lpfc_vport *vport, struct lpfc_io_buf *lpfc_cmd) in lpfc_check_fcp_rsp() argument
5702 struct fcp_rsp *fcprsp = lpfc_cmd->fcp_rsp; in lpfc_check_fcp_rsp()
5780 struct lpfc_io_buf *lpfc_cmd; in lpfc_send_taskmgmt() local
5793 lpfc_cmd = lpfc_get_scsi_buf(phba, rdata->pnode, NULL); in lpfc_send_taskmgmt()
5794 if (lpfc_cmd == NULL) in lpfc_send_taskmgmt()
5796 lpfc_cmd->timeout = phba->cfg_task_mgmt_tmo; in lpfc_send_taskmgmt()
5797 lpfc_cmd->rdata = rdata; in lpfc_send_taskmgmt()
5798 lpfc_cmd->pCmd = NULL; in lpfc_send_taskmgmt()
5799 lpfc_cmd->ndlp = pnode; in lpfc_send_taskmgmt()
5801 status = phba->lpfc_scsi_prep_task_mgmt_cmd(vport, lpfc_cmd, lun_id, in lpfc_send_taskmgmt()
5804 lpfc_release_scsi_buf(phba, lpfc_cmd); in lpfc_send_taskmgmt()
5808 iocbq = &lpfc_cmd->cur_iocbq; in lpfc_send_taskmgmt()
5811 lpfc_release_scsi_buf(phba, lpfc_cmd); in lpfc_send_taskmgmt()
5825 iocbq, iocbqrsp, lpfc_cmd->timeout); in lpfc_send_taskmgmt()
5844 ret = lpfc_check_fcp_rsp(vport, lpfc_cmd); in lpfc_send_taskmgmt()
5859 lpfc_release_scsi_buf(phba, lpfc_cmd); in lpfc_send_taskmgmt()