summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>2005-10-28 21:41:42 +0000
committersos <sos@FreeBSD.org>2005-10-28 21:41:42 +0000
commitbed22d7cab753360153b01e18e081ebdb4835596 (patch)
tree05886ee3a3854d7dfa987ebe9b0c8cd5f6737506 /sys/dev
parent67f1b851d48114338d5fe3f1d2dde11599cfb6de (diff)
downloadFreeBSD-src-bed22d7cab753360153b01e18e081ebdb4835596.zip
FreeBSD-src-bed22d7cab753360153b01e18e081ebdb4835596.tar.gz
Return the right format (LBA/MSF) in TOC entries.
Null the TOC on media change even if no media present. Reported by: des
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/ata/atapi-cd.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/sys/dev/ata/atapi-cd.c b/sys/dev/ata/atapi-cd.c
index 417a4dc..f2618fd 100644
--- a/sys/dev/ata/atapi-cd.c
+++ b/sys/dev/ata/atapi-cd.c
@@ -337,9 +337,11 @@ acd_geom_ioctl(struct g_provider *pp, u_long cmd, void *addr, int fflag, struct
bcopy(&cdp->toc, toc, sizeof(struct toc));
entry = toc->tab + (toc->hdr.ending_track + 1 -
toc->hdr.starting_track) + 1;
- while (--entry >= toc->tab)
+ while (--entry >= toc->tab) {
lba2msf(ntohl(entry->addr.lba), &entry->addr.msf.minute,
&entry->addr.msf.second, &entry->addr.msf.frame);
+ entry->addr_type = CD_MSF_FORMAT;
+ }
}
error = copyout(toc->tab + starting_track - toc->hdr.starting_track,
te->data, len);
@@ -940,17 +942,17 @@ acd_read_toc(device_t dev)
int8_t ccb[16];
int track, ntracks, len;
- if (acd_test_ready(dev))
- return;
-
if (!(atadev->flags & ATA_D_MEDIA_CHANGED))
return;
atadev->flags &= ~ATA_D_MEDIA_CHANGED;
bzero(&cdp->toc, sizeof(cdp->toc));
- bzero(ccb, sizeof(ccb));
cdp->disk_size = -1; /* hack for GEOM SOS */
+ if (acd_test_ready(dev))
+ return;
+
+ bzero(ccb, sizeof(ccb));
len = sizeof(struct ioc_toc_header) + sizeof(struct cd_toc_entry);
ccb[0] = ATAPI_READ_TOC;
ccb[7] = len>>8;
OpenPOWER on IntegriCloud