]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/scsi/qla2xxx/qla_mbx.c
Merge tag 'v2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / drivers / scsi / qla2xxx / qla_mbx.c
index effd8a1403d9dceddaf4260d8c4822bafdf5ddd4..e473e9fb363cb752ba6ca79795b902afb28ff615 100644 (file)
@@ -4125,7 +4125,7 @@ qla24xx_set_fcp_prio(scsi_qla_host_t *vha, uint16_t loop_id, uint16_t priority,
                return QLA_FUNCTION_FAILED;
 
        DEBUG11(printk(KERN_INFO
-           "%s(%ld): entered.\n", __func__, ha->host_no));
+           "%s(%ld): entered.\n", __func__, vha->host_no));
 
        mcp->mb[0] = MBC_PORT_PARAMS;
        mcp->mb[1] = loop_id;
@@ -4159,6 +4159,71 @@ qla24xx_set_fcp_prio(scsi_qla_host_t *vha, uint16_t loop_id, uint16_t priority,
        return rval;
 }
 
+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)
 {