Lines Matching refs:ha
38 qla4_8xxx_pci_base_offsetfset(struct scsi_qla_host *ha, unsigned long off) in qla4_8xxx_pci_base_offsetfset() argument
40 if ((off < ha->first_page_group_end) && in qla4_8xxx_pci_base_offsetfset()
41 (off >= ha->first_page_group_start)) in qla4_8xxx_pci_base_offsetfset()
42 return (void __iomem *)(ha->nx_pcibase + off); in qla4_8xxx_pci_base_offsetfset()
359 qla4_82xx_pci_set_crbwindow_2M(struct scsi_qla_host *ha, ulong *off) in qla4_82xx_pci_set_crbwindow_2M() argument
363 ha->crb_win = CRB_HI(*off); in qla4_82xx_pci_set_crbwindow_2M()
364 writel(ha->crb_win, in qla4_82xx_pci_set_crbwindow_2M()
365 (void __iomem *)(CRB_WINDOW_2M + ha->nx_pcibase)); in qla4_82xx_pci_set_crbwindow_2M()
369 win_read = readl((void __iomem *)(CRB_WINDOW_2M + ha->nx_pcibase)); in qla4_82xx_pci_set_crbwindow_2M()
370 if (win_read != ha->crb_win) { in qla4_82xx_pci_set_crbwindow_2M()
371 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_82xx_pci_set_crbwindow_2M()
373 " off=0x%lx\n", __func__, ha->crb_win, win_read, *off)); in qla4_82xx_pci_set_crbwindow_2M()
375 *off = (*off & MASK(16)) + CRB_INDIRECT_2M + ha->nx_pcibase; in qla4_82xx_pci_set_crbwindow_2M()
379 qla4_82xx_wr_32(struct scsi_qla_host *ha, ulong off, u32 data) in qla4_82xx_wr_32() argument
384 rv = qla4_82xx_pci_get_crb_addr_2M(ha, &off); in qla4_82xx_wr_32()
389 write_lock_irqsave(&ha->hw_lock, flags); in qla4_82xx_wr_32()
390 qla4_82xx_crb_win_lock(ha); in qla4_82xx_wr_32()
391 qla4_82xx_pci_set_crbwindow_2M(ha, &off); in qla4_82xx_wr_32()
397 qla4_82xx_crb_win_unlock(ha); in qla4_82xx_wr_32()
398 write_unlock_irqrestore(&ha->hw_lock, flags); in qla4_82xx_wr_32()
402 uint32_t qla4_82xx_rd_32(struct scsi_qla_host *ha, ulong off) in qla4_82xx_rd_32() argument
408 rv = qla4_82xx_pci_get_crb_addr_2M(ha, &off); in qla4_82xx_rd_32()
413 write_lock_irqsave(&ha->hw_lock, flags); in qla4_82xx_rd_32()
414 qla4_82xx_crb_win_lock(ha); in qla4_82xx_rd_32()
415 qla4_82xx_pci_set_crbwindow_2M(ha, &off); in qla4_82xx_rd_32()
420 qla4_82xx_crb_win_unlock(ha); in qla4_82xx_rd_32()
421 write_unlock_irqrestore(&ha->hw_lock, flags); in qla4_82xx_rd_32()
427 int qla4_82xx_md_rd_32(struct scsi_qla_host *ha, uint32_t off, uint32_t *data) in qla4_82xx_md_rd_32() argument
433 writel(off_value, (void __iomem *)(CRB_WINDOW_2M + ha->nx_pcibase)); in qla4_82xx_md_rd_32()
439 win_read = readl((void __iomem *)(CRB_WINDOW_2M + ha->nx_pcibase)); in qla4_82xx_md_rd_32()
441 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_82xx_md_rd_32()
448 ha->nx_pcibase)); in qla4_82xx_md_rd_32()
453 int qla4_82xx_md_wr_32(struct scsi_qla_host *ha, uint32_t off, uint32_t data) in qla4_82xx_md_wr_32() argument
459 writel(off_value, (void __iomem *)(CRB_WINDOW_2M + ha->nx_pcibase)); in qla4_82xx_md_wr_32()
464 win_read = readl((void __iomem *)(CRB_WINDOW_2M + ha->nx_pcibase)); in qla4_82xx_md_wr_32()
466 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_82xx_md_wr_32()
473 ha->nx_pcibase)); in qla4_82xx_md_wr_32()
480 int qla4_82xx_crb_win_lock(struct scsi_qla_host *ha) in qla4_82xx_crb_win_lock() argument
487 done = qla4_82xx_rd_32(ha, QLA82XX_PCIE_REG(PCIE_SEM7_LOCK)); in qla4_82xx_crb_win_lock()
503 qla4_82xx_wr_32(ha, QLA82XX_CRB_WIN_LOCK_ID, ha->func_num); in qla4_82xx_crb_win_lock()
507 void qla4_82xx_crb_win_unlock(struct scsi_qla_host *ha) in qla4_82xx_crb_win_unlock() argument
509 qla4_82xx_rd_32(ha, QLA82XX_PCIE_REG(PCIE_SEM7_UNLOCK)); in qla4_82xx_crb_win_unlock()
521 int qla4_82xx_idc_lock(struct scsi_qla_host *ha) in qla4_82xx_idc_lock() argument
528 done = qla4_82xx_rd_32(ha, QLA82XX_PCIE_REG(PCIE_SEM5_LOCK)); in qla4_82xx_idc_lock()
547 void qla4_82xx_idc_unlock(struct scsi_qla_host *ha) in qla4_82xx_idc_unlock() argument
549 qla4_82xx_rd_32(ha, QLA82XX_PCIE_REG(PCIE_SEM5_UNLOCK)); in qla4_82xx_idc_unlock()
553 qla4_82xx_pci_get_crb_addr_2M(struct scsi_qla_host *ha, ulong *off) in qla4_82xx_pci_get_crb_addr_2M() argument
562 QLA82XX_PCI_CAMQM_2M_BASE + ha->nx_pcibase; in qla4_82xx_pci_get_crb_addr_2M()
577 *off = *off + m->start_2M - m->start_128M + ha->nx_pcibase; in qla4_82xx_pci_get_crb_addr_2M()
592 qla4_82xx_pci_mem_bound_check(struct scsi_qla_host *ha, in qla4_82xx_pci_mem_bound_check() argument
608 qla4_82xx_pci_set_window(struct scsi_qla_host *ha, unsigned long long addr) in qla4_82xx_pci_set_window() argument
617 ha->ddr_mn_window = window; in qla4_82xx_pci_set_window()
618 qla4_82xx_wr_32(ha, ha->mn_win_crb | in qla4_82xx_pci_set_window()
620 win_read = qla4_82xx_rd_32(ha, ha->mn_win_crb | in qla4_82xx_pci_set_window()
623 ql4_printk(KERN_WARNING, ha, in qla4_82xx_pci_set_window()
638 ha->ddr_mn_window = window; in qla4_82xx_pci_set_window()
639 qla4_82xx_wr_32(ha, ha->mn_win_crb | in qla4_82xx_pci_set_window()
641 win_read = qla4_82xx_rd_32(ha, ha->mn_win_crb | in qla4_82xx_pci_set_window()
655 ha->qdr_sn_window = window; in qla4_82xx_pci_set_window()
656 qla4_82xx_wr_32(ha, ha->ms_win_crb | in qla4_82xx_pci_set_window()
658 win_read = qla4_82xx_rd_32(ha, in qla4_82xx_pci_set_window()
659 ha->ms_win_crb | QLA82XX_PCI_CRBSPACE); in qla4_82xx_pci_set_window()
682 static int qla4_82xx_pci_is_same_window(struct scsi_qla_host *ha, in qla4_82xx_pci_is_same_window() argument
704 if (ha->qdr_sn_window == window) in qla4_82xx_pci_is_same_window()
711 static int qla4_82xx_pci_mem_read_direct(struct scsi_qla_host *ha, in qla4_82xx_pci_mem_read_direct() argument
722 write_lock_irqsave(&ha->hw_lock, flags); in qla4_82xx_pci_mem_read_direct()
728 start = qla4_82xx_pci_set_window(ha, off); in qla4_82xx_pci_mem_read_direct()
730 (qla4_82xx_pci_is_same_window(ha, off + size - 1) == 0)) { in qla4_82xx_pci_mem_read_direct()
731 write_unlock_irqrestore(&ha->hw_lock, flags); in qla4_82xx_pci_mem_read_direct()
737 addr = qla4_8xxx_pci_base_offsetfset(ha, start); in qla4_82xx_pci_mem_read_direct()
739 write_unlock_irqrestore(&ha->hw_lock, flags); in qla4_82xx_pci_mem_read_direct()
740 mem_base = pci_resource_start(ha->pdev, 0); in qla4_82xx_pci_mem_read_direct()
756 write_lock_irqsave(&ha->hw_lock, flags); in qla4_82xx_pci_mem_read_direct()
776 write_unlock_irqrestore(&ha->hw_lock, flags); in qla4_82xx_pci_mem_read_direct()
784 qla4_82xx_pci_mem_write_direct(struct scsi_qla_host *ha, u64 off, in qla4_82xx_pci_mem_write_direct() argument
795 write_lock_irqsave(&ha->hw_lock, flags); in qla4_82xx_pci_mem_write_direct()
801 start = qla4_82xx_pci_set_window(ha, off); in qla4_82xx_pci_mem_write_direct()
803 (qla4_82xx_pci_is_same_window(ha, off + size - 1) == 0)) { in qla4_82xx_pci_mem_write_direct()
804 write_unlock_irqrestore(&ha->hw_lock, flags); in qla4_82xx_pci_mem_write_direct()
810 addr = qla4_8xxx_pci_base_offsetfset(ha, start); in qla4_82xx_pci_mem_write_direct()
812 write_unlock_irqrestore(&ha->hw_lock, flags); in qla4_82xx_pci_mem_write_direct()
813 mem_base = pci_resource_start(ha->pdev, 0); in qla4_82xx_pci_mem_write_direct()
827 write_lock_irqsave(&ha->hw_lock, flags); in qla4_82xx_pci_mem_write_direct()
847 write_unlock_irqrestore(&ha->hw_lock, flags); in qla4_82xx_pci_mem_write_direct()
884 qla4_82xx_rom_lock(struct scsi_qla_host *ha) in qla4_82xx_rom_lock() argument
892 done = qla4_82xx_rd_32(ha, QLA82XX_PCIE_REG(PCIE_SEM2_LOCK)); in qla4_82xx_rom_lock()
908 qla4_82xx_wr_32(ha, QLA82XX_ROM_LOCK_ID, ROM_LOCK_DRIVER); in qla4_82xx_rom_lock()
913 qla4_82xx_rom_unlock(struct scsi_qla_host *ha) in qla4_82xx_rom_unlock() argument
915 qla4_82xx_rd_32(ha, QLA82XX_PCIE_REG(PCIE_SEM2_UNLOCK)); in qla4_82xx_rom_unlock()
919 qla4_82xx_wait_rom_done(struct scsi_qla_host *ha) in qla4_82xx_wait_rom_done() argument
925 done = qla4_82xx_rd_32(ha, QLA82XX_ROMUSB_GLB_STATUS); in qla4_82xx_wait_rom_done()
938 qla4_82xx_do_rom_fast_read(struct scsi_qla_host *ha, int addr, int *valp) in qla4_82xx_do_rom_fast_read() argument
940 qla4_82xx_wr_32(ha, QLA82XX_ROMUSB_ROM_ADDRESS, addr); in qla4_82xx_do_rom_fast_read()
941 qla4_82xx_wr_32(ha, QLA82XX_ROMUSB_ROM_DUMMY_BYTE_CNT, 0); in qla4_82xx_do_rom_fast_read()
942 qla4_82xx_wr_32(ha, QLA82XX_ROMUSB_ROM_ABYTE_CNT, 3); in qla4_82xx_do_rom_fast_read()
943 qla4_82xx_wr_32(ha, QLA82XX_ROMUSB_ROM_INSTR_OPCODE, 0xb); in qla4_82xx_do_rom_fast_read()
944 if (qla4_82xx_wait_rom_done(ha)) { in qla4_82xx_do_rom_fast_read()
949 qla4_82xx_wr_32(ha, QLA82XX_ROMUSB_ROM_DUMMY_BYTE_CNT, 0); in qla4_82xx_do_rom_fast_read()
951 qla4_82xx_wr_32(ha, QLA82XX_ROMUSB_ROM_ABYTE_CNT, 0); in qla4_82xx_do_rom_fast_read()
953 *valp = qla4_82xx_rd_32(ha, QLA82XX_ROMUSB_ROM_RDATA); in qla4_82xx_do_rom_fast_read()
958 qla4_82xx_rom_fast_read(struct scsi_qla_host *ha, int addr, int *valp) in qla4_82xx_rom_fast_read() argument
962 while ((qla4_82xx_rom_lock(ha) != 0) && (loops < 50000)) { in qla4_82xx_rom_fast_read()
967 ql4_printk(KERN_WARNING, ha, "%s: qla4_82xx_rom_lock failed\n", in qla4_82xx_rom_fast_read()
971 ret = qla4_82xx_do_rom_fast_read(ha, addr, valp); in qla4_82xx_rom_fast_read()
972 qla4_82xx_rom_unlock(ha); in qla4_82xx_rom_fast_read()
981 qla4_82xx_pinit_from_rom(struct scsi_qla_host *ha, int verbose) in qla4_82xx_pinit_from_rom() argument
995 qla4_82xx_rom_lock(ha); in qla4_82xx_pinit_from_rom()
998 qla4_82xx_wr_32(ha, QLA82XX_CRB_I2Q + 0x10, 0x0); in qla4_82xx_pinit_from_rom()
999 qla4_82xx_wr_32(ha, QLA82XX_CRB_I2Q + 0x14, 0x0); in qla4_82xx_pinit_from_rom()
1000 qla4_82xx_wr_32(ha, QLA82XX_CRB_I2Q + 0x18, 0x0); in qla4_82xx_pinit_from_rom()
1001 qla4_82xx_wr_32(ha, QLA82XX_CRB_I2Q + 0x1c, 0x0); in qla4_82xx_pinit_from_rom()
1002 qla4_82xx_wr_32(ha, QLA82XX_CRB_I2Q + 0x20, 0x0); in qla4_82xx_pinit_from_rom()
1003 qla4_82xx_wr_32(ha, QLA82XX_CRB_I2Q + 0x24, 0x0); in qla4_82xx_pinit_from_rom()
1006 qla4_82xx_wr_32(ha, QLA82XX_CRB_NIU + 0x40, 0xff); in qla4_82xx_pinit_from_rom()
1008 qla4_82xx_wr_32(ha, QLA82XX_CRB_NIU + 0x70000, 0x00); in qla4_82xx_pinit_from_rom()
1010 qla4_82xx_wr_32(ha, QLA82XX_CRB_NIU + 0x80000, 0x00); in qla4_82xx_pinit_from_rom()
1012 qla4_82xx_wr_32(ha, QLA82XX_CRB_NIU + 0x90000, 0x00); in qla4_82xx_pinit_from_rom()
1014 qla4_82xx_wr_32(ha, QLA82XX_CRB_NIU + 0xa0000, 0x00); in qla4_82xx_pinit_from_rom()
1016 qla4_82xx_wr_32(ha, QLA82XX_CRB_NIU + 0xb0000, 0x00); in qla4_82xx_pinit_from_rom()
1019 val = qla4_82xx_rd_32(ha, QLA82XX_CRB_SRE + 0x1000); in qla4_82xx_pinit_from_rom()
1020 qla4_82xx_wr_32(ha, QLA82XX_CRB_SRE + 0x1000, val & (~(0x1))); in qla4_82xx_pinit_from_rom()
1023 qla4_82xx_wr_32(ha, QLA82XX_CRB_EPG + 0x1300, 0x1); in qla4_82xx_pinit_from_rom()
1026 qla4_82xx_wr_32(ha, QLA82XX_CRB_TIMER + 0x0, 0x0); in qla4_82xx_pinit_from_rom()
1027 qla4_82xx_wr_32(ha, QLA82XX_CRB_TIMER + 0x8, 0x0); in qla4_82xx_pinit_from_rom()
1028 qla4_82xx_wr_32(ha, QLA82XX_CRB_TIMER + 0x10, 0x0); in qla4_82xx_pinit_from_rom()
1029 qla4_82xx_wr_32(ha, QLA82XX_CRB_TIMER + 0x18, 0x0); in qla4_82xx_pinit_from_rom()
1030 qla4_82xx_wr_32(ha, QLA82XX_CRB_TIMER + 0x100, 0x0); in qla4_82xx_pinit_from_rom()
1031 qla4_82xx_wr_32(ha, QLA82XX_CRB_TIMER + 0x200, 0x0); in qla4_82xx_pinit_from_rom()
1034 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_0 + 0x3c, 1); in qla4_82xx_pinit_from_rom()
1035 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_1 + 0x3c, 1); in qla4_82xx_pinit_from_rom()
1036 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_2 + 0x3c, 1); in qla4_82xx_pinit_from_rom()
1037 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_3 + 0x3c, 1); in qla4_82xx_pinit_from_rom()
1038 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_4 + 0x3c, 1); in qla4_82xx_pinit_from_rom()
1042 if (test_bit(DPC_RESET_HA, &ha->dpc_flags)) in qla4_82xx_pinit_from_rom()
1044 qla4_82xx_wr_32(ha, QLA82XX_ROMUSB_GLB_SW_RESET, 0xfeffffff); in qla4_82xx_pinit_from_rom()
1046 qla4_82xx_wr_32(ha, QLA82XX_ROMUSB_GLB_SW_RESET, 0xffffffff); in qla4_82xx_pinit_from_rom()
1048 qla4_82xx_rom_unlock(ha); in qla4_82xx_pinit_from_rom()
1055 if (qla4_82xx_rom_fast_read(ha, 0, &n) != 0 || n != 0xcafecafeUL || in qla4_82xx_pinit_from_rom()
1056 qla4_82xx_rom_fast_read(ha, 4, &n) != 0) { in qla4_82xx_pinit_from_rom()
1057 ql4_printk(KERN_WARNING, ha, in qla4_82xx_pinit_from_rom()
1070 ql4_printk(KERN_WARNING, ha, in qla4_82xx_pinit_from_rom()
1076 ql4_printk(KERN_INFO, ha, in qla4_82xx_pinit_from_rom()
1081 ql4_printk(KERN_WARNING, ha, in qla4_82xx_pinit_from_rom()
1087 if (qla4_82xx_rom_fast_read(ha, 8*i + 4*offset, &val) != 0 || in qla4_82xx_pinit_from_rom()
1088 qla4_82xx_rom_fast_read(ha, 8*i + 4*offset + 4, &addr) != in qla4_82xx_pinit_from_rom()
1110 DEBUG2(ql4_printk(KERN_WARNING, ha, in qla4_82xx_pinit_from_rom()
1141 ql4_printk(KERN_WARNING, ha, in qla4_82xx_pinit_from_rom()
1147 qla4_82xx_wr_32(ha, off, buf[i].data); in qla4_82xx_pinit_from_rom()
1164 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_D+0xec, 0x1e); in qla4_82xx_pinit_from_rom()
1165 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_D+0x4c, 8); in qla4_82xx_pinit_from_rom()
1166 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_I+0x4c, 8); in qla4_82xx_pinit_from_rom()
1169 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_0+0x8, 0); in qla4_82xx_pinit_from_rom()
1170 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_0+0xc, 0); in qla4_82xx_pinit_from_rom()
1171 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_1+0x8, 0); in qla4_82xx_pinit_from_rom()
1172 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_1+0xc, 0); in qla4_82xx_pinit_from_rom()
1173 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_2+0x8, 0); in qla4_82xx_pinit_from_rom()
1174 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_2+0xc, 0); in qla4_82xx_pinit_from_rom()
1175 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_3+0x8, 0); in qla4_82xx_pinit_from_rom()
1176 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_3+0xc, 0); in qla4_82xx_pinit_from_rom()
1191 int qla4_8xxx_ms_mem_write_128b(struct scsi_qla_host *ha, uint64_t addr, in qla4_8xxx_ms_mem_write_128b() argument
1205 write_lock_irqsave(&ha->hw_lock, flags); in qla4_8xxx_ms_mem_write_128b()
1208 ret_val = ha->isp_ops->wr_reg_indirect(ha, MD_MIU_TEST_AGT_ADDR_HI, 0); in qla4_8xxx_ms_mem_write_128b()
1210 ql4_printk(KERN_ERR, ha, "%s: write to AGT_ADDR_HI failed\n", in qla4_8xxx_ms_mem_write_128b()
1224 ret_val = ha->isp_ops->wr_reg_indirect(ha, in qla4_8xxx_ms_mem_write_128b()
1228 ret_val |= ha->isp_ops->wr_reg_indirect(ha, in qla4_8xxx_ms_mem_write_128b()
1231 ret_val |= ha->isp_ops->wr_reg_indirect(ha, in qla4_8xxx_ms_mem_write_128b()
1234 ret_val |= ha->isp_ops->wr_reg_indirect(ha, in qla4_8xxx_ms_mem_write_128b()
1237 ret_val |= ha->isp_ops->wr_reg_indirect(ha, in qla4_8xxx_ms_mem_write_128b()
1241 ql4_printk(KERN_ERR, ha, "%s: write to AGT_WRDATA failed\n", in qla4_8xxx_ms_mem_write_128b()
1247 ret_val = ha->isp_ops->wr_reg_indirect(ha, MD_MIU_TEST_AGT_CTRL, in qla4_8xxx_ms_mem_write_128b()
1249 ret_val |= ha->isp_ops->wr_reg_indirect(ha, in qla4_8xxx_ms_mem_write_128b()
1253 ql4_printk(KERN_ERR, ha, "%s: write to AGT_CTRL failed\n", in qla4_8xxx_ms_mem_write_128b()
1259 ret_val = ha->isp_ops->rd_reg_indirect(ha, in qla4_8xxx_ms_mem_write_128b()
1263 ql4_printk(KERN_ERR, ha, "%s: failed to read MD_MIU_TEST_AGT_CTRL\n", in qla4_8xxx_ms_mem_write_128b()
1281 write_unlock_irqrestore(&ha->hw_lock, flags); in qla4_8xxx_ms_mem_write_128b()
1288 qla4_82xx_load_from_flash(struct scsi_qla_host *ha, uint32_t image_start) in qla4_82xx_load_from_flash() argument
1296 flashaddr = memaddr = ha->hw.flt_region_bootload; in qla4_82xx_load_from_flash()
1300 ha->host_no, __func__, flashaddr, image_start)); in qla4_82xx_load_from_flash()
1303 if ((qla4_82xx_rom_fast_read(ha, flashaddr, (int *)&low)) || in qla4_82xx_load_from_flash()
1304 (qla4_82xx_rom_fast_read(ha, flashaddr + 4, in qla4_82xx_load_from_flash()
1310 rval = qla4_82xx_pci_mem_write_2M(ha, memaddr, &data, 8); in qla4_82xx_load_from_flash()
1324 read_lock(&ha->hw_lock); in qla4_82xx_load_from_flash()
1325 qla4_82xx_wr_32(ha, QLA82XX_CRB_PEG_NET_0 + 0x18, 0x1020); in qla4_82xx_load_from_flash()
1326 qla4_82xx_wr_32(ha, QLA82XX_ROMUSB_GLB_SW_RESET, 0x80001e); in qla4_82xx_load_from_flash()
1327 read_unlock(&ha->hw_lock); in qla4_82xx_load_from_flash()
1333 static int qla4_82xx_load_fw(struct scsi_qla_host *ha, uint32_t image_start) in qla4_82xx_load_fw() argument
1337 qla4_82xx_wr_32(ha, CRB_CMDPEG_STATE, 0); in qla4_82xx_load_fw()
1338 if (qla4_82xx_pinit_from_rom(ha, 0) != QLA_SUCCESS) { in qla4_82xx_load_fw()
1351 rst = qla4_82xx_rd_32(ha, QLA82XX_ROMUSB_GLB_SW_RESET); in qla4_82xx_load_fw()
1354 qla4_82xx_wr_32(ha, QLA82XX_ROMUSB_GLB_SW_RESET, rst); in qla4_82xx_load_fw()
1356 if (qla4_82xx_load_from_flash(ha, image_start)) { in qla4_82xx_load_fw()
1365 qla4_82xx_pci_mem_read_2M(struct scsi_qla_host *ha, in qla4_82xx_pci_mem_read_2M() argument
1381 if (qla4_82xx_pci_mem_bound_check(ha, off, size) == 0) in qla4_82xx_pci_mem_read_2M()
1382 return qla4_82xx_pci_mem_read_direct(ha, in qla4_82xx_pci_mem_read_2M()
1398 qla4_82xx_wr_32(ha, mem_crb + MIU_TEST_AGT_ADDR_LO, temp); in qla4_82xx_pci_mem_read_2M()
1400 qla4_82xx_wr_32(ha, mem_crb + MIU_TEST_AGT_ADDR_HI, temp); in qla4_82xx_pci_mem_read_2M()
1402 qla4_82xx_wr_32(ha, mem_crb + MIU_TEST_AGT_CTRL, temp); in qla4_82xx_pci_mem_read_2M()
1404 qla4_82xx_wr_32(ha, mem_crb + MIU_TEST_AGT_CTRL, temp); in qla4_82xx_pci_mem_read_2M()
1407 temp = qla4_82xx_rd_32(ha, mem_crb + MIU_TEST_AGT_CTRL); in qla4_82xx_pci_mem_read_2M()
1422 temp = qla4_82xx_rd_32(ha, in qla4_82xx_pci_mem_read_2M()
1456 qla4_82xx_pci_mem_write_2M(struct scsi_qla_host *ha, in qla4_82xx_pci_mem_write_2M() argument
1471 if (qla4_82xx_pci_mem_bound_check(ha, off, size) == 0) in qla4_82xx_pci_mem_write_2M()
1472 return qla4_82xx_pci_mem_write_direct(ha, in qla4_82xx_pci_mem_write_2M()
1487 if (qla4_82xx_pci_mem_read_2M(ha, off8 + in qla4_82xx_pci_mem_write_2M()
1523 qla4_82xx_wr_32(ha, mem_crb+MIU_TEST_AGT_ADDR_LO, temp); in qla4_82xx_pci_mem_write_2M()
1525 qla4_82xx_wr_32(ha, mem_crb+MIU_TEST_AGT_ADDR_HI, temp); in qla4_82xx_pci_mem_write_2M()
1527 qla4_82xx_wr_32(ha, mem_crb+MIU_TEST_AGT_WRDATA_LO, temp); in qla4_82xx_pci_mem_write_2M()
1529 qla4_82xx_wr_32(ha, mem_crb+MIU_TEST_AGT_WRDATA_HI, temp); in qla4_82xx_pci_mem_write_2M()
1531 qla4_82xx_wr_32(ha, mem_crb + MIU_TEST_AGT_WRDATA_UPPER_LO, in qla4_82xx_pci_mem_write_2M()
1534 qla4_82xx_wr_32(ha, mem_crb + MIU_TEST_AGT_WRDATA_UPPER_HI, in qla4_82xx_pci_mem_write_2M()
1538 qla4_82xx_wr_32(ha, mem_crb+MIU_TEST_AGT_CTRL, temp); in qla4_82xx_pci_mem_write_2M()
1540 qla4_82xx_wr_32(ha, mem_crb+MIU_TEST_AGT_CTRL, temp); in qla4_82xx_pci_mem_write_2M()
1543 temp = qla4_82xx_rd_32(ha, mem_crb + MIU_TEST_AGT_CTRL); in qla4_82xx_pci_mem_write_2M()
1550 ql4_printk(KERN_ERR, ha, in qla4_82xx_pci_mem_write_2M()
1561 static int qla4_82xx_cmdpeg_ready(struct scsi_qla_host *ha, int pegtune_val) in qla4_82xx_cmdpeg_ready() argument
1568 val = qla4_82xx_rd_32(ha, CRB_CMDPEG_STATE); in qla4_82xx_cmdpeg_ready()
1578 pegtune_val = qla4_82xx_rd_32(ha, in qla4_82xx_cmdpeg_ready()
1588 static int qla4_82xx_rcvpeg_ready(struct scsi_qla_host *ha) in qla4_82xx_rcvpeg_ready() argument
1594 read_lock(&ha->hw_lock); in qla4_82xx_rcvpeg_ready()
1595 state = qla4_82xx_rd_32(ha, CRB_RCVPEG_STATE); in qla4_82xx_rcvpeg_ready()
1596 read_unlock(&ha->hw_lock); in qla4_82xx_rcvpeg_ready()
1601 read_lock(&ha->hw_lock); in qla4_82xx_rcvpeg_ready()
1602 state = qla4_82xx_rd_32(ha, CRB_RCVPEG_STATE); in qla4_82xx_rcvpeg_ready()
1603 read_unlock(&ha->hw_lock); in qla4_82xx_rcvpeg_ready()
1609 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_82xx_rcvpeg_ready()
1618 qla4_8xxx_set_drv_active(struct scsi_qla_host *ha) in qla4_8xxx_set_drv_active() argument
1622 drv_active = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_ACTIVE); in qla4_8xxx_set_drv_active()
1629 if (is_qla8032(ha) || is_qla8042(ha)) in qla4_8xxx_set_drv_active()
1630 drv_active |= (1 << ha->func_num); in qla4_8xxx_set_drv_active()
1632 drv_active |= (1 << (ha->func_num * 4)); in qla4_8xxx_set_drv_active()
1634 ql4_printk(KERN_INFO, ha, "%s(%ld): drv_active: 0x%08x\n", in qla4_8xxx_set_drv_active()
1635 __func__, ha->host_no, drv_active); in qla4_8xxx_set_drv_active()
1636 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DRV_ACTIVE, drv_active); in qla4_8xxx_set_drv_active()
1640 qla4_8xxx_clear_drv_active(struct scsi_qla_host *ha) in qla4_8xxx_clear_drv_active() argument
1644 drv_active = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_ACTIVE); in qla4_8xxx_clear_drv_active()
1651 if (is_qla8032(ha) || is_qla8042(ha)) in qla4_8xxx_clear_drv_active()
1652 drv_active &= ~(1 << (ha->func_num)); in qla4_8xxx_clear_drv_active()
1654 drv_active &= ~(1 << (ha->func_num * 4)); in qla4_8xxx_clear_drv_active()
1656 ql4_printk(KERN_INFO, ha, "%s(%ld): drv_active: 0x%08x\n", in qla4_8xxx_clear_drv_active()
1657 __func__, ha->host_no, drv_active); in qla4_8xxx_clear_drv_active()
1658 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DRV_ACTIVE, drv_active); in qla4_8xxx_clear_drv_active()
1661 inline int qla4_8xxx_need_reset(struct scsi_qla_host *ha) in qla4_8xxx_need_reset() argument
1666 drv_active = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_ACTIVE); in qla4_8xxx_need_reset()
1667 drv_state = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_STATE); in qla4_8xxx_need_reset()
1674 if (is_qla8032(ha) || is_qla8042(ha)) in qla4_8xxx_need_reset()
1675 rval = drv_state & (1 << ha->func_num); in qla4_8xxx_need_reset()
1677 rval = drv_state & (1 << (ha->func_num * 4)); in qla4_8xxx_need_reset()
1679 if ((test_bit(AF_EEH_BUSY, &ha->flags)) && drv_active) in qla4_8xxx_need_reset()
1685 void qla4_8xxx_set_rst_ready(struct scsi_qla_host *ha) in qla4_8xxx_set_rst_ready() argument
1689 drv_state = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_STATE); in qla4_8xxx_set_rst_ready()
1696 if (is_qla8032(ha) || is_qla8042(ha)) in qla4_8xxx_set_rst_ready()
1697 drv_state |= (1 << ha->func_num); in qla4_8xxx_set_rst_ready()
1699 drv_state |= (1 << (ha->func_num * 4)); in qla4_8xxx_set_rst_ready()
1701 ql4_printk(KERN_INFO, ha, "%s(%ld): drv_state: 0x%08x\n", in qla4_8xxx_set_rst_ready()
1702 __func__, ha->host_no, drv_state); in qla4_8xxx_set_rst_ready()
1703 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DRV_STATE, drv_state); in qla4_8xxx_set_rst_ready()
1706 void qla4_8xxx_clear_rst_ready(struct scsi_qla_host *ha) in qla4_8xxx_clear_rst_ready() argument
1710 drv_state = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_STATE); in qla4_8xxx_clear_rst_ready()
1717 if (is_qla8032(ha) || is_qla8042(ha)) in qla4_8xxx_clear_rst_ready()
1718 drv_state &= ~(1 << ha->func_num); in qla4_8xxx_clear_rst_ready()
1720 drv_state &= ~(1 << (ha->func_num * 4)); in qla4_8xxx_clear_rst_ready()
1722 ql4_printk(KERN_INFO, ha, "%s(%ld): drv_state: 0x%08x\n", in qla4_8xxx_clear_rst_ready()
1723 __func__, ha->host_no, drv_state); in qla4_8xxx_clear_rst_ready()
1724 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DRV_STATE, drv_state); in qla4_8xxx_clear_rst_ready()
1728 qla4_8xxx_set_qsnt_ready(struct scsi_qla_host *ha) in qla4_8xxx_set_qsnt_ready() argument
1732 qsnt_state = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_STATE); in qla4_8xxx_set_qsnt_ready()
1739 if (is_qla8032(ha) || is_qla8042(ha)) in qla4_8xxx_set_qsnt_ready()
1740 qsnt_state |= (1 << ha->func_num); in qla4_8xxx_set_qsnt_ready()
1742 qsnt_state |= (2 << (ha->func_num * 4)); in qla4_8xxx_set_qsnt_ready()
1744 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DRV_STATE, qsnt_state); in qla4_8xxx_set_qsnt_ready()
1749 qla4_82xx_start_firmware(struct scsi_qla_host *ha, uint32_t image_start) in qla4_82xx_start_firmware() argument
1754 qla4_82xx_wr_32(ha, CRB_DMA_SHIFT, 0x55555555); in qla4_82xx_start_firmware()
1757 qla4_82xx_wr_32(ha, CRB_CMDPEG_STATE, 0); in qla4_82xx_start_firmware()
1758 qla4_82xx_wr_32(ha, CRB_RCVPEG_STATE, 0); in qla4_82xx_start_firmware()
1759 qla4_82xx_wr_32(ha, QLA82XX_PEG_HALT_STATUS1, 0); in qla4_82xx_start_firmware()
1760 qla4_82xx_wr_32(ha, QLA82XX_PEG_HALT_STATUS2, 0); in qla4_82xx_start_firmware()
1762 if (qla4_82xx_load_fw(ha, image_start) != QLA_SUCCESS) { in qla4_82xx_start_firmware()
1768 if (qla4_82xx_cmdpeg_ready(ha, 0) != QLA_SUCCESS) { in qla4_82xx_start_firmware()
1774 pcie_capability_read_word(ha->pdev, PCI_EXP_LNKSTA, &lnk); in qla4_82xx_start_firmware()
1775 ha->link_width = (lnk >> 4) & 0x3f; in qla4_82xx_start_firmware()
1778 return qla4_82xx_rcvpeg_ready(ha); in qla4_82xx_start_firmware()
1781 int qla4_82xx_try_start_fw(struct scsi_qla_host *ha) in qla4_82xx_try_start_fw() argument
1791 ql4_printk(KERN_INFO, ha, in qla4_82xx_try_start_fw()
1793 rval = qla4_8xxx_get_flash_info(ha); in qla4_82xx_try_start_fw()
1797 ql4_printk(KERN_INFO, ha, in qla4_82xx_try_start_fw()
1799 rval = qla4_82xx_start_firmware(ha, ha->hw.flt_region_fw); in qla4_82xx_try_start_fw()
1802 ql4_printk(KERN_ERR, ha, "FW: Load firmware from flash" in qla4_82xx_try_start_fw()
1810 void qla4_82xx_rom_lock_recovery(struct scsi_qla_host *ha) in qla4_82xx_rom_lock_recovery() argument
1812 if (qla4_82xx_rom_lock(ha)) { in qla4_82xx_rom_lock_recovery()
1814 dev_info(&ha->pdev->dev, "Resetting rom_lock\n"); in qla4_82xx_rom_lock_recovery()
1822 qla4_82xx_rom_unlock(ha); in qla4_82xx_rom_lock_recovery()
1825 static uint32_t ql4_84xx_poll_wait_for_ready(struct scsi_qla_host *ha, in ql4_84xx_poll_wait_for_ready() argument
1834 ha->isp_ops->rd_reg_indirect(ha, addr1, &temp); in ql4_84xx_poll_wait_for_ready()
1839 ql4_printk(KERN_INFO, ha, "Error in processing rdmdio entry\n"); in ql4_84xx_poll_wait_for_ready()
1847 static uint32_t ql4_84xx_ipmdio_rd_reg(struct scsi_qla_host *ha, uint32_t addr1, in ql4_84xx_ipmdio_rd_reg() argument
1855 rval = ql4_84xx_poll_wait_for_ready(ha, addr1, mask); in ql4_84xx_ipmdio_rd_reg()
1860 ha->isp_ops->wr_reg_indirect(ha, addr1, temp); in ql4_84xx_ipmdio_rd_reg()
1862 rval = ql4_84xx_poll_wait_for_ready(ha, addr1, mask); in ql4_84xx_ipmdio_rd_reg()
1866 ha->isp_ops->rd_reg_indirect(ha, addr3, &data); in ql4_84xx_ipmdio_rd_reg()
1874 static uint32_t ql4_84xx_poll_wait_ipmdio_bus_idle(struct scsi_qla_host *ha, in ql4_84xx_poll_wait_ipmdio_bus_idle() argument
1886 ql4_84xx_ipmdio_rd_reg(ha, addr1, addr3, mask, addr2, &temp); in ql4_84xx_poll_wait_ipmdio_bus_idle()
1890 ql4_printk(KERN_INFO, ha, "Error in processing mdiobus idle\n"); in ql4_84xx_poll_wait_ipmdio_bus_idle()
1898 static int ql4_84xx_ipmdio_wr_reg(struct scsi_qla_host *ha, in ql4_84xx_ipmdio_wr_reg() argument
1905 rval = ql4_84xx_poll_wait_for_ready(ha, addr1, mask); in ql4_84xx_ipmdio_wr_reg()
1909 ha->isp_ops->wr_reg_indirect(ha, addr3, value); in ql4_84xx_ipmdio_wr_reg()
1910 ha->isp_ops->wr_reg_indirect(ha, addr1, addr); in ql4_84xx_ipmdio_wr_reg()
1912 rval = ql4_84xx_poll_wait_for_ready(ha, addr1, mask); in ql4_84xx_ipmdio_wr_reg()
1920 static void qla4_8xxx_minidump_process_rdcrb(struct scsi_qla_host *ha, in qla4_8xxx_minidump_process_rdcrb() argument
1928 DEBUG2(ql4_printk(KERN_INFO, ha, "Entering fn: %s\n", __func__)); in qla4_8xxx_minidump_process_rdcrb()
1935 ha->isp_ops->rd_reg_indirect(ha, r_addr, &r_value); in qla4_8xxx_minidump_process_rdcrb()
1943 static int qla4_83xx_check_dma_engine_state(struct scsi_qla_host *ha) in qla4_83xx_check_dma_engine_state() argument
1951 ha->fw_dump_tmplt_hdr; in qla4_83xx_check_dma_engine_state()
1958 rval = ha->isp_ops->rd_reg_indirect(ha, in qla4_83xx_check_dma_engine_state()
1972 static int qla4_83xx_start_pex_dma(struct scsi_qla_host *ha, in qla4_83xx_start_pex_dma() argument
1981 ha->fw_dump_tmplt_hdr; in qla4_83xx_start_pex_dma()
1987 rval = ha->isp_ops->wr_reg_indirect(ha, in qla4_83xx_start_pex_dma()
1993 rval = ha->isp_ops->wr_reg_indirect(ha, in qla4_83xx_start_pex_dma()
1998 rval = ha->isp_ops->wr_reg_indirect(ha, in qla4_83xx_start_pex_dma()
2006 rval = ha->isp_ops->rd_reg_indirect(ha, in qla4_83xx_start_pex_dma()
2028 static int qla4_8xxx_minidump_pex_dma_read(struct scsi_qla_host *ha, in qla4_8xxx_minidump_pex_dma_read() argument
2040 DEBUG2(ql4_printk(KERN_INFO, ha, "Entering fn: %s\n", __func__)); in qla4_8xxx_minidump_pex_dma_read()
2042 rval = qla4_83xx_check_dma_engine_state(ha); in qla4_8xxx_minidump_pex_dma_read()
2044 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_minidump_pex_dma_read()
2051 rdmem_buffer = dma_alloc_coherent(&ha->pdev->dev, in qla4_8xxx_minidump_pex_dma_read()
2055 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_minidump_pex_dma_read()
2068 dma_desc.cmd.dma_desc_cmd |= ((PCI_FUNC(ha->pdev->devfn) & 0xf) << 0x4); in qla4_8xxx_minidump_pex_dma_read()
2085 dma_free_coherent(&ha->pdev->dev, in qla4_8xxx_minidump_pex_dma_read()
2089 rdmem_buffer = dma_alloc_coherent(&ha->pdev->dev, size, in qla4_8xxx_minidump_pex_dma_read()
2093 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_minidump_pex_dma_read()
2105 rval = qla4_8xxx_ms_mem_write_128b(ha, in qla4_8xxx_minidump_pex_dma_read()
2110 ql4_printk(KERN_INFO, ha, in qla4_8xxx_minidump_pex_dma_read()
2116 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_minidump_pex_dma_read()
2120 rval = qla4_83xx_start_pex_dma(ha, m_hdr); in qla4_8xxx_minidump_pex_dma_read()
2122 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_minidump_pex_dma_read()
2124 ha->host_no, rval)); in qla4_8xxx_minidump_pex_dma_read()
2133 DEBUG2(ql4_printk(KERN_INFO, ha, "Leaving fn: %s\n", __func__)); in qla4_8xxx_minidump_pex_dma_read()
2139 dma_free_coherent(&ha->pdev->dev, size, rdmem_buffer, in qla4_8xxx_minidump_pex_dma_read()
2145 static int qla4_8xxx_minidump_process_l2tag(struct scsi_qla_host *ha, in qla4_8xxx_minidump_process_l2tag() argument
2157 DEBUG2(ql4_printk(KERN_INFO, ha, "Entering fn: %s\n", __func__)); in qla4_8xxx_minidump_process_l2tag()
2172 ha->isp_ops->wr_reg_indirect(ha, t_r_addr, t_value); in qla4_8xxx_minidump_process_l2tag()
2175 ha->isp_ops->wr_reg_indirect(ha, c_addr, c_value_w); in qla4_8xxx_minidump_process_l2tag()
2180 ha->isp_ops->rd_reg_indirect(ha, c_addr, in qla4_8xxx_minidump_process_l2tag()
2193 ha->isp_ops->rd_reg_indirect(ha, addr, &r_value); in qla4_8xxx_minidump_process_l2tag()
2204 static int qla4_8xxx_minidump_process_control(struct scsi_qla_host *ha, in qla4_8xxx_minidump_process_control() argument
2214 DEBUG2(ql4_printk(KERN_INFO, ha, "Entering fn: %s\n", __func__)); in qla4_8xxx_minidump_process_control()
2216 ha->fw_dump_tmplt_hdr; in qla4_8xxx_minidump_process_control()
2223 ha->isp_ops->wr_reg_indirect(ha, crb_addr, in qla4_8xxx_minidump_process_control()
2228 ha->isp_ops->rd_reg_indirect(ha, crb_addr, &read_value); in qla4_8xxx_minidump_process_control()
2229 ha->isp_ops->wr_reg_indirect(ha, crb_addr, read_value); in qla4_8xxx_minidump_process_control()
2233 ha->isp_ops->rd_reg_indirect(ha, crb_addr, &read_value); in qla4_8xxx_minidump_process_control()
2240 ha->isp_ops->wr_reg_indirect(ha, crb_addr, read_value); in qla4_8xxx_minidump_process_control()
2243 ha->isp_ops->rd_reg_indirect(ha, crb_addr, &read_value); in qla4_8xxx_minidump_process_control()
2245 ha->isp_ops->wr_reg_indirect(ha, crb_addr, read_value); in qla4_8xxx_minidump_process_control()
2251 ha->isp_ops->rd_reg_indirect(ha, crb_addr, &read_value); in qla4_8xxx_minidump_process_control()
2262 ha->isp_ops->rd_reg_indirect(ha, in qla4_8xxx_minidump_process_control()
2277 ha->isp_ops->rd_reg_indirect(ha, addr, &read_value); in qla4_8xxx_minidump_process_control()
2299 ha->isp_ops->wr_reg_indirect(ha, addr, read_value); in qla4_8xxx_minidump_process_control()
2317 DEBUG2(ql4_printk(KERN_INFO, ha, "Leaving fn: %s\n", __func__)); in qla4_8xxx_minidump_process_control()
2321 static void qla4_8xxx_minidump_process_rdocm(struct scsi_qla_host *ha, in qla4_8xxx_minidump_process_rdocm() argument
2329 DEBUG2(ql4_printk(KERN_INFO, ha, "Entering fn: %s\n", __func__)); in qla4_8xxx_minidump_process_rdocm()
2335 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_minidump_process_rdocm()
2340 r_value = readl((void __iomem *)(r_addr + ha->nx_pcibase)); in qla4_8xxx_minidump_process_rdocm()
2344 DEBUG2(ql4_printk(KERN_INFO, ha, "Leaving fn: %s datacount: 0x%lx\n", in qla4_8xxx_minidump_process_rdocm()
2349 static void qla4_8xxx_minidump_process_rdmux(struct scsi_qla_host *ha, in qla4_8xxx_minidump_process_rdmux() argument
2357 DEBUG2(ql4_printk(KERN_INFO, ha, "Entering fn: %s\n", __func__)); in qla4_8xxx_minidump_process_rdmux()
2366 ha->isp_ops->wr_reg_indirect(ha, s_addr, s_value); in qla4_8xxx_minidump_process_rdmux()
2367 ha->isp_ops->rd_reg_indirect(ha, r_addr, &r_value); in qla4_8xxx_minidump_process_rdmux()
2375 static void qla4_8xxx_minidump_process_l1cache(struct scsi_qla_host *ha, in qla4_8xxx_minidump_process_l1cache() argument
2396 ha->isp_ops->wr_reg_indirect(ha, t_r_addr, t_value); in qla4_8xxx_minidump_process_l1cache()
2397 ha->isp_ops->wr_reg_indirect(ha, c_addr, c_value_w); in qla4_8xxx_minidump_process_l1cache()
2400 ha->isp_ops->rd_reg_indirect(ha, addr, &r_value); in qla4_8xxx_minidump_process_l1cache()
2409 static void qla4_8xxx_minidump_process_queue(struct scsi_qla_host *ha, in qla4_8xxx_minidump_process_queue() argument
2419 DEBUG2(ql4_printk(KERN_INFO, ha, "Entering fn: %s\n", __func__)); in qla4_8xxx_minidump_process_queue()
2427 ha->isp_ops->wr_reg_indirect(ha, s_addr, qid); in qla4_8xxx_minidump_process_queue()
2430 ha->isp_ops->rd_reg_indirect(ha, r_addr, &r_value); in qla4_8xxx_minidump_process_queue()
2442 static void qla4_82xx_minidump_process_rdrom(struct scsi_qla_host *ha, in qla4_82xx_minidump_process_rdrom() argument
2451 DEBUG2(ql4_printk(KERN_INFO, ha, "Entering fn: %s\n", __func__)); in qla4_82xx_minidump_process_rdrom()
2456 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_82xx_minidump_process_rdrom()
2461 ha->isp_ops->wr_reg_indirect(ha, MD_DIRECT_ROM_WINDOW, in qla4_82xx_minidump_process_rdrom()
2463 ha->isp_ops->rd_reg_indirect(ha, in qla4_82xx_minidump_process_rdrom()
2476 static int __qla4_8xxx_minidump_process_rdmem(struct scsi_qla_host *ha, in __qla4_8xxx_minidump_process_rdmem() argument
2486 DEBUG2(ql4_printk(KERN_INFO, ha, "Entering fn: %s\n", __func__)); in __qla4_8xxx_minidump_process_rdmem()
2491 DEBUG2(ql4_printk(KERN_INFO, ha, in __qla4_8xxx_minidump_process_rdmem()
2496 DEBUG2(ql4_printk(KERN_INFO, ha, in __qla4_8xxx_minidump_process_rdmem()
2503 DEBUG2(ql4_printk(KERN_INFO, ha, in __qla4_8xxx_minidump_process_rdmem()
2509 DEBUG2(ql4_printk(KERN_INFO, ha, in __qla4_8xxx_minidump_process_rdmem()
2513 write_lock_irqsave(&ha->hw_lock, flags); in __qla4_8xxx_minidump_process_rdmem()
2515 ha->isp_ops->wr_reg_indirect(ha, MD_MIU_TEST_AGT_ADDR_LO, in __qla4_8xxx_minidump_process_rdmem()
2518 ha->isp_ops->wr_reg_indirect(ha, MD_MIU_TEST_AGT_ADDR_HI, in __qla4_8xxx_minidump_process_rdmem()
2521 ha->isp_ops->wr_reg_indirect(ha, MD_MIU_TEST_AGT_CTRL, r_value); in __qla4_8xxx_minidump_process_rdmem()
2523 ha->isp_ops->wr_reg_indirect(ha, MD_MIU_TEST_AGT_CTRL, r_value); in __qla4_8xxx_minidump_process_rdmem()
2526 ha->isp_ops->rd_reg_indirect(ha, MD_MIU_TEST_AGT_CTRL, in __qla4_8xxx_minidump_process_rdmem()
2536 write_unlock_irqrestore(&ha->hw_lock, flags); in __qla4_8xxx_minidump_process_rdmem()
2541 ha->isp_ops->rd_reg_indirect(ha, in __qla4_8xxx_minidump_process_rdmem()
2549 write_unlock_irqrestore(&ha->hw_lock, flags); in __qla4_8xxx_minidump_process_rdmem()
2551 DEBUG2(ql4_printk(KERN_INFO, ha, "Leaving fn: %s datacount: 0x%x\n", in __qla4_8xxx_minidump_process_rdmem()
2558 static int qla4_8xxx_minidump_process_rdmem(struct scsi_qla_host *ha, in qla4_8xxx_minidump_process_rdmem() argument
2565 rval = qla4_8xxx_minidump_pex_dma_read(ha, entry_hdr, &data_ptr); in qla4_8xxx_minidump_process_rdmem()
2567 rval = __qla4_8xxx_minidump_process_rdmem(ha, entry_hdr, in qla4_8xxx_minidump_process_rdmem()
2573 static void qla4_8xxx_mark_entry_skipped(struct scsi_qla_host *ha, in qla4_8xxx_mark_entry_skipped() argument
2578 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_mark_entry_skipped()
2580 ha->host_no, index, entry_hdr->entry_type, in qla4_8xxx_mark_entry_skipped()
2586 ha->fw_dump_skip_size += entry_hdr->entry_capture_size; in qla4_8xxx_mark_entry_skipped()
2590 static uint32_t qla83xx_minidump_process_pollrd(struct scsi_qla_host *ha, in qla83xx_minidump_process_pollrd() argument
2610 ha->isp_ops->wr_reg_indirect(ha, s_addr, s_value); in qla83xx_minidump_process_pollrd()
2613 ha->isp_ops->rd_reg_indirect(ha, s_addr, &r_value); in qla83xx_minidump_process_pollrd()
2620 ql4_printk(KERN_ERR, ha, "%s: TIMEOUT\n", in qla83xx_minidump_process_pollrd()
2627 ha->isp_ops->rd_reg_indirect(ha, r_addr, &r_value); in qla83xx_minidump_process_pollrd()
2639 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
2761 rval = ql4_84xx_poll_wait_ipmdio_bus_idle(ha, addr1, addr2, in qla4_84xx_minidump_process_rdmdio()
2767 rval = ql4_84xx_ipmdio_wr_reg(ha, addr1, addr3, mask, addr4, in qla4_84xx_minidump_process_rdmdio()
2773 rval = ql4_84xx_ipmdio_wr_reg(ha, addr1, addr3, mask, addr5, in qla4_84xx_minidump_process_rdmdio()
2779 rval = ql4_84xx_ipmdio_wr_reg(ha, addr1, addr3, mask, in qla4_84xx_minidump_process_rdmdio()
2784 rval = ql4_84xx_poll_wait_ipmdio_bus_idle(ha, addr1, addr2, in qla4_84xx_minidump_process_rdmdio()
2790 rval = ql4_84xx_ipmdio_rd_reg(ha, addr1, addr3, in qla4_84xx_minidump_process_rdmdio()
2809 static uint32_t qla4_84xx_minidump_process_pollwr(struct scsi_qla_host *ha, in qla4_84xx_minidump_process_pollwr() argument
2827 ha->isp_ops->rd_reg_indirect(ha, addr1, &r_value); in qla4_84xx_minidump_process_pollwr()
2836 ql4_printk(KERN_ERR, ha, "%s: TIMEOUT\n", __func__); in qla4_84xx_minidump_process_pollwr()
2841 ha->isp_ops->wr_reg_indirect(ha, addr2, value2); in qla4_84xx_minidump_process_pollwr()
2842 ha->isp_ops->wr_reg_indirect(ha, addr1, value1); in qla4_84xx_minidump_process_pollwr()
2846 ha->isp_ops->rd_reg_indirect(ha, addr1, &r_value); in qla4_84xx_minidump_process_pollwr()
2857 static void qla83xx_minidump_process_rdmux2(struct scsi_qla_host *ha, in qla83xx_minidump_process_rdmux2() argument
2875 ha->isp_ops->wr_reg_indirect(ha, sel_addr1, sel_val1); in qla83xx_minidump_process_rdmux2()
2879 ha->isp_ops->wr_reg_indirect(ha, sel_addr2, t_sel_val); in qla83xx_minidump_process_rdmux2()
2880 ha->isp_ops->rd_reg_indirect(ha, read_addr, &data); in qla83xx_minidump_process_rdmux2()
2884 ha->isp_ops->wr_reg_indirect(ha, sel_addr1, sel_val2); in qla83xx_minidump_process_rdmux2()
2888 ha->isp_ops->wr_reg_indirect(ha, sel_addr2, t_sel_val); in qla83xx_minidump_process_rdmux2()
2889 ha->isp_ops->rd_reg_indirect(ha, read_addr, &data); in qla83xx_minidump_process_rdmux2()
2900 static uint32_t qla83xx_minidump_process_pollrdmwr(struct scsi_qla_host *ha, in qla83xx_minidump_process_pollrdmwr() argument
2917 ha->isp_ops->wr_reg_indirect(ha, addr_1, value_1); in qla83xx_minidump_process_pollrdmwr()
2921 ha->isp_ops->rd_reg_indirect(ha, addr_1, &r_value); in qla83xx_minidump_process_pollrdmwr()
2928 ql4_printk(KERN_ERR, ha, "%s: TIMEOUT_1\n", in qla83xx_minidump_process_pollrdmwr()
2936 ha->isp_ops->rd_reg_indirect(ha, addr_2, &data); in qla83xx_minidump_process_pollrdmwr()
2938 ha->isp_ops->wr_reg_indirect(ha, addr_2, data); in qla83xx_minidump_process_pollrdmwr()
2939 ha->isp_ops->wr_reg_indirect(ha, addr_1, value_2); in qla83xx_minidump_process_pollrdmwr()
2943 ha->isp_ops->rd_reg_indirect(ha, addr_1, &r_value); in qla83xx_minidump_process_pollrdmwr()
2950 ql4_printk(KERN_ERR, ha, "%s: TIMEOUT_2\n", in qla83xx_minidump_process_pollrdmwr()
2966 static uint32_t qla4_83xx_minidump_process_rdrom(struct scsi_qla_host *ha, in qla4_83xx_minidump_process_rdrom() argument
2978 DEBUG2(ql4_printk(KERN_INFO, ha, "[%s]: fl_addr: 0x%x, count: 0x%x\n", in qla4_83xx_minidump_process_rdrom()
2981 rval = qla4_83xx_lockless_flash_read_u32(ha, fl_addr, in qla4_83xx_minidump_process_rdrom()
2985 ql4_printk(KERN_ERR, ha, "%s: Flash Read Error,Count=%d\n", in qla4_83xx_minidump_process_rdrom()
3001 static int qla4_8xxx_collect_md_data(struct scsi_qla_host *ha) in qla4_8xxx_collect_md_data() argument
3012 ha->fw_dump_skip_size = 0; in qla4_8xxx_collect_md_data()
3013 if (!ha->fw_dump) { in qla4_8xxx_collect_md_data()
3014 ql4_printk(KERN_INFO, ha, "%s(%ld) No buffer to dump\n", in qla4_8xxx_collect_md_data()
3015 __func__, ha->host_no); in qla4_8xxx_collect_md_data()
3020 ha->fw_dump_tmplt_hdr; in qla4_8xxx_collect_md_data()
3021 data_ptr = (uint32_t *)((uint8_t *)ha->fw_dump + in qla4_8xxx_collect_md_data()
3022 ha->fw_dump_tmplt_size); in qla4_8xxx_collect_md_data()
3023 data_collected += ha->fw_dump_tmplt_size; in qla4_8xxx_collect_md_data()
3026 ql4_printk(KERN_INFO, ha, "[%s]: starting data ptr: %p\n", in qla4_8xxx_collect_md_data()
3028 ql4_printk(KERN_INFO, ha, in qla4_8xxx_collect_md_data()
3031 ql4_printk(KERN_INFO, ha, "[%s]: Capture Mask obtained: 0x%x\n", in qla4_8xxx_collect_md_data()
3032 __func__, ha->fw_dump_capture_mask); in qla4_8xxx_collect_md_data()
3033 ql4_printk(KERN_INFO, ha, "[%s]: Total_data_size 0x%x, %d obtained\n", in qla4_8xxx_collect_md_data()
3034 __func__, ha->fw_dump_size, ha->fw_dump_size); in qla4_8xxx_collect_md_data()
3042 (((uint8_t *)ha->fw_dump_tmplt_hdr) + in qla4_8xxx_collect_md_data()
3045 if (is_qla8032(ha) || is_qla8042(ha)) in qla4_8xxx_collect_md_data()
3047 tmplt_hdr->ocm_window_reg[ha->func_num]; in qla4_8xxx_collect_md_data()
3051 if (data_collected > ha->fw_dump_size) { in qla4_8xxx_collect_md_data()
3052 ql4_printk(KERN_INFO, ha, in qla4_8xxx_collect_md_data()
3054 data_collected, ha->fw_dump_size); in qla4_8xxx_collect_md_data()
3059 ha->fw_dump_capture_mask)) { in qla4_8xxx_collect_md_data()
3065 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_collect_md_data()
3068 (ha->fw_dump_size - data_collected))); in qla4_8xxx_collect_md_data()
3075 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3078 rval = qla4_8xxx_minidump_process_control(ha, in qla4_8xxx_collect_md_data()
3081 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3086 qla4_8xxx_minidump_process_rdcrb(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3090 rval = qla4_8xxx_minidump_process_rdmem(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3093 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3099 if (is_qla8022(ha)) { in qla4_8xxx_collect_md_data()
3100 qla4_82xx_minidump_process_rdrom(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3102 } else if (is_qla8032(ha) || is_qla8042(ha)) { in qla4_8xxx_collect_md_data()
3103 rval = qla4_83xx_minidump_process_rdrom(ha, in qla4_8xxx_collect_md_data()
3107 qla4_8xxx_mark_entry_skipped(ha, in qla4_8xxx_collect_md_data()
3116 rval = qla4_8xxx_minidump_process_l2tag(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3119 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3127 qla4_8xxx_minidump_process_l1cache(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3131 qla4_8xxx_minidump_process_rdocm(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3135 qla4_8xxx_minidump_process_rdmux(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3139 qla4_8xxx_minidump_process_queue(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3143 if (is_qla8022(ha)) { in qla4_8xxx_collect_md_data()
3144 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3147 rval = qla83xx_minidump_process_pollrd(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3150 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3153 if (is_qla8022(ha)) { in qla4_8xxx_collect_md_data()
3154 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3157 qla83xx_minidump_process_rdmux2(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3161 if (is_qla8022(ha)) { in qla4_8xxx_collect_md_data()
3162 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3165 rval = qla83xx_minidump_process_pollrdmwr(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3168 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3171 rval = qla4_84xx_minidump_process_rddfe(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3174 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3177 rval = qla4_84xx_minidump_process_rdmdio(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3180 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3183 rval = qla4_84xx_minidump_process_pollwr(ha, entry_hdr, in qla4_8xxx_collect_md_data()
3186 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3190 qla4_8xxx_mark_entry_skipped(ha, entry_hdr, i); in qla4_8xxx_collect_md_data()
3194 data_collected = (uint8_t *)data_ptr - (uint8_t *)ha->fw_dump; in qla4_8xxx_collect_md_data()
3202 if ((data_collected + ha->fw_dump_skip_size) != ha->fw_dump_size) { in qla4_8xxx_collect_md_data()
3203 ql4_printk(KERN_INFO, ha, in qla4_8xxx_collect_md_data()
3205 data_collected, ha->fw_dump_size); in qla4_8xxx_collect_md_data()
3210 DEBUG2(ql4_printk(KERN_INFO, ha, "Leaving fn: %s Last entry: 0x%x\n", in qla4_8xxx_collect_md_data()
3221 static void qla4_8xxx_uevent_emit(struct scsi_qla_host *ha, u32 code) in qla4_8xxx_uevent_emit() argument
3229 ha->host_no); in qla4_8xxx_uevent_emit()
3236 kobject_uevent_env(&(&ha->pdev->dev)->kobj, KOBJ_CHANGE, envp); in qla4_8xxx_uevent_emit()
3239 void qla4_8xxx_get_minidump(struct scsi_qla_host *ha) in qla4_8xxx_get_minidump() argument
3241 if (ql4xenablemd && test_bit(AF_FW_RECOVERY, &ha->flags) && in qla4_8xxx_get_minidump()
3242 !test_bit(AF_82XX_FW_DUMPED, &ha->flags)) { in qla4_8xxx_get_minidump()
3243 if (!qla4_8xxx_collect_md_data(ha)) { in qla4_8xxx_get_minidump()
3244 qla4_8xxx_uevent_emit(ha, QL4_UEVENT_CODE_FW_DUMP); in qla4_8xxx_get_minidump()
3245 set_bit(AF_82XX_FW_DUMPED, &ha->flags); in qla4_8xxx_get_minidump()
3247 ql4_printk(KERN_INFO, ha, "%s: Unable to collect minidump\n", in qla4_8xxx_get_minidump()
3259 int qla4_8xxx_device_bootstrap(struct scsi_qla_host *ha) in qla4_8xxx_device_bootstrap() argument
3266 need_reset = ha->isp_ops->need_reset(ha); in qla4_8xxx_device_bootstrap()
3270 if (test_bit(AF_FW_RECOVERY, &ha->flags)) in qla4_8xxx_device_bootstrap()
3271 ha->isp_ops->rom_lock_recovery(ha); in qla4_8xxx_device_bootstrap()
3273 old_count = qla4_8xxx_rd_direct(ha, QLA8XXX_PEG_ALIVE_COUNTER); in qla4_8xxx_device_bootstrap()
3276 count = qla4_8xxx_rd_direct(ha, in qla4_8xxx_device_bootstrap()
3283 ha->isp_ops->rom_lock_recovery(ha); in qla4_8xxx_device_bootstrap()
3287 ql4_printk(KERN_INFO, ha, "HW State: INITIALIZING\n"); in qla4_8xxx_device_bootstrap()
3288 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DEV_STATE, in qla4_8xxx_device_bootstrap()
3291 ha->isp_ops->idc_unlock(ha); in qla4_8xxx_device_bootstrap()
3293 if (is_qla8022(ha)) in qla4_8xxx_device_bootstrap()
3294 qla4_8xxx_get_minidump(ha); in qla4_8xxx_device_bootstrap()
3296 rval = ha->isp_ops->restart_firmware(ha); in qla4_8xxx_device_bootstrap()
3297 ha->isp_ops->idc_lock(ha); in qla4_8xxx_device_bootstrap()
3300 ql4_printk(KERN_INFO, ha, "HW State: FAILED\n"); in qla4_8xxx_device_bootstrap()
3301 qla4_8xxx_clear_drv_active(ha); in qla4_8xxx_device_bootstrap()
3302 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DEV_STATE, in qla4_8xxx_device_bootstrap()
3308 ql4_printk(KERN_INFO, ha, "HW State: READY\n"); in qla4_8xxx_device_bootstrap()
3309 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DEV_STATE, QLA8XXX_DEV_READY); in qla4_8xxx_device_bootstrap()
3321 qla4_82xx_need_reset_handler(struct scsi_qla_host *ha) in qla4_82xx_need_reset_handler() argument
3327 ql4_printk(KERN_INFO, ha, in qla4_82xx_need_reset_handler()
3330 if (test_and_clear_bit(AF_ONLINE, &ha->flags)) { in qla4_82xx_need_reset_handler()
3331 qla4_82xx_idc_unlock(ha); in qla4_82xx_need_reset_handler()
3332 ha->isp_ops->disable_intrs(ha); in qla4_82xx_need_reset_handler()
3333 qla4_82xx_idc_lock(ha); in qla4_82xx_need_reset_handler()
3336 if (!test_bit(AF_8XXX_RST_OWNER, &ha->flags)) { in qla4_82xx_need_reset_handler()
3337 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_82xx_need_reset_handler()
3339 __func__, ha->host_no)); in qla4_82xx_need_reset_handler()
3340 qla4_8xxx_set_rst_ready(ha); in qla4_82xx_need_reset_handler()
3342 active_mask = (~(1 << (ha->func_num * 4))); in qla4_82xx_need_reset_handler()
3346 reset_timeout = jiffies + (ha->nx_reset_timeout * HZ); in qla4_82xx_need_reset_handler()
3348 drv_state = qla4_82xx_rd_32(ha, QLA82XX_CRB_DRV_STATE); in qla4_82xx_need_reset_handler()
3349 drv_active = qla4_82xx_rd_32(ha, QLA82XX_CRB_DRV_ACTIVE); in qla4_82xx_need_reset_handler()
3351 ql4_printk(KERN_INFO, ha, in qla4_82xx_need_reset_handler()
3353 __func__, ha->host_no, drv_state, drv_active); in qla4_82xx_need_reset_handler()
3357 ql4_printk(KERN_INFO, ha, in qla4_82xx_need_reset_handler()
3367 if (test_bit(AF_8XXX_RST_OWNER, &ha->flags)) { in qla4_82xx_need_reset_handler()
3368 ql4_printk(KERN_INFO, ha, in qla4_82xx_need_reset_handler()
3370 __func__, ha->host_no, drv_state, in qla4_82xx_need_reset_handler()
3373 qla4_82xx_idc_unlock(ha); in qla4_82xx_need_reset_handler()
3375 qla4_82xx_idc_lock(ha); in qla4_82xx_need_reset_handler()
3377 drv_state = qla4_82xx_rd_32(ha, QLA82XX_CRB_DRV_STATE); in qla4_82xx_need_reset_handler()
3378 drv_active = qla4_82xx_rd_32(ha, QLA82XX_CRB_DRV_ACTIVE); in qla4_82xx_need_reset_handler()
3382 clear_bit(AF_8XXX_RST_OWNER, &ha->flags); in qla4_82xx_need_reset_handler()
3384 dev_state = qla4_82xx_rd_32(ha, QLA82XX_CRB_DEV_STATE); in qla4_82xx_need_reset_handler()
3385 ql4_printk(KERN_INFO, ha, "Device state is 0x%x = %s\n", dev_state, in qla4_82xx_need_reset_handler()
3390 ql4_printk(KERN_INFO, ha, "HW State: COLD/RE-INIT\n"); in qla4_82xx_need_reset_handler()
3391 qla4_82xx_wr_32(ha, QLA82XX_CRB_DEV_STATE, QLA8XXX_DEV_COLD); in qla4_82xx_need_reset_handler()
3392 qla4_8xxx_set_rst_ready(ha); in qla4_82xx_need_reset_handler()
3401 qla4_8xxx_need_qsnt_handler(struct scsi_qla_host *ha) in qla4_8xxx_need_qsnt_handler() argument
3403 ha->isp_ops->idc_lock(ha); in qla4_8xxx_need_qsnt_handler()
3404 qla4_8xxx_set_qsnt_ready(ha); in qla4_8xxx_need_qsnt_handler()
3405 ha->isp_ops->idc_unlock(ha); in qla4_8xxx_need_qsnt_handler()
3408 static void qla4_82xx_set_idc_ver(struct scsi_qla_host *ha) in qla4_82xx_set_idc_ver() argument
3413 drv_active = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_ACTIVE); in qla4_82xx_set_idc_ver()
3414 if (drv_active == (1 << (ha->func_num * 4))) { in qla4_82xx_set_idc_ver()
3415 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DRV_IDC_VERSION, in qla4_82xx_set_idc_ver()
3417 ql4_printk(KERN_INFO, ha, in qla4_82xx_set_idc_ver()
3421 idc_ver = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_IDC_VERSION); in qla4_82xx_set_idc_ver()
3423 ql4_printk(KERN_INFO, ha, in qla4_82xx_set_idc_ver()
3430 static int qla4_83xx_set_idc_ver(struct scsi_qla_host *ha) in qla4_83xx_set_idc_ver() argument
3436 drv_active = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_ACTIVE); in qla4_83xx_set_idc_ver()
3437 if (drv_active == (1 << ha->func_num)) { in qla4_83xx_set_idc_ver()
3438 idc_ver = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_IDC_VERSION); in qla4_83xx_set_idc_ver()
3441 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DRV_IDC_VERSION, idc_ver); in qla4_83xx_set_idc_ver()
3442 ql4_printk(KERN_INFO, ha, in qla4_83xx_set_idc_ver()
3446 idc_ver = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_IDC_VERSION); in qla4_83xx_set_idc_ver()
3449 ql4_printk(KERN_INFO, ha, in qla4_83xx_set_idc_ver()
3459 idc_ver = qla4_83xx_rd_reg(ha, QLA83XX_CRB_IDC_VER_MINOR); in qla4_83xx_set_idc_ver()
3460 idc_ver &= ~(0x03 << (ha->func_num * 2)); in qla4_83xx_set_idc_ver()
3461 idc_ver |= (QLA83XX_IDC_VER_MIN_VALUE << (ha->func_num * 2)); in qla4_83xx_set_idc_ver()
3462 qla4_83xx_wr_reg(ha, QLA83XX_CRB_IDC_VER_MINOR, idc_ver); in qla4_83xx_set_idc_ver()
3468 int qla4_8xxx_update_idc_reg(struct scsi_qla_host *ha) in qla4_8xxx_update_idc_reg() argument
3473 if (test_bit(AF_INIT_DONE, &ha->flags)) in qla4_8xxx_update_idc_reg()
3476 ha->isp_ops->idc_lock(ha); in qla4_8xxx_update_idc_reg()
3477 qla4_8xxx_set_drv_active(ha); in qla4_8xxx_update_idc_reg()
3483 if (is_qla8032(ha) || is_qla8042(ha)) { in qla4_8xxx_update_idc_reg()
3484 drv_active = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_ACTIVE); in qla4_8xxx_update_idc_reg()
3485 if ((drv_active == (1 << ha->func_num)) && !ql4xdontresethba) in qla4_8xxx_update_idc_reg()
3486 qla4_83xx_clear_idc_dontreset(ha); in qla4_8xxx_update_idc_reg()
3489 if (is_qla8022(ha)) { in qla4_8xxx_update_idc_reg()
3490 qla4_82xx_set_idc_ver(ha); in qla4_8xxx_update_idc_reg()
3491 } else if (is_qla8032(ha) || is_qla8042(ha)) { in qla4_8xxx_update_idc_reg()
3492 rval = qla4_83xx_set_idc_ver(ha); in qla4_8xxx_update_idc_reg()
3494 qla4_8xxx_clear_drv_active(ha); in qla4_8xxx_update_idc_reg()
3497 ha->isp_ops->idc_unlock(ha); in qla4_8xxx_update_idc_reg()
3509 int qla4_8xxx_device_state_handler(struct scsi_qla_host *ha) in qla4_8xxx_device_state_handler() argument
3515 rval = qla4_8xxx_update_idc_reg(ha); in qla4_8xxx_device_state_handler()
3519 dev_state = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DEV_STATE); in qla4_8xxx_device_state_handler()
3520 DEBUG2(ql4_printk(KERN_INFO, ha, "Device state is 0x%x = %s\n", in qla4_8xxx_device_state_handler()
3525 dev_init_timeout = jiffies + (ha->nx_dev_init_timeout * HZ); in qla4_8xxx_device_state_handler()
3527 ha->isp_ops->idc_lock(ha); in qla4_8xxx_device_state_handler()
3531 ql4_printk(KERN_WARNING, ha, in qla4_8xxx_device_state_handler()
3536 qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DEV_STATE, in qla4_8xxx_device_state_handler()
3540 dev_state = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DEV_STATE); in qla4_8xxx_device_state_handler()
3541 ql4_printk(KERN_INFO, ha, "Device state is 0x%x = %s\n", in qla4_8xxx_device_state_handler()
3550 rval = qla4_8xxx_device_bootstrap(ha); in qla4_8xxx_device_state_handler()
3553 ha->isp_ops->idc_unlock(ha); in qla4_8xxx_device_state_handler()
3555 ha->isp_ops->idc_lock(ha); in qla4_8xxx_device_state_handler()
3563 if (is_qla8032(ha) || is_qla8042(ha)) { in qla4_8xxx_device_state_handler()
3564 qla4_83xx_need_reset_handler(ha); in qla4_8xxx_device_state_handler()
3565 } else if (is_qla8022(ha)) { in qla4_8xxx_device_state_handler()
3567 qla4_82xx_need_reset_handler(ha); in qla4_8xxx_device_state_handler()
3571 (ha->nx_dev_init_timeout * HZ); in qla4_8xxx_device_state_handler()
3573 ha->isp_ops->idc_unlock(ha); in qla4_8xxx_device_state_handler()
3575 ha->isp_ops->idc_lock(ha); in qla4_8xxx_device_state_handler()
3581 qla4_8xxx_need_qsnt_handler(ha); in qla4_8xxx_device_state_handler()
3584 ha->isp_ops->idc_unlock(ha); in qla4_8xxx_device_state_handler()
3586 ha->isp_ops->idc_lock(ha); in qla4_8xxx_device_state_handler()
3589 ha->isp_ops->idc_unlock(ha); in qla4_8xxx_device_state_handler()
3590 qla4xxx_dead_adapter_cleanup(ha); in qla4_8xxx_device_state_handler()
3592 ha->isp_ops->idc_lock(ha); in qla4_8xxx_device_state_handler()
3595 ha->isp_ops->idc_unlock(ha); in qla4_8xxx_device_state_handler()
3596 qla4xxx_dead_adapter_cleanup(ha); in qla4_8xxx_device_state_handler()
3598 ha->isp_ops->idc_lock(ha); in qla4_8xxx_device_state_handler()
3603 ha->isp_ops->idc_unlock(ha); in qla4_8xxx_device_state_handler()
3608 int qla4_8xxx_load_risc(struct scsi_qla_host *ha) in qla4_8xxx_load_risc() argument
3613 if (is_qla8032(ha) || is_qla8042(ha)) { in qla4_8xxx_load_risc()
3614 writel(0, &ha->qla4_83xx_reg->risc_intr); in qla4_8xxx_load_risc()
3615 readl(&ha->qla4_83xx_reg->risc_intr); in qla4_8xxx_load_risc()
3616 } else if (is_qla8022(ha)) { in qla4_8xxx_load_risc()
3617 writel(0, &ha->qla4_82xx_reg->host_int); in qla4_8xxx_load_risc()
3618 readl(&ha->qla4_82xx_reg->host_int); in qla4_8xxx_load_risc()
3621 retval = qla4_8xxx_device_state_handler(ha); in qla4_8xxx_load_risc()
3625 qla4xxx_init_rings(ha); in qla4_8xxx_load_risc()
3627 if (retval == QLA_SUCCESS && !test_bit(AF_IRQ_ATTACHED, &ha->flags)) in qla4_8xxx_load_risc()
3628 retval = qla4xxx_request_irqs(ha); in qla4_8xxx_load_risc()
3657 qla4_82xx_read_flash_data(struct scsi_qla_host *ha, uint32_t *dwptr, in qla4_82xx_read_flash_data() argument
3663 while ((qla4_82xx_rom_lock(ha) != 0) && (loops < 50000)) { in qla4_82xx_read_flash_data()
3669 ql4_printk(KERN_WARNING, ha, "ROM lock failed\n"); in qla4_82xx_read_flash_data()
3675 if (qla4_82xx_do_rom_fast_read(ha, faddr, &val)) { in qla4_82xx_read_flash_data()
3676 ql4_printk(KERN_WARNING, ha, in qla4_82xx_read_flash_data()
3684 qla4_82xx_rom_unlock(ha); in qla4_82xx_read_flash_data()
3692 qla4_82xx_read_optrom_data(struct scsi_qla_host *ha, uint8_t *buf, in qla4_82xx_read_optrom_data() argument
3695 qla4_82xx_read_flash_data(ha, (uint32_t *)buf, offset, length); in qla4_82xx_read_optrom_data()
3700 qla4_8xxx_find_flt_start(struct scsi_qla_host *ha, uint32_t *start) in qla4_8xxx_find_flt_start() argument
3712 DEBUG2(ql4_printk(KERN_INFO, ha, "FLTL[%s] = 0x%x.\n", loc, *start)); in qla4_8xxx_find_flt_start()
3717 qla4_8xxx_get_flt_info(struct scsi_qla_host *ha, uint32_t flt_addr) in qla4_8xxx_get_flt_info() argument
3725 struct ql82xx_hw_data *hw = &ha->hw; in qla4_8xxx_get_flt_info()
3728 wptr = (uint16_t *)ha->request_ring; in qla4_8xxx_get_flt_info()
3729 flt = (struct qla_flt_header *)ha->request_ring; in qla4_8xxx_get_flt_info()
3732 if (is_qla8022(ha)) { in qla4_8xxx_get_flt_info()
3733 qla4_82xx_read_optrom_data(ha, (uint8_t *)ha->request_ring, in qla4_8xxx_get_flt_info()
3735 } else if (is_qla8032(ha) || is_qla8042(ha)) { in qla4_8xxx_get_flt_info()
3736 status = qla4_83xx_flash_read_u32(ha, flt_addr << 2, in qla4_8xxx_get_flt_info()
3737 (uint8_t *)ha->request_ring, in qla4_8xxx_get_flt_info()
3746 DEBUG2(ql4_printk(KERN_INFO, ha, "Unsupported FLT detected: " in qla4_8xxx_get_flt_info()
3757 DEBUG2(ql4_printk(KERN_INFO, ha, "Inconsistent FLT detected: " in qla4_8xxx_get_flt_info()
3770 DEBUG3(ql4_printk(KERN_DEBUG, ha, "FLT[%02x]: start=0x%x " in qla4_8xxx_get_flt_info()
3817 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_get_flt_info()
3827 qla4_82xx_get_fdt_info(struct scsi_qla_host *ha) in qla4_82xx_get_fdt_info() argument
3838 struct ql82xx_hw_data *hw = &ha->hw; in qla4_82xx_get_fdt_info()
3843 wptr = (uint16_t *)ha->request_ring; in qla4_82xx_get_fdt_info()
3844 fdt = (struct qla_fdt_layout *)ha->request_ring; in qla4_82xx_get_fdt_info()
3845 qla4_82xx_read_optrom_data(ha, (uint8_t *)ha->request_ring, in qla4_82xx_get_fdt_info()
3860 DEBUG2(ql4_printk(KERN_INFO, ha, "Inconsistent FDT detected: " in qla4_82xx_get_fdt_info()
3886 DEBUG2(ql4_printk(KERN_INFO, ha, "FDT[%s]: (0x%x/0x%x) erase=0x%x " in qla4_82xx_get_fdt_info()
3894 qla4_82xx_get_idc_param(struct scsi_qla_host *ha) in qla4_82xx_get_idc_param() argument
3899 if (!is_qla8022(ha)) in qla4_82xx_get_idc_param()
3901 wptr = (uint32_t *)ha->request_ring; in qla4_82xx_get_idc_param()
3902 qla4_82xx_read_optrom_data(ha, (uint8_t *)ha->request_ring, in qla4_82xx_get_idc_param()
3906 ha->nx_dev_init_timeout = ROM_DEV_INIT_TIMEOUT; in qla4_82xx_get_idc_param()
3907 ha->nx_reset_timeout = ROM_DRV_RESET_ACK_TIMEOUT; in qla4_82xx_get_idc_param()
3909 ha->nx_dev_init_timeout = le32_to_cpu(*wptr++); in qla4_82xx_get_idc_param()
3910 ha->nx_reset_timeout = le32_to_cpu(*wptr); in qla4_82xx_get_idc_param()
3913 DEBUG2(ql4_printk(KERN_DEBUG, ha, in qla4_82xx_get_idc_param()
3914 "ha->nx_dev_init_timeout = %d\n", ha->nx_dev_init_timeout)); in qla4_82xx_get_idc_param()
3915 DEBUG2(ql4_printk(KERN_DEBUG, ha, in qla4_82xx_get_idc_param()
3916 "ha->nx_reset_timeout = %d\n", ha->nx_reset_timeout)); in qla4_82xx_get_idc_param()
3920 void qla4_82xx_queue_mbox_cmd(struct scsi_qla_host *ha, uint32_t *mbx_cmd, in qla4_82xx_queue_mbox_cmd() argument
3927 writel(mbx_cmd[i], &ha->qla4_82xx_reg->mailbox_in[i]); in qla4_82xx_queue_mbox_cmd()
3930 writel(mbx_cmd[0], &ha->qla4_82xx_reg->mailbox_in[0]); in qla4_82xx_queue_mbox_cmd()
3931 readl(&ha->qla4_82xx_reg->mailbox_in[0]); in qla4_82xx_queue_mbox_cmd()
3932 writel(HINT_MBX_INT_PENDING, &ha->qla4_82xx_reg->hint); in qla4_82xx_queue_mbox_cmd()
3933 readl(&ha->qla4_82xx_reg->hint); in qla4_82xx_queue_mbox_cmd()
3936 void qla4_82xx_process_mbox_intr(struct scsi_qla_host *ha, int out_count) in qla4_82xx_process_mbox_intr() argument
3940 intr_status = readl(&ha->qla4_82xx_reg->host_int); in qla4_82xx_process_mbox_intr()
3942 ha->mbox_status_count = out_count; in qla4_82xx_process_mbox_intr()
3943 intr_status = readl(&ha->qla4_82xx_reg->host_status); in qla4_82xx_process_mbox_intr()
3944 ha->isp_ops->interrupt_service_routine(ha, intr_status); in qla4_82xx_process_mbox_intr()
3946 if (test_bit(AF_INTERRUPTS_ON, &ha->flags) && in qla4_82xx_process_mbox_intr()
3947 (!ha->pdev->msi_enabled && !ha->pdev->msix_enabled)) in qla4_82xx_process_mbox_intr()
3948 qla4_82xx_wr_32(ha, ha->nx_legacy_intr.tgt_mask_reg, in qla4_82xx_process_mbox_intr()
3954 qla4_8xxx_get_flash_info(struct scsi_qla_host *ha) in qla4_8xxx_get_flash_info() argument
3959 ret = qla4_8xxx_find_flt_start(ha, &flt_addr); in qla4_8xxx_get_flash_info()
3963 qla4_8xxx_get_flt_info(ha, flt_addr); in qla4_8xxx_get_flash_info()
3964 if (is_qla8022(ha)) { in qla4_8xxx_get_flash_info()
3965 qla4_82xx_get_fdt_info(ha); in qla4_8xxx_get_flash_info()
3966 qla4_82xx_get_idc_param(ha); in qla4_8xxx_get_flash_info()
3967 } else if (is_qla8032(ha) || is_qla8042(ha)) { in qla4_8xxx_get_flash_info()
3968 qla4_83xx_get_idc_param(ha); in qla4_8xxx_get_flash_info()
3984 qla4_8xxx_stop_firmware(struct scsi_qla_host *ha) in qla4_8xxx_stop_firmware() argument
3994 status = qla4xxx_mailbox_command(ha, MBOX_REG_COUNT, 1, in qla4_8xxx_stop_firmware()
3997 DEBUG2(printk("scsi%ld: %s: status = %d\n", ha->host_no, in qla4_8xxx_stop_firmware()
4007 qla4_82xx_isp_reset(struct scsi_qla_host *ha) in qla4_82xx_isp_reset() argument
4012 qla4_82xx_idc_lock(ha); in qla4_82xx_isp_reset()
4013 dev_state = qla4_82xx_rd_32(ha, QLA82XX_CRB_DEV_STATE); in qla4_82xx_isp_reset()
4016 ql4_printk(KERN_INFO, ha, "HW State: NEED RESET\n"); in qla4_82xx_isp_reset()
4017 qla4_82xx_wr_32(ha, QLA82XX_CRB_DEV_STATE, in qla4_82xx_isp_reset()
4019 set_bit(AF_8XXX_RST_OWNER, &ha->flags); in qla4_82xx_isp_reset()
4021 ql4_printk(KERN_INFO, ha, "HW State: DEVICE INITIALIZING\n"); in qla4_82xx_isp_reset()
4023 qla4_82xx_idc_unlock(ha); in qla4_82xx_isp_reset()
4025 rval = qla4_8xxx_device_state_handler(ha); in qla4_82xx_isp_reset()
4027 qla4_82xx_idc_lock(ha); in qla4_82xx_isp_reset()
4028 qla4_8xxx_clear_rst_ready(ha); in qla4_82xx_isp_reset()
4029 qla4_82xx_idc_unlock(ha); in qla4_82xx_isp_reset()
4032 ql4_printk(KERN_INFO, ha, "Clearing AF_RECOVERY in qla4_82xx_isp_reset\n"); in qla4_82xx_isp_reset()
4033 clear_bit(AF_FW_RECOVERY, &ha->flags); in qla4_82xx_isp_reset()
4044 int qla4_8xxx_get_sys_info(struct scsi_qla_host *ha) in qla4_8xxx_get_sys_info() argument
4052 sys_info = dma_alloc_coherent(&ha->pdev->dev, sizeof(*sys_info), in qla4_8xxx_get_sys_info()
4056 ha->host_no, __func__)); in qla4_8xxx_get_sys_info()
4068 if (qla4xxx_mailbox_command(ha, MBOX_REG_COUNT, 6, &mbox_cmd[0], in qla4_8xxx_get_sys_info()
4071 ha->host_no, __func__)); in qla4_8xxx_get_sys_info()
4076 if (((is_qla8032(ha) || is_qla8042(ha)) ? mbox_sts[3] : mbox_sts[4]) < in qla4_8xxx_get_sys_info()
4079 " error (%x)\n", ha->host_no, __func__, mbox_sts[4])); in qla4_8xxx_get_sys_info()
4084 ha->port_num = sys_info->port_num; in qla4_8xxx_get_sys_info()
4085 memcpy(ha->my_mac, &sys_info->mac_addr[0], in qla4_8xxx_get_sys_info()
4086 min(sizeof(ha->my_mac), sizeof(sys_info->mac_addr))); in qla4_8xxx_get_sys_info()
4087 memcpy(ha->serial_number, &sys_info->serial_number, in qla4_8xxx_get_sys_info()
4088 min(sizeof(ha->serial_number), sizeof(sys_info->serial_number))); in qla4_8xxx_get_sys_info()
4089 memcpy(ha->model_name, &sys_info->board_id_str, in qla4_8xxx_get_sys_info()
4090 min(sizeof(ha->model_name), sizeof(sys_info->board_id_str))); in qla4_8xxx_get_sys_info()
4091 ha->phy_port_cnt = sys_info->phys_port_cnt; in qla4_8xxx_get_sys_info()
4092 ha->phy_port_num = sys_info->port_num; in qla4_8xxx_get_sys_info()
4093 ha->iscsi_pci_func_cnt = sys_info->iscsi_pci_func_cnt; in qla4_8xxx_get_sys_info()
4096 ha->host_no, __func__, ha->my_mac, ha->serial_number)); in qla4_8xxx_get_sys_info()
4101 dma_free_coherent(&ha->pdev->dev, sizeof(*sys_info), sys_info, in qla4_8xxx_get_sys_info()
4108 int qla4_8xxx_intr_enable(struct scsi_qla_host *ha) in qla4_8xxx_intr_enable() argument
4113 DEBUG2(ql4_printk(KERN_INFO, ha, "%s\n", __func__)); in qla4_8xxx_intr_enable()
4119 if (qla4xxx_mailbox_command(ha, MBOX_REG_COUNT, 1, &mbox_cmd[0], in qla4_8xxx_intr_enable()
4121 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_intr_enable()
4129 int qla4_8xxx_intr_disable(struct scsi_qla_host *ha) in qla4_8xxx_intr_disable() argument
4134 DEBUG2(ql4_printk(KERN_INFO, ha, "%s\n", __func__)); in qla4_8xxx_intr_disable()
4140 if (qla4xxx_mailbox_command(ha, MBOX_REG_COUNT, 1, &mbox_cmd[0], in qla4_8xxx_intr_disable()
4142 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_8xxx_intr_disable()
4152 qla4_82xx_enable_intrs(struct scsi_qla_host *ha) in qla4_82xx_enable_intrs() argument
4154 qla4_8xxx_intr_enable(ha); in qla4_82xx_enable_intrs()
4156 spin_lock_irq(&ha->hardware_lock); in qla4_82xx_enable_intrs()
4158 qla4_82xx_wr_32(ha, ha->nx_legacy_intr.tgt_mask_reg, 0xfbff); in qla4_82xx_enable_intrs()
4159 spin_unlock_irq(&ha->hardware_lock); in qla4_82xx_enable_intrs()
4160 set_bit(AF_INTERRUPTS_ON, &ha->flags); in qla4_82xx_enable_intrs()
4164 qla4_82xx_disable_intrs(struct scsi_qla_host *ha) in qla4_82xx_disable_intrs() argument
4166 if (test_and_clear_bit(AF_INTERRUPTS_ON, &ha->flags)) in qla4_82xx_disable_intrs()
4167 qla4_8xxx_intr_disable(ha); in qla4_82xx_disable_intrs()
4169 spin_lock_irq(&ha->hardware_lock); in qla4_82xx_disable_intrs()
4171 qla4_82xx_wr_32(ha, ha->nx_legacy_intr.tgt_mask_reg, 0x0400); in qla4_82xx_disable_intrs()
4172 spin_unlock_irq(&ha->hardware_lock); in qla4_82xx_disable_intrs()
4176 qla4_8xxx_enable_msix(struct scsi_qla_host *ha) in qla4_8xxx_enable_msix() argument
4180 ret = pci_alloc_irq_vectors(ha->pdev, QLA_MSIX_ENTRIES, in qla4_8xxx_enable_msix()
4183 ql4_printk(KERN_WARNING, ha, in qla4_8xxx_enable_msix()
4189 ret = request_irq(pci_irq_vector(ha->pdev, 0), in qla4_8xxx_enable_msix()
4191 ha); in qla4_8xxx_enable_msix()
4195 ret = request_irq(pci_irq_vector(ha->pdev, 1), in qla4_8xxx_enable_msix()
4196 qla4_8xxx_msix_rsp_q, 0, "qla4xxx (rsp_q)", ha); in qla4_8xxx_enable_msix()
4203 free_irq(pci_irq_vector(ha->pdev, 0), ha); in qla4_8xxx_enable_msix()
4205 pci_free_irq_vectors(ha->pdev); in qla4_8xxx_enable_msix()
4209 int qla4_8xxx_check_init_adapter_retry(struct scsi_qla_host *ha) in qla4_8xxx_check_init_adapter_retry() argument
4214 if (!test_bit(AF_IRQ_ATTACHED, &ha->flags)) { in qla4_8xxx_check_init_adapter_retry()
4215 …ql4_printk(KERN_WARNING, ha, "%s: Skipping retry of adapter initialization as IRQs are not attache… in qla4_8xxx_check_init_adapter_retry()
4224 qla4xxx_free_irqs(ha); in qla4_8xxx_check_init_adapter_retry()