|
@@ -559,18 +559,16 @@ qla2x00_get_fw_version(scsi_qla_host_t *vha)
|
|
|
ha->phy_version[1] = mcp->mb[9] >> 8;
|
|
|
ha->phy_version[2] = mcp->mb[9] & 0xff;
|
|
|
}
|
|
|
- if (IS_QLA83XX(ha)) {
|
|
|
- if (mcp->mb[6] & BIT_15) {
|
|
|
- ha->fw_attributes_h = mcp->mb[15];
|
|
|
- ha->fw_attributes_ext[0] = mcp->mb[16];
|
|
|
- ha->fw_attributes_ext[1] = mcp->mb[17];
|
|
|
- ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x1139,
|
|
|
- "%s: FW_attributes Upper: 0x%x, Lower: 0x%x.\n",
|
|
|
- __func__, mcp->mb[15], mcp->mb[6]);
|
|
|
- } else
|
|
|
- ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x112f,
|
|
|
- "%s: FwAttributes [Upper] invalid, MB6:%04x\n",
|
|
|
- __func__, mcp->mb[6]);
|
|
|
+ if (IS_FWI2_CAPABLE(ha)) {
|
|
|
+ ha->fw_attributes_h = mcp->mb[15];
|
|
|
+ ha->fw_attributes_ext[0] = mcp->mb[16];
|
|
|
+ ha->fw_attributes_ext[1] = mcp->mb[17];
|
|
|
+ ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x1139,
|
|
|
+ "%s: FW_attributes Upper: 0x%x, Lower: 0x%x.\n",
|
|
|
+ __func__, mcp->mb[15], mcp->mb[6]);
|
|
|
+ ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x112f,
|
|
|
+ "%s: Ext_FwAttributes Upper: 0x%x, Lower: 0x%x.\n",
|
|
|
+ __func__, mcp->mb[17], mcp->mb[16]);
|
|
|
}
|
|
|
|
|
|
failed:
|
|
@@ -3408,7 +3406,6 @@ qla2x00_dump_ram(scsi_qla_host_t *vha, dma_addr_t req_dma, uint32_t addr,
|
|
|
|
|
|
return rval;
|
|
|
}
|
|
|
-
|
|
|
/* 84XX Support **************************************************************/
|
|
|
|
|
|
struct cs84xx_mgmt_cmd {
|
|
@@ -4950,3 +4947,50 @@ qla83xx_access_control(scsi_qla_host_t *vha, uint16_t options,
|
|
|
|
|
|
return rval;
|
|
|
}
|
|
|
+
|
|
|
+int
|
|
|
+qla2x00_dump_mctp_data(scsi_qla_host_t *vha, dma_addr_t req_dma, uint32_t addr,
|
|
|
+ uint32_t size)
|
|
|
+{
|
|
|
+ int rval;
|
|
|
+ mbx_cmd_t mc;
|
|
|
+ mbx_cmd_t *mcp = &mc;
|
|
|
+
|
|
|
+ if (!IS_MCTP_CAPABLE(vha->hw))
|
|
|
+ return QLA_FUNCTION_FAILED;
|
|
|
+
|
|
|
+ ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x114f,
|
|
|
+ "Entered %s.\n", __func__);
|
|
|
+
|
|
|
+ mcp->mb[0] = MBC_DUMP_RISC_RAM_EXTENDED;
|
|
|
+ mcp->mb[1] = LSW(addr);
|
|
|
+ mcp->mb[2] = MSW(req_dma);
|
|
|
+ mcp->mb[3] = LSW(req_dma);
|
|
|
+ mcp->mb[4] = MSW(size);
|
|
|
+ mcp->mb[5] = LSW(size);
|
|
|
+ mcp->mb[6] = MSW(MSD(req_dma));
|
|
|
+ mcp->mb[7] = LSW(MSD(req_dma));
|
|
|
+ mcp->mb[8] = MSW(addr);
|
|
|
+ /* Setting RAM ID to valid */
|
|
|
+ mcp->mb[10] |= BIT_7;
|
|
|
+ /* For MCTP RAM ID is 0x40 */
|
|
|
+ mcp->mb[10] |= 0x40;
|
|
|
+
|
|
|
+ mcp->out_mb |= MBX_10|MBX_8|MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|
|
|
|
+ MBX_0;
|
|
|
+
|
|
|
+ mcp->in_mb = MBX_0;
|
|
|
+ mcp->tov = MBX_TOV_SECONDS;
|
|
|
+ mcp->flags = 0;
|
|
|
+ rval = qla2x00_mailbox_command(vha, mcp);
|
|
|
+
|
|
|
+ if (rval != QLA_SUCCESS) {
|
|
|
+ ql_dbg(ql_dbg_mbx, vha, 0x114e,
|
|
|
+ "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
|
|
|
+ } else {
|
|
|
+ ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x114d,
|
|
|
+ "Done %s.\n", __func__);
|
|
|
+ }
|
|
|
+
|
|
|
+ return rval;
|
|
|
+}
|