]> git.hungrycats.org Git - linux/commitdiff
[PATCH] (23/25) move pointer to gendisk from hwif to drive
authorAlexander Viro <viro@math.psu.edu>
Sat, 7 Sep 2002 10:05:04 +0000 (03:05 -0700)
committerLinus Torvalds <torvalds@home.transmeta.com>
Sat, 7 Sep 2002 10:05:04 +0000 (03:05 -0700)
 ide switched from hwif->gd[i] to hwif->drive[i]->disk - IOW, instead
of array of two pointers to gendisks refered from hwif, we keep these pointers
in relevant drives.  Cleaned up.

drivers/ide/ide-cd.c
drivers/ide/ide-disk.c
drivers/ide/ide-floppy.c
drivers/ide/ide-probe.c
drivers/ide/ide.c
include/linux/ide.h

index 216ec47a2b32ab9e79bffce5619ea5f27708abf0..81ca240c6be50dbdcad59282e35bb29624e1414d 100644 (file)
@@ -2593,9 +2593,8 @@ static int ide_cdrom_register (ide_drive_t *drive, int nslots)
 {
        struct cdrom_info *info = drive->driver_data;
        struct cdrom_device_info *devinfo = &info->devinfo;
-       int minor = (drive->select.b.unit) << PARTN_BITS;
 
-       devinfo->dev = mk_kdev(HWIF(drive)->major, minor);
+       devinfo->dev = mk_kdev(drive->disk->major, drive->disk->first_minor);
        devinfo->ops = &ide_cdrom_dops;
        devinfo->mask = 0;
        *(int *)&devinfo->speed = CDROM_STATE_FLAGS (drive)->current_speed;
@@ -2622,7 +2621,8 @@ static int ide_cdrom_register (ide_drive_t *drive, int nslots)
                devinfo->mask |= CDC_CLOSE_TRAY;
 
        devinfo->de = devfs_register(drive->de, "cd", DEVFS_FL_DEFAULT,
-                                    HWIF(drive)->major, minor,
+                                    drive->disk->major,
+                                    drive->disk->first_minor,
                                     S_IFBLK | S_IRUGO | S_IWUGO,
                                     ide_fops, NULL);
 
@@ -2823,13 +2823,12 @@ int ide_cdrom_setup (ide_drive_t *drive)
 {
        struct cdrom_info *info = drive->driver_data;
        struct cdrom_device_info *cdi = &info->devinfo;
-       int minor = drive->select.b.unit << PARTN_BITS;
        int nslots;
 
        /*
         * default to read-only always and fix latter at the bottom
         */
-       set_device_ro(mk_kdev(HWIF(drive)->major, minor), 1);
+       set_device_ro(mk_kdev(drive->disk->major, drive->disk->first_minor), 1);
        blk_queue_hardsect_size(&drive->queue, CD_FRAMESIZE);
 
        blk_queue_prep_rq(&drive->queue, ll_10byte_cmd_build);
@@ -2951,7 +2950,7 @@ int ide_cdrom_setup (ide_drive_t *drive)
        nslots = ide_cdrom_probe_capabilities (drive);
 
        if (CDROM_CONFIG_FLAGS(drive)->dvd_ram)
-               set_device_ro(mk_kdev(HWIF(drive)->major, minor), 0);
+               set_device_ro(mk_kdev(drive->disk->major, drive->disk->first_minor), 0);
 
        if (ide_cdrom_register (drive, nslots)) {
                printk ("%s: ide_cdrom_setup failed to register device with the cdrom driver.\n", drive->name);
@@ -2998,8 +2997,8 @@ void ide_cdrom_release (struct inode *inode, struct file *file,
 static
 int ide_cdrom_check_media_change (ide_drive_t *drive)
 {
-       return cdrom_media_changed(mk_kdev(HWIF (drive)->major,
-                       (drive->select.b.unit) << PARTN_BITS));
+       return cdrom_media_changed(mk_kdev(drive->disk->major,
+                       drive->disk->first_minor));
 }
 
 static
@@ -3025,9 +3024,7 @@ int ide_cdrom_cleanup(ide_drive_t *drive)
 {
        struct cdrom_info *info = drive->driver_data;
        struct cdrom_device_info *devinfo = &info->devinfo;
-       ide_hwif_t *hwif = HWIF(drive);
-       int unit = drive - hwif->drives;
-       struct gendisk *g = hwif->gd[unit];
+       struct gendisk *g = drive->disk;
 
        if (ide_unregister_subdriver (drive))
                return 1;
@@ -3092,9 +3089,7 @@ MODULE_DESCRIPTION("ATAPI CD-ROM Driver");
 static int ide_cdrom_reinit (ide_drive_t *drive)
 {
        struct cdrom_info *info;
-       ide_hwif_t *hwif = HWIF(drive);
-       int unit = drive - hwif->drives;
-       struct gendisk *g = hwif->gd[unit];
+       struct gendisk *g = drive->disk;
        struct request_sense sense;
 
        if (!strstr("ide-cdrom", drive->driver_req))
index 144c0bb951554a3233aae8490e8ee31bd2706662..e8040b7626f7f2c71c2ee1b37a202c8dfd376e25 100644 (file)
@@ -1618,9 +1618,7 @@ static void idedisk_setup (ide_drive_t *drive)
 
 static int idedisk_cleanup (ide_drive_t *drive)
 {
-       ide_hwif_t *hwif = HWIF(drive);
-       int unit = drive - hwif->drives;
-       struct gendisk *g = hwif->gd[unit];
+       struct gendisk *g = drive->disk;
        if ((drive->id->cfs_enable_2 & 0x3000) && drive->wcache)
                if (do_idedisk_flushcache(drive))
                        printk (KERN_INFO "%s: Write Cache FAILED Flushing!\n",
@@ -1672,9 +1670,7 @@ MODULE_DESCRIPTION("ATA DISK Driver");
 
 static int idedisk_reinit(ide_drive_t *drive)
 {
-       ide_hwif_t *hwif = HWIF(drive);
-       int unit = drive - hwif->drives;
-       struct gendisk *g = hwif->gd[unit];
+       struct gendisk *g = drive->disk;
 
        /* strstr("foo", "") is non-NULL */
        if (!strstr("ide-disk", drive->driver_req))
index 5e2ca16310fa3455ba3f768f86ba3bf31446cc83..c20115bc35f1c0364b686bc0e7039690176be3c1 100644 (file)
@@ -2112,9 +2112,7 @@ static void idefloppy_setup (ide_drive_t *drive, idefloppy_floppy_t *floppy)
 static int idefloppy_cleanup (ide_drive_t *drive)
 {
        idefloppy_floppy_t *floppy = drive->driver_data;
-       ide_hwif_t *hwif = HWIF(drive);
-       int unit = drive - hwif->drives;
-       struct gendisk *g = hwif->gd[unit];
+       struct gendisk *g = drive->disk;
 
        if (ide_unregister_subdriver (drive))
                return 1;
@@ -2181,9 +2179,7 @@ static ide_driver_t idefloppy_driver = {
 static int idefloppy_reinit (ide_drive_t *drive)
 {
        idefloppy_floppy_t *floppy;
-       ide_hwif_t *hwif = HWIF(drive);
-       int unit = drive - hwif->drives;
-       struct gendisk *g = hwif->gd[unit];
+       struct gendisk *g = drive->disk;
        if (!strstr("ide-floppy", drive->driver_req))
                goto failed;
        if (!drive->present)
index 50e98a9e606639f0dbd16b1404a9118aa28bb76d..47336c9d408ebee8633c3627cf98710456c1f20d 100644 (file)
@@ -848,7 +848,7 @@ static void init_gendisk (ide_hwif_t *hwif)
                gd[unit].major_name = names + 4*unit;
                gd[unit].minor_shift = PARTN_BITS; 
                gd[unit].fops = ide_fops;
-               hwif->gd[unit] = gd + unit;
+               hwif->drives[unit].disk = gd + unit;
        }
 
        for (unit = 0; unit < units; ++unit) {
index 08950237c5d65880f5526af725cda9e8977a4ed2..52472f955262ef9c12827ad07bf2eb1d6bd21467 100644 (file)
@@ -1748,10 +1748,7 @@ int ide_do_drive_cmd (ide_drive_t *drive, struct request *rq, ide_action_t actio
 
 void ide_revalidate_drive (ide_drive_t *drive)
 {
-       ide_hwif_t *hwif = HWIF(drive);
-       int unit = drive - hwif->drives;
-       struct gendisk *g = hwif->gd[unit];
-       g->part[0].nr_sects = current_capacity(drive);
+       drive->disk->part[0].nr_sects = current_capacity(drive);
 }
 
 /*
@@ -2058,13 +2055,13 @@ void ide_unregister (unsigned int index)
        blk_dev[hwif->major].data = NULL;
        blk_dev[hwif->major].queue = NULL;
        blk_clear(hwif->major);
-       gd = hwif->gd[0];
+       gd = hwif->drives[0].disk;
        if (gd) {
                int i;
                kfree(gd->part);
                kfree(gd);
                for (i = 0; i < MAX_DRIVES; i++)
-                       hwif->gd[i] = NULL;
+                       hwif->drives[i].disk = NULL;
        }
        old_hwif                = *hwif;
        init_hwif_data (index); /* restore hwif data to pristine status */
index aacdaad8f594b57f908809049fa158380609e293..501b97902799f0315bf5f64332ca6a444d1c7969 100644 (file)
@@ -530,6 +530,7 @@ typedef struct ide_drive_s {
        unsigned int    failures;       /* current failure count */
        unsigned int    max_failures;   /* maximum allowed failure count */
        struct list_head list;
+       struct gendisk *disk;
 } ide_drive_t;
 
 /*
@@ -716,7 +717,6 @@ typedef struct hwif_s {
  */
        hw_regs_t       hw;             /* Hardware info */
        ide_drive_t     drives[MAX_DRIVES];     /* drive info */
-       struct gendisk  *gd[MAX_DRIVES];/* gendisk structure */
        int             addressing;     /* hosts addressing */
        void            (*tuneproc)(ide_drive_t *, byte);       /* routine to tune PIO mode for drives */
        int             (*speedproc)(ide_drive_t *, byte);      /* routine to retune DMA modes for drives */