Commit 1ed43910 authored by Miquel van Smoorenburg's avatar Miquel van Smoorenburg Committed by James Bottomley

[SCSI] dpt_i2o: sysfs code

Create a /sys/class/dpt_i2o directory and populate it with
dptiN directories. Each dptiN directory contains a "dev" file
that makes udev create /dev/dptiN
Signed-off-by: default avatarMiquel van Smoorenburg <miquels@cistron.nl>
Acked-by: default avatarMark Salyzyn <Mark_Salyzyn@adaptec.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent 62ac5aed
...@@ -111,6 +111,8 @@ static int sys_tbl_len; ...@@ -111,6 +111,8 @@ static int sys_tbl_len;
static adpt_hba* hba_chain = NULL; static adpt_hba* hba_chain = NULL;
static int hba_count = 0; static int hba_count = 0;
static struct class *adpt_sysfs_class;
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
static long compat_adpt_ioctl(struct file *, unsigned int, unsigned long); static long compat_adpt_ioctl(struct file *, unsigned int, unsigned long);
#endif #endif
...@@ -254,6 +256,12 @@ static int adpt_detect(struct scsi_host_template* sht) ...@@ -254,6 +256,12 @@ static int adpt_detect(struct scsi_host_template* sht)
adpt_inquiry(pHba); adpt_inquiry(pHba);
} }
adpt_sysfs_class = class_create(THIS_MODULE, "dpt_i2o");
if (IS_ERR(adpt_sysfs_class)) {
printk(KERN_WARNING"dpti: unable to create dpt_i2o class\n");
adpt_sysfs_class = NULL;
}
for (pHba = hba_chain; pHba; pHba = pHba->next) { for (pHba = hba_chain; pHba; pHba = pHba->next) {
if (adpt_scsi_host_alloc(pHba, sht) < 0){ if (adpt_scsi_host_alloc(pHba, sht) < 0){
adpt_i2o_delete_hba(pHba); adpt_i2o_delete_hba(pHba);
...@@ -261,6 +269,16 @@ static int adpt_detect(struct scsi_host_template* sht) ...@@ -261,6 +269,16 @@ static int adpt_detect(struct scsi_host_template* sht)
} }
pHba->initialized = TRUE; pHba->initialized = TRUE;
pHba->state &= ~DPTI_STATE_RESET; pHba->state &= ~DPTI_STATE_RESET;
if (adpt_sysfs_class) {
struct device *dev = device_create(adpt_sysfs_class,
NULL, MKDEV(DPTI_I2O_MAJOR, pHba->unit),
"dpti%d", pHba->unit);
if (IS_ERR(dev)) {
printk(KERN_WARNING"dpti%d: unable to "
"create device in dpt_i2o class\n",
pHba->unit);
}
}
} }
// Register our control device node // Register our control device node
...@@ -1212,8 +1230,16 @@ static void adpt_i2o_delete_hba(adpt_hba* pHba) ...@@ -1212,8 +1230,16 @@ static void adpt_i2o_delete_hba(adpt_hba* pHba)
pci_dev_put(pHba->pDev); pci_dev_put(pHba->pDev);
kfree(pHba); kfree(pHba);
if (adpt_sysfs_class)
device_destroy(adpt_sysfs_class,
MKDEV(DPTI_I2O_MAJOR, pHba->unit));
if(hba_count <= 0){ if(hba_count <= 0){
unregister_chrdev(DPTI_I2O_MAJOR, DPT_DRIVER); unregister_chrdev(DPTI_I2O_MAJOR, DPT_DRIVER);
if (adpt_sysfs_class) {
class_destroy(adpt_sysfs_class);
adpt_sysfs_class = NULL;
}
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment