653 }
654 udelay(5);
655 }
656
657 if (test_and_clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags)) {
658 rval = mb0 & MBS_MASK;
659 fw->risc_ram[cnt] = htons(mb2);
660 } else {
661 rval = QLA_FUNCTION_FAILED;
662 }
663 }
664
665 if (rval == QLA_SUCCESS)
666 qla2xxx_copy_queues(ha, &fw->risc_ram[cnt]);
667
668 if (rval != QLA_SUCCESS) {
669 qla_printk(KERN_WARNING, ha,
670 "Failed to dump firmware (%x)!!!\n", rval);
671 ha->fw_dumped = 0;
672
673 } else {
674 qla_printk(KERN_INFO, ha,
675 "Firmware dump saved to temp buffer (%ld/%p).\n",
676 ha->host_no, ha->fw_dump);
677 ha->fw_dumped = 1;
678 }
679
680qla2100_fw_dump_failed:
681 if (!hardware_locked)
682 spin_unlock_irqrestore(&ha->hardware_lock, flags);
683}
684
685void
686qla24xx_fw_dump(scsi_qla_host_t *ha, int hardware_locked)
687{
688 int rval;
689 uint32_t cnt;
690 uint32_t risc_address;
691
692 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24;
693 uint32_t __iomem *dmp_reg;