ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

scsi.h
Go to the documentation of this file.
00001 /*
00002  * scsi.h
00003  *
00004  * SCSI port and class interface.
00005  *
00006  * This file is part of the w32api package.
00007  *
00008  * Contributors:
00009  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
00010  *
00011  * THIS SOFTWARE IS NOT COPYRIGHTED
00012  *
00013  * This source code is offered for use in the public domain. You may
00014  * use, modify or distribute it freely.
00015  *
00016  * This code is distributed in the hope that it will be useful but
00017  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00018  * DISCLAIMED. This includes but is not limited to warranties of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00020  *
00021  */
00022 
00023 #ifndef _NTSCSI_
00024 #define _NTSCSI_
00025 
00026 #ifdef __cplusplus
00027 extern "C" {
00028 #endif
00029 
00030 #ifndef _NTSCSI_USER_MODE_
00031 #include "srb.h"
00032 #endif
00033 
00034 #define NOTIFICATION_OPERATIONAL_CHANGE_CLASS_MASK    0x02
00035 #define NOTIFICATION_POWER_MANAGEMENT_CLASS_MASK      0x04
00036 #define NOTIFICATION_EXTERNAL_REQUEST_CLASS_MASK      0x08
00037 #define NOTIFICATION_MEDIA_STATUS_CLASS_MASK          0x10
00038 #define NOTIFICATION_MULTI_HOST_CLASS_MASK            0x20
00039 #define NOTIFICATION_DEVICE_BUSY_CLASS_MASK           0x40
00040 
00041 
00042 #define NOTIFICATION_NO_CLASS_EVENTS                  0x0
00043 #define NOTIFICATION_OPERATIONAL_CHANGE_CLASS_EVENTS  0x1
00044 #define NOTIFICATION_POWER_MANAGEMENT_CLASS_EVENTS    0x2
00045 #define NOTIFICATION_EXTERNAL_REQUEST_CLASS_EVENTS    0x3
00046 #define NOTIFICATION_MEDIA_STATUS_CLASS_EVENTS        0x4
00047 #define NOTIFICATION_MULTI_HOST_CLASS_EVENTS          0x5
00048 #define NOTIFICATION_DEVICE_BUSY_CLASS_EVENTS         0x6
00049 
00050 #define NOTIFICATION_OPERATIONAL_EVENT_NO_CHANGE         0x0
00051 #define NOTIFICATION_OPERATIONAL_EVENT_CHANGE_REQUESTED  0x1
00052 #define NOTIFICATION_OPERATIONAL_EVENT_CHANGE_OCCURRED   0x2
00053 
00054 #define NOTIFICATION_OPERATIONAL_STATUS_AVAILABLE        0x0
00055 #define NOTIFICATION_OPERATIONAL_STATUS_TEMPORARY_BUSY   0x1
00056 #define NOTIFICATION_OPERATIONAL_STATUS_EXTENDED_BUSY    0x2
00057 
00058 #define NOTIFICATION_OPERATIONAL_OPCODE_NONE             0x0
00059 #define NOTIFICATION_OPERATIONAL_OPCODE_FEATURE_CHANGE   0x1
00060 #define NOTIFICATION_OPERATIONAL_OPCODE_FEATURE_ADDED    0x2
00061 #define NOTIFICATION_OPERATIONAL_OPCODE_UNIT_RESET       0x3
00062 #define NOTIFICATION_OPERATIONAL_OPCODE_FIRMWARE_CHANGED 0x4
00063 #define NOTIFICATION_OPERATIONAL_OPCODE_INQUIRY_CHANGED  0x5
00064 
00065 #define NOTIFICATION_POWER_EVENT_NO_CHANGE          0x0
00066 #define NOTIFICATION_POWER_EVENT_CHANGE_SUCCEEDED   0x1
00067 #define NOTIFICATION_POWER_EVENT_CHANGE_FAILED      0x2
00068 
00069 #define NOTIFICATION_POWER_STATUS_ACTIVE            0x1
00070 #define NOTIFICATION_POWER_STATUS_IDLE              0x2
00071 #define NOTIFICATION_POWER_STATUS_STANDBY           0x3
00072 #define NOTIFICATION_POWER_STATUS_SLEEP             0x4
00073 
00074 #define NOTIFICATION_MEDIA_EVENT_NO_EVENT           0x0
00075 #define NOTIFICATION_EXTERNAL_EVENT_NO_CHANGE       0x0
00076 #define NOTIFICATION_EXTERNAL_EVENT_BUTTON_DOWN     0x1
00077 #define NOTIFICATION_EXTERNAL_EVENT_BUTTON_UP       0x2
00078 #define NOTIFICATION_EXTERNAL_EVENT_EXTERNAL        0x3
00079 
00080 #define NOTIFICATION_EXTERNAL_STATUS_READY          0x0
00081 #define NOTIFICATION_EXTERNAL_STATUS_PREVENT        0x1
00082 
00083 #define NOTIFICATION_EXTERNAL_REQUEST_NONE          0x0000
00084 #define NOTIFICATION_EXTERNAL_REQUEST_QUEUE_OVERRUN 0x0001
00085 #define NOTIFICATION_EXTERNAL_REQUEST_PLAY          0x0101
00086 #define NOTIFICATION_EXTERNAL_REQUEST_REWIND_BACK   0x0102
00087 #define NOTIFICATION_EXTERNAL_REQUEST_FAST_FORWARD  0x0103
00088 #define NOTIFICATION_EXTERNAL_REQUEST_PAUSE         0x0104
00089 #define NOTIFICATION_EXTERNAL_REQUEST_STOP          0x0106
00090 #define NOTIFICATION_EXTERNAL_REQUEST_ASCII_LOW     0x0200
00091 #define NOTIFICATION_EXTERNAL_REQUEST_ASCII_HIGH    0x02ff
00092 
00093 #define NOTIFICATION_MEDIA_EVENT_NO_CHANGE          0x0
00094 #define NOTIFICATION_MEDIA_EVENT_EJECT_REQUEST      0x1
00095 #define NOTIFICATION_MEDIA_EVENT_NEW_MEDIA          0x2
00096 #define NOTIFICATION_MEDIA_EVENT_MEDIA_REMOVAL      0x3
00097 #define NOTIFICATION_MEDIA_EVENT_MEDIA_CHANGE       0x4
00098 
00099 #define NOTIFICATION_BUSY_EVENT_NO_EVENT               0x0
00100 #define NOTIFICATION_MULTI_HOST_EVENT_NO_CHANGE        0x0
00101 #define NOTIFICATION_MULTI_HOST_EVENT_CONTROL_REQUEST  0x1
00102 #define NOTIFICATION_MULTI_HOST_EVENT_CONTROL_GRANT    0x2
00103 #define NOTIFICATION_MULTI_HOST_EVENT_CONTROL_RELEASE  0x3
00104 
00105 #define NOTIFICATION_MULTI_HOST_STATUS_READY           0x0
00106 #define NOTIFICATION_MULTI_HOST_STATUS_PREVENT         0x1
00107 
00108 #define NOTIFICATION_MULTI_HOST_PRIORITY_NO_REQUESTS   0x0
00109 #define NOTIFICATION_MULTI_HOST_PRIORITY_LOW           0x1
00110 #define NOTIFICATION_MULTI_HOST_PRIORITY_MEDIUM        0x2
00111 #define NOTIFICATION_MULTI_HOST_PRIORITY_HIGH          0x3
00112 
00113 #define NOTIFICATION_BUSY_EVENT_NO_EVENT            0x0
00114 #define NOTIFICATION_BUSY_EVENT_NO_CHANGE           0x0
00115 #define NOTIFICATION_BUSY_EVENT_BUSY                0x1
00116 
00117 #define NOTIFICATION_BUSY_STATUS_NO_EVENT           0x0
00118 #define NOTIFICATION_BUSY_STATUS_POWER              0x1
00119 #define NOTIFICATION_BUSY_STATUS_IMMEDIATE          0x2
00120 #define NOTIFICATION_BUSY_STATUS_DEFERRED           0x3
00121 
00122 #define DVD_FORMAT_LEAD_IN          0x00
00123 #define DVD_FORMAT_COPYRIGHT        0x01
00124 #define DVD_FORMAT_DISK_KEY         0x02
00125 #define DVD_FORMAT_BCA              0x03
00126 #define DVD_FORMAT_MANUFACTURING    0x04
00127 
00128 #define DVD_REPORT_AGID            0x00
00129 #define DVD_CHALLENGE_KEY          0x01
00130 #define DVD_KEY_1                  0x02
00131 #define DVD_KEY_2                  0x03
00132 #define DVD_TITLE_KEY              0x04
00133 #define DVD_REPORT_ASF             0x05
00134 #define DVD_INVALIDATE_AGID        0x3F
00135 
00136 #define BLANK_FULL              0x0
00137 #define BLANK_MINIMAL           0x1
00138 #define BLANK_TRACK             0x2
00139 #define BLANK_UNRESERVE_TRACK   0x3
00140 #define BLANK_TAIL              0x4
00141 #define BLANK_UNCLOSE_SESSION   0x5
00142 #define BLANK_SESSION           0x6
00143 
00144 #define CD_EXPECTED_SECTOR_ANY          0x0
00145 #define CD_EXPECTED_SECTOR_CDDA         0x1
00146 #define CD_EXPECTED_SECTOR_MODE1        0x2
00147 #define CD_EXPECTED_SECTOR_MODE2        0x3
00148 #define CD_EXPECTED_SECTOR_MODE2_FORM1  0x4
00149 #define CD_EXPECTED_SECTOR_MODE2_FORM2  0x5
00150 
00151 #define DISK_STATUS_EMPTY       0x00
00152 #define DISK_STATUS_INCOMPLETE  0x01
00153 #define DISK_STATUS_COMPLETE    0x02
00154 #define DISK_STATUS_OTHERS      0x03
00155 
00156 #define LAST_SESSION_EMPTY              0x00
00157 #define LAST_SESSION_INCOMPLETE         0x01
00158 #define LAST_SESSION_RESERVED_DAMAGED   0x02
00159 #define LAST_SESSION_COMPLETE           0x03
00160 
00161 #define DISK_TYPE_CDDA          0x00
00162 #define DISK_TYPE_CDI           0x10
00163 #define DISK_TYPE_XA            0x20
00164 #define DISK_TYPE_UNDEFINED     0xFF
00165 
00166 #define DISC_BGFORMAT_STATE_NONE        0x0
00167 #define DISC_BGFORMAT_STATE_INCOMPLETE  0x1
00168 #define DISC_BGFORMAT_STATE_RUNNING     0x2
00169 #define DISC_BGFORMAT_STATE_COMPLETE    0x3
00170 
00171 #define DATA_BLOCK_MODE0    0x0
00172 #define DATA_BLOCK_MODE1    0x1
00173 #define DATA_BLOCK_MODE2    0x2
00174 
00175 /* READ_TOC formats */
00176 #define READ_TOC_FORMAT_TOC         0x00
00177 #define READ_TOC_FORMAT_SESSION     0x01
00178 #define READ_TOC_FORMAT_FULL_TOC    0x02
00179 #define READ_TOC_FORMAT_PMA         0x03
00180 #define READ_TOC_FORMAT_ATIP        0x04
00181 
00182 #define CDB6GENERIC_LENGTH                   6
00183 #define CDB10GENERIC_LENGTH                  10
00184 #define CDB12GENERIC_LENGTH                  12
00185 
00186 #define SETBITON                             1
00187 #define SETBITOFF                            0
00188 
00189 /* Mode Sense/Select page constants */
00190 #define MODE_PAGE_VENDOR_SPECIFIC       0x00
00191 #define MODE_PAGE_ERROR_RECOVERY        0x01
00192 #define MODE_PAGE_DISCONNECT            0x02
00193 #define MODE_PAGE_FORMAT_DEVICE         0x03
00194 #define MODE_PAGE_MRW                   0x03
00195 #define MODE_PAGE_RIGID_GEOMETRY        0x04
00196 #define MODE_PAGE_FLEXIBILE             0x05
00197 #define MODE_PAGE_WRITE_PARAMETERS      0x05
00198 #define MODE_PAGE_VERIFY_ERROR          0x07
00199 #define MODE_PAGE_CACHING               0x08
00200 #define MODE_PAGE_PERIPHERAL            0x09
00201 #define MODE_PAGE_CONTROL               0x0A
00202 #define MODE_PAGE_MEDIUM_TYPES          0x0B
00203 #define MODE_PAGE_NOTCH_PARTITION       0x0C
00204 #define MODE_PAGE_CD_AUDIO_CONTROL      0x0E
00205 #define MODE_PAGE_DATA_COMPRESS         0x0F
00206 #define MODE_PAGE_DEVICE_CONFIG         0x10
00207 #define MODE_PAGE_XOR_CONTROL           0x10
00208 #define MODE_PAGE_MEDIUM_PARTITION      0x11
00209 #define MODE_PAGE_ENCLOSURE_SERVICES_MANAGEMENT 0x14
00210 #define MODE_PAGE_EXTENDED              0x15
00211 #define MODE_PAGE_EXTENDED_DEVICE_SPECIFIC 0x16
00212 #define MODE_PAGE_CDVD_FEATURE_SET      0x18
00213 #define MODE_PAGE_PROTOCOL_SPECIFIC_LUN 0x18
00214 #define MODE_PAGE_PROTOCOL_SPECIFIC_PORT 0x19
00215 #define MODE_PAGE_POWER_CONDITION       0x1A
00216 #define MODE_PAGE_LUN_MAPPING           0x1B
00217 #define MODE_PAGE_FAULT_REPORTING       0x1C
00218 #define MODE_PAGE_CDVD_INACTIVITY       0x1D
00219 #define MODE_PAGE_ELEMENT_ADDRESS       0x1D
00220 #define MODE_PAGE_TRANSPORT_GEOMETRY    0x1E
00221 #define MODE_PAGE_DEVICE_CAPABILITIES   0x1F
00222 #define MODE_PAGE_CAPABILITIES          0x2A
00223 
00224 #define MODE_SENSE_RETURN_ALL           0x3f
00225 
00226 #define MODE_SENSE_CURRENT_VALUES       0x00
00227 #define MODE_SENSE_CHANGEABLE_VALUES    0x40
00228 #define MODE_SENSE_DEFAULT_VAULES       0x80
00229 #define MODE_SENSE_SAVED_VALUES         0xc0
00230 
00231 /* SCSI CDB operation codes */
00232 #define SCSIOP_TEST_UNIT_READY          0x00
00233 #define SCSIOP_REZERO_UNIT              0x01
00234 #define SCSIOP_REWIND                   0x01
00235 #define SCSIOP_REQUEST_BLOCK_ADDR       0x02
00236 #define SCSIOP_REQUEST_SENSE            0x03
00237 #define SCSIOP_FORMAT_UNIT              0x04
00238 #define SCSIOP_READ_BLOCK_LIMITS        0x05
00239 #define SCSIOP_REASSIGN_BLOCKS          0x07
00240 #define SCSIOP_INIT_ELEMENT_STATUS      0x07
00241 #define SCSIOP_READ6                    0x08
00242 #define SCSIOP_RECEIVE                  0x08
00243 #define SCSIOP_WRITE6                   0x0A
00244 #define SCSIOP_PRINT                    0x0A
00245 #define SCSIOP_SEND                     0x0A
00246 #define SCSIOP_SEEK6                    0x0B
00247 #define SCSIOP_TRACK_SELECT             0x0B
00248 #define SCSIOP_SLEW_PRINT               0x0B
00249 #define SCSIOP_SET_CAPACITY             0x0B
00250 #define SCSIOP_SEEK_BLOCK               0x0C
00251 #define SCSIOP_PARTITION                0x0D
00252 #define SCSIOP_READ_REVERSE             0x0F
00253 #define SCSIOP_WRITE_FILEMARKS          0x10
00254 #define SCSIOP_FLUSH_BUFFER             0x10
00255 #define SCSIOP_SPACE                    0x11
00256 #define SCSIOP_INQUIRY                  0x12
00257 #define SCSIOP_VERIFY6                  0x13
00258 #define SCSIOP_RECOVER_BUF_DATA         0x14
00259 #define SCSIOP_MODE_SELECT              0x15
00260 #define SCSIOP_RESERVE_UNIT             0x16
00261 #define SCSIOP_RELEASE_UNIT             0x17
00262 #define SCSIOP_COPY                     0x18
00263 #define SCSIOP_ERASE                    0x19
00264 #define SCSIOP_MODE_SENSE               0x1A
00265 #define SCSIOP_START_STOP_UNIT          0x1B
00266 #define SCSIOP_STOP_PRINT               0x1B
00267 #define SCSIOP_LOAD_UNLOAD              0x1B
00268 #define SCSIOP_RECEIVE_DIAGNOSTIC       0x1C
00269 #define SCSIOP_SEND_DIAGNOSTIC          0x1D
00270 #define SCSIOP_MEDIUM_REMOVAL           0x1E
00271 
00272 #define SCSIOP_READ_FORMATTED_CAPACITY  0x23
00273 #define SCSIOP_READ_CAPACITY            0x25
00274 #define SCSIOP_READ                     0x28
00275 #define SCSIOP_WRITE                    0x2A
00276 #define SCSIOP_SEEK                     0x2B
00277 #define SCSIOP_LOCATE                   0x2B
00278 #define SCSIOP_POSITION_TO_ELEMENT      0x2B
00279 #define SCSIOP_WRITE_VERIFY             0x2E
00280 #define SCSIOP_VERIFY                   0x2F
00281 #define SCSIOP_SEARCH_DATA_HIGH         0x30
00282 #define SCSIOP_SEARCH_DATA_EQUAL        0x31
00283 #define SCSIOP_SEARCH_DATA_LOW          0x32
00284 #define SCSIOP_SET_LIMITS               0x33
00285 #define SCSIOP_READ_POSITION            0x34
00286 #define SCSIOP_SYNCHRONIZE_CACHE        0x35
00287 #define SCSIOP_COMPARE                  0x39
00288 #define SCSIOP_COPY_COMPARE             0x3A
00289 #define SCSIOP_WRITE_DATA_BUFF          0x3B
00290 #define SCSIOP_READ_DATA_BUFF           0x3C
00291 #define SCSIOP_WRITE_LONG               0x3F
00292 #define SCSIOP_CHANGE_DEFINITION        0x40
00293 #define SCSIOP_WRITE_SAME               0x41
00294 #define SCSIOP_READ_SUB_CHANNEL         0x42
00295 #define SCSIOP_READ_TOC                 0x43
00296 #define SCSIOP_READ_HEADER              0x44
00297 #define SCSIOP_REPORT_DENSITY_SUPPORT   0x44
00298 #define SCSIOP_PLAY_AUDIO               0x45
00299 #define SCSIOP_GET_CONFIGURATION        0x46
00300 #define SCSIOP_PLAY_AUDIO_MSF           0x47
00301 #define SCSIOP_PLAY_TRACK_INDEX         0x48
00302 #define SCSIOP_PLAY_TRACK_RELATIVE      0x49
00303 #define SCSIOP_GET_EVENT_STATUS         0x4A
00304 #define SCSIOP_PAUSE_RESUME             0x4B
00305 #define SCSIOP_LOG_SELECT               0x4C
00306 #define SCSIOP_LOG_SENSE                0x4D
00307 #define SCSIOP_STOP_PLAY_SCAN           0x4E
00308 #define SCSIOP_XDWRITE                  0x50
00309 #define SCSIOP_XPWRITE                  0x51
00310 #define SCSIOP_READ_DISK_INFORMATION    0x51
00311 #define SCSIOP_READ_DISC_INFORMATION    0x51
00312 #define SCSIOP_READ_TRACK_INFORMATION   0x52
00313 #define SCSIOP_XDWRITE_READ             0x53
00314 #define SCSIOP_RESERVE_TRACK_RZONE      0x53
00315 #define SCSIOP_SEND_OPC_INFORMATION     0x54
00316 #define SCSIOP_MODE_SELECT10            0x55
00317 #define SCSIOP_RESERVE_UNIT10           0x56
00318 #define SCSIOP_RESERVE_ELEMENT          0x56
00319 #define SCSIOP_RELEASE_UNIT10           0x57
00320 #define SCSIOP_RELEASE_ELEMENT          0x57
00321 #define SCSIOP_REPAIR_TRACK             0x58
00322 #define SCSIOP_MODE_SENSE10             0x5A
00323 #define SCSIOP_CLOSE_TRACK_SESSION      0x5B
00324 #define SCSIOP_READ_BUFFER_CAPACITY     0x5C
00325 #define SCSIOP_SEND_CUE_SHEET           0x5D
00326 #define SCSIOP_PERSISTENT_RESERVE_IN    0x5E
00327 #define SCSIOP_PERSISTENT_RESERVE_OUT   0x5F
00328 
00329 #define SCSIOP_REPORT_LUNS              0xA0
00330 #define SCSIOP_BLANK                    0xA1
00331 #define SCSIOP_ATA_PASSTHROUGH12        0xA1
00332 #define SCSIOP_SEND_EVENT               0xA2
00333 #define SCSIOP_SEND_KEY                 0xA3
00334 #define SCSIOP_MAINTENANCE_IN           0xA3
00335 #define SCSIOP_REPORT_KEY               0xA4
00336 #define SCSIOP_MAINTENANCE_OUT          0xA4
00337 #define SCSIOP_MOVE_MEDIUM              0xA5
00338 #define SCSIOP_LOAD_UNLOAD_SLOT         0xA6
00339 #define SCSIOP_EXCHANGE_MEDIUM          0xA6
00340 #define SCSIOP_SET_READ_AHEAD           0xA7
00341 #define SCSIOP_MOVE_MEDIUM_ATTACHED     0xA7
00342 #define SCSIOP_READ12                   0xA8
00343 #define SCSIOP_GET_MESSAGE              0xA8
00344 #define SCSIOP_SERVICE_ACTION_OUT12     0xA9
00345 #define SCSIOP_WRITE12                  0xAA
00346 #define SCSIOP_SEND_MESSAGE             0xAB
00347 #define SCSIOP_SERVICE_ACTION_IN12      0xAB
00348 #define SCSIOP_GET_PERFORMANCE          0xAC
00349 #define SCSIOP_READ_DVD_STRUCTURE       0xAD
00350 #define SCSIOP_WRITE_VERIFY12           0xAE
00351 #define SCSIOP_VERIFY12                 0xAF
00352 #define SCSIOP_SEARCH_DATA_HIGH12       0xB0
00353 #define SCSIOP_SEARCH_DATA_EQUAL12      0xB1
00354 #define SCSIOP_SEARCH_DATA_LOW12        0xB2
00355 #define SCSIOP_SET_LIMITS12             0xB3
00356 #define SCSIOP_READ_ELEMENT_STATUS_ATTACHED 0xB4
00357 #define SCSIOP_REQUEST_VOL_ELEMENT      0xB5
00358 #define SCSIOP_SEND_VOLUME_TAG          0xB6
00359 #define SCSIOP_SET_STREAMING            0xB6
00360 #define SCSIOP_READ_DEFECT_DATA         0xB7
00361 #define SCSIOP_READ_ELEMENT_STATUS      0xB8
00362 #define SCSIOP_READ_CD_MSF              0xB9
00363 #define SCSIOP_SCAN_CD                  0xBA
00364 #define SCSIOP_REDUNDANCY_GROUP_IN      0xBA
00365 #define SCSIOP_SET_CD_SPEED             0xBB
00366 #define SCSIOP_REDUNDANCY_GROUP_OUT     0xBB
00367 #define SCSIOP_PLAY_CD                  0xBC
00368 #define SCSIOP_SPARE_IN                 0xBC
00369 #define SCSIOP_MECHANISM_STATUS         0xBD
00370 #define SCSIOP_SPARE_OUT                0xBD
00371 #define SCSIOP_READ_CD                  0xBE
00372 #define SCSIOP_VOLUME_SET_IN            0xBE
00373 #define SCSIOP_SEND_DVD_STRUCTURE       0xBF
00374 #define SCSIOP_VOLUME_SET_OUT           0xBF
00375 #define SCSIOP_INIT_ELEMENT_RANGE       0xE7
00376 
00377 #define SCSIOP_XDWRITE_EXTENDED16       0x80
00378 #define SCSIOP_WRITE_FILEMARKS16        0x80
00379 #define SCSIOP_REBUILD16                0x81
00380 #define SCSIOP_READ_REVERSE16           0x81
00381 #define SCSIOP_REGENERATE16             0x82
00382 #define SCSIOP_EXTENDED_COPY            0x83
00383 #define SCSIOP_RECEIVE_COPY_RESULTS     0x84
00384 #define SCSIOP_ATA_PASSTHROUGH16        0x85
00385 #define SCSIOP_ACCESS_CONTROL_IN        0x86
00386 #define SCSIOP_ACCESS_CONTROL_OUT       0x87
00387 #define SCSIOP_READ16                   0x88
00388 #define SCSIOP_WRITE16                  0x8A
00389 #define SCSIOP_READ_ATTRIBUTES          0x8C
00390 #define SCSIOP_WRITE_ATTRIBUTES         0x8D
00391 #define SCSIOP_WRITE_VERIFY16           0x8E
00392 #define SCSIOP_VERIFY16                 0x8F
00393 #define SCSIOP_PREFETCH16               0x90
00394 #define SCSIOP_SYNCHRONIZE_CACHE16      0x91
00395 #define SCSIOP_SPACE16                  0x91
00396 #define SCSIOP_LOCK_UNLOCK_CACHE16      0x92
00397 #define SCSIOP_LOCATE16                 0x92
00398 #define SCSIOP_WRITE_SAME16             0x93
00399 #define SCSIOP_ERASE16                  0x93
00400 #define SCSIOP_READ_CAPACITY16          0x9E
00401 #define SCSIOP_SERVICE_ACTION_IN16      0x9E
00402 #define SCSIOP_SERVICE_ACTION_OUT16     0x9F
00403 
00404 #define CDB_RETURN_ON_COMPLETION   0
00405 #define CDB_RETURN_IMMEDIATE       1
00406 
00407 #define CDB_FORCE_MEDIA_ACCESS 0x08
00408 
00409 #define SCSIOP_DENON_EJECT_DISC    0xE6
00410 #define SCSIOP_DENON_STOP_AUDIO    0xE7
00411 #define SCSIOP_DENON_PLAY_AUDIO    0xE8
00412 #define SCSIOP_DENON_READ_TOC      0xE9
00413 #define SCSIOP_DENON_READ_SUBCODE  0xEB
00414 
00415 #define SCSIMESS_ABORT                0x06
00416 #define SCSIMESS_ABORT_WITH_TAG       0x0D
00417 #define SCSIMESS_BUS_DEVICE_RESET     0X0C
00418 #define SCSIMESS_CLEAR_QUEUE          0X0E
00419 #define SCSIMESS_COMMAND_COMPLETE     0X00
00420 #define SCSIMESS_DISCONNECT           0X04
00421 #define SCSIMESS_EXTENDED_MESSAGE     0X01
00422 #define SCSIMESS_IDENTIFY             0X80
00423 #define SCSIMESS_IDENTIFY_WITH_DISCON 0XC0
00424 #define SCSIMESS_IGNORE_WIDE_RESIDUE  0X23
00425 #define SCSIMESS_INITIATE_RECOVERY    0X0F
00426 #define SCSIMESS_INIT_DETECTED_ERROR  0X05
00427 #define SCSIMESS_LINK_CMD_COMP        0X0A
00428 #define SCSIMESS_LINK_CMD_COMP_W_FLAG 0X0B
00429 #define SCSIMESS_MESS_PARITY_ERROR    0X09
00430 #define SCSIMESS_MESSAGE_REJECT       0X07
00431 #define SCSIMESS_NO_OPERATION         0X08
00432 #define SCSIMESS_HEAD_OF_QUEUE_TAG    0X21
00433 #define SCSIMESS_ORDERED_QUEUE_TAG    0X22
00434 #define SCSIMESS_SIMPLE_QUEUE_TAG     0X20
00435 #define SCSIMESS_RELEASE_RECOVERY     0X10
00436 #define SCSIMESS_RESTORE_POINTERS     0X03
00437 #define SCSIMESS_SAVE_DATA_POINTER    0X02
00438 #define SCSIMESS_TERMINATE_IO_PROCESS 0X11
00439 
00440 #define SCSIMESS_MODIFY_DATA_POINTER  0X00
00441 #define SCSIMESS_SYNCHRONOUS_DATA_REQ 0X01
00442 #define SCSIMESS_WIDE_DATA_REQUEST    0X03
00443 
00444 #define SCSIMESS_MODIFY_DATA_LENGTH   5
00445 #define SCSIMESS_SYNCH_DATA_LENGTH    3
00446 #define SCSIMESS_WIDE_DATA_LENGTH     2
00447 
00448 #define CDB_INQUIRY_EVPD           0x01
00449 
00450 #define LUN0_FORMAT_SAVING_DEFECT_LIST 0
00451 #define USE_DEFAULTMSB 0
00452 #define USE_DEFAULTLSB 0
00453 
00454 #define START_UNIT_CODE 0x01
00455 #define STOP_UNIT_CODE 0x00
00456 
00457 /* INQUIRYDATA.DeviceType constants */
00458 #define DIRECT_ACCESS_DEVICE              0x00
00459 #define SEQUENTIAL_ACCESS_DEVICE          0x01
00460 #define PRINTER_DEVICE                    0x02
00461 #define PROCESSOR_DEVICE                  0x03
00462 #define WRITE_ONCE_READ_MULTIPLE_DEVICE   0x04
00463 #define READ_ONLY_DIRECT_ACCESS_DEVICE    0x05
00464 #define SCANNER_DEVICE                    0x06
00465 #define OPTICAL_DEVICE                    0x07
00466 #define MEDIUM_CHANGER                    0x08
00467 #define COMMUNICATION_DEVICE              0x09
00468 #define ARRAY_CONTROLLER_DEVICE           0x0C
00469 #define SCSI_ENCLOSURE_DEVICE             0x0D
00470 #define REDUCED_BLOCK_DEVICE              0x0E
00471 #define OPTICAL_CARD_READER_WRITER_DEVICE 0x0F
00472 #define BRIDGE_CONTROLLER_DEVICE          0x10
00473 #define OBJECT_BASED_STORAGE_DEVICE       0x11
00474 #define LOGICAL_UNIT_NOT_PRESENT_DEVICE   0x7F
00475 
00476 #define DEVICE_QUALIFIER_ACTIVE           0x00
00477 #define DEVICE_QUALIFIER_NOT_ACTIVE       0x01
00478 #define DEVICE_QUALIFIER_NOT_SUPPORTED    0x03
00479 
00480 /* INQUIRYDATA.DeviceTypeQualifier constants */
00481 #define DEVICE_CONNECTED 0x00
00482 
00483 #define SCSISTAT_GOOD                     0x00
00484 #define SCSISTAT_CHECK_CONDITION          0x02
00485 #define SCSISTAT_CONDITION_MET            0x04
00486 #define SCSISTAT_BUSY                     0x08
00487 #define SCSISTAT_INTERMEDIATE             0x10
00488 #define SCSISTAT_INTERMEDIATE_COND_MET    0x14
00489 #define SCSISTAT_RESERVATION_CONFLICT     0x18
00490 #define SCSISTAT_COMMAND_TERMINATED       0x22
00491 #define SCSISTAT_QUEUE_FULL               0x28
00492 
00493 #define VPD_MAX_BUFFER_SIZE                 0xff
00494 
00495 #define VPD_SUPPORTED_PAGES                 0x00
00496 #define VPD_SERIAL_NUMBER                   0x80
00497 #define VPD_DEVICE_IDENTIFIERS              0x83
00498 #define VPD_MEDIA_SERIAL_NUMBER             0x84
00499 #define VPD_SOFTWARE_INTERFACE_IDENTIFIERS  0x84
00500 #define VPD_NETWORK_MANAGEMENT_ADDRESSES    0x85
00501 #define VPD_EXTENDED_INQUIRY_DATA           0x86
00502 #define VPD_MODE_PAGE_POLICY                0x87
00503 #define VPD_SCSI_PORTS                      0x88
00504 
00505 #define RESERVATION_ACTION_READ_KEYS                    0x00
00506 #define RESERVATION_ACTION_READ_RESERVATIONS            0x01
00507 
00508 #define RESERVATION_ACTION_REGISTER                     0x00
00509 #define RESERVATION_ACTION_RESERVE                      0x01
00510 #define RESERVATION_ACTION_RELEASE                      0x02
00511 #define RESERVATION_ACTION_CLEAR                        0x03
00512 #define RESERVATION_ACTION_PREEMPT                      0x04
00513 #define RESERVATION_ACTION_PREEMPT_ABORT                0x05
00514 #define RESERVATION_ACTION_REGISTER_IGNORE_EXISTING     0x06
00515 
00516 #define RESERVATION_SCOPE_LU                            0x00
00517 #define RESERVATION_SCOPE_ELEMENT                       0x02
00518 
00519 #define RESERVATION_TYPE_WRITE_EXCLUSIVE                0x01
00520 #define RESERVATION_TYPE_EXCLUSIVE                      0x03
00521 #define RESERVATION_TYPE_WRITE_EXCLUSIVE_REGISTRANTS    0x05
00522 #define RESERVATION_TYPE_EXCLUSIVE_REGISTRANTS          0x06
00523 
00524 #define SENSE_BUFFER_SIZE              18
00525 
00526 #define MAX_SENSE_BUFFER_SIZE          255
00527 
00528 #define MAX_ADDITIONAL_SENSE_BYTES (MAX_SENSE_BUFFER_SIZE - SENSE_BUFFER_SIZE)
00529 
00530 /* Sense codes */
00531 #define SCSI_SENSE_NO_SENSE               0x00
00532 #define SCSI_SENSE_RECOVERED_ERROR        0x01
00533 #define SCSI_SENSE_NOT_READY              0x02
00534 #define SCSI_SENSE_MEDIUM_ERROR           0x03
00535 #define SCSI_SENSE_HARDWARE_ERROR         0x04
00536 #define SCSI_SENSE_ILLEGAL_REQUEST        0x05
00537 #define SCSI_SENSE_UNIT_ATTENTION         0x06
00538 #define SCSI_SENSE_DATA_PROTECT           0x07
00539 #define SCSI_SENSE_BLANK_CHECK            0x08
00540 #define SCSI_SENSE_UNIQUE                 0x09
00541 #define SCSI_SENSE_COPY_ABORTED           0x0A
00542 #define SCSI_SENSE_ABORTED_COMMAND        0x0B
00543 #define SCSI_SENSE_EQUAL                  0x0C
00544 #define SCSI_SENSE_VOL_OVERFLOW           0x0D
00545 #define SCSI_SENSE_MISCOMPARE             0x0E
00546 #define SCSI_SENSE_RESERVED               0x0F
00547 
00548 /* Additional tape bit */
00549 #define SCSI_ILLEGAL_LENGTH               0x20
00550 #define SCSI_EOM                          0x40
00551 #define SCSI_FILE_MARK                    0x80
00552 
00553 /* Additional Sense codes */
00554 #define SCSI_ADSENSE_NO_SENSE                              0x00
00555 #define SCSI_ADSENSE_NO_SEEK_COMPLETE                      0x02
00556 #define SCSI_ADSENSE_LUN_NOT_READY                         0x04
00557 #define SCSI_ADSENSE_LUN_COMMUNICATION                     0x08
00558 #define SCSI_ADSENSE_WRITE_ERROR                           0x0C
00559 #define SCSI_ADSENSE_TRACK_ERROR                           0x14
00560 #define SCSI_ADSENSE_SEEK_ERROR                            0x15
00561 #define SCSI_ADSENSE_REC_DATA_NOECC                        0x17
00562 #define SCSI_ADSENSE_REC_DATA_ECC                          0x18
00563 #define SCSI_ADSENSE_PARAMETER_LIST_LENGTH                 0x1A
00564 #define SCSI_ADSENSE_ILLEGAL_COMMAND                       0x20
00565 #define SCSI_ADSENSE_ILLEGAL_BLOCK                         0x21
00566 #define SCSI_ADSENSE_INVALID_CDB                           0x24
00567 #define SCSI_ADSENSE_INVALID_LUN                           0x25
00568 #define SCSI_ADSENSE_INVALID_FIELD_PARAMETER_LIST          0x26
00569 #define SCSI_ADSENSE_WRITE_PROTECT                         0x27
00570 #define SCSI_ADSENSE_MEDIUM_CHANGED                        0x28
00571 #define SCSI_ADSENSE_BUS_RESET                             0x29
00572 #define SCSI_ADSENSE_PARAMETERS_CHANGED                    0x2A
00573 #define SCSI_ADSENSE_INSUFFICIENT_TIME_FOR_OPERATION       0x2E
00574 #define SCSI_ADSENSE_INVALID_MEDIA                         0x30
00575 #define SCSI_ADSENSE_NO_MEDIA_IN_DEVICE                    0x3a
00576 #define SCSI_ADSENSE_POSITION_ERROR                        0x3b
00577 #define SCSI_ADSENSE_OPERATING_CONDITIONS_CHANGED          0x3f
00578 #define SCSI_ADSENSE_OPERATOR_REQUEST                      0x5a
00579 #define SCSI_ADSENSE_FAILURE_PREDICTION_THRESHOLD_EXCEEDED 0x5d
00580 #define SCSI_ADSENSE_ILLEGAL_MODE_FOR_THIS_TRACK           0x64
00581 #define SCSI_ADSENSE_COPY_PROTECTION_FAILURE               0x6f
00582 #define SCSI_ADSENSE_POWER_CALIBRATION_ERROR               0x73
00583 #define SCSI_ADSENSE_VENDOR_UNIQUE                         0x80
00584 #define SCSI_ADSENSE_MUSIC_AREA                            0xA0
00585 #define SCSI_ADSENSE_DATA_AREA                             0xA1
00586 #define SCSI_ADSENSE_VOLUME_OVERFLOW                       0xA7
00587 
00588 #define SCSI_ADWRITE_PROTECT                        SCSI_ADSENSE_WRITE_PROTECT
00589 #define SCSI_FAILURE_PREDICTION_THRESHOLD_EXCEEDED  SCSI_ADSENSE_FAILURE_PREDICTION_THRESHOLD_EXCEEDED
00590 
00591 #define SCSI_SENSEQ_CAUSE_NOT_REPORTABLE                   0x00
00592 #define SCSI_SENSEQ_BECOMING_READY                         0x01
00593 #define SCSI_SENSEQ_INIT_COMMAND_REQUIRED                  0x02
00594 #define SCSI_SENSEQ_MANUAL_INTERVENTION_REQUIRED           0x03
00595 #define SCSI_SENSEQ_FORMAT_IN_PROGRESS                     0x04
00596 #define SCSI_SENSEQ_REBUILD_IN_PROGRESS                    0x05
00597 #define SCSI_SENSEQ_RECALCULATION_IN_PROGRESS              0x06
00598 #define SCSI_SENSEQ_OPERATION_IN_PROGRESS                  0x07
00599 #define SCSI_SENSEQ_LONG_WRITE_IN_PROGRESS                 0x08
00600 #define SCSI_SENSEQ_LOSS_OF_STREAMING                      0x09
00601 #define SCSI_SENSEQ_PADDING_BLOCKS_ADDED                   0x0A
00602 
00603 #define SCSI_SENSEQ_COMM_FAILURE                 0x00
00604 #define SCSI_SENSEQ_COMM_TIMEOUT                 0x01
00605 #define SCSI_SENSEQ_COMM_PARITY_ERROR            0x02
00606 #define SCSI_SESNEQ_COMM_CRC_ERROR               0x03
00607 #define SCSI_SENSEQ_UNREACHABLE_TARGET           0x04
00608 
00609 #define SCSI_SENSEQ_FILEMARK_DETECTED 0x01
00610 #define SCSI_SENSEQ_END_OF_MEDIA_DETECTED 0x02
00611 #define SCSI_SENSEQ_SETMARK_DETECTED 0x03
00612 #define SCSI_SENSEQ_BEGINNING_OF_MEDIA_DETECTED 0x04
00613 
00614 #define SCSI_SENSEQ_ILLEGAL_ELEMENT_ADDR 0x01
00615 
00616 #define SCSI_SENSEQ_DESTINATION_FULL 0x0d
00617 #define SCSI_SENSEQ_SOURCE_EMPTY     0x0e
00618 
00619 #define SCSI_SENSEQ_INCOMPATIBLE_MEDIA_INSTALLED 0x00
00620 #define SCSI_SENSEQ_UNKNOWN_FORMAT 0x01
00621 #define SCSI_SENSEQ_INCOMPATIBLE_FORMAT 0x02
00622 #define SCSI_SENSEQ_CLEANING_CARTRIDGE_INSTALLED 0x03
00623 
00624 #define SCSI_SENSEQ_TARGET_OPERATING_CONDITIONS_CHANGED 0x00
00625 #define SCSI_SENSEQ_MICROCODE_CHANGED                   0x01
00626 #define SCSI_SENSEQ_OPERATING_DEFINITION_CHANGED        0x02
00627 #define SCSI_SENSEQ_INQUIRY_DATA_CHANGED                0x03
00628 #define SCSI_SENSEQ_COMPONENT_DEVICE_ATTACHED           0x04
00629 #define SCSI_SENSEQ_DEVICE_IDENTIFIER_CHANGED           0x05
00630 #define SCSI_SENSEQ_REDUNDANCY_GROUP_MODIFIED           0x06
00631 #define SCSI_SENSEQ_REDUNDANCY_GROUP_DELETED            0x07
00632 #define SCSI_SENSEQ_SPARE_MODIFIED                      0x08
00633 #define SCSI_SENSEQ_SPARE_DELETED                       0x09
00634 #define SCSI_SENSEQ_VOLUME_SET_MODIFIED                 0x0A
00635 #define SCSI_SENSEQ_VOLUME_SET_DELETED                  0x0B
00636 #define SCSI_SENSEQ_VOLUME_SET_DEASSIGNED               0x0C
00637 #define SCSI_SENSEQ_VOLUME_SET_REASSIGNED               0x0D
00638 #define SCSI_SENSEQ_REPORTED_LUNS_DATA_CHANGED          0x0E
00639 #define SCSI_SENSEQ_ECHO_BUFFER_OVERWRITTEN             0x0F
00640 #define SCSI_SENSEQ_MEDIUM_LOADABLE                     0x10
00641 #define SCSI_SENSEQ_MEDIUM_AUXILIARY_MEMORY_ACCESSIBLE  0x11
00642 
00643 #define SCSI_SENSEQ_STATE_CHANGE_INPUT     0x00
00644 #define SCSI_SENSEQ_MEDIUM_REMOVAL         0x01
00645 #define SCSI_SENSEQ_WRITE_PROTECT_ENABLE   0x02
00646 #define SCSI_SENSEQ_WRITE_PROTECT_DISABLE  0x03
00647 
00648 #define SCSI_SENSEQ_AUTHENTICATION_FAILURE                          0x00
00649 #define SCSI_SENSEQ_KEY_NOT_PRESENT                                 0x01
00650 #define SCSI_SENSEQ_KEY_NOT_ESTABLISHED                             0x02
00651 #define SCSI_SENSEQ_READ_OF_SCRAMBLED_SECTOR_WITHOUT_AUTHENTICATION 0x03
00652 #define SCSI_SENSEQ_MEDIA_CODE_MISMATCHED_TO_LOGICAL_UNIT           0x04
00653 #define SCSI_SENSEQ_LOGICAL_UNIT_RESET_COUNT_ERROR                  0x05
00654 
00655 #define SCSI_SENSEQ_POWER_CALIBRATION_AREA_ALMOST_FULL 0x01
00656 #define SCSI_SENSEQ_POWER_CALIBRATION_AREA_FULL        0x02
00657 #define SCSI_SENSEQ_POWER_CALIBRATION_AREA_ERROR       0x03
00658 #define SCSI_SENSEQ_PMA_RMA_UPDATE_FAILURE             0x04
00659 #define SCSI_SENSEQ_PMA_RMA_IS_FULL                    0x05
00660 #define SCSI_SENSEQ_PMA_RMA_ALMOST_FULL                0x06
00661 
00662 #define FILE_DEVICE_SCSI 0x0000001b
00663 
00664 #define IOCTL_SCSI_EXECUTE_IN ((FILE_DEVICE_SCSI << 16) + 0x0011)
00665 #define IOCTL_SCSI_EXECUTE_OUT ((FILE_DEVICE_SCSI << 16) + 0x0012)
00666 #define IOCTL_SCSI_EXECUTE_NONE ((FILE_DEVICE_SCSI << 16) + 0x0013)
00667 
00668 /* SMART support in ATAPI */
00669 #define IOCTL_SCSI_MINIPORT_SMART_VERSION               ((FILE_DEVICE_SCSI << 16) + 0x0500)
00670 #define IOCTL_SCSI_MINIPORT_IDENTIFY                    ((FILE_DEVICE_SCSI << 16) + 0x0501)
00671 #define IOCTL_SCSI_MINIPORT_READ_SMART_ATTRIBS          ((FILE_DEVICE_SCSI << 16) + 0x0502)
00672 #define IOCTL_SCSI_MINIPORT_READ_SMART_THRESHOLDS       ((FILE_DEVICE_SCSI << 16) + 0x0503)
00673 #define IOCTL_SCSI_MINIPORT_ENABLE_SMART                ((FILE_DEVICE_SCSI << 16) + 0x0504)
00674 #define IOCTL_SCSI_MINIPORT_DISABLE_SMART               ((FILE_DEVICE_SCSI << 16) + 0x0505)
00675 #define IOCTL_SCSI_MINIPORT_RETURN_STATUS               ((FILE_DEVICE_SCSI << 16) + 0x0506)
00676 #define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTOSAVE     ((FILE_DEVICE_SCSI << 16) + 0x0507)
00677 #define IOCTL_SCSI_MINIPORT_SAVE_ATTRIBUTE_VALUES       ((FILE_DEVICE_SCSI << 16) + 0x0508)
00678 #define IOCTL_SCSI_MINIPORT_EXECUTE_OFFLINE_DIAGS       ((FILE_DEVICE_SCSI << 16) + 0x0509)
00679 #define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTO_OFFLINE ((FILE_DEVICE_SCSI << 16) + 0x050a)
00680 #define IOCTL_SCSI_MINIPORT_READ_SMART_LOG              ((FILE_DEVICE_SCSI << 16) + 0x050b)
00681 #define IOCTL_SCSI_MINIPORT_WRITE_SMART_LOG             ((FILE_DEVICE_SCSI << 16) + 0x050c)
00682 
00683 /* CLUSTER support */
00684 #define IOCTL_SCSI_MINIPORT_NOT_QUORUM_CAPABLE ((FILE_DEVICE_SCSI << 16) + 0x0520)
00685 #define IOCTL_SCSI_MINIPORT_NOT_CLUSTER_CAPABLE ((FILE_DEVICE_SCSI << 16) + 0x0521)
00686 
00687 #define MODE_FD_SINGLE_SIDE               0x01
00688 #define MODE_FD_DOUBLE_SIDE               0x02
00689 #define MODE_FD_MAXIMUM_TYPE              0x1E
00690 #define MODE_DSP_FUA_SUPPORTED            0x10
00691 #define MODE_DSP_WRITE_PROTECT            0x80
00692 
00693 #define CDDA_CHANNEL_MUTED      0x0
00694 #define CDDA_CHANNEL_ZERO       0x1
00695 #define CDDA_CHANNEL_ONE        0x2
00696 #define CDDA_CHANNEL_TWO        0x4
00697 #define CDDA_CHANNEL_THREE      0x8
00698 
00699 #define CDVD_LMT_CADDY              0
00700 #define CDVD_LMT_TRAY               1
00701 #define CDVD_LMT_POPUP              2
00702 #define CDVD_LMT_RESERVED1          3
00703 #define CDVD_LMT_CHANGER_INDIVIDUAL 4
00704 #define CDVD_LMT_CHANGER_CARTRIDGE  5
00705 #define CDVD_LMT_RESERVED2          6
00706 #define CDVD_LMT_RESERVED3          7
00707 
00708 #define LOADING_MECHANISM_CADDY                 0x00
00709 #define LOADING_MECHANISM_TRAY                  0x01
00710 #define LOADING_MECHANISM_POPUP                 0x02
00711 #define LOADING_MECHANISM_INDIVIDUAL_CHANGER    0x04
00712 #define LOADING_MECHANISM_CARTRIDGE_CHANGER     0x05
00713 
00714 #define MODE_BLOCK_DESC_LENGTH        8
00715 #define MODE_HEADER_LENGTH            4
00716 #define MODE_HEADER_LENGTH10          8
00717 
00718 /* CDROM audio control */
00719 #define CDB_AUDIO_PAUSE                   0x00
00720 #define CDB_AUDIO_RESUME                  0x01
00721 #define CDB_DEVICE_START                  0x11
00722 #define CDB_DEVICE_STOP                   0x10
00723 #define CDB_EJECT_MEDIA                   0x10
00724 #define CDB_LOAD_MEDIA                    0x01
00725 #define CDB_SUBCHANNEL_HEADER             0x00
00726 #define CDB_SUBCHANNEL_BLOCK              0x01
00727 
00728 #define CDROM_AUDIO_CONTROL_PAGE          0x0E
00729 #define MODE_SELECT_IMMEDIATE             0x04
00730 #define MODE_SELECT_PFBIT                 0x10
00731 
00732 #define CDB_USE_MSF                       0x01
00733 
00734 /* Multisession CDROMs */
00735 #define GET_LAST_SESSION 0x01
00736 #define GET_SESSION_DATA 0x02
00737 
00738 typedef union _CDB {
00739   struct _CDB6GENERIC {
00740     UCHAR OperationCode;
00741     UCHAR Immediate:1;
00742     UCHAR CommandUniqueBits:4;
00743     UCHAR LogicalUnitNumber:3;
00744     UCHAR CommandUniqueBytes[3];
00745     UCHAR Link:1;
00746     UCHAR Flag:1;
00747     UCHAR Reserved:4;
00748     UCHAR VendorUnique:2;
00749   } CDB6GENERIC, *PCDB6GENERIC;
00750   struct _CDB6READWRITE {
00751     UCHAR OperationCode;
00752     UCHAR LogicalBlockMsb1:5;
00753     UCHAR LogicalUnitNumber:3;
00754     UCHAR LogicalBlockMsb0;
00755     UCHAR LogicalBlockLsb;
00756     UCHAR TransferBlocks;
00757     UCHAR Control;
00758   } CDB6READWRITE, *PCDB6READWRITE;
00759   struct _CDB6INQUIRY {
00760     UCHAR OperationCode;
00761     UCHAR Reserved1:5;
00762     UCHAR LogicalUnitNumber:3;
00763     UCHAR PageCode;
00764     UCHAR IReserved;
00765     UCHAR AllocationLength;
00766     UCHAR Control;
00767   } CDB6INQUIRY, *PCDB6INQUIRY;
00768   struct _CDB6INQUIRY3 {
00769     UCHAR OperationCode;
00770     UCHAR EnableVitalProductData:1;
00771     UCHAR CommandSupportData:1;
00772     UCHAR Reserved1:6;
00773     UCHAR PageCode;
00774     UCHAR Reserved2;
00775     UCHAR AllocationLength;
00776     UCHAR Control;
00777   } CDB6INQUIRY3, *PCDB6INQUIRY3;
00778   struct _CDB6VERIFY {
00779     UCHAR OperationCode;
00780     UCHAR Fixed:1;
00781     UCHAR ByteCompare:1;
00782     UCHAR Immediate:1;
00783     UCHAR Reserved:2;
00784     UCHAR LogicalUnitNumber:3;
00785     UCHAR VerificationLength[3];
00786     UCHAR Control;
00787   } CDB6VERIFY, *PCDB6VERIFY;
00788   struct _CDB6FORMAT {
00789     UCHAR OperationCode;
00790     UCHAR FormatControl:5;
00791     UCHAR LogicalUnitNumber:3;
00792     UCHAR FReserved1;
00793     UCHAR InterleaveMsb;
00794     UCHAR InterleaveLsb;
00795     UCHAR FReserved2;
00796   } CDB6FORMAT, *PCDB6FORMAT;
00797   struct _CDB10 {
00798     UCHAR OperationCode;
00799     UCHAR RelativeAddress:1;
00800     UCHAR Reserved1:2;
00801     UCHAR ForceUnitAccess:1;
00802     UCHAR DisablePageOut:1;
00803     UCHAR LogicalUnitNumber:3;
00804     UCHAR LogicalBlockByte0;
00805     UCHAR LogicalBlockByte1;
00806     UCHAR LogicalBlockByte2;
00807     UCHAR LogicalBlockByte3;
00808     UCHAR Reserved2;
00809     UCHAR TransferBlocksMsb;
00810     UCHAR TransferBlocksLsb;
00811     UCHAR Control;
00812   } CDB10, *PCDB10;
00813   struct _CDB12 {
00814     UCHAR OperationCode;
00815     UCHAR RelativeAddress:1;
00816     UCHAR Reserved1:2;
00817     UCHAR ForceUnitAccess:1;
00818     UCHAR DisablePageOut:1;
00819     UCHAR LogicalUnitNumber:3;
00820     UCHAR LogicalBlock[4];
00821     UCHAR TransferLength[4];
00822     UCHAR Reserved2;
00823     UCHAR Control;
00824   } CDB12, *PCDB12;
00825   struct _CDB16 {
00826      UCHAR OperationCode;
00827      UCHAR Reserved1:3;
00828      UCHAR ForceUnitAccess:1;
00829      UCHAR DisablePageOut:1;
00830      UCHAR Protection:3;
00831      UCHAR LogicalBlock[8];
00832      UCHAR TransferLength[4];
00833      UCHAR Reserved2;
00834      UCHAR Control;
00835   } CDB16, *PCDB16;
00836   struct _PAUSE_RESUME {
00837     UCHAR OperationCode;
00838     UCHAR Reserved1:5;
00839     UCHAR LogicalUnitNumber:3;
00840     UCHAR Reserved2[6];
00841     UCHAR Action;
00842     UCHAR Control;
00843   } PAUSE_RESUME, *PPAUSE_RESUME;
00844   struct _READ_TOC {
00845     UCHAR OperationCode;
00846     UCHAR Reserved0:1;
00847     UCHAR Msf:1;
00848     UCHAR Reserved1:3;
00849     UCHAR LogicalUnitNumber:3;
00850     UCHAR Format2:4;
00851     UCHAR Reserved2:4;
00852     UCHAR Reserved3[3];
00853     UCHAR StartingTrack;
00854     UCHAR AllocationLength[2];
00855     UCHAR Control:6;
00856     UCHAR Format:2;
00857   } READ_TOC, *PREAD_TOC;
00858   struct _READ_DISK_INFORMATION {
00859     UCHAR OperationCode;
00860     UCHAR Reserved1:5;
00861     UCHAR Lun:3;
00862     UCHAR Reserved2[5];
00863     UCHAR AllocationLength[2];
00864     UCHAR Control;
00865   } READ_DISK_INFORMATION, *PREAD_DISK_INFORMATION;
00866   struct _READ_TRACK_INFORMATION {
00867     UCHAR OperationCode;
00868     UCHAR Track:1;
00869     UCHAR Reserved1:3;
00870     UCHAR Reserved2:1;
00871     UCHAR Lun:3;
00872     UCHAR BlockAddress[4];
00873     UCHAR Reserved3;
00874     UCHAR AllocationLength[2];
00875     UCHAR Control;
00876   } READ_TRACK_INFORMATION, *PREAD_TRACK_INFORMATION;
00877   struct _RESERVE_TRACK_RZONE {
00878     UCHAR OperationCode;
00879     UCHAR Reserved1[4];
00880     UCHAR ReservationSize[4];
00881     UCHAR Control;
00882   } RESERVE_TRACK_RZONE, *PRESERVE_TRACK_RZONE;
00883   struct _SEND_OPC_INFORMATION {
00884     UCHAR OperationCode;
00885     UCHAR DoOpc:1;
00886     UCHAR Reserved1:7;
00887     UCHAR Exclude0:1;
00888     UCHAR Exclude1:1;
00889     UCHAR Reserved2:6;
00890     UCHAR Reserved3[4];
00891     UCHAR ParameterListLength[2];
00892     UCHAR Reserved4;
00893   } SEND_OPC_INFORMATION, *PSEND_OPC_INFORMATION;
00894   struct _REPAIR_TRACK {
00895     UCHAR OperationCode;
00896     UCHAR Immediate:1;
00897     UCHAR Reserved1:7;
00898     UCHAR Reserved2[2];
00899     UCHAR TrackNumber[2];
00900     UCHAR Reserved3[3];
00901     UCHAR Control;
00902   } REPAIR_TRACK, *PREPAIR_TRACK;
00903   struct _CLOSE_TRACK {
00904     UCHAR OperationCode;
00905     UCHAR Immediate:1;
00906     UCHAR Reserved1:7;
00907     UCHAR Track:1;
00908     UCHAR Session:1;
00909     UCHAR Reserved2:6;
00910     UCHAR Reserved3;
00911     UCHAR TrackNumber[2];
00912     UCHAR Reserved4[3];
00913     UCHAR Control;
00914   } CLOSE_TRACK, *PCLOSE_TRACK;
00915   struct _READ_BUFFER_CAPACITY {
00916     UCHAR OperationCode;
00917     UCHAR BlockInfo:1;
00918     UCHAR Reserved1:7;
00919     UCHAR Reserved2[5];
00920     UCHAR AllocationLength[2];
00921     UCHAR Control;
00922   } READ_BUFFER_CAPACITY, *PREAD_BUFFER_CAPACITY;
00923   struct _SEND_CUE_SHEET {
00924     UCHAR OperationCode;
00925     UCHAR Reserved[5];
00926     UCHAR CueSheetSize[3];
00927     UCHAR Control;
00928   } SEND_CUE_SHEET, *PSEND_CUE_SHEET;
00929   struct _READ_HEADER {
00930     UCHAR OperationCode;
00931     UCHAR Reserved1:1;
00932     UCHAR Msf:1;
00933     UCHAR Reserved2:3;
00934     UCHAR Lun:3;
00935     UCHAR LogicalBlockAddress[4];
00936     UCHAR Reserved3;
00937     UCHAR AllocationLength[2];
00938     UCHAR Control;
00939   } READ_HEADER, *PREAD_HEADER;
00940   struct _PLAY_AUDIO {
00941     UCHAR OperationCode;
00942     UCHAR Reserved1:5;
00943     UCHAR LogicalUnitNumber:3;
00944     UCHAR StartingBlockAddress[4];
00945     UCHAR Reserved2;
00946     UCHAR PlayLength[2];
00947     UCHAR Control;
00948   } PLAY_AUDIO, *PPLAY_AUDIO;
00949   struct _PLAY_AUDIO_MSF {
00950     UCHAR OperationCode;
00951     UCHAR Reserved1:5;
00952     UCHAR LogicalUnitNumber:3;
00953     UCHAR Reserved2;
00954     UCHAR StartingM;
00955     UCHAR StartingS;
00956     UCHAR StartingF;
00957     UCHAR EndingM;
00958     UCHAR EndingS;
00959     UCHAR EndingF;
00960     UCHAR Control;
00961   } PLAY_AUDIO_MSF, *PPLAY_AUDIO_MSF;
00962   struct _BLANK_MEDIA {
00963     UCHAR OperationCode;
00964     UCHAR BlankType:3;
00965     UCHAR Reserved1:1;
00966     UCHAR Immediate:1;
00967     UCHAR Reserved2:3;
00968     UCHAR AddressOrTrack[4];
00969     UCHAR Reserved3[5];
00970     UCHAR Control;
00971   } BLANK_MEDIA, *PBLANK_MEDIA;
00972   struct _PLAY_CD {
00973     UCHAR OperationCode;
00974     UCHAR Reserved1:1;
00975     UCHAR CMSF:1;
00976     UCHAR ExpectedSectorType:3;
00977     UCHAR Lun:3;
00978     _ANONYMOUS_UNION union {
00979       struct _LBA {
00980         UCHAR StartingBlockAddress[4];
00981         UCHAR PlayLength[4];
00982       } LBA;
00983       struct _MSF {
00984         UCHAR Reserved1;
00985         UCHAR StartingM;
00986         UCHAR StartingS;
00987         UCHAR StartingF;
00988         UCHAR EndingM;
00989         UCHAR EndingS;
00990         UCHAR EndingF;
00991         UCHAR Reserved2;
00992       } MSF;
00993     } DUMMYUNIONNAME;
00994     UCHAR Audio:1;
00995     UCHAR Composite:1;
00996     UCHAR Port1:1;
00997     UCHAR Port2:1;
00998     UCHAR Reserved2:3;
00999     UCHAR Speed:1;
01000     UCHAR Control;
01001   } PLAY_CD, *PPLAY_CD;
01002   struct _SCAN_CD {
01003     UCHAR OperationCode;
01004     UCHAR RelativeAddress:1;
01005     UCHAR Reserved1:3;
01006     UCHAR Direct:1;
01007     UCHAR Lun:3;
01008     UCHAR StartingAddress[4];
01009     UCHAR Reserved2[3];
01010     UCHAR Reserved3:6;
01011     UCHAR Type:2;
01012     UCHAR Reserved4;
01013     UCHAR Control;
01014   } SCAN_CD, *PSCAN_CD;
01015   struct _STOP_PLAY_SCAN {
01016     UCHAR OperationCode;
01017     UCHAR Reserved1:5;
01018     UCHAR Lun:3;
01019     UCHAR Reserved2[7];
01020     UCHAR Control;
01021   } STOP_PLAY_SCAN, *PSTOP_PLAY_SCAN;
01022   struct _SUBCHANNEL {
01023     UCHAR OperationCode;
01024     UCHAR Reserved0:1;
01025     UCHAR Msf:1;
01026     UCHAR Reserved1:3;
01027     UCHAR LogicalUnitNumber:3;
01028     UCHAR Reserved2:6;
01029     UCHAR SubQ:1;
01030     UCHAR Reserved3:1;
01031     UCHAR Format;
01032     UCHAR Reserved4[2];
01033     UCHAR TrackNumber;
01034     UCHAR AllocationLength[2];
01035     UCHAR Control;
01036   } SUBCHANNEL, *PSUBCHANNEL;
01037   struct _READ_CD {
01038     UCHAR OperationCode;
01039     UCHAR RelativeAddress:1;
01040     UCHAR Reserved0:1;
01041     UCHAR ExpectedSectorType:3;
01042     UCHAR Lun:3;
01043     UCHAR StartingLBA[4];
01044     UCHAR TransferBlocks[3];
01045     UCHAR Reserved2:1;
01046     UCHAR ErrorFlags:2;
01047     UCHAR IncludeEDC:1;
01048     UCHAR IncludeUserData:1;
01049     UCHAR HeaderCode:2;
01050     UCHAR IncludeSyncData:1;
01051     UCHAR SubChannelSelection:3;
01052     UCHAR Reserved3:5;
01053     UCHAR Control;
01054   } READ_CD, *PREAD_CD;
01055   struct _READ_CD_MSF {
01056     UCHAR OperationCode;
01057     UCHAR RelativeAddress:1;
01058     UCHAR Reserved1:1;
01059     UCHAR ExpectedSectorType:3;
01060     UCHAR Lun:3;
01061     UCHAR Reserved2;
01062     UCHAR StartingM;
01063     UCHAR StartingS;
01064     UCHAR StartingF;
01065     UCHAR EndingM;
01066     UCHAR EndingS;
01067     UCHAR EndingF;
01068     UCHAR Reserved3;
01069     UCHAR Reserved4:1;
01070     UCHAR ErrorFlags:2;
01071     UCHAR IncludeEDC:1;
01072     UCHAR IncludeUserData:1;
01073     UCHAR HeaderCode:2;
01074     UCHAR IncludeSyncData:1;
01075     UCHAR SubChannelSelection:3;
01076     UCHAR Reserved5:5;
01077     UCHAR Control;
01078   } READ_CD_MSF, *PREAD_CD_MSF;
01079   struct _PLXTR_READ_CDDA {
01080     UCHAR OperationCode;
01081     UCHAR Reserved0:5;
01082     UCHAR LogicalUnitNumber:3;
01083     UCHAR LogicalBlockByte0;
01084     UCHAR LogicalBlockByte1;
01085     UCHAR LogicalBlockByte2;
01086     UCHAR LogicalBlockByte3;
01087     UCHAR TransferBlockByte0;
01088     UCHAR TransferBlockByte1;
01089     UCHAR TransferBlockByte2;
01090     UCHAR TransferBlockByte3;
01091     UCHAR SubCode;
01092     UCHAR Control;
01093   } PLXTR_READ_CDDA, *PPLXTR_READ_CDDA;
01094   struct _NEC_READ_CDDA {
01095     UCHAR OperationCode;
01096     UCHAR Reserved0;
01097     UCHAR LogicalBlockByte0;
01098     UCHAR LogicalBlockByte1;
01099     UCHAR LogicalBlockByte2;
01100     UCHAR LogicalBlockByte3;
01101     UCHAR Reserved1;
01102     UCHAR TransferBlockByte0;
01103     UCHAR TransferBlockByte1;
01104     UCHAR Control;
01105   } NEC_READ_CDDA, *PNEC_READ_CDDA;
01106   struct _MODE_SENSE {
01107     UCHAR OperationCode;
01108     UCHAR Reserved1:3;
01109     UCHAR Dbd:1;
01110     UCHAR Reserved2:1;
01111     UCHAR LogicalUnitNumber:3;
01112     UCHAR PageCode:6;
01113     UCHAR Pc:2;
01114     UCHAR Reserved3;
01115     UCHAR AllocationLength;
01116     UCHAR Control;
01117   } MODE_SENSE, *PMODE_SENSE;
01118   struct _MODE_SENSE10 {
01119     UCHAR OperationCode;
01120     UCHAR Reserved1:3;
01121     UCHAR Dbd:1;
01122     UCHAR Reserved2:1;
01123     UCHAR LogicalUnitNumber:3;
01124     UCHAR PageCode:6;
01125     UCHAR Pc:2;
01126     UCHAR Reserved3[4];
01127     UCHAR AllocationLength[2];
01128     UCHAR Control;
01129   } MODE_SENSE10, *PMODE_SENSE10;
01130   struct _MODE_SELECT {
01131     UCHAR OperationCode;
01132     UCHAR SPBit:1;
01133     UCHAR Reserved1:3;
01134     UCHAR PFBit:1;
01135     UCHAR LogicalUnitNumber:3;
01136     UCHAR Reserved2[2];
01137     UCHAR ParameterListLength;
01138     UCHAR Control;
01139   } MODE_SELECT, *PMODE_SELECT;
01140   struct _MODE_SELECT10 {
01141     UCHAR OperationCode;
01142     UCHAR SPBit:1;
01143     UCHAR Reserved1:3;
01144     UCHAR PFBit:1;
01145     UCHAR LogicalUnitNumber:3;
01146     UCHAR Reserved2[5];
01147     UCHAR ParameterListLength[2];
01148     UCHAR Control;
01149   } MODE_SELECT10, *PMODE_SELECT10;
01150   struct _LOCATE {
01151     UCHAR OperationCode;
01152     UCHAR Immediate:1;
01153     UCHAR CPBit:1;
01154     UCHAR BTBit:1;
01155     UCHAR Reserved1:2;
01156     UCHAR LogicalUnitNumber:3;
01157     UCHAR Reserved3;
01158     UCHAR LogicalBlockAddress[4];
01159     UCHAR Reserved4;
01160     UCHAR Partition;
01161     UCHAR Control;
01162   } LOCATE, *PLOCATE;
01163   struct _LOGSENSE {
01164     UCHAR OperationCode;
01165     UCHAR SPBit:1;
01166     UCHAR PPCBit:1;
01167     UCHAR Reserved1:3;
01168     UCHAR LogicalUnitNumber:3;
01169     UCHAR PageCode:6;
01170     UCHAR PCBit:2;
01171     UCHAR Reserved2;
01172     UCHAR Reserved3;
01173     UCHAR ParameterPointer[2];
01174     UCHAR AllocationLength[2];
01175     UCHAR Control;
01176   } LOGSENSE, *PLOGSENSE;
01177   struct _LOGSELECT {
01178     UCHAR OperationCode;
01179     UCHAR SPBit:1;
01180     UCHAR PCRBit:1;
01181     UCHAR Reserved1:3;
01182     UCHAR LogicalUnitNumber:3;
01183     UCHAR Reserved:6;
01184     UCHAR PCBit:2;
01185     UCHAR Reserved2[4];
01186     UCHAR ParameterListLength[2];
01187     UCHAR Control;
01188   } LOGSELECT, *PLOGSELECT;
01189   struct _PRINT {
01190     UCHAR OperationCode;
01191     UCHAR Reserved:5;
01192     UCHAR LogicalUnitNumber:3;
01193     UCHAR TransferLength[3];
01194     UCHAR Control;
01195   } PRINT, *PPRINT;
01196   struct _SEEK {
01197     UCHAR OperationCode;
01198     UCHAR Reserved1:5;
01199     UCHAR LogicalUnitNumber:3;
01200     UCHAR LogicalBlockAddress[4];
01201     UCHAR Reserved2[3];
01202     UCHAR Control;
01203   } SEEK, *PSEEK;
01204   struct _ERASE {
01205     UCHAR OperationCode;
01206     UCHAR Long:1;
01207     UCHAR Immediate:1;
01208     UCHAR Reserved1:3;
01209     UCHAR LogicalUnitNumber:3;
01210     UCHAR Reserved2[3];
01211     UCHAR Control;
01212   } ERASE, *PERASE;
01213   struct _START_STOP {
01214     UCHAR OperationCode;
01215     UCHAR Immediate:1;
01216     UCHAR Reserved1:4;
01217     UCHAR LogicalUnitNumber:3;
01218     UCHAR Reserved2[2];
01219     UCHAR Start:1;
01220     UCHAR LoadEject:1;
01221     UCHAR Reserved3:6;
01222     UCHAR Control;
01223   } START_STOP, *PSTART_STOP;
01224   struct _MEDIA_REMOVAL {
01225     UCHAR OperationCode;
01226     UCHAR Reserved1:5;
01227     UCHAR LogicalUnitNumber:3;
01228     UCHAR Reserved2[2];
01229     UCHAR Prevent:1;
01230     UCHAR Persistant:1;
01231     UCHAR Reserved3:6;
01232     UCHAR Control;
01233   } MEDIA_REMOVAL, *PMEDIA_REMOVAL;
01234   struct _SEEK_BLOCK {
01235     UCHAR OperationCode;
01236     UCHAR Immediate:1;
01237     UCHAR Reserved1:7;
01238     UCHAR BlockAddress[3];
01239     UCHAR Link:1;
01240     UCHAR Flag:1;
01241     UCHAR Reserved2:4;
01242     UCHAR VendorUnique:2;
01243   } SEEK_BLOCK, *PSEEK_BLOCK;
01244   struct _REQUEST_BLOCK_ADDRESS {
01245     UCHAR OperationCode;
01246     UCHAR Reserved1[3];
01247     UCHAR AllocationLength;
01248     UCHAR Link:1;
01249     UCHAR Flag:1;
01250     UCHAR Reserved2:4;
01251     UCHAR VendorUnique:2;
01252   } REQUEST_BLOCK_ADDRESS, *PREQUEST_BLOCK_ADDRESS;
01253   struct _PARTITION {
01254     UCHAR OperationCode;
01255     UCHAR Immediate:1;
01256     UCHAR Sel:1;
01257     UCHAR PartitionSelect:6;
01258     UCHAR Reserved1[3];
01259     UCHAR Control;
01260   } PARTITION, *PPARTITION;
01261   struct _WRITE_TAPE_MARKS {
01262     UCHAR OperationCode;
01263     UCHAR Immediate:1;
01264     UCHAR WriteSetMarks:1;
01265     UCHAR Reserved:3;
01266     UCHAR LogicalUnitNumber:3;
01267     UCHAR TransferLength[3];
01268     UCHAR Control;
01269   } WRITE_TAPE_MARKS, *PWRITE_TAPE_MARKS;
01270   struct _SPACE_TAPE_MARKS {
01271     UCHAR OperationCode;
01272     UCHAR Code:3;
01273     UCHAR Reserved:2;
01274     UCHAR LogicalUnitNumber:3;
01275     UCHAR NumMarksMSB;
01276     UCHAR NumMarks;
01277     UCHAR NumMarksLSB;
01278   union {
01279     UCHAR value;
01280     struct {
01281       UCHAR Link:1;
01282       UCHAR Flag:1;
01283       UCHAR Reserved:4;
01284       UCHAR VendorUnique:2;
01285     } Fields;
01286   } Byte6;
01287   } SPACE_TAPE_MARKS, *PSPACE_TAPE_MARKS;
01288   struct _READ_POSITION {
01289     UCHAR Operation;
01290     UCHAR BlockType:1;
01291     UCHAR Reserved1:4;
01292     UCHAR Lun:3;
01293     UCHAR Reserved2[7];
01294     UCHAR Control;
01295   } READ_POSITION, *PREAD_POSITION;
01296   struct _CDB6READWRITETAPE {
01297     UCHAR OperationCode;
01298     UCHAR VendorSpecific:5;
01299     UCHAR Reserved:3;
01300     UCHAR TransferLenMSB;
01301     UCHAR TransferLen;
01302     UCHAR TransferLenLSB;
01303     UCHAR Link:1;
01304     UCHAR Flag:1;
01305     UCHAR Reserved1:4;
01306     UCHAR VendorUnique:2;
01307   } CDB6READWRITETAPE, *PCDB6READWRITETAPE;
01308   struct _INIT_ELEMENT_STATUS {
01309     UCHAR OperationCode;
01310     UCHAR Reserved1:5;
01311     UCHAR LogicalUnitNubmer:3;
01312     UCHAR Reserved2[3];
01313     UCHAR Reserved3:7;
01314     UCHAR NoBarCode:1;
01315   } INIT_ELEMENT_STATUS, *PINIT_ELEMENT_STATUS;
01316   struct _INITIALIZE_ELEMENT_RANGE {
01317     UCHAR OperationCode;
01318     UCHAR Range:1;
01319     UCHAR Reserved1:4;
01320     UCHAR LogicalUnitNubmer:3;
01321     UCHAR FirstElementAddress[2];
01322     UCHAR Reserved2[2];
01323     UCHAR NumberOfElements[2];
01324     UCHAR Reserved3;
01325     UCHAR Reserved4:7;
01326     UCHAR NoBarCode:1;
01327   } INITIALIZE_ELEMENT_RANGE, *PINITIALIZE_ELEMENT_RANGE;
01328   struct _POSITION_TO_ELEMENT {
01329     UCHAR OperationCode;
01330     UCHAR Reserved1:5;
01331     UCHAR LogicalUnitNumber:3;
01332     UCHAR TransportElementAddress[2];
01333     UCHAR DestinationElementAddress[2];
01334     UCHAR Reserved2[2];
01335     UCHAR Flip:1;
01336     UCHAR Reserved3:7;
01337     UCHAR Control;
01338   } POSITION_TO_ELEMENT, *PPOSITION_TO_ELEMENT;
01339   struct _MOVE_MEDIUM {
01340     UCHAR OperationCode;
01341     UCHAR Reserved1:5;
01342     UCHAR LogicalUnitNumber:3;
01343     UCHAR TransportElementAddress[2];
01344     UCHAR SourceElementAddress[2];
01345     UCHAR DestinationElementAddress[2];
01346     UCHAR Reserved2[2];
01347     UCHAR Flip:1;
01348     UCHAR Reserved3:7;
01349     UCHAR Control;
01350   } MOVE_MEDIUM, *PMOVE_MEDIUM;
01351   struct _EXCHANGE_MEDIUM {
01352     UCHAR OperationCode;
01353     UCHAR Reserved1:5;
01354     UCHAR LogicalUnitNumber:3;
01355     UCHAR TransportElementAddress[2];
01356     UCHAR SourceElementAddress[2];
01357     UCHAR Destination1ElementAddress[2];
01358     UCHAR Destination2ElementAddress[2];
01359     UCHAR Flip1:1;
01360     UCHAR Flip2:1;
01361     UCHAR Reserved3:6;
01362     UCHAR Control;
01363   } EXCHANGE_MEDIUM, *PEXCHANGE_MEDIUM;
01364   struct _READ_ELEMENT_STATUS {
01365     UCHAR OperationCode;
01366     UCHAR ElementType:4;
01367     UCHAR VolTag:1;
01368     UCHAR LogicalUnitNumber:3;
01369     UCHAR StartingElementAddress[2];
01370     UCHAR NumberOfElements[2];
01371     UCHAR Reserved1;
01372     UCHAR AllocationLength[3];
01373     UCHAR Reserved2;
01374     UCHAR Control;
01375   } READ_ELEMENT_STATUS, *PREAD_ELEMENT_STATUS;
01376   struct _SEND_VOLUME_TAG {
01377     UCHAR OperationCode;
01378     UCHAR ElementType:4;
01379     UCHAR Reserved1:1;
01380     UCHAR LogicalUnitNumber:3;
01381     UCHAR StartingElementAddress[2];
01382     UCHAR Reserved2;
01383     UCHAR ActionCode:5;
01384     UCHAR Reserved3:3;
01385     UCHAR Reserved4[2];
01386     UCHAR ParameterListLength[2];
01387     UCHAR Reserved5;
01388     UCHAR Control;
01389   } SEND_VOLUME_TAG, *PSEND_VOLUME_TAG;
01390   struct _REQUEST_VOLUME_ELEMENT_ADDRESS {
01391     UCHAR OperationCode;
01392     UCHAR ElementType:4;
01393     UCHAR VolTag:1;
01394     UCHAR LogicalUnitNumber:3;
01395     UCHAR StartingElementAddress[2];
01396     UCHAR NumberElements[2];
01397     UCHAR Reserved1;
01398     UCHAR AllocationLength[3];
01399     UCHAR Reserved2;
01400     UCHAR Control;
01401   } REQUEST_VOLUME_ELEMENT_ADDRESS, *PREQUEST_VOLUME_ELEMENT_ADDRESS;
01402   struct _LOAD_UNLOAD {
01403     UCHAR OperationCode;
01404     UCHAR Immediate:1;
01405     UCHAR Reserved1:4;
01406     UCHAR Lun:3;
01407     UCHAR Reserved2[2];
01408     UCHAR Start:1;
01409     UCHAR LoadEject:1;
01410     UCHAR Reserved3:6;
01411     UCHAR Reserved4[3];
01412     UCHAR Slot;
01413     UCHAR Reserved5[3];
01414   } LOAD_UNLOAD, *PLOAD_UNLOAD;
01415   struct _MECH_STATUS {
01416     UCHAR OperationCode;
01417     UCHAR Reserved:5;
01418     UCHAR Lun:3;
01419     UCHAR Reserved1[6];
01420     UCHAR AllocationLength[2];
01421     UCHAR Reserved2[1];
01422     UCHAR Control;
01423   } MECH_STATUS, *PMECH_STATUS;
01424   struct _SYNCHRONIZE_CACHE10 {
01425     UCHAR OperationCode;
01426     UCHAR RelAddr:1;
01427     UCHAR Immediate:1;
01428     UCHAR Reserved:3;
01429     UCHAR Lun:3;
01430     UCHAR LogicalBlockAddress[4];
01431     UCHAR Reserved2;
01432     UCHAR BlockCount[2];
01433     UCHAR Control;
01434   } SYNCHRONIZE_CACHE10, *PSYNCHRONIZE_CACHE10;
01435   struct _GET_EVENT_STATUS_NOTIFICATION {
01436     UCHAR OperationCode;
01437     UCHAR Immediate:1;
01438     UCHAR Reserved:4;
01439     UCHAR Lun:3;
01440     UCHAR Reserved2[2];
01441     UCHAR NotificationClassRequest;
01442     UCHAR Reserved3[2];
01443     UCHAR EventListLength[2];
01444     UCHAR Control;
01445   } GET_EVENT_STATUS_NOTIFICATION, *PGET_EVENT_STATUS_NOTIFICATION;
01446   struct _GET_PERFORMANCE {
01447     UCHAR OperationCode;
01448     UCHAR Except:2;
01449     UCHAR Write:1;
01450     UCHAR Tolerance:2;
01451     UCHAR Reserved0:3;
01452     UCHAR StartingLBA[4];
01453     UCHAR Reserved1[2];
01454     UCHAR MaximumNumberOfDescriptors[2];
01455     UCHAR Type;
01456     UCHAR Control;
01457   } GET_PERFORMANCE;
01458   struct _READ_DVD_STRUCTURE {
01459     UCHAR OperationCode;
01460     UCHAR Reserved1:5;
01461     UCHAR Lun:3;
01462     UCHAR RMDBlockNumber[4];
01463     UCHAR LayerNumber;
01464     UCHAR Format;
01465     UCHAR AllocationLength[2];
01466     UCHAR Reserved3:6;
01467     UCHAR AGID:2;
01468     UCHAR Control;
01469   } READ_DVD_STRUCTURE, *PREAD_DVD_STRUCTURE;
01470   struct _SET_STREAMING {
01471     UCHAR OperationCode;
01472     UCHAR Reserved[8];
01473     UCHAR ParameterListLength[2];
01474     UCHAR Control;
01475   } SET_STREAMING;
01476   struct _SEND_DVD_STRUCTURE {
01477     UCHAR OperationCode;
01478     UCHAR Reserved1:5;
01479     UCHAR Lun:3;
01480     UCHAR Reserved2[5];
01481     UCHAR Format;
01482     UCHAR ParameterListLength[2];
01483     UCHAR Reserved3;
01484     UCHAR Control;
01485   } SEND_DVD_STRUCTURE, *PSEND_DVD_STRUCTURE;
01486   struct _SEND_KEY {
01487     UCHAR OperationCode;
01488     UCHAR Reserved1:5;
01489     UCHAR Lun:3;
01490     UCHAR Reserved2[6];
01491     UCHAR ParameterListLength[2];
01492     UCHAR KeyFormat:6;
01493     UCHAR AGID:2;
01494     UCHAR Control;
01495   } SEND_KEY, *PSEND_KEY;
01496   struct _REPORT_KEY {
01497     UCHAR OperationCode;
01498     UCHAR Reserved1:5;
01499     UCHAR Lun:3;
01500     UCHAR LogicalBlockAddress[4];
01501     UCHAR Reserved2[2];
01502     UCHAR AllocationLength[2];
01503     UCHAR KeyFormat:6;
01504     UCHAR AGID:2;
01505     UCHAR Control;
01506   } REPORT_KEY, *PREPORT_KEY;
01507   struct _SET_READ_AHEAD {
01508     UCHAR OperationCode;
01509     UCHAR Reserved1:5;
01510     UCHAR Lun:3;
01511     UCHAR TriggerLBA[4];
01512     UCHAR ReadAheadLBA[4];
01513     UCHAR Reserved2;
01514     UCHAR Control;
01515   } SET_READ_AHEAD, *PSET_READ_AHEAD;
01516   struct _READ_FORMATTED_CAPACITIES {
01517     UCHAR OperationCode;
01518     UCHAR Reserved1:5;
01519     UCHAR Lun:3;
01520     UCHAR Reserved2[5];
01521     UCHAR AllocationLength[2];
01522     UCHAR Control;
01523   } READ_FORMATTED_CAPACITIES, *PREAD_FORMATTED_CAPACITIES;
01524   struct _REPORT_LUNS {
01525     UCHAR OperationCode;
01526     UCHAR Reserved1[5];
01527     UCHAR AllocationLength[4];
01528     UCHAR Reserved2[1];
01529     UCHAR Control;
01530   } REPORT_LUNS, *PREPORT_LUNS;
01531   struct _PERSISTENT_RESERVE_IN {
01532     UCHAR OperationCode;
01533     UCHAR ServiceAction:5;
01534     UCHAR Reserved1:3;
01535     UCHAR Reserved2[5];
01536     UCHAR AllocationLength[2];
01537     UCHAR Control;
01538   } PERSISTENT_RESERVE_IN, *PPERSISTENT_RESERVE_IN;
01539   struct _PERSISTENT_RESERVE_OUT {
01540     UCHAR OperationCode;
01541     UCHAR ServiceAction:5;
01542     UCHAR Reserved1:3;
01543     UCHAR Type:4;
01544     UCHAR Scope:4;
01545     UCHAR Reserved2[4];
01546     UCHAR ParameterListLength[2];
01547     UCHAR Control;
01548   } PERSISTENT_RESERVE_OUT, *PPERSISTENT_RESERVE_OUT;
01549   struct _GET_CONFIGURATION {
01550     UCHAR OperationCode;
01551     UCHAR RequestType:1;
01552     UCHAR Reserved1:7;
01553     UCHAR StartingFeature[2];
01554     UCHAR Reserved2[3];
01555     UCHAR AllocationLength[2];
01556     UCHAR Control;
01557   } GET_CONFIGURATION, *PGET_CONFIGURATION;
01558   struct _SET_CD_SPEED {
01559     UCHAR OperationCode;
01560     _ANONYMOUS_UNION union {
01561       UCHAR Reserved1;
01562       _ANONYMOUS_STRUCT struct {
01563         UCHAR RotationControl:2;
01564         UCHAR Reserved3:6;
01565       } DUMMYSTRUCTNAME;
01566     } DUMMYUNIONNAME;
01567     UCHAR ReadSpeed[2];
01568     UCHAR WriteSpeed[2];
01569     UCHAR Reserved2[5];
01570     UCHAR Control;
01571   } SET_CD_SPEED, *PSET_CD_SPEED;
01572   struct _READ12 {
01573     UCHAR OperationCode;
01574     UCHAR RelativeAddress:1;
01575     UCHAR Reserved1:2;
01576     UCHAR ForceUnitAccess:1;
01577     UCHAR DisablePageOut:1;
01578     UCHAR LogicalUnitNumber:3;
01579     UCHAR LogicalBlock[4];
01580     UCHAR TransferLength[4];
01581     UCHAR Reserved2:7;
01582     UCHAR Streaming:1;
01583     UCHAR Control;
01584   } READ12;
01585   struct _WRITE12 {
01586     UCHAR OperationCode;
01587     UCHAR RelativeAddress:1;
01588     UCHAR Reserved1:1;
01589     UCHAR EBP:1;
01590     UCHAR ForceUnitAccess:1;
01591     UCHAR DisablePageOut:1;
01592     UCHAR LogicalUnitNumber:3;
01593     UCHAR LogicalBlock[4];
01594     UCHAR TransferLength[4];
01595     UCHAR Reserved2:7;
01596     UCHAR Streaming:1;
01597     UCHAR Control;
01598   } WRITE12;
01599   struct _READ16 {
01600     UCHAR OperationCode;
01601     UCHAR Reserved1:3;
01602     UCHAR ForceUnitAccess:1;
01603     UCHAR DisablePageOut:1;
01604     UCHAR ReadProtect:3;
01605     UCHAR LogicalBlock[8];
01606     UCHAR TransferLength[4];
01607     UCHAR Reserved2:7;
01608     UCHAR Streaming:1;
01609     UCHAR Control;
01610   } READ16;
01611   struct _WRITE16 {
01612     UCHAR OperationCode;
01613     UCHAR Reserved1:3;
01614     UCHAR ForceUnitAccess:1;
01615     UCHAR DisablePageOut:1;
01616     UCHAR WriteProtect:3;
01617     UCHAR LogicalBlock[8];
01618     UCHAR TransferLength[4];
01619     UCHAR Reserved2:7;
01620     UCHAR Streaming:1;
01621     UCHAR Control;
01622   } WRITE16;
01623   struct _VERIFY16 {
01624     UCHAR OperationCode;
01625     UCHAR Reserved1:1;
01626     UCHAR ByteCheck:1;
01627     UCHAR BlockVerify:1;
01628     UCHAR Reserved2: 1;
01629     UCHAR DisablePageOut:1;
01630     UCHAR VerifyProtect:3;
01631     UCHAR LogicalBlock[8];
01632     UCHAR VerificationLength[4];
01633     UCHAR Reserved3:7;
01634     UCHAR Streaming:1;
01635     UCHAR Control;
01636   } VERIFY16;
01637   struct _SYNCHRONIZE_CACHE16 {
01638     UCHAR OperationCode;
01639     UCHAR Reserved1:1;
01640     UCHAR Immediate:1;
01641     UCHAR Reserved2:6;
01642     UCHAR LogicalBlock[8];
01643     UCHAR BlockCount[4];
01644     UCHAR Reserved3;
01645     UCHAR Control;
01646   } SYNCHRONIZE_CACHE16;
01647   struct _READ_CAPACITY16 {
01648     UCHAR OperationCode;
01649     UCHAR ServiceAction:5;
01650     UCHAR Reserved1:3;
01651     UCHAR LogicalBlock[8];
01652     UCHAR BlockCount[4];
01653     UCHAR PMI:1;
01654     UCHAR Reserved2:7;
01655     UCHAR Control;
01656   } READ_CAPACITY16;
01657   ULONG AsUlong[4];
01658   UCHAR AsByte[16];
01659 } CDB, *PCDB;
01660 
01661 typedef struct _NOTIFICATION_EVENT_STATUS_HEADER {
01662   UCHAR EventDataLength[2];
01663   UCHAR NotificationClass:3;
01664   UCHAR Reserved:4;
01665   UCHAR NEA:1;
01666   UCHAR SupportedEventClasses;
01667   UCHAR ClassEventData[0];
01668 } NOTIFICATION_EVENT_STATUS_HEADER, *PNOTIFICATION_EVENT_STATUS_HEADER;
01669 
01670 typedef struct _NOTIFICATION_OPERATIONAL_STATUS {
01671   UCHAR OperationalEvent:4;
01672   UCHAR Reserved1:4;
01673   UCHAR OperationalStatus:4;
01674   UCHAR Reserved2:3;
01675   UCHAR PersistentPrevented:1;
01676   UCHAR Operation[2];
01677 } NOTIFICATION_OPERATIONAL_STATUS, *PNOTIFICATION_OPERATIONAL_STATUS;
01678 
01679 typedef struct _NOTIFICATION_POWER_STATUS {
01680   UCHAR PowerEvent:4;
01681   UCHAR Reserved:4;
01682   UCHAR PowerStatus;
01683   UCHAR Reserved2[2];
01684 } NOTIFICATION_POWER_STATUS, *PNOTIFICATION_POWER_STATUS;
01685 
01686 typedef struct _NOTIFICATION_EXTERNAL_STATUS {
01687   UCHAR ExternalEvent:4;
01688   UCHAR Reserved1:4;
01689   UCHAR ExternalStatus:4;
01690   UCHAR Reserved2:3;
01691   UCHAR PersistentPrevented:1;
01692   UCHAR Request[2];
01693 } NOTIFICATION_EXTERNAL_STATUS, *PNOTIFICATION_EXTERNAL_STATUS;
01694 
01695 typedef struct _NOTIFICATION_MEDIA_STATUS {
01696   UCHAR MediaEvent:4;
01697   UCHAR Reserved:4;
01698   _ANONYMOUS_UNION union {
01699     UCHAR PowerStatus;
01700     UCHAR MediaStatus;
01701     _ANONYMOUS_STRUCT struct {
01702       UCHAR DoorTrayOpen:1;
01703       UCHAR MediaPresent:1;
01704       UCHAR ReservedX:6;
01705     } DUMMYSTRUCTNAME;
01706   } DUMMYUNIONNAME;
01707   UCHAR StartSlot;
01708   UCHAR EndSlot;
01709 } NOTIFICATION_MEDIA_STATUS, *PNOTIFICATION_MEDIA_STATUS;
01710 
01711 typedef struct _NOTIFICATION_MULTI_HOST_STATUS {
01712   UCHAR MultiHostEvent:4;
01713   UCHAR Reserved1:4;
01714   UCHAR MultiHostStatus:4;
01715   UCHAR Reserved2:3;
01716   UCHAR PersistentPrevented:1;
01717   UCHAR Priority[2];
01718 } NOTIFICATION_MULTI_HOST_STATUS, *PNOTIFICATION_MULTI_HOST_STATUS;
01719 
01720 typedef struct _NOTIFICATION_BUSY_STATUS {
01721   UCHAR DeviceBusyEvent:4;
01722   UCHAR Reserved:4;
01723   UCHAR DeviceBusyStatus;
01724   UCHAR Time[2];
01725 } NOTIFICATION_BUSY_STATUS, *PNOTIFICATION_BUSY_STATUS;
01726 
01727 typedef struct _READ_DVD_STRUCTURES_HEADER {
01728   UCHAR Length[2];
01729   UCHAR Reserved[2];
01730   UCHAR Data[0];
01731 } READ_DVD_STRUCTURES_HEADER, *PREAD_DVD_STRUCTURES_HEADER;
01732 
01733 typedef struct _CDVD_KEY_HEADER {
01734   UCHAR DataLength[2];
01735   UCHAR Reserved[2];
01736   UCHAR Data[0];
01737 } CDVD_KEY_HEADER, *PCDVD_KEY_HEADER;
01738 
01739 typedef struct _CDVD_REPORT_AGID_DATA {
01740   UCHAR Reserved1[3];
01741   UCHAR Reserved2:6;
01742   UCHAR AGID:2;
01743 } CDVD_REPORT_AGID_DATA, *PCDVD_REPORT_AGID_DATA;
01744 
01745 typedef struct _CDVD_CHALLENGE_KEY_DATA {
01746   UCHAR ChallengeKeyValue[10];
01747   UCHAR Reserved[2];
01748 } CDVD_CHALLENGE_KEY_DATA, *PCDVD_CHALLENGE_KEY_DATA;
01749 
01750 typedef struct _CDVD_KEY_DATA {
01751   UCHAR Key[5];
01752   UCHAR Reserved[3];
01753 } CDVD_KEY_DATA, *PCDVD_KEY_DATA;
01754 
01755 typedef struct _CDVD_REPORT_ASF_DATA {
01756   UCHAR Reserved1[3];
01757   UCHAR Success:1;
01758   UCHAR Reserved2:7;
01759 } CDVD_REPORT_ASF_DATA, *PCDVD_REPORT_ASF_DATA;
01760 
01761 typedef struct _CDVD_TITLE_KEY_HEADER {
01762   UCHAR DataLength[2];
01763   UCHAR Reserved1[1];
01764   UCHAR Reserved2:3;
01765   UCHAR CGMS:2;
01766   UCHAR CP_SEC:1;
01767   UCHAR CPM:1;
01768   UCHAR Zero:1;
01769   CDVD_KEY_DATA TitleKey;
01770 } CDVD_TITLE_KEY_HEADER, *PCDVD_TITLE_KEY_HEADER;
01771 
01772 typedef struct _FORMAT_DESCRIPTOR {
01773   UCHAR NumberOfBlocks[4];
01774   UCHAR FormatSubType:2;
01775   UCHAR FormatType:6;
01776   UCHAR BlockLength[3];
01777 } FORMAT_DESCRIPTOR, *PFORMAT_DESCRIPTOR;
01778 
01779 typedef struct _FORMAT_LIST_HEADER {
01780   UCHAR Reserved;
01781   UCHAR VendorSpecific:1;
01782   UCHAR Immediate:1;
01783   UCHAR TryOut:1;
01784   UCHAR IP:1;
01785   UCHAR STPF:1;
01786   UCHAR DCRT:1;
01787   UCHAR DPRY:1;
01788   UCHAR FOV:1;
01789   UCHAR FormatDescriptorLength[2];
01790   FORMAT_DESCRIPTOR Descriptors[0];
01791 } FORMAT_LIST_HEADER, *PFORMAT_LIST_HEADER;
01792 
01793 typedef struct _FORMATTED_CAPACITY_DESCRIPTOR {
01794   UCHAR NumberOfBlocks[4];
01795   UCHAR Maximum:1;
01796   UCHAR Valid:1;
01797   UCHAR FormatType:6;
01798   UCHAR BlockLength[3];
01799 } FORMATTED_CAPACITY_DESCRIPTOR, *PFORMATTED_CAPACITY_DESCRIPTOR;
01800 
01801 typedef struct _FORMATTED_CAPACITY_LIST {
01802   UCHAR Reserved[3];
01803   UCHAR CapacityListLength;
01804   FORMATTED_CAPACITY_DESCRIPTOR Descriptors[0];
01805 } FORMATTED_CAPACITY_LIST, *PFORMATTED_CAPACITY_LIST;
01806 
01807 typedef struct _OPC_TABLE_ENTRY {
01808   UCHAR Speed[2];
01809   UCHAR OPCValue[6];
01810 } OPC_TABLE_ENTRY, *POPC_TABLE_ENTRY;
01811 
01812 typedef struct _DISC_INFORMATION {
01813   UCHAR Length[2];
01814   UCHAR DiscStatus:2;
01815   UCHAR LastSessionStatus:2;
01816   UCHAR Erasable:1;
01817   UCHAR Reserved1:3;
01818   UCHAR FirstTrackNumber;
01819   UCHAR NumberOfSessionsLsb;
01820   UCHAR LastSessionFirstTrackLsb;
01821   UCHAR LastSessionLastTrackLsb;
01822   UCHAR MrwStatus:2;
01823   UCHAR MrwDirtyBit:1;
01824   UCHAR Reserved2:2;
01825   UCHAR URU:1;
01826   UCHAR DBC_V:1;
01827   UCHAR DID_V:1;
01828   UCHAR DiscType;
01829   UCHAR NumberOfSessionsMsb;
01830   UCHAR LastSessionFirstTrackMsb;
01831   UCHAR LastSessionLastTrackMsb;
01832   UCHAR DiskIdentification[4];
01833   UCHAR LastSessionLeadIn[4];
01834   UCHAR LastPossibleLeadOutStartTime[4];
01835   UCHAR DiskBarCode[8];
01836   UCHAR Reserved4;
01837   UCHAR NumberOPCEntries;
01838   OPC_TABLE_ENTRY OPCTable[1];
01839 } DISC_INFORMATION, *PDISC_INFORMATION;
01840 
01841 typedef struct _DISK_INFORMATION {
01842   UCHAR Length[2];
01843   UCHAR DiskStatus:2;
01844   UCHAR LastSessionStatus:2;
01845   UCHAR Erasable:1;
01846   UCHAR Reserved1:3;
01847   UCHAR FirstTrackNumber;
01848   UCHAR NumberOfSessions;
01849   UCHAR LastSessionFirstTrack;
01850   UCHAR LastSessionLastTrack;
01851   UCHAR Reserved2:5;
01852   UCHAR GEN:1;
01853   UCHAR DBC_V:1;
01854   UCHAR DID_V:1;
01855   UCHAR DiskType;
01856   UCHAR Reserved3[3];
01857   UCHAR DiskIdentification[4];
01858   UCHAR LastSessionLeadIn[4];
01859   UCHAR LastPossibleStartTime[4];
01860   UCHAR DiskBarCode[8];
01861   UCHAR Reserved4;
01862   UCHAR NumberOPCEntries;
01863   OPC_TABLE_ENTRY OPCTable[0];
01864 } DISK_INFORMATION, *PDISK_INFORMATION;
01865 
01866 typedef struct _DATA_BLOCK_HEADER {
01867   UCHAR DataMode;
01868   UCHAR Reserved[4];
01869   _ANONYMOUS_UNION union {
01870     UCHAR LogicalBlockAddress[4];
01871     struct {
01872       UCHAR Reserved;
01873       UCHAR M;
01874       UCHAR S;
01875       UCHAR F;
01876     } MSF;
01877   } DUMMYUNIONNAME;
01878 } DATA_BLOCK_HEADER, *PDATA_BLOCK_HEADER;
01879 
01880 typedef struct _TRACK_INFORMATION {
01881   UCHAR Length[2];
01882   UCHAR TrackNumber;
01883   UCHAR SessionNumber;
01884   UCHAR Reserved1;
01885   UCHAR TrackMode:4;
01886   UCHAR Copy:1;
01887   UCHAR Damage:1;
01888   UCHAR Reserved2:2;
01889   UCHAR DataMode:4;
01890   UCHAR FP:1;
01891   UCHAR Packet:1;
01892   UCHAR Blank:1;
01893   UCHAR RT:1;
01894   UCHAR NWA_V:1;
01895   UCHAR Reserved3:7;
01896   UCHAR TrackStartAddress[4];
01897   UCHAR NextWritableAddress[4];
01898   UCHAR FreeBlocks[4];
01899   UCHAR FixedPacketSize[4];
01900 } TRACK_INFORMATION, *PTRACK_INFORMATION;
01901 
01902 typedef struct _TRACK_INFORMATION2 {
01903   UCHAR Length[2];
01904   UCHAR TrackNumberLsb;
01905   UCHAR SessionNumberLsb;
01906   UCHAR Reserved4;
01907   UCHAR TrackMode:4;
01908   UCHAR Copy:1;
01909   UCHAR Damage:1;
01910   UCHAR Reserved5:2;
01911   UCHAR DataMode:4;
01912   UCHAR FixedPacket:1;
01913   UCHAR Packet:1;
01914   UCHAR Blank:1;
01915   UCHAR ReservedTrack:1;
01916   UCHAR NWA_V:1;
01917   UCHAR LRA_V:1;
01918   UCHAR Reserved6:6;
01919   UCHAR TrackStartAddress[4];
01920   UCHAR NextWritableAddress[4];
01921   UCHAR FreeBlocks[4];
01922   UCHAR FixedPacketSize[4];
01923   UCHAR TrackSize[4];
01924   UCHAR LastRecordedAddress[4];
01925   UCHAR TrackNumberMsb;
01926   UCHAR SessionNumberMsb;
01927   UCHAR Reserved7[2];
01928 } TRACK_INFORMATION2, *PTRACK_INFORMATION2;
01929 
01930 typedef struct _TRACK_INFORMATION3 {
01931   UCHAR Length[2];
01932   UCHAR TrackNumberLsb;
01933   UCHAR SessionNumberLsb;
01934   UCHAR Reserved4;
01935   UCHAR TrackMode:4;
01936   UCHAR Copy:1;
01937   UCHAR Damage:1;
01938   UCHAR Reserved5:2;
01939   UCHAR DataMode:4;
01940   UCHAR FixedPacket:1;
01941   UCHAR Packet:1;
01942   UCHAR Blank:1;
01943   UCHAR ReservedTrack:1;
01944   UCHAR NWA_V:1;
01945   UCHAR LRA_V:1;
01946   UCHAR Reserved6:6;
01947   UCHAR TrackStartAddress[4];
01948   UCHAR NextWritableAddress[4];
01949   UCHAR FreeBlocks[4];
01950   UCHAR FixedPacketSize[4];
01951   UCHAR TrackSize[4];
01952   UCHAR LastRecordedAddress[4];
01953   UCHAR TrackNumberMsb;
01954   UCHAR SessionNumberMsb;
01955   UCHAR Reserved7[2];
01956   UCHAR ReadCompatibilityLba[4];
01957 } TRACK_INFORMATION3, *PTRACK_INFORMATION3;
01958 
01959 typedef struct _PERFORMANCE_DESCRIPTOR {
01960   UCHAR RandomAccess:1;
01961   UCHAR Exact:1;
01962   UCHAR RestoreDefaults:1;
01963   UCHAR WriteRotationControl:2;
01964   UCHAR Reserved1:3;
01965   UCHAR Reserved[3];
01966   UCHAR StartLba[4];
01967   UCHAR EndLba[4];
01968   UCHAR ReadSize[4];
01969   UCHAR ReadTime[4];
01970   UCHAR WriteSize[4];
01971   UCHAR WriteTime[4];
01972 } PERFORMANCE_DESCRIPTOR, *PPERFORMANCE_DESCRIPTOR;
01973 
01974 typedef struct _SCSI_EXTENDED_MESSAGE {
01975   UCHAR InitialMessageCode;
01976   UCHAR MessageLength;
01977   UCHAR MessageType;
01978   union _EXTENDED_ARGUMENTS {
01979     struct {
01980       UCHAR Modifier[4];
01981     } Modify;
01982     struct {
01983       UCHAR TransferPeriod;
01984       UCHAR ReqAckOffset;
01985     } Synchronous;
01986     struct{
01987       UCHAR Width;
01988     } Wide;
01989   } ExtendedArguments;
01990 }SCSI_EXTENDED_MESSAGE, *PSCSI_EXTENDED_MESSAGE;
01991 
01992 #ifndef _INQUIRYDATA_DEFINED /* also in minitape.h */
01993 #define _INQUIRYDATA_DEFINED
01994 
01995 #define INQUIRYDATABUFFERSIZE 36
01996 
01997 #if (NTDDI_VERSION < NTDDI_WINXP)
01998 typedef struct _INQUIRYDATA {
01999   UCHAR DeviceType:5;
02000   UCHAR DeviceTypeQualifier:3;
02001   UCHAR DeviceTypeModifier:7;
02002   UCHAR RemovableMedia:1;
02003   UCHAR Versions;
02004   UCHAR ResponseDataFormat:4;
02005   UCHAR HiSupport:1;
02006   UCHAR NormACA:1;
02007   UCHAR ReservedBit:1;
02008   UCHAR AERC:1;
02009   UCHAR AdditionalLength;
02010   UCHAR Reserved[2];
02011   UCHAR SoftReset:1;
02012   UCHAR CommandQueue:1;
02013   UCHAR Reserved2:1;
02014   UCHAR LinkedCommands:1;
02015   UCHAR Synchronous:1;
02016   UCHAR Wide16Bit:1;
02017   UCHAR Wide32Bit:1;
02018   UCHAR RelativeAddressing:1;
02019   UCHAR VendorId[8];
02020   UCHAR ProductId[16];
02021   UCHAR ProductRevisionLevel[4];
02022   UCHAR VendorSpecific[20];
02023   UCHAR Reserved3[40];
02024 } INQUIRYDATA, *PINQUIRYDATA;
02025 #else
02026 typedef struct _INQUIRYDATA {
02027   UCHAR DeviceType:5;
02028   UCHAR DeviceTypeQualifier:3;
02029   UCHAR DeviceTypeModifier:7;
02030   UCHAR RemovableMedia:1;
02031   _ANONYMOUS_UNION union {
02032     UCHAR Versions;
02033     _ANONYMOUS_STRUCT struct {
02034       UCHAR ANSIVersion:3;
02035       UCHAR ECMAVersion:3;
02036       UCHAR ISOVersion:2;
02037     } DUMMYSTRUCTNAME;
02038   } DUMMYUNIONNAME;
02039   UCHAR ResponseDataFormat:4;
02040   UCHAR HiSupport:1;
02041   UCHAR NormACA:1;
02042   UCHAR TerminateTask:1;
02043   UCHAR AERC:1;
02044   UCHAR AdditionalLength;
02045   UCHAR Reserved;
02046   UCHAR Addr16:1;
02047   UCHAR Addr32:1;
02048   UCHAR AckReqQ:1;
02049   UCHAR MediumChanger:1;
02050   UCHAR MultiPort:1;
02051   UCHAR ReservedBit2:1;
02052   UCHAR EnclosureServices:1;
02053   UCHAR ReservedBit3:1;
02054   UCHAR SoftReset:1;
02055   UCHAR CommandQueue:1;
02056   UCHAR TransferDisable:1;
02057   UCHAR LinkedCommands:1;
02058   UCHAR Synchronous:1;
02059   UCHAR Wide16Bit:1;
02060   UCHAR Wide32Bit:1;
02061   UCHAR RelativeAddressing:1;
02062   UCHAR VendorId[8];
02063   UCHAR ProductId[16];
02064   UCHAR ProductRevisionLevel[4];
02065   UCHAR VendorSpecific[20];
02066   UCHAR Reserved3[40];
02067 } INQUIRYDATA, *PINQUIRYDATA;
02068 #endif /* (NTDDI_VERSION < NTDDI_WINXP) */
02069 
02070 #endif /* _INQUIRYDATA_DEFINED */
02071 
02072 typedef struct _VPD_MEDIA_SERIAL_NUMBER_PAGE {
02073   UCHAR DeviceType:5;
02074   UCHAR DeviceTypeQualifier:3;
02075   UCHAR PageCode;
02076   UCHAR Reserved;
02077   UCHAR PageLength;
02078   UCHAR SerialNumber[0];
02079 } VPD_MEDIA_SERIAL_NUMBER_PAGE, *PVPD_MEDIA_SERIAL_NUMBER_PAGE;
02080 
02081 typedef struct _VPD_SERIAL_NUMBER_PAGE {
02082   UCHAR DeviceType:5;
02083   UCHAR DeviceTypeQualifier:3;
02084   UCHAR PageCode;
02085   UCHAR Reserved;
02086   UCHAR PageLength;
02087   UCHAR SerialNumber[0];
02088 } VPD_SERIAL_NUMBER_PAGE, *PVPD_SERIAL_NUMBER_PAGE;
02089 
02090 typedef enum _VPD_CODE_SET {
02091   VpdCodeSetReserved = 0,
02092   VpdCodeSetBinary = 1,
02093   VpdCodeSetAscii = 2,
02094   VpdCodeSetUTF8 = 3
02095 } VPD_CODE_SET, *PVPD_CODE_SET;
02096 
02097 typedef enum _VPD_ASSOCIATION {
02098   VpdAssocDevice = 0,
02099   VpdAssocPort = 1,
02100   VpdAssocTarget = 2,
02101   VpdAssocReserved1 = 3,
02102   VpdAssocReserved2 = 4
02103 } VPD_ASSOCIATION, *PVPD_ASSOCIATION;
02104 
02105 typedef enum _VPD_IDENTIFIER_TYPE {
02106   VpdIdentifierTypeVendorSpecific = 0,
02107   VpdIdentifierTypeVendorId = 1,
02108   VpdIdentifierTypeEUI64 = 2,
02109   VpdIdentifierTypeFCPHName = 3,
02110   VpdIdentifierTypePortRelative = 4,
02111   VpdIdentifierTypeTargetPortGroup = 5,
02112   VpdIdentifierTypeLogicalUnitGroup = 6,
02113   VpdIdentifierTypeMD5LogicalUnitId = 7,
02114   VpdIdentifierTypeSCSINameString = 8
02115 } VPD_IDENTIFIER_TYPE, *PVPD_IDENTIFIER_TYPE;
02116 
02117 typedef struct _VPD_IDENTIFICATION_DESCRIPTOR {
02118   UCHAR CodeSet:4;
02119   UCHAR Reserved:4;
02120   UCHAR IdentifierType:4;
02121   UCHAR Association:2;
02122   UCHAR Reserved2:2;
02123   UCHAR Reserved3;
02124   UCHAR IdentifierLength;
02125   UCHAR Identifier[0];
02126 } VPD_IDENTIFICATION_DESCRIPTOR, *PVPD_IDENTIFICATION_DESCRIPTOR;
02127 
02128 typedef struct _VPD_IDENTIFICATION_PAGE {
02129   UCHAR DeviceType:5;
02130   UCHAR DeviceTypeQualifier:3;
02131   UCHAR PageCode;
02132   UCHAR Reserved;
02133   UCHAR PageLength;
02134   UCHAR Descriptors[0];
02135 } VPD_IDENTIFICATION_PAGE, *PVPD_IDENTIFICATION_PAGE;
02136 
02137 typedef struct _VPD_SUPPORTED_PAGES_PAGE {
02138   UCHAR DeviceType:5;
02139   UCHAR DeviceTypeQualifier:3;
02140   UCHAR PageCode;
02141   UCHAR Reserved;
02142   UCHAR PageLength;
02143   UCHAR SupportedPageList[0];
02144 } VPD_SUPPORTED_PAGES_PAGE, *PVPD_SUPPORTED_PAGES_PAGE;
02145 
02146 typedef struct _PRI_REGISTRATION_LIST {
02147   UCHAR Generation[4];
02148   UCHAR AdditionalLength[4];
02149   UCHAR ReservationKeyList[0][8];
02150 } PRI_REGISTRATION_LIST, *PPRI_REGISTRATION_LIST;
02151 
02152 typedef struct _PRI_RESERVATION_DESCRIPTOR {
02153   UCHAR ReservationKey[8];
02154   UCHAR ScopeSpecificAddress[4];
02155   UCHAR Reserved;
02156   UCHAR Type:4;
02157   UCHAR Scope:4;
02158   UCHAR Obsolete[2];
02159 } PRI_RESERVATION_DESCRIPTOR, *PPRI_RESERVATION_DESCRIPTOR;
02160 
02161 typedef struct _PRI_RESERVATION_LIST {
02162   UCHAR Generation[4];
02163   UCHAR AdditionalLength[4];
02164   PRI_RESERVATION_DESCRIPTOR Reservations[0];
02165 } PRI_RESERVATION_LIST, *PPRI_RESERVATION_LIST;
02166 
02167 typedef struct _PRO_PARAMETER_LIST {
02168   UCHAR ReservationKey[8];
02169   UCHAR ServiceActionReservationKey[8];
02170   UCHAR ScopeSpecificAddress[4];
02171   UCHAR ActivatePersistThroughPowerLoss:1;
02172   UCHAR Reserved1:7;
02173   UCHAR Reserved2;
02174   UCHAR Obsolete[2];
02175 } PRO_PARAMETER_LIST, *PPRO_PARAMETER_LIST;
02176 
02177 typedef struct _SENSE_DATA {
02178   UCHAR ErrorCode:7;
02179   UCHAR Valid:1;
02180   UCHAR SegmentNumber;
02181   UCHAR SenseKey:4;
02182   UCHAR Reserved:1;
02183   UCHAR IncorrectLength:1;
02184   UCHAR EndOfMedia:1;
02185   UCHAR FileMark:1;
02186   UCHAR Information[4];
02187   UCHAR AdditionalSenseLength;
02188   UCHAR CommandSpecificInformation[4];
02189   UCHAR AdditionalSenseCode;
02190   UCHAR AdditionalSenseCodeQualifier;
02191   UCHAR FieldReplaceableUnitCode;
02192   UCHAR SenseKeySpecific[3];
02193 } SENSE_DATA, *PSENSE_DATA;
02194 
02195 /* Read Capacity Data. Returned in Big Endian format */
02196 typedef struct _READ_CAPACITY_DATA {
02197   ULONG LogicalBlockAddress;
02198   ULONG BytesPerBlock;
02199 } READ_CAPACITY_DATA, *PREAD_CAPACITY_DATA;
02200 
02201 typedef struct _READ_CAPACITY_DATA_EX {
02202   LARGE_INTEGER LogicalBlockAddress;
02203   ULONG BytesPerBlock;
02204 } READ_CAPACITY_DATA_EX, *PREAD_CAPACITY_DATA_EX;
02205 
02206 /* Read Block Limits Data. Returned in Big Endian format */
02207 typedef struct _READ_BLOCK_LIMITS {
02208   UCHAR Reserved;
02209   UCHAR BlockMaximumSize[3];
02210   UCHAR BlockMinimumSize[2];
02211 } READ_BLOCK_LIMITS_DATA, *PREAD_BLOCK_LIMITS_DATA;
02212 
02213 typedef struct _READ_BUFFER_CAPACITY_DATA {
02214   UCHAR DataLength[2];
02215   UCHAR Reserved1;
02216   UCHAR BlockDataReturned:1;
02217   UCHAR Reserved4:7;
02218   UCHAR TotalBufferSize[4];
02219   UCHAR AvailableBufferSize[4];
02220 } READ_BUFFER_CAPACITY_DATA, *PREAD_BUFFER_CAPACITY_DATA;
02221 
02222 typedef struct _MODE_PARAMETER_HEADER {
02223   UCHAR ModeDataLength;
02224   UCHAR MediumType;
02225   UCHAR DeviceSpecificParameter;
02226   UCHAR BlockDescriptorLength;
02227 } MODE_PARAMETER_HEADER, *PMODE_PARAMETER_HEADER;
02228 
02229 typedef struct _MODE_PARAMETER_HEADER10 {
02230   UCHAR ModeDataLength[2];
02231   UCHAR MediumType;
02232   UCHAR DeviceSpecificParameter;
02233   UCHAR Reserved[2];
02234   UCHAR BlockDescriptorLength[2];
02235 } MODE_PARAMETER_HEADER10, *PMODE_PARAMETER_HEADER10;
02236 
02237 typedef struct _MODE_PARAMETER_BLOCK {
02238   UCHAR DensityCode;
02239   UCHAR NumberOfBlocks[3];
02240   UCHAR Reserved;
02241   UCHAR BlockLength[3];
02242 } MODE_PARAMETER_BLOCK, *PMODE_PARAMETER_BLOCK;
02243 
02244 typedef struct _MODE_DISCONNECT_PAGE {
02245   UCHAR PageCode:6;
02246   UCHAR Reserved:1;
02247   UCHAR PageSavable:1;
02248   UCHAR PageLength;
02249   UCHAR BufferFullRatio;
02250   UCHAR BufferEmptyRatio;
02251   UCHAR BusInactivityLimit[2];
02252   UCHAR BusDisconnectTime[2];
02253   UCHAR BusConnectTime[2];
02254   UCHAR MaximumBurstSize[2];
02255   UCHAR DataTransferDisconnect:2;
02256   UCHAR Reserved2[3];
02257 } MODE_DISCONNECT_PAGE, *PMODE_DISCONNECT_PAGE;
02258 
02259 typedef struct _MODE_CACHING_PAGE {
02260   UCHAR PageCode:6;
02261   UCHAR Reserved:1;
02262   UCHAR PageSavable:1;
02263   UCHAR PageLength;
02264   UCHAR ReadDisableCache:1;
02265   UCHAR MultiplicationFactor:1;
02266   UCHAR WriteCacheEnable:1;
02267   UCHAR Reserved2:5;
02268   UCHAR WriteRetensionPriority:4;
02269   UCHAR ReadRetensionPriority:4;
02270   UCHAR DisablePrefetchTransfer[2];
02271   UCHAR MinimumPrefetch[2];
02272   UCHAR MaximumPrefetch[2];
02273   UCHAR MaximumPrefetchCeiling[2];
02274 } MODE_CACHING_PAGE, *PMODE_CACHING_PAGE;
02275 
02276 typedef struct _MODE_CDROM_WRITE_PARAMETERS_PAGE2 {
02277   UCHAR PageCode:6;
02278   UCHAR Reserved:1;
02279   UCHAR PageSavable:1;
02280   UCHAR PageLength;
02281   UCHAR WriteType:4;
02282   UCHAR TestWrite:1;
02283   UCHAR LinkSizeValid:1;
02284   UCHAR BufferUnderrunFreeEnabled:1;
02285   UCHAR Reserved2:1;
02286   UCHAR TrackMode:4;
02287   UCHAR Copy:1;
02288   UCHAR FixedPacket:1;
02289   UCHAR MultiSession:2;
02290   UCHAR DataBlockType:4;
02291   UCHAR Reserved3:4;
02292   UCHAR LinkSize;
02293   UCHAR Reserved4;
02294   UCHAR HostApplicationCode:6;
02295   UCHAR Reserved5:2;
02296   UCHAR SessionFormat;
02297   UCHAR Reserved6;
02298   UCHAR PacketSize[4];
02299   UCHAR AudioPauseLength[2];
02300   UCHAR MediaCatalogNumber[16];
02301   UCHAR ISRC[16];
02302   UCHAR SubHeaderData[4];
02303 } MODE_CDROM_WRITE_PARAMETERS_PAGE2, *PMODE_CDROM_WRITE_PARAMETERS_PAGE2;
02304 
02305 typedef struct _MODE_MRW_PAGE {
02306   UCHAR PageCode:6;
02307   UCHAR Reserved:1;
02308   UCHAR PageSavable:1;
02309   UCHAR PageLength;
02310   UCHAR Reserved1;
02311   UCHAR LbaSpace:1;
02312   UCHAR Reserved2:7;
02313   UCHAR Reserved3[4];
02314 } MODE_MRW_PAGE, *PMODE_MRW_PAGE;
02315 
02316 typedef struct _MODE_FLEXIBLE_DISK_PAGE {
02317   UCHAR PageCode:6;
02318   UCHAR Reserved:1;
02319   UCHAR PageSavable:1;
02320   UCHAR PageLength;
02321   UCHAR TransferRate[2];
02322   UCHAR NumberOfHeads;
02323   UCHAR SectorsPerTrack;
02324   UCHAR BytesPerSector[2];
02325   UCHAR NumberOfCylinders[2];
02326   UCHAR StartWritePrecom[2];
02327   UCHAR StartReducedCurrent[2];
02328   UCHAR StepRate[2];
02329   UCHAR StepPluseWidth;
02330   UCHAR HeadSettleDelay[2];
02331   UCHAR MotorOnDelay;
02332   UCHAR MotorOffDelay;
02333   UCHAR Reserved2:5;
02334   UCHAR MotorOnAsserted:1;
02335   UCHAR StartSectorNumber:1;
02336   UCHAR TrueReadySignal:1;
02337   UCHAR StepPlusePerCyclynder:4;
02338   UCHAR Reserved3:4;
02339   UCHAR WriteCompenstation;
02340   UCHAR HeadLoadDelay;
02341   UCHAR HeadUnloadDelay;
02342   UCHAR Pin2Usage:4;
02343   UCHAR Pin34Usage:4;
02344   UCHAR Pin1Usage:4;
02345   UCHAR Pin4Usage:4;
02346   UCHAR MediumRotationRate[2];
02347   UCHAR Reserved4[2];
02348 } MODE_FLEXIBLE_DISK_PAGE, *PMODE_FLEXIBLE_DISK_PAGE;
02349 
02350 typedef struct _MODE_FORMAT_PAGE {
02351   UCHAR PageCode:6;
02352   UCHAR Reserved:1;
02353   UCHAR PageSavable:1;
02354   UCHAR PageLength;
02355   UCHAR TracksPerZone[2];
02356   UCHAR AlternateSectorsPerZone[2];
02357   UCHAR AlternateTracksPerZone[2];
02358   UCHAR AlternateTracksPerLogicalUnit[2];
02359   UCHAR SectorsPerTrack[2];
02360   UCHAR BytesPerPhysicalSector[2];
02361   UCHAR Interleave[2];
02362   UCHAR TrackSkewFactor[2];
02363   UCHAR CylinderSkewFactor[2];
02364   UCHAR Reserved2:4;
02365   UCHAR SurfaceFirst:1;
02366   UCHAR RemovableMedia:1;
02367   UCHAR HardSectorFormating:1;
02368   UCHAR SoftSectorFormating:1;
02369   UCHAR Reserved3[3];
02370 } MODE_FORMAT_PAGE, *PMODE_FORMAT_PAGE;
02371 
02372 typedef struct _MODE_RIGID_GEOMETRY_PAGE {
02373   UCHAR PageCode:6;
02374   UCHAR Reserved:1;
02375   UCHAR PageSavable:1;
02376   UCHAR PageLength;
02377   UCHAR NumberOfCylinders[3];
02378   UCHAR NumberOfHeads;
02379   UCHAR StartWritePrecom[3];
02380   UCHAR StartReducedCurrent[3];
02381   UCHAR DriveStepRate[2];
02382   UCHAR LandZoneCyclinder[3];
02383   UCHAR RotationalPositionLock:2;
02384   UCHAR Reserved2:6;
02385   UCHAR RotationOffset;
02386   UCHAR Reserved3;
02387   UCHAR RoataionRate[2];
02388   UCHAR Reserved4[2];
02389 } MODE_RIGID_GEOMETRY_PAGE, *PMODE_RIGID_GEOMETRY_PAGE;
02390 
02391 typedef struct _MODE_READ_WRITE_RECOVERY_PAGE {
02392   UCHAR PageCode:6;
02393   UCHAR Reserved1:1;
02394   UCHAR PSBit:1;
02395   UCHAR PageLength;
02396   UCHAR DCRBit:1;
02397   UCHAR DTEBit:1;
02398   UCHAR PERBit:1;
02399   UCHAR EERBit:1;
02400   UCHAR RCBit:1;
02401   UCHAR TBBit:1;
02402   UCHAR ARRE:1;
02403   UCHAR AWRE:1;
02404   UCHAR ReadRetryCount;
02405   UCHAR Reserved4[4];
02406   UCHAR WriteRetryCount;
02407   UCHAR Reserved5[3];
02408 } MODE_READ_WRITE_RECOVERY_PAGE, *PMODE_READ_WRITE_RECOVERY_PAGE;
02409 
02410 typedef struct _MODE_READ_RECOVERY_PAGE {
02411   UCHAR PageCode:6;
02412   UCHAR Reserved1:1;
02413   UCHAR PSBit:1;
02414   UCHAR PageLength;
02415   UCHAR DCRBit:1;
02416   UCHAR DTEBit:1;
02417   UCHAR PERBit:1;
02418   UCHAR Reserved2:1;
02419   UCHAR RCBit:1;
02420   UCHAR TBBit:1;
02421   UCHAR Reserved3:2;
02422   UCHAR ReadRetryCount;
02423   UCHAR Reserved4[4];
02424 } MODE_READ_RECOVERY_PAGE, *PMODE_READ_RECOVERY_PAGE;
02425 
02426 typedef struct _MODE_INFO_EXCEPTIONS {
02427   UCHAR PageCode:6;
02428   UCHAR Reserved1:1;
02429   UCHAR PSBit:1;
02430   UCHAR PageLength;
02431   _ANONYMOUS_UNION union {
02432     UCHAR Flags;
02433     _ANONYMOUS_STRUCT struct {
02434       UCHAR LogErr:1;
02435       UCHAR Reserved2:1;
02436       UCHAR Test:1;
02437       UCHAR Dexcpt:1;
02438       UCHAR Reserved3:3;
02439       UCHAR Perf:1;
02440     } DUMMYSTRUCTNAME;
02441   } DUMMYUNIONNAME;
02442   UCHAR ReportMethod:4;
02443   UCHAR Reserved4:4;
02444   UCHAR IntervalTimer[4];
02445   UCHAR ReportCount[4];
02446 } MODE_INFO_EXCEPTIONS, *PMODE_INFO_EXCEPTIONS;
02447 
02448 typedef struct _POWER_CONDITION_PAGE {
02449   UCHAR PageCode:6;
02450   UCHAR Reserved:1;
02451   UCHAR PSBit:1;
02452   UCHAR PageLength;
02453   UCHAR Reserved2;
02454   UCHAR Standby:1;
02455   UCHAR Idle:1;
02456   UCHAR Reserved3:6;
02457   UCHAR IdleTimer[4];
02458   UCHAR StandbyTimer[4];
02459 } POWER_CONDITION_PAGE, *PPOWER_CONDITION_PAGE;
02460 
02461 typedef struct _CDDA_OUTPUT_PORT {
02462   UCHAR ChannelSelection:4;
02463   UCHAR Reserved:4;
02464   UCHAR Volume;
02465 } CDDA_OUTPUT_PORT, *PCDDA_OUTPUT_PORT;
02466 
02467 typedef struct _CDAUDIO_CONTROL_PAGE {
02468   UCHAR PageCode:6;
02469   UCHAR Reserved:1;
02470   UCHAR PSBit:1;
02471   UCHAR PageLength;
02472   UCHAR Reserved2:1;
02473   UCHAR StopOnTrackCrossing:1;
02474   UCHAR Immediate:1;
02475   UCHAR Reserved3:5;
02476   UCHAR Reserved4[3];
02477   UCHAR Obsolete[2];
02478   CDDA_OUTPUT_PORT CDDAOutputPorts[4];
02479 } CDAUDIO_CONTROL_PAGE, *PCDAUDIO_CONTROL_PAGE;
02480 
02481 typedef struct _CDVD_FEATURE_SET_PAGE {
02482   UCHAR PageCode:6;
02483   UCHAR Reserved:1;
02484   UCHAR PSBit:1;
02485   UCHAR PageLength;
02486   UCHAR CDAudio[2];
02487   UCHAR EmbeddedChanger[2];
02488   UCHAR PacketSMART[2];
02489   UCHAR PersistantPrevent[2];
02490   UCHAR EventStatusNotification[2];
02491   UCHAR DigitalOutput[2];
02492   UCHAR CDSequentialRecordable[2];
02493   UCHAR DVDSequentialRecordable[2];
02494   UCHAR RandomRecordable[2];
02495   UCHAR KeyExchange[2];
02496   UCHAR Reserved2[2];
02497 } CDVD_FEATURE_SET_PAGE, *PCDVD_FEATURE_SET_PAGE;
02498 
02499 typedef struct _CDVD_INACTIVITY_TIMEOUT_PAGE {
02500   UCHAR PageCode:6;
02501   UCHAR Reserved:1;
02502   UCHAR PSBit:1;
02503   UCHAR PageLength;
02504   UCHAR Reserved2[2];
02505   UCHAR SWPP:1;
02506   UCHAR DISP:1;
02507   UCHAR Reserved3:6;
02508   UCHAR Reserved4;
02509   UCHAR GroupOneMinimumTimeout[2];
02510   UCHAR GroupTwoMinimumTimeout[2];
02511 } CDVD_INACTIVITY_TIMEOUT_PAGE, *PCDVD_INACTIVITY_TIMEOUT_PAGE;
02512 
02513 typedef struct _CDVD_CAPABILITIES_PAGE {
02514   UCHAR PageCode:6;
02515   UCHAR Reserved:1;
02516   UCHAR PSBit:1;
02517   UCHAR PageLength;
02518   UCHAR CDRRead:1;
02519   UCHAR CDERead:1;
02520   UCHAR Method2:1;
02521   UCHAR DVDROMRead:1;
02522   UCHAR DVDRRead:1;
02523   UCHAR DVDRAMRead:1;
02524   UCHAR Reserved2:2;
02525   UCHAR CDRWrite:1;
02526   UCHAR CDEWrite:1;
02527   UCHAR TestWrite:1;
02528   UCHAR Reserved3:1;
02529   UCHAR DVDRWrite:1;
02530   UCHAR DVDRAMWrite:1;
02531   UCHAR Reserved4:2;
02532   UCHAR AudioPlay:1;
02533   UCHAR Composite:1;
02534   UCHAR DigitalPortOne:1;
02535   UCHAR DigitalPortTwo:1;
02536   UCHAR Mode2Form1:1;
02537   UCHAR Mode2Form2:1;
02538   UCHAR MultiSession:1;
02539   UCHAR BufferUnderrunFree:1;
02540   UCHAR CDDA:1;
02541   UCHAR CDDAAccurate:1;
02542   UCHAR RWSupported:1;
02543   UCHAR RWDeinterleaved:1;
02544   UCHAR C2Pointers:1;
02545   UCHAR ISRC:1;
02546   UCHAR UPC:1;
02547   UCHAR ReadBarCodeCapable:1;
02548   UCHAR Lock:1;
02549   UCHAR LockState:1;
02550   UCHAR PreventJumper:1;
02551   UCHAR Eject:1;
02552   UCHAR Reserved6:1;
02553   UCHAR LoadingMechanismType:3;
02554   UCHAR SeparateVolume:1;
02555   UCHAR SeperateChannelMute:1;
02556   UCHAR SupportsDiskPresent:1;
02557   UCHAR SWSlotSelection:1;
02558   UCHAR SideChangeCapable:1;
02559   UCHAR RWInLeadInReadable:1;
02560   UCHAR Reserved7:2;
02561   _ANONYMOUS_UNION union {
02562     UCHAR ReadSpeedMaximum[2];
02563     UCHAR ObsoleteReserved[2];
02564   } DUMMYUNIONNAME;
02565   UCHAR NumberVolumeLevels[2];
02566   UCHAR BufferSize[2];
02567   _ANONYMOUS_UNION union {
02568     UCHAR ReadSpeedCurrent[2];
02569     UCHAR ObsoleteReserved2[2];
02570   } DUMMYUNIONNAME2;
02571   UCHAR ObsoleteReserved3;
02572   UCHAR Reserved8:1;
02573   UCHAR BCK:1;
02574   UCHAR RCK:1;
02575   UCHAR LSBF:1;
02576   UCHAR Length:2;
02577   UCHAR Reserved9:2;
02578   _ANONYMOUS_UNION union {
02579     UCHAR WriteSpeedMaximum[2];
02580     UCHAR ObsoleteReserved4[2];
02581   } DUMMYUNIONNAME3;
02582   _ANONYMOUS_UNION union {
02583     UCHAR WriteSpeedCurrent[2];
02584     UCHAR ObsoleteReserved11[2];
02585   } DUMMYUNIONNAME4;
02586   _ANONYMOUS_UNION union {
02587     UCHAR CopyManagementRevision[2];
02588     UCHAR Reserved10[2];
02589   } DUMMYUNIONNAME5;
02590 } CDVD_CAPABILITIES_PAGE, *PCDVD_CAPABILITIES_PAGE;
02591 
02592 typedef struct _LUN_LIST {
02593   UCHAR LunListLength[4];
02594   UCHAR Reserved[4];
02595   UCHAR Lun[0][8];
02596 } LUN_LIST, *PLUN_LIST;
02597 
02598 typedef struct _MODE_PARM_READ_WRITE {
02599   MODE_PARAMETER_HEADER ParameterListHeader;
02600   MODE_PARAMETER_BLOCK ParameterListBlock;
02601 } MODE_PARM_READ_WRITE_DATA, *PMODE_PARM_READ_WRITE_DATA;
02602 
02603 typedef struct _PORT_OUTPUT {
02604   UCHAR ChannelSelection;
02605   UCHAR Volume;
02606 } PORT_OUTPUT, *PPORT_OUTPUT;
02607 
02608 typedef struct _AUDIO_OUTPUT {
02609   UCHAR CodePage;
02610   UCHAR ParameterLength;
02611   UCHAR Immediate;
02612   UCHAR Reserved[2];
02613   UCHAR LbaFormat;
02614   UCHAR LogicalBlocksPerSecond[2];
02615   PORT_OUTPUT PortOutput[4];
02616 } AUDIO_OUTPUT, *PAUDIO_OUTPUT;
02617 
02618 /* Atapi 2.5 changers */
02619 typedef struct _MECHANICAL_STATUS_INFORMATION_HEADER {
02620   UCHAR CurrentSlot:5;
02621   UCHAR ChangerState:2;
02622   UCHAR Fault:1;
02623   UCHAR Reserved:5;
02624   UCHAR MechanismState:3;
02625   UCHAR CurrentLogicalBlockAddress[3];
02626   UCHAR NumberAvailableSlots;
02627   UCHAR SlotTableLength[2];
02628 } MECHANICAL_STATUS_INFORMATION_HEADER, *PMECHANICAL_STATUS_INFORMATION_HEADER;
02629 
02630 typedef struct _SLOT_TABLE_INFORMATION {
02631   UCHAR DiscChanged:1;
02632   UCHAR Reserved:6;
02633   UCHAR DiscPresent:1;
02634   UCHAR Reserved2[3];
02635 } SLOT_TABLE_INFORMATION, *PSLOT_TABLE_INFORMATION;
02636 
02637 typedef struct _MECHANICAL_STATUS {
02638   MECHANICAL_STATUS_INFORMATION_HEADER MechanicalStatusHeader;
02639   SLOT_TABLE_INFORMATION SlotTableInfo[1];
02640 } MECHANICAL_STATUS, *PMECHANICAL_STATUS;
02641 
02642 /* Tape definitions */
02643 typedef struct _TAPE_POSITION_DATA {
02644   UCHAR Reserved1:2;
02645   UCHAR BlockPositionUnsupported:1;
02646   UCHAR Reserved2:3;
02647   UCHAR EndOfPartition:1;
02648   UCHAR BeginningOfPartition:1;
02649   UCHAR PartitionNumber;
02650   USHORT Reserved3;
02651   UCHAR FirstBlock[4];
02652   UCHAR LastBlock[4];
02653   UCHAR Reserved4;
02654   UCHAR NumberOfBlocks[3];
02655   UCHAR NumberOfBytes[4];
02656 } TAPE_POSITION_DATA, *PTAPE_POSITION_DATA;
02657 
02658 /* This structure is used to convert little endian ULONGs
02659    to SCSI CDB big endians values. */
02660 typedef union _EIGHT_BYTE {
02661   _ANONYMOUS_STRUCT struct {
02662     UCHAR Byte0;
02663     UCHAR Byte1;
02664     UCHAR Byte2;
02665     UCHAR Byte3;
02666     UCHAR Byte4;
02667     UCHAR Byte5;
02668     UCHAR Byte6;
02669     UCHAR Byte7;
02670   } DUMMYSTRUCTNAME;
02671   ULONGLONG AsULongLong;
02672 } EIGHT_BYTE, *PEIGHT_BYTE;
02673 
02674 typedef union _FOUR_BYTE {
02675   _ANONYMOUS_STRUCT struct {
02676     UCHAR Byte0;
02677     UCHAR Byte1;
02678     UCHAR Byte2;
02679     UCHAR Byte3;
02680   } DUMMYSTRUCTNAME;
02681   ULONG AsULong;
02682 } FOUR_BYTE, *PFOUR_BYTE;
02683 
02684 typedef union _TWO_BYTE {
02685   _ANONYMOUS_STRUCT struct {
02686     UCHAR Byte0;
02687     UCHAR Byte1;
02688   } DUMMYSTRUCTNAME;
02689   USHORT AsUShort;
02690 } TWO_BYTE, *PTWO_BYTE;
02691 
02692 /* Byte reversing macro for converting between
02693    big- and little-endian formats */
02694 #define REVERSE_BYTES_QUAD(Destination, Source) { \
02695   PEIGHT_BYTE _val1 = (PEIGHT_BYTE)(Destination); \
02696   PEIGHT_BYTE _val2 = (PEIGHT_BYTE)(Source); \
02697   _val1->Byte7 = _val2->Byte0; \
02698   _val1->Byte6 = _val2->Byte1; \
02699   _val1->Byte5 = _val2->Byte2; \
02700   _val1->Byte4 = _val2->Byte3; \
02701   _val1->Byte3 = _val2->Byte4; \
02702   _val1->Byte2 = _val2->Byte5; \
02703   _val1->Byte1 = _val2->Byte6; \
02704   _val1->Byte0 = _val2->Byte7; \
02705 }
02706 
02707 #define REVERSE_BYTES(Destination, Source) { \
02708   PFOUR_BYTE _val1 = (PFOUR_BYTE)(Destination); \
02709   PFOUR_BYTE _val2 = (PFOUR_BYTE)(Source); \
02710   _val1->Byte3 = _val2->Byte0; \
02711   _val1->Byte2 = _val2->Byte1; \
02712   _val1->Byte1 = _val2->Byte2; \
02713   _val1->Byte0 = _val2->Byte3; \
02714 }
02715 
02716 #define REVERSE_BYTES_SHORT(Destination, Source) { \
02717   PTWO_BYTE _val1 = (PTWO_BYTE)(Destination); \
02718   PTWO_BYTE _val2 = (PTWO_BYTE)(Source); \
02719   _val1->Byte1 = _val2->Byte0; \
02720   _val1->Byte0 = _val2->Byte1; \
02721 }
02722 
02723 #define REVERSE_SHORT(Short) { \
02724   UCHAR _val; \
02725   PTWO_BYTE _val2 = (PTWO_BYTE)(Short); \
02726   _val = _val2->Byte0; \
02727   _val2->Byte0 = _val2->Byte1; \
02728   _val2->Byte1 = _val; \
02729 }
02730 
02731 #define REVERSE_LONG(Long) { \
02732   UCHAR _val; \
02733   PFOUR_BYTE _val2 = (PFOUR_BYTE)(Long); \
02734   _val = _val2->Byte3; \
02735   _val2->Byte3 = _val2->Byte0; \
02736   _val2->Byte0 = _val; \
02737   _val = _val2->Byte2; \
02738   _val2->Byte2 = _val2->Byte1; \
02739   _val2->Byte1 = _val; \
02740 }
02741 
02742 #define WHICH_BIT(Data, Bit) { \
02743   UCHAR _val; \
02744   for (_val = 0; _val < 32; _val++) { \
02745     if (((Data) >> _val) == 1) { \
02746       break; \
02747     } \
02748   } \
02749   ASSERT(_val != 32); \
02750   (Bit) = _val; \
02751 }
02752 
02753 /* FIXME : This structure doesn't exist in the official header */
02754 typedef struct _MODE_CDROM_WRITE_PARAMETERS_PAGE {
02755   UCHAR PageLength;
02756   UCHAR WriteType:4;
02757   UCHAR TestWrite:1;
02758   UCHAR LinkSizeValid:1;
02759   UCHAR BufferUnderrunFreeEnabled:1;
02760   UCHAR Reserved2:1;
02761   UCHAR TrackMode:4;
02762   UCHAR Copy:1;
02763   UCHAR FixedPacket:1;
02764   UCHAR MultiSession:2;
02765   UCHAR DataBlockType:4;
02766   UCHAR Reserved3:4;
02767   UCHAR LinkSize;
02768   UCHAR Reserved4;
02769   UCHAR HostApplicationCode:6;
02770   UCHAR Reserved5:2;
02771   UCHAR SessionFormat;
02772   UCHAR Reserved6;
02773   UCHAR PacketSize[4];
02774   UCHAR AudioPauseLength[2];
02775   UCHAR Reserved7:7;
02776   UCHAR MediaCatalogNumberValid:1;
02777   UCHAR MediaCatalogNumber[13];
02778   UCHAR MediaCatalogNumberZero;
02779   UCHAR MediaCatalogNumberAFrame;
02780   UCHAR Reserved8:7;
02781   UCHAR ISRCValid:1;
02782   UCHAR ISRCCountry[2];
02783   UCHAR ISRCOwner[3];
02784   UCHAR ISRCRecordingYear[2];
02785   UCHAR ISRCSerialNumber[5];
02786   UCHAR ISRCZero;
02787   UCHAR ISRCAFrame;
02788   UCHAR ISRCReserved;
02789   UCHAR SubHeaderData[4];
02790 } MODE_CDROM_WRITE_PARAMETERS_PAGE, *PMODE_CDROM_WRITE_PARAMETERS_PAGE;
02791 
02792 #ifdef __cplusplus
02793 }
02794 #endif
02795 
02796 #endif /* _NTSCSI_ */

Generated on Sun May 27 2012 04:28:28 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.