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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [drivers/] [message/] [fusion/] [scsi3.h] - Blame information for rev 1275

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
2
 *  linux/drivers/message/fusion/scsi3.h
3
 *      SCSI-3 definitions and macros.
4
 *      (Ultimately) SCSI-3 definitions; for now, inheriting
5
 *      SCSI-2 definitions.
6
 *
7
 *  Copyright (c) 1996-2002 Steven J. Ralston
8
 *  Written By: Steven J. Ralston (19960517)
9
 *  (mailto:sjralston1@netscape.net)
10
 *  (mailto:mpt_linux_developer@lsil.com)
11
 *
12
 *  $Id: scsi3.h,v 1.1.1.1 2004-04-15 02:27:24 phoenix Exp $
13
 */
14
 
15
#ifndef SCSI3_H_INCLUDED
16
#define SCSI3_H_INCLUDED
17
/***************************************************************************/
18
 
19
/****************************************************************************
20
 *
21
 *  Includes
22
 */
23
#ifdef __KERNEL__
24
#include <linux/types.h>
25
#else
26
    #ifndef U_STUFF_DEFINED
27
    #define U_STUFF_DEFINED
28
    typedef unsigned char u8;
29
    typedef unsigned short u16;
30
    typedef unsigned int u32;
31
    #endif
32
#endif
33
 
34
/****************************************************************************
35
 *
36
 *  Defines
37
 */
38
 
39
/*
40
 *    SCSI Commands
41
 */
42
#define CMD_TestUnitReady      0x00
43
#define CMD_RezeroUnit         0x01  /* direct-access devices */
44
#define CMD_Rewind             0x01  /* sequential-access devices */
45
#define CMD_RequestSense       0x03
46
#define CMD_FormatUnit         0x04
47
#define CMD_ReassignBlock      0x07
48
#define CMD_Read6              0x08
49
#define CMD_Write6             0x0A
50
#define CMD_WriteFilemark      0x10
51
#define CMD_Space              0x11
52
#define CMD_Inquiry            0x12
53
#define CMD_ModeSelect6        0x15
54
#define CMD_ModeSense6         0x1A
55
#define CMD_Reserve6           0x16
56
#define CMD_Release6           0x17
57
#define CMD_Erase              0x19
58
#define CMD_StartStopUnit      0x1b  /* direct-access devices */
59
#define CMD_LoadUnload         0x1b  /* sequential-access devices */
60
#define CMD_ReceiveDiagnostic  0x1C
61
#define CMD_SendDiagnostic     0x1D
62
#define CMD_ReadCapacity       0x25
63
#define CMD_Read10             0x28
64
#define CMD_Write10            0x2A
65
#define CMD_WriteVerify        0x2E
66
#define CMD_Verify             0x2F
67
#define CMD_SynchronizeCache   0x35
68
#define CMD_ReadDefectData     0x37
69
#define CMD_WriteBuffer        0x3B
70
#define CMD_ReadBuffer         0x3C
71
#define CMD_ReadLong           0x3E
72
#define CMD_LogSelect          0x4C
73
#define CMD_LogSense           0x4D
74
#define CMD_ModeSelect10       0x55
75
#define CMD_Reserve10          0x56
76
#define CMD_Release10          0x57
77
#define CMD_ModeSense10        0x5A
78
#define CMD_PersistReserveIn   0x5E
79
#define CMD_PersistReserveOut  0x5F
80
#define CMD_ReportLuns         0xA0
81
 
82
/*
83
 *    Control byte field
84
 */
85
#define CONTROL_BYTE_NACA_BIT  0x04
86
#define CONTROL_BYTE_Flag_BIT  0x02
87
#define CONTROL_BYTE_Link_BIT  0x01
88
 
89
/*
90
 *    SCSI Messages
91
 */
92
#define MSG_COMPLETE             0x00
93
#define MSG_EXTENDED             0x01
94
#define MSG_SAVE_POINTERS        0x02
95
#define MSG_RESTORE_POINTERS     0x03
96
#define MSG_DISCONNECT           0x04
97
#define MSG_IDERROR              0x05
98
#define MSG_ABORT                0x06
99
#define MSG_REJECT               0x07
100
#define MSG_NOP                  0x08
101
#define MSG_PARITY_ERROR         0x09
102
#define MSG_LINKED_CMD_COMPLETE  0x0a
103
#define MSG_LCMD_COMPLETE_W_FLG  0x0b
104
#define MSG_BUS_DEVICE_RESET     0x0c
105
#define MSG_ABORT_TAG            0x0d
106
#define MSG_CLEAR_QUEUE          0x0e
107
#define MSG_INITIATE_RECOVERY    0x0f
108
 
