scsi.h
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C头文件 代码 · 共 1,695 行 · 第 1/4 页
H
1,695 行
/*
* scsi.h
*
* SCSI port and class interface.
*
* This file is part of the w32api package.
*
* Contributors:
* Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAIMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __SCSI_H
#define __SCSI_H
#if __GNUC__ >=3
#pragma GCC system_header
#endif
#ifdef __cplusplus
extern "C" {
#endif
#include "ntddk.h"
typedef union _CDB {
struct _CDB6GENERIC {
UCHAR OperationCode;
UCHAR Immediate : 1;
UCHAR CommandUniqueBits : 4;
UCHAR LogicalUnitNumber : 3;
UCHAR CommandUniqueBytes[3];
UCHAR Link : 1;
UCHAR Flag : 1;
UCHAR Reserved : 4;
UCHAR VendorUnique : 2;
} CDB6GENERIC, *PCDB6GENERIC;
struct _CDB6READWRITE {
UCHAR OperationCode;
UCHAR LogicalBlockMsb1 : 5;
UCHAR LogicalUnitNumber : 3;
UCHAR LogicalBlockMsb0;
UCHAR LogicalBlockLsb;
UCHAR TransferBlocks;
UCHAR Control;
} CDB6READWRITE, *PCDB6READWRITE;
struct _CDB6INQUIRY {
UCHAR OperationCode;
UCHAR Reserved1 : 5;
UCHAR LogicalUnitNumber : 3;
UCHAR PageCode;
UCHAR IReserved;
UCHAR AllocationLength;
UCHAR Control;
} CDB6INQUIRY, *PCDB6INQUIRY;
struct _CDB6INQUIRY3 {
UCHAR OperationCode;
UCHAR EnableVitalProductData : 1;
UCHAR CommandSupportData : 1;
UCHAR Reserved1 : 6;
UCHAR PageCode;
UCHAR Reserved2;
UCHAR AllocationLength;
UCHAR Control;
} CDB6INQUIRY3, *PCDB6INQUIRY3;
struct _CDB6VERIFY {
UCHAR OperationCode;
UCHAR Fixed : 1;
UCHAR ByteCompare : 1;
UCHAR Immediate : 1;
UCHAR Reserved : 2;
UCHAR LogicalUnitNumber : 3;
UCHAR VerificationLength[3];
UCHAR Control;
} CDB6VERIFY, *PCDB6VERIFY;
struct _CDB6FORMAT {
UCHAR OperationCode;
UCHAR FormatControl : 5;
UCHAR LogicalUnitNumber : 3;
UCHAR FReserved1;
UCHAR InterleaveMsb;
UCHAR InterleaveLsb;
UCHAR FReserved2;
} CDB6FORMAT, *PCDB6FORMAT;
struct _CDB10 {
UCHAR OperationCode;
UCHAR RelativeAddress : 1;
UCHAR Reserved1 : 2;
UCHAR ForceUnitAccess : 1;
UCHAR DisablePageOut : 1;
UCHAR LogicalUnitNumber : 3;
UCHAR LogicalBlockByte0;
UCHAR LogicalBlockByte1;
UCHAR LogicalBlockByte2;
UCHAR LogicalBlockByte3;
UCHAR Reserved2;
UCHAR TransferBlocksMsb;
UCHAR TransferBlocksLsb;
UCHAR Control;
} CDB10, *PCDB10;
struct _CDB12 {
UCHAR OperationCode;
UCHAR RelativeAddress : 1;
UCHAR Reserved1 : 2;
UCHAR ForceUnitAccess : 1;
UCHAR DisablePageOut : 1;
UCHAR LogicalUnitNumber : 3;
UCHAR LogicalBlock[4];
UCHAR TransferLength[4];
UCHAR Reserved2;
UCHAR Control;
} CDB12, *PCDB12;
struct _PAUSE_RESUME {
UCHAR OperationCode;
UCHAR Reserved1 : 5;
UCHAR LogicalUnitNumber : 3;
UCHAR Reserved2[6];
UCHAR Action;
UCHAR Control;
} PAUSE_RESUME, *PPAUSE_RESUME;
struct _READ_TOC {
UCHAR OperationCode;
UCHAR Reserved0 : 1;
UCHAR Msf : 1;
UCHAR Reserved1 : 3;
UCHAR LogicalUnitNumber : 3;
UCHAR Format2 : 4;
UCHAR Reserved2 : 4;
UCHAR Reserved3[3];
UCHAR StartingTrack;
UCHAR AllocationLength[2];
UCHAR Control : 6;
UCHAR Format : 2;
} READ_TOC, *PREAD_TOC;
struct _READ_DISK_INFORMATION {
UCHAR OperationCode;
UCHAR Reserved1 : 5;
UCHAR Lun : 3;
UCHAR Reserved2[5];
UCHAR AllocationLength[2];
UCHAR Control;
} READ_DISK_INFORMATION, *PREAD_DISK_INFORMATION;
struct _READ_TRACK_INFORMATION {
UCHAR OperationCode;
UCHAR Track : 1;
UCHAR Reserved1 : 3;
UCHAR Reserved2 : 1;
UCHAR Lun : 3;
UCHAR BlockAddress[4];
UCHAR Reserved3;
UCHAR AllocationLength[2];
UCHAR Control;
} READ_TRACK_INFORMATION, *PREAD_TRACK_INFORMATION;
struct _RESERVE_TRACK_RZONE {
UCHAR OperationCode;
UCHAR Reserved1[4];
UCHAR ReservationSize[4];
UCHAR Control;
} RESERVE_TRACK_RZONE, *PRESERVE_TRACK_RZONE;
struct _SEND_OPC_INFORMATION {
UCHAR OperationCode;
UCHAR DoOpc : 1;
UCHAR Reserved : 7;
UCHAR Reserved1[5];
UCHAR ParameterListLength[2];
UCHAR Reserved2;
} SEND_OPC_INFORMATION, *PSEND_OPC_INFORMATION;
struct _CLOSE_TRACK {
UCHAR OperationCode;
UCHAR Immediate : 1;
UCHAR Reserved1 : 7;
UCHAR Track : 1;
UCHAR Session : 1;
UCHAR Reserved2 : 6;
UCHAR Reserved3;
UCHAR TrackNumber[2];
UCHAR Reserved4[3];
UCHAR Control;
} CLOSE_TRACK, *PCLOSE_TRACK;
struct _SEND_CUE_SHEET {
UCHAR OperationCode;
UCHAR Reserved[5];
UCHAR CueSheetSize[3];
UCHAR Control;
} SEND_CUE_SHEET, *PSEND_CUE_SHEET;
struct _READ_HEADER {
UCHAR OperationCode;
UCHAR Reserved1 : 1;
UCHAR Msf : 1;
UCHAR Reserved2 : 3;
UCHAR Lun : 3;
UCHAR LogicalBlockAddress[4];
UCHAR Reserved3;
UCHAR AllocationLength[2];
UCHAR Control;
} READ_HEADER, *PREAD_HEADER;
struct _PLAY_AUDIO {
UCHAR OperationCode;
UCHAR Reserved1 : 5;
UCHAR LogicalUnitNumber : 3;
UCHAR StartingBlockAddress[4];
UCHAR Reserved2;
UCHAR PlayLength[2];
UCHAR Control;
} PLAY_AUDIO, *PPLAY_AUDIO;
struct _PLAY_AUDIO_MSF {
UCHAR OperationCode;
UCHAR Reserved1 : 5;
UCHAR LogicalUnitNumber : 3;
UCHAR Reserved2;
UCHAR StartingM;
UCHAR StartingS;
UCHAR StartingF;
UCHAR EndingM;
UCHAR EndingS;
UCHAR EndingF;
UCHAR Control;
} PLAY_AUDIO_MSF, *PPLAY_AUDIO_MSF;
/* FIXME: Should the union be anonymous in C++ too? If so,
can't define named types _LBA and _MSF within anonymous union
for C++. */
struct _PLAY_CD {
UCHAR OperationCode;
UCHAR Reserved1 : 1;
UCHAR CMSF : 1;
UCHAR ExpectedSectorType : 3;
UCHAR Lun : 3;
#ifndef __cplusplus
_ANONYMOUS_UNION
#endif
union {
struct _LBA {
UCHAR StartingBlockAddress[4];
UCHAR PlayLength[4];
} LBA;
struct _MSF {
UCHAR Reserved1;
UCHAR StartingM;
UCHAR StartingS;
UCHAR StartingF;
UCHAR EndingM;
UCHAR EndingS;
UCHAR EndingF;
UCHAR Reserved2;
} MSF;
#ifndef __cplusplus
}DUMMYUNIONNAME;
#else
}u;
#endif
UCHAR Audio : 1;
UCHAR Composite : 1;
UCHAR Port1 : 1;
UCHAR Port2 : 1;
UCHAR Reserved2 : 3;
UCHAR Speed : 1;
UCHAR Control;
} PLAY_CD, *PPLAY_CD;
struct _SCAN_CD {
UCHAR OperationCode;
UCHAR RelativeAddress : 1;
UCHAR Reserved1 : 3;
UCHAR Direct : 1;
UCHAR Lun : 3;
UCHAR StartingAddress[4];
UCHAR Reserved2[3];
UCHAR Reserved3 : 6;
UCHAR Type : 2;
UCHAR Reserved4;
UCHAR Control;
} SCAN_CD, *PSCAN_CD;
struct _STOP_PLAY_SCAN {
UCHAR OperationCode;
UCHAR Reserved1 : 5;
UCHAR Lun : 3;
UCHAR Reserved2[7];
UCHAR Control;
} STOP_PLAY_SCAN, *PSTOP_PLAY_SCAN;
struct _SUBCHANNEL {
UCHAR OperationCode;
UCHAR Reserved0 : 1;
UCHAR Msf : 1;
UCHAR Reserved1 : 3;
UCHAR LogicalUnitNumber : 3;
UCHAR Reserved2 : 6;
UCHAR SubQ : 1;
UCHAR Reserved3 : 1;
UCHAR Format;
UCHAR Reserved4[2];
UCHAR TrackNumber;
UCHAR AllocationLength[2];
UCHAR Control;
} SUBCHANNEL, *PSUBCHANNEL;
struct _READ_CD {
UCHAR OperationCode;
UCHAR RelativeAddress : 1;
UCHAR Reserved0 : 1;
UCHAR ExpectedSectorType : 3;
UCHAR Lun : 3;
UCHAR StartingLBA[4];
UCHAR TransferBlocks[3];
UCHAR Reserved2 : 1;
UCHAR ErrorFlags : 2;
UCHAR IncludeEDC : 1;
UCHAR IncludeUserData : 1;
UCHAR HeaderCode : 2;
UCHAR IncludeSyncData : 1;
UCHAR SubChannelSelection : 3;
UCHAR Reserved3 : 5;
UCHAR Control;
} READ_CD, *PREAD_CD;
struct _READ_CD_MSF {
UCHAR OperationCode;
UCHAR RelativeAddress : 1;
UCHAR Reserved1 : 1;
UCHAR ExpectedSectorType : 3;
UCHAR Lun : 3;
UCHAR Reserved2;
UCHAR StartingM;
UCHAR StartingS;
UCHAR StartingF;
UCHAR EndingM;
UCHAR EndingS;
UCHAR EndingF;
UCHAR Reserved3;
UCHAR Reserved4 : 1;
UCHAR ErrorFlags : 2;
UCHAR IncludeEDC : 1;
UCHAR IncludeUserData : 1;
UCHAR HeaderCode : 2;
UCHAR IncludeSyncData : 1;
UCHAR SubChannelSelection : 3;
UCHAR Reserved5 : 5;
UCHAR Control;
} READ_CD_MSF, *PREAD_CD_MSF;
struct _PLXTR_READ_CDDA {
UCHAR OperationCode;
UCHAR Reserved0 : 5;
UCHAR LogicalUnitNumber : 3;
UCHAR LogicalBlockByte0;
UCHAR LogicalBlockByte1;
UCHAR LogicalBlockByte2;
UCHAR LogicalBlockByte3;
UCHAR TransferBlockByte0;
UCHAR TransferBlockByte1;
UCHAR TransferBlockByte2;
UCHAR TransferBlockByte3;
UCHAR SubCode;
UCHAR Control;
} PLXTR_READ_CDDA, *PPLXTR_READ_CDDA;
struct _NEC_READ_CDDA {
UCHAR OperationCode;
UCHAR Reserved0;
UCHAR LogicalBlockByte0;
UCHAR LogicalBlockByte1;
UCHAR LogicalBlockByte2;
UCHAR LogicalBlockByte3;
UCHAR Reserved1;
UCHAR TransferBlockByte0;
UCHAR TransferBlockByte1;
UCHAR Control;
} NEC_READ_CDDA, *PNEC_READ_CDDA;
struct _MODE_SENSE {
UCHAR OperationCode;
UCHAR Reserved1 : 3;
UCHAR Dbd : 1;
UCHAR Reserved2 : 1;
UCHAR LogicalUnitNumber : 3;
UCHAR PageCode : 6;
UCHAR Pc : 2;
UCHAR Reserved3;
UCHAR AllocationLength;
UCHAR Control;
} MODE_SENSE, *PMODE_SENSE;
struct _MODE_SENSE10 {
UCHAR OperationCode;
UCHAR Reserved1 : 3;
UCHAR Dbd : 1;
UCHAR Reserved2 : 1;
UCHAR LogicalUnitNumber : 3;
UCHAR PageCode : 6;
UCHAR Pc : 2;
UCHAR Reserved3[4];
UCHAR AllocationLength[2];
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?