xref: /freebsd/sys/dev/mpr/mpr_ioctl.h (revision 95ee2897)
1991554f2SKenneth D. Merry /*-
2991554f2SKenneth D. Merry  * Copyright (c) 2008 Yahoo!, Inc.
3991554f2SKenneth D. Merry  * All rights reserved.
4991554f2SKenneth D. Merry  * Written by: John Baldwin <jhb@FreeBSD.org>
5991554f2SKenneth D. Merry  *
6991554f2SKenneth D. Merry  * Redistribution and use in source and binary forms, with or without
7991554f2SKenneth D. Merry  * modification, are permitted provided that the following conditions
8991554f2SKenneth D. Merry  * are met:
9991554f2SKenneth D. Merry  * 1. Redistributions of source code must retain the above copyright
10991554f2SKenneth D. Merry  *    notice, this list of conditions and the following disclaimer.
11991554f2SKenneth D. Merry  * 2. Redistributions in binary form must reproduce the above copyright
12991554f2SKenneth D. Merry  *    notice, this list of conditions and the following disclaimer in the
13991554f2SKenneth D. Merry  *    documentation and/or other materials provided with the distribution.
14991554f2SKenneth D. Merry  * 3. Neither the name of the author nor the names of any co-contributors
15991554f2SKenneth D. Merry  *    may be used to endorse or promote products derived from this software
16991554f2SKenneth D. Merry  *    without specific prior written permission.
17991554f2SKenneth D. Merry  *
18991554f2SKenneth D. Merry  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19991554f2SKenneth D. Merry  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20991554f2SKenneth D. Merry  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21991554f2SKenneth D. Merry  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22991554f2SKenneth D. Merry  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23991554f2SKenneth D. Merry  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24991554f2SKenneth D. Merry  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25991554f2SKenneth D. Merry  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26991554f2SKenneth D. Merry  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27991554f2SKenneth D. Merry  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28991554f2SKenneth D. Merry  * SUCH DAMAGE.
29991554f2SKenneth D. Merry  *
3046b23587SKashyap D Desai  * Broadcom Inc. (LSI) MPT-Fusion Host Adapter FreeBSD userland interface
31991554f2SKenneth D. Merry  */
32991554f2SKenneth D. Merry /*-
33a2c14879SStephen McConnell  * Copyright (c) 2011-2015 LSI Corp.
347a2a6a1aSStephen McConnell  * Copyright (c) 2013-2016 Avago Technologies
3546b23587SKashyap D Desai  * Copyright 2000-2020 Broadcom Inc.
36991554f2SKenneth D. Merry  * All rights reserved.
37991554f2SKenneth D. Merry  *
38991554f2SKenneth D. Merry  * Redistribution and use in source and binary forms, with or without
39991554f2SKenneth D. Merry  * modification, are permitted provided that the following conditions
40991554f2SKenneth D. Merry  * are met:
41991554f2SKenneth D. Merry  * 1. Redistributions of source code must retain the above copyright
42991554f2SKenneth D. Merry  *    notice, this list of conditions and the following disclaimer.
43991554f2SKenneth D. Merry  * 2. Redistributions in binary form must reproduce the above copyright
44991554f2SKenneth D. Merry  *    notice, this list of conditions and the following disclaimer in the
45991554f2SKenneth D. Merry  *    documentation and/or other materials provided with the distribution.
46991554f2SKenneth D. Merry  *
47991554f2SKenneth D. Merry  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
48991554f2SKenneth D. Merry  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
49991554f2SKenneth D. Merry  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
50991554f2SKenneth D. Merry  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
51991554f2SKenneth D. Merry  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
52991554f2SKenneth D. Merry  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
53991554f2SKenneth D. Merry  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
54991554f2SKenneth D. Merry  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
55991554f2SKenneth D. Merry  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
56991554f2SKenneth D. Merry  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
57991554f2SKenneth D. Merry  * SUCH DAMAGE.
58991554f2SKenneth D. Merry  *
5946b23587SKashyap D Desai  * Broadcom Inc. (LSI) MPT-Fusion Host Adapter FreeBSD
60991554f2SKenneth D. Merry  */
61991554f2SKenneth D. Merry 
62991554f2SKenneth D. Merry #ifndef _MPR_IOCTL_H_
63991554f2SKenneth D. Merry #define	_MPR_IOCTL_H_
64991554f2SKenneth D. Merry 
65991554f2SKenneth D. Merry #include <dev/mpr/mpi/mpi2_type.h>
66991554f2SKenneth D. Merry #include <dev/mpr/mpi/mpi2.h>
67991554f2SKenneth D. Merry #include <dev/mpr/mpi/mpi2_cnfg.h>
68991554f2SKenneth D. Merry #include <dev/mpr/mpi/mpi2_sas.h>
69991554f2SKenneth D. Merry 
70991554f2SKenneth D. Merry /*
71991554f2SKenneth D. Merry  * For the read header requests, the header should include the page
72991554f2SKenneth D. Merry  * type or extended page type, page number, and page version.  The
73991554f2SKenneth D. Merry  * buffer and length are unused.  The completed header is returned in
74991554f2SKenneth D. Merry  * the 'header' member.
75991554f2SKenneth D. Merry  *
76991554f2SKenneth D. Merry  * For the read page and write page requests, 'buf' should point to a
77991554f2SKenneth D. Merry  * buffer of 'len' bytes which holds the entire page (including the
78991554f2SKenneth D. Merry  * header).
79991554f2SKenneth D. Merry  *
80991554f2SKenneth D. Merry  * All requests specify the page address in 'page_address'.
81991554f2SKenneth D. Merry  */
82991554f2SKenneth D. Merry struct mpr_cfg_page_req {
83991554f2SKenneth D. Merry 	MPI2_CONFIG_PAGE_HEADER header;
84991554f2SKenneth D. Merry 	uint32_t page_address;
85991554f2SKenneth D. Merry 	void	*buf;
86991554f2SKenneth D. Merry 	int	len;
87991554f2SKenneth D. Merry 	uint16_t ioc_status;
88991554f2SKenneth D. Merry };
89991554f2SKenneth D. Merry 
90991554f2SKenneth D. Merry struct mpr_ext_cfg_page_req {
91991554f2SKenneth D. Merry 	MPI2_CONFIG_EXTENDED_PAGE_HEADER header;
92991554f2SKenneth D. Merry 	uint32_t page_address;
93991554f2SKenneth D. Merry 	void	*buf;
94991554f2SKenneth D. Merry 	int	len;
95991554f2SKenneth D. Merry 	uint16_t ioc_status;
96991554f2SKenneth D. Merry };
97991554f2SKenneth D. Merry 
98991554f2SKenneth D. Merry struct mpr_raid_action {
99991554f2SKenneth D. Merry 	uint8_t action;
100991554f2SKenneth D. Merry 	uint8_t volume_bus;
101991554f2SKenneth D. Merry 	uint8_t volume_id;
102991554f2SKenneth D. Merry 	uint8_t phys_disk_num;
103991554f2SKenneth D. Merry 	uint32_t action_data_word;
104991554f2SKenneth D. Merry 	void *buf;
105991554f2SKenneth D. Merry 	int len;
106991554f2SKenneth D. Merry 	uint32_t volume_status;
107991554f2SKenneth D. Merry 	uint32_t action_data[4];
108991554f2SKenneth D. Merry 	uint16_t action_status;
109991554f2SKenneth D. Merry 	uint16_t ioc_status;
110991554f2SKenneth D. Merry 	uint8_t write;
111991554f2SKenneth D. Merry };
112991554f2SKenneth D. Merry 
113991554f2SKenneth D. Merry struct mpr_usr_command {
114991554f2SKenneth D. Merry 	void *req;
115991554f2SKenneth D. Merry 	uint32_t req_len;
116991554f2SKenneth D. Merry 	void *rpl;
117991554f2SKenneth D. Merry 	uint32_t rpl_len;
118991554f2SKenneth D. Merry 	void *buf;
119991554f2SKenneth D. Merry 	int len;
120991554f2SKenneth D. Merry 	uint32_t flags;
121991554f2SKenneth D. Merry };
122991554f2SKenneth D. Merry 
123991554f2SKenneth D. Merry typedef struct mpr_pci_bits
124991554f2SKenneth D. Merry {
125991554f2SKenneth D. Merry 	union {
126991554f2SKenneth D. Merry 		struct {
127991554f2SKenneth D. Merry 			uint32_t	DeviceNumber	:5;
128991554f2SKenneth D. Merry 			uint32_t	FunctionNumber	:3;
129991554f2SKenneth D. Merry 			uint32_t	BusNumber	:24;
130991554f2SKenneth D. Merry 		} bits;
131991554f2SKenneth D. Merry 		uint32_t	AsDWORD;
132991554f2SKenneth D. Merry 	} u;
133991554f2SKenneth D. Merry 	uint32_t	PciSegmentId;
134991554f2SKenneth D. Merry } mpr_pci_bits_t;
135991554f2SKenneth D. Merry 
136991554f2SKenneth D. Merry /*
137991554f2SKenneth D. Merry  *  The following is the MPRIOCTL_GET_ADAPTER_DATA data structure.  This data
138991554f2SKenneth D. Merry  *  structure is setup so that we hopefully are properly aligned for both
139991554f2SKenneth D. Merry  *  32-bit and 64-bit mode applications.
140991554f2SKenneth D. Merry  *
141991554f2SKenneth D. Merry  *  Adapter Type - Value = 6 = SCSI Protocol through SAS-3 adapter
142991554f2SKenneth D. Merry  *
143991554f2SKenneth D. Merry  *  MPI Port Number - The PCI Function number for this device
144991554f2SKenneth D. Merry  *
145991554f2SKenneth D. Merry  *  PCI Device HW Id - The PCI device number for this device
146991554f2SKenneth D. Merry  *
147991554f2SKenneth D. Merry  */
148991554f2SKenneth D. Merry #define	MPRIOCTL_ADAPTER_TYPE_SAS3		6
1495f5baf0eSAlexander Motin #define	MPRIOCTL_ADAPTER_TYPE_SAS35		7
150991554f2SKenneth D. Merry typedef struct mpr_adapter_data
151991554f2SKenneth D. Merry {
152991554f2SKenneth D. Merry 	uint32_t	StructureLength;
153991554f2SKenneth D. Merry 	uint32_t	AdapterType;
154991554f2SKenneth D. Merry 	uint32_t	MpiPortNumber;
155991554f2SKenneth D. Merry 	uint32_t	PCIDeviceHwId;
156991554f2SKenneth D. Merry 	uint32_t	PCIDeviceHwRev;
157991554f2SKenneth D. Merry 	uint32_t	SubSystemId;
158991554f2SKenneth D. Merry 	uint32_t	SubsystemVendorId;
159991554f2SKenneth D. Merry 	uint32_t	Reserved1;
160991554f2SKenneth D. Merry 	uint32_t	MpiFirmwareVersion;
161991554f2SKenneth D. Merry 	uint32_t	BiosVersion;
162991554f2SKenneth D. Merry 	uint8_t		DriverVersion[32];
163991554f2SKenneth D. Merry 	uint8_t		Reserved2;
164991554f2SKenneth D. Merry 	uint8_t		ScsiId;
165991554f2SKenneth D. Merry 	uint16_t	Reserved3;
166991554f2SKenneth D. Merry 	mpr_pci_bits_t	PciInformation;
167991554f2SKenneth D. Merry } mpr_adapter_data_t;
168991554f2SKenneth D. Merry 
169991554f2SKenneth D. Merry typedef struct mpr_update_flash
170991554f2SKenneth D. Merry {
171991554f2SKenneth D. Merry 	uint64_t	PtrBuffer;
172991554f2SKenneth D. Merry 	uint32_t	ImageChecksum;
173991554f2SKenneth D. Merry 	uint32_t	ImageOffset;
174991554f2SKenneth D. Merry 	uint32_t	ImageSize;
175991554f2SKenneth D. Merry 	uint32_t	ImageType;
176991554f2SKenneth D. Merry } mpr_update_flash_t;
177991554f2SKenneth D. Merry 
178991554f2SKenneth D. Merry #define	MPR_PASS_THRU_DIRECTION_NONE	0
179991554f2SKenneth D. Merry #define	MPR_PASS_THRU_DIRECTION_READ	1
180991554f2SKenneth D. Merry #define	MPR_PASS_THRU_DIRECTION_WRITE	2
181991554f2SKenneth D. Merry #define	MPR_PASS_THRU_DIRECTION_BOTH	3
182991554f2SKenneth D. Merry 
183991554f2SKenneth D. Merry typedef struct mpr_pass_thru
184991554f2SKenneth D. Merry {
185991554f2SKenneth D. Merry 	uint64_t	PtrRequest;
186991554f2SKenneth D. Merry 	uint64_t	PtrReply;
187991554f2SKenneth D. Merry 	uint64_t	PtrData;
188991554f2SKenneth D. Merry 	uint32_t	RequestSize;
189991554f2SKenneth D. Merry 	uint32_t	ReplySize;
190991554f2SKenneth D. Merry 	uint32_t	DataSize;
191991554f2SKenneth D. Merry 	uint32_t	DataDirection;
192991554f2SKenneth D. Merry 	uint64_t	PtrDataOut;
193991554f2SKenneth D. Merry 	uint32_t	DataOutSize;
194991554f2SKenneth D. Merry 	uint32_t	Timeout;
195991554f2SKenneth D. Merry } mpr_pass_thru_t;
196991554f2SKenneth D. Merry 
197991554f2SKenneth D. Merry /*
198991554f2SKenneth D. Merry  * Event queue defines
199991554f2SKenneth D. Merry  */
2005f5baf0eSAlexander Motin #define	MPR_EVENT_QUEUE_SIZE		(200) /* Max Events stored in driver */
201991554f2SKenneth D. Merry #define	MPR_MAX_EVENT_DATA_LENGTH	(48) /* Size of each event in Dwords */
202991554f2SKenneth D. Merry 
203991554f2SKenneth D. Merry typedef struct mpr_event_query
204991554f2SKenneth D. Merry {
205991554f2SKenneth D. Merry 	uint16_t	Entries;
206991554f2SKenneth D. Merry 	uint16_t	Reserved;
207991554f2SKenneth D. Merry 	uint32_t	Types[4];
208991554f2SKenneth D. Merry } mpr_event_query_t;
209991554f2SKenneth D. Merry 
210991554f2SKenneth D. Merry typedef struct mpr_event_enable
211991554f2SKenneth D. Merry {
212991554f2SKenneth D. Merry 	uint32_t	Types[4];
213991554f2SKenneth D. Merry } mpr_event_enable_t;
214991554f2SKenneth D. Merry 
215991554f2SKenneth D. Merry /*
216991554f2SKenneth D. Merry  * Event record entry for ioctl.
217991554f2SKenneth D. Merry  */
218991554f2SKenneth D. Merry typedef struct mpr_event_entry
219991554f2SKenneth D. Merry {
220991554f2SKenneth D. Merry 	uint32_t	Type;
221991554f2SKenneth D. Merry 	uint32_t	Number;
222991554f2SKenneth D. Merry 	uint32_t	Data[MPR_MAX_EVENT_DATA_LENGTH];
223991554f2SKenneth D. Merry } mpr_event_entry_t;
224991554f2SKenneth D. Merry 
225991554f2SKenneth D. Merry typedef struct mpr_event_report
226991554f2SKenneth D. Merry {
227991554f2SKenneth D. Merry 	uint32_t	Size;
228991554f2SKenneth D. Merry 	uint64_t	PtrEvents;
229991554f2SKenneth D. Merry } mpr_event_report_t;
230991554f2SKenneth D. Merry 
231991554f2SKenneth D. Merry typedef struct mpr_pci_info
232991554f2SKenneth D. Merry {
233991554f2SKenneth D. Merry 	uint32_t	BusNumber;
234991554f2SKenneth D. Merry 	uint8_t		DeviceNumber;
235991554f2SKenneth D. Merry 	uint8_t		FunctionNumber;
236991554f2SKenneth D. Merry 	uint16_t	InterruptVector;
237991554f2SKenneth D. Merry 	uint8_t		PciHeader[256];
238991554f2SKenneth D. Merry } mpr_pci_info_t;
239991554f2SKenneth D. Merry 
240991554f2SKenneth D. Merry typedef struct mpr_diag_action
241991554f2SKenneth D. Merry {
242991554f2SKenneth D. Merry 	uint32_t	Action;
243991554f2SKenneth D. Merry 	uint32_t	Length;
244991554f2SKenneth D. Merry 	uint64_t	PtrDiagAction;
245991554f2SKenneth D. Merry 	uint32_t	ReturnCode;
246991554f2SKenneth D. Merry } mpr_diag_action_t;
247991554f2SKenneth D. Merry 
248991554f2SKenneth D. Merry #define	MPR_FW_DIAGNOSTIC_UID_NOT_FOUND	(0xFF)
249991554f2SKenneth D. Merry 
250991554f2SKenneth D. Merry #define	MPR_FW_DIAG_NEW				(0x806E6577)
251991554f2SKenneth D. Merry 
252991554f2SKenneth D. Merry #define	MPR_FW_DIAG_TYPE_REGISTER		(0x00000001)
253991554f2SKenneth D. Merry #define	MPR_FW_DIAG_TYPE_UNREGISTER		(0x00000002)
254991554f2SKenneth D. Merry #define	MPR_FW_DIAG_TYPE_QUERY			(0x00000003)
255991554f2SKenneth D. Merry #define	MPR_FW_DIAG_TYPE_READ_BUFFER		(0x00000004)
256991554f2SKenneth D. Merry #define	MPR_FW_DIAG_TYPE_RELEASE		(0x00000005)
257991554f2SKenneth D. Merry 
258991554f2SKenneth D. Merry #define	MPR_FW_DIAG_INVALID_UID			(0x00000000)
259991554f2SKenneth D. Merry 
260991554f2SKenneth D. Merry #define MPR_DIAG_SUCCESS			0
261991554f2SKenneth D. Merry #define MPR_DIAG_FAILURE			1
262991554f2SKenneth D. Merry 
263991554f2SKenneth D. Merry #define	MPR_FW_DIAG_ERROR_SUCCESS		(0x00000000)
264991554f2SKenneth D. Merry #define	MPR_FW_DIAG_ERROR_FAILURE		(0x00000001)
265991554f2SKenneth D. Merry #define	MPR_FW_DIAG_ERROR_INVALID_PARAMETER	(0x00000002)
266991554f2SKenneth D. Merry #define	MPR_FW_DIAG_ERROR_POST_FAILED		(0x00000010)
267991554f2SKenneth D. Merry #define	MPR_FW_DIAG_ERROR_INVALID_UID		(0x00000011)
268991554f2SKenneth D. Merry #define	MPR_FW_DIAG_ERROR_RELEASE_FAILED	(0x00000012)
269991554f2SKenneth D. Merry #define	MPR_FW_DIAG_ERROR_NO_BUFFER		(0x00000013)
270991554f2SKenneth D. Merry #define	MPR_FW_DIAG_ERROR_ALREADY_RELEASED	(0x00000014)
271991554f2SKenneth D. Merry 
272991554f2SKenneth D. Merry typedef struct mpr_fw_diag_register
273991554f2SKenneth D. Merry {
274991554f2SKenneth D. Merry 	uint8_t		ExtendedType;
275991554f2SKenneth D. Merry 	uint8_t		BufferType;
276991554f2SKenneth D. Merry 	uint16_t	ApplicationFlags;
277991554f2SKenneth D. Merry 	uint32_t	DiagnosticFlags;
278991554f2SKenneth D. Merry 	uint32_t	ProductSpecific[23];
279991554f2SKenneth D. Merry 	uint32_t	RequestedBufferSize;
280991554f2SKenneth D. Merry 	uint32_t	UniqueId;
281991554f2SKenneth D. Merry } mpr_fw_diag_register_t;
282991554f2SKenneth D. Merry 
283991554f2SKenneth D. Merry typedef struct mpr_fw_diag_unregister
284991554f2SKenneth D. Merry {
285991554f2SKenneth D. Merry 	uint32_t	UniqueId;
286991554f2SKenneth D. Merry } mpr_fw_diag_unregister_t;
287991554f2SKenneth D. Merry 
288991554f2SKenneth D. Merry #define	MPR_FW_DIAG_FLAG_APP_OWNED		(0x0001)
289991554f2SKenneth D. Merry #define	MPR_FW_DIAG_FLAG_BUFFER_VALID		(0x0002)
290991554f2SKenneth D. Merry #define	MPR_FW_DIAG_FLAG_FW_BUFFER_ACCESS	(0x0004)
291991554f2SKenneth D. Merry 
292991554f2SKenneth D. Merry typedef struct mpr_fw_diag_query
293991554f2SKenneth D. Merry {
294991554f2SKenneth D. Merry 	uint8_t		ExtendedType;
295991554f2SKenneth D. Merry 	uint8_t		BufferType;
296991554f2SKenneth D. Merry 	uint16_t	ApplicationFlags;
297991554f2SKenneth D. Merry 	uint32_t	DiagnosticFlags;
298991554f2SKenneth D. Merry 	uint32_t	ProductSpecific[23];
299991554f2SKenneth D. Merry 	uint32_t	TotalBufferSize;
300991554f2SKenneth D. Merry 	uint32_t	DriverAddedBufferSize;
301991554f2SKenneth D. Merry 	uint32_t	UniqueId;
302991554f2SKenneth D. Merry } mpr_fw_diag_query_t;
303991554f2SKenneth D. Merry 
304991554f2SKenneth D. Merry typedef struct mpr_fw_diag_release
305991554f2SKenneth D. Merry {
306991554f2SKenneth D. Merry 	uint32_t	UniqueId;
307991554f2SKenneth D. Merry } mpr_fw_diag_release_t;
308991554f2SKenneth D. Merry 
309991554f2SKenneth D. Merry #define	MPR_FW_DIAG_FLAG_REREGISTER	(0x0001)
310991554f2SKenneth D. Merry #define	MPR_FW_DIAG_FLAG_FORCE_RELEASE	(0x0002)
311991554f2SKenneth D. Merry 
312991554f2SKenneth D. Merry typedef struct mpr_diag_read_buffer
313991554f2SKenneth D. Merry {
314991554f2SKenneth D. Merry 	uint8_t		Status;
315991554f2SKenneth D. Merry 	uint8_t		Reserved;
316991554f2SKenneth D. Merry 	uint16_t	Flags;
317991554f2SKenneth D. Merry 	uint32_t	StartingOffset;
318991554f2SKenneth D. Merry 	uint32_t	BytesToRead;
319991554f2SKenneth D. Merry 	uint32_t	UniqueId;
320991554f2SKenneth D. Merry 	uint64_t	PtrDataBuffer;
321991554f2SKenneth D. Merry } mpr_diag_read_buffer_t;
322991554f2SKenneth D. Merry 
323991554f2SKenneth D. Merry /*
324991554f2SKenneth D. Merry  * Register Access
325991554f2SKenneth D. Merry  */
326991554f2SKenneth D. Merry #define	REG_IO_READ	1
327991554f2SKenneth D. Merry #define	REG_IO_WRITE	2
328991554f2SKenneth D. Merry #define	REG_MEM_READ	3
329991554f2SKenneth D. Merry #define	REG_MEM_WRITE	4
330991554f2SKenneth D. Merry 
331991554f2SKenneth D. Merry typedef struct mpr_reg_access
332991554f2SKenneth D. Merry {
333991554f2SKenneth D. Merry 	uint32_t	Command;
334991554f2SKenneth D. Merry 	uint32_t	RegOffset;
335991554f2SKenneth D. Merry 	uint32_t	RegData;
336991554f2SKenneth D. Merry } mpr_reg_access_t;
337991554f2SKenneth D. Merry 
338991554f2SKenneth D. Merry typedef struct mpr_btdh_mapping
339991554f2SKenneth D. Merry {
340991554f2SKenneth D. Merry 	uint16_t	TargetID;
341991554f2SKenneth D. Merry 	uint16_t	Bus;
342991554f2SKenneth D. Merry 	uint16_t	DevHandle;
343991554f2SKenneth D. Merry 	uint16_t	Reserved;
344991554f2SKenneth D. Merry } mpr_btdh_mapping_t;
345991554f2SKenneth D. Merry 
346991554f2SKenneth D. Merry #define MPRIO_MPR_COMMAND_FLAG_VERBOSE	0x01
347991554f2SKenneth D. Merry #define MPRIO_MPR_COMMAND_FLAG_DEBUG	0x02
348991554f2SKenneth D. Merry #define	MPRIO_READ_CFG_HEADER	_IOWR('M', 200, struct mpr_cfg_page_req)
349991554f2SKenneth D. Merry #define	MPRIO_READ_CFG_PAGE	_IOWR('M', 201, struct mpr_cfg_page_req)
350991554f2SKenneth D. Merry #define	MPRIO_READ_EXT_CFG_HEADER _IOWR('M', 202, struct mpr_ext_cfg_page_req)
351991554f2SKenneth D. Merry #define	MPRIO_READ_EXT_CFG_PAGE	_IOWR('M', 203, struct mpr_ext_cfg_page_req)
352991554f2SKenneth D. Merry #define	MPRIO_WRITE_CFG_PAGE	_IOWR('M', 204, struct mpr_cfg_page_req)
353991554f2SKenneth D. Merry #define	MPRIO_RAID_ACTION	_IOWR('M', 205, struct mpr_raid_action)
354991554f2SKenneth D. Merry #define	MPRIO_MPR_COMMAND	_IOWR('M', 210, struct mpr_usr_command)
355991554f2SKenneth D. Merry 
3568fae77f5SScott Long #ifndef MPTIOCTL
357991554f2SKenneth D. Merry #define	MPTIOCTL			('I')
358991554f2SKenneth D. Merry #define	MPTIOCTL_GET_ADAPTER_DATA	_IOWR(MPTIOCTL, 1,\
359991554f2SKenneth D. Merry     struct mpr_adapter_data)
360991554f2SKenneth D. Merry #define	MPTIOCTL_UPDATE_FLASH		_IOWR(MPTIOCTL, 2,\
361991554f2SKenneth D. Merry     struct mpr_update_flash)
362991554f2SKenneth D. Merry #define	MPTIOCTL_RESET_ADAPTER		_IO(MPTIOCTL, 3)
363991554f2SKenneth D. Merry #define	MPTIOCTL_PASS_THRU		_IOWR(MPTIOCTL, 4,\
364991554f2SKenneth D. Merry     struct mpr_pass_thru)
365991554f2SKenneth D. Merry #define	MPTIOCTL_EVENT_QUERY		_IOWR(MPTIOCTL, 5,\
366991554f2SKenneth D. Merry     struct mpr_event_query)
367991554f2SKenneth D. Merry #define	MPTIOCTL_EVENT_ENABLE		_IOWR(MPTIOCTL, 6,\
368991554f2SKenneth D. Merry     struct mpr_event_enable)
369991554f2SKenneth D. Merry #define	MPTIOCTL_EVENT_REPORT		_IOWR(MPTIOCTL, 7,\
370991554f2SKenneth D. Merry     struct mpr_event_report)
371991554f2SKenneth D. Merry #define	MPTIOCTL_GET_PCI_INFO		_IOWR(MPTIOCTL, 8,\
372991554f2SKenneth D. Merry     struct mpr_pci_info)
373991554f2SKenneth D. Merry #define	MPTIOCTL_DIAG_ACTION		_IOWR(MPTIOCTL, 9,\
374991554f2SKenneth D. Merry     struct mpr_diag_action)
375991554f2SKenneth D. Merry #define	MPTIOCTL_REG_ACCESS		_IOWR(MPTIOCTL, 10,\
376991554f2SKenneth D. Merry     struct mpr_reg_access)
377991554f2SKenneth D. Merry #define	MPTIOCTL_BTDH_MAPPING		_IOWR(MPTIOCTL, 11,\
378991554f2SKenneth D. Merry     struct mpr_btdh_mapping)
3798fae77f5SScott Long #endif /* MPTIOCTL */
380991554f2SKenneth D. Merry 
381991554f2SKenneth D. Merry #endif /* !_MPR_IOCTL_H_ */
382