109
#define MSG_RELEASE_RECOVRY      0x10
110
#define MSG_TERMINATE_IO         0x11
111
 
112
#define MSG_SIMPLE_QUEUE         0x20
113
#define MSG_HEAD_OF_QUEUE        0x21
114
#define MSG_ORDERED_QUEUE        0x22
115
#define MSG_IGNORE_WIDE_RESIDUE  0x23
116
 
117
#define MSG_IDENTIFY             0x80
118
#define MSG_IDENTIFY_W_DISC      0xc0
119
 
120
/*
121
 *    SCSI Phases
122
 */
123
#define PHS_DATA_OUT  0x00
124
#define PHS_DATA_IN   0x01
125
#define PHS_COMMAND   0x02
126
#define PHS_STATUS    0x03
127
#define PHS_MSG_OUT   0x06
128
#define PHS_MSG_IN    0x07
129
 
130
/*
131
 *    Statuses
132
 */
133
#define STS_GOOD                        0x00
134
#define STS_CHECK_CONDITION             0x02
135
#define STS_CONDITION_MET               0x04
136
#define STS_BUSY                        0x08
137
#define STS_INTERMEDIATE                0x10
138
#define STS_INTERMEDIATE_CONDITION_MET  0x14
139
#define STS_RESERVATION_CONFLICT        0x18
140
#define STS_COMMAND_TERMINATED          0x22
141
#define STS_TASK_SET_FULL               0x28
142
#define    STS_QUEUE_FULL               0x28
143
#define STS_ACA_ACTIVE                  0x30
144
 
145
#define STS_VALID_MASK                  0x3e
146
 
147
#define SCSI_STATUS(x)  ((x) & STS_VALID_MASK)
148
 
149
/*
150
 *    SCSI QTag Types
151
 */
152
#define QTAG_SIMPLE     0x20
153
#define QTAG_HEAD_OF_Q  0x21
154
#define QTAG_ORDERED    0x22
155
 
156
/*
157
 *    SCSI Sense Key Definitons
158
 */
159
#define SK_NO_SENSE         0x00
160
#define SK_RECOVERED_ERROR  0x01
161
#define SK_NOT_READY        0x02
162
#define SK_MEDIUM_ERROR     0x03
163
#define SK_HARDWARE_ERROR   0x04
164
#define SK_ILLEGAL_REQUEST  0x05
165
#define SK_UNIT_ATTENTION   0x06
166
#define SK_DATA_PROTECT     0x07
167
#define SK_BLANK_CHECK      0x08
168
#define SK_VENDOR_SPECIFIC  0x09
169
#define SK_COPY_ABORTED     0x0a
170
#define SK_ABORTED_COMMAND  0x0b
171
#define SK_EQUAL            0x0c
172
#define SK_VOLUME_OVERFLOW  0x0d
173
#define SK_MISCOMPARE       0x0e
174
#define SK_RESERVED         0x0f
175
 
176
 
177
 
178
#define SCSI_MAX_INQUIRY_BYTES  96
179
#define SCSI_STD_INQUIRY_BYTES  36
180
 
181
#undef USE_SCSI_COMPLETE_INQDATA
182
/*
183
 *      Structure definition for SCSI Inquiry Data
184
 *
185
 *  NOTE: The following structure is 96 bytes in size
186
 *      iff USE_SCSI_COMPLETE_INQDATA IS defined above (i.e. w/ "#define").
187
 *      If USE_SCSI_COMPLETE_INQDATA is NOT defined above (i.e. w/ "#undef")
188
 *      then the following structure is only 36 bytes in size.
189
 *  THE CHOICE IS YOURS!
190
 */
191
typedef struct SCSI_Inquiry_Data
192
{
193
#ifdef USE_SCSI_COMPLETE_INQDATA
194
    u8   InqByte[SCSI_MAX_INQUIRY_BYTES];
195
#else
196
    u8   InqByte[SCSI_STD_INQUIRY_BYTES];
197
#endif
198
 
199
/*
200
 * the following structure works only for little-endian (Intel,
201
 * LSB first (1234) byte order) systems with 4-byte ints.
202
 *
203
        u32    Periph_Device_Type    : 5,
204
               Periph_Qualifier      : 3,
205
               Device_Type_Modifier  : 7,
206
               Removable_Media       : 1,
207
               ANSI_Version          : 3,
208
               ECMA_Version          : 3,
209
               ISO_Version           : 2,
210
               Response_Data_Format  : 4,
211
               reserved_0            : 3,
212
               AERC                  : 1  ;
213
        u32    Additional_Length     : 8,
214
               reserved_1            :16,
215
               SftReset              : 1,
216
               CmdQue                : 1,
217
               reserved_2            : 1,
218
               Linked                : 1,
219
               Sync                  : 1,
220
               WBus16                : 1,
221
               WBus32                : 1,
222
               RelAdr                : 1  ;
223
        u8     Vendor_ID[8];
224
        u8     Product_ID[16];
225
        u8     Revision_Level [4];
226
#ifdef USE_SCSI_COMPLETE_INQDATA
227
        u8     Vendor_Specific[20];
228
        u8     reserved_3[40];
229
#endif
230
 *
231
 */
232
 
233
} SCSI_Inquiry_Data_t;
234
 
235
#define INQ_PERIPHINFO_BYTE            0
236
#define   INQ_Periph_Qualifier_MASK      0xe0
237
#define   INQ_Periph_Device_Type_MASK    0x1f
238
 
239
#define INQ_Peripheral_Qualifier(inqp) \
240
    (int)((*((u8*)(inqp)+INQ_PERIPHINFO_BYTE) & INQ_Periph_Qualifier_MASK) >> 5)
241
#define INQ_Peripheral_Device_Type(inqp) \
242
    (int)(*((u8*)(inqp)+INQ_PERIPHINFO_BYTE) & INQ_Periph_Device_Type_MASK)
243
 
244
 
245
#define INQ_DEVTYPEMOD_BYTE            1
246
#define   INQ_RMB_BIT                    0x80
247
#define   INQ_Device_Type_Modifier_MASK  0x7f
248
 
249
#define INQ_Removable_Medium(inqp) \
250
    (int)(*((u8*)(inqp)+INQ_DEVTYPEMOD_BYTE) & INQ_RMB_BIT)
251
#define INQ_Device_Type_Modifier(inqp) \
252
    (int)(*((u8*)(inqp)+INQ_DEVTYPEMOD_BYTE) & INQ_Device_Type_Modifier_MASK)
253
 
254
 
255
#define INQ_VERSIONINFO_BYTE           2
256
#define   INQ_ISO_Version_MASK           0xc0
257
#define   INQ_ECMA_Version_MASK          0x38
258
#define   INQ_ANSI_Version_MASK          0x07
259
 
260
#define INQ_ISO_Version(inqp) \
261
    (int)(*((u8*)(inqp)+INQ_VERSIONINFO_BYTE) & INQ_ISO_Version_MASK)
262
#define INQ_ECMA_Version(inqp) \
263
    (int)(*((u8*)(inqp)+INQ_VERSIONINFO_BYTE) & INQ_ECMA_Version_MASK)
264
#define INQ_ANSI_Version(inqp) \
265
    (int)(*((u8*)(inqp)+INQ_VERSIONINFO_BYTE) & INQ_ANSI_Version_MASK)
266
 
267
 
268
#define INQ_BYTE3                      3
269
#define   INQ_AERC_BIT                   0x80
270
#define   INQ_TrmTsk_BIT                 0x40
271
#define   INQ_NormACA_BIT                0x20
272
#define   INQ_RDF_MASK                   0x0F
273
 
274
#define INQ_AER_Capable(inqp) \
275
    (int)(*((u8*)(inqp)+INQ_BYTE3) & INQ_AERC_BIT)
276
#define INQ_TrmTsk(inqp) \
277
    (int)(*((u8*)(inqp)+INQ_BYTE3) & INQ_TrmTsk_BIT)
278
#define INQ_NormACA(inqp) \
279
    (int)(*((u8*)(inqp)+INQ_BYTE3) & INQ_NormACA_BIT)
280
#define INQ_Response_Data_Format(inqp) \
281
    (int)(*((u8*)(inqp)+INQ_BYTE3) & INQ_RDF_MASK)
282
 
283
 
284
#define INQ_CAPABILITY_BYTE            7
285
#define   INQ_RelAdr_BIT                 0x80
286
#define   INQ_WBus32_BIT                 0x40
287
#define   INQ_WBus16_BIT                 0x20
288
#define   INQ_Sync_BIT                   0x10
289
#define   INQ_Linked_BIT                 0x08
290
  /*      INQ_Reserved BIT               0x40 */
291
#define   INQ_CmdQue_BIT                 0x02
292
#define   INQ_SftRe_BIT                  0x01
293
 
294
#define IS_RelAdr_DEV(inqp) \
295
    (int)(*((u8*)(inqp)+INQ_CAPABILITY_BYTE) & INQ_RelAdr_BIT)
296
#define IS_WBus32_DEV(inqp) \
297
    (int)(*((u8*)(inqp)+INQ_CAPABILITY_BYTE) & INQ_WBus32_BIT)
298
#define IS_WBus16_DEV(inqp) \
299
    (int)(*((u8*)(inqp)+INQ_CAPABILITY_BYTE) & INQ_WBus16_BIT)
300
#define IS_Sync_DEV(inqp) \
301
    (int)(*((u8*)(inqp)+INQ_CAPABILITY_BYTE) & INQ_Sync_BIT)
302
#define IS_Linked_DEV(inqp) \
303
    (int)(*((u8*)(inqp)+INQ_CAPABILITY_BYTE) & INQ_Linked_BIT)
304
#define IS_CmdQue_DEV(inqp) \
305
    (int)(*((u8*)(inqp)+INQ_CAPABILITY_BYTE) & INQ_CmdQue_BIT)
306
#define IS_SftRe_DEV(inqp) \
307
    (int)(*((u8*)(inqp)+INQ_CAPABILITY_BYTE) & INQ_SftRe_BIT)
308
 
309
#define INQ_Width_BITS \
310
    (INQ_WBus32_BIT | INQ_WBus16_BIT)
311
#define IS_Wide_DEV(inqp) \
312
    (int)(*((u8*)(inqp)+INQ_CAPABILITY_BYTE) & INQ_Width_BITS)
313
 
314
 
315
/*
316
 *      SCSI peripheral device types
317
 */
318
#define SCSI_TYPE_DAD               0x00  /* Direct Access Device */
319
#define SCSI_TYPE_SAD               0x01  /* Sequential Access Device */
320
#define SCSI_TYPE_TAPE  SCSI_TYPE_SAD
321
#define SCSI_TYPE_PRT               0x02  /* Printer */
322
#define SCSI_TYPE_PROC              0x03  /* Processor */
323
#define SCSI_TYPE_WORM              0x04
324
#define SCSI_TYPE_CDROM             0x05
325
#define SCSI_TYPE_SCAN              0x06  /* Scanner */
326
#define SCSI_TYPE_OPTICAL           0x07  /* Magneto/Optical */
327
#define SCSI_TYPE_CHANGER           0x08
328
#define SCSI_TYPE_COMM              0x09  /* Communications device */
329
#define SCSI_TYPE_UNKNOWN           0x1f
330
#define SCSI_TYPE_UNCONFIGURED_LUN  0x7f
331
 
332
#define SCSI_TYPE_MAX_KNOWN         SCSI_TYPE_COMM
333
 
334
/*
335
 *      Peripheral Qualifiers
336
 */
337
#define DEVICE_PRESENT     0x00
338
#define LUN_NOT_PRESENT    0x01
339
#define LUN_NOT_SUPPORTED  0x03
340
 
341
/*
342
 *      ANSI Versions
343
 */
344
#ifndef SCSI_1
345
#define SCSI_1  0x01
346
#endif
347
#ifndef SCSI_2
348
#define SCSI_2  0x02
349
#endif
350
#ifndef SCSI_3
351
#define SCSI_3  0x03
352
#endif
353
 
354
 
