Lines Matching defs:vha

25  * @vha: HA context
28 * Returns a pointer to the @vha's ms_iocb.
31 qla2x00_prep_ms_iocb(scsi_qla_host_t *vha, struct ct_arg *arg)
33 struct qla_hw_data *ha = vha->hw;
55 vha->qla_stats.control_requests++;
62 * @vha: HA context
68 qla24xx_prep_ms_iocb(scsi_qla_host_t *vha, struct ct_arg *arg)
70 struct qla_hw_data *ha = vha->hw;
90 ct_pkt->vp_index = vha->vp_idx;
92 vha->qla_stats.control_requests++;
120 qla2x00_chk_ms_status(scsi_qla_host_t *vha, ms_iocb_entry_t *ms_pkt,
125 struct qla_hw_data *ha = vha->hw;
130 ql_dbg(ql_dbg_disc, vha, 0x2031,
132 routine, ms_pkt->entry_status, vha->d_id.b.domain,
133 vha->d_id.b.area, vha->d_id.b.al_pa);
146 ql_dbg(ql_dbg_disc + ql_dbg_buffer, vha, 0x2077,
148 routine, vha->d_id.b.domain,
149 vha->d_id.b.area, vha->d_id.b.al_pa,
151 ql_dump_buffer(ql_dbg_disc + ql_dbg_buffer, vha,
169 ql_dbg(ql_dbg_async, vha, 0x502b,
173 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
174 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
181 ql_dbg(ql_dbg_disc, vha, 0x2033,
184 vha->d_id.b.domain, vha->d_id.b.area,
185 vha->d_id.b.al_pa);
194 * @vha: HA context
200 qla2x00_ga_nxt(scsi_qla_host_t *vha, fc_port_t *fcport)
207 struct qla_hw_data *ha = vha->hw;
211 return qla2x00_sns_ga_nxt(vha, fcport);
222 ms_pkt = ha->isp_ops->prep_ms_iocb(vha, &arg);
233 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma,
237 ql_dbg(ql_dbg_disc, vha, 0x2062,
239 } else if (qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp, "GA_NXT") !=
258 ql_dbg(ql_dbg_disc, vha, 0x2063,
270 qla2x00_gid_pt_rsp_size(scsi_qla_host_t *vha)
272 return vha->hw->max_fibre_devices * 4 + 16;
277 * @vha: HA context
285 qla2x00_gid_pt(scsi_qla_host_t *vha, sw_info_t *list)
295 struct qla_hw_data *ha = vha->hw;
300 return qla2x00_sns_gid_pt(vha, list);
303 gid_pt_rsp_size = qla2x00_gid_pt_rsp_size(vha);
314 ms_pkt = ha->isp_ops->prep_ms_iocb(vha, &arg);
324 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma,
328 ql_dbg(ql_dbg_disc, vha, 0x2055,
330 } else if (qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp, "GID_PT") !=
363 * @vha: HA context
369 qla2x00_gpn_id(scsi_qla_host_t *vha, sw_info_t *list)
377 struct qla_hw_data *ha = vha->hw;
381 return qla2x00_sns_gpn_id(vha, list);
393 ms_pkt = ha->isp_ops->prep_ms_iocb(vha, &arg);
404 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma,
408 ql_dbg(ql_dbg_disc, vha, 0x2056,
411 } else if (qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp,
431 * @vha: HA context
437 qla2x00_gnn_id(scsi_qla_host_t *vha, sw_info_t *list)
441 struct qla_hw_data *ha = vha->hw;
448 return qla2x00_sns_gnn_id(vha, list);
460 ms_pkt = ha->isp_ops->prep_ms_iocb(vha, &arg);
471 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma,
475 ql_dbg(ql_dbg_disc, vha, 0x2057,
478 } else if (qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp,
487 ql_dbg(ql_dbg_disc, vha, 0x2058,
505 struct scsi_qla_host *vha = sp->vha;
511 ql_dbg(ql_dbg_disc, vha, 0x204f,
515 ql_dbg(ql_dbg_disc, vha, 0x204f,
524 ql_dbg(ql_dbg_disc, vha, 0x204f,
528 e = qla2x00_alloc_work(vha, QLA_EVT_SP_RETRY);
533 qla2x00_post_work(vha, e);
538 e = qla2x00_alloc_work(vha, QLA_EVT_UNMAP);
543 dma_free_coherent(&vha->hw->pdev->dev,
551 dma_free_coherent(&vha->hw->pdev->dev,
564 qla2x00_post_work(vha, e);
569 * @vha: HA context
574 qla2x00_rft_id(scsi_qla_host_t *vha)
576 struct qla_hw_data *ha = vha->hw;
579 return qla2x00_sns_rft_id(vha);
581 return qla_async_rftid(vha, &vha->d_id);
584 static int qla_async_rftid(scsi_qla_host_t *vha, port_id_t *d_id)
591 if (!vha->flags.online)
595 sp = qla2x00_get_sp(vha, NULL, GFP_KERNEL);
601 qla2x00_init_async_sp(sp, qla2x00_get_async_timeout(vha) + 2,
604 sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev,
609 ql_log(ql_log_warn, vha, 0xd041,
615 sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev,
620 ql_log(ql_log_warn, vha, 0xd042,
633 ct_req->req.rft_id.port_id = port_id_to_be_id(vha->d_id);
636 if (vha->flags.nvme_enabled && qla_ini_mode_enabled(vha))
643 ql_dbg(ql_dbg_disc, vha, 0xffff,
649 ql_dbg(ql_dbg_disc, vha, 0x2043,
663 * @vha: HA context
669 qla2x00_rff_id(scsi_qla_host_t *vha, u8 type)
671 struct qla_hw_data *ha = vha->hw;
674 ql_dbg(ql_dbg_disc, vha, 0x2046,
679 return qla_async_rffid(vha, &vha->d_id, qlt_rff_id(vha), type);
682 static int qla_async_rffid(scsi_qla_host_t *vha, port_id_t *d_id,
691 sp = qla2x00_get_sp(vha, NULL, GFP_KERNEL);
697 qla2x00_init_async_sp(sp, qla2x00_get_async_timeout(vha) + 2,
700 sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev,
705 ql_log(ql_log_warn, vha, 0xd041,
711 sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev,
716 ql_log(ql_log_warn, vha, 0xd042,
737 ql_dbg(ql_dbg_disc, vha, 0xffff,
743 ql_dbg(ql_dbg_disc, vha, 0x2047,
759 * @vha: HA context
764 qla2x00_rnn_id(scsi_qla_host_t *vha)
766 struct qla_hw_data *ha = vha->hw;
769 return qla2x00_sns_rnn_id(vha);
771 return qla_async_rnnid(vha, &vha->d_id, vha->node_name);
774 static int qla_async_rnnid(scsi_qla_host_t *vha, port_id_t *d_id,
783 sp = qla2x00_get_sp(vha, NULL, GFP_KERNEL);
789 qla2x00_init_async_sp(sp, qla2x00_get_async_timeout(vha) + 2,
792 sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev,
797 ql_log(ql_log_warn, vha, 0xd041,
803 sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev,
808 ql_log(ql_log_warn, vha, 0xd042,
821 ct_req->req.rnn_id.port_id = port_id_to_be_id(vha->d_id);
822 memcpy(ct_req->req.rnn_id.node_name, vha->node_name, WWN_SIZE);
828 ql_dbg(ql_dbg_disc, vha, 0xffff,
834 ql_dbg(ql_dbg_disc, vha, 0x204d,
849 qla2x00_get_sym_node_name(scsi_qla_host_t *vha, uint8_t *snn, size_t size)
851 struct qla_hw_data *ha = vha->hw;
864 * @vha: HA context
869 qla2x00_rsnn_nn(scsi_qla_host_t *vha)
871 struct qla_hw_data *ha = vha->hw;
874 ql_dbg(ql_dbg_disc, vha, 0x2050,
879 return qla_async_rsnn_nn(vha);
882 static int qla_async_rsnn_nn(scsi_qla_host_t *vha)
890 sp = qla2x00_get_sp(vha, NULL, GFP_KERNEL);
896 qla2x00_init_async_sp(sp, qla2x00_get_async_timeout(vha) + 2,
899 sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev,
904 ql_log(ql_log_warn, vha, 0xd041,
910 sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev,
915 ql_log(ql_log_warn, vha, 0xd042,
928 memcpy(ct_req->req.rsnn_nn.node_name, vha->node_name, WWN_SIZE);
931 qla2x00_get_sym_node_name(vha, ct_req->req.rsnn_nn.sym_node_name,
941 ql_dbg(ql_dbg_disc, vha, 0xffff,
947 ql_dbg(ql_dbg_disc, vha, 0x2043,
963 * @vha: HA context
971 qla2x00_prep_sns_cmd(scsi_qla_host_t *vha, uint16_t cmd, uint16_t scmd_len,
976 struct qla_hw_data *ha = vha->hw;
988 vha->qla_stats.control_requests++;
995 * @vha: HA context
1003 qla2x00_sns_ga_nxt(scsi_qla_host_t *vha, fc_port_t *fcport)
1006 struct qla_hw_data *ha = vha->hw;
1011 sns_cmd = qla2x00_prep_sns_cmd(vha, GA_NXT_CMD, GA_NXT_SNS_SCMD_LEN,
1020 rval = qla2x00_send_sns(vha, ha->sns_cmd_dma, GA_NXT_SNS_CMD_SIZE / 2,
1024 ql_dbg(ql_dbg_disc, vha, 0x205f,
1028 ql_dbg(ql_dbg_disc + ql_dbg_buffer, vha, 0x2084,
1030 ql_dump_buffer(ql_dbg_disc + ql_dbg_buffer, vha, 0x2074,
1046 ql_dbg(ql_dbg_disc, vha, 0x2061,
1059 * @vha: HA context
1069 qla2x00_sns_gid_pt(scsi_qla_host_t *vha, sw_info_t *list)
1072 struct qla_hw_data *ha = vha->hw;
1078 gid_pt_sns_data_size = qla2x00_gid_pt_rsp_size(vha);
1082 sns_cmd = qla2x00_prep_sns_cmd(vha, GID_PT_CMD, GID_PT_SNS_SCMD_LEN,
1089 rval = qla2x00_send_sns(vha, ha->sns_cmd_dma, GID_PT_SNS_CMD_SIZE / 2,
1093 ql_dbg(ql_dbg_disc, vha, 0x206d,
1097 ql_dbg(ql_dbg_disc, vha, 0x202f,
1099 ql_dump_buffer(ql_dbg_disc + ql_dbg_buffer, vha, 0x2081,
1132 * @vha: HA context
1140 qla2x00_sns_gpn_id(scsi_qla_host_t *vha, sw_info_t *list)
1143 struct qla_hw_data *ha = vha->hw;
1150 sns_cmd = qla2x00_prep_sns_cmd(vha, GPN_ID_CMD,
1159 rval = qla2x00_send_sns(vha, ha->sns_cmd_dma,
1163 ql_dbg(ql_dbg_disc, vha, 0x2032,
1167 ql_dbg(ql_dbg_disc + ql_dbg_buffer, vha, 0x207e,
1169 ql_dump_buffer(ql_dbg_disc + ql_dbg_buffer, vha, 0x207f,
1188 * @vha: HA context
1196 qla2x00_sns_gnn_id(scsi_qla_host_t *vha, sw_info_t *list)
1199 struct qla_hw_data *ha = vha->hw;
1206 sns_cmd = qla2x00_prep_sns_cmd(vha, GNN_ID_CMD,
1215 rval = qla2x00_send_sns(vha, ha->sns_cmd_dma,
1219 ql_dbg(ql_dbg_disc, vha, 0x203f,
1223 ql_dbg(ql_dbg_disc + ql_dbg_buffer, vha, 0x2082,
1225 ql_dump_buffer(ql_dbg_disc + ql_dbg_buffer, vha, 0x207a,
1233 ql_dbg(ql_dbg_disc, vha, 0x206e,
1251 * @vha: HA context
1258 qla2x00_sns_rft_id(scsi_qla_host_t *vha)
1261 struct qla_hw_data *ha = vha->hw;
1266 sns_cmd = qla2x00_prep_sns_cmd(vha, RFT_ID_CMD, RFT_ID_SNS_SCMD_LEN,
1270 sns_cmd->p.cmd.param[0] = vha->d_id.b.al_pa;
1271 sns_cmd->p.cmd.param[1] = vha->d_id.b.area;
1272 sns_cmd->p.cmd.param[2] = vha->d_id.b.domain;
1277 rval = qla2x00_send_sns(vha, ha->sns_cmd_dma, RFT_ID_SNS_CMD_SIZE / 2,
1281 ql_dbg(ql_dbg_disc, vha, 0x2060,
1285 ql_dbg(ql_dbg_disc + ql_dbg_buffer, vha, 0x2083,
1287 ql_dump_buffer(ql_dbg_disc + ql_dbg_buffer, vha, 0x2080,
1291 ql_dbg(ql_dbg_disc, vha, 0x2073,
1300 * @vha: HA context
1307 qla2x00_sns_rnn_id(scsi_qla_host_t *vha)
1310 struct qla_hw_data *ha = vha->hw;
1315 sns_cmd = qla2x00_prep_sns_cmd(vha, RNN_ID_CMD, RNN_ID_SNS_SCMD_LEN,
1319 sns_cmd->p.cmd.param[0] = vha->d_id.b.al_pa;
1320 sns_cmd->p.cmd.param[1] = vha->d_id.b.area;
1321 sns_cmd->p.cmd.param[2] = vha->d_id.b.domain;
1323 sns_cmd->p.cmd.param[4] = vha->node_name[7];
1324 sns_cmd->p.cmd.param[5] = vha->node_name[6];
1325 sns_cmd->p.cmd.param[6] = vha->node_name[5];
1326 sns_cmd->p.cmd.param[7] = vha->node_name[4];
1327 sns_cmd->p.cmd.param[8] = vha->node_name[3];
1328 sns_cmd->p.cmd.param[9] = vha->node_name[2];
1329 sns_cmd->p.cmd.param[10] = vha->node_name[1];
1330 sns_cmd->p.cmd.param[11] = vha->node_name[0];
1333 rval = qla2x00_send_sns(vha, ha->sns_cmd_dma, RNN_ID_SNS_CMD_SIZE / 2,
1337 ql_dbg(ql_dbg_disc, vha, 0x204a,
1341 ql_dbg(ql_dbg_disc + ql_dbg_buffer, vha, 0x207b,
1343 ql_dump_buffer(ql_dbg_disc + ql_dbg_buffer, vha, 0x207c,
1347 ql_dbg(ql_dbg_disc, vha, 0x204c,
1356 * @vha: HA context
1361 qla2x00_mgmt_svr_login(scsi_qla_host_t *vha)
1365 struct qla_hw_data *ha = vha->hw;
1368 if (vha->flags.management_server_logged_in)
1371 rval = ha->isp_ops->fabric_login(vha, vha->mgmt_svr_loop_id, 0xff, 0xff,
1375 ql_dbg(ql_dbg_disc, vha, 0x2085,
1377 "rval=%d\n", vha->mgmt_svr_loop_id, rval);
1379 ql_dbg(ql_dbg_disc, vha, 0x2024,
1382 vha->mgmt_svr_loop_id, mb[0], mb[1], mb[2], mb[6],
1386 vha->flags.management_server_logged_in = 1;
1393 * @vha: HA context
1400 qla2x00_prep_ms_fdmi_iocb(scsi_qla_host_t *vha, uint32_t req_size,
1404 struct qla_hw_data *ha = vha->hw;
1411 SET_TARGET_ID(ha, ms_pkt->loop_id, vha->mgmt_svr_loop_id);
1430 * @vha: HA context
1437 qla24xx_prep_ms_fdmi_iocb(scsi_qla_host_t *vha, uint32_t req_size,
1441 struct qla_hw_data *ha = vha->hw;
1448 ct_pkt->nport_handle = cpu_to_le16(vha->mgmt_svr_loop_id);
1460 ct_pkt->vp_index = vha->vp_idx;
1466 qla2x00_update_ms_fdmi_iocb(scsi_qla_host_t *vha, uint32_t req_size)
1468 struct qla_hw_data *ha = vha->hw;
1587 * @vha: HA context
1595 qla2x00_hba_attributes(scsi_qla_host_t *vha, void *entries,
1598 struct qla_hw_data *ha = vha->hw;
1607 memcpy(eiter->a.node_name, vha->node_name, sizeof(eiter->a.node_name));
1612 ql_dbg(ql_dbg_disc, vha, 0x20a0,
1624 ql_dbg(ql_dbg_disc, vha, 0x20a1,
1631 alen = qla2xxx_get_vpd_field(vha, "SN",
1645 ql_dbg(ql_dbg_disc, vha, 0x20a2,
1657 ql_dbg(ql_dbg_disc, vha, 0x20a3,
1669 ql_dbg(ql_dbg_disc, vha, 0x20a4,
1677 alen = qla2xxx_get_vpd_field(vha, "MN",
1681 alen = qla2xxx_get_vpd_field(vha, "EC",
1694 ql_dbg(ql_dbg_disc, vha, 0x20a5,
1706 ql_dbg(ql_dbg_disc, vha, 0x20a6,
1719 ql_dbg(ql_dbg_disc, vha, 0x20a7,
1725 ha->isp_ops->fw_version_str(vha, eiter->a.fw_version,
1731 ql_dbg(ql_dbg_disc, vha, 0x20a8,
1747 "Linux", fc_host_system_hostname(vha->host));
1753 ql_dbg(ql_dbg_disc, vha, 0x20a9,
1766 ql_dbg(ql_dbg_disc, vha, 0x20aa,
1771 alen = qla2x00_get_sym_node_name(vha, eiter->a.sym_name,
1777 ql_dbg(ql_dbg_disc, vha, 0x20ab,
1787 ql_dbg(ql_dbg_disc, vha, 0x20ac,
1798 ql_dbg(ql_dbg_disc, vha, 0x20ad,
1803 memcpy(eiter->a.fabric_name, vha->fabric_node_name,
1809 ql_dbg(ql_dbg_disc, vha, 0x20ae,
1821 ql_dbg(ql_dbg_disc, vha, 0x20af,
1833 ql_dbg(ql_dbg_disc, vha, 0x20b0,
1841 * @vha: HA context
1849 qla2x00_port_attributes(scsi_qla_host_t *vha, void *entries,
1852 struct qla_hw_data *ha = vha->hw;
1855 p_sysid->nodename : fc_host_system_hostname(vha->host);
1871 ql_dbg(ql_dbg_disc, vha, 0x20c0,
1873 if (vha->flags.nvme_enabled) {
1875 ql_dbg(ql_dbg_disc, vha, 0x211f,
1888 ql_dbg(ql_dbg_disc, vha, 0x20c1,
1899 ql_dbg(ql_dbg_disc, vha, 0x20c2,
1909 ql_dbg(ql_dbg_disc, vha, 0x20c3,
1916 "%s:host%lu", QLA2XXX_DRIVER_NAME, vha->host_no);
1921 ql_dbg(ql_dbg_disc, vha, 0x20c4,
1935 ql_dbg(ql_dbg_disc, vha, 0x20c5,
1944 memcpy(eiter->a.node_name, vha->node_name, sizeof(eiter->a.node_name));
1949 ql_dbg(ql_dbg_disc, vha, 0x20c6,
1955 memcpy(eiter->a.port_name, vha->port_name, sizeof(eiter->a.port_name));
1960 ql_dbg(ql_dbg_disc, vha, 0x20c7,
1966 alen = qla2x00_get_sym_node_name(vha, eiter->a.port_sym_name,
1972 ql_dbg(ql_dbg_disc, vha, 0x20c8,
1983 ql_dbg(ql_dbg_disc, vha, 0x20c9,
1994 ql_dbg(ql_dbg_disc, vha, 0x20ca,
2000 memcpy(eiter->a.fabric_name, vha->fabric_node_name,
2006 ql_dbg(ql_dbg_disc, vha, 0x20cb,
2020 ql_dbg(ql_dbg_disc, vha, 0x20cc,
2032 ql_dbg(ql_dbg_disc, vha, 0x20cd,
2043 ql_dbg(ql_dbg_disc, vha, 0x20ce,
2049 eiter->a.port_id = cpu_to_be32(vha->d_id.b24);
2054 ql_dbg(ql_dbg_disc, vha, 0x20cf,
2070 ql_dbg(ql_dbg_disc, vha, 0x20d0,
2076 memcpy(eiter->a.smartsan_guid, vha->node_name, WWN_SIZE);
2077 memcpy(eiter->a.smartsan_guid + WWN_SIZE, vha->port_name, WWN_SIZE);
2082 ql_dbg(ql_dbg_disc, vha, 0x20d1,
2097 ql_dbg(ql_dbg_disc, vha, 0x20d2,
2110 ql_dbg(ql_dbg_disc, vha, 0x20d3,
2116 eiter->a.smartsan_port_info = cpu_to_be32(vha->vp_idx ? 2 : 1);
2121 ql_dbg(ql_dbg_disc, vha, 0x20d4,
2132 ql_dbg(ql_dbg_disc, vha, 0x20d6,
2142 * @vha: HA context
2148 qla2x00_fdmi_rhba(scsi_qla_host_t *vha, unsigned int callopt)
2150 struct qla_hw_data *ha = vha->hw;
2163 ql_dbg(ql_dbg_disc, vha, 0x20e0,
2167 ms_pkt = ha->isp_ops->prep_ms_fdmi_iocb(vha, 0, size);
2174 memcpy(ct_req->req.rhba.hba_identifier, vha->port_name,
2181 memcpy(ct_req->req.rhba.port_name, vha->port_name,
2192 size += qla2x00_hba_attributes(vha, entries, callopt);
2195 qla2x00_update_ms_fdmi_iocb(vha, size + 16);
2197 ql_dbg(ql_dbg_disc, vha, 0x20e1,
2202 ql_dump_buffer(ql_dbg_disc + ql_dbg_buffer, vha, 0x20e2,
2206 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma,
2209 ql_dbg(ql_dbg_disc, vha, 0x20e3,
2214 rval = qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp, "RHBA");
2219 ql_dbg(ql_dbg_disc, vha, 0x20e4,
2224 ql_dbg(ql_dbg_disc, vha, 0x20e5,
2231 ql_dbg(ql_dbg_disc, vha, 0x20e6, "RHBA exiting normally.\n");
2237 qla2x00_fdmi_dhba(scsi_qla_host_t *vha)
2240 struct qla_hw_data *ha = vha->hw;
2246 ms_pkt = ha->isp_ops->prep_ms_fdmi_iocb(vha, DHBA_REQ_SIZE,
2252 memcpy(ct_req->req.dhba.port_name, vha->port_name, WWN_SIZE);
2253 ql_dbg(ql_dbg_disc, vha, 0x2036,
2256 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma,
2260 ql_dbg(ql_dbg_disc, vha, 0x2037,
2262 } else if (qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp, "DHBA") !=
2266 ql_dbg(ql_dbg_disc, vha, 0x2038,
2274 * @vha: HA context
2281 qla2x00_fdmi_rprt(scsi_qla_host_t *vha, int callopt)
2283 struct scsi_qla_host *base_vha = pci_get_drvdata(vha->hw->pdev);
2284 struct qla_hw_data *ha = vha->hw;
2297 ql_dbg(ql_dbg_disc, vha, 0x20e8,
2300 ms_pkt = ha->isp_ops->prep_ms_fdmi_iocb(vha, 0, size);
2308 memcpy(ct_req->req.rprt.port_name, vha->port_name,
2316 size += qla2x00_port_attributes(vha, entries, callopt);
2318 qla2x00_update_ms_fdmi_iocb(vha, size + 16);
2319 ql_dbg(ql_dbg_disc, vha, 0x20e9,
2323 ql_dump_buffer(ql_dbg_disc + ql_dbg_buffer, vha, 0x20ea,
2326 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma,
2329 ql_dbg(ql_dbg_disc, vha, 0x20eb,
2333 rval = qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp, "RPRT");
2338 ql_dbg(ql_dbg_disc, vha, 0x20ec,
2343 ql_dbg(ql_dbg_disc, vha, 0x20ed,
2349 ql_dbg(ql_dbg_disc, vha, 0x20ee, "RPRT exiting normally.\n");
2355 * @vha: HA context
2361 qla2x00_fdmi_rpa(scsi_qla_host_t *vha, uint callopt)
2363 struct qla_hw_data *ha = vha->hw;
2381 ql_dbg(ql_dbg_disc, vha, 0x20f0,
2385 ms_pkt = ha->isp_ops->prep_ms_fdmi_iocb(vha, 0, size);
2392 memcpy(ct_req->req.rpa.port_name, vha->port_name,
2403 size += qla2x00_port_attributes(vha, entries, callopt);
2406 qla2x00_update_ms_fdmi_iocb(vha, size + 16);
2408 ql_dbg(ql_dbg_disc, vha, 0x20f1,
2411 ql_dump_buffer(ql_dbg_disc + ql_dbg_buffer, vha, 0x20f2,
2415 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma,
2418 ql_dbg(ql_dbg_disc, vha, 0x20f3,
2423 rval = qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp, "RPA");
2428 ql_dbg(ql_dbg_disc, vha, 0x20f4,
2433 ql_dbg(ql_dbg_disc, vha, 0x20f5,
2440 ql_dbg(ql_dbg_disc, vha, 0x20f6, "RPA exiting normally.\n");
2446 * @vha: HA context
2451 qla2x00_fdmi_register(scsi_qla_host_t *vha)
2454 struct qla_hw_data *ha = vha->hw;
2460 rval = qla2x00_mgmt_svr_login(vha);
2465 if (vha->vp_idx) {
2467 rval = qla2x00_fdmi_rprt(vha, CALLOPT_FDMI2_SMARTSAN);
2469 rval = qla2x00_fdmi_rprt(vha, CALLOPT_FDMI2);
2471 rval = qla2x00_fdmi_rprt(vha, CALLOPT_FDMI1);
2477 rval = qla2x00_fdmi_rhba(vha, CALLOPT_FDMI2);
2482 rval = qla2x00_fdmi_dhba(vha);
2486 rval = qla2x00_fdmi_rhba(vha, CALLOPT_FDMI2);
2492 rval = qla2x00_fdmi_rpa(vha, CALLOPT_FDMI2_SMARTSAN);
2494 rval = qla2x00_fdmi_rpa(vha, CALLOPT_FDMI2);
2501 rval = qla2x00_fdmi_rhba(vha, CALLOPT_FDMI1);
2506 rval = qla2x00_fdmi_dhba(vha);
2510 rval = qla2x00_fdmi_rhba(vha, CALLOPT_FDMI1);
2515 rval = qla2x00_fdmi_rpa(vha, CALLOPT_FDMI1);
2522 * @vha: HA context
2528 qla2x00_gfpn_id(scsi_qla_host_t *vha, sw_info_t *list)
2532 struct qla_hw_data *ha = vha->hw;
2551 ms_pkt = ha->isp_ops->prep_ms_iocb(vha, &arg);
2562 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma,
2566 ql_dbg(ql_dbg_disc, vha, 0x2023,
2569 } else if (qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp,
2630 * @vha: HA context
2636 qla2x00_gpsc(scsi_qla_host_t *vha, sw_info_t *list)
2640 struct qla_hw_data *ha = vha->hw;
2651 rval = qla2x00_mgmt_svr_login(vha);
2660 arg.nport_handle = vha->mgmt_svr_loop_id;
2665 ms_pkt = qla24xx_prep_ms_iocb(vha, &arg);
2677 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma,
2681 ql_dbg(ql_dbg_disc, vha, 0x2059,
2683 } else if ((rval = qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp,
2691 ql_dbg(ql_dbg_disc, vha, 0x205a,
2702 ql_dbg(ql_dbg_disc, vha, 0x205b,
2721 * @vha: HA context
2726 qla2x00_gff_id(scsi_qla_host_t *vha, sw_info_t *list)
2734 struct qla_hw_data *ha = vha->hw;
2755 ms_pkt = ha->isp_ops->prep_ms_iocb(vha, &arg);
2766 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma,
2770 ql_dbg(ql_dbg_disc, vha, 0x205c,
2772 } else if (qla2x00_chk_ms_status(vha, ms_pkt, ct_rsp,
2774 ql_dbg(ql_dbg_disc, vha, 0x205d,
2802 int qla24xx_post_gpsc_work(struct scsi_qla_host *vha, fc_port_t *fcport)
2806 e = qla2x00_alloc_work(vha, QLA_EVT_GPSC);
2811 return qla2x00_post_work(vha, e);
2814 void qla24xx_handle_gpsc_event(scsi_qla_host_t *vha, struct event_arg *ea)
2818 ql_dbg(ql_dbg_disc, vha, 0x20d8,
2833 ql_dbg(ql_dbg_disc, vha, 0x20d3,
2841 qla_post_iidma_work(vha, fcport);
2846 struct scsi_qla_host *vha = sp->vha;
2847 struct qla_hw_data *ha = vha->hw;
2854 ql_dbg(ql_dbg_disc, vha, 0x2053,
2871 ql_dbg(ql_dbg_disc, vha, 0x2019,
2880 ql_dbg(ql_dbg_disc, vha, 0x2054,
2890 qla24xx_handle_gpsc_event(vha, &ea);
2897 int qla24xx_async_gpsc(scsi_qla_host_t *vha, fc_port_t *fcport)
2903 if (!vha->flags.online || (fcport->flags & FCF_ASYNC_SENT))
2907 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL);
2915 qla2x00_init_async_sp(sp, qla2x00_get_async_timeout(vha) + 2,
2932 sp->u.iocb_cmd.u.ctarg.nport_handle = vha->mgmt_svr_loop_id;
2934 ql_dbg(ql_dbg_disc, vha, 0x205e,
2952 void qla24xx_sp_unmap(scsi_qla_host_t *vha, srb_t *sp)
2958 qla2x00_els_dcmd2_free(vha, &c->u.els_plogi);
2963 dma_free_coherent(&vha->hw->pdev->dev,
2971 dma_free_coherent(&vha->hw->pdev->dev,
2986 struct scsi_qla_host *vha = sp->vha;
2992 ql_dbg(ql_dbg_disc, vha, 0x2133,
3024 dma_free_coherent(&vha->hw->pdev->dev,
3032 dma_free_coherent(&vha->hw->pdev->dev,
3047 int qla24xx_async_gffid(scsi_qla_host_t *vha, fc_port_t *fcport, bool wait)
3055 if (!vha->flags.online || !wait)
3059 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL);
3067 qla2x00_init_async_sp(sp, qla2x00_get_async_timeout(vha) + 2,
3076 sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev,
3081 ql_log(ql_log_warn, vha, 0xd041,
3088 sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev,
3093 ql_log(ql_log_warn, vha, 0xd041,
3116 ql_dbg(ql_dbg_disc, vha, 0x3074,
3126 dma_free_coherent(&vha->hw->pdev->dev,
3134 dma_free_coherent(&vha->hw->pdev->dev,
3147 static int qla2x00_is_a_vp(scsi_qla_host_t *vha, u64 wwn)
3149 struct qla_hw_data *ha = vha->hw;
3171 void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, srb_t *sp)
3181 ql_dbg(ql_dbg_disc + ql_dbg_verbose, vha, 0xffff,
3184 if (sp->gen1 != vha->hw->base_qpair->chip_reset) {
3185 ql_dbg(ql_dbg_disc, vha, 0xffff,
3187 sp->name, sp->gen1, vha->hw->base_qpair->chip_reset);
3193 vha->scan.scan_retry++;
3194 if (vha->scan.scan_retry < MAX_SCAN_RETRIES) {
3195 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
3196 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
3199 ql_dbg(ql_dbg_disc, vha, 0xffff,
3201 __func__, vha->scan.scan_retry);
3206 list_for_each_entry(fcport, &vha->vp_fcports, list) {
3218 vha->scan.scan_retry = 0;
3220 list_for_each_entry(fcport, &vha->vp_fcports, list)
3223 for (i = 0; i < vha->hw->max_fibre_devices; i++) {
3227 rp = &vha->scan.l[i];
3235 for (k = i + 1; k < vha->hw->max_fibre_devices; k++) {
3236 trp = &vha->scan.l[k];
3241 vha, 0xffff,
3248 if (!memcmp(rp->port_name, vha->port_name, WWN_SIZE))
3256 if (qla2x00_is_a_vp(vha, wwn))
3259 list_for_each_entry(fcport, &vha->vp_fcports, list) {
3268 if (NVME_PRIORITY(vha->hw, fcport))
3292 ql_dbg(ql_dbg_disc, vha, 0xffff,
3295 qla24xx_post_newsess_work(vha, &rp->id, rp->port_name,
3301 ql_log(ql_log_warn, vha, 0xffff,
3310 list_for_each_entry(fcport, &vha->vp_fcports, list) {
3329 if (((qla_dual_mode_enabled(vha) ||
3330 qla_ini_mode_enabled(vha)) &&
3337 ql_log(ql_log_warn, vha, 0x20f0,
3352 vha->hw->login_retry_count;
3353 ql_dbg(ql_dbg_disc, vha, 0x20a3,
3359 qla24xx_fcport_handle_login(vha, fcport);
3366 qla24xx_sp_unmap(vha, sp);
3367 spin_lock_irqsave(&vha->work_lock, flags);
3368 vha->scan.scan_flags &= ~SF_SCANNING;
3369 spin_unlock_irqrestore(&vha->work_lock, flags);
3372 list_for_each_entry(fcport, &vha->vp_fcports, list) {
3374 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
3375 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
3382 static int qla2x00_post_gnnft_gpnft_done_work(struct scsi_qla_host *vha,
3390 e = qla2x00_alloc_work(vha, cmd);
3396 return qla2x00_post_work(vha, e);
3399 static int qla2x00_post_nvme_gpnft_work(struct scsi_qla_host *vha,
3407 e = qla2x00_alloc_work(vha, cmd);
3414 return qla2x00_post_work(vha, e);
3417 static void qla2x00_find_free_fcp_nvme_slot(struct scsi_qla_host *vha,
3420 struct qla_hw_data *ha = vha->hw;
3450 rp = &vha->scan.l[j];
3457 rp = &vha->scan.l[k];
3471 rp = &vha->scan.l[k];
3486 rp = &vha->scan.l[k];
3501 rp = &vha->scan.l[k];
3515 struct scsi_qla_host *vha = sp->vha;
3524 ql_dbg(ql_dbg_disc, vha, 0xffff,
3539 ql_dbg(ql_dbg_disc, vha, 0xffff,
3542 qla2x00_mark_all_devices_lost(vha);
3550 rc = qla2x00_post_gnnft_gpnft_done_work(vha, sp,
3554 qla24xx_sp_unmap(vha, sp);
3556 spin_lock_irqsave(&vha->work_lock, flags);
3557 vha->scan.scan_flags &= ~SF_SCANNING;
3558 vha->scan.scan_retry++;
3559 spin_unlock_irqrestore(&vha->work_lock, flags);
3561 if (vha->scan.scan_retry < MAX_SCAN_RETRIES) {
3562 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
3563 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
3564 qla2xxx_wake_dpc(vha);
3566 ql_dbg(ql_dbg_disc, vha, 0xffff,
3574 qla2x00_find_free_fcp_nvme_slot(vha, sp);
3576 if ((fc4_type == FC4_TYPE_FCP_SCSI) && vha->flags.nvme_enabled &&
3578 spin_lock_irqsave(&vha->work_lock, flags);
3579 vha->scan.scan_flags &= ~SF_SCANNING;
3580 spin_unlock_irqrestore(&vha->work_lock, flags);
3583 rc = qla2x00_post_nvme_gpnft_work(vha, sp, QLA_EVT_GPNFT);
3585 qla24xx_sp_unmap(vha, sp);
3586 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
3587 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
3593 rc = qla2x00_post_gnnft_gpnft_done_work(vha, sp,
3596 rc = qla2x00_post_gnnft_gpnft_done_work(vha, sp,
3601 qla24xx_sp_unmap(vha, sp);
3602 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
3603 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
3614 static int qla24xx_async_gnnft(scsi_qla_host_t *vha, struct srb *sp,
3622 if (!vha->flags.online) {
3623 spin_lock_irqsave(&vha->work_lock, flags);
3624 vha->scan.scan_flags &= ~SF_SCANNING;
3625 spin_unlock_irqrestore(&vha->work_lock, flags);
3630 ql_log(ql_log_warn, vha, 0xffff,
3634 spin_lock_irqsave(&vha->work_lock, flags);
3635 vha->scan.scan_flags &= ~SF_SCANNING;
3636 spin_unlock_irqrestore(&vha->work_lock, flags);
3638 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
3639 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
3643 ql_dbg(ql_dbg_disc, vha, 0xfffff,
3650 sp->gen1 = vha->hw->base_qpair->chip_reset;
3652 qla2x00_init_async_sp(sp, qla2x00_get_async_timeout(vha) + 2,
3669 ql_dbg(ql_dbg_disc, vha, 0xffff,
3682 dma_free_coherent(&vha->hw->pdev->dev,
3689 dma_free_coherent(&vha->hw->pdev->dev,
3698 spin_lock_irqsave(&vha->work_lock, flags);
3699 vha->scan.scan_flags &= ~SF_SCANNING;
3700 if (vha->scan.scan_flags == 0) {
3701 ql_dbg(ql_dbg_disc, vha, 0xffff,
3703 vha->scan.scan_flags |= SF_QUEUED;
3704 schedule_delayed_work(&vha->scan.scan_work, 5);
3706 spin_unlock_irqrestore(&vha->work_lock, flags);
3712 void qla24xx_async_gpnft_done(scsi_qla_host_t *vha, srb_t *sp)
3714 ql_dbg(ql_dbg_disc + ql_dbg_verbose, vha, 0xffff,
3716 qla24xx_async_gnnft(vha, sp, sp->gen2);
3720 int qla24xx_async_gpnft(scsi_qla_host_t *vha, u8 fc4_type, srb_t *sp)
3728 ql_dbg(ql_dbg_disc + ql_dbg_verbose, vha, 0xffff,
3731 if (!vha->flags.online)
3734 spin_lock_irqsave(&vha->work_lock, flags);
3735 if (vha->scan.scan_flags & SF_SCANNING) {
3736 spin_unlock_irqrestore(&vha->work_lock, flags);
3737 ql_dbg(ql_dbg_disc + ql_dbg_verbose, vha, 0xffff,
3741 vha->scan.scan_flags |= SF_SCANNING;
3742 spin_unlock_irqrestore(&vha->work_lock, flags);
3745 ql_dbg(ql_dbg_disc + ql_dbg_verbose, vha, 0xffff,
3754 sp = qla2x00_get_sp(vha, NULL, GFP_KERNEL);
3756 spin_lock_irqsave(&vha->work_lock, flags);
3757 vha->scan.scan_flags &= ~SF_SCANNING;
3758 spin_unlock_irqrestore(&vha->work_lock, flags);
3762 sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev,
3768 ql_log(ql_log_warn, vha, 0xffff,
3770 spin_lock_irqsave(&vha->work_lock, flags);
3771 vha->scan.scan_flags &= ~SF_SCANNING;
3772 spin_unlock_irqrestore(&vha->work_lock, flags);
3779 vha->hw->max_fibre_devices *
3782 sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev,
3788 ql_log(ql_log_warn, vha, 0xffff,
3790 spin_lock_irqsave(&vha->work_lock, flags);
3791 vha->scan.scan_flags &= ~SF_SCANNING;
3792 spin_unlock_irqrestore(&vha->work_lock, flags);
3793 dma_free_coherent(&vha->hw->pdev->dev,
3804 ql_dbg(ql_dbg_disc + ql_dbg_verbose, vha, 0xffff,
3805 "%s scan list size %d\n", __func__, vha->scan.size);
3807 memset(vha->scan.l, 0, vha->scan.size);
3809 ql_dbg(ql_dbg_disc, vha, 0xffff,
3816 sp->gen1 = vha->hw->base_qpair->chip_reset;
3818 qla2x00_init_async_sp(sp, qla2x00_get_async_timeout(vha) + 2,
3834 ql_dbg(ql_dbg_disc, vha, 0xffff,
3847 dma_free_coherent(&vha->hw->pdev->dev,
3854 dma_free_coherent(&vha->hw->pdev->dev,
3864 spin_lock_irqsave(&vha->work_lock, flags);
3865 vha->scan.scan_flags &= ~SF_SCANNING;
3866 if (vha->scan.scan_flags == 0) {
3867 ql_dbg(ql_dbg_disc + ql_dbg_verbose, vha, 0xffff,
3869 vha->scan.scan_flags |= SF_QUEUED;
3870 schedule_delayed_work(&vha->scan.scan_work, 5);
3872 spin_unlock_irqrestore(&vha->work_lock, flags);
3882 struct scsi_qla_host *vha = container_of(s, struct scsi_qla_host,
3886 ql_dbg(ql_dbg_disc, vha, 0xffff,
3888 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
3889 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
3890 qla2xxx_wake_dpc(vha);
3891 spin_lock_irqsave(&vha->work_lock, flags);
3892 vha->scan.scan_flags &= ~SF_QUEUED;
3893 spin_unlock_irqrestore(&vha->work_lock, flags);
3897 void qla24xx_handle_gfpnid_event(scsi_qla_host_t *vha, struct event_arg *ea)
3901 ql_dbg(ql_dbg_disc, vha, 0xffff,
3905 fcport->rscn_gen, ea->sp->gen1, vha->fcport_count);
3912 ql_dbg(ql_dbg_disc, vha, 0x20d3,
3920 qla24xx_post_gpsc_work(vha, fcport);
3925 struct scsi_qla_host *vha = sp->vha;
3940 ql_dbg(ql_dbg_disc, vha, 0x204f,
3944 qla24xx_handle_gfpnid_event(vha, &ea);
3950 int qla24xx_async_gfpnid(scsi_qla_host_t *vha, fc_port_t *fcport)
3956 if (!vha->flags.online || (fcport->flags & FCF_ASYNC_SENT))
3960 sp = qla2x00_get_sp(vha, fcport, GFP_ATOMIC);
3968 qla2x00_init_async_sp(sp, qla2x00_get_async_timeout(vha) + 2,
3988 ql_dbg(ql_dbg_disc, vha, 0xffff,
4006 int qla24xx_post_gfpnid_work(struct scsi_qla_host *vha, fc_port_t *fcport)
4011 ls = atomic_read(&vha->loop_state);
4013 test_bit(UNLOADING, &vha->dpc_flags))
4016 e = qla2x00_alloc_work(vha, QLA_EVT_GFPNID);
4021 return qla2x00_post_work(vha, e);