int present; /* does this unit exist ? */
char *name; /* pcd0, pcd1, etc */
struct cdrom_device_info info; /* uniform cdrom interface */
+ struct gendisk disk;
};
struct pcd_unit pcd[PCD_UNITS];
pcd_drive_count = 0;
for (unit = 0, cd = pcd; unit < PCD_UNITS; unit++, cd++) {
+ struct gendisk *disk = &cd->disk;
cd->pi = &cd->pia;
cd->present = 0;
cd->last_sense = 0;
cd->info.speed = 0;
cd->info.capacity = 1;
cd->info.mask = 0;
+ disk->major = major;
+ disk->first_minor = unit;
+ disk->minor_shift = 0;
+ disk->major_name = cd->name;
+ disk->fops = &pcd_bdops;
}
}
for (unit = 0, cd = pcd; unit < PCD_UNITS; unit++, cd++) {
if (cd->present) {
+ struct gendisk *disk = &cd->disk;
register_cdrom(&cd->info);
- devfs_plain_cdrom(&cd->info, &pcd_bdops);
+ devfs_plain_cdrom(&cd->info, disk->fops);
+ add_gendisk(disk);
+ register_disk(disk,
+ mk_kdev(disk->major,disk->first_minor),
+ 1<<disk->minor_shift,
+ disk->fops,
+ 0);
}
}
for (unit = 0, cd = pcd; unit < PCD_UNITS; unit++, cd++) {
if (cd->present) {
+ del_gendisk(&cd->disk);
pi_release(cd->pi);
unregister_cdrom(&cd->info);
}