From owner-FreeBSD-users-jp@jp.FreeBSD.org Sun Dec 23 12:48:14 2001
Received: (from daemon@localhost)
	by castle.jp.FreeBSD.org (8.11.6+3.4W/8.11.3) id fBN3mEu91933;
	Sun, 23 Dec 2001 12:48:14 +0900 (JST)
	(envelope-from owner-FreeBSD-users-jp@jp.FreeBSD.org)
Received: from pop13.dreamnet.ne.jp (smtp13.dreamnet.ne.jp [202.217.109.119])
	by castle.jp.FreeBSD.org (8.11.6+3.4W/8.11.3) with ESMTP/inet id fBN3mEH91928
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Sun, 23 Dec 2001 12:48:14 +0900 (JST)
	(envelope-from chi@bd.mbn.or.jp)
Received: from chino.localhost ([210.144.226.38]) by pop13.dreamnet.ne.jp
          with ESMTP
          id <20011223034812.KGAS769.pop13.dreamnet.ne.jp@chino.localhost>
          for <FreeBSD-users-jp@jp.FreeBSD.org>;
          Sun, 23 Dec 2001 12:48:12 +0900
Posted-Date: Sat, 22 Dec 2001 20:59:59 JST
To: FreeBSD-users-jp@jp.FreeBSD.org
In-Reply-To: Your message of "Thu, 20 Dec 2001 03:58:38 +0900 (JST)".
	<20011220.035838.74758131.nishinao@m3.kcn.ne.jp>
From: chi@bd.mbn.or.jp (Chiharu Shibata)
X-Mailer: mnews [version 1.22] 1999-12/19(Sun)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="-=-mnews-multipart-=-"
Message-Id: <20011223034812.KGAS769.pop13.dreamnet.ne.jp@chino.localhost>
Date: Sun, 23 Dec 2001 12:48:14 +0900
Reply-To: FreeBSD-users-jp@jp.FreeBSD.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+011218
X-Sequence: FreeBSD-users-jp 66148
Subject: [FreeBSD-users-jp 66148] Re: CD-Extra
	=?ISO-2022-JP?B?GyRCJE4bKEI=?= audio track
	=?ISO-2022-JP?B?GyRCNVs9UCQ3GyhC?= 
Errors-To: owner-FreeBSD-users-jp@jp.FreeBSD.org
Sender: owner-FreeBSD-users-jp@jp.FreeBSD.org
X-Originator: chi@bd.mbn.or.jp


---=-mnews-multipart-=-
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

