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 2009 Sun Microsystems, Inc.  All rights reserved.
  23  * Use is subject to license terms.
  24  */
  25 
  26 #ifndef _STMF_SBD_IOCTL_H
  27 #define _STMF_SBD_IOCTL_H
  28 
  29 #ifdef  __cplusplus
  30 extern "C" {
  31 #endif
  32 
  33 /*
  34  * error codes from sbd.
  35  */
  36 typedef enum sbd_ret {
  37         SBD_RET_META_CREATION_FAILED = 0x01,
  38         SBD_RET_INVALID_BLKSIZE,
  39         SBD_RET_REQUIRES_SEPARATE_META,
  40         SBD_RET_FILE_ALREADY_REGISTERED,
  41         SBD_RET_GUID_ALREADY_REGISTERED,
  42         SBD_RET_DATA_PATH_NOT_ABSOLUTE,
  43         SBD_RET_META_PATH_NOT_ABSOLUTE,
  44         SBD_RET_META_FILE_LOOKUP_FAILED,
  45         SBD_RET_ZFS_META_CREATE_FAILED,
  46         SBD_ZVOL_META_NAME_MISMATCH,
  47         SBD_RET_DATA_FILE_LOOKUP_FAILED,
  48         SBD_RET_WRONG_META_FILE_TYPE,
  49         SBD_RET_WRONG_DATA_FILE_TYPE,
  50         SBD_RET_DATA_FILE_OPEN_FAILED,
  51         SBD_RET_META_FILE_OPEN_FAILED,
  52         SBD_RET_DATA_FILE_GETATTR_FAILED,
  53         SBD_RET_META_FILE_GETATTR_FAILED,
  54         SBD_RET_FILE_SIZE_ERROR,
  55         SBD_RET_FILE_ALIGN_ERROR,
  56         SBD_RET_SIZE_OUT_OF_RANGE,
  57         SBD_RET_SIZE_NOT_SUPPORTED_BY_FS,
  58         SBD_RET_NO_META,
  59         SBD_RET_VERSION_NOT_SUPPORTED,
  60         SBD_RET_LU_BUSY,
  61         SBD_RET_NOT_FOUND,
  62         SBD_RET_INSUFFICIENT_BUF_SPACE,
  63         SBD_RET_WRITE_CACHE_SET_FAILED,
  64         SBD_RET_ACCESS_STATE_FAILED,
  65 
  66         SBD_RET_MAX_VAL
  67 } sbd_ret_t;
  68 
  69 #define SBD_IOCTL_DEF(n)        ((((int)0x5B) << 16) | (n))
  70 #define SBD_IOCTL_CREATE_AND_REGISTER_LU                SBD_IOCTL_DEF(1)
  71 #define SBD_IOCTL_IMPORT_LU                             SBD_IOCTL_DEF(2)
  72 #define SBD_IOCTL_DELETE_LU                             SBD_IOCTL_DEF(3)
  73 #define SBD_IOCTL_MODIFY_LU                             SBD_IOCTL_DEF(4)
  74 #define SBD_IOCTL_GET_LU_PROPS                          SBD_IOCTL_DEF(5)
  75 #define SBD_IOCTL_GET_LU_LIST                           SBD_IOCTL_DEF(6)
  76 #define SBD_IOCTL_SET_LU_STANDBY                        SBD_IOCTL_DEF(7)
  77 #define SBD_IOCTL_SET_GLOBAL_LU                         SBD_IOCTL_DEF(8)
  78 #define SBD_IOCTL_GET_GLOBAL_LU                         SBD_IOCTL_DEF(9)
  79 
  80 typedef struct sbd_create_and_reg_lu {
  81         uint32_t        slu_struct_size;
  82         uint16_t        slu_meta_fname_valid:1,
  83                         slu_lu_size_valid:1,
  84                         slu_blksize_valid:1,
  85                         slu_vid_valid:1,
  86                         slu_pid_valid:1,
  87                         slu_rev_valid:1,
  88                         slu_serial_valid:1,
  89                         slu_alias_valid:1,
  90                         slu_mgmt_url_valid:1,
  91                         slu_guid_valid:1,
  92                         slu_company_id_valid:1,
  93                         slu_host_id_valid:1,
  94                         slu_writeback_cache_disable_valid:1,
  95                         slu_writeback_cache_disable:1,
  96                         slu_write_protected:1;
  97         uint16_t        slu_meta_fname_off;
  98         uint64_t        slu_lu_size;
  99         uint16_t        slu_data_fname_off;
 100         uint16_t        slu_serial_off;
 101         uint8_t         slu_serial_size;
 102         uint8_t         slu_ret_filesize_nbits;
 103         uint16_t        slu_blksize;
 104         uint32_t        slu_company_id;
 105         uint16_t        slu_alias_off;
 106         uint16_t        slu_mgmt_url_off;
 107         uint32_t        slu_host_id;
 108         char            slu_rev[4];
 109         char            slu_vid[8];
 110         char            slu_pid[16];
 111         uint8_t         slu_guid[16];
 112         char            slu_buf[8];     /* likely more than 8 */
 113 } sbd_create_and_reg_lu_t;
 114 
 115 typedef struct sbd_global_props {
 116         uint32_t        mlu_struct_size;
 117         uint32_t        mlu_vid_valid:1,
 118                         mlu_pid_valid:1,
 119                         mlu_rev_valid:1,
 120                         mlu_serial_valid:1,
 121                         mlu_mgmt_url_valid:1,
 122                         mlu_company_id_valid:1,
 123                         mlu_host_id_valid:1;
 124         uint16_t        mlu_serial_off;
 125         uint8_t         mlu_serial_size;
 126         uint8_t         mlu_rsvd1;
 127         uint32_t        mlu_company_id;
 128         uint16_t        mlu_mgmt_url_off;
 129         uint16_t        rsvd1;
 130         uint32_t        mlu_host_id;
 131         uint32_t        mlu_buf_size_needed;
 132         char            mlu_rev[4];
 133         char            mlu_vid[8];
 134         char            mlu_pid[16];
 135         char            mlu_buf[8];     /* likely more than 8 */
 136 } sbd_global_props_t;
 137 
 138 typedef struct sbd_set_lu_standby {
 139         uint8_t         stlu_guid[16];
 140 } sbd_set_lu_standby_t;
 141 
 142 
 143 typedef struct sbd_import_lu {
 144         uint32_t        ilu_struct_size;
 145         uint32_t        ilu_rsvd;
 146         uint8_t         ilu_ret_guid[16];
 147         char            ilu_meta_fname[8]; /* Can be more than 8 */
 148 } sbd_import_lu_t;
 149 
 150 typedef struct sbd_modify_lu {
 151         uint32_t        mlu_struct_size;
 152         uint32_t        mlu_lu_size_valid:1,
 153                         mlu_serial_valid:1,
 154                         mlu_alias_valid:1,
 155                         mlu_mgmt_url_valid:1,
 156                         mlu_writeback_cache_disable_valid:1,
 157                         mlu_writeback_cache_disable:1,
 158                         mlu_write_protected_valid:1,
 159                         mlu_write_protected:1,
 160                         mlu_by_guid:1,
 161                         mlu_by_fname:1,
 162                         mlu_standby_valid:1,
 163                         mlu_standby:1;
 164         uint64_t        mlu_lu_size;
 165         uint16_t        mlu_alias_off;
 166         uint16_t        mlu_mgmt_url_off;
 167         uint16_t        mlu_serial_off;
 168         uint16_t        mlu_serial_size;
 169         uint16_t        mlu_fname_off;
 170         uint16_t        mlu_rsvd1;
 171         uint32_t        mlu_rsvd2;
 172         uint8_t         mlu_input_guid[16];
 173         char            mlu_buf[8]; /* can be more than 8 */
 174 } sbd_modify_lu_t;
 175 
 176 typedef struct sbd_delete_lu {
 177         uint32_t        dlu_struct_size;
 178         uint16_t        dlu_by_guid:1,
 179                         dlu_by_meta_name:1;
 180         uint16_t        dlu_rsvd;
 181         uint8_t         dlu_guid[16];
 182         uint8_t         dlu_meta_name[8];
 183 } sbd_delete_lu_t;
 184 
 185 /*
 186  * sbd access states
 187  */
 188 #define SBD_LU_ACTIVE                   1
 189 #define SBD_LU_TRANSITION_TO_ACTIVE     2
 190 #define SBD_LU_STANDBY                  3
 191 #define SBD_LU_TRANSITION_TO_STANDBY    4
 192 
 193 typedef struct sbd_lu_props {
 194         uint32_t        slp_input_guid:1,       /* GUID or meta filename */
 195                         slp_separate_meta:1,
 196                         slp_meta_fname_valid:1,
 197                         slp_data_fname_valid:1,
 198                         slp_zfs_meta:1,
 199                         slp_alias_valid:1,
 200                         slp_mgmt_url_valid:1,
 201                         slp_lu_vid:1,
 202                         slp_lu_pid:1,
 203                         slp_lu_rev:1,
 204                         slp_serial_valid:1,
 205                         slp_writeback_cache_disable_cur:1,
 206                         slp_writeback_cache_disable_saved:1,
 207                         slp_write_protected:1;
 208         uint16_t        slp_meta_fname_off;
 209         uint16_t        slp_data_fname_off;
 210         uint64_t        slp_lu_size;
 211         uint16_t        slp_serial_off;
 212         uint16_t        slp_blksize;
 213         uint16_t        slp_alias_off;
 214         uint16_t        slp_mgmt_url_off;
 215         uint32_t        slp_buf_size_needed;    /* Upon return */
 216         uint16_t        slp_serial_size;
 217         uint16_t        slp_access_state;
 218         char            slp_rev[4];
 219         char            slp_vid[8];
 220         char            slp_pid[16];
 221         uint8_t         slp_guid[16];
 222         uint8_t         slp_buf[8];     /* likely more than 8 */
 223 } sbd_lu_props_t;
 224 
 225 #ifdef  __cplusplus
 226 }
 227 #endif
 228 
 229 #endif /* _STMF_SBD_IOCTL_H */