aac_ioctl.h revision 5678:64e6494fde26
1/*
2 * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
3 * Use is subject to license terms.
4 */
5
6/*
7 * Copyright 2005-06 Adaptec, Inc.
8 * Copyright (c) 2005-06 Adaptec Inc., Achim Leubner
9 * Copyright (c) 2000 Michael Smith
10 * Copyright (c) 2000 Scott Long
11 * Copyright (c) 2000 BSDi
12 * All rights reserved.
13 *
14 * Redistribution and use in source and binary forms, with or without
15 * modification, are permitted provided that the following conditions
16 * are met:
17 * 1. Redistributions of source code must retain the above copyright
18 *    notice, this list of conditions and the following disclaimer.
19 * 2. Redistributions in binary form must reproduce the above copyright
20 *    notice, this list of conditions and the following disclaimer in the
21 *    documentation and/or other materials provided with the distribution.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 *
35 *    $FreeBSD: /repoman/r/ncvs/src/sys/sys/aac_ioctl.h,v 1.11 2004/12/09 22:20:25 scottl Exp $
36 */
37
38#ifndef	_AAC_IOCTL_H_
39#define	_AAC_IOCTL_H_
40
41#pragma ident	"%Z%%M%	%I%	%E% SMI"
42
43#ifdef	__cplusplus
44extern "C" {
45#endif
46
47/*
48 * IOCTL Interface
49 */
50
51/* Macro definitions for IOCTL function control codes */
52#define	CTL_CODE(function, method) \
53	((4<< 16) | ((function) << 2) | (method))
54
55/* Method codes for how buffers are passed for I/O and FS controls */
56#define	METHOD_BUFFERED		0
57#define	METHOD_NEITHER		3
58
59/* IOCTL commands */
60#define	FSACTL_SENDFIB			CTL_CODE(2050, METHOD_BUFFERED)
61#define	FSACTL_SEND_RAW_SRB		CTL_CODE(2067, METHOD_BUFFERED)
62#define	FSACTL_DELETE_DISK		0x163
63#define	FSACTL_QUERY_DISK		0x173
64#define	FSACTL_OPEN_GET_ADAPTER_FIB	CTL_CODE(2100, METHOD_BUFFERED)
65#define	FSACTL_GET_NEXT_ADAPTER_FIB	CTL_CODE(2101, METHOD_BUFFERED)
66#define	FSACTL_CLOSE_GET_ADAPTER_FIB	CTL_CODE(2102, METHOD_BUFFERED)
67#define	FSACTL_MINIPORT_REV_CHECK	CTL_CODE(2107, METHOD_BUFFERED)
68#define	FSACTL_GET_PCI_INFO		CTL_CODE(2119, METHOD_BUFFERED)
69#define	FSACTL_FORCE_DELETE_DISK	CTL_CODE(2120, METHOD_NEITHER)
70#define	FSACTL_REGISTER_FIB_SEND	CTL_CODE(2136, METHOD_BUFFERED)
71#define	FSACTL_GET_CONTAINERS		2131
72#define	FSACTL_GET_VERSION_MATCHING	CTL_CODE(2137, METHOD_BUFFERED)
73#define	FSACTL_SEND_LARGE_FIB		CTL_CODE(2138, METHOD_BUFFERED)
74#define	FSACTL_GET_FEATURES		CTL_CODE(2139, METHOD_BUFFERED)
75
76#pragma pack(1)
77
78struct aac_revision
79{
80	uint32_t compat;
81	uint32_t version;
82	uint32_t build;
83};
84
85struct aac_get_adapter_fib
86{
87	uint32_t context;
88	int32_t wait;
89	uint32_t aif_fib;	/* RAID config app is 32bit */
90};
91
92struct aac_pci_info {
93	uint32_t bus;
94	uint32_t slot;
95};
96
97struct aac_query_disk {
98	int32_t container_no;
99	int32_t bus;
100	int32_t target;
101	int32_t lun;
102	uint32_t valid;
103	uint32_t locked;
104	uint32_t deleted;
105	int32_t instance;
106	char disk_device_name[10];
107	uint32_t unmapped;
108};
109
110struct aac_delete_disk {
111	int32_t nt_disk_no;
112	int32_t container_no;
113};
114
115/*
116 * The following definitions come from Adaptec:
117 */
118typedef union {
119	struct {
120		uint32_t largeLBA  : 1;	/* disk support greater 2TB */
121		uint32_t fReserved : 31;
122	} fBits;
123	uint32_t fValue;
124} featuresState;
125
126struct aac_features {
127	featuresState feat;
128	uint32_t data[31];
129	uint32_t reserved[32];
130};
131
132#pragma pack()
133
134/*
135 * Aligned structure definitions for variable declarations that require
136 * alignment.
137 *
138 * Normally the packed structures are defined in a way that if the initial
139 * member is aligned, then the following members will also be aligned. So
140 * we need only to make the packed structure, ie. the first member, is
141 * aligned to satisfy alignment requirement.
142 */
143union aac_revision_align {
144	struct aac_revision d;
145	uint32_t dummy;
146};
147
148union aac_get_adapter_fib_align {
149	struct aac_get_adapter_fib d;
150	uint32_t dummy;
151};
152
153union aac_pci_info_align {
154	struct aac_pci_info d;
155	uint32_t dummy;
156};
157
158union aac_query_disk_align {
159	struct aac_query_disk d;
160	int32_t dummy;
161};
162
163union aac_delete_disk_align {
164	struct aac_delete_disk d;
165	int32_t dummy;
166};
167
168union aac_features_align {
169	struct aac_features d;
170	uint32_t dummy;
171};
172
173#ifdef	__cplusplus
174}
175#endif
176
177#endif /* _AAC_IOCTL_H_ */
178