$B$3$s$K$A$O!"<FED$G$9!#OC$NN.$l$NET9g>e!"0zMQ=g=x$rJQ$($F$^$9!#(B
Thu, 20 Dec 2001 03:58:38 JST$B$K(B
nishinao@m3.kcn.ne.jp$B$5$s$O=q$-$^$7$?!#(B

>acd0: <RICOH DVD/CDRW MP9060/1.90> CD-RW drive at ata1 as slave
-snip-
>$B$H$$$&%I%i%$%V$H%G%#%9%/$r;H$$%Q%C%AL5$7$G:F@8$G$-$^$7$?$,!"%9%F!<%?%9$,(B
>
>Audio status = 17<playing>, current track = 15, current position = 4:36.00
>Audio status = 20<error>, current track = 170, current position = 0:12.32
>Audio status = 21<void>, current track = 170, current position = 0:12.51
>
>$B$H$$$&Iw$KJQ2=$7$^$9!#IaDL$N(BCD$B$N$h$&$K@5$7$$=*N;0LCV$r;XDj$9$k$H(B
>
>Audio status = 17<playing>, current track = 15, current position = 4:36.12
>Audio status = 19<completed>, current track = 170, current position = 0:02.39
>Audio status = 21<void>, current track = 170, current position = 0:02.42
>
>$B$H$J$j$^$9!#(B

$BEvJ}$N%I%i%$%V(B
| acd0: CDROM <CD-ROM CDU76E-NE> at ata1-master using BIOSPIO
$B$O!":F@8HO0O$H$7$F(Bdata$BNN0h$r4^$s$@CM$rEO$7$?=V4V$K(B
| acd0: PLAY_BIG - ILLEGAL REQUEST asc=64 ascq=00 error=04
$B$H$J$C$F:F@8ITG=$G$9!#(B
$B$G!"@5>o$K:F@8$G$-$F$$$k(BCD-ROM$B%I%i%$%V$G$b!">e5-$N$h$&$K(Berror$B%U%'!<%:$r(B
$BDL$C$F$$$k$H$$$&$3$H$+$i!":GDc$G$b@h$N%Q%C%A$G$d$C$F$$$k$h$&$J(Bdata$BNN0h(B
$B$r=|30$9$k=hM}$O$"$C$?$[$&$,$$$$$H;W$$$^$9!#(B

$B$b$A$m$s!V@5$7$$=*N;0LCV!W$r;XDj$G$-$k$K1[$7$?$3$H$O$J$$$N$G!"(B
>$B:G8e$N%*!<%G%#%*%H%i%C%/$ND9$5$,$*$+$7$$$N$O(B FreeBSD $B$,8E$$7A<0$G(B TOC $B$r(B
>$BFI$_=P$7$F$$$k$+$i$G$9!#(B
>#$B%^%k%A%;%C%7%g%s$N%G%#%9%/$G$"$C$F$b%7%s%0%k%;%C%7%g%s$NMM$K3F(BTrack $B$N(B
>#$B3+;O0LCV$H:G=*$N(B Lead-out(Track 170) $B$N0LCV$7$+=q$+$l$F$$$^$;$s!#(B

$B$3$NJU!"$b$&>/$7>\$7$/65$($FD:$1$^$;$s$+!)(B
$B!t$=$&$9$l$P85%M%?$N!V:G=*%H%i%C%/$ND9$5$,JQ!W$H$$$&$N$b2r7h$9$k$7(B

>    cdp->block_size = (cdp->toc.tab[0].control & 4) ? 2048 : 2352;
>
>$B$3$N9T$r%3%a%s%H%"%&%H$9$k$+(B 2048 $B$K7h$aBG$A$9$k$+$G(B mount $B$G$-$k$h$&$K(B
>$B$J$j$^$7$?!#(B

$B3N$+$K(Bmount$B$G$-$^$7$?$,!"$3$l$@$1$@$H(Bacd0t?$B$r;H$C$F<h$j9~$s$@2;3Z%G!<%?(B
$B$N%F%s%]$,B.$/$J$k(B($BB?J,(B2352/2048$BG\(B)$B$H$$$&J@32$,=P$?$N$G!"$b$&>/$7$$$8$C(B
$B$F$_$^$7$?!#E:IU$N%Q%C%A$,$=$l$G$9!#(B
$B0l1~!"(BCD-Extra/$BIaDL$N2;3Z(BCD/CD-ROM$B$=$l$>$l$G!"(Bcdcontrol$B$G$N2;3Z:F@8$H(B
(data$BNN0h$N(B)mount$B5Z$S(Bacd0t?$B$G$N5[$$=P$7$,0U?^DL$j$N7k2L$K$J$C$F$$$^$9!#(B

CD-Extra$B$N>l9g$N(Bcdp->disk_size$B$O$A$g$C$HG:$`$H$3$m$G$9$,!"B>$N$H$3$m$G(B
cdp->disk_size$B$O%G%#%9%/!VA4BN!W$NBg$-$5$,F~$C$F$$$k$H;W$$9~$s$G=hM}$7(B
$B$F$$$k2U=j$,$"$k$N$G!"$H$j$"$($:$=$N$^$^$G$9!#(B

$B$J$*!"E:IU$N%Q%C%A$O(B[FreeBSD-users-jp 65943]$B$G$bOCBj$K$7$?(BATAPI_READ_CD
$B$G$N(Bccb[1]$B%Q%i%a!<%?$r(Bblock read$B;~$b(B0x04$B$K$9$kJQ99$b4^$s$G$^$9!#(B
$B!t$H$$$&$+!"$3$l$,$$$8$C$?$i!"$=$l$^$G(Bacd0t?$B$K%"%/%;%9$9$k$H(B
$B!t(B| acd0: READ_CD - ILLEGAL REQUEST asc=64 ascq=00 error=04
$B!t$G5[$$=P$7ITG=$@$C$?(B<CD-ROM CDU76E-NE>$B$G5[$$=P$;$k$h$&$K$J$C$?$N$G(B

$B%*%^%1!#(B
$B4{$K5$$,IU$$$F$$$kJ}$b$$$i$C$7$c$k$+$H;W$$$^$9$,!"(B<CD-ROM CDU76E-NE>
$B$H$O(BPC-9821Xa7/9/10$BFbB"$N(BCD-ROM$B%I%i%$%V$G$9!#$D$^$j(BFreeBSD(98)$B$G$b(B
$BFbB"(BATAPI$B%I%i%$%V$G2;3Z(BCD$B$N5[$$=P$7$,=PMh$^$9!*(B
-- 
$B<FED(B $B@i=U(B($B!i(B) chi@bd.mbn.or.jp <http://plaza17.mbn.or.jp/~chi/>
---=-mnews-multipart-=-
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Description: atapi-cd.diff
Content-Disposition: attachment; filename="atapi-cd.diff"

--- sys/dev/ata/atapi-cd.c	2001/11/27 11:55:38	1.1
+++ atapi-cd.c	2001/12/21 12:44:01
@@ -1120,21 +1120,23 @@
 
     bzero(ccb, sizeof(ccb));
 
+    track = (bp->b_dev->si_udev & 0x00ff0000) >> 16;
+    if (track)
+	blocksize = (cdp->toc.tab[track - 1].control & 4) ? 2048 : 2352;
+    else
+	blocksize = cdp->block_size;
+
     if (bp->b_flags & B_PHYS)
-	lba = bp->b_offset / cdp->block_size;
+	lba = bp->b_offset / blocksize;
     else
-	lba = bp->b_blkno / (cdp->block_size / DEV_BSIZE);
-    track = (bp->b_dev->si_udev & 0x00ff0000) >> 16;
+	lba = bp->b_blkno / (blocksize / DEV_BSIZE);
 
     if (track) {
-	blocksize = (cdp->toc.tab[track - 1].control & 4) ? 2048 : 2352;
 	lastlba = ntohl(cdp->toc.tab[track].addr.lba);
 	lba += ntohl(cdp->toc.tab[track - 1].addr.lba);
     }
-    else {
-	blocksize = cdp->block_size;
+    else
 	lastlba = cdp->disk_size;
-    }
 
     if (bp->b_bcount % blocksize != 0) {
 	bp->b_error = EINVAL;
@@ -1142,6 +1144,14 @@
     }
     count = bp->b_bcount / blocksize;
 
+    ccb[1] = 0;
+    ccb[2] = lba>>24;
+    ccb[3] = lba>>16;
+    ccb[4] = lba>>8;
+    ccb[5] = lba;
+    ccb[6] = count>>16;
+    ccb[7] = count>>8;
+    ccb[8] = count;
     if (bp->b_flags & B_READ) {
 	/* if transfer goes beyond range adjust it to be within limits */
 	if (lba + count > lastlba) {
@@ -1159,6 +1169,7 @@
 
 	case 2352:
 	    ccb[0] = ATAPI_READ_CD;
+	    ccb[1] = 4;
 	    ccb[9] = 0xf8;
 	    break;
 
@@ -1169,14 +1180,6 @@
     }
     else
 	ccb[0] = ATAPI_WRITE_BIG;
-    ccb[1] = 0;
-    ccb[2] = lba>>24;
-    ccb[3] = lba>>16;
-    ccb[4] = lba>>8;
-    ccb[5] = lba;
-    ccb[6] = count>>16;
-    ccb[7] = count>>8;
-    ccb[8] = count;
 
     devstat_start_transaction(cdp->stats);
 
@@ -1209,7 +1212,7 @@
 static void 
 acd_read_toc(struct acd_softc *cdp)
 {
-    int ntracks, len;
+    int ntracks, len, i;
     int8_t ccb[16];
 
     bzero(&cdp->toc, sizeof(cdp->toc));
@@ -1246,17 +1249,25 @@
     }
     cdp->toc.hdr.len = ntohs(cdp->toc.hdr.len);
 
-    cdp->block_size = (cdp->toc.tab[0].control & 4) ? 2048 : 2352;
+    cdp->block_size = 2352;
+    for (i = 0; i < ntracks; i++) {
+	if (cdp->toc.tab[i].control & 4) {
+	    cdp->block_size = 2048;
+	    break;
+	}
+    }
     cdp->disk_size = ntohl(cdp->toc.tab[cdp->toc.hdr.ending_track].addr.lba);
 
 #ifdef ACD_DEBUG
     if (cdp->disk_size && cdp->toc.hdr.ending_track) { 
 	printf("acd%d: ", cdp->lun);
-	if (cdp->toc.tab[0].control & 4)
+	if (i) {
+	    int audio_size = ntohl(cdp->toc.tab[i].addr.lba);
+	    printf("%d:%d audio ", audio_size / 75 / 60,
+		audio_size / 75 % 60);
+	}
+	if (cdp->block_size == 2048)
 	    printf("%dMB ", cdp->disk_size / 512);
-	else
-	    printf("%d:%d audio ", cdp->disk_size / 75 / 60,
-		cdp->disk_size / 75 % 60);
 	printf("(%d sectors (%d bytes)), %d tracks\n", 
 	    cdp->disk_size, cdp->block_size,
 	    cdp->toc.hdr.ending_track - cdp->toc.hdr.starting_track + 1);

---=-mnews-multipart-=---

