📄 scsi2cmd.h
字号:
INT8 Reserved2;
UINT8 XferLength_1;
UINT8 XferLength_0;
INT8 Control;
} WRITE_SCSI2, *PWRITE_SCSI2;
/*
// VERIFY Command
*/
typedef __packed struct _VERIFY_SCSI2 {
INT8 OperationCode; /* 2FH */
INT8 Reserved0;
INT8 LBA_3; /* Big Endian */
INT8 LBA_2;
INT8 LBA_1;
INT8 LBA_0;
INT8 Reserved1;
INT8 VerifyLength_1; /* Big Endian */
INT8 VerifyLength_0;
INT8 Control;
} VERIFY_SCSI2, *PVERIFY_SCSI2;
/*
***********************************************************************************
SPC-2 of SCSI-3 commands
***********************************************************************************
*/
/*
// INQUIRY Command
*/
typedef __packed struct _INQUIRY_SPC {
INT8 OperationCode; /* 12H */
INT8 EnableVPD:1 ;
INT8 CmdSupportData:1 ;
INT8 Reserved0:6 ;
INT8 PageCode;
INT8 Reserved1;
INT8 AllocationLen;
INT8 Control;
} INQUIRY_SPC, *PINQUIRY_SPC;
typedef __packed struct _STD_INQUIRYDATA {
UINT8 DeviceType : 5;
UINT8 Reserved0 : 3;
UINT8 Reserved1 : 7;
UINT8 RemovableMedia : 1;
UINT8 Reserved2;
UINT8 Reserved3 : 5;
UINT8 NormACA : 1;
UINT8 Obsolete0 : 1;
UINT8 AERC : 1;
UINT8 Reserved4[3];
UINT8 SoftReset : 1;
UINT8 CommandQueue : 1;
UINT8 Reserved5 : 1;
UINT8 LinkedCommands : 1;
UINT8 Synchronous : 1;
UINT8 Wide16Bit : 1;
UINT8 Wide32Bit : 1;
UINT8 RelativeAddressing : 1;
UINT8 VendorId[8];
UINT8 ProductId[16];
UINT8 ProductRevisionLevel[4];
/*
// Above is 36 bytes
// can be tranmitted by Bulk
*/
INT8 VendorSpecific[20];
INT8 InfoUnitSupport : 1;
INT8 QuickArbitSupport : 1;
INT8 Clocking : 2;
INT8 Reserved6 : 4;
INT8 Reserved7 ;
INT16 VersionDescriptor[8] ;
INT8 Reserved8[22];
} STD_INQUIRYDATA, *PSTD_INQUIRYDATA;
typedef __packed struct _SERIALNUMBER_PAGE {
UINT8 DeviceType : 5;
UINT8 DeviceTypeQualifier : 3;
UINT8 PageCode ;
UINT8 Reserved0 ;
UINT8 PageLength ;
UINT8 SerialNumber[24] ;
}VPD_SERIAL_PAGE,* PVPD_SERIAL_PAGE;
#define ASCII_ID_STRING 32
typedef __packed struct _ID_DESCRIPTOR {
INT8 CodeSet : 4;
INT8 Reserved0 : 4;
INT8 IDType : 4;
INT8 Association : 2;
INT8 Reserved1 : 2;
INT8 Reserved2;
INT8 IDLength ;
INT8 AsciiID[ASCII_ID_STRING];
} ASCII_ID_DESCRIPTOR,* PASCII_ID_DESCRIPTOR;
typedef __packed struct _DEVICE_ID_PAGE
{
INT8 DeviceType : 5;
INT8 DeviceTypeQualifier : 3;
INT8 PageCode ;
INT8 Reserved0 ;
INT8 PageLength ;
ASCII_ID_DESCRIPTOR AsciiIdDescriptor[1];
} VPD_DEVICE_ID_PAGE, * PVPD_DEVICE_ID_PAGE;
/*
// Mode Select
*/
typedef __packed struct _MODE_SELECT_SPC {
INT8 OperationCode; /* 15H */
INT8 SavePage : 1 ;
INT8 Reseved0 : 3 ;
INT8 PageFormat : 1 ;
INT8 Reserved1 : 3 ;
INT8 Reserved2[2];
INT8 ParameterLen;
INT8 Control;
} MODE_SELECT_SPC, * PMODE_SELECT_SPC;
/*
// Mode Sense
*/
typedef __packed struct _MODE_SENSE_SPC {
INT8 OperationCode; /* 1AH */
INT8 Reseved0 : 3 ;
INT8 DisableBlockDescriptor : 1 ;
INT8 Reserved0 : 4 ;
INT8 PageCode:6 ;
INT8 PageControl : 2 ;
INT8 Reserved1;
INT8 ParameterLen;
INT8 Control;
} MODE_SENSE_SPC, * PMODE_SENSE_SPC;
typedef __packed struct _MODE_PARAMETER_HEAD {
INT8 DataLen;
INT8 MediumType;
INT8 DeviceParameter;
INT8 BlockDescriptorLen;
} MODE_PARAMETER_HEAD, * PMODE_PARAMETER_HEAD;
/*
// Define Device Capabilities page.
*/
typedef __packed struct _MODE_SCSI2_DEVICE_PARAMETERS_PAGE {
INT8 PageCode : 6;
INT8 Reserved : 1;
INT8 PageSavable : 1;
INT8 PageLength;
INT8 WriteCacheDisable : 1;
INT8 Reserved1 : 7;
INT8 LogicalBlockSize[2];
INT8 NumberOfLogicalBlocks[5];
INT8 PowerPerformance;
INT8 Lockable : 1;
INT8 Formattable : 1;
INT8 Writable : 1;
INT8 Readable : 1;
INT8 Reserved2 : 4;
INT8 Reserved3;
}MODE_SCSI2_DEVICE_PARAMETERS_PAGE, *PMODE_SCSI2_DEVICE_PARAMETERS_PAGE;
/*
// prevent/allow medium removal
*/
typedef __packed struct _MEDIA_REMOVAL_SPC {
INT8 OperationCode; /* 1EH */
INT8 Reserved0[3];
INT8 Prevent:2 ;
INT8 Reserved1:6 ;
INT8 Control;
} MEDIA_REMOVAL_SPC, *PMEDIA_REMOVAL_SPC;
/*
// Request Sense
*/
typedef __packed struct _REQUEST_SENSE_SPC {
INT8 OperationCode; /* 03H */
INT8 Reserved[3];
INT8 AllocationLen;
INT8 Control;
} REQUEST_SENSE_SPC, *PREQUEST_SENSE_SPC;
typedef __packed struct _REQUEST_SENSE_DATA {
UINT8 ResponseCode : 7;
UINT8 Valid : 1;
UINT8 SegmentNum;
UINT8 SenseKey : 4;
UINT8 Reserved0 : 1;
UINT8 WrongLenIndicator : 1;
UINT8 EndofMedium : 1;
UINT8 FileMark : 1;
UINT8 Info_0;
UINT8 Info_1;
UINT8 Info_2;
UINT8 Info_3;
UINT8 AdditionalSenseLen;
UINT8 CommandSpecInfo_0;
UINT8 CommandSpecInfo_1;
UINT8 CommandSpecInfo_2;
UINT8 CommandSpecInfo_3;
UINT8 ASC;
UINT8 ASCQ;
UINT8 FieldReplacableUnitCode;
UINT8 SenseKeySpec_0 : 7;
UINT8 SenseKeySpecValid : 1;
UINT8 SenseKeySpec_1;
UINT8 SenseKeySpec_2;
} REQUEST_SENSE_DATA, *PREQUEST_SENSE_DATA;
/*
// Test Unit Ready
*/
typedef __packed struct _TEST_UNIT_SPC {
INT8 OperationCode; /* 00H */
INT8 Reserved[4];
INT8 Control;
} TEST_UNIT_SPC, *PTEST_UNIT_SPC;
/*
// Write Buffer
*/
typedef __packed struct _WRITE_BUFFER_SPC {
INT8 OperationCode; /* 3BH */
INT8 Mode:4 ;
INT8 Reserved0:4 ;
INT8 BufferID;
INT8 BufferOff_2;
INT8 BufferOff_1;
INT8 BufferOff_0;
INT8 ParameterLen_2;
INT8 ParameterLen_1;
INT8 ParameterLen_0;
INT8 Control;
} WRITE_BUFFER_SPC, *PWRITE_BUFFER_SPC;
typedef __packed struct _READ_10 {
INT8 OperationCode;
INT8 Reserved1;
INT8 LBA_3;
INT8 LBA_2;
INT8 LBA_1;
INT8 LBA_0;
INT8 Reserved2;
INT8 XferLen_1;
INT8 XferLen_0;
INT8 Reserved3[3];
} READ_10, * PREAD_10;
typedef __packed struct _WRITE_10 {
INT8 OperationCode;
INT8 Reserved1;
INT8 LBA_3;
INT8 LBA_2;
INT8 LBA_1;
INT8 LBA_0;
INT8 Reserved2;
INT8 XferLen_1;
INT8 XferLen_0;
INT8 Reserved3[3];
} WRITE_10, *PWRITE_10;
typedef __packed struct _MODE_SENSE_10 {
UINT8 OperationCode;
UINT8 Reserved1;
UINT8 PageCode : 6;
UINT8 Pc : 2;
UINT8 Reserved2[4];
UINT8 ParameterListLengthMsb;
UINT8 ParameterListLengthLsb;
UINT8 Reserved3[3];
} MODE_SENSE_10, *PMODE_SENSE_10;
typedef __packed struct _MODE_SELECT_10 {
UINT8 OperationCode;
UINT8 Reserved1 : 4;
UINT8 PFBit : 1;
UINT8 Reserved2 : 3;
UINT8 Reserved3[5];
UINT8 ParameterListLengthMsb;
UINT8 ParameterListLengthLsb;
UINT8 Reserved4[3];
} MODE_SELECT_10, *PMODE_SELECT_10;
typedef __packed union _CDB_SCSI2 {
GENERIC_CDB Cdb_Generic;
/*
// SCSI2 commands
*/
GENERIC_SCSI2 RbcCdb_Generic;
FORMAT_SCSI2 RbcCdb_Format;
READ_SCSI2 RbcCdb_Read;
READ_CAPACITY_SCSI2 RbcCdb_ReadCapacity;
START_STOP_SCSI2 RbcCdb_OnOffUnit;
SYNCHRONIZE_CACHE_SCSI2 RbcCdb_SyncCache;
VERIFY_SCSI2 RbcCdb_Verify;
WRITE_SCSI2 RbcCdb_Write;
/*
// SPC-2 commands
*/
INQUIRY_SPC SpcCdb_Inquiry;
MODE_SELECT_SPC SpcCdb_ModeSelect;
MODE_SENSE_SPC SpcCdb_ModeSense;
MEDIA_REMOVAL_SPC SpcCdb_Remove;
REQUEST_SENSE_SPC SpcCdb_RequestSense;
TEST_UNIT_SPC SpcCdb_TestUnit;
WRITE_BUFFER_SPC SpcCdb_WriteBuffer;
/*
// ATAPI Commands
*/
READ_10 CmdRead10;
WRITE_10 CmdWrite10;
MODE_SELECT_10 CmdModeSel10;
MODE_SENSE_10 CmdModeSen10;
} CDB_SCSI2, *PCDB_SCSI2;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -