xref: /third_party/FreeBSD/sys/cam/scsi/scsi_all.h (revision f9f848fa)
1/*-
2 * Largely written by Julian Elischer (julian@tfs.com)
3 * for TRW Financial Systems.
4 *
5 * TRW Financial Systems, in accordance with their agreement with Carnegie
6 * Mellon University, makes this software available to CMU to distribute
7 * or use in any manner that they see fit as long as this message is kept with
8 * the software. For this reason TFS also grants any other persons or
9 * organisations permission to use or modify this software.
10 *
11 * TFS supplies this software to be publicly redistributed
12 * on the understanding that TFS is not responsible for the correct
13 * functioning of this software in any circumstances.
14 *
15 * Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992
16 */
17
18/*
19 * SCSI general  interface description
20 */
21
22#ifndef __INCLUDE_SCSI_ALL_H
23#define	__INCLUDE_SCSI_ALL_H
24
25#define	SC_SCSI_1 0x01
26#define	SC_SCSI_2 0x03
27
28#define	SCSI_REV_2 0x02
29
30/*
31 * Opcodes
32 */
33
34#define	TEST_UNIT_READY		0x00
35#define	REQUEST_SENSE		0x03
36#define	READ_6				0x08
37#define	WRITE_6				0x0A
38#define	INQUIRY				0x12
39#define	MODE_SELECT_6		0x15
40#define	MODE_SENSE_6		0x1A
41#define	START_STOP_UNIT		0x1B
42#define	START_STOP			0x1B
43#define	RESERVE				0x16
44#define	RELEASE				0x17
45#define	RECEIVE_DIAGNOSTIC	0x1C
46#define	SEND_DIAGNOSTIC		0x1D
47#define	PREVENT_ALLOW		0x1E
48#define	READ_CAPACITY		0x25
49#define	READ_10				0x28
50#define	WRITE_10			0x2A
51#define	POSITION_TO_ELEMENT	0x2B
52#define	WRITE_VERIFY_10		0x2E
53#define	VERIFY_10			0x2F
54#define	SYNCHRONIZE_CACHE	0x35
55#define	READ_DEFECT_DATA_10	0x37
56#define	WRITE_BUFFER		0x3B
57#define	READ_BUFFER			0x3C
58#define	CHANGE_DEFINITION	0x40
59#define	WRITE_SAME_10		0x41
60#define	UNMAP				0x42
61#define	LOG_SELECT			0x4C
62#define	LOG_SENSE			0x4D
63#define	MODE_SELECT_10		0x55
64#define	RESERVE_10			0x56
65#define	RELEASE_10			0x57
66#define	MODE_SENSE_10		0x5A
67#define	PERSISTENT_RES_IN	0x5E
68#define	PERSISTENT_RES_OUT	0x5F
69#define	EXTENDED_COPY		0x83
70#define	RECEIVE_COPY_STATUS	0x84
71#define	ATA_PASS_16			0x85
72#define	READ_16				0x88
73#define	COMPARE_AND_WRITE	0x89
74#define	WRITE_16			0x8A
75#define	WRITE_VERIFY_16		0x8E
76#define	VERIFY_16			0x8F
77#define	SYNCHRONIZE_CACHE_16	0x91
78#define	WRITE_SAME_16		0x93
79#define	SERVICE_ACTION_IN	0x9E
80#define	REPORT_LUNS			0xA0
81#define	ATA_PASS_12			0xA1
82#define	MAINTENANCE_IN		0xA3
83#define	MAINTENANCE_OUT		0xA4
84#define	MOVE_MEDIUM			0xA5
85#define	READ_12				0xA8
86#define	WRITE_12			0xAA
87#define	WRITE_VERIFY_12		0xAE
88#define	VERIFY_12			0xAF
89#define	READ_ELEMENT_STATUS	0xB8
90#define	READ_CD				0xBE
91
92/* Maintenance In Service Action Codes */
93#define	REPORT_IDENTIFYING_INFRMATION		0x05
94#define	REPORT_TARGET_PORT_GROUPS			0x0A
95#define	REPORT_ALIASES						0x0B
96#define	REPORT_SUPPORTED_OPERATION_CODES	0x0C
97#define	REPORT_SUPPORTED_TASK_MANAGEMENT_FUNCTIONS	0x0D
98#define	REPORT_PRIORITY						0x0E
99#define	REPORT_TIMESTAMP					0x0F
100#define	MANAGEMENT_PROTOCOL_IN				0x10
101/* Maintenance Out Service Action Codes */
102#define	SET_IDENTIFY_INFORMATION			0x06
103#define	SET_TARGET_PORT_GROUPS				0x0A
104#define	CHANGE_ALIASES						0x0B
105#define	SET_PRIORITY						0x0E
106#define	SET_TIMESTAMP						0x0F
107#define	MANGAEMENT_PROTOCOL_OUT				0x10
108
109/*
110 * Device Types
111 */
112#define	T_DIRECT	0x00
113#define	T_SEQUENTIAL	0x01
114#define	T_PRINTER	0x02
115#define	T_PROCESSOR	0x03
116#define	T_WORM		0x04
117#define	T_CDROM		0x05
118#define	T_SCANNER	0x06
119#define	T_OPTICAL	0x07
120#define	T_CHANGER	0x08
121#define	T_COMM		0x09
122#define	T_ASC0		0x0a
123#define	T_ASC1		0x0b
124#define	T_STORARRAY	0x0c
125#define	T_ENCLOSURE	0x0d
126#define	T_RBC		0x0e
127#define	T_OCRW		0x0f
128#define	T_OSD		0x11
129#define	T_ADC		0x12
130#define	T_NODEVICE	0x1f
131#define	T_ANY		0xff	/* Used in Quirk table matches */
132
133#define	T_REMOV		1
134#define	T_FIXED		0
135
136/*
137 * This length is the initial inquiry length used by the probe code, as
138 * well as the length necessary for scsi_print_inquiry() to function
139 * correctly.  If either use requires a different length in the future,
140 * the two values should be de-coupled.
141 */
142#define	SHORT_INQUIRY_LENGTH	36
143
144struct scsi_test_unit_ready
145{
146	uint8_t opcode;
147	uint8_t byte2;
148	uint8_t unused[3];
149	uint8_t control;
150};
151
152struct scsi_sense
153{
154	uint8_t opcode;
155	uint8_t byte2;
156	uint8_t unused[2];
157	uint8_t length;
158	uint8_t control;
159};
160
161struct scsi_inquiry
162{
163	uint8_t opcode;
164	uint8_t byte2;
165#define	SI_EVPD		0x01
166#define	SI_CMDDT	0x02
167	uint8_t page_code;
168	uint8_t length[2];
169	uint8_t control;
170};
171
172struct scsi_sense_data
173{
174	uint8_t error_code;
175	/*
176	 * SPC-4 says that the maximum length of sense data is 252 bytes.
177	 * So this structure is exactly 252 bytes log.
178	 */
179#define	SSD_FULL_SIZE 252
180	uint8_t sense_buf[SSD_FULL_SIZE - 1];
181	/*
182	 * XXX KDM is this still a reasonable minimum size?
183	 */
184#define	SSD_MIN_SIZE 18
185	/*
186	 * Maximum value for the extra_len field in the sense data.
187	 */
188#define	SSD_EXTRA_MAX 244
189};
190
191struct scsi_start_stop_unit
192{
193	uint8_t opcode;
194	uint8_t byte2;
195#define	SSS_IMMED		0x01
196	uint8_t reserved[2];
197	uint8_t how;
198#define	SSS_START			0x01
199#define	SSS_LOEJ			0x02
200#define	SSS_PC_MASK			0xf0
201#define	SSS_PC_START_VALID	0x00
202#define	SSS_PC_ACTIVE		0x10
203#define	SSS_PC_IDLE			0x20
204#define	SSS_PC_STANDBY		0x30
205#define	SSS_PC_LU_CONTROL	0x70
206#define	SSS_PC_FORCE_IDLE_0	0xa0
207#define	SSS_PC_FORCE_STANDBY_0	0xb0
208	uint8_t control;
209};
210
211/*
212 * Opcodes
213 */
214#define	VERIFIED			0x2f
215#define	REZERO_UNIT			0x01
216#define	FORMAT_UNIT			0x04
217#define	REASSIGN_BLOCKS		0x07
218#define	MODE_SELECT			0x15
219#define	MODE_SENSE			0x1a
220#define	READ_FORMAT_CAPACITIES	0x23
221#define	WRITE_AND_VERIFY	0x2e
222#define	READ_DEFECT_DATA_10	0x37
223#define	SANITIZE			0x48
224#define	READ_DEFECT_DATA_12	0xb7
225
226#endif
227