Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
scsi
aic7xxx
aiclib.h
Go to the documentation of this file.
1
/*
2
* Largely written by Julian Elischer (
[email protected]
)
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 (
[email protected]
) Sept 1992
16
*
17
* $FreeBSD: src/sys/cam/scsi/scsi_all.h,v 1.21 2002/10/08 17:12:44 ken Exp $
18
*
19
* Copyright (c) 2003 Adaptec Inc.
20
* All rights reserved.
21
*
22
* Redistribution and use in source and binary forms, with or without
23
* modification, are permitted provided that the following conditions
24
* are met:
25
* 1. Redistributions of source code must retain the above copyright
26
* notice, this list of conditions, and the following disclaimer,
27
* without modification.
28
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
29
* substantially similar to the "NO WARRANTY" disclaimer below
30
* ("Disclaimer") and any redistribution must be conditioned upon
31
* including a substantially similar Disclaimer requirement for further
32
* binary redistribution.
33
* 3. Neither the names of the above-listed copyright holders nor the names
34
* of any contributors may be used to endorse or promote products derived
35
* from this software without specific prior written permission.
36
*
37
* Alternatively, this software may be distributed under the terms of the
38
* GNU General Public License ("GPL") version 2 as published by the Free
39
* Software Foundation.
40
*
41
* NO WARRANTY
42
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
43
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
44
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
45
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
46
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
47
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
48
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
49
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
50
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
51
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
52
* POSSIBILITY OF SUCH DAMAGES.
53
*
54
* $Id$
55
*/
56
57
#ifndef _AICLIB_H
58
#define _AICLIB_H
59
60
struct
scsi_sense
61
{
62
uint8_t
opcode
;
63
uint8_t
byte2
;
64
uint8_t
unused
[2];
65
uint8_t
length
;
66
uint8_t
control
;
67
};
68
69
#define SCSI_REV_0 0
70
#define SCSI_REV_CCS 1
71
#define SCSI_REV_2 2
72
#define SCSI_REV_SPC 3
73
#define SCSI_REV_SPC2 4
74
75
struct
scsi_sense_data
76
{
77
uint8_t
error_code
;
78
#define SSD_ERRCODE 0x7F
79
#define SSD_CURRENT_ERROR 0x70
80
#define SSD_DEFERRED_ERROR 0x71
81
#define SSD_ERRCODE_VALID 0x80
82
uint8_t
segment
;
83
uint8_t
flags
;
84
#define SSD_KEY 0x0F
85
#define SSD_KEY_NO_SENSE 0x00
86
#define SSD_KEY_RECOVERED_ERROR 0x01
87
#define SSD_KEY_NOT_READY 0x02
88
#define SSD_KEY_MEDIUM_ERROR 0x03
89
#define SSD_KEY_HARDWARE_ERROR 0x04
90
#define SSD_KEY_ILLEGAL_REQUEST 0x05
91
#define SSD_KEY_UNIT_ATTENTION 0x06
92
#define SSD_KEY_DATA_PROTECT 0x07
93
#define SSD_KEY_BLANK_CHECK 0x08
94
#define SSD_KEY_Vendor_Specific 0x09
95
#define SSD_KEY_COPY_ABORTED 0x0a
96
#define SSD_KEY_ABORTED_COMMAND 0x0b
97
#define SSD_KEY_EQUAL 0x0c
98
#define SSD_KEY_VOLUME_OVERFLOW 0x0d
99
#define SSD_KEY_MISCOMPARE 0x0e
100
#define SSD_KEY_RESERVED 0x0f
101
#define SSD_ILI 0x20
102
#define SSD_EOM 0x40
103
#define SSD_FILEMARK 0x80
104
uint8_t
info
[4];
105
uint8_t
extra_len
;
106
uint8_t
cmd_spec_info
[4];
107
uint8_t
add_sense_code
;
108
uint8_t
add_sense_code_qual
;
109
uint8_t
fru
;
110
uint8_t
sense_key_spec
[3];
111
#define SSD_SCS_VALID 0x80
112
#define SSD_FIELDPTR_CMD 0x40
113
#define SSD_BITPTR_VALID 0x08
114
#define SSD_BITPTR_VALUE 0x07
115
#define SSD_MIN_SIZE 18
116
uint8_t
extra_bytes
[14];
117
#define SSD_FULL_SIZE sizeof(struct scsi_sense_data)
118
};
119
120
/*
121
* Status Byte
122
*/
123
#define SCSI_STATUS_OK 0x00
124
#define SCSI_STATUS_CHECK_COND 0x02
125
#define SCSI_STATUS_COND_MET 0x04
126
#define SCSI_STATUS_BUSY 0x08
127
#define SCSI_STATUS_INTERMED 0x10
128
#define SCSI_STATUS_INTERMED_COND_MET 0x14
129
#define SCSI_STATUS_RESERV_CONFLICT 0x18
130
#define SCSI_STATUS_CMD_TERMINATED 0x22
/* Obsolete in SAM-2 */
131
#define SCSI_STATUS_QUEUE_FULL 0x28
132
#define SCSI_STATUS_ACA_ACTIVE 0x30
133
#define SCSI_STATUS_TASK_ABORTED 0x40
134
135
/************************* Large Disk Handling ********************************/
136
static
inline
int
137
aic_sector_div(
sector_t
capacity
,
int
heads
,
int
sectors
)
138
{
139
/* ugly, ugly sector_div calling convention.. */
140
sector_div
(capacity, (heads * sectors));
141
return
(
int
)
capacity
;
142
}
143
144
static
inline
uint32_t
145
scsi_4btoul(
uint8_t
*
bytes
)
146
{
147
uint32_t
rv;
148
149
rv = (bytes[0] << 24) |
150
(bytes[1] << 16) |
151
(bytes[2] << 8) |
152
bytes[3];
153
return
(rv);
154
}
155
156
/* Macros for generating the elements of the PCI ID tables. */
157
158
#define GETID(v, s) (unsigned)(((v) >> (s)) & 0xFFFF ?: PCI_ANY_ID)
159
160
#define ID_C(x, c) \
161
{ \
162
GETID(x,32), GETID(x,48), GETID(x,0), GETID(x,16), \
163
(c) << 8, 0xFFFF00, 0 \
164
}
165
166
#define ID2C(x) \
167
ID_C(x, PCI_CLASS_STORAGE_SCSI), \
168
ID_C(x, PCI_CLASS_STORAGE_RAID)
169
170
#define IDIROC(x) ((x) | ~ID_ALL_IROC_MASK)
171
172
/* Generate IDs for all 16 possibilites.
173
* The argument has already masked out
174
* the 4 least significant bits of the device id.
175
* (e.g., mask: ID_9005_GENERIC_MASK).
176
*/
177
#define ID16(x) \
178
ID(x), \
179
ID((x) | 0x0001000000000000ull), \
180
ID((x) | 0x0002000000000000ull), \
181
ID((x) | 0x0003000000000000ull), \
182
ID((x) | 0x0004000000000000ull), \
183
ID((x) | 0x0005000000000000ull), \
184
ID((x) | 0x0006000000000000ull), \
185
ID((x) | 0x0007000000000000ull), \
186
ID((x) | 0x0008000000000000ull), \
187
ID((x) | 0x0009000000000000ull), \
188
ID((x) | 0x000A000000000000ull), \
189
ID((x) | 0x000B000000000000ull), \
190
ID((x) | 0x000C000000000000ull), \
191
ID((x) | 0x000D000000000000ull), \
192
ID((x) | 0x000E000000000000ull), \
193
ID((x) | 0x000F000000000000ull)
194
195
#endif
/*_AICLIB_H */
Generated on Thu Jan 10 2013 14:19:09 for Linux Kernel by
1.8.2