[SCSI] qla2xxx: Add sysfs node for displaying board temperature.
[pandora-kernel.git] / drivers / scsi / qla2xxx / qla_attr.c
index bc8194f..44578b5 100644 (file)
@@ -1308,6 +1308,31 @@ qla2x00_fabric_param_show(struct device *dev, struct device_attribute *attr,
        return snprintf(buf, PAGE_SIZE, "%d\n", vha->hw->switch_cap);
 }
 
+static ssize_t
+qla2x00_thermal_temp_show(struct device *dev,
+       struct device_attribute *attr, char *buf)
+{
+       scsi_qla_host_t *vha = shost_priv(class_to_shost(dev));
+       int rval = QLA_FUNCTION_FAILED;
+       uint16_t temp, frac;
+
+       if (!vha->hw->flags.thermal_supported)
+               return snprintf(buf, PAGE_SIZE, "\n");
+
+       temp = frac = 0;
+       if (test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags) ||
+           test_bit(ISP_ABORT_NEEDED, &vha->dpc_flags))
+               DEBUG2_3_11(printk(KERN_WARNING
+                   "%s(%ld): isp reset in progress.\n",
+                   __func__, vha->host_no));
+       else if (!vha->hw->flags.eeh_busy)
+               rval = qla2x00_get_thermal_temp(vha, &temp, &frac);
+       if (rval != QLA_SUCCESS)
+               temp = frac = 0;
+
+       return snprintf(buf, PAGE_SIZE, "%d.%02d\n", temp, frac);
+}
+
 static ssize_t
 qla2x00_fw_state_show(struct device *dev, struct device_attribute *attr,
     char *buf)
@@ -1366,6 +1391,7 @@ static DEVICE_ATTR(vn_port_mac_address, S_IRUGO,
                   qla2x00_vn_port_mac_address_show, NULL);
 static DEVICE_ATTR(fabric_param, S_IRUGO, qla2x00_fabric_param_show, NULL);
 static DEVICE_ATTR(fw_state, S_IRUGO, qla2x00_fw_state_show, NULL);
+static DEVICE_ATTR(thermal_temp, S_IRUGO, qla2x00_thermal_temp_show, NULL);
 
 struct device_attribute *qla2x00_host_attrs[] = {
        &dev_attr_driver_version,
@@ -1394,6 +1420,7 @@ struct device_attribute *qla2x00_host_attrs[] = {
        &dev_attr_fabric_param,
        &dev_attr_fw_state,
        &dev_attr_optrom_gold_fw_version,
+       &dev_attr_thermal_temp,
        NULL,
 };