diff options
author | sos <sos@FreeBSD.org> | 2001-10-19 13:34:48 +0000 |
---|---|---|
committer | sos <sos@FreeBSD.org> | 2001-10-19 13:34:48 +0000 |
commit | a96bb8dac0ee0436a8379a6b9567277229522ce8 (patch) | |
tree | 9e7a6fa0579f539ff0e2c35aceaac09f01485be7 | |
parent | 77fafc4065c18115d4620f84b0bced3605e15811 (diff) | |
download | FreeBSD-src-a96bb8dac0ee0436a8379a6b9567277229522ce8.zip FreeBSD-src-a96bb8dac0ee0436a8379a6b9567277229522ce8.tar.gz |
Make an ATAPI CD device appear as /dev/acdN and the individual
tracks as /dev/acdNtY.
This solves the problems with having to deal with howmany and which
devices are open.
For hysterical reasons ONLY, make a link to both the acdNa & acdNc devices.
-rw-r--r-- | sys/dev/ata/atapi-cd.c | 20 | ||||
-rw-r--r-- | sys/dev/ata/atapi-cd.h | 2 |
2 files changed, 8 insertions, 14 deletions
diff --git a/sys/dev/ata/atapi-cd.c b/sys/dev/ata/atapi-cd.c index f03f570..c6ebe06 100644 --- a/sys/dev/ata/atapi-cd.c +++ b/sys/dev/ata/atapi-cd.c @@ -208,8 +208,7 @@ acddetach(struct atapi_softc *atp) while ((bp = bioq_first(&cdp->driver[subdev]->queue))) { biofinish(bp, NULL, ENXIO); } - destroy_dev(cdp->driver[subdev]->dev1); - destroy_dev(cdp->driver[subdev]->dev2); + destroy_dev(cdp->driver[subdev]->dev); while ((entry = TAILQ_FIRST(&cdp->driver[subdev]->dev_list))) { destroy_dev(entry->dev); TAILQ_REMOVE(&cdp->driver[subdev]->dev_list, entry, chain); @@ -226,8 +225,7 @@ acddetach(struct atapi_softc *atp) while ((bp = bioq_first(&cdp->queue))) { biofinish(bp, NULL, ENXIO); } - destroy_dev(cdp->dev1); - destroy_dev(cdp->dev2); + destroy_dev(cdp->dev); while ((entry = TAILQ_FIRST(&cdp->dev_list))) { destroy_dev(entry->dev); TAILQ_REMOVE(&cdp->dev_list, entry, chain); @@ -272,17 +270,13 @@ acd_make_dev(struct acd_softc *cdp) dev_t dev; dev = make_dev(&acd_cdevsw, dkmakeminor(cdp->lun, 0, 0), - UID_ROOT, GID_OPERATOR, 0644, "acd%da", cdp->lun); + UID_ROOT, GID_OPERATOR, 0644, "acd%d", cdp->lun); + make_dev_alias(dev, "acd%da", cdp->lun); + make_dev_alias(dev, "acd%dc", cdp->lun); dev->si_drv1 = cdp; dev->si_iosize_max = 252 * DEV_BSIZE; dev->si_bsize_phys = 2048; /* XXX SOS */ - cdp->dev1 = dev; - dev = make_dev(&acd_cdevsw, dkmakeminor(cdp->lun, 0, RAW_PART), - UID_ROOT, GID_OPERATOR, 0644, "acd%dc", cdp->lun); - dev->si_drv1 = cdp; - dev->si_iosize_max = 252 * DEV_BSIZE; - dev->si_bsize_phys = 2048; /* XXX SOS */ - cdp->dev2 = dev; + cdp->dev = dev; cdp->atp->flags |= ATAPI_F_MEDIA_CHANGED; } @@ -1310,7 +1304,7 @@ acd_read_toc(struct acd_softc *cdp) entry = malloc(sizeof(struct acd_devlist), M_ACD, M_NOWAIT | M_ZERO); entry->dev = make_dev(&acd_cdevsw, (cdp->lun << 3) | (track << 16), 0, 0, 0644, name, NULL); - entry->dev->si_drv1 = cdp->dev1->si_drv1; + entry->dev->si_drv1 = cdp->dev->si_drv1; TAILQ_INSERT_TAIL(&cdp->dev_list, entry, chain); } diff --git a/sys/dev/ata/atapi-cd.h b/sys/dev/ata/atapi-cd.h index 8ba4d98..364fb3c 100644 --- a/sys/dev/ata/atapi-cd.h +++ b/sys/dev/ata/atapi-cd.h @@ -335,5 +335,5 @@ struct acd_softc { int block_size; /* blocksize currently used */ struct disklabel disklabel; /* fake disk label */ struct devstat *stats; /* devstat entry */ - dev_t dev1, dev2; /* device place holders */ + dev_t dev; /* device place holders */ }; |