1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * Abilis Systems Single DVB-T Receiver
4  * Copyright (C) 2008 Pierrick Hascoet <pierrick.hascoet@abilis.com>
5  */
6 #ifndef _AS10X_TYPES_H_
7 #define _AS10X_TYPES_H_
8 
9 /*********************************/
10 /*       MACRO DEFINITIONS       */
11 /*********************************/
12 
13 /* bandwidth constant values */
14 #define BW_5_MHZ		0x00
15 #define BW_6_MHZ		0x01
16 #define BW_7_MHZ		0x02
17 #define BW_8_MHZ		0x03
18 
19 /* hierarchy priority selection values */
20 #define HIER_NO_PRIORITY	0x00
21 #define HIER_LOW_PRIORITY	0x01
22 #define HIER_HIGH_PRIORITY	0x02
23 
24 /* constellation available values */
25 #define CONST_QPSK		0x00
26 #define CONST_QAM16		0x01
27 #define CONST_QAM64		0x02
28 #define CONST_UNKNOWN		0xFF
29 
30 /* hierarchy available values */
31 #define HIER_NONE		0x00
32 #define HIER_ALPHA_1		0x01
33 #define HIER_ALPHA_2		0x02
34 #define HIER_ALPHA_4		0x03
35 #define HIER_UNKNOWN		0xFF
36 
37 /* interleaving available values */
38 #define INTLV_NATIVE		0x00
39 #define INTLV_IN_DEPTH		0x01
40 #define INTLV_UNKNOWN		0xFF
41 
42 /* code rate available values */
43 #define CODE_RATE_1_2		0x00
44 #define CODE_RATE_2_3		0x01
45 #define CODE_RATE_3_4		0x02
46 #define CODE_RATE_5_6		0x03
47 #define CODE_RATE_7_8		0x04
48 #define CODE_RATE_UNKNOWN	0xFF
49 
50 /* guard interval available values */
51 #define GUARD_INT_1_32		0x00
52 #define GUARD_INT_1_16		0x01
53 #define GUARD_INT_1_8		0x02
54 #define GUARD_INT_1_4		0x03
55 #define GUARD_UNKNOWN		0xFF
56 
57 /* transmission mode available values */
58 #define TRANS_MODE_2K		0x00
59 #define TRANS_MODE_8K		0x01
60 #define TRANS_MODE_4K		0x02
61 #define TRANS_MODE_UNKNOWN	0xFF
62 
63 /* DVBH signalling available values */
64 #define TIMESLICING_PRESENT	0x01
65 #define MPE_FEC_PRESENT		0x02
66 
67 /* tune state available */
68 #define TUNE_STATUS_NOT_TUNED		0x00
69 #define TUNE_STATUS_IDLE		0x01
70 #define TUNE_STATUS_LOCKING		0x02
71 #define TUNE_STATUS_SIGNAL_DVB_OK	0x03
72 #define TUNE_STATUS_STREAM_DETECTED	0x04
73 #define TUNE_STATUS_STREAM_TUNED	0x05
74 #define TUNE_STATUS_ERROR		0xFF
75 
76 /* available TS FID filter types */
77 #define TS_PID_TYPE_TS		0
78 #define TS_PID_TYPE_PSI_SI	1
79 #define TS_PID_TYPE_MPE		2
80 
81 /* number of echos available */
82 #define MAX_ECHOS	15
83 
84 /* Context types */
85 #define CONTEXT_LNA			1010
86 #define CONTEXT_ELNA_HYSTERESIS		4003
87 #define CONTEXT_ELNA_GAIN		4004
88 #define CONTEXT_MER_THRESHOLD		5005
89 #define CONTEXT_MER_OFFSET		5006
90 #define CONTEXT_IR_STATE		7000
91 #define CONTEXT_TSOUT_MSB_FIRST		7004
92 #define CONTEXT_TSOUT_FALLING_EDGE	7005
93 
94 /* Configuration modes */
95 #define CFG_MODE_ON	0
96 #define CFG_MODE_OFF	1
97 #define CFG_MODE_AUTO	2
98 
99 struct as10x_tps {
100 	uint8_t modulation;
101 	uint8_t hierarchy;
102 	uint8_t interleaving_mode;
103 	uint8_t code_rate_HP;
104 	uint8_t code_rate_LP;
105 	uint8_t guard_interval;
106 	uint8_t transmission_mode;
107 	uint8_t DVBH_mask_HP;
108 	uint8_t DVBH_mask_LP;
109 	uint16_t cell_ID;
110 } __packed;
111 
112 struct as10x_tune_args {
113 	/* frequency */
114 	uint32_t freq;
115 	/* bandwidth */
116 	uint8_t bandwidth;
117 	/* hierarchy selection */
118 	uint8_t hier_select;
119 	/* constellation */
120 	uint8_t modulation;
121 	/* hierarchy */
122 	uint8_t hierarchy;
123 	/* interleaving mode */
124 	uint8_t interleaving_mode;
125 	/* code rate */
126 	uint8_t code_rate;
127 	/* guard interval */
128 	uint8_t guard_interval;
129 	/* transmission mode */
130 	uint8_t transmission_mode;
131 } __packed;
132 
133 struct as10x_tune_status {
134 	/* tune status */
135 	uint8_t tune_state;
136 	/* signal strength */
137 	int16_t signal_strength;
138 	/* packet error rate 10^-4 */
139 	uint16_t PER;
140 	/* bit error rate 10^-4 */
141 	uint16_t BER;
142 } __packed;
143 
144 struct as10x_demod_stats {
145 	/* frame counter */
146 	uint32_t frame_count;
147 	/* Bad frame counter */
148 	uint32_t bad_frame_count;
149 	/* Number of wrong bytes fixed by Reed-Solomon */
150 	uint32_t bytes_fixed_by_rs;
151 	/* Averaged MER */
152 	uint16_t mer;
153 	/* statistics calculation state indicator (started or not) */
154 	uint8_t has_started;
155 } __packed;
156 
157 struct as10x_ts_filter {
158 	uint16_t pid;  /* valid PID value 0x00 : 0x2000 */
159 	uint8_t  type; /* Red TS_PID_TYPE_<N> values */
160 	uint8_t  idx;  /* index in filtering table */
161 } __packed;
162 
163 struct as10x_register_value {
164 	uint8_t mode;
165 	union {
166 		uint8_t  value8;   /* 8 bit value */
167 		uint16_t value16;  /* 16 bit value */
168 		uint32_t value32;  /* 32 bit value */
169 	} __packed u;
170 } __packed;
171 
172 struct as10x_register_addr {
173 	/* register addr */
174 	uint32_t addr;
175 	/* register mode access */
176 	uint8_t mode;
177 };
178 
179 #endif
180