Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
csr_wifi_serialize_primitive_types.c
Go to the documentation of this file.
1 /*****************************************************************************
2 
3  (c) Cambridge Silicon Radio Limited 2011
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>
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"
17 
18 void CsrUint24Des(u32 *v, u8 *buffer, size_t *offset)
19 {
20  u32 val;
21 
22  val = ((buffer[(*offset) + 2] << 16) |
23  (buffer[(*offset) + 1] << 8) |
24  (buffer[(*offset)]));
25 
26  *offset += 3;
27  *v = val;
28 }
29 
30 
31 /* Big endian :e.g WSC, TCLAS */
33 {
34  u16 val;
35 
36  val = (buffer[(*offset)] << 8) | (buffer[(*offset) + 1]);
37  *offset += 2;
38 
39  *v = val;
40 }
41 
42 
44 {
45  u32 val;
46 
47  val = ((buffer[(*offset)] << 16) |
48  (buffer[(*offset) + 1] << 8) |
49  (buffer[(*offset) + 2]));
50 
51  *offset += 3;
52  *v = val;
53 }
54 
55 
57 {
58  u32 val;
59 
60  val = ((buffer[(*offset)] << 24) |
61  (buffer[(*offset) + 1] << 16) |
62  (buffer[(*offset) + 2] << 8) |
63  (buffer[(*offset) + 3]));
64 
65  *offset += 4;
66  *v = val;
67 }
68 
69 
70 void CsrUint24Ser(u8 *ptr, size_t *len, u32 v)
71 {
72  ptr[(*len) + 2] = (u8)((v & 0x00ff0000) >> 16);
73  ptr[(*len) + 1] = (u8)((v & 0x0000ff00) >> 8);
74  ptr[(*len)] = (u8)((v & 0x000000ff));
75 
76  *len += 3;
77 }
78 
79 
80 /* Big endian :e.g WSC, TCLAS */
81 void CsrUint16SerBigEndian(u8 *ptr, size_t *len, u16 v)
82 {
83  ptr[(*len)] = (u8)((v & 0xff00) >> 8);
84  ptr[(*len) + 1] = (u8)((v & 0x00ff));
85 
86  *len += 2;
87 }
88 
89 
90 void CsrUint32SerBigEndian(u8 *ptr, size_t *len, u32 v)
91 {
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));
96 
97  *len += 4;
98 }
99 
100 
101 void CsrUint24SerBigEndian(u8 *ptr, size_t *len, u32 v)
102 {
103  ptr[(*len)] = (u8)((v & 0x00ff0000) >> 16);
104  ptr[(*len) + 1] = (u8)((v & 0x0000ff00) >> 8);
105  ptr[(*len) + 2] = (u8)((v & 0x000000ff));
106 
107  *len += 3;
108 }
109 
110 
111 size_t CsrWifiEventSizeof(void *msg)
112 {
113  return 2;
114 }
116 
117 u8* CsrWifiEventSer(u8 *ptr, size_t *len, void *msg)
118 {
119  CsrWifiFsmEvent *primitive = (CsrWifiFsmEvent *)msg;
120  *len = 0;
121  CsrUint16Ser(ptr, len, primitive->type);
122  return(ptr);
123 }
125 
127 {
128  CsrWifiFsmEvent *primitive = kmalloc(sizeof(CsrWifiFsmEvent), GFP_KERNEL);
129  size_t offset = 0;
130  CsrUint16Des(&primitive->type, buffer, &offset);
131 
132  return primitive;
133 }
135 
137 {
138  return 3;
139 }
141 
142 u8* CsrWifiEventCsrUint8Ser(u8 *ptr, size_t *len, void *msg)
143 {
144  CsrWifiEventCsrUint8 *primitive = (CsrWifiEventCsrUint8 *)msg;
145  *len = 0;
146  CsrUint16Ser(ptr, len, primitive->common.type);
147  CsrUint8Ser(ptr, len, primitive->value);
148  return(ptr);
149 }
151 
152 
154 {
156 
157  size_t offset = 0;
158  CsrUint16Des(&primitive->common.type, buffer, &offset);
159  CsrUint8Des(&primitive->value, buffer, &offset);
160 
161  return primitive;
162 }
164 
165 
167 {
168  return 4;
169 }
171 
172 
173 u8* CsrWifiEventCsrUint16Ser(u8 *ptr, size_t *len, void *msg)
174 {
175  CsrWifiEventCsrUint16 *primitive = (CsrWifiEventCsrUint16 *)msg;
176  *len = 0;
177  CsrUint16Ser(ptr, len, primitive->common.type);
178  CsrUint16Ser(ptr, len, primitive->value);
179  return(ptr);
180 }
182 
184 {
186 
187  size_t offset = 0;
188  CsrUint16Des(&primitive->common.type, buffer, &offset);
189  CsrUint16Des(&primitive->value, buffer, &offset);
190 
191  return primitive;
192 }
194 
195 
197 {
198  return 6;
199 }
201 
202 u8* CsrWifiEventCsrUint32Ser(u8 *ptr, size_t *len, void *msg)
203 {
204  CsrWifiEventCsrUint32 *primitive = (CsrWifiEventCsrUint32 *)msg;
205  *len = 0;
206  CsrUint16Ser(ptr, len, primitive->common.type);
207  CsrUint32Ser(ptr, len, primitive->value);
208  return(ptr);
209 }
211 
212 
214 {
216 
217  size_t offset = 0;
218  CsrUint16Des(&primitive->common.type, buffer, &offset);
219  CsrUint32Des(&primitive->value, buffer, &offset);
220 
221  return primitive;
222 }
224 
226 {
227  return 5;
228 }
230 
232 {
234  *len = 0;
235  CsrUint16Ser(ptr, len, primitive->common.type);
236  CsrUint16Ser(ptr, len, primitive->value16);
237  CsrUint8Ser(ptr, len, primitive->value8);
238  return(ptr);
239 }
241 
242 
244 {
246 
247  size_t offset = 0;
248  CsrUint16Des(&primitive->common.type, buffer, &offset);
249  CsrUint16Des(&primitive->value16, buffer, &offset);
250  CsrUint8Des(&primitive->value8, buffer, &offset);
251 
252  return primitive;
253 }
255 
256