diff options
author | sos <sos@FreeBSD.org> | 2000-01-25 20:14:51 +0000 |
---|---|---|
committer | sos <sos@FreeBSD.org> | 2000-01-25 20:14:51 +0000 |
commit | b5f4230b5557aa4ebed715b6fad6b54a2186ab6f (patch) | |
tree | c8153c4597fb6ad210c5e15ab8babe0f6b001834 /sys/dev/ata/atapi-cd.c | |
parent | f89d1d8b6d89f552c70c95ff524a040e0eefd4b3 (diff) | |
download | FreeBSD-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.c | 10 |
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; |