cdrom_read_toc(drive, &sense);
g->minor_shift = 0;
+ /* probably bogus, but that's the old behaviour */
+ g->de_arr[0] = NULL;
+ g->flags = 0;
add_gendisk(g);
register_disk(g, mk_kdev(g->major,g->first_minor),
1<<g->minor_shift, ide_fops,
static void idedisk_setup (ide_drive_t *drive)
{
- int i;
-
struct hd_driveid *id = drive->id;
unsigned long capacity;
drive->doorlocking = 1;
}
}
- for (i = 0; i < MAX_DRIVES; ++i) {
- ide_hwif_t *hwif = HWIF(drive);
-
- if (drive != &hwif->drives[i]) continue;
- hwif->gd[i]->de_arr[i] = drive->de;
- if (drive->removable)
- hwif->gd[i]->flags[i] |= GENHD_FL_REMOVABLE;
- break;
- }
#if 1
(void) probe_lba_addressing(drive, 1);
}
DRIVER(drive)->busy--;
g->minor_shift = PARTN_BITS;
+ g->de_arr[0] = drive->de;
+ g->flags = drive->removable ? GENHD_FL_REMOVABLE : 0;
add_gendisk(g);
register_disk(g, mk_kdev(g->major,g->first_minor),
1<<g->minor_shift, ide_fops,
static void idefloppy_setup (ide_drive_t *drive, idefloppy_floppy_t *floppy)
{
struct idefloppy_id_gcw gcw;
- int i;
*((unsigned short *) &gcw) = drive->id->config;
drive->driver_data = floppy;
(void) idefloppy_get_capacity (drive);
idefloppy_add_settings(drive);
- for (i = 0; i < MAX_DRIVES; ++i) {
- ide_hwif_t *hwif = HWIF(drive);
-
- if (drive != &hwif->drives[i]) continue;
- hwif->gd[i]->de_arr[i] = drive->de;
- if (drive->removable)
- hwif->gd[i]->flags[i] |= GENHD_FL_REMOVABLE;
- break;
- }
}
static int idefloppy_cleanup (ide_drive_t *drive)
idefloppy_setup (drive, floppy);
DRIVER(drive)->busy--;
g->minor_shift = PARTN_BITS;
+ g->de_arr[0] = drive->de;
+ g->flags = drive->removable ? GENHD_FL_REMOVABLE : 0;
add_gendisk(g);
register_disk(g, mk_kdev(g->major,g->first_minor),
1<<g->minor_shift, ide_fops,
struct gendisk *gd;
struct hd_struct *part;
devfs_handle_t *de_arr;
- char *flags;
unsigned int unit, units, minors;
extern devfs_handle_t ide_devfs_handle;
char *names;
goto err_kmalloc_gd_de_arr;
memset(de_arr, 0, sizeof(devfs_handle_t) * MAX_DRIVES);
- flags = kmalloc(sizeof(char) * MAX_DRIVES, GFP_KERNEL);
- if (!flags)
- goto err_kmalloc_gd_flags;
- memset(flags, 0, sizeof(char) * MAX_DRIVES);
-
names = kmalloc (4 * MAX_DRIVES, GFP_KERNEL);
if (!names)
goto err_kmalloc_gd_names;
for (unit = 0; unit < units; ++unit) {
gd[unit].part = part + (unit << PARTN_BITS);
gd[unit].de_arr = de_arr + unit;
- gd[unit].flags = flags + unit;
hwif->drives[unit].part = gd[unit].part;
gd[unit].major = hwif->major;
gd[unit].first_minor = unit << PARTN_BITS;
return;
err_kmalloc_gd_names:
- kfree(names);
-err_kmalloc_gd_flags:
kfree(de_arr);
err_kmalloc_gd_de_arr:
kfree(part);
kfree(gd->part);
if (gd->de_arr)
kfree (gd->de_arr);
- if (gd->flags)
- kfree (gd->flags);
kfree(gd);
for (i = 0; i < MAX_DRIVES; i++)
hwif->gd[i] = NULL;
int major;
struct gendisk disks[DASD_PER_MAJOR];
devfs_handle_t de_arr[DASD_PER_MAJOR];
- char flags[DASD_PER_MAJOR];
char names[DASD_PER_MAJOR * 8];
struct hd_struct part[1<<MINORBITS];
};
disk->minor_shift = DASD_PARTN_BITS;
disk->fops = &dasd_device_operations;
disk->de_arr = mi->de_arr + i;
- disk->flags = mi->flags + i;
disk->part = mi->part + (i << DASD_PARTN_BITS);
}
struct gendisk disk;
devfs_handle_t de;
struct device *dev;
- char flags;
char name[5];
} *p;
struct gendisk *gd;
return 1;
gd = &p->disk;
gd->de_arr = &p->de;
- gd->flags = &p->flags;
gd->driverfs_dev_arr = &p->dev;
SCSI_LOG_HLQUEUE(3, printk("sd_attach: scsi device: <%d,%d,%d,%d>\n",
else
sprintf(p->name, "sd%c", 'a'+dsk_nr%26);
gd->major_name = p->name;
- if (sdp->removable)
- gd->flags[0] |= GENHD_FL_REMOVABLE;
+ gd->flags = sdp->removable ? GENHD_FL_REMOVABLE : 0;
sd_disks[dsk_nr] = gd;
sd_dskname(dsk_nr, diskname);
printk(KERN_NOTICE "Attached scsi %sdisk %s at scsi%d, channel %d, "
dir = devfs_get_parent(p[0].de);
if (!dir)
return;
- if ( dev->flags && (dev->flags[0] & GENHD_FL_REMOVABLE) )
+ if (dev->flags & GENHD_FL_REMOVABLE)
devfs_flags |= DEVFS_FL_REMOVABLE;
sprintf (devname, "part%d", part);
p[part].de = devfs_register (dir, devname, devfs_flags,
if (p[0].de)
return;
- if ( dev->flags && (dev->flags[0] & GENHD_FL_REMOVABLE) )
+ if (dev->flags & GENHD_FL_REMOVABLE)
devfs_flags |= DEVFS_FL_REMOVABLE;
if (dev->de_arr) {
dir = dev->de_arr[0];
devfs_handle_t *de_arr; /* one per physical disc */
struct device **driverfs_dev_arr;/* support driverfs hierarchy */
- char *flags; /* one per physical disc */
+ int flags;
};
/* drivers/block/genhd.c */