|
@@ -56,19 +56,6 @@ static int ide_imodel_proc_show(struct seq_file *m, void *v)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int ide_imodel_proc_open(struct inode *inode, struct file *file)
|
|
|
-{
|
|
|
- return single_open(file, ide_imodel_proc_show, PDE_DATA(inode));
|
|
|
-}
|
|
|
-
|
|
|
-static const struct file_operations ide_imodel_proc_fops = {
|
|
|
- .owner = THIS_MODULE,
|
|
|
- .open = ide_imodel_proc_open,
|
|
|
- .read = seq_read,
|
|
|
- .llseek = seq_lseek,
|
|
|
- .release = single_release,
|
|
|
-};
|
|
|
-
|
|
|
static int ide_mate_proc_show(struct seq_file *m, void *v)
|
|
|
{
|
|
|
ide_hwif_t *hwif = (ide_hwif_t *) m->private;
|
|
@@ -80,19 +67,6 @@ static int ide_mate_proc_show(struct seq_file *m, void *v)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int ide_mate_proc_open(struct inode *inode, struct file *file)
|
|
|
-{
|
|
|
- return single_open(file, ide_mate_proc_show, PDE_DATA(inode));
|
|
|
-}
|
|
|
-
|
|
|
-static const struct file_operations ide_mate_proc_fops = {
|
|
|
- .owner = THIS_MODULE,
|
|
|
- .open = ide_mate_proc_open,
|
|
|
- .read = seq_read,
|
|
|
- .llseek = seq_lseek,
|
|
|
- .release = single_release,
|
|
|
-};
|
|
|
-
|
|
|
static int ide_channel_proc_show(struct seq_file *m, void *v)
|
|
|
{
|
|
|
ide_hwif_t *hwif = (ide_hwif_t *) m->private;
|
|
@@ -101,19 +75,6 @@ static int ide_channel_proc_show(struct seq_file *m, void *v)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int ide_channel_proc_open(struct inode *inode, struct file *file)
|
|
|
-{
|
|
|
- return single_open(file, ide_channel_proc_show, PDE_DATA(inode));
|
|
|
-}
|
|
|
-
|
|
|
-static const struct file_operations ide_channel_proc_fops = {
|
|
|
- .owner = THIS_MODULE,
|
|
|
- .open = ide_channel_proc_open,
|
|
|
- .read = seq_read,
|
|
|
- .llseek = seq_lseek,
|
|
|
- .release = single_release,
|
|
|
-};
|
|
|
-
|
|
|
static int ide_identify_proc_show(struct seq_file *m, void *v)
|
|
|
{
|
|
|
ide_drive_t *drive = (ide_drive_t *)m->private;
|
|
@@ -141,19 +102,6 @@ static int ide_identify_proc_show(struct seq_file *m, void *v)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int ide_identify_proc_open(struct inode *inode, struct file *file)
|
|
|
-{
|
|
|
- return single_open(file, ide_identify_proc_show, PDE_DATA(inode));
|
|
|
-}
|
|
|
-
|
|
|
-static const struct file_operations ide_identify_proc_fops = {
|
|
|
- .owner = THIS_MODULE,
|
|
|
- .open = ide_identify_proc_open,
|
|
|
- .read = seq_read,
|
|
|
- .llseek = seq_lseek,
|
|
|
- .release = single_release,
|
|
|
-};
|
|
|
-
|
|
|
/**
|
|
|
* ide_find_setting - find a specific setting
|
|
|
* @st: setting table pointer
|
|
@@ -441,27 +389,14 @@ static const struct file_operations ide_settings_proc_fops = {
|
|
|
.write = ide_settings_proc_write,
|
|
|
};
|
|
|
|
|
|
-static int ide_capacity_proc_show(struct seq_file *m, void *v)
|
|
|
+int ide_capacity_proc_show(struct seq_file *m, void *v)
|
|
|
{
|
|
|
seq_printf(m, "%llu\n", (long long)0x7fffffff);
|
|
|
return 0;
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(ide_capacity_proc_show);
|
|
|
|
|
|
-static int ide_capacity_proc_open(struct inode *inode, struct file *file)
|
|
|
-{
|
|
|
- return single_open(file, ide_capacity_proc_show, NULL);
|
|
|
-}
|
|
|
-
|
|
|
-const struct file_operations ide_capacity_proc_fops = {
|
|
|
- .owner = THIS_MODULE,
|
|
|
- .open = ide_capacity_proc_open,
|
|
|
- .read = seq_read,
|
|
|
- .llseek = seq_lseek,
|
|
|
- .release = single_release,
|
|
|
-};
|
|
|
-EXPORT_SYMBOL_GPL(ide_capacity_proc_fops);
|
|
|
-
|
|
|
-static int ide_geometry_proc_show(struct seq_file *m, void *v)
|
|
|
+int ide_geometry_proc_show(struct seq_file *m, void *v)
|
|
|
{
|
|
|
ide_drive_t *drive = (ide_drive_t *) m->private;
|
|
|
|
|
@@ -471,20 +406,7 @@ static int ide_geometry_proc_show(struct seq_file *m, void *v)
|
|
|
drive->bios_cyl, drive->bios_head, drive->bios_sect);
|
|
|
return 0;
|
|
|
}
|
|
|
-
|
|
|
-static int ide_geometry_proc_open(struct inode *inode, struct file *file)
|
|
|
-{
|
|
|
- return single_open(file, ide_geometry_proc_show, PDE_DATA(inode));
|
|
|
-}
|
|
|
-
|
|
|
-const struct file_operations ide_geometry_proc_fops = {
|
|
|
- .owner = THIS_MODULE,
|
|
|
- .open = ide_geometry_proc_open,
|
|
|
- .read = seq_read,
|
|
|
- .llseek = seq_lseek,
|
|
|
- .release = single_release,
|
|
|
-};
|
|
|
-EXPORT_SYMBOL(ide_geometry_proc_fops);
|
|
|
+EXPORT_SYMBOL(ide_geometry_proc_show);
|
|
|
|
|
|
static int ide_dmodel_proc_show(struct seq_file *seq, void *v)
|
|
|
{
|
|
@@ -495,19 +417,6 @@ static int ide_dmodel_proc_show(struct seq_file *seq, void *v)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int ide_dmodel_proc_open(struct inode *inode, struct file *file)
|
|
|
-{
|
|
|
- return single_open(file, ide_dmodel_proc_show, PDE_DATA(inode));
|
|
|
-}
|
|
|
-
|
|
|
-static const struct file_operations ide_dmodel_proc_fops = {
|
|
|
- .owner = THIS_MODULE,
|
|
|
- .open = ide_dmodel_proc_open,
|
|
|
- .read = seq_read,
|
|
|
- .llseek = seq_lseek,
|
|
|
- .release = single_release,
|
|
|
-};
|
|
|
-
|
|
|
static int ide_driver_proc_show(struct seq_file *m, void *v)
|
|
|
{
|
|
|
ide_drive_t *drive = (ide_drive_t *)m->private;
|
|
@@ -523,19 +432,6 @@ static int ide_driver_proc_show(struct seq_file *m, void *v)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int ide_driver_proc_open(struct inode *inode, struct file *file)
|
|
|
-{
|
|
|
- return single_open(file, ide_driver_proc_show, PDE_DATA(inode));
|
|
|
-}
|
|
|
-
|
|
|
-static const struct file_operations ide_driver_proc_fops = {
|
|
|
- .owner = THIS_MODULE,
|
|
|
- .open = ide_driver_proc_open,
|
|
|
- .read = seq_read,
|
|
|
- .llseek = seq_lseek,
|
|
|
- .release = single_release,
|
|
|
-};
|
|
|
-
|
|
|
static int ide_media_proc_show(struct seq_file *m, void *v)
|
|
|
{
|
|
|
ide_drive_t *drive = (ide_drive_t *) m->private;
|
|
@@ -567,11 +463,10 @@ static const struct file_operations ide_media_proc_fops = {
|
|
|
};
|
|
|
|
|
|
static ide_proc_entry_t generic_drive_entries[] = {
|
|
|
- { "driver", S_IFREG|S_IRUGO, &ide_driver_proc_fops },
|
|
|
- { "identify", S_IFREG|S_IRUSR, &ide_identify_proc_fops},
|
|
|
- { "media", S_IFREG|S_IRUGO, &ide_media_proc_fops },
|
|
|
- { "model", S_IFREG|S_IRUGO, &ide_dmodel_proc_fops },
|
|
|
- { "settings", S_IFREG|S_IRUSR|S_IWUSR, &ide_settings_proc_fops},
|
|
|
+ { "driver", S_IFREG|S_IRUGO, ide_driver_proc_show },
|
|
|
+ { "identify", S_IFREG|S_IRUSR, ide_identify_proc_show },
|
|
|
+ { "media", S_IFREG|S_IRUGO, ide_media_proc_show },
|
|
|
+ { "model", S_IFREG|S_IRUGO, ide_dmodel_proc_show },
|
|
|
{}
|
|
|
};
|
|
|
|
|
@@ -582,7 +477,7 @@ static void ide_add_proc_entries(struct proc_dir_entry *dir, ide_proc_entry_t *p
|
|
|
if (!dir || !p)
|
|
|
return;
|
|
|
while (p->name != NULL) {
|
|
|
- ent = proc_create_data(p->name, p->mode, dir, p->proc_fops, data);
|
|
|
+ ent = proc_create_single_data(p->name, p->mode, dir, p->show, data);
|
|
|
if (!ent) return;
|
|
|
p++;
|
|
|
}
|
|
@@ -647,8 +542,12 @@ void ide_proc_port_register_devices(ide_hwif_t *hwif)
|
|
|
continue;
|
|
|
|
|
|
drive->proc = proc_mkdir(drive->name, parent);
|
|
|
- if (drive->proc)
|
|
|
+ if (drive->proc) {
|
|
|
ide_add_proc_entries(drive->proc, generic_drive_entries, drive);
|
|
|
+ proc_create_data("setting", S_IFREG|S_IRUSR|S_IWUSR,
|
|
|
+ drive->proc, &ide_settings_proc_fops,
|
|
|
+ drive);
|
|
|
+ }
|
|
|
sprintf(name, "ide%d/%s", (drive->name[2]-'a')/2, drive->name);
|
|
|
ent = proc_symlink(drive->name, proc_ide_root, name);
|
|
|
if (!ent) return;
|
|
@@ -658,6 +557,7 @@ void ide_proc_port_register_devices(ide_hwif_t *hwif)
|
|
|
void ide_proc_unregister_device(ide_drive_t *drive)
|
|
|
{
|
|
|
if (drive->proc) {
|
|
|
+ remove_proc_entry("settings", drive->proc);
|
|
|
ide_remove_proc_entries(drive->proc, generic_drive_entries);
|
|
|
remove_proc_entry(drive->name, proc_ide_root);
|
|
|
remove_proc_entry(drive->name, drive->hwif->proc);
|
|
@@ -666,9 +566,9 @@ void ide_proc_unregister_device(ide_drive_t *drive)
|
|
|
}
|
|
|
|
|
|
static ide_proc_entry_t hwif_entries[] = {
|
|
|
- { "channel", S_IFREG|S_IRUGO, &ide_channel_proc_fops },
|
|
|
- { "mate", S_IFREG|S_IRUGO, &ide_mate_proc_fops },
|
|
|
- { "model", S_IFREG|S_IRUGO, &ide_imodel_proc_fops },
|
|
|
+ { "channel", S_IFREG|S_IRUGO, ide_channel_proc_show },
|
|
|
+ { "mate", S_IFREG|S_IRUGO, ide_mate_proc_show },
|
|
|
+ { "model", S_IFREG|S_IRUGO, ide_imodel_proc_show },
|
|
|
{}
|
|
|
};
|
|
|
|