xref: /freebsd-src/sys/dev/mps/mpi/mpi2_sas.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1d043c564SKenneth D. Merry /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
3718cf2ccSPedro F. Giffuni  *
4ef065d89SStephen McConnell  * Copyright (c) 2007-2015 LSI Corp.
5ef065d89SStephen McConnell  * Copyright (c) 2013-2015 Avago Technologies
6d043c564SKenneth D. Merry  * All rights reserved.
7d043c564SKenneth D. Merry  *
8d043c564SKenneth D. Merry  * Redistribution and use in source and binary forms, with or without
9d043c564SKenneth D. Merry  * modification, are permitted provided that the following conditions
10d043c564SKenneth D. Merry  * are met:
11d043c564SKenneth D. Merry  * 1. Redistributions of source code must retain the above copyright
12d043c564SKenneth D. Merry  *    notice, this list of conditions and the following disclaimer.
13d043c564SKenneth D. Merry  * 2. Redistributions in binary form must reproduce the above copyright
14d043c564SKenneth D. Merry  *    notice, this list of conditions and the following disclaimer in the
15d043c564SKenneth D. Merry  *    documentation and/or other materials provided with the distribution.
16d043c564SKenneth D. Merry  *
17d043c564SKenneth D. Merry  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18d043c564SKenneth D. Merry  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19d043c564SKenneth D. Merry  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20d043c564SKenneth D. Merry  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21d043c564SKenneth D. Merry  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22d043c564SKenneth D. Merry  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23d043c564SKenneth D. Merry  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24d043c564SKenneth D. Merry  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25d043c564SKenneth D. Merry  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26d043c564SKenneth D. Merry  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27d043c564SKenneth D. Merry  * SUCH DAMAGE.
28d043c564SKenneth D. Merry  *
29ef065d89SStephen McConnell  * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
30d043c564SKenneth D. Merry  */
31d043c564SKenneth D. Merry 
32d3c7b9a0SKenneth D. Merry /*
33ef065d89SStephen McConnell  *  Copyright (c) 2007-2015 LSI Corporation.
34ef065d89SStephen McConnell  *  Copyright (c) 2013-2015 Avago Technologies
35d3c7b9a0SKenneth D. Merry  *
36d3c7b9a0SKenneth D. Merry  *
37d3c7b9a0SKenneth D. Merry  *           Name:  mpi2_sas.h
38d3c7b9a0SKenneth D. Merry  *          Title:  MPI Serial Attached SCSI structures and definitions
39d3c7b9a0SKenneth D. Merry  *  Creation Date:  February 9, 2007
40d3c7b9a0SKenneth D. Merry  *
41d043c564SKenneth D. Merry  *  mpi2_sas.h Version:  02.00.05
42d3c7b9a0SKenneth D. Merry  *
43d3c7b9a0SKenneth D. Merry  *  Version History
44d3c7b9a0SKenneth D. Merry  *  ---------------
45d3c7b9a0SKenneth D. Merry  *
46d3c7b9a0SKenneth D. Merry  *  Date      Version   Description
47d3c7b9a0SKenneth D. Merry  *  --------  --------  ------------------------------------------------------
48d3c7b9a0SKenneth D. Merry  *  04-30-07  02.00.00  Corresponds to Fusion-MPT MPI Specification Rev A.
49d3c7b9a0SKenneth D. Merry  *  06-26-07  02.00.01  Added Clear All Persistent Operation to SAS IO Unit
50d3c7b9a0SKenneth D. Merry  *                      Control Request.
51d3c7b9a0SKenneth D. Merry  *  10-02-08  02.00.02  Added Set IOC Parameter Operation to SAS IO Unit Control
52d3c7b9a0SKenneth D. Merry  *                      Request.
53d3c7b9a0SKenneth D. Merry  *  10-28-09  02.00.03  Changed the type of SGL in MPI2_SATA_PASSTHROUGH_REQUEST
54d3c7b9a0SKenneth D. Merry  *                      to MPI2_SGE_IO_UNION since it supports chained SGLs.
55d043c564SKenneth D. Merry  *  05-12-10  02.00.04  Modified some comments.
56d043c564SKenneth D. Merry  *  08-11-10  02.00.05  Added NCQ operations to SAS IO Unit Control.
57d3c7b9a0SKenneth D. Merry  *  --------------------------------------------------------------------------
58d3c7b9a0SKenneth D. Merry  */
59d3c7b9a0SKenneth D. Merry 
60d3c7b9a0SKenneth D. Merry #ifndef MPI2_SAS_H
61d3c7b9a0SKenneth D. Merry #define MPI2_SAS_H
62d3c7b9a0SKenneth D. Merry 
63d3c7b9a0SKenneth D. Merry /*
64d3c7b9a0SKenneth D. Merry  * Values for SASStatus.
65d3c7b9a0SKenneth D. Merry  */
66d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_SUCCESS                          (0x00)
67d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_UNKNOWN_ERROR                    (0x01)
68d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_INVALID_FRAME                    (0x02)
69d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_UTC_BAD_DEST                     (0x03)
70d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_UTC_BREAK_RECEIVED               (0x04)
71d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_UTC_CONNECT_RATE_NOT_SUPPORTED   (0x05)
72d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_UTC_PORT_LAYER_REQUEST           (0x06)
73d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_UTC_PROTOCOL_NOT_SUPPORTED       (0x07)
74d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_UTC_STP_RESOURCES_BUSY           (0x08)
75d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_UTC_WRONG_DESTINATION            (0x09)
76d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_SHORT_INFORMATION_UNIT           (0x0A)
77d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_LONG_INFORMATION_UNIT            (0x0B)
78d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_XFER_RDY_INCORRECT_WRITE_DATA    (0x0C)
79d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_XFER_RDY_REQUEST_OFFSET_ERROR    (0x0D)
80d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_XFER_RDY_NOT_EXPECTED            (0x0E)
81d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_DATA_INCORRECT_DATA_LENGTH       (0x0F)
82d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_DATA_TOO_MUCH_READ_DATA          (0x10)
83d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_DATA_OFFSET_ERROR                (0x11)
84d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_SDSF_NAK_RECEIVED                (0x12)
85d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_SDSF_CONNECTION_FAILED           (0x13)
86d3c7b9a0SKenneth D. Merry #define MPI2_SASSTATUS_INITIATOR_RESPONSE_TIMEOUT       (0x14)
87d3c7b9a0SKenneth D. Merry 
88d3c7b9a0SKenneth D. Merry /*
89d3c7b9a0SKenneth D. Merry  * Values for the SAS DeviceInfo field used in SAS Device Status Change Event
90d3c7b9a0SKenneth D. Merry  * data and SAS Configuration pages.
91d3c7b9a0SKenneth D. Merry  */
92d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_INFO_SEP                (0x00004000)
93d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_INFO_ATAPI_DEVICE       (0x00002000)
94d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_INFO_LSI_DEVICE         (0x00001000)
95d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_INFO_DIRECT_ATTACH      (0x00000800)
96d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_INFO_SSP_TARGET         (0x00000400)
97d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_INFO_STP_TARGET         (0x00000200)
98d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_INFO_SMP_TARGET         (0x00000100)
99d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_INFO_SATA_DEVICE        (0x00000080)
100d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_INFO_SSP_INITIATOR      (0x00000040)
101d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_INFO_STP_INITIATOR      (0x00000020)
102d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_INFO_SMP_INITIATOR      (0x00000010)
103d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_INFO_SATA_HOST          (0x00000008)
104d3c7b9a0SKenneth D. Merry 
105d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_INFO_MASK_DEVICE_TYPE   (0x00000007)
106d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_INFO_NO_DEVICE          (0x00000000)
107d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_INFO_END_DEVICE         (0x00000001)
108d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_INFO_EDGE_EXPANDER      (0x00000002)
109d3c7b9a0SKenneth D. Merry #define MPI2_SAS_DEVICE_INFO_FANOUT_EXPANDER    (0x00000003)
110d3c7b9a0SKenneth D. Merry 
111d3c7b9a0SKenneth D. Merry /*****************************************************************************
112d3c7b9a0SKenneth D. Merry *
113d3c7b9a0SKenneth D. Merry *        SAS Messages
114d3c7b9a0SKenneth D. Merry *
115d3c7b9a0SKenneth D. Merry *****************************************************************************/
116d3c7b9a0SKenneth D. Merry 
117d3c7b9a0SKenneth D. Merry /****************************************************************************
118d3c7b9a0SKenneth D. Merry *  SMP Passthrough messages
119d3c7b9a0SKenneth D. Merry ****************************************************************************/
120d3c7b9a0SKenneth D. Merry 
121d3c7b9a0SKenneth D. Merry /* SMP Passthrough Request Message */
122d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SMP_PASSTHROUGH_REQUEST
123d3c7b9a0SKenneth D. Merry {
124d3c7b9a0SKenneth D. Merry     U8                      PassthroughFlags;   /* 0x00 */
125d3c7b9a0SKenneth D. Merry     U8                      PhysicalPort;       /* 0x01 */
126d3c7b9a0SKenneth D. Merry     U8                      ChainOffset;        /* 0x02 */
127d3c7b9a0SKenneth D. Merry     U8                      Function;           /* 0x03 */
128d3c7b9a0SKenneth D. Merry     U16                     RequestDataLength;  /* 0x04 */
129d3c7b9a0SKenneth D. Merry     U8                      SGLFlags;           /* 0x06 */
130d3c7b9a0SKenneth D. Merry     U8                      MsgFlags;           /* 0x07 */
131d3c7b9a0SKenneth D. Merry     U8                      VP_ID;              /* 0x08 */
132d3c7b9a0SKenneth D. Merry     U8                      VF_ID;              /* 0x09 */
133d3c7b9a0SKenneth D. Merry     U16                     Reserved1;          /* 0x0A */
134d3c7b9a0SKenneth D. Merry     U32                     Reserved2;          /* 0x0C */
135d3c7b9a0SKenneth D. Merry     U64                     SASAddress;         /* 0x10 */
136d3c7b9a0SKenneth D. Merry     U32                     Reserved3;          /* 0x18 */
137d3c7b9a0SKenneth D. Merry     U32                     Reserved4;          /* 0x1C */
138d3c7b9a0SKenneth D. Merry     MPI2_SIMPLE_SGE_UNION   SGL;                /* 0x20 */
139d3c7b9a0SKenneth D. Merry } MPI2_SMP_PASSTHROUGH_REQUEST, MPI2_POINTER PTR_MPI2_SMP_PASSTHROUGH_REQUEST,
140d3c7b9a0SKenneth D. Merry   Mpi2SmpPassthroughRequest_t, MPI2_POINTER pMpi2SmpPassthroughRequest_t;
141d3c7b9a0SKenneth D. Merry 
142d3c7b9a0SKenneth D. Merry /* values for PassthroughFlags field */
143d3c7b9a0SKenneth D. Merry #define MPI2_SMP_PT_REQ_PT_FLAGS_IMMEDIATE      (0x80)
144d3c7b9a0SKenneth D. Merry 
145d043c564SKenneth D. Merry /* use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */
146d3c7b9a0SKenneth D. Merry 
147d3c7b9a0SKenneth D. Merry /* SMP Passthrough Reply Message */
148d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SMP_PASSTHROUGH_REPLY
149d3c7b9a0SKenneth D. Merry {
150d3c7b9a0SKenneth D. Merry     U8                      PassthroughFlags;   /* 0x00 */
151d3c7b9a0SKenneth D. Merry     U8                      PhysicalPort;       /* 0x01 */
152d3c7b9a0SKenneth D. Merry     U8                      MsgLength;          /* 0x02 */
153d3c7b9a0SKenneth D. Merry     U8                      Function;           /* 0x03 */
154d3c7b9a0SKenneth D. Merry     U16                     ResponseDataLength; /* 0x04 */
155d3c7b9a0SKenneth D. Merry     U8                      SGLFlags;           /* 0x06 */
156d3c7b9a0SKenneth D. Merry     U8                      MsgFlags;           /* 0x07 */
157d3c7b9a0SKenneth D. Merry     U8                      VP_ID;              /* 0x08 */
158d3c7b9a0SKenneth D. Merry     U8                      VF_ID;              /* 0x09 */
159d3c7b9a0SKenneth D. Merry     U16                     Reserved1;          /* 0x0A */
160d3c7b9a0SKenneth D. Merry     U8                      Reserved2;          /* 0x0C */
161d3c7b9a0SKenneth D. Merry     U8                      SASStatus;          /* 0x0D */
162d3c7b9a0SKenneth D. Merry     U16                     IOCStatus;          /* 0x0E */
163d3c7b9a0SKenneth D. Merry     U32                     IOCLogInfo;         /* 0x10 */
164d3c7b9a0SKenneth D. Merry     U32                     Reserved3;          /* 0x14 */
165d3c7b9a0SKenneth D. Merry     U8                      ResponseData[4];    /* 0x18 */
166d3c7b9a0SKenneth D. Merry } MPI2_SMP_PASSTHROUGH_REPLY, MPI2_POINTER PTR_MPI2_SMP_PASSTHROUGH_REPLY,
167d3c7b9a0SKenneth D. Merry   Mpi2SmpPassthroughReply_t, MPI2_POINTER pMpi2SmpPassthroughReply_t;
168d3c7b9a0SKenneth D. Merry 
169d3c7b9a0SKenneth D. Merry /* values for PassthroughFlags field */
170d3c7b9a0SKenneth D. Merry #define MPI2_SMP_PT_REPLY_PT_FLAGS_IMMEDIATE    (0x80)
171d3c7b9a0SKenneth D. Merry 
172d3c7b9a0SKenneth D. Merry /* values for SASStatus field are at the top of this file */
173d3c7b9a0SKenneth D. Merry 
174d3c7b9a0SKenneth D. Merry /****************************************************************************
175d3c7b9a0SKenneth D. Merry *  SATA Passthrough messages
176d3c7b9a0SKenneth D. Merry ****************************************************************************/
177d3c7b9a0SKenneth D. Merry 
178d3c7b9a0SKenneth D. Merry /* SATA Passthrough Request Message */
179d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SATA_PASSTHROUGH_REQUEST
180d3c7b9a0SKenneth D. Merry {
181d3c7b9a0SKenneth D. Merry     U16                     DevHandle;          /* 0x00 */
182d3c7b9a0SKenneth D. Merry     U8                      ChainOffset;        /* 0x02 */
183d3c7b9a0SKenneth D. Merry     U8                      Function;           /* 0x03 */
184d3c7b9a0SKenneth D. Merry     U16                     PassthroughFlags;   /* 0x04 */
185d3c7b9a0SKenneth D. Merry     U8                      SGLFlags;           /* 0x06 */
186d3c7b9a0SKenneth D. Merry     U8                      MsgFlags;           /* 0x07 */
187d3c7b9a0SKenneth D. Merry     U8                      VP_ID;              /* 0x08 */
188d3c7b9a0SKenneth D. Merry     U8                      VF_ID;              /* 0x09 */
189d3c7b9a0SKenneth D. Merry     U16                     Reserved1;          /* 0x0A */
190d3c7b9a0SKenneth D. Merry     U32                     Reserved2;          /* 0x0C */
191d3c7b9a0SKenneth D. Merry     U32                     Reserved3;          /* 0x10 */
192d3c7b9a0SKenneth D. Merry     U32                     Reserved4;          /* 0x14 */
193d3c7b9a0SKenneth D. Merry     U32                     DataLength;         /* 0x18 */
194d3c7b9a0SKenneth D. Merry     U8                      CommandFIS[20];     /* 0x1C */
195d043c564SKenneth D. Merry     MPI2_SGE_IO_UNION       SGL;                /* 0x30 */
196d3c7b9a0SKenneth D. Merry } MPI2_SATA_PASSTHROUGH_REQUEST, MPI2_POINTER PTR_MPI2_SATA_PASSTHROUGH_REQUEST,
197d3c7b9a0SKenneth D. Merry   Mpi2SataPassthroughRequest_t, MPI2_POINTER pMpi2SataPassthroughRequest_t;
198d3c7b9a0SKenneth D. Merry 
199d3c7b9a0SKenneth D. Merry /* values for PassthroughFlags field */
200d3c7b9a0SKenneth D. Merry #define MPI2_SATA_PT_REQ_PT_FLAGS_EXECUTE_DIAG      (0x0100)
201d3c7b9a0SKenneth D. Merry #define MPI2_SATA_PT_REQ_PT_FLAGS_DMA               (0x0020)
202d3c7b9a0SKenneth D. Merry #define MPI2_SATA_PT_REQ_PT_FLAGS_PIO               (0x0010)
203d3c7b9a0SKenneth D. Merry #define MPI2_SATA_PT_REQ_PT_FLAGS_UNSPECIFIED_VU    (0x0004)
204d3c7b9a0SKenneth D. Merry #define MPI2_SATA_PT_REQ_PT_FLAGS_WRITE             (0x0002)
205d3c7b9a0SKenneth D. Merry #define MPI2_SATA_PT_REQ_PT_FLAGS_READ              (0x0001)
206d3c7b9a0SKenneth D. Merry 
207d043c564SKenneth D. Merry /* use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */
208d3c7b9a0SKenneth D. Merry 
209d3c7b9a0SKenneth D. Merry /* SATA Passthrough Reply Message */
210d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SATA_PASSTHROUGH_REPLY
211d3c7b9a0SKenneth D. Merry {
212d3c7b9a0SKenneth D. Merry     U16                     DevHandle;          /* 0x00 */
213d3c7b9a0SKenneth D. Merry     U8                      MsgLength;          /* 0x02 */
214d3c7b9a0SKenneth D. Merry     U8                      Function;           /* 0x03 */
215d3c7b9a0SKenneth D. Merry     U16                     PassthroughFlags;   /* 0x04 */
216d3c7b9a0SKenneth D. Merry     U8                      SGLFlags;           /* 0x06 */
217d3c7b9a0SKenneth D. Merry     U8                      MsgFlags;           /* 0x07 */
218d3c7b9a0SKenneth D. Merry     U8                      VP_ID;              /* 0x08 */
219d3c7b9a0SKenneth D. Merry     U8                      VF_ID;              /* 0x09 */
220d3c7b9a0SKenneth D. Merry     U16                     Reserved1;          /* 0x0A */
221d3c7b9a0SKenneth D. Merry     U8                      Reserved2;          /* 0x0C */
222d3c7b9a0SKenneth D. Merry     U8                      SASStatus;          /* 0x0D */
223d3c7b9a0SKenneth D. Merry     U16                     IOCStatus;          /* 0x0E */
224d3c7b9a0SKenneth D. Merry     U32                     IOCLogInfo;         /* 0x10 */
225d3c7b9a0SKenneth D. Merry     U8                      StatusFIS[20];      /* 0x14 */
226d3c7b9a0SKenneth D. Merry     U32                     StatusControlRegisters; /* 0x28 */
227d3c7b9a0SKenneth D. Merry     U32                     TransferCount;      /* 0x2C */
228d3c7b9a0SKenneth D. Merry } MPI2_SATA_PASSTHROUGH_REPLY, MPI2_POINTER PTR_MPI2_SATA_PASSTHROUGH_REPLY,
229d3c7b9a0SKenneth D. Merry   Mpi2SataPassthroughReply_t, MPI2_POINTER pMpi2SataPassthroughReply_t;
230d3c7b9a0SKenneth D. Merry 
231d3c7b9a0SKenneth D. Merry /* values for SASStatus field are at the top of this file */
232d3c7b9a0SKenneth D. Merry 
233d3c7b9a0SKenneth D. Merry /****************************************************************************
234d3c7b9a0SKenneth D. Merry *  SAS IO Unit Control messages
235d3c7b9a0SKenneth D. Merry ****************************************************************************/
236d3c7b9a0SKenneth D. Merry 
237d3c7b9a0SKenneth D. Merry /* SAS IO Unit Control Request Message */
238d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SAS_IOUNIT_CONTROL_REQUEST
239d3c7b9a0SKenneth D. Merry {
240d3c7b9a0SKenneth D. Merry     U8                      Operation;          /* 0x00 */
241d3c7b9a0SKenneth D. Merry     U8                      Reserved1;          /* 0x01 */
242d3c7b9a0SKenneth D. Merry     U8                      ChainOffset;        /* 0x02 */
243d3c7b9a0SKenneth D. Merry     U8                      Function;           /* 0x03 */
244d3c7b9a0SKenneth D. Merry     U16                     DevHandle;          /* 0x04 */
245d3c7b9a0SKenneth D. Merry     U8                      IOCParameter;       /* 0x06 */
246d3c7b9a0SKenneth D. Merry     U8                      MsgFlags;           /* 0x07 */
247d3c7b9a0SKenneth D. Merry     U8                      VP_ID;              /* 0x08 */
248d3c7b9a0SKenneth D. Merry     U8                      VF_ID;              /* 0x09 */
249d3c7b9a0SKenneth D. Merry     U16                     Reserved3;          /* 0x0A */
250d3c7b9a0SKenneth D. Merry     U16                     Reserved4;          /* 0x0C */
251d3c7b9a0SKenneth D. Merry     U8                      PhyNum;             /* 0x0E */
252d3c7b9a0SKenneth D. Merry     U8                      PrimFlags;          /* 0x0F */
253d3c7b9a0SKenneth D. Merry     U32                     Primitive;          /* 0x10 */
254d3c7b9a0SKenneth D. Merry     U8                      LookupMethod;       /* 0x14 */
255d3c7b9a0SKenneth D. Merry     U8                      Reserved5;          /* 0x15 */
256d3c7b9a0SKenneth D. Merry     U16                     SlotNumber;         /* 0x16 */
257d3c7b9a0SKenneth D. Merry     U64                     LookupAddress;      /* 0x18 */
258d3c7b9a0SKenneth D. Merry     U32                     IOCParameterValue;  /* 0x20 */
259d3c7b9a0SKenneth D. Merry     U32                     Reserved7;          /* 0x24 */
260d3c7b9a0SKenneth D. Merry     U32                     Reserved8;          /* 0x28 */
261d3c7b9a0SKenneth D. Merry } MPI2_SAS_IOUNIT_CONTROL_REQUEST,
262d3c7b9a0SKenneth D. Merry   MPI2_POINTER PTR_MPI2_SAS_IOUNIT_CONTROL_REQUEST,
263d3c7b9a0SKenneth D. Merry   Mpi2SasIoUnitControlRequest_t, MPI2_POINTER pMpi2SasIoUnitControlRequest_t;
264d3c7b9a0SKenneth D. Merry 
265d3c7b9a0SKenneth D. Merry /* values for the Operation field */
266d3c7b9a0SKenneth D. Merry #define MPI2_SAS_OP_CLEAR_ALL_PERSISTENT        (0x02)
267d3c7b9a0SKenneth D. Merry #define MPI2_SAS_OP_PHY_LINK_RESET              (0x06)
268d3c7b9a0SKenneth D. Merry #define MPI2_SAS_OP_PHY_HARD_RESET              (0x07)
269d3c7b9a0SKenneth D. Merry #define MPI2_SAS_OP_PHY_CLEAR_ERROR_LOG         (0x08)
270d3c7b9a0SKenneth D. Merry #define MPI2_SAS_OP_SEND_PRIMITIVE              (0x0A)
271d3c7b9a0SKenneth D. Merry #define MPI2_SAS_OP_FORCE_FULL_DISCOVERY        (0x0B)
272d3c7b9a0SKenneth D. Merry #define MPI2_SAS_OP_TRANSMIT_PORT_SELECT_SIGNAL (0x0C)
273d3c7b9a0SKenneth D. Merry #define MPI2_SAS_OP_REMOVE_DEVICE               (0x0D)
274d3c7b9a0SKenneth D. Merry #define MPI2_SAS_OP_LOOKUP_MAPPING              (0x0E)
275d3c7b9a0SKenneth D. Merry #define MPI2_SAS_OP_SET_IOC_PARAMETER           (0x0F)
276d043c564SKenneth D. Merry #define MPI2_SAS_OP_DEV_ENABLE_NCQ              (0x14)
277d043c564SKenneth D. Merry #define MPI2_SAS_OP_DEV_DISABLE_NCQ             (0x15)
278d3c7b9a0SKenneth D. Merry #define MPI2_SAS_OP_PRODUCT_SPECIFIC_MIN        (0x80)
279d3c7b9a0SKenneth D. Merry 
280d3c7b9a0SKenneth D. Merry /* values for the PrimFlags field */
281d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PRIMFLAGS_SINGLE               (0x08)
282d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PRIMFLAGS_TRIPLE               (0x02)
283d3c7b9a0SKenneth D. Merry #define MPI2_SAS_PRIMFLAGS_REDUNDANT            (0x01)
284d3c7b9a0SKenneth D. Merry 
285d3c7b9a0SKenneth D. Merry /* values for the LookupMethod field */
286d3c7b9a0SKenneth D. Merry #define MPI2_SAS_LOOKUP_METHOD_SAS_ADDRESS          (0x01)
287d3c7b9a0SKenneth D. Merry #define MPI2_SAS_LOOKUP_METHOD_SAS_ENCLOSURE_SLOT   (0x02)
288d3c7b9a0SKenneth D. Merry #define MPI2_SAS_LOOKUP_METHOD_SAS_DEVICE_NAME      (0x03)
289d3c7b9a0SKenneth D. Merry 
290d3c7b9a0SKenneth D. Merry /* SAS IO Unit Control Reply Message */
291d3c7b9a0SKenneth D. Merry typedef struct _MPI2_SAS_IOUNIT_CONTROL_REPLY
292d3c7b9a0SKenneth D. Merry {
293d3c7b9a0SKenneth D. Merry     U8                      Operation;          /* 0x00 */
294d3c7b9a0SKenneth D. Merry     U8                      Reserved1;          /* 0x01 */
295d3c7b9a0SKenneth D. Merry     U8                      MsgLength;          /* 0x02 */
296d3c7b9a0SKenneth D. Merry     U8                      Function;           /* 0x03 */
297d3c7b9a0SKenneth D. Merry     U16                     DevHandle;          /* 0x04 */
298d3c7b9a0SKenneth D. Merry     U8                      IOCParameter;       /* 0x06 */
299d3c7b9a0SKenneth D. Merry     U8                      MsgFlags;           /* 0x07 */
300d3c7b9a0SKenneth D. Merry     U8                      VP_ID;              /* 0x08 */
301d3c7b9a0SKenneth D. Merry     U8                      VF_ID;              /* 0x09 */
302d3c7b9a0SKenneth D. Merry     U16                     Reserved3;          /* 0x0A */
303d3c7b9a0SKenneth D. Merry     U16                     Reserved4;          /* 0x0C */
304d3c7b9a0SKenneth D. Merry     U16                     IOCStatus;          /* 0x0E */
305d3c7b9a0SKenneth D. Merry     U32                     IOCLogInfo;         /* 0x10 */
306d3c7b9a0SKenneth D. Merry } MPI2_SAS_IOUNIT_CONTROL_REPLY,
307d3c7b9a0SKenneth D. Merry   MPI2_POINTER PTR_MPI2_SAS_IOUNIT_CONTROL_REPLY,
308d3c7b9a0SKenneth D. Merry   Mpi2SasIoUnitControlReply_t, MPI2_POINTER pMpi2SasIoUnitControlReply_t;
309d3c7b9a0SKenneth D. Merry 
310d3c7b9a0SKenneth D. Merry #endif
311