1 /*****************************************************************************
3 (c) Cambridge Silicon Radio Limited 2011
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_macro.h"
14 #include "csr_msgconv.h"
15 #include "csr_wifi_msgconv.h"
16 #include "csr_wifi_lib.h"
18 void CsrUint24Des(u32 *v, u8 *buffer, size_t *offset)
22 val = ((buffer[(*offset) + 2] << 16) |
23 (buffer[(*offset) + 1] << 8) |
31 /* Big endian :e.g WSC, TCLAS */
32 void CsrUint16DesBigEndian(u16 *v, u8 *buffer, size_t *offset)
36 val = (buffer[(*offset)] << 8) | (buffer[(*offset) + 1]);
43 void CsrUint24DesBigEndian(u32 *v, u8 *buffer, size_t *offset)
47 val = ((buffer[(*offset)] << 16) |
48 (buffer[(*offset) + 1] << 8) |
49 (buffer[(*offset) + 2]));
56 void CsrUint32DesBigEndian(u32 *v, u8 *buffer, size_t *offset)
60 val = ((buffer[(*offset)] << 24) |
61 (buffer[(*offset) + 1] << 16) |
62 (buffer[(*offset) + 2] << 8) |
63 (buffer[(*offset) + 3]));
70 void CsrUint24Ser(u8 *ptr, size_t *len, u32 v)
72 ptr[(*len) + 2] = (u8)((v & 0x00ff0000) >> 16);
73 ptr[(*len) + 1] = (u8)((v & 0x0000ff00) >> 8);
74 ptr[(*len)] = (u8)((v & 0x000000ff));
80 /* Big endian :e.g WSC, TCLAS */
81 void CsrUint16SerBigEndian(u8 *ptr, size_t *len, u16 v)
83 ptr[(*len)] = (u8)((v & 0xff00) >> 8);
84 ptr[(*len) + 1] = (u8)((v & 0x00ff));
90 void CsrUint32SerBigEndian(u8 *ptr, size_t *len, u32 v)
92 ptr[(*len)] = (u8)((v & 0xff000000) >> 24);
93 ptr[(*len) + 1] = (u8)((v & 0x00ff0000) >> 16);
94 ptr[(*len) + 2] = (u8)((v & 0x0000ff00) >> 8);
95 ptr[(*len) + 3] = (u8)((v & 0x000000ff));
101 void CsrUint24SerBigEndian(u8 *ptr, size_t *len, u32 v)
103 ptr[(*len)] = (u8)((v & 0x00ff0000) >> 16);
104 ptr[(*len) + 1] = (u8)((v & 0x0000ff00) >> 8);
105 ptr[(*len) + 2] = (u8)((v & 0x000000ff));
111 size_t CsrWifiEventSizeof(void *msg)
115 EXPORT_SYMBOL_GPL(CsrWifiEventSizeof);
117 u8* CsrWifiEventSer(u8 *ptr, size_t *len, void *msg)
119 CsrWifiFsmEvent *primitive = (CsrWifiFsmEvent *)msg;
121 CsrUint16Ser(ptr, len, primitive->type);
124 EXPORT_SYMBOL_GPL(CsrWifiEventSer);
126 void* CsrWifiEventDes(u8 *buffer, size_t length)
128 CsrWifiFsmEvent *primitive = kmalloc(sizeof(CsrWifiFsmEvent), GFP_KERNEL);
130 CsrUint16Des(&primitive->type, buffer, &offset);
134 EXPORT_SYMBOL_GPL(CsrWifiEventDes);
136 size_t CsrWifiEventCsrUint8Sizeof(void *msg)
140 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint8Sizeof);
142 u8* CsrWifiEventCsrUint8Ser(u8 *ptr, size_t *len, void *msg)
144 CsrWifiEventCsrUint8 *primitive = (CsrWifiEventCsrUint8 *)msg;
146 CsrUint16Ser(ptr, len, primitive->common.type);
147 CsrUint8Ser(ptr, len, primitive->value);
150 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint8Ser);
153 void* CsrWifiEventCsrUint8Des(u8 *buffer, size_t length)
155 CsrWifiEventCsrUint8 *primitive = kmalloc(sizeof(CsrWifiEventCsrUint8), GFP_KERNEL);
158 CsrUint16Des(&primitive->common.type, buffer, &offset);
159 CsrUint8Des(&primitive->value, buffer, &offset);
163 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint8Des);
166 size_t CsrWifiEventCsrUint16Sizeof(void *msg)
170 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16Sizeof);
173 u8* CsrWifiEventCsrUint16Ser(u8 *ptr, size_t *len, void *msg)
175 CsrWifiEventCsrUint16 *primitive = (CsrWifiEventCsrUint16 *)msg;
177 CsrUint16Ser(ptr, len, primitive->common.type);
178 CsrUint16Ser(ptr, len, primitive->value);
181 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16Ser);
183 void* CsrWifiEventCsrUint16Des(u8 *buffer, size_t length)
185 CsrWifiEventCsrUint16 *primitive = kmalloc(sizeof(CsrWifiEventCsrUint16), GFP_KERNEL);
188 CsrUint16Des(&primitive->common.type, buffer, &offset);
189 CsrUint16Des(&primitive->value, buffer, &offset);
193 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16Des);
196 size_t CsrWifiEventCsrUint32Sizeof(void *msg)
200 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint32Sizeof);
202 u8* CsrWifiEventCsrUint32Ser(u8 *ptr, size_t *len, void *msg)
204 CsrWifiEventCsrUint32 *primitive = (CsrWifiEventCsrUint32 *)msg;
206 CsrUint16Ser(ptr, len, primitive->common.type);
207 CsrUint32Ser(ptr, len, primitive->value);
210 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint32Ser);
213 void* CsrWifiEventCsrUint32Des(u8 *buffer, size_t length)
215 CsrWifiEventCsrUint32 *primitive = kmalloc(sizeof(CsrWifiEventCsrUint32), GFP_KERNEL);
218 CsrUint16Des(&primitive->common.type, buffer, &offset);
219 CsrUint32Des(&primitive->value, buffer, &offset);
223 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint32Des);
225 size_t CsrWifiEventCsrUint16CsrUint8Sizeof(void *msg)
229 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16CsrUint8Sizeof);
231 u8* CsrWifiEventCsrUint16CsrUint8Ser(u8 *ptr, size_t *len, void *msg)
233 CsrWifiEventCsrUint16CsrUint8 *primitive = (CsrWifiEventCsrUint16CsrUint8 *)msg;
235 CsrUint16Ser(ptr, len, primitive->common.type);
236 CsrUint16Ser(ptr, len, primitive->value16);
237 CsrUint8Ser(ptr, len, primitive->value8);
240 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16CsrUint8Ser);
243 void* CsrWifiEventCsrUint16CsrUint8Des(u8 *buffer, size_t length)
245 CsrWifiEventCsrUint16CsrUint8 *primitive = kmalloc(sizeof(CsrWifiEventCsrUint16CsrUint8), GFP_KERNEL);
248 CsrUint16Des(&primitive->common.type, buffer, &offset);
249 CsrUint16Des(&primitive->value16, buffer, &offset);
250 CsrUint8Des(&primitive->value8, buffer, &offset);
254 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16CsrUint8Des);