Mercurial > games > semicongine
comparison fuhtark_test/include/ddk/scsi.h @ 1500:91c8c3b7cbf0
add: futhark tests for generating vulkan api
| author | sam <sam@basx.dev> |
|---|---|
| date | Wed, 26 Nov 2025 21:36:48 +0700 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1499:1f58458b7ef7 | 1500:91c8c3b7cbf0 |
|---|---|
| 1 /* | |
| 2 * scsi.h | |
| 3 * | |
| 4 * SCSI port and class interface. | |
| 5 * | |
| 6 * This file is part of the w32api package. | |
| 7 * | |
| 8 * Contributors: | |
| 9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> | |
| 10 * | |
| 11 * THIS SOFTWARE IS NOT COPYRIGHTED | |
| 12 * | |
| 13 * This source code is offered for use in the public domain. You may | |
| 14 * use, modify or distribute it freely. | |
| 15 * | |
| 16 * This code is distributed in the hope that it will be useful but | |
| 17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY | |
| 18 * DISCLAIMED. This includes but is not limited to warranties of | |
| 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
| 20 * | |
| 21 */ | |
| 22 | |
| 23 #ifndef _NTSCSI_ | |
| 24 #define _NTSCSI_ | |
| 25 | |
| 26 #ifdef __cplusplus | |
| 27 extern "C" { | |
| 28 #endif | |
| 29 | |
| 30 typedef union _CDB { | |
| 31 struct _CDB6GENERIC { | |
| 32 UCHAR OperationCode; | |
| 33 UCHAR Immediate : 1; | |
| 34 UCHAR CommandUniqueBits : 4; | |
| 35 UCHAR LogicalUnitNumber : 3; | |
| 36 UCHAR CommandUniqueBytes[3]; | |
| 37 UCHAR Link : 1; | |
| 38 UCHAR Flag : 1; | |
| 39 UCHAR Reserved : 4; | |
| 40 UCHAR VendorUnique : 2; | |
| 41 } CDB6GENERIC, *PCDB6GENERIC; | |
| 42 | |
| 43 struct _CDB6READWRITE { | |
| 44 UCHAR OperationCode; | |
| 45 UCHAR LogicalBlockMsb1 : 5; | |
| 46 UCHAR LogicalUnitNumber : 3; | |
| 47 UCHAR LogicalBlockMsb0; | |
| 48 UCHAR LogicalBlockLsb; | |
| 49 UCHAR TransferBlocks; | |
| 50 UCHAR Control; | |
| 51 } CDB6READWRITE, *PCDB6READWRITE; | |
| 52 | |
| 53 struct _CDB6INQUIRY { | |
| 54 UCHAR OperationCode; | |
| 55 UCHAR Reserved1 : 5; | |
| 56 UCHAR LogicalUnitNumber : 3; | |
| 57 UCHAR PageCode; | |
| 58 UCHAR IReserved; | |
| 59 UCHAR AllocationLength; | |
| 60 UCHAR Control; | |
| 61 } CDB6INQUIRY, *PCDB6INQUIRY; | |
| 62 | |
| 63 struct _CDB6INQUIRY3 { | |
| 64 UCHAR OperationCode; | |
| 65 UCHAR EnableVitalProductData : 1; | |
| 66 UCHAR CommandSupportData : 1; | |
| 67 UCHAR Reserved1 : 6; | |
| 68 UCHAR PageCode; | |
| 69 UCHAR Reserved2; | |
| 70 UCHAR AllocationLength; | |
| 71 UCHAR Control; | |
| 72 } CDB6INQUIRY3, *PCDB6INQUIRY3; | |
| 73 | |
| 74 struct _CDB6VERIFY { | |
| 75 UCHAR OperationCode; | |
| 76 UCHAR Fixed : 1; | |
| 77 UCHAR ByteCompare : 1; | |
| 78 UCHAR Immediate : 1; | |
| 79 UCHAR Reserved : 2; | |
| 80 UCHAR LogicalUnitNumber : 3; | |
| 81 UCHAR VerificationLength[3]; | |
| 82 UCHAR Control; | |
| 83 } CDB6VERIFY, *PCDB6VERIFY; | |
| 84 | |
| 85 struct _CDB6FORMAT { | |
| 86 UCHAR OperationCode; | |
| 87 UCHAR FormatControl : 5; | |
| 88 UCHAR LogicalUnitNumber : 3; | |
| 89 UCHAR FReserved1; | |
| 90 UCHAR InterleaveMsb; | |
| 91 UCHAR InterleaveLsb; | |
| 92 UCHAR FReserved2; | |
| 93 } CDB6FORMAT, *PCDB6FORMAT; | |
| 94 | |
| 95 struct _CDB10 { | |
| 96 UCHAR OperationCode; | |
| 97 UCHAR RelativeAddress : 1; | |
| 98 UCHAR Reserved1 : 2; | |
| 99 UCHAR ForceUnitAccess : 1; | |
| 100 UCHAR DisablePageOut : 1; | |
| 101 UCHAR LogicalUnitNumber : 3; | |
| 102 UCHAR LogicalBlockByte0; | |
| 103 UCHAR LogicalBlockByte1; | |
| 104 UCHAR LogicalBlockByte2; | |
| 105 UCHAR LogicalBlockByte3; | |
| 106 UCHAR Reserved2; | |
| 107 UCHAR TransferBlocksMsb; | |
| 108 UCHAR TransferBlocksLsb; | |
| 109 UCHAR Control; | |
| 110 } CDB10, *PCDB10; | |
| 111 | |
| 112 struct _CDB12 { | |
| 113 UCHAR OperationCode; | |
| 114 UCHAR RelativeAddress : 1; | |
| 115 UCHAR Reserved1 : 2; | |
| 116 UCHAR ForceUnitAccess : 1; | |
| 117 UCHAR DisablePageOut : 1; | |
| 118 UCHAR LogicalUnitNumber : 3; | |
| 119 UCHAR LogicalBlock[4]; | |
| 120 UCHAR TransferLength[4]; | |
| 121 UCHAR Reserved2; | |
| 122 UCHAR Control; | |
| 123 } CDB12, *PCDB12; | |
| 124 | |
| 125 struct _CDB16 { | |
| 126 UCHAR OperationCode; | |
| 127 UCHAR Reserved1 : 3; | |
| 128 UCHAR ForceUnitAccess : 1; | |
| 129 UCHAR DisablePageOut : 1; | |
| 130 UCHAR Protection : 3; | |
| 131 UCHAR LogicalBlock[8]; | |
| 132 UCHAR TransferLength[4]; | |
| 133 UCHAR Reserved2; | |
| 134 UCHAR Control; | |
| 135 } CDB16, *PCDB16; | |
| 136 | |
| 137 struct _PAUSE_RESUME { | |
| 138 UCHAR OperationCode; | |
| 139 UCHAR Reserved1 : 5; | |
| 140 UCHAR LogicalUnitNumber : 3; | |
| 141 UCHAR Reserved2[6]; | |
| 142 UCHAR Action; | |
| 143 UCHAR Control; | |
| 144 } PAUSE_RESUME, *PPAUSE_RESUME; | |
| 145 | |
| 146 struct _READ_TOC { | |
| 147 UCHAR OperationCode; | |
| 148 UCHAR Reserved0 : 1; | |
| 149 UCHAR Msf : 1; | |
| 150 UCHAR Reserved1 : 3; | |
| 151 UCHAR LogicalUnitNumber : 3; | |
| 152 UCHAR Format2 : 4; | |
| 153 UCHAR Reserved2 : 4; | |
| 154 UCHAR Reserved3[3]; | |
| 155 UCHAR StartingTrack; | |
| 156 UCHAR AllocationLength[2]; | |
| 157 UCHAR Control : 6; | |
| 158 UCHAR Format : 2; | |
| 159 } READ_TOC, *PREAD_TOC; | |
| 160 | |
| 161 struct _READ_DISK_INFORMATION { | |
| 162 UCHAR OperationCode; | |
| 163 UCHAR Reserved1 : 5; | |
| 164 UCHAR Lun : 3; | |
| 165 UCHAR Reserved2[5]; | |
| 166 UCHAR AllocationLength[2]; | |
| 167 UCHAR Control; | |
| 168 } READ_DISK_INFORMATION, *PREAD_DISK_INFORMATION; | |
| 169 | |
| 170 struct _READ_TRACK_INFORMATION { | |
| 171 UCHAR OperationCode; | |
| 172 UCHAR Track : 1; | |
| 173 UCHAR Reserved1 : 3; | |
| 174 UCHAR Reserved2 : 1; | |
| 175 UCHAR Lun : 3; | |
| 176 UCHAR BlockAddress[4]; | |
| 177 UCHAR Reserved3; | |
| 178 UCHAR AllocationLength[2]; | |
| 179 UCHAR Control; | |
| 180 } READ_TRACK_INFORMATION, *PREAD_TRACK_INFORMATION; | |
| 181 | |
| 182 struct _RESERVE_TRACK_RZONE { | |
| 183 UCHAR OperationCode; | |
| 184 UCHAR Reserved1[4]; | |
| 185 UCHAR ReservationSize[4]; | |
| 186 UCHAR Control; | |
| 187 } RESERVE_TRACK_RZONE, *PRESERVE_TRACK_RZONE; | |
| 188 | |
| 189 struct _SEND_OPC_INFORMATION { | |
| 190 UCHAR OperationCode; | |
| 191 UCHAR DoOpc : 1; | |
| 192 UCHAR Reserved : 7; | |
| 193 UCHAR Reserved1[5]; | |
| 194 UCHAR ParameterListLength[2]; | |
| 195 UCHAR Reserved2; | |
| 196 } SEND_OPC_INFORMATION, *PSEND_OPC_INFORMATION; | |
| 197 | |
| 198 struct _CLOSE_TRACK { | |
| 199 UCHAR OperationCode; | |
| 200 UCHAR Immediate : 1; | |
| 201 UCHAR Reserved1 : 7; | |
| 202 UCHAR Track : 1; | |
| 203 UCHAR Session : 1; | |
| 204 UCHAR Reserved2 : 6; | |
| 205 UCHAR Reserved3; | |
| 206 UCHAR TrackNumber[2]; | |
| 207 UCHAR Reserved4[3]; | |
| 208 UCHAR Control; | |
| 209 } CLOSE_TRACK, *PCLOSE_TRACK; | |
| 210 | |
| 211 struct _SEND_CUE_SHEET { | |
| 212 UCHAR OperationCode; | |
| 213 UCHAR Reserved[5]; | |
| 214 UCHAR CueSheetSize[3]; | |
| 215 UCHAR Control; | |
| 216 } SEND_CUE_SHEET, *PSEND_CUE_SHEET; | |
| 217 | |
| 218 struct _READ_HEADER { | |
| 219 UCHAR OperationCode; | |
| 220 UCHAR Reserved1 : 1; | |
| 221 UCHAR Msf : 1; | |
| 222 UCHAR Reserved2 : 3; | |
| 223 UCHAR Lun : 3; | |
| 224 UCHAR LogicalBlockAddress[4]; | |
| 225 UCHAR Reserved3; | |
| 226 UCHAR AllocationLength[2]; | |
| 227 UCHAR Control; | |
| 228 } READ_HEADER, *PREAD_HEADER; | |
| 229 | |
| 230 struct _PLAY_AUDIO { | |
| 231 UCHAR OperationCode; | |
| 232 UCHAR Reserved1 : 5; | |
| 233 UCHAR LogicalUnitNumber : 3; | |
| 234 UCHAR StartingBlockAddress[4]; | |
| 235 UCHAR Reserved2; | |
| 236 UCHAR PlayLength[2]; | |
| 237 UCHAR Control; | |
| 238 } PLAY_AUDIO, *PPLAY_AUDIO; | |
| 239 | |
| 240 struct _PLAY_AUDIO_MSF { | |
| 241 UCHAR OperationCode; | |
| 242 UCHAR Reserved1 : 5; | |
| 243 UCHAR LogicalUnitNumber : 3; | |
| 244 UCHAR Reserved2; | |
| 245 UCHAR StartingM; | |
| 246 UCHAR StartingS; | |
| 247 UCHAR StartingF; | |
| 248 UCHAR EndingM; | |
| 249 UCHAR EndingS; | |
| 250 UCHAR EndingF; | |
| 251 UCHAR Control; | |
| 252 } PLAY_AUDIO_MSF, *PPLAY_AUDIO_MSF; | |
| 253 | |
| 254 /* FIXME: Should the union be anonymous in C++ too? If so, | |
| 255 can't define named types _LBA and _MSF within anonymous union | |
| 256 for C++. */ | |
| 257 struct _PLAY_CD { | |
| 258 UCHAR OperationCode; | |
| 259 UCHAR Reserved1 : 1; | |
| 260 UCHAR CMSF : 1; | |
| 261 UCHAR ExpectedSectorType : 3; | |
| 262 UCHAR Lun : 3; | |
| 263 #ifndef __cplusplus | |
| 264 _ANONYMOUS_UNION | |
| 265 #endif | |
| 266 union { | |
| 267 struct _LBA { | |
| 268 UCHAR StartingBlockAddress[4]; | |
| 269 UCHAR PlayLength[4]; | |
| 270 } LBA; | |
| 271 | |
| 272 struct _MSF { | |
| 273 UCHAR Reserved1; | |
| 274 UCHAR StartingM; | |
| 275 UCHAR StartingS; | |
| 276 UCHAR StartingF; | |
| 277 UCHAR EndingM; | |
| 278 UCHAR EndingS; | |
| 279 UCHAR EndingF; | |
| 280 UCHAR Reserved2; | |
| 281 } MSF; | |
| 282 #ifndef __cplusplus | |
| 283 }DUMMYUNIONNAME; | |
| 284 #else | |
| 285 }u; | |
| 286 #endif | |
| 287 | |
| 288 UCHAR Audio : 1; | |
| 289 UCHAR Composite : 1; | |
| 290 UCHAR Port1 : 1; | |
| 291 UCHAR Port2 : 1; | |
| 292 UCHAR Reserved2 : 3; | |
| 293 UCHAR Speed : 1; | |
| 294 UCHAR Control; | |
| 295 } PLAY_CD, *PPLAY_CD; | |
| 296 | |
| 297 struct _SCAN_CD { | |
| 298 UCHAR OperationCode; | |
| 299 UCHAR RelativeAddress : 1; | |
| 300 UCHAR Reserved1 : 3; | |
| 301 UCHAR Direct : 1; | |
| 302 UCHAR Lun : 3; | |
| 303 UCHAR StartingAddress[4]; | |
| 304 UCHAR Reserved2[3]; | |
| 305 UCHAR Reserved3 : 6; | |
| 306 UCHAR Type : 2; | |
| 307 UCHAR Reserved4; | |
| 308 UCHAR Control; | |
| 309 } SCAN_CD, *PSCAN_CD; | |
| 310 | |
| 311 struct _STOP_PLAY_SCAN { | |
| 312 UCHAR OperationCode; | |
| 313 UCHAR Reserved1 : 5; | |
| 314 UCHAR Lun : 3; | |
| 315 UCHAR Reserved2[7]; | |
| 316 UCHAR Control; | |
| 317 } STOP_PLAY_SCAN, *PSTOP_PLAY_SCAN; | |
| 318 | |
| 319 struct _SUBCHANNEL { | |
| 320 UCHAR OperationCode; | |
| 321 UCHAR Reserved0 : 1; | |
| 322 UCHAR Msf : 1; | |
| 323 UCHAR Reserved1 : 3; | |
| 324 UCHAR LogicalUnitNumber : 3; | |
| 325 UCHAR Reserved2 : 6; | |
| 326 UCHAR SubQ : 1; | |
| 327 UCHAR Reserved3 : 1; | |
| 328 UCHAR Format; | |
| 329 UCHAR Reserved4[2]; | |
| 330 UCHAR TrackNumber; | |
| 331 UCHAR AllocationLength[2]; | |
| 332 UCHAR Control; | |
| 333 } SUBCHANNEL, *PSUBCHANNEL; | |
| 334 | |
| 335 struct _READ_CD { | |
| 336 UCHAR OperationCode; | |
| 337 UCHAR RelativeAddress : 1; | |
| 338 UCHAR Reserved0 : 1; | |
| 339 UCHAR ExpectedSectorType : 3; | |
| 340 UCHAR Lun : 3; | |
| 341 UCHAR StartingLBA[4]; | |
| 342 UCHAR TransferBlocks[3]; | |
| 343 UCHAR Reserved2 : 1; | |
| 344 UCHAR ErrorFlags : 2; | |
| 345 UCHAR IncludeEDC : 1; | |
| 346 UCHAR IncludeUserData : 1; | |
| 347 UCHAR HeaderCode : 2; | |
| 348 UCHAR IncludeSyncData : 1; | |
| 349 UCHAR SubChannelSelection : 3; | |
| 350 UCHAR Reserved3 : 5; | |
| 351 UCHAR Control; | |
| 352 } READ_CD, *PREAD_CD; | |
| 353 | |
| 354 struct _READ_CD_MSF { | |
| 355 UCHAR OperationCode; | |
| 356 UCHAR RelativeAddress : 1; | |
| 357 UCHAR Reserved1 : 1; | |
| 358 UCHAR ExpectedSectorType : 3; | |
| 359 UCHAR Lun : 3; | |
| 360 UCHAR Reserved2; | |
| 361 UCHAR StartingM; | |
| 362 UCHAR StartingS; | |
| 363 UCHAR StartingF; | |
| 364 UCHAR EndingM; | |
| 365 UCHAR EndingS; | |
| 366 UCHAR EndingF; | |
| 367 UCHAR Reserved3; | |
| 368 UCHAR Reserved4 : 1; | |
| 369 UCHAR ErrorFlags : 2; | |
| 370 UCHAR IncludeEDC : 1; | |
| 371 UCHAR IncludeUserData : 1; | |
| 372 UCHAR HeaderCode : 2; | |
| 373 UCHAR IncludeSyncData : 1; | |
| 374 UCHAR SubChannelSelection : 3; | |
| 375 UCHAR Reserved5 : 5; | |
| 376 UCHAR Control; | |
| 377 } READ_CD_MSF, *PREAD_CD_MSF; | |
| 378 | |
| 379 struct _PLXTR_READ_CDDA { | |
| 380 UCHAR OperationCode; | |
| 381 UCHAR Reserved0 : 5; | |
| 382 UCHAR LogicalUnitNumber : 3; | |
| 383 UCHAR LogicalBlockByte0; | |
| 384 UCHAR LogicalBlockByte1; | |
| 385 UCHAR LogicalBlockByte2; | |
| 386 UCHAR LogicalBlockByte3; | |
| 387 UCHAR TransferBlockByte0; | |
| 388 UCHAR TransferBlockByte1; | |
| 389 UCHAR TransferBlockByte2; | |
| 390 UCHAR TransferBlockByte3; | |
| 391 UCHAR SubCode; | |
| 392 UCHAR Control; | |
| 393 } PLXTR_READ_CDDA, *PPLXTR_READ_CDDA; | |
| 394 | |
| 395 struct _NEC_READ_CDDA { | |
| 396 UCHAR OperationCode; | |
| 397 UCHAR Reserved0; | |
| 398 UCHAR LogicalBlockByte0; | |
| 399 UCHAR LogicalBlockByte1; | |
| 400 UCHAR LogicalBlockByte2; | |
| 401 UCHAR LogicalBlockByte3; | |
| 402 UCHAR Reserved1; | |
| 403 UCHAR TransferBlockByte0; | |
| 404 UCHAR TransferBlockByte1; | |
| 405 UCHAR Control; | |
| 406 } NEC_READ_CDDA, *PNEC_READ_CDDA; | |
| 407 | |
| 408 struct _MODE_SENSE { | |
| 409 UCHAR OperationCode; | |
| 410 UCHAR Reserved1 : 3; | |
| 411 UCHAR Dbd : 1; | |
| 412 UCHAR Reserved2 : 1; | |
| 413 UCHAR LogicalUnitNumber : 3; | |
| 414 UCHAR PageCode : 6; | |
| 415 UCHAR Pc : 2; | |
| 416 UCHAR Reserved3; | |
| 417 UCHAR AllocationLength; | |
| 418 UCHAR Control; | |
| 419 } MODE_SENSE, *PMODE_SENSE; | |
| 420 | |
| 421 struct _MODE_SENSE10 { | |
| 422 UCHAR OperationCode; | |
| 423 UCHAR Reserved1 : 3; | |
| 424 UCHAR Dbd : 1; | |
| 425 UCHAR Reserved2 : 1; | |
| 426 UCHAR LogicalUnitNumber : 3; | |
| 427 UCHAR PageCode : 6; | |
| 428 UCHAR Pc : 2; | |
| 429 UCHAR Reserved3[4]; | |
| 430 UCHAR AllocationLength[2]; | |
| 431 UCHAR Control; | |
| 432 } MODE_SENSE10, *PMODE_SENSE10; | |
| 433 | |
| 434 struct _MODE_SELECT { | |
| 435 UCHAR OperationCode; | |
| 436 UCHAR SPBit : 1; | |
| 437 UCHAR Reserved1 : 3; | |
| 438 UCHAR PFBit : 1; | |
| 439 UCHAR LogicalUnitNumber : 3; | |
| 440 UCHAR Reserved2[2]; | |
| 441 UCHAR ParameterListLength; | |
| 442 UCHAR Control; | |
| 443 } MODE_SELECT, *PMODE_SELECT; | |
| 444 | |
| 445 struct _MODE_SELECT10 { | |
| 446 UCHAR OperationCode; | |
| 447 UCHAR SPBit : 1; | |
| 448 UCHAR Reserved1 : 3; | |
| 449 UCHAR PFBit : 1; | |
| 450 UCHAR LogicalUnitNumber : 3; | |
| 451 UCHAR Reserved2[5]; | |
| 452 UCHAR ParameterListLength[2]; | |
| 453 UCHAR Control; | |
| 454 } MODE_SELECT10, *PMODE_SELECT10; | |
| 455 | |
| 456 struct _LOCATE { | |
| 457 UCHAR OperationCode; | |
| 458 UCHAR Immediate : 1; | |
| 459 UCHAR CPBit : 1; | |
| 460 UCHAR BTBit : 1; | |
| 461 UCHAR Reserved1 : 2; | |
| 462 UCHAR LogicalUnitNumber : 3; | |
| 463 UCHAR Reserved3; | |
| 464 UCHAR LogicalBlockAddress[4]; | |
| 465 UCHAR Reserved4; | |
| 466 UCHAR Partition; | |
| 467 UCHAR Control; | |
| 468 } LOCATE, *PLOCATE; | |
| 469 | |
| 470 struct _LOGSENSE { | |
| 471 UCHAR OperationCode; | |
| 472 UCHAR SPBit : 1; | |
| 473 UCHAR PPCBit : 1; | |
| 474 UCHAR Reserved1 : 3; | |
| 475 UCHAR LogicalUnitNumber : 3; | |
| 476 UCHAR PageCode : 6; | |
| 477 UCHAR PCBit : 2; | |
| 478 UCHAR Reserved2; | |
| 479 UCHAR Reserved3; | |
| 480 UCHAR ParameterPointer[2]; | |
| 481 UCHAR AllocationLength[2]; | |
| 482 UCHAR Control; | |
| 483 } LOGSENSE, *PLOGSENSE; | |
| 484 | |
| 485 struct _LOGSELECT { | |
| 486 UCHAR OperationCode; | |
| 487 UCHAR SPBit : 1; | |
| 488 UCHAR PCRBit : 1; | |
| 489 UCHAR Reserved1 : 3; | |
| 490 UCHAR LogicalUnitNumber : 3; | |
| 491 UCHAR Reserved : 6; | |
| 492 UCHAR PCBit : 2; | |
| 493 UCHAR Reserved2[4]; | |
| 494 UCHAR ParameterListLength[2]; | |
| 495 UCHAR Control; | |
| 496 } LOGSELECT, *PLOGSELECT; | |
| 497 | |
| 498 struct _PRINT { | |
| 499 UCHAR OperationCode; | |
| 500 UCHAR Reserved : 5; | |
| 501 UCHAR LogicalUnitNumber : 3; | |
| 502 UCHAR TransferLength[3]; | |
| 503 UCHAR Control; | |
| 504 } PRINT, *PPRINT; | |
| 505 | |
| 506 struct _SEEK { | |
| 507 UCHAR OperationCode; | |
| 508 UCHAR Reserved1 : 5; | |
| 509 UCHAR LogicalUnitNumber : 3; | |
| 510 UCHAR LogicalBlockAddress[4]; | |
| 511 UCHAR Reserved2[3]; | |
| 512 UCHAR Control; | |
| 513 } SEEK, *PSEEK; | |
| 514 | |
| 515 struct _ERASE { | |
| 516 UCHAR OperationCode; | |
| 517 UCHAR Long : 1; | |
| 518 UCHAR Immediate : 1; | |
| 519 UCHAR Reserved1 : 3; | |
| 520 UCHAR LogicalUnitNumber : 3; | |
| 521 UCHAR Reserved2[3]; | |
| 522 UCHAR Control; | |
| 523 } ERASE, *PERASE; | |
| 524 | |
| 525 struct _START_STOP { | |
| 526 UCHAR OperationCode; | |
| 527 UCHAR Immediate: 1; | |
| 528 UCHAR Reserved1 : 4; | |
| 529 UCHAR LogicalUnitNumber : 3; | |
| 530 UCHAR Reserved2[2]; | |
| 531 UCHAR Start : 1; | |
| 532 UCHAR LoadEject : 1; | |
| 533 UCHAR Reserved3 : 6; | |
| 534 UCHAR Control; | |
| 535 } START_STOP, *PSTART_STOP; | |
| 536 | |
| 537 struct _MEDIA_REMOVAL { | |
| 538 UCHAR OperationCode; | |
| 539 UCHAR Reserved1 : 5; | |
| 540 UCHAR LogicalUnitNumber : 3; | |
| 541 UCHAR Reserved2[2]; | |
| 542 | |
| 543 UCHAR Prevent : 1; | |
| 544 UCHAR Persistant : 1; | |
| 545 UCHAR Reserved3 : 6; | |
| 546 | |
| 547 UCHAR Control; | |
| 548 } MEDIA_REMOVAL, *PMEDIA_REMOVAL; | |
| 549 | |
| 550 struct _SEEK_BLOCK { | |
| 551 UCHAR OperationCode; | |
| 552 UCHAR Immediate : 1; | |
| 553 UCHAR Reserved1 : 7; | |
| 554 UCHAR BlockAddress[3]; | |
| 555 UCHAR Link : 1; | |
| 556 UCHAR Flag : 1; | |
| 557 UCHAR Reserved2 : 4; | |
| 558 UCHAR VendorUnique : 2; | |
| 559 } SEEK_BLOCK, *PSEEK_BLOCK; | |
| 560 | |
| 561 struct _REQUEST_BLOCK_ADDRESS { | |
| 562 UCHAR OperationCode; | |
| 563 UCHAR Reserved1[3]; | |
| 564 UCHAR AllocationLength; | |
| 565 UCHAR Link : 1; | |
| 566 UCHAR Flag : 1; | |
| 567 UCHAR Reserved2 : 4; | |
| 568 UCHAR VendorUnique : 2; | |
| 569 } REQUEST_BLOCK_ADDRESS, *PREQUEST_BLOCK_ADDRESS; | |
| 570 | |
| 571 struct _PARTITION { | |
| 572 UCHAR OperationCode; | |
| 573 UCHAR Immediate : 1; | |
| 574 UCHAR Sel: 1; | |
| 575 UCHAR PartitionSelect : 6; | |
| 576 UCHAR Reserved1[3]; | |
| 577 UCHAR Control; | |
| 578 } PARTITION, *PPARTITION; | |
| 579 | |
| 580 struct _WRITE_TAPE_MARKS { | |
| 581 UCHAR OperationCode; | |
| 582 UCHAR Immediate : 1; | |
| 583 UCHAR WriteSetMarks: 1; | |
| 584 UCHAR Reserved : 3; | |
| 585 UCHAR LogicalUnitNumber : 3; | |
| 586 UCHAR TransferLength[3]; | |
| 587 UCHAR Control; | |
| 588 } WRITE_TAPE_MARKS, *PWRITE_TAPE_MARKS; | |
| 589 | |
| 590 struct _SPACE_TAPE_MARKS { | |
| 591 UCHAR OperationCode; | |
| 592 UCHAR Code : 3; | |
| 593 UCHAR Reserved : 2; | |
| 594 UCHAR LogicalUnitNumber : 3; | |
| 595 UCHAR NumMarksMSB ; | |
| 596 UCHAR NumMarks; | |
| 597 UCHAR NumMarksLSB; | |
| 598 union { | |
| 599 UCHAR value; | |
| 600 struct { | |
| 601 UCHAR Link : 1; | |
| 602 UCHAR Flag : 1; | |
| 603 UCHAR Reserved : 4; | |
| 604 UCHAR VendorUnique : 2; | |
| 605 } Fields; | |
| 606 } Byte6; | |
| 607 } SPACE_TAPE_MARKS, *PSPACE_TAPE_MARKS; | |
| 608 | |
| 609 struct _READ_POSITION { | |
| 610 UCHAR Operation; | |
| 611 UCHAR BlockType : 1; | |
| 612 UCHAR Reserved1 : 4; | |
| 613 UCHAR Lun : 3; | |
| 614 UCHAR Reserved2[7]; | |
| 615 UCHAR Control; | |
| 616 } READ_POSITION, *PREAD_POSITION; | |
| 617 | |
| 618 struct _CDB6READWRITETAPE { | |
| 619 UCHAR OperationCode; | |
| 620 UCHAR VendorSpecific : 5; | |
| 621 UCHAR Reserved : 3; | |
| 622 UCHAR TransferLenMSB; | |
| 623 UCHAR TransferLen; | |
| 624 UCHAR TransferLenLSB; | |
| 625 UCHAR Link : 1; | |
| 626 UCHAR Flag : 1; | |
| 627 UCHAR Reserved1 : 4; | |
| 628 UCHAR VendorUnique : 2; | |
| 629 } CDB6READWRITETAPE, *PCDB6READWRITETAPE; | |
| 630 | |
| 631 struct _INIT_ELEMENT_STATUS { | |
| 632 UCHAR OperationCode; | |
| 633 UCHAR Reserved1 : 5; | |
| 634 UCHAR LogicalUnitNubmer : 3; | |
| 635 UCHAR Reserved2[3]; | |
| 636 UCHAR Reserved3 : 7; | |
| 637 UCHAR NoBarCode : 1; | |
| 638 } INIT_ELEMENT_STATUS, *PINIT_ELEMENT_STATUS; | |
| 639 | |
| 640 struct _INITIALIZE_ELEMENT_RANGE { | |
| 641 UCHAR OperationCode; | |
| 642 UCHAR Range : 1; | |
| 643 UCHAR Reserved1 : 4; | |
| 644 UCHAR LogicalUnitNubmer : 3; | |
| 645 UCHAR FirstElementAddress[2]; | |
| 646 UCHAR Reserved2[2]; | |
| 647 UCHAR NumberOfElements[2]; | |
| 648 UCHAR Reserved3; | |
| 649 UCHAR Reserved4 : 7; | |
| 650 UCHAR NoBarCode : 1; | |
| 651 } INITIALIZE_ELEMENT_RANGE, *PINITIALIZE_ELEMENT_RANGE; | |
| 652 | |
| 653 struct _POSITION_TO_ELEMENT { | |
| 654 UCHAR OperationCode; | |
| 655 UCHAR Reserved1 : 5; | |
| 656 UCHAR LogicalUnitNumber : 3; | |
| 657 UCHAR TransportElementAddress[2]; | |
| 658 UCHAR DestinationElementAddress[2]; | |
| 659 UCHAR Reserved2[2]; | |
| 660 UCHAR Flip : 1; | |
| 661 UCHAR Reserved3 : 7; | |
| 662 UCHAR Control; | |
| 663 } POSITION_TO_ELEMENT, *PPOSITION_TO_ELEMENT; | |
| 664 | |
| 665 struct _MOVE_MEDIUM { | |
| 666 UCHAR OperationCode; | |
| 667 UCHAR Reserved1 : 5; | |
| 668 UCHAR LogicalUnitNumber : 3; | |
| 669 UCHAR TransportElementAddress[2]; | |
| 670 UCHAR SourceElementAddress[2]; | |
| 671 UCHAR DestinationElementAddress[2]; | |
| 672 UCHAR Reserved2[2]; | |
| 673 UCHAR Flip : 1; | |
| 674 UCHAR Reserved3 : 7; | |
| 675 UCHAR Control; | |
| 676 } MOVE_MEDIUM, *PMOVE_MEDIUM; | |
| 677 | |
| 678 struct _EXCHANGE_MEDIUM { | |
| 679 UCHAR OperationCode; | |
| 680 UCHAR Reserved1 : 5; | |
| 681 UCHAR LogicalUnitNumber : 3; | |
| 682 UCHAR TransportElementAddress[2]; | |
| 683 UCHAR SourceElementAddress[2]; | |
| 684 UCHAR Destination1ElementAddress[2]; | |
| 685 UCHAR Destination2ElementAddress[2]; | |
| 686 UCHAR Flip1 : 1; | |
| 687 UCHAR Flip2 : 1; | |
| 688 UCHAR Reserved3 : 6; | |
| 689 UCHAR Control; | |
| 690 } EXCHANGE_MEDIUM, *PEXCHANGE_MEDIUM; | |
| 691 | |
| 692 struct _READ_ELEMENT_STATUS { | |
| 693 UCHAR OperationCode; | |
| 694 UCHAR ElementType : 4; | |
| 695 UCHAR VolTag : 1; | |
| 696 UCHAR LogicalUnitNumber : 3; | |
| 697 UCHAR StartingElementAddress[2]; | |
| 698 UCHAR NumberOfElements[2]; | |
| 699 UCHAR Reserved1; | |
| 700 UCHAR AllocationLength[3]; | |
| 701 UCHAR Reserved2; | |
| 702 UCHAR Control; | |
| 703 } READ_ELEMENT_STATUS, *PREAD_ELEMENT_STATUS; | |
| 704 | |
| 705 struct _SEND_VOLUME_TAG { | |
| 706 UCHAR OperationCode; | |
| 707 UCHAR ElementType : 4; | |
| 708 UCHAR Reserved1 : 1; | |
| 709 UCHAR LogicalUnitNumber : 3; | |
| 710 UCHAR StartingElementAddress[2]; | |
| 711 UCHAR Reserved2; | |
| 712 UCHAR ActionCode : 5; | |
| 713 UCHAR Reserved3 : 3; | |
| 714 UCHAR Reserved4[2]; | |
| 715 UCHAR ParameterListLength[2]; | |
| 716 UCHAR Reserved5; | |
| 717 UCHAR Control; | |
| 718 } SEND_VOLUME_TAG, *PSEND_VOLUME_TAG; | |
| 719 | |
| 720 struct _REQUEST_VOLUME_ELEMENT_ADDRESS { | |
| 721 UCHAR OperationCode; | |
| 722 UCHAR ElementType : 4; | |
| 723 UCHAR VolTag : 1; | |
| 724 UCHAR LogicalUnitNumber : 3; | |
| 725 UCHAR StartingElementAddress[2]; | |
| 726 UCHAR NumberElements[2]; | |
| 727 UCHAR Reserved1; | |
| 728 UCHAR AllocationLength[3]; | |
| 729 UCHAR Reserved2; | |
| 730 UCHAR Control; | |
| 731 } REQUEST_VOLUME_ELEMENT_ADDRESS, *PREQUEST_VOLUME_ELEMENT_ADDRESS; | |
| 732 | |
| 733 struct _LOAD_UNLOAD { | |
| 734 UCHAR OperationCode; | |
| 735 UCHAR Immediate : 1; | |
| 736 UCHAR Reserved1 : 4; | |
| 737 UCHAR Lun : 3; | |
| 738 UCHAR Reserved2[2]; | |
| 739 UCHAR Start : 1; | |
| 740 UCHAR LoadEject : 1; | |
| 741 UCHAR Reserved3: 6; | |
| 742 UCHAR Reserved4[3]; | |
| 743 UCHAR Slot; | |
| 744 UCHAR Reserved5[3]; | |
| 745 } LOAD_UNLOAD, *PLOAD_UNLOAD; | |
| 746 | |
| 747 struct _MECH_STATUS { | |
| 748 UCHAR OperationCode; | |
| 749 UCHAR Reserved : 5; | |
| 750 UCHAR Lun : 3; | |
| 751 UCHAR Reserved1[6]; | |
| 752 UCHAR AllocationLength[2]; | |
| 753 UCHAR Reserved2[1]; | |
| 754 UCHAR Control; | |
| 755 } MECH_STATUS, *PMECH_STATUS; | |
| 756 | |
| 757 struct _SYNCHRONIZE_CACHE10 { | |
| 758 | |
| 759 UCHAR OperationCode; | |
| 760 | |
| 761 UCHAR RelAddr : 1; | |
| 762 UCHAR Immediate : 1; | |
| 763 UCHAR Reserved : 3; | |
| 764 UCHAR Lun : 3; | |
| 765 | |
| 766 UCHAR LogicalBlockAddress[4]; | |
| 767 UCHAR Reserved2; | |
| 768 UCHAR BlockCount[2]; | |
| 769 UCHAR Control; | |
| 770 } SYNCHRONIZE_CACHE10, *PSYNCHRONIZE_CACHE10; | |
| 771 | |
| 772 struct _GET_EVENT_STATUS_NOTIFICATION { | |
| 773 UCHAR OperationCode; | |
| 774 | |
| 775 UCHAR Immediate : 1; | |
| 776 UCHAR Reserved : 4; | |
| 777 UCHAR Lun : 3; | |
| 778 | |
| 779 UCHAR Reserved2[2]; | |
| 780 UCHAR NotificationClassRequest; | |
| 781 UCHAR Reserved3[2]; | |
| 782 UCHAR EventListLength[2]; | |
| 783 | |
| 784 UCHAR Control; | |
| 785 } GET_EVENT_STATUS_NOTIFICATION, *PGET_EVENT_STATUS_NOTIFICATION; | |
| 786 | |
| 787 struct _READ_DVD_STRUCTURE { | |
| 788 UCHAR OperationCode; | |
| 789 UCHAR Reserved1 : 5; | |
| 790 UCHAR Lun : 3; | |
| 791 UCHAR RMDBlockNumber[4]; | |
| 792 UCHAR LayerNumber; | |
| 793 UCHAR Format; | |
| 794 UCHAR AllocationLength[2]; | |
| 795 UCHAR Reserved3 : 6; | |
| 796 UCHAR AGID : 2; | |
| 797 UCHAR Control; | |
| 798 } READ_DVD_STRUCTURE, *PREAD_DVD_STRUCTURE; | |
| 799 | |
| 800 struct _SEND_DVD_STRUCTURE { | |
| 801 UCHAR OperationCode; | |
| 802 UCHAR Reserved1 : 5; | |
| 803 UCHAR Lun : 3; | |
| 804 UCHAR Reserved2[5]; | |
| 805 UCHAR Format; | |
| 806 UCHAR ParameterListLength[2]; | |
| 807 UCHAR Reserved3; | |
| 808 UCHAR Control; | |
| 809 } SEND_DVD_STRUCTURE, *PSEND_DVD_STRUCTURE; | |
| 810 | |
| 811 struct _SEND_KEY { | |
| 812 UCHAR OperationCode; | |
| 813 UCHAR Reserved1 : 5; | |
| 814 UCHAR Lun : 3; | |
| 815 UCHAR Reserved2[6]; | |
| 816 UCHAR ParameterListLength[2]; | |
| 817 UCHAR KeyFormat : 6; | |
| 818 UCHAR AGID : 2; | |
| 819 UCHAR Control; | |
| 820 } SEND_KEY, *PSEND_KEY; | |
| 821 | |
| 822 struct _REPORT_KEY { | |
| 823 UCHAR OperationCode; | |
| 824 UCHAR Reserved1 : 5; | |
| 825 UCHAR Lun : 3; | |
| 826 UCHAR LogicalBlockAddress[4]; | |
| 827 UCHAR Reserved2[2]; | |
| 828 UCHAR AllocationLength[2]; | |
| 829 UCHAR KeyFormat : 6; | |
| 830 UCHAR AGID : 2; | |
| 831 UCHAR Control; | |
| 832 } REPORT_KEY, *PREPORT_KEY; | |
| 833 | |
| 834 struct _SET_READ_AHEAD { | |
| 835 UCHAR OperationCode; | |
| 836 UCHAR Reserved1 : 5; | |
| 837 UCHAR Lun : 3; | |
| 838 UCHAR TriggerLBA[4]; | |
| 839 UCHAR ReadAheadLBA[4]; | |
| 840 UCHAR Reserved2; | |
| 841 UCHAR Control; | |
| 842 } SET_READ_AHEAD, *PSET_READ_AHEAD; | |
| 843 | |
| 844 struct _READ_FORMATTED_CAPACITIES { | |
| 845 UCHAR OperationCode; | |
| 846 UCHAR Reserved1 : 5; | |
| 847 UCHAR Lun : 3; | |
| 848 UCHAR Reserved2[5]; | |
| 849 UCHAR AllocationLength[2]; | |
| 850 UCHAR Control; | |
| 851 } READ_FORMATTED_CAPACITIES, *PREAD_FORMATTED_CAPACITIES; | |
| 852 | |
| 853 struct _REPORT_LUNS { | |
| 854 UCHAR OperationCode; | |
| 855 UCHAR Reserved1[5]; | |
| 856 UCHAR AllocationLength[4]; | |
| 857 UCHAR Reserved2[1]; | |
| 858 UCHAR Control; | |
| 859 } REPORT_LUNS, *PREPORT_LUNS; | |
| 860 | |
| 861 struct _PERSISTENT_RESERVE_IN { | |
| 862 UCHAR OperationCode; | |
| 863 UCHAR ServiceAction : 5; | |
| 864 UCHAR Reserved1 : 3; | |
| 865 UCHAR Reserved2[5]; | |
| 866 UCHAR AllocationLength[2]; | |
| 867 UCHAR Control; | |
| 868 } PERSISTENT_RESERVE_IN, *PPERSISTENT_RESERVE_IN; | |
| 869 | |
| 870 struct _PERSISTENT_RESERVE_OUT { | |
| 871 UCHAR OperationCode; | |
| 872 UCHAR ServiceAction : 5; | |
| 873 UCHAR Reserved1 : 3; | |
| 874 UCHAR Type : 4; | |
| 875 UCHAR Scope : 4; | |
| 876 UCHAR Reserved2[4]; | |
| 877 UCHAR ParameterListLength[2]; | |
| 878 UCHAR Control; | |
| 879 } PERSISTENT_RESERVE_OUT, *PPERSISTENT_RESERVE_OUT; | |
| 880 | |
| 881 struct _GET_CONFIGURATION { | |
| 882 UCHAR OperationCode; | |
| 883 UCHAR RequestType : 1; | |
| 884 UCHAR Reserved1 : 7; | |
| 885 UCHAR StartingFeature[2]; | |
| 886 UCHAR Reserved2[3]; | |
| 887 UCHAR AllocationLength[2]; | |
| 888 UCHAR Control; | |
| 889 } GET_CONFIGURATION, *PGET_CONFIGURATION; | |
| 890 | |
| 891 struct _SET_CD_SPEED { | |
| 892 UCHAR OperationCode; | |
| 893 UCHAR Reserved1; | |
| 894 UCHAR ReadSpeed[2]; | |
| 895 UCHAR WriteSpeed[2]; | |
| 896 UCHAR Reserved2[5]; | |
| 897 UCHAR Control; | |
| 898 } SET_CD_SPEED, *PSET_CD_SPEED; | |
| 899 | |
| 900 ULONG AsUlong[4]; | |
| 901 UCHAR AsByte[16]; | |
| 902 } CDB, *PCDB; | |
| 903 | |
| 904 #ifndef _INQUIRYDATA_DEFINED /* also in minitape.h */ | |
| 905 #define _INQUIRYDATA_DEFINED | |
| 906 | |
| 907 #define INQUIRYDATABUFFERSIZE 36 | |
| 908 | |
| 909 typedef struct _INQUIRYDATA { | |
| 910 UCHAR DeviceType : 5; | |
| 911 UCHAR DeviceTypeQualifier : 3; | |
| 912 UCHAR DeviceTypeModifier : 7; | |
| 913 UCHAR RemovableMedia : 1; | |
| 914 _ANONYMOUS_UNION union { | |
| 915 UCHAR Versions; | |
| 916 _ANONYMOUS_STRUCT struct { | |
| 917 UCHAR ANSIVersion : 3; | |
| 918 UCHAR ECMAVersion : 3; | |
| 919 UCHAR ISOVersion : 2; | |
| 920 } DUMMYSTRUCTNAME; | |
| 921 } DUMMYUNIONNAME; | |
| 922 UCHAR ResponseDataFormat : 4; | |
| 923 UCHAR HiSupport : 1; | |
| 924 UCHAR NormACA : 1; | |
| 925 UCHAR TerminateTask : 1; | |
| 926 UCHAR AERC : 1; | |
| 927 UCHAR AdditionalLength; | |
| 928 UCHAR Reserved; | |
| 929 UCHAR Addr16 : 1; | |
| 930 UCHAR Addr32 : 1; | |
| 931 UCHAR AckReqQ: 1; | |
| 932 UCHAR MediumChanger : 1; | |
| 933 UCHAR MultiPort : 1; | |
| 934 UCHAR ReservedBit2 : 1; | |
| 935 UCHAR EnclosureServices : 1; | |
| 936 UCHAR ReservedBit3 : 1; | |
| 937 UCHAR SoftReset : 1; | |
| 938 UCHAR CommandQueue : 1; | |
| 939 UCHAR TransferDisable : 1; | |
| 940 UCHAR LinkedCommands : 1; | |
| 941 UCHAR Synchronous : 1; | |
| 942 UCHAR Wide16Bit : 1; | |
| 943 UCHAR Wide32Bit : 1; | |
| 944 UCHAR RelativeAddressing : 1; | |
| 945 UCHAR VendorId[8]; | |
| 946 UCHAR ProductId[16]; | |
| 947 UCHAR ProductRevisionLevel[4]; | |
| 948 UCHAR VendorSpecific[20]; | |
| 949 UCHAR Reserved3[40]; | |
| 950 } INQUIRYDATA, *PINQUIRYDATA; | |
| 951 #endif | |
| 952 | |
| 953 /* INQUIRYDATA.DeviceType constants */ | |
| 954 #define DIRECT_ACCESS_DEVICE 0x00 | |
| 955 #define SEQUENTIAL_ACCESS_DEVICE 0x01 | |
| 956 #define PRINTER_DEVICE 0x02 | |
| 957 #define PROCESSOR_DEVICE 0x03 | |
| 958 #define WRITE_ONCE_READ_MULTIPLE_DEVICE 0x04 | |
| 959 #define READ_ONLY_DIRECT_ACCESS_DEVICE 0x05 | |
| 960 #define SCANNER_DEVICE 0x06 | |
| 961 #define OPTICAL_DEVICE 0x07 | |
| 962 #define MEDIUM_CHANGER 0x08 | |
| 963 #define COMMUNICATION_DEVICE 0x09 | |
| 964 #define LOGICAL_UNIT_NOT_PRESENT_DEVICE 0x7F | |
| 965 #define DEVICE_QUALIFIER_NOT_SUPPORTED 0x03 | |
| 966 | |
| 967 /* INQUIRYDATA.DeviceTypeQualifier constants */ | |
| 968 #define DEVICE_CONNECTED 0x00 | |
| 969 | |
| 970 #define SCSISTAT_GOOD 0x00 | |
| 971 #define SCSISTAT_CHECK_CONDITION 0x02 | |
| 972 #define SCSISTAT_CONDITION_MET 0x04 | |
| 973 #define SCSISTAT_BUSY 0x08 | |
| 974 #define SCSISTAT_INTERMEDIATE 0x10 | |
| 975 #define SCSISTAT_INTERMEDIATE_COND_MET 0x14 | |
| 976 #define SCSISTAT_RESERVATION_CONFLICT 0x18 | |
| 977 #define SCSISTAT_COMMAND_TERMINATED 0x22 | |
| 978 #define SCSISTAT_QUEUE_FULL 0x28 | |
| 979 | |
| 980 /* Mode Sense/Select page constants */ | |
| 981 #define MODE_PAGE_ERROR_RECOVERY 0x01 | |
| 982 #define MODE_PAGE_DISCONNECT 0x02 | |
| 983 #define MODE_PAGE_FORMAT_DEVICE 0x03 | |
| 984 #define MODE_PAGE_RIGID_GEOMETRY 0x04 | |
| 985 #define MODE_PAGE_FLEXIBILE 0x05 | |
| 986 #define MODE_PAGE_WRITE_PARAMETERS 0x05 | |
| 987 #define MODE_PAGE_VERIFY_ERROR 0x07 | |
| 988 #define MODE_PAGE_CACHING 0x08 | |
| 989 #define MODE_PAGE_PERIPHERAL 0x09 | |
| 990 #define MODE_PAGE_CONTROL 0x0A | |
| 991 #define MODE_PAGE_MEDIUM_TYPES 0x0B | |
| 992 #define MODE_PAGE_NOTCH_PARTITION 0x0C | |
| 993 #define MODE_PAGE_CD_AUDIO_CONTROL 0x0E | |
| 994 #define MODE_PAGE_DATA_COMPRESS 0x0F | |
| 995 #define MODE_PAGE_DEVICE_CONFIG 0x10 | |
| 996 #define MODE_PAGE_MEDIUM_PARTITION 0x11 | |
| 997 #define MODE_PAGE_CDVD_FEATURE_SET 0x18 | |
| 998 #define MODE_PAGE_POWER_CONDITION 0x1A | |
| 999 #define MODE_PAGE_FAULT_REPORTING 0x1C | |
| 1000 #define MODE_PAGE_CDVD_INACTIVITY 0x1D | |
| 1001 #define MODE_PAGE_ELEMENT_ADDRESS 0x1D | |
| 1002 #define MODE_PAGE_TRANSPORT_GEOMETRY 0x1E | |
| 1003 #define MODE_PAGE_DEVICE_CAPABILITIES 0x1F | |
| 1004 #define MODE_PAGE_CAPABILITIES 0x2A | |
| 1005 #define MODE_SENSE_RETURN_ALL 0x3f | |
| 1006 #define MODE_SENSE_CURRENT_VALUES 0x00 | |
| 1007 #define MODE_SENSE_CHANGEABLE_VALUES 0x40 | |
| 1008 #define MODE_SENSE_DEFAULT_VAULES 0x80 | |
| 1009 #define MODE_SENSE_SAVED_VALUES 0xc0 | |
| 1010 | |
| 1011 /* SCSI CDB operation codes */ | |
| 1012 #define SCSIOP_TEST_UNIT_READY 0x00 | |
| 1013 #define SCSIOP_REZERO_UNIT 0x01 | |
| 1014 #define SCSIOP_REWIND 0x01 | |
| 1015 #define SCSIOP_REQUEST_BLOCK_ADDR 0x02 | |
| 1016 #define SCSIOP_REQUEST_SENSE 0x03 | |
| 1017 #define SCSIOP_FORMAT_UNIT 0x04 | |
| 1018 #define SCSIOP_READ_BLOCK_LIMITS 0x05 | |
| 1019 #define SCSIOP_REASSIGN_BLOCKS 0x07 | |
| 1020 #define SCSIOP_INIT_ELEMENT_STATUS 0x07 | |
| 1021 #define SCSIOP_READ6 0x08 | |
| 1022 #define SCSIOP_RECEIVE 0x08 | |
| 1023 #define SCSIOP_WRITE6 0x0A | |
| 1024 #define SCSIOP_PRINT 0x0A | |
| 1025 #define SCSIOP_SEND 0x0A | |
| 1026 #define SCSIOP_SEEK6 0x0B | |
| 1027 #define SCSIOP_TRACK_SELECT 0x0B | |
| 1028 #define SCSIOP_SLEW_PRINT 0x0B | |
| 1029 #define SCSIOP_SEEK_BLOCK 0x0C | |
| 1030 #define SCSIOP_PARTITION 0x0D | |
| 1031 #define SCSIOP_READ_REVERSE 0x0F | |
| 1032 #define SCSIOP_WRITE_FILEMARKS 0x10 | |
| 1033 #define SCSIOP_FLUSH_BUFFER 0x10 | |
| 1034 #define SCSIOP_SPACE 0x11 | |
| 1035 #define SCSIOP_INQUIRY 0x12 | |
| 1036 #define SCSIOP_VERIFY6 0x13 | |
| 1037 #define SCSIOP_RECOVER_BUF_DATA 0x14 | |
| 1038 #define SCSIOP_MODE_SELECT 0x15 | |
| 1039 #define SCSIOP_RESERVE_UNIT 0x16 | |
| 1040 #define SCSIOP_RELEASE_UNIT 0x17 | |
| 1041 #define SCSIOP_COPY 0x18 | |
| 1042 #define SCSIOP_ERASE 0x19 | |
| 1043 #define SCSIOP_MODE_SENSE 0x1A | |
| 1044 #define SCSIOP_START_STOP_UNIT 0x1B | |
| 1045 #define SCSIOP_STOP_PRINT 0x1B | |
| 1046 #define SCSIOP_LOAD_UNLOAD 0x1B | |
| 1047 #define SCSIOP_RECEIVE_DIAGNOSTIC 0x1C | |
| 1048 #define SCSIOP_SEND_DIAGNOSTIC 0x1D | |
| 1049 #define SCSIOP_MEDIUM_REMOVAL 0x1E | |
| 1050 | |
| 1051 #define SCSIOP_READ_FORMATTED_CAPACITY 0x23 | |
| 1052 #define SCSIOP_READ_CAPACITY 0x25 | |
| 1053 #define SCSIOP_READ 0x28 | |
| 1054 #define SCSIOP_WRITE 0x2A | |
| 1055 #define SCSIOP_SEEK 0x2B | |
| 1056 #define SCSIOP_LOCATE 0x2B | |
| 1057 #define SCSIOP_POSITION_TO_ELEMENT 0x2B | |
| 1058 #define SCSIOP_WRITE_VERIFY 0x2E | |
| 1059 #define SCSIOP_VERIFY 0x2F | |
| 1060 #define SCSIOP_SEARCH_DATA_HIGH 0x30 | |
| 1061 #define SCSIOP_SEARCH_DATA_EQUAL 0x31 | |
| 1062 #define SCSIOP_SEARCH_DATA_LOW 0x32 | |
| 1063 #define SCSIOP_SET_LIMITS 0x33 | |
| 1064 #define SCSIOP_READ_POSITION 0x34 | |
| 1065 #define SCSIOP_SYNCHRONIZE_CACHE 0x35 | |
| 1066 #define SCSIOP_COMPARE 0x39 | |
| 1067 #define SCSIOP_COPY_COMPARE 0x3A | |
| 1068 #define SCSIOP_WRITE_DATA_BUFF 0x3B | |
| 1069 #define SCSIOP_READ_DATA_BUFF 0x3C | |
| 1070 #define SCSIOP_CHANGE_DEFINITION 0x40 | |
| 1071 #define SCSIOP_READ_SUB_CHANNEL 0x42 | |
| 1072 #define SCSIOP_READ_TOC 0x43 | |
| 1073 #define SCSIOP_READ_HEADER 0x44 | |
| 1074 #define SCSIOP_PLAY_AUDIO 0x45 | |
| 1075 #define SCSIOP_GET_CONFIGURATION 0x46 | |
| 1076 #define SCSIOP_PLAY_AUDIO_MSF 0x47 | |
| 1077 #define SCSIOP_PLAY_TRACK_INDEX 0x48 | |
| 1078 #define SCSIOP_PLAY_TRACK_RELATIVE 0x49 | |
| 1079 #define SCSIOP_GET_EVENT_STATUS 0x4A | |
| 1080 #define SCSIOP_PAUSE_RESUME 0x4B | |
| 1081 #define SCSIOP_LOG_SELECT 0x4C | |
| 1082 #define SCSIOP_LOG_SENSE 0x4D | |
| 1083 #define SCSIOP_STOP_PLAY_SCAN 0x4E | |
| 1084 #define SCSIOP_READ_DISK_INFORMATION 0x51 | |
| 1085 #define SCSIOP_READ_TRACK_INFORMATION 0x52 | |
| 1086 #define SCSIOP_RESERVE_TRACK_RZONE 0x53 | |
| 1087 #define SCSIOP_SEND_OPC_INFORMATION 0x54 | |
| 1088 #define SCSIOP_MODE_SELECT10 0x55 | |
| 1089 #define SCSIOP_MODE_SENSE10 0x5A | |
| 1090 #define SCSIOP_CLOSE_TRACK_SESSION 0x5B | |
| 1091 #define SCSIOP_READ_BUFFER_CAPACITY 0x5C | |
| 1092 #define SCSIOP_SEND_CUE_SHEET 0x5D | |
| 1093 #define SCSIOP_PERSISTENT_RESERVE_IN 0x5E | |
| 1094 #define SCSIOP_PERSISTENT_RESERVE_OUT 0x5F | |
| 1095 | |
| 1096 #define SCSIOP_REPORT_LUNS 0xA0 | |
| 1097 #define SCSIOP_BLANK 0xA1 | |
| 1098 #define SCSIOP_SEND_KEY 0xA3 | |
| 1099 #define SCSIOP_REPORT_KEY 0xA4 | |
| 1100 #define SCSIOP_MOVE_MEDIUM 0xA5 | |
| 1101 #define SCSIOP_LOAD_UNLOAD_SLOT 0xA6 | |
| 1102 #define SCSIOP_EXCHANGE_MEDIUM 0xA6 | |
| 1103 #define SCSIOP_SET_READ_AHEAD 0xA7 | |
| 1104 #define SCSIOP_READ_DVD_STRUCTURE 0xAD | |
| 1105 #define SCSIOP_REQUEST_VOL_ELEMENT 0xB5 | |
| 1106 #define SCSIOP_SEND_VOLUME_TAG 0xB6 | |
| 1107 #define SCSIOP_READ_ELEMENT_STATUS 0xB8 | |
| 1108 #define SCSIOP_READ_CD_MSF 0xB9 | |
| 1109 #define SCSIOP_SCAN_CD 0xBA | |
| 1110 #define SCSIOP_SET_CD_SPEED 0xBB | |
| 1111 #define SCSIOP_PLAY_CD 0xBC | |
| 1112 #define SCSIOP_MECHANISM_STATUS 0xBD | |
| 1113 #define SCSIOP_READ_CD 0xBE | |
| 1114 #define SCSIOP_SEND_DVD_STRUCTURE 0xBF | |
| 1115 #define SCSIOP_INIT_ELEMENT_RANGE 0xE7 | |
| 1116 | |
| 1117 #define SCSIOP_DENON_EJECT_DISC 0xE6 | |
| 1118 #define SCSIOP_DENON_STOP_AUDIO 0xE7 | |
| 1119 #define SCSIOP_DENON_PLAY_AUDIO 0xE8 | |
| 1120 #define SCSIOP_DENON_READ_TOC 0xE9 | |
| 1121 #define SCSIOP_DENON_READ_SUBCODE 0xEB | |
| 1122 | |
| 1123 #define SCSIMESS_MODIFY_DATA_POINTER 0x00 | |
| 1124 #define SCSIMESS_SYNCHRONOUS_DATA_REQ 0x01 | |
| 1125 #define SCSIMESS_WIDE_DATA_REQUEST 0x03 | |
| 1126 | |
| 1127 #define SCSIMESS_MODIFY_DATA_LENGTH 5 | |
| 1128 #define SCSIMESS_SYNCH_DATA_LENGTH 3 | |
| 1129 #define SCSIMESS_WIDE_DATA_LENGTH 2 | |
| 1130 | |
| 1131 #define SCSIMESS_ABORT 0x06 | |
| 1132 #define SCSIMESS_ABORT_WITH_TAG 0x0D | |
| 1133 #define SCSIMESS_BUS_DEVICE_RESET 0x0C | |
| 1134 #define SCSIMESS_CLEAR_QUEUE 0x0E | |
| 1135 #define SCSIMESS_COMMAND_COMPLETE 0x00 | |
| 1136 #define SCSIMESS_DISCONNECT 0x04 | |
| 1137 #define SCSIMESS_EXTENDED_MESSAGE 0x01 | |
| 1138 #define SCSIMESS_IDENTIFY 0x80 | |
| 1139 #define SCSIMESS_IDENTIFY_WITH_DISCON 0xC0 | |
| 1140 #define SCSIMESS_IGNORE_WIDE_RESIDUE 0x23 | |
| 1141 #define SCSIMESS_INITIATE_RECOVERY 0x0F | |
| 1142 #define SCSIMESS_INIT_DETECTED_ERROR 0x05 | |
| 1143 #define SCSIMESS_LINK_CMD_COMP 0x0A | |
| 1144 #define SCSIMESS_LINK_CMD_COMP_W_FLAG 0x0B | |
| 1145 #define SCSIMESS_MESS_PARITY_ERROR 0x09 | |
| 1146 #define SCSIMESS_MESSAGE_REJECT 0x07 | |
| 1147 #define SCSIMESS_NO_OPERATION 0x08 | |
| 1148 #define SCSIMESS_HEAD_OF_QUEUE_TAG 0x21 | |
| 1149 #define SCSIMESS_ORDERED_QUEUE_TAG 0x22 | |
| 1150 #define SCSIMESS_SIMPLE_QUEUE_TAG 0x20 | |
| 1151 #define SCSIMESS_RELEASE_RECOVERY 0x10 | |
| 1152 #define SCSIMESS_RESTORE_POINTERS 0x03 | |
| 1153 #define SCSIMESS_SAVE_DATA_POINTER 0x02 | |
| 1154 #define SCSIMESS_TERMINATE_IO_PROCESS 0x11 | |
| 1155 | |
| 1156 #define CDB_FORCE_MEDIA_ACCESS 0x08 | |
| 1157 | |
| 1158 #define CDB_RETURN_ON_COMPLETION 0 | |
| 1159 #define CDB_RETURN_IMMEDIATE 1 | |
| 1160 | |
| 1161 #define CDB_INQUIRY_EVPD 0x01 | |
| 1162 | |
| 1163 #define LUN0_FORMAT_SAVING_DEFECT_LIST 0 | |
| 1164 #define USE_DEFAULTMSB 0 | |
| 1165 #define USE_DEFAULTLSB 0 | |
| 1166 | |
| 1167 #define START_UNIT_CODE 0x01 | |
| 1168 #define STOP_UNIT_CODE 0x00 | |
| 1169 | |
| 1170 typedef struct _SENSE_DATA { | |
| 1171 UCHAR ErrorCode : 7; | |
| 1172 UCHAR Valid : 1; | |
| 1173 UCHAR SegmentNumber; | |
| 1174 UCHAR SenseKey : 4; | |
| 1175 UCHAR Reserved : 1; | |
| 1176 UCHAR IncorrectLength : 1; | |
| 1177 UCHAR EndOfMedia : 1; | |
| 1178 UCHAR FileMark : 1; | |
| 1179 UCHAR Information[4]; | |
| 1180 UCHAR AdditionalSenseLength; | |
| 1181 UCHAR CommandSpecificInformation[4]; | |
| 1182 UCHAR AdditionalSenseCode; | |
| 1183 UCHAR AdditionalSenseCodeQualifier; | |
| 1184 UCHAR FieldReplaceableUnitCode; | |
| 1185 UCHAR SenseKeySpecific[3]; | |
| 1186 } SENSE_DATA, *PSENSE_DATA; | |
| 1187 | |
| 1188 #define SENSE_BUFFER_SIZE 18 | |
| 1189 | |
| 1190 /* Sense codes */ | |
| 1191 #define SCSI_SENSE_NO_SENSE 0x00 | |
| 1192 #define SCSI_SENSE_RECOVERED_ERROR 0x01 | |
| 1193 #define SCSI_SENSE_NOT_READY 0x02 | |
| 1194 #define SCSI_SENSE_MEDIUM_ERROR 0x03 | |
| 1195 #define SCSI_SENSE_HARDWARE_ERROR 0x04 | |
| 1196 #define SCSI_SENSE_ILLEGAL_REQUEST 0x05 | |
| 1197 #define SCSI_SENSE_UNIT_ATTENTION 0x06 | |
| 1198 #define SCSI_SENSE_DATA_PROTECT 0x07 | |
| 1199 #define SCSI_SENSE_BLANK_CHECK 0x08 | |
| 1200 #define SCSI_SENSE_UNIQUE 0x09 | |
| 1201 #define SCSI_SENSE_COPY_ABORTED 0x0A | |
| 1202 #define SCSI_SENSE_ABORTED_COMMAND 0x0B | |
| 1203 #define SCSI_SENSE_EQUAL 0x0C | |
| 1204 #define SCSI_SENSE_VOL_OVERFLOW 0x0D | |
| 1205 #define SCSI_SENSE_MISCOMPARE 0x0E | |
| 1206 #define SCSI_SENSE_RESERVED 0x0F | |
| 1207 | |
| 1208 /* Additional tape bit */ | |
| 1209 #define SCSI_ILLEGAL_LENGTH 0x20 | |
| 1210 #define SCSI_EOM 0x40 | |
| 1211 #define SCSI_FILE_MARK 0x80 | |
| 1212 | |
| 1213 /* Additional Sense codes */ | |
| 1214 #define SCSI_ADSENSE_NO_SENSE 0x00 | |
| 1215 #define SCSI_ADSENSE_NO_SEEK_COMPLETE 0x02 | |
| 1216 #define SCSI_ADSENSE_LUN_NOT_READY 0x04 | |
| 1217 #define SCSI_ADSENSE_WRITE_ERROR 0x0C | |
| 1218 #define SCSI_ADSENSE_TRACK_ERROR 0x14 | |
| 1219 #define SCSI_ADSENSE_SEEK_ERROR 0x15 | |
| 1220 #define SCSI_ADSENSE_REC_DATA_NOECC 0x17 | |
| 1221 #define SCSI_ADSENSE_REC_DATA_ECC 0x18 | |
| 1222 #define SCSI_ADSENSE_ILLEGAL_COMMAND 0x20 | |
| 1223 #define SCSI_ADSENSE_ILLEGAL_BLOCK 0x21 | |
| 1224 #define SCSI_ADSENSE_INVALID_CDB 0x24 | |
| 1225 #define SCSI_ADSENSE_INVALID_LUN 0x25 | |
| 1226 #define SCSI_ADSENSE_WRITE_PROTECT 0x27 | |
| 1227 #define SCSI_ADSENSE_MEDIUM_CHANGED 0x28 | |
| 1228 #define SCSI_ADSENSE_BUS_RESET 0x29 | |
| 1229 #define SCSI_ADSENSE_INSUFFICIENT_TIME_FOR_OPERATION 0x2E | |
| 1230 #define SCSI_ADSENSE_INVALID_MEDIA 0x30 | |
| 1231 #define SCSI_ADSENSE_NO_MEDIA_IN_DEVICE 0x3a | |
| 1232 #define SCSI_ADSENSE_POSITION_ERROR 0x3b | |
| 1233 #define SCSI_ADSENSE_OPERATOR_REQUEST 0x5a | |
| 1234 #define SCSI_ADSENSE_FAILURE_PREDICTION_THRESHOLD_EXCEEDED 0x5d | |
| 1235 #define SCSI_ADSENSE_ILLEGAL_MODE_FOR_THIS_TRACK 0x64 | |
| 1236 #define SCSI_ADSENSE_COPY_PROTECTION_FAILURE 0x6f | |
| 1237 #define SCSI_ADSENSE_POWER_CALIBRATION_ERROR 0x73 | |
| 1238 #define SCSI_ADSENSE_VENDOR_UNIQUE 0x80 | |
| 1239 #define SCSI_ADSENSE_MUSIC_AREA 0xA0 | |
| 1240 #define SCSI_ADSENSE_DATA_AREA 0xA1 | |
| 1241 #define SCSI_ADSENSE_VOLUME_OVERFLOW 0xA7 | |
| 1242 | |
| 1243 #define SCSI_SENSEQ_CAUSE_NOT_REPORTABLE 0x00 | |
| 1244 #define SCSI_SENSEQ_BECOMING_READY 0x01 | |
| 1245 #define SCSI_SENSEQ_INIT_COMMAND_REQUIRED 0x02 | |
| 1246 #define SCSI_SENSEQ_MANUAL_INTERVENTION_REQUIRED 0x03 | |
| 1247 #define SCSI_SENSEQ_FORMAT_IN_PROGRESS 0x04 | |
| 1248 #define SCSI_SENSEQ_REBUILD_IN_PROGRESS 0x05 | |
| 1249 #define SCSI_SENSEQ_RECALCULATION_IN_PROGRESS 0x06 | |
| 1250 #define SCSI_SENSEQ_OPERATION_IN_PROGRESS 0x07 | |
| 1251 #define SCSI_SENSEQ_LONG_WRITE_IN_PROGRESS 0x08 | |
| 1252 #define SCSI_SENSEQ_LOSS_OF_STREAMING 0x09 | |
| 1253 #define SCSI_SENSEQ_PADDING_BLOCKS_ADDED 0x0A | |
| 1254 | |
| 1255 | |
| 1256 #define FILE_DEVICE_SCSI 0x0000001b | |
| 1257 | |
| 1258 #define IOCTL_SCSI_EXECUTE_IN ((FILE_DEVICE_SCSI << 16) + 0x0011) | |
| 1259 #define IOCTL_SCSI_EXECUTE_OUT ((FILE_DEVICE_SCSI << 16) + 0x0012) | |
| 1260 #define IOCTL_SCSI_EXECUTE_NONE ((FILE_DEVICE_SCSI << 16) + 0x0013) | |
| 1261 | |
| 1262 /* SMART support in ATAPI */ | |
| 1263 #define IOCTL_SCSI_MINIPORT_SMART_VERSION ((FILE_DEVICE_SCSI << 16) + 0x0500) | |
| 1264 #define IOCTL_SCSI_MINIPORT_IDENTIFY ((FILE_DEVICE_SCSI << 16) + 0x0501) | |
| 1265 #define IOCTL_SCSI_MINIPORT_READ_SMART_ATTRIBS ((FILE_DEVICE_SCSI << 16) + 0x0502) | |
| 1266 #define IOCTL_SCSI_MINIPORT_READ_SMART_THRESHOLDS ((FILE_DEVICE_SCSI << 16) + 0x0503) | |
| 1267 #define IOCTL_SCSI_MINIPORT_ENABLE_SMART ((FILE_DEVICE_SCSI << 16) + 0x0504) | |
| 1268 #define IOCTL_SCSI_MINIPORT_DISABLE_SMART ((FILE_DEVICE_SCSI << 16) + 0x0505) | |
| 1269 #define IOCTL_SCSI_MINIPORT_RETURN_STATUS ((FILE_DEVICE_SCSI << 16) + 0x0506) | |
| 1270 #define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTOSAVE ((FILE_DEVICE_SCSI << 16) + 0x0507) | |
| 1271 #define IOCTL_SCSI_MINIPORT_SAVE_ATTRIBUTE_VALUES ((FILE_DEVICE_SCSI << 16) + 0x0508) | |
| 1272 #define IOCTL_SCSI_MINIPORT_EXECUTE_OFFLINE_DIAGS ((FILE_DEVICE_SCSI << 16) + 0x0509) | |
| 1273 #define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTO_OFFLINE ((FILE_DEVICE_SCSI << 16) + 0x050a) | |
| 1274 #define IOCTL_SCSI_MINIPORT_READ_SMART_LOG ((FILE_DEVICE_SCSI << 16) + 0x050b) | |
| 1275 #define IOCTL_SCSI_MINIPORT_WRITE_SMART_LOG ((FILE_DEVICE_SCSI << 16) + 0x050c) | |
| 1276 | |
| 1277 /* CLUSTER support */ | |
| 1278 #define IOCTL_SCSI_MINIPORT_NOT_QUORUM_CAPABLE ((FILE_DEVICE_SCSI << 16) + 0x0520) | |
| 1279 #define IOCTL_SCSI_MINIPORT_NOT_CLUSTER_CAPABLE ((FILE_DEVICE_SCSI << 16) + 0x0521) | |
| 1280 | |
| 1281 /* Read Capacity Data. Returned in Big Endian format */ | |
| 1282 typedef struct _READ_CAPACITY_DATA { | |
| 1283 ULONG LogicalBlockAddress; | |
| 1284 ULONG BytesPerBlock; | |
| 1285 } READ_CAPACITY_DATA, *PREAD_CAPACITY_DATA; | |
| 1286 | |
| 1287 /* Read Block Limits Data. Returned in Big Endian format */ | |
| 1288 typedef struct _READ_BLOCK_LIMITS { | |
| 1289 UCHAR Reserved; | |
| 1290 UCHAR BlockMaximumSize[3]; | |
| 1291 UCHAR BlockMinimumSize[2]; | |
| 1292 } READ_BLOCK_LIMITS_DATA, *PREAD_BLOCK_LIMITS_DATA; | |
| 1293 | |
| 1294 #define MODE_BLOCK_DESC_LENGTH 8 | |
| 1295 #define MODE_HEADER_LENGTH 4 | |
| 1296 #define MODE_HEADER_LENGTH10 8 | |
| 1297 | |
| 1298 typedef struct _MODE_PARAMETER_HEADER { | |
| 1299 UCHAR ModeDataLength; | |
| 1300 UCHAR MediumType; | |
| 1301 UCHAR DeviceSpecificParameter; | |
| 1302 UCHAR BlockDescriptorLength; | |
| 1303 } MODE_PARAMETER_HEADER, *PMODE_PARAMETER_HEADER; | |
| 1304 | |
| 1305 typedef struct _MODE_PARAMETER_HEADER10 { | |
| 1306 UCHAR ModeDataLength[2]; | |
| 1307 UCHAR MediumType; | |
| 1308 UCHAR DeviceSpecificParameter; | |
| 1309 UCHAR Reserved[2]; | |
| 1310 UCHAR BlockDescriptorLength[2]; | |
| 1311 } MODE_PARAMETER_HEADER10, *PMODE_PARAMETER_HEADER10; | |
| 1312 | |
| 1313 #define MODE_FD_SINGLE_SIDE 0x01 | |
| 1314 #define MODE_FD_DOUBLE_SIDE 0x02 | |
| 1315 #define MODE_FD_MAXIMUM_TYPE 0x1E | |
| 1316 #define MODE_DSP_FUA_SUPPORTED 0x10 | |
| 1317 #define MODE_DSP_WRITE_PROTECT 0x80 | |
| 1318 | |
| 1319 typedef struct _MODE_PARAMETER_BLOCK { | |
| 1320 UCHAR DensityCode; | |
| 1321 UCHAR NumberOfBlocks[3]; | |
| 1322 UCHAR Reserved; | |
| 1323 UCHAR BlockLength[3]; | |
| 1324 } MODE_PARAMETER_BLOCK, *PMODE_PARAMETER_BLOCK; | |
| 1325 | |
| 1326 typedef struct _MODE_DISCONNECT_PAGE { | |
| 1327 UCHAR PageCode : 6; | |
| 1328 UCHAR Reserved : 1; | |
| 1329 UCHAR PageSavable : 1; | |
| 1330 UCHAR PageLength; | |
| 1331 UCHAR BufferFullRatio; | |
| 1332 UCHAR BufferEmptyRatio; | |
| 1333 UCHAR BusInactivityLimit[2]; | |
| 1334 UCHAR BusDisconnectTime[2]; | |
| 1335 UCHAR BusConnectTime[2]; | |
| 1336 UCHAR MaximumBurstSize[2]; | |
| 1337 UCHAR DataTransferDisconnect : 2; | |
| 1338 UCHAR Reserved2[3]; | |
| 1339 } MODE_DISCONNECT_PAGE, *PMODE_DISCONNECT_PAGE; | |
| 1340 | |
| 1341 typedef struct _MODE_CACHING_PAGE { | |
| 1342 UCHAR PageCode : 6; | |
| 1343 UCHAR Reserved : 1; | |
| 1344 UCHAR PageSavable : 1; | |
| 1345 UCHAR PageLength; | |
| 1346 UCHAR ReadDisableCache : 1; | |
| 1347 UCHAR MultiplicationFactor : 1; | |
| 1348 UCHAR WriteCacheEnable : 1; | |
| 1349 UCHAR Reserved2 : 5; | |
| 1350 UCHAR WriteRetensionPriority : 4; | |
| 1351 UCHAR ReadRetensionPriority : 4; | |
| 1352 UCHAR DisablePrefetchTransfer[2]; | |
| 1353 UCHAR MinimumPrefetch[2]; | |
| 1354 UCHAR MaximumPrefetch[2]; | |
| 1355 UCHAR MaximumPrefetchCeiling[2]; | |
| 1356 } MODE_CACHING_PAGE, *PMODE_CACHING_PAGE; | |
| 1357 | |
| 1358 typedef struct _MODE_CDROM_WRITE_PARAMETERS_PAGE { | |
| 1359 UCHAR PageLength; | |
| 1360 UCHAR WriteType : 4; | |
| 1361 UCHAR TestWrite : 1; | |
| 1362 UCHAR LinkSizeValid : 1; | |
| 1363 UCHAR BufferUnderrunFreeEnabled : 1; | |
| 1364 UCHAR Reserved2 : 1; | |
| 1365 UCHAR TrackMode : 4; | |
| 1366 UCHAR Copy : 1; | |
| 1367 UCHAR FixedPacket : 1; | |
| 1368 UCHAR MultiSession : 2; | |
| 1369 UCHAR DataBlockType : 4; | |
| 1370 UCHAR Reserved3 : 4; | |
| 1371 UCHAR LinkSize; | |
| 1372 UCHAR Reserved4; | |
| 1373 UCHAR HostApplicationCode : 6; | |
| 1374 UCHAR Reserved5 : 2; | |
| 1375 UCHAR SessionFormat; | |
| 1376 UCHAR Reserved6; | |
| 1377 UCHAR PacketSize[4]; | |
| 1378 UCHAR AudioPauseLength[2]; | |
| 1379 UCHAR Reserved7 : 7; | |
| 1380 UCHAR MediaCatalogNumberValid : 1; | |
| 1381 UCHAR MediaCatalogNumber[13]; | |
| 1382 UCHAR MediaCatalogNumberZero; | |
| 1383 UCHAR MediaCatalogNumberAFrame; | |
| 1384 UCHAR Reserved8 : 7; | |
| 1385 UCHAR ISRCValid : 1; | |
| 1386 UCHAR ISRCCountry[2]; | |
| 1387 UCHAR ISRCOwner[3]; | |
| 1388 UCHAR ISRCRecordingYear[2]; | |
| 1389 UCHAR ISRCSerialNumber[5]; | |
| 1390 UCHAR ISRCZero; | |
| 1391 UCHAR ISRCAFrame; | |
| 1392 UCHAR ISRCReserved; | |
| 1393 UCHAR SubHeaderData[4]; | |
| 1394 } MODE_CDROM_WRITE_PARAMETERS_PAGE, *PMODE_CDROM_WRITE_PARAMETERS_PAGE; | |
| 1395 | |
| 1396 typedef struct _MODE_FLEXIBLE_DISK_PAGE { | |
| 1397 UCHAR PageCode : 6; | |
| 1398 UCHAR Reserved : 1; | |
| 1399 UCHAR PageSavable : 1; | |
| 1400 UCHAR PageLength; | |
| 1401 UCHAR TransferRate[2]; | |
| 1402 UCHAR NumberOfHeads; | |
| 1403 UCHAR SectorsPerTrack; | |
| 1404 UCHAR BytesPerSector[2]; | |
| 1405 UCHAR NumberOfCylinders[2]; | |
| 1406 UCHAR StartWritePrecom[2]; | |
| 1407 UCHAR StartReducedCurrent[2]; | |
| 1408 UCHAR StepRate[2]; | |
| 1409 UCHAR StepPluseWidth; | |
| 1410 UCHAR HeadSettleDelay[2]; | |
| 1411 UCHAR MotorOnDelay; | |
| 1412 UCHAR MotorOffDelay; | |
| 1413 UCHAR Reserved2 : 5; | |
| 1414 UCHAR MotorOnAsserted : 1; | |
| 1415 UCHAR StartSectorNumber : 1; | |
| 1416 UCHAR TrueReadySignal : 1; | |
| 1417 UCHAR StepPlusePerCyclynder : 4; | |
| 1418 UCHAR Reserved3 : 4; | |
| 1419 UCHAR WriteCompenstation; | |
| 1420 UCHAR HeadLoadDelay; | |
| 1421 UCHAR HeadUnloadDelay; | |
| 1422 UCHAR Pin2Usage : 4; | |
| 1423 UCHAR Pin34Usage : 4; | |
| 1424 UCHAR Pin1Usage : 4; | |
| 1425 UCHAR Pin4Usage : 4; | |
| 1426 UCHAR MediumRotationRate[2]; | |
| 1427 UCHAR Reserved4[2]; | |
| 1428 } MODE_FLEXIBLE_DISK_PAGE, *PMODE_FLEXIBLE_DISK_PAGE; | |
| 1429 | |
| 1430 typedef struct _MODE_FORMAT_PAGE { | |
| 1431 UCHAR PageCode : 6; | |
| 1432 UCHAR Reserved : 1; | |
| 1433 UCHAR PageSavable : 1; | |
| 1434 UCHAR PageLength; | |
| 1435 UCHAR TracksPerZone[2]; | |
| 1436 UCHAR AlternateSectorsPerZone[2]; | |
| 1437 UCHAR AlternateTracksPerZone[2]; | |
| 1438 UCHAR AlternateTracksPerLogicalUnit[2]; | |
| 1439 UCHAR SectorsPerTrack[2]; | |
| 1440 UCHAR BytesPerPhysicalSector[2]; | |
| 1441 UCHAR Interleave[2]; | |
| 1442 UCHAR TrackSkewFactor[2]; | |
| 1443 UCHAR CylinderSkewFactor[2]; | |
| 1444 UCHAR Reserved2 : 4; | |
| 1445 UCHAR SurfaceFirst : 1; | |
| 1446 UCHAR RemovableMedia : 1; | |
| 1447 UCHAR HardSectorFormating : 1; | |
| 1448 UCHAR SoftSectorFormating : 1; | |
| 1449 UCHAR Reserved3[3]; | |
| 1450 } MODE_FORMAT_PAGE, *PMODE_FORMAT_PAGE; | |
| 1451 | |
| 1452 typedef struct _MODE_RIGID_GEOMETRY_PAGE { | |
| 1453 UCHAR PageCode : 6; | |
| 1454 UCHAR Reserved : 1; | |
| 1455 UCHAR PageSavable : 1; | |
| 1456 UCHAR PageLength; | |
| 1457 UCHAR NumberOfCylinders[3]; | |
| 1458 UCHAR NumberOfHeads; | |
| 1459 UCHAR StartWritePrecom[3]; | |
| 1460 UCHAR StartReducedCurrent[3]; | |
| 1461 UCHAR DriveStepRate[2]; | |
| 1462 UCHAR LandZoneCyclinder[3]; | |
| 1463 UCHAR RotationalPositionLock : 2; | |
| 1464 UCHAR Reserved2 : 6; | |
| 1465 UCHAR RotationOffset; | |
| 1466 UCHAR Reserved3; | |
| 1467 UCHAR RoataionRate[2]; | |
| 1468 UCHAR Reserved4[2]; | |
| 1469 } MODE_RIGID_GEOMETRY_PAGE, *PMODE_RIGID_GEOMETRY_PAGE; | |
| 1470 | |
| 1471 typedef struct _MODE_READ_WRITE_RECOVERY_PAGE { | |
| 1472 UCHAR PageCode : 6; | |
| 1473 UCHAR Reserved1 : 1; | |
| 1474 UCHAR PSBit : 1; | |
| 1475 UCHAR PageLength; | |
| 1476 UCHAR DCRBit : 1; | |
| 1477 UCHAR DTEBit : 1; | |
| 1478 UCHAR PERBit : 1; | |
| 1479 UCHAR EERBit : 1; | |
| 1480 UCHAR RCBit : 1; | |
| 1481 UCHAR TBBit : 1; | |
| 1482 UCHAR ARRE : 1; | |
| 1483 UCHAR AWRE : 1; | |
| 1484 UCHAR ReadRetryCount; | |
| 1485 UCHAR Reserved4[4]; | |
| 1486 UCHAR WriteRetryCount; | |
| 1487 UCHAR Reserved5[3]; | |
| 1488 } MODE_READ_WRITE_RECOVERY_PAGE, *PMODE_READ_WRITE_RECOVERY_PAGE; | |
| 1489 | |
| 1490 typedef struct _MODE_READ_RECOVERY_PAGE { | |
| 1491 UCHAR PageCode : 6; | |
| 1492 UCHAR Reserved1 : 1; | |
| 1493 UCHAR PSBit : 1; | |
| 1494 UCHAR PageLength; | |
| 1495 UCHAR DCRBit : 1; | |
| 1496 UCHAR DTEBit : 1; | |
| 1497 UCHAR PERBit : 1; | |
| 1498 UCHAR Reserved2 : 1; | |
| 1499 UCHAR RCBit : 1; | |
| 1500 UCHAR TBBit : 1; | |
| 1501 UCHAR Reserved3 : 2; | |
| 1502 UCHAR ReadRetryCount; | |
| 1503 UCHAR Reserved4[4]; | |
| 1504 } MODE_READ_RECOVERY_PAGE, *PMODE_READ_RECOVERY_PAGE; | |
| 1505 | |
| 1506 typedef struct _MODE_INFO_EXCEPTIONS { | |
| 1507 UCHAR PageCode : 6; | |
| 1508 UCHAR Reserved1 : 1; | |
| 1509 UCHAR PSBit : 1; | |
| 1510 UCHAR PageLength; | |
| 1511 _ANONYMOUS_UNION union { | |
| 1512 UCHAR Flags; | |
| 1513 _ANONYMOUS_STRUCT struct { | |
| 1514 UCHAR LogErr : 1; | |
| 1515 UCHAR Reserved2 : 1; | |
| 1516 UCHAR Test : 1; | |
| 1517 UCHAR Dexcpt : 1; | |
| 1518 UCHAR Reserved3 : 3; | |
| 1519 UCHAR Perf : 1; | |
| 1520 } DUMMYSTRUCTNAME; | |
| 1521 } DUMMYUNIONNAME; | |
| 1522 UCHAR ReportMethod : 4; | |
| 1523 UCHAR Reserved4 : 4; | |
| 1524 UCHAR IntervalTimer[4]; | |
| 1525 UCHAR ReportCount[4]; | |
| 1526 } MODE_INFO_EXCEPTIONS, *PMODE_INFO_EXCEPTIONS; | |
| 1527 | |
| 1528 /* CDROM audio control */ | |
| 1529 #define CDB_AUDIO_PAUSE 0x00 | |
| 1530 #define CDB_AUDIO_RESUME 0x01 | |
| 1531 #define CDB_DEVICE_START 0x11 | |
| 1532 #define CDB_DEVICE_STOP 0x10 | |
| 1533 #define CDB_EJECT_MEDIA 0x10 | |
| 1534 #define CDB_LOAD_MEDIA 0x01 | |
| 1535 #define CDB_SUBCHANNEL_HEADER 0x00 | |
| 1536 #define CDB_SUBCHANNEL_BLOCK 0x01 | |
| 1537 | |
| 1538 #define CDROM_AUDIO_CONTROL_PAGE 0x0E | |
| 1539 #define MODE_SELECT_IMMEDIATE 0x04 | |
| 1540 #define MODE_SELECT_PFBIT 0x10 | |
| 1541 | |
| 1542 #define CDB_USE_MSF 0x01 | |
| 1543 | |
| 1544 typedef struct _PORT_OUTPUT { | |
| 1545 UCHAR ChannelSelection; | |
| 1546 UCHAR Volume; | |
| 1547 } PORT_OUTPUT, *PPORT_OUTPUT; | |
| 1548 | |
| 1549 typedef struct _AUDIO_OUTPUT { | |
| 1550 UCHAR CodePage; | |
| 1551 UCHAR ParameterLength; | |
| 1552 UCHAR Immediate; | |
| 1553 UCHAR Reserved[2]; | |
| 1554 UCHAR LbaFormat; | |
| 1555 UCHAR LogicalBlocksPerSecond[2]; | |
| 1556 PORT_OUTPUT PortOutput[4]; | |
| 1557 } AUDIO_OUTPUT, *PAUDIO_OUTPUT; | |
| 1558 | |
| 1559 /* Multisession CDROMs */ | |
| 1560 #define GET_LAST_SESSION 0x01 | |
| 1561 #define GET_SESSION_DATA 0x02; | |
| 1562 | |
| 1563 /* Atapi 2.5 changers */ | |
| 1564 typedef struct _MECHANICAL_STATUS_INFORMATION_HEADER { | |
| 1565 UCHAR CurrentSlot : 5; | |
| 1566 UCHAR ChangerState : 2; | |
| 1567 UCHAR Fault : 1; | |
| 1568 UCHAR Reserved : 5; | |
| 1569 UCHAR MechanismState : 3; | |
| 1570 UCHAR CurrentLogicalBlockAddress[3]; | |
| 1571 UCHAR NumberAvailableSlots; | |
| 1572 UCHAR SlotTableLength[2]; | |
| 1573 } MECHANICAL_STATUS_INFORMATION_HEADER, *PMECHANICAL_STATUS_INFORMATION_HEADER; | |
| 1574 | |
| 1575 typedef struct _SLOT_TABLE_INFORMATION { | |
| 1576 UCHAR DiscChanged : 1; | |
| 1577 UCHAR Reserved : 6; | |
| 1578 UCHAR DiscPresent : 1; | |
| 1579 UCHAR Reserved2[3]; | |
| 1580 } SLOT_TABLE_INFORMATION, *PSLOT_TABLE_INFORMATION; | |
| 1581 | |
| 1582 typedef struct _MECHANICAL_STATUS { | |
| 1583 MECHANICAL_STATUS_INFORMATION_HEADER MechanicalStatusHeader; | |
| 1584 SLOT_TABLE_INFORMATION SlotTableInfo[1]; | |
| 1585 } MECHANICAL_STATUS, *PMECHANICAL_STATUS; | |
| 1586 | |
| 1587 | |
| 1588 /* Tape definitions */ | |
| 1589 typedef struct _TAPE_POSITION_DATA { | |
| 1590 UCHAR Reserved1 : 2; | |
| 1591 UCHAR BlockPositionUnsupported : 1; | |
| 1592 UCHAR Reserved2 : 3; | |
| 1593 UCHAR EndOfPartition : 1; | |
| 1594 UCHAR BeginningOfPartition : 1; | |
| 1595 UCHAR PartitionNumber; | |
| 1596 USHORT Reserved3; | |
| 1597 UCHAR FirstBlock[4]; | |
| 1598 UCHAR LastBlock[4]; | |
| 1599 UCHAR Reserved4; | |
| 1600 UCHAR NumberOfBlocks[3]; | |
| 1601 UCHAR NumberOfBytes[4]; | |
| 1602 } TAPE_POSITION_DATA, *PTAPE_POSITION_DATA; | |
| 1603 | |
| 1604 /* This structure is used to convert little endian ULONGs | |
| 1605 to SCSI CDB big endians values. */ | |
| 1606 typedef union _EIGHT_BYTE { | |
| 1607 _ANONYMOUS_STRUCT struct { | |
| 1608 UCHAR Byte0; | |
| 1609 UCHAR Byte1; | |
| 1610 UCHAR Byte2; | |
| 1611 UCHAR Byte3; | |
| 1612 UCHAR Byte4; | |
| 1613 UCHAR Byte5; | |
| 1614 UCHAR Byte6; | |
| 1615 UCHAR Byte7; | |
| 1616 } DUMMYSTRUCTNAME; | |
| 1617 ULONGLONG AsULongLong; | |
| 1618 } EIGHT_BYTE, *PEIGHT_BYTE; | |
| 1619 | |
| 1620 typedef union _FOUR_BYTE { | |
| 1621 _ANONYMOUS_STRUCT struct { | |
| 1622 UCHAR Byte0; | |
| 1623 UCHAR Byte1; | |
| 1624 UCHAR Byte2; | |
| 1625 UCHAR Byte3; | |
| 1626 } DUMMYSTRUCTNAME; | |
| 1627 ULONG AsULong; | |
| 1628 } FOUR_BYTE, *PFOUR_BYTE; | |
| 1629 | |
| 1630 typedef union _TWO_BYTE { | |
| 1631 _ANONYMOUS_STRUCT struct { | |
| 1632 UCHAR Byte0; | |
| 1633 UCHAR Byte1; | |
| 1634 } DUMMYSTRUCTNAME; | |
| 1635 USHORT AsUShort; | |
| 1636 } TWO_BYTE, *PTWO_BYTE; | |
| 1637 | |
| 1638 /* Byte reversing macro for converting between | |
| 1639 big- and little-endian formats */ | |
| 1640 #define REVERSE_BYTES_QUAD(Destination, Source) { \ | |
| 1641 PEIGHT_BYTE _val1 = (PEIGHT_BYTE)(Destination); \ | |
| 1642 PEIGHT_BYTE _val2 = (PEIGHT_BYTE)(Source); \ | |
| 1643 _val1->Byte7 = _val2->Byte0; \ | |
| 1644 _val1->Byte6 = _val2->Byte1; \ | |
| 1645 _val1->Byte5 = _val2->Byte2; \ | |
| 1646 _val1->Byte4 = _val2->Byte3; \ | |
| 1647 _val1->Byte3 = _val2->Byte4; \ | |
| 1648 _val1->Byte2 = _val2->Byte5; \ | |
| 1649 _val1->Byte1 = _val2->Byte6; \ | |
| 1650 _val1->Byte0 = _val2->Byte7; \ | |
| 1651 } | |
| 1652 | |
| 1653 #define REVERSE_BYTES(Destination, Source) { \ | |
| 1654 PFOUR_BYTE _val1 = (PFOUR_BYTE)(Destination); \ | |
| 1655 PFOUR_BYTE _val2 = (PFOUR_BYTE)(Source); \ | |
| 1656 _val1->Byte3 = _val2->Byte0; \ | |
| 1657 _val1->Byte2 = _val2->Byte1; \ | |
| 1658 _val1->Byte1 = _val2->Byte2; \ | |
| 1659 _val1->Byte0 = _val2->Byte3; \ | |
| 1660 } | |
| 1661 | |
| 1662 #define REVERSE_BYTES_SHORT(Destination, Source) { \ | |
| 1663 PTWO_BYTE _val1 = (PTWO_BYTE)(Destination); \ | |
| 1664 PTWO_BYTE _val2 = (PTWO_BYTE)(Source); \ | |
| 1665 _val1->Byte1 = _val2->Byte0; \ | |
| 1666 _val1->Byte0 = _val2->Byte1; \ | |
| 1667 } | |
| 1668 | |
| 1669 #define REVERSE_SHORT(Short) { \ | |
| 1670 UCHAR _val; \ | |
| 1671 PTWO_BYTE _val2 = (PTWO_BYTE)(Short); \ | |
| 1672 _val = _val2->Byte0; \ | |
| 1673 _val2->Byte0 = _val2->Byte1; \ | |
| 1674 _val2->Byte1 = _val; \ | |
| 1675 } | |
| 1676 | |
| 1677 #define REVERSE_LONG(Long) { \ | |
| 1678 UCHAR _val; \ | |
| 1679 PFOUR_BYTE _val2 = (PFOUR_BYTE)(Long); \ | |
| 1680 _val = _val2->Byte3; \ | |
| 1681 _val2->Byte3 = _val2->Byte0; \ | |
| 1682 _val2->Byte0 = _val; \ | |
| 1683 _val = _val2->Byte2; \ | |
| 1684 _val2->Byte2 = _val2->Byte1; \ | |
| 1685 _val2->Byte1 = _val; \ | |
| 1686 } | |
| 1687 | |
| 1688 #define WHICH_BIT(Data, Bit) { \ | |
| 1689 UCHAR _val; \ | |
| 1690 for (_val = 0; _val < 32; _val++) { \ | |
| 1691 if (((Data) >> _val) == 1) { \ | |
| 1692 break; \ | |
| 1693 } \ | |
| 1694 } \ | |
| 1695 ASSERT(_val != 32); \ | |
| 1696 (Bit) = _val; \ | |
| 1697 } | |
| 1698 | |
| 1699 #ifdef __cplusplus | |
| 1700 } | |
| 1701 #endif | |
| 1702 | |
| 1703 #endif /* _NTSCSI_ */ |
