📄 rbccmd.h
字号:
} START_STOP_RBC, *PSTART_STOP_RBC;
/*
// Synchronize Cache
*/
typedef struct _SYNCHRONIZE_CACHE_RBC {
// INT8 OperationCode; /* 0x35 */
INT8 Reserved[8];
INT8 Control;
} SYNCHRONIZE_CACHE_RBC, *PSYNCHRONIZE_CACHE_RBC;
/*
// Write Command
*/
typedef struct _WRITE_RBC {
// INT8 OperationCode; /* 2AH */
unsigned Reserved0 : 3;
unsigned FUA : 1;
unsigned Reserved1 : 4;
// union{
// struct
// {
INT8 LBA_3;
INT8 LBA_2;
INT8 LBA_1;
INT8 LBA_0;
// } LBA_W8 ;
// INT32 LBA_W32;
// } LBA;
INT8 Reserved2;
INT8 XferLength_1;
INT8 XferLength_0;
INT8 Control;
} WRITE_RBC, *PWRITE_RBC;
/*
// VERIFY Command
*/
typedef struct _VERIFY_RBC {
// 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_RBC, *PVERIFY_RBC;
//***********************************************************************************
// SPC-2 of SCSI-3 commands
//***********************************************************************************
// INQUIRY Command
typedef struct _INQUIRY_SPC {
// INT8 OperationCode; /* 12H */
unsigned EnableVPD:1 ;
unsigned CmdSupportData:1 ;
unsigned Reserved0:6 ;
INT8 PageCode;
INT8 Reserved1;
INT8 AllocationLen;
INT8 Control;
} INQUIRY_SPC, *PINQUIRY_SPC;
typedef struct _STD_INQUIRYDATA {
unsigned DeviceType : 5;
unsigned Reserved0 : 3;
unsigned Reserved1 : 7;
unsigned RemovableMedia : 1;
INT8 Reserved2;
unsigned Reserved3 : 5;
unsigned NormACA : 1;
unsigned Obsolete0 : 1;
unsigned AERC : 1;
INT8 Reserved4[3];//7
unsigned SoftReset : 1;
unsigned CommandQueue : 1;
unsigned Reserved5 : 1;
unsigned LinkedCommands : 1;
unsigned Synchronous : 1;
unsigned Wide16Bit : 1;
unsigned Wide32Bit : 1;
unsigned RelativeAddressing : 1;
INT8 VendorId[8];
INT8 ProductId[16];//32
INT8 ProductRevisionLevel[4];
/*
// Above is 36 bytes
// can be tranmitted by Bulk
*/
INT8 VendorSpecific[20];//56
unsigned InfoUnitSupport : 1;
unsigned QuickArbitSupport : 1;
unsigned Clocking : 2;
unsigned Reserved6 : 4;
INT8 Reserved7 ;//58
INT16 VersionDescriptor[8] ;//74
INT8 Reserved8[22];//96
} STD_INQUIRYDATA, *PSTD_INQUIRYDATA;//96
typedef struct _SERIALNUMBER_PAGE {
unsigned DeviceType : 5;
unsigned DeviceTypeQualifier : 3;
INT8 PageCode ;
INT8 Reserved0 ;
INT8 PageLength ;//4
INT8 SerialNumber[24] ;//28
}VPD_SERIAL_PAGE,* PVPD_SERIAL_PAGE;//28
#define ASCII_ID_STRING 32
typedef struct _ID_DESCRIPTOR {
unsigned CodeSet : 4;
unsigned Reserved0 : 4;
unsigned IDType : 4;
unsigned Association : 2;
unsigned Reserved1 : 2;
INT8 Reserved2;
INT8 IDLength ;//4
INT8 AsciiID[ASCII_ID_STRING];//ASCII_ID_STRING=32
} ASCII_ID_DESCRIPTOR,* PASCII_ID_DESCRIPTOR;//36
typedef struct _DEVICE_ID_PAGE
{
unsigned DeviceType : 5;
unsigned DeviceTypeQualifier : 3;
INT8 PageCode ;
INT8 Reserved0 ;
INT8 PageLength ;//4
ASCII_ID_DESCRIPTOR AsciiIdDescriptor[1];//40
} VPD_DEVICE_ID_PAGE, * PVPD_DEVICE_ID_PAGE;//40
/*
// Mode Select
*/
typedef struct _MODE_SELECT_SPC {
// INT8 OperationCode; /* 15H */
unsigned SavePage : 1 ;
unsigned Reseved0 : 3 ;
unsigned PageFormat : 1 ;
unsigned Reserved1 : 3 ;
INT8 Reserved2[2];
INT8 ParameterLen;
INT8 Control;
} MODE_SELECT_SPC, * PMODE_SELECT_SPC;
/*
// Mode Sense
*/
typedef struct _MODE_SENSE_SPC {
// INT8 OperationCode; /* 1AH */
unsigned Reseved0 : 3 ;
unsigned DisableBlockDescriptor : 1 ;
unsigned Reserved0 : 4 ;
unsigned PageCode:6 ;
unsigned PageControl : 2 ;
INT8 Reserved1;
INT8 ParameterLen;
INT8 Control;
} MODE_SENSE_SPC, * PMODE_SENSE_SPC;
typedef struct _MODE_PARAMETER_HEAD {
INT8 DataLen;
INT8 MediumType;
INT8 DeviceParameter;
INT8 BlockDescriptorLen;
} MODE_PARAMETER_HEAD, * PMODE_PARAMETER_HEAD;//4
/*
// Define Device Capabilities page.
*/
typedef struct _MODE_RBC_DEVICE_PARAMETERS_PAGE {
unsigned PageCode : 6;
unsigned Reserved : 1;
unsigned PageSavable : 1;
INT8 PageLength;
unsigned WriteCacheDisable : 1;
unsigned Reserved1 : 7;
INT8 LogicalBlockSize[2];
INT8 NumberOfLogicalBlocks[5];
INT8 PowerPerformance;
unsigned Lockable : 1;
unsigned Formattable : 1;
unsigned Writable : 1;
unsigned Readable : 1;
unsigned Reserved2 : 4;
INT8 Reserved3;
}MODE_RBC_DEVICE_PARAMETERS_PAGE, *PMODE_RBC_DEVICE_PARAMETERS_PAGE;
/*
// prevent/allow medium removal
*/
typedef struct _MEDIA_REMOVAL_SPC {
// INT8 OperationCode; /* 1EH */
INT8 Reserved0[3];
unsigned Prevent:2 ;
unsigned Reserved1:6 ;
INT8 Control;
} MEDIA_REMOVAL_SPC, *PMEDIA_REMOVAL_SPC;//6
/*
// Request Sense
*/
typedef struct _REQUEST_SENSE_SPC {
// INT8 OperationCode; /* 03H */
INT8 Reserved[3];
INT8 AllocationLen;
INT8 Control;
} REQUEST_SENSE_SPC, *PREQUEST_SENSE_SPC;//6
typedef struct _READ_FORMAT_CAPACITIES{
INT8 Reserved[3];
INT8 Length;
// Current/Maximum Capacity Descriptor
INT32 CapacityLBA; /* Big Endian */
unsigned Reserved1 :6;
unsigned DescriptorCode :2;
INT8 CapacityLength_2; /* Big Endian */
INT8 CapacityLength_1;
INT8 CapacityLength_0;
// Formattable Capacity Descriptor
INT32 FormattableLBA; /* Big Endian */
INT8 Reserved2;
INT8 FormattableLength_2; /* Big Endian */
INT8 FormattableLength_1;
INT8 FormattableLength_0;
}READ_FORMAT_CAPACITIES,*PREAD_FORMAT_CAPACITIES;
typedef struct _REQUEST_SENSE_DATA {
unsigned ResponseCode : 7;
unsigned Valid : 1;
INT8 SegmentNum;
unsigned SenseKey : 4;
unsigned Reserved0 : 1;
unsigned WrongLenIndicator : 1;
unsigned EndofMedium : 1;
unsigned FileMark : 1;
INT8 Info_0;
INT8 Info_1;
INT8 Info_2;
INT8 Info_3;
INT8 AdditionalSenseLen;
INT8 CommandSpecInfo_0;
INT8 CommandSpecInfo_1;
INT8 CommandSpecInfo_2;
INT8 CommandSpecInfo_3;//12
INT8 ASC;
INT8 ASCQ;
INT8 FieldReplacableUnitCode;
unsigned SenseKeySpec_0 : 7;
unsigned SenseKeySpecValid : 1;
INT8 SenseKeySpec_1;
INT8 SenseKeySpec_2;
} REQUEST_SENSE_DATA, *PREQUEST_SENSE_DATA;//18 beyts
/*
// Test Unit Ready
*/
typedef struct _TEST_UNIT_SPC {
// INT8 OperationCode; /* 00H */
INT8 Reserved[4];
INT8 Control;
} TEST_UNIT_SPC, *PTEST_UNIT_SPC;
/*
// Write Buffer
*/
typedef struct _WRITE_BUFFER_SPC {
// INT8 OperationCode; /* 3BH */
unsigned Mode:4 ;
unsigned 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 union _CDB_RBC {
GENERIC_CDB Cdb_Generic;
/*
// RBC commands
*/
GENERIC_RBC RbcCdb_Generic;
FORMAT_RBC RbcCdb_Format;
READ_RBC RbcCdb_Read;
READ_CAPACITY_RBC RbcCdb_ReadCapacity;
START_STOP_RBC RbcCdb_OnOffUnit;
SYNCHRONIZE_CACHE_RBC RbcCdb_SyncCache;
VERIFY_RBC RbcCdb_Verify;
WRITE_RBC 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;
READ_FORMAT_CAPACITIES RE_FM_Capacities;
} CDB_RBC, *PCDB_RBC;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -