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 "csr_types.h"
15 #include "csr_msgconv.h"
16 #include "csr_wifi_msgconv.h"
17 #include "csr_wifi_lib.h"
19 void CsrUint24Des(CsrUint32 *v, CsrUint8 *buffer, CsrSize *offset)
23 val = ((buffer[(*offset) + 2] << 16) |
24 (buffer[(*offset) + 1] << 8) |
32 /* Big endian :e.g WSC, TCLAS */
33 void CsrUint16DesBigEndian(CsrUint16 *v, CsrUint8 *buffer, CsrSize *offset)
37 val = (buffer[(*offset)] << 8) | (buffer[(*offset) + 1]);
44 void CsrUint24DesBigEndian(CsrUint32 *v, CsrUint8 *buffer, CsrSize *offset)
48 val = ((buffer[(*offset)] << 16) |
49 (buffer[(*offset) + 1] << 8) |
50 (buffer[(*offset) + 2]));
57 void CsrUint32DesBigEndian(CsrUint32 *v, CsrUint8 *buffer, CsrSize *offset)
61 val = ((buffer[(*offset)] << 24) |
62 (buffer[(*offset) + 1] << 16) |
63 (buffer[(*offset) + 2] << 8) |
64 (buffer[(*offset) + 3]));
71 void CsrUint24Ser(CsrUint8 *ptr, CsrSize *len, CsrUint32 v)
73 ptr[(*len) + 2] = (CsrUint8)((v & 0x00ff0000) >> 16);
74 ptr[(*len) + 1] = (CsrUint8)((v & 0x0000ff00) >> 8);
75 ptr[(*len)] = (CsrUint8)((v & 0x000000ff));
81 /* Big endian :e.g WSC, TCLAS */
82 void CsrUint16SerBigEndian(CsrUint8 *ptr, CsrSize *len, CsrUint16 v)
84 ptr[(*len)] = (CsrUint8)((v & 0xff00) >> 8);
85 ptr[(*len) + 1] = (CsrUint8)((v & 0x00ff));
91 void CsrUint32SerBigEndian(CsrUint8 *ptr, CsrSize *len, CsrUint32 v)
93 ptr[(*len)] = (CsrUint8)((v & 0xff000000) >> 24);
94 ptr[(*len) + 1] = (CsrUint8)((v & 0x00ff0000) >> 16);
95 ptr[(*len) + 2] = (CsrUint8)((v & 0x0000ff00) >> 8);
96 ptr[(*len) + 3] = (CsrUint8)((v & 0x000000ff));
102 void CsrUint24SerBigEndian(CsrUint8 *ptr, CsrSize *len, CsrUint32 v)
104 ptr[(*len)] = (CsrUint8)((v & 0x00ff0000) >> 16);
105 ptr[(*len) + 1] = (CsrUint8)((v & 0x0000ff00) >> 8);
106 ptr[(*len) + 2] = (CsrUint8)((v & 0x000000ff));
112 CsrSize CsrWifiEventSizeof(void *msg)
116 EXPORT_SYMBOL_GPL(CsrWifiEventSizeof);
118 CsrUint8* CsrWifiEventSer(CsrUint8 *ptr, CsrSize *len, void *msg)
120 CsrWifiFsmEvent *primitive = (CsrWifiFsmEvent *)msg;
122 CsrUint16Ser(ptr, len, primitive->type);
125 EXPORT_SYMBOL_GPL(CsrWifiEventSer);
127 void* CsrWifiEventDes(CsrUint8 *buffer, CsrSize length)
129 CsrWifiFsmEvent *primitive = (CsrWifiFsmEvent *) CsrPmemAlloc(sizeof(CsrWifiFsmEvent));
131 CsrUint16Des(&primitive->type, buffer, &offset);
135 EXPORT_SYMBOL_GPL(CsrWifiEventDes);
137 CsrSize CsrWifiEventCsrUint8Sizeof(void *msg)
141 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint8Sizeof);
143 CsrUint8* CsrWifiEventCsrUint8Ser(CsrUint8 *ptr, CsrSize *len, void *msg)
145 CsrWifiEventCsrUint8 *primitive = (CsrWifiEventCsrUint8 *)msg;
147 CsrUint16Ser(ptr, len, primitive->common.type);
148 CsrUint8Ser(ptr, len, primitive->value);
151 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint8Ser);
154 void* CsrWifiEventCsrUint8Des(CsrUint8 *buffer, CsrSize length)
156 CsrWifiEventCsrUint8 *primitive = (CsrWifiEventCsrUint8 *) CsrPmemAlloc(sizeof(CsrWifiEventCsrUint8));
159 CsrUint16Des(&primitive->common.type, buffer, &offset);
160 CsrUint8Des(&primitive->value, buffer, &offset);
164 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint8Des);
167 CsrSize CsrWifiEventCsrUint16Sizeof(void *msg)
171 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16Sizeof);
174 CsrUint8* CsrWifiEventCsrUint16Ser(CsrUint8 *ptr, CsrSize *len, void *msg)
176 CsrWifiEventCsrUint16 *primitive = (CsrWifiEventCsrUint16 *)msg;
178 CsrUint16Ser(ptr, len, primitive->common.type);
179 CsrUint16Ser(ptr, len, primitive->value);
182 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16Ser);
184 void* CsrWifiEventCsrUint16Des(CsrUint8 *buffer, CsrSize length)
186 CsrWifiEventCsrUint16 *primitive = (CsrWifiEventCsrUint16 *) CsrPmemAlloc(sizeof(CsrWifiEventCsrUint16));
189 CsrUint16Des(&primitive->common.type, buffer, &offset);
190 CsrUint16Des(&primitive->value, buffer, &offset);
194 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16Des);
197 CsrSize CsrWifiEventCsrUint32Sizeof(void *msg)
201 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint32Sizeof);
203 CsrUint8* CsrWifiEventCsrUint32Ser(CsrUint8 *ptr, CsrSize *len, void *msg)
205 CsrWifiEventCsrUint32 *primitive = (CsrWifiEventCsrUint32 *)msg;
207 CsrUint16Ser(ptr, len, primitive->common.type);
208 CsrUint32Ser(ptr, len, primitive->value);
211 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint32Ser);
214 void* CsrWifiEventCsrUint32Des(CsrUint8 *buffer, CsrSize length)
216 CsrWifiEventCsrUint32 *primitive = (CsrWifiEventCsrUint32 *) CsrPmemAlloc(sizeof(CsrWifiEventCsrUint32));
219 CsrUint16Des(&primitive->common.type, buffer, &offset);
220 CsrUint32Des(&primitive->value, buffer, &offset);
224 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint32Des);
226 CsrSize CsrWifiEventCsrUint16CsrUint8Sizeof(void *msg)
230 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16CsrUint8Sizeof);
232 CsrUint8* CsrWifiEventCsrUint16CsrUint8Ser(CsrUint8 *ptr, CsrSize *len, void *msg)
234 CsrWifiEventCsrUint16CsrUint8 *primitive = (CsrWifiEventCsrUint16CsrUint8 *)msg;
236 CsrUint16Ser(ptr, len, primitive->common.type);
237 CsrUint16Ser(ptr, len, primitive->value16);
238 CsrUint8Ser(ptr, len, primitive->value8);
241 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16CsrUint8Ser);
244 void* CsrWifiEventCsrUint16CsrUint8Des(CsrUint8 *buffer, CsrSize length)
246 CsrWifiEventCsrUint16CsrUint8 *primitive = (CsrWifiEventCsrUint16CsrUint8 *) CsrPmemAlloc(sizeof(CsrWifiEventCsrUint16CsrUint8));
249 CsrUint16Des(&primitive->common.type, buffer, &offset);
250 CsrUint16Des(&primitive->value16, buffer, &offset);
251 CsrUint8Des(&primitive->value8, buffer, &offset);
255 EXPORT_SYMBOL_GPL(CsrWifiEventCsrUint16CsrUint8Des);