355
#define SCSI_MAX_SENSE_BYTES  255
356
#define SCSI_STD_SENSE_BYTES   18
357
#define SCSI_PAD_SENSE_BYTES      (SCSI_MAX_SENSE_BYTES - SCSI_STD_SENSE_BYTES)
358
 
359
#undef USE_SCSI_COMPLETE_SENSE
360
/*
361
 *      Structure definition for SCSI Sense Data
362
 *
363
 *  NOTE: The following structure is 255 bytes in size
364
 *      iiff USE_SCSI_COMPLETE_SENSE IS defined above (i.e. w/ "#define").
365
 *      If USE_SCSI_COMPLETE_SENSE is NOT defined above (i.e. w/ "#undef")
366
 *      then the following structure is only 19 bytes in size.
367
 *  THE CHOICE IS YOURS!
368
 *
369
 */
370
typedef struct SCSI_Sense_Data
371
{
372
#ifdef USE_SCSI_COMPLETE_SENSE
373
    u8       SenseByte[SCSI_MAX_SENSE_BYTES];
374
#else
375
    u8       SenseByte[SCSI_STD_SENSE_BYTES];
376
#endif
377
 
378
/*
379
 * the following structure works only for little-endian (Intel,
380
 * LSB first (1234) byte order) systems with 4-byte ints.
381
 *
382
    u8     Error_Code                :4,            // 0x00
383
           Error_Class               :3,
384
           Valid                     :1
385
     ;
386
    u8     Segment_Number                           // 0x01
387
     ;
388
    u8     Sense_Key                 :4,            // 0x02
389
           Reserved                  :1,
390
           Incorrect_Length_Indicator:1,
391
           End_Of_Media              :1,
392
           Filemark                  :1
393
     ;
394
    u8     Information_MSB;                         // 0x03
395
    u8     Information_Byte2;                       // 0x04
396
    u8     Information_Byte1;                       // 0x05
397
    u8     Information_LSB;                         // 0x06
398
    u8     Additional_Length;                       // 0x07
399
 
400
    u32    Command_Specific_Information;            // 0x08 - 0x0b
401
 
402
    u8     Additional_Sense_Code;                   // 0x0c
403
    u8     Additional_Sense_Code_Qualifier;         // 0x0d
404
    u8     Field_Replaceable_Unit_Code;             // 0x0e
405
    u8     Illegal_Req_Bit_Pointer   :3,            // 0x0f
406
           Illegal_Req_Bit_Valid     :1,
407
           Illegal_Req_Reserved      :2,
408
           Illegal_Req_Cmd_Data      :1,
409
           Sense_Key_Specific_Valid  :1
410
     ;
411
    u16    Sense_Key_Specific_Data;                 // 0x10 - 0x11
412
 
413
#ifdef USE_SCSI_COMPLETE_SENSE
414
    u8     Additional_Sense_Data[SCSI_PAD_SENSE_BYTES];
415
#else
416
    u8     Additional_Sense_Data[1];
417
#endif
418
 *
419
 */
420
 
421
} SCSI_Sense_Data_t;
422
 
423
 
424
#define SD_ERRCODE_BYTE                0
425
#define   SD_Valid_BIT                   0x80
426
#define   SD_Error_Code_MASK             0x7f
427
#define SD_Valid(sdp) \
428
    (int)(*((u8*)(sdp)+SD_ERRCODE_BYTE) & SD_Valid_BIT)
429
#define SD_Error_Code(sdp) \
430
    (int)(*((u8*)(sdp)+SD_ERRCODE_BYTE) & SD_Error_Code_MASK)
431
 
432
 
433
#define SD_SEGNUM_BYTE                 1
434
#define SD_Segment_Number(sdp)  (int)(*((u8*)(sdp)+SD_SEGNUM_BYTE))
435
 
436
 
437
#define SD_SENSEKEY_BYTE               2
438
#define   SD_Filemark_BIT                0x80
439
#define   SD_EOM_BIT                     0x40
440
#define   SD_ILI_BIT                     0x20
441
#define   SD_Sense_Key_MASK              0x0f
442
#define SD_Filemark(sdp) \
443
    (int)(*((u8*)(sdp)+SD_SENSEKEY_BYTE) & SD_Filemark_BIT)
