17ad633c0SHarish Zunjarrao /* 27ad633c0SHarish Zunjarrao * QLogic iSCSI HBA Driver 37ad633c0SHarish Zunjarrao * Copyright (c) 2003-2011 QLogic Corporation 47ad633c0SHarish Zunjarrao * 57ad633c0SHarish Zunjarrao * See LICENSE.qla4xxx for copyright and licensing details. 67ad633c0SHarish Zunjarrao */ 77ad633c0SHarish Zunjarrao 87ad633c0SHarish Zunjarrao #include "ql4_def.h" 97ad633c0SHarish Zunjarrao #include "ql4_glbl.h" 107ad633c0SHarish Zunjarrao #include "ql4_dbg.h" 117ad633c0SHarish Zunjarrao 127ad633c0SHarish Zunjarrao /* Scsi_Host attributes. */ 137ad633c0SHarish Zunjarrao static ssize_t 147ad633c0SHarish Zunjarrao qla4xxx_fw_version_show(struct device *dev, 157ad633c0SHarish Zunjarrao struct device_attribute *attr, char *buf) 167ad633c0SHarish Zunjarrao { 177ad633c0SHarish Zunjarrao struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); 187ad633c0SHarish Zunjarrao 197ad633c0SHarish Zunjarrao if (is_qla8022(ha)) 207ad633c0SHarish Zunjarrao return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d (%x)\n", 217ad633c0SHarish Zunjarrao ha->firmware_version[0], 227ad633c0SHarish Zunjarrao ha->firmware_version[1], 237ad633c0SHarish Zunjarrao ha->patch_number, ha->build_number); 247ad633c0SHarish Zunjarrao else 257ad633c0SHarish Zunjarrao return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d.%02d\n", 267ad633c0SHarish Zunjarrao ha->firmware_version[0], 277ad633c0SHarish Zunjarrao ha->firmware_version[1], 287ad633c0SHarish Zunjarrao ha->patch_number, ha->build_number); 297ad633c0SHarish Zunjarrao } 307ad633c0SHarish Zunjarrao 317ad633c0SHarish Zunjarrao static ssize_t 327ad633c0SHarish Zunjarrao qla4xxx_serial_num_show(struct device *dev, struct device_attribute *attr, 337ad633c0SHarish Zunjarrao char *buf) 347ad633c0SHarish Zunjarrao { 357ad633c0SHarish Zunjarrao struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); 367ad633c0SHarish Zunjarrao return snprintf(buf, PAGE_SIZE, "%s\n", ha->serial_number); 377ad633c0SHarish Zunjarrao } 387ad633c0SHarish Zunjarrao 397ad633c0SHarish Zunjarrao static ssize_t 407ad633c0SHarish Zunjarrao qla4xxx_iscsi_version_show(struct device *dev, struct device_attribute *attr, 417ad633c0SHarish Zunjarrao char *buf) 427ad633c0SHarish Zunjarrao { 437ad633c0SHarish Zunjarrao struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); 447ad633c0SHarish Zunjarrao return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->iscsi_major, 457ad633c0SHarish Zunjarrao ha->iscsi_minor); 467ad633c0SHarish Zunjarrao } 477ad633c0SHarish Zunjarrao 487ad633c0SHarish Zunjarrao static ssize_t 497ad633c0SHarish Zunjarrao qla4xxx_optrom_version_show(struct device *dev, struct device_attribute *attr, 507ad633c0SHarish Zunjarrao char *buf) 517ad633c0SHarish Zunjarrao { 527ad633c0SHarish Zunjarrao struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); 537ad633c0SHarish Zunjarrao return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d.%02d\n", 547ad633c0SHarish Zunjarrao ha->bootload_major, ha->bootload_minor, 557ad633c0SHarish Zunjarrao ha->bootload_patch, ha->bootload_build); 567ad633c0SHarish Zunjarrao } 577ad633c0SHarish Zunjarrao 58*91ec7cecSVikas Chaudhary static ssize_t 59*91ec7cecSVikas Chaudhary qla4xxx_board_id_show(struct device *dev, struct device_attribute *attr, 60*91ec7cecSVikas Chaudhary char *buf) 61*91ec7cecSVikas Chaudhary { 62*91ec7cecSVikas Chaudhary struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); 63*91ec7cecSVikas Chaudhary return snprintf(buf, PAGE_SIZE, "0x%08X\n", ha->board_id); 64*91ec7cecSVikas Chaudhary } 65*91ec7cecSVikas Chaudhary 66*91ec7cecSVikas Chaudhary static ssize_t 67*91ec7cecSVikas Chaudhary qla4xxx_fw_state_show(struct device *dev, struct device_attribute *attr, 68*91ec7cecSVikas Chaudhary char *buf) 69*91ec7cecSVikas Chaudhary { 70*91ec7cecSVikas Chaudhary struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); 71*91ec7cecSVikas Chaudhary 72*91ec7cecSVikas Chaudhary qla4xxx_get_firmware_state(ha); 73*91ec7cecSVikas Chaudhary return snprintf(buf, PAGE_SIZE, "0x%08X%8X\n", ha->firmware_state, 74*91ec7cecSVikas Chaudhary ha->addl_fw_state); 75*91ec7cecSVikas Chaudhary } 76*91ec7cecSVikas Chaudhary 77*91ec7cecSVikas Chaudhary static ssize_t 78*91ec7cecSVikas Chaudhary qla4xxx_phy_port_cnt_show(struct device *dev, struct device_attribute *attr, 79*91ec7cecSVikas Chaudhary char *buf) 80*91ec7cecSVikas Chaudhary { 81*91ec7cecSVikas Chaudhary struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); 82*91ec7cecSVikas Chaudhary 83*91ec7cecSVikas Chaudhary if (!is_qla8022(ha)) 84*91ec7cecSVikas Chaudhary return -ENOSYS; 85*91ec7cecSVikas Chaudhary 86*91ec7cecSVikas Chaudhary return snprintf(buf, PAGE_SIZE, "0x%04X\n", ha->phy_port_cnt); 87*91ec7cecSVikas Chaudhary } 88*91ec7cecSVikas Chaudhary 89*91ec7cecSVikas Chaudhary static ssize_t 90*91ec7cecSVikas Chaudhary qla4xxx_phy_port_num_show(struct device *dev, struct device_attribute *attr, 91*91ec7cecSVikas Chaudhary char *buf) 92*91ec7cecSVikas Chaudhary { 93*91ec7cecSVikas Chaudhary struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); 94*91ec7cecSVikas Chaudhary 95*91ec7cecSVikas Chaudhary if (!is_qla8022(ha)) 96*91ec7cecSVikas Chaudhary return -ENOSYS; 97*91ec7cecSVikas Chaudhary 98*91ec7cecSVikas Chaudhary return snprintf(buf, PAGE_SIZE, "0x%04X\n", ha->phy_port_num); 99*91ec7cecSVikas Chaudhary } 100*91ec7cecSVikas Chaudhary 101*91ec7cecSVikas Chaudhary static ssize_t 102*91ec7cecSVikas Chaudhary qla4xxx_iscsi_func_cnt_show(struct device *dev, struct device_attribute *attr, 103*91ec7cecSVikas Chaudhary char *buf) 104*91ec7cecSVikas Chaudhary { 105*91ec7cecSVikas Chaudhary struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); 106*91ec7cecSVikas Chaudhary 107*91ec7cecSVikas Chaudhary if (!is_qla8022(ha)) 108*91ec7cecSVikas Chaudhary return -ENOSYS; 109*91ec7cecSVikas Chaudhary 110*91ec7cecSVikas Chaudhary return snprintf(buf, PAGE_SIZE, "0x%04X\n", ha->iscsi_pci_func_cnt); 111*91ec7cecSVikas Chaudhary } 112*91ec7cecSVikas Chaudhary 113*91ec7cecSVikas Chaudhary static ssize_t 114*91ec7cecSVikas Chaudhary qla4xxx_hba_model_show(struct device *dev, struct device_attribute *attr, 115*91ec7cecSVikas Chaudhary char *buf) 116*91ec7cecSVikas Chaudhary { 117*91ec7cecSVikas Chaudhary struct scsi_qla_host *ha = to_qla_host(class_to_shost(dev)); 118*91ec7cecSVikas Chaudhary 119*91ec7cecSVikas Chaudhary return snprintf(buf, PAGE_SIZE, "%s\n", ha->model_name); 120*91ec7cecSVikas Chaudhary } 121*91ec7cecSVikas Chaudhary 1227ad633c0SHarish Zunjarrao static DEVICE_ATTR(fw_version, S_IRUGO, qla4xxx_fw_version_show, NULL); 1237ad633c0SHarish Zunjarrao static DEVICE_ATTR(serial_num, S_IRUGO, qla4xxx_serial_num_show, NULL); 1247ad633c0SHarish Zunjarrao static DEVICE_ATTR(iscsi_version, S_IRUGO, qla4xxx_iscsi_version_show, NULL); 1257ad633c0SHarish Zunjarrao static DEVICE_ATTR(optrom_version, S_IRUGO, qla4xxx_optrom_version_show, NULL); 126*91ec7cecSVikas Chaudhary static DEVICE_ATTR(board_id, S_IRUGO, qla4xxx_board_id_show, NULL); 127*91ec7cecSVikas Chaudhary static DEVICE_ATTR(fw_state, S_IRUGO, qla4xxx_fw_state_show, NULL); 128*91ec7cecSVikas Chaudhary static DEVICE_ATTR(phy_port_cnt, S_IRUGO, qla4xxx_phy_port_cnt_show, NULL); 129*91ec7cecSVikas Chaudhary static DEVICE_ATTR(phy_port_num, S_IRUGO, qla4xxx_phy_port_num_show, NULL); 130*91ec7cecSVikas Chaudhary static DEVICE_ATTR(iscsi_func_cnt, S_IRUGO, qla4xxx_iscsi_func_cnt_show, NULL); 131*91ec7cecSVikas Chaudhary static DEVICE_ATTR(hba_model, S_IRUGO, qla4xxx_hba_model_show, NULL); 1327ad633c0SHarish Zunjarrao 1337ad633c0SHarish Zunjarrao struct device_attribute *qla4xxx_host_attrs[] = { 1347ad633c0SHarish Zunjarrao &dev_attr_fw_version, 1357ad633c0SHarish Zunjarrao &dev_attr_serial_num, 1367ad633c0SHarish Zunjarrao &dev_attr_iscsi_version, 1377ad633c0SHarish Zunjarrao &dev_attr_optrom_version, 138*91ec7cecSVikas Chaudhary &dev_attr_board_id, 139*91ec7cecSVikas Chaudhary &dev_attr_fw_state, 140*91ec7cecSVikas Chaudhary &dev_attr_phy_port_cnt, 141*91ec7cecSVikas Chaudhary &dev_attr_phy_port_num, 142*91ec7cecSVikas Chaudhary &dev_attr_iscsi_func_cnt, 143*91ec7cecSVikas Chaudhary &dev_attr_hba_model, 1447ad633c0SHarish Zunjarrao NULL, 1457ad633c0SHarish Zunjarrao }; 146