Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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