9815 Want basic AHCI enclosure services
[unleashed.git] / usr / src / uts / common / sys / bofi.h
blob9e43657fab2fe004555d683e8c93d8e1a0a7a7e2
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
20 * CDDL HEADER END
23 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 #ifndef _SYS_BOFI_H
28 #define _SYS_BOFI_H
30 #pragma ident "%Z%%M% %I% %E% SMI"
33 * header file for bus_ops fault injector
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
40 #include <sys/feature_tests.h>
43 * ioctl command values
45 #define BOFI_ADD_DEF 0
46 #define BOFI_DEL_DEF 1
47 #define BOFI_START 2
48 #define BOFI_STOP 3
49 #define BOFI_CHK_STATE 8
50 #define BOFI_CHK_STATE_W 9
51 #define BOFI_BROADCAST 10
52 #define BOFI_CLEAR_ACC_CHK 11
53 #define BOFI_CLEAR_ERRORS 12
54 #define BOFI_CLEAR_ERRDEFS 13
55 #define BOFI_GET_HANDLES 16
56 #define BOFI_GET_HANDLE_INFO 17
58 #define NAMESIZE 256
59 #define ERRMSGSIZE 256
61 struct acc_log_elem {
62 hrtime_t access_time; /* timestamp */
63 uint_t access_type; /* the type of access */
64 uint_t _pad; /* pad struct to multiple of 8 bytes for x86 */
65 offset_t offset; /* the offset into handle */
66 uint64_t value; /* the value being read or written */
67 uint32_t size; /* the size (in bytes) of the transaction */
68 uint32_t repcount; /* repcount parameter of a ddi_repX routine */
71 /* Access logging flags */
72 #define BOFI_LOG_REPIO 0x1 /* log ddi_repX as multiple accesses */
73 #define BOFI_LOG_WRAP 0x2 /* do continuous logging of accesses */
74 #define BOFI_LOG_FULL 0x4 /* lets callers know if the log has wrapped */
75 #define BOFI_LOG_TIMESTAMP 0x8 /* timestamp each log entry */
77 struct acc_log {
78 uint32_t logsize; /* length of the logbase array */
79 uint32_t entries; /* number of valid log elements */
80 uint_t flags; /* access logging flags */
81 uint_t wrapcnt; /* wrap cnt */
82 hrtime_t start_time; /* activation time */
83 hrtime_t stop_time; /* deactivation time (or time when full) */
84 caddr_t logbase; /* pointer to acc_log_elem struct */
86 #if defined(_SYSCALL32)
88 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
89 #pragma pack(4)
90 #endif
92 struct acc_log32 {
93 uint32_t logsize; /* length of the logbase array */
94 uint32_t entries; /* number of valid log elements */
95 uint_t flags; /* access logging flags */
96 uint_t wrapcnt; /* wrap cnt */
97 hrtime_t start_time; /* activation time */
98 hrtime_t stop_time; /* deactivation time (or time when full) */
99 caddr32_t logbase; /* pointer to acc_log_elem struct */
102 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
103 #pragma pack()
104 #endif
106 #endif /* _SYSCALL32 */
108 struct bofi_errdef {
109 uint_t namesize;
110 char name[NAMESIZE]; /* as returned by ddi_get_name() */
111 /* pointer to char */
112 int instance; /* as returned by ddi_get_instance() */
113 int rnumber; /* as used by ddi_regs_map_setup() */
114 offset_t offset; /* as used by ddi_regs_map_setup() */
115 offset_t len; /* as used by ddi_regs_map_setup() */
116 uint_t access_type;
117 uint_t access_count;
118 uint_t fail_count;
119 uint_t acc_chk;
120 uint_t optype;
121 uint64_t operand;
122 struct acc_log log;
123 uint64_t errdef_handle; /* pointer to void */
125 #if defined(_SYSCALL32)
127 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
128 #pragma pack(4)
129 #endif
131 struct bofi_errdef32 {
132 uint_t namesize;
133 char name[NAMESIZE]; /* as returned by ddi_get_name() */
134 /* pointer to char */
135 int instance; /* as returned by ddi_get_instance() */
136 int rnumber; /* as used by ddi_regs_map_setup() */
137 offset_t offset; /* as used by ddi_regs_map_setup() */
138 offset_t len; /* as used by ddi_regs_map_setup() */
139 uint_t access_type;
140 uint_t access_count;
141 uint_t fail_count;
142 uint_t acc_chk;
143 uint_t optype;
144 uint64_t operand;
145 struct acc_log32 log;
146 uint64_t errdef_handle; /* pointer to void */
149 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
150 #pragma pack()
151 #endif
153 #endif /* _SYSCALL32 */
155 struct bofi_errctl {
156 uint_t namesize;
157 char name[NAMESIZE]; /* as returned by ddi_get_name() */
158 int instance; /* as returned by ddi_get_instance() */
161 struct bofi_get_handles {
162 uint_t namesize;
163 char name[NAMESIZE]; /* as returned by ddi_get_name() */
164 int instance; /* as returned by ddi_get_instance() */
165 int count;
166 caddr_t buffer;
168 #if defined(_SYSCALL32)
169 struct bofi_get_handles32 {
170 uint_t namesize;
171 char name[NAMESIZE]; /* as returned by ddi_get_name() */
172 int instance; /* as returned by ddi_get_instance() */
173 int count;
174 caddr32_t buffer;
176 #endif /* _SYSCALL32 */
178 struct handle_info {
179 int instance;
180 uint_t access_type;
181 int rnumber;
182 int _pad; /* pad to 8 bytes for x86 */
183 offset_t len;
184 offset_t offset;
185 uint64_t addr_cookie;
188 struct bofi_get_hdl_info {
189 uint_t namesize;
190 char name[NAMESIZE]; /* as returned by ddi_get_name() */
191 int count; /* number of handle_info structures */
192 caddr_t hdli; /* pointer to struct handle_info */
194 #if defined(_SYSCALL32)
195 struct bofi_get_hdl_info32 {
196 uint_t namesize;
197 char name[NAMESIZE]; /* as returned by ddi_get_name() */
198 int count; /* number of handle_info structures */
199 caddr32_t hdli; /* pointer to struct handle_info */
201 #endif /* _SYSCALL32 */
204 * values for optype
206 #define BOFI_EQUAL 0
207 #define BOFI_AND 1
208 #define BOFI_OR 2
209 #define BOFI_XOR 3
210 #define BOFI_NO_TRANSFER 4
211 #define BOFI_DELAY_INTR 5
212 #define BOFI_LOSE_INTR 6
213 #define BOFI_EXTRA_INTR 7
214 #define BOFI_NOP 16
216 * values for access_type
218 #define BOFI_PIO_R 1
219 #define BOFI_PIO_W 2
220 #define BOFI_PIO_RW (BOFI_PIO_R|BOFI_PIO_W)
221 #define BOFI_DMA_R 4
222 #define BOFI_DMA_W 8
223 #define BOFI_DMA_RW (BOFI_DMA_R|BOFI_DMA_W)
224 #define BOFI_INTR 64
225 #define BOFI_LOG 128
227 struct bofi_errstate {
228 hrtime_t fail_time; /* time that count went to zero */
229 hrtime_t msg_time; /* time that ddi_report_error was called */
230 uint_t access_count;
231 uint_t fail_count;
232 uint_t acc_chk;
233 uint_t errmsg_count;
234 char buffer[ERRMSGSIZE];
235 ddi_fault_impact_t severity;
236 struct acc_log log;
237 uint64_t errdef_handle;
239 #if defined(_SYSCALL32)
241 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
242 #pragma pack(4)
243 #endif
245 struct bofi_errstate32 {
246 hrtime_t fail_time; /* time that count went to zero */
247 hrtime_t msg_time; /* time that ddi_report_error was called */
248 uint_t access_count;
249 uint_t fail_count;
250 uint_t acc_chk;
251 uint_t errmsg_count;
252 char buffer[ERRMSGSIZE];
253 ddi_fault_impact_t severity;
254 struct acc_log32 log;
255 uint64_t errdef_handle;
258 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
259 #pragma pack()
260 #endif
262 #endif /* _SYSCALL32 */
264 #ifdef __cplusplus
266 #endif
268 #endif /* _SYS_BOFI_H */