usr/src/uts/common/io/comstar/lu/stmf_sbd/stmf_sbd.h
changeset 7836 4e95154b5b7a
child 9585 bf09620212ab
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/uts/common/io/comstar/lu/stmf_sbd/stmf_sbd.h	Tue Oct 14 15:09:13 2008 -0700
@@ -0,0 +1,96 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#ifndef	_STMF_SBD_H
+#define	_STMF_SBD_H
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+#define	SBD_FAILURE		STMF_LU_FAILURE
+#define	SBD_FILEIO_FAILURE	(SBD_FAILURE | STMF_FSC(1))
+
+/*
+ * if the function pointers to write metadata are NULL, then sbd assumes that
+ * metadata and LU data share the same store. In that case sbd sets aside
+ * some space for metadata and adjusts the LU size reported to initiators
+ * accordingly.
+ */
+typedef	struct sbd_store {
+	void		*sst_sbd_private;
+	void		*sst_store_private;
+	char		*sst_alias;
+
+	stmf_status_t	(*sst_online)(struct sbd_store *sst);
+	stmf_status_t	(*sst_offline)(struct sbd_store *sst);
+	stmf_status_t	(*sst_deregister_lu)(struct sbd_store *sst);
+
+	stmf_status_t	(*sst_data_read)(struct sbd_store *sst,
+				uint64_t offset, uint64_t size, uint8_t *buf);
+	stmf_status_t	(*sst_data_write)(struct sbd_store *sst,
+				uint64_t offset, uint64_t size, uint8_t *buf);
+	stmf_status_t	(*sst_data_flush)(struct sbd_store *sst);
+
+	stmf_status_t	(*sst_meta_read)(struct sbd_store *sst,
+				uint64_t offset, uint64_t size, uint8_t *buf);
+	stmf_status_t	(*sst_meta_write)(struct sbd_store *sst,
+				uint64_t offset, uint64_t size, uint8_t *buf);
+} sbd_store_t;
+
+typedef struct sst_init_data {
+	uint64_t	sst_store_size;		/* Total size of the store */
+
+	/*
+	 * This is the metadat for the store implementation itself
+	 * that needs to be persisted.
+	 */
+	uint64_t	sst_store_meta_data_size;
+
+	/* This is returned to the caller */
+	uint8_t		sst_guid[16];
+
+	uint32_t	sst_flags;
+	uint16_t	sst_blocksize;		/* To expose to initiators */
+} sst_init_data_t;
+
+/*
+ * sst_flags.
+ */
+#define	SST_NOT_PERSISTENT	0x0001
+#define	SST_READONLY_DATA	0x0002
+
+sbd_store_t *sbd_sst_alloc(uint32_t additional_size, uint32_t flags);
+void sbd_sst_free(sbd_store_t *sst);
+stmf_status_t sbd_create_meta(sbd_store_t *sst, sst_init_data_t *sst_idata);
+stmf_status_t sbd_modify_meta(sbd_store_t *sst, sst_init_data_t *sst_idata);
+stmf_status_t sbd_register_sst(sbd_store_t *sst, sst_init_data_t *sst_idata);
+stmf_status_t sbd_deregister_sst(sbd_store_t *sst);
+
+#ifdef	__cplusplus
+}
+#endif
+
+#endif /* _STMF_SBD_H */