Lines Matching refs:ha

39 qla4_8xxx_pci_base_offsetfset(struct scsi_qla_host *ha, unsigned long off)  in qla4_8xxx_pci_base_offsetfset()  argument
41 if ((off < ha->first_page_group_end) && in qla4_8xxx_pci_base_offsetfset()
42 (off >= ha->first_page_group_start)) in qla4_8xxx_pci_base_offsetfset()
43 return (void __iomem *)(ha->nx_pcibase + off); in qla4_8xxx_pci_base_offsetfset()
358 qla4_82xx_pci_set_crbwindow_2M(struct scsi_qla_host *ha, ulong *off) in qla4_82xx_pci_set_crbwindow_2M() argument
362 ha->crb_win = CRB_HI(*off); in qla4_82xx_pci_set_crbwindow_2M()
363 writel(ha->crb_win, in qla4_82xx_pci_set_crbwindow_2M()
364 (void __iomem *)(CRB_WINDOW_2M + ha->nx_pcibase)); in qla4_82xx_pci_set_crbwindow_2M()
368 win_read = readl((void __iomem *)(CRB_WINDOW_2M + ha->nx_pcibase)); in qla4_82xx_pci_set_crbwindow_2M()
369 if (win_read != ha->crb_win) { in qla4_82xx_pci_set_crbwindow_2M()
370 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_82xx_pci_set_crbwindow_2M()
372 " off=0x%lx\n", __func__, ha->crb_win, win_read, *off)); in qla4_82xx_pci_set_crbwindow_2M()
374 *off = (*off & MASK(16)) + CRB_INDIRECT_2M + ha->nx_pcibase; in qla4_82xx_pci_set_crbwindow_2M()
378 qla4_82xx_wr_32(struct scsi_qla_host *ha, ulong off, u32 data) in qla4_82xx_wr_32() argument
383 rv = qla4_82xx_pci_get_crb_addr_2M(ha, &off); in qla4_82xx_wr_32()
388 write_lock_irqsave(&ha->hw_lock, flags); in qla4_82xx_wr_32()
389 qla4_82xx_crb_win_lock(ha); in qla4_82xx_wr_32()
390 qla4_82xx_pci_set_crbwindow_2M(ha, &off); in qla4_82xx_wr_32()
396 qla4_82xx_crb_win_unlock(ha); in qla4_82xx_wr_32()
397 write_unlock_irqrestore(&ha->hw_lock, flags); in qla4_82xx_wr_32()
401 uint32_t qla4_82xx_rd_32(struct scsi_qla_host *ha, ulong off) in qla4_82xx_rd_32() argument
407 rv = qla4_82xx_pci_get_crb_addr_2M(ha, &off); in qla4_82xx_rd_32()
412 write_lock_irqsave(&ha->hw_lock, flags); in qla4_82xx_rd_32()
413 qla4_82xx_crb_win_lock(ha); in qla4_82xx_rd_32()
414 qla4_82xx_pci_set_crbwindow_2M(ha, &off); in qla4_82xx_rd_32()
419 qla4_82xx_crb_win_unlock(ha); in qla4_82xx_rd_32()
420 write_unlock_irqrestore(&ha->hw_lock, flags); in qla4_82xx_rd_32()
426 int qla4_82xx_md_rd_32(struct scsi_qla_host *ha, uint32_t off, uint32_t *data) in qla4_82xx_md_rd_32() argument
432 writel(off_value, (void __iomem *)(CRB_WINDOW_2M + ha->nx_pcibase)); in qla4_82xx_md_rd_32()
438 win_read = readl((void __iomem *)(CRB_WINDOW_2M + ha->nx_pcibase)); in qla4_82xx_md_rd_32()
440 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_82xx_md_rd_32()
447 ha->nx_pcibase)); in qla4_82xx_md_rd_32()
452 int qla4_82xx_md_wr_32(struct scsi_qla_host *ha, uint32_t off, uint32_t data) in qla4_82xx_md_wr_32() argument
458 writel(off_value, (void __iomem *)(CRB_WINDOW_2M + ha->nx_pcibase)); in qla4_82xx_md_wr_32()
463 win_read = readl((void __iomem *)(CRB_WINDOW_2M + ha->nx_pcibase)); in qla4_82xx_md_wr_32()
465 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_82xx_md_wr_32()
472 ha->nx_pcibase)); in qla4_82xx_md_wr_32()
479 int qla4_82xx_crb_win_lock(struct scsi_qla_host *ha) in qla4_82xx_crb_win_lock() argument
486 done = qla4_82xx_rd_32(ha, QLA82XX_PCIE_REG(PCIE_SEM7_LOCK)); in qla4_82xx_crb_win_lock()
502 qla4_82xx_wr_32(ha, QLA82XX_CRB_WIN_LOCK_ID, ha->func_num); in qla4_82xx_crb_win_lock()
506 void qla4_82xx_crb_win_unlock(struct scsi_qla_host *ha) in qla4_82xx_crb_win_unlock() argument
508 qla4_82xx_rd_32(ha, QLA82XX_PCIE_REG(PCIE_SEM7_UNLOCK)); in qla4_82xx_crb_win_unlock()
520 int qla4_82xx_idc_lock(struct scsi_qla_host *ha) in qla4_82xx_idc_lock() argument
527 done = qla4_82xx_rd_32(ha, QLA82XX_PCIE_REG(PCIE_SEM5_LOCK)); in qla4_82xx_idc_lock()
546 void qla4_82xx_idc_unlock(struct scsi_qla_host *ha) in qla4_82xx_idc_unlock() argument
548 qla4_82xx_rd_32(ha, QLA82XX_PCIE_REG(PCIE_SEM5_UNLOCK)); in qla4_82xx_idc_unlock()
552 qla4_82xx_pci_get_crb_addr_2M(struct scsi_qla_host *ha, ulong *off) in qla4_82xx_pci_get_crb_addr_2M() argument
561 QLA82XX_PCI_CAMQM_2M_BASE + ha->nx_pcibase; in qla4_82xx_pci_get_crb_addr_2M()
576 *off = *off + m->start_2M - m->start_128M + ha->nx_pcibase; in qla4_82xx_pci_get_crb_addr_2M()
591 qla4_82xx_pci_mem_bound_check(struct scsi_qla_host *ha, in qla4_82xx_pci_mem_bound_check() argument
607 qla4_82xx_pci_set_window(struct scsi_qla_host *ha, unsigned long long addr) in qla4_82xx_pci_set_window() argument
616 ha->ddr_mn_window = window; in qla4_82xx_pci_set_window()
617 qla4_82xx_wr_32(ha, ha->mn_win_crb | in qla4_82xx_pci_set_window()
619 win_read = qla4_82xx_rd_32(ha, ha->mn_win_crb | in qla4_82xx_pci_set_window()
622 ql4_printk(KERN_WARNING, ha, in qla4_82xx_pci_set_window()
637 ha->ddr_mn_window = window; in qla4_82xx_pci_set_window()
638 qla4_82xx_wr_32(ha, ha->mn_win_crb | in qla4_82xx_pci_set_window()
640 win_read = qla4_82xx_rd_32(ha, ha->mn_win_crb | in qla4_82xx_pci_set_window()
654 ha->qdr_sn_window = window; in qla4_82xx_pci_set_window()
655 qla4_82xx_wr_32(ha, ha->ms_win_crb | in qla4_82xx_pci_set_window()
657 win_read = qla4_82xx_rd_32(ha, in qla4_82xx_pci_set_window()
658 ha->ms_win_crb | QLA82XX_PCI_CRBSPACE); in qla4_82xx_pci_set_window()
681 static int qla4_82xx_pci_is_same_window(struct scsi_qla_host *ha, in qla4_82xx_pci_is_same_window() argument
703 if (ha->qdr_sn_window == window) in qla4_82xx_pci_is_same_window()
710 static int qla4_82xx_pci_mem_read_direct(struct scsi_qla_host *ha, in qla4_82xx_pci_mem_read_direct() argument
721 write_lock_irqsave(&ha->hw_lock, flags); in qla4_82xx_pci_mem_read_direct()
727 start = qla4_82xx_pci_set_window(ha, off); in qla4_82xx_pci_mem_read_direct()
729 (qla4_82xx_pci_is_same_window(ha, off + size - 1) == 0)) { in qla4_82xx_pci_mem_read_direct()
730 write_unlock_irqrestore(&ha->hw_lock, flags); in qla4_82xx_pci_mem_read_direct()
736 addr = qla4_8xxx_pci_base_offsetfset(ha, start); in qla4_82xx_pci_mem_read_direct()
738 write_unlock_irqrestore(&ha->hw_lock, flags); in qla4_82xx_pci_mem_read_direct()
739 mem_base = pci_resource_start(ha->pdev, 0); in qla4_82xx_pci_mem_read_direct()
755 write_lock_irqsave(&ha->hw_lock, flags); in qla4_82xx_pci_mem_read_direct()
775 write_unlock_irqrestore(&ha->hw_lock, flags); in qla4_82xx_pci_mem_read_direct()
783 qla4_82xx_pci_mem_write_direct(struct scsi_qla_host *ha, u64 off, in qla4_82xx_pci_mem_write_direct() argument
794 write_lock_irqsave(&ha->hw_lock, flags); in qla4_82xx_pci_mem_write_direct()
800 start = qla4_82xx_pci_set_window(ha, off); in qla4_82xx_pci_mem_write_direct()
802 (qla4_82xx_pci_is_same_window(ha, off + size - 1) == 0)) { in qla4_82xx_pci_mem_write_direct()
803 write_unlock_irqrestore(&ha->hw_lock, flags); in qla4_82xx_pci_mem_write_direct()
809 addr = qla4_8xxx_pci_base_offsetfset(ha, start); in qla4_82xx_pci_mem_write_direct()
811 write_unlock_irqrestore(&ha->hw_lock, flags); in qla4_82xx_pci_mem_write_direct()
812 mem_base = pci_resource_start(ha->pdev, 0); in qla4_82xx_pci_mem_write_direct()
826 write_lock_irqsave(&ha->hw_lock, flags); in qla4_82xx_pci_mem_write_direct()
846 write_unlock_irqrestore(&ha->hw_lock, flags); in qla4_82xx_pci_mem_write_direct()
883 qla4_82xx_rom_lock(struct scsi_qla_host *ha) in qla4_82xx_rom_lock() argument
891 done = qla4_82xx_rd_32(ha, QLA82XX_PCIE_REG(PCIE_SEM2_LOCK)); in qla4_82xx_rom_lock()
907 qla4_82xx_wr_32(ha, QLA82XX_ROM_LOCK_ID, ROM_LOCK_DRIVER); in qla4_82xx_rom_lock()
912 qla4_82xx_rom_unlock(struct scsi_qla_host *ha) in qla4_82xx_rom_unlock() argument
914 qla4_82xx_rd_32(ha, QLA82XX_PCIE_REG(PCIE_SEM2_UNLOCK)); in qla4_82xx_rom_unlock()
918 qla4_82xx_wait_rom_done(struct scsi_qla_host *ha) in qla4_82xx_wait_rom_done() argument
924 done = qla4_82xx_rd_32(ha, QLA82XX_ROMUSB_GLB_STATUS); in qla4_82xx_wait_rom_done()
937 qla4_82xx_do_rom_fast_read(struct scsi_qla_host *ha, int addr, int *valp) in qla4_82xx_do_rom_fast_read() argument
939 qla4_82xx_wr_32(ha, QLA82XX_ROMUSB_ROM_ADDRESS, addr); in qla4_82xx_do_rom_fast_read()
940 qla4_82xx_wr_32(ha, QLA82XX_ROMUSB_ROM_DUMMY_BYTE_CNT, 0); in qla4_82xx_do_rom_fast_read()
941 qla4_82xx_wr_32(ha, QLA82XX_ROMUSB_ROM_ABYTE_CNT, 3); in qla4_82xx_do_rom_fast_read()
942 qla4_82xx_wr_32(ha, QLA82XX_ROMUSB_ROM_INSTR_OPCODE, 0xb); in qla4_82xx_do_rom_fast_read()
943 if (qla4_82xx_wait_rom_done(ha)) { in qla4_82xx_do_rom_fast_read()
948 qla4_82xx_wr_32(ha, QLA82XX_ROMUSB_ROM_DUMMY_BYTE_CNT, 0); in qla4_82xx_do_rom_fast_read()
950 qla4_82xx_wr_32(ha, QLA82XX_ROMUSB_ROM_ABYTE_CNT, 0); in qla4_82xx_do_rom_fast_read()
952 *valp = qla4_82xx_rd_32(ha, QLA82XX_ROMUSB_ROM_RDATA); in qla4_82xx_do_rom_fast_read()
957 qla4_82xx_rom_fast_read(struct scsi_qla_host *ha, int addr, int *valp) in qla4_82xx_rom_fast_read() argument
961 while ((qla4_82xx_rom_lock(ha) != 0) && (loops < 50000)) { in qla4_82xx_rom_fast_read()
966 ql4_printk(KERN_WARNING, ha, "%s: qla4_82xx_rom_lock failed\n", in qla4_82xx_rom_fast_read()
970 ret = qla4_82xx_do_rom_fast_read(ha, addr, valp); in qla4_82xx_rom_fast_read()
971 qla4_82xx_rom_unlock(ha); in qla4_82xx_rom_fast_read()
980 qla4_82xx_pinit_from_rom(struct scsi_qla_host *ha, int verbose) in qla4_82xx_pinit_from_rom() argument
994 qla4_82xx_rom_lock(ha); in qla4_82xx_pinit_from_rom()
997 qla4_82xx_wr_32(ha, QLA82XX_CRB_I2Q + 0x10, 0x0); in qla4_82xx_pinit_from_rom()
998 qla4_82xx_wr_32(ha, QLA82XX_CRB_I2Q + 0x14, 0x0); in qla4_82xx_pinit_from_rom()
999 qla4_82xx_wr_32(ha, QLA82XX_CRB_I2Q + 0x18, 0x0); in qla4_82xx_pinit_from_rom()
1000 qla4_82xx_wr_32(ha, QLA82XX_CRB_I2Q + 0x1c, 0x0); in qla4_82xx_pinit_from_rom()
1001 qla4_82xx_wr_32(ha, QLA82XX_CRB_I2Q + 0x20, 0x0); in qla4_82xx_pinit_from_rom()
1002 qla4_82xx_wr_32(ha, QLA82XX_CRB_I2Q + 0x24, 0x0); in qla4_82xx_pinit_from_rom()
1005 qla4_82xx_wr_32(ha, QLA82XX_CRB_NIU + 0x40, 0xff); in qla4_82xx_pinit_from_rom()
1007 qla4_82xx_wr_32(ha, QLA82XX_CRB_NIU + 0x70000, 0x00); in qla4_82xx_pinit_from_rom()
1009 qla4_82xx_wr_32(ha, QLA82XX_CRB_NIU + 0x80000, 0x00); in qla4_82xx_pinit_from_rom()
1011 qla4_82xx_wr_32(ha, QLA82XX_CRB_NIU + 0x90000, 0x00); in qla4_82xx_pinit_from_rom()
1013 qla4_82xx_wr_32(ha, QLA82XX_CRB_NIU + 0xa0000, 0x00); in qla4_82xx_pinit_from_rom()
1015 qla4_82xx_wr_32(ha, QLA82XX_CRB_NIU + 0xb0000, 0x00); in qla4_82xx_pinit_from_rom()
1018 val = qla4_82xx_rd_32(ha, QLA82XX_CRB_SRE + 0x1000); in qla4_82xx_pinit_from_rom()
1019 qla4_82xx_wr_32(ha, QLA82XX_CRB_SRE + 0x1000, val & (~(0x1))); in qla4_82xx_pinit_from_rom()
1022 qla4_82xx_wr_32(ha, QLA82XX_CRB_EPG + 0x1300, 0x1); in qla4_82xx_pinit_from_rom()
1025 qla4_82xx_wr_32(ha, QLA82XX_CRB_TIMER + 0x0, 0x0); in qla4_82xx_pinit_from_rom()
1026 qla4_82xx_wr_32(ha, QLA82XX_CRB_TIMER + 0x8, 0x0); in qla4_82xx_pinit_from_rom()
1027 qla4_82xx_wr_32(ha, QLA82XX_CRB_TIMER + 0x10, 0x0); in qla4_82xx_pinit_from_rom()
1028 qla4_82xx_wr_32(ha, QLA82XX_CRB_TIMER + 0x18, 0x0); in qla4_82xx_pinit_from_rom()
1029 qla4_82xx_wr_32(ha, QLA82XX_CRB_TIMER + 0x100, 0x0); in qla4_82xx_pinit_from_rom()
1030 qla4_82xx_wr_32(ha, QLA82XX_CRB_TIMER + 0x200, 0x0); in qla4_82xx_pinit_from_rom()
1033 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_0 + 0x3c, 1); in qla4_82xx_pinit_from_rom()
1034 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_1 + 0x3c, 1); in qla4_82xx_pinit_from_rom()
1035 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_2 + 0x3c, 1); in qla4_82xx_pinit_from_rom()
1036 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_3 + 0x3c, 1); in qla4_82xx_pinit_from_rom()
1037 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_4 + 0x3c, 1); in qla4_82xx_pinit_from_rom()
1041 if (test_bit(DPC_RESET_HA, &ha->dpc_flags)) in qla4_82xx_pinit_from_rom()
1043 qla4_82xx_wr_32(ha, QLA82XX_ROMUSB_GLB_SW_RESET, 0xfeffffff); in qla4_82xx_pinit_from_rom()
1045 qla4_82xx_wr_32(ha, QLA82XX_ROMUSB_GLB_SW_RESET, 0xffffffff); in qla4_82xx_pinit_from_rom()
1047 qla4_82xx_rom_unlock(ha); in qla4_82xx_pinit_from_rom()
1054 if (qla4_82xx_rom_fast_read(ha, 0, &n) != 0 || n != 0xcafecafeUL || in qla4_82xx_pinit_from_rom()
1055 qla4_82xx_rom_fast_read(ha, 4, &n) != 0) { in qla4_82xx_pinit_from_rom()
1056 ql4_printk(KERN_WARNING, ha, in qla4_82xx_pinit_from_rom()
1069 ql4_printk(KERN_WARNING, ha, in qla4_82xx_pinit_from_rom()
1075 ql4_printk(KERN_INFO, ha, in qla4_82xx_pinit_from_rom()
1080 ql4_printk(KERN_WARNING, ha, in qla4_82xx_pinit_from_rom()
1086 if (qla4_82xx_rom_fast_read(ha, 8*i + 4*offset, &val) != 0 || in qla4_82xx_pinit_from_rom()
1087 qla4_82xx_rom_fast_read(ha, 8*i + 4*offset + 4, &addr) != in qla4_82xx_pinit_from_rom()
1109 DEBUG2(ql4_printk(KERN_WARNING, ha, in qla4_82xx_pinit_from_rom()
1140 ql4_printk(KERN_WARNING, ha, in qla4_82xx_pinit_from_rom()
1146 qla4_82xx_wr_32(ha, off, buf[i].data); in qla4_82xx_pinit_from_rom()
1163 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_D+0xec, 0x1e); in qla4_82xx_pinit_from_rom()
1164 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_D+0x4c, 8); in qla4_82xx_pinit_from_rom()
1165 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_I+0x4c, 8); in qla4_82xx_pinit_from_rom()
1168 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_0+0x8, 0); in qla4_82xx_pinit_from_rom()
1169 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_0+0xc, 0); in qla4_82xx_pinit_from_rom()
1170 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_1+0x8, 0); in qla4_82xx_pinit_from_rom()
1171 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_1+0xc, 0); in qla4_82xx_pinit_from_rom()
1172 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_2+0x8, 0); in qla4_82xx_pinit_from_rom()
1173 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_2+0xc, 0); in qla4_82xx_pinit_from_rom()
1174 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_3+0x8, 0); in qla4_82xx_pinit_from_rom()
1175 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_3+0xc, 0); in qla4_82xx_pinit_from_rom()
1190 int qla4_8xxx_ms_mem_write_128b(struct scsi_qla_host *ha, uint64_t addr, in qla4_8xxx_ms_mem_write_128b() argument
1204 write_lock_irqsave(&ha->hw_lock, flags); in qla4_8xxx_ms_mem_write_128b()
1207 ret_val = ha->isp_ops->wr_reg_indirect(ha, MD_MIU_TEST_AGT_ADDR_HI, 0); in qla4_8xxx_ms_mem_write_128b()
1209 ql4_printk(KERN_ERR, ha, "%s: write to AGT_ADDR_HI failed\n", in qla4_8xxx_ms_mem_write_128b()
1223 ret_val = ha->isp_ops->wr_reg_indirect(ha, in qla4_8xxx_ms_mem_write_128b()
1227 ret_val |= ha->isp_ops->wr_reg_indirect(ha, in qla4_8xxx_ms_mem_write_128b()
1230 ret_val |= ha->isp_ops->wr_reg_indirect(ha, in qla4_8xxx_ms_mem_write_128b()
1233 ret_val |= ha->isp_ops->wr_reg_indirect(ha, in qla4_8xxx_ms_mem_write_128b()
1236 ret_val |= ha->isp_ops->wr_reg_indirect(ha, in qla4_8xxx_ms_mem_write_128b()
1240 ql4_printk(KERN_ERR, ha, "%s: write to AGT_WRDATA failed\n", in qla4_8xxx_ms_mem_write_128b()
1246 ret_val = ha->isp_ops->wr_reg_indirect(ha, MD_MIU_TEST_AGT_CTRL, in qla4_8xxx_ms_mem_write_128b()
1248 ret_val |= ha->isp_ops->wr_reg_indirect(ha, in qla4_8xxx_ms_mem_write_128b()
1252 ql4_printk(KERN_ERR, ha, "%s: write to AGT_CTRL failed\n", in qla4_8xxx_ms_mem_write_128b()
1258 ret_val = ha->isp_ops->rd_reg_indirect(ha, in qla4_8xxx_ms_mem_write_128b()
1262 ql4_printk(KERN_ERR, ha, "%s: failed to read MD_MIU_TEST_AGT_CTRL\n", in qla4_8xxx_ms_mem_write_128b()
1280 write_unlock_irqrestore(&ha->hw_lock, flags); in qla4_8xxx_ms_mem_write_128b()
1287 qla4_82xx_load_from_flash(struct scsi_qla_host *ha, uint32_t image_start) in qla4_82xx_load_from_flash() argument
1295 flashaddr = memaddr = ha->hw.flt_region_bootload; in qla4_82xx_load_from_flash()
1299 ha->host_no, __func__, flashaddr, image_start)); in qla4_82xx_load_from_flash()
1302 if ((qla4_82xx_rom_fast_read(ha, flashaddr, (int *)&low)) || in qla4_82xx_load_from_flash()
1303 (qla4_82xx_rom_fast_read(ha, flashaddr + 4, in qla4_82xx_load_from_flash()
1309 rval = qla4_82xx_pci_mem_write_2M(ha, memaddr, &data, 8); in qla4_82xx_load_from_flash()
1323 read_lock(&ha->hw_lock); in qla4_82xx_load_from_flash()
1324 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_0 + 0x18, 0x1020); in qla4_82xx_load_from_flash()
1325 qla4_82xx_wr_32(ha, QLA82XX_ROMUSB_GLB_SW_RESET, 0x80001e); in qla4_82xx_load_from_flash()
1326 read_unlock(&ha->hw_lock); in qla4_82xx_load_from_flash()
1332 static int qla4_82xx_load_fw(struct scsi_qla_host *ha, uint32_t image_start) in qla4_82xx_load_fw() argument
1336 qla4_82xx_wr_32(ha, CRB_CMDPEG_STATE, 0); in qla4_82xx_load_fw()
1337 if (qla4_82xx_pinit_from_rom(ha, 0) != QLA_SUCCESS) { in qla4_82xx_load_fw()
1350 rst = qla4_82xx_rd_32(ha, QLA82XX_ROMUSB_GLB_SW_RESET); in qla4_82xx_load_fw()
1353 qla4_82xx_wr_32(ha, QLA82XX_ROMUSB_GLB_SW_RESET, rst); in qla4_82xx_load_fw()
1355 if (qla4_82xx_load_from_flash(ha, image_start)) { in qla4_82xx_load_fw()
1364 qla4_82xx_pci_mem_read_2M(struct scsi_qla_host *ha, in qla4_82xx_pci_mem_read_2M() argument
1380 if (qla4_82xx_pci_mem_bound_check(ha, off, size) == 0) in qla4_82xx_pci_mem_read_2M()
1381 return qla4_82xx_pci_mem_read_direct(ha, in qla4_82xx_pci_mem_read_2M()
1397 qla4_82xx_wr_32(ha, mem_crb + MIU_TEST_AGT_ADDR_LO, temp); in qla4_82xx_pci_mem_read_2M()
1399 qla4_82xx_wr_32(ha, mem_crb + MIU_TEST_AGT_ADDR_HI, temp); in qla4_82xx_pci_mem_read_2M()
1401 qla4_82xx_wr_32(ha, mem_crb + MIU_TEST_AGT_CTRL, temp); in qla4_82xx_pci_mem_read_2M()
1403 qla4_82xx_wr_32(ha, mem_crb + MIU_TEST_AGT_CTRL, temp); in qla4_82xx_pci_mem_read_2M()
1406 temp = qla4_82xx_rd_32(ha, mem_crb + MIU_TEST_AGT_CTRL); in qla4_82xx_pci_mem_read_2M()
1421 temp = qla4_82xx_rd_32(ha, in qla4_82xx_pci_mem_read_2M()
1455 qla4_82xx_pci_mem_write_2M(struct scsi_qla_host *ha, in qla4_82xx_pci_mem_write_2M() argument
1470 if (qla4_82xx_pci_mem_bound_check(ha, off, size) == 0) in qla4_82xx_pci_mem_write_2M()
1471 return qla4_82xx_pci_mem_write_direct(ha, in qla4_82xx_pci_mem_write_2M()
1486 if (qla4_82xx_pci_mem_read_2M(ha, off8 + in qla4_82xx_pci_mem_write_2M()
1522 qla4_82xx_wr_32(ha, mem_crb+MIU_TEST_AGT_ADDR_LO, temp); in qla4_82xx_pci_mem_write_2M()
1524 qla4_82xx_wr_32(ha, mem_crb+MIU_TEST_AGT_ADDR_HI, temp); in qla4_82xx_pci_mem_write_2M()
1526 qla4_82xx_wr_32(ha, mem_crb+MIU_TEST_AGT_WRDATA_LO, temp); in qla4_82xx_pci_mem_write_2M()
1528 qla4_82xx_wr_32(ha, mem_crb+MIU_TEST_AGT_WRDATA_HI, temp); in qla4_82xx_pci_mem_write_2M()
1530 qla4_82xx_wr_32(ha, mem_crb + MIU_TEST_AGT_WRDATA_UPPER_LO, in qla4_82xx_pci_mem_write_2M()
1533 qla4_82xx_wr_32(ha, mem_crb + MIU_TEST_AGT_WRDATA_UPPER_HI, in qla4_82xx_pci_mem_write_2M()
1537 qla4_82xx_wr_32(ha, mem_crb+MIU_TEST_AGT_CTRL, temp); in qla4_82xx_pci_mem_write_2M()
1539 qla4_82xx_wr_32(ha, mem_crb+MIU_TEST_AGT_CTRL, temp); in qla4_82xx_pci_mem_write_2M()
1542 temp = qla4_82xx_rd_32(ha, mem_crb + MIU_TEST_AGT_CTRL); in qla4_82xx_pci_mem_write_2M()
1549 ql4_printk(KERN_ERR, ha, in qla4_82xx_pci_mem_write_2M()
1560 static int qla4_82xx_cmdpeg_ready(struct scsi_qla_host *ha, int pegtune_val) in qla4_82xx_cmdpeg_ready() argument
1567 val = qla4_82xx_rd_32(ha, CRB_CMDPEG_STATE); in qla4_82xx_cmdpeg_ready()
1577 pegtune_val = qla4_82xx_rd_32(ha, in qla4_82xx_cmdpeg_ready()
1587 static int qla4_82xx_rcvpeg_ready(struct scsi_qla_host *ha) in qla4_82xx_rcvpeg_ready() argument
1593 read_lock(&ha->hw_lock); in qla4_82xx_rcvpeg_ready()
1594 state = qla4_82xx_rd_32(ha, CRB_RCVPEG_STATE); in qla4_82xx_rcvpeg_ready()
1595 read_unlock(&ha->hw_lock); in qla4_82xx_rcvpeg_ready()
1600 read_lock(&ha->hw_lock); in qla4_82xx_rcvpeg_ready()
1601 state = qla4_82xx_rd_32(ha, CRB_RCVPEG_STATE); in qla4_82xx_rcvpeg_ready()
1602 read_unlock(&ha->hw_lock); in qla4_82xx_rcvpeg_ready()
1608 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_82xx_rcvpeg_ready()
1617 qla4_8xxx_set_drv_active(struct scsi_qla_host *ha) in qla4_8xxx_set_drv_active() argument
1621 drv_active = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_ACTIVE); in qla4_8xxx_set_drv_active()
1628 if (is_qla8032(ha) || is_qla8042(ha)) in qla4_8xxx_set_drv_active()
1629 drv_active |= (1 << ha->func_num); in qla4_8xxx_set_drv_active()
1631 drv_active |= (1 << (ha->func_num * 4)); in qla4_8xxx_set_drv_active()
1633 ql4_printk(KERN_INFO, ha, "%s(%ld): drv_active: 0x%08x\n", in qla4_8xxx_set_drv_active()
1634 __func__, ha->host_no, drv_active); in qla4_8xxx_set_drv_active()
1635 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DRV_ACTIVE, drv_active); in qla4_8xxx_set_drv_active()
1639 qla4_8xxx_clear_drv_active(struct scsi_qla_host *ha) in qla4_8xxx_clear_drv_active() argument
1643 drv_active = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_ACTIVE); in qla4_8xxx_clear_drv_active()
1650 if (is_qla8032(ha) || is_qla8042(ha)) in qla4_8xxx_clear_drv_active()
1651 drv_active &= ~(1 << (ha->func_num)); in qla4_8xxx_clear_drv_active()
1653 drv_active &= ~(1 << (ha->func_num * 4)); in qla4_8xxx_clear_drv_active()
1655 ql4_printk(KERN_INFO, ha, "%s(%ld): drv_active: 0x%08x\n", in qla4_8xxx_clear_drv_active()
1656 __func__, ha->host_no, drv_active); in qla4_8xxx_clear_drv_active()
1657 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DRV_ACTIVE, drv_active); in qla4_8xxx_clear_drv_active()
1660 inline int qla4_8xxx_need_reset(struct scsi_qla_host *ha) in qla4_8xxx_need_reset() argument
1665 drv_active = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_ACTIVE); in qla4_8xxx_need_reset()
1666 drv_state = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_STATE); in qla4_8xxx_need_reset()
1673 if (is_qla8032(ha) || is_qla8042(ha)) in qla4_8xxx_need_reset()
1674 rval = drv_state & (1 << ha->func_num); in qla4_8xxx_need_reset()
1676 rval = drv_state & (1 << (ha->func_num * 4)); in qla4_8xxx_need_reset()
1678 if ((test_bit(AF_EEH_BUSY, &ha->flags)) && drv_active) in qla4_8xxx_need_reset()
1684 void qla4_8xxx_set_rst_ready(struct scsi_qla_host *ha) in qla4_8xxx_set_rst_ready() argument
1688 drv_state = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_STATE); in qla4_8xxx_set_rst_ready()
1695 if (is_qla8032(ha) || is_qla8042(ha)) in qla4_8xxx_set_rst_ready()
1696 drv_state |= (1 << ha->func_num); in qla4_8xxx_set_rst_ready()
1698 drv_state |= (1 << (ha->func_num * 4)); in qla4_8xxx_set_rst_ready()
1700 ql4_printk(KERN_INFO, ha, "%s(%ld): drv_state: 0x%08x\n", in qla4_8xxx_set_rst_ready()
1701 __func__, ha->host_no, drv_state); in qla4_8xxx_set_rst_ready()
1702 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DRV_STATE, drv_state); in qla4_8xxx_set_rst_ready()
1705 void qla4_8xxx_clear_rst_ready(struct scsi_qla_host *ha) in qla4_8xxx_clear_rst_ready() argument
1709 drv_state = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_STATE); in qla4_8xxx_clear_rst_ready()
1716 if (is_qla8032(ha) || is_qla8042(ha)) in qla4_8xxx_clear_rst_ready()
1717 drv_state &= ~(1 << ha->func_num); in qla4_8xxx_clear_rst_ready()
1719 drv_state &= ~(1 << (ha->func_num * 4)); in qla4_8xxx_clear_rst_ready()
1721 ql4_printk(KERN_INFO, ha, "%s(%ld): drv_state: 0x%08x\n", in qla4_8xxx_clear_rst_ready()
1722 __func__, ha->host_no, drv_state); in qla4_8xxx_clear_rst_ready()
1723 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DRV_STATE, drv_state); in qla4_8xxx_clear_rst_ready()
1727 qla4_8xxx_set_qsnt_ready(struct scsi_qla_host *ha) in qla4_8xxx_set_qsnt_ready() argument
1731 qsnt_state = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_STATE); in qla4_8xxx_set_qsnt_ready()
1738 if (is_qla8032(ha) || is_qla8042(ha)) in qla4_8xxx_set_qsnt_ready()
1739 qsnt_state |= (1 << ha->func_num); in qla4_8xxx_set_qsnt_ready()
1741 qsnt_state |= (2 << (ha->func_num * 4)); in qla4_8xxx_set_qsnt_ready()
1743 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DRV_STATE, qsnt_state); in qla4_8xxx_set_qsnt_ready()
1748 qla4_82xx_start_firmware(struct scsi_qla_host *ha, uint32_t image_start) in qla4_82xx_start_firmware() argument
1753 qla4_82xx_wr_32(ha, CRB_DMA_SHIFT, 0x55555555); in qla4_82xx_start_firmware()
1756 qla4_82xx_wr_32(ha, CRB_CMDPEG_STATE, 0); in qla4_82xx_start_firmware()
1757 qla4_82xx_wr_32(ha, CRB_RCVPEG_STATE, 0); in qla4_82xx_start_firmware()
1758 qla4_82xx_wr_32(ha, QLA82XX_PEG_HALT_STATUS1, 0); in qla4_82xx_start_firmware()
1759 qla4_82xx_wr_32(ha, QLA82XX_PEG_HALT_STATUS2, 0); in qla4_82xx_start_firmware()
1761 if (qla4_82xx_load_fw(ha, image_start) != QLA_SUCCESS) { in qla4_82xx_start_firmware()
1767 if (qla4_82xx_cmdpeg_ready(ha, 0) != QLA_SUCCESS) { in qla4_82xx_start_firmware()
1773 pcie_capability_read_word(ha->pdev, PCI_EXP_LNKSTA, &lnk); in qla4_82xx_start_firmware()
1774 ha->link_width = (lnk >> 4) & 0x3f; in qla4_82xx_start_firmware()
1777 return qla4_82xx_rcvpeg_ready(ha); in qla4_82xx_start_firmware()
1780 int qla4_82xx_try_start_fw(struct scsi_qla_host *ha) in qla4_82xx_try_start_fw() argument
1790 ql4_printk(KERN_INFO, ha, in qla4_82xx_try_start_fw()
1792 rval = qla4_8xxx_get_flash_info(ha); in qla4_82xx_try_start_fw()
1796 ql4_printk(KERN_INFO, ha, in qla4_82xx_try_start_fw()
1798 rval = qla4_82xx_start_firmware(ha, ha->hw.flt_region_fw); in qla4_82xx_try_start_fw()
1801 ql4_printk(KERN_ERR, ha, "FW: Load firmware from flash" in qla4_82xx_try_start_fw()
1809 void qla4_82xx_rom_lock_recovery(struct scsi_qla_host *ha) in qla4_82xx_rom_lock_recovery() argument
1811 if (qla4_82xx_rom_lock(ha)) { in qla4_82xx_rom_lock_recovery()
1813 dev_info(&ha->pdev->dev, "Resetting rom_lock\n"); in qla4_82xx_rom_lock_recovery()
1821 qla4_82xx_rom_unlock(ha); in qla4_82xx_rom_lock_recovery()
1824 static uint32_t ql4_84xx_poll_wait_for_ready(struct scsi_qla_host *ha, in ql4_84xx_poll_wait_for_ready() argument
1833 ha->isp_ops->rd_reg_indirect(ha, addr1, &temp); in ql4_84xx_poll_wait_for_ready()
1838 ql4_printk(KERN_INFO, ha, "Error in processing rdmdio entry\n"); in ql4_84xx_poll_wait_for_ready()
1846 uint32_t ql4_84xx_ipmdio_rd_reg(struct scsi_qla_host *ha, uint32_t addr1, in ql4_84xx_ipmdio_rd_reg() argument
1854 rval = ql4_84xx_poll_wait_for_ready(ha, addr1, mask); in ql4_84xx_ipmdio_rd_reg()
1859 ha->isp_ops->wr_reg_indirect(ha, addr1, temp); in ql4_84xx_ipmdio_rd_reg()
1861 rval = ql4_84xx_poll_wait_for_ready(ha, addr1, mask); in ql4_84xx_ipmdio_rd_reg()
1865 ha->isp_ops->rd_reg_indirect(ha, addr3, &data); in ql4_84xx_ipmdio_rd_reg()
1873 static uint32_t ql4_84xx_poll_wait_ipmdio_bus_idle(struct scsi_qla_host *ha, in ql4_84xx_poll_wait_ipmdio_bus_idle() argument
1885 ql4_84xx_ipmdio_rd_reg(ha, addr1, addr3, mask, addr2, &temp); in ql4_84xx_poll_wait_ipmdio_bus_idle()
1889 ql4_printk(KERN_INFO, ha, "Error in processing mdiobus idle\n"); in ql4_84xx_poll_wait_ipmdio_bus_idle()
1897 static int ql4_84xx_ipmdio_wr_reg(struct scsi_qla_host *ha, in ql4_84xx_ipmdio_wr_reg() argument
1904 rval = ql4_84xx_poll_wait_for_ready(ha, addr1, mask); in ql4_84xx_ipmdio_wr_reg()
1908 ha->isp_ops->wr_reg_indirect(ha, addr3, value); in ql4_84xx_ipmdio_wr_reg()
1909 ha->isp_ops->wr_reg_indirect(ha, addr1, addr); in ql4_84xx_ipmdio_wr_reg()
1911 rval = ql4_84xx_poll_wait_for_ready(ha, addr1, mask); in ql4_84xx_ipmdio_wr_reg()
1919 static void qla4_8xxx_minidump_process_rdcrb(struct scsi_qla_host *ha, in qla4_8xxx_minidump_process_rdcrb() argument
1927 DEBUG2(ql4_printk(KERN_INFO, ha, "Entering fn: %s\n", __func__)); in qla4_8xxx_minidump_process_rdcrb()
1934 ha->isp_ops->rd_reg_indirect(ha, r_addr, &r_value); in qla4_8xxx_minidump_process_rdcrb()
1942 static int qla4_83xx_check_dma_engine_state(struct scsi_qla_host *ha) in qla4_83xx_check_dma_engine_state() argument
1950 ha->fw_dump_tmplt_hdr; in qla4_83xx_check_dma_engine_state()
1957 rval = ha->isp_ops->rd_reg_indirect(ha, in qla4_83xx_check_dma_engine_state()
1971 static int qla4_83xx_start_pex_dma(struct scsi_qla_host *ha, in qla4_83xx_start_pex_dma() argument
1980 ha->fw_dump_tmplt_hdr; in qla4_83xx_start_pex_dma()
1986 rval = ha->isp_ops->wr_reg_indirect(ha, in qla4_83xx_start_pex_dma()
1992 rval = ha->isp_ops->wr_reg_indirect(ha, in qla4_83xx_start_pex_dma()
1997 rval = ha->isp_ops->wr_reg_indirect(ha, in qla4_83xx_start_pex_dma()
2005 rval = ha->isp_ops->rd_reg_indirect(ha, in qla4_83xx_start_pex_dma()
2027 static int qla4_8xxx_minidump_pex_dma_read(struct scsi_qla_host *ha, in qla4_8xxx_minidump_pex_dma_read() argument
2039 DEBUG2(ql4_printk(KERN_INFO, ha, "Entering fn: %s\n", __func__)); in qla4_8xxx_minidump_pex_dma_read()
2041 rval = qla4_83xx_check_dma_engine_state(ha); in qla4_8xxx_minidump_pex_dma_read()
2043 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_minidump_pex_dma_read()
2050 rdmem_buffer = dma_alloc_coherent(&ha->pdev->dev, in qla4_8xxx_minidump_pex_dma_read()
2054 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_minidump_pex_dma_read()
2067 dma_desc.cmd.dma_desc_cmd |= ((PCI_FUNC(ha->pdev->devfn) & 0xf) << 0x4); in qla4_8xxx_minidump_pex_dma_read()
2084 dma_free_coherent(&ha->pdev->dev, in qla4_8xxx_minidump_pex_dma_read()
2088 rdmem_buffer = dma_alloc_coherent(&ha->pdev->dev, size, in qla4_8xxx_minidump_pex_dma_read()
2092 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_minidump_pex_dma_read()
2104 rval = qla4_8xxx_ms_mem_write_128b(ha, in qla4_8xxx_minidump_pex_dma_read()
2109 ql4_printk(KERN_INFO, ha, in qla4_8xxx_minidump_pex_dma_read()
2115 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_minidump_pex_dma_read()
2119 rval = qla4_83xx_start_pex_dma(ha, m_hdr); in qla4_8xxx_minidump_pex_dma_read()
2121 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_minidump_pex_dma_read()
2123 ha->host_no, rval)); in qla4_8xxx_minidump_pex_dma_read()
2132 DEBUG2(ql4_printk(KERN_INFO, ha, "Leaving fn: %s\n", __func__)); in qla4_8xxx_minidump_pex_dma_read()
2138 dma_free_coherent(&ha->pdev->dev, size, rdmem_buffer, in qla4_8xxx_minidump_pex_dma_read()
2144 static int qla4_8xxx_minidump_process_l2tag(struct scsi_qla_host *ha, in qla4_8xxx_minidump_process_l2tag() argument
2156 DEBUG2(ql4_printk(KERN_INFO, ha, "Entering fn: %s\n", __func__)); in qla4_8xxx_minidump_process_l2tag()
2171 ha->isp_ops->wr_reg_indirect(ha, t_r_addr, t_value); in qla4_8xxx_minidump_process_l2tag()
2174 ha->isp_ops->wr_reg_indirect(ha, c_addr, c_value_w); in qla4_8xxx_minidump_process_l2tag()
2179 ha->isp_ops->rd_reg_indirect(ha, c_addr, in qla4_8xxx_minidump_process_l2tag()
2192 ha->isp_ops->rd_reg_indirect(ha, addr, &r_value); in qla4_8xxx_minidump_process_l2tag()
2203 static int qla4_8xxx_minidump_process_control(struct scsi_qla_host *ha, in qla4_8xxx_minidump_process_control() argument
2213 DEBUG2(ql4_printk(KERN_INFO, ha, "Entering fn: %s\n", __func__)); in qla4_8xxx_minidump_process_control()
2215 ha->fw_dump_tmplt_hdr; in qla4_8xxx_minidump_process_control()
2222 ha->isp_ops->wr_reg_indirect(ha, crb_addr, in qla4_8xxx_minidump_process_control()
2227 ha->isp_ops->rd_reg_indirect(ha, crb_addr, &read_value); in qla4_8xxx_minidump_process_control()
2228 ha->isp_ops->wr_reg_indirect(ha, crb_addr, read_value); in qla4_8xxx_minidump_process_control()
2232 ha->isp_ops->rd_reg_indirect(ha, crb_addr, &read_value); in qla4_8xxx_minidump_process_control()
2239 ha->isp_ops->wr_reg_indirect(ha, crb_addr, read_value); in qla4_8xxx_minidump_process_control()
2242 ha->isp_ops->rd_reg_indirect(ha, crb_addr, &read_value); in qla4_8xxx_minidump_process_control()
2244 ha->isp_ops->wr_reg_indirect(ha, crb_addr, read_value); in qla4_8xxx_minidump_process_control()
2250 ha->isp_ops->rd_reg_indirect(ha, crb_addr, &read_value); in qla4_8xxx_minidump_process_control()
2261 ha->isp_ops->rd_reg_indirect(ha, in qla4_8xxx_minidump_process_control()
2276 ha->isp_ops->rd_reg_indirect(ha, addr, &read_value); in qla4_8xxx_minidump_process_control()
2298 ha->isp_ops->wr_reg_indirect(ha, addr, read_value); in qla4_8xxx_minidump_process_control()
2316 DEBUG2(ql4_printk(KERN_INFO, ha, "Leaving fn: %s\n", __func__)); in qla4_8xxx_minidump_process_control()
2320 static void qla4_8xxx_minidump_process_rdocm(struct scsi_qla_host *ha, in qla4_8xxx_minidump_process_rdocm() argument
2328 DEBUG2(ql4_printk(KERN_INFO, ha, "Entering fn: %s\n", __func__)); in qla4_8xxx_minidump_process_rdocm()
2334 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_minidump_process_rdocm()
2339 r_value = readl((void __iomem *)(r_addr + ha->nx_pcibase)); in qla4_8xxx_minidump_process_rdocm()
2343 DEBUG2(ql4_printk(KERN_INFO, ha, "Leaving fn: %s datacount: 0x%lx\n", in qla4_8xxx_minidump_process_rdocm()
2348 static void qla4_8xxx_minidump_process_rdmux(struct scsi_qla_host *ha, in qla4_8xxx_minidump_process_rdmux() argument
2356 DEBUG2(ql4_printk(KERN_INFO, ha, "Entering fn: %s\n", __func__)); in qla4_8xxx_minidump_process_rdmux()
2365 ha->isp_ops->wr_reg_indirect(ha, s_addr, s_value); in qla4_8xxx_minidump_process_rdmux()
2366 ha->isp_ops->rd_reg_indirect(ha, r_addr, &r_value); in qla4_8xxx_minidump_process_rdmux()
2374 static void qla4_8xxx_minidump_process_l1cache(struct scsi_qla_host *ha, in qla4_8xxx_minidump_process_l1cache() argument
2395 ha->isp_ops->wr_reg_indirect(ha, t_r_addr, t_value); in qla4_8xxx_minidump_process_l1cache()
2396 ha->isp_ops->wr_reg_indirect(ha, c_addr, c_value_w); in qla4_8xxx_minidump_process_l1cache()
2399 ha->isp_ops->rd_reg_indirect(ha, addr, &r_value); in qla4_8xxx_minidump_process_l1cache()
2408 static void qla4_8xxx_minidump_process_queue(struct scsi_qla_host *ha, in qla4_8xxx_minidump_process_queue() argument
2418 DEBUG2(ql4_printk(KERN_INFO, ha, "Entering fn: %s\n", __func__)); in qla4_8xxx_minidump_process_queue()
2426 ha->isp_ops->wr_reg_indirect(ha, s_addr, qid); in qla4_8xxx_minidump_process_queue()
2429 ha->isp_ops->rd_reg_indirect(ha, r_addr, &r_value); in qla4_8xxx_minidump_process_queue()
2441 static void qla4_82xx_minidump_process_rdrom(struct scsi_qla_host *ha, in qla4_82xx_minidump_process_rdrom() argument
2450 DEBUG2(ql4_printk(KERN_INFO, ha, "Entering fn: %s\n", __func__)); in qla4_82xx_minidump_process_rdrom()
2455 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_82xx_minidump_process_rdrom()
2460 ha->isp_ops->wr_reg_indirect(ha, MD_DIRECT_ROM_WINDOW, in qla4_82xx_minidump_process_rdrom()
2462 ha->isp_ops->rd_reg_indirect(ha, in qla4_82xx_minidump_process_rdrom()
2475 static int __qla4_8xxx_minidump_process_rdmem(struct scsi_qla_host *ha, in __qla4_8xxx_minidump_process_rdmem() argument
2485 DEBUG2(ql4_printk(KERN_INFO, ha, "Entering fn: %s\n", __func__)); in __qla4_8xxx_minidump_process_rdmem()
2490 DEBUG2(ql4_printk(KERN_INFO, ha, in __qla4_8xxx_minidump_process_rdmem()
2495 DEBUG2(ql4_printk(KERN_INFO, ha, in __qla4_8xxx_minidump_process_rdmem()
2502 DEBUG2(ql4_printk(KERN_INFO, ha, in __qla4_8xxx_minidump_process_rdmem()
2508 DEBUG2(ql4_printk(KERN_INFO, ha, in __qla4_8xxx_minidump_process_rdmem()
2512 write_lock_irqsave(&ha->hw_lock, flags); in __qla4_8xxx_minidump_process_rdmem()
2514 ha->isp_ops->wr_reg_indirect(ha, MD_MIU_TEST_AGT_ADDR_LO, in __qla4_8xxx_minidump_process_rdmem()
2517 ha->isp_ops->wr_reg_indirect(ha, MD_MIU_TEST_AGT_ADDR_HI, in __qla4_8xxx_minidump_process_rdmem()
2520 ha->isp_ops->wr_reg_indirect(ha, MD_MIU_TEST_AGT_CTRL, r_value); in __qla4_8xxx_minidump_process_rdmem()
2522 ha->isp_ops->wr_reg_indirect(ha, MD_MIU_TEST_AGT_CTRL, r_value); in __qla4_8xxx_minidump_process_rdmem()
2525 ha->isp_ops->rd_reg_indirect(ha, MD_MIU_TEST_AGT_CTRL, in __qla4_8xxx_minidump_process_rdmem()
2535 write_unlock_irqrestore(&ha->hw_lock, flags); in __qla4_8xxx_minidump_process_rdmem()
2540 ha->isp_ops->rd_reg_indirect(ha, in __qla4_8xxx_minidump_process_rdmem()
2548 write_unlock_irqrestore(&ha->hw_lock, flags); in __qla4_8xxx_minidump_process_rdmem()
2550 DEBUG2(ql4_printk(KERN_INFO, ha, "Leaving fn: %s datacount: 0x%x\n", in __qla4_8xxx_minidump_process_rdmem()
2557 static int qla4_8xxx_minidump_process_rdmem(struct scsi_qla_host *ha, in qla4_8xxx_minidump_process_rdmem() argument
2564 rval = qla4_8xxx_minidump_pex_dma_read(ha, entry_hdr, &data_ptr); in qla4_8xxx_minidump_process_rdmem()
2566 rval = __qla4_8xxx_minidump_process_rdmem(ha, entry_hdr, in qla4_8xxx_minidump_process_rdmem()
2572 static void qla4_8xxx_mark_entry_skipped(struct scsi_qla_host *ha, in qla4_8xxx_mark_entry_skipped() argument
2577 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_mark_entry_skipped()
2579 ha->host_no, index, entry_hdr->entry_type, in qla4_8xxx_mark_entry_skipped()
2585 ha->fw_dump_skip_size += entry_hdr->entry_capture_size; in qla4_8xxx_mark_entry_skipped()
2589 static uint32_t qla83xx_minidump_process_pollrd(struct scsi_qla_host *ha, in qla83xx_minidump_process_pollrd() argument
2609 ha->isp_ops->wr_reg_indirect(ha, s_addr, s_value); in qla83xx_minidump_process_pollrd()
2612 ha->isp_ops->rd_reg_indirect(ha, s_addr, &r_value); in qla83xx_minidump_process_pollrd()
2619 ql4_printk(KERN_ERR, ha, "%s: TIMEOUT\n", in qla83xx_minidump_process_pollrd()
2626 ha->isp_ops->rd_reg_indirect(ha, r_addr, &r_value); in qla83xx_minidump_process_pollrd()
2638 static uint32_t qla4_84xx_minidump_process_rddfe(struct scsi_qla_host *ha, in qla4_84xx_minidump_process_rddfe() argument
2667 ha->isp_ops->wr_reg_indirect(ha, addr1, (0x40000000 | value)); in qla4_84xx_minidump_process_rddfe()
2671 ha->isp_ops->rd_reg_indirect(ha, addr1, &temp); in qla4_84xx_minidump_process_rddfe()
2678 ql4_printk(KERN_ERR, ha, "%s: TIMEOUT\n", __func__); in qla4_84xx_minidump_process_rddfe()
2682 ha->isp_ops->rd_reg_indirect(ha, addr2, &temp); in qla4_84xx_minidump_process_rddfe()
2687 ha->isp_ops->wr_reg_indirect(ha, addr2, wrval); in qla4_84xx_minidump_process_rddfe()
2688 ha->isp_ops->wr_reg_indirect(ha, addr1, value); in qla4_84xx_minidump_process_rddfe()
2692 ha->isp_ops->rd_reg_indirect(ha, addr1, &temp); in qla4_84xx_minidump_process_rddfe()
2698 ql4_printk(KERN_ERR, ha, "%s: TIMEOUT\n", in qla4_84xx_minidump_process_rddfe()
2704 ha->isp_ops->wr_reg_indirect(ha, addr1, in qla4_84xx_minidump_process_rddfe()
2709 ha->isp_ops->rd_reg_indirect(ha, addr1, &temp); in qla4_84xx_minidump_process_rddfe()
2716 ql4_printk(KERN_ERR, ha, "%s: TIMEOUT\n", in qla4_84xx_minidump_process_rddfe()
2722 ha->isp_ops->rd_reg_indirect(ha, addr2, &data); in qla4_84xx_minidump_process_rddfe()
2734 static uint32_t qla4_84xx_minidump_process_rdmdio(struct scsi_qla_host *ha, in qla4_84xx_minidump_process_rdmdio() argument
2762 rval = ql4_84xx_poll_wait_ipmdio_bus_idle(ha, addr1, addr2, in qla4_84xx_minidump_process_rdmdio()
2768 rval = ql4_84xx_ipmdio_wr_reg(ha, addr1, addr3, mask, addr4, in qla4_84xx_minidump_process_rdmdio()
2774 rval = ql4_84xx_ipmdio_wr_reg(ha, addr1, addr3, mask, addr5, in qla4_84xx_minidump_process_rdmdio()
2780 rval = ql4_84xx_ipmdio_wr_reg(ha, addr1, addr3, mask, in qla4_84xx_minidump_process_rdmdio()
2785 rval = ql4_84xx_poll_wait_ipmdio_bus_idle(ha, addr1, addr2, in qla4_84xx_minidump_process_rdmdio()
2791 rval = ql4_84xx_ipmdio_rd_reg(ha, addr1, addr3, in qla4_84xx_minidump_process_rdmdio()
2810 static uint32_t qla4_84xx_minidump_process_pollwr(struct scsi_qla_host *ha, in qla4_84xx_minidump_process_pollwr() argument
2829 ha->isp_ops->rd_reg_indirect(ha, addr1, &r_value); in qla4_84xx_minidump_process_pollwr()
2838 ql4_printk(KERN_ERR, ha, "%s: TIMEOUT\n", __func__); in qla4_84xx_minidump_process_pollwr()
2843 ha->isp_ops->wr_reg_indirect(ha, addr2, value2); in qla4_84xx_minidump_process_pollwr()
2844 ha->isp_ops->wr_reg_indirect(ha, addr1, value1); in qla4_84xx_minidump_process_pollwr()
2848 ha->isp_ops->rd_reg_indirect(ha, addr1, &r_value); in qla4_84xx_minidump_process_pollwr()
2859 static void qla83xx_minidump_process_rdmux2(struct scsi_qla_host *ha, in qla83xx_minidump_process_rdmux2() argument
2877 ha->isp_ops->wr_reg_indirect(ha, sel_addr1, sel_val1); in qla83xx_minidump_process_rdmux2()
2881 ha->isp_ops->wr_reg_indirect(ha, sel_addr2, t_sel_val); in qla83xx_minidump_process_rdmux2()
2882 ha->isp_ops->rd_reg_indirect(ha, read_addr, &data); in qla83xx_minidump_process_rdmux2()
2886 ha->isp_ops->wr_reg_indirect(ha, sel_addr1, sel_val2); in qla83xx_minidump_process_rdmux2()
2890 ha->isp_ops->wr_reg_indirect(ha, sel_addr2, t_sel_val); in qla83xx_minidump_process_rdmux2()
2891 ha->isp_ops->rd_reg_indirect(ha, read_addr, &data); in qla83xx_minidump_process_rdmux2()
2902 static uint32_t qla83xx_minidump_process_pollrdmwr(struct scsi_qla_host *ha, in qla83xx_minidump_process_pollrdmwr() argument
2919 ha->isp_ops->wr_reg_indirect(ha, addr_1, value_1); in qla83xx_minidump_process_pollrdmwr()
2923 ha->isp_ops->rd_reg_indirect(ha, addr_1, &r_value); in qla83xx_minidump_process_pollrdmwr()
2930 ql4_printk(KERN_ERR, ha, "%s: TIMEOUT_1\n", in qla83xx_minidump_process_pollrdmwr()
2938 ha->isp_ops->rd_reg_indirect(ha, addr_2, &data); in qla83xx_minidump_process_pollrdmwr()
2940 ha->isp_ops->wr_reg_indirect(ha, addr_2, data); in qla83xx_minidump_process_pollrdmwr()
2941 ha->isp_ops->wr_reg_indirect(ha, addr_1, value_2); in qla83xx_minidump_process_pollrdmwr()
2945 ha->isp_ops->rd_reg_indirect(ha, addr_1, &r_value); in qla83xx_minidump_process_pollrdmwr()
2952 ql4_printk(KERN_ERR, ha, "%s: TIMEOUT_2\n", in qla83xx_minidump_process_pollrdmwr()
2968 static uint32_t qla4_83xx_minidump_process_rdrom(struct scsi_qla_host *ha, in qla4_83xx_minidump_process_rdrom() argument
2980 DEBUG2(ql4_printk(KERN_INFO, ha, "[%s]: fl_addr: 0x%x, count: 0x%x\n", in qla4_83xx_minidump_process_rdrom()
2983 rval = qla4_83xx_lockless_flash_read_u32(ha, fl_addr, in qla4_83xx_minidump_process_rdrom()
2987 ql4_printk(KERN_ERR, ha, "%s: Flash Read Error,Count=%d\n", in qla4_83xx_minidump_process_rdrom()
3003 static int qla4_8xxx_collect_md_data(struct scsi_qla_host *ha) in qla4_8xxx_collect_md_data() argument
3014 ha->fw_dump_skip_size = 0; in qla4_8xxx_collect_md_data()
3015 if (!ha->fw_dump) { in qla4_8xxx_collect_md_data()
3016 ql4_printk(KERN_INFO, ha, "%s(%ld) No buffer to dump\n", in qla4_8xxx_collect_md_data()
3017 __func__, ha->host_no); in qla4_8xxx_collect_md_data()
3022 ha->fw_dump_tmplt_hdr; in qla4_8xxx_collect_md_data()
3023 data_ptr = (uint32_t *)((uint8_t *)ha->fw_dump + in qla4_8xxx_collect_md_data()
3024 ha->fw_dump_tmplt_size); in qla4_8xxx_collect_md_data()
3025 data_collected += ha->fw_dump_tmplt_size; in qla4_8xxx_collect_md_data()
3028 ql4_printk(KERN_INFO, ha, "[%s]: starting data ptr: %p\n", in qla4_8xxx_collect_md_data()
3030 ql4_printk(KERN_INFO, ha, in qla4_8xxx_collect_md_data()
3033 ql4_printk(KERN_INFO, ha, "[%s]: Capture Mask obtained: 0x%x\n", in qla4_8xxx_collect_md_data()
3034 __func__, ha->fw_dump_capture_mask); in qla4_8xxx_collect_md_data()
3035 ql4_printk(KERN_INFO, ha, "[%s]: Total_data_size 0x%x, %d obtained\n", in qla4_8xxx_collect_md_data()
3036 __func__, ha->fw_dump_size, ha->fw_dump_size); in qla4_8xxx_collect_md_data()
3044 (((uint8_t *)ha->fw_dump_tmplt_hdr) + in qla4_8xxx_collect_md_data()
3047 if (is_qla8032(ha) || is_qla8042(ha)) in qla4_8xxx_collect_md_data()
3049 tmplt_hdr->ocm_window_reg[ha->func_num]; in qla4_8xxx_collect_md_data()
3053 if (data_collected > ha->fw_dump_size) { in qla4_8xxx_collect_md_data()
3054 ql4_printk(KERN_INFO, ha, in qla4_8xxx_collect_md_data()
3056 data_collected, ha->fw_dump_size); in qla4_8xxx_collect_md_data()
3061 ha->fw_dump_capture_mask)) { in qla4_8xxx_collect_md_data()
3067 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_collect_md_data()
3070 (ha->fw_dump_size - data_collected))); in qla4_8xxx_collect_md_data()
3077 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3080 rval = qla4_8xxx_minidump_process_control(ha, in qla4_8xxx_collect_md_data()
3083 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3088 qla4_8xxx_minidump_process_rdcrb(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3092 rval = qla4_8xxx_minidump_process_rdmem(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3095 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3101 if (is_qla8022(ha)) { in qla4_8xxx_collect_md_data()
3102 qla4_82xx_minidump_process_rdrom(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3104 } else if (is_qla8032(ha) || is_qla8042(ha)) { in qla4_8xxx_collect_md_data()
3105 rval = qla4_83xx_minidump_process_rdrom(ha, in qla4_8xxx_collect_md_data()
3109 qla4_8xxx_mark_entry_skipped(ha, in qla4_8xxx_collect_md_data()
3118 rval = qla4_8xxx_minidump_process_l2tag(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3121 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3129 qla4_8xxx_minidump_process_l1cache(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3133 qla4_8xxx_minidump_process_rdocm(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3137 qla4_8xxx_minidump_process_rdmux(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3141 qla4_8xxx_minidump_process_queue(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3145 if (is_qla8022(ha)) { in qla4_8xxx_collect_md_data()
3146 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3149 rval = qla83xx_minidump_process_pollrd(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3152 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3155 if (is_qla8022(ha)) { in qla4_8xxx_collect_md_data()
3156 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3159 qla83xx_minidump_process_rdmux2(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3163 if (is_qla8022(ha)) { in qla4_8xxx_collect_md_data()
3164 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3167 rval = qla83xx_minidump_process_pollrdmwr(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3170 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3173 rval = qla4_84xx_minidump_process_rddfe(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3176 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3179 rval = qla4_84xx_minidump_process_rdmdio(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3182 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3185 rval = qla4_84xx_minidump_process_pollwr(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3188 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3192 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3196 data_collected = (uint8_t *)data_ptr - (uint8_t *)ha->fw_dump; in qla4_8xxx_collect_md_data()
3204 if ((data_collected + ha->fw_dump_skip_size) != ha->fw_dump_size) { in qla4_8xxx_collect_md_data()
3205 ql4_printk(KERN_INFO, ha, in qla4_8xxx_collect_md_data()
3207 data_collected, ha->fw_dump_size); in qla4_8xxx_collect_md_data()
3212 DEBUG2(ql4_printk(KERN_INFO, ha, "Leaving fn: %s Last entry: 0x%x\n", in qla4_8xxx_collect_md_data()
3222 static void qla4_8xxx_uevent_emit(struct scsi_qla_host *ha, u32 code) in qla4_8xxx_uevent_emit() argument
3230 ha->host_no); in qla4_8xxx_uevent_emit()
3237 kobject_uevent_env(&(&ha->pdev->dev)->kobj, KOBJ_CHANGE, envp); in qla4_8xxx_uevent_emit()
3240 void qla4_8xxx_get_minidump(struct scsi_qla_host *ha) in qla4_8xxx_get_minidump() argument
3242 if (ql4xenablemd && test_bit(AF_FW_RECOVERY, &ha->flags) && in qla4_8xxx_get_minidump()
3243 !test_bit(AF_82XX_FW_DUMPED, &ha->flags)) { in qla4_8xxx_get_minidump()
3244 if (!qla4_8xxx_collect_md_data(ha)) { in qla4_8xxx_get_minidump()
3245 qla4_8xxx_uevent_emit(ha, QL4_UEVENT_CODE_FW_DUMP); in qla4_8xxx_get_minidump()
3246 set_bit(AF_82XX_FW_DUMPED, &ha->flags); in qla4_8xxx_get_minidump()
3248 ql4_printk(KERN_INFO, ha, "%s: Unable to collect minidump\n", in qla4_8xxx_get_minidump()
3260 int qla4_8xxx_device_bootstrap(struct scsi_qla_host *ha) in qla4_8xxx_device_bootstrap() argument
3267 need_reset = ha->isp_ops->need_reset(ha); in qla4_8xxx_device_bootstrap()
3271 if (test_bit(AF_FW_RECOVERY, &ha->flags)) in qla4_8xxx_device_bootstrap()
3272 ha->isp_ops->rom_lock_recovery(ha); in qla4_8xxx_device_bootstrap()
3274 old_count = qla4_8xxx_rd_direct(ha, QLA8XXX_PEG_ALIVE_COUNTER); in qla4_8xxx_device_bootstrap()
3277 count = qla4_8xxx_rd_direct(ha, in qla4_8xxx_device_bootstrap()
3284 ha->isp_ops->rom_lock_recovery(ha); in qla4_8xxx_device_bootstrap()
3288 ql4_printk(KERN_INFO, ha, "HW State: INITIALIZING\n"); in qla4_8xxx_device_bootstrap()
3289 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DEV_STATE, in qla4_8xxx_device_bootstrap()
3292 ha->isp_ops->idc_unlock(ha); in qla4_8xxx_device_bootstrap()
3294 if (is_qla8022(ha)) in qla4_8xxx_device_bootstrap()
3295 qla4_8xxx_get_minidump(ha); in qla4_8xxx_device_bootstrap()
3297 rval = ha->isp_ops->restart_firmware(ha); in qla4_8xxx_device_bootstrap()
3298 ha->isp_ops->idc_lock(ha); in qla4_8xxx_device_bootstrap()
3301 ql4_printk(KERN_INFO, ha, "HW State: FAILED\n"); in qla4_8xxx_device_bootstrap()
3302 qla4_8xxx_clear_drv_active(ha); in qla4_8xxx_device_bootstrap()
3303 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DEV_STATE, in qla4_8xxx_device_bootstrap()
3309 ql4_printk(KERN_INFO, ha, "HW State: READY\n"); in qla4_8xxx_device_bootstrap()
3310 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DEV_STATE, QLA8XXX_DEV_READY); in qla4_8xxx_device_bootstrap()
3322 qla4_82xx_need_reset_handler(struct scsi_qla_host *ha) in qla4_82xx_need_reset_handler() argument
3328 ql4_printk(KERN_INFO, ha, in qla4_82xx_need_reset_handler()
3331 if (test_and_clear_bit(AF_ONLINE, &ha->flags)) { in qla4_82xx_need_reset_handler()
3332 qla4_82xx_idc_unlock(ha); in qla4_82xx_need_reset_handler()
3333 ha->isp_ops->disable_intrs(ha); in qla4_82xx_need_reset_handler()
3334 qla4_82xx_idc_lock(ha); in qla4_82xx_need_reset_handler()
3337 if (!test_bit(AF_8XXX_RST_OWNER, &ha->flags)) { in qla4_82xx_need_reset_handler()
3338 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_82xx_need_reset_handler()
3340 __func__, ha->host_no)); in qla4_82xx_need_reset_handler()
3341 qla4_8xxx_set_rst_ready(ha); in qla4_82xx_need_reset_handler()
3343 active_mask = (~(1 << (ha->func_num * 4))); in qla4_82xx_need_reset_handler()
3347 reset_timeout = jiffies + (ha->nx_reset_timeout * HZ); in qla4_82xx_need_reset_handler()
3349 drv_state = qla4_82xx_rd_32(ha, QLA82XX_CRB_DRV_STATE); in qla4_82xx_need_reset_handler()
3350 drv_active = qla4_82xx_rd_32(ha, QLA82XX_CRB_DRV_ACTIVE); in qla4_82xx_need_reset_handler()
3352 ql4_printk(KERN_INFO, ha, in qla4_82xx_need_reset_handler()
3354 __func__, ha->host_no, drv_state, drv_active); in qla4_82xx_need_reset_handler()
3358 ql4_printk(KERN_INFO, ha, in qla4_82xx_need_reset_handler()
3368 if (test_bit(AF_8XXX_RST_OWNER, &ha->flags)) { in qla4_82xx_need_reset_handler()
3369 ql4_printk(KERN_INFO, ha, in qla4_82xx_need_reset_handler()
3371 __func__, ha->host_no, drv_state, in qla4_82xx_need_reset_handler()
3374 qla4_82xx_idc_unlock(ha); in qla4_82xx_need_reset_handler()
3376 qla4_82xx_idc_lock(ha); in qla4_82xx_need_reset_handler()
3378 drv_state = qla4_82xx_rd_32(ha, QLA82XX_CRB_DRV_STATE); in qla4_82xx_need_reset_handler()
3379 drv_active = qla4_82xx_rd_32(ha, QLA82XX_CRB_DRV_ACTIVE); in qla4_82xx_need_reset_handler()
3383 clear_bit(AF_8XXX_RST_OWNER, &ha->flags); in qla4_82xx_need_reset_handler()
3385 dev_state = qla4_82xx_rd_32(ha, QLA82XX_CRB_DEV_STATE); in qla4_82xx_need_reset_handler()
3386 ql4_printk(KERN_INFO, ha, "Device state is 0x%x = %s\n", dev_state, in qla4_82xx_need_reset_handler()
3391 ql4_printk(KERN_INFO, ha, "HW State: COLD/RE-INIT\n"); in qla4_82xx_need_reset_handler()
3392 qla4_82xx_wr_32(ha, QLA82XX_CRB_DEV_STATE, QLA8XXX_DEV_COLD); in qla4_82xx_need_reset_handler()
3393 qla4_8xxx_set_rst_ready(ha); in qla4_82xx_need_reset_handler()
3402 qla4_8xxx_need_qsnt_handler(struct scsi_qla_host *ha) in qla4_8xxx_need_qsnt_handler() argument
3404 ha->isp_ops->idc_lock(ha); in qla4_8xxx_need_qsnt_handler()
3405 qla4_8xxx_set_qsnt_ready(ha); in qla4_8xxx_need_qsnt_handler()
3406 ha->isp_ops->idc_unlock(ha); in qla4_8xxx_need_qsnt_handler()
3409 static void qla4_82xx_set_idc_ver(struct scsi_qla_host *ha) in qla4_82xx_set_idc_ver() argument
3414 drv_active = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_ACTIVE); in qla4_82xx_set_idc_ver()
3415 if (drv_active == (1 << (ha->func_num * 4))) { in qla4_82xx_set_idc_ver()
3416 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DRV_IDC_VERSION, in qla4_82xx_set_idc_ver()
3418 ql4_printk(KERN_INFO, ha, in qla4_82xx_set_idc_ver()
3422 idc_ver = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_IDC_VERSION); in qla4_82xx_set_idc_ver()
3424 ql4_printk(KERN_INFO, ha, in qla4_82xx_set_idc_ver()
3431 static int qla4_83xx_set_idc_ver(struct scsi_qla_host *ha) in qla4_83xx_set_idc_ver() argument
3437 drv_active = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_ACTIVE); in qla4_83xx_set_idc_ver()
3438 if (drv_active == (1 << ha->func_num)) { in qla4_83xx_set_idc_ver()
3439 idc_ver = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_IDC_VERSION); in qla4_83xx_set_idc_ver()
3442 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DRV_IDC_VERSION, idc_ver); in qla4_83xx_set_idc_ver()
3443 ql4_printk(KERN_INFO, ha, in qla4_83xx_set_idc_ver()
3447 idc_ver = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_IDC_VERSION); in qla4_83xx_set_idc_ver()
3450 ql4_printk(KERN_INFO, ha, in qla4_83xx_set_idc_ver()
3460 idc_ver = qla4_83xx_rd_reg(ha, QLA83XX_CRB_IDC_VER_MINOR); in qla4_83xx_set_idc_ver()
3461 idc_ver &= ~(0x03 << (ha->func_num * 2)); in qla4_83xx_set_idc_ver()
3462 idc_ver |= (QLA83XX_IDC_VER_MIN_VALUE << (ha->func_num * 2)); in qla4_83xx_set_idc_ver()
3463 qla4_83xx_wr_reg(ha, QLA83XX_CRB_IDC_VER_MINOR, idc_ver); in qla4_83xx_set_idc_ver()
3469 int qla4_8xxx_update_idc_reg(struct scsi_qla_host *ha) in qla4_8xxx_update_idc_reg() argument
3474 if (test_bit(AF_INIT_DONE, &ha->flags)) in qla4_8xxx_update_idc_reg()
3477 ha->isp_ops->idc_lock(ha); in qla4_8xxx_update_idc_reg()
3478 qla4_8xxx_set_drv_active(ha); in qla4_8xxx_update_idc_reg()
3484 if (is_qla8032(ha) || is_qla8042(ha)) { in qla4_8xxx_update_idc_reg()
3485 drv_active = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_ACTIVE); in qla4_8xxx_update_idc_reg()
3486 if ((drv_active == (1 << ha->func_num)) && !ql4xdontresethba) in qla4_8xxx_update_idc_reg()
3487 qla4_83xx_clear_idc_dontreset(ha); in qla4_8xxx_update_idc_reg()
3490 if (is_qla8022(ha)) { in qla4_8xxx_update_idc_reg()
3491 qla4_82xx_set_idc_ver(ha); in qla4_8xxx_update_idc_reg()
3492 } else if (is_qla8032(ha) || is_qla8042(ha)) { in qla4_8xxx_update_idc_reg()
3493 rval = qla4_83xx_set_idc_ver(ha); in qla4_8xxx_update_idc_reg()
3495 qla4_8xxx_clear_drv_active(ha); in qla4_8xxx_update_idc_reg()
3498 ha->isp_ops->idc_unlock(ha); in qla4_8xxx_update_idc_reg()
3510 int qla4_8xxx_device_state_handler(struct scsi_qla_host *ha) in qla4_8xxx_device_state_handler() argument
3516 rval = qla4_8xxx_update_idc_reg(ha); in qla4_8xxx_device_state_handler()
3520 dev_state = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DEV_STATE); in qla4_8xxx_device_state_handler()
3521 DEBUG2(ql4_printk(KERN_INFO, ha, "Device state is 0x%x = %s\n", in qla4_8xxx_device_state_handler()
3526 dev_init_timeout = jiffies + (ha->nx_dev_init_timeout * HZ); in qla4_8xxx_device_state_handler()
3528 ha->isp_ops->idc_lock(ha); in qla4_8xxx_device_state_handler()
3532 ql4_printk(KERN_WARNING, ha, in qla4_8xxx_device_state_handler()
3537 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DEV_STATE, in qla4_8xxx_device_state_handler()
3541 dev_state = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DEV_STATE); in qla4_8xxx_device_state_handler()
3542 ql4_printk(KERN_INFO, ha, "Device state is 0x%x = %s\n", in qla4_8xxx_device_state_handler()
3551 rval = qla4_8xxx_device_bootstrap(ha); in qla4_8xxx_device_state_handler()
3554 ha->isp_ops->idc_unlock(ha); in qla4_8xxx_device_state_handler()
3556 ha->isp_ops->idc_lock(ha); in qla4_8xxx_device_state_handler()
3564 if (is_qla8032(ha) || is_qla8042(ha)) { in qla4_8xxx_device_state_handler()
3565 qla4_83xx_need_reset_handler(ha); in qla4_8xxx_device_state_handler()
3566 } else if (is_qla8022(ha)) { in qla4_8xxx_device_state_handler()
3568 qla4_82xx_need_reset_handler(ha); in qla4_8xxx_device_state_handler()
3572 (ha->nx_dev_init_timeout * HZ); in qla4_8xxx_device_state_handler()
3574 ha->isp_ops->idc_unlock(ha); in qla4_8xxx_device_state_handler()
3576 ha->isp_ops->idc_lock(ha); in qla4_8xxx_device_state_handler()
3582 qla4_8xxx_need_qsnt_handler(ha); in qla4_8xxx_device_state_handler()
3585 ha->isp_ops->idc_unlock(ha); in qla4_8xxx_device_state_handler()
3587 ha->isp_ops->idc_lock(ha); in qla4_8xxx_device_state_handler()
3590 ha->isp_ops->idc_unlock(ha); in qla4_8xxx_device_state_handler()
3591 qla4xxx_dead_adapter_cleanup(ha); in qla4_8xxx_device_state_handler()
3593 ha->isp_ops->idc_lock(ha); in qla4_8xxx_device_state_handler()
3596 ha->isp_ops->idc_unlock(ha); in qla4_8xxx_device_state_handler()
3597 qla4xxx_dead_adapter_cleanup(ha); in qla4_8xxx_device_state_handler()
3599 ha->isp_ops->idc_lock(ha); in qla4_8xxx_device_state_handler()
3604 ha->isp_ops->idc_unlock(ha); in qla4_8xxx_device_state_handler()
3609 int qla4_8xxx_load_risc(struct scsi_qla_host *ha) in qla4_8xxx_load_risc() argument
3614 if (is_qla8032(ha) || is_qla8042(ha)) { in qla4_8xxx_load_risc()
3615 writel(0, &ha->qla4_83xx_reg->risc_intr); in qla4_8xxx_load_risc()
3616 readl(&ha->qla4_83xx_reg->risc_intr); in qla4_8xxx_load_risc()
3617 } else if (is_qla8022(ha)) { in qla4_8xxx_load_risc()
3618 writel(0, &ha->qla4_82xx_reg->host_int); in qla4_8xxx_load_risc()
3619 readl(&ha->qla4_82xx_reg->host_int); in qla4_8xxx_load_risc()
3622 retval = qla4_8xxx_device_state_handler(ha); in qla4_8xxx_load_risc()
3626 qla4xxx_init_rings(ha); in qla4_8xxx_load_risc()
3628 if (retval == QLA_SUCCESS && !test_bit(AF_IRQ_ATTACHED, &ha->flags)) in qla4_8xxx_load_risc()
3629 retval = qla4xxx_request_irqs(ha); in qla4_8xxx_load_risc()
3658 qla4_82xx_read_flash_data(struct scsi_qla_host *ha, uint32_t *dwptr, in qla4_82xx_read_flash_data() argument
3664 while ((qla4_82xx_rom_lock(ha) != 0) && (loops < 50000)) { in qla4_82xx_read_flash_data()
3670 ql4_printk(KERN_WARNING, ha, "ROM lock failed\n"); in qla4_82xx_read_flash_data()
3676 if (qla4_82xx_do_rom_fast_read(ha, faddr, &val)) { in qla4_82xx_read_flash_data()
3677 ql4_printk(KERN_WARNING, ha, in qla4_82xx_read_flash_data()
3685 qla4_82xx_rom_unlock(ha); in qla4_82xx_read_flash_data()
3693 qla4_82xx_read_optrom_data(struct scsi_qla_host *ha, uint8_t *buf, in qla4_82xx_read_optrom_data() argument
3696 qla4_82xx_read_flash_data(ha, (uint32_t *)buf, offset, length); in qla4_82xx_read_optrom_data()
3701 qla4_8xxx_find_flt_start(struct scsi_qla_host *ha, uint32_t *start) in qla4_8xxx_find_flt_start() argument
3713 DEBUG2(ql4_printk(KERN_INFO, ha, "FLTL[%s] = 0x%x.\n", loc, *start)); in qla4_8xxx_find_flt_start()
3718 qla4_8xxx_get_flt_info(struct scsi_qla_host *ha, uint32_t flt_addr) in qla4_8xxx_get_flt_info() argument
3726 struct ql82xx_hw_data *hw = &ha->hw; in qla4_8xxx_get_flt_info()
3729 wptr = (uint16_t *)ha->request_ring; in qla4_8xxx_get_flt_info()
3730 flt = (struct qla_flt_header *)ha->request_ring; in qla4_8xxx_get_flt_info()
3733 if (is_qla8022(ha)) { in qla4_8xxx_get_flt_info()
3734 qla4_82xx_read_optrom_data(ha, (uint8_t *)ha->request_ring, in qla4_8xxx_get_flt_info()
3736 } else if (is_qla8032(ha) || is_qla8042(ha)) { in qla4_8xxx_get_flt_info()
3737 status = qla4_83xx_flash_read_u32(ha, flt_addr << 2, in qla4_8xxx_get_flt_info()
3738 (uint8_t *)ha->request_ring, in qla4_8xxx_get_flt_info()
3747 DEBUG2(ql4_printk(KERN_INFO, ha, "Unsupported FLT detected: " in qla4_8xxx_get_flt_info()
3758 DEBUG2(ql4_printk(KERN_INFO, ha, "Inconsistent FLT detected: " in qla4_8xxx_get_flt_info()
3771 DEBUG3(ql4_printk(KERN_DEBUG, ha, "FLT[%02x]: start=0x%x " in qla4_8xxx_get_flt_info()
3818 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_get_flt_info()
3828 qla4_82xx_get_fdt_info(struct scsi_qla_host *ha) in qla4_82xx_get_fdt_info() argument
3839 struct ql82xx_hw_data *hw = &ha->hw; in qla4_82xx_get_fdt_info()
3844 wptr = (uint16_t *)ha->request_ring; in qla4_82xx_get_fdt_info()
3845 fdt = (struct qla_fdt_layout *)ha->request_ring; in qla4_82xx_get_fdt_info()
3846 qla4_82xx_read_optrom_data(ha, (uint8_t *)ha->request_ring, in qla4_82xx_get_fdt_info()
3861 DEBUG2(ql4_printk(KERN_INFO, ha, "Inconsistent FDT detected: " in qla4_82xx_get_fdt_info()
3887 DEBUG2(ql4_printk(KERN_INFO, ha, "FDT[%s]: (0x%x/0x%x) erase=0x%x " in qla4_82xx_get_fdt_info()
3895 qla4_82xx_get_idc_param(struct scsi_qla_host *ha) in qla4_82xx_get_idc_param() argument
3900 if (!is_qla8022(ha)) in qla4_82xx_get_idc_param()
3902 wptr = (uint32_t *)ha->request_ring; in qla4_82xx_get_idc_param()
3903 qla4_82xx_read_optrom_data(ha, (uint8_t *)ha->request_ring, in qla4_82xx_get_idc_param()
3907 ha->nx_dev_init_timeout = ROM_DEV_INIT_TIMEOUT; in qla4_82xx_get_idc_param()
3908 ha->nx_reset_timeout = ROM_DRV_RESET_ACK_TIMEOUT; in qla4_82xx_get_idc_param()
3910 ha->nx_dev_init_timeout = le32_to_cpu(*wptr++); in qla4_82xx_get_idc_param()
3911 ha->nx_reset_timeout = le32_to_cpu(*wptr); in qla4_82xx_get_idc_param()
3914 DEBUG2(ql4_printk(KERN_DEBUG, ha, in qla4_82xx_get_idc_param()
3915 "ha->nx_dev_init_timeout = %d\n", ha->nx_dev_init_timeout)); in qla4_82xx_get_idc_param()
3916 DEBUG2(ql4_printk(KERN_DEBUG, ha, in qla4_82xx_get_idc_param()
3917 "ha->nx_reset_timeout = %d\n", ha->nx_reset_timeout)); in qla4_82xx_get_idc_param()
3921 void qla4_82xx_queue_mbox_cmd(struct scsi_qla_host *ha, uint32_t *mbx_cmd, in qla4_82xx_queue_mbox_cmd() argument
3928 writel(mbx_cmd[i], &ha->qla4_82xx_reg->mailbox_in[i]); in qla4_82xx_queue_mbox_cmd()
3931 writel(mbx_cmd[0], &ha->qla4_82xx_reg->mailbox_in[0]); in qla4_82xx_queue_mbox_cmd()
3932 readl(&ha->qla4_82xx_reg->mailbox_in[0]); in qla4_82xx_queue_mbox_cmd()
3933 writel(HINT_MBX_INT_PENDING, &ha->qla4_82xx_reg->hint); in qla4_82xx_queue_mbox_cmd()
3934 readl(&ha->qla4_82xx_reg->hint); in qla4_82xx_queue_mbox_cmd()
3937 void qla4_82xx_process_mbox_intr(struct scsi_qla_host *ha, int out_count) in qla4_82xx_process_mbox_intr() argument
3941 intr_status = readl(&ha->qla4_82xx_reg->host_int); in qla4_82xx_process_mbox_intr()
3943 ha->mbox_status_count = out_count; in qla4_82xx_process_mbox_intr()
3944 intr_status = readl(&ha->qla4_82xx_reg->host_status); in qla4_82xx_process_mbox_intr()
3945 ha->isp_ops->interrupt_service_routine(ha, intr_status); in qla4_82xx_process_mbox_intr()
3947 if (test_bit(AF_INTERRUPTS_ON, &ha->flags) && in qla4_82xx_process_mbox_intr()
3948 test_bit(AF_INTx_ENABLED, &ha->flags)) in qla4_82xx_process_mbox_intr()
3949 qla4_82xx_wr_32(ha, ha->nx_legacy_intr.tgt_mask_reg, in qla4_82xx_process_mbox_intr()
3955 qla4_8xxx_get_flash_info(struct scsi_qla_host *ha) in qla4_8xxx_get_flash_info() argument
3960 ret = qla4_8xxx_find_flt_start(ha, &flt_addr); in qla4_8xxx_get_flash_info()
3964 qla4_8xxx_get_flt_info(ha, flt_addr); in qla4_8xxx_get_flash_info()
3965 if (is_qla8022(ha)) { in qla4_8xxx_get_flash_info()
3966 qla4_82xx_get_fdt_info(ha); in qla4_8xxx_get_flash_info()
3967 qla4_82xx_get_idc_param(ha); in qla4_8xxx_get_flash_info()
3968 } else if (is_qla8032(ha) || is_qla8042(ha)) { in qla4_8xxx_get_flash_info()
3969 qla4_83xx_get_idc_param(ha); in qla4_8xxx_get_flash_info()
3985 qla4_8xxx_stop_firmware(struct scsi_qla_host *ha) in qla4_8xxx_stop_firmware() argument
3995 status = qla4xxx_mailbox_command(ha, MBOX_REG_COUNT, 1, in qla4_8xxx_stop_firmware()
3998 DEBUG2(printk("scsi%ld: %s: status = %d\n", ha->host_no, in qla4_8xxx_stop_firmware()
4008 qla4_82xx_isp_reset(struct scsi_qla_host *ha) in qla4_82xx_isp_reset() argument
4013 qla4_82xx_idc_lock(ha); in qla4_82xx_isp_reset()
4014 dev_state = qla4_82xx_rd_32(ha, QLA82XX_CRB_DEV_STATE); in qla4_82xx_isp_reset()
4017 ql4_printk(KERN_INFO, ha, "HW State: NEED RESET\n"); in qla4_82xx_isp_reset()
4018 qla4_82xx_wr_32(ha, QLA82XX_CRB_DEV_STATE, in qla4_82xx_isp_reset()
4020 set_bit(AF_8XXX_RST_OWNER, &ha->flags); in qla4_82xx_isp_reset()
4022 ql4_printk(KERN_INFO, ha, "HW State: DEVICE INITIALIZING\n"); in qla4_82xx_isp_reset()
4024 qla4_82xx_idc_unlock(ha); in qla4_82xx_isp_reset()
4026 rval = qla4_8xxx_device_state_handler(ha); in qla4_82xx_isp_reset()
4028 qla4_82xx_idc_lock(ha); in qla4_82xx_isp_reset()
4029 qla4_8xxx_clear_rst_ready(ha); in qla4_82xx_isp_reset()
4030 qla4_82xx_idc_unlock(ha); in qla4_82xx_isp_reset()
4033 ql4_printk(KERN_INFO, ha, "Clearing AF_RECOVERY in qla4_82xx_isp_reset\n"); in qla4_82xx_isp_reset()
4034 clear_bit(AF_FW_RECOVERY, &ha->flags); in qla4_82xx_isp_reset()
4045 int qla4_8xxx_get_sys_info(struct scsi_qla_host *ha) in qla4_8xxx_get_sys_info() argument
4053 sys_info = dma_alloc_coherent(&ha->pdev->dev, sizeof(*sys_info), in qla4_8xxx_get_sys_info()
4057 ha->host_no, __func__)); in qla4_8xxx_get_sys_info()
4070 if (qla4xxx_mailbox_command(ha, MBOX_REG_COUNT, 6, &mbox_cmd[0], in qla4_8xxx_get_sys_info()
4073 ha->host_no, __func__)); in qla4_8xxx_get_sys_info()
4078 if (((is_qla8032(ha) || is_qla8042(ha)) ? mbox_sts[3] : mbox_sts[4]) < in qla4_8xxx_get_sys_info()
4081 " error (%x)\n", ha->host_no, __func__, mbox_sts[4])); in qla4_8xxx_get_sys_info()
4086 ha->port_num = sys_info->port_num; in qla4_8xxx_get_sys_info()
4087 memcpy(ha->my_mac, &sys_info->mac_addr[0], in qla4_8xxx_get_sys_info()
4088 min(sizeof(ha->my_mac), sizeof(sys_info->mac_addr))); in qla4_8xxx_get_sys_info()
4089 memcpy(ha->serial_number, &sys_info->serial_number, in qla4_8xxx_get_sys_info()
4090 min(sizeof(ha->serial_number), sizeof(sys_info->serial_number))); in qla4_8xxx_get_sys_info()
4091 memcpy(ha->model_name, &sys_info->board_id_str, in qla4_8xxx_get_sys_info()
4092 min(sizeof(ha->model_name), sizeof(sys_info->board_id_str))); in qla4_8xxx_get_sys_info()
4093 ha->phy_port_cnt = sys_info->phys_port_cnt; in qla4_8xxx_get_sys_info()
4094 ha->phy_port_num = sys_info->port_num; in qla4_8xxx_get_sys_info()
4095 ha->iscsi_pci_func_cnt = sys_info->iscsi_pci_func_cnt; in qla4_8xxx_get_sys_info()
4099 "serial %s\n", ha->host_no, __func__, in qla4_8xxx_get_sys_info()
4100 ha->my_mac[0], ha->my_mac[1], ha->my_mac[2], in qla4_8xxx_get_sys_info()
4101 ha->my_mac[3], ha->my_mac[4], ha->my_mac[5], in qla4_8xxx_get_sys_info()
4102 ha->serial_number)); in qla4_8xxx_get_sys_info()
4107 dma_free_coherent(&ha->pdev->dev, sizeof(*sys_info), sys_info, in qla4_8xxx_get_sys_info()
4114 int qla4_8xxx_intr_enable(struct scsi_qla_host *ha) in qla4_8xxx_intr_enable() argument
4119 DEBUG2(ql4_printk(KERN_INFO, ha, "%s\n", __func__)); in qla4_8xxx_intr_enable()
4125 if (qla4xxx_mailbox_command(ha, MBOX_REG_COUNT, 1, &mbox_cmd[0], in qla4_8xxx_intr_enable()
4127 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_intr_enable()
4135 int qla4_8xxx_intr_disable(struct scsi_qla_host *ha) in qla4_8xxx_intr_disable() argument
4140 DEBUG2(ql4_printk(KERN_INFO, ha, "%s\n", __func__)); in qla4_8xxx_intr_disable()
4146 if (qla4xxx_mailbox_command(ha, MBOX_REG_COUNT, 1, &mbox_cmd[0], in qla4_8xxx_intr_disable()
4148 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_intr_disable()
4158 qla4_82xx_enable_intrs(struct scsi_qla_host *ha) in qla4_82xx_enable_intrs() argument
4160 qla4_8xxx_intr_enable(ha); in qla4_82xx_enable_intrs()
4162 spin_lock_irq(&ha->hardware_lock); in qla4_82xx_enable_intrs()
4164 qla4_82xx_wr_32(ha, ha->nx_legacy_intr.tgt_mask_reg, 0xfbff); in qla4_82xx_enable_intrs()
4165 spin_unlock_irq(&ha->hardware_lock); in qla4_82xx_enable_intrs()
4166 set_bit(AF_INTERRUPTS_ON, &ha->flags); in qla4_82xx_enable_intrs()
4170 qla4_82xx_disable_intrs(struct scsi_qla_host *ha) in qla4_82xx_disable_intrs() argument
4172 if (test_and_clear_bit(AF_INTERRUPTS_ON, &ha->flags)) in qla4_82xx_disable_intrs()
4173 qla4_8xxx_intr_disable(ha); in qla4_82xx_disable_intrs()
4175 spin_lock_irq(&ha->hardware_lock); in qla4_82xx_disable_intrs()
4177 qla4_82xx_wr_32(ha, ha->nx_legacy_intr.tgt_mask_reg, 0x0400); in qla4_82xx_disable_intrs()
4178 spin_unlock_irq(&ha->hardware_lock); in qla4_82xx_disable_intrs()
4197 qla4_8xxx_disable_msix(struct scsi_qla_host *ha) in qla4_8xxx_disable_msix() argument
4203 qentry = &ha->msix_entries[qla4_8xxx_msix_entries[i].index]; in qla4_8xxx_disable_msix()
4205 free_irq(qentry->msix_vector, ha); in qla4_8xxx_disable_msix()
4206 DEBUG2(ql4_printk(KERN_INFO, ha, "%s: %s\n", in qla4_8xxx_disable_msix()
4210 pci_disable_msix(ha->pdev); in qla4_8xxx_disable_msix()
4211 clear_bit(AF_MSIX_ENABLED, &ha->flags); in qla4_8xxx_disable_msix()
4215 qla4_8xxx_enable_msix(struct scsi_qla_host *ha) in qla4_8xxx_enable_msix() argument
4224 ret = pci_enable_msix_exact(ha->pdev, entries, ARRAY_SIZE(entries)); in qla4_8xxx_enable_msix()
4226 ql4_printk(KERN_WARNING, ha, in qla4_8xxx_enable_msix()
4231 set_bit(AF_MSIX_ENABLED, &ha->flags); in qla4_8xxx_enable_msix()
4234 qentry = &ha->msix_entries[qla4_8xxx_msix_entries[i].index]; in qla4_8xxx_enable_msix()
4240 qla4_8xxx_msix_entries[i].name, ha); in qla4_8xxx_enable_msix()
4242 ql4_printk(KERN_WARNING, ha, in qla4_8xxx_enable_msix()
4245 qla4_8xxx_disable_msix(ha); in qla4_8xxx_enable_msix()
4249 DEBUG2(ql4_printk(KERN_INFO, ha, "%s: %s\n", in qla4_8xxx_enable_msix()
4256 int qla4_8xxx_check_init_adapter_retry(struct scsi_qla_host *ha) in qla4_8xxx_check_init_adapter_retry() argument
4261 if (!test_bit(AF_IRQ_ATTACHED, &ha->flags)) { in qla4_8xxx_check_init_adapter_retry()
4262 …ql4_printk(KERN_WARNING, ha, "%s: Skipping retry of adapter initialization as IRQs are not attache… in qla4_8xxx_check_init_adapter_retry()
4271 qla4xxx_free_irqs(ha); in qla4_8xxx_check_init_adapter_retry()