summaryrefslogtreecommitdiffstats
path: root/drivers/staging/csr/csr_serialize_primitive_types.c
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-06-19 16:15:42 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-06-19 16:37:01 -0700
commit635d2b00e5070378e7bf812acf47fb135c6ab928 (patch)
tree7048a0a511f3d221aa2dfe40aa3a401991f1b175 /drivers/staging/csr/csr_serialize_primitive_types.c
parent15a4bc17b7f4e85cb019e683f14e834078ec2208 (diff)
downloadop-kernel-dev-635d2b00e5070378e7bf812acf47fb135c6ab928.zip
op-kernel-dev-635d2b00e5070378e7bf812acf47fb135c6ab928.tar.gz
Staging: add CSR wifi module
This consists of two modules, the driver, and a "helper" module that is just a wrapper around common kernel functions. The wrapper module will be removed soon, but for now it's needed. These files were based on the csr-linux-wifi-5.0.3-oss.tar.gz package provided by CSR and Blue Giga, and is covered under the license specified in the LICENSE.txt file (basically dual BSD and GPLv2). The files were flattened out of the deep directory mess they were originally in, and a few EXPORT_SYMBOL_GPL() were added in order for everything to link properly with the helper module setup. Cc: Mikko Virkkilä <mikko.virkkila@bluegiga.com> Cc: Lauri Hintsala <Lauri.Hintsala@bluegiga.com> Cc: Riku Mettälä <riku.mettala@bluegiga.com> Cc: Veli-Pekka Peltola <veli-pekka.peltola@bluegiga.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/csr/csr_serialize_primitive_types.c')
-rw-r--r--drivers/staging/csr/csr_serialize_primitive_types.c472
1 files changed, 472 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 0000000..5ea06fc
--- /dev/null
+++ b/drivers/staging/csr/csr_serialize_primitive_types.c
@@ -0,0 +1,472 @@
+/*****************************************************************************
+
+ (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 "csr_types.h"
+#include "csr_prim_defs.h"
+#include "csr_msgconv.h"
+#include "csr_util.h"
+#include "csr_pmem.h"
+#include "csr_lib.h"
+
+void CsrUint8Des(CsrUint8 *value, CsrUint8 *buffer, CsrSize *offset)
+{
+ *value = buffer[*offset];
+ *offset += sizeof(*value);
+}
+EXPORT_SYMBOL_GPL(CsrUint8Des);
+
+void CsrUint16Des(CsrUint16 *value, CsrUint8 *buffer, CsrSize *offset)
+{
+ *value = (buffer[*offset + 0] << 0) |
+ (buffer[*offset + 1] << 8);
+ *offset += sizeof(*value);
+}
+EXPORT_SYMBOL_GPL(CsrUint16Des);
+
+void CsrUint32Des(CsrUint32 *value, CsrUint8 *buffer, CsrSize *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, CsrUint8 *buffer, CsrSize *offset, CsrSize length)
+{
+ CsrMemCpy(value, &buffer[*offset], length);
+ *offset += length;
+}
+EXPORT_SYMBOL_GPL(CsrMemCpyDes);
+
+void CsrCharStringDes(CsrCharString **value, CsrUint8 *buffer, CsrSize *offset)
+{
+ *value = CsrStrDup((CsrCharString *) &buffer[*offset]);
+ *offset += CsrStrLen(*value) + 1;
+}
+EXPORT_SYMBOL_GPL(CsrCharStringDes);
+
+void CsrUtf8StringDes(CsrUtf8String **value, CsrUint8 *buffer, CsrSize *offset)
+{
+ *value = (CsrUtf8String *) CsrStrDup((CsrCharString *) &buffer[*offset]);
+ *offset += CsrStrLen((CsrCharString *) *value) + 1;
+}
+
+void CsrUtf16StringDes(CsrUtf16String **value, CsrUint8 *buffer, CsrSize *offset)
+{
+ CsrUint32 length, i;
+
+ CsrUint32Des(&length, buffer, offset);
+
+ *value = CsrPmemAlloc(length * sizeof(**value));
+ for (i = 0; i < length; i++)
+ {
+ CsrUint16Des(&(*value)[i], buffer, offset);
+ }
+}
+
+void CsrSizeDes(CsrSize *value, CsrUint8 *buffer, CsrSize *offset)
+{
+ *value = (buffer[*offset + 0] << 0) |
+ (buffer[*offset + 1] << 8) |
+ (buffer[*offset + 2] << 16) |
+ (buffer[*offset + 3] << 24);
+ *offset += sizeof(*value);
+}
+
+void CsrVoidPtrDes(void **value, CsrUint8 *buffer, CsrSize *offset)
+{
+ CsrSizeDes((CsrSize *) value, buffer, offset);
+}
+
+void CsrUint8Ser(CsrUint8 *buffer, CsrSize *offset, CsrUint8 value)
+{
+ buffer[*offset] = value;
+ *offset += sizeof(value);
+}
+EXPORT_SYMBOL_GPL(CsrUint8Ser);
+
+void CsrUint16Ser(CsrUint8 *buffer, CsrSize *offset, CsrUint16 value)
+{
+ buffer[*offset + 0] = (CsrUint8) ((value >> 0) & 0xFF);
+ buffer[*offset + 1] = (CsrUint8) ((value >> 8) & 0xFF);
+ *offset += sizeof(value);
+}
+EXPORT_SYMBOL_GPL(CsrUint16Ser);
+
+void CsrUint32Ser(CsrUint8 *buffer, CsrSize *offset, CsrUint32 value)
+{
+ buffer[*offset + 0] = (CsrUint8) ((value >> 0) & 0xFF);
+ buffer[*offset + 1] = (CsrUint8) ((value >> 8) & 0xFF);
+ buffer[*offset + 2] = (CsrUint8) ((value >> 16) & 0xFF);
+ buffer[*offset + 3] = (CsrUint8) ((value >> 24) & 0xFF);
+ *offset += sizeof(value);
+}
+EXPORT_SYMBOL_GPL(CsrUint32Ser);
+
+void CsrMemCpySer(CsrUint8 *buffer, CsrSize *offset, const void *value, CsrSize length)
+{
+ CsrMemCpy(&buffer[*offset], value, length);
+ *offset += length;
+}
+EXPORT_SYMBOL_GPL(CsrMemCpySer);
+
+void CsrCharStringSer(CsrUint8 *buffer, CsrSize *offset, const CsrCharString *value)
+{
+ if (value)
+ {
+ CsrStrCpy(((CsrCharString *) &buffer[*offset]), value);
+ *offset += CsrStrLen(value) + 1;
+ }
+ else
+ {
+ CsrUint8Ser(buffer, offset, 0);
+ }
+}
+EXPORT_SYMBOL_GPL(CsrCharStringSer);
+
+void CsrUtf8StringSer(CsrUint8 *buffer, CsrSize *offset, const CsrUtf8String *value)
+{
+ CsrCharStringSer(buffer, offset, (CsrCharString *) value);
+}
+
+void CsrUtf16StringSer(CsrUint8 *buffer, CsrSize *offset, const CsrUtf16String *value)
+{
+ if (value)
+ {
+ CsrUint32 length = CsrUtf16StrLen(value) + 1;
+ CsrUint32 i;
+
+ CsrUint32Ser(buffer, offset, length);
+
+ for (i = 0; i < length; i++)
+ {
+ CsrUint16Ser(buffer, offset, (CsrUint16) value[i]);
+ }
+ }
+ else
+ {
+ CsrUint32Ser(buffer, offset, 0);
+ }
+}
+
+void CsrSizeSer(CsrUint8 *buffer, CsrSize *offset, CsrSize value)
+{
+ buffer[*offset + 0] = (CsrUint8) ((value >> 0) & 0xFF);
+ buffer[*offset + 1] = (CsrUint8) ((value >> 8) & 0xFF);
+ buffer[*offset + 2] = (CsrUint8) ((value >> 16) & 0xFF);
+ buffer[*offset + 3] = (CsrUint8) ((value >> 24) & 0xFF);
+ *offset += sizeof(value);
+}
+
+void CsrVoidPtrSer(CsrUint8 *buffer, CsrSize *offset, void *ptr)
+{
+ CsrSizeSer(buffer, offset, (CsrSize) ptr);
+}
+
+CsrUint32 CsrCharStringSerLen(const CsrCharString *str)
+{
+ if (str)
+ {
+ return (CsrUint32) (CsrStrLen(str) + sizeof(*str));
+ }
+ else
+ {
+ return sizeof(*str);
+ }
+}
+
+CsrUint32 CsrUtf8StringSerLen(const CsrUtf8String *str)
+{
+ if (str)
+ {
+ return (CsrUint32) (CsrStrLen((CsrCharString *) str) + sizeof(*str));
+ }
+ else
+ {
+ return sizeof(*str);
+ }
+}
+
+CsrUint32 CsrUtf16StringSerLen(const CsrUtf16String *str)
+{
+ if (str)
+ {
+ /* We always write down the length of the string */
+ return sizeof(CsrUint32) + (CsrUtf16StrLen(str) + 1) * sizeof(*str);
+ }
+ else
+ {
+ return sizeof(CsrUint32);
+ }
+}
+
+CsrSize CsrEventSizeof(void *msg)
+{
+ return 2;
+}
+
+CsrUint8 *CsrEventSer(CsrUint8 *ptr, CsrSize *len, void *msg)
+{
+ CsrEvent *primitive = (CsrEvent *) msg;
+ *len = 0;
+ CsrUint16Ser(ptr, len, primitive->type);
+ return ptr;
+}
+
+void *CsrEventDes(CsrUint8 *buffer, CsrSize length)
+{
+ CsrEvent *primitive = (CsrEvent *) CsrPmemAlloc(sizeof(CsrEvent));
+ CsrSize offset = 0;
+ CsrUint16Des(&primitive->type, buffer, &offset);
+
+ return primitive;
+}
+
+CsrSize CsrEventCsrUint8Sizeof(void *msg)
+{
+ return 3;
+}
+
+CsrUint8 *CsrEventCsrUint8Ser(CsrUint8 *ptr, CsrSize *len, void *msg)
+{
+ CsrEventCsrUint8 *primitive = (CsrEventCsrUint8 *) msg;
+ *len = 0;
+ CsrUint16Ser(ptr, len, primitive->type);
+ CsrUint8Ser(ptr, len, primitive->value);
+ return ptr;
+}
+
+void *CsrEventCsrUint8Des(CsrUint8 *buffer, CsrSize length)
+{
+ CsrEventCsrUint8 *primitive = (CsrEventCsrUint8 *) CsrPmemAlloc(sizeof(CsrEventCsrUint8));
+
+ CsrSize offset = 0;
+ CsrUint16Des(&primitive->type, buffer, &offset);
+ CsrUint8Des(&primitive->value, buffer, &offset);
+
+ return primitive;
+}
+
+CsrSize CsrEventCsrUint16Sizeof(void *msg)
+{
+ return 4;
+}
+
+CsrUint8 *CsrEventCsrUint16Ser(CsrUint8 *ptr, CsrSize *len, void *msg)
+{
+ CsrEventCsrUint16 *primitive = (CsrEventCsrUint16 *) msg;
+ *len = 0;
+ CsrUint16Ser(ptr, len, primitive->type);
+ CsrUint16Ser(ptr, len, primitive->value);
+ return ptr;
+}
+
+void *CsrEventCsrUint16Des(CsrUint8 *buffer, CsrSize length)
+{
+ CsrEventCsrUint16 *primitive = (CsrEventCsrUint16 *) CsrPmemAlloc(sizeof(CsrEventCsrUint16));
+
+ CsrSize offset = 0;
+ CsrUint16Des(&primitive->type, buffer, &offset);
+ CsrUint16Des(&primitive->value, buffer, &offset);
+
+ return primitive;
+}
+
+CsrSize CsrEventCsrUint32Sizeof(void *msg)
+{
+ return 6;
+}
+
+CsrUint8 *CsrEventCsrUint32Ser(CsrUint8 *ptr, CsrSize *len, void *msg)
+{
+ CsrEventCsrUint32 *primitive = (CsrEventCsrUint32 *) msg;
+ *len = 0;
+ CsrUint16Ser(ptr, len, primitive->type);
+ CsrUint32Ser(ptr, len, primitive->value);
+ return ptr;
+}
+
+void *CsrEventCsrUint32Des(CsrUint8 *buffer, CsrSize length)
+{
+ CsrEventCsrUint32 *primitive = (CsrEventCsrUint32 *) CsrPmemAlloc(sizeof(CsrEventCsrUint32));
+
+ CsrSize offset = 0;
+ CsrUint16Des(&primitive->type, buffer, &offset);
+ CsrUint32Des(&primitive->value, buffer, &offset);
+
+ return primitive;
+}
+
+CsrSize CsrEventCsrUint16CsrUint8Sizeof(void *msg)
+{
+ return 5;
+}
+
+CsrUint8 *CsrEventCsrUint16CsrUint8Ser(CsrUint8 *ptr, CsrSize *len, void *msg)
+{
+ CsrEventCsrUint16CsrUint8 *primitive = (CsrEventCsrUint16CsrUint8 *) msg;
+ *len = 0;
+ CsrUint16Ser(ptr, len, primitive->type);
+ CsrUint16Ser(ptr, len, primitive->value1);
+ CsrUint8Ser(ptr, len, primitive->value2);
+ return ptr;
+}
+
+void *CsrEventCsrUint16CsrUint8Des(CsrUint8 *buffer, CsrSize length)
+{
+ CsrEventCsrUint16CsrUint8 *primitive = (CsrEventCsrUint16CsrUint8 *) CsrPmemAlloc(sizeof(CsrEventCsrUint16CsrUint8));
+
+ CsrSize offset = 0;
+ CsrUint16Des(&primitive->type, buffer, &offset);
+ CsrUint16Des(&primitive->value1, buffer, &offset);
+ CsrUint8Des(&primitive->value2, buffer, &offset);
+
+ return primitive;
+}
+
+CsrSize CsrEventCsrUint16CsrUint16Sizeof(void *msg)
+{
+ return 6;
+}
+
+CsrUint8 *CsrEventCsrUint16CsrUint16Ser(CsrUint8 *ptr, CsrSize *len, void *msg)
+{
+ CsrEventCsrUint16CsrUint16 *primitive = (CsrEventCsrUint16CsrUint16 *) msg;
+ *len = 0;
+ CsrUint16Ser(ptr, len, primitive->type);
+ CsrUint16Ser(ptr, len, primitive->value1);
+ CsrUint16Ser(ptr, len, primitive->value2);
+ return ptr;
+}
+
+void *CsrEventCsrUint16CsrUint16Des(CsrUint8 *buffer, CsrSize length)
+{
+ CsrEventCsrUint16CsrUint16 *primitive = (CsrEventCsrUint16CsrUint16 *) CsrPmemAlloc(sizeof(CsrEventCsrUint16CsrUint16));
+
+ CsrSize offset = 0;
+ CsrUint16Des(&primitive->type, buffer, &offset);
+ CsrUint16Des(&primitive->value1, buffer, &offset);
+ CsrUint16Des(&primitive->value2, buffer, &offset);
+
+ return primitive;
+}
+
+CsrSize CsrEventCsrUint16CsrUint32Sizeof(void *msg)
+{
+ return 8;
+}
+
+CsrUint8 *CsrEventCsrUint16CsrUint32Ser(CsrUint8 *ptr, CsrSize *len, void *msg)
+{
+ CsrEventCsrUint16CsrUint32 *primitive = (CsrEventCsrUint16CsrUint32 *) msg;
+ *len = 0;
+ CsrUint16Ser(ptr, len, primitive->type);
+ CsrUint16Ser(ptr, len, primitive->value1);
+ CsrUint32Ser(ptr, len, primitive->value2);
+ return ptr;
+}
+
+void *CsrEventCsrUint16CsrUint32Des(CsrUint8 *buffer, CsrSize length)
+{
+ CsrEventCsrUint16CsrUint32 *primitive = (CsrEventCsrUint16CsrUint32 *) CsrPmemAlloc(sizeof(CsrEventCsrUint16CsrUint32));
+
+ CsrSize offset = 0;
+ CsrUint16Des(&primitive->type, buffer, &offset);
+ CsrUint16Des(&primitive->value1, buffer, &offset);
+ CsrUint32Des(&primitive->value2, buffer, &offset);
+
+ return primitive;
+}
+
+CsrSize CsrEventCsrUint16CsrCharStringSizeof(void *msg)
+{
+ CsrEventCsrUint16CsrCharString *primitive = (CsrEventCsrUint16CsrCharString *) msg;
+ return 4 + CsrStrLen(primitive->value2) + 1;
+}
+
+CsrUint8 *CsrEventCsrUint16CsrCharStringSer(CsrUint8 *ptr, CsrSize *len, void *msg)
+{
+ CsrEventCsrUint16CsrCharString *primitive = (CsrEventCsrUint16CsrCharString *) msg;
+ *len = 0;
+ CsrUint16Ser(ptr, len, primitive->type);
+ CsrUint16Ser(ptr, len, primitive->value1);
+ CsrCharStringSer(ptr, len, primitive->value2);
+ return ptr;
+}
+
+void *CsrEventCsrUint16CsrCharStringDes(CsrUint8 *buffer, CsrSize length)
+{
+ CsrEventCsrUint16CsrCharString *primitive = (CsrEventCsrUint16CsrCharString *) CsrPmemAlloc(sizeof(CsrEventCsrUint16CsrCharString));
+
+ CsrSize offset = 0;
+ CsrUint16Des(&primitive->type, buffer, &offset);
+ CsrUint16Des(&primitive->value1, buffer, &offset);
+ CsrCharStringDes(&primitive->value2, buffer, &offset);
+
+ return primitive;
+}
+
+CsrSize CsrEventCsrUint32CsrUint16Sizeof(void *msg)
+{
+ return 8;
+}
+
+CsrUint8 *CsrEventCsrUint32CsrUint16Ser(CsrUint8 *ptr, CsrSize *len, void *msg)
+{
+ CsrEventCsrUint32CsrUint16 *primitive = (CsrEventCsrUint32CsrUint16 *) msg;
+ *len = 0;
+ CsrUint16Ser(ptr, len, primitive->type);
+ CsrUint32Ser(ptr, len, primitive->value1);
+ CsrUint16Ser(ptr, len, primitive->value2);
+ return ptr;
+}
+
+void *CsrEventCsrUint32CsrUint16Des(CsrUint8 *buffer, CsrSize length)
+{
+ CsrEventCsrUint32CsrUint16 *primitive = (CsrEventCsrUint32CsrUint16 *) CsrPmemAlloc(sizeof(CsrEventCsrUint32CsrUint16));
+
+ CsrSize offset = 0;
+ CsrUint16Des(&primitive->type, buffer, &offset);
+ CsrUint32Des(&primitive->value1, buffer, &offset);
+ CsrUint16Des(&primitive->value2, buffer, &offset);
+
+ return primitive;
+}
+
+CsrSize CsrEventCsrUint32CsrCharStringSizeof(void *msg)
+{
+ CsrEventCsrUint32CsrCharString *primitive = (CsrEventCsrUint32CsrCharString *) msg;
+ return 6 + CsrStrLen(primitive->value2) + 1;
+}
+
+CsrUint8 *CsrEventCsrUint32CsrCharStringSer(CsrUint8 *ptr, CsrSize *len, void *msg)
+{
+ CsrEventCsrUint32CsrCharString *primitive = (CsrEventCsrUint32CsrCharString *) msg;
+ *len = 0;
+ CsrUint16Ser(ptr, len, primitive->type);
+ CsrUint32Ser(ptr, len, primitive->value1);
+ CsrCharStringSer(ptr, len, primitive->value2);
+ return ptr;
+}
+
+void *CsrEventCsrUint32CsrCharStringDes(CsrUint8 *buffer, CsrSize length)
+{
+ CsrEventCsrUint32CsrCharString *primitive = (CsrEventCsrUint32CsrCharString *) CsrPmemAlloc(sizeof(CsrEventCsrUint32CsrCharString));
+
+ CsrSize offset = 0;
+ CsrUint16Des(&primitive->type, buffer, &offset);
+ CsrUint32Des(&primitive->value1, buffer, &offset);
+ CsrCharStringDes(&primitive->value2, buffer, &offset);
+
+ return primitive;
+}
OpenPOWER on IntegriCloud