Commit | Line | Data |
---|---|---|
635d2b00 GKH |
1 | /***************************************************************************** |
2 | ||
3 | (c) Cambridge Silicon Radio Limited 2010 | |
4 | All rights reserved and confidential information of CSR | |
5 | ||
6 | Refer to LICENSE.txt included with this source for details | |
7 | on the license terms. | |
8 | ||
9 | *****************************************************************************/ | |
10 | ||
11 | #include <linux/module.h> | |
786eeeb3 | 12 | #include <linux/slab.h> |
635d2b00 GKH |
13 | #include "csr_prim_defs.h" |
14 | #include "csr_msgconv.h" | |
d63123fc | 15 | #include "csr_macro.h" |
635d2b00 | 16 | |
d4fda8db | 17 | void CsrUint8Des(u8 *value, u8 *buffer, size_t *offset) |
635d2b00 GKH |
18 | { |
19 | *value = buffer[*offset]; | |
20 | *offset += sizeof(*value); | |
21 | } | |
22 | EXPORT_SYMBOL_GPL(CsrUint8Des); | |
23 | ||
d4fda8db | 24 | void CsrUint16Des(u16 *value, u8 *buffer, size_t *offset) |
635d2b00 GKH |
25 | { |
26 | *value = (buffer[*offset + 0] << 0) | | |
27 | (buffer[*offset + 1] << 8); | |
28 | *offset += sizeof(*value); | |
29 | } | |
30 | EXPORT_SYMBOL_GPL(CsrUint16Des); | |
31 | ||
d4fda8db | 32 | void CsrUint32Des(u32 *value, u8 *buffer, size_t *offset) |
635d2b00 GKH |
33 | { |
34 | *value = (buffer[*offset + 0] << 0) | | |
35 | (buffer[*offset + 1] << 8) | | |
36 | (buffer[*offset + 2] << 16) | | |
37 | (buffer[*offset + 3] << 24); | |
38 | *offset += sizeof(*value); | |
39 | } | |
40 | EXPORT_SYMBOL_GPL(CsrUint32Des); | |
41 | ||
d4fda8db | 42 | void CsrMemCpyDes(void *value, u8 *buffer, size_t *offset, size_t length) |
635d2b00 | 43 | { |
25aebdb1 | 44 | memcpy(value, &buffer[*offset], length); |
635d2b00 GKH |
45 | *offset += length; |
46 | } | |
47 | EXPORT_SYMBOL_GPL(CsrMemCpyDes); | |
48 | ||
d4fda8db | 49 | void CsrCharStringDes(char **value, u8 *buffer, size_t *offset) |
635d2b00 | 50 | { |
5a0c09fd | 51 | *value = kstrdup((char *) &buffer[*offset], GFP_KERNEL); |
4bcb20f8 | 52 | *offset += strlen(*value) + 1; |
635d2b00 GKH |
53 | } |
54 | EXPORT_SYMBOL_GPL(CsrCharStringDes); | |
55 | ||
d4fda8db | 56 | void CsrUint8Ser(u8 *buffer, size_t *offset, u8 value) |
635d2b00 GKH |
57 | { |
58 | buffer[*offset] = value; | |
59 | *offset += sizeof(value); | |
60 | } | |
61 | EXPORT_SYMBOL_GPL(CsrUint8Ser); | |
62 | ||
d4fda8db | 63 | void CsrUint16Ser(u8 *buffer, size_t *offset, u16 value) |
635d2b00 | 64 | { |
7e6f5794 GKH |
65 | buffer[*offset + 0] = (u8) ((value >> 0) & 0xFF); |
66 | buffer[*offset + 1] = (u8) ((value >> 8) & 0xFF); | |
635d2b00 GKH |
67 | *offset += sizeof(value); |
68 | } | |
69 | EXPORT_SYMBOL_GPL(CsrUint16Ser); | |
70 | ||
d4fda8db | 71 | void CsrUint32Ser(u8 *buffer, size_t *offset, u32 value) |
635d2b00 | 72 | { |
7e6f5794 GKH |
73 | buffer[*offset + 0] = (u8) ((value >> 0) & 0xFF); |
74 | buffer[*offset + 1] = (u8) ((value >> 8) & 0xFF); | |
75 | buffer[*offset + 2] = (u8) ((value >> 16) & 0xFF); | |
76 | buffer[*offset + 3] = (u8) ((value >> 24) & 0xFF); | |
635d2b00 GKH |
77 | *offset += sizeof(value); |
78 | } | |
79 | EXPORT_SYMBOL_GPL(CsrUint32Ser); | |
80 | ||
d4fda8db | 81 | void CsrMemCpySer(u8 *buffer, size_t *offset, const void *value, size_t length) |
635d2b00 | 82 | { |
25aebdb1 | 83 | memcpy(&buffer[*offset], value, length); |
635d2b00 GKH |
84 | *offset += length; |
85 | } | |
86 | EXPORT_SYMBOL_GPL(CsrMemCpySer); | |
87 | ||
d4fda8db | 88 | void CsrCharStringSer(u8 *buffer, size_t *offset, const char *value) |
635d2b00 GKH |
89 | { |
90 | if (value) | |
91 | { | |
b6e6e3a8 | 92 | strcpy(((char *) &buffer[*offset]), value); |
4bcb20f8 | 93 | *offset += strlen(value) + 1; |
635d2b00 GKH |
94 | } |
95 | else | |
96 | { | |
97 | CsrUint8Ser(buffer, offset, 0); | |
98 | } | |
99 | } | |
100 | EXPORT_SYMBOL_GPL(CsrCharStringSer); |