📄 rbccmd.h
字号:
/*
// Synchronize Cache
*/
typedef struct _SYNCHRONIZE_CACHE_RBC {
unsigned int OperationCode; /* 0x35 */
unsigned int Reserved[8];
unsigned int Control;
} SYNCHRONIZE_CACHE_RBC, *PSYNCHRONIZE_CACHE_RBC;
/*
// Write Command
*/
typedef struct _WRITE_RBC {
unsigned int OperationCode; /* 2AH */
unsigned int Reserved0 : 3;
unsigned int FUA : 1;
unsigned int Reserved1 : 4;
unsigned int LBA_3;
unsigned int LBA_2;
unsigned int LBA_1;
unsigned int LBA_0;
unsigned int Reserved2;
unsigned int XferLength_1;
unsigned int XferLength_0;
unsigned int Control;
} WRITE_RBC, *PWRITE_RBC;
/*
// VERIFY Command
*/
typedef struct _VERIFY_RBC {
unsigned int OperationCode; /* 2FH */
unsigned int Reserved0;
unsigned int LBA_3; /* Big Endian */
unsigned int LBA_2;
unsigned int LBA_1;
unsigned int LBA_0;
unsigned int Reserved1;
unsigned int VerifyLength_1; /* Big Endian */
unsigned int VerifyLength_0;
unsigned int Control;
} VERIFY_RBC, *PVERIFY_RBC;
/*
//***********************************************************************************
// SPC-2 of SCSI-3 commands
//***********************************************************************************
*/
/*
// INQUIRY Command
*/
typedef struct _INQUIRY_SPC {
unsigned int OperationCode; /* 12H */
unsigned int EnableVPD:1 ;
unsigned int CmdSupportData:1 ;
unsigned int Reserved0:6 ;
unsigned int PageCode;
unsigned int Reserved1;
unsigned int AllocationLen;
unsigned int Control;
} INQUIRY_SPC, *PINQUIRY_SPC;
typedef struct _STD_INQUIRYDATA {
unsigned int Reserved4[7];
unsigned int SoftReset : 1;
unsigned int CommandQueue : 1;
unsigned int Reserved5 : 1;
unsigned int LinkedCommands : 1;
unsigned int Synchronous : 1;
unsigned int Wide16Bit : 1;
unsigned int Wide32Bit : 1;
unsigned int RelativeAddressing : 1;
unsigned int VendorId[8];
unsigned int ProductId[16];
unsigned int ProductRevisionLevel[4];
/*
// Above is 36 bytes
// can be tranmitted by Bulk
*/
unsigned int VendorSpecific[20];
unsigned int InfoUnitSupport : 1;
unsigned int QuickArbitSupport : 1;
unsigned int Clocking : 2;
unsigned int Reserved6 : 4;
unsigned int Reserved7 ;
unsigned long int VersionDescriptor[8] ;
unsigned int Reserved8[22];
} STD_INQUIRYDATA, *PSTD_INQUIRYDATA;
typedef struct _SERIALNUMBER_PAGE {
unsigned int DeviceType : 5;
unsigned int DeviceTypeQualifier : 3;
unsigned int PageCode ;
unsigned int Reserved0 ;
unsigned int PageLength ;
unsigned int SerialNumber[24] ;
}VPD_SERIAL_PAGE,* PVPD_SERIAL_PAGE;
#define ASCII_ID_STRING 32
typedef struct _ID_DESCRIPTOR {
unsigned int CodeSet : 4;
unsigned int Reserved0 : 4;
unsigned int IDType : 4;
unsigned int Association : 2;
unsigned int Reserved1 : 2;
unsigned int Reserved2;
unsigned int IDLength ;
unsigned int AsciiID[ASCII_ID_STRING];
} ASCII_ID_DESCRIPTOR,* PASCII_ID_DESCRIPTOR;
typedef struct _DEVICE_ID_PAGE
{
unsigned int DeviceType : 5;
unsigned int DeviceTypeQualifier : 3;
unsigned int PageCode ;
unsigned int Reserved0 ;
unsigned int PageLength ;
ASCII_ID_DESCRIPTOR AsciiIdDescriptor[1];
} VPD_DEVICE_ID_PAGE, * PVPD_DEVICE_ID_PAGE;
/*
// Mode Select
*/
typedef struct _MODE_SELECT_SPC {
unsigned int OperationCode; /* 15H */
unsigned int SavePage : 1 ;
unsigned int Reseved0 : 3 ;
unsigned int PageFormat : 1 ;
unsigned int Reserved1 : 3 ;
unsigned int Reserved2[2];
unsigned int ParameterLen;
unsigned int Control;
} MODE_SELECT_SPC, * PMODE_SELECT_SPC;
/*
// Mode Sense
*/
typedef struct _MODE_SENSE_SPC {
unsigned int OperationCode; /* 1AH */
unsigned int Reseved0 : 3 ;
unsigned int DisableBlockDescriptor : 1 ;
unsigned int Reserved0 : 4 ;
unsigned int PageCode:6 ;
unsigned int PageControl : 2 ;
unsigned int Reserved1;
unsigned int ParameterLen;
unsigned int Control;
} MODE_SENSE_SPC, * PMODE_SENSE_SPC;
typedef struct _MODE_PARAMETER_HEAD {
unsigned int DataLen;
unsigned int MediumType;
unsigned int DeviceParameter;
unsigned int BlockDescriptorLen;
} MODE_PARAMETER_HEAD, * PMODE_PARAMETER_HEAD;
/*
// Define Device Capabilities page.
*/
typedef struct _MODE_RBC_DEVICE_PARAMETERS_PAGE {
unsigned int PageCode : 6;
unsigned int Reserved : 1;
unsigned int PageSavable : 1;
unsigned int PageLength;
unsigned int WriteCacheDisable : 1;
unsigned int Reserved1 : 7;
unsigned int LogicalBlockSize[2];
unsigned int NumberOfLogicalBlocks[5];
unsigned int PowerPerformance;
unsigned int Lockable : 1;
unsigned int Formattable : 1;
unsigned int Writable : 1;
unsigned int Readable : 1;
unsigned int Reserved2 : 4;
unsigned int Reserved3;
}MODE_RBC_DEVICE_PARAMETERS_PAGE, *PMODE_RBC_DEVICE_PARAMETERS_PAGE;
/*
// prevent/allow medium removal
*/
typedef struct _MEDIA_REMOVAL_SPC {
unsigned int OperationCode; /* 1EH */
unsigned int Reserved0[3];
unsigned int Prevent:2 ;
unsigned int Reserved1:6 ;
unsigned int Control;
} MEDIA_REMOVAL_SPC, *PMEDIA_REMOVAL_SPC;
/*
// Request Sense
*/
typedef struct _REQUEST_SENSE_SPC {
unsigned int OperationCode; /* 03H */
unsigned int Reserved[3];
unsigned int AllocationLen;
unsigned int Control;
} REQUEST_SENSE_SPC, *PREQUEST_SENSE_SPC;
typedef struct _REQUEST_SENSE_DATA {
unsigned int ResponseCode : 7;
unsigned int Valid : 1;
unsigned int SegmentNum;
unsigned int SenseKey : 4;
unsigned int Reserved0 : 1;
unsigned int WrongLenIndicator : 1;
unsigned int EndofMedium : 1;
unsigned int FileMark : 1;
unsigned int Info_0;
unsigned int Info_1;
unsigned int Info_2;
unsigned int Info_3;
unsigned int AdditionalSenseLen;
unsigned int CommandSpecInfo_0;
unsigned int CommandSpecInfo_1;
unsigned int CommandSpecInfo_2;
unsigned int CommandSpecInfo_3;
unsigned int ASC;
unsigned int ASCQ;
unsigned int FieldReplacableUnitCode;
unsigned int SenseKeySpec_0 : 7;
unsigned int SenseKeySpecValid : 1;
unsigned int SenseKeySpec_1;
unsigned int SenseKeySpec_2;
} REQUEST_SENSE_DATA, *PREQUEST_SENSE_DATA;
/*
// Test Unit Ready
*/
typedef struct _TEST_UNIT_SPC {
unsigned int OperationCode; /* 00H */
unsigned int Reserved[4];
unsigned int Control;
} TEST_UNIT_SPC, *PTEST_UNIT_SPC;
/*
// Write Buffer
*/
typedef struct _WRITE_BUFFER_SPC {
unsigned int OperationCode; /* 3BH */
unsigned int Mode:4 ;
unsigned int Reserved0:4 ;
unsigned int BufferID;
unsigned int BufferOff_2;
unsigned int BufferOff_1;
unsigned int BufferOff_0;
unsigned int ParameterLen_2;
unsigned int ParameterLen_1;
unsigned int ParameterLen_0;
unsigned int 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_RBC CmdRead10;
WRITE_RBC CmdWrite10;
MODE_SELECT_SPC CmdModeSel10;
MODE_SENSE_SPC CmdModeSen10;
} CDB_RBC, *PCDB_RBC;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -