aboutsummaryrefslogtreecommitdiff
path: root/library/include/mipi_syst/message.h
diff options
context:
space:
mode:
Diffstat (limited to 'library/include/mipi_syst/message.h')
-rw-r--r--library/include/mipi_syst/message.h159
1 files changed, 159 insertions, 0 deletions
diff --git a/library/include/mipi_syst/message.h b/library/include/mipi_syst/message.h
new file mode 100644
index 0000000..285512b
--- /dev/null
+++ b/library/include/mipi_syst/message.h
@@ -0,0 +1,159 @@
+/*
+Copyright (c) 2018, MIPI Alliance, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+* Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*
+ * Contributors:
+ * Norbert Schulz (Intel Corporation) - Initial API and implementation
+ */
+
+/* Internal message storage buffering */
+
+#ifndef MIPI_syst_msg_INCLUDED
+#define MIPI_syst_msg_INCLUDED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Catalog ID container
+ */
+union mipi_syst_catid {
+ mipi_syst_u32 sci_32;
+ mipi_syst_u64 sci_64;
+} ;
+
+/**
+ * SyS-T message descriptor
+ *
+ * This structure stores a SyS-T message in "logical" memory format.
+ * Logical means that all optional fields are present but not necessarily
+ * used. Variable length payloads are addressed through a pointer and
+ * are not copied into the structure.
+ */
+ struct mipi_syst_msgdsc {
+ struct mipi_syst_msg_tag ed_tag;
+ /**< 32-bit message tag (mandatory) */
+#if defined(MIPI_SYST_PCFG_ENABLE_ORIGIN_GUID)
+ struct mipi_syst_guid ed_guid; /**< origin GUID (optional) */
+#endif
+
+#if defined(MIPI_SYST_PCFG_ENABLE_LOCATION_RECORD)
+ struct mipi_syst_msglocation ed_loc;
+ /**< message source location (optional) */
+#endif
+#if defined(MIPI_SYST_PCFG_ENABLE_TIMESTAMP)
+ mipi_syst_u64 ed_ts; /**< protocol embedded time stamp */
+#endif
+
+#if defined(MIPI_SYST_PCFG_LENGTH_FIELD)
+ mipi_syst_u16 ed_len; /**< variable payload length (optional) */
+#endif
+
+ union {
+ struct {
+ mipi_syst_u64 id;
+ const void *text;
+ } data_version;
+
+ struct {
+ union mipi_syst_catid id;
+ mipi_syst_u32 *param;
+ } data_catid;
+
+#if defined(MIPI_SYST_PCFG_ENABLE_TIMESTAMP)
+ mipi_syst_u64 data_clock[2];
+#endif
+ const void *data_var; /**< variable length payload */
+ } ed_pld;
+
+#if defined(MIPI_SYST_PCFG_ENABLE_CHECKSUM)
+ mipi_syst_u32 ed_chk; /**< message checksum (optional) */
+#endif
+};
+
+#if defined(MIPI_SYST_PCFG_ENABLE_64BIT_ADDR)
+#define MIPI_SYST_EVDSC_MEMBER_OFF(m)\
+ ((mipi_syst_u16)(mipi_syst_u64)&(((struct mipi_syst_msgdsc*)0)->m))
+#else
+#define MIPI_SYST_EVDSC_MEMBER_OFF(m)\
+ ((mipi_syst_u16)(mipi_syst_u32)&(((struct mipi_syst_msgdsc*)0)->m))
+#endif
+
+/**
+ * message scatter write operations
+ */
+enum u_syst_scatter_op {
+ MIPI_SYST_SCATTER_OP_SKIP = 0x00,
+ /**< skip sso_length bytes */
+
+ MIPI_SYST_SCATTER_OP_8BIT = 0x01,
+ /**< write sso_length times 8 bit */
+ MIPI_SYST_SCATTER_OP_16BIT = 0x02,
+ /**< write sso_length times 16 bit */
+ MIPI_SYST_SCATTER_OP_32BIT = 0x04,
+ /**< write sso_length times 32 bit */
+ MIPI_SYST_SCATTER_OP_64BIT = 0x08,
+ /**< write sso_length times 64 bit */
+
+ MIPI_SYST_SCATTER_OP_BLOB = 0x10,
+ /**< write sso_length bytes that are
+ * accessed through a pointer */
+ MIPI_SYST_SCATTER_OP_END = 0xFF
+ /**< end of scatter writer program */
+};
+
+/**
+ * message scatter write instruction definition
+ */
+struct mipi_syst_scatter_prog {
+ mipi_syst_u8 sso_opcode; /**< scatter write operation
+ * @see u_syst_scatter_op */
+ mipi_syst_u8 sso_offset; /**< data offset in message descriptor */
+ mipi_syst_u16 sso_length;
+ /**< repeat count for sso_opcode */
+};
+
+#define MIPI_SYST_SCATTER_PROG_LEN 10 /**< maximum needed scatter prog size */
+
+#if defined(MIPI_SYST_PCFG_ENABLE_DEFAULT_SCATTER_WRITE)
+/* default scatter write routine */
+extern void mipi_syst_scatter_write(struct mipi_syst_handle* systh,
+ struct mipi_syst_scatter_prog* scatterprog,
+ const void *pdesc);
+#endif
+
+#ifdef __cplusplus
+} /* extern C */
+#endif
+#endif