444
#define SD_EOM(sdp) \
445
    (int)(*((u8*)(sdp)+SD_SENSEKEY_BYTE) & SD_EOM_BIT)
446
#define SD_ILI(sdp) \
447
    (int)(*((u8*)(sdp)+SD_SENSEKEY_BYTE) & SD_ILI_BIT)
448
#define SD_Sense_Key(sdp) \
449
    (int)(*((u8*)(sdp)+SD_SENSEKEY_BYTE) & SD_Sense_Key_MASK)
450
 
451
 
452
#define SD_INFO3_BYTE                  3
453
#define SD_INFO2_BYTE                  4
454
#define SD_INFO1_BYTE                  5
455
#define SD_INFO0_BYTE                  6
456
#define SD_Information3(sdp)  (int)(*((u8*)(sdp)+SD_INFO3_BYTE))
457
#define SD_Information2(sdp)  (int)(*((u8*)(sdp)+SD_INFO2_BYTE))
458
#define SD_Information1(sdp)  (int)(*((u8*)(sdp)+SD_INFO1_BYTE))
459
#define SD_Information0(sdp)  (int)(*((u8*)(sdp)+SD_INFO0_BYTE))
460
 
461
 
462
#define SD_ADDL_LEN_BYTE               7
463
#define SD_Additional_Sense_Length(sdp) \
464
    (int)(*((u8*)(sdp)+SD_ADDL_LEN_BYTE))
465
#define SD_Addl_Sense_Len  SD_Additional_Sense_Length
466
 
467
 
468
#define SD_CMD_SPECIFIC3_BYTE          8
469
#define SD_CMD_SPECIFIC2_BYTE          9
470
#define SD_CMD_SPECIFIC1_BYTE         10
471
#define SD_CMD_SPECIFIC0_BYTE         11
472
#define SD_Cmd_Specific_Info3(sdp)  (int)(*((u8*)(sdp)+SD_CMD_SPECIFIC3_BYTE))
473
#define SD_Cmd_Specific_Info2(sdp)  (int)(*((u8*)(sdp)+SD_CMD_SPECIFIC2_BYTE))
474
#define SD_Cmd_Specific_Info1(sdp)  (int)(*((u8*)(sdp)+SD_CMD_SPECIFIC1_BYTE))
475
#define SD_Cmd_Specific_Info0(sdp)  (int)(*((u8*)(sdp)+SD_CMD_SPECIFIC0_BYTE))
476
 
477
 
478
#define SD_ADDL_SENSE_CODE_BYTE       12
479
#define SD_Additional_Sense_Code(sdp) \
480
    (int)(*((u8*)(sdp)+SD_ADDL_SENSE_CODE_BYTE))
481
#define SD_Addl_Sense_Code  SD_Additional_Sense_Code
482
#define SD_ASC  SD_Additional_Sense_Code
483
 
484
 
485
#define SD_ADDL_SENSE_CODE_QUAL_BYTE  13
486
#define SD_Additional_Sense_Code_Qualifier(sdp) \
487
    (int)(*((u8*)(sdp)+SD_ADDL_SENSE_CODE_QUAL_BYTE))
488
#define SD_Addl_Sense_Code_Qual  SD_Additional_Sense_Code_Qualifier
489
#define SD_ASCQ  SD_Additional_Sense_Code_Qualifier
490
 
491
 
492
#define SD_FIELD_REPL_UNIT_CODE_BYTE  14
493
#define SD_Field_Replaceable_Unit_Code(sdp) \
494
    (int)(*((u8*)(sdp)+SD_FIELD_REPL_UNIT_CODE_BYTE))
495
#define SD_Field_Repl_Unit_Code  SD_Field_Replaceable_Unit_Code
496
#define SD_FRUC  SD_Field_Replaceable_Unit_Code
497
#define SD_FRU  SD_Field_Replaceable_Unit_Code
498
 
499
 
500
/*
501
 *  Sense-Key Specific offsets and macros.
502
 */
