1<programlisting>
2/*
3 * frontend.h
4 *
5 * Copyright (C) 2000 Marcus Metzler &lt;marcus@convergence.de&gt;
6 *                  Ralph  Metzler &lt;ralph@convergence.de&gt;
7 *                  Holger Waechtler &lt;holger@convergence.de&gt;
8 *                  Andre Draszik &lt;ad@convergence.de&gt;
9 *                  for convergence integrated media GmbH
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU Lesser General Public License
13 * as published by the Free Software Foundation; either version 2.1
14 * of the License, or (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU Lesser General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24 *
25 */
26
27#ifndef _DVBFRONTEND_H_
28#define _DVBFRONTEND_H_
29
30#include &lt;linux/types.h&gt;
31
32enum fe_type {
33        &FE-QPSK;,
34        &FE-QAM;,
35        &FE-OFDM;,
36        &FE-ATSC;
37};
38
39enum fe_caps {
40        &FE-IS-STUPID;                    = 0,
41        &FE-CAN-INVERSION-AUTO;           = 0x1,
42        &FE-CAN-FEC-1-2;                  = 0x2,
43        &FE-CAN-FEC-2-3;                  = 0x4,
44        &FE-CAN-FEC-3-4;                  = 0x8,
45        &FE-CAN-FEC-4-5;                  = 0x10,
46        &FE-CAN-FEC-5-6;                  = 0x20,
47        &FE-CAN-FEC-6-7;                  = 0x40,
48        &FE-CAN-FEC-7-8;                  = 0x80,
49        &FE-CAN-FEC-8-9;                  = 0x100,
50        &FE-CAN-FEC-AUTO;                 = 0x200,
51        &FE-CAN-QPSK;                     = 0x400,
52        &FE-CAN-QAM-16;                   = 0x800,
53        &FE-CAN-QAM-32;                   = 0x1000,
54        &FE-CAN-QAM-64;                   = 0x2000,
55        &FE-CAN-QAM-128;                  = 0x4000,
56        &FE-CAN-QAM-256;                  = 0x8000,
57        &FE-CAN-QAM-AUTO;                 = 0x10000,
58        &FE-CAN-TRANSMISSION-MODE-AUTO;   = 0x20000,
59        &FE-CAN-BANDWIDTH-AUTO;           = 0x40000,
60        &FE-CAN-GUARD-INTERVAL-AUTO;      = 0x80000,
61        &FE-CAN-HIERARCHY-AUTO;           = 0x100000,
62        &FE-CAN-8VSB;                     = 0x200000,
63        &FE-CAN-16VSB;                    = 0x400000,
64        &FE-HAS-EXTENDED-CAPS;            = 0x800000,   /* We need more bitspace for newer APIs, indicate this. */
65        &FE-CAN-MULTISTREAM;              = 0x4000000,  /* frontend supports multistream filtering */
66        &FE-CAN-TURBO-FEC;                = 0x8000000,  /* frontend supports "turbo fec modulation" */
67        &FE-CAN-2G-MODULATION;            = 0x10000000, /* frontend supports "2nd generation modulation" (DVB-S2) */
68        &FE-NEEDS-BENDING;                = 0x20000000, /* not supported anymore, don't use (frontend requires frequency bending) */
69        &FE-CAN-RECOVER;                  = 0x40000000, /* frontend can recover from a cable unplug automatically */
70        &FE-CAN-MUTE-TS;                  = 0x80000000  /* frontend can stop spurious TS data output */
71};
72
73struct <link linkend="dvb-frontend-info">dvb_frontend_info</link> {
74        char       name[128];
75        enum fe_type type;      /* DEPRECATED. Use DTV_ENUM_DELSYS instead */
76        __u32      frequency_min;
77        __u32      frequency_max;
78        __u32      frequency_stepsize;
79        __u32      frequency_tolerance;
80        __u32      symbol_rate_min;
81        __u32      symbol_rate_max;
82        __u32      symbol_rate_tolerance;       /* ppm */
83        __u32      notifier_delay;              /* DEPRECATED */
84        enum fe_caps caps;
85};
86
87
88/**
89 *  Check out the DiSEqC bus spec available on http://www.eutelsat.org/ for
90 *  the meaning of this struct...
91 */
92struct <link linkend="dvb-diseqc-master-cmd">dvb_diseqc_master_cmd</link> {
93        __u8 msg [6];   /*  { framing, address, command, data [3] } */
94        __u8 msg_len;   /*  valid values are 3...6  */
95};
96
97struct <link linkend="dvb-diseqc-slave-reply">dvb_diseqc_slave_reply</link> {
98        __u8 msg [4];   /*  { framing, data [3] } */
99        __u8 msg_len;   /*  valid values are 0...4, 0 means no msg  */
100        int  timeout;   /*  return from ioctl after timeout ms with */
101};                      /*  errorcode when no message was received  */
102
103enum fe_sec_voltage {
104        &SEC-VOLTAGE-13;,
105        &SEC-VOLTAGE-18;,
106        &SEC-VOLTAGE-OFF;
107};
108
109enum fe_sec_tone_mode {
110        &SEC-TONE-ON;,
111        &SEC-TONE-OFF;
112};
113
114enum fe_sec_mini_cmd {
115        &SEC-MINI-A;,
116        &SEC-MINI-B;
117};
118
119/**
120 * enum fe_status - enumerates the possible frontend status
121 * @&FE-HAS-SIGNAL;:      found something above the noise level
122 * @&FE-HAS-CARRIER;:     found a DVB signal
123 * @&FE-HAS-VITERBI;:     FEC is stable
124 * @&FE-HAS-SYNC;:        found sync bytes
125 * @&FE-HAS-LOCK;:        everything's working
126 * @&FE-TIMEDOUT;:        no lock within the last ~2 seconds
127 * @&FE-REINIT;:          frontend was reinitialized, application is recommended
128 *                      to reset DiSEqC, tone and parameters
129 */
130enum fe_status {
131        &FE-HAS-SIGNAL;           = 0x01,
132        &FE-HAS-CARRIER;          = 0x02,
133        &FE-HAS-VITERBI;          = 0x04,
134        &FE-HAS-SYNC;             = 0x08,
135        &FE-HAS-LOCK;             = 0x10,
136        &FE-TIMEDOUT;             = 0x20,
137        &FE-REINIT;               = 0x40,
138};
139
140enum fe_spectral_inversion {
141        &INVERSION-OFF;,
142        &INVERSION-ON;,
143        &INVERSION-AUTO;
144};
145
146enum fe_code_rate {
147        &FEC-NONE; = 0,
148        &FEC-1-2;,
149        &FEC-2-3;,
150        &FEC-3-4;,
151        &FEC-4-5;,
152        &FEC-5-6;,
153        &FEC-6-7;,
154        &FEC-7-8;,
155        &FEC-8-9;,
156        &FEC-AUTO;,
157        &FEC-3-5;,
158        &FEC-9-10;,
159        &FEC-2-5;,
160};
161
162enum fe_modulation {
163        &QPSK;,
164        &QAM-16;,
165        &QAM-32;,
166        &QAM-64;,
167        &QAM-128;,
168        &QAM-256;,
169        &QAM-AUTO;,
170        &VSB-8;,
171        &VSB-16;,
172        &PSK-8;,
173        &APSK-16;,
174        &APSK-32;,
175        &DQPSK;,
176        &QAM-4-NR;,
177};
178
179enum fe_transmit_mode {
180        &TRANSMISSION-MODE-2K;,
181        &TRANSMISSION-MODE-8K;,
182        &TRANSMISSION-MODE-AUTO;,
183        &TRANSMISSION-MODE-4K;,
184        &TRANSMISSION-MODE-1K;,
185        &TRANSMISSION-MODE-16K;,
186        &TRANSMISSION-MODE-32K;,
187        &TRANSMISSION-MODE-C1;,
188        &TRANSMISSION-MODE-C3780;,
189};
190
191enum fe_guard_interval {
192        &GUARD-INTERVAL-1-32;,
193        &GUARD-INTERVAL-1-16;,
194        &GUARD-INTERVAL-1-8;,
195        &GUARD-INTERVAL-1-4;,
196        &GUARD-INTERVAL-AUTO;,
197        &GUARD-INTERVAL-1-128;,
198        &GUARD-INTERVAL-19-128;,
199        &GUARD-INTERVAL-19-256;,
200        &GUARD-INTERVAL-PN420;,
201        &GUARD-INTERVAL-PN595;,
202        &GUARD-INTERVAL-PN945;,
203};
204
205enum fe_hierarchy {
206        &HIERARCHY-NONE;,
207        &HIERARCHY-1;,
208        &HIERARCHY-2;,
209        &HIERARCHY-4;,
210        &HIERARCHY-AUTO;
211};
212
213enum fe_interleaving {
214        &INTERLEAVING-NONE;,
215        &INTERLEAVING-AUTO;,
216        &INTERLEAVING-240;,
217        &INTERLEAVING-720;,
218};
219
220/* S2API Commands */
221#define <link linkend="DTV-UNDEFINED">DTV_UNDEFINED</link>           0
222#define <link linkend="DTV-TUNE">DTV_TUNE</link>                1
223#define <link linkend="DTV-CLEAR">DTV_CLEAR</link>               2
224#define <link linkend="DTV-FREQUENCY">DTV_FREQUENCY</link>           3
225#define <link linkend="DTV-MODULATION">DTV_MODULATION</link>          4
226#define <link linkend="DTV-BANDWIDTH-HZ">DTV_BANDWIDTH_HZ</link>        5
227#define <link linkend="DTV-INVERSION">DTV_INVERSION</link>           6
228#define <link linkend="DTV-DISEQC-MASTER">DTV_DISEQC_MASTER</link>       7
229#define <link linkend="DTV-SYMBOL-RATE">DTV_SYMBOL_RATE</link>         8
230#define <link linkend="DTV-INNER-FEC">DTV_INNER_FEC</link>           9
231#define <link linkend="DTV-VOLTAGE">DTV_VOLTAGE</link>             10
232#define <link linkend="DTV-TONE">DTV_TONE</link>                11
233#define <link linkend="DTV-PILOT">DTV_PILOT</link>               12
234#define <link linkend="DTV-ROLLOFF">DTV_ROLLOFF</link>             13
235#define <link linkend="DTV-DISEQC-SLAVE-REPLY">DTV_DISEQC_SLAVE_REPLY</link>  14
236
237/* Basic enumeration set for querying unlimited capabilities */
238#define <link linkend="DTV-FE-CAPABILITY-COUNT">DTV_FE_CAPABILITY_COUNT</link> 15
239#define <link linkend="DTV-FE-CAPABILITY">DTV_FE_CAPABILITY</link>       16
240#define <link linkend="DTV-DELIVERY-SYSTEM">DTV_DELIVERY_SYSTEM</link>     17
241
242/* ISDB-T and ISDB-Tsb */
243#define <link linkend="DTV-ISDBT-PARTIAL-RECEPTION">DTV_ISDBT_PARTIAL_RECEPTION</link>     18
244#define <link linkend="DTV-ISDBT-SOUND-BROADCASTING">DTV_ISDBT_SOUND_BROADCASTING</link>    19
245
246#define <link linkend="DTV-ISDBT-SB-SUBCHANNEL-ID">DTV_ISDBT_SB_SUBCHANNEL_ID</link>      20
247#define <link linkend="DTV-ISDBT-SB-SEGMENT-IDX">DTV_ISDBT_SB_SEGMENT_IDX</link>        21
248#define <link linkend="DTV-ISDBT-SB-SEGMENT-COUNT">DTV_ISDBT_SB_SEGMENT_COUNT</link>      22
249
250#define <link linkend="DTV-ISDBT-LAYER-FEC">DTV_ISDBT_LAYERA_FEC</link>                    23
251#define <link linkend="DTV-ISDBT-LAYER-MODULATION">DTV_ISDBT_LAYERA_MODULATION</link>             24
252#define <link linkend="DTV-ISDBT-LAYER-SEGMENT-COUNT">DTV_ISDBT_LAYERA_SEGMENT_COUNT</link>          25
253#define <link linkend="DTV-ISDBT-LAYER-TIME-INTERLEAVING">DTV_ISDBT_LAYERA_TIME_INTERLEAVING</link>      26
254
255#define <link linkend="DTV-ISDBT-LAYER-FEC">DTV_ISDBT_LAYERB_FEC</link>                    27
256#define <link linkend="DTV-ISDBT-LAYER-MODULATION">DTV_ISDBT_LAYERB_MODULATION</link>             28
257#define <link linkend="DTV-ISDBT-LAYER-SEGMENT-COUNT">DTV_ISDBT_LAYERB_SEGMENT_COUNT</link>          29
258#define <link linkend="DTV-ISDBT-LAYER-TIME-INTERLEAVING">DTV_ISDBT_LAYERB_TIME_INTERLEAVING</link>      30
259
260#define <link linkend="DTV-ISDBT-LAYER-FEC">DTV_ISDBT_LAYERC_FEC</link>                    31
261#define <link linkend="DTV-ISDBT-LAYER-MODULATION">DTV_ISDBT_LAYERC_MODULATION</link>             32
262#define <link linkend="DTV-ISDBT-LAYER-SEGMENT-COUNT">DTV_ISDBT_LAYERC_SEGMENT_COUNT</link>          33
263#define <link linkend="DTV-ISDBT-LAYER-TIME-INTERLEAVING">DTV_ISDBT_LAYERC_TIME_INTERLEAVING</link>      34
264
265#define <link linkend="DTV-API-VERSION">DTV_API_VERSION</link>         35
266
267#define <link linkend="DTV-CODE-RATE-HP">DTV_CODE_RATE_HP</link>        36
268#define <link linkend="DTV-CODE-RATE-LP">DTV_CODE_RATE_LP</link>        37
269#define <link linkend="DTV-GUARD-INTERVAL">DTV_GUARD_INTERVAL</link>      38
270#define <link linkend="DTV-TRANSMISSION-MODE">DTV_TRANSMISSION_MODE</link>   39
271#define <link linkend="DTV-HIERARCHY">DTV_HIERARCHY</link>           40
272
273#define <link linkend="DTV-ISDBT-LAYER-ENABLED">DTV_ISDBT_LAYER_ENABLED</link> 41
274
275#define <link linkend="DTV-STREAM-ID">DTV_STREAM_ID</link>           42
276#define DTV_ISDBS_TS_ID_LEGACY  DTV_STREAM_ID
277#define <link linkend="DTV-DVBT2-PLP-ID-LEGACY">DTV_DVBT2_PLP_ID_LEGACY</link> 43
278
279#define <link linkend="DTV-ENUM-DELSYS">DTV_ENUM_DELSYS</link>         44
280
281/* ATSC-MH */
282#define <link linkend="DTV-ATSCMH-FIC-VER">DTV_ATSCMH_FIC_VER</link>              45
283#define <link linkend="DTV-ATSCMH-PARADE-ID">DTV_ATSCMH_PARADE_ID</link>            46
284#define <link linkend="DTV-ATSCMH-NOG">DTV_ATSCMH_NOG</link>                  47
285#define <link linkend="DTV-ATSCMH-TNOG">DTV_ATSCMH_TNOG</link>                 48
286#define <link linkend="DTV-ATSCMH-SGN">DTV_ATSCMH_SGN</link>                  49
287#define <link linkend="DTV-ATSCMH-PRC">DTV_ATSCMH_PRC</link>                  50
288#define <link linkend="DTV-ATSCMH-RS-FRAME-MODE">DTV_ATSCMH_RS_FRAME_MODE</link>        51
289#define <link linkend="DTV-ATSCMH-RS-FRAME-ENSEMBLE">DTV_ATSCMH_RS_FRAME_ENSEMBLE</link>    52
290#define <link linkend="DTV-ATSCMH-RS-CODE-MODE-PRI">DTV_ATSCMH_RS_CODE_MODE_PRI</link>     53
291#define <link linkend="DTV-ATSCMH-RS-CODE-MODE-SEC">DTV_ATSCMH_RS_CODE_MODE_SEC</link>     54
292#define <link linkend="DTV-ATSCMH-SCCC-BLOCK-MODE">DTV_ATSCMH_SCCC_BLOCK_MODE</link>      55
293#define <link linkend="DTV-ATSCMH-SCCC-CODE-MODE-A">DTV_ATSCMH_SCCC_CODE_MODE_A</link>     56
294#define <link linkend="DTV-ATSCMH-SCCC-CODE-MODE-B">DTV_ATSCMH_SCCC_CODE_MODE_B</link>     57
295#define <link linkend="DTV-ATSCMH-SCCC-CODE-MODE-C">DTV_ATSCMH_SCCC_CODE_MODE_C</link>     58
296#define <link linkend="DTV-ATSCMH-SCCC-CODE-MODE-D">DTV_ATSCMH_SCCC_CODE_MODE_D</link>     59
297
298#define <link linkend="DTV-INTERLEAVING">DTV_INTERLEAVING</link>                        60
299#define <link linkend="DTV-LNA">DTV_LNA</link>                                 61
300
301/* Quality parameters */
302#define <link linkend="DTV-STAT-SIGNAL-STRENGTH">DTV_STAT_SIGNAL_STRENGTH</link>        62
303#define <link linkend="DTV-STAT-CNR">DTV_STAT_CNR</link>                    63
304#define <link linkend="DTV-STAT-PRE-ERROR-BIT-COUNT">DTV_STAT_PRE_ERROR_BIT_COUNT</link>    64
305#define <link linkend="DTV-STAT-PRE-TOTAL-BIT-COUNT">DTV_STAT_PRE_TOTAL_BIT_COUNT</link>    65
306#define <link linkend="DTV-STAT-POST-ERROR-BIT-COUNT">DTV_STAT_POST_ERROR_BIT_COUNT</link>   66
307#define <link linkend="DTV-STAT-POST-TOTAL-BIT-COUNT">DTV_STAT_POST_TOTAL_BIT_COUNT</link>   67
308#define <link linkend="DTV-STAT-ERROR-BLOCK-COUNT">DTV_STAT_ERROR_BLOCK_COUNT</link>      68
309#define <link linkend="DTV-STAT-TOTAL-BLOCK-COUNT">DTV_STAT_TOTAL_BLOCK_COUNT</link>      69
310
311#define DTV_MAX_COMMAND         DTV_STAT_TOTAL_BLOCK_COUNT
312
313enum fe_pilot {
314        &PILOT-ON;,
315        &PILOT-OFF;,
316        &PILOT-AUTO;,
317};
318
319enum fe_rolloff {
320        &ROLLOFF-35;, /* Implied value in DVB-S, default for DVB-S2 */
321        &ROLLOFF-20;,
322        &ROLLOFF-25;,
323        &ROLLOFF-AUTO;,
324};
325
326enum fe_delivery_system {
327        &SYS-UNDEFINED;,
328        &SYS-DVBC-ANNEX-A;,
329        &SYS-DVBC-ANNEX-B;,
330        &SYS-DVBT;,
331        &SYS-DSS;,
332        &SYS-DVBS;,
333        &SYS-DVBS2;,
334        &SYS-DVBH;,
335        &SYS-ISDBT;,
336        &SYS-ISDBS;,
337        &SYS-ISDBC;,
338        &SYS-ATSC;,
339        &SYS-ATSCMH;,
340        &SYS-DTMB;,
341        &SYS-CMMB;,
342        &SYS-DAB;,
343        &SYS-DVBT2;,
344        &SYS-TURBO;,
345        &SYS-DVBC-ANNEX-C;,
346};
347
348/* backward compatibility */
349#define SYS_DVBC_ANNEX_AC       &SYS-DVBC-ANNEX-A;
350#define SYS_DMBTH &SYS-DTMB; /* DMB-TH is legacy name, use DTMB instead */
351
352/* ATSC-MH */
353
354enum atscmh_sccc_block_mode {
355        &ATSCMH-SCCC-BLK-SEP;      = 0,
356        &ATSCMH-SCCC-BLK-COMB;     = 1,
357        &ATSCMH-SCCC-BLK-RES;      = 2,
358};
359
360enum atscmh_sccc_code_mode {
361        &ATSCMH-SCCC-CODE-HLF;     = 0,
362        &ATSCMH-SCCC-CODE-QTR;     = 1,
363        &ATSCMH-SCCC-CODE-RES;     = 2,
364};
365
366enum atscmh_rs_frame_ensemble {
367        &ATSCMH-RSFRAME-ENS-PRI;   = 0,
368        &ATSCMH-RSFRAME-ENS-SEC;   = 1,
369};
370
371enum atscmh_rs_frame_mode {
372        &ATSCMH-RSFRAME-PRI-ONLY;  = 0,
373        &ATSCMH-RSFRAME-PRI-SEC;   = 1,
374        &ATSCMH-RSFRAME-RES;       = 2,
375};
376
377enum atscmh_rs_code_mode {
378        &ATSCMH-RSCODE-211-187;    = 0,
379        &ATSCMH-RSCODE-223-187;    = 1,
380        &ATSCMH-RSCODE-235-187;    = 2,
381        &ATSCMH-RSCODE-RES;        = 3,
382};
383
384#define NO_STREAM_ID_FILTER     (~0U)
385#define LNA_AUTO                (~0U)
386
387struct dtv_cmds_h {
388        char    *name;          /* A display name for debugging purposes */
389
390        __u32   cmd;            /* A unique ID */
391
392        /* Flags */
393        __u32   set:1;          /* Either a set or get property */
394        __u32   buffer:1;       /* Does this property use the buffer? */
395        __u32   reserved:30;    /* Align */
396};
397
398/**
399 * Scale types for the quality parameters.
400 * @&FE-SCALE-NOT-AVAILABLE;: That QoS measure is not available. That
401 *                          could indicate a temporary or a permanent
402 *                          condition.
403 * @&FE-SCALE-DECIBEL;: The scale is measured in 0.001 dB steps, typically
404 *                used on signal measures.
405 * @&FE-SCALE-RELATIVE;: The scale is a relative percentual measure,
406 *                      ranging from 0 (0%) to 0xffff (100%).
407 * @&FE-SCALE-COUNTER;: The scale counts the occurrence of an event, like
408 *                      bit error, block error, lapsed time.
409 */
410enum fecap_scale_params {
411        &FE-SCALE-NOT-AVAILABLE; = 0,
412        &FE-SCALE-DECIBEL;,
413        &FE-SCALE-RELATIVE;,
414        &FE-SCALE-COUNTER;
415};
416
417/**
418 * struct dtv_stats - Used for reading a DTV status property
419 *
420 * @value:      value of the measure. Should range from 0 to 0xffff;
421 * @scale:      Filled with enum fecap_scale_params - the scale
422 *              in usage for that parameter
423 *
424 * For most delivery systems, this will return a single value for each
425 * parameter.
426 * It should be noticed, however, that new OFDM delivery systems like
427 * ISDB can use different modulation types for each group of carriers.
428 * On such standards, up to 8 groups of statistics can be provided, one
429 * for each carrier group (called "layer" on ISDB).
430 * In order to be consistent with other delivery systems, the first
431 * value refers to the entire set of carriers ("global").
432 * dtv_status:scale should use the value &FE-SCALE-NOT-AVAILABLE; when
433 * the value for the entire group of carriers or from one specific layer
434 * is not provided by the hardware.
435 * st.len should be filled with the latest filled status + 1.
436 *
437 * In other words, for ISDB, those values should be filled like:
438 *      u.st.stat.svalue[0] = global statistics;
439 *      u.st.stat.scale[0] = &FE-SCALE-DECIBEL;;
440 *      u.st.stat.value[1] = layer A statistics;
441 *      u.st.stat.scale[1] = &FE-SCALE-NOT-AVAILABLE; (if not available);
442 *      u.st.stat.svalue[2] = layer B statistics;
443 *      u.st.stat.scale[2] = &FE-SCALE-DECIBEL;;
444 *      u.st.stat.svalue[3] = layer C statistics;
445 *      u.st.stat.scale[3] = &FE-SCALE-DECIBEL;;
446 *      u.st.len = 4;
447 */
448struct <link linkend="dtv-stats">dtv_stats</link> {
449        __u8 scale;     /* enum fecap_scale_params type */
450        union {
451                __u64 uvalue;   /* for counters and relative scales */
452                __s64 svalue;   /* for 0.001 dB measures */
453        };
454} __attribute__ ((packed));
455
456
457#define MAX_DTV_STATS   4
458
459struct <link linkend="dtv-fe-stats">dtv_fe_stats</link> {
460        __u8 len;
461        struct dtv_stats stat[MAX_DTV_STATS];
462} __attribute__ ((packed));
463
464struct <link linkend="dtv-property">dtv_property</link> {
465        __u32 cmd;
466        __u32 reserved[3];
467        union {
468                __u32 data;
469                struct dtv_fe_stats st;
470                struct {
471                        __u8 data[32];
472                        __u32 len;
473                        __u32 reserved1[3];
474                        void *reserved2;
475                } buffer;
476        } u;
477        int result;
478} __attribute__ ((packed));
479
480/* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */
481#define DTV_IOCTL_MAX_MSGS 64
482
483struct <link linkend="dtv-properties">dtv_properties</link> {
484        __u32 num;
485        struct dtv_property *props;
486};
487
488#if defined(__DVB_CORE__) || !defined (__KERNEL__)
489
490/*
491 * DEPRECATED: The DVBv3 ioctls, structs and enums should not be used on
492 * newer programs, as it doesn't support the second generation of digital
493 * TV standards, nor supports newer delivery systems.
494 */
495
496enum fe_bandwidth {
497        &BANDWIDTH-8-MHZ;,
498        &BANDWIDTH-7-MHZ;,
499        &BANDWIDTH-6-MHZ;,
500        &BANDWIDTH-AUTO;,
501        &BANDWIDTH-5-MHZ;,
502        &BANDWIDTH-10-MHZ;,
503        &BANDWIDTH-1-712-MHZ;,
504};
505
506/* This is needed for legacy userspace support */
507typedef enum fe_sec_voltage fe_sec_voltage_t;
508typedef enum fe_caps fe_caps_t;
509typedef enum fe_type fe_type_t;
510typedef enum fe_sec_tone_mode fe_sec_tone_mode_t;
511typedef enum fe_sec_mini_cmd fe_sec_mini_cmd_t;
512typedef enum fe_status fe_status_t;
513typedef enum fe_spectral_inversion fe_spectral_inversion_t;
514typedef enum fe_code_rate fe_code_rate_t;
515typedef enum fe_modulation fe_modulation_t;
516typedef enum fe_transmit_mode fe_transmit_mode_t;
517typedef enum fe_bandwidth fe_bandwidth_t;
518typedef enum fe_guard_interval fe_guard_interval_t;
519typedef enum fe_hierarchy fe_hierarchy_t;
520typedef enum fe_pilot fe_pilot_t;
521typedef enum fe_rolloff fe_rolloff_t;
522typedef enum fe_delivery_system fe_delivery_system_t;
523
524struct <link linkend="dvb-qpsk-parameters">dvb_qpsk_parameters</link> {
525        __u32           symbol_rate;  /* symbol rate in Symbols per second */
526        fe_code_rate_t  fec_inner;    /* forward error correction (see above) */
527};
528
529struct <link linkend="dvb-qam-parameters">dvb_qam_parameters</link> {
530        __u32           symbol_rate; /* symbol rate in Symbols per second */
531        fe_code_rate_t  fec_inner;   /* forward error correction (see above) */
532        fe_modulation_t modulation;  /* modulation type (see above) */
533};
534
535struct <link linkend="dvb-vsb-parameters">dvb_vsb_parameters</link> {
536        fe_modulation_t modulation;  /* modulation type (see above) */
537};
538
539struct <link linkend="dvb-ofdm-parameters">dvb_ofdm_parameters</link> {
540        fe_bandwidth_t      bandwidth;
541        fe_code_rate_t      code_rate_HP;  /* high priority stream code rate */
542        fe_code_rate_t      code_rate_LP;  /* low priority stream code rate */
543        fe_modulation_t     constellation; /* modulation type (see above) */
544        fe_transmit_mode_t  transmission_mode;
545        fe_guard_interval_t guard_interval;
546        fe_hierarchy_t      hierarchy_information;
547};
548
549struct <link linkend="dvb-frontend-parameters">dvb_frontend_parameters</link> {
550        __u32 frequency;     /* (absolute) frequency in Hz for DVB-C/DVB-T/ATSC */
551                             /* intermediate frequency in kHz for DVB-S */
552        fe_spectral_inversion_t inversion;
553        union {
554                struct dvb_qpsk_parameters qpsk;        /* DVB-S */
555                struct dvb_qam_parameters  qam;         /* DVB-C */
556                struct dvb_ofdm_parameters ofdm;        /* DVB-T */
557                struct dvb_vsb_parameters vsb;          /* ATSC */
558        } u;
559};
560
561struct <link linkend="dvb-frontend-event">dvb_frontend_event</link> {
562        fe_status_t status;
563        struct dvb_frontend_parameters parameters;
564};
565#endif
566
567#define <link linkend="FE_GET_PROPERTY">FE_SET_PROPERTY</link>            _IOW('o', 82, struct dtv_properties)
568#define <link linkend="FE_GET_PROPERTY">FE_GET_PROPERTY</link>            _IOR('o', 83, struct dtv_properties)
569
570/**
571 * When set, this flag will disable any zigzagging or other "normal" tuning
572 * behaviour. Additionally, there will be no automatic monitoring of the lock
573 * status, and hence no frontend events will be generated. If a frontend device
574 * is closed, this flag will be automatically turned off when the device is
575 * reopened read-write.
576 */
577#define FE_TUNE_MODE_ONESHOT 0x01
578
579#define <link linkend="FE_GET_INFO">FE_GET_INFO</link>                _IOR('o', 61, struct dvb_frontend_info)
580
581#define <link linkend="FE_DISEQC_RESET_OVERLOAD">FE_DISEQC_RESET_OVERLOAD</link>   _IO('o', 62)
582#define <link linkend="FE_DISEQC_SEND_MASTER_CMD">FE_DISEQC_SEND_MASTER_CMD</link>  _IOW('o', 63, struct dvb_diseqc_master_cmd)
583#define <link linkend="FE_DISEQC_RECV_SLAVE_REPLY">FE_DISEQC_RECV_SLAVE_REPLY</link> _IOR('o', 64, struct dvb_diseqc_slave_reply)
584#define <link linkend="FE_DISEQC_SEND_BURST">FE_DISEQC_SEND_BURST</link>       _IO('o', 65)  /* fe_sec_mini_cmd_t */
585
586#define <link linkend="FE_SET_TONE">FE_SET_TONE</link>                _IO('o', 66)  /* fe_sec_tone_mode_t */
587#define <link linkend="FE_SET_VOLTAGE">FE_SET_VOLTAGE</link>             _IO('o', 67)  /* fe_sec_voltage_t */
588#define <link linkend="FE_ENABLE_HIGH_LNB_VOLTAGE">FE_ENABLE_HIGH_LNB_VOLTAGE</link> _IO('o', 68)  /* int */
589
590#define <link linkend="FE_READ_STATUS">FE_READ_STATUS</link>             _IOR('o', 69, fe_status_t)
591#define <link linkend="FE_READ_BER">FE_READ_BER</link>                _IOR('o', 70, __u32)
592#define <link linkend="FE_READ_SIGNAL_STRENGTH">FE_READ_SIGNAL_STRENGTH</link>    _IOR('o', 71, __u16)
593#define <link linkend="FE_READ_SNR">FE_READ_SNR</link>                _IOR('o', 72, __u16)
594#define <link linkend="FE_READ_UNCORRECTED_BLOCKS">FE_READ_UNCORRECTED_BLOCKS</link> _IOR('o', 73, __u32)
595
596#define <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link>            _IOW('o', 76, struct dvb_frontend_parameters)
597#define <link linkend="FE_GET_FRONTEND">FE_GET_FRONTEND</link>            _IOR('o', 77, struct dvb_frontend_parameters)
598#define <link linkend="FE_SET_FRONTEND_TUNE_MODE">FE_SET_FRONTEND_TUNE_MODE</link>  _IO('o', 81) /* unsigned int */
599#define <link linkend="FE_GET_EVENT">FE_GET_EVENT</link>               _IOR('o', 78, struct dvb_frontend_event)
600
601#define <link linkend="FE_DISHNETWORK_SEND_LEGACY_CMD">FE_DISHNETWORK_SEND_LEGACY_CMD</link> _IO('o', 80) /* unsigned int */
602
603#endif /*_DVBFRONTEND_H_*/
604</programlisting>
605