1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* |
3 | * Copyright 2000-2020 Broadcom Inc. All rights reserved. |
4 | * |
5 | * |
6 | * Name: mpi2_sas.h |
7 | * Title: MPI Serial Attached SCSI structures and definitions |
8 | * Creation Date: February 9, 2007 |
9 | * |
10 | * mpi2_sas.h Version: 02.00.10 |
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. |
34 | * 08-19-13 02.00.08 Made MPI2_SAS_OP_TRANSMIT_PORT_SELECT_SIGNAL obsolete |
35 | * for anything newer than MPI v2.0. |
36 | * 11-18-14 02.00.09 Updated copyright information. |
37 | * 03-16-15 02.00.10 Updated for MPI v2.6. |
38 | * Added MPI2_SATA_PT_REQ_PT_FLAGS_FPDMA. |
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) |
190 | #define MPI2_SATA_PT_REQ_PT_FLAGS_FPDMA (0x0040) |
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 |
224 | * (MPI v2.5 and earlier only. |
225 | * Replaced by IO Unit Control messages in MPI v2.6 and later.) |
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) |
263 | #define MPI2_SAS_OP_TRANSMIT_PORT_SELECT_SIGNAL (0x0C) /* MPI v2.0 only */ |
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 |
305 | |