Lines Matching refs:vha
38 static void qla24xx_handle_gpdb_event(scsi_qla_host_t *vha,
78 qla2x00_get_async_timeout(struct scsi_qla_host *vha) in qla2x00_get_async_timeout() argument
81 struct qla_hw_data *ha = vha->hw; in qla2x00_get_async_timeout()
106 ql_dbg(ql_dbg_async, sp->vha, 0x507c, in qla24xx_abort_iocb_timeout()
111 ql_dbg(ql_dbg_async, sp->vha, 0x507c, in qla24xx_abort_iocb_timeout()
149 scsi_qla_host_t *vha = cmd_sp->vha; in qla24xx_async_abort_cmd() local
154 sp = qla2xxx_get_qpair_sp(cmd_sp->vha, cmd_sp->qpair, cmd_sp->fcport, in qla24xx_async_abort_cmd()
177 ql_dbg(ql_dbg_async, vha, 0x507c, in qla24xx_async_abort_cmd()
207 ql_dbg(ql_dbg_disc, fcport->vha, 0x2071, in qla2x00_async_iocb_timeout()
269 struct scsi_qla_host *vha = sp->vha; in qla2x00_async_login_sp_done() local
273 ql_dbg(ql_dbg_disc, vha, 0x20dd, in qla2x00_async_login_sp_done()
278 if (!test_bit(UNLOADING, &vha->dpc_flags)) { in qla2x00_async_login_sp_done()
286 qla24xx_handle_plogi_done_event(vha, &ea); in qla2x00_async_login_sp_done()
296 wwn_to_u64(fcport->vha->port_name)) in fcport_is_smaller()
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()
318 ql_log(ql_log_warn, vha, 0xffff, in qla2x00_async_login()
324 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); in qla2x00_async_login()
339 qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha) + 2); 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()
350 ql_dbg(ql_dbg_disc, vha, 0x2072, in qla2x00_async_login()
359 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla2x00_async_login()
382 qla2x00_async_logout(struct scsi_qla_host *vha, fc_port_t *fcport) in qla2x00_async_logout() argument
389 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); in qla2x00_async_logout()
398 qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha) + 2); in qla2x00_async_logout()
402 ql_dbg(ql_dbg_disc, vha, 0x2070, in qla2x00_async_logout()
421 qla2x00_async_prlo_done(struct scsi_qla_host *vha, fc_port_t *fcport, in qla2x00_async_prlo_done() argument
427 qla2x00_mark_device_lost(vha, fcport, 1); in qla2x00_async_prlo_done()
434 struct scsi_qla_host *vha = sp->vha; in qla2x00_async_prlo_sp_done() local
437 if (!test_bit(UNLOADING, &vha->dpc_flags)) 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()
460 qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha) + 2); in qla2x00_async_prlo()
464 ql_dbg(ql_dbg_disc, vha, 0x2070, in qla2x00_async_prlo()
483 void qla24xx_handle_adisc_event(scsi_qla_host_t *vha, struct event_arg *ea) in qla24xx_handle_adisc_event() argument
487 ql_dbg(ql_dbg_disc, vha, 0x20d2, in qla24xx_handle_adisc_event()
497 ql_dbg(ql_dbg_disc, vha, 0x2066, in qla24xx_handle_adisc_event()
512 ql_dbg(ql_dbg_disc, vha, 0x20d3, in qla24xx_handle_adisc_event()
522 __qla24xx_handle_gpdb_event(vha, ea); 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
529 e = qla2x00_alloc_work(vha, QLA_EVT_ELS_PLOGI); in qla_post_els_plogi_work()
536 return qla2x00_post_work(vha, e); in qla_post_els_plogi_work()
541 struct scsi_qla_host *vha = sp->vha; in qla2x00_async_adisc_sp_done() local
545 ql_dbg(ql_dbg_disc, vha, 0x2066, in qla2x00_async_adisc_sp_done()
560 qla24xx_handle_adisc_event(vha, &ea); in qla2x00_async_adisc_sp_done()
566 qla2x00_async_adisc(struct scsi_qla_host *vha, fc_port_t *fcport, in qla2x00_async_adisc() argument
574 ql_log(ql_log_warn, vha, 0xffff, in qla2x00_async_adisc()
581 if (!vha->flags.online || (fcport->flags & FCF_ASYNC_SENT)) in qla2x00_async_adisc()
585 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); in qla2x00_async_adisc()
596 qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha) + 2); in qla2x00_async_adisc()
602 ql_dbg(ql_dbg_disc, vha, 0x206f, in qla2x00_async_adisc()
616 qla2x00_post_async_adisc_work(vha, fcport, data); in qla2x00_async_adisc()
620 static bool qla2x00_is_reserved_id(scsi_qla_host_t *vha, uint16_t loop_id) in qla2x00_is_reserved_id() argument
622 struct qla_hw_data *ha = vha->hw; in qla2x00_is_reserved_id()
642 static int qla2x00_find_new_loop_id(scsi_qla_host_t *vha, fc_port_t *dev) in qla2x00_find_new_loop_id() argument
645 struct qla_hw_data *ha = vha->hw; in qla2x00_find_new_loop_id()
654 qla2x00_is_reserved_id(vha, dev->loop_id)) { in qla2x00_find_new_loop_id()
663 ql_dbg(ql_dbg_disc, dev->vha, 0x2086, in qla2x00_find_new_loop_id()
667 ql_log(ql_log_warn, dev->vha, 0x2087, in qla2x00_find_new_loop_id()
676 struct qla_hw_data *ha = fcport->vha->hw; in qla2x00_clear_loop_id()
679 qla2x00_is_reserved_id(fcport->vha, fcport->loop_id)) in qla2x00_clear_loop_id()
686 static void qla24xx_handle_gnl_done_event(scsi_qla_host_t *vha, in qla24xx_handle_gnl_done_event() argument
698 ql_dbg(ql_dbg_disc, vha, 0xffff, in qla24xx_handle_gnl_done_event()
703 fcport->rscn_gen, fcport->last_rscn_gen, vha->loop_id); in qla24xx_handle_gnl_done_event()
710 ql_dbg(ql_dbg_disc, vha, 0x20de, in qla24xx_handle_gnl_done_event()
722 ql_dbg(ql_dbg_disc, vha, 0x20e0, in qla24xx_handle_gnl_done_event()
730 ql_dbg(ql_dbg_disc, vha, 0x20e1, in qla24xx_handle_gnl_done_event()
737 e = &vha->gnl.l[i]; in qla24xx_handle_gnl_done_event()
766 ql_dbg(ql_dbg_disc, vha, 0x20e2, in qla24xx_handle_gnl_done_event()
783 ql_dbg(ql_dbg_disc, vha, 0x20e3, in qla24xx_handle_gnl_done_event()
799 qlt_find_sess_invalidate_other(vha, wwn, in qla24xx_handle_gnl_done_event()
812 switch (vha->hw->current_topology) { in qla24xx_handle_gnl_done_event()
817 vha, 0x20e4, "%s %d %8phC post gpdb\n", in qla24xx_handle_gnl_done_event()
825 qla2x00_post_async_adisc_work(vha, fcport, in qla24xx_handle_gnl_done_event()
831 qla2x00_find_new_loop_id(vha, fcport); in qla24xx_handle_gnl_done_event()
835 ql_dbg(ql_dbg_disc, vha, 0x20e5, in qla24xx_handle_gnl_done_event()
838 qla24xx_fcport_handle_login(vha, fcport); in qla24xx_handle_gnl_done_event()
863 qla2x00_post_async_adisc_work(vha, fcport, in qla24xx_handle_gnl_done_event()
873 qla24xx_fcport_handle_login(vha, in qla24xx_handle_gnl_done_event()
885 qla24xx_fcport_handle_login(vha, in qla24xx_handle_gnl_done_event()
895 switch (vha->hw->current_topology) { in qla24xx_handle_gnl_done_event()
899 e = &vha->gnl.l[i]; in qla24xx_handle_gnl_done_event()
908 qla2x00_find_fcport_by_wwpn(vha, in qla24xx_handle_gnl_done_event()
912 vha, 0x20e5, in qla24xx_handle_gnl_done_event()
927 qla24xx_fcport_handle_login(vha, fcport); in qla24xx_handle_gnl_done_event()
940 &vha->dpc_flags); in qla24xx_handle_gnl_done_event()
943 ql_log(ql_log_info, vha, 0x705d, in qla24xx_handle_gnl_done_event()
946 &vha->dpc_flags); in qla24xx_handle_gnl_done_event()
949 ql_log(ql_log_info, vha, 0x705d, in qla24xx_handle_gnl_done_event()
955 qla2xxx_wake_dpc(vha); in qla24xx_handle_gnl_done_event()
961 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla24xx_handle_gnl_done_event()
965 qla24xx_fcport_handle_login(vha, fcport); in qla24xx_handle_gnl_done_event()
975 struct scsi_qla_host *vha = sp->vha; in qla24xx_async_gnl_sp_done() local
985 ql_dbg(ql_dbg_disc, vha, 0x20e7, in qla24xx_async_gnl_sp_done()
1004 e = &vha->gnl.l[i]; in qla24xx_async_gnl_sp_done()
1008 set_bit(loop_id, vha->hw->loop_id_map); in qla24xx_async_gnl_sp_done()
1011 ql_dbg(ql_dbg_disc, vha, 0x20e8, in qla24xx_async_gnl_sp_done()
1018 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qla24xx_async_gnl_sp_done()
1022 if (!list_empty(&vha->gnl.fcports)) in qla24xx_async_gnl_sp_done()
1023 list_splice_init(&vha->gnl.fcports, &h); in qla24xx_async_gnl_sp_done()
1024 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qla24xx_async_gnl_sp_done()
1027 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qla24xx_async_gnl_sp_done()
1030 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qla24xx_async_gnl_sp_done()
1033 qla24xx_handle_gnl_done_event(vha, &ea); in qla24xx_async_gnl_sp_done()
1041 e = &vha->gnl.l[i]; in qla24xx_async_gnl_sp_done()
1045 list_for_each_entry_safe(fcport, tf, &vha->vp_fcports, list) { in qla24xx_async_gnl_sp_done()
1059 ql_dbg(ql_dbg_disc, vha, 0x2065, in qla24xx_async_gnl_sp_done()
1063 qla24xx_post_newsess_work(vha, &id, (u8 *)&wwn, in qla24xx_async_gnl_sp_done()
1068 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qla24xx_async_gnl_sp_done()
1069 vha->gnl.sent = 0; in qla24xx_async_gnl_sp_done()
1070 if (!list_empty(&vha->gnl.fcports)) { in qla24xx_async_gnl_sp_done()
1072 list_for_each_entry_safe(fcport, tf, &vha->gnl.fcports, in qla24xx_async_gnl_sp_done()
1076 if (qla24xx_post_gnl_work(vha, fcport) == QLA_SUCCESS) in qla24xx_async_gnl_sp_done()
1080 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); 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()
1096 ql_dbg(ql_dbg_disc, vha, 0x20d9, in qla24xx_async_gnl()
1099 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qla24xx_async_gnl()
1105 list_add_tail(&fcport->gnl_entry, &vha->gnl.fcports); in qla24xx_async_gnl()
1106 if (vha->gnl.sent) { in qla24xx_async_gnl()
1107 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qla24xx_async_gnl()
1110 vha->gnl.sent = 1; in qla24xx_async_gnl()
1111 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qla24xx_async_gnl()
1113 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); in qla24xx_async_gnl()
1124 qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha)+2); in qla24xx_async_gnl()
1129 mb[2] = MSW(vha->gnl.ldma); in qla24xx_async_gnl()
1130 mb[3] = LSW(vha->gnl.ldma); in qla24xx_async_gnl()
1131 mb[6] = MSW(MSD(vha->gnl.ldma)); in qla24xx_async_gnl()
1132 mb[7] = LSW(MSD(vha->gnl.ldma)); in qla24xx_async_gnl()
1133 mb[8] = vha->gnl.size; in qla24xx_async_gnl()
1134 mb[9] = vha->vp_idx; in qla24xx_async_gnl()
1138 ql_dbg(ql_dbg_disc, vha, 0x20da, 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
1159 e = qla2x00_alloc_work(vha, QLA_EVT_GNL); in qla24xx_post_gnl_work()
1165 return qla2x00_post_work(vha, e); in qla24xx_post_gnl_work()
1170 struct scsi_qla_host *vha = sp->vha; in qla24xx_async_gpdb_sp_done() local
1171 struct qla_hw_data *ha = vha->hw; in qla24xx_async_gpdb_sp_done()
1176 ql_dbg(ql_dbg_disc, vha, 0x20db, in qla24xx_async_gpdb_sp_done()
1189 qla24xx_handle_gpdb_event(vha, &ea); 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
1202 if (vha->host->active_mode == MODE_TARGET) in qla24xx_post_prli_work()
1205 e = qla2x00_alloc_work(vha, QLA_EVT_PRLI); in qla24xx_post_prli_work()
1211 return qla2x00_post_work(vha, e); in qla24xx_post_prli_work()
1216 struct scsi_qla_host *vha = sp->vha; in qla2x00_async_prli_sp_done() local
1220 ql_dbg(ql_dbg_disc, vha, 0x2129, in qla2x00_async_prli_sp_done()
1226 if (!test_bit(UNLOADING, &vha->dpc_flags)) { in qla2x00_async_prli_sp_done()
1235 qla24xx_handle_prli_done_event(vha, &ea); in qla2x00_async_prli_sp_done()
1242 qla24xx_async_prli(struct scsi_qla_host *vha, fc_port_t *fcport) in qla24xx_async_prli() argument
1248 if (!vha->flags.online) { in qla24xx_async_prli()
1249 ql_dbg(ql_dbg_disc, vha, 0xffff, "%s %d %8phC exit\n", in qla24xx_async_prli()
1256 qla_dual_mode_enabled(vha)) { in qla24xx_async_prli()
1257 ql_dbg(ql_dbg_disc, vha, 0xffff, "%s %d %8phC exit\n", in qla24xx_async_prli()
1262 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); in qla24xx_async_prli()
1274 qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha) + 2); in qla24xx_async_prli()
1279 if (NVME_TARGET(vha->hw, fcport)) in qla24xx_async_prli()
1282 ql_dbg(ql_dbg_disc, vha, 0x211b, 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()
1291 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); 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
1307 e = qla2x00_alloc_work(vha, QLA_EVT_GPDB); in qla24xx_post_gpdb_work()
1314 return qla2x00_post_work(vha, e); 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
1325 struct qla_hw_data *ha = vha->hw; in qla24xx_async_gpdb()
1328 ql_log(ql_log_warn, vha, 0xffff, in qla24xx_async_gpdb()
1335 if (!vha->flags.online || fcport->flags & FCF_ASYNC_SENT) { in qla24xx_async_gpdb()
1336 ql_log(ql_log_warn, vha, 0xffff, 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()
1356 qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha) + 2); in qla24xx_async_gpdb()
1360 ql_log(ql_log_warn, vha, 0xd043, in qla24xx_async_gpdb()
1372 mb[9] = vha->vp_idx; in qla24xx_async_gpdb()
1380 ql_dbg(ql_dbg_disc, vha, 0x20dc, in qla24xx_async_gpdb()
1397 qla24xx_post_gpdb_work(vha, fcport, opt); in qla24xx_async_gpdb()
1402 void __qla24xx_handle_gpdb_event(scsi_qla_host_t *vha, struct event_arg *ea) in __qla24xx_handle_gpdb_event() argument
1406 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in __qla24xx_handle_gpdb_event()
1412 vha->fcport_count++; in __qla24xx_handle_gpdb_event()
1415 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in __qla24xx_handle_gpdb_event()
1417 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in __qla24xx_handle_gpdb_event()
1424 ql_dbg(ql_dbg_disc, vha, 0x20d6, in __qla24xx_handle_gpdb_event()
1429 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in __qla24xx_handle_gpdb_event()
1433 void qla24xx_handle_gpdb_event(scsi_qla_host_t *vha, struct event_arg *ea) in qla24xx_handle_gpdb_event() argument
1444 ql_dbg(ql_dbg_disc, vha, 0x20d2, in qla24xx_handle_gpdb_event()
1452 if (NVME_TARGET(vha->hw, fcport)) in qla24xx_handle_gpdb_event()
1460 ql_dbg(ql_dbg_disc, vha, 0x20d3, in qla24xx_handle_gpdb_event()
1472 __qla24xx_parse_gpdb(vha, fcport, pd); in qla24xx_handle_gpdb_event()
1479 if (qla_dual_mode_enabled(vha) || in qla24xx_handle_gpdb_event()
1480 qla_ini_mode_enabled(vha)) { in qla24xx_handle_gpdb_event()
1482 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla24xx_handle_gpdb_event()
1488 ql_dbg(ql_dbg_disc, vha, 0x20d5, "%s %d %8phC post del sess\n", in qla24xx_handle_gpdb_event()
1493 __qla24xx_handle_gpdb_event(vha, ea); 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
1501 ql_dbg(ql_dbg_disc, vha, 0x307b, in qla_chk_n2n_b4_login()
1506 if (qla_tgt_mode_enabled(vha)) in qla_chk_n2n_b4_login()
1509 if (qla_dual_mode_enabled(vha)) { in qla_chk_n2n_b4_login()
1510 if (N2N_TOPO(vha->hw)) { in qla_chk_n2n_b4_login()
1513 mywwn = wwn_to_u64(vha->port_name); in qla_chk_n2n_b4_login()
1533 rc = qla2x00_find_new_loop_id(vha, fcport); in qla_chk_n2n_b4_login()
1535 ql_dbg(ql_dbg_disc, vha, 0x20e6, in qla_chk_n2n_b4_login()
1543 ql_dbg(ql_dbg_disc, vha, 0x20bf, 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
1556 ql_dbg(ql_dbg_disc, vha, 0x20d8, in qla24xx_fcport_handle_login()
1568 qla_dual_mode_enabled(vha) && in qla24xx_fcport_handle_login()
1574 !N2N_TOPO(vha->hw)) { in qla24xx_fcport_handle_login()
1576 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla24xx_fcport_handle_login()
1582 if (vha->host->active_mode == MODE_TARGET && !N2N_TOPO(vha->hw)) in qla24xx_fcport_handle_login()
1586 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla24xx_fcport_handle_login()
1593 switch (vha->hw->current_topology) { in qla24xx_fcport_handle_login()
1599 qla2x00_find_new_loop_id(vha, in qla24xx_fcport_handle_login()
1605 qla_post_els_plogi_work(vha, fcport); in qla24xx_fcport_handle_login()
1607 ql_log(ql_log_info, vha, 0x705d, in qla24xx_fcport_handle_login()
1612 qla24xx_post_gnl_work(vha, fcport); in qla24xx_fcport_handle_login()
1617 ql_dbg(ql_dbg_disc, vha, 0xffff, in qla24xx_fcport_handle_login()
1620 qla24xx_post_gnnid_work(vha, fcport); in qla24xx_fcport_handle_login()
1622 ql_dbg(ql_dbg_disc, vha, 0x20bd, 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()
1634 switch (vha->hw->current_topology) { in qla24xx_fcport_handle_login()
1637 ql_dbg(ql_dbg_disc, vha, 0x2118, in qla24xx_fcport_handle_login()
1641 vha->hw->base_qpair->chip_reset; in qla24xx_fcport_handle_login()
1642 qla24xx_post_gpdb_work(vha, fcport, 0); in qla24xx_fcport_handle_login()
1644 ql_dbg(ql_dbg_disc, vha, 0x2118, 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()
1654 ql_dbg(ql_dbg_disc, vha, 0x20d8, in qla24xx_fcport_handle_login()
1660 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla24xx_fcport_handle_login()
1663 qla_chk_n2n_b4_login(vha, fcport); in qla24xx_fcport_handle_login()
1669 if (N2N_TOPO(vha->hw)) in qla24xx_fcport_handle_login()
1670 qla_chk_n2n_b4_login(vha, fcport); in qla24xx_fcport_handle_login()
1678 qla2x00_post_async_adisc_work(vha, fcport, data); in qla24xx_fcport_handle_login()
1683 qla24xx_post_prli_work(vha, fcport); in qla24xx_fcport_handle_login()
1692 ql_dbg(ql_dbg_disc, fcport->vha, 0xffff, in qla24xx_fcport_handle_login()
1699 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla24xx_fcport_handle_login()
1709 int qla24xx_post_newsess_work(struct scsi_qla_host *vha, port_id_t *id, in qla24xx_post_newsess_work() argument
1714 e = qla2x00_alloc_work(vha, QLA_EVT_NEW_SESS); in qla24xx_post_newsess_work()
1725 return qla2x00_post_work(vha, e); in qla24xx_post_newsess_work()
1728 void qla2x00_handle_rscn(scsi_qla_host_t *vha, struct event_arg *ea) in qla2x00_handle_rscn() argument
1735 fcport = qla2x00_find_fcport_by_nportid(vha, &ea->id, 1); in qla2x00_handle_rscn()
1739 ql_dbg(ql_dbg_disc, vha, 0x2115, in qla2x00_handle_rscn()
1749 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_handle_rscn()
1761 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_handle_rscn()
1774 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_handle_rscn()
1785 spin_lock_irqsave(&vha->work_lock, flags); in qla2x00_handle_rscn()
1786 if (vha->scan.scan_flags == 0) { in qla2x00_handle_rscn()
1787 ql_dbg(ql_dbg_disc, vha, 0xffff, "%s: schedule\n", __func__); in qla2x00_handle_rscn()
1788 vha->scan.scan_flags |= SF_QUEUED; in qla2x00_handle_rscn()
1789 schedule_delayed_work(&vha->scan.scan_work, 5); in qla2x00_handle_rscn()
1791 spin_unlock_irqrestore(&vha->work_lock, flags); in qla2x00_handle_rscn()
1794 void qla24xx_handle_relogin_event(scsi_qla_host_t *vha, in qla24xx_handle_relogin_event() argument
1799 if (test_bit(UNLOADING, &vha->dpc_flags)) in qla24xx_handle_relogin_event()
1802 ql_dbg(ql_dbg_disc, vha, 0x2102, in qla24xx_handle_relogin_event()
1812 ql_dbg(ql_dbg_disc, vha, 0x20e9, "%s %d %8phC post gnl\n", 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()
1821 void qla_handle_els_plogi_done(scsi_qla_host_t *vha, in qla_handle_els_plogi_done() argument
1825 if (vha->host->active_mode == MODE_TARGET) in qla_handle_els_plogi_done()
1828 ql_dbg(ql_dbg_disc, vha, 0x2118, in qla_handle_els_plogi_done()
1831 qla24xx_post_prli_work(vha, ea->fcport); in qla_handle_els_plogi_done()
1853 qla2x00_handle_rscn(fcport->vha, &ea); in qla_rscn_replay()
1892 struct scsi_qla_host *vha = fcport->vha; in qla2x00_async_tm_cmd() local
1897 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); in qla2x00_async_tm_cmd()
1907 qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha)); in qla2x00_async_tm_cmd()
1914 ql_dbg(ql_dbg_taskm, vha, 0x802f, in qla2x00_async_tm_cmd()
1927 ql_log(ql_log_warn, vha, 0x8030, in qla2x00_async_tm_cmd()
1931 if (!test_bit(UNLOADING, &vha->dpc_flags) && !IS_QLAFX00(vha->hw)) { in qla2x00_async_tm_cmd()
1936 qla2x00_marker(vha, vha->hw->base_qpair, in qla2x00_async_tm_cmd()
1956 struct scsi_qla_host *vha = fcport->vha; in qla24xx_async_abort_command() local
1971 return qlafx00_fx_disc(vha, &vha->hw->mr.fcport, in qla24xx_async_abort_command()
1978 qla24xx_handle_prli_done_event(struct scsi_qla_host *vha, struct event_arg *ea) in qla24xx_handle_prli_done_event() argument
1985 ql_dbg(ql_dbg_disc, vha, 0x2118, in qla24xx_handle_prli_done_event()
1989 ea->fcport->chip_reset = vha->hw->base_qpair->chip_reset; in qla24xx_handle_prli_done_event()
1997 qla24xx_post_gpdb_work(vha, ea->fcport, 0); in qla24xx_handle_prli_done_event()
2002 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla24xx_handle_prli_done_event()
2007 ql_dbg(ql_dbg_disc, vha, 0x2118, in qla24xx_handle_prli_done_event()
2010 vha->hw->fc4_type_priority == FC4_PRIORITY_FCP ? in qla24xx_handle_prli_done_event()
2013 if (N2N_TOPO(vha->hw)) { in qla24xx_handle_prli_done_event()
2014 if (vha->hw->fc4_type_priority == FC4_PRIORITY_NVME) { in qla24xx_handle_prli_done_event()
2024 vha->relogin_jif = jiffies + 2 * HZ; in qla24xx_handle_prli_done_event()
2029 set_bit(N2N_LINK_RESET, &vha->dpc_flags); in qla24xx_handle_prli_done_event()
2031 ql_log(ql_log_warn, vha, 0x2119, in qla24xx_handle_prli_done_event()
2042 ql_dbg(ql_dbg_disc, vha, 0x2118, in qla24xx_handle_prli_done_event()
2048 if (vha->hw->fc4_type_priority == FC4_PRIORITY_NVME) in qla24xx_handle_prli_done_event()
2064 qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea) in qla24xx_handle_plogi_done_event() argument
2072 ql_dbg(ql_dbg_disc, vha, 0xffff, in qla24xx_handle_plogi_done_event()
2081 ql_dbg(ql_dbg_disc, vha, 0x20ea, in qla24xx_handle_plogi_done_event()
2089 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla24xx_handle_plogi_done_event()
2095 ql_dbg(ql_dbg_disc, vha, 0x20d3, in qla24xx_handle_plogi_done_event()
2098 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla24xx_handle_plogi_done_event()
2101 ql_dbg(ql_dbg_disc, vha, 0x20d3, in qla24xx_handle_plogi_done_event()
2119 if (NVME_TARGET(vha->hw, ea->fcport)) { in qla24xx_handle_plogi_done_event()
2120 ql_dbg(ql_dbg_disc, vha, 0x2117, in qla24xx_handle_plogi_done_event()
2123 qla24xx_post_prli_work(vha, ea->fcport); in qla24xx_handle_plogi_done_event()
2125 ql_dbg(ql_dbg_disc, vha, 0x20ea, in qla24xx_handle_plogi_done_event()
2130 set_bit(ea->fcport->loop_id, vha->hw->loop_id_map); in qla24xx_handle_plogi_done_event()
2131 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qla24xx_handle_plogi_done_event()
2132 ea->fcport->chip_reset = vha->hw->base_qpair->chip_reset; in qla24xx_handle_plogi_done_event()
2136 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qla24xx_handle_plogi_done_event()
2138 qla24xx_post_gpdb_work(vha, ea->fcport, 0); in qla24xx_handle_plogi_done_event()
2142 ql_dbg(ql_dbg_disc, vha, 0x20eb, "%s %d %8phC cmd error %x\n", in qla24xx_handle_plogi_done_event()
2154 ql_dbg(ql_dbg_disc, vha, 0x20ec, in qla24xx_handle_plogi_done_event()
2159 set_bit(ea->fcport->loop_id, vha->hw->loop_id_map); in qla24xx_handle_plogi_done_event()
2161 qla24xx_post_gnl_work(vha, ea->fcport); in qla24xx_handle_plogi_done_event()
2165 qlt_find_sess_invalidate_other(vha, in qla24xx_handle_plogi_done_event()
2178 ql_dbg(ql_dbg_disc, vha, 0x20ed, in qla24xx_handle_plogi_done_event()
2183 ql_dbg(ql_dbg_disc, vha, 0x20ed, in qla24xx_handle_plogi_done_event()
2189 set_bit(lid, vha->hw->loop_id_map); in qla24xx_handle_plogi_done_event()
2205 qla83xx_nic_core_fw_load(scsi_qla_host_t *vha) in qla83xx_nic_core_fw_load() argument
2208 struct qla_hw_data *ha = vha->hw; in qla83xx_nic_core_fw_load()
2212 qla83xx_idc_lock(vha, 0); in qla83xx_nic_core_fw_load()
2221 if (__qla83xx_set_drv_presence(vha) != QLA_SUCCESS) { in qla83xx_nic_core_fw_load()
2222 ql_dbg(ql_dbg_p3p, vha, 0xb077, in qla83xx_nic_core_fw_load()
2229 qla83xx_reset_ownership(vha); in qla83xx_nic_core_fw_load()
2237 qla83xx_rd_reg(vha, QLA83XX_IDC_MAJOR_VERSION, &idc_major_ver); in qla83xx_nic_core_fw_load()
2241 qla83xx_wr_reg(vha, QLA83XX_IDC_MAJOR_VERSION, idc_major_ver); in qla83xx_nic_core_fw_load()
2244 qla83xx_wr_reg(vha, QLA83XX_IDC_LOCK_RECOVERY, 0); in qla83xx_nic_core_fw_load()
2250 ql_log(ql_log_warn, vha, 0xb07d, in qla83xx_nic_core_fw_load()
2253 __qla83xx_clear_drv_presence(vha); in qla83xx_nic_core_fw_load()
2258 qla83xx_rd_reg(vha, QLA83XX_IDC_MINOR_VERSION, &idc_minor_ver); in qla83xx_nic_core_fw_load()
2260 qla83xx_wr_reg(vha, QLA83XX_IDC_MINOR_VERSION, idc_minor_ver); in qla83xx_nic_core_fw_load()
2264 if (!qla81xx_get_port_config(vha, config)) in qla83xx_nic_core_fw_load()
2265 qla83xx_wr_reg(vha, QLA83XX_IDC_DEV_STATE, in qla83xx_nic_core_fw_load()
2269 rval = qla83xx_idc_state_handler(vha); in qla83xx_nic_core_fw_load()
2272 qla83xx_idc_unlock(vha, 0); in qla83xx_nic_core_fw_load()
2288 qla2x00_initialize_adapter(scsi_qla_host_t *vha) in qla2x00_initialize_adapter() argument
2291 struct qla_hw_data *ha = vha->hw; in qla2x00_initialize_adapter()
2295 memset(&vha->qla_stats, 0, sizeof(vha->qla_stats)); in qla2x00_initialize_adapter()
2296 memset(&vha->fc_host_stat, 0, sizeof(vha->fc_host_stat)); in qla2x00_initialize_adapter()
2299 vha->flags.online = 0; in qla2x00_initialize_adapter()
2301 vha->flags.reset_active = 0; in qla2x00_initialize_adapter()
2304 vha->qla_stats.jiffies_at_last_reset = get_jiffies_64(); in qla2x00_initialize_adapter()
2305 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); in qla2x00_initialize_adapter()
2306 atomic_set(&vha->loop_state, LOOP_DOWN); in qla2x00_initialize_adapter()
2307 vha->device_flags = DFLG_NO_CABLE; in qla2x00_initialize_adapter()
2308 vha->dpc_flags = 0; in qla2x00_initialize_adapter()
2309 vha->flags.management_server_logged_in = 0; in qla2x00_initialize_adapter()
2310 vha->marker_needed = 0; in qla2x00_initialize_adapter()
2317 ql_dbg(ql_dbg_init, vha, 0x0040, in qla2x00_initialize_adapter()
2319 rval = ha->isp_ops->pci_config(vha); in qla2x00_initialize_adapter()
2321 ql_log(ql_log_warn, vha, 0x0044, in qla2x00_initialize_adapter()
2326 ha->isp_ops->reset_chip(vha); in qla2x00_initialize_adapter()
2332 ql_log(ql_log_info, vha, 0xffff, "Secure Adapter: %s\n", in qla2x00_initialize_adapter()
2337 rval = qla2xxx_get_flash_info(vha); in qla2x00_initialize_adapter()
2339 ql_log(ql_log_fatal, vha, 0x004f, in qla2x00_initialize_adapter()
2345 qla8044_read_reset_template(vha); in qla2x00_initialize_adapter()
2352 qla8044_set_idc_dontreset(vha); in qla2x00_initialize_adapter()
2355 ha->isp_ops->get_flash_version(vha, req->ring); in qla2x00_initialize_adapter()
2356 ql_dbg(ql_dbg_init, vha, 0x0061, in qla2x00_initialize_adapter()
2362 ha->isp_ops->nvram_config(vha); in qla2x00_initialize_adapter()
2368 ql_log(ql_log_info, vha, 0xffff, "FC4 priority set to %s\n", in qla2x00_initialize_adapter()
2373 ql_log(ql_log_info, vha, 0x0077, in qla2x00_initialize_adapter()
2374 "Masking HBA WWPN %8phN (via NVRAM).\n", vha->port_name); in qla2x00_initialize_adapter()
2378 ql_dbg(ql_dbg_init, vha, 0x0078, in qla2x00_initialize_adapter()
2387 if (qla2x00_isp_firmware(vha) != QLA_SUCCESS) { in qla2x00_initialize_adapter()
2388 rval = ha->isp_ops->chip_diag(vha); in qla2x00_initialize_adapter()
2391 rval = qla2x00_setup_chip(vha); in qla2x00_initialize_adapter()
2397 ha->cs84xx = qla84xx_get_chip(vha); in qla2x00_initialize_adapter()
2399 ql_log(ql_log_warn, vha, 0x00d0, in qla2x00_initialize_adapter()
2405 if (qla_ini_mode_enabled(vha) || qla_dual_mode_enabled(vha)) in qla2x00_initialize_adapter()
2406 rval = qla2x00_init_rings(vha); in qla2x00_initialize_adapter()
2416 rval = qla84xx_init_chip(vha); in qla2x00_initialize_adapter()
2418 ql_log(ql_log_warn, vha, 0x00d4, in qla2x00_initialize_adapter()
2420 qla84xx_put_chip(vha); in qla2x00_initialize_adapter()
2426 rval = qla83xx_nic_core_fw_load(vha); in qla2x00_initialize_adapter()
2428 ql_log(ql_log_warn, vha, 0x0124, in qla2x00_initialize_adapter()
2433 qla24xx_read_fcp_prio_cfg(vha); in qla2x00_initialize_adapter()
2436 qla82xx_set_driver_version(vha, QLA2XXX_VERSION); in qla2x00_initialize_adapter()
2438 qla25xx_set_driver_version(vha, QLA2XXX_VERSION); in qla2x00_initialize_adapter()
2450 qla2100_pci_config(scsi_qla_host_t *vha) in qla2100_pci_config() argument
2454 struct qla_hw_data *ha = vha->hw; in qla2100_pci_config()
2481 qla2300_pci_config(scsi_qla_host_t *vha) in qla2300_pci_config() argument
2486 struct qla_hw_data *ha = vha->hw; in qla2300_pci_config()
2563 qla24xx_pci_config(scsi_qla_host_t *vha) in qla24xx_pci_config() argument
2567 struct qla_hw_data *ha = vha->hw; in qla24xx_pci_config()
2607 qla25xx_pci_config(scsi_qla_host_t *vha) in qla25xx_pci_config() argument
2610 struct qla_hw_data *ha = vha->hw; in qla25xx_pci_config()
2638 qla2x00_isp_firmware(scsi_qla_host_t *vha) in qla2x00_isp_firmware() argument
2643 struct qla_hw_data *ha = vha->hw; in qla2x00_isp_firmware()
2649 ql_log(ql_log_info, vha, 0x0079, "RISC CODE NOT loaded.\n"); in qla2x00_isp_firmware()
2652 rval = qla2x00_verify_checksum(vha, ha->fw_srisc_address); in qla2x00_isp_firmware()
2655 rval = qla2x00_get_adapter_id(vha, &loop_id, &al_pa, in qla2x00_isp_firmware()
2661 ql_dbg(ql_dbg_init, vha, 0x007a, in qla2x00_isp_firmware()
2674 qla2x00_reset_chip(scsi_qla_host_t *vha) in qla2x00_reset_chip() argument
2677 struct qla_hw_data *ha = vha->hw; in qla2x00_reset_chip()
2821 qla81xx_reset_mpi(scsi_qla_host_t *vha) in qla81xx_reset_mpi() argument
2825 if (!IS_QLA81XX(vha->hw)) in qla81xx_reset_mpi()
2828 return qla81xx_write_mpi_register(vha, mb); in qla81xx_reset_mpi()
2838 qla24xx_reset_risc(scsi_qla_host_t *vha) in qla24xx_reset_risc() argument
2841 struct qla_hw_data *ha = vha->hw; in qla24xx_reset_risc()
2862 ql_dbg(ql_dbg_init + ql_dbg_verbose, vha, 0x017e, in qla24xx_reset_risc()
2888 ql_dbg(ql_dbg_init + ql_dbg_verbose, vha, 0x017f, in qla24xx_reset_risc()
2906 ql_dbg(ql_dbg_init + ql_dbg_verbose, vha, 0x015d, in qla24xx_reset_risc()
2912 if (test_and_clear_bit(MPI_RESET_NEEDED, &vha->dpc_flags)) { in qla24xx_reset_risc()
2913 if (qla81xx_reset_mpi(vha) != QLA_SUCCESS) { in qla24xx_reset_risc()
2915 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); in qla24xx_reset_risc()
2916 set_bit(MPI_RESET_NEEDED, &vha->dpc_flags); in qla24xx_reset_risc()
2923 vha->flags.online = 0; in qla24xx_reset_risc()
2949 ql_dbg(ql_dbg_init + ql_dbg_verbose, vha, 0x015e, in qla24xx_reset_risc()
2956 ql_dbg(ql_dbg_init + ql_dbg_verbose, vha, 0x015f, in qla24xx_reset_risc()
2967 qla25xx_read_risc_sema_reg(scsi_qla_host_t *vha, uint32_t *data) in qla25xx_read_risc_sema_reg() argument
2969 struct device_reg_24xx __iomem *reg = &vha->hw->iobase->isp24; in qla25xx_read_risc_sema_reg()
2976 qla25xx_write_risc_sema_reg(scsi_qla_host_t *vha, uint32_t data) in qla25xx_write_risc_sema_reg() argument
2978 struct device_reg_24xx __iomem *reg = &vha->hw->iobase->isp24; in qla25xx_write_risc_sema_reg()
2985 qla25xx_manipulate_risc_semaphore(scsi_qla_host_t *vha) in qla25xx_manipulate_risc_semaphore() argument
2993 if (vha->hw->pdev->subsystem_device != 0x0175 && in qla25xx_manipulate_risc_semaphore()
2994 vha->hw->pdev->subsystem_device != 0x0240) in qla25xx_manipulate_risc_semaphore()
2997 wrt_reg_dword(&vha->hw->iobase->isp24.hccr, HCCRX_SET_RISC_PAUSE); in qla25xx_manipulate_risc_semaphore()
3004 qla25xx_write_risc_sema_reg(vha, RISC_SEMAPHORE_SET); in qla25xx_manipulate_risc_semaphore()
3005 qla25xx_read_risc_sema_reg(vha, &wd32); in qla25xx_manipulate_risc_semaphore()
3020 qla25xx_write_risc_sema_reg(vha, RISC_SEMAPHORE_CLR); in qla25xx_manipulate_risc_semaphore()
3024 qla25xx_read_risc_sema_reg(vha, &wd32); in qla25xx_manipulate_risc_semaphore()
3034 qla25xx_write_risc_sema_reg(vha, RISC_SEMAPHORE_FORCE_CLR); in qla25xx_manipulate_risc_semaphore()
3039 qla25xx_write_risc_sema_reg(vha, RISC_SEMAPHORE_FORCE_SET); in qla25xx_manipulate_risc_semaphore()
3052 qla24xx_reset_chip(scsi_qla_host_t *vha) in qla24xx_reset_chip() argument
3054 struct qla_hw_data *ha = vha->hw; in qla24xx_reset_chip()
3064 qla25xx_manipulate_risc_semaphore(vha); in qla24xx_reset_chip()
3067 rval = qla24xx_reset_risc(vha); in qla24xx_reset_chip()
3079 qla2x00_chip_diag(scsi_qla_host_t *vha) in qla2x00_chip_diag() argument
3082 struct qla_hw_data *ha = vha->hw; in qla2x00_chip_diag()
3093 ql_dbg(ql_dbg_init, vha, 0x007b, "Testing device at %p.\n", in qla2x00_chip_diag()
3116 ql_dbg(ql_dbg_init, vha, 0x007c, in qla2x00_chip_diag()
3138 ql_dbg(ql_dbg_init, vha, 0x007d, "Checking product ID of chip.\n"); in qla2x00_chip_diag()
3146 ql_log(ql_log_warn, vha, 0x0062, in qla2x00_chip_diag()
3167 ql_dbg(ql_dbg_init, vha, 0x007e, "Found QLA2200A Chip.\n"); in qla2x00_chip_diag()
3176 ql_dbg(ql_dbg_init, vha, 0x007f, "Checking mailboxes.\n"); in qla2x00_chip_diag()
3177 rval = qla2x00_mbx_reg_test(vha); in qla2x00_chip_diag()
3179 ql_log(ql_log_warn, vha, 0x0080, in qla2x00_chip_diag()
3188 ql_log(ql_log_info, vha, 0x0081, in qla2x00_chip_diag()
3203 qla24xx_chip_diag(scsi_qla_host_t *vha) in qla24xx_chip_diag() argument
3206 struct qla_hw_data *ha = vha->hw; in qla24xx_chip_diag()
3214 rval = qla2x00_mbx_reg_test(vha); in qla24xx_chip_diag()
3216 ql_log(ql_log_warn, vha, 0x0082, in qla24xx_chip_diag()
3227 qla2x00_init_fce_trace(scsi_qla_host_t *vha) in qla2x00_init_fce_trace() argument
3232 struct qla_hw_data *ha = vha->hw; in qla2x00_init_fce_trace()
3242 ql_dbg(ql_dbg_init, vha, 0x00bd, in qla2x00_init_fce_trace()
3252 ql_log(ql_log_warn, vha, 0x00be, in qla2x00_init_fce_trace()
3258 rval = qla2x00_enable_fce_trace(vha, tc_dma, FCE_NUM_BUFFERS, in qla2x00_init_fce_trace()
3261 ql_log(ql_log_warn, vha, 0x00bf, in qla2x00_init_fce_trace()
3267 ql_dbg(ql_dbg_init, vha, 0x00c0, in qla2x00_init_fce_trace()
3276 qla2x00_init_eft_trace(scsi_qla_host_t *vha) in qla2x00_init_eft_trace() argument
3281 struct qla_hw_data *ha = vha->hw; in qla2x00_init_eft_trace()
3287 ql_dbg(ql_dbg_init, vha, 0x00bd, in qla2x00_init_eft_trace()
3297 ql_log(ql_log_warn, vha, 0x00c1, in qla2x00_init_eft_trace()
3303 rval = qla2x00_enable_eft_trace(vha, tc_dma, EFT_NUM_BUFFERS); in qla2x00_init_eft_trace()
3305 ql_log(ql_log_warn, vha, 0x00c2, in qla2x00_init_eft_trace()
3311 ql_dbg(ql_dbg_init, vha, 0x00c3, in qla2x00_init_eft_trace()
3319 qla2x00_alloc_offload_mem(scsi_qla_host_t *vha) in qla2x00_alloc_offload_mem() argument
3321 qla2x00_init_fce_trace(vha); in qla2x00_alloc_offload_mem()
3322 qla2x00_init_eft_trace(vha); in qla2x00_alloc_offload_mem()
3326 qla2x00_alloc_fw_dump(scsi_qla_host_t *vha) in qla2x00_alloc_fw_dump() argument
3330 struct qla_hw_data *ha = vha->hw; in qla2x00_alloc_fw_dump()
3336 ql_dbg(ql_dbg_init, vha, 0x00bd, in qla2x00_alloc_fw_dump()
3379 qla2x00_init_fce_trace(vha); in qla2x00_alloc_fw_dump()
3382 qla2x00_init_eft_trace(vha); in qla2x00_alloc_fw_dump()
3393 ql_dbg(ql_dbg_init, vha, 0x00ba, in qla2x00_alloc_fw_dump()
3397 ql_dbg(ql_dbg_init, vha, 0x00fa, in qla2x00_alloc_fw_dump()
3400 vha, fwdt->template); in qla2x00_alloc_fw_dump()
3401 ql_dbg(ql_dbg_init, vha, 0x00fa, in qla2x00_alloc_fw_dump()
3426 ql_dbg(ql_dbg_init, vha, 0x00c5, in qla2x00_alloc_fw_dump()
3433 ql_log(ql_log_warn, vha, 0x00c4, in qla2x00_alloc_fw_dump()
3443 ql_dbg(ql_dbg_init, vha, 0x00c5, in qla2x00_alloc_fw_dump()
3453 ql_dbg(ql_dbg_init, vha, 0x00c5, in qla2x00_alloc_fw_dump()
3491 qla81xx_mpi_sync(scsi_qla_host_t *vha) in qla81xx_mpi_sync() argument
3498 if (!IS_QLA81XX(vha->hw)) in qla81xx_mpi_sync()
3501 rval = qla2x00_write_ram_word(vha, 0x7c00, 1); in qla81xx_mpi_sync()
3503 ql_log(ql_log_warn, vha, 0x0105, in qla81xx_mpi_sync()
3508 pci_read_config_word(vha->hw->pdev, 0x54, &dc); in qla81xx_mpi_sync()
3509 rval = qla2x00_read_ram_word(vha, 0x7a15, &dw); in qla81xx_mpi_sync()
3511 ql_log(ql_log_warn, vha, 0x0067, "Unable to read sync.\n"); in qla81xx_mpi_sync()
3521 rval = qla2x00_write_ram_word(vha, 0x7a15, dw); in qla81xx_mpi_sync()
3523 ql_log(ql_log_warn, vha, 0x0114, "Unable to gain sync.\n"); in qla81xx_mpi_sync()
3527 rval = qla2x00_write_ram_word(vha, 0x7c00, 0); in qla81xx_mpi_sync()
3529 ql_log(ql_log_warn, vha, 0x006d, in qla81xx_mpi_sync()
3593 static void qla2xxx_print_sfp_info(struct scsi_qla_host *vha) in qla2xxx_print_sfp_info() argument
3596 struct sff_8247_a0 *a0 = (struct sff_8247_a0 *)vha->hw->sfp_data; in qla2xxx_print_sfp_info()
3602 ql_dbg(ql_dbg_init, vha, 0x015a, in qla2xxx_print_sfp_info()
3607 ql_dbg(ql_dbg_init, vha, 0x015c, in qla2xxx_print_sfp_info()
3622 ql_dbg(ql_dbg_init, vha, 0x0160, in qla2xxx_print_sfp_info()
3635 ql_dbg(ql_dbg_init, vha, 0x0196, in qla2xxx_print_sfp_info()
3647 ql_dbg(ql_dbg_init, vha, 0x016e, in qla2xxx_print_sfp_info()
3651 ql_dbg(ql_dbg_init, vha, 0x016f, in qla2xxx_print_sfp_info()
3654 ql_dbg(ql_dbg_init, vha, 0x0170, in qla2xxx_print_sfp_info()
3657 ql_dbg(ql_dbg_init, vha, 0x0189, in qla2xxx_print_sfp_info()
3660 ql_dbg(ql_dbg_init, vha, 0x018a, in qla2xxx_print_sfp_info()
3663 ql_dbg(ql_dbg_init, vha, 0x0194, in qla2xxx_print_sfp_info()
3666 ql_dbg(ql_dbg_init, vha, 0x0195, in qla2xxx_print_sfp_info()
3686 qla24xx_detect_sfp(scsi_qla_host_t *vha) in qla24xx_detect_sfp() argument
3690 struct qla_hw_data *ha = vha->hw; in qla24xx_detect_sfp()
3709 if (!IS_BPM_ENABLED(vha)) in qla24xx_detect_sfp()
3712 rc = qla2x00_read_sfp_dev(vha, NULL, 0); in qla24xx_detect_sfp()
3717 a = (struct sff_8247_a0 *)vha->hw->sfp_data; in qla24xx_detect_sfp()
3718 qla2xxx_print_sfp_info(vha); in qla24xx_detect_sfp()
3733 ql_dbg(ql_dbg_async, vha, 0x507b, in qla24xx_detect_sfp()
3742 void qla_init_iocb_limit(scsi_qla_host_t *vha) in qla_init_iocb_limit() argument
3746 struct qla_hw_data *ha = vha->hw; in qla_init_iocb_limit()
3774 qla2x00_setup_chip(scsi_qla_host_t *vha) in qla2x00_setup_chip() argument
3778 struct qla_hw_data *ha = vha->hw; in qla2x00_setup_chip()
3785 rval = ha->isp_ops->load_risc(vha, &srisc_address); in qla2x00_setup_chip()
3787 qla2x00_stop_firmware(vha); in qla2x00_setup_chip()
3801 qla81xx_mpi_sync(vha); in qla2x00_setup_chip()
3805 rval = ha->isp_ops->load_risc(vha, &srisc_address); in qla2x00_setup_chip()
3807 ql_dbg(ql_dbg_init, vha, 0x00c9, in qla2x00_setup_chip()
3810 rval = qla2x00_verify_checksum(vha, srisc_address); in qla2x00_setup_chip()
3813 ql_dbg(ql_dbg_init, vha, 0x00ca, in qla2x00_setup_chip()
3819 if (qla_is_exch_offld_enabled(vha)) in qla2x00_setup_chip()
3822 rval = qla2x00_execute_fw(vha, srisc_address); in qla2x00_setup_chip()
3826 if (!done_once++ && qla24xx_detect_sfp(vha)) { in qla2x00_setup_chip()
3827 ql_dbg(ql_dbg_init, vha, 0x00ca, in qla2x00_setup_chip()
3830 ha->isp_ops->reset_chip(vha); in qla2x00_setup_chip()
3831 ha->isp_ops->chip_diag(vha); in qla2x00_setup_chip()
3836 qla27xx_set_zio_threshold(vha, in qla2x00_setup_chip()
3839 rval = qla2x00_set_exlogins_buffer(vha); in qla2x00_setup_chip()
3843 rval = qla2x00_set_exchoffld_buffer(vha); in qla2x00_setup_chip()
3850 qla82xx_check_md_needed(vha); in qla2x00_setup_chip()
3852 rval = qla2x00_get_fw_version(vha); in qla2x00_setup_chip()
3865 qla2x00_get_resource_cnts(vha); in qla2x00_setup_chip()
3866 qla_init_iocb_limit(vha); in qla2x00_setup_chip()
3873 vha->req); in qla2x00_setup_chip()
3878 qla2x00_alloc_offload_mem(vha); in qla2x00_setup_chip()
3881 qla2x00_alloc_fw_dump(vha); in qla2x00_setup_chip()
3887 ql_log(ql_log_fatal, vha, 0x00cd, in qla2x00_setup_chip()
3894 qla25xx_set_els_cmds_supported(vha); in qla2x00_setup_chip()
3916 rval = qla81xx_fac_get_sector_size(vha, &size); in qla2x00_setup_chip()
3921 ql_log(ql_log_warn, vha, 0x00ce, in qla2x00_setup_chip()
3934 ql_log(ql_log_fatal, vha, 0x00cf, in qla2x00_setup_chip()
3973 qla2x00_update_fw_options(scsi_qla_host_t *vha) in qla2x00_update_fw_options() argument
3976 struct qla_hw_data *ha = vha->hw; in qla2x00_update_fw_options()
3979 qla2x00_get_fw_options(vha, ha->fw_options); in qla2x00_update_fw_options()
3985 ql_dbg(ql_dbg_init + ql_dbg_buffer, vha, 0x0115, in qla2x00_update_fw_options()
3987 ql_dump_buffer(ql_dbg_init + ql_dbg_buffer, vha, 0x0109, in qla2x00_update_fw_options()
4046 ql_dbg(ql_dbg_disc, vha, 0x2100, in qla2x00_update_fw_options()
4052 qla2x00_set_fw_options(vha, ha->fw_options); in qla2x00_update_fw_options()
4056 qla24xx_update_fw_options(scsi_qla_host_t *vha) in qla24xx_update_fw_options() argument
4059 struct qla_hw_data *ha = vha->hw; in qla24xx_update_fw_options()
4071 ql_dbg(ql_dbg_disc, vha, 0x2101, in qla24xx_update_fw_options()
4079 if (qla_tgt_mode_enabled(vha) || in qla24xx_update_fw_options()
4080 qla_dual_mode_enabled(vha)) in qla24xx_update_fw_options()
4092 if (qla_tgt_mode_enabled(vha) || in qla24xx_update_fw_options()
4093 qla_dual_mode_enabled(vha)) in qla24xx_update_fw_options()
4112 ql_dbg(ql_dbg_init, vha, 0x00e8, in qla24xx_update_fw_options()
4115 ha->fw_options[3], vha->host->active_mode); in qla24xx_update_fw_options()
4118 qla2x00_set_fw_options(vha, ha->fw_options); in qla24xx_update_fw_options()
4124 rval = qla2x00_set_serdes_params(vha, in qla24xx_update_fw_options()
4129 ql_log(ql_log_warn, vha, 0x0104, in qla24xx_update_fw_options()
4135 qla2x00_config_rings(struct scsi_qla_host *vha) in qla2x00_config_rings() argument
4137 struct qla_hw_data *ha = vha->hw; in qla2x00_config_rings()
4158 qla24xx_config_rings(struct scsi_qla_host *vha) in qla24xx_config_rings() argument
4160 struct qla_hw_data *ha = vha->hw; in qla24xx_config_rings()
4192 ql_dbg(ql_dbg_init, vha, 0x0019, in qla24xx_config_rings()
4209 ql_dbg(ql_dbg_init, vha, 0x00fe, in qla24xx_config_rings()
4227 qlt_24xx_config_rings(vha); in qla24xx_config_rings()
4231 ql_dbg(ql_dbg_init, vha, 0x00fd, in qla24xx_config_rings()
4251 qla2x00_init_rings(scsi_qla_host_t *vha) in qla2x00_init_rings() argument
4256 struct qla_hw_data *ha = vha->hw; in qla2x00_init_rings()
4298 qlt_init_atio_q_entries(vha); in qla2x00_init_rings()
4300 ha->isp_ops->config_rings(vha); in qla2x00_init_rings()
4304 ql_dbg(ql_dbg_init, vha, 0x00d1, "Issue init firmware.\n"); in qla2x00_init_rings()
4307 rval = qlafx00_init_firmware(vha, ha->init_cb_size); in qla2x00_init_rings()
4312 ha->isp_ops->update_fw_options(vha); in qla2x00_init_rings()
4327 ql_dbg(ql_dbg_init, vha, 0x0191, "DPORT Support: %s.\n", in qla2x00_init_rings()
4333 ql_dbg(ql_dbg_init, vha, 0x00bc, "FA-WWPN Support: %s.\n", in qla2x00_init_rings()
4339 rval = qla2x00_init_firmware(vha, ha->init_cb_size); in qla2x00_init_rings()
4342 ql_log(ql_log_fatal, vha, 0x00d2, in qla2x00_init_rings()
4345 ql_dbg(ql_dbg_init, vha, 0x00d3, in qla2x00_init_rings()
4348 vha->u_ql2xexchoffld = vha->u_ql2xiniexchg = 0; in qla2x00_init_rings()
4361 qla2x00_fw_ready(scsi_qla_host_t *vha) in qla2x00_fw_ready() argument
4368 struct qla_hw_data *ha = vha->hw; in qla2x00_fw_ready()
4370 if (IS_QLAFX00(vha->hw)) in qla2x00_fw_ready()
4371 return qlafx00_fw_ready(vha); in qla2x00_fw_ready()
4396 if (!vha->flags.init_done) in qla2x00_fw_ready()
4397 ql_log(ql_log_info, vha, 0x801e, in qla2x00_fw_ready()
4402 rval = qla2x00_get_firmware_state(vha, state); in qla2x00_fw_ready()
4405 vha->device_flags &= ~DFLG_NO_CABLE; in qla2x00_fw_ready()
4408 ql_dbg(ql_dbg_taskm, vha, 0x801f, in qla2x00_fw_ready()
4413 ql_dbg(ql_dbg_taskm, vha, 0x8028, in qla2x00_fw_ready()
4417 rval = qla84xx_init_chip(vha); in qla2x00_fw_ready()
4420 vha, 0x8007, in qla2x00_fw_ready()
4429 ql_dbg(ql_dbg_taskm, vha, 0x8008, in qla2x00_fw_ready()
4435 ql_dbg(ql_dbg_taskm, vha, 0x8037, in qla2x00_fw_ready()
4438 qla2x00_get_retry_cnt(vha, &ha->retry_count, in qla2x00_fw_ready()
4447 if (atomic_read(&vha->loop_down_timer) && in qla2x00_fw_ready()
4453 ql_log(ql_log_info, vha, 0x8038, in qla2x00_fw_ready()
4456 vha->device_flags |= DFLG_NO_CABLE; in qla2x00_fw_ready()
4474 ql_dbg(ql_dbg_taskm, vha, 0x803a, in qla2x00_fw_ready()
4478 if (rval && !(vha->device_flags & DFLG_NO_CABLE)) { in qla2x00_fw_ready()
4479 ql_log(ql_log_warn, vha, 0x803b, in qla2x00_fw_ready()
4500 qla2x00_configure_hba(scsi_qla_host_t *vha) in qla2x00_configure_hba() argument
4510 struct qla_hw_data *ha = vha->hw; in qla2x00_configure_hba()
4516 rval = qla2x00_get_adapter_id(vha, in qla2x00_configure_hba()
4519 if (LOOP_TRANSITION(vha) || atomic_read(&ha->loop_down_timer) || in qla2x00_configure_hba()
4522 ql_dbg(ql_dbg_disc, vha, 0x2008, in qla2x00_configure_hba()
4525 ql_log(ql_log_warn, vha, 0x2009, in qla2x00_configure_hba()
4527 if (IS_FWI2_CAPABLE(ha) && (vha == base_vha) && in qla2x00_configure_hba()
4529 ql_log(ql_log_warn, vha, 0x1151, in qla2x00_configure_hba()
4531 if (qla24xx_link_initialize(vha) == QLA_SUCCESS) in qla2x00_configure_hba()
4534 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); in qla2x00_configure_hba()
4540 ql_log(ql_log_info, vha, 0x200a, in qla2x00_configure_hba()
4545 vha->loop_id = loop_id; in qla2x00_configure_hba()
4554 ql_dbg(ql_dbg_disc, vha, 0x200b, "HBA in NL topology.\n"); in qla2x00_configure_hba()
4560 ql_dbg(ql_dbg_disc, vha, 0x200c, "HBA in FL topology.\n"); in qla2x00_configure_hba()
4567 ql_dbg(ql_dbg_disc, vha, 0x200d, "HBA in N P2P topology.\n"); in qla2x00_configure_hba()
4574 ql_dbg(ql_dbg_disc, vha, 0x200e, "HBA in F P2P topology.\n"); in qla2x00_configure_hba()
4582 ql_dbg(ql_dbg_disc, vha, 0x200f, in qla2x00_configure_hba()
4597 qlt_update_host_map(vha, id); in qla2x00_configure_hba()
4600 if (!vha->flags.init_done) in qla2x00_configure_hba()
4601 ql_log(ql_log_info, vha, 0x2010, in qla2x00_configure_hba()
4603 connect_type, vha->loop_id); in qla2x00_configure_hba()
4609 qla2x00_set_model_info(scsi_qla_host_t *vha, uint8_t *model, size_t len, in qla2x00_set_model_info() argument
4615 struct qla_hw_data *ha = vha->hw; in qla2x00_set_model_info()
4655 qla2xxx_get_vpd_field(vha, "\x82", ha->model_desc, in qla2x00_set_model_info()
4662 static void qla2xxx_nvram_wwn_from_ofw(scsi_qla_host_t *vha, nvram_t *nv) in qla2xxx_nvram_wwn_from_ofw() argument
4665 struct qla_hw_data *ha = vha->hw; in qla2xxx_nvram_wwn_from_ofw()
4695 qla2x00_nvram_config(scsi_qla_host_t *vha) in qla2x00_nvram_config() argument
4701 struct qla_hw_data *ha = vha->hw; in qla2x00_nvram_config()
4717 ha->isp_ops->read_nvram(vha, ptr, ha->nvram_base, ha->nvram_size); in qla2x00_nvram_config()
4721 ql_dbg(ql_dbg_init + ql_dbg_buffer, vha, 0x010f, in qla2x00_nvram_config()
4723 ql_dump_buffer(ql_dbg_init + ql_dbg_buffer, vha, 0x0110, in qla2x00_nvram_config()
4730 ql_log(ql_log_warn, vha, 0x0064, in qla2x00_nvram_config()
4733 ql_log(ql_log_warn, vha, 0x0065, in qla2x00_nvram_config()
4771 qla2xxx_nvram_wwn_from_ofw(vha, nv); in qla2x00_nvram_config()
4811 qla2x00_set_model_info(vha, nv->model_number, in qla2x00_nvram_config()
4892 memcpy(vha->node_name, icb->node_name, WWN_SIZE); in qla2x00_nvram_config()
4893 memcpy(vha->port_name, icb->port_name, WWN_SIZE); in qla2x00_nvram_config()
4960 vha->flags.process_response_queue = 1; in qla2x00_nvram_config()
4963 if (!vha->flags.init_done) { in qla2x00_nvram_config()
4971 vha->flags.process_response_queue = 0; in qla2x00_nvram_config()
4975 ql_log(ql_log_info, vha, 0x0068, in qla2x00_nvram_config()
4981 vha->flags.process_response_queue = 1; in qla2x00_nvram_config()
4986 ql_log(ql_log_warn, vha, 0x0069, in qla2x00_nvram_config()
4999 spin_lock_irqsave(fcport->vha->host->host_lock, flags); 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()
5022 ql_dbg(ql_dbg_disc, fcport->vha, 0x207d, in qla2x00_set_fcport_state()
5038 qla2x00_alloc_fcport(scsi_qla_host_t *vha, gfp_t flags) in qla2x00_alloc_fcport() argument
5046 fcport->ct_desc.ct_sns = dma_alloc_coherent(&vha->hw->pdev->dev, in qla2x00_alloc_fcport()
5050 ql_log(ql_log_warn, vha, 0xd049, in qla2x00_alloc_fcport()
5057 fcport->vha = vha; 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()
5072 ql_log(ql_log_warn, vha, 0xd049, in qla2x00_alloc_fcport()
5091 dma_free_coherent(&fcport->vha->hw->pdev->dev, in qla2x00_free_fcport()
5102 static void qla_get_login_template(scsi_qla_host_t *vha) in qla_get_login_template() argument
5104 struct qla_hw_data *ha = vha->hw; in qla_get_login_template()
5111 rval = qla24xx_get_port_login_templ(vha, ha->init_cb_dma, in qla_get_login_template()
5114 ql_dbg(ql_dbg_init, vha, 0x00d1, in qla_get_login_template()
5138 qla2x00_configure_loop(scsi_qla_host_t *vha) in qla2x00_configure_loop() argument
5142 struct qla_hw_data *ha = vha->hw; in qla2x00_configure_loop()
5147 if (test_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags)) { in qla2x00_configure_loop()
5148 rval = qla2x00_configure_hba(vha); in qla2x00_configure_loop()
5150 ql_dbg(ql_dbg_disc, vha, 0x2013, in qla2x00_configure_loop()
5156 save_flags = flags = vha->dpc_flags; in qla2x00_configure_loop()
5157 ql_dbg(ql_dbg_disc, vha, 0x2014, in qla2x00_configure_loop()
5164 clear_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qla2x00_configure_loop()
5165 clear_bit(RSCN_UPDATE, &vha->dpc_flags); in qla2x00_configure_loop()
5167 qla2x00_get_data_rate(vha); in qla2x00_configure_loop()
5168 qla_get_login_template(vha); in qla2x00_configure_loop()
5182 } else if (!vha->flags.online || in qla2x00_configure_loop()
5189 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) { in qla2x00_configure_loop()
5190 ql_dbg(ql_dbg_disc, vha, 0x2015, in qla2x00_configure_loop()
5194 rval = qla2x00_configure_local_loop(vha); in qla2x00_configure_loop()
5198 if (LOOP_TRANSITION(vha)) { in qla2x00_configure_loop()
5199 ql_dbg(ql_dbg_disc, vha, 0x2099, in qla2x00_configure_loop()
5204 rval = qla2x00_configure_fabric(vha); in qla2x00_configure_loop()
5208 if (atomic_read(&vha->loop_down_timer) || in qla2x00_configure_loop()
5209 test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) { in qla2x00_configure_loop()
5212 atomic_set(&vha->loop_state, LOOP_READY); in qla2x00_configure_loop()
5213 ql_dbg(ql_dbg_disc, vha, 0x2069, in qla2x00_configure_loop()
5221 if (qla_tgt_mode_enabled(vha) || in qla2x00_configure_loop()
5222 qla_dual_mode_enabled(vha)) { in qla2x00_configure_loop()
5224 qlt_24xx_process_atio_queue(vha, 0); in qla2x00_configure_loop()
5232 ql_dbg(ql_dbg_disc, vha, 0x206a, in qla2x00_configure_loop()
5235 ql_dbg(ql_dbg_disc, vha, 0x206b, in qla2x00_configure_loop()
5240 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) { in qla2x00_configure_loop()
5242 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qla2x00_configure_loop()
5244 set_bit(RSCN_UPDATE, &vha->dpc_flags); in qla2x00_configure_loop()
5251 static int qla2x00_configure_n2n_loop(scsi_qla_host_t *vha) in qla2x00_configure_n2n_loop() argument
5256 if (test_and_clear_bit(N2N_LOGIN_NEEDED, &vha->dpc_flags)) in qla2x00_configure_n2n_loop()
5257 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla2x00_configure_n2n_loop()
5259 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_configure_n2n_loop()
5261 qla24xx_fcport_handle_login(vha, fcport); in qla2x00_configure_n2n_loop()
5266 spin_lock_irqsave(&vha->work_lock, flags); in qla2x00_configure_n2n_loop()
5267 vha->scan.scan_retry++; in qla2x00_configure_n2n_loop()
5268 spin_unlock_irqrestore(&vha->work_lock, flags); in qla2x00_configure_n2n_loop()
5270 if (vha->scan.scan_retry < MAX_SCAN_RETRIES) { in qla2x00_configure_n2n_loop()
5271 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qla2x00_configure_n2n_loop()
5272 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla2x00_configure_n2n_loop()
5278 qla_reinitialize_link(scsi_qla_host_t *vha) in qla_reinitialize_link() argument
5282 atomic_set(&vha->loop_state, LOOP_DOWN); in qla_reinitialize_link()
5283 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); in qla_reinitialize_link()
5284 rval = qla2x00_full_login_lip(vha); in qla_reinitialize_link()
5286 ql_dbg(ql_dbg_disc, vha, 0xd050, "Link reinitialized\n"); in qla_reinitialize_link()
5288 ql_dbg(ql_dbg_disc, vha, 0xd051, in qla_reinitialize_link()
5304 qla2x00_configure_local_loop(scsi_qla_host_t *vha) in qla2x00_configure_local_loop() argument
5315 struct qla_hw_data *ha = vha->hw; in qla2x00_configure_local_loop()
5320 return qla2x00_configure_n2n_loop(vha); in qla2x00_configure_local_loop()
5328 rval = qla2x00_get_id_list(vha, ha->gid_list, ha->gid_list_dma, in qla2x00_configure_local_loop()
5333 ql_dbg(ql_dbg_disc, vha, 0x2011, in qla2x00_configure_local_loop()
5335 ql_dump_buffer(ql_dbg_disc + ql_dbg_buffer, vha, 0x2075, in qla2x00_configure_local_loop()
5339 spin_lock_irqsave(&vha->work_lock, flags); in qla2x00_configure_local_loop()
5340 vha->scan.scan_retry++; in qla2x00_configure_local_loop()
5341 spin_unlock_irqrestore(&vha->work_lock, flags); in qla2x00_configure_local_loop()
5343 if (vha->scan.scan_retry < MAX_SCAN_RETRIES) { in qla2x00_configure_local_loop()
5347 rc = qla2x00_get_fcal_position_map(vha, NULL, in qla2x00_configure_local_loop()
5354 qla_reinitialize_link(vha); in qla2x00_configure_local_loop()
5357 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qla2x00_configure_local_loop()
5358 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla2x00_configure_local_loop()
5361 vha->scan.scan_retry = 0; in qla2x00_configure_local_loop()
5364 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_configure_local_loop()
5369 new_fcport = qla2x00_alloc_fcport(vha, GFP_KERNEL); in qla2x00_configure_local_loop()
5371 ql_log(ql_log_warn, vha, 0x2012, in qla2x00_configure_local_loop()
5395 if (area && domain && ((area != vha->d_id.b.area) || in qla2x00_configure_local_loop()
5396 (domain != vha->d_id.b.domain)) && in qla2x00_configure_local_loop()
5414 rval2 = qla2x00_get_port_database(vha, new_fcport, 0); in qla2x00_configure_local_loop()
5416 ql_dbg(ql_dbg_disc, vha, 0x2097, in qla2x00_configure_local_loop()
5422 ql_dbg(ql_dbg_disc, vha, 0x2105, in qla2x00_configure_local_loop()
5424 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla2x00_configure_local_loop()
5429 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qla2x00_configure_local_loop()
5433 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_configure_local_loop()
5446 fcport->login_retry = vha->hw->login_retry_count; in qla2x00_configure_local_loop()
5447 ql_dbg(ql_dbg_disc, vha, 0x2135, in qla2x00_configure_local_loop()
5458 list_add_tail(&new_fcport->list, &vha->vp_fcports); in qla2x00_configure_local_loop()
5463 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qla2x00_configure_local_loop()
5465 new_fcport = qla2x00_alloc_fcport(vha, GFP_KERNEL); in qla2x00_configure_local_loop()
5468 ql_log(ql_log_warn, vha, 0xd031, in qla2x00_configure_local_loop()
5473 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qla2x00_configure_local_loop()
5477 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qla2x00_configure_local_loop()
5485 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_configure_local_loop()
5486 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) in qla2x00_configure_local_loop()
5490 if ((qla_dual_mode_enabled(vha) || in qla2x00_configure_local_loop()
5491 qla_ini_mode_enabled(vha)) && in qla2x00_configure_local_loop()
5493 qla2x00_mark_device_lost(vha, fcport, in qla2x00_configure_local_loop()
5499 ql_dbg(ql_dbg_disc, vha, 0x20f0, in qla2x00_configure_local_loop()
5511 qla24xx_fcport_handle_login(vha, fcport); in qla2x00_configure_local_loop()
5519 ql_dbg(ql_dbg_disc, vha, 0x2098, in qla2x00_configure_local_loop()
5525 qla2x00_iidma_fcport(scsi_qla_host_t *vha, fc_port_t *fcport) in qla2x00_iidma_fcport() argument
5529 struct qla_hw_data *ha = vha->hw; in qla2x00_iidma_fcport()
5542 rval = qla2x00_set_idma_speed(vha, fcport->loop_id, fcport->fp_speed, in qla2x00_iidma_fcport()
5545 ql_dbg(ql_dbg_disc, vha, 0x2004, in qla2x00_iidma_fcport()
5549 ql_dbg(ql_dbg_disc, vha, 0x2005, 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
5566 e = qla2x00_alloc_work(vha, QLA_EVT_IIDMA); in qla_post_iidma_work()
5571 return qla2x00_post_work(vha, e); 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
5590 fcport->rport = rport = fc_remote_port_add(vha->host, 0, &rport_ids); in qla2x00_reg_remote_port()
5592 ql_log(ql_log_warn, vha, 0x2006, in qla2x00_reg_remote_port()
5597 spin_lock_irqsave(fcport->vha->host->host_lock, flags); in qla2x00_reg_remote_port()
5599 spin_unlock_irqrestore(fcport->vha->host->host_lock, flags); in qla2x00_reg_remote_port()
5615 ql_dbg(ql_dbg_disc, vha, 0x20ee, in qla2x00_reg_remote_port()
5640 qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport) in qla2x00_update_fcport() argument
5645 ql_dbg(ql_dbg_disc, vha, 0x20ef, "%s %8phC\n", in qla2x00_update_fcport()
5649 fcport->login_retry = vha->hw->login_retry_count; in qla2x00_update_fcport()
5652 if (vha->hw->current_topology == ISP_CFG_NL) in qla2x00_update_fcport()
5658 switch (vha->hw->current_topology) { 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()
5678 qla24xx_update_fcport_fcp_prio(vha, fcport); in qla2x00_update_fcport()
5680 switch (vha->host->active_mode) { in qla2x00_update_fcport()
5682 qla2x00_reg_remote_port(vha, fcport); in qla2x00_update_fcport()
5685 if (!vha->vha_tgt.qla_tgt->tgt_stop && in qla2x00_update_fcport()
5686 !vha->vha_tgt.qla_tgt->tgt_stopped) 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()
5691 if (!vha->vha_tgt.qla_tgt->tgt_stop && in qla2x00_update_fcport()
5692 !vha->vha_tgt.qla_tgt->tgt_stopped) in qla2x00_update_fcport()
5693 qlt_fc_port_added(vha, fcport); in qla2x00_update_fcport()
5701 if (IS_IIDMA_CAPABLE(vha->hw) && vha->hw->flags.gpsc_supported) { in qla2x00_update_fcport()
5704 ql_dbg(ql_dbg_disc, vha, 0x20d7, in qla2x00_update_fcport()
5707 vha->fcport_count); in qla2x00_update_fcport()
5708 qla24xx_post_gfpnid_work(vha, fcport); in qla2x00_update_fcport()
5710 ql_dbg(ql_dbg_disc, vha, 0x20d7, in qla2x00_update_fcport()
5713 vha->fcport_count); in qla2x00_update_fcport()
5714 qla24xx_post_gpsc_work(vha, fcport); in qla2x00_update_fcport()
5730 qla2x00_update_fcport(fcport->vha, fcport); in qla_register_fcport_fn()
5740 qla2x00_post_async_adisc_work(fcport->vha, fcport, in qla_register_fcport_fn()
5761 qla2x00_configure_fabric(scsi_qla_host_t *vha) in qla2x00_configure_fabric() argument
5768 struct qla_hw_data *ha = vha->hw; in qla2x00_configure_fabric()
5776 rval = qla2x00_get_port_name(vha, loop_id, vha->fabric_node_name, 1); in qla2x00_configure_fabric()
5778 ql_dbg(ql_dbg_disc, vha, 0x20a0, in qla2x00_configure_fabric()
5781 vha->device_flags &= ~SWITCH_FOUND; in qla2x00_configure_fabric()
5784 vha->device_flags |= SWITCH_FOUND; in qla2x00_configure_fabric()
5786 rval = qla2x00_get_port_name(vha, loop_id, vha->fabric_port_name, 0); in qla2x00_configure_fabric()
5788 ql_dbg(ql_dbg_disc, vha, 0x20ff, in qla2x00_configure_fabric()
5791 if (qla_tgt_mode_enabled(vha) || qla_dual_mode_enabled(vha)) { in qla2x00_configure_fabric()
5792 rval = qla2x00_send_change_request(vha, 0x3, 0); in qla2x00_configure_fabric()
5794 ql_log(ql_log_warn, vha, 0x121, in qla2x00_configure_fabric()
5800 qla2x00_mgmt_svr_login(vha); in qla2x00_configure_fabric()
5804 rval = ha->isp_ops->fabric_login(vha, loop_id, 0xff, 0xff, in qla2x00_configure_fabric()
5807 ql_dbg(ql_dbg_disc, vha, 0x20a1, in qla2x00_configure_fabric()
5810 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla2x00_configure_fabric()
5816 test_and_clear_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags)) in qla2x00_configure_fabric()
5817 qla2x00_fdmi_register(vha); in qla2x00_configure_fabric()
5819 if (test_and_clear_bit(REGISTER_FC4_NEEDED, &vha->dpc_flags)) { in qla2x00_configure_fabric()
5820 if (qla2x00_rft_id(vha)) { in qla2x00_configure_fabric()
5822 ql_dbg(ql_dbg_disc, vha, 0x20a2, in qla2x00_configure_fabric()
5825 &vha->dpc_flags)) in qla2x00_configure_fabric()
5828 if (qla2x00_rff_id(vha, FC4_TYPE_FCP_SCSI)) { in qla2x00_configure_fabric()
5830 ql_dbg(ql_dbg_disc, vha, 0x209a, in qla2x00_configure_fabric()
5833 &vha->dpc_flags)) in qla2x00_configure_fabric()
5836 if (vha->flags.nvme_enabled) { in qla2x00_configure_fabric()
5837 if (qla2x00_rff_id(vha, FC_TYPE_NVME)) { in qla2x00_configure_fabric()
5838 ql_dbg(ql_dbg_disc, vha, 0x2049, in qla2x00_configure_fabric()
5842 if (qla2x00_rnn_id(vha)) { in qla2x00_configure_fabric()
5844 ql_dbg(ql_dbg_disc, vha, 0x2104, in qla2x00_configure_fabric()
5847 &vha->dpc_flags)) in qla2x00_configure_fabric()
5849 } else if (qla2x00_rsnn_nn(vha)) { in qla2x00_configure_fabric()
5851 ql_dbg(ql_dbg_disc, vha, 0x209b, in qla2x00_configure_fabric()
5853 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) in qla2x00_configure_fabric()
5865 qlt_do_generation_tick(vha, &discovery_gen); in qla2x00_configure_fabric()
5868 rval = qla24xx_async_gpnft(vha, FC4_TYPE_FCP_SCSI, in qla2x00_configure_fabric()
5871 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla2x00_configure_fabric()
5873 list_for_each_entry(fcport, &vha->vp_fcports, list) in qla2x00_configure_fabric()
5876 rval = qla2x00_find_all_fabric_devs(vha); in qla2x00_configure_fabric()
5882 if (!vha->nvme_local_port && vha->flags.nvme_enabled) in qla2x00_configure_fabric()
5883 qla_nvme_register_hba(vha); in qla2x00_configure_fabric()
5886 ql_dbg(ql_dbg_disc, vha, 0x2068, in qla2x00_configure_fabric()
5906 qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha) in qla2x00_find_all_fabric_devs() argument
5917 struct qla_hw_data *ha = vha->hw; in qla2x00_find_all_fabric_devs()
5930 ql_dbg(ql_dbg_disc, vha, 0x209c, in qla2x00_find_all_fabric_devs()
5934 if (qla2x00_gid_pt(vha, swl) != QLA_SUCCESS) { in qla2x00_find_all_fabric_devs()
5936 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) in qla2x00_find_all_fabric_devs()
5938 } else if (qla2x00_gpn_id(vha, swl) != QLA_SUCCESS) { in qla2x00_find_all_fabric_devs()
5940 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) in qla2x00_find_all_fabric_devs()
5942 } else if (qla2x00_gnn_id(vha, swl) != QLA_SUCCESS) { in qla2x00_find_all_fabric_devs()
5944 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) in qla2x00_find_all_fabric_devs()
5946 } else if (qla2x00_gfpn_id(vha, swl) != QLA_SUCCESS) { in qla2x00_find_all_fabric_devs()
5948 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) in qla2x00_find_all_fabric_devs()
5954 qla2x00_gff_id(vha, swl); in qla2x00_find_all_fabric_devs()
5955 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) in qla2x00_find_all_fabric_devs()
5962 new_fcport = qla2x00_alloc_fcport(vha, GFP_KERNEL); in qla2x00_find_all_fabric_devs()
5964 ql_log(ql_log_warn, vha, 0x209d, in qla2x00_find_all_fabric_devs()
5976 if (qla2x00_is_reserved_id(vha, loop_id)) in qla2x00_find_all_fabric_devs()
5980 (atomic_read(&vha->loop_down_timer) || in qla2x00_find_all_fabric_devs()
5981 LOOP_TRANSITION(vha))) { in qla2x00_find_all_fabric_devs()
5982 atomic_set(&vha->loop_down_timer, 0); in qla2x00_find_all_fabric_devs()
5983 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla2x00_find_all_fabric_devs()
5984 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qla2x00_find_all_fabric_devs()
6003 if (vha->flags.nvme_enabled && in qla2x00_find_all_fabric_devs()
6005 ql_log(ql_log_info, vha, 0x2131, in qla2x00_find_all_fabric_devs()
6017 rval = qla2x00_ga_nxt(vha, new_fcport); in qla2x00_find_all_fabric_devs()
6019 ql_log(ql_log_warn, vha, 0x209e, in qla2x00_find_all_fabric_devs()
6032 ql_dbg(ql_dbg_disc, vha, 0x209f, in qla2x00_find_all_fabric_devs()
6045 if (qla2x00_is_a_vp_did(vha, new_fcport->d_id.b24)) in qla2x00_find_all_fabric_devs()
6050 (vha->d_id.b24 & 0xffff00)) && ha->current_topology == in qla2x00_find_all_fabric_devs()
6064 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qla2x00_find_all_fabric_devs()
6068 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_find_all_fabric_devs()
6088 (vha->host->active_mode == MODE_TARGET))) { in qla2x00_find_all_fabric_devs()
6109 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf080, in qla2x00_find_all_fabric_devs()
6129 if (found && NVME_TARGET(vha->hw, fcport)) { in qla2x00_find_all_fabric_devs()
6132 vha->fcport_count--; in qla2x00_find_all_fabric_devs()
6138 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qla2x00_find_all_fabric_devs()
6143 list_add_tail(&new_fcport->list, &vha->vp_fcports); in qla2x00_find_all_fabric_devs()
6145 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qla2x00_find_all_fabric_devs()
6150 new_fcport = qla2x00_alloc_fcport(vha, GFP_KERNEL); in qla2x00_find_all_fabric_devs()
6152 ql_log(ql_log_warn, vha, 0xd032, in qla2x00_find_all_fabric_devs()
6165 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_find_all_fabric_devs()
6166 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) in qla2x00_find_all_fabric_devs()
6173 if ((qla_dual_mode_enabled(vha) || in qla2x00_find_all_fabric_devs()
6174 qla_ini_mode_enabled(vha)) && in qla2x00_find_all_fabric_devs()
6176 qla2x00_mark_device_lost(vha, fcport, in qla2x00_find_all_fabric_devs()
6182 ql_dbg(ql_dbg_disc, vha, 0x20f0, in qla2x00_find_all_fabric_devs()
6194 qla24xx_fcport_handle_login(vha, fcport); in qla2x00_find_all_fabric_devs()
6201 qla2x00_reserve_mgmt_server_loop_id(scsi_qla_host_t *vha) in qla2x00_reserve_mgmt_server_loop_id() argument
6204 int lid = NPH_MGMT_SERVER - vha->vp_idx; in qla2x00_reserve_mgmt_server_loop_id()
6206 struct qla_hw_data *ha = vha->hw; in qla2x00_reserve_mgmt_server_loop_id()
6208 if (vha->vp_idx == 0) { in qla2x00_reserve_mgmt_server_loop_id()
6216 if (!test_bit(lid, vha->hw->loop_id_map)) { in qla2x00_reserve_mgmt_server_loop_id()
6217 set_bit(lid, vha->hw->loop_id_map); in qla2x00_reserve_mgmt_server_loop_id()
6242 qla2x00_fabric_login(scsi_qla_host_t *vha, fc_port_t *fcport, in qla2x00_fabric_login() argument
6249 struct qla_hw_data *ha = vha->hw; in qla2x00_fabric_login()
6255 ql_dbg(ql_dbg_disc, vha, 0x2000, in qla2x00_fabric_login()
6262 rval = ha->isp_ops->fabric_login(vha, fcport->loop_id, in qla2x00_fabric_login()
6280 ql_dbg(ql_dbg_disc, vha, 0x2001, in qla2x00_fabric_login()
6328 rval = qla2x00_find_new_loop_id(vha, fcport); in qla2x00_fabric_login()
6340 ha->isp_ops->fabric_logout(vha, fcport->loop_id, in qla2x00_fabric_login()
6343 qla2x00_mark_device_lost(vha, fcport, 1); in qla2x00_fabric_login()
6351 ql_dbg(ql_dbg_disc, vha, 0x2002, in qla2x00_fabric_login()
6358 ha->isp_ops->fabric_logout(vha, fcport->loop_id, 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()
6416 qla2x00_loop_resync(scsi_qla_host_t *vha) in qla2x00_loop_resync() argument
6421 clear_bit(ISP_ABORT_RETRY, &vha->dpc_flags); in qla2x00_loop_resync()
6422 if (vha->flags.online) { in qla2x00_loop_resync()
6423 if (!(rval = qla2x00_fw_ready(vha))) { in qla2x00_loop_resync()
6427 if (!IS_QLAFX00(vha->hw)) { in qla2x00_loop_resync()
6432 qla2x00_marker(vha, vha->hw->base_qpair, in qla2x00_loop_resync()
6434 vha->marker_needed = 0; in qla2x00_loop_resync()
6438 clear_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla2x00_loop_resync()
6440 if (IS_QLAFX00(vha->hw)) in qla2x00_loop_resync()
6441 qlafx00_configure_devices(vha); in qla2x00_loop_resync()
6443 qla2x00_configure_loop(vha); in qla2x00_loop_resync()
6446 } while (!atomic_read(&vha->loop_down_timer) && in qla2x00_loop_resync()
6447 !(test_bit(ISP_ABORT_NEEDED, &vha->dpc_flags)) in qla2x00_loop_resync()
6449 &vha->dpc_flags))); in qla2x00_loop_resync()
6453 if (test_bit(ISP_ABORT_NEEDED, &vha->dpc_flags)) in qla2x00_loop_resync()
6457 ql_dbg(ql_dbg_disc, vha, 0x206c, in qla2x00_loop_resync()
6498 struct scsi_qla_host *vha; in qla2x00_update_fcports() local
6504 list_for_each_entry(vha, &base_vha->hw->vp_list, list) { in qla2x00_update_fcports()
6505 atomic_inc(&vha->vref_count); in qla2x00_update_fcports()
6506 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_update_fcports()
6515 atomic_dec(&vha->vref_count); in qla2x00_update_fcports()
6516 wake_up(&vha->vref_waitq); in qla2x00_update_fcports()
6523 qla83xx_reset_ownership(scsi_qla_host_t *vha) in qla83xx_reset_ownership() argument
6525 struct qla_hw_data *ha = vha->hw; in qla83xx_reset_ownership()
6532 drv_presence = qla8044_rd_direct(vha, in qla83xx_reset_ownership()
6534 dev_part_info1 = qla8044_rd_direct(vha, in qla83xx_reset_ownership()
6536 dev_part_info2 = qla8044_rd_direct(vha, in qla83xx_reset_ownership()
6539 qla83xx_rd_reg(vha, QLA83XX_IDC_DRV_PRESENCE, &drv_presence); in qla83xx_reset_ownership()
6540 qla83xx_rd_reg(vha, QLA83XX_DEV_PARTINFO1, &dev_part_info1); in qla83xx_reset_ownership()
6541 qla83xx_rd_reg(vha, QLA83XX_DEV_PARTINFO2, &dev_part_info2); in qla83xx_reset_ownership()
6575 ql_dbg(ql_dbg_p3p, vha, 0xb07f, in qla83xx_reset_ownership()
6582 __qla83xx_set_drv_ack(scsi_qla_host_t *vha) in __qla83xx_set_drv_ack() argument
6585 struct qla_hw_data *ha = vha->hw; in __qla83xx_set_drv_ack()
6588 rval = qla83xx_rd_reg(vha, QLA83XX_IDC_DRIVER_ACK, &drv_ack); in __qla83xx_set_drv_ack()
6591 rval = qla83xx_wr_reg(vha, QLA83XX_IDC_DRIVER_ACK, drv_ack); in __qla83xx_set_drv_ack()
6598 __qla83xx_clear_drv_ack(scsi_qla_host_t *vha) in __qla83xx_clear_drv_ack() argument
6601 struct qla_hw_data *ha = vha->hw; in __qla83xx_clear_drv_ack()
6604 rval = qla83xx_rd_reg(vha, QLA83XX_IDC_DRIVER_ACK, &drv_ack); in __qla83xx_clear_drv_ack()
6607 rval = qla83xx_wr_reg(vha, QLA83XX_IDC_DRIVER_ACK, drv_ack); in __qla83xx_clear_drv_ack()
6638 qla83xx_idc_audit(scsi_qla_host_t *vha, int audit_type) in qla83xx_idc_audit() argument
6640 struct qla_hw_data *ha = vha->hw; in qla83xx_idc_audit()
6648 qla83xx_wr_reg(vha, QLA83XX_IDC_AUDIT, idc_audit_reg); in qla83xx_idc_audit()
6656 qla83xx_wr_reg(vha, QLA83XX_IDC_AUDIT, idc_audit_reg); in qla83xx_idc_audit()
6660 ql_log(ql_log_warn, vha, 0xb078, in qla83xx_idc_audit()
6668 qla83xx_initiating_reset(scsi_qla_host_t *vha) in qla83xx_initiating_reset() argument
6670 struct qla_hw_data *ha = vha->hw; in qla83xx_initiating_reset()
6673 __qla83xx_get_idc_control(vha, &idc_control); in qla83xx_initiating_reset()
6675 ql_log(ql_log_info, vha, 0xb080, in qla83xx_initiating_reset()
6682 qla83xx_rd_reg(vha, QLA83XX_IDC_DEV_STATE, &dev_state); in qla83xx_initiating_reset()
6684 qla83xx_wr_reg(vha, QLA83XX_IDC_DEV_STATE, in qla83xx_initiating_reset()
6686 ql_log(ql_log_info, vha, 0xb056, "HW State: NEED RESET.\n"); in qla83xx_initiating_reset()
6687 qla83xx_idc_audit(vha, IDC_AUDIT_TIMESTAMP); in qla83xx_initiating_reset()
6691 ql_log(ql_log_info, vha, 0xb057, "HW State: %s.\n", state); in qla83xx_initiating_reset()
6696 qla83xx_idc_unlock(vha, 0); in qla83xx_initiating_reset()
6698 qla83xx_idc_lock(vha, 0); in qla83xx_initiating_reset()
6699 qla83xx_rd_reg(vha, QLA83XX_IDC_DEV_STATE, &dev_state); in qla83xx_initiating_reset()
6704 __qla83xx_set_drv_ack(vha); in qla83xx_initiating_reset()
6710 __qla83xx_set_idc_control(scsi_qla_host_t *vha, uint32_t idc_control) in __qla83xx_set_idc_control() argument
6712 return qla83xx_wr_reg(vha, QLA83XX_IDC_CONTROL, idc_control); in __qla83xx_set_idc_control()
6716 __qla83xx_get_idc_control(scsi_qla_host_t *vha, uint32_t *idc_control) in __qla83xx_get_idc_control() argument
6718 return qla83xx_rd_reg(vha, QLA83XX_IDC_CONTROL, idc_control); in __qla83xx_get_idc_control()
6722 qla83xx_check_driver_presence(scsi_qla_host_t *vha) in qla83xx_check_driver_presence() argument
6725 struct qla_hw_data *ha = vha->hw; in qla83xx_check_driver_presence()
6727 qla83xx_rd_reg(vha, QLA83XX_IDC_DRV_PRESENCE, &drv_presence); in qla83xx_check_driver_presence()
6735 qla83xx_nic_core_reset(scsi_qla_host_t *vha) in qla83xx_nic_core_reset() argument
6738 struct qla_hw_data *ha = vha->hw; in qla83xx_nic_core_reset()
6740 ql_dbg(ql_dbg_p3p, vha, 0xb058, in qla83xx_nic_core_reset()
6743 if (vha->device_flags & DFLG_DEV_FAILED) { in qla83xx_nic_core_reset()
6744 ql_log(ql_log_warn, vha, 0xb059, in qla83xx_nic_core_reset()
6749 qla83xx_idc_lock(vha, 0); in qla83xx_nic_core_reset()
6751 if (qla83xx_check_driver_presence(vha) != QLA_SUCCESS) { in qla83xx_nic_core_reset()
6752 ql_log(ql_log_warn, vha, 0xb05a, in qla83xx_nic_core_reset()
6759 qla83xx_reset_ownership(vha); in qla83xx_nic_core_reset()
6761 rval = qla83xx_initiating_reset(vha); in qla83xx_nic_core_reset()
6768 rval = qla83xx_idc_state_handler(vha); in qla83xx_nic_core_reset()
6772 __qla83xx_clear_drv_ack(vha); in qla83xx_nic_core_reset()
6776 qla83xx_idc_unlock(vha, 0); in qla83xx_nic_core_reset()
6778 ql_dbg(ql_dbg_p3p, vha, 0xb05b, "Exiting %s.\n", __func__); in qla83xx_nic_core_reset()
6784 qla2xxx_mctp_dump(scsi_qla_host_t *vha) in qla2xxx_mctp_dump() argument
6786 struct qla_hw_data *ha = vha->hw; in qla2xxx_mctp_dump()
6791 ql_log(ql_log_info, vha, 0x506d, in qla2xxx_mctp_dump()
6801 ql_log(ql_log_warn, vha, 0x506e, in qla2xxx_mctp_dump()
6808 rval = qla2x00_dump_mctp_data(vha, ha->mctp_dump_dma, in qla2xxx_mctp_dump()
6811 ql_log(ql_log_warn, vha, 0x506f, in qla2xxx_mctp_dump()
6814 ql_log(ql_log_info, vha, 0x5070, in qla2xxx_mctp_dump()
6816 vha->host_no, ha->mctp_dump); in qla2xxx_mctp_dump()
6822 rval = qla83xx_restart_nic_firmware(vha); in qla2xxx_mctp_dump()
6825 ql_log(ql_log_warn, vha, 0x5071, in qla2xxx_mctp_dump()
6828 ql_dbg(ql_dbg_p3p, vha, 0xb084, in qla2xxx_mctp_dump()
6846 qla2x00_quiesce_io(scsi_qla_host_t *vha) in qla2x00_quiesce_io() argument
6848 struct qla_hw_data *ha = vha->hw; in qla2x00_quiesce_io()
6851 ql_dbg(ql_dbg_dpc, vha, 0x401d, in qla2x00_quiesce_io()
6855 if (atomic_read(&vha->loop_state) != LOOP_DOWN) { in qla2x00_quiesce_io()
6856 atomic_set(&vha->loop_state, LOOP_DOWN); in qla2x00_quiesce_io()
6857 qla2x00_mark_all_devices_lost(vha); in qla2x00_quiesce_io()
6861 if (!atomic_read(&vha->loop_down_timer)) in qla2x00_quiesce_io()
6862 atomic_set(&vha->loop_down_timer, in qla2x00_quiesce_io()
6866 WARN_ON_ONCE(qla2x00_eh_wait_for_pending_commands(vha, 0, 0, WAIT_HOST) in qla2x00_quiesce_io()
6871 qla2x00_abort_isp_cleanup(scsi_qla_host_t *vha) in qla2x00_abort_isp_cleanup() argument
6873 struct qla_hw_data *ha = vha->hw; in qla2x00_abort_isp_cleanup()
6883 vha->flags.online = 0; in qla2x00_abort_isp_cleanup()
6885 clear_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); in qla2x00_abort_isp_cleanup()
6886 vha->qla_stats.total_isp_aborts++; in qla2x00_abort_isp_cleanup()
6888 ql_log(ql_log_info, vha, 0x00af, in qla2x00_abort_isp_cleanup()
6897 ha->isp_ops->reset_chip(vha); in qla2x00_abort_isp_cleanup()
6932 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); in qla2x00_abort_isp_cleanup()
6933 if (atomic_read(&vha->loop_state) != LOOP_DOWN) { in qla2x00_abort_isp_cleanup()
6934 atomic_set(&vha->loop_state, LOOP_DOWN); in qla2x00_abort_isp_cleanup()
6935 qla2x00_mark_all_devices_lost(vha); in qla2x00_abort_isp_cleanup()
6949 if (!atomic_read(&vha->loop_down_timer)) in qla2x00_abort_isp_cleanup()
6950 atomic_set(&vha->loop_down_timer, in qla2x00_abort_isp_cleanup()
6955 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_abort_isp_cleanup()
6975 qla82xx_chip_reset_cleanup(vha); in qla2x00_abort_isp_cleanup()
6976 ql_log(ql_log_info, vha, 0x00b4, in qla2x00_abort_isp_cleanup()
6982 vha->flags.online = 0; in qla2x00_abort_isp_cleanup()
6986 qla2x00_abort_all_cmds(vha, DID_RESET << 16); in qla2x00_abort_isp_cleanup()
7003 qla2x00_abort_isp(scsi_qla_host_t *vha) in qla2x00_abort_isp() argument
7007 struct qla_hw_data *ha = vha->hw; in qla2x00_abort_isp()
7012 if (vha->flags.online) { in qla2x00_abort_isp()
7013 qla2x00_abort_isp_cleanup(vha); in qla2x00_abort_isp()
7015 if (test_and_clear_bit(ISP_ABORT_TO_ROM, &vha->dpc_flags)) { in qla2x00_abort_isp()
7017 vha->flags.online = 1; in qla2x00_abort_isp()
7019 clear_bit(ISP_ABORT_RETRY, &vha->dpc_flags); in qla2x00_abort_isp()
7024 ql_dbg(ql_dbg_p3p, vha, 0xb05c, in qla2x00_abort_isp()
7026 if (qla83xx_clear_drv_presence(vha) != QLA_SUCCESS) in qla2x00_abort_isp()
7027 ql_dbg(ql_dbg_p3p, vha, 0xb073, in qla2x00_abort_isp()
7033 clear_bit(ISP_ABORT_RETRY, &vha->dpc_flags); in qla2x00_abort_isp()
7038 switch (vha->qlini_mode) { in qla2x00_abort_isp()
7040 if (!qla_tgt_mode_enabled(vha)) in qla2x00_abort_isp()
7044 if (!qla_dual_mode_enabled(vha) && in qla2x00_abort_isp()
7045 !qla_ini_mode_enabled(vha)) in qla2x00_abort_isp()
7053 ha->isp_ops->get_flash_version(vha, req->ring); in qla2x00_abort_isp()
7055 ha->isp_ops->nvram_config(vha); in qla2x00_abort_isp()
7057 if (!qla2x00_restart_isp(vha)) { in qla2x00_abort_isp()
7058 clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags); in qla2x00_abort_isp()
7060 if (!atomic_read(&vha->loop_down_timer)) { in qla2x00_abort_isp()
7065 vha->marker_needed = 1; in qla2x00_abort_isp()
7068 vha->flags.online = 1; in qla2x00_abort_isp()
7073 clear_bit(ISP_ABORT_RETRY, &vha->dpc_flags); in qla2x00_abort_isp()
7076 qla2x00_get_fw_version(vha); in qla2x00_abort_isp()
7081 rval = qla2x00_enable_fce_trace(vha, in qla2x00_abort_isp()
7085 ql_log(ql_log_warn, vha, 0x8033, in qla2x00_abort_isp()
7094 rval = qla2x00_enable_eft_trace(vha, in qla2x00_abort_isp()
7097 ql_log(ql_log_warn, vha, 0x8034, in qla2x00_abort_isp()
7103 vha->flags.online = 1; in qla2x00_abort_isp()
7104 if (test_bit(ISP_ABORT_RETRY, &vha->dpc_flags)) { in qla2x00_abort_isp()
7106 ql_log(ql_log_fatal, vha, 0x8035, in qla2x00_abort_isp()
7113 qla2x00_abort_isp_cleanup(vha); in qla2x00_abort_isp()
7114 vha->flags.online = 0; in qla2x00_abort_isp()
7116 &vha->dpc_flags); in qla2x00_abort_isp()
7120 ql_dbg(ql_dbg_taskm, vha, 0x8020, in qla2x00_abort_isp()
7127 ql_dbg(ql_dbg_taskm, vha, 0x8021, in qla2x00_abort_isp()
7130 set_bit(ISP_ABORT_RETRY, &vha->dpc_flags); in qla2x00_abort_isp()
7138 ql_dbg(ql_dbg_taskm, vha, 0x8022, "%s succeeded.\n", __func__); in qla2x00_abort_isp()
7139 qla2x00_configure_hba(vha); in qla2x00_abort_isp()
7155 ql_dbg(ql_dbg_p3p, vha, 0xb05d, in qla2x00_abort_isp()
7157 if (qla83xx_set_drv_presence(vha) != QLA_SUCCESS) in qla2x00_abort_isp()
7158 ql_dbg(ql_dbg_p3p, vha, 0xb074, in qla2x00_abort_isp()
7162 ql_log(ql_log_warn, vha, 0x8023, "%s **** FAILED ****.\n", in qla2x00_abort_isp()
7180 qla2x00_restart_isp(scsi_qla_host_t *vha) in qla2x00_restart_isp() argument
7183 struct qla_hw_data *ha = vha->hw; in qla2x00_restart_isp()
7186 if (qla2x00_isp_firmware(vha)) { in qla2x00_restart_isp()
7187 vha->flags.online = 0; in qla2x00_restart_isp()
7188 status = ha->isp_ops->chip_diag(vha); in qla2x00_restart_isp()
7191 status = qla2x00_setup_chip(vha); in qla2x00_restart_isp()
7196 status = qla2x00_init_rings(vha); in qla2x00_restart_isp()
7200 clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags); in qla2x00_restart_isp()
7206 status = qla2x00_fw_ready(vha); in qla2x00_restart_isp()
7209 return vha->device_flags & DFLG_NO_CABLE ? 0 : status; in qla2x00_restart_isp()
7213 qla2x00_marker(vha, ha->base_qpair, 0, 0, MK_SYNC_ALL); in qla2x00_restart_isp()
7214 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla2x00_restart_isp()
7270 qla2x00_reset_adapter(scsi_qla_host_t *vha) in qla2x00_reset_adapter() argument
7273 struct qla_hw_data *ha = vha->hw; in qla2x00_reset_adapter()
7276 vha->flags.online = 0; in qla2x00_reset_adapter()
7290 qla24xx_reset_adapter(scsi_qla_host_t *vha) in qla24xx_reset_adapter() argument
7293 struct qla_hw_data *ha = vha->hw; in qla24xx_reset_adapter()
7299 vha->flags.online = 0; in qla24xx_reset_adapter()
7318 static void qla24xx_nvram_wwn_from_ofw(scsi_qla_host_t *vha, in qla24xx_nvram_wwn_from_ofw() argument
7322 struct qla_hw_data *ha = vha->hw; in qla24xx_nvram_wwn_from_ofw()
7339 qla24xx_nvram_config(scsi_qla_host_t *vha) in qla24xx_nvram_config() argument
7348 struct qla_hw_data *ha = vha->hw; in qla24xx_nvram_config()
7368 ha->isp_ops->read_nvram(vha, ha->vpd, in qla24xx_nvram_config()
7373 ha->isp_ops->read_nvram(vha, dptr, ha->nvram_base, ha->nvram_size); in qla24xx_nvram_config()
7377 ql_dbg(ql_dbg_init + ql_dbg_buffer, vha, 0x006a, in qla24xx_nvram_config()
7379 ql_dump_buffer(ql_dbg_init + ql_dbg_buffer, vha, 0x010d, in qla24xx_nvram_config()
7386 ql_log(ql_log_warn, vha, 0x006b, in qla24xx_nvram_config()
7389 ql_dump_buffer(ql_dbg_init, vha, 0x006b, nv, sizeof(*nv)); in qla24xx_nvram_config()
7390 ql_log(ql_log_warn, vha, 0x006c, in qla24xx_nvram_config()
7420 qla24xx_nvram_wwn_from_ofw(vha, nv); in qla24xx_nvram_config()
7439 if (qla_tgt_mode_enabled(vha)) { in qla24xx_nvram_config()
7446 qlt_24xx_config_nvram_stage1(vha, nv); in qla24xx_nvram_config()
7472 qla2x00_set_model_info(vha, nv->model_name, sizeof(nv->model_name), in qla24xx_nvram_config()
7475 qlt_24xx_config_nvram_stage2(vha, icb); in qla24xx_nvram_config()
7513 memcpy(vha->node_name, icb->node_name, WWN_SIZE); in qla24xx_nvram_config()
7514 memcpy(vha->port_name, icb->port_name, WWN_SIZE); in qla24xx_nvram_config()
7571 if (!vha->flags.init_done) { in qla24xx_nvram_config()
7582 ql_log(ql_log_info, vha, 0x006f, in qla24xx_nvram_config()
7592 ql_log(ql_log_warn, vha, 0x0070, in qla24xx_nvram_config()
7599 qla27xx_print_image(struct scsi_qla_host *vha, char *name, in qla27xx_print_image() argument
7602 ql_dbg(ql_dbg_init, vha, 0x018b, in qla27xx_print_image()
7687 struct scsi_qla_host *vha, struct active_regions *active_regions) in qla28xx_get_aux_images() argument
7689 struct qla_hw_data *ha = vha->hw; in qla28xx_get_aux_images()
7695 ql_dbg(ql_dbg_init, vha, 0x018a, "Primary aux image not addressed\n"); in qla28xx_get_aux_images()
7699 qla24xx_read_flash_data(vha, (uint32_t *)&pri_aux_image_status, in qla28xx_get_aux_images()
7702 qla27xx_print_image(vha, "Primary aux image", &pri_aux_image_status); in qla28xx_get_aux_images()
7705 ql_dbg(ql_dbg_init, vha, 0x018b, in qla28xx_get_aux_images()
7712 ql_dbg(ql_dbg_init, vha, 0x018c, in qla28xx_get_aux_images()
7720 ql_dbg(ql_dbg_init, vha, 0x018d, in qla28xx_get_aux_images()
7727 ql_dbg(ql_dbg_init, vha, 0x018a, in qla28xx_get_aux_images()
7732 qla24xx_read_flash_data(vha, (uint32_t *)&sec_aux_image_status, in qla28xx_get_aux_images()
7735 qla27xx_print_image(vha, "Secondary aux image", &sec_aux_image_status); in qla28xx_get_aux_images()
7738 ql_dbg(ql_dbg_init, vha, 0x018b, in qla28xx_get_aux_images()
7745 ql_dbg(ql_dbg_init, vha, 0x018c, in qla28xx_get_aux_images()
7753 ql_dbg(ql_dbg_init, vha, 0x018d, in qla28xx_get_aux_images()
7775 ql_dbg(ql_dbg_init, vha, 0x018f, in qla28xx_get_aux_images()
7784 qla27xx_get_active_image(struct scsi_qla_host *vha, in qla27xx_get_active_image() argument
7787 struct qla_hw_data *ha = vha->hw; in qla27xx_get_active_image()
7793 ql_dbg(ql_dbg_init, vha, 0x018a, "Primary image not addressed\n"); in qla27xx_get_active_image()
7797 if (qla24xx_read_flash_data(vha, (uint32_t *)&pri_image_status, in qla27xx_get_active_image()
7803 qla27xx_print_image(vha, "Primary image", &pri_image_status); in qla27xx_get_active_image()
7806 ql_dbg(ql_dbg_init, vha, 0x018b, in qla27xx_get_active_image()
7813 ql_dbg(ql_dbg_init, vha, 0x018c, in qla27xx_get_active_image()
7821 ql_dbg(ql_dbg_init, vha, 0x018d, in qla27xx_get_active_image()
7828 ql_dbg(ql_dbg_init, vha, 0x018a, "Secondary image not addressed\n"); in qla27xx_get_active_image()
7832 qla24xx_read_flash_data(vha, (uint32_t *)(&sec_image_status), in qla27xx_get_active_image()
7834 qla27xx_print_image(vha, "Secondary image", &sec_image_status); in qla27xx_get_active_image()
7837 ql_dbg(ql_dbg_init, vha, 0x018b, in qla27xx_get_active_image()
7844 ql_dbg(ql_dbg_init, vha, 0x018c, in qla27xx_get_active_image()
7852 ql_dbg(ql_dbg_init, vha, 0x018d, in qla27xx_get_active_image()
7869 ql_dbg(ql_dbg_init, vha, 0x018f, "active image %s (%u)\n", in qla27xx_get_active_image()
7887 qla24xx_load_risc_flash(scsi_qla_host_t *vha, uint32_t *srisc_addr, in qla24xx_load_risc_flash() argument
7897 struct qla_hw_data *ha = vha->hw; in qla24xx_load_risc_flash()
7901 ql_dbg(ql_dbg_init, vha, 0x008b, in qla24xx_load_risc_flash()
7905 qla24xx_read_flash_data(vha, dcode, faddr, 8); in qla24xx_load_risc_flash()
7907 ql_log(ql_log_fatal, vha, 0x008c, in qla24xx_load_risc_flash()
7910 ql_log(ql_log_fatal, vha, 0x008d, in qla24xx_load_risc_flash()
7921 ql_dbg(ql_dbg_init, vha, 0x008d, in qla24xx_load_risc_flash()
7923 qla24xx_read_flash_data(vha, dcode, faddr, 10); in qla24xx_load_risc_flash()
7936 ql_dbg(ql_dbg_init, vha, 0x008e, in qla24xx_load_risc_flash()
7939 qla24xx_read_flash_data(vha, dcode, faddr, dlen); in qla24xx_load_risc_flash()
7943 rval = qla2x00_load_ram(vha, req->dma, risc_addr, dlen); in qla24xx_load_risc_flash()
7945 ql_log(ql_log_fatal, vha, 0x008f, in qla24xx_load_risc_flash()
7961 ql_dbg(ql_dbg_init, vha, 0x0160, "-> templates = %u\n", templates); in qla24xx_load_risc_flash()
7969 qla24xx_read_flash_data(vha, dcode, faddr, 7); in qla24xx_load_risc_flash()
7971 ql_dbg(ql_dbg_init, vha, 0x0161, in qla24xx_load_risc_flash()
7975 ql_dbg(ql_dbg_init, vha, 0x0162, in qla24xx_load_risc_flash()
7984 ql_dbg(ql_dbg_init, vha, 0x0163, in qla24xx_load_risc_flash()
7989 ql_log(ql_log_warn, vha, 0x0164, in qla24xx_load_risc_flash()
7995 qla24xx_read_flash_data(vha, dcode, faddr, risc_size); in qla24xx_load_risc_flash()
7998 ql_log(ql_log_warn, vha, 0x0165, in qla24xx_load_risc_flash()
8004 ql_dbg(ql_dbg_init, vha, 0x0166, in qla24xx_load_risc_flash()
8008 ql_log(ql_log_warn, vha, 0x0167, in qla24xx_load_risc_flash()
8015 ql_dbg(ql_dbg_init, vha, 0x0168, in qla24xx_load_risc_flash()
8035 qla2x00_load_risc(scsi_qla_host_t *vha, uint32_t *srisc_addr) in qla2x00_load_risc() argument
8043 struct qla_hw_data *ha = vha->hw; in qla2x00_load_risc()
8047 blob = qla2x00_request_firmware(vha); in qla2x00_load_risc()
8049 ql_log(ql_log_info, vha, 0x0083, in qla2x00_load_risc()
8051 ql_log(ql_log_info, vha, 0x0084, in qla2x00_load_risc()
8065 ql_log(ql_log_fatal, vha, 0x0085, in qla2x00_load_risc()
8075 ql_log(ql_log_fatal, vha, 0x0086, in qla2x00_load_risc()
8077 ql_log(ql_log_fatal, vha, 0x0087, in qla2x00_load_risc()
8092 ql_log(ql_log_fatal, vha, 0x0088, in qla2x00_load_risc()
8103 ql_dbg(ql_dbg_init, vha, 0x0089, in qla2x00_load_risc()
8110 rval = qla2x00_load_ram(vha, req->dma, risc_addr, in qla2x00_load_risc()
8113 ql_log(ql_log_fatal, vha, 0x008a, in qla2x00_load_risc()
8135 qla24xx_load_risc_blob(scsi_qla_host_t *vha, uint32_t *srisc_addr) in qla24xx_load_risc_blob() argument
8146 struct qla_hw_data *ha = vha->hw; in qla24xx_load_risc_blob()
8150 ql_dbg(ql_dbg_init, vha, 0x0090, in qla24xx_load_risc_blob()
8153 blob = qla2x00_request_firmware(vha); in qla24xx_load_risc_blob()
8155 ql_log(ql_log_warn, vha, 0x0092, in qla24xx_load_risc_blob()
8164 ql_log(ql_log_fatal, vha, 0x0093, in qla24xx_load_risc_blob()
8167 ql_log(ql_log_fatal, vha, 0x0095, in qla24xx_load_risc_blob()
8177 ql_dbg(ql_dbg_init, vha, 0x0096, in qla24xx_load_risc_blob()
8192 ql_dbg(ql_dbg_init, vha, 0x0097, in qla24xx_load_risc_blob()
8201 rval = qla2x00_load_ram(vha, req->dma, risc_addr, dlen); in qla24xx_load_risc_blob()
8203 ql_log(ql_log_fatal, vha, 0x0098, in qla24xx_load_risc_blob()
8219 ql_dbg(ql_dbg_init, vha, 0x0170, "-> templates = %u\n", templates); in qla24xx_load_risc_blob()
8227 ql_dbg(ql_dbg_init, vha, 0x0171, in qla24xx_load_risc_blob()
8232 ql_dbg(ql_dbg_init, vha, 0x0172, in qla24xx_load_risc_blob()
8241 ql_dbg(ql_dbg_init, vha, 0x0173, in qla24xx_load_risc_blob()
8246 ql_log(ql_log_warn, vha, 0x0174, in qla24xx_load_risc_blob()
8256 ql_log(ql_log_warn, vha, 0x0175, in qla24xx_load_risc_blob()
8262 ql_dbg(ql_dbg_init, vha, 0x0176, in qla24xx_load_risc_blob()
8266 ql_log(ql_log_warn, vha, 0x0177, in qla24xx_load_risc_blob()
8273 ql_dbg(ql_dbg_init, vha, 0x0178, in qla24xx_load_risc_blob()
8291 qla24xx_load_risc(scsi_qla_host_t *vha, uint32_t *srisc_addr) in qla24xx_load_risc() argument
8296 return qla81xx_load_risc(vha, srisc_addr); in qla24xx_load_risc()
8303 rval = qla24xx_load_risc_blob(vha, srisc_addr); in qla24xx_load_risc()
8307 return qla24xx_load_risc_flash(vha, srisc_addr, in qla24xx_load_risc()
8308 vha->hw->flt_region_fw); in qla24xx_load_risc()
8312 qla81xx_load_risc(scsi_qla_host_t *vha, uint32_t *srisc_addr) in qla81xx_load_risc() argument
8315 struct qla_hw_data *ha = vha->hw; in qla81xx_load_risc()
8330 qla27xx_get_active_image(vha, &active_regions); in qla81xx_load_risc()
8335 ql_dbg(ql_dbg_init, vha, 0x008b, in qla81xx_load_risc()
8337 rval = qla24xx_load_risc_flash(vha, srisc_addr, ha->flt_region_fw_sec); in qla81xx_load_risc()
8342 ql_dbg(ql_dbg_init, vha, 0x008b, in qla81xx_load_risc()
8344 rval = qla24xx_load_risc_flash(vha, srisc_addr, ha->flt_region_fw); in qla81xx_load_risc()
8349 rval = qla24xx_load_risc_blob(vha, srisc_addr); in qla81xx_load_risc()
8353 ql_log(ql_log_info, vha, 0x0099, in qla81xx_load_risc()
8355 rval = qla24xx_load_risc_flash(vha, srisc_addr, ha->flt_region_gold_fw); in qla81xx_load_risc()
8359 ql_log(ql_log_info, vha, 0x009a, "Need firmware flash update.\n"); in qla81xx_load_risc()
8365 qla2x00_try_to_stop_firmware(scsi_qla_host_t *vha) in qla2x00_try_to_stop_firmware() argument
8368 struct qla_hw_data *ha = vha->hw; in qla2x00_try_to_stop_firmware()
8379 ret = qla2x00_stop_firmware(vha); in qla2x00_try_to_stop_firmware()
8382 ha->isp_ops->reset_chip(vha); in qla2x00_try_to_stop_firmware()
8383 if (ha->isp_ops->chip_diag(vha) != QLA_SUCCESS) in qla2x00_try_to_stop_firmware()
8385 if (qla2x00_setup_chip(vha) != QLA_SUCCESS) in qla2x00_try_to_stop_firmware()
8387 ql_log(ql_log_info, vha, 0x8015, in qla2x00_try_to_stop_firmware()
8389 ret = qla2x00_stop_firmware(vha); in qla2x00_try_to_stop_firmware()
8397 qla24xx_configure_vhba(scsi_qla_host_t *vha) in qla24xx_configure_vhba() argument
8402 struct qla_hw_data *ha = vha->hw; in qla24xx_configure_vhba()
8405 if (!vha->vp_idx) in qla24xx_configure_vhba()
8411 clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags); in qla24xx_configure_vhba()
8412 qla2x00_marker(vha, ha->base_qpair, 0, 0, MK_SYNC_ALL); in qla24xx_configure_vhba()
8415 vha->flags.management_server_logged_in = 0; in qla24xx_configure_vhba()
8418 rval2 = ha->isp_ops->fabric_login(vha, NPH_SNS, 0xff, 0xff, 0xfc, mb, in qla24xx_configure_vhba()
8422 ql_dbg(ql_dbg_init, vha, 0x0120, in qla24xx_configure_vhba()
8426 ql_dbg(ql_dbg_init, vha, 0x0103, in qla24xx_configure_vhba()
8433 atomic_set(&vha->loop_down_timer, 0); in qla24xx_configure_vhba()
8434 atomic_set(&vha->loop_state, LOOP_UP); in qla24xx_configure_vhba()
8435 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla24xx_configure_vhba()
8436 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qla24xx_configure_vhba()
8448 qla84xx_get_chip(struct scsi_qla_host *vha) in qla84xx_get_chip() argument
8451 struct qla_hw_data *ha = vha->hw; in qla84xx_get_chip()
8491 qla84xx_put_chip(struct scsi_qla_host *vha) in qla84xx_put_chip() argument
8493 struct qla_hw_data *ha = vha->hw; in qla84xx_put_chip()
8500 qla84xx_init_chip(scsi_qla_host_t *vha) in qla84xx_init_chip() argument
8504 struct qla_hw_data *ha = vha->hw; in qla84xx_init_chip()
8508 rval = qla84xx_verify_chip(vha, status); in qla84xx_init_chip()
8519 qla81xx_nvram_config(scsi_qla_host_t *vha) in qla81xx_nvram_config() argument
8528 struct qla_hw_data *ha = vha->hw; in qla81xx_nvram_config()
8543 qla28xx_get_aux_images(vha, &active_regions); in qla81xx_nvram_config()
8552 ql_dbg(ql_dbg_init, vha, 0x0110, in qla81xx_nvram_config()
8557 ha->isp_ops->read_optrom(vha, ha->vpd, faddr << 2, ha->vpd_size); in qla81xx_nvram_config()
8565 ql_dbg(ql_dbg_init, vha, 0x0110, in qla81xx_nvram_config()
8569 ha->isp_ops->read_optrom(vha, ha->nvram, faddr << 2, ha->nvram_size); in qla81xx_nvram_config()
8575 ql_dbg(ql_dbg_init + ql_dbg_buffer, vha, 0x0111, in qla81xx_nvram_config()
8577 ql_dump_buffer(ql_dbg_init + ql_dbg_buffer, vha, 0x0112, in qla81xx_nvram_config()
8584 ql_log(ql_log_info, vha, 0x0073, in qla81xx_nvram_config()
8587 ql_dump_buffer(ql_dbg_init, vha, 0x0073, nv, sizeof(*nv)); in qla81xx_nvram_config()
8588 ql_log(ql_log_info, vha, 0x0074, in qla81xx_nvram_config()
8644 qlt_81xx_config_nvram_stage1(vha, nv); in qla81xx_nvram_config()
8683 qla2x00_set_model_info(vha, nv->model_name, sizeof(nv->model_name), in qla81xx_nvram_config()
8686 qlt_81xx_config_nvram_stage2(vha, icb); in qla81xx_nvram_config()
8726 memcpy(vha->node_name, icb->node_name, WWN_SIZE); in qla81xx_nvram_config()
8727 memcpy(vha->port_name, icb->port_name, WWN_SIZE); in qla81xx_nvram_config()
8781 if (!vha->hw->flags.msix_enabled && in qla81xx_nvram_config()
8786 if (!vha->flags.init_done) { in qla81xx_nvram_config()
8794 vha->flags.process_response_queue = 0; in qla81xx_nvram_config()
8798 ql_log(ql_log_info, vha, 0x0075, in qla81xx_nvram_config()
8806 vha->flags.process_response_queue = 1; in qla81xx_nvram_config()
8816 ha->fc4_type_priority = qla2xxx_get_fc4_priority(vha); in qla81xx_nvram_config()
8819 ql_log(ql_log_warn, vha, 0x0076, in qla81xx_nvram_config()
8826 qla82xx_restart_isp(scsi_qla_host_t *vha) in qla82xx_restart_isp() argument
8829 struct qla_hw_data *ha = vha->hw; in qla82xx_restart_isp()
8833 status = qla2x00_init_rings(vha); in qla82xx_restart_isp()
8835 clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags); in qla82xx_restart_isp()
8838 status = qla2x00_fw_ready(vha); in qla82xx_restart_isp()
8841 qla2x00_marker(vha, ha->base_qpair, 0, 0, MK_SYNC_ALL); in qla82xx_restart_isp()
8842 vha->flags.online = 1; in qla82xx_restart_isp()
8843 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla82xx_restart_isp()
8847 if ((vha->device_flags & DFLG_NO_CABLE)) in qla82xx_restart_isp()
8852 clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags); in qla82xx_restart_isp()
8854 if (!atomic_read(&vha->loop_down_timer)) { in qla82xx_restart_isp()
8859 vha->marker_needed = 1; in qla82xx_restart_isp()
8865 clear_bit(ISP_ABORT_RETRY, &vha->dpc_flags); in qla82xx_restart_isp()
8868 status = qla82xx_check_md_needed(vha); in qla82xx_restart_isp()
8874 rval = qla2x00_enable_fce_trace(vha, in qla82xx_restart_isp()
8878 ql_log(ql_log_warn, vha, 0x8001, in qla82xx_restart_isp()
8887 rval = qla2x00_enable_eft_trace(vha, in qla82xx_restart_isp()
8890 ql_log(ql_log_warn, vha, 0x8010, in qla82xx_restart_isp()
8898 ql_dbg(ql_dbg_taskm, vha, 0x8011, in qla82xx_restart_isp()
8916 ql_log(ql_log_warn, vha, 0x8016, in qla82xx_restart_isp()
8942 qla24xx_get_fcp_prio(scsi_qla_host_t *vha, fc_port_t *fcport) in qla24xx_get_fcp_prio() argument
8950 struct qla_hw_data *ha = vha->hw; in qla24xx_get_fcp_prio()
8970 pid2 = vha->d_id.b24 & INVALID_PORT_ID; in qla24xx_get_fcp_prio()
8989 wwn1 = wwn_to_u64(vha->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
9045 priority = qla24xx_get_fcp_prio(vha, fcport); in qla24xx_update_fcport_fcp_prio()
9049 if (IS_P3P_TYPE(vha->hw)) { in qla24xx_update_fcport_fcp_prio()
9054 ret = qla24xx_set_fcp_prio(vha, fcport->loop_id, priority, mb); in qla24xx_update_fcport_fcp_prio()
9057 ql_dbg(ql_dbg_user, vha, 0x709e, in qla24xx_update_fcport_fcp_prio()
9064 ql_dbg(ql_dbg_user, vha, 0x704f, in qla24xx_update_fcport_fcp_prio()
9086 qla24xx_update_all_fcp_prio(scsi_qla_host_t *vha) in qla24xx_update_all_fcp_prio() argument
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()
9099 struct qla_qpair *qla2xxx_create_qpair(struct scsi_qla_host *vha, int qos, in qla2xxx_create_qpair() argument
9105 struct qla_hw_data *ha = vha->hw; in qla2xxx_create_qpair()
9111 ql_log(ql_log_warn, vha, 0x00181, in qla2xxx_create_qpair()
9119 ql_log(ql_log_warn, vha, 0x0182, in qla2xxx_create_qpair()
9124 qpair->hw = vha->hw; in qla2xxx_create_qpair()
9125 qpair->vha = vha; in qla2xxx_create_qpair()
9135 ql_log(ql_log_warn, vha, 0x0183, in qla2xxx_create_qpair()
9156 ql_dbg(ql_dbg_multiq, vha, 0xc00f, in qla2xxx_create_qpair()
9161 ql_log(ql_log_warn, vha, 0x0184, in qla2xxx_create_qpair()
9167 list_add_tail(&qpair->qp_list_elem, &vha->qp_list); in qla2xxx_create_qpair()
9177 ql_log(ql_log_warn, vha, 0x0185, in qla2xxx_create_qpair()
9188 ql_log(ql_log_warn, vha, 0x0186, in qla2xxx_create_qpair()
9206 ql_log(ql_log_warn, vha, 0xd036, in qla2xxx_create_qpair()
9215 if (!vha->flags.qpairs_available) in qla2xxx_create_qpair()
9216 vha->flags.qpairs_available = 1; in qla2xxx_create_qpair()
9218 ql_dbg(ql_dbg_multiq, vha, 0xc00d, in qla2xxx_create_qpair()
9221 ql_dbg(ql_dbg_init, vha, 0x0187, in qla2xxx_create_qpair()
9229 qla25xx_delete_rsp_que(vha, qpair->rsp); in qla2xxx_create_qpair()
9234 if (list_empty(&vha->qp_list)) in qla2xxx_create_qpair()
9235 vha->flags.qpairs_available = 0; in qla2xxx_create_qpair()
9246 int qla2xxx_delete_qpair(struct scsi_qla_host *vha, struct qla_qpair *qpair) in qla2xxx_delete_qpair() argument
9253 ret = qla25xx_delete_req_que(vha, qpair->req); in qla2xxx_delete_qpair()
9257 ret = qla25xx_delete_rsp_que(vha, qpair->rsp); in qla2xxx_delete_qpair()
9266 if (list_empty(&vha->qp_list)) { in qla2xxx_delete_qpair()
9267 vha->flags.qpairs_available = 0; in qla2xxx_delete_qpair()
9268 vha->flags.qpairs_req_created = 0; in qla2xxx_delete_qpair()
9269 vha->flags.qpairs_rsp_created = 0; in qla2xxx_delete_qpair()