⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qla_dbg.c

📁 linux-2.6.15.6
💻 C
📖 第 1 页 / 共 5 页
字号:
			qla_uprintf(&uiter, "\n");		}		qla_uprintf(&uiter, "%04x ", fw->mailbox_reg[cnt]);	}	qla_uprintf(&uiter, "\n\nAuto Request Response DMA Registers:");	for (cnt = 0; cnt < sizeof (fw->resp_dma_reg) / 2; cnt++) {		if (cnt % 8 == 0) {			qla_uprintf(&uiter, "\n");		}		qla_uprintf(&uiter, "%04x ", fw->resp_dma_reg[cnt]);	}	qla_uprintf(&uiter, "\n\nDMA Registers:");	for (cnt = 0; cnt < sizeof (fw->dma_reg) / 2; cnt++) {		if (cnt % 8 == 0) {			qla_uprintf(&uiter, "\n");		}		qla_uprintf(&uiter, "%04x ", fw->dma_reg[cnt]);	}	qla_uprintf(&uiter, "\n\nRISC Hardware Registers:");	for (cnt = 0; cnt < sizeof (fw->risc_hdw_reg) / 2; cnt++) {		if (cnt % 8 == 0) {			qla_uprintf(&uiter, "\n");		}		qla_uprintf(&uiter, "%04x ", fw->risc_hdw_reg[cnt]);	}	qla_uprintf(&uiter, "\n\nRISC GP0 Registers:");	for (cnt = 0; cnt < sizeof (fw->risc_gp0_reg) / 2; cnt++) {		if (cnt % 8 == 0) {			qla_uprintf(&uiter, "\n");		}		qla_uprintf(&uiter, "%04x ", fw->risc_gp0_reg[cnt]);	}	qla_uprintf(&uiter, "\n\nRISC GP1 Registers:");	for (cnt = 0; cnt < sizeof (fw->risc_gp1_reg) / 2; cnt++) {		if (cnt % 8 == 0) {			qla_uprintf(&uiter, "\n");		}		qla_uprintf(&uiter, "%04x ", fw->risc_gp1_reg[cnt]);	}	qla_uprintf(&uiter, "\n\nRISC GP2 Registers:");	for (cnt = 0; cnt < sizeof (fw->risc_gp2_reg) / 2; cnt++) {		if (cnt % 8 == 0) {			qla_uprintf(&uiter, "\n");		}		qla_uprintf(&uiter, "%04x ", fw->risc_gp2_reg[cnt]);	}	qla_uprintf(&uiter, "\n\nRISC GP3 Registers:");	for (cnt = 0; cnt < sizeof (fw->risc_gp3_reg) / 2; cnt++) {		if (cnt % 8 == 0) {			qla_uprintf(&uiter, "\n");		}		qla_uprintf(&uiter, "%04x ", fw->risc_gp3_reg[cnt]);	}	qla_uprintf(&uiter, "\n\nRISC GP4 Registers:");	for (cnt = 0; cnt < sizeof (fw->risc_gp4_reg) / 2; cnt++) {		if (cnt % 8 == 0) {			qla_uprintf(&uiter, "\n");		}		qla_uprintf(&uiter, "%04x ", fw->risc_gp4_reg[cnt]);	}	qla_uprintf(&uiter, "\n\nRISC GP5 Registers:");	for (cnt = 0; cnt < sizeof (fw->risc_gp5_reg) / 2; cnt++) {		if (cnt % 8 == 0) {			qla_uprintf(&uiter, "\n");		}		qla_uprintf(&uiter, "%04x ", fw->risc_gp5_reg[cnt]);	}	qla_uprintf(&uiter, "\n\nRISC GP6 Registers:");	for (cnt = 0; cnt < sizeof (fw->risc_gp6_reg) / 2; cnt++) {		if (cnt % 8 == 0) {			qla_uprintf(&uiter, "\n");		}		qla_uprintf(&uiter, "%04x ", fw->risc_gp6_reg[cnt]);	}	qla_uprintf(&uiter, "\n\nRISC GP7 Registers:");	for (cnt = 0; cnt < sizeof (fw->risc_gp7_reg) / 2; cnt++) {		if (cnt % 8 == 0) {			qla_uprintf(&uiter, "\n");		}		qla_uprintf(&uiter, "%04x ", fw->risc_gp7_reg[cnt]);	}	qla_uprintf(&uiter, "\n\nFrame Buffer Hardware Registers:");	for (cnt = 0; cnt < sizeof (fw->frame_buf_hdw_reg) / 2; cnt++) {		if (cnt % 8 == 0) {			qla_uprintf(&uiter, "\n");		}		qla_uprintf(&uiter, "%04x ", fw->frame_buf_hdw_reg[cnt]);	}	qla_uprintf(&uiter, "\n\nFPM B0 Registers:");	for (cnt = 0; cnt < sizeof (fw->fpm_b0_reg) / 2; cnt++) {		if (cnt % 8 == 0) {			qla_uprintf(&uiter, "\n");		}		qla_uprintf(&uiter, "%04x ", fw->fpm_b0_reg[cnt]);	}	qla_uprintf(&uiter, "\n\nFPM B1 Registers:");	for (cnt = 0; cnt < sizeof (fw->fpm_b1_reg) / 2; cnt++) {		if (cnt % 8 == 0) {			qla_uprintf(&uiter, "\n");		}		qla_uprintf(&uiter, "%04x ", fw->fpm_b1_reg[cnt]);	}	qla_uprintf(&uiter, "\n\nCode RAM Dump:");	for (cnt = 0; cnt < sizeof (fw->risc_ram) / 2; cnt++) {		if (cnt % 8 == 0) {			qla_uprintf(&uiter, "\n%04x: ", cnt + 0x0800);		}		qla_uprintf(&uiter, "%04x ", fw->risc_ram[cnt]);	}	qla_uprintf(&uiter, "\n\nStack RAM Dump:");	for (cnt = 0; cnt < sizeof (fw->stack_ram) / 2; cnt++) {		if (cnt % 8 == 0) {			qla_uprintf(&uiter, "\n%05x: ", cnt + 0x10000);		}		qla_uprintf(&uiter, "%04x ", fw->stack_ram[cnt]);	}	qla_uprintf(&uiter, "\n\nData RAM Dump:");	data_ram_cnt = ha->fw_memory_size - 0x11000 + 1;	for (cnt = 0; cnt < data_ram_cnt; cnt++) {		if (cnt % 8 == 0) {			qla_uprintf(&uiter, "\n%05x: ", cnt + 0x11000);		}		qla_uprintf(&uiter, "%04x ", fw->data_ram[cnt]);	}	qla_uprintf(&uiter, "\n\n[<==END] ISP Debug Dump.");}/** * qla2100_fw_dump() - Dumps binary data from the 2100/2200 firmware. * @ha: HA context * @hardware_locked: Called with the hardware_lock */voidqla2100_fw_dump(scsi_qla_host_t *ha, int hardware_locked){	int		rval;	uint32_t	cnt, timer;	uint16_t	risc_address;	uint16_t	mb0, mb2;	struct device_reg_2xxx __iomem *reg = &ha->iobase->isp;	uint16_t __iomem *dmp_reg;	unsigned long	flags;	struct qla2100_fw_dump	*fw;	risc_address = 0;	mb0 = mb2 = 0;	flags = 0;	if (!hardware_locked)		spin_lock_irqsave(&ha->hardware_lock, flags);	if (ha->fw_dump != NULL) {		qla_printk(KERN_WARNING, ha,		    "Firmware has been previously dumped (%p) -- ignoring "		    "request...\n", ha->fw_dump);		goto qla2100_fw_dump_failed;	}	/* Allocate (large) dump buffer. */	ha->fw_dump_order = get_order(sizeof(struct qla2100_fw_dump));	ha->fw_dump = (struct qla2100_fw_dump *) __get_free_pages(GFP_ATOMIC,	    ha->fw_dump_order);	if (ha->fw_dump == NULL) {		qla_printk(KERN_WARNING, ha,		    "Unable to allocated memory for firmware dump (%d/%Zd).\n",		    ha->fw_dump_order, sizeof(struct qla2100_fw_dump));		goto qla2100_fw_dump_failed;	}	fw = ha->fw_dump;	rval = QLA_SUCCESS;	fw->hccr = RD_REG_WORD(&reg->hccr);	/* Pause RISC. */	WRT_REG_WORD(&reg->hccr, HCCR_PAUSE_RISC);	for (cnt = 30000; (RD_REG_WORD(&reg->hccr) & HCCR_RISC_PAUSE) == 0 &&	    rval == QLA_SUCCESS; cnt--) {		if (cnt)			udelay(100);		else			rval = QLA_FUNCTION_TIMEOUT;	}	if (rval == QLA_SUCCESS) {		dmp_reg = (uint16_t __iomem *)(reg + 0);		for (cnt = 0; cnt < sizeof(fw->pbiu_reg) / 2; cnt++)			fw->pbiu_reg[cnt] = RD_REG_WORD(dmp_reg++);		dmp_reg = (uint16_t __iomem *)((uint8_t __iomem *)reg + 0x10);		for (cnt = 0; cnt < ha->mbx_count; cnt++) {			if (cnt == 8) {				dmp_reg = (uint16_t __iomem *)((uint8_t __iomem *)reg + 0xe0);			}			fw->mailbox_reg[cnt] = RD_REG_WORD(dmp_reg++);		}		dmp_reg = (uint16_t __iomem *)((uint8_t __iomem *)reg + 0x20);		for (cnt = 0; cnt < sizeof(fw->dma_reg) / 2; cnt++)			fw->dma_reg[cnt] = RD_REG_WORD(dmp_reg++);		WRT_REG_WORD(&reg->ctrl_status, 0x00);		dmp_reg = (uint16_t __iomem *)((uint8_t __iomem *)reg + 0xA0);		for (cnt = 0; cnt < sizeof(fw->risc_hdw_reg) / 2; cnt++)			fw->risc_hdw_reg[cnt] = RD_REG_WORD(dmp_reg++);		WRT_REG_WORD(&reg->pcr, 0x2000);		dmp_reg = (uint16_t __iomem *)((uint8_t __iomem *)reg + 0x80);		for (cnt = 0; cnt < sizeof(fw->risc_gp0_reg) / 2; cnt++)			fw->risc_gp0_reg[cnt] = RD_REG_WORD(dmp_reg++);		WRT_REG_WORD(&reg->pcr, 0x2100);		dmp_reg = (uint16_t __iomem *)((uint8_t __iomem *)reg + 0x80);		for (cnt = 0; cnt < sizeof(fw->risc_gp1_reg) / 2; cnt++)			fw->risc_gp1_reg[cnt] = RD_REG_WORD(dmp_reg++);		WRT_REG_WORD(&reg->pcr, 0x2200);		dmp_reg = (uint16_t __iomem *)((uint8_t __iomem *)reg + 0x80);		for (cnt = 0; cnt < sizeof(fw->risc_gp2_reg) / 2; cnt++)			fw->risc_gp2_reg[cnt] = RD_REG_WORD(dmp_reg++);		WRT_REG_WORD(&reg->pcr, 0x2300);		dmp_reg = (uint16_t __iomem *)((uint8_t __iomem *)reg + 0x80);		for (cnt = 0; cnt < sizeof(fw->risc_gp3_reg) / 2; cnt++)			fw->risc_gp3_reg[cnt] = RD_REG_WORD(dmp_reg++);		WRT_REG_WORD(&reg->pcr, 0x2400);		dmp_reg = (uint16_t __iomem *)((uint8_t __iomem *)reg + 0x80);		for (cnt = 0; cnt < sizeof(fw->risc_gp4_reg) / 2; cnt++)			fw->risc_gp4_reg[cnt] = RD_REG_WORD(dmp_reg++);		WRT_REG_WORD(&reg->pcr, 0x2500);		dmp_reg = (uint16_t __iomem *)((uint8_t __iomem *)reg + 0x80);		for (cnt = 0; cnt < sizeof(fw->risc_gp5_reg) / 2; cnt++)			fw->risc_gp5_reg[cnt] = RD_REG_WORD(dmp_reg++);		WRT_REG_WORD(&reg->pcr, 0x2600);		dmp_reg = (uint16_t __iomem *)((uint8_t __iomem *)reg + 0x80);		for (cnt = 0; cnt < sizeof(fw->risc_gp6_reg) / 2; cnt++)			fw->risc_gp6_reg[cnt] = RD_REG_WORD(dmp_reg++);		WRT_REG_WORD(&reg->pcr, 0x2700);		dmp_reg = (uint16_t __iomem *)((uint8_t __iomem *)reg + 0x80);		for (cnt = 0; cnt < sizeof(fw->risc_gp7_reg) / 2; cnt++)			fw->risc_gp7_reg[cnt] = RD_REG_WORD(dmp_reg++);		WRT_REG_WORD(&reg->ctrl_status, 0x10);		dmp_reg = (uint16_t __iomem *)((uint8_t __iomem *)reg + 0x80);		for (cnt = 0; cnt < sizeof(fw->frame_buf_hdw_reg) / 2; cnt++)			fw->frame_buf_hdw_reg[cnt] = RD_REG_WORD(dmp_reg++);		WRT_REG_WORD(&reg->ctrl_status, 0x20);		dmp_reg = (uint16_t __iomem *)((uint8_t __iomem *)reg + 0x80);		for (cnt = 0; cnt < sizeof(fw->fpm_b0_reg) / 2; cnt++)			fw->fpm_b0_reg[cnt] = RD_REG_WORD(dmp_reg++);		WRT_REG_WORD(&reg->ctrl_status, 0x30);		dmp_reg = (uint16_t __iomem *)((uint8_t __iomem *)reg + 0x80);		for (cnt = 0; cnt < sizeof(fw->fpm_b1_reg) / 2; cnt++)			fw->fpm_b1_reg[cnt] = RD_REG_WORD(dmp_reg++);		/* Reset the ISP. */		WRT_REG_WORD(&reg->ctrl_status, CSR_ISP_SOFT_RESET);	}	for (cnt = 30000; RD_MAILBOX_REG(ha, reg, 0) != 0 &&	    rval == QLA_SUCCESS; cnt--) {		if (cnt)			udelay(100);		else			rval = QLA_FUNCTION_TIMEOUT;	}	/* Pause RISC. */	if (rval == QLA_SUCCESS && (IS_QLA2200(ha) || (IS_QLA2100(ha) &&	    (RD_REG_WORD(&reg->mctr) & (BIT_1 | BIT_0)) != 0))) {		WRT_REG_WORD(&reg->hccr, HCCR_PAUSE_RISC);		for (cnt = 30000;		    (RD_REG_WORD(&reg->hccr) & HCCR_RISC_PAUSE) == 0 &&		    rval == QLA_SUCCESS; cnt--) {			if (cnt)				udelay(100);			else				rval = QLA_FUNCTION_TIMEOUT;		}		if (rval == QLA_SUCCESS) {			/* Set memory configuration and timing. */			if (IS_QLA2100(ha))				WRT_REG_WORD(&reg->mctr, 0xf1);			else				WRT_REG_WORD(&reg->mctr, 0xf2);			RD_REG_WORD(&reg->mctr);	/* PCI Posting. */			/* Release RISC. */			WRT_REG_WORD(&reg->hccr, HCCR_RELEASE_RISC);		}	}	if (rval == QLA_SUCCESS) {		/* Get RISC SRAM. */		risc_address = 0x1000; 		WRT_MAILBOX_REG(ha, reg, 0, MBC_READ_RAM_WORD);		clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);	}	for (cnt = 0; cnt < sizeof(fw->risc_ram) / 2 && rval == QLA_SUCCESS;	    cnt++, risc_address++) { 		WRT_MAILBOX_REG(ha, reg, 1, risc_address);		WRT_REG_WORD(&reg->hccr, HCCR_SET_HOST_INT);		for (timer = 6000000; timer != 0; timer--) {			/* Check for pending interrupts. */			if (RD_REG_WORD(&reg->istatus) & ISR_RISC_INT) {				if (RD_REG_WORD(&reg->semaphore) & BIT_0) {					set_bit(MBX_INTERRUPT,					    &ha->mbx_cmd_flags);					mb0 = RD_MAILBOX_REG(ha, reg, 0);					mb2 = RD_MAILBOX_REG(ha, reg, 2);					WRT_REG_WORD(&reg->semaphore, 0);					WRT_REG_WORD(&reg->hccr,					    HCCR_CLR_RISC_INT);					RD_REG_WORD(&reg->hccr);					break;				}				WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);				RD_REG_WORD(&reg->hccr);			}			udelay(5);		}		if (test_and_clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags)) {			rval = mb0 & MBS_MASK;			fw->risc_ram[cnt] = mb2;		} else {			rval = QLA_FUNCTION_FAILED;		}	}	if (rval != QLA_SUCCESS) {		qla_printk(KERN_WARNING, ha,		    "Failed to dump firmware (%x)!!!\n", rval);		free_pages((unsigned long)ha->fw_dump, ha->fw_dump_order);		ha->fw_dump = NULL;	} else {		qla_printk(KERN_INFO, ha,		    "Firmware dump saved to temp buffer (%ld/%p).\n",		    ha->host_no, ha->fw_dump);	}qla2100_fw_dump_failed:	if (!hardware_locked)		spin_unlock_irqrestore(&ha->hardware_lock, flags);}/** * qla2100_ascii_fw_dump() - Converts a binary firmware dump to ASCII. * @ha: HA context */voidqla2100_ascii_fw_dump(scsi_qla_host_t *ha){	uint32_t cnt;	char *uiter;	char fw_info[30];	struct qla2100_fw_dump *fw;	uiter = ha->fw_dump_buffer;	fw = ha->fw_dump;	qla_uprintf(&uiter, "%s Firmware Version %s\n", ha->model_number,	    ha->isp_ops.fw_version_str(ha, fw_info));	qla_uprintf(&uiter, "\n[==>BEG]\n");	qla_uprintf(&uiter, "HCCR Register:\n%04x\n\n", fw->hccr);	qla_uprintf(&uiter, "PBIU Registers:");	for (cnt = 0; cnt < sizeof (fw->pbiu_reg) / 2; cnt++) {		if (cnt % 8 == 0) {			qla_uprintf(&uiter, "\n");		}		qla_uprintf(&uiter, "%04x ", fw->pbiu_reg[cnt]);	}	qla_uprintf(&uiter, "\n\nMailbox Registers:");	for (cnt = 0; cnt < sizeof (fw->mailbox_reg) / 2; cnt++) {		if (cnt % 8 == 0) {			qla_uprintf(&uiter, "\n");		}		qla_uprintf(&uiter, "%04x ", fw->mailbox_reg[cnt]);	}	qla_uprintf(&uiter, "\n\nDMA Registers:");	for (cnt = 0; cnt < sizeof (fw->dma_reg) / 2; cnt++) {		if (cnt % 8 == 0) {			qla_uprintf(&uiter, "\n");		}		qla_uprintf(&uiter, "%04x ", fw->dma_reg[cnt]);	}	qla_uprintf(&uiter, "\n\nRISC Hardware Registers:");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -