📄 scsi.h
字号:
/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
scsi.h
Abstract:
These are the structures and defines that are used in the
SCSI port and class drivers.
Authors:
Revision History:
--*/
#ifndef _NTSCSI_
#define _NTSCSI_
#ifndef _NTSCSI_USER_MODE_
#include "srb.h"
#endif // !defined _NTSCSI_USER_MODE_
// begin_ntminitape
//
// Command Descriptor Block. Passed by SCSI controller chip over the SCSI bus
//
typedef union _CDB {
//
// Generic 6-Byte 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;
//
// Standard 6-byte CDB
//
struct _CDB6READWRITE {
UCHAR OperationCode;
UCHAR LogicalBlockMsb1 : 5;
UCHAR LogicalUnitNumber : 3;
UCHAR LogicalBlockMsb0;
UCHAR LogicalBlockLsb;
UCHAR TransferBlocks;
UCHAR Control;
} CDB6READWRITE, *PCDB6READWRITE;
//
// SCSI Inquiry CDB
//
struct _CDB6INQUIRY {
UCHAR OperationCode;
UCHAR Reserved1 : 5;
UCHAR LogicalUnitNumber : 3;
UCHAR PageCode;
UCHAR IReserved;
UCHAR AllocationLength;
UCHAR Control;
} CDB6INQUIRY, *PCDB6INQUIRY;
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;
//
// SCSI Format CDB
//
struct _CDB6FORMAT {
UCHAR OperationCode;
UCHAR FormatControl : 5;
UCHAR LogicalUnitNumber : 3;
UCHAR FReserved1;
UCHAR InterleaveMsb;
UCHAR InterleaveLsb;
UCHAR FReserved2;
} CDB6FORMAT, *PCDB6FORMAT;
//
// Standard 10-byte CDB
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;
//
// Standard 12-byte CDB
//
struct _CDB12 {
UCHAR OperationCode;
UCHAR RelativeAddress : 1;
UCHAR Reserved1 : 2;
UCHAR ForceUnitAccess : 1;
UCHAR DisablePageOut : 1;
UCHAR LogicalUnitNumber : 3;
UCHAR LogicalBlock[4]; // [0]=MSB, [3]=LSB
UCHAR TransferLength[4]; // [0]=MSB, [3]=LSB
UCHAR Reserved2;
UCHAR Control;
} CDB12, *PCDB12;
//
// CD Rom Audio CDBs
//
struct _PAUSE_RESUME {
UCHAR OperationCode;
UCHAR Reserved1 : 5;
UCHAR LogicalUnitNumber : 3;
UCHAR Reserved2[6];
UCHAR Action;
UCHAR Control;
} PAUSE_RESUME, *PPAUSE_RESUME;
//
// Read Table of Contents
//
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; // 0x51
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; // 0x52
UCHAR Track : 1;
UCHAR Reserved1 : 3;
UCHAR Reserved2 : 1;
UCHAR Lun : 3;
UCHAR BlockAddress[4]; // or Track Number
UCHAR Reserved3;
UCHAR AllocationLength[2];
UCHAR Control;
} READ_TRACK_INFORMATION, *PREAD_TRACK_INFORMATION;
struct _READ_HEADER {
UCHAR OperationCode; // 0x44
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;
struct _PLAY_CD {
UCHAR OperationCode; // 0xBC
UCHAR Reserved1 : 1;
UCHAR CMSF : 1; // LBA = 0, MSF = 1
UCHAR ExpectedSectorType : 3;
UCHAR Lun : 3;
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;
};
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; // 0xBA
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; // 0x4E
UCHAR Reserved1 : 5;
UCHAR Lun : 3;
UCHAR Reserved2[7];
UCHAR Control;
} STOP_PLAY_SCAN, *PSTOP_PLAY_SCAN;
//
// Read SubChannel Data
//
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;
//
// Read CD. Used by Atapi for raw sector reads.
//
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;
//
// Plextor Read CD-DA
//
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;
//
// NEC Read CD-DA
//
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;
//
// Mode sense
//
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];
UCHAR Control;
} MODE_SENSE10, *PMODE_SENSE10;
//
// Mode select
//
struct _MODE_SELECT {
UCHAR OperationCode;
UCHAR SPBit : 1;
UCHAR Reserved1 : 3;
UCHAR PFBit : 1;
UCHAR LogicalUnitNumber : 3;
UCHAR Reserved2[2];
UCHAR ParameterListLength;
UCHAR Control;
} MODE_SELECT, *PMODE_SELECT;
struct _MODE_SELECT10 {
UCHAR OperationCode;
UCHAR SPBit : 1;
UCHAR Reserved1 : 3;
UCHAR PFBit : 1;
UCHAR LogicalUnitNumber : 3;
UCHAR Reserved2[5];
UCHAR ParameterListLength[2];
UCHAR Control;
} MODE_SELECT10, *PMODE_SELECT10;
struct _LOCATE {
UCHAR OperationCode;
UCHAR Immediate : 1;
UCHAR CPBit : 1;
UCHAR BTBit : 1;
UCHAR Reserved1 : 2;
UCHAR LogicalUnitNumber : 3;
UCHAR Reserved3;
UCHAR LogicalBlockAddress[4];
UCHAR Reserved4;
UCHAR Partition;
UCHAR Control;
} LOCATE, *PLOCATE;
struct _LOGSENSE {
UCHAR OperationCode;
UCHAR SPBit : 1;
UCHAR PPCBit : 1;
UCHAR Reserved1 : 3;
UCHAR LogicalUnitNumber : 3;
UCHAR PageCode : 6;
UCHAR PCBit : 2;
UCHAR Reserved2;
UCHAR Reserved3;
UCHAR ParameterPointer[2]; // [0]=MSB, [1]=LSB
UCHAR AllocationLength[2]; // [0]=MSB, [1]=LSB
UCHAR Control;
} LOGSENSE, *PLOGSENSE;
struct _LOGSELECT {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -