--- 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
}