Revert the sync.
[reactos.git] / include / ddk / scsi.h
1 /*
2 * scsi.h
3 *
4 * SCSI port and class interface.
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 */
22
23 #ifndef _NTSCSI_
24 #define _NTSCSI_
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
30 #ifndef _NTSCSI_USER_MODE_
31 #include "srb.h"
32 #endif
33
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
40
41
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
49
50 #define NOTIFICATION_OPERATIONAL_EVENT_NO_CHANGE 0x0
51 #define NOTIFICATION_OPERATIONAL_EVENT_CHANGE_REQUESTED 0x1
52 #define NOTIFICATION_OPERATIONAL_EVENT_CHANGE_OCCURRED 0x2
53
54 #define NOTIFICATION_OPERATIONAL_STATUS_AVAILABLE 0x0
55 #define NOTIFICATION_OPERATIONAL_STATUS_TEMPORARY_BUSY 0x1
56 #define NOTIFICATION_OPERATIONAL_STATUS_EXTENDED_BUSY 0x2
57
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
64
65 #define NOTIFICATION_POWER_EVENT_NO_CHANGE 0x0
66 #define NOTIFICATION_POWER_EVENT_CHANGE_SUCCEEDED 0x1
67 #define NOTIFICATION_POWER_EVENT_CHANGE_FAILED 0x2
68
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
73
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
79
80 #define NOTIFICATION_EXTERNAL_STATUS_READY 0x0
81 #define NOTIFICATION_EXTERNAL_STATUS_PREVENT 0x1
82
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
92
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
98
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
104
105 #define NOTIFICATION_MULTI_HOST_STATUS_READY 0x0
106 #define NOTIFICATION_MULTI_HOST_STATUS_PREVENT 0x1
107
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
112
113 #define NOTIFICATION_BUSY_EVENT_NO_EVENT 0x0
114 #define NOTIFICATION_BUSY_EVENT_NO_CHANGE 0x0
115 #define NOTIFICATION_BUSY_EVENT_BUSY 0x1
116
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
121
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
127
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
135
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
143
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
150
151 #define DISK_STATUS_EMPTY 0x00
152 #define DISK_STATUS_INCOMPLETE 0x01
153 #define DISK_STATUS_COMPLETE 0x02
154 #define DISK_STATUS_OTHERS 0x03
155
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
160
161 #define DISK_TYPE_CDDA 0x00
162 #define DISK_TYPE_CDI 0x10
163 #define DISK_TYPE_XA 0x20
164 #define DISK_TYPE_UNDEFINED 0xFF
165
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
170
171 #define DATA_BLOCK_MODE0 0x0
172 #define DATA_BLOCK_MODE1 0x1
173 #define DATA_BLOCK_MODE2 0x2
174
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
181
182 #define CDB6GENERIC_LENGTH 6
183 #define CDB10GENERIC_LENGTH 10
184 #define CDB12GENERIC_LENGTH 12
185
186 #define SETBITON 1
187 #define SETBITOFF 0
188
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
223
224 #define MODE_SENSE_RETURN_ALL 0x3f
225
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
230
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
271
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
328
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
376
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
403
404 #define CDB_RETURN_ON_COMPLETION 0
405 #define CDB_RETURN_IMMEDIATE 1
406
407 #define CDB_FORCE_MEDIA_ACCESS 0x08
408
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
414
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
439
440 #define SCSIMESS_MODIFY_DATA_POINTER 0X00
441 #define SCSIMESS_SYNCHRONOUS_DATA_REQ 0X01
442 #define SCSIMESS_WIDE_DATA_REQUEST 0X03
443
444 #define SCSIMESS_MODIFY_DATA_LENGTH 5
445 #define SCSIMESS_SYNCH_DATA_LENGTH 3
446 #define SCSIMESS_WIDE_DATA_LENGTH 2
447
448 #define CDB_INQUIRY_EVPD 0x01
449
450 #define LUN0_FORMAT_SAVING_DEFECT_LIST 0
451 #define USE_DEFAULTMSB 0
452 #define USE_DEFAULTLSB 0
453
454 #define START_UNIT_CODE 0x01
455 #define STOP_UNIT_CODE 0x00
456
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
475
476 #define DEVICE_QUALIFIER_ACTIVE 0x00
477 #define DEVICE_QUALIFIER_NOT_ACTIVE 0x01
478 #define DEVICE_QUALIFIER_NOT_SUPPORTED 0x03
479
480 /* INQUIRYDATA.DeviceTypeQualifier constants */
481 #define DEVICE_CONNECTED 0x00
482
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
492
493 #define VPD_MAX_BUFFER_SIZE 0xff
494
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
504
505 #define RESERVATION_ACTION_READ_KEYS 0x00
506 #define RESERVATION_ACTION_READ_RESERVATIONS 0x01
507
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
515
516 #define RESERVATION_SCOPE_LU 0x00
517 #define RESERVATION_SCOPE_ELEMENT 0x02
518
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
523
524 #define SENSE_BUFFER_SIZE 18
525
526 #define MAX_SENSE_BUFFER_SIZE 255
527
528 #define MAX_ADDITIONAL_SENSE_BYTES (MAX_SENSE_BUFFER_SIZE - SENSE_BUFFER_SIZE)
529
530 /* Sense codes */
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
547
548 /* Additional tape bit */
549 #define SCSI_ILLEGAL_LENGTH 0x20
550 #define SCSI_EOM 0x40
551 #define SCSI_FILE_MARK 0x80
552
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
587
588 #define SCSI_ADWRITE_PROTECT SCSI_ADSENSE_WRITE_PROTECT
589 #define SCSI_FAILURE_PREDICTION_THRESHOLD_EXCEEDED SCSI_ADSENSE_FAILURE_PREDICTION_THRESHOLD_EXCEEDED
590
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
602
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
608
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
613
614 #define SCSI_SENSEQ_ILLEGAL_ELEMENT_ADDR 0x01
615
616 #define SCSI_SENSEQ_DESTINATION_FULL 0x0d
617 #define SCSI_SENSEQ_SOURCE_EMPTY 0x0e
618
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
623
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
642
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
647
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
654
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
661
662 #define FILE_DEVICE_SCSI 0x0000001b
663
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)
667
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)
682
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)
686
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
692
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
698
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
707
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
713
714 #define MODE_BLOCK_DESC_LENGTH 8
715 #define MODE_HEADER_LENGTH 4
716 #define MODE_HEADER_LENGTH10 8
717
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
727
728 #define CDROM_AUDIO_CONTROL_PAGE 0x0E
729 #define MODE_SELECT_IMMEDIATE 0x04
730 #define MODE_SELECT_PFBIT 0x10
731
732 #define CDB_USE_MSF 0x01
733
734 /* Multisession CDROMs */
735 #define GET_LAST_SESSION 0x01
736 #define GET_SESSION_DATA 0x02
737
738 typedef union _CDB {
739 struct _CDB6GENERIC {
740 UCHAR OperationCode;
741 UCHAR Immediate:1;
742 UCHAR CommandUniqueBits:4;
743 UCHAR LogicalUnitNumber:3;
744 UCHAR CommandUniqueBytes[3];
745 UCHAR Link:1;
746 UCHAR Flag:1;
747 UCHAR Reserved:4;
748 UCHAR VendorUnique:2;
749 } CDB6GENERIC, *PCDB6GENERIC;
750 struct _CDB6READWRITE {
751 UCHAR OperationCode;
752 UCHAR LogicalBlockMsb1:5;
753 UCHAR LogicalUnitNumber:3;
754 UCHAR LogicalBlockMsb0;
755 UCHAR LogicalBlockLsb;
756 UCHAR TransferBlocks;
757 UCHAR Control;
758 } CDB6READWRITE, *PCDB6READWRITE;
759 struct _CDB6INQUIRY {
760 UCHAR OperationCode;
761 UCHAR Reserved1:5;
762 UCHAR LogicalUnitNumber:3;
763 UCHAR PageCode;
764 UCHAR IReserved;
765 UCHAR AllocationLength;
766 UCHAR Control;
767 } CDB6INQUIRY, *PCDB6INQUIRY;
768 struct _CDB6INQUIRY3 {
769 UCHAR OperationCode;
770 UCHAR EnableVitalProductData:1;
771 UCHAR CommandSupportData:1;
772 UCHAR Reserved1:6;
773 UCHAR PageCode;
774 UCHAR Reserved2;
775 UCHAR AllocationLength;
776 UCHAR Control;
777 } CDB6INQUIRY3, *PCDB6INQUIRY3;
778 struct _CDB6VERIFY {
779 UCHAR OperationCode;
780 UCHAR Fixed:1;
781 UCHAR ByteCompare:1;
782 UCHAR Immediate:1;
783 UCHAR Reserved:2;
784 UCHAR LogicalUnitNumber:3;
785 UCHAR VerificationLength[3];
786 UCHAR Control;
787 } CDB6VERIFY, *PCDB6VERIFY;
788 struct _CDB6FORMAT {
789 UCHAR OperationCode;
790 UCHAR FormatControl:5;
791 UCHAR LogicalUnitNumber:3;
792 UCHAR FReserved1;
793 UCHAR InterleaveMsb;
794 UCHAR InterleaveLsb;
795 UCHAR FReserved2;
796 } CDB6FORMAT, *PCDB6FORMAT;
797 struct _CDB10 {
798 UCHAR OperationCode;
799 UCHAR RelativeAddress:1;
800 UCHAR Reserved1:2;
801 UCHAR ForceUnitAccess:1;
802 UCHAR DisablePageOut:1;
803 UCHAR LogicalUnitNumber:3;
804 UCHAR LogicalBlockByte0;
805 UCHAR LogicalBlockByte1;
806 UCHAR LogicalBlockByte2;
807 UCHAR LogicalBlockByte3;
808 UCHAR Reserved2;
809 UCHAR TransferBlocksMsb;
810 UCHAR TransferBlocksLsb;
811 UCHAR Control;
812 } CDB10, *PCDB10;
813 struct _CDB12 {
814 UCHAR OperationCode;
815 UCHAR RelativeAddress:1;
816 UCHAR Reserved1:2;
817 UCHAR ForceUnitAccess:1;
818 UCHAR DisablePageOut:1;
819 UCHAR LogicalUnitNumber:3;
820 UCHAR LogicalBlock[4];
821 UCHAR TransferLength[4];
822 UCHAR Reserved2;
823 UCHAR Control;
824 } CDB12, *PCDB12;
825 struct _CDB16 {
826 UCHAR OperationCode;
827 UCHAR Reserved1:3;
828 UCHAR ForceUnitAccess:1;
829 UCHAR DisablePageOut:1;
830 UCHAR Protection:3;
831 UCHAR LogicalBlock[8];
832 UCHAR TransferLength[4];
833 UCHAR Reserved2;
834 UCHAR Control;
835 } CDB16, *PCDB16;
836 struct _PAUSE_RESUME {
837 UCHAR OperationCode;
838 UCHAR Reserved1:5;
839 UCHAR LogicalUnitNumber:3;
840 UCHAR Reserved2[6];
841 UCHAR Action;
842 UCHAR Control;
843 } PAUSE_RESUME, *PPAUSE_RESUME;
844 struct _READ_TOC {
845 UCHAR OperationCode;
846 UCHAR Reserved0:1;
847 UCHAR Msf:1;
848 UCHAR Reserved1:3;
849 UCHAR LogicalUnitNumber:3;
850 UCHAR Format2:4;
851 UCHAR Reserved2:4;
852 UCHAR Reserved3[3];
853 UCHAR StartingTrack;
854 UCHAR AllocationLength[2];
855 UCHAR Control:6;
856 UCHAR Format:2;
857 } READ_TOC, *PREAD_TOC;
858 struct _READ_DISK_INFORMATION {
859 UCHAR OperationCode;
860 UCHAR Reserved1:5;
861 UCHAR Lun:3;
862 UCHAR Reserved2[5];
863 UCHAR AllocationLength[2];
864 UCHAR Control;
865 } READ_DISK_INFORMATION, *PREAD_DISK_INFORMATION;
866 struct _READ_TRACK_INFORMATION {
867 UCHAR OperationCode;
868 UCHAR Track:1;
869 UCHAR Reserved1:3;
870 UCHAR Reserved2:1;
871 UCHAR Lun:3;
872 UCHAR BlockAddress[4];
873 UCHAR Reserved3;
874 UCHAR AllocationLength[2];
875 UCHAR Control;
876 } READ_TRACK_INFORMATION, *PREAD_TRACK_INFORMATION;
877 struct _RESERVE_TRACK_RZONE {
878 UCHAR OperationCode;
879 UCHAR Reserved1[4];
880 UCHAR ReservationSize[4];
881 UCHAR Control;
882 } RESERVE_TRACK_RZONE, *PRESERVE_TRACK_RZONE;
883 struct _SEND_OPC_INFORMATION {
884 UCHAR OperationCode;
885 UCHAR DoOpc:1;
886 UCHAR Reserved1:7;
887 UCHAR Exclude0:1;
888 UCHAR Exclude1:1;
889 UCHAR Reserved2:6;
890 UCHAR Reserved3[4];
891 UCHAR ParameterListLength[2];
892 UCHAR Reserved4;
893 } SEND_OPC_INFORMATION, *PSEND_OPC_INFORMATION;
894 struct _REPAIR_TRACK {
895 UCHAR OperationCode;
896 UCHAR Immediate:1;
897 UCHAR Reserved1:7;
898 UCHAR Reserved2[2];
899 UCHAR TrackNumber[2];
900 UCHAR Reserved3[3];
901 UCHAR Control;
902 } REPAIR_TRACK, *PREPAIR_TRACK;
903 struct _CLOSE_TRACK {
904 UCHAR OperationCode;
905 UCHAR Immediate:1;
906 UCHAR Reserved1:7;
907 UCHAR Track:1;
908 UCHAR Session:1;
909 UCHAR Reserved2:6;
910 UCHAR Reserved3;
911 UCHAR TrackNumber[2];
912 UCHAR Reserved4[3];
913 UCHAR Control;
914 } CLOSE_TRACK, *PCLOSE_TRACK;
915 struct _READ_BUFFER_CAPACITY {
916 UCHAR OperationCode;
917 UCHAR BlockInfo:1;
918 UCHAR Reserved1:7;
919 UCHAR Reserved2[5];
920 UCHAR AllocationLength[2];
921 UCHAR Control;
922 } READ_BUFFER_CAPACITY, *PREAD_BUFFER_CAPACITY;
923 struct _SEND_CUE_SHEET {
924 UCHAR OperationCode;
925 UCHAR Reserved[5];
926 UCHAR CueSheetSize[3];
927 UCHAR Control;
928 } SEND_CUE_SHEET, *PSEND_CUE_SHEET;
929 struct _READ_HEADER {
930 UCHAR OperationCode;
931 UCHAR Reserved1:1;
932 UCHAR Msf:1;
933 UCHAR Reserved2:3;
934 UCHAR Lun:3;
935 UCHAR LogicalBlockAddress[4];
936 UCHAR Reserved3;
937 UCHAR AllocationLength[2];
938 UCHAR Control;
939 } READ_HEADER, *PREAD_HEADER;
940 struct _PLAY_AUDIO {
941 UCHAR OperationCode;
942 UCHAR Reserved1:5;
943 UCHAR LogicalUnitNumber:3;
944 UCHAR StartingBlockAddress[4];
945 UCHAR Reserved2;
946 UCHAR PlayLength[2];
947 UCHAR Control;
948 } PLAY_AUDIO, *PPLAY_AUDIO;
949 struct _PLAY_AUDIO_MSF {
950 UCHAR OperationCode;
951 UCHAR Reserved1:5;
952 UCHAR LogicalUnitNumber:3;
953 UCHAR Reserved2;
954 UCHAR StartingM;
955 UCHAR StartingS;
956 UCHAR StartingF;
957 UCHAR EndingM;
958 UCHAR EndingS;
959 UCHAR EndingF;
960 UCHAR Control;
961 } PLAY_AUDIO_MSF, *PPLAY_AUDIO_MSF;
962 struct _BLANK_MEDIA {
963 UCHAR OperationCode;
964 UCHAR BlankType:3;
965 UCHAR Reserved1:1;
966 UCHAR Immediate:1;
967 UCHAR Reserved2:3;
968 UCHAR AddressOrTrack[4];
969 UCHAR Reserved3[5];
970 UCHAR Control;
971 } BLANK_MEDIA, *PBLANK_MEDIA;
972 struct _PLAY_CD {
973 UCHAR OperationCode;
974 UCHAR Reserved1:1;
975 UCHAR CMSF:1;
976 UCHAR ExpectedSectorType:3;
977 UCHAR Lun:3;
978 _ANONYMOUS_UNION union {
979 struct _LBA {
980 UCHAR StartingBlockAddress[4];
981 UCHAR PlayLength[4];
982 } LBA;
983 struct _MSF {
984 UCHAR Reserved1;
985 UCHAR StartingM;
986 UCHAR StartingS;
987 UCHAR StartingF;
988 UCHAR EndingM;
989 UCHAR EndingS;
990 UCHAR EndingF;
991 UCHAR Reserved2;
992 } MSF;
993 } DUMMYUNIONNAME;
994 UCHAR Audio:1;
995 UCHAR Composite:1;
996 UCHAR Port1:1;
997 UCHAR Port2:1;
998 UCHAR Reserved2:3;
999 UCHAR Speed:1;
1000 UCHAR Control;
1001 } PLAY_CD, *PPLAY_CD;
1002 struct _SCAN_CD {
1003 UCHAR OperationCode;
1004 UCHAR RelativeAddress:1;
1005 UCHAR Reserved1:3;
1006 UCHAR Direct:1;
1007 UCHAR Lun:3;
1008 UCHAR StartingAddress[4];
1009 UCHAR Reserved2[3];
1010 UCHAR Reserved3:6;
1011 UCHAR Type:2;
1012 UCHAR Reserved4;
1013 UCHAR Control;
1014 } SCAN_CD, *PSCAN_CD;
1015 struct _STOP_PLAY_SCAN {
1016 UCHAR OperationCode;
1017 UCHAR Reserved1:5;
1018 UCHAR Lun:3;
1019 UCHAR Reserved2[7];
1020 UCHAR Control;
1021 } STOP_PLAY_SCAN, *PSTOP_PLAY_SCAN;
1022 struct _SUBCHANNEL {
1023 UCHAR OperationCode;
1024 UCHAR Reserved0:1;
1025 UCHAR Msf:1;
1026 UCHAR Reserved1:3;
1027 UCHAR LogicalUnitNumber:3;
1028 UCHAR Reserved2:6;
1029 UCHAR SubQ:1;
1030 UCHAR Reserved3:1;
1031 UCHAR Format;
1032 UCHAR Reserved4[2];
1033 UCHAR TrackNumber;
1034 UCHAR AllocationLength[2];
1035 UCHAR Control;
1036 } SUBCHANNEL, *PSUBCHANNEL;
1037 struct _READ_CD {
1038 UCHAR OperationCode;
1039 UCHAR RelativeAddress:1;
1040 UCHAR Reserved0:1;
1041 UCHAR ExpectedSectorType:3;
1042 UCHAR Lun:3;
1043 UCHAR StartingLBA[4];
1044 UCHAR TransferBlocks[3];
1045 UCHAR Reserved2:1;
1046 UCHAR ErrorFlags:2;
1047 UCHAR IncludeEDC:1;
1048 UCHAR IncludeUserData:1;
1049 UCHAR HeaderCode:2;
1050 UCHAR IncludeSyncData:1;
1051 UCHAR SubChannelSelection:3;
1052 UCHAR Reserved3:5;
1053 UCHAR Control;
1054 } READ_CD, *PREAD_CD;
1055 struct _READ_CD_MSF {
1056 UCHAR OperationCode;
1057 UCHAR RelativeAddress:1;
1058 UCHAR Reserved1:1;
1059 UCHAR ExpectedSectorType:3;
1060 UCHAR Lun:3;
1061 UCHAR Reserved2;
1062 UCHAR StartingM;
1063 UCHAR StartingS;
1064 UCHAR StartingF;
1065 UCHAR EndingM;
1066 UCHAR EndingS;
1067 UCHAR EndingF;
1068 UCHAR Reserved3;
1069 UCHAR Reserved4:1;
1070 UCHAR ErrorFlags:2;
1071 UCHAR IncludeEDC:1;
1072 UCHAR IncludeUserData:1;
1073 UCHAR HeaderCode:2;
1074 UCHAR IncludeSyncData:1;
1075 UCHAR SubChannelSelection:3;
1076 UCHAR Reserved5:5;
1077 UCHAR Control;
1078 } READ_CD_MSF, *PREAD_CD_MSF;
1079 struct _PLXTR_READ_CDDA {
1080 UCHAR OperationCode;
1081 UCHAR Reserved0:5;
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;
1091 UCHAR SubCode;
1092 UCHAR Control;
1093 } PLXTR_READ_CDDA, *PPLXTR_READ_CDDA;
1094 struct _NEC_READ_CDDA {
1095 UCHAR OperationCode;
1096 UCHAR Reserved0;
1097 UCHAR LogicalBlockByte0;
1098 UCHAR LogicalBlockByte1;
1099 UCHAR LogicalBlockByte2;
1100 UCHAR LogicalBlockByte3;
1101 UCHAR Reserved1;
1102 UCHAR TransferBlockByte0;
1103 UCHAR TransferBlockByte1;
1104 UCHAR Control;
1105 } NEC_READ_CDDA, *PNEC_READ_CDDA;
1106 struct _MODE_SENSE {
1107 UCHAR OperationCode;
1108 UCHAR Reserved1:3;
1109 UCHAR Dbd:1;
1110 UCHAR Reserved2:1;
1111 UCHAR LogicalUnitNumber:3;
1112 UCHAR PageCode:6;
1113 UCHAR Pc:2;
1114 UCHAR Reserved3;
1115 UCHAR AllocationLength;
1116 UCHAR Control;
1117 } MODE_SENSE, *PMODE_SENSE;
1118 struct _MODE_SENSE10 {
1119 UCHAR OperationCode;
1120 UCHAR Reserved1:3;
1121 UCHAR Dbd:1;
1122 UCHAR Reserved2:1;
1123 UCHAR LogicalUnitNumber:3;
1124 UCHAR PageCode:6;
1125 UCHAR Pc:2;
1126 UCHAR Reserved3[4];
1127 UCHAR AllocationLength[2];
1128 UCHAR Control;
1129 } MODE_SENSE10, *PMODE_SENSE10;
1130 struct _MODE_SELECT {
1131 UCHAR OperationCode;
1132 UCHAR SPBit:1;
1133 UCHAR Reserved1:3;
1134 UCHAR PFBit:1;
1135 UCHAR LogicalUnitNumber:3;
1136 UCHAR Reserved2[2];
1137 UCHAR ParameterListLength;
1138 UCHAR Control;
1139 } MODE_SELECT, *PMODE_SELECT;
1140 struct _MODE_SELECT10 {
1141 UCHAR OperationCode;
1142 UCHAR SPBit:1;
1143 UCHAR Reserved1:3;
1144 UCHAR PFBit:1;
1145 UCHAR LogicalUnitNumber:3;
1146 UCHAR Reserved2[5];
1147 UCHAR ParameterListLength[2];
1148 UCHAR Control;
1149 } MODE_SELECT10, *PMODE_SELECT10;
1150 struct _LOCATE {
1151 UCHAR OperationCode;
1152 UCHAR Immediate:1;
1153 UCHAR CPBit:1;
1154 UCHAR BTBit:1;
1155 UCHAR Reserved1:2;
1156 UCHAR LogicalUnitNumber:3;
1157 UCHAR Reserved3;
1158 UCHAR LogicalBlockAddress[4];
1159 UCHAR Reserved4;
1160 UCHAR Partition;
1161 UCHAR Control;
1162 } LOCATE, *PLOCATE;
1163 struct _LOGSENSE {
1164 UCHAR OperationCode;
1165 UCHAR SPBit:1;
1166 UCHAR PPCBit:1;
1167 UCHAR Reserved1:3;
1168 UCHAR LogicalUnitNumber:3;
1169 UCHAR PageCode:6;
1170 UCHAR PCBit:2;
1171 UCHAR Reserved2;
1172 UCHAR Reserved3;
1173 UCHAR ParameterPointer[2];
1174 UCHAR AllocationLength[2];
1175 UCHAR Control;
1176 } LOGSENSE, *PLOGSENSE;
1177 struct _LOGSELECT {
1178 UCHAR OperationCode;
1179 UCHAR SPBit:1;
1180 UCHAR PCRBit:1;
1181 UCHAR Reserved1:3;
1182 UCHAR LogicalUnitNumber:3;
1183 UCHAR Reserved:6;
1184 UCHAR PCBit:2;
1185 UCHAR Reserved2[4];
1186 UCHAR ParameterListLength[2];
1187 UCHAR Control;
1188 } LOGSELECT, *PLOGSELECT;
1189 struct _PRINT {
1190 UCHAR OperationCode;
1191 UCHAR Reserved:5;
1192 UCHAR LogicalUnitNumber:3;
1193 UCHAR TransferLength[3];
1194 UCHAR Control;
1195 } PRINT, *PPRINT;
1196 struct _SEEK {
1197 UCHAR OperationCode;
1198 UCHAR Reserved1:5;
1199 UCHAR LogicalUnitNumber:3;
1200 UCHAR LogicalBlockAddress[4];
1201 UCHAR Reserved2[3];
1202 UCHAR Control;
1203 } SEEK, *PSEEK;
1204 struct _ERASE {
1205 UCHAR OperationCode;
1206 UCHAR Long:1;
1207 UCHAR Immediate:1;
1208 UCHAR Reserved1:3;
1209 UCHAR LogicalUnitNumber:3;
1210 UCHAR Reserved2[3];
1211 UCHAR Control;
1212 } ERASE, *PERASE;
1213 struct _START_STOP {
1214 UCHAR OperationCode;
1215 UCHAR Immediate:1;
1216 UCHAR Reserved1:4;
1217 UCHAR LogicalUnitNumber:3;
1218 UCHAR Reserved2[2];
1219 UCHAR Start:1;
1220 UCHAR LoadEject:1;
1221 UCHAR Reserved3:6;
1222 UCHAR Control;
1223 } START_STOP, *PSTART_STOP;
1224 struct _MEDIA_REMOVAL {
1225 UCHAR OperationCode;
1226 UCHAR Reserved1:5;
1227 UCHAR LogicalUnitNumber:3;
1228 UCHAR Reserved2[2];
1229 UCHAR Prevent:1;
1230 UCHAR Persistant:1;
1231 UCHAR Reserved3:6;
1232 UCHAR Control;
1233 } MEDIA_REMOVAL, *PMEDIA_REMOVAL;
1234 struct _SEEK_BLOCK {
1235 UCHAR OperationCode;
1236 UCHAR Immediate:1;
1237 UCHAR Reserved1:7;
1238 UCHAR BlockAddress[3];
1239 UCHAR Link:1;
1240 UCHAR Flag:1;
1241 UCHAR Reserved2:4;
1242 UCHAR VendorUnique:2;
1243 } SEEK_BLOCK, *PSEEK_BLOCK;
1244 struct _REQUEST_BLOCK_ADDRESS {
1245 UCHAR OperationCode;
1246 UCHAR Reserved1[3];
1247 UCHAR AllocationLength;
1248 UCHAR Link:1;
1249 UCHAR Flag:1;
1250 UCHAR Reserved2:4;
1251 UCHAR VendorUnique:2;
1252 } REQUEST_BLOCK_ADDRESS, *PREQUEST_BLOCK_ADDRESS;
1253 struct _PARTITION {
1254 UCHAR OperationCode;
1255 UCHAR Immediate:1;
1256 UCHAR Sel:1;
1257 UCHAR PartitionSelect:6;
1258 UCHAR Reserved1[3];
1259 UCHAR Control;
1260 } PARTITION, *PPARTITION;
1261 struct _WRITE_TAPE_MARKS {
1262 UCHAR OperationCode;
1263 UCHAR Immediate:1;
1264 UCHAR WriteSetMarks:1;
1265 UCHAR Reserved:3;
1266 UCHAR LogicalUnitNumber:3;
1267 UCHAR TransferLength[3];
1268 UCHAR Control;
1269 } WRITE_TAPE_MARKS, *PWRITE_TAPE_MARKS;
1270 struct _SPACE_TAPE_MARKS {
1271 UCHAR OperationCode;
1272 UCHAR Code:3;
1273 UCHAR Reserved:2;
1274 UCHAR LogicalUnitNumber:3;
1275 UCHAR NumMarksMSB;
1276 UCHAR NumMarks;
1277 UCHAR NumMarksLSB;
1278 union {
1279 UCHAR value;
1280 struct {
1281 UCHAR Link:1;
1282 UCHAR Flag:1;
1283 UCHAR Reserved:4;
1284 UCHAR VendorUnique:2;
1285 } Fields;
1286 } Byte6;
1287 } SPACE_TAPE_MARKS, *PSPACE_TAPE_MARKS;
1288 struct _READ_POSITION {
1289 UCHAR Operation;
1290 UCHAR BlockType:1;
1291 UCHAR Reserved1:4;
1292 UCHAR Lun:3;
1293 UCHAR Reserved2[7];
1294 UCHAR Control;
1295 } READ_POSITION, *PREAD_POSITION;
1296 struct _CDB6READWRITETAPE {
1297 UCHAR OperationCode;
1298 UCHAR VendorSpecific:5;
1299 UCHAR Reserved:3;
1300 UCHAR TransferLenMSB;
1301 UCHAR TransferLen;
1302 UCHAR TransferLenLSB;
1303 UCHAR Link:1;
1304 UCHAR Flag:1;
1305 UCHAR Reserved1:4;
1306 UCHAR VendorUnique:2;
1307 } CDB6READWRITETAPE, *PCDB6READWRITETAPE;
1308 struct _INIT_ELEMENT_STATUS {
1309 UCHAR OperationCode;
1310 UCHAR Reserved1:5;
1311 UCHAR LogicalUnitNubmer:3;
1312 UCHAR Reserved2[3];
1313 UCHAR Reserved3:7;
1314 UCHAR NoBarCode:1;
1315 } INIT_ELEMENT_STATUS, *PINIT_ELEMENT_STATUS;
1316 struct _INITIALIZE_ELEMENT_RANGE {
1317 UCHAR OperationCode;
1318 UCHAR Range:1;
1319 UCHAR Reserved1:4;
1320 UCHAR LogicalUnitNubmer:3;
1321 UCHAR FirstElementAddress[2];
1322 UCHAR Reserved2[2];
1323 UCHAR NumberOfElements[2];
1324 UCHAR Reserved3;
1325 UCHAR Reserved4:7;
1326 UCHAR NoBarCode:1;
1327 } INITIALIZE_ELEMENT_RANGE, *PINITIALIZE_ELEMENT_RANGE;
1328 struct _POSITION_TO_ELEMENT {
1329 UCHAR OperationCode;
1330 UCHAR Reserved1:5;
1331 UCHAR LogicalUnitNumber:3;
1332 UCHAR TransportElementAddress[2];
1333 UCHAR DestinationElementAddress[2];
1334 UCHAR Reserved2[2];
1335 UCHAR Flip:1;
1336 UCHAR Reserved3:7;
1337 UCHAR Control;
1338 } POSITION_TO_ELEMENT, *PPOSITION_TO_ELEMENT;
1339 struct _MOVE_MEDIUM {
1340 UCHAR OperationCode;
1341 UCHAR Reserved1:5;
1342 UCHAR LogicalUnitNumber:3;
1343 UCHAR TransportElementAddress[2];
1344 UCHAR SourceElementAddress[2];
1345 UCHAR DestinationElementAddress[2];
1346 UCHAR Reserved2[2];
1347 UCHAR Flip:1;
1348 UCHAR Reserved3:7;
1349 UCHAR Control;
1350 } MOVE_MEDIUM, *PMOVE_MEDIUM;
1351 struct _EXCHANGE_MEDIUM {
1352 UCHAR OperationCode;
1353 UCHAR Reserved1:5;
1354 UCHAR LogicalUnitNumber:3;
1355 UCHAR TransportElementAddress[2];
1356 UCHAR SourceElementAddress[2];
1357 UCHAR Destination1ElementAddress[2];
1358 UCHAR Destination2ElementAddress[2];
1359 UCHAR Flip1:1;
1360 UCHAR Flip2:1;
1361 UCHAR Reserved3:6;
1362 UCHAR Control;
1363 } EXCHANGE_MEDIUM, *PEXCHANGE_MEDIUM;
1364 struct _READ_ELEMENT_STATUS {
1365 UCHAR OperationCode;
1366 UCHAR ElementType:4;
1367 UCHAR VolTag:1;
1368 UCHAR LogicalUnitNumber:3;
1369 UCHAR StartingElementAddress[2];
1370 UCHAR NumberOfElements[2];
1371 UCHAR Reserved1;
1372 UCHAR AllocationLength[3];
1373 UCHAR Reserved2;
1374 UCHAR Control;
1375 } READ_ELEMENT_STATUS, *PREAD_ELEMENT_STATUS;
1376 struct _SEND_VOLUME_TAG {
1377 UCHAR OperationCode;
1378 UCHAR ElementType:4;
1379 UCHAR Reserved1:1;
1380 UCHAR LogicalUnitNumber:3;
1381 UCHAR StartingElementAddress[2];
1382 UCHAR Reserved2;
1383 UCHAR ActionCode:5;
1384 UCHAR Reserved3:3;
1385 UCHAR Reserved4[2];
1386 UCHAR ParameterListLength[2];
1387 UCHAR Reserved5;
1388 UCHAR Control;
1389 } SEND_VOLUME_TAG, *PSEND_VOLUME_TAG;
1390 struct _REQUEST_VOLUME_ELEMENT_ADDRESS {
1391 UCHAR OperationCode;
1392 UCHAR ElementType:4;
1393 UCHAR VolTag:1;
1394 UCHAR LogicalUnitNumber:3;
1395 UCHAR StartingElementAddress[2];
1396 UCHAR NumberElements[2];
1397 UCHAR Reserved1;
1398 UCHAR AllocationLength[3];
1399 UCHAR Reserved2;
1400 UCHAR Control;
1401 } REQUEST_VOLUME_ELEMENT_ADDRESS, *PREQUEST_VOLUME_ELEMENT_ADDRESS;
1402 struct _LOAD_UNLOAD {
1403 UCHAR OperationCode;
1404 UCHAR Immediate:1;
1405 UCHAR Reserved1:4;
1406 UCHAR Lun:3;
1407 UCHAR Reserved2[2];
1408 UCHAR Start:1;
1409 UCHAR LoadEject:1;
1410 UCHAR Reserved3:6;
1411 UCHAR Reserved4[3];
1412 UCHAR Slot;
1413 UCHAR Reserved5[3];
1414 } LOAD_UNLOAD, *PLOAD_UNLOAD;
1415 struct _MECH_STATUS {
1416 UCHAR OperationCode;
1417 UCHAR Reserved:5;
1418 UCHAR Lun:3;
1419 UCHAR Reserved1[6];
1420 UCHAR AllocationLength[2];
1421 UCHAR Reserved2[1];
1422 UCHAR Control;
1423 } MECH_STATUS, *PMECH_STATUS;
1424 struct _SYNCHRONIZE_CACHE10 {
1425 UCHAR OperationCode;
1426 UCHAR RelAddr:1;
1427 UCHAR Immediate:1;
1428 UCHAR Reserved:3;
1429 UCHAR Lun:3;
1430 UCHAR LogicalBlockAddress[4];
1431 UCHAR Reserved2;
1432 UCHAR BlockCount[2];
1433 UCHAR Control;
1434 } SYNCHRONIZE_CACHE10, *PSYNCHRONIZE_CACHE10;
1435 struct _GET_EVENT_STATUS_NOTIFICATION {
1436 UCHAR OperationCode;
1437 UCHAR Immediate:1;
1438 UCHAR Reserved:4;
1439 UCHAR Lun:3;
1440 UCHAR Reserved2[2];
1441 UCHAR NotificationClassRequest;
1442 UCHAR Reserved3[2];
1443 UCHAR EventListLength[2];
1444 UCHAR Control;
1445 } GET_EVENT_STATUS_NOTIFICATION, *PGET_EVENT_STATUS_NOTIFICATION;
1446 struct _GET_PERFORMANCE {
1447 UCHAR OperationCode;
1448 UCHAR Except:2;
1449 UCHAR Write:1;
1450 UCHAR Tolerance:2;
1451 UCHAR Reserved0:3;
1452 UCHAR StartingLBA[4];
1453 UCHAR Reserved1[2];
1454 UCHAR MaximumNumberOfDescriptors[2];
1455 UCHAR Type;
1456 UCHAR Control;
1457 } GET_PERFORMANCE;
1458 struct _READ_DVD_STRUCTURE {
1459 UCHAR OperationCode;
1460 UCHAR Reserved1:5;
1461 UCHAR Lun:3;
1462 UCHAR RMDBlockNumber[4];
1463 UCHAR LayerNumber;
1464 UCHAR Format;
1465 UCHAR AllocationLength[2];
1466 UCHAR Reserved3:6;
1467 UCHAR AGID:2;
1468 UCHAR Control;
1469 } READ_DVD_STRUCTURE, *PREAD_DVD_STRUCTURE;
1470 struct _SET_STREAMING {
1471 UCHAR OperationCode;
1472 UCHAR Reserved[8];
1473 UCHAR ParameterListLength[2];
1474 UCHAR Control;
1475 } SET_STREAMING;
1476 struct _SEND_DVD_STRUCTURE {
1477 UCHAR OperationCode;
1478 UCHAR Reserved1:5;
1479 UCHAR Lun:3;
1480 UCHAR Reserved2[5];
1481 UCHAR Format;
1482 UCHAR ParameterListLength[2];
1483 UCHAR Reserved3;
1484 UCHAR Control;
1485 } SEND_DVD_STRUCTURE, *PSEND_DVD_STRUCTURE;
1486 struct _SEND_KEY {
1487 UCHAR OperationCode;
1488 UCHAR Reserved1:5;
1489 UCHAR Lun:3;
1490 UCHAR Reserved2[6];
1491 UCHAR ParameterListLength[2];
1492 UCHAR KeyFormat:6;
1493 UCHAR AGID:2;
1494 UCHAR Control;
1495 } SEND_KEY, *PSEND_KEY;
1496 struct _REPORT_KEY {
1497 UCHAR OperationCode;
1498 UCHAR Reserved1:5;
1499 UCHAR Lun:3;
1500 UCHAR LogicalBlockAddress[4];
1501 UCHAR Reserved2[2];
1502 UCHAR AllocationLength[2];
1503 UCHAR KeyFormat:6;
1504 UCHAR AGID:2;
1505 UCHAR Control;
1506 } REPORT_KEY, *PREPORT_KEY;
1507 struct _SET_READ_AHEAD {
1508 UCHAR OperationCode;
1509 UCHAR Reserved1:5;
1510 UCHAR Lun:3;
1511 UCHAR TriggerLBA[4];
1512 UCHAR ReadAheadLBA[4];
1513 UCHAR Reserved2;
1514 UCHAR Control;
1515 } SET_READ_AHEAD, *PSET_READ_AHEAD;
1516 struct _READ_FORMATTED_CAPACITIES {
1517 UCHAR OperationCode;
1518 UCHAR Reserved1:5;
1519 UCHAR Lun:3;
1520 UCHAR Reserved2[5];
1521 UCHAR AllocationLength[2];
1522 UCHAR Control;
1523 } READ_FORMATTED_CAPACITIES, *PREAD_FORMATTED_CAPACITIES;
1524 struct _REPORT_LUNS {
1525 UCHAR OperationCode;
1526 UCHAR Reserved1[5];
1527 UCHAR AllocationLength[4];
1528 UCHAR Reserved2[1];
1529 UCHAR Control;
1530 } REPORT_LUNS, *PREPORT_LUNS;
1531 struct _PERSISTENT_RESERVE_IN {
1532 UCHAR OperationCode;
1533 UCHAR ServiceAction:5;
1534 UCHAR Reserved1:3;
1535 UCHAR Reserved2[5];
1536 UCHAR AllocationLength[2];
1537 UCHAR Control;
1538 } PERSISTENT_RESERVE_IN, *PPERSISTENT_RESERVE_IN;
1539 struct _PERSISTENT_RESERVE_OUT {
1540 UCHAR OperationCode;
1541 UCHAR ServiceAction:5;
1542 UCHAR Reserved1:3;
1543 UCHAR Type:4;
1544 UCHAR Scope:4;
1545 UCHAR Reserved2[4];
1546 UCHAR ParameterListLength[2];
1547 UCHAR Control;
1548 } PERSISTENT_RESERVE_OUT, *PPERSISTENT_RESERVE_OUT;
1549 struct _GET_CONFIGURATION {
1550 UCHAR OperationCode;
1551 UCHAR RequestType:1;
1552 UCHAR Reserved1:7;
1553 UCHAR StartingFeature[2];
1554 UCHAR Reserved2[3];
1555 UCHAR AllocationLength[2];
1556 UCHAR Control;
1557 } GET_CONFIGURATION, *PGET_CONFIGURATION;
1558 struct _SET_CD_SPEED {
1559 UCHAR OperationCode;
1560 _ANONYMOUS_UNION union {
1561 UCHAR Reserved1;
1562 _ANONYMOUS_STRUCT struct {
1563 UCHAR RotationControl:2;
1564 UCHAR Reserved3:6;
1565 } DUMMYSTRUCTNAME;
1566 } DUMMYUNIONNAME;
1567 UCHAR ReadSpeed[2];
1568 UCHAR WriteSpeed[2];
1569 UCHAR Reserved2[5];
1570 UCHAR Control;
1571 } SET_CD_SPEED, *PSET_CD_SPEED;
1572 struct _READ12 {
1573 UCHAR OperationCode;
1574 UCHAR RelativeAddress:1;
1575 UCHAR Reserved1:2;
1576 UCHAR ForceUnitAccess:1;
1577 UCHAR DisablePageOut:1;
1578 UCHAR LogicalUnitNumber:3;
1579 UCHAR LogicalBlock[4];
1580 UCHAR TransferLength[4];
1581 UCHAR Reserved2:7;
1582 UCHAR Streaming:1;
1583 UCHAR Control;
1584 } READ12;
1585 struct _WRITE12 {
1586 UCHAR OperationCode;
1587 UCHAR RelativeAddress:1;
1588 UCHAR Reserved1:1;
1589 UCHAR EBP:1;
1590 UCHAR ForceUnitAccess:1;
1591 UCHAR DisablePageOut:1;
1592 UCHAR LogicalUnitNumber:3;
1593 UCHAR LogicalBlock[4];
1594 UCHAR TransferLength[4];
1595 UCHAR Reserved2:7;
1596 UCHAR Streaming:1;
1597 UCHAR Control;
1598 } WRITE12;
1599 struct _READ16 {
1600 UCHAR OperationCode;
1601 UCHAR Reserved1:3;
1602 UCHAR ForceUnitAccess:1;
1603 UCHAR DisablePageOut:1;
1604 UCHAR ReadProtect:3;
1605 UCHAR LogicalBlock[8];
1606 UCHAR TransferLength[4];
1607 UCHAR Reserved2:7;
1608 UCHAR Streaming:1;
1609 UCHAR Control;
1610 } READ16;
1611 struct _WRITE16 {
1612 UCHAR OperationCode;
1613 UCHAR Reserved1:3;
1614 UCHAR ForceUnitAccess:1;
1615 UCHAR DisablePageOut:1;
1616 UCHAR WriteProtect:3;
1617 UCHAR LogicalBlock[8];
1618 UCHAR TransferLength[4];
1619 UCHAR Reserved2:7;
1620 UCHAR Streaming:1;
1621 UCHAR Control;
1622 } WRITE16;
1623 struct _VERIFY16 {
1624 UCHAR OperationCode;
1625 UCHAR Reserved1:1;
1626 UCHAR ByteCheck:1;
1627 UCHAR BlockVerify:1;
1628 UCHAR Reserved2: 1;
1629 UCHAR DisablePageOut:1;
1630 UCHAR VerifyProtect:3;
1631 UCHAR LogicalBlock[8];
1632 UCHAR VerificationLength[4];
1633 UCHAR Reserved3:7;
1634 UCHAR Streaming:1;
1635 UCHAR Control;
1636 } VERIFY16;
1637 struct _SYNCHRONIZE_CACHE16 {
1638 UCHAR OperationCode;
1639 UCHAR Reserved1:1;
1640 UCHAR Immediate:1;
1641 UCHAR Reserved2:6;
1642 UCHAR LogicalBlock[8];
1643 UCHAR BlockCount[4];
1644 UCHAR Reserved3;
1645 UCHAR Control;
1646 } SYNCHRONIZE_CACHE16;
1647 struct _READ_CAPACITY16 {
1648 UCHAR OperationCode;
1649 UCHAR ServiceAction:5;
1650 UCHAR Reserved1:3;
1651 UCHAR LogicalBlock[8];
1652 UCHAR BlockCount[4];
1653 UCHAR PMI:1;
1654 UCHAR Reserved2:7;
1655 UCHAR Control;
1656 } READ_CAPACITY16;
1657 ULONG AsUlong[4];
1658 UCHAR AsByte[16];
1659 } CDB, *PCDB;
1660
1661 typedef struct _NOTIFICATION_EVENT_STATUS_HEADER {
1662 UCHAR EventDataLength[2];
1663 UCHAR NotificationClass:3;
1664 UCHAR Reserved:4;
1665 UCHAR NEA:1;
1666 UCHAR SupportedEventClasses;
1667 UCHAR ClassEventData[0];
1668 } NOTIFICATION_EVENT_STATUS_HEADER, *PNOTIFICATION_EVENT_STATUS_HEADER;
1669
1670 typedef struct _NOTIFICATION_OPERATIONAL_STATUS {
1671 UCHAR OperationalEvent:4;
1672 UCHAR Reserved1:4;
1673 UCHAR OperationalStatus:4;
1674 UCHAR Reserved2:3;
1675 UCHAR PersistentPrevented:1;
1676 UCHAR Operation[2];
1677 } NOTIFICATION_OPERATIONAL_STATUS, *PNOTIFICATION_OPERATIONAL_STATUS;
1678
1679 typedef struct _NOTIFICATION_POWER_STATUS {
1680 UCHAR PowerEvent:4;
1681 UCHAR Reserved:4;
1682 UCHAR PowerStatus;
1683 UCHAR Reserved2[2];
1684 } NOTIFICATION_POWER_STATUS, *PNOTIFICATION_POWER_STATUS;
1685
1686 typedef struct _NOTIFICATION_EXTERNAL_STATUS {
1687 UCHAR ExternalEvent:4;
1688 UCHAR Reserved1:4;
1689 UCHAR ExternalStatus:4;
1690 UCHAR Reserved2:3;
1691 UCHAR PersistentPrevented:1;
1692 UCHAR Request[2];
1693 } NOTIFICATION_EXTERNAL_STATUS, *PNOTIFICATION_EXTERNAL_STATUS;
1694
1695 typedef struct _NOTIFICATION_MEDIA_STATUS {
1696 UCHAR MediaEvent:4;
1697 UCHAR Reserved:4;
1698 _ANONYMOUS_UNION union {
1699 UCHAR PowerStatus;
1700 UCHAR MediaStatus;
1701 _ANONYMOUS_STRUCT struct {
1702 UCHAR DoorTrayOpen:1;
1703 UCHAR MediaPresent:1;
1704 UCHAR ReservedX:6;
1705 } DUMMYSTRUCTNAME;
1706 } DUMMYUNIONNAME;
1707 UCHAR StartSlot;
1708 UCHAR EndSlot;
1709 } NOTIFICATION_MEDIA_STATUS, *PNOTIFICATION_MEDIA_STATUS;
1710
1711 typedef struct _NOTIFICATION_MULTI_HOST_STATUS {
1712 UCHAR MultiHostEvent:4;
1713 UCHAR Reserved1:4;
1714 UCHAR MultiHostStatus:4;
1715 UCHAR Reserved2:3;
1716 UCHAR PersistentPrevented:1;
1717 UCHAR Priority[2];
1718 } NOTIFICATION_MULTI_HOST_STATUS, *PNOTIFICATION_MULTI_HOST_STATUS;
1719
1720 typedef struct _NOTIFICATION_BUSY_STATUS {
1721 UCHAR DeviceBusyEvent:4;
1722 UCHAR Reserved:4;
1723 UCHAR DeviceBusyStatus;
1724 UCHAR Time[2];
1725 } NOTIFICATION_BUSY_STATUS, *PNOTIFICATION_BUSY_STATUS;
1726
1727 typedef struct _READ_DVD_STRUCTURES_HEADER {
1728 UCHAR Length[2];
1729 UCHAR Reserved[2];
1730 UCHAR Data[0];
1731 } READ_DVD_STRUCTURES_HEADER, *PREAD_DVD_STRUCTURES_HEADER;
1732
1733 typedef struct _CDVD_KEY_HEADER {
1734 UCHAR DataLength[2];
1735 UCHAR Reserved[2];
1736 UCHAR Data[0];
1737 } CDVD_KEY_HEADER, *PCDVD_KEY_HEADER;
1738
1739 typedef struct _CDVD_REPORT_AGID_DATA {
1740 UCHAR Reserved1[3];
1741 UCHAR Reserved2:6;
1742 UCHAR AGID:2;
1743 } CDVD_REPORT_AGID_DATA, *PCDVD_REPORT_AGID_DATA;
1744
1745 typedef struct _CDVD_CHALLENGE_KEY_DATA {
1746 UCHAR ChallengeKeyValue[10];
1747 UCHAR Reserved[2];
1748 } CDVD_CHALLENGE_KEY_DATA, *PCDVD_CHALLENGE_KEY_DATA;
1749
1750 typedef struct _CDVD_KEY_DATA {
1751 UCHAR Key[5];
1752 UCHAR Reserved[3];
1753 } CDVD_KEY_DATA, *PCDVD_KEY_DATA;
1754
1755 typedef struct _CDVD_REPORT_ASF_DATA {
1756 UCHAR Reserved1[3];
1757 UCHAR Success:1;
1758 UCHAR Reserved2:7;
1759 } CDVD_REPORT_ASF_DATA, *PCDVD_REPORT_ASF_DATA;
1760
1761 typedef struct _CDVD_TITLE_KEY_HEADER {
1762 UCHAR DataLength[2];
1763 UCHAR Reserved1[1];
1764 UCHAR Reserved2:3;
1765 UCHAR CGMS:2;
1766 UCHAR CP_SEC:1;
1767 UCHAR CPM:1;
1768 UCHAR Zero:1;
1769 CDVD_KEY_DATA TitleKey;
1770 } CDVD_TITLE_KEY_HEADER, *PCDVD_TITLE_KEY_HEADER;
1771
1772 typedef struct _FORMAT_DESCRIPTOR {
1773 UCHAR NumberOfBlocks[4];
1774 UCHAR FormatSubType:2;
1775 UCHAR FormatType:6;
1776 UCHAR BlockLength[3];
1777 } FORMAT_DESCRIPTOR, *PFORMAT_DESCRIPTOR;
1778
1779 typedef struct _FORMAT_LIST_HEADER {
1780 UCHAR Reserved;
1781 UCHAR VendorSpecific:1;
1782 UCHAR Immediate:1;
1783 UCHAR TryOut:1;
1784 UCHAR IP:1;
1785 UCHAR STPF:1;
1786 UCHAR DCRT:1;
1787 UCHAR DPRY:1;
1788 UCHAR FOV:1;
1789 UCHAR FormatDescriptorLength[2];
1790 FORMAT_DESCRIPTOR Descriptors[0];
1791 } FORMAT_LIST_HEADER, *PFORMAT_LIST_HEADER;
1792
1793 typedef struct _FORMATTED_CAPACITY_DESCRIPTOR {
1794 UCHAR NumberOfBlocks[4];
1795 UCHAR Maximum:1;
1796 UCHAR Valid:1;
1797 UCHAR FormatType:6;
1798 UCHAR BlockLength[3];
1799 } FORMATTED_CAPACITY_DESCRIPTOR, *PFORMATTED_CAPACITY_DESCRIPTOR;
1800
1801 typedef struct _FORMATTED_CAPACITY_LIST {
1802 UCHAR Reserved[3];
1803 UCHAR CapacityListLength;
1804 FORMATTED_CAPACITY_DESCRIPTOR Descriptors[0];
1805 } FORMATTED_CAPACITY_LIST, *PFORMATTED_CAPACITY_LIST;
1806
1807 typedef struct _OPC_TABLE_ENTRY {
1808 UCHAR Speed[2];
1809 UCHAR OPCValue[6];
1810 } OPC_TABLE_ENTRY, *POPC_TABLE_ENTRY;
1811
1812 typedef struct _DISC_INFORMATION {
1813 UCHAR Length[2];
1814 UCHAR DiscStatus:2;
1815 UCHAR LastSessionStatus:2;
1816 UCHAR Erasable:1;
1817 UCHAR Reserved1:3;
1818 UCHAR FirstTrackNumber;
1819 UCHAR NumberOfSessionsLsb;
1820 UCHAR LastSessionFirstTrackLsb;
1821 UCHAR LastSessionLastTrackLsb;
1822 UCHAR MrwStatus:2;
1823 UCHAR MrwDirtyBit:1;
1824 UCHAR Reserved2:2;
1825 UCHAR URU:1;
1826 UCHAR DBC_V:1;
1827 UCHAR DID_V:1;
1828 UCHAR DiscType;
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];
1836 UCHAR Reserved4;
1837 UCHAR NumberOPCEntries;
1838 OPC_TABLE_ENTRY OPCTable[1];
1839 } DISC_INFORMATION, *PDISC_INFORMATION;
1840
1841 typedef struct _DISK_INFORMATION {
1842 UCHAR Length[2];
1843 UCHAR DiskStatus:2;
1844 UCHAR LastSessionStatus:2;
1845 UCHAR Erasable:1;
1846 UCHAR Reserved1:3;
1847 UCHAR FirstTrackNumber;
1848 UCHAR NumberOfSessions;
1849 UCHAR LastSessionFirstTrack;
1850 UCHAR LastSessionLastTrack;
1851 UCHAR Reserved2:5;
1852 UCHAR GEN:1;
1853 UCHAR DBC_V:1;
1854 UCHAR DID_V:1;
1855 UCHAR DiskType;
1856 UCHAR Reserved3[3];
1857 UCHAR DiskIdentification[4];
1858 UCHAR LastSessionLeadIn[4];
1859 UCHAR LastPossibleStartTime[4];
1860 UCHAR DiskBarCode[8];
1861 UCHAR Reserved4;
1862 UCHAR NumberOPCEntries;
1863 OPC_TABLE_ENTRY OPCTable[0];
1864 } DISK_INFORMATION, *PDISK_INFORMATION;
1865
1866 typedef struct _DATA_BLOCK_HEADER {
1867 UCHAR DataMode;
1868 UCHAR Reserved[4];
1869 _ANONYMOUS_UNION union {
1870 UCHAR LogicalBlockAddress[4];
1871 struct {
1872 UCHAR Reserved;
1873 UCHAR M;
1874 UCHAR S;
1875 UCHAR F;
1876 } MSF;
1877 } DUMMYUNIONNAME;
1878 } DATA_BLOCK_HEADER, *PDATA_BLOCK_HEADER;
1879
1880 typedef struct _TRACK_INFORMATION {
1881 UCHAR Length[2];
1882 UCHAR TrackNumber;
1883 UCHAR SessionNumber;
1884 UCHAR Reserved1;
1885 UCHAR TrackMode:4;
1886 UCHAR Copy:1;
1887 UCHAR Damage:1;
1888 UCHAR Reserved2:2;
1889 UCHAR DataMode:4;
1890 UCHAR FP:1;
1891 UCHAR Packet:1;
1892 UCHAR Blank:1;
1893 UCHAR RT:1;
1894 UCHAR NWA_V:1;
1895 UCHAR Reserved3:7;
1896 UCHAR TrackStartAddress[4];
1897 UCHAR NextWritableAddress[4];
1898 UCHAR FreeBlocks[4];
1899 UCHAR FixedPacketSize[4];
1900 } TRACK_INFORMATION, *PTRACK_INFORMATION;
1901
1902 typedef struct _TRACK_INFORMATION2 {
1903 UCHAR Length[2];
1904 UCHAR TrackNumberLsb;
1905 UCHAR SessionNumberLsb;
1906 UCHAR Reserved4;
1907 UCHAR TrackMode:4;
1908 UCHAR Copy:1;
1909 UCHAR Damage:1;
1910 UCHAR Reserved5:2;
1911 UCHAR DataMode:4;
1912 UCHAR FixedPacket:1;
1913 UCHAR Packet:1;
1914 UCHAR Blank:1;
1915 UCHAR ReservedTrack:1;
1916 UCHAR NWA_V:1;
1917 UCHAR LRA_V:1;
1918 UCHAR Reserved6:6;
1919 UCHAR TrackStartAddress[4];
1920 UCHAR NextWritableAddress[4];
1921 UCHAR FreeBlocks[4];
1922 UCHAR FixedPacketSize[4];
1923 UCHAR TrackSize[4];
1924 UCHAR LastRecordedAddress[4];
1925 UCHAR TrackNumberMsb;
1926 UCHAR SessionNumberMsb;
1927 UCHAR Reserved7[2];
1928 } TRACK_INFORMATION2, *PTRACK_INFORMATION2;
1929
1930 typedef struct _TRACK_INFORMATION3 {
1931 UCHAR Length[2];
1932 UCHAR TrackNumberLsb;
1933 UCHAR SessionNumberLsb;
1934 UCHAR Reserved4;
1935 UCHAR TrackMode:4;
1936 UCHAR Copy:1;
1937 UCHAR Damage:1;
1938 UCHAR Reserved5:2;
1939 UCHAR DataMode:4;
1940 UCHAR FixedPacket:1;
1941 UCHAR Packet:1;
1942 UCHAR Blank:1;
1943 UCHAR ReservedTrack:1;
1944 UCHAR NWA_V:1;
1945 UCHAR LRA_V:1;
1946 UCHAR Reserved6:6;
1947 UCHAR TrackStartAddress[4];
1948 UCHAR NextWritableAddress[4];
1949 UCHAR FreeBlocks[4];
1950 UCHAR FixedPacketSize[4];
1951 UCHAR TrackSize[4];
1952 UCHAR LastRecordedAddress[4];
1953 UCHAR TrackNumberMsb;
1954 UCHAR SessionNumberMsb;
1955 UCHAR Reserved7[2];
1956 UCHAR ReadCompatibilityLba[4];
1957 } TRACK_INFORMATION3, *PTRACK_INFORMATION3;
1958
1959 typedef struct _PERFORMANCE_DESCRIPTOR {
1960 UCHAR RandomAccess:1;
1961 UCHAR Exact:1;
1962 UCHAR RestoreDefaults:1;
1963 UCHAR WriteRotationControl:2;
1964 UCHAR Reserved1:3;
1965 UCHAR Reserved[3];
1966 UCHAR StartLba[4];
1967 UCHAR EndLba[4];
1968 UCHAR ReadSize[4];
1969 UCHAR ReadTime[4];
1970 UCHAR WriteSize[4];
1971 UCHAR WriteTime[4];
1972 } PERFORMANCE_DESCRIPTOR, *PPERFORMANCE_DESCRIPTOR;
1973
1974 typedef struct _SCSI_EXTENDED_MESSAGE {
1975 UCHAR InitialMessageCode;
1976 UCHAR MessageLength;
1977 UCHAR MessageType;
1978 union _EXTENDED_ARGUMENTS {
1979 struct {
1980 UCHAR Modifier[4];
1981 } Modify;
1982 struct {
1983 UCHAR TransferPeriod;
1984 UCHAR ReqAckOffset;
1985 } Synchronous;
1986 struct{
1987 UCHAR Width;
1988 } Wide;
1989 } ExtendedArguments;
1990 }SCSI_EXTENDED_MESSAGE, *PSCSI_EXTENDED_MESSAGE;
1991
1992 #ifndef _INQUIRYDATA_DEFINED /* also in minitape.h */
1993 #define _INQUIRYDATA_DEFINED
1994
1995 #define INQUIRYDATABUFFERSIZE 36
1996
1997 #if (NTDDI_VERSION < NTDDI_WINXP)
1998 typedef struct _INQUIRYDATA {
1999 UCHAR DeviceType:5;
2000 UCHAR DeviceTypeQualifier:3;
2001 UCHAR DeviceTypeModifier:7;
2002 UCHAR RemovableMedia:1;
2003 UCHAR Versions;
2004 UCHAR ResponseDataFormat:4;
2005 UCHAR HiSupport:1;
2006 UCHAR NormACA:1;
2007 UCHAR ReservedBit:1;
2008 UCHAR AERC:1;
2009 UCHAR AdditionalLength;
2010 UCHAR Reserved[2];
2011 UCHAR SoftReset:1;
2012 UCHAR CommandQueue:1;
2013 UCHAR Reserved2:1;
2014 UCHAR LinkedCommands:1;
2015 UCHAR Synchronous:1;
2016 UCHAR Wide16Bit:1;
2017 UCHAR Wide32Bit:1;
2018 UCHAR RelativeAddressing:1;
2019 UCHAR VendorId[8];
2020 UCHAR ProductId[16];
2021 UCHAR ProductRevisionLevel[4];
2022 UCHAR VendorSpecific[20];
2023 UCHAR Reserved3[40];
2024 } INQUIRYDATA, *PINQUIRYDATA;
2025 #else
2026 typedef struct _INQUIRYDATA {
2027 UCHAR DeviceType:5;
2028 UCHAR DeviceTypeQualifier:3;
2029 UCHAR DeviceTypeModifier:7;
2030 UCHAR RemovableMedia:1;
2031 _ANONYMOUS_UNION union {
2032 UCHAR Versions;
2033 _ANONYMOUS_STRUCT struct {
2034 UCHAR ANSIVersion:3;
2035 UCHAR ECMAVersion:3;
2036 UCHAR ISOVersion:2;
2037 } DUMMYSTRUCTNAME;
2038 } DUMMYUNIONNAME;
2039 UCHAR ResponseDataFormat:4;
2040 UCHAR HiSupport:1;
2041 UCHAR NormACA:1;
2042 UCHAR TerminateTask:1;
2043 UCHAR AERC:1;
2044 UCHAR AdditionalLength;
2045 UCHAR Reserved;
2046 UCHAR Addr16:1;
2047 UCHAR Addr32:1;
2048 UCHAR AckReqQ:1;
2049 UCHAR MediumChanger:1;
2050 UCHAR MultiPort:1;
2051 UCHAR ReservedBit2:1;
2052 UCHAR EnclosureServices:1;
2053 UCHAR ReservedBit3:1;
2054 UCHAR SoftReset:1;
2055 UCHAR CommandQueue:1;
2056 UCHAR TransferDisable:1;
2057 UCHAR LinkedCommands:1;
2058 UCHAR Synchronous:1;
2059 UCHAR Wide16Bit:1;
2060 UCHAR Wide32Bit:1;
2061 UCHAR RelativeAddressing:1;
2062 UCHAR VendorId[8];
2063 UCHAR ProductId[16];
2064 UCHAR ProductRevisionLevel[4];
2065 UCHAR VendorSpecific[20];
2066 UCHAR Reserved3[40];
2067 } INQUIRYDATA, *PINQUIRYDATA;
2068 #endif /* (NTDDI_VERSION < NTDDI_WINXP) */
2069
2070 #endif /* _INQUIRYDATA_DEFINED */
2071
2072 typedef struct _VPD_MEDIA_SERIAL_NUMBER_PAGE {
2073 UCHAR DeviceType:5;
2074 UCHAR DeviceTypeQualifier:3;
2075 UCHAR PageCode;
2076 UCHAR Reserved;
2077 UCHAR PageLength;
2078 UCHAR SerialNumber[0];
2079 } VPD_MEDIA_SERIAL_NUMBER_PAGE, *PVPD_MEDIA_SERIAL_NUMBER_PAGE;
2080
2081 typedef struct _VPD_SERIAL_NUMBER_PAGE {
2082 UCHAR DeviceType:5;
2083 UCHAR DeviceTypeQualifier:3;
2084 UCHAR PageCode;
2085 UCHAR Reserved;
2086 UCHAR PageLength;
2087 UCHAR SerialNumber[0];
2088 } VPD_SERIAL_NUMBER_PAGE, *PVPD_SERIAL_NUMBER_PAGE;
2089
2090 typedef enum _VPD_CODE_SET {
2091 VpdCodeSetReserved = 0,
2092 VpdCodeSetBinary = 1,
2093 VpdCodeSetAscii = 2,
2094 VpdCodeSetUTF8 = 3
2095 } VPD_CODE_SET, *PVPD_CODE_SET;
2096
2097 typedef enum _VPD_ASSOCIATION {
2098 VpdAssocDevice = 0,
2099 VpdAssocPort = 1,
2100 VpdAssocTarget = 2,
2101 VpdAssocReserved1 = 3,
2102 VpdAssocReserved2 = 4
2103 } VPD_ASSOCIATION, *PVPD_ASSOCIATION;
2104
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;
2116
2117 typedef struct _VPD_IDENTIFICATION_DESCRIPTOR {
2118 UCHAR CodeSet:4;
2119 UCHAR Reserved:4;
2120 UCHAR IdentifierType:4;
2121 UCHAR Association:2;
2122 UCHAR Reserved2:2;
2123 UCHAR Reserved3;
2124 UCHAR IdentifierLength;
2125 UCHAR Identifier[0];
2126 } VPD_IDENTIFICATION_DESCRIPTOR, *PVPD_IDENTIFICATION_DESCRIPTOR;
2127
2128 typedef struct _VPD_IDENTIFICATION_PAGE {
2129 UCHAR DeviceType:5;
2130 UCHAR DeviceTypeQualifier:3;
2131 UCHAR PageCode;
2132 UCHAR Reserved;
2133 UCHAR PageLength;
2134 UCHAR Descriptors[0];
2135 } VPD_IDENTIFICATION_PAGE, *PVPD_IDENTIFICATION_PAGE;
2136
2137 typedef struct _VPD_SUPPORTED_PAGES_PAGE {
2138 UCHAR DeviceType:5;
2139 UCHAR DeviceTypeQualifier:3;
2140 UCHAR PageCode;
2141 UCHAR Reserved;
2142 UCHAR PageLength;
2143 UCHAR SupportedPageList[0];
2144 } VPD_SUPPORTED_PAGES_PAGE, *PVPD_SUPPORTED_PAGES_PAGE;
2145
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;
2151
2152 typedef struct _PRI_RESERVATION_DESCRIPTOR {
2153 UCHAR ReservationKey[8];
2154 UCHAR ScopeSpecificAddress[4];
2155 UCHAR Reserved;
2156 UCHAR Type:4;
2157 UCHAR Scope:4;
2158 UCHAR Obsolete[2];
2159 } PRI_RESERVATION_DESCRIPTOR, *PPRI_RESERVATION_DESCRIPTOR;
2160
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;
2166
2167 typedef struct _PRO_PARAMETER_LIST {
2168 UCHAR ReservationKey[8];
2169 UCHAR ServiceActionReservationKey[8];
2170 UCHAR ScopeSpecificAddress[4];
2171 UCHAR ActivatePersistThroughPowerLoss:1;
2172 UCHAR Reserved1:7;
2173 UCHAR Reserved2;
2174 UCHAR Obsolete[2];
2175 } PRO_PARAMETER_LIST, *PPRO_PARAMETER_LIST;
2176
2177 typedef struct _SENSE_DATA {
2178 UCHAR ErrorCode:7;
2179 UCHAR Valid:1;
2180 UCHAR SegmentNumber;
2181 UCHAR SenseKey:4;
2182 UCHAR Reserved:1;
2183 UCHAR IncorrectLength:1;
2184 UCHAR EndOfMedia:1;
2185 UCHAR FileMark: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];
2193 } SENSE_DATA, *PSENSE_DATA;
2194
2195 /* Read Capacity Data. Returned in Big Endian format */
2196 typedef struct _READ_CAPACITY_DATA {
2197 ULONG LogicalBlockAddress;
2198 ULONG BytesPerBlock;
2199 } READ_CAPACITY_DATA, *PREAD_CAPACITY_DATA;
2200
2201 typedef struct _READ_CAPACITY_DATA_EX {
2202 LARGE_INTEGER LogicalBlockAddress;
2203 ULONG BytesPerBlock;
2204 } READ_CAPACITY_DATA_EX, *PREAD_CAPACITY_DATA_EX;
2205
2206 /* Read Block Limits Data. Returned in Big Endian format */
2207 typedef struct _READ_BLOCK_LIMITS {
2208 UCHAR Reserved;
2209 UCHAR BlockMaximumSize[3];
2210 UCHAR BlockMinimumSize[2];
2211 } READ_BLOCK_LIMITS_DATA, *PREAD_BLOCK_LIMITS_DATA;
2212
2213 typedef struct _READ_BUFFER_CAPACITY_DATA {
2214 UCHAR DataLength[2];
2215 UCHAR Reserved1;
2216 UCHAR BlockDataReturned:1;
2217 UCHAR Reserved4:7;
2218 UCHAR TotalBufferSize[4];
2219 UCHAR AvailableBufferSize[4];
2220 } READ_BUFFER_CAPACITY_DATA, *PREAD_BUFFER_CAPACITY_DATA;
2221
2222 typedef struct _MODE_PARAMETER_HEADER {
2223 UCHAR ModeDataLength;
2224 UCHAR MediumType;
2225 UCHAR DeviceSpecificParameter;
2226 UCHAR BlockDescriptorLength;
2227 } MODE_PARAMETER_HEADER, *PMODE_PARAMETER_HEADER;
2228
2229 typedef struct _MODE_PARAMETER_HEADER10 {
2230 UCHAR ModeDataLength[2];
2231 UCHAR MediumType;
2232 UCHAR DeviceSpecificParameter;
2233 UCHAR Reserved[2];
2234 UCHAR BlockDescriptorLength[2];
2235 } MODE_PARAMETER_HEADER10, *PMODE_PARAMETER_HEADER10;
2236
2237 typedef struct _MODE_PARAMETER_BLOCK {
2238 UCHAR DensityCode;
2239 UCHAR NumberOfBlocks[3];
2240 UCHAR Reserved;
2241 UCHAR BlockLength[3];
2242 } MODE_PARAMETER_BLOCK, *PMODE_PARAMETER_BLOCK;
2243
2244 typedef struct _MODE_DISCONNECT_PAGE {
2245 UCHAR PageCode:6;
2246 UCHAR Reserved:1;
2247 UCHAR PageSavable:1;
2248 UCHAR PageLength;
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;
2256 UCHAR Reserved2[3];
2257 } MODE_DISCONNECT_PAGE, *PMODE_DISCONNECT_PAGE;
2258
2259 typedef struct _MODE_CACHING_PAGE {
2260 UCHAR PageCode:6;
2261 UCHAR Reserved:1;
2262 UCHAR PageSavable:1;
2263 UCHAR PageLength;
2264 UCHAR ReadDisableCache:1;
2265 UCHAR MultiplicationFactor:1;
2266 UCHAR WriteCacheEnable:1;
2267 UCHAR Reserved2:5;
2268 UCHAR WriteRetensionPriority:4;
2269 UCHAR ReadRetensionPriority:4;
2270 UCHAR DisablePrefetchTransfer[2];
2271 UCHAR MinimumPrefetch[2];
2272 UCHAR MaximumPrefetch[2];
2273 UCHAR MaximumPrefetchCeiling[2];
2274 } MODE_CACHING_PAGE, *PMODE_CACHING_PAGE;
2275
2276 typedef struct _MODE_CDROM_WRITE_PARAMETERS_PAGE2 {
2277 UCHAR PageCode:6;
2278 UCHAR Reserved:1;
2279 UCHAR PageSavable:1;
2280 UCHAR PageLength;
2281 UCHAR WriteType:4;
2282 UCHAR TestWrite:1;
2283 UCHAR LinkSizeValid:1;
2284 UCHAR BufferUnderrunFreeEnabled:1;
2285 UCHAR Reserved2:1;
2286 UCHAR TrackMode:4;
2287 UCHAR Copy:1;
2288 UCHAR FixedPacket:1;
2289 UCHAR MultiSession:2;
2290 UCHAR DataBlockType:4;
2291 UCHAR Reserved3:4;
2292 UCHAR LinkSize;
2293 UCHAR Reserved4;
2294 UCHAR HostApplicationCode:6;
2295 UCHAR Reserved5:2;
2296 UCHAR SessionFormat;
2297 UCHAR Reserved6;
2298 UCHAR PacketSize[4];
2299 UCHAR AudioPauseLength[2];
2300 UCHAR MediaCatalogNumber[16];
2301 UCHAR ISRC[16];
2302 UCHAR SubHeaderData[4];
2303 } MODE_CDROM_WRITE_PARAMETERS_PAGE2, *PMODE_CDROM_WRITE_PARAMETERS_PAGE2;
2304
2305 typedef struct _MODE_MRW_PAGE {
2306 UCHAR PageCode:6;
2307 UCHAR Reserved:1;
2308 UCHAR PageSavable:1;
2309 UCHAR PageLength;
2310 UCHAR Reserved1;
2311 UCHAR LbaSpace:1;
2312 UCHAR Reserved2:7;
2313 UCHAR Reserved3[4];
2314 } MODE_MRW_PAGE, *PMODE_MRW_PAGE;
2315
2316 typedef struct _MODE_FLEXIBLE_DISK_PAGE {
2317 UCHAR PageCode:6;
2318 UCHAR Reserved:1;
2319 UCHAR PageSavable:1;
2320 UCHAR PageLength;
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];
2328 UCHAR StepRate[2];
2329 UCHAR StepPluseWidth;
2330 UCHAR HeadSettleDelay[2];
2331 UCHAR MotorOnDelay;
2332 UCHAR MotorOffDelay;
2333 UCHAR Reserved2:5;
2334 UCHAR MotorOnAsserted:1;
2335 UCHAR StartSectorNumber:1;
2336 UCHAR TrueReadySignal:1;
2337 UCHAR StepPlusePerCyclynder:4;
2338 UCHAR Reserved3:4;
2339 UCHAR WriteCompenstation;
2340 UCHAR HeadLoadDelay;
2341 UCHAR HeadUnloadDelay;
2342 UCHAR Pin2Usage:4;
2343 UCHAR Pin34Usage:4;
2344 UCHAR Pin1Usage:4;
2345 UCHAR Pin4Usage:4;
2346 UCHAR MediumRotationRate[2];
2347 UCHAR Reserved4[2];
2348 } MODE_FLEXIBLE_DISK_PAGE, *PMODE_FLEXIBLE_DISK_PAGE;
2349
2350 typedef struct _MODE_FORMAT_PAGE {
2351 UCHAR PageCode:6;
2352 UCHAR Reserved:1;
2353 UCHAR PageSavable:1;
2354 UCHAR PageLength;
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];
2364 UCHAR Reserved2:4;
2365 UCHAR SurfaceFirst:1;
2366 UCHAR RemovableMedia:1;
2367 UCHAR HardSectorFormating:1;
2368 UCHAR SoftSectorFormating:1;
2369 UCHAR Reserved3[3];
2370 } MODE_FORMAT_PAGE, *PMODE_FORMAT_PAGE;
2371
2372 typedef struct _MODE_RIGID_GEOMETRY_PAGE {
2373 UCHAR PageCode:6;
2374 UCHAR Reserved:1;
2375 UCHAR PageSavable:1;
2376 UCHAR PageLength;
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;
2384 UCHAR Reserved2:6;
2385 UCHAR RotationOffset;
2386 UCHAR Reserved3;
2387 UCHAR RoataionRate[2];
2388 UCHAR Reserved4[2];
2389 } MODE_RIGID_GEOMETRY_PAGE, *PMODE_RIGID_GEOMETRY_PAGE;
2390
2391 typedef struct _MODE_READ_WRITE_RECOVERY_PAGE {
2392 UCHAR PageCode:6;
2393 UCHAR Reserved1:1;
2394 UCHAR PSBit:1;
2395 UCHAR PageLength;
2396 UCHAR DCRBit:1;
2397 UCHAR DTEBit:1;
2398 UCHAR PERBit:1;
2399 UCHAR EERBit:1;
2400 UCHAR RCBit:1;
2401 UCHAR TBBit:1;
2402 UCHAR ARRE:1;
2403 UCHAR AWRE:1;
2404 UCHAR ReadRetryCount;
2405 UCHAR Reserved4[4];
2406 UCHAR WriteRetryCount;
2407 UCHAR Reserved5[3];
2408 } MODE_READ_WRITE_RECOVERY_PAGE, *PMODE_READ_WRITE_RECOVERY_PAGE;
2409
2410 typedef struct _MODE_READ_RECOVERY_PAGE {
2411 UCHAR PageCode:6;
2412 UCHAR Reserved1:1;
2413 UCHAR PSBit:1;
2414 UCHAR PageLength;
2415 UCHAR DCRBit:1;
2416 UCHAR DTEBit:1;
2417 UCHAR PERBit:1;
2418 UCHAR Reserved2:1;
2419 UCHAR RCBit:1;
2420 UCHAR TBBit:1;
2421 UCHAR Reserved3:2;
2422 UCHAR ReadRetryCount;
2423 UCHAR Reserved4[4];
2424 } MODE_READ_RECOVERY_PAGE, *PMODE_READ_RECOVERY_PAGE;
2425
2426 typedef struct _MODE_INFO_EXCEPTIONS {
2427 UCHAR PageCode:6;
2428 UCHAR Reserved1:1;
2429 UCHAR PSBit:1;
2430 UCHAR PageLength;
2431 _ANONYMOUS_UNION union {
2432 UCHAR Flags;
2433 _ANONYMOUS_STRUCT struct {
2434 UCHAR LogErr:1;
2435 UCHAR Reserved2:1;
2436 UCHAR Test:1;
2437 UCHAR Dexcpt:1;
2438 UCHAR Reserved3:3;
2439 UCHAR Perf:1;
2440 } DUMMYSTRUCTNAME;
2441 } DUMMYUNIONNAME;
2442 UCHAR ReportMethod:4;
2443 UCHAR Reserved4:4;
2444 UCHAR IntervalTimer[4];
2445 UCHAR ReportCount[4];
2446 } MODE_INFO_EXCEPTIONS, *PMODE_INFO_EXCEPTIONS;
2447
2448 typedef struct _POWER_CONDITION_PAGE {
2449 UCHAR PageCode:6;
2450 UCHAR Reserved:1;
2451 UCHAR PSBit:1;
2452 UCHAR PageLength;
2453 UCHAR Reserved2;
2454 UCHAR Standby:1;
2455 UCHAR Idle:1;
2456 UCHAR Reserved3:6;
2457 UCHAR IdleTimer[4];
2458 UCHAR StandbyTimer[4];
2459 } POWER_CONDITION_PAGE, *PPOWER_CONDITION_PAGE;
2460
2461 typedef struct _CDDA_OUTPUT_PORT {
2462 UCHAR ChannelSelection:4;
2463 UCHAR Reserved:4;
2464 UCHAR Volume;
2465 } CDDA_OUTPUT_PORT, *PCDDA_OUTPUT_PORT;
2466
2467 typedef struct _CDAUDIO_CONTROL_PAGE {
2468 UCHAR PageCode:6;
2469 UCHAR Reserved:1;
2470 UCHAR PSBit:1;
2471 UCHAR PageLength;
2472 UCHAR Reserved2:1;
2473 UCHAR StopOnTrackCrossing:1;
2474 UCHAR Immediate:1;
2475 UCHAR Reserved3:5;
2476 UCHAR Reserved4[3];
2477 UCHAR Obsolete[2];
2478 CDDA_OUTPUT_PORT CDDAOutputPorts[4];
2479 } CDAUDIO_CONTROL_PAGE, *PCDAUDIO_CONTROL_PAGE;
2480
2481 typedef struct _CDVD_FEATURE_SET_PAGE {
2482 UCHAR PageCode:6;
2483 UCHAR Reserved:1;
2484 UCHAR PSBit:1;
2485 UCHAR PageLength;
2486 UCHAR CDAudio[2];
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];
2496 UCHAR Reserved2[2];
2497 } CDVD_FEATURE_SET_PAGE, *PCDVD_FEATURE_SET_PAGE;
2498
2499 typedef struct _CDVD_INACTIVITY_TIMEOUT_PAGE {
2500 UCHAR PageCode:6;
2501 UCHAR Reserved:1;
2502 UCHAR PSBit:1;
2503 UCHAR PageLength;
2504 UCHAR Reserved2[2];
2505 UCHAR SWPP:1;
2506 UCHAR DISP:1;
2507 UCHAR Reserved3:6;
2508 UCHAR Reserved4;
2509 UCHAR GroupOneMinimumTimeout[2];
2510 UCHAR GroupTwoMinimumTimeout[2];
2511 } CDVD_INACTIVITY_TIMEOUT_PAGE, *PCDVD_INACTIVITY_TIMEOUT_PAGE;
2512
2513 typedef struct _CDVD_CAPABILITIES_PAGE {
2514 UCHAR PageCode:6;
2515 UCHAR Reserved:1;
2516 UCHAR PSBit:1;
2517 UCHAR PageLength;
2518 UCHAR CDRRead:1;
2519 UCHAR CDERead:1;
2520 UCHAR Method2:1;
2521 UCHAR DVDROMRead:1;
2522 UCHAR DVDRRead:1;
2523 UCHAR DVDRAMRead:1;
2524 UCHAR Reserved2:2;
2525 UCHAR CDRWrite:1;
2526 UCHAR CDEWrite:1;
2527 UCHAR TestWrite:1;
2528 UCHAR Reserved3:1;
2529 UCHAR DVDRWrite:1;
2530 UCHAR DVDRAMWrite:1;
2531 UCHAR Reserved4:2;
2532 UCHAR AudioPlay:1;
2533 UCHAR Composite:1;
2534 UCHAR DigitalPortOne:1;
2535 UCHAR DigitalPortTwo:1;
2536 UCHAR Mode2Form1:1;
2537 UCHAR Mode2Form2:1;
2538 UCHAR MultiSession:1;
2539 UCHAR BufferUnderrunFree:1;
2540 UCHAR CDDA:1;
2541 UCHAR CDDAAccurate:1;
2542 UCHAR RWSupported:1;
2543 UCHAR RWDeinterleaved:1;
2544 UCHAR C2Pointers:1;
2545 UCHAR ISRC:1;
2546 UCHAR UPC:1;
2547 UCHAR ReadBarCodeCapable:1;
2548 UCHAR Lock:1;
2549 UCHAR LockState:1;
2550 UCHAR PreventJumper:1;
2551 UCHAR Eject:1;
2552 UCHAR Reserved6: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;
2560 UCHAR Reserved7:2;
2561 _ANONYMOUS_UNION union {
2562 UCHAR ReadSpeedMaximum[2];
2563 UCHAR ObsoleteReserved[2];
2564 } DUMMYUNIONNAME;
2565 UCHAR NumberVolumeLevels[2];
2566 UCHAR BufferSize[2];
2567 _ANONYMOUS_UNION union {
2568 UCHAR ReadSpeedCurrent[2];
2569 UCHAR ObsoleteReserved2[2];
2570 } DUMMYUNIONNAME2;
2571 UCHAR ObsoleteReserved3;
2572 UCHAR Reserved8:1;
2573 UCHAR BCK:1;
2574 UCHAR RCK:1;
2575 UCHAR LSBF:1;
2576 UCHAR Length:2;
2577 UCHAR Reserved9:2;
2578 _ANONYMOUS_UNION union {
2579 UCHAR WriteSpeedMaximum[2];
2580 UCHAR ObsoleteReserved4[2];
2581 } DUMMYUNIONNAME3;
2582 _ANONYMOUS_UNION union {
2583 UCHAR WriteSpeedCurrent[2];
2584 UCHAR ObsoleteReserved11[2];
2585 } DUMMYUNIONNAME4;
2586 _ANONYMOUS_UNION union {
2587 UCHAR CopyManagementRevision[2];
2588 UCHAR Reserved10[2];
2589 } DUMMYUNIONNAME5;
2590 } CDVD_CAPABILITIES_PAGE, *PCDVD_CAPABILITIES_PAGE;
2591
2592 typedef struct _LUN_LIST {
2593 UCHAR LunListLength[4];
2594 UCHAR Reserved[4];
2595 UCHAR Lun[0][8];
2596 } LUN_LIST, *PLUN_LIST;
2597
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;
2602
2603 typedef struct _PORT_OUTPUT {
2604 UCHAR ChannelSelection;
2605 UCHAR Volume;
2606 } PORT_OUTPUT, *PPORT_OUTPUT;
2607
2608 typedef struct _AUDIO_OUTPUT {
2609 UCHAR CodePage;
2610 UCHAR ParameterLength;
2611 UCHAR Immediate;
2612 UCHAR Reserved[2];
2613 UCHAR LbaFormat;
2614 UCHAR LogicalBlocksPerSecond[2];
2615 PORT_OUTPUT PortOutput[4];
2616 } AUDIO_OUTPUT, *PAUDIO_OUTPUT;
2617
2618 /* Atapi 2.5 changers */
2619 typedef struct _MECHANICAL_STATUS_INFORMATION_HEADER {
2620 UCHAR CurrentSlot:5;
2621 UCHAR ChangerState:2;
2622 UCHAR Fault:1;
2623 UCHAR Reserved:5;
2624 UCHAR MechanismState:3;
2625 UCHAR CurrentLogicalBlockAddress[3];
2626 UCHAR NumberAvailableSlots;
2627 UCHAR SlotTableLength[2];
2628 } MECHANICAL_STATUS_INFORMATION_HEADER, *PMECHANICAL_STATUS_INFORMATION_HEADER;
2629
2630 typedef struct _SLOT_TABLE_INFORMATION {
2631 UCHAR DiscChanged:1;
2632 UCHAR Reserved:6;
2633 UCHAR DiscPresent:1;
2634 UCHAR Reserved2[3];
2635 } SLOT_TABLE_INFORMATION, *PSLOT_TABLE_INFORMATION;
2636
2637 typedef struct _MECHANICAL_STATUS {
2638 MECHANICAL_STATUS_INFORMATION_HEADER MechanicalStatusHeader;
2639 SLOT_TABLE_INFORMATION SlotTableInfo[1];
2640 } MECHANICAL_STATUS, *PMECHANICAL_STATUS;
2641
2642 /* Tape definitions */
2643 typedef struct _TAPE_POSITION_DATA {
2644 UCHAR Reserved1:2;
2645 UCHAR BlockPositionUnsupported:1;
2646 UCHAR Reserved2:3;
2647 UCHAR EndOfPartition:1;
2648 UCHAR BeginningOfPartition:1;
2649 UCHAR PartitionNumber;
2650 USHORT Reserved3;
2651 UCHAR FirstBlock[4];
2652 UCHAR LastBlock[4];
2653 UCHAR Reserved4;
2654 UCHAR NumberOfBlocks[3];
2655 UCHAR NumberOfBytes[4];
2656 } TAPE_POSITION_DATA, *PTAPE_POSITION_DATA;
2657
2658 /* This structure is used to convert little endian ULONGs
2659 to SCSI CDB big endians values. */
2660 typedef union _EIGHT_BYTE {
2661 _ANONYMOUS_STRUCT struct {
2662 UCHAR Byte0;
2663 UCHAR Byte1;
2664 UCHAR Byte2;
2665 UCHAR Byte3;
2666 UCHAR Byte4;
2667 UCHAR Byte5;
2668 UCHAR Byte6;
2669 UCHAR Byte7;
2670 } DUMMYSTRUCTNAME;
2671 ULONGLONG AsULongLong;
2672 } EIGHT_BYTE, *PEIGHT_BYTE;
2673
2674 typedef union _FOUR_BYTE {
2675 _ANONYMOUS_STRUCT struct {
2676 UCHAR Byte0;
2677 UCHAR Byte1;
2678 UCHAR Byte2;
2679 UCHAR Byte3;
2680 } DUMMYSTRUCTNAME;
2681 ULONG AsULong;
2682 } FOUR_BYTE, *PFOUR_BYTE;
2683
2684 typedef union _TWO_BYTE {
2685 _ANONYMOUS_STRUCT struct {
2686 UCHAR Byte0;
2687 UCHAR Byte1;
2688 } DUMMYSTRUCTNAME;
2689 USHORT AsUShort;
2690 } TWO_BYTE, *PTWO_BYTE;
2691
2692 /* Byte reversing macro for converting between
2693 big- and little-endian formats */
2694 #define REVERSE_BYTES_QUAD(Destination, Source) { \
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; \
2705 }
2706
2707 #define REVERSE_BYTES(Destination, Source) { \
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; \
2714 }
2715
2716 #define REVERSE_BYTES_SHORT(Destination, Source) { \
2717 PTWO_BYTE _val1 = (PTWO_BYTE)(Destination); \
2718 PTWO_BYTE _val2 = (PTWO_BYTE)(Source); \
2719 _val1->Byte1 = _val2->Byte0; \
2720 _val1->Byte0 = _val2->Byte1; \
2721 }
2722
2723 #define REVERSE_SHORT(Short) { \
2724 UCHAR _val; \
2725 PTWO_BYTE _val2 = (PTWO_BYTE)(Short); \
2726 _val = _val2->Byte0; \
2727 _val2->Byte0 = _val2->Byte1; \
2728 _val2->Byte1 = _val; \
2729 }
2730
2731 #define REVERSE_LONG(Long) { \
2732 UCHAR _val; \
2733 PFOUR_BYTE _val2 = (PFOUR_BYTE)(Long); \
2734 _val = _val2->Byte3; \
2735 _val2->Byte3 = _val2->Byte0; \
2736 _val2->Byte0 = _val; \
2737 _val = _val2->Byte2; \
2738 _val2->Byte2 = _val2->Byte1; \
2739 _val2->Byte1 = _val; \
2740 }
2741
2742 #define WHICH_BIT(Data, Bit) { \
2743 UCHAR _val; \
2744 for (_val = 0; _val < 32; _val++) { \
2745 if (((Data) >> _val) == 1) { \
2746 break; \
2747 } \
2748 } \
2749 ASSERT(_val != 32); \
2750 (Bit) = _val; \
2751 }
2752
2753 /* FIXME : This structure doesn't exist in the official header */
2754 typedef struct _MODE_CDROM_WRITE_PARAMETERS_PAGE {
2755 UCHAR PageLength;
2756 UCHAR WriteType:4;
2757 UCHAR TestWrite:1;
2758 UCHAR LinkSizeValid:1;
2759 UCHAR BufferUnderrunFreeEnabled:1;
2760 UCHAR Reserved2:1;
2761 UCHAR TrackMode:4;
2762 UCHAR Copy:1;
2763 UCHAR FixedPacket:1;
2764 UCHAR MultiSession:2;
2765 UCHAR DataBlockType:4;
2766 UCHAR Reserved3:4;
2767 UCHAR LinkSize;
2768 UCHAR Reserved4;
2769 UCHAR HostApplicationCode:6;
2770 UCHAR Reserved5:2;
2771 UCHAR SessionFormat;
2772 UCHAR Reserved6;
2773 UCHAR PacketSize[4];
2774 UCHAR AudioPauseLength[2];
2775 UCHAR Reserved7:7;
2776 UCHAR MediaCatalogNumberValid:1;
2777 UCHAR MediaCatalogNumber[13];
2778 UCHAR MediaCatalogNumberZero;
2779 UCHAR MediaCatalogNumberAFrame;
2780 UCHAR Reserved8:7;
2781 UCHAR ISRCValid:1;
2782 UCHAR ISRCCountry[2];
2783 UCHAR ISRCOwner[3];
2784 UCHAR ISRCRecordingYear[2];
2785 UCHAR ISRCSerialNumber[5];
2786 UCHAR ISRCZero;
2787 UCHAR ISRCAFrame;
2788 UCHAR ISRCReserved;
2789 UCHAR SubHeaderData[4];
2790 } MODE_CDROM_WRITE_PARAMETERS_PAGE, *PMODE_CDROM_WRITE_PARAMETERS_PAGE;
2791
2792 #ifdef __cplusplus
2793 }
2794 #endif
2795
2796 #endif /* _NTSCSI_ */