Module Name:src
Committed By: snj
Date: Wed Apr 8 23:02:16 UTC 2009
Modified Files:
src/sys/dev/scsipi [netbsd-5]: cd.c scsipi_cd.h
Log Message:
Pull up following revision(s) (requested by reinoud in ticket #633):
sys/dev/scsipi/cd.c: revision 1.291
sys/dev/scsipi/scsipi_cd.h: revision 1.21
Implement MMC_TRACKINFO_DATA and MMC_TRACKINFO_AUDIO detection for cdrom and
dvdrom devices. These two compatibility codes were forgotten when those were
introduced.
To generate a diff of this commit:
cvs rdiff -u -r1.283.4.1 -r1.283.4.2 src/sys/dev/scsipi/cd.c
cvs rdiff -u -r1.20 -r1.20.4.1 src/sys/dev/scsipi/scsipi_cd.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/scsipi/cd.c
diff -u src/sys/dev/scsipi/cd.c:1.283.4.1 src/sys/dev/scsipi/cd.c:1.283.4.2
--- src/sys/dev/scsipi/cd.c:1.283.4.1 Tue Mar 24 20:16:58 2009
+++ src/sys/dev/scsipi/cd.c Wed Apr 8 23:02:15 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: cd.c,v 1.283.4.1 2009/03/24 20:16:58 snj Exp $ */
+/* $NetBSD: cd.c,v 1.283.4.2 2009/04/08 23:02:15 snj Exp $ */
/*-
* Copyright (c) 1998, 2001, 2003, 2004, 2005, 2008 The NetBSD Foundation,
@@ -50,7 +50,7 @@
*/
#include sys/cdefs.h
-__KERNEL_RCSID(0, $NetBSD: cd.c,v 1.283.4.1 2009/03/24 20:16:58 snj Exp $);
+__KERNEL_RCSID(0, $NetBSD: cd.c,v 1.283.4.2 2009/04/08 23:02:15 snj Exp $);
#include rnd.h
@@ -3174,7 +3174,7 @@
const uint32_t buffer_size = 4 * 1024; /* worst case TOC estimate */
uint8_t *buffer;
uint8_t track_sessionnr, last_tracknr, sessionnr, adr, tno, point;
- uint8_t tmin, tsec, tframe, pmin, psec, pframe;
+ uint8_t control, tmin, tsec, tframe, pmin, psec, pframe;
int size, req_size;
int error, flags;
@@ -3218,6 +3218,7 @@
/* read in complete raw toc */
req_size = _2btol(toc_hdr-length);
+ req_size = 2*((req_size + 1) / 2); /* for ATAPI */
_lto2b(req_size, gtoc_cmd.data_len);
error = scsipi_command(periph,
@@ -3248,6 +3249,7 @@
tno = rawtoc-tno;
sessionnr = rawtoc-sessionnr;
adr = rawtoc-adrcontrol 4;
+ control = rawtoc-adrcontrol 0xf;
point = rawtoc-point;
tmin = rawtoc-min;
tsec = rawtoc-sec;
@@ -3285,6 +3287,14 @@
}
}
+ if ((control (32)) == 4) /* 01xxb */
+ flags |= MMC_TRACKINFO_DATA;
+ if ((control (12)) == 0) { /* x0xxb */
+ flags |= MMC_TRACKINFO_AUDIO;
+ if (control 1) /* xxx1b */
+flags |= MMC_TRACKINFO_PRE_EMPH;
+ }
+
rawtoc++;
size -= sizeof(struct scsipi_toc_rawtoc);
}
@@ -3344,7 +3354,7 @@
uint32_t lba, lead_out;
const uint32_t buffer_size = 4 * 1024; /* worst case TOC estimate */
uint8_t *buffer;
- uint8_t last_tracknr;
+ uint8_t control, last_tracknr;
int size, req_size;
int error, flags;
@@ -3410,12 +3420,15 @@
track_start = 0;
track_size = 0;
lead_out = 0;
+ flags= 0;
size = req_size - sizeof(struct scsipi_toc_header) + 1;
while (size 0) {
/* remember, DVD-ROM: tracknr == sessionnr */
lba = _4btol(toc-msf_lba);
tracknr = toc-tracknr;
+ control = toc-adrcontrol 0xf;
+
if (trackinfo-tracknr == tracknr) {
track_start = lba;
}
@@ -3426,6 +3439,17 @@
if (tracknr == 0xAA) {
lead_out = lba;
}
+
+ if ((control (32)) == 4) /* 01xxb */
+ flags |= MMC_TRACKINFO_DATA;
+ if ((control (12)) == 0) { /* x0xxb */
+ flags |= MMC_TRACKINFO_AUDIO;
+ if (control (13)) /* 10xxb */
+flags |= MMC_TRACKINFO_AUDIO_4CHAN;
+ if (control 1) /* xxx1b */
+flags |= MMC_TRACKINFO_PRE_EMPH;
+ }
+
toc++;
size -= sizeof(struct scsipi_toc_formatted);
}
@@ -3439,7 +3463,7 @@
trackinfo-track_mode = 0; /* unknown */
trackinfo-data_mode = 8; /* 2048 bytes mode1 */
- trackinfo-flags = 0;
+ trackinfo-flags = flags;
trackinfo-track_start = track_start;
trackinfo-next_writable = 0;
trackinfo-free_blocks = 0;
Index: src/sys/dev/scsipi/scsipi_cd.h
diff -u src/sys/dev/scsipi/scsipi_cd.h:1.20 src/sys/dev/scsipi/scsipi_cd.h:1.20.4.1
--- src/sys/dev/scsipi/scsipi_cd.h:1.20 Mon Sep 8 23:36:54 2008
+++ src/sys/dev/scsipi/scsipi_cd.h Wed Apr 8 23:02:15 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: scsipi_cd.h,v 1.20 2008/09/08 23:36:54 gmcgarry Exp $ */
+/* $NetBSD: scsipi_cd.h,v 1.20.4.1 2009/04/08 23:02:15 snj Exp $ */
/*
* Written by Julian Elischer (jul...@tfs.com)
@@ -115,7 +115,7 @@
/* read TOC form 0 result entries */
struct scsipi_toc_formatted {
uint8_t unused1;
- uint8_t adrcontol;
+ uint8_t adrcontrol;
uint8_t tracknr;
uint8_t unused2;
uint8_t msf_lba[4]; /* union msf_lba from cdio.h */