Lines Matching refs:prm
1078 struct qla_tgt_sess_work_param *prm; in qlt_sched_sess_work() local
1081 prm = kzalloc(sizeof(*prm), GFP_ATOMIC); in qlt_sched_sess_work()
1082 if (!prm) { in qlt_sched_sess_work()
1092 type, prm, param, param_size, tgt); in qlt_sched_sess_work()
1094 prm->type = type; in qlt_sched_sess_work()
1095 memcpy(&prm->tm_iocb, param, param_size); in qlt_sched_sess_work()
1098 list_add_tail(&prm->sess_works_list_entry, &tgt->sess_works_list); in qlt_sched_sess_work()
1602 static int qlt_pci_map_calc_cnt(struct qla_tgt_prm *prm) in qlt_pci_map_calc_cnt() argument
1604 struct qla_tgt_cmd *cmd = prm->cmd; in qlt_pci_map_calc_cnt()
1608 prm->sg = (struct scatterlist *)cmd->sg; in qlt_pci_map_calc_cnt()
1609 prm->seg_cnt = pci_map_sg(prm->tgt->ha->pdev, cmd->sg, in qlt_pci_map_calc_cnt()
1611 if (unlikely(prm->seg_cnt == 0)) in qlt_pci_map_calc_cnt()
1614 prm->cmd->sg_mapped = 1; in qlt_pci_map_calc_cnt()
1621 if (prm->seg_cnt > prm->tgt->datasegs_per_cmd) in qlt_pci_map_calc_cnt()
1622 prm->req_cnt += DIV_ROUND_UP(prm->seg_cnt - in qlt_pci_map_calc_cnt()
1623 prm->tgt->datasegs_per_cmd, in qlt_pci_map_calc_cnt()
1624 prm->tgt->datasegs_per_cont); in qlt_pci_map_calc_cnt()
1629 prm->seg_cnt = DIV_ROUND_UP(cmd->bufflen, cmd->blk_sz); in qlt_pci_map_calc_cnt()
1630 prm->tot_dsds = prm->seg_cnt; in qlt_pci_map_calc_cnt()
1632 prm->tot_dsds = prm->seg_cnt; in qlt_pci_map_calc_cnt()
1635 prm->prot_sg = cmd->prot_sg; in qlt_pci_map_calc_cnt()
1636 prm->prot_seg_cnt = pci_map_sg(prm->tgt->ha->pdev, in qlt_pci_map_calc_cnt()
1639 if (unlikely(prm->prot_seg_cnt == 0)) in qlt_pci_map_calc_cnt()
1645 prm->prot_seg_cnt = DIV_ROUND_UP(cmd->bufflen, in qlt_pci_map_calc_cnt()
1647 prm->tot_dsds += prm->prot_seg_cnt; in qlt_pci_map_calc_cnt()
1649 prm->tot_dsds += prm->prot_seg_cnt; in qlt_pci_map_calc_cnt()
1656 ql_dbg(ql_dbg_tgt, prm->cmd->vha, 0xe04d, in qlt_pci_map_calc_cnt()
1658 0, prm->cmd->sg_cnt); in qlt_pci_map_calc_cnt()
1757 static int qlt_24xx_build_ctio_pkt(struct qla_tgt_prm *prm, in qlt_24xx_build_ctio_pkt() argument
1763 struct atio_from_isp *atio = &prm->cmd->atio; in qlt_24xx_build_ctio_pkt()
1767 prm->pkt = pkt; in qlt_24xx_build_ctio_pkt()
1771 pkt->entry_count = (uint8_t)prm->req_cnt; in qlt_24xx_build_ctio_pkt()
1783 ha->tgt.cmds[h-1] = prm->cmd; in qlt_24xx_build_ctio_pkt()
1786 pkt->nport_handle = prm->cmd->loop_id; in qlt_24xx_build_ctio_pkt()
1795 pkt->u.status0.relative_offset = cpu_to_le32(prm->cmd->offset); in qlt_24xx_build_ctio_pkt()
1804 static void qlt_load_cont_data_segments(struct qla_tgt_prm *prm, in qlt_load_cont_data_segments() argument
1809 int enable_64bit_addressing = prm->tgt->tgt_enable_64bit_addr; in qlt_load_cont_data_segments()
1812 while (prm->seg_cnt > 0) { in qlt_load_cont_data_segments()
1841 cnt < prm->tgt->datasegs_per_cont && prm->seg_cnt; in qlt_load_cont_data_segments()
1842 cnt++, prm->seg_cnt--) { in qlt_load_cont_data_segments()
1845 (sg_dma_address(prm->sg))); in qlt_load_cont_data_segments()
1850 (prm->sg))); in qlt_load_cont_data_segments()
1852 *dword_ptr++ = cpu_to_le32(sg_dma_len(prm->sg)); in qlt_load_cont_data_segments()
1854 prm->sg = sg_next(prm->sg); in qlt_load_cont_data_segments()
1863 static void qlt_load_data_segments(struct qla_tgt_prm *prm, in qlt_load_data_segments() argument
1868 int enable_64bit_addressing = prm->tgt->tgt_enable_64bit_addr; in qlt_load_data_segments()
1869 struct ctio7_to_24xx *pkt24 = (struct ctio7_to_24xx *)prm->pkt; in qlt_load_data_segments()
1871 pkt24->u.status0.transfer_length = cpu_to_le32(prm->cmd->bufflen); in qlt_load_data_segments()
1877 if (prm->seg_cnt) in qlt_load_data_segments()
1878 pkt24->dseg_count = cpu_to_le16(prm->seg_cnt); in qlt_load_data_segments()
1880 if (prm->seg_cnt == 0) { in qlt_load_data_segments()
1891 (cnt < prm->tgt->datasegs_per_cmd) && prm->seg_cnt; in qlt_load_data_segments()
1892 cnt++, prm->seg_cnt--) { in qlt_load_data_segments()
1894 cpu_to_le32(pci_dma_lo32(sg_dma_address(prm->sg))); in qlt_load_data_segments()
1898 sg_dma_address(prm->sg))); in qlt_load_data_segments()
1900 *dword_ptr++ = cpu_to_le32(sg_dma_len(prm->sg)); in qlt_load_data_segments()
1902 prm->sg = sg_next(prm->sg); in qlt_load_data_segments()
1905 qlt_load_cont_data_segments(prm, vha); in qlt_load_data_segments()
1917 struct qla_tgt_prm *prm, int xmit_type, uint8_t scsi_status, in qlt_pre_xmit_response() argument
1925 prm->cmd = cmd; in qlt_pre_xmit_response()
1926 prm->tgt = tgt; in qlt_pre_xmit_response()
1927 prm->rq_result = scsi_status; in qlt_pre_xmit_response()
1928 prm->sense_buffer = &cmd->sense_buffer[0]; in qlt_pre_xmit_response()
1929 prm->sense_buffer_len = TRANSPORT_SENSE_BUFFER; in qlt_pre_xmit_response()
1930 prm->sg = NULL; in qlt_pre_xmit_response()
1931 prm->seg_cnt = -1; in qlt_pre_xmit_response()
1932 prm->req_cnt = 1; in qlt_pre_xmit_response()
1933 prm->add_status_pkt = 0; in qlt_pre_xmit_response()
1940 if (qlt_pci_map_calc_cnt(prm) != 0) in qlt_pre_xmit_response()
1944 *full_req_cnt = prm->req_cnt; in qlt_pre_xmit_response()
1947 prm->residual = se_cmd->residual_count; in qlt_pre_xmit_response()
1950 prm->residual, se_cmd->tag, in qlt_pre_xmit_response()
1952 cmd->bufflen, prm->rq_result); in qlt_pre_xmit_response()
1953 prm->rq_result |= SS_RESIDUAL_UNDER; in qlt_pre_xmit_response()
1955 prm->residual = se_cmd->residual_count; in qlt_pre_xmit_response()
1958 prm->residual, se_cmd->tag, se_cmd->t_task_cdb ? in qlt_pre_xmit_response()
1959 se_cmd->t_task_cdb[0] : 0, cmd->bufflen, prm->rq_result); in qlt_pre_xmit_response()
1960 prm->rq_result |= SS_RESIDUAL_OVER; in qlt_pre_xmit_response()
1969 if (QLA_TGT_SENSE_VALID(prm->sense_buffer) || in qlt_pre_xmit_response()
1971 (prm->rq_result != 0))) { in qlt_pre_xmit_response()
1972 prm->add_status_pkt = 1; in qlt_pre_xmit_response()
2084 struct qla_tgt_prm *prm) in qlt_24xx_init_ctio_to_isp() argument
2086 prm->sense_buffer_len = min_t(uint32_t, prm->sense_buffer_len, in qlt_24xx_init_ctio_to_isp()
2089 if (qlt_need_explicit_conf(prm->tgt->ha, prm->cmd, 0)) { in qlt_24xx_init_ctio_to_isp()
2094 ctio->u.status0.residual = cpu_to_le32(prm->residual); in qlt_24xx_init_ctio_to_isp()
2095 ctio->u.status0.scsi_status = cpu_to_le16(prm->rq_result); in qlt_24xx_init_ctio_to_isp()
2096 if (QLA_TGT_SENSE_VALID(prm->sense_buffer)) { in qlt_24xx_init_ctio_to_isp()
2099 if (qlt_need_explicit_conf(prm->tgt->ha, prm->cmd, 1)) { in qlt_24xx_init_ctio_to_isp()
2100 if (prm->cmd->se_cmd.scsi_status != 0) { in qlt_24xx_init_ctio_to_isp()
2101 ql_dbg(ql_dbg_tgt, prm->cmd->vha, 0xe017, in qlt_24xx_init_ctio_to_isp()
2119 cpu_to_le16(prm->sense_buffer_len); in qlt_24xx_init_ctio_to_isp()
2120 for (i = 0; i < prm->sense_buffer_len/4; i++) in qlt_24xx_init_ctio_to_isp()
2122 cpu_to_be32(((uint32_t *)prm->sense_buffer)[i]); in qlt_24xx_init_ctio_to_isp()
2124 if (unlikely((prm->sense_buffer_len % 4) != 0)) { in qlt_24xx_init_ctio_to_isp()
2129 "lost", prm->tgt->ha->vp_idx, in qlt_24xx_init_ctio_to_isp()
2130 prm->sense_buffer_len % 4); in qlt_24xx_init_ctio_to_isp()
2258 qlt_build_ctio_crc2_pkt(struct qla_tgt_prm *prm, scsi_qla_host_t *vha) in qlt_build_ctio_crc2_pkt() argument
2271 struct qla_tgt_cmd *cmd = prm->cmd; in qlt_build_ctio_crc2_pkt()
2274 struct atio_from_isp *atio = &prm->cmd->atio; in qlt_build_ctio_crc2_pkt()
2280 prm->pkt = pkt; in qlt_build_ctio_crc2_pkt()
2286 prm->prot_sg, prm->prot_seg_cnt, se_cmd->t_task_lba); in qlt_build_ctio_crc2_pkt()
2361 ha->tgt.cmds[h-1] = prm->cmd; in qlt_build_ctio_crc2_pkt()
2365 pkt->nport_handle = prm->cmd->loop_id; in qlt_build_ctio_crc2_pkt()
2378 pkt->relative_offset = cpu_to_le32(prm->cmd->offset); in qlt_build_ctio_crc2_pkt()
2387 pkt->dseg_count = prm->tot_dsds; in qlt_build_ctio_crc2_pkt()
2428 cpu_to_le16(prm->tot_dsds - prm->prot_seg_cnt); in qlt_build_ctio_crc2_pkt()
2442 if (!bundling && prm->prot_seg_cnt) { in qlt_build_ctio_crc2_pkt()
2444 prm->tot_dsds, cmd)) in qlt_build_ctio_crc2_pkt()
2447 (prm->tot_dsds - prm->prot_seg_cnt), cmd)) in qlt_build_ctio_crc2_pkt()
2450 if (bundling && prm->prot_seg_cnt) { in qlt_build_ctio_crc2_pkt()
2456 prm->prot_seg_cnt, cmd)) in qlt_build_ctio_crc2_pkt()
2478 struct qla_tgt_prm prm; in qlt_xmit_response() local
2496 memset(&prm, 0, sizeof(prm)); in qlt_xmit_response()
2505 res = qlt_pre_xmit_response(cmd, &prm, xmit_type, scsi_status, in qlt_xmit_response()
2534 res = qlt_build_ctio_crc2_pkt(&prm, vha); in qlt_xmit_response()
2536 res = qlt_24xx_build_ctio_pkt(&prm, vha); in qlt_xmit_response()
2542 pkt = (struct ctio7_to_24xx *)prm.pkt; in qlt_xmit_response()
2550 qlt_load_data_segments(&prm, vha); in qlt_xmit_response()
2552 if (prm.add_status_pkt == 0) { in qlt_xmit_response()
2555 cpu_to_le16(prm.rq_result); in qlt_xmit_response()
2557 cpu_to_le32(prm.residual); in qlt_xmit_response()
2603 &prm); in qlt_xmit_response()
2607 qlt_24xx_init_ctio_to_isp(pkt, &prm); in qlt_xmit_response()
2634 struct qla_tgt_prm prm; in qlt_rdy_to_xfer() local
2638 memset(&prm, 0, sizeof(prm)); in qlt_rdy_to_xfer()
2639 prm.cmd = cmd; in qlt_rdy_to_xfer()
2640 prm.tgt = tgt; in qlt_rdy_to_xfer()
2641 prm.sg = NULL; in qlt_rdy_to_xfer()
2642 prm.req_cnt = 1; in qlt_rdy_to_xfer()
2649 if (qlt_pci_map_calc_cnt(&prm) != 0) in qlt_rdy_to_xfer()
2671 res = qlt_check_reserve_free_req(vha, prm.req_cnt); in qlt_rdy_to_xfer()
2675 res = qlt_build_ctio_crc2_pkt(&prm, vha); in qlt_rdy_to_xfer()
2677 res = qlt_24xx_build_ctio_pkt(&prm, vha); in qlt_rdy_to_xfer()
2680 vha->req->cnt += prm.req_cnt; in qlt_rdy_to_xfer()
2684 pkt = (struct ctio7_to_24xx *)prm.pkt; in qlt_rdy_to_xfer()
2689 qlt_load_data_segments(&prm, vha); in qlt_rdy_to_xfer()
5583 struct qla_tgt_sess_work_param *prm) in qlt_abort_work() argument
5598 s_id[0] = prm->abts.fcp_hdr_le.s_id[2]; in qlt_abort_work()
5599 s_id[1] = prm->abts.fcp_hdr_le.s_id[1]; in qlt_abort_work()
5600 s_id[2] = prm->abts.fcp_hdr_le.s_id[0]; in qlt_abort_work()
5627 rc = __qlt_24xx_handle_abts(vha, &prm->abts, sess); in qlt_abort_work()
5636 qlt_24xx_send_abts_resp(vha, &prm->abts, FCP_TMF_REJECTED, false); in qlt_abort_work()
5643 struct qla_tgt_sess_work_param *prm) in qlt_tmr_work() argument
5645 struct atio_from_isp *a = &prm->tm_iocb2; in qlt_tmr_work()
5661 s_id = prm->tm_iocb2.u.isp24.fcp_hdr.s_id; in qlt_tmr_work()
5697 qlt_send_term_exchange(vha, NULL, &prm->tm_iocb2, 1); in qlt_tmr_work()
5713 struct qla_tgt_sess_work_param *prm = list_entry( in qlt_sess_work_fn() local
5714 tgt->sess_works_list.next, typeof(*prm), in qlt_sess_work_fn()
5721 list_del(&prm->sess_works_list_entry); in qlt_sess_work_fn()
5725 switch (prm->type) { in qlt_sess_work_fn()
5727 qlt_abort_work(tgt, prm); in qlt_sess_work_fn()
5730 qlt_tmr_work(tgt, prm); in qlt_sess_work_fn()
5739 kfree(prm); in qlt_sess_work_fn()