Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 22 Dec 2011 20:24:37 +0200
From:      Andriy Gapon <avg@FreeBSD.org>
To:        Alexander Motin <mav@FreeBSD.org>
Cc:        svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org
Subject:   Re: svn commit: r228808 - head/sys/cam/scsi
Message-ID:  <4EF375E5.2010809@FreeBSD.org>
In-Reply-To: <201112221640.pBMGeZod025237@svn.freebsd.org>
References:  <201112221640.pBMGeZod025237@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4EF375E5.2010809>