aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/csr/csr_wifi_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_wifi_serialize_primitive_types.c
parentStaging: add CSR Wifi "os helper" module (diff)
downloadlinux-dev-635d2b00e5070378e7bf812acf47fb135c6ab928.tar.xz
linux-dev-635d2b00e5070378e7bf812acf47fb135c6ab928.zip
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_wifi_serialize_primitive_types.c')
-rw-r--r--drivers/staging/csr/csr_wifi_serialize_primitive_types.c257
1 files changed, 257 insertions, 0 deletions
diff --git a/drivers/staging/csr/csr_wifi_serialize_primitive_types.c b/drivers/staging/csr/csr_wifi_serialize_primitive_types.c
new file mode 100644
index 000000000000..155bf6562569
--- /dev/null
+++ b/drivers/staging/csr/csr_wifi_serialize_primitive_types.c
@@ -0,0 +1,257 @@
+/*****************************************************************************
+
+ (c) Cambridge Silicon Radio Limited 2011
+ 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_pmem.h"
+#include "csr_util.h"
+#include "csr_msgconv.h"
+#include "csr_wifi_msgconv.h"
+#include "csr_wifi_lib.h"
+
+void CsrUint24Des(CsrUint32 *v, CsrUint8 *buffer, CsrSize *offset)
+{
+ CsrUint32 val;
+
+ val = ((buffer[(*offset) + 2] << 16) |
+ (buffer[(*offset) + 1] << 8) |
+ (buffer[(*offset)]));
+
+ *offset += 3;
+ *v = val;
+}
+
+
+/* Big endian :e.g WSC, TCLAS */
+void CsrUint16DesBigEndian(CsrUint16 *v, CsrUint8 *buffer, CsrSize *offset)
+{
+ CsrUint16 val;
+
+ val = (buffer[(*offset)] << 8) | (buffer[(*offset) + 1]);
+ *offset += 2;
+
+ *v = val;
+}
+
+
+void CsrUint24DesBigEndian(CsrUint32 *v, CsrUint8 *buffer, CsrSize *offset)
+{
+ CsrUint32 val;
+
+ val = ((buffer[(*offset)] << 16) |
+ (buffer[(*offset) + 1] << 8) |
+ (buffer[(*offset) + 2]));
+
+ *offset += 3;
+ *v = val;
+}
+
+
+void CsrUint32DesBigEndian(CsrUint32 *v, CsrUint8 *buffer, CsrSize *offset)
+{
+ CsrUint32 val;
+
+ val = ((buffer[(*offset)] << 24) |
+ (buffer[(*offset) + 1] << 16) |
+ (buffer[(*offset) + 2] << 8) |
+ (buffer[(*offset) + 3]));
+
+ *offset += 4;
+ *v = val;
+}
+
+
+void CsrUint24Ser(CsrUint8 *ptr, CsrSize *len, CsrUint32 v)
+{
+ ptr[(*len) + 2] = (CsrUint8)((v & 0x00ff0000) >> 16);
+ ptr[(*len) + 1] = (CsrUint8)((v & 0x0000ff00) >> 8);
+ ptr[(*len)] = (CsrUint8)((v & 0x000000ff));
+
+ *len += 3;
+}
+
+
+/* Big endian :e.g WSC, TCLAS */
+void CsrUint16SerBigEndian(CsrUint8 *ptr, CsrSize *len, CsrUint16 v)
+{
+ ptr[(*len)] = (CsrUint8)((v & 0xff00) >> 8);
+ ptr[(*len) + 1] = (CsrUint8)((v & 0x00ff));
+
+ *len += 2;
+}
+
+
+void CsrUint32SerBigEndian(CsrUint8 *ptr, CsrSize *len, CsrUint32 v)
+{
+ ptr[(*len)] = (CsrUint8)((v & 0xff000000) >> 24);
+ ptr[(*len) + 1] = (CsrUint8)((v & 0x00ff0000) >> 16);
+ ptr[(*len) + 2] = (CsrUint8)((v & 0x0000ff00) >> 8);
+ ptr[(*len) + 3] = (CsrUint8)((v & 0x000000ff));
+
+ *len += 4;
+}
+
+
+void CsrUint24SerBigEndian(CsrUint8 *ptr, CsrSize *len, CsrUint32 v)
+{
+ ptr[(*len)] = (CsrUint8)((v & 0x00ff0000) >> 16);
+ ptr[(*len) + 1] = (CsrUint8)((v & 0x0000ff00) >> 8);
+ ptr[(*len) + 2] = (CsrUint8)((v & 0x000000ff));
+
+ *len += 3;
+}
+
+
+CsrSize CsrWifiEventSizeof(void *msg)
+{
+ return 2;
+}
+EXPORT_SYMBOL_GPL(CsrWifiEventSizeof);
+
+CsrUint8* CsrWifiEventSer(CsrUint8 *ptr, CsrSize *len, void *msg)
+{
+ CsrWifiFsmEvent *primitive = (CsrWifiFsmEvent *)msg;
+ *len = 0;
+ CsrUint16Ser(ptr, len, primitive->type);
+ return(ptr);
+}
+EXPORT_SYMBOL_GPL(CsrWifiEventSer);
+
+void* CsrWifiEventDes(CsrUint8 *buffer, CsrSize length)
+{
+ CsrWifiFsmEvent *primitive = (CsrWifiFsmEvent *) CsrPmemAlloc(sizeof(CsrWifiFsmEvent));
+ CsrSize offset = 0;
+ CsrUint16Des(&primitive->type, buffer, &offset);
+
+ return primitive;
+}
+EXPORT_SYMBOL_GPL(CsrWifiEventDes);
+
+CsrSize CsrWifiEventCsrUint8Sizeof(void *msg)
+{
+ return 3;
+}
+EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint8Sizeof);
+
+CsrUint8* CsrWifiEventCsrUint8Ser(CsrUint8 *ptr, CsrSize *len, void *msg)
+{
+ CsrWifiEventCsrUint8 *primitive = (CsrWifiEventCsrUint8 *)msg;
+ *len = 0;
+ CsrUint16Ser(ptr, len, primitive->common.type);
+ CsrUint8Ser(ptr, len, primitive->value);
+ return(ptr);
+}
+EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint8Ser);
+
+
+void* CsrWifiEventCsrUint8Des(CsrUint8 *buffer, CsrSize length)
+{
+ CsrWifiEventCsrUint8 *primitive = (CsrWifiEventCsrUint8 *) CsrPmemAlloc(sizeof(CsrWifiEventCsrUint8));
+
+ CsrSize offset = 0;
+ CsrUint16Des(&primitive->common.type, buffer, &offset);
+ CsrUint8Des(&primitive->value, buffer, &offset);
+
+ return primitive;
+}
+EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint8Des);
+
+
+CsrSize CsrWifiEventCsrUint16Sizeof(void *msg)
+{
+ return 4;
+}
+EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16Sizeof);
+
+
+CsrUint8* CsrWifiEventCsrUint16Ser(CsrUint8 *ptr, CsrSize *len, void *msg)
+{
+ CsrWifiEventCsrUint16 *primitive = (CsrWifiEventCsrUint16 *)msg;
+ *len = 0;
+ CsrUint16Ser(ptr, len, primitive->common.type);
+ CsrUint16Ser(ptr, len, primitive->value);
+ return(ptr);
+}
+EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16Ser);
+
+void* CsrWifiEventCsrUint16Des(CsrUint8 *buffer, CsrSize length)
+{
+ CsrWifiEventCsrUint16 *primitive = (CsrWifiEventCsrUint16 *) CsrPmemAlloc(sizeof(CsrWifiEventCsrUint16));
+
+ CsrSize offset = 0;
+ CsrUint16Des(&primitive->common.type, buffer, &offset);
+ CsrUint16Des(&primitive->value, buffer, &offset);
+
+ return primitive;
+}
+EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16Des);
+
+
+CsrSize CsrWifiEventCsrUint32Sizeof(void *msg)
+{
+ return 6;
+}
+EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint32Sizeof);
+
+CsrUint8* CsrWifiEventCsrUint32Ser(CsrUint8 *ptr, CsrSize *len, void *msg)
+{
+ CsrWifiEventCsrUint32 *primitive = (CsrWifiEventCsrUint32 *)msg;
+ *len = 0;
+ CsrUint16Ser(ptr, len, primitive->common.type);
+ CsrUint32Ser(ptr, len, primitive->value);
+ return(ptr);
+}
+EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint32Ser);
+
+
+void* CsrWifiEventCsrUint32Des(CsrUint8 *buffer, CsrSize length)
+{
+ CsrWifiEventCsrUint32 *primitive = (CsrWifiEventCsrUint32 *) CsrPmemAlloc(sizeof(CsrWifiEventCsrUint32));
+
+ CsrSize offset = 0;
+ CsrUint16Des(&primitive->common.type, buffer, &offset);
+ CsrUint32Des(&primitive->value, buffer, &offset);
+
+ return primitive;
+}
+EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint32Des);
+
+CsrSize CsrWifiEventCsrUint16CsrUint8Sizeof(void *msg)
+{
+ return 5;
+}
+EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16CsrUint8Sizeof);
+
+CsrUint8* CsrWifiEventCsrUint16CsrUint8Ser(CsrUint8 *ptr, CsrSize *len, void *msg)
+{
+ CsrWifiEventCsrUint16CsrUint8 *primitive = (CsrWifiEventCsrUint16CsrUint8 *)msg;
+ *len = 0;
+ CsrUint16Ser(ptr, len, primitive->common.type);
+ CsrUint16Ser(ptr, len, primitive->value16);
+ CsrUint8Ser(ptr, len, primitive->value8);
+ return(ptr);
+}
+EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16CsrUint8Ser);
+
+
+void* CsrWifiEventCsrUint16CsrUint8Des(CsrUint8 *buffer, CsrSize length)
+{
+ CsrWifiEventCsrUint16CsrUint8 *primitive = (CsrWifiEventCsrUint16CsrUint8 *) CsrPmemAlloc(sizeof(CsrWifiEventCsrUint16CsrUint8));
+
+ CsrSize offset = 0;
+ CsrUint16Des(&primitive->common.type, buffer, &offset);
+ CsrUint16Des(&primitive->value16, buffer, &offset);
+ CsrUint8Des(&primitive->value8, buffer, &offset);
+
+ return primitive;
+}
+EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16CsrUint8Des);
+
+