Lines Matching refs:cmd

108 	*cmd, struct atio_from_isp *atio, int ha_locked, int ul_abort);
2010 struct qla_tgt_cmd *cmd; in abort_cmds_for_lun() local
2027 list_for_each_entry(cmd, &vha->qla_cmd_list, cmd_list) { in abort_cmds_for_lun()
2031 cmd_key = sid_to_key(cmd->atio.u.isp24.fcp_hdr.s_id); in abort_cmds_for_lun()
2033 (struct scsi_lun *)&cmd->atio.u.isp24.fcp_cmnd.lun); in abort_cmds_for_lun()
2035 cmd->aborted = 1; in abort_cmds_for_lun()
2297 void qlt_send_resp_ctio(struct qla_qpair *qpair, struct qla_tgt_cmd *cmd, in qlt_send_resp_ctio() argument
2300 struct atio_from_isp *atio = &cmd->atio; in qlt_send_resp_ctio()
2303 struct scsi_qla_host *vha = cmd->vha; in qlt_send_resp_ctio()
2321 ctio->nport_handle = cpu_to_le16(cmd->sess->loop_id); in qlt_send_resp_ctio()
2432 struct qla_tgt_cmd *cmd = prm->cmd; in qlt_pci_map_calc_cnt() local
2434 BUG_ON(cmd->sg_cnt == 0); in qlt_pci_map_calc_cnt()
2436 prm->sg = (struct scatterlist *)cmd->sg; in qlt_pci_map_calc_cnt()
2437 prm->seg_cnt = dma_map_sg(&cmd->qpair->pdev->dev, cmd->sg, in qlt_pci_map_calc_cnt()
2438 cmd->sg_cnt, cmd->dma_data_direction); in qlt_pci_map_calc_cnt()
2442 prm->cmd->sg_mapped = 1; in qlt_pci_map_calc_cnt()
2444 if (cmd->se_cmd.prot_op == TARGET_PROT_NORMAL) { in qlt_pci_map_calc_cnt()
2455 if ((cmd->se_cmd.prot_op == TARGET_PROT_DIN_INSERT) || in qlt_pci_map_calc_cnt()
2456 (cmd->se_cmd.prot_op == TARGET_PROT_DOUT_STRIP)) { in qlt_pci_map_calc_cnt()
2457 prm->seg_cnt = DIV_ROUND_UP(cmd->bufflen, cmd->blk_sz); in qlt_pci_map_calc_cnt()
2462 if (cmd->prot_sg_cnt) { in qlt_pci_map_calc_cnt()
2463 prm->prot_sg = cmd->prot_sg; in qlt_pci_map_calc_cnt()
2464 prm->prot_seg_cnt = dma_map_sg(&cmd->qpair->pdev->dev, in qlt_pci_map_calc_cnt()
2465 cmd->prot_sg, cmd->prot_sg_cnt, in qlt_pci_map_calc_cnt()
2466 cmd->dma_data_direction); in qlt_pci_map_calc_cnt()
2470 if ((cmd->se_cmd.prot_op == TARGET_PROT_DIN_INSERT) || in qlt_pci_map_calc_cnt()
2471 (cmd->se_cmd.prot_op == TARGET_PROT_DOUT_STRIP)) { in qlt_pci_map_calc_cnt()
2473 prm->prot_seg_cnt = DIV_ROUND_UP(cmd->bufflen, in qlt_pci_map_calc_cnt()
2474 cmd->blk_sz); in qlt_pci_map_calc_cnt()
2484 ql_dbg_qp(ql_dbg_tgt, prm->cmd->qpair, 0xe04d, in qlt_pci_map_calc_cnt()
2486 0, prm->cmd->sg_cnt); in qlt_pci_map_calc_cnt()
2490 static void qlt_unmap_sg(struct scsi_qla_host *vha, struct qla_tgt_cmd *cmd) in qlt_unmap_sg() argument
2495 if (!cmd->sg_mapped) in qlt_unmap_sg()
2498 qpair = cmd->qpair; in qlt_unmap_sg()
2500 dma_unmap_sg(&qpair->pdev->dev, cmd->sg, cmd->sg_cnt, in qlt_unmap_sg()
2501 cmd->dma_data_direction); in qlt_unmap_sg()
2502 cmd->sg_mapped = 0; in qlt_unmap_sg()
2504 if (cmd->prot_sg_cnt) in qlt_unmap_sg()
2505 dma_unmap_sg(&qpair->pdev->dev, cmd->prot_sg, cmd->prot_sg_cnt, in qlt_unmap_sg()
2506 cmd->dma_data_direction); in qlt_unmap_sg()
2508 if (!cmd->ctx) in qlt_unmap_sg()
2511 if (cmd->ctx_dsd_alloced) in qlt_unmap_sg()
2512 qla2x00_clean_dsd_pool(ha, cmd->ctx); in qlt_unmap_sg()
2514 dma_pool_free(ha->dl_dma_pool, cmd->ctx, cmd->ctx->crc_ctx_dma); in qlt_unmap_sg()
2599 struct atio_from_isp *atio = &prm->cmd->atio; in qlt_24xx_build_ctio_pkt()
2601 struct qla_tgt_cmd *cmd = prm->cmd; in qlt_24xx_build_ctio_pkt() local
2609 pkt->vp_index = prm->cmd->vp_idx; in qlt_24xx_build_ctio_pkt()
2620 qpair->req->outstanding_cmds[h] = (srb_t *)prm->cmd; in qlt_24xx_build_ctio_pkt()
2624 pkt->nport_handle = cpu_to_le16(prm->cmd->loop_id); in qlt_24xx_build_ctio_pkt()
2632 pkt->u.status0.relative_offset = cpu_to_le32(prm->cmd->offset); in qlt_24xx_build_ctio_pkt()
2634 if (cmd->edif) { in qlt_24xx_build_ctio_pkt()
2635 if (cmd->dma_data_direction == DMA_TO_DEVICE) in qlt_24xx_build_ctio_pkt()
2636 prm->cmd->sess->edif.rx_bytes += cmd->bufflen; in qlt_24xx_build_ctio_pkt()
2637 if (cmd->dma_data_direction == DMA_FROM_DEVICE) in qlt_24xx_build_ctio_pkt()
2638 prm->cmd->sess->edif.tx_bytes += cmd->bufflen; in qlt_24xx_build_ctio_pkt()
2659 prm->cmd->qpair->req); in qlt_load_cont_data_segments()
2696 pkt24->u.status0.transfer_length = cpu_to_le32(prm->cmd->bufflen); in qlt_load_data_segments()
2725 static inline int qlt_has_data(struct qla_tgt_cmd *cmd) in qlt_has_data() argument
2727 return cmd->bufflen > 0; in qlt_has_data()
2732 struct qla_tgt_cmd *cmd; in qlt_print_dif_err() local
2737 cmd = prm->cmd; in qlt_print_dif_err()
2738 vha = cmd->vha; in qlt_print_dif_err()
2745 cmd->lba, cmd->lba, cmd->num_blks, &cmd->se_cmd, in qlt_print_dif_err()
2746 cmd->atio.u.isp24.exchange_addr); in qlt_print_dif_err()
2752 cmd->lba, cmd->lba, cmd->num_blks, &cmd->se_cmd, in qlt_print_dif_err()
2753 cmd->atio.u.isp24.exchange_addr); in qlt_print_dif_err()
2759 cmd->lba, cmd->lba, cmd->num_blks, &cmd->se_cmd, in qlt_print_dif_err()
2760 cmd->atio.u.isp24.exchange_addr); in qlt_print_dif_err()
2766 cmd->lba, cmd->lba, cmd->num_blks, &cmd->se_cmd, in qlt_print_dif_err()
2767 cmd->atio.u.isp24.exchange_addr); in qlt_print_dif_err()
2770 ql_dump_buffer(ql_dbg_tgt_dif, vha, 0xe011, cmd->cdb, 16); in qlt_print_dif_err()
2777 static int qlt_pre_xmit_response(struct qla_tgt_cmd *cmd, in qlt_pre_xmit_response() argument
2781 struct se_cmd *se_cmd = &cmd->se_cmd; in qlt_pre_xmit_response()
2782 struct qla_qpair *qpair = cmd->qpair; in qlt_pre_xmit_response()
2784 prm->cmd = cmd; in qlt_pre_xmit_response()
2785 prm->tgt = cmd->tgt; in qlt_pre_xmit_response()
2788 prm->sense_buffer = &cmd->sense_buffer[0]; in qlt_pre_xmit_response()
2799 if ((xmit_type & QLA_TGT_XMIT_DATA) && qlt_has_data(cmd)) { in qlt_pre_xmit_response()
2812 cmd->bufflen, prm->rq_result); in qlt_pre_xmit_response()
2819 se_cmd->t_task_cdb[0] : 0, cmd->bufflen, prm->rq_result); in qlt_pre_xmit_response()
2828 if (qlt_has_data(cmd)) { in qlt_pre_xmit_response()
2830 (IS_FWI2_CAPABLE(cmd->vha->hw) && in qlt_pre_xmit_response()
2841 static inline int qlt_need_explicit_conf(struct qla_tgt_cmd *cmd, in qlt_need_explicit_conf() argument
2844 if (cmd->qpair->enable_class_2) in qlt_need_explicit_conf()
2848 return cmd->conf_compl_supported; in qlt_need_explicit_conf()
2850 return cmd->qpair->enable_explicit_conf && in qlt_need_explicit_conf()
2851 cmd->conf_compl_supported; in qlt_need_explicit_conf()
2860 if (qlt_need_explicit_conf(prm->cmd, 0)) { in qlt_24xx_init_ctio_to_isp()
2870 if (qlt_need_explicit_conf(prm->cmd, 1)) { in qlt_24xx_init_ctio_to_isp()
2872 ql_dbg_qp(ql_dbg_tgt, prm->cmd->qpair, 0xe017, in qlt_24xx_init_ctio_to_isp()
2958 qla_tgt_set_dif_tags(struct qla_tgt_cmd *cmd, struct crc_context *ctx, in qla_tgt_set_dif_tags() argument
2961 struct se_cmd *se_cmd = &cmd->se_cmd; in qla_tgt_set_dif_tags()
2963 scsi_qla_host_t *vha = cmd->tgt->vha; in qla_tgt_set_dif_tags()
2984 t32 = ha->tgt.tgt_ops->get_dif_tags(cmd, pfw_prot_opts); in qla_tgt_set_dif_tags()
3056 struct qla_tgt_cmd *cmd = prm->cmd; in qlt_build_ctio_crc2_pkt() local
3057 struct se_cmd *se_cmd = &cmd->se_cmd; in qlt_build_ctio_crc2_pkt()
3059 struct atio_from_isp *atio = &prm->cmd->atio; in qlt_build_ctio_crc2_pkt()
3062 scsi_qla_host_t *vha = cmd->vha; in qlt_build_ctio_crc2_pkt()
3070 ql_dbg_qp(ql_dbg_tgt, cmd->qpair, 0xe071, in qlt_build_ctio_crc2_pkt()
3072 cmd->vp_idx, __func__, se_cmd, se_cmd->prot_op, in qlt_build_ctio_crc2_pkt()
3080 data_bytes = cmd->bufflen; in qlt_build_ctio_crc2_pkt()
3081 dif_bytes = (data_bytes / cmd->blk_sz) * 8; in qlt_build_ctio_crc2_pkt()
3087 if (cmd->prot_sg_cnt) in qlt_build_ctio_crc2_pkt()
3135 pkt->vp_index = cmd->vp_idx; in qlt_build_ctio_crc2_pkt()
3146 qpair->req->outstanding_cmds[h] = (srb_t *)prm->cmd; in qlt_build_ctio_crc2_pkt()
3150 pkt->nport_handle = cpu_to_le16(prm->cmd->loop_id); in qlt_build_ctio_crc2_pkt()
3161 pkt->relative_offset = cpu_to_le32(prm->cmd->offset); in qlt_build_ctio_crc2_pkt()
3164 if (cmd->dma_data_direction == DMA_TO_DEVICE) in qlt_build_ctio_crc2_pkt()
3166 else if (cmd->dma_data_direction == DMA_FROM_DEVICE) in qlt_build_ctio_crc2_pkt()
3176 crc_ctx_pkt = cmd->ctx = in qlt_build_ctio_crc2_pkt()
3188 qla_tgt_set_dif_tags(cmd, crc_ctx_pkt, &fw_prot_opts); in qlt_build_ctio_crc2_pkt()
3208 crc_ctx_pkt->blk_size = cpu_to_le16(cmd->blk_sz); in qlt_build_ctio_crc2_pkt()
3215 tc.blk_sz = cmd->blk_sz; in qlt_build_ctio_crc2_pkt()
3216 tc.bufflen = cmd->bufflen; in qlt_build_ctio_crc2_pkt()
3217 tc.sg = cmd->sg; in qlt_build_ctio_crc2_pkt()
3218 tc.prot_sg = cmd->prot_sg; in qlt_build_ctio_crc2_pkt()
3220 tc.ctx_dsd_alloced = &cmd->ctx_dsd_alloced; in qlt_build_ctio_crc2_pkt()
3239 prm->prot_seg_cnt, cmd)) in qlt_build_ctio_crc2_pkt()
3255 int qlt_xmit_response(struct qla_tgt_cmd *cmd, int xmit_type, in qlt_xmit_response() argument
3258 struct scsi_qla_host *vha = cmd->vha; in qlt_xmit_response()
3259 struct qla_qpair *qpair = cmd->qpair; in qlt_xmit_response()
3266 if (!qpair->fw_started || (cmd->reset_count != qpair->chip_reset) || in qlt_xmit_response()
3267 (cmd->sess && cmd->sess->deleted)) { in qlt_xmit_response()
3268 cmd->state = QLA_TGT_STATE_PROCESSED; in qlt_xmit_response()
3275 1 : 0, cmd->bufflen, cmd->sg_cnt, cmd->dma_data_direction, in qlt_xmit_response()
3276 &cmd->se_cmd, qpair->id); in qlt_xmit_response()
3278 res = qlt_pre_xmit_response(cmd, &prm, xmit_type, scsi_status, in qlt_xmit_response()
3291 if (!qpair->fw_started || cmd->reset_count != qpair->chip_reset) { in qlt_xmit_response()
3296 cmd->state = QLA_TGT_STATE_PROCESSED; in qlt_xmit_response()
3300 cmd->reset_count, qpair->chip_reset); in qlt_xmit_response()
3310 if (cmd->se_cmd.prot_op && (xmit_type & QLA_TGT_XMIT_DATA)) in qlt_xmit_response()
3321 if (qlt_has_data(cmd) && (xmit_type & QLA_TGT_XMIT_DATA)) { in qlt_xmit_response()
3326 if (cmd->se_cmd.prot_op == TARGET_PROT_NORMAL) in qlt_xmit_response()
3333 if (!cmd->edif) in qlt_xmit_response()
3339 if (qlt_need_explicit_conf(cmd, 0)) { in qlt_xmit_response()
3389 cmd->state = QLA_TGT_STATE_PROCESSED; /* Mid-level is done processing */ in qlt_xmit_response()
3390 cmd->cmd_sent_to_fw = 1; in qlt_xmit_response()
3391 cmd->ctio_flags = le16_to_cpu(pkt->u.status0.flags); in qlt_xmit_response()
3404 qlt_unmap_sg(vha, cmd); in qlt_xmit_response()
3411 int qlt_rdy_to_xfer(struct qla_tgt_cmd *cmd) in qlt_rdy_to_xfer() argument
3414 struct scsi_qla_host *vha = cmd->vha; in qlt_rdy_to_xfer()
3415 struct qla_tgt *tgt = cmd->tgt; in qlt_rdy_to_xfer()
3419 struct qla_qpair *qpair = cmd->qpair; in qlt_rdy_to_xfer()
3422 prm.cmd = cmd; in qlt_rdy_to_xfer()
3427 if (!qpair->fw_started || (cmd->reset_count != qpair->chip_reset) || in qlt_rdy_to_xfer()
3428 (cmd->sess && cmd->sess->deleted)) { in qlt_rdy_to_xfer()
3433 cmd->aborted = 1; in qlt_rdy_to_xfer()
3434 cmd->write_data_transferred = 0; in qlt_rdy_to_xfer()
3435 cmd->state = QLA_TGT_STATE_DATA_IN; in qlt_rdy_to_xfer()
3436 vha->hw->tgt.tgt_ops->handle_data(cmd); in qlt_rdy_to_xfer()
3440 cmd->reset_count, qpair->chip_reset); in qlt_rdy_to_xfer()
3453 if (cmd->se_cmd.prot_op) in qlt_rdy_to_xfer()
3467 if (cmd->se_cmd.prot_op == TARGET_PROT_NORMAL) in qlt_rdy_to_xfer()
3470 cmd->state = QLA_TGT_STATE_NEED_DATA; in qlt_rdy_to_xfer()
3471 cmd->cmd_sent_to_fw = 1; in qlt_rdy_to_xfer()
3472 cmd->ctio_flags = le16_to_cpu(pkt->u.status0.flags); in qlt_rdy_to_xfer()
3485 qlt_unmap_sg(vha, cmd); in qlt_rdy_to_xfer()
3497 qlt_handle_dif_error(struct qla_qpair *qpair, struct qla_tgt_cmd *cmd, in qlt_handle_dif_error() argument
3502 uint64_t lba = cmd->se_cmd.t_task_lba; in qlt_handle_dif_error()
3505 struct scsi_qla_host *vha = cmd->vha; in qlt_handle_dif_error()
3507 cmd->trc_flags |= TRC_DIF_ERR; in qlt_handle_dif_error()
3509 cmd->a_guard = get_unaligned_be16(ap + 0); in qlt_handle_dif_error()
3510 cmd->a_app_tag = get_unaligned_be16(ap + 2); in qlt_handle_dif_error()
3511 cmd->a_ref_tag = get_unaligned_be32(ap + 4); in qlt_handle_dif_error()
3513 cmd->e_guard = get_unaligned_be16(ep + 0); in qlt_handle_dif_error()
3514 cmd->e_app_tag = get_unaligned_be16(ep + 2); in qlt_handle_dif_error()
3515 cmd->e_ref_tag = get_unaligned_be32(ep + 4); in qlt_handle_dif_error()
3518 "%s: aborted %d state %d\n", __func__, cmd->aborted, cmd->state); in qlt_handle_dif_error()
3523 if (cmd->e_app_tag != cmd->a_app_tag) { in qlt_handle_dif_error()
3526 cmd->cdb[0], lba, (lba+cmd->num_blks), cmd->num_blks, in qlt_handle_dif_error()
3527 cmd->a_ref_tag, cmd->e_ref_tag, cmd->a_app_tag, in qlt_handle_dif_error()
3528 cmd->e_app_tag, cmd->a_guard, cmd->e_guard, cmd, in qlt_handle_dif_error()
3529 cmd->atio.u.isp24.fcp_hdr.ox_id); in qlt_handle_dif_error()
3531 cmd->dif_err_code = DIF_ERR_APP; in qlt_handle_dif_error()
3539 if (cmd->e_ref_tag != cmd->a_ref_tag) { in qlt_handle_dif_error()
3542 cmd->cdb[0], lba, (lba+cmd->num_blks), cmd->num_blks, in qlt_handle_dif_error()
3543 cmd->a_ref_tag, cmd->e_ref_tag, cmd->a_app_tag, in qlt_handle_dif_error()
3544 cmd->e_app_tag, cmd->a_guard, cmd->e_guard, cmd, in qlt_handle_dif_error()
3545 cmd->atio.u.isp24.fcp_hdr.ox_id); in qlt_handle_dif_error()
3547 cmd->dif_err_code = DIF_ERR_REF; in qlt_handle_dif_error()
3556 if (cmd->e_guard != cmd->a_guard) { in qlt_handle_dif_error()
3559 cmd->cdb[0], lba, (lba+cmd->num_blks), cmd->num_blks, in qlt_handle_dif_error()
3560 cmd->a_ref_tag, cmd->e_ref_tag, cmd->a_app_tag, in qlt_handle_dif_error()
3561 cmd->e_app_tag, cmd->a_guard, cmd->e_guard, cmd, in qlt_handle_dif_error()
3562 cmd->atio.u.isp24.fcp_hdr.ox_id); in qlt_handle_dif_error()
3564 cmd->dif_err_code = DIF_ERR_GRD; in qlt_handle_dif_error()
3571 switch (cmd->state) { in qlt_handle_dif_error()
3574 cmd->state = QLA_TGT_STATE_DATA_IN; in qlt_handle_dif_error()
3575 vha->hw->tgt.tgt_ops->handle_data(cmd); in qlt_handle_dif_error()
3578 spin_lock_irqsave(&cmd->cmd_lock, flags); in qlt_handle_dif_error()
3579 if (cmd->aborted) { in qlt_handle_dif_error()
3580 spin_unlock_irqrestore(&cmd->cmd_lock, flags); in qlt_handle_dif_error()
3581 vha->hw->tgt.tgt_ops->free_cmd(cmd); in qlt_handle_dif_error()
3584 spin_unlock_irqrestore(&cmd->cmd_lock, flags); in qlt_handle_dif_error()
3586 qlt_send_resp_ctio(qpair, cmd, scsi_status, sense_key, asc, in qlt_handle_dif_error()
3591 vha->hw->tgt.tgt_ops->free_cmd(cmd); in qlt_handle_dif_error()
3662 struct qla_tgt_cmd *cmd, in __qlt_send_term_exchange() argument
3674 if (cmd) in __qlt_send_term_exchange()
3675 vha = cmd->vha; in __qlt_send_term_exchange()
3685 if (cmd != NULL) { in __qlt_send_term_exchange()
3686 if (cmd->state < QLA_TGT_STATE_PROCESSED) { in __qlt_send_term_exchange()
3689 "incorrect state %d\n", vha->vp_idx, cmd, in __qlt_send_term_exchange()
3690 cmd->state); in __qlt_send_term_exchange()
3722 struct qla_tgt_cmd *cmd, struct atio_from_isp *atio, int ha_locked, in qlt_send_term_exchange() argument
3730 if (cmd) in qlt_send_term_exchange()
3731 vha = cmd->vha; in qlt_send_term_exchange()
3736 rc = __qlt_send_term_exchange(qpair, cmd, atio); in qlt_send_term_exchange()
3742 rc = __qlt_send_term_exchange(qpair, cmd, atio); in qlt_send_term_exchange()
3747 if (cmd && !ul_abort && !cmd->aborted) { in qlt_send_term_exchange()
3748 if (cmd->sg_mapped) in qlt_send_term_exchange()
3749 qlt_unmap_sg(vha, cmd); in qlt_send_term_exchange()
3750 vha->hw->tgt.tgt_ops->free_cmd(cmd); in qlt_send_term_exchange()
3762 struct qla_tgt_cmd *cmd, *tcmd; in qlt_init_term_exchange() local
3767 cmd = tcmd = NULL; in qlt_init_term_exchange()
3772 list_for_each_entry_safe(cmd, tcmd, &free_list, cmd_list) { in qlt_init_term_exchange()
3773 list_del(&cmd->cmd_list); in qlt_init_term_exchange()
3777 qlt_free_cmd(cmd); in qlt_init_term_exchange()
3806 int qlt_abort_cmd(struct qla_tgt_cmd *cmd) in qlt_abort_cmd() argument
3808 struct qla_tgt *tgt = cmd->tgt; in qlt_abort_cmd()
3810 struct se_cmd *se_cmd = &cmd->se_cmd; in qlt_abort_cmd()
3815 "(se_cmd=%p, tag=%llu)", vha->vp_idx, cmd, &cmd->se_cmd, in qlt_abort_cmd()
3818 spin_lock_irqsave(&cmd->cmd_lock, flags); in qlt_abort_cmd()
3819 if (cmd->aborted) { in qlt_abort_cmd()
3820 if (cmd->sg_mapped) in qlt_abort_cmd()
3821 qlt_unmap_sg(vha, cmd); in qlt_abort_cmd()
3823 spin_unlock_irqrestore(&cmd->cmd_lock, flags); in qlt_abort_cmd()
3831 "se_cmd_flags %x\n", cmd, cmd->se_cmd.transport_state, in qlt_abort_cmd()
3832 cmd->se_cmd.t_state, cmd->se_cmd.se_cmd_flags); in qlt_abort_cmd()
3835 cmd->aborted = 1; in qlt_abort_cmd()
3836 cmd->trc_flags |= TRC_ABORT; in qlt_abort_cmd()
3837 spin_unlock_irqrestore(&cmd->cmd_lock, flags); in qlt_abort_cmd()
3839 qlt_send_term_exchange(cmd->qpair, cmd, &cmd->atio, 0, 1); in qlt_abort_cmd()
3844 void qlt_free_cmd(struct qla_tgt_cmd *cmd) in qlt_free_cmd() argument
3846 struct fc_port *sess = cmd->sess; in qlt_free_cmd()
3848 ql_dbg(ql_dbg_tgt, cmd->vha, 0xe074, in qlt_free_cmd()
3850 __func__, &cmd->se_cmd, in qlt_free_cmd()
3851 be16_to_cpu(cmd->atio.u.isp24.fcp_hdr.ox_id)); in qlt_free_cmd()
3853 BUG_ON(cmd->cmd_in_wq); in qlt_free_cmd()
3855 if (!cmd->q_full) in qlt_free_cmd()
3856 qlt_decr_num_pend_cmds(cmd->vha); in qlt_free_cmd()
3858 BUG_ON(cmd->sg_mapped); in qlt_free_cmd()
3859 cmd->jiffies_at_free = get_jiffies_64(); in qlt_free_cmd()
3865 cmd->jiffies_at_free = get_jiffies_64(); in qlt_free_cmd()
3866 cmd->vha->hw->tgt.tgt_ops->rel_cmd(cmd); in qlt_free_cmd()
3874 struct qla_tgt_cmd *cmd, uint32_t status) in qlt_term_ctio_exchange() argument
3879 if (cmd->se_cmd.prot_op) in qlt_term_ctio_exchange()
3883 cmd->lba, cmd->lba, in qlt_term_ctio_exchange()
3884 cmd->num_blks, &cmd->se_cmd, in qlt_term_ctio_exchange()
3885 cmd->atio.u.isp24.exchange_addr, in qlt_term_ctio_exchange()
3886 cmd->se_cmd.prot_op, in qlt_term_ctio_exchange()
3887 prot_op_str(cmd->se_cmd.prot_op)); in qlt_term_ctio_exchange()
3898 qlt_send_term_exchange(qpair, cmd, &cmd->atio, 1, 0); in qlt_term_ctio_exchange()
3908 void *cmd = NULL; in qlt_ctio_to_cmd() local
3937 cmd = req->outstanding_cmds[h]; in qlt_ctio_to_cmd()
3938 if (unlikely(cmd == NULL)) { in qlt_ctio_to_cmd()
3953 return cmd; in qlt_ctio_to_cmd()
3964 struct qla_tgt_cmd *cmd; in qlt_do_ctio_completion() local
3977 cmd = qlt_ctio_to_cmd(vha, rsp, handle, ctio); in qlt_do_ctio_completion()
3978 if (cmd == NULL) in qlt_do_ctio_completion()
3982 cmd->sess) { in qlt_do_ctio_completion()
3983 qlt_chk_edif_rx_sa_delete_pending(vha, cmd->sess, in qlt_do_ctio_completion()
3987 se_cmd = &cmd->se_cmd; in qlt_do_ctio_completion()
3988 cmd->cmd_sent_to_fw = 0; in qlt_do_ctio_completion()
3990 qlt_unmap_sg(vha, cmd); in qlt_do_ctio_completion()
3998 vha->vp_idx, cmd->atio.u.isp24.attr, in qlt_do_ctio_completion()
3999 ((cmd->ctio_flags >> 9) & 0xf), in qlt_do_ctio_completion()
4000 cmd->ctio_flags); in qlt_do_ctio_completion()
4014 status, cmd->state, se_cmd); in qlt_do_ctio_completion()
4027 status, cmd->state, se_cmd); in qlt_do_ctio_completion()
4029 if (logged_out && cmd->sess) { in qlt_do_ctio_completion()
4034 cmd->sess->send_els_logo = 1; in qlt_do_ctio_completion()
4037 __func__, __LINE__, cmd->sess->port_name); in qlt_do_ctio_completion()
4039 qlt_schedule_sess_for_deletion(cmd->sess); in qlt_do_ctio_completion()
4050 vha->vp_idx, status, cmd->state, se_cmd, in qlt_do_ctio_completion()
4054 qlt_handle_dif_error(qpair, cmd, ctio); in qlt_do_ctio_completion()
4064 vha->vp_idx, status, cmd->state, se_cmd); in qlt_do_ctio_completion()
4070 vha->vp_idx, status, cmd->state, se_cmd); in qlt_do_ctio_completion()
4081 if ((cmd->state != QLA_TGT_STATE_NEED_DATA) && in qlt_do_ctio_completion()
4082 (!cmd->aborted)) { in qlt_do_ctio_completion()
4083 cmd->trc_flags |= TRC_CTIO_ERR; in qlt_do_ctio_completion()
4084 if (qlt_term_ctio_exchange(qpair, ctio, cmd, status)) in qlt_do_ctio_completion()
4089 if (cmd->state == QLA_TGT_STATE_PROCESSED) { in qlt_do_ctio_completion()
4090 cmd->trc_flags |= TRC_CTIO_DONE; in qlt_do_ctio_completion()
4091 } else if (cmd->state == QLA_TGT_STATE_NEED_DATA) { in qlt_do_ctio_completion()
4092 cmd->state = QLA_TGT_STATE_DATA_IN; in qlt_do_ctio_completion()
4095 cmd->write_data_transferred = 1; in qlt_do_ctio_completion()
4097 ha->tgt.tgt_ops->handle_data(cmd); in qlt_do_ctio_completion()
4099 } else if (cmd->aborted) { in qlt_do_ctio_completion()
4100 cmd->trc_flags |= TRC_CTIO_ABORTED; in qlt_do_ctio_completion()
4102 "Aborted command %p (tag %lld) finished\n", cmd, se_cmd->tag); in qlt_do_ctio_completion()
4104 cmd->trc_flags |= TRC_CTIO_STRANGE; in qlt_do_ctio_completion()
4107 "not return a CTIO complete\n", vha->vp_idx, cmd->state); in qlt_do_ctio_completion()
4111 !cmd->aborted) { in qlt_do_ctio_completion()
4116 ha->tgt.tgt_ops->free_cmd(cmd); in qlt_do_ctio_completion()
4154 static void __qlt_do_work(struct qla_tgt_cmd *cmd) in __qlt_do_work() argument
4156 scsi_qla_host_t *vha = cmd->vha; in __qlt_do_work()
4158 struct fc_port *sess = cmd->sess; in __qlt_do_work()
4159 struct atio_from_isp *atio = &cmd->atio; in __qlt_do_work()
4164 struct qla_qpair *qpair = cmd->qpair; in __qlt_do_work()
4166 cmd->cmd_in_wq = 0; in __qlt_do_work()
4167 cmd->trc_flags |= TRC_DO_WORK; in __qlt_do_work()
4169 if (cmd->aborted) { in __qlt_do_work()
4172 cmd->atio.u.isp24.exchange_addr); in __qlt_do_work()
4176 spin_lock_init(&cmd->cmd_lock); in __qlt_do_work()
4178 cmd->se_cmd.tag = le32_to_cpu(atio->u.isp24.exchange_addr); in __qlt_do_work()
4195 ret = ha->tgt.tgt_ops->handle_cmd(vha, cmd, cdb, data_length, in __qlt_do_work()
4206 ql_dbg(ql_dbg_io, vha, 0x3060, "Terminating work cmd %p", cmd); in __qlt_do_work()
4211 cmd->trc_flags |= TRC_DO_WORK_ERR; in __qlt_do_work()
4213 qlt_send_term_exchange(qpair, NULL, &cmd->atio, 1, 0); in __qlt_do_work()
4216 cmd->vha->hw->tgt.tgt_ops->rel_cmd(cmd); in __qlt_do_work()
4224 struct qla_tgt_cmd *cmd = container_of(work, struct qla_tgt_cmd, work); in qlt_do_work() local
4225 scsi_qla_host_t *vha = cmd->vha; in qlt_do_work()
4229 list_del(&cmd->cmd_list); in qlt_do_work()
4232 __qlt_do_work(cmd); in qlt_do_work()
4261 struct qla_tgt_cmd *cmd) in qlt_assign_qpair() argument
4268 h = btree_lookup64(&tgt->lun_qpair_map, cmd->unpacked_lun); in qlt_assign_qpair()
4281 cmd->unpacked_lun, h, GFP_ATOMIC); in qlt_assign_qpair()
4286 cmd->unpacked_lun); in qlt_assign_qpair()
4301 cmd->unpacked_lun, h, GFP_ATOMIC); in qlt_assign_qpair()
4306 cmd->unpacked_lun); in qlt_assign_qpair()
4323 cmd->unpacked_lun, h, GFP_ATOMIC); in qlt_assign_qpair()
4328 cmd->unpacked_lun); in qlt_assign_qpair()
4335 cmd->qpair = h->qpair; in qlt_assign_qpair()
4336 cmd->se_cmd.cpuid = h->cpuid; in qlt_assign_qpair()
4343 struct qla_tgt_cmd *cmd; in qlt_get_tag() local
4345 cmd = vha->hw->tgt.tgt_ops->get_cmd(sess); in qlt_get_tag()
4346 if (!cmd) in qlt_get_tag()
4349 cmd->cmd_type = TYPE_TGT_CMD; in qlt_get_tag()
4350 memcpy(&cmd->atio, atio, sizeof(*atio)); in qlt_get_tag()
4351 INIT_LIST_HEAD(&cmd->sess_cmd_list); in qlt_get_tag()
4352 cmd->state = QLA_TGT_STATE_NEW; in qlt_get_tag()
4353 cmd->tgt = vha->vha_tgt.qla_tgt; in qlt_get_tag()
4355 cmd->vha = vha; in qlt_get_tag()
4356 cmd->sess = sess; in qlt_get_tag()
4357 cmd->loop_id = sess->loop_id; in qlt_get_tag()
4358 cmd->conf_compl_supported = sess->conf_compl_supported; in qlt_get_tag()
4360 cmd->trc_flags = 0; in qlt_get_tag()
4361 cmd->jiffies_at_alloc = get_jiffies_64(); in qlt_get_tag()
4363 cmd->unpacked_lun = scsilun_to_int( in qlt_get_tag()
4365 qlt_assign_qpair(vha, cmd); in qlt_get_tag()
4366 cmd->reset_count = vha->hw->base_qpair->chip_reset; in qlt_get_tag()
4367 cmd->vp_idx = vha->vp_idx; in qlt_get_tag()
4368 cmd->edif = sess->edif.enable; in qlt_get_tag()
4370 return cmd; in qlt_get_tag()
4380 struct qla_tgt_cmd *cmd; in qlt_handle_cmd_for_atio() local
4418 cmd = qlt_get_tag(vha, sess, atio); in qlt_handle_cmd_for_atio()
4419 if (!cmd) { in qlt_handle_cmd_for_atio()
4426 cmd->cmd_in_wq = 1; in qlt_handle_cmd_for_atio()
4427 cmd->trc_flags |= TRC_NEW_CMD; in qlt_handle_cmd_for_atio()
4430 list_add_tail(&cmd->cmd_list, &vha->qla_cmd_list); in qlt_handle_cmd_for_atio()
4433 INIT_WORK(&cmd->work, qlt_do_work); in qlt_handle_cmd_for_atio()
4435 queue_work_on(cmd->se_cmd.cpuid, qla_tgt_wq, &cmd->work); in qlt_handle_cmd_for_atio()
4437 if (cmd->atio.u.isp24.fcp_cmnd.rddata) in qlt_handle_cmd_for_atio()
4438 queue_work(qla_tgt_wq, &cmd->work); in qlt_handle_cmd_for_atio()
4440 queue_work_on(cmd->se_cmd.cpuid, qla_tgt_wq, in qlt_handle_cmd_for_atio()
4441 &cmd->work); in qlt_handle_cmd_for_atio()
4443 queue_work(qla_tgt_wq, &cmd->work); in qlt_handle_cmd_for_atio()
4699 struct qla_tgt_cmd *cmd; in abort_cmds_for_s_id() local
4718 list_for_each_entry(cmd, &vha->qla_cmd_list, cmd_list) { in abort_cmds_for_s_id()
4719 uint32_t cmd_key = sid_to_key(cmd->atio.u.isp24.fcp_hdr.s_id); in abort_cmds_for_s_id()
4722 cmd->aborted = 1; in abort_cmds_for_s_id()
5468 struct qla_tgt_cmd *cmd; in qlt_alloc_qfull_cmd() local
5498 cmd = ha->tgt.tgt_ops->get_cmd(sess); in qlt_alloc_qfull_cmd()
5499 if (!cmd) { in qlt_alloc_qfull_cmd()
5515 INIT_LIST_HEAD(&cmd->cmd_list); in qlt_alloc_qfull_cmd()
5516 memcpy(&cmd->atio, atio, sizeof(*atio)); in qlt_alloc_qfull_cmd()
5518 cmd->tgt = vha->vha_tgt.qla_tgt; in qlt_alloc_qfull_cmd()
5519 cmd->vha = vha; in qlt_alloc_qfull_cmd()
5520 cmd->reset_count = ha->base_qpair->chip_reset; in qlt_alloc_qfull_cmd()
5521 cmd->q_full = 1; in qlt_alloc_qfull_cmd()
5522 cmd->qpair = ha->base_qpair; in qlt_alloc_qfull_cmd()
5525 cmd->q_full = 1; in qlt_alloc_qfull_cmd()
5527 cmd->state = status; in qlt_alloc_qfull_cmd()
5529 cmd->term_exchg = 1; in qlt_alloc_qfull_cmd()
5532 list_add_tail(&cmd->cmd_list, &vha->hw->tgt.q_full_list); in qlt_alloc_qfull_cmd()
5548 struct qla_tgt_cmd *cmd, *tcmd; in qlt_free_qfull_cmds() local
5568 list_for_each_entry_safe(cmd, tcmd, &q_full_list, cmd_list) { in qlt_free_qfull_cmds()
5569 if (cmd->q_full) in qlt_free_qfull_cmds()
5571 rc = __qlt_send_busy(qpair, &cmd->atio, cmd->state); in qlt_free_qfull_cmds()
5572 else if (cmd->term_exchg) in qlt_free_qfull_cmds()
5573 rc = __qlt_send_term_exchange(qpair, NULL, &cmd->atio); in qlt_free_qfull_cmds()
5578 if (cmd->q_full) in qlt_free_qfull_cmds()
5581 be16_to_cpu(cmd->atio.u.isp24.fcp_hdr.ox_id)); in qlt_free_qfull_cmds()
5582 else if (cmd->term_exchg) in qlt_free_qfull_cmds()
5585 be16_to_cpu(cmd->atio.u.isp24.fcp_hdr.ox_id)); in qlt_free_qfull_cmds()
5589 cmd); in qlt_free_qfull_cmds()
5591 list_move_tail(&cmd->cmd_list, &free_list); in qlt_free_qfull_cmds()
5598 cmd = NULL; in qlt_free_qfull_cmds()
5600 list_for_each_entry_safe(cmd, tcmd, &free_list, cmd_list) { in qlt_free_qfull_cmds()
5601 list_del(&cmd->cmd_list); in qlt_free_qfull_cmds()
5605 qlt_free_cmd(cmd); in qlt_free_qfull_cmds()