4 * SCSI port and class interface.
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
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.
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
739 struct _CDB6GENERIC
{
742 UCHAR CommandUniqueBits
:4;
743 UCHAR LogicalUnitNumber
:3;
744 UCHAR CommandUniqueBytes
[3];
748 UCHAR VendorUnique
:2;
749 } CDB6GENERIC
, *PCDB6GENERIC
;
750 struct _CDB6READWRITE
{
752 UCHAR LogicalBlockMsb1
:5;
753 UCHAR LogicalUnitNumber
:3;
754 UCHAR LogicalBlockMsb0
;
755 UCHAR LogicalBlockLsb
;
756 UCHAR TransferBlocks
;
758 } CDB6READWRITE
, *PCDB6READWRITE
;
759 struct _CDB6INQUIRY
{
762 UCHAR LogicalUnitNumber
:3;
765 UCHAR AllocationLength
;
767 } CDB6INQUIRY
, *PCDB6INQUIRY
;
768 struct _CDB6INQUIRY3
{
770 UCHAR EnableVitalProductData
:1;
771 UCHAR CommandSupportData
:1;
775 UCHAR AllocationLength
;
777 } CDB6INQUIRY3
, *PCDB6INQUIRY3
;
784 UCHAR LogicalUnitNumber
:3;
785 UCHAR VerificationLength
[3];
787 } CDB6VERIFY
, *PCDB6VERIFY
;
790 UCHAR FormatControl
:5;
791 UCHAR LogicalUnitNumber
:3;
796 } CDB6FORMAT
, *PCDB6FORMAT
;
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
;
815 UCHAR RelativeAddress
:1;
817 UCHAR ForceUnitAccess
:1;
818 UCHAR DisablePageOut
:1;
819 UCHAR LogicalUnitNumber
:3;
820 UCHAR LogicalBlock
[4];
821 UCHAR TransferLength
[4];
828 UCHAR ForceUnitAccess
:1;
829 UCHAR DisablePageOut
:1;
831 UCHAR LogicalBlock
[8];
832 UCHAR TransferLength
[4];
836 struct _PAUSE_RESUME
{
839 UCHAR LogicalUnitNumber
:3;
843 } PAUSE_RESUME
, *PPAUSE_RESUME
;
849 UCHAR LogicalUnitNumber
:3;
854 UCHAR AllocationLength
[2];
857 } READ_TOC
, *PREAD_TOC
;
858 struct _READ_DISK_INFORMATION
{
863 UCHAR AllocationLength
[2];
865 } READ_DISK_INFORMATION
, *PREAD_DISK_INFORMATION
;
866 struct _READ_TRACK_INFORMATION
{
872 UCHAR BlockAddress
[4];
874 UCHAR AllocationLength
[2];
876 } READ_TRACK_INFORMATION
, *PREAD_TRACK_INFORMATION
;
877 struct _RESERVE_TRACK_RZONE
{
880 UCHAR ReservationSize
[4];
882 } RESERVE_TRACK_RZONE
, *PRESERVE_TRACK_RZONE
;
883 struct _SEND_OPC_INFORMATION
{
891 UCHAR ParameterListLength
[2];
893 } SEND_OPC_INFORMATION
, *PSEND_OPC_INFORMATION
;
894 struct _REPAIR_TRACK
{
899 UCHAR TrackNumber
[2];
902 } REPAIR_TRACK
, *PREPAIR_TRACK
;
903 struct _CLOSE_TRACK
{
911 UCHAR TrackNumber
[2];
914 } CLOSE_TRACK
, *PCLOSE_TRACK
;
915 struct _READ_BUFFER_CAPACITY
{
920 UCHAR AllocationLength
[2];
922 } READ_BUFFER_CAPACITY
, *PREAD_BUFFER_CAPACITY
;
923 struct _SEND_CUE_SHEET
{
926 UCHAR CueSheetSize
[3];
928 } SEND_CUE_SHEET
, *PSEND_CUE_SHEET
;
929 struct _READ_HEADER
{
935 UCHAR LogicalBlockAddress
[4];
937 UCHAR AllocationLength
[2];
939 } READ_HEADER
, *PREAD_HEADER
;
943 UCHAR LogicalUnitNumber
:3;
944 UCHAR StartingBlockAddress
[4];
948 } PLAY_AUDIO
, *PPLAY_AUDIO
;
949 struct _PLAY_AUDIO_MSF
{
952 UCHAR LogicalUnitNumber
:3;
961 } PLAY_AUDIO_MSF
, *PPLAY_AUDIO_MSF
;
962 struct _BLANK_MEDIA
{
968 UCHAR AddressOrTrack
[4];
971 } BLANK_MEDIA
, *PBLANK_MEDIA
;
976 UCHAR ExpectedSectorType
:3;
978 _ANONYMOUS_UNION
union {
980 UCHAR StartingBlockAddress
[4];
1001 } PLAY_CD
, *PPLAY_CD
;
1003 UCHAR OperationCode
;
1004 UCHAR RelativeAddress
:1;
1008 UCHAR StartingAddress
[4];
1014 } SCAN_CD
, *PSCAN_CD
;
1015 struct _STOP_PLAY_SCAN
{
1016 UCHAR OperationCode
;
1021 } STOP_PLAY_SCAN
, *PSTOP_PLAY_SCAN
;
1022 struct _SUBCHANNEL
{
1023 UCHAR OperationCode
;
1027 UCHAR LogicalUnitNumber
:3;
1034 UCHAR AllocationLength
[2];
1036 } SUBCHANNEL
, *PSUBCHANNEL
;
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;
1054 } READ_CD
, *PREAD_CD
;
1055 struct _READ_CD_MSF
{
1056 UCHAR OperationCode
;
1057 UCHAR RelativeAddress
:1;
1059 UCHAR ExpectedSectorType
:3;
1072 UCHAR IncludeUserData
:1;
1074 UCHAR IncludeSyncData
:1;
1075 UCHAR SubChannelSelection
:3;
1078 } READ_CD_MSF
, *PREAD_CD_MSF
;
1079 struct _PLXTR_READ_CDDA
{
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
;
1093 } PLXTR_READ_CDDA
, *PPLXTR_READ_CDDA
;
1094 struct _NEC_READ_CDDA
{
1095 UCHAR OperationCode
;
1097 UCHAR LogicalBlockByte0
;
1098 UCHAR LogicalBlockByte1
;
1099 UCHAR LogicalBlockByte2
;
1100 UCHAR LogicalBlockByte3
;
1102 UCHAR TransferBlockByte0
;
1103 UCHAR TransferBlockByte1
;
1105 } NEC_READ_CDDA
, *PNEC_READ_CDDA
;
1106 struct _MODE_SENSE
{
1107 UCHAR OperationCode
;
1111 UCHAR LogicalUnitNumber
:3;
1115 UCHAR AllocationLength
;
1117 } MODE_SENSE
, *PMODE_SENSE
;
1118 struct _MODE_SENSE10
{
1119 UCHAR OperationCode
;
1123 UCHAR LogicalUnitNumber
:3;
1127 UCHAR AllocationLength
[2];
1129 } MODE_SENSE10
, *PMODE_SENSE10
;
1130 struct _MODE_SELECT
{
1131 UCHAR OperationCode
;
1135 UCHAR LogicalUnitNumber
:3;
1137 UCHAR ParameterListLength
;
1139 } MODE_SELECT
, *PMODE_SELECT
;
1140 struct _MODE_SELECT10
{
1141 UCHAR OperationCode
;
1145 UCHAR LogicalUnitNumber
:3;
1147 UCHAR ParameterListLength
[2];
1149 } MODE_SELECT10
, *PMODE_SELECT10
;
1151 UCHAR OperationCode
;
1156 UCHAR LogicalUnitNumber
:3;
1158 UCHAR LogicalBlockAddress
[4];
1164 UCHAR OperationCode
;
1168 UCHAR LogicalUnitNumber
:3;
1173 UCHAR ParameterPointer
[2];
1174 UCHAR AllocationLength
[2];
1176 } LOGSENSE
, *PLOGSENSE
;
1178 UCHAR OperationCode
;
1182 UCHAR LogicalUnitNumber
:3;
1186 UCHAR ParameterListLength
[2];
1188 } LOGSELECT
, *PLOGSELECT
;
1190 UCHAR OperationCode
;
1192 UCHAR LogicalUnitNumber
:3;
1193 UCHAR TransferLength
[3];
1197 UCHAR OperationCode
;
1199 UCHAR LogicalUnitNumber
:3;
1200 UCHAR LogicalBlockAddress
[4];
1205 UCHAR OperationCode
;
1209 UCHAR LogicalUnitNumber
:3;
1213 struct _START_STOP
{
1214 UCHAR OperationCode
;
1217 UCHAR LogicalUnitNumber
:3;
1223 } START_STOP
, *PSTART_STOP
;
1224 struct _MEDIA_REMOVAL
{
1225 UCHAR OperationCode
;
1227 UCHAR LogicalUnitNumber
:3;
1233 } MEDIA_REMOVAL
, *PMEDIA_REMOVAL
;
1234 struct _SEEK_BLOCK
{
1235 UCHAR OperationCode
;
1238 UCHAR BlockAddress
[3];
1242 UCHAR VendorUnique
:2;
1243 } SEEK_BLOCK
, *PSEEK_BLOCK
;
1244 struct _REQUEST_BLOCK_ADDRESS
{
1245 UCHAR OperationCode
;
1247 UCHAR AllocationLength
;
1251 UCHAR VendorUnique
:2;
1252 } REQUEST_BLOCK_ADDRESS
, *PREQUEST_BLOCK_ADDRESS
;
1254 UCHAR OperationCode
;
1257 UCHAR PartitionSelect
:6;
1260 } PARTITION
, *PPARTITION
;
1261 struct _WRITE_TAPE_MARKS
{
1262 UCHAR OperationCode
;
1264 UCHAR WriteSetMarks
:1;
1266 UCHAR LogicalUnitNumber
:3;
1267 UCHAR TransferLength
[3];
1269 } WRITE_TAPE_MARKS
, *PWRITE_TAPE_MARKS
;
1270 struct _SPACE_TAPE_MARKS
{
1271 UCHAR OperationCode
;
1274 UCHAR LogicalUnitNumber
:3;
1284 UCHAR VendorUnique
:2;
1287 } SPACE_TAPE_MARKS
, *PSPACE_TAPE_MARKS
;
1288 struct _READ_POSITION
{
1295 } READ_POSITION
, *PREAD_POSITION
;
1296 struct _CDB6READWRITETAPE
{
1297 UCHAR OperationCode
;
1298 UCHAR VendorSpecific
:5;
1300 UCHAR TransferLenMSB
;
1302 UCHAR TransferLenLSB
;
1306 UCHAR VendorUnique
:2;
1307 } CDB6READWRITETAPE
, *PCDB6READWRITETAPE
;
1308 struct _INIT_ELEMENT_STATUS
{
1309 UCHAR OperationCode
;
1311 UCHAR LogicalUnitNubmer
:3;
1315 } INIT_ELEMENT_STATUS
, *PINIT_ELEMENT_STATUS
;
1316 struct _INITIALIZE_ELEMENT_RANGE
{
1317 UCHAR OperationCode
;
1320 UCHAR LogicalUnitNubmer
:3;
1321 UCHAR FirstElementAddress
[2];
1323 UCHAR NumberOfElements
[2];
1327 } INITIALIZE_ELEMENT_RANGE
, *PINITIALIZE_ELEMENT_RANGE
;
1328 struct _POSITION_TO_ELEMENT
{
1329 UCHAR OperationCode
;
1331 UCHAR LogicalUnitNumber
:3;
1332 UCHAR TransportElementAddress
[2];
1333 UCHAR DestinationElementAddress
[2];
1338 } POSITION_TO_ELEMENT
, *PPOSITION_TO_ELEMENT
;
1339 struct _MOVE_MEDIUM
{
1340 UCHAR OperationCode
;
1342 UCHAR LogicalUnitNumber
:3;
1343 UCHAR TransportElementAddress
[2];
1344 UCHAR SourceElementAddress
[2];
1345 UCHAR DestinationElementAddress
[2];
1350 } MOVE_MEDIUM
, *PMOVE_MEDIUM
;
1351 struct _EXCHANGE_MEDIUM
{
1352 UCHAR OperationCode
;
1354 UCHAR LogicalUnitNumber
:3;
1355 UCHAR TransportElementAddress
[2];
1356 UCHAR SourceElementAddress
[2];
1357 UCHAR Destination1ElementAddress
[2];
1358 UCHAR Destination2ElementAddress
[2];
1363 } EXCHANGE_MEDIUM
, *PEXCHANGE_MEDIUM
;
1364 struct _READ_ELEMENT_STATUS
{
1365 UCHAR OperationCode
;
1366 UCHAR ElementType
:4;
1368 UCHAR LogicalUnitNumber
:3;
1369 UCHAR StartingElementAddress
[2];
1370 UCHAR NumberOfElements
[2];
1372 UCHAR AllocationLength
[3];
1375 } READ_ELEMENT_STATUS
, *PREAD_ELEMENT_STATUS
;
1376 struct _SEND_VOLUME_TAG
{
1377 UCHAR OperationCode
;
1378 UCHAR ElementType
:4;
1380 UCHAR LogicalUnitNumber
:3;
1381 UCHAR StartingElementAddress
[2];
1386 UCHAR ParameterListLength
[2];
1389 } SEND_VOLUME_TAG
, *PSEND_VOLUME_TAG
;
1390 struct _REQUEST_VOLUME_ELEMENT_ADDRESS
{
1391 UCHAR OperationCode
;
1392 UCHAR ElementType
:4;
1394 UCHAR LogicalUnitNumber
:3;
1395 UCHAR StartingElementAddress
[2];
1396 UCHAR NumberElements
[2];
1398 UCHAR AllocationLength
[3];
1401 } REQUEST_VOLUME_ELEMENT_ADDRESS
, *PREQUEST_VOLUME_ELEMENT_ADDRESS
;
1402 struct _LOAD_UNLOAD
{
1403 UCHAR OperationCode
;
1414 } LOAD_UNLOAD
, *PLOAD_UNLOAD
;
1415 struct _MECH_STATUS
{
1416 UCHAR OperationCode
;
1420 UCHAR AllocationLength
[2];
1423 } MECH_STATUS
, *PMECH_STATUS
;
1424 struct _SYNCHRONIZE_CACHE10
{
1425 UCHAR OperationCode
;
1430 UCHAR LogicalBlockAddress
[4];
1432 UCHAR BlockCount
[2];
1434 } SYNCHRONIZE_CACHE10
, *PSYNCHRONIZE_CACHE10
;
1435 struct _GET_EVENT_STATUS_NOTIFICATION
{
1436 UCHAR OperationCode
;
1441 UCHAR NotificationClassRequest
;
1443 UCHAR EventListLength
[2];
1445 } GET_EVENT_STATUS_NOTIFICATION
, *PGET_EVENT_STATUS_NOTIFICATION
;
1446 struct _GET_PERFORMANCE
{
1447 UCHAR OperationCode
;
1452 UCHAR StartingLBA
[4];
1454 UCHAR MaximumNumberOfDescriptors
[2];
1458 struct _READ_DVD_STRUCTURE
{
1459 UCHAR OperationCode
;
1462 UCHAR RMDBlockNumber
[4];
1465 UCHAR AllocationLength
[2];
1469 } READ_DVD_STRUCTURE
, *PREAD_DVD_STRUCTURE
;
1470 struct _SET_STREAMING
{
1471 UCHAR OperationCode
;
1473 UCHAR ParameterListLength
[2];
1476 struct _SEND_DVD_STRUCTURE
{
1477 UCHAR OperationCode
;
1482 UCHAR ParameterListLength
[2];
1485 } SEND_DVD_STRUCTURE
, *PSEND_DVD_STRUCTURE
;
1487 UCHAR OperationCode
;
1491 UCHAR ParameterListLength
[2];
1495 } SEND_KEY
, *PSEND_KEY
;
1496 struct _REPORT_KEY
{
1497 UCHAR OperationCode
;
1500 UCHAR LogicalBlockAddress
[4];
1502 UCHAR AllocationLength
[2];
1506 } REPORT_KEY
, *PREPORT_KEY
;
1507 struct _SET_READ_AHEAD
{
1508 UCHAR OperationCode
;
1511 UCHAR TriggerLBA
[4];
1512 UCHAR ReadAheadLBA
[4];
1515 } SET_READ_AHEAD
, *PSET_READ_AHEAD
;
1516 struct _READ_FORMATTED_CAPACITIES
{
1517 UCHAR OperationCode
;
1521 UCHAR AllocationLength
[2];
1523 } READ_FORMATTED_CAPACITIES
, *PREAD_FORMATTED_CAPACITIES
;
1524 struct _REPORT_LUNS
{
1525 UCHAR OperationCode
;
1527 UCHAR AllocationLength
[4];
1530 } REPORT_LUNS
, *PREPORT_LUNS
;
1531 struct _PERSISTENT_RESERVE_IN
{
1532 UCHAR OperationCode
;
1533 UCHAR ServiceAction
:5;
1536 UCHAR AllocationLength
[2];
1538 } PERSISTENT_RESERVE_IN
, *PPERSISTENT_RESERVE_IN
;
1539 struct _PERSISTENT_RESERVE_OUT
{
1540 UCHAR OperationCode
;
1541 UCHAR ServiceAction
:5;
1546 UCHAR ParameterListLength
[2];
1548 } PERSISTENT_RESERVE_OUT
, *PPERSISTENT_RESERVE_OUT
;
1549 struct _GET_CONFIGURATION
{
1550 UCHAR OperationCode
;
1551 UCHAR RequestType
:1;
1553 UCHAR StartingFeature
[2];
1555 UCHAR AllocationLength
[2];
1557 } GET_CONFIGURATION
, *PGET_CONFIGURATION
;
1558 struct _SET_CD_SPEED
{
1559 UCHAR OperationCode
;
1560 _ANONYMOUS_UNION
union {
1562 _ANONYMOUS_STRUCT
struct {
1563 UCHAR RotationControl
:2;
1568 UCHAR WriteSpeed
[2];
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];
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
;
1992 #ifndef _INQUIRYDATA_DEFINED /* also in minitape.h */
1993 #define _INQUIRYDATA_DEFINED
1995 #define INQUIRYDATABUFFERSIZE 36
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;
2031 _ANONYMOUS_UNION
union {
2033 _ANONYMOUS_STRUCT
struct {
2034 UCHAR ANSIVersion
:3;
2035 UCHAR ECMAVersion
:3;
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];
2067 } INQUIRYDATA
, *PINQUIRYDATA
;
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
;
2177 typedef struct _SENSE_DATA
{
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];
2193 } SENSE_DATA
, *PSENSE_DATA
;
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
;
2201 typedef struct _READ_CAPACITY_DATA_EX
{
2202 LARGE_INTEGER LogicalBlockAddress
;
2203 ULONG BytesPerBlock
;
2204 } READ_CAPACITY_DATA_EX
, *PREAD_CAPACITY_DATA_EX
;
2206 /* Read Block Limits Data. Returned in Big Endian format */
2207 typedef struct _READ_BLOCK_LIMITS
{
2209 UCHAR BlockMaximumSize
[3];
2210 UCHAR BlockMinimumSize
[2];
2211 } READ_BLOCK_LIMITS_DATA
, *PREAD_BLOCK_LIMITS_DATA
;
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
;
2222 typedef struct _MODE_PARAMETER_HEADER
{
2223 UCHAR ModeDataLength
;
2225 UCHAR DeviceSpecificParameter
;
2226 UCHAR BlockDescriptorLength
;
2227 } MODE_PARAMETER_HEADER
, *PMODE_PARAMETER_HEADER
;
2229 typedef struct _MODE_PARAMETER_HEADER10
{
2230 UCHAR ModeDataLength
[2];
2232 UCHAR DeviceSpecificParameter
;
2234 UCHAR BlockDescriptorLength
[2];
2235 } MODE_PARAMETER_HEADER10
, *PMODE_PARAMETER_HEADER10
;
2237 typedef struct _MODE_PARAMETER_BLOCK
{
2239 UCHAR NumberOfBlocks
[3];
2241 UCHAR BlockLength
[3];
2242 } MODE_PARAMETER_BLOCK
, *PMODE_PARAMETER_BLOCK
;
2244 typedef struct _MODE_DISCONNECT_PAGE
{
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;
2257 } MODE_DISCONNECT_PAGE
, *PMODE_DISCONNECT_PAGE
;
2259 typedef struct _MODE_CACHING_PAGE
{
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];
2274 } MODE_CACHING_PAGE
, *PMODE_CACHING_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
;
2316 typedef struct _MODE_FLEXIBLE_DISK_PAGE
{
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];
2348 } MODE_FLEXIBLE_DISK_PAGE
, *PMODE_FLEXIBLE_DISK_PAGE
;
2350 typedef struct _MODE_FORMAT_PAGE
{
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;
2370 } MODE_FORMAT_PAGE
, *PMODE_FORMAT_PAGE
;
2372 typedef struct _MODE_RIGID_GEOMETRY_PAGE
{
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];
2389 } MODE_RIGID_GEOMETRY_PAGE
, *PMODE_RIGID_GEOMETRY_PAGE
;
2391 typedef struct _MODE_READ_WRITE_RECOVERY_PAGE
{
2404 UCHAR ReadRetryCount
;
2406 UCHAR WriteRetryCount
;
2408 } MODE_READ_WRITE_RECOVERY_PAGE
, *PMODE_READ_WRITE_RECOVERY_PAGE
;
2410 typedef struct _MODE_READ_RECOVERY_PAGE
{
2422 UCHAR ReadRetryCount
;
2424 } MODE_READ_RECOVERY_PAGE
, *PMODE_READ_RECOVERY_PAGE
;
2426 typedef struct _MODE_INFO_EXCEPTIONS
{
2431 _ANONYMOUS_UNION
union {
2433 _ANONYMOUS_STRUCT
struct {
2442 UCHAR ReportMethod
:4;
2444 UCHAR IntervalTimer
[4];
2445 UCHAR ReportCount
[4];
2446 } MODE_INFO_EXCEPTIONS
, *PMODE_INFO_EXCEPTIONS
;
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
;
2603 typedef struct _PORT_OUTPUT
{
2604 UCHAR ChannelSelection
;
2606 } PORT_OUTPUT
, *PPORT_OUTPUT
;
2608 typedef struct _AUDIO_OUTPUT
{
2610 UCHAR ParameterLength
;
2614 UCHAR LogicalBlocksPerSecond
[2];
2615 PORT_OUTPUT PortOutput
[4];
2616 } AUDIO_OUTPUT
, *PAUDIO_OUTPUT
;
2618 /* Atapi 2.5 changers */
2619 typedef struct _MECHANICAL_STATUS_INFORMATION_HEADER
{
2620 UCHAR CurrentSlot
:5;
2621 UCHAR ChangerState
:2;
2624 UCHAR MechanismState
:3;
2625 UCHAR CurrentLogicalBlockAddress
[3];
2626 UCHAR NumberAvailableSlots
;
2627 UCHAR SlotTableLength
[2];
2628 } MECHANICAL_STATUS_INFORMATION_HEADER
, *PMECHANICAL_STATUS_INFORMATION_HEADER
;
2630 typedef struct _SLOT_TABLE_INFORMATION
{
2631 UCHAR DiscChanged
:1;
2633 UCHAR DiscPresent
:1;
2635 } SLOT_TABLE_INFORMATION
, *PSLOT_TABLE_INFORMATION
;
2637 typedef struct _MECHANICAL_STATUS
{
2638 MECHANICAL_STATUS_INFORMATION_HEADER MechanicalStatusHeader
;
2639 SLOT_TABLE_INFORMATION SlotTableInfo
[1];
2640 } MECHANICAL_STATUS
, *PMECHANICAL_STATUS
;
2642 /* Tape definitions */
2643 typedef struct _TAPE_POSITION_DATA
{
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];
2656 } TAPE_POSITION_DATA
, *PTAPE_POSITION_DATA
;
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 {
2671 ULONGLONG AsULongLong
;
2672 } EIGHT_BYTE
, *PEIGHT_BYTE
;
2674 typedef union _FOUR_BYTE
{
2675 _ANONYMOUS_STRUCT
struct {
2682 } FOUR_BYTE
, *PFOUR_BYTE
;
2684 typedef union _TWO_BYTE
{
2685 _ANONYMOUS_STRUCT
struct {
2690 } TWO_BYTE
, *PTWO_BYTE
;
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; \
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; \
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; \
2723 #define REVERSE_SHORT(Short) { \
2725 PTWO_BYTE _val2 = (PTWO_BYTE)(Short); \
2726 _val = _val2->Byte0; \
2727 _val2->Byte0 = _val2->Byte1; \
2728 _val2->Byte1 = _val; \
2731 #define REVERSE_LONG(Long) { \
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; \
2742 #define WHICH_BIT(Data, Bit) { \
2744 for (_val = 0; _val < 32; _val++) { \
2745 if (((Data) >> _val) == 1) { \
2749 ASSERT(_val != 32); \
2753 /* FIXME : This structure doesn't exist in the official header */
2754 typedef struct _MODE_CDROM_WRITE_PARAMETERS_PAGE
{
2758 UCHAR LinkSizeValid
:1;
2759 UCHAR BufferUnderrunFreeEnabled
:1;
2763 UCHAR FixedPacket
:1;
2764 UCHAR MultiSession
:2;
2765 UCHAR DataBlockType
:4;
2769 UCHAR HostApplicationCode
:6;
2771 UCHAR SessionFormat
;
2773 UCHAR PacketSize
[4];
2774 UCHAR AudioPauseLength
[2];
2776 UCHAR MediaCatalogNumberValid
:1;
2777 UCHAR MediaCatalogNumber
[13];
2778 UCHAR MediaCatalogNumberZero
;
2779 UCHAR MediaCatalogNumberAFrame
;
2782 UCHAR ISRCCountry
[2];
2784 UCHAR ISRCRecordingYear
[2];
2785 UCHAR ISRCSerialNumber
[5];
2789 UCHAR SubHeaderData
[4];
2790 } MODE_CDROM_WRITE_PARAMETERS_PAGE
, *PMODE_CDROM_WRITE_PARAMETERS_PAGE
;
2796 #endif /* _NTSCSI_ */