Lines Matching +full:scan +full:- +full:count

1 // SPDX-License-Identifier: GPL-2.0-only
4 * Copyright (c) 2003-2014 QLogic Corporation
24 * qla2x00_prep_ms_iocb() - Prepare common MS/CT IOCB fields for SNS CT query.
33 struct qla_hw_data *ha = vha->hw; in qla2x00_prep_ms_iocb()
36 ms_pkt = (ms_iocb_entry_t *)arg->iocb; in qla2x00_prep_ms_iocb()
39 ms_pkt->entry_type = MS_IOCB_TYPE; in qla2x00_prep_ms_iocb()
40 ms_pkt->entry_count = 1; in qla2x00_prep_ms_iocb()
41 SET_TARGET_ID(ha, ms_pkt->loop_id, SIMPLE_NAME_SERVER); in qla2x00_prep_ms_iocb()
42 ms_pkt->control_flags = cpu_to_le16(CF_READ | CF_HEAD_TAG); in qla2x00_prep_ms_iocb()
43 ms_pkt->timeout = cpu_to_le16(ha->r_a_tov / 10 * 2); in qla2x00_prep_ms_iocb()
44 ms_pkt->cmd_dsd_count = cpu_to_le16(1); in qla2x00_prep_ms_iocb()
45 ms_pkt->total_dsd_count = cpu_to_le16(2); in qla2x00_prep_ms_iocb()
46 ms_pkt->rsp_bytecount = cpu_to_le32(arg->rsp_size); in qla2x00_prep_ms_iocb()
47 ms_pkt->req_bytecount = cpu_to_le32(arg->req_size); in qla2x00_prep_ms_iocb()
49 put_unaligned_le64(arg->req_dma, &ms_pkt->req_dsd.address); in qla2x00_prep_ms_iocb()
50 ms_pkt->req_dsd.length = ms_pkt->req_bytecount; in qla2x00_prep_ms_iocb()
52 put_unaligned_le64(arg->rsp_dma, &ms_pkt->rsp_dsd.address); in qla2x00_prep_ms_iocb()
53 ms_pkt->rsp_dsd.length = ms_pkt->rsp_bytecount; in qla2x00_prep_ms_iocb()
55 vha->qla_stats.control_requests++; in qla2x00_prep_ms_iocb()
61 * qla24xx_prep_ms_iocb() - Prepare common CT IOCB fields for SNS CT query.
70 struct qla_hw_data *ha = vha->hw; in qla24xx_prep_ms_iocb()
73 ct_pkt = (struct ct_entry_24xx *)arg->iocb; in qla24xx_prep_ms_iocb()
76 ct_pkt->entry_type = CT_IOCB_TYPE; in qla24xx_prep_ms_iocb()
77 ct_pkt->entry_count = 1; in qla24xx_prep_ms_iocb()
78 ct_pkt->nport_handle = cpu_to_le16(arg->nport_handle); in qla24xx_prep_ms_iocb()
79 ct_pkt->timeout = cpu_to_le16(ha->r_a_tov / 10 * 2); in qla24xx_prep_ms_iocb()
80 ct_pkt->cmd_dsd_count = cpu_to_le16(1); in qla24xx_prep_ms_iocb()
81 ct_pkt->rsp_dsd_count = cpu_to_le16(1); in qla24xx_prep_ms_iocb()
82 ct_pkt->rsp_byte_count = cpu_to_le32(arg->rsp_size); in qla24xx_prep_ms_iocb()
83 ct_pkt->cmd_byte_count = cpu_to_le32(arg->req_size); in qla24xx_prep_ms_iocb()
85 put_unaligned_le64(arg->req_dma, &ct_pkt->dsd[0].address); in qla24xx_prep_ms_iocb()
86 ct_pkt->dsd[0].length = ct_pkt->cmd_byte_count; in qla24xx_prep_ms_iocb()
88 put_unaligned_le64(arg->rsp_dma, &ct_pkt->dsd[1].address); in qla24xx_prep_ms_iocb()
89 ct_pkt->dsd[1].length = ct_pkt->rsp_byte_count; in qla24xx_prep_ms_iocb()
90 ct_pkt->vp_index = vha->vp_idx; in qla24xx_prep_ms_iocb()
92 vha->qla_stats.control_requests++; in qla24xx_prep_ms_iocb()
98 * qla2x00_prep_ct_req() - Prepare common CT request fields for SNS query.
110 p->p.req.header.revision = 0x01; in qla2x00_prep_ct_req()
111 p->p.req.header.gs_type = 0xFC; in qla2x00_prep_ct_req()
112 p->p.req.header.gs_subtype = 0x02; in qla2x00_prep_ct_req()
113 p->p.req.command = cpu_to_be16(cmd); in qla2x00_prep_ct_req()
114 p->p.req.max_rsp_size = cpu_to_be16((rsp_size - 16) / 4); in qla2x00_prep_ct_req()
116 return &p->p.req; in qla2x00_prep_ct_req()
125 struct qla_hw_data *ha = vha->hw; in qla2x00_chk_ms_status()
129 if (ms_pkt->entry_status != 0) { in qla2x00_chk_ms_status()
132 routine, ms_pkt->entry_status, vha->d_id.b.domain, in qla2x00_chk_ms_status()
133 vha->d_id.b.area, vha->d_id.b.al_pa); in qla2x00_chk_ms_status()
137 ((struct ct_entry_24xx *)ms_pkt)->comp_status); in qla2x00_chk_ms_status()
139 comp_status = le16_to_cpu(ms_pkt->status); in qla2x00_chk_ms_status()
144 if (ct_rsp->header.response != in qla2x00_chk_ms_status()
148 routine, vha->d_id.b.domain, in qla2x00_chk_ms_status()
149 vha->d_id.b.area, vha->d_id.b.al_pa, in qla2x00_chk_ms_status()
150 comp_status, ct_rsp->header.response); in qla2x00_chk_ms_status()
160 if (le16_to_cpu(ms_pkt->loop_id.extended) == in qla2x00_chk_ms_status()
164 if (le16_to_cpu(ms_pkt->loop_id.extended) == in qla2x00_chk_ms_status()
173 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla2x00_chk_ms_status()
174 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qla2x00_chk_ms_status()
184 vha->d_id.b.domain, vha->d_id.b.area, in qla2x00_chk_ms_status()
185 vha->d_id.b.al_pa); in qla2x00_chk_ms_status()
193 * qla2x00_ga_nxt() - SNS scan for fabric devices via GA_NXT command.
207 struct qla_hw_data *ha = vha->hw; in qla2x00_ga_nxt()
213 arg.iocb = ha->ms_iocb; in qla2x00_ga_nxt()
214 arg.req_dma = ha->ct_sns_dma; in qla2x00_ga_nxt()
215 arg.rsp_dma = ha->ct_sns_dma; in qla2x00_ga_nxt()
222 ms_pkt = ha->isp_ops->prep_ms_iocb(vha, &arg); in qla2x00_ga_nxt()
225 ct_req = qla2x00_prep_ct_req(ha->ct_sns, GA_NXT_CMD, in qla2x00_ga_nxt()
227 ct_rsp = &ha->ct_sns->p.rsp; in qla2x00_ga_nxt()
229 /* Prepare CT arguments -- port_id */ in qla2x00_ga_nxt()
230 ct_req->req.port_id.port_id = port_id_to_be_id(fcport->d_id); in qla2x00_ga_nxt()
233 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, in qla2x00_ga_nxt()
244 fcport->d_id = be_to_port_id(ct_rsp->rsp.ga_nxt.port_id); in qla2x00_ga_nxt()
246 memcpy(fcport->node_name, ct_rsp->rsp.ga_nxt.node_name, in qla2x00_ga_nxt()
248 memcpy(fcport->port_name, ct_rsp->rsp.ga_nxt.port_name, in qla2x00_ga_nxt()
251 fcport->fc4_type = (ct_rsp->rsp.ga_nxt.fc4_types[2] & BIT_0) ? in qla2x00_ga_nxt()
254 if (ct_rsp->rsp.ga_nxt.port_type != NS_N_PORT_TYPE && in qla2x00_ga_nxt()
255 ct_rsp->rsp.ga_nxt.port_type != NS_NL_PORT_TYPE) in qla2x00_ga_nxt()
256 fcport->d_id.b.domain = 0xf0; in qla2x00_ga_nxt()
259 "GA_NXT entry - nn %8phN pn %8phN " in qla2x00_ga_nxt()
261 fcport->node_name, fcport->port_name, in qla2x00_ga_nxt()
262 fcport->d_id.b.domain, fcport->d_id.b.area, in qla2x00_ga_nxt()
263 fcport->d_id.b.al_pa); in qla2x00_ga_nxt()
272 return vha->hw->max_fibre_devices * 4 + 16; in qla2x00_gid_pt_rsp_size()
276 * qla2x00_gid_pt() - SNS scan for fabric devices via GID_PT command.
280 * NOTE: Non-Nx_Ports are not requested.
295 struct qla_hw_data *ha = vha->hw; in qla2x00_gid_pt()
305 arg.iocb = ha->ms_iocb; in qla2x00_gid_pt()
306 arg.req_dma = ha->ct_sns_dma; in qla2x00_gid_pt()
307 arg.rsp_dma = ha->ct_sns_dma; in qla2x00_gid_pt()
314 ms_pkt = ha->isp_ops->prep_ms_iocb(vha, &arg); in qla2x00_gid_pt()
317 ct_req = qla2x00_prep_ct_req(ha->ct_sns, GID_PT_CMD, gid_pt_rsp_size); in qla2x00_gid_pt()
318 ct_rsp = &ha->ct_sns->p.rsp; in qla2x00_gid_pt()
320 /* Prepare CT arguments -- port_type */ in qla2x00_gid_pt()
321 ct_req->req.gid_pt.port_type = NS_NX_PORT_TYPE; in qla2x00_gid_pt()
324 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, in qla2x00_gid_pt()
335 for (i = 0; i < ha->max_fibre_devices; i++) { in qla2x00_gid_pt()
336 gid_data = &ct_rsp->rsp.gid_pt.entries[i]; in qla2x00_gid_pt()
337 list[i].d_id = be_to_port_id(gid_data->port_id); in qla2x00_gid_pt()
342 if (gid_data->control_byte & BIT_7) { in qla2x00_gid_pt()
343 list[i].d_id.b.rsvd_1 = gid_data->control_byte; in qla2x00_gid_pt()
354 if (i == ha->max_fibre_devices) in qla2x00_gid_pt()
362 * qla2x00_gpn_id() - SNS Get Port Name (GPN_ID) query.
377 struct qla_hw_data *ha = vha->hw; in qla2x00_gpn_id()
383 arg.iocb = ha->ms_iocb; in qla2x00_gpn_id()
384 arg.req_dma = ha->ct_sns_dma; in qla2x00_gpn_id()
385 arg.rsp_dma = ha->ct_sns_dma; in qla2x00_gpn_id()
390 for (i = 0; i < ha->max_fibre_devices; i++) { in qla2x00_gpn_id()
393 ms_pkt = ha->isp_ops->prep_ms_iocb(vha, &arg); in qla2x00_gpn_id()
396 ct_req = qla2x00_prep_ct_req(ha->ct_sns, GPN_ID_CMD, in qla2x00_gpn_id()
398 ct_rsp = &ha->ct_sns->p.rsp; in qla2x00_gpn_id()
400 /* Prepare CT arguments -- port_id */ in qla2x00_gpn_id()
401 ct_req->req.port_id.port_id = port_id_to_be_id(list[i].d_id); in qla2x00_gpn_id()
404 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, in qla2x00_gpn_id()
418 ct_rsp->rsp.gpn_id.port_name, WWN_SIZE); in qla2x00_gpn_id()
430 * qla2x00_gnn_id() - SNS Get Node Name (GNN_ID) query.
441 struct qla_hw_data *ha = vha->hw; in qla2x00_gnn_id()
450 arg.iocb = ha->ms_iocb; in qla2x00_gnn_id()
451 arg.req_dma = ha->ct_sns_dma; in qla2x00_gnn_id()
452 arg.rsp_dma = ha->ct_sns_dma; in qla2x00_gnn_id()
457 for (i = 0; i < ha->max_fibre_devices; i++) { in qla2x00_gnn_id()
460 ms_pkt = ha->isp_ops->prep_ms_iocb(vha, &arg); in qla2x00_gnn_id()
463 ct_req = qla2x00_prep_ct_req(ha->ct_sns, GNN_ID_CMD, in qla2x00_gnn_id()
465 ct_rsp = &ha->ct_sns->p.rsp; in qla2x00_gnn_id()
467 /* Prepare CT arguments -- port_id */ in qla2x00_gnn_id()
468 ct_req->req.port_id.port_id = port_id_to_be_id(list[i].d_id); in qla2x00_gnn_id()
471 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, in qla2x00_gnn_id()
485 ct_rsp->rsp.gnn_id.node_name, WWN_SIZE); in qla2x00_gnn_id()
488 "GID_PT entry - nn %8phN pn %8phN " in qla2x00_gnn_id()
505 struct scsi_qla_host *vha = sp->vha; in qla2x00_async_sns_sp_done()
509 sp->rc = rc; in qla2x00_async_sns_sp_done()
512 "Async done-%s exiting normally.\n", in qla2x00_async_sns_sp_done()
513 sp->name); in qla2x00_async_sns_sp_done()
516 "Async done-%s timeout\n", sp->name); in qla2x00_async_sns_sp_done()
518 ct_sns = (struct ct_sns_pkt *)sp->u.iocb_cmd.u.ctarg.rsp; in qla2x00_async_sns_sp_done()
520 sp->retry_count++; in qla2x00_async_sns_sp_done()
521 if (sp->retry_count > 3) in qla2x00_async_sns_sp_done()
525 "Async done-%s fail rc %x. Retry count %d\n", in qla2x00_async_sns_sp_done()
526 sp->name, rc, sp->retry_count); in qla2x00_async_sns_sp_done()
532 e->u.iosb.sp = sp; in qla2x00_async_sns_sp_done()
542 if (sp->u.iocb_cmd.u.ctarg.req) { in qla2x00_async_sns_sp_done()
543 dma_free_coherent(&vha->hw->pdev->dev, in qla2x00_async_sns_sp_done()
544 sp->u.iocb_cmd.u.ctarg.req_allocated_size, in qla2x00_async_sns_sp_done()
545 sp->u.iocb_cmd.u.ctarg.req, in qla2x00_async_sns_sp_done()
546 sp->u.iocb_cmd.u.ctarg.req_dma); in qla2x00_async_sns_sp_done()
547 sp->u.iocb_cmd.u.ctarg.req = NULL; in qla2x00_async_sns_sp_done()
550 if (sp->u.iocb_cmd.u.ctarg.rsp) { in qla2x00_async_sns_sp_done()
551 dma_free_coherent(&vha->hw->pdev->dev, in qla2x00_async_sns_sp_done()
552 sp->u.iocb_cmd.u.ctarg.rsp_allocated_size, in qla2x00_async_sns_sp_done()
553 sp->u.iocb_cmd.u.ctarg.rsp, in qla2x00_async_sns_sp_done()
554 sp->u.iocb_cmd.u.ctarg.rsp_dma); in qla2x00_async_sns_sp_done()
555 sp->u.iocb_cmd.u.ctarg.rsp = NULL; in qla2x00_async_sns_sp_done()
559 kref_put(&sp->cmd_kref, qla2x00_sp_release); in qla2x00_async_sns_sp_done()
563 e->u.iosb.sp = sp; in qla2x00_async_sns_sp_done()
568 * qla2x00_rft_id() - SNS Register FC-4 TYPEs (RFT_ID) supported by the HBA.
576 struct qla_hw_data *ha = vha->hw; in qla2x00_rft_id()
581 return qla_async_rftid(vha, &vha->d_id); in qla2x00_rft_id()
591 if (!vha->flags.online) in qla_async_rftid()
599 sp->type = SRB_CT_PTHRU_CMD; in qla_async_rftid()
600 sp->name = "rft_id"; in qla_async_rftid()
604 sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev, in qla_async_rftid()
605 sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.req_dma, in qla_async_rftid()
607 sp->u.iocb_cmd.u.ctarg.req_allocated_size = sizeof(struct ct_sns_pkt); in qla_async_rftid()
608 if (!sp->u.iocb_cmd.u.ctarg.req) { in qla_async_rftid()
615 sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev, in qla_async_rftid()
616 sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.rsp_dma, in qla_async_rftid()
618 sp->u.iocb_cmd.u.ctarg.rsp_allocated_size = sizeof(struct ct_sns_pkt); in qla_async_rftid()
619 if (!sp->u.iocb_cmd.u.ctarg.rsp) { in qla_async_rftid()
625 ct_sns = (struct ct_sns_pkt *)sp->u.iocb_cmd.u.ctarg.rsp; in qla_async_rftid()
627 ct_sns = (struct ct_sns_pkt *)sp->u.iocb_cmd.u.ctarg.req; in qla_async_rftid()
632 /* Prepare CT arguments -- port_id, FC-4 types */ in qla_async_rftid()
633 ct_req->req.rft_id.port_id = port_id_to_be_id(vha->d_id); in qla_async_rftid()
634 ct_req->req.rft_id.fc4_types[2] = 0x01; /* FCP-3 */ in qla_async_rftid()
636 if (vha->flags.nvme_enabled && qla_ini_mode_enabled(vha)) in qla_async_rftid()
637 ct_req->req.rft_id.fc4_types[6] = 1; /* NVMe type 28h */ in qla_async_rftid()
639 sp->u.iocb_cmd.u.ctarg.req_size = RFT_ID_REQ_SIZE; in qla_async_rftid()
640 sp->u.iocb_cmd.u.ctarg.rsp_size = RFT_ID_RSP_SIZE; in qla_async_rftid()
641 sp->u.iocb_cmd.u.ctarg.nport_handle = NPH_SNS; in qla_async_rftid()
644 "Async-%s - hdl=%x portid %06x.\n", in qla_async_rftid()
645 sp->name, sp->handle, d_id->b24); in qla_async_rftid()
656 kref_put(&sp->cmd_kref, qla2x00_sp_release); in qla_async_rftid()
662 * qla2x00_rff_id() - SNS Register FC-4 Features (RFF_ID) supported by the HBA.
671 struct qla_hw_data *ha = vha->hw; in qla2x00_rff_id()
679 return qla_async_rffid(vha, &vha->d_id, qlt_rff_id(vha), type); in qla2x00_rff_id()
695 sp->type = SRB_CT_PTHRU_CMD; in qla_async_rffid()
696 sp->name = "rff_id"; in qla_async_rffid()
700 sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev, in qla_async_rffid()
701 sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.req_dma, in qla_async_rffid()
703 sp->u.iocb_cmd.u.ctarg.req_allocated_size = sizeof(struct ct_sns_pkt); in qla_async_rffid()
704 if (!sp->u.iocb_cmd.u.ctarg.req) { in qla_async_rffid()
711 sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev, in qla_async_rffid()
712 sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.rsp_dma, in qla_async_rffid()
714 sp->u.iocb_cmd.u.ctarg.rsp_allocated_size = sizeof(struct ct_sns_pkt); in qla_async_rffid()
715 if (!sp->u.iocb_cmd.u.ctarg.rsp) { in qla_async_rffid()
721 ct_sns = (struct ct_sns_pkt *)sp->u.iocb_cmd.u.ctarg.rsp; in qla_async_rffid()
723 ct_sns = (struct ct_sns_pkt *)sp->u.iocb_cmd.u.ctarg.req; in qla_async_rffid()
728 /* Prepare CT arguments -- port_id, FC-4 feature, FC-4 type */ in qla_async_rffid()
729 ct_req->req.rff_id.port_id = port_id_to_be_id(*d_id); in qla_async_rffid()
730 ct_req->req.rff_id.fc4_feature = fc4feature; in qla_async_rffid()
731 ct_req->req.rff_id.fc4_type = fc4type; /* SCSI-FCP or FC-NVMe */ in qla_async_rffid()
733 sp->u.iocb_cmd.u.ctarg.req_size = RFF_ID_REQ_SIZE; in qla_async_rffid()
734 sp->u.iocb_cmd.u.ctarg.rsp_size = RFF_ID_RSP_SIZE; in qla_async_rffid()
735 sp->u.iocb_cmd.u.ctarg.nport_handle = NPH_SNS; in qla_async_rffid()
738 "Async-%s - hdl=%x portid %06x feature %x type %x.\n", in qla_async_rffid()
739 sp->name, sp->handle, d_id->b24, fc4feature, fc4type); in qla_async_rffid()
752 kref_put(&sp->cmd_kref, qla2x00_sp_release); in qla_async_rffid()
758 * qla2x00_rnn_id() - SNS Register Node Name (RNN_ID) of the HBA.
766 struct qla_hw_data *ha = vha->hw; in qla2x00_rnn_id()
771 return qla_async_rnnid(vha, &vha->d_id, vha->node_name); in qla2x00_rnn_id()
787 sp->type = SRB_CT_PTHRU_CMD; in qla_async_rnnid()
788 sp->name = "rnid"; in qla_async_rnnid()
792 sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev, in qla_async_rnnid()
793 sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.req_dma, in qla_async_rnnid()
795 sp->u.iocb_cmd.u.ctarg.req_allocated_size = sizeof(struct ct_sns_pkt); in qla_async_rnnid()
796 if (!sp->u.iocb_cmd.u.ctarg.req) { in qla_async_rnnid()
803 sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev, in qla_async_rnnid()
804 sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.rsp_dma, in qla_async_rnnid()
806 sp->u.iocb_cmd.u.ctarg.rsp_allocated_size = sizeof(struct ct_sns_pkt); in qla_async_rnnid()
807 if (!sp->u.iocb_cmd.u.ctarg.rsp) { in qla_async_rnnid()
813 ct_sns = (struct ct_sns_pkt *)sp->u.iocb_cmd.u.ctarg.rsp; in qla_async_rnnid()
815 ct_sns = (struct ct_sns_pkt *)sp->u.iocb_cmd.u.ctarg.req; in qla_async_rnnid()
820 /* Prepare CT arguments -- port_id, node_name */ in qla_async_rnnid()
821 ct_req->req.rnn_id.port_id = port_id_to_be_id(vha->d_id); in qla_async_rnnid()
822 memcpy(ct_req->req.rnn_id.node_name, vha->node_name, WWN_SIZE); in qla_async_rnnid()
824 sp->u.iocb_cmd.u.ctarg.req_size = RNN_ID_REQ_SIZE; in qla_async_rnnid()
825 sp->u.iocb_cmd.u.ctarg.rsp_size = RNN_ID_RSP_SIZE; in qla_async_rnnid()
826 sp->u.iocb_cmd.u.ctarg.nport_handle = NPH_SNS; in qla_async_rnnid()
829 "Async-%s - hdl=%x portid %06x\n", in qla_async_rnnid()
830 sp->name, sp->handle, d_id->b24); in qla_async_rnnid()
843 kref_put(&sp->cmd_kref, qla2x00_sp_release); in qla_async_rnnid()
851 struct qla_hw_data *ha = vha->hw; in qla2x00_get_sym_node_name()
855 ha->model_number, ha->mr.fw_version, qla2x00_version_str); in qla2x00_get_sym_node_name()
858 ha->model_number, ha->fw_major_version, ha->fw_minor_version, in qla2x00_get_sym_node_name()
859 ha->fw_subminor_version, qla2x00_version_str); in qla2x00_get_sym_node_name()
863 * qla2x00_rsnn_nn() - SNS Register Symbolic Node Name (RSNN_NN) of the HBA.
871 struct qla_hw_data *ha = vha->hw; in qla2x00_rsnn_nn()
894 sp->type = SRB_CT_PTHRU_CMD; in qla_async_rsnn_nn()
895 sp->name = "rsnn_nn"; in qla_async_rsnn_nn()
899 sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev, in qla_async_rsnn_nn()
900 sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.req_dma, in qla_async_rsnn_nn()
902 sp->u.iocb_cmd.u.ctarg.req_allocated_size = sizeof(struct ct_sns_pkt); in qla_async_rsnn_nn()
903 if (!sp->u.iocb_cmd.u.ctarg.req) { in qla_async_rsnn_nn()
910 sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev, in qla_async_rsnn_nn()
911 sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.rsp_dma, in qla_async_rsnn_nn()
913 sp->u.iocb_cmd.u.ctarg.rsp_allocated_size = sizeof(struct ct_sns_pkt); in qla_async_rsnn_nn()
914 if (!sp->u.iocb_cmd.u.ctarg.rsp) { in qla_async_rsnn_nn()
920 ct_sns = (struct ct_sns_pkt *)sp->u.iocb_cmd.u.ctarg.rsp; in qla_async_rsnn_nn()
922 ct_sns = (struct ct_sns_pkt *)sp->u.iocb_cmd.u.ctarg.req; in qla_async_rsnn_nn()
927 /* Prepare CT arguments -- node_name, symbolic node_name, size */ in qla_async_rsnn_nn()
928 memcpy(ct_req->req.rsnn_nn.node_name, vha->node_name, WWN_SIZE); in qla_async_rsnn_nn()
931 qla2x00_get_sym_node_name(vha, ct_req->req.rsnn_nn.sym_node_name, in qla_async_rsnn_nn()
932 sizeof(ct_req->req.rsnn_nn.sym_node_name)); in qla_async_rsnn_nn()
933 ct_req->req.rsnn_nn.name_len = in qla_async_rsnn_nn()
934 (uint8_t)strlen(ct_req->req.rsnn_nn.sym_node_name); in qla_async_rsnn_nn()
937 sp->u.iocb_cmd.u.ctarg.req_size = 24 + 1 + ct_req->req.rsnn_nn.name_len; in qla_async_rsnn_nn()
938 sp->u.iocb_cmd.u.ctarg.rsp_size = RSNN_NN_RSP_SIZE; in qla_async_rsnn_nn()
939 sp->u.iocb_cmd.u.ctarg.nport_handle = NPH_SNS; in qla_async_rsnn_nn()
942 "Async-%s - hdl=%x.\n", in qla_async_rsnn_nn()
943 sp->name, sp->handle); in qla_async_rsnn_nn()
956 kref_put(&sp->cmd_kref, qla2x00_sp_release); in qla_async_rsnn_nn()
962 * qla2x00_prep_sns_cmd() - Prepare common SNS command request fields for query.
976 struct qla_hw_data *ha = vha->hw; in qla2x00_prep_sns_cmd()
978 sns_cmd = ha->sns_cmd; in qla2x00_prep_sns_cmd()
981 sns_cmd->p.cmd.buffer_length = cpu_to_le16(wc); in qla2x00_prep_sns_cmd()
982 put_unaligned_le64(ha->sns_cmd_dma, &sns_cmd->p.cmd.buffer_address); in qla2x00_prep_sns_cmd()
983 sns_cmd->p.cmd.subcommand_length = cpu_to_le16(scmd_len); in qla2x00_prep_sns_cmd()
984 sns_cmd->p.cmd.subcommand = cpu_to_le16(cmd); in qla2x00_prep_sns_cmd()
985 wc = (data_size - 16) / 4; /* Size in 32bit words. */ in qla2x00_prep_sns_cmd()
986 sns_cmd->p.cmd.size = cpu_to_le16(wc); in qla2x00_prep_sns_cmd()
988 vha->qla_stats.control_requests++; in qla2x00_prep_sns_cmd()
994 * qla2x00_sns_ga_nxt() - SNS scan for fabric devices via GA_NXT command.
1006 struct qla_hw_data *ha = vha->hw; in qla2x00_sns_ga_nxt()
1014 /* Prepare SNS command arguments -- port_id. */ in qla2x00_sns_ga_nxt()
1015 sns_cmd->p.cmd.param[0] = fcport->d_id.b.al_pa; in qla2x00_sns_ga_nxt()
1016 sns_cmd->p.cmd.param[1] = fcport->d_id.b.area; in qla2x00_sns_ga_nxt()
1017 sns_cmd->p.cmd.param[2] = fcport->d_id.b.domain; in qla2x00_sns_ga_nxt()
1020 rval = qla2x00_send_sns(vha, ha->sns_cmd_dma, GA_NXT_SNS_CMD_SIZE / 2, in qla2x00_sns_ga_nxt()
1026 } else if (sns_cmd->p.gan_data[8] != 0x80 || in qla2x00_sns_ga_nxt()
1027 sns_cmd->p.gan_data[9] != 0x02) { in qla2x00_sns_ga_nxt()
1031 sns_cmd->p.gan_data, 16); in qla2x00_sns_ga_nxt()
1035 fcport->d_id.b.domain = sns_cmd->p.gan_data[17]; in qla2x00_sns_ga_nxt()
1036 fcport->d_id.b.area = sns_cmd->p.gan_data[18]; in qla2x00_sns_ga_nxt()
1037 fcport->d_id.b.al_pa = sns_cmd->p.gan_data[19]; in qla2x00_sns_ga_nxt()
1039 memcpy(fcport->node_name, &sns_cmd->p.gan_data[284], WWN_SIZE); in qla2x00_sns_ga_nxt()
1040 memcpy(fcport->port_name, &sns_cmd->p.gan_data[20], WWN_SIZE); in qla2x00_sns_ga_nxt()
1042 if (sns_cmd->p.gan_data[16] != NS_N_PORT_TYPE && in qla2x00_sns_ga_nxt()
1043 sns_cmd->p.gan_data[16] != NS_NL_PORT_TYPE) in qla2x00_sns_ga_nxt()
1044 fcport->d_id.b.domain = 0xf0; in qla2x00_sns_ga_nxt()
1047 "GA_NXT entry - nn %8phN pn %8phN " in qla2x00_sns_ga_nxt()
1049 fcport->node_name, fcport->port_name, in qla2x00_sns_ga_nxt()
1050 fcport->d_id.b.domain, fcport->d_id.b.area, in qla2x00_sns_ga_nxt()
1051 fcport->d_id.b.al_pa); in qla2x00_sns_ga_nxt()
1058 * qla2x00_sns_gid_pt() - SNS scan for fabric devices via GID_PT command.
1064 * NOTE: Non-Nx_Ports are not requested.
1072 struct qla_hw_data *ha = vha->hw; in qla2x00_sns_gid_pt()
1085 /* Prepare SNS command arguments -- port_type. */ in qla2x00_sns_gid_pt()
1086 sns_cmd->p.cmd.param[0] = NS_NX_PORT_TYPE; in qla2x00_sns_gid_pt()
1089 rval = qla2x00_send_sns(vha, ha->sns_cmd_dma, GID_PT_SNS_CMD_SIZE / 2, in qla2x00_sns_gid_pt()
1095 } else if (sns_cmd->p.gid_data[8] != 0x80 || in qla2x00_sns_gid_pt()
1096 sns_cmd->p.gid_data[9] != 0x02) { in qla2x00_sns_gid_pt()
1100 sns_cmd->p.gid_data, 16); in qla2x00_sns_gid_pt()
1104 for (i = 0; i < ha->max_fibre_devices; i++) { in qla2x00_sns_gid_pt()
1105 entry = &sns_cmd->p.gid_data[(i * 4) + 16]; in qla2x00_sns_gid_pt()
1123 if (i == ha->max_fibre_devices) in qla2x00_sns_gid_pt()
1131 * qla2x00_sns_gpn_id() - SNS Get Port Name (GPN_ID) query.
1143 struct qla_hw_data *ha = vha->hw; in qla2x00_sns_gpn_id()
1147 for (i = 0; i < ha->max_fibre_devices; i++) { in qla2x00_sns_gpn_id()
1153 /* Prepare SNS command arguments -- port_id. */ in qla2x00_sns_gpn_id()
1154 sns_cmd->p.cmd.param[0] = list[i].d_id.b.al_pa; in qla2x00_sns_gpn_id()
1155 sns_cmd->p.cmd.param[1] = list[i].d_id.b.area; in qla2x00_sns_gpn_id()
1156 sns_cmd->p.cmd.param[2] = list[i].d_id.b.domain; in qla2x00_sns_gpn_id()
1159 rval = qla2x00_send_sns(vha, ha->sns_cmd_dma, in qla2x00_sns_gpn_id()
1165 } else if (sns_cmd->p.gpn_data[8] != 0x80 || in qla2x00_sns_gpn_id()
1166 sns_cmd->p.gpn_data[9] != 0x02) { in qla2x00_sns_gpn_id()
1170 sns_cmd->p.gpn_data, 16); in qla2x00_sns_gpn_id()
1174 memcpy(list[i].port_name, &sns_cmd->p.gpn_data[16], in qla2x00_sns_gpn_id()
1187 * qla2x00_sns_gnn_id() - SNS Get Node Name (GNN_ID) query.
1199 struct qla_hw_data *ha = vha->hw; in qla2x00_sns_gnn_id()
1203 for (i = 0; i < ha->max_fibre_devices; i++) { in qla2x00_sns_gnn_id()
1209 /* Prepare SNS command arguments -- port_id. */ in qla2x00_sns_gnn_id()
1210 sns_cmd->p.cmd.param[0] = list[i].d_id.b.al_pa; in qla2x00_sns_gnn_id()
1211 sns_cmd->p.cmd.param[1] = list[i].d_id.b.area; in qla2x00_sns_gnn_id()
1212 sns_cmd->p.cmd.param[2] = list[i].d_id.b.domain; in qla2x00_sns_gnn_id()
1215 rval = qla2x00_send_sns(vha, ha->sns_cmd_dma, in qla2x00_sns_gnn_id()
1221 } else if (sns_cmd->p.gnn_data[8] != 0x80 || in qla2x00_sns_gnn_id()
1222 sns_cmd->p.gnn_data[9] != 0x02) { in qla2x00_sns_gnn_id()
1226 sns_cmd->p.gnn_data, 16); in qla2x00_sns_gnn_id()
1230 memcpy(list[i].node_name, &sns_cmd->p.gnn_data[16], in qla2x00_sns_gnn_id()
1234 "GID_PT entry - nn %8phN pn %8phN " in qla2x00_sns_gnn_id()
1250 * qla2x00_sns_rft_id() - SNS Register FC-4 TYPEs (RFT_ID) supported by the HBA.
1261 struct qla_hw_data *ha = vha->hw; in qla2x00_sns_rft_id()
1269 /* Prepare SNS command arguments -- port_id, FC-4 types */ in qla2x00_sns_rft_id()
1270 sns_cmd->p.cmd.param[0] = vha->d_id.b.al_pa; in qla2x00_sns_rft_id()
1271 sns_cmd->p.cmd.param[1] = vha->d_id.b.area; in qla2x00_sns_rft_id()
1272 sns_cmd->p.cmd.param[2] = vha->d_id.b.domain; in qla2x00_sns_rft_id()
1274 sns_cmd->p.cmd.param[5] = 0x01; /* FCP-3 */ in qla2x00_sns_rft_id()
1277 rval = qla2x00_send_sns(vha, ha->sns_cmd_dma, RFT_ID_SNS_CMD_SIZE / 2, in qla2x00_sns_rft_id()
1283 } else if (sns_cmd->p.rft_data[8] != 0x80 || in qla2x00_sns_rft_id()
1284 sns_cmd->p.rft_data[9] != 0x02) { in qla2x00_sns_rft_id()
1288 sns_cmd->p.rft_data, 16); in qla2x00_sns_rft_id()
1299 * qla2x00_sns_rnn_id() - SNS Register Node Name (RNN_ID) of the HBA.
1310 struct qla_hw_data *ha = vha->hw; in qla2x00_sns_rnn_id()
1318 /* Prepare SNS command arguments -- port_id, nodename. */ in qla2x00_sns_rnn_id()
1319 sns_cmd->p.cmd.param[0] = vha->d_id.b.al_pa; in qla2x00_sns_rnn_id()
1320 sns_cmd->p.cmd.param[1] = vha->d_id.b.area; in qla2x00_sns_rnn_id()
1321 sns_cmd->p.cmd.param[2] = vha->d_id.b.domain; in qla2x00_sns_rnn_id()
1323 sns_cmd->p.cmd.param[4] = vha->node_name[7]; in qla2x00_sns_rnn_id()
1324 sns_cmd->p.cmd.param[5] = vha->node_name[6]; in qla2x00_sns_rnn_id()
1325 sns_cmd->p.cmd.param[6] = vha->node_name[5]; in qla2x00_sns_rnn_id()
1326 sns_cmd->p.cmd.param[7] = vha->node_name[4]; in qla2x00_sns_rnn_id()
1327 sns_cmd->p.cmd.param[8] = vha->node_name[3]; in qla2x00_sns_rnn_id()
1328 sns_cmd->p.cmd.param[9] = vha->node_name[2]; in qla2x00_sns_rnn_id()
1329 sns_cmd->p.cmd.param[10] = vha->node_name[1]; in qla2x00_sns_rnn_id()
1330 sns_cmd->p.cmd.param[11] = vha->node_name[0]; in qla2x00_sns_rnn_id()
1333 rval = qla2x00_send_sns(vha, ha->sns_cmd_dma, RNN_ID_SNS_CMD_SIZE / 2, in qla2x00_sns_rnn_id()
1339 } else if (sns_cmd->p.rnn_data[8] != 0x80 || in qla2x00_sns_rnn_id()
1340 sns_cmd->p.rnn_data[9] != 0x02) { in qla2x00_sns_rnn_id()
1344 sns_cmd->p.rnn_data, 16); in qla2x00_sns_rnn_id()
1355 * qla2x00_mgmt_svr_login() - Login to fabric Management Service.
1365 struct qla_hw_data *ha = vha->hw; in qla2x00_mgmt_svr_login()
1368 if (vha->flags.management_server_logged_in) in qla2x00_mgmt_svr_login()
1371 rval = ha->isp_ops->fabric_login(vha, vha->mgmt_svr_loop_id, 0xff, 0xff, in qla2x00_mgmt_svr_login()
1377 "rval=%d\n", vha->mgmt_svr_loop_id, rval); in qla2x00_mgmt_svr_login()
1382 vha->mgmt_svr_loop_id, mb[0], mb[1], mb[2], mb[6], in qla2x00_mgmt_svr_login()
1386 vha->flags.management_server_logged_in = 1; in qla2x00_mgmt_svr_login()
1392 * qla2x00_prep_ms_fdmi_iocb() - Prepare common MS IOCB fields for FDMI query.
1404 struct qla_hw_data *ha = vha->hw; in qla2x00_prep_ms_fdmi_iocb()
1406 ms_pkt = ha->ms_iocb; in qla2x00_prep_ms_fdmi_iocb()
1409 ms_pkt->entry_type = MS_IOCB_TYPE; in qla2x00_prep_ms_fdmi_iocb()
1410 ms_pkt->entry_count = 1; in qla2x00_prep_ms_fdmi_iocb()
1411 SET_TARGET_ID(ha, ms_pkt->loop_id, vha->mgmt_svr_loop_id); in qla2x00_prep_ms_fdmi_iocb()
1412 ms_pkt->control_flags = cpu_to_le16(CF_READ | CF_HEAD_TAG); in qla2x00_prep_ms_fdmi_iocb()
1413 ms_pkt->timeout = cpu_to_le16(ha->r_a_tov / 10 * 2); in qla2x00_prep_ms_fdmi_iocb()
1414 ms_pkt->cmd_dsd_count = cpu_to_le16(1); in qla2x00_prep_ms_fdmi_iocb()
1415 ms_pkt->total_dsd_count = cpu_to_le16(2); in qla2x00_prep_ms_fdmi_iocb()
1416 ms_pkt->rsp_bytecount = cpu_to_le32(rsp_size); in qla2x00_prep_ms_fdmi_iocb()
1417 ms_pkt->req_bytecount = cpu_to_le32(req_size); in qla2x00_prep_ms_fdmi_iocb()
1419 put_unaligned_le64(ha->ct_sns_dma, &ms_pkt->req_dsd.address); in qla2x00_prep_ms_fdmi_iocb()
1420 ms_pkt->req_dsd.length = ms_pkt->req_bytecount; in qla2x00_prep_ms_fdmi_iocb()
1422 put_unaligned_le64(ha->ct_sns_dma, &ms_pkt->rsp_dsd.address); in qla2x00_prep_ms_fdmi_iocb()
1423 ms_pkt->rsp_dsd.length = ms_pkt->rsp_bytecount; in qla2x00_prep_ms_fdmi_iocb()
1429 * qla24xx_prep_ms_fdmi_iocb() - Prepare common MS IOCB fields for FDMI query.
1441 struct qla_hw_data *ha = vha->hw; in qla24xx_prep_ms_fdmi_iocb()
1443 ct_pkt = (struct ct_entry_24xx *)ha->ms_iocb; in qla24xx_prep_ms_fdmi_iocb()
1446 ct_pkt->entry_type = CT_IOCB_TYPE; in qla24xx_prep_ms_fdmi_iocb()
1447 ct_pkt->entry_count = 1; in qla24xx_prep_ms_fdmi_iocb()
1448 ct_pkt->nport_handle = cpu_to_le16(vha->mgmt_svr_loop_id); in qla24xx_prep_ms_fdmi_iocb()
1449 ct_pkt->timeout = cpu_to_le16(ha->r_a_tov / 10 * 2); in qla24xx_prep_ms_fdmi_iocb()
1450 ct_pkt->cmd_dsd_count = cpu_to_le16(1); in qla24xx_prep_ms_fdmi_iocb()
1451 ct_pkt->rsp_dsd_count = cpu_to_le16(1); in qla24xx_prep_ms_fdmi_iocb()
1452 ct_pkt->rsp_byte_count = cpu_to_le32(rsp_size); in qla24xx_prep_ms_fdmi_iocb()
1453 ct_pkt->cmd_byte_count = cpu_to_le32(req_size); in qla24xx_prep_ms_fdmi_iocb()
1455 put_unaligned_le64(ha->ct_sns_dma, &ct_pkt->dsd[0].address); in qla24xx_prep_ms_fdmi_iocb()
1456 ct_pkt->dsd[0].length = ct_pkt->cmd_byte_count; in qla24xx_prep_ms_fdmi_iocb()
1458 put_unaligned_le64(ha->ct_sns_dma, &ct_pkt->dsd[1].address); in qla24xx_prep_ms_fdmi_iocb()
1459 ct_pkt->dsd[1].length = ct_pkt->rsp_byte_count; in qla24xx_prep_ms_fdmi_iocb()
1460 ct_pkt->vp_index = vha->vp_idx; in qla24xx_prep_ms_fdmi_iocb()
1468 struct qla_hw_data *ha = vha->hw; in qla2x00_update_ms_fdmi_iocb()
1469 ms_iocb_entry_t *ms_pkt = ha->ms_iocb; in qla2x00_update_ms_fdmi_iocb()
1470 struct ct_entry_24xx *ct_pkt = (struct ct_entry_24xx *)ha->ms_iocb; in qla2x00_update_ms_fdmi_iocb()
1473 ct_pkt->cmd_byte_count = cpu_to_le32(req_size); in qla2x00_update_ms_fdmi_iocb()
1474 ct_pkt->dsd[0].length = ct_pkt->cmd_byte_count; in qla2x00_update_ms_fdmi_iocb()
1476 ms_pkt->req_bytecount = cpu_to_le32(req_size); in qla2x00_update_ms_fdmi_iocb()
1477 ms_pkt->req_dsd.length = ms_pkt->req_bytecount; in qla2x00_update_ms_fdmi_iocb()
1482 * qla2x00_prep_ct_fdmi_req() - Prepare common CT request fields for SNS query.
1495 p->p.req.header.revision = 0x01; in qla2x00_prep_ct_fdmi_req()
1496 p->p.req.header.gs_type = 0xFA; in qla2x00_prep_ct_fdmi_req()
1497 p->p.req.header.gs_subtype = 0x10; in qla2x00_prep_ct_fdmi_req()
1498 p->p.req.command = cpu_to_be16(cmd); in qla2x00_prep_ct_fdmi_req()
1499 p->p.req.max_rsp_size = cpu_to_be16((rsp_size - 16) / 4); in qla2x00_prep_ct_fdmi_req()
1501 return &p->p.req; in qla2x00_prep_ct_fdmi_req()
1512 if (ha->max_supported_speed == 2) { in qla25xx_fdmi_port_speed_capability()
1513 if (ha->min_supported_speed <= 6) in qla25xx_fdmi_port_speed_capability()
1516 if (ha->max_supported_speed == 2 || in qla25xx_fdmi_port_speed_capability()
1517 ha->max_supported_speed == 1) { in qla25xx_fdmi_port_speed_capability()
1518 if (ha->min_supported_speed <= 5) in qla25xx_fdmi_port_speed_capability()
1521 if (ha->max_supported_speed == 2 || in qla25xx_fdmi_port_speed_capability()
1522 ha->max_supported_speed == 1 || in qla25xx_fdmi_port_speed_capability()
1523 ha->max_supported_speed == 0) { in qla25xx_fdmi_port_speed_capability()
1524 if (ha->min_supported_speed <= 4) in qla25xx_fdmi_port_speed_capability()
1527 if (ha->max_supported_speed == 1 || in qla25xx_fdmi_port_speed_capability()
1528 ha->max_supported_speed == 0) { in qla25xx_fdmi_port_speed_capability()
1529 if (ha->min_supported_speed <= 3) in qla25xx_fdmi_port_speed_capability()
1532 if (ha->max_supported_speed == 0) { in qla25xx_fdmi_port_speed_capability()
1533 if (ha->min_supported_speed <= 2) in qla25xx_fdmi_port_speed_capability()
1539 if ((ha->pdev->subsystem_vendor == 0x103C) && in qla25xx_fdmi_port_speed_capability()
1540 ((ha->pdev->subsystem_device == 0x8002) || in qla25xx_fdmi_port_speed_capability()
1541 (ha->pdev->subsystem_device == 0x8086))) { in qla25xx_fdmi_port_speed_capability()
1563 switch (ha->link_data_rate) { in qla25xx_fdmi_port_speed_currently()
1586 * qla2x00_hba_attributes() - perform HBA attributes registration
1598 struct qla_hw_data *ha = vha->hw; in qla2x00_hba_attributes()
1606 eiter->type = cpu_to_be16(FDMI_HBA_NODE_NAME); in qla2x00_hba_attributes()
1607 memcpy(eiter->a.node_name, vha->node_name, sizeof(eiter->a.node_name)); in qla2x00_hba_attributes()
1608 alen = sizeof(eiter->a.node_name); in qla2x00_hba_attributes()
1610 eiter->len = cpu_to_be16(alen); in qla2x00_hba_attributes()
1613 "NODENAME = %016llx.\n", wwn_to_u64(eiter->a.node_name)); in qla2x00_hba_attributes()
1616 eiter->type = cpu_to_be16(FDMI_HBA_MANUFACTURER); in qla2x00_hba_attributes()
1618 eiter->a.manufacturer, sizeof(eiter->a.manufacturer), in qla2x00_hba_attributes()
1622 eiter->len = cpu_to_be16(alen); in qla2x00_hba_attributes()
1625 "MANUFACTURER = %s.\n", eiter->a.manufacturer); in qla2x00_hba_attributes()
1628 eiter->type = cpu_to_be16(FDMI_HBA_SERIAL_NUMBER); in qla2x00_hba_attributes()
1632 eiter->a.serial_num, sizeof(eiter->a.serial_num)); in qla2x00_hba_attributes()
1635 uint32_t sn = ((ha->serial0 & 0x1f) << 16) | in qla2x00_hba_attributes()
1636 (ha->serial2 << 8) | ha->serial1; in qla2x00_hba_attributes()
1638 eiter->a.serial_num, sizeof(eiter->a.serial_num), in qla2x00_hba_attributes()
1643 eiter->len = cpu_to_be16(alen); in qla2x00_hba_attributes()
1646 "SERIAL NUMBER = %s.\n", eiter->a.serial_num); in qla2x00_hba_attributes()
1649 eiter->type = cpu_to_be16(FDMI_HBA_MODEL); in qla2x00_hba_attributes()
1651 eiter->a.model, sizeof(eiter->a.model), in qla2x00_hba_attributes()
1652 "%s", ha->model_number); in qla2x00_hba_attributes()
1655 eiter->len = cpu_to_be16(alen); in qla2x00_hba_attributes()
1658 "MODEL NAME = %s.\n", eiter->a.model); in qla2x00_hba_attributes()
1661 eiter->type = cpu_to_be16(FDMI_HBA_MODEL_DESCRIPTION); in qla2x00_hba_attributes()
1663 eiter->a.model_desc, sizeof(eiter->a.model_desc), in qla2x00_hba_attributes()
1664 "%s", ha->model_desc); in qla2x00_hba_attributes()
1667 eiter->len = cpu_to_be16(alen); in qla2x00_hba_attributes()
1670 "MODEL DESCRIPTION = %s.\n", eiter->a.model_desc); in qla2x00_hba_attributes()
1673 eiter->type = cpu_to_be16(FDMI_HBA_HARDWARE_VERSION); in qla2x00_hba_attributes()
1678 eiter->a.hw_version, sizeof(eiter->a.hw_version)); in qla2x00_hba_attributes()
1682 eiter->a.hw_version, sizeof(eiter->a.hw_version)); in qla2x00_hba_attributes()
1687 eiter->a.hw_version, sizeof(eiter->a.hw_version), in qla2x00_hba_attributes()
1688 "HW:%s", ha->adapter_id); in qla2x00_hba_attributes()
1692 eiter->len = cpu_to_be16(alen); in qla2x00_hba_attributes()
1695 "HARDWARE VERSION = %s.\n", eiter->a.hw_version); in qla2x00_hba_attributes()
1698 eiter->type = cpu_to_be16(FDMI_HBA_DRIVER_VERSION); in qla2x00_hba_attributes()
1700 eiter->a.driver_version, sizeof(eiter->a.driver_version), in qla2x00_hba_attributes()
1704 eiter->len = cpu_to_be16(alen); in qla2x00_hba_attributes()
1707 "DRIVER VERSION = %s.\n", eiter->a.driver_version); in qla2x00_hba_attributes()
1710 eiter->type = cpu_to_be16(FDMI_HBA_OPTION_ROM_VERSION); in qla2x00_hba_attributes()
1712 eiter->a.orom_version, sizeof(eiter->a.orom_version), in qla2x00_hba_attributes()
1713 "%d.%02d", ha->efi_revision[1], ha->efi_revision[0]); in qla2x00_hba_attributes()
1716 eiter->len = cpu_to_be16(alen); in qla2x00_hba_attributes()
1721 eiter->a.orom_version[1], eiter->a.orom_version[0]); in qla2x00_hba_attributes()
1724 eiter->type = cpu_to_be16(FDMI_HBA_FIRMWARE_VERSION); in qla2x00_hba_attributes()
1725 ha->isp_ops->fw_version_str(vha, eiter->a.fw_version, in qla2x00_hba_attributes()
1726 sizeof(eiter->a.fw_version)); in qla2x00_hba_attributes()
1729 eiter->len = cpu_to_be16(alen); in qla2x00_hba_attributes()
1732 "FIRMWARE VERSION = %s.\n", eiter->a.fw_version); in qla2x00_hba_attributes()
1735 eiter->type = cpu_to_be16(FDMI_HBA_OS_NAME_AND_VERSION); in qla2x00_hba_attributes()
1739 eiter->a.os_version, sizeof(eiter->a.os_version), in qla2x00_hba_attributes()
1741 p_sysid->sysname, p_sysid->release, p_sysid->machine); in qla2x00_hba_attributes()
1745 eiter->a.os_version, sizeof(eiter->a.os_version), in qla2x00_hba_attributes()
1747 "Linux", fc_host_system_hostname(vha->host)); in qla2x00_hba_attributes()
1751 eiter->len = cpu_to_be16(alen); in qla2x00_hba_attributes()
1754 "OS VERSION = %s.\n", eiter->a.os_version); in qla2x00_hba_attributes()
1759 eiter->type = cpu_to_be16(FDMI_HBA_MAXIMUM_CT_PAYLOAD_LENGTH); in qla2x00_hba_attributes()
1760 eiter->a.max_ct_len = cpu_to_be32(ha->frame_payload_size >> 2); in qla2x00_hba_attributes()
1762 alen = sizeof(eiter->a.max_ct_len); in qla2x00_hba_attributes()
1764 eiter->len = cpu_to_be16(alen); in qla2x00_hba_attributes()
1767 "CT PAYLOAD LENGTH = 0x%x.\n", be32_to_cpu(eiter->a.max_ct_len)); in qla2x00_hba_attributes()
1770 eiter->type = cpu_to_be16(FDMI_HBA_NODE_SYMBOLIC_NAME); in qla2x00_hba_attributes()
1771 alen = qla2x00_get_sym_node_name(vha, eiter->a.sym_name, in qla2x00_hba_attributes()
1772 sizeof(eiter->a.sym_name)); in qla2x00_hba_attributes()
1775 eiter->len = cpu_to_be16(alen); in qla2x00_hba_attributes()
1778 "SYMBOLIC NAME = %s.\n", eiter->a.sym_name); in qla2x00_hba_attributes()
1781 eiter->type = cpu_to_be16(FDMI_HBA_VENDOR_SPECIFIC_INFO); in qla2x00_hba_attributes()
1782 eiter->a.vendor_specific_info = cpu_to_be32(PCI_VENDOR_ID_QLOGIC); in qla2x00_hba_attributes()
1783 alen = sizeof(eiter->a.vendor_specific_info); in qla2x00_hba_attributes()
1785 eiter->len = cpu_to_be16(alen); in qla2x00_hba_attributes()
1789 be32_to_cpu(eiter->a.vendor_specific_info)); in qla2x00_hba_attributes()
1792 eiter->type = cpu_to_be16(FDMI_HBA_NUM_PORTS); in qla2x00_hba_attributes()
1793 eiter->a.num_ports = cpu_to_be32(1); in qla2x00_hba_attributes()
1794 alen = sizeof(eiter->a.num_ports); in qla2x00_hba_attributes()
1796 eiter->len = cpu_to_be16(alen); in qla2x00_hba_attributes()
1799 "PORT COUNT = %x.\n", be32_to_cpu(eiter->a.num_ports)); in qla2x00_hba_attributes()
1802 eiter->type = cpu_to_be16(FDMI_HBA_FABRIC_NAME); in qla2x00_hba_attributes()
1803 memcpy(eiter->a.fabric_name, vha->fabric_node_name, in qla2x00_hba_attributes()
1804 sizeof(eiter->a.fabric_name)); in qla2x00_hba_attributes()
1805 alen = sizeof(eiter->a.fabric_name); in qla2x00_hba_attributes()
1807 eiter->len = cpu_to_be16(alen); in qla2x00_hba_attributes()
1810 "FABRIC NAME = %016llx.\n", wwn_to_u64(eiter->a.fabric_name)); in qla2x00_hba_attributes()
1813 eiter->type = cpu_to_be16(FDMI_HBA_BOOT_BIOS_NAME); in qla2x00_hba_attributes()
1815 eiter->a.bios_name, sizeof(eiter->a.bios_name), in qla2x00_hba_attributes()
1816 "BIOS %d.%02d", ha->bios_revision[1], ha->bios_revision[0]); in qla2x00_hba_attributes()
1819 eiter->len = cpu_to_be16(alen); in qla2x00_hba_attributes()
1822 "BIOS NAME = %s\n", eiter->a.bios_name); in qla2x00_hba_attributes()
1825 eiter->type = cpu_to_be16(FDMI_HBA_VENDOR_IDENTIFIER); in qla2x00_hba_attributes()
1827 eiter->a.vendor_identifier, sizeof(eiter->a.vendor_identifier), in qla2x00_hba_attributes()
1831 eiter->len = cpu_to_be16(alen); in qla2x00_hba_attributes()
1834 "VENDOR IDENTIFIER = %s.\n", eiter->a.vendor_identifier); in qla2x00_hba_attributes()
1840 * qla2x00_port_attributes() - perform Port attributes registration
1852 struct qla_hw_data *ha = vha->hw; in qla2x00_port_attributes()
1855 p_sysid->nodename : fc_host_system_hostname(vha->host); in qla2x00_port_attributes()
1862 eiter->type = cpu_to_be16(FDMI_PORT_FC4_TYPES); in qla2x00_port_attributes()
1863 eiter->a.fc4_types[0] = 0x00; in qla2x00_port_attributes()
1864 eiter->a.fc4_types[1] = 0x00; in qla2x00_port_attributes()
1865 eiter->a.fc4_types[2] = 0x01; in qla2x00_port_attributes()
1866 eiter->a.fc4_types[3] = 0x00; in qla2x00_port_attributes()
1867 alen = sizeof(eiter->a.fc4_types); in qla2x00_port_attributes()
1869 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
1872 "FC4 TYPES = %016llx.\n", *(uint64_t *)eiter->a.fc4_types); in qla2x00_port_attributes()
1873 if (vha->flags.nvme_enabled) { in qla2x00_port_attributes()
1874 eiter->a.fc4_types[6] = 1; /* NVMe type 28h */ in qla2x00_port_attributes()
1877 eiter->a.fc4_types[6]); in qla2x00_port_attributes()
1881 eiter->type = cpu_to_be16(FDMI_PORT_SUPPORT_SPEED); in qla2x00_port_attributes()
1882 eiter->a.sup_speed = cpu_to_be32( in qla2x00_port_attributes()
1884 alen = sizeof(eiter->a.sup_speed); in qla2x00_port_attributes()
1886 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
1889 "SUPPORTED SPEED = %x.\n", be32_to_cpu(eiter->a.sup_speed)); in qla2x00_port_attributes()
1892 eiter->type = cpu_to_be16(FDMI_PORT_CURRENT_SPEED); in qla2x00_port_attributes()
1893 eiter->a.cur_speed = cpu_to_be32( in qla2x00_port_attributes()
1895 alen = sizeof(eiter->a.cur_speed); in qla2x00_port_attributes()
1897 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
1900 "CURRENT SPEED = %x.\n", be32_to_cpu(eiter->a.cur_speed)); in qla2x00_port_attributes()
1903 eiter->type = cpu_to_be16(FDMI_PORT_MAX_FRAME_SIZE); in qla2x00_port_attributes()
1904 eiter->a.max_frame_size = cpu_to_be32(ha->frame_payload_size); in qla2x00_port_attributes()
1905 alen = sizeof(eiter->a.max_frame_size); in qla2x00_port_attributes()
1907 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
1910 "MAX FRAME SIZE = %x.\n", be32_to_cpu(eiter->a.max_frame_size)); in qla2x00_port_attributes()
1913 eiter->type = cpu_to_be16(FDMI_PORT_OS_DEVICE_NAME); in qla2x00_port_attributes()
1915 eiter->a.os_dev_name, sizeof(eiter->a.os_dev_name), in qla2x00_port_attributes()
1916 "%s:host%lu", QLA2XXX_DRIVER_NAME, vha->host_no); in qla2x00_port_attributes()
1919 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
1922 "OS DEVICE NAME = %s.\n", eiter->a.os_dev_name); in qla2x00_port_attributes()
1925 eiter->type = cpu_to_be16(FDMI_PORT_HOST_NAME); in qla2x00_port_attributes()
1927 hostname = "Linux-default"; in qla2x00_port_attributes()
1929 eiter->a.host_name, sizeof(eiter->a.host_name), in qla2x00_port_attributes()
1933 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
1936 "HOSTNAME = %s.\n", eiter->a.host_name); in qla2x00_port_attributes()
1943 eiter->type = cpu_to_be16(FDMI_PORT_NODE_NAME); in qla2x00_port_attributes()
1944 memcpy(eiter->a.node_name, vha->node_name, sizeof(eiter->a.node_name)); in qla2x00_port_attributes()
1945 alen = sizeof(eiter->a.node_name); in qla2x00_port_attributes()
1947 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
1950 "NODENAME = %016llx.\n", wwn_to_u64(eiter->a.node_name)); in qla2x00_port_attributes()
1954 eiter->type = cpu_to_be16(FDMI_PORT_NAME); in qla2x00_port_attributes()
1955 memcpy(eiter->a.port_name, vha->port_name, sizeof(eiter->a.port_name)); in qla2x00_port_attributes()
1956 alen = sizeof(eiter->a.port_name); in qla2x00_port_attributes()
1958 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
1961 "PORTNAME = %016llx.\n", wwn_to_u64(eiter->a.port_name)); in qla2x00_port_attributes()
1965 eiter->type = cpu_to_be16(FDMI_PORT_SYM_NAME); in qla2x00_port_attributes()
1966 alen = qla2x00_get_sym_node_name(vha, eiter->a.port_sym_name, in qla2x00_port_attributes()
1967 sizeof(eiter->a.port_sym_name)); in qla2x00_port_attributes()
1970 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
1973 "PORT SYMBOLIC NAME = %s\n", eiter->a.port_sym_name); in qla2x00_port_attributes()
1977 eiter->type = cpu_to_be16(FDMI_PORT_TYPE); in qla2x00_port_attributes()
1978 eiter->a.port_type = cpu_to_be32(NS_NX_PORT_TYPE); in qla2x00_port_attributes()
1979 alen = sizeof(eiter->a.port_type); in qla2x00_port_attributes()
1981 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
1984 "PORT TYPE = %x.\n", be32_to_cpu(eiter->a.port_type)); in qla2x00_port_attributes()
1988 eiter->type = cpu_to_be16(FDMI_PORT_SUPP_COS); in qla2x00_port_attributes()
1989 eiter->a.port_supported_cos = cpu_to_be32(FC_CLASS_3); in qla2x00_port_attributes()
1990 alen = sizeof(eiter->a.port_supported_cos); in qla2x00_port_attributes()
1992 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
1995 "SUPPORTED COS = %08x\n", be32_to_cpu(eiter->a.port_supported_cos)); in qla2x00_port_attributes()
1999 eiter->type = cpu_to_be16(FDMI_PORT_FABRIC_NAME); in qla2x00_port_attributes()
2000 memcpy(eiter->a.fabric_name, vha->fabric_node_name, in qla2x00_port_attributes()
2001 sizeof(eiter->a.fabric_name)); in qla2x00_port_attributes()
2002 alen = sizeof(eiter->a.fabric_name); in qla2x00_port_attributes()
2004 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
2007 "FABRIC NAME = %016llx.\n", wwn_to_u64(eiter->a.fabric_name)); in qla2x00_port_attributes()
2011 eiter->type = cpu_to_be16(FDMI_PORT_FC4_TYPE); in qla2x00_port_attributes()
2012 eiter->a.port_fc4_type[0] = 0x00; in qla2x00_port_attributes()
2013 eiter->a.port_fc4_type[1] = 0x00; in qla2x00_port_attributes()
2014 eiter->a.port_fc4_type[2] = 0x01; in qla2x00_port_attributes()
2015 eiter->a.port_fc4_type[3] = 0x00; in qla2x00_port_attributes()
2016 alen = sizeof(eiter->a.port_fc4_type); in qla2x00_port_attributes()
2018 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
2022 *(uint64_t *)eiter->a.port_fc4_type); in qla2x00_port_attributes()
2026 eiter->type = cpu_to_be16(FDMI_PORT_STATE); in qla2x00_port_attributes()
2027 eiter->a.port_state = cpu_to_be32(2); in qla2x00_port_attributes()
2028 alen = sizeof(eiter->a.port_state); in qla2x00_port_attributes()
2030 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
2033 "PORT_STATE = %x.\n", be32_to_cpu(eiter->a.port_state)); in qla2x00_port_attributes()
2037 eiter->type = cpu_to_be16(FDMI_PORT_COUNT); in qla2x00_port_attributes()
2038 eiter->a.num_ports = cpu_to_be32(1); in qla2x00_port_attributes()
2039 alen = sizeof(eiter->a.num_ports); in qla2x00_port_attributes()
2041 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
2044 "PORT COUNT = %x.\n", be32_to_cpu(eiter->a.num_ports)); in qla2x00_port_attributes()
2048 eiter->type = cpu_to_be16(FDMI_PORT_IDENTIFIER); in qla2x00_port_attributes()
2049 eiter->a.port_id = cpu_to_be32(vha->d_id.b24); in qla2x00_port_attributes()
2050 alen = sizeof(eiter->a.port_id); in qla2x00_port_attributes()
2052 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
2055 "PORT ID = %x.\n", be32_to_cpu(eiter->a.port_id)); in qla2x00_port_attributes()
2062 eiter->type = cpu_to_be16(FDMI_SMARTSAN_SERVICE); in qla2x00_port_attributes()
2064 eiter->a.smartsan_service, sizeof(eiter->a.smartsan_service), in qla2x00_port_attributes()
2068 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
2071 "SMARTSAN SERVICE CATEGORY = %s.\n", eiter->a.smartsan_service); in qla2x00_port_attributes()
2075 eiter->type = cpu_to_be16(FDMI_SMARTSAN_GUID); in qla2x00_port_attributes()
2076 memcpy(eiter->a.smartsan_guid, vha->node_name, WWN_SIZE); in qla2x00_port_attributes()
2077 memcpy(eiter->a.smartsan_guid + WWN_SIZE, vha->port_name, WWN_SIZE); in qla2x00_port_attributes()
2078 alen = sizeof(eiter->a.smartsan_guid); in qla2x00_port_attributes()
2080 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
2083 "Smart SAN GUID = %016llx-%016llx\n", in qla2x00_port_attributes()
2084 wwn_to_u64(eiter->a.smartsan_guid), in qla2x00_port_attributes()
2085 wwn_to_u64(eiter->a.smartsan_guid + WWN_SIZE)); in qla2x00_port_attributes()
2089 eiter->type = cpu_to_be16(FDMI_SMARTSAN_VERSION); in qla2x00_port_attributes()
2091 eiter->a.smartsan_version, sizeof(eiter->a.smartsan_version), in qla2x00_port_attributes()
2095 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
2098 "SMARTSAN VERSION = %s\n", eiter->a.smartsan_version); in qla2x00_port_attributes()
2102 eiter->type = cpu_to_be16(FDMI_SMARTSAN_PROD_NAME); in qla2x00_port_attributes()
2103 alen = scnprintf(eiter->a.smartsan_prod_name, in qla2x00_port_attributes()
2104 sizeof(eiter->a.smartsan_prod_name), in qla2x00_port_attributes()
2105 "ISP%04x", ha->pdev->device); in qla2x00_port_attributes()
2108 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
2111 "SMARTSAN PRODUCT NAME = %s\n", eiter->a.smartsan_prod_name); in qla2x00_port_attributes()
2115 eiter->type = cpu_to_be16(FDMI_SMARTSAN_PORT_INFO); in qla2x00_port_attributes()
2116 eiter->a.smartsan_port_info = cpu_to_be32(vha->vp_idx ? 2 : 1); in qla2x00_port_attributes()
2117 alen = sizeof(eiter->a.smartsan_port_info); in qla2x00_port_attributes()
2119 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
2122 "SMARTSAN PORT INFO = %x\n", eiter->a.smartsan_port_info); in qla2x00_port_attributes()
2126 eiter->type = cpu_to_be16(FDMI_SMARTSAN_SECURITY_SUPPORT); in qla2x00_port_attributes()
2127 eiter->a.smartsan_security_support = cpu_to_be32(1); in qla2x00_port_attributes()
2128 alen = sizeof(eiter->a.smartsan_security_support); in qla2x00_port_attributes()
2130 eiter->len = cpu_to_be16(alen); in qla2x00_port_attributes()
2134 be32_to_cpu(eiter->a.smartsan_security_support)); in qla2x00_port_attributes()
2141 * qla2x00_fdmi_rhba() - perform RHBA FDMI registration
2150 struct qla_hw_data *ha = vha->hw; in qla2x00_fdmi_rhba()
2152 unsigned int rval, count; in qla2x00_fdmi_rhba() local
2158 count = callopt != CALLOPT_FDMI1 ? in qla2x00_fdmi_rhba()
2164 "RHBA (callopt=%x count=%u size=%lu).\n", callopt, count, size); in qla2x00_fdmi_rhba()
2167 ms_pkt = ha->isp_ops->prep_ms_fdmi_iocb(vha, 0, size); in qla2x00_fdmi_rhba()
2170 ct_req = qla2x00_prep_ct_fdmi_req(ha->ct_sns, RHBA_CMD, size); in qla2x00_fdmi_rhba()
2171 ct_rsp = &ha->ct_sns->p.rsp; in qla2x00_fdmi_rhba()
2174 memcpy(ct_req->req.rhba.hba_identifier, vha->port_name, in qla2x00_fdmi_rhba()
2175 sizeof(ct_req->req.rhba.hba_identifier)); in qla2x00_fdmi_rhba()
2176 size += sizeof(ct_req->req.rhba.hba_identifier); in qla2x00_fdmi_rhba()
2178 ct_req->req.rhba.entry_count = cpu_to_be32(1); in qla2x00_fdmi_rhba()
2179 size += sizeof(ct_req->req.rhba.entry_count); in qla2x00_fdmi_rhba()
2181 memcpy(ct_req->req.rhba.port_name, vha->port_name, in qla2x00_fdmi_rhba()
2182 sizeof(ct_req->req.rhba.port_name)); in qla2x00_fdmi_rhba()
2183 size += sizeof(ct_req->req.rhba.port_name); in qla2x00_fdmi_rhba()
2185 /* Attribute count */ in qla2x00_fdmi_rhba()
2186 ct_req->req.rhba.attrs.count = cpu_to_be32(count); in qla2x00_fdmi_rhba()
2187 size += sizeof(ct_req->req.rhba.attrs.count); in qla2x00_fdmi_rhba()
2190 entries = &ct_req->req.rhba.attrs.entry; in qla2x00_fdmi_rhba()
2199 wwn_to_u64(ct_req->req.rhba.hba_identifier), in qla2x00_fdmi_rhba()
2200 wwn_to_u64(ct_req->req.rhba.port_name)); in qla2x00_fdmi_rhba()
2206 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, in qla2x00_fdmi_rhba()
2207 sizeof(*ha->ms_iocb)); in qla2x00_fdmi_rhba()
2216 if (ct_rsp->header.reason_code == CT_REASON_CANNOT_PERFORM && in qla2x00_fdmi_rhba()
2217 ct_rsp->header.explanation_code == in qla2x00_fdmi_rhba()
2226 ct_rsp->header.reason_code, in qla2x00_fdmi_rhba()
2227 ct_rsp->header.explanation_code); in qla2x00_fdmi_rhba()
2240 struct qla_hw_data *ha = vha->hw; in qla2x00_fdmi_dhba()
2246 ms_pkt = ha->isp_ops->prep_ms_fdmi_iocb(vha, DHBA_REQ_SIZE, in qla2x00_fdmi_dhba()
2249 ct_req = qla2x00_prep_ct_fdmi_req(ha->ct_sns, DHBA_CMD, DHBA_RSP_SIZE); in qla2x00_fdmi_dhba()
2250 ct_rsp = &ha->ct_sns->p.rsp; in qla2x00_fdmi_dhba()
2251 /* Prepare FDMI command arguments -- portname. */ in qla2x00_fdmi_dhba()
2252 memcpy(ct_req->req.dhba.port_name, vha->port_name, WWN_SIZE); in qla2x00_fdmi_dhba()
2254 "DHBA portname = %8phN.\n", ct_req->req.dhba.port_name); in qla2x00_fdmi_dhba()
2256 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, in qla2x00_fdmi_dhba()
2273 * qla2x00_fdmi_rprt() - perform RPRT registration
2283 struct scsi_qla_host *base_vha = pci_get_drvdata(vha->hw->pdev); in qla2x00_fdmi_rprt()
2284 struct qla_hw_data *ha = vha->hw; in qla2x00_fdmi_rprt()
2286 uint rval, count; in qla2x00_fdmi_rprt() local
2291 count = callopt == CALLOPT_FDMI2_SMARTSAN && ql2xsmartsan ? in qla2x00_fdmi_rprt()
2298 "RPRT (callopt=%x count=%u size=%lu).\n", callopt, count, size); in qla2x00_fdmi_rprt()
2300 ms_pkt = ha->isp_ops->prep_ms_fdmi_iocb(vha, 0, size); in qla2x00_fdmi_rprt()
2302 ct_req = qla2x00_prep_ct_fdmi_req(ha->ct_sns, RPRT_CMD, size); in qla2x00_fdmi_rprt()
2303 ct_rsp = &ha->ct_sns->p.rsp; in qla2x00_fdmi_rprt()
2305 memcpy(ct_req->req.rprt.hba_identifier, base_vha->port_name, in qla2x00_fdmi_rprt()
2306 sizeof(ct_req->req.rprt.hba_identifier)); in qla2x00_fdmi_rprt()
2307 size += sizeof(ct_req->req.rprt.hba_identifier); in qla2x00_fdmi_rprt()
2308 memcpy(ct_req->req.rprt.port_name, vha->port_name, in qla2x00_fdmi_rprt()
2309 sizeof(ct_req->req.rprt.port_name)); in qla2x00_fdmi_rprt()
2310 size += sizeof(ct_req->req.rprt.port_name); in qla2x00_fdmi_rprt()
2311 /* Attribute count */ in qla2x00_fdmi_rprt()
2312 ct_req->req.rprt.attrs.count = cpu_to_be32(count); in qla2x00_fdmi_rprt()
2313 size += sizeof(ct_req->req.rprt.attrs.count); in qla2x00_fdmi_rprt()
2315 entries = ct_req->req.rprt.attrs.entry; in qla2x00_fdmi_rprt()
2321 wwn_to_u64(ct_req->req.rprt.port_name), in qla2x00_fdmi_rprt()
2322 wwn_to_u64(ct_req->req.rprt.port_name)); in qla2x00_fdmi_rprt()
2326 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, in qla2x00_fdmi_rprt()
2327 sizeof(*ha->ms_iocb)); in qla2x00_fdmi_rprt()
2335 if (ct_rsp->header.reason_code == CT_REASON_CANNOT_PERFORM && in qla2x00_fdmi_rprt()
2336 ct_rsp->header.explanation_code == in qla2x00_fdmi_rprt()
2345 ct_rsp->header.reason_code, in qla2x00_fdmi_rprt()
2346 ct_rsp->header.explanation_code); in qla2x00_fdmi_rprt()
2354 * qla2x00_fdmi_rpa() - perform RPA registration
2363 struct qla_hw_data *ha = vha->hw; in qla2x00_fdmi_rpa()
2365 uint rval, count; in qla2x00_fdmi_rpa() local
2371 count = in qla2x00_fdmi_rpa()
2382 "RPA (callopt=%x count=%u size=%lu).\n", callopt, count, size); in qla2x00_fdmi_rpa()
2385 ms_pkt = ha->isp_ops->prep_ms_fdmi_iocb(vha, 0, size); in qla2x00_fdmi_rpa()
2388 ct_req = qla2x00_prep_ct_fdmi_req(ha->ct_sns, RPA_CMD, size); in qla2x00_fdmi_rpa()
2389 ct_rsp = &ha->ct_sns->p.rsp; in qla2x00_fdmi_rpa()
2392 memcpy(ct_req->req.rpa.port_name, vha->port_name, in qla2x00_fdmi_rpa()
2393 sizeof(ct_req->req.rpa.port_name)); in qla2x00_fdmi_rpa()
2394 size += sizeof(ct_req->req.rpa.port_name); in qla2x00_fdmi_rpa()
2396 /* Attribute count */ in qla2x00_fdmi_rpa()
2397 ct_req->req.rpa.attrs.count = cpu_to_be32(count); in qla2x00_fdmi_rpa()
2398 size += sizeof(ct_req->req.rpa.attrs.count); in qla2x00_fdmi_rpa()
2401 entries = ct_req->req.rpa.attrs.entry; in qla2x00_fdmi_rpa()
2409 "RPA %016llx.\n", wwn_to_u64(ct_req->req.rpa.port_name)); in qla2x00_fdmi_rpa()
2415 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, in qla2x00_fdmi_rpa()
2416 sizeof(*ha->ms_iocb)); in qla2x00_fdmi_rpa()
2425 if (ct_rsp->header.reason_code == CT_REASON_CANNOT_PERFORM && in qla2x00_fdmi_rpa()
2426 ct_rsp->header.explanation_code == in qla2x00_fdmi_rpa()
2435 ct_rsp->header.reason_code, in qla2x00_fdmi_rpa()
2436 ct_rsp->header.explanation_code); in qla2x00_fdmi_rpa()
2445 * qla2x00_fdmi_register() -
2454 struct qla_hw_data *ha = vha->hw; in qla2x00_fdmi_register()
2465 if (vha->vp_idx) { in qla2x00_fdmi_register()
2521 * qla2x00_gfpn_id() - SNS Get Fabric Port Name (GFPN_ID) query.
2532 struct qla_hw_data *ha = vha->hw; in qla2x00_gfpn_id()
2541 arg.iocb = ha->ms_iocb; in qla2x00_gfpn_id()
2542 arg.req_dma = ha->ct_sns_dma; in qla2x00_gfpn_id()
2543 arg.rsp_dma = ha->ct_sns_dma; in qla2x00_gfpn_id()
2548 for (i = 0; i < ha->max_fibre_devices; i++) { in qla2x00_gfpn_id()
2551 ms_pkt = ha->isp_ops->prep_ms_iocb(vha, &arg); in qla2x00_gfpn_id()
2554 ct_req = qla2x00_prep_ct_req(ha->ct_sns, GFPN_ID_CMD, in qla2x00_gfpn_id()
2556 ct_rsp = &ha->ct_sns->p.rsp; in qla2x00_gfpn_id()
2558 /* Prepare CT arguments -- port_id */ in qla2x00_gfpn_id()
2559 ct_req->req.port_id.port_id = port_id_to_be_id(list[i].d_id); in qla2x00_gfpn_id()
2562 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, in qla2x00_gfpn_id()
2576 ct_rsp->rsp.gfpn_id.port_name, WWN_SIZE); in qla2x00_gfpn_id()
2594 p->p.req.header.revision = 0x01; in qla24xx_prep_ct_fm_req()
2595 p->p.req.header.gs_type = 0xFA; in qla24xx_prep_ct_fm_req()
2596 p->p.req.header.gs_subtype = 0x01; in qla24xx_prep_ct_fm_req()
2597 p->p.req.command = cpu_to_be16(cmd); in qla24xx_prep_ct_fm_req()
2598 p->p.req.max_rsp_size = cpu_to_be16((rsp_size - 16) / 4); in qla24xx_prep_ct_fm_req()
2600 return &p->p.req; in qla24xx_prep_ct_fm_req()
2629 * qla2x00_gff_id() - SNS Get FC-4 Features (GFF_ID) query.
2644 struct qla_hw_data *ha = vha->hw; in qla2x00_gff_id()
2648 for (i = 0; i < ha->max_fibre_devices; i++) { in qla2x00_gff_id()
2657 arg.iocb = ha->ms_iocb; in qla2x00_gff_id()
2658 arg.req_dma = ha->ct_sns_dma; in qla2x00_gff_id()
2659 arg.rsp_dma = ha->ct_sns_dma; in qla2x00_gff_id()
2665 ms_pkt = ha->isp_ops->prep_ms_iocb(vha, &arg); in qla2x00_gff_id()
2668 ct_req = qla2x00_prep_ct_req(ha->ct_sns, GFF_ID_CMD, in qla2x00_gff_id()
2670 ct_rsp = &ha->ct_sns->p.rsp; in qla2x00_gff_id()
2672 /* Prepare CT arguments -- port_id */ in qla2x00_gff_id()
2673 ct_req->req.port_id.port_id = port_id_to_be_id(list[i].d_id); in qla2x00_gff_id()
2676 rval = qla2x00_issue_iocb(vha, ha->ms_iocb, ha->ms_iocb_dma, in qla2x00_gff_id()
2688 ct_rsp->rsp.gff_id.fc4_features[GFF_FCP_SCSI_OFFSET]; in qla2x00_gff_id()
2697 ct_rsp->rsp.gff_id.fc4_features[GFF_NVME_OFFSET]; in qla2x00_gff_id()
2720 e->u.fcport.fcport = fcport; in qla24xx_post_gpsc_work()
2726 struct fc_port *fcport = ea->fcport; in qla24xx_handle_gpsc_event()
2730 __func__, fcport->port_name, fcport->disc_state, in qla24xx_handle_gpsc_event()
2731 fcport->fw_login_state, ea->rc, ea->sp->gen2, fcport->login_gen, in qla24xx_handle_gpsc_event()
2732 ea->sp->gen2, fcport->rscn_gen|ea->sp->gen1, fcport->loop_id); in qla24xx_handle_gpsc_event()
2734 if (fcport->disc_state == DSC_DELETE_PEND) in qla24xx_handle_gpsc_event()
2737 /* We will figure-out what happen after AUTH completes */ in qla24xx_handle_gpsc_event()
2738 if (fcport->disc_state == DSC_LOGIN_AUTH_PEND) in qla24xx_handle_gpsc_event()
2741 if (ea->sp->gen2 != fcport->login_gen) { in qla24xx_handle_gpsc_event()
2745 __func__, fcport->port_name); in qla24xx_handle_gpsc_event()
2747 } else if (ea->sp->gen1 != fcport->rscn_gen) { in qla24xx_handle_gpsc_event()
2756 struct scsi_qla_host *vha = sp->vha; in qla24xx_async_gpsc_sp_done()
2757 struct qla_hw_data *ha = vha->hw; in qla24xx_async_gpsc_sp_done()
2758 fc_port_t *fcport = sp->fcport; in qla24xx_async_gpsc_sp_done()
2762 ct_rsp = &fcport->ct_desc.ct_sns->p.rsp; in qla24xx_async_gpsc_sp_done()
2765 "Async done-%s res %x, WWPN %8phC \n", in qla24xx_async_gpsc_sp_done()
2766 sp->name, res, fcport->port_name); in qla24xx_async_gpsc_sp_done()
2768 fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE); in qla24xx_async_gpsc_sp_done()
2777 if ((ct_rsp->header.reason_code == in qla24xx_async_gpsc_sp_done()
2779 (ct_rsp->header.reason_code == in qla24xx_async_gpsc_sp_done()
2783 ha->flags.gpsc_supported = 0; in qla24xx_async_gpsc_sp_done()
2787 fcport->fp_speed = qla2x00_port_speed_capability( in qla24xx_async_gpsc_sp_done()
2788 be16_to_cpu(ct_rsp->rsp.gpsc.speed)); in qla24xx_async_gpsc_sp_done()
2791 "Async-%s OUT WWPN %8phC speeds=%04x speed=%04x.\n", in qla24xx_async_gpsc_sp_done()
2792 sp->name, fcport->fabric_port_name, in qla24xx_async_gpsc_sp_done()
2793 be16_to_cpu(ct_rsp->rsp.gpsc.speeds), in qla24xx_async_gpsc_sp_done()
2794 be16_to_cpu(ct_rsp->rsp.gpsc.speed)); in qla24xx_async_gpsc_sp_done()
2804 kref_put(&sp->cmd_kref, qla2x00_sp_release); in qla24xx_async_gpsc_sp_done()
2813 if (!vha->flags.online || (fcport->flags & FCF_ASYNC_SENT)) in qla24xx_async_gpsc()
2821 sp->type = SRB_CT_PTHRU_CMD; in qla24xx_async_gpsc()
2822 sp->name = "gpsc"; in qla24xx_async_gpsc()
2823 sp->gen1 = fcport->rscn_gen; in qla24xx_async_gpsc()
2824 sp->gen2 = fcport->login_gen; in qla24xx_async_gpsc()
2829 ct_req = qla24xx_prep_ct_fm_req(fcport->ct_desc.ct_sns, GPSC_CMD, in qla24xx_async_gpsc()
2833 memcpy(ct_req->req.gpsc.port_name, fcport->fabric_port_name, in qla24xx_async_gpsc()
2836 sp->u.iocb_cmd.u.ctarg.req = fcport->ct_desc.ct_sns; in qla24xx_async_gpsc()
2837 sp->u.iocb_cmd.u.ctarg.req_dma = fcport->ct_desc.ct_sns_dma; in qla24xx_async_gpsc()
2838 sp->u.iocb_cmd.u.ctarg.rsp = fcport->ct_desc.ct_sns; in qla24xx_async_gpsc()
2839 sp->u.iocb_cmd.u.ctarg.rsp_dma = fcport->ct_desc.ct_sns_dma; in qla24xx_async_gpsc()
2840 sp->u.iocb_cmd.u.ctarg.req_size = GPSC_REQ_SIZE; in qla24xx_async_gpsc()
2841 sp->u.iocb_cmd.u.ctarg.rsp_size = GPSC_RSP_SIZE; in qla24xx_async_gpsc()
2842 sp->u.iocb_cmd.u.ctarg.nport_handle = vha->mgmt_svr_loop_id; in qla24xx_async_gpsc()
2845 "Async-%s %8phC hdl=%x loopid=%x portid=%02x%02x%02x.\n", in qla24xx_async_gpsc()
2846 sp->name, fcport->port_name, sp->handle, in qla24xx_async_gpsc()
2847 fcport->loop_id, fcport->d_id.b.domain, in qla24xx_async_gpsc()
2848 fcport->d_id.b.area, fcport->d_id.b.al_pa); in qla24xx_async_gpsc()
2857 kref_put(&sp->cmd_kref, qla2x00_sp_release); in qla24xx_async_gpsc()
2864 struct srb_iocb *c = &sp->u.iocb_cmd; in qla24xx_sp_unmap()
2866 switch (sp->type) { in qla24xx_sp_unmap()
2868 qla2x00_els_dcmd2_free(vha, &c->u.els_plogi); in qla24xx_sp_unmap()
2872 if (sp->u.iocb_cmd.u.ctarg.req) { in qla24xx_sp_unmap()
2873 dma_free_coherent(&vha->hw->pdev->dev, in qla24xx_sp_unmap()
2874 sp->u.iocb_cmd.u.ctarg.req_allocated_size, in qla24xx_sp_unmap()
2875 sp->u.iocb_cmd.u.ctarg.req, in qla24xx_sp_unmap()
2876 sp->u.iocb_cmd.u.ctarg.req_dma); in qla24xx_sp_unmap()
2877 sp->u.iocb_cmd.u.ctarg.req = NULL; in qla24xx_sp_unmap()
2880 if (sp->u.iocb_cmd.u.ctarg.rsp) { in qla24xx_sp_unmap()
2881 dma_free_coherent(&vha->hw->pdev->dev, in qla24xx_sp_unmap()
2882 sp->u.iocb_cmd.u.ctarg.rsp_allocated_size, in qla24xx_sp_unmap()
2883 sp->u.iocb_cmd.u.ctarg.rsp, in qla24xx_sp_unmap()
2884 sp->u.iocb_cmd.u.ctarg.rsp_dma); in qla24xx_sp_unmap()
2885 sp->u.iocb_cmd.u.ctarg.rsp = NULL; in qla24xx_sp_unmap()
2891 kref_put(&sp->cmd_kref, qla2x00_sp_release); in qla24xx_sp_unmap()
2896 struct scsi_qla_host *vha = sp->vha; in qla24xx_async_gffid_sp_done()
2897 fc_port_t *fcport = sp->fcport; in qla24xx_async_gffid_sp_done()
2903 "Async done-%s res %x ID %x. %8phC\n", in qla24xx_async_gffid_sp_done()
2904 sp->name, res, fcport->d_id.b24, fcport->port_name); in qla24xx_async_gffid_sp_done()
2906 ct_rsp = sp->u.iocb_cmd.u.ctarg.rsp; in qla24xx_async_gffid_sp_done()
2907 fc4_scsi_feat = ct_rsp->rsp.gff_id.fc4_features[GFF_FCP_SCSI_OFFSET]; in qla24xx_async_gffid_sp_done()
2908 fc4_nvme_feat = ct_rsp->rsp.gff_id.fc4_features[GFF_NVME_OFFSET]; in qla24xx_async_gffid_sp_done()
2909 sp->rc = res; in qla24xx_async_gffid_sp_done()
2912 * FC-GS-7, 5.2.3.12 FC-4 Features - format in qla24xx_async_gffid_sp_done()
2913 * The format of the FC-4 Features object, as defined by the FC-4, in qla24xx_async_gffid_sp_done()
2914 * Shall be an array of 4-bit values, one for each type code value in qla24xx_async_gffid_sp_done()
2919 fcport->fc4_type = FS_FC4TYPE_FCP; in qla24xx_async_gffid_sp_done()
2920 fcport->fc4_features = fc4_scsi_feat & 0xf; in qla24xx_async_gffid_sp_done()
2925 fcport->fc4_type |= FS_FC4TYPE_NVME; in qla24xx_async_gffid_sp_done()
2926 fcport->fc4_features = fc4_nvme_feat & 0xf; in qla24xx_async_gffid_sp_done()
2930 if (sp->flags & SRB_WAKEUP_ON_COMP) { in qla24xx_async_gffid_sp_done()
2931 complete(sp->comp); in qla24xx_async_gffid_sp_done()
2933 if (sp->u.iocb_cmd.u.ctarg.req) { in qla24xx_async_gffid_sp_done()
2934 dma_free_coherent(&vha->hw->pdev->dev, in qla24xx_async_gffid_sp_done()
2935 sp->u.iocb_cmd.u.ctarg.req_allocated_size, in qla24xx_async_gffid_sp_done()
2936 sp->u.iocb_cmd.u.ctarg.req, in qla24xx_async_gffid_sp_done()
2937 sp->u.iocb_cmd.u.ctarg.req_dma); in qla24xx_async_gffid_sp_done()
2938 sp->u.iocb_cmd.u.ctarg.req = NULL; in qla24xx_async_gffid_sp_done()
2941 if (sp->u.iocb_cmd.u.ctarg.rsp) { in qla24xx_async_gffid_sp_done()
2942 dma_free_coherent(&vha->hw->pdev->dev, in qla24xx_async_gffid_sp_done()
2943 sp->u.iocb_cmd.u.ctarg.rsp_allocated_size, in qla24xx_async_gffid_sp_done()
2944 sp->u.iocb_cmd.u.ctarg.rsp, in qla24xx_async_gffid_sp_done()
2945 sp->u.iocb_cmd.u.ctarg.rsp_dma); in qla24xx_async_gffid_sp_done()
2946 sp->u.iocb_cmd.u.ctarg.rsp = NULL; in qla24xx_async_gffid_sp_done()
2950 kref_put(&sp->cmd_kref, qla2x00_sp_release); in qla24xx_async_gffid_sp_done()
2965 if (!vha->flags.online || !wait) in qla24xx_async_gffid()
2973 sp->type = SRB_CT_PTHRU_CMD; in qla24xx_async_gffid()
2974 sp->name = "gffid"; in qla24xx_async_gffid()
2975 sp->gen1 = fcport->rscn_gen; in qla24xx_async_gffid()
2976 sp->gen2 = fcport->login_gen; in qla24xx_async_gffid()
2979 sp->comp = &comp; in qla24xx_async_gffid()
2980 sp->u.iocb_cmd.timeout = qla2x00_els_dcmd2_iocb_timeout; in qla24xx_async_gffid()
2983 sp->flags = SRB_WAKEUP_ON_COMP; in qla24xx_async_gffid()
2985 sp->u.iocb_cmd.u.ctarg.req_allocated_size = sizeof(struct ct_sns_pkt); in qla24xx_async_gffid()
2986 sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev, in qla24xx_async_gffid()
2987 sp->u.iocb_cmd.u.ctarg.req_allocated_size, in qla24xx_async_gffid()
2988 &sp->u.iocb_cmd.u.ctarg.req_dma, in qla24xx_async_gffid()
2990 if (!sp->u.iocb_cmd.u.ctarg.req) { in qla24xx_async_gffid()
2997 sp->u.iocb_cmd.u.ctarg.rsp_allocated_size = sizeof(struct ct_sns_pkt); in qla24xx_async_gffid()
2998 sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev, in qla24xx_async_gffid()
2999 sp->u.iocb_cmd.u.ctarg.rsp_allocated_size, in qla24xx_async_gffid()
3000 &sp->u.iocb_cmd.u.ctarg.rsp_dma, in qla24xx_async_gffid()
3002 if (!sp->u.iocb_cmd.u.ctarg.rsp) { in qla24xx_async_gffid()
3010 ct_req = qla2x00_prep_ct_req(sp->u.iocb_cmd.u.ctarg.req, GFF_ID_CMD, GFF_ID_RSP_SIZE); in qla24xx_async_gffid()
3012 ct_req->req.gff_id.port_id[0] = fcport->d_id.b.domain; in qla24xx_async_gffid()
3013 ct_req->req.gff_id.port_id[1] = fcport->d_id.b.area; in qla24xx_async_gffid()
3014 ct_req->req.gff_id.port_id[2] = fcport->d_id.b.al_pa; in qla24xx_async_gffid()
3016 sp->u.iocb_cmd.u.ctarg.req_size = GFF_ID_REQ_SIZE; in qla24xx_async_gffid()
3017 sp->u.iocb_cmd.u.ctarg.rsp_size = GFF_ID_RSP_SIZE; in qla24xx_async_gffid()
3018 sp->u.iocb_cmd.u.ctarg.nport_handle = NPH_SNS; in qla24xx_async_gffid()
3027 "Async-%s hdl=%x portid %06x\n", in qla24xx_async_gffid()
3028 sp->name, sp->handle, fcport->d_id.b24); in qla24xx_async_gffid()
3031 wait_for_completion(sp->comp); in qla24xx_async_gffid()
3032 rval = sp->rc; in qla24xx_async_gffid()
3035 if (sp->u.iocb_cmd.u.ctarg.req) { in qla24xx_async_gffid()
3036 dma_free_coherent(&vha->hw->pdev->dev, in qla24xx_async_gffid()
3037 sp->u.iocb_cmd.u.ctarg.req_allocated_size, in qla24xx_async_gffid()
3038 sp->u.iocb_cmd.u.ctarg.req, in qla24xx_async_gffid()
3039 sp->u.iocb_cmd.u.ctarg.req_dma); in qla24xx_async_gffid()
3040 sp->u.iocb_cmd.u.ctarg.req = NULL; in qla24xx_async_gffid()
3043 if (sp->u.iocb_cmd.u.ctarg.rsp) { in qla24xx_async_gffid()
3044 dma_free_coherent(&vha->hw->pdev->dev, in qla24xx_async_gffid()
3045 sp->u.iocb_cmd.u.ctarg.rsp_allocated_size, in qla24xx_async_gffid()
3046 sp->u.iocb_cmd.u.ctarg.rsp, in qla24xx_async_gffid()
3047 sp->u.iocb_cmd.u.ctarg.rsp_dma); in qla24xx_async_gffid()
3048 sp->u.iocb_cmd.u.ctarg.rsp = NULL; in qla24xx_async_gffid()
3052 kref_put(&sp->cmd_kref, qla2x00_sp_release); in qla24xx_async_gffid()
3059 struct qla_hw_data *ha = vha->hw; in qla2x00_is_a_vp()
3065 if (!ha->num_vhosts) in qla2x00_is_a_vp()
3068 spin_lock_irqsave(&ha->vport_slock, flags); in qla2x00_is_a_vp()
3069 list_for_each_entry(vp, &ha->vp_list, list) { in qla2x00_is_a_vp()
3070 twwn = wwn_to_u64(vp->port_name); in qla2x00_is_a_vp()
3076 spin_unlock_irqrestore(&ha->vport_slock, flags); in qla2x00_is_a_vp()
3085 rscn_gen = atomic_read(&vha->rscn_gen); in qla_ok_to_clear_rscn()
3088 __func__, __LINE__, fcport->port_name, fcport->rscn_gen, in qla_ok_to_clear_rscn()
3089 vha->scan.rscn_gen_start, vha->scan.rscn_gen_end, rscn_gen); in qla_ok_to_clear_rscn()
3091 if (val_is_in_range(fcport->rscn_gen, vha->scan.rscn_gen_start, in qla_ok_to_clear_rscn()
3092 vha->scan.rscn_gen_end)) in qla_ok_to_clear_rscn()
3093 /* rscn came in before fabric scan */ in qla_ok_to_clear_rscn()
3096 if (val_is_in_range(fcport->rscn_gen, vha->scan.rscn_gen_end, rscn_gen)) in qla_ok_to_clear_rscn()
3097 /* rscn came in after fabric scan */ in qla_ok_to_clear_rscn()
3117 if (sp->gen1 != vha->hw->base_qpair->chip_reset) { in qla_fab_scan_finish()
3119 "%s scan stop due to chip reset %x/%x\n", in qla_fab_scan_finish()
3120 sp->name, sp->gen1, vha->hw->base_qpair->chip_reset); in qla_fab_scan_finish()
3124 rc = sp->rc; in qla_fab_scan_finish()
3126 vha->scan.scan_retry++; in qla_fab_scan_finish()
3127 if (vha->scan.scan_retry < MAX_SCAN_RETRIES) { in qla_fab_scan_finish()
3128 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qla_fab_scan_finish()
3129 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla_fab_scan_finish()
3133 "%s: Fabric scan failed for %d retries.\n", in qla_fab_scan_finish()
3134 __func__, vha->scan.scan_retry); in qla_fab_scan_finish()
3136 * Unable to scan any rports. logout loop below in qla_fab_scan_finish()
3139 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla_fab_scan_finish()
3140 if ((fcport->flags & FCF_FABRIC_DEVICE) != 0) { in qla_fab_scan_finish()
3141 fcport->scan_state = QLA_FCPORT_SCAN; in qla_fab_scan_finish()
3142 if (fcport->loop_id == FC_NO_LOOP_ID) in qla_fab_scan_finish()
3143 fcport->logout_on_delete = 0; in qla_fab_scan_finish()
3145 fcport->logout_on_delete = 1; in qla_fab_scan_finish()
3151 vha->scan.scan_retry = 0; in qla_fab_scan_finish()
3153 list_for_each_entry(fcport, &vha->vp_fcports, list) in qla_fab_scan_finish()
3154 fcport->scan_state = QLA_FCPORT_SCAN; in qla_fab_scan_finish()
3156 for (i = 0; i < vha->hw->max_fibre_devices; i++) { in qla_fab_scan_finish()
3160 rp = &vha->scan.l[i]; in qla_fab_scan_finish()
3163 wwn = wwn_to_u64(rp->port_name); in qla_fab_scan_finish()
3168 for (k = i + 1; k < vha->hw->max_fibre_devices; k++) { in qla_fab_scan_finish()
3169 trp = &vha->scan.l[k]; in qla_fab_scan_finish()
3170 if (rp->id.b24 == trp->id.b24) { in qla_fab_scan_finish()
3176 rp->id.b24, rp->port_name, trp->port_name); in qla_fab_scan_finish()
3181 if (!memcmp(rp->port_name, vha->port_name, WWN_SIZE)) in qla_fab_scan_finish()
3185 if ((rp->id.b.domain & 0xf0) == 0xf0) in qla_fab_scan_finish()
3192 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla_fab_scan_finish()
3193 if (memcmp(rp->port_name, fcport->port_name, WWN_SIZE)) in qla_fab_scan_finish()
3195 fcport->scan_state = QLA_FCPORT_FOUND; in qla_fab_scan_finish()
3196 fcport->last_rscn_gen = fcport->rscn_gen; in qla_fab_scan_finish()
3197 fcport->fc4_type = rp->fc4type; in qla_fab_scan_finish()
3200 if (fcport->scan_needed) { in qla_fab_scan_finish()
3201 if (NVME_PRIORITY(vha->hw, fcport)) in qla_fab_scan_finish()
3202 fcport->do_prli_nvme = 1; in qla_fab_scan_finish()
3204 fcport->do_prli_nvme = 0; in qla_fab_scan_finish()
3210 if ((fcport->flags & FCF_FABRIC_DEVICE) == 0) { in qla_fab_scan_finish()
3212 fcport->flags |= FCF_FABRIC_DEVICE; in qla_fab_scan_finish()
3213 } else if (fcport->d_id.b24 != rp->id.b24 || in qla_fab_scan_finish()
3214 (fcport->scan_needed && in qla_fab_scan_finish()
3215 fcport->port_type != FCT_INITIATOR && in qla_fab_scan_finish()
3216 fcport->port_type != FCT_NVME_INITIATOR)) { in qla_fab_scan_finish()
3217 fcport->scan_needed = 0; in qla_fab_scan_finish()
3220 fcport->d_id.b24 = rp->id.b24; in qla_fab_scan_finish()
3227 __func__, __LINE__, rp->port_name); in qla_fab_scan_finish()
3228 qla24xx_post_newsess_work(vha, &rp->id, rp->port_name, in qla_fab_scan_finish()
3229 rp->node_name, NULL, rp->fc4type); in qla_fab_scan_finish()
3243 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla_fab_scan_finish()
3244 if ((fcport->flags & FCF_FABRIC_DEVICE) == 0) { in qla_fab_scan_finish()
3245 fcport->scan_needed = 0; in qla_fab_scan_finish()
3249 if (fcport->scan_state != QLA_FCPORT_FOUND) { in qla_fab_scan_finish()
3252 if (fcport->scan_needed && in qla_fab_scan_finish()
3253 fcport->disc_state == DSC_LOGIN_PEND) { in qla_fab_scan_finish()
3257 fcport->logout_on_delete = 1; in qla_fab_scan_finish()
3262 fcport->scan_needed = 0; in qla_fab_scan_finish()
3266 atomic_read(&fcport->state) == FCS_ONLINE) || in qla_fab_scan_finish()
3268 if (fcport->loop_id != FC_NO_LOOP_ID) { in qla_fab_scan_finish()
3269 if (fcport->flags & FCF_FCP2_DEVICE) in qla_fab_scan_finish()
3275 fcport->port_name); in qla_fab_scan_finish()
3277 fcport->tgt_link_down_time = 0; in qla_fab_scan_finish()
3283 if (fcport->scan_needed || in qla_fab_scan_finish()
3284 fcport->disc_state != DSC_LOGIN_COMPLETE) { in qla_fab_scan_finish()
3285 if (fcport->login_retry == 0) { in qla_fab_scan_finish()
3286 fcport->login_retry = in qla_fab_scan_finish()
3287 vha->hw->login_retry_count; in qla_fab_scan_finish()
3290 fcport->port_name, fcport->loop_id, in qla_fab_scan_finish()
3291 fcport->login_retry); in qla_fab_scan_finish()
3295 fcport->scan_needed = 0; in qla_fab_scan_finish()
3304 spin_lock_irqsave(&vha->work_lock, flags); in qla_fab_scan_finish()
3305 vha->scan.scan_flags &= ~SF_SCANNING; in qla_fab_scan_finish()
3306 spin_unlock_irqrestore(&vha->work_lock, flags); in qla_fab_scan_finish()
3309 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla_fab_scan_finish()
3310 if (fcport->scan_needed) { in qla_fab_scan_finish()
3311 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qla_fab_scan_finish()
3312 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla_fab_scan_finish()
3328 e->u.iosb.sp = sp; in qla2x00_post_next_scan_work()
3336 struct qla_hw_data *ha = vha->hw; in qla2x00_find_free_fcp_nvme_slot()
3337 int num_fibre_dev = ha->max_fibre_devices; in qla2x00_find_free_fcp_nvme_slot()
3339 (struct ct_sns_gpnft_rsp *)sp->u.iocb_cmd.u.ctarg.rsp; in qla2x00_find_free_fcp_nvme_slot()
3349 d = &ct_rsp->entries[i]; in qla2x00_find_free_fcp_nvme_slot()
3352 id.b.domain = d->port_id[0]; in qla2x00_find_free_fcp_nvme_slot()
3353 id.b.area = d->port_id[1]; in qla2x00_find_free_fcp_nvme_slot()
3354 id.b.al_pa = d->port_id[2]; in qla2x00_find_free_fcp_nvme_slot()
3355 wwn = wwn_to_u64(d->port_name); in qla2x00_find_free_fcp_nvme_slot()
3362 __func__, id.b24, d->port_name); in qla2x00_find_free_fcp_nvme_slot()
3364 switch (vha->scan.step) { in qla2x00_find_free_fcp_nvme_slot()
3366 rp = &vha->scan.l[j]; in qla2x00_find_free_fcp_nvme_slot()
3367 rp->id = id; in qla2x00_find_free_fcp_nvme_slot()
3368 memcpy(rp->port_name, d->port_name, 8); in qla2x00_find_free_fcp_nvme_slot()
3370 rp->fc4type = FS_FC4TYPE_FCP; in qla2x00_find_free_fcp_nvme_slot()
3374 rp = &vha->scan.l[k]; in qla2x00_find_free_fcp_nvme_slot()
3375 if (id.b24 == rp->id.b24) { in qla2x00_find_free_fcp_nvme_slot()
3376 memcpy(rp->node_name, in qla2x00_find_free_fcp_nvme_slot()
3377 d->port_name, 8); in qla2x00_find_free_fcp_nvme_slot()
3386 rp = &vha->scan.l[k]; in qla2x00_find_free_fcp_nvme_slot()
3387 if (!memcmp(rp->port_name, d->port_name, 8)) { in qla2x00_find_free_fcp_nvme_slot()
3389 * Supports FC-NVMe & FCP in qla2x00_find_free_fcp_nvme_slot()
3391 rp->fc4type |= FS_FC4TYPE_NVME; in qla2x00_find_free_fcp_nvme_slot()
3397 /* We found new FC-NVMe only port */ in qla2x00_find_free_fcp_nvme_slot()
3400 rp = &vha->scan.l[k]; in qla2x00_find_free_fcp_nvme_slot()
3401 if (wwn_to_u64(rp->port_name)) { in qla2x00_find_free_fcp_nvme_slot()
3404 rp->id = id; in qla2x00_find_free_fcp_nvme_slot()
3405 memcpy(rp->port_name, d->port_name, 8); in qla2x00_find_free_fcp_nvme_slot()
3406 rp->fc4type = FS_FC4TYPE_NVME; in qla2x00_find_free_fcp_nvme_slot()
3414 rp = &vha->scan.l[k]; in qla2x00_find_free_fcp_nvme_slot()
3415 if (id.b24 == rp->id.b24) { in qla2x00_find_free_fcp_nvme_slot()
3416 memcpy(rp->node_name, d->port_name, 8); in qla2x00_find_free_fcp_nvme_slot()
3429 struct scsi_qla_host *vha = sp->vha; in qla_async_scan_sp_done()
3435 "Async done-%s res %x step %x\n", in qla_async_scan_sp_done()
3436 sp->name, res, vha->scan.step); in qla_async_scan_sp_done()
3438 sp->rc = res; in qla_async_scan_sp_done()
3441 const char *name = sp->name; in qla_async_scan_sp_done()
3465 spin_lock_irqsave(&vha->work_lock, flags); in qla_async_scan_sp_done()
3466 vha->scan.scan_flags &= ~SF_SCANNING; in qla_async_scan_sp_done()
3467 vha->scan.scan_retry++; in qla_async_scan_sp_done()
3468 spin_unlock_irqrestore(&vha->work_lock, flags); in qla_async_scan_sp_done()
3470 if (vha->scan.scan_retry < MAX_SCAN_RETRIES) { in qla_async_scan_sp_done()
3471 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qla_async_scan_sp_done()
3472 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla_async_scan_sp_done()
3476 "Async done-%s rescan failed on all retries.\n", in qla_async_scan_sp_done()
3485 spin_lock_irqsave(&vha->work_lock, flags); in qla_async_scan_sp_done()
3486 vha->scan.scan_flags &= ~SF_SCANNING; in qla_async_scan_sp_done()
3487 spin_unlock_irqrestore(&vha->work_lock, flags); in qla_async_scan_sp_done()
3489 switch (vha->scan.step) { in qla_async_scan_sp_done()
3495 if (vha->flags.nvme_enabled) in qla_async_scan_sp_done()
3513 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qla_async_scan_sp_done()
3514 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla_async_scan_sp_done()
3531 if (!vha->flags.online) in qla_fab_async_scan()
3534 spin_lock_irqsave(&vha->work_lock, flags); in qla_fab_async_scan()
3535 if (vha->scan.scan_flags & SF_SCANNING) { in qla_fab_async_scan()
3536 spin_unlock_irqrestore(&vha->work_lock, flags); in qla_fab_async_scan()
3538 "%s: scan active\n", __func__); in qla_fab_async_scan()
3541 vha->scan.scan_flags |= SF_SCANNING; in qla_fab_async_scan()
3543 vha->scan.step = FAB_SCAN_START; in qla_fab_async_scan()
3545 spin_unlock_irqrestore(&vha->work_lock, flags); in qla_fab_async_scan()
3547 switch (vha->scan.step) { in qla_fab_async_scan()
3550 "%s: Performing FCP Scan\n", __func__); in qla_fab_async_scan()
3555 spin_lock_irqsave(&vha->work_lock, flags); in qla_fab_async_scan()
3556 vha->scan.scan_flags &= ~SF_SCANNING; in qla_fab_async_scan()
3557 spin_unlock_irqrestore(&vha->work_lock, flags); in qla_fab_async_scan()
3561 sp->u.iocb_cmd.u.ctarg.req = dma_alloc_coherent(&vha->hw->pdev->dev, in qla_fab_async_scan()
3563 &sp->u.iocb_cmd.u.ctarg.req_dma, in qla_fab_async_scan()
3565 sp->u.iocb_cmd.u.ctarg.req_allocated_size = sizeof(struct ct_sns_pkt); in qla_fab_async_scan()
3566 if (!sp->u.iocb_cmd.u.ctarg.req) { in qla_fab_async_scan()
3569 spin_lock_irqsave(&vha->work_lock, flags); in qla_fab_async_scan()
3570 vha->scan.scan_flags &= ~SF_SCANNING; in qla_fab_async_scan()
3571 spin_unlock_irqrestore(&vha->work_lock, flags); in qla_fab_async_scan()
3577 vha->hw->max_fibre_devices * in qla_fab_async_scan()
3580 sp->u.iocb_cmd.u.ctarg.rsp = dma_alloc_coherent(&vha->hw->pdev->dev, in qla_fab_async_scan()
3582 &sp->u.iocb_cmd.u.ctarg.rsp_dma, in qla_fab_async_scan()
3584 sp->u.iocb_cmd.u.ctarg.rsp_allocated_size = rspsz; in qla_fab_async_scan()
3585 if (!sp->u.iocb_cmd.u.ctarg.rsp) { in qla_fab_async_scan()
3588 spin_lock_irqsave(&vha->work_lock, flags); in qla_fab_async_scan()
3589 vha->scan.scan_flags &= ~SF_SCANNING; in qla_fab_async_scan()
3590 spin_unlock_irqrestore(&vha->work_lock, flags); in qla_fab_async_scan()
3591 dma_free_coherent(&vha->hw->pdev->dev, in qla_fab_async_scan()
3592 sp->u.iocb_cmd.u.ctarg.req_allocated_size, in qla_fab_async_scan()
3593 sp->u.iocb_cmd.u.ctarg.req, in qla_fab_async_scan()
3594 sp->u.iocb_cmd.u.ctarg.req_dma); in qla_fab_async_scan()
3595 sp->u.iocb_cmd.u.ctarg.req = NULL; in qla_fab_async_scan()
3600 sp->u.iocb_cmd.u.ctarg.rsp_size = rspsz; in qla_fab_async_scan()
3603 "%s scan list size %d\n", __func__, vha->scan.size); in qla_fab_async_scan()
3605 memset(vha->scan.l, 0, vha->scan.size); in qla_fab_async_scan()
3607 vha->scan.step = FAB_SCAN_GPNFT_FCP; in qla_fab_async_scan()
3610 vha->scan.step = FAB_SCAN_GNNFT_FCP; in qla_fab_async_scan()
3613 vha->scan.step = FAB_SCAN_GPNFT_NVME; in qla_fab_async_scan()
3616 vha->scan.step = FAB_SCAN_GNNFT_NVME; in qla_fab_async_scan()
3627 "scan did not provide SP\n"); in qla_fab_async_scan()
3630 if (!sp->u.iocb_cmd.u.ctarg.req || !sp->u.iocb_cmd.u.ctarg.rsp) { in qla_fab_async_scan()
3633 __func__, sp->u.iocb_cmd.u.ctarg.req, in qla_fab_async_scan()
3634 sp->u.iocb_cmd.u.ctarg.rsp); in qla_fab_async_scan()
3635 spin_lock_irqsave(&vha->work_lock, flags); in qla_fab_async_scan()
3636 vha->scan.scan_flags &= ~SF_SCANNING; in qla_fab_async_scan()
3637 spin_unlock_irqrestore(&vha->work_lock, flags); in qla_fab_async_scan()
3639 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qla_fab_async_scan()
3640 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla_fab_async_scan()
3644 rspsz = sp->u.iocb_cmd.u.ctarg.rsp_size; in qla_fab_async_scan()
3645 memset(sp->u.iocb_cmd.u.ctarg.req, 0, sp->u.iocb_cmd.u.ctarg.req_size); in qla_fab_async_scan()
3646 memset(sp->u.iocb_cmd.u.ctarg.rsp, 0, sp->u.iocb_cmd.u.ctarg.rsp_size); in qla_fab_async_scan()
3649 sp->type = SRB_CT_PTHRU_CMD; in qla_fab_async_scan()
3650 sp->gen1 = vha->hw->base_qpair->chip_reset; in qla_fab_async_scan()
3654 ct_sns = (struct ct_sns_pkt *)sp->u.iocb_cmd.u.ctarg.req; in qla_fab_async_scan()
3657 switch (vha->scan.step) { in qla_fab_async_scan()
3659 sp->name = "gpnft"; in qla_fab_async_scan()
3661 ct_req->req.gpn_ft.port_type = FC4_TYPE_FCP_SCSI; in qla_fab_async_scan()
3662 sp->u.iocb_cmd.u.ctarg.req_size = GPN_FT_REQ_SIZE; in qla_fab_async_scan()
3665 sp->name = "gnnft"; in qla_fab_async_scan()
3667 ct_req->req.gpn_ft.port_type = FC4_TYPE_FCP_SCSI; in qla_fab_async_scan()
3668 sp->u.iocb_cmd.u.ctarg.req_size = GNN_FT_REQ_SIZE; in qla_fab_async_scan()
3671 sp->name = "gpnft"; in qla_fab_async_scan()
3673 ct_req->req.gpn_ft.port_type = FC4_TYPE_NVME; in qla_fab_async_scan()
3674 sp->u.iocb_cmd.u.ctarg.req_size = GPN_FT_REQ_SIZE; in qla_fab_async_scan()
3677 sp->name = "gnnft"; in qla_fab_async_scan()
3679 ct_req->req.gpn_ft.port_type = FC4_TYPE_NVME; in qla_fab_async_scan()
3680 sp->u.iocb_cmd.u.ctarg.req_size = GNN_FT_REQ_SIZE; in qla_fab_async_scan()
3688 sp->u.iocb_cmd.u.ctarg.nport_handle = NPH_SNS; in qla_fab_async_scan()
3692 __func__, vha->scan.step, sp->u.iocb_cmd.u.ctarg.rsp_size, in qla_fab_async_scan()
3693 sp->u.iocb_cmd.u.ctarg.req_size, sp->handle, sp->name, in qla_fab_async_scan()
3694 ct_req->req.gpn_ft.port_type); in qla_fab_async_scan()
3704 if (sp->u.iocb_cmd.u.ctarg.req) { in qla_fab_async_scan()
3705 dma_free_coherent(&vha->hw->pdev->dev, in qla_fab_async_scan()
3706 sp->u.iocb_cmd.u.ctarg.req_allocated_size, in qla_fab_async_scan()
3707 sp->u.iocb_cmd.u.ctarg.req, in qla_fab_async_scan()
3708 sp->u.iocb_cmd.u.ctarg.req_dma); in qla_fab_async_scan()
3709 sp->u.iocb_cmd.u.ctarg.req = NULL; in qla_fab_async_scan()
3711 if (sp->u.iocb_cmd.u.ctarg.rsp) { in qla_fab_async_scan()
3712 dma_free_coherent(&vha->hw->pdev->dev, in qla_fab_async_scan()
3713 sp->u.iocb_cmd.u.ctarg.rsp_allocated_size, in qla_fab_async_scan()
3714 sp->u.iocb_cmd.u.ctarg.rsp, in qla_fab_async_scan()
3715 sp->u.iocb_cmd.u.ctarg.rsp_dma); in qla_fab_async_scan()
3716 sp->u.iocb_cmd.u.ctarg.rsp = NULL; in qla_fab_async_scan()
3720 kref_put(&sp->cmd_kref, qla2x00_sp_release); in qla_fab_async_scan()
3722 spin_lock_irqsave(&vha->work_lock, flags); in qla_fab_async_scan()
3723 vha->scan.scan_flags &= ~SF_SCANNING; in qla_fab_async_scan()
3724 if (vha->scan.scan_flags == 0) { in qla_fab_async_scan()
3726 "%s: Scan scheduled.\n", __func__); in qla_fab_async_scan()
3727 vha->scan.scan_flags |= SF_QUEUED; in qla_fab_async_scan()
3728 schedule_delayed_work(&vha->scan.scan_work, 5); in qla_fab_async_scan()
3730 spin_unlock_irqrestore(&vha->work_lock, flags); in qla_fab_async_scan()
3742 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla_fab_scan_start()
3750 scan); in qla_scan_work_fn()
3755 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qla_scan_work_fn()
3756 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla_scan_work_fn()
3758 spin_lock_irqsave(&vha->work_lock, flags); in qla_scan_work_fn()
3759 vha->scan.scan_flags &= ~SF_QUEUED; in qla_scan_work_fn()
3760 spin_unlock_irqrestore(&vha->work_lock, flags); in qla_scan_work_fn()
3766 fc_port_t *fcport = ea->fcport; in qla24xx_handle_gfpnid_event()
3770 __func__, fcport->port_name, fcport->disc_state, in qla24xx_handle_gfpnid_event()
3771 fcport->fw_login_state, ea->rc, fcport->login_gen, ea->sp->gen2, in qla24xx_handle_gfpnid_event()
3772 fcport->rscn_gen, ea->sp->gen1, vha->fcport_count); in qla24xx_handle_gfpnid_event()
3774 if (fcport->disc_state == DSC_DELETE_PEND) in qla24xx_handle_gfpnid_event()
3777 if (ea->sp->gen2 != fcport->login_gen) { in qla24xx_handle_gfpnid_event()
3781 __func__, fcport->port_name); in qla24xx_handle_gfpnid_event()
3783 } else if (ea->sp->gen1 != fcport->rscn_gen) { in qla24xx_handle_gfpnid_event()
3792 struct scsi_qla_host *vha = sp->vha; in qla2x00_async_gfpnid_sp_done()
3793 fc_port_t *fcport = sp->fcport; in qla2x00_async_gfpnid_sp_done()
3794 u8 *fpn = fcport->ct_desc.ct_sns->p.rsp.rsp.gfpn_id.port_name; in qla2x00_async_gfpnid_sp_done()
3800 memcpy(fcport->fabric_port_name, fpn, WWN_SIZE); in qla2x00_async_gfpnid_sp_done()
3808 "Async done-%s res %x, WWPN %8phC %8phC\n", in qla2x00_async_gfpnid_sp_done()
3809 sp->name, res, fcport->port_name, fcport->fabric_port_name); in qla2x00_async_gfpnid_sp_done()
3814 kref_put(&sp->cmd_kref, qla2x00_sp_release); in qla2x00_async_gfpnid_sp_done()
3823 if (!vha->flags.online || (fcport->flags & FCF_ASYNC_SENT)) in qla24xx_async_gfpnid()
3831 sp->type = SRB_CT_PTHRU_CMD; in qla24xx_async_gfpnid()
3832 sp->name = "gfpnid"; in qla24xx_async_gfpnid()
3833 sp->gen1 = fcport->rscn_gen; in qla24xx_async_gfpnid()
3834 sp->gen2 = fcport->login_gen; in qla24xx_async_gfpnid()
3839 ct_req = qla2x00_prep_ct_req(fcport->ct_desc.ct_sns, GFPN_ID_CMD, in qla24xx_async_gfpnid()
3843 ct_req->req.port_id.port_id = port_id_to_be_id(fcport->d_id); in qla24xx_async_gfpnid()
3847 sp->u.iocb_cmd.u.ctarg.req = fcport->ct_desc.ct_sns; in qla24xx_async_gfpnid()
3848 sp->u.iocb_cmd.u.ctarg.req_dma = fcport->ct_desc.ct_sns_dma; in qla24xx_async_gfpnid()
3849 sp->u.iocb_cmd.u.ctarg.rsp = fcport->ct_desc.ct_sns; in qla24xx_async_gfpnid()
3850 sp->u.iocb_cmd.u.ctarg.rsp_dma = fcport->ct_desc.ct_sns_dma; in qla24xx_async_gfpnid()
3851 sp->u.iocb_cmd.u.ctarg.req_size = GFPN_ID_REQ_SIZE; in qla24xx_async_gfpnid()
3852 sp->u.iocb_cmd.u.ctarg.rsp_size = GFPN_ID_RSP_SIZE; in qla24xx_async_gfpnid()
3853 sp->u.iocb_cmd.u.ctarg.nport_handle = NPH_SNS; in qla24xx_async_gfpnid()
3856 "Async-%s - %8phC hdl=%x loopid=%x portid %06x.\n", in qla24xx_async_gfpnid()
3857 sp->name, fcport->port_name, in qla24xx_async_gfpnid()
3858 sp->handle, fcport->loop_id, fcport->d_id.b24); in qla24xx_async_gfpnid()
3868 kref_put(&sp->cmd_kref, qla2x00_sp_release); in qla24xx_async_gfpnid()
3878 ls = atomic_read(&vha->loop_state); in qla24xx_post_gfpnid_work()
3880 test_bit(UNLOADING, &vha->dpc_flags)) in qla24xx_post_gfpnid_work()
3887 e->u.fcport.fcport = fcport; in qla24xx_post_gfpnid_work()