|
@@ -3545,3 +3545,66 @@ qla2x00_get_dcbx_params(scsi_qla_host_t *vha, dma_addr_t tlv_dma,
|
|
|
|
|
|
return rval;
|
|
|
}
|
|
|
+
|
|
|
+int
|
|
|
+qla2x00_read_ram_word(scsi_qla_host_t *vha, uint32_t risc_addr, uint32_t *data)
|
|
|
+{
|
|
|
+ int rval;
|
|
|
+ mbx_cmd_t mc;
|
|
|
+ mbx_cmd_t *mcp = &mc;
|
|
|
+
|
|
|
+ if (!IS_FWI2_CAPABLE(vha->hw))
|
|
|
+ return QLA_FUNCTION_FAILED;
|
|
|
+
|
|
|
+ DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no));
|
|
|
+
|
|
|
+ mcp->mb[0] = MBC_READ_RAM_EXTENDED;
|
|
|
+ mcp->mb[1] = LSW(risc_addr);
|
|
|
+ mcp->mb[8] = MSW(risc_addr);
|
|
|
+ mcp->out_mb = MBX_8|MBX_1|MBX_0;
|
|
|
+ mcp->in_mb = MBX_3|MBX_2|MBX_0;
|
|
|
+ mcp->tov = 30;
|
|
|
+ mcp->flags = 0;
|
|
|
+ rval = qla2x00_mailbox_command(vha, mcp);
|
|
|
+ if (rval != QLA_SUCCESS) {
|
|
|
+ DEBUG2_3_11(printk("%s(%ld): failed=%x mb[0]=%x.\n", __func__,
|
|
|
+ vha->host_no, rval, mcp->mb[0]));
|
|
|
+ } else {
|
|
|
+ DEBUG11(printk("%s(%ld): done.\n", __func__, vha->host_no));
|
|
|
+ *data = mcp->mb[3] << 16 | mcp->mb[2];
|
|
|
+ }
|
|
|
+
|
|
|
+ return rval;
|
|
|
+}
|
|
|
+
|
|
|
+int
|
|
|
+qla2x00_write_ram_word(scsi_qla_host_t *vha, uint32_t risc_addr, uint32_t data)
|
|
|
+{
|
|
|
+ int rval;
|
|
|
+ mbx_cmd_t mc;
|
|
|
+ mbx_cmd_t *mcp = &mc;
|
|
|
+
|
|
|
+ if (!IS_FWI2_CAPABLE(vha->hw))
|
|
|
+ return QLA_FUNCTION_FAILED;
|
|
|
+
|
|
|
+ DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no));
|
|
|
+
|
|
|
+ mcp->mb[0] = MBC_WRITE_RAM_WORD_EXTENDED;
|
|
|
+ mcp->mb[1] = LSW(risc_addr);
|
|
|
+ mcp->mb[2] = LSW(data);
|
|
|
+ mcp->mb[3] = MSW(data);
|
|
|
+ mcp->mb[8] = MSW(risc_addr);
|
|
|
+ mcp->out_mb = MBX_8|MBX_3|MBX_2|MBX_1|MBX_0;
|
|
|
+ mcp->in_mb = MBX_0;
|
|
|
+ mcp->tov = 30;
|
|
|
+ mcp->flags = 0;
|
|
|
+ rval = qla2x00_mailbox_command(vha, mcp);
|
|
|
+ if (rval != QLA_SUCCESS) {
|
|
|
+ DEBUG2_3_11(printk("%s(%ld): failed=%x mb[0]=%x.\n", __func__,
|
|
|
+ vha->host_no, rval, mcp->mb[0]));
|
|
|
+ } else {
|
|
|
+ DEBUG11(printk("%s(%ld): done.\n", __func__, vha->host_no));
|
|
|
+ }
|
|
|
+
|
|
|
+ return rval;
|
|
|
+}
|