Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenscsi.h
Go to the documentation of this file.
00001 /*++ 00002 00003 Copyright (c) 2002-2005 Alexandr A. Telyatnikov (Alter) 00004 00005 Module Name: 00006 scsi.h 00007 00008 Abstract: 00009 This file contains SCSI protocol definitions 00010 00011 Author: 00012 Alexander A. Telyatnikov (Alter) 00013 00014 Environment: 00015 kernel mode only 00016 00017 Notes: 00018 00019 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 00020 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 00021 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 00022 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 00023 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 00024 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00025 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00026 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00027 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 00028 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00029 00030 Revision History: 00031 00032 --*/ 00033 #ifndef __CDRW_DEVICE_H__ 00034 #define __CDRW_DEVICE_H__ 00035 00036 #include "srb.h" 00037 00038 #pragma pack(push, 1) 00039 00040 // Command Descriptor Block. Passed by SCSI controller chip over the SCSI bus 00041 00042 typedef union _CDB { 00043 00044 // Generic 6-Byte CDB 00045 struct _CDB6 { 00046 UCHAR OperationCode; 00047 UCHAR Immediate : 1; 00048 UCHAR CommandUniqueBits : 4; 00049 UCHAR Lun : 3; 00050 UCHAR CommandUniqueBytes[3]; 00051 UCHAR Link : 1; 00052 UCHAR Flag : 1; 00053 UCHAR Reserved : 4; 00054 UCHAR VendorUnique : 2; 00055 } CDB6, *PCDB6; 00056 00057 struct _REQUEST_SENSE { 00058 UCHAR OperationCode; 00059 UCHAR Reserved0 : 5; 00060 UCHAR Lun : 3; 00061 UCHAR Reserved1[2]; 00062 UCHAR AllocationLength; 00063 UCHAR Link : 1; 00064 UCHAR Flag : 1; 00065 UCHAR Reserved2 : 6; 00066 } REQUEST_SENSE, *PREQUEST_SENSE; 00067 00068 // Standard 6-byte CDB 00069 struct _CDB6READWRITE { 00070 UCHAR OperationCode; 00071 UCHAR LBA2 : 5; 00072 UCHAR Lun : 3; 00073 UCHAR LBA0[2]; 00074 UCHAR NumOfBlocks; 00075 UCHAR Control; 00076 } CDB6READWRITE, *PCDB6READWRITE; 00077 00078 // SCSI Inquiry CDB 00079 struct _CDB6INQUIRY { 00080 UCHAR OperationCode; 00081 UCHAR Reserved1 : 5; 00082 UCHAR Lun : 3; 00083 UCHAR PageCode; 00084 UCHAR IReserved; 00085 UCHAR AllocationLength; 00086 UCHAR Control; 00087 } CDB6INQUIRY, *PCDB6INQUIRY; 00088 00089 // SCSI Format CDB 00090 00091 struct _ERASE { 00092 UCHAR OperationCode; 00093 UCHAR Long : 1; 00094 UCHAR Immediate : 1; 00095 UCHAR Reserved1 : 3; 00096 UCHAR Lun : 3; 00097 UCHAR Reserved2[3]; 00098 UCHAR Control; 00099 } ERASE, *PERASE; 00100 00101 #define FormatUnit_Code_Mask 0x07 00102 #define FormatUnit_Cmp 0x08 00103 #define FormatUnit_Fmt 0x10 00104 00105 struct _CDB6FORMAT { 00106 UCHAR OperationCode; 00107 union { 00108 UCHAR Flags; 00109 struct { 00110 UCHAR FormatCode : 3; 00111 UCHAR Cmp:1; 00112 UCHAR Fmt:1; 00113 UCHAR Lun : 3; 00114 } Fields; 00115 } Byte1; 00116 UCHAR FReserved1; 00117 UCHAR Interleave[2]; 00118 UCHAR FReserved2; 00119 } CDB6FORMAT, *PCDB6FORMAT; 00120 00121 // Standard 10-byte CDB 00122 struct _CDB10 { 00123 UCHAR OperationCode; 00124 UCHAR RelativeAddress : 1; 00125 UCHAR Reserved1 : 2; 00126 UCHAR ForceUnitAccess : 1; 00127 UCHAR DisablePageOut : 1; 00128 UCHAR Lun : 3; 00129 UCHAR LBA[4]; 00130 UCHAR Reserved2; 00131 UCHAR TransferBlocks[2]; 00132 UCHAR Control; 00133 } CDB10, *PCDB10; 00134 00135 // CD Rom Audio CDBs 00136 00137 #define PauseResume_Pause 0x00 00138 #define PauseResume_Resume 0x01 00139 00140 struct _PAUSE_RESUME { 00141 UCHAR OperationCode; 00142 UCHAR Reserved1 : 5; 00143 UCHAR Lun : 3; 00144 UCHAR Reserved2[6]; 00145 UCHAR Action; 00146 UCHAR Control; 00147 } PAUSE_RESUME, *PPAUSE_RESUME; 00148 00149 // Read Table of Contents (TOC) 00150 00151 #define ReadTOC_Format_Mask 0x0f 00152 #define ReadTOC_Format_TOC 0x00 00153 #define ReadTOC_Format_SesInfo 0x01 00154 #define ReadTOC_Format_FullTOC 0x02 00155 #define ReadTOC_Format_PMA 0x03 00156 #define ReadTOC_Format_ATIP 0x04 00157 #define ReadTOC_Format_CdText 0x05 00158 00159 struct _READ_TOC { 00160 UCHAR OperationCode; 00161 UCHAR Reserved0 : 1; 00162 UCHAR Msf : 1; // HMSF MMC-3 00163 UCHAR Reserved1 : 3; 00164 UCHAR Lun : 3; 00165 00166 union { 00167 UCHAR Flags; 00168 struct { 00169 UCHAR Format : 4; 00170 UCHAR Reserved : 4; 00171 } Fields; 00172 } Byte2; 00173 00174 UCHAR Reserved2[3]; 00175 UCHAR Start_TrackSes;; 00176 UCHAR AllocationLength[2]; 00177 UCHAR Control : 6; 00178 UCHAR Format : 2; 00179 } READ_TOC, *PREAD_TOC; 00180 00181 // Play Audio MSF 00182 struct _PLAY_AUDIO_MSF { 00183 UCHAR OperationCode; 00184 UCHAR Reserved1 : 5; 00185 UCHAR Lun : 3; 00186 UCHAR Reserved2; 00187 UCHAR StartingMSF[3]; 00188 UCHAR EndingMSF[3]; 00189 UCHAR Control; 00190 } PLAY_AUDIO_MSF, *PPLAY_AUDIO_MSF; 00191 00192 // Read SubChannel Data 00193 00194 #define SubChannel_SubQ_Header 0x00 00195 #define SubChannel_SubQ_Block 0x01 00196 00197 struct _SUBCHANNEL { 00198 UCHAR OperationCode; 00199 UCHAR Reserved0 : 1; 00200 UCHAR Msf : 1; 00201 UCHAR Reserved1 : 3; 00202 UCHAR Lun : 3; 00203 UCHAR Reserved2 : 6; 00204 UCHAR SubQ : 1; 00205 UCHAR Reserved3 : 1; 00206 UCHAR Format; 00207 UCHAR Reserved4[2]; 00208 UCHAR TrackNumber; 00209 UCHAR AllocationLength[2]; 00210 UCHAR Control; 00211 } SUBCHANNEL, *PSUBCHANNEL; 00212 00213 // Read CD (by LBA/MSF). Used by Atapi for raw sector reads. 00214 00215 #define ReadCD_SecType_Mask 0x1c 00216 #define ReadCD_SecType_Any 0x00 00217 #define ReadCD_SecType_CDDA 0x04 00218 #define ReadCD_SecType_M1 0x08 00219 #define ReadCD_SecType_M2 0x0c 00220 #define ReadCD_SecType_M2F1 0x10 00221 #define ReadCD_SecType_M2F2 0x14 00222 00223 struct _READ_CD_MSF { 00224 UCHAR OperationCode; 00225 00226 UCHAR Reserved0 : 2; 00227 UCHAR ExpectedSectorType : 3; 00228 UCHAR Reserved1 : 3; 00229 00230 UCHAR Reserved2; 00231 UCHAR Starting_MSF[3]; 00232 UCHAR Ending_MSF[3]; 00233 00234 UCHAR Reserved3 : 1; 00235 UCHAR ErrorFlags : 2; 00236 UCHAR IncludeEDC : 1; 00237 UCHAR IncludeUserData : 1; 00238 UCHAR HeaderCode : 2; 00239 UCHAR IncludeSyncData : 1; 00240 00241 UCHAR SubChannelSelection : 3; 00242 UCHAR Reserved4 : 5; 00243 00244 UCHAR Control; 00245 } READ_CD_MSF, *PREAD_CD_MSF; 00246 00247 struct _READ_CD { 00248 UCHAR OperationCode; 00249 00250 UCHAR Reserved0 : 2; 00251 UCHAR ExpectedSectorType : 3; 00252 UCHAR Reserved1 : 3; 00253 00254 UCHAR LBA[4]; 00255 UCHAR NumOfBlocks[3]; 00256 00257 UCHAR Reserved3 : 1; 00258 UCHAR ErrorFlags : 2; 00259 UCHAR IncludeEDC : 1; 00260 UCHAR IncludeUserData : 1; 00261 UCHAR HeaderCode : 2; 00262 UCHAR IncludeSyncData : 1; 00263 00264 UCHAR SubChannelSelection : 3; 00265 UCHAR Reserved4 : 5; 00266 00267 UCHAR Control; 00268 } READ_CD, *PREAD_CD; 00269 00270 #define WriteCd_RELADR 0x01 00271 #define WriteCd_FUA 0x08 00272 #define WriteCd_DPO 0x10 00273 00274 struct _WRITE_CD { 00275 UCHAR OperationCode; 00276 union { 00277 UCHAR Flags; 00278 struct { 00279 UCHAR RELADR : 1; 00280 UCHAR Reserved0 : 2; 00281 UCHAR FUA : 1; 00282 UCHAR DPO : 1; 00283 UCHAR Reserved1 : 3; 00284 } Fields; 00285 } Byte1; 00286 UCHAR LBA [4]; 00287 UCHAR Reserved1; 00288 UCHAR NumOfBlocks [2]; 00289 UCHAR Reserved2 [3]; 00290 } WRITE_CD, *PWRITE_CD; 00291 00292 // Mode sense 00293 struct _MODE_SENSE { 00294 UCHAR OperationCode; 00295 UCHAR Reserved1 : 3; 00296 UCHAR Dbd : 1; 00297 UCHAR Reserved2 : 1; 00298 UCHAR Lun : 3; 00299 UCHAR PageCode : 6; 00300 UCHAR Pc : 2; 00301 UCHAR Reserved3; 00302 UCHAR AllocationLength; 00303 UCHAR Control; 00304 } MODE_SENSE, *PMODE_SENSE; 00305 00306 struct _MODE_SENSE10 { 00307 UCHAR OperationCode; 00308 UCHAR Reserved1 : 3; 00309 UCHAR Dbd : 1; 00310 UCHAR Reserved2 : 1; 00311 UCHAR Lun : 3; 00312 UCHAR PageCode : 6; 00313 UCHAR Pc : 2; 00314 UCHAR Reserved3[4]; 00315 UCHAR AllocationLength[2]; 00316 UCHAR Control; 00317 } MODE_SENSE10, *PMODE_SENSE10; 00318 00319 // Mode select 00320 struct _MODE_SELECT { 00321 UCHAR OperationCode; 00322 UCHAR SPBit : 1; 00323 UCHAR Reserved1 : 3; 00324 UCHAR PFBit : 1; 00325 UCHAR Lun : 3; 00326 UCHAR Reserved2[2]; 00327 UCHAR ParameterListLength; 00328 UCHAR Control; 00329 } MODE_SELECT, *PMODE_SELECT; 00330 00331 struct _MODE_SELECT10 { 00332 UCHAR OperationCode; 00333 UCHAR SPBit : 1; 00334 UCHAR Reserved1 : 3; 00335 UCHAR PFBit : 1; 00336 UCHAR Lun : 3; 00337 UCHAR Reserved2[5]; 00338 UCHAR ParameterListLength[2]; 00339 UCHAR Control; 00340 } MODE_SELECT10, *PMODE_SELECT10; 00341 00342 struct _LOGSENSE { 00343 UCHAR OperationCode; 00344 UCHAR SPBit : 1; 00345 UCHAR PPCBit : 1; 00346 UCHAR Reserved1 : 3; 00347 UCHAR Lun : 3; 00348 UCHAR PageCode : 6; 00349 UCHAR PCBit : 2; 00350 UCHAR Reserved2; 00351 UCHAR Reserved3; 00352 UCHAR ParameterPointer[2]; // [0]=MSB, [1]=LSB 00353 UCHAR AllocationLength[2]; // [0]=MSB, [1]=LSB 00354 UCHAR Control; 00355 } LOGSENSE, *PLOGSENSE; 00356 00357 struct _SEEK { 00358 UCHAR OperationCode; 00359 UCHAR Reserved1 : 5; 00360 UCHAR Lun : 3; 00361 UCHAR LBA[4]; 00362 UCHAR Reserved2[3]; 00363 UCHAR Control; 00364 } SEEK, *PSEEK; 00365 00366 #define StartStop_Start 0x01 00367 #define StartStop_Load 0x02 00368 00369 struct _START_STOP { 00370 UCHAR OperationCode; 00371 UCHAR Immediate: 1; 00372 UCHAR Reserved1 : 4; 00373 UCHAR Lun : 3; 00374 UCHAR Reserved2[2]; 00375 UCHAR Start : 1; 00376 UCHAR LoadEject : 1; 00377 UCHAR Reserved3 : 6; 00378 UCHAR Control; 00379 } START_STOP, *PSTART_STOP; 00380 00381 struct _MEDIA_REMOVAL { 00382 UCHAR OperationCode; 00383 UCHAR Reserved1 : 5; 00384 UCHAR Lun : 3; 00385 UCHAR Reserved2[2]; 00386 UCHAR Prevent; 00387 UCHAR Control; 00388 } MEDIA_REMOVAL, *PMEDIA_REMOVAL; 00389 00390 struct _READ_FORMAT_CAPACITIES { 00391 UCHAR OperationCode; 00392 union { 00393 UCHAR Flags; 00394 struct { 00395 UCHAR Reserved0 : 5; 00396 UCHAR Reserved1 : 3; 00397 } Fields; 00398 } Byte1; 00399 UCHAR Reserved0[5]; 00400 UCHAR AllocationLength[2]; 00401 UCHAR Control; 00402 } READ_FORMAT_CAPACITIES, *PREAD_FORMAT_CAPACITIES; 00403 00404 // Atapi 2.5 Changer 12-byte CDBs 00405 #define LoadUnload_Start 0x01 00406 #define LoadUnload_Load 0x02 00407 00408 struct _LOAD_UNLOAD { 00409 UCHAR OperationCode; 00410 UCHAR Immediate : 1; 00411 UCHAR Reserved1 : 7; 00412 UCHAR Reserved2[2]; 00413 UCHAR Start : 1; 00414 UCHAR LoadEject : 1; 00415 UCHAR Reserved3: 6; 00416 UCHAR Reserved4[3]; 00417 UCHAR Slot; 00418 UCHAR Reserved5[3]; 00419 } LOAD_UNLOAD, *PLOAD_UNLOAD; 00420 00421 struct _MECH_STATUS { 00422 UCHAR OperationCode; 00423 UCHAR Reserved0[7]; 00424 UCHAR AllocationLength[2]; 00425 UCHAR Reserved2[2]; 00426 } MECH_STATUS, *PMECH_STATUS; 00427 00428 struct _LOCK_DOOR { 00429 UCHAR OperationCode; 00430 UCHAR Reserved0[9]; 00431 } LOCK_DOOR, *PLOCK_DOOR; 00432 00433 #define EventStat_Immed 0x01 00434 00435 #define EventStat_Class_OpChange 0x02 00436 #define EventStat_Class_PM 0x04 00437 #define EventStat_Class_ExternalReq 0x08 00438 #define EventStat_Class_Media 0x10 00439 #define EventStat_Class_MultiInit 0x20 00440 #define EventStat_Class_DevBusy 0x40 00441 00442 struct _GET_EVENT_STATUS { 00443 UCHAR OperationCode; 00444 union { 00445 UCHAR Flags; 00446 struct { 00447 UCHAR Immed : 1; 00448 UCHAR Reserved0 : 7; 00449 } Fields; 00450 } Byte1; 00451 UCHAR Reserved0[2]; 00452 UCHAR NotificationClass; 00453 UCHAR Reserved1[2]; 00454 UCHAR AllocationLength[2]; 00455 UCHAR Control; 00456 } GET_EVENT_STATUS, *PGET_EVENT_STATUS; 00457 00458 struct _READ_DISC_INFO { 00459 UCHAR OperationCode; 00460 UCHAR Reserved0[6]; 00461 UCHAR AllocationLength[2]; 00462 UCHAR Reserved2[3]; 00463 } READ_DISC_INFO, *PREAD_DISC_INFO; 00464 00465 #define ReadTrackInfo_Type_Mask 0x01 00466 #define ReadTrackInfo_Type_LBA 0x00 00467 #define ReadTrackInfo_Type_Track 0x01 00468 00469 #define ReadTrackInfo_LastTrk 0xff 00470 00471 struct _READ_TRACK_INFO { 00472 UCHAR OperationCode; 00473 UCHAR Track : 1; 00474 UCHAR Reserved0 : 7; 00475 UCHAR LBA_TrkNum [4]; 00476 UCHAR Reserved1; 00477 UCHAR AllocationLength[2]; 00478 UCHAR Reserved2[3]; 00479 } READ_TRACK_INFO, *PREAD_TRACK_INFO; 00480 00481 #define ReadTrackInfo3_Type_Mask 0x03 00482 #define ReadTrackInfo3_Type_LBA ReadTrackInfo_Type_LBA 00483 #define ReadTrackInfo3_Type_Track ReadTrackInfo_Type_Track 00484 #define ReadTrackInfo3_Type_Ses 0x02 00485 00486 #define ReadTrackInfo3_LastTrk ReadTrackInfo_LastTrk 00487 #define ReadTrackInfo3_DiscLeadIn 0x00 // for Track type 00488 00489 struct _READ_TRACK_INFO_3 { 00490 UCHAR OperationCode; 00491 UCHAR DataType : 2; 00492 UCHAR Reserved0 : 6; 00493 UCHAR LBA_TrkNum [4]; 00494 UCHAR Reserved1; 00495 UCHAR AllocationLength[2]; 00496 UCHAR Reserved2[3]; 00497 } READ_TRACK_INFO_3, *PREAD_TRACK_INFO_3; 00498 00499 struct _RESERVE_TRACK { 00500 UCHAR OperationCode; 00501 UCHAR Reserved0[4]; 00502 UCHAR Size[4]; 00503 UCHAR Reserved2[3]; 00504 } RESERVE_TRACK, *PRESERVE_TRACK; 00505 00506 #define CloseTrkSes_Immed 0x01 00507 00508 #define CloseTrkSes_Trk 0x01 00509 #define CloseTrkSes_Ses 0x02 00510 00511 #define CloseTrkSes_LastTrkSes 0xff 00512 00513 #define CloseTrkSes_Delay DEF_I64(3100000000) // 310 s 00514 00515 struct _CLOSE_TRACK_SESSION { 00516 UCHAR OperationCode; 00517 union { 00518 UCHAR Flags; 00519 struct { 00520 UCHAR Immed : 1; 00521 UCHAR Reserved0 : 7; 00522 } Fields; 00523 } Byte1; 00524 union { 00525 UCHAR Flags; 00526 struct { 00527 UCHAR Track : 1; 00528 UCHAR Session : 1; 00529 UCHAR Reserved0 : 6; 00530 } Fields; 00531 } Byte2; 00532 UCHAR Reserved1 [2]; 00533 UCHAR TrackNum; 00534 UCHAR Reserved2 [6]; 00535 00536 } CLOSE_TRACK_SESSION, *PCLOSE_TRACK_SESSION; 00537 00538 struct _SET_CD_SPEED { 00539 UCHAR OperationCode; 00540 UCHAR Reserved0; 00541 UCHAR ReadSpeed [2]; // Kbyte/sec 00542 UCHAR WriteSpeed [2]; // Kbyte/sec 00543 UCHAR Reserved1[6]; 00544 } SET_CD_SPEED, *PSET_CD_SPEED; 00545 00546 #define SyncCache_RELADR 0x01 00547 #define SyncCache_Immed 0x02 00548 00549 struct _SYNCHRONIZE_CACHE { 00550 UCHAR OperationCode; 00551 union { 00552 UCHAR Flags; 00553 struct { 00554 UCHAR RELADR : 1; 00555 UCHAR Immed : 1; 00556 UCHAR Reserved0 : 6; // All these are unused by drive 00557 } Fields; 00558 } Byte1; 00559 UCHAR LBA [4]; 00560 UCHAR Reserved1; 00561 UCHAR NumOfBlocks [2]; 00562 UCHAR Reserved2 [3]; 00563 /* 00564 UCHAR Unused [11];*/ 00565 } SYNCHRONIZE_CACHE, *PSYNCHRONIZE_CACHE; 00566 00567 #define BlankMedia_Mask 0x07 00568 #define BlankMedia_Complete 0x00 00569 #define BlankMedia_Minimal 0x01 00570 #define BlankMedia_Track 0x02 00571 #define BlankMedia_UnreserveTrack 0x03 00572 #define BlankMedia_TrackTail 0x04 00573 #define BlankMedia_UncloseLastSes 0x05 00574 #define BlankMedia_EraseSes 0x06 00575 #define BlankMedia_Immed 0x10 00576 00577 struct _BLANK_MEDIA { 00578 UCHAR OperationCode; 00579 union { 00580 UCHAR Flags; 00581 struct { 00582 UCHAR BlankType : 3; 00583 UCHAR Reserved0 : 1; 00584 UCHAR Immed : 1; 00585 UCHAR Reserved1 : 3; 00586 } Fields; 00587 } Byte1; 00588 UCHAR StartAddr_TrkNum [4]; 00589 UCHAR Reserved2 [6]; 00590 } BLANK_MEDIA, *PBLANK_MEDIA; 00591 00592 #define SendKey_ReportAGID 0x00 00593 #define SendKey_ChallengeKey 0x01 00594 #define SendKey_Key1 0x02 00595 #define SendKey_Key2 0x03 00596 #define SendKey_TitleKey 0x04 00597 #define SendKey_ReportASF 0x05 00598 #define SendKey_InvalidateAGID 0x3F 00599 00600 struct _SEND_KEY { 00601 UCHAR OperationCode; 00602 UCHAR Reserved1 : 5; 00603 UCHAR Lun : 3; 00604 UCHAR Reserved2[6]; 00605 UCHAR ParameterListLength[2]; 00606 UCHAR KeyFormat : 6; 00607 UCHAR AGID : 2; 00608 UCHAR Control; 00609 } SEND_KEY, *PSEND_KEY; 00610 00611 struct _REPORT_KEY { 00612 UCHAR OperationCode; // 0xA4 00613 UCHAR Reserved1 : 5; 00614 UCHAR Lun : 3; 00615 UCHAR LBA[4]; // for title key 00616 UCHAR Reserved2[2]; 00617 UCHAR AllocationLength[2]; 00618 UCHAR KeyFormat : 6; 00619 UCHAR AGID : 2; 00620 UCHAR Control; 00621 } REPORT_KEY, *PREPORT_KEY; 00622 00623 struct _READ_DVD_STRUCTURE { 00624 UCHAR OperationCode; // 0xAD 00625 UCHAR Reserved1 : 5; 00626 UCHAR Lun : 3; 00627 UCHAR RMDBlockNumber[4]; 00628 UCHAR LayerNumber; 00629 UCHAR Format; 00630 UCHAR AllocationLength[2]; // [0]=MSB, [1]=LSB 00631 UCHAR Reserved3 : 6; 00632 UCHAR AGID : 2; 00633 UCHAR Control; 00634 } READ_DVD_STRUCTURE, *PREAD_DVD_STRUCTURE; 00635 00636 struct _READ_BUFFER_CAPACITY { 00637 UCHAR OperationCode; 00638 UCHAR Reserved0 [6]; 00639 UCHAR AllocationLength[2]; 00640 UCHAR Reserved1 [3]; 00641 } READ_BUFFER_CAPACITY, *PREAD_BUFFER_CAPACITY; 00642 00643 struct _GET_CONFIGURATION { 00644 UCHAR OperationCode; 00645 union { 00646 UCHAR Flags; 00647 struct { 00648 UCHAR RT : 2; 00649 UCHAR Reserved0 : 6; 00650 } Fields; 00651 } Byte1; 00652 UCHAR StartFeatureNum [2]; 00653 UCHAR Reserved0 [3]; 00654 UCHAR AllocationLength[2]; 00655 UCHAR Control; 00656 } GET_CONFIGURATION, *PGET_CONFIGURATION; 00657 00658 struct _SET_READ_AHEAD { 00659 UCHAR OperationCode; 00660 UCHAR Reserved0; 00661 UCHAR TriggerLBA[4]; 00662 UCHAR ReadAheadLBA[4]; 00663 UCHAR Reserved1; 00664 UCHAR Control; 00665 } SET_READ_AHEAD, *PSET_READ_AHEAD; 00666 00667 #define SendOpc_DoOpc 0x01 00668 00669 struct _SEND_OPC_INFO { 00670 UCHAR OperationCode; 00671 union { 00672 UCHAR Flags; 00673 struct { 00674 UCHAR DoOpc : 1; 00675 UCHAR Reserved0 : 4; 00676 UCHAR Reserved1 : 3; 00677 } Fields; 00678 } Byte1; 00679 UCHAR Reserved0 [5]; 00680 UCHAR AllocationLength[2]; 00681 UCHAR Control; 00682 } SEND_OPC_INFO, *PSEND_OPC_INFO; 00683 00684 struct _SEND_CUE_SHEET { 00685 UCHAR OperationCode; 00686 UCHAR Reserved0 [5]; 00687 UCHAR AllocationLength[3]; 00688 UCHAR Control; 00689 } SEND_CUE_SHEET, *PSEND_CUE_SHEET; 00690 00691 struct _CDB12 { 00692 UCHAR OperationCode; 00693 UCHAR Params[11]; 00694 } CDB12, *PCDB12; 00695 00696 struct _CDB12READWRITE { 00697 UCHAR OperationCode; 00698 union { 00699 UCHAR Flags; 00700 struct { 00701 UCHAR RELADR : 1; 00702 UCHAR Reserved0 : 2; 00703 UCHAR FUA : 1; 00704 UCHAR DPO : 1; 00705 UCHAR Reserved1 : 3; 00706 } Fields; 00707 } Byte1; 00708 UCHAR LBA [4]; 00709 UCHAR NumOfBlocks [4]; 00710 UCHAR Reserved1[2]; 00711 } CDB12READWRITE, *PCDB12READWRITE; 00712 00713 // Plextor Read CD-DA 00714 struct _PLXTR_READ_CDDA { 00715 UCHAR OperationCode; 00716 UCHAR Reserved0 : 5; 00717 UCHAR Lun :3; 00718 UCHAR LBA[4]; 00719 UCHAR TransferBlock[4]; 00720 UCHAR SubCode; 00721 UCHAR Control; 00722 } PLXTR_READ_CDDA, *PPLXTR_READ_CDDA; 00723 00724 // NEC Read CD-DA 00725 struct _NEC_READ_CDDA { 00726 UCHAR OperationCode; 00727 UCHAR Reserved0; 00728 UCHAR LBA[4]; 00729 UCHAR Reserved1; 00730 UCHAR TransferBlock[2]; 00731 UCHAR Control; 00732 } NEC_READ_CDDA, *PNEC_READ_CDDA; 00733 00734 } CDB, *PCDB; 00735 00736 // Command Descriptor Block constants. 00737 00738 #define CDB6GENERIC_LENGTH 6 00739 #define CDB10GENERIC_LENGTH 10 00740 #define CDB12GENERIC_LENGTH 12 00741 00742 #define MAXIMUM_NUMBER_OF_TRACKS 100 00743 #define MAXIMUM_NUMBER_OF_SESSIONS 1024 //maximal number of entries in Read Full TOC 00744 00745 #define SETBITON 1 00746 #define SETBITOFF 0 00747 00748 // Mode Sense/Select page constants. 00749 00750 #define MODE_PAGE_ERROR_RECOVERY 0x01 00751 #define MODE_PAGE_WRITE_PARAMS 0x05 00752 #define MODE_PAGE_VERIFY_ERROR 0x07 // shall not be used 00753 #define MODE_PAGE_CACHING 0x08 // undocumented, but used by DirectCd 00754 #define MODE_PAGE_MEDIUM_TYPES 0x0B // shall not be used 00755 #define MODE_PAGE_CD_DEVICE_PARAMS 0x0D 00756 #define MODE_PAGE_CD_AUDIO_CONTROL 0x0E 00757 #define MODE_PAGE_POWER_CONDITION 0x1A 00758 #define MODE_PAGE_FAIL_REPORT 0x1C 00759 #define MODE_PAGE_TIMEOUT_AND_PROTECT 0x1D 00760 #define MODE_PAGE_PHILIPS_SECTOR_TYPE 0x21 00761 #define MODE_PAGE_CAPABILITIES 0x2A 00762 00763 #define MODE_SENSE_RETURN_ALL 0x3f 00764 00765 #define MODE_SENSE_CURRENT_VALUES 0x00 00766 #define MODE_SENSE_CHANGEABLE_VALUES 0x40 00767 #define MODE_SENSE_DEFAULT_VAULES 0x80 00768 #define MODE_SENSE_SAVED_VALUES 0xc0 00769 00770 // SCSI CDB operation codes 00771 00772 #define SCSIOP_TEST_UNIT_READY 0x00 00773 #define SCSIOP_REZERO_UNIT 0x01 00774 #define SCSIOP_REWIND 0x01 00775 #define SCSIOP_REQUEST_BLOCK_ADDR 0x02 00776 #define SCSIOP_REQUEST_SENSE 0x03 00777 #define SCSIOP_FORMAT_UNIT 0x04 00778 #define SCSIOP_READ_BLOCK_LIMITS 0x05 00779 #define SCSIOP_REASSIGN_BLOCKS 0x07 00780 #define SCSIOP_READ6 0x08 00781 #define SCSIOP_RECEIVE 0x08 00782 #define SCSIOP_WRITE6 0x0A 00783 #define SCSIOP_PRINT 0x0A 00784 #define SCSIOP_SEND 0x0A 00785 #define SCSIOP_SEEK6 0x0B 00786 #define SCSIOP_TRACK_SELECT 0x0B 00787 #define SCSIOP_SLEW_PRINT 0x0B 00788 #define SCSIOP_SEEK_BLOCK 0x0C 00789 #define SCSIOP_PARTITION 0x0D 00790 #define SCSIOP_READ_REVERSE 0x0F 00791 #define SCSIOP_WRITE_FILEMARKS 0x10 00792 #define SCSIOP_FLUSH_BUFFER 0x10 00793 #define SCSIOP_SPACE 0x11 00794 #define SCSIOP_INQUIRY 0x12 00795 #define SCSIOP_VERIFY6 0x13 00796 #define SCSIOP_RECOVER_BUF_DATA 0x14 00797 #define SCSIOP_MODE_SELECT 0x15 00798 #define SCSIOP_RESERVE_UNIT 0x16 00799 #define SCSIOP_RELEASE_UNIT 0x17 00800 #define SCSIOP_COPY 0x18 00801 #define SCSIOP_ERASE 0x19 00802 #define SCSIOP_MODE_SENSE 0x1A 00803 #define SCSIOP_START_STOP_UNIT 0x1B 00804 #define SCSIOP_STOP_PRINT 0x1B 00805 #define SCSIOP_LOAD_UNLOAD 0x1B 00806 #define SCSIOP_RECEIVE_DIAGNOSTIC 0x1C 00807 #define SCSIOP_SEND_DIAGNOSTIC 0x1D 00808 #define SCSIOP_MEDIUM_REMOVAL 0x1E 00809 #define SCSIOP_READ_FORMAT_CAPACITY 0x23 00810 #define SCSIOP_READ_CAPACITY 0x25 00811 #define SCSIOP_READ 0x28 00812 #define SCSIOP_WRITE 0x2A 00813 #define SCSIOP_WRITE_CD 0x2A 00814 #define SCSIOP_SEEK 0x2B 00815 #define SCSIOP_LOCATE 0x2B 00816 #define SCSIOP_ERASE10 0x2C 00817 #define SCSIOP_WRITE_VERIFY 0x2E 00818 #define SCSIOP_VERIFY 0x2F 00819 #define SCSIOP_SEARCH_DATA_HIGH 0x30 00820 #define SCSIOP_SEARCH_DATA_EQUAL 0x31 00821 #define SCSIOP_SEARCH_DATA_LOW 0x32 00822 #define SCSIOP_SET_LIMITS 0x33 00823 #define SCSIOP_READ_POSITION 0x34 00824 #define SCSIOP_SYNCHRONIZE_CACHE 0x35 00825 #define SCSIOP_COMPARE 0x39 00826 #define SCSIOP_COPY_COMPARE 0x3A 00827 #define SCSIOP_COPY_VERIFY 0x3A 00828 #define SCSIOP_WRITE_DATA_BUFF 0x3B 00829 #define SCSIOP_READ_DATA_BUFF 0x3C 00830 #define SCSIOP_CHANGE_DEFINITION 0x40 00831 #define SCSIOP_PLAY_AUDIO10 0x41 00832 #define SCSIOP_READ_SUB_CHANNEL 0x42 00833 #define SCSIOP_READ_TOC 0x43 00834 #define SCSIOP_READ_HEADER 0x44 00835 #define SCSIOP_PLAY_AUDIO 0x45 00836 #define SCSIOP_GET_CONFIGURATION 0x46 00837 #define SCSIOP_PLAY_AUDIO_MSF 0x47 00838 #define SCSIOP_PLAY_TRACK_INDEX 0x48 00839 #define SCSIOP_PLAY_TRACK_RELATIVE 0x49 00840 #define SCSIOP_GET_EVENT_STATUS 0x4A 00841 #define SCSIOP_PAUSE_RESUME 0x4B 00842 #define SCSIOP_LOG_SELECT 0x4C 00843 #define SCSIOP_LOG_SENSE 0x4D 00844 #define SCSIOP_STOP_PLAY_SCAN 0x4E 00845 #define SCSIOP_READ_DISC_INFO 0x51 00846 #define SCSIOP_READ_TRACK_INFO 0x52 00847 #define SCSIOP_RESERVE_TRACK 0x53 00848 #define SCSIOP_SEND_OPC_INFO 0x54 00849 #define SCSIOP_MODE_SELECT10 0x55 00850 #define SCSIOP_REPAIR_TRACK 0x58 // obsolete 00851 #define SCSIOP_READ_MASTER_CUE 0x59 00852 #define SCSIOP_MODE_SENSE10 0x5A 00853 #define SCSIOP_CLOSE_TRACK_SESSION 0x5B 00854 #define SCSIOP_READ_BUFFER_CAPACITY 0x5C 00855 #define SCSIOP_SEND_CUE_SHEET 0x5D 00856 #define SCSIOP_BLANK 0xA1 00857 #define SCSIOP_SEND_KEY 0xA3 00858 #define SCSIOP_REPORT_KEY 0xA4 00859 #define SCSIOP_PLAY_AUDIO12 0xA5 00860 #define SCSIOP_LOAD_UNLOAD_SLOT 0xA6 00861 #define SCSIOP_SET_READ_AHEAD 0xA7 00862 #define SCSIOP_READ12 0xA8 00863 #define SCSIOP_WRITE12 0xAA 00864 #define SCSIOP_SEEK12 0xAB 00865 #define SCSIOP_GET_PERFORMANCE 0xAC 00866 #define SCSIOP_READ_DVD_STRUCTURE 0xAD 00867 #define SCSIOP_WRITE_VERIFY12 0xAE 00868 #define SCSIOP_VERIFY12 0xAF 00869 #define SCSIOP_SET_STREAMING 0xB6 00870 #define SCSIOP_READ_CD_MSF 0xB9 00871 #define SCSIOP_SET_CD_SPEED 0xBB 00872 #define SCSIOP_MECHANISM_STATUS 0xBD 00873 #define SCSIOP_READ_CD 0xBE 00874 #define SCSIOP_SEND_DVD_STRUCTURE 0xBF 00875 #define SCSIOP_DOORLOCK 0xDE // lock door on removable drives 00876 #define SCSIOP_DOORUNLOCK 0xDF // unlock door on removable drives 00877 00878 // If the IMMED bit is 1, status is returned as soon 00879 // as the operation is initiated. If the IMMED bit 00880 // is 0, status is not returned until the operation 00881 // is completed. 00882 00883 #define CDB_RETURN_ON_COMPLETION 0 00884 #define CDB_RETURN_IMMEDIATE 1 00885 00886 // end_ntminitape 00887 00888 // CDB Force media access used in extended read and write commands. 00889 00890 #define CDB_FORCE_MEDIA_ACCESS 0x08 00891 00892 // Denon CD ROM operation codes 00893 00894 #define SCSIOP_DENON_EJECT_DISC 0xE6 00895 #define SCSIOP_DENON_STOP_AUDIO 0xE7 00896 #define SCSIOP_DENON_PLAY_AUDIO 0xE8 00897 #define SCSIOP_DENON_READ_TOC 0xE9 00898 #define SCSIOP_DENON_READ_SUBCODE 0xEB 00899 00900 // Philips/Matshushita CD-R(W) operation codes 00901 00902 #define SCSIOP_PHILIPS_GET_NWA 0xE2 00903 #define SCSIOP_PHILIPS_RESERVE_TRACK 0xE4 00904 #define SCSIOP_PHILIPS_WRITE_TRACK 0xE6 00905 #define SCSIOP_PHILIPS_LOAD_UNLOAD 0xE7 00906 #define SCSIOP_PHILIPS_CLOSE_TRACK_SESSION 0xE9 00907 #define SCSIOP_PHILIPS_RECOVER_BUF_DATA 0xEC 00908 #define SCSIOP_PHILIPS_READ_SESSION_INFO 0xEE 00909 00910 // Plextor operation codes 00911 00912 #define SCSIOP_PLEXTOR_READ_CDDA 0xD8 00913 00914 // NEC operation codes 00915 00916 #define SCSIOP_NEC_READ_CDDA 0xD4 00917 00918 // SCSI Bus Messages 00919 00920 #define SCSIMESS_ABORT 0x06 00921 #define SCSIMESS_ABORT_WITH_TAG 0x0D 00922 #define SCSIMESS_BUS_DEVICE_RESET 0X0C 00923 #define SCSIMESS_CLEAR_QUEUE 0X0E 00924 #define SCSIMESS_COMMAND_COMPLETE 0X00 00925 #define SCSIMESS_DISCONNECT 0X04 00926 #define SCSIMESS_EXTENDED_MESSAGE 0X01 00927 #define SCSIMESS_IDENTIFY 0X80 00928 #define SCSIMESS_IDENTIFY_WITH_DISCON 0XC0 00929 #define SCSIMESS_IGNORE_WIDE_RESIDUE 0X23 00930 #define SCSIMESS_INITIATE_RECOVERY 0X0F 00931 #define SCSIMESS_INIT_DETECTED_ERROR 0X05 00932 #define SCSIMESS_LINK_CMD_COMP 0X0A 00933 #define SCSIMESS_LINK_CMD_COMP_W_FLAG 0X0B 00934 #define SCSIMESS_MESS_PARITY_ERROR 0X09 00935 #define SCSIMESS_MESSAGE_REJECT 0X07 00936 #define SCSIMESS_NO_OPERATION 0X08 00937 #define SCSIMESS_HEAD_OF_QUEUE_TAG 0X21 00938 #define SCSIMESS_ORDERED_QUEUE_TAG 0X22 00939 #define SCSIMESS_SIMPLE_QUEUE_TAG 0X20 00940 #define SCSIMESS_RELEASE_RECOVERY 0X10 00941 #define SCSIMESS_RESTORE_POINTERS 0X03 00942 #define SCSIMESS_SAVE_DATA_POINTER 0X02 00943 #define SCSIMESS_TERMINATE_IO_PROCESS 0X11 00944 00945 // SCSI Extended Message operation codes 00946 00947 #define SCSIMESS_MODIFY_DATA_POINTER 0X00 00948 #define SCSIMESS_SYNCHRONOUS_DATA_REQ 0X01 00949 #define SCSIMESS_WIDE_DATA_REQUEST 0X03 00950 00951 // SCSI Extended Message Lengths 00952 00953 #define SCSIMESS_MODIFY_DATA_LENGTH 5 00954 #define SCSIMESS_SYNCH_DATA_LENGTH 3 00955 #define SCSIMESS_WIDE_DATA_LENGTH 2 00956 00957 // SCSI extended message structure 00958 00959 typedef struct _SCSI_EXTENDED_MESSAGE { 00960 UCHAR InitialMessageCode; 00961 UCHAR MessageLength; 00962 UCHAR MessageType; 00963 union _EXTENDED_ARGUMENTS { 00964 00965 struct { 00966 UCHAR Modifier[4]; 00967 } Modify; 00968 00969 struct { 00970 UCHAR TransferPeriod; 00971 UCHAR ReqAckOffset; 00972 } Synchronous; 00973 00974 struct{ 00975 UCHAR Width; 00976 } Wide; 00977 }ExtendedArguments; 00978 }SCSI_EXTENDED_MESSAGE, *PSCSI_EXTENDED_MESSAGE; 00979 00980 // SCSI bus status codes. 00981 00982 #define SCSISTAT_GOOD 0x00 00983 #define SCSISTAT_CHECK_CONDITION 0x02 00984 #define SCSISTAT_CONDITION_MET 0x04 00985 #define SCSISTAT_BUSY 0x08 00986 #define SCSISTAT_INTERMEDIATE 0x10 00987 #define SCSISTAT_INTERMEDIATE_COND_MET 0x14 00988 #define SCSISTAT_RESERVATION_CONFLICT 0x18 00989 #define SCSISTAT_COMMAND_TERMINATED 0x22 00990 #define SCSISTAT_QUEUE_FULL 0x28 00991 00992 // Enable Vital Product Data Flag (EVPD) 00993 // used with INQUIRY command. 00994 00995 #define CDB_INQUIRY_EVPD 0x01 00996 00997 // retry time (in deci-seconds) 00998 #define NOT_READY_RETRY_INTERVAL 20 00999 01000 // Defines for format CDB 01001 #define LUN0_FORMAT_SAVING_DEFECT_LIST 0 01002 #define USE_DEFAULTMSB 0 01003 #define USE_DEFAULTLSB 0 01004 01005 #define START_UNIT_CODE 0x01 01006 #define STOP_UNIT_CODE 0x00 01007 01008 // Inquiry buffer structure. This is the data returned from the target 01009 // after it receives an inquiry. 01010 // 01011 // This structure may be extended by the number of bytes specified 01012 // in the field AdditionalLength. The defined size constant only 01013 // includes fields through ProductRevisionLevel. 01014 // 01015 // The NT SCSI drivers are only interested in the first 36 bytes of data. 01016 01017 #define INQUIRYDATABUFFERSIZE 36 01018 01019 typedef struct _INQUIRYDATA { 01020 UCHAR DeviceType : 5; 01021 UCHAR DeviceTypeQualifier : 3; 01022 UCHAR DeviceTypeModifier : 7; 01023 UCHAR RemovableMedia : 1; 01024 UCHAR Versions; 01025 UCHAR ResponseDataFormat; 01026 UCHAR AdditionalLength; 01027 UCHAR Reserved[2]; 01028 UCHAR SoftReset : 1; 01029 UCHAR CommandQueue : 1; 01030 UCHAR Reserved2 : 1; 01031 UCHAR LinkedCommands : 1; 01032 UCHAR Synchronous : 1; 01033 UCHAR Wide16Bit : 1; 01034 UCHAR Wide32Bit : 1; 01035 UCHAR RelativeAddressing : 1; 01036 UCHAR VendorId[8]; 01037 UCHAR ProductId[16]; 01038 UCHAR ProductRevisionLevel[4]; 01039 UCHAR VendorSpecific[20]; 01040 UCHAR Reserved3[40]; 01041 } INQUIRYDATA, *PINQUIRYDATA; 01042 01043 // Inquiry defines. Used to interpret data returned from target as result 01044 // of inquiry command. 01045 01046 // DeviceType field 01047 01048 #define DIRECT_ACCESS_DEVICE 0x00 // disks 01049 #define SEQUENTIAL_ACCESS_DEVICE 0x01 // tapes 01050 #define PRINTER_DEVICE 0x02 // printers 01051 #define PROCESSOR_DEVICE 0x03 // scanners, printers, etc 01052 #define WRITE_ONCE_READ_MULTIPLE_DEVICE 0x04 // worms 01053 #define READ_ONLY_DIRECT_ACCESS_DEVICE 0x05 // cdroms 01054 #define SCANNER_DEVICE 0x06 // scanners 01055 #define OPTICAL_DEVICE 0x07 // optical disks 01056 #define MEDIUM_CHANGER 0x08 // jukebox 01057 #define COMMUNICATION_DEVICE 0x09 // network 01058 #define LOGICAL_UNIT_NOT_PRESENT_DEVICE 0x7F 01059 #define DEVICE_QUALIFIER_NOT_SUPPORTED 0x03 01060 01061 // DeviceTypeQualifier field 01062 01063 #define DEVICE_CONNECTED 0x00 01064 01065 // Sense Data Format 01066 01067 typedef struct _SENSE_DATA { 01068 UCHAR ErrorCode:7; 01069 UCHAR Valid:1; 01070 UCHAR SegmentNumber; 01071 UCHAR SenseKey:4; 01072 UCHAR Reserved:1; 01073 UCHAR IncorrectLength:1; 01074 UCHAR EndOfMedia:1; 01075 UCHAR FileMark:1; 01076 UCHAR Information[4]; 01077 UCHAR AdditionalSenseLength; 01078 UCHAR CommandSpecificInformation[4]; 01079 UCHAR AdditionalSenseCode; 01080 UCHAR AdditionalSenseCodeQualifier; 01081 UCHAR FieldReplaceableUnitCode; 01082 UCHAR SenseKeySpecific[3]; 01083 } SENSE_DATA, *PSENSE_DATA; 01084 01085 // Default request sense buffer size 01086 01087 #define SENSE_BUFFER_SIZE 18 01088 01089 // Sense keys 01090 01091 #define SCSI_SENSE_NO_SENSE 0x00 01092 #define SCSI_SENSE_RECOVERED_ERROR 0x01 01093 #define SCSI_SENSE_NOT_READY 0x02 01094 #define SCSI_SENSE_MEDIUM_ERROR 0x03 01095 #define SCSI_SENSE_HARDWARE_ERROR 0x04 01096 #define SCSI_SENSE_ILLEGAL_REQUEST 0x05 01097 #define SCSI_SENSE_UNIT_ATTENTION 0x06 01098 #define SCSI_SENSE_DATA_PROTECT 0x07 01099 #define SCSI_SENSE_BLANK_CHECK 0x08 01100 #define SCSI_SENSE_UNIQUE 0x09 01101 #define SCSI_SENSE_COPY_ABORTED 0x0A 01102 #define SCSI_SENSE_ABORTED_COMMAND 0x0B 01103 #define SCSI_SENSE_EQUAL 0x0C 01104 #define SCSI_SENSE_VOL_OVERFLOW 0x0D 01105 #define SCSI_SENSE_MISCOMPARE 0x0E 01106 #define SCSI_SENSE_RESERVED 0x0F 01107 01108 // Additional Sense codes 01109 01110 // SK = 0x00 01111 #define SCSI_ADSENSE_NO_SENSE 0x00 01112 01113 // SK = 0x01 01114 #define SCSI_ADSENSE_WARNING 0x0B 01115 #define SCSI_ADSENSE_REC_DATA_NOECC 0x17 01116 #define SCSI_ADSENSE_REC_DATA_ECC 0x18 01117 #define SCSI_ADSENSE_ROUNDED_PARAM 0x37 01118 #define SCSI_ADSENSE_FAILURE_PREDICTED 0x5D 01119 #define SCSI_ADSENSE_CD_CONTROL_ERR 0x73 01120 01121 // SK = 0x02 01122 #define SCSI_ADSENSE_LUN_NOT_READY 0x04 01123 #define SCSI_ADSENSE_INCOMPATIBLE_MEDIA 0x30 01124 #define SCSI_ADSENSE_INVALID_MEDIA SCSI_ADSENSE_INCOMPATIBLE_MEDIA // for w2k 01125 #define SCSI_ADSENSE_NO_MEDIA_IN_DEVICE 0x3A 01126 #define SCSI_ADSENSE_POSITION_ERROR 0x3B 01127 #define SCSI_ADSENSE_NOT_SELF_CONFIGURED 0x3E 01128 01129 01130 // SK = 0x03 01131 #define SCSI_ADSENSE_NO_SEEK 0x02 01132 #define SCSI_ADSENSE_NO_REFERENCE 0x06 01133 #define SCSI_ADSENSE_CD_WRITE_ERROR 0x0C 01134 #define SCSI_ADSENSE_CD_READ_ERROR 0x11 01135 #define SCSI_ADSENSE_TRACK_ERROR 0x14 01136 #define SCSI_ADSENSE_SEEK_ERROR 0x15 01137 #define SCSI_ADSENSE_FORMAT_CORRUPTED 0x31 01138 #define SCSI_ADSENSE_ENCLOSURE_FAILURE 0x34 01139 #define SCSI_ADSENSE_ENCLOSURE_SERVICE 0x35 01140 #define SCSI_ADSENSE_ERASE_ERROR 0x51 01141 #define SCSI_ADSENSE_UNRECOVERED_TOC 0x57 01142 #define SCSI_ADSENSE_SESSION_FIXATION 0x71 01143 //#define SCSI_ADSENSE_CD_CONTROL_ERR 0x73 // redefinition 01144 01145 // SK = 0x04 01146 #define SCSI_ADSENSE_CLEAN_REQUEST 0x00 01147 #define SCSI_ADSENSE_SELECT 0x04 01148 #define SCSI_ADSENSE_COMMUNICATION 0x08 01149 #define SCSI_ADSENSE_LOST_STREAMING 0x09 01150 #define SCSI_ADSENSE_SYNC_ERROR 0x1B 01151 #define SCSI_ADSENSE_MECH_ERROR 0x3B 01152 #define SCSI_ADSENSE_LUN_ERROR 0x3E 01153 #define SCSI_ADSENSE_DIAGNOSTIC 0x40 01154 #define SCSI_ADSENSE_INTERNAL 0x44 01155 #define SCSI_ADSENSE_SOFT_RESET 0x46 01156 #define SCSI_ADSENSE_SCSI_PARITY 0x47 01157 #define SCSI_ADSENSE_CMD_PHASE 0x4A 01158 #define SCSI_ADSENSE_DATA_PHASE 0x4B 01159 #define SCSI_ADSENSE_SELF_CONFIG 0x4C 01160 #define SCSI_ADSENSE_MEDIUM_REMOVAL 0x53 01161 #define SCSI_ADSENSE_VOLTAGE 0x65 01162 01163 // SK = 0x05 01164 #define SCSI_ADSENSE_AUDIO_PLAY 0x00 01165 #define SCSI_ADSENSE_MULTISELECT 0x07 01166 #define SCSI_ADSENSE_INVALID_PARAM_LENGTH 0x1A 01167 #define SCSI_ADSENSE_ILLEGAL_COMMAND 0x20 01168 #define SCSI_ADSENSE_ILLEGAL_BLOCK 0x21 01169 #define SCSI_ADSENSE_INVALID_CDB 0x24 01170 #define SCSI_ADSENSE_INVALID_LUN 0x25 01171 #define SCSI_ADSENSE_INVALID_VALUE 0x26 01172 #define SCSI_ADSENSE_WRITE_PROTECT 0x27 01173 #define SCSI_ADSENSE_CANT_DISCONNECT 0x2B 01174 #define SCSI_ADSENSE_INVALID_CMD_SEQUENCE 0x2C 01175 #define SCSI_ADSENSE_INVALID_SESSION_MODE 0x30 01176 #define SCSI_ADSENSE_SAVE_NOT_SUPPORTED 0x35 01177 #define SCSI_ADSENSE_INVALID_BITS_IN_IDENT_MSG 0x3D 01178 #define SCSI_ADSENSE_MSG_ERROR 0x43 01179 //#define SCSI_ADSENSE_MEDIUM_REMOVAL 0x53 // redefinition 01180 #define SCSI_ADSENSE_SYS_RESOURCE_FAILURE 0x55 01181 #define SCSI_ADSENSE_OUT_OF_SPACE 0x63 01182 #define SCSI_ADSENSE_ILLEGAL_MODE_FOR_THIS_TRACK 0x64 01183 #define SCSI_ADSENSE_CD_COPY_ERROR 0x6F 01184 #define SCSI_ADSENSE_INCOMPLETE_DATA 0x72 01185 #define SCSI_ADSENSE_VENDOR_UNIQUE 0x80 01186 #define SCSI_ADSENSE_MUSIC_AREA 0xA0 01187 #define SCSI_ADSENSE_DATA_AREA 0xA1 01188 #define SCSI_ADSENSE_VOLUME_OVERFLOW 0xA7 01189 01190 // SK = 0x06 01191 #define SCSI_ADSENSE_LOG_OVERFLOW 0x0A 01192 #define SCSI_ADSENSE_MEDIUM_CHANGED 0x28 01193 #define SCSI_ADSENSE_BUS_RESET 0x29 01194 #define SCSI_ADSENSE_PARAM_CHANGE 0x2A 01195 #define SCSI_ADSENSE_CMD_CLEARED_BY_ANOTHER 0x2F 01196 #define SCSI_ADSENSE_MEDIA_STATE 0x3B 01197 #define SCSI_ADSENSE_FUNCTIONALTY_CHANGE 0x3F 01198 #define SCSI_ADSENSE_OPERATOR 0x5A 01199 #define SCSI_ADSENSE_MAX_LOG 0x5B 01200 #define SCSI_ADSENSE_POWER 0x5E 01201 01202 // SK = 0x0B 01203 #define SCSI_ADSENSE_READ_LOST_STREAMING 0x11 01204 #define SCSI_ADSENSE_RESELECT_FAILURE 0x45 01205 #define SCSI_ADSENSE_ERR_MSG_DETECTED 0x48 01206 #define SCSI_ADSENSE_INVALID_ERR_MSG 0x49 01207 #define SCSI_ADSENSE_TEGGED_OVERLAPPED 0x4D 01208 #define SCSI_ADSENSE_OVERLAPPED_ATTEMPT 0x4E 01209 01210 // Additional sense code qualifier 01211 01212 #define SCSI_SENSEQ_NO_SENSE 0x00 01213 01214 // SK:ASC = 02:04 01215 //#define SCSI_SENSEQ_NO_SENSE 0x00 01216 #define SCSI_SENSEQ_CAUSE_NOT_REPORTABLE 0x00 01217 #define SCSI_SENSEQ_BECOMING_READY 0x01 01218 #define SCSI_SENSEQ_INIT_COMMAND_REQUIRED 0x02 01219 #define SCSI_SENSEQ_MANUAL_INTERVENTION_REQUIRED 0x03 01220 #define SCSI_SENSEQ_FORMAT_IN_PROGRESS 0x04 01221 #define SCSI_SENSEQ_OPERATION_IN_PROGRESS 0x07 01222 #define SCSI_SENSEQ_LONG_WRITE_IN_PROGRESS 0x08 01223 01224 // SK:ASC = 02:30 01225 #define SCSI_SENSEQ_INCOMPATIBLE_MEDIA_INSTALLED 0x00 01226 #define SCSI_SENSEQ_UNKNOWN_FORMAT 0x01 01227 #define SCSI_SENSEQ_INCOMPATIBLE_FORMAT 0x02 01228 #define SCSI_SENSEQ_CLEANING_CARTRIDGE_INSTALLED 0x03 01229 #define SCSI_SENSEQ_WRITE_UNKNOWN_FORMAT 0x04 01230 #define SCSI_SENSEQ_WRITE_INCOMPATIBLE_FORMAT 0x05 01231 #define SCSI_SENSEQ_FORMAT_INCOMPATIBLE_MEDIUM 0x06 01232 #define SCSI_SENSEQ_CLEANING_FAILURE 0x07 01233 01234 // SK:ASC = 02:3A 01235 #define SCSI_SENSEQ_TRAY_CLOSED 0x01 01236 #define SCSI_SENSEQ_TRAY_OPEN 0x02 01237 01238 // SK:ASC = 03:0C 01239 #define SENSEQ_W_RECOVERY_NEEDED 0x07 01240 #define SENSEQ_W_RECOVERY_FAILED 0x08 01241 #define SENSEQ_LOST_STREAMING 0x09 01242 #define SENSEQ_PADDING_BLOCKS_ADDED 0x0A 01243 01244 // SK:ASC = 03:72 01245 //#define SCSI_SENSEQ_NO_SENSE 0x00 01246 #define SCSI_SENSEQ_LEAD_IN_ERROR 0x01 01247 #define SCSI_SENSEQ_LEAD_OUT_ERRROR 0x02 01248 #define SCSI_SENSEQ_INCOMPLETE_TRACK 0x03 01249 #define SCSI_SENSEQ_INCOMPLETE_RESERVED_TRACK 0x04 01250 #define SCSI_SENSEQ_NO_MORE_RESERVATION 0x05 01251 01252 // SK:ASC = 05:26 01253 #define SCSI_SENSEQ_PARAM_NOT_SUPPORTED 0x01 01254 #define SCSI_SENSEQ_PARAM_INVALID_VALUE 0x02 01255 #define SCSI_SENSEQ_THRESHOLD_PARAM_NOT_SUPPORTED 0x03 01256 #define SCSI_SENSEQ_INVALID_RELEASE_OF_PERSISTENT_RESERVATION 0x04 01257 01258 // SK:ASC = 05:27 01259 #define SCSI_SENSEQ_HW_PROTECTION 0x01 01260 #define SCSI_SENSEQ_LUN_SOFT_PROTECTION 0x02 01261 #define SCSI_SENSEQ_ASSOCIATED_PROTECTION 0x03 01262 #define SCSI_SENSEQ_PERSIST_PROTECTION 0x04 01263 #define SCSI_SENSEQ_PERMANENT_PROTECTION 0x05 01264 01265 // SK:ASC = 05:2C 01266 #define SCSI_SENSEQ_PROGRAMM_AREA_NOT_EMPTY 0x03 01267 #define SCSI_SENSEQ_PROGRAMM_AREA_EMPTY 0x04 01268 01269 // SK:ASC = 05:30 01270 #define SCSI_SENSEQ_APP_CODE_MISSMATCH 0x08 01271 #define SCSI_SENSEQ_NOT_FIXED_FOR_APPEND 0x09 01272 01273 // SK:ASC = 05:6F 01274 #define SCSI_SENSEQ_AUTHENTICATION_FAILURE 0x00 01275 #define SCSI_SENSEQ_KEY_NOT_PRESENT 0x01 01276 #define SCSI_SENSEQ_KEY_NOT_ESTABLISHED 0x02 01277 #define SCSI_SENSEQ_READ_OF_SCRAMBLED_SECTOR_WITHOUT_AUTHENTICATION 0x03 01278 #define SCSI_SENSEQ_MEDIA_CODE_MISMATCHED_TO_LOGICAL_UNIT 0x04 01279 #define SCSI_SENSEQ_LOGICAL_UNIT_RESET_COUNT_ERROR 0x05 01280 01281 // SK:ASC = 06:28 01282 #define SCSI_SENSEQ_IMPORT_OR_EXPERT_ELEMENT_ACCESS 0x01 01283 01284 // SK:ASC = 06:29 01285 #define SCSI_SENSEQ_POWER_ON 0x01 01286 #define SCSI_SENSEQ_SCSI_BUS 0x02 01287 #define SCSI_SENSEQ_BUS_DEVICE_FUNCTION 0x03 01288 #define SCSI_SENSEQ_DEVICE_INTERNAL 0x04 01289 01290 // SK:ASC = 06:2A 01291 #define SCSI_SENSEQ_MODE_PARAMETERS 0x01 01292 #define SCSI_SENSEQ_LOG_PARAMETERS 0x02 01293 #define SCSI_SENSEQ_RESERVATIONS_PREEMPTED 0x03 01294 01295 // SK:ASC = 06:3B 01296 #define SCSI_SENSEQ_DESTINATION_ELEMENT_FULL 0x0D 01297 #define SCSI_SENSEQ_SOURCE_ELEMENT_EMPTY 0x0E 01298 #define SCSI_SENSEQ_END_OF_MEDIUM 0x0F 01299 #define SCSI_SENSEQ_MAGAZINE_NOT_ACCESSIBLE 0x11 01300 #define SCSI_SENSEQ_MAGAZINE_REMOVED 0x12 01301 #define SCSI_SENSEQ_MAGAZINE_INSERTED 0x13 01302 #define SCSI_SENSEQ_MAGAZINE_LOCKED 0x14 01303 #define SCSI_SENSEQ_MAGAZINE_UNLOCKED 0x15 01304 01305 // SK:ASC = 06:3F 01306 #define SCSI_SENSEQ_MICROCODE 0x01 01307 #define SCSI_SENSEQ_OPERATION_DEFINITION 0x02 01308 #define SCSI_SENSEQ_INQUIRY_DATA 0x03 01309 01310 // SK:ASC = 06:5A 01311 #define SCSI_SENSEQ_MEDIUM_CHANGE_REQ 0x01 01312 #define SCSI_SENSEQ_W_PROTECT_SELECTED 0x02 01313 #define SCSI_SENSEQ_W_PROTECT_PERMITED 0x03 01314 01315 // SK:ASC = 06:5E 01316 #define SCSI_SENSEQ_LOW_POWER_COND 0x00 01317 #define SCSI_SENSEQ_IDLE_BY_TIMER 0x01 01318 #define SCSI_SENSEQ_STANDBY_BY_TIMER 0x02 01319 #define SCSI_SENSEQ_IDLE_BY_CMD 0x03 01320 #define SCSI_SENSEQ_STANDBY_BY_CMD 0x04 01321 01322 #define SCSI_SENSEQ_FILEMARK_DETECTED 0x01 01323 #define SCSI_SENSEQ_SETMARK_DETECTED 0x03 01324 #define SCSI_SENSEQ_END_OF_MEDIA_DETECTED 0x02 01325 #define SCSI_SENSEQ_BEGINNING_OF_MEDIA_DETECTED 0x04 01326 01327 // SCSI IO Device Control Codes 01328 01329 #define FILE_DEVICE_SCSI 0x0000001b 01330 01331 #define IOCTL_SCSI_EXECUTE_IN ((FILE_DEVICE_SCSI << 16) + 0x0011) 01332 #define IOCTL_SCSI_EXECUTE_OUT ((FILE_DEVICE_SCSI << 16) + 0x0012) 01333 #define IOCTL_SCSI_EXECUTE_NONE ((FILE_DEVICE_SCSI << 16) + 0x0013) 01334 01335 // SMART support in atapi 01336 01337 #define IOCTL_SCSI_MINIPORT_SMART_VERSION ((FILE_DEVICE_SCSI << 16) + 0x0500) 01338 #define IOCTL_SCSI_MINIPORT_IDENTIFY ((FILE_DEVICE_SCSI << 16) + 0x0501) 01339 #define IOCTL_SCSI_MINIPORT_READ_SMART_ATTRIBS ((FILE_DEVICE_SCSI << 16) + 0x0502) 01340 #define IOCTL_SCSI_MINIPORT_READ_SMART_THRESHOLDS ((FILE_DEVICE_SCSI << 16) + 0x0503) 01341 #define IOCTL_SCSI_MINIPORT_ENABLE_SMART ((FILE_DEVICE_SCSI << 16) + 0x0504) 01342 #define IOCTL_SCSI_MINIPORT_DISABLE_SMART ((FILE_DEVICE_SCSI << 16) + 0x0505) 01343 #define IOCTL_SCSI_MINIPORT_RETURN_STATUS ((FILE_DEVICE_SCSI << 16) + 0x0506) 01344 #define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTOSAVE ((FILE_DEVICE_SCSI << 16) + 0x0507) 01345 #define IOCTL_SCSI_MINIPORT_SAVE_ATTRIBUTE_VALUES ((FILE_DEVICE_SCSI << 16) + 0x0508) 01346 #define IOCTL_SCSI_MINIPORT_EXECUTE_OFFLINE_DIAGS ((FILE_DEVICE_SCSI << 16) + 0x0509) 01347 01348 // Read Capacity Data - returned in Big Endian format 01349 01350 typedef struct _READ_CAPACITY_DATA { 01351 ULONG LogicalBlockAddress; 01352 ULONG BytesPerBlock; 01353 } READ_CAPACITY_DATA, *PREAD_CAPACITY_DATA; 01354 01355 // CD ROM Read Table Of Contents (TOC) structures 01356 // Format 0 - Get table of contents 01357 01358 #define TocControl_TrkMode_Mask WParam_TrkMode_Mask 01359 #define TocControl_TrkMode_Audio WParam_TrkMode_Audio 01360 #define TocControl_TrkMode_Audio_PreEmph WParam_TrkMode_Audio_PreEmph 01361 #define TocControl_TrkMode_Data WParam_TrkMode_Data 01362 #define TocControl_TrkMode_IncrData WParam_TrkMode_IncrData 01363 #define TocControl_TrkMode_QAudio_PreEmph WParam_TrkMode_QAudio_PreEmph 01364 #define TocControl_TrkMode_AllowCpy WParam_TrkMode_AllowCpy 01365 01366 typedef struct _TOC_TRACK_INFO { 01367 UCHAR Reserved; 01368 UCHAR Control : 4; 01369 UCHAR Adr : 4; 01370 UCHAR TrackNum; 01371 UCHAR Reserved1; 01372 UCHAR LBA[4]; 01373 } TOC_TRACK_INFO, *PTOC_TRACK_INFO; 01374 01375 typedef struct _READ_TOC_HEADER { 01376 UCHAR Length[2]; 01377 UCHAR First_TrackSes; 01378 UCHAR Last_TrackSes; 01379 } READ_TOC_HEADER, *PREAD_TOC_HEADER; 01380 01381 #define TOC_LastTrack_ID 0xAA 01382 01383 typedef struct _READ_TOC_TOC { 01384 READ_TOC_HEADER Tracks; 01385 TOC_TRACK_INFO TrackData[MAXIMUM_NUMBER_OF_TRACKS+1]; 01386 } READ_TOC_TOC, *PREAD_TOC_TOC; 01387 01388 // Format 1 - Session Info 01389 01390 typedef struct _READ_TOC_SES { 01391 READ_TOC_HEADER Sessions; 01392 TOC_TRACK_INFO LastSes_1stTrack; // First Track Number In Last Complete Session 01393 } READ_TOC_SES, *PREAD_TOC_SES; 01394 01395 // Format 2,3 - Full TOC, PMA 01396 01397 // ADR = 1 01398 #define POINT_StartPositionOfTrack_Min 0x01 01399 #define POINT_StartPositionOfTrack_Max 0x63 01400 #define POINT_FirstTrackNum 0xA0 01401 #define POINT_LastTrackNum 0xA1 01402 #define POINT_StartPositionOfLeadOut 0xA2 01403 // ADR = 5 01404 #define POINT_SkipInterval_Min 0x01 01405 #define POINT_SkipInterval_Max 0x40 01406 #define POINT_StartPositionOfNextProgramArea 0xB0 01407 #define POINT_NumOfSkips 0xB1 01408 #define POINT_SkipTrackAssignmet_Min 0xB2 01409 #define POINT_SkipTrackAssignmet_Max 0xB4 01410 #define POINT_StartPositionOfFirstLeadIn 0xC0 01411 #define POINT_CopyOfAdditionalAreaInATIP 0xC1 01412 01413 typedef struct _TOC_SES_INFO { 01414 UCHAR SesNumber; 01415 UCHAR Control : 4; 01416 UCHAR Adr : 4; 01417 UCHAR TNO; 01418 UCHAR POINT; 01419 01420 union { 01421 01422 struct { 01423 UCHAR MSF[3]; 01424 UCHAR Reserved; 01425 UCHAR P_MSF[3]; 01426 } GENERIC; 01427 01428 // ADR = 1: 01429 01430 //0x01 - 0x63 01431 struct { 01432 UCHAR ATIME[3]; 01433 UCHAR Zero; 01434 UCHAR MSF[3]; 01435 } StartPositionOfTrack; 01436 01437 //0xA0 01438 #define FullTOC_DiscType_CDDA_or_M1 WParam_SesFmt_CdRom // 0x00 01439 #define FullTOC_DiscType_CDI WParam_SesFmt_CdI // 0x10 01440 #define FullTOC_DiscType_CDXA_M2 WParam_SesFmt_CdRomXa // 0x20 01441 01442 struct { 01443 UCHAR ATIME[3]; 01444 UCHAR Zero; 01445 UCHAR FirstTrackNum; 01446 UCHAR DiscType; 01447 UCHAR Zero1; 01448 } FirstTrackNum; 01449 01450 //0xA1 01451 struct { 01452 UCHAR ATIME[3]; 01453 UCHAR Zero; 01454 UCHAR LastTrackNum; 01455 UCHAR Zero1[2]; 01456 } LastTrackNum; 01457 01458 //0xA2 01459 struct { 01460 UCHAR ATIME[3]; 01461 UCHAR Zero; 01462 UCHAR MSF[3]; 01463 } StartPositionOfLeadOut; 01464 01465 // ADR = 5: 01466 01467 //0x01 - 0x40 01468 struct { 01469 UCHAR End_MSF[3]; 01470 UCHAR Reserved; 01471 UCHAR Start_MSF[3]; 01472 } SkipInterval; 01473 01474 //0xB0 01475 struct { 01476 UCHAR Program_MSF[3]; 01477 UCHAR NumOfPointers_M5; 01478 UCHAR MaxLeadOut_MSF[3]; 01479 } StartPositionOfNextProgramArea; 01480 01481 //0xB1 01482 struct { 01483 UCHAR Zero[4]; 01484 UCHAR Intervals; 01485 UCHAR Tracks; 01486 UCHAR Zero1; 01487 } NumOfSkips; 01488 01489 //0xB2 - 0xB4 01490 struct { 01491 UCHAR SkipNum[7]; 01492 } SkipTrackAsignment; 01493 01494 //0xC0 01495 struct { 01496 UCHAR OptimumRecordingPower; 01497 UCHAR SpecInfoATIP[3]; 01498 UCHAR LeadIn_MSF[3]; 01499 } StartPositionOfFirstLeadIn; 01500 01501 //0xC1 01502 struct { 01503 UCHAR Bytes[7]; 01504 } AdditionalAreaInATIP; 01505 01506 } Params; 01507 } TOC_SES_INFO, *PTOC_SES_INFO; 01508 01509 typedef struct _READ_TOC_FULL_TOC { 01510 READ_TOC_HEADER Sessions; 01511 TOC_SES_INFO SessionData[MAXIMUM_NUMBER_OF_SESSIONS]; 01512 } READ_TOC_FULL_TOC, *PREAD_TOC_FULL_TOC; 01513 01514 typedef READ_TOC_FULL_TOC READ_TOC_PMA; 01515 typedef PREAD_TOC_FULL_TOC PREAD_TOC_PMA; 01516 01517 // Format 4 - ATIP 01518 01519 typedef struct _READ_TOC_ATIP { 01520 UCHAR Length[2]; 01521 UCHAR Reserved[2]; 01522 01523 #define ATIP_SpeedRef_Mask 0x07 01524 #define ATIP_SpeedRef_2X 0x01 01525 #define ATIP_WritingPower_Mask 0x07 01526 01527 union { 01528 UCHAR Flags; 01529 struct { 01530 UCHAR SpeedRef: 3; 01531 UCHAR Reserved: 1; 01532 UCHAR WritingPower: 3; 01533 UCHAR One: 1; 01534 } Fields; 01535 } Flags1; 01536 01537 #define ATIP_URU 0x40 01538 01539 union { 01540 UCHAR Flags; 01541 struct { 01542 UCHAR Reserved: 6; 01543 UCHAR URU: 1; 01544 UCHAR Zero: 1; 01545 } Fields; 01546 } Flags2; 01547 01548 #define ATIP_A1 0x01 // 16-18 are valid 01549 #define ATIP_A2 0x02 // 20-22 are valid 01550 #define ATIP_A3 0x04 // 24-26 are valid 01551 #define ATIP_SubType_Mask 0x38 // shall be set to zero 01552 #define ATIP_Type_Mask 0x40 01553 #define ATIP_Type_CDR 0x00 01554 #define ATIP_Type_CDRW 0x40 01555 01556 union { 01557 UCHAR Flags; 01558 struct { 01559 UCHAR A1: 1; 01560 UCHAR A2: 1; 01561 UCHAR A3: 1; 01562 UCHAR SubType: 3; 01563 UCHAR Type: 1; 01564 UCHAR One: 1; 01565 } Fields; 01566 } DiscType; 01567 01568 UCHAR Reserved0; 01569 UCHAR LeadIn_MSF[3]; 01570 UCHAR Reserved1; 01571 UCHAR LeadOut_MSF[3]; 01572 UCHAR Reserved2; 01573 01574 #define ATIP_MinSpeedCVL_Mask 0x70 01575 #define ATIP_MinSpeedCVL_2X 0x10 01576 #define ATIP_MaxSpeedCVL_Mask 0x0f 01577 #define ATIP_MaxSpeedCVL_2X 0x01 01578 #define ATIP_MaxSpeedCVL_4X 0x02 01579 #define ATIP_MaxSpeedCVL_6X 0x03 01580 #define ATIP_MaxSpeedCVL_8X 0x04 01581 01582 union { 01583 UCHAR Flags; 01584 struct { 01585 UCHAR MaxSpeedCVL: 4; 01586 UCHAR MinSpeedCVL: 3; 01587 UCHAR Zero: 1; 01588 } Fields; 01589 } Speed; 01590 01591 #define ATIP_Power_Y_Mask 0x0e 01592 #define ATIP_Power_P_Mask 0x70 01593 01594 union { 01595 UCHAR Flags; 01596 struct { 01597 UCHAR Reserved: 1; 01598 UCHAR Y_value: 3; 01599 UCHAR P_factor: 3; 01600 UCHAR Zero: 1; 01601 } Fields; 01602 } Power; 01603 01604 #define ATIP_PW_ratio_Mask 0x70 01605 01606 union { 01607 UCHAR Flags; 01608 struct { 01609 UCHAR Reserved: 4; 01610 UCHAR P_W_ratio: 3; 01611 UCHAR Zero: 1; 01612 } Fields; 01613 } ErasePower; 01614 01615 UCHAR Reserved3; 01616 UCHAR A1_value[3]; 01617 UCHAR Reserved4; 01618 UCHAR A2_value[3]; 01619 UCHAR Reserved5; 01620 UCHAR A3_value[3]; 01621 01622 } READ_TOC_ATIP, *PREAD_TOC_ATIP; 01623 01624 // Format 5 - CD-TEXT 01625 01626 typedef struct _CD_TEXT_PACK_DATA { 01627 01628 #define CdText_ID1_Title 0x80 // ID2 = 0 - Album, ID2 = 1-63 - Track 01629 #define CdText_ID1_Performer 0x81 01630 #define CdText_ID1_Songwriter 0x82 01631 #define CdText_ID1_Composer 0x83 01632 #define CdText_ID1_Arranger 0x84 01633 #define CdText_ID1_Message 0x85 01634 #define CdText_ID1_DiscID 0x86 01635 #define CdText_ID1_GenreInfo 0x87 01636 #define CdText_ID1_TOC 0x88 01637 #define CdText_ID1_TOC2 0x89 01638 #define CdText_ID1_Special 0x8D 01639 #define CdText_ID1_UPC_EAN_ISRC 0x8E 01640 #define CdText_ID1_BlockSizeInfo 0x8F 01641 01642 UCHAR ID1; 01643 UCHAR ID2; 01644 UCHAR ID3; 01645 01646 #define CdText_CharPos_Mask 0x0f 01647 #define CdText_BlkNum_Mask 0x70 01648 01649 union { 01650 UCHAR Flags; 01651 struct { 01652 UCHAR CharPos: 4; 01653 UCHAR BlkNum: 3; 01654 UCHAR DBCC: 1; // used to indicate Double Byte text encoding (Unicode ?) 01655 } Fields; 01656 } BlkNum_CharPos; 01657 01658 UCHAR TextData[12]; 01659 UCHAR CRC[2]; 01660 } CD_TEXT_PACK_DATA, *PCD_TEXT_PACK_DATA; 01661 01662 typedef struct _READ_TOC_CD_TEXT { 01663 UCHAR Length[2]; 01664 UCHAR Reserved[2]; 01665 CD_TEXT_PACK_DATA Chunk0; 01666 } READ_TOC_CD_TEXT, *PREAD_TOC_CD_TEXT; 01667 01668 // OPC block 01669 01670 typedef struct _OPC_INFO_BLOCK { 01671 UCHAR Speed[2]; 01672 UCHAR OpcValue[6]; 01673 } OPC_INFO_BLOCK, *POPC_INFO_BLOCK; 01674 01675 // Buffer Capacity format 01676 01677 typedef struct _BUFFER_CAPACITY_BLOCK { 01678 UCHAR DataLength[2]; 01679 UCHAR Reserved0[2]; 01680 UCHAR BufferLength[4]; 01681 UCHAR BlankBufferLength[4]; 01682 } BUFFER_CAPACITY_BLOCK, *PBUFFER_CAPACITY_BLOCK; 01683 01684 // Format Unit structures 01685 01686 typedef struct _FORMAT_LIST_HEADER { 01687 UCHAR Reserved0; 01688 01689 #define FormatHeader_VS 0x01 01690 #define FormatHeader_Immed 0x02 01691 #define FormatHeader_DSP 0x04 01692 #define FormatHeader_IP 0x08 01693 #define FormatHeader_STPF 0x10 01694 #define FormatHeader_DCRT 0x20 01695 #define FormatHeader_DPRY 0x40 01696 #define FormatHeader_FOV 0x80 01697 01698 union { 01699 UCHAR Flags; 01700 struct { 01701 UCHAR VS: 1; 01702 UCHAR Immed: 1; 01703 UCHAR DSP: 1; 01704 UCHAR IP: 1; 01705 UCHAR STPF: 1; 01706 UCHAR DCRT: 1; 01707 UCHAR DPRY: 1; 01708 UCHAR FOV: 1; 01709 } Fields; 01710 } Flags; 01711 UCHAR FormatDescriptorLength[2]; // =0x0008 01712 } FORMAT_LIST_HEADER, *PFORMAT_LIST_HEADER; 01713 01714 typedef struct _CDRW_FORMAT_DESCRIPTOR { 01715 01716 #define FormatDesc_Grow 0x40 01717 #define FormatDesc_Ses 0x80 01718 01719 union { 01720 UCHAR Flags; 01721 struct { 01722 UCHAR Reserved0: 6; 01723 UCHAR Grow: 1; 01724 UCHAR Ses: 1; 01725 } Fields; 01726 } Flags; 01727 UCHAR Reserved1[3]; 01728 UCHAR FormatSize[4]; 01729 } CDRW_FORMAT_DESCRIPTOR, *PCDRW_FORMAT_DESCRIPTOR; 01730 01731 typedef struct _FORMAT_UNIT_PARAMETER_LIST { 01732 FORMAT_LIST_HEADER Header; 01733 UCHAR InitPatternDescr[4]; 01734 CDRW_FORMAT_DESCRIPTOR FormatDescr; 01735 } FORMAT_UNIT_PARAMETER_LIST, *PFORMAT_UNIT_PARAMETER_LIST; 01736 01737 // define Read Format Capacities info blocks 01738 01739 typedef struct _CAPACITY_LIST_HEADER { 01740 UCHAR Reserved[3]; 01741 UCHAR Length; 01742 } CAPACITY_LIST_HEADER, *PCAPACITY_LIST_HEADER; 01743 01744 typedef struct _FORMATTABLE_CAPACITY_DESCRIPTOR { 01745 UCHAR NumOfBlocks [4]; 01746 union { 01747 UCHAR Flags; 01748 struct { 01749 UCHAR DescType: 2; 01750 UCHAR Reserved0: 6; 01751 } Fields; 01752 } Flags; 01753 UCHAR BlockSize [3]; 01754 } FORMATTABLE_CAPACITY_DESCRIPTOR, *PFORMATTABLE_CAPACITY_DESCRIPTOR; 01755 01756 typedef struct _FORMAT_CAPACITIES_DATA { 01757 CAPACITY_LIST_HEADER Header; 01758 } FORMAT_CAPACITIES_DATA, *PFORMAT_CAPACITIES_DATA; 01759 01760 // Define Event Status info blocks 01761 01762 typedef struct _EVENT_STAT_HEADER { 01763 UCHAR DataLength[2]; 01764 01765 #define EventRetStat_Class_Mask 0x07 01766 #define EventRetStat_Class_OpChange 0x01 01767 #define EventRetStat_Class_PM 0x02 01768 #define EventRetStat_Class_Media 0x04 01769 #define EventRetStat_Class_DevBusy 0x06 01770 #define EventRetStat_NEA 0x80 01771 01772 union { 01773 UCHAR Flags; 01774 struct { 01775 UCHAR Class: 3; 01776 UCHAR Reserved0: 4; 01777 UCHAR NEA: 1; 01778 } Fields; 01779 } Flags; 01780 01781 UCHAR SupportedClasses; // see command format 01782 01783 } EVENT_STAT_HEADER, *PEVENT_STAT_HEADER; 01784 01785 typedef struct _EVENT_STAT_OPERATIONAL_BLOCK { 01786 01787 EVENT_STAT_HEADER Header; 01788 01789 #define EventStat_OpEvent_Mask 0x0f 01790 01791 union { 01792 UCHAR Flags; 01793 struct { 01794 UCHAR OpEvent : 4; 01795 UCHAR Reserved0: 4; 01796 } Fields; 01797 } Byte0; 01798 01799 #define EventStat_OpStat_Mask 0x0f 01800 #define EventStat_OpStat_Ready 0x00 01801 #define EventStat_OpStat_TempBusy 0x01 01802 #define EventStat_OpStat_Busy 0x02 01803 01804 union { 01805 UCHAR Flags; 01806 struct { 01807 UCHAR OpStatus : 4; 01808 UCHAR Reserved0 : 3; 01809 UCHAR PersistentPrevent: 1; 01810 } Fields; 01811 } Byte1; 01812 01813 #define EventStat_OpReport_NoChg 0x00 01814 #define EventStat_OpReport_Change 0x01 01815 #define EventStat_OpReport_AddChg 0x02 01816 #define EventStat_OpReport_Reset 0x03 01817 #define EventStat_OpReport_FirmwareChg 0x04 // microcode change 01818 #define EventStat_OpReport_InquaryChg 0x05 01819 #define EventStat_OpReport_CtrlReq 0x06 01820 #define EventStat_OpReport_CtrlRelease 0x07 01821 01822 UCHAR OpReport[2]; 01823 01824 } EVENT_STAT_OPERATIONAL_BLOCK, *PEVENT_STAT_OPERATIONAL_BLOCK; 01825 01826 typedef struct _EVENT_STAT_PM_BLOCK { 01827 01828 EVENT_STAT_HEADER Header; 01829 01830 #define EventStat_PowerEvent_Mask 0x0f 01831 #define EventStat_PowerEvent_NoChg 0x00 01832 #define EventStat_PowerEvent_ChgOK 0x01 01833 #define EventStat_PowerEvent_ChgFail 0x02 01834 01835 union { 01836 UCHAR Flags; 01837 struct { 01838 UCHAR PowerEvent : 4; 01839 UCHAR Reserved0 : 4; 01840 } Fields; 01841 } Byte0; 01842 01843 #define EventStat_PowerStat_Mask 0x0f 01844 #define EventStat_PowerStat_Active 0x01 01845 #define EventStat_PowerStat_Idle 0x02 01846 #define EventStat_PowerStat_Standby 0x03 01847 #define EventStat_PowerStat_Sleep 0x04 01848 01849 union { 01850 UCHAR Flags; 01851 struct { 01852 UCHAR PowerStatus: 4; 01853 UCHAR Reserved0 : 4; 01854 } Fields; 01855 } Byte1; 01856 01857 UCHAR Reserved0[2]; 01858 01859 } EVENT_STAT_PM_BLOCK, *PEVENT_STAT_PM_BLOCK; 01860 01861 typedef struct _EVENT_STAT_MEDIA_BLOCK { 01862 01863 EVENT_STAT_HEADER Header; 01864 01865 #define EventStat_MediaEvent_Mask 0x0f 01866 #define EventStat_MediaEvent_None 0x00 01867 #define EventStat_MediaEvent_EjectReq 0x01 01868 #define EventStat_MediaEvent_New 0x02 01869 #define EventStat_MediaEvent_Removal 0x03 01870 #define EventStat_MediaEvent_Chg 0x04 01871 01872 union { 01873 UCHAR Flags; 01874 struct { 01875 UCHAR MediaEvent : 4; 01876 UCHAR Reserved0 : 4; 01877 } Fields; 01878 } Byte0; 01879 01880 #define EventStat_MediaStat_DoorOpen 0x01 01881 #define EventStat_MediaStat_Present 0x02 01882 01883 union { 01884 UCHAR Flags; 01885 struct { 01886 UCHAR DoorOpen : 1; 01887 UCHAR Present : 1; 01888 UCHAR Reserved0 : 6; 01889 } Fields; 01890 } Byte1; 01891 01892 UCHAR StartSlot; 01893 UCHAR EndSlot; 01894 01895 } EVENT_STAT_MEDIA_BLOCK, *PEVENT_STAT_MEDIA_BLOCK; 01896 01897 typedef struct _EVENT_STAT_DEV_BUSY_BLOCK { 01898 01899 EVENT_STAT_HEADER Header; 01900 01901 #define EventStat_BusyEvent_Mask 0x0f 01902 #define EventStat_BusyEvent_None 0x00 01903 #define EventStat_BusyEvent_Busy 0x01 01904 01905 union { 01906 UCHAR Flags; 01907 struct { 01908 UCHAR BusyEvent : 4; 01909 UCHAR Reserved0 : 4; 01910 } Fields; 01911 } Byte0; 01912 01913 #define EventStat_BusyStat_Mask 0x0f 01914 #define EventStat_BusyStat_NoEvent 0x00 01915 #define EventStat_BusyStat_Power 0x01 01916 #define EventStat_BusyStat_Immed 0x02 01917 #define EventStat_BusyStat_Deferred 0x03 01918 01919 union { 01920 UCHAR Flags; 01921 struct { 01922 UCHAR BusyStatus: 4; 01923 UCHAR Reserved0 : 4; 01924 } Fields; 01925 } Byte1; 01926 01927 UCHAR Time[2]; 01928 01929 } EVENT_STAT_DEV_BUSY_BLOCK, *PEVENT_STAT_DEV_BUSY_BLOCK; 01930 01931 // Define mode disc info block. 01932 01933 typedef struct _DISC_INFO_BLOCK { // 01934 UCHAR DataLength [2]; 01935 01936 #define DiscInfo_Disk_Mask 0x03 01937 #define DiscInfo_Disk_Empty 0x00 01938 #define DiscInfo_Disk_Appendable 0x01 01939 #define DiscInfo_Disk_Complete 0x02 01940 01941 #define DiscInfo_Ses_Mask 0x0C 01942 #define DiscInfo_Ses_Empty 0x00 01943 #define DiscInfo_Ses_Incomplete 0x04 01944 #define DiscInfo_Ses_Complete 0x0C 01945 01946 #define DiscInfo_Disk_Erasable 0x10 01947 01948 union { 01949 UCHAR Flags; 01950 struct { 01951 UCHAR DiscStat : 2; 01952 UCHAR LastSesStat : 2; 01953 UCHAR Erasable : 1; 01954 UCHAR Reserved0: 3; 01955 } Fields; 01956 } DiscStat; 01957 01958 UCHAR FirstTrackNum; 01959 UCHAR NumOfSes; 01960 UCHAR FirstTrackNumLastSes; 01961 UCHAR LastTrackNumLastSes; 01962 01963 #define DiscInfo_URU 0x20 01964 #define DiscInfo_DBC_V 0x40 01965 #define DiscInfo_DID_V 0x80 01966 01967 union { 01968 UCHAR Flags; 01969 struct { 01970 UCHAR Reserved1: 5; 01971 UCHAR URU : 1; 01972 UCHAR DBC_V : 1; // 0 01973 UCHAR DID_V : 1; 01974 } Fields; 01975 } Flags; 01976 01977 #define DiscInfo_Type_cdrom 0x00 // CD-DA / CD-ROM 01978 #define DiscInfo_Type_cdi 0x10 // CD-I 01979 #define DiscInfo_Type_cdromxa 0x20 // CD-ROM XA 01980 #define DiscInfo_Type_unknown 0xFF // HZ ;) 01981 01982 UCHAR DiskType; 01983 UCHAR NumOfSes2; // MSB MMC-3 01984 UCHAR FirstTrackNumLastSes2; // MSB MMC-3 01985 UCHAR LastTrackNumLastSes2; // MSB MMC-3 01986 UCHAR DiskId [4]; 01987 UCHAR LastSesLeadInTime [4]; // MSF 01988 UCHAR LastSesLeadOutTime [4]; // MSF 01989 UCHAR DiskBarCode [8]; 01990 UCHAR Reserved3; 01991 UCHAR OPCNum; 01992 } DISC_INFO_BLOCK, *PDISC_INFO_BLOCK; 01993 01994 // Define track info block. 01995 01996 typedef struct _TRACK_INFO_BLOCK { 01997 UCHAR DataLength [2]; 01998 UCHAR TrackNum; 01999 UCHAR SesNum; 02000 UCHAR Reserved0; 02001 02002 #define TrkInfo_Trk_Mask 0x0F 02003 #define TrkInfo_Trk_Mode1 0x01 02004 #define TrkInfo_Trk_Mode2 0x02 02005 #define TrkInfo_Trk_XA 0x02 02006 #define TrkInfo_Trk_DDCD 0x04 // MMC-3 02007 #define TrkInfo_Trk_NonCD 0x04 // MMC-3 02008 #define TrkInfo_Trk_Inc 0x05 // MMC-3 02009 #define TrkInfo_Trk_unknown 0x0F 02010 #define TrkInfo_Copy 0x10 02011 #define TrkInfo_Damage 0x20 02012 02013 UCHAR TrackParam; 02014 /* UCHAR TrackMode : 4; 02015 UCHAR Copy : 1; 02016 UCHAR Damage : 1; 02017 UCHAR Reserved1 : 2; */ 02018 02019 #define TrkInfo_Dat_Mask 0x0F 02020 #define TrkInfo_Dat_Mode1 0x01 02021 #define TrkInfo_Dat_Mode2 0x02 02022 #define TrkInfo_Dat_XA 0x02 02023 #define TrkInfo_Dat_DDCD 0x02 02024 #define TrkInfo_Dat_unknown 0x0F 02025 #define TrkInfo_FP 0x10 02026 #define TrkInfo_Packet 0x20 02027 #define TrkInfo_Blank 0x40 02028 #define TrkInfo_RT 0x80 02029 02030 UCHAR DataParam; 02031 /* UCHAR DataMode : 4; 02032 UCHAR FP : 1; 02033 UCHAR Packet : 1; 02034 UCHAR Blank : 1; 02035 UCHAR RT : 1; */ 02036 02037 #define TrkInfo_NWA_V 0x01 02038 #define TrkInfo_LRA_V 0x02 // MMC-3 02039 02040 UCHAR NWA_V; 02041 /* UCHAR NWA_V : 1; 02042 UCHAR LRA_V : 1; 02043 UCHAR Reserved : 6; */ 02044 02045 UCHAR TrackStartAddr [4]; 02046 UCHAR NextWriteAddr [4]; 02047 UCHAR FreeBlocks [4]; 02048 UCHAR FixPacketSize [4]; 02049 UCHAR TrackLength [4]; 02050 02051 // MMC-3 02052 02053 UCHAR LastRecordedAddr [4]; 02054 UCHAR TrackNum2; // MSB 02055 UCHAR SesNum2; // MSB 02056 UCHAR Reserved2[2]; 02057 02058 }TRACK_INFO_BLOCK, *PTRACK_INFO_BLOCK; 02059 02060 // Mode data structures. 02061 02062 // Define Mode parameter header. 02063 02064 #define MediaType_Unknown 0x00 02065 #define MediaType_120mm_CDROM_DataOnly 0x01 02066 #define MediaType_120mm_CDROM_AudioOnly 0x02 //CDDA 02067 #define MediaType_120mm_CDROM_DataAudioCombined 0x03 02068 #define MediaType_120mm_CDROM_Hybrid_PhotoCD 0x04 02069 #define MediaType_80mm_CDROM_DataOnly 0x05 02070 #define MediaType_80mm_CDROM_AudioOnly 0x06 //CDDA 02071 #define MediaType_80mm_CDROM_DataAudioCombined 0x07 02072 #define MediaType_80mm_CDROM_Hybrid_PhotoCD 0x08 02073 02074 #define MediaType_UnknownSize_CDR 0x10 02075 #define MediaType_120mm_CDR_DataOnly 0x11 02076 #define MediaType_120mm_CDR_AudioOnly 0x12 //CDDA 02077 #define MediaType_120mm_CDR_DataAudioCombined 0x13 02078 #define MediaType_120mm_CDR_Hybrid_PhotoCD 0x14 02079 #define MediaType_80mm_CDR_DataOnly 0x15 02080 #define MediaType_80mm_CDR_AudioOnly 0x16 //CDDA 02081 #define MediaType_80mm_CDR_DataAudioCombined 0x17 02082 #define MediaType_80mm_CDR_Hybrid_Photo_CD 0x18 02083 02084 #define MediaType_UnknownSize_CDRW 0x20 02085 #define MediaType_120mm_CDRW_DataOnly 0x21 02086 #define MediaType_120mm_CDRW_AudioOnly 0x22 //CDDA 02087 #define MediaType_120mm_CDRW_DataAudioCombined 0x23 02088 #define MediaType_120mm_CDRW_Hybrid 0x24 02089 #define MediaType_80mm_CDRW_DataOnly 0x25 02090 #define MediaType_80mm_CDRW_AudioOnly 0x26 //CDDA 02091 #define MediaType_80mm_CDRW_DataAudioCombined 0x27 02092 #define MediaType_80mm_CDRW_Hybrid 0x28 02093 02094 #define MediaType_NoDiscPresent 0x70 02095 #define MediaType_DoorOpen 0x71 02096 02097 //********************************************************************************************* 02098 02099 typedef struct _MODE_PARAMETER_HEADER { 02100 UCHAR ModeDataLength; 02101 UCHAR MediumType; 02102 UCHAR DeviceSpecificParameter; 02103 UCHAR BlockDescriptorLength; 02104 } MODE_PARAMETER_HEADER, *PMODE_PARAMETER_HEADER; 02105 02106 typedef struct _MODE_PARAMETER_HEADER10 { 02107 UCHAR ModeDataLength[2]; 02108 UCHAR MediumType; 02109 UCHAR DeviceSpecificParameter; 02110 UCHAR Reserved[2]; 02111 UCHAR BlockDescriptorLength[2]; 02112 } MODE_PARAMETER_HEADER10, *PMODE_PARAMETER_HEADER10; 02113 02114 #define MODE_FD_SINGLE_SIDE 0x01 02115 #define MODE_FD_DOUBLE_SIDE 0x02 02116 #define MODE_FD_MAXIMUM_TYPE 0x1E 02117 #define MODE_DSP_FUA_SUPPORTED 0x10 02118 #define MODE_DSP_WRITE_PROTECT 0x80 02119 02120 // Define the mode parameter block. 02121 02122 typedef struct _MODE_PARAMETER_BLOCK { 02123 UCHAR DensityCode; 02124 UCHAR NumberOfBlocks[3]; 02125 UCHAR Reserved; 02126 UCHAR BlockLength[3]; 02127 } MODE_PARAMETER_BLOCK, *PMODE_PARAMETER_BLOCK; 02128 02129 typedef struct _MODE_PARM_READ_WRITE { 02130 02131 MODE_PARAMETER_HEADER ParameterListHeader; // List Header Format 02132 MODE_PARAMETER_BLOCK ParameterListBlock; // List Block Descriptor 02133 02134 } MODE_PARM_READ_WRITE_DATA, *PMODE_PARM_READ_WRITE_DATA; 02135 02136 //********************************************************************************************* 02137 // Define read write recovery page 02138 02139 typedef struct _MODE_READ_WRITE_RECOVERY_PAGE { // 0x01 02140 02141 UCHAR PageCode : 6; 02142 UCHAR Reserved1 : 1; 02143 UCHAR PSBit : 1; 02144 UCHAR PageLength; 02145 union { 02146 UCHAR Flags; 02147 struct { 02148 UCHAR DCRBit : 1; 02149 UCHAR DTEBit : 1; 02150 UCHAR PERBit : 1; 02151 UCHAR EERBit : 1; 02152 UCHAR RCBit : 1; 02153 UCHAR TBBit : 1; 02154 UCHAR ARRE : 1; 02155 UCHAR AWRE : 1; 02156 } Fields; 02157 } ErrorRecoveryParam; 02158 UCHAR ReadRetryCount; 02159 UCHAR CorrectionSpan; //SCSI CBS only 02160 UCHAR HeadOffsetCount; //SCSI CBS only 02161 UCHAR DataStrobOffsetCount; //SCSI CBS only 02162 UCHAR Reserved4; 02163 UCHAR WriteRetryCount; 02164 UCHAR Reserved5; 02165 UCHAR RecoveryTimeLimit[2]; // 0 02166 02167 } MODE_READ_WRITE_RECOVERY_PAGE, *PMODE_READ_WRITE_RECOVERY_PAGE; 02168 02169 // Define Read Recovery page - cdrom 02170 02171 typedef struct _MODE_READ_RECOVERY_PAGE { // 0x01 02172 02173 UCHAR PageCode : 6; 02174 UCHAR Reserved1 : 1; 02175 UCHAR PSBit : 1; 02176 UCHAR PageLength; 02177 UCHAR DCRBit : 1; 02178 UCHAR DTEBit : 1; 02179 UCHAR PERBit : 1; 02180 UCHAR Reserved2 : 1; 02181 UCHAR RCBit : 1; 02182 UCHAR TBBit : 1; 02183 UCHAR Reserved3 : 2; 02184 UCHAR ReadRetryCount; 02185 UCHAR Reserved4[4]; 02186 02187 } MODE_READ_RECOVERY_PAGE, *PMODE_READ_RECOVERY_PAGE; 02188 02189 //********************************************************************************************* 02190 // Define mode write parameters page. 02191 02192 typedef struct _MODE_WRITE_PARAMS_PAGE { // 0x05 02193 UCHAR PageCode : 6; 02194 UCHAR Reserved1: 1; 02195 UCHAR PageSavable : 1; 02196 02197 UCHAR PageLength; // 0x32 02198 02199 #define WParam_WType_Mask 0x0f 02200 #define WParam_WType_Packet 0x00 02201 #define WParam_WType_TAO 0x01 02202 #define WParam_WType_Ses 0x02 02203 #define WParam_WType_Raw 0x03 02204 #define WParam_TestWrite 0x10 02205 #define WParam_LS_V 0x20 02206 #define WParam_BUFF 0x40 02207 02208 union { 02209 UCHAR Flags; 02210 struct { 02211 UCHAR WriteType: 4; // 1 02212 UCHAR TestWrite: 1; 02213 UCHAR LS_V: 1; 02214 UCHAR BUFF: 1; 02215 UCHAR Reserved1: 1; 02216 } Fields; 02217 } Byte2; 02218 02219 #define WParam_TrkMode_Mask 0x0d // xx0x 02220 #define WParam_TrkMode_None 0x00 02221 #define WParam_TrkMode_Audio 0x00 02222 #define WParam_TrkMode_Audio_PreEmph 0x01 02223 #define WParam_TrkMode_Data 0x04 02224 #define WParam_TrkMode_IncrData 0x05 02225 #define WParam_TrkMode_QAudio_PreEmph 0x08 02226 #define WParam_TrkMode_AllowCpy 0x02 02227 #define WParam_Copy 0x10 02228 #define WParam_FP 0x20 02229 #define WParam_MultiSes_Mask 0xc0 02230 #define WParam_Multises_None 0x00 02231 #define WParam_Multises_Final 0x80 02232 #define WParam_Multises_Multi 0xc0 02233 02234 union { 02235 UCHAR Flags; 02236 struct { 02237 UCHAR TrackMode: 4; // 4 02238 UCHAR Copy : 1; // 0 02239 UCHAR FP : 1; // 0 02240 UCHAR Multisession: 2; // 11 02241 } Fields; 02242 } Byte3; 02243 02244 #define WParam_BlkType_Mask 0x0f 02245 #define WParam_BlkType_Raw_2352 0x00 02246 #define WParam_BlkType_RawPQ_2368 0x01 02247 #define WParam_BlkType_RawPW_2448 0x02 02248 #define WParam_BlkType_RawPW_R_2448 0x03 02249 #define WParam_BlkType_VendorSpec1 0x07 02250 #define WParam_BlkType_M1_2048 0x08 02251 #define WParam_BlkType_M2_2336 0x09 02252 #define WParam_BlkType_M2XAF1_2048 0x0a 02253 #define WParam_BlkType_M2XAF1SH_2056 0x0b 02254 #define WParam_BlkType_M2XAF2_2324 0x0c 02255 #define WParam_BlkType_M2XAFXSH_2332 0x0d 02256 #define WParam_BlkType_VendorSpec2 0x0f 02257 02258 union { 02259 UCHAR Flags; 02260 struct { 02261 UCHAR DataBlockType: 4; // 8 02262 UCHAR Reserved2: 4; 02263 } Fields; 02264 } Byte4; 02265 02266 UCHAR LinkSize; 02267 UCHAR Reserved3; 02268 02269 union { 02270 UCHAR Flags; 02271 struct { 02272 UCHAR HostAppCode : 6; // 0 02273 UCHAR Reserved4 : 2; 02274 } Fields; 02275 } Byte7; 02276 02277 #define WParam_SesFmt_CdRom 0x00 02278 #define WParam_SesFmt_CdI 0x10 02279 #define WParam_SesFmt_CdRomXa 0x20 02280 02281 UCHAR SesFmt; // 0 02282 UCHAR Reserved5; 02283 UCHAR PacketSize[4]; // 0 02284 UCHAR AudioPause[2]; // 150 02285 02286 UCHAR Reserved6: 7; 02287 UCHAR MCVAL : 1; 02288 02289 UCHAR N[13]; 02290 UCHAR Zero; 02291 UCHAR AFRAME; 02292 02293 UCHAR Reserved7: 7; 02294 UCHAR TCVAL : 1; 02295 02296 UCHAR I[12]; 02297 UCHAR Zero_2; 02298 UCHAR AFRAME_2; 02299 UCHAR Reserved8; 02300 02301 struct { 02302 union { 02303 UCHAR MSF[3]; 02304 struct _SubHdrParams1 { 02305 UCHAR FileNum; 02306 UCHAR ChannelNum; 02307 02308 #define WParam_SubHdr_SubMode0 0x00 02309 #define WParam_SubHdr_SubMode1 0x08 02310 02311 UCHAR SubMode; 02312 } Params1; 02313 } Params; 02314 02315 #define WParam_SubHdr_Mode_Mask 0x03 02316 #define WParam_SubHdr_Mode0 0x00 02317 #define WParam_SubHdr_Mode1 0x01 02318 #define WParam_SubHdr_Mode2 0x02 02319 #define WParam_SubHdr_Format_Mask 0xe0 02320 #define WParam_SubHdr_Format_UserData 0x00 02321 #define WParam_SubHdr_Format_RunIn4 0x20 02322 #define WParam_SubHdr_Format_RunIn3 0x40 02323 #define WParam_SubHdr_Format_RunIn2 0x60 02324 #define WParam_SubHdr_Format_RunIn1 0x80 02325 #define WParam_SubHdr_Format_Link 0xa0 02326 #define WParam_SubHdr_Format_RunOut2 0xc0 02327 #define WParam_SubHdr_Format_RunOut1 0xe0 02328 02329 union { 02330 UCHAR Flags; 02331 struct { 02332 UCHAR Mode : 2; 02333 UCHAR Reserved : 3; 02334 UCHAR Format : 3; 02335 } Fields; 02336 } Mode; 02337 } SubHeader ; 02338 02339 } MODE_WRITE_PARAMS_PAGE, *PMODE_WRITE_PARAMS_PAGE; 02340 02341 typedef struct _MODE_WRITE_PARAMS_PAGE_3 { 02342 MODE_WRITE_PARAMS_PAGE Standard; 02343 UCHAR VendorSpec[4]; 02344 } MODE_WRITE_PARAMS_PAGE_3, *PMODE_WRITE_PARAMS_PAGE_3; 02345 02346 //********************************************************************************************* 02347 // Define Caching page. 02348 02349 typedef struct _MODE_CACHING_PAGE { // 0x08 02350 UCHAR PageCode : 6; 02351 UCHAR Reserved1: 1; 02352 UCHAR PageSavable : 1; 02353 UCHAR PageLength; 02354 UCHAR ReadDisableCache : 1; 02355 UCHAR MultiplicationFactor : 1; 02356 UCHAR WriteCacheEnable : 1; 02357 UCHAR Reserved2 : 5; 02358 UCHAR WriteRetensionPriority : 4; 02359 UCHAR ReadRetensionPriority : 4; 02360 UCHAR DisablePrefetchTransfer[2]; 02361 UCHAR MinimumPrefetch[2]; 02362 UCHAR MaximumPrefetch[2]; 02363 UCHAR MaximumPrefetchCeiling[2]; 02364 } MODE_CACHING_PAGE, *PMODE_CACHING_PAGE; 02365 02366 //********************************************************************************************* 02367 // Define CD Parameters page. 02368 02369 typedef struct _MODE_CD_PARAMS_PAGE { // 0x0D 02370 UCHAR PageCode : 6; 02371 UCHAR Reserved : 1; 02372 UCHAR PageSavable : 1; 02373 02374 UCHAR PageLength; // 0x06 02375 UCHAR Reserved1; 02376 02377 #define CdParams_InactvityTime_Mask 0x0f 02378 02379 union { 02380 UCHAR Flags; 02381 struct { 02382 UCHAR InactivityTime: 4; // 1 - 125ms, 2 - 250ms... 9 - 32s, A - 1min... 02383 UCHAR Reserved0 : 4; 02384 } Fields; 02385 } Byte2; 02386 02387 UCHAR SUnits_per_MUnit[2]; 02388 UCHAR FUnits_per_SUnit[2]; 02389 } MODE_CD_PARAMS_PAGE, *PMODE_CD_PARAMS_PAGE; 02390 02391 //********************************************************************************************* 02392 // Define CD Audio Control Mode page. 02393 02394 typedef struct _CDDA_PORT_CONTROL { 02395 02396 #define CddaPort_Channel_Mask 0x0f 02397 #define CddaPort_Channel_Mute 0x00 02398 #define CddaPort_Channel_0 0x01 02399 #define CddaPort_Channel_1 0x02 02400 #define CddaPort_Channel_0_1 0x03 02401 #define CddaPort_Channel_2 0x04 02402 #define CddaPort_Channel_3 0x08 02403 02404 UCHAR ChannelSelection; 02405 UCHAR Volume; 02406 } CDDA_PORT_CONTROL, *PCDDA_PORT_CONTROL; 02407 02408 typedef struct _MODE_CD_AUDIO_CONTROL_PAGE { // 0x0E 02409 UCHAR PageCode : 6; 02410 UCHAR Reserved1: 1; 02411 UCHAR PageSavable : 1; 02412 02413 UCHAR PageLength; // 0x0E 02414 02415 #define CdAudio_SOTC 0x02 02416 #define CdAudio_Immed 0x04 02417 02418 union { 02419 UCHAR Flags; 02420 struct { 02421 UCHAR Reserved0 : 1; 02422 UCHAR SOTC : 1; 02423 UCHAR Immed : 1; 02424 UCHAR Reserved1 : 5; 02425 } Fields; 02426 } Byte2; 02427 02428 UCHAR Reserved2[2]; 02429 UCHAR LbaFormat; 02430 UCHAR LogicalBlocksPerSecond[2]; 02431 CDDA_PORT_CONTROL Port[4]; 02432 } MODE_CD_AUDIO_CONTROL_PAGE, *PMODE_CD_AUDIO_CONTROL_PAGE; 02433 02434 //********************************************************************************************* 02435 // Define Power Condition Mode page. 02436 02437 typedef struct _MODE_POWER_CONDITION_PAGE { // 0x1A 02438 UCHAR PageCode : 6; 02439 UCHAR Reserved1: 1; 02440 UCHAR PageSavable : 1; 02441 02442 UCHAR PageLength; // 0x0A 02443 UCHAR Reserved2; 02444 02445 #define PowerCond_Standby 0x01 02446 #define PowerCond_Idle 0x02 02447 02448 union { 02449 UCHAR Flags; 02450 struct { 02451 UCHAR Standby : 1; 02452 UCHAR Idle : 1; 02453 UCHAR Reserved1 : 6; 02454 } Fields; 02455 } Byte3; 02456 02457 UCHAR IdleTimer[4]; // 1unit = 100ms 02458 UCHAR StandbyTimer[4]; // 1unit = 100ms 02459 } MODE_POWER_CONDITION_PAGE, *PMODE_POWER_CONDITION_PAGE; 02460 02461 //********************************************************************************************* 02462 // Define Fault/Failure Reporting Control page. 02463 02464 typedef struct _MODE_FAIL_REPORT_PAGE { // 0x1C 02465 UCHAR PageCode : 6; 02466 UCHAR Reserved1: 1; 02467 UCHAR PageSavable : 1; 02468 02469 UCHAR PageLength; // 0x0A 02470 02471 #define FailReport_LogErr 0x01 02472 #define FailReport_Test 0x04 02473 #define FailReport_DExcept 0x08 02474 #define FailReport_Perf 0x80 02475 02476 union { 02477 UCHAR Flags; 02478 struct { 02479 UCHAR LogErr : 1; 02480 UCHAR Reserved1 : 1; 02481 UCHAR Test : 1; 02482 UCHAR DExcept : 1; 02483 UCHAR Reserved2 : 3; 02484 UCHAR Perf : 1; 02485 } Fields; 02486 } Byte2; 02487 02488 union { 02489 UCHAR Flags; 02490 struct { 02491 UCHAR MRIE : 4; 02492 UCHAR Reserved1 : 4; 02493 } Fields; 02494 } Byte3; 02495 02496 UCHAR IntervalTimer[4]; // 1unit = 100ms 02497 UCHAR ReportCount[4]; 02498 } MODE_FAIL_REPORT_PAGE, *PMODE_FAIL_REPORT_PAGE; 02499 02500 //********************************************************************************************* 02501 // Define Time-out and Protect page. 02502 02503 typedef struct _MODE_TIMEOUT_AND_PROTECT_PAGE { // 0x1D 02504 UCHAR PageCode : 6; 02505 UCHAR Reserved1: 1; 02506 UCHAR PageSavable : 1; 02507 02508 UCHAR PageLength; // 0x08 02509 02510 UCHAR Reserved2[2]; 02511 02512 #define Timeout_SW 0x01 02513 #define Timeout_DISP 0x02 02514 #define Timeout_TMOE 0x04 02515 02516 union { 02517 UCHAR Flags; 02518 struct { 02519 UCHAR SW : 1; 02520 UCHAR DISP : 1; 02521 UCHAR TMOE : 1; 02522 UCHAR Reserved : 5; 02523 } Fields; 02524 } Byte4; 02525 02526 UCHAR Reserved3; 02527 02528 UCHAR Group1_Timeout[2]; // 1unit = 1s 02529 UCHAR Group2_Timeout[2]; // 1unit = 1s 02530 } MODE_TIMEOUT_AND_PROTECT_PAGE, *PMODE_TIMEOUT_AND_PROTECT_PAGE; 02531 02532 //********************************************************************************************* 02533 // Define Philips CD-R(W) Sector Mode page. 02534 02535 typedef struct _MODE_PHILIPS_SECTOR_TYPE_PAGE { // 0x21 02536 UCHAR PageCode : 6; 02537 UCHAR Reserved1 : 1; 02538 UCHAR PSBit : 1; 02539 02540 UCHAR PageLength; 02541 02542 UCHAR Reserved0[2]; 02543 02544 union { 02545 UCHAR Flags; 02546 struct { 02547 UCHAR DataBlockType: 4; // 8 02548 UCHAR Reserved2: 4; 02549 } Fields; 02550 } Byte4; 02551 02552 #define WParams_Philips_CreateNewTrack 0 02553 02554 UCHAR Track; 02555 UCHAR ISRC[9]; 02556 02557 UCHAR Reserved3[2]; 02558 } MODE_PHILIPS_SECTOR_TYPE_PAGE, *PMODE_PHILIPS_SECTOR_TYPE_PAGE; 02559 02560 //********************************************************************************************* 02561 // Define CD-X Capabilities and Mechanical Status page. 02562 02563 typedef struct _MODE_CAPABILITIES_PAGE2 { // 0x2A 02564 UCHAR PageCode : 6; 02565 UCHAR Reserved1 : 1; 02566 UCHAR PSBit : 1; 02567 02568 UCHAR PageLength; 02569 02570 #define DevCap_read_cd_r 0x01 // reserved in 1.2 02571 #define DevCap_read_cd_rw 0x02 // reserved in 1.2 02572 #define DevCap_method2 0x04 02573 #define DevCap_read_dvd_rom 0x08 02574 #define DevCap_read_dvd_r 0x10 02575 #define DevCap_read_dvd_ram 0x20 02576 02577 UCHAR ReadCap; // DevCap_*_read 02578 /* UCHAR cd_r_read : 1; // reserved in 1.2 02579 UCHAR cd_rw_read : 1; // reserved in 1.2 02580 UCHAR method2 : 1; 02581 UCHAR dvd_rom : 1; 02582 UCHAR dvd_r_read : 1; 02583 UCHAR dvd_ram_read : 1; 02584 UCHAR Reserved2 : 2;*/ 02585 02586 #define DevCap_write_cd_r 0x01 // reserved in 1.2 02587 #define DevCap_write_cd_rw 0x02 // reserved in 1.2 02588 #define DevCap_test_write 0x04 02589 #define DevCap_write_dvd_r 0x10 02590 #define DevCap_write_dvd_ram 0x20 02591 02592 UCHAR WriteCap; // DevCap_*_write 02593 /* UCHAR cd_r_write : 1; // reserved in 1.2 02594 UCHAR cd_rw_write : 1; // reserved in 1.2 02595 UCHAR test_write : 1; 02596 UCHAR reserved3a : 1; 02597 UCHAR dvd_r_write : 1; 02598 UCHAR dvd_ram_write : 1; 02599 UCHAR Reserved3 : 2;*/ 02600 02601 #define DevCap_audio_play 0x01 02602 #define DevCap_composite 0x02 02603 #define DevCap_digport1 0x04 02604 #define DevCap_digport2 0x08 02605 #define DevCap_mode2_form1 0x10 02606 #define DevCap_mode2_form2 0x20 02607 #define DevCap_multisession 0x40 02608 02609 UCHAR Capabilities0; 02610 /* UCHAR audio_play : 1; 02611 UCHAR composite : 1; 02612 UCHAR digport1 : 1; 02613 UCHAR digport2 : 1; 02614 UCHAR mode2_form1 : 1; 02615 UCHAR mode2_form2 : 1; 02616 UCHAR multisession : 1; 02617 UCHAR Reserved4 : 1;*/ 02618 02619 #define DevCap_cdda 0x01 02620 #define DevCap_cdda_accurate 0x02 02621 #define DevCap_rw_supported 0x04 02622 #define DevCap_rw_corr 0x08 02623 #define DevCap_c2_pointers 0x10 02624 #define DevCap_isrc 0x20 02625 #define DevCap_upc 0x40 02626 #define DevCap_read_bar_code 0x80 02627 02628 UCHAR Capabilities1; 02629 /* UCHAR cdda : 1; 02630 UCHAR cdda_accurate : 1; 02631 UCHAR rw_supported : 1; 02632 UCHAR rw_corr : 1; 02633 UCHAR c2_pointers : 1; 02634 UCHAR isrc : 1; 02635 UCHAR upc : 1; 02636 UCHAR Reserved5 : 1;*/ 02637 02638 #define DevCap_lock 0x01 02639 #define DevCap_lock_state 0x02 02640 #define DevCap_prevent_jumper 0x04 02641 #define DevCap_eject 0x08 02642 #define DevCap_mechtype_mask 0xE0 02643 #define DevCap_mechtype_caddy 0x00 02644 #define DevCap_mechtype_tray (0x01<<5) 02645 #define DevCap_mechtype_popup (0x02<<5) 02646 #define DevCap_mechtype_individual_changer (0x04<<5) 02647 #define DevCap_mechtype_cartridge_changer (0x05<<5) 02648 02649 UCHAR Capabilities2; 02650 /* UCHAR lock : 1; 02651 UCHAR lock_state : 1; 02652 UCHAR prevent_jumper : 1; 02653 UCHAR eject : 1; 02654 UCHAR Reserved6 : 1; 02655 UCHAR mechtype : 3;*/ 02656 02657 #define DevCap_separate_volume 0x01 02658 #define DevCap_separate_mute 0x02 02659 #define DevCap_disc_present 0x04 // reserved in 1.2 02660 #define DevCap_sw_slot_select 0x08 // reserved in 1.2 02661 #define DevCap_change_side_cap 0x10 02662 #define DevCap_rw_leadin_read 0x20 02663 02664 UCHAR Capabilities3; 02665 /* UCHAR separate_volume : 1; 02666 UCHAR separate_mute : 1; 02667 UCHAR disc_present : 1; // reserved in 1.2 02668 UCHAR sss : 1; // reserved in 1.2 02669 UCHAR Reserved7 : 4;*/ 02670 02671 UCHAR MaximumSpeedSupported[2]; 02672 UCHAR NumberVolumeLevels[2]; 02673 UCHAR BufferSize[2]; 02674 UCHAR CurrentSpeed[2]; 02675 02676 UCHAR Reserved8; 02677 02678 UCHAR SpecialParameters0; 02679 /* UCHAR Reserved9 : 1; 02680 UCHAR BCK : 1; 02681 UCHAR RCK : 1; 02682 UCHAR LSBF : 1; 02683 UCHAR Length : 2; 02684 UCHAR Reserved10 : 2;*/ 02685 02686 UCHAR MaximumWriteSpeedSupported[2]; 02687 UCHAR CurrentWriteSpeed[2]; 02688 UCHAR CopyManagementRevision[2]; 02689 UCHAR Reserved11[2]; 02690 02691 // MMC3 02692 02693 UCHAR Reserved12; 02694 02695 UCHAR SpecialParameters1; 02696 /* UCHAR RCS : 2; // rotation control selected 02697 UCHAR Reserved13 : 6; */ 02698 02699 UCHAR CurrentWriteSpeed3[2]; 02700 UCHAR LunWPerfDescriptorCount[2]; 02701 02702 // LUN_WRITE_PERF_DESC LunWPerfDescriptor[0]; 02703 02704 } MODE_CAPABILITIES_PAGE2, *PMODE_CAPABILITIES_PAGE2; 02705 02706 typedef struct _LUN_WRITE_PERF_DESC { 02707 UCHAR Reserved; 02708 02709 #define LunWPerf_RotCtrl_Mask 0x07 02710 #define LunWPerf_RotCtrl_CLV 0x00 02711 #define LunWPerf_RotCtrl_CAV 0x01 02712 02713 UCHAR RotationControl; 02714 UCHAR WriteSpeedSupported[2]; // kbps 02715 02716 } LUN_WRITE_PERF_DESC, *PLUN_WRITE_PERF_DESC; 02717 02718 // Mode parameter list block descriptor - 02719 // set the block length for reading/writing 02720 02721 #define MODE_BLOCK_DESC_LENGTH 8 02722 #define MODE_HEADER_LENGTH 4 02723 #define MODE_HEADER_LENGTH10 8 02724 02725 #define CDB_USE_MSF 0x01 02726 02727 // Atapi 2.5 changer 02728 typedef struct _MECHANICAL_STATUS_INFORMATION_HEADER { 02729 UCHAR CurrentSlot : 5; 02730 UCHAR ChangerState : 2; 02731 UCHAR Fault : 1; 02732 UCHAR Reserved : 5; 02733 UCHAR MechanismState : 3; 02734 UCHAR CurrentLogicalBlockAddress[3]; 02735 UCHAR NumberAvailableSlots; 02736 UCHAR SlotTableLength[2]; 02737 } MECHANICAL_STATUS_INFORMATION_HEADER, *PMECHANICAL_STATUS_INFORMATION_HEADER; 02738 02739 typedef struct _SLOT_TABLE_INFORMATION { 02740 UCHAR DiscChanged : 1; 02741 UCHAR Reserved : 6; 02742 UCHAR DiscPresent : 1; 02743 UCHAR Reserved2[3]; 02744 } SLOT_TABLE_INFORMATION, *PSLOT_TABLE_INFORMATION; 02745 02746 typedef struct _MECHANICAL_STATUS { 02747 MECHANICAL_STATUS_INFORMATION_HEADER MechanicalStatusHeader; 02748 SLOT_TABLE_INFORMATION SlotTableInfo[1]; 02749 } MECHANICAL_STATUS, *PMECHANICAL_STATUS; 02750 02751 // DVD structure blocks 02752 02753 typedef struct _DVD_DESCRIPTOR_HEADER { 02754 UCHAR Length[2]; 02755 UCHAR Reserved[2]; 02756 } DVD_DESCRIPTOR_HEADER, *PDVD_DESCRIPTOR_HEADER; 02757 02758 typedef struct _DVD_LAYER_DESCRIPTOR { 02759 DVD_DESCRIPTOR_HEADER Header; 02760 UCHAR Length[2]; 02761 UCHAR BookVersion : 4; 02762 UCHAR BookType : 4; 02763 UCHAR MinimumRate : 4; 02764 UCHAR DiskSize : 4; 02765 UCHAR LayerType : 4; 02766 UCHAR TrackPath : 1; 02767 UCHAR NumberOfLayers : 2; 02768 UCHAR Reserved1 : 1; 02769 UCHAR TrackDensity : 4; 02770 UCHAR LinearDensity : 4; 02771 UCHAR StartingDataSector[4]; 02772 UCHAR EndDataSector[4]; 02773 UCHAR EndLayerZeroSector[4]; 02774 UCHAR Reserved5 : 7; 02775 UCHAR BCAFlag : 1; 02776 UCHAR Reserved6; 02777 } DVD_LAYER_DESCRIPTOR, *PDVD_LAYER_DESCRIPTOR; 02778 02779 typedef struct _DVD_COPYRIGHT_INFORMATION { 02780 UCHAR CopyrightProtectionSystemType; 02781 UCHAR RegionManagementInformation; 02782 UCHAR Reserved[2]; 02783 } DVD_COPYRIGHT_INFORMATION, *PDVD_COPYRIGHT_INFORMATION; 02784 02785 typedef struct _DVD_DISK_KEY_STRUCTURES { 02786 UCHAR DiskKeyData[2048]; 02787 } DVD_DISK_KEY_STRUCTURES, *PDVD_DISK_KEY_STRUCTURES; 02788 02789 typedef struct _CDVD_KEY_HEADER { 02790 UCHAR DataLength[2]; 02791 UCHAR Reserved[2]; 02792 } CDVD_KEY_HEADER, *PCDVD_KEY_HEADER; 02793 02794 typedef struct _CDVD_REPORT_AGID_DATA { 02795 CDVD_KEY_HEADER Header; 02796 UCHAR Reserved1[3]; 02797 UCHAR Reserved2 : 6; 02798 UCHAR AGID : 2; 02799 } CDVD_REPORT_AGID_DATA, *PCDVD_REPORT_AGID_DATA; 02800 02801 typedef struct _CDVD_CHALLENGE_KEY_DATA { 02802 CDVD_KEY_HEADER Header; 02803 UCHAR ChallengeKeyValue[10]; 02804 UCHAR Reserved[2]; 02805 } CDVD_CHALLENGE_KEY_DATA, *PCDVD_CHALLENGE_KEY_DATA; 02806 02807 typedef struct _CDVD_KEY_DATA { 02808 CDVD_KEY_HEADER Header; 02809 UCHAR Key[5]; 02810 UCHAR Reserved[3]; 02811 } CDVD_KEY_DATA, *PCDVD_KEY_DATA; 02812 02813 typedef struct _CDVD_REPORT_ASF_DATA { 02814 CDVD_KEY_HEADER Header; 02815 UCHAR Reserved1[3]; 02816 UCHAR Success : 1; 02817 UCHAR Reserved2 : 7; 02818 } CDVD_REPORT_ASF_DATA, *PCDVD_REPORT_ASF_DATA; 02819 02820 typedef struct _CDVD_TITLE_KEY_HEADER { 02821 CDVD_KEY_HEADER Header; 02822 UCHAR DataLength[2]; 02823 UCHAR Reserved1[1]; 02824 UCHAR Reserved2 : 3; 02825 UCHAR CGMS : 2; 02826 UCHAR CP_SEC : 1; 02827 UCHAR CPM : 1; 02828 UCHAR Zero : 1; 02829 CDVD_KEY_DATA TitleKey; 02830 } CDVD_TITLE_KEY_HEADER, *PCDVD_TITLE_KEY_HEADER; 02831 02832 typedef struct _DVD_COPYRIGHT_DESCRIPTOR { 02833 UCHAR CopyrightProtectionType; 02834 UCHAR RegionManagementInformation; 02835 UCHAR Reserved[2]; 02836 } DVD_COPYRIGHT_DESCRIPTOR, *PDVD_COPYRIGHT_DESCRIPTOR; 02837 02838 typedef struct _DVD_RPC_KEY { 02839 UCHAR UserResetsAvailable:3; 02840 UCHAR ManufacturerResetsAvailable:3; 02841 UCHAR TypeCode:2; 02842 UCHAR RegionMask; 02843 UCHAR RpcScheme; 02844 UCHAR Reserved2[1]; 02845 } DVD_RPC_KEY, * PDVD_RPC_KEY; 02846 02847 #pragma pack(pop) 02848 02849 #endif //__CDRW_DEVICE_H__ Generated on Sat May 26 2012 04:26:59 for ReactOS by
1.7.6.1
|