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 */