1 /* 2 * QLogic iSCSI HBA Driver 3 * Copyright (c) 2003-2011 QLogic Corporation 4 * 5 * See LICENSE.qla4xxx for copyright and licensing details. 6 */ 7 8 #include "ql4_def.h" 9 #include "ql4_glbl.h" 10 #include "ql4_dbg.h" 11 12 /* Scsi_Host attributes. */ 13 static ssize_t 14 qla4xxx_fw_version_show(struct device *dev, 15 struct device_attribute *attr, char *buf) 16 { 17 struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); 18 19 if (is_qla8022(ha)) 20 return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d (%x)\n", 21 ha->firmware_version[0], 22 ha->firmware_version[1], 23 ha->patch_number, ha->build_number); 24 else 25 return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d.%02d\n", 26 ha->firmware_version[0], 27 ha->firmware_version[1], 28 ha->patch_number, ha->build_number); 29 } 30 31 static ssize_t 32 qla4xxx_serial_num_show(struct device *dev, struct device_attribute *attr, 33 char *buf) 34 { 35 struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); 36 return snprintf(buf, PAGE_SIZE, "%s\n", ha->serial_number); 37 } 38 39 static ssize_t 40 qla4xxx_iscsi_version_show(struct device *dev, struct device_attribute *attr, 41 char *buf) 42 { 43 struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); 44 return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->iscsi_major, 45 ha->iscsi_minor); 46 } 47 48 static ssize_t 49 qla4xxx_optrom_version_show(struct device *dev, struct device_attribute *attr, 50 char *buf) 51 { 52 struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); 53 return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d.%02d\n", 54 ha->bootload_major, ha->bootload_minor, 55 ha->bootload_patch, ha->bootload_build); 56 } 57 58 static DEVICE_ATTR(fw_version, S_IRUGO, qla4xxx_fw_version_show, NULL); 59 static DEVICE_ATTR(serial_num, S_IRUGO, qla4xxx_serial_num_show, NULL); 60 static DEVICE_ATTR(iscsi_version, S_IRUGO, qla4xxx_iscsi_version_show, NULL); 61 static DEVICE_ATTR(optrom_version, S_IRUGO, qla4xxx_optrom_version_show, NULL); 62 63 struct device_attribute *qla4xxx_host_attrs[] = { 64 &dev_attr_fw_version, 65 &dev_attr_serial_num, 66 &dev_attr_iscsi_version, 67 &dev_attr_optrom_version, 68 NULL, 69 }; 70