279 lines
8.8 KiB
C
279 lines
8.8 KiB
C
|
/****************************************************************************
|
||
|
**
|
||
|
** Copyright 1999 Adaptec, Inc., All Rights Reserved.
|
||
|
**
|
||
|
** This software contains the valuable trade secrets of Adaptec. The
|
||
|
** software is protected under copyright laws as an unpublished work of
|
||
|
** Adaptec. Notice is for informational purposes only and does not imply
|
||
|
** publication. The user of this software may make copies of the software
|
||
|
** for use with parts manufactured by Adaptec or under license from Adaptec
|
||
|
** and for no other use.
|
||
|
**
|
||
|
****************************************************************************/
|
||
|
|
||
|
/****************************************************************************
|
||
|
**
|
||
|
** Module Name: MmcThings.h
|
||
|
**
|
||
|
** Description: MMC Structures and OpCodes
|
||
|
**
|
||
|
** Programmers: Daniel Evers (dle)
|
||
|
** Tom Halloran (tgh)
|
||
|
** Don Lilly (drl)
|
||
|
** Daniel Polfer (dap)
|
||
|
**
|
||
|
** History: 8/18/99 (dap) Opened history and added header.
|
||
|
**
|
||
|
** Notes: This file created using 4 spaces per tab.
|
||
|
**
|
||
|
****************************************************************************/
|
||
|
|
||
|
#ifndef __MMCTHINGS_H__
|
||
|
#define __MMCTHINGS_H__
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif //__cplusplus
|
||
|
|
||
|
#define MMC_CDR_1X_SPEED_KB 176
|
||
|
|
||
|
// MMC SCSI Opcodes
|
||
|
#define MMC_CDBOPCODE_BLANK 0xa1
|
||
|
#define MMC_CDBLENGTH_BLANK 12
|
||
|
#define MMC_CDBOPCODE_CLOSE_TRACK_SESSION 0x5b
|
||
|
#define MMC_CDBLENGTH_CLOSE_TRACK_SESSION 10
|
||
|
#define MMC_CDBOPCODE_PREVENTALLOWREMOVAL 0x1e
|
||
|
#define MMC_CDBLENGTH_PREVENTALLOWREMOVAL 6 // drl - this is the length for the hp9200
|
||
|
#define MMC_CDBOPCODE_READ_DISC_INFO 0x51
|
||
|
#define MMC_CDBLENGTH_READ_DISC_INFO 10
|
||
|
#define MMC_CDBOPCODE_READ_TRACK_INFO 0x52
|
||
|
#define MMC_CDBLENGTH_READ_TRACK_INFO 10
|
||
|
#define MMC_CDBOPCODE_SETCDSPEED 0xbb
|
||
|
#define MMC_CDBLENGTH_SETCDSPEED 12 // drl - this is the length for the hp9200
|
||
|
#define MMC_CDBOPCODE_STARTSTOPUNIT 0x1b
|
||
|
#define MMC_CDBLENGTH_STARTSTOPUNIT 6 // drl - this is the length for the hp9200
|
||
|
#define MMC_CDBOPCODE_SYNCHRONIZE_CACHE 0x35
|
||
|
#define MMC_CDBLENGTH_SYNCHRONIZE_CACHE 10
|
||
|
#define MMC_CDBOPCODE_WRITE 0x2a
|
||
|
#define MMC_CDBLENGTH_WRITE 10
|
||
|
#define MMC_CDBOPCODE_READ 0x28
|
||
|
#define MMC_CDBLENGTH_READ 10
|
||
|
|
||
|
#define MMC_CDB_BLANK_BLANKINGTYPE_FULL 0x00
|
||
|
#define MMC_CDB_BLANK_BLANKINGTYPE_MINIMAL 0x01
|
||
|
|
||
|
// MMC Structs
|
||
|
#define MMC_CLOSE_TRACK_SESSION_FLAG_SESSION 0x02
|
||
|
#define MMC_CLOSE_TRACK_SESSION_FLAG_TRACK 0x01
|
||
|
#define MMC_CLOSE_TRACK_SESSION_FLAG_IMMED 0x01
|
||
|
|
||
|
#define MMC_DISC_INFO_DISC_STATUS_EMPTY 0x00
|
||
|
#define MMC_DISC_INFO_DISC_STATUS_INCOMPLETE 0x01
|
||
|
#define MMC_DISC_INFO_DISC_STATUS_COMPLETE 0x02
|
||
|
#define MMC_DISC_INFO_DISC_STATUS_MASK 0x03
|
||
|
#define MMC_DISC_INFO_LAST_SESSION_STATE_EMPTY 0x00
|
||
|
#define MMC_DISC_INFO_LAST_SESSION_STATE_INCOMPLETE 0x04
|
||
|
#define MMC_DISC_INFO_LAST_SESSION_STATE_COMPLETE 0x0c
|
||
|
#define MMC_DISC_INFO_LAST_SESSION_STATE_MASK 0x0c
|
||
|
#define MMC_DISC_INFO_ERASEABLE_MASK 0x10
|
||
|
#define MMC_DISC_INFO_DISC_TYPE_CDDA_CDROM 0x00
|
||
|
#define MMC_DISC_INFO_DISC_TYPE_CD_I 0x10
|
||
|
#define MMC_DISC_INFO_DISC_TYPE_CDROM_XA 0x20
|
||
|
#define MMC_DISC_INFO_DISC_TYPE_UNDEFINED 0xff
|
||
|
|
||
|
#pragma pack(push,1)
|
||
|
typedef struct {
|
||
|
BYTE byDataLengthHi;
|
||
|
BYTE byDataLengthLo;
|
||
|
BYTE byDiscStatus;
|
||
|
BYTE byFirstTrackNumber;
|
||
|
BYTE bySessionCount;
|
||
|
BYTE byFirstTrackInLastSession;
|
||
|
BYTE byLastTrackInLastSession;
|
||
|
BYTE byDIDVDBCVURU;
|
||
|
|
||
|
BYTE byDiscType;
|
||
|
BYTE byaReserved0[ 3 ];
|
||
|
BYTE byaDiscId[ 4 ];
|
||
|
|
||
|
BYTE byaLastSessionLeadInStartTimeMSF[ 4 ];
|
||
|
BYTE byaLastPossStartTimeforLeadOutMSF[ 4 ];
|
||
|
|
||
|
BYTE byaDiscBarcode[ 8 ];
|
||
|
|
||
|
BYTE byReserved1;
|
||
|
BYTE byOpcTableEntriesCount;
|
||
|
BYTE byaOPCTableEntries[ 100 ];
|
||
|
} MMC_DISC_INFO_BLOCK, *PMMC_DISC_INFO_BLOCK;
|
||
|
#pragma pack(pop)
|
||
|
|
||
|
|
||
|
//#define MMC_EXPECTED_RT_BLANK_PACKET_FP_DATAMODE_AUDIO 0x4f
|
||
|
#define MMC_EXPECTED_RT_BLANK_PACKET_FP_DATAMODE_AUDIO 0x0f
|
||
|
#define MMC_EXPECTED_RT_BLANK_PACKET_FP_DATAMODE_MODE1 0x41
|
||
|
#define MMC_TIB_RT_BLANK_PACKET_FP_DATAMODE_RESERVEDTRACK 0x80
|
||
|
#define MMC_TIB_RT_BLANK_PACKET_FP_DATAMODE_BLANK 0x40
|
||
|
#define MMC_TIB_RT_BLANK_PACKET_FP_DATAMODE_PACKET 0x20
|
||
|
#define MMC_TIB_RT_BLANK_PACKET_FP_DATAMODE_FIXEDPACKET 0x10
|
||
|
#define MMC_TIB_RT_BLANK_PACKET_FP_DATAMODE_MODE1 0x01
|
||
|
#define MMC_TIB_RT_BLANK_PACKET_FP_DATAMODE_MODE2 0x02
|
||
|
#define MMC_TIB_RT_BLANK_PACKET_FP_DATAMODE_UNKNOWN 0x0f
|
||
|
|
||
|
#pragma pack(push,1)
|
||
|
typedef struct {
|
||
|
BYTE byaDataLength[ 2 ];
|
||
|
BYTE byTrackNumber;
|
||
|
BYTE bySessionNumber;
|
||
|
BYTE byReserved0;
|
||
|
BYTE byDamage_Copy_TrackMode;
|
||
|
BYTE byRT_Blank_Packet_FP_DataMode;
|
||
|
BYTE byNWA_V;
|
||
|
|
||
|
BYTE byaTrackStartAddress[ 4 ];
|
||
|
BYTE byaNextWritableAddress[ 4 ];
|
||
|
|
||
|
BYTE byaFreeBlocks[ 4 ];
|
||
|
BYTE byaFixedPacketSize[ 4 ];
|
||
|
|
||
|
// tgh - the 9200 spec says that there is another field here: Track Length.
|
||
|
BYTE byaTrackLength[ 4 ];
|
||
|
|
||
|
} MMC_TRACK_INFO_BLOCK, *PMMC_TRACK_INFO_BLOCK;
|
||
|
#pragma pack(pop)
|
||
|
|
||
|
|
||
|
#define MMC_MODE_PAGE_CODE_WRITE_PARAMETERS 0x05
|
||
|
#define MMC_WP_TEST_WRITING_FLAG 0x10
|
||
|
#define MMC_WP_WRITE_TYPE_TRACK_AT_ONCE 0x01
|
||
|
#define MMC_WP_DATA_BLOCK_TYPE_RAW_DATA 0x00
|
||
|
#define MMC_WP_DATA_BLOCK_TYPE_MODE1 0x08
|
||
|
#define MMC_WP_DATA_BLOCK_TYPE_MODE2_FORM1 0x0A
|
||
|
#define MMC_WP_SESSION_FORMAT_CDDAorCDROM 0x00
|
||
|
#define MMC_WP_SESSION_FORMAT_CDROM_XA 0x20
|
||
|
|
||
|
#define MMC_SUBCHANNEL_Q_BIT_AUDIOPREEMPHASIS 0x01
|
||
|
#define MMC_SUBCHANNEL_Q_BIT_DIGITALCOPYPERMITTED 0x02
|
||
|
#define MMC_SUBCHANNEL_Q_BIT_AUDIOTRACK 0x00
|
||
|
#define MMC_SUBCHANNEL_Q_BIT_DATATRACK 0x04
|
||
|
#define MMC_SUBCHANNEL_Q_BIT_FOURCHANNELAUDIO 0x08
|
||
|
|
||
|
#pragma pack(push,1)
|
||
|
typedef struct {
|
||
|
BYTE byaModeDataLength[ 2 ];
|
||
|
BYTE byaMediumType;
|
||
|
BYTE byaReserved[ 3 ];
|
||
|
BYTE byaBlockDescriptorLength[ 2 ];
|
||
|
BYTE byaBlockDescriptor[ 8 ];
|
||
|
} MMC_MODE_PARAMETER_HEADER, *PMMC_MODE_PARAMETER_HEADER;
|
||
|
#pragma pack(pop)
|
||
|
|
||
|
#pragma pack(push,1)
|
||
|
typedef struct {
|
||
|
BYTE byPageCode; // 0x05
|
||
|
BYTE byPageLength; // 0x32
|
||
|
// BYTE byTW_WriteType;
|
||
|
BYTE bfWriteType:4;
|
||
|
BYTE bfTestWrite:1;
|
||
|
BYTE bfLS_V:1;
|
||
|
BYTE bfBufferUnderrunFree:1;
|
||
|
BYTE bfreserved1:1;
|
||
|
// BYTE byMS_FP_Copy_TrackMode;
|
||
|
BYTE bfTrackMode:4;
|
||
|
BYTE bfCopyRight:1;
|
||
|
BYTE bfFixedPacket:1;
|
||
|
BYTE bfMultiSession:2;
|
||
|
// BYTE byDataBlockType;
|
||
|
BYTE bfDataBlockType:4;
|
||
|
BYTE bfreserved2:4;
|
||
|
|
||
|
BYTE byLinkSize;
|
||
|
BYTE byreserved3;
|
||
|
BYTE bfHostApplicationCode:6;
|
||
|
BYTE bfreserved4:2;
|
||
|
BYTE bySessionFormat;
|
||
|
BYTE byreserved5;
|
||
|
BYTE byaPacketSize[ 4 ];
|
||
|
BYTE byaAudioPauseLength[ 2 ];
|
||
|
|
||
|
BYTE byMCVAL;
|
||
|
BYTE byaN1thruN13[ 13 ];
|
||
|
BYTE byZero1;
|
||
|
BYTE byAframe1;
|
||
|
|
||
|
BYTE byTCVAL;
|
||
|
BYTE byI1CountryCode;
|
||
|
BYTE byI2A_Z;
|
||
|
BYTE byI3OwnerCode;
|
||
|
BYTE byI4;
|
||
|
BYTE byI5A_Z_0_9;
|
||
|
BYTE byI6YearOfRecording;
|
||
|
BYTE byI7;
|
||
|
BYTE byI8SerialNumber;
|
||
|
BYTE byI9;
|
||
|
BYTE byI10;
|
||
|
BYTE byI11;
|
||
|
BYTE byI12;
|
||
|
BYTE byZero2;
|
||
|
BYTE byAframe2;
|
||
|
BYTE byReserved2;
|
||
|
|
||
|
BYTE byaSubheader[ 4 ];
|
||
|
|
||
|
//BYTE byaAdditionalLength[ 80 ];
|
||
|
} MMC_MODE_PAGE_WRITE_PARAMETERS, *PMMC_MODE_PAGE_WRITE_PARAMETERS;
|
||
|
#pragma pack(pop)
|
||
|
|
||
|
#pragma pack(push,1)
|
||
|
typedef struct {
|
||
|
MMC_MODE_PARAMETER_HEADER header;
|
||
|
MMC_MODE_PAGE_WRITE_PARAMETERS page;
|
||
|
} MMC_MODE_WRITE_PARAMETERS, *PMMC_MODE_WRITE_PARAMETERS;
|
||
|
#pragma pack(pop)
|
||
|
|
||
|
|
||
|
#define MMC_MODE_PAGE_CODE_CAPABILITIES_PARAMETERS 0x2A
|
||
|
|
||
|
#pragma pack(push,1)
|
||
|
typedef struct {
|
||
|
BYTE byPageCode; // 0x2a
|
||
|
BYTE byPageLength; // 0x18
|
||
|
BYTE byReadType;
|
||
|
BYTE byWriterType;
|
||
|
BYTE byMultiSession : 7;
|
||
|
BYTE bfBufferUnderrunFreeCapable : 1;
|
||
|
BYTE byReadBarCode;
|
||
|
BYTE byEjectLock;
|
||
|
BYTE byLeadIn;
|
||
|
BYTE byMaxReadSpeed[2];
|
||
|
BYTE byVolumeLevels[2];
|
||
|
BYTE byBufferSizeSupported[2];
|
||
|
BYTE byCurrentReadSpeed[2];
|
||
|
|
||
|
BYTE byReserved[2];
|
||
|
|
||
|
BYTE byMaxWriteSpeed[2];
|
||
|
BYTE byCurrentWriteSpeed[2];
|
||
|
BYTE byManagement[2];
|
||
|
|
||
|
BYTE byReserved2[2];
|
||
|
} MMC_MODE_PAGE_CAPABILITY_PARAMETERS, *PMMC_MODE_PAGE_CAPABILITY_PARAMETERS;
|
||
|
#pragma pack(pop)
|
||
|
|
||
|
#pragma pack(push,1)
|
||
|
typedef struct {
|
||
|
MMC_MODE_PARAMETER_HEADER header;
|
||
|
MMC_MODE_PAGE_CAPABILITY_PARAMETERS page;
|
||
|
} MMC_MODE_CAPABILITY_PARAMETERS, *PMMC_MODE_CAPABILITY_PARAMETERS;
|
||
|
#pragma pack(pop)
|
||
|
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif //__cplusplus
|
||
|
|
||
|
|
||
|
|
||
|
#endif //__MMCTHINGS_H__
|