1fcf3ce44SJohn Forte /*
2fcf3ce44SJohn Forte  * CDDL HEADER START
3fcf3ce44SJohn Forte  *
4fcf3ce44SJohn Forte  * The contents of this file are subject to the terms of the
5fcf3ce44SJohn Forte  * Common Development and Distribution License (the "License").
6fcf3ce44SJohn Forte  * You may not use this file except in compliance with the License.
7fcf3ce44SJohn Forte  *
8fcf3ce44SJohn Forte  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9fcf3ce44SJohn Forte  * or http://www.opensolaris.org/os/licensing.
10fcf3ce44SJohn Forte  * See the License for the specific language governing permissions
11fcf3ce44SJohn Forte  * and limitations under the License.
12fcf3ce44SJohn Forte  *
13fcf3ce44SJohn Forte  * When distributing Covered Code, include this CDDL HEADER in each
14fcf3ce44SJohn Forte  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15fcf3ce44SJohn Forte  * If applicable, add the following below this CDDL HEADER, with the
16fcf3ce44SJohn Forte  * fields enclosed by brackets "[]" replaced with your own identifying
17fcf3ce44SJohn Forte  * information: Portions Copyright [yyyy] [name of copyright owner]
18fcf3ce44SJohn Forte  *
19fcf3ce44SJohn Forte  * CDDL HEADER END
20fcf3ce44SJohn Forte  */
21fcf3ce44SJohn Forte /*
228fe96085Stim szeto  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23fcf3ce44SJohn Forte  * Use is subject to license terms.
24*b77b9231SDan McDonald  *
25*b77b9231SDan McDonald  * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
26fcf3ce44SJohn Forte  */
27fcf3ce44SJohn Forte 
28fcf3ce44SJohn Forte #ifndef	_STMF_SBD_IOCTL_H
29fcf3ce44SJohn Forte #define	_STMF_SBD_IOCTL_H
30fcf3ce44SJohn Forte 
31fcf3ce44SJohn Forte #ifdef	__cplusplus
32fcf3ce44SJohn Forte extern "C" {
33fcf3ce44SJohn Forte #endif
34fcf3ce44SJohn Forte 
35fcf3ce44SJohn Forte /*
368fe96085Stim szeto  * error codes from sbd.
37fcf3ce44SJohn Forte  */
388fe96085Stim szeto typedef enum sbd_ret {
398fe96085Stim szeto 	SBD_RET_META_CREATION_FAILED = 0x01,
408fe96085Stim szeto 	SBD_RET_INVALID_BLKSIZE,
418fe96085Stim szeto 	SBD_RET_REQUIRES_SEPARATE_META,
428fe96085Stim szeto 	SBD_RET_FILE_ALREADY_REGISTERED,
438fe96085Stim szeto 	SBD_RET_GUID_ALREADY_REGISTERED,
448fe96085Stim szeto 	SBD_RET_DATA_PATH_NOT_ABSOLUTE,
458fe96085Stim szeto 	SBD_RET_META_PATH_NOT_ABSOLUTE,
468fe96085Stim szeto 	SBD_RET_META_FILE_LOOKUP_FAILED,
478fe96085Stim szeto 	SBD_RET_ZFS_META_CREATE_FAILED,
488fe96085Stim szeto 	SBD_ZVOL_META_NAME_MISMATCH,
498fe96085Stim szeto 	SBD_RET_DATA_FILE_LOOKUP_FAILED,
508fe96085Stim szeto 	SBD_RET_WRONG_META_FILE_TYPE,
518fe96085Stim szeto 	SBD_RET_WRONG_DATA_FILE_TYPE,
528fe96085Stim szeto 	SBD_RET_DATA_FILE_OPEN_FAILED,
538fe96085Stim szeto 	SBD_RET_META_FILE_OPEN_FAILED,
548fe96085Stim szeto 	SBD_RET_DATA_FILE_GETATTR_FAILED,
558fe96085Stim szeto 	SBD_RET_META_FILE_GETATTR_FAILED,
568fe96085Stim szeto 	SBD_RET_FILE_SIZE_ERROR,
578fe96085Stim szeto 	SBD_RET_FILE_ALIGN_ERROR,
588fe96085Stim szeto 	SBD_RET_SIZE_OUT_OF_RANGE,
598fe96085Stim szeto 	SBD_RET_SIZE_NOT_SUPPORTED_BY_FS,
608fe96085Stim szeto 	SBD_RET_NO_META,
618fe96085Stim szeto 	SBD_RET_VERSION_NOT_SUPPORTED,
628fe96085Stim szeto 	SBD_RET_LU_BUSY,
638fe96085Stim szeto 	SBD_RET_NOT_FOUND,
648fe96085Stim szeto 	SBD_RET_INSUFFICIENT_BUF_SPACE,
658fe96085Stim szeto 	SBD_RET_WRITE_CACHE_SET_FAILED,
6645039663SJohn Forte 	SBD_RET_ACCESS_STATE_FAILED,
67fcf3ce44SJohn Forte 
688fe96085Stim szeto 	SBD_RET_MAX_VAL
698fe96085Stim szeto } sbd_ret_t;
70fcf3ce44SJohn Forte 
718fe96085Stim szeto #define	SBD_IOCTL_DEF(n)	((((int)0x5B) << 16) | (n))
728fe96085Stim szeto #define	SBD_IOCTL_CREATE_AND_REGISTER_LU		SBD_IOCTL_DEF(1)
738fe96085Stim szeto #define	SBD_IOCTL_IMPORT_LU				SBD_IOCTL_DEF(2)
748fe96085Stim szeto #define	SBD_IOCTL_DELETE_LU				SBD_IOCTL_DEF(3)
758fe96085Stim szeto #define	SBD_IOCTL_MODIFY_LU				SBD_IOCTL_DEF(4)
768fe96085Stim szeto #define	SBD_IOCTL_GET_LU_PROPS				SBD_IOCTL_DEF(5)
778fe96085Stim szeto #define	SBD_IOCTL_GET_LU_LIST				SBD_IOCTL_DEF(6)
7845039663SJohn Forte #define	SBD_IOCTL_SET_LU_STANDBY			SBD_IOCTL_DEF(7)
797beff157SJohn Forte #define	SBD_IOCTL_SET_GLOBAL_LU				SBD_IOCTL_DEF(8)
807beff157SJohn Forte #define	SBD_IOCTL_GET_GLOBAL_LU				SBD_IOCTL_DEF(9)
81*b77b9231SDan McDonald #define	SBD_IOCTL_GET_UNMAP_PROPS			SBD_IOCTL_DEF(10)
82fcf3ce44SJohn Forte 
838fe96085Stim szeto typedef struct sbd_create_and_reg_lu {
848fe96085Stim szeto 	uint32_t	slu_struct_size;
858fe96085Stim szeto 	uint16_t	slu_meta_fname_valid:1,
868fe96085Stim szeto 			slu_lu_size_valid:1,
878fe96085Stim szeto 			slu_blksize_valid:1,
888fe96085Stim szeto 			slu_vid_valid:1,
898fe96085Stim szeto 			slu_pid_valid:1,
908fe96085Stim szeto 			slu_rev_valid:1,
918fe96085Stim szeto 			slu_serial_valid:1,
928fe96085Stim szeto 			slu_alias_valid:1,
932f624233SNattuvetty Bhavyan 			slu_mgmt_url_valid:1,
948fe96085Stim szeto 			slu_guid_valid:1,
958fe96085Stim szeto 			slu_company_id_valid:1,
96fdcc480aSJohn Forte 			slu_host_id_valid:1,
978fe96085Stim szeto 			slu_writeback_cache_disable_valid:1,
988fe96085Stim szeto 			slu_writeback_cache_disable:1,
998fe96085Stim szeto 			slu_write_protected:1;
1008fe96085Stim szeto 	uint16_t	slu_meta_fname_off;
1018fe96085Stim szeto 	uint64_t	slu_lu_size;
1028fe96085Stim szeto 	uint16_t	slu_data_fname_off;
1038fe96085Stim szeto 	uint16_t	slu_serial_off;
1048fe96085Stim szeto 	uint8_t		slu_serial_size;
1058fe96085Stim szeto 	uint8_t		slu_ret_filesize_nbits;
1068fe96085Stim szeto 	uint16_t	slu_blksize;
1078fe96085Stim szeto 	uint32_t	slu_company_id;
1088fe96085Stim szeto 	uint16_t	slu_alias_off;
1092f624233SNattuvetty Bhavyan 	uint16_t	slu_mgmt_url_off;
110fdcc480aSJohn Forte 	uint32_t	slu_host_id;
1118fe96085Stim szeto 	char		slu_rev[4];
1128fe96085Stim szeto 	char		slu_vid[8];
1138fe96085Stim szeto 	char		slu_pid[16];
1148fe96085Stim szeto 	uint8_t		slu_guid[16];
1158fe96085Stim szeto 	char		slu_buf[8];	/* likely more than 8 */
1168fe96085Stim szeto } sbd_create_and_reg_lu_t;
117fcf3ce44SJohn Forte 
1187beff157SJohn Forte typedef struct sbd_global_props {
1197beff157SJohn Forte 	uint32_t	mlu_struct_size;
1207beff157SJohn Forte 	uint32_t	mlu_vid_valid:1,
1217beff157SJohn Forte 			mlu_pid_valid:1,
1227beff157SJohn Forte 			mlu_rev_valid:1,
1237beff157SJohn Forte 			mlu_serial_valid:1,
1247beff157SJohn Forte 			mlu_mgmt_url_valid:1,
1257beff157SJohn Forte 			mlu_company_id_valid:1,
1267beff157SJohn Forte 			mlu_host_id_valid:1;
1277beff157SJohn Forte 	uint16_t	mlu_serial_off;
1287beff157SJohn Forte 	uint8_t		mlu_serial_size;
1297beff157SJohn Forte 	uint8_t		mlu_rsvd1;
1307beff157SJohn Forte 	uint32_t	mlu_company_id;
1317beff157SJohn Forte 	uint16_t	mlu_mgmt_url_off;
1327beff157SJohn Forte 	uint16_t	rsvd1;
1337beff157SJohn Forte 	uint32_t	mlu_host_id;
1347beff157SJohn Forte 	uint32_t	mlu_buf_size_needed;
1357beff157SJohn Forte 	char		mlu_rev[4];
1367beff157SJohn Forte 	char		mlu_vid[8];
1377beff157SJohn Forte 	char		mlu_pid[16];
1387beff157SJohn Forte 	char		mlu_buf[8];	/* likely more than 8 */
1397beff157SJohn Forte } sbd_global_props_t;
1407beff157SJohn Forte 
14145039663SJohn Forte typedef struct sbd_set_lu_standby {
14245039663SJohn Forte 	uint8_t		stlu_guid[16];
14345039663SJohn Forte } sbd_set_lu_standby_t;
14445039663SJohn Forte 
14545039663SJohn Forte 
1468fe96085Stim szeto typedef struct sbd_import_lu {
1478fe96085Stim szeto 	uint32_t	ilu_struct_size;
1488fe96085Stim szeto 	uint32_t	ilu_rsvd;
1498fe96085Stim szeto 	uint8_t		ilu_ret_guid[16];
1508fe96085Stim szeto 	char		ilu_meta_fname[8]; /* Can be more than 8 */
1518fe96085Stim szeto } sbd_import_lu_t;
152fcf3ce44SJohn Forte 
1538fe96085Stim szeto typedef struct sbd_modify_lu {
1548fe96085Stim szeto 	uint32_t	mlu_struct_size;
1558fe96085Stim szeto 	uint32_t	mlu_lu_size_valid:1,
1568fe96085Stim szeto 			mlu_serial_valid:1,
1578fe96085Stim szeto 			mlu_alias_valid:1,
1582f624233SNattuvetty Bhavyan 			mlu_mgmt_url_valid:1,
1598fe96085Stim szeto 			mlu_writeback_cache_disable_valid:1,
1608fe96085Stim szeto 			mlu_writeback_cache_disable:1,
1618fe96085Stim szeto 			mlu_write_protected_valid:1,
1628fe96085Stim szeto 			mlu_write_protected:1,
1638fe96085Stim szeto 			mlu_by_guid:1,
16445039663SJohn Forte 			mlu_by_fname:1,
16545039663SJohn Forte 			mlu_standby_valid:1,
16645039663SJohn Forte 			mlu_standby:1;
1678fe96085Stim szeto 	uint64_t	mlu_lu_size;
1688fe96085Stim szeto 	uint16_t	mlu_alias_off;
1692f624233SNattuvetty Bhavyan 	uint16_t	mlu_mgmt_url_off;
1708fe96085Stim szeto 	uint16_t	mlu_serial_off;
1718fe96085Stim szeto 	uint16_t	mlu_serial_size;
1728fe96085Stim szeto 	uint16_t	mlu_fname_off;
1732f624233SNattuvetty Bhavyan 	uint16_t	mlu_rsvd1;
1742f624233SNattuvetty Bhavyan 	uint32_t	mlu_rsvd2;
1758fe96085Stim szeto 	uint8_t		mlu_input_guid[16];
1768fe96085Stim szeto 	char		mlu_buf[8]; /* can be more than 8 */
1778fe96085Stim szeto } sbd_modify_lu_t;
178fcf3ce44SJohn Forte 
1798fe96085Stim szeto typedef struct sbd_delete_lu {
1808fe96085Stim szeto 	uint32_t	dlu_struct_size;
1818fe96085Stim szeto 	uint16_t	dlu_by_guid:1,
1828fe96085Stim szeto 			dlu_by_meta_name:1;
1838fe96085Stim szeto 	uint16_t	dlu_rsvd;
1848fe96085Stim szeto 	uint8_t		dlu_guid[16];
1858fe96085Stim szeto 	uint8_t		dlu_meta_name[8];
1868fe96085Stim szeto } sbd_delete_lu_t;
187fcf3ce44SJohn Forte 
18845039663SJohn Forte /*
18945039663SJohn Forte  * sbd access states
19045039663SJohn Forte  */
19145039663SJohn Forte #define	SBD_LU_ACTIVE			1
19245039663SJohn Forte #define	SBD_LU_TRANSITION_TO_ACTIVE	2
19345039663SJohn Forte #define	SBD_LU_STANDBY			3
19445039663SJohn Forte #define	SBD_LU_TRANSITION_TO_STANDBY	4
19545039663SJohn Forte 
1968fe96085Stim szeto typedef struct sbd_lu_props {
1978fe96085Stim szeto 	uint32_t	slp_input_guid:1,	/* GUID or meta filename */
1988fe96085Stim szeto 			slp_separate_meta:1,
1998fe96085Stim szeto 			slp_meta_fname_valid:1,
2008fe96085Stim szeto 			slp_data_fname_valid:1,
2018fe96085Stim szeto 			slp_zfs_meta:1,
2028fe96085Stim szeto 			slp_alias_valid:1,
2032f624233SNattuvetty Bhavyan 			slp_mgmt_url_valid:1,
2048fe96085Stim szeto 			slp_lu_vid:1,
2058fe96085Stim szeto 			slp_lu_pid:1,
2068fe96085Stim szeto 			slp_lu_rev:1,
2078fe96085Stim szeto 			slp_serial_valid:1,
2088fe96085Stim szeto 			slp_writeback_cache_disable_cur:1,
2098fe96085Stim szeto 			slp_writeback_cache_disable_saved:1,
2108fe96085Stim szeto 			slp_write_protected:1;
2118fe96085Stim szeto 	uint16_t	slp_meta_fname_off;
2128fe96085Stim szeto 	uint16_t	slp_data_fname_off;
2138fe96085Stim szeto 	uint64_t	slp_lu_size;
2148fe96085Stim szeto 	uint16_t	slp_serial_off;
2158fe96085Stim szeto 	uint16_t	slp_blksize;
2168fe96085Stim szeto 	uint16_t	slp_alias_off;
2172f624233SNattuvetty Bhavyan 	uint16_t	slp_mgmt_url_off;
2188fe96085Stim szeto 	uint32_t	slp_buf_size_needed;	/* Upon return */
2198fe96085Stim szeto 	uint16_t	slp_serial_size;
22045039663SJohn Forte 	uint16_t	slp_access_state;
2218fe96085Stim szeto 	char		slp_rev[4];
2228fe96085Stim szeto 	char		slp_vid[8];
2238fe96085Stim szeto 	char		slp_pid[16];
2248fe96085Stim szeto 	uint8_t		slp_guid[16];
2258fe96085Stim szeto 	uint8_t		slp_buf[8];	/* likely more than 8 */
2268fe96085Stim szeto } sbd_lu_props_t;
227fcf3ce44SJohn Forte 
228*b77b9231SDan McDonald typedef struct sbd_unmap_props {
229*b77b9231SDan McDonald 	uint32_t	sup_found_lu:1,
230*b77b9231SDan McDonald 			sup_zvol_path_valid:1,
231*b77b9231SDan McDonald 			sup_guid_valid:1,
232*b77b9231SDan McDonald 			sup_unmap_enabled;
233*b77b9231SDan McDonald 	uint32_t	sup_rsvd;
234*b77b9231SDan McDonald 	char		sup_zvol_path[256];
235*b77b9231SDan McDonald 	uint8_t		sup_guid[16];
236*b77b9231SDan McDonald } sbd_unmap_props_t;
237*b77b9231SDan McDonald 
238fcf3ce44SJohn Forte #ifdef	__cplusplus
239fcf3ce44SJohn Forte }
240fcf3ce44SJohn Forte #endif
241fcf3ce44SJohn Forte 
242fcf3ce44SJohn Forte #endif /* _STMF_SBD_IOCTL_H */
243