1 /*****************************************************************************
3 (c) Cambridge Silicon Radio Limited 2010
4 All rights reserved and confidential information of CSR
6 Refer to LICENSE.txt included with this source for details
9 *****************************************************************************/
11 #include <linux/module.h>
12 #include <linux/slab.h>
13 #include "csr_prim_defs.h"
14 #include "csr_msgconv.h"
15 #include "csr_macro.h"
18 void CsrUint8Des(u8 *value, u8 *buffer, size_t *offset)
20 *value = buffer[*offset];
21 *offset += sizeof(*value);
23 EXPORT_SYMBOL_GPL(CsrUint8Des);
25 void CsrUint16Des(u16 *value, u8 *buffer, size_t *offset)
27 *value = (buffer[*offset + 0] << 0) |
28 (buffer[*offset + 1] << 8);
29 *offset += sizeof(*value);
31 EXPORT_SYMBOL_GPL(CsrUint16Des);
33 void CsrUint32Des(u32 *value, u8 *buffer, size_t *offset)
35 *value = (buffer[*offset + 0] << 0) |
36 (buffer[*offset + 1] << 8) |
37 (buffer[*offset + 2] << 16) |
38 (buffer[*offset + 3] << 24);
39 *offset += sizeof(*value);
41 EXPORT_SYMBOL_GPL(CsrUint32Des);
43 void CsrMemCpyDes(void *value, u8 *buffer, size_t *offset, size_t length)
45 memcpy(value, &buffer[*offset], length);
48 EXPORT_SYMBOL_GPL(CsrMemCpyDes);
50 void CsrCharStringDes(char **value, u8 *buffer, size_t *offset)
52 *value = kstrdup((char *) &buffer[*offset], GFP_KERNEL);
53 *offset += strlen(*value) + 1;
55 EXPORT_SYMBOL_GPL(CsrCharStringDes);
57 void CsrUint8Ser(u8 *buffer, size_t *offset, u8 value)
59 buffer[*offset] = value;
60 *offset += sizeof(value);
62 EXPORT_SYMBOL_GPL(CsrUint8Ser);
64 void CsrUint16Ser(u8 *buffer, size_t *offset, u16 value)
66 buffer[*offset + 0] = (u8) ((value >> 0) & 0xFF);
67 buffer[*offset + 1] = (u8) ((value >> 8) & 0xFF);
68 *offset += sizeof(value);
70 EXPORT_SYMBOL_GPL(CsrUint16Ser);
72 void CsrUint32Ser(u8 *buffer, size_t *offset, u32 value)
74 buffer[*offset + 0] = (u8) ((value >> 0) & 0xFF);
75 buffer[*offset + 1] = (u8) ((value >> 8) & 0xFF);
76 buffer[*offset + 2] = (u8) ((value >> 16) & 0xFF);
77 buffer[*offset + 3] = (u8) ((value >> 24) & 0xFF);
78 *offset += sizeof(value);
80 EXPORT_SYMBOL_GPL(CsrUint32Ser);
82 void CsrMemCpySer(u8 *buffer, size_t *offset, const void *value, size_t length)
84 memcpy(&buffer[*offset], value, length);
87 EXPORT_SYMBOL_GPL(CsrMemCpySer);
89 void CsrCharStringSer(u8 *buffer, size_t *offset, const char *value)
93 strcpy(((char *) &buffer[*offset]), value);
94 *offset += strlen(value) + 1;
98 CsrUint8Ser(buffer, offset, 0);
101 EXPORT_SYMBOL_GPL(CsrCharStringSer);