Linux 4.19.133
[linux/fpc-iii.git] / drivers / media / usb / as102 / as10x_cmd.h
blobe06b84e2ff79eab459913f55372c74feaf6320fb
1 /*
2 * Abilis Systems Single DVB-T Receiver
3 * Copyright (C) 2008 Pierrick Hascoet <pierrick.hascoet@abilis.com>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2, or (at your option)
8 * any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 #ifndef _AS10X_CMD_H_
16 #define _AS10X_CMD_H_
18 #include <linux/kernel.h>
20 #include "as102_fe_types.h"
22 /*********************************/
23 /* MACRO DEFINITIONS */
24 /*********************************/
25 #define AS10X_CMD_ERROR -1
27 #define SERVICE_PROG_ID 0x0002
28 #define SERVICE_PROG_VERSION 0x0001
30 #define HIER_NONE 0x00
31 #define HIER_LOW_PRIORITY 0x01
33 #define HEADER_SIZE (sizeof(struct as10x_cmd_header_t))
35 /* context request types */
36 #define GET_CONTEXT_DATA 1
37 #define SET_CONTEXT_DATA 2
39 /* ODSP suspend modes */
40 #define CFG_MODE_ODSP_RESUME 0
41 #define CFG_MODE_ODSP_SUSPEND 1
43 /* Dump memory size */
44 #define DUMP_BLOCK_SIZE_MAX 0x20
46 /*********************************/
47 /* TYPE DEFINITION */
48 /*********************************/
49 enum control_proc {
50 CONTROL_PROC_TURNON = 0x0001,
51 CONTROL_PROC_TURNON_RSP = 0x0100,
52 CONTROL_PROC_SET_REGISTER = 0x0002,
53 CONTROL_PROC_SET_REGISTER_RSP = 0x0200,
54 CONTROL_PROC_GET_REGISTER = 0x0003,
55 CONTROL_PROC_GET_REGISTER_RSP = 0x0300,
56 CONTROL_PROC_SETTUNE = 0x000A,
57 CONTROL_PROC_SETTUNE_RSP = 0x0A00,
58 CONTROL_PROC_GETTUNESTAT = 0x000B,
59 CONTROL_PROC_GETTUNESTAT_RSP = 0x0B00,
60 CONTROL_PROC_GETTPS = 0x000D,
61 CONTROL_PROC_GETTPS_RSP = 0x0D00,
62 CONTROL_PROC_SETFILTER = 0x000E,
63 CONTROL_PROC_SETFILTER_RSP = 0x0E00,
64 CONTROL_PROC_REMOVEFILTER = 0x000F,
65 CONTROL_PROC_REMOVEFILTER_RSP = 0x0F00,
66 CONTROL_PROC_GET_IMPULSE_RESP = 0x0012,
67 CONTROL_PROC_GET_IMPULSE_RESP_RSP = 0x1200,
68 CONTROL_PROC_START_STREAMING = 0x0013,
69 CONTROL_PROC_START_STREAMING_RSP = 0x1300,
70 CONTROL_PROC_STOP_STREAMING = 0x0014,
71 CONTROL_PROC_STOP_STREAMING_RSP = 0x1400,
72 CONTROL_PROC_GET_DEMOD_STATS = 0x0015,
73 CONTROL_PROC_GET_DEMOD_STATS_RSP = 0x1500,
74 CONTROL_PROC_ELNA_CHANGE_MODE = 0x0016,
75 CONTROL_PROC_ELNA_CHANGE_MODE_RSP = 0x1600,
76 CONTROL_PROC_ODSP_CHANGE_MODE = 0x0017,
77 CONTROL_PROC_ODSP_CHANGE_MODE_RSP = 0x1700,
78 CONTROL_PROC_AGC_CHANGE_MODE = 0x0018,
79 CONTROL_PROC_AGC_CHANGE_MODE_RSP = 0x1800,
81 CONTROL_PROC_CONTEXT = 0x00FC,
82 CONTROL_PROC_CONTEXT_RSP = 0xFC00,
83 CONTROL_PROC_DUMP_MEMORY = 0x00FD,
84 CONTROL_PROC_DUMP_MEMORY_RSP = 0xFD00,
85 CONTROL_PROC_DUMPLOG_MEMORY = 0x00FE,
86 CONTROL_PROC_DUMPLOG_MEMORY_RSP = 0xFE00,
87 CONTROL_PROC_TURNOFF = 0x00FF,
88 CONTROL_PROC_TURNOFF_RSP = 0xFF00
91 union as10x_turn_on {
92 /* request */
93 struct {
94 /* request identifier */
95 __le16 proc_id;
96 } __packed req;
97 /* response */
98 struct {
99 /* response identifier */
100 __le16 proc_id;
101 /* error */
102 uint8_t error;
103 } __packed rsp;
104 } __packed;
106 union as10x_turn_off {
107 /* request */
108 struct {
109 /* request identifier */
110 __le16 proc_id;
111 } __packed req;
112 /* response */
113 struct {
114 /* response identifier */
115 __le16 proc_id;
116 /* error */
117 uint8_t err;
118 } __packed rsp;
119 } __packed;
121 union as10x_set_tune {
122 /* request */
123 struct {
124 /* request identifier */
125 __le16 proc_id;
126 /* tune params */
127 struct as10x_tune_args args;
128 } __packed req;
129 /* response */
130 struct {
131 /* response identifier */
132 __le16 proc_id;
133 /* response error */
134 uint8_t error;
135 } __packed rsp;
136 } __packed;
138 union as10x_get_tune_status {
139 /* request */
140 struct {
141 /* request identifier */
142 __le16 proc_id;
143 } __packed req;
144 /* response */
145 struct {
146 /* response identifier */
147 __le16 proc_id;
148 /* response error */
149 uint8_t error;
150 /* tune status */
151 struct as10x_tune_status sts;
152 } __packed rsp;
153 } __packed;
155 union as10x_get_tps {
156 /* request */
157 struct {
158 /* request identifier */
159 __le16 proc_id;
160 } __packed req;
161 /* response */
162 struct {
163 /* response identifier */
164 __le16 proc_id;
165 /* response error */
166 uint8_t error;
167 /* tps details */
168 struct as10x_tps tps;
169 } __packed rsp;
170 } __packed;
172 union as10x_common {
173 /* request */
174 struct {
175 /* request identifier */
176 __le16 proc_id;
177 } __packed req;
178 /* response */
179 struct {
180 /* response identifier */
181 __le16 proc_id;
182 /* response error */
183 uint8_t error;
184 } __packed rsp;
185 } __packed;
187 union as10x_add_pid_filter {
188 /* request */
189 struct {
190 /* request identifier */
191 __le16 proc_id;
192 /* PID to filter */
193 __le16 pid;
194 /* stream type (MPE, PSI/SI or PES )*/
195 uint8_t stream_type;
196 /* PID index in filter table */
197 uint8_t idx;
198 } __packed req;
199 /* response */
200 struct {
201 /* response identifier */
202 __le16 proc_id;
203 /* response error */
204 uint8_t error;
205 /* Filter id */
206 uint8_t filter_id;
207 } __packed rsp;
208 } __packed;
210 union as10x_del_pid_filter {
211 /* request */
212 struct {
213 /* request identifier */
214 __le16 proc_id;
215 /* PID to remove */
216 __le16 pid;
217 } __packed req;
218 /* response */
219 struct {
220 /* response identifier */
221 __le16 proc_id;
222 /* response error */
223 uint8_t error;
224 } __packed rsp;
225 } __packed;
227 union as10x_start_streaming {
228 /* request */
229 struct {
230 /* request identifier */
231 __le16 proc_id;
232 } __packed req;
233 /* response */
234 struct {
235 /* response identifier */
236 __le16 proc_id;
237 /* error */
238 uint8_t error;
239 } __packed rsp;
240 } __packed;
242 union as10x_stop_streaming {
243 /* request */
244 struct {
245 /* request identifier */
246 __le16 proc_id;
247 } __packed req;
248 /* response */
249 struct {
250 /* response identifier */
251 __le16 proc_id;
252 /* error */
253 uint8_t error;
254 } __packed rsp;
255 } __packed;
257 union as10x_get_demod_stats {
258 /* request */
259 struct {
260 /* request identifier */
261 __le16 proc_id;
262 } __packed req;
263 /* response */
264 struct {
265 /* response identifier */
266 __le16 proc_id;
267 /* error */
268 uint8_t error;
269 /* demod stats */
270 struct as10x_demod_stats stats;
271 } __packed rsp;
272 } __packed;
274 union as10x_get_impulse_resp {
275 /* request */
276 struct {
277 /* request identifier */
278 __le16 proc_id;
279 } __packed req;
280 /* response */
281 struct {
282 /* response identifier */
283 __le16 proc_id;
284 /* error */
285 uint8_t error;
286 /* impulse response ready */
287 uint8_t is_ready;
288 } __packed rsp;
289 } __packed;
291 union as10x_fw_context {
292 /* request */
293 struct {
294 /* request identifier */
295 __le16 proc_id;
296 /* value to write (for set context)*/
297 struct as10x_register_value reg_val;
298 /* context tag */
299 __le16 tag;
300 /* context request type */
301 __le16 type;
302 } __packed req;
303 /* response */
304 struct {
305 /* response identifier */
306 __le16 proc_id;
307 /* value read (for get context) */
308 struct as10x_register_value reg_val;
309 /* context request type */
310 __le16 type;
311 /* error */
312 uint8_t error;
313 } __packed rsp;
314 } __packed;
316 union as10x_set_register {
317 /* request */
318 struct {
319 /* response identifier */
320 __le16 proc_id;
321 /* register description */
322 struct as10x_register_addr reg_addr;
323 /* register content */
324 struct as10x_register_value reg_val;
325 } __packed req;
326 /* response */
327 struct {
328 /* response identifier */
329 __le16 proc_id;
330 /* error */
331 uint8_t error;
332 } __packed rsp;
333 } __packed;
335 union as10x_get_register {
336 /* request */
337 struct {
338 /* response identifier */
339 __le16 proc_id;
340 /* register description */
341 struct as10x_register_addr reg_addr;
342 } __packed req;
343 /* response */
344 struct {
345 /* response identifier */
346 __le16 proc_id;
347 /* error */
348 uint8_t error;
349 /* register content */
350 struct as10x_register_value reg_val;
351 } __packed rsp;
352 } __packed;
354 union as10x_cfg_change_mode {
355 /* request */
356 struct {
357 /* request identifier */
358 __le16 proc_id;
359 /* mode */
360 uint8_t mode;
361 } __packed req;
362 /* response */
363 struct {
364 /* response identifier */
365 __le16 proc_id;
366 /* error */
367 uint8_t error;
368 } __packed rsp;
369 } __packed;
371 struct as10x_cmd_header_t {
372 __le16 req_id;
373 __le16 prog;
374 __le16 version;
375 __le16 data_len;
376 } __packed;
378 #define DUMP_BLOCK_SIZE 16
380 union as10x_dump_memory {
381 /* request */
382 struct {
383 /* request identifier */
384 __le16 proc_id;
385 /* dump memory type request */
386 uint8_t dump_req;
387 /* register description */
388 struct as10x_register_addr reg_addr;
389 /* nb blocks to read */
390 __le16 num_blocks;
391 } __packed req;
392 /* response */
393 struct {
394 /* response identifier */
395 __le16 proc_id;
396 /* error */
397 uint8_t error;
398 /* dump response */
399 uint8_t dump_rsp;
400 /* data */
401 union {
402 uint8_t data8[DUMP_BLOCK_SIZE];
403 __le16 data16[DUMP_BLOCK_SIZE / sizeof(__le16)];
404 __le32 data32[DUMP_BLOCK_SIZE / sizeof(__le32)];
405 } __packed u;
406 } __packed rsp;
407 } __packed;
409 union as10x_dumplog_memory {
410 struct {
411 /* request identifier */
412 __le16 proc_id;
413 /* dump memory type request */
414 uint8_t dump_req;
415 } __packed req;
416 struct {
417 /* request identifier */
418 __le16 proc_id;
419 /* error */
420 uint8_t error;
421 /* dump response */
422 uint8_t dump_rsp;
423 /* dump data */
424 uint8_t data[DUMP_BLOCK_SIZE];
425 } __packed rsp;
426 } __packed;
428 union as10x_raw_data {
429 /* request */
430 struct {
431 __le16 proc_id;
432 uint8_t data[64 - sizeof(struct as10x_cmd_header_t)
433 - 2 /* proc_id */];
434 } __packed req;
435 /* response */
436 struct {
437 __le16 proc_id;
438 uint8_t error;
439 uint8_t data[64 - sizeof(struct as10x_cmd_header_t)
440 - 2 /* proc_id */ - 1 /* rc */];
441 } __packed rsp;
442 } __packed;
444 struct as10x_cmd_t {
445 struct as10x_cmd_header_t header;
446 union {
447 union as10x_turn_on turn_on;
448 union as10x_turn_off turn_off;
449 union as10x_set_tune set_tune;
450 union as10x_get_tune_status get_tune_status;
451 union as10x_get_tps get_tps;
452 union as10x_common common;
453 union as10x_add_pid_filter add_pid_filter;
454 union as10x_del_pid_filter del_pid_filter;
455 union as10x_start_streaming start_streaming;
456 union as10x_stop_streaming stop_streaming;
457 union as10x_get_demod_stats get_demod_stats;
458 union as10x_get_impulse_resp get_impulse_rsp;
459 union as10x_fw_context context;
460 union as10x_set_register set_register;
461 union as10x_get_register get_register;
462 union as10x_cfg_change_mode cfg_change_mode;
463 union as10x_dump_memory dump_memory;
464 union as10x_dumplog_memory dumplog_memory;
465 union as10x_raw_data raw_data;
466 } __packed body;
467 } __packed;
469 struct as10x_token_cmd_t {
470 /* token cmd */
471 struct as10x_cmd_t c;
472 /* token response */
473 struct as10x_cmd_t r;
474 } __packed;
477 /**************************/
478 /* FUNCTION DECLARATION */
479 /**************************/
481 void as10x_cmd_build(struct as10x_cmd_t *pcmd, uint16_t proc_id,
482 uint16_t cmd_len);
483 int as10x_rsp_parse(struct as10x_cmd_t *r, uint16_t proc_id);
485 /* as10x cmd */
486 int as10x_cmd_turn_on(struct as10x_bus_adapter_t *adap);
487 int as10x_cmd_turn_off(struct as10x_bus_adapter_t *adap);
489 int as10x_cmd_set_tune(struct as10x_bus_adapter_t *adap,
490 struct as10x_tune_args *ptune);
492 int as10x_cmd_get_tune_status(struct as10x_bus_adapter_t *adap,
493 struct as10x_tune_status *pstatus);
495 int as10x_cmd_get_tps(struct as10x_bus_adapter_t *adap,
496 struct as10x_tps *ptps);
498 int as10x_cmd_get_demod_stats(struct as10x_bus_adapter_t *adap,
499 struct as10x_demod_stats *pdemod_stats);
501 int as10x_cmd_get_impulse_resp(struct as10x_bus_adapter_t *adap,
502 uint8_t *is_ready);
504 /* as10x cmd stream */
505 int as10x_cmd_add_PID_filter(struct as10x_bus_adapter_t *adap,
506 struct as10x_ts_filter *filter);
507 int as10x_cmd_del_PID_filter(struct as10x_bus_adapter_t *adap,
508 uint16_t pid_value);
510 int as10x_cmd_start_streaming(struct as10x_bus_adapter_t *adap);
511 int as10x_cmd_stop_streaming(struct as10x_bus_adapter_t *adap);
513 /* as10x cmd cfg */
514 int as10x_cmd_set_context(struct as10x_bus_adapter_t *adap,
515 uint16_t tag,
516 uint32_t value);
517 int as10x_cmd_get_context(struct as10x_bus_adapter_t *adap,
518 uint16_t tag,
519 uint32_t *pvalue);
521 int as10x_cmd_eLNA_change_mode(struct as10x_bus_adapter_t *adap, uint8_t mode);
522 int as10x_context_rsp_parse(struct as10x_cmd_t *prsp, uint16_t proc_id);
523 #endif