162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Abilis Systems Single DVB-T Receiver
462306a36Sopenharmony_ci * Copyright (C) 2008 Pierrick Hascoet <pierrick.hascoet@abilis.com>
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci#ifndef _AS10X_CMD_H_
762306a36Sopenharmony_ci#define _AS10X_CMD_H_
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/kernel.h>
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include "as102_fe_types.h"
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci/*********************************/
1462306a36Sopenharmony_ci/*       MACRO DEFINITIONS       */
1562306a36Sopenharmony_ci/*********************************/
1662306a36Sopenharmony_ci#define AS10X_CMD_ERROR		-1
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci#define SERVICE_PROG_ID		0x0002
1962306a36Sopenharmony_ci#define SERVICE_PROG_VERSION	0x0001
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci#define HIER_NONE		0x00
2262306a36Sopenharmony_ci#define HIER_LOW_PRIORITY	0x01
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci#define HEADER_SIZE (sizeof(struct as10x_cmd_header_t))
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci/* context request types */
2762306a36Sopenharmony_ci#define GET_CONTEXT_DATA	1
2862306a36Sopenharmony_ci#define SET_CONTEXT_DATA	2
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci/* ODSP suspend modes */
3162306a36Sopenharmony_ci#define CFG_MODE_ODSP_RESUME	0
3262306a36Sopenharmony_ci#define CFG_MODE_ODSP_SUSPEND	1
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci/* Dump memory size */
3562306a36Sopenharmony_ci#define DUMP_BLOCK_SIZE_MAX	0x20
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci/*********************************/
3862306a36Sopenharmony_ci/*     TYPE DEFINITION           */
3962306a36Sopenharmony_ci/*********************************/
4062306a36Sopenharmony_cienum control_proc {
4162306a36Sopenharmony_ci	CONTROL_PROC_TURNON			= 0x0001,
4262306a36Sopenharmony_ci	CONTROL_PROC_TURNON_RSP			= 0x0100,
4362306a36Sopenharmony_ci	CONTROL_PROC_SET_REGISTER		= 0x0002,
4462306a36Sopenharmony_ci	CONTROL_PROC_SET_REGISTER_RSP		= 0x0200,
4562306a36Sopenharmony_ci	CONTROL_PROC_GET_REGISTER		= 0x0003,
4662306a36Sopenharmony_ci	CONTROL_PROC_GET_REGISTER_RSP		= 0x0300,
4762306a36Sopenharmony_ci	CONTROL_PROC_SETTUNE			= 0x000A,
4862306a36Sopenharmony_ci	CONTROL_PROC_SETTUNE_RSP		= 0x0A00,
4962306a36Sopenharmony_ci	CONTROL_PROC_GETTUNESTAT		= 0x000B,
5062306a36Sopenharmony_ci	CONTROL_PROC_GETTUNESTAT_RSP		= 0x0B00,
5162306a36Sopenharmony_ci	CONTROL_PROC_GETTPS			= 0x000D,
5262306a36Sopenharmony_ci	CONTROL_PROC_GETTPS_RSP			= 0x0D00,
5362306a36Sopenharmony_ci	CONTROL_PROC_SETFILTER			= 0x000E,
5462306a36Sopenharmony_ci	CONTROL_PROC_SETFILTER_RSP		= 0x0E00,
5562306a36Sopenharmony_ci	CONTROL_PROC_REMOVEFILTER		= 0x000F,
5662306a36Sopenharmony_ci	CONTROL_PROC_REMOVEFILTER_RSP		= 0x0F00,
5762306a36Sopenharmony_ci	CONTROL_PROC_GET_IMPULSE_RESP		= 0x0012,
5862306a36Sopenharmony_ci	CONTROL_PROC_GET_IMPULSE_RESP_RSP	= 0x1200,
5962306a36Sopenharmony_ci	CONTROL_PROC_START_STREAMING		= 0x0013,
6062306a36Sopenharmony_ci	CONTROL_PROC_START_STREAMING_RSP	= 0x1300,
6162306a36Sopenharmony_ci	CONTROL_PROC_STOP_STREAMING		= 0x0014,
6262306a36Sopenharmony_ci	CONTROL_PROC_STOP_STREAMING_RSP		= 0x1400,
6362306a36Sopenharmony_ci	CONTROL_PROC_GET_DEMOD_STATS		= 0x0015,
6462306a36Sopenharmony_ci	CONTROL_PROC_GET_DEMOD_STATS_RSP	= 0x1500,
6562306a36Sopenharmony_ci	CONTROL_PROC_ELNA_CHANGE_MODE		= 0x0016,
6662306a36Sopenharmony_ci	CONTROL_PROC_ELNA_CHANGE_MODE_RSP	= 0x1600,
6762306a36Sopenharmony_ci	CONTROL_PROC_ODSP_CHANGE_MODE		= 0x0017,
6862306a36Sopenharmony_ci	CONTROL_PROC_ODSP_CHANGE_MODE_RSP	= 0x1700,
6962306a36Sopenharmony_ci	CONTROL_PROC_AGC_CHANGE_MODE		= 0x0018,
7062306a36Sopenharmony_ci	CONTROL_PROC_AGC_CHANGE_MODE_RSP	= 0x1800,
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci	CONTROL_PROC_CONTEXT			= 0x00FC,
7362306a36Sopenharmony_ci	CONTROL_PROC_CONTEXT_RSP		= 0xFC00,
7462306a36Sopenharmony_ci	CONTROL_PROC_DUMP_MEMORY		= 0x00FD,
7562306a36Sopenharmony_ci	CONTROL_PROC_DUMP_MEMORY_RSP		= 0xFD00,
7662306a36Sopenharmony_ci	CONTROL_PROC_DUMPLOG_MEMORY		= 0x00FE,
7762306a36Sopenharmony_ci	CONTROL_PROC_DUMPLOG_MEMORY_RSP		= 0xFE00,
7862306a36Sopenharmony_ci	CONTROL_PROC_TURNOFF			= 0x00FF,
7962306a36Sopenharmony_ci	CONTROL_PROC_TURNOFF_RSP		= 0xFF00
8062306a36Sopenharmony_ci};
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ciunion as10x_turn_on {
8362306a36Sopenharmony_ci	/* request */
8462306a36Sopenharmony_ci	struct {
8562306a36Sopenharmony_ci		/* request identifier */
8662306a36Sopenharmony_ci		__le16 proc_id;
8762306a36Sopenharmony_ci	} __packed req;
8862306a36Sopenharmony_ci	/* response */
8962306a36Sopenharmony_ci	struct {
9062306a36Sopenharmony_ci		/* response identifier */
9162306a36Sopenharmony_ci		__le16 proc_id;
9262306a36Sopenharmony_ci		/* error */
9362306a36Sopenharmony_ci		uint8_t error;
9462306a36Sopenharmony_ci	} __packed rsp;
9562306a36Sopenharmony_ci} __packed;
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ciunion as10x_turn_off {
9862306a36Sopenharmony_ci	/* request */
9962306a36Sopenharmony_ci	struct {
10062306a36Sopenharmony_ci		/* request identifier */
10162306a36Sopenharmony_ci		__le16 proc_id;
10262306a36Sopenharmony_ci	} __packed req;
10362306a36Sopenharmony_ci	/* response */
10462306a36Sopenharmony_ci	struct {
10562306a36Sopenharmony_ci		/* response identifier */
10662306a36Sopenharmony_ci		__le16 proc_id;
10762306a36Sopenharmony_ci		/* error */
10862306a36Sopenharmony_ci		uint8_t err;
10962306a36Sopenharmony_ci	} __packed rsp;
11062306a36Sopenharmony_ci} __packed;
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ciunion as10x_set_tune {
11362306a36Sopenharmony_ci	/* request */
11462306a36Sopenharmony_ci	struct {
11562306a36Sopenharmony_ci		/* request identifier */
11662306a36Sopenharmony_ci		__le16 proc_id;
11762306a36Sopenharmony_ci		/* tune params */
11862306a36Sopenharmony_ci		struct as10x_tune_args args;
11962306a36Sopenharmony_ci	} __packed req;
12062306a36Sopenharmony_ci	/* response */
12162306a36Sopenharmony_ci	struct {
12262306a36Sopenharmony_ci		/* response identifier */
12362306a36Sopenharmony_ci		__le16 proc_id;
12462306a36Sopenharmony_ci		/* response error */
12562306a36Sopenharmony_ci		uint8_t error;
12662306a36Sopenharmony_ci	} __packed rsp;
12762306a36Sopenharmony_ci} __packed;
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ciunion as10x_get_tune_status {
13062306a36Sopenharmony_ci	/* request */
13162306a36Sopenharmony_ci	struct {
13262306a36Sopenharmony_ci		/* request identifier */
13362306a36Sopenharmony_ci		__le16 proc_id;
13462306a36Sopenharmony_ci	} __packed req;
13562306a36Sopenharmony_ci	/* response */
13662306a36Sopenharmony_ci	struct {
13762306a36Sopenharmony_ci		/* response identifier */
13862306a36Sopenharmony_ci		__le16 proc_id;
13962306a36Sopenharmony_ci		/* response error */
14062306a36Sopenharmony_ci		uint8_t error;
14162306a36Sopenharmony_ci		/* tune status */
14262306a36Sopenharmony_ci		struct as10x_tune_status sts;
14362306a36Sopenharmony_ci	} __packed rsp;
14462306a36Sopenharmony_ci} __packed;
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ciunion as10x_get_tps {
14762306a36Sopenharmony_ci	/* request */
14862306a36Sopenharmony_ci	struct {
14962306a36Sopenharmony_ci		/* request identifier */
15062306a36Sopenharmony_ci		__le16 proc_id;
15162306a36Sopenharmony_ci	} __packed req;
15262306a36Sopenharmony_ci	/* response */
15362306a36Sopenharmony_ci	struct {
15462306a36Sopenharmony_ci		/* response identifier */
15562306a36Sopenharmony_ci		__le16 proc_id;
15662306a36Sopenharmony_ci		/* response error */
15762306a36Sopenharmony_ci		uint8_t error;
15862306a36Sopenharmony_ci		/* tps details */
15962306a36Sopenharmony_ci		struct as10x_tps tps;
16062306a36Sopenharmony_ci	} __packed rsp;
16162306a36Sopenharmony_ci} __packed;
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_ciunion as10x_common {
16462306a36Sopenharmony_ci	/* request */
16562306a36Sopenharmony_ci	struct {
16662306a36Sopenharmony_ci		/* request identifier */
16762306a36Sopenharmony_ci		__le16  proc_id;
16862306a36Sopenharmony_ci	} __packed req;
16962306a36Sopenharmony_ci	/* response */
17062306a36Sopenharmony_ci	struct {
17162306a36Sopenharmony_ci		/* response identifier */
17262306a36Sopenharmony_ci		__le16 proc_id;
17362306a36Sopenharmony_ci		/* response error */
17462306a36Sopenharmony_ci		uint8_t error;
17562306a36Sopenharmony_ci	} __packed rsp;
17662306a36Sopenharmony_ci} __packed;
17762306a36Sopenharmony_ci
17862306a36Sopenharmony_ciunion as10x_add_pid_filter {
17962306a36Sopenharmony_ci	/* request */
18062306a36Sopenharmony_ci	struct {
18162306a36Sopenharmony_ci		/* request identifier */
18262306a36Sopenharmony_ci		__le16  proc_id;
18362306a36Sopenharmony_ci		/* PID to filter */
18462306a36Sopenharmony_ci		__le16  pid;
18562306a36Sopenharmony_ci		/* stream type (MPE, PSI/SI or PES )*/
18662306a36Sopenharmony_ci		uint8_t stream_type;
18762306a36Sopenharmony_ci		/* PID index in filter table */
18862306a36Sopenharmony_ci		uint8_t idx;
18962306a36Sopenharmony_ci	} __packed req;
19062306a36Sopenharmony_ci	/* response */
19162306a36Sopenharmony_ci	struct {
19262306a36Sopenharmony_ci		/* response identifier */
19362306a36Sopenharmony_ci		__le16 proc_id;
19462306a36Sopenharmony_ci		/* response error */
19562306a36Sopenharmony_ci		uint8_t error;
19662306a36Sopenharmony_ci		/* Filter id */
19762306a36Sopenharmony_ci		uint8_t filter_id;
19862306a36Sopenharmony_ci	} __packed rsp;
19962306a36Sopenharmony_ci} __packed;
20062306a36Sopenharmony_ci
20162306a36Sopenharmony_ciunion as10x_del_pid_filter {
20262306a36Sopenharmony_ci	/* request */
20362306a36Sopenharmony_ci	struct {
20462306a36Sopenharmony_ci		/* request identifier */
20562306a36Sopenharmony_ci		__le16  proc_id;
20662306a36Sopenharmony_ci		/* PID to remove */
20762306a36Sopenharmony_ci		__le16  pid;
20862306a36Sopenharmony_ci	} __packed req;
20962306a36Sopenharmony_ci	/* response */
21062306a36Sopenharmony_ci	struct {
21162306a36Sopenharmony_ci		/* response identifier */
21262306a36Sopenharmony_ci		__le16 proc_id;
21362306a36Sopenharmony_ci		/* response error */
21462306a36Sopenharmony_ci		uint8_t error;
21562306a36Sopenharmony_ci	} __packed rsp;
21662306a36Sopenharmony_ci} __packed;
21762306a36Sopenharmony_ci
21862306a36Sopenharmony_ciunion as10x_start_streaming {
21962306a36Sopenharmony_ci	/* request */
22062306a36Sopenharmony_ci	struct {
22162306a36Sopenharmony_ci		/* request identifier */
22262306a36Sopenharmony_ci		__le16 proc_id;
22362306a36Sopenharmony_ci	} __packed req;
22462306a36Sopenharmony_ci	/* response */
22562306a36Sopenharmony_ci	struct {
22662306a36Sopenharmony_ci		/* response identifier */
22762306a36Sopenharmony_ci		__le16 proc_id;
22862306a36Sopenharmony_ci		/* error */
22962306a36Sopenharmony_ci		uint8_t error;
23062306a36Sopenharmony_ci	} __packed rsp;
23162306a36Sopenharmony_ci} __packed;
23262306a36Sopenharmony_ci
23362306a36Sopenharmony_ciunion as10x_stop_streaming {
23462306a36Sopenharmony_ci	/* request */
23562306a36Sopenharmony_ci	struct {
23662306a36Sopenharmony_ci		/* request identifier */
23762306a36Sopenharmony_ci		__le16 proc_id;
23862306a36Sopenharmony_ci	} __packed req;
23962306a36Sopenharmony_ci	/* response */
24062306a36Sopenharmony_ci	struct {
24162306a36Sopenharmony_ci		/* response identifier */
24262306a36Sopenharmony_ci		__le16 proc_id;
24362306a36Sopenharmony_ci		/* error */
24462306a36Sopenharmony_ci		uint8_t error;
24562306a36Sopenharmony_ci	} __packed rsp;
24662306a36Sopenharmony_ci} __packed;
24762306a36Sopenharmony_ci
24862306a36Sopenharmony_ciunion as10x_get_demod_stats {
24962306a36Sopenharmony_ci	/* request */
25062306a36Sopenharmony_ci	struct {
25162306a36Sopenharmony_ci		/* request identifier */
25262306a36Sopenharmony_ci		__le16 proc_id;
25362306a36Sopenharmony_ci	} __packed req;
25462306a36Sopenharmony_ci	/* response */
25562306a36Sopenharmony_ci	struct {
25662306a36Sopenharmony_ci		/* response identifier */
25762306a36Sopenharmony_ci		__le16 proc_id;
25862306a36Sopenharmony_ci		/* error */
25962306a36Sopenharmony_ci		uint8_t error;
26062306a36Sopenharmony_ci		/* demod stats */
26162306a36Sopenharmony_ci		struct as10x_demod_stats stats;
26262306a36Sopenharmony_ci	} __packed rsp;
26362306a36Sopenharmony_ci} __packed;
26462306a36Sopenharmony_ci
26562306a36Sopenharmony_ciunion as10x_get_impulse_resp {
26662306a36Sopenharmony_ci	/* request */
26762306a36Sopenharmony_ci	struct {
26862306a36Sopenharmony_ci		/* request identifier */
26962306a36Sopenharmony_ci		__le16 proc_id;
27062306a36Sopenharmony_ci	} __packed req;
27162306a36Sopenharmony_ci	/* response */
27262306a36Sopenharmony_ci	struct {
27362306a36Sopenharmony_ci		/* response identifier */
27462306a36Sopenharmony_ci		__le16 proc_id;
27562306a36Sopenharmony_ci		/* error */
27662306a36Sopenharmony_ci		uint8_t error;
27762306a36Sopenharmony_ci		/* impulse response ready */
27862306a36Sopenharmony_ci		uint8_t is_ready;
27962306a36Sopenharmony_ci	} __packed rsp;
28062306a36Sopenharmony_ci} __packed;
28162306a36Sopenharmony_ci
28262306a36Sopenharmony_ciunion as10x_fw_context {
28362306a36Sopenharmony_ci	/* request */
28462306a36Sopenharmony_ci	struct {
28562306a36Sopenharmony_ci		/* request identifier */
28662306a36Sopenharmony_ci		__le16 proc_id;
28762306a36Sopenharmony_ci		/* value to write (for set context)*/
28862306a36Sopenharmony_ci		struct as10x_register_value reg_val;
28962306a36Sopenharmony_ci		/* context tag */
29062306a36Sopenharmony_ci		__le16 tag;
29162306a36Sopenharmony_ci		/* context request type */
29262306a36Sopenharmony_ci		__le16 type;
29362306a36Sopenharmony_ci	} __packed req;
29462306a36Sopenharmony_ci	/* response */
29562306a36Sopenharmony_ci	struct {
29662306a36Sopenharmony_ci		/* response identifier */
29762306a36Sopenharmony_ci		__le16 proc_id;
29862306a36Sopenharmony_ci		/* value read (for get context) */
29962306a36Sopenharmony_ci		struct as10x_register_value reg_val;
30062306a36Sopenharmony_ci		/* context request type */
30162306a36Sopenharmony_ci		__le16 type;
30262306a36Sopenharmony_ci		/* error */
30362306a36Sopenharmony_ci		uint8_t error;
30462306a36Sopenharmony_ci	} __packed rsp;
30562306a36Sopenharmony_ci} __packed;
30662306a36Sopenharmony_ci
30762306a36Sopenharmony_ciunion as10x_set_register {
30862306a36Sopenharmony_ci	/* request */
30962306a36Sopenharmony_ci	struct {
31062306a36Sopenharmony_ci		/* response identifier */
31162306a36Sopenharmony_ci		__le16 proc_id;
31262306a36Sopenharmony_ci		/* register description */
31362306a36Sopenharmony_ci		struct as10x_register_addr reg_addr;
31462306a36Sopenharmony_ci		/* register content */
31562306a36Sopenharmony_ci		struct as10x_register_value reg_val;
31662306a36Sopenharmony_ci	} __packed req;
31762306a36Sopenharmony_ci	/* response */
31862306a36Sopenharmony_ci	struct {
31962306a36Sopenharmony_ci		/* response identifier */
32062306a36Sopenharmony_ci		__le16 proc_id;
32162306a36Sopenharmony_ci		/* error */
32262306a36Sopenharmony_ci		uint8_t error;
32362306a36Sopenharmony_ci	} __packed rsp;
32462306a36Sopenharmony_ci} __packed;
32562306a36Sopenharmony_ci
32662306a36Sopenharmony_ciunion as10x_get_register {
32762306a36Sopenharmony_ci	/* request */
32862306a36Sopenharmony_ci	struct {
32962306a36Sopenharmony_ci		/* response identifier */
33062306a36Sopenharmony_ci		__le16 proc_id;
33162306a36Sopenharmony_ci		/* register description */
33262306a36Sopenharmony_ci		struct as10x_register_addr reg_addr;
33362306a36Sopenharmony_ci	} __packed req;
33462306a36Sopenharmony_ci	/* response */
33562306a36Sopenharmony_ci	struct {
33662306a36Sopenharmony_ci		/* response identifier */
33762306a36Sopenharmony_ci		__le16 proc_id;
33862306a36Sopenharmony_ci		/* error */
33962306a36Sopenharmony_ci		uint8_t error;
34062306a36Sopenharmony_ci		/* register content */
34162306a36Sopenharmony_ci		struct as10x_register_value reg_val;
34262306a36Sopenharmony_ci	} __packed rsp;
34362306a36Sopenharmony_ci} __packed;
34462306a36Sopenharmony_ci
34562306a36Sopenharmony_ciunion as10x_cfg_change_mode {
34662306a36Sopenharmony_ci	/* request */
34762306a36Sopenharmony_ci	struct {
34862306a36Sopenharmony_ci		/* request identifier */
34962306a36Sopenharmony_ci		__le16 proc_id;
35062306a36Sopenharmony_ci		/* mode */
35162306a36Sopenharmony_ci		uint8_t mode;
35262306a36Sopenharmony_ci	} __packed req;
35362306a36Sopenharmony_ci	/* response */
35462306a36Sopenharmony_ci	struct {
35562306a36Sopenharmony_ci		/* response identifier */
35662306a36Sopenharmony_ci		__le16 proc_id;
35762306a36Sopenharmony_ci		/* error */
35862306a36Sopenharmony_ci		uint8_t error;
35962306a36Sopenharmony_ci	} __packed rsp;
36062306a36Sopenharmony_ci} __packed;
36162306a36Sopenharmony_ci
36262306a36Sopenharmony_cistruct as10x_cmd_header_t {
36362306a36Sopenharmony_ci	__le16 req_id;
36462306a36Sopenharmony_ci	__le16 prog;
36562306a36Sopenharmony_ci	__le16 version;
36662306a36Sopenharmony_ci	__le16 data_len;
36762306a36Sopenharmony_ci} __packed;
36862306a36Sopenharmony_ci
36962306a36Sopenharmony_ci#define DUMP_BLOCK_SIZE 16
37062306a36Sopenharmony_ci
37162306a36Sopenharmony_ciunion as10x_dump_memory {
37262306a36Sopenharmony_ci	/* request */
37362306a36Sopenharmony_ci	struct {
37462306a36Sopenharmony_ci		/* request identifier */
37562306a36Sopenharmony_ci		__le16 proc_id;
37662306a36Sopenharmony_ci		/* dump memory type request */
37762306a36Sopenharmony_ci		uint8_t dump_req;
37862306a36Sopenharmony_ci		/* register description */
37962306a36Sopenharmony_ci		struct as10x_register_addr reg_addr;
38062306a36Sopenharmony_ci		/* nb blocks to read */
38162306a36Sopenharmony_ci		__le16 num_blocks;
38262306a36Sopenharmony_ci	} __packed req;
38362306a36Sopenharmony_ci	/* response */
38462306a36Sopenharmony_ci	struct {
38562306a36Sopenharmony_ci		/* response identifier */
38662306a36Sopenharmony_ci		__le16 proc_id;
38762306a36Sopenharmony_ci		/* error */
38862306a36Sopenharmony_ci		uint8_t error;
38962306a36Sopenharmony_ci		/* dump response */
39062306a36Sopenharmony_ci		uint8_t dump_rsp;
39162306a36Sopenharmony_ci		/* data */
39262306a36Sopenharmony_ci		union {
39362306a36Sopenharmony_ci			uint8_t  data8[DUMP_BLOCK_SIZE];
39462306a36Sopenharmony_ci			__le16 data16[DUMP_BLOCK_SIZE / sizeof(__le16)];
39562306a36Sopenharmony_ci			__le32 data32[DUMP_BLOCK_SIZE / sizeof(__le32)];
39662306a36Sopenharmony_ci		} __packed u;
39762306a36Sopenharmony_ci	} __packed rsp;
39862306a36Sopenharmony_ci} __packed;
39962306a36Sopenharmony_ci
40062306a36Sopenharmony_ciunion as10x_dumplog_memory {
40162306a36Sopenharmony_ci	struct {
40262306a36Sopenharmony_ci		/* request identifier */
40362306a36Sopenharmony_ci		__le16 proc_id;
40462306a36Sopenharmony_ci		/* dump memory type request */
40562306a36Sopenharmony_ci		uint8_t dump_req;
40662306a36Sopenharmony_ci	} __packed req;
40762306a36Sopenharmony_ci	struct {
40862306a36Sopenharmony_ci		/* request identifier */
40962306a36Sopenharmony_ci		__le16 proc_id;
41062306a36Sopenharmony_ci		/* error */
41162306a36Sopenharmony_ci		uint8_t error;
41262306a36Sopenharmony_ci		/* dump response */
41362306a36Sopenharmony_ci		uint8_t dump_rsp;
41462306a36Sopenharmony_ci		/* dump data */
41562306a36Sopenharmony_ci		uint8_t data[DUMP_BLOCK_SIZE];
41662306a36Sopenharmony_ci	} __packed rsp;
41762306a36Sopenharmony_ci} __packed;
41862306a36Sopenharmony_ci
41962306a36Sopenharmony_ciunion as10x_raw_data {
42062306a36Sopenharmony_ci	/* request */
42162306a36Sopenharmony_ci	struct {
42262306a36Sopenharmony_ci		__le16 proc_id;
42362306a36Sopenharmony_ci		uint8_t data[64 - sizeof(struct as10x_cmd_header_t)
42462306a36Sopenharmony_ci			     - 2 /* proc_id */];
42562306a36Sopenharmony_ci	} __packed req;
42662306a36Sopenharmony_ci	/* response */
42762306a36Sopenharmony_ci	struct {
42862306a36Sopenharmony_ci		__le16 proc_id;
42962306a36Sopenharmony_ci		uint8_t error;
43062306a36Sopenharmony_ci		uint8_t data[64 - sizeof(struct as10x_cmd_header_t)
43162306a36Sopenharmony_ci			     - 2 /* proc_id */ - 1 /* rc */];
43262306a36Sopenharmony_ci	} __packed rsp;
43362306a36Sopenharmony_ci} __packed;
43462306a36Sopenharmony_ci
43562306a36Sopenharmony_cistruct as10x_cmd_t {
43662306a36Sopenharmony_ci	struct as10x_cmd_header_t header;
43762306a36Sopenharmony_ci	union {
43862306a36Sopenharmony_ci		union as10x_turn_on		turn_on;
43962306a36Sopenharmony_ci		union as10x_turn_off		turn_off;
44062306a36Sopenharmony_ci		union as10x_set_tune		set_tune;
44162306a36Sopenharmony_ci		union as10x_get_tune_status	get_tune_status;
44262306a36Sopenharmony_ci		union as10x_get_tps		get_tps;
44362306a36Sopenharmony_ci		union as10x_common		common;
44462306a36Sopenharmony_ci		union as10x_add_pid_filter	add_pid_filter;
44562306a36Sopenharmony_ci		union as10x_del_pid_filter	del_pid_filter;
44662306a36Sopenharmony_ci		union as10x_start_streaming	start_streaming;
44762306a36Sopenharmony_ci		union as10x_stop_streaming	stop_streaming;
44862306a36Sopenharmony_ci		union as10x_get_demod_stats	get_demod_stats;
44962306a36Sopenharmony_ci		union as10x_get_impulse_resp	get_impulse_rsp;
45062306a36Sopenharmony_ci		union as10x_fw_context		context;
45162306a36Sopenharmony_ci		union as10x_set_register	set_register;
45262306a36Sopenharmony_ci		union as10x_get_register	get_register;
45362306a36Sopenharmony_ci		union as10x_cfg_change_mode	cfg_change_mode;
45462306a36Sopenharmony_ci		union as10x_dump_memory		dump_memory;
45562306a36Sopenharmony_ci		union as10x_dumplog_memory	dumplog_memory;
45662306a36Sopenharmony_ci		union as10x_raw_data		raw_data;
45762306a36Sopenharmony_ci	} __packed body;
45862306a36Sopenharmony_ci} __packed;
45962306a36Sopenharmony_ci
46062306a36Sopenharmony_cistruct as10x_token_cmd_t {
46162306a36Sopenharmony_ci	/* token cmd */
46262306a36Sopenharmony_ci	struct as10x_cmd_t c;
46362306a36Sopenharmony_ci	/* token response */
46462306a36Sopenharmony_ci	struct as10x_cmd_t r;
46562306a36Sopenharmony_ci} __packed;
46662306a36Sopenharmony_ci
46762306a36Sopenharmony_ci
46862306a36Sopenharmony_ci/**************************/
46962306a36Sopenharmony_ci/* FUNCTION DECLARATION   */
47062306a36Sopenharmony_ci/**************************/
47162306a36Sopenharmony_ci
47262306a36Sopenharmony_civoid as10x_cmd_build(struct as10x_cmd_t *pcmd, uint16_t proc_id,
47362306a36Sopenharmony_ci		      uint16_t cmd_len);
47462306a36Sopenharmony_ciint as10x_rsp_parse(struct as10x_cmd_t *r, uint16_t proc_id);
47562306a36Sopenharmony_ci
47662306a36Sopenharmony_ci/* as10x cmd */
47762306a36Sopenharmony_ciint as10x_cmd_turn_on(struct as10x_bus_adapter_t *adap);
47862306a36Sopenharmony_ciint as10x_cmd_turn_off(struct as10x_bus_adapter_t *adap);
47962306a36Sopenharmony_ci
48062306a36Sopenharmony_ciint as10x_cmd_set_tune(struct as10x_bus_adapter_t *adap,
48162306a36Sopenharmony_ci		       struct as10x_tune_args *ptune);
48262306a36Sopenharmony_ci
48362306a36Sopenharmony_ciint as10x_cmd_get_tune_status(struct as10x_bus_adapter_t *adap,
48462306a36Sopenharmony_ci			      struct as10x_tune_status *pstatus);
48562306a36Sopenharmony_ci
48662306a36Sopenharmony_ciint as10x_cmd_get_tps(struct as10x_bus_adapter_t *adap,
48762306a36Sopenharmony_ci		      struct as10x_tps *ptps);
48862306a36Sopenharmony_ci
48962306a36Sopenharmony_ciint as10x_cmd_get_demod_stats(struct as10x_bus_adapter_t  *adap,
49062306a36Sopenharmony_ci			      struct as10x_demod_stats *pdemod_stats);
49162306a36Sopenharmony_ci
49262306a36Sopenharmony_ciint as10x_cmd_get_impulse_resp(struct as10x_bus_adapter_t *adap,
49362306a36Sopenharmony_ci			       uint8_t *is_ready);
49462306a36Sopenharmony_ci
49562306a36Sopenharmony_ci/* as10x cmd stream */
49662306a36Sopenharmony_ciint as10x_cmd_add_PID_filter(struct as10x_bus_adapter_t *adap,
49762306a36Sopenharmony_ci			     struct as10x_ts_filter *filter);
49862306a36Sopenharmony_ciint as10x_cmd_del_PID_filter(struct as10x_bus_adapter_t *adap,
49962306a36Sopenharmony_ci			     uint16_t pid_value);
50062306a36Sopenharmony_ci
50162306a36Sopenharmony_ciint as10x_cmd_start_streaming(struct as10x_bus_adapter_t *adap);
50262306a36Sopenharmony_ciint as10x_cmd_stop_streaming(struct as10x_bus_adapter_t *adap);
50362306a36Sopenharmony_ci
50462306a36Sopenharmony_ci/* as10x cmd cfg */
50562306a36Sopenharmony_ciint as10x_cmd_set_context(struct as10x_bus_adapter_t *adap,
50662306a36Sopenharmony_ci			  uint16_t tag,
50762306a36Sopenharmony_ci			  uint32_t value);
50862306a36Sopenharmony_ciint as10x_cmd_get_context(struct as10x_bus_adapter_t *adap,
50962306a36Sopenharmony_ci			  uint16_t tag,
51062306a36Sopenharmony_ci			  uint32_t *pvalue);
51162306a36Sopenharmony_ci
51262306a36Sopenharmony_ciint as10x_cmd_eLNA_change_mode(struct as10x_bus_adapter_t *adap, uint8_t mode);
51362306a36Sopenharmony_ciint as10x_context_rsp_parse(struct as10x_cmd_t *prsp, uint16_t proc_id);
51462306a36Sopenharmony_ci#endif
515