Annotation of ntddk/src/scsi/cdaudio/cdaudio.h, revision 1.1.1.1

1.1       root        1: #if DBG
                      2: 
                      3: //
                      4: // CdAudio debug level global variable
                      5: //
                      6: 
                      7: ULONG CdAudioDebug = 0;
                      8: 
                      9: //
                     10: // Remap CdDump to local routine
                     11: //
                     12: 
                     13: #define CdDump(X)  CdAudioDebugPrint X
                     14: 
                     15: VOID
                     16: CdAudioDebugPrint(
                     17:     ULONG DebugPrintLevel,
                     18:     PCCHAR DebugMessage,
                     19:     ...
                     20:     );
                     21: 
                     22: #else
                     23: 
                     24: #define CdDump(X)
                     25: 
                     26: #endif // DBG
                     27: 
                     28: #include "class.h"
                     29: 
                     30: #define CDAUDIO_NOT_ACTIVE 0
                     31: #define CDAUDIO_NEC        1
                     32: #define CDAUDIO_PIONEER    2
                     33: #define CDAUDIO_DENON      3
                     34: #define CDAUDIO_HITATCHI   4
                     35: #define CDAUDIO_CDS535     5
                     36: #define CDAUDIO_CDS435     6
                     37: 
                     38: 
                     39: #define CDAUDIO_NOT_PAUSED 0
                     40: #define CDAUDIO_PAUSED     1
                     41: 
                     42: //
                     43: // Device Extension
                     44: //
                     45: 
                     46: typedef struct _CD_DEVICE_EXTENSION {
                     47: 
                     48:     //
                     49:     // Class device extension.
                     50:     //
                     51: 
                     52:     DEVICE_EXTENSION ClassDeviceExtension;
                     53: 
                     54:     //
                     55:     // Target Device Object
                     56:     //
                     57: 
                     58:     PDEVICE_OBJECT TargetDeviceObject;
                     59: 
                     60:     //
                     61:     // Back pointer to device object
                     62:     //
                     63: 
                     64:     PDEVICE_OBJECT DeviceObject;
                     65: 
                     66:     //
                     67:     // CdAudio active for this drive
                     68:     //
                     69: 
                     70:     UCHAR Active;
                     71: 
                     72:     //
                     73:     // For drives that don't support
                     74:     // PAUSE/RESUME (Denon), a flag
                     75:     // to signify when the drive is
                     76:     // paused.
                     77:     //
                     78: 
                     79:     UCHAR Paused;
                     80: 
                     81:     //
                     82:     // For drives that don't support
                     83:     // PAUSE/RESUME (Denon), this is the
                     84:     // current position on the disc when
                     85:     // a pause was last executed.  This is
                     86:     // stored in either BCD or binary,
                     87:     // depending on the drive.
                     88:     //
                     89: 
                     90:     UCHAR PausedM;
                     91:     UCHAR PausedS;
                     92:     UCHAR PausedF;
                     93: 
                     94:     //
                     95:     // For drives that don't support
                     96:     // PAUSE/RESUME (Denon), this is the
                     97:     // last "ending" position on the disc when
                     98:     // a play was last executed.  This is
                     99:     // stored in BCD or binary, depending on
                    100:     // the drive.
                    101:     //
                    102: 
                    103:     UCHAR LastEndM;
                    104:     UCHAR LastEndS;
                    105:     UCHAR LastEndF;
                    106: 
                    107:     //
                    108:     // Indicates the CD is currently playing music.
                    109:     //
                    110: 
                    111:     BOOLEAN PlayActive;
                    112: 
                    113: } CD_DEVICE_EXTENSION, *PCD_DEVICE_EXTENSION;
                    114: 
                    115: #define AUDIO_TIMEOUT 10
                    116: #define CD_DEVICE_EXTENSION_SIZE sizeof(CD_DEVICE_EXTENSION)
                    117: #define MAXIMUM_RETRIES 4
                    118: 
                    119: //
                    120: // Convert BCD character to decimal equivalent
                    121: //
                    122: 
                    123: #define BCD_TO_DEC(x) ((((x & 0xF0)>>4)*10) + (x & 0x0F))
                    124: #define DEC_TO_BCD(x) (((x / 10) << 4) + (x % 10))
                    125: 
                    126: //
                    127: // Defines for NEC CDR cdrom drives
                    128: //
                    129: 
                    130: #define NEC_READ_TOC_CODE           0xDE
                    131: #define NEC_AUDIO_TRACK_SEARCH_CODE 0xD8
                    132: #define NEC_PLAY_AUDIO_CODE         0xD9
                    133: #define NEC_STILL_CODE              0xDA
                    134: #define NEC_EJECT_CODE              0xDC
                    135: #define NEC_READ_SUB_Q_CHANNEL_CODE 0xDD
                    136: #define NEC_Q_CHANNEL_TRANSFER_SIZE 10
                    137: 
                    138: #define NEC_ENTER_PLAY_MODE         0x01
                    139: #define NEC_TYPE_LOGICAL            0x00
                    140: #define NEC_TYPE_ATIME              0x40
                    141: #define NEC_TYPE_TRACK_NUMBER       0x80
                    142: #define NEC_TYPE_NO_CHANGE          0xC0
                    143: #define NEC_PLAY_STEREO             0x03
                    144: #define NEC_TRANSFER_WHOLE_TOC      0x03
                    145: #define NEC_TOC_TYPE_DISK           0xA0
                    146: #define NEC_TOC_TYPE_SESSION        0xB0
                    147: 
                    148: //
                    149: // The NEC cdrom TOC size is:
                    150: //  2  bytes for size
                    151: //  10 bytes first track data
                    152: //  10 bytes last track data
                    153: //  10 bytes total disk data
                    154: //  10 bytes per track 99 track maximum.
                    155: //
                    156: 
                    157: #define NEC_CDROM_TOC_SIZE          1022
                    158: 
                    159: //
                    160: // NEC SENSE CODES
                    161: //
                    162: 
                    163: #define NEC_SCSI_ERROR_NO_DISC              0x0B
                    164: #define NEC_SCSI_ERROR_ILLEGAL_DISC         0x0C
                    165: #define NEC_SCSI_ERROR_TRAY_OPEN            0x0D
                    166: #define NEC_SCSI_ERROR_SEEK_ERROR           0x15
                    167: #define NEC_SCSI_ERROR_MUSIC_AREA           0x1D
                    168: #define NEC_SCSI_ERROR_DATA_AREA            0x1C
                    169: #define NEC_SCSI_ERROR_PARITY_ERROR         0x30
                    170: #define NEC_SCSI_ERROR_INVALID_COMMAND      0x20
                    171: #define NEC_SCSI_ERROR_INVALID_ADDRESS      0x21
                    172: #define NEC_SCSI_ERROR_INVALID_PARAMETER    0x22
                    173: #define NEC_SCSI_ERROR_INVALID_CMD_SEQUENCE 0x24
                    174: #define NEC_SCSI_ERROR_END_OF_VOLUME        0x25
                    175: #define NEC_SCSI_ERROR_MEDIA_CHANGED        0x28
                    176: #define NEC_SCSI_ERROR_DEVICE_RESET         0x29
                    177: 
                    178: //
                    179: // NEC 10-byte cdb definitions.
                    180: //
                    181: 
                    182: typedef union _NEC_CDB {
                    183: 
                    184:     //
                    185:     // NEC Read TOC CDB
                    186:     //
                    187: 
                    188:     struct _NEC_READ_TOC {
                    189:         UCHAR OperationCode;
                    190:         UCHAR Type : 2;
                    191:         UCHAR Reserved1 : 6;
                    192:         UCHAR TrackNumber;
                    193:         UCHAR Reserved2[6];
                    194:         UCHAR Control;
                    195:     } NEC_READ_TOC, *PNEC_READ_TOC;
                    196: 
                    197:     //
                    198:     // NEC Play CDB
                    199:     //
                    200: 
                    201:     struct _NEC_PLAY_AUDIO {
                    202:         UCHAR OperationCode;
                    203:         UCHAR PlayMode : 3;
                    204:         UCHAR Reserved1 : 5;
                    205:         UCHAR Minute;
                    206:         UCHAR Second;
                    207:         UCHAR Frame;
                    208:         UCHAR Reserved2[4];
                    209:         UCHAR Control;
                    210:     } NEC_PLAY_AUDIO, *PNEC_PLAY_AUDIO;
                    211: 
                    212:     //
                    213:     // NEC Seek Audio
                    214:     //
                    215: 
                    216:     struct _NEC_SEEK_AUDIO {
                    217:         UCHAR OperationCode;
                    218:         UCHAR Play : 1;
                    219:         UCHAR Reserved1 : 7;
                    220:         UCHAR Minute;
                    221:         UCHAR Second;
                    222:         UCHAR Frame;
                    223:         UCHAR Reserved2[4];
                    224:         UCHAR Control;
                    225:     } NEC_SEEK_AUDIO, *PNEC_SEEK_AUDIO;
                    226: 
                    227:     //
                    228:     // NEC Pause Audio
                    229:     //
                    230: 
                    231:     struct _NEC_PAUSE_AUDIO {
                    232:         UCHAR OperationCode;
                    233:         UCHAR Reserved1[8];
                    234:         UCHAR Control;
                    235:     } NEC_PAUSE_AUDIO, *PNEC_PAUSE_AUDIO;
                    236: 
                    237:     //
                    238:     // NEC Read Q Channel
                    239:     //
                    240: 
                    241:     struct _NEC_READ_Q_CHANNEL {
                    242:         UCHAR OperationCode;
                    243:         UCHAR TransferSize : 5;
                    244:         UCHAR Reserved1 : 3;
                    245:         UCHAR Reserved2[7];
                    246:         UCHAR Control;
                    247:     } NEC_READ_Q_CHANNEL, *PNEC_READ_Q_CHANNEL;
                    248: 
                    249:     //
                    250:     // NEC Eject Disc
                    251:     //
                    252: 
                    253:     struct _NEC_EJECT {
                    254:         UCHAR OperationCode;
                    255:         UCHAR Immediate : 1;
                    256:         UCHAR Reserved1 : 7;
                    257:         UCHAR Reserved2[7];
                    258:         UCHAR Control;
                    259:     } NEC_EJECT, *PNEC_EJECT;
                    260: 
                    261: } NEC_CDB, *PNEC_CDB;
                    262: 
                    263: //
                    264: // Defines for PIONEER DRM-600
                    265: //
                    266: 
                    267: #define PIONEER_REZERO_UNIT_CODE        0x01
                    268: #define PIONEER_EJECT_CODE              0xC0
                    269: #define PIONEER_READ_TOC_CODE           0xC1
                    270: #define PIONEER_READ_SUB_Q_CHANNEL_CODE 0xC2
                    271: #define PIONEER_Q_CHANNEL_TRANSFER_SIZE 9
                    272: #define PIONEER_AUDIO_STATUS_TRANSFER_SIZE 6
                    273: #define PIONEER_AUDIO_TRACK_SEARCH_CODE 0xC8
                    274: #define PIONEER_PLAY_AUDIO_CODE         0xC9
                    275: #define PIONEER_PAUSE_CODE              0xCA
                    276: #define PIONEER_AUDIO_STATUS_CODE       0xCC
                    277: 
                    278: #define PIONEER_READ_FIRST_AND_LAST     0x00
                    279: #define PIONEER_READ_TRACK_INFO         0x02
                    280: #define PIONEER_READ_LEAD_OUT_INFO      0x01
                    281: #define PIONEER_TRANSFER_SIZE           0x04
                    282: #define PIONEER_TYPE_ATIME              0x01
                    283: #define PIONEER_STOP_ADDRESS            0x10
                    284: 
                    285: //
                    286: // Pioneer cdb definitions.
                    287: //
                    288: 
                    289: typedef union _PIONEER_CDB {
                    290: 
                    291: 
                    292:     //
                    293:     // Pioneer Start/Stop Unit
                    294:     //
                    295: 
                    296:     struct _PNR_START_STOP {
                    297:         UCHAR OperationCode;
                    298:         UCHAR Immediate : 1;
                    299:         UCHAR Reserved1 : 4;
                    300:         UCHAR Lun : 3;
                    301:         UCHAR Reserved2 : 7;
                    302:         UCHAR PCF : 1;
                    303:         UCHAR Reserved3;
                    304:         UCHAR Start : 1;
                    305:         UCHAR Eject : 1;
                    306:         UCHAR Reserved4 : 6;
                    307:         UCHAR Link : 1;
                    308:         UCHAR Flag : 1;
                    309:         UCHAR Reserved5 : 4;
                    310:         UCHAR Vendor : 2;
                    311:     } PNR_START_STOP, *PPNR_START_STOP;
                    312: 
                    313:     //
                    314:     // Pioneer Read TOC CDB
                    315:     //
                    316: 
                    317:     struct _PNR_READ_TOC {
                    318:         UCHAR OperationCode;
                    319:         UCHAR Reserved1 : 5;
                    320:         UCHAR Lun : 3;
                    321:         UCHAR Reserved2[3];
                    322:         UCHAR TrackNumber;
                    323:         UCHAR Reserved3;
                    324:         UCHAR AssignedLength[2];
                    325:         UCHAR Link : 1;
                    326:         UCHAR Flag : 1;
                    327:         UCHAR Reserved4 : 4;
                    328:         UCHAR Type : 2;
                    329:     } PNR_READ_TOC, *PPNR_READ_TOC;
                    330: 
                    331:     //
                    332:     // Pioneer Play CDB
                    333:     //
                    334: 
                    335:     struct _PNR_PLAY_AUDIO {
                    336:         UCHAR OperationCode;
                    337:         UCHAR PlayMode : 4;
                    338:         UCHAR StopAddr : 1;
                    339:         UCHAR Lun : 3;
                    340:         UCHAR Reserved1;
                    341:         UCHAR Minute;
                    342:         UCHAR Second;
                    343:         UCHAR Frame;
                    344:         UCHAR Reserved2[3];
                    345:         UCHAR Link : 1;
                    346:         UCHAR Flag : 1;
                    347:         UCHAR Reserved3 : 4;
                    348:         UCHAR Type : 2;
                    349:     } PNR_PLAY_AUDIO, *PPNR_PLAY_AUDIO;
                    350: 
                    351:     //
                    352:     // Pioneer Seek Audio
                    353:     //
                    354: 
                    355:     struct _PNR_SEEK_AUDIO {
                    356:         UCHAR OperationCode;
                    357:         UCHAR PlayMode : 4;
                    358:         UCHAR PlayBack : 1;
                    359:         UCHAR Lun : 3;
                    360:         UCHAR Reserved1;
                    361:         UCHAR Minute;
                    362:         UCHAR Second;
                    363:         UCHAR Frame;
                    364:         UCHAR Reserved2[3];
                    365:         UCHAR Link : 1;
                    366:         UCHAR Flag : 1;
                    367:         UCHAR Reserved3 : 4;
                    368:         UCHAR Type : 2;
                    369:     } PNR_SEEK_AUDIO, *PPNR_SEEK_AUDIO;
                    370: 
                    371:     //
                    372:     // Pioneer Pause Audio
                    373:     //
                    374: 
                    375:     struct _PNR_PAUSE_AUDIO {
                    376:         UCHAR OperationCode;
                    377:         UCHAR Reserved1 : 4;
                    378:         UCHAR Pause : 1;
                    379:         UCHAR Lun : 3;
                    380:         UCHAR Reserved2[7];
                    381:         UCHAR Link : 1;
                    382:         UCHAR Flag : 1;
                    383:         UCHAR Reserved3 : 4;
                    384:         UCHAR Reserved4 : 2;
                    385:     } PNR_PAUSE_AUDIO, *PPNR_PAUSE_AUDIO;
                    386: 
                    387:     //
                    388:     // Pioneer Audio Status
                    389:     //
                    390: 
                    391:     struct _PNR_AUDIO_STATUS {
                    392:         UCHAR OperationCode;
                    393:         UCHAR Reserved1 : 4;
                    394:         UCHAR Reserved2 : 1;
                    395:         UCHAR Lun : 3;
                    396:         UCHAR Reserved3[6];
                    397:         UCHAR AssignedLength;
                    398:         UCHAR Link : 1;
                    399:         UCHAR Flag : 1;
                    400:         UCHAR Reserved4 : 4;
                    401:         UCHAR Reserved5 : 2;
                    402:     } PNR_AUDIO_STATUS, *PPNR_AUDIO_STATUS;
                    403: 
                    404:     //
                    405:     // Pioneer Read Q Channel
                    406:     //
                    407: 
                    408:     struct _PNR_READ_Q_CHANNEL {
                    409:         UCHAR OperationCode;
                    410:         UCHAR Reserved1 : 4;
                    411:         UCHAR Reserved2 : 1;
                    412:         UCHAR Lun : 3;
                    413:         UCHAR Reserved3[6];
                    414:         UCHAR AssignedLength;
                    415:         UCHAR Link : 1;
                    416:         UCHAR Flag : 1;
                    417:         UCHAR Reserved4 : 4;
                    418:         UCHAR Reserved5 : 2;
                    419:     } PNR_READ_Q_CHANNEL, *PPNR_READ_Q_CHANNEL;
                    420: 
                    421:     //
                    422:     // Pioneer Eject Disc
                    423:     //
                    424: 
                    425:     struct _PNR_EJECT {
                    426:         UCHAR OperationCode;
                    427:         UCHAR Immediate : 1;
                    428:         UCHAR Reserved1 : 4;
                    429:         UCHAR Lun : 3;
                    430:         UCHAR Reserved2[7];
                    431:         UCHAR Link : 1;
                    432:         UCHAR Flag : 1;
                    433:         UCHAR Reserved4 : 4;
                    434:         UCHAR Reserved5 : 2;
                    435:     } PNR_EJECT, *PPNR_EJECT;
                    436: 
                    437: } PNR_CDB, *PPNR_CDB;
                    438: 
                    439: 
                    440: //
                    441: // Defines for DENON DRD-253
                    442: //
                    443: 
                    444: #define DENON_READ_TOC_CODE             0xE9
                    445: #define DENON_EJECT_CODE                0xE6
                    446: #define DENON_PLAY_AUDIO_EXTENDED_CODE  0x22
                    447: #define DENON_STOP_AUDIO_CODE           0xE7
                    448: #define DENON_READ_SUB_Q_CHANNEL_CODE   0xEB
                    449: 
                    450: //
                    451: // Defines for HITATCHI 1750s
                    452: //
                    453: 
                    454: #define HITATCHI_READ_TOC_CODE              0xE8
                    455: #define HITATCHI_EJECT_CODE                 0xE4
                    456: #define HITATCHI_PLAY_AUDIO_MSF_CODE        0xE0
                    457: #define HITATCHI_PAUSE_AUDIO_CODE           0xE1
                    458: #define HITATCHI_READ_SUB_Q_CHANNEL_CODE    0xE5
                    459: 
                    460: //
                    461: // 12 byte cdbs for Hitatchi
                    462: //
                    463: 
                    464: typedef union _CDB12 {
                    465: 
                    466:     //
                    467:     // Disc Information
                    468:     //
                    469: 
                    470:     struct _READ_DISC_INFO {
                    471: 
                    472:         UCHAR   OperationCode;
                    473:         UCHAR   Reserved : 5;
                    474:         UCHAR   LogicalUnitNumber : 3;
                    475:         UCHAR   Reserved1[7];
                    476:         UCHAR   AllocationLength[2];
                    477:         UCHAR   Link : 1;
                    478:         UCHAR   Flag : 1;
                    479:         UCHAR   Reserved2 : 4;
                    480:         UCHAR   VendorUniqueBits : 2;
                    481: 
                    482:     } READ_DISC_INFO, *PREAD_DISC_INFO;
                    483: 
                    484:     //
                    485:     // Play Audio
                    486:     //
                    487: 
                    488:     struct _PLAY_AUDIO {
                    489: 
                    490:         UCHAR OperationCode;
                    491:         UCHAR Immediate : 1;
                    492:         UCHAR Right : 1;
                    493:         UCHAR Left : 1;
                    494:         UCHAR Reserved : 2;
                    495:         UCHAR Lun : 3;
                    496:         UCHAR StartingM;
                    497:         UCHAR StartingS;
                    498:         UCHAR StartingF;
                    499:         UCHAR Reserved1[2];
                    500:         UCHAR EndingM;
                    501:         UCHAR EndingS;
                    502:         UCHAR EndingF;
                    503:         UCHAR Reserved2;
                    504:         UCHAR Link : 1;
                    505:         UCHAR Flag : 1;
                    506:         UCHAR Reserved3 : 4;
                    507:         UCHAR VendorUniqueBits : 2;
                    508: 
                    509:     } PLAY_AUDIO, *PPLAY_AUDIO;
                    510: 
                    511:     //
                    512:     // Pause Audio
                    513:     //
                    514: 
                    515:     struct _PAUSE {
                    516: 
                    517:         UCHAR OperationCode;
                    518:         UCHAR Reserved : 5;
                    519:         UCHAR Lun : 3;
                    520:         UCHAR Reserved1[9];
                    521:         UCHAR Link : 1;
                    522:         UCHAR Flag : 1;
                    523:         UCHAR Reserved2 : 4;
                    524:         UCHAR VendorUnqiueBits : 2;
                    525: 
                    526:     } PAUSE_AUDIO, *PPAUSE_AUDIO;
                    527: 
                    528:     //
                    529:     // Eject media
                    530:     //
                    531: 
                    532:     struct _EJECT {
                    533: 
                    534:         UCHAR OperationCode;
                    535:         UCHAR Reserved : 5;
                    536:         UCHAR Lun : 3;
                    537:         UCHAR Reserved1[8];
                    538:         UCHAR Eject : 1;
                    539:         UCHAR Mode : 1;
                    540:         UCHAR Reserved2 : 6;
                    541:         UCHAR Link : 1;
                    542:         UCHAR Flag : 1;
                    543:         UCHAR Reserved3 : 4;
                    544:         UCHAR VendorUnqiueBits : 2;
                    545: 
                    546:     } EJECT, *PEJECT;
                    547: 
                    548:     //
                    549:     // Audio Status
                    550:     //
                    551: 
                    552:     struct _AUDIO_STATUS {
                    553: 
                    554:         UCHAR OperationCode;
                    555:         UCHAR Reserved : 5;
                    556:         UCHAR Lun : 3;
                    557:         UCHAR Reserved1[9];
                    558:         UCHAR Link : 1;
                    559:         UCHAR Flag : 1;
                    560:         UCHAR Reserved2 : 4;
                    561:         UCHAR VendorUnqiueBits : 2;
                    562: 
                    563:     } AUDIO_STATUS, *PAUDIO_STATUS;
                    564: 
                    565: } CDB12, *PCDB12;
                    566: 
                    567: //
                    568: // Defines for Chinon CDS-535 CDROM Drive
                    569: //
                    570: 
                    571: #define CDS535_READ_TOC_CODE           0x43
                    572: #define CDS535_EJECT_CODE              0xC0
                    573: #define CDS535_READ_SUB_Q_CHANNEL_CODE 0x42
                    574: #define CDS535_STOP_AUDIO              0xC6
                    575: #define CDS535_GET_LAST_SESSION        0x26
                    576: 
                    577: //
                    578: // Defines for Chinon CDS-435 CDROM Drive
                    579: //
                    580: 
                    581: #define CDS435_READ_TOC_CODE            0x43
                    582: #define CDS435_EJECT_CODE               0xC0
                    583: #define CDS435_STOP_AUDIO_CODE          0xC6
                    584: #define CDS435_PLAY_AUDIO_EXTENDED_CODE 0x47
                    585: #define CDS435_READ_SUB_Q_CHANNEL_CODE  0x42
                    586: 
                    587: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.