usr/src/uts/common/sys/stmf_sbd_ioctl.h
changeset 9585 bf09620212ab
parent 7836 4e95154b5b7a
child 10113 045148591643
--- a/usr/src/uts/common/sys/stmf_sbd_ioctl.h	Fri May 08 13:31:23 2009 -0700
+++ b/usr/src/uts/common/sys/stmf_sbd_ioctl.h	Fri May 08 16:22:42 2009 -0600
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -30,98 +30,150 @@
 extern "C" {
 #endif
 
-#define	MEMDISK_MIN_SIZE	(1024 * 1024)
-#define	MEMDISK_MAX_SIZE	(1024 * 1024 * 1024)
-
 /*
- * ioctl cmds
+ * error codes from sbd.
  */
-#define	SBD_IOCTL_CMD		(((uint32_t)'S') << 24)
-
-#define	SBD_REGISTER_LU		(SBD_IOCTL_CMD | 0x01)
-#define	SBD_GET_LU_ATTR		(SBD_IOCTL_CMD | 0x02)
-#define	SBD_GET_LU_LIST		(SBD_IOCTL_CMD | 0x03)
-#define	SBD_DEREGISTER_LU	(SBD_IOCTL_CMD | 0x04)
-#define	SBD_MODIFY_LU		(SBD_IOCTL_CMD | 0x05)
+typedef enum sbd_ret {
+	SBD_RET_META_CREATION_FAILED = 0x01,
+	SBD_RET_INVALID_BLKSIZE,
+	SBD_RET_REQUIRES_SEPARATE_META,
+	SBD_RET_FILE_ALREADY_REGISTERED,
+	SBD_RET_GUID_ALREADY_REGISTERED,
+	SBD_RET_DATA_PATH_NOT_ABSOLUTE,
+	SBD_RET_META_PATH_NOT_ABSOLUTE,
+	SBD_RET_META_FILE_LOOKUP_FAILED,
+	SBD_RET_ZFS_META_CREATE_FAILED,
+	SBD_ZVOL_META_NAME_MISMATCH,
+	SBD_RET_DATA_FILE_LOOKUP_FAILED,
+	SBD_RET_WRONG_META_FILE_TYPE,
+	SBD_RET_WRONG_DATA_FILE_TYPE,
+	SBD_RET_DATA_FILE_OPEN_FAILED,
+	SBD_RET_META_FILE_OPEN_FAILED,
+	SBD_RET_DATA_FILE_GETATTR_FAILED,
+	SBD_RET_META_FILE_GETATTR_FAILED,
+	SBD_RET_FILE_SIZE_ERROR,
+	SBD_RET_FILE_ALIGN_ERROR,
+	SBD_RET_SIZE_OUT_OF_RANGE,
+	SBD_RET_SIZE_NOT_SUPPORTED_BY_FS,
+	SBD_RET_NO_META,
+	SBD_RET_VERSION_NOT_SUPPORTED,
+	SBD_RET_LU_BUSY,
+	SBD_RET_NOT_FOUND,
+	SBD_RET_INSUFFICIENT_BUF_SPACE,
+	SBD_RET_WRITE_CACHE_SET_FAILED,
 
-typedef enum rlc_flags {
-	RLC_LU_TYPE_MEMDISK = 0x01,
-	RLC_LU_TYPE_FILEDISK = 0x02,
-	RLC_CREATE_LU = 0x04,		/* Initialize metadata */
-	RLC_REGISTER_LU = 0x10,
-	RLC_DEREGISTER_LU = 0x20,
-	RLC_FORCE_OP = 0x40
-} rlc_flags_t;
+	SBD_RET_MAX_VAL
+} sbd_ret_t;
+
+#define	SBD_IOCTL_DEF(n)	((((int)0x5B) << 16) | (n))
+#define	SBD_IOCTL_CREATE_AND_REGISTER_LU		SBD_IOCTL_DEF(1)
+#define	SBD_IOCTL_IMPORT_LU				SBD_IOCTL_DEF(2)
+#define	SBD_IOCTL_DELETE_LU				SBD_IOCTL_DEF(3)
+#define	SBD_IOCTL_MODIFY_LU				SBD_IOCTL_DEF(4)
+#define	SBD_IOCTL_GET_LU_PROPS				SBD_IOCTL_DEF(5)
+#define	SBD_IOCTL_GET_LU_LIST				SBD_IOCTL_DEF(6)
 
-typedef enum rlc_ret {
-	RLC_RET_META_CREATION_FAILED = 0x01,
-	RLC_RET_LU_NOT_INITIALIZED,
-	RLC_RET_FILE_ALREADY_REGISTERED,
-	RLC_RET_GUID_ALREADY_REGISTERED,
-	RLC_RET_REGISTER_SST_FAILED,
-	RLC_RET_DEREGISTER_SST_FAILED,
-	RLC_RET_FILE_LOOKUP_FAILED,
-	RLC_RET_WRONG_FILE_TYPE,
-	RLC_RET_FILE_OPEN_FAILED,
-	RLC_RET_FILE_GETATTR_FAILED,
-	RLC_RET_FILE_SIZE_ERROR,
-	RLC_RET_FILE_ALIGN_ERROR,
-	RLC_RET_SIZE_OUT_OF_RANGE,
-	RLC_RET_SIZE_NOT_SUPPORTED_BY_FS,
-
-	RLC_RET_MAX_VAL
-} rlc_ret_t;
+typedef struct sbd_create_and_reg_lu {
+	uint32_t	slu_struct_size;
+	uint16_t	slu_meta_fname_valid:1,
+			slu_lu_size_valid:1,
+			slu_blksize_valid:1,
+			slu_vid_valid:1,
+			slu_pid_valid:1,
+			slu_rev_valid:1,
+			slu_serial_valid:1,
+			slu_alias_valid:1,
+			slu_guid_valid:1,
+			slu_company_id_valid:1,
+			slu_writeback_cache_disable_valid:1,
+			slu_writeback_cache_disable:1,
+			slu_write_protected:1;
 
-typedef struct register_lu_cmd {
-	uint32_t	total_struct_size;
-	rlc_flags_t	flags;
-	uint64_t	lu_size;	/* For memdisk only */
-	rlc_ret_t	return_code;
-	uint32_t	filesize_nbits;
-	stmf_status_t	op_ret;
-	uint64_t	lu_handle;
-	uint8_t		guid[16];	/* For reporting back duplicate GUID */
-	char		name[8];
-} register_lu_cmd_t;
+	uint16_t	slu_meta_fname_off;
+	uint64_t	slu_lu_size;
+	uint16_t	slu_data_fname_off;
+	uint16_t	slu_serial_off;
+	uint8_t		slu_serial_size;
+	uint8_t		slu_ret_filesize_nbits;
+	uint16_t	slu_blksize;
+	uint32_t	slu_company_id;
+	uint16_t	slu_alias_off;
+	uint8_t		slu_rsvd2;
+	uint8_t		slu_rsvd;
+	uint32_t	slu_rsvd1;
+	char		slu_rev[4];
+	char		slu_vid[8];
+	char		slu_pid[16];
+	uint8_t		slu_guid[16];
+	char		slu_buf[8];	/* likely more than 8 */
+} sbd_create_and_reg_lu_t;
 
-typedef struct deregister_lu_cmd {
-	uint32_t	total_struct_size;
-	rlc_flags_t	flags;
-	rlc_ret_t	return_code;
-	uint32_t	rsvd;
-	uint8_t		guid[16];
-} deregister_lu_cmd_t;
+typedef struct sbd_import_lu {
+	uint32_t	ilu_struct_size;
+	uint32_t	ilu_rsvd;
+	uint8_t		ilu_ret_guid[16];
+	char		ilu_meta_fname[8]; /* Can be more than 8 */
+} sbd_import_lu_t;
 
-typedef struct modify_lu_cmd {
-	uint32_t	total_struct_size;
-	rlc_flags_t	flags;
-	uint64_t	lu_size;
-	rlc_ret_t	return_code;
-	uint32_t	filesize_nbits;
-	stmf_status_t	op_ret;
-	uint8_t		guid[16];
-	char		name[8];
-} modify_lu_cmd_t;
+typedef struct sbd_modify_lu {
+	uint32_t	mlu_struct_size;
+	uint32_t	mlu_lu_size_valid:1,
+			mlu_serial_valid:1,
+			mlu_alias_valid:1,
+			mlu_writeback_cache_disable_valid:1,
+			mlu_writeback_cache_disable:1,
+			mlu_write_protected_valid:1,
+			mlu_write_protected:1,
+			mlu_by_guid:1,
+			mlu_by_fname:1;
+	uint64_t	mlu_lu_size;
+	uint16_t	mlu_alias_off;
+	uint16_t	mlu_serial_off;
+	uint16_t	mlu_serial_size;
+	uint16_t	mlu_fname_off;
+	uint8_t		mlu_input_guid[16];
+	char		mlu_buf[8]; /* can be more than 8 */
+} sbd_modify_lu_t;
+
+typedef struct sbd_delete_lu {
+	uint32_t	dlu_struct_size;
+	uint16_t	dlu_by_guid:1,
+			dlu_by_meta_name:1;
+	uint16_t	dlu_rsvd;
+	uint8_t		dlu_guid[16];
+	uint8_t		dlu_meta_name[8];
+} sbd_delete_lu_t;
 
-typedef struct sbd_lu_attr {
-	uint32_t	total_struct_size;
-	rlc_flags_t	flags;	/* to find out the type */
-	int		max_name_length;
-	uint32_t	rsvd;
-	uint64_t	lu_handle;
-	uint64_t	total_size;
-	uint64_t	data_size;
-	uint8_t		guid[16];
-	char		name[8];
-} sbd_lu_attr_t;
+typedef struct sbd_lu_props {
+	uint32_t	slp_input_guid:1,	/* GUID or meta filename */
+			slp_separate_meta:1,
+			slp_meta_fname_valid:1,
+			slp_data_fname_valid:1,
+			slp_zfs_meta:1,
+			slp_alias_valid:1,
+			slp_lu_vid:1,
+			slp_lu_pid:1,
+			slp_lu_rev:1,
+			slp_serial_valid:1,
+			slp_writeback_cache_disable_cur:1,
+			slp_writeback_cache_disable_saved:1,
+			slp_write_protected:1;
 
-typedef struct sbd_lu_list {
-	uint32_t	total_struct_size;
-	uint32_t	count_in;
-	uint32_t	count_out;
-	uint32_t	rsvd;
-	uint64_t	handles[1];
-} sbd_lu_list_t;
+	uint16_t	slp_meta_fname_off;
+	uint16_t	slp_data_fname_off;
+	uint64_t	slp_lu_size;
+	uint16_t	slp_serial_off;
+	uint16_t	slp_blksize;
+	uint16_t	slp_alias_off;
+	uint32_t	slp_buf_size_needed;	/* Upon return */
+	uint16_t	slp_serial_size;
+	uint16_t	slp_rsvd;
+	char		slp_rev[4];
+	char		slp_vid[8];
+	char		slp_pid[16];
+	uint8_t		slp_guid[16];
+	uint8_t		slp_buf[8];	/* likely more than 8 */
+} sbd_lu_props_t;
 
 #ifdef	__cplusplus
 }