Lines Matching refs:vha

51 	struct qla_hw_data *ha = fcport->vha->hw;  in qla2x00_sp_timeout()
60 sp->free(fcport->vha, sp); in qla2x00_sp_timeout()
69 struct scsi_qla_host *vha = (scsi_qla_host_t *)data; in qla2x00_sp_free() local
72 qla2x00_rel_sp(vha, sp); in qla2x00_sp_free()
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()
103 ql_dbg(ql_dbg_disc, fcport->vha, 0x2071, in qla2x00_async_iocb_timeout()
111 qla2x00_post_async_logout_work(fcport->vha, fcport, NULL); in qla2x00_async_iocb_timeout()
116 qla2x00_post_async_login_done_work(fcport->vha, fcport, in qla2x00_async_iocb_timeout()
128 struct scsi_qla_host *vha = (scsi_qla_host_t *)data; in qla2x00_async_login_sp_done() local
130 if (!test_bit(UNLOADING, &vha->dpc_flags)) in qla2x00_async_login_sp_done()
131 qla2x00_post_async_login_done_work(sp->fcport->vha, sp->fcport, in qla2x00_async_login_sp_done()
133 sp->free(sp->fcport->vha, sp); in qla2x00_async_login_sp_done()
137 qla2x00_async_login(struct scsi_qla_host *vha, fc_port_t *fcport, in qla2x00_async_login() argument
145 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); in qla2x00_async_login()
151 qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha) + 2); in qla2x00_async_login()
163 ql_dbg(ql_dbg_disc, vha, 0x2072, in qla2x00_async_login()
171 sp->free(fcport->vha, sp); in qla2x00_async_login()
181 struct scsi_qla_host *vha = (scsi_qla_host_t *)data; in qla2x00_async_logout_sp_done() local
183 if (!test_bit(UNLOADING, &vha->dpc_flags)) in qla2x00_async_logout_sp_done()
184 qla2x00_post_async_logout_done_work(sp->fcport->vha, sp->fcport, in qla2x00_async_logout_sp_done()
186 sp->free(sp->fcport->vha, sp); in qla2x00_async_logout_sp_done()
190 qla2x00_async_logout(struct scsi_qla_host *vha, fc_port_t *fcport) in qla2x00_async_logout() argument
197 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); in qla2x00_async_logout()
203 qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha) + 2); in qla2x00_async_logout()
212 ql_dbg(ql_dbg_disc, vha, 0x2070, in qla2x00_async_logout()
219 sp->free(fcport->vha, sp); in qla2x00_async_logout()
229 struct scsi_qla_host *vha = (scsi_qla_host_t *)data; in qla2x00_async_adisc_sp_done() local
231 if (!test_bit(UNLOADING, &vha->dpc_flags)) in qla2x00_async_adisc_sp_done()
232 qla2x00_post_async_adisc_done_work(sp->fcport->vha, sp->fcport, in qla2x00_async_adisc_sp_done()
234 sp->free(sp->fcport->vha, sp); in qla2x00_async_adisc_sp_done()
238 qla2x00_async_adisc(struct scsi_qla_host *vha, fc_port_t *fcport, in qla2x00_async_adisc() argument
246 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); in qla2x00_async_adisc()
252 qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha) + 2); in qla2x00_async_adisc()
263 ql_dbg(ql_dbg_disc, vha, 0x206f, in qla2x00_async_adisc()
270 sp->free(fcport->vha, sp); in qla2x00_async_adisc()
297 struct scsi_qla_host *vha = fcport->vha; in qla2x00_async_tm_cmd() local
302 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); in qla2x00_async_tm_cmd()
309 qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha)); in qla2x00_async_tm_cmd()
321 ql_dbg(ql_dbg_taskm, vha, 0x802f, in qla2x00_async_tm_cmd()
332 ql_dbg(ql_dbg_taskm, vha, 0x8030, in qla2x00_async_tm_cmd()
336 if (!test_bit(UNLOADING, &vha->dpc_flags) && !IS_QLAFX00(vha->hw)) { in qla2x00_async_tm_cmd()
341 qla2x00_marker(vha, vha->hw->req_q_map[0], in qla2x00_async_tm_cmd()
342 vha->hw->rsp_q_map[0], sp->fcport->loop_id, lun, in qla2x00_async_tm_cmd()
347 sp->free(vha, sp); in qla2x00_async_tm_cmd()
374 scsi_qla_host_t *vha = cmd_sp->fcport->vha; in qla24xx_async_abort_cmd() local
380 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); in qla24xx_async_abort_cmd()
387 qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha)); in qla24xx_async_abort_cmd()
397 ql_dbg(ql_dbg_async, vha, 0x507c, in qla24xx_async_abort_cmd()
407 sp->free(vha, sp); in qla24xx_async_abort_cmd()
419 struct scsi_qla_host *vha = fcport->vha; in qla24xx_async_abort_command() local
420 struct qla_hw_data *ha = vha->hw; in qla24xx_async_abort_command()
421 struct req_que *req = vha->req; in qla24xx_async_abort_command()
434 return qlafx00_fx_disc(vha, &vha->hw->mr.fcport, in qla24xx_async_abort_command()
441 qla2x00_async_login_done(struct scsi_qla_host *vha, fc_port_t *fcport, in qla2x00_async_login_done() argument
453 rval = qla2x00_get_port_database(vha, fcport, 0); in qla2x00_async_login_done()
457 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla2x00_async_login_done()
462 qla2x00_post_async_logout_work(vha, fcport, NULL); in qla2x00_async_login_done()
463 qla2x00_post_async_login_work(vha, fcport, NULL); in qla2x00_async_login_done()
467 qla2x00_post_async_adisc_work(vha, fcport, data); in qla2x00_async_login_done()
470 qla2x00_update_fcport(vha, fcport); in qla2x00_async_login_done()
475 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla2x00_async_login_done()
477 qla2x00_mark_device_lost(vha, fcport, 1, 0); in qla2x00_async_login_done()
481 qla2x00_post_async_logout_work(vha, fcport, NULL); in qla2x00_async_login_done()
482 qla2x00_post_async_login_work(vha, fcport, NULL); in qla2x00_async_login_done()
486 rval = qla2x00_find_new_loop_id(vha, fcport); in qla2x00_async_login_done()
489 qla2x00_mark_device_lost(vha, fcport, 1, 0); in qla2x00_async_login_done()
492 qla2x00_post_async_login_work(vha, fcport, NULL); in qla2x00_async_login_done()
499 qla2x00_async_logout_done(struct scsi_qla_host *vha, fc_port_t *fcport, in qla2x00_async_logout_done() argument
504 qla2x00_mark_device_lost(vha, fcport, 1, 0); in qla2x00_async_logout_done()
510 qla2x00_async_adisc_done(struct scsi_qla_host *vha, fc_port_t *fcport, in qla2x00_async_adisc_done() argument
514 qla2x00_update_fcport(vha, fcport); in qla2x00_async_adisc_done()
522 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla2x00_async_adisc_done()
524 qla2x00_mark_device_lost(vha, fcport, 1, 0); in qla2x00_async_adisc_done()
534 qla83xx_nic_core_fw_load(scsi_qla_host_t *vha) in qla83xx_nic_core_fw_load() argument
537 struct qla_hw_data *ha = vha->hw; in qla83xx_nic_core_fw_load()
541 qla83xx_idc_lock(vha, 0); in qla83xx_nic_core_fw_load()
550 if (__qla83xx_set_drv_presence(vha) != QLA_SUCCESS) { in qla83xx_nic_core_fw_load()
551 ql_dbg(ql_dbg_p3p, vha, 0xb077, in qla83xx_nic_core_fw_load()
558 qla83xx_reset_ownership(vha); in qla83xx_nic_core_fw_load()
566 qla83xx_rd_reg(vha, QLA83XX_IDC_MAJOR_VERSION, &idc_major_ver); in qla83xx_nic_core_fw_load()
570 qla83xx_wr_reg(vha, QLA83XX_IDC_MAJOR_VERSION, idc_major_ver); in qla83xx_nic_core_fw_load()
573 qla83xx_wr_reg(vha, QLA83XX_IDC_LOCK_RECOVERY, 0); in qla83xx_nic_core_fw_load()
579 ql_log(ql_log_warn, vha, 0xb07d, in qla83xx_nic_core_fw_load()
582 __qla83xx_clear_drv_presence(vha); in qla83xx_nic_core_fw_load()
587 qla83xx_rd_reg(vha, QLA83XX_IDC_MINOR_VERSION, &idc_minor_ver); in qla83xx_nic_core_fw_load()
589 qla83xx_wr_reg(vha, QLA83XX_IDC_MINOR_VERSION, idc_minor_ver); in qla83xx_nic_core_fw_load()
593 if (!qla81xx_get_port_config(vha, config)) in qla83xx_nic_core_fw_load()
594 qla83xx_wr_reg(vha, QLA83XX_IDC_DEV_STATE, in qla83xx_nic_core_fw_load()
598 rval = qla83xx_idc_state_handler(vha); in qla83xx_nic_core_fw_load()
601 qla83xx_idc_unlock(vha, 0); in qla83xx_nic_core_fw_load()
617 qla2x00_initialize_adapter(scsi_qla_host_t *vha) in qla2x00_initialize_adapter() argument
620 struct qla_hw_data *ha = vha->hw; in qla2x00_initialize_adapter()
624 vha->flags.online = 0; in qla2x00_initialize_adapter()
626 vha->flags.reset_active = 0; in qla2x00_initialize_adapter()
629 vha->qla_stats.jiffies_at_last_reset = get_jiffies_64(); in qla2x00_initialize_adapter()
630 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); in qla2x00_initialize_adapter()
631 atomic_set(&vha->loop_state, LOOP_DOWN); in qla2x00_initialize_adapter()
632 vha->device_flags = DFLG_NO_CABLE; in qla2x00_initialize_adapter()
633 vha->dpc_flags = 0; in qla2x00_initialize_adapter()
634 vha->flags.management_server_logged_in = 0; in qla2x00_initialize_adapter()
635 vha->marker_needed = 0; in qla2x00_initialize_adapter()
642 ql_dbg(ql_dbg_init, vha, 0x0040, in qla2x00_initialize_adapter()
644 rval = ha->isp_ops->pci_config(vha); in qla2x00_initialize_adapter()
646 ql_log(ql_log_warn, vha, 0x0044, in qla2x00_initialize_adapter()
651 ha->isp_ops->reset_chip(vha); in qla2x00_initialize_adapter()
653 rval = qla2xxx_get_flash_info(vha); in qla2x00_initialize_adapter()
655 ql_log(ql_log_fatal, vha, 0x004f, in qla2x00_initialize_adapter()
661 qla8044_read_reset_template(vha); in qla2x00_initialize_adapter()
668 qla8044_set_idc_dontreset(vha); in qla2x00_initialize_adapter()
671 ha->isp_ops->get_flash_version(vha, req->ring); in qla2x00_initialize_adapter()
672 ql_dbg(ql_dbg_init, vha, 0x0061, in qla2x00_initialize_adapter()
675 ha->isp_ops->nvram_config(vha); in qla2x00_initialize_adapter()
679 ql_log(ql_log_info, vha, 0x0077, in qla2x00_initialize_adapter()
680 "Masking HBA WWPN %8phN (via NVRAM).\n", vha->port_name); in qla2x00_initialize_adapter()
684 ql_dbg(ql_dbg_init, vha, 0x0078, in qla2x00_initialize_adapter()
687 if (qla2x00_isp_firmware(vha) != QLA_SUCCESS) { in qla2x00_initialize_adapter()
688 rval = ha->isp_ops->chip_diag(vha); in qla2x00_initialize_adapter()
691 rval = qla2x00_setup_chip(vha); in qla2x00_initialize_adapter()
697 ha->cs84xx = qla84xx_get_chip(vha); in qla2x00_initialize_adapter()
699 ql_log(ql_log_warn, vha, 0x00d0, in qla2x00_initialize_adapter()
705 if (qla_ini_mode_enabled(vha)) in qla2x00_initialize_adapter()
706 rval = qla2x00_init_rings(vha); in qla2x00_initialize_adapter()
712 rval = qla84xx_init_chip(vha); in qla2x00_initialize_adapter()
714 ql_log(ql_log_warn, vha, 0x00d4, in qla2x00_initialize_adapter()
716 qla84xx_put_chip(vha); in qla2x00_initialize_adapter()
722 rval = qla83xx_nic_core_fw_load(vha); in qla2x00_initialize_adapter()
724 ql_log(ql_log_warn, vha, 0x0124, in qla2x00_initialize_adapter()
729 qla24xx_read_fcp_prio_cfg(vha); in qla2x00_initialize_adapter()
732 qla82xx_set_driver_version(vha, QLA2XXX_VERSION); in qla2x00_initialize_adapter()
734 qla25xx_set_driver_version(vha, QLA2XXX_VERSION); in qla2x00_initialize_adapter()
746 qla2100_pci_config(scsi_qla_host_t *vha) in qla2100_pci_config() argument
750 struct qla_hw_data *ha = vha->hw; in qla2100_pci_config()
777 qla2300_pci_config(scsi_qla_host_t *vha) in qla2300_pci_config() argument
782 struct qla_hw_data *ha = vha->hw; in qla2300_pci_config()
859 qla24xx_pci_config(scsi_qla_host_t *vha) in qla24xx_pci_config() argument
863 struct qla_hw_data *ha = vha->hw; in qla24xx_pci_config()
903 qla25xx_pci_config(scsi_qla_host_t *vha) in qla25xx_pci_config() argument
906 struct qla_hw_data *ha = vha->hw; in qla25xx_pci_config()
934 qla2x00_isp_firmware(scsi_qla_host_t *vha) in qla2x00_isp_firmware() argument
939 struct qla_hw_data *ha = vha->hw; in qla2x00_isp_firmware()
945 ql_log(ql_log_info, vha, 0x0079, "RISC CODE NOT loaded.\n"); in qla2x00_isp_firmware()
948 rval = qla2x00_verify_checksum(vha, ha->fw_srisc_address); in qla2x00_isp_firmware()
951 rval = qla2x00_get_adapter_id(vha, &loop_id, &al_pa, in qla2x00_isp_firmware()
957 ql_dbg(ql_dbg_init, vha, 0x007a, in qla2x00_isp_firmware()
970 qla2x00_reset_chip(scsi_qla_host_t *vha) in qla2x00_reset_chip() argument
973 struct qla_hw_data *ha = vha->hw; in qla2x00_reset_chip()
1113 qla81xx_reset_mpi(scsi_qla_host_t *vha) in qla81xx_reset_mpi() argument
1117 if (!IS_QLA81XX(vha->hw)) in qla81xx_reset_mpi()
1120 return qla81xx_write_mpi_register(vha, mb); in qla81xx_reset_mpi()
1130 qla24xx_reset_risc(scsi_qla_host_t *vha) in qla24xx_reset_risc() argument
1133 struct qla_hw_data *ha = vha->hw; in qla24xx_reset_risc()
1154 ql_dbg(ql_dbg_init + ql_dbg_verbose, vha, 0x017e, in qla24xx_reset_risc()
1180 ql_dbg(ql_dbg_init + ql_dbg_verbose, vha, 0x017f, in qla24xx_reset_risc()
1198 ql_dbg(ql_dbg_init + ql_dbg_verbose, vha, 0x015d, in qla24xx_reset_risc()
1204 if (test_and_clear_bit(MPI_RESET_NEEDED, &vha->dpc_flags)) { in qla24xx_reset_risc()
1205 if (qla81xx_reset_mpi(vha) != QLA_SUCCESS) { in qla24xx_reset_risc()
1207 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); in qla24xx_reset_risc()
1208 set_bit(MPI_RESET_NEEDED, &vha->dpc_flags); in qla24xx_reset_risc()
1215 vha->flags.online = 0; in qla24xx_reset_risc()
1241 ql_dbg(ql_dbg_init + ql_dbg_verbose, vha, 0x015e, in qla24xx_reset_risc()
1248 ql_dbg(ql_dbg_init + ql_dbg_verbose, vha, 0x015f, in qla24xx_reset_risc()
1259 qla25xx_read_risc_sema_reg(scsi_qla_host_t *vha, uint32_t *data) in qla25xx_read_risc_sema_reg() argument
1261 struct device_reg_24xx __iomem *reg = &vha->hw->iobase->isp24; in qla25xx_read_risc_sema_reg()
1269 qla25xx_write_risc_sema_reg(scsi_qla_host_t *vha, uint32_t data) in qla25xx_write_risc_sema_reg() argument
1271 struct device_reg_24xx __iomem *reg = &vha->hw->iobase->isp24; in qla25xx_write_risc_sema_reg()
1278 qla25xx_manipulate_risc_semaphore(scsi_qla_host_t *vha) in qla25xx_manipulate_risc_semaphore() argument
1286 if (vha->hw->pdev->subsystem_device != 0x0175 && in qla25xx_manipulate_risc_semaphore()
1287 vha->hw->pdev->subsystem_device != 0x0240) in qla25xx_manipulate_risc_semaphore()
1290 WRT_REG_DWORD(&vha->hw->iobase->isp24.hccr, HCCRX_SET_RISC_PAUSE); in qla25xx_manipulate_risc_semaphore()
1297 qla25xx_write_risc_sema_reg(vha, RISC_SEMAPHORE_SET); in qla25xx_manipulate_risc_semaphore()
1298 qla25xx_read_risc_sema_reg(vha, &wd32); in qla25xx_manipulate_risc_semaphore()
1313 qla25xx_write_risc_sema_reg(vha, RISC_SEMAPHORE_CLR); in qla25xx_manipulate_risc_semaphore()
1317 qla25xx_read_risc_sema_reg(vha, &wd32); in qla25xx_manipulate_risc_semaphore()
1327 qla25xx_write_risc_sema_reg(vha, RISC_SEMAPHORE_FORCE_CLR); in qla25xx_manipulate_risc_semaphore()
1332 qla25xx_write_risc_sema_reg(vha, RISC_SEMAPHORE_FORCE_SET); in qla25xx_manipulate_risc_semaphore()
1345 qla24xx_reset_chip(scsi_qla_host_t *vha) in qla24xx_reset_chip() argument
1347 struct qla_hw_data *ha = vha->hw; in qla24xx_reset_chip()
1356 qla25xx_manipulate_risc_semaphore(vha); in qla24xx_reset_chip()
1359 qla24xx_reset_risc(vha); in qla24xx_reset_chip()
1369 qla2x00_chip_diag(scsi_qla_host_t *vha) in qla2x00_chip_diag() argument
1372 struct qla_hw_data *ha = vha->hw; in qla2x00_chip_diag()
1383 ql_dbg(ql_dbg_init, vha, 0x007b, in qla2x00_chip_diag()
1406 ql_dbg(ql_dbg_init, vha, 0x007c, in qla2x00_chip_diag()
1428 ql_dbg(ql_dbg_init, vha, 0x007d, "Checking product Id of chip.\n"); in qla2x00_chip_diag()
1436 ql_log(ql_log_warn, vha, 0x0062, in qla2x00_chip_diag()
1457 ql_dbg(ql_dbg_init, vha, 0x007e, "Found QLA2200A Chip.\n"); in qla2x00_chip_diag()
1466 ql_dbg(ql_dbg_init, vha, 0x007f, "Checking mailboxes.\n"); in qla2x00_chip_diag()
1467 rval = qla2x00_mbx_reg_test(vha); in qla2x00_chip_diag()
1469 ql_log(ql_log_warn, vha, 0x0080, in qla2x00_chip_diag()
1478 ql_log(ql_log_info, vha, 0x0081, in qla2x00_chip_diag()
1493 qla24xx_chip_diag(scsi_qla_host_t *vha) in qla24xx_chip_diag() argument
1496 struct qla_hw_data *ha = vha->hw; in qla24xx_chip_diag()
1504 rval = qla2x00_mbx_reg_test(vha); in qla24xx_chip_diag()
1506 ql_log(ql_log_warn, vha, 0x0082, in qla24xx_chip_diag()
1517 qla2x00_alloc_fw_dump(scsi_qla_host_t *vha) in qla2x00_alloc_fw_dump() argument
1524 struct qla_hw_data *ha = vha->hw; in qla2x00_alloc_fw_dump()
1529 ql_dbg(ql_dbg_init, vha, 0x00bd, in qla2x00_alloc_fw_dump()
1588 ql_log(ql_log_warn, vha, 0x00be, in qla2x00_alloc_fw_dump()
1594 rval = qla2x00_enable_fce_trace(vha, tc_dma, FCE_NUM_BUFFERS, in qla2x00_alloc_fw_dump()
1597 ql_log(ql_log_warn, vha, 0x00bf, in qla2x00_alloc_fw_dump()
1604 ql_dbg(ql_dbg_init, vha, 0x00c0, in qla2x00_alloc_fw_dump()
1621 ql_log(ql_log_warn, vha, 0x00c1, in qla2x00_alloc_fw_dump()
1627 rval = qla2x00_enable_eft_trace(vha, tc_dma, EFT_NUM_BUFFERS); in qla2x00_alloc_fw_dump()
1629 ql_log(ql_log_warn, vha, 0x00c2, in qla2x00_alloc_fw_dump()
1635 ql_dbg(ql_dbg_init, vha, 0x00c3, in qla2x00_alloc_fw_dump()
1646 ql_log(ql_log_warn, vha, 0x00ba, in qla2x00_alloc_fw_dump()
1650 dump_size = qla27xx_fwdt_calculate_dump_size(vha); in qla2x00_alloc_fw_dump()
1651 ql_dbg(ql_dbg_init, vha, 0x00fa, in qla2x00_alloc_fw_dump()
1666 ql_log(ql_log_warn, vha, 0x00c4, in qla2x00_alloc_fw_dump()
1686 ql_dbg(ql_dbg_init, vha, 0x00c5, in qla2x00_alloc_fw_dump()
1712 qla81xx_mpi_sync(scsi_qla_host_t *vha) in qla81xx_mpi_sync() argument
1719 if (!IS_QLA81XX(vha->hw)) in qla81xx_mpi_sync()
1722 rval = qla2x00_write_ram_word(vha, 0x7c00, 1); in qla81xx_mpi_sync()
1724 ql_log(ql_log_warn, vha, 0x0105, in qla81xx_mpi_sync()
1729 pci_read_config_word(vha->hw->pdev, 0x54, &dc); in qla81xx_mpi_sync()
1730 rval = qla2x00_read_ram_word(vha, 0x7a15, &dw); in qla81xx_mpi_sync()
1732 ql_log(ql_log_warn, vha, 0x0067, "Unable to read sync.\n"); in qla81xx_mpi_sync()
1742 rval = qla2x00_write_ram_word(vha, 0x7a15, dw); in qla81xx_mpi_sync()
1744 ql_log(ql_log_warn, vha, 0x0114, "Unable to gain sync.\n"); in qla81xx_mpi_sync()
1748 rval = qla2x00_write_ram_word(vha, 0x7c00, 0); in qla81xx_mpi_sync()
1750 ql_log(ql_log_warn, vha, 0x006d, in qla81xx_mpi_sync()
1806 qla2x00_setup_chip(scsi_qla_host_t *vha) in qla2x00_setup_chip() argument
1810 struct qla_hw_data *ha = vha->hw; in qla2x00_setup_chip()
1816 rval = ha->isp_ops->load_risc(vha, &srisc_address); in qla2x00_setup_chip()
1818 qla2x00_stop_firmware(vha); in qla2x00_setup_chip()
1832 qla81xx_mpi_sync(vha); in qla2x00_setup_chip()
1835 rval = ha->isp_ops->load_risc(vha, &srisc_address); in qla2x00_setup_chip()
1837 ql_dbg(ql_dbg_init, vha, 0x00c9, in qla2x00_setup_chip()
1840 rval = qla2x00_verify_checksum(vha, srisc_address); in qla2x00_setup_chip()
1843 ql_dbg(ql_dbg_init, vha, 0x00ca, in qla2x00_setup_chip()
1846 rval = qla2x00_execute_fw(vha, srisc_address); in qla2x00_setup_chip()
1852 qla82xx_check_md_needed(vha); in qla2x00_setup_chip()
1854 rval = qla2x00_get_fw_version(vha); in qla2x00_setup_chip()
1867 qla2x00_get_resource_cnts(vha, NULL, in qla2x00_setup_chip()
1876 vha->req); in qla2x00_setup_chip()
1882 qla2x00_alloc_fw_dump(vha); in qla2x00_setup_chip()
1887 ql_log(ql_log_fatal, vha, 0x00cd, in qla2x00_setup_chip()
1912 rval = qla81xx_fac_get_sector_size(vha, &size); in qla2x00_setup_chip()
1917 ql_log(ql_log_warn, vha, 0x00ce, in qla2x00_setup_chip()
1930 ql_log(ql_log_fatal, vha, 0x00cf, in qla2x00_setup_chip()
1969 qla2x00_update_fw_options(scsi_qla_host_t *vha) in qla2x00_update_fw_options() argument
1972 struct qla_hw_data *ha = vha->hw; in qla2x00_update_fw_options()
1975 qla2x00_get_fw_options(vha, ha->fw_options); in qla2x00_update_fw_options()
1981 ql_dbg(ql_dbg_init + ql_dbg_buffer, vha, 0x0115, in qla2x00_update_fw_options()
1983 ql_dump_buffer(ql_dbg_init + ql_dbg_buffer, vha, 0x0109, in qla2x00_update_fw_options()
2041 qla2x00_set_fw_options(vha, ha->fw_options); in qla2x00_update_fw_options()
2045 qla24xx_update_fw_options(scsi_qla_host_t *vha) in qla24xx_update_fw_options() argument
2048 struct qla_hw_data *ha = vha->hw; in qla24xx_update_fw_options()
2057 rval = qla2x00_set_serdes_params(vha, in qla24xx_update_fw_options()
2062 ql_log(ql_log_warn, vha, 0x0104, in qla24xx_update_fw_options()
2068 qla2x00_config_rings(struct scsi_qla_host *vha) in qla2x00_config_rings() argument
2070 struct qla_hw_data *ha = vha->hw; in qla2x00_config_rings()
2093 qla24xx_config_rings(struct scsi_qla_host *vha) in qla24xx_config_rings() argument
2095 struct qla_hw_data *ha = vha->hw; in qla24xx_config_rings()
2129 ql_dbg(ql_dbg_init, vha, 0x00fd, in qla24xx_config_rings()
2146 ql_dbg(ql_dbg_init, vha, 0x00fe, in qla24xx_config_rings()
2163 qlt_24xx_config_rings(vha); in qla24xx_config_rings()
2179 qla2x00_init_rings(scsi_qla_host_t *vha) in qla2x00_init_rings() argument
2184 struct qla_hw_data *ha = vha->hw; in qla2x00_init_rings()
2226 qlt_init_atio_q_entries(vha); in qla2x00_init_rings()
2228 ha->isp_ops->config_rings(vha); in qla2x00_init_rings()
2232 ql_dbg(ql_dbg_init, vha, 0x00d1, "Issue init firmware.\n"); in qla2x00_init_rings()
2235 rval = qlafx00_init_firmware(vha, ha->init_cb_size); in qla2x00_init_rings()
2240 ha->isp_ops->update_fw_options(vha); in qla2x00_init_rings()
2259 ql_dbg(ql_dbg_init, vha, 0x0141, "FA-WWPN Support: %s.\n", in qla2x00_init_rings()
2263 rval = qla2x00_init_firmware(vha, ha->init_cb_size); in qla2x00_init_rings()
2266 ql_log(ql_log_fatal, vha, 0x00d2, in qla2x00_init_rings()
2269 ql_dbg(ql_dbg_init, vha, 0x00d3, in qla2x00_init_rings()
2283 qla2x00_fw_ready(scsi_qla_host_t *vha) in qla2x00_fw_ready() argument
2290 struct qla_hw_data *ha = vha->hw; in qla2x00_fw_ready()
2292 if (IS_QLAFX00(vha->hw)) in qla2x00_fw_ready()
2293 return qlafx00_fw_ready(vha); in qla2x00_fw_ready()
2318 if (!vha->flags.init_done) in qla2x00_fw_ready()
2319 ql_log(ql_log_info, vha, 0x801e, in qla2x00_fw_ready()
2324 rval = qla2x00_get_firmware_state(vha, state); in qla2x00_fw_ready()
2327 vha->device_flags &= ~DFLG_NO_CABLE; in qla2x00_fw_ready()
2330 ql_dbg(ql_dbg_taskm, vha, 0x801f, in qla2x00_fw_ready()
2335 ql_dbg(ql_dbg_taskm, vha, 0x8028, in qla2x00_fw_ready()
2339 rval = qla84xx_init_chip(vha); in qla2x00_fw_ready()
2342 vha, 0x8007, in qla2x00_fw_ready()
2351 ql_dbg(ql_dbg_taskm, vha, 0x8008, in qla2x00_fw_ready()
2357 ql_dbg(ql_dbg_taskm, vha, 0x8037, in qla2x00_fw_ready()
2360 qla2x00_get_retry_cnt(vha, &ha->retry_count, in qla2x00_fw_ready()
2369 if (atomic_read(&vha->loop_down_timer) && in qla2x00_fw_ready()
2375 ql_log(ql_log_info, vha, 0x8038, in qla2x00_fw_ready()
2378 vha->device_flags |= DFLG_NO_CABLE; in qla2x00_fw_ready()
2396 ql_dbg(ql_dbg_taskm, vha, 0x803a, in qla2x00_fw_ready()
2400 if (rval && !(vha->device_flags & DFLG_NO_CABLE)) { in qla2x00_fw_ready()
2401 ql_log(ql_log_warn, vha, 0x803b, in qla2x00_fw_ready()
2422 qla2x00_configure_hba(scsi_qla_host_t *vha) in qla2x00_configure_hba() argument
2432 struct qla_hw_data *ha = vha->hw; in qla2x00_configure_hba()
2437 rval = qla2x00_get_adapter_id(vha, in qla2x00_configure_hba()
2440 if (LOOP_TRANSITION(vha) || atomic_read(&ha->loop_down_timer) || in qla2x00_configure_hba()
2443 ql_dbg(ql_dbg_disc, vha, 0x2008, in qla2x00_configure_hba()
2446 ql_log(ql_log_warn, vha, 0x2009, in qla2x00_configure_hba()
2448 if (IS_FWI2_CAPABLE(ha) && (vha == base_vha) && in qla2x00_configure_hba()
2450 ql_log(ql_log_warn, vha, 0x1151, in qla2x00_configure_hba()
2452 if (qla24xx_link_initialize(vha) == QLA_SUCCESS) in qla2x00_configure_hba()
2455 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); in qla2x00_configure_hba()
2461 ql_log(ql_log_info, vha, 0x200a, in qla2x00_configure_hba()
2466 vha->loop_id = loop_id; in qla2x00_configure_hba()
2475 ql_dbg(ql_dbg_disc, vha, 0x200b, "HBA in NL topology.\n"); in qla2x00_configure_hba()
2481 ql_dbg(ql_dbg_disc, vha, 0x200c, "HBA in FL topology.\n"); in qla2x00_configure_hba()
2488 ql_dbg(ql_dbg_disc, vha, 0x200d, "HBA in N P2P topology.\n"); in qla2x00_configure_hba()
2495 ql_dbg(ql_dbg_disc, vha, 0x200e, "HBA in F P2P topology.\n"); in qla2x00_configure_hba()
2503 ql_dbg(ql_dbg_disc, vha, 0x200f, in qla2x00_configure_hba()
2512 vha->d_id.b.domain = domain; in qla2x00_configure_hba()
2513 vha->d_id.b.area = area; in qla2x00_configure_hba()
2514 vha->d_id.b.al_pa = al_pa; in qla2x00_configure_hba()
2517 qlt_update_vp_map(vha, SET_AL_PA); in qla2x00_configure_hba()
2520 if (!vha->flags.init_done) in qla2x00_configure_hba()
2521 ql_log(ql_log_info, vha, 0x2010, in qla2x00_configure_hba()
2523 connect_type, vha->loop_id); in qla2x00_configure_hba()
2529 qla2x00_set_model_info(scsi_qla_host_t *vha, uint8_t *model, size_t len, in qla2x00_set_model_info() argument
2534 struct qla_hw_data *ha = vha->hw; in qla2x00_set_model_info()
2570 qla2xxx_get_vpd_field(vha, "\x82", ha->model_desc, in qla2x00_set_model_info()
2577 static void qla2xxx_nvram_wwn_from_ofw(scsi_qla_host_t *vha, nvram_t *nv) in qla2xxx_nvram_wwn_from_ofw() argument
2580 struct qla_hw_data *ha = vha->hw; in qla2xxx_nvram_wwn_from_ofw()
2610 qla2x00_nvram_config(scsi_qla_host_t *vha) in qla2x00_nvram_config() argument
2616 struct qla_hw_data *ha = vha->hw; in qla2x00_nvram_config()
2632 ha->isp_ops->read_nvram(vha, ptr, ha->nvram_base, ha->nvram_size); in qla2x00_nvram_config()
2636 ql_dbg(ql_dbg_init + ql_dbg_buffer, vha, 0x010f, in qla2x00_nvram_config()
2638 ql_dump_buffer(ql_dbg_init + ql_dbg_buffer, vha, 0x0110, in qla2x00_nvram_config()
2645 ql_log(ql_log_warn, vha, 0x0064, in qla2x00_nvram_config()
2649 ql_log(ql_log_warn, vha, 0x0065, in qla2x00_nvram_config()
2687 qla2xxx_nvram_wwn_from_ofw(vha, nv); in qla2x00_nvram_config()
2741 qla2x00_set_model_info(vha, nv->model_number, in qla2x00_nvram_config()
2822 memcpy(vha->node_name, icb->node_name, WWN_SIZE); in qla2x00_nvram_config()
2823 memcpy(vha->port_name, icb->port_name, WWN_SIZE); in qla2x00_nvram_config()
2891 vha->flags.process_response_queue = 1; in qla2x00_nvram_config()
2894 if (!vha->flags.init_done) { in qla2x00_nvram_config()
2902 vha->flags.process_response_queue = 0; in qla2x00_nvram_config()
2906 ql_log(ql_log_info, vha, 0x0068, in qla2x00_nvram_config()
2912 vha->flags.process_response_queue = 1; in qla2x00_nvram_config()
2917 ql_log(ql_log_warn, vha, 0x0069, in qla2x00_nvram_config()
2930 spin_lock_irqsave(fcport->vha->host->host_lock, flags); in qla2x00_rport_del()
2933 spin_unlock_irqrestore(fcport->vha->host->host_lock, flags); in qla2x00_rport_del()
2946 qla2x00_alloc_fcport(scsi_qla_host_t *vha, gfp_t flags) in qla2x00_alloc_fcport() argument
2955 fcport->vha = vha; in qla2x00_alloc_fcport()
2977 qla2x00_configure_loop(scsi_qla_host_t *vha) in qla2x00_configure_loop() argument
2981 struct qla_hw_data *ha = vha->hw; in qla2x00_configure_loop()
2985 if (test_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags)) { in qla2x00_configure_loop()
2986 rval = qla2x00_configure_hba(vha); in qla2x00_configure_loop()
2988 ql_dbg(ql_dbg_disc, vha, 0x2013, in qla2x00_configure_loop()
2994 save_flags = flags = vha->dpc_flags; in qla2x00_configure_loop()
2995 ql_dbg(ql_dbg_disc, vha, 0x2014, in qla2x00_configure_loop()
3002 clear_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qla2x00_configure_loop()
3003 clear_bit(RSCN_UPDATE, &vha->dpc_flags); in qla2x00_configure_loop()
3005 qla2x00_get_data_rate(vha); in qla2x00_configure_loop()
3022 } else if (!vha->flags.online || in qla2x00_configure_loop()
3030 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) { in qla2x00_configure_loop()
3031 ql_dbg(ql_dbg_disc, vha, 0x2015, in qla2x00_configure_loop()
3035 rval = qla2x00_configure_local_loop(vha); in qla2x00_configure_loop()
3039 if (LOOP_TRANSITION(vha)) { in qla2x00_configure_loop()
3040 ql_dbg(ql_dbg_disc, vha, 0x201e, in qla2x00_configure_loop()
3045 rval = qla2x00_configure_fabric(vha); in qla2x00_configure_loop()
3049 if (atomic_read(&vha->loop_down_timer) || in qla2x00_configure_loop()
3050 test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) { in qla2x00_configure_loop()
3053 atomic_set(&vha->loop_state, LOOP_READY); in qla2x00_configure_loop()
3054 ql_dbg(ql_dbg_disc, vha, 0x2069, in qla2x00_configure_loop()
3060 ql_dbg(ql_dbg_disc, vha, 0x206a, in qla2x00_configure_loop()
3063 ql_dbg(ql_dbg_disc, vha, 0x206b, in qla2x00_configure_loop()
3068 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) { in qla2x00_configure_loop()
3070 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qla2x00_configure_loop()
3072 set_bit(RSCN_UPDATE, &vha->dpc_flags); in qla2x00_configure_loop()
3092 qla2x00_configure_local_loop(scsi_qla_host_t *vha) in qla2x00_configure_local_loop() argument
3104 struct qla_hw_data *ha = vha->hw; in qla2x00_configure_local_loop()
3112 rval = qla2x00_get_id_list(vha, ha->gid_list, ha->gid_list_dma, in qla2x00_configure_local_loop()
3117 ql_dbg(ql_dbg_disc, vha, 0x2017, in qla2x00_configure_local_loop()
3119 ql_dump_buffer(ql_dbg_disc + ql_dbg_buffer, vha, 0x2075, in qla2x00_configure_local_loop()
3124 new_fcport = qla2x00_alloc_fcport(vha, GFP_KERNEL); in qla2x00_configure_local_loop()
3126 ql_log(ql_log_warn, vha, 0x2018, in qla2x00_configure_local_loop()
3136 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_configure_local_loop()
3141 ql_dbg(ql_dbg_disc, vha, 0x2019, in qla2x00_configure_local_loop()
3169 (area != vha->d_id.b.area || domain != vha->d_id.b.domain)) in qla2x00_configure_local_loop()
3183 rval2 = qla2x00_get_port_database(vha, new_fcport, 0); in qla2x00_configure_local_loop()
3185 ql_dbg(ql_dbg_disc, vha, 0x201a, in qla2x00_configure_local_loop()
3189 ql_dbg(ql_dbg_disc, vha, 0x201b, in qla2x00_configure_local_loop()
3191 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla2x00_configure_local_loop()
3198 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_configure_local_loop()
3216 list_add_tail(&new_fcport->list, &vha->vp_fcports); in qla2x00_configure_local_loop()
3220 new_fcport = qla2x00_alloc_fcport(vha, GFP_KERNEL); in qla2x00_configure_local_loop()
3222 ql_log(ql_log_warn, vha, 0x201c, in qla2x00_configure_local_loop()
3233 qla2x00_update_fcport(vha, fcport); in qla2x00_configure_local_loop()
3242 ql_dbg(ql_dbg_disc, vha, 0x201d, in qla2x00_configure_local_loop()
3250 qla2x00_iidma_fcport(scsi_qla_host_t *vha, fc_port_t *fcport) in qla2x00_iidma_fcport() argument
3254 struct qla_hw_data *ha = vha->hw; in qla2x00_iidma_fcport()
3266 rval = qla2x00_set_idma_speed(vha, fcport->loop_id, fcport->fp_speed, in qla2x00_iidma_fcport()
3269 ql_dbg(ql_dbg_disc, vha, 0x2004, in qla2x00_iidma_fcport()
3273 ql_dbg(ql_dbg_disc, vha, 0x2005, in qla2x00_iidma_fcport()
3281 qla2x00_reg_remote_port(scsi_qla_host_t *vha, fc_port_t *fcport) in qla2x00_reg_remote_port() argument
3292 fcport->rport = rport = fc_remote_port_add(vha->host, 0, &rport_ids); in qla2x00_reg_remote_port()
3294 ql_log(ql_log_warn, vha, 0x2006, in qla2x00_reg_remote_port()
3303 qlt_fc_port_added(vha, fcport); in qla2x00_reg_remote_port()
3305 spin_lock_irqsave(fcport->vha->host->host_lock, flags); in qla2x00_reg_remote_port()
3307 spin_unlock_irqrestore(fcport->vha->host->host_lock, flags); in qla2x00_reg_remote_port()
3335 qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport) in qla2x00_update_fcport() argument
3337 fcport->vha = vha; in qla2x00_update_fcport()
3339 if (IS_QLAFX00(vha->hw)) { in qla2x00_update_fcport()
3347 qla2x00_iidma_fcport(vha, fcport); in qla2x00_update_fcport()
3348 qla24xx_update_fcport_fcp_prio(vha, fcport); in qla2x00_update_fcport()
3351 if (qla_ini_mode_enabled(vha)) in qla2x00_update_fcport()
3352 qla2x00_reg_remote_port(vha, fcport); in qla2x00_update_fcport()
3357 qlt_fc_port_added(vha, fcport); in qla2x00_update_fcport()
3373 qla2x00_configure_fabric(scsi_qla_host_t *vha) in qla2x00_configure_fabric() argument
3381 struct qla_hw_data *ha = vha->hw; in qla2x00_configure_fabric()
3390 rval = qla2x00_get_port_name(vha, loop_id, vha->fabric_node_name, 1); in qla2x00_configure_fabric()
3392 ql_dbg(ql_dbg_disc, vha, 0x201f, in qla2x00_configure_fabric()
3395 vha->device_flags &= ~SWITCH_FOUND; in qla2x00_configure_fabric()
3398 vha->device_flags |= SWITCH_FOUND; in qla2x00_configure_fabric()
3403 test_and_clear_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags)) in qla2x00_configure_fabric()
3404 qla2x00_fdmi_register(vha); in qla2x00_configure_fabric()
3411 rval = ha->isp_ops->fabric_login(vha, loop_id, 0xff, 0xff, in qla2x00_configure_fabric()
3414 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla2x00_configure_fabric()
3418 ql_dbg(ql_dbg_disc, vha, 0x2042, in qla2x00_configure_fabric()
3425 if (test_and_clear_bit(REGISTER_FC4_NEEDED, &vha->dpc_flags)) { in qla2x00_configure_fabric()
3426 if (qla2x00_rft_id(vha)) { in qla2x00_configure_fabric()
3428 ql_dbg(ql_dbg_disc, vha, 0x2045, in qla2x00_configure_fabric()
3431 if (qla2x00_rff_id(vha)) { in qla2x00_configure_fabric()
3433 ql_dbg(ql_dbg_disc, vha, 0x2049, in qla2x00_configure_fabric()
3436 if (qla2x00_rnn_id(vha)) { in qla2x00_configure_fabric()
3438 ql_dbg(ql_dbg_disc, vha, 0x204f, in qla2x00_configure_fabric()
3440 } else if (qla2x00_rsnn_nn(vha)) { in qla2x00_configure_fabric()
3442 ql_dbg(ql_dbg_disc, vha, 0x2053, in qla2x00_configure_fabric()
3450 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_configure_fabric()
3460 qlt_do_generation_tick(vha, &discovery_gen); in qla2x00_configure_fabric()
3462 rval = qla2x00_find_all_fabric_devs(vha, &new_fcports); in qla2x00_configure_fabric()
3470 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_configure_fabric()
3471 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) in qla2x00_configure_fabric()
3480 qla2x00_mark_device_lost(vha, fcport, in qla2x00_configure_fabric()
3486 ha->isp_ops->fabric_logout(vha, in qla2x00_configure_fabric()
3505 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf077, in qla2x00_configure_fabric()
3513 qlt_fc_port_deleted(vha, fcport, in qla2x00_configure_fabric()
3526 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_configure_fabric()
3527 if (atomic_read(&vha->loop_down_timer) || in qla2x00_configure_fabric()
3528 test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) in qla2x00_configure_fabric()
3546 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf078, in qla2x00_configure_fabric()
3567 qla2x00_fabric_dev_login(vha, fcport, &next_loopid); in qla2x00_configure_fabric()
3579 if (atomic_read(&vha->loop_down_timer) || in qla2x00_configure_fabric()
3580 test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) in qla2x00_configure_fabric()
3603 qla2x00_fabric_dev_login(vha, fcport, in qla2x00_configure_fabric()
3606 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf079, in qla2x00_configure_fabric()
3616 list_move_tail(&fcport->list, &vha->vp_fcports); in qla2x00_configure_fabric()
3627 ql_dbg(ql_dbg_disc, vha, 0x2068, in qla2x00_configure_fabric()
3648 qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha, in qla2x00_find_all_fabric_devs() argument
3660 struct qla_hw_data *ha = vha->hw; in qla2x00_find_all_fabric_devs()
3672 ql_dbg(ql_dbg_disc, vha, 0x2054, in qla2x00_find_all_fabric_devs()
3676 if (qla2x00_gid_pt(vha, swl) != QLA_SUCCESS) { in qla2x00_find_all_fabric_devs()
3678 } else if (qla2x00_gpn_id(vha, swl) != QLA_SUCCESS) { in qla2x00_find_all_fabric_devs()
3680 } else if (qla2x00_gnn_id(vha, swl) != QLA_SUCCESS) { in qla2x00_find_all_fabric_devs()
3683 qla2x00_gfpn_id(vha, swl) == QLA_SUCCESS) { in qla2x00_find_all_fabric_devs()
3684 qla2x00_gpsc(vha, swl); in qla2x00_find_all_fabric_devs()
3689 qla2x00_gff_id(vha, swl); in qla2x00_find_all_fabric_devs()
3694 new_fcport = qla2x00_alloc_fcport(vha, GFP_KERNEL); in qla2x00_find_all_fabric_devs()
3696 ql_log(ql_log_warn, vha, 0x205e, in qla2x00_find_all_fabric_devs()
3708 if (qla2x00_is_reserved_id(vha, loop_id)) in qla2x00_find_all_fabric_devs()
3712 (atomic_read(&vha->loop_down_timer) || in qla2x00_find_all_fabric_devs()
3713 LOOP_TRANSITION(vha))) { in qla2x00_find_all_fabric_devs()
3714 atomic_set(&vha->loop_down_timer, 0); in qla2x00_find_all_fabric_devs()
3715 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla2x00_find_all_fabric_devs()
3716 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qla2x00_find_all_fabric_devs()
3741 rval = qla2x00_ga_nxt(vha, new_fcport); in qla2x00_find_all_fabric_devs()
3743 ql_log(ql_log_warn, vha, 0x2064, in qla2x00_find_all_fabric_devs()
3761 ql_dbg(ql_dbg_disc, vha, 0x2065, in qla2x00_find_all_fabric_devs()
3774 if (qla2x00_is_a_vp_did(vha, new_fcport->d_id.b24)) in qla2x00_find_all_fabric_devs()
3779 (vha->d_id.b24 & 0xffff00)) && ha->current_topology == in qla2x00_find_all_fabric_devs()
3795 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_find_all_fabric_devs()
3836 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf080, in qla2x00_find_all_fabric_devs()
3858 ha->isp_ops->fabric_logout(vha, fcport->loop_id, in qla2x00_find_all_fabric_devs()
3875 new_fcport = qla2x00_alloc_fcport(vha, GFP_KERNEL); in qla2x00_find_all_fabric_devs()
3877 ql_log(ql_log_warn, vha, 0x2066, in qla2x00_find_all_fabric_devs()
3905 qla2x00_find_new_loop_id(scsi_qla_host_t *vha, fc_port_t *dev) in qla2x00_find_new_loop_id() argument
3908 struct qla_hw_data *ha = vha->hw; in qla2x00_find_new_loop_id()
3918 qla2x00_is_reserved_id(vha, dev->loop_id)) { in qla2x00_find_new_loop_id()
3927 ql_dbg(ql_dbg_disc, dev->vha, 0x2086, in qla2x00_find_new_loop_id()
3931 ql_log(ql_log_warn, dev->vha, 0x2087, in qla2x00_find_new_loop_id()
3955 qla2x00_fabric_dev_login(scsi_qla_host_t *vha, fc_port_t *fcport, in qla2x00_fabric_dev_login() argument
3960 struct qla_hw_data *ha = vha->hw; in qla2x00_fabric_dev_login()
3968 rval = qla2x00_post_async_login_work(vha, fcport, NULL); in qla2x00_fabric_dev_login()
3974 rval = qla2x00_fabric_login(vha, fcport, next_loopid); in qla2x00_fabric_dev_login()
3980 rval = qla2x00_get_port_database(vha, fcport, opts); in qla2x00_fabric_dev_login()
3982 ha->isp_ops->fabric_logout(vha, fcport->loop_id, in qla2x00_fabric_dev_login()
3985 qla2x00_mark_device_lost(vha, fcport, 1, 0); in qla2x00_fabric_dev_login()
3987 qla2x00_update_fcport(vha, fcport); in qla2x00_fabric_dev_login()
3991 qla2x00_mark_device_lost(vha, fcport, 1, 0); in qla2x00_fabric_dev_login()
4012 qla2x00_fabric_login(scsi_qla_host_t *vha, fc_port_t *fcport, in qla2x00_fabric_login() argument
4019 struct qla_hw_data *ha = vha->hw; in qla2x00_fabric_login()
4025 ql_dbg(ql_dbg_disc, vha, 0x2000, in qla2x00_fabric_login()
4032 rval = ha->isp_ops->fabric_login(vha, fcport->loop_id, in qla2x00_fabric_login()
4050 ql_dbg(ql_dbg_disc, vha, 0x2001, in qla2x00_fabric_login()
4098 rval = qla2x00_find_new_loop_id(vha, fcport); in qla2x00_fabric_login()
4110 ha->isp_ops->fabric_logout(vha, fcport->loop_id, in qla2x00_fabric_login()
4113 qla2x00_mark_device_lost(vha, fcport, 1, 0); in qla2x00_fabric_login()
4121 ql_dbg(ql_dbg_disc, vha, 0x2002, in qla2x00_fabric_login()
4128 ha->isp_ops->fabric_logout(vha, fcport->loop_id, in qla2x00_fabric_login()
4156 qla2x00_local_device_login(scsi_qla_host_t *vha, fc_port_t *fcport) in qla2x00_local_device_login() argument
4162 rval = qla2x00_login_local_device(vha, fcport, mb, BIT_0); in qla2x00_local_device_login()
4186 qla2x00_loop_resync(scsi_qla_host_t *vha) in qla2x00_loop_resync() argument
4193 if (vha->hw->flags.cpu_affinity_enabled) in qla2x00_loop_resync()
4194 req = vha->hw->req_q_map[0]; in qla2x00_loop_resync()
4196 req = vha->req; in qla2x00_loop_resync()
4199 clear_bit(ISP_ABORT_RETRY, &vha->dpc_flags); in qla2x00_loop_resync()
4200 if (vha->flags.online) { in qla2x00_loop_resync()
4201 if (!(rval = qla2x00_fw_ready(vha))) { in qla2x00_loop_resync()
4205 if (!IS_QLAFX00(vha->hw)) { in qla2x00_loop_resync()
4210 qla2x00_marker(vha, req, rsp, 0, 0, in qla2x00_loop_resync()
4212 vha->marker_needed = 0; in qla2x00_loop_resync()
4216 clear_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla2x00_loop_resync()
4218 if (IS_QLAFX00(vha->hw)) in qla2x00_loop_resync()
4219 qlafx00_configure_devices(vha); in qla2x00_loop_resync()
4221 qla2x00_configure_loop(vha); in qla2x00_loop_resync()
4224 } while (!atomic_read(&vha->loop_down_timer) && in qla2x00_loop_resync()
4225 !(test_bit(ISP_ABORT_NEEDED, &vha->dpc_flags)) in qla2x00_loop_resync()
4227 &vha->dpc_flags))); in qla2x00_loop_resync()
4231 if (test_bit(ISP_ABORT_NEEDED, &vha->dpc_flags)) in qla2x00_loop_resync()
4235 ql_dbg(ql_dbg_disc, vha, 0x206c, in qla2x00_loop_resync()
4276 struct scsi_qla_host *vha; in qla2x00_update_fcports() local
4282 list_for_each_entry(vha, &base_vha->hw->vp_list, list) { in qla2x00_update_fcports()
4283 atomic_inc(&vha->vref_count); in qla2x00_update_fcports()
4284 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_update_fcports()
4294 qlt_fc_port_deleted(vha, fcport, in qla2x00_update_fcports()
4300 atomic_dec(&vha->vref_count); in qla2x00_update_fcports()
4307 qla83xx_reset_ownership(scsi_qla_host_t *vha) in qla83xx_reset_ownership() argument
4309 struct qla_hw_data *ha = vha->hw; in qla83xx_reset_ownership()
4316 drv_presence = qla8044_rd_direct(vha, in qla83xx_reset_ownership()
4318 dev_part_info1 = qla8044_rd_direct(vha, in qla83xx_reset_ownership()
4320 dev_part_info2 = qla8044_rd_direct(vha, in qla83xx_reset_ownership()
4323 qla83xx_rd_reg(vha, QLA83XX_IDC_DRV_PRESENCE, &drv_presence); in qla83xx_reset_ownership()
4324 qla83xx_rd_reg(vha, QLA83XX_DEV_PARTINFO1, &dev_part_info1); in qla83xx_reset_ownership()
4325 qla83xx_rd_reg(vha, QLA83XX_DEV_PARTINFO2, &dev_part_info2); in qla83xx_reset_ownership()
4359 ql_dbg(ql_dbg_p3p, vha, 0xb07f, in qla83xx_reset_ownership()
4366 __qla83xx_set_drv_ack(scsi_qla_host_t *vha) in __qla83xx_set_drv_ack() argument
4369 struct qla_hw_data *ha = vha->hw; in __qla83xx_set_drv_ack()
4372 rval = qla83xx_rd_reg(vha, QLA83XX_IDC_DRIVER_ACK, &drv_ack); in __qla83xx_set_drv_ack()
4375 rval = qla83xx_wr_reg(vha, QLA83XX_IDC_DRIVER_ACK, drv_ack); in __qla83xx_set_drv_ack()
4382 __qla83xx_clear_drv_ack(scsi_qla_host_t *vha) in __qla83xx_clear_drv_ack() argument
4385 struct qla_hw_data *ha = vha->hw; in __qla83xx_clear_drv_ack()
4388 rval = qla83xx_rd_reg(vha, QLA83XX_IDC_DRIVER_ACK, &drv_ack); in __qla83xx_clear_drv_ack()
4391 rval = qla83xx_wr_reg(vha, QLA83XX_IDC_DRIVER_ACK, drv_ack); in __qla83xx_clear_drv_ack()
4422 qla83xx_idc_audit(scsi_qla_host_t *vha, int audit_type) in qla83xx_idc_audit() argument
4424 struct qla_hw_data *ha = vha->hw; in qla83xx_idc_audit()
4432 qla83xx_wr_reg(vha, QLA83XX_IDC_AUDIT, idc_audit_reg); in qla83xx_idc_audit()
4440 qla83xx_wr_reg(vha, QLA83XX_IDC_AUDIT, idc_audit_reg); in qla83xx_idc_audit()
4444 ql_log(ql_log_warn, vha, 0xb078, in qla83xx_idc_audit()
4452 qla83xx_initiating_reset(scsi_qla_host_t *vha) in qla83xx_initiating_reset() argument
4454 struct qla_hw_data *ha = vha->hw; in qla83xx_initiating_reset()
4457 __qla83xx_get_idc_control(vha, &idc_control); in qla83xx_initiating_reset()
4459 ql_log(ql_log_info, vha, 0xb080, in qla83xx_initiating_reset()
4466 qla83xx_rd_reg(vha, QLA83XX_IDC_DEV_STATE, &dev_state); in qla83xx_initiating_reset()
4468 qla83xx_wr_reg(vha, QLA83XX_IDC_DEV_STATE, in qla83xx_initiating_reset()
4470 ql_log(ql_log_info, vha, 0xb056, "HW State: NEED RESET.\n"); in qla83xx_initiating_reset()
4471 qla83xx_idc_audit(vha, IDC_AUDIT_TIMESTAMP); in qla83xx_initiating_reset()
4474 ql_log(ql_log_info, vha, 0xb057, "HW State: %s.\n", state); in qla83xx_initiating_reset()
4479 qla83xx_idc_unlock(vha, 0); in qla83xx_initiating_reset()
4481 qla83xx_idc_lock(vha, 0); in qla83xx_initiating_reset()
4482 qla83xx_rd_reg(vha, QLA83XX_IDC_DEV_STATE, &dev_state); in qla83xx_initiating_reset()
4487 __qla83xx_set_drv_ack(vha); in qla83xx_initiating_reset()
4493 __qla83xx_set_idc_control(scsi_qla_host_t *vha, uint32_t idc_control) in __qla83xx_set_idc_control() argument
4495 return qla83xx_wr_reg(vha, QLA83XX_IDC_CONTROL, idc_control); in __qla83xx_set_idc_control()
4499 __qla83xx_get_idc_control(scsi_qla_host_t *vha, uint32_t *idc_control) in __qla83xx_get_idc_control() argument
4501 return qla83xx_rd_reg(vha, QLA83XX_IDC_CONTROL, idc_control); in __qla83xx_get_idc_control()
4505 qla83xx_check_driver_presence(scsi_qla_host_t *vha) in qla83xx_check_driver_presence() argument
4508 struct qla_hw_data *ha = vha->hw; in qla83xx_check_driver_presence()
4510 qla83xx_rd_reg(vha, QLA83XX_IDC_DRV_PRESENCE, &drv_presence); in qla83xx_check_driver_presence()
4518 qla83xx_nic_core_reset(scsi_qla_host_t *vha) in qla83xx_nic_core_reset() argument
4521 struct qla_hw_data *ha = vha->hw; in qla83xx_nic_core_reset()
4523 ql_dbg(ql_dbg_p3p, vha, 0xb058, in qla83xx_nic_core_reset()
4526 if (vha->device_flags & DFLG_DEV_FAILED) { in qla83xx_nic_core_reset()
4527 ql_log(ql_log_warn, vha, 0xb059, in qla83xx_nic_core_reset()
4532 qla83xx_idc_lock(vha, 0); in qla83xx_nic_core_reset()
4534 if (qla83xx_check_driver_presence(vha) != QLA_SUCCESS) { in qla83xx_nic_core_reset()
4535 ql_log(ql_log_warn, vha, 0xb05a, in qla83xx_nic_core_reset()
4542 qla83xx_reset_ownership(vha); in qla83xx_nic_core_reset()
4544 rval = qla83xx_initiating_reset(vha); in qla83xx_nic_core_reset()
4551 rval = qla83xx_idc_state_handler(vha); in qla83xx_nic_core_reset()
4555 __qla83xx_clear_drv_ack(vha); in qla83xx_nic_core_reset()
4559 qla83xx_idc_unlock(vha, 0); in qla83xx_nic_core_reset()
4561 ql_dbg(ql_dbg_p3p, vha, 0xb05b, "Exiting %s.\n", __func__); in qla83xx_nic_core_reset()
4567 qla2xxx_mctp_dump(scsi_qla_host_t *vha) in qla2xxx_mctp_dump() argument
4569 struct qla_hw_data *ha = vha->hw; in qla2xxx_mctp_dump()
4574 ql_log(ql_log_info, vha, 0x506d, in qla2xxx_mctp_dump()
4584 ql_log(ql_log_warn, vha, 0x506e, in qla2xxx_mctp_dump()
4591 rval = qla2x00_dump_mctp_data(vha, ha->mctp_dump_dma, in qla2xxx_mctp_dump()
4594 ql_log(ql_log_warn, vha, 0x506f, in qla2xxx_mctp_dump()
4597 ql_log(ql_log_info, vha, 0x5070, in qla2xxx_mctp_dump()
4599 vha->host_no, ha->mctp_dump); in qla2xxx_mctp_dump()
4605 rval = qla83xx_restart_nic_firmware(vha); in qla2xxx_mctp_dump()
4608 ql_log(ql_log_warn, vha, 0x5071, in qla2xxx_mctp_dump()
4611 ql_dbg(ql_dbg_p3p, vha, 0xb084, in qla2xxx_mctp_dump()
4629 qla2x00_quiesce_io(scsi_qla_host_t *vha) in qla2x00_quiesce_io() argument
4631 struct qla_hw_data *ha = vha->hw; in qla2x00_quiesce_io()
4634 ql_dbg(ql_dbg_dpc, vha, 0x401d, in qla2x00_quiesce_io()
4638 if (atomic_read(&vha->loop_state) != LOOP_DOWN) { in qla2x00_quiesce_io()
4639 atomic_set(&vha->loop_state, LOOP_DOWN); in qla2x00_quiesce_io()
4640 qla2x00_mark_all_devices_lost(vha, 0); in qla2x00_quiesce_io()
4644 if (!atomic_read(&vha->loop_down_timer)) in qla2x00_quiesce_io()
4645 atomic_set(&vha->loop_down_timer, in qla2x00_quiesce_io()
4649 qla2x00_eh_wait_for_pending_commands(vha, 0, 0, WAIT_HOST); in qla2x00_quiesce_io()
4653 qla2x00_abort_isp_cleanup(scsi_qla_host_t *vha) in qla2x00_abort_isp_cleanup() argument
4655 struct qla_hw_data *ha = vha->hw; in qla2x00_abort_isp_cleanup()
4664 vha->flags.online = 0; in qla2x00_abort_isp_cleanup()
4666 clear_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); in qla2x00_abort_isp_cleanup()
4667 vha->qla_stats.total_isp_aborts++; in qla2x00_abort_isp_cleanup()
4669 ql_log(ql_log_info, vha, 0x00af, in qla2x00_abort_isp_cleanup()
4677 ha->isp_ops->reset_chip(vha); in qla2x00_abort_isp_cleanup()
4679 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); in qla2x00_abort_isp_cleanup()
4680 if (atomic_read(&vha->loop_state) != LOOP_DOWN) { in qla2x00_abort_isp_cleanup()
4681 atomic_set(&vha->loop_state, LOOP_DOWN); in qla2x00_abort_isp_cleanup()
4682 qla2x00_mark_all_devices_lost(vha, 0); in qla2x00_abort_isp_cleanup()
4696 if (!atomic_read(&vha->loop_down_timer)) in qla2x00_abort_isp_cleanup()
4697 atomic_set(&vha->loop_down_timer, in qla2x00_abort_isp_cleanup()
4702 list_for_each_entry(fcport, &vha->vp_fcports, list) in qla2x00_abort_isp_cleanup()
4720 qla82xx_chip_reset_cleanup(vha); in qla2x00_abort_isp_cleanup()
4721 ql_log(ql_log_info, vha, 0x00b4, in qla2x00_abort_isp_cleanup()
4727 vha->flags.online = 0; in qla2x00_abort_isp_cleanup()
4731 qla2x00_abort_all_cmds(vha, DID_RESET << 16); in qla2x00_abort_isp_cleanup()
4750 qla2x00_abort_isp(scsi_qla_host_t *vha) in qla2x00_abort_isp() argument
4754 struct qla_hw_data *ha = vha->hw; in qla2x00_abort_isp()
4759 if (vha->flags.online) { in qla2x00_abort_isp()
4760 qla2x00_abort_isp_cleanup(vha); in qla2x00_abort_isp()
4763 ql_dbg(ql_dbg_p3p, vha, 0xb05c, in qla2x00_abort_isp()
4765 if (qla83xx_clear_drv_presence(vha) != QLA_SUCCESS) in qla2x00_abort_isp()
4766 ql_dbg(ql_dbg_p3p, vha, 0xb073, in qla2x00_abort_isp()
4772 clear_bit(ISP_ABORT_RETRY, &vha->dpc_flags); in qla2x00_abort_isp()
4777 ha->isp_ops->get_flash_version(vha, req->ring); in qla2x00_abort_isp()
4779 ha->isp_ops->nvram_config(vha); in qla2x00_abort_isp()
4781 if (!qla2x00_restart_isp(vha)) { in qla2x00_abort_isp()
4782 clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags); in qla2x00_abort_isp()
4784 if (!atomic_read(&vha->loop_down_timer)) { in qla2x00_abort_isp()
4789 vha->marker_needed = 1; in qla2x00_abort_isp()
4792 vha->flags.online = 1; in qla2x00_abort_isp()
4797 clear_bit(ISP_ABORT_RETRY, &vha->dpc_flags); in qla2x00_abort_isp()
4800 qla2x00_get_fw_version(vha); in qla2x00_abort_isp()
4805 rval = qla2x00_enable_fce_trace(vha, in qla2x00_abort_isp()
4809 ql_log(ql_log_warn, vha, 0x8033, in qla2x00_abort_isp()
4818 rval = qla2x00_enable_eft_trace(vha, in qla2x00_abort_isp()
4821 ql_log(ql_log_warn, vha, 0x8034, in qla2x00_abort_isp()
4827 vha->flags.online = 1; in qla2x00_abort_isp()
4828 if (test_bit(ISP_ABORT_RETRY, &vha->dpc_flags)) { in qla2x00_abort_isp()
4830 ql_log(ql_log_fatal, vha, 0x8035, in qla2x00_abort_isp()
4837 ha->isp_ops->reset_adapter(vha); in qla2x00_abort_isp()
4838 vha->flags.online = 0; in qla2x00_abort_isp()
4840 &vha->dpc_flags); in qla2x00_abort_isp()
4844 ql_dbg(ql_dbg_taskm, vha, 0x8020, in qla2x00_abort_isp()
4851 ql_dbg(ql_dbg_taskm, vha, 0x8021, in qla2x00_abort_isp()
4854 set_bit(ISP_ABORT_RETRY, &vha->dpc_flags); in qla2x00_abort_isp()
4862 ql_dbg(ql_dbg_taskm, vha, 0x8022, "%s succeeded.\n", __func__); in qla2x00_abort_isp()
4879 ql_dbg(ql_dbg_p3p, vha, 0xb05d, in qla2x00_abort_isp()
4881 if (qla83xx_set_drv_presence(vha) != QLA_SUCCESS) in qla2x00_abort_isp()
4882 ql_dbg(ql_dbg_p3p, vha, 0xb074, in qla2x00_abort_isp()
4886 ql_log(ql_log_warn, vha, 0x8023, "%s **** FAILED ****.\n", in qla2x00_abort_isp()
4904 qla2x00_restart_isp(scsi_qla_host_t *vha) in qla2x00_restart_isp() argument
4907 struct qla_hw_data *ha = vha->hw; in qla2x00_restart_isp()
4913 if (qla2x00_isp_firmware(vha)) { in qla2x00_restart_isp()
4914 vha->flags.online = 0; in qla2x00_restart_isp()
4915 status = ha->isp_ops->chip_diag(vha); in qla2x00_restart_isp()
4917 status = qla2x00_setup_chip(vha); in qla2x00_restart_isp()
4920 if (!status && !(status = qla2x00_init_rings(vha))) { in qla2x00_restart_isp()
4921 clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags); in qla2x00_restart_isp()
4927 status = qla2x00_fw_ready(vha); in qla2x00_restart_isp()
4930 qla2x00_marker(vha, req, rsp, 0, 0, MK_SYNC_ALL); in qla2x00_restart_isp()
4932 vha->flags.online = 1; in qla2x00_restart_isp()
4939 if (qla_tgt_mode_enabled(vha)) in qla2x00_restart_isp()
4940 qlt_24xx_process_atio_queue(vha); in qla2x00_restart_isp()
4943 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla2x00_restart_isp()
4947 if ((vha->device_flags & DFLG_NO_CABLE)) in qla2x00_restart_isp()
5004 qla2x00_reset_adapter(scsi_qla_host_t *vha) in qla2x00_reset_adapter() argument
5007 struct qla_hw_data *ha = vha->hw; in qla2x00_reset_adapter()
5010 vha->flags.online = 0; in qla2x00_reset_adapter()
5022 qla24xx_reset_adapter(scsi_qla_host_t *vha) in qla24xx_reset_adapter() argument
5025 struct qla_hw_data *ha = vha->hw; in qla24xx_reset_adapter()
5031 vha->flags.online = 0; in qla24xx_reset_adapter()
5048 static void qla24xx_nvram_wwn_from_ofw(scsi_qla_host_t *vha, in qla24xx_nvram_wwn_from_ofw() argument
5052 struct qla_hw_data *ha = vha->hw; in qla24xx_nvram_wwn_from_ofw()
5069 qla24xx_nvram_config(scsi_qla_host_t *vha) in qla24xx_nvram_config() argument
5078 struct qla_hw_data *ha = vha->hw; in qla24xx_nvram_config()
5098 ha->isp_ops->read_nvram(vha, (uint8_t *)ha->vpd, in qla24xx_nvram_config()
5103 ha->isp_ops->read_nvram(vha, (uint8_t *)dptr, ha->nvram_base, in qla24xx_nvram_config()
5108 ql_dbg(ql_dbg_init + ql_dbg_buffer, vha, 0x006a, in qla24xx_nvram_config()
5110 ql_dump_buffer(ql_dbg_init + ql_dbg_buffer, vha, 0x010d, in qla24xx_nvram_config()
5118 ql_log(ql_log_warn, vha, 0x006b, in qla24xx_nvram_config()
5121 ql_log(ql_log_warn, vha, 0x006c, in qla24xx_nvram_config()
5151 qla24xx_nvram_wwn_from_ofw(vha, nv); in qla24xx_nvram_config()
5170 if (!qla_ini_mode_enabled(vha)) { in qla24xx_nvram_config()
5177 qlt_24xx_config_nvram_stage1(vha, nv); in qla24xx_nvram_config()
5203 qla2x00_set_model_info(vha, nv->model_name, sizeof(nv->model_name), in qla24xx_nvram_config()
5206 qlt_24xx_config_nvram_stage2(vha, icb); in qla24xx_nvram_config()
5244 memcpy(vha->node_name, icb->node_name, WWN_SIZE); in qla24xx_nvram_config()
5245 memcpy(vha->port_name, icb->port_name, WWN_SIZE); in qla24xx_nvram_config()
5300 if (!vha->flags.init_done) { in qla24xx_nvram_config()
5308 vha->flags.process_response_queue = 0; in qla24xx_nvram_config()
5312 ql_log(ql_log_info, vha, 0x006f, in qla24xx_nvram_config()
5319 vha->flags.process_response_queue = 1; in qla24xx_nvram_config()
5323 ql_log(ql_log_warn, vha, 0x0070, in qla24xx_nvram_config()
5330 qla24xx_load_risc_flash(scsi_qla_host_t *vha, uint32_t *srisc_addr, in qla24xx_load_risc_flash() argument
5339 struct qla_hw_data *ha = vha->hw; in qla24xx_load_risc_flash()
5342 ql_dbg(ql_dbg_init, vha, 0x008b, in qla24xx_load_risc_flash()
5352 qla24xx_read_flash_data(vha, dcode, faddr + 4, 4); in qla24xx_load_risc_flash()
5359 ql_log(ql_log_fatal, vha, 0x008c, in qla24xx_load_risc_flash()
5362 ql_log(ql_log_fatal, vha, 0x008d, in qla24xx_load_risc_flash()
5371 qla24xx_read_flash_data(vha, dcode, faddr, 4); in qla24xx_load_risc_flash()
5383 ql_dbg(ql_dbg_init, vha, 0x008e, in qla24xx_load_risc_flash()
5388 qla24xx_read_flash_data(vha, dcode, faddr, dlen); in qla24xx_load_risc_flash()
5392 rval = qla2x00_load_ram(vha, req->dma, risc_addr, in qla24xx_load_risc_flash()
5395 ql_log(ql_log_fatal, vha, 0x008f, in qla24xx_load_risc_flash()
5419 ql_dbg(ql_dbg_init, vha, 0x0161, in qla24xx_load_risc_flash()
5421 qla24xx_read_flash_data(vha, dcode, faddr, 7); in qla24xx_load_risc_flash()
5423 ql_dbg(ql_dbg_init, vha, 0x0162, in qla24xx_load_risc_flash()
5429 ql_dbg(ql_dbg_init, vha, 0x0163, in qla24xx_load_risc_flash()
5433 ql_log(ql_log_warn, vha, 0x0164, in qla24xx_load_risc_flash()
5441 qla24xx_read_flash_data(vha, dcode, faddr, risc_size); in qla24xx_load_risc_flash()
5446 ql_log(ql_log_warn, vha, 0x0165, in qla24xx_load_risc_flash()
5452 ql_dbg(ql_dbg_init, vha, 0x0166, in qla24xx_load_risc_flash()
5455 ql_log(ql_log_warn, vha, 0x0167, in qla24xx_load_risc_flash()
5464 ql_log(ql_log_warn, vha, 0x0168, "Using default fwdump template\n"); in qla24xx_load_risc_flash()
5471 ql_dbg(ql_dbg_init, vha, 0x0169, in qla24xx_load_risc_flash()
5475 ql_log(ql_log_warn, vha, 0x016a, in qla24xx_load_risc_flash()
5487 ql_log(ql_log_warn, vha, 0x016b, in qla24xx_load_risc_flash()
5493 ql_dbg(ql_dbg_init, vha, 0x016c, in qla24xx_load_risc_flash()
5499 ql_log(ql_log_warn, vha, 0x016d, "Failed default fwdump template\n"); in qla24xx_load_risc_flash()
5510 qla2x00_load_risc(scsi_qla_host_t *vha, uint32_t *srisc_addr) in qla2x00_load_risc() argument
5517 struct qla_hw_data *ha = vha->hw; in qla2x00_load_risc()
5521 blob = qla2x00_request_firmware(vha); in qla2x00_load_risc()
5523 ql_log(ql_log_info, vha, 0x0083, in qla2x00_load_risc()
5525 ql_log(ql_log_info, vha, 0x0084, in qla2x00_load_risc()
5539 ql_log(ql_log_fatal, vha, 0x0085, in qla2x00_load_risc()
5549 ql_log(ql_log_fatal, vha, 0x0086, in qla2x00_load_risc()
5551 ql_log(ql_log_fatal, vha, 0x0087, in qla2x00_load_risc()
5566 ql_log(ql_log_fatal, vha, 0x0088, in qla2x00_load_risc()
5577 ql_dbg(ql_dbg_init, vha, 0x0089, in qla2x00_load_risc()
5584 rval = qla2x00_load_ram(vha, req->dma, risc_addr, in qla2x00_load_risc()
5587 ql_log(ql_log_fatal, vha, 0x008a, in qla2x00_load_risc()
5609 qla24xx_load_risc_blob(scsi_qla_host_t *vha, uint32_t *srisc_addr) in qla24xx_load_risc_blob() argument
5620 struct qla_hw_data *ha = vha->hw; in qla24xx_load_risc_blob()
5624 blob = qla2x00_request_firmware(vha); in qla24xx_load_risc_blob()
5626 ql_log(ql_log_warn, vha, 0x0090, in qla24xx_load_risc_blob()
5628 ql_log(ql_log_warn, vha, 0x0091, in qla24xx_load_risc_blob()
5635 ql_dbg(ql_dbg_init, vha, 0x0092, in qla24xx_load_risc_blob()
5648 ql_log(ql_log_fatal, vha, 0x0093, in qla24xx_load_risc_blob()
5659 ql_log(ql_log_fatal, vha, 0x0094, in qla24xx_load_risc_blob()
5662 ql_log(ql_log_fatal, vha, 0x0095, in qla24xx_load_risc_blob()
5676 ql_log(ql_log_fatal, vha, 0x0096, in qla24xx_load_risc_blob()
5688 ql_dbg(ql_dbg_init, vha, 0x0097, in qla24xx_load_risc_blob()
5695 rval = qla2x00_load_ram(vha, req->dma, risc_addr, in qla24xx_load_risc_blob()
5698 ql_log(ql_log_fatal, vha, 0x0098, in qla24xx_load_risc_blob()
5722 ql_dbg(ql_dbg_init, vha, 0x171, in qla24xx_load_risc_blob()
5726 ql_dbg(ql_dbg_init, vha, 0x172, in qla24xx_load_risc_blob()
5732 ql_dbg(ql_dbg_init, vha, 0x0173, in qla24xx_load_risc_blob()
5736 ql_log(ql_log_warn, vha, 0x0174, in qla24xx_load_risc_blob()
5748 ql_log(ql_log_warn, vha, 0x0175, in qla24xx_load_risc_blob()
5754 ql_dbg(ql_dbg_init, vha, 0x0176, in qla24xx_load_risc_blob()
5757 ql_log(ql_log_warn, vha, 0x0177, in qla24xx_load_risc_blob()
5766 ql_log(ql_log_warn, vha, 0x0178, "Using default fwdump template\n"); in qla24xx_load_risc_blob()
5773 ql_dbg(ql_dbg_init, vha, 0x0179, in qla24xx_load_risc_blob()
5777 ql_log(ql_log_warn, vha, 0x017a, in qla24xx_load_risc_blob()
5789 ql_log(ql_log_warn, vha, 0x017b, in qla24xx_load_risc_blob()
5795 ql_dbg(ql_dbg_init, vha, 0x017c, in qla24xx_load_risc_blob()
5801 ql_log(ql_log_warn, vha, 0x017d, "Failed default fwdump template\n"); in qla24xx_load_risc_blob()
5810 qla24xx_load_risc(scsi_qla_host_t *vha, uint32_t *srisc_addr) in qla24xx_load_risc() argument
5815 return qla81xx_load_risc(vha, srisc_addr); in qla24xx_load_risc()
5822 rval = qla24xx_load_risc_blob(vha, srisc_addr); in qla24xx_load_risc()
5826 return qla24xx_load_risc_flash(vha, srisc_addr, in qla24xx_load_risc()
5827 vha->hw->flt_region_fw); in qla24xx_load_risc()
5831 qla81xx_load_risc(scsi_qla_host_t *vha, uint32_t *srisc_addr) in qla81xx_load_risc() argument
5834 struct qla_hw_data *ha = vha->hw; in qla81xx_load_risc()
5845 rval = qla24xx_load_risc_flash(vha, srisc_addr, ha->flt_region_fw); in qla81xx_load_risc()
5850 rval = qla24xx_load_risc_blob(vha, srisc_addr); in qla81xx_load_risc()
5854 ql_log(ql_log_info, vha, 0x0099, in qla81xx_load_risc()
5856 rval = qla24xx_load_risc_flash(vha, srisc_addr, ha->flt_region_gold_fw); in qla81xx_load_risc()
5860 ql_log(ql_log_info, vha, 0x009a, "Update operational firmware.\n"); in qla81xx_load_risc()
5866 qla2x00_try_to_stop_firmware(scsi_qla_host_t *vha) in qla2x00_try_to_stop_firmware() argument
5869 struct qla_hw_data *ha = vha->hw; in qla2x00_try_to_stop_firmware()
5878 ret = qla2x00_stop_firmware(vha); in qla2x00_try_to_stop_firmware()
5881 ha->isp_ops->reset_chip(vha); in qla2x00_try_to_stop_firmware()
5882 if (ha->isp_ops->chip_diag(vha) != QLA_SUCCESS) in qla2x00_try_to_stop_firmware()
5884 if (qla2x00_setup_chip(vha) != QLA_SUCCESS) in qla2x00_try_to_stop_firmware()
5886 ql_log(ql_log_info, vha, 0x8015, in qla2x00_try_to_stop_firmware()
5888 ret = qla2x00_stop_firmware(vha); in qla2x00_try_to_stop_firmware()
5893 qla24xx_configure_vhba(scsi_qla_host_t *vha) in qla24xx_configure_vhba() argument
5898 struct qla_hw_data *ha = vha->hw; in qla24xx_configure_vhba()
5903 if (!vha->vp_idx) in qla24xx_configure_vhba()
5910 req = vha->req; in qla24xx_configure_vhba()
5914 clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags); in qla24xx_configure_vhba()
5915 qla2x00_marker(vha, req, rsp, 0, 0, MK_SYNC_ALL); in qla24xx_configure_vhba()
5918 vha->flags.management_server_logged_in = 0; in qla24xx_configure_vhba()
5921 rval2 = ha->isp_ops->fabric_login(vha, NPH_SNS, 0xff, 0xff, 0xfc, mb, in qla24xx_configure_vhba()
5925 ql_dbg(ql_dbg_init, vha, 0x0120, in qla24xx_configure_vhba()
5929 ql_dbg(ql_dbg_init, vha, 0x0103, in qla24xx_configure_vhba()
5936 atomic_set(&vha->loop_down_timer, 0); in qla24xx_configure_vhba()
5937 atomic_set(&vha->loop_state, LOOP_UP); in qla24xx_configure_vhba()
5938 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla24xx_configure_vhba()
5939 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qla24xx_configure_vhba()
5951 qla84xx_get_chip(struct scsi_qla_host *vha) in qla84xx_get_chip() argument
5954 struct qla_hw_data *ha = vha->hw; in qla84xx_get_chip()
5994 qla84xx_put_chip(struct scsi_qla_host *vha) in qla84xx_put_chip() argument
5996 struct qla_hw_data *ha = vha->hw; in qla84xx_put_chip()
6002 qla84xx_init_chip(scsi_qla_host_t *vha) in qla84xx_init_chip() argument
6006 struct qla_hw_data *ha = vha->hw; in qla84xx_init_chip()
6010 rval = qla84xx_verify_chip(vha, status); in qla84xx_init_chip()
6021 qla81xx_nvram_config(scsi_qla_host_t *vha) in qla81xx_nvram_config() argument
6030 struct qla_hw_data *ha = vha->hw; in qla81xx_nvram_config()
6044 ha->isp_ops->read_optrom(vha, ha->vpd, ha->flt_region_vpd << 2, in qla81xx_nvram_config()
6048 ha->isp_ops->read_optrom(vha, ha->nvram, ha->flt_region_nvram << 2, in qla81xx_nvram_config()
6054 ql_dbg(ql_dbg_init + ql_dbg_buffer, vha, 0x0111, in qla81xx_nvram_config()
6056 ql_dump_buffer(ql_dbg_init + ql_dbg_buffer, vha, 0x0112, in qla81xx_nvram_config()
6064 ql_log(ql_log_info, vha, 0x0073, in qla81xx_nvram_config()
6068 ql_log(ql_log_info, vha, 0x0074, in qla81xx_nvram_config()
6124 qlt_81xx_config_nvram_stage1(vha, nv); in qla81xx_nvram_config()
6163 qla2x00_set_model_info(vha, nv->model_name, sizeof(nv->model_name), in qla81xx_nvram_config()
6166 qlt_81xx_config_nvram_stage2(vha, icb); in qla81xx_nvram_config()
6201 memcpy(vha->node_name, icb->node_name, WWN_SIZE); in qla81xx_nvram_config()
6202 memcpy(vha->port_name, icb->port_name, WWN_SIZE); in qla81xx_nvram_config()
6257 if (!vha->hw->flags.msix_enabled && (IS_QLA83XX(ha) || IS_QLA27XX(ha))) in qla81xx_nvram_config()
6261 if (!vha->flags.init_done) { in qla81xx_nvram_config()
6269 vha->flags.process_response_queue = 0; in qla81xx_nvram_config()
6273 ql_log(ql_log_info, vha, 0x0075, in qla81xx_nvram_config()
6281 vha->flags.process_response_queue = 1; in qla81xx_nvram_config()
6285 ql_log(ql_log_warn, vha, 0x0076, in qla81xx_nvram_config()
6292 qla82xx_restart_isp(scsi_qla_host_t *vha) in qla82xx_restart_isp() argument
6295 struct qla_hw_data *ha = vha->hw; in qla82xx_restart_isp()
6301 status = qla2x00_init_rings(vha); in qla82xx_restart_isp()
6303 clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags); in qla82xx_restart_isp()
6306 status = qla2x00_fw_ready(vha); in qla82xx_restart_isp()
6309 qla2x00_marker(vha, req, rsp, 0, 0, MK_SYNC_ALL); in qla82xx_restart_isp()
6310 vha->flags.online = 1; in qla82xx_restart_isp()
6311 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla82xx_restart_isp()
6315 if ((vha->device_flags & DFLG_NO_CABLE)) in qla82xx_restart_isp()
6320 clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags); in qla82xx_restart_isp()
6322 if (!atomic_read(&vha->loop_down_timer)) { in qla82xx_restart_isp()
6327 vha->marker_needed = 1; in qla82xx_restart_isp()
6333 clear_bit(ISP_ABORT_RETRY, &vha->dpc_flags); in qla82xx_restart_isp()
6336 status = qla82xx_check_md_needed(vha); in qla82xx_restart_isp()
6342 rval = qla2x00_enable_fce_trace(vha, in qla82xx_restart_isp()
6346 ql_log(ql_log_warn, vha, 0x8001, in qla82xx_restart_isp()
6355 rval = qla2x00_enable_eft_trace(vha, in qla82xx_restart_isp()
6358 ql_log(ql_log_warn, vha, 0x8010, in qla82xx_restart_isp()
6366 ql_dbg(ql_dbg_taskm, vha, 0x8011, in qla82xx_restart_isp()
6384 ql_log(ql_log_warn, vha, 0x8016, in qla82xx_restart_isp()
6392 qla81xx_update_fw_options(scsi_qla_host_t *vha) in qla81xx_update_fw_options() argument
6394 struct qla_hw_data *ha = vha->hw; in qla81xx_update_fw_options()
6402 qla2x00_set_fw_options(vha, ha->fw_options); in qla81xx_update_fw_options()
6424 qla24xx_get_fcp_prio(scsi_qla_host_t *vha, fc_port_t *fcport) in qla24xx_get_fcp_prio() argument
6432 struct qla_hw_data *ha = vha->hw; in qla24xx_get_fcp_prio()
6452 pid2 = vha->d_id.b24 & INVALID_PORT_ID; in qla24xx_get_fcp_prio()
6471 wwn1 = wwn_to_u64(vha->port_name); in qla24xx_get_fcp_prio()
6517 qla24xx_update_fcport_fcp_prio(scsi_qla_host_t *vha, fc_port_t *fcport) in qla24xx_update_fcport_fcp_prio() argument
6527 priority = qla24xx_get_fcp_prio(vha, fcport); in qla24xx_update_fcport_fcp_prio()
6531 if (IS_P3P_TYPE(vha->hw)) { in qla24xx_update_fcport_fcp_prio()
6536 ret = qla24xx_set_fcp_prio(vha, fcport->loop_id, priority, mb); in qla24xx_update_fcport_fcp_prio()
6539 ql_dbg(ql_dbg_user, vha, 0x709e, in qla24xx_update_fcport_fcp_prio()
6546 ql_dbg(ql_dbg_user, vha, 0x704f, in qla24xx_update_fcport_fcp_prio()
6568 qla24xx_update_all_fcp_prio(scsi_qla_host_t *vha) in qla24xx_update_all_fcp_prio() argument
6575 list_for_each_entry(fcport, &vha->vp_fcports, list) in qla24xx_update_all_fcp_prio()
6576 ret = qla24xx_update_fcport_fcp_prio(vha, fcport); in qla24xx_update_all_fcp_prio()