📄 scsi.h
字号:
/*++
Copyright (c) 2001 Sunplus Technology Co., Ltd.
Module Name:
scsi.h
Abstract:
Header file related to SCSI command
Environment:
Keil C51 Compiler
Revision History:
08/28/2001 Chi-Yeh Tsai created
--*/
//------------------------------------------------------------------------------
//Constant
//------------------------------------------------------------------------------
//---- SCSI-2 Commands ----------------
#define K_SCSICMD_TEST_UNIT_READY 0x00
#define K_SCSICMD_REZERO_UNIT 0x01
//#define K_SCSICMD_VENDOR_SPECIFIC 0x02
#define K_SCSICMD_REQUEST_SENSE 0x03
#define K_SCSICMD_FORMAT_UNIT 0x04
#define K_SCSICMD_READ_BLOCK_LIMITS 0x05
//#define K_SCSICMD_VENDOR_SPECIFIC 0x06
#define K_SCSICMD_REASSIGN_BLOCKS 0x07
#define K_SCSICMD_READ_06 0x08
//#define K_SCSICMD_VENDOR_SPECIFIC 0x09
#define K_SCSICMD_WRITE_06 0x0a
#define K_SCSICMD_SEEK_06 0x0b
//#define K_SCSICMD_VENDOR_SPECIFIC 0x0c
//#define K_SCSICMD_VENDOR_SPECIFIC 0x0d
//#define K_SCSICMD_VENDOR_SPECIFIC 0x0e
#define K_SCSICMD_READ_REVERSE 0x0f
#define K_SCSICMD_WRITE_FILEMARKS 0x10
#define K_SCSICMD_SPACE 0x11
#define K_SCSICMD_INQUIRY 0x12
#define K_SCSICMD_VERIF06 0x13
#define K_SCSICMD_RECOVER_BUFFERED_DATA 0x14
#define K_SCSICMD_MODE_SELECT_06 0x15
#define K_SCSICMD_RESERVE 0x16
#define K_SCSICMD_RELEASE 0x17
#define K_SCSICMD_COPY 0x18
#define K_SCSICMD_ERASE 0x19
#define K_SCSICMD_MODE_SENSE_06 0x1a
#define K_SCSICMD_START_STOP_UNIT 0x1b
#define K_SCSICMD_RECEIVE_DIAGNOSTIC_RESULTS 0x1c
#define K_SCSICMD_SEND_DIAGNOSTIC 0x1d
#define K_SCSICMD_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e
//#define K_SCSICMD_VENDOR_SPECIFIC 0x1f
//#define K_SCSICMD_VENDOR_SPECIFIC 0x20
//#define K_SCSICMD_VENDOR_SPECIFIC 0x21
//#define K_SCSICMD_VENDOR_SPECIFIC 0x22
#define K_SCSICMD_READ_FORMAT_CAPACITIES 0x23
#define K_SCSICMD_SET_WINDOW 0x24
#define K_SCSICMD_READ_CAPACITY 0x25
//#define K_SCSICMD_VENDOR_SPECIFIC 0x26
//#define K_SCSICMD_VENDOR_SPECIFIC 0x27
#define K_SCSICMD_READ_10 0x28
#define K_SCSICMD_READ_GENERATION 0x29
#define K_SCSICMD_WRITE_10 0x2a
#define K_SCSICMD_SEEK_10 0x2b
#define K_SCSICMD_ERASE_10 0x2c
#define K_SCSICMD_READ_UPDATED_BLOCK 0x2d
#define K_SCSICMD_WRITE_AND_VERIFY_10 0x2e
#define K_SCSICMD_VERIFY_10 0x2f
#define K_SCSICMD_SEARCH_DATA_HIGH_10 0x30
#define K_SCSICMD_SEARCH_DATA_EQUAL_10 0x31
#define K_SCSICMD_SEARCH_DATA_LOW_10 0x32
#define K_SCSICMD_SET_LIMITS 0x33
#define K_SCSICMD_PREFETCH 0x34
#define K_SCSICMD_SYNCHRONIZE_CACHE 0x35
#define K_SCSICMD_LOCK_UNLOCK_CACHE 0x36
#define K_SCSICMD_READ_DEFECT_DATA_10 0x37
#define K_SCSICMD_MEDIUM_SCAN 0x38
#define K_SCSICMD_COMPARE 0x39
#define K_SCSICMD_COPAND_VERIFY 0x3a
#define K_SCSICMD_WRITE_BUFFER 0x3b
#define K_SCSICMD_READ_BUFFER 0x3c
#define K_SCSICMD_UPDATE_BLOCK 0x3d
#define K_SCSICMD_READ_LONG 0x3e
#define K_SCSICMD_WRITE_LONG 0x3f
#define K_SCSICMD_CHANGE_DEFINITION 0x40
#define K_SCSICMD_WRITE_SAME 0x41
#define K_SCSICMD_READ_SUBCHANNEL 0x42
#define K_SCSICMD_READ_TOC 0x43
#define K_SCSICMD_READ_HEADER 0x44
#define K_SCSICMD_PLAY_AUDIO_10 0x45
//#define K_SCSICMD_VENDOR_SPECIFIC 0x46
#define K_SCSICMD_PLAY_AUDIO_MSF 0x47
#define K_SCSICMD_PLAY_AUDIO_TRACK_INDEX 0x48
#define K_SCSICMD_PLAY_TRACK_RELATIVE 0x49
//#define K_SCSICMD_VENDOR_SPECIFIC 0x4a
#define K_SCSICMD_PAUSE_RESUME 0x4b
#define K_SCSICMD_LOG_SELECT 0x4c
#define K_SCSICMD_LOG_SENSE 0x4d
//#define K_SCSICMD_VENDOR_SPECIFIC 0x4e
//#define K_SCSICMD_VENDOR_SPECIFIC 0x4f
//#define K_SCSICMD_VENDOR_SPECIFIC 0x50
//#define K_SCSICMD_VENDOR_SPECIFIC 0x51
//#define K_SCSICMD_VENDOR_SPECIFIC 0x52
//#define K_SCSICMD_VENDOR_SPECIFIC 0x53
//#define K_SCSICMD_VENDOR_SPECIFIC 0x54
#define K_SCSICMD_MODE_SELECT_10 0x55
//#define K_SCSICMD_VENDOR_SPECIFIC 0x56
//#define K_SCSICMD_VENDOR_SPECIFIC 0x57
//#define K_SCSICMD_VENDOR_SPECIFIC 0x58
//#define K_SCSICMD_VENDOR_SPECIFIC 0x59
#define K_SCSICMD_MODE_SENSE_10 0x5a
//#define K_SCSICMD_VENDOR_SPECIFIC 0x5b
//#define K_SCSICMD_VENDOR_SPECIFIC 0x5c
//#define K_SCSICMD_VENDOR_SPECIFIC 0x5d
//#define K_SCSICMD_VENDOR_SPECIFIC 0x5e
//#define K_SCSICMD_VENDOR_SPECIFIC 0x5f
#define K_SCSICMD_READ_12 0xa8
#define K_SCSICMD_WRITE_12 0xaa
//------------------------------------------------------------------------------
//Type Definition
//------------------------------------------------------------------------------
//---- SCSI-2 Commands ----------------
//6-byte Command
typedef struct _SCSICMD_06BYTE
{
UCHAR operationCode;
UCHAR serviceAction;
USHORT logicalBlockAddress;
UCHAR dataLength;
UCHAR controlByte;
} SCSICMD_06BYTE, *PSCSICMD_06BYTE;
//10-byte Command
typedef struct _SCSICMD_10BYTE
{
UCHAR operationCode;
UCHAR serviceAction;
ULONG logicalBlockAddress;
UCHAR reserved;
USHORT dataLength;
UCHAR controlByte;
} SCSICMD_10BYTE, *PSCSICMD_10BYTE;
//12-byte Command
typedef struct _SCSICMD_12BYTE
{
UCHAR operationCode;
UCHAR serviceAction;
ULONG logicalBlockAddress;
ULONG dataLength;
UCHAR reserved;
UCHAR controlByte;
} SCSICMD_12BYTE, *PSCSICMD_12BYTE;
//16-byte Command
typedef struct _SCSICMD_16BYTE
{
UCHAR operationCode;
UCHAR serviceAction;
ULONG logicalBlockAddress;
ULONG addtionalCdbData;
ULONG dataLength;
UCHAR reserved;
UCHAR controlByte;
} SCSICMD_16BYTE, *PSCSICMD_16BYTE;
#define SCSICMD_MODE_CURRENT_VALUE 0x00
#define SCSICMD_MODE_CHANGEABLE_VALUE 0x40
#define SCSICMD_MODE_DEFAULT_VALUE 0x80
#define SCSICMD_MODE_SAVED_VALUE 0xc0
//---- SCSI-2 Data (actaully SFF-8070i) ----
//REQUEST SENSE
#define SCSIDATA_REQUEST_SENSE_SIZE 0x12
typedef struct _SCSIDATA_REQUEST_SENSE
{
struct
{
//richie switch order
UCHAR errorCode:7;
UCHAR valid:1;
} BYTE0;
UCHAR reserved0;
struct
{
//richie switch order
UCHAR senseKey:4;
UCHAR reserved:4;
} BYTE2;
ULONG information;
UCHAR additionalSenseLength; //0x0a
UCHAR reserved1[4];
UCHAR additionalSenseCode;
UCHAR additionalSenseCodeQualifier;
UCHAR reserved2[4];
} SCSIDATA_REQUEST_SENSE, *PSCSIDATA_REQUEST_SENSE;
//FORMAT UNIT
#define SCSIDATA_FORMAT_UNIT_SIZE 0x0c
typedef struct _SCSIDATA_FORMAT_UNIT
{
struct
{
UCHAR reserved;
struct
{
//richie switch order
UCHAR side:1;
UCHAR immediate:1;
UCHAR reserved:2;
UCHAR singleTrack:1;
UCHAR DCRT:1;
UCHAR extend:1;
UCHAR FOV:1;
} BYTE1;
USHORT defectListLength;
} defectListHeader;
struct
{
ULONG numberOfBlocks;
UCHAR reserved;
UCHAR blockLengthHi;
USHORT blockLengthLo;
} formatDescriptor;
} SCSIDATA_FORMAT_UNIT, *PSCSIDATA_FORMAT_UNIT;
//INQUIRY
#define SCSIDATA_INQUIRY_SIZE 0x24
typedef struct _SCSIDATA_INQUIRY
{
struct
{
//richie switch order
UCHAR peripheralDeviceType:5;
UCHAR reserved:3;
} BYTE0;
struct
{
//richie switch order
UCHAR reserved:7;
UCHAR RMB:1;
} BYTE1;
struct
{
//richie switch order
UCHAR ansiVersion:3;
UCHAR emcaVersion:3;
UCHAR isoVersion:2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -