OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [include/] [scsi/] [scsi.h] - Blame information for rev 62

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*
2
 * This header file contains public constants and structures used by
3
 * the scsi code for linux.
4
 *
5
 * For documentation on the OPCODES, MESSAGES, and SENSE values,
6
 * please consult the SCSI standard.
7
 */
8
#ifndef _SCSI_SCSI_H
9
#define _SCSI_SCSI_H
10
 
11
#include <linux/types.h>
12
 
13
/*
14
 *      SCSI command lengths
15
 */
16
 
17
extern const unsigned char scsi_command_size[8];
18
#define COMMAND_SIZE(opcode) scsi_command_size[((opcode) >> 5) & 7]
19
 
20
/*
21
 * Special value for scanning to specify scanning or rescanning of all
22
 * possible channels, (target) ids, or luns on a given shost.
23
 */
24
#define SCAN_WILD_CARD  ~0
25
 
26
/*
27
 *      SCSI opcodes
28
 */
29
 
30
#define TEST_UNIT_READY       0x00
31
#define REZERO_UNIT           0x01
32
#define REQUEST_SENSE         0x03
33
#define FORMAT_UNIT           0x04
34
#define READ_BLOCK_LIMITS     0x05
35
#define REASSIGN_BLOCKS       0x07
36
#define INITIALIZE_ELEMENT_STATUS 0x07
37
#define READ_6                0x08
38
#define WRITE_6               0x0a
39
#define SEEK_6                0x0b
40
#define READ_REVERSE          0x0f
41
#define WRITE_FILEMARKS       0x10
42
#define SPACE                 0x11
43
#define INQUIRY               0x12
44
#define RECOVER_BUFFERED_DATA 0x14
45
#define MODE_SELECT           0x15
46
#define RESERVE               0x16
47
#define RELEASE               0x17
48
#define COPY                  0x18
49
#define ERASE                 0x19
50
#define MODE_SENSE            0x1a
51
#define START_STOP            0x1b
52
#define RECEIVE_DIAGNOSTIC    0x1c
53
#define SEND_DIAGNOSTIC       0x1d
54
#define ALLOW_MEDIUM_REMOVAL  0x1e
55
 
56
#define SET_WINDOW            0x24
57
#define READ_CAPACITY         0x25
58
#define READ_10               0x28
59
#define WRITE_10              0x2a
60
#define SEEK_10               0x2b
61
#define POSITION_TO_ELEMENT   0x2b
62
#define WRITE_VERIFY          0x2e
63
#define VERIFY                0x2f
64
#define SEARCH_HIGH           0x30
65
#define SEARCH_EQUAL          0x31
66
#define SEARCH_LOW            0x32
67
#define SET_LIMITS            0x33
68
#define PRE_FETCH             0x34
69
#define READ_POSITION         0x34
70
#define SYNCHRONIZE_CACHE     0x35
71
#define LOCK_UNLOCK_CACHE     0x36
72
#define READ_DEFECT_DATA      0x37
73
#define MEDIUM_SCAN           0x38
74
#define COMPARE               0x39
75
#define COPY_VERIFY           0x3a
76
#define WRITE_BUFFER          0x3b
77
#define READ_BUFFER           0x3c
78
#define UPDATE_BLOCK          0x3d
79
#define READ_LONG             0x3e
80
#define WRITE_LONG            0x3f
81
#define CHANGE_DEFINITION     0x40
82
#define WRITE_SAME            0x41
83
#define READ_TOC              0x43
84
#define LOG_SELECT            0x4c
85
#define LOG_SENSE             0x4d
86
#define MODE_SELECT_10        0x55
87
#define RESERVE_10            0x56
88
#define RELEASE_10            0x57
89
#define MODE_SENSE_10         0x5a
90
#define PERSISTENT_RESERVE_IN 0x5e
91
#define PERSISTENT_RESERVE_OUT 0x5f
92
#define REPORT_LUNS           0xa0
93
#define MAINTENANCE_IN        0xa3
94
#define MOVE_MEDIUM           0xa5
95
#define EXCHANGE_MEDIUM       0xa6
96
#define READ_12               0xa8
97
#define WRITE_12              0xaa
98
#define WRITE_VERIFY_12       0xae
99
#define SEARCH_HIGH_12        0xb0
100
#define SEARCH_EQUAL_12       0xb1
101
#define SEARCH_LOW_12         0xb2
102
#define READ_ELEMENT_STATUS   0xb8
103
#define SEND_VOLUME_TAG       0xb6
104
#define WRITE_LONG_2          0xea
105
#define READ_16               0x88
106
#define WRITE_16              0x8a
107
#define VERIFY_16             0x8f
108
#define SERVICE_ACTION_IN     0x9e
109
/* values for service action in */
110
#define SAI_READ_CAPACITY_16  0x10
111
/* values for maintenance in */
112
#define MI_REPORT_TARGET_PGS  0x0a
113
 
114
/* Values for T10/04-262r7 */
115
#define ATA_16                0x85      /* 16-byte pass-thru */
116
#define ATA_12                0xa1      /* 12-byte pass-thru */
117
 
118
/*
119
 *  SCSI Architecture Model (SAM) Status codes. Taken from SAM-3 draft
120
 *  T10/1561-D Revision 4 Draft dated 7th November 2002.
121
 */
122
#define SAM_STAT_GOOD            0x00
123
#define SAM_STAT_CHECK_CONDITION 0x02
124
#define SAM_STAT_CONDITION_MET   0x04
125
#define SAM_STAT_BUSY            0x08
126
#define SAM_STAT_INTERMEDIATE    0x10
127
#define SAM_STAT_INTERMEDIATE_CONDITION_MET 0x14
128
#define SAM_STAT_RESERVATION_CONFLICT 0x18
129
#define SAM_STAT_COMMAND_TERMINATED 0x22        /* obsolete in SAM-3 */
130
#define SAM_STAT_TASK_SET_FULL   0x28
131
#define SAM_STAT_ACA_ACTIVE      0x30
132
#define SAM_STAT_TASK_ABORTED    0x40
133
 
134
/** scsi_status_is_good - check the status return.
135
 *
136
 * @status: the status passed up from the driver (including host and
137
 *          driver components)
138
 *
139
 * This returns true for known good conditions that may be treated as
140
 * command completed normally
141
 */
142
static inline int scsi_status_is_good(int status)
143
{
144
        /*
145
         * FIXME: bit0 is listed as reserved in SCSI-2, but is
146
         * significant in SCSI-3.  For now, we follow the SCSI-2
147
         * behaviour and ignore reserved bits.
148
         */
149
        status &= 0xfe;
150
        return ((status == SAM_STAT_GOOD) ||
151
                (status == SAM_STAT_INTERMEDIATE) ||
152
                (status == SAM_STAT_INTERMEDIATE_CONDITION_MET) ||
153
                /* FIXME: this is obsolete in SAM-3 */
154
                (status == SAM_STAT_COMMAND_TERMINATED));
155
}
156
 
157
/*
158
 *  Status codes. These are deprecated as they are shifted 1 bit right
159
 *  from those found in the SCSI standards. This causes confusion for
160
 *  applications that are ported to several OSes. Prefer SAM Status codes
161
 *  above.
162
 */
163
 
164
#define GOOD                 0x00
165
#define CHECK_CONDITION      0x01
166
#define CONDITION_GOOD       0x02
167
#define BUSY                 0x04
168
#define INTERMEDIATE_GOOD    0x08
169
#define INTERMEDIATE_C_GOOD  0x0a
170
#define RESERVATION_CONFLICT 0x0c
171
#define COMMAND_TERMINATED   0x11
172
#define QUEUE_FULL           0x14
173
#define ACA_ACTIVE           0x18
174
#define TASK_ABORTED         0x20
175
 
176
#define STATUS_MASK          0xfe
177
 
178
/*
179
 *  SENSE KEYS
180
 */
181
 
182
#define NO_SENSE            0x00
183
#define RECOVERED_ERROR     0x01
184
#define NOT_READY           0x02
185
#define MEDIUM_ERROR        0x03
186
#define HARDWARE_ERROR      0x04
187
#define ILLEGAL_REQUEST     0x05
188
#define UNIT_ATTENTION      0x06
189
#define DATA_PROTECT        0x07
190
#define BLANK_CHECK         0x08
191
#define COPY_ABORTED        0x0a
192
#define ABORTED_COMMAND     0x0b
193
#define VOLUME_OVERFLOW     0x0d
194
#define MISCOMPARE          0x0e
195
 
196
 
197
/*
198
 *  DEVICE TYPES
199
 *  Please keep them in 0x%02x format for $MODALIAS to work
200
 */
201
 
202
#define TYPE_DISK           0x00
203
#define TYPE_TAPE           0x01
204
#define TYPE_PRINTER        0x02
205
#define TYPE_PROCESSOR      0x03    /* HP scanners use this */
206
#define TYPE_WORM           0x04    /* Treated as ROM by our system */
207
#define TYPE_ROM            0x05
208
#define TYPE_SCANNER        0x06
209
#define TYPE_MOD            0x07    /* Magneto-optical disk - 
210
                                     * - treated as TYPE_DISK */
211
#define TYPE_MEDIUM_CHANGER 0x08
212
#define TYPE_COMM           0x09    /* Communications device */
213
#define TYPE_RAID           0x0c
214
#define TYPE_ENCLOSURE      0x0d    /* Enclosure Services Device */
215
#define TYPE_RBC            0x0e
216
#define TYPE_NO_LUN         0x7f
217
 
218
/* Returns a human-readable name for the device */
219
extern const char * scsi_device_type(unsigned type);
220
 
221
/*
222
 * standard mode-select header prepended to all mode-select commands
223
 */
224
 
225
struct ccs_modesel_head {
226
        __u8 _r1;                       /* reserved */
227
        __u8 medium;            /* device-specific medium type */
228
        __u8 _r2;                       /* reserved */
229
        __u8 block_desc_length; /* block descriptor length */
230
        __u8 density;           /* device-specific density code */
231
        __u8 number_blocks_hi;  /* number of blocks in this block desc */
232
        __u8 number_blocks_med;
233
        __u8 number_blocks_lo;
234
        __u8 _r3;
235
        __u8 block_length_hi;   /* block length for blocks in this desc */
236
        __u8 block_length_med;
237
        __u8 block_length_lo;
238
};
239
 
240
/*
241
 * ScsiLun: 8 byte LUN.
242
 */
243
struct scsi_lun {
244
        __u8 scsi_lun[8];
245
};
246
 
247
/*
248
 *  MESSAGE CODES
249
 */
250
 
251
#define COMMAND_COMPLETE    0x00
252
#define EXTENDED_MESSAGE    0x01
253
#define     EXTENDED_MODIFY_DATA_POINTER    0x00
254
#define     EXTENDED_SDTR                   0x01
255
#define     EXTENDED_EXTENDED_IDENTIFY      0x02    /* SCSI-I only */
256
#define     EXTENDED_WDTR                   0x03
257
#define     EXTENDED_PPR                    0x04
258
#define     EXTENDED_MODIFY_BIDI_DATA_PTR   0x05
259
#define SAVE_POINTERS       0x02
260
#define RESTORE_POINTERS    0x03
261
#define DISCONNECT          0x04
262
#define INITIATOR_ERROR     0x05
263
#define ABORT_TASK_SET      0x06
264
#define MESSAGE_REJECT      0x07
265
#define NOP                 0x08
266
#define MSG_PARITY_ERROR    0x09
267
#define LINKED_CMD_COMPLETE 0x0a
268
#define LINKED_FLG_CMD_COMPLETE 0x0b
269
#define TARGET_RESET        0x0c
270
#define ABORT_TASK          0x0d
271
#define CLEAR_TASK_SET      0x0e
272
#define INITIATE_RECOVERY   0x0f            /* SCSI-II only */
273
#define RELEASE_RECOVERY    0x10            /* SCSI-II only */
274
#define CLEAR_ACA           0x16
275
#define LOGICAL_UNIT_RESET  0x17
276
#define SIMPLE_QUEUE_TAG    0x20
277
#define HEAD_OF_QUEUE_TAG   0x21
278
#define ORDERED_QUEUE_TAG   0x22
279
#define IGNORE_WIDE_RESIDUE 0x23
280
#define ACA                 0x24
281
#define QAS_REQUEST         0x55
282
 
283
/* Old SCSI2 names, don't use in new code */
284
#define BUS_DEVICE_RESET    TARGET_RESET
285
#define ABORT               ABORT_TASK_SET
286
 
287
/*
288
 * Host byte codes
289
 */
290
 
291
#define DID_OK          0x00    /* NO error                                */
292
#define DID_NO_CONNECT  0x01    /* Couldn't connect before timeout period  */
293
#define DID_BUS_BUSY    0x02    /* BUS stayed busy through time out period */
294
#define DID_TIME_OUT    0x03    /* TIMED OUT for other reason              */
295
#define DID_BAD_TARGET  0x04    /* BAD target.                             */
296
#define DID_ABORT       0x05    /* Told to abort for some other reason     */
297
#define DID_PARITY      0x06    /* Parity error                            */
298
#define DID_ERROR       0x07    /* Internal error                          */
299
#define DID_RESET       0x08    /* Reset by somebody.                      */
300
#define DID_BAD_INTR    0x09    /* Got an interrupt we weren't expecting.  */
301
#define DID_PASSTHROUGH 0x0a    /* Force command past mid-layer            */
302
#define DID_SOFT_ERROR  0x0b    /* The low level driver just wish a retry  */
303
#define DID_IMM_RETRY   0x0c    /* Retry without decrementing retry count  */
304
#define DID_REQUEUE     0x0d    /* Requeue command (no immediate retry) also
305
                                 * without decrementing the retry count    */
306
#define DRIVER_OK       0x00    /* Driver status                           */
307
 
308
/*
309
 *  These indicate the error that occurred, and what is available.
310
 */
311
 
312
#define DRIVER_BUSY         0x01
313
#define DRIVER_SOFT         0x02
314
#define DRIVER_MEDIA        0x03
315
#define DRIVER_ERROR        0x04
316
 
317
#define DRIVER_INVALID      0x05
318
#define DRIVER_TIMEOUT      0x06
319
#define DRIVER_HARD         0x07
320
#define DRIVER_SENSE        0x08
321
 
322
#define SUGGEST_RETRY       0x10
323
#define SUGGEST_ABORT       0x20
324
#define SUGGEST_REMAP       0x30
325
#define SUGGEST_DIE         0x40
326
#define SUGGEST_SENSE       0x80
327
#define SUGGEST_IS_OK       0xff
328
 
329
#define DRIVER_MASK         0x0f
330
#define SUGGEST_MASK        0xf0
331
 
332
/*
333
 * Internal return values.
334
 */
335
 
336
#define NEEDS_RETRY     0x2001
337
#define SUCCESS         0x2002
338
#define FAILED          0x2003
339
#define QUEUED          0x2004
340
#define SOFT_ERROR      0x2005
341
#define ADD_TO_MLQUEUE  0x2006
342
#define TIMEOUT_ERROR   0x2007
343
 
344
/*
345
 * Midlevel queue return values.
346
 */
347
#define SCSI_MLQUEUE_HOST_BUSY   0x1055
348
#define SCSI_MLQUEUE_DEVICE_BUSY 0x1056
349
#define SCSI_MLQUEUE_EH_RETRY    0x1057
350
 
351
/*
352
 *  Use these to separate status msg and our bytes
353
 *
354
 *  These are set by:
355
 *
356
 *      status byte = set from target device
357
 *      msg_byte    = return status from host adapter itself.
358
 *      host_byte   = set by low-level driver to indicate status.
359
 *      driver_byte = set by mid-level.
360
 */
361
#define status_byte(result) (((result) >> 1) & 0x7f)
362
#define msg_byte(result)    (((result) >> 8) & 0xff)
363
#define host_byte(result)   (((result) >> 16) & 0xff)
364
#define driver_byte(result) (((result) >> 24) & 0xff)
365
#define suggestion(result)  (driver_byte(result) & SUGGEST_MASK)
366
 
367
#define sense_class(sense)  (((sense) >> 4) & 0x7)
368
#define sense_error(sense)  ((sense) & 0xf)
369
#define sense_valid(sense)  ((sense) & 0x80);
370
 
371
/*
372
 * default timeouts
373
*/
374
#define FORMAT_UNIT_TIMEOUT             (2 * 60 * 60 * HZ)
375
#define START_STOP_TIMEOUT              (60 * HZ)
376
#define MOVE_MEDIUM_TIMEOUT             (5 * 60 * HZ)
377
#define READ_ELEMENT_STATUS_TIMEOUT     (5 * 60 * HZ)
378
#define READ_DEFECT_DATA_TIMEOUT        (60 * HZ )
379
 
380
 
381
#define IDENTIFY_BASE       0x80
382
#define IDENTIFY(can_disconnect, lun)   (IDENTIFY_BASE |\
383
                     ((can_disconnect) ?  0x40 : 0) |\
384
                     ((lun) & 0x07))
385
 
386
/*
387
 *  struct scsi_device::scsi_level values. For SCSI devices other than those
388
 *  prior to SCSI-2 (i.e. over 12 years old) this value is (resp[2] + 1)
389
 *  where "resp" is a byte array of the response to an INQUIRY. The scsi_level
390
 *  variable is visible to the user via sysfs.
391
 */
392
 
393
#define SCSI_UNKNOWN    0
394
#define SCSI_1          1
395
#define SCSI_1_CCS      2
396
#define SCSI_2          3
397
#define SCSI_3          4        /* SPC */
398
#define SCSI_SPC_2      5
399
#define SCSI_SPC_3      6
400
 
401
/*
402
 * INQ PERIPHERAL QUALIFIERS
403
 */
404
#define SCSI_INQ_PQ_CON         0x00
405
#define SCSI_INQ_PQ_NOT_CON     0x01
406
#define SCSI_INQ_PQ_NOT_CAP     0x03
407
 
408
 
409
/*
410
 * Here are some scsi specific ioctl commands which are sometimes useful.
411
 *
412
 * Note that include/linux/cdrom.h also defines IOCTL 0x5300 - 0x5395
413
 */
414
 
415
/* Used to obtain PUN and LUN info.  Conflicts with CDROMAUDIOBUFSIZ */
416
#define SCSI_IOCTL_GET_IDLUN            0x5382
417
 
418
/* 0x5383 and 0x5384 were used for SCSI_IOCTL_TAGGED_{ENABLE,DISABLE} */
419
 
420
/* Used to obtain the host number of a device. */
421
#define SCSI_IOCTL_PROBE_HOST           0x5385
422
 
423
/* Used to obtain the bus number for a device */
424
#define SCSI_IOCTL_GET_BUS_NUMBER       0x5386
425
 
426
/* Used to obtain the PCI location of a device */
427
#define SCSI_IOCTL_GET_PCI              0x5387
428
 
429
/* Pull a u32 out of a SCSI message (using BE SCSI conventions) */
430
static inline __u32 scsi_to_u32(__u8 *ptr)
431
{
432
        return (ptr[0]<<24) + (ptr[1]<<16) + (ptr[2]<<8) + ptr[3];
433
}
434
 
435
#endif /* _SCSI_SCSI_H */

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.