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 #ifndef _SV_H 27 #define _SV_H 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 34 /* 35 * Storage Volume Character and Block Driver (SV) 36 * Public header file. 37 * SPARC case 1998/036. 38 * PSARC case 1999/023. 39 */ 40 41 #define SV_MAXPATH NSC_MAXPATH 42 #define SV_DEVICE "/dev/sv" 43 44 45 /* 46 * Ioctl structures 47 */ 48 49 typedef struct sv_name_s { 50 char svn_path[SV_MAXPATH]; /* path to underlying raw device */ 51 time_t svn_timestamp; /* timestamp of successful enable */ 52 int svn_nblocks; /* size of device */ 53 int svn_mode; /* NSC_DEVICE | NSC_CACHE */ 54 } sv_name_t; 55 56 57 #ifdef _KERNEL 58 59 typedef struct sv_name32_s { 60 char svn_path[SV_MAXPATH]; /* path to underlying raw device */ 61 int32_t svn_timestamp; /* timestamp of successful enable */ 62 int32_t svn_nblocks; /* size of device */ 63 int32_t svn_mode; /* NSC_DEVICE | NSC_CACHE */ 64 } sv_name32_t; 65 66 #endif /* _KERNEL */ 67 68 69 typedef struct sv_list_s { 70 spcs_s_info_t svl_error; /* Error information */ 71 time_t svl_timestamp; /* time of successful {en,dis}able */ 72 int svl_count; /* Count of elements in svl_names */ 73 int svl_maxdevs; /* Max # of devices that can be used */ 74 sv_name_t *svl_names; /* pointer to names array */ 75 } sv_list_t; 76 77 78 #ifdef _KERNEL 79 80 typedef struct sv_list32_s { 81 spcs_s_info32_t svl_error; /* Error information */ 82 int32_t svl_timestamp; /* time of successful {en,dis}able */ 83 int32_t svl_count; /* Count of elements in svl_names */ 84 int32_t svl_maxdevs; /* Max # of devices that can be used */ 85 uint32_t svl_names; /* pointer to names array */ 86 } sv_list32_t; 87 88 #endif /* _KERNEL */ 89 90 91 typedef struct sv_conf_s { 92 spcs_s_info_t svc_error; /* Error information */ 93 char svc_path[SV_MAXPATH]; /* path to underlying raw device */ 94 int svc_flag; /* NSC_DEVICE | NSC_CACHE */ 95 major_t svc_major; /* major_t of underlying raw device */ 96 minor_t svc_minor; /* minor_t of underlying raw device */ 97 } sv_conf_t; 98 99 #ifdef _KERNEL 100 101 typedef struct sv_conf32_s { 102 spcs_s_info32_t svc_error; /* Error information */ 103 char svc_path[SV_MAXPATH]; /* path to underlying raw device */ 104 int32_t svc_flag; /* NSC_DEVICE | NSC_CACHE */ 105 major_t svc_major; /* major_t of underlying raw device */ 106 minor_t svc_minor; /* minor_t of underlying raw device */ 107 } sv_conf32_t; 108 109 #endif /* _KERNEL */ 110 111 112 typedef struct sv_version_s { 113 spcs_s_info_t svv_error; /* Error information */ 114 int svv_major_rev; /* Major revision */ 115 int svv_minor_rev; /* Minor revision */ 116 int svv_micro_rev; /* Micro revision */ 117 int svv_baseline_rev; /* Baseline revision */ 118 } sv_version_t; 119 120 #ifdef _KERNEL 121 122 typedef struct sv_version32_s { 123 spcs_s_info32_t svv_error; /* Error information */ 124 int32_t svv_major_rev; /* Major revision */ 125 int32_t svv_minor_rev; /* Minor revision */ 126 int32_t svv_micro_rev; /* Micro revision */ 127 int32_t svv_baseline_rev; /* Baseline revision */ 128 } sv_version32_t; 129 130 #endif /* _KERNEL */ 131 132 133 #ifdef _KERNEL 134 135 /* 136 * SV guard devices. 137 */ 138 139 typedef struct sv_guard_s { 140 int sg_magic; /* Magic # */ 141 int sg_version; /* Version # */ 142 char *sg_pathname; /* Pathname of device to guard */ 143 char *sg_module; /* Module name of client */ 144 int sg_kernel; /* Prevent user access if true */ 145 spcs_s_info_t sg_error; /* Error to be returned to client */ 146 } sv_guard_t; 147 148 #define SV_SG_MAGIC 0x47554152 149 #define SV_SG_VERSION 1 150 151 #endif /* _KERNEL */ 152 153 154 /* 155 * Ioctl numbers. 156 */ 157 158 #define __SV__(x) (('S'<<16)|('V'<<8)|(x)) 159 160 #define SVIOC_ENABLE __SV__(1) 161 #define SVIOC_DISABLE __SV__(2) 162 #define SVIOC_LIST __SV__(3) 163 #define SVIOC_VERSION __SV__(4) 164 #define SVIOC_UNLOAD __SV__(5) 165 166 /* 167 * seconds to wait before unload, to drain lingering IOs. 168 */ 169 #define SV_WAIT_UNLOAD 10 170 171 #ifdef __cplusplus 172 } 173 #endif 174 175 #endif /* _SV_H */