|
@@ -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,
|
|
|
};
|
|
|
|