]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
f92363d1 | 2 | /* |
b130b0d5 | 3 | * Copyright 2000-2015 Avago Technologies. All rights reserved. |
f92363d1 SR |
4 | * |
5 | * | |
6 | * Name: mpi2_sas.h | |
7 | * Title: MPI Serial Attached SCSI structures and definitions | |
8 | * Creation Date: February 9, 2007 | |
9 | * | |
b130b0d5 | 10 | * mpi2_sas.h Version: 02.00.10 |
f92363d1 SR |
11 | * |
12 | * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25 | |
13 | * prefix are for use only on MPI v2.5 products, and must not be used | |
14 | * with MPI v2.0 products. Unless otherwise noted, names beginning with | |
15 | * MPI2 or Mpi2 are for use with both MPI v2.0 and MPI v2.5 products. | |
16 | * | |
17 | * Version History | |
18 | * --------------- | |
19 | * | |
20 | * Date Version Description | |
21 | * -------- -------- ------------------------------------------------------ | |
22 | * 04-30-07 02.00.00 Corresponds to Fusion-MPT MPI Specification Rev A. | |
23 | * 06-26-07 02.00.01 Added Clear All Persistent Operation to SAS IO Unit | |
24 | * Control Request. | |
25 | * 10-02-08 02.00.02 Added Set IOC Parameter Operation to SAS IO Unit Control | |
26 | * Request. | |
27 | * 10-28-09 02.00.03 Changed the type of SGL in MPI2_SATA_PASSTHROUGH_REQUEST | |
28 | * to MPI2_SGE_IO_UNION since it supports chained SGLs. | |
29 | * 05-12-10 02.00.04 Modified some comments. | |
30 | * 08-11-10 02.00.05 Added NCQ operations to SAS IO Unit Control. | |
31 | * 11-18-11 02.00.06 Incorporating additions for MPI v2.5. | |
32 | * 07-10-12 02.00.07 Added MPI2_SATA_PT_SGE_UNION for use in the SATA | |
33 | * Passthrough Request message. | |
4c8bab4d SR |
34 | * 08-19-13 02.00.08 Made MPI2_SAS_OP_TRANSMIT_PORT_SELECT_SIGNAL obsolete |
35 | * for anything newer than MPI v2.0. | |
b130b0d5 | 36 | * 11-18-14 02.00.09 Updated copyright information. |
5c739b61 | 37 | * 03-16-15 02.00.10 Updated for MPI v2.6. |
b130b0d5 | 38 | * Added MPI2_SATA_PT_REQ_PT_FLAGS_FPDMA. |
f92363d1 SR |
39 | * -------------------------------------------------------------------------- |
40 | */ | |
41 | ||
42 | #ifndef MPI2_SAS_H | |
43 | #define MPI2_SAS_H | |
44 | ||
45 | /* | |
46 | *Values for SASStatus. | |
47 | */ | |
48 | #define MPI2_SASSTATUS_SUCCESS (0x00) | |
49 | #define MPI2_SASSTATUS_UNKNOWN_ERROR (0x01) | |
50 | #define MPI2_SASSTATUS_INVALID_FRAME (0x02) | |
51 | #define MPI2_SASSTATUS_UTC_BAD_DEST (0x03) | |
52 | #define MPI2_SASSTATUS_UTC_BREAK_RECEIVED (0x04) | |
53 | #define MPI2_SASSTATUS_UTC_CONNECT_RATE_NOT_SUPPORTED (0x05) | |
54 | #define MPI2_SASSTATUS_UTC_PORT_LAYER_REQUEST (0x06) | |
55 | #define MPI2_SASSTATUS_UTC_PROTOCOL_NOT_SUPPORTED (0x07) | |
56 | #define MPI2_SASSTATUS_UTC_STP_RESOURCES_BUSY (0x08) | |
57 | #define MPI2_SASSTATUS_UTC_WRONG_DESTINATION (0x09) | |
58 | #define MPI2_SASSTATUS_SHORT_INFORMATION_UNIT (0x0A) | |
59 | #define MPI2_SASSTATUS_LONG_INFORMATION_UNIT (0x0B) | |
60 | #define MPI2_SASSTATUS_XFER_RDY_INCORRECT_WRITE_DATA (0x0C) | |
61 | #define MPI2_SASSTATUS_XFER_RDY_REQUEST_OFFSET_ERROR (0x0D) | |
62 | #define MPI2_SASSTATUS_XFER_RDY_NOT_EXPECTED (0x0E) | |
63 | #define MPI2_SASSTATUS_DATA_INCORRECT_DATA_LENGTH (0x0F) | |
64 | #define MPI2_SASSTATUS_DATA_TOO_MUCH_READ_DATA (0x10) | |
65 | #define MPI2_SASSTATUS_DATA_OFFSET_ERROR (0x11) | |
66 | #define MPI2_SASSTATUS_SDSF_NAK_RECEIVED (0x12) | |
67 | #define MPI2_SASSTATUS_SDSF_CONNECTION_FAILED (0x13) | |
68 | #define MPI2_SASSTATUS_INITIATOR_RESPONSE_TIMEOUT (0x14) | |
69 | ||
70 | /* | |
71 | *Values for the SAS DeviceInfo field used in SAS Device Status Change Event | |
72 | *data and SAS Configuration pages. | |
73 | */ | |
74 | #define MPI2_SAS_DEVICE_INFO_SEP (0x00004000) | |
75 | #define MPI2_SAS_DEVICE_INFO_ATAPI_DEVICE (0x00002000) | |
76 | #define MPI2_SAS_DEVICE_INFO_LSI_DEVICE (0x00001000) | |
77 | #define MPI2_SAS_DEVICE_INFO_DIRECT_ATTACH (0x00000800) | |
78 | #define MPI2_SAS_DEVICE_INFO_SSP_TARGET (0x00000400) | |
79 | #define MPI2_SAS_DEVICE_INFO_STP_TARGET (0x00000200) | |
80 | #define MPI2_SAS_DEVICE_INFO_SMP_TARGET (0x00000100) | |
81 | #define MPI2_SAS_DEVICE_INFO_SATA_DEVICE (0x00000080) | |
82 | #define MPI2_SAS_DEVICE_INFO_SSP_INITIATOR (0x00000040) | |
83 | #define MPI2_SAS_DEVICE_INFO_STP_INITIATOR (0x00000020) | |
84 | #define MPI2_SAS_DEVICE_INFO_SMP_INITIATOR (0x00000010) | |
85 | #define MPI2_SAS_DEVICE_INFO_SATA_HOST (0x00000008) | |
86 | ||
87 | #define MPI2_SAS_DEVICE_INFO_MASK_DEVICE_TYPE (0x00000007) | |
88 | #define MPI2_SAS_DEVICE_INFO_NO_DEVICE (0x00000000) | |
89 | #define MPI2_SAS_DEVICE_INFO_END_DEVICE (0x00000001) | |
90 | #define MPI2_SAS_DEVICE_INFO_EDGE_EXPANDER (0x00000002) | |
91 | #define MPI2_SAS_DEVICE_INFO_FANOUT_EXPANDER (0x00000003) | |
92 | ||
93 | /***************************************************************************** | |
94 | * | |
95 | * SAS Messages | |
96 | * | |
97 | *****************************************************************************/ | |
98 | ||
99 | /**************************************************************************** | |
100 | * SMP Passthrough messages | |
101 | ****************************************************************************/ | |
102 | ||
103 | /*SMP Passthrough Request Message */ | |
104 | typedef struct _MPI2_SMP_PASSTHROUGH_REQUEST { | |
105 | U8 PassthroughFlags; /*0x00 */ | |
106 | U8 PhysicalPort; /*0x01 */ | |
107 | U8 ChainOffset; /*0x02 */ | |
108 | U8 Function; /*0x03 */ | |
109 | U16 RequestDataLength; /*0x04 */ | |
110 | U8 SGLFlags; /*0x06*//*MPI v2.0 only. Reserved on MPI v2.5*/ | |
111 | U8 MsgFlags; /*0x07 */ | |
112 | U8 VP_ID; /*0x08 */ | |
113 | U8 VF_ID; /*0x09 */ | |
114 | U16 Reserved1; /*0x0A */ | |
115 | U32 Reserved2; /*0x0C */ | |
116 | U64 SASAddress; /*0x10 */ | |
117 | U32 Reserved3; /*0x18 */ | |
118 | U32 Reserved4; /*0x1C */ | |
119 | MPI2_SIMPLE_SGE_UNION SGL;/*0x20 */ | |
120 | } MPI2_SMP_PASSTHROUGH_REQUEST, *PTR_MPI2_SMP_PASSTHROUGH_REQUEST, | |
121 | Mpi2SmpPassthroughRequest_t, *pMpi2SmpPassthroughRequest_t; | |
122 | ||
123 | /*values for PassthroughFlags field */ | |
124 | #define MPI2_SMP_PT_REQ_PT_FLAGS_IMMEDIATE (0x80) | |
125 | ||
126 | /*MPI v2.0: use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */ | |
127 | ||
128 | /*SMP Passthrough Reply Message */ | |
129 | typedef struct _MPI2_SMP_PASSTHROUGH_REPLY { | |
130 | U8 PassthroughFlags; /*0x00 */ | |
131 | U8 PhysicalPort; /*0x01 */ | |
132 | U8 MsgLength; /*0x02 */ | |
133 | U8 Function; /*0x03 */ | |
134 | U16 ResponseDataLength; /*0x04 */ | |
135 | U8 SGLFlags; /*0x06 */ | |
136 | U8 MsgFlags; /*0x07 */ | |
137 | U8 VP_ID; /*0x08 */ | |
138 | U8 VF_ID; /*0x09 */ | |
139 | U16 Reserved1; /*0x0A */ | |
140 | U8 Reserved2; /*0x0C */ | |
141 | U8 SASStatus; /*0x0D */ | |
142 | U16 IOCStatus; /*0x0E */ | |
143 | U32 IOCLogInfo; /*0x10 */ | |
144 | U32 Reserved3; /*0x14 */ | |
145 | U8 ResponseData[4]; /*0x18 */ | |
146 | } MPI2_SMP_PASSTHROUGH_REPLY, *PTR_MPI2_SMP_PASSTHROUGH_REPLY, | |
147 | Mpi2SmpPassthroughReply_t, *pMpi2SmpPassthroughReply_t; | |
148 | ||
149 | /*values for PassthroughFlags field */ | |
150 | #define MPI2_SMP_PT_REPLY_PT_FLAGS_IMMEDIATE (0x80) | |
151 | ||
152 | /*values for SASStatus field are at the top of this file */ | |
153 | ||
154 | /**************************************************************************** | |
155 | * SATA Passthrough messages | |
156 | ****************************************************************************/ | |
157 | ||
158 | typedef union _MPI2_SATA_PT_SGE_UNION { | |
159 | MPI2_SGE_SIMPLE_UNION MpiSimple; /*MPI v2.0 only */ | |
160 | MPI2_SGE_CHAIN_UNION MpiChain; /*MPI v2.0 only */ | |
161 | MPI2_IEEE_SGE_SIMPLE_UNION IeeeSimple; | |
162 | MPI2_IEEE_SGE_CHAIN_UNION IeeeChain; /*MPI v2.0 only */ | |
163 | MPI25_IEEE_SGE_CHAIN64 IeeeChain64; /*MPI v2.5 only */ | |
164 | } MPI2_SATA_PT_SGE_UNION, *PTR_MPI2_SATA_PT_SGE_UNION, | |
165 | Mpi2SataPTSGEUnion_t, *pMpi2SataPTSGEUnion_t; | |
166 | ||
167 | /*SATA Passthrough Request Message */ | |
168 | typedef struct _MPI2_SATA_PASSTHROUGH_REQUEST { | |
169 | U16 DevHandle; /*0x00 */ | |
170 | U8 ChainOffset; /*0x02 */ | |
171 | U8 Function; /*0x03 */ | |
172 | U16 PassthroughFlags; /*0x04 */ | |
173 | U8 SGLFlags; /*0x06*//*MPI v2.0 only. Reserved on MPI v2.5*/ | |
174 | U8 MsgFlags; /*0x07 */ | |
175 | U8 VP_ID; /*0x08 */ | |
176 | U8 VF_ID; /*0x09 */ | |
177 | U16 Reserved1; /*0x0A */ | |
178 | U32 Reserved2; /*0x0C */ | |
179 | U32 Reserved3; /*0x10 */ | |
180 | U32 Reserved4; /*0x14 */ | |
181 | U32 DataLength; /*0x18 */ | |
182 | U8 CommandFIS[20]; /*0x1C */ | |
183 | MPI2_SATA_PT_SGE_UNION SGL;/*0x30*//*MPI v2.5: IEEE 64 elements only*/ | |
184 | } MPI2_SATA_PASSTHROUGH_REQUEST, *PTR_MPI2_SATA_PASSTHROUGH_REQUEST, | |
185 | Mpi2SataPassthroughRequest_t, | |
186 | *pMpi2SataPassthroughRequest_t; | |
187 | ||
188 | /*values for PassthroughFlags field */ | |
189 | #define MPI2_SATA_PT_REQ_PT_FLAGS_EXECUTE_DIAG (0x0100) | |
b130b0d5 | 190 | #define MPI2_SATA_PT_REQ_PT_FLAGS_FPDMA (0x0040) |
f92363d1 SR |
191 | #define MPI2_SATA_PT_REQ_PT_FLAGS_DMA (0x0020) |
192 | #define MPI2_SATA_PT_REQ_PT_FLAGS_PIO (0x0010) | |
193 | #define MPI2_SATA_PT_REQ_PT_FLAGS_UNSPECIFIED_VU (0x0004) | |
194 | #define MPI2_SATA_PT_REQ_PT_FLAGS_WRITE (0x0002) | |
195 | #define MPI2_SATA_PT_REQ_PT_FLAGS_READ (0x0001) | |
196 | ||
197 | /*MPI v2.0: use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */ | |
198 | ||
199 | /*SATA Passthrough Reply Message */ | |
200 | typedef struct _MPI2_SATA_PASSTHROUGH_REPLY { | |
201 | U16 DevHandle; /*0x00 */ | |
202 | U8 MsgLength; /*0x02 */ | |
203 | U8 Function; /*0x03 */ | |
204 | U16 PassthroughFlags; /*0x04 */ | |
205 | U8 SGLFlags; /*0x06 */ | |
206 | U8 MsgFlags; /*0x07 */ | |
207 | U8 VP_ID; /*0x08 */ | |
208 | U8 VF_ID; /*0x09 */ | |
209 | U16 Reserved1; /*0x0A */ | |
210 | U8 Reserved2; /*0x0C */ | |
211 | U8 SASStatus; /*0x0D */ | |
212 | U16 IOCStatus; /*0x0E */ | |
213 | U32 IOCLogInfo; /*0x10 */ | |
214 | U8 StatusFIS[20]; /*0x14 */ | |
215 | U32 StatusControlRegisters; /*0x28 */ | |
216 | U32 TransferCount; /*0x2C */ | |
217 | } MPI2_SATA_PASSTHROUGH_REPLY, *PTR_MPI2_SATA_PASSTHROUGH_REPLY, | |
218 | Mpi2SataPassthroughReply_t, *pMpi2SataPassthroughReply_t; | |
219 | ||
220 | /*values for SASStatus field are at the top of this file */ | |
221 | ||
222 | /**************************************************************************** | |
223 | * SAS IO Unit Control messages | |
b130b0d5 SS |
224 | * (MPI v2.5 and earlier only. |
225 | * Replaced by IO Unit Control messages in MPI v2.6 and later.) | |
f92363d1 SR |
226 | ****************************************************************************/ |
227 | ||
228 | /*SAS IO Unit Control Request Message */ | |
229 | typedef struct _MPI2_SAS_IOUNIT_CONTROL_REQUEST { | |
230 | U8 Operation; /*0x00 */ | |
231 | U8 Reserved1; /*0x01 */ | |
232 | U8 ChainOffset; /*0x02 */ | |
233 | U8 Function; /*0x03 */ | |
234 | U16 DevHandle; /*0x04 */ | |
235 | U8 IOCParameter; /*0x06 */ | |
236 | U8 MsgFlags; /*0x07 */ | |
237 | U8 VP_ID; /*0x08 */ | |
238 | U8 VF_ID; /*0x09 */ | |
239 | U16 Reserved3; /*0x0A */ | |
240 | U16 Reserved4; /*0x0C */ | |
241 | U8 PhyNum; /*0x0E */ | |
242 | U8 PrimFlags; /*0x0F */ | |
243 | U32 Primitive; /*0x10 */ | |
244 | U8 LookupMethod; /*0x14 */ | |
245 | U8 Reserved5; /*0x15 */ | |
246 | U16 SlotNumber; /*0x16 */ | |
247 | U64 LookupAddress; /*0x18 */ | |
248 | U32 IOCParameterValue; /*0x20 */ | |
249 | U32 Reserved7; /*0x24 */ | |
250 | U32 Reserved8; /*0x28 */ | |
251 | } MPI2_SAS_IOUNIT_CONTROL_REQUEST, | |
252 | *PTR_MPI2_SAS_IOUNIT_CONTROL_REQUEST, | |
253 | Mpi2SasIoUnitControlRequest_t, | |
254 | *pMpi2SasIoUnitControlRequest_t; | |
255 | ||
256 | /*values for the Operation field */ | |
257 | #define MPI2_SAS_OP_CLEAR_ALL_PERSISTENT (0x02) | |
258 | #define MPI2_SAS_OP_PHY_LINK_RESET (0x06) | |
259 | #define MPI2_SAS_OP_PHY_HARD_RESET (0x07) | |
260 | #define MPI2_SAS_OP_PHY_CLEAR_ERROR_LOG (0x08) | |
261 | #define MPI2_SAS_OP_SEND_PRIMITIVE (0x0A) | |
262 | #define MPI2_SAS_OP_FORCE_FULL_DISCOVERY (0x0B) | |
4c8bab4d | 263 | #define MPI2_SAS_OP_TRANSMIT_PORT_SELECT_SIGNAL (0x0C) /* MPI v2.0 only */ |
f92363d1 SR |
264 | #define MPI2_SAS_OP_REMOVE_DEVICE (0x0D) |
265 | #define MPI2_SAS_OP_LOOKUP_MAPPING (0x0E) | |
266 | #define MPI2_SAS_OP_SET_IOC_PARAMETER (0x0F) | |
267 | #define MPI25_SAS_OP_ENABLE_FP_DEVICE (0x10) | |
268 | #define MPI25_SAS_OP_DISABLE_FP_DEVICE (0x11) | |
269 | #define MPI25_SAS_OP_ENABLE_FP_ALL (0x12) | |
270 | #define MPI25_SAS_OP_DISABLE_FP_ALL (0x13) | |
271 | #define MPI2_SAS_OP_DEV_ENABLE_NCQ (0x14) | |
272 | #define MPI2_SAS_OP_DEV_DISABLE_NCQ (0x15) | |
273 | #define MPI2_SAS_OP_PRODUCT_SPECIFIC_MIN (0x80) | |
274 | ||
275 | /*values for the PrimFlags field */ | |
276 | #define MPI2_SAS_PRIMFLAGS_SINGLE (0x08) | |
277 | #define MPI2_SAS_PRIMFLAGS_TRIPLE (0x02) | |
278 | #define MPI2_SAS_PRIMFLAGS_REDUNDANT (0x01) | |
279 | ||
280 | /*values for the LookupMethod field */ | |
281 | #define MPI2_SAS_LOOKUP_METHOD_SAS_ADDRESS (0x01) | |
282 | #define MPI2_SAS_LOOKUP_METHOD_SAS_ENCLOSURE_SLOT (0x02) | |
283 | #define MPI2_SAS_LOOKUP_METHOD_SAS_DEVICE_NAME (0x03) | |
284 | ||
285 | /*SAS IO Unit Control Reply Message */ | |
286 | typedef struct _MPI2_SAS_IOUNIT_CONTROL_REPLY { | |
287 | U8 Operation; /*0x00 */ | |
288 | U8 Reserved1; /*0x01 */ | |
289 | U8 MsgLength; /*0x02 */ | |
290 | U8 Function; /*0x03 */ | |
291 | U16 DevHandle; /*0x04 */ | |
292 | U8 IOCParameter; /*0x06 */ | |
293 | U8 MsgFlags; /*0x07 */ | |
294 | U8 VP_ID; /*0x08 */ | |
295 | U8 VF_ID; /*0x09 */ | |
296 | U16 Reserved3; /*0x0A */ | |
297 | U16 Reserved4; /*0x0C */ | |
298 | U16 IOCStatus; /*0x0E */ | |
299 | U32 IOCLogInfo; /*0x10 */ | |
300 | } MPI2_SAS_IOUNIT_CONTROL_REPLY, | |
301 | *PTR_MPI2_SAS_IOUNIT_CONTROL_REPLY, | |
302 | Mpi2SasIoUnitControlReply_t, *pMpi2SasIoUnitControlReply_t; | |
303 | ||
304 | #endif |