Embed:
(wiki syntax)
Show/hide line numbers
scsi.h
00001 /* 00002 * scsi.h 00003 * 00004 * SCSI port and class interface. 00005 * 00006 * This file is part of the w32api package. 00007 * 00008 * Contributors: 00009 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> 00010 * 00011 * THIS SOFTWARE IS NOT COPYRIGHTED 00012 * 00013 * This source code is offered for use in the public domain. You may 00014 * use, modify or distribute it freely. 00015 * 00016 * This code is distributed in the hope that it will be useful but 00017 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 00018 * DISCLAIMED. This includes but is not limited to warranties of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00020 * 00021 */ 00022 00023 #ifndef __SCSI_H 00024 #define __SCSI_H 00025 00026 #if __GNUC__ >=3 00027 #pragma GCC system_header 00028 #endif 00029 00030 #ifdef __cplusplus 00031 extern "C" { 00032 #endif 00033 00034 #include "ntddk.h" 00035 00036 typedef union _CDB { 00037 struct _CDB6GENERIC { 00038 UCHAR OperationCode; 00039 UCHAR Immediate : 1; 00040 UCHAR CommandUniqueBits : 4; 00041 UCHAR LogicalUnitNumber : 3; 00042 UCHAR CommandUniqueBytes[3]; 00043 UCHAR Link : 1; 00044 UCHAR Flag : 1; 00045 UCHAR Reserved : 4; 00046 UCHAR VendorUnique : 2; 00047 } CDB6GENERIC, *PCDB6GENERIC; 00048 00049 struct _CDB6READWRITE { 00050 UCHAR OperationCode; 00051 UCHAR LogicalBlockMsb1 : 5; 00052 UCHAR LogicalUnitNumber : 3; 00053 UCHAR LogicalBlockMsb0; 00054 UCHAR LogicalBlockLsb; 00055 UCHAR TransferBlocks; 00056 UCHAR Control; 00057 } CDB6READWRITE, *PCDB6READWRITE; 00058 00059 struct _CDB6INQUIRY { 00060 UCHAR OperationCode; 00061 UCHAR Reserved1 : 5; 00062 UCHAR LogicalUnitNumber : 3; 00063 UCHAR PageCode; 00064 UCHAR IReserved; 00065 UCHAR AllocationLength; 00066 UCHAR Control; 00067 } CDB6INQUIRY, *PCDB6INQUIRY; 00068 00069 struct _CDB6INQUIRY3 { 00070 UCHAR OperationCode; 00071 UCHAR EnableVitalProductData : 1; 00072 UCHAR CommandSupportData : 1; 00073 UCHAR Reserved1 : 6; 00074 UCHAR PageCode; 00075 UCHAR Reserved2; 00076 UCHAR AllocationLength; 00077 UCHAR Control; 00078 } CDB6INQUIRY3, *PCDB6INQUIRY3; 00079 00080 struct _CDB6VERIFY { 00081 UCHAR OperationCode; 00082 UCHAR Fixed : 1; 00083 UCHAR ByteCompare : 1; 00084 UCHAR Immediate : 1; 00085 UCHAR Reserved : 2; 00086 UCHAR LogicalUnitNumber : 3; 00087 UCHAR VerificationLength[3]; 00088 UCHAR Control; 00089 } CDB6VERIFY, *PCDB6VERIFY; 00090 00091 struct _CDB6FORMAT { 00092 UCHAR OperationCode; 00093 UCHAR FormatControl : 5; 00094 UCHAR LogicalUnitNumber : 3; 00095 UCHAR FReserved1; 00096 UCHAR InterleaveMsb; 00097 UCHAR InterleaveLsb; 00098 UCHAR FReserved2; 00099 } CDB6FORMAT, *PCDB6FORMAT; 00100 00101 struct _CDB10 { 00102 UCHAR OperationCode; 00103 UCHAR RelativeAddress : 1; 00104 UCHAR Reserved1 : 2; 00105 UCHAR ForceUnitAccess : 1; 00106 UCHAR DisablePageOut : 1; 00107 UCHAR LogicalUnitNumber : 3; 00108 UCHAR LogicalBlockByte0; 00109 UCHAR LogicalBlockByte1; 00110 UCHAR LogicalBlockByte2; 00111 UCHAR LogicalBlockByte3; 00112 UCHAR Reserved2; 00113 UCHAR TransferBlocksMsb; 00114 UCHAR TransferBlocksLsb; 00115 UCHAR Control; 00116 } CDB10, *PCDB10; 00117 00118 struct _CDB12 { 00119 UCHAR OperationCode; 00120 UCHAR RelativeAddress : 1; 00121 UCHAR Reserved1 : 2; 00122 UCHAR ForceUnitAccess : 1; 00123 UCHAR DisablePageOut : 1; 00124 UCHAR LogicalUnitNumber : 3; 00125 UCHAR LogicalBlock[4]; 00126 UCHAR TransferLength[4]; 00127 UCHAR Reserved2; 00128 UCHAR Control; 00129 } CDB12, *PCDB12; 00130 00131 struct _PAUSE_RESUME { 00132 UCHAR OperationCode; 00133 UCHAR Reserved1 : 5; 00134 UCHAR LogicalUnitNumber : 3; 00135 UCHAR Reserved2[6]; 00136 UCHAR Action; 00137 UCHAR Control; 00138 } PAUSE_RESUME, *PPAUSE_RESUME; 00139 00140 struct _READ_TOC { 00141 UCHAR OperationCode; 00142 UCHAR Reserved0 : 1; 00143 UCHAR Msf : 1; 00144 UCHAR Reserved1 : 3; 00145 UCHAR LogicalUnitNumber : 3; 00146 UCHAR Format2 : 4; 00147 UCHAR Reserved2 : 4; 00148 UCHAR Reserved3[3]; 00149 UCHAR StartingTrack; 00150 UCHAR AllocationLength[2]; 00151 UCHAR Control : 6; 00152 UCHAR Format : 2; 00153 } READ_TOC, *PREAD_TOC; 00154 00155 struct _READ_DISK_INFORMATION { 00156 UCHAR OperationCode; 00157 UCHAR Reserved1 : 5; 00158 UCHAR Lun : 3; 00159 UCHAR Reserved2[5]; 00160 UCHAR AllocationLength[2]; 00161 UCHAR Control; 00162 } READ_DISK_INFORMATION, *PREAD_DISK_INFORMATION; 00163 00164 struct _READ_TRACK_INFORMATION { 00165 UCHAR OperationCode; 00166 UCHAR Track : 1; 00167 UCHAR Reserved1 : 3; 00168 UCHAR Reserved2 : 1; 00169 UCHAR Lun : 3; 00170 UCHAR BlockAddress[4]; 00171 UCHAR Reserved3; 00172 UCHAR AllocationLength[2]; 00173 UCHAR Control; 00174 } READ_TRACK_INFORMATION, *PREAD_TRACK_INFORMATION; 00175 00176 struct _RESERVE_TRACK_RZONE { 00177 UCHAR OperationCode; 00178 UCHAR Reserved1[4]; 00179 UCHAR ReservationSize[4]; 00180 UCHAR Control; 00181 } RESERVE_TRACK_RZONE, *PRESERVE_TRACK_RZONE; 00182 00183 struct _SEND_OPC_INFORMATION { 00184 UCHAR OperationCode; 00185 UCHAR DoOpc : 1; 00186 UCHAR Reserved : 7; 00187 UCHAR Reserved1[5]; 00188 UCHAR ParameterListLength[2]; 00189 UCHAR Reserved2; 00190 } SEND_OPC_INFORMATION, *PSEND_OPC_INFORMATION; 00191 00192 struct _CLOSE_TRACK { 00193 UCHAR OperationCode; 00194 UCHAR Immediate : 1; 00195 UCHAR Reserved1 : 7; 00196 UCHAR Track : 1; 00197 UCHAR Session : 1; 00198 UCHAR Reserved2 : 6; 00199 UCHAR Reserved3; 00200 UCHAR TrackNumber[2]; 00201 UCHAR Reserved4[3]; 00202 UCHAR Control; 00203 } CLOSE_TRACK, *PCLOSE_TRACK; 00204 00205 struct _SEND_CUE_SHEET { 00206 UCHAR OperationCode; 00207 UCHAR Reserved[5]; 00208 UCHAR CueSheetSize[3]; 00209 UCHAR Control; 00210 } SEND_CUE_SHEET, *PSEND_CUE_SHEET; 00211 00212 struct _READ_HEADER { 00213 UCHAR OperationCode; 00214 UCHAR Reserved1 : 1; 00215 UCHAR Msf : 1; 00216 UCHAR Reserved2 : 3; 00217 UCHAR Lun : 3; 00218 UCHAR LogicalBlockAddress[4]; 00219 UCHAR Reserved3; 00220 UCHAR AllocationLength[2]; 00221 UCHAR Control; 00222 } READ_HEADER, *PREAD_HEADER; 00223 00224 struct _PLAY_AUDIO { 00225 UCHAR OperationCode; 00226 UCHAR Reserved1 : 5; 00227 UCHAR LogicalUnitNumber : 3; 00228 UCHAR StartingBlockAddress[4]; 00229 UCHAR Reserved2; 00230 UCHAR PlayLength[2]; 00231 UCHAR Control; 00232 } PLAY_AUDIO, *PPLAY_AUDIO; 00233 00234 struct _PLAY_AUDIO_MSF { 00235 UCHAR OperationCode; 00236 UCHAR Reserved1 : 5; 00237 UCHAR LogicalUnitNumber : 3; 00238 UCHAR Reserved2; 00239 UCHAR StartingM; 00240 UCHAR StartingS; 00241 UCHAR StartingF; 00242 UCHAR EndingM; 00243 UCHAR EndingS; 00244 UCHAR EndingF; 00245 UCHAR Control; 00246 } PLAY_AUDIO_MSF, *PPLAY_AUDIO_MSF; 00247 00248 /* FIXME: Should the union be anonymous in C++ too? If so, 00249 can't define named types _LBA and _MSF within anonymous union 00250 for C++. */ 00251 struct _PLAY_CD { 00252 UCHAR OperationCode; 00253 UCHAR Reserved1 : 1; 00254 UCHAR CMSF : 1; 00255 UCHAR ExpectedSectorType : 3; 00256 UCHAR Lun : 3; 00257 #ifndef __cplusplus 00258 _ANONYMOUS_UNION 00259 #endif 00260 union { 00261 struct _LBA { 00262 UCHAR StartingBlockAddress[4]; 00263 UCHAR PlayLength[4]; 00264 } LBA; 00265 00266 struct _MSF { 00267 UCHAR Reserved1; 00268 UCHAR StartingM; 00269 UCHAR StartingS; 00270 UCHAR StartingF; 00271 UCHAR EndingM; 00272 UCHAR EndingS; 00273 UCHAR EndingF; 00274 UCHAR Reserved2; 00275 } MSF; 00276 #ifndef __cplusplus 00277 }DUMMYUNIONNAME; 00278 #else 00279 }u; 00280 #endif 00281 00282 UCHAR Audio : 1; 00283 UCHAR Composite : 1; 00284 UCHAR Port1 : 1; 00285 UCHAR Port2 : 1; 00286 UCHAR Reserved2 : 3; 00287 UCHAR Speed : 1; 00288 UCHAR Control; 00289 } PLAY_CD, *PPLAY_CD; 00290 00291 struct _SCAN_CD { 00292 UCHAR OperationCode; 00293 UCHAR RelativeAddress : 1; 00294 UCHAR Reserved1 : 3; 00295 UCHAR Direct : 1; 00296 UCHAR Lun : 3; 00297 UCHAR StartingAddress[4]; 00298 UCHAR Reserved2[3]; 00299 UCHAR Reserved3 : 6; 00300 UCHAR Type : 2; 00301 UCHAR Reserved4; 00302 UCHAR Control; 00303 } SCAN_CD, *PSCAN_CD; 00304 00305 struct _STOP_PLAY_SCAN { 00306 UCHAR OperationCode; 00307 UCHAR Reserved1 : 5; 00308 UCHAR Lun : 3; 00309 UCHAR Reserved2[7]; 00310 UCHAR Control; 00311 } STOP_PLAY_SCAN, *PSTOP_PLAY_SCAN; 00312 00313 struct _SUBCHANNEL { 00314 UCHAR OperationCode; 00315 UCHAR Reserved0 : 1; 00316 UCHAR Msf : 1; 00317 UCHAR Reserved1 : 3; 00318 UCHAR LogicalUnitNumber : 3; 00319 UCHAR Reserved2 : 6; 00320 UCHAR SubQ : 1; 00321 UCHAR Reserved3 : 1; 00322 UCHAR Format; 00323 UCHAR Reserved4[2]; 00324 UCHAR TrackNumber; 00325 UCHAR AllocationLength[2]; 00326 UCHAR Control; 00327 } SUBCHANNEL, *PSUBCHANNEL; 00328 00329 struct _READ_CD { 00330 UCHAR OperationCode; 00331 UCHAR RelativeAddress : 1; 00332 UCHAR Reserved0 : 1; 00333 UCHAR ExpectedSectorType : 3; 00334 UCHAR Lun : 3; 00335 UCHAR StartingLBA[4]; 00336 UCHAR TransferBlocks[3]; 00337 UCHAR Reserved2 : 1; 00338 UCHAR ErrorFlags : 2; 00339 UCHAR IncludeEDC : 1; 00340 UCHAR IncludeUserData : 1; 00341 UCHAR HeaderCode : 2; 00342 UCHAR IncludeSyncData : 1; 00343 UCHAR SubChannelSelection : 3; 00344 UCHAR Reserved3 : 5; 00345 UCHAR Control; 00346 } READ_CD, *PREAD_CD; 00347 00348 struct _READ_CD_MSF { 00349 UCHAR OperationCode; 00350 UCHAR RelativeAddress : 1; 00351 UCHAR Reserved1 : 1; 00352 UCHAR ExpectedSectorType : 3; 00353 UCHAR Lun : 3; 00354 UCHAR Reserved2; 00355 UCHAR StartingM; 00356 UCHAR StartingS; 00357 UCHAR StartingF; 00358 UCHAR EndingM; 00359 UCHAR EndingS; 00360 UCHAR EndingF; 00361 UCHAR Reserved3; 00362 UCHAR Reserved4 : 1; 00363 UCHAR ErrorFlags : 2; 00364 UCHAR IncludeEDC : 1; 00365 UCHAR IncludeUserData : 1; 00366 UCHAR HeaderCode : 2; 00367 UCHAR IncludeSyncData : 1; 00368 UCHAR SubChannelSelection : 3; 00369 UCHAR Reserved5 : 5; 00370 UCHAR Control; 00371 } READ_CD_MSF, *PREAD_CD_MSF; 00372 00373 struct _PLXTR_READ_CDDA { 00374 UCHAR OperationCode; 00375 UCHAR Reserved0 : 5; 00376 UCHAR LogicalUnitNumber : 3; 00377 UCHAR LogicalBlockByte0; 00378 UCHAR LogicalBlockByte1; 00379 UCHAR LogicalBlockByte2; 00380 UCHAR LogicalBlockByte3; 00381 UCHAR TransferBlockByte0; 00382 UCHAR TransferBlockByte1; 00383 UCHAR TransferBlockByte2; 00384 UCHAR TransferBlockByte3; 00385 UCHAR SubCode; 00386 UCHAR Control; 00387 } PLXTR_READ_CDDA, *PPLXTR_READ_CDDA; 00388 00389 struct _NEC_READ_CDDA { 00390 UCHAR OperationCode; 00391 UCHAR Reserved0; 00392 UCHAR LogicalBlockByte0; 00393 UCHAR LogicalBlockByte1; 00394 UCHAR LogicalBlockByte2; 00395 UCHAR LogicalBlockByte3; 00396 UCHAR Reserved1; 00397 UCHAR TransferBlockByte0; 00398 UCHAR TransferBlockByte1; 00399 UCHAR Control; 00400 } NEC_READ_CDDA, *PNEC_READ_CDDA; 00401 00402 struct _MODE_SENSE { 00403 UCHAR OperationCode; 00404 UCHAR Reserved1 : 3; 00405 UCHAR Dbd : 1; 00406 UCHAR Reserved2 : 1; 00407 UCHAR LogicalUnitNumber : 3; 00408 UCHAR PageCode : 6; 00409 UCHAR Pc : 2; 00410 UCHAR Reserved3; 00411 UCHAR AllocationLength; 00412 UCHAR Control; 00413 } MODE_SENSE, *PMODE_SENSE; 00414 00415 struct _MODE_SENSE10 { 00416 UCHAR OperationCode; 00417 UCHAR Reserved1 : 3; 00418 UCHAR Dbd : 1; 00419 UCHAR Reserved2 : 1; 00420 UCHAR LogicalUnitNumber : 3; 00421 UCHAR PageCode : 6; 00422 UCHAR Pc : 2; 00423 UCHAR Reserved3[4]; 00424 UCHAR AllocationLength[2]; 00425 UCHAR Control; 00426 } MODE_SENSE10, *PMODE_SENSE10; 00427 00428 struct _MODE_SELECT { 00429 UCHAR OperationCode; 00430 UCHAR SPBit : 1; 00431 UCHAR Reserved1 : 3; 00432 UCHAR PFBit : 1; 00433 UCHAR LogicalUnitNumber : 3; 00434 UCHAR Reserved2[2]; 00435 UCHAR ParameterListLength; 00436 UCHAR Control; 00437 } MODE_SELECT, *PMODE_SELECT; 00438 00439 struct _MODE_SELECT10 { 00440 UCHAR OperationCode; 00441 UCHAR SPBit : 1; 00442 UCHAR Reserved1 : 3; 00443 UCHAR PFBit : 1; 00444 UCHAR LogicalUnitNumber : 3; 00445 UCHAR Reserved2[5]; 00446 UCHAR ParameterListLength[2]; 00447 UCHAR Control; 00448 } MODE_SELECT10, *PMODE_SELECT10; 00449 00450 struct _LOCATE { 00451 UCHAR OperationCode; 00452 UCHAR Immediate : 1; 00453 UCHAR CPBit : 1; 00454 UCHAR BTBit : 1; 00455 UCHAR Reserved1 : 2; 00456 UCHAR LogicalUnitNumber : 3; 00457 UCHAR Reserved3; 00458 UCHAR LogicalBlockAddress[4]; 00459 UCHAR Reserved4; 00460 UCHAR Partition; 00461 UCHAR Control; 00462 } LOCATE, *PLOCATE; 00463 00464 struct _LOGSENSE { 00465 UCHAR OperationCode; 00466 UCHAR SPBit : 1; 00467 UCHAR PPCBit : 1; 00468 UCHAR Reserved1 : 3; 00469 UCHAR LogicalUnitNumber : 3; 00470 UCHAR PageCode : 6; 00471 UCHAR PCBit : 2; 00472 UCHAR Reserved2; 00473 UCHAR Reserved3; 00474 UCHAR ParameterPointer[2]; 00475 UCHAR AllocationLength[2]; 00476 UCHAR Control; 00477 } LOGSENSE, *PLOGSENSE; 00478 00479 struct _LOGSELECT { 00480 UCHAR OperationCode; 00481 UCHAR SPBit : 1; 00482 UCHAR PCRBit : 1; 00483 UCHAR Reserved1 : 3; 00484 UCHAR LogicalUnitNumber : 3; 00485 UCHAR Reserved : 6; 00486 UCHAR PCBit : 2; 00487 UCHAR Reserved2[4]; 00488 UCHAR ParameterListLength[2]; 00489 UCHAR Control; 00490 } LOGSELECT, *PLOGSELECT; 00491 00492 struct _PRINT { 00493 UCHAR OperationCode; 00494 UCHAR Reserved : 5; 00495 UCHAR LogicalUnitNumber : 3; 00496 UCHAR TransferLength[3]; 00497 UCHAR Control; 00498 } PRINT, *PPRINT; 00499 00500 struct _SEEK { 00501 UCHAR OperationCode; 00502 UCHAR Reserved1 : 5; 00503 UCHAR LogicalUnitNumber : 3; 00504 UCHAR LogicalBlockAddress[4]; 00505 UCHAR Reserved2[3]; 00506 UCHAR Control; 00507 } SEEK, *PSEEK; 00508 00509 struct _ERASE { 00510 UCHAR OperationCode; 00511 UCHAR Long : 1; 00512 UCHAR Immediate : 1; 00513 UCHAR Reserved1 : 3; 00514 UCHAR LogicalUnitNumber : 3; 00515 UCHAR Reserved2[3]; 00516 UCHAR Control; 00517 } ERASE, *PERASE; 00518 00519 struct _START_STOP { 00520 UCHAR OperationCode; 00521 UCHAR Immediate: 1; 00522 UCHAR Reserved1 : 4; 00523 UCHAR LogicalUnitNumber : 3; 00524 UCHAR Reserved2[2]; 00525 UCHAR Start : 1; 00526 UCHAR LoadEject : 1; 00527 UCHAR Reserved3 : 6; 00528 UCHAR Control; 00529 } START_STOP, *PSTART_STOP; 00530 00531 struct _MEDIA_REMOVAL { 00532 UCHAR OperationCode; 00533 UCHAR Reserved1 : 5; 00534 UCHAR LogicalUnitNumber : 3; 00535 UCHAR Reserved2[2]; 00536 00537 UCHAR Prevent : 1; 00538 UCHAR Persistant : 1; 00539 UCHAR Reserved3 : 6; 00540 00541 UCHAR Control; 00542 } MEDIA_REMOVAL, *PMEDIA_REMOVAL; 00543 00544 struct _SEEK_BLOCK { 00545 UCHAR OperationCode; 00546 UCHAR Immediate : 1; 00547 UCHAR Reserved1 : 7; 00548 UCHAR BlockAddress[3]; 00549 UCHAR Link : 1; 00550 UCHAR Flag : 1; 00551 UCHAR Reserved2 : 4; 00552 UCHAR VendorUnique : 2; 00553 } SEEK_BLOCK, *PSEEK_BLOCK; 00554 00555 struct _REQUEST_BLOCK_ADDRESS { 00556 UCHAR OperationCode; 00557 UCHAR Reserved1[3]; 00558 UCHAR AllocationLength; 00559 UCHAR Link : 1; 00560 UCHAR Flag : 1; 00561 UCHAR Reserved2 : 4; 00562 UCHAR VendorUnique : 2; 00563 } REQUEST_BLOCK_ADDRESS, *PREQUEST_BLOCK_ADDRESS; 00564 00565 struct _PARTITION { 00566 UCHAR OperationCode; 00567 UCHAR Immediate : 1; 00568 UCHAR Sel: 1; 00569 UCHAR PartitionSelect : 6; 00570 UCHAR Reserved1[3]; 00571 UCHAR Control; 00572 } PARTITION, *PPARTITION; 00573 00574 struct _WRITE_TAPE_MARKS { 00575 UCHAR OperationCode; 00576 UCHAR Immediate : 1; 00577 UCHAR WriteSetMarks: 1; 00578 UCHAR Reserved : 3; 00579 UCHAR LogicalUnitNumber : 3; 00580 UCHAR TransferLength[3]; 00581 UCHAR Control; 00582 } WRITE_TAPE_MARKS, *PWRITE_TAPE_MARKS; 00583 00584 struct _SPACE_TAPE_MARKS { 00585 UCHAR OperationCode; 00586 UCHAR Code : 3; 00587 UCHAR Reserved : 2; 00588 UCHAR LogicalUnitNumber : 3; 00589 UCHAR NumMarksMSB ; 00590 UCHAR NumMarks; 00591 UCHAR NumMarksLSB; 00592 union { 00593 UCHAR value; 00594 struct { 00595 UCHAR Link : 1; 00596 UCHAR Flag : 1; 00597 UCHAR Reserved : 4; 00598 UCHAR VendorUnique : 2; 00599 } Fields; 00600 } Byte6; 00601 } SPACE_TAPE_MARKS, *PSPACE_TAPE_MARKS; 00602 00603 struct _READ_POSITION { 00604 UCHAR Operation; 00605 UCHAR BlockType : 1; 00606 UCHAR Reserved1 : 4; 00607 UCHAR Lun : 3; 00608 UCHAR Reserved2[7]; 00609 UCHAR Control; 00610 } READ_POSITION, *PREAD_POSITION; 00611 00612 struct _CDB6READWRITETAPE { 00613 UCHAR OperationCode; 00614 UCHAR VendorSpecific : 5; 00615 UCHAR Reserved : 3; 00616 UCHAR TransferLenMSB; 00617 UCHAR TransferLen; 00618 UCHAR TransferLenLSB; 00619 UCHAR Link : 1; 00620 UCHAR Flag : 1; 00621 UCHAR Reserved1 : 4; 00622 UCHAR VendorUnique : 2; 00623 } CDB6READWRITETAPE, *PCDB6READWRITETAPE; 00624 00625 struct _INIT_ELEMENT_STATUS { 00626 UCHAR OperationCode; 00627 UCHAR Reserved1 : 5; 00628 UCHAR LogicalUnitNubmer : 3; 00629 UCHAR Reserved2[3]; 00630 UCHAR Reserved3 : 7; 00631 UCHAR NoBarCode : 1; 00632 } INIT_ELEMENT_STATUS, *PINIT_ELEMENT_STATUS; 00633 00634 struct _INITIALIZE_ELEMENT_RANGE { 00635 UCHAR OperationCode; 00636 UCHAR Range : 1; 00637 UCHAR Reserved1 : 4; 00638 UCHAR LogicalUnitNubmer : 3; 00639 UCHAR FirstElementAddress[2]; 00640 UCHAR Reserved2[2]; 00641 UCHAR NumberOfElements[2]; 00642 UCHAR Reserved3; 00643 UCHAR Reserved4 : 7; 00644 UCHAR NoBarCode : 1; 00645 } INITIALIZE_ELEMENT_RANGE, *PINITIALIZE_ELEMENT_RANGE; 00646 00647 struct _POSITION_TO_ELEMENT { 00648 UCHAR OperationCode; 00649 UCHAR Reserved1 : 5; 00650 UCHAR LogicalUnitNumber : 3; 00651 UCHAR TransportElementAddress[2]; 00652 UCHAR DestinationElementAddress[2]; 00653 UCHAR Reserved2[2]; 00654 UCHAR Flip : 1; 00655 UCHAR Reserved3 : 7; 00656 UCHAR Control; 00657 } POSITION_TO_ELEMENT, *PPOSITION_TO_ELEMENT; 00658 00659 struct _MOVE_MEDIUM { 00660 UCHAR OperationCode; 00661 UCHAR Reserved1 : 5; 00662 UCHAR LogicalUnitNumber : 3; 00663 UCHAR TransportElementAddress[2]; 00664 UCHAR SourceElementAddress[2]; 00665 UCHAR DestinationElementAddress[2]; 00666 UCHAR Reserved2[2]; 00667 UCHAR Flip : 1; 00668 UCHAR Reserved3 : 7; 00669 UCHAR Control; 00670 } MOVE_MEDIUM, *PMOVE_MEDIUM; 00671 00672 struct _EXCHANGE_MEDIUM { 00673 UCHAR OperationCode; 00674 UCHAR Reserved1 : 5; 00675 UCHAR LogicalUnitNumber : 3; 00676 UCHAR TransportElementAddress[2]; 00677 UCHAR SourceElementAddress[2]; 00678 UCHAR Destination1ElementAddress[2]; 00679 UCHAR Destination2ElementAddress[2]; 00680 UCHAR Flip1 : 1; 00681 UCHAR Flip2 : 1; 00682 UCHAR Reserved3 : 6; 00683 UCHAR Control; 00684 } EXCHANGE_MEDIUM, *PEXCHANGE_MEDIUM; 00685 00686 struct _READ_ELEMENT_STATUS { 00687 UCHAR OperationCode; 00688 UCHAR ElementType : 4; 00689 UCHAR VolTag : 1; 00690 UCHAR LogicalUnitNumber : 3; 00691 UCHAR StartingElementAddress[2]; 00692 UCHAR NumberOfElements[2]; 00693 UCHAR Reserved1; 00694 UCHAR AllocationLength[3]; 00695 UCHAR Reserved2; 00696 UCHAR Control; 00697 } READ_ELEMENT_STATUS, *PREAD_ELEMENT_STATUS; 00698 00699 struct _SEND_VOLUME_TAG { 00700 UCHAR OperationCode; 00701 UCHAR ElementType : 4; 00702 UCHAR Reserved1 : 1; 00703 UCHAR LogicalUnitNumber : 3; 00704 UCHAR StartingElementAddress[2]; 00705 UCHAR Reserved2; 00706 UCHAR ActionCode : 5; 00707 UCHAR Reserved3 : 3; 00708 UCHAR Reserved4[2]; 00709 UCHAR ParameterListLength[2]; 00710 UCHAR Reserved5; 00711 UCHAR Control; 00712 } SEND_VOLUME_TAG, *PSEND_VOLUME_TAG; 00713 00714 struct _REQUEST_VOLUME_ELEMENT_ADDRESS { 00715 UCHAR OperationCode; 00716 UCHAR ElementType : 4; 00717 UCHAR VolTag : 1; 00718 UCHAR LogicalUnitNumber : 3; 00719 UCHAR StartingElementAddress[2]; 00720 UCHAR NumberElements[2]; 00721 UCHAR Reserved1; 00722 UCHAR AllocationLength[3]; 00723 UCHAR Reserved2; 00724 UCHAR Control; 00725 } REQUEST_VOLUME_ELEMENT_ADDRESS, *PREQUEST_VOLUME_ELEMENT_ADDRESS; 00726 00727 struct _LOAD_UNLOAD { 00728 UCHAR OperationCode; 00729 UCHAR Immediate : 1; 00730 UCHAR Reserved1 : 4; 00731 UCHAR Lun : 3; 00732 UCHAR Reserved2[2]; 00733 UCHAR Start : 1; 00734 UCHAR LoadEject : 1; 00735 UCHAR Reserved3: 6; 00736 UCHAR Reserved4[3]; 00737 UCHAR Slot; 00738 UCHAR Reserved5[3]; 00739 } LOAD_UNLOAD, *PLOAD_UNLOAD; 00740 00741 struct _MECH_STATUS { 00742 UCHAR OperationCode; 00743 UCHAR Reserved : 5; 00744 UCHAR Lun : 3; 00745 UCHAR Reserved1[6]; 00746 UCHAR AllocationLength[2]; 00747 UCHAR Reserved2[1]; 00748 UCHAR Control; 00749 } MECH_STATUS, *PMECH_STATUS; 00750 00751 struct _SYNCHRONIZE_CACHE10 { 00752 00753 UCHAR OperationCode; 00754 00755 UCHAR RelAddr : 1; 00756 UCHAR Immediate : 1; 00757 UCHAR Reserved : 3; 00758 UCHAR Lun : 3; 00759 00760 UCHAR LogicalBlockAddress[4]; 00761 UCHAR Reserved2; 00762 UCHAR BlockCount[2]; 00763 UCHAR Control; 00764 } SYNCHRONIZE_CACHE10, *PSYNCHRONIZE_CACHE10; 00765 00766 struct _GET_EVENT_STATUS_NOTIFICATION { 00767 UCHAR OperationCode; 00768 00769 UCHAR Immediate : 1; 00770 UCHAR Reserved : 4; 00771 UCHAR Lun : 3; 00772 00773 UCHAR Reserved2[2]; 00774 UCHAR NotificationClassRequest; 00775 UCHAR Reserved3[2]; 00776 UCHAR EventListLength[2]; 00777 00778 UCHAR Control; 00779 } GET_EVENT_STATUS_NOTIFICATION, *PGET_EVENT_STATUS_NOTIFICATION; 00780 00781 struct _READ_DVD_STRUCTURE { 00782 UCHAR OperationCode; 00783 UCHAR Reserved1 : 5; 00784 UCHAR Lun : 3; 00785 UCHAR RMDBlockNumber[4]; 00786 UCHAR LayerNumber; 00787 UCHAR Format; 00788 UCHAR AllocationLength[2]; 00789 UCHAR Reserved3 : 6; 00790 UCHAR AGID : 2; 00791 UCHAR Control; 00792 } READ_DVD_STRUCTURE, *PREAD_DVD_STRUCTURE; 00793 00794 struct _SEND_DVD_STRUCTURE { 00795 UCHAR OperationCode; 00796 UCHAR Reserved1 : 5; 00797 UCHAR Lun : 3; 00798 UCHAR Reserved2[5]; 00799 UCHAR Format; 00800 UCHAR ParameterListLength[2]; 00801 UCHAR Reserved3; 00802 UCHAR Control; 00803 } SEND_DVD_STRUCTURE, *PSEND_DVD_STRUCTURE; 00804 00805 struct _SEND_KEY { 00806 UCHAR OperationCode; 00807 UCHAR Reserved1 : 5; 00808 UCHAR Lun : 3; 00809 UCHAR Reserved2[6]; 00810 UCHAR ParameterListLength[2]; 00811 UCHAR KeyFormat : 6; 00812 UCHAR AGID : 2; 00813 UCHAR Control; 00814 } SEND_KEY, *PSEND_KEY; 00815 00816 struct _REPORT_KEY { 00817 UCHAR OperationCode; 00818 UCHAR Reserved1 : 5; 00819 UCHAR Lun : 3; 00820 UCHAR LogicalBlockAddress[4]; 00821 UCHAR Reserved2[2]; 00822 UCHAR AllocationLength[2]; 00823 UCHAR KeyFormat : 6; 00824 UCHAR AGID : 2; 00825 UCHAR Control; 00826 } REPORT_KEY, *PREPORT_KEY; 00827 00828 struct _SET_READ_AHEAD { 00829 UCHAR OperationCode; 00830 UCHAR Reserved1 : 5; 00831 UCHAR Lun : 3; 00832 UCHAR TriggerLBA[4]; 00833 UCHAR ReadAheadLBA[4]; 00834 UCHAR Reserved2; 00835 UCHAR Control; 00836 } SET_READ_AHEAD, *PSET_READ_AHEAD; 00837 00838 struct _READ_FORMATTED_CAPACITIES { 00839 UCHAR OperationCode; 00840 UCHAR Reserved1 : 5; 00841 UCHAR Lun : 3; 00842 UCHAR Reserved2[5]; 00843 UCHAR AllocationLength[2]; 00844 UCHAR Control; 00845 } READ_FORMATTED_CAPACITIES, *PREAD_FORMATTED_CAPACITIES; 00846 00847 struct _REPORT_LUNS { 00848 UCHAR OperationCode; 00849 UCHAR Reserved1[5]; 00850 UCHAR AllocationLength[4]; 00851 UCHAR Reserved2[1]; 00852 UCHAR Control; 00853 } REPORT_LUNS, *PREPORT_LUNS; 00854 00855 struct _PERSISTENT_RESERVE_IN { 00856 UCHAR OperationCode; 00857 UCHAR ServiceAction : 5; 00858 UCHAR Reserved1 : 3; 00859 UCHAR Reserved2[5]; 00860 UCHAR AllocationLength[2]; 00861 UCHAR Control; 00862 } PERSISTENT_RESERVE_IN, *PPERSISTENT_RESERVE_IN; 00863 00864 struct _PERSISTENT_RESERVE_OUT { 00865 UCHAR OperationCode; 00866 UCHAR ServiceAction : 5; 00867 UCHAR Reserved1 : 3; 00868 UCHAR Type : 4; 00869 UCHAR Scope : 4; 00870 UCHAR Reserved2[4]; 00871 UCHAR ParameterListLength[2]; 00872 UCHAR Control; 00873 } PERSISTENT_RESERVE_OUT, *PPERSISTENT_RESERVE_OUT; 00874 00875 struct _GET_CONFIGURATION { 00876 UCHAR OperationCode; 00877 UCHAR RequestType : 1; 00878 UCHAR Reserved1 : 7; 00879 UCHAR StartingFeature[2]; 00880 UCHAR Reserved2[3]; 00881 UCHAR AllocationLength[2]; 00882 UCHAR Control; 00883 } GET_CONFIGURATION, *PGET_CONFIGURATION; 00884 00885 struct _SET_CD_SPEED { 00886 UCHAR OperationCode; 00887 UCHAR Reserved1; 00888 UCHAR ReadSpeed[2]; 00889 UCHAR WriteSpeed[2]; 00890 UCHAR Reserved2[5]; 00891 UCHAR Control; 00892 } SET_CD_SPEED, *PSET_CD_SPEED; 00893 00894 ULONG AsUlong[4]; 00895 UCHAR AsByte[16]; 00896 } CDB, *PCDB; 00897 00898 #ifndef _INQUIRYDATA_DEFINED /* also in minitape.h */ 00899 #define _INQUIRYDATA_DEFINED 00900 00901 #define INQUIRYDATABUFFERSIZE 36 00902 00903 typedef struct _INQUIRYDATA { 00904 UCHAR DeviceType : 5; 00905 UCHAR DeviceTypeQualifier : 3; 00906 UCHAR DeviceTypeModifier : 7; 00907 UCHAR RemovableMedia : 1; 00908 _ANONYMOUS_UNION union { 00909 UCHAR Versions; 00910 _ANONYMOUS_STRUCT struct { 00911 UCHAR ANSIVersion : 3; 00912 UCHAR ECMAVersion : 3; 00913 UCHAR ISOVersion : 2; 00914 } DUMMYSTRUCTNAME; 00915 } DUMMYUNIONNAME; 00916 UCHAR ResponseDataFormat : 4; 00917 UCHAR HiSupport : 1; 00918 UCHAR NormACA : 1; 00919 UCHAR TerminateTask : 1; 00920 UCHAR AERC : 1; 00921 UCHAR AdditionalLength; 00922 UCHAR Reserved; 00923 UCHAR Addr16 : 1; 00924 UCHAR Addr32 : 1; 00925 UCHAR AckReqQ: 1; 00926 UCHAR MediumChanger : 1; 00927 UCHAR MultiPort : 1; 00928 UCHAR ReservedBit2 : 1; 00929 UCHAR EnclosureServices : 1; 00930 UCHAR ReservedBit3 : 1; 00931 UCHAR SoftReset : 1; 00932 UCHAR CommandQueue : 1; 00933 UCHAR TransferDisable : 1; 00934 UCHAR LinkedCommands : 1; 00935 UCHAR Synchronous : 1; 00936 UCHAR Wide16Bit : 1; 00937 UCHAR Wide32Bit : 1; 00938 UCHAR RelativeAddressing : 1; 00939 UCHAR VendorId[8]; 00940 UCHAR ProductId[16]; 00941 UCHAR ProductRevisionLevel[4]; 00942 UCHAR VendorSpecific[20]; 00943 UCHAR Reserved3[40]; 00944 } INQUIRYDATA, *PINQUIRYDATA; 00945 #endif 00946 00947 /* INQUIRYDATA.DeviceType constants */ 00948 #define DIRECT_ACCESS_DEVICE 0x00 00949 #define SEQUENTIAL_ACCESS_DEVICE 0x01 00950 #define PRINTER_DEVICE 0x02 00951 #define PROCESSOR_DEVICE 0x03 00952 #define WRITE_ONCE_READ_MULTIPLE_DEVICE 0x04 00953 #define READ_ONLY_DIRECT_ACCESS_DEVICE 0x05 00954 #define SCANNER_DEVICE 0x06 00955 #define OPTICAL_DEVICE 0x07 00956 #define MEDIUM_CHANGER 0x08 00957 #define COMMUNICATION_DEVICE 0x09 00958 #define LOGICAL_UNIT_NOT_PRESENT_DEVICE 0x7F 00959 #define DEVICE_QUALIFIER_NOT_SUPPORTED 0x03 00960 00961 /* INQUIRYDATA.DeviceTypeQualifier constants */ 00962 #define DEVICE_CONNECTED 0x00 00963 00964 #define SCSISTAT_GOOD 0x00 00965 #define SCSISTAT_CHECK_CONDITION 0x02 00966 #define SCSISTAT_CONDITION_MET 0x04 00967 #define SCSISTAT_BUSY 0x08 00968 #define SCSISTAT_INTERMEDIATE 0x10 00969 #define SCSISTAT_INTERMEDIATE_COND_MET 0x14 00970 #define SCSISTAT_RESERVATION_CONFLICT 0x18 00971 #define SCSISTAT_COMMAND_TERMINATED 0x22 00972 #define SCSISTAT_QUEUE_FULL 0x28 00973 00974 /* Mode Sense/Select page constants */ 00975 #define MODE_PAGE_ERROR_RECOVERY 0x01 00976 #define MODE_PAGE_DISCONNECT 0x02 00977 #define MODE_PAGE_FORMAT_DEVICE 0x03 00978 #define MODE_PAGE_RIGID_GEOMETRY 0x04 00979 #define MODE_PAGE_FLEXIBILE 0x05 00980 #define MODE_PAGE_WRITE_PARAMETERS 0x05 00981 #define MODE_PAGE_VERIFY_ERROR 0x07 00982 #define MODE_PAGE_CACHING 0x08 00983 #define MODE_PAGE_PERIPHERAL 0x09 00984 #define MODE_PAGE_CONTROL 0x0A 00985 #define MODE_PAGE_MEDIUM_TYPES 0x0B 00986 #define MODE_PAGE_NOTCH_PARTITION 0x0C 00987 #define MODE_PAGE_CD_AUDIO_CONTROL 0x0E 00988 #define MODE_PAGE_DATA_COMPRESS 0x0F 00989 #define MODE_PAGE_DEVICE_CONFIG 0x10 00990 #define MODE_PAGE_MEDIUM_PARTITION 0x11 00991 #define MODE_PAGE_CDVD_FEATURE_SET 0x18 00992 #define MODE_PAGE_POWER_CONDITION 0x1A 00993 #define MODE_PAGE_FAULT_REPORTING 0x1C 00994 #define MODE_PAGE_CDVD_INACTIVITY 0x1D 00995 #define MODE_PAGE_ELEMENT_ADDRESS 0x1D 00996 #define MODE_PAGE_TRANSPORT_GEOMETRY 0x1E 00997 #define MODE_PAGE_DEVICE_CAPABILITIES 0x1F 00998 #define MODE_PAGE_CAPABILITIES 0x2A 00999 #define MODE_SENSE_RETURN_ALL 0x3f 01000 #define MODE_SENSE_CURRENT_VALUES 0x00 01001 #define MODE_SENSE_CHANGEABLE_VALUES 0x40 01002 #define MODE_SENSE_DEFAULT_VAULES 0x80 01003 #define MODE_SENSE_SAVED_VALUES 0xc0 01004 01005 /* SCSI CDB operation codes */ 01006 #define SCSIOP_TEST_UNIT_READY 0x00 01007 #define SCSIOP_REZERO_UNIT 0x01 01008 #define SCSIOP_REWIND 0x01 01009 #define SCSIOP_REQUEST_BLOCK_ADDR 0x02 01010 #define SCSIOP_REQUEST_SENSE 0x03 01011 #define SCSIOP_FORMAT_UNIT 0x04 01012 #define SCSIOP_READ_BLOCK_LIMITS 0x05 01013 #define SCSIOP_REASSIGN_BLOCKS 0x07 01014 #define SCSIOP_INIT_ELEMENT_STATUS 0x07 01015 #define SCSIOP_READ6 0x08 01016 #define SCSIOP_RECEIVE 0x08 01017 #define SCSIOP_WRITE6 0x0A 01018 #define SCSIOP_PRINT 0x0A 01019 #define SCSIOP_SEND 0x0A 01020 #define SCSIOP_SEEK6 0x0B 01021 #define SCSIOP_TRACK_SELECT 0x0B 01022 #define SCSIOP_SLEW_PRINT 0x0B 01023 #define SCSIOP_SEEK_BLOCK 0x0C 01024 #define SCSIOP_PARTITION 0x0D 01025 #define SCSIOP_READ_REVERSE 0x0F 01026 #define SCSIOP_WRITE_FILEMARKS 0x10 01027 #define SCSIOP_FLUSH_BUFFER 0x10 01028 #define SCSIOP_SPACE 0x11 01029 #define SCSIOP_INQUIRY 0x12 01030 #define SCSIOP_VERIFY6 0x13 01031 #define SCSIOP_RECOVER_BUF_DATA 0x14 01032 #define SCSIOP_MODE_SELECT 0x15 01033 #define SCSIOP_RESERVE_UNIT 0x16 01034 #define SCSIOP_RELEASE_UNIT 0x17 01035 #define SCSIOP_COPY 0x18 01036 #define SCSIOP_ERASE 0x19 01037 #define SCSIOP_MODE_SENSE 0x1A 01038 #define SCSIOP_START_STOP_UNIT 0x1B 01039 #define SCSIOP_STOP_PRINT 0x1B 01040 #define SCSIOP_LOAD_UNLOAD 0x1B 01041 #define SCSIOP_RECEIVE_DIAGNOSTIC 0x1C 01042 #define SCSIOP_SEND_DIAGNOSTIC 0x1D 01043 #define SCSIOP_MEDIUM_REMOVAL 0x1E 01044 01045 #define SCSIOP_READ_FORMATTED_CAPACITY 0x23 01046 #define SCSIOP_READ_CAPACITY 0x25 01047 #define SCSIOP_READ 0x28 01048 #define SCSIOP_WRITE 0x2A 01049 #define SCSIOP_SEEK 0x2B 01050 #define SCSIOP_LOCATE 0x2B 01051 #define SCSIOP_POSITION_TO_ELEMENT 0x2B 01052 #define SCSIOP_WRITE_VERIFY 0x2E 01053 #define SCSIOP_VERIFY 0x2F 01054 #define SCSIOP_SEARCH_DATA_HIGH 0x30 01055 #define SCSIOP_SEARCH_DATA_EQUAL 0x31 01056 #define SCSIOP_SEARCH_DATA_LOW 0x32 01057 #define SCSIOP_SET_LIMITS 0x33 01058 #define SCSIOP_READ_POSITION 0x34 01059 #define SCSIOP_SYNCHRONIZE_CACHE 0x35 01060 #define SCSIOP_COMPARE 0x39 01061 #define SCSIOP_COPY_COMPARE 0x3A 01062 #define SCSIOP_WRITE_DATA_BUFF 0x3B 01063 #define SCSIOP_READ_DATA_BUFF 0x3C 01064 #define SCSIOP_CHANGE_DEFINITION 0x40 01065 #define SCSIOP_READ_SUB_CHANNEL 0x42 01066 #define SCSIOP_READ_TOC 0x43 01067 #define SCSIOP_READ_HEADER 0x44 01068 #define SCSIOP_PLAY_AUDIO 0x45 01069 #define SCSIOP_GET_CONFIGURATION 0x46 01070 #define SCSIOP_PLAY_AUDIO_MSF 0x47 01071 #define SCSIOP_PLAY_TRACK_INDEX 0x48 01072 #define SCSIOP_PLAY_TRACK_RELATIVE 0x49 01073 #define SCSIOP_GET_EVENT_STATUS 0x4A 01074 #define SCSIOP_PAUSE_RESUME 0x4B 01075 #define SCSIOP_LOG_SELECT 0x4C 01076 #define SCSIOP_LOG_SENSE 0x4D 01077 #define SCSIOP_STOP_PLAY_SCAN 0x4E 01078 #define SCSIOP_READ_DISK_INFORMATION 0x51 01079 #define SCSIOP_READ_TRACK_INFORMATION 0x52 01080 #define SCSIOP_RESERVE_TRACK_RZONE 0x53 01081 #define SCSIOP_SEND_OPC_INFORMATION 0x54 01082 #define SCSIOP_MODE_SELECT10 0x55 01083 #define SCSIOP_MODE_SENSE10 0x5A 01084 #define SCSIOP_CLOSE_TRACK_SESSION 0x5B 01085 #define SCSIOP_READ_BUFFER_CAPACITY 0x5C 01086 #define SCSIOP_SEND_CUE_SHEET 0x5D 01087 #define SCSIOP_PERSISTENT_RESERVE_IN 0x5E 01088 #define SCSIOP_PERSISTENT_RESERVE_OUT 0x5F 01089 01090 #define SCSIOP_REPORT_LUNS 0xA0 01091 #define SCSIOP_BLANK 0xA1 01092 #define SCSIOP_SEND_KEY 0xA3 01093 #define SCSIOP_REPORT_KEY 0xA4 01094 #define SCSIOP_MOVE_MEDIUM 0xA5 01095 #define SCSIOP_LOAD_UNLOAD_SLOT 0xA6 01096 #define SCSIOP_EXCHANGE_MEDIUM 0xA6 01097 #define SCSIOP_SET_READ_AHEAD 0xA7 01098 #define SCSIOP_READ_DVD_STRUCTURE 0xAD 01099 #define SCSIOP_REQUEST_VOL_ELEMENT 0xB5 01100 #define SCSIOP_SEND_VOLUME_TAG 0xB6 01101 #define SCSIOP_READ_ELEMENT_STATUS 0xB8 01102 #define SCSIOP_READ_CD_MSF 0xB9 01103 #define SCSIOP_SCAN_CD 0xBA 01104 #define SCSIOP_SET_CD_SPEED 0xBB 01105 #define SCSIOP_PLAY_CD 0xBC 01106 #define SCSIOP_MECHANISM_STATUS 0xBD 01107 #define SCSIOP_READ_CD 0xBE 01108 #define SCSIOP_SEND_DVD_STRUCTURE 0xBF 01109 #define SCSIOP_INIT_ELEMENT_RANGE 0xE7 01110 01111 #define SCSIOP_DENON_EJECT_DISC 0xE6 01112 #define SCSIOP_DENON_STOP_AUDIO 0xE7 01113 #define SCSIOP_DENON_PLAY_AUDIO 0xE8 01114 #define SCSIOP_DENON_READ_TOC 0xE9 01115 #define SCSIOP_DENON_READ_SUBCODE 0xEB 01116 01117 #define SCSIMESS_MODIFY_DATA_POINTER 0x00 01118 #define SCSIMESS_SYNCHRONOUS_DATA_REQ 0x01 01119 #define SCSIMESS_WIDE_DATA_REQUEST 0x03 01120 01121 #define SCSIMESS_MODIFY_DATA_LENGTH 5 01122 #define SCSIMESS_SYNCH_DATA_LENGTH 3 01123 #define SCSIMESS_WIDE_DATA_LENGTH 2 01124 01125 #define SCSIMESS_ABORT 0x06 01126 #define SCSIMESS_ABORT_WITH_TAG 0x0D 01127 #define SCSIMESS_BUS_DEVICE_RESET 0x0C 01128 #define SCSIMESS_CLEAR_QUEUE 0x0E 01129 #define SCSIMESS_COMMAND_COMPLETE 0x00 01130 #define SCSIMESS_DISCONNECT 0x04 01131 #define SCSIMESS_EXTENDED_MESSAGE 0x01 01132 #define SCSIMESS_IDENTIFY 0x80 01133 #define SCSIMESS_IDENTIFY_WITH_DISCON 0xC0 01134 #define SCSIMESS_IGNORE_WIDE_RESIDUE 0x23 01135 #define SCSIMESS_INITIATE_RECOVERY 0x0F 01136 #define SCSIMESS_INIT_DETECTED_ERROR 0x05 01137 #define SCSIMESS_LINK_CMD_COMP 0x0A 01138 #define SCSIMESS_LINK_CMD_COMP_W_FLAG 0x0B 01139 #define SCSIMESS_MESS_PARITY_ERROR 0x09 01140 #define SCSIMESS_MESSAGE_REJECT 0x07 01141 #define SCSIMESS_NO_OPERATION 0x08 01142 #define SCSIMESS_HEAD_OF_QUEUE_TAG 0x21 01143 #define SCSIMESS_ORDERED_QUEUE_TAG 0x22 01144 #define SCSIMESS_SIMPLE_QUEUE_TAG 0x20 01145 #define SCSIMESS_RELEASE_RECOVERY 0x10 01146 #define SCSIMESS_RESTORE_POINTERS 0x03 01147 #define SCSIMESS_SAVE_DATA_POINTER 0x02 01148 #define SCSIMESS_TERMINATE_IO_PROCESS 0x11 01149 01150 #define CDB_FORCE_MEDIA_ACCESS 0x08 01151 01152 #define CDB_RETURN_ON_COMPLETION 0 01153 #define CDB_RETURN_IMMEDIATE 1 01154 01155 #define CDB_INQUIRY_EVPD 0x01 01156 01157 #define LUN0_FORMAT_SAVING_DEFECT_LIST 0 01158 #define USE_DEFAULTMSB 0 01159 #define USE_DEFAULTLSB 0 01160 01161 #define START_UNIT_CODE 0x01 01162 #define STOP_UNIT_CODE 0x00 01163 01164 typedef struct _SENSE_DATA { 01165 UCHAR ErrorCode : 7; 01166 UCHAR Valid : 1; 01167 UCHAR SegmentNumber; 01168 UCHAR SenseKey : 4; 01169 UCHAR Reserved : 1; 01170 UCHAR IncorrectLength : 1; 01171 UCHAR EndOfMedia : 1; 01172 UCHAR FileMark : 1; 01173 UCHAR Information[4]; 01174 UCHAR AdditionalSenseLength; 01175 UCHAR CommandSpecificInformation[4]; 01176 UCHAR AdditionalSenseCode; 01177 UCHAR AdditionalSenseCodeQualifier; 01178 UCHAR FieldReplaceableUnitCode; 01179 UCHAR SenseKeySpecific[3]; 01180 } SENSE_DATA, *PSENSE_DATA; 01181 01182 #define SENSE_BUFFER_SIZE 18 01183 01184 /* Sense codes */ 01185 #define SCSI_SENSE_NO_SENSE 0x00 01186 #define SCSI_SENSE_RECOVERED_ERROR 0x01 01187 #define SCSI_SENSE_NOT_READY 0x02 01188 #define SCSI_SENSE_MEDIUM_ERROR 0x03 01189 #define SCSI_SENSE_HARDWARE_ERROR 0x04 01190 #define SCSI_SENSE_ILLEGAL_REQUEST 0x05 01191 #define SCSI_SENSE_UNIT_ATTENTION 0x06 01192 #define SCSI_SENSE_DATA_PROTECT 0x07 01193 #define SCSI_SENSE_BLANK_CHECK 0x08 01194 #define SCSI_SENSE_UNIQUE 0x09 01195 #define SCSI_SENSE_COPY_ABORTED 0x0A 01196 #define SCSI_SENSE_ABORTED_COMMAND 0x0B 01197 #define SCSI_SENSE_EQUAL 0x0C 01198 #define SCSI_SENSE_VOL_OVERFLOW 0x0D 01199 #define SCSI_SENSE_MISCOMPARE 0x0E 01200 #define SCSI_SENSE_RESERVED 0x0F 01201 01202 /* Additional tape bit */ 01203 #define SCSI_ILLEGAL_LENGTH 0x20 01204 #define SCSI_EOM 0x40 01205 #define SCSI_FILE_MARK 0x80 01206 01207 /* Additional Sense codes */ 01208 #define SCSI_ADSENSE_NO_SENSE 0x00 01209 #define SCSI_ADSENSE_NO_SEEK_COMPLETE 0x02 01210 #define SCSI_ADSENSE_LUN_NOT_READY 0x04 01211 #define SCSI_ADSENSE_WRITE_ERROR 0x0C 01212 #define SCSI_ADSENSE_TRACK_ERROR 0x14 01213 #define SCSI_ADSENSE_SEEK_ERROR 0x15 01214 #define SCSI_ADSENSE_REC_DATA_NOECC 0x17 01215 #define SCSI_ADSENSE_REC_DATA_ECC 0x18 01216 #define SCSI_ADSENSE_ILLEGAL_COMMAND 0x20 01217 #define SCSI_ADSENSE_ILLEGAL_BLOCK 0x21 01218 #define SCSI_ADSENSE_INVALID_CDB 0x24 01219 #define SCSI_ADSENSE_INVALID_LUN 0x25 01220 #define SCSI_ADSENSE_WRITE_PROTECT 0x27 01221 #define SCSI_ADSENSE_MEDIUM_CHANGED 0x28 01222 #define SCSI_ADSENSE_BUS_RESET 0x29 01223 #define SCSI_ADSENSE_INSUFFICIENT_TIME_FOR_OPERATION 0x2E 01224 #define SCSI_ADSENSE_INVALID_MEDIA 0x30 01225 #define SCSI_ADSENSE_NO_MEDIA_IN_DEVICE 0x3a 01226 #define SCSI_ADSENSE_POSITION_ERROR 0x3b 01227 #define SCSI_ADSENSE_OPERATOR_REQUEST 0x5a 01228 #define SCSI_ADSENSE_FAILURE_PREDICTION_THRESHOLD_EXCEEDED 0x5d 01229 #define SCSI_ADSENSE_ILLEGAL_MODE_FOR_THIS_TRACK 0x64 01230 #define SCSI_ADSENSE_COPY_PROTECTION_FAILURE 0x6f 01231 #define SCSI_ADSENSE_POWER_CALIBRATION_ERROR 0x73 01232 #define SCSI_ADSENSE_VENDOR_UNIQUE 0x80 01233 #define SCSI_ADSENSE_MUSIC_AREA 0xA0 01234 #define SCSI_ADSENSE_DATA_AREA 0xA1 01235 #define SCSI_ADSENSE_VOLUME_OVERFLOW 0xA7 01236 01237 #define SCSI_SENSEQ_CAUSE_NOT_REPORTABLE 0x00 01238 #define SCSI_SENSEQ_BECOMING_READY 0x01 01239 #define SCSI_SENSEQ_INIT_COMMAND_REQUIRED 0x02 01240 #define SCSI_SENSEQ_MANUAL_INTERVENTION_REQUIRED 0x03 01241 #define SCSI_SENSEQ_FORMAT_IN_PROGRESS 0x04 01242 #define SCSI_SENSEQ_REBUILD_IN_PROGRESS 0x05 01243 #define SCSI_SENSEQ_RECALCULATION_IN_PROGRESS 0x06 01244 #define SCSI_SENSEQ_OPERATION_IN_PROGRESS 0x07 01245 #define SCSI_SENSEQ_LONG_WRITE_IN_PROGRESS 0x08 01246 #define SCSI_SENSEQ_LOSS_OF_STREAMING 0x09 01247 #define SCSI_SENSEQ_PADDING_BLOCKS_ADDED 0x0A 01248 01249 01250 #define FILE_DEVICE_SCSI 0x0000001b 01251 01252 #define IOCTL_SCSI_EXECUTE_IN ((FILE_DEVICE_SCSI << 16) + 0x0011) 01253 #define IOCTL_SCSI_EXECUTE_OUT ((FILE_DEVICE_SCSI << 16) + 0x0012) 01254 #define IOCTL_SCSI_EXECUTE_NONE ((FILE_DEVICE_SCSI << 16) + 0x0013) 01255 01256 /* SMART support in ATAPI */ 01257 #define IOCTL_SCSI_MINIPORT_SMART_VERSION ((FILE_DEVICE_SCSI << 16) + 0x0500) 01258 #define IOCTL_SCSI_MINIPORT_IDENTIFY ((FILE_DEVICE_SCSI << 16) + 0x0501) 01259 #define IOCTL_SCSI_MINIPORT_READ_SMART_ATTRIBS ((FILE_DEVICE_SCSI << 16) + 0x0502) 01260 #define IOCTL_SCSI_MINIPORT_READ_SMART_THRESHOLDS ((FILE_DEVICE_SCSI << 16) + 0x0503) 01261 #define IOCTL_SCSI_MINIPORT_ENABLE_SMART ((FILE_DEVICE_SCSI << 16) + 0x0504) 01262 #define IOCTL_SCSI_MINIPORT_DISABLE_SMART ((FILE_DEVICE_SCSI << 16) + 0x0505) 01263 #define IOCTL_SCSI_MINIPORT_RETURN_STATUS ((FILE_DEVICE_SCSI << 16) + 0x0506) 01264 #define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTOSAVE ((FILE_DEVICE_SCSI << 16) + 0x0507) 01265 #define IOCTL_SCSI_MINIPORT_SAVE_ATTRIBUTE_VALUES ((FILE_DEVICE_SCSI << 16) + 0x0508) 01266 #define IOCTL_SCSI_MINIPORT_EXECUTE_OFFLINE_DIAGS ((FILE_DEVICE_SCSI << 16) + 0x0509) 01267 #define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTO_OFFLINE ((FILE_DEVICE_SCSI << 16) + 0x050a) 01268 #define IOCTL_SCSI_MINIPORT_READ_SMART_LOG ((FILE_DEVICE_SCSI << 16) + 0x050b) 01269 #define IOCTL_SCSI_MINIPORT_WRITE_SMART_LOG ((FILE_DEVICE_SCSI << 16) + 0x050c) 01270 01271 /* CLUSTER support */ 01272 #define IOCTL_SCSI_MINIPORT_NOT_QUORUM_CAPABLE ((FILE_DEVICE_SCSI << 16) + 0x0520) 01273 #define IOCTL_SCSI_MINIPORT_NOT_CLUSTER_CAPABLE ((FILE_DEVICE_SCSI << 16) + 0x0521) 01274 01275 /* READ_TOC formats */ 01276 #define READ_TOC_FORMAT_TOC 0x00 01277 #define READ_TOC_FORMAT_SESSION 0x01 01278 #define READ_TOC_FORMAT_FULL_TOC 0x02 01279 #define READ_TOC_FORMAT_PMA 0x03 01280 #define READ_TOC_FORMAT_ATIP 0x04 01281 01282 /* Read Capacity Data. Returned in Big Endian format */ 01283 typedef struct _READ_CAPACITY_DATA { 01284 ULONG LogicalBlockAddress; 01285 ULONG BytesPerBlock; 01286 } READ_CAPACITY_DATA, *PREAD_CAPACITY_DATA; 01287 01288 /* Read Block Limits Data. Returned in Big Endian format */ 01289 typedef struct _READ_BLOCK_LIMITS { 01290 UCHAR Reserved; 01291 UCHAR BlockMaximumSize[3]; 01292 UCHAR BlockMinimumSize[2]; 01293 } READ_BLOCK_LIMITS_DATA, *PREAD_BLOCK_LIMITS_DATA; 01294 01295 01296 typedef struct _MODE_PARAMETER_HEADER { 01297 UCHAR ModeDataLength; 01298 UCHAR MediumType; 01299 UCHAR DeviceSpecificParameter; 01300 UCHAR BlockDescriptorLength; 01301 }MODE_PARAMETER_HEADER, *PMODE_PARAMETER_HEADER; 01302 01303 typedef struct _MODE_PARAMETER_HEADER10 { 01304 UCHAR ModeDataLength[2]; 01305 UCHAR MediumType; 01306 UCHAR DeviceSpecificParameter; 01307 UCHAR Reserved[2]; 01308 UCHAR BlockDescriptorLength[2]; 01309 } MODE_PARAMETER_HEADER10, *PMODE_PARAMETER_HEADER10; 01310 01311 #define MODE_FD_SINGLE_SIDE 0x01 01312 #define MODE_FD_DOUBLE_SIDE 0x02 01313 #define MODE_FD_MAXIMUM_TYPE 0x1E 01314 #define MODE_DSP_FUA_SUPPORTED 0x10 01315 #define MODE_DSP_WRITE_PROTECT 0x80 01316 01317 typedef struct _MODE_PARAMETER_BLOCK { 01318 UCHAR DensityCode; 01319 UCHAR NumberOfBlocks[3]; 01320 UCHAR Reserved; 01321 UCHAR BlockLength[3]; 01322 } MODE_PARAMETER_BLOCK, *PMODE_PARAMETER_BLOCK; 01323 01324 typedef struct _MODE_DISCONNECT_PAGE { 01325 UCHAR PageCode : 6; 01326 UCHAR Reserved : 1; 01327 UCHAR PageSavable : 1; 01328 UCHAR PageLength; 01329 UCHAR BufferFullRatio; 01330 UCHAR BufferEmptyRatio; 01331 UCHAR BusInactivityLimit[2]; 01332 UCHAR BusDisconnectTime[2]; 01333 UCHAR BusConnectTime[2]; 01334 UCHAR MaximumBurstSize[2]; 01335 UCHAR DataTransferDisconnect : 2; 01336 UCHAR Reserved2[3]; 01337 }MODE_DISCONNECT_PAGE, *PMODE_DISCONNECT_PAGE; 01338 01339 typedef struct _MODE_CACHING_PAGE { 01340 UCHAR PageCode : 6; 01341 UCHAR Reserved : 1; 01342 UCHAR PageSavable : 1; 01343 UCHAR PageLength; 01344 UCHAR ReadDisableCache : 1; 01345 UCHAR MultiplicationFactor : 1; 01346 UCHAR WriteCacheEnable : 1; 01347 UCHAR Reserved2 : 5; 01348 UCHAR WriteRetensionPriority : 4; 01349 UCHAR ReadRetensionPriority : 4; 01350 UCHAR DisablePrefetchTransfer[2]; 01351 UCHAR MinimumPrefetch[2]; 01352 UCHAR MaximumPrefetch[2]; 01353 UCHAR MaximumPrefetchCeiling[2]; 01354 }MODE_CACHING_PAGE, *PMODE_CACHING_PAGE; 01355 01356 typedef struct _MODE_CDROM_WRITE_PARAMETERS_PAGE { 01357 UCHAR PageLength; 01358 UCHAR WriteType : 4; 01359 UCHAR TestWrite : 1; 01360 UCHAR LinkSizeValid : 1; 01361 UCHAR BufferUnderrunFreeEnabled : 1; 01362 UCHAR Reserved2 : 1; 01363 UCHAR TrackMode : 4; 01364 UCHAR Copy : 1; 01365 UCHAR FixedPacket : 1; 01366 UCHAR MultiSession : 2; 01367 UCHAR DataBlockType : 4; 01368 UCHAR Reserved3 : 4; 01369 UCHAR LinkSize; 01370 UCHAR Reserved4; 01371 UCHAR HostApplicationCode : 6; 01372 UCHAR Reserved5 : 2; 01373 UCHAR SessionFormat; 01374 UCHAR Reserved6; 01375 UCHAR PacketSize[4]; 01376 UCHAR AudioPauseLength[2]; 01377 UCHAR Reserved7 : 7; 01378 UCHAR MediaCatalogNumberValid : 1; 01379 UCHAR MediaCatalogNumber[13]; 01380 UCHAR MediaCatalogNumberZero; 01381 UCHAR MediaCatalogNumberAFrame; 01382 UCHAR Reserved8 : 7; 01383 UCHAR ISRCValid : 1; 01384 UCHAR ISRCCountry[2]; 01385 UCHAR ISRCOwner[3]; 01386 UCHAR ISRCRecordingYear[2]; 01387 UCHAR ISRCSerialNumber[5]; 01388 UCHAR ISRCZero; 01389 UCHAR ISRCAFrame; 01390 UCHAR ISRCReserved; 01391 UCHAR SubHeaderData[4]; 01392 } MODE_CDROM_WRITE_PARAMETERS_PAGE, *PMODE_CDROM_WRITE_PARAMETERS_PAGE; 01393 01394 typedef struct _MODE_FLEXIBLE_DISK_PAGE { 01395 UCHAR PageCode : 6; 01396 UCHAR Reserved : 1; 01397 UCHAR PageSavable : 1; 01398 UCHAR PageLength; 01399 UCHAR TransferRate[2]; 01400 UCHAR NumberOfHeads; 01401 UCHAR SectorsPerTrack; 01402 UCHAR BytesPerSector[2]; 01403 UCHAR NumberOfCylinders[2]; 01404 UCHAR StartWritePrecom[2]; 01405 UCHAR StartReducedCurrent[2]; 01406 UCHAR StepRate[2]; 01407 UCHAR StepPluseWidth; 01408 UCHAR HeadSettleDelay[2]; 01409 UCHAR MotorOnDelay; 01410 UCHAR MotorOffDelay; 01411 UCHAR Reserved2 : 5; 01412 UCHAR MotorOnAsserted : 1; 01413 UCHAR StartSectorNumber : 1; 01414 UCHAR TrueReadySignal : 1; 01415 UCHAR StepPlusePerCyclynder : 4; 01416 UCHAR Reserved3 : 4; 01417 UCHAR WriteCompenstation; 01418 UCHAR HeadLoadDelay; 01419 UCHAR HeadUnloadDelay; 01420 UCHAR Pin2Usage : 4; 01421 UCHAR Pin34Usage : 4; 01422 UCHAR Pin1Usage : 4; 01423 UCHAR Pin4Usage : 4; 01424 UCHAR MediumRotationRate[2]; 01425 UCHAR Reserved4[2]; 01426 } MODE_FLEXIBLE_DISK_PAGE, *PMODE_FLEXIBLE_DISK_PAGE; 01427 01428 typedef struct _MODE_FORMAT_PAGE { 01429 UCHAR PageCode : 6; 01430 UCHAR Reserved : 1; 01431 UCHAR PageSavable : 1; 01432 UCHAR PageLength; 01433 UCHAR TracksPerZone[2]; 01434 UCHAR AlternateSectorsPerZone[2]; 01435 UCHAR AlternateTracksPerZone[2]; 01436 UCHAR AlternateTracksPerLogicalUnit[2]; 01437 UCHAR SectorsPerTrack[2]; 01438 UCHAR BytesPerPhysicalSector[2]; 01439 UCHAR Interleave[2]; 01440 UCHAR TrackSkewFactor[2]; 01441 UCHAR CylinderSkewFactor[2]; 01442 UCHAR Reserved2 : 4; 01443 UCHAR SurfaceFirst : 1; 01444 UCHAR RemovableMedia : 1; 01445 UCHAR HardSectorFormating : 1; 01446 UCHAR SoftSectorFormating : 1; 01447 UCHAR Reserved3[3]; 01448 } MODE_FORMAT_PAGE, *PMODE_FORMAT_PAGE; 01449 01450 typedef struct _MODE_RIGID_GEOMETRY_PAGE { 01451 UCHAR PageCode : 6; 01452 UCHAR Reserved : 1; 01453 UCHAR PageSavable : 1; 01454 UCHAR PageLength; 01455 UCHAR NumberOfCylinders[3]; 01456 UCHAR NumberOfHeads; 01457 UCHAR StartWritePrecom[3]; 01458 UCHAR StartReducedCurrent[3]; 01459 UCHAR DriveStepRate[2]; 01460 UCHAR LandZoneCyclinder[3]; 01461 UCHAR RotationalPositionLock : 2; 01462 UCHAR Reserved2 : 6; 01463 UCHAR RotationOffset; 01464 UCHAR Reserved3; 01465 UCHAR RoataionRate[2]; 01466 UCHAR Reserved4[2]; 01467 } MODE_RIGID_GEOMETRY_PAGE, *PMODE_RIGID_GEOMETRY_PAGE; 01468 01469 typedef struct _MODE_READ_WRITE_RECOVERY_PAGE { 01470 UCHAR PageCode : 6; 01471 UCHAR Reserved1 : 1; 01472 UCHAR PSBit : 1; 01473 UCHAR PageLength; 01474 UCHAR DCRBit : 1; 01475 UCHAR DTEBit : 1; 01476 UCHAR PERBit : 1; 01477 UCHAR EERBit : 1; 01478 UCHAR RCBit : 1; 01479 UCHAR TBBit : 1; 01480 UCHAR ARRE : 1; 01481 UCHAR AWRE : 1; 01482 UCHAR ReadRetryCount; 01483 UCHAR Reserved4[4]; 01484 UCHAR WriteRetryCount; 01485 UCHAR Reserved5[3]; 01486 } MODE_READ_WRITE_RECOVERY_PAGE, *PMODE_READ_WRITE_RECOVERY_PAGE; 01487 01488 typedef struct _MODE_READ_RECOVERY_PAGE { 01489 UCHAR PageCode : 6; 01490 UCHAR Reserved1 : 1; 01491 UCHAR PSBit : 1; 01492 UCHAR PageLength; 01493 UCHAR DCRBit : 1; 01494 UCHAR DTEBit : 1; 01495 UCHAR PERBit : 1; 01496 UCHAR Reserved2 : 1; 01497 UCHAR RCBit : 1; 01498 UCHAR TBBit : 1; 01499 UCHAR Reserved3 : 2; 01500 UCHAR ReadRetryCount; 01501 UCHAR Reserved4[4]; 01502 } MODE_READ_RECOVERY_PAGE, *PMODE_READ_RECOVERY_PAGE; 01503 01504 typedef struct _MODE_INFO_EXCEPTIONS { 01505 UCHAR PageCode : 6; 01506 UCHAR Reserved1 : 1; 01507 UCHAR PSBit : 1; 01508 UCHAR PageLength; 01509 _ANONYMOUS_UNION union { 01510 UCHAR Flags; 01511 _ANONYMOUS_STRUCT struct { 01512 UCHAR LogErr : 1; 01513 UCHAR Reserved2 : 1; 01514 UCHAR Test : 1; 01515 UCHAR Dexcpt : 1; 01516 UCHAR Reserved3 : 3; 01517 UCHAR Perf : 1; 01518 } DUMMYSTRUCTNAME; 01519 } DUMMYUNIONNAME; 01520 UCHAR ReportMethod : 4; 01521 UCHAR Reserved4 : 4; 01522 UCHAR IntervalTimer[4]; 01523 UCHAR ReportCount[4]; 01524 } MODE_INFO_EXCEPTIONS, *PMODE_INFO_EXCEPTIONS; 01525 01526 /* CDROM audio control */ 01527 #define CDB_AUDIO_PAUSE 0x00 01528 #define CDB_AUDIO_RESUME 0x01 01529 #define CDB_DEVICE_START 0x11 01530 #define CDB_DEVICE_STOP 0x10 01531 #define CDB_EJECT_MEDIA 0x10 01532 #define CDB_LOAD_MEDIA 0x01 01533 #define CDB_SUBCHANNEL_HEADER 0x00 01534 #define CDB_SUBCHANNEL_BLOCK 0x01 01535 01536 #define CDROM_AUDIO_CONTROL_PAGE 0x0E 01537 #define MODE_SELECT_IMMEDIATE 0x04 01538 #define MODE_SELECT_PFBIT 0x10 01539 01540 #define CDB_USE_MSF 0x01 01541 01542 typedef struct _PORT_OUTPUT { 01543 UCHAR ChannelSelection; 01544 UCHAR Volume; 01545 } PORT_OUTPUT, *PPORT_OUTPUT; 01546 01547 typedef struct _AUDIO_OUTPUT { 01548 UCHAR CodePage; 01549 UCHAR ParameterLength; 01550 UCHAR Immediate; 01551 UCHAR Reserved[2]; 01552 UCHAR LbaFormat; 01553 UCHAR LogicalBlocksPerSecond[2]; 01554 PORT_OUTPUT PortOutput[4]; 01555 } AUDIO_OUTPUT, *PAUDIO_OUTPUT; 01556 01557 /* Multisession CDROMs */ 01558 #define GET_LAST_SESSION 0x01 01559 #define GET_SESSION_DATA 0x02; 01560 01561 /* Atapi 2.5 changers */ 01562 typedef struct _MECHANICAL_STATUS_INFORMATION_HEADER { 01563 UCHAR CurrentSlot : 5; 01564 UCHAR ChangerState : 2; 01565 UCHAR Fault : 1; 01566 UCHAR Reserved : 5; 01567 UCHAR MechanismState : 3; 01568 UCHAR CurrentLogicalBlockAddress[3]; 01569 UCHAR NumberAvailableSlots; 01570 UCHAR SlotTableLength[2]; 01571 } MECHANICAL_STATUS_INFORMATION_HEADER, *PMECHANICAL_STATUS_INFORMATION_HEADER; 01572 01573 typedef struct _SLOT_TABLE_INFORMATION { 01574 UCHAR DiscChanged : 1; 01575 UCHAR Reserved : 6; 01576 UCHAR DiscPresent : 1; 01577 UCHAR Reserved2[3]; 01578 } SLOT_TABLE_INFORMATION, *PSLOT_TABLE_INFORMATION; 01579 01580 typedef struct _MECHANICAL_STATUS { 01581 MECHANICAL_STATUS_INFORMATION_HEADER MechanicalStatusHeader; 01582 SLOT_TABLE_INFORMATION SlotTableInfo[1]; 01583 } MECHANICAL_STATUS, *PMECHANICAL_STATUS; 01584 01585 01586 /* Tape definitions */ 01587 typedef struct _TAPE_POSITION_DATA { 01588 UCHAR Reserved1 : 2; 01589 UCHAR BlockPositionUnsupported : 1; 01590 UCHAR Reserved2 : 3; 01591 UCHAR EndOfPartition : 1; 01592 UCHAR BeginningOfPartition : 1; 01593 UCHAR PartitionNumber; 01594 USHORT Reserved3; 01595 UCHAR FirstBlock[4]; 01596 UCHAR LastBlock[4]; 01597 UCHAR Reserved4; 01598 UCHAR NumberOfBlocks[3]; 01599 UCHAR NumberOfBytes[4]; 01600 } TAPE_POSITION_DATA, *PTAPE_POSITION_DATA; 01601 01602 /* This structure is used to convert little endian ULONGs 01603 to SCSI CDB big endians values. */ 01604 typedef union _EIGHT_BYTE { 01605 _ANONYMOUS_STRUCT struct { 01606 UCHAR Byte0; 01607 UCHAR Byte1; 01608 UCHAR Byte2; 01609 UCHAR Byte3; 01610 UCHAR Byte4; 01611 UCHAR Byte5; 01612 UCHAR Byte6; 01613 UCHAR Byte7; 01614 } DUMMYSTRUCTNAME; 01615 ULONGLONG AsULongLong; 01616 } EIGHT_BYTE, *PEIGHT_BYTE; 01617 01618 typedef union _FOUR_BYTE { 01619 _ANONYMOUS_STRUCT struct { 01620 UCHAR Byte0; 01621 UCHAR Byte1; 01622 UCHAR Byte2; 01623 UCHAR Byte3; 01624 } DUMMYSTRUCTNAME; 01625 ULONG AsULong; 01626 } FOUR_BYTE, *PFOUR_BYTE; 01627 01628 typedef union _TWO_BYTE { 01629 _ANONYMOUS_STRUCT struct { 01630 UCHAR Byte0; 01631 UCHAR Byte1; 01632 } DUMMYSTRUCTNAME; 01633 USHORT AsUShort; 01634 } TWO_BYTE, *PTWO_BYTE; 01635 01636 /* Byte reversing macro for converting between 01637 big- and little-endian formats */ 01638 #define REVERSE_BYTES_QUAD(Destination, Source) { \ 01639 PEIGHT_BYTE _val1 = (PEIGHT_BYTE)(Destination); \ 01640 PEIGHT_BYTE _val2 = (PEIGHT_BYTE)(Source); \ 01641 _val1->Byte7 = _val2->Byte0; \ 01642 _val1->Byte6 = _val2->Byte1; \ 01643 _val1->Byte5 = _val2->Byte2; \ 01644 _val1->Byte4 = _val2->Byte3; \ 01645 _val1->Byte3 = _val2->Byte4; \ 01646 _val1->Byte2 = _val2->Byte5; \ 01647 _val1->Byte1 = _val2->Byte6; \ 01648 _val1->Byte0 = _val2->Byte7; \ 01649 } 01650 01651 #define REVERSE_BYTES(Destination, Source) { \ 01652 PFOUR_BYTE _val1 = (PFOUR_BYTE)(Destination); \ 01653 PFOUR_BYTE _val2 = (PFOUR_BYTE)(Source); \ 01654 _val1->Byte3 = _val2->Byte0; \ 01655 _val1->Byte2 = _val2->Byte1; \ 01656 _val1->Byte1 = _val2->Byte2; \ 01657 _val1->Byte0 = _val2->Byte3; \ 01658 } 01659 01660 #define REVERSE_BYTES_SHORT(Destination, Source) { \ 01661 PTWO_BYTE _val1 = (PTWO_BYTE)(Destination); \ 01662 PTWO_BYTE _val2 = (PTWO_BYTE)(Source); \ 01663 _val1->Byte1 = _val2->Byte0; \ 01664 _val1->Byte0 = _val2->Byte1; \ 01665 } 01666 01667 #define REVERSE_SHORT(Short) { \ 01668 UCHAR _val; \ 01669 PTWO_BYTE _val2 = (PTWO_BYTE)(Short); \ 01670 _val = _val2->Byte0; \ 01671 _val2->Byte0 = _val2->Byte1; \ 01672 _val2->Byte1 = _val; \ 01673 } 01674 01675 #define REVERSE_LONG(Long) { \ 01676 UCHAR _val; \ 01677 PFOUR_BYTE _val2 = (PFOUR_BYTE)(Long); \ 01678 _val = _val2->Byte3; \ 01679 _val2->Byte3 = _val2->Byte0; \ 01680 _val2->Byte0 = _val; \ 01681 _val = _val2->Byte2; \ 01682 _val2->Byte2 = _val2->Byte1; \ 01683 _val2->Byte1 = _val; \ 01684 } 01685 01686 #define WHICH_BIT(Data, Bit) { \ 01687 UCHAR _val; \ 01688 for (_val = 0; _val < 32; _val++) { \ 01689 if (((Data) >> _val) == 1) { \ 01690 break; \ 01691 } \ 01692 } \ 01693 ASSERT(_val != 32); \ 01694 (Bit) = _val; \ 01695 } 01696 01697 #ifdef __cplusplus 01698 } 01699 #endif 01700 01701 #endif /* __SCSI_H */
Generated on Tue Jul 12 2022 19:59:55 by
1.7.2