From c3bf92aa58711a79372f74b05f1873f9cd6ff74f Mon Sep 17 00:00:00 2001 From: Nate Lawson Date: Sat, 23 Nov 2002 22:51:50 +0000 Subject: [PATCH] Allow acd(4) and cd(4) to support old behavior for CDRIOC*SPEED ioctls. If the value from the user is less than 177, assume it is a multiple of a single speed CDROM and convert to KB/sec. No complaints from: sos Reviewed by: ken Approved by: re MFC after: 1 day --- sys/cam/scsi/scsi_cd.c | 6 ++++++ sys/dev/ata/atapi-cd.c | 17 +++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/sys/cam/scsi/scsi_cd.c b/sys/cam/scsi/scsi_cd.c index 3984f776104f..c5be698300b0 100644 --- a/sys/cam/scsi/scsi_cd.c +++ b/sys/cam/scsi/scsi_cd.c @@ -2976,6 +2976,12 @@ cdsetspeed(struct cam_periph *periph, u_int32_t rdspeed, u_int32_t wrspeed) ccb = cdgetccb(periph, /* priority */ 1); csio = &ccb->csio; + /* Preserve old behavior: units in multiples of CDROM speed */ + if (rdspeed < 177) + rdspeed *= 177; + if (wrspeed < 177) + wrspeed *= 177; + cam_fill_csio(csio, /* retries */ 1, /* cbfcnp */ cddone, diff --git a/sys/dev/ata/atapi-cd.c b/sys/dev/ata/atapi-cd.c index d3bcd60dbced..667bdd203286 100644 --- a/sys/dev/ata/atapi-cd.c +++ b/sys/dev/ata/atapi-cd.c @@ -1021,11 +1021,24 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td) break; case CDRIOCREADSPEED: - error = acd_set_speed(cdp, *(int *)addr, CDR_MAX_SPEED); + { + int speed = *(int *)addr; + + /* Preserve old behavior: units in multiples of CDROM speed */ + if (speed < 177) + speed *= 177; + error = acd_set_speed(cdp, speed, CDR_MAX_SPEED); + } break; case CDRIOCWRITESPEED: - error = acd_set_speed(cdp, CDR_MAX_SPEED, *(int *)addr); + { + int speed = *(int *)addr; + + if (speed < 177) + speed *= 177; + error = acd_set_speed(cdp, CDR_MAX_SPEED, speed); + } break; case CDRIOCGETBLOCKSIZE: