mscClass.h
3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#ifndef _MSC_CLASS_H_
#define _MSC_CLASS_H_
#define IN
#define OUT
#define INOUT
/*
bulk cbw & csw
*/
#define CBW_SIGNATURE 0x43425355
#define CSW_SIGNATURE 0x53425355
#define CBW_LUN_MASK 0x0F
#define CBW_CBLEN_MASK 0x1F
#define CBW_FLAG_DIR_OUT 0x00
#define CBW_FLAG_DIR_IN 0x80
#define MAX_CBWCB_LENGTH 0x10
typedef struct {
U32 dSignature;
U32 dTag;
U32 dDataTransferLength;
U8 bmFlags;
U8 bLUN;
U8 bCBLength;
U8 *cdb;
} MSC_BULK_CBW;
#define CBW_LENGTH 0x1F
#define CBW_CDB_START_POS 15
// CSW status define
#define CSW_CMD_PASS 0x00
#define CSW_CMD_FAIL 0x01
#define CSW_PHASE_ERR 0x02
typedef struct {
U32 dSignature;
U32 dTag;
U32 dataResidue;
U8 bStatus;
} MSC_BULK_CSW;
#define CSW_LENGTH 0x0D
/*
reduced block command set
*/
#define RBC_COMMAND_TEST_UNIT_READY 0x00
#define RBC_COMMAND_REQUEST_SENSE 0x03
#define RBC_COMMAND_FORMAT_UNIT 0x04
#define RBC_COMMAND_INQUIRY 0x12
#define RBC_COMMAND_MODE_SELECT_6 0x15
#define RBC_COMMAND_RESERVE_6 0x16
#define RBC_COMMAND_RELEASE_6 0x17
#define RBC_COMMAND_MODE_SENSE_6 0x1A
#define RBC_COMMAND_START_STOP_UNIT 0x1B
#define RBC_COMMAND_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1E
#define RBC_COMMAND_READ_CAPACITY 0x25
#define RBC_COMMAND_READ_10 0x28
#define RBC_COMMAND_WRITE_10 0x2A
#define RBC_COMMAND_VERIFY_10 0x2F
#define RBC_COMMAND_SYNCHRONIZE_CACHE 0x35
#define RBC_COMMAND_WRITE_BUFFER 0x3B
#define RBC_COMMAND_PERSISTENT_RESERVE_IN 0x5E
#define RBC_COMMAND_PERSISTENT_RESERVE_OUT 0x5F
#define SCSI_CMD_MODE_SENSE_10 0x5A
//definition for MODE_SENSE
#define PAGE_CONTROL_CURRENT 0x00
#define PAGE_CONTROL_CHANGE 0x01
#define PAGE_CONTROL_DEFAULT 0x02
#define PAGE_CONTROL_SAVED 0x03
#define WRITE_PROTECT_MASK 0x80
/*
scsi sense key define
*/
#define SCSI_SENSEKEY_NO_SENSE 0x00
#define SCSI_SENSEKEY_RECOVERED_ERROR 0x01
#define SCSI_SENSEKEY_NOT_READY 0x02
#define SCSI_SENSEKEY_MEDIUM_ERROR 0x03
#define SCSI_SENSEKEY_HARDWARE_ERROR 0x04
#define SCSI_SENSEKEY_ILLEGAL_REQUEST 0x05
#define SCSI_SENSEKEY_UNIT_ATTENTION 0x06
#define SCSI_SENSEKEY_DATA_PROTECT 0x07
#define SCSI_SENSEKEY_BLANK_CHECK 0x08
#define SCSI_SENSEKEY_VENDOR_SPECIFIC 0x09
#define SCSI_SENSEKEY_COPY_ABORTED 0x0A
#define SCSI_SENSEKEY_ABORTED_COMMAND 0x0B
#define SCSI_SENSEKEY_VOLUME_OVERFLOW 0x0D
#define SCSI_SENSEKEY_MISCOMPARE 0x0E
#define SCSI_SENSEKEY_RESERVED 0x0F
// additional sense code (ASC) & ASCQ
#define SCSI_ASC_ASCQ_NO_ADDITIONAL_SENSE_INFO (U16)0x0000
#define SCSI_ASC_ASCQ_MEDIUM_NOT_PRESENT (U16)0x3A00
#define SCSI_ASC_ASCQ_INVALID_COMMAND_OPERATION_CODE (U16)0x2000
#define SCSI_ASC_ASCQ_MEDIUM_MAY_HAVE_CHANGED (U16)0x2800
#define SCSI_ASC_ASCQ_MEDIA_NOT_PRESENT (U16)0x3A00
#define SCSI_ASC_ASCQ_MEDIUM_MANUALINTERVENTION_REQUIRED (U16)0x0400
#define SCSI_ASC_ASCQ_MEDIA_OUTOFRANGE (U16)0x2100
#define SCSI_ASC_ASCQ_WRITE_PROTECTED (U16)0x2700
#define SCSI_ASC_ASCQ_MEDIUM_REMOVAL_PREVENTED (U16)0x5302
#endif //_MSC_CLASS_H_