Put more into scsi_mmc.h
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
$Id: _cdio_linux.c,v 1.18 2003/09/17 12:16:42 rocky Exp $
|
||||
$Id: _cdio_linux.c,v 1.19 2003/09/18 13:31:07 rocky Exp $
|
||||
|
||||
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
|
||||
Copyright (C) 2002,2003 Rocky Bernstein <rocky@panix.com>
|
||||
@@ -27,7 +27,7 @@
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.18 2003/09/17 12:16:42 rocky Exp $";
|
||||
static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.19 2003/09/18 13:31:07 rocky Exp $";
|
||||
|
||||
#include <string.h>
|
||||
|
||||
@@ -236,18 +236,24 @@ _set_bsize (int fd, unsigned int bsize)
|
||||
Can read only up to 25 blocks.
|
||||
*/
|
||||
static int
|
||||
_read_packet_audio_sector (int fd, void *buf, lba_t lba)
|
||||
_cdio_read_packet_raw_sector (int fd, void *buf, lba_t lba, int sector_type)
|
||||
{
|
||||
struct cdrom_generic_command cgc;
|
||||
const int nblocks = 1;
|
||||
|
||||
memset (&cgc, 0, sizeof (struct cdrom_generic_command));
|
||||
|
||||
cgc.cmd[0] = GPCMD_READ_CD;
|
||||
cgc.cmd[1] = 0; /* Any type of sectors returned */
|
||||
cgc.cmd[0] = CDIO_MMC_GPCMD_READ_CD;
|
||||
cgc.cmd[1] = sector_type << 2; /* Any type of sectors returned */
|
||||
/*sector_type = 0;*/ /* all types */
|
||||
/*sector_type = 1;*/ /* CD-DA */
|
||||
/*sector_type = 2;*/ /* mode1 */
|
||||
/*sector_type = 3;*/ /* mode2 */
|
||||
/*sector_type = 4;*/ /* mode2/form1 */
|
||||
/*sector_type = 5;*/ /* mode2/form2 */
|
||||
|
||||
SCSI_MMC_SET_READ_LBA(cgc.cmd, lba);
|
||||
SCSI_MMC_SET_READ_LENGTH(cgc.cmd, nblocks);
|
||||
CDIO_MMC_SET_READ_LBA(cgc.cmd, lba);
|
||||
CDIO_MMC_SET_READ_LENGTH(cgc.cmd, nblocks);
|
||||
|
||||
cgc.cmd[9] = 0x78; /* All headers */
|
||||
|
||||
@@ -264,6 +270,15 @@ _read_packet_audio_sector (int fd, void *buf, lba_t lba)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Packet driver to read mode2 sectors.
|
||||
Can read only up to 25 blocks.
|
||||
*/
|
||||
static int
|
||||
_read_packet_audio_sector (int fd, void *buf, lsn_t lsn)
|
||||
{
|
||||
return _cdio_read_packet_raw_sector( fd, buf, lsn, 1);
|
||||
}
|
||||
|
||||
/* Packet driver to read mode2 sectors.
|
||||
Can read only up to 25 blocks.
|
||||
*/
|
||||
@@ -275,10 +290,10 @@ __read_packet_mode2_sectors (int fd, void *buf, lba_t lba,
|
||||
|
||||
memset (&cgc, 0, sizeof (struct cdrom_generic_command));
|
||||
|
||||
cgc.cmd[0] = use_read_10 ? GPCMD_READ_10 : GPCMD_READ_CD;
|
||||
cgc.cmd[0] = use_read_10 ? GPCMD_READ_10 : CDIO_MMC_GPCMD_READ_CD;
|
||||
|
||||
SCSI_MMC_SET_READ_LBA(cgc.cmd, lba);
|
||||
SCSI_MMC_SET_READ_LENGTH(cgc.cmd, nblocks);
|
||||
CDIO_MMC_SET_READ_LBA(cgc.cmd, lba);
|
||||
CDIO_MMC_SET_READ_LENGTH(cgc.cmd, nblocks);
|
||||
|
||||
if (!use_read_10)
|
||||
{
|
||||
@@ -445,7 +460,7 @@ _cdio_read_audio_sector (void *user_data, void *data, lsn_t lsn)
|
||||
|
||||
case _AM_READ_CD:
|
||||
case _AM_READ_10:
|
||||
if (_read_packet_audio_sector (_obj->gen.fd, buf, lsn)) {
|
||||
if (_cdio_read_packet_raw_sector (_obj->gen.fd, buf, lsn, 0)) {
|
||||
perror ("ioctl()");
|
||||
if (_obj->access_mode == _AM_READ_CD) {
|
||||
cdio_info ("READ_CD failed; switching to READ_10 mode...");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
$Id: scsi_mmc.h,v 1.1 2003/09/14 09:36:32 rocky Exp $
|
||||
$Id: scsi_mmc.h,v 1.2 2003/09/18 13:31:07 rocky Exp $
|
||||
|
||||
Copyright (C) 2003 Rocky Bernstein <rocky@panix.com>
|
||||
|
||||
@@ -26,13 +26,15 @@
|
||||
#ifndef __SCSI_MMC_H__
|
||||
#define __SCSI_MMC_H__
|
||||
|
||||
#define SCSI_MMC_SET_READ_LBA(rec, lba) \
|
||||
#define CDIO_MMC_GPCMD_READ_CD 0xbe
|
||||
|
||||
#define CDIO_MMC_SET_READ_LBA(rec, lba) \
|
||||
rec[2] = (lba >> 24) & 0xff; \
|
||||
rec[3] = (lba >> 16) & 0xff; \
|
||||
rec[4] = (lba >> 8) & 0xff; \
|
||||
rec[5] = (lba ) & 0xff
|
||||
|
||||
#define SCSI_MMC_SET_READ_LENGTH(rec, len) \
|
||||
#define CDIO_MMC_SET_READ_LENGTH(rec, len) \
|
||||
rec[6] = (len >> 16) & 0xff; \
|
||||
rec[7] = (len >> 8) & 0xff; \
|
||||
rec[8] = (len ) & 0xff
|
||||
|
||||
Reference in New Issue
Block a user