~steve-sk2/mingw-w64/oneiric

« back to all changes in this revision

Viewing changes to mingw-w64-headers/ddk/include/ddk/scsi.h

  • Committer: Bazaar Package Importer
  • Author(s): Stephen Kitt
  • Date: 2010-11-18 00:04:46 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20101118000446-xe24b423su55onyl
Tags: 1.0+20101003-1
* New maintainer. (Closes: #594371.)
* New upstream snapshot:
  - Includes getopt.h. (Closes: #569914.)
* Build g++ for Win64. (Closes: #600451.)
* Standards-Version 3.9.1 (new packaging).
* Include patch from
  http://mingw-w64.svn.sourceforge.net/viewvc/mingw-w64?view=revision&revision=3715
  as suggested by Rafaël Carré.

Show diffs side-by-side

added added

removed removed

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