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 30extern "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 49typedef 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 59typedef 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 69typedef 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 80typedef 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 91typedef 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 101typedef 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 112typedef 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 122typedef 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 139typedef 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 */ 176