📄 drv_usb_scsidef.h
字号:
/*************************************************
Copyright (C), 2008, DTK Computer.
File name: Scsidef.h
Author: lihai
Version: 1.0
Date: 2008.04.28
Description: 实现USB驱动所需的SCSI命令相关数据结构定义头文件
Others: 无
Function List: 无
History: 初稿
*************************************************/
#ifndef __RBC_COMMAND__
#define __RBC_COMMAND__
/* SCSI命令 */
#define RBC_CMD_FORMT 0x04
#define RBC_CMD_READ10 0x28
#define RBC_CMD_READCAPACITY 0x25
#define RBC_CMD_STARTSTOPUNIT 0x1B
#define RBC_CMD_SYNCACHE 0x35
#define RBC_CMD_VERIFY10 0x2F
#define RBC_CMD_WRITE10 0x2A
#define SPC_CMD_INQUIRY 0x12
#define SPC_CMD_MODESELECT6 0x15
#define SPC_CMD_MODESENSE6 0x1A
#define SPC_CMD_PERSISTANTRESERVIN 0x5E
#define SPC_CMD_PERSISTANTRESERVOUT 0x5F
#define SPC_CMD_PRVENTALLOWMEDIUMREMOVAL 0x1E
#define SPC_CMD_RELEASE6 0x17
#define SPC_CMD_REQUESTSENSE 0x03
#define SPC_CMD_RESERVE6 0x16
#define SPC_CMD_TESTUNITREADY 0x00
#define SPC_CMD_WRITEBUFFER 0x3B
#define SPC_CMD_FORMAT_CAPACITY 0x23
/*
* SENSE KEYS
*/
#define NO_SENSE 0x00
#define NOT_READY 0x02
#define ILLEGAL_REQUEST 0x05
/*
* Additional Sense codes
*/
#define SCSI_ADSENSE_NO_SENSE 0x00
#define SCSI_ADSENSE_ILLEGAL_COMMAND 0x20
#define SCSI_ADSENSE_INVALID_CDB 0x24
#define SCSI_ADSENSE_NO_MEDIA_IN_DEVICE 0x3a
#if 0
/*
* SENSE KEYS
*/
#define NO_SENSE 0x00
#define RECOVERED_ERROR 0x01
#define NOT_READY 0x02
#define MEDIUM_ERROR 0x03
#define HARDWARE_ERROR 0x04
#define ILLEGAL_REQUEST 0x05
#define UNIT_ATTENTION 0x06
#define DATA_PROTECT 0x07
#define BLANK_CHECK 0x08
#define COPY_ABORTED 0x0a
#define ABORTED_COMMAND 0x0b
#define VOLUME_OVERFLOW 0x0d
#define MISCOMPARE 0x0e
/* Additional Sense codes */
#define SCSI_ADSENSE_NO_SENSE 0x00
#define SCSI_ADSENSE_NO_SEEK_COMPLETE 0x02
#define SCSI_ADSENSE_LUN_NOT_READY 0x04
#define SCSI_ADSENSE_WRITE_ERROR 0x0C
#define SCSI_ADSENSE_TRACK_ERROR 0x14
#define SCSI_ADSENSE_SEEK_ERROR 0x15
#define SCSI_ADSENSE_REC_DATA_NOECC 0x17
#define SCSI_ADSENSE_REC_DATA_ECC 0x18
#define SCSI_ADSENSE_ILLEGAL_COMMAND 0x20
#define SCSI_ADSENSE_ILLEGAL_BLOCK 0x21
#define SCSI_ADSENSE_INVALID_CDB 0x24
#define SCSI_ADSENSE_INVALID_LUN 0x25
#define SCSI_ADSENSE_WRITE_PROTECT 0x27
#define SCSI_ADSENSE_MEDIUM_CHANGED 0x28
#define SCSI_ADSENSE_BUS_RESET 0x29
#define SCSI_ADSENSE_INSUFFICIENT_TIME_FOR_OPERATION 0x2E
#define SCSI_ADSENSE_INVALID_MEDIA 0x30
#define SCSI_ADSENSE_NO_MEDIA_IN_DEVICE 0x3a
#define SCSI_ADSENSE_POSITION_ERROR 0x3b
#define SCSI_ADSENSE_OPERATOR_REQUEST 0x5a
#define SCSI_ADSENSE_FAILURE_PREDICTION_THRESHOLD_EXCEEDED 0x5d
#define SCSI_ADSENSE_ILLEGAL_MODE_FOR_THIS_TRACK 0x64
#define SCSI_ADSENSE_COPY_PROTECTION_FAILURE 0x6f
#define SCSI_ADSENSE_POWER_CALIBRATION_ERROR 0x73
#define SCSI_ADSENSE_VENDOR_UNIQUE 0x80
#define SCSI_ADSENSE_MUSIC_AREA 0xA0
#define SCSI_ADSENSE_DATA_AREA 0xA1
#define SCSI_ADSENSE_VOLUME_OVERFLOW 0xA7
#define SCSI_SENSEQ_CAUSE_NOT_REPORTABLE 0x00
#define SCSI_SENSEQ_BECOMING_READY 0x01
#define SCSI_SENSEQ_INIT_COMMAND_REQUIRED 0x02
#define SCSI_SENSEQ_MANUAL_INTERVENTION_REQUIRED 0x03
#define SCSI_SENSEQ_FORMAT_IN_PROGRESS 0x04
#define SCSI_SENSEQ_REBUILD_IN_PROGRESS 0x05
#define SCSI_SENSEQ_RECALCULATION_IN_PROGRESS 0x06
#define SCSI_SENSEQ_OPERATION_IN_PROGRESS 0x07
#define SCSI_SENSEQ_LONG_WRITE_IN_PROGRESS 0x08
#define SCSI_SENSEQ_LOSS_OF_STREAMING 0x09
#define SCSI_SENSEQ_PADDING_BLOCKS_ADDED 0x0A
#endif
#pragma pack(push,1)
/* SCSI命令: inquiry 数据结构 */
typedef struct _INQUIRY_SPC
{
D_UINT8 OperationCode;
D_UINT8 EVPD :1;
D_UINT8 CMDDT :1;
D_UINT8 Reserved0 :6;
D_UINT8 PageCode;
D_UINT8 Reserved1;
D_UINT8 AllocationLength;
D_UINT8 Control;
}INQUIRY_SPC,*pINQUIRY_SPC;
/* 响应inquiry命令的设备信息数据结构 */
typedef struct _STD_INQUIRY_DATA
{
/* D_UINT8 DeviceType :5;
D_UINT8 Reserved0 :3;
D_UINT8 Reserved1 :7;
D_UINT8 RemovableMedia :1;
D_UINT8 Reserved2;
D_UINT8 Reserved3 :5;
D_UINT8 NormACA :1;
D_UINT8 Obsolete0 :1;
D_UINT8 AERC :1;
D_UINT8 Reserved4[3];
D_UINT8 SoftReset :1;
D_UINT8 CommandQueue :1;
D_UINT8 Reserved5 :1;
D_UINT8 LinkedCommands :1;
D_UINT8 Synchronous :1;
D_UINT8 Wide16Bit :1;
D_UINT8 Wide32Bit :1;
D_UINT8 RelativeAddressing :1;
*/
D_UINT8 Reserved[8];
D_UINT8 VendorId[8];
D_UINT8 ProductId[16];
D_UINT8 productRevisionLevel[4];
}STD_INQUIRY_DATA,*pSTD_INQUIRY_DATA;
/* SCSI命令: mode select 数据结构 */
typedef struct _MODE_SELECT_SPC
{
D_UINT8 OperationCode;
D_UINT8 Sp :1;
D_UINT8 Reserved0 :7;
}MODE_SELECT_SPC,*pMODE_SELECT_SPC;
/* SCSI命令: mode sense 数据结构 */
typedef struct _MODE_SENSE_SPC
{
D_UINT8 OperationCode;
D_UINT8 Reserved0 :3;
D_UINT8 DisableBlockDescriptor :1;
D_UINT8 Reserved1 :4;
D_UINT8 PageCode :6;
D_UINT8 PageControl :2;
D_UINT8 Reserved2;
D_UINT8 ParameterLength;
D_UINT8 Control;
}MODE_SENSE_SPC,*pMODE_SENSE_SPC;
/* 响应mode sense 命令的设备模式数据结构*/
typedef struct _MODE_DATA
{
D_UINT8 OperationCode;
D_UINT8 Reserved0;
D_UINT8 Reserved1 :7;
D_UINT8 WP :1;
D_UINT8 Reserved2;
}MODE_DATA,*pMODE_DATA;
/* SCSI命令: read10 数据结构 */
typedef struct _READ10_RBC
{
D_UINT8 OperationCode;
D_UINT8 Reserved0;
D_UINT8 LogicalBlockAddress[4];
D_UINT8 Reserved1;
D_UINT8 TransferLength[2];
D_UINT8 Control;
}READ10_RBC,*pREAD10_RBC;
/* 响应 read capacity 命令的设备容量数据结构 */
typedef struct _READ_CAPACITY_DATA
{
D_UINT8 LogicalBlockAddress[4];
D_UINT8 LogicalLength[4];
}READ_CAPACITY_DATA,*pREAD_CAPACITY_DATA;
/* SCSI命令: read capacity 数据结构 */
typedef struct _READ_CAPACITY_RBC
{
D_UINT8 OperationCode;
D_UINT8 Reserved0[8];
D_UINT8 Control;
}READ_CAPACITY_RBC,*pREAD_CAPACITY_RBC;
/* SCSI命令: start stop 数据结构 */
typedef struct _START_STOP_RBC
{
D_UINT8 OperationCode;
D_UINT8 Reserved0[3];
D_UINT8 Start :1;
D_UINT8 Loej :1;
D_UINT8 Reserved1 :6;
}START_STOP_RBC,*pSTART_STOP_RBC;
/* SCSI命令: request sense 数据结构 */
typedef struct _REQUEST_SENSE_DATA
{
D_UINT8 Reserved0[2];
D_UINT8 SenseKey;
D_UINT8 Reserved1[9];
D_UINT8 ASC;
D_UINT8 ASCQ;
D_UINT8 Reserved2[4];
}REQUEST_SENSE_DATA,*pREQUEST_SENSE_DATA;
/* SCSI命令: test unit 数据结构 */
typedef struct _TEST_UNIT_SPC
{
D_UINT8 OperationCode;
D_UINT8 Reserved0[4];
D_UINT8 Control;
}TEST_UNIT_SPC,*pTEST_UNIT_SPC;
/* SCSI命令: verify 数据结构 */
typedef struct _VERIFY_RBC
{
D_UINT8 OperationCode;
D_UINT8 Reserved0;
D_UINT8 LogicalBlockAddress[4];
D_UINT8 Reserved1;
D_UINT8 TransferLength[2];
D_UINT8 Control;
}VERIFY_RBC,*pVERIFY_RBC;
/* SCSI命令: write10 数据结构 */
typedef struct _WRITE10_RBC
{
D_UINT8 OperationCode;
D_UINT8 Reserved0 :3;
D_UINT8 FUA :1;
D_UINT8 Reserved1 :4;
D_UINT8 LogicalBlockAddress[4];
D_UINT8 Reserved2;
D_UINT8 TransferLength[2];
D_UINT8 Control;
}WRITE10_RBC,*pWRITE10_RBC;
/* SCSI命令: media removal 数据结构 */
typedef struct _MEDIA_REMOVAL_SPC
{
D_UINT8 OperationCode;
D_UINT8 Reserved0[3];
D_UINT8 Prevent;
//D_UINT8 Reserved1 :7;
}MEDIA_REMOVAL_SPC,*pMEDIA_REMOVAL_SPC;
typedef struct _GENERIC_RBC
{
D_UINT8 OperationCode;
D_UINT8 Reserved0[15];
}GENERIC_RBC,*pGENERIC_RBC;
typedef union _CDB_RBC
{
GENERIC_RBC RbcCdb_Generic;
INQUIRY_SPC SpcCdb_Inquiry;
MODE_SELECT_SPC SpcCdb_ModeSelect;
MODE_SENSE_SPC SpcCdb_ModeSense;
READ10_RBC RbcCdb_Read10;
READ_CAPACITY_RBC RbcCdb_ReadCapacity;
START_STOP_RBC RbcCdb_OnOffUnit;
TEST_UNIT_SPC SpcCdb_TestUnit;
VERIFY_RBC RbcCdb_Verify;
WRITE10_RBC RbcCdb_Write10;
MEDIA_REMOVAL_SPC SpcCdb_Removeal;
}CDB_RBC,*pCDB_RBC;
#pragma pack(pop)
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -