Hi.

I've found that -current kernel couldn't mount CD-Extra disks on 
ATAPI CD drives.

For example:
Starting track = 1, ending track = 14, TOC size = 122 bytes
track     start  duration   block  length   type
-------------------------------------------------
    1   0:02.00   0:11.52       0     727  audio
    2   0:11.52   3:58.55     727   17755  audio
    3   4:08.32   2:15.55   18482   10030  audio
    4   6:22.12   3:10.50   28512   14150  audio
    5   9:30.62   3:02.13   42662   13513  audio
    6  12:31.00   2:54.00   56175   12900  audio
    7  15:23.00   3:50.40   69075   17140  audio
    8  19:11.40   2:59.12   86215   13287  audio
    9  22:08.52   3:04.30   99502   13680  audio
   10  25:11.07   2:06.05  113182    9305  audio
   11  27:15.12   2:54.35  122487   12935  audio
   12  30:07.47   3:17.13  135422   14638  audio
   13  33:22.60  12:53.27  150060   57852  audio
   14  46:14.12  20:50.58  207912   93658   data
  170  67:02.70         -  301570       -      -

Tracks 1-13 are normal CD-DA in the first session,
and track 14 is the ISO9660 filesystem which consists of
XA Mode 2 Form 1 sectors (2048bytes/sector) in the second session.

This disk can be mounted on my SCSI CD drive,
but not on my ATAPI CD drive (with EINVAL).

I applied the following patch,
and then I can successfully mount the disk.
Is this a right treatment?


--- sys/dev/ata/atapi-cd.c      Fri Jan 19 06:01:25 2001
+++ sys/dev/ata/atapi-cd.c.new  Sun Jan 28 08:15:37 2001
@@ -1227,7 +1227,7 @@
 static void 
 acd_read_toc(struct acd_softc *cdp)
 {
-    int ntracks, len;
+    int ntracks, len, t;
     int8_t ccb[16];
 
     bzero(&cdp->toc, sizeof(cdp->toc));
@@ -1275,7 +1275,14 @@
 
     cdp->info.volsize = ntohl(cdp->info.volsize);
     cdp->info.blksize = ntohl(cdp->info.blksize);
-    cdp->block_size = (cdp->toc.tab[0].control & 4) ? 2048 : 2352;
+
+    cdp->block_size = 2352;
+    for (t = 0; t < cdp->toc.hdr.ending_track; t++) {
+        if (cdp->toc.tab[t].control & 4) {
+           cdp->block_size = 2048;
+           break;
+        }
+    }
 
     bzero(&cdp->disklabel, sizeof(struct disklabel));
     strncpy(cdp->disklabel.d_typename, "               ", 

-- 
Motomichi Matsuzaki <[EMAIL PROTECTED]> 
Dept. of Biological Sciences, Grad. School of Science, Univ. of Tokyo, Japan 


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to