diff options
author | Andrew Vasquez <andrew.vasquez@qlogic.com> | 2010-12-21 16:00:21 -0800 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2010-12-23 16:04:37 -0600 |
commit | 794a5691147652387f4a2ffa890c5c1983e38849 (patch) | |
tree | 6d64e68ef373bb5c6caa570c7edb022e2d5185e3 /drivers/scsi/qla2xxx/qla_mbx.c | |
parent | 10fbb7dd36eb3014fe4b928e596d89e036ee6210 (diff) |
[SCSI] qla2xxx: Add sysfs node for displaying board temperature.
Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/qla2xxx/qla_mbx.c')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_mbx.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index 04d6cfc2e91..e473e9fb363 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c @@ -4160,6 +4160,71 @@ qla24xx_set_fcp_prio(scsi_qla_host_t *vha, uint16_t loop_id, uint16_t priority, } int +qla2x00_get_thermal_temp(scsi_qla_host_t *vha, uint16_t *temp, uint16_t *frac) +{ + int rval; + mbx_cmd_t mc; + mbx_cmd_t *mcp = &mc; + struct qla_hw_data *ha = vha->hw; + + DEBUG11(printk(KERN_INFO "%s(%ld): entered.\n", __func__, ha->host_no)); + + /* High bits. */ + mcp->mb[0] = MBC_READ_SFP; + mcp->mb[1] = 0x98; + mcp->mb[2] = 0; + mcp->mb[3] = 0; + mcp->mb[6] = 0; + mcp->mb[7] = 0; + mcp->mb[8] = 1; + mcp->mb[9] = 0x01; + mcp->mb[10] = BIT_13|BIT_0; + mcp->out_mb = MBX_10|MBX_9|MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0; + mcp->in_mb = MBX_1|MBX_0; + mcp->tov = MBX_TOV_SECONDS; + mcp->flags = 0; + rval = qla2x00_mailbox_command(vha, mcp); + if (rval != QLA_SUCCESS) { + DEBUG2_3_11(printk(KERN_WARNING + "%s(%ld): failed=%x (%x).\n", __func__, + vha->host_no, rval, mcp->mb[0])); + ha->flags.thermal_supported = 0; + goto fail; + } + *temp = mcp->mb[1] & 0xFF; + + /* Low bits. */ + mcp->mb[0] = MBC_READ_SFP; + mcp->mb[1] = 0x98; + mcp->mb[2] = 0; + mcp->mb[3] = 0; + mcp->mb[6] = 0; + mcp->mb[7] = 0; + mcp->mb[8] = 1; + mcp->mb[9] = 0x10; + mcp->mb[10] = BIT_13|BIT_0; + mcp->out_mb = MBX_10|MBX_9|MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0; + mcp->in_mb = MBX_1|MBX_0; + mcp->tov = MBX_TOV_SECONDS; + mcp->flags = 0; + rval = qla2x00_mailbox_command(vha, mcp); + if (rval != QLA_SUCCESS) { + DEBUG2_3_11(printk(KERN_WARNING + "%s(%ld): failed=%x (%x).\n", __func__, + vha->host_no, rval, mcp->mb[0])); + ha->flags.thermal_supported = 0; + goto fail; + } + *frac = ((mcp->mb[1] & 0xFF) >> 6) * 25; + + if (rval == QLA_SUCCESS) + DEBUG11(printk(KERN_INFO + "%s(%ld): done.\n", __func__, ha->host_no)); +fail: + return rval; +} + +int qla82xx_mbx_intr_enable(scsi_qla_host_t *vha) { int rval; |