30
#ifndef _NTSCSI_USER_MODE_
34
#define NOTIFICATION_OPERATIONAL_CHANGE_CLASS_MASK 0x02
35
#define NOTIFICATION_POWER_MANAGEMENT_CLASS_MASK 0x04
36
#define NOTIFICATION_EXTERNAL_REQUEST_CLASS_MASK 0x08
37
#define NOTIFICATION_MEDIA_STATUS_CLASS_MASK 0x10
38
#define NOTIFICATION_MULTI_HOST_CLASS_MASK 0x20
39
#define NOTIFICATION_DEVICE_BUSY_CLASS_MASK 0x40
42
#define NOTIFICATION_NO_CLASS_EVENTS 0x0
43
#define NOTIFICATION_OPERATIONAL_CHANGE_CLASS_EVENTS 0x1
44
#define NOTIFICATION_POWER_MANAGEMENT_CLASS_EVENTS 0x2
45
#define NOTIFICATION_EXTERNAL_REQUEST_CLASS_EVENTS 0x3
46
#define NOTIFICATION_MEDIA_STATUS_CLASS_EVENTS 0x4
47
#define NOTIFICATION_MULTI_HOST_CLASS_EVENTS 0x5
48
#define NOTIFICATION_DEVICE_BUSY_CLASS_EVENTS 0x6
50
#define NOTIFICATION_OPERATIONAL_EVENT_NO_CHANGE 0x0
51
#define NOTIFICATION_OPERATIONAL_EVENT_CHANGE_REQUESTED 0x1
52
#define NOTIFICATION_OPERATIONAL_EVENT_CHANGE_OCCURRED 0x2
54
#define NOTIFICATION_OPERATIONAL_STATUS_AVAILABLE 0x0
55
#define NOTIFICATION_OPERATIONAL_STATUS_TEMPORARY_BUSY 0x1
56
#define NOTIFICATION_OPERATIONAL_STATUS_EXTENDED_BUSY 0x2
58
#define NOTIFICATION_OPERATIONAL_OPCODE_NONE 0x0
59
#define NOTIFICATION_OPERATIONAL_OPCODE_FEATURE_CHANGE 0x1
60
#define NOTIFICATION_OPERATIONAL_OPCODE_FEATURE_ADDED 0x2
61
#define NOTIFICATION_OPERATIONAL_OPCODE_UNIT_RESET 0x3
62
#define NOTIFICATION_OPERATIONAL_OPCODE_FIRMWARE_CHANGED 0x4
63
#define NOTIFICATION_OPERATIONAL_OPCODE_INQUIRY_CHANGED 0x5
65
#define NOTIFICATION_POWER_EVENT_NO_CHANGE 0x0
66
#define NOTIFICATION_POWER_EVENT_CHANGE_SUCCEEDED 0x1
67
#define NOTIFICATION_POWER_EVENT_CHANGE_FAILED 0x2
69
#define NOTIFICATION_POWER_STATUS_ACTIVE 0x1
70
#define NOTIFICATION_POWER_STATUS_IDLE 0x2
71
#define NOTIFICATION_POWER_STATUS_STANDBY 0x3
72
#define NOTIFICATION_POWER_STATUS_SLEEP 0x4
74
#define NOTIFICATION_MEDIA_EVENT_NO_EVENT 0x0
75
#define NOTIFICATION_EXTERNAL_EVENT_NO_CHANGE 0x0
76
#define NOTIFICATION_EXTERNAL_EVENT_BUTTON_DOWN 0x1
77
#define NOTIFICATION_EXTERNAL_EVENT_BUTTON_UP 0x2
78
#define NOTIFICATION_EXTERNAL_EVENT_EXTERNAL 0x3
80
#define NOTIFICATION_EXTERNAL_STATUS_READY 0x0
81
#define NOTIFICATION_EXTERNAL_STATUS_PREVENT 0x1
83
#define NOTIFICATION_EXTERNAL_REQUEST_NONE 0x0000
84
#define NOTIFICATION_EXTERNAL_REQUEST_QUEUE_OVERRUN 0x0001
85
#define NOTIFICATION_EXTERNAL_REQUEST_PLAY 0x0101
86
#define NOTIFICATION_EXTERNAL_REQUEST_REWIND_BACK 0x0102
87
#define NOTIFICATION_EXTERNAL_REQUEST_FAST_FORWARD 0x0103
88
#define NOTIFICATION_EXTERNAL_REQUEST_PAUSE 0x0104
89
#define NOTIFICATION_EXTERNAL_REQUEST_STOP 0x0106
90
#define NOTIFICATION_EXTERNAL_REQUEST_ASCII_LOW 0x0200
91
#define NOTIFICATION_EXTERNAL_REQUEST_ASCII_HIGH 0x02ff
93
#define NOTIFICATION_MEDIA_EVENT_NO_CHANGE 0x0
94
#define NOTIFICATION_MEDIA_EVENT_EJECT_REQUEST 0x1
95
#define NOTIFICATION_MEDIA_EVENT_NEW_MEDIA 0x2
96
#define NOTIFICATION_MEDIA_EVENT_MEDIA_REMOVAL 0x3
97
#define NOTIFICATION_MEDIA_EVENT_MEDIA_CHANGE 0x4
99
#define NOTIFICATION_BUSY_EVENT_NO_EVENT 0x0
100
#define NOTIFICATION_MULTI_HOST_EVENT_NO_CHANGE 0x0
101
#define NOTIFICATION_MULTI_HOST_EVENT_CONTROL_REQUEST 0x1
102
#define NOTIFICATION_MULTI_HOST_EVENT_CONTROL_GRANT 0x2
103
#define NOTIFICATION_MULTI_HOST_EVENT_CONTROL_RELEASE 0x3
105
#define NOTIFICATION_MULTI_HOST_STATUS_READY 0x0
106
#define NOTIFICATION_MULTI_HOST_STATUS_PREVENT 0x1
108
#define NOTIFICATION_MULTI_HOST_PRIORITY_NO_REQUESTS 0x0
109
#define NOTIFICATION_MULTI_HOST_PRIORITY_LOW 0x1
110
#define NOTIFICATION_MULTI_HOST_PRIORITY_MEDIUM 0x2
111
#define NOTIFICATION_MULTI_HOST_PRIORITY_HIGH 0x3
113
#define NOTIFICATION_BUSY_EVENT_NO_EVENT 0x0
114
#define NOTIFICATION_BUSY_EVENT_NO_CHANGE 0x0
115
#define NOTIFICATION_BUSY_EVENT_BUSY 0x1
117
#define NOTIFICATION_BUSY_STATUS_NO_EVENT 0x0
118
#define NOTIFICATION_BUSY_STATUS_POWER 0x1
119
#define NOTIFICATION_BUSY_STATUS_IMMEDIATE 0x2
120
#define NOTIFICATION_BUSY_STATUS_DEFERRED 0x3
122
#define DVD_FORMAT_LEAD_IN 0x00
123
#define DVD_FORMAT_COPYRIGHT 0x01
124
#define DVD_FORMAT_DISK_KEY 0x02
125
#define DVD_FORMAT_BCA 0x03
126
#define DVD_FORMAT_MANUFACTURING 0x04
128
#define DVD_REPORT_AGID 0x00
129
#define DVD_CHALLENGE_KEY 0x01
130
#define DVD_KEY_1 0x02
131
#define DVD_KEY_2 0x03
132
#define DVD_TITLE_KEY 0x04
133
#define DVD_REPORT_ASF 0x05
134
#define DVD_INVALIDATE_AGID 0x3F
136
#define BLANK_FULL 0x0
137
#define BLANK_MINIMAL 0x1
138
#define BLANK_TRACK 0x2
139
#define BLANK_UNRESERVE_TRACK 0x3
140
#define BLANK_TAIL 0x4
141
#define BLANK_UNCLOSE_SESSION 0x5
142
#define BLANK_SESSION 0x6
144
#define CD_EXPECTED_SECTOR_ANY 0x0
145
#define CD_EXPECTED_SECTOR_CDDA 0x1
146
#define CD_EXPECTED_SECTOR_MODE1 0x2
147
#define CD_EXPECTED_SECTOR_MODE2 0x3
148
#define CD_EXPECTED_SECTOR_MODE2_FORM1 0x4
149
#define CD_EXPECTED_SECTOR_MODE2_FORM2 0x5
151
#define DISK_STATUS_EMPTY 0x00
152
#define DISK_STATUS_INCOMPLETE 0x01
153
#define DISK_STATUS_COMPLETE 0x02
154
#define DISK_STATUS_OTHERS 0x03
156
#define LAST_SESSION_EMPTY 0x00
157
#define LAST_SESSION_INCOMPLETE 0x01
158
#define LAST_SESSION_RESERVED_DAMAGED 0x02
159
#define LAST_SESSION_COMPLETE 0x03
161
#define DISK_TYPE_CDDA 0x00
162
#define DISK_TYPE_CDI 0x10
163
#define DISK_TYPE_XA 0x20
164
#define DISK_TYPE_UNDEFINED 0xFF
166
#define DISC_BGFORMAT_STATE_NONE 0x0
167
#define DISC_BGFORMAT_STATE_INCOMPLETE 0x1
168
#define DISC_BGFORMAT_STATE_RUNNING 0x2
169
#define DISC_BGFORMAT_STATE_COMPLETE 0x3
171
#define DATA_BLOCK_MODE0 0x0
172
#define DATA_BLOCK_MODE1 0x1
173
#define DATA_BLOCK_MODE2 0x2
175
/* READ_TOC formats */
176
#define READ_TOC_FORMAT_TOC 0x00
177
#define READ_TOC_FORMAT_SESSION 0x01
178
#define READ_TOC_FORMAT_FULL_TOC 0x02
179
#define READ_TOC_FORMAT_PMA 0x03
180
#define READ_TOC_FORMAT_ATIP 0x04
182
#define CDB6GENERIC_LENGTH 6
183
#define CDB10GENERIC_LENGTH 10
184
#define CDB12GENERIC_LENGTH 12
189
/* Mode Sense/Select page constants */
190
#define MODE_PAGE_VENDOR_SPECIFIC 0x00
191
#define MODE_PAGE_ERROR_RECOVERY 0x01
192
#define MODE_PAGE_DISCONNECT 0x02
193
#define MODE_PAGE_FORMAT_DEVICE 0x03
194
#define MODE_PAGE_MRW 0x03
195
#define MODE_PAGE_RIGID_GEOMETRY 0x04
196
#define MODE_PAGE_FLEXIBILE 0x05
197
#define MODE_PAGE_WRITE_PARAMETERS 0x05
198
#define MODE_PAGE_VERIFY_ERROR 0x07
199
#define MODE_PAGE_CACHING 0x08
200
#define MODE_PAGE_PERIPHERAL 0x09
201
#define MODE_PAGE_CONTROL 0x0A
202
#define MODE_PAGE_MEDIUM_TYPES 0x0B
203
#define MODE_PAGE_NOTCH_PARTITION 0x0C
204
#define MODE_PAGE_CD_AUDIO_CONTROL 0x0E
205
#define MODE_PAGE_DATA_COMPRESS 0x0F
206
#define MODE_PAGE_DEVICE_CONFIG 0x10
207
#define MODE_PAGE_XOR_CONTROL 0x10
208
#define MODE_PAGE_MEDIUM_PARTITION 0x11
209
#define MODE_PAGE_ENCLOSURE_SERVICES_MANAGEMENT 0x14
210
#define MODE_PAGE_EXTENDED 0x15
211
#define MODE_PAGE_EXTENDED_DEVICE_SPECIFIC 0x16
212
#define MODE_PAGE_CDVD_FEATURE_SET 0x18
213
#define MODE_PAGE_PROTOCOL_SPECIFIC_LUN 0x18
214
#define MODE_PAGE_PROTOCOL_SPECIFIC_PORT 0x19
215
#define MODE_PAGE_POWER_CONDITION 0x1A
216
#define MODE_PAGE_LUN_MAPPING 0x1B
217
#define MODE_PAGE_FAULT_REPORTING 0x1C
218
#define MODE_PAGE_CDVD_INACTIVITY 0x1D
219
#define MODE_PAGE_ELEMENT_ADDRESS 0x1D
220
#define MODE_PAGE_TRANSPORT_GEOMETRY 0x1E
221
#define MODE_PAGE_DEVICE_CAPABILITIES 0x1F
222
#define MODE_PAGE_CAPABILITIES 0x2A
224
#define MODE_SENSE_RETURN_ALL 0x3f
226
#define MODE_SENSE_CURRENT_VALUES 0x00
227
#define MODE_SENSE_CHANGEABLE_VALUES 0x40
228
#define MODE_SENSE_DEFAULT_VAULES 0x80
229
#define MODE_SENSE_SAVED_VALUES 0xc0
231
/* SCSI CDB operation codes */
232
#define SCSIOP_TEST_UNIT_READY 0x00
233
#define SCSIOP_REZERO_UNIT 0x01
234
#define SCSIOP_REWIND 0x01
235
#define SCSIOP_REQUEST_BLOCK_ADDR 0x02
236
#define SCSIOP_REQUEST_SENSE 0x03
237
#define SCSIOP_FORMAT_UNIT 0x04
238
#define SCSIOP_READ_BLOCK_LIMITS 0x05
239
#define SCSIOP_REASSIGN_BLOCKS 0x07
240
#define SCSIOP_INIT_ELEMENT_STATUS 0x07
241
#define SCSIOP_READ6 0x08
242
#define SCSIOP_RECEIVE 0x08
243
#define SCSIOP_WRITE6 0x0A
244
#define SCSIOP_PRINT 0x0A
245
#define SCSIOP_SEND 0x0A
246
#define SCSIOP_SEEK6 0x0B
247
#define SCSIOP_TRACK_SELECT 0x0B
248
#define SCSIOP_SLEW_PRINT 0x0B
249
#define SCSIOP_SET_CAPACITY 0x0B
250
#define SCSIOP_SEEK_BLOCK 0x0C
251
#define SCSIOP_PARTITION 0x0D
252
#define SCSIOP_READ_REVERSE 0x0F
253
#define SCSIOP_WRITE_FILEMARKS 0x10
254
#define SCSIOP_FLUSH_BUFFER 0x10
255
#define SCSIOP_SPACE 0x11
256
#define SCSIOP_INQUIRY 0x12
257
#define SCSIOP_VERIFY6 0x13
258
#define SCSIOP_RECOVER_BUF_DATA 0x14
259
#define SCSIOP_MODE_SELECT 0x15
260
#define SCSIOP_RESERVE_UNIT 0x16
261
#define SCSIOP_RELEASE_UNIT 0x17
262
#define SCSIOP_COPY 0x18
263
#define SCSIOP_ERASE 0x19
264
#define SCSIOP_MODE_SENSE 0x1A
265
#define SCSIOP_START_STOP_UNIT 0x1B
266
#define SCSIOP_STOP_PRINT 0x1B
267
#define SCSIOP_LOAD_UNLOAD 0x1B
268
#define SCSIOP_RECEIVE_DIAGNOSTIC 0x1C
269
#define SCSIOP_SEND_DIAGNOSTIC 0x1D
270
#define SCSIOP_MEDIUM_REMOVAL 0x1E
272
#define SCSIOP_READ_FORMATTED_CAPACITY 0x23
273
#define SCSIOP_READ_CAPACITY 0x25
274
#define SCSIOP_READ 0x28
275
#define SCSIOP_WRITE 0x2A
276
#define SCSIOP_SEEK 0x2B
277
#define SCSIOP_LOCATE 0x2B
278
#define SCSIOP_POSITION_TO_ELEMENT 0x2B
279
#define SCSIOP_WRITE_VERIFY 0x2E
280
#define SCSIOP_VERIFY 0x2F
281
#define SCSIOP_SEARCH_DATA_HIGH 0x30
282
#define SCSIOP_SEARCH_DATA_EQUAL 0x31
283
#define SCSIOP_SEARCH_DATA_LOW 0x32
284
#define SCSIOP_SET_LIMITS 0x33
285
#define SCSIOP_READ_POSITION 0x34
286
#define SCSIOP_SYNCHRONIZE_CACHE 0x35
287
#define SCSIOP_COMPARE 0x39
288
#define SCSIOP_COPY_COMPARE 0x3A
289
#define SCSIOP_WRITE_DATA_BUFF 0x3B
290
#define SCSIOP_READ_DATA_BUFF 0x3C
291
#define SCSIOP_WRITE_LONG 0x3F
292
#define SCSIOP_CHANGE_DEFINITION 0x40
293
#define SCSIOP_WRITE_SAME 0x41
294
#define SCSIOP_READ_SUB_CHANNEL 0x42
295
#define SCSIOP_READ_TOC 0x43
296
#define SCSIOP_READ_HEADER 0x44
297
#define SCSIOP_REPORT_DENSITY_SUPPORT 0x44
298
#define SCSIOP_PLAY_AUDIO 0x45
299
#define SCSIOP_GET_CONFIGURATION 0x46
300
#define SCSIOP_PLAY_AUDIO_MSF 0x47
301
#define SCSIOP_PLAY_TRACK_INDEX 0x48
302
#define SCSIOP_PLAY_TRACK_RELATIVE 0x49
303
#define SCSIOP_GET_EVENT_STATUS 0x4A
304
#define SCSIOP_PAUSE_RESUME 0x4B
305
#define SCSIOP_LOG_SELECT 0x4C
306
#define SCSIOP_LOG_SENSE 0x4D
307
#define SCSIOP_STOP_PLAY_SCAN 0x4E
308
#define SCSIOP_XDWRITE 0x50
309
#define SCSIOP_XPWRITE 0x51
310
#define SCSIOP_READ_DISK_INFORMATION 0x51
311
#define SCSIOP_READ_DISC_INFORMATION 0x51
312
#define SCSIOP_READ_TRACK_INFORMATION 0x52
313
#define SCSIOP_XDWRITE_READ 0x53
314
#define SCSIOP_RESERVE_TRACK_RZONE 0x53
315
#define SCSIOP_SEND_OPC_INFORMATION 0x54
316
#define SCSIOP_MODE_SELECT10 0x55
317
#define SCSIOP_RESERVE_UNIT10 0x56
318
#define SCSIOP_RESERVE_ELEMENT 0x56
319
#define SCSIOP_RELEASE_UNIT10 0x57
320
#define SCSIOP_RELEASE_ELEMENT 0x57
321
#define SCSIOP_REPAIR_TRACK 0x58
322
#define SCSIOP_MODE_SENSE10 0x5A
323
#define SCSIOP_CLOSE_TRACK_SESSION 0x5B
324
#define SCSIOP_READ_BUFFER_CAPACITY 0x5C
325
#define SCSIOP_SEND_CUE_SHEET 0x5D
326
#define SCSIOP_PERSISTENT_RESERVE_IN 0x5E
327
#define SCSIOP_PERSISTENT_RESERVE_OUT 0x5F
329
#define SCSIOP_REPORT_LUNS 0xA0
330
#define SCSIOP_BLANK 0xA1
331
#define SCSIOP_ATA_PASSTHROUGH12 0xA1
332
#define SCSIOP_SEND_EVENT 0xA2
333
#define SCSIOP_SEND_KEY 0xA3
334
#define SCSIOP_MAINTENANCE_IN 0xA3
335
#define SCSIOP_REPORT_KEY 0xA4
336
#define SCSIOP_MAINTENANCE_OUT 0xA4
337
#define SCSIOP_MOVE_MEDIUM 0xA5
338
#define SCSIOP_LOAD_UNLOAD_SLOT 0xA6
339
#define SCSIOP_EXCHANGE_MEDIUM 0xA6
340
#define SCSIOP_SET_READ_AHEAD 0xA7
341
#define SCSIOP_MOVE_MEDIUM_ATTACHED 0xA7
342
#define SCSIOP_READ12 0xA8
343
#define SCSIOP_GET_MESSAGE 0xA8
344
#define SCSIOP_SERVICE_ACTION_OUT12 0xA9
345
#define SCSIOP_WRITE12 0xAA
346
#define SCSIOP_SEND_MESSAGE 0xAB
347
#define SCSIOP_SERVICE_ACTION_IN12 0xAB
348
#define SCSIOP_GET_PERFORMANCE 0xAC
349
#define SCSIOP_READ_DVD_STRUCTURE 0xAD
350
#define SCSIOP_WRITE_VERIFY12 0xAE
351
#define SCSIOP_VERIFY12 0xAF
352
#define SCSIOP_SEARCH_DATA_HIGH12 0xB0
353
#define SCSIOP_SEARCH_DATA_EQUAL12 0xB1
354
#define SCSIOP_SEARCH_DATA_LOW12 0xB2
355
#define SCSIOP_SET_LIMITS12 0xB3
356
#define SCSIOP_READ_ELEMENT_STATUS_ATTACHED 0xB4
357
#define SCSIOP_REQUEST_VOL_ELEMENT 0xB5
358
#define SCSIOP_SEND_VOLUME_TAG 0xB6
359
#define SCSIOP_SET_STREAMING 0xB6
360
#define SCSIOP_READ_DEFECT_DATA 0xB7
361
#define SCSIOP_READ_ELEMENT_STATUS 0xB8
362
#define SCSIOP_READ_CD_MSF 0xB9
363
#define SCSIOP_SCAN_CD 0xBA
364
#define SCSIOP_REDUNDANCY_GROUP_IN 0xBA
365
#define SCSIOP_SET_CD_SPEED 0xBB
366
#define SCSIOP_REDUNDANCY_GROUP_OUT 0xBB
367
#define SCSIOP_PLAY_CD 0xBC
368
#define SCSIOP_SPARE_IN 0xBC
369
#define SCSIOP_MECHANISM_STATUS 0xBD
370
#define SCSIOP_SPARE_OUT 0xBD
371
#define SCSIOP_READ_CD 0xBE
372
#define SCSIOP_VOLUME_SET_IN 0xBE
373
#define SCSIOP_SEND_DVD_STRUCTURE 0xBF
374
#define SCSIOP_VOLUME_SET_OUT 0xBF
375
#define SCSIOP_INIT_ELEMENT_RANGE 0xE7
377
#define SCSIOP_XDWRITE_EXTENDED16 0x80
378
#define SCSIOP_WRITE_FILEMARKS16 0x80
379
#define SCSIOP_REBUILD16 0x81
380
#define SCSIOP_READ_REVERSE16 0x81
381
#define SCSIOP_REGENERATE16 0x82
382
#define SCSIOP_EXTENDED_COPY 0x83
383
#define SCSIOP_RECEIVE_COPY_RESULTS 0x84
384
#define SCSIOP_ATA_PASSTHROUGH16 0x85
385
#define SCSIOP_ACCESS_CONTROL_IN 0x86
386
#define SCSIOP_ACCESS_CONTROL_OUT 0x87
387
#define SCSIOP_READ16 0x88
388
#define SCSIOP_WRITE16 0x8A
389
#define SCSIOP_READ_ATTRIBUTES 0x8C
390
#define SCSIOP_WRITE_ATTRIBUTES 0x8D
391
#define SCSIOP_WRITE_VERIFY16 0x8E
392
#define SCSIOP_VERIFY16 0x8F
393
#define SCSIOP_PREFETCH16 0x90
394
#define SCSIOP_SYNCHRONIZE_CACHE16 0x91
395
#define SCSIOP_SPACE16 0x91
396
#define SCSIOP_LOCK_UNLOCK_CACHE16 0x92
397
#define SCSIOP_LOCATE16 0x92
398
#define SCSIOP_WRITE_SAME16 0x93
399
#define SCSIOP_ERASE16 0x93
400
#define SCSIOP_READ_CAPACITY16 0x9E
401
#define SCSIOP_SERVICE_ACTION_IN16 0x9E
402
#define SCSIOP_SERVICE_ACTION_OUT16 0x9F
404
#define CDB_RETURN_ON_COMPLETION 0
405
#define CDB_RETURN_IMMEDIATE 1
407
#define CDB_FORCE_MEDIA_ACCESS 0x08
409
#define SCSIOP_DENON_EJECT_DISC 0xE6
410
#define SCSIOP_DENON_STOP_AUDIO 0xE7
411
#define SCSIOP_DENON_PLAY_AUDIO 0xE8
412
#define SCSIOP_DENON_READ_TOC 0xE9
413
#define SCSIOP_DENON_READ_SUBCODE 0xEB
415
#define SCSIMESS_ABORT 0x06
416
#define SCSIMESS_ABORT_WITH_TAG 0x0D
417
#define SCSIMESS_BUS_DEVICE_RESET 0X0C
418
#define SCSIMESS_CLEAR_QUEUE 0X0E
419
#define SCSIMESS_COMMAND_COMPLETE 0X00
420
#define SCSIMESS_DISCONNECT 0X04
421
#define SCSIMESS_EXTENDED_MESSAGE 0X01
422
#define SCSIMESS_IDENTIFY 0X80
423
#define SCSIMESS_IDENTIFY_WITH_DISCON 0XC0
424
#define SCSIMESS_IGNORE_WIDE_RESIDUE 0X23
425
#define SCSIMESS_INITIATE_RECOVERY 0X0F
426
#define SCSIMESS_INIT_DETECTED_ERROR 0X05
427
#define SCSIMESS_LINK_CMD_COMP 0X0A
428
#define SCSIMESS_LINK_CMD_COMP_W_FLAG 0X0B
429
#define SCSIMESS_MESS_PARITY_ERROR 0X09
430
#define SCSIMESS_MESSAGE_REJECT 0X07
431
#define SCSIMESS_NO_OPERATION 0X08
432
#define SCSIMESS_HEAD_OF_QUEUE_TAG 0X21
433
#define SCSIMESS_ORDERED_QUEUE_TAG 0X22
434
#define SCSIMESS_SIMPLE_QUEUE_TAG 0X20
435
#define SCSIMESS_RELEASE_RECOVERY 0X10
436
#define SCSIMESS_RESTORE_POINTERS 0X03
437
#define SCSIMESS_SAVE_DATA_POINTER 0X02
438
#define SCSIMESS_TERMINATE_IO_PROCESS 0X11
440
#define SCSIMESS_MODIFY_DATA_POINTER 0X00
441
#define SCSIMESS_SYNCHRONOUS_DATA_REQ 0X01
442
#define SCSIMESS_WIDE_DATA_REQUEST 0X03
444
#define SCSIMESS_MODIFY_DATA_LENGTH 5
445
#define SCSIMESS_SYNCH_DATA_LENGTH 3
446
#define SCSIMESS_WIDE_DATA_LENGTH 2
448
#define CDB_INQUIRY_EVPD 0x01
450
#define LUN0_FORMAT_SAVING_DEFECT_LIST 0
451
#define USE_DEFAULTMSB 0
452
#define USE_DEFAULTLSB 0
454
#define START_UNIT_CODE 0x01
455
#define STOP_UNIT_CODE 0x00
457
/* INQUIRYDATA.DeviceType constants */
458
#define DIRECT_ACCESS_DEVICE 0x00
459
#define SEQUENTIAL_ACCESS_DEVICE 0x01
460
#define PRINTER_DEVICE 0x02
461
#define PROCESSOR_DEVICE 0x03
462
#define WRITE_ONCE_READ_MULTIPLE_DEVICE 0x04
463
#define READ_ONLY_DIRECT_ACCESS_DEVICE 0x05
464
#define SCANNER_DEVICE 0x06
465
#define OPTICAL_DEVICE 0x07
466
#define MEDIUM_CHANGER 0x08
467
#define COMMUNICATION_DEVICE 0x09
468
#define ARRAY_CONTROLLER_DEVICE 0x0C
469
#define SCSI_ENCLOSURE_DEVICE 0x0D
470
#define REDUCED_BLOCK_DEVICE 0x0E
471
#define OPTICAL_CARD_READER_WRITER_DEVICE 0x0F
472
#define BRIDGE_CONTROLLER_DEVICE 0x10
473
#define OBJECT_BASED_STORAGE_DEVICE 0x11
474
#define LOGICAL_UNIT_NOT_PRESENT_DEVICE 0x7F
476
#define DEVICE_QUALIFIER_ACTIVE 0x00
477
#define DEVICE_QUALIFIER_NOT_ACTIVE 0x01
478
#define DEVICE_QUALIFIER_NOT_SUPPORTED 0x03
480
/* INQUIRYDATA.DeviceTypeQualifier constants */
481
#define DEVICE_CONNECTED 0x00
483
#define SCSISTAT_GOOD 0x00
484
#define SCSISTAT_CHECK_CONDITION 0x02
485
#define SCSISTAT_CONDITION_MET 0x04
486
#define SCSISTAT_BUSY 0x08
487
#define SCSISTAT_INTERMEDIATE 0x10
488
#define SCSISTAT_INTERMEDIATE_COND_MET 0x14
489
#define SCSISTAT_RESERVATION_CONFLICT 0x18
490
#define SCSISTAT_COMMAND_TERMINATED 0x22
491
#define SCSISTAT_QUEUE_FULL 0x28
493
#define VPD_MAX_BUFFER_SIZE 0xff
495
#define VPD_SUPPORTED_PAGES 0x00
496
#define VPD_SERIAL_NUMBER 0x80
497
#define VPD_DEVICE_IDENTIFIERS 0x83
498
#define VPD_MEDIA_SERIAL_NUMBER 0x84
499
#define VPD_SOFTWARE_INTERFACE_IDENTIFIERS 0x84
500
#define VPD_NETWORK_MANAGEMENT_ADDRESSES 0x85
501
#define VPD_EXTENDED_INQUIRY_DATA 0x86
502
#define VPD_MODE_PAGE_POLICY 0x87
503
#define VPD_SCSI_PORTS 0x88
505
#define RESERVATION_ACTION_READ_KEYS 0x00
506
#define RESERVATION_ACTION_READ_RESERVATIONS 0x01
508
#define RESERVATION_ACTION_REGISTER 0x00
509
#define RESERVATION_ACTION_RESERVE 0x01
510
#define RESERVATION_ACTION_RELEASE 0x02
511
#define RESERVATION_ACTION_CLEAR 0x03
512
#define RESERVATION_ACTION_PREEMPT 0x04
513
#define RESERVATION_ACTION_PREEMPT_ABORT 0x05
514
#define RESERVATION_ACTION_REGISTER_IGNORE_EXISTING 0x06
516
#define RESERVATION_SCOPE_LU 0x00
517
#define RESERVATION_SCOPE_ELEMENT 0x02
519
#define RESERVATION_TYPE_WRITE_EXCLUSIVE 0x01
520
#define RESERVATION_TYPE_EXCLUSIVE 0x03
521
#define RESERVATION_TYPE_WRITE_EXCLUSIVE_REGISTRANTS 0x05
522
#define RESERVATION_TYPE_EXCLUSIVE_REGISTRANTS 0x06
524
#define SENSE_BUFFER_SIZE 18
526
#define MAX_SENSE_BUFFER_SIZE 255
528
#define MAX_ADDITIONAL_SENSE_BYTES (MAX_SENSE_BUFFER_SIZE - SENSE_BUFFER_SIZE)
531
#define SCSI_SENSE_NO_SENSE 0x00
532
#define SCSI_SENSE_RECOVERED_ERROR 0x01
533
#define SCSI_SENSE_NOT_READY 0x02
534
#define SCSI_SENSE_MEDIUM_ERROR 0x03
535
#define SCSI_SENSE_HARDWARE_ERROR 0x04
536
#define SCSI_SENSE_ILLEGAL_REQUEST 0x05
537
#define SCSI_SENSE_UNIT_ATTENTION 0x06
538
#define SCSI_SENSE_DATA_PROTECT 0x07
539
#define SCSI_SENSE_BLANK_CHECK 0x08
540
#define SCSI_SENSE_UNIQUE 0x09
541
#define SCSI_SENSE_COPY_ABORTED 0x0A
542
#define SCSI_SENSE_ABORTED_COMMAND 0x0B
543
#define SCSI_SENSE_EQUAL 0x0C
544
#define SCSI_SENSE_VOL_OVERFLOW 0x0D
545
#define SCSI_SENSE_MISCOMPARE 0x0E
546
#define SCSI_SENSE_RESERVED 0x0F
548
/* Additional tape bit */
549
#define SCSI_ILLEGAL_LENGTH 0x20
550
#define SCSI_EOM 0x40
551
#define SCSI_FILE_MARK 0x80
553
/* Additional Sense codes */
554
#define SCSI_ADSENSE_NO_SENSE 0x00
555
#define SCSI_ADSENSE_NO_SEEK_COMPLETE 0x02
556
#define SCSI_ADSENSE_LUN_NOT_READY 0x04
557
#define SCSI_ADSENSE_LUN_COMMUNICATION 0x08
558
#define SCSI_ADSENSE_WRITE_ERROR 0x0C
559
#define SCSI_ADSENSE_TRACK_ERROR 0x14
560
#define SCSI_ADSENSE_SEEK_ERROR 0x15
561
#define SCSI_ADSENSE_REC_DATA_NOECC 0x17
562
#define SCSI_ADSENSE_REC_DATA_ECC 0x18
563
#define SCSI_ADSENSE_PARAMETER_LIST_LENGTH 0x1A
564
#define SCSI_ADSENSE_ILLEGAL_COMMAND 0x20
565
#define SCSI_ADSENSE_ILLEGAL_BLOCK 0x21
566
#define SCSI_ADSENSE_INVALID_CDB 0x24
567
#define SCSI_ADSENSE_INVALID_LUN 0x25
568
#define SCSI_ADSENSE_INVALID_FIELD_PARAMETER_LIST 0x26
569
#define SCSI_ADSENSE_WRITE_PROTECT 0x27
570
#define SCSI_ADSENSE_MEDIUM_CHANGED 0x28
571
#define SCSI_ADSENSE_BUS_RESET 0x29
572
#define SCSI_ADSENSE_PARAMETERS_CHANGED 0x2A
573
#define SCSI_ADSENSE_INSUFFICIENT_TIME_FOR_OPERATION 0x2E
574
#define SCSI_ADSENSE_INVALID_MEDIA 0x30
575
#define SCSI_ADSENSE_NO_MEDIA_IN_DEVICE 0x3a
576
#define SCSI_ADSENSE_POSITION_ERROR 0x3b
577
#define SCSI_ADSENSE_OPERATING_CONDITIONS_CHANGED 0x3f
578
#define SCSI_ADSENSE_OPERATOR_REQUEST 0x5a
579
#define SCSI_ADSENSE_FAILURE_PREDICTION_THRESHOLD_EXCEEDED 0x5d
580
#define SCSI_ADSENSE_ILLEGAL_MODE_FOR_THIS_TRACK 0x64
581
#define SCSI_ADSENSE_COPY_PROTECTION_FAILURE 0x6f
582
#define SCSI_ADSENSE_POWER_CALIBRATION_ERROR 0x73
583
#define SCSI_ADSENSE_VENDOR_UNIQUE 0x80
584
#define SCSI_ADSENSE_MUSIC_AREA 0xA0
585
#define SCSI_ADSENSE_DATA_AREA 0xA1
586
#define SCSI_ADSENSE_VOLUME_OVERFLOW 0xA7
588
#define SCSI_ADWRITE_PROTECT SCSI_ADSENSE_WRITE_PROTECT
589
#define SCSI_FAILURE_PREDICTION_THRESHOLD_EXCEEDED SCSI_ADSENSE_FAILURE_PREDICTION_THRESHOLD_EXCEEDED
591
#define SCSI_SENSEQ_CAUSE_NOT_REPORTABLE 0x00
592
#define SCSI_SENSEQ_BECOMING_READY 0x01
593
#define SCSI_SENSEQ_INIT_COMMAND_REQUIRED 0x02
594
#define SCSI_SENSEQ_MANUAL_INTERVENTION_REQUIRED 0x03
595
#define SCSI_SENSEQ_FORMAT_IN_PROGRESS 0x04
596
#define SCSI_SENSEQ_REBUILD_IN_PROGRESS 0x05
597
#define SCSI_SENSEQ_RECALCULATION_IN_PROGRESS 0x06
598
#define SCSI_SENSEQ_OPERATION_IN_PROGRESS 0x07
599
#define SCSI_SENSEQ_LONG_WRITE_IN_PROGRESS 0x08
600
#define SCSI_SENSEQ_LOSS_OF_STREAMING 0x09
601
#define SCSI_SENSEQ_PADDING_BLOCKS_ADDED 0x0A
603
#define SCSI_SENSEQ_COMM_FAILURE 0x00
604
#define SCSI_SENSEQ_COMM_TIMEOUT 0x01
605
#define SCSI_SENSEQ_COMM_PARITY_ERROR 0x02
606
#define SCSI_SESNEQ_COMM_CRC_ERROR 0x03
607
#define SCSI_SENSEQ_UNREACHABLE_TARGET 0x04
609
#define SCSI_SENSEQ_FILEMARK_DETECTED 0x01
610
#define SCSI_SENSEQ_END_OF_MEDIA_DETECTED 0x02
611
#define SCSI_SENSEQ_SETMARK_DETECTED 0x03
612
#define SCSI_SENSEQ_BEGINNING_OF_MEDIA_DETECTED 0x04
614
#define SCSI_SENSEQ_ILLEGAL_ELEMENT_ADDR 0x01
616
#define SCSI_SENSEQ_DESTINATION_FULL 0x0d
617
#define SCSI_SENSEQ_SOURCE_EMPTY 0x0e
619
#define SCSI_SENSEQ_INCOMPATIBLE_MEDIA_INSTALLED 0x00
620
#define SCSI_SENSEQ_UNKNOWN_FORMAT 0x01
621
#define SCSI_SENSEQ_INCOMPATIBLE_FORMAT 0x02
622
#define SCSI_SENSEQ_CLEANING_CARTRIDGE_INSTALLED 0x03
624
#define SCSI_SENSEQ_TARGET_OPERATING_CONDITIONS_CHANGED 0x00
625
#define SCSI_SENSEQ_MICROCODE_CHANGED 0x01
626
#define SCSI_SENSEQ_OPERATING_DEFINITION_CHANGED 0x02
627
#define SCSI_SENSEQ_INQUIRY_DATA_CHANGED 0x03
628
#define SCSI_SENSEQ_COMPONENT_DEVICE_ATTACHED 0x04
629
#define SCSI_SENSEQ_DEVICE_IDENTIFIER_CHANGED 0x05
630
#define SCSI_SENSEQ_REDUNDANCY_GROUP_MODIFIED 0x06
631
#define SCSI_SENSEQ_REDUNDANCY_GROUP_DELETED 0x07
632
#define SCSI_SENSEQ_SPARE_MODIFIED 0x08
633
#define SCSI_SENSEQ_SPARE_DELETED 0x09
634
#define SCSI_SENSEQ_VOLUME_SET_MODIFIED 0x0A
635
#define SCSI_SENSEQ_VOLUME_SET_DELETED 0x0B
636
#define SCSI_SENSEQ_VOLUME_SET_DEASSIGNED 0x0C
637
#define SCSI_SENSEQ_VOLUME_SET_REASSIGNED 0x0D
638
#define SCSI_SENSEQ_REPORTED_LUNS_DATA_CHANGED 0x0E
639
#define SCSI_SENSEQ_ECHO_BUFFER_OVERWRITTEN 0x0F
640
#define SCSI_SENSEQ_MEDIUM_LOADABLE 0x10
641
#define SCSI_SENSEQ_MEDIUM_AUXILIARY_MEMORY_ACCESSIBLE 0x11
643
#define SCSI_SENSEQ_STATE_CHANGE_INPUT 0x00
644
#define SCSI_SENSEQ_MEDIUM_REMOVAL 0x01
645
#define SCSI_SENSEQ_WRITE_PROTECT_ENABLE 0x02
646
#define SCSI_SENSEQ_WRITE_PROTECT_DISABLE 0x03
648
#define SCSI_SENSEQ_AUTHENTICATION_FAILURE 0x00
649
#define SCSI_SENSEQ_KEY_NOT_PRESENT 0x01
650
#define SCSI_SENSEQ_KEY_NOT_ESTABLISHED 0x02
651
#define SCSI_SENSEQ_READ_OF_SCRAMBLED_SECTOR_WITHOUT_AUTHENTICATION 0x03
652
#define SCSI_SENSEQ_MEDIA_CODE_MISMATCHED_TO_LOGICAL_UNIT 0x04
653
#define SCSI_SENSEQ_LOGICAL_UNIT_RESET_COUNT_ERROR 0x05
655
#define SCSI_SENSEQ_POWER_CALIBRATION_AREA_ALMOST_FULL 0x01
656
#define SCSI_SENSEQ_POWER_CALIBRATION_AREA_FULL 0x02
657
#define SCSI_SENSEQ_POWER_CALIBRATION_AREA_ERROR 0x03
658
#define SCSI_SENSEQ_PMA_RMA_UPDATE_FAILURE 0x04
659
#define SCSI_SENSEQ_PMA_RMA_IS_FULL 0x05
660
#define SCSI_SENSEQ_PMA_RMA_ALMOST_FULL 0x06
662
#define FILE_DEVICE_SCSI 0x0000001b
664
#define IOCTL_SCSI_EXECUTE_IN ((FILE_DEVICE_SCSI << 16) + 0x0011)
665
#define IOCTL_SCSI_EXECUTE_OUT ((FILE_DEVICE_SCSI << 16) + 0x0012)
666
#define IOCTL_SCSI_EXECUTE_NONE ((FILE_DEVICE_SCSI << 16) + 0x0013)
668
/* SMART support in ATAPI */
669
#define IOCTL_SCSI_MINIPORT_SMART_VERSION ((FILE_DEVICE_SCSI << 16) + 0x0500)
670
#define IOCTL_SCSI_MINIPORT_IDENTIFY ((FILE_DEVICE_SCSI << 16) + 0x0501)
671
#define IOCTL_SCSI_MINIPORT_READ_SMART_ATTRIBS ((FILE_DEVICE_SCSI << 16) + 0x0502)
672
#define IOCTL_SCSI_MINIPORT_READ_SMART_THRESHOLDS ((FILE_DEVICE_SCSI << 16) + 0x0503)
673
#define IOCTL_SCSI_MINIPORT_ENABLE_SMART ((FILE_DEVICE_SCSI << 16) + 0x0504)
674
#define IOCTL_SCSI_MINIPORT_DISABLE_SMART ((FILE_DEVICE_SCSI << 16) + 0x0505)
675
#define IOCTL_SCSI_MINIPORT_RETURN_STATUS ((FILE_DEVICE_SCSI << 16) + 0x0506)
676
#define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTOSAVE ((FILE_DEVICE_SCSI << 16) + 0x0507)
677
#define IOCTL_SCSI_MINIPORT_SAVE_ATTRIBUTE_VALUES ((FILE_DEVICE_SCSI << 16) + 0x0508)
678
#define IOCTL_SCSI_MINIPORT_EXECUTE_OFFLINE_DIAGS ((FILE_DEVICE_SCSI << 16) + 0x0509)
679
#define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTO_OFFLINE ((FILE_DEVICE_SCSI << 16) + 0x050a)
680
#define IOCTL_SCSI_MINIPORT_READ_SMART_LOG ((FILE_DEVICE_SCSI << 16) + 0x050b)
681
#define IOCTL_SCSI_MINIPORT_WRITE_SMART_LOG ((FILE_DEVICE_SCSI << 16) + 0x050c)
683
/* CLUSTER support */
684
#define IOCTL_SCSI_MINIPORT_NOT_QUORUM_CAPABLE ((FILE_DEVICE_SCSI << 16) + 0x0520)
685
#define IOCTL_SCSI_MINIPORT_NOT_CLUSTER_CAPABLE ((FILE_DEVICE_SCSI << 16) + 0x0521)
687
#define MODE_FD_SINGLE_SIDE 0x01
688
#define MODE_FD_DOUBLE_SIDE 0x02
689
#define MODE_FD_MAXIMUM_TYPE 0x1E
690
#define MODE_DSP_FUA_SUPPORTED 0x10
691
#define MODE_DSP_WRITE_PROTECT 0x80
693
#define CDDA_CHANNEL_MUTED 0x0
694
#define CDDA_CHANNEL_ZERO 0x1
695
#define CDDA_CHANNEL_ONE 0x2
696
#define CDDA_CHANNEL_TWO 0x4
697
#define CDDA_CHANNEL_THREE 0x8
699
#define CDVD_LMT_CADDY 0
700
#define CDVD_LMT_TRAY 1
701
#define CDVD_LMT_POPUP 2
702
#define CDVD_LMT_RESERVED1 3
703
#define CDVD_LMT_CHANGER_INDIVIDUAL 4
704
#define CDVD_LMT_CHANGER_CARTRIDGE 5
705
#define CDVD_LMT_RESERVED2 6
706
#define CDVD_LMT_RESERVED3 7
708
#define LOADING_MECHANISM_CADDY 0x00
709
#define LOADING_MECHANISM_TRAY 0x01
710
#define LOADING_MECHANISM_POPUP 0x02
711
#define LOADING_MECHANISM_INDIVIDUAL_CHANGER 0x04
712
#define LOADING_MECHANISM_CARTRIDGE_CHANGER 0x05
714
#define MODE_BLOCK_DESC_LENGTH 8
715
#define MODE_HEADER_LENGTH 4
716
#define MODE_HEADER_LENGTH10 8
718
/* CDROM audio control */
719
#define CDB_AUDIO_PAUSE 0x00
720
#define CDB_AUDIO_RESUME 0x01
721
#define CDB_DEVICE_START 0x11
722
#define CDB_DEVICE_STOP 0x10
723
#define CDB_EJECT_MEDIA 0x10
724
#define CDB_LOAD_MEDIA 0x01
725
#define CDB_SUBCHANNEL_HEADER 0x00
726
#define CDB_SUBCHANNEL_BLOCK 0x01
728
#define CDROM_AUDIO_CONTROL_PAGE 0x0E
729
#define MODE_SELECT_IMMEDIATE 0x04
730
#define MODE_SELECT_PFBIT 0x10
732
#define CDB_USE_MSF 0x01
734
/* Multisession CDROMs */
735
#define GET_LAST_SESSION 0x01
736
#define GET_SESSION_DATA 0x02
30
738
typedef union _CDB {
31
739
struct _CDB6GENERIC {
34
UCHAR CommandUniqueBits : 4;
35
UCHAR LogicalUnitNumber : 3;
36
UCHAR CommandUniqueBytes[3];
40
UCHAR VendorUnique : 2;
742
UCHAR CommandUniqueBits:4;
743
UCHAR LogicalUnitNumber:3;
744
UCHAR CommandUniqueBytes[3];
748
UCHAR VendorUnique:2;
41
749
} CDB6GENERIC, *PCDB6GENERIC;
43
750
struct _CDB6READWRITE {
45
UCHAR LogicalBlockMsb1 : 5;
46
UCHAR LogicalUnitNumber : 3;
47
UCHAR LogicalBlockMsb0;
48
UCHAR LogicalBlockLsb;
752
UCHAR LogicalBlockMsb1:5;
753
UCHAR LogicalUnitNumber:3;
754
UCHAR LogicalBlockMsb0;
755
UCHAR LogicalBlockLsb;
756
UCHAR TransferBlocks;
51
758
} CDB6READWRITE, *PCDB6READWRITE;
53
759
struct _CDB6INQUIRY {
56
UCHAR LogicalUnitNumber : 3;
59
UCHAR AllocationLength;
762
UCHAR LogicalUnitNumber:3;
765
UCHAR AllocationLength;
61
767
} CDB6INQUIRY, *PCDB6INQUIRY;
63
768
struct _CDB6INQUIRY3 {
65
UCHAR EnableVitalProductData : 1;
66
UCHAR CommandSupportData : 1;
70
UCHAR AllocationLength;
770
UCHAR EnableVitalProductData:1;
771
UCHAR CommandSupportData:1;
775
UCHAR AllocationLength;
72
777
} CDB6INQUIRY3, *PCDB6INQUIRY3;
74
778
struct _CDB6VERIFY {
77
UCHAR ByteCompare : 1;
80
UCHAR LogicalUnitNumber : 3;
81
UCHAR VerificationLength[3];
784
UCHAR LogicalUnitNumber:3;
785
UCHAR VerificationLength[3];
83
787
} CDB6VERIFY, *PCDB6VERIFY;
85
788
struct _CDB6FORMAT {
87
UCHAR FormatControl : 5;
88
UCHAR LogicalUnitNumber : 3;
790
UCHAR FormatControl:5;
791
UCHAR LogicalUnitNumber:3;
93
796
} CDB6FORMAT, *PCDB6FORMAT;
97
UCHAR RelativeAddress : 1;
99
UCHAR ForceUnitAccess : 1;
100
UCHAR DisablePageOut : 1;
101
UCHAR LogicalUnitNumber : 3;
102
UCHAR LogicalBlockByte0;
103
UCHAR LogicalBlockByte1;
104
UCHAR LogicalBlockByte2;
105
UCHAR LogicalBlockByte3;
107
UCHAR TransferBlocksMsb;
108
UCHAR TransferBlocksLsb;
799
UCHAR RelativeAddress:1;
801
UCHAR ForceUnitAccess:1;
802
UCHAR DisablePageOut:1;
803
UCHAR LogicalUnitNumber:3;
804
UCHAR LogicalBlockByte0;
805
UCHAR LogicalBlockByte1;
806
UCHAR LogicalBlockByte2;
807
UCHAR LogicalBlockByte3;
809
UCHAR TransferBlocksMsb;
810
UCHAR TransferBlocksLsb;
110
812
} CDB10, *PCDB10;
114
UCHAR RelativeAddress : 1;
116
UCHAR ForceUnitAccess : 1;
117
UCHAR DisablePageOut : 1;
118
UCHAR LogicalUnitNumber : 3;
119
UCHAR LogicalBlock[4];
120
UCHAR TransferLength[4];
815
UCHAR RelativeAddress:1;
817
UCHAR ForceUnitAccess:1;
818
UCHAR DisablePageOut:1;
819
UCHAR LogicalUnitNumber:3;
820
UCHAR LogicalBlock[4];
821
UCHAR TransferLength[4];
123
824
} CDB12, *PCDB12;
126
826
UCHAR OperationCode;
128
UCHAR ForceUnitAccess : 1;
129
UCHAR DisablePageOut : 1;
130
UCHAR Protection : 3;
828
UCHAR ForceUnitAccess:1;
829
UCHAR DisablePageOut:1;
131
831
UCHAR LogicalBlock[8];
132
832
UCHAR TransferLength[4];
135
835
} CDB16, *PCDB16;
137
836
struct _PAUSE_RESUME {
140
UCHAR LogicalUnitNumber : 3;
839
UCHAR LogicalUnitNumber:3;
144
843
} PAUSE_RESUME, *PPAUSE_RESUME;
146
844
struct _READ_TOC {
151
UCHAR LogicalUnitNumber : 3;
156
UCHAR AllocationLength[2];
849
UCHAR LogicalUnitNumber:3;
854
UCHAR AllocationLength[2];
159
857
} READ_TOC, *PREAD_TOC;
161
858
struct _READ_DISK_INFORMATION {
166
UCHAR AllocationLength[2];
863
UCHAR AllocationLength[2];
168
865
} READ_DISK_INFORMATION, *PREAD_DISK_INFORMATION;
170
866
struct _READ_TRACK_INFORMATION {
176
UCHAR BlockAddress[4];
178
UCHAR AllocationLength[2];
872
UCHAR BlockAddress[4];
874
UCHAR AllocationLength[2];
180
876
} READ_TRACK_INFORMATION, *PREAD_TRACK_INFORMATION;
182
877
struct _RESERVE_TRACK_RZONE {
185
UCHAR ReservationSize[4];
880
UCHAR ReservationSize[4];
187
882
} RESERVE_TRACK_RZONE, *PRESERVE_TRACK_RZONE;
189
883
struct _SEND_OPC_INFORMATION {
194
UCHAR ParameterListLength[2];
891
UCHAR ParameterListLength[2];
196
893
} SEND_OPC_INFORMATION, *PSEND_OPC_INFORMATION;
894
struct _REPAIR_TRACK {
899
UCHAR TrackNumber[2];
902
} REPAIR_TRACK, *PREPAIR_TRACK;
198
903
struct _CLOSE_TRACK {
206
UCHAR TrackNumber[2];
911
UCHAR TrackNumber[2];
209
914
} CLOSE_TRACK, *PCLOSE_TRACK;
915
struct _READ_BUFFER_CAPACITY {
920
UCHAR AllocationLength[2];
922
} READ_BUFFER_CAPACITY, *PREAD_BUFFER_CAPACITY;
211
923
struct _SEND_CUE_SHEET {
214
UCHAR CueSheetSize[3];
926
UCHAR CueSheetSize[3];
216
928
} SEND_CUE_SHEET, *PSEND_CUE_SHEET;
218
929
struct _READ_HEADER {
224
UCHAR LogicalBlockAddress[4];
226
UCHAR AllocationLength[2];
935
UCHAR LogicalBlockAddress[4];
937
UCHAR AllocationLength[2];
228
939
} READ_HEADER, *PREAD_HEADER;
230
940
struct _PLAY_AUDIO {
233
UCHAR LogicalUnitNumber : 3;
234
UCHAR StartingBlockAddress[4];
943
UCHAR LogicalUnitNumber:3;
944
UCHAR StartingBlockAddress[4];
238
948
} PLAY_AUDIO, *PPLAY_AUDIO;
240
949
struct _PLAY_AUDIO_MSF {
243
UCHAR LogicalUnitNumber : 3;
952
UCHAR LogicalUnitNumber:3;
252
961
} PLAY_AUDIO_MSF, *PPLAY_AUDIO_MSF;
254
/* FIXME: Should the union be anonymous in C++ too? If so,
255
can't define named types _LBA and _MSF within anonymous union
962
struct _BLANK_MEDIA {
968
UCHAR AddressOrTrack[4];
971
} BLANK_MEDIA, *PBLANK_MEDIA;
257
972
struct _PLAY_CD {
261
UCHAR ExpectedSectorType : 3;
976
UCHAR ExpectedSectorType:3;
978
_ANONYMOUS_UNION union {
268
UCHAR StartingBlockAddress[4];
980
UCHAR StartingBlockAddress[4];
295
1001
} PLAY_CD, *PPLAY_CD;
297
1002
struct _SCAN_CD {
299
UCHAR RelativeAddress : 1;
303
UCHAR StartingAddress[4];
1003
UCHAR OperationCode;
1004
UCHAR RelativeAddress:1;
1008
UCHAR StartingAddress[4];
309
1014
} SCAN_CD, *PSCAN_CD;
311
1015
struct _STOP_PLAY_SCAN {
1016
UCHAR OperationCode;
317
1021
} STOP_PLAY_SCAN, *PSTOP_PLAY_SCAN;
319
1022
struct _SUBCHANNEL {
324
UCHAR LogicalUnitNumber : 3;
331
UCHAR AllocationLength[2];
1023
UCHAR OperationCode;
1027
UCHAR LogicalUnitNumber:3;
1034
UCHAR AllocationLength[2];
333
1036
} SUBCHANNEL, *PSUBCHANNEL;
335
1037
struct _READ_CD {
337
UCHAR RelativeAddress : 1;
339
UCHAR ExpectedSectorType : 3;
341
UCHAR StartingLBA[4];
342
UCHAR TransferBlocks[3];
344
UCHAR ErrorFlags : 2;
345
UCHAR IncludeEDC : 1;
346
UCHAR IncludeUserData : 1;
347
UCHAR HeaderCode : 2;
348
UCHAR IncludeSyncData : 1;
349
UCHAR SubChannelSelection : 3;
1038
UCHAR OperationCode;
1039
UCHAR RelativeAddress:1;
1041
UCHAR ExpectedSectorType:3;
1043
UCHAR StartingLBA[4];
1044
UCHAR TransferBlocks[3];
1048
UCHAR IncludeUserData:1;
1050
UCHAR IncludeSyncData:1;
1051
UCHAR SubChannelSelection:3;
352
1054
} READ_CD, *PREAD_CD;
354
1055
struct _READ_CD_MSF {
356
UCHAR RelativeAddress : 1;
358
UCHAR ExpectedSectorType : 3;
369
UCHAR ErrorFlags : 2;
370
UCHAR IncludeEDC : 1;
371
UCHAR IncludeUserData : 1;
372
UCHAR HeaderCode : 2;
373
UCHAR IncludeSyncData : 1;
374
UCHAR SubChannelSelection : 3;
1056
UCHAR OperationCode;
1057
UCHAR RelativeAddress:1;
1059
UCHAR ExpectedSectorType:3;
1072
UCHAR IncludeUserData:1;
1074
UCHAR IncludeSyncData:1;
1075
UCHAR SubChannelSelection:3;
377
1078
} READ_CD_MSF, *PREAD_CD_MSF;
379
1079
struct _PLXTR_READ_CDDA {
382
UCHAR LogicalUnitNumber : 3;
383
UCHAR LogicalBlockByte0;
384
UCHAR LogicalBlockByte1;
385
UCHAR LogicalBlockByte2;
386
UCHAR LogicalBlockByte3;
387
UCHAR TransferBlockByte0;
388
UCHAR TransferBlockByte1;
389
UCHAR TransferBlockByte2;
390
UCHAR TransferBlockByte3;
1080
UCHAR OperationCode;
1082
UCHAR LogicalUnitNumber:3;
1083
UCHAR LogicalBlockByte0;
1084
UCHAR LogicalBlockByte1;
1085
UCHAR LogicalBlockByte2;
1086
UCHAR LogicalBlockByte3;
1087
UCHAR TransferBlockByte0;
1088
UCHAR TransferBlockByte1;
1089
UCHAR TransferBlockByte2;
1090
UCHAR TransferBlockByte3;
393
1093
} PLXTR_READ_CDDA, *PPLXTR_READ_CDDA;
395
1094
struct _NEC_READ_CDDA {
398
UCHAR LogicalBlockByte0;
399
UCHAR LogicalBlockByte1;
400
UCHAR LogicalBlockByte2;
401
UCHAR LogicalBlockByte3;
403
UCHAR TransferBlockByte0;
404
UCHAR TransferBlockByte1;
1095
UCHAR OperationCode;
1097
UCHAR LogicalBlockByte0;
1098
UCHAR LogicalBlockByte1;
1099
UCHAR LogicalBlockByte2;
1100
UCHAR LogicalBlockByte3;
1102
UCHAR TransferBlockByte0;
1103
UCHAR TransferBlockByte1;
406
1105
} NEC_READ_CDDA, *PNEC_READ_CDDA;
408
1106
struct _MODE_SENSE {
413
UCHAR LogicalUnitNumber : 3;
417
UCHAR AllocationLength;
1107
UCHAR OperationCode;
1111
UCHAR LogicalUnitNumber:3;
1115
UCHAR AllocationLength;
419
1117
} MODE_SENSE, *PMODE_SENSE;
421
1118
struct _MODE_SENSE10 {
426
UCHAR LogicalUnitNumber : 3;
430
UCHAR AllocationLength[2];
1119
UCHAR OperationCode;
1123
UCHAR LogicalUnitNumber:3;
1127
UCHAR AllocationLength[2];
432
1129
} MODE_SENSE10, *PMODE_SENSE10;
434
1130
struct _MODE_SELECT {
439
UCHAR LogicalUnitNumber : 3;
441
UCHAR ParameterListLength;
1131
UCHAR OperationCode;
1135
UCHAR LogicalUnitNumber:3;
1137
UCHAR ParameterListLength;
443
1139
} MODE_SELECT, *PMODE_SELECT;
445
1140
struct _MODE_SELECT10 {
450
UCHAR LogicalUnitNumber : 3;
452
UCHAR ParameterListLength[2];
1141
UCHAR OperationCode;
1145
UCHAR LogicalUnitNumber:3;
1147
UCHAR ParameterListLength[2];
454
1149
} MODE_SELECT10, *PMODE_SELECT10;
456
1150
struct _LOCATE {
462
UCHAR LogicalUnitNumber : 3;
464
UCHAR LogicalBlockAddress[4];
1151
UCHAR OperationCode;
1156
UCHAR LogicalUnitNumber:3;
1158
UCHAR LogicalBlockAddress[4];
468
1162
} LOCATE, *PLOCATE;
470
1163
struct _LOGSENSE {
475
UCHAR LogicalUnitNumber : 3;
480
UCHAR ParameterPointer[2];
481
UCHAR AllocationLength[2];
1164
UCHAR OperationCode;
1168
UCHAR LogicalUnitNumber:3;
1173
UCHAR ParameterPointer[2];
1174
UCHAR AllocationLength[2];
483
1176
} LOGSENSE, *PLOGSENSE;
485
1177
struct _LOGSELECT {
490
UCHAR LogicalUnitNumber : 3;
494
UCHAR ParameterListLength[2];
1178
UCHAR OperationCode;
1182
UCHAR LogicalUnitNumber:3;
1186
UCHAR ParameterListLength[2];
496
1188
} LOGSELECT, *PLOGSELECT;
501
UCHAR LogicalUnitNumber : 3;
502
UCHAR TransferLength[3];
1190
UCHAR OperationCode;
1192
UCHAR LogicalUnitNumber:3;
1193
UCHAR TransferLength[3];
504
1195
} PRINT, *PPRINT;
509
UCHAR LogicalUnitNumber : 3;
510
UCHAR LogicalBlockAddress[4];
1197
UCHAR OperationCode;
1199
UCHAR LogicalUnitNumber:3;
1200
UCHAR LogicalBlockAddress[4];
520
UCHAR LogicalUnitNumber : 3;
1205
UCHAR OperationCode;
1209
UCHAR LogicalUnitNumber:3;
523
1212
} ERASE, *PERASE;
525
1213
struct _START_STOP {
529
UCHAR LogicalUnitNumber : 3;
1214
UCHAR OperationCode;
1217
UCHAR LogicalUnitNumber:3;
535
1223
} START_STOP, *PSTART_STOP;
537
1224
struct _MEDIA_REMOVAL {
540
UCHAR LogicalUnitNumber : 3;
544
UCHAR Persistant : 1;
1225
UCHAR OperationCode;
1227
UCHAR LogicalUnitNumber:3;
548
1233
} MEDIA_REMOVAL, *PMEDIA_REMOVAL;
550
1234
struct _SEEK_BLOCK {
554
UCHAR BlockAddress[3];
558
UCHAR VendorUnique : 2;
1235
UCHAR OperationCode;
1238
UCHAR BlockAddress[3];
1242
UCHAR VendorUnique:2;
559
1243
} SEEK_BLOCK, *PSEEK_BLOCK;
561
1244
struct _REQUEST_BLOCK_ADDRESS {
564
UCHAR AllocationLength;
568
UCHAR VendorUnique : 2;
1245
UCHAR OperationCode;
1247
UCHAR AllocationLength;
1251
UCHAR VendorUnique:2;
569
1252
} REQUEST_BLOCK_ADDRESS, *PREQUEST_BLOCK_ADDRESS;
571
1253
struct _PARTITION {
575
UCHAR PartitionSelect : 6;
1254
UCHAR OperationCode;
1257
UCHAR PartitionSelect:6;
578
1260
} PARTITION, *PPARTITION;
580
1261
struct _WRITE_TAPE_MARKS {
583
UCHAR WriteSetMarks: 1;
585
UCHAR LogicalUnitNumber : 3;
586
UCHAR TransferLength[3];
1262
UCHAR OperationCode;
1264
UCHAR WriteSetMarks:1;
1266
UCHAR LogicalUnitNumber:3;
1267
UCHAR TransferLength[3];
588
1269
} WRITE_TAPE_MARKS, *PWRITE_TAPE_MARKS;
590
1270
struct _SPACE_TAPE_MARKS {
594
UCHAR LogicalUnitNumber : 3;
1271
UCHAR OperationCode;
1274
UCHAR LogicalUnitNumber:3;
604
UCHAR VendorUnique : 2;
1284
UCHAR VendorUnique:2;
607
1287
} SPACE_TAPE_MARKS, *PSPACE_TAPE_MARKS;
609
1288
struct _READ_POSITION {
616
1295
} READ_POSITION, *PREAD_POSITION;
618
1296
struct _CDB6READWRITETAPE {
620
UCHAR VendorSpecific : 5;
622
UCHAR TransferLenMSB;
624
UCHAR TransferLenLSB;
628
UCHAR VendorUnique : 2;
1297
UCHAR OperationCode;
1298
UCHAR VendorSpecific:5;
1300
UCHAR TransferLenMSB;
1302
UCHAR TransferLenLSB;
1306
UCHAR VendorUnique:2;
629
1307
} CDB6READWRITETAPE, *PCDB6READWRITETAPE;
631
1308
struct _INIT_ELEMENT_STATUS {
634
UCHAR LogicalUnitNubmer : 3;
1309
UCHAR OperationCode;
1311
UCHAR LogicalUnitNubmer:3;
638
1315
} INIT_ELEMENT_STATUS, *PINIT_ELEMENT_STATUS;
640
1316
struct _INITIALIZE_ELEMENT_RANGE {
644
UCHAR LogicalUnitNubmer : 3;
645
UCHAR FirstElementAddress[2];
647
UCHAR NumberOfElements[2];
1317
UCHAR OperationCode;
1320
UCHAR LogicalUnitNubmer:3;
1321
UCHAR FirstElementAddress[2];
1323
UCHAR NumberOfElements[2];
651
1327
} INITIALIZE_ELEMENT_RANGE, *PINITIALIZE_ELEMENT_RANGE;
653
1328
struct _POSITION_TO_ELEMENT {
656
UCHAR LogicalUnitNumber : 3;
657
UCHAR TransportElementAddress[2];
658
UCHAR DestinationElementAddress[2];
1329
UCHAR OperationCode;
1331
UCHAR LogicalUnitNumber:3;
1332
UCHAR TransportElementAddress[2];
1333
UCHAR DestinationElementAddress[2];
663
1338
} POSITION_TO_ELEMENT, *PPOSITION_TO_ELEMENT;
665
1339
struct _MOVE_MEDIUM {
668
UCHAR LogicalUnitNumber : 3;
669
UCHAR TransportElementAddress[2];
670
UCHAR SourceElementAddress[2];
671
UCHAR DestinationElementAddress[2];
1340
UCHAR OperationCode;
1342
UCHAR LogicalUnitNumber:3;
1343
UCHAR TransportElementAddress[2];
1344
UCHAR SourceElementAddress[2];
1345
UCHAR DestinationElementAddress[2];
676
1350
} MOVE_MEDIUM, *PMOVE_MEDIUM;
678
1351
struct _EXCHANGE_MEDIUM {
681
UCHAR LogicalUnitNumber : 3;
682
UCHAR TransportElementAddress[2];
683
UCHAR SourceElementAddress[2];
684
UCHAR Destination1ElementAddress[2];
685
UCHAR Destination2ElementAddress[2];
1352
UCHAR OperationCode;
1354
UCHAR LogicalUnitNumber:3;
1355
UCHAR TransportElementAddress[2];
1356
UCHAR SourceElementAddress[2];
1357
UCHAR Destination1ElementAddress[2];
1358
UCHAR Destination2ElementAddress[2];
690
1363
} EXCHANGE_MEDIUM, *PEXCHANGE_MEDIUM;
692
1364
struct _READ_ELEMENT_STATUS {
694
UCHAR ElementType : 4;
696
UCHAR LogicalUnitNumber : 3;
697
UCHAR StartingElementAddress[2];
698
UCHAR NumberOfElements[2];
700
UCHAR AllocationLength[3];
1365
UCHAR OperationCode;
1366
UCHAR ElementType:4;
1368
UCHAR LogicalUnitNumber:3;
1369
UCHAR StartingElementAddress[2];
1370
UCHAR NumberOfElements[2];
1372
UCHAR AllocationLength[3];
703
1375
} READ_ELEMENT_STATUS, *PREAD_ELEMENT_STATUS;
705
1376
struct _SEND_VOLUME_TAG {
707
UCHAR ElementType : 4;
709
UCHAR LogicalUnitNumber : 3;
710
UCHAR StartingElementAddress[2];
712
UCHAR ActionCode : 5;
715
UCHAR ParameterListLength[2];
1377
UCHAR OperationCode;
1378
UCHAR ElementType:4;
1380
UCHAR LogicalUnitNumber:3;
1381
UCHAR StartingElementAddress[2];
1386
UCHAR ParameterListLength[2];
718
1389
} SEND_VOLUME_TAG, *PSEND_VOLUME_TAG;
720
1390
struct _REQUEST_VOLUME_ELEMENT_ADDRESS {
722
UCHAR ElementType : 4;
724
UCHAR LogicalUnitNumber : 3;
725
UCHAR StartingElementAddress[2];
726
UCHAR NumberElements[2];
728
UCHAR AllocationLength[3];
1391
UCHAR OperationCode;
1392
UCHAR ElementType:4;
1394
UCHAR LogicalUnitNumber:3;
1395
UCHAR StartingElementAddress[2];
1396
UCHAR NumberElements[2];
1398
UCHAR AllocationLength[3];
731
1401
} REQUEST_VOLUME_ELEMENT_ADDRESS, *PREQUEST_VOLUME_ELEMENT_ADDRESS;
733
1402
struct _LOAD_UNLOAD {
1403
UCHAR OperationCode;
745
1414
} LOAD_UNLOAD, *PLOAD_UNLOAD;
747
1415
struct _MECH_STATUS {
752
UCHAR AllocationLength[2];
1416
UCHAR OperationCode;
1420
UCHAR AllocationLength[2];
755
1423
} MECH_STATUS, *PMECH_STATUS;
757
1424
struct _SYNCHRONIZE_CACHE10 {
766
UCHAR LogicalBlockAddress[4];
1425
UCHAR OperationCode;
1430
UCHAR LogicalBlockAddress[4];
1432
UCHAR BlockCount[2];
770
1434
} SYNCHRONIZE_CACHE10, *PSYNCHRONIZE_CACHE10;
772
1435
struct _GET_EVENT_STATUS_NOTIFICATION {
780
UCHAR NotificationClassRequest;
782
UCHAR EventListLength[2];
1436
UCHAR OperationCode;
1441
UCHAR NotificationClassRequest;
1443
UCHAR EventListLength[2];
785
1445
} GET_EVENT_STATUS_NOTIFICATION, *PGET_EVENT_STATUS_NOTIFICATION;
1446
struct _GET_PERFORMANCE {
1447
UCHAR OperationCode;
1452
UCHAR StartingLBA[4];
1454
UCHAR MaximumNumberOfDescriptors[2];
787
1458
struct _READ_DVD_STRUCTURE {
791
UCHAR RMDBlockNumber[4];
794
UCHAR AllocationLength[2];
1459
UCHAR OperationCode;
1462
UCHAR RMDBlockNumber[4];
1465
UCHAR AllocationLength[2];
798
1469
} READ_DVD_STRUCTURE, *PREAD_DVD_STRUCTURE;
1470
struct _SET_STREAMING {
1471
UCHAR OperationCode;
1473
UCHAR ParameterListLength[2];
800
1476
struct _SEND_DVD_STRUCTURE {
806
UCHAR ParameterListLength[2];
1477
UCHAR OperationCode;
1482
UCHAR ParameterListLength[2];
809
1485
} SEND_DVD_STRUCTURE, *PSEND_DVD_STRUCTURE;
811
1486
struct _SEND_KEY {
816
UCHAR ParameterListLength[2];
1487
UCHAR OperationCode;
1491
UCHAR ParameterListLength[2];
820
1495
} SEND_KEY, *PSEND_KEY;
822
1496
struct _REPORT_KEY {
826
UCHAR LogicalBlockAddress[4];
828
UCHAR AllocationLength[2];
1497
UCHAR OperationCode;
1500
UCHAR LogicalBlockAddress[4];
1502
UCHAR AllocationLength[2];
832
1506
} REPORT_KEY, *PREPORT_KEY;
834
1507
struct _SET_READ_AHEAD {
839
UCHAR ReadAheadLBA[4];
1508
UCHAR OperationCode;
1511
UCHAR TriggerLBA[4];
1512
UCHAR ReadAheadLBA[4];
842
1515
} SET_READ_AHEAD, *PSET_READ_AHEAD;
844
1516
struct _READ_FORMATTED_CAPACITIES {
849
UCHAR AllocationLength[2];
1517
UCHAR OperationCode;
1521
UCHAR AllocationLength[2];
851
1523
} READ_FORMATTED_CAPACITIES, *PREAD_FORMATTED_CAPACITIES;
853
1524
struct _REPORT_LUNS {
856
UCHAR AllocationLength[4];
1525
UCHAR OperationCode;
1527
UCHAR AllocationLength[4];
859
1530
} REPORT_LUNS, *PREPORT_LUNS;
861
1531
struct _PERSISTENT_RESERVE_IN {
863
UCHAR ServiceAction : 5;
866
UCHAR AllocationLength[2];
1532
UCHAR OperationCode;
1533
UCHAR ServiceAction:5;
1536
UCHAR AllocationLength[2];
868
1538
} PERSISTENT_RESERVE_IN, *PPERSISTENT_RESERVE_IN;
870
1539
struct _PERSISTENT_RESERVE_OUT {
872
UCHAR ServiceAction : 5;
877
UCHAR ParameterListLength[2];
1540
UCHAR OperationCode;
1541
UCHAR ServiceAction:5;
1546
UCHAR ParameterListLength[2];
879
1548
} PERSISTENT_RESERVE_OUT, *PPERSISTENT_RESERVE_OUT;
881
1549
struct _GET_CONFIGURATION {
883
UCHAR RequestType : 1;
885
UCHAR StartingFeature[2];
887
UCHAR AllocationLength[2];
1550
UCHAR OperationCode;
1551
UCHAR RequestType:1;
1553
UCHAR StartingFeature[2];
1555
UCHAR AllocationLength[2];
889
1557
} GET_CONFIGURATION, *PGET_CONFIGURATION;
891
1558
struct _SET_CD_SPEED {
1559
UCHAR OperationCode;
1560
_ANONYMOUS_UNION union {
1562
_ANONYMOUS_STRUCT struct {
1563
UCHAR RotationControl:2;
1568
UCHAR WriteSpeed[2];
898
1571
} SET_CD_SPEED, *PSET_CD_SPEED;
1573
UCHAR OperationCode;
1574
UCHAR RelativeAddress:1;
1576
UCHAR ForceUnitAccess:1;
1577
UCHAR DisablePageOut:1;
1578
UCHAR LogicalUnitNumber:3;
1579
UCHAR LogicalBlock[4];
1580
UCHAR TransferLength[4];
1586
UCHAR OperationCode;
1587
UCHAR RelativeAddress:1;
1590
UCHAR ForceUnitAccess:1;
1591
UCHAR DisablePageOut:1;
1592
UCHAR LogicalUnitNumber:3;
1593
UCHAR LogicalBlock[4];
1594
UCHAR TransferLength[4];
1600
UCHAR OperationCode;
1602
UCHAR ForceUnitAccess:1;
1603
UCHAR DisablePageOut:1;
1604
UCHAR ReadProtect:3;
1605
UCHAR LogicalBlock[8];
1606
UCHAR TransferLength[4];
1612
UCHAR OperationCode;
1614
UCHAR ForceUnitAccess:1;
1615
UCHAR DisablePageOut:1;
1616
UCHAR WriteProtect:3;
1617
UCHAR LogicalBlock[8];
1618
UCHAR TransferLength[4];
1624
UCHAR OperationCode;
1627
UCHAR BlockVerify:1;
1629
UCHAR DisablePageOut:1;
1630
UCHAR VerifyProtect:3;
1631
UCHAR LogicalBlock[8];
1632
UCHAR VerificationLength[4];
1637
struct _SYNCHRONIZE_CACHE16 {
1638
UCHAR OperationCode;
1642
UCHAR LogicalBlock[8];
1643
UCHAR BlockCount[4];
1646
} SYNCHRONIZE_CACHE16;
1647
struct _READ_CAPACITY16 {
1648
UCHAR OperationCode;
1649
UCHAR ServiceAction:5;
1651
UCHAR LogicalBlock[8];
1652
UCHAR BlockCount[4];
900
1657
ULONG AsUlong[4];
1661
typedef struct _NOTIFICATION_EVENT_STATUS_HEADER {
1662
UCHAR EventDataLength[2];
1663
UCHAR NotificationClass:3;
1666
UCHAR SupportedEventClasses;
1667
UCHAR ClassEventData[0];
1668
} NOTIFICATION_EVENT_STATUS_HEADER, *PNOTIFICATION_EVENT_STATUS_HEADER;
1670
typedef struct _NOTIFICATION_OPERATIONAL_STATUS {
1671
UCHAR OperationalEvent:4;
1673
UCHAR OperationalStatus:4;
1675
UCHAR PersistentPrevented:1;
1677
} NOTIFICATION_OPERATIONAL_STATUS, *PNOTIFICATION_OPERATIONAL_STATUS;
1679
typedef struct _NOTIFICATION_POWER_STATUS {
1684
} NOTIFICATION_POWER_STATUS, *PNOTIFICATION_POWER_STATUS;
1686
typedef struct _NOTIFICATION_EXTERNAL_STATUS {
1687
UCHAR ExternalEvent:4;
1689
UCHAR ExternalStatus:4;
1691
UCHAR PersistentPrevented:1;
1693
} NOTIFICATION_EXTERNAL_STATUS, *PNOTIFICATION_EXTERNAL_STATUS;
1695
typedef struct _NOTIFICATION_MEDIA_STATUS {
1698
_ANONYMOUS_UNION union {
1701
_ANONYMOUS_STRUCT struct {
1702
UCHAR DoorTrayOpen:1;
1703
UCHAR MediaPresent:1;
1709
} NOTIFICATION_MEDIA_STATUS, *PNOTIFICATION_MEDIA_STATUS;
1711
typedef struct _NOTIFICATION_MULTI_HOST_STATUS {
1712
UCHAR MultiHostEvent:4;
1714
UCHAR MultiHostStatus:4;
1716
UCHAR PersistentPrevented:1;
1718
} NOTIFICATION_MULTI_HOST_STATUS, *PNOTIFICATION_MULTI_HOST_STATUS;
1720
typedef struct _NOTIFICATION_BUSY_STATUS {
1721
UCHAR DeviceBusyEvent:4;
1723
UCHAR DeviceBusyStatus;
1725
} NOTIFICATION_BUSY_STATUS, *PNOTIFICATION_BUSY_STATUS;
1727
typedef struct _READ_DVD_STRUCTURES_HEADER {
1731
} READ_DVD_STRUCTURES_HEADER, *PREAD_DVD_STRUCTURES_HEADER;
1733
typedef struct _CDVD_KEY_HEADER {
1734
UCHAR DataLength[2];
1737
} CDVD_KEY_HEADER, *PCDVD_KEY_HEADER;
1739
typedef struct _CDVD_REPORT_AGID_DATA {
1743
} CDVD_REPORT_AGID_DATA, *PCDVD_REPORT_AGID_DATA;
1745
typedef struct _CDVD_CHALLENGE_KEY_DATA {
1746
UCHAR ChallengeKeyValue[10];
1748
} CDVD_CHALLENGE_KEY_DATA, *PCDVD_CHALLENGE_KEY_DATA;
1750
typedef struct _CDVD_KEY_DATA {
1753
} CDVD_KEY_DATA, *PCDVD_KEY_DATA;
1755
typedef struct _CDVD_REPORT_ASF_DATA {
1759
} CDVD_REPORT_ASF_DATA, *PCDVD_REPORT_ASF_DATA;
1761
typedef struct _CDVD_TITLE_KEY_HEADER {
1762
UCHAR DataLength[2];
1769
CDVD_KEY_DATA TitleKey;
1770
} CDVD_TITLE_KEY_HEADER, *PCDVD_TITLE_KEY_HEADER;
1772
typedef struct _FORMAT_DESCRIPTOR {
1773
UCHAR NumberOfBlocks[4];
1774
UCHAR FormatSubType:2;
1776
UCHAR BlockLength[3];
1777
} FORMAT_DESCRIPTOR, *PFORMAT_DESCRIPTOR;
1779
typedef struct _FORMAT_LIST_HEADER {
1781
UCHAR VendorSpecific:1;
1789
UCHAR FormatDescriptorLength[2];
1790
FORMAT_DESCRIPTOR Descriptors[0];
1791
} FORMAT_LIST_HEADER, *PFORMAT_LIST_HEADER;
1793
typedef struct _FORMATTED_CAPACITY_DESCRIPTOR {
1794
UCHAR NumberOfBlocks[4];
1798
UCHAR BlockLength[3];
1799
} FORMATTED_CAPACITY_DESCRIPTOR, *PFORMATTED_CAPACITY_DESCRIPTOR;
1801
typedef struct _FORMATTED_CAPACITY_LIST {
1803
UCHAR CapacityListLength;
1804
FORMATTED_CAPACITY_DESCRIPTOR Descriptors[0];
1805
} FORMATTED_CAPACITY_LIST, *PFORMATTED_CAPACITY_LIST;
1807
typedef struct _OPC_TABLE_ENTRY {
1810
} OPC_TABLE_ENTRY, *POPC_TABLE_ENTRY;
1812
typedef struct _DISC_INFORMATION {
1815
UCHAR LastSessionStatus:2;
1818
UCHAR FirstTrackNumber;
1819
UCHAR NumberOfSessionsLsb;
1820
UCHAR LastSessionFirstTrackLsb;
1821
UCHAR LastSessionLastTrackLsb;
1823
UCHAR MrwDirtyBit:1;
1829
UCHAR NumberOfSessionsMsb;
1830
UCHAR LastSessionFirstTrackMsb;
1831
UCHAR LastSessionLastTrackMsb;
1832
UCHAR DiskIdentification[4];
1833
UCHAR LastSessionLeadIn[4];
1834
UCHAR LastPossibleLeadOutStartTime[4];
1835
UCHAR DiskBarCode[8];
1837
UCHAR NumberOPCEntries;
1838
OPC_TABLE_ENTRY OPCTable[1];
1839
} DISC_INFORMATION, *PDISC_INFORMATION;
1841
typedef struct _DISK_INFORMATION {
1844
UCHAR LastSessionStatus:2;
1847
UCHAR FirstTrackNumber;
1848
UCHAR NumberOfSessions;
1849
UCHAR LastSessionFirstTrack;
1850
UCHAR LastSessionLastTrack;
1857
UCHAR DiskIdentification[4];
1858
UCHAR LastSessionLeadIn[4];
1859
UCHAR LastPossibleStartTime[4];
1860
UCHAR DiskBarCode[8];
1862
UCHAR NumberOPCEntries;
1863
OPC_TABLE_ENTRY OPCTable[0];
1864
} DISK_INFORMATION, *PDISK_INFORMATION;
1866
typedef struct _DATA_BLOCK_HEADER {
1869
_ANONYMOUS_UNION union {
1870
UCHAR LogicalBlockAddress[4];
1878
} DATA_BLOCK_HEADER, *PDATA_BLOCK_HEADER;
1880
typedef struct _TRACK_INFORMATION {
1883
UCHAR SessionNumber;
1896
UCHAR TrackStartAddress[4];
1897
UCHAR NextWritableAddress[4];
1898
UCHAR FreeBlocks[4];
1899
UCHAR FixedPacketSize[4];
1900
} TRACK_INFORMATION, *PTRACK_INFORMATION;
1902
typedef struct _TRACK_INFORMATION2 {
1904
UCHAR TrackNumberLsb;
1905
UCHAR SessionNumberLsb;
1912
UCHAR FixedPacket:1;
1915
UCHAR ReservedTrack:1;
1919
UCHAR TrackStartAddress[4];
1920
UCHAR NextWritableAddress[4];
1921
UCHAR FreeBlocks[4];
1922
UCHAR FixedPacketSize[4];
1924
UCHAR LastRecordedAddress[4];
1925
UCHAR TrackNumberMsb;
1926
UCHAR SessionNumberMsb;
1928
} TRACK_INFORMATION2, *PTRACK_INFORMATION2;
1930
typedef struct _TRACK_INFORMATION3 {
1932
UCHAR TrackNumberLsb;
1933
UCHAR SessionNumberLsb;
1940
UCHAR FixedPacket:1;
1943
UCHAR ReservedTrack:1;
1947
UCHAR TrackStartAddress[4];
1948
UCHAR NextWritableAddress[4];
1949
UCHAR FreeBlocks[4];
1950
UCHAR FixedPacketSize[4];
1952
UCHAR LastRecordedAddress[4];
1953
UCHAR TrackNumberMsb;
1954
UCHAR SessionNumberMsb;
1956
UCHAR ReadCompatibilityLba[4];
1957
} TRACK_INFORMATION3, *PTRACK_INFORMATION3;
1959
typedef struct _PERFORMANCE_DESCRIPTOR {
1960
UCHAR RandomAccess:1;
1962
UCHAR RestoreDefaults:1;
1963
UCHAR WriteRotationControl:2;
1972
} PERFORMANCE_DESCRIPTOR, *PPERFORMANCE_DESCRIPTOR;
1974
typedef struct _SCSI_EXTENDED_MESSAGE {
1975
UCHAR InitialMessageCode;
1976
UCHAR MessageLength;
1978
union _EXTENDED_ARGUMENTS {
1983
UCHAR TransferPeriod;
1989
} ExtendedArguments;
1990
}SCSI_EXTENDED_MESSAGE, *PSCSI_EXTENDED_MESSAGE;
904
1992
#ifndef _INQUIRYDATA_DEFINED /* also in minitape.h */
905
1993
#define _INQUIRYDATA_DEFINED
907
#define INQUIRYDATABUFFERSIZE 36
1995
#define INQUIRYDATABUFFERSIZE 36
909
typedef struct _INQUIRYDATA {
910
UCHAR DeviceType : 5;
911
UCHAR DeviceTypeQualifier : 3;
912
UCHAR DeviceTypeModifier : 7;
913
UCHAR RemovableMedia : 1;
1997
#if (NTDDI_VERSION < NTDDI_WINXP)
1998
typedef struct _INQUIRYDATA {
2000
UCHAR DeviceTypeQualifier:3;
2001
UCHAR DeviceTypeModifier:7;
2002
UCHAR RemovableMedia:1;
2004
UCHAR ResponseDataFormat:4;
2007
UCHAR ReservedBit:1;
2009
UCHAR AdditionalLength;
2012
UCHAR CommandQueue:1;
2014
UCHAR LinkedCommands:1;
2015
UCHAR Synchronous:1;
2018
UCHAR RelativeAddressing:1;
2020
UCHAR ProductId[16];
2021
UCHAR ProductRevisionLevel[4];
2022
UCHAR VendorSpecific[20];
2023
UCHAR Reserved3[40];
2024
} INQUIRYDATA, *PINQUIRYDATA;
2026
typedef struct _INQUIRYDATA {
2028
UCHAR DeviceTypeQualifier:3;
2029
UCHAR DeviceTypeModifier:7;
2030
UCHAR RemovableMedia:1;
914
2031
_ANONYMOUS_UNION union {
916
2033
_ANONYMOUS_STRUCT struct {
917
UCHAR ANSIVersion : 3;
918
UCHAR ECMAVersion : 3;
919
UCHAR ISOVersion : 2;
2034
UCHAR ANSIVersion:3;
2035
UCHAR ECMAVersion:3;
920
2037
} DUMMYSTRUCTNAME;
921
2038
} DUMMYUNIONNAME;
922
UCHAR ResponseDataFormat : 4;
925
UCHAR TerminateTask : 1;
927
UCHAR AdditionalLength;
932
UCHAR MediumChanger : 1;
934
UCHAR ReservedBit2 : 1;
935
UCHAR EnclosureServices : 1;
936
UCHAR ReservedBit3 : 1;
938
UCHAR CommandQueue : 1;
939
UCHAR TransferDisable : 1;
940
UCHAR LinkedCommands : 1;
941
UCHAR Synchronous : 1;
944
UCHAR RelativeAddressing : 1;
947
UCHAR ProductRevisionLevel[4];
948
UCHAR VendorSpecific[20];
2039
UCHAR ResponseDataFormat:4;
2042
UCHAR TerminateTask:1;
2044
UCHAR AdditionalLength;
2049
UCHAR MediumChanger:1;
2051
UCHAR ReservedBit2:1;
2052
UCHAR EnclosureServices:1;
2053
UCHAR ReservedBit3:1;
2055
UCHAR CommandQueue:1;
2056
UCHAR TransferDisable:1;
2057
UCHAR LinkedCommands:1;
2058
UCHAR Synchronous:1;
2061
UCHAR RelativeAddressing:1;
2063
UCHAR ProductId[16];
2064
UCHAR ProductRevisionLevel[4];
2065
UCHAR VendorSpecific[20];
2066
UCHAR Reserved3[40];
950
2067
} INQUIRYDATA, *PINQUIRYDATA;
953
/* INQUIRYDATA.DeviceType constants */
954
#define DIRECT_ACCESS_DEVICE 0x00
955
#define SEQUENTIAL_ACCESS_DEVICE 0x01
956
#define PRINTER_DEVICE 0x02
957
#define PROCESSOR_DEVICE 0x03
958
#define WRITE_ONCE_READ_MULTIPLE_DEVICE 0x04
959
#define READ_ONLY_DIRECT_ACCESS_DEVICE 0x05
960
#define SCANNER_DEVICE 0x06
961
#define OPTICAL_DEVICE 0x07
962
#define MEDIUM_CHANGER 0x08
963
#define COMMUNICATION_DEVICE 0x09
964
#define LOGICAL_UNIT_NOT_PRESENT_DEVICE 0x7F
965
#define DEVICE_QUALIFIER_NOT_SUPPORTED 0x03
967
/* INQUIRYDATA.DeviceTypeQualifier constants */
968
#define DEVICE_CONNECTED 0x00
970
#define SCSISTAT_GOOD 0x00
971
#define SCSISTAT_CHECK_CONDITION 0x02
972
#define SCSISTAT_CONDITION_MET 0x04
973
#define SCSISTAT_BUSY 0x08
974
#define SCSISTAT_INTERMEDIATE 0x10
975
#define SCSISTAT_INTERMEDIATE_COND_MET 0x14
976
#define SCSISTAT_RESERVATION_CONFLICT 0x18
977
#define SCSISTAT_COMMAND_TERMINATED 0x22
978
#define SCSISTAT_QUEUE_FULL 0x28
980
/* Mode Sense/Select page constants */
981
#define MODE_PAGE_ERROR_RECOVERY 0x01
982
#define MODE_PAGE_DISCONNECT 0x02
983
#define MODE_PAGE_FORMAT_DEVICE 0x03
984
#define MODE_PAGE_RIGID_GEOMETRY 0x04
985
#define MODE_PAGE_FLEXIBILE 0x05
986
#define MODE_PAGE_WRITE_PARAMETERS 0x05
987
#define MODE_PAGE_VERIFY_ERROR 0x07
988
#define MODE_PAGE_CACHING 0x08
989
#define MODE_PAGE_PERIPHERAL 0x09
990
#define MODE_PAGE_CONTROL 0x0A
991
#define MODE_PAGE_MEDIUM_TYPES 0x0B
992
#define MODE_PAGE_NOTCH_PARTITION 0x0C
993
#define MODE_PAGE_CD_AUDIO_CONTROL 0x0E
994
#define MODE_PAGE_DATA_COMPRESS 0x0F
995
#define MODE_PAGE_DEVICE_CONFIG 0x10
996
#define MODE_PAGE_MEDIUM_PARTITION 0x11
997
#define MODE_PAGE_CDVD_FEATURE_SET 0x18
998
#define MODE_PAGE_POWER_CONDITION 0x1A
999
#define MODE_PAGE_FAULT_REPORTING 0x1C
1000
#define MODE_PAGE_CDVD_INACTIVITY 0x1D
1001
#define MODE_PAGE_ELEMENT_ADDRESS 0x1D
1002
#define MODE_PAGE_TRANSPORT_GEOMETRY 0x1E
1003
#define MODE_PAGE_DEVICE_CAPABILITIES 0x1F
1004
#define MODE_PAGE_CAPABILITIES 0x2A
1005
#define MODE_SENSE_RETURN_ALL 0x3f
1006
#define MODE_SENSE_CURRENT_VALUES 0x00
1007
#define MODE_SENSE_CHANGEABLE_VALUES 0x40
1008
#define MODE_SENSE_DEFAULT_VAULES 0x80
1009
#define MODE_SENSE_SAVED_VALUES 0xc0
1011
/* SCSI CDB operation codes */
1012
#define SCSIOP_TEST_UNIT_READY 0x00
1013
#define SCSIOP_REZERO_UNIT 0x01
1014
#define SCSIOP_REWIND 0x01
1015
#define SCSIOP_REQUEST_BLOCK_ADDR 0x02
1016
#define SCSIOP_REQUEST_SENSE 0x03
1017
#define SCSIOP_FORMAT_UNIT 0x04
1018
#define SCSIOP_READ_BLOCK_LIMITS 0x05
1019
#define SCSIOP_REASSIGN_BLOCKS 0x07
1020
#define SCSIOP_INIT_ELEMENT_STATUS 0x07
1021
#define SCSIOP_READ6 0x08
1022
#define SCSIOP_RECEIVE 0x08
1023
#define SCSIOP_WRITE6 0x0A
1024
#define SCSIOP_PRINT 0x0A
1025
#define SCSIOP_SEND 0x0A
1026
#define SCSIOP_SEEK6 0x0B
1027
#define SCSIOP_TRACK_SELECT 0x0B
1028
#define SCSIOP_SLEW_PRINT 0x0B
1029
#define SCSIOP_SEEK_BLOCK 0x0C
1030
#define SCSIOP_PARTITION 0x0D
1031
#define SCSIOP_READ_REVERSE 0x0F
1032
#define SCSIOP_WRITE_FILEMARKS 0x10
1033
#define SCSIOP_FLUSH_BUFFER 0x10
1034
#define SCSIOP_SPACE 0x11
1035
#define SCSIOP_INQUIRY 0x12
1036
#define SCSIOP_VERIFY6 0x13
1037
#define SCSIOP_RECOVER_BUF_DATA 0x14
1038
#define SCSIOP_MODE_SELECT 0x15
1039
#define SCSIOP_RESERVE_UNIT 0x16
1040
#define SCSIOP_RELEASE_UNIT 0x17
1041
#define SCSIOP_COPY 0x18
1042
#define SCSIOP_ERASE 0x19
1043
#define SCSIOP_MODE_SENSE 0x1A
1044
#define SCSIOP_START_STOP_UNIT 0x1B
1045
#define SCSIOP_STOP_PRINT 0x1B
1046
#define SCSIOP_LOAD_UNLOAD 0x1B
1047
#define SCSIOP_RECEIVE_DIAGNOSTIC 0x1C
1048
#define SCSIOP_SEND_DIAGNOSTIC 0x1D
1049
#define SCSIOP_MEDIUM_REMOVAL 0x1E
1051
#define SCSIOP_READ_FORMATTED_CAPACITY 0x23
1052
#define SCSIOP_READ_CAPACITY 0x25
1053
#define SCSIOP_READ 0x28
1054
#define SCSIOP_WRITE 0x2A
1055
#define SCSIOP_SEEK 0x2B
1056
#define SCSIOP_LOCATE 0x2B
1057
#define SCSIOP_POSITION_TO_ELEMENT 0x2B
1058
#define SCSIOP_WRITE_VERIFY 0x2E
1059
#define SCSIOP_VERIFY 0x2F
1060
#define SCSIOP_SEARCH_DATA_HIGH 0x30
1061
#define SCSIOP_SEARCH_DATA_EQUAL 0x31
1062
#define SCSIOP_SEARCH_DATA_LOW 0x32
1063
#define SCSIOP_SET_LIMITS 0x33
1064
#define SCSIOP_READ_POSITION 0x34
1065
#define SCSIOP_SYNCHRONIZE_CACHE 0x35
1066
#define SCSIOP_COMPARE 0x39
1067
#define SCSIOP_COPY_COMPARE 0x3A
1068
#define SCSIOP_WRITE_DATA_BUFF 0x3B
1069
#define SCSIOP_READ_DATA_BUFF 0x3C
1070
#define SCSIOP_CHANGE_DEFINITION 0x40
1071
#define SCSIOP_READ_SUB_CHANNEL 0x42
1072
#define SCSIOP_READ_TOC 0x43
1073
#define SCSIOP_READ_HEADER 0x44
1074
#define SCSIOP_PLAY_AUDIO 0x45
1075
#define SCSIOP_GET_CONFIGURATION 0x46
1076
#define SCSIOP_PLAY_AUDIO_MSF 0x47
1077
#define SCSIOP_PLAY_TRACK_INDEX 0x48
1078
#define SCSIOP_PLAY_TRACK_RELATIVE 0x49
1079
#define SCSIOP_GET_EVENT_STATUS 0x4A
1080
#define SCSIOP_PAUSE_RESUME 0x4B
1081
#define SCSIOP_LOG_SELECT 0x4C
1082
#define SCSIOP_LOG_SENSE 0x4D
1083
#define SCSIOP_STOP_PLAY_SCAN 0x4E
1084
#define SCSIOP_READ_DISK_INFORMATION 0x51
1085
#define SCSIOP_READ_TRACK_INFORMATION 0x52
1086
#define SCSIOP_RESERVE_TRACK_RZONE 0x53
1087
#define SCSIOP_SEND_OPC_INFORMATION 0x54
1088
#define SCSIOP_MODE_SELECT10 0x55
1089
#define SCSIOP_MODE_SENSE10 0x5A
1090
#define SCSIOP_CLOSE_TRACK_SESSION 0x5B
1091
#define SCSIOP_READ_BUFFER_CAPACITY 0x5C
1092
#define SCSIOP_SEND_CUE_SHEET 0x5D
1093
#define SCSIOP_PERSISTENT_RESERVE_IN 0x5E
1094
#define SCSIOP_PERSISTENT_RESERVE_OUT 0x5F
1096
#define SCSIOP_REPORT_LUNS 0xA0
1097
#define SCSIOP_BLANK 0xA1
1098
#define SCSIOP_SEND_KEY 0xA3
1099
#define SCSIOP_REPORT_KEY 0xA4
1100
#define SCSIOP_MOVE_MEDIUM 0xA5
1101
#define SCSIOP_LOAD_UNLOAD_SLOT 0xA6
1102
#define SCSIOP_EXCHANGE_MEDIUM 0xA6
1103
#define SCSIOP_SET_READ_AHEAD 0xA7
1104
#define SCSIOP_READ_DVD_STRUCTURE 0xAD
1105
#define SCSIOP_REQUEST_VOL_ELEMENT 0xB5
1106
#define SCSIOP_SEND_VOLUME_TAG 0xB6
1107
#define SCSIOP_READ_ELEMENT_STATUS 0xB8
1108
#define SCSIOP_READ_CD_MSF 0xB9
1109
#define SCSIOP_SCAN_CD 0xBA
1110
#define SCSIOP_SET_CD_SPEED 0xBB
1111
#define SCSIOP_PLAY_CD 0xBC
1112
#define SCSIOP_MECHANISM_STATUS 0xBD
1113
#define SCSIOP_READ_CD 0xBE
1114
#define SCSIOP_SEND_DVD_STRUCTURE 0xBF
1115
#define SCSIOP_INIT_ELEMENT_RANGE 0xE7
1117
#define SCSIOP_DENON_EJECT_DISC 0xE6
1118
#define SCSIOP_DENON_STOP_AUDIO 0xE7
1119
#define SCSIOP_DENON_PLAY_AUDIO 0xE8
1120
#define SCSIOP_DENON_READ_TOC 0xE9
1121
#define SCSIOP_DENON_READ_SUBCODE 0xEB
1123
#define SCSIMESS_MODIFY_DATA_POINTER 0x00
1124
#define SCSIMESS_SYNCHRONOUS_DATA_REQ 0x01
1125
#define SCSIMESS_WIDE_DATA_REQUEST 0x03
1127
#define SCSIMESS_MODIFY_DATA_LENGTH 5
1128
#define SCSIMESS_SYNCH_DATA_LENGTH 3
1129
#define SCSIMESS_WIDE_DATA_LENGTH 2
1131
#define SCSIMESS_ABORT 0x06
1132
#define SCSIMESS_ABORT_WITH_TAG 0x0D
1133
#define SCSIMESS_BUS_DEVICE_RESET 0x0C
1134
#define SCSIMESS_CLEAR_QUEUE 0x0E
1135
#define SCSIMESS_COMMAND_COMPLETE 0x00
1136
#define SCSIMESS_DISCONNECT 0x04
1137
#define SCSIMESS_EXTENDED_MESSAGE 0x01
1138
#define SCSIMESS_IDENTIFY 0x80
1139
#define SCSIMESS_IDENTIFY_WITH_DISCON 0xC0
1140
#define SCSIMESS_IGNORE_WIDE_RESIDUE 0x23
1141
#define SCSIMESS_INITIATE_RECOVERY 0x0F
1142
#define SCSIMESS_INIT_DETECTED_ERROR 0x05
1143
#define SCSIMESS_LINK_CMD_COMP 0x0A
1144
#define SCSIMESS_LINK_CMD_COMP_W_FLAG 0x0B
1145
#define SCSIMESS_MESS_PARITY_ERROR 0x09
1146
#define SCSIMESS_MESSAGE_REJECT 0x07
1147
#define SCSIMESS_NO_OPERATION 0x08
1148
#define SCSIMESS_HEAD_OF_QUEUE_TAG 0x21
1149
#define SCSIMESS_ORDERED_QUEUE_TAG 0x22
1150
#define SCSIMESS_SIMPLE_QUEUE_TAG 0x20
1151
#define SCSIMESS_RELEASE_RECOVERY 0x10
1152
#define SCSIMESS_RESTORE_POINTERS 0x03
1153
#define SCSIMESS_SAVE_DATA_POINTER 0x02
1154
#define SCSIMESS_TERMINATE_IO_PROCESS 0x11
1156
#define CDB_FORCE_MEDIA_ACCESS 0x08
1158
#define CDB_RETURN_ON_COMPLETION 0
1159
#define CDB_RETURN_IMMEDIATE 1
1161
#define CDB_INQUIRY_EVPD 0x01
1163
#define LUN0_FORMAT_SAVING_DEFECT_LIST 0
1164
#define USE_DEFAULTMSB 0
1165
#define USE_DEFAULTLSB 0
1167
#define START_UNIT_CODE 0x01
1168
#define STOP_UNIT_CODE 0x00
2068
#endif /* (NTDDI_VERSION < NTDDI_WINXP) */
2070
#endif /* _INQUIRYDATA_DEFINED */
2072
typedef struct _VPD_MEDIA_SERIAL_NUMBER_PAGE {
2074
UCHAR DeviceTypeQualifier:3;
2078
UCHAR SerialNumber[0];
2079
} VPD_MEDIA_SERIAL_NUMBER_PAGE, *PVPD_MEDIA_SERIAL_NUMBER_PAGE;
2081
typedef struct _VPD_SERIAL_NUMBER_PAGE {
2083
UCHAR DeviceTypeQualifier:3;
2087
UCHAR SerialNumber[0];
2088
} VPD_SERIAL_NUMBER_PAGE, *PVPD_SERIAL_NUMBER_PAGE;
2090
typedef enum _VPD_CODE_SET {
2091
VpdCodeSetReserved = 0,
2092
VpdCodeSetBinary = 1,
2093
VpdCodeSetAscii = 2,
2095
} VPD_CODE_SET, *PVPD_CODE_SET;
2097
typedef enum _VPD_ASSOCIATION {
2101
VpdAssocReserved1 = 3,
2102
VpdAssocReserved2 = 4
2103
} VPD_ASSOCIATION, *PVPD_ASSOCIATION;
2105
typedef enum _VPD_IDENTIFIER_TYPE {
2106
VpdIdentifierTypeVendorSpecific = 0,
2107
VpdIdentifierTypeVendorId = 1,
2108
VpdIdentifierTypeEUI64 = 2,
2109
VpdIdentifierTypeFCPHName = 3,
2110
VpdIdentifierTypePortRelative = 4,
2111
VpdIdentifierTypeTargetPortGroup = 5,
2112
VpdIdentifierTypeLogicalUnitGroup = 6,
2113
VpdIdentifierTypeMD5LogicalUnitId = 7,
2114
VpdIdentifierTypeSCSINameString = 8
2115
} VPD_IDENTIFIER_TYPE, *PVPD_IDENTIFIER_TYPE;
2117
typedef struct _VPD_IDENTIFICATION_DESCRIPTOR {
2120
UCHAR IdentifierType:4;
2121
UCHAR Association:2;
2124
UCHAR IdentifierLength;
2125
UCHAR Identifier[0];
2126
} VPD_IDENTIFICATION_DESCRIPTOR, *PVPD_IDENTIFICATION_DESCRIPTOR;
2128
typedef struct _VPD_IDENTIFICATION_PAGE {
2130
UCHAR DeviceTypeQualifier:3;
2134
UCHAR Descriptors[0];
2135
} VPD_IDENTIFICATION_PAGE, *PVPD_IDENTIFICATION_PAGE;
2137
typedef struct _VPD_SUPPORTED_PAGES_PAGE {
2139
UCHAR DeviceTypeQualifier:3;
2143
UCHAR SupportedPageList[0];
2144
} VPD_SUPPORTED_PAGES_PAGE, *PVPD_SUPPORTED_PAGES_PAGE;
2146
typedef struct _PRI_REGISTRATION_LIST {
2147
UCHAR Generation[4];
2148
UCHAR AdditionalLength[4];
2149
UCHAR ReservationKeyList[0][8];
2150
} PRI_REGISTRATION_LIST, *PPRI_REGISTRATION_LIST;
2152
typedef struct _PRI_RESERVATION_DESCRIPTOR {
2153
UCHAR ReservationKey[8];
2154
UCHAR ScopeSpecificAddress[4];
2159
} PRI_RESERVATION_DESCRIPTOR, *PPRI_RESERVATION_DESCRIPTOR;
2161
typedef struct _PRI_RESERVATION_LIST {
2162
UCHAR Generation[4];
2163
UCHAR AdditionalLength[4];
2164
PRI_RESERVATION_DESCRIPTOR Reservations[0];
2165
} PRI_RESERVATION_LIST, *PPRI_RESERVATION_LIST;
2167
typedef struct _PRO_PARAMETER_LIST {
2168
UCHAR ReservationKey[8];
2169
UCHAR ServiceActionReservationKey[8];
2170
UCHAR ScopeSpecificAddress[4];
2171
UCHAR ActivatePersistThroughPowerLoss:1;
2175
} PRO_PARAMETER_LIST, *PPRO_PARAMETER_LIST;
1170
2177
typedef struct _SENSE_DATA {
1171
UCHAR ErrorCode : 7;
1173
UCHAR SegmentNumber;
1176
UCHAR IncorrectLength : 1;
1177
UCHAR EndOfMedia : 1;
1179
UCHAR Information[4];
1180
UCHAR AdditionalSenseLength;
1181
UCHAR CommandSpecificInformation[4];
1182
UCHAR AdditionalSenseCode;
1183
UCHAR AdditionalSenseCodeQualifier;
1184
UCHAR FieldReplaceableUnitCode;
1185
UCHAR SenseKeySpecific[3];
2180
UCHAR SegmentNumber;
2183
UCHAR IncorrectLength:1;
2186
UCHAR Information[4];
2187
UCHAR AdditionalSenseLength;
2188
UCHAR CommandSpecificInformation[4];
2189
UCHAR AdditionalSenseCode;
2190
UCHAR AdditionalSenseCodeQualifier;
2191
UCHAR FieldReplaceableUnitCode;
2192
UCHAR SenseKeySpecific[3];
1186
2193
} SENSE_DATA, *PSENSE_DATA;
1188
#define SENSE_BUFFER_SIZE 18
1191
#define SCSI_SENSE_NO_SENSE 0x00
1192
#define SCSI_SENSE_RECOVERED_ERROR 0x01
1193
#define SCSI_SENSE_NOT_READY 0x02
1194
#define SCSI_SENSE_MEDIUM_ERROR 0x03
1195
#define SCSI_SENSE_HARDWARE_ERROR 0x04
1196
#define SCSI_SENSE_ILLEGAL_REQUEST 0x05
1197
#define SCSI_SENSE_UNIT_ATTENTION 0x06
1198
#define SCSI_SENSE_DATA_PROTECT 0x07
1199
#define SCSI_SENSE_BLANK_CHECK 0x08
1200
#define SCSI_SENSE_UNIQUE 0x09
1201
#define SCSI_SENSE_COPY_ABORTED 0x0A
1202
#define SCSI_SENSE_ABORTED_COMMAND 0x0B
1203
#define SCSI_SENSE_EQUAL 0x0C
1204
#define SCSI_SENSE_VOL_OVERFLOW 0x0D
1205
#define SCSI_SENSE_MISCOMPARE 0x0E
1206
#define SCSI_SENSE_RESERVED 0x0F
1208
/* Additional tape bit */
1209
#define SCSI_ILLEGAL_LENGTH 0x20
1210
#define SCSI_EOM 0x40
1211
#define SCSI_FILE_MARK 0x80
1213
/* Additional Sense codes */
1214
#define SCSI_ADSENSE_NO_SENSE 0x00
1215
#define SCSI_ADSENSE_NO_SEEK_COMPLETE 0x02
1216
#define SCSI_ADSENSE_LUN_NOT_READY 0x04
1217
#define SCSI_ADSENSE_WRITE_ERROR 0x0C
1218
#define SCSI_ADSENSE_TRACK_ERROR 0x14
1219
#define SCSI_ADSENSE_SEEK_ERROR 0x15
1220
#define SCSI_ADSENSE_REC_DATA_NOECC 0x17
1221
#define SCSI_ADSENSE_REC_DATA_ECC 0x18
1222
#define SCSI_ADSENSE_ILLEGAL_COMMAND 0x20
1223
#define SCSI_ADSENSE_ILLEGAL_BLOCK 0x21
1224
#define SCSI_ADSENSE_INVALID_CDB 0x24
1225
#define SCSI_ADSENSE_INVALID_LUN 0x25
1226
#define SCSI_ADSENSE_WRITE_PROTECT 0x27
1227
#define SCSI_ADSENSE_MEDIUM_CHANGED 0x28
1228
#define SCSI_ADSENSE_BUS_RESET 0x29
1229
#define SCSI_ADSENSE_INSUFFICIENT_TIME_FOR_OPERATION 0x2E
1230
#define SCSI_ADSENSE_INVALID_MEDIA 0x30
1231
#define SCSI_ADSENSE_NO_MEDIA_IN_DEVICE 0x3a
1232
#define SCSI_ADSENSE_POSITION_ERROR 0x3b
1233
#define SCSI_ADSENSE_OPERATOR_REQUEST 0x5a
1234
#define SCSI_ADSENSE_FAILURE_PREDICTION_THRESHOLD_EXCEEDED 0x5d
1235
#define SCSI_ADSENSE_ILLEGAL_MODE_FOR_THIS_TRACK 0x64
1236
#define SCSI_ADSENSE_COPY_PROTECTION_FAILURE 0x6f
1237
#define SCSI_ADSENSE_POWER_CALIBRATION_ERROR 0x73
1238
#define SCSI_ADSENSE_VENDOR_UNIQUE 0x80
1239
#define SCSI_ADSENSE_MUSIC_AREA 0xA0
1240
#define SCSI_ADSENSE_DATA_AREA 0xA1
1241
#define SCSI_ADSENSE_VOLUME_OVERFLOW 0xA7
1243
#define SCSI_SENSEQ_CAUSE_NOT_REPORTABLE 0x00
1244
#define SCSI_SENSEQ_BECOMING_READY 0x01
1245
#define SCSI_SENSEQ_INIT_COMMAND_REQUIRED 0x02
1246
#define SCSI_SENSEQ_MANUAL_INTERVENTION_REQUIRED 0x03
1247
#define SCSI_SENSEQ_FORMAT_IN_PROGRESS 0x04
1248
#define SCSI_SENSEQ_REBUILD_IN_PROGRESS 0x05
1249
#define SCSI_SENSEQ_RECALCULATION_IN_PROGRESS 0x06
1250
#define SCSI_SENSEQ_OPERATION_IN_PROGRESS 0x07
1251
#define SCSI_SENSEQ_LONG_WRITE_IN_PROGRESS 0x08
1252
#define SCSI_SENSEQ_LOSS_OF_STREAMING 0x09
1253
#define SCSI_SENSEQ_PADDING_BLOCKS_ADDED 0x0A
1256
#define FILE_DEVICE_SCSI 0x0000001b
1258
#define IOCTL_SCSI_EXECUTE_IN ((FILE_DEVICE_SCSI << 16) + 0x0011)
1259
#define IOCTL_SCSI_EXECUTE_OUT ((FILE_DEVICE_SCSI << 16) + 0x0012)
1260
#define IOCTL_SCSI_EXECUTE_NONE ((FILE_DEVICE_SCSI << 16) + 0x0013)
1262
/* SMART support in ATAPI */
1263
#define IOCTL_SCSI_MINIPORT_SMART_VERSION ((FILE_DEVICE_SCSI << 16) + 0x0500)
1264
#define IOCTL_SCSI_MINIPORT_IDENTIFY ((FILE_DEVICE_SCSI << 16) + 0x0501)
1265
#define IOCTL_SCSI_MINIPORT_READ_SMART_ATTRIBS ((FILE_DEVICE_SCSI << 16) + 0x0502)
1266
#define IOCTL_SCSI_MINIPORT_READ_SMART_THRESHOLDS ((FILE_DEVICE_SCSI << 16) + 0x0503)
1267
#define IOCTL_SCSI_MINIPORT_ENABLE_SMART ((FILE_DEVICE_SCSI << 16) + 0x0504)
1268
#define IOCTL_SCSI_MINIPORT_DISABLE_SMART ((FILE_DEVICE_SCSI << 16) + 0x0505)
1269
#define IOCTL_SCSI_MINIPORT_RETURN_STATUS ((FILE_DEVICE_SCSI << 16) + 0x0506)
1270
#define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTOSAVE ((FILE_DEVICE_SCSI << 16) + 0x0507)
1271
#define IOCTL_SCSI_MINIPORT_SAVE_ATTRIBUTE_VALUES ((FILE_DEVICE_SCSI << 16) + 0x0508)
1272
#define IOCTL_SCSI_MINIPORT_EXECUTE_OFFLINE_DIAGS ((FILE_DEVICE_SCSI << 16) + 0x0509)
1273
#define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTO_OFFLINE ((FILE_DEVICE_SCSI << 16) + 0x050a)
1274
#define IOCTL_SCSI_MINIPORT_READ_SMART_LOG ((FILE_DEVICE_SCSI << 16) + 0x050b)
1275
#define IOCTL_SCSI_MINIPORT_WRITE_SMART_LOG ((FILE_DEVICE_SCSI << 16) + 0x050c)
1277
/* CLUSTER support */
1278
#define IOCTL_SCSI_MINIPORT_NOT_QUORUM_CAPABLE ((FILE_DEVICE_SCSI << 16) + 0x0520)
1279
#define IOCTL_SCSI_MINIPORT_NOT_CLUSTER_CAPABLE ((FILE_DEVICE_SCSI << 16) + 0x0521)
1281
2195
/* Read Capacity Data. Returned in Big Endian format */
1282
2196
typedef struct _READ_CAPACITY_DATA {
1283
ULONG LogicalBlockAddress;
1284
ULONG BytesPerBlock;
2197
ULONG LogicalBlockAddress;
2198
ULONG BytesPerBlock;
1285
2199
} READ_CAPACITY_DATA, *PREAD_CAPACITY_DATA;
2201
typedef struct _READ_CAPACITY_DATA_EX {
2202
LARGE_INTEGER LogicalBlockAddress;
2203
ULONG BytesPerBlock;
2204
} READ_CAPACITY_DATA_EX, *PREAD_CAPACITY_DATA_EX;
1287
2206
/* Read Block Limits Data. Returned in Big Endian format */
1288
2207
typedef struct _READ_BLOCK_LIMITS {
1290
UCHAR BlockMaximumSize[3];
1291
UCHAR BlockMinimumSize[2];
2209
UCHAR BlockMaximumSize[3];
2210
UCHAR BlockMinimumSize[2];
1292
2211
} READ_BLOCK_LIMITS_DATA, *PREAD_BLOCK_LIMITS_DATA;
1294
#define MODE_BLOCK_DESC_LENGTH 8
1295
#define MODE_HEADER_LENGTH 4
1296
#define MODE_HEADER_LENGTH10 8
2213
typedef struct _READ_BUFFER_CAPACITY_DATA {
2214
UCHAR DataLength[2];
2216
UCHAR BlockDataReturned:1;
2218
UCHAR TotalBufferSize[4];
2219
UCHAR AvailableBufferSize[4];
2220
} READ_BUFFER_CAPACITY_DATA, *PREAD_BUFFER_CAPACITY_DATA;
1298
2222
typedef struct _MODE_PARAMETER_HEADER {
1299
UCHAR ModeDataLength;
1301
UCHAR DeviceSpecificParameter;
1302
UCHAR BlockDescriptorLength;
2223
UCHAR ModeDataLength;
2225
UCHAR DeviceSpecificParameter;
2226
UCHAR BlockDescriptorLength;
1303
2227
} MODE_PARAMETER_HEADER, *PMODE_PARAMETER_HEADER;
1305
2229
typedef struct _MODE_PARAMETER_HEADER10 {
1306
UCHAR ModeDataLength[2];
1308
UCHAR DeviceSpecificParameter;
1310
UCHAR BlockDescriptorLength[2];
2230
UCHAR ModeDataLength[2];
2232
UCHAR DeviceSpecificParameter;
2234
UCHAR BlockDescriptorLength[2];
1311
2235
} MODE_PARAMETER_HEADER10, *PMODE_PARAMETER_HEADER10;
1313
#define MODE_FD_SINGLE_SIDE 0x01
1314
#define MODE_FD_DOUBLE_SIDE 0x02
1315
#define MODE_FD_MAXIMUM_TYPE 0x1E
1316
#define MODE_DSP_FUA_SUPPORTED 0x10
1317
#define MODE_DSP_WRITE_PROTECT 0x80
1319
2237
typedef struct _MODE_PARAMETER_BLOCK {
1321
UCHAR NumberOfBlocks[3];
1323
UCHAR BlockLength[3];
2239
UCHAR NumberOfBlocks[3];
2241
UCHAR BlockLength[3];
1324
2242
} MODE_PARAMETER_BLOCK, *PMODE_PARAMETER_BLOCK;
1326
2244
typedef struct _MODE_DISCONNECT_PAGE {
1329
UCHAR PageSavable : 1;
1331
UCHAR BufferFullRatio;
1332
UCHAR BufferEmptyRatio;
1333
UCHAR BusInactivityLimit[2];
1334
UCHAR BusDisconnectTime[2];
1335
UCHAR BusConnectTime[2];
1336
UCHAR MaximumBurstSize[2];
1337
UCHAR DataTransferDisconnect : 2;
2247
UCHAR PageSavable:1;
2249
UCHAR BufferFullRatio;
2250
UCHAR BufferEmptyRatio;
2251
UCHAR BusInactivityLimit[2];
2252
UCHAR BusDisconnectTime[2];
2253
UCHAR BusConnectTime[2];
2254
UCHAR MaximumBurstSize[2];
2255
UCHAR DataTransferDisconnect:2;
1339
2257
} MODE_DISCONNECT_PAGE, *PMODE_DISCONNECT_PAGE;
1341
2259
typedef struct _MODE_CACHING_PAGE {
1344
UCHAR PageSavable : 1;
1346
UCHAR ReadDisableCache : 1;
1347
UCHAR MultiplicationFactor : 1;
1348
UCHAR WriteCacheEnable : 1;
1349
UCHAR Reserved2 : 5;
1350
UCHAR WriteRetensionPriority : 4;
1351
UCHAR ReadRetensionPriority : 4;
1352
UCHAR DisablePrefetchTransfer[2];
1353
UCHAR MinimumPrefetch[2];
1354
UCHAR MaximumPrefetch[2];
1355
UCHAR MaximumPrefetchCeiling[2];
2262
UCHAR PageSavable:1;
2264
UCHAR ReadDisableCache:1;
2265
UCHAR MultiplicationFactor:1;
2266
UCHAR WriteCacheEnable:1;
2268
UCHAR WriteRetensionPriority:4;
2269
UCHAR ReadRetensionPriority:4;
2270
UCHAR DisablePrefetchTransfer[2];
2271
UCHAR MinimumPrefetch[2];
2272
UCHAR MaximumPrefetch[2];
2273
UCHAR MaximumPrefetchCeiling[2];
1356
2274
} MODE_CACHING_PAGE, *PMODE_CACHING_PAGE;
1358
typedef struct _MODE_CDROM_WRITE_PARAMETERS_PAGE {
1360
UCHAR WriteType : 4;
1361
UCHAR TestWrite : 1;
1362
UCHAR LinkSizeValid : 1;
1363
UCHAR BufferUnderrunFreeEnabled : 1;
1364
UCHAR Reserved2 : 1;
1365
UCHAR TrackMode : 4;
1367
UCHAR FixedPacket : 1;
1368
UCHAR MultiSession : 2;
1369
UCHAR DataBlockType : 4;
1370
UCHAR Reserved3 : 4;
1373
UCHAR HostApplicationCode : 6;
1374
UCHAR Reserved5 : 2;
1375
UCHAR SessionFormat;
1377
UCHAR PacketSize[4];
1378
UCHAR AudioPauseLength[2];
1379
UCHAR Reserved7 : 7;
1380
UCHAR MediaCatalogNumberValid : 1;
1381
UCHAR MediaCatalogNumber[13];
1382
UCHAR MediaCatalogNumberZero;
1383
UCHAR MediaCatalogNumberAFrame;
1384
UCHAR Reserved8 : 7;
1385
UCHAR ISRCValid : 1;
1386
UCHAR ISRCCountry[2];
1388
UCHAR ISRCRecordingYear[2];
1389
UCHAR ISRCSerialNumber[5];
1393
UCHAR SubHeaderData[4];
1394
} MODE_CDROM_WRITE_PARAMETERS_PAGE, *PMODE_CDROM_WRITE_PARAMETERS_PAGE;
2276
typedef struct _MODE_CDROM_WRITE_PARAMETERS_PAGE2 {
2279
UCHAR PageSavable:1;
2283
UCHAR LinkSizeValid:1;
2284
UCHAR BufferUnderrunFreeEnabled:1;
2288
UCHAR FixedPacket:1;
2289
UCHAR MultiSession:2;
2290
UCHAR DataBlockType:4;
2294
UCHAR HostApplicationCode:6;
2296
UCHAR SessionFormat;
2298
UCHAR PacketSize[4];
2299
UCHAR AudioPauseLength[2];
2300
UCHAR MediaCatalogNumber[16];
2302
UCHAR SubHeaderData[4];
2303
} MODE_CDROM_WRITE_PARAMETERS_PAGE2, *PMODE_CDROM_WRITE_PARAMETERS_PAGE2;
2305
typedef struct _MODE_MRW_PAGE {
2308
UCHAR PageSavable:1;
2314
} MODE_MRW_PAGE, *PMODE_MRW_PAGE;
1396
2316
typedef struct _MODE_FLEXIBLE_DISK_PAGE {
1399
UCHAR PageSavable : 1;
1401
UCHAR TransferRate[2];
1402
UCHAR NumberOfHeads;
1403
UCHAR SectorsPerTrack;
1404
UCHAR BytesPerSector[2];
1405
UCHAR NumberOfCylinders[2];
1406
UCHAR StartWritePrecom[2];
1407
UCHAR StartReducedCurrent[2];
1409
UCHAR StepPluseWidth;
1410
UCHAR HeadSettleDelay[2];
1412
UCHAR MotorOffDelay;
1413
UCHAR Reserved2 : 5;
1414
UCHAR MotorOnAsserted : 1;
1415
UCHAR StartSectorNumber : 1;
1416
UCHAR TrueReadySignal : 1;
1417
UCHAR StepPlusePerCyclynder : 4;
1418
UCHAR Reserved3 : 4;
1419
UCHAR WriteCompenstation;
1420
UCHAR HeadLoadDelay;
1421
UCHAR HeadUnloadDelay;
1422
UCHAR Pin2Usage : 4;
1423
UCHAR Pin34Usage : 4;
1424
UCHAR Pin1Usage : 4;
1425
UCHAR Pin4Usage : 4;
1426
UCHAR MediumRotationRate[2];
2319
UCHAR PageSavable:1;
2321
UCHAR TransferRate[2];
2322
UCHAR NumberOfHeads;
2323
UCHAR SectorsPerTrack;
2324
UCHAR BytesPerSector[2];
2325
UCHAR NumberOfCylinders[2];
2326
UCHAR StartWritePrecom[2];
2327
UCHAR StartReducedCurrent[2];
2329
UCHAR StepPluseWidth;
2330
UCHAR HeadSettleDelay[2];
2332
UCHAR MotorOffDelay;
2334
UCHAR MotorOnAsserted:1;
2335
UCHAR StartSectorNumber:1;
2336
UCHAR TrueReadySignal:1;
2337
UCHAR StepPlusePerCyclynder:4;
2339
UCHAR WriteCompenstation;
2340
UCHAR HeadLoadDelay;
2341
UCHAR HeadUnloadDelay;
2346
UCHAR MediumRotationRate[2];
1428
2348
} MODE_FLEXIBLE_DISK_PAGE, *PMODE_FLEXIBLE_DISK_PAGE;
1430
2350
typedef struct _MODE_FORMAT_PAGE {
1433
UCHAR PageSavable : 1;
1435
UCHAR TracksPerZone[2];
1436
UCHAR AlternateSectorsPerZone[2];
1437
UCHAR AlternateTracksPerZone[2];
1438
UCHAR AlternateTracksPerLogicalUnit[2];
1439
UCHAR SectorsPerTrack[2];
1440
UCHAR BytesPerPhysicalSector[2];
1441
UCHAR Interleave[2];
1442
UCHAR TrackSkewFactor[2];
1443
UCHAR CylinderSkewFactor[2];
1444
UCHAR Reserved2 : 4;
1445
UCHAR SurfaceFirst : 1;
1446
UCHAR RemovableMedia : 1;
1447
UCHAR HardSectorFormating : 1;
1448
UCHAR SoftSectorFormating : 1;
2353
UCHAR PageSavable:1;
2355
UCHAR TracksPerZone[2];
2356
UCHAR AlternateSectorsPerZone[2];
2357
UCHAR AlternateTracksPerZone[2];
2358
UCHAR AlternateTracksPerLogicalUnit[2];
2359
UCHAR SectorsPerTrack[2];
2360
UCHAR BytesPerPhysicalSector[2];
2361
UCHAR Interleave[2];
2362
UCHAR TrackSkewFactor[2];
2363
UCHAR CylinderSkewFactor[2];
2365
UCHAR SurfaceFirst:1;
2366
UCHAR RemovableMedia:1;
2367
UCHAR HardSectorFormating:1;
2368
UCHAR SoftSectorFormating:1;
1450
2370
} MODE_FORMAT_PAGE, *PMODE_FORMAT_PAGE;
1452
2372
typedef struct _MODE_RIGID_GEOMETRY_PAGE {
1455
UCHAR PageSavable : 1;
1457
UCHAR NumberOfCylinders[3];
1458
UCHAR NumberOfHeads;
1459
UCHAR StartWritePrecom[3];
1460
UCHAR StartReducedCurrent[3];
1461
UCHAR DriveStepRate[2];
1462
UCHAR LandZoneCyclinder[3];
1463
UCHAR RotationalPositionLock : 2;
1464
UCHAR Reserved2 : 6;
1465
UCHAR RotationOffset;
1467
UCHAR RoataionRate[2];
2375
UCHAR PageSavable:1;
2377
UCHAR NumberOfCylinders[3];
2378
UCHAR NumberOfHeads;
2379
UCHAR StartWritePrecom[3];
2380
UCHAR StartReducedCurrent[3];
2381
UCHAR DriveStepRate[2];
2382
UCHAR LandZoneCyclinder[3];
2383
UCHAR RotationalPositionLock:2;
2385
UCHAR RotationOffset;
2387
UCHAR RoataionRate[2];
1469
2389
} MODE_RIGID_GEOMETRY_PAGE, *PMODE_RIGID_GEOMETRY_PAGE;
1471
2391
typedef struct _MODE_READ_WRITE_RECOVERY_PAGE {
1473
UCHAR Reserved1 : 1;
1484
UCHAR ReadRetryCount;
1486
UCHAR WriteRetryCount;
2404
UCHAR ReadRetryCount;
2406
UCHAR WriteRetryCount;
1488
2408
} MODE_READ_WRITE_RECOVERY_PAGE, *PMODE_READ_WRITE_RECOVERY_PAGE;
1490
2410
typedef struct _MODE_READ_RECOVERY_PAGE {
1492
UCHAR Reserved1 : 1;
1498
UCHAR Reserved2 : 1;
1501
UCHAR Reserved3 : 2;
1502
UCHAR ReadRetryCount;
2422
UCHAR ReadRetryCount;
1504
2424
} MODE_READ_RECOVERY_PAGE, *PMODE_READ_RECOVERY_PAGE;
1506
2426
typedef struct _MODE_INFO_EXCEPTIONS {
1508
UCHAR Reserved1 : 1;
1511
2431
_ANONYMOUS_UNION union {
1513
2433
_ANONYMOUS_STRUCT struct {
1515
UCHAR Reserved2 : 1;
1518
UCHAR Reserved3 : 3;
1520
2440
} DUMMYSTRUCTNAME;
1521
2441
} DUMMYUNIONNAME;
1522
UCHAR ReportMethod : 4;
1523
UCHAR Reserved4 : 4;
1524
UCHAR IntervalTimer[4];
1525
UCHAR ReportCount[4];
2442
UCHAR ReportMethod:4;
2444
UCHAR IntervalTimer[4];
2445
UCHAR ReportCount[4];
1526
2446
} MODE_INFO_EXCEPTIONS, *PMODE_INFO_EXCEPTIONS;
1528
/* CDROM audio control */
1529
#define CDB_AUDIO_PAUSE 0x00
1530
#define CDB_AUDIO_RESUME 0x01
1531
#define CDB_DEVICE_START 0x11
1532
#define CDB_DEVICE_STOP 0x10
1533
#define CDB_EJECT_MEDIA 0x10
1534
#define CDB_LOAD_MEDIA 0x01
1535
#define CDB_SUBCHANNEL_HEADER 0x00
1536
#define CDB_SUBCHANNEL_BLOCK 0x01
1538
#define CDROM_AUDIO_CONTROL_PAGE 0x0E
1539
#define MODE_SELECT_IMMEDIATE 0x04
1540
#define MODE_SELECT_PFBIT 0x10
1542
#define CDB_USE_MSF 0x01
2448
typedef struct _POWER_CONDITION_PAGE {
2458
UCHAR StandbyTimer[4];
2459
} POWER_CONDITION_PAGE, *PPOWER_CONDITION_PAGE;
2461
typedef struct _CDDA_OUTPUT_PORT {
2462
UCHAR ChannelSelection:4;
2465
} CDDA_OUTPUT_PORT, *PCDDA_OUTPUT_PORT;
2467
typedef struct _CDAUDIO_CONTROL_PAGE {
2473
UCHAR StopOnTrackCrossing:1;
2478
CDDA_OUTPUT_PORT CDDAOutputPorts[4];
2479
} CDAUDIO_CONTROL_PAGE, *PCDAUDIO_CONTROL_PAGE;
2481
typedef struct _CDVD_FEATURE_SET_PAGE {
2487
UCHAR EmbeddedChanger[2];
2488
UCHAR PacketSMART[2];
2489
UCHAR PersistantPrevent[2];
2490
UCHAR EventStatusNotification[2];
2491
UCHAR DigitalOutput[2];
2492
UCHAR CDSequentialRecordable[2];
2493
UCHAR DVDSequentialRecordable[2];
2494
UCHAR RandomRecordable[2];
2495
UCHAR KeyExchange[2];
2497
} CDVD_FEATURE_SET_PAGE, *PCDVD_FEATURE_SET_PAGE;
2499
typedef struct _CDVD_INACTIVITY_TIMEOUT_PAGE {
2509
UCHAR GroupOneMinimumTimeout[2];
2510
UCHAR GroupTwoMinimumTimeout[2];
2511
} CDVD_INACTIVITY_TIMEOUT_PAGE, *PCDVD_INACTIVITY_TIMEOUT_PAGE;
2513
typedef struct _CDVD_CAPABILITIES_PAGE {
2530
UCHAR DVDRAMWrite:1;
2534
UCHAR DigitalPortOne:1;
2535
UCHAR DigitalPortTwo:1;
2538
UCHAR MultiSession:1;
2539
UCHAR BufferUnderrunFree:1;
2541
UCHAR CDDAAccurate:1;
2542
UCHAR RWSupported:1;
2543
UCHAR RWDeinterleaved:1;
2547
UCHAR ReadBarCodeCapable:1;
2550
UCHAR PreventJumper:1;
2553
UCHAR LoadingMechanismType:3;
2554
UCHAR SeparateVolume:1;
2555
UCHAR SeperateChannelMute:1;
2556
UCHAR SupportsDiskPresent:1;
2557
UCHAR SWSlotSelection:1;
2558
UCHAR SideChangeCapable:1;
2559
UCHAR RWInLeadInReadable:1;
2561
_ANONYMOUS_UNION union {
2562
UCHAR ReadSpeedMaximum[2];
2563
UCHAR ObsoleteReserved[2];
2565
UCHAR NumberVolumeLevels[2];
2566
UCHAR BufferSize[2];
2567
_ANONYMOUS_UNION union {
2568
UCHAR ReadSpeedCurrent[2];
2569
UCHAR ObsoleteReserved2[2];
2571
UCHAR ObsoleteReserved3;
2578
_ANONYMOUS_UNION union {
2579
UCHAR WriteSpeedMaximum[2];
2580
UCHAR ObsoleteReserved4[2];
2582
_ANONYMOUS_UNION union {
2583
UCHAR WriteSpeedCurrent[2];
2584
UCHAR ObsoleteReserved11[2];
2586
_ANONYMOUS_UNION union {
2587
UCHAR CopyManagementRevision[2];
2588
UCHAR Reserved10[2];
2590
} CDVD_CAPABILITIES_PAGE, *PCDVD_CAPABILITIES_PAGE;
2592
typedef struct _LUN_LIST {
2593
UCHAR LunListLength[4];
2596
} LUN_LIST, *PLUN_LIST;
2598
typedef struct _MODE_PARM_READ_WRITE {
2599
MODE_PARAMETER_HEADER ParameterListHeader;
2600
MODE_PARAMETER_BLOCK ParameterListBlock;
2601
} MODE_PARM_READ_WRITE_DATA, *PMODE_PARM_READ_WRITE_DATA;
1544
2603
typedef struct _PORT_OUTPUT {
1545
UCHAR ChannelSelection;
2604
UCHAR ChannelSelection;
1547
2606
} PORT_OUTPUT, *PPORT_OUTPUT;
1549
2608
typedef struct _AUDIO_OUTPUT {
1551
UCHAR ParameterLength;
1555
UCHAR LogicalBlocksPerSecond[2];
1556
PORT_OUTPUT PortOutput[4];
2610
UCHAR ParameterLength;
2614
UCHAR LogicalBlocksPerSecond[2];
2615
PORT_OUTPUT PortOutput[4];
1557
2616
} AUDIO_OUTPUT, *PAUDIO_OUTPUT;
1559
/* Multisession CDROMs */
1560
#define GET_LAST_SESSION 0x01
1561
#define GET_SESSION_DATA 0x02;
1563
2618
/* Atapi 2.5 changers */
1564
2619
typedef struct _MECHANICAL_STATUS_INFORMATION_HEADER {
1565
UCHAR CurrentSlot : 5;
1566
UCHAR ChangerState : 2;
1569
UCHAR MechanismState : 3;
1570
UCHAR CurrentLogicalBlockAddress[3];
1571
UCHAR NumberAvailableSlots;
1572
UCHAR SlotTableLength[2];
2620
UCHAR CurrentSlot:5;
2621
UCHAR ChangerState:2;
2624
UCHAR MechanismState:3;
2625
UCHAR CurrentLogicalBlockAddress[3];
2626
UCHAR NumberAvailableSlots;
2627
UCHAR SlotTableLength[2];
1573
2628
} MECHANICAL_STATUS_INFORMATION_HEADER, *PMECHANICAL_STATUS_INFORMATION_HEADER;
1575
2630
typedef struct _SLOT_TABLE_INFORMATION {
1576
UCHAR DiscChanged : 1;
1578
UCHAR DiscPresent : 1;
2631
UCHAR DiscChanged:1;
2633
UCHAR DiscPresent:1;
1580
2635
} SLOT_TABLE_INFORMATION, *PSLOT_TABLE_INFORMATION;
1582
2637
typedef struct _MECHANICAL_STATUS {
1583
MECHANICAL_STATUS_INFORMATION_HEADER MechanicalStatusHeader;
1584
SLOT_TABLE_INFORMATION SlotTableInfo[1];
2638
MECHANICAL_STATUS_INFORMATION_HEADER MechanicalStatusHeader;
2639
SLOT_TABLE_INFORMATION SlotTableInfo[1];
1585
2640
} MECHANICAL_STATUS, *PMECHANICAL_STATUS;
1588
2642
/* Tape definitions */
1589
2643
typedef struct _TAPE_POSITION_DATA {
1590
UCHAR Reserved1 : 2;
1591
UCHAR BlockPositionUnsupported : 1;
1592
UCHAR Reserved2 : 3;
1593
UCHAR EndOfPartition : 1;
1594
UCHAR BeginningOfPartition : 1;
1595
UCHAR PartitionNumber;
1597
UCHAR FirstBlock[4];
1600
UCHAR NumberOfBlocks[3];
1601
UCHAR NumberOfBytes[4];
2645
UCHAR BlockPositionUnsupported:1;
2647
UCHAR EndOfPartition:1;
2648
UCHAR BeginningOfPartition:1;
2649
UCHAR PartitionNumber;
2651
UCHAR FirstBlock[4];
2654
UCHAR NumberOfBlocks[3];
2655
UCHAR NumberOfBytes[4];
1602
2656
} TAPE_POSITION_DATA, *PTAPE_POSITION_DATA;
1604
2658
/* This structure is used to convert little endian ULONGs
1605
2659
to SCSI CDB big endians values. */
1606
2660
typedef union _EIGHT_BYTE {
1607
2661
_ANONYMOUS_STRUCT struct {
1616
2670
} DUMMYSTRUCTNAME;
1617
ULONGLONG AsULongLong;
2671
ULONGLONG AsULongLong;
1618
2672
} EIGHT_BYTE, *PEIGHT_BYTE;
1620
2674
typedef union _FOUR_BYTE {
1621
2675
_ANONYMOUS_STRUCT struct {
1626
2680
} DUMMYSTRUCTNAME;
1628
2682
} FOUR_BYTE, *PFOUR_BYTE;
1630
2684
typedef union _TWO_BYTE {
1631
2685
_ANONYMOUS_STRUCT struct {
1634
2688
} DUMMYSTRUCTNAME;
1636
2690
} TWO_BYTE, *PTWO_BYTE;
1638
2692
/* Byte reversing macro for converting between
1639
2693
big- and little-endian formats */
1640
2694
#define REVERSE_BYTES_QUAD(Destination, Source) { \
1641
PEIGHT_BYTE _val1 = (PEIGHT_BYTE)(Destination); \
1642
PEIGHT_BYTE _val2 = (PEIGHT_BYTE)(Source); \
1643
_val1->Byte7 = _val2->Byte0; \
1644
_val1->Byte6 = _val2->Byte1; \
1645
_val1->Byte5 = _val2->Byte2; \
1646
_val1->Byte4 = _val2->Byte3; \
1647
_val1->Byte3 = _val2->Byte4; \
1648
_val1->Byte2 = _val2->Byte5; \
1649
_val1->Byte1 = _val2->Byte6; \
1650
_val1->Byte0 = _val2->Byte7; \
2695
PEIGHT_BYTE _val1 = (PEIGHT_BYTE)(Destination); \
2696
PEIGHT_BYTE _val2 = (PEIGHT_BYTE)(Source); \
2697
_val1->Byte7 = _val2->Byte0; \
2698
_val1->Byte6 = _val2->Byte1; \
2699
_val1->Byte5 = _val2->Byte2; \
2700
_val1->Byte4 = _val2->Byte3; \
2701
_val1->Byte3 = _val2->Byte4; \
2702
_val1->Byte2 = _val2->Byte5; \
2703
_val1->Byte1 = _val2->Byte6; \
2704
_val1->Byte0 = _val2->Byte7; \
1653
2707
#define REVERSE_BYTES(Destination, Source) { \
1654
PFOUR_BYTE _val1 = (PFOUR_BYTE)(Destination); \
1655
PFOUR_BYTE _val2 = (PFOUR_BYTE)(Source); \
1656
_val1->Byte3 = _val2->Byte0; \
1657
_val1->Byte2 = _val2->Byte1; \
1658
_val1->Byte1 = _val2->Byte2; \
1659
_val1->Byte0 = _val2->Byte3; \
2708
PFOUR_BYTE _val1 = (PFOUR_BYTE)(Destination); \
2709
PFOUR_BYTE _val2 = (PFOUR_BYTE)(Source); \
2710
_val1->Byte3 = _val2->Byte0; \
2711
_val1->Byte2 = _val2->Byte1; \
2712
_val1->Byte1 = _val2->Byte2; \
2713
_val1->Byte0 = _val2->Byte3; \
1662
2716
#define REVERSE_BYTES_SHORT(Destination, Source) { \