on 22/12/2011 18:40 Alexander Motin said the following:
> Author: mav
> Date: Thu Dec 22 16:40:35 2011
> New Revision: 228808
> URL: http://svn.freebsd.org/changeset/base/228808
> 
> Log:
>   Make cd driver to handle Audio CDs, reporting their 2352 bytes sectors to
>   GEOM and using READ CD command for reading data, same as acd driver does.
>   Audio CDs identified by checking respective bit of the control field of
>   the first track in TOC.
>   
>   This fixes bunch of error messages during boot (GEOM taste) with Audio CD
>   inserted and allows to grab Audio CD image using just dd.

Thank you!
What about CDs with mixed audio and data tracks?
I don't ask for any support, just curious if our users could run into any
troubles with those.

>   MFC after:  1 month
> 
> Modified:
>   head/sys/cam/scsi/scsi_all.h
>   head/sys/cam/scsi/scsi_cd.c
> 
> Modified: head/sys/cam/scsi/scsi_all.h
> ==============================================================================
> --- head/sys/cam/scsi/scsi_all.h      Thu Dec 22 16:36:08 2011        
> (r228807)
> +++ head/sys/cam/scsi/scsi_all.h      Thu Dec 22 16:40:35 2011        
> (r228808)
> @@ -932,6 +932,7 @@ struct ata_pass_16 {
>  #define      WRITE_12                0xAA
>  #define      WRITE_VERIFY_12         0xAE
>  #define      READ_ELEMENT_STATUS     0xB8
> +#define      READ_CD                 0xBE
>  
>  /* Maintenance In Service Action Codes */
>  #define      REPORT_IDENTIFYING_INFRMATION           0x05
> 
> Modified: head/sys/cam/scsi/scsi_cd.c
> ==============================================================================
> --- head/sys/cam/scsi/scsi_cd.c       Thu Dec 22 16:36:08 2011        
> (r228807)
> +++ head/sys/cam/scsi/scsi_cd.c       Thu Dec 22 16:40:35 2011        
> (r228808)
> @@ -1483,6 +1483,11 @@ cdstart(struct cam_periph *periph, union
>                                       /* dxfer_len */ bp->bio_bcount,
>                                       /* sense_len */ SSD_FULL_SIZE,
>                                       /* timeout */ 30000);
> +                     /* Use READ CD command for audio tracks. */
> +                     if (softc->params.blksize == 2352) {
> +                             start_ccb->csio.cdb_io.cdb_bytes[0] = READ_CD;
> +                             start_ccb->csio.cdb_io.cdb_bytes[9] = 0xf8;
> +                     }
>                       start_ccb->ccb_h.ccb_state = CD_CCB_BUFFER_IO;
>  
>                       
> @@ -2880,6 +2885,13 @@ cdcheckmedia(struct cam_periph *periph)
>  
>       softc->flags |= CD_FLAG_VALID_TOC;
>  
> +     /* If the first track is audio, correct sector size. */
> +     if ((softc->toc.entries[0].control & 4) == 0) {
> +             softc->disk->d_sectorsize = softc->params.blksize = 2352;
> +             softc->disk->d_mediasize =
> +                 (off_t)softc->params.blksize * softc->params.disksize;
> +     }
> +
>  bailout:
>  
>       /*


-- 
Andriy Gapon
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to