Lines Matching refs:vha

37 static void qla24xx_handle_gpdb_event(scsi_qla_host_t *vha,
50 scsi_qla_host_t *vha = sp->vha;
59 if (vha && qla2x00_isp_reg_stat(vha->hw)) {
60 ql_log(ql_log_info, vha, 0x9008,
62 qla_pci_set_eeh_busy(vha);
87 qla2x00_get_async_timeout(struct scsi_qla_host *vha)
90 struct qla_hw_data *ha = vha->hw;
116 ql_dbg(ql_dbg_async, sp->vha, 0x507c,
121 ql_dbg(ql_dbg_async, sp->vha, 0x507c,
175 scsi_qla_host_t *vha = cmd_sp->vha;
181 sp = qla2xxx_get_qpair_sp(cmd_sp->vha, cmd_sp->qpair, cmd_sp->fcport,
186 qla_vha_mark_busy(vha);
203 ql_dbg(ql_dbg_async, vha, 0x507c,
235 ql_dbg(ql_dbg_disc, fcport->vha, 0x2071,
297 struct scsi_qla_host *vha = sp->vha;
301 ql_dbg(ql_dbg_disc, vha, 0x20dd,
306 if (!test_bit(UNLOADING, &vha->dpc_flags)) {
316 qla24xx_handle_plogi_done_event(vha, &ea);
324 qla2x00_async_login(struct scsi_qla_host *vha, fc_port_t *fcport,
331 if (!vha->flags.online || (fcport->flags & FCF_ASYNC_SENT) ||
333 ql_log(ql_log_warn, vha, 0xffff,
340 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL);
352 qla2x00_init_async_sp(sp, qla2x00_get_async_timeout(vha) + 2,
356 if (N2N_TOPO(fcport->vha->hw) && fcport_is_bigger(fcport)) {
359 if (vha->hw->flags.edif_enabled &&
360 DBELL_ACTIVE(vha)) {
368 if (NVME_TARGET(vha->hw, fcport))
373 ql_dbg(ql_dbg_disc, vha, 0x2072,
381 set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
412 qla2x00_async_logout(struct scsi_qla_host *vha, fc_port_t *fcport)
419 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL);
425 qla2x00_init_async_sp(sp, qla2x00_get_async_timeout(vha) + 2,
428 ql_dbg(ql_dbg_disc, vha, 0x2070,
448 qla2x00_async_prlo_done(struct scsi_qla_host *vha, fc_port_t *fcport,
454 qla2x00_mark_device_lost(vha, fcport, 1);
461 struct scsi_qla_host *vha = sp->vha;
464 if (!test_bit(UNLOADING, &vha->dpc_flags))
465 qla2x00_post_async_prlo_done_work(sp->fcport->vha, sp->fcport,
472 qla2x00_async_prlo(struct scsi_qla_host *vha, fc_port_t *fcport)
479 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL);
485 qla2x00_init_async_sp(sp, qla2x00_get_async_timeout(vha) + 2,
488 ql_dbg(ql_dbg_disc, vha, 0x2070,
508 void qla24xx_handle_adisc_event(scsi_qla_host_t *vha, struct event_arg *ea)
513 ql_dbg(ql_dbg_disc, vha, 0x20d2,
523 ql_dbg(ql_dbg_disc, vha, 0x2066,
527 spin_lock_irqsave(&vha->work_lock, flags);
533 spin_unlock_irqrestore(&vha->work_lock, flags);
544 ql_dbg(ql_dbg_disc, vha, 0x20d3,
554 __qla24xx_handle_gpdb_event(vha, ea);
557 static int qla_post_els_plogi_work(struct scsi_qla_host *vha, fc_port_t *fcport)
561 e = qla2x00_alloc_work(vha, QLA_EVT_ELS_PLOGI);
568 return qla2x00_post_work(vha, e);
573 struct scsi_qla_host *vha = sp->vha;
577 ql_dbg(ql_dbg_disc, vha, 0x2066,
594 qla24xx_handle_adisc_event(vha, &ea);
600 qla2x00_async_adisc(struct scsi_qla_host *vha, fc_port_t *fcport,
608 ql_log(ql_log_warn, vha, 0xffff,
615 if (!vha->flags.online || (fcport->flags & FCF_ASYNC_SENT))
620 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL);
628 qla2x00_init_async_sp(sp, qla2x00_get_async_timeout(vha) + 2,
636 ql_dbg(ql_dbg_disc, vha, 0x206f,
651 qla2x00_post_async_adisc_work(vha, fcport, data);
655 static bool qla2x00_is_reserved_id(scsi_qla_host_t *vha, uint16_t loop_id)
657 struct qla_hw_data *ha = vha->hw;
668 * @vha: adapter state pointer.
677 static int qla2x00_find_new_loop_id(scsi_qla_host_t *vha, fc_port_t *dev)
680 struct qla_hw_data *ha = vha->hw;
689 qla2x00_is_reserved_id(vha, dev->loop_id)) {
698 ql_dbg(ql_dbg_disc, dev->vha, 0x2086,
702 ql_log(ql_log_warn, dev->vha, 0x2087,
711 struct qla_hw_data *ha = fcport->vha->hw;
714 qla2x00_is_reserved_id(fcport->vha, fcport->loop_id))
721 static void qla24xx_handle_gnl_done_event(scsi_qla_host_t *vha,
733 ql_dbg(ql_dbg_disc, vha, 0xffff,
738 fcport->rscn_gen, fcport->last_rscn_gen, vha->loop_id, fcport->edif.enable);
745 ql_dbg(ql_dbg_disc, vha, 0x20de,
757 ql_dbg(ql_dbg_disc, vha, 0x20e0,
760 set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
766 ql_dbg(ql_dbg_disc, vha, 0x20e1,
773 e = &vha->gnl.l[i];
802 ql_dbg(ql_dbg_disc, vha, 0x20e2,
819 ql_dbg(ql_dbg_disc, vha, 0x20e3,
835 qlt_find_sess_invalidate_other(vha, wwn,
848 switch (vha->hw->current_topology) {
853 vha, 0x20e4, "%s %d %8phC post gpdb\n",
861 qla2x00_post_async_adisc_work(vha, fcport,
865 if (vha->hw->flags.edif_enabled) {
867 qla24xx_post_gpdb_work(vha, fcport, 0);
874 qla2x00_find_new_loop_id(vha, fcport);
878 ql_dbg(ql_dbg_disc, vha, 0x20e5,
881 qla24xx_fcport_handle_login(vha, fcport);
898 set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
907 qla2x00_post_async_adisc_work(vha, fcport,
911 if (vha->hw->flags.edif_enabled &&
912 DBELL_ACTIVE(vha)) {
914 qla24xx_post_gpdb_work(vha, fcport, 0);
923 qla24xx_fcport_handle_login(vha,
935 qla24xx_fcport_handle_login(vha,
945 switch (vha->hw->current_topology) {
949 e = &vha->gnl.l[i];
958 qla2x00_find_fcport_by_wwpn(vha,
962 vha, 0x20e5,
977 qla24xx_fcport_handle_login(vha, fcport);
990 &vha->dpc_flags);
993 ql_log(ql_log_info, vha, 0x705d,
996 &vha->dpc_flags);
999 ql_log(ql_log_info, vha, 0x705d,
1005 qla2xxx_wake_dpc(vha);
1011 set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
1015 qla24xx_fcport_handle_login(vha, fcport);
1025 struct scsi_qla_host *vha = sp->vha;
1035 ql_dbg(ql_dbg_disc, vha, 0x20e7,
1054 e = &vha->gnl.l[i];
1058 set_bit(loop_id, vha->hw->loop_id_map);
1061 ql_dbg(ql_dbg_disc, vha, 0x20e8,
1068 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
1072 if (!list_empty(&vha->gnl.fcports))
1073 list_splice_init(&vha->gnl.fcports, &h);
1074 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
1077 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
1080 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
1083 qla24xx_handle_gnl_done_event(vha, &ea);
1091 e = &vha->gnl.l[i];
1095 list_for_each_entry_safe(fcport, tf, &vha->vp_fcports, list) {
1109 ql_dbg(ql_dbg_disc, vha, 0x2065,
1113 qla24xx_post_newsess_work(vha, &id, (u8 *)&wwn,
1118 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
1119 vha->gnl.sent = 0;
1120 if (!list_empty(&vha->gnl.fcports)) {
1122 list_for_each_entry_safe(fcport, tf, &vha->gnl.fcports,
1126 if (qla24xx_post_gnl_work(vha, fcport) == QLA_SUCCESS)
1130 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
1136 int qla24xx_async_gnl(struct scsi_qla_host *vha, fc_port_t *fcport)
1143 if (!vha->flags.online || (fcport->flags & FCF_ASYNC_SENT))
1146 ql_dbg(ql_dbg_disc, vha, 0x20d9,
1149 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
1155 list_add_tail(&fcport->gnl_entry, &vha->gnl.fcports);
1156 if (vha->gnl.sent) {
1157 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
1160 vha->gnl.sent = 1;
1161 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
1164 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL);
1172 qla2x00_init_async_sp(sp, qla2x00_get_async_timeout(vha) + 2,
1178 mb[2] = MSW(vha->gnl.ldma);
1179 mb[3] = LSW(vha->gnl.ldma);
1180 mb[6] = MSW(MSD(vha->gnl.ldma));
1181 mb[7] = LSW(MSD(vha->gnl.ldma));
1182 mb[8] = vha->gnl.size;
1183 mb[9] = vha->vp_idx;
1185 ql_dbg(ql_dbg_disc, vha, 0x20da,
1208 int qla24xx_post_gnl_work(struct scsi_qla_host *vha, fc_port_t *fcport)
1212 e = qla2x00_alloc_work(vha, QLA_EVT_GNL);
1218 return qla2x00_post_work(vha, e);
1223 struct scsi_qla_host *vha = sp->vha;
1224 struct qla_hw_data *ha = vha->hw;
1229 ql_dbg(ql_dbg_disc, vha, 0x20db,
1242 qla24xx_handle_gpdb_event(vha, &ea);
1251 int qla24xx_post_prli_work(struct scsi_qla_host *vha, fc_port_t *fcport)
1255 if (vha->host->active_mode == MODE_TARGET)
1258 e = qla2x00_alloc_work(vha, QLA_EVT_PRLI);
1264 return qla2x00_post_work(vha, e);
1269 struct scsi_qla_host *vha = sp->vha;
1273 ql_dbg(ql_dbg_disc, vha, 0x2129,
1279 if (!test_bit(UNLOADING, &vha->dpc_flags)) {
1292 qla24xx_handle_prli_done_event(vha, &ea);
1299 qla24xx_async_prli(struct scsi_qla_host *vha, fc_port_t *fcport)
1305 if (!vha->flags.online) {
1306 ql_dbg(ql_dbg_disc, vha, 0xffff, "%s %d %8phC exit\n",
1313 qla_dual_mode_enabled(vha)) {
1314 ql_dbg(ql_dbg_disc, vha, 0xffff, "%s %d %8phC exit\n",
1319 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL);
1328 qla2x00_init_async_sp(sp, qla2x00_get_async_timeout(vha) + 2,
1334 if (NVME_TARGET(vha->hw, fcport))
1337 ql_dbg(ql_dbg_disc, vha, 0x211b,
1340 fcport->login_retry, fcport->fc4_type, vha->hw->fc4_type_priority,
1341 NVME_TARGET(vha->hw, fcport) ? "nvme" : "fcp");
1346 set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
1359 int qla24xx_post_gpdb_work(struct scsi_qla_host *vha, fc_port_t *fcport, u8 opt)
1363 e = qla2x00_alloc_work(vha, QLA_EVT_GPDB);
1370 return qla2x00_post_work(vha, e);
1373 int qla24xx_async_gpdb(struct scsi_qla_host *vha, fc_port_t *fcport, u8 opt)
1381 struct qla_hw_data *ha = vha->hw;
1384 ql_log(ql_log_warn, vha, 0xffff,
1391 if (!vha->flags.online || fcport->flags & FCF_ASYNC_SENT) {
1392 ql_log(ql_log_warn, vha, 0xffff,
1394 __func__, fcport->port_name, vha->flags.online, fcport->flags);
1398 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL);
1409 qla2x00_init_async_sp(sp, qla2x00_get_async_timeout(vha) + 2,
1414 ql_log(ql_log_warn, vha, 0xd043,
1426 mb[9] = vha->vp_idx;
1433 ql_dbg(ql_dbg_disc, vha, 0x20dc,
1450 qla24xx_post_gpdb_work(vha, fcport, opt);
1455 void __qla24xx_handle_gpdb_event(scsi_qla_host_t *vha, struct event_arg *ea)
1459 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
1464 vha->fcport_count++;
1467 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
1469 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
1476 ql_dbg(ql_dbg_disc, vha, 0x20d6,
1481 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
1484 static int qla_chk_secure_login(scsi_qla_host_t *vha, fc_port_t *fcport,
1490 ql_dbg(ql_dbg_disc, vha, 0x104d,
1495 ql_dbg(ql_dbg_disc, vha, 0x104d,
1500 if (vha->hw->flags.edif_enabled) {
1509 qla2x00_post_aen_work(vha, FCH_EVT_PORT_ONLINE,
1512 if (DBELL_ACTIVE(vha)) {
1513 ql_dbg(ql_dbg_disc, vha, 0x20ef,
1518 qla_edb_eventcreate(vha, VND_CMD_AUTH_STATE_NEEDED,
1523 } else if (qla_ini_mode_enabled(vha) || qla_dual_mode_enabled(vha)) {
1524 ql_dbg(ql_dbg_disc, vha, 0x2117,
1527 qla24xx_post_prli_work(vha, fcport);
1535 void qla24xx_handle_gpdb_event(scsi_qla_host_t *vha, struct event_arg *ea)
1546 ql_dbg(ql_dbg_disc, vha, 0x20d2,
1552 ql_dbg(ql_dbg_disc, vha, 0x20d5, "%s %d %8phC\n",
1557 if (NVME_TARGET(vha->hw, fcport))
1565 ql_dbg(ql_dbg_disc, vha, 0x20d3,
1572 ql_dbg(ql_dbg_disc, vha, 0x20d5, "%s %d %8phC, ls %x\n",
1579 __qla24xx_parse_gpdb(vha, fcport, pd);
1582 if (qla_chk_secure_login(vha, fcport, pd)) {
1583 ql_dbg(ql_dbg_disc, vha, 0x20d5, "%s %d %8phC, ls %x\n",
1592 if (qla_dual_mode_enabled(vha) ||
1593 qla_ini_mode_enabled(vha)) {
1595 set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
1597 ql_dbg(ql_dbg_disc, vha, 0x20d5, "%s %d %8phC, ls %x\n",
1603 ql_dbg(ql_dbg_disc, vha, 0x20d5, "%s %d %8phC post del sess\n",
1608 __qla24xx_handle_gpdb_event(vha, ea);
1611 static void qla_chk_n2n_b4_login(struct scsi_qla_host *vha, fc_port_t *fcport)
1616 ql_dbg(ql_dbg_disc, vha, 0x307b,
1621 if (qla_tgt_mode_enabled(vha))
1624 if (qla_dual_mode_enabled(vha)) {
1625 if (N2N_TOPO(vha->hw)) {
1628 mywwn = wwn_to_u64(vha->port_name);
1648 rc = qla2x00_find_new_loop_id(vha, fcport);
1650 ql_dbg(ql_dbg_disc, vha, 0x20e6,
1658 ql_dbg(ql_dbg_disc, vha, 0x20bf,
1661 qla2x00_post_async_login_work(vha, fcport, NULL);
1665 int qla24xx_fcport_handle_login(struct scsi_qla_host *vha, fc_port_t *fcport)
1670 ql_dbg(ql_dbg_disc, vha, 0x20d8,
1683 qla_dual_mode_enabled(vha) &&
1689 !N2N_TOPO(vha->hw)) {
1691 set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
1697 if (vha->host->active_mode == MODE_TARGET && !N2N_TOPO(vha->hw))
1701 set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
1707 switch (vha->hw->current_topology) {
1713 qla2x00_find_new_loop_id(vha,
1719 qla_post_els_plogi_work(vha, fcport);
1721 ql_log(ql_log_info, vha, 0x705d,
1726 qla24xx_post_gnl_work(vha, fcport);
1731 ql_dbg(ql_dbg_disc, vha, 0x20bd,
1734 qla24xx_post_gnl_work(vha, fcport);
1736 qla_chk_n2n_b4_login(vha, fcport);
1743 switch (vha->hw->current_topology) {
1746 ql_dbg(ql_dbg_disc, vha, 0x2118,
1750 vha->hw->base_qpair->chip_reset;
1751 qla24xx_post_gpdb_work(vha, fcport, 0);
1753 ql_dbg(ql_dbg_disc, vha, 0x2118,
1756 NVME_TARGET(vha->hw, fcport) ? "NVME" :
1758 qla24xx_post_prli_work(vha, fcport);
1763 ql_dbg(ql_dbg_disc, vha, 0x20d8,
1769 set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
1772 qla_chk_n2n_b4_login(vha, fcport);
1778 if (N2N_TOPO(vha->hw))
1779 qla_chk_n2n_b4_login(vha, fcport);
1787 qla2x00_post_async_adisc_work(vha, fcport, data);
1791 if (vha->hw->flags.edif_enabled)
1795 ql_dbg(ql_dbg_disc, vha, 0x2118,
1798 NVME_TARGET(vha->hw, fcport) ? "NVME" : "FC");
1799 qla24xx_post_prli_work(vha, fcport);
1809 ql_dbg(ql_dbg_disc, fcport->vha, 0xffff,
1816 set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
1826 int qla24xx_post_newsess_work(struct scsi_qla_host *vha, port_id_t *id,
1831 e = qla2x00_alloc_work(vha, QLA_EVT_NEW_SESS);
1842 return qla2x00_post_work(vha, e);
1845 void qla2x00_handle_rscn(scsi_qla_host_t *vha, struct event_arg *ea)
1852 fcport = qla2x00_find_fcport_by_nportid(vha, &ea->id, 1);
1857 ql_dbg(ql_dbg_disc, vha, 0x2115,
1863 if (vha->hw->flags.edif_enabled && DBELL_ACTIVE(vha)) {
1887 list_for_each_entry(fcport, &vha->vp_fcports, list) {
1899 list_for_each_entry(fcport, &vha->vp_fcports, list) {
1912 list_for_each_entry(fcport, &vha->vp_fcports, list) {
1923 spin_lock_irqsave(&vha->work_lock, flags);
1924 if (vha->scan.scan_flags == 0) {
1925 ql_dbg(ql_dbg_disc, vha, 0xffff, "%s: schedule\n", __func__);
1926 vha->scan.scan_flags |= SF_QUEUED;
1927 schedule_delayed_work(&vha->scan.scan_work, 5);
1929 spin_unlock_irqrestore(&vha->work_lock, flags);
1932 void qla24xx_handle_relogin_event(scsi_qla_host_t *vha,
1937 if (test_bit(UNLOADING, &vha->dpc_flags))
1940 ql_dbg(ql_dbg_disc, vha, 0x2102,
1950 ql_dbg(ql_dbg_disc, vha, 0x20e9, "%s %d %8phC post gnl\n",
1952 qla24xx_post_gnl_work(vha, fcport);
1956 qla24xx_fcport_handle_login(vha, fcport);
1959 void qla_handle_els_plogi_done(scsi_qla_host_t *vha,
1962 if (N2N_TOPO(vha->hw) && fcport_is_smaller(ea->fcport) &&
1963 vha->hw->flags.edif_enabled) {
1965 qla24xx_post_gpdb_work(vha, ea->fcport, 0);
1970 if (vha->host->active_mode == MODE_TARGET)
1973 ql_dbg(ql_dbg_disc, vha, 0x2118,
1976 qla24xx_post_prli_work(vha, ea->fcport);
1998 qla2x00_handle_rscn(fcport->vha, &ea);
2036 ql_dbg(ql_dbg_taskm, sp->vha, 0x8004,
2049 if (_chip_gen != sp->vha->hw->chip_reset || _login_gen != sp->fcport->login_gen) {\
2070 struct scsi_qla_host *vha = arg->vha;
2078 ql_dbg(ql_dbg_taskm, vha, 0x8039,
2085 chip_gen = vha->hw->chip_reset;
2089 sp = qla2xxx_get_qpair_sp(vha, arg->qpair, fcport, GFP_KERNEL);
2095 qla2x00_init_async_sp(sp, qla2x00_get_async_timeout(vha), qla_marker_sp_done);
2103 tm_iocb->u.tmf.vp_index = vha->vp_idx;
2107 ql_dbg(ql_dbg_taskm, vha, 0x8006,
2113 ql_log(ql_log_warn, vha, 0x8031,
2122 ql_log(ql_log_warn, vha, 0x8019,
2148 return qla2x00_eh_wait_for_pending_commands(arg->vha,
2151 return qla2x00_eh_wait_for_pending_commands(arg->vha,
2158 struct scsi_qla_host *vha = arg->vha;
2167 ql_dbg(ql_dbg_taskm, vha, 0x8032,
2174 chip_gen = vha->hw->chip_reset;
2178 sp = qla2xxx_get_qpair_sp(vha, arg->qpair, fcport, GFP_KERNEL);
2182 qla_vha_mark_busy(vha);
2185 qla2x00_init_async_sp(sp, qla2x00_get_async_timeout(vha),
2196 ql_dbg(ql_dbg_taskm, vha, 0x802f,
2208 ql_log(ql_log_warn, vha, 0x8030,
2212 if (!test_bit(UNLOADING, &vha->dpc_flags) && !IS_QLAFX00(vha->hw)) {
2215 ql_log(ql_log_info, vha, 0x803e,
2217 jiffies_to_msecs(jiffies - jif), vha->host_no,
2221 if (chip_gen == vha->hw->chip_reset && login_gen == fcport->login_gen) {
2224 ql_log(ql_log_info, vha, 0x803e,
2226 vha->host_no, fcport->d_id.b24, arg->lun);
2242 struct scsi_qla_host *vha = arg->vha;
2243 struct qla_hw_data *ha = vha->hw;
2255 struct scsi_qla_host *vha = arg->vha;
2256 struct qla_hw_data *ha = vha->hw;
2266 ql_log(ql_log_warn, vha, 0x802c,
2268 vha->host_no, fcport->d_id.b24, arg->lun);
2282 ql_log(ql_log_warn, vha, 0x802c,
2308 struct scsi_qla_host *vha = fcport->vha;
2315 a.vha = fcport->vha;
2330 a.qpair = vha->hw->base_qpair;
2345 struct scsi_qla_host *vha = fcport->vha;
2360 return qlafx00_fx_disc(vha, &vha->hw->mr.fcport,
2367 qla24xx_handle_prli_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
2375 ql_dbg(ql_dbg_disc, vha, 0x2118,
2379 ea->fcport->chip_reset = vha->hw->base_qpair->chip_reset;
2387 qla24xx_post_gpdb_work(vha, ea->fcport, 0);
2391 ql_dbg(ql_dbg_disc, vha, 0x2118,
2394 vha->hw->fc4_type_priority == FC4_PRIORITY_FCP ?
2408 if (N2N_TOPO(vha->hw)) {
2410 vha->hw->login_retry_count &&
2417 vha->hw->login_retry_count) {
2419 vha->relogin_jif = jiffies + 2 * HZ;
2424 set_bit(N2N_LINK_RESET, &vha->dpc_flags);
2425 qla2xxx_wake_dpc(vha);
2427 ql_log(ql_log_warn, vha, 0x2119,
2447 qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
2455 ql_dbg(ql_dbg_disc, vha, 0xffff,
2464 ql_dbg(ql_dbg_disc, vha, 0x20ea,
2472 set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
2478 ql_dbg(ql_dbg_disc, vha, 0x20d3,
2481 set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
2484 ql_dbg(ql_dbg_disc, vha, 0x20d3,
2502 if (vha->hw->flags.edif_enabled) {
2503 set_bit(ea->fcport->loop_id, vha->hw->loop_id_map);
2504 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
2505 ea->fcport->chip_reset = vha->hw->base_qpair->chip_reset;
2509 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
2511 qla24xx_post_gpdb_work(vha, ea->fcport, 0);
2513 if (NVME_TARGET(vha->hw, fcport)) {
2514 ql_dbg(ql_dbg_disc, vha, 0x2117,
2517 qla24xx_post_prli_work(vha, fcport);
2519 ql_dbg(ql_dbg_disc, vha, 0x20ea,
2524 set_bit(fcport->loop_id, vha->hw->loop_id_map);
2525 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
2526 fcport->chip_reset = vha->hw->base_qpair->chip_reset;
2530 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
2532 qla24xx_post_gpdb_work(vha, fcport, 0);
2537 ql_dbg(ql_dbg_disc, vha, 0x20eb, "%s %d %8phC cmd error %x\n",
2549 ql_dbg(ql_dbg_disc, vha, 0x20ec,
2554 set_bit(ea->fcport->loop_id, vha->hw->loop_id_map);
2556 qla24xx_post_gnl_work(vha, ea->fcport);
2560 qlt_find_sess_invalidate_other(vha,
2573 ql_dbg(ql_dbg_disc, vha, 0x20ed,
2578 ql_dbg(ql_dbg_disc, vha, 0x20ed,
2584 set_bit(lid, vha->hw->loop_id_map);
2600 qla83xx_nic_core_fw_load(scsi_qla_host_t *vha)
2603 struct qla_hw_data *ha = vha->hw;
2607 qla83xx_idc_lock(vha, 0);
2616 if (__qla83xx_set_drv_presence(vha) != QLA_SUCCESS) {
2617 ql_dbg(ql_dbg_p3p, vha, 0xb077,
2624 qla83xx_reset_ownership(vha);
2632 qla83xx_rd_reg(vha, QLA83XX_IDC_MAJOR_VERSION, &idc_major_ver);
2636 qla83xx_wr_reg(vha, QLA83XX_IDC_MAJOR_VERSION, idc_major_ver);
2639 qla83xx_wr_reg(vha, QLA83XX_IDC_LOCK_RECOVERY, 0);
2645 ql_log(ql_log_warn, vha, 0xb07d,
2648 __qla83xx_clear_drv_presence(vha);
2653 qla83xx_rd_reg(vha, QLA83XX_IDC_MINOR_VERSION, &idc_minor_ver);
2655 qla83xx_wr_reg(vha, QLA83XX_IDC_MINOR_VERSION, idc_minor_ver);
2659 if (!qla81xx_get_port_config(vha, config))
2660 qla83xx_wr_reg(vha, QLA83XX_IDC_DEV_STATE,
2664 rval = qla83xx_idc_state_handler(vha);
2667 qla83xx_idc_unlock(vha, 0);
2672 static void qla_enable_fce_trace(scsi_qla_host_t *vha)
2675 struct qla_hw_data *ha = vha->hw;
2680 rval = qla2x00_enable_fce_trace(vha,
2684 ql_log(ql_log_warn, vha, 0x8033,
2691 static void qla_enable_eft_trace(scsi_qla_host_t *vha)
2694 struct qla_hw_data *ha = vha->hw;
2698 rval = qla2x00_enable_eft_trace(vha, ha->eft_dma, EFT_NUM_BUFFERS);
2701 ql_log(ql_log_warn, vha, 0x8034,
2717 qla2x00_initialize_adapter(scsi_qla_host_t *vha)
2720 struct qla_hw_data *ha = vha->hw;
2724 memset(&vha->qla_stats, 0, sizeof(vha->qla_stats));
2725 memset(&vha->fc_host_stat, 0, sizeof(vha->fc_host_stat));
2728 vha->flags.online = 0;
2730 vha->flags.reset_active = 0;
2733 vha->qla_stats.jiffies_at_last_reset = get_jiffies_64();
2734 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME);
2735 atomic_set(&vha->loop_state, LOOP_DOWN);
2736 vha->device_flags = DFLG_NO_CABLE;
2737 vha->dpc_flags = 0;
2738 vha->flags.management_server_logged_in = 0;
2739 vha->marker_needed = 0;
2746 ql_dbg(ql_dbg_init, vha, 0x0040,
2748 rval = ha->isp_ops->pci_config(vha);
2750 ql_log(ql_log_warn, vha, 0x0044,
2755 ha->isp_ops->reset_chip(vha);
2761 ql_log(ql_log_info, vha, 0xffff, "Secure Adapter: %s\n",
2766 rval = qla2xxx_get_flash_info(vha);
2768 ql_log(ql_log_fatal, vha, 0x004f,
2774 qla8044_read_reset_template(vha);
2781 qla8044_set_idc_dontreset(vha);
2784 ha->isp_ops->get_flash_version(vha, req->ring);
2785 ql_dbg(ql_dbg_init, vha, 0x0061,
2791 ha->isp_ops->nvram_config(vha);
2797 ql_log(ql_log_info, vha, 0xffff, "FC4 priority set to %s\n",
2802 ql_log(ql_log_info, vha, 0x0077,
2803 "Masking HBA WWPN %8phN (via NVRAM).\n", vha->port_name);
2807 ql_dbg(ql_dbg_init, vha, 0x0078,
2816 if (qla2x00_isp_firmware(vha) != QLA_SUCCESS) {
2817 rval = ha->isp_ops->chip_diag(vha);
2820 rval = qla2x00_setup_chip(vha);
2826 ha->cs84xx = qla84xx_get_chip(vha);
2828 ql_log(ql_log_warn, vha, 0x00d0,
2834 if (qla_ini_mode_enabled(vha) || qla_dual_mode_enabled(vha))
2835 rval = qla2x00_init_rings(vha);
2845 rval = qla84xx_init_chip(vha);
2847 ql_log(ql_log_warn, vha, 0x00d4,
2849 qla84xx_put_chip(vha);
2855 rval = qla83xx_nic_core_fw_load(vha);
2857 ql_log(ql_log_warn, vha, 0x0124,
2862 qla24xx_read_fcp_prio_cfg(vha);
2865 qla82xx_set_driver_version(vha, QLA2XXX_VERSION);
2867 qla25xx_set_driver_version(vha, QLA2XXX_VERSION);
2874 * @vha: HA context
2879 qla2100_pci_config(scsi_qla_host_t *vha)
2883 struct qla_hw_data *ha = vha->hw;
2905 * @vha: HA context
2910 qla2300_pci_config(scsi_qla_host_t *vha)
2915 struct qla_hw_data *ha = vha->hw;
2987 * @vha: HA context
2992 qla24xx_pci_config(scsi_qla_host_t *vha)
2996 struct qla_hw_data *ha = vha->hw;
3031 * @vha: HA context
3036 qla25xx_pci_config(scsi_qla_host_t *vha)
3039 struct qla_hw_data *ha = vha->hw;
3062 * @vha: HA context
3067 qla2x00_isp_firmware(scsi_qla_host_t *vha)
3072 struct qla_hw_data *ha = vha->hw;
3078 ql_log(ql_log_info, vha, 0x0079, "RISC CODE NOT loaded.\n");
3081 rval = qla2x00_verify_checksum(vha, ha->fw_srisc_address);
3084 rval = qla2x00_get_adapter_id(vha, &loop_id, &al_pa,
3090 ql_dbg(ql_dbg_init, vha, 0x007a,
3098 * @vha: HA context
3103 qla2x00_reset_chip(scsi_qla_host_t *vha)
3106 struct qla_hw_data *ha = vha->hw;
3245 * @vha: HA context
3250 qla81xx_reset_mpi(scsi_qla_host_t *vha)
3254 if (!IS_QLA81XX(vha->hw))
3257 return qla81xx_write_mpi_register(vha, mb);
3261 qla_chk_risc_recovery(scsi_qla_host_t *vha)
3263 struct qla_hw_data *ha = vha->hw;
3284 ql_log(ql_log_warn, vha, 0x1015,
3287 ql_log(ql_log_warn, vha, 0x1015,
3291 ql_log(ql_log_warn, vha, 0x1015,
3295 ql_log(ql_log_warn, vha, 0x1015,
3305 * @vha: HA context
3310 qla24xx_reset_risc(scsi_qla_host_t *vha)
3313 struct qla_hw_data *ha = vha->hw;
3335 ql_dbg(ql_dbg_init + ql_dbg_verbose, vha, 0x017e,
3361 ql_dbg(ql_dbg_init + ql_dbg_verbose, vha, 0x017f,
3379 ql_dbg(ql_dbg_init + ql_dbg_verbose, vha, 0x015d,
3385 if (test_and_clear_bit(MPI_RESET_NEEDED, &vha->dpc_flags)) {
3386 if (qla81xx_reset_mpi(vha) != QLA_SUCCESS) {
3388 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
3389 set_bit(MPI_RESET_NEEDED, &vha->dpc_flags);
3396 vha->flags.online = 0;
3416 if (print && qla_chk_risc_recovery(vha))
3423 ql_log(ql_log_warn, vha, 0x015e,
3431 ql_dbg(ql_dbg_init + ql_dbg_verbose, vha, 0x015e,
3438 ql_dbg(ql_dbg_init + ql_dbg_verbose, vha, 0x015f,
3449 qla25xx_read_risc_sema_reg(scsi_qla_host_t *vha, uint32_t *data)
3451 struct device_reg_24xx __iomem *reg = &vha->hw->iobase->isp24;
3458 qla25xx_write_risc_sema_reg(scsi_qla_host_t *vha, uint32_t data)
3460 struct device_reg_24xx __iomem *reg = &vha->hw->iobase->isp24;
3467 qla25xx_manipulate_risc_semaphore(scsi_qla_host_t *vha)
3475 if (vha->hw->pdev->subsystem_device != 0x0175 &&
3476 vha->hw->pdev->subsystem_device != 0x0240)
3479 wrt_reg_dword(&vha->hw->iobase->isp24.hccr, HCCRX_SET_RISC_PAUSE);
3486 qla25xx_write_risc_sema_reg(vha, RISC_SEMAPHORE_SET);
3487 qla25xx_read_risc_sema_reg(vha, &wd32);
3502 qla25xx_write_risc_sema_reg(vha, RISC_SEMAPHORE_CLR);
3506 qla25xx_read_risc_sema_reg(vha, &wd32);
3516 qla25xx_write_risc_sema_reg(vha, RISC_SEMAPHORE_FORCE_CLR);
3521 qla25xx_write_risc_sema_reg(vha, RISC_SEMAPHORE_FORCE_SET);
3529 * @vha: HA context
3534 qla24xx_reset_chip(scsi_qla_host_t *vha)
3536 struct qla_hw_data *ha = vha->hw;
3546 qla25xx_manipulate_risc_semaphore(vha);
3549 rval = qla24xx_reset_risc(vha);
3556 * @vha: HA context
3561 qla2x00_chip_diag(scsi_qla_host_t *vha)
3564 struct qla_hw_data *ha = vha->hw;
3575 ql_dbg(ql_dbg_init, vha, 0x007b, "Testing device at %p.\n",
3598 ql_dbg(ql_dbg_init, vha, 0x007c,
3620 ql_dbg(ql_dbg_init, vha, 0x007d, "Checking product ID of chip.\n");
3628 ql_log(ql_log_warn, vha, 0x0062,
3649 ql_dbg(ql_dbg_init, vha, 0x007e, "Found QLA2200A Chip.\n");
3658 ql_dbg(ql_dbg_init, vha, 0x007f, "Checking mailboxes.\n");
3659 rval = qla2x00_mbx_reg_test(vha);
3661 ql_log(ql_log_warn, vha, 0x0080,
3670 ql_log(ql_log_info, vha, 0x0081,
3680 * @vha: HA context
3685 qla24xx_chip_diag(scsi_qla_host_t *vha)
3688 struct qla_hw_data *ha = vha->hw;
3696 rval = qla2x00_mbx_reg_test(vha);
3698 ql_log(ql_log_warn, vha, 0x0082,
3709 qla2x00_alloc_fce_trace(scsi_qla_host_t *vha)
3713 struct qla_hw_data *ha = vha->hw;
3723 ql_dbg(ql_dbg_init, vha, 0x00bd,
3733 ql_log(ql_log_warn, vha, 0x00be,
3739 ql_dbg(ql_dbg_init, vha, 0x00c0,
3748 qla2x00_alloc_eft_trace(scsi_qla_host_t *vha)
3752 struct qla_hw_data *ha = vha->hw;
3758 ql_dbg(ql_dbg_init, vha, 0x00bd,
3768 ql_log(ql_log_warn, vha, 0x00c1,
3774 ql_dbg(ql_dbg_init, vha, 0x00c3,
3782 qla2x00_alloc_fw_dump(scsi_qla_host_t *vha)
3786 struct qla_hw_data *ha = vha->hw;
3792 ql_dbg(ql_dbg_init, vha, 0x00bd,
3835 qla2x00_alloc_fce_trace(vha);
3838 qla2x00_alloc_eft_trace(vha);
3849 ql_dbg(ql_dbg_init, vha, 0x00ba,
3853 ql_dbg(ql_dbg_init, vha, 0x00fa,
3856 vha, fwdt->template);
3857 ql_dbg(ql_dbg_init, vha, 0x00fa,
3882 ql_dbg(ql_dbg_init, vha, 0x00c5,
3889 ql_log(ql_log_warn, vha, 0x00c4,
3899 ql_dbg(ql_dbg_init, vha, 0x00c5,
3908 ql_dbg(ql_dbg_init, vha, 0x00c5,
3946 qla81xx_mpi_sync(scsi_qla_host_t *vha)
3953 if (!IS_QLA81XX(vha->hw))
3956 rval = qla2x00_write_ram_word(vha, 0x7c00, 1);
3958 ql_log(ql_log_warn, vha, 0x0105,
3963 pci_read_config_word(vha->hw->pdev, 0x54, &dc);
3964 rval = qla2x00_read_ram_word(vha, 0x7a15, &dw);
3966 ql_log(ql_log_warn, vha, 0x0067, "Unable to read sync.\n");
3976 rval = qla2x00_write_ram_word(vha, 0x7a15, dw);
3978 ql_log(ql_log_warn, vha, 0x0114, "Unable to gain sync.\n");
3982 rval = qla2x00_write_ram_word(vha, 0x7c00, 0);
3984 ql_log(ql_log_warn, vha, 0x006d,
4048 static void qla2xxx_print_sfp_info(struct scsi_qla_host *vha)
4051 struct sff_8247_a0 *a0 = (struct sff_8247_a0 *)vha->hw->sfp_data;
4057 ql_dbg(ql_dbg_init, vha, 0x015a,
4062 ql_dbg(ql_dbg_init, vha, 0x015c,
4077 ql_dbg(ql_dbg_init, vha, 0x0160,
4090 ql_dbg(ql_dbg_init, vha, 0x0196,
4102 ql_dbg(ql_dbg_init, vha, 0x016e,
4106 ql_dbg(ql_dbg_init, vha, 0x016f,
4109 ql_dbg(ql_dbg_init, vha, 0x0170,
4112 ql_dbg(ql_dbg_init, vha, 0x0189,
4115 ql_dbg(ql_dbg_init, vha, 0x018a,
4118 ql_dbg(ql_dbg_init, vha, 0x0194,
4121 ql_dbg(ql_dbg_init, vha, 0x0195,
4129 * @vha: adapter state pointer.
4141 qla24xx_detect_sfp(scsi_qla_host_t *vha)
4145 struct qla_hw_data *ha = vha->hw;
4164 if (!IS_BPM_ENABLED(vha))
4167 rc = qla2x00_read_sfp_dev(vha, NULL, 0);
4172 a = (struct sff_8247_a0 *)vha->hw->sfp_data;
4173 qla2xxx_print_sfp_info(vha);
4188 ql_dbg(ql_dbg_async, vha, 0x507b,
4201 struct qla_hw_data *ha = qpair->vha->hw;
4215 void qla_init_iocb_limit(scsi_qla_host_t *vha)
4218 struct qla_hw_data *ha = vha->hw;
4241 void qla_adjust_iocb_limit(scsi_qla_host_t *vha)
4244 struct qla_hw_data *ha = vha->hw;
4256 * @vha: HA context
4261 qla2x00_setup_chip(scsi_qla_host_t *vha)
4265 struct qla_hw_data *ha = vha->hw;
4271 rval = ha->isp_ops->load_risc(vha, &srisc_address);
4273 qla2x00_stop_firmware(vha);
4287 qla81xx_mpi_sync(vha);
4291 rval = ha->isp_ops->load_risc(vha, &srisc_address);
4293 ql_dbg(ql_dbg_init, vha, 0x00c9,
4296 rval = qla2x00_verify_checksum(vha, srisc_address);
4299 ql_dbg(ql_dbg_init, vha, 0x00ca,
4305 if (qla_is_exch_offld_enabled(vha))
4308 rval = qla2x00_execute_fw(vha, srisc_address);
4312 if (!done_once++ && qla24xx_detect_sfp(vha)) {
4313 ql_dbg(ql_dbg_init, vha, 0x00ca,
4316 ha->isp_ops->reset_chip(vha);
4317 ha->isp_ops->chip_diag(vha);
4322 qla27xx_set_zio_threshold(vha,
4325 rval = qla2x00_set_exlogins_buffer(vha);
4329 rval = qla2x00_set_exchoffld_buffer(vha);
4335 qla82xx_check_md_needed(vha);
4337 rval = qla2x00_get_fw_version(vha);
4350 qla2x00_get_resource_cnts(vha);
4351 qla_init_iocb_limit(vha);
4358 vha->req);
4363 qla2x00_alloc_fw_dump(vha);
4365 qla_enable_fce_trace(vha);
4366 qla_enable_eft_trace(vha);
4371 ql_log(ql_log_fatal, vha, 0x00cd,
4379 qla25xx_set_els_cmds_supported(vha);
4401 rval = qla81xx_fac_get_sector_size(vha, &size);
4406 ql_log(ql_log_warn, vha, 0x00ce,
4419 ql_log(ql_log_fatal, vha, 0x00cf,
4453 * @vha: HA context
4458 qla2x00_update_fw_options(scsi_qla_host_t *vha)
4461 struct qla_hw_data *ha = vha->hw;
4464 qla2x00_get_fw_options(vha, ha->fw_options);
4470 ql_dbg(ql_dbg_init + ql_dbg_buffer, vha, 0x0115,
4472 ql_dump_buffer(ql_dbg_init + ql_dbg_buffer, vha, 0x0109,
4531 ql_dbg(ql_dbg_disc, vha, 0x2100,
4537 qla2x00_set_fw_options(vha, ha->fw_options);
4541 qla24xx_update_fw_options(scsi_qla_host_t *vha)
4544 struct qla_hw_data *ha = vha->hw;
4556 ql_dbg(ql_dbg_disc, vha, 0x2101,
4564 if (qla_tgt_mode_enabled(vha) ||
4565 qla_dual_mode_enabled(vha))
4577 if (qla_tgt_mode_enabled(vha) ||
4578 qla_dual_mode_enabled(vha))
4594 DBELL_ACTIVE(vha)) {
4611 ql_dbg(ql_dbg_init, vha, 0x00e8,
4614 ha->fw_options[3], vha->host->active_mode);
4617 qla2x00_set_fw_options(vha, ha->fw_options);
4623 rval = qla2x00_set_serdes_params(vha,
4628 ql_log(ql_log_warn, vha, 0x0104,
4634 qla2x00_config_rings(struct scsi_qla_host *vha)
4636 struct qla_hw_data *ha = vha->hw;
4657 qla24xx_config_rings(struct scsi_qla_host *vha)
4659 struct qla_hw_data *ha = vha->hw;
4691 ql_dbg(ql_dbg_init, vha, 0x0019,
4708 ql_dbg(ql_dbg_init, vha, 0x00fe,
4726 qlt_24xx_config_rings(vha);
4730 ql_dbg(ql_dbg_init, vha, 0x00fd,
4742 * @vha: HA context
4750 qla2x00_init_rings(scsi_qla_host_t *vha)
4755 struct qla_hw_data *ha = vha->hw;
4797 qlt_init_atio_q_entries(vha);
4799 ha->isp_ops->config_rings(vha);
4804 rval = qlafx00_init_firmware(vha, ha->init_cb_size);
4809 ha->isp_ops->update_fw_options(vha);
4811 ql_dbg(ql_dbg_init, vha, 0x00d1,
4830 ql_dbg(ql_dbg_init, vha, 0x0191, "DPORT Support: %s.\n",
4836 ql_dbg(ql_dbg_init, vha, 0x00bc, "FA-WWPN Support: %s.\n",
4847 rval = qla2x00_init_firmware(vha, ha->init_cb_size);
4851 ql_log(ql_log_fatal, vha, 0x00d2,
4854 ql_dbg(ql_dbg_init, vha, 0x00d3,
4856 vha->u_ql2xexchoffld = vha->u_ql2xiniexchg = 0;
4864 * @vha: HA context
4869 qla2x00_fw_ready(scsi_qla_host_t *vha)
4876 struct qla_hw_data *ha = vha->hw;
4878 if (IS_QLAFX00(vha->hw))
4879 return qlafx00_fw_ready(vha);
4902 if (!vha->flags.init_done)
4903 ql_log(ql_log_info, vha, 0x801e,
4908 rval = qla2x00_get_firmware_state(vha, state);
4911 vha->device_flags &= ~DFLG_NO_CABLE;
4914 ql_dbg(ql_dbg_taskm, vha, 0x801f,
4919 ql_dbg(ql_dbg_taskm, vha, 0x8028,
4923 rval = qla84xx_init_chip(vha);
4926 vha, 0x8007,
4935 ql_dbg(ql_dbg_taskm, vha, 0x8008,
4941 ql_dbg(ql_dbg_taskm, vha, 0x8037,
4944 qla2x00_get_retry_cnt(vha, &ha->retry_count,
4953 if (atomic_read(&vha->loop_down_timer) &&
4959 ql_log(ql_log_info, vha, 0x8038,
4962 vha->device_flags |= DFLG_NO_CABLE;
4980 ql_dbg(ql_dbg_taskm, vha, 0x803a,
4984 if (rval && !(vha->device_flags & DFLG_NO_CABLE)) {
4985 ql_log(ql_log_warn, vha, 0x803b,
5006 qla2x00_configure_hba(scsi_qla_host_t *vha)
5016 struct qla_hw_data *ha = vha->hw;
5022 rval = qla2x00_get_adapter_id(vha,
5025 if (LOOP_TRANSITION(vha) || atomic_read(&ha->loop_down_timer) ||
5028 ql_dbg(ql_dbg_disc, vha, 0x2008,
5031 ql_log(ql_log_warn, vha, 0x2009,
5033 if (IS_FWI2_CAPABLE(ha) && (vha == base_vha) &&
5035 ql_log(ql_log_warn, vha, 0x1151,
5037 if (qla24xx_link_initialize(vha) == QLA_SUCCESS)
5040 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
5046 ql_log(ql_log_info, vha, 0x200a,
5051 vha->loop_id = loop_id;
5059 ql_dbg(ql_dbg_disc, vha, 0x200b, "HBA in NL topology.\n");
5066 ql_dbg(ql_dbg_disc, vha, 0x200c, "HBA in FL topology.\n");
5073 ql_dbg(ql_dbg_disc, vha, 0x200d, "HBA in N P2P topology.\n");
5081 ql_dbg(ql_dbg_disc, vha, 0x200e, "HBA in F P2P topology.\n");
5089 ql_dbg(ql_dbg_disc, vha, 0x200f,
5104 if (vha->hw->flags.edif_enabled) {
5106 qla_update_host_map(vha, id);
5108 qla_update_host_map(vha, id);
5111 if (!vha->flags.init_done)
5112 ql_log(ql_log_info, vha, 0x2010,
5114 connect_type, vha->loop_id);
5120 qla2x00_set_model_info(scsi_qla_host_t *vha, uint8_t *model, size_t len,
5126 struct qla_hw_data *ha = vha->hw;
5166 qla2xxx_get_vpd_field(vha, "\x82", ha->model_desc,
5173 static void qla2xxx_nvram_wwn_from_ofw(scsi_qla_host_t *vha, nvram_t *nv)
5176 struct qla_hw_data *ha = vha->hw;
5206 qla2x00_nvram_config(scsi_qla_host_t *vha)
5212 struct qla_hw_data *ha = vha->hw;
5228 ha->isp_ops->read_nvram(vha, ptr, ha->nvram_base, ha->nvram_size);
5232 ql_dbg(ql_dbg_init + ql_dbg_buffer, vha, 0x010f,
5234 ql_dump_buffer(ql_dbg_init + ql_dbg_buffer, vha, 0x0110,
5241 ql_log(ql_log_warn, vha, 0x0064,
5244 ql_log(ql_log_warn, vha, 0x0065,
5282 qla2xxx_nvram_wwn_from_ofw(vha, nv);
5322 qla2x00_set_model_info(vha, nv->model_number,
5403 memcpy(vha->node_name, icb->node_name, WWN_SIZE);
5404 memcpy(vha->port_name, icb->port_name, WWN_SIZE);
5471 vha->flags.process_response_queue = 1;
5474 if (!vha->flags.init_done) {
5482 vha->flags.process_response_queue = 0;
5486 ql_log(ql_log_info, vha, 0x0068,
5492 vha->flags.process_response_queue = 1;
5497 ql_log(ql_log_warn, vha, 0x0069,
5512 ql_dbg(ql_dbg_disc, fcport->vha, 0x207d,
5522 * @vha: HA context
5528 qla2x00_alloc_fcport(scsi_qla_host_t *vha, gfp_t flags)
5536 fcport->ct_desc.ct_sns = dma_alloc_coherent(&vha->hw->pdev->dev,
5540 ql_log(ql_log_warn, vha, 0xd049,
5547 fcport->vha = vha;
5557 fcport->login_retry = vha->hw->login_retry_count;
5558 fcport->chip_reset = vha->hw->base_qpair->chip_reset;
5565 ql_log(ql_log_warn, vha, 0xd049,
5595 dma_free_coherent(&fcport->vha->hw->pdev->dev,
5611 static void qla_get_login_template(scsi_qla_host_t *vha)
5613 struct qla_hw_data *ha = vha->hw;
5620 rval = qla24xx_get_port_login_templ(vha, ha->init_cb_dma,
5623 ql_dbg(ql_dbg_init, vha, 0x00d1,
5647 qla2x00_configure_loop(scsi_qla_host_t *vha)
5651 struct qla_hw_data *ha = vha->hw;
5656 if (test_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags)) {
5657 rval = qla2x00_configure_hba(vha);
5659 ql_dbg(ql_dbg_disc, vha, 0x2013,
5665 save_flags = flags = vha->dpc_flags;
5666 ql_dbg(ql_dbg_disc, vha, 0x2014,
5673 clear_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
5674 clear_bit(RSCN_UPDATE, &vha->dpc_flags);
5676 qla2x00_get_data_rate(vha);
5677 qla_get_login_template(vha);
5691 } else if (!vha->flags.online ||
5698 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) {
5699 ql_dbg(ql_dbg_disc, vha, 0x2015,
5703 rval = qla2x00_configure_local_loop(vha);
5707 if (LOOP_TRANSITION(vha)) {
5708 ql_dbg(ql_dbg_disc, vha, 0x2099,
5713 rval = qla2x00_configure_fabric(vha);
5717 if (atomic_read(&vha->loop_down_timer) ||
5718 test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) {
5721 atomic_set(&vha->loop_state, LOOP_READY);
5722 ql_dbg(ql_dbg_disc, vha, 0x2069,
5730 if (ha->flags.edif_enabled && DBELL_INACTIVE(vha))
5731 qla2x00_post_aen_work(vha, FCH_EVT_LINKUP,
5738 if (qla_tgt_mode_enabled(vha) ||
5739 qla_dual_mode_enabled(vha)) {
5741 qlt_24xx_process_atio_queue(vha, 0);
5749 ql_dbg(ql_dbg_disc, vha, 0x206a,
5752 ql_dbg(ql_dbg_disc, vha, 0x206b,
5754 __func__, vha->port_name, vha->d_id.b24);
5758 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) {
5760 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
5762 set_bit(RSCN_UPDATE, &vha->dpc_flags);
5769 static int qla2x00_configure_n2n_loop(scsi_qla_host_t *vha)
5774 ql_dbg(ql_dbg_disc, vha, 0x206a, "%s %d.\n", __func__, __LINE__);
5776 if (test_and_clear_bit(N2N_LOGIN_NEEDED, &vha->dpc_flags))
5777 set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
5779 list_for_each_entry(fcport, &vha->vp_fcports, list) {
5781 qla24xx_fcport_handle_login(vha, fcport);
5786 spin_lock_irqsave(&vha->work_lock, flags);
5787 vha->scan.scan_retry++;
5788 spin_unlock_irqrestore(&vha->work_lock, flags);
5790 if (vha->scan.scan_retry < MAX_SCAN_RETRIES) {
5791 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
5792 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
5798 qla_reinitialize_link(scsi_qla_host_t *vha)
5802 atomic_set(&vha->loop_state, LOOP_DOWN);
5803 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME);
5804 rval = qla2x00_full_login_lip(vha);
5806 ql_dbg(ql_dbg_disc, vha, 0xd050, "Link reinitialized\n");
5808 ql_dbg(ql_dbg_disc, vha, 0xd051,
5824 qla2x00_configure_local_loop(scsi_qla_host_t *vha)
5834 struct qla_hw_data *ha = vha->hw;
5839 return qla2x00_configure_n2n_loop(vha);
5846 rval = qla2x00_get_id_list(vha, ha->gid_list, ha->gid_list_dma,
5851 ql_dbg(ql_dbg_disc, vha, 0x2011,
5853 ql_dump_buffer(ql_dbg_disc + ql_dbg_buffer, vha, 0x2075,
5857 spin_lock_irqsave(&vha->work_lock, flags);
5858 vha->scan.scan_retry++;
5859 spin_unlock_irqrestore(&vha->work_lock, flags);
5861 if (vha->scan.scan_retry < MAX_SCAN_RETRIES) {
5865 rc = qla2x00_get_fcal_position_map(vha, NULL,
5872 qla_reinitialize_link(vha);
5875 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
5876 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
5879 vha->scan.scan_retry = 0;
5882 list_for_each_entry(fcport, &vha->vp_fcports, list) {
5887 new_fcport = qla2x00_alloc_fcport(vha, GFP_KERNEL);
5889 ql_log(ql_log_warn, vha, 0x2012,
5913 if (area && domain && ((area != vha->d_id.b.area) ||
5914 (domain != vha->d_id.b.domain)) &&
5932 rval2 = qla2x00_get_port_database(vha, new_fcport, 0);
5934 ql_dbg(ql_dbg_disc, vha, 0x2097,
5940 ql_dbg(ql_dbg_disc, vha, 0x2105,
5942 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
5947 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
5951 list_for_each_entry(fcport, &vha->vp_fcports, list) {
5964 fcport->login_retry = vha->hw->login_retry_count;
5965 ql_dbg(ql_dbg_disc, vha, 0x2135,
5976 list_add_tail(&new_fcport->list, &vha->vp_fcports);
5981 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
5983 new_fcport = qla2x00_alloc_fcport(vha, GFP_KERNEL);
5986 ql_log(ql_log_warn, vha, 0xd031,
5991 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
5995 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
6001 list_for_each_entry(fcport, &vha->vp_fcports, list) {
6002 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags))
6006 if ((qla_dual_mode_enabled(vha) ||
6007 qla_ini_mode_enabled(vha)) &&
6009 qla2x00_mark_device_lost(vha, fcport,
6015 ql_dbg(ql_dbg_disc, vha, 0x20f0,
6027 qla24xx_fcport_handle_login(vha, fcport);
6035 ql_dbg(ql_dbg_disc, vha, 0x2098,
6041 qla2x00_iidma_fcport(scsi_qla_host_t *vha, fc_port_t *fcport)
6045 struct qla_hw_data *ha = vha->hw;
6058 rval = qla2x00_set_idma_speed(vha, fcport->loop_id, fcport->fp_speed,
6061 ql_dbg(ql_dbg_disc, vha, 0x2004,
6065 ql_dbg(ql_dbg_disc, vha, 0x2005,
6072 void qla_do_iidma_work(struct scsi_qla_host *vha, fc_port_t *fcport)
6074 qla2x00_iidma_fcport(vha, fcport);
6075 qla24xx_update_fcport_fcp_prio(vha, fcport);
6078 int qla_post_iidma_work(struct scsi_qla_host *vha, fc_port_t *fcport)
6082 e = qla2x00_alloc_work(vha, QLA_EVT_IIDMA);
6087 return qla2x00_post_work(vha, e);
6092 qla2x00_reg_remote_port(scsi_qla_host_t *vha, fc_port_t *fcport)
6106 fcport->rport = rport = fc_remote_port_add(vha->host, 0, &rport_ids);
6108 ql_log(ql_log_warn, vha, 0x2006,
6113 spin_lock_irqsave(fcport->vha->host->host_lock, flags);
6115 spin_unlock_irqrestore(fcport->vha->host->host_lock, flags);
6134 ql_dbg(ql_dbg_disc, vha, 0x20ee,
6136 __func__, fcport->port_name, vha->host_no,
6158 qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport)
6165 ql_dbg(ql_dbg_disc, vha, 0x20ef, "%s %8phC\n",
6169 fcport->login_retry = vha->hw->login_retry_count;
6172 spin_lock_irqsave(&vha->work_lock, flags);
6174 spin_unlock_irqrestore(&vha->work_lock, flags);
6176 if (vha->hw->current_topology == ISP_CFG_NL)
6187 switch (vha->hw->current_topology) {
6196 qla2x00_iidma_fcport(vha, fcport);
6198 qla2x00_dfs_create_rport(vha, fcport);
6200 qla24xx_update_fcport_fcp_prio(vha, fcport);
6202 switch (vha->host->active_mode) {
6204 qla2x00_reg_remote_port(vha, fcport);
6207 if (!vha->vha_tgt.qla_tgt->tgt_stop &&
6208 !vha->vha_tgt.qla_tgt->tgt_stopped)
6209 qlt_fc_port_added(vha, fcport);
6212 qla2x00_reg_remote_port(vha, fcport);
6213 if (!vha->vha_tgt.qla_tgt->tgt_stop &&
6214 !vha->vha_tgt.qla_tgt->tgt_stopped)
6215 qlt_fc_port_added(vha, fcport);
6221 if (NVME_TARGET(vha->hw, fcport))
6222 qla_nvme_register_remote(vha, fcport);
6226 if (IS_IIDMA_CAPABLE(vha->hw) && vha->hw->flags.gpsc_supported) {
6229 ql_dbg(ql_dbg_disc, vha, 0x20d7,
6232 vha->fcport_count);
6233 qla24xx_post_gfpnid_work(vha, fcport);
6235 ql_dbg(ql_dbg_disc, vha, 0x20d7,
6238 vha->fcport_count);
6239 qla24xx_post_gpsc_work(vha, fcport);
6255 qla2x00_update_fcport(fcport->vha, fcport);
6257 ql_dbg(ql_dbg_disc, fcport->vha, 0x911e,
6269 qla2x00_post_async_adisc_work(fcport->vha, fcport,
6290 qla2x00_configure_fabric(scsi_qla_host_t *vha)
6296 struct qla_hw_data *ha = vha->hw;
6304 rval = qla2x00_get_port_name(vha, loop_id, vha->fabric_node_name, 1);
6306 ql_dbg(ql_dbg_disc, vha, 0x20a0,
6309 vha->device_flags &= ~SWITCH_FOUND;
6312 vha->device_flags |= SWITCH_FOUND;
6314 rval = qla2x00_get_port_name(vha, loop_id, vha->fabric_port_name, 0);
6316 ql_dbg(ql_dbg_disc, vha, 0x20ff,
6319 if (qla_tgt_mode_enabled(vha) || qla_dual_mode_enabled(vha)) {
6320 rval = qla2x00_send_change_request(vha, 0x3, 0);
6322 ql_log(ql_log_warn, vha, 0x121,
6328 qla2x00_mgmt_svr_login(vha);
6332 rval = ha->isp_ops->fabric_login(vha, loop_id, 0xff, 0xff,
6335 ql_dbg(ql_dbg_disc, vha, 0x20a1,
6338 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
6344 test_and_clear_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags))
6345 qla2x00_fdmi_register(vha);
6347 if (test_and_clear_bit(REGISTER_FC4_NEEDED, &vha->dpc_flags)) {
6348 if (qla2x00_rft_id(vha)) {
6350 ql_dbg(ql_dbg_disc, vha, 0x20a2,
6353 &vha->dpc_flags))
6356 if (qla2x00_rff_id(vha, FC4_TYPE_FCP_SCSI)) {
6358 ql_dbg(ql_dbg_disc, vha, 0x209a,
6361 &vha->dpc_flags))
6364 if (vha->flags.nvme_enabled) {
6365 if (qla2x00_rff_id(vha, FC_TYPE_NVME)) {
6366 ql_dbg(ql_dbg_disc, vha, 0x2049,
6370 if (qla2x00_rnn_id(vha)) {
6372 ql_dbg(ql_dbg_disc, vha, 0x2104,
6375 &vha->dpc_flags))
6377 } else if (qla2x00_rsnn_nn(vha)) {
6379 ql_dbg(ql_dbg_disc, vha, 0x209b,
6381 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags))
6393 qlt_do_generation_tick(vha, &discovery_gen);
6396 rval = qla24xx_async_gpnft(vha, FC4_TYPE_FCP_SCSI,
6399 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
6401 list_for_each_entry(fcport, &vha->vp_fcports, list)
6404 rval = qla2x00_find_all_fabric_devs(vha);
6410 if (!vha->nvme_local_port && vha->flags.nvme_enabled)
6411 qla_nvme_register_hba(vha);
6414 ql_dbg(ql_dbg_disc, vha, 0x2068,
6434 qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha)
6445 struct qla_hw_data *ha = vha->hw;
6458 ql_dbg(ql_dbg_disc, vha, 0x209c,
6462 if (qla2x00_gid_pt(vha, swl) != QLA_SUCCESS) {
6464 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags))
6466 } else if (qla2x00_gpn_id(vha, swl) != QLA_SUCCESS) {
6468 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags))
6470 } else if (qla2x00_gnn_id(vha, swl) != QLA_SUCCESS) {
6472 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags))
6474 } else if (qla2x00_gfpn_id(vha, swl) != QLA_SUCCESS) {
6476 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags))
6482 qla2x00_gff_id(vha, swl);
6483 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags))
6490 new_fcport = qla2x00_alloc_fcport(vha, GFP_KERNEL);
6492 ql_log(ql_log_warn, vha, 0x209d,
6504 if (qla2x00_is_reserved_id(vha, loop_id))
6508 (atomic_read(&vha->loop_down_timer) ||
6509 LOOP_TRANSITION(vha))) {
6510 atomic_set(&vha->loop_down_timer, 0);
6511 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
6512 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
6531 if (vha->flags.nvme_enabled &&
6533 ql_log(ql_log_info, vha, 0x2131,
6545 rval = qla2x00_ga_nxt(vha, new_fcport);
6547 ql_log(ql_log_warn, vha, 0x209e,
6560 ql_dbg(ql_dbg_disc, vha, 0x209f,
6573 if (qla2x00_is_a_vp_did(vha, new_fcport->d_id.b24))
6578 (vha->d_id.b24 & 0xffff00)) && ha->current_topology ==
6592 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
6596 list_for_each_entry(fcport, &vha->vp_fcports, list) {
6616 (vha->host->active_mode == MODE_TARGET))) {
6622 vha->hw->login_retry_count;
6640 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf080,
6660 if (found && NVME_TARGET(vha->hw, fcport)) {
6663 vha->fcport_count--;
6669 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
6674 list_add_tail(&new_fcport->list, &vha->vp_fcports);
6676 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
6681 new_fcport = qla2x00_alloc_fcport(vha, GFP_KERNEL);
6683 ql_log(ql_log_warn, vha, 0xd032,
6696 list_for_each_entry(fcport, &vha->vp_fcports, list) {
6697 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags))
6704 if ((qla_dual_mode_enabled(vha) ||
6705 qla_ini_mode_enabled(vha)) &&
6707 qla2x00_mark_device_lost(vha, fcport,
6713 ql_dbg(ql_dbg_disc, vha, 0x20f0,
6725 qla24xx_fcport_handle_login(vha, fcport);
6732 qla2x00_reserve_mgmt_server_loop_id(scsi_qla_host_t *vha)
6735 int lid = NPH_MGMT_SERVER - vha->vp_idx;
6737 struct qla_hw_data *ha = vha->hw;
6739 if (vha->vp_idx == 0) {
6747 if (!test_bit(lid, vha->hw->loop_id_map)) {
6748 set_bit(lid, vha->hw->loop_id_map);
6773 qla2x00_fabric_login(scsi_qla_host_t *vha, fc_port_t *fcport,
6780 struct qla_hw_data *ha = vha->hw;
6786 ql_dbg(ql_dbg_disc, vha, 0x2000,
6793 rval = ha->isp_ops->fabric_login(vha, fcport->loop_id,
6811 ql_dbg(ql_dbg_disc, vha, 0x2001,
6859 rval = qla2x00_find_new_loop_id(vha, fcport);
6871 ha->isp_ops->fabric_logout(vha, fcport->loop_id,
6874 qla2x00_mark_device_lost(vha, fcport, 1);
6882 ql_dbg(ql_dbg_disc, vha, 0x2002,
6889 ha->isp_ops->fabric_logout(vha, fcport->loop_id,
6917 qla2x00_local_device_login(scsi_qla_host_t *vha, fc_port_t *fcport)
6923 rval = qla2x00_login_local_device(vha, fcport, mb, BIT_0);
6947 qla2x00_loop_resync(scsi_qla_host_t *vha)
6952 clear_bit(ISP_ABORT_RETRY, &vha->dpc_flags);
6953 if (vha->flags.online) {
6954 if (!(rval = qla2x00_fw_ready(vha))) {
6958 if (!IS_QLAFX00(vha->hw)) {
6963 qla2x00_marker(vha, vha->hw->base_qpair,
6965 vha->marker_needed = 0;
6969 clear_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
6971 if (IS_QLAFX00(vha->hw))
6972 qlafx00_configure_devices(vha);
6974 qla2x00_configure_loop(vha);
6977 } while (!atomic_read(&vha->loop_down_timer) &&
6978 !(test_bit(ISP_ABORT_NEEDED, &vha->dpc_flags))
6980 &vha->dpc_flags)));
6984 if (test_bit(ISP_ABORT_NEEDED, &vha->dpc_flags))
6988 ql_dbg(ql_dbg_disc, vha, 0x206c,
7027 qla83xx_reset_ownership(scsi_qla_host_t *vha)
7029 struct qla_hw_data *ha = vha->hw;
7036 drv_presence = qla8044_rd_direct(vha,
7038 dev_part_info1 = qla8044_rd_direct(vha,
7040 dev_part_info2 = qla8044_rd_direct(vha,
7043 qla83xx_rd_reg(vha, QLA83XX_IDC_DRV_PRESENCE, &drv_presence);
7044 qla83xx_rd_reg(vha, QLA83XX_DEV_PARTINFO1, &dev_part_info1);
7045 qla83xx_rd_reg(vha, QLA83XX_DEV_PARTINFO2, &dev_part_info2);
7079 ql_dbg(ql_dbg_p3p, vha, 0xb07f,
7086 __qla83xx_set_drv_ack(scsi_qla_host_t *vha)
7089 struct qla_hw_data *ha = vha->hw;
7092 rval = qla83xx_rd_reg(vha, QLA83XX_IDC_DRIVER_ACK, &drv_ack);
7095 rval = qla83xx_wr_reg(vha, QLA83XX_IDC_DRIVER_ACK, drv_ack);
7102 __qla83xx_clear_drv_ack(scsi_qla_host_t *vha)
7105 struct qla_hw_data *ha = vha->hw;
7108 rval = qla83xx_rd_reg(vha, QLA83XX_IDC_DRIVER_ACK, &drv_ack);
7111 rval = qla83xx_wr_reg(vha, QLA83XX_IDC_DRIVER_ACK, drv_ack);
7119 qla83xx_idc_audit(scsi_qla_host_t *vha, int audit_type)
7121 struct qla_hw_data *ha = vha->hw;
7129 qla83xx_wr_reg(vha, QLA83XX_IDC_AUDIT, idc_audit_reg);
7137 qla83xx_wr_reg(vha, QLA83XX_IDC_AUDIT, idc_audit_reg);
7141 ql_log(ql_log_warn, vha, 0xb078,
7149 qla83xx_initiating_reset(scsi_qla_host_t *vha)
7151 struct qla_hw_data *ha = vha->hw;
7154 __qla83xx_get_idc_control(vha, &idc_control);
7156 ql_log(ql_log_info, vha, 0xb080,
7163 qla83xx_rd_reg(vha, QLA83XX_IDC_DEV_STATE, &dev_state);
7165 qla83xx_wr_reg(vha, QLA83XX_IDC_DEV_STATE,
7167 ql_log(ql_log_info, vha, 0xb056, "HW State: NEED RESET.\n");
7168 qla83xx_idc_audit(vha, IDC_AUDIT_TIMESTAMP);
7170 ql_log(ql_log_info, vha, 0xb057, "HW State: %s.\n",
7176 qla83xx_idc_unlock(vha, 0);
7178 qla83xx_idc_lock(vha, 0);
7179 qla83xx_rd_reg(vha, QLA83XX_IDC_DEV_STATE, &dev_state);
7184 __qla83xx_set_drv_ack(vha);
7190 __qla83xx_set_idc_control(scsi_qla_host_t *vha, uint32_t idc_control)
7192 return qla83xx_wr_reg(vha, QLA83XX_IDC_CONTROL, idc_control);
7196 __qla83xx_get_idc_control(scsi_qla_host_t *vha, uint32_t *idc_control)
7198 return qla83xx_rd_reg(vha, QLA83XX_IDC_CONTROL, idc_control);
7202 qla83xx_check_driver_presence(scsi_qla_host_t *vha)
7205 struct qla_hw_data *ha = vha->hw;
7207 qla83xx_rd_reg(vha, QLA83XX_IDC_DRV_PRESENCE, &drv_presence);
7215 qla83xx_nic_core_reset(scsi_qla_host_t *vha)
7218 struct qla_hw_data *ha = vha->hw;
7220 ql_dbg(ql_dbg_p3p, vha, 0xb058,
7223 if (vha->device_flags & DFLG_DEV_FAILED) {
7224 ql_log(ql_log_warn, vha, 0xb059,
7229 qla83xx_idc_lock(vha, 0);
7231 if (qla83xx_check_driver_presence(vha) != QLA_SUCCESS) {
7232 ql_log(ql_log_warn, vha, 0xb05a,
7239 qla83xx_reset_ownership(vha);
7241 rval = qla83xx_initiating_reset(vha);
7248 rval = qla83xx_idc_state_handler(vha);
7252 __qla83xx_clear_drv_ack(vha);
7256 qla83xx_idc_unlock(vha, 0);
7258 ql_dbg(ql_dbg_p3p, vha, 0xb05b, "Exiting %s.\n", __func__);
7264 qla2xxx_mctp_dump(scsi_qla_host_t *vha)
7266 struct qla_hw_data *ha = vha->hw;
7271 ql_log(ql_log_info, vha, 0x506d,
7281 ql_log(ql_log_warn, vha, 0x506e,
7288 rval = qla2x00_dump_mctp_data(vha, ha->mctp_dump_dma,
7291 ql_log(ql_log_warn, vha, 0x506f,
7294 ql_log(ql_log_info, vha, 0x5070,
7296 vha->host_no, ha->mctp_dump);
7302 rval = qla83xx_restart_nic_firmware(vha);
7305 ql_log(ql_log_warn, vha, 0x5071,
7308 ql_dbg(ql_dbg_p3p, vha, 0xb084,
7326 qla2x00_quiesce_io(scsi_qla_host_t *vha)
7328 struct qla_hw_data *ha = vha->hw;
7332 ql_dbg(ql_dbg_dpc, vha, 0x401d,
7336 if (atomic_read(&vha->loop_state) != LOOP_DOWN) {
7337 atomic_set(&vha->loop_state, LOOP_DOWN);
7338 qla2x00_mark_all_devices_lost(vha);
7352 if (!atomic_read(&vha->loop_down_timer))
7353 atomic_set(&vha->loop_down_timer,
7357 WARN_ON_ONCE(qla2x00_eh_wait_for_pending_commands(vha, 0, 0, WAIT_HOST)
7362 qla2x00_abort_isp_cleanup(scsi_qla_host_t *vha)
7364 struct qla_hw_data *ha = vha->hw;
7374 vha->flags.online = 0;
7376 clear_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
7377 vha->qla_stats.total_isp_aborts++;
7379 ql_log(ql_log_info, vha, 0x00af,
7388 ha->isp_ops->reset_chip(vha);
7430 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME);
7431 if (atomic_read(&vha->loop_state) != LOOP_DOWN) {
7432 atomic_set(&vha->loop_state, LOOP_DOWN);
7433 qla2x00_mark_all_devices_lost(vha);
7447 if (!atomic_read(&vha->loop_down_timer))
7448 atomic_set(&vha->loop_down_timer,
7453 list_for_each_entry(fcport, &vha->vp_fcports, list) {
7472 qla82xx_chip_reset_cleanup(vha);
7473 ql_log(ql_log_info, vha, 0x00b4,
7477 vha->flags.online = 0;
7481 qla2x00_abort_all_cmds(vha, DID_RESET << 16);
7497 qla2x00_abort_isp(scsi_qla_host_t *vha)
7500 struct qla_hw_data *ha = vha->hw;
7506 if (vha->flags.online) {
7507 qla2x00_abort_isp_cleanup(vha);
7509 vha->dport_status |= DPORT_DIAG_CHIP_RESET_IN_PROGRESS;
7510 vha->dport_status &= ~DPORT_DIAG_IN_PROGRESS;
7512 if (vha->hw->flags.port_isolated)
7516 ql_log(ql_log_info, vha, 0x803f,
7521 if (test_and_clear_bit(ISP_ABORT_TO_ROM, &vha->dpc_flags)) {
7523 vha->flags.online = 1;
7525 clear_bit(ISP_ABORT_RETRY, &vha->dpc_flags);
7530 ql_dbg(ql_dbg_p3p, vha, 0xb05c,
7532 if (qla83xx_clear_drv_presence(vha) != QLA_SUCCESS)
7533 ql_dbg(ql_dbg_p3p, vha, 0xb073,
7539 clear_bit(ISP_ABORT_RETRY, &vha->dpc_flags);
7544 switch (vha->qlini_mode) {
7546 if (!qla_tgt_mode_enabled(vha))
7550 if (!qla_dual_mode_enabled(vha) &&
7551 !qla_ini_mode_enabled(vha))
7559 ha->isp_ops->get_flash_version(vha, req->ring);
7562 ql_log(ql_log_info, vha, 0x803f,
7566 ha->isp_ops->nvram_config(vha);
7569 ql_log(ql_log_info, vha, 0x803f,
7575 list_for_each_entry(fcport, &vha->vp_fcports, list) {
7582 if (!qla2x00_restart_isp(vha)) {
7583 clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags);
7585 if (!atomic_read(&vha->loop_down_timer)) {
7590 vha->marker_needed = 1;
7593 vha->flags.online = 1;
7598 clear_bit(ISP_ABORT_RETRY, &vha->dpc_flags);
7601 qla2x00_get_fw_version(vha);
7604 vha->flags.online = 1;
7605 if (test_bit(ISP_ABORT_RETRY, &vha->dpc_flags)) {
7607 ql_log(ql_log_fatal, vha, 0x8035,
7614 qla2x00_abort_isp_cleanup(vha);
7615 vha->flags.online = 0;
7617 &vha->dpc_flags);
7621 ql_dbg(ql_dbg_taskm, vha, 0x8020,
7628 ql_dbg(ql_dbg_taskm, vha, 0x8021,
7631 set_bit(ISP_ABORT_RETRY, &vha->dpc_flags);
7638 if (vha->hw->flags.port_isolated) {
7639 qla2x00_abort_isp_cleanup(vha);
7644 ql_dbg(ql_dbg_taskm, vha, 0x8022, "%s succeeded.\n", __func__);
7645 qla2x00_configure_hba(vha);
7669 ql_dbg(ql_dbg_p3p, vha, 0xb05d,
7671 if (qla83xx_set_drv_presence(vha) != QLA_SUCCESS)
7672 ql_dbg(ql_dbg_p3p, vha, 0xb074,
7676 ql_log(ql_log_warn, vha, 0x8023, "%s **** FAILED ****.\n",
7694 qla2x00_restart_isp(scsi_qla_host_t *vha)
7697 struct qla_hw_data *ha = vha->hw;
7700 if (qla2x00_isp_firmware(vha)) {
7701 vha->flags.online = 0;
7702 status = ha->isp_ops->chip_diag(vha);
7705 status = qla2x00_setup_chip(vha);
7710 status = qla2x00_init_rings(vha);
7714 clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags);
7720 status = qla2x00_fw_ready(vha);
7723 return vha->device_flags & DFLG_NO_CABLE ? 0 : status;
7727 qla2x00_marker(vha, ha->base_qpair, 0, 0, MK_SYNC_ALL);
7728 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
7784 qla2x00_reset_adapter(scsi_qla_host_t *vha)
7787 struct qla_hw_data *ha = vha->hw;
7790 vha->flags.online = 0;
7804 qla24xx_reset_adapter(scsi_qla_host_t *vha)
7807 struct qla_hw_data *ha = vha->hw;
7813 vha->flags.online = 0;
7832 static void qla24xx_nvram_wwn_from_ofw(scsi_qla_host_t *vha,
7836 struct qla_hw_data *ha = vha->hw;
7853 qla24xx_nvram_config(scsi_qla_host_t *vha)
7862 struct qla_hw_data *ha = vha->hw;
7882 ha->isp_ops->read_nvram(vha, ha->vpd,
7887 ha->isp_ops->read_nvram(vha, dptr, ha->nvram_base, ha->nvram_size);
7891 ql_dbg(ql_dbg_init + ql_dbg_buffer, vha, 0x006a,
7893 ql_dump_buffer(ql_dbg_init + ql_dbg_buffer, vha, 0x010d,
7900 ql_log(ql_log_warn, vha, 0x006b,
7903 ql_dump_buffer(ql_dbg_init, vha, 0x006b, nv, sizeof(*nv));
7904 ql_log(ql_log_warn, vha, 0x006c,
7934 qla24xx_nvram_wwn_from_ofw(vha, nv);
7953 if (qla_tgt_mode_enabled(vha)) {
7960 qlt_24xx_config_nvram_stage1(vha, nv);
7986 qla2x00_set_model_info(vha, nv->model_name, sizeof(nv->model_name),
7989 qlt_24xx_config_nvram_stage2(vha, icb);
8027 memcpy(vha->node_name, icb->node_name, WWN_SIZE);
8028 memcpy(vha->port_name, icb->port_name, WWN_SIZE);
8085 if (!vha->flags.init_done) {
8096 ql_log(ql_log_info, vha, 0x006f,
8106 ql_log(ql_log_warn, vha, 0x0070,
8113 qla27xx_print_image(struct scsi_qla_host *vha, char *name,
8116 ql_dbg(ql_dbg_init, vha, 0x018b,
8204 struct scsi_qla_host *vha, struct active_regions *active_regions)
8206 struct qla_hw_data *ha = vha->hw;
8212 ql_dbg(ql_dbg_init, vha, 0x018a, "Primary aux image not addressed\n");
8216 qla24xx_read_flash_data(vha, (uint32_t *)&pri_aux_image_status,
8219 qla27xx_print_image(vha, "Primary aux image", &pri_aux_image_status);
8222 ql_dbg(ql_dbg_init, vha, 0x018b,
8229 ql_dbg(ql_dbg_init, vha, 0x018c,
8237 ql_dbg(ql_dbg_init, vha, 0x018d,
8244 ql_dbg(ql_dbg_init, vha, 0x018a,
8249 qla24xx_read_flash_data(vha, (uint32_t *)&sec_aux_image_status,
8252 qla27xx_print_image(vha, "Secondary aux image", &sec_aux_image_status);
8255 ql_dbg(ql_dbg_init, vha, 0x018b,
8262 ql_dbg(ql_dbg_init, vha, 0x018c,
8270 ql_dbg(ql_dbg_init, vha, 0x018d,
8292 ql_dbg(ql_dbg_init, vha, 0x018f,
8302 qla27xx_get_active_image(struct scsi_qla_host *vha,
8305 struct qla_hw_data *ha = vha->hw;
8311 ql_dbg(ql_dbg_init, vha, 0x018a, "Primary image not addressed\n");
8315 if (qla24xx_read_flash_data(vha, (uint32_t *)&pri_image_status,
8321 qla27xx_print_image(vha, "Primary image", &pri_image_status);
8324 ql_dbg(ql_dbg_init, vha, 0x018b,
8331 ql_dbg(ql_dbg_init, vha, 0x018c,
8339 ql_dbg(ql_dbg_init, vha, 0x018d,
8346 ql_dbg(ql_dbg_init, vha, 0x018a, "Secondary image not addressed\n");
8350 qla24xx_read_flash_data(vha, (uint32_t *)(&sec_image_status),
8352 qla27xx_print_image(vha, "Secondary image", &sec_image_status);
8355 ql_dbg(ql_dbg_init, vha, 0x018b,
8362 ql_dbg(ql_dbg_init, vha, 0x018c,
8370 ql_dbg(ql_dbg_init, vha, 0x018d,
8387 ql_dbg(ql_dbg_init, vha, 0x018f, "active image %s (%u)\n",
8405 qla24xx_load_risc_flash(scsi_qla_host_t *vha, uint32_t *srisc_addr,
8415 struct qla_hw_data *ha = vha->hw;
8419 ql_dbg(ql_dbg_init, vha, 0x008b,
8423 qla24xx_read_flash_data(vha, dcode, faddr, 8);
8425 ql_log(ql_log_fatal, vha, 0x008c,
8428 ql_log(ql_log_fatal, vha, 0x008d,
8439 ql_dbg(ql_dbg_init, vha, 0x008d,
8441 qla24xx_read_flash_data(vha, dcode, faddr, 10);
8454 ql_dbg(ql_dbg_init, vha, 0x008e,
8457 qla24xx_read_flash_data(vha, dcode, faddr, dlen);
8461 rval = qla2x00_load_ram(vha, req->dma, risc_addr, dlen);
8463 ql_log(ql_log_fatal, vha, 0x008f,
8479 ql_dbg(ql_dbg_init, vha, 0x0160, "-> templates = %u\n", templates);
8486 qla24xx_read_flash_data(vha, dcode, faddr, 7);
8488 ql_dbg(ql_dbg_init, vha, 0x0161,
8492 ql_dbg(ql_dbg_init, vha, 0x0162,
8501 ql_dbg(ql_dbg_init, vha, 0x0163,
8506 ql_log(ql_log_warn, vha, 0x0164,
8512 qla24xx_read_flash_data(vha, dcode, faddr, risc_size);
8515 ql_log(ql_log_warn, vha, 0x0165,
8521 ql_dbg(ql_dbg_init, vha, 0x0166,
8525 ql_log(ql_log_warn, vha, 0x0167,
8532 ql_dbg(ql_dbg_init, vha, 0x0168,
8551 qla2x00_load_risc(scsi_qla_host_t *vha, uint32_t *srisc_addr)
8559 struct qla_hw_data *ha = vha->hw;
8563 blob = qla2x00_request_firmware(vha);
8565 ql_log(ql_log_info, vha, 0x0083,
8567 ql_log(ql_log_info, vha, 0x0084,
8581 ql_log(ql_log_fatal, vha, 0x0085,
8591 ql_log(ql_log_fatal, vha, 0x0086,
8593 ql_log(ql_log_fatal, vha, 0x0087,
8608 ql_log(ql_log_fatal, vha, 0x0088,
8619 ql_dbg(ql_dbg_init, vha, 0x0089,
8626 rval = qla2x00_load_ram(vha, req->dma, risc_addr,
8629 ql_log(ql_log_fatal, vha, 0x008a,
8651 qla24xx_load_risc_blob(scsi_qla_host_t *vha, uint32_t *srisc_addr)
8662 struct qla_hw_data *ha = vha->hw;
8666 ql_dbg(ql_dbg_init, vha, 0x0090,
8669 blob = qla2x00_request_firmware(vha);
8671 ql_log(ql_log_warn, vha, 0x0092,
8680 ql_log(ql_log_fatal, vha, 0x0093,
8683 ql_log(ql_log_fatal, vha, 0x0095,
8693 ql_dbg(ql_dbg_init, vha, 0x0096,
8708 ql_dbg(ql_dbg_init, vha, 0x0097,
8717 rval = qla2x00_load_ram(vha, req->dma, risc_addr, dlen);
8719 ql_log(ql_log_fatal, vha, 0x0098,
8735 ql_dbg(ql_dbg_init, vha, 0x0170, "-> templates = %u\n", templates);
8742 ql_dbg(ql_dbg_init, vha, 0x0171,
8747 ql_dbg(ql_dbg_init, vha, 0x0172,
8756 ql_dbg(ql_dbg_init, vha, 0x0173,
8761 ql_log(ql_log_warn, vha, 0x0174,
8771 ql_log(ql_log_warn, vha, 0x0175,
8777 ql_dbg(ql_dbg_init, vha, 0x0176,
8781 ql_log(ql_log_warn, vha, 0x0177,
8788 ql_dbg(ql_dbg_init, vha, 0x0178,
8805 qla24xx_load_risc(scsi_qla_host_t *vha, uint32_t *srisc_addr)
8810 return qla81xx_load_risc(vha, srisc_addr);
8817 rval = qla24xx_load_risc_blob(vha, srisc_addr);
8821 return qla24xx_load_risc_flash(vha, srisc_addr,
8822 vha->hw->flt_region_fw);
8826 qla81xx_load_risc(scsi_qla_host_t *vha, uint32_t *srisc_addr)
8829 struct qla_hw_data *ha = vha->hw;
8844 qla27xx_get_active_image(vha, &active_regions);
8849 ql_dbg(ql_dbg_init, vha, 0x008b,
8851 rval = qla24xx_load_risc_flash(vha, srisc_addr, ha->flt_region_fw_sec);
8856 ql_dbg(ql_dbg_init, vha, 0x008b,
8858 rval = qla24xx_load_risc_flash(vha, srisc_addr, ha->flt_region_fw);
8863 rval = qla24xx_load_risc_blob(vha, srisc_addr);
8867 ql_log(ql_log_info, vha, 0x0099,
8869 rval = qla24xx_load_risc_flash(vha, srisc_addr, ha->flt_region_gold_fw);
8873 ql_log(ql_log_info, vha, 0x009a, "Need firmware flash update.\n");
8879 qla2x00_try_to_stop_firmware(scsi_qla_host_t *vha)
8882 struct qla_hw_data *ha = vha->hw;
8893 ret = qla2x00_stop_firmware(vha);
8896 ha->isp_ops->reset_chip(vha);
8897 if (ha->isp_ops->chip_diag(vha) != QLA_SUCCESS)
8899 if (qla2x00_setup_chip(vha) != QLA_SUCCESS)
8901 ql_log(ql_log_info, vha, 0x8015,
8903 ret = qla2x00_stop_firmware(vha);
8911 qla24xx_configure_vhba(scsi_qla_host_t *vha)
8916 struct qla_hw_data *ha = vha->hw;
8919 if (!vha->vp_idx)
8925 clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags);
8926 qla2x00_marker(vha, ha->base_qpair, 0, 0, MK_SYNC_ALL);
8929 vha->flags.management_server_logged_in = 0;
8932 rval2 = ha->isp_ops->fabric_login(vha, NPH_SNS, 0xff, 0xff, 0xfc, mb,
8936 ql_dbg(ql_dbg_init, vha, 0x0120,
8940 ql_dbg(ql_dbg_init, vha, 0x0103,
8947 atomic_set(&vha->loop_down_timer, 0);
8948 atomic_set(&vha->loop_state, LOOP_UP);
8949 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
8950 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
8962 qla84xx_get_chip(struct scsi_qla_host *vha)
8965 struct qla_hw_data *ha = vha->hw;
9005 qla84xx_put_chip(struct scsi_qla_host *vha)
9007 struct qla_hw_data *ha = vha->hw;
9014 qla84xx_init_chip(scsi_qla_host_t *vha)
9018 struct qla_hw_data *ha = vha->hw;
9022 rval = qla84xx_verify_chip(vha, status);
9033 qla81xx_nvram_config(scsi_qla_host_t *vha)
9042 struct qla_hw_data *ha = vha->hw;
9057 qla28xx_get_aux_images(vha, &active_regions);
9066 ql_dbg(ql_dbg_init, vha, 0x0110,
9071 ha->isp_ops->read_optrom(vha, ha->vpd, faddr << 2, ha->vpd_size);
9079 ql_dbg(ql_dbg_init, vha, 0x0110,
9083 ha->isp_ops->read_optrom(vha, ha->nvram, faddr << 2, ha->nvram_size);
9089 ql_dbg(ql_dbg_init + ql_dbg_buffer, vha, 0x0111,
9091 ql_dump_buffer(ql_dbg_init + ql_dbg_buffer, vha, 0x0112,
9098 ql_log(ql_log_info, vha, 0x0073,
9101 ql_dump_buffer(ql_dbg_init, vha, 0x0073, nv, sizeof(*nv));
9102 ql_log(ql_log_info, vha, 0x0074,
9158 qlt_81xx_config_nvram_stage1(vha, nv);
9197 qla2x00_set_model_info(vha, nv->model_name, sizeof(nv->model_name),
9200 qlt_81xx_config_nvram_stage2(vha, icb);
9240 memcpy(vha->node_name, icb->node_name, WWN_SIZE);
9241 memcpy(vha->port_name, icb->port_name, WWN_SIZE);
9295 if (!vha->hw->flags.msix_enabled &&
9300 if (!vha->flags.init_done) {
9308 vha->flags.process_response_queue = 0;
9312 ql_log(ql_log_info, vha, 0x0075,
9320 vha->flags.process_response_queue = 1;
9330 ha->fc4_type_priority = qla2xxx_get_fc4_priority(vha);
9333 ql_log(ql_log_warn, vha, 0x0076,
9340 qla82xx_restart_isp(scsi_qla_host_t *vha)
9343 struct qla_hw_data *ha = vha->hw;
9347 status = qla2x00_init_rings(vha);
9349 clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags);
9352 status = qla2x00_fw_ready(vha);
9355 qla2x00_marker(vha, ha->base_qpair, 0, 0, MK_SYNC_ALL);
9356 vha->flags.online = 1;
9357 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
9361 if ((vha->device_flags & DFLG_NO_CABLE))
9366 clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags);
9368 if (!atomic_read(&vha->loop_down_timer)) {
9373 vha->marker_needed = 1;
9379 clear_bit(ISP_ABORT_RETRY, &vha->dpc_flags);
9382 status = qla82xx_check_md_needed(vha);
9388 rval = qla2x00_enable_fce_trace(vha,
9392 ql_log(ql_log_warn, vha, 0x8001,
9401 rval = qla2x00_enable_eft_trace(vha,
9404 ql_log(ql_log_warn, vha, 0x8010,
9412 ql_dbg(ql_dbg_taskm, vha, 0x8011,
9430 ql_log(ql_log_warn, vha, 0x8016,
9445 * vha = scsi host structure pointer.
9456 qla24xx_get_fcp_prio(scsi_qla_host_t *vha, fc_port_t *fcport)
9464 struct qla_hw_data *ha = vha->hw;
9484 pid2 = vha->d_id.b24 & INVALID_PORT_ID;
9503 wwn1 = wwn_to_u64(vha->port_name);
9539 * vha = scsi host structure pointer.
9549 qla24xx_update_fcport_fcp_prio(scsi_qla_host_t *vha, fc_port_t *fcport)
9559 priority = qla24xx_get_fcp_prio(vha, fcport);
9563 if (IS_P3P_TYPE(vha->hw)) {
9568 ret = qla24xx_set_fcp_prio(vha, fcport->loop_id, priority, mb);
9571 ql_dbg(ql_dbg_user, vha, 0x709e,
9578 ql_dbg(ql_dbg_user, vha, 0x704f,
9600 qla24xx_update_all_fcp_prio(scsi_qla_host_t *vha)
9607 list_for_each_entry(fcport, &vha->vp_fcports, list)
9608 ret = qla24xx_update_fcport_fcp_prio(vha, fcport);
9613 struct qla_qpair *qla2xxx_create_qpair(struct scsi_qla_host *vha, int qos,
9619 struct qla_hw_data *ha = vha->hw;
9625 ql_log(ql_log_warn, vha, 0x00181,
9633 ql_log(ql_log_warn, vha, 0x0182,
9638 qpair->hw = vha->hw;
9639 qpair->vha = vha;
9649 ql_log(ql_log_warn, vha, 0x0183,
9671 ql_dbg(ql_dbg_multiq, vha, 0xc00f,
9676 ql_log(ql_log_warn, vha, 0x0184,
9682 list_add_tail(&qpair->qp_list_elem, &vha->qp_list);
9692 ql_log(ql_log_warn, vha, 0x0185,
9703 ql_log(ql_log_warn, vha, 0x0186,
9722 ql_log(ql_log_warn, vha, 0xd036,
9728 if (qla_create_buf_pool(vha, qpair)) {
9729 ql_log(ql_log_warn, vha, 0xd036,
9738 if (!vha->flags.qpairs_available)
9739 vha->flags.qpairs_available = 1;
9741 ql_dbg(ql_dbg_multiq, vha, 0xc00d,
9744 ql_dbg(ql_dbg_init, vha, 0x0187,
9753 qla25xx_delete_req_que(vha, qpair->req);
9755 qla25xx_delete_rsp_que(vha, qpair->rsp);
9760 if (list_empty(&vha->qp_list))
9761 vha->flags.qpairs_available = 0;
9772 int qla2xxx_delete_qpair(struct scsi_qla_host *vha, struct qla_qpair *qpair)
9781 ret = qla25xx_delete_req_que(vha, qpair->req);
9785 ret = qla25xx_delete_rsp_que(vha, qpair->rsp);
9807 if (list_empty(&vha->qp_list)) {
9808 vha->flags.qpairs_available = 0;
9809 vha->flags.qpairs_req_created = 0;
9810 vha->flags.qpairs_rsp_created = 0;
9835 qla2x00_get_num_tgts(scsi_qla_host_t *vha)
9843 list_for_each_entry_safe(f, tf, &vha->vp_fcports, list) {
9853 scsi_qla_host_t *vha = shost_priv(host);
9858 vha->hw_err_cnt = 0;
9860 vha->short_link_down_cnt = 0;
9862 vha->interface_err_cnt = 0;
9864 vha->cmd_timeout_cnt = 0;
9866 vha->reset_cmd_err_cnt = 0;
9868 spin_lock_irqsave(&vha->hw->tgt.sess_lock, int_flags);
9869 list_for_each_entry(fcport, &vha->vp_fcports, list) {
9873 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, int_flags);
9875 vha->link_down_time = QLA2XX_MAX_LINK_DOWN_TIME;
9892 scsi_qla_host_t *vha = shost_priv(host);
9907 num_tgt = qla2x00_get_num_tgts(vha);
9921 rsp_data->entry[i].cnt = vha->hw_err_cnt;
9928 rsp_data->entry[i].cnt = vha->short_link_down_cnt;
9935 rsp_data->entry[i].cnt = vha->interface_err_cnt;
9942 rsp_data->entry[i].cnt = vha->cmd_timeout_cnt;
9949 rsp_data->entry[i].cnt = vha->reset_cmd_err_cnt;
9957 spin_lock_irqsave(&vha->hw->tgt.sess_lock, int_flags);
9958 list_for_each_entry(fcport, &vha->vp_fcports, list) {
9968 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, int_flags);
9992 scsi_qla_host_t *vha = shost_priv(host);
9994 vha->hw->flags.port_isolated = 1;
9996 if (qla2x00_isp_reg_stat(vha->hw)) {
9997 ql_log(ql_log_info, vha, 0x9006,
9999 qla_pci_set_eeh_busy(vha);
10002 if (qla2x00_chip_is_down(vha))
10005 if (vha->flags.online) {
10006 qla2x00_abort_isp_cleanup(vha);
10007 qla2x00_wait_for_sess_deletion(vha);
10015 scsi_qla_host_t *vha = shost_priv(host);
10017 if (qla2x00_isp_reg_stat(vha->hw)) {
10018 ql_log(ql_log_info, vha, 0x9001,
10020 qla_pci_set_eeh_busy(vha);
10024 vha->hw->flags.port_isolated = 0;
10026 vha->flags.online = 1;
10027 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
10028 qla2xxx_wake_dpc(vha);