aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/csr/csr_serialize_primitive_types.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/csr/csr_serialize_primitive_types.c')
-rw-r--r--drivers/staging/csr/csr_serialize_primitive_types.c101
1 files changed, 101 insertions, 0 deletions
diff --git a/drivers/staging/csr/csr_serialize_primitive_types.c b/drivers/staging/csr/csr_serialize_primitive_types.c
new file mode 100644
index 000000000000..bf5e4ab9f959
--- /dev/null
+++ b/drivers/staging/csr/csr_serialize_primitive_types.c
@@ -0,0 +1,101 @@
+/*****************************************************************************
+
+ (c) Cambridge Silicon Radio Limited 2010
+ All rights reserved and confidential information of CSR
+
+ Refer to LICENSE.txt included with this source for details
+ on the license terms.
+
+*****************************************************************************/
+
+#include <linux/module.h>
+#include <linux/slab.h>
+#include "csr_prim_defs.h"
+#include "csr_msgconv.h"
+#include "csr_macro.h"
+#include "csr_lib.h"
+
+void CsrUint8Des(u8 *value, u8 *buffer, size_t *offset)
+{
+ *value = buffer[*offset];
+ *offset += sizeof(*value);
+}
+EXPORT_SYMBOL_GPL(CsrUint8Des);
+
+void CsrUint16Des(u16 *value, u8 *buffer, size_t *offset)
+{
+ *value = (buffer[*offset + 0] << 0) |
+ (buffer[*offset + 1] << 8);
+ *offset += sizeof(*value);
+}
+EXPORT_SYMBOL_GPL(CsrUint16Des);
+
+void CsrUint32Des(u32 *value, u8 *buffer, size_t *offset)
+{
+ *value = (buffer[*offset + 0] << 0) |
+ (buffer[*offset + 1] << 8) |
+ (buffer[*offset + 2] << 16) |
+ (buffer[*offset + 3] << 24);
+ *offset += sizeof(*value);
+}
+EXPORT_SYMBOL_GPL(CsrUint32Des);
+
+void CsrMemCpyDes(void *value, u8 *buffer, size_t *offset, size_t length)
+{
+ memcpy(value, &buffer[*offset], length);
+ *offset += length;
+}
+EXPORT_SYMBOL_GPL(CsrMemCpyDes);
+
+void CsrCharStringDes(char **value, u8 *buffer, size_t *offset)
+{
+ *value = kstrdup((char *) &buffer[*offset], GFP_KERNEL);
+ *offset += strlen(*value) + 1;
+}
+EXPORT_SYMBOL_GPL(CsrCharStringDes);
+
+void CsrUint8Ser(u8 *buffer, size_t *offset, u8 value)
+{
+ buffer[*offset] = value;
+ *offset += sizeof(value);
+}
+EXPORT_SYMBOL_GPL(CsrUint8Ser);
+
+void CsrUint16Ser(u8 *buffer, size_t *offset, u16 value)
+{
+ buffer[*offset + 0] = (u8) ((value >> 0) & 0xFF);
+ buffer[*offset + 1] = (u8) ((value >> 8) & 0xFF);
+ *offset += sizeof(value);
+}
+EXPORT_SYMBOL_GPL(CsrUint16Ser);
+
+void CsrUint32Ser(u8 *buffer, size_t *offset, u32 value)
+{
+ buffer[*offset + 0] = (u8) ((value >> 0) & 0xFF);
+ buffer[*offset + 1] = (u8) ((value >> 8) & 0xFF);
+ buffer[*offset + 2] = (u8) ((value >> 16) & 0xFF);
+ buffer[*offset + 3] = (u8) ((value >> 24) & 0xFF);
+ *offset += sizeof(value);
+}
+EXPORT_SYMBOL_GPL(CsrUint32Ser);
+
+void CsrMemCpySer(u8 *buffer, size_t *offset, const void *value, size_t length)
+{
+ memcpy(&buffer[*offset], value, length);
+ *offset += length;
+}
+EXPORT_SYMBOL_GPL(CsrMemCpySer);
+
+void CsrCharStringSer(u8 *buffer, size_t *offset, const char *value)
+{
+ if (value)
+ {
+ strcpy(((char *) &buffer[*offset]), value);
+ *offset += strlen(value) + 1;
+ }
+ else
+ {
+ CsrUint8Ser(buffer, offset, 0);
+ }
+}
+EXPORT_SYMBOL_GPL(CsrCharStringSer);