xref: /freebsd/sys/dev/mps/mps_ioctl.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1d3c7b9a0SKenneth D. Merry /*-
27282444bSPedro F. Giffuni  * SPDX-License-Identifier: BSD-3-Clause
37282444bSPedro F. Giffuni  *
4d3c7b9a0SKenneth D. Merry  * Copyright (c) 2008 Yahoo!, Inc.
5d3c7b9a0SKenneth D. Merry  * All rights reserved.
6d3c7b9a0SKenneth D. Merry  * Written by: John Baldwin <jhb@FreeBSD.org>
7d3c7b9a0SKenneth D. Merry  *
8d3c7b9a0SKenneth D. Merry  * Redistribution and use in source and binary forms, with or without
9d3c7b9a0SKenneth D. Merry  * modification, are permitted provided that the following conditions
10d3c7b9a0SKenneth D. Merry  * are met:
11d3c7b9a0SKenneth D. Merry  * 1. Redistributions of source code must retain the above copyright
12d3c7b9a0SKenneth D. Merry  *    notice, this list of conditions and the following disclaimer.
13d3c7b9a0SKenneth D. Merry  * 2. Redistributions in binary form must reproduce the above copyright
14d3c7b9a0SKenneth D. Merry  *    notice, this list of conditions and the following disclaimer in the
15d3c7b9a0SKenneth D. Merry  *    documentation and/or other materials provided with the distribution.
16d3c7b9a0SKenneth D. Merry  * 3. Neither the name of the author nor the names of any co-contributors
17d3c7b9a0SKenneth D. Merry  *    may be used to endorse or promote products derived from this software
18d3c7b9a0SKenneth D. Merry  *    without specific prior written permission.
19d3c7b9a0SKenneth D. Merry  *
20d3c7b9a0SKenneth D. Merry  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21d3c7b9a0SKenneth D. Merry  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22d3c7b9a0SKenneth D. Merry  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23d3c7b9a0SKenneth D. Merry  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
24d3c7b9a0SKenneth D. Merry  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25d3c7b9a0SKenneth D. Merry  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26d3c7b9a0SKenneth D. Merry  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27d3c7b9a0SKenneth D. Merry  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28d3c7b9a0SKenneth D. Merry  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29d3c7b9a0SKenneth D. Merry  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30d3c7b9a0SKenneth D. Merry  * SUCH DAMAGE.
31d3c7b9a0SKenneth D. Merry  *
32ef065d89SStephen McConnell  * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD userland interface
33d3c7b9a0SKenneth D. Merry  */
34d043c564SKenneth D. Merry /*-
35ef065d89SStephen McConnell  * Copyright (c) 2011-2015 LSI Corp.
36ef065d89SStephen McConnell  * Copyright (c) 2013-2015 Avago Technologies
37d043c564SKenneth D. Merry  * All rights reserved.
38d043c564SKenneth D. Merry  *
39d043c564SKenneth D. Merry  * Redistribution and use in source and binary forms, with or without
40d043c564SKenneth D. Merry  * modification, are permitted provided that the following conditions
41d043c564SKenneth D. Merry  * are met:
42d043c564SKenneth D. Merry  * 1. Redistributions of source code must retain the above copyright
43d043c564SKenneth D. Merry  *    notice, this list of conditions and the following disclaimer.
44d043c564SKenneth D. Merry  * 2. Redistributions in binary form must reproduce the above copyright
45d043c564SKenneth D. Merry  *    notice, this list of conditions and the following disclaimer in the
46d043c564SKenneth D. Merry  *    documentation and/or other materials provided with the distribution.
47d043c564SKenneth D. Merry  *
48d043c564SKenneth D. Merry  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
49d043c564SKenneth D. Merry  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
50d043c564SKenneth D. Merry  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
51d043c564SKenneth D. Merry  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
52d043c564SKenneth D. Merry  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
53d043c564SKenneth D. Merry  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
54d043c564SKenneth D. Merry  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
55d043c564SKenneth D. Merry  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
56d043c564SKenneth D. Merry  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
57d043c564SKenneth D. Merry  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
58d043c564SKenneth D. Merry  * SUCH DAMAGE.
59d043c564SKenneth D. Merry  *
60ef065d89SStephen McConnell  * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
61d043c564SKenneth D. Merry  */
62d3c7b9a0SKenneth D. Merry 
63d3c7b9a0SKenneth D. Merry #ifndef _MPS_IOCTL_H_
64d3c7b9a0SKenneth D. Merry #define	_MPS_IOCTL_H_
65d3c7b9a0SKenneth D. Merry 
66d3c7b9a0SKenneth D. Merry #include <dev/mps/mpi/mpi2_type.h>
67d3c7b9a0SKenneth D. Merry #include <dev/mps/mpi/mpi2.h>
68d3c7b9a0SKenneth D. Merry #include <dev/mps/mpi/mpi2_cnfg.h>
69d3c7b9a0SKenneth D. Merry #include <dev/mps/mpi/mpi2_sas.h>
70d3c7b9a0SKenneth D. Merry 
71d3c7b9a0SKenneth D. Merry /*
72d3c7b9a0SKenneth D. Merry  * For the read header requests, the header should include the page
73d3c7b9a0SKenneth D. Merry  * type or extended page type, page number, and page version.  The
74d3c7b9a0SKenneth D. Merry  * buffer and length are unused.  The completed header is returned in
75d3c7b9a0SKenneth D. Merry  * the 'header' member.
76d3c7b9a0SKenneth D. Merry  *
77d3c7b9a0SKenneth D. Merry  * For the read page and write page requests, 'buf' should point to a
78d3c7b9a0SKenneth D. Merry  * buffer of 'len' bytes which holds the entire page (including the
79d3c7b9a0SKenneth D. Merry  * header).
80d3c7b9a0SKenneth D. Merry  *
81d3c7b9a0SKenneth D. Merry  * All requests specify the page address in 'page_address'.
82d3c7b9a0SKenneth D. Merry  */
83d3c7b9a0SKenneth D. Merry struct mps_cfg_page_req {
84d3c7b9a0SKenneth D. Merry 	MPI2_CONFIG_PAGE_HEADER header;
85d3c7b9a0SKenneth D. Merry 	uint32_t page_address;
86d3c7b9a0SKenneth D. Merry 	void	*buf;
87d3c7b9a0SKenneth D. Merry 	int	len;
88d3c7b9a0SKenneth D. Merry 	uint16_t ioc_status;
89d3c7b9a0SKenneth D. Merry };
90d3c7b9a0SKenneth D. Merry 
91d3c7b9a0SKenneth D. Merry struct mps_ext_cfg_page_req {
92d3c7b9a0SKenneth D. Merry 	MPI2_CONFIG_EXTENDED_PAGE_HEADER header;
93d3c7b9a0SKenneth D. Merry 	uint32_t page_address;
94d3c7b9a0SKenneth D. Merry 	void	*buf;
95d3c7b9a0SKenneth D. Merry 	int	len;
96d3c7b9a0SKenneth D. Merry 	uint16_t ioc_status;
97d3c7b9a0SKenneth D. Merry };
98d3c7b9a0SKenneth D. Merry 
99d3c7b9a0SKenneth D. Merry struct mps_raid_action {
100d3c7b9a0SKenneth D. Merry 	uint8_t action;
101d3c7b9a0SKenneth D. Merry 	uint8_t volume_bus;
102d3c7b9a0SKenneth D. Merry 	uint8_t volume_id;
103d3c7b9a0SKenneth D. Merry 	uint8_t phys_disk_num;
104d3c7b9a0SKenneth D. Merry 	uint32_t action_data_word;
105d3c7b9a0SKenneth D. Merry 	void *buf;
106d3c7b9a0SKenneth D. Merry 	int len;
107d3c7b9a0SKenneth D. Merry 	uint32_t volume_status;
108d3c7b9a0SKenneth D. Merry 	uint32_t action_data[4];
109d3c7b9a0SKenneth D. Merry 	uint16_t action_status;
110d3c7b9a0SKenneth D. Merry 	uint16_t ioc_status;
111d3c7b9a0SKenneth D. Merry 	uint8_t write;
112d3c7b9a0SKenneth D. Merry };
113d3c7b9a0SKenneth D. Merry 
114d3c7b9a0SKenneth D. Merry struct mps_usr_command {
115d3c7b9a0SKenneth D. Merry 	void *req;
116d3c7b9a0SKenneth D. Merry 	uint32_t req_len;
117d3c7b9a0SKenneth D. Merry 	void *rpl;
118d3c7b9a0SKenneth D. Merry 	uint32_t rpl_len;
119d3c7b9a0SKenneth D. Merry 	void *buf;
120d3c7b9a0SKenneth D. Merry 	int len;
121d3c7b9a0SKenneth D. Merry 	uint32_t flags;
122d3c7b9a0SKenneth D. Merry };
123d3c7b9a0SKenneth D. Merry 
124d043c564SKenneth D. Merry typedef struct mps_pci_bits
125d043c564SKenneth D. Merry {
126d043c564SKenneth D. Merry 	union {
127d043c564SKenneth D. Merry 		struct {
128d043c564SKenneth D. Merry 			uint32_t	DeviceNumber	:5;
129d043c564SKenneth D. Merry 			uint32_t	FunctionNumber	:3;
130d043c564SKenneth D. Merry 			uint32_t	BusNumber	:24;
131d043c564SKenneth D. Merry 		} bits;
132d043c564SKenneth D. Merry 		uint32_t	AsDWORD;
133d043c564SKenneth D. Merry 	} u;
134d043c564SKenneth D. Merry 	uint32_t	PciSegmentId;
135d043c564SKenneth D. Merry } mps_pci_bits_t;
136d043c564SKenneth D. Merry 
137d043c564SKenneth D. Merry /*
138d043c564SKenneth D. Merry  *  The following is the MPSIOCTL_GET_ADAPTER_DATA data structure.  This data
139d043c564SKenneth D. Merry  *  structure is setup so that we hopefully are properly aligned for both
140d043c564SKenneth D. Merry  *  32-bit and 64-bit mode applications.
141d043c564SKenneth D. Merry  *
142d043c564SKenneth D. Merry  *  Adapter Type - Value = 4 = SCSI Protocol through SAS-2 adapter
143d043c564SKenneth D. Merry  *
144d043c564SKenneth D. Merry  *  MPI Port Number - The PCI Function number for this device
145d043c564SKenneth D. Merry  *
146d043c564SKenneth D. Merry  *  PCI Device HW Id - The PCI device number for this device
147d043c564SKenneth D. Merry  *
148d043c564SKenneth D. Merry  */
149d043c564SKenneth D. Merry #define	MPSIOCTL_ADAPTER_TYPE_SAS2		4
150d043c564SKenneth D. Merry #define	MPSIOCTL_ADAPTER_TYPE_SAS2_SSS6200	5
151d043c564SKenneth D. Merry typedef struct mps_adapter_data
152d043c564SKenneth D. Merry {
153d043c564SKenneth D. Merry 	uint32_t	StructureLength;
154d043c564SKenneth D. Merry 	uint32_t	AdapterType;
155d043c564SKenneth D. Merry 	uint32_t	MpiPortNumber;
156d043c564SKenneth D. Merry 	uint32_t	PCIDeviceHwId;
157d043c564SKenneth D. Merry 	uint32_t	PCIDeviceHwRev;
158d043c564SKenneth D. Merry 	uint32_t	SubSystemId;
159d043c564SKenneth D. Merry 	uint32_t	SubsystemVendorId;
160d043c564SKenneth D. Merry 	uint32_t	Reserved1;
161d043c564SKenneth D. Merry 	uint32_t	MpiFirmwareVersion;
162d043c564SKenneth D. Merry 	uint32_t	BiosVersion;
163d043c564SKenneth D. Merry 	uint8_t		DriverVersion[32];
164d043c564SKenneth D. Merry 	uint8_t		Reserved2;
165d043c564SKenneth D. Merry 	uint8_t		ScsiId;
166d043c564SKenneth D. Merry 	uint16_t	Reserved3;
167d043c564SKenneth D. Merry 	mps_pci_bits_t	PciInformation;
168d043c564SKenneth D. Merry } mps_adapter_data_t;
169d043c564SKenneth D. Merry 
170d043c564SKenneth D. Merry typedef struct mps_update_flash
171d043c564SKenneth D. Merry {
172d043c564SKenneth D. Merry 	uint64_t	PtrBuffer;
173d043c564SKenneth D. Merry 	uint32_t	ImageChecksum;
174d043c564SKenneth D. Merry 	uint32_t	ImageOffset;
175d043c564SKenneth D. Merry 	uint32_t	ImageSize;
176d043c564SKenneth D. Merry 	uint32_t	ImageType;
177d043c564SKenneth D. Merry } mps_update_flash_t;
178d043c564SKenneth D. Merry 
179d043c564SKenneth D. Merry #define	MPS_PASS_THRU_DIRECTION_NONE	0
180d043c564SKenneth D. Merry #define	MPS_PASS_THRU_DIRECTION_READ	1
181d043c564SKenneth D. Merry #define	MPS_PASS_THRU_DIRECTION_WRITE	2
182d043c564SKenneth D. Merry #define	MPS_PASS_THRU_DIRECTION_BOTH	3
183d043c564SKenneth D. Merry 
184d043c564SKenneth D. Merry typedef struct mps_pass_thru
185d043c564SKenneth D. Merry {
186d043c564SKenneth D. Merry 	uint64_t	PtrRequest;
187d043c564SKenneth D. Merry 	uint64_t	PtrReply;
188d043c564SKenneth D. Merry 	uint64_t	PtrData;
189d043c564SKenneth D. Merry 	uint32_t	RequestSize;
190d043c564SKenneth D. Merry 	uint32_t	ReplySize;
191d043c564SKenneth D. Merry 	uint32_t	DataSize;
192d043c564SKenneth D. Merry 	uint32_t	DataDirection;
193d043c564SKenneth D. Merry 	uint64_t	PtrDataOut;
194d043c564SKenneth D. Merry 	uint32_t	DataOutSize;
195d043c564SKenneth D. Merry 	uint32_t	Timeout;
196d043c564SKenneth D. Merry } mps_pass_thru_t;
197d043c564SKenneth D. Merry 
198d043c564SKenneth D. Merry /*
199d043c564SKenneth D. Merry  * Event queue defines
200d043c564SKenneth D. Merry  */
201d043c564SKenneth D. Merry #define	MPS_EVENT_QUEUE_SIZE		(50) /* Max Events stored in driver */
202d043c564SKenneth D. Merry #define	MPS_MAX_EVENT_DATA_LENGTH	(48) /* Size of each event in Dwords */
203d043c564SKenneth D. Merry 
204d043c564SKenneth D. Merry typedef struct mps_event_query
205d043c564SKenneth D. Merry {
206d043c564SKenneth D. Merry 	uint16_t	Entries;
207d043c564SKenneth D. Merry 	uint16_t	Reserved;
208d043c564SKenneth D. Merry 	uint32_t	Types[4];
209d043c564SKenneth D. Merry } mps_event_query_t;
210d043c564SKenneth D. Merry 
211d043c564SKenneth D. Merry typedef struct mps_event_enable
212d043c564SKenneth D. Merry {
213d043c564SKenneth D. Merry 	uint32_t	Types[4];
214d043c564SKenneth D. Merry } mps_event_enable_t;
215d043c564SKenneth D. Merry 
216d043c564SKenneth D. Merry /*
217d043c564SKenneth D. Merry  * Event record entry for ioctl.
218d043c564SKenneth D. Merry  */
219d043c564SKenneth D. Merry typedef struct mps_event_entry
220d043c564SKenneth D. Merry {
221d043c564SKenneth D. Merry 	uint32_t	Type;
222d043c564SKenneth D. Merry 	uint32_t	Number;
223d043c564SKenneth D. Merry 	uint32_t	Data[MPS_MAX_EVENT_DATA_LENGTH];
224d043c564SKenneth D. Merry } mps_event_entry_t;
225d043c564SKenneth D. Merry 
226d043c564SKenneth D. Merry typedef struct mps_event_report
227d043c564SKenneth D. Merry {
228d043c564SKenneth D. Merry 	uint32_t	Size;
229d043c564SKenneth D. Merry 	uint64_t	PtrEvents;
230d043c564SKenneth D. Merry } mps_event_report_t;
231d043c564SKenneth D. Merry 
232d043c564SKenneth D. Merry typedef struct mps_pci_info
233d043c564SKenneth D. Merry {
234d043c564SKenneth D. Merry 	uint32_t	BusNumber;
235d043c564SKenneth D. Merry 	uint8_t		DeviceNumber;
236d043c564SKenneth D. Merry 	uint8_t		FunctionNumber;
237d043c564SKenneth D. Merry 	uint16_t	InterruptVector;
238d043c564SKenneth D. Merry 	uint8_t		PciHeader[256];
239d043c564SKenneth D. Merry } mps_pci_info_t;
240d043c564SKenneth D. Merry 
241d043c564SKenneth D. Merry typedef struct mps_diag_action
242d043c564SKenneth D. Merry {
243d043c564SKenneth D. Merry 	uint32_t	Action;
244d043c564SKenneth D. Merry 	uint32_t	Length;
245d043c564SKenneth D. Merry 	uint64_t	PtrDiagAction;
246d043c564SKenneth D. Merry 	uint32_t	ReturnCode;
247d043c564SKenneth D. Merry } mps_diag_action_t;
248d043c564SKenneth D. Merry 
249d043c564SKenneth D. Merry #define	MPS_FW_DIAGNOSTIC_UID_NOT_FOUND	(0xFF)
250d043c564SKenneth D. Merry 
251d043c564SKenneth D. Merry #define	MPS_FW_DIAG_NEW				(0x806E6577)
252d043c564SKenneth D. Merry 
253d043c564SKenneth D. Merry #define	MPS_FW_DIAG_TYPE_REGISTER		(0x00000001)
254d043c564SKenneth D. Merry #define	MPS_FW_DIAG_TYPE_UNREGISTER		(0x00000002)
255d043c564SKenneth D. Merry #define	MPS_FW_DIAG_TYPE_QUERY			(0x00000003)
256d043c564SKenneth D. Merry #define	MPS_FW_DIAG_TYPE_READ_BUFFER		(0x00000004)
257d043c564SKenneth D. Merry #define	MPS_FW_DIAG_TYPE_RELEASE		(0x00000005)
258d043c564SKenneth D. Merry 
259d043c564SKenneth D. Merry #define	MPS_FW_DIAG_INVALID_UID			(0x00000000)
260d043c564SKenneth D. Merry 
261d043c564SKenneth D. Merry #define MPS_DIAG_SUCCESS			0
262d043c564SKenneth D. Merry #define MPS_DIAG_FAILURE			1
263d043c564SKenneth D. Merry 
264d043c564SKenneth D. Merry #define	MPS_FW_DIAG_ERROR_SUCCESS		(0x00000000)
265d043c564SKenneth D. Merry #define	MPS_FW_DIAG_ERROR_FAILURE		(0x00000001)
266d043c564SKenneth D. Merry #define	MPS_FW_DIAG_ERROR_INVALID_PARAMETER	(0x00000002)
267d043c564SKenneth D. Merry #define	MPS_FW_DIAG_ERROR_POST_FAILED		(0x00000010)
268d043c564SKenneth D. Merry #define	MPS_FW_DIAG_ERROR_INVALID_UID		(0x00000011)
269d043c564SKenneth D. Merry #define	MPS_FW_DIAG_ERROR_RELEASE_FAILED	(0x00000012)
270d043c564SKenneth D. Merry #define	MPS_FW_DIAG_ERROR_NO_BUFFER		(0x00000013)
271d043c564SKenneth D. Merry #define	MPS_FW_DIAG_ERROR_ALREADY_RELEASED	(0x00000014)
272d043c564SKenneth D. Merry 
273d043c564SKenneth D. Merry typedef struct mps_fw_diag_register
274d043c564SKenneth D. Merry {
275d043c564SKenneth D. Merry 	uint8_t		ExtendedType;
276d043c564SKenneth D. Merry 	uint8_t		BufferType;
277d043c564SKenneth D. Merry 	uint16_t	ApplicationFlags;
278d043c564SKenneth D. Merry 	uint32_t	DiagnosticFlags;
279d043c564SKenneth D. Merry 	uint32_t	ProductSpecific[23];
280d043c564SKenneth D. Merry 	uint32_t	RequestedBufferSize;
281d043c564SKenneth D. Merry 	uint32_t	UniqueId;
282d043c564SKenneth D. Merry } mps_fw_diag_register_t;
283d043c564SKenneth D. Merry 
284d043c564SKenneth D. Merry typedef struct mps_fw_diag_unregister
285d043c564SKenneth D. Merry {
286d043c564SKenneth D. Merry 	uint32_t	UniqueId;
287d043c564SKenneth D. Merry } mps_fw_diag_unregister_t;
288d043c564SKenneth D. Merry 
289d043c564SKenneth D. Merry #define	MPS_FW_DIAG_FLAG_APP_OWNED		(0x0001)
290d043c564SKenneth D. Merry #define	MPS_FW_DIAG_FLAG_BUFFER_VALID		(0x0002)
291d043c564SKenneth D. Merry #define	MPS_FW_DIAG_FLAG_FW_BUFFER_ACCESS	(0x0004)
292d043c564SKenneth D. Merry 
293d043c564SKenneth D. Merry typedef struct mps_fw_diag_query
294d043c564SKenneth D. Merry {
295d043c564SKenneth D. Merry 	uint8_t		ExtendedType;
296d043c564SKenneth D. Merry 	uint8_t		BufferType;
297d043c564SKenneth D. Merry 	uint16_t	ApplicationFlags;
298d043c564SKenneth D. Merry 	uint32_t	DiagnosticFlags;
299d043c564SKenneth D. Merry 	uint32_t	ProductSpecific[23];
300d043c564SKenneth D. Merry 	uint32_t	TotalBufferSize;
301d043c564SKenneth D. Merry 	uint32_t	DriverAddedBufferSize;
302d043c564SKenneth D. Merry 	uint32_t	UniqueId;
303d043c564SKenneth D. Merry } mps_fw_diag_query_t;
304d043c564SKenneth D. Merry 
305d043c564SKenneth D. Merry typedef struct mps_fw_diag_release
306d043c564SKenneth D. Merry {
307d043c564SKenneth D. Merry 	uint32_t	UniqueId;
308d043c564SKenneth D. Merry } mps_fw_diag_release_t;
309d043c564SKenneth D. Merry 
310d043c564SKenneth D. Merry #define	MPS_FW_DIAG_FLAG_REREGISTER	(0x0001)
311d043c564SKenneth D. Merry #define	MPS_FW_DIAG_FLAG_FORCE_RELEASE	(0x0002)
312d043c564SKenneth D. Merry 
313d043c564SKenneth D. Merry typedef struct mps_diag_read_buffer
314d043c564SKenneth D. Merry {
315d043c564SKenneth D. Merry 	uint8_t		Status;
316d043c564SKenneth D. Merry 	uint8_t		Reserved;
317d043c564SKenneth D. Merry 	uint16_t	Flags;
318d043c564SKenneth D. Merry 	uint32_t	StartingOffset;
319d043c564SKenneth D. Merry 	uint32_t	BytesToRead;
320d043c564SKenneth D. Merry 	uint32_t	UniqueId;
321d043c564SKenneth D. Merry 	uint64_t	PtrDataBuffer;
322d043c564SKenneth D. Merry } mps_diag_read_buffer_t;
323d043c564SKenneth D. Merry 
324d043c564SKenneth D. Merry /*
325d043c564SKenneth D. Merry  * Register Access
326d043c564SKenneth D. Merry  */
327d043c564SKenneth D. Merry #define	REG_IO_READ	1
328d043c564SKenneth D. Merry #define	REG_IO_WRITE	2
329d043c564SKenneth D. Merry #define	REG_MEM_READ	3
330d043c564SKenneth D. Merry #define	REG_MEM_WRITE	4
331d043c564SKenneth D. Merry 
332d043c564SKenneth D. Merry typedef struct mps_reg_access
333d043c564SKenneth D. Merry {
334d043c564SKenneth D. Merry 	uint32_t	Command;
335d043c564SKenneth D. Merry 	uint32_t	RegOffset;
336d043c564SKenneth D. Merry 	uint32_t	RegData;
337d043c564SKenneth D. Merry } mps_reg_access_t;
338d043c564SKenneth D. Merry 
339d043c564SKenneth D. Merry typedef struct mps_btdh_mapping
340d043c564SKenneth D. Merry {
341d043c564SKenneth D. Merry 	uint16_t	TargetID;
342d043c564SKenneth D. Merry 	uint16_t	Bus;
343d043c564SKenneth D. Merry 	uint16_t	DevHandle;
344d043c564SKenneth D. Merry 	uint16_t	Reserved;
345d043c564SKenneth D. Merry } mps_btdh_mapping_t;
346d043c564SKenneth D. Merry 
347d3c7b9a0SKenneth D. Merry #define MPSIO_MPS_COMMAND_FLAG_VERBOSE	0x01
348d3c7b9a0SKenneth D. Merry #define MPSIO_MPS_COMMAND_FLAG_DEBUG	0x02
349d3c7b9a0SKenneth D. Merry #define	MPSIO_READ_CFG_HEADER	_IOWR('M', 200, struct mps_cfg_page_req)
350d3c7b9a0SKenneth D. Merry #define	MPSIO_READ_CFG_PAGE	_IOWR('M', 201, struct mps_cfg_page_req)
351d3c7b9a0SKenneth D. Merry #define	MPSIO_READ_EXT_CFG_HEADER _IOWR('M', 202, struct mps_ext_cfg_page_req)
352d3c7b9a0SKenneth D. Merry #define	MPSIO_READ_EXT_CFG_PAGE	_IOWR('M', 203, struct mps_ext_cfg_page_req)
353d3c7b9a0SKenneth D. Merry #define	MPSIO_WRITE_CFG_PAGE	_IOWR('M', 204, struct mps_cfg_page_req)
354d3c7b9a0SKenneth D. Merry #define	MPSIO_RAID_ACTION	_IOWR('M', 205, struct mps_raid_action)
355d3c7b9a0SKenneth D. Merry #define	MPSIO_MPS_COMMAND	_IOWR('M', 210, struct mps_usr_command)
356d3c7b9a0SKenneth D. Merry 
357*8fae77f5SScott Long #ifndef MPTIOCTL
358d043c564SKenneth D. Merry #define	MPTIOCTL			('I')
359d043c564SKenneth D. Merry #define	MPTIOCTL_GET_ADAPTER_DATA	_IOWR(MPTIOCTL, 1,\
360d043c564SKenneth D. Merry     struct mps_adapter_data)
361d043c564SKenneth D. Merry #define	MPTIOCTL_UPDATE_FLASH		_IOWR(MPTIOCTL, 2,\
362d043c564SKenneth D. Merry     struct mps_update_flash)
363d043c564SKenneth D. Merry #define	MPTIOCTL_RESET_ADAPTER		_IO(MPTIOCTL, 3)
364d043c564SKenneth D. Merry #define	MPTIOCTL_PASS_THRU		_IOWR(MPTIOCTL, 4,\
365d043c564SKenneth D. Merry     struct mps_pass_thru)
366d043c564SKenneth D. Merry #define	MPTIOCTL_EVENT_QUERY		_IOWR(MPTIOCTL, 5,\
367d043c564SKenneth D. Merry     struct mps_event_query)
368d043c564SKenneth D. Merry #define	MPTIOCTL_EVENT_ENABLE		_IOWR(MPTIOCTL, 6,\
369d043c564SKenneth D. Merry     struct mps_event_enable)
370d043c564SKenneth D. Merry #define	MPTIOCTL_EVENT_REPORT		_IOWR(MPTIOCTL, 7,\
371d043c564SKenneth D. Merry     struct mps_event_report)
372d043c564SKenneth D. Merry #define	MPTIOCTL_GET_PCI_INFO		_IOWR(MPTIOCTL, 8,\
373d043c564SKenneth D. Merry     struct mps_pci_info)
374d043c564SKenneth D. Merry #define	MPTIOCTL_DIAG_ACTION		_IOWR(MPTIOCTL, 9,\
375d043c564SKenneth D. Merry     struct mps_diag_action)
376d043c564SKenneth D. Merry #define	MPTIOCTL_REG_ACCESS		_IOWR(MPTIOCTL, 10,\
377d043c564SKenneth D. Merry     struct mps_reg_access)
378d043c564SKenneth D. Merry #define	MPTIOCTL_BTDH_MAPPING		_IOWR(MPTIOCTL, 11,\
379d043c564SKenneth D. Merry     struct mps_btdh_mapping)
380*8fae77f5SScott Long #endif /* MPTIOCTL */
381d043c564SKenneth D. Merry 
382d3c7b9a0SKenneth D. Merry #endif /* !_MPS_IOCTL_H_ */
383