|
|
|
@ -158,14 +158,12 @@ qla4xxx_fw_version_show(struct device *dev, |
|
|
|
|
|
|
|
|
|
if (is_qla80XX(ha)) |
|
|
|
|
return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d (%x)\n", |
|
|
|
|
ha->firmware_version[0], |
|
|
|
|
ha->firmware_version[1], |
|
|
|
|
ha->patch_number, ha->build_number); |
|
|
|
|
ha->fw_info.fw_major, ha->fw_info.fw_minor, |
|
|
|
|
ha->fw_info.fw_patch, ha->fw_info.fw_build); |
|
|
|
|
else |
|
|
|
|
return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d.%02d\n", |
|
|
|
|
ha->firmware_version[0], |
|
|
|
|
ha->firmware_version[1], |
|
|
|
|
ha->patch_number, ha->build_number); |
|
|
|
|
ha->fw_info.fw_major, ha->fw_info.fw_minor, |
|
|
|
|
ha->fw_info.fw_patch, ha->fw_info.fw_build); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static ssize_t |
|
|
|
@ -181,8 +179,8 @@ qla4xxx_iscsi_version_show(struct device *dev, struct device_attribute *attr, |
|
|
|
|
char *buf) |
|
|
|
|
{ |
|
|
|
|
struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); |
|
|
|
|
return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->iscsi_major, |
|
|
|
|
ha->iscsi_minor); |
|
|
|
|
return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->fw_info.iscsi_major, |
|
|
|
|
ha->fw_info.iscsi_minor); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static ssize_t |
|
|
|
@ -191,8 +189,8 @@ qla4xxx_optrom_version_show(struct device *dev, struct device_attribute *attr, |
|
|
|
|
{ |
|
|
|
|
struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); |
|
|
|
|
return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d.%02d\n", |
|
|
|
|
ha->bootload_major, ha->bootload_minor, |
|
|
|
|
ha->bootload_patch, ha->bootload_build); |
|
|
|
|
ha->fw_info.bootload_major, ha->fw_info.bootload_minor, |
|
|
|
|
ha->fw_info.bootload_patch, ha->fw_info.bootload_build); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static ssize_t |
|
|
|
@ -259,6 +257,63 @@ qla4xxx_hba_model_show(struct device *dev, struct device_attribute *attr, |
|
|
|
|
return snprintf(buf, PAGE_SIZE, "%s\n", ha->model_name); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static ssize_t |
|
|
|
|
qla4xxx_fw_timestamp_show(struct device *dev, struct device_attribute *attr, |
|
|
|
|
char *buf) |
|
|
|
|
{ |
|
|
|
|
struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); |
|
|
|
|
return snprintf(buf, PAGE_SIZE, "%s %s\n", ha->fw_info.fw_build_date, |
|
|
|
|
ha->fw_info.fw_build_time); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static ssize_t |
|
|
|
|
qla4xxx_fw_build_user_show(struct device *dev, struct device_attribute *attr, |
|
|
|
|
char *buf) |
|
|
|
|
{ |
|
|
|
|
struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); |
|
|
|
|
return snprintf(buf, PAGE_SIZE, "%s\n", ha->fw_info.fw_build_user); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static ssize_t |
|
|
|
|
qla4xxx_fw_ext_timestamp_show(struct device *dev, struct device_attribute *attr, |
|
|
|
|
char *buf) |
|
|
|
|
{ |
|
|
|
|
struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); |
|
|
|
|
return snprintf(buf, PAGE_SIZE, "%s\n", ha->fw_info.extended_timestamp); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static ssize_t |
|
|
|
|
qla4xxx_fw_load_src_show(struct device *dev, struct device_attribute *attr, |
|
|
|
|
char *buf) |
|
|
|
|
{ |
|
|
|
|
struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); |
|
|
|
|
char *load_src = NULL; |
|
|
|
|
|
|
|
|
|
switch (ha->fw_info.fw_load_source) { |
|
|
|
|
case 1: |
|
|
|
|
load_src = "Flash Primary"; |
|
|
|
|
break; |
|
|
|
|
case 2: |
|
|
|
|
load_src = "Flash Secondary"; |
|
|
|
|
break; |
|
|
|
|
case 3: |
|
|
|
|
load_src = "Host Download"; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return snprintf(buf, PAGE_SIZE, "%s\n", load_src); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static ssize_t |
|
|
|
|
qla4xxx_fw_uptime_show(struct device *dev, struct device_attribute *attr, |
|
|
|
|
char *buf) |
|
|
|
|
{ |
|
|
|
|
struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); |
|
|
|
|
qla4xxx_about_firmware(ha); |
|
|
|
|
return snprintf(buf, PAGE_SIZE, "%u.%u secs\n", ha->fw_uptime_secs, |
|
|
|
|
ha->fw_uptime_msecs); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static DEVICE_ATTR(fw_version, S_IRUGO, qla4xxx_fw_version_show, NULL); |
|
|
|
|
static DEVICE_ATTR(serial_num, S_IRUGO, qla4xxx_serial_num_show, NULL); |
|
|
|
|
static DEVICE_ATTR(iscsi_version, S_IRUGO, qla4xxx_iscsi_version_show, NULL); |
|
|
|
@ -269,6 +324,12 @@ static DEVICE_ATTR(phy_port_cnt, S_IRUGO, qla4xxx_phy_port_cnt_show, NULL); |
|
|
|
|
static DEVICE_ATTR(phy_port_num, S_IRUGO, qla4xxx_phy_port_num_show, NULL); |
|
|
|
|
static DEVICE_ATTR(iscsi_func_cnt, S_IRUGO, qla4xxx_iscsi_func_cnt_show, NULL); |
|
|
|
|
static DEVICE_ATTR(hba_model, S_IRUGO, qla4xxx_hba_model_show, NULL); |
|
|
|
|
static DEVICE_ATTR(fw_timestamp, S_IRUGO, qla4xxx_fw_timestamp_show, NULL); |
|
|
|
|
static DEVICE_ATTR(fw_build_user, S_IRUGO, qla4xxx_fw_build_user_show, NULL); |
|
|
|
|
static DEVICE_ATTR(fw_ext_timestamp, S_IRUGO, qla4xxx_fw_ext_timestamp_show, |
|
|
|
|
NULL); |
|
|
|
|
static DEVICE_ATTR(fw_load_src, S_IRUGO, qla4xxx_fw_load_src_show, NULL); |
|
|
|
|
static DEVICE_ATTR(fw_uptime, S_IRUGO, qla4xxx_fw_uptime_show, NULL); |
|
|
|
|
|
|
|
|
|
struct device_attribute *qla4xxx_host_attrs[] = { |
|
|
|
|
&dev_attr_fw_version, |
|
|
|
@ -281,5 +342,10 @@ struct device_attribute *qla4xxx_host_attrs[] = { |
|
|
|
|
&dev_attr_phy_port_num, |
|
|
|
|
&dev_attr_iscsi_func_cnt, |
|
|
|
|
&dev_attr_hba_model, |
|
|
|
|
&dev_attr_fw_timestamp, |
|
|
|
|
&dev_attr_fw_build_user, |
|
|
|
|
&dev_attr_fw_ext_timestamp, |
|
|
|
|
&dev_attr_fw_load_src, |
|
|
|
|
&dev_attr_fw_uptime, |
|
|
|
|
NULL, |
|
|
|
|
}; |
|
|
|
|