Lines Matching refs:fcport
154 sp = qla2xxx_get_qpair_sp(cmd_sp->vha, cmd_sp->qpair, cmd_sp->fcport, in qla24xx_async_abort_cmd()
201 fc_port_t *fcport = sp->fcport; in qla2x00_async_iocb_timeout() local
206 if (fcport) { in qla2x00_async_iocb_timeout()
207 ql_dbg(ql_dbg_disc, fcport->vha, 0x2071, in qla2x00_async_iocb_timeout()
209 sp->name, sp->handle, fcport->d_id.b24, fcport->port_name); in qla2x00_async_iocb_timeout()
211 fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE); in qla2x00_async_iocb_timeout()
274 "%s %8phC res %d \n", __func__, sp->fcport->port_name, res); in qla2x00_async_login_sp_done()
276 sp->fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE); in qla2x00_async_login_sp_done()
280 ea.fcport = sp->fcport; in qla2x00_async_login_sp_done()
293 fcport_is_smaller(fc_port_t *fcport) in fcport_is_smaller() argument
295 if (wwn_to_u64(fcport->port_name) < in fcport_is_smaller()
296 wwn_to_u64(fcport->vha->port_name)) in fcport_is_smaller()
303 fcport_is_bigger(fc_port_t *fcport) in fcport_is_bigger() argument
305 return !fcport_is_smaller(fcport); in fcport_is_bigger()
309 qla2x00_async_login(struct scsi_qla_host *vha, fc_port_t *fcport, in qla2x00_async_login() argument
316 if (!vha->flags.online || (fcport->flags & FCF_ASYNC_SENT) || in qla2x00_async_login()
317 fcport->loop_id == FC_NO_LOOP_ID) { in qla2x00_async_login()
320 __func__, fcport->port_name); in qla2x00_async_login()
324 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); in qla2x00_async_login()
328 qla2x00_set_fcport_disc_state(fcport, DSC_LOGIN_PEND); in qla2x00_async_login()
329 fcport->flags |= FCF_ASYNC_SENT; in qla2x00_async_login()
330 fcport->logout_completed = 0; in qla2x00_async_login()
334 sp->gen1 = fcport->rscn_gen; in qla2x00_async_login()
335 sp->gen2 = fcport->login_gen; in qla2x00_async_login()
342 if (N2N_TOPO(fcport->vha->hw) && fcport_is_bigger(fcport)) in qla2x00_async_login()
347 if (NVME_TARGET(vha->hw, fcport)) in qla2x00_async_login()
352 "retries=%d.\n", fcport->port_name, sp->handle, fcport->loop_id, in qla2x00_async_login()
353 fcport->d_id.b.domain, fcport->d_id.b.area, fcport->d_id.b.al_pa, in qla2x00_async_login()
354 fcport->login_retry); in qla2x00_async_login()
358 fcport->flags |= FCF_LOGIN_NEEDED; in qla2x00_async_login()
367 fcport->flags &= ~FCF_ASYNC_SENT; in qla2x00_async_login()
369 fcport->flags &= ~FCF_ASYNC_ACTIVE; in qla2x00_async_login()
375 sp->fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE); in qla2x00_async_logout_sp_done()
376 sp->fcport->login_gen++; in qla2x00_async_logout_sp_done()
377 qlt_logo_completion_handler(sp->fcport, res); in qla2x00_async_logout_sp_done()
382 qla2x00_async_logout(struct scsi_qla_host *vha, fc_port_t *fcport) in qla2x00_async_logout() argument
388 fcport->flags |= FCF_ASYNC_SENT; in qla2x00_async_logout()
389 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); in qla2x00_async_logout()
404 sp->handle, fcport->loop_id, fcport->d_id.b.domain, in qla2x00_async_logout()
405 fcport->d_id.b.area, fcport->d_id.b.al_pa, in qla2x00_async_logout()
406 fcport->port_name); in qla2x00_async_logout()
416 fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE); in qla2x00_async_logout()
421 qla2x00_async_prlo_done(struct scsi_qla_host *vha, fc_port_t *fcport, in qla2x00_async_prlo_done() argument
424 fcport->flags &= ~FCF_ASYNC_ACTIVE; in qla2x00_async_prlo_done()
426 if (!fcport->tgt_session) in qla2x00_async_prlo_done()
427 qla2x00_mark_device_lost(vha, fcport, 1); in qla2x00_async_prlo_done()
428 qlt_logo_completion_handler(fcport, data[0]); in qla2x00_async_prlo_done()
436 sp->fcport->flags &= ~FCF_ASYNC_ACTIVE; in qla2x00_async_prlo_sp_done()
438 qla2x00_post_async_prlo_done_work(sp->fcport->vha, sp->fcport, in qla2x00_async_prlo_sp_done()
444 qla2x00_async_prlo(struct scsi_qla_host *vha, fc_port_t *fcport) in qla2x00_async_prlo() argument
451 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); in qla2x00_async_prlo()
466 sp->handle, fcport->loop_id, fcport->d_id.b.domain, in qla2x00_async_prlo()
467 fcport->d_id.b.area, fcport->d_id.b.al_pa); in qla2x00_async_prlo()
478 fcport->flags &= ~FCF_ASYNC_ACTIVE; in qla2x00_async_prlo()
485 struct fc_port *fcport = ea->fcport; in qla24xx_handle_adisc_event() local
489 __func__, fcport->port_name, fcport->disc_state, in qla24xx_handle_adisc_event()
490 fcport->fw_login_state, ea->rc, fcport->login_gen, ea->sp->gen2, in qla24xx_handle_adisc_event()
491 fcport->rscn_gen, ea->sp->gen1, fcport->loop_id); in qla24xx_handle_adisc_event()
499 __func__, ea->fcport->port_name); in qla24xx_handle_adisc_event()
501 fcport->deleted = 0; in qla24xx_handle_adisc_event()
502 fcport->logout_on_delete = 1; in qla24xx_handle_adisc_event()
503 qlt_schedule_sess_for_deletion(ea->fcport); in qla24xx_handle_adisc_event()
507 if (ea->fcport->disc_state == DSC_DELETE_PEND) in qla24xx_handle_adisc_event()
510 if (ea->sp->gen2 != ea->fcport->login_gen) { in qla24xx_handle_adisc_event()
514 __func__, ea->fcport->port_name); in qla24xx_handle_adisc_event()
516 } else if (ea->sp->gen1 != ea->fcport->rscn_gen) { in qla24xx_handle_adisc_event()
517 qla_rscn_replay(fcport); in qla24xx_handle_adisc_event()
518 qlt_schedule_sess_for_deletion(fcport); in qla24xx_handle_adisc_event()
525 static int qla_post_els_plogi_work(struct scsi_qla_host *vha, fc_port_t *fcport) in qla_post_els_plogi_work() argument
533 e->u.fcport.fcport = fcport; in qla_post_els_plogi_work()
534 fcport->flags |= FCF_ASYNC_ACTIVE; in qla_post_els_plogi_work()
535 qla2x00_set_fcport_disc_state(fcport, DSC_LOGIN_PEND); in qla_post_els_plogi_work()
547 sp->name, res, sp->fcport->port_name); in qla2x00_async_adisc_sp_done()
549 sp->fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE); in qla2x00_async_adisc_sp_done()
557 ea.fcport = sp->fcport; in qla2x00_async_adisc_sp_done()
566 qla2x00_async_adisc(struct scsi_qla_host *vha, fc_port_t *fcport, in qla2x00_async_adisc() argument
573 if (IS_SESSION_DELETED(fcport)) { in qla2x00_async_adisc()
576 __func__, fcport->port_name); in qla2x00_async_adisc()
577 fcport->flags &= ~FCF_ASYNC_ACTIVE; in qla2x00_async_adisc()
581 if (!vha->flags.online || (fcport->flags & FCF_ASYNC_SENT)) in qla2x00_async_adisc()
584 fcport->flags |= FCF_ASYNC_SENT; in qla2x00_async_adisc()
585 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); in qla2x00_async_adisc()
594 sp->gen1 = fcport->rscn_gen; in qla2x00_async_adisc()
595 sp->gen2 = fcport->login_gen; in qla2x00_async_adisc()
604 sp->handle, fcport->loop_id, fcport->d_id.b24, fcport->port_name); in qla2x00_async_adisc()
615 fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE); in qla2x00_async_adisc()
616 qla2x00_post_async_adisc_work(vha, fcport, data); in qla2x00_async_adisc()
674 void qla2x00_clear_loop_id(fc_port_t *fcport) in qla2x00_clear_loop_id() argument
676 struct qla_hw_data *ha = fcport->vha->hw; in qla2x00_clear_loop_id()
678 if (fcport->loop_id == FC_NO_LOOP_ID || in qla2x00_clear_loop_id()
679 qla2x00_is_reserved_id(fcport->vha, fcport->loop_id)) in qla2x00_clear_loop_id()
682 clear_bit(fcport->loop_id, ha->loop_id_map); in qla2x00_clear_loop_id()
683 fcport->loop_id = FC_NO_LOOP_ID; in qla2x00_clear_loop_id()
689 fc_port_t *fcport, *conflict_fcport; in qla24xx_handle_gnl_done_event() local
697 fcport = ea->fcport; in qla24xx_handle_gnl_done_event()
700 __func__, fcport->port_name, fcport->disc_state, in qla24xx_handle_gnl_done_event()
701 fcport->fw_login_state, ea->rc, in qla24xx_handle_gnl_done_event()
702 fcport->login_gen, fcport->last_login_gen, in qla24xx_handle_gnl_done_event()
703 fcport->rscn_gen, fcport->last_rscn_gen, vha->loop_id); in qla24xx_handle_gnl_done_event()
705 if (fcport->disc_state == DSC_DELETE_PEND) in qla24xx_handle_gnl_done_event()
709 if (fcport->login_retry == 0) { in qla24xx_handle_gnl_done_event()
712 fcport->port_name, fcport->login_retry); in qla24xx_handle_gnl_done_event()
717 if (fcport->last_rscn_gen != fcport->rscn_gen) { in qla24xx_handle_gnl_done_event()
718 qla_rscn_replay(fcport); in qla24xx_handle_gnl_done_event()
719 qlt_schedule_sess_for_deletion(fcport); in qla24xx_handle_gnl_done_event()
721 } else if (fcport->last_login_gen != fcport->login_gen) { in qla24xx_handle_gnl_done_event()
724 __func__, fcport->port_name); in qla24xx_handle_gnl_done_event()
732 __func__, __LINE__, fcport->port_name, n, in qla24xx_handle_gnl_done_event()
733 fcport->d_id.b.domain, fcport->d_id.b.area, in qla24xx_handle_gnl_done_event()
734 fcport->d_id.b.al_pa, fcport->loop_id); in qla24xx_handle_gnl_done_event()
744 if (memcmp((u8 *)&wwn, fcport->port_name, WWN_SIZE)) in qla24xx_handle_gnl_done_event()
759 fcport->fc4_type &= ~FS_FC4TYPE_FCP; in qla24xx_handle_gnl_done_event()
760 fcport->fc4_type |= FS_FC4TYPE_NVME; in qla24xx_handle_gnl_done_event()
762 fcport->fc4_type |= FS_FC4TYPE_FCP; in qla24xx_handle_gnl_done_event()
763 fcport->fc4_type &= ~FS_FC4TYPE_NVME; in qla24xx_handle_gnl_done_event()
768 __func__, fcport->port_name, in qla24xx_handle_gnl_done_event()
769 e->current_login_state, fcport->fw_login_state, in qla24xx_handle_gnl_done_event()
770 fcport->fc4_type, id.b24, fcport->d_id.b24, in qla24xx_handle_gnl_done_event()
771 loop_id, fcport->loop_id); in qla24xx_handle_gnl_done_event()
773 switch (fcport->disc_state) { in qla24xx_handle_gnl_done_event()
778 if ((id.b24 != fcport->d_id.b24 && in qla24xx_handle_gnl_done_event()
779 fcport->d_id.b24 && in qla24xx_handle_gnl_done_event()
780 fcport->loop_id != FC_NO_LOOP_ID) || in qla24xx_handle_gnl_done_event()
781 (fcport->loop_id != FC_NO_LOOP_ID && in qla24xx_handle_gnl_done_event()
782 fcport->loop_id != loop_id)) { in qla24xx_handle_gnl_done_event()
785 __func__, __LINE__, fcport->port_name); in qla24xx_handle_gnl_done_event()
786 if (fcport->n2n_flag) in qla24xx_handle_gnl_done_event()
787 fcport->d_id.b24 = 0; in qla24xx_handle_gnl_done_event()
788 qlt_schedule_sess_for_deletion(fcport); in qla24xx_handle_gnl_done_event()
794 fcport->loop_id = loop_id; in qla24xx_handle_gnl_done_event()
795 if (fcport->n2n_flag) in qla24xx_handle_gnl_done_event()
796 fcport->d_id.b24 = id.b24; in qla24xx_handle_gnl_done_event()
798 wwn = wwn_to_u64(fcport->port_name); in qla24xx_handle_gnl_done_event()
808 conflict_fcport->conflict = fcport; in qla24xx_handle_gnl_done_event()
809 fcport->login_pause = 1; in qla24xx_handle_gnl_done_event()
818 __func__, __LINE__, fcport->port_name); in qla24xx_handle_gnl_done_event()
821 fcport->port_type = FCT_INITIATOR; in qla24xx_handle_gnl_done_event()
823 fcport->port_type = FCT_TARGET; in qla24xx_handle_gnl_done_event()
825 qla2x00_post_async_adisc_work(vha, fcport, in qla24xx_handle_gnl_done_event()
830 if (fcport->loop_id == FC_NO_LOOP_ID) { in qla24xx_handle_gnl_done_event()
831 qla2x00_find_new_loop_id(vha, fcport); in qla24xx_handle_gnl_done_event()
832 fcport->fw_login_state = in qla24xx_handle_gnl_done_event()
837 fcport->port_name); in qla24xx_handle_gnl_done_event()
838 qla24xx_fcport_handle_login(vha, fcport); in qla24xx_handle_gnl_done_event()
843 fcport->fw_login_state = current_login_state; in qla24xx_handle_gnl_done_event()
844 fcport->d_id = id; in qla24xx_handle_gnl_done_event()
853 qla2x00_set_fcport_disc_state(fcport, in qla24xx_handle_gnl_done_event()
858 fcport->port_type = FCT_INITIATOR; in qla24xx_handle_gnl_done_event()
860 fcport->port_type = FCT_TARGET; in qla24xx_handle_gnl_done_event()
863 qla2x00_post_async_adisc_work(vha, fcport, in qla24xx_handle_gnl_done_event()
867 if (fcport_is_bigger(fcport)) { in qla24xx_handle_gnl_done_event()
869 if (fcport->loop_id != FC_NO_LOOP_ID) in qla24xx_handle_gnl_done_event()
870 qla2x00_clear_loop_id(fcport); in qla24xx_handle_gnl_done_event()
872 fcport->loop_id = loop_id; in qla24xx_handle_gnl_done_event()
874 fcport); in qla24xx_handle_gnl_done_event()
879 if (fcport_is_smaller(fcport)) { in qla24xx_handle_gnl_done_event()
881 if (fcport->loop_id != FC_NO_LOOP_ID) in qla24xx_handle_gnl_done_event()
882 qla2x00_clear_loop_id(fcport); in qla24xx_handle_gnl_done_event()
884 fcport->loop_id = loop_id; in qla24xx_handle_gnl_done_event()
886 fcport); in qla24xx_handle_gnl_done_event()
906 if (fcport->d_id.b24 == id.b24) { in qla24xx_handle_gnl_done_event()
924 if (fcport->loop_id == loop_id) in qla24xx_handle_gnl_done_event()
925 fcport->loop_id = FC_NO_LOOP_ID; in qla24xx_handle_gnl_done_event()
927 qla24xx_fcport_handle_login(vha, fcport); in qla24xx_handle_gnl_done_event()
930 qla2x00_set_fcport_disc_state(fcport, DSC_DELETED); in qla24xx_handle_gnl_done_event()
931 if (time_after_eq(jiffies, fcport->dm_login_expire)) { in qla24xx_handle_gnl_done_event()
932 if (fcport->n2n_link_reset_cnt < 2) { in qla24xx_handle_gnl_done_event()
933 fcport->n2n_link_reset_cnt++; in qla24xx_handle_gnl_done_event()
942 if (fcport->n2n_chip_reset < 1) { in qla24xx_handle_gnl_done_event()
947 fcport->n2n_chip_reset++; in qla24xx_handle_gnl_done_event()
951 fcport->port_name); in qla24xx_handle_gnl_done_event()
952 fcport->scan_state = 0; in qla24xx_handle_gnl_done_event()
965 qla24xx_fcport_handle_login(vha, fcport); in qla24xx_handle_gnl_done_event()
977 struct fc_port *fcport = NULL, *tf; in qla24xx_async_gnl_sp_done() local
991 sp->fcport->flags &= ~(FCF_ASYNC_SENT|FCF_ASYNC_ACTIVE); in qla24xx_async_gnl_sp_done()
1021 fcport = tf = NULL; in qla24xx_async_gnl_sp_done()
1026 list_for_each_entry_safe(fcport, tf, &h, gnl_entry) { in qla24xx_async_gnl_sp_done()
1028 list_del_init(&fcport->gnl_entry); in qla24xx_async_gnl_sp_done()
1029 fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE); in qla24xx_async_gnl_sp_done()
1031 ea.fcport = fcport; in qla24xx_async_gnl_sp_done()
1045 list_for_each_entry_safe(fcport, tf, &vha->vp_fcports, list) { in qla24xx_async_gnl_sp_done()
1046 if (!memcmp((u8 *)&wwn, fcport->port_name, in qla24xx_async_gnl_sp_done()
1072 list_for_each_entry_safe(fcport, tf, &vha->gnl.fcports, in qla24xx_async_gnl_sp_done()
1074 list_del_init(&fcport->gnl_entry); in qla24xx_async_gnl_sp_done()
1075 fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE); in qla24xx_async_gnl_sp_done()
1076 if (qla24xx_post_gnl_work(vha, fcport) == QLA_SUCCESS) in qla24xx_async_gnl_sp_done()
1085 int qla24xx_async_gnl(struct scsi_qla_host *vha, fc_port_t *fcport) in qla24xx_async_gnl() argument
1093 if (!vha->flags.online || (fcport->flags & FCF_ASYNC_SENT)) in qla24xx_async_gnl()
1097 "Async-gnlist WWPN %8phC \n", fcport->port_name); in qla24xx_async_gnl()
1100 fcport->flags |= FCF_ASYNC_SENT; in qla24xx_async_gnl()
1101 qla2x00_set_fcport_disc_state(fcport, DSC_GNL); in qla24xx_async_gnl()
1102 fcport->last_rscn_gen = fcport->rscn_gen; in qla24xx_async_gnl()
1103 fcport->last_login_gen = fcport->login_gen; in qla24xx_async_gnl()
1105 list_add_tail(&fcport->gnl_entry, &vha->gnl.fcports); in qla24xx_async_gnl()
1113 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); in qla24xx_async_gnl()
1119 sp->gen1 = fcport->rscn_gen; in qla24xx_async_gnl()
1120 sp->gen2 = fcport->login_gen; in qla24xx_async_gnl()
1140 sp->name, fcport->port_name, sp->handle); in qla24xx_async_gnl()
1151 fcport->flags &= ~(FCF_ASYNC_ACTIVE | FCF_ASYNC_SENT); in qla24xx_async_gnl()
1155 int qla24xx_post_gnl_work(struct scsi_qla_host *vha, fc_port_t *fcport) in qla24xx_post_gnl_work() argument
1163 e->u.fcport.fcport = fcport; in qla24xx_post_gnl_work()
1164 fcport->flags |= FCF_ASYNC_ACTIVE; in qla24xx_post_gnl_work()
1172 fc_port_t *fcport = sp->fcport; in qla24xx_async_gpdb_sp_done() local
1178 sp->name, res, fcport->port_name, mb[1], mb[2]); in qla24xx_async_gpdb_sp_done()
1180 fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE); in qla24xx_async_gpdb_sp_done()
1186 ea.fcport = fcport; in qla24xx_async_gpdb_sp_done()
1198 static int qla24xx_post_prli_work(struct scsi_qla_host *vha, fc_port_t *fcport) in qla24xx_post_prli_work() argument
1209 e->u.fcport.fcport = fcport; in qla24xx_post_prli_work()
1222 sp->fcport->port_name, res); in qla2x00_async_prli_sp_done()
1224 sp->fcport->flags &= ~FCF_ASYNC_SENT; in qla2x00_async_prli_sp_done()
1228 ea.fcport = sp->fcport; in qla2x00_async_prli_sp_done()
1242 qla24xx_async_prli(struct scsi_qla_host *vha, fc_port_t *fcport) in qla24xx_async_prli() argument
1250 __func__, __LINE__, fcport->port_name); in qla24xx_async_prli()
1254 if ((fcport->fw_login_state == DSC_LS_PLOGI_PEND || in qla24xx_async_prli()
1255 fcport->fw_login_state == DSC_LS_PRLI_PEND) && in qla24xx_async_prli()
1258 __func__, __LINE__, fcport->port_name); in qla24xx_async_prli()
1262 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); in qla24xx_async_prli()
1266 fcport->flags |= FCF_ASYNC_SENT; in qla24xx_async_prli()
1267 fcport->logout_completed = 0; in qla24xx_async_prli()
1279 if (NVME_TARGET(vha->hw, fcport)) in qla24xx_async_prli()
1284 fcport->port_name, sp->handle, fcport->loop_id, fcport->d_id.b24, in qla24xx_async_prli()
1285 fcport->login_retry, fcport->fc4_type, vha->hw->fc4_type_priority, in qla24xx_async_prli()
1286 NVME_TARGET(vha->hw, fcport) ? "nvme" : "fcp"); in qla24xx_async_prli()
1290 fcport->flags |= FCF_LOGIN_NEEDED; in qla24xx_async_prli()
1299 fcport->flags &= ~FCF_ASYNC_SENT; in qla24xx_async_prli()
1303 int qla24xx_post_gpdb_work(struct scsi_qla_host *vha, fc_port_t *fcport, u8 opt) in qla24xx_post_gpdb_work() argument
1311 e->u.fcport.fcport = fcport; in qla24xx_post_gpdb_work()
1312 e->u.fcport.opt = opt; in qla24xx_post_gpdb_work()
1313 fcport->flags |= FCF_ASYNC_ACTIVE; in qla24xx_post_gpdb_work()
1317 int qla24xx_async_gpdb(struct scsi_qla_host *vha, fc_port_t *fcport, u8 opt) in qla24xx_async_gpdb() argument
1327 if (IS_SESSION_DELETED(fcport)) { in qla24xx_async_gpdb()
1330 __func__, fcport->port_name); in qla24xx_async_gpdb()
1331 fcport->flags &= ~FCF_ASYNC_ACTIVE; in qla24xx_async_gpdb()
1335 if (!vha->flags.online || fcport->flags & FCF_ASYNC_SENT) { in qla24xx_async_gpdb()
1338 __func__, fcport->port_name, vha->flags.online, fcport->flags); in qla24xx_async_gpdb()
1342 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); in qla24xx_async_gpdb()
1346 qla2x00_set_fcport_disc_state(fcport, DSC_GPDB); in qla24xx_async_gpdb()
1348 fcport->flags |= FCF_ASYNC_SENT; in qla24xx_async_gpdb()
1351 sp->gen1 = fcport->rscn_gen; in qla24xx_async_gpdb()
1352 sp->gen2 = fcport->login_gen; in qla24xx_async_gpdb()
1367 mb[1] = fcport->loop_id; in qla24xx_async_gpdb()
1382 sp->name, fcport->port_name, sp->handle, opt); in qla24xx_async_gpdb()
1394 fcport->flags &= ~FCF_ASYNC_SENT; in qla24xx_async_gpdb()
1396 fcport->flags &= ~FCF_ASYNC_ACTIVE; in qla24xx_async_gpdb()
1397 qla24xx_post_gpdb_work(vha, fcport, opt); in qla24xx_async_gpdb()
1407 ea->fcport->login_gen++; in __qla24xx_handle_gpdb_event()
1408 ea->fcport->deleted = 0; in __qla24xx_handle_gpdb_event()
1409 ea->fcport->logout_on_delete = 1; in __qla24xx_handle_gpdb_event()
1411 if (!ea->fcport->login_succ && !IS_SW_RESV_ADDR(ea->fcport->d_id)) { in __qla24xx_handle_gpdb_event()
1413 ea->fcport->login_succ = 1; in __qla24xx_handle_gpdb_event()
1416 qla24xx_sched_upd_fcport(ea->fcport); in __qla24xx_handle_gpdb_event()
1418 } else if (ea->fcport->login_succ) { in __qla24xx_handle_gpdb_event()
1426 __func__, __LINE__, ea->fcport->port_name); in __qla24xx_handle_gpdb_event()
1427 qla2x00_set_fcport_disc_state(ea->fcport, DSC_LOGIN_COMPLETE); in __qla24xx_handle_gpdb_event()
1435 fc_port_t *fcport = ea->fcport; in qla24xx_handle_gpdb_event() local
1442 fcport->flags &= ~FCF_ASYNC_SENT; in qla24xx_handle_gpdb_event()
1446 fcport->port_name, fcport->disc_state, pd->current_login_state, in qla24xx_handle_gpdb_event()
1447 fcport->fc4_type, ea->rc); in qla24xx_handle_gpdb_event()
1449 if (fcport->disc_state == DSC_DELETE_PEND) in qla24xx_handle_gpdb_event()
1452 if (NVME_TARGET(vha->hw, fcport)) in qla24xx_handle_gpdb_event()
1457 if (ea->sp->gen2 != fcport->login_gen) { in qla24xx_handle_gpdb_event()
1462 __func__, fcport->port_name); in qla24xx_handle_gpdb_event()
1464 } else if (ea->sp->gen1 != fcport->rscn_gen) { in qla24xx_handle_gpdb_event()
1465 qla_rscn_replay(fcport); in qla24xx_handle_gpdb_event()
1466 qlt_schedule_sess_for_deletion(fcport); in qla24xx_handle_gpdb_event()
1472 __qla24xx_parse_gpdb(vha, fcport, pd); in qla24xx_handle_gpdb_event()
1481 qla2x00_set_fcport_disc_state(fcport, DSC_GNL); in qla24xx_handle_gpdb_event()
1489 __func__, __LINE__, fcport->port_name); in qla24xx_handle_gpdb_event()
1490 qlt_schedule_sess_for_deletion(fcport); in qla24xx_handle_gpdb_event()
1496 static void qla_chk_n2n_b4_login(struct scsi_qla_host *vha, fc_port_t *fcport) in qla_chk_n2n_b4_login() argument
1503 __func__, fcport->port_name, fcport->disc_state, in qla_chk_n2n_b4_login()
1504 fcport->fw_login_state, fcport->loop_id, fcport->login_retry); in qla_chk_n2n_b4_login()
1514 wwn = wwn_to_u64(fcport->port_name); in qla_chk_n2n_b4_login()
1517 else if ((fcport->fw_login_state == DSC_LS_PLOGI_COMP) in qla_chk_n2n_b4_login()
1519 fcport->plogi_nack_done_deadline)) in qla_chk_n2n_b4_login()
1529 if (login && fcport->login_retry) { in qla_chk_n2n_b4_login()
1530 fcport->login_retry--; in qla_chk_n2n_b4_login()
1531 if (fcport->loop_id == FC_NO_LOOP_ID) { in qla_chk_n2n_b4_login()
1532 fcport->fw_login_state = DSC_LS_PORT_UNAVAIL; in qla_chk_n2n_b4_login()
1533 rc = qla2x00_find_new_loop_id(vha, fcport); in qla_chk_n2n_b4_login()
1537 __func__, __LINE__, fcport->port_name); in qla_chk_n2n_b4_login()
1538 fcport->scan_state = 0; in qla_chk_n2n_b4_login()
1539 qlt_schedule_sess_for_deletion(fcport); in qla_chk_n2n_b4_login()
1545 __func__, __LINE__, fcport->port_name); in qla_chk_n2n_b4_login()
1546 qla2x00_post_async_login_work(vha, fcport, NULL); in qla_chk_n2n_b4_login()
1550 int qla24xx_fcport_handle_login(struct scsi_qla_host *vha, fc_port_t *fcport) in qla24xx_fcport_handle_login() argument
1558 __func__, fcport->port_name, fcport->disc_state, in qla24xx_fcport_handle_login()
1559 fcport->fw_login_state, fcport->login_pause, fcport->flags, in qla24xx_fcport_handle_login()
1560 fcport->conflict, fcport->last_rscn_gen, fcport->rscn_gen, in qla24xx_fcport_handle_login()
1561 fcport->login_gen, fcport->loop_id, fcport->scan_state); in qla24xx_fcport_handle_login()
1563 if (fcport->scan_state != QLA_FCPORT_FOUND || in qla24xx_fcport_handle_login()
1564 fcport->disc_state == DSC_DELETE_PEND) in qla24xx_fcport_handle_login()
1567 if ((fcport->loop_id != FC_NO_LOOP_ID) && in qla24xx_fcport_handle_login()
1569 ((fcport->fw_login_state == DSC_LS_PLOGI_PEND) || in qla24xx_fcport_handle_login()
1570 (fcport->fw_login_state == DSC_LS_PRLI_PEND))) in qla24xx_fcport_handle_login()
1573 if (fcport->fw_login_state == DSC_LS_PLOGI_COMP && in qla24xx_fcport_handle_login()
1575 if (time_before_eq(jiffies, fcport->plogi_nack_done_deadline)) { in qla24xx_fcport_handle_login()
1585 if (fcport->flags & (FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE)) { in qla24xx_fcport_handle_login()
1590 switch (fcport->disc_state) { in qla24xx_fcport_handle_login()
1592 wwn = wwn_to_u64(fcport->node_name); in qla24xx_fcport_handle_login()
1595 if (fcport_is_smaller(fcport)) { in qla24xx_fcport_handle_login()
1597 if (fcport->login_retry) { in qla24xx_fcport_handle_login()
1598 if (fcport->loop_id == FC_NO_LOOP_ID) { in qla24xx_fcport_handle_login()
1600 fcport); in qla24xx_fcport_handle_login()
1601 fcport->fw_login_state = in qla24xx_fcport_handle_login()
1604 fcport->login_retry--; in qla24xx_fcport_handle_login()
1605 qla_post_els_plogi_work(vha, fcport); in qla24xx_fcport_handle_login()
1609 fcport->port_name); in qla24xx_fcport_handle_login()
1612 qla24xx_post_gnl_work(vha, fcport); in qla24xx_fcport_handle_login()
1619 __func__, __LINE__, fcport->port_name); in qla24xx_fcport_handle_login()
1620 qla24xx_post_gnnid_work(vha, fcport); in qla24xx_fcport_handle_login()
1621 } else if (fcport->loop_id == FC_NO_LOOP_ID) { in qla24xx_fcport_handle_login()
1624 __func__, __LINE__, fcport->port_name); in qla24xx_fcport_handle_login()
1625 qla24xx_post_gnl_work(vha, fcport); in qla24xx_fcport_handle_login()
1627 qla_chk_n2n_b4_login(vha, fcport); in qla24xx_fcport_handle_login()
1636 if ((fcport->current_login_state & 0xf) == 0x6) { in qla24xx_fcport_handle_login()
1639 __func__, __LINE__, fcport->port_name); in qla24xx_fcport_handle_login()
1640 fcport->chip_reset = in qla24xx_fcport_handle_login()
1642 qla24xx_post_gpdb_work(vha, fcport, 0); in qla24xx_fcport_handle_login()
1646 __func__, __LINE__, fcport->port_name, in qla24xx_fcport_handle_login()
1647 NVME_TARGET(vha->hw, fcport) ? "NVME" : in qla24xx_fcport_handle_login()
1649 qla24xx_post_prli_work(vha, fcport); in qla24xx_fcport_handle_login()
1653 if (fcport->login_pause) { in qla24xx_fcport_handle_login()
1657 fcport->port_name); in qla24xx_fcport_handle_login()
1658 fcport->last_rscn_gen = fcport->rscn_gen; in qla24xx_fcport_handle_login()
1659 fcport->last_login_gen = fcport->login_gen; in qla24xx_fcport_handle_login()
1663 qla_chk_n2n_b4_login(vha, fcport); in qla24xx_fcport_handle_login()
1670 qla_chk_n2n_b4_login(vha, fcport); in qla24xx_fcport_handle_login()
1672 qlt_schedule_sess_for_deletion(fcport); in qla24xx_fcport_handle_login()
1678 qla2x00_post_async_adisc_work(vha, fcport, data); in qla24xx_fcport_handle_login()
1682 if (fcport->fw_login_state == DSC_LS_PLOGI_COMP) in qla24xx_fcport_handle_login()
1683 qla24xx_post_prli_work(vha, fcport); in qla24xx_fcport_handle_login()
1688 fcport->jiffies_at_registration)/1000; in qla24xx_fcport_handle_login()
1689 if (fcport->sec_since_registration < sec && sec && in qla24xx_fcport_handle_login()
1691 fcport->sec_since_registration = sec; in qla24xx_fcport_handle_login()
1692 ql_dbg(ql_dbg_disc, fcport->vha, 0xffff, in qla24xx_fcport_handle_login()
1694 __func__, fcport->port_name, sec); in qla24xx_fcport_handle_login()
1697 if (fcport->next_disc_state != DSC_DELETE_PEND) in qla24xx_fcport_handle_login()
1698 fcport->next_disc_state = DSC_ADISC; in qla24xx_fcport_handle_login()
1730 fc_port_t *fcport; in qla2x00_handle_rscn() local
1735 fcport = qla2x00_find_fcport_by_nportid(vha, &ea->id, 1); in qla2x00_handle_rscn()
1736 if (fcport) { in qla2x00_handle_rscn()
1737 if (fcport->flags & FCF_FCP2_DEVICE && in qla2x00_handle_rscn()
1738 atomic_read(&fcport->state) == FCS_ONLINE) { in qla2x00_handle_rscn()
1741 fcport->d_id.b24, fcport->port_name); in qla2x00_handle_rscn()
1744 fcport->scan_needed = 1; in qla2x00_handle_rscn()
1745 fcport->rscn_gen++; in qla2x00_handle_rscn()
1749 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_handle_rscn()
1750 if (fcport->flags & FCF_FCP2_DEVICE && in qla2x00_handle_rscn()
1751 atomic_read(&fcport->state) == FCS_ONLINE) in qla2x00_handle_rscn()
1754 if ((ea->id.b24 & 0xffff00) == (fcport->d_id.b24 & 0xffff00)) { in qla2x00_handle_rscn()
1755 fcport->scan_needed = 1; in qla2x00_handle_rscn()
1756 fcport->rscn_gen++; in qla2x00_handle_rscn()
1761 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_handle_rscn()
1762 if (fcport->flags & FCF_FCP2_DEVICE && in qla2x00_handle_rscn()
1763 atomic_read(&fcport->state) == FCS_ONLINE) in qla2x00_handle_rscn()
1766 if ((ea->id.b24 & 0xff0000) == (fcport->d_id.b24 & 0xff0000)) { in qla2x00_handle_rscn()
1767 fcport->scan_needed = 1; in qla2x00_handle_rscn()
1768 fcport->rscn_gen++; in qla2x00_handle_rscn()
1774 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_handle_rscn()
1775 if (fcport->flags & FCF_FCP2_DEVICE && in qla2x00_handle_rscn()
1776 atomic_read(&fcport->state) == FCS_ONLINE) in qla2x00_handle_rscn()
1779 fcport->scan_needed = 1; in qla2x00_handle_rscn()
1780 fcport->rscn_gen++; in qla2x00_handle_rscn()
1797 fc_port_t *fcport = ea->fcport; in qla24xx_handle_relogin_event() local
1804 __func__, fcport->port_name, fcport->disc_state, in qla24xx_handle_relogin_event()
1805 fcport->fw_login_state, fcport->login_pause, in qla24xx_handle_relogin_event()
1806 fcport->deleted, fcport->conflict, in qla24xx_handle_relogin_event()
1807 fcport->last_rscn_gen, fcport->rscn_gen, in qla24xx_handle_relogin_event()
1808 fcport->last_login_gen, fcport->login_gen, in qla24xx_handle_relogin_event()
1809 fcport->flags); in qla24xx_handle_relogin_event()
1811 if (fcport->last_rscn_gen != fcport->rscn_gen) { in qla24xx_handle_relogin_event()
1813 __func__, __LINE__, fcport->port_name); in qla24xx_handle_relogin_event()
1814 qla24xx_post_gnl_work(vha, fcport); in qla24xx_handle_relogin_event()
1818 qla24xx_fcport_handle_login(vha, fcport); in qla24xx_handle_relogin_event()
1830 __func__, __LINE__, ea->fcport->port_name); in qla_handle_els_plogi_done()
1831 qla24xx_post_prli_work(vha, ea->fcport); in qla_handle_els_plogi_done()
1838 void qla_rscn_replay(fc_port_t *fcport) in qla_rscn_replay() argument
1842 switch (fcport->disc_state) { in qla_rscn_replay()
1849 if (fcport->scan_needed) { in qla_rscn_replay()
1851 ea.id = fcport->d_id; in qla_rscn_replay()
1853 qla2x00_handle_rscn(fcport->vha, &ea); in qla_rscn_replay()
1889 qla2x00_async_tm_cmd(fc_port_t *fcport, uint32_t flags, uint32_t lun, in qla2x00_async_tm_cmd() argument
1892 struct scsi_qla_host *vha = fcport->vha; in qla2x00_async_tm_cmd()
1897 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); in qla2x00_async_tm_cmd()
1916 sp->handle, fcport->loop_id, fcport->d_id.b.domain, in qla2x00_async_tm_cmd()
1917 fcport->d_id.b.area, fcport->d_id.b.al_pa); in qla2x00_async_tm_cmd()
1937 fcport->loop_id, lun, in qla2x00_async_tm_cmd()
1943 fcport->flags &= ~FCF_ASYNC_SENT; in qla2x00_async_tm_cmd()
1954 fc_port_t *fcport = sp->fcport; in qla24xx_async_abort_command() local
1956 struct scsi_qla_host *vha = fcport->vha; in qla24xx_async_abort_command()
1971 return qlafx00_fx_disc(vha, &vha->hw->mr.fcport, in qla24xx_async_abort_command()
1987 __func__, __LINE__, ea->fcport->port_name); in qla24xx_handle_prli_done_event()
1989 ea->fcport->chip_reset = vha->hw->base_qpair->chip_reset; in qla24xx_handle_prli_done_event()
1990 ea->fcport->logout_on_delete = 1; in qla24xx_handle_prli_done_event()
1991 ea->fcport->nvme_prli_service_param = ea->iop[0]; in qla24xx_handle_prli_done_event()
1993 ea->fcport->nvme_first_burst_size = in qla24xx_handle_prli_done_event()
1996 ea->fcport->nvme_first_burst_size = 0; in qla24xx_handle_prli_done_event()
1997 qla24xx_post_gpdb_work(vha, ea->fcport, 0); in qla24xx_handle_prli_done_event()
2003 ea->fcport->fw_login_state = DSC_LS_PLOGI_COMP; in qla24xx_handle_prli_done_event()
2009 __func__, __LINE__, ea->fcport->port_name, in qla24xx_handle_prli_done_event()
2011 "FCP" : "NVMe", ea->fcport->fc4_type); in qla24xx_handle_prli_done_event()
2015 ea->fcport->fc4_type &= ~FS_FC4TYPE_NVME; in qla24xx_handle_prli_done_event()
2016 ea->fcport->fc4_type |= FS_FC4TYPE_FCP; in qla24xx_handle_prli_done_event()
2018 ea->fcport->fc4_type &= ~FS_FC4TYPE_FCP; in qla24xx_handle_prli_done_event()
2019 ea->fcport->fc4_type |= FS_FC4TYPE_NVME; in qla24xx_handle_prli_done_event()
2022 if (ea->fcport->n2n_link_reset_cnt < 3) { in qla24xx_handle_prli_done_event()
2023 ea->fcport->n2n_link_reset_cnt++; in qla24xx_handle_prli_done_event()
2034 ea->fcport->port_name); in qla24xx_handle_prli_done_event()
2041 if (NVME_FCP_TARGET(ea->fcport)) { in qla24xx_handle_prli_done_event()
2045 ea->fcport->port_name, in qla24xx_handle_prli_done_event()
2046 (ea->fcport->fc4_type & FS_FC4TYPE_NVME) in qla24xx_handle_prli_done_event()
2049 ea->fcport->fc4_type &= ~FS_FC4TYPE_NVME; in qla24xx_handle_prli_done_event()
2051 ea->fcport->fc4_type &= ~FS_FC4TYPE_FCP; in qla24xx_handle_prli_done_event()
2054 ea->fcport->flags &= ~FCF_ASYNC_SENT; in qla24xx_handle_prli_done_event()
2055 ea->fcport->keep_nport_handle = 0; in qla24xx_handle_prli_done_event()
2056 ea->fcport->logout_on_delete = 1; in qla24xx_handle_prli_done_event()
2057 qlt_schedule_sess_for_deletion(ea->fcport); in qla24xx_handle_prli_done_event()
2070 struct fc_port *fcport = ea->fcport; in qla24xx_handle_plogi_done_event() local
2074 __func__, fcport->port_name, fcport->disc_state, in qla24xx_handle_plogi_done_event()
2075 fcport->fw_login_state, ea->rc, ea->sp->gen2, fcport->login_gen, in qla24xx_handle_plogi_done_event()
2076 ea->sp->gen1, fcport->rscn_gen, in qla24xx_handle_plogi_done_event()
2079 if ((fcport->fw_login_state == DSC_LS_PLOGI_PEND) || in qla24xx_handle_plogi_done_event()
2080 (fcport->fw_login_state == DSC_LS_PRLI_PEND)) { in qla24xx_handle_plogi_done_event()
2083 __func__, __LINE__, fcport->port_name); in qla24xx_handle_plogi_done_event()
2087 if ((fcport->disc_state == DSC_DELETE_PEND) || in qla24xx_handle_plogi_done_event()
2088 (fcport->disc_state == DSC_DELETED)) { in qla24xx_handle_plogi_done_event()
2093 if (ea->sp->gen2 != fcport->login_gen) { in qla24xx_handle_plogi_done_event()
2097 __func__, fcport->port_name); in qla24xx_handle_plogi_done_event()
2100 } else if (ea->sp->gen1 != fcport->rscn_gen) { in qla24xx_handle_plogi_done_event()
2103 __func__, fcport->port_name); in qla24xx_handle_plogi_done_event()
2104 qla_rscn_replay(fcport); in qla24xx_handle_plogi_done_event()
2105 qlt_schedule_sess_for_deletion(fcport); in qla24xx_handle_plogi_done_event()
2119 if (NVME_TARGET(vha->hw, ea->fcport)) { in qla24xx_handle_plogi_done_event()
2122 __func__, __LINE__, ea->fcport->port_name); in qla24xx_handle_plogi_done_event()
2123 qla24xx_post_prli_work(vha, ea->fcport); in qla24xx_handle_plogi_done_event()
2127 __func__, __LINE__, ea->fcport->port_name, in qla24xx_handle_plogi_done_event()
2128 ea->fcport->loop_id, ea->fcport->d_id.b24); in qla24xx_handle_plogi_done_event()
2130 set_bit(ea->fcport->loop_id, vha->hw->loop_id_map); in qla24xx_handle_plogi_done_event()
2132 ea->fcport->chip_reset = vha->hw->base_qpair->chip_reset; in qla24xx_handle_plogi_done_event()
2133 ea->fcport->logout_on_delete = 1; in qla24xx_handle_plogi_done_event()
2134 ea->fcport->send_els_logo = 0; in qla24xx_handle_plogi_done_event()
2135 ea->fcport->fw_login_state = DSC_LS_PRLI_COMP; in qla24xx_handle_plogi_done_event()
2138 qla24xx_post_gpdb_work(vha, ea->fcport, 0); in qla24xx_handle_plogi_done_event()
2143 __func__, __LINE__, ea->fcport->port_name, ea->data[1]); in qla24xx_handle_plogi_done_event()
2145 qlt_schedule_sess_for_deletion(ea->fcport); in qla24xx_handle_plogi_done_event()
2156 __func__, __LINE__, ea->fcport->port_name, in qla24xx_handle_plogi_done_event()
2157 ea->fcport->loop_id, cid.b24); in qla24xx_handle_plogi_done_event()
2159 set_bit(ea->fcport->loop_id, vha->hw->loop_id_map); in qla24xx_handle_plogi_done_event()
2160 ea->fcport->loop_id = FC_NO_LOOP_ID; in qla24xx_handle_plogi_done_event()
2161 qla24xx_post_gnl_work(vha, ea->fcport); in qla24xx_handle_plogi_done_event()
2166 wwn_to_u64(ea->fcport->port_name), in qla24xx_handle_plogi_done_event()
2167 ea->fcport->d_id, lid, &conflict_fcport); in qla24xx_handle_plogi_done_event()
2175 conflict_fcport->conflict = ea->fcport; in qla24xx_handle_plogi_done_event()
2176 ea->fcport->login_pause = 1; in qla24xx_handle_plogi_done_event()
2180 __func__, __LINE__, ea->fcport->port_name, in qla24xx_handle_plogi_done_event()
2181 ea->fcport->d_id.b24, lid); in qla24xx_handle_plogi_done_event()
2185 __func__, __LINE__, ea->fcport->port_name, in qla24xx_handle_plogi_done_event()
2186 ea->fcport->d_id.b24, lid); in qla24xx_handle_plogi_done_event()
2188 qla2x00_clear_loop_id(ea->fcport); in qla24xx_handle_plogi_done_event()
2190 ea->fcport->loop_id = lid; in qla24xx_handle_plogi_done_event()
2191 ea->fcport->keep_nport_handle = 0; in qla24xx_handle_plogi_done_event()
2192 ea->fcport->logout_on_delete = 1; in qla24xx_handle_plogi_done_event()
2193 qlt_schedule_sess_for_deletion(ea->fcport); in qla24xx_handle_plogi_done_event()
4995 fc_port_t *fcport = data; in qla2x00_rport_del() local
4999 spin_lock_irqsave(fcport->vha->host->host_lock, flags); in qla2x00_rport_del()
5000 rport = fcport->drport ? fcport->drport : fcport->rport; in qla2x00_rport_del()
5001 fcport->drport = NULL; in qla2x00_rport_del()
5002 spin_unlock_irqrestore(fcport->vha->host->host_lock, flags); in qla2x00_rport_del()
5004 ql_dbg(ql_dbg_disc, fcport->vha, 0x210b, in qla2x00_rport_del()
5006 __func__, fcport->port_name, rport, in qla2x00_rport_del()
5013 void qla2x00_set_fcport_state(fc_port_t *fcport, int state) in qla2x00_set_fcport_state() argument
5017 old_state = atomic_read(&fcport->state); in qla2x00_set_fcport_state()
5018 atomic_set(&fcport->state, state); in qla2x00_set_fcport_state()
5022 ql_dbg(ql_dbg_disc, fcport->vha, 0x207d, in qla2x00_set_fcport_state()
5024 fcport->port_name, port_state_str[old_state], in qla2x00_set_fcport_state()
5025 port_state_str[state], fcport->d_id.b.domain, in qla2x00_set_fcport_state()
5026 fcport->d_id.b.area, fcport->d_id.b.al_pa); in qla2x00_set_fcport_state()
5040 fc_port_t *fcport; in qla2x00_alloc_fcport() local
5042 fcport = kzalloc(sizeof(fc_port_t), flags); in qla2x00_alloc_fcport()
5043 if (!fcport) in qla2x00_alloc_fcport()
5046 fcport->ct_desc.ct_sns = dma_alloc_coherent(&vha->hw->pdev->dev, in qla2x00_alloc_fcport()
5047 sizeof(struct ct_sns_pkt), &fcport->ct_desc.ct_sns_dma, in qla2x00_alloc_fcport()
5049 if (!fcport->ct_desc.ct_sns) { in qla2x00_alloc_fcport()
5052 kfree(fcport); in qla2x00_alloc_fcport()
5057 fcport->vha = vha; in qla2x00_alloc_fcport()
5058 fcport->port_type = FCT_UNKNOWN; in qla2x00_alloc_fcport()
5059 fcport->loop_id = FC_NO_LOOP_ID; in qla2x00_alloc_fcport()
5060 qla2x00_set_fcport_state(fcport, FCS_UNCONFIGURED); in qla2x00_alloc_fcport()
5061 fcport->supported_classes = FC_COS_UNSPECIFIED; in qla2x00_alloc_fcport()
5062 fcport->fp_speed = PORT_SPEED_UNKNOWN; in qla2x00_alloc_fcport()
5064 fcport->disc_state = DSC_DELETED; in qla2x00_alloc_fcport()
5065 fcport->fw_login_state = DSC_LS_PORT_UNAVAIL; in qla2x00_alloc_fcport()
5066 fcport->deleted = QLA_SESS_DELETED; in qla2x00_alloc_fcport()
5067 fcport->login_retry = vha->hw->login_retry_count; in qla2x00_alloc_fcport()
5068 fcport->chip_reset = vha->hw->base_qpair->chip_reset; in qla2x00_alloc_fcport()
5069 fcport->logout_on_delete = 1; in qla2x00_alloc_fcport()
5071 if (!fcport->ct_desc.ct_sns) { in qla2x00_alloc_fcport()
5074 kfree(fcport); in qla2x00_alloc_fcport()
5078 INIT_WORK(&fcport->del_work, qla24xx_delete_sess_fn); in qla2x00_alloc_fcport()
5079 INIT_WORK(&fcport->free_work, qlt_free_session_done); in qla2x00_alloc_fcport()
5080 INIT_WORK(&fcport->reg_work, qla_register_fcport_fn); in qla2x00_alloc_fcport()
5081 INIT_LIST_HEAD(&fcport->gnl_entry); in qla2x00_alloc_fcport()
5082 INIT_LIST_HEAD(&fcport->list); in qla2x00_alloc_fcport()
5084 return fcport; in qla2x00_alloc_fcport()
5088 qla2x00_free_fcport(fc_port_t *fcport) in qla2x00_free_fcport() argument
5090 if (fcport->ct_desc.ct_sns) { in qla2x00_free_fcport()
5091 dma_free_coherent(&fcport->vha->hw->pdev->dev, in qla2x00_free_fcport()
5092 sizeof(struct ct_sns_pkt), fcport->ct_desc.ct_sns, in qla2x00_free_fcport()
5093 fcport->ct_desc.ct_sns_dma); in qla2x00_free_fcport()
5095 fcport->ct_desc.ct_sns = NULL; in qla2x00_free_fcport()
5097 list_del(&fcport->list); in qla2x00_free_fcport()
5098 qla2x00_clear_loop_id(fcport); in qla2x00_free_fcport()
5099 kfree(fcport); in qla2x00_free_fcport()
5254 fc_port_t *fcport; in qla2x00_configure_n2n_loop() local
5259 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_configure_n2n_loop()
5260 if (fcport->n2n_flag) { in qla2x00_configure_n2n_loop()
5261 qla24xx_fcport_handle_login(vha, fcport); in qla2x00_configure_n2n_loop()
5309 fc_port_t *fcport, *new_fcport; in qla2x00_configure_local_loop() local
5364 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_configure_local_loop()
5365 fcport->scan_state = QLA_FCPORT_SCAN; in qla2x00_configure_local_loop()
5432 fcport = NULL; in qla2x00_configure_local_loop()
5433 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_configure_local_loop()
5434 if (memcmp(new_fcport->port_name, fcport->port_name, in qla2x00_configure_local_loop()
5438 fcport->flags &= ~FCF_FABRIC_DEVICE; in qla2x00_configure_local_loop()
5439 fcport->loop_id = new_fcport->loop_id; in qla2x00_configure_local_loop()
5440 fcport->port_type = new_fcport->port_type; in qla2x00_configure_local_loop()
5441 fcport->d_id.b24 = new_fcport->d_id.b24; in qla2x00_configure_local_loop()
5442 memcpy(fcport->node_name, new_fcport->node_name, in qla2x00_configure_local_loop()
5444 fcport->scan_state = QLA_FCPORT_FOUND; in qla2x00_configure_local_loop()
5445 if (fcport->login_retry == 0) { in qla2x00_configure_local_loop()
5446 fcport->login_retry = vha->hw->login_retry_count; in qla2x00_configure_local_loop()
5449 fcport->port_name, fcport->loop_id, in qla2x00_configure_local_loop()
5450 fcport->login_retry); in qla2x00_configure_local_loop()
5461 fcport = new_fcport; in qla2x00_configure_local_loop()
5480 fcport->fp_speed = ha->link_data_rate; in qla2x00_configure_local_loop()
5485 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_configure_local_loop()
5489 if (fcport->scan_state == QLA_FCPORT_SCAN) { in qla2x00_configure_local_loop()
5492 atomic_read(&fcport->state) == FCS_ONLINE) { in qla2x00_configure_local_loop()
5493 qla2x00_mark_device_lost(vha, fcport, in qla2x00_configure_local_loop()
5495 if (fcport->loop_id != FC_NO_LOOP_ID && in qla2x00_configure_local_loop()
5496 (fcport->flags & FCF_FCP2_DEVICE) == 0 && in qla2x00_configure_local_loop()
5497 fcport->port_type != FCT_INITIATOR && in qla2x00_configure_local_loop()
5498 fcport->port_type != FCT_BROADCAST) { in qla2x00_configure_local_loop()
5502 fcport->port_name); in qla2x00_configure_local_loop()
5504 qlt_schedule_sess_for_deletion(fcport); in qla2x00_configure_local_loop()
5510 if (fcport->scan_state == QLA_FCPORT_FOUND) in qla2x00_configure_local_loop()
5511 qla24xx_fcport_handle_login(vha, fcport); in qla2x00_configure_local_loop()
5525 qla2x00_iidma_fcport(scsi_qla_host_t *vha, fc_port_t *fcport) in qla2x00_iidma_fcport() argument
5534 if (atomic_read(&fcport->state) != FCS_ONLINE) in qla2x00_iidma_fcport()
5537 if (fcport->fp_speed == PORT_SPEED_UNKNOWN || in qla2x00_iidma_fcport()
5538 fcport->fp_speed > ha->link_data_rate || in qla2x00_iidma_fcport()
5542 rval = qla2x00_set_idma_speed(vha, fcport->loop_id, fcport->fp_speed, in qla2x00_iidma_fcport()
5547 fcport->port_name, rval, fcport->fp_speed, mb[0], mb[1]); in qla2x00_iidma_fcport()
5551 qla2x00_get_link_speed_str(ha, fcport->fp_speed), in qla2x00_iidma_fcport()
5552 fcport->fp_speed, fcport->port_name); in qla2x00_iidma_fcport()
5556 void qla_do_iidma_work(struct scsi_qla_host *vha, fc_port_t *fcport) in qla_do_iidma_work() argument
5558 qla2x00_iidma_fcport(vha, fcport); in qla_do_iidma_work()
5559 qla24xx_update_fcport_fcp_prio(vha, fcport); in qla_do_iidma_work()
5562 int qla_post_iidma_work(struct scsi_qla_host *vha, fc_port_t *fcport) in qla_post_iidma_work() argument
5570 e->u.fcport.fcport = fcport; in qla_post_iidma_work()
5576 qla2x00_reg_remote_port(scsi_qla_host_t *vha, fc_port_t *fcport) in qla2x00_reg_remote_port() argument
5582 if (atomic_read(&fcport->state) == FCS_ONLINE) in qla2x00_reg_remote_port()
5585 rport_ids.node_name = wwn_to_u64(fcport->node_name); in qla2x00_reg_remote_port()
5586 rport_ids.port_name = wwn_to_u64(fcport->port_name); in qla2x00_reg_remote_port()
5587 rport_ids.port_id = fcport->d_id.b.domain << 16 | in qla2x00_reg_remote_port()
5588 fcport->d_id.b.area << 8 | fcport->d_id.b.al_pa; in qla2x00_reg_remote_port()
5590 fcport->rport = rport = fc_remote_port_add(vha->host, 0, &rport_ids); in qla2x00_reg_remote_port()
5597 spin_lock_irqsave(fcport->vha->host->host_lock, flags); in qla2x00_reg_remote_port()
5598 *((fc_port_t **)rport->dd_data) = fcport; in qla2x00_reg_remote_port()
5599 spin_unlock_irqrestore(fcport->vha->host->host_lock, flags); in qla2x00_reg_remote_port()
5601 rport->supported_classes = fcport->supported_classes; in qla2x00_reg_remote_port()
5604 if (fcport->port_type == FCT_INITIATOR) in qla2x00_reg_remote_port()
5606 if (fcport->port_type == FCT_TARGET) in qla2x00_reg_remote_port()
5608 if (fcport->port_type & FCT_NVME_INITIATOR) in qla2x00_reg_remote_port()
5610 if (fcport->port_type & FCT_NVME_TARGET) in qla2x00_reg_remote_port()
5612 if (fcport->port_type & FCT_NVME_DISCOVERY) in qla2x00_reg_remote_port()
5617 __func__, fcport->port_name, rport, in qla2x00_reg_remote_port()
5618 (fcport->port_type == FCT_TARGET) ? "tgt" : in qla2x00_reg_remote_port()
5619 ((fcport->port_type & FCT_NVME) ? "nvme" : "ini")); in qla2x00_reg_remote_port()
5640 qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport) in qla2x00_update_fcport() argument
5642 if (IS_SW_RESV_ADDR(fcport->d_id)) in qla2x00_update_fcport()
5646 __func__, fcport->port_name); in qla2x00_update_fcport()
5648 qla2x00_set_fcport_disc_state(fcport, DSC_UPD_FCPORT); in qla2x00_update_fcport()
5649 fcport->login_retry = vha->hw->login_retry_count; in qla2x00_update_fcport()
5650 fcport->flags &= ~(FCF_LOGIN_NEEDED | FCF_ASYNC_SENT); in qla2x00_update_fcport()
5651 fcport->deleted = 0; in qla2x00_update_fcport()
5653 fcport->logout_on_delete = 0; in qla2x00_update_fcport()
5655 fcport->logout_on_delete = 1; in qla2x00_update_fcport()
5656 fcport->n2n_chip_reset = fcport->n2n_link_reset_cnt = 0; in qla2x00_update_fcport()
5661 fcport->keep_nport_handle = 1; in qla2x00_update_fcport()
5667 qla2x00_iidma_fcport(vha, fcport); in qla2x00_update_fcport()
5669 qla2x00_dfs_create_rport(vha, fcport); in qla2x00_update_fcport()
5671 if (NVME_TARGET(vha->hw, fcport)) { in qla2x00_update_fcport()
5672 qla_nvme_register_remote(vha, fcport); in qla2x00_update_fcport()
5673 qla2x00_set_fcport_disc_state(fcport, DSC_LOGIN_COMPLETE); in qla2x00_update_fcport()
5674 qla2x00_set_fcport_state(fcport, FCS_ONLINE); in qla2x00_update_fcport()
5678 qla24xx_update_fcport_fcp_prio(vha, fcport); in qla2x00_update_fcport()
5682 qla2x00_reg_remote_port(vha, fcport); in qla2x00_update_fcport()
5687 qlt_fc_port_added(vha, fcport); in qla2x00_update_fcport()
5690 qla2x00_reg_remote_port(vha, fcport); in qla2x00_update_fcport()
5693 qlt_fc_port_added(vha, fcport); in qla2x00_update_fcport()
5699 qla2x00_set_fcport_state(fcport, FCS_ONLINE); in qla2x00_update_fcport()
5702 if (fcport->id_changed) { in qla2x00_update_fcport()
5703 fcport->id_changed = 0; in qla2x00_update_fcport()
5706 __func__, __LINE__, fcport->port_name, in qla2x00_update_fcport()
5708 qla24xx_post_gfpnid_work(vha, fcport); in qla2x00_update_fcport()
5712 __func__, __LINE__, fcport->port_name, in qla2x00_update_fcport()
5714 qla24xx_post_gpsc_work(vha, fcport); in qla2x00_update_fcport()
5718 qla2x00_set_fcport_disc_state(fcport, DSC_LOGIN_COMPLETE); in qla2x00_update_fcport()
5723 fc_port_t *fcport = container_of(work, struct fc_port, reg_work); in qla_register_fcport_fn() local
5724 u32 rscn_gen = fcport->rscn_gen; in qla_register_fcport_fn()
5727 if (IS_SW_RESV_ADDR(fcport->d_id)) in qla_register_fcport_fn()
5730 qla2x00_update_fcport(fcport->vha, fcport); in qla_register_fcport_fn()
5732 if (rscn_gen != fcport->rscn_gen) { in qla_register_fcport_fn()
5734 switch (fcport->next_disc_state) { in qla_register_fcport_fn()
5736 qlt_schedule_sess_for_deletion(fcport); in qla_register_fcport_fn()
5740 qla2x00_post_async_adisc_work(fcport->vha, fcport, in qla_register_fcport_fn()
5764 fc_port_t *fcport; in qla2x00_configure_fabric() local
5873 list_for_each_entry(fcport, &vha->vp_fcports, list) in qla2x00_configure_fabric()
5874 fcport->scan_state = QLA_FCPORT_SCAN; in qla2x00_configure_fabric()
5910 fc_port_t *fcport, *new_fcport; in qla2x00_find_all_fabric_devs() local
6068 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_find_all_fabric_devs()
6069 if (memcmp(new_fcport->port_name, fcport->port_name, in qla2x00_find_all_fabric_devs()
6073 fcport->scan_state = QLA_FCPORT_FOUND; in qla2x00_find_all_fabric_devs()
6078 memcpy(fcport->fabric_port_name, in qla2x00_find_all_fabric_devs()
6080 fcport->fp_speed = new_fcport->fp_speed; in qla2x00_find_all_fabric_devs()
6086 if (fcport->d_id.b24 == new_fcport->d_id.b24 && in qla2x00_find_all_fabric_devs()
6087 (atomic_read(&fcport->state) == FCS_ONLINE || in qla2x00_find_all_fabric_devs()
6095 if ((fcport->flags & FCF_FABRIC_DEVICE) == 0) { in qla2x00_find_all_fabric_devs()
6096 fcport->d_id.b24 = new_fcport->d_id.b24; in qla2x00_find_all_fabric_devs()
6097 qla2x00_clear_loop_id(fcport); in qla2x00_find_all_fabric_devs()
6098 fcport->flags |= (FCF_FABRIC_DEVICE | in qla2x00_find_all_fabric_devs()
6112 fcport->port_name, in qla2x00_find_all_fabric_devs()
6113 fcport->d_id.b.domain, in qla2x00_find_all_fabric_devs()
6114 fcport->d_id.b.area, in qla2x00_find_all_fabric_devs()
6115 fcport->d_id.b.al_pa, in qla2x00_find_all_fabric_devs()
6116 fcport->loop_id, in qla2x00_find_all_fabric_devs()
6120 fcport->d_id.b24 = new_fcport->d_id.b24; in qla2x00_find_all_fabric_devs()
6124 fcport->d_id.b24 = new_fcport->d_id.b24; in qla2x00_find_all_fabric_devs()
6125 fcport->flags |= FCF_LOGIN_NEEDED; in qla2x00_find_all_fabric_devs()
6129 if (found && NVME_TARGET(vha->hw, fcport)) { in qla2x00_find_all_fabric_devs()
6130 if (fcport->disc_state == DSC_DELETE_PEND) { in qla2x00_find_all_fabric_devs()
6131 qla2x00_set_fcport_disc_state(fcport, DSC_GNL); in qla2x00_find_all_fabric_devs()
6133 fcport->login_succ = 0; in qla2x00_find_all_fabric_devs()
6165 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_find_all_fabric_devs()
6169 if ((fcport->flags & FCF_FABRIC_DEVICE) == 0) in qla2x00_find_all_fabric_devs()
6172 if (fcport->scan_state == QLA_FCPORT_SCAN) { in qla2x00_find_all_fabric_devs()
6175 atomic_read(&fcport->state) == FCS_ONLINE) { in qla2x00_find_all_fabric_devs()
6176 qla2x00_mark_device_lost(vha, fcport, in qla2x00_find_all_fabric_devs()
6178 if (fcport->loop_id != FC_NO_LOOP_ID && in qla2x00_find_all_fabric_devs()
6179 (fcport->flags & FCF_FCP2_DEVICE) == 0 && in qla2x00_find_all_fabric_devs()
6180 fcport->port_type != FCT_INITIATOR && in qla2x00_find_all_fabric_devs()
6181 fcport->port_type != FCT_BROADCAST) { in qla2x00_find_all_fabric_devs()
6185 fcport->port_name); in qla2x00_find_all_fabric_devs()
6186 qlt_schedule_sess_for_deletion(fcport); in qla2x00_find_all_fabric_devs()
6192 if (fcport->scan_state == QLA_FCPORT_FOUND && in qla2x00_find_all_fabric_devs()
6193 (fcport->flags & FCF_LOGIN_NEEDED) != 0) in qla2x00_find_all_fabric_devs()
6194 qla24xx_fcport_handle_login(vha, fcport); in qla2x00_find_all_fabric_devs()
6242 qla2x00_fabric_login(scsi_qla_host_t *vha, fc_port_t *fcport, in qla2x00_fabric_login() argument
6258 fcport->loop_id, fcport->d_id.b.domain, in qla2x00_fabric_login()
6259 fcport->d_id.b.area, fcport->d_id.b.al_pa); in qla2x00_fabric_login()
6262 rval = ha->isp_ops->fabric_login(vha, fcport->loop_id, in qla2x00_fabric_login()
6263 fcport->d_id.b.domain, fcport->d_id.b.area, in qla2x00_fabric_login()
6264 fcport->d_id.b.al_pa, mb, BIT_0); in qla2x00_fabric_login()
6277 tmp_loopid = fcport->loop_id; in qla2x00_fabric_login()
6278 fcport->loop_id = mb[1]; in qla2x00_fabric_login()
6283 fcport->loop_id, fcport->d_id.b.domain, in qla2x00_fabric_login()
6284 fcport->d_id.b.area, fcport->d_id.b.al_pa); in qla2x00_fabric_login()
6298 *next_loopid = (fcport->loop_id + 1); in qla2x00_fabric_login()
6302 fcport->port_type = FCT_INITIATOR; in qla2x00_fabric_login()
6304 fcport->port_type = FCT_TARGET; in qla2x00_fabric_login()
6306 fcport->flags |= FCF_FCP2_DEVICE; in qla2x00_fabric_login()
6311 fcport->supported_classes |= FC_COS_CLASS2; in qla2x00_fabric_login()
6313 fcport->supported_classes |= FC_COS_CLASS3; in qla2x00_fabric_login()
6317 fcport->flags |= in qla2x00_fabric_login()
6327 fcport->loop_id++; in qla2x00_fabric_login()
6328 rval = qla2x00_find_new_loop_id(vha, fcport); in qla2x00_fabric_login()
6339 *next_loopid = fcport->loop_id; in qla2x00_fabric_login()
6340 ha->isp_ops->fabric_logout(vha, fcport->loop_id, in qla2x00_fabric_login()
6341 fcport->d_id.b.domain, fcport->d_id.b.area, in qla2x00_fabric_login()
6342 fcport->d_id.b.al_pa); in qla2x00_fabric_login()
6343 qla2x00_mark_device_lost(vha, fcport, 1); in qla2x00_fabric_login()
6353 "jiffies=%lx.\n", mb[0], fcport->d_id.b.domain, in qla2x00_fabric_login()
6354 fcport->d_id.b.area, fcport->d_id.b.al_pa, in qla2x00_fabric_login()
6355 fcport->loop_id, jiffies); in qla2x00_fabric_login()
6357 *next_loopid = fcport->loop_id; in qla2x00_fabric_login()
6358 ha->isp_ops->fabric_logout(vha, fcport->loop_id, in qla2x00_fabric_login()
6359 fcport->d_id.b.domain, fcport->d_id.b.area, in qla2x00_fabric_login()
6360 fcport->d_id.b.al_pa); in qla2x00_fabric_login()
6361 qla2x00_clear_loop_id(fcport); in qla2x00_fabric_login()
6362 fcport->login_retry = 0; in qla2x00_fabric_login()
6386 qla2x00_local_device_login(scsi_qla_host_t *vha, fc_port_t *fcport) in qla2x00_local_device_login() argument
6392 rval = qla2x00_login_local_device(vha, fcport, mb, BIT_0); in qla2x00_local_device_login()
6497 fc_port_t *fcport; in qla2x00_update_fcports() local
6506 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_update_fcports()
6507 if (fcport->drport && in qla2x00_update_fcports()
6508 atomic_read(&fcport->state) != FCS_UNCONFIGURED) { in qla2x00_update_fcports()
6510 qla2x00_rport_del(fcport); in qla2x00_update_fcports()
6876 fc_port_t *fcport; in qla2x00_abort_isp_cleanup() local
6955 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_abort_isp_cleanup()
6956 fcport->flags &= ~(FCF_LOGIN_NEEDED | FCF_ASYNC_SENT); in qla2x00_abort_isp_cleanup()
6957 fcport->scan_state = 0; in qla2x00_abort_isp_cleanup()
6964 list_for_each_entry(fcport, &vp->vp_fcports, list) in qla2x00_abort_isp_cleanup()
6965 fcport->flags &= ~(FCF_LOGIN_NEEDED | FCF_ASYNC_SENT); in qla2x00_abort_isp_cleanup()
8942 qla24xx_get_fcp_prio(scsi_qla_host_t *vha, fc_port_t *fcport) in qla24xx_get_fcp_prio() argument
8980 pid2 = fcport->d_id.b24 & INVALID_PORT_ID; in qla24xx_get_fcp_prio()
8999 wwn1 = wwn_to_u64(fcport->port_name); in qla24xx_get_fcp_prio()
9035 qla24xx_update_fcport_fcp_prio(scsi_qla_host_t *vha, fc_port_t *fcport) in qla24xx_update_fcport_fcp_prio() argument
9041 if (fcport->port_type != FCT_TARGET || in qla24xx_update_fcport_fcp_prio()
9042 fcport->loop_id == FC_NO_LOOP_ID) in qla24xx_update_fcport_fcp_prio()
9045 priority = qla24xx_get_fcp_prio(vha, fcport); in qla24xx_update_fcport_fcp_prio()
9050 fcport->fcp_prio = priority & 0xf; in qla24xx_update_fcport_fcp_prio()
9054 ret = qla24xx_set_fcp_prio(vha, fcport->loop_id, priority, mb); in qla24xx_update_fcport_fcp_prio()
9056 if (fcport->fcp_prio != priority) in qla24xx_update_fcport_fcp_prio()
9060 fcport->loop_id, fcport->d_id.b.domain, in qla24xx_update_fcport_fcp_prio()
9061 fcport->d_id.b.area, fcport->d_id.b.al_pa); in qla24xx_update_fcport_fcp_prio()
9062 fcport->fcp_prio = priority & 0xf; in qla24xx_update_fcport_fcp_prio()
9066 "loop_id=%d port_id=%02x%02x%02x.\n", ret, fcport->loop_id, in qla24xx_update_fcport_fcp_prio()
9067 fcport->d_id.b.domain, fcport->d_id.b.area, in qla24xx_update_fcport_fcp_prio()
9068 fcport->d_id.b.al_pa); in qla24xx_update_fcport_fcp_prio()
9089 fc_port_t *fcport; in qla24xx_update_all_fcp_prio() local
9093 list_for_each_entry(fcport, &vha->vp_fcports, list) in qla24xx_update_all_fcp_prio()
9094 ret = qla24xx_update_fcport_fcp_prio(vha, fcport); in qla24xx_update_all_fcp_prio()