Merge remote-tracking branches 'asoc/topic/prefix' and 'asoc/topic/rcar' into asoc...
[deliverable/linux.git] / drivers / staging / ozwpan / ozprotocol.h
1 /* -----------------------------------------------------------------------------
2 * Copyright (c) 2011 Ozmo Inc
3 * Released under the GNU General Public License Version 2 (GPLv2).
4 * -----------------------------------------------------------------------------
5 */
6 #ifndef _OZPROTOCOL_H
7 #define _OZPROTOCOL_H
8
9 #define PACKED __packed
10
11 #define OZ_ETHERTYPE 0x892e
12
13 /* Status codes
14 */
15 #define OZ_STATUS_SUCCESS 0
16 #define OZ_STATUS_INVALID_PARAM 1
17 #define OZ_STATUS_TOO_MANY_PDS 2
18 #define OZ_STATUS_NOT_ALLOWED 4
19 #define OZ_STATUS_SESSION_MISMATCH 5
20 #define OZ_STATUS_SESSION_TEARDOWN 6
21
22 /* This is the generic element header.
23 Every element starts with this.
24 */
25 struct oz_elt {
26 u8 type;
27 u8 length;
28 } PACKED;
29
30 #define oz_next_elt(__elt) \
31 (struct oz_elt *)((u8 *)((__elt) + 1) + (__elt)->length)
32
33 /* Protocol element IDs.
34 */
35 #define OZ_ELT_CONNECT_REQ 0x06
36 #define OZ_ELT_CONNECT_RSP 0x07
37 #define OZ_ELT_DISCONNECT 0x08
38 #define OZ_ELT_UPDATE_PARAM_REQ 0x11
39 #define OZ_ELT_FAREWELL_REQ 0x12
40 #define OZ_ELT_APP_DATA 0x31
41
42 /* This is the Ozmo header which is the first Ozmo specific part
43 * of a frame and comes after the MAC header.
44 */
45 struct oz_hdr {
46 u8 control;
47 u8 last_pkt_num;
48 u32 pkt_num;
49 } PACKED;
50
51 #define OZ_PROTOCOL_VERSION 0x1
52 /* Bits in the control field. */
53 #define OZ_VERSION_MASK 0xc
54 #define OZ_VERSION_SHIFT 2
55 #define OZ_F_ACK 0x10
56 #define OZ_F_ISOC 0x20
57 #define OZ_F_MORE_DATA 0x40
58 #define OZ_F_ACK_REQUESTED 0x80
59
60 #define oz_get_prot_ver(__x) (((__x) & OZ_VERSION_MASK) >> OZ_VERSION_SHIFT)
61
62 /* Used to select the bits of packet number to put in the last_pkt_num.
63 */
64 #define OZ_LAST_PN_MASK 0x00ff
65
66 #define OZ_LAST_PN_HALF_CYCLE 127
67
68 #define OZ_LATENCY_MASK 0xc0
69 #define OZ_ONE_MS_LATENCY 0x40
70 #define OZ_TEN_MS_LATENCY 0x80
71
72 /* Connect request data structure.
73 */
74 struct oz_elt_connect_req {
75 u8 mode;
76 u8 resv1[16];
77 u8 pd_info;
78 u8 session_id;
79 u8 presleep;
80 u8 ms_isoc_latency;
81 u8 host_vendor;
82 u8 keep_alive;
83 u16 apps;
84 u8 max_len_div16;
85 u8 ms_per_isoc;
86 u8 resv3[2];
87 } PACKED;
88
89 /* mode field bits.
90 */
91 #define OZ_MODE_POLLED 0x0
92 #define OZ_MODE_TRIGGERED 0x1
93 #define OZ_MODE_MASK 0xf
94 #define OZ_F_ISOC_NO_ELTS 0x40
95 #define OZ_F_ISOC_ANYTIME 0x80
96 #define OZ_NO_ELTS_ANYTIME 0xc0
97
98 /* Keep alive field.
99 */
100 #define OZ_KALIVE_TYPE_MASK 0xc0
101 #define OZ_KALIVE_VALUE_MASK 0x3f
102 #define OZ_KALIVE_SPECIAL 0x00
103 #define OZ_KALIVE_SECS 0x40
104 #define OZ_KALIVE_MINS 0x80
105 #define OZ_KALIVE_HOURS 0xc0
106
107 /* Connect response data structure.
108 */
109 struct oz_elt_connect_rsp {
110 u8 mode;
111 u8 status;
112 u8 resv1[3];
113 u8 session_id;
114 u16 apps;
115 u32 resv2;
116 } PACKED;
117
118 struct oz_elt_farewell {
119 u8 ep_num;
120 u8 index;
121 u8 report[1];
122 } PACKED;
123
124 struct oz_elt_update_param {
125 u8 resv1[16];
126 u8 presleep;
127 u8 resv2;
128 u8 host_vendor;
129 u8 keepalive;
130 } PACKED;
131
132 /* Header common to all application elements.
133 */
134 struct oz_app_hdr {
135 u8 app_id;
136 u8 elt_seq_num;
137 } PACKED;
138
139 /* Values for app_id.
140 */
141 #define OZ_APPID_USB 0x1
142 #define OZ_APPID_UNUSED1 0x2
143 #define OZ_APPID_UNUSED2 0x3
144 #define OZ_APPID_SERIAL 0x4
145 #define OZ_APPID_MAX OZ_APPID_SERIAL
146 #define OZ_NB_APPS (OZ_APPID_MAX+1)
147
148 /* USB header common to all elements for the USB application.
149 * This header extends the oz_app_hdr and comes directly after
150 * the element header in a USB application.
151 */
152 struct oz_usb_hdr {
153 u8 app_id;
154 u8 elt_seq_num;
155 u8 type;
156 } PACKED;
157
158
159
160 /* USB requests element subtypes (type field of hs_usb_hdr).
161 */
162 #define OZ_GET_DESC_REQ 1
163 #define OZ_GET_DESC_RSP 2
164 #define OZ_SET_CONFIG_REQ 3
165 #define OZ_SET_CONFIG_RSP 4
166 #define OZ_SET_INTERFACE_REQ 5
167 #define OZ_SET_INTERFACE_RSP 6
168 #define OZ_VENDOR_CLASS_REQ 7
169 #define OZ_VENDOR_CLASS_RSP 8
170 #define OZ_GET_STATUS_REQ 9
171 #define OZ_GET_STATUS_RSP 10
172 #define OZ_CLEAR_FEATURE_REQ 11
173 #define OZ_CLEAR_FEATURE_RSP 12
174 #define OZ_SET_FEATURE_REQ 13
175 #define OZ_SET_FEATURE_RSP 14
176 #define OZ_GET_CONFIGURATION_REQ 15
177 #define OZ_GET_CONFIGURATION_RSP 16
178 #define OZ_GET_INTERFACE_REQ 17
179 #define OZ_GET_INTERFACE_RSP 18
180 #define OZ_SYNCH_FRAME_REQ 19
181 #define OZ_SYNCH_FRAME_RSP 20
182 #define OZ_USB_ENDPOINT_DATA 23
183
184 #define OZ_REQD_D2H 0x80
185
186 struct oz_get_desc_req {
187 u8 app_id;
188 u8 elt_seq_num;
189 u8 type;
190 u8 req_id;
191 u16 offset;
192 u16 size;
193 u8 req_type;
194 u8 desc_type;
195 u16 w_index;
196 u8 index;
197 } PACKED;
198
199 /* Values for desc_type field.
200 */
201 #define OZ_DESC_DEVICE 0x01
202 #define OZ_DESC_CONFIG 0x02
203 #define OZ_DESC_STRING 0x03
204
205 /* Values for req_type field.
206 */
207 #define OZ_RECP_MASK 0x1F
208 #define OZ_RECP_DEVICE 0x00
209 #define OZ_RECP_INTERFACE 0x01
210 #define OZ_RECP_ENDPOINT 0x02
211
212 #define OZ_REQT_MASK 0x60
213 #define OZ_REQT_STD 0x00
214 #define OZ_REQT_CLASS 0x20
215 #define OZ_REQT_VENDOR 0x40
216
217 struct oz_get_desc_rsp {
218 u8 app_id;
219 u8 elt_seq_num;
220 u8 type;
221 u8 req_id;
222 u16 offset;
223 u16 total_size;
224 u8 rcode;
225 u8 data[1];
226 } PACKED;
227
228 struct oz_feature_req {
229 u8 app_id;
230 u8 elt_seq_num;
231 u8 type;
232 u8 req_id;
233 u8 recipient;
234 u8 index;
235 u16 feature;
236 } PACKED;
237
238 struct oz_feature_rsp {
239 u8 app_id;
240 u8 elt_seq_num;
241 u8 type;
242 u8 req_id;
243 u8 rcode;
244 } PACKED;
245
246 struct oz_set_config_req {
247 u8 app_id;
248 u8 elt_seq_num;
249 u8 type;
250 u8 req_id;
251 u8 index;
252 } PACKED;
253
254 struct oz_set_config_rsp {
255 u8 app_id;
256 u8 elt_seq_num;
257 u8 type;
258 u8 req_id;
259 u8 rcode;
260 } PACKED;
261
262 struct oz_set_interface_req {
263 u8 app_id;
264 u8 elt_seq_num;
265 u8 type;
266 u8 req_id;
267 u8 index;
268 u8 alternative;
269 } PACKED;
270
271 struct oz_set_interface_rsp {
272 u8 app_id;
273 u8 elt_seq_num;
274 u8 type;
275 u8 req_id;
276 u8 rcode;
277 } PACKED;
278
279 struct oz_get_interface_req {
280 u8 app_id;
281 u8 elt_seq_num;
282 u8 type;
283 u8 req_id;
284 u8 index;
285 } PACKED;
286
287 struct oz_get_interface_rsp {
288 u8 app_id;
289 u8 elt_seq_num;
290 u8 type;
291 u8 req_id;
292 u8 rcode;
293 u8 alternative;
294 } PACKED;
295
296 struct oz_vendor_class_req {
297 u8 app_id;
298 u8 elt_seq_num;
299 u8 type;
300 u8 req_id;
301 u8 req_type;
302 u8 request;
303 u16 value;
304 u16 index;
305 u8 data[1];
306 } PACKED;
307
308 struct oz_vendor_class_rsp {
309 u8 app_id;
310 u8 elt_seq_num;
311 u8 type;
312 u8 req_id;
313 u8 rcode;
314 u8 data[1];
315 } PACKED;
316
317 struct oz_data {
318 u8 app_id;
319 u8 elt_seq_num;
320 u8 type;
321 u8 endpoint;
322 u8 format;
323 } PACKED;
324
325 struct oz_isoc_fixed {
326 u8 app_id;
327 u8 elt_seq_num;
328 u8 type;
329 u8 endpoint;
330 u8 format;
331 u8 unit_size;
332 u8 frame_number;
333 u8 data[1];
334 } PACKED;
335
336 struct oz_multiple_fixed {
337 u8 app_id;
338 u8 elt_seq_num;
339 u8 type;
340 u8 endpoint;
341 u8 format;
342 u8 unit_size;
343 u8 data[1];
344 } PACKED;
345
346 struct oz_fragmented {
347 u8 app_id;
348 u8 elt_seq_num;
349 u8 type;
350 u8 endpoint;
351 u8 format;
352 u16 total_size;
353 u16 offset;
354 u8 data[1];
355 } PACKED;
356
357 /* Note: the following does not get packaged in an element in the same way
358 * that other data formats are packaged. Instead the data is put in a frame
359 * directly after the oz_header and is the only permitted data in such a
360 * frame. The length of the data is directly determined from the frame size.
361 */
362 struct oz_isoc_large {
363 u8 endpoint;
364 u8 format;
365 u8 ms_data;
366 u8 frame_number;
367 } PACKED;
368
369 #define OZ_DATA_F_TYPE_MASK 0xF
370 #define OZ_DATA_F_MULTIPLE_FIXED 0x1
371 #define OZ_DATA_F_MULTIPLE_VAR 0x2
372 #define OZ_DATA_F_ISOC_FIXED 0x3
373 #define OZ_DATA_F_ISOC_VAR 0x4
374 #define OZ_DATA_F_FRAGMENTED 0x5
375 #define OZ_DATA_F_ISOC_LARGE 0x7
376
377 #endif /* _OZPROTOCOL_H */
This page took 0.037689 seconds and 5 git commands to generate.