source: Daodan/MSYS2/mingw32/i686-w64-mingw32/include/ddk/scsi.h@ 1194

Last change on this file since 1194 was 1166, checked in by rossy, 3 years ago

Daodan: Replace MinGW build env with an up-to-date MSYS2 env

File size: 90.0 KB
RevLine 
[1166]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
27extern "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#define NOTIFICATION_BUSY_EVENT_LO_CHANGE 0x2
117
118#define NOTIFICATION_BUSY_STATUS_NO_EVENT 0x0
119#define NOTIFICATION_BUSY_STATUS_POWER 0x1
120#define NOTIFICATION_BUSY_STATUS_IMMEDIATE 0x2
121#define NOTIFICATION_BUSY_STATUS_DEFERRED 0x3
122
123#define SECURITY_PROTOCOL_IEEE1667 0xEE
124
125#define DVD_FORMAT_LEAD_IN 0x00
126#define DVD_FORMAT_COPYRIGHT 0x01
127#define DVD_FORMAT_DISK_KEY 0x02
128#define DVD_FORMAT_BCA 0x03
129#define DVD_FORMAT_MANUFACTURING 0x04
130
131#define DVD_REPORT_AGID 0x00
132#define DVD_CHALLENGE_KEY 0x01
133#define DVD_KEY_1 0x02
134#define DVD_KEY_2 0x03
135#define DVD_TITLE_KEY 0x04
136#define DVD_REPORT_ASF 0x05
137#define DVD_INVALIDATE_AGID 0x3F
138
139#define BLANK_FULL 0x0
140#define BLANK_MINIMAL 0x1
141#define BLANK_TRACK 0x2
142#define BLANK_UNRESERVE_TRACK 0x3
143#define BLANK_TAIL 0x4
144#define BLANK_UNCLOSE_SESSION 0x5
145#define BLANK_SESSION 0x6
146
147#define CD_EXPECTED_SECTOR_ANY 0x0
148#define CD_EXPECTED_SECTOR_CDDA 0x1
149#define CD_EXPECTED_SECTOR_MODE1 0x2
150#define CD_EXPECTED_SECTOR_MODE2 0x3
151#define CD_EXPECTED_SECTOR_MODE2_FORM1 0x4
152#define CD_EXPECTED_SECTOR_MODE2_FORM2 0x5
153
154#define DISK_STATUS_EMPTY 0x00
155#define DISK_STATUS_INCOMPLETE 0x01
156#define DISK_STATUS_COMPLETE 0x02
157#define DISK_STATUS_OTHERS 0x03
158
159#define LAST_SESSION_EMPTY 0x00
160#define LAST_SESSION_INCOMPLETE 0x01
161#define LAST_SESSION_RESERVED_DAMAGED 0x02
162#define LAST_SESSION_COMPLETE 0x03
163
164#define DISK_TYPE_CDDA 0x00
165#define DISK_TYPE_CDI 0x10
166#define DISK_TYPE_XA 0x20
167#define DISK_TYPE_UNDEFINED 0xFF
168
169#define DISC_BGFORMAT_STATE_NONE 0x0
170#define DISC_BGFORMAT_STATE_INCOMPLETE 0x1
171#define DISC_BGFORMAT_STATE_RUNNING 0x2
172#define DISC_BGFORMAT_STATE_COMPLETE 0x3
173
174#define DATA_BLOCK_MODE0 0x0
175#define DATA_BLOCK_MODE1 0x1
176#define DATA_BLOCK_MODE2 0x2
177
178/* READ_TOC formats */
179#define READ_TOC_FORMAT_TOC 0x00
180#define READ_TOC_FORMAT_SESSION 0x01
181#define READ_TOC_FORMAT_FULL_TOC 0x02
182#define READ_TOC_FORMAT_PMA 0x03
183#define READ_TOC_FORMAT_ATIP 0x04
184
185#define CDB6GENERIC_LENGTH 6
186#define CDB10GENERIC_LENGTH 10
187#define CDB12GENERIC_LENGTH 12
188
189#define SETBITON 1
190#define SETBITOFF 0
191
192/* Mode Sense/Select page constants */
193#define MODE_PAGE_VENDOR_SPECIFIC 0x00
194#define MODE_PAGE_ERROR_RECOVERY 0x01
195#define MODE_PAGE_DISCONNECT 0x02
196#define MODE_PAGE_FORMAT_DEVICE 0x03
197#define MODE_PAGE_MRW 0x03
198#define MODE_PAGE_RIGID_GEOMETRY 0x04
199#define MODE_PAGE_FLEXIBILE 0x05
200#define MODE_PAGE_WRITE_PARAMETERS 0x05
201#define MODE_PAGE_VERIFY_ERROR 0x07
202#define MODE_PAGE_CACHING 0x08
203#define MODE_PAGE_PERIPHERAL 0x09
204#define MODE_PAGE_CONTROL 0x0A
205#define MODE_PAGE_MEDIUM_TYPES 0x0B
206#define MODE_PAGE_NOTCH_PARTITION 0x0C
207#define MODE_PAGE_CD_AUDIO_CONTROL 0x0E
208#define MODE_PAGE_DATA_COMPRESS 0x0F
209#define MODE_PAGE_DEVICE_CONFIG 0x10
210#define MODE_PAGE_XOR_CONTROL 0x10
211#define MODE_PAGE_MEDIUM_PARTITION 0x11
212#define MODE_PAGE_ENCLOSURE_SERVICES_MANAGEMENT 0x14
213#define MODE_PAGE_EXTENDED 0x15
214#define MODE_PAGE_EXTENDED_DEVICE_SPECIFIC 0x16
215#define MODE_PAGE_CDVD_FEATURE_SET 0x18
216#define MODE_PAGE_PROTOCOL_SPECIFIC_LUN 0x18
217#define MODE_PAGE_PROTOCOL_SPECIFIC_PORT 0x19
218#define MODE_PAGE_POWER_CONDITION 0x1A
219#define MODE_PAGE_LUN_MAPPING 0x1B
220#define MODE_PAGE_FAULT_REPORTING 0x1C
221#define MODE_PAGE_CDVD_INACTIVITY 0x1D
222#define MODE_PAGE_ELEMENT_ADDRESS 0x1D
223#define MODE_PAGE_TRANSPORT_GEOMETRY 0x1E
224#define MODE_PAGE_DEVICE_CAPABILITIES 0x1F
225#define MODE_PAGE_CAPABILITIES 0x2A
226
227#define MODE_SENSE_RETURN_ALL 0x3f
228
229#define MODE_SENSE_CURRENT_VALUES 0x00
230#define MODE_SENSE_CHANGEABLE_VALUES 0x40
231#define MODE_SENSE_DEFAULT_VAULES 0x80
232#define MODE_SENSE_SAVED_VALUES 0xc0
233
234/* SCSI CDB operation codes */
235#define SCSIOP_TEST_UNIT_READY 0x00
236#define SCSIOP_REZERO_UNIT 0x01
237#define SCSIOP_REWIND 0x01
238#define SCSIOP_REQUEST_BLOCK_ADDR 0x02
239#define SCSIOP_REQUEST_SENSE 0x03
240#define SCSIOP_FORMAT_UNIT 0x04
241#define SCSIOP_READ_BLOCK_LIMITS 0x05
242#define SCSIOP_REASSIGN_BLOCKS 0x07
243#define SCSIOP_INIT_ELEMENT_STATUS 0x07
244#define SCSIOP_READ6 0x08
245#define SCSIOP_RECEIVE 0x08
246#define SCSIOP_WRITE6 0x0A
247#define SCSIOP_PRINT 0x0A
248#define SCSIOP_SEND 0x0A
249#define SCSIOP_SEEK6 0x0B
250#define SCSIOP_TRACK_SELECT 0x0B
251#define SCSIOP_SLEW_PRINT 0x0B
252#define SCSIOP_SET_CAPACITY 0x0B
253#define SCSIOP_SEEK_BLOCK 0x0C
254#define SCSIOP_PARTITION 0x0D
255#define SCSIOP_READ_REVERSE 0x0F
256#define SCSIOP_WRITE_FILEMARKS 0x10
257#define SCSIOP_FLUSH_BUFFER 0x10
258#define SCSIOP_SPACE 0x11
259#define SCSIOP_INQUIRY 0x12
260#define SCSIOP_VERIFY6 0x13
261#define SCSIOP_RECOVER_BUF_DATA 0x14
262#define SCSIOP_MODE_SELECT 0x15
263#define SCSIOP_RESERVE_UNIT 0x16
264#define SCSIOP_RELEASE_UNIT 0x17
265#define SCSIOP_COPY 0x18
266#define SCSIOP_ERASE 0x19
267#define SCSIOP_MODE_SENSE 0x1A
268#define SCSIOP_START_STOP_UNIT 0x1B
269#define SCSIOP_STOP_PRINT 0x1B
270#define SCSIOP_LOAD_UNLOAD 0x1B
271#define SCSIOP_RECEIVE_DIAGNOSTIC 0x1C
272#define SCSIOP_SEND_DIAGNOSTIC 0x1D
273#define SCSIOP_MEDIUM_REMOVAL 0x1E
274
275#define SCSIOP_READ_FORMATTED_CAPACITY 0x23
276#define SCSIOP_READ_CAPACITY 0x25
277#define SCSIOP_READ 0x28
278#define SCSIOP_WRITE 0x2A
279#define SCSIOP_SEEK 0x2B
280#define SCSIOP_LOCATE 0x2B
281#define SCSIOP_POSITION_TO_ELEMENT 0x2B
282#define SCSIOP_WRITE_VERIFY 0x2E
283#define SCSIOP_VERIFY 0x2F
284#define SCSIOP_SEARCH_DATA_HIGH 0x30
285#define SCSIOP_SEARCH_DATA_EQUAL 0x31
286#define SCSIOP_SEARCH_DATA_LOW 0x32
287#define SCSIOP_SET_LIMITS 0x33
288#define SCSIOP_READ_POSITION 0x34
289#define SCSIOP_SYNCHRONIZE_CACHE 0x35
290#define SCSIOP_COMPARE 0x39
291#define SCSIOP_COPY_COMPARE 0x3A
292#define SCSIOP_WRITE_DATA_BUFF 0x3B
293#define SCSIOP_READ_DATA_BUFF 0x3C
294#define SCSIOP_WRITE_LONG 0x3F
295#define SCSIOP_CHANGE_DEFINITION 0x40
296#define SCSIOP_WRITE_SAME 0x41
297#define SCSIOP_READ_SUB_CHANNEL 0x42
298#define SCSIOP_UNMAP 0x42
299#define SCSIOP_READ_TOC 0x43
300#define SCSIOP_READ_HEADER 0x44
301#define SCSIOP_REPORT_DENSITY_SUPPORT 0x44
302#define SCSIOP_PLAY_AUDIO 0x45
303#define SCSIOP_GET_CONFIGURATION 0x46
304#define SCSIOP_PLAY_AUDIO_MSF 0x47
305#define SCSIOP_PLAY_TRACK_INDEX 0x48
306#define SCSIOP_SANITIZE 0x48
307#define SCSIOP_PLAY_TRACK_RELATIVE 0x49
308#define SCSIOP_GET_EVENT_STATUS 0x4A
309#define SCSIOP_PAUSE_RESUME 0x4B
310#define SCSIOP_LOG_SELECT 0x4C
311#define SCSIOP_LOG_SENSE 0x4D
312#define SCSIOP_STOP_PLAY_SCAN 0x4E
313#define SCSIOP_XDWRITE 0x50
314#define SCSIOP_XPWRITE 0x51
315#define SCSIOP_READ_DISK_INFORMATION 0x51
316#define SCSIOP_READ_DISC_INFORMATION 0x51
317#define SCSIOP_READ_TRACK_INFORMATION 0x52
318#define SCSIOP_XDWRITE_READ 0x53
319#define SCSIOP_RESERVE_TRACK_RZONE 0x53
320#define SCSIOP_SEND_OPC_INFORMATION 0x54
321#define SCSIOP_MODE_SELECT10 0x55
322#define SCSIOP_RESERVE_UNIT10 0x56
323#define SCSIOP_RESERVE_ELEMENT 0x56
324#define SCSIOP_RELEASE_UNIT10 0x57
325#define SCSIOP_RELEASE_ELEMENT 0x57
326#define SCSIOP_REPAIR_TRACK 0x58
327#define SCSIOP_MODE_SENSE10 0x5A
328#define SCSIOP_CLOSE_TRACK_SESSION 0x5B
329#define SCSIOP_READ_BUFFER_CAPACITY 0x5C
330#define SCSIOP_SEND_CUE_SHEET 0x5D
331#define SCSIOP_PERSISTENT_RESERVE_IN 0x5E
332#define SCSIOP_PERSISTENT_RESERVE_OUT 0x5F
333
334#define SCSIOP_REPORT_LUNS 0xA0
335#define SCSIOP_BLANK 0xA1
336#define SCSIOP_ATA_PASSTHROUGH12 0xA1
337#define SCSIOP_SEND_EVENT 0xA2
338#define SCSIOP_SECURITY_PROTOCOL_IN 0xA2
339#define SCSIOP_SEND_KEY 0xA3
340#define SCSIOP_MAINTENANCE_IN 0xA3
341#define SCSIOP_REPORT_KEY 0xA4
342#define SCSIOP_MAINTENANCE_OUT 0xA4
343#define SCSIOP_MOVE_MEDIUM 0xA5
344#define SCSIOP_LOAD_UNLOAD_SLOT 0xA6
345#define SCSIOP_EXCHANGE_MEDIUM 0xA6
346#define SCSIOP_SET_READ_AHEAD 0xA7
347#define SCSIOP_MOVE_MEDIUM_ATTACHED 0xA7
348#define SCSIOP_READ12 0xA8
349#define SCSIOP_GET_MESSAGE 0xA8
350#define SCSIOP_SERVICE_ACTION_OUT12 0xA9
351#define SCSIOP_WRITE12 0xAA
352#define SCSIOP_SEND_MESSAGE 0xAB
353#define SCSIOP_SERVICE_ACTION_IN12 0xAB
354#define SCSIOP_GET_PERFORMANCE 0xAC
355#define SCSIOP_READ_DVD_STRUCTURE 0xAD
356#define SCSIOP_WRITE_VERIFY12 0xAE
357#define SCSIOP_VERIFY12 0xAF
358#define SCSIOP_SEARCH_DATA_HIGH12 0xB0
359#define SCSIOP_SEARCH_DATA_EQUAL12 0xB1
360#define SCSIOP_SEARCH_DATA_LOW12 0xB2
361#define SCSIOP_SET_LIMITS12 0xB3
362#define SCSIOP_READ_ELEMENT_STATUS_ATTACHED 0xB4
363#define SCSIOP_REQUEST_VOL_ELEMENT 0xB5
364#define SCSIOP_SECURITY_PROTOCOL_OUT 0xB5
365#define SCSIOP_SEND_VOLUME_TAG 0xB6
366#define SCSIOP_SET_STREAMING 0xB6
367#define SCSIOP_READ_DEFECT_DATA 0xB7
368#define SCSIOP_READ_ELEMENT_STATUS 0xB8
369#define SCSIOP_READ_CD_MSF 0xB9
370#define SCSIOP_SCAN_CD 0xBA
371#define SCSIOP_REDUNDANCY_GROUP_IN 0xBA
372#define SCSIOP_SET_CD_SPEED 0xBB
373#define SCSIOP_REDUNDANCY_GROUP_OUT 0xBB
374#define SCSIOP_PLAY_CD 0xBC
375#define SCSIOP_SPARE_IN 0xBC
376#define SCSIOP_MECHANISM_STATUS 0xBD
377#define SCSIOP_SPARE_OUT 0xBD
378#define SCSIOP_READ_CD 0xBE
379#define SCSIOP_VOLUME_SET_IN 0xBE
380#define SCSIOP_SEND_DVD_STRUCTURE 0xBF
381#define SCSIOP_VOLUME_SET_OUT 0xBF
382#define SCSIOP_INIT_ELEMENT_RANGE 0xE7
383
384#define SCSIOP_XDWRITE_EXTENDED16 0x80
385#define SCSIOP_WRITE_FILEMARKS16 0x80
386#define SCSIOP_REBUILD16 0x81
387#define SCSIOP_READ_REVERSE16 0x81
388#define SCSIOP_REGENERATE16 0x82
389#define SCSIOP_EXTENDED_COPY 0x83
390#define SCSIOP_POPULATE_TOKEN 0x83
391#define SCSIOP_WRITE_USING_TOKEN 0x83
392#define SCSIOP_RECEIVE_COPY_RESULTS 0x84
393#define SCSIOP_RECEIVE_ROD_TOKEN_INFORMATION 0x84
394#define SCSIOP_ATA_PASSTHROUGH16 0x85
395#define SCSIOP_ACCESS_CONTROL_IN 0x86
396#define SCSIOP_ACCESS_CONTROL_OUT 0x87
397#define SCSIOP_READ16 0x88
398#define SCSIOP_COMPARE_AND_WRITE 0x89
399#define SCSIOP_WRITE16 0x8A
400#define SCSIOP_READ_ATTRIBUTES 0x8C
401#define SCSIOP_WRITE_ATTRIBUTES 0x8D
402#define SCSIOP_WRITE_VERIFY16 0x8E
403#define SCSIOP_VERIFY16 0x8F
404#define SCSIOP_PREFETCH16 0x90
405#define SCSIOP_SYNCHRONIZE_CACHE16 0x91
406#define SCSIOP_SPACE16 0x91
407#define SCSIOP_LOCK_UNLOCK_CACHE16 0x92
408#define SCSIOP_LOCATE16 0x92
409#define SCSIOP_WRITE_SAME16 0x93
410#define SCSIOP_ERASE16 0x93
411#define SCSIOP_ZBC_OUT 0x94
412#define SCSIOP_ZBC_IN 0x95
413#define SCSIOP_READ_DATA_BUFF16 0x9B
414#define SCSIOP_READ_CAPACITY16 0x9E
415#define SCSIOP_GET_LBA_STATUS 0x9E
416#define SCSIOP_GET_PHYSICAL_ELEMENT_STATUS 0x9E
417#define SCSIOP_REMOVE_ELEMENT_AND_TRUNCATE 0x9E
418#define SCSIOP_SERVICE_ACTION_IN16 0x9E
419#define SCSIOP_SERVICE_ACTION_OUT16 0x9F
420
421#define SCSIOP_OPERATION32 0x7F
422
423#define SERVICE_ACTION_OVERWRITE 0x01
424#define SERVICE_ACTION_BLOCK_ERASE 0x02
425#define SERVICE_ACTION_CRYPTO_ERASE 0x03
426#define SERVICE_ACTION_EXIT_FAILURE 0x1f
427
428#define SERVICE_ACTION_XDWRITE 0x0004
429#define SERVICE_ACTION_XPWRITE 0x0006
430#define SERVICE_ACTION_XDWRITEREAD 0x0007
431#define SERVICE_ACTION_WRITE 0x000B
432#define SERVICE_ACTION_WRITE_VERIFY 0x000C
433#define SERVICE_ACTION_WRITE_SAME 0x000D
434#define SERVICE_ACTION_ORWRITE 0x000E
435
436#define SERVICE_ACTION_POPULATE_TOKEN 0x10
437#define SERVICE_ACTION_WRITE_USING_TOKEN 0x11
438
439#define SERVICE_ACTION_RECEIVE_TOKEN_INFORMATION 0x07
440
441#define SERVICE_ACTION_CLOSE_ZONE 0x01
442#define SERVICE_ACTION_FINISH_ZONE 0x02
443#define SERVICE_ACTION_OPEN_ZONE 0x03
444#define SERVICE_ACTION_RESET_WRITE_POINTER 0x04
445
446#define SERVICE_ACTION_REPORT_ZONES 0x00
447
448#define REPORT_ZONES_OPTION_LIST_ALL_ZONES 0x00
449#define REPORT_ZONES_OPTION_LIST_EMPTY_ZONES 0x01
450#define REPORT_ZONES_OPTION_LIST_IMPLICITLY_OPENED_ZONES 0x02
451#define REPORT_ZONES_OPTION_LIST_EXPLICITLY_OPENED_ZONES 0x03
452#define REPORT_ZONES_OPTION_LIST_CLOSED_ZONES 0x04
453#define REPORT_ZONES_OPTION_LIST_FULL_ZONES 0x05
454#define REPORT_ZONES_OPTION_LIST_READ_ONLY_ZONES 0x06
455#define REPORT_ZONES_OPTION_LIST_OFFLINE_ZONES 0x07
456#define REPORT_ZONES_OPTION_LIST_RWP_ZONES 0x10
457#define REPORT_ZONES_OPTION_LIST_NON_SEQUENTIAL_WRITE_RESOURCES_ACTIVE_ZONES 0x11
458#define REPORT_ZONES_OPTION_LIST_NOT_WRITE_POINTER_ZONES 0x3F
459
460#define SERVICE_ACTION_READ_CAPACITY16 0x10
461#define SERVICE_ACTION_GET_LBA_STATUS 0x12
462#define SERVICE_ACTION_GET_PHYSICAL_ELEMENT_STATUS 0x17
463#define SERVICE_ACTION_REMOVE_ELEMENT_AND_TRUNCATE 0x18
464#define SERVICE_ACTION_REPORT_TIMESTAMP 0x0F
465#define SERVICE_ACTION_SET_TIMESTAMP 0x0F
466
467#define CDB_RETURN_ON_COMPLETION 0
468#define CDB_RETURN_IMMEDIATE 1
469
470#define CDB_FORCE_MEDIA_ACCESS 0x08
471
472#define SCSIOP_DENON_EJECT_DISC 0xE6
473#define SCSIOP_DENON_STOP_AUDIO 0xE7
474#define SCSIOP_DENON_PLAY_AUDIO 0xE8
475#define SCSIOP_DENON_READ_TOC 0xE9
476#define SCSIOP_DENON_READ_SUBCODE 0xEB
477
478#define SCSIMESS_ABORT 0x06
479#define SCSIMESS_ABORT_WITH_TAG 0x0D
480#define SCSIMESS_BUS_DEVICE_RESET 0X0C
481#define SCSIMESS_CLEAR_QUEUE 0X0E
482#define SCSIMESS_COMMAND_COMPLETE 0X00
483#define SCSIMESS_DISCONNECT 0X04
484#define SCSIMESS_EXTENDED_MESSAGE 0X01
485#define SCSIMESS_IDENTIFY 0X80
486#define SCSIMESS_IDENTIFY_WITH_DISCON 0XC0
487#define SCSIMESS_IGNORE_WIDE_RESIDUE 0X23
488#define SCSIMESS_INITIATE_RECOVERY 0X0F
489#define SCSIMESS_INIT_DETECTED_ERROR 0X05
490#define SCSIMESS_LINK_CMD_COMP 0X0A
491#define SCSIMESS_LINK_CMD_COMP_W_FLAG 0X0B
492#define SCSIMESS_MESS_PARITY_ERROR 0X09
493#define SCSIMESS_MESSAGE_REJECT 0X07
494#define SCSIMESS_NO_OPERATION 0X08
495#define SCSIMESS_HEAD_OF_QUEUE_TAG 0X21
496#define SCSIMESS_ORDERED_QUEUE_TAG 0X22
497#define SCSIMESS_SIMPLE_QUEUE_TAG 0X20
498#define SCSIMESS_RELEASE_RECOVERY 0X10
499#define SCSIMESS_RESTORE_POINTERS 0X03
500#define SCSIMESS_SAVE_DATA_POINTER 0X02
501#define SCSIMESS_TERMINATE_IO_PROCESS 0X11
502
503#define SCSIMESS_MODIFY_DATA_POINTER 0X00
504#define SCSIMESS_SYNCHRONOUS_DATA_REQ 0X01
505#define SCSIMESS_WIDE_DATA_REQUEST 0X03
506
507#define SCSIMESS_MODIFY_DATA_LENGTH 5
508#define SCSIMESS_SYNCH_DATA_LENGTH 3
509#define SCSIMESS_WIDE_DATA_LENGTH 2
510
511#define CDB_INQUIRY_EVPD 0x01
512
513#define LUN0_FORMAT_SAVING_DEFECT_LIST 0
514#define USE_DEFAULTMSB 0
515#define USE_DEFAULTLSB 0
516
517#define START_UNIT_CODE 0x01
518#define STOP_UNIT_CODE 0x00
519
520#define OFFSET_VER_DESCRIPTOR_ONE (FIELD_OFFSET(INQUIRYDATA, VersionDescriptors[0]))
521#define OFFSET_VER_DESCRIPTOR_EIGHT (FIELD_OFFSET(INQUIRYDATA, VersionDescriptors[8]))
522
523/* INQUIRYDATA.DeviceType constants */
524#define DIRECT_ACCESS_DEVICE 0x00
525#define SEQUENTIAL_ACCESS_DEVICE 0x01
526#define PRINTER_DEVICE 0x02
527#define PROCESSOR_DEVICE 0x03
528#define WRITE_ONCE_READ_MULTIPLE_DEVICE 0x04
529#define READ_ONLY_DIRECT_ACCESS_DEVICE 0x05
530#define SCANNER_DEVICE 0x06
531#define OPTICAL_DEVICE 0x07
532#define MEDIUM_CHANGER 0x08
533#define COMMUNICATION_DEVICE 0x09
534#define ARRAY_CONTROLLER_DEVICE 0x0C
535#define SCSI_ENCLOSURE_DEVICE 0x0D
536#define REDUCED_BLOCK_DEVICE 0x0E
537#define OPTICAL_CARD_READER_WRITER_DEVICE 0x0F
538#define BRIDGE_CONTROLLER_DEVICE 0x10
539#define OBJECT_BASED_STORAGE_DEVICE 0x11
540#define HOST_MANAGED_ZONED_BLOCK_DEVICE 0x14
541#define UNKNOWN_OR_NO_DEVICE 0x1F
542#define LOGICAL_UNIT_NOT_PRESENT_DEVICE 0x7F
543
544#define DEVICE_QUALIFIER_ACTIVE 0x00
545#define DEVICE_QUALIFIER_NOT_ACTIVE 0x01
546#define DEVICE_QUALIFIER_NOT_SUPPORTED 0x03
547
548/* INQUIRYDATA.DeviceTypeQualifier constants */
549#define DEVICE_CONNECTED 0x00
550
551#define SCSISTAT_GOOD 0x00
552#define SCSISTAT_CHECK_CONDITION 0x02
553#define SCSISTAT_CONDITION_MET 0x04
554#define SCSISTAT_BUSY 0x08
555#define SCSISTAT_INTERMEDIATE 0x10
556#define SCSISTAT_INTERMEDIATE_COND_MET 0x14
557#define SCSISTAT_RESERVATION_CONFLICT 0x18
558#define SCSISTAT_COMMAND_TERMINATED 0x22
559#define SCSISTAT_QUEUE_FULL 0x28
560
561#define VPD_MAX_BUFFER_SIZE 0xff
562
563#define VPD_SUPPORTED_PAGES 0x00
564#define VPD_SERIAL_NUMBER 0x80
565#define VPD_DEVICE_IDENTIFIERS 0x83
566#define VPD_MEDIA_SERIAL_NUMBER 0x84
567#define VPD_SOFTWARE_INTERFACE_IDENTIFIERS 0x84
568#define VPD_NETWORK_MANAGEMENT_ADDRESSES 0x85
569#define VPD_EXTENDED_INQUIRY_DATA 0x86
570#define VPD_MODE_PAGE_POLICY 0x87
571#define VPD_SCSI_PORTS 0x88
572
573#define RESERVATION_ACTION_READ_KEYS 0x00
574#define RESERVATION_ACTION_READ_RESERVATIONS 0x01
575
576#define RESERVATION_ACTION_REGISTER 0x00
577#define RESERVATION_ACTION_RESERVE 0x01
578#define RESERVATION_ACTION_RELEASE 0x02
579#define RESERVATION_ACTION_CLEAR 0x03
580#define RESERVATION_ACTION_PREEMPT 0x04
581#define RESERVATION_ACTION_PREEMPT_ABORT 0x05
582#define RESERVATION_ACTION_REGISTER_IGNORE_EXISTING 0x06
583
584#define RESERVATION_SCOPE_LU 0x00
585#define RESERVATION_SCOPE_ELEMENT 0x02
586
587#define RESERVATION_TYPE_WRITE_EXCLUSIVE 0x01
588#define RESERVATION_TYPE_EXCLUSIVE 0x03
589#define RESERVATION_TYPE_WRITE_EXCLUSIVE_REGISTRANTS 0x05
590#define RESERVATION_TYPE_EXCLUSIVE_REGISTRANTS 0x06
591
592#define SENSE_BUFFER_SIZE 18
593
594#define MAX_SENSE_BUFFER_SIZE 255
595
596#define MAX_ADDITIONAL_SENSE_BYTES (MAX_SENSE_BUFFER_SIZE - SENSE_BUFFER_SIZE)
597
598/* Sense codes */
599#define SCSI_SENSE_NO_SENSE 0x00
600#define SCSI_SENSE_RECOVERED_ERROR 0x01
601#define SCSI_SENSE_NOT_READY 0x02
602#define SCSI_SENSE_MEDIUM_ERROR 0x03
603#define SCSI_SENSE_HARDWARE_ERROR 0x04
604#define SCSI_SENSE_ILLEGAL_REQUEST 0x05
605#define SCSI_SENSE_UNIT_ATTENTION 0x06
606#define SCSI_SENSE_DATA_PROTECT 0x07
607#define SCSI_SENSE_BLANK_CHECK 0x08
608#define SCSI_SENSE_UNIQUE 0x09
609#define SCSI_SENSE_COPY_ABORTED 0x0A
610#define SCSI_SENSE_ABORTED_COMMAND 0x0B
611#define SCSI_SENSE_EQUAL 0x0C
612#define SCSI_SENSE_VOL_OVERFLOW 0x0D
613#define SCSI_SENSE_MISCOMPARE 0x0E
614#define SCSI_SENSE_RESERVED 0x0F
615
616/* Additional tape bit */
617#define SCSI_ILLEGAL_LENGTH 0x20
618#define SCSI_EOM 0x40
619#define SCSI_FILE_MARK 0x80
620
621/* Additional Sense codes */
622#define SCSI_ADSENSE_NO_SENSE 0x00
623#define SCSI_ADSENSE_NO_SEEK_COMPLETE 0x02
624#define SCSI_ADSENSE_LUN_NOT_READY 0x04
625#define SCSI_ADSENSE_LUN_COMMUNICATION 0x08
626#define SCSI_ADSENSE_WRITE_ERROR 0x0C
627#define SCSI_ADSENSE_TRACK_ERROR 0x14
628#define SCSI_ADSENSE_SEEK_ERROR 0x15
629#define SCSI_ADSENSE_REC_DATA_NOECC 0x17
630#define SCSI_ADSENSE_REC_DATA_ECC 0x18
631#define SCSI_ADSENSE_PARAMETER_LIST_LENGTH 0x1A
632#define SCSI_ADSENSE_ILLEGAL_COMMAND 0x20
633#define SCSI_ADSENSE_ILLEGAL_BLOCK 0x21
634#define SCSI_ADSENSE_INVALID_CDB 0x24
635#define SCSI_ADSENSE_INVALID_LUN 0x25
636#define SCSI_ADSENSE_INVALID_FIELD_PARAMETER_LIST 0x26
637#define SCSI_ADSENSE_WRITE_PROTECT 0x27
638#define SCSI_ADSENSE_MEDIUM_CHANGED 0x28
639#define SCSI_ADSENSE_BUS_RESET 0x29
640#define SCSI_ADSENSE_PARAMETERS_CHANGED 0x2A
641#define SCSI_ADSENSE_INSUFFICIENT_TIME_FOR_OPERATION 0x2E
642#define SCSI_ADSENSE_INVALID_MEDIA 0x30
643#define SCSI_ADSENSE_NO_MEDIA_IN_DEVICE 0x3a
644#define SCSI_ADSENSE_POSITION_ERROR 0x3b
645#define SCSI_ADSENSE_OPERATING_CONDITIONS_CHANGED 0x3f
646#define SCSI_ADSENSE_OPERATOR_REQUEST 0x5a
647#define SCSI_ADSENSE_FAILURE_PREDICTION_THRESHOLD_EXCEEDED 0x5d
648#define SCSI_ADSENSE_ILLEGAL_MODE_FOR_THIS_TRACK 0x64
649#define SCSI_ADSENSE_COPY_PROTECTION_FAILURE 0x6f
650#define SCSI_ADSENSE_POWER_CALIBRATION_ERROR 0x73
651#define SCSI_ADSENSE_VENDOR_UNIQUE 0x80
652#define SCSI_ADSENSE_MUSIC_AREA 0xA0
653#define SCSI_ADSENSE_DATA_AREA 0xA1
654#define SCSI_ADSENSE_VOLUME_OVERFLOW 0xA7
655
656#define SCSI_ADWRITE_PROTECT SCSI_ADSENSE_WRITE_PROTECT
657#define SCSI_FAILURE_PREDICTION_THRESHOLD_EXCEEDED SCSI_ADSENSE_FAILURE_PREDICTION_THRESHOLD_EXCEEDED
658
659#define SCSI_SENSEQ_CAUSE_NOT_REPORTABLE 0x00
660#define SCSI_SENSEQ_BECOMING_READY 0x01
661#define SCSI_SENSEQ_INIT_COMMAND_REQUIRED 0x02
662#define SCSI_SENSEQ_MANUAL_INTERVENTION_REQUIRED 0x03
663#define SCSI_SENSEQ_FORMAT_IN_PROGRESS 0x04
664#define SCSI_SENSEQ_REBUILD_IN_PROGRESS 0x05
665#define SCSI_SENSEQ_RECALCULATION_IN_PROGRESS 0x06
666#define SCSI_SENSEQ_OPERATION_IN_PROGRESS 0x07
667#define SCSI_SENSEQ_LONG_WRITE_IN_PROGRESS 0x08
668#define SCSI_SENSEQ_LOSS_OF_STREAMING 0x09
669#define SCSI_SENSEQ_PADDING_BLOCKS_ADDED 0x0A
670
671#define SCSI_SENSEQ_COMM_FAILURE 0x00
672#define SCSI_SENSEQ_COMM_TIMEOUT 0x01
673#define SCSI_SENSEQ_COMM_PARITY_ERROR 0x02
674#define SCSI_SESNEQ_COMM_CRC_ERROR 0x03
675#define SCSI_SENSEQ_UNREACHABLE_TARGET 0x04
676
677#define SCSI_SENSEQ_FILEMARK_DETECTED 0x01
678#define SCSI_SENSEQ_END_OF_MEDIA_DETECTED 0x02
679#define SCSI_SENSEQ_SETMARK_DETECTED 0x03
680#define SCSI_SENSEQ_BEGINNING_OF_MEDIA_DETECTED 0x04
681
682#define SCSI_SENSEQ_ILLEGAL_ELEMENT_ADDR 0x01
683
684#define SCSI_SENSEQ_DESTINATION_FULL 0x0d
685#define SCSI_SENSEQ_SOURCE_EMPTY 0x0e
686
687#define SCSI_SENSEQ_INCOMPATIBLE_MEDIA_INSTALLED 0x00
688#define SCSI_SENSEQ_UNKNOWN_FORMAT 0x01
689#define SCSI_SENSEQ_INCOMPATIBLE_FORMAT 0x02
690#define SCSI_SENSEQ_CLEANING_CARTRIDGE_INSTALLED 0x03
691
692#define SCSI_SENSEQ_TARGET_OPERATING_CONDITIONS_CHANGED 0x00
693#define SCSI_SENSEQ_MICROCODE_CHANGED 0x01
694#define SCSI_SENSEQ_OPERATING_DEFINITION_CHANGED 0x02
695#define SCSI_SENSEQ_INQUIRY_DATA_CHANGED 0x03
696#define SCSI_SENSEQ_COMPONENT_DEVICE_ATTACHED 0x04
697#define SCSI_SENSEQ_DEVICE_IDENTIFIER_CHANGED 0x05
698#define SCSI_SENSEQ_REDUNDANCY_GROUP_MODIFIED 0x06
699#define SCSI_SENSEQ_REDUNDANCY_GROUP_DELETED 0x07
700#define SCSI_SENSEQ_SPARE_MODIFIED 0x08
701#define SCSI_SENSEQ_SPARE_DELETED 0x09
702#define SCSI_SENSEQ_VOLUME_SET_MODIFIED 0x0A
703#define SCSI_SENSEQ_VOLUME_SET_DELETED 0x0B
704#define SCSI_SENSEQ_VOLUME_SET_DEASSIGNED 0x0C
705#define SCSI_SENSEQ_VOLUME_SET_REASSIGNED 0x0D
706#define SCSI_SENSEQ_REPORTED_LUNS_DATA_CHANGED 0x0E
707#define SCSI_SENSEQ_ECHO_BUFFER_OVERWRITTEN 0x0F
708#define SCSI_SENSEQ_MEDIUM_LOADABLE 0x10
709#define SCSI_SENSEQ_MEDIUM_AUXILIARY_MEMORY_ACCESSIBLE 0x11
710
711#define SCSI_SENSEQ_STATE_CHANGE_INPUT 0x00
712#define SCSI_SENSEQ_MEDIUM_REMOVAL 0x01
713#define SCSI_SENSEQ_WRITE_PROTECT_ENABLE 0x02
714#define SCSI_SENSEQ_WRITE_PROTECT_DISABLE 0x03
715
716#define SCSI_SENSEQ_AUTHENTICATION_FAILURE 0x00
717#define SCSI_SENSEQ_KEY_NOT_PRESENT 0x01
718#define SCSI_SENSEQ_KEY_NOT_ESTABLISHED 0x02
719#define SCSI_SENSEQ_READ_OF_SCRAMBLED_SECTOR_WITHOUT_AUTHENTICATION 0x03
720#define SCSI_SENSEQ_MEDIA_CODE_MISMATCHED_TO_LOGICAL_UNIT 0x04
721#define SCSI_SENSEQ_LOGICAL_UNIT_RESET_COUNT_ERROR 0x05
722
723#define SCSI_SENSEQ_POWER_CALIBRATION_AREA_ALMOST_FULL 0x01
724#define SCSI_SENSEQ_POWER_CALIBRATION_AREA_FULL 0x02
725#define SCSI_SENSEQ_POWER_CALIBRATION_AREA_ERROR 0x03
726#define SCSI_SENSEQ_PMA_RMA_UPDATE_FAILURE 0x04
727#define SCSI_SENSEQ_PMA_RMA_IS_FULL 0x05
728#define SCSI_SENSEQ_PMA_RMA_ALMOST_FULL 0x06
729
730#define FILE_DEVICE_SCSI 0x0000001b
731
732#define IOCTL_SCSI_EXECUTE_IN ((FILE_DEVICE_SCSI << 16) + 0x0011)
733#define IOCTL_SCSI_EXECUTE_OUT ((FILE_DEVICE_SCSI << 16) + 0x0012)
734#define IOCTL_SCSI_EXECUTE_NONE ((FILE_DEVICE_SCSI << 16) + 0x0013)
735
736/* SMART support in ATAPI */
737#define IOCTL_SCSI_MINIPORT_SMART_VERSION ((FILE_DEVICE_SCSI << 16) + 0x0500)
738#define IOCTL_SCSI_MINIPORT_IDENTIFY ((FILE_DEVICE_SCSI << 16) + 0x0501)
739#define IOCTL_SCSI_MINIPORT_READ_SMART_ATTRIBS ((FILE_DEVICE_SCSI << 16) + 0x0502)
740#define IOCTL_SCSI_MINIPORT_READ_SMART_THRESHOLDS ((FILE_DEVICE_SCSI << 16) + 0x0503)
741#define IOCTL_SCSI_MINIPORT_ENABLE_SMART ((FILE_DEVICE_SCSI << 16) + 0x0504)
742#define IOCTL_SCSI_MINIPORT_DISABLE_SMART ((FILE_DEVICE_SCSI << 16) + 0x0505)
743#define IOCTL_SCSI_MINIPORT_RETURN_STATUS ((FILE_DEVICE_SCSI << 16) + 0x0506)
744#define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTOSAVE ((FILE_DEVICE_SCSI << 16) + 0x0507)
745#define IOCTL_SCSI_MINIPORT_SAVE_ATTRIBUTE_VALUES ((FILE_DEVICE_SCSI << 16) + 0x0508)
746#define IOCTL_SCSI_MINIPORT_EXECUTE_OFFLINE_DIAGS ((FILE_DEVICE_SCSI << 16) + 0x0509)
747#define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTO_OFFLINE ((FILE_DEVICE_SCSI << 16) + 0x050a)
748#define IOCTL_SCSI_MINIPORT_READ_SMART_LOG ((FILE_DEVICE_SCSI << 16) + 0x050b)
749#define IOCTL_SCSI_MINIPORT_WRITE_SMART_LOG ((FILE_DEVICE_SCSI << 16) + 0x050c)
750
751/* CLUSTER support */
752#define IOCTL_SCSI_MINIPORT_NOT_QUORUM_CAPABLE ((FILE_DEVICE_SCSI << 16) + 0x0520)
753#define IOCTL_SCSI_MINIPORT_NOT_CLUSTER_CAPABLE ((FILE_DEVICE_SCSI << 16) + 0x0521)
754
755#define MODE_FD_SINGLE_SIDE 0x01
756#define MODE_FD_DOUBLE_SIDE 0x02
757#define MODE_FD_MAXIMUM_TYPE 0x1E
758#define MODE_DSP_FUA_SUPPORTED 0x10
759#define MODE_DSP_WRITE_PROTECT 0x80
760
761#define CDDA_CHANNEL_MUTED 0x0
762#define CDDA_CHANNEL_ZERO 0x1
763#define CDDA_CHANNEL_ONE 0x2
764#define CDDA_CHANNEL_TWO 0x4
765#define CDDA_CHANNEL_THREE 0x8
766
767#define CDVD_LMT_CADDY 0
768#define CDVD_LMT_TRAY 1
769#define CDVD_LMT_POPUP 2
770#define CDVD_LMT_RESERVED1 3
771#define CDVD_LMT_CHANGER_INDIVIDUAL 4
772#define CDVD_LMT_CHANGER_CARTRIDGE 5
773#define CDVD_LMT_RESERVED2 6
774#define CDVD_LMT_RESERVED3 7
775
776#define LOADING_MECHANISM_CADDY 0x00
777#define LOADING_MECHANISM_TRAY 0x01
778#define LOADING_MECHANISM_POPUP 0x02
779#define LOADING_MECHANISM_INDIVIDUAL_CHANGER 0x04
780#define LOADING_MECHANISM_CARTRIDGE_CHANGER 0x05
781
782#define MODE_BLOCK_DESC_LENGTH 8
783#define MODE_HEADER_LENGTH 4
784#define MODE_HEADER_LENGTH10 8
785
786/* CDROM audio control */
787#define CDB_AUDIO_PAUSE 0x00
788#define CDB_AUDIO_RESUME 0x01
789#define CDB_DEVICE_START 0x11
790#define CDB_DEVICE_STOP 0x10
791#define CDB_EJECT_MEDIA 0x10
792#define CDB_LOAD_MEDIA 0x01
793#define CDB_SUBCHANNEL_HEADER 0x00
794#define CDB_SUBCHANNEL_BLOCK 0x01
795
796#define CDROM_AUDIO_CONTROL_PAGE 0x0E
797#define MODE_SELECT_IMMEDIATE 0x04
798#define MODE_SELECT_PFBIT 0x10
799
800#define CDB_USE_MSF 0x01
801
802/* Multisession CDROMs */
803#define GET_LAST_SESSION 0x01
804#define GET_SESSION_DATA 0x02
805
806typedef union _CDB {
807 struct _CDB6GENERIC {
808 UCHAR OperationCode;
809 UCHAR Immediate:1;
810 UCHAR CommandUniqueBits:4;
811 UCHAR LogicalUnitNumber:3;
812 UCHAR CommandUniqueBytes[3];
813 UCHAR Link:1;
814 UCHAR Flag:1;
815 UCHAR Reserved:4;
816 UCHAR VendorUnique:2;
817 } CDB6GENERIC;
818 struct _CDB6READWRITE {
819 UCHAR OperationCode;
820 UCHAR LogicalBlockMsb1:5;
821 UCHAR LogicalUnitNumber:3;
822 UCHAR LogicalBlockMsb0;
823 UCHAR LogicalBlockLsb;
824 UCHAR TransferBlocks;
825 UCHAR Control;
826 } CDB6READWRITE;
827 struct _CDB6INQUIRY {
828 UCHAR OperationCode;
829 UCHAR Reserved1:5;
830 UCHAR LogicalUnitNumber:3;
831 UCHAR PageCode;
832 UCHAR IReserved;
833 UCHAR AllocationLength;
834 UCHAR Control;
835 } CDB6INQUIRY;
836 struct _CDB6INQUIRY3 {
837 UCHAR OperationCode;
838 UCHAR EnableVitalProductData:1;
839 UCHAR CommandSupportData:1;
840 UCHAR Reserved1:6;
841 UCHAR PageCode;
842 UCHAR Reserved2;
843 UCHAR AllocationLength;
844 UCHAR Control;
845 } CDB6INQUIRY3;
846 struct _CDB6VERIFY {
847 UCHAR OperationCode;
848 UCHAR Fixed:1;
849 UCHAR ByteCompare:1;
850 UCHAR Immediate:1;
851 UCHAR Reserved:2;
852 UCHAR LogicalUnitNumber:3;
853 UCHAR VerificationLength[3];
854 UCHAR Control;
855 } CDB6VERIFY;
856 struct _RECEIVE_DIAGNOSTIC {
857 UCHAR OperationCode;
858 UCHAR PageCodeValid:1;
859 UCHAR Reserved:7;
860 UCHAR PageCode;
861 UCHAR AllocationLength[2];
862 UCHAR Control;
863 } RECEIVE_DIAGNOSTIC;
864 struct _SEND_DIAGNOSTIC {
865 UCHAR OperationCode;
866 UCHAR UnitOffline:1;
867 UCHAR DeviceOffline:1;
868 UCHAR SelfTest:1;
869 UCHAR Reserved1:1;
870 UCHAR PageFormat:1;
871 UCHAR SelfTestCode:3;
872 UCHAR Reserved2;
873 UCHAR ParameterListLength[2];
874 UCHAR Control;
875 } SEND_DIAGNOSTIC;
876 struct _CDB6FORMAT {
877 UCHAR OperationCode;
878 UCHAR FormatControl:5;
879 UCHAR LogicalUnitNumber:3;
880 UCHAR FReserved1;
881 UCHAR InterleaveMsb;
882 UCHAR InterleaveLsb;
883 UCHAR FReserved2;
884 } CDB6FORMAT;
885 struct _CDB10 {
886 UCHAR OperationCode;
887 UCHAR RelativeAddress:1;
888 UCHAR Reserved1:2;
889 UCHAR ForceUnitAccess:1;
890 UCHAR DisablePageOut:1;
891 UCHAR LogicalUnitNumber:3;
892 UCHAR LogicalBlockByte0;
893 UCHAR LogicalBlockByte1;
894 UCHAR LogicalBlockByte2;
895 UCHAR LogicalBlockByte3;
896 UCHAR Reserved2;
897 UCHAR TransferBlocksMsb;
898 UCHAR TransferBlocksLsb;
899 UCHAR Control;
900 } CDB10;
901 struct _CDB12 {
902 UCHAR OperationCode;
903 UCHAR RelativeAddress:1;
904 UCHAR Reserved1:2;
905 UCHAR ForceUnitAccess:1;
906 UCHAR DisablePageOut:1;
907 UCHAR LogicalUnitNumber:3;
908 UCHAR LogicalBlock[4];
909 UCHAR TransferLength[4];
910 UCHAR Reserved2;
911 UCHAR Control;
912 } CDB12;
913 struct _CDB16 {
914 UCHAR OperationCode;
915 UCHAR Reserved1:3;
916 UCHAR ForceUnitAccess:1;
917 UCHAR DisablePageOut:1;
918 UCHAR Protection:3;
919 UCHAR LogicalBlock[8];
920 UCHAR TransferLength[4];
921 UCHAR Reserved2;
922 UCHAR Control;
923 } CDB16;
924 struct _READ_BUFFER_10 {
925 UCHAR OperationCode;
926 UCHAR Mode:5;
927 UCHAR ModeSpecific:3;
928 UCHAR BufferId;
929 UCHAR BufferOffset[3];
930 UCHAR AllocationLength[3];
931 UCHAR Control;
932 } READ_BUFFER_10;
933 struct _READ_BUFFER_16 {
934 UCHAR OperationCode;
935 UCHAR Mode:5;
936 UCHAR ModeSpecific:3;
937 UCHAR BufferOffset[8];
938 UCHAR AllocationLength[4];
939 UCHAR BufferId;
940 UCHAR Control;
941 } READ_BUFFER_16;
942 struct _SECURITY_PROTOCOL_IN {
943 UCHAR OperationCode;
944 UCHAR SecurityProtocol;
945 UCHAR SecurityProtocolSpecific[2];
946 UCHAR Reserved1:7;
947 UCHAR INC_512:1;
948 UCHAR Reserved2;
949 UCHAR AllocationLength[4];
950 UCHAR Reserved3;
951 UCHAR Control;
952 } SECURITY_PROTOCOL_IN;
953 struct _SECURITY_PROTOCOL_OUT {
954 UCHAR OperationCode;
955 UCHAR SecurityProtocol;
956 UCHAR SecurityProtocolSpecific[2];
957 UCHAR Reserved1:7;
958 UCHAR INC_512:1;
959 UCHAR Reserved2;
960 UCHAR AllocationLength[4];
961 UCHAR Reserved3;
962 UCHAR Control;
963 } SECURITY_PROTOCOL_OUT;
964 struct _UNMAP {
965 UCHAR OperationCode;
966 UCHAR Anchor:1;
967 UCHAR Reserved1:7;
968 UCHAR Reserved2[4];
969 UCHAR GroupNumber:5;
970 UCHAR Reserved3:3;
971 UCHAR AllocationLength[2];
972 UCHAR Control;
973 } UNMAP;
974 struct _SANITIZE {
975 UCHAR OperationCode;
976 UCHAR ServiceAction:5;
977 UCHAR AUSE:1;
978 UCHAR Reserved1:1;
979 UCHAR Immediate:1;
980 UCHAR Reserved2[5];
981 UCHAR ParameterListLength[2];
982 UCHAR Control;
983 } SANITIZE;
984 struct _PAUSE_RESUME {
985 UCHAR OperationCode;
986 UCHAR Reserved1:5;
987 UCHAR LogicalUnitNumber:3;
988 UCHAR Reserved2[6];
989 UCHAR Action;
990 UCHAR Control;
991 } PAUSE_RESUME;
992 struct _READ_TOC {
993 UCHAR OperationCode;
994 UCHAR Reserved0:1;
995 UCHAR Msf:1;
996 UCHAR Reserved1:3;
997 UCHAR LogicalUnitNumber:3;
998 UCHAR Format2:4;
999 UCHAR Reserved2:4;
1000 UCHAR Reserved3[3];
1001 UCHAR StartingTrack;
1002 UCHAR AllocationLength[2];
1003 UCHAR Control:6;
1004 UCHAR Format:2;
1005 } READ_TOC;
1006 struct _READ_DISK_INFORMATION {
1007 UCHAR OperationCode;
1008 UCHAR Reserved1:5;
1009 UCHAR Lun:3;
1010 UCHAR Reserved2[5];
1011 UCHAR AllocationLength[2];
1012 UCHAR Control;
1013 } READ_DISK_INFORMATION;
1014 struct _READ_TRACK_INFORMATION {
1015 UCHAR OperationCode;
1016 UCHAR Track:2;
1017 UCHAR Reserved4:3;
1018 UCHAR Lun:3;
1019 UCHAR BlockAddress[4];
1020 UCHAR Reserved3;
1021 UCHAR AllocationLength[2];
1022 UCHAR Control;
1023 } READ_TRACK_INFORMATION;
1024 struct _RESERVE_TRACK_RZONE {
1025 UCHAR OperationCode;
1026 UCHAR Reserved1[4];
1027 UCHAR ReservationSize[4];
1028 UCHAR Control;
1029 } RESERVE_TRACK_RZONE;
1030 struct _SEND_OPC_INFORMATION {
1031 UCHAR OperationCode;
1032 UCHAR DoOpc:1;
1033 UCHAR Reserved1:7;
1034 UCHAR Exclude0:1;
1035 UCHAR Exclude1:1;
1036 UCHAR Reserved2:6;
1037 UCHAR Reserved3[4];
1038 UCHAR ParameterListLength[2];
1039 UCHAR Reserved4;
1040 } SEND_OPC_INFORMATION;
1041 struct _REPAIR_TRACK {
1042 UCHAR OperationCode;
1043 UCHAR Immediate:1;
1044 UCHAR Reserved1:7;
1045 UCHAR Reserved2[2];
1046 UCHAR TrackNumber[2];
1047 UCHAR Reserved3[3];
1048 UCHAR Control;
1049 } REPAIR_TRACK;
1050 struct _CLOSE_TRACK {
1051 UCHAR OperationCode;
1052 UCHAR Immediate:1;
1053 UCHAR Reserved1:7;
1054 UCHAR Track:1;
1055 UCHAR Session:1;
1056 UCHAR Reserved2:6;
1057 UCHAR Reserved3;
1058 UCHAR TrackNumber[2];
1059 UCHAR Reserved4[3];
1060 UCHAR Control;
1061 } CLOSE_TRACK;
1062 struct _READ_BUFFER_CAPACITY {
1063 UCHAR OperationCode;
1064 UCHAR BlockInfo:1;
1065 UCHAR Reserved1:7;
1066 UCHAR Reserved2[5];
1067 UCHAR AllocationLength[2];
1068 UCHAR Control;
1069 } READ_BUFFER_CAPACITY;
1070 struct _SEND_CUE_SHEET {
1071 UCHAR OperationCode;
1072 UCHAR Reserved[5];
1073 UCHAR CueSheetSize[3];
1074 UCHAR Control;
1075 } SEND_CUE_SHEET;
1076 struct _READ_HEADER {
1077 UCHAR OperationCode;
1078 UCHAR Reserved1:1;
1079 UCHAR Msf:1;
1080 UCHAR Reserved2:3;
1081 UCHAR Lun:3;
1082 UCHAR LogicalBlockAddress[4];
1083 UCHAR Reserved3;
1084 UCHAR AllocationLength[2];
1085 UCHAR Control;
1086 } READ_HEADER;
1087 struct _PLAY_AUDIO {
1088 UCHAR OperationCode;
1089 UCHAR Reserved1:5;
1090 UCHAR LogicalUnitNumber:3;
1091 UCHAR StartingBlockAddress[4];
1092 UCHAR Reserved2;
1093 UCHAR PlayLength[2];
1094 UCHAR Control;
1095 } PLAY_AUDIO;
1096 struct _PLAY_AUDIO_MSF {
1097 UCHAR OperationCode;
1098 UCHAR Reserved1:5;
1099 UCHAR LogicalUnitNumber:3;
1100 UCHAR Reserved2;
1101 UCHAR StartingM;
1102 UCHAR StartingS;
1103 UCHAR StartingF;
1104 UCHAR EndingM;
1105 UCHAR EndingS;
1106 UCHAR EndingF;
1107 UCHAR Control;
1108 } PLAY_AUDIO_MSF;
1109 struct _BLANK_MEDIA {
1110 UCHAR OperationCode;
1111 UCHAR BlankType:3;
1112 UCHAR Reserved1:1;
1113 UCHAR Immediate:1;
1114 UCHAR Reserved2:3;
1115 UCHAR AddressOrTrack[4];
1116 UCHAR Reserved3[5];
1117 UCHAR Control;
1118 } BLANK_MEDIA;
1119 struct _PLAY_CD {
1120 UCHAR OperationCode;
1121 UCHAR Reserved1:1;
1122 UCHAR CMSF:1;
1123 UCHAR ExpectedSectorType:3;
1124 UCHAR Lun:3;
1125 _ANONYMOUS_UNION union {
1126 struct {
1127 UCHAR StartingBlockAddress[4];
1128 UCHAR PlayLength[4];
1129 } LBA;
1130 struct {
1131 UCHAR Reserved1;
1132 UCHAR StartingM;
1133 UCHAR StartingS;
1134 UCHAR StartingF;
1135 UCHAR EndingM;
1136 UCHAR EndingS;
1137 UCHAR EndingF;
1138 UCHAR Reserved2;
1139 } MSF;
1140 };
1141 UCHAR Audio:1;
1142 UCHAR Composite:1;
1143 UCHAR Port1:1;
1144 UCHAR Port2:1;
1145 UCHAR Reserved2:3;
1146 UCHAR Speed:1;
1147 UCHAR Control;
1148 } PLAY_CD;
1149 struct _SCAN_CD {
1150 UCHAR OperationCode;
1151 UCHAR RelativeAddress:1;
1152 UCHAR Reserved1:3;
1153 UCHAR Direct:1;
1154 UCHAR Lun:3;
1155 UCHAR StartingAddress[4];
1156 UCHAR Reserved2[3];
1157 UCHAR Reserved3:6;
1158 UCHAR Type:2;
1159 UCHAR Reserved4;
1160 UCHAR Control;
1161 } SCAN_CD;
1162 struct _STOP_PLAY_SCAN {
1163 UCHAR OperationCode;
1164 UCHAR Reserved1:5;
1165 UCHAR Lun:3;
1166 UCHAR Reserved2[7];
1167 UCHAR Control;
1168 } STOP_PLAY_SCAN;
1169 struct _SUBCHANNEL {
1170 UCHAR OperationCode;
1171 UCHAR Reserved0:1;
1172 UCHAR Msf:1;
1173 UCHAR Reserved1:3;
1174 UCHAR LogicalUnitNumber:3;
1175 UCHAR Reserved2:6;
1176 UCHAR SubQ:1;
1177 UCHAR Reserved3:1;
1178 UCHAR Format;
1179 UCHAR Reserved4[2];
1180 UCHAR TrackNumber;
1181 UCHAR AllocationLength[2];
1182 UCHAR Control;
1183 } SUBCHANNEL;
1184 struct _READ_CD {
1185 UCHAR OperationCode;
1186 UCHAR RelativeAddress:1;
1187 UCHAR Reserved0:1;
1188 UCHAR ExpectedSectorType:3;
1189 UCHAR Lun:3;
1190 UCHAR StartingLBA[4];
1191 UCHAR TransferBlocks[3];
1192 UCHAR Reserved2:1;
1193 UCHAR ErrorFlags:2;
1194 UCHAR IncludeEDC:1;
1195 UCHAR IncludeUserData:1;
1196 UCHAR HeaderCode:2;
1197 UCHAR IncludeSyncData:1;
1198 UCHAR SubChannelSelection:3;
1199 UCHAR Reserved3:5;
1200 UCHAR Control;
1201 } READ_CD;
1202 struct _READ_CD_MSF {
1203 UCHAR OperationCode;
1204 UCHAR RelativeAddress:1;
1205 UCHAR Reserved1:1;
1206 UCHAR ExpectedSectorType:3;
1207 UCHAR Lun:3;
1208 UCHAR Reserved2;
1209 UCHAR StartingM;
1210 UCHAR StartingS;
1211 UCHAR StartingF;
1212 UCHAR EndingM;
1213 UCHAR EndingS;
1214 UCHAR EndingF;
1215 UCHAR Reserved3;
1216 UCHAR Reserved4:1;
1217 UCHAR ErrorFlags:2;
1218 UCHAR IncludeEDC:1;
1219 UCHAR IncludeUserData:1;
1220 UCHAR HeaderCode:2;
1221 UCHAR IncludeSyncData:1;
1222 UCHAR SubChannelSelection:3;
1223 UCHAR Reserved5:5;
1224 UCHAR Control;
1225 } READ_CD_MSF;
1226 struct _PLXTR_READ_CDDA {
1227 UCHAR OperationCode;
1228 UCHAR Reserved0:5;
1229 UCHAR LogicalUnitNumber:3;
1230 UCHAR LogicalBlockByte0;
1231 UCHAR LogicalBlockByte1;
1232 UCHAR LogicalBlockByte2;
1233 UCHAR LogicalBlockByte3;
1234 UCHAR TransferBlockByte0;
1235 UCHAR TransferBlockByte1;
1236 UCHAR TransferBlockByte2;
1237 UCHAR TransferBlockByte3;
1238 UCHAR SubCode;
1239 UCHAR Control;
1240 } PLXTR_READ_CDDA;
1241 struct _NEC_READ_CDDA {
1242 UCHAR OperationCode;
1243 UCHAR Reserved0;
1244 UCHAR LogicalBlockByte0;
1245 UCHAR LogicalBlockByte1;
1246 UCHAR LogicalBlockByte2;
1247 UCHAR LogicalBlockByte3;
1248 UCHAR Reserved1;
1249 UCHAR TransferBlockByte0;
1250 UCHAR TransferBlockByte1;
1251 UCHAR Control;
1252 } NEC_READ_CDDA;
1253#if NTDDI_VERSION >= NTDDI_WIN8
1254 struct _MODE_SENSE {
1255 UCHAR OperationCode;
1256 UCHAR Reserved1:3;
1257 UCHAR Dbd:1;
1258 UCHAR Reserved2:4;
1259 UCHAR PageCode:6;
1260 UCHAR Pc:2;
1261 UCHAR SubPageCode;
1262 UCHAR AllocationLength;
1263 UCHAR Control;
1264 } MODE_SENSE;
1265 struct _MODE_SENSE10 {
1266 UCHAR OperationCode;
1267 UCHAR Reserved1:3;
1268 UCHAR Dbd:1;
1269 UCHAR LongLBAAccepted:1;
1270 UCHAR Reserved2:3;
1271 UCHAR PageCode:6;
1272 UCHAR Pc:2;
1273 UCHAR SubPageCode;
1274 UCHAR Reserved3[3];
1275 UCHAR AllocationLength[2];
1276 UCHAR Control;
1277 } MODE_SENSE10;
1278#else
1279 struct _MODE_SENSE {
1280 UCHAR OperationCode;
1281 UCHAR Reserved1:3;
1282 UCHAR Dbd:1;
1283 UCHAR Reserved2:1;
1284 UCHAR LogicalUnitNumber:3;
1285 UCHAR PageCode:6;
1286 UCHAR Pc:2;
1287 UCHAR Reserved3;
1288 UCHAR AllocationLength;
1289 UCHAR Control;
1290 } MODE_SENSE;
1291 struct _MODE_SENSE10 {
1292 UCHAR OperationCode;
1293 UCHAR Reserved1:3;
1294 UCHAR Dbd:1;
1295 UCHAR Reserved2:1;
1296 UCHAR LogicalUnitNumber:3;
1297 UCHAR PageCode:6;
1298 UCHAR Pc:2;
1299 UCHAR Reserved3[4];
1300 UCHAR AllocationLength[2];
1301 UCHAR Control;
1302 } MODE_SENSE10;
1303#endif /* NTDDI_VERSION >= NTDDI_WIN8 */
1304 struct _MODE_SELECT {
1305 UCHAR OperationCode;
1306 UCHAR SPBit:1;
1307 UCHAR Reserved1:3;
1308 UCHAR PFBit:1;
1309 UCHAR LogicalUnitNumber:3;
1310 UCHAR Reserved2[2];
1311 UCHAR ParameterListLength;
1312 UCHAR Control;
1313 } MODE_SELECT;
1314 struct _MODE_SELECT10 {
1315 UCHAR OperationCode;
1316 UCHAR SPBit:1;
1317 UCHAR Reserved1:3;
1318 UCHAR PFBit:1;
1319 UCHAR LogicalUnitNumber:3;
1320 UCHAR Reserved2[5];
1321 UCHAR ParameterListLength[2];
1322 UCHAR Control;
1323 } MODE_SELECT10;
1324 struct _LOCATE {
1325 UCHAR OperationCode;
1326 UCHAR Immediate:1;
1327 UCHAR CPBit:1;
1328 UCHAR BTBit:1;
1329 UCHAR Reserved1:2;
1330 UCHAR LogicalUnitNumber:3;
1331 UCHAR Reserved3;
1332 UCHAR LogicalBlockAddress[4];
1333 UCHAR Reserved4;
1334 UCHAR Partition;
1335 UCHAR Control;
1336 } LOCATE;
1337 struct _LOGSENSE {
1338 UCHAR OperationCode;
1339 UCHAR SPBit:1;
1340 UCHAR PPCBit:1;
1341 UCHAR Reserved1:3;
1342 UCHAR LogicalUnitNumber:3;
1343 UCHAR PageCode:6;
1344 UCHAR PCBit:2;
1345 _ANONYMOUS_UNION union {
1346 UCHAR SubPageCode;
1347 UCHAR Reserved2;
1348 };
1349 UCHAR Reserved3;
1350 UCHAR ParameterPointer[2];
1351 UCHAR AllocationLength[2];
1352 UCHAR Control;
1353 } LOGSENSE;
1354 struct _LOGSELECT {
1355 UCHAR OperationCode;
1356 UCHAR SPBit:1;
1357 UCHAR PCRBit:1;
1358 UCHAR Reserved1:3;
1359 UCHAR LogicalUnitNumber:3;
1360 UCHAR Reserved:6;
1361 UCHAR PCBit:2;
1362 UCHAR Reserved2[4];
1363 UCHAR ParameterListLength[2];
1364 UCHAR Control;
1365 } LOGSELECT;
1366 struct _PRINT {
1367 UCHAR OperationCode;
1368 UCHAR Reserved:5;
1369 UCHAR LogicalUnitNumber:3;
1370 UCHAR TransferLength[3];
1371 UCHAR Control;
1372 } PRINT;
1373 struct _SEEK {
1374 UCHAR OperationCode;
1375 UCHAR Reserved1:5;
1376 UCHAR LogicalUnitNumber:3;
1377 UCHAR LogicalBlockAddress[4];
1378 UCHAR Reserved2[3];
1379 UCHAR Control;
1380 } SEEK;
1381 struct _ERASE {
1382 UCHAR OperationCode;
1383 UCHAR Long:1;
1384 UCHAR Immediate:1;
1385 UCHAR Reserved1:3;
1386 UCHAR LogicalUnitNumber:3;
1387 UCHAR Reserved2[3];
1388 UCHAR Control;
1389 } ERASE;
1390 struct _START_STOP {
1391 UCHAR OperationCode;
1392 UCHAR Immediate:1;
1393 UCHAR Reserved1:4;
1394 UCHAR LogicalUnitNumber:3;
1395 UCHAR Reserved2[2];
1396 UCHAR Start:1;
1397 UCHAR LoadEject:1;
1398 UCHAR Reserved3:6;
1399 UCHAR Control;
1400 } START_STOP;
1401 struct _MEDIA_REMOVAL {
1402 UCHAR OperationCode;
1403 UCHAR Reserved1:5;
1404 UCHAR LogicalUnitNumber:3;
1405 UCHAR Reserved2[2];
1406 UCHAR Prevent:1;
1407 UCHAR Persistant:1;
1408 UCHAR Reserved3:6;
1409 UCHAR Control;
1410 } MEDIA_REMOVAL;
1411 struct _SEEK_BLOCK {
1412 UCHAR OperationCode;
1413 UCHAR Immediate:1;
1414 UCHAR Reserved1:7;
1415 UCHAR BlockAddress[3];
1416 UCHAR Link:1;
1417 UCHAR Flag:1;
1418 UCHAR Reserved2:4;
1419 UCHAR VendorUnique:2;
1420 } SEEK_BLOCK;
1421 struct _REQUEST_BLOCK_ADDRESS {
1422 UCHAR OperationCode;
1423 UCHAR Reserved1[3];
1424 UCHAR AllocationLength;
1425 UCHAR Link:1;
1426 UCHAR Flag:1;
1427 UCHAR Reserved2:4;
1428 UCHAR VendorUnique:2;
1429 } REQUEST_BLOCK_ADDRESS;
1430 struct _PARTITION {
1431 UCHAR OperationCode;
1432 UCHAR Immediate:1;
1433 UCHAR Sel:1;
1434 UCHAR PartitionSelect:6;
1435 UCHAR Reserved1[3];
1436 UCHAR Control;
1437 } PARTITION;
1438 struct _WRITE_TAPE_MARKS {
1439 UCHAR OperationCode;
1440 UCHAR Immediate:1;
1441 UCHAR WriteSetMarks:1;
1442 UCHAR Reserved:3;
1443 UCHAR LogicalUnitNumber:3;
1444 UCHAR TransferLength[3];
1445 UCHAR Control;
1446 } WRITE_TAPE_MARKS;
1447 struct _SPACE_TAPE_MARKS {
1448 UCHAR OperationCode;
1449 UCHAR Code:3;
1450 UCHAR Reserved:2;
1451 UCHAR LogicalUnitNumber:3;
1452 UCHAR NumMarksMSB;
1453 UCHAR NumMarks;
1454 UCHAR NumMarksLSB;
1455 union {
1456 UCHAR value;
1457 struct {
1458 UCHAR Link:1;
1459 UCHAR Flag:1;
1460 UCHAR Reserved:4;
1461 UCHAR VendorUnique:2;
1462 } Fields;
1463 } Byte6;
1464 } SPACE_TAPE_MARKS;
1465 struct _READ_POSITION {
1466 UCHAR Operation;
1467 UCHAR BlockType:1;
1468 UCHAR Reserved1:4;
1469 UCHAR Lun:3;
1470 UCHAR Reserved2[7];
1471 UCHAR Control;
1472 } READ_POSITION;
1473 struct _CDB6READWRITETAPE {
1474 UCHAR OperationCode;
1475 UCHAR VendorSpecific:5;
1476 UCHAR Reserved:3;
1477 UCHAR TransferLenMSB;
1478 UCHAR TransferLen;
1479 UCHAR TransferLenLSB;
1480 UCHAR Link:1;
1481 UCHAR Flag:1;
1482 UCHAR Reserved1:4;
1483 UCHAR VendorUnique:2;
1484 } CDB6READWRITETAPE;
1485 struct _INIT_ELEMENT_STATUS {
1486 UCHAR OperationCode;
1487 UCHAR Reserved1:5;
1488 UCHAR LogicalUnitNubmer:3;
1489 UCHAR Reserved2[3];
1490 UCHAR Reserved3:7;
1491 UCHAR NoBarCode:1;
1492 } INIT_ELEMENT_STATUS;
1493 struct _INITIALIZE_ELEMENT_RANGE {
1494 UCHAR OperationCode;
1495 UCHAR Range:1;
1496 UCHAR Reserved1:4;
1497 UCHAR LogicalUnitNubmer:3;
1498 UCHAR FirstElementAddress[2];
1499 UCHAR Reserved2[2];
1500 UCHAR NumberOfElements[2];
1501 UCHAR Reserved3;
1502 UCHAR Reserved4:7;
1503 UCHAR NoBarCode:1;
1504 } INITIALIZE_ELEMENT_RANGE;
1505 struct _POSITION_TO_ELEMENT {
1506 UCHAR OperationCode;
1507 UCHAR Reserved1:5;
1508 UCHAR LogicalUnitNumber:3;
1509 UCHAR TransportElementAddress[2];
1510 UCHAR DestinationElementAddress[2];
1511 UCHAR Reserved2[2];
1512 UCHAR Flip:1;
1513 UCHAR Reserved3:7;
1514 UCHAR Control;
1515 } POSITION_TO_ELEMENT;
1516 struct _MOVE_MEDIUM {
1517 UCHAR OperationCode;
1518 UCHAR Reserved1:5;
1519 UCHAR LogicalUnitNumber:3;
1520 UCHAR TransportElementAddress[2];
1521 UCHAR SourceElementAddress[2];
1522 UCHAR DestinationElementAddress[2];
1523 UCHAR Reserved2[2];
1524 UCHAR Flip:1;
1525 UCHAR Reserved3:7;
1526 UCHAR Control;
1527 } MOVE_MEDIUM;
1528 struct _EXCHANGE_MEDIUM {
1529 UCHAR OperationCode;
1530 UCHAR Reserved1:5;
1531 UCHAR LogicalUnitNumber:3;
1532 UCHAR TransportElementAddress[2];
1533 UCHAR SourceElementAddress[2];
1534 UCHAR Destination1ElementAddress[2];
1535 UCHAR Destination2ElementAddress[2];
1536 UCHAR Flip1:1;
1537 UCHAR Flip2:1;
1538 UCHAR Reserved3:6;
1539 UCHAR Control;
1540 } EXCHANGE_MEDIUM;
1541 struct _READ_ELEMENT_STATUS {
1542 UCHAR OperationCode;
1543 UCHAR ElementType:4;
1544 UCHAR VolTag:1;
1545 UCHAR LogicalUnitNumber:3;
1546 UCHAR StartingElementAddress[2];
1547 UCHAR NumberOfElements[2];
1548 UCHAR Reserved1;
1549 UCHAR AllocationLength[3];
1550 UCHAR Reserved2;
1551 UCHAR Control;
1552 } READ_ELEMENT_STATUS;
1553 struct _SEND_VOLUME_TAG {
1554 UCHAR OperationCode;
1555 UCHAR ElementType:4;
1556 UCHAR Reserved1:1;
1557 UCHAR LogicalUnitNumber:3;
1558 UCHAR StartingElementAddress[2];
1559 UCHAR Reserved2;
1560 UCHAR ActionCode:5;
1561 UCHAR Reserved3:3;
1562 UCHAR Reserved4[2];
1563 UCHAR ParameterListLength[2];
1564 UCHAR Reserved5;
1565 UCHAR Control;
1566 } SEND_VOLUME_TAG;
1567 struct _REQUEST_VOLUME_ELEMENT_ADDRESS {
1568 UCHAR OperationCode;
1569 UCHAR ElementType:4;
1570 UCHAR VolTag:1;
1571 UCHAR LogicalUnitNumber:3;
1572 UCHAR StartingElementAddress[2];
1573 UCHAR NumberElements[2];
1574 UCHAR Reserved1;
1575 UCHAR AllocationLength[3];
1576 UCHAR Reserved2;
1577 UCHAR Control;
1578 } REQUEST_VOLUME_ELEMENT_ADDRESS;
1579 struct _LOAD_UNLOAD {
1580 UCHAR OperationCode;
1581 UCHAR Immediate:1;
1582 UCHAR Reserved1:4;
1583 UCHAR Lun:3;
1584 UCHAR Reserved2[2];
1585 UCHAR Start:1;
1586 UCHAR LoadEject:1;
1587 UCHAR Reserved3:6;
1588 UCHAR Reserved4[3];
1589 UCHAR Slot;
1590 UCHAR Reserved5[3];
1591 } LOAD_UNLOAD;
1592 struct _MECH_STATUS {
1593 UCHAR OperationCode;
1594 UCHAR Reserved:5;
1595 UCHAR Lun:3;
1596 UCHAR Reserved1[6];
1597 UCHAR AllocationLength[2];
1598 UCHAR Reserved2[1];
1599 UCHAR Control;
1600 } MECH_STATUS;
1601 struct _SYNCHRONIZE_CACHE10 {
1602 UCHAR OperationCode;
1603 UCHAR RelAddr:1;
1604 UCHAR Immediate:1;
1605 UCHAR Reserved:3;
1606 UCHAR Lun:3;
1607 UCHAR LogicalBlockAddress[4];
1608 UCHAR Reserved2;
1609 UCHAR BlockCount[2];
1610 UCHAR Control;
1611 } SYNCHRONIZE_CACHE10;
1612 struct _GET_EVENT_STATUS_NOTIFICATION {
1613 UCHAR OperationCode;
1614 UCHAR Immediate:1;
1615 UCHAR Reserved:4;
1616 UCHAR Lun:3;
1617 UCHAR Reserved2[2];
1618 UCHAR NotificationClassRequest;
1619 UCHAR Reserved3[2];
1620 UCHAR EventListLength[2];
1621 UCHAR Control;
1622 } GET_EVENT_STATUS_NOTIFICATION;
1623 struct _GET_PERFORMANCE {
1624 UCHAR OperationCode;
1625 UCHAR Except:2;
1626 UCHAR Write:1;
1627 UCHAR Tolerance:2;
1628 UCHAR Reserved0:3;
1629 UCHAR StartingLBA[4];
1630 UCHAR Reserved1[2];
1631 UCHAR MaximumNumberOfDescriptors[2];
1632 UCHAR Type;
1633 UCHAR Control;
1634 } GET_PERFORMANCE;
1635 struct _READ_DVD_STRUCTURE {
1636 UCHAR OperationCode;
1637 UCHAR Reserved1:5;
1638 UCHAR Lun:3;
1639 UCHAR RMDBlockNumber[4];
1640 UCHAR LayerNumber;
1641 UCHAR Format;
1642 UCHAR AllocationLength[2];
1643 UCHAR Reserved3:6;
1644 UCHAR AGID:2;
1645 UCHAR Control;
1646 } READ_DVD_STRUCTURE;
1647 struct _SET_STREAMING {
1648 UCHAR OperationCode;
1649 UCHAR Reserved[8];
1650 UCHAR ParameterListLength[2];
1651 UCHAR Control;
1652 } SET_STREAMING;
1653 struct _SEND_DVD_STRUCTURE {
1654 UCHAR OperationCode;
1655 UCHAR Reserved1:5;
1656 UCHAR Lun:3;
1657 UCHAR Reserved2[5];
1658 UCHAR Format;
1659 UCHAR ParameterListLength[2];
1660 UCHAR Reserved3;
1661 UCHAR Control;
1662 } SEND_DVD_STRUCTURE;
1663 struct _SEND_KEY {
1664 UCHAR OperationCode;
1665 UCHAR Reserved1:5;
1666 UCHAR Lun:3;
1667 UCHAR Reserved2[6];
1668 UCHAR ParameterListLength[2];
1669 UCHAR KeyFormat:6;
1670 UCHAR AGID:2;
1671 UCHAR Control;
1672 } SEND_KEY;
1673 struct _REPORT_KEY {
1674 UCHAR OperationCode;
1675 UCHAR Reserved1:5;
1676 UCHAR Lun:3;
1677 UCHAR LogicalBlockAddress[4];
1678 UCHAR Reserved2[2];
1679 UCHAR AllocationLength[2];
1680 UCHAR KeyFormat:6;
1681 UCHAR AGID:2;
1682 UCHAR Control;
1683 } REPORT_KEY;
1684 struct _SET_READ_AHEAD {
1685 UCHAR OperationCode;
1686 UCHAR Reserved1:5;
1687 UCHAR Lun:3;
1688 UCHAR TriggerLBA[4];
1689 UCHAR ReadAheadLBA[4];
1690 UCHAR Reserved2;
1691 UCHAR Control;
1692 } SET_READ_AHEAD;
1693 struct _READ_FORMATTED_CAPACITIES {
1694 UCHAR OperationCode;
1695 UCHAR Reserved1:5;
1696 UCHAR Lun:3;
1697 UCHAR Reserved2[5];
1698 UCHAR AllocationLength[2];
1699 UCHAR Control;
1700 } READ_FORMATTED_CAPACITIES;
1701 struct _REPORT_LUNS {
1702 UCHAR OperationCode;
1703 UCHAR Reserved1[5];
1704 UCHAR AllocationLength[4];
1705 UCHAR Reserved2[1];
1706 UCHAR Control;
1707 } REPORT_LUNS;
1708 struct _PERSISTENT_RESERVE_IN {
1709 UCHAR OperationCode;
1710 UCHAR ServiceAction:5;
1711 UCHAR Reserved1:3;
1712 UCHAR Reserved2[5];
1713 UCHAR AllocationLength[2];
1714 UCHAR Control;
1715 } PERSISTENT_RESERVE_IN;
1716 struct _PERSISTENT_RESERVE_OUT {
1717 UCHAR OperationCode;
1718 UCHAR ServiceAction:5;
1719 UCHAR Reserved1:3;
1720 UCHAR Type:4;
1721 UCHAR Scope:4;
1722 UCHAR Reserved2[4];
1723 UCHAR ParameterListLength[2];
1724 UCHAR Control;
1725 } PERSISTENT_RESERVE_OUT;
1726 struct _REPORT_TIMESTAMP {
1727 UCHAR OperationCode;
1728 UCHAR ServiceAction:5;
1729 UCHAR Reserved1:3;
1730 UCHAR Reserved2[4];
1731 UCHAR AllocationLength[4];
1732 UCHAR Reserved3;
1733 UCHAR Control;
1734 } REPORT_TIMESTAMP;
1735 struct _SET_TIMESTAMP {
1736 UCHAR OperationCode;
1737 UCHAR ServiceAction:5;
1738 UCHAR Reserved1:3;
1739 UCHAR Reserved2[4];
1740 UCHAR ParameterListLength[4];
1741 UCHAR Reserved3;
1742 UCHAR Control;
1743 } SET_TIMESTAMP;
1744 struct _GET_CONFIGURATION {
1745 UCHAR OperationCode;
1746 UCHAR RequestType:2;
1747 UCHAR Reserved1:6;
1748 UCHAR StartingFeature[2];
1749 UCHAR Reserved2[3];
1750 UCHAR AllocationLength[2];
1751 UCHAR Control;
1752 } GET_CONFIGURATION;
1753 struct _SET_CD_SPEED {
1754 UCHAR OperationCode;
1755 _ANONYMOUS_UNION union {
1756 UCHAR Reserved1;
1757 _ANONYMOUS_STRUCT struct {
1758 UCHAR RotationControl:2;
1759 UCHAR Reserved3:6;
1760 } DUMMYSTRUCTNAME;
1761 } DUMMYUNIONNAME;
1762 UCHAR ReadSpeed[2];
1763 UCHAR WriteSpeed[2];
1764 UCHAR Reserved2[5];
1765 UCHAR Control;
1766 } SET_CD_SPEED;
1767 struct _READ12 {
1768 UCHAR OperationCode;
1769 UCHAR RelativeAddress:1;
1770 UCHAR Reserved1:2;
1771 UCHAR ForceUnitAccess:1;
1772 UCHAR DisablePageOut:1;
1773 UCHAR LogicalUnitNumber:3;
1774 UCHAR LogicalBlock[4];
1775 UCHAR TransferLength[4];
1776 UCHAR Reserved2:7;
1777 UCHAR Streaming:1;
1778 UCHAR Control;
1779 } READ12;
1780 struct _WRITE12 {
1781 UCHAR OperationCode;
1782 UCHAR RelativeAddress:1;
1783 UCHAR Reserved1:1;
1784 UCHAR EBP:1;
1785 UCHAR ForceUnitAccess:1;
1786 UCHAR DisablePageOut:1;
1787 UCHAR LogicalUnitNumber:3;
1788 UCHAR LogicalBlock[4];
1789 UCHAR TransferLength[4];
1790 UCHAR Reserved2:7;
1791 UCHAR Streaming:1;
1792 UCHAR Control;
1793 } WRITE12;
1794 struct _ATA_PASSTHROUGH12 {
1795 UCHAR OperationCode;
1796 UCHAR Reserved1:1;
1797 UCHAR Protocol:4;
1798 UCHAR MultipleCount:3;
1799 UCHAR TLength:2;
1800 UCHAR ByteBlock:1;
1801 UCHAR TDir:1;
1802 UCHAR Reserved2:1;
1803 UCHAR CkCond:1;
1804 UCHAR Offline:2;
1805 UCHAR Features;
1806 UCHAR SectorCount;
1807 UCHAR LbaLow;
1808 UCHAR LbaMid;
1809 UCHAR LbaHigh;
1810 UCHAR Device;
1811 UCHAR Command;
1812 UCHAR Reserved3;
1813 UCHAR Control;
1814 } ATA_PASSTHROUGH12;
1815 struct _READ16 {
1816 UCHAR OperationCode;
1817 UCHAR Reserved1:3;
1818 UCHAR ForceUnitAccess:1;
1819 UCHAR DisablePageOut:1;
1820 UCHAR ReadProtect:3;
1821 UCHAR LogicalBlock[8];
1822 UCHAR TransferLength[4];
1823 UCHAR Reserved2:7;
1824 UCHAR Streaming:1;
1825 UCHAR Control;
1826 } READ16;
1827 struct _WRITE16 {
1828 UCHAR OperationCode;
1829 UCHAR Reserved1:3;
1830 UCHAR ForceUnitAccess:1;
1831 UCHAR DisablePageOut:1;
1832 UCHAR WriteProtect:3;
1833 UCHAR LogicalBlock[8];
1834 UCHAR TransferLength[4];
1835 UCHAR Reserved2:7;
1836 UCHAR Streaming:1;
1837 UCHAR Control;
1838 } WRITE16;
1839 struct _VERIFY16 {
1840 UCHAR OperationCode;
1841 UCHAR Reserved1:1;
1842 UCHAR ByteCheck:1;
1843 UCHAR BlockVerify:1;
1844 UCHAR Reserved2: 1;
1845 UCHAR DisablePageOut:1;
1846 UCHAR VerifyProtect:3;
1847 UCHAR LogicalBlock[8];
1848 UCHAR VerificationLength[4];
1849 UCHAR Reserved3:7;
1850 UCHAR Streaming:1;
1851 UCHAR Control;
1852 } VERIFY16;
1853 struct _SYNCHRONIZE_CACHE16 {
1854 UCHAR OperationCode;
1855 UCHAR Reserved1:1;
1856 UCHAR Immediate:1;
1857 UCHAR Reserved2:6;
1858 UCHAR LogicalBlock[8];
1859 UCHAR BlockCount[4];
1860 UCHAR Reserved3;
1861 UCHAR Control;
1862 } SYNCHRONIZE_CACHE16;
1863 struct _READ_CAPACITY16 {
1864 UCHAR OperationCode;
1865 UCHAR ServiceAction:5;
1866 UCHAR Reserved1:3;
1867 UCHAR LogicalBlock[8];
1868 UCHAR BlockCount[4];
1869 UCHAR PMI:1;
1870 UCHAR Reserved2:7;
1871 UCHAR Control;
1872 } READ_CAPACITY16;
1873 struct _ATA_PASSTHROUGH16 {
1874 UCHAR OperationCode;
1875 UCHAR Extend:1;
1876 UCHAR Protocol:4;
1877 UCHAR MultipleCount:3;
1878 UCHAR TLength:2;
1879 UCHAR ByteBlock:1;
1880 UCHAR TDir:1;
1881 UCHAR Reserved1:1;
1882 UCHAR CkCond:1;
1883 UCHAR Offline:2;
1884 UCHAR Features15_8;
1885 UCHAR Features7_0;
1886 UCHAR SectorCount15_8;
1887 UCHAR SectorCount7_0;
1888 UCHAR LbaLow15_8;
1889 UCHAR LbaLow7_0;
1890 UCHAR LbaMid15_8;
1891 UCHAR LbaMid7_0;
1892 UCHAR LbaHigh15_8;
1893 UCHAR LbaHigh7_0;
1894 UCHAR Device;
1895 UCHAR Command;
1896 UCHAR Control;
1897 } ATA_PASSTHROUGH16;
1898 struct _GET_LBA_STATUS {
1899 UCHAR OperationCode;
1900 UCHAR ServiceAction:5;
1901 UCHAR Reserved1:3;
1902 UCHAR StartingLBA[8];
1903 UCHAR AllocationLength[4];
1904 UCHAR Reserved2;
1905 UCHAR Control;
1906 } GET_LBA_STATUS;
1907 struct _TOKEN_OPERATION {
1908 UCHAR OperationCode;
1909 UCHAR ServiceAction:5;
1910 UCHAR Reserved1:3;
1911 UCHAR Reserved2[4];
1912 UCHAR ListIdentifier[4];
1913 UCHAR ParameterListLength[4];
1914 UCHAR GroupNumber: 5;
1915 UCHAR Reserved3: 3;
1916 UCHAR Control;
1917 } TOKEN_OPERATION;
1918 struct _RECEIVE_TOKEN_INFORMATION {
1919 UCHAR OperationCode;
1920 UCHAR ServiceAction:5;
1921 UCHAR Reserved1:3;
1922 UCHAR ListIdentifier[4];
1923 UCHAR Reserved2[4];
1924 UCHAR AllocationLength[4];
1925 UCHAR Reserved3;
1926 UCHAR Control;
1927 } RECEIVE_TOKEN_INFORMATION;
1928 struct _WRITE_BUFFER {
1929 UCHAR OperationCode;
1930 UCHAR Mode:5;
1931 UCHAR ModeSpecific:3;
1932 UCHAR BufferID;
1933 UCHAR BufferOffset[3];
1934 UCHAR ParameterListLength[3];
1935 UCHAR Control;
1936 } WRITE_BUFFER;
1937 struct _CLOSE_ZONE {
1938 UCHAR OperationCode;
1939 UCHAR ServiceAction:5;
1940 UCHAR Reserved1:3;
1941 UCHAR ZoneId[8];
1942 UCHAR Reserved2[4];
1943 UCHAR All:1;
1944 UCHAR Reserved3:7;
1945 UCHAR Control;
1946 } CLOSE_ZONE;
1947 struct _FINISH_ZONE {
1948 UCHAR OperationCode;
1949 UCHAR ServiceAction:5;
1950 UCHAR Reserved1:3;
1951 UCHAR ZoneId[8];
1952 UCHAR Reserved2[4];
1953 UCHAR All:1;
1954 UCHAR Reserved3:7;
1955 UCHAR Control;
1956 } FINISH_ZONE;
1957 struct _OPEN_ZONE {
1958 UCHAR OperationCode;
1959 UCHAR ServiceAction:5;
1960 UCHAR Reserved1:3;
1961 UCHAR ZoneId[8];
1962 UCHAR Reserved2[4];
1963 UCHAR All:1;
1964 UCHAR Reserved3:7;
1965 UCHAR Control;
1966 } OPEN_ZONE;
1967 struct _RESET_WRITE_POINTER {
1968 UCHAR OperationCode;
1969 UCHAR ServiceAction:5;
1970 UCHAR Reserved1:3;
1971 UCHAR ZoneId[8];
1972 UCHAR Reserved2[4];
1973 UCHAR All:1;
1974 UCHAR Reserved3:7;
1975 UCHAR Control;
1976 } RESET_WRITE_POINTER;
1977 struct _REPORT_ZONES {
1978 UCHAR OperationCode;
1979 UCHAR ServiceAction:5;
1980 UCHAR Reserved1:3;
1981 UCHAR ZoneStartLBA[8];
1982 UCHAR AllocationLength[4];
1983 UCHAR ReportingOptions:6;
1984 UCHAR Reserved3:1;
1985 UCHAR Partial:1;
1986 UCHAR Control;
1987 } REPORT_ZONES;
1988 struct _GET_PHYSICAL_ELEMENT_STATUS {
1989 UCHAR OperationCode;
1990 UCHAR ServiceAction:5;
1991 UCHAR Reserved1:3;
1992 UCHAR Reserved2[4];
1993 UCHAR StartingElement[4];
1994 UCHAR AllocationLength[4];
1995 UCHAR ReportType:4;
1996 UCHAR Reserved3:2;
1997 UCHAR Filter:2;
1998 UCHAR Control;
1999 } GET_PHYSICAL_ELEMENT_STATUS;
2000 struct _REMOVE_ELEMENT_AND_TRUNCATE {
2001 UCHAR OperationCode;
2002 UCHAR ServiceAction:5;
2003 UCHAR Reserved1:3;
2004 UCHAR RequestedCapacity[8];
2005 UCHAR ElementIdentifier[4];
2006 UCHAR Reserved2;
2007 UCHAR Control;
2008 } REMOVE_ELEMENT_AND_TRUNCATE;
2009 ULONG AsUlong[4];
2010 UCHAR AsByte[16];
2011} CDB, *PCDB;
2012
2013typedef struct _NOTIFICATION_EVENT_STATUS_HEADER {
2014 UCHAR EventDataLength[2];
2015 UCHAR NotificationClass:3;
2016 UCHAR Reserved:4;
2017 UCHAR NEA:1;
2018 UCHAR SupportedEventClasses;
2019 UCHAR ClassEventData[0];
2020} NOTIFICATION_EVENT_STATUS_HEADER, *PNOTIFICATION_EVENT_STATUS_HEADER;
2021
2022typedef struct _NOTIFICATION_OPERATIONAL_STATUS {
2023 UCHAR OperationalEvent:4;
2024 UCHAR Reserved1:4;
2025 UCHAR OperationalStatus:4;
2026 UCHAR Reserved2:3;
2027 UCHAR PersistentPrevented:1;
2028 UCHAR Operation[2];
2029} NOTIFICATION_OPERATIONAL_STATUS, *PNOTIFICATION_OPERATIONAL_STATUS;
2030
2031typedef struct _NOTIFICATION_POWER_STATUS {
2032 UCHAR PowerEvent:4;
2033 UCHAR Reserved:4;
2034 UCHAR PowerStatus;
2035 UCHAR Reserved2[2];
2036} NOTIFICATION_POWER_STATUS, *PNOTIFICATION_POWER_STATUS;
2037
2038typedef struct _NOTIFICATION_EXTERNAL_STATUS {
2039 UCHAR ExternalEvent:4;
2040 UCHAR Reserved1:4;
2041 UCHAR ExternalStatus:4;
2042 UCHAR Reserved2:3;
2043 UCHAR PersistentPrevented:1;
2044 UCHAR Request[2];
2045} NOTIFICATION_EXTERNAL_STATUS, *PNOTIFICATION_EXTERNAL_STATUS;
2046
2047typedef struct _NOTIFICATION_MEDIA_STATUS {
2048 UCHAR MediaEvent:4;
2049 UCHAR Reserved:4;
2050 _ANONYMOUS_UNION union {
2051 UCHAR PowerStatus;
2052 UCHAR MediaStatus;
2053 _ANONYMOUS_STRUCT struct {
2054 UCHAR DoorTrayOpen:1;
2055 UCHAR MediaPresent:1;
2056 UCHAR ReservedX:6;
2057 } DUMMYSTRUCTNAME;
2058 } DUMMYUNIONNAME;
2059 UCHAR StartSlot;
2060 UCHAR EndSlot;
2061} NOTIFICATION_MEDIA_STATUS, *PNOTIFICATION_MEDIA_STATUS;
2062
2063typedef struct _NOTIFICATION_MULTI_HOST_STATUS {
2064 UCHAR MultiHostEvent:4;
2065 UCHAR Reserved1:4;
2066 UCHAR MultiHostStatus:4;
2067 UCHAR Reserved2:3;
2068 UCHAR PersistentPrevented:1;
2069 UCHAR Priority[2];
2070} NOTIFICATION_MULTI_HOST_STATUS, *PNOTIFICATION_MULTI_HOST_STATUS;
2071
2072typedef struct _NOTIFICATION_BUSY_STATUS {
2073 UCHAR DeviceBusyEvent:4;
2074 UCHAR Reserved:4;
2075 UCHAR DeviceBusyStatus;
2076 UCHAR Time[2];
2077} NOTIFICATION_BUSY_STATUS, *PNOTIFICATION_BUSY_STATUS;
2078
2079typedef struct _SUPPORTED_SECURITY_PROTOCOLS_PARAMETER_DATA {
2080 UCHAR Reserved1[6];
2081 UCHAR SupportedSecurityListLength[2];
2082 UCHAR SupportedSecurityProtocol[0];
2083} SUPPORTED_SECURITY_PROTOCOLS_PARAMETER_DATA, *PSUPPORTED_SECURITY_PROTOCOLS_PARAMETER_DATA;
2084
2085typedef struct _READ_DVD_STRUCTURES_HEADER {
2086 UCHAR Length[2];
2087 UCHAR Reserved[2];
2088 UCHAR Data[0];
2089} READ_DVD_STRUCTURES_HEADER, *PREAD_DVD_STRUCTURES_HEADER;
2090
2091typedef struct _CDVD_KEY_HEADER {
2092 UCHAR DataLength[2];
2093 UCHAR Reserved[2];
2094 UCHAR Data[0];
2095} CDVD_KEY_HEADER, *PCDVD_KEY_HEADER;
2096
2097typedef struct _CDVD_REPORT_AGID_DATA {
2098 UCHAR Reserved1[3];
2099 UCHAR Reserved2:6;
2100 UCHAR AGID:2;
2101} CDVD_REPORT_AGID_DATA, *PCDVD_REPORT_AGID_DATA;
2102
2103typedef struct _CDVD_CHALLENGE_KEY_DATA {
2104 UCHAR ChallengeKeyValue[10];
2105 UCHAR Reserved[2];
2106} CDVD_CHALLENGE_KEY_DATA, *PCDVD_CHALLENGE_KEY_DATA;
2107
2108typedef struct _CDVD_KEY_DATA {
2109 UCHAR Key[5];
2110 UCHAR Reserved[3];
2111} CDVD_KEY_DATA, *PCDVD_KEY_DATA;
2112
2113typedef struct _CDVD_REPORT_ASF_DATA {
2114 UCHAR Reserved1[3];
2115 UCHAR Success:1;
2116 UCHAR Reserved2:7;
2117} CDVD_REPORT_ASF_DATA, *PCDVD_REPORT_ASF_DATA;
2118
2119typedef struct _CDVD_TITLE_KEY_HEADER {
2120 UCHAR DataLength[2];
2121 UCHAR Reserved1[1];
2122 UCHAR Reserved2:3;
2123 UCHAR CGMS:2;
2124 UCHAR CP_SEC:1;
2125 UCHAR CPM:1;
2126 UCHAR Zero:1;
2127 CDVD_KEY_DATA TitleKey;
2128} CDVD_TITLE_KEY_HEADER, *PCDVD_TITLE_KEY_HEADER;
2129
2130typedef struct _FORMAT_DESCRIPTOR {
2131 UCHAR NumberOfBlocks[4];
2132 UCHAR FormatSubType:2;
2133 UCHAR FormatType:6;
2134 UCHAR BlockLength[3];
2135} FORMAT_DESCRIPTOR, *PFORMAT_DESCRIPTOR;
2136
2137typedef struct _FORMAT_LIST_HEADER {
2138 UCHAR Reserved;
2139 UCHAR VendorSpecific:1;
2140 UCHAR Immediate:1;
2141 UCHAR TryOut:1;
2142 UCHAR IP:1;
2143 UCHAR STPF:1;
2144 UCHAR DCRT:1;
2145 UCHAR DPRY:1;
2146 UCHAR FOV:1;
2147 UCHAR FormatDescriptorLength[2];
2148 FORMAT_DESCRIPTOR Descriptors[0];
2149} FORMAT_LIST_HEADER, *PFORMAT_LIST_HEADER;
2150
2151typedef struct _FORMATTED_CAPACITY_DESCRIPTOR {
2152 UCHAR NumberOfBlocks[4];
2153 UCHAR Maximum:1;
2154 UCHAR Valid:1;
2155 UCHAR FormatType:6;
2156 UCHAR BlockLength[3];
2157} FORMATTED_CAPACITY_DESCRIPTOR, *PFORMATTED_CAPACITY_DESCRIPTOR;
2158
2159typedef struct _FORMATTED_CAPACITY_LIST {
2160 UCHAR Reserved[3];
2161 UCHAR CapacityListLength;
2162 FORMATTED_CAPACITY_DESCRIPTOR Descriptors[0];
2163} FORMATTED_CAPACITY_LIST, *PFORMATTED_CAPACITY_LIST;
2164
2165typedef struct _OPC_TABLE_ENTRY {
2166 UCHAR Speed[2];
2167 UCHAR OPCValue[6];
2168} OPC_TABLE_ENTRY, *POPC_TABLE_ENTRY;
2169
2170typedef struct _DISC_INFORMATION {
2171 UCHAR Length[2];
2172 UCHAR DiscStatus:2;
2173 UCHAR LastSessionStatus:2;
2174 UCHAR Erasable:1;
2175 UCHAR Reserved1:3;
2176 UCHAR FirstTrackNumber;
2177 UCHAR NumberOfSessionsLsb;
2178 UCHAR LastSessionFirstTrackLsb;
2179 UCHAR LastSessionLastTrackLsb;
2180 UCHAR MrwStatus:2;
2181 UCHAR MrwDirtyBit:1;
2182 UCHAR Reserved2:2;
2183 UCHAR URU:1;
2184 UCHAR DBC_V:1;
2185 UCHAR DID_V:1;
2186 UCHAR DiscType;
2187 UCHAR NumberOfSessionsMsb;
2188 UCHAR LastSessionFirstTrackMsb;
2189 UCHAR LastSessionLastTrackMsb;
2190 UCHAR DiskIdentification[4];
2191 UCHAR LastSessionLeadIn[4];
2192 UCHAR LastPossibleLeadOutStartTime[4];
2193 UCHAR DiskBarCode[8];
2194 UCHAR Reserved4;
2195 UCHAR NumberOPCEntries;
2196 OPC_TABLE_ENTRY OPCTable[1];
2197} DISC_INFORMATION, *PDISC_INFORMATION;
2198
2199typedef struct _DISK_INFORMATION {
2200 UCHAR Length[2];
2201 UCHAR DiskStatus:2;
2202 UCHAR LastSessionStatus:2;
2203 UCHAR Erasable:1;
2204 UCHAR Reserved1:3;
2205 UCHAR FirstTrackNumber;
2206 UCHAR NumberOfSessions;
2207 UCHAR LastSessionFirstTrack;
2208 UCHAR LastSessionLastTrack;
2209 UCHAR Reserved2:5;
2210 UCHAR GEN:1;
2211 UCHAR DBC_V:1;
2212 UCHAR DID_V:1;
2213 UCHAR DiskType;
2214 UCHAR Reserved3[3];
2215 UCHAR DiskIdentification[4];
2216 UCHAR LastSessionLeadIn[4];
2217 UCHAR LastPossibleStartTime[4];
2218 UCHAR DiskBarCode[8];
2219 UCHAR Reserved4;
2220 UCHAR NumberOPCEntries;
2221 OPC_TABLE_ENTRY OPCTable[0];
2222} DISK_INFORMATION, *PDISK_INFORMATION;
2223
2224typedef struct _DATA_BLOCK_HEADER {
2225 UCHAR DataMode;
2226 UCHAR Reserved[4];
2227 _ANONYMOUS_UNION union {
2228 UCHAR LogicalBlockAddress[4];
2229 struct {
2230 UCHAR Reserved;
2231 UCHAR M;
2232 UCHAR S;
2233 UCHAR F;
2234 } MSF;
2235 } DUMMYUNIONNAME;
2236} DATA_BLOCK_HEADER, *PDATA_BLOCK_HEADER;
2237
2238typedef struct _TRACK_INFORMATION {
2239 UCHAR Length[2];
2240 UCHAR TrackNumber;
2241 UCHAR SessionNumber;
2242 UCHAR Reserved1;
2243 UCHAR TrackMode:4;
2244 UCHAR Copy:1;
2245 UCHAR Damage:1;
2246 UCHAR Reserved2:2;
2247 UCHAR DataMode:4;
2248 UCHAR FP:1;
2249 UCHAR Packet:1;
2250 UCHAR Blank:1;
2251 UCHAR RT:1;
2252 UCHAR NWA_V:1;
2253 UCHAR Reserved3:7;
2254 UCHAR TrackStartAddress[4];
2255 UCHAR NextWritableAddress[4];
2256 UCHAR FreeBlocks[4];
2257 UCHAR FixedPacketSize[4];
2258} TRACK_INFORMATION, *PTRACK_INFORMATION;
2259
2260typedef struct _TRACK_INFORMATION2 {
2261 UCHAR Length[2];
2262 UCHAR TrackNumberLsb;
2263 UCHAR SessionNumberLsb;
2264 UCHAR Reserved4;
2265 UCHAR TrackMode:4;
2266 UCHAR Copy:1;
2267 UCHAR Damage:1;
2268 UCHAR Reserved5:2;
2269 UCHAR DataMode:4;
2270 UCHAR FixedPacket:1;
2271 UCHAR Packet:1;
2272 UCHAR Blank:1;
2273 UCHAR ReservedTrack:1;
2274 UCHAR NWA_V:1;
2275 UCHAR LRA_V:1;
2276 UCHAR Reserved6:6;
2277 UCHAR TrackStartAddress[4];
2278 UCHAR NextWritableAddress[4];
2279 UCHAR FreeBlocks[4];
2280 UCHAR FixedPacketSize[4];
2281 UCHAR TrackSize[4];
2282 UCHAR LastRecordedAddress[4];
2283 UCHAR TrackNumberMsb;
2284 UCHAR SessionNumberMsb;
2285 UCHAR Reserved7[2];
2286} TRACK_INFORMATION2, *PTRACK_INFORMATION2;
2287
2288typedef struct _TRACK_INFORMATION3 {
2289 UCHAR Length[2];
2290 UCHAR TrackNumberLsb;
2291 UCHAR SessionNumberLsb;
2292 UCHAR Reserved4;
2293 UCHAR TrackMode:4;
2294 UCHAR Copy:1;
2295 UCHAR Damage:1;
2296 UCHAR Reserved5:2;
2297 UCHAR DataMode:4;
2298 UCHAR FixedPacket:1;
2299 UCHAR Packet:1;
2300 UCHAR Blank:1;
2301 UCHAR ReservedTrack:1;
2302 UCHAR NWA_V:1;
2303 UCHAR LRA_V:1;
2304 UCHAR Reserved6:6;
2305 UCHAR TrackStartAddress[4];
2306 UCHAR NextWritableAddress[4];
2307 UCHAR FreeBlocks[4];
2308 UCHAR FixedPacketSize[4];
2309 UCHAR TrackSize[4];
2310 UCHAR LastRecordedAddress[4];
2311 UCHAR TrackNumberMsb;
2312 UCHAR SessionNumberMsb;
2313 UCHAR Reserved7[2];
2314 UCHAR ReadCompatibilityLba[4];
2315} TRACK_INFORMATION3, *PTRACK_INFORMATION3;
2316
2317typedef struct _PERFORMANCE_DESCRIPTOR {
2318 UCHAR RandomAccess:1;
2319 UCHAR Exact:1;
2320 UCHAR RestoreDefaults:1;
2321 UCHAR WriteRotationControl:2;
2322 UCHAR Reserved1:3;
2323 UCHAR Reserved[3];
2324 UCHAR StartLba[4];
2325 UCHAR EndLba[4];
2326 UCHAR ReadSize[4];
2327 UCHAR ReadTime[4];
2328 UCHAR WriteSize[4];
2329 UCHAR WriteTime[4];
2330} PERFORMANCE_DESCRIPTOR, *PPERFORMANCE_DESCRIPTOR;
2331
2332typedef struct _SCSI_EXTENDED_MESSAGE {
2333 UCHAR InitialMessageCode;
2334 UCHAR MessageLength;
2335 UCHAR MessageType;
2336 union _EXTENDED_ARGUMENTS {
2337 struct {
2338 UCHAR Modifier[4];
2339 } Modify;
2340 struct {
2341 UCHAR TransferPeriod;
2342 UCHAR ReqAckOffset;
2343 } Synchronous;
2344 struct{
2345 UCHAR Width;
2346 } Wide;
2347 } ExtendedArguments;
2348}SCSI_EXTENDED_MESSAGE, *PSCSI_EXTENDED_MESSAGE;
2349
2350#ifndef _INQUIRYDATA_DEFINED /* also in minitape.h */
2351#define _INQUIRYDATA_DEFINED
2352
2353#define INQUIRYDATABUFFERSIZE 36
2354
2355#if (NTDDI_VERSION < NTDDI_WINXP)
2356typedef struct _INQUIRYDATA {
2357 UCHAR DeviceType:5;
2358 UCHAR DeviceTypeQualifier:3;
2359 UCHAR DeviceTypeModifier:7;
2360 UCHAR RemovableMedia:1;
2361 UCHAR Versions;
2362 UCHAR ResponseDataFormat:4;
2363 UCHAR HiSupport:1;
2364 UCHAR NormACA:1;
2365 UCHAR ReservedBit:1;
2366 UCHAR AERC:1;
2367 UCHAR AdditionalLength;
2368 UCHAR Reserved[2];
2369 UCHAR SoftReset:1;
2370 UCHAR CommandQueue:1;
2371 UCHAR Reserved2:1;
2372 UCHAR LinkedCommands:1;
2373 UCHAR Synchronous:1;
2374 UCHAR Wide16Bit:1;
2375 UCHAR Wide32Bit:1;
2376 UCHAR RelativeAddressing:1;
2377 UCHAR VendorId[8];
2378 UCHAR ProductId[16];
2379 UCHAR ProductRevisionLevel[4];
2380 UCHAR VendorSpecific[20];
2381 UCHAR Reserved3[40];
2382} INQUIRYDATA, *PINQUIRYDATA;
2383#else
2384typedef struct _INQUIRYDATA {
2385 UCHAR DeviceType:5;
2386 UCHAR DeviceTypeQualifier:3;
2387 UCHAR DeviceTypeModifier:7;
2388 UCHAR RemovableMedia:1;
2389 _ANONYMOUS_UNION union {
2390 UCHAR Versions;
2391 _ANONYMOUS_STRUCT struct {
2392 UCHAR ANSIVersion:3;
2393 UCHAR ECMAVersion:3;
2394 UCHAR ISOVersion:2;
2395 } DUMMYSTRUCTNAME;
2396 } DUMMYUNIONNAME;
2397 UCHAR ResponseDataFormat:4;
2398 UCHAR HiSupport:1;
2399 UCHAR NormACA:1;
2400 UCHAR TerminateTask:1;
2401 UCHAR AERC:1;
2402 UCHAR AdditionalLength;
2403 UCHAR Reserved;
2404 UCHAR Addr16:1;
2405 UCHAR Addr32:1;
2406 UCHAR AckReqQ:1;
2407 UCHAR MediumChanger:1;
2408 UCHAR MultiPort:1;
2409 UCHAR ReservedBit2:1;
2410 UCHAR EnclosureServices:1;
2411 UCHAR ReservedBit3:1;
2412 UCHAR SoftReset:1;
2413 UCHAR CommandQueue:1;
2414 UCHAR TransferDisable:1;
2415 UCHAR LinkedCommands:1;
2416 UCHAR Synchronous:1;
2417 UCHAR Wide16Bit:1;
2418 UCHAR Wide32Bit:1;
2419 UCHAR RelativeAddressing:1;
2420 UCHAR VendorId[8];
2421 UCHAR ProductId[16];
2422 UCHAR ProductRevisionLevel[4];
2423 UCHAR VendorSpecific[20];
2424 UCHAR Reserved3[40];
2425} INQUIRYDATA, *PINQUIRYDATA;
2426#endif /* (NTDDI_VERSION < NTDDI_WINXP) */
2427
2428#endif /* _INQUIRYDATA_DEFINED */
2429
2430typedef struct _VPD_MEDIA_SERIAL_NUMBER_PAGE {
2431 UCHAR DeviceType:5;
2432 UCHAR DeviceTypeQualifier:3;
2433 UCHAR PageCode;
2434 UCHAR Reserved;
2435 UCHAR PageLength;
2436 UCHAR SerialNumber[0];
2437} VPD_MEDIA_SERIAL_NUMBER_PAGE, *PVPD_MEDIA_SERIAL_NUMBER_PAGE;
2438
2439typedef struct _VPD_SERIAL_NUMBER_PAGE {
2440 UCHAR DeviceType:5;
2441 UCHAR DeviceTypeQualifier:3;
2442 UCHAR PageCode;
2443 UCHAR Reserved;
2444 UCHAR PageLength;
2445 UCHAR SerialNumber[0];
2446} VPD_SERIAL_NUMBER_PAGE, *PVPD_SERIAL_NUMBER_PAGE;
2447
2448typedef enum _VPD_CODE_SET {
2449 VpdCodeSetReserved = 0,
2450 VpdCodeSetBinary = 1,
2451 VpdCodeSetAscii = 2,
2452 VpdCodeSetUTF8 = 3
2453} VPD_CODE_SET, *PVPD_CODE_SET;
2454
2455typedef enum _VPD_ASSOCIATION {
2456 VpdAssocDevice = 0,
2457 VpdAssocPort = 1,
2458 VpdAssocTarget = 2,
2459 VpdAssocReserved1 = 3,
2460 VpdAssocReserved2 = 4
2461} VPD_ASSOCIATION, *PVPD_ASSOCIATION;
2462
2463typedef enum _VPD_IDENTIFIER_TYPE {
2464 VpdIdentifierTypeVendorSpecific = 0,
2465 VpdIdentifierTypeVendorId = 1,
2466 VpdIdentifierTypeEUI64 = 2,
2467 VpdIdentifierTypeFCPHName = 3,
2468 VpdIdentifierTypePortRelative = 4,
2469 VpdIdentifierTypeTargetPortGroup = 5,
2470 VpdIdentifierTypeLogicalUnitGroup = 6,
2471 VpdIdentifierTypeMD5LogicalUnitId = 7,
2472 VpdIdentifierTypeSCSINameString = 8
2473} VPD_IDENTIFIER_TYPE, *PVPD_IDENTIFIER_TYPE;
2474
2475typedef struct _VPD_IDENTIFICATION_DESCRIPTOR {
2476 UCHAR CodeSet:4;
2477 UCHAR Reserved:4;
2478 UCHAR IdentifierType:4;
2479 UCHAR Association:2;
2480 UCHAR Reserved2:2;
2481 UCHAR Reserved3;
2482 UCHAR IdentifierLength;
2483 UCHAR Identifier[0];
2484} VPD_IDENTIFICATION_DESCRIPTOR, *PVPD_IDENTIFICATION_DESCRIPTOR;
2485
2486typedef struct _VPD_IDENTIFICATION_PAGE {
2487 UCHAR DeviceType:5;
2488 UCHAR DeviceTypeQualifier:3;
2489 UCHAR PageCode;
2490 UCHAR Reserved;
2491 UCHAR PageLength;
2492 UCHAR Descriptors[0];
2493} VPD_IDENTIFICATION_PAGE, *PVPD_IDENTIFICATION_PAGE;
2494
2495typedef struct _VPD_SUPPORTED_PAGES_PAGE {
2496 UCHAR DeviceType:5;
2497 UCHAR DeviceTypeQualifier:3;
2498 UCHAR PageCode;
2499 UCHAR Reserved;
2500 UCHAR PageLength;
2501 UCHAR SupportedPageList[0];
2502} VPD_SUPPORTED_PAGES_PAGE, *PVPD_SUPPORTED_PAGES_PAGE;
2503
2504typedef struct _PRI_REGISTRATION_LIST {
2505 UCHAR Generation[4];
2506 UCHAR AdditionalLength[4];
2507 UCHAR ReservationKeyList[0][8];
2508} PRI_REGISTRATION_LIST, *PPRI_REGISTRATION_LIST;
2509
2510typedef struct _PRI_RESERVATION_DESCRIPTOR {
2511 UCHAR ReservationKey[8];
2512 UCHAR ScopeSpecificAddress[4];
2513 UCHAR Reserved;
2514 UCHAR Type:4;
2515 UCHAR Scope:4;
2516 UCHAR Obsolete[2];
2517} PRI_RESERVATION_DESCRIPTOR, *PPRI_RESERVATION_DESCRIPTOR;
2518
2519typedef struct _PRI_RESERVATION_LIST {
2520 UCHAR Generation[4];
2521 UCHAR AdditionalLength[4];
2522 PRI_RESERVATION_DESCRIPTOR Reservations[0];
2523} PRI_RESERVATION_LIST, *PPRI_RESERVATION_LIST;
2524
2525typedef struct _PRO_PARAMETER_LIST {
2526 UCHAR ReservationKey[8];
2527 UCHAR ServiceActionReservationKey[8];
2528 UCHAR ScopeSpecificAddress[4];
2529 UCHAR ActivatePersistThroughPowerLoss:1;
2530 UCHAR Reserved1:7;
2531 UCHAR Reserved2;
2532 UCHAR Obsolete[2];
2533} PRO_PARAMETER_LIST, *PPRO_PARAMETER_LIST;
2534
2535typedef struct _SENSE_DATA {
2536 UCHAR ErrorCode:7;
2537 UCHAR Valid:1;
2538 UCHAR SegmentNumber;
2539 UCHAR SenseKey:4;
2540 UCHAR Reserved:1;
2541 UCHAR IncorrectLength:1;
2542 UCHAR EndOfMedia:1;
2543 UCHAR FileMark:1;
2544 UCHAR Information[4];
2545 UCHAR AdditionalSenseLength;
2546 UCHAR CommandSpecificInformation[4];
2547 UCHAR AdditionalSenseCode;
2548 UCHAR AdditionalSenseCodeQualifier;
2549 UCHAR FieldReplaceableUnitCode;
2550 UCHAR SenseKeySpecific[3];
2551} SENSE_DATA, *PSENSE_DATA;
2552
2553/* Read Capacity Data. Returned in Big Endian format */
2554typedef struct _READ_CAPACITY_DATA {
2555 ULONG LogicalBlockAddress;
2556 ULONG BytesPerBlock;
2557} READ_CAPACITY_DATA, *PREAD_CAPACITY_DATA;
2558
2559typedef struct _READ_CAPACITY_DATA_EX {
2560 LARGE_INTEGER LogicalBlockAddress;
2561 ULONG BytesPerBlock;
2562} READ_CAPACITY_DATA_EX, *PREAD_CAPACITY_DATA_EX;
2563
2564/* Read Block Limits Data. Returned in Big Endian format */
2565typedef struct _READ_BLOCK_LIMITS {
2566 UCHAR Reserved;
2567 UCHAR BlockMaximumSize[3];
2568 UCHAR BlockMinimumSize[2];
2569} READ_BLOCK_LIMITS_DATA, *PREAD_BLOCK_LIMITS_DATA;
2570
2571typedef struct _READ_BUFFER_CAPACITY_DATA {
2572 UCHAR DataLength[2];
2573 UCHAR Reserved1;
2574 UCHAR BlockDataReturned:1;
2575 UCHAR Reserved4:7;
2576 UCHAR TotalBufferSize[4];
2577 UCHAR AvailableBufferSize[4];
2578} READ_BUFFER_CAPACITY_DATA, *PREAD_BUFFER_CAPACITY_DATA;
2579
2580typedef struct _MODE_PARAMETER_HEADER {
2581 UCHAR ModeDataLength;
2582 UCHAR MediumType;
2583 UCHAR DeviceSpecificParameter;
2584 UCHAR BlockDescriptorLength;
2585} MODE_PARAMETER_HEADER, *PMODE_PARAMETER_HEADER;
2586
2587typedef struct _MODE_PARAMETER_HEADER10 {
2588 UCHAR ModeDataLength[2];
2589 UCHAR MediumType;
2590 UCHAR DeviceSpecificParameter;
2591 UCHAR Reserved[2];
2592 UCHAR BlockDescriptorLength[2];
2593} MODE_PARAMETER_HEADER10, *PMODE_PARAMETER_HEADER10;
2594
2595typedef struct _MODE_PARAMETER_BLOCK {
2596 UCHAR DensityCode;
2597 UCHAR NumberOfBlocks[3];
2598 UCHAR Reserved;
2599 UCHAR BlockLength[3];
2600} MODE_PARAMETER_BLOCK, *PMODE_PARAMETER_BLOCK;
2601
2602typedef struct _MODE_DISCONNECT_PAGE {
2603 UCHAR PageCode:6;
2604 UCHAR Reserved:1;
2605 UCHAR PageSavable:1;
2606 UCHAR PageLength;
2607 UCHAR BufferFullRatio;
2608 UCHAR BufferEmptyRatio;
2609 UCHAR BusInactivityLimit[2];
2610 UCHAR BusDisconnectTime[2];
2611 UCHAR BusConnectTime[2];
2612 UCHAR MaximumBurstSize[2];
2613 UCHAR DataTransferDisconnect:2;
2614 UCHAR Reserved2[3];
2615} MODE_DISCONNECT_PAGE, *PMODE_DISCONNECT_PAGE;
2616
2617typedef struct _MODE_CACHING_PAGE {
2618 UCHAR PageCode:6;
2619 UCHAR Reserved:1;
2620 UCHAR PageSavable:1;
2621 UCHAR PageLength;
2622 UCHAR ReadDisableCache:1;
2623 UCHAR MultiplicationFactor:1;
2624 UCHAR WriteCacheEnable:1;
2625 UCHAR Reserved2:5;
2626 UCHAR WriteRetensionPriority:4;
2627 UCHAR ReadRetensionPriority:4;
2628 UCHAR DisablePrefetchTransfer[2];
2629 UCHAR MinimumPrefetch[2];
2630 UCHAR MaximumPrefetch[2];
2631 UCHAR MaximumPrefetchCeiling[2];
2632} MODE_CACHING_PAGE, *PMODE_CACHING_PAGE;
2633
2634typedef struct _MODE_CDROM_WRITE_PARAMETERS_PAGE2 {
2635 UCHAR PageCode:6;
2636 UCHAR Reserved:1;
2637 UCHAR PageSavable:1;
2638 UCHAR PageLength;
2639 UCHAR WriteType:4;
2640 UCHAR TestWrite:1;
2641 UCHAR LinkSizeValid:1;
2642 UCHAR BufferUnderrunFreeEnabled:1;
2643 UCHAR Reserved2:1;
2644 UCHAR TrackMode:4;
2645 UCHAR Copy:1;
2646 UCHAR FixedPacket:1;
2647 UCHAR MultiSession:2;
2648 UCHAR DataBlockType:4;
2649 UCHAR Reserved3:4;
2650 UCHAR LinkSize;
2651 UCHAR Reserved4;
2652 UCHAR HostApplicationCode:6;
2653 UCHAR Reserved5:2;
2654 UCHAR SessionFormat;
2655 UCHAR Reserved6;
2656 UCHAR PacketSize[4];
2657 UCHAR AudioPauseLength[2];
2658 UCHAR MediaCatalogNumber[16];
2659 UCHAR ISRC[16];
2660 UCHAR SubHeaderData[4];
2661} MODE_CDROM_WRITE_PARAMETERS_PAGE2, *PMODE_CDROM_WRITE_PARAMETERS_PAGE2;
2662
2663typedef struct _MODE_MRW_PAGE {
2664 UCHAR PageCode:6;
2665 UCHAR Reserved:1;
2666 UCHAR PageSavable:1;
2667 UCHAR PageLength;
2668 UCHAR Reserved1;
2669 UCHAR LbaSpace:1;
2670 UCHAR Reserved2:7;
2671 UCHAR Reserved3[4];
2672} MODE_MRW_PAGE, *PMODE_MRW_PAGE;
2673
2674typedef struct _MODE_FLEXIBLE_DISK_PAGE {
2675 UCHAR PageCode:6;
2676 UCHAR Reserved:1;
2677 UCHAR PageSavable:1;
2678 UCHAR PageLength;
2679 UCHAR TransferRate[2];
2680 UCHAR NumberOfHeads;
2681 UCHAR SectorsPerTrack;
2682 UCHAR BytesPerSector[2];
2683 UCHAR NumberOfCylinders[2];
2684 UCHAR StartWritePrecom[2];
2685 UCHAR StartReducedCurrent[2];
2686 UCHAR StepRate[2];
2687 UCHAR StepPluseWidth;
2688 UCHAR HeadSettleDelay[2];
2689 UCHAR MotorOnDelay;
2690 UCHAR MotorOffDelay;
2691 UCHAR Reserved2:5;
2692 UCHAR MotorOnAsserted:1;
2693 UCHAR StartSectorNumber:1;
2694 UCHAR TrueReadySignal:1;
2695 UCHAR StepPlusePerCyclynder:4;
2696 UCHAR Reserved3:4;
2697 UCHAR WriteCompenstation;
2698 UCHAR HeadLoadDelay;
2699 UCHAR HeadUnloadDelay;
2700 UCHAR Pin2Usage:4;
2701 UCHAR Pin34Usage:4;
2702 UCHAR Pin1Usage:4;
2703 UCHAR Pin4Usage:4;
2704 UCHAR MediumRotationRate[2];
2705 UCHAR Reserved4[2];
2706} MODE_FLEXIBLE_DISK_PAGE, *PMODE_FLEXIBLE_DISK_PAGE;
2707
2708typedef struct _MODE_FORMAT_PAGE {
2709 UCHAR PageCode:6;
2710 UCHAR Reserved:1;
2711 UCHAR PageSavable:1;
2712 UCHAR PageLength;
2713 UCHAR TracksPerZone[2];
2714 UCHAR AlternateSectorsPerZone[2];
2715 UCHAR AlternateTracksPerZone[2];
2716 UCHAR AlternateTracksPerLogicalUnit[2];
2717 UCHAR SectorsPerTrack[2];
2718 UCHAR BytesPerPhysicalSector[2];
2719 UCHAR Interleave[2];
2720 UCHAR TrackSkewFactor[2];
2721 UCHAR CylinderSkewFactor[2];
2722 UCHAR Reserved2:4;
2723 UCHAR SurfaceFirst:1;
2724 UCHAR RemovableMedia:1;
2725 UCHAR HardSectorFormating:1;
2726 UCHAR SoftSectorFormating:1;
2727 UCHAR Reserved3[3];
2728} MODE_FORMAT_PAGE, *PMODE_FORMAT_PAGE;
2729
2730typedef struct _MODE_RIGID_GEOMETRY_PAGE {
2731 UCHAR PageCode:6;
2732 UCHAR Reserved:1;
2733 UCHAR PageSavable:1;
2734 UCHAR PageLength;
2735 UCHAR NumberOfCylinders[3];
2736 UCHAR NumberOfHeads;
2737 UCHAR StartWritePrecom[3];
2738 UCHAR StartReducedCurrent[3];
2739 UCHAR DriveStepRate[2];
2740 UCHAR LandZoneCyclinder[3];
2741 UCHAR RotationalPositionLock:2;
2742 UCHAR Reserved2:6;
2743 UCHAR RotationOffset;
2744 UCHAR Reserved3;
2745 UCHAR RoataionRate[2];
2746 UCHAR Reserved4[2];
2747} MODE_RIGID_GEOMETRY_PAGE, *PMODE_RIGID_GEOMETRY_PAGE;
2748
2749typedef struct _MODE_READ_WRITE_RECOVERY_PAGE {
2750 UCHAR PageCode:6;
2751 UCHAR Reserved1:1;
2752 UCHAR PSBit:1;
2753 UCHAR PageLength;
2754 UCHAR DCRBit:1;
2755 UCHAR DTEBit:1;
2756 UCHAR PERBit:1;
2757 UCHAR EERBit:1;
2758 UCHAR RCBit:1;
2759 UCHAR TBBit:1;
2760 UCHAR ARRE:1;
2761 UCHAR AWRE:1;
2762 UCHAR ReadRetryCount;
2763 UCHAR Reserved4[4];
2764 UCHAR WriteRetryCount;
2765 UCHAR Reserved5[3];
2766} MODE_READ_WRITE_RECOVERY_PAGE, *PMODE_READ_WRITE_RECOVERY_PAGE;
2767
2768typedef struct _MODE_READ_RECOVERY_PAGE {
2769 UCHAR PageCode:6;
2770 UCHAR Reserved1:1;
2771 UCHAR PSBit:1;
2772 UCHAR PageLength;
2773 UCHAR DCRBit:1;
2774 UCHAR DTEBit:1;
2775 UCHAR PERBit:1;
2776 UCHAR Reserved2:1;
2777 UCHAR RCBit:1;
2778 UCHAR TBBit:1;
2779 UCHAR Reserved3:2;
2780 UCHAR ReadRetryCount;
2781 UCHAR Reserved4[4];
2782} MODE_READ_RECOVERY_PAGE, *PMODE_READ_RECOVERY_PAGE;
2783
2784typedef struct _MODE_INFO_EXCEPTIONS {
2785 UCHAR PageCode:6;
2786 UCHAR Reserved1:1;
2787 UCHAR PSBit:1;
2788 UCHAR PageLength;
2789 _ANONYMOUS_UNION union {
2790 UCHAR Flags;
2791 _ANONYMOUS_STRUCT struct {
2792 UCHAR LogErr:1;
2793 UCHAR Reserved2:1;
2794 UCHAR Test:1;
2795 UCHAR Dexcpt:1;
2796 UCHAR Reserved3:3;
2797 UCHAR Perf:1;
2798 } DUMMYSTRUCTNAME;
2799 } DUMMYUNIONNAME;
2800 UCHAR ReportMethod:4;
2801 UCHAR Reserved4:4;
2802 UCHAR IntervalTimer[4];
2803 UCHAR ReportCount[4];
2804} MODE_INFO_EXCEPTIONS, *PMODE_INFO_EXCEPTIONS;
2805
2806typedef struct _POWER_CONDITION_PAGE {
2807 UCHAR PageCode:6;
2808 UCHAR Reserved:1;
2809 UCHAR PSBit:1;
2810 UCHAR PageLength;
2811 UCHAR Reserved2;
2812 UCHAR Standby:1;
2813 UCHAR Idle:1;
2814 UCHAR Reserved3:6;
2815 UCHAR IdleTimer[4];
2816 UCHAR StandbyTimer[4];
2817} POWER_CONDITION_PAGE, *PPOWER_CONDITION_PAGE;
2818
2819typedef struct _CDDA_OUTPUT_PORT {
2820 UCHAR ChannelSelection:4;
2821 UCHAR Reserved:4;
2822 UCHAR Volume;
2823} CDDA_OUTPUT_PORT, *PCDDA_OUTPUT_PORT;
2824
2825typedef struct _CDAUDIO_CONTROL_PAGE {
2826 UCHAR PageCode:6;
2827 UCHAR Reserved:1;
2828 UCHAR PSBit:1;
2829 UCHAR PageLength;
2830 UCHAR Reserved2:1;
2831 UCHAR StopOnTrackCrossing:1;
2832 UCHAR Immediate:1;
2833 UCHAR Reserved3:5;
2834 UCHAR Reserved4[3];
2835 UCHAR Obsolete[2];
2836 CDDA_OUTPUT_PORT CDDAOutputPorts[4];
2837} CDAUDIO_CONTROL_PAGE, *PCDAUDIO_CONTROL_PAGE;
2838
2839typedef struct _CDVD_FEATURE_SET_PAGE {
2840 UCHAR PageCode:6;
2841 UCHAR Reserved:1;
2842 UCHAR PSBit:1;
2843 UCHAR PageLength;
2844 UCHAR CDAudio[2];
2845 UCHAR EmbeddedChanger[2];
2846 UCHAR PacketSMART[2];
2847 UCHAR PersistantPrevent[2];
2848 UCHAR EventStatusNotification[2];
2849 UCHAR DigitalOutput[2];
2850 UCHAR CDSequentialRecordable[2];
2851 UCHAR DVDSequentialRecordable[2];
2852 UCHAR RandomRecordable[2];
2853 UCHAR KeyExchange[2];
2854 UCHAR Reserved2[2];
2855} CDVD_FEATURE_SET_PAGE, *PCDVD_FEATURE_SET_PAGE;
2856
2857typedef struct _CDVD_INACTIVITY_TIMEOUT_PAGE {
2858 UCHAR PageCode:6;
2859 UCHAR Reserved:1;
2860 UCHAR PSBit:1;
2861 UCHAR PageLength;
2862 UCHAR Reserved2[2];
2863 UCHAR SWPP:1;
2864 UCHAR DISP:1;
2865 UCHAR Reserved3:6;
2866 UCHAR Reserved4;
2867 UCHAR GroupOneMinimumTimeout[2];
2868 UCHAR GroupTwoMinimumTimeout[2];
2869} CDVD_INACTIVITY_TIMEOUT_PAGE, *PCDVD_INACTIVITY_TIMEOUT_PAGE;
2870
2871typedef struct _CDVD_CAPABILITIES_PAGE {
2872 UCHAR PageCode:6;
2873 UCHAR Reserved:1;
2874 UCHAR PSBit:1;
2875 UCHAR PageLength;
2876 UCHAR CDRRead:1;
2877 UCHAR CDERead:1;
2878 UCHAR Method2:1;
2879 UCHAR DVDROMRead:1;
2880 UCHAR DVDRRead:1;
2881 UCHAR DVDRAMRead:1;
2882 UCHAR Reserved2:2;
2883 UCHAR CDRWrite:1;
2884 UCHAR CDEWrite:1;
2885 UCHAR TestWrite:1;
2886 UCHAR Reserved3:1;
2887 UCHAR DVDRWrite:1;
2888 UCHAR DVDRAMWrite:1;
2889 UCHAR Reserved4:2;
2890 UCHAR AudioPlay:1;
2891 UCHAR Composite:1;
2892 UCHAR DigitalPortOne:1;
2893 UCHAR DigitalPortTwo:1;
2894 UCHAR Mode2Form1:1;
2895 UCHAR Mode2Form2:1;
2896 UCHAR MultiSession:1;
2897 UCHAR BufferUnderrunFree:1;
2898 UCHAR CDDA:1;
2899 UCHAR CDDAAccurate:1;
2900 UCHAR RWSupported:1;
2901 UCHAR RWDeinterleaved:1;
2902 UCHAR C2Pointers:1;
2903 UCHAR ISRC:1;
2904 UCHAR UPC:1;
2905 UCHAR ReadBarCodeCapable:1;
2906 UCHAR Lock:1;
2907 UCHAR LockState:1;
2908 UCHAR PreventJumper:1;
2909 UCHAR Eject:1;
2910 UCHAR Reserved6:1;
2911 UCHAR LoadingMechanismType:3;
2912 UCHAR SeparateVolume:1;
2913 UCHAR SeperateChannelMute:1;
2914 UCHAR SupportsDiskPresent:1;
2915 UCHAR SWSlotSelection:1;
2916 UCHAR SideChangeCapable:1;
2917 UCHAR RWInLeadInReadable:1;
2918 UCHAR Reserved7:2;
2919 _ANONYMOUS_UNION union {
2920 UCHAR ReadSpeedMaximum[2];
2921 UCHAR ObsoleteReserved[2];
2922 } DUMMYUNIONNAME;
2923 UCHAR NumberVolumeLevels[2];
2924 UCHAR BufferSize[2];
2925 _ANONYMOUS_UNION union {
2926 UCHAR ReadSpeedCurrent[2];
2927 UCHAR ObsoleteReserved2[2];
2928 } DUMMYUNIONNAME2;
2929 UCHAR ObsoleteReserved3;
2930 UCHAR Reserved8:1;
2931 UCHAR BCK:1;
2932 UCHAR RCK:1;
2933 UCHAR LSBF:1;
2934 UCHAR Length:2;
2935 UCHAR Reserved9:2;
2936 _ANONYMOUS_UNION union {
2937 UCHAR WriteSpeedMaximum[2];
2938 UCHAR ObsoleteReserved4[2];
2939 } DUMMYUNIONNAME3;
2940 _ANONYMOUS_UNION union {
2941 UCHAR WriteSpeedCurrent[2];
2942 UCHAR ObsoleteReserved11[2];
2943 } DUMMYUNIONNAME4;
2944 _ANONYMOUS_UNION union {
2945 UCHAR CopyManagementRevision[2];
2946 UCHAR Reserved10[2];
2947 } DUMMYUNIONNAME5;
2948} CDVD_CAPABILITIES_PAGE, *PCDVD_CAPABILITIES_PAGE;
2949
2950typedef struct _LUN_LIST {
2951 UCHAR LunListLength[4];
2952 UCHAR Reserved[4];
2953 UCHAR Lun[0][8];
2954} LUN_LIST, *PLUN_LIST;
2955
2956typedef struct _MODE_PARM_READ_WRITE {
2957 MODE_PARAMETER_HEADER ParameterListHeader;
2958 MODE_PARAMETER_BLOCK ParameterListBlock;
2959} MODE_PARM_READ_WRITE_DATA, *PMODE_PARM_READ_WRITE_DATA;
2960
2961typedef struct _PORT_OUTPUT {
2962 UCHAR ChannelSelection;
2963 UCHAR Volume;
2964} PORT_OUTPUT, *PPORT_OUTPUT;
2965
2966typedef struct _AUDIO_OUTPUT {
2967 UCHAR CodePage;
2968 UCHAR ParameterLength;
2969 UCHAR Immediate;
2970 UCHAR Reserved[2];
2971 UCHAR LbaFormat;
2972 UCHAR LogicalBlocksPerSecond[2];
2973 PORT_OUTPUT PortOutput[4];
2974} AUDIO_OUTPUT, *PAUDIO_OUTPUT;
2975
2976/* Atapi 2.5 changers */
2977typedef struct _MECHANICAL_STATUS_INFORMATION_HEADER {
2978 UCHAR CurrentSlot:5;
2979 UCHAR ChangerState:2;
2980 UCHAR Fault:1;
2981 UCHAR Reserved:5;
2982 UCHAR MechanismState:3;
2983 UCHAR CurrentLogicalBlockAddress[3];
2984 UCHAR NumberAvailableSlots;
2985 UCHAR SlotTableLength[2];
2986} MECHANICAL_STATUS_INFORMATION_HEADER, *PMECHANICAL_STATUS_INFORMATION_HEADER;
2987
2988typedef struct _SLOT_TABLE_INFORMATION {
2989 UCHAR DiscChanged:1;
2990 UCHAR Reserved:6;
2991 UCHAR DiscPresent:1;
2992 UCHAR Reserved2[3];
2993} SLOT_TABLE_INFORMATION, *PSLOT_TABLE_INFORMATION;
2994
2995typedef struct _MECHANICAL_STATUS {
2996 MECHANICAL_STATUS_INFORMATION_HEADER MechanicalStatusHeader;
2997 SLOT_TABLE_INFORMATION SlotTableInfo[1];
2998} MECHANICAL_STATUS, *PMECHANICAL_STATUS;
2999
3000/* Tape definitions */
3001typedef struct _TAPE_POSITION_DATA {
3002 UCHAR Reserved1:2;
3003 UCHAR BlockPositionUnsupported:1;
3004 UCHAR Reserved2:3;
3005 UCHAR EndOfPartition:1;
3006 UCHAR BeginningOfPartition:1;
3007 UCHAR PartitionNumber;
3008 USHORT Reserved3;
3009 UCHAR FirstBlock[4];
3010 UCHAR LastBlock[4];
3011 UCHAR Reserved4;
3012 UCHAR NumberOfBlocks[3];
3013 UCHAR NumberOfBytes[4];
3014} TAPE_POSITION_DATA, *PTAPE_POSITION_DATA;
3015
3016/* This structure is used to convert little endian ULONGs
3017 to SCSI CDB big endians values. */
3018typedef union _EIGHT_BYTE {
3019 _ANONYMOUS_STRUCT struct {
3020 UCHAR Byte0;
3021 UCHAR Byte1;
3022 UCHAR Byte2;
3023 UCHAR Byte3;
3024 UCHAR Byte4;
3025 UCHAR Byte5;
3026 UCHAR Byte6;
3027 UCHAR Byte7;
3028 } DUMMYSTRUCTNAME;
3029 ULONGLONG AsULongLong;
3030} EIGHT_BYTE, *PEIGHT_BYTE;
3031
3032typedef union _FOUR_BYTE {
3033 _ANONYMOUS_STRUCT struct {
3034 UCHAR Byte0;
3035 UCHAR Byte1;
3036 UCHAR Byte2;
3037 UCHAR Byte3;
3038 } DUMMYSTRUCTNAME;
3039 ULONG AsULong;
3040} FOUR_BYTE, *PFOUR_BYTE;
3041
3042typedef union _TWO_BYTE {
3043 _ANONYMOUS_STRUCT struct {
3044 UCHAR Byte0;
3045 UCHAR Byte1;
3046 } DUMMYSTRUCTNAME;
3047 USHORT AsUShort;
3048} TWO_BYTE, *PTWO_BYTE;
3049
3050/* Byte reversing macro for converting between
3051 big- and little-endian formats */
3052#define REVERSE_BYTES_QUAD(Destination, Source) { \
3053 PEIGHT_BYTE _val1 = (PEIGHT_BYTE)(Destination); \
3054 PEIGHT_BYTE _val2 = (PEIGHT_BYTE)(Source); \
3055 _val1->Byte7 = _val2->Byte0; \
3056 _val1->Byte6 = _val2->Byte1; \
3057 _val1->Byte5 = _val2->Byte2; \
3058 _val1->Byte4 = _val2->Byte3; \
3059 _val1->Byte3 = _val2->Byte4; \
3060 _val1->Byte2 = _val2->Byte5; \
3061 _val1->Byte1 = _val2->Byte6; \
3062 _val1->Byte0 = _val2->Byte7; \
3063}
3064
3065#define REVERSE_BYTES(Destination, Source) { \
3066 PFOUR_BYTE _val1 = (PFOUR_BYTE)(Destination); \
3067 PFOUR_BYTE _val2 = (PFOUR_BYTE)(Source); \
3068 _val1->Byte3 = _val2->Byte0; \
3069 _val1->Byte2 = _val2->Byte1; \
3070 _val1->Byte1 = _val2->Byte2; \
3071 _val1->Byte0 = _val2->Byte3; \
3072}
3073
3074#define REVERSE_BYTES_SHORT(Destination, Source) { \
3075 PTWO_BYTE _val1 = (PTWO_BYTE)(Destination); \
3076 PTWO_BYTE _val2 = (PTWO_BYTE)(Source); \
3077 _val1->Byte1 = _val2->Byte0; \
3078 _val1->Byte0 = _val2->Byte1; \
3079}
3080
3081#define REVERSE_SHORT(Short) { \
3082 UCHAR _val; \
3083 PTWO_BYTE _val2 = (PTWO_BYTE)(Short); \
3084 _val = _val2->Byte0; \
3085 _val2->Byte0 = _val2->Byte1; \
3086 _val2->Byte1 = _val; \
3087}
3088
3089#define REVERSE_LONG(Long) { \
3090 UCHAR _val; \
3091 PFOUR_BYTE _val2 = (PFOUR_BYTE)(Long); \
3092 _val = _val2->Byte3; \
3093 _val2->Byte3 = _val2->Byte0; \
3094 _val2->Byte0 = _val; \
3095 _val = _val2->Byte2; \
3096 _val2->Byte2 = _val2->Byte1; \
3097 _val2->Byte1 = _val; \
3098}
3099
3100#define WHICH_BIT(Data, Bit) { \
3101 UCHAR _val; \
3102 for (_val = 0; _val < 32; _val++) { \
3103 if (((Data) >> _val) == 1) { \
3104 break; \
3105 } \
3106 } \
3107 ASSERT(_val != 32); \
3108 (Bit) = _val; \
3109}
3110
3111/* FIXME : This structure doesn't exist in the official header */
3112typedef struct _MODE_CDROM_WRITE_PARAMETERS_PAGE {
3113 UCHAR PageLength;
3114 UCHAR WriteType:4;
3115 UCHAR TestWrite:1;
3116 UCHAR LinkSizeValid:1;
3117 UCHAR BufferUnderrunFreeEnabled:1;
3118 UCHAR Reserved2:1;
3119 UCHAR TrackMode:4;
3120 UCHAR Copy:1;
3121 UCHAR FixedPacket:1;
3122 UCHAR MultiSession:2;
3123 UCHAR DataBlockType:4;
3124 UCHAR Reserved3:4;
3125 UCHAR LinkSize;
3126 UCHAR Reserved4;
3127 UCHAR HostApplicationCode:6;
3128 UCHAR Reserved5:2;
3129 UCHAR SessionFormat;
3130 UCHAR Reserved6;
3131 UCHAR PacketSize[4];
3132 UCHAR AudioPauseLength[2];
3133 UCHAR Reserved7:7;
3134 UCHAR MediaCatalogNumberValid:1;
3135 UCHAR MediaCatalogNumber[13];
3136 UCHAR MediaCatalogNumberZero;
3137 UCHAR MediaCatalogNumberAFrame;
3138 UCHAR Reserved8:7;
3139 UCHAR ISRCValid:1;
3140 UCHAR ISRCCountry[2];
3141 UCHAR ISRCOwner[3];
3142 UCHAR ISRCRecordingYear[2];
3143 UCHAR ISRCSerialNumber[5];
3144 UCHAR ISRCZero;
3145 UCHAR ISRCAFrame;
3146 UCHAR ISRCReserved;
3147 UCHAR SubHeaderData[4];
3148} MODE_CDROM_WRITE_PARAMETERS_PAGE, *PMODE_CDROM_WRITE_PARAMETERS_PAGE;
3149
3150#ifdef __cplusplus
3151}
3152#endif
3153
3154#endif /* _NTSCSI_ */
Note: See TracBrowser for help on using the repository browser.