summaryrefslogtreecommitdiffstats
path: root/sys/dev/ata/atapi-cd.c
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>2000-01-25 20:14:51 +0000
committersos <sos@FreeBSD.org>2000-01-25 20:14:51 +0000
commitb5f4230b5557aa4ebed715b6fad6b54a2186ab6f (patch)
treec8153c4597fb6ad210c5e15ab8babe0f6b001834 /sys/dev/ata/atapi-cd.c
parentf89d1d8b6d89f552c70c95ff524a040e0eefd4b3 (diff)
downloadFreeBSD-src-b5f4230b5557aa4ebed715b6fad6b54a2186ab6f.zip
FreeBSD-src-b5f4230b5557aa4ebed715b6fad6b54a2186ab6f.tar.gz
Retry a bit more agressively on the atapi identify.
Try to support older systems reporting irq0 for the first channels. Support sharing of the std interrupts (says peter :) ) Dont use READ_CD on normal data reads (2048 bytes), too many old drives doesn't support this command even if the std says "shall" :(, but still use READ_CD on all other blocksizes. Add the geometry to the ad probe, its still usefull.
Diffstat (limited to 'sys/dev/ata/atapi-cd.c')
-rw-r--r--sys/dev/ata/atapi-cd.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/sys/dev/ata/atapi-cd.c b/sys/dev/ata/atapi-cd.c
index d6e550b..5e5f4c2 100644
--- a/sys/dev/ata/atapi-cd.c
+++ b/sys/dev/ata/atapi-cd.c
@@ -409,7 +409,7 @@ acd_describe(struct acd_softc *cdp)
if (cdp->changer_info)
sprintf(changer, " with %d CD changer", cdp->changer_info->slots);
- printf("acd%d: %s%s <%.40s> at ata%d as %s mode %s\n",
+ printf("acd%d: %s%s <%.40s> at ata%d-%s using %s\n",
cdp->lun, (cdp->cap.write_dvdr) ? "DVD-R" :
(cdp->cap.write_dvdram) ? "DVD-RAM" :
(cdp->cap.write_cdrw) ? "CD-RW" :
@@ -1094,8 +1094,12 @@ acd_start(struct acd_softc *cdp)
lba = bp->b_blkno / (cdp->block_size / DEV_BSIZE);
if (bp->b_flags & B_READ) {
- ccb[0] = ATAPI_READ_CD;
- ccb[9] = 0x10; /* read user data only */
+ if (cdp->block_size == 2048)
+ ccb[0] = ATAPI_READ_BIG;
+ else {
+ ccb[0] = ATAPI_READ_CD;
+ ccb[9] = 0x10;
+ }
}
else
ccb[0] = ATAPI_WRITE_BIG;
OpenPOWER on IntegriCloud