1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 27 #ifndef _SDBC_IOCTL_H 28 #define _SDBC_IOCTL_H 29 30 #ifdef __cplusplus 31 extern "C" { 32 #endif 33 34 #include <sys/unistat/spcs_s.h> /* included for unistat */ 35 36 /* 37 * Generic sdbc ioctl arguments structure. 38 * Individual ioctl's will use 0-n of these arguments. 39 * 40 * Each sdbc ioctl is described first by the command number 41 * e.g. #define SDBC_ADUMP _SDBC_(4) 42 * 43 * Followed by a description of each argument (if any). 44 * Each argument is on a single line. 45 * 46 */ 47 48 typedef struct _sdbc_ioctl_s { 49 long arg0; 50 long arg1; 51 long arg2; 52 long arg3; 53 long arg4; 54 long magic; 55 spcs_s_info_t sdbc_ustatus; 56 long pad[1]; 57 } _sdbc_ioctl_t; 58 59 typedef struct _sdbc_ioctl32_s { 60 int32_t arg0; 61 int32_t arg1; 62 int32_t arg2; 63 int32_t arg3; 64 int32_t arg4; 65 int32_t magic; 66 spcs_s_info32_t sdbc_ustatus; 67 int32_t pad[1]; 68 } _sdbc_ioctl32_t; 69 70 /* 71 * Ioctl command numbers 72 */ 73 74 #define _SDBC_(x) (('B'<<16)|('C'<<8)|(x)) 75 76 /* 77 * Old ioctl commands prior to ioctl reorg. These could be re-used 78 * at a later date 79 */ 80 #define SDBC_UNUSED_1 _SDBC_(1) /* OLD out of date syscall -> ioctl stuff */ 81 #define SDBC_UNUSED_2 _SDBC_(2) /* OLD INFSD_CONC_WRITE */ 82 #define SDBC_UNUSED_3 _SDBC_(3) /* OLD muli-subopcode configuration */ 83 84 #define SDBC_ADUMP _SDBC_(4) 85 /* 86 * int cd; 87 * _sdtr_table * table; 88 * _sdtr_t * trace_buffer; 89 * int size_of_trace_buffer; 90 * int flags; 91 */ 92 93 #define SDBC_TEST_INIT _SDBC_(5) /* TESTING - tdaemon parameters */ 94 /* 95 * char * device_name; 96 * int index; 97 * int len; 98 * int track_size; 99 * int flags; 100 */ 101 102 #define SDBC_TEST_START _SDBC_(6) /* TESTING - tdaemon .... */ 103 /* 104 * int num; 105 * int type; 106 * int loops; 107 * int from; 108 * int seed; 109 */ 110 111 #define SDBC_TEST_END _SDBC_(7) /* TESTING - tdaemon .... */ 112 /* NO-ARGS */ 113 114 #define SDBC_ENABLE _SDBC_(8) /* configure sdbc */ 115 /* 116 * _sd_cache_param_t * user_configuration; 117 */ 118 119 #define SDBC_DISABLE _SDBC_(9) /* deconfigure sdbc */ 120 /* NO-ARGS */ 121 122 #define SDBC_SET_CD_HINT _SDBC_(10) 123 /* 124 * int cd; 125 * int hint; 126 * int flags; 127 */ 128 129 #define SDBC_GET_CD_HINT _SDBC_(11) 130 /* 131 * int cd; 132 */ 133 134 #define SDBC_SET_NODE_HINT _SDBC_(12) 135 /* 136 * int hint; 137 * int flags; 138 */ 139 140 #define SDBC_GET_NODE_HINT _SDBC_(13) 141 /* NO-ARGS */ 142 143 #define SDBC_STATS _SDBC_(14) 144 /* 145 * _sd_stats_t * stats buffer; 146 */ 147 148 #define SDBC_ZAP_STATS _SDBC_(15) 149 /* NO-ARGS */ 150 151 #define SDBC_GET_CD_BLK _SDBC_(16) 152 /* 153 * int cd; 154 * nsc_off_t * block_number; 155 * void * addresses[5]; 156 */ 157 158 #define SDBC_GET_CLUSTER_SIZE _SDBC_(17) 159 /* 160 * int * cluster_size; 161 */ 162 163 #define SDBC_GET_CLUSTER_DATA _SDBC_(18) 164 /* 165 * char * buffer[2*cluster_size]; 166 */ 167 168 #define SDBC_GET_GLMUL_SIZES _SDBC_(19) 169 /* 170 * int * global_sizes; 171 */ 172 173 #define SDBC_GET_GLMUL_INFO _SDBC_(20) 174 /* 175 * char * buffer[ 2 times sum of global_sizes]; 176 */ 177 178 /* Unused _SDBC(21,22) */ 179 180 #define SDBC_STATE_DEV _SDBC_(23) /* set path to sdbc state file/volume */ 181 /* 182 * char * device_name; 183 * int device_name_length; 184 */ 185 #define SDBC_TOGGLE_FLUSH _SDBC_(24) /* TESTING - toggle flusher enable */ 186 /* NO-ARGS */ 187 188 #define SDBC_INJ_IOERR _SDBC_(25) /* TESTING - inject i/o error */ 189 /* 190 * int cd 191 * int io_error_number; 192 */ 193 194 #define SDBC_CLR_IOERR _SDBC_(26) /* TESTING - clear injected i/o error */ 195 /* 196 * int cd 197 */ 198 199 #define SDBC_GET_CONFIG _SDBC_(27) /* retrieve current configuration */ 200 /* 201 * _sdbc_config_t *current_config; 202 */ 203 204 #define SDBC_SET_CONFIG _SDBC_(28) /* enable cache configuration info */ 205 /* 206 * _sdbc_config_t *mgmt_config_info; 207 */ 208 209 /* Unused _SDBC(29) */ 210 211 #define SDBC_MAXFILES _SDBC_(30) /* get maxfiles */ 212 /* 213 * int * max_files; 214 */ 215 216 #define SDBC_VERSION _SDBC_(31) 217 /* 218 * cache_version_t *cache_version; 219 */ 220 221 #define _SD_MAGIC 0xD017 222 223 #define MAX_CACHE_NET 4 224 #define MAX_REMOTE_MIRRORS 64 225 #define MAX_MIR_SEGS MAX_REMOTE_MIRRORS 226 #define MAX_CACHE_SIZE 1024 227 228 /* unexposed configuration bits */ 229 #define CFG_USE_DMCHAIN 0x1 230 #define CFG_STATIC_CACHE 0x2 231 232 #define RESERVED1_DEFAULTS (CFG_STATIC_CACHE) 233 234 /* maintain _sd_cache_param struct layout (MAX_CACHE_NET is deprecated) */ 235 #define CACHE_MEM_PAD 4 236 237 typedef struct _sd_cache_param { 238 int mirror_host; 239 int blk_size; 240 int threads; 241 int procs; 242 int test_demons; 243 int write_cache; 244 int trace_size; 245 int trace_mask; 246 int trace_lbolt; 247 int trace_good; 248 int trace_net; /* not used */ 249 int iobuf; 250 int num_handles; 251 int cache_mem[CACHE_MEM_PAD]; 252 int prot_lru; 253 int gen_pattern; 254 uint_t fill_pattern; 255 short nodes_conf[MAX_REMOTE_MIRRORS]; /* Actual Nodes in conf file */ 256 short num_nodes; /* Number of nodes in sd.cf */ 257 short net_type; /* not used */ 258 ushort_t magic; /* Check for proper sd_cadmin */ 259 int reserved1; /* unexposed config options */ 260 int reserved[8]; 261 } _sd_cache_param_t; 262 263 typedef struct _sdbc_config { 264 int cache_mem[CACHE_MEM_PAD]; 265 int threads; 266 int enabled; 267 ushort_t magic; 268 } _sdbc_config_t; 269 270 typedef struct cache_version { 271 int major; /* Major release number */ 272 int minor; /* Minor release number */ 273 int micro; /* Micro release number */ 274 int baseline; /* Baseline revison number */ 275 } cache_version_t; 276 277 #if !defined(_KERNEL) 278 279 280 /* Keep this definition in sync with the one in rdc_ioctl.h. */ 281 #ifndef SDBC_IOCTL 282 #define SDBC_IOCTL(cmd, a0, a1, a2, a3, a4, ustatus) \ 283 sdbc_ioctl((long)(cmd), (long)(a0), (long)(a1), (long)(a2), \ 284 (long)(a3), (long)(a4), (spcs_s_info_t *)(ustatus)) 285 #endif 286 287 int sdbc_ioctl(long, long, long, long, long, long, spcs_s_info_t *); 288 289 290 #endif /* ! _KERNEL */ 291 292 #ifdef __cplusplus 293 } 294 #endif 295 296 #endif /* _SDBC_IOCTL_H */ 297