ReactOS  0.4.14-dev-583-g2a1ba2c
scsi.h
Go to the documentation of this file.
1 /*++
2 
3 Copyright (c) 2002-2005 Alexandr A. Telyatnikov (Alter)
4 
5 Module Name:
6  scsi.h
7 
8 Abstract:
9  This file contains SCSI protocol definitions
10 
11 Author:
12  Alexander A. Telyatnikov (Alter)
13 
14 Environment:
15  kernel mode only
16 
17 Notes:
18 
19  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 
30 Revision History:
31 
32 --*/
33 #ifndef __CDRW_DEVICE_H__
34 #define __CDRW_DEVICE_H__
35 
36 #include "srb.h"
37 
38 #pragma pack(push, 1)
39 
40 // Command Descriptor Block. Passed by SCSI controller chip over the SCSI bus
41 
42 typedef union _CDB {
43 
44  // Generic 6-Byte CDB
45  struct _CDB6 {
47  UCHAR Immediate : 1;
49  UCHAR Lun : 3;
51  UCHAR Link : 1;
52  UCHAR Flag : 1;
53  UCHAR Reserved : 4;
54  UCHAR VendorUnique : 2;
55  } CDB6, *PCDB6;
56 
57  struct _REQUEST_SENSE {
59  UCHAR Reserved0 : 5;
60  UCHAR Lun : 3;
61  UCHAR Reserved1[2];
63  UCHAR Link : 1;
64  UCHAR Flag : 1;
65  UCHAR Reserved2 : 6;
67 
68  // Standard 6-byte CDB
69  struct _CDB6READWRITE {
71  UCHAR LBA2 : 5;
72  UCHAR Lun : 3;
73  UCHAR LBA0[2];
75  UCHAR Control;
77 
78  // SCSI Inquiry CDB
79  struct _CDB6INQUIRY {
81  UCHAR Reserved1 : 5;
82  UCHAR Lun : 3;
86  UCHAR Control;
88 
89  // SCSI Format CDB
90 
91  struct _ERASE {
93  UCHAR Long : 1;
94  UCHAR Immediate : 1;
95  UCHAR Reserved1 : 3;
96  UCHAR Lun : 3;
97  UCHAR Reserved2[3];
98  UCHAR Control;
99  } ERASE, *PERASE;
100 
101  struct _ERASE10 {
105  UCHAR ERA : 1;
107  UCHAR Lun : 3;
108  UCHAR LBA[4];
112  } ERASE10, *PERASE10;
113 
114 #define FormatUnit_Code_Mask 0x07
115 #define FormatUnit_Cmp 0x08
116 #define FormatUnit_Fmt 0x10
117 
118  struct _CDB6FORMAT {
120  union {
121  UCHAR Flags;
122  struct {
123  UCHAR FormatCode : 3;
124  UCHAR Cmp:1;
125  UCHAR Fmt:1;
126  UCHAR Lun : 3;
127  } Fields;
128  } Byte1;
130  UCHAR Interleave[2];
133 
134  // Standard 10-byte CDB
135  struct _CDB10 {
138  UCHAR Reserved1 : 2;
140  UCHAR DisablePageOut : 1;
141  UCHAR Lun : 3;
142  UCHAR LBA[4];
145  UCHAR Control;
146  } CDB10, *PCDB10;
147 
148  // Service Action 16-byte CDB
153  UCHAR Data[14];
155 
156  // CD Rom Audio CDBs
157 
158 #define PauseResume_Pause 0x00
159 #define PauseResume_Resume 0x01
160 
161  struct _PAUSE_RESUME {
163  UCHAR Reserved1 : 5;
164  UCHAR Lun : 3;
165  UCHAR Reserved2[6];
166  UCHAR Action;
167  UCHAR Control;
169 
170  // Read Table of Contents (TOC)
171 
172 #define ReadTOC_Format_Mask 0x0f
173 #define ReadTOC_Format_TOC 0x00
174 #define ReadTOC_Format_SesInfo 0x01
175 #define ReadTOC_Format_FullTOC 0x02
176 #define ReadTOC_Format_PMA 0x03
177 #define ReadTOC_Format_ATIP 0x04
178 #define ReadTOC_Format_CdText 0x05
179 
180  struct _READ_TOC {
182  UCHAR Reserved0 : 1;
183  UCHAR Msf : 1; // HMSF MMC-3
184  UCHAR Reserved1 : 3;
185  UCHAR Lun : 3;
186 
187  union {
188  UCHAR Flags;
189  struct {
190  UCHAR Format : 4;
191  UCHAR Reserved : 4;
192  } Fields;
193  } Byte2;
194 
195  UCHAR Reserved2[3];
198  UCHAR Control : 6;
199  UCHAR Format : 2;
200  } READ_TOC, *PREAD_TOC;
201 
202  // Play Audio MSF
203  struct _PLAY_AUDIO_MSF {
205  UCHAR Reserved1 : 5;
206  UCHAR Lun : 3;
208  UCHAR StartingMSF[3];
209  UCHAR EndingMSF[3];
210  UCHAR Control;
212 
213  // Read SubChannel Data
214 
215 #define SubChannel_SubQ_Header 0x00
216 #define SubChannel_SubQ_Block 0x01
217 
218  struct _SUBCHANNEL {
220  UCHAR Reserved0 : 1;
221  UCHAR Msf : 1;
222  UCHAR Reserved1 : 3;
223  UCHAR Lun : 3;
224  UCHAR Reserved2 : 6;
225  UCHAR SubQ : 1;
226  UCHAR Reserved3 : 1;
227  UCHAR Format;
228  UCHAR Reserved4[2];
231  UCHAR Control;
233 
234  // Read CD (by LBA/MSF). Used by Atapi for raw sector reads.
235 
236 #define ReadCD_SecType_Mask 0x1c
237 #define ReadCD_SecType_Any 0x00
238 #define ReadCD_SecType_CDDA 0x04
239 #define ReadCD_SecType_M1 0x08
240 #define ReadCD_SecType_M2 0x0c
241 #define ReadCD_SecType_M2F1 0x10
242 #define ReadCD_SecType_M2F2 0x14
243 
244  struct _READ_CD_MSF {
246 
247  UCHAR Reserved0 : 2;
249  UCHAR Reserved1 : 3;
250 
252  UCHAR Starting_MSF[3];
253  UCHAR Ending_MSF[3];
254 
255  UCHAR Reserved3 : 1;
256  UCHAR ErrorFlags : 2;
257  UCHAR IncludeEDC : 1;
259  UCHAR HeaderCode : 2;
261 
263  UCHAR Reserved4 : 5;
264 
265  UCHAR Control;
267 
268  struct _READ_CD {
270 
273  UCHAR Reserved1 : 3;
274 
275  UCHAR LBA[4];
276  UCHAR NumOfBlocks[3];
277 
278  UCHAR Reserved3 : 1;
279  UCHAR ErrorFlags : 2;
280  UCHAR IncludeEDC : 1;
282  UCHAR HeaderCode : 2;
284 
286  UCHAR Reserved4 : 5;
287 
288  UCHAR Control;
289  } READ_CD, *PREAD_CD;
290 
291 #define WriteCd_RELADR 0x01
292 #define WriteCd_FUA 0x08
293 #define WriteCd_DPO 0x10
294 
295  struct _WRITE_CD {
297  union {
298  UCHAR Flags;
299  struct {
300  UCHAR RELADR : 1;
301  UCHAR Reserved0 : 2;
302  UCHAR FUA : 1;
303  UCHAR DPO : 1;
304  UCHAR Reserved1 : 3;
305  } Fields;
306  } Byte1;
307  UCHAR LBA [4];
309  UCHAR NumOfBlocks [2];
310  UCHAR Reserved2 [3];
311  } WRITE_CD, *PWRITE_CD;
312 
313  // Mode sense
314  struct _MODE_SENSE {
316  UCHAR Reserved1 : 3;
317  UCHAR Dbd : 1;
318  UCHAR Reserved2 : 1;
319  UCHAR Lun : 3;
320  UCHAR PageCode : 6;
321  UCHAR Pc : 2;
324  UCHAR Control;
326 
327  struct _MODE_SENSE10 {
329  UCHAR Reserved1 : 3;
330  UCHAR Dbd : 1;
331  UCHAR Reserved2 : 1;
332  UCHAR Lun : 3;
333  UCHAR PageCode : 6;
334  UCHAR Pc : 2;
335  UCHAR Reserved3[4];
337  UCHAR Control;
339 
340  // Mode select
341  struct _MODE_SELECT {
343  UCHAR SPBit : 1;
344  UCHAR Reserved1 : 3;
345  UCHAR PFBit : 1;
346  UCHAR Lun : 3;
347  UCHAR Reserved2[2];
349  UCHAR Control;
351 
352  struct _MODE_SELECT10 {
354  UCHAR SPBit : 1;
355  UCHAR Reserved1 : 3;
356  UCHAR PFBit : 1;
357  UCHAR Lun : 3;
358  UCHAR Reserved2[5];
360  UCHAR Control;
362 
363  struct _LOGSENSE {
365  UCHAR SPBit : 1;
366  UCHAR PPCBit : 1;
367  UCHAR Reserved1 : 3;
368  UCHAR Lun : 3;
369  UCHAR PageCode : 6;
370  UCHAR PCBit : 2;
373  UCHAR ParameterPointer[2]; // [0]=MSB, [1]=LSB
374  UCHAR AllocationLength[2]; // [0]=MSB, [1]=LSB
375  UCHAR Control;
376  } LOGSENSE, *PLOGSENSE;
377 
378  struct _SEEK {
380  UCHAR Reserved1 : 5;
381  UCHAR Lun : 3;
382  UCHAR LBA[4];
383  UCHAR Reserved2[3];
384  UCHAR Control;
385  } SEEK, *PSEEK;
386 
387 #define StartStop_Start 0x01
388 #define StartStop_Load 0x02
389 
390  struct _START_STOP {
392  UCHAR Immediate: 1;
393  UCHAR Reserved1 : 4;
394  UCHAR Lun : 3;
398  UCHAR Start : 1;
399  UCHAR LoadEject : 1;
400  UCHAR FL : 1;
401  UCHAR Reserved3 : 1;
403  UCHAR Control;
405 
406 #define StartStop_Power_NoChg 0x00
407 #define StartStop_Power_Idle 0x02
408 #define StartStop_Power_Standby 0x03
409 #define StartStop_Power_Sleep 0x05
410 
411  struct _MEDIA_REMOVAL {
413  UCHAR Reserved1 : 5;
414  UCHAR Lun : 3;
415  UCHAR Reserved2[2];
416  UCHAR Prevent;
417  UCHAR Control;
419 
420  struct _READ_FORMAT_CAPACITIES {
422  union {
423  UCHAR Flags;
424  struct {
425  UCHAR Reserved0 : 5;
426  UCHAR Reserved1 : 3;
427  } Fields;
428  } Byte1;
429  UCHAR Reserved0[5];
431  UCHAR Control;
433 
434  // Atapi 2.5 Changer 12-byte CDBs
435 #define LoadUnload_Start 0x01
436 #define LoadUnload_Load 0x02
437 
438  struct _LOAD_UNLOAD {
440  UCHAR Immediate : 1;
441  UCHAR Reserved1 : 7;
442  UCHAR Reserved2[2];
443  UCHAR Start : 1;
444  UCHAR LoadEject : 1;
445  UCHAR Reserved3: 6;
446  UCHAR Reserved4[3];
447  UCHAR Slot;
448  UCHAR Reserved5[3];
450 
451  struct _MECH_STATUS {
453  UCHAR Reserved0[7];
455  UCHAR Reserved2[2];
457 
458  struct _LOCK_DOOR {
460  UCHAR Reserved0[9];
461  } LOCK_DOOR, *PLOCK_DOOR;
462 
463 #define EventStat_Immed 0x01
464 
465 #define EventStat_Class_OpChange 0x02
466 #define EventStat_Class_PM 0x04
467 #define EventStat_Class_ExternalReq 0x08
468 #define EventStat_Class_Media 0x10
469 #define EventStat_Class_MultiInit 0x20
470 #define EventStat_Class_DevBusy 0x40
471 
472  struct _GET_EVENT_STATUS {
474  union {
475  UCHAR Flags;
476  struct {
477  UCHAR Immed : 1;
478  UCHAR Reserved0 : 7;
479  } Fields;
480  } Byte1;
481  UCHAR Reserved0[2];
483  UCHAR Reserved1[2];
485  UCHAR Control;
487 
488  struct _READ_DISC_INFO {
490  UCHAR Reserved0[6];
492  UCHAR Reserved2[3];
494 
495 #define ReadTrackInfo_Type_Mask 0x01
496 #define ReadTrackInfo_Type_LBA 0x00
497 #define ReadTrackInfo_Type_Track 0x01
498 
499 #define ReadTrackInfo_LastTrk 0xff
500 
501  struct _READ_TRACK_INFO {
503  UCHAR Track : 1;
504  UCHAR Reserved0 : 7;
505  UCHAR LBA_TrkNum [4];
508  UCHAR Reserved2[3];
510 
511 #define ReadTrackInfo3_Type_Mask 0x03
512 #define ReadTrackInfo3_Type_LBA ReadTrackInfo_Type_LBA
513 #define ReadTrackInfo3_Type_Track ReadTrackInfo_Type_Track
514 #define ReadTrackInfo3_Type_Ses 0x02
515 
516 #define ReadTrackInfo3_LastTrk ReadTrackInfo_LastTrk
517 #define ReadTrackInfo3_DiscLeadIn 0x00 // for Track type
518 
519  struct _READ_TRACK_INFO_3 {
521  UCHAR DataType : 2;
522  UCHAR Reserved0 : 6;
523  UCHAR LBA_TrkNum [4];
526  UCHAR Reserved2[3];
528 
529  struct _RESERVE_TRACK {
531  UCHAR Reserved0[4];
535 
536 #define CloseTrkSes_Immed 0x01
537 
538 #define CloseTrkSes_Trk 0x01
539 #define CloseTrkSes_Ses 0x02
540 
541 #define CloseTrkSes_LastTrkSes 0xff
542 
543 #define CloseTrkSes_Delay DEF_I64(3100000000) // 310 s
544 
545  struct _CLOSE_TRACK_SESSION {
547  union {
548  UCHAR Flags;
549  struct {
550  UCHAR Immed : 1;
551  UCHAR Reserved0 : 7;
552  } Fields;
553  } Byte1;
554  union {
555  UCHAR Flags;
556  struct {
557  UCHAR Track : 1;
558  UCHAR Session : 1;
559  UCHAR Reserved0 : 6;
560  } Fields;
561  } Byte2;
562  UCHAR Reserved1 [2];
563  UCHAR TrackNum;
564  UCHAR Reserved2 [6];
565 
567 
568  struct _SET_CD_SPEED {
571  UCHAR ReadSpeed [2]; // Kbyte/sec
572  UCHAR WriteSpeed [2]; // Kbyte/sec
573  UCHAR Reserved1[6];
575 
576 #define SyncCache_RELADR 0x01
577 #define SyncCache_Immed 0x02
578 
579  struct _SYNCHRONIZE_CACHE {
581  union {
582  UCHAR Flags;
583  struct {
584  UCHAR RELADR : 1;
585  UCHAR Immed : 1;
586  UCHAR Reserved0 : 6; // All these are unused by drive
587  } Fields;
588  } Byte1;
589  UCHAR LBA [4];
591  UCHAR NumOfBlocks [2];
592  UCHAR Reserved2 [3];
593 /*
594  UCHAR Unused [11];*/
596 
597 #define BlankMedia_Mask 0x07
598 #define BlankMedia_Complete 0x00
599 #define BlankMedia_Minimal 0x01
600 #define BlankMedia_Track 0x02
601 #define BlankMedia_UnreserveTrack 0x03
602 #define BlankMedia_TrackTail 0x04
603 #define BlankMedia_UncloseLastSes 0x05
604 #define BlankMedia_EraseSes 0x06
605 #define BlankMedia_Immed 0x10
606 
607  struct _BLANK_MEDIA {
609  union {
610  UCHAR Flags;
611  struct {
612  UCHAR BlankType : 3;
613  UCHAR Reserved0 : 1;
614  UCHAR Immed : 1;
615  UCHAR Reserved1 : 3;
616  } Fields;
617  } Byte1;
619  UCHAR Reserved2 [6];
621 
622 #define SendKey_ReportAGID 0x00
623 #define SendKey_ChallengeKey 0x01
624 #define SendKey_Key1 0x02
625 #define SendKey_Key2 0x03
626 #define SendKey_TitleKey 0x04
627 #define SendKey_ReportASF 0x05
628 #define SendKey_InvalidateAGID 0x3F
629 
630  struct _SEND_KEY {
632  UCHAR Reserved1 : 5;
633  UCHAR Lun : 3;
634  UCHAR Reserved2[6];
636  UCHAR KeyFormat : 6;
637  UCHAR AGID : 2;
638  UCHAR Control;
639  } SEND_KEY, *PSEND_KEY;
640 
641  struct _REPORT_KEY {
642  UCHAR OperationCode; // 0xA4
643  UCHAR Reserved1 : 5;
644  UCHAR Lun : 3;
645  UCHAR LBA[4]; // for title key
646  UCHAR Reserved2[2];
648  UCHAR KeyFormat : 6;
649  UCHAR AGID : 2;
650  UCHAR Control;
652 
653  struct _READ_DVD_STRUCTURE {
654  UCHAR OperationCode; // 0xAD
655  UCHAR Reserved1 : 5;
656  UCHAR Lun : 3;
659  UCHAR Format;
660  UCHAR AllocationLength[2]; // [0]=MSB, [1]=LSB
661  UCHAR Reserved3 : 6;
662  UCHAR AGID : 2;
663  UCHAR Control;
665 
666  struct _READ_BUFFER_CAPACITY {
668  UCHAR Reserved0 [6];
670  UCHAR Reserved1 [3];
672 
673  struct _GET_CONFIGURATION {
675  union {
676  UCHAR Flags;
677  struct {
678  UCHAR RT : 2;
679  UCHAR Reserved0 : 6;
680  } Fields;
681  } Byte1;
683  UCHAR Reserved0 [3];
685  UCHAR Control;
687 
688  struct _SET_READ_AHEAD {
691  UCHAR TriggerLBA[4];
692  UCHAR ReadAheadLBA[4];
694  UCHAR Control;
696 
697  struct _REPORT_LUNS {
698  UCHAR OperationCode; // 0xA0 - SCSIOP_REPORT_LUNS
704 
705 #define SendOpc_DoOpc 0x01
706 
707  struct _SEND_OPC_INFO {
709  union {
710  UCHAR Flags;
711  struct {
712  UCHAR DoOpc : 1;
713  UCHAR Reserved0 : 4;
714  UCHAR Reserved1 : 3;
715  } Fields;
716  } Byte1;
717  UCHAR Reserved0 [5];
719  UCHAR Control;
721 
722  struct _SEND_CUE_SHEET {
724  UCHAR Reserved0 [5];
726  UCHAR Control;
728 
729  struct _CDB12 {
731  UCHAR Params[11];
732  } CDB12, *PCDB12;
733 
734  struct _CDB12READWRITE {
736  union {
737  UCHAR Flags;
738  struct {
739  UCHAR RELADR : 1;
740  UCHAR Reserved0 : 2;
741  UCHAR FUA : 1;
742  UCHAR DPO : 1;
743  UCHAR Reserved1 : 3;
744  } Fields;
745  } Byte1;
746  UCHAR LBA [4];
747  UCHAR NumOfBlocks [4];
748  UCHAR Reserved1[2];
750 
753  union {
755  struct {
758  UCHAR FUA : 1;
759  UCHAR DPO : 1;
761  } Fields;
762  } Byte1;
763  UCHAR LBA [8];
767  UCHAR Restricted:1; // MMC-4
768  UCHAR Reserved1[1];
770 
771  // Plextor Read CD-DA
772  struct _PLXTR_READ_CDDA {
774  UCHAR Reserved0 : 5;
775  UCHAR Lun :3;
776  UCHAR LBA[4];
777  UCHAR TransferBlock[4];
778  UCHAR SubCode;
779  UCHAR Control;
781 
782  // NEC Read CD-DA
783  struct _NEC_READ_CDDA {
786  UCHAR LBA[4];
788  UCHAR TransferBlock[2];
789  UCHAR Control;
791 
792 } CDB, *PCDB;
793 
794 // Command Descriptor Block constants.
795 
796 #define CDB6GENERIC_LENGTH 6
797 #define CDB10GENERIC_LENGTH 10
798 #define CDB12GENERIC_LENGTH 12
799 
800 #define MAXIMUM_NUMBER_OF_TRACKS 100
801 #define MAXIMUM_NUMBER_OF_SESSIONS 1024 //maximal number of entries in Read Full TOC
802 
803 #define SETBITON 1
804 #define SETBITOFF 0
805 
806 // Mode Sense/Select page constants.
807 
808 #define MODE_PAGE_ERROR_RECOVERY 0x01
809 #define MODE_PAGE_WRITE_PARAMS 0x05
810 #define MODE_PAGE_VERIFY_ERROR 0x07 // shall not be used
811 #define MODE_PAGE_CACHING 0x08 // undocumented, but used by DirectCd
812 #define MODE_PAGE_MEDIUM_TYPES 0x0B // shall not be used
813 #define MODE_PAGE_CD_DEVICE_PARAMS 0x0D
814 #define MODE_PAGE_CD_AUDIO_CONTROL 0x0E
815 #define MODE_PAGE_POWER_CONDITION 0x1A
816 #define MODE_PAGE_FAIL_REPORT 0x1C
817 #define MODE_PAGE_TIMEOUT_AND_PROTECT 0x1D
818 #define MODE_PAGE_PHILIPS_SECTOR_TYPE 0x21
819 #define MODE_PAGE_CAPABILITIES 0x2A
820 
821 #define MODE_SENSE_RETURN_ALL 0x3f
822 
823 #define MODE_SENSE_CURRENT_VALUES 0x00
824 #define MODE_SENSE_CHANGEABLE_VALUES 0x40
825 #define MODE_SENSE_DEFAULT_VAULES 0x80
826 #define MODE_SENSE_SAVED_VALUES 0xc0
827 
828 // SCSI CDB operation codes
829 
830 #define SCSIOP_TEST_UNIT_READY 0x00
831 #define SCSIOP_REZERO_UNIT 0x01
832 #define SCSIOP_REWIND 0x01
833 #define SCSIOP_REQUEST_BLOCK_ADDR 0x02
834 #define SCSIOP_REQUEST_SENSE 0x03
835 #define SCSIOP_FORMAT_UNIT 0x04
836 #define SCSIOP_READ_BLOCK_LIMITS 0x05
837 #define SCSIOP_REASSIGN_BLOCKS 0x07
838 #define SCSIOP_READ6 0x08
839 #define SCSIOP_RECEIVE 0x08
840 #define SCSIOP_WRITE6 0x0A
841 #define SCSIOP_PRINT 0x0A
842 #define SCSIOP_SEND 0x0A
843 #define SCSIOP_SEEK6 0x0B
844 #define SCSIOP_TRACK_SELECT 0x0B
845 #define SCSIOP_SLEW_PRINT 0x0B
846 #define SCSIOP_SEEK_BLOCK 0x0C
847 #define SCSIOP_PARTITION 0x0D
848 #define SCSIOP_READ_REVERSE 0x0F
849 #define SCSIOP_WRITE_FILEMARKS 0x10
850 #define SCSIOP_FLUSH_BUFFER 0x10
851 #define SCSIOP_SPACE 0x11
852 #define SCSIOP_INQUIRY 0x12
853 #define SCSIOP_VERIFY6 0x13
854 #define SCSIOP_RECOVER_BUF_DATA 0x14
855 #define SCSIOP_MODE_SELECT 0x15
856 #define SCSIOP_RESERVE_UNIT 0x16
857 #define SCSIOP_RELEASE_UNIT 0x17
858 #define SCSIOP_COPY 0x18
859 #define SCSIOP_ERASE 0x19
860 #define SCSIOP_MODE_SENSE 0x1A
861 #define SCSIOP_START_STOP_UNIT 0x1B
862 #define SCSIOP_STOP_PRINT 0x1B
863 #define SCSIOP_LOAD_UNLOAD 0x1B
864 #define SCSIOP_RECEIVE_DIAGNOSTIC 0x1C
865 #define SCSIOP_SEND_DIAGNOSTIC 0x1D
866 #define SCSIOP_MEDIUM_REMOVAL 0x1E
867 #define SCSIOP_READ_FORMAT_CAPACITY 0x23
868 #define SCSIOP_READ_CAPACITY 0x25
869 #define SCSIOP_READ 0x28
870 #define SCSIOP_WRITE 0x2A
871 #define SCSIOP_WRITE_CD 0x2A
872 #define SCSIOP_SEEK 0x2B
873 #define SCSIOP_LOCATE 0x2B
874 #define SCSIOP_ERASE10 0x2C
875 #define SCSIOP_WRITE_VERIFY 0x2E
876 #define SCSIOP_VERIFY 0x2F
877 #define SCSIOP_SEARCH_DATA_HIGH 0x30
878 #define SCSIOP_SEARCH_DATA_EQUAL 0x31
879 #define SCSIOP_SEARCH_DATA_LOW 0x32
880 #define SCSIOP_SET_LIMITS 0x33
881 #define SCSIOP_READ_POSITION 0x34
882 #define SCSIOP_SYNCHRONIZE_CACHE 0x35
883 #define SCSIOP_COMPARE 0x39
884 #define SCSIOP_COPY_COMPARE 0x3A
885 #define SCSIOP_COPY_VERIFY 0x3A
886 #define SCSIOP_WRITE_DATA_BUFF 0x3B
887 #define SCSIOP_READ_DATA_BUFF 0x3C
888 #define SCSIOP_CHANGE_DEFINITION 0x40
889 #define SCSIOP_PLAY_AUDIO10 0x41
890 #define SCSIOP_READ_SUB_CHANNEL 0x42
891 #define SCSIOP_READ_TOC 0x43
892 #define SCSIOP_READ_HEADER 0x44
893 #define SCSIOP_PLAY_AUDIO 0x45
894 #define SCSIOP_GET_CONFIGURATION 0x46
895 #define SCSIOP_PLAY_AUDIO_MSF 0x47
896 #define SCSIOP_PLAY_TRACK_INDEX 0x48
897 #define SCSIOP_PLAY_TRACK_RELATIVE 0x49
898 #define SCSIOP_GET_EVENT_STATUS 0x4A
899 #define SCSIOP_PAUSE_RESUME 0x4B
900 #define SCSIOP_LOG_SELECT 0x4C
901 #define SCSIOP_LOG_SENSE 0x4D
902 #define SCSIOP_STOP_PLAY_SCAN 0x4E
903 #define SCSIOP_READ_DISC_INFO 0x51
904 #define SCSIOP_READ_TRACK_INFO 0x52
905 #define SCSIOP_RESERVE_TRACK 0x53
906 #define SCSIOP_SEND_OPC_INFO 0x54
907 #define SCSIOP_MODE_SELECT10 0x55
908 #define SCSIOP_REPAIR_TRACK 0x58 // obsolete
909 #define SCSIOP_READ_MASTER_CUE 0x59
910 #define SCSIOP_MODE_SENSE10 0x5A
911 #define SCSIOP_CLOSE_TRACK_SESSION 0x5B
912 #define SCSIOP_READ_BUFFER_CAPACITY 0x5C
913 #define SCSIOP_SEND_CUE_SHEET 0x5D
914 #define SCSIOP_READ16 0x88
915 #define SCSIOP_WRITE16 0x8A
916 #define SCSIOP_VERIFY16 0x8F
917 #define SCSIOP_SERVICE_ACTION16 0x9E
918 
919  #define SCSIOP_SA_READ_CAPACITY16 0x10
920 
921 #define SCSIOP_REPORT_LUNS 0xA0
922 #define SCSIOP_BLANK 0xA1
923 #define SCSIOP_SEND_KEY 0xA3
924 #define SCSIOP_REPORT_KEY 0xA4
925 #define SCSIOP_PLAY_AUDIO12 0xA5
926 #define SCSIOP_LOAD_UNLOAD_SLOT 0xA6
927 #define SCSIOP_SET_READ_AHEAD 0xA7
928 #define SCSIOP_READ12 0xA8
929 #define SCSIOP_WRITE12 0xAA
930 #define SCSIOP_VERIFY12 0xAF
931 #define SCSIOP_SEEK12 0xAB
932 #define SCSIOP_GET_PERFORMANCE 0xAC
933 #define SCSIOP_READ_DVD_STRUCTURE 0xAD
934 #define SCSIOP_WRITE_VERIFY12 0xAE
935 #define SCSIOP_VERIFY12 0xAF
936 #define SCSIOP_SET_STREAMING 0xB6
937 #define SCSIOP_READ_CD_MSF 0xB9
938 #define SCSIOP_SET_CD_SPEED 0xBB
939 #define SCSIOP_MECHANISM_STATUS 0xBD
940 #define SCSIOP_READ_CD 0xBE
941 #define SCSIOP_SEND_DVD_STRUCTURE 0xBF
942 #define SCSIOP_DOORLOCK 0xDE // lock door on removable drives
943 #define SCSIOP_DOORUNLOCK 0xDF // unlock door on removable drives
944 
945 // If the IMMED bit is 1, status is returned as soon
946 // as the operation is initiated. If the IMMED bit
947 // is 0, status is not returned until the operation
948 // is completed.
949 
950 #define CDB_RETURN_ON_COMPLETION 0
951 #define CDB_RETURN_IMMEDIATE 1
952 
953 // end_ntminitape
954 
955 // CDB Force media access used in extended read and write commands.
956 
957 #define CDB_FORCE_MEDIA_ACCESS 0x08
958 
959 // Denon CD ROM operation codes
960 
961 #define SCSIOP_DENON_EJECT_DISC 0xE6
962 #define SCSIOP_DENON_STOP_AUDIO 0xE7
963 #define SCSIOP_DENON_PLAY_AUDIO 0xE8
964 #define SCSIOP_DENON_READ_TOC 0xE9
965 #define SCSIOP_DENON_READ_SUBCODE 0xEB
966 
967 // Philips/Matshushita CD-R(W) operation codes
968 
969 #define SCSIOP_PHILIPS_GET_NWA 0xE2
970 #define SCSIOP_PHILIPS_RESERVE_TRACK 0xE4
971 #define SCSIOP_PHILIPS_WRITE_TRACK 0xE6
972 #define SCSIOP_PHILIPS_LOAD_UNLOAD 0xE7
973 #define SCSIOP_PHILIPS_CLOSE_TRACK_SESSION 0xE9
974 #define SCSIOP_PHILIPS_RECOVER_BUF_DATA 0xEC
975 #define SCSIOP_PHILIPS_READ_SESSION_INFO 0xEE
976 
977 // Plextor operation codes
978 
979 #define SCSIOP_PLEXTOR_READ_CDDA 0xD8
980 
981 // NEC operation codes
982 
983 #define SCSIOP_NEC_READ_CDDA 0xD4
984 
985 // SCSI Bus Messages
986 
987 #define SCSIMESS_ABORT 0x06
988 #define SCSIMESS_ABORT_WITH_TAG 0x0D
989 #define SCSIMESS_BUS_DEVICE_RESET 0X0C
990 #define SCSIMESS_CLEAR_QUEUE 0X0E
991 #define SCSIMESS_COMMAND_COMPLETE 0X00
992 #define SCSIMESS_DISCONNECT 0X04
993 #define SCSIMESS_EXTENDED_MESSAGE 0X01
994 #define SCSIMESS_IDENTIFY 0X80
995 #define SCSIMESS_IDENTIFY_WITH_DISCON 0XC0
996 #define SCSIMESS_IGNORE_WIDE_RESIDUE 0X23
997 #define SCSIMESS_INITIATE_RECOVERY 0X0F
998 #define SCSIMESS_INIT_DETECTED_ERROR 0X05
999 #define SCSIMESS_LINK_CMD_COMP 0X0A
1000 #define SCSIMESS_LINK_CMD_COMP_W_FLAG 0X0B
1001 #define SCSIMESS_MESS_PARITY_ERROR 0X09
1002 #define SCSIMESS_MESSAGE_REJECT 0X07
1003 #define SCSIMESS_NO_OPERATION 0X08
1004 #define SCSIMESS_HEAD_OF_QUEUE_TAG 0X21
1005 #define SCSIMESS_ORDERED_QUEUE_TAG 0X22
1006 #define SCSIMESS_SIMPLE_QUEUE_TAG 0X20
1007 #define SCSIMESS_RELEASE_RECOVERY 0X10
1008 #define SCSIMESS_RESTORE_POINTERS 0X03
1009 #define SCSIMESS_SAVE_DATA_POINTER 0X02
1010 #define SCSIMESS_TERMINATE_IO_PROCESS 0X11
1011 
1012 // SCSI Extended Message operation codes
1013 
1014 #define SCSIMESS_MODIFY_DATA_POINTER 0X00
1015 #define SCSIMESS_SYNCHRONOUS_DATA_REQ 0X01
1016 #define SCSIMESS_WIDE_DATA_REQUEST 0X03
1017 
1018 // SCSI Extended Message Lengths
1019 
1020 #define SCSIMESS_MODIFY_DATA_LENGTH 5
1021 #define SCSIMESS_SYNCH_DATA_LENGTH 3
1022 #define SCSIMESS_WIDE_DATA_LENGTH 2
1023 
1024 // SCSI extended message structure
1025 
1026 typedef struct _SCSI_EXTENDED_MESSAGE {
1030  union _EXTENDED_ARGUMENTS {
1031 
1032  struct {
1033  UCHAR Modifier[4];
1034  } Modify;
1035 
1036  struct {
1039  } Synchronous;
1040 
1041  struct{
1042  UCHAR Width;
1043  } Wide;
1046 
1047 // SCSI bus status codes.
1048 
1049 #define SCSISTAT_GOOD 0x00
1050 #define SCSISTAT_CHECK_CONDITION 0x02
1051 #define SCSISTAT_CONDITION_MET 0x04
1052 #define SCSISTAT_BUSY 0x08
1053 #define SCSISTAT_INTERMEDIATE 0x10
1054 #define SCSISTAT_INTERMEDIATE_COND_MET 0x14
1055 #define SCSISTAT_RESERVATION_CONFLICT 0x18
1056 #define SCSISTAT_COMMAND_TERMINATED 0x22
1057 #define SCSISTAT_QUEUE_FULL 0x28
1058 
1059 // Enable Vital Product Data Flag (EVPD)
1060 // used with INQUIRY command.
1061 
1062 #define CDB_INQUIRY_EVPD 0x01
1063 
1064 // retry time (in deci-seconds)
1065 #define NOT_READY_RETRY_INTERVAL 20
1066 
1067 // Defines for format CDB
1068 #define LUN0_FORMAT_SAVING_DEFECT_LIST 0
1069 #define USE_DEFAULTMSB 0
1070 #define USE_DEFAULTLSB 0
1071 
1072 #define START_UNIT_CODE 0x01
1073 #define STOP_UNIT_CODE 0x00
1074 
1075 // Inquiry buffer structure. This is the data returned from the target
1076 // after it receives an inquiry.
1077 //
1078 // This structure may be extended by the number of bytes specified
1079 // in the field AdditionalLength. The defined size constant only
1080 // includes fields through ProductRevisionLevel.
1081 //
1082 // The NT SCSI drivers are only interested in the first 36 bytes of data.
1083 
1084 #define INQUIRYDATABUFFERSIZE 36
1085 
1086 typedef struct _INQUIRYDATA {
1087  UCHAR DeviceType : 5;
1090  UCHAR RemovableMedia : 1;
1091  UCHAR Versions;
1094  UCHAR Reserved[2];
1095  UCHAR SoftReset : 1;
1096  UCHAR CommandQueue : 1;
1097  UCHAR Reserved2 : 1;
1098  UCHAR LinkedCommands : 1;
1099  UCHAR Synchronous : 1;
1100  UCHAR Wide16Bit : 1;
1101  UCHAR Wide32Bit : 1;
1103  union {
1105  struct {
1106  UCHAR VendorId[8];
1107  UCHAR ProductId[16];
1109  };
1110  };
1111  UCHAR VendorSpecific[20];
1112  UCHAR Reserved3[40];
1114 
1115 // Inquiry defines. Used to interpret data returned from target as result
1116 // of inquiry command.
1117 
1118 // DeviceType field
1119 
1120 #define DIRECT_ACCESS_DEVICE 0x00 // disks
1121 #define SEQUENTIAL_ACCESS_DEVICE 0x01 // tapes
1122 #define PRINTER_DEVICE 0x02 // printers
1123 #define PROCESSOR_DEVICE 0x03 // scanners, printers, etc
1124 #define WRITE_ONCE_READ_MULTIPLE_DEVICE 0x04 // worms
1125 #define READ_ONLY_DIRECT_ACCESS_DEVICE 0x05 // cdroms
1126 #define SCANNER_DEVICE 0x06 // scanners
1127 #define OPTICAL_DEVICE 0x07 // optical disks
1128 #define MEDIUM_CHANGER 0x08 // jukebox
1129 #define COMMUNICATION_DEVICE 0x09 // network
1130 #define LOGICAL_UNIT_NOT_PRESENT_DEVICE 0x7F
1131 #define DEVICE_QUALIFIER_NOT_SUPPORTED 0x03
1132 
1133 // DeviceTypeQualifier field
1134 
1135 #define DEVICE_CONNECTED 0x00
1136 
1137 // Sense Data Format
1138 
1139 typedef struct _SENSE_DATA {
1140  UCHAR ErrorCode:7;
1141  UCHAR Valid:1;
1143  UCHAR SenseKey:4;
1144  UCHAR Reserved:1;
1146  UCHAR EndOfMedia:1;
1147  UCHAR FileMark:1;
1148  UCHAR Information[4];
1156 
1157 // Default request sense buffer size
1158 
1159 #define SENSE_BUFFER_SIZE 18
1160 
1161 // Sense keys
1162 
1163 #define SCSI_SENSE_NO_SENSE 0x00
1164 #define SCSI_SENSE_RECOVERED_ERROR 0x01
1165 #define SCSI_SENSE_NOT_READY 0x02
1166 #define SCSI_SENSE_MEDIUM_ERROR 0x03
1167 #define SCSI_SENSE_HARDWARE_ERROR 0x04
1168 #define SCSI_SENSE_ILLEGAL_REQUEST 0x05
1169 #define SCSI_SENSE_UNIT_ATTENTION 0x06
1170 #define SCSI_SENSE_DATA_PROTECT 0x07
1171 #define SCSI_SENSE_BLANK_CHECK 0x08
1172 #define SCSI_SENSE_UNIQUE 0x09
1173 #define SCSI_SENSE_COPY_ABORTED 0x0A
1174 #define SCSI_SENSE_ABORTED_COMMAND 0x0B
1175 #define SCSI_SENSE_EQUAL 0x0C
1176 #define SCSI_SENSE_VOL_OVERFLOW 0x0D
1177 #define SCSI_SENSE_MISCOMPARE 0x0E
1178 #define SCSI_SENSE_RESERVED 0x0F
1179 
1180 // Additional Sense codes
1181 
1182 // SK = 0x00
1183 #define SCSI_ADSENSE_NO_SENSE 0x00
1184 
1185 // SK = 0x01
1186 #define SCSI_ADSENSE_WARNING 0x0B
1187 #define SCSI_ADSENSE_REC_DATA_NOECC 0x17
1188 #define SCSI_ADSENSE_REC_DATA_ECC 0x18
1189 #define SCSI_ADSENSE_ROUNDED_PARAM 0x37
1190 #define SCSI_ADSENSE_FAILURE_PREDICTED 0x5D
1191 #define SCSI_ADSENSE_CD_CONTROL_ERR 0x73
1192 
1193 // SK = 0x02
1194 #define SCSI_ADSENSE_LUN_NOT_READY 0x04
1195 #define SCSI_ADSENSE_INCOMPATIBLE_MEDIA 0x30
1196 #define SCSI_ADSENSE_INVALID_MEDIA SCSI_ADSENSE_INCOMPATIBLE_MEDIA // for w2k
1197 #define SCSI_ADSENSE_NO_MEDIA_IN_DEVICE 0x3A
1198 #define SCSI_ADSENSE_POSITION_ERROR 0x3B
1199 #define SCSI_ADSENSE_NOT_SELF_CONFIGURED 0x3E
1200 
1201 
1202 // SK = 0x03
1203 #define SCSI_ADSENSE_NO_SEEK 0x02
1204 #define SCSI_ADSENSE_NO_REFERENCE 0x06
1205 #define SCSI_ADSENSE_CD_WRITE_ERROR 0x0C
1206 #define SCSI_ADSENSE_CD_READ_ERROR 0x11
1207 #define SCSI_ADSENSE_TRACK_ERROR 0x14
1208 #define SCSI_ADSENSE_SEEK_ERROR 0x15
1209 #define SCSI_ADSENSE_FORMAT_CORRUPTED 0x31
1210 #define SCSI_ADSENSE_ENCLOSURE_FAILURE 0x34
1211 #define SCSI_ADSENSE_ENCLOSURE_SERVICE 0x35
1212 #define SCSI_ADSENSE_ERASE_ERROR 0x51
1213 #define SCSI_ADSENSE_UNRECOVERED_TOC 0x57
1214 #define SCSI_ADSENSE_SESSION_FIXATION 0x71
1215 //#define SCSI_ADSENSE_CD_CONTROL_ERR 0x73 // redefinition
1216 
1217 // SK = 0x04
1218 #define SCSI_ADSENSE_CLEAN_REQUEST 0x00
1219 #define SCSI_ADSENSE_SELECT 0x04
1220 #define SCSI_ADSENSE_COMMUNICATION 0x08
1221 #define SCSI_ADSENSE_LOST_STREAMING 0x09
1222 #define SCSI_ADSENSE_SYNC_ERROR 0x1B
1223 #define SCSI_ADSENSE_MECH_ERROR 0x3B
1224 #define SCSI_ADSENSE_LUN_ERROR 0x3E
1225 #define SCSI_ADSENSE_DIAGNOSTIC 0x40
1226 #define SCSI_ADSENSE_INTERNAL 0x44
1227 #define SCSI_ADSENSE_SOFT_RESET 0x46
1228 #define SCSI_ADSENSE_SCSI_PARITY 0x47
1229 #define SCSI_ADSENSE_CMD_PHASE 0x4A
1230 #define SCSI_ADSENSE_DATA_PHASE 0x4B
1231 #define SCSI_ADSENSE_SELF_CONFIG 0x4C
1232 #define SCSI_ADSENSE_MEDIUM_REMOVAL 0x53
1233 #define SCSI_ADSENSE_VOLTAGE 0x65
1234 
1235 // SK = 0x05
1236 #define SCSI_ADSENSE_AUDIO_PLAY 0x00
1237 #define SCSI_ADSENSE_MULTISELECT 0x07
1238 #define SCSI_ADSENSE_INVALID_PARAM_LENGTH 0x1A
1239 #define SCSI_ADSENSE_ILLEGAL_COMMAND 0x20
1240 #define SCSI_ADSENSE_ILLEGAL_BLOCK 0x21
1241 #define SCSI_ADSENSE_INVALID_CDB 0x24
1242 #define SCSI_ADSENSE_INVALID_LUN 0x25
1243 #define SCSI_ADSENSE_INVALID_VALUE 0x26
1244 #define SCSI_ADSENSE_WRITE_PROTECT 0x27
1245 #define SCSI_ADSENSE_CANT_DISCONNECT 0x2B
1246 #define SCSI_ADSENSE_INVALID_CMD_SEQUENCE 0x2C
1247 #define SCSI_ADSENSE_INVALID_SESSION_MODE 0x30
1248 #define SCSI_ADSENSE_SAVE_NOT_SUPPORTED 0x35
1249 #define SCSI_ADSENSE_INVALID_BITS_IN_IDENT_MSG 0x3D
1250 #define SCSI_ADSENSE_MSG_ERROR 0x43
1251 //#define SCSI_ADSENSE_MEDIUM_REMOVAL 0x53 // redefinition
1252 #define SCSI_ADSENSE_SYS_RESOURCE_FAILURE 0x55
1253 #define SCSI_ADSENSE_OUT_OF_SPACE 0x63
1254 #define SCSI_ADSENSE_ILLEGAL_MODE_FOR_THIS_TRACK 0x64
1255 #define SCSI_ADSENSE_CD_COPY_ERROR 0x6F
1256 #define SCSI_ADSENSE_INCOMPLETE_DATA 0x72
1257 #define SCSI_ADSENSE_VENDOR_UNIQUE 0x80
1258 #define SCSI_ADSENSE_MUSIC_AREA 0xA0
1259 #define SCSI_ADSENSE_DATA_AREA 0xA1
1260 #define SCSI_ADSENSE_VOLUME_OVERFLOW 0xA7
1261 
1262 // SK = 0x06
1263 #define SCSI_ADSENSE_LOG_OVERFLOW 0x0A
1264 #define SCSI_ADSENSE_MEDIUM_CHANGED 0x28
1265 #define SCSI_ADSENSE_BUS_RESET 0x29
1266 #define SCSI_ADSENSE_PARAM_CHANGE 0x2A
1267 #define SCSI_ADSENSE_CMD_CLEARED_BY_ANOTHER 0x2F
1268 #define SCSI_ADSENSE_MEDIA_STATE 0x3B
1269 #define SCSI_ADSENSE_FUNCTIONALTY_CHANGE 0x3F
1270 #define SCSI_ADSENSE_OPERATOR 0x5A
1271 #define SCSI_ADSENSE_MAX_LOG 0x5B
1272 #define SCSI_ADSENSE_POWER 0x5E
1273 
1274 // SK = 0x0B
1275 #define SCSI_ADSENSE_READ_LOST_STREAMING 0x11
1276 #define SCSI_ADSENSE_RESELECT_FAILURE 0x45
1277 #define SCSI_ADSENSE_ERR_MSG_DETECTED 0x48
1278 #define SCSI_ADSENSE_INVALID_ERR_MSG 0x49
1279 #define SCSI_ADSENSE_TEGGED_OVERLAPPED 0x4D
1280 #define SCSI_ADSENSE_OVERLAPPED_ATTEMPT 0x4E
1281 
1282 // Additional sense code qualifier
1283 
1284 #define SCSI_SENSEQ_NO_SENSE 0x00
1285 
1286 // SK:ASC = 02:04
1287 //#define SCSI_SENSEQ_NO_SENSE 0x00
1288 #define SCSI_SENSEQ_CAUSE_NOT_REPORTABLE 0x00
1289 #define SCSI_SENSEQ_BECOMING_READY 0x01
1290 #define SCSI_SENSEQ_INIT_COMMAND_REQUIRED 0x02
1291 #define SCSI_SENSEQ_MANUAL_INTERVENTION_REQUIRED 0x03
1292 #define SCSI_SENSEQ_FORMAT_IN_PROGRESS 0x04
1293 #define SCSI_SENSEQ_OPERATION_IN_PROGRESS 0x07
1294 #define SCSI_SENSEQ_LONG_WRITE_IN_PROGRESS 0x08
1295 
1296 // SK:ASC = 02:30
1297 #define SCSI_SENSEQ_INCOMPATIBLE_MEDIA_INSTALLED 0x00
1298 #define SCSI_SENSEQ_UNKNOWN_FORMAT 0x01
1299 #define SCSI_SENSEQ_INCOMPATIBLE_FORMAT 0x02
1300 #define SCSI_SENSEQ_CLEANING_CARTRIDGE_INSTALLED 0x03
1301 #define SCSI_SENSEQ_WRITE_UNKNOWN_FORMAT 0x04
1302 #define SCSI_SENSEQ_WRITE_INCOMPATIBLE_FORMAT 0x05
1303 #define SCSI_SENSEQ_FORMAT_INCOMPATIBLE_MEDIUM 0x06
1304 #define SCSI_SENSEQ_CLEANING_FAILURE 0x07
1305 
1306 // SK:ASC = 02:3A
1307 #define SCSI_SENSEQ_TRAY_CLOSED 0x01
1308 #define SCSI_SENSEQ_TRAY_OPEN 0x02
1309 
1310 // SK:ASC = 03:0C
1311 #define SENSEQ_W_RECOVERY_NEEDED 0x07
1312 #define SENSEQ_W_RECOVERY_FAILED 0x08
1313 #define SENSEQ_LOST_STREAMING 0x09
1314 #define SENSEQ_PADDING_BLOCKS_ADDED 0x0A
1315 
1316 // SK:ASC = 03:72
1317 //#define SCSI_SENSEQ_NO_SENSE 0x00
1318 #define SCSI_SENSEQ_LEAD_IN_ERROR 0x01
1319 #define SCSI_SENSEQ_LEAD_OUT_ERRROR 0x02
1320 #define SCSI_SENSEQ_INCOMPLETE_TRACK 0x03
1321 #define SCSI_SENSEQ_INCOMPLETE_RESERVED_TRACK 0x04
1322 #define SCSI_SENSEQ_NO_MORE_RESERVATION 0x05
1323 
1324 // SK:ASC = 05:26
1325 #define SCSI_SENSEQ_PARAM_NOT_SUPPORTED 0x01
1326 #define SCSI_SENSEQ_PARAM_INVALID_VALUE 0x02
1327 #define SCSI_SENSEQ_THRESHOLD_PARAM_NOT_SUPPORTED 0x03
1328 #define SCSI_SENSEQ_INVALID_RELEASE_OF_PERSISTENT_RESERVATION 0x04
1329 
1330 // SK:ASC = 05:27
1331 #define SCSI_SENSEQ_HW_PROTECTION 0x01
1332 #define SCSI_SENSEQ_LUN_SOFT_PROTECTION 0x02
1333 #define SCSI_SENSEQ_ASSOCIATED_PROTECTION 0x03
1334 #define SCSI_SENSEQ_PERSIST_PROTECTION 0x04
1335 #define SCSI_SENSEQ_PERMANENT_PROTECTION 0x05
1336 
1337 // SK:ASC = 05:2C
1338 #define SCSI_SENSEQ_PROGRAMM_AREA_NOT_EMPTY 0x03
1339 #define SCSI_SENSEQ_PROGRAMM_AREA_EMPTY 0x04
1340 
1341 // SK:ASC = 05:30
1342 #define SCSI_SENSEQ_APP_CODE_MISSMATCH 0x08
1343 #define SCSI_SENSEQ_NOT_FIXED_FOR_APPEND 0x09
1344 
1345 // SK:ASC = 05:6F
1346 #define SCSI_SENSEQ_AUTHENTICATION_FAILURE 0x00
1347 #define SCSI_SENSEQ_KEY_NOT_PRESENT 0x01
1348 #define SCSI_SENSEQ_KEY_NOT_ESTABLISHED 0x02
1349 #define SCSI_SENSEQ_READ_OF_SCRAMBLED_SECTOR_WITHOUT_AUTHENTICATION 0x03
1350 #define SCSI_SENSEQ_MEDIA_CODE_MISMATCHED_TO_LOGICAL_UNIT 0x04
1351 #define SCSI_SENSEQ_LOGICAL_UNIT_RESET_COUNT_ERROR 0x05
1352 
1353 // SK:ASC = 06:28
1354 #define SCSI_SENSEQ_IMPORT_OR_EXPERT_ELEMENT_ACCESS 0x01
1355 
1356 // SK:ASC = 06:29
1357 #define SCSI_SENSEQ_POWER_ON 0x01
1358 #define SCSI_SENSEQ_SCSI_BUS 0x02
1359 #define SCSI_SENSEQ_BUS_DEVICE_FUNCTION 0x03
1360 #define SCSI_SENSEQ_DEVICE_INTERNAL 0x04
1361 
1362 // SK:ASC = 06:2A
1363 #define SCSI_SENSEQ_MODE_PARAMETERS 0x01
1364 #define SCSI_SENSEQ_LOG_PARAMETERS 0x02
1365 #define SCSI_SENSEQ_RESERVATIONS_PREEMPTED 0x03
1366 
1367 // SK:ASC = 06:3B
1368 #define SCSI_SENSEQ_DESTINATION_ELEMENT_FULL 0x0D
1369 #define SCSI_SENSEQ_SOURCE_ELEMENT_EMPTY 0x0E
1370 #define SCSI_SENSEQ_END_OF_MEDIUM 0x0F
1371 #define SCSI_SENSEQ_MAGAZINE_NOT_ACCESSIBLE 0x11
1372 #define SCSI_SENSEQ_MAGAZINE_REMOVED 0x12
1373 #define SCSI_SENSEQ_MAGAZINE_INSERTED 0x13
1374 #define SCSI_SENSEQ_MAGAZINE_LOCKED 0x14
1375 #define SCSI_SENSEQ_MAGAZINE_UNLOCKED 0x15
1376 
1377 // SK:ASC = 06:3F
1378 #define SCSI_SENSEQ_MICROCODE 0x01
1379 #define SCSI_SENSEQ_OPERATION_DEFINITION 0x02
1380 #define SCSI_SENSEQ_INQUIRY_DATA 0x03
1381 
1382 // SK:ASC = 06:5A
1383 #define SCSI_SENSEQ_MEDIUM_CHANGE_REQ 0x01
1384 #define SCSI_SENSEQ_W_PROTECT_SELECTED 0x02
1385 #define SCSI_SENSEQ_W_PROTECT_PERMITED 0x03
1386 
1387 // SK:ASC = 06:5E
1388 #define SCSI_SENSEQ_LOW_POWER_COND 0x00
1389 #define SCSI_SENSEQ_IDLE_BY_TIMER 0x01
1390 #define SCSI_SENSEQ_STANDBY_BY_TIMER 0x02
1391 #define SCSI_SENSEQ_IDLE_BY_CMD 0x03
1392 #define SCSI_SENSEQ_STANDBY_BY_CMD 0x04
1393 
1394 #define SCSI_SENSEQ_FILEMARK_DETECTED 0x01
1395 #define SCSI_SENSEQ_SETMARK_DETECTED 0x03
1396 #define SCSI_SENSEQ_END_OF_MEDIA_DETECTED 0x02
1397 #define SCSI_SENSEQ_BEGINNING_OF_MEDIA_DETECTED 0x04
1398 
1399 // SCSI IO Device Control Codes
1400 
1401 #define FILE_DEVICE_SCSI 0x0000001b
1402 
1403 #define IOCTL_SCSI_EXECUTE_IN ((FILE_DEVICE_SCSI << 16) + 0x0011)
1404 #define IOCTL_SCSI_EXECUTE_OUT ((FILE_DEVICE_SCSI << 16) + 0x0012)
1405 #define IOCTL_SCSI_EXECUTE_NONE ((FILE_DEVICE_SCSI << 16) + 0x0013)
1406 
1407 // SMART support in atapi
1408 
1409 #define IOCTL_SCSI_MINIPORT_SMART_VERSION ((FILE_DEVICE_SCSI << 16) + 0x0500)
1410 #define IOCTL_SCSI_MINIPORT_IDENTIFY ((FILE_DEVICE_SCSI << 16) + 0x0501)
1411 #define IOCTL_SCSI_MINIPORT_READ_SMART_ATTRIBS ((FILE_DEVICE_SCSI << 16) + 0x0502)
1412 #define IOCTL_SCSI_MINIPORT_READ_SMART_THRESHOLDS ((FILE_DEVICE_SCSI << 16) + 0x0503)
1413 #define IOCTL_SCSI_MINIPORT_ENABLE_SMART ((FILE_DEVICE_SCSI << 16) + 0x0504)
1414 #define IOCTL_SCSI_MINIPORT_DISABLE_SMART ((FILE_DEVICE_SCSI << 16) + 0x0505)
1415 #define IOCTL_SCSI_MINIPORT_RETURN_STATUS ((FILE_DEVICE_SCSI << 16) + 0x0506)
1416 #define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTOSAVE ((FILE_DEVICE_SCSI << 16) + 0x0507)
1417 #define IOCTL_SCSI_MINIPORT_SAVE_ATTRIBUTE_VALUES ((FILE_DEVICE_SCSI << 16) + 0x0508)
1418 #define IOCTL_SCSI_MINIPORT_EXECUTE_OFFLINE_DIAGS ((FILE_DEVICE_SCSI << 16) + 0x0509)
1419 #define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTO_OFFLINE ((FILE_DEVICE_SCSI << 16) + 0x050a)
1420 #define IOCTL_SCSI_MINIPORT_READ_SMART_LOG ((FILE_DEVICE_SCSI << 16) + 0x050b)
1421 #define IOCTL_SCSI_MINIPORT_WRITE_SMART_LOG ((FILE_DEVICE_SCSI << 16) + 0x050c)
1422 
1423 // Read Capacity Data - returned in Big Endian format
1424 
1425 typedef struct _READ_CAPACITY_DATA {
1429 
1430 typedef struct _READ_CAPACITY16_DATA {
1438 
1439 // CD ROM Read Table Of Contents (TOC) structures
1440 // Format 0 - Get table of contents
1441 
1442 #define TocControl_TrkMode_Mask WParam_TrkMode_Mask
1443 #define TocControl_TrkMode_Audio WParam_TrkMode_Audio
1444 #define TocControl_TrkMode_Audio_PreEmph WParam_TrkMode_Audio_PreEmph
1445 #define TocControl_TrkMode_Data WParam_TrkMode_Data
1446 #define TocControl_TrkMode_IncrData WParam_TrkMode_IncrData
1447 #define TocControl_TrkMode_QAudio_PreEmph WParam_TrkMode_QAudio_PreEmph
1448 #define TocControl_TrkMode_AllowCpy WParam_TrkMode_AllowCpy
1449 
1450 typedef struct _TOC_TRACK_INFO {
1451  UCHAR Reserved;
1452  UCHAR Control : 4;
1453  UCHAR Adr : 4;
1454  UCHAR TrackNum;
1455  UCHAR Reserved1;
1456  UCHAR LBA[4];
1458 
1459 typedef struct _READ_TOC_HEADER {
1460  UCHAR Length[2];
1464 
1465 #define TOC_LastTrack_ID 0xAA
1466 
1467 typedef struct _READ_TOC_TOC {
1471 
1472 // Format 1 - Session Info
1473 
1474 typedef struct _READ_TOC_SES {
1476  TOC_TRACK_INFO LastSes_1stTrack; // First Track Number In Last Complete Session
1478 
1479 // Format 2,3 - Full TOC, PMA
1480 
1481 // ADR = 1
1482 #define POINT_StartPositionOfTrack_Min 0x01
1483 #define POINT_StartPositionOfTrack_Max 0x63
1484 #define POINT_FirstTrackNum 0xA0
1485 #define POINT_LastTrackNum 0xA1
1486 #define POINT_StartPositionOfLeadOut 0xA2
1487 // ADR = 5
1488 #define POINT_SkipInterval_Min 0x01
1489 #define POINT_SkipInterval_Max 0x40
1490 #define POINT_StartPositionOfNextProgramArea 0xB0
1491 #define POINT_NumOfSkips 0xB1
1492 #define POINT_SkipTrackAssignmet_Min 0xB2
1493 #define POINT_SkipTrackAssignmet_Max 0xB4
1494 #define POINT_StartPositionOfFirstLeadIn 0xC0
1495 #define POINT_CopyOfAdditionalAreaInATIP 0xC1
1496 
1497 typedef struct _TOC_SES_INFO {
1498  UCHAR SesNumber;
1499  UCHAR Control : 4;
1500  UCHAR Adr : 4;
1501  UCHAR TNO;
1502  UCHAR POINT;
1503 
1504  union {
1505 
1506  struct {
1507  UCHAR MSF[3];
1508  UCHAR Reserved;
1509  UCHAR P_MSF[3];
1510  } GENERIC;
1511 
1512 // ADR = 1:
1513 
1514 //0x01 - 0x63
1515  struct {
1516  UCHAR ATIME[3];
1517  UCHAR Zero;
1518  UCHAR MSF[3];
1520 
1521 //0xA0
1522 #define FullTOC_DiscType_CDDA_or_M1 WParam_SesFmt_CdRom // 0x00
1523 #define FullTOC_DiscType_CDI WParam_SesFmt_CdI // 0x10
1524 #define FullTOC_DiscType_CDXA_M2 WParam_SesFmt_CdRomXa // 0x20
1525 
1526  struct {
1527  UCHAR ATIME[3];
1528  UCHAR Zero;
1530  UCHAR DiscType;
1531  UCHAR Zero1;
1532  } FirstTrackNum;
1533 
1534 //0xA1
1535  struct {
1536  UCHAR ATIME[3];
1537  UCHAR Zero;
1539  UCHAR Zero1[2];
1540  } LastTrackNum;
1541 
1542 //0xA2
1543  struct {
1544  UCHAR ATIME[3];
1545  UCHAR Zero;
1546  UCHAR MSF[3];
1548 
1549 // ADR = 5:
1550 
1551 //0x01 - 0x40
1552  struct {
1553  UCHAR End_MSF[3];
1554  UCHAR Reserved;
1555  UCHAR Start_MSF[3];
1556  } SkipInterval;
1557 
1558 //0xB0
1559  struct {
1560  UCHAR Program_MSF[3];
1562  UCHAR MaxLeadOut_MSF[3];
1564 
1565 //0xB1
1566  struct {
1567  UCHAR Zero[4];
1568  UCHAR Intervals;
1569  UCHAR Tracks;
1570  UCHAR Zero1;
1571  } NumOfSkips;
1572 
1573 //0xB2 - 0xB4
1574  struct {
1575  UCHAR SkipNum[7];
1577 
1578 //0xC0
1579  struct {
1581  UCHAR SpecInfoATIP[3];
1582  UCHAR LeadIn_MSF[3];
1584 
1585 //0xC1
1586  struct {
1587  UCHAR Bytes[7];
1589 
1590  } Params;
1592 
1593 typedef struct _READ_TOC_FULL_TOC {
1597 
1600 
1601 // Format 4 - ATIP
1602 
1603 typedef struct _READ_TOC_ATIP {
1604  UCHAR Length[2];
1605  UCHAR Reserved[2];
1606 
1607 #define ATIP_SpeedRef_Mask 0x07
1608 #define ATIP_SpeedRef_2X 0x01
1609 #define ATIP_WritingPower_Mask 0x07
1610 
1611  union {
1612  UCHAR Flags;
1613  struct {
1614  UCHAR SpeedRef: 3;
1615  UCHAR Reserved: 1;
1616  UCHAR WritingPower: 3;
1617  UCHAR One: 1;
1618  } Fields;
1619  } Flags1;
1620 
1621 #define ATIP_URU 0x40
1622 
1623  union {
1624  UCHAR Flags;
1625  struct {
1626  UCHAR Reserved: 6;
1627  UCHAR URU: 1;
1628  UCHAR Zero: 1;
1629  } Fields;
1630  } Flags2;
1631 
1632 #define ATIP_A1 0x01 // 16-18 are valid
1633 #define ATIP_A2 0x02 // 20-22 are valid
1634 #define ATIP_A3 0x04 // 24-26 are valid
1635 #define ATIP_SubType_Mask 0x38 // shall be set to zero
1636 #define ATIP_Type_Mask 0x40
1637 #define ATIP_Type_CDR 0x00
1638 #define ATIP_Type_CDRW 0x40
1639 
1640  union {
1641  UCHAR Flags;
1642  struct {
1643  UCHAR A1: 1;
1644  UCHAR A2: 1;
1645  UCHAR A3: 1;
1646  UCHAR SubType: 3;
1647  UCHAR Type: 1;
1648  UCHAR One: 1;
1649  } Fields;
1650  } DiscType;
1651 
1652  UCHAR Reserved0;
1653  UCHAR LeadIn_MSF[3];
1654  UCHAR Reserved1;
1655  UCHAR LeadOut_MSF[3];
1656  UCHAR Reserved2;
1657 
1658 #define ATIP_MinSpeedCVL_Mask 0x70
1659 #define ATIP_MinSpeedCVL_2X 0x10
1660 #define ATIP_MaxSpeedCVL_Mask 0x0f
1661 #define ATIP_MaxSpeedCVL_2X 0x01
1662 #define ATIP_MaxSpeedCVL_4X 0x02
1663 #define ATIP_MaxSpeedCVL_6X 0x03
1664 #define ATIP_MaxSpeedCVL_8X 0x04
1665 
1666  union {
1667  UCHAR Flags;
1668  struct {
1669  UCHAR MaxSpeedCVL: 4;
1670  UCHAR MinSpeedCVL: 3;
1671  UCHAR Zero: 1;
1672  } Fields;
1673  } Speed;
1674 
1675 #define ATIP_Power_Y_Mask 0x0e
1676 #define ATIP_Power_P_Mask 0x70
1677 
1678  union {
1679  UCHAR Flags;
1680  struct {
1681  UCHAR Reserved: 1;
1682  UCHAR Y_value: 3;
1683  UCHAR P_factor: 3;
1684  UCHAR Zero: 1;
1685  } Fields;
1686  } Power;
1687 
1688 #define ATIP_PW_ratio_Mask 0x70
1689 
1690  union {
1691  UCHAR Flags;
1692  struct {
1693  UCHAR Reserved: 4;
1694  UCHAR P_W_ratio: 3;
1695  UCHAR Zero: 1;
1696  } Fields;
1697  } ErasePower;
1698 
1699  UCHAR Reserved3;
1700  UCHAR A1_value[3];
1701  UCHAR Reserved4;
1702  UCHAR A2_value[3];
1703  UCHAR Reserved5;
1704  UCHAR A3_value[3];
1705 
1707 
1708 // Format 5 - CD-TEXT
1709 
1710 typedef struct _CD_TEXT_PACK_DATA {
1711 
1712 #define CdText_ID1_Title 0x80 // ID2 = 0 - Album, ID2 = 1-63 - Track
1713 #define CdText_ID1_Performer 0x81
1714 #define CdText_ID1_Songwriter 0x82
1715 #define CdText_ID1_Composer 0x83
1716 #define CdText_ID1_Arranger 0x84
1717 #define CdText_ID1_Message 0x85
1718 #define CdText_ID1_DiscID 0x86
1719 #define CdText_ID1_GenreInfo 0x87
1720 #define CdText_ID1_TOC 0x88
1721 #define CdText_ID1_TOC2 0x89
1722 #define CdText_ID1_Special 0x8D
1723 #define CdText_ID1_UPC_EAN_ISRC 0x8E
1724 #define CdText_ID1_BlockSizeInfo 0x8F
1725 
1726  UCHAR ID1;
1727  UCHAR ID2;
1728  UCHAR ID3;
1729 
1730 #define CdText_CharPos_Mask 0x0f
1731 #define CdText_BlkNum_Mask 0x70
1732 
1733  union {
1734  UCHAR Flags;
1735  struct {
1736  UCHAR CharPos: 4;
1737  UCHAR BlkNum: 3;
1738  UCHAR DBCC: 1; // used to indicate Double Byte text encoding (Unicode ?)
1739  } Fields;
1740  } BlkNum_CharPos;
1741 
1742  UCHAR TextData[12];
1743  UCHAR CRC[2];
1745 
1746 typedef struct _READ_TOC_CD_TEXT {
1747  UCHAR Length[2];
1748  UCHAR Reserved[2];
1751 
1752 // OPC block
1753 
1754 typedef struct _OPC_INFO_BLOCK {
1755  UCHAR Speed[2];
1756  UCHAR OpcValue[6];
1758 
1759 // Buffer Capacity format
1760 
1761 typedef struct _BUFFER_CAPACITY_BLOCK {
1762  UCHAR DataLength[2];
1763  UCHAR Reserved0[2];
1764  UCHAR BufferLength[4];
1767 
1768 // Format Unit structures
1769 
1770 typedef struct _FORMAT_LIST_HEADER {
1771  UCHAR Reserved0;
1772 
1773 #define FormatHeader_VS 0x01
1774 #define FormatHeader_Immed 0x02
1775 #define FormatHeader_DSP 0x04
1776 #define FormatHeader_IP 0x08
1777 #define FormatHeader_STPF 0x10
1778 #define FormatHeader_DCRT 0x20
1779 #define FormatHeader_DPRY 0x40
1780 #define FormatHeader_FOV 0x80
1781 
1782  union {
1783  UCHAR Flags;
1784  struct {
1785  UCHAR VS: 1;
1786  UCHAR Immed: 1;
1787  UCHAR DSP: 1;
1788  UCHAR IP: 1;
1789  UCHAR STPF: 1;
1790  UCHAR DCRT: 1;
1791  UCHAR DPRY: 1;
1792  UCHAR FOV: 1;
1793  } Fields;
1794  } Flags;
1795  UCHAR FormatDescriptorLength[2]; // =0x0008
1797 
1798 typedef struct _CDRW_FORMAT_DESCRIPTOR {
1799 
1800 #define FormatDesc_Grow 0x40
1801 #define FormatDesc_Ses 0x80
1802 
1803  union {
1804  UCHAR Flags;
1805  struct {
1806  UCHAR Reserved0: 6;
1807  UCHAR Grow: 1;
1808  UCHAR Ses: 1;
1809  } Fields;
1810  } Flags;
1811  UCHAR Reserved1[3];
1812  UCHAR FormatSize[4];
1814 
1815 typedef struct _FORMAT_UNIT_PARAMETER_LIST {
1820 
1821 // define Read Format Capacities info blocks
1822 
1823 typedef struct _CAPACITY_LIST_HEADER {
1824  UCHAR Reserved[3];
1825  UCHAR Length;
1827 
1828 typedef struct _FORMATTABLE_CAPACITY_DESCRIPTOR {
1829  UCHAR NumOfBlocks [4];
1830  union {
1831  UCHAR Flags;
1832  struct {
1833  UCHAR DescType: 2;
1835  } Fields;
1836  } Flags;
1837  UCHAR BlockSize [3];
1839 
1840 typedef struct _FORMAT_CAPACITIES_DATA {
1843 
1844 // Define Event Status info blocks
1845 
1846 typedef struct _EVENT_STAT_HEADER {
1847  UCHAR DataLength[2];
1848 
1849 #define EventRetStat_Class_Mask 0x07
1850 #define EventRetStat_Class_OpChange 0x01
1851 #define EventRetStat_Class_PM 0x02
1852 #define EventRetStat_Class_Media 0x04
1853 #define EventRetStat_Class_DevBusy 0x06
1854 #define EventRetStat_NEA 0x80
1855 
1856  union {
1857  UCHAR Flags;
1858  struct {
1859  UCHAR Class: 3;
1860  UCHAR Reserved0: 4;
1861  UCHAR NEA: 1;
1862  } Fields;
1863  } Flags;
1864 
1865  UCHAR SupportedClasses; // see command format
1866 
1868 
1869 typedef struct _EVENT_STAT_OPERATIONAL_BLOCK {
1870 
1872 
1873 #define EventStat_OpEvent_Mask 0x0f
1874 
1875  union {
1876  UCHAR Flags;
1877  struct {
1878  UCHAR OpEvent : 4;
1879  UCHAR Reserved0: 4;
1880  } Fields;
1881  } Byte0;
1882 
1883 #define EventStat_OpStat_Mask 0x0f
1884 #define EventStat_OpStat_Ready 0x00
1885 #define EventStat_OpStat_TempBusy 0x01
1886 #define EventStat_OpStat_Busy 0x02
1887 
1888  union {
1889  UCHAR Flags;
1890  struct {
1891  UCHAR OpStatus : 4;
1892  UCHAR Reserved0 : 3;
1894  } Fields;
1895  } Byte1;
1896 
1897 #define EventStat_OpReport_NoChg 0x00
1898 #define EventStat_OpReport_Change 0x01
1899 #define EventStat_OpReport_AddChg 0x02
1900 #define EventStat_OpReport_Reset 0x03
1901 #define EventStat_OpReport_FirmwareChg 0x04 // microcode change
1902 #define EventStat_OpReport_InquaryChg 0x05
1903 #define EventStat_OpReport_CtrlReq 0x06
1904 #define EventStat_OpReport_CtrlRelease 0x07
1905 
1906  UCHAR OpReport[2];
1907 
1909 
1910 typedef struct _EVENT_STAT_PM_BLOCK {
1911 
1913 
1914 #define EventStat_PowerEvent_Mask 0x0f
1915 #define EventStat_PowerEvent_NoChg 0x00
1916 #define EventStat_PowerEvent_ChgOK 0x01
1917 #define EventStat_PowerEvent_ChgFail 0x02
1918 
1919  union {
1920  UCHAR Flags;
1921  struct {
1922  UCHAR PowerEvent : 4;
1923  UCHAR Reserved0 : 4;
1924  } Fields;
1925  } Byte0;
1926 
1927 #define EventStat_PowerStat_Mask 0x0f
1928 #define EventStat_PowerStat_Active 0x01
1929 #define EventStat_PowerStat_Idle 0x02
1930 #define EventStat_PowerStat_Standby 0x03
1931 #define EventStat_PowerStat_Sleep 0x04
1932 
1933  union {
1934  UCHAR Flags;
1935  struct {
1936  UCHAR PowerStatus: 4;
1937  UCHAR Reserved0 : 4;
1938  } Fields;
1939  } Byte1;
1940 
1941  UCHAR Reserved0[2];
1942 
1944 
1945 typedef struct _EVENT_STAT_MEDIA_BLOCK {
1946 
1948 
1949 #define EventStat_MediaEvent_Mask 0x0f
1950 #define EventStat_MediaEvent_None 0x00
1951 #define EventStat_MediaEvent_EjectReq 0x01
1952 #define EventStat_MediaEvent_New 0x02
1953 #define EventStat_MediaEvent_Removal 0x03
1954 #define EventStat_MediaEvent_Chg 0x04
1955 
1956  union {
1957  UCHAR Flags;
1958  struct {
1959  UCHAR MediaEvent : 4;
1960  UCHAR Reserved0 : 4;
1961  } Fields;
1962  } Byte0;
1963 
1964 #define EventStat_MediaStat_DoorOpen 0x01
1965 #define EventStat_MediaStat_Present 0x02
1966 
1967  union {
1968  UCHAR Flags;
1969  struct {
1970  UCHAR DoorOpen : 1;
1971  UCHAR Present : 1;
1972  UCHAR Reserved0 : 6;
1973  } Fields;
1974  } Byte1;
1975 
1976  UCHAR StartSlot;
1977  UCHAR EndSlot;
1978 
1980 
1981 typedef struct _EVENT_STAT_DEV_BUSY_BLOCK {
1982 
1984 
1985 #define EventStat_BusyEvent_Mask 0x0f
1986 #define EventStat_BusyEvent_None 0x00
1987 #define EventStat_BusyEvent_Busy 0x01
1988 
1989  union {
1990  UCHAR Flags;
1991  struct {
1992  UCHAR BusyEvent : 4;
1993  UCHAR Reserved0 : 4;
1994  } Fields;
1995  } Byte0;
1996 
1997 #define EventStat_BusyStat_Mask 0x0f
1998 #define EventStat_BusyStat_NoEvent 0x00
1999 #define EventStat_BusyStat_Power 0x01
2000 #define EventStat_BusyStat_Immed 0x02
2001 #define EventStat_BusyStat_Deferred 0x03
2002 
2003  union {
2004  UCHAR Flags;
2005  struct {
2006  UCHAR BusyStatus: 4;
2007  UCHAR Reserved0 : 4;
2008  } Fields;
2009  } Byte1;
2010 
2011  UCHAR Time[2];
2012 
2014 
2015 // Define mode disc info block.
2016 
2017 typedef struct _DISC_INFO_BLOCK { //
2018  UCHAR DataLength [2];
2019 
2020 #define DiscInfo_Disk_Mask 0x03
2021 #define DiscInfo_Disk_Empty 0x00
2022 #define DiscInfo_Disk_Appendable 0x01
2023 #define DiscInfo_Disk_Complete 0x02
2024 
2025 #define DiscInfo_Ses_Mask 0x0C
2026 #define DiscInfo_Ses_Empty 0x00
2027 #define DiscInfo_Ses_Incomplete 0x04
2028 #define DiscInfo_Ses_Complete 0x0C
2029 
2030 #define DiscInfo_Disk_Erasable 0x10
2031 
2032  union {
2033  UCHAR Flags;
2034  struct {
2035  UCHAR DiscStat : 2;
2036  UCHAR LastSesStat : 2;
2037  UCHAR Erasable : 1;
2039  } Fields;
2040  } DiscStat;
2041 
2043  UCHAR NumOfSes;
2046 
2047 #define DiscInfo_URU 0x20
2048 #define DiscInfo_DBC_V 0x40
2049 #define DiscInfo_DID_V 0x80
2050 
2051  union {
2052  UCHAR Flags;
2053  struct {
2054  UCHAR Reserved1: 5;
2055  UCHAR URU : 1;
2056  UCHAR DBC_V : 1; // 0
2057  UCHAR DID_V : 1;
2058  } Fields;
2059  } Flags;
2060 
2061 #define DiscInfo_Type_cdrom 0x00 // CD-DA / CD-ROM
2062 #define DiscInfo_Type_cdi 0x10 // CD-I
2063 #define DiscInfo_Type_cdromxa 0x20 // CD-ROM XA
2064 #define DiscInfo_Type_unknown 0xFF // HZ ;)
2065 
2066  UCHAR DiskType;
2067  UCHAR NumOfSes2; // MSB MMC-3
2068  UCHAR FirstTrackNumLastSes2; // MSB MMC-3
2069  UCHAR LastTrackNumLastSes2; // MSB MMC-3
2070  UCHAR DiskId [4];
2071  UCHAR LastSesLeadInTime [4]; // MSF
2072  UCHAR LastSesLeadOutTime [4]; // MSF
2073  UCHAR DiskBarCode [8];
2074  UCHAR Reserved3;
2075  UCHAR OPCNum;
2077 
2078 // Define track info block.
2079 
2080 typedef struct _TRACK_INFO_BLOCK {
2081  UCHAR DataLength [2];
2082  UCHAR TrackNum;
2083  UCHAR SesNum;
2084  UCHAR Reserved0;
2085 
2086 #define TrkInfo_Trk_Mask 0x0F
2087 #define TrkInfo_Trk_Mode1 0x01
2088 #define TrkInfo_Trk_Mode2 0x02
2089 #define TrkInfo_Trk_XA 0x02
2090 #define TrkInfo_Trk_DDCD 0x04 // MMC-3
2091 #define TrkInfo_Trk_NonCD 0x04 // MMC-3
2092 #define TrkInfo_Trk_Inc 0x05 // MMC-3
2093 #define TrkInfo_Trk_unknown 0x0F
2094 #define TrkInfo_Copy 0x10
2095 #define TrkInfo_Damage 0x20
2096 
2097  UCHAR TrackParam;
2098 /* UCHAR TrackMode : 4;
2099  UCHAR Copy : 1;
2100  UCHAR Damage : 1;
2101  UCHAR Reserved1 : 2; */
2102 
2103 #define TrkInfo_Dat_Mask 0x0F
2104 #define TrkInfo_Dat_Mode1 0x01
2105 #define TrkInfo_Dat_Mode2 0x02
2106 #define TrkInfo_Dat_XA 0x02
2107 #define TrkInfo_Dat_DDCD 0x02
2108 #define TrkInfo_Dat_unknown 0x0F
2109 #define TrkInfo_FP 0x10
2110 #define TrkInfo_Packet 0x20
2111 #define TrkInfo_Blank 0x40
2112 #define TrkInfo_RT 0x80
2113 
2114  UCHAR DataParam;
2115 /* UCHAR DataMode : 4;
2116  UCHAR FP : 1;
2117  UCHAR Packet : 1;
2118  UCHAR Blank : 1;
2119  UCHAR RT : 1; */
2120 
2121 #define TrkInfo_NWA_V 0x01
2122 #define TrkInfo_LRA_V 0x02 // MMC-3
2123 
2124  UCHAR NWA_V;
2125 /* UCHAR NWA_V : 1;
2126  UCHAR LRA_V : 1;
2127  UCHAR Reserved : 6; */
2128 
2129  UCHAR TrackStartAddr [4];
2130  UCHAR NextWriteAddr [4];
2131  UCHAR FreeBlocks [4];
2132  UCHAR FixPacketSize [4];
2133  UCHAR TrackLength [4];
2134 
2135 // MMC-3
2136 
2137  UCHAR LastRecordedAddr [4];
2138  UCHAR TrackNum2; // MSB
2139  UCHAR SesNum2; // MSB
2140  UCHAR Reserved2[2];
2141 
2143 
2144 // Mode data structures.
2145 
2146 // Define Mode parameter header.
2147 
2148 #define MediaType_Unknown 0x00
2149 #define MediaType_120mm_CDROM_DataOnly 0x01
2150 #define MediaType_120mm_CDROM_AudioOnly 0x02 //CDDA
2151 #define MediaType_120mm_CDROM_DataAudioCombined 0x03
2152 #define MediaType_120mm_CDROM_Hybrid_PhotoCD 0x04
2153 #define MediaType_80mm_CDROM_DataOnly 0x05
2154 #define MediaType_80mm_CDROM_AudioOnly 0x06 //CDDA
2155 #define MediaType_80mm_CDROM_DataAudioCombined 0x07
2156 #define MediaType_80mm_CDROM_Hybrid_PhotoCD 0x08
2157 
2158 #define MediaType_UnknownSize_CDR 0x10
2159 #define MediaType_120mm_CDR_DataOnly 0x11
2160 #define MediaType_120mm_CDR_AudioOnly 0x12 //CDDA
2161 #define MediaType_120mm_CDR_DataAudioCombined 0x13
2162 #define MediaType_120mm_CDR_Hybrid_PhotoCD 0x14
2163 #define MediaType_80mm_CDR_DataOnly 0x15
2164 #define MediaType_80mm_CDR_AudioOnly 0x16 //CDDA
2165 #define MediaType_80mm_CDR_DataAudioCombined 0x17
2166 #define MediaType_80mm_CDR_Hybrid_Photo_CD 0x18
2167 
2168 #define MediaType_UnknownSize_CDRW 0x20
2169 #define MediaType_120mm_CDRW_DataOnly 0x21
2170 #define MediaType_120mm_CDRW_AudioOnly 0x22 //CDDA
2171 #define MediaType_120mm_CDRW_DataAudioCombined 0x23
2172 #define MediaType_120mm_CDRW_Hybrid 0x24
2173 #define MediaType_80mm_CDRW_DataOnly 0x25
2174 #define MediaType_80mm_CDRW_AudioOnly 0x26 //CDDA
2175 #define MediaType_80mm_CDRW_DataAudioCombined 0x27
2176 #define MediaType_80mm_CDRW_Hybrid 0x28
2177 
2178 #define MediaType_NoDiscPresent 0x70
2179 #define MediaType_DoorOpen 0x71
2180 
2181 //*********************************************************************************************
2182 
2183 typedef struct _MODE_PARAMETER_HEADER {
2185  UCHAR MediumType;
2189 
2190 typedef struct _MODE_PARAMETER_HEADER10 {
2191  UCHAR ModeDataLength[2];
2192  UCHAR MediumType;
2194  UCHAR Reserved[2];
2197 
2198 #define MODE_FD_SINGLE_SIDE 0x01
2199 #define MODE_FD_DOUBLE_SIDE 0x02
2200 #define MODE_FD_MAXIMUM_TYPE 0x1E
2201 #define MODE_DSP_FUA_SUPPORTED 0x10
2202 #define MODE_DSP_WRITE_PROTECT 0x80
2203 
2204 // Define the mode parameter block.
2205 
2206 typedef struct _MODE_PARAMETER_BLOCK {
2208  UCHAR NumberOfBlocks[3];
2209  UCHAR Reserved;
2210  UCHAR BlockLength[3];
2212 
2213 typedef struct _MODE_PARM_READ_WRITE {
2214 
2215  MODE_PARAMETER_HEADER ParameterListHeader; // List Header Format
2216  MODE_PARAMETER_BLOCK ParameterListBlock; // List Block Descriptor
2217 
2219 
2220 //*********************************************************************************************
2221 // Define read write recovery page
2222 
2223 typedef struct _MODE_READ_WRITE_RECOVERY_PAGE { // 0x01
2224 
2225  UCHAR PageCode : 6;
2226  UCHAR Reserved1 : 1;
2228  UCHAR PageLength;
2229  union {
2230  UCHAR Flags;
2231  struct {
2232  UCHAR DCRBit : 1;
2233  UCHAR DTEBit : 1;
2234  UCHAR PERBit : 1;
2235  UCHAR EERBit : 1;
2236  UCHAR RCBit : 1;
2237  UCHAR TBBit : 1;
2238  UCHAR ARRE : 1;
2239  UCHAR AWRE : 1;
2240  } Fields;
2243  UCHAR CorrectionSpan; //SCSI CBS only
2244  UCHAR HeadOffsetCount; //SCSI CBS only
2245  UCHAR DataStrobOffsetCount; //SCSI CBS only
2248  UCHAR Reserved5;
2249  UCHAR RecoveryTimeLimit[2]; // 0
2250 
2252 
2253 // Define Read Recovery page - cdrom
2254 
2255 typedef struct _MODE_READ_RECOVERY_PAGE { // 0x01
2256 
2257  UCHAR PageCode : 6;
2258  UCHAR Reserved1 : 1;
2260  UCHAR PageLength;
2261  UCHAR DCRBit : 1;
2262  UCHAR DTEBit : 1;
2263  UCHAR PERBit : 1;
2264  UCHAR Reserved2 : 1;
2265  UCHAR RCBit : 1;
2266  UCHAR TBBit : 1;
2267  UCHAR Reserved3 : 2;
2269  UCHAR Reserved4[4];
2270 
2272 
2273 //*********************************************************************************************
2274 // Define mode write parameters page.
2275 
2276 typedef struct _MODE_WRITE_PARAMS_PAGE { // 0x05
2277  UCHAR PageCode : 6;
2278  UCHAR Reserved1: 1;
2279  UCHAR PageSavable : 1;
2280 
2281  UCHAR PageLength; // 0x32
2282 
2283 #define WParam_WType_Mask 0x0f
2284 #define WParam_WType_Packet 0x00
2285 #define WParam_WType_TAO 0x01
2286 #define WParam_WType_Ses 0x02
2287 #define WParam_WType_Raw 0x03
2288 #define WParam_TestWrite 0x10
2289 #define WParam_LS_V 0x20
2290 #define WParam_BUFF 0x40
2291 
2292  union {
2293  UCHAR Flags;
2294  struct {
2295  UCHAR WriteType: 4; // 1
2296  UCHAR TestWrite: 1;
2297  UCHAR LS_V: 1;
2298  UCHAR BUFF: 1;
2299  UCHAR Reserved1: 1;
2300  } Fields;
2301  } Byte2;
2302 
2303 #define WParam_TrkMode_Mask 0x0d // xx0x
2304 #define WParam_TrkMode_None 0x00
2305 #define WParam_TrkMode_Audio 0x00
2306 #define WParam_TrkMode_Audio_PreEmph 0x01
2307 #define WParam_TrkMode_Data 0x04
2308 #define WParam_TrkMode_IncrData 0x05
2309 #define WParam_TrkMode_QAudio_PreEmph 0x08
2310 #define WParam_TrkMode_AllowCpy 0x02
2311 #define WParam_Copy 0x10
2312 #define WParam_FP 0x20
2313 #define WParam_MultiSes_Mask 0xc0
2314 #define WParam_Multises_None 0x00
2315 #define WParam_Multises_Final 0x80
2316 #define WParam_Multises_Multi 0xc0
2317 
2318  union {
2319  UCHAR Flags;
2320  struct {
2321  UCHAR TrackMode: 4; // 4
2322  UCHAR Copy : 1; // 0
2323  UCHAR FP : 1; // 0
2324  UCHAR Multisession: 2; // 11
2325  } Fields;
2326  } Byte3;
2327 
2328 #define WParam_BlkType_Mask 0x0f
2329 #define WParam_BlkType_Raw_2352 0x00
2330 #define WParam_BlkType_RawPQ_2368 0x01
2331 #define WParam_BlkType_RawPW_2448 0x02
2332 #define WParam_BlkType_RawPW_R_2448 0x03
2333 #define WParam_BlkType_VendorSpec1 0x07
2334 #define WParam_BlkType_M1_2048 0x08
2335 #define WParam_BlkType_M2_2336 0x09
2336 #define WParam_BlkType_M2XAF1_2048 0x0a
2337 #define WParam_BlkType_M2XAF1SH_2056 0x0b
2338 #define WParam_BlkType_M2XAF2_2324 0x0c
2339 #define WParam_BlkType_M2XAFXSH_2332 0x0d
2340 #define WParam_BlkType_VendorSpec2 0x0f
2341 
2342  union {
2343  UCHAR Flags;
2344  struct {
2345  UCHAR DataBlockType: 4; // 8
2346  UCHAR Reserved2: 4;
2347  } Fields;
2348  } Byte4;
2349 
2350  UCHAR LinkSize;
2351  UCHAR Reserved3;
2352 
2353  union {
2354  UCHAR Flags;
2355  struct {
2356  UCHAR HostAppCode : 6; // 0
2357  UCHAR Reserved4 : 2;
2358  } Fields;
2359  } Byte7;
2360 
2361 #define WParam_SesFmt_CdRom 0x00
2362 #define WParam_SesFmt_CdI 0x10
2363 #define WParam_SesFmt_CdRomXa 0x20
2364 
2365  UCHAR SesFmt; // 0
2366  UCHAR Reserved5;
2367  UCHAR PacketSize[4]; // 0
2368  UCHAR AudioPause[2]; // 150
2369 
2370  UCHAR Reserved6: 7;
2371  UCHAR MCVAL : 1;
2372 
2373  UCHAR N[13];
2374  UCHAR Zero;
2375  UCHAR AFRAME;
2376 
2377  UCHAR Reserved7: 7;
2378  UCHAR TCVAL : 1;
2379 
2380  UCHAR I[12];
2381  UCHAR Zero_2;
2382  UCHAR AFRAME_2;
2383  UCHAR Reserved8;
2384 
2385  struct {
2386  union {
2387  UCHAR MSF[3];
2388  struct _SubHdrParams1 {
2389  UCHAR FileNum;
2390  UCHAR ChannelNum;
2391 
2392 #define WParam_SubHdr_SubMode0 0x00
2393 #define WParam_SubHdr_SubMode1 0x08
2394 
2395  UCHAR SubMode;
2396  } Params1;
2397  } Params;
2398 
2399 #define WParam_SubHdr_Mode_Mask 0x03
2400 #define WParam_SubHdr_Mode0 0x00
2401 #define WParam_SubHdr_Mode1 0x01
2402 #define WParam_SubHdr_Mode2 0x02
2403 #define WParam_SubHdr_Format_Mask 0xe0
2404 #define WParam_SubHdr_Format_UserData 0x00
2405 #define WParam_SubHdr_Format_RunIn4 0x20
2406 #define WParam_SubHdr_Format_RunIn3 0x40
2407 #define WParam_SubHdr_Format_RunIn2 0x60
2408 #define WParam_SubHdr_Format_RunIn1 0x80
2409 #define WParam_SubHdr_Format_Link 0xa0
2410 #define WParam_SubHdr_Format_RunOut2 0xc0
2411 #define WParam_SubHdr_Format_RunOut1 0xe0
2412 
2413  union {
2414  UCHAR Flags;
2415  struct {
2416  UCHAR Mode : 2;
2417  UCHAR Reserved : 3;
2418  UCHAR Format : 3;
2419  } Fields;
2420  } Mode;
2421  } SubHeader ;
2422 
2424 
2425 typedef struct _MODE_WRITE_PARAMS_PAGE_3 {
2427  UCHAR VendorSpec[4];
2429 
2430 //*********************************************************************************************
2431 // Define Caching page.
2432 
2433 typedef struct _MODE_CACHING_PAGE { // 0x08
2434  UCHAR PageCode : 6;
2435  UCHAR Reserved1: 1;
2436  UCHAR PageSavable : 1;
2437  UCHAR PageLength;
2438  UCHAR ReadDisableCache : 1;
2440  UCHAR WriteCacheEnable : 1;
2441  UCHAR Reserved2 : 5;
2449 
2450 //*********************************************************************************************
2451 // Define CD Parameters page.
2452 
2453 typedef struct _MODE_CD_PARAMS_PAGE { // 0x0D
2454  UCHAR PageCode : 6;
2455  UCHAR Reserved : 1;
2456  UCHAR PageSavable : 1;
2457 
2458  UCHAR PageLength; // 0x06
2459  UCHAR Reserved1;
2460 
2461 #define CdParams_InactvityTime_Mask 0x0f
2462 
2463  union {
2464  UCHAR Flags;
2465  struct {
2466  UCHAR InactivityTime: 4; // 1 - 125ms, 2 - 250ms... 9 - 32s, A - 1min...
2467  UCHAR Reserved0 : 4;
2468  } Fields;
2469  } Byte2;
2470 
2474 
2475 //*********************************************************************************************
2476 // Define CD Audio Control Mode page.
2477 
2478 typedef struct _CDDA_PORT_CONTROL {
2479 
2480 #define CddaPort_Channel_Mask 0x0f
2481 #define CddaPort_Channel_Mute 0x00
2482 #define CddaPort_Channel_0 0x01
2483 #define CddaPort_Channel_1 0x02
2484 #define CddaPort_Channel_0_1 0x03
2485 #define CddaPort_Channel_2 0x04
2486 #define CddaPort_Channel_3 0x08
2487 
2489  UCHAR Volume;
2491 
2492 typedef struct _MODE_CD_AUDIO_CONTROL_PAGE { // 0x0E
2493  UCHAR PageCode : 6;
2494  UCHAR Reserved1: 1;
2495  UCHAR PageSavable : 1;
2496 
2497  UCHAR PageLength; // 0x0E
2498 
2499 #define CdAudio_SOTC 0x02
2500 #define CdAudio_Immed 0x04
2501 
2502  union {
2503  UCHAR Flags;
2504  struct {
2505  UCHAR Reserved0 : 1;
2506  UCHAR SOTC : 1;
2507  UCHAR Immed : 1;
2508  UCHAR Reserved1 : 5;
2509  } Fields;
2510  } Byte2;
2511 
2512  UCHAR Reserved2[2];
2513  UCHAR LbaFormat;
2517 
2518 //*********************************************************************************************
2519 // Define Power Condition Mode page.
2520 
2521 typedef struct _MODE_POWER_CONDITION_PAGE { // 0x1A
2522  UCHAR PageCode : 6;
2523  UCHAR Reserved1: 1;
2524  UCHAR PageSavable : 1;
2525 
2526  UCHAR PageLength; // 0x0A
2527  UCHAR Reserved2;
2528 
2529 #define PowerCond_Standby 0x01
2530 #define PowerCond_Idle 0x02
2531 
2532  union {
2533  UCHAR Flags;
2534  struct {
2535  UCHAR Standby : 1;
2536  UCHAR Idle : 1;
2537  UCHAR Reserved1 : 6;
2538  } Fields;
2539  } Byte3;
2540 
2541  UCHAR IdleTimer[4]; // 1unit = 100ms
2542  UCHAR StandbyTimer[4]; // 1unit = 100ms
2544 
2545 //*********************************************************************************************
2546 // Define Fault/Failure Reporting Control page.
2547 
2548 typedef struct _MODE_FAIL_REPORT_PAGE { // 0x1C
2549  UCHAR PageCode : 6;
2550  UCHAR Reserved1: 1;
2551  UCHAR PageSavable : 1;
2552 
2553  UCHAR PageLength; // 0x0A
2554 
2555 #define FailReport_LogErr 0x01
2556 #define FailReport_Test 0x04
2557 #define FailReport_DExcept 0x08
2558 #define FailReport_Perf 0x80
2559 
2560  union {
2561  UCHAR Flags;
2562  struct {
2563  UCHAR LogErr : 1;
2564  UCHAR Reserved1 : 1;
2565  UCHAR Test : 1;
2566  UCHAR DExcept : 1;
2567  UCHAR Reserved2 : 3;
2568  UCHAR Perf : 1;
2569  } Fields;
2570  } Byte2;
2571 
2572  union {
2573  UCHAR Flags;
2574  struct {
2575  UCHAR MRIE : 4;
2576  UCHAR Reserved1 : 4;
2577  } Fields;
2578  } Byte3;
2579 
2580  UCHAR IntervalTimer[4]; // 1unit = 100ms
2581  UCHAR ReportCount[4];
2583 
2584 //*********************************************************************************************
2585 // Define Time-out and Protect page.
2586 
2587 typedef struct _MODE_TIMEOUT_AND_PROTECT_PAGE { // 0x1D
2588  UCHAR PageCode : 6;
2589  UCHAR Reserved1: 1;
2590  UCHAR PageSavable : 1;
2591 
2592  UCHAR PageLength; // 0x08
2593 
2594  UCHAR Reserved2[2];
2595 
2596 #define Timeout_SW 0x01
2597 #define Timeout_DISP 0x02
2598 #define Timeout_TMOE 0x04
2599 
2600  union {
2601  UCHAR Flags;
2602  struct {
2603  UCHAR SW : 1;
2604  UCHAR DISP : 1;
2605  UCHAR TMOE : 1;
2606  UCHAR Reserved : 5;
2607  } Fields;
2608  } Byte4;
2609 
2610  UCHAR Reserved3;
2611 
2612  UCHAR Group1_Timeout[2]; // 1unit = 1s
2613  UCHAR Group2_Timeout[2]; // 1unit = 1s
2615 
2616 //*********************************************************************************************
2617 // Define Philips CD-R(W) Sector Mode page.
2618 
2619 typedef struct _MODE_PHILIPS_SECTOR_TYPE_PAGE { // 0x21
2620  UCHAR PageCode : 6;
2621  UCHAR Reserved1 : 1;
2622  UCHAR PSBit : 1;
2623 
2624  UCHAR PageLength;
2625 
2626  UCHAR Reserved0[2];
2627 
2628  union {
2629  UCHAR Flags;
2630  struct {
2631  UCHAR DataBlockType: 4; // 8
2632  UCHAR Reserved2: 4;
2633  } Fields;
2634  } Byte4;
2635 
2636 #define WParams_Philips_CreateNewTrack 0
2637 
2638  UCHAR Track;
2639  UCHAR ISRC[9];
2640 
2641  UCHAR Reserved3[2];
2643 
2644 //*********************************************************************************************
2645 // Define CD-X Capabilities and Mechanical Status page.
2646 
2647 typedef struct _MODE_CAPABILITIES_PAGE2 { // 0x2A
2648  UCHAR PageCode : 6;
2649  UCHAR Reserved1 : 1;
2650  UCHAR PSBit : 1;
2651 
2652  UCHAR PageLength;
2653 
2654 #define DevCap_read_cd_r 0x01 // reserved in 1.2
2655 #define DevCap_read_cd_rw 0x02 // reserved in 1.2
2656 #define DevCap_method2 0x04
2657 #define DevCap_read_dvd_rom 0x08
2658 #define DevCap_read_dvd_r 0x10
2659 #define DevCap_read_dvd_ram 0x20
2660 
2661  UCHAR ReadCap; // DevCap_*_read
2662 /* UCHAR cd_r_read : 1; // reserved in 1.2
2663  UCHAR cd_rw_read : 1; // reserved in 1.2
2664  UCHAR method2 : 1;
2665  UCHAR dvd_rom : 1;
2666  UCHAR dvd_r_read : 1;
2667  UCHAR dvd_ram_read : 1;
2668  UCHAR Reserved2 : 2;*/
2669 
2670 #define DevCap_write_cd_r 0x01 // reserved in 1.2
2671 #define DevCap_write_cd_rw 0x02 // reserved in 1.2
2672 #define DevCap_test_write 0x04
2673 #define DevCap_write_dvd_r 0x10
2674 #define DevCap_write_dvd_ram 0x20
2675 
2676  UCHAR WriteCap; // DevCap_*_write
2677 /* UCHAR cd_r_write : 1; // reserved in 1.2
2678  UCHAR cd_rw_write : 1; // reserved in 1.2
2679  UCHAR test_write : 1;
2680  UCHAR reserved3a : 1;
2681  UCHAR dvd_r_write : 1;
2682  UCHAR dvd_ram_write : 1;
2683  UCHAR Reserved3 : 2;*/
2684 
2685 #define DevCap_audio_play 0x01
2686 #define DevCap_composite 0x02
2687 #define DevCap_digport1 0x04
2688 #define DevCap_digport2 0x08
2689 #define DevCap_mode2_form1 0x10
2690 #define DevCap_mode2_form2 0x20
2691 #define DevCap_multisession 0x40
2692 
2694 /* UCHAR audio_play : 1;
2695  UCHAR composite : 1;
2696  UCHAR digport1 : 1;
2697  UCHAR digport2 : 1;
2698  UCHAR mode2_form1 : 1;
2699  UCHAR mode2_form2 : 1;
2700  UCHAR multisession : 1;
2701  UCHAR Reserved4 : 1;*/
2702 
2703 #define DevCap_cdda 0x01
2704 #define DevCap_cdda_accurate 0x02
2705 #define DevCap_rw_supported 0x04
2706 #define DevCap_rw_corr 0x08
2707 #define DevCap_c2_pointers 0x10
2708 #define DevCap_isrc 0x20
2709 #define DevCap_upc 0x40
2710 #define DevCap_read_bar_code 0x80
2711 
2713 /* UCHAR cdda : 1;
2714  UCHAR cdda_accurate : 1;
2715  UCHAR rw_supported : 1;
2716  UCHAR rw_corr : 1;
2717  UCHAR c2_pointers : 1;
2718  UCHAR isrc : 1;
2719  UCHAR upc : 1;
2720  UCHAR Reserved5 : 1;*/
2721 
2722 #define DevCap_lock 0x01
2723 #define DevCap_lock_state 0x02
2724 #define DevCap_prevent_jumper 0x04
2725 #define DevCap_eject 0x08
2726 #define DevCap_mechtype_mask 0xE0
2727 #define DevCap_mechtype_caddy 0x00
2728 #define DevCap_mechtype_tray (0x01<<5)
2729 #define DevCap_mechtype_popup (0x02<<5)
2730 #define DevCap_mechtype_individual_changer (0x04<<5)
2731 #define DevCap_mechtype_cartridge_changer (0x05<<5)
2732 
2734 /* UCHAR lock : 1;
2735  UCHAR lock_state : 1;
2736  UCHAR prevent_jumper : 1;
2737  UCHAR eject : 1;
2738  UCHAR Reserved6 : 1;
2739  UCHAR mechtype : 3;*/
2740 
2741 #define DevCap_separate_volume 0x01
2742 #define DevCap_separate_mute 0x02
2743 #define DevCap_disc_present 0x04 // reserved in 1.2
2744 #define DevCap_sw_slot_select 0x08 // reserved in 1.2
2745 #define DevCap_change_side_cap 0x10
2746 #define DevCap_rw_leadin_read 0x20
2747 
2749 /* UCHAR separate_volume : 1;
2750  UCHAR separate_mute : 1;
2751  UCHAR disc_present : 1; // reserved in 1.2
2752  UCHAR sss : 1; // reserved in 1.2
2753  UCHAR Reserved7 : 4;*/
2754 
2757  UCHAR BufferSize[2];
2758  UCHAR CurrentSpeed[2];
2759 
2760  UCHAR Reserved8;
2761 
2763 /* UCHAR Reserved9 : 1;
2764  UCHAR BCK : 1;
2765  UCHAR RCK : 1;
2766  UCHAR LSBF : 1;
2767  UCHAR Length : 2;
2768  UCHAR Reserved10 : 2;*/
2769 
2773  UCHAR Reserved11[2];
2774 
2775 // MMC3
2776 
2777  UCHAR Reserved12;
2778 
2780 /* UCHAR RCS : 2; // rotation control selected
2781  UCHAR Reserved13 : 6; */
2782 
2785 
2786 // LUN_WRITE_PERF_DESC LunWPerfDescriptor[0];
2787 
2789 
2790 typedef struct _LUN_WRITE_PERF_DESC {
2791  UCHAR Reserved;
2792 
2793 #define LunWPerf_RotCtrl_Mask 0x07
2794 #define LunWPerf_RotCtrl_CLV 0x00
2795 #define LunWPerf_RotCtrl_CAV 0x01
2796 
2798  UCHAR WriteSpeedSupported[2]; // kbps
2799 
2801 
2802 // Mode parameter list block descriptor -
2803 // set the block length for reading/writing
2804 
2805 #define MODE_BLOCK_DESC_LENGTH 8
2806 #define MODE_HEADER_LENGTH 4
2807 #define MODE_HEADER_LENGTH10 8
2808 
2809 #define CDB_USE_MSF 0x01
2810 
2811 // Atapi 2.5 changer
2813  UCHAR CurrentSlot : 5;
2814  UCHAR ChangerState : 2;
2815  UCHAR Fault : 1;
2816  UCHAR Reserved : 5;
2817  UCHAR MechanismState : 3;
2822 
2823 typedef struct _SLOT_TABLE_INFORMATION {
2824  UCHAR DiscChanged : 1;
2825  UCHAR Reserved : 6;
2826  UCHAR DiscPresent : 1;
2827  UCHAR Reserved2[3];
2829 
2830 typedef struct _MECHANICAL_STATUS {
2834 
2835 // DVD structure blocks
2836 
2837 typedef struct _DVD_DESCRIPTOR_HEADER {
2841 
2842 typedef struct _DVD_LAYER_DESCRIPTOR {
2862 
2863 typedef struct _DVD_COPYRIGHT_INFORMATION {
2866  UCHAR Reserved[2];
2868 
2869 typedef struct _DVD_DISK_KEY_STRUCTURES {
2870  UCHAR DiskKeyData[2048];
2872 
2873 typedef struct _CDVD_KEY_HEADER {
2874  UCHAR DataLength[2];
2875  UCHAR Reserved[2];
2877 
2878 typedef struct _CDVD_REPORT_AGID_DATA {
2880  UCHAR Reserved1[3];
2881  UCHAR Reserved2 : 6;
2882  UCHAR AGID : 2;
2884 
2885 typedef struct _CDVD_CHALLENGE_KEY_DATA {
2888  UCHAR Reserved[2];
2890 
2891 typedef struct _CDVD_KEY_DATA {
2893  UCHAR Key[5];
2894  UCHAR Reserved[3];
2896 
2897 typedef struct _CDVD_REPORT_ASF_DATA {
2899  UCHAR Reserved1[3];
2900  UCHAR Success : 1;
2901  UCHAR Reserved2 : 7;
2903 
2904 typedef struct _CDVD_TITLE_KEY_HEADER {
2907  UCHAR Reserved1[1];
2908  UCHAR Reserved2 : 3;
2909  UCHAR CGMS : 2;
2910  UCHAR CP_SEC : 1;
2911  UCHAR CPM : 1;
2912  UCHAR Zero : 1;
2915 
2921 
2922 typedef struct _DVD_RPC_KEY {
2930 
2931 typedef struct _REPORT_LUNS_INFO_HDR {
2935 
2936 
2937 #pragma pack(pop)
2938 
2939 #endif //__CDRW_DEVICE_H__
UCHAR FieldReplaceableUnitCode
Definition: cdrw_hw.h:1177
ULONGLONG LogicalBlockAddress
Definition: scsi.h:1431
struct _READ_CAPACITY_DATA READ_CAPACITY_DATA
struct _MODE_FAIL_REPORT_PAGE MODE_FAIL_REPORT_PAGE
UCHAR Reserved2
Definition: cdrw_hw.h:1126
UCHAR CommandUniqueBits
Definition: cdrw_hw.h:34
UCHAR Params[11]
Definition: cdrw_hw.h:781
MODE_PARAMETER_HEADER ParameterListHeader
Definition: cdrw_hw.h:2536
struct _CDB::_WRITE_CD::@780::@781 Fields
UCHAR FirstTrackNumLastSes
Definition: cdrw_hw.h:2295
READ_TOC_FULL_TOC READ_TOC_PMA
Definition: scsi.h:1598
struct _CDB::_GET_EVENT_STATUS GET_EVENT_STATUS
struct _MODE_WRITE_PARAMS_PAGE::@892::@897::_SubHdrParams1 Params1
struct _MODE_CD_AUDIO_CONTROL_PAGE * PMODE_CD_AUDIO_CONTROL_PAGE
UCHAR LeadIn_MSF[3]
Definition: cdrw_hw.h:1676
struct _CDB::_READ_DISC_INFO * PREAD_DISC_INFO
struct _CDB::_MODE_SELECT10 MODE_SELECT10
struct _MODE_PHILIPS_SECTOR_TYPE_PAGE MODE_PHILIPS_SECTOR_TYPE_PAGE
UCHAR Reserved2[2]
Definition: cdrw_hw.h:672
struct _CDB::_READ_TOC::@778::@779 Fields
UCHAR SenseKey
Definition: cdrw_hw.h:1167
UCHAR Reserved2[2]
Definition: cdrw_hw.h:447
UCHAR DataLength[2]
Definition: cdrw_hw.h:2048
struct _CDB::_READ_TRACK_INFO_3 * PREAD_TRACK_INFO_3
union _READ_TOC_ATIP::@823 Flags1
struct _TOC_SES_INFO * PTOC_SES_INFO
union _CDB * PCDB
UCHAR Reserved3
Definition: cdrw_hw.h:1793
UCHAR Control
Definition: cdrw_hw.h:166
struct _MODE_READ_WRITE_RECOVERY_PAGE MODE_READ_WRITE_RECOVERY_PAGE
UCHAR Start_MSF[3]
Definition: cdrw_hw.h:1645
UCHAR Control
Definition: cdrw_hw.h:285
struct _DISC_INFO_BLOCK DISC_INFO_BLOCK
UCHAR StartingDataSector[4]
Definition: scsi.h:2855
struct _CDB::_SERVICE_ACTION16 SERVICE_ACTION16
struct _CDB::_CLOSE_TRACK_SESSION * PCLOSE_TRACK_SESSION
UCHAR CommandSpecificInformation[4]
Definition: cdrw_hw.h:1174
struct _CDB::_LOAD_UNLOAD LOAD_UNLOAD
UCHAR MSF[3]
Definition: cdrw_hw.h:1589
UCHAR Reserved2[3]
Definition: cdrw_hw.h:163
UCHAR ProductRevisionLevel[4]
Definition: cdrw_hw.h:1134
union _MODE_WRITE_PARAMS_PAGE::@888 Byte2
UCHAR Reserved
Definition: cdrw_hw.h:39
union _CDB::_CDB16READWRITE::@1170 Byte1
UCHAR AllocationLength[2]
Definition: cdrw_hw.h:527
UCHAR Ending_MSF[3]
Definition: cdrw_hw.h:249
MODE_WRITE_PARAMS_PAGE Standard
Definition: cdrw_hw.h:2763
CDDA_PORT_CONTROL Port[4]
Definition: cdrw_hw.h:2856
UCHAR LastRecordedAddr[4]
Definition: cdrw_hw.h:2445
union _MODE_READ_WRITE_RECOVERY_PAGE::@880 ErrorRecoveryParam
struct _CD_TEXT_PACK_DATA::@835::@836 Fields
struct _CDB::_WRITE_CD WRITE_CD
UCHAR AllocationLength[2]
Definition: cdrw_hw.h:768
struct _EVENT_STAT_HEADER * PEVENT_STAT_HEADER
UCHAR CopyManagementRevision[2]
Definition: cdrw_hw.h:3115
UCHAR AllocationLength[2]
Definition: cdrw_hw.h:492
UCHAR WriteCacheEnable
Definition: cdrw_hw.h:2779
UCHAR DataLength[2]
Definition: cdrw_hw.h:3581
struct _TOC_SES_INFO::@811::@821 StartPositionOfFirstLeadIn
struct _CDVD_REPORT_AGID_DATA * PCDVD_REPORT_AGID_DATA
UCHAR NumOfBlocks[3]
Definition: cdrw_hw.h:273
struct _CDB::_NEC_READ_CDDA NEC_READ_CDDA
struct _OPC_INFO_BLOCK OPC_INFO_BLOCK
struct _SENSE_DATA * PSENSE_DATA
struct _CDVD_KEY_DATA * PCDVD_KEY_DATA
struct _CDB::_MEDIA_REMOVAL MEDIA_REMOVAL
union _CDB::_GET_CONFIGURATION::@798 Byte1
struct _CDB::_CDB16READWRITE CDB16READWRITE
union _CDB::_READ_TOC::@778 Byte2
UCHAR NumOfBlocks[2]
Definition: cdrw_hw.h:306
struct _CDB::_READ_CD * PREAD_CD
UCHAR NumOfPointers_M5
Definition: cdrw_hw.h:1655
struct _CDVD_REPORT_AGID_DATA CDVD_REPORT_AGID_DATA
struct _CDB::_READ_BUFFER_CAPACITY * PREAD_BUFFER_CAPACITY
UCHAR TrackLength[4]
Definition: cdrw_hw.h:2441
UCHAR Reserved
Definition: cdrw_hw.h:159
UCHAR WriteSpeed[2]
Definition: cdrw_hw.h:598
struct _CDB::_REPORT_KEY REPORT_KEY
union _READ_TOC_ATIP::@824 Flags2
UCHAR MaxSpeedCVL
Definition: cdrw_hw.h:1763
struct _SLOT_TABLE_INFORMATION * PSLOT_TABLE_INFORMATION
struct _CDB::_GET_EVENT_STATUS::@784::@785 Fields
struct _CDB::_ERASE ERASE
UCHAR ResponseDataFormat
Definition: cdrw_hw.h:1121
struct _CDB::_SEEK * PSEEK
struct _CDB::_SEND_OPC_INFO::@800::@802 Fields
UCHAR Control
Definition: cdrw_hw.h:664
UCHAR AllocationLength[4]
Definition: scsi.h:700
UCHAR FReserved2
Definition: cdrw_hw.h:107
struct _SENSE_DATA SENSE_DATA
UCHAR LBA[4]
Definition: cdrw_hw.h:380
struct _CDB::_READ_TRACK_INFO READ_TRACK_INFO
UCHAR OperationCode
Definition: cdrw_hw.h:312
struct _SLOT_TABLE_INFORMATION SLOT_TABLE_INFORMATION
struct _CDB::_GET_CONFIGURATION GET_CONFIGURATION
struct _BUFFER_CAPACITY_BLOCK * PBUFFER_CAPACITY_BLOCK
UCHAR TriggerLBA[4]
Definition: cdrw_hw.h:741
struct _MODE_PARAMETER_HEADER10 MODE_PARAMETER_HEADER10
union _MODE_WRITE_PARAMS_PAGE::@889 Byte3
UCHAR SegmentNumber
Definition: cdrw_hw.h:1166
Definition: cdrw_hw.h:28
union _MODE_WRITE_PARAMS_PAGE::@892::@897 Params
struct _CDB::_CDB6FORMAT::@776::@777 Fields
struct _CDB::_CDB6 CDB6
UCHAR Lun
Definition: cdrw_hw.h:379
UCHAR MaximumSpeedSupported[2]
Definition: cdrw_hw.h:3098
UCHAR IncludeUserData
Definition: cdrw_hw.h:278
struct _READ_CAPACITY16_DATA READ_CAPACITY16_DATA
UCHAR Lun
Definition: cdrw_hw.h:35
struct _DISC_INFO_BLOCK::@876::@878 Fields
struct _MODE_PARAMETER_HEADER MODE_PARAMETER_HEADER
union _MODE_POWER_CONDITION_PAGE::@904 Byte3
struct _DVD_LAYER_DESCRIPTOR * PDVD_LAYER_DESCRIPTOR
struct _CDB::_CDB6FORMAT CDB6FORMAT
struct _EVENT_STAT_HEADER::@854::@855 Fields
UCHAR VendorUnique
Definition: cdrw_hw.h:40
UCHAR DataLength[2]
Definition: cdrw_hw.h:2268
union _CDB::_CLOSE_TRACK_SESSION::@791 Byte2
CDVD_KEY_HEADER Header
Definition: cdrw_hw.h:3586
union _CDB CDB
UCHAR Reserved14_5_6
Definition: scsi.h:766
UCHAR NumberOfLayers
Definition: scsi.h:2851
struct _CDB::_REQUEST_SENSE REQUEST_SENSE
UCHAR SubChannelSelection
Definition: cdrw_hw.h:258
union _CDB::_GET_EVENT_STATUS::@784 Byte1
union _TOC_SES_INFO::@811 Params
UCHAR OperationCode
Definition: cdrw_hw.h:634
struct _CDB::_CDB12READWRITE * PCDB12READWRITE
struct _CDB::_REPORT_LUNS REPORT_LUNS
struct _CDB::_PLXTR_READ_CDDA PLXTR_READ_CDDA
struct _CDB::_SEND_OPC_INFO * PSEND_OPC_INFO
UCHAR Reserved1
Definition: cdrw_hw.h:1748
DVD_DESCRIPTOR_HEADER Header
Definition: scsi.h:2843
struct _CDB::_MODE_SENSE10 MODE_SENSE10
UCHAR ReadDisableCache
Definition: cdrw_hw.h:2777
struct _MODE_READ_WRITE_RECOVERY_PAGE::@880::@884 Fields
union _EVENT_STAT_OPERATIONAL_BLOCK::@857 Byte1
ULONG LogicalBlockAddress
Definition: cdrw_hw.h:1471
UCHAR AllocationLength[3]
Definition: cdrw_hw.h:775
struct _CDRW_FORMAT_DESCRIPTOR * PCDRW_FORMAT_DESCRIPTOR
struct _CDB::_READ_CD_MSF * PREAD_CD_MSF
struct _CDB::_PLAY_AUDIO_MSF PLAY_AUDIO_MSF
UCHAR CommandQueue
Definition: cdrw_hw.h:1125
UCHAR RpcScheme
Definition: scsi.h:2927
struct _CDB::_SYNCHRONIZE_CACHE * PSYNCHRONIZE_CACHE
struct _DVD_DISK_KEY_STRUCTURES DVD_DISK_KEY_STRUCTURES
union _CDB::_CDB12READWRITE::@804 Byte1
UCHAR AllocationLength[2]
Definition: cdrw_hw.h:212
UCHAR Immediate
Definition: cdrw_hw.h:80
struct _READ_TOC_FULL_TOC * PREAD_TOC_FULL_TOC
struct _MODE_PHILIPS_SECTOR_TYPE_PAGE::@912::@913 Fields
struct _CDB::_READ_DVD_STRUCTURE * PREAD_DVD_STRUCTURE
struct _MODE_FAIL_REPORT_PAGE::@906::@908 Fields
struct _CDB::_SEND_KEY * PSEND_KEY
UCHAR LastTrackNumLastSes2
Definition: cdrw_hw.h:2331
CDVD_KEY_HEADER Header
Definition: cdrw_hw.h:3605
UCHAR ReadSpeed[2]
Definition: cdrw_hw.h:597
struct _CDDA_PORT_CONTROL CDDA_PORT_CONTROL
UCHAR Reserved0
Definition: cdrw_hw.h:298
struct _CAPACITY_LIST_HEADER CAPACITY_LIST_HEADER
struct _MODE_CD_AUDIO_CONTROL_PAGE MODE_CD_AUDIO_CONTROL_PAGE
struct _CDB::_WRITE_CD * PWRITE_CD
UCHAR Reserved1[20]
Definition: scsi.h:1436
UCHAR OperationCode
Definition: cdrw_hw.h:362
UCHAR ProductId[16]
Definition: cdrw_hw.h:1133
struct _CDB::_CDB12READWRITE::@804::@805 Fields
struct _CDB::_MECH_STATUS * PMECH_STATUS
CAPACITY_LIST_HEADER Header
Definition: cdrw_hw.h:2035
struct _CDB::_READ_TRACK_INFO_3 READ_TRACK_INFO_3
struct _READ_TOC_TOC READ_TOC_TOC
struct _TOC_TRACK_INFO * PTOC_TRACK_INFO
UCHAR EndLayerZeroSector[4]
Definition: scsi.h:2857
struct _FORMATTABLE_CAPACITY_DESCRIPTOR::@850::@853 Fields
struct _MODE_POWER_CONDITION_PAGE::@904::@905 Fields
struct _READ_TOC_CD_TEXT READ_TOC_CD_TEXT
UCHAR Program_MSF[3]
Definition: cdrw_hw.h:1654
struct _CDB::_CDB10 CDB10
UCHAR VendorId[8]
Definition: cdrw_hw.h:1132
UCHAR AllocationLength[2]
Definition: cdrw_hw.h:734
UCHAR IncludeUserData
Definition: cdrw_hw.h:254
UCHAR ReadRetensionPriority
Definition: cdrw_hw.h:2783
UCHAR ForceUnitAccess
Definition: cdrw_hw.h:115
struct _CDVD_KEY_DATA CDVD_KEY_DATA
UCHAR POINT
Definition: cdrw_hw.h:1584
struct _DVD_DISK_KEY_STRUCTURES * PDVD_DISK_KEY_STRUCTURES
UCHAR LBA[4]
Definition: scsi.h:108
FORMAT_LIST_HEADER Header
Definition: cdrw_hw.h:1992
UCHAR Starting_MSF[3]
Definition: cdrw_hw.h:248
UCHAR MaximumPrefetch[2]
Definition: cdrw_hw.h:2787
struct _CDVD_CHALLENGE_KEY_DATA CDVD_CHALLENGE_KEY_DATA
union _EVENT_STAT_MEDIA_BLOCK::@869 Byte1
UCHAR Reserved2[2]
Definition: cdrw_hw.h:393
UCHAR FUnits_per_SUnit[2]
Definition: cdrw_hw.h:2813
PREAD_TOC_FULL_TOC PREAD_TOC_PMA
Definition: scsi.h:1599
struct _DVD_DESCRIPTOR_HEADER DVD_DESCRIPTOR_HEADER
struct _CDB::_LOGSENSE * PLOGSENSE
UCHAR Reserved1[6]
Definition: cdrw_hw.h:599
UCHAR Reserved2[2]
Definition: cdrw_hw.h:434
struct _CDB::_LOAD_UNLOAD * PLOAD_UNLOAD
struct _MODE_READ_RECOVERY_PAGE MODE_READ_RECOVERY_PAGE
UCHAR VendorSpecific[20]
Definition: cdrw_hw.h:1135
struct _SCSI_EXTENDED_MESSAGE::_EXTENDED_ARGUMENTS::@806 Modify
UCHAR Reserved1
Definition: cdrw_hw.h:114
UCHAR RelativeAddress
Definition: cdrw_hw.h:113
struct _MODE_PARAMETER_BLOCK MODE_PARAMETER_BLOCK
UCHAR FileMark
Definition: cdrw_hw.h:1171
struct _TOC_SES_INFO::@811::@819 NumOfSkips
union _READ_TOC_ATIP::@825 DiscType
struct _MECHANICAL_STATUS * PMECHANICAL_STATUS
UCHAR LBA[4]
Definition: cdrw_hw.h:671
UCHAR Reserved2
Definition: cdrw_hw.h:1750
struct _CDB::_CLOSE_TRACK_SESSION::@790::@792 Fields
struct _SCSI_EXTENDED_MESSAGE * PSCSI_EXTENDED_MESSAGE
UCHAR Link
Definition: cdrw_hw.h:37
union _MODE_CD_AUDIO_CONTROL_PAGE::@902 Byte2
union _EVENT_STAT_DEV_BUSY_BLOCK::@872 Byte0
UCHAR OperationCode
Definition: cdrw_hw.h:149
TOC_SES_INFO SessionData[MAXIMUM_NUMBER_OF_SESSIONS]
Definition: cdrw_hw.h:1689
UCHAR TrackNumber
Definition: cdrw_hw.h:211
UCHAR FirstTrackNum
Definition: cdrw_hw.h:1619
UCHAR SubType
Definition: cdrw_hw.h:1740
UCHAR Control
Definition: scsi.h:702
UCHAR Control
Definition: cdrw_hw.h:1581
UCHAR FixPacketSize[4]
Definition: cdrw_hw.h:2440
UCHAR OperationCode
Definition: cdrw_hw.h:112
struct _CDB::_SEND_CUE_SHEET SEND_CUE_SHEET
struct _DVD_COPYRIGHT_DESCRIPTOR * PDVD_COPYRIGHT_DESCRIPTOR
READ_TOC_HEADER Sessions
Definition: cdrw_hw.h:1688
UCHAR OperationCode
Definition: cdrw_hw.h:451
struct _CDB::_SEND_KEY SEND_KEY
struct _CDB::_CDB6 * PCDB6
UCHAR Reserved1
Definition: cdrw_hw.h:270
struct _CDB::_RESERVE_TRACK * PRESERVE_TRACK
UCHAR SpeedRef
Definition: cdrw_hw.h:1708
struct _READ_TOC_ATIP READ_TOC_ATIP
UCHAR FormatDescriptorLength[2]
Definition: cdrw_hw.h:1909
UCHAR OperationCode
Definition: cdrw_hw.h:431
SLOT_TABLE_INFORMATION SlotTableInfo[1]
Definition: cdrw_hw.h:3179
UCHAR DiskKeyData[2048]
Definition: cdrw_hw.h:3577
UCHAR LunWPerfDescriptorCount[2]
Definition: cdrw_hw.h:3127
struct _EVENT_STAT_MEDIA_BLOCK::@868::@870 Fields
UCHAR AllocationLength[2]
Definition: cdrw_hw.h:476
struct _CDB::_ERASE10 ERASE10
UCHAR EndingMSF[3]
Definition: cdrw_hw.h:191
UCHAR Reserved2
Definition: cdrw_hw.h:119
struct _DVD_RPC_KEY * PDVD_RPC_KEY
struct _MODE_CAPABILITIES_PAGE2 * PMODE_CAPABILITIES_PAGE2
UCHAR TransferBlocks[2]
Definition: scsi.h:110
UCHAR OperationCode
Definition: cdrw_hw.h:668
UCHAR Reserved1
Definition: cdrw_hw.h:1521
struct _MODE_PHILIPS_SECTOR_TYPE_PAGE * PMODE_PHILIPS_SECTOR_TYPE_PAGE
struct _CDB::_SEND_CUE_SHEET * PSEND_CUE_SHEET
struct _CDB::_CDB12 * PCDB12
UCHAR ParameterListLength
Definition: cdrw_hw.h:346
UCHAR Reserved
Definition: scsi.h:103
struct _CDVD_KEY_HEADER * PCDVD_KEY_HEADER
struct _CDB::_GET_EVENT_STATUS * PGET_EVENT_STATUS
UCHAR MultiplicationFactor
Definition: cdrw_hw.h:2778
UCHAR BlockDescriptorLength[2]
Definition: cdrw_hw.h:2516
struct _CDVD_CHALLENGE_KEY_DATA * PCDVD_CHALLENGE_KEY_DATA
UCHAR SenseKeySpecific[3]
Definition: cdrw_hw.h:1178
struct _CDB::_MECH_STATUS MECH_STATUS
struct _CDB::_PLAY_AUDIO_MSF * PPLAY_AUDIO_MSF
UCHAR Reserved1
Definition: cdrw_hw.h:658
struct _FORMATTABLE_CAPACITY_DESCRIPTOR * PFORMATTABLE_CAPACITY_DESCRIPTOR
UCHAR Immediate
Definition: cdrw_hw.h:33
CD_TEXT_PACK_DATA Chunk0
Definition: cdrw_hw.h:1843
UCHAR OperationCode
Definition: cdrw_hw.h:780
union _EVENT_STAT_PM_BLOCK::@860 Byte0
EVENT_STAT_HEADER Header
Definition: cdrw_hw.h:2074
UCHAR AllocationLength[2]
Definition: cdrw_hw.h:334
UCHAR EndOfMedia
Definition: cdrw_hw.h:1170
UCHAR Reserved4
Definition: cdrw_hw.h:283
UCHAR Reserved1
Definition: cdrw_hw.h:301
UCHAR SubChannelSelection
Definition: cdrw_hw.h:282
UCHAR UserResetsAvailable
Definition: scsi.h:2923
struct _EVENT_STAT_DEV_BUSY_BLOCK::@872::@874 Fields
EVENT_STAT_HEADER Header
Definition: cdrw_hw.h:2195
struct _TOC_SES_INFO::@811::@820 SkipTrackAsignment
UCHAR Reserved2[6]
Definition: cdrw_hw.h:645
UCHAR LBA[4]
Definition: cdrw_hw.h:272
struct _CDB::_READ_TOC * PREAD_TOC
UCHAR RemovableMedia
Definition: cdrw_hw.h:1119
UCHAR Reserved1
Definition: scsi.h:106
UCHAR Reserved3
Definition: cdrw_hw.h:275
struct _CDB::_READ_BUFFER_CAPACITY READ_BUFFER_CAPACITY
UCHAR Reserved0
Definition: scsi.h:2038
UCHAR Reserved2
Definition: scsi.h:109
UCHAR Zero1
Definition: cdrw_hw.h:1621
UCHAR NumberOfBlocks[3]
Definition: cdrw_hw.h:2529
UCHAR Control
Definition: cdrw_hw.h:121
UCHAR SoftReset
Definition: cdrw_hw.h:1124
UCHAR Reserved0[9]
Definition: cdrw_hw.h:452
MECHANICAL_STATUS_INFORMATION_HEADER MechanicalStatusHeader
Definition: cdrw_hw.h:3178
struct _CDB::_MEDIA_REMOVAL * PMEDIA_REMOVAL
UCHAR IncludeSyncData
Definition: cdrw_hw.h:256
union _CDB::_CDB6FORMAT::@776 Byte1
READ_TOC_HEADER Sessions
Definition: cdrw_hw.h:1541
struct _EVENT_STAT_HEADER EVENT_STAT_HEADER
UCHAR Y_value
Definition: cdrw_hw.h:1776
struct _MODE_PARAMETER_BLOCK * PMODE_PARAMETER_BLOCK
UCHAR DeviceSpecificParameter
Definition: cdrw_hw.h:2507
struct _MODE_WRITE_PARAMS_PAGE::@888::@893 Fields
UCHAR CurrentWriteSpeed[2]
Definition: cdrw_hw.h:3114
struct _READ_CAPACITY_DATA * PREAD_CAPACITY_DATA
_Reserved_ PVOID Reserved
Definition: winddi.h:3974
struct _READ_TOC_HEADER * PREAD_TOC_HEADER
struct _CDB::_READ_FORMAT_CAPACITIES READ_FORMAT_CAPACITIES
UCHAR Reserved1[5]
Definition: scsi.h:699
UCHAR Reserved2_2
Definition: scsi.h:397
struct _CDB::_CLOSE_TRACK_SESSION CLOSE_TRACK_SESSION
struct _CDB::_CDB12 CDB12
struct _MODE_CAPABILITIES_PAGE2 MODE_CAPABILITIES_PAGE2
UCHAR DeviceTypeQualifier
Definition: cdrw_hw.h:1117
UCHAR Lun
Definition: cdrw_hw.h:117
struct _CDB::_START_STOP START_STOP
struct _CDB::_READ_FORMAT_CAPACITIES::@782::@783 Fields
UCHAR Information[4]
Definition: cdrw_hw.h:1172
UCHAR P_factor
Definition: cdrw_hw.h:1777
UCHAR WritingPower
Definition: cdrw_hw.h:1710
UCHAR Reserved1
Definition: cdrw_hw.h:365
struct _READ_TOC_HEADER READ_TOC_HEADER
struct _INQUIRYDATA INQUIRYDATA
UCHAR OperationCode
Definition: scsi.h:102
struct _CDVD_TITLE_KEY_HEADER CDVD_TITLE_KEY_HEADER
union _EVENT_STAT_PM_BLOCK::@861 Byte1
UCHAR Synchronous
Definition: cdrw_hw.h:1128
UCHAR Flag
Definition: cdrw_hw.h:38
struct _CDB::_MODE_SELECT MODE_SELECT
union _READ_TOC_ATIP::@828 ErasePower
struct _CDB::_MODE_SENSE MODE_SENSE
struct _SCSI_EXTENDED_MESSAGE::_EXTENDED_ARGUMENTS::@807 Synchronous
struct _CDB::_READ_CD_MSF READ_CD_MSF
UCHAR OperationCode
Definition: cdrw_hw.h:240
struct _TOC_SES_INFO::@811::@816 StartPositionOfLeadOut
struct _FORMAT_LIST_HEADER::@837::@838 Fields
UCHAR Reserved2[2]
Definition: cdrw_hw.h:345
UCHAR Reserved2[3]
Definition: cdrw_hw.h:493
union _MODE_FAIL_REPORT_PAGE::@907 Byte3
UCHAR MaxLeadOut_MSF[3]
Definition: cdrw_hw.h:1656
UCHAR ExpectedSectorType
Definition: cdrw_hw.h:269
UCHAR AdditionalSenseCodeQualifier
Definition: cdrw_hw.h:1176
struct _TOC_SES_INFO::@811::@822 AdditionalAreaInATIP
UCHAR Speed[2]
Definition: cdrw_hw.h:1868
UCHAR End_MSF[3]
Definition: cdrw_hw.h:1643
struct _CDB::_READ_TOC READ_TOC
UCHAR PageCode
Definition: cdrw_hw.h:367
UCHAR Lun
Definition: scsi.h:107
UCHAR AllocationLength
Definition: cdrw_hw.h:71
struct _CDB::_ERASE * PERASE
UCHAR PPCBit
Definition: cdrw_hw.h:364
struct _TRACK_INFO_BLOCK TRACK_INFO_BLOCK
UCHAR Reserved[2]
Definition: cdrw_hw.h:1699
UCHAR DiskId[4]
Definition: cdrw_hw.h:2332
UCHAR Bytes[7]
Definition: cdrw_hw.h:1681
struct _DVD_RPC_KEY DVD_RPC_KEY
struct _CDB::_LOGSENSE LOGSENSE
UCHAR OperationCode
Definition: cdrw_hw.h:78
UCHAR DataLength[2]
Definition: cdrw_hw.h:2380
struct _INQUIRYDATA * PINQUIRYDATA
UCHAR Reserved2[3]
Definition: scsi.h:533
EVENT_STAT_HEADER Header
Definition: cdrw_hw.h:2115
struct _TOC_SES_INFO::@811::@817 SkipInterval
UCHAR MinSpeedCVL
Definition: cdrw_hw.h:1764
struct _MODE_TIMEOUT_AND_PROTECT_PAGE * PMODE_TIMEOUT_AND_PROTECT_PAGE
UCHAR LeadOut_MSF[3]
Definition: cdrw_hw.h:1749
struct _MODE_WRITE_PARAMS_PAGE::@892 SubHeader
struct _LUN_WRITE_PERF_DESC * PLUN_WRITE_PERF_DESC
struct _EVENT_STAT_DEV_BUSY_BLOCK * PEVENT_STAT_DEV_BUSY_BLOCK
UCHAR Reserved0[7]
Definition: cdrw_hw.h:445
TOC_TRACK_INFO TrackData[MAXIMUM_NUMBER_OF_TRACKS+1]
Definition: cdrw_hw.h:1535
UCHAR Zero
Definition: cdrw_hw.h:1603
struct _MODE_FAIL_REPORT_PAGE * PMODE_FAIL_REPORT_PAGE
UCHAR Reserved2[3]
Definition: cdrw_hw.h:381
struct _DISC_INFO_BLOCK * PDISC_INFO_BLOCK
struct _MODE_POWER_CONDITION_PAGE * PMODE_POWER_CONDITION_PAGE
struct _FORMAT_UNIT_PARAMETER_LIST * PFORMAT_UNIT_PARAMETER_LIST
union _MODE_WRITE_PARAMS_PAGE::@890 Byte4
struct _CDB::_SYNCHRONIZE_CACHE SYNCHRONIZE_CACHE
UCHAR Reserved1
Definition: cdrw_hw.h:378
uint64_t ULONGLONG
Definition: typedefs.h:65
struct _CDB::_SERVICE_ACTION16 * PSERVICE_ACTION16
struct _MODE_READ_WRITE_RECOVERY_PAGE * PMODE_READ_WRITE_RECOVERY_PAGE
UCHAR MinimumPrefetch[2]
Definition: cdrw_hw.h:2786
UCHAR IntervalTimer[4]
Definition: cdrw_hw.h:2921
UCHAR OperationCode
Definition: cdrw_hw.h:95
UCHAR LeadIn_MSF[3]
Definition: cdrw_hw.h:1747
UCHAR ManufacturerResetsAvailable
Definition: scsi.h:2924
UCHAR Control
Definition: cdrw_hw.h:84
struct _READ_TOC_ATIP::@823::@829 Fields
UCHAR OperationCode
Definition: cdrw_hw.h:657
UCHAR SUnits_per_MUnit[2]
Definition: cdrw_hw.h:2812
UCHAR Reserved4[3]
Definition: cdrw_hw.h:438
UCHAR ReadAheadLBA[4]
Definition: cdrw_hw.h:742
UCHAR OperationCode
Definition: cdrw_hw.h:444
struct _MODE_WRITE_PARAMS_PAGE_3 MODE_WRITE_PARAMS_PAGE_3
struct _REPORT_LUNS_INFO_HDR * PREPORT_LUNS_INFO_HDR
UCHAR FormatCode
Definition: cdrw_hw.h:99
UCHAR A2_value[3]
Definition: cdrw_hw.h:1796
union _CDB::_CLOSE_TRACK_SESSION::@790 Byte1
UCHAR Reserved2[6]
Definition: cdrw_hw.h:133
UCHAR DiskBarCode[8]
Definition: cdrw_hw.h:2335
struct _EVENT_STAT_PM_BLOCK * PEVENT_STAT_PM_BLOCK
struct _CDB::_CDB6INQUIRY * PCDB6INQUIRY
struct _CDB::_BLANK_MEDIA::@796::@797 Fields
UCHAR Versions
Definition: cdrw_hw.h:1120
UCHAR Reserved0
Definition: cdrw_hw.h:1746
UCHAR Reserved4[2]
Definition: cdrw_hw.h:210
struct _CDVD_KEY_HEADER CDVD_KEY_HEADER
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:101
UCHAR ParameterListLength[2]
Definition: cdrw_hw.h:661
union _MODE_PHILIPS_SECTOR_TYPE_PAGE::@912 Byte4
struct _CDB::_SUBCHANNEL * PSUBCHANNEL
UCHAR SkipNum[7]
Definition: cdrw_hw.h:1669
struct _TRACK_INFO_BLOCK * PTRACK_INFO_BLOCK
struct _CDB::_SET_READ_AHEAD * PSET_READ_AHEAD
union _SCSI_EXTENDED_MESSAGE::_EXTENDED_ARGUMENTS ExtendedArguments
UCHAR OperationCode
Definition: cdrw_hw.h:293
struct _CDVD_REPORT_ASF_DATA CDVD_REPORT_ASF_DATA
UCHAR TransferBlock[2]
Definition: cdrw_hw.h:822
struct _CD_TEXT_PACK_DATA * PCD_TEXT_PACK_DATA
struct _TOC_SES_INFO::@811::@818 StartPositionOfNextProgramArea
UCHAR DiscType
Definition: cdrw_hw.h:1620
READ_TOC_HEADER Tracks
Definition: cdrw_hw.h:1534
UCHAR Reserved2[2]
Definition: cdrw_hw.h:2448
struct _CDB::_CDB6READWRITE CDB6READWRITE
UCHAR BlockLength[3]
Definition: cdrw_hw.h:2531
struct _CDB::_BLANK_MEDIA BLANK_MEDIA
struct _MODE_WRITE_PARAMS_PAGE MODE_WRITE_PARAMS_PAGE
UCHAR Reserved
Definition: cdrw_hw.h:1590
struct _CDB::_LOCK_DOOR LOCK_DOOR
UCHAR OperationCode
Definition: cdrw_hw.h:201
UCHAR Reserved
Definition: cdrw_hw.h:1517
unsigned char UCHAR
Definition: xmlstorage.h:181
struct _CDVD_TITLE_KEY_HEADER * PCDVD_TITLE_KEY_HEADER
UCHAR ChallengeKeyValue[10]
Definition: cdrw_hw.h:3594
UCHAR Reserved2[2]
Definition: cdrw_hw.h:404
UCHAR AllocationLength[2]
Definition: cdrw_hw.h:509
struct _TOC_SES_INFO::@811::@813 StartPositionOfTrack
EVENT_STAT_HEADER Header
Definition: cdrw_hw.h:2233
UCHAR Reserved2
Definition: cdrw_hw.h:369
UCHAR Reserved
Definition: cdrw_hw.h:1168
union _EVENT_STAT_DEV_BUSY_BLOCK::@873 Byte1
UCHAR TrackNum
Definition: cdrw_hw.h:1520
UCHAR IncludeSyncData
Definition: cdrw_hw.h:280
struct _CDB::_SET_READ_AHEAD SET_READ_AHEAD
UCHAR Reserved1[3]
Definition: