mps_ioctl.h revision 212420
1212420Sken/*-
2212420Sken * Copyright (c) 2008 Yahoo!, Inc.
3212420Sken * All rights reserved.
4212420Sken * Written by: John Baldwin <jhb@FreeBSD.org>
5212420Sken *
6212420Sken * Redistribution and use in source and binary forms, with or without
7212420Sken * modification, are permitted provided that the following conditions
8212420Sken * are met:
9212420Sken * 1. Redistributions of source code must retain the above copyright
10212420Sken *    notice, this list of conditions and the following disclaimer.
11212420Sken * 2. Redistributions in binary form must reproduce the above copyright
12212420Sken *    notice, this list of conditions and the following disclaimer in the
13212420Sken *    documentation and/or other materials provided with the distribution.
14212420Sken * 3. Neither the name of the author nor the names of any co-contributors
15212420Sken *    may be used to endorse or promote products derived from this software
16212420Sken *    without specific prior written permission.
17212420Sken *
18212420Sken * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19212420Sken * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20212420Sken * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21212420Sken * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22212420Sken * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23212420Sken * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24212420Sken * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25212420Sken * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26212420Sken * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27212420Sken * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28212420Sken * SUCH DAMAGE.
29212420Sken *
30212420Sken * LSI MPT-Fusion Host Adapter FreeBSD userland interface
31212420Sken *
32212420Sken * $FreeBSD: head/sys/dev/mps/mps_ioctl.h 212420 2010-09-10 15:03:56Z ken $
33212420Sken */
34212420Sken
35212420Sken#ifndef _MPS_IOCTL_H_
36212420Sken#define	_MPS_IOCTL_H_
37212420Sken
38212420Sken#include <dev/mps/mpi/mpi2_type.h>
39212420Sken#include <dev/mps/mpi/mpi2.h>
40212420Sken#include <dev/mps/mpi/mpi2_cnfg.h>
41212420Sken#include <dev/mps/mpi/mpi2_sas.h>
42212420Sken
43212420Sken/*
44212420Sken * For the read header requests, the header should include the page
45212420Sken * type or extended page type, page number, and page version.  The
46212420Sken * buffer and length are unused.  The completed header is returned in
47212420Sken * the 'header' member.
48212420Sken *
49212420Sken * For the read page and write page requests, 'buf' should point to a
50212420Sken * buffer of 'len' bytes which holds the entire page (including the
51212420Sken * header).
52212420Sken *
53212420Sken * All requests specify the page address in 'page_address'.
54212420Sken */
55212420Skenstruct mps_cfg_page_req {
56212420Sken	MPI2_CONFIG_PAGE_HEADER header;
57212420Sken	uint32_t page_address;
58212420Sken	void	*buf;
59212420Sken	int	len;
60212420Sken	uint16_t ioc_status;
61212420Sken};
62212420Sken
63212420Skenstruct mps_ext_cfg_page_req {
64212420Sken	MPI2_CONFIG_EXTENDED_PAGE_HEADER header;
65212420Sken	uint32_t page_address;
66212420Sken	void	*buf;
67212420Sken	int	len;
68212420Sken	uint16_t ioc_status;
69212420Sken};
70212420Sken
71212420Skenstruct mps_raid_action {
72212420Sken	uint8_t action;
73212420Sken	uint8_t volume_bus;
74212420Sken	uint8_t volume_id;
75212420Sken	uint8_t phys_disk_num;
76212420Sken	uint32_t action_data_word;
77212420Sken	void *buf;
78212420Sken	int len;
79212420Sken	uint32_t volume_status;
80212420Sken	uint32_t action_data[4];
81212420Sken	uint16_t action_status;
82212420Sken	uint16_t ioc_status;
83212420Sken	uint8_t write;
84212420Sken};
85212420Sken
86212420Skenstruct mps_usr_command {
87212420Sken	void *req;
88212420Sken	uint32_t req_len;
89212420Sken	void *rpl;
90212420Sken	uint32_t rpl_len;
91212420Sken	void *buf;
92212420Sken	int len;
93212420Sken	uint32_t flags;
94212420Sken};
95212420Sken
96212420Sken#define MPSIO_MPS_COMMAND_FLAG_VERBOSE 0x01
97212420Sken#define MPSIO_MPS_COMMAND_FLAG_DEBUG 0x02
98212420Sken#define	MPSIO_READ_CFG_HEADER	_IOWR('M', 200, struct mps_cfg_page_req)
99212420Sken#define	MPSIO_READ_CFG_PAGE	_IOWR('M', 201, struct mps_cfg_page_req)
100212420Sken#define	MPSIO_READ_EXT_CFG_HEADER _IOWR('M', 202, struct mps_ext_cfg_page_req)
101212420Sken#define	MPSIO_READ_EXT_CFG_PAGE	_IOWR('M', 203, struct mps_ext_cfg_page_req)
102212420Sken#define	MPSIO_WRITE_CFG_PAGE	_IOWR('M', 204, struct mps_cfg_page_req)
103212420Sken#define	MPSIO_RAID_ACTION	_IOWR('M', 205, struct mps_raid_action)
104212420Sken#define	MPSIO_MPS_COMMAND	_IOWR('M', 210, struct mps_usr_command)
105212420Sken
106212420Sken#if defined(__amd64__)
107212420Skenstruct mps_cfg_page_req32 {
108212420Sken	MPI2_CONFIG_PAGE_HEADER header;
109212420Sken	uint32_t page_address;
110212420Sken	uint32_t buf;
111212420Sken	int	len;
112212420Sken	uint16_t ioc_status;
113212420Sken};
114212420Sken
115212420Skenstruct mps_ext_cfg_page_req32 {
116212420Sken	MPI2_CONFIG_EXTENDED_PAGE_HEADER header;
117212420Sken	uint32_t page_address;
118212420Sken	uint32_t buf;
119212420Sken	int	len;
120212420Sken	uint16_t ioc_status;
121212420Sken};
122212420Sken
123212420Skenstruct mps_raid_action32 {
124212420Sken	uint8_t action;
125212420Sken	uint8_t volume_bus;
126212420Sken	uint8_t volume_id;
127212420Sken	uint8_t phys_disk_num;
128212420Sken	uint32_t action_data_word;
129212420Sken	uint32_t buf;
130212420Sken	int len;
131212420Sken	uint32_t volume_status;
132212420Sken	uint32_t action_data[4];
133212420Sken	uint16_t action_status;
134212420Sken	uint16_t ioc_status;
135212420Sken	uint8_t write;
136212420Sken};
137212420Sken
138212420Sken#define	MPSIO_READ_CFG_HEADER32	_IOWR('M', 100, struct mps_cfg_page_req32)
139212420Sken#define	MPSIO_READ_CFG_PAGE32	_IOWR('M', 101, struct mps_cfg_page_req32)
140212420Sken#define	MPSIO_READ_EXT_CFG_HEADER32 _IOWR('M', 102, struct mps_ext_cfg_page_req32)
141212420Sken#define	MPSIO_READ_EXT_CFG_PAGE32 _IOWR('M', 103, struct mps_ext_cfg_page_req32)
142212420Sken#define	MPSIO_WRITE_CFG_PAGE32	_IOWR('M', 104, struct mps_cfg_page_req32)
143212420Sken#define	MPSIO_RAID_ACTION32	_IOWR('M', 105, struct mps_raid_action32)
144212420Sken#endif
145212420Sken
146212420Sken#endif /* !_MPS_IOCTL_H_ */
147