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