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

📄 drv_usb_scsidef.h

📁 sparc硬件平台上的usb驱动
💻 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 + -