summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Viro <viro@math.psu.edu>2002-09-07 03:05:04 -0700
committerLinus Torvalds <torvalds@home.transmeta.com>2002-09-07 03:05:04 -0700
commit07586b3328bc910bf2cc4c25f7eb2dea7555a69c (patch)
tree47bbb5502ba5ca36ab896f5d939163096342f67d
parentc276ff4dedec514865c082f28c1becc3ae051bad (diff)
[PATCH] (23/25) move pointer to gendisk from hwif to drive
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.
-rw-r--r--drivers/ide/ide-cd.c23
-rw-r--r--drivers/ide/ide-disk.c8
-rw-r--r--drivers/ide/ide-floppy.c8
-rw-r--r--drivers/ide/ide-probe.c2
-rw-r--r--drivers/ide/ide.c9
-rw-r--r--include/linux/ide.h2
6 files changed, 18 insertions, 34 deletions
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
index 216ec47a2b32..81ca240c6be5 100644
--- a/drivers/ide/ide-cd.c
+++ b/drivers/ide/ide-cd.c
@@ -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))
diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c
index 144c0bb95155..e8040b7626f7 100644
--- a/drivers/ide/ide-disk.c
+++ b/drivers/ide/ide-disk.c
@@ -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))
diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index 5e2ca16310fa..c20115bc35f1 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -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)
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
index 50e98a9e6066..47336c9d408e 100644
--- a/drivers/ide/ide-probe.c
+++ b/drivers/ide/ide-probe.c
@@ -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) {
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index 08950237c5d6..52472f955262 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -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 */
diff --git a/include/linux/ide.h b/include/linux/ide.h
index aacdaad8f594..501b97902799 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -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 */