⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scsi2cmd.h

📁 ertfs文件系统里面既有完整ucos程序
💻 H
📖 第 1 页 / 共 2 页
字号:
	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 + -