-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathscsipi_all.h
184 lines (163 loc) · 5.37 KB
/
scsipi_all.h
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
/* $NetBSD: scsipi_all.h,v 1.33 2007/12/25 18:33:42 perry Exp $ */
/*
* SCSI and SCSI-like general interface description
*/
/*
* Largely written by Julian Elischer ([email protected])
* for TRW Financial Systems.
*
* TRW Financial Systems, in accordance with their agreement with Carnegie
* Mellon University, makes this software available to CMU to distribute
* or use in any manner that they see fit as long as this message is kept with
* the software. For this reason TFS also grants any other persons or
* organisations permission to use or modify this software.
*
* TFS supplies this software to be publicly redistributed
* on the understanding that TFS is not responsible for the correct
* functioning of this software in any circumstances.
*
* Ported to run under 386BSD by Julian Elischer ([email protected]) Sept 1992
*/
#ifndef _DEV_SCSIPI_SCSIPI_ALL_H_
#define _DEV_SCSIPI_SCSIPI_ALL_H_
/*
* SCSI-like command format and opcode
*/
/*
* Some basic, common SCSI command group definitions.
*/
#define CDB_GROUPID(cmd) ((cmd >> 5) & 0x7)
#define CDB_GROUPID_0 0
#define CDB_GROUPID_1 1
#define CDB_GROUPID_2 2
#define CDB_GROUPID_3 3
#define CDB_GROUPID_4 4
#define CDB_GROUPID_5 5
#define CDB_GROUPID_6 6
#define CDB_GROUPID_7 7
#define CDB_GROUP0 6 /* 6-byte cdb's */
#define CDB_GROUP1 10 /* 10-byte cdb's */
#define CDB_GROUP2 10 /* 10-byte cdb's */
#define CDB_GROUP3 0 /* reserved */
#define CDB_GROUP4 16 /* 16-byte cdb's */
#define CDB_GROUP5 12 /* 12-byte cdb's */
#define CDB_GROUP6 0 /* vendor specific */
#define CDB_GROUP7 0 /* vendor specific */
/*
* Some basic, common SCSI commands
*/
#define INQUIRY 0x12
struct scsipi_inquiry {
u_int8_t opcode;
u_int8_t byte2;
u_int8_t unused[2];
u_int8_t length;
u_int8_t control;
} __packed;
#define START_STOP 0x1b
struct scsipi_start_stop {
u_int8_t opcode;
u_int8_t byte2;
#define SSS_IMMEDIATE 1
u_int8_t unused[2];
u_int8_t how;
#define SSS_STOP 0x00
#define SSS_START 0x01
#define SSS_LOEJ 0x02
u_int8_t control;
};
#ifdef PORT_AMIGA
/* Load / unload for CD changers */
#define LOAD_UNLOAD 0xa6
struct scsipi_load_unload {
u_int8_t opcode;
u_int8_t unused1[3];
u_int8_t options;
u_int8_t unused2[3];
u_int8_t slot;
u_int8_t unused3[3];
} __packed;
#endif
/*
* inquiry data format
*/
#define T_REMOV 1 /* device is removable */
#define T_FIXED 0 /* device is not removable */
/*
* According to SPC-2r16, in order to know if a U3W device support PPR,
* Inquiry Data structure should be at least 57 Bytes
*/
struct scsipi_inquiry_data {
/* 1*/ u_int8_t device;
#define SID_TYPE 0x1f /* device type mask */
#define SID_QUAL 0xe0 /* device qualifier mask */
#define SID_QUAL_LU_PRESENT 0x00 /* logical unit present */
#define SID_QUAL_LU_NOTPRESENT 0x20 /* logical unit not present */
#define SID_QUAL_reserved 0x40
#define SID_QUAL_LU_NOT_SUPP 0x60 /* logical unit not supported */
#define T_DIRECT 0x00 /* direct access device */
#define T_SEQUENTIAL 0x01 /* sequential access device */
#define T_PRINTER 0x02 /* printer device */
#define T_PROCESSOR 0x03 /* processor device */
#define T_WORM 0x04 /* write once, read many device */
#define T_CDROM 0x05 /* cd-rom device */
#define T_SCANNER 0x06 /* scanner device */
#define T_OPTICAL 0x07 /* optical memory device */
#define T_CHANGER 0x08 /* medium changer device */
#define T_COMM 0x09 /* communication device */
#define T_IT8_1 0x0a /* Defined by ASC IT8... */
#define T_IT8_2 0x0b /* ...(Graphic arts pre-press devices) */
#define T_STORARRAY 0x0c /* storage array device */
#define T_ENCLOSURE 0x0d /* enclosure services device */
#define T_SIMPLE_DIRECT 0x0E /* Simplified direct-access device */
#define T_OPTIC_CARD_RW 0x0F /* Optical card reader/writer device */
#define T_OBJECT_STORED 0x11 /* Object-based Storage Device */
#define T_AUTOMATION_DRIVE 0x12 /* Automation drive interface */
#define T_WELL_KNOWN_LUN 0x1e /* Well known logical unit */
#define T_NODEVICE 0x1f /* Unknown or no device type */
u_int8_t dev_qual2;
#define SID_QUAL2 0x7F
#define SID_REMOVABLE 0x80
/* 3*/ u_int8_t version;
#define SID_ANSII 0x07
#define SID_ECMA 0x38
#define SID_ISO 0xC0
/* 4*/ u_int8_t response_format;
#define SID_RespDataFmt 0x0F
#define SID_FORMAT_SCSI1 0x00 /* SCSI-1 format */
#define SID_FORMAT_CCS 0x01 /* SCSI CCS format */
#define SID_FORMAT_ISO 0x02 /* ISO format */
/* 5*/ u_int8_t additional_length; /* n-4 */
/* 6*/ u_int8_t flags1;
#define SID_SCC 0x80
/* 7*/ u_int8_t flags2;
#define SID_Addr16 0x01
#define SID_MChngr 0x08
#define SID_MultiPort 0x10
#define SID_EncServ 0x40
#define SID_BasQue 0x80
/* 8*/ u_int8_t flags3;
#define SID_SftRe 0x01
#define SID_CmdQue 0x02
#define SID_Linked 0x08
#define SID_Sync 0x10
#define SID_WBus16 0x20
#define SID_WBus32 0x40
#define SID_RelAdr 0x80
/* 9*/ char vendor[8];
/*17*/ char product[16];
/*33*/ char revision[4];
#define SCSIPI_INQUIRY_LENGTH_SCSI2 36
/*37*/ u_int8_t vendor_specific[20];
/*57*/ u_int8_t flags4;
#define SID_IUS 0x01
#define SID_QAS 0x02
#define SID_Clocking 0x0C
#define SID_CLOCKING_ST_ONLY 0x00
#define SID_CLOCKING_DT_ONLY 0x04
#define SID_CLOCKING_SD_DT 0x0C
/*58*/ u_int8_t reserved;
/*59*/ char version_descriptor[8][2];
#define SCSIPI_INQUIRY_LENGTH_SCSI3 74
} __packed; /* 74 Bytes */
#endif /* _DEV_SCSIPI_SCSIPI_ALL_H_ */