Commit 30a57421 authored by Jens Axboe's avatar Jens Axboe

ide-proc updates:

o remove low level driver ifdef mess
o allow "host" to register into proc list instead
parent 61b238c6
...@@ -57,6 +57,9 @@ ...@@ -57,6 +57,9 @@
*/ */
#include <linux/config.h> #include <linux/config.h>
#define __NO_VERSION__
#include <linux/module.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/sched.h> #include <linux/sched.h>
...@@ -75,59 +78,6 @@ ...@@ -75,59 +78,6 @@
#define MIN(a,b) (((a) < (b)) ? (a) : (b)) #define MIN(a,b) (((a) < (b)) ? (a) : (b))
#endif #endif
#ifdef CONFIG_BLK_DEV_AEC62XX
extern byte aec62xx_proc;
int (*aec62xx_display_info)(char *, char **, off_t, int) = NULL;
#endif /* CONFIG_BLK_DEV_AEC62XX */
#ifdef CONFIG_BLK_DEV_ALI15X3
extern byte ali_proc;
int (*ali_display_info)(char *, char **, off_t, int) = NULL;
#endif /* CONFIG_BLK_DEV_ALI15X3 */
#ifdef CONFIG_BLK_DEV_AMD74XX
extern byte amd74xx_proc;
int (*amd74xx_display_info)(char *, char **, off_t, int) = NULL;
#endif /* CONFIG_BLK_DEV_AMD74XX */
#ifdef CONFIG_BLK_DEV_CMD64X
extern byte cmd64x_proc;
int (*cmd64x_display_info)(char *, char **, off_t, int) = NULL;
#endif /* CONFIG_BLK_DEV_CMD64X */
#ifdef CONFIG_BLK_DEV_CS5530
extern byte cs5530_proc;
int (*cs5530_display_info)(char *, char **, off_t, int) = NULL;
#endif /* CONFIG_BLK_DEV_CS5530 */
#ifdef CONFIG_BLK_DEV_HPT34X
extern byte hpt34x_proc;
int (*hpt34x_display_info)(char *, char **, off_t, int) = NULL;
#endif /* CONFIG_BLK_DEV_HPT34X */
#ifdef CONFIG_BLK_DEV_HPT366
extern byte hpt366_proc;
int (*hpt366_display_info)(char *, char **, off_t, int) = NULL;
#endif /* CONFIG_BLK_DEV_HPT366 */
#ifdef CONFIG_BLK_DEV_PDC202XX
extern byte pdc202xx_proc;
int (*pdc202xx_display_info)(char *, char **, off_t, int) = NULL;
#endif /* CONFIG_BLK_DEV_PDC202XX */
#ifdef CONFIG_BLK_DEV_PIIX
extern byte piix_proc;
int (*piix_display_info)(char *, char **, off_t, int) = NULL;
#endif /* CONFIG_BLK_DEV_PIIX */
#ifdef CONFIG_BLK_DEV_SVWKS
extern byte svwks_proc;
int (*svwks_display_info)(char *, char **, off_t, int) = NULL;
#endif /* CONFIG_BLK_DEV_SVWKS */
#ifdef CONFIG_BLK_DEV_SIS5513
extern byte sis_proc;
int (*sis_display_info)(char *, char **, off_t, int) = NULL;
#endif /* CONFIG_BLK_DEV_SIS5513 */
#ifdef CONFIG_BLK_DEV_SLC90E66
extern byte slc90e66_proc;
int (*slc90e66_display_info)(char *, char **, off_t, int) = NULL;
#endif /* CONFIG_BLK_DEV_SLC90E66 */
#ifdef CONFIG_BLK_DEV_VIA82CXXX
extern byte via_proc;
int (*via_display_info)(char *, char **, off_t, int) = NULL;
#endif /* CONFIG_BLK_DEV_VIA82CXXX */
static int ide_getxdigit(char c) static int ide_getxdigit(char c)
{ {
int digit; int digit;
...@@ -161,6 +111,15 @@ static int xx_xx_parse_error (const char *data, unsigned long len, const char *m ...@@ -161,6 +111,15 @@ static int xx_xx_parse_error (const char *data, unsigned long len, const char *m
static struct proc_dir_entry * proc_ide_root = NULL; static struct proc_dir_entry * proc_ide_root = NULL;
#ifdef CONFIG_BLK_DEV_IDEPCI
#include <linux/delay.h>
/*
* This is the list of registered PCI chipset driver data structures.
*/
static ide_pci_host_proc_t * ide_pci_host_proc_list;
#endif /* CONFIG_BLK_DEV_IDEPCI */
static int proc_ide_write_config static int proc_ide_write_config
(struct file *file, const char *buffer, unsigned long count, void *data) (struct file *file, const char *buffer, unsigned long count, void *data)
{ {
...@@ -215,7 +174,7 @@ static int proc_ide_write_config ...@@ -215,7 +174,7 @@ static int proc_ide_write_config
break; break;
case 'P': is_pci = 1; case 'P': is_pci = 1;
#ifdef CONFIG_BLK_DEV_IDEPCI #ifdef CONFIG_BLK_DEV_IDEPCI
if (hwif->pci_dev && !IDE_PCI_DEVID_EQ(hwif->pci_devid, IDE_PCI_DEVID_NULL)) if (hwif->pci_dev && !hwif->pci_dev->vendor)
break; break;
#endif /* CONFIG_BLK_DEV_IDEPCI */ #endif /* CONFIG_BLK_DEV_IDEPCI */
msg = "not a PCI device"; msg = "not a PCI device";
...@@ -313,11 +272,11 @@ static int proc_ide_write_config ...@@ -313,11 +272,11 @@ static int proc_ide_write_config
* *
*/ */
switch (digits) { switch (digits) {
case 2: OUT_BYTE(val, reg); case 2: hwif->OUTB(val, reg);
break; break;
case 4: OUT_WORD(val, reg); case 4: hwif->OUTW(val, reg);
break; break;
case 8: outl(val, reg); case 8: hwif->OUTL(val, reg);
break; break;
} }
#endif /* !__mc68000__ && !CONFIG_APUS */ #endif /* !__mc68000__ && !CONFIG_APUS */
...@@ -333,7 +292,7 @@ static int proc_ide_write_config ...@@ -333,7 +292,7 @@ static int proc_ide_write_config
return xx_xx_parse_error(start, startn, msg); return xx_xx_parse_error(start, startn, msg);
} }
static int proc_ide_read_config int proc_ide_read_config
(char *page, char **start, off_t off, int count, int *eof, void *data) (char *page, char **start, off_t off, int count, int *eof, void *data)
{ {
char *out = page; char *out = page;
...@@ -342,20 +301,26 @@ static int proc_ide_read_config ...@@ -342,20 +301,26 @@ static int proc_ide_read_config
#ifdef CONFIG_BLK_DEV_IDEPCI #ifdef CONFIG_BLK_DEV_IDEPCI
ide_hwif_t *hwif = (ide_hwif_t *)data; ide_hwif_t *hwif = (ide_hwif_t *)data;
struct pci_dev *dev = hwif->pci_dev; struct pci_dev *dev = hwif->pci_dev;
if (!IDE_PCI_DEVID_EQ(hwif->pci_devid, IDE_PCI_DEVID_NULL) && dev && dev->bus) { if ((hwif->pci_dev && hwif->pci_dev->vendor) && dev && dev->bus) {
int reg = 0; int reg = 0;
out += sprintf(out, "pci bus %02x device %02x vid %04x did %04x channel %d\n", out += sprintf(out, "pci bus %02x device %02x vendor %04x "
dev->bus->number, dev->devfn, hwif->pci_devid.vid, hwif->pci_devid.did, hwif->channel); "device %04x channel %d\n",
dev->bus->number, dev->devfn,
hwif->pci_dev->vendor, hwif->pci_dev->device,
hwif->channel);
do { do {
byte val; u8 val;
int rc = pci_read_config_byte(dev, reg, &val); int rc = pci_read_config_byte(dev, reg, &val);
if (rc) { if (rc) {
printk("proc_ide_read_config: error %d reading bus %02x dev %02x reg 0x%02x\n", printk("proc_ide_read_config: error %d reading"
" bus %02x dev %02x reg 0x%02x\n",
rc, dev->bus->number, dev->devfn, reg); rc, dev->bus->number, dev->devfn, reg);
out += sprintf(out, "??%c", (++reg & 0xf) ? ' ' : '\n'); out += sprintf(out, "??%c",
(++reg & 0xf) ? ' ' : '\n');
} else } else
out += sprintf(out, "%02x%c", val, (++reg & 0xf) ? ' ' : '\n'); out += sprintf(out, "%02x%c",
val, (++reg & 0xf) ? ' ' : '\n');
} while (reg < 0x100); } while (reg < 0x100);
} else } else
#endif /* CONFIG_BLK_DEV_IDEPCI */ #endif /* CONFIG_BLK_DEV_IDEPCI */
...@@ -364,6 +329,7 @@ static int proc_ide_read_config ...@@ -364,6 +329,7 @@ static int proc_ide_read_config
PROC_IDE_READ_RETURN(page,start,off,count,eof,len); PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
} }
EXPORT_SYMBOL(proc_ide_read_config);
static int ide_getdigit(char c) static int ide_getdigit(char c)
{ {
...@@ -405,7 +371,9 @@ static int proc_ide_read_imodel ...@@ -405,7 +371,9 @@ static int proc_ide_read_imodel
PROC_IDE_READ_RETURN(page,start,off,count,eof,len); PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
} }
static int proc_ide_read_mate EXPORT_SYMBOL(proc_ide_read_imodel);
int proc_ide_read_mate
(char *page, char **start, off_t off, int count, int *eof, void *data) (char *page, char **start, off_t off, int count, int *eof, void *data)
{ {
ide_hwif_t *hwif = (ide_hwif_t *) data; ide_hwif_t *hwif = (ide_hwif_t *) data;
...@@ -418,7 +386,9 @@ static int proc_ide_read_mate ...@@ -418,7 +386,9 @@ static int proc_ide_read_mate
PROC_IDE_READ_RETURN(page,start,off,count,eof,len); PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
} }
static int proc_ide_read_channel EXPORT_SYMBOL(proc_ide_read_mate);
int proc_ide_read_channel
(char *page, char **start, off_t off, int count, int *eof, void *data) (char *page, char **start, off_t off, int count, int *eof, void *data)
{ {
ide_hwif_t *hwif = (ide_hwif_t *) data; ide_hwif_t *hwif = (ide_hwif_t *) data;
...@@ -430,7 +400,9 @@ static int proc_ide_read_channel ...@@ -430,7 +400,9 @@ static int proc_ide_read_channel
PROC_IDE_READ_RETURN(page,start,off,count,eof,len); PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
} }
static int proc_ide_read_identify EXPORT_SYMBOL(proc_ide_read_channel);
int proc_ide_read_identify
(char *page, char **start, off_t off, int count, int *eof, void *data) (char *page, char **start, off_t off, int count, int *eof, void *data)
{ {
ide_drive_t *drive = (ide_drive_t *)data; ide_drive_t *drive = (ide_drive_t *)data;
...@@ -441,7 +413,8 @@ static int proc_ide_read_identify ...@@ -441,7 +413,8 @@ static int proc_ide_read_identify
char *out = ((char *)val) + (SECTOR_WORDS * 4); char *out = ((char *)val) + (SECTOR_WORDS * 4);
page = out; page = out;
do { do {
out += sprintf(out, "%04x%c", le16_to_cpu(*val), (++i & 7) ? ' ' : '\n'); out += sprintf(out, "%04x%c",
le16_to_cpu(*val), (++i & 7) ? ' ' : '\n');
val += 1; val += 1;
} while (i < (SECTOR_WORDS * 2)); } while (i < (SECTOR_WORDS * 2));
len = out - page; len = out - page;
...@@ -451,7 +424,9 @@ static int proc_ide_read_identify ...@@ -451,7 +424,9 @@ static int proc_ide_read_identify
PROC_IDE_READ_RETURN(page,start,off,count,eof,len); PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
} }
static int proc_ide_read_settings EXPORT_SYMBOL(proc_ide_read_identify);
int proc_ide_read_settings
(char *page, char **start, off_t off, int count, int *eof, void *data) (char *page, char **start, off_t off, int count, int *eof, void *data)
{ {
ide_drive_t *drive = (ide_drive_t *) data; ide_drive_t *drive = (ide_drive_t *) data;
...@@ -481,9 +456,11 @@ static int proc_ide_read_settings ...@@ -481,9 +456,11 @@ static int proc_ide_read_settings
PROC_IDE_READ_RETURN(page,start,off,count,eof,len); PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
} }
EXPORT_SYMBOL(proc_ide_read_settings);
#define MAX_LEN 30 #define MAX_LEN 30
static int proc_ide_write_settings int proc_ide_write_settings
(struct file *file, const char *buffer, unsigned long count, void *data) (struct file *file, const char *buffer, unsigned long count, void *data)
{ {
ide_drive_t *drive = (ide_drive_t *) data; ide_drive_t *drive = (ide_drive_t *) data;
...@@ -558,6 +535,8 @@ static int proc_ide_write_settings ...@@ -558,6 +535,8 @@ static int proc_ide_write_settings
return -EINVAL; return -EINVAL;
} }
EXPORT_SYMBOL(proc_ide_write_settings);
int proc_ide_read_capacity int proc_ide_read_capacity
(char *page, char **start, off_t off, int count, int *eof, void *data) (char *page, char **start, off_t off, int count, int *eof, void *data)
{ {
...@@ -569,10 +548,12 @@ int proc_ide_read_capacity ...@@ -569,10 +548,12 @@ int proc_ide_read_capacity
len = sprintf(page, "(none)\n"); len = sprintf(page, "(none)\n");
else else
len = sprintf(page,"%llu\n", len = sprintf(page,"%llu\n",
(unsigned long long) ((ide_driver_t *)drive->driver)->capacity(drive)); (u64) ((ide_driver_t *)drive->driver)->capacity(drive));
PROC_IDE_READ_RETURN(page,start,off,count,eof,len); PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
} }
EXPORT_SYMBOL(proc_ide_read_capacity);
int proc_ide_read_geometry int proc_ide_read_geometry
(char *page, char **start, off_t off, int count, int *eof, void *data) (char *page, char **start, off_t off, int count, int *eof, void *data)
{ {
...@@ -580,24 +561,32 @@ int proc_ide_read_geometry ...@@ -580,24 +561,32 @@ int proc_ide_read_geometry
char *out = page; char *out = page;
int len; int len;
out += sprintf(out,"physical %d/%d/%d\n", drive->cyl, drive->head, drive->sect); out += sprintf(out,"physical %d/%d/%d\n",
out += sprintf(out,"logical %d/%d/%d\n", drive->bios_cyl, drive->bios_head, drive->bios_sect); drive->cyl, drive->head, drive->sect);
out += sprintf(out,"logical %d/%d/%d\n",
drive->bios_cyl, drive->bios_head, drive->bios_sect);
len = out - page; len = out - page;
PROC_IDE_READ_RETURN(page,start,off,count,eof,len); PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
} }
static int proc_ide_read_dmodel EXPORT_SYMBOL(proc_ide_read_geometry);
int proc_ide_read_dmodel
(char *page, char **start, off_t off, int count, int *eof, void *data) (char *page, char **start, off_t off, int count, int *eof, void *data)
{ {
ide_drive_t *drive = (ide_drive_t *) data; ide_drive_t *drive = (ide_drive_t *) data;
struct hd_driveid *id = drive->id; struct hd_driveid *id = drive->id;
int len; int len;
len = sprintf(page, "%.40s\n", (id && id->model[0]) ? (char *)id->model : "(none)"); len = sprintf(page, "%.40s\n",
(id && id->model[0]) ? (char *)id->model : "(none)");
PROC_IDE_READ_RETURN(page,start,off,count,eof,len); PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
} }
static int proc_ide_read_driver EXPORT_SYMBOL(proc_ide_read_dmodel);
int proc_ide_read_driver
(char *page, char **start, off_t off, int count, int *eof, void *data) (char *page, char **start, off_t off, int count, int *eof, void *data)
{ {
ide_drive_t *drive = (ide_drive_t *) data; ide_drive_t *drive = (ide_drive_t *) data;
...@@ -607,11 +596,14 @@ static int proc_ide_read_driver ...@@ -607,11 +596,14 @@ static int proc_ide_read_driver
if (!driver) if (!driver)
len = sprintf(page, "(none)\n"); len = sprintf(page, "(none)\n");
else else
len = sprintf(page, "%s version %s\n", driver->name, driver->version); len = sprintf(page, "%s version %s\n",
driver->name, driver->version);
PROC_IDE_READ_RETURN(page,start,off,count,eof,len); PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
} }
static int proc_ide_write_driver EXPORT_SYMBOL(proc_ide_read_driver);
int proc_ide_write_driver
(struct file *file, const char *buffer, unsigned long count, void *data) (struct file *file, const char *buffer, unsigned long count, void *data)
{ {
ide_drive_t *drive = (ide_drive_t *) data; ide_drive_t *drive = (ide_drive_t *) data;
...@@ -623,7 +615,9 @@ static int proc_ide_write_driver ...@@ -623,7 +615,9 @@ static int proc_ide_write_driver
return count; return count;
} }
static int proc_ide_read_media EXPORT_SYMBOL(proc_ide_write_driver);
int proc_ide_read_media
(char *page, char **start, off_t off, int count, int *eof, void *data) (char *page, char **start, off_t off, int count, int *eof, void *data)
{ {
ide_drive_t *drive = (ide_drive_t *) data; ide_drive_t *drive = (ide_drive_t *) data;
...@@ -647,6 +641,8 @@ static int proc_ide_read_media ...@@ -647,6 +641,8 @@ static int proc_ide_read_media
PROC_IDE_READ_RETURN(page,start,off,count,eof,len); PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
} }
EXPORT_SYMBOL(proc_ide_read_media);
static ide_proc_entry_t generic_drive_entries[] = { static ide_proc_entry_t generic_drive_entries[] = {
{ "driver", S_IFREG|S_IRUGO, proc_ide_read_driver, proc_ide_write_driver }, { "driver", S_IFREG|S_IRUGO, proc_ide_read_driver, proc_ide_write_driver },
{ "identify", S_IFREG|S_IRUSR, proc_ide_read_identify, NULL }, { "identify", S_IFREG|S_IRUSR, proc_ide_read_identify, NULL },
...@@ -673,6 +669,8 @@ void ide_add_proc_entries(struct proc_dir_entry *dir, ide_proc_entry_t *p, void ...@@ -673,6 +669,8 @@ void ide_add_proc_entries(struct proc_dir_entry *dir, ide_proc_entry_t *p, void
} }
} }
EXPORT_SYMBOL(ide_add_proc_entries);
void ide_remove_proc_entries(struct proc_dir_entry *dir, ide_proc_entry_t *p) void ide_remove_proc_entries(struct proc_dir_entry *dir, ide_proc_entry_t *p)
{ {
if (!dir || !p) if (!dir || !p)
...@@ -683,7 +681,9 @@ void ide_remove_proc_entries(struct proc_dir_entry *dir, ide_proc_entry_t *p) ...@@ -683,7 +681,9 @@ void ide_remove_proc_entries(struct proc_dir_entry *dir, ide_proc_entry_t *p)
} }
} }
static void create_proc_ide_drives(ide_hwif_t *hwif) EXPORT_SYMBOL(ide_remove_proc_entries);
void create_proc_ide_drives(ide_hwif_t *hwif)
{ {
int d; int d;
struct proc_dir_entry *ent; struct proc_dir_entry *ent;
...@@ -713,6 +713,8 @@ static void create_proc_ide_drives(ide_hwif_t *hwif) ...@@ -713,6 +713,8 @@ static void create_proc_ide_drives(ide_hwif_t *hwif)
} }
} }
EXPORT_SYMBOL(create_proc_ide_drives);
void recreate_proc_ide_device(ide_hwif_t *hwif, ide_drive_t *drive) void recreate_proc_ide_device(ide_hwif_t *hwif, ide_drive_t *drive)
{ {
struct proc_dir_entry *ent; struct proc_dir_entry *ent;
...@@ -740,6 +742,8 @@ void recreate_proc_ide_device(ide_hwif_t *hwif, ide_drive_t *drive) ...@@ -740,6 +742,8 @@ void recreate_proc_ide_device(ide_hwif_t *hwif, ide_drive_t *drive)
} }
} }
EXPORT_SYMBOL(recreate_proc_ide_device);
void destroy_proc_ide_device(ide_hwif_t *hwif, ide_drive_t *drive) void destroy_proc_ide_device(ide_hwif_t *hwif, ide_drive_t *drive)
{ {
ide_driver_t *driver = drive->driver; ide_driver_t *driver = drive->driver;
...@@ -754,19 +758,21 @@ void destroy_proc_ide_device(ide_hwif_t *hwif, ide_drive_t *drive) ...@@ -754,19 +758,21 @@ void destroy_proc_ide_device(ide_hwif_t *hwif, ide_drive_t *drive)
} }
} }
EXPORT_SYMBOL(destroy_proc_ide_device);
void destroy_proc_ide_drives(ide_hwif_t *hwif) void destroy_proc_ide_drives(ide_hwif_t *hwif)
{ {
int d; int d;
for (d = 0; d < MAX_DRIVES; d++) { for (d = 0; d < MAX_DRIVES; d++) {
ide_drive_t *drive = &hwif->drives[d]; ide_drive_t *drive = &hwif->drives[d];
// ide_driver_t *driver = drive->driver;
if (drive->proc) if (drive->proc)
destroy_proc_ide_device(hwif, drive); destroy_proc_ide_device(hwif, drive);
} }
} }
EXPORT_SYMBOL(destroy_proc_ide_drives);
static ide_proc_entry_t hwif_entries[] = { static ide_proc_entry_t hwif_entries[] = {
{ "channel", S_IFREG|S_IRUGO, proc_ide_read_channel, NULL }, { "channel", S_IFREG|S_IRUGO, proc_ide_read_channel, NULL },
{ "config", S_IFREG|S_IRUGO|S_IWUSR,proc_ide_read_config, proc_ide_write_config }, { "config", S_IFREG|S_IRUGO|S_IWUSR,proc_ide_read_config, proc_ide_write_config },
...@@ -794,7 +800,29 @@ void create_proc_ide_interfaces(void) ...@@ -794,7 +800,29 @@ void create_proc_ide_interfaces(void)
} }
} }
static void destroy_proc_ide_interfaces(void) #ifdef CONFIG_BLK_DEV_IDEPCI
void ide_pci_register_host_proc (ide_pci_host_proc_t *p)
{
ide_pci_host_proc_t *tmp;
if (!p) return;
p->next = NULL;
p->set = 1;
if (ide_pci_host_proc_list) {
tmp = ide_pci_host_proc_list;
while (tmp->next) tmp = tmp->next;
tmp->next = p;
} else
ide_pci_host_proc_list = p;
}
EXPORT_SYMBOL(ide_pci_register_host_proc);
#endif /* CONFIG_BLK_DEV_IDEPCI */
EXPORT_SYMBOL(create_proc_ide_interfaces);
void destroy_proc_ide_interfaces(void)
{ {
int h; int h;
...@@ -815,6 +843,8 @@ static void destroy_proc_ide_interfaces(void) ...@@ -815,6 +843,8 @@ static void destroy_proc_ide_interfaces(void)
} }
} }
EXPORT_SYMBOL(destroy_proc_ide_interfaces);
extern struct seq_operations ide_drivers_op; extern struct seq_operations ide_drivers_op;
static int ide_drivers_open(struct inode *inode, struct file *file) static int ide_drivers_open(struct inode *inode, struct file *file)
{ {
...@@ -829,6 +859,9 @@ static struct file_operations ide_drivers_operations = { ...@@ -829,6 +859,9 @@ static struct file_operations ide_drivers_operations = {
void proc_ide_create(void) void proc_ide_create(void)
{ {
#ifdef CONFIG_BLK_DEV_IDEPCI
ide_pci_host_proc_t *p = ide_pci_host_proc_list;
#endif /* CONFIG_BLK_DEV_IDEPCI */
struct proc_dir_entry *entry; struct proc_dir_entry *entry;
proc_ide_root = proc_mkdir("ide", 0); proc_ide_root = proc_mkdir("ide", 0);
if (!proc_ide_root) return; if (!proc_ide_root) return;
...@@ -839,120 +872,40 @@ void proc_ide_create(void) ...@@ -839,120 +872,40 @@ void proc_ide_create(void)
if (entry) if (entry)
entry->proc_fops = &ide_drivers_operations; entry->proc_fops = &ide_drivers_operations;
#ifdef CONFIG_BLK_DEV_AEC62XX #ifdef CONFIG_BLK_DEV_IDEPCI
if ((aec62xx_display_info) && (aec62xx_proc)) while (p != NULL)
create_proc_info_entry("aec62xx", 0, proc_ide_root, aec62xx_display_info); {
#endif /* CONFIG_BLK_DEV_AEC62XX */ if (p->name != NULL && p->set == 1 && p->get_info != NULL)
#ifdef CONFIG_BLK_DEV_ALI15X3 {
if ((ali_display_info) && (ali_proc)) p->parent = proc_ide_root;
create_proc_info_entry("ali", 0, proc_ide_root, ali_display_info); create_proc_info_entry(p->name, 0, p->parent, p->get_info);
#endif /* CONFIG_BLK_DEV_ALI15X3 */ p->set = 2;
#ifdef CONFIG_BLK_DEV_AMD74XX }
if ((amd74xx_display_info) && (amd74xx_proc)) p = p->next;
create_proc_info_entry("amd74xx", 0, proc_ide_root, amd74xx_display_info); }
#endif /* CONFIG_BLK_DEV_AMD74XX */ #endif /* CONFIG_BLK_DEV_IDEPCI */
#ifdef CONFIG_BLK_DEV_CMD64X
if ((cmd64x_display_info) && (cmd64x_proc))
create_proc_info_entry("cmd64x", 0, proc_ide_root, cmd64x_display_info);
#endif /* CONFIG_BLK_DEV_CMD64X */
#ifdef CONFIG_BLK_DEV_CS5530
if ((cs5530_display_info) && (cs5530_proc))
create_proc_info_entry("cs5530", 0, proc_ide_root, cs5530_display_info);
#endif /* CONFIG_BLK_DEV_CS5530 */
#ifdef CONFIG_BLK_DEV_HPT34X
if ((hpt34x_display_info) && (hpt34x_proc))
create_proc_info_entry("hpt34x", 0, proc_ide_root, hpt34x_display_info);
#endif /* CONFIG_BLK_DEV_HPT34X */
#ifdef CONFIG_BLK_DEV_HPT366
if ((hpt366_display_info) && (hpt366_proc))
create_proc_info_entry("hpt366", 0, proc_ide_root, hpt366_display_info);
#endif /* CONFIG_BLK_DEV_HPT366 */
#ifdef CONFIG_BLK_DEV_SVWKS
if ((svwks_display_info) && (svwks_proc))
create_proc_info_entry("svwks", 0, proc_ide_root, svwks_display_info);
#endif /* CONFIG_BLK_DEV_SVWKS */
#ifdef CONFIG_BLK_DEV_PDC202XX
if ((pdc202xx_display_info) && (pdc202xx_proc))
create_proc_info_entry("pdc202xx", 0, proc_ide_root, pdc202xx_display_info);
#endif /* CONFIG_BLK_DEV_PDC202XX */
#ifdef CONFIG_BLK_DEV_PIIX
if ((piix_display_info) && (piix_proc))
create_proc_info_entry("piix", 0, proc_ide_root, piix_display_info);
#endif /* CONFIG_BLK_DEV_PIIX */
#ifdef CONFIG_BLK_DEV_SIS5513
if ((sis_display_info) && (sis_proc))
create_proc_info_entry("sis", 0, proc_ide_root, sis_display_info);
#endif /* CONFIG_BLK_DEV_SIS5513 */
#ifdef CONFIG_BLK_DEV_SLC90E66
if ((slc90e66_display_info) && (slc90e66_proc))
create_proc_info_entry("slc90e66", 0, proc_ide_root, slc90e66_display_info);
#endif /* CONFIG_BLK_DEV_SLC90E66 */
#ifdef CONFIG_BLK_DEV_VIA82CXXX
if ((via_display_info) && (via_proc))
create_proc_info_entry("via", 0, proc_ide_root, via_display_info);
#endif /* CONFIG_BLK_DEV_VIA82CXXX */
} }
EXPORT_SYMBOL(proc_ide_create);
void proc_ide_destroy(void) void proc_ide_destroy(void)
{ {
/* #ifdef CONFIG_BLK_DEV_IDEPCI
* Mmmm.. does this free up all resources, ide_pci_host_proc_t *p = ide_pci_host_proc_list;
* or do we need to do a more proper cleanup here ?? char name[32];
*/
#ifdef CONFIG_BLK_DEV_AEC62XX while ((p->name != NULL) && (p->set) && (p->get_info != NULL)) {
if ((aec62xx_display_info) && (aec62xx_proc)) name[0] = '\0';
remove_proc_entry("ide/aec62xx",0); sprintf(name, "ide/%s", p->name);
#endif /* CONFIG_BLK_DEV_AEC62XX */ if (p->set == 2)
#ifdef CONFIG_BLK_DEV_ALI15X3 remove_proc_entry(p->name, p->parent);
if ((ali_display_info) && (ali_proc)) if (p->next == NULL) break;
remove_proc_entry("ide/ali",0); p = p->next;
#endif /* CONFIG_BLK_DEV_ALI15X3 */ }
#ifdef CONFIG_BLK_DEV_AMD74XX #endif /* CONFIG_BLK_DEV_IDEPCI */
if ((amd74xx_display_info) && (amd74xx_proc)) remove_proc_entry("ide/drivers", proc_ide_root);
remove_proc_entry("ide/amd74xx",0);
#endif /* CONFIG_BLK_DEV_AMD74XX */
#ifdef CONFIG_BLK_DEV_CMD64X
if ((cmd64x_display_info) && (cmd64x_proc))
remove_proc_entry("ide/cmd64x",0);
#endif /* CONFIG_BLK_DEV_CMD64X */
#ifdef CONFIG_BLK_DEV_CS5530
if ((cs5530_display_info) && (cs5530_proc))
remove_proc_entry("ide/cs5530",0);
#endif /* CONFIG_BLK_DEV_CS5530 */
#ifdef CONFIG_BLK_DEV_HPT34X
if ((hpt34x_display_info) && (hpt34x_proc))
remove_proc_entry("ide/hpt34x",0);
#endif /* CONFIG_BLK_DEV_HPT34X */
#ifdef CONFIG_BLK_DEV_HPT366
if ((hpt366_display_info) && (hpt366_proc))
remove_proc_entry("ide/hpt366",0);
#endif /* CONFIG_BLK_DEV_HPT366 */
#ifdef CONFIG_BLK_DEV_PDC202XX
if ((pdc202xx_display_info) && (pdc202xx_proc))
remove_proc_entry("ide/pdc202xx",0);
#endif /* CONFIG_BLK_DEV_PDC202XX */
#ifdef CONFIG_BLK_DEV_PIIX
if ((piix_display_info) && (piix_proc))
remove_proc_entry("ide/piix",0);
#endif /* CONFIG_BLK_DEV_PIIX */
#ifdef CONFIG_BLK_DEV_SVWKS
if ((svwks_display_info) && (svwks_proc))
remove_proc_entry("ide/svwks",0);
#endif /* CONFIG_BLK_DEV_SVWKS */
#ifdef CONFIG_BLK_DEV_SIS5513
if ((sis_display_info) && (sis_proc))
remove_proc_entry("ide/sis", 0);
#endif /* CONFIG_BLK_DEV_SIS5513 */
#ifdef CONFIG_BLK_DEV_SLC90E66
if ((slc90e66_display_info) && (slc90e66_proc))
remove_proc_entry("ide/slc90e66",0);
#endif /* CONFIG_BLK_DEV_SLC90E66 */
#ifdef CONFIG_BLK_DEV_VIA82CXXX
if ((via_display_info) && (via_proc))
remove_proc_entry("ide/via",0);
#endif /* CONFIG_BLK_DEV_VIA82CXXX */
remove_proc_entry("ide/drivers", 0);
destroy_proc_ide_interfaces(); destroy_proc_ide_interfaces();
remove_proc_entry("ide", 0); remove_proc_entry("ide", 0);
} }
EXPORT_SYMBOL(proc_ide_destroy);
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