[SCSI] 2.6 aacraid: updated sysfs files
authorMark Haverkamp <markh@osdl.org>
Wed, 1 Jun 2005 17:24:38 +0000 (10:24 -0700)
committerJames Bottomley <jejb@mulgrave.(none)>
Fri, 3 Jun 2005 17:44:12 +0000 (12:44 -0500)
This patch adds some files into the /sys/class/scsi_host/hostN
directories for aacraid adapters:

model
vendor
hba_kernel_version
hba_monitor_version
hba_bios_version
serial_number

Signed-off-by: Mark Haverkamp <markh@osdl.org>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/scsi/aacraid/linit.c

index 6f05d86c7bb366c7ded4134908fd49c096f73500..c2be8380dad5f6ba10c8187f26e52279c1dabba5 100644 (file)
@@ -533,6 +533,134 @@ static long aac_compat_cfg_ioctl(struct file *file, unsigned cmd, unsigned long
 }
 #endif
 
+static ssize_t aac_show_model(struct class_device *class_dev,
+               char *buf)
+{
+       struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata;
+       int len;
+
+       len = snprintf(buf, PAGE_SIZE, "%s\n",
+                 aac_drivers[dev->cardtype].model);
+       return len;
+}
+
+static ssize_t aac_show_vendor(struct class_device *class_dev,
+               char *buf)
+{
+       struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata;
+       int len;
+
+       len = snprintf(buf, PAGE_SIZE, "%s\n",
+                 aac_drivers[dev->cardtype].vname);
+       return len;
+}
+
+static ssize_t aac_show_kernel_version(struct class_device *class_dev,
+               char *buf)
+{
+       struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata;
+       int len, tmp;
+
+       tmp = le32_to_cpu(dev->adapter_info.kernelrev);
+       len = snprintf(buf, PAGE_SIZE, "%d.%d-%d[%d]\n", 
+         tmp >> 24, (tmp >> 16) & 0xff, tmp & 0xff,
+         le32_to_cpu(dev->adapter_info.kernelbuild));
+       return len;
+}
+
+static ssize_t aac_show_monitor_version(struct class_device *class_dev,
+               char *buf)
+{
+       struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata;
+       int len, tmp;
+
+       tmp = le32_to_cpu(dev->adapter_info.monitorrev);
+       len = snprintf(buf, PAGE_SIZE, "%d.%d-%d[%d]\n", 
+         tmp >> 24, (tmp >> 16) & 0xff, tmp & 0xff,
+         le32_to_cpu(dev->adapter_info.monitorbuild));
+       return len;
+}
+
+static ssize_t aac_show_bios_version(struct class_device *class_dev,
+               char *buf)
+{
+       struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata;
+       int len, tmp;
+
+       tmp = le32_to_cpu(dev->adapter_info.biosrev);
+       len = snprintf(buf, PAGE_SIZE, "%d.%d-%d[%d]\n", 
+         tmp >> 24, (tmp >> 16) & 0xff, tmp & 0xff,
+         le32_to_cpu(dev->adapter_info.biosbuild));
+       return len;
+}
+
+static ssize_t aac_show_serial_number(struct class_device *class_dev,
+               char *buf)
+{
+       struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata;
+       int len = 0;
+
+       if (le32_to_cpu(dev->adapter_info.serial[0]) != 0xBAD0)
+               len = snprintf(buf, PAGE_SIZE, "%x\n",
+                 le32_to_cpu(dev->adapter_info.serial[0]));
+       return len;
+}
+
+
+static struct class_device_attribute aac_model = {
+       .attr = {
+               .name = "model",
+               .mode = S_IRUGO,
+       },
+       .show = aac_show_model,
+};
+static struct class_device_attribute aac_vendor = {
+       .attr = {
+               .name = "vendor",
+               .mode = S_IRUGO,
+       },
+       .show = aac_show_vendor,
+};
+static struct class_device_attribute aac_kernel_version = {
+       .attr = {
+               .name = "hba_kernel_version",
+               .mode = S_IRUGO,
+       },
+       .show = aac_show_kernel_version,
+};
+static struct class_device_attribute aac_monitor_version = {
+       .attr = {
+               .name = "hba_monitor_version",
+               .mode = S_IRUGO,
+       },
+       .show = aac_show_monitor_version,
+};
+static struct class_device_attribute aac_bios_version = {
+       .attr = {
+               .name = "hba_bios_version",
+               .mode = S_IRUGO,
+       },
+       .show = aac_show_bios_version,
+};
+static struct class_device_attribute aac_serial_number = {
+       .attr = {
+               .name = "serial_number",
+               .mode = S_IRUGO,
+       },
+       .show = aac_show_serial_number,
+};
+
+static struct class_device_attribute *aac_attrs[] = {
+       &aac_model,
+       &aac_vendor,
+       &aac_kernel_version,
+       &aac_monitor_version,
+       &aac_bios_version,
+       &aac_serial_number,
+       NULL
+};
+
+
 static struct file_operations aac_cfg_fops = {
        .owner          = THIS_MODULE,
        .ioctl          = aac_cfg_ioctl,
@@ -553,6 +681,7 @@ static struct scsi_host_template aac_driver_template = {
 #endif
        .queuecommand                   = aac_queuecommand,
        .bios_param                     = aac_biosparm, 
+       .shost_attrs                    = aac_attrs,
        .slave_configure                = aac_slave_configure,
        .eh_abort_handler               = aac_eh_abort,
        .eh_host_reset_handler          = aac_eh_reset,