503
#define SD_SKS2_BYTE                  15
504
#define   SD_SKS_Valid_BIT               0x80
505
#define   SD_SKS_Cmd_Data_BIT            0x40
506
#define   SD_SKS_Bit_Ptr_Valid_BIT       0x08
507
#define   SD_SKS_Bit_Ptr_MASK            0x07
508
#define SD_SKS1_BYTE                  16
509
#define SD_SKS0_BYTE                  17
510
#define SD_Sense_Key_Specific_Valid(sdp) \
511
    (int)(*((u8*)(sdp)+SD_SKS2_BYTE) & SD_SKS_Valid_BIT)
512
#define SD_SKS_Valid  SD_Sense_Key_Specific_Valid
513
#define SD_SKS_CDB_Error(sdp)  \
514
    (int)(*((u8*)(sdp)+SD_SKS2_BYTE) & SD_SKS_Cmd_Data_BIT)
515
#define SD_Was_Illegal_Request  SD_SKS_CDB_Error
516
#define SD_SKS_Bit_Pointer_Valid(sdp)  \
517
    (int)(*((u8*)(sdp)+SD_SKS2_BYTE) & SD_SKS_Bit_Ptr_Valid_BIT)
518
#define SD_SKS_Bit_Pointer(sdp)  \
519
    (int)(*((u8*)(sdp)+SD_SKS2_BYTE) & SD_SKS_Bit_Ptr_MASK)
520
#define SD_Field_Pointer(sdp)  \
521
    (int)( ((u16)(*((u8*)(sdp)+SD_SKS1_BYTE)) << 8) \
522
      + *((u8*)(sdp)+SD_SKS0_BYTE) )
523
#define SD_Bad_Byte  SD_Field_Pointer
524
#define SD_Actual_Retry_Count  SD_Field_Pointer
525
#define SD_Progress_Indication  SD_Field_Pointer
526
 
527
/*
528
 *  Mode Sense Write Protect Mask
529
 */
530
#define WRITE_PROTECT_MASK      0X80
531
 
532
/*
533
 *  Medium Type Codes
534
 */
535
#define OPTICAL_DEFAULT                 0x00
536
#define OPTICAL_READ_ONLY_MEDIUM        0x01
537
#define OPTICAL_WRITE_ONCE_MEDIUM       0x02
538
#define OPTICAL_READ_WRITABLE_MEDIUM    0x03
539
#define OPTICAL_RO_OR_WO_MEDIUM         0x04
540
#define OPTICAL_RO_OR_RW_MEDIUM         0x05
541
#define OPTICAL_WO_OR_RW_MEDIUM         0x06
542
 
543
 
544
 
545
/*
546
 *    Structure definition for READ6, WRITE6 (6-byte CDB)
547
 */
548
typedef struct SCSI_RW6_CDB
549
{
550
    u32    OpCode      :8,
551
           LBA_HI      :5,    /* 5 MSBit's of the LBA */
552
           Lun         :3,
553
           LBA_MID     :8,    /* NOTE: total of 21 bits in LBA */
554
           LBA_LO      :8  ;  /* Max LBA = 0x001fffff          */
555
    u8     BlockCount;
556
    u8     Control;
557
} SCSI_RW6_t;
558
 
559
#define MAX_RW6_LBA  ((u32)0x001fffff)
560
 
561
/*
562
 *  Structure definition for READ10, WRITE10 (10-byte CDB)
563
 *
564
 *    NOTE: ParityCheck bit is applicable only for VERIFY and WRITE VERIFY for
565
 *    the ADP-92 DAC only.  In the SCSI2 spec. this same bit is defined as a
566
 *    FUA (forced unit access) bit for READs and WRITEs.  Since this driver
567
 *    does not use the FUA, this bit is defined as it is used by the ADP-92.
568
 *    Also, for READ CAPACITY, only the OpCode field is used.
569
 */
570
typedef struct SCSI_RW10_CDB
571
{
572
    u8     OpCode;
573
    u8     Reserved1;
574
    u32    LBA;
575
    u8     Reserved2;
576
    u16    BlockCount;
577
    u8     Control;
578
} SCSI_RW10_t;
579
 
580
#define PARITY_CHECK  0x08    /* parity check bit - byte[1], bit 3 */
581
 
582
    /*
583
     *  Structure definition for data returned by READ CAPACITY cmd;
584
     *  READ CAPACITY data
585
     */
586
    typedef struct READ_CAP_DATA
587
    {
588
        u32    MaxLBA;
589
        u32    BlockBytes;
590
    } SCSI_READ_CAP_DATA_t, *pSCSI_READ_CAP_DATA_t;
591
 
592
 
593
/*
594
 *  Structure definition for FORMAT UNIT CDB (6-byte CDB)
595
 */
596
typedef struct _SCSI_FORMAT_UNIT
597
{
598
    u8     OpCode;
599
    u8     Reserved1;
600
    u8     VendorSpecific;
601
    u16    Interleave;
602
    u8     Control;
603
} SCSI_FORMAT_UNIT_t;
604
 
605
/*
606
 *    Structure definition for REQUEST SENSE (6-byte CDB)
607
 */
608
typedef struct _SCSI_REQUEST_SENSE
609
{
610
    u8     OpCode;
611
    u8     Reserved1;
612
    u8     Reserved2;
613
    u8     Reserved3;
614
    u8     AllocLength;
615
    u8     Control;
616
} SCSI_REQ_SENSE_t;
617
 
618
/*
619
 *  Structure definition for REPORT LUNS (12-byte CDB)
620
 */
621
typedef struct _SCSI_REPORT_LUNS
622
{
623
    u8     OpCode;
624
    u8     Reserved1[5];
625
    u32    AllocationLength;
626
    u8     Reserved2;
627
    u8     Control;
628
} SCSI_REPORT_LUNS_t, *pSCSI_REPORT_LUNS_t;
629
 
630
    /*
631
     *  (per-level) LUN information bytes
632
     */
633
/*
634
 *  Following doesn't work on ARMCC compiler
635
 *  [apparently] because it pads every struct
636
 *  to be multiple of 4 bytes!
637
 *  So SCSI_LUN_LEVELS_t winds up being 16
638
 *  bytes instead of 8!
639
 *
640
    typedef struct LUN_INFO
641
    {
642
        u8     AddrMethod_plus_LunOrBusNumber;
643
        u8     LunOrTarget;
644
    } SCSI_LUN_INFO_t, *pSCSI_LUN_INFO_t;
645
 
646
    typedef struct LUN_LEVELS
647
    {
648
        SCSI_LUN_INFO_t  LUN_0;
649
        SCSI_LUN_INFO_t  LUN_1;
650
        SCSI_LUN_INFO_t  LUN_2;
651
        SCSI_LUN_INFO_t  LUN_3;
652
    } SCSI_LUN_LEVELS_t, *pSCSI_LUN_LEVELS_t;
653
*/
654
    /*
655
     *  All 4 levels (8 bytes) of LUN information
656
     */
657
    typedef struct LUN_LEVELS
658
    {
659
        u8     LVL1_AddrMethod_plus_LunOrBusNumber;
660
        u8     LVL1_LunOrTarget;
661
        u8     LVL2_AddrMethod_plus_LunOrBusNumber;
662
        u8     LVL2_LunOrTarget;
663
        u8     LVL3_AddrMethod_plus_LunOrBusNumber;
664
        u8     LVL3_LunOrTarget;
665
        u8     LVL4_AddrMethod_plus_LunOrBusNumber;
666
        u8     LVL4_LunOrTarget;
667
    } SCSI_LUN_LEVELS_t, *pSCSI_LUN_LEVELS_t;
668
 
669
    /*
670
     *  Structure definition for data returned by REPORT LUNS cmd;
671
     *  LUN reporting parameter list format
672
     */
673
    typedef struct LUN_REPORT
674
    {
675
        u32                LunListLength;
676
        u32                Reserved;
677
        SCSI_LUN_LEVELS_t  LunInfo[1];
678
    } SCSI_LUN_REPORT_t, *pSCSI_LUN_REPORT_t;
679
 
680
/****************************************************************************
681
 *
682
 *  Externals
683
 */
684
 
685
/****************************************************************************
686
 *
687
 *  Public Typedefs & Related Defines
688
 */
689
 
690
/****************************************************************************
691
 *
692
 *  Macros (embedded, above)
693
 */
694
 
695
/****************************************************************************
696
 *
697
 *  Public Variables
698
 */
699
 
700
/****************************************************************************
701
 *
702
 *  Public Prototypes (module entry points)
703
 */
704
 
705
 
706
/***************************************************************************/
707
#endif

powered by: WebSVN 2.1.0

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