Lines Matching refs:ha
20 qla8044_rd_reg(struct qla_hw_data *ha, ulong addr) in qla8044_rd_reg() argument
22 return readl((void __iomem *) (ha->nx_pcibase + addr)); in qla8044_rd_reg()
26 qla8044_wr_reg(struct qla_hw_data *ha, ulong addr, uint32_t val) in qla8044_wr_reg() argument
28 writel(val, (void __iomem *)((ha)->nx_pcibase + addr)); in qla8044_wr_reg()
35 struct qla_hw_data *ha = vha->hw; in qla8044_rd_direct() local
38 return qla8044_rd_reg(ha, qla8044_reg_tbl[crb_reg]); in qla8044_rd_direct()
48 struct qla_hw_data *ha = vha->hw; in qla8044_wr_direct() local
51 qla8044_wr_reg(ha, qla8044_reg_tbl[crb_reg], value); in qla8044_wr_direct()
59 struct qla_hw_data *ha = vha->hw; in qla8044_set_win_base() local
61 qla8044_wr_reg(ha, QLA8044_CRB_WIN_FUNC(ha->portnum), addr); in qla8044_set_win_base()
62 val = qla8044_rd_reg(ha, QLA8044_CRB_WIN_FUNC(ha->portnum)); in qla8044_set_win_base()
78 struct qla_hw_data *ha = vha->hw; in qla8044_rd_reg_indirect() local
82 *data = qla8044_rd_reg(ha, QLA8044_WILDCARD); in qla8044_rd_reg_indirect()
93 struct qla_hw_data *ha = vha->hw; in qla8044_wr_reg_indirect() local
97 qla8044_wr_reg(ha, QLA8044_WILDCARD, data); in qla8044_wr_reg_indirect()
245 struct qla_hw_data *ha = vha->hw; in qla8044_set_qsnt_ready() local
248 qsnt_state |= (1 << ha->portnum); in qla8044_set_qsnt_ready()
258 struct qla_hw_data *ha = vha->hw; in qla8044_clear_qsnt_ready() local
261 qsnt_state &= ~(1 << ha->portnum); in qla8044_clear_qsnt_ready()
297 struct qla_hw_data *ha = vha->hw; in qla8044_lock_recovery() local
299 lockid = qla8044_rd_reg(ha, QLA8044_DRV_LOCKRECOVERY); in qla8044_lock_recovery()
306 qla8044_wr_reg(ha, QLA8044_DRV_LOCKRECOVERY, in qla8044_lock_recovery()
307 (ha->portnum << in qla8044_lock_recovery()
312 lockid = qla8044_rd_reg(ha, QLA8044_DRV_LOCKRECOVERY); in qla8044_lock_recovery()
313 if ((lockid & IDC_LOCK_RECOVERY_OWNER_MASK) != (ha->portnum << in qla8044_lock_recovery()
318 , __func__, ha->portnum); in qla8044_lock_recovery()
321 qla8044_wr_reg(ha, QLA8044_DRV_LOCKRECOVERY, in qla8044_lock_recovery()
322 (ha->portnum << IDC_LOCK_RECOVERY_STATE_SHIFT_BITS) | in qla8044_lock_recovery()
326 qla8044_wr_reg(ha, QLA8044_DRV_LOCK_ID, 0xFF); in qla8044_lock_recovery()
327 qla8044_rd_reg(ha, QLA8044_DRV_UNLOCK); in qla8044_lock_recovery()
330 qla8044_wr_reg(ha, QLA8044_DRV_LOCKRECOVERY, 0); in qla8044_lock_recovery()
333 lock = qla8044_rd_reg(ha, QLA8044_DRV_LOCK); in qla8044_lock_recovery()
335 lockid = qla8044_rd_reg(ha, QLA8044_DRV_LOCK_ID); in qla8044_lock_recovery()
336 lockid = ((lockid + (1 << 8)) & ~0xFF) | ha->portnum; in qla8044_lock_recovery()
337 qla8044_wr_reg(ha, QLA8044_DRV_LOCK_ID, lockid); in qla8044_lock_recovery()
344 qla8044_idc_lock(struct qla_hw_data *ha) in qla8044_idc_lock() argument
348 scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev); in qla8044_idc_lock()
352 status = qla8044_rd_reg(ha, QLA8044_DRV_LOCK); in qla8044_idc_lock()
357 lock_id = qla8044_rd_reg(ha, QLA8044_DRV_LOCK_ID); in qla8044_idc_lock()
358 lock_id = ((lock_id + (1 << 8)) & ~0xFF) | ha->portnum; in qla8044_idc_lock()
359 qla8044_wr_reg(ha, QLA8044_DRV_LOCK_ID, lock_id); in qla8044_idc_lock()
364 first_owner = qla8044_rd_reg(ha, QLA8044_DRV_LOCK_ID); in qla8044_idc_lock()
368 tmo_owner = qla8044_rd_reg(ha, QLA8044_DRV_LOCK_ID); in qla8044_idc_lock()
374 __func__, ha->portnum, func_num, lock_cnt, in qla8044_idc_lock()
383 __func__, ha->portnum); in qla8044_idc_lock()
394 ha->portnum); in qla8044_idc_lock()
403 ha->portnum); in qla8044_idc_lock()
413 qla8044_idc_unlock(struct qla_hw_data *ha) in qla8044_idc_unlock() argument
416 scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev); in qla8044_idc_unlock()
418 id = qla8044_rd_reg(ha, QLA8044_DRV_LOCK_ID); in qla8044_idc_unlock()
420 if ((id & 0xFF) != ha->portnum) { in qla8044_idc_unlock()
423 __func__, ha->portnum, (id & 0xFF)); in qla8044_idc_unlock()
428 qla8044_wr_reg(ha, QLA8044_DRV_LOCK_ID, (id | 0xFF)); in qla8044_idc_unlock()
429 qla8044_rd_reg(ha, QLA8044_DRV_UNLOCK); in qla8044_idc_unlock()
440 struct qla_hw_data *ha = vha->hw; in qla8044_flash_lock() local
443 lock_status = qla8044_rd_reg(ha, QLA8044_FLASH_LOCK); in qla8044_flash_lock()
448 lock_owner = qla8044_rd_reg(ha, in qla8044_flash_lock()
452 __func__, ha->portnum, lock_owner); in qla8044_flash_lock()
458 qla8044_wr_reg(ha, QLA8044_FLASH_LOCK_ID, ha->portnum); in qla8044_flash_lock()
465 struct qla_hw_data *ha = vha->hw; in qla8044_flash_unlock() local
468 qla8044_wr_reg(ha, QLA8044_FLASH_LOCK_ID, 0xFF); in qla8044_flash_unlock()
469 qla8044_rd_reg(ha, QLA8044_FLASH_UNLOCK); in qla8044_flash_unlock()
568 struct qla_hw_data *ha = vha->hw; in qla8044_need_reset() local
573 rval = drv_state & (1 << ha->portnum); in qla8044_need_reset()
575 if (ha->flags.eeh_busy && drv_active) in qla8044_need_reset()
1114 struct qla_hw_data *ha = vha->hw; in qla8044_ms_mem_write_128b() local
1121 write_lock_irqsave(&ha->hw_lock, flags); in qla8044_ms_mem_write_128b()
1194 write_unlock_irqrestore(&ha->hw_lock, flags); in qla8044_ms_mem_write_128b()
1207 struct qla_hw_data *ha = vha->hw; in qla8044_copy_bootloader() local
1210 dest = qla8044_rd_reg(ha, QLA8044_BOOTLOADER_ADDR); in qla8044_copy_bootloader()
1211 size = qla8044_rd_reg(ha, QLA8044_BOOTLOADER_SIZE); in qla8044_copy_bootloader()
1262 struct qla_hw_data *ha = vha->hw; in qla8044_restart() local
1286 qla8044_wr_reg(ha, QLA8044_FW_IMAGE_VALID, QLA8044_BOOT_FROM_FLASH); in qla8044_restart()
1307 struct qla_hw_data *ha = vha->hw; in qla8044_check_cmd_peg_status() local
1310 val = qla8044_rd_reg(ha, QLA8044_CMDPEG_STATE); in qla8044_check_cmd_peg_status()
1351 qla8044_clear_drv_active(struct qla_hw_data *ha) in qla8044_clear_drv_active() argument
1354 struct scsi_qla_host *vha = pci_get_drvdata(ha->pdev); in qla8044_clear_drv_active()
1357 drv_active &= ~(1 << (ha->portnum)); in qla8044_clear_drv_active()
1380 struct qla_hw_data *ha = vha->hw; in qla8044_device_bootstrap() local
1401 if (ha->flags.isp82xx_fw_hung) in qla8044_device_bootstrap()
1411 qla8044_idc_unlock(ha); in qla8044_device_bootstrap()
1413 qla8044_idc_lock(ha); in qla8044_device_bootstrap()
1418 qla8044_clear_drv_active(ha); in qla8044_device_bootstrap()
1426 idc_ctrl = qla8044_rd_reg(ha, QLA8044_IDC_DRV_CTRL); in qla8044_device_bootstrap()
1428 qla8044_wr_reg(ha, QLA8044_IDC_DRV_CTRL, in qla8044_device_bootstrap()
1430 ha->fw_dumped = 0; in qla8044_device_bootstrap()
1598 struct qla_hw_data *ha = vha->hw; in qla8044_set_idc_dontreset() local
1600 idc_ctrl = qla8044_rd_reg(ha, QLA8044_IDC_DRV_CTRL); in qla8044_set_idc_dontreset()
1604 qla8044_wr_reg(ha, QLA8044_IDC_DRV_CTRL, idc_ctrl); in qla8044_set_idc_dontreset()
1611 struct qla_hw_data *ha = vha->hw; in qla8044_set_rst_ready() local
1617 drv_state |= (1 << ha->portnum); in qla8044_set_rst_ready()
1636 struct qla_hw_data *ha = vha->hw; in qla8044_need_reset_handler() local
1642 qla8044_idc_unlock(ha); in qla8044_need_reset_handler()
1644 ha->isp_ops->get_flash_version(vha, vha->req->ring); in qla8044_need_reset_handler()
1645 ha->isp_ops->nvram_config(vha); in qla8044_need_reset_handler()
1646 qla8044_idc_lock(ha); in qla8044_need_reset_handler()
1663 reset_timeout = jiffies + (ha->fcoe_reset_timeout * HZ); in qla8044_need_reset_handler()
1669 __func__, ha->portnum, drv_state, drv_active); in qla8044_need_reset_handler()
1673 qla8044_idc_unlock(ha); in qla8044_need_reset_handler()
1675 qla8044_idc_lock(ha); in qla8044_need_reset_handler()
1690 __func__, vha->host_no, ha->portnum, in qla8044_need_reset_handler()
1700 if ((ha->flags.nic_core_reset_owner) && in qla8044_need_reset_handler()
1702 ha->flags.nic_core_reset_owner = 0; in qla8044_need_reset_handler()
1709 if (!(drv_active & (1 << ha->portnum))) { in qla8044_need_reset_handler()
1710 ha->flags.nic_core_reset_owner = 0; in qla8044_need_reset_handler()
1718 if (ha->flags.nic_core_reset_owner || in qla8044_need_reset_handler()
1720 ha->flags.nic_core_reset_owner = 0; in qla8044_need_reset_handler()
1729 struct qla_hw_data *ha = vha->hw; in qla8044_set_drv_active() local
1735 drv_active |= (1 << ha->portnum); in qla8044_set_drv_active()
1747 struct qla_hw_data *ha = vha->hw; in qla8044_check_drv_active() local
1750 if (drv_active & (1 << ha->portnum)) in qla8044_check_drv_active()
1760 struct qla_hw_data *ha = vha->hw; in qla8044_clear_idc_dontreset() local
1762 idc_ctrl = qla8044_rd_reg(ha, QLA8044_IDC_DRV_CTRL); in qla8044_clear_idc_dontreset()
1767 qla8044_wr_reg(ha, QLA8044_IDC_DRV_CTRL, idc_ctrl); in qla8044_clear_idc_dontreset()
1776 struct qla_hw_data *ha = vha->hw; in qla8044_set_idc_ver() local
1779 if (drv_active == (1 << ha->portnum)) { in qla8044_set_idc_ver()
1806 idc_ver = qla8044_rd_reg(ha, QLA8044_CRB_IDC_VER_MINOR); in qla8044_set_idc_ver()
1807 idc_ver &= ~(0x03 << (ha->portnum * 2)); in qla8044_set_idc_ver()
1808 idc_ver |= (QLA8044_IDC_VER_MIN_VALUE << (ha->portnum * 2)); in qla8044_set_idc_ver()
1809 qla8044_wr_reg(ha, QLA8044_CRB_IDC_VER_MINOR, idc_ver); in qla8044_set_idc_ver()
1820 struct qla_hw_data *ha = vha->hw; in qla8044_update_idc_reg() local
1825 qla8044_idc_lock(ha); in qla8044_update_idc_reg()
1833 if ((drv_active == (1 << ha->portnum)) && !ql2xdontresethba) in qla8044_update_idc_reg()
1838 qla8044_clear_drv_active(ha); in qla8044_update_idc_reg()
1839 qla8044_idc_unlock(ha); in qla8044_update_idc_reg()
1854 struct qla_hw_data *ha = vha->hw; in qla8044_need_qsnt_handler() local
1885 qla8044_idc_unlock(ha); in qla8044_need_qsnt_handler()
1887 qla8044_idc_lock(ha); in qla8044_need_qsnt_handler()
1919 struct qla_hw_data *ha = vha->hw; in qla8044_device_state_handler() local
1932 dev_init_timeout = jiffies + (ha->fcoe_dev_init_timeout * HZ); in qla8044_device_state_handler()
1934 qla8044_idc_lock(ha); in qla8044_device_state_handler()
1959 ha->flags.nic_core_reset_owner = 0; in qla8044_device_state_handler()
1965 qla8044_idc_unlock(ha); in qla8044_device_state_handler()
1967 qla8044_idc_lock(ha); in qla8044_device_state_handler()
1981 (ha->fcoe_reset_timeout * HZ); in qla8044_device_state_handler()
1987 qla8044_idc_unlock(ha); in qla8044_device_state_handler()
1989 qla8044_idc_lock(ha); in qla8044_device_state_handler()
1993 (ha->fcoe_reset_timeout * HZ); in qla8044_device_state_handler()
1996 ha->flags.nic_core_reset_owner = 0; in qla8044_device_state_handler()
1997 qla8044_idc_unlock(ha); in qla8044_device_state_handler()
2000 qla8044_idc_lock(ha); in qla8044_device_state_handler()
2003 qla8044_idc_unlock(ha); in qla8044_device_state_handler()
2006 qla8044_idc_lock(ha); in qla8044_device_state_handler()
2011 qla8044_idc_unlock(ha); in qla8044_device_state_handler()
2113 struct qla_hw_data *ha = vha->hw; in qla8044_watchdog() local
2121 ha->flags.isp82xx_fw_hung = 1; in qla8044_watchdog()
2129 ha->flags.isp82xx_fw_hung = 1; in qla8044_watchdog()
2147 if (ha->flags.isp82xx_fw_hung) { in qla8044_watchdog()
2202 struct qla_hw_data *ha = vha->hw; in qla8044_minidump_process_control() local
2206 ha->md_tmplt_hdr; in qla8044_minidump_process_control()
2345 struct qla_hw_data *ha = vha->hw; in qla8044_minidump_process_rdmem() local
2374 write_lock_irqsave(&ha->hw_lock, flags); in qla8044_minidump_process_rdmem()
2392 write_unlock_irqrestore(&ha->hw_lock, flags); in qla8044_minidump_process_rdmem()
2404 write_unlock_irqrestore(&ha->hw_lock, flags); in qla8044_minidump_process_rdmem()
2555 struct qla_hw_data *ha = vha->hw; in qla8044_minidump_process_rdocm() local
2569 r_value = readl((void __iomem *)(r_addr + ha->nx_pcibase)); in qla8044_minidump_process_rdocm()
2810 struct qla_hw_data *ha = vha->hw; in qla8044_check_dma_engine_state() local
2816 tmplt_hdr = ha->md_tmplt_hdr; in qla8044_check_dma_engine_state()
2840 struct qla_hw_data *ha = vha->hw; in qla8044_start_pex_dma() local
2846 tmplt_hdr = ha->md_tmplt_hdr; in qla8044_start_pex_dma()
2897 struct qla_hw_data *ha = vha->hw; in qla8044_minidump_pex_dma_read() local
2915 rdmem_buffer = dma_alloc_coherent(&ha->pdev->dev, in qla8044_minidump_pex_dma_read()
2933 ((PCI_FUNC(ha->pdev->devfn) & 0xf) << 0x4); in qla8044_minidump_pex_dma_read()
2980 dma_free_coherent(&ha->pdev->dev, ISP8044_PEX_DMA_READ_SIZE, in qla8044_minidump_pex_dma_read()
3223 struct qla_hw_data *ha = vha->hw; in qla8044_collect_md_data() local
3225 if (!ha->md_dump) { in qla8044_collect_md_data()
3232 if (ha->fw_dumped) { in qla8044_collect_md_data()
3235 "-- ignoring request.\n", ha->fw_dump); in qla8044_collect_md_data()
3239 ha->fw_dumped = 0; in qla8044_collect_md_data()
3241 if (!ha->md_tmplt_hdr || !ha->md_dump) { in qla8044_collect_md_data()
3247 qla8044_idc_lock(ha); in qla8044_collect_md_data()
3248 idc_control = qla8044_rd_reg(ha, QLA8044_IDC_DRV_CTRL); in qla8044_collect_md_data()
3253 qla8044_wr_reg(ha, QLA8044_IDC_DRV_CTRL, in qla8044_collect_md_data()
3255 qla8044_idc_unlock(ha); in qla8044_collect_md_data()
3259 qla8044_idc_unlock(ha); in qla8044_collect_md_data()
3268 ha->md_tmplt_hdr; in qla8044_collect_md_data()
3269 data_ptr = (uint32_t *)((uint8_t *)ha->md_dump); in qla8044_collect_md_data()
3293 __func__, ha->md_dump_size, ha->md_dump_size); in qla8044_collect_md_data()
3301 (((uint8_t *)ha->md_tmplt_hdr) + tmplt_hdr->first_entry_offset); in qla8044_collect_md_data()
3303 tmplt_hdr->ocm_window_reg[ha->portnum]; in qla8044_collect_md_data()
3307 if (data_collected > ha->md_dump_size) { in qla8044_collect_md_data()
3311 data_collected, ha->md_dump_size); in qla8044_collect_md_data()
3325 (ha->md_dump_size - data_collected)); in qla8044_collect_md_data()
3439 (uint8_t *)((uint8_t *)ha->md_dump); in qla8044_collect_md_data()
3448 if (data_collected != ha->md_dump_size) { in qla8044_collect_md_data()
3452 data_collected, ha->md_dump_size); in qla8044_collect_md_data()
3459 vha->host_no, ha->md_tmplt_hdr, vha->host_no, ha->md_dump); in qla8044_collect_md_data()
3460 ha->fw_dumped = 1; in qla8044_collect_md_data()
3474 struct qla_hw_data *ha = vha->hw; in qla8044_get_minidump() local
3477 ha->fw_dumped = 1; in qla8044_get_minidump()
3478 ha->prev_minidump_failed = 0; in qla8044_get_minidump()
3483 ha->prev_minidump_failed = 1; in qla8044_get_minidump()
3563 struct qla_hw_data *ha = vha->hw; in qla8044_unprotect_flash() local
3565 ret_val = qla8044_write_flash_status_reg(vha, ha->fdt_wrt_enable); in qla8044_unprotect_flash()
3580 struct qla_hw_data *ha = vha->hw; in qla8044_protect_flash() local
3582 ret_val = qla8044_write_flash_status_reg(vha, ha->fdt_wrt_disable); in qla8044_protect_flash()
3878 struct qla_hw_data *ha; in qla8044_intr_handler() local
3894 ha = rsp->hw; in qla8044_intr_handler()
3895 vha = pci_get_drvdata(ha->pdev); in qla8044_intr_handler()
3897 if (unlikely(pci_channel_offline(ha->pdev))) in qla8044_intr_handler()
3900 leg_int_ptr = qla8044_rd_reg(ha, LEG_INTR_PTR_OFFSET); in qla8044_intr_handler()
3910 pf_bit = ha->portnum << 16; in qla8044_intr_handler()
3925 qla8044_wr_reg(ha, LEG_INTR_TRIG_OFFSET, 0); in qla8044_intr_handler()
3927 leg_int_ptr = qla8044_rd_reg(ha, LEG_INTR_PTR_OFFSET); in qla8044_intr_handler()
3932 reg = &ha->iobase->isp82; in qla8044_intr_handler()
3933 spin_lock_irqsave(&ha->hardware_lock, flags); in qla8044_intr_handler()
3969 qla2x00_handle_mbx_completion(ha, status); in qla8044_intr_handler()
3970 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla8044_intr_handler()
3976 qla8044_idc_dontreset(struct qla_hw_data *ha) in qla8044_idc_dontreset() argument
3980 idc_ctrl = qla8044_rd_reg(ha, QLA8044_IDC_DRV_CTRL); in qla8044_idc_dontreset()
4008 struct qla_hw_data *ha = vha->hw; in qla8044_abort_isp() local
4010 qla8044_idc_lock(ha); in qla8044_abort_isp()
4025 if (qla8044_idc_dontreset(ha) == DONTRESET_BIT0) { in qla8044_abort_isp()
4043 qla8044_idc_unlock(ha); in qla8044_abort_isp()
4045 qla8044_idc_lock(ha); in qla8044_abort_isp()
4049 qla8044_idc_unlock(ha); in qla8044_abort_isp()
4051 ha->flags.isp82xx_fw_hung = 0; in qla8044_abort_isp()
4052 ha->flags.nic_core_reset_hdlr_active = 0; in qla8044_abort_isp()
4062 struct qla_hw_data *ha = vha->hw; in qla8044_fw_dump() local
4064 if (!ha->allow_cna_fw_dump) in qla8044_fw_dump()
4068 ha->flags.isp82xx_no_md_cap = 1; in qla8044_fw_dump()
4069 qla8044_idc_lock(ha); in qla8044_fw_dump()
4071 qla8044_idc_unlock(ha); in qla8044_fw_dump()