130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * frontend.h
330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de>
530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *		    Ralph  Metzler <ralph@convergence.de>
630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *		    Holger Waechtler <holger@convergence.de>
730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *		    Andre Draszik <ad@convergence.de>
830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *		    for convergence integrated media GmbH
930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This program is free software; you can redistribute it and/or
1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * modify it under the terms of the GNU Lesser General Public License
1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * as published by the Free Software Foundation; either version 2.1
1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * of the License, or (at your option) any later version.
1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This program is distributed in the hope that it will be useful,
1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * but WITHOUT ANY WARRANTY; without even the implied warranty of
1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * GNU General Public License for more details.
1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * You should have received a copy of the GNU Lesser General Public License
2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * along with this program; if not, write to the Free Software
2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef _DVBFRONTEND_H_
2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define _DVBFRONTEND_H_
2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/types.h>
3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
3130692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef enum fe_type {
3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_QPSK,
3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_QAM,
3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_OFDM,
3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_ATSC
3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} fe_type_t;
3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
3930692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef enum fe_caps {
4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_IS_STUPID			= 0,
4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_INVERSION_AUTO		= 0x1,
4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_FEC_1_2			= 0x2,
4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_FEC_2_3			= 0x4,
4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_FEC_3_4			= 0x8,
4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_FEC_4_5			= 0x10,
4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_FEC_5_6			= 0x20,
4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_FEC_6_7			= 0x40,
4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_FEC_7_8			= 0x80,
4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_FEC_8_9			= 0x100,
5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_FEC_AUTO			= 0x200,
5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_QPSK			= 0x400,
5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_QAM_16			= 0x800,
5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_QAM_32			= 0x1000,
5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_QAM_64			= 0x2000,
5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_QAM_128			= 0x4000,
5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_QAM_256			= 0x8000,
5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_QAM_AUTO			= 0x10000,
5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_TRANSMISSION_MODE_AUTO	= 0x20000,
5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_BANDWIDTH_AUTO		= 0x40000,
6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_GUARD_INTERVAL_AUTO	= 0x80000,
6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_HIERARCHY_AUTO		= 0x100000,
6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_8VSB			= 0x200000,
6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_16VSB			= 0x400000,
6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_HAS_EXTENDED_CAPS		= 0x800000,   /* We need more bitspace for newer APIs, indicate this. */
6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_MULTISTREAM		= 0x4000000,  /* frontend supports multistream filtering */
6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_TURBO_FEC		= 0x8000000,  /* frontend supports "turbo fec modulation" */
6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_2G_MODULATION		= 0x10000000, /* frontend supports "2nd generation modulation" (DVB-S2) */
6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_NEEDS_BENDING		= 0x20000000, /* not supported anymore, don't use (frontend requires frequency bending) */
6930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_RECOVER			= 0x40000000, /* frontend can recover from a cable unplug automatically */
7030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_CAN_MUTE_TS			= 0x80000000  /* frontend can stop spurious TS data output */
7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} fe_caps_t;
7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
7330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
7430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct dvb_frontend_info {
7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char       name[128];
7630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	fe_type_t  type;			/* DEPRECATED. Use DTV_ENUM_DELSYS instead */
7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32      frequency_min;
7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32      frequency_max;
7930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32      frequency_stepsize;
8030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32      frequency_tolerance;
8130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32      symbol_rate_min;
8230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32      symbol_rate_max;
8330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32      symbol_rate_tolerance;	/* ppm */
8430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32      notifier_delay;		/* DEPRECATED */
8530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	fe_caps_t  caps;
8630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
8730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
8830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
8930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/**
9030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *  Check out the DiSEqC bus spec available on http://www.eutelsat.org/ for
9130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *  the meaning of this struct...
9230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
9330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct dvb_diseqc_master_cmd {
9430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8 msg [6];	/*  { framing, address, command, data [3] } */
9530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8 msg_len;	/*  valid values are 3...6  */
9630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
9730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
9830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
9930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct dvb_diseqc_slave_reply {
10030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8 msg [4];	/*  { framing, data [3] } */
10130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8 msg_len;	/*  valid values are 0...4, 0 means no msg  */
10230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int  timeout;	/*  return from ioctl after timeout ms with */
10330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};			/*  errorcode when no message was received  */
10430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
10530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
10630692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef enum fe_sec_voltage {
10730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SEC_VOLTAGE_13,
10830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SEC_VOLTAGE_18,
10930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SEC_VOLTAGE_OFF
11030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} fe_sec_voltage_t;
11130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
11230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
11330692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef enum fe_sec_tone_mode {
11430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SEC_TONE_ON,
11530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SEC_TONE_OFF
11630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} fe_sec_tone_mode_t;
11730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
11830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
11930692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef enum fe_sec_mini_cmd {
12030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SEC_MINI_A,
12130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SEC_MINI_B
12230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} fe_sec_mini_cmd_t;
12330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
12430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
12530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/**
12630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * enum fe_status - enumerates the possible frontend status
12730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @FE_HAS_SIGNAL:	found something above the noise level
12830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @FE_HAS_CARRIER:	found a DVB signal
12930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @FE_HAS_VITERBI:	FEC is stable
13030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @FE_HAS_SYNC:	found sync bytes
13130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @FE_HAS_LOCK:	everything's working
13230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @FE_TIMEDOUT:	no lock within the last ~2 seconds
13330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @FE_REINIT:		frontend was reinitialized, application is recommended
13430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *			to reset DiSEqC, tone and parameters
13530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
13630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
13730692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef enum fe_status {
13830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_HAS_SIGNAL		= 0x01,
13930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_HAS_CARRIER		= 0x02,
14030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_HAS_VITERBI		= 0x04,
14130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_HAS_SYNC		= 0x08,
14230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_HAS_LOCK		= 0x10,
14330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_TIMEDOUT		= 0x20,
14430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_REINIT		= 0x40,
14530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} fe_status_t;
14630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
14730692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef enum fe_spectral_inversion {
14830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	INVERSION_OFF,
14930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	INVERSION_ON,
15030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	INVERSION_AUTO
15130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} fe_spectral_inversion_t;
15230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
15330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
15430692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef enum fe_code_rate {
15530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FEC_NONE = 0,
15630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FEC_1_2,
15730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FEC_2_3,
15830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FEC_3_4,
15930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FEC_4_5,
16030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FEC_5_6,
16130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FEC_6_7,
16230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FEC_7_8,
16330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FEC_8_9,
16430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FEC_AUTO,
16530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FEC_3_5,
16630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FEC_9_10,
16730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FEC_2_5,
16830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} fe_code_rate_t;
16930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
17030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
17130692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef enum fe_modulation {
17230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	QPSK,
17330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	QAM_16,
17430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	QAM_32,
17530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	QAM_64,
17630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	QAM_128,
17730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	QAM_256,
17830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	QAM_AUTO,
17930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	VSB_8,
18030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	VSB_16,
18130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	PSK_8,
18230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	APSK_16,
18330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	APSK_32,
18430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	DQPSK,
18530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	QAM_4_NR,
18630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} fe_modulation_t;
18730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
18830692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef enum fe_transmit_mode {
18930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	TRANSMISSION_MODE_2K,
19030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	TRANSMISSION_MODE_8K,
19130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	TRANSMISSION_MODE_AUTO,
19230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	TRANSMISSION_MODE_4K,
19330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	TRANSMISSION_MODE_1K,
19430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	TRANSMISSION_MODE_16K,
19530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	TRANSMISSION_MODE_32K,
19630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	TRANSMISSION_MODE_C1,
19730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	TRANSMISSION_MODE_C3780,
19830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} fe_transmit_mode_t;
19930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
20030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#if defined(__DVB_CORE__) || !defined (__KERNEL__)
20130692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef enum fe_bandwidth {
20230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	BANDWIDTH_8_MHZ,
20330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	BANDWIDTH_7_MHZ,
20430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	BANDWIDTH_6_MHZ,
20530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	BANDWIDTH_AUTO,
20630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	BANDWIDTH_5_MHZ,
20730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	BANDWIDTH_10_MHZ,
20830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	BANDWIDTH_1_712_MHZ,
20930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} fe_bandwidth_t;
21030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif
21130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
21230692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef enum fe_guard_interval {
21330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	GUARD_INTERVAL_1_32,
21430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	GUARD_INTERVAL_1_16,
21530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	GUARD_INTERVAL_1_8,
21630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	GUARD_INTERVAL_1_4,
21730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	GUARD_INTERVAL_AUTO,
21830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	GUARD_INTERVAL_1_128,
21930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	GUARD_INTERVAL_19_128,
22030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	GUARD_INTERVAL_19_256,
22130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	GUARD_INTERVAL_PN420,
22230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	GUARD_INTERVAL_PN595,
22330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	GUARD_INTERVAL_PN945,
22430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} fe_guard_interval_t;
22530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
22630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
22730692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef enum fe_hierarchy {
22830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	HIERARCHY_NONE,
22930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	HIERARCHY_1,
23030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	HIERARCHY_2,
23130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	HIERARCHY_4,
23230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	HIERARCHY_AUTO
23330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} fe_hierarchy_t;
23430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
23530692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum fe_interleaving {
23630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	INTERLEAVING_NONE,
23730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	INTERLEAVING_AUTO,
23830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	INTERLEAVING_240,
23930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	INTERLEAVING_720,
24030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
24130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
24230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#if defined(__DVB_CORE__) || !defined (__KERNEL__)
24330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct dvb_qpsk_parameters {
24430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32		symbol_rate;  /* symbol rate in Symbols per second */
24530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	fe_code_rate_t	fec_inner;    /* forward error correction (see above) */
24630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
24730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
24830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct dvb_qam_parameters {
24930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32		symbol_rate; /* symbol rate in Symbols per second */
25030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	fe_code_rate_t	fec_inner;   /* forward error correction (see above) */
25130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	fe_modulation_t	modulation;  /* modulation type (see above) */
25230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
25330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
25430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct dvb_vsb_parameters {
25530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	fe_modulation_t	modulation;  /* modulation type (see above) */
25630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
25730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
25830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct dvb_ofdm_parameters {
25930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	fe_bandwidth_t      bandwidth;
26030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	fe_code_rate_t      code_rate_HP;  /* high priority stream code rate */
26130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	fe_code_rate_t      code_rate_LP;  /* low priority stream code rate */
26230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	fe_modulation_t     constellation; /* modulation type (see above) */
26330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	fe_transmit_mode_t  transmission_mode;
26430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	fe_guard_interval_t guard_interval;
26530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	fe_hierarchy_t      hierarchy_information;
26630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
26730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
26830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
26930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct dvb_frontend_parameters {
27030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 frequency;     /* (absolute) frequency in Hz for QAM/OFDM/ATSC */
27130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			     /* intermediate frequency in kHz for QPSK */
27230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	fe_spectral_inversion_t inversion;
27330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	union {
27430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct dvb_qpsk_parameters qpsk;
27530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct dvb_qam_parameters  qam;
27630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct dvb_ofdm_parameters ofdm;
27730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct dvb_vsb_parameters vsb;
27830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	} u;
27930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
28030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
28130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct dvb_frontend_event {
28230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	fe_status_t status;
28330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct dvb_frontend_parameters parameters;
28430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
28530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif
28630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
28730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* S2API Commands */
28830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_UNDEFINED		0
28930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_TUNE		1
29030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_CLEAR		2
29130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_FREQUENCY		3
29230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_MODULATION		4
29330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_BANDWIDTH_HZ	5
29430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_INVERSION		6
29530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_DISEQC_MASTER	7
29630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_SYMBOL_RATE		8
29730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_INNER_FEC		9
29830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_VOLTAGE		10
29930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_TONE		11
30030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_PILOT		12
30130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ROLLOFF		13
30230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_DISEQC_SLAVE_REPLY	14
30330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
30430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Basic enumeration set for querying unlimited capabilities */
30530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_FE_CAPABILITY_COUNT	15
30630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_FE_CAPABILITY	16
30730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_DELIVERY_SYSTEM	17
30830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
30930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* ISDB-T and ISDB-Tsb */
31030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ISDBT_PARTIAL_RECEPTION	18
31130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ISDBT_SOUND_BROADCASTING	19
31230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
31330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ISDBT_SB_SUBCHANNEL_ID	20
31430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ISDBT_SB_SEGMENT_IDX	21
31530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ISDBT_SB_SEGMENT_COUNT	22
31630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
31730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ISDBT_LAYERA_FEC			23
31830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ISDBT_LAYERA_MODULATION		24
31930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ISDBT_LAYERA_SEGMENT_COUNT		25
32030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ISDBT_LAYERA_TIME_INTERLEAVING	26
32130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
32230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ISDBT_LAYERB_FEC			27
32330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ISDBT_LAYERB_MODULATION		28
32430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ISDBT_LAYERB_SEGMENT_COUNT		29
32530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ISDBT_LAYERB_TIME_INTERLEAVING	30
32630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
32730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ISDBT_LAYERC_FEC			31
32830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ISDBT_LAYERC_MODULATION		32
32930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ISDBT_LAYERC_SEGMENT_COUNT		33
33030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ISDBT_LAYERC_TIME_INTERLEAVING	34
33130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
33230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_API_VERSION		35
33330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
33430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_CODE_RATE_HP	36
33530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_CODE_RATE_LP	37
33630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_GUARD_INTERVAL	38
33730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_TRANSMISSION_MODE	39
33830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_HIERARCHY		40
33930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
34030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ISDBT_LAYER_ENABLED	41
34130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
34230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_STREAM_ID		42
34330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ISDBS_TS_ID_LEGACY	DTV_STREAM_ID
34430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_DVBT2_PLP_ID_LEGACY	43
34530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
34630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ENUM_DELSYS		44
34730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
34830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* ATSC-MH */
34930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ATSCMH_FIC_VER		45
35030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ATSCMH_PARADE_ID		46
35130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ATSCMH_NOG			47
35230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ATSCMH_TNOG			48
35330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ATSCMH_SGN			49
35430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ATSCMH_PRC			50
35530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ATSCMH_RS_FRAME_MODE	51
35630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ATSCMH_RS_FRAME_ENSEMBLE	52
35730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ATSCMH_RS_CODE_MODE_PRI	53
35830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ATSCMH_RS_CODE_MODE_SEC	54
35930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ATSCMH_SCCC_BLOCK_MODE	55
36030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ATSCMH_SCCC_CODE_MODE_A	56
36130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ATSCMH_SCCC_CODE_MODE_B	57
36230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ATSCMH_SCCC_CODE_MODE_C	58
36330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_ATSCMH_SCCC_CODE_MODE_D	59
36430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
36530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_INTERLEAVING			60
36630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_LNA					61
36730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
36830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Quality parameters */
36930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_STAT_SIGNAL_STRENGTH	62
37030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_STAT_CNR			63
37130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_STAT_PRE_ERROR_BIT_COUNT	64
37230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_STAT_PRE_TOTAL_BIT_COUNT	65
37330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_STAT_POST_ERROR_BIT_COUNT	66
37430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_STAT_POST_TOTAL_BIT_COUNT	67
37530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_STAT_ERROR_BLOCK_COUNT	68
37630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_STAT_TOTAL_BLOCK_COUNT	69
37730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
37830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_MAX_COMMAND		DTV_STAT_TOTAL_BLOCK_COUNT
37930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
38030692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef enum fe_pilot {
38130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	PILOT_ON,
38230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	PILOT_OFF,
38330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	PILOT_AUTO,
38430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} fe_pilot_t;
38530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
38630692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef enum fe_rolloff {
38730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ROLLOFF_35, /* Implied value in DVB-S, default for DVB-S2 */
38830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ROLLOFF_20,
38930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ROLLOFF_25,
39030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ROLLOFF_AUTO,
39130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} fe_rolloff_t;
39230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
39330692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef enum fe_delivery_system {
39430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SYS_UNDEFINED,
39530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SYS_DVBC_ANNEX_A,
39630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SYS_DVBC_ANNEX_B,
39730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SYS_DVBT,
39830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SYS_DSS,
39930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SYS_DVBS,
40030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SYS_DVBS2,
40130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SYS_DVBH,
40230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SYS_ISDBT,
40330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SYS_ISDBS,
40430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SYS_ISDBC,
40530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SYS_ATSC,
40630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SYS_ATSCMH,
40730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SYS_DTMB,
40830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SYS_CMMB,
40930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SYS_DAB,
41030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SYS_DVBT2,
41130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SYS_TURBO,
41230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	SYS_DVBC_ANNEX_C,
41330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} fe_delivery_system_t;
41430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
41530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* backward compatibility */
41630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SYS_DVBC_ANNEX_AC	SYS_DVBC_ANNEX_A
41730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SYS_DMBTH SYS_DTMB /* DMB-TH is legacy name, use DTMB instead */
41830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
41930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* ATSC-MH */
42030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
42130692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum atscmh_sccc_block_mode {
42230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ATSCMH_SCCC_BLK_SEP      = 0,
42330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ATSCMH_SCCC_BLK_COMB     = 1,
42430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ATSCMH_SCCC_BLK_RES      = 2,
42530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
42630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
42730692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum atscmh_sccc_code_mode {
42830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ATSCMH_SCCC_CODE_HLF     = 0,
42930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ATSCMH_SCCC_CODE_QTR     = 1,
43030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ATSCMH_SCCC_CODE_RES     = 2,
43130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
43230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
43330692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum atscmh_rs_frame_ensemble {
43430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ATSCMH_RSFRAME_ENS_PRI   = 0,
43530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ATSCMH_RSFRAME_ENS_SEC   = 1,
43630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
43730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
43830692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum atscmh_rs_frame_mode {
43930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ATSCMH_RSFRAME_PRI_ONLY  = 0,
44030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ATSCMH_RSFRAME_PRI_SEC   = 1,
44130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ATSCMH_RSFRAME_RES       = 2,
44230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
44330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
44430692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum atscmh_rs_code_mode {
44530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ATSCMH_RSCODE_211_187    = 0,
44630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ATSCMH_RSCODE_223_187    = 1,
44730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ATSCMH_RSCODE_235_187    = 2,
44830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	ATSCMH_RSCODE_RES        = 3,
44930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
45030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
45130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define NO_STREAM_ID_FILTER	(~0U)
45230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define LNA_AUTO                (~0U)
45330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
45430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct dtv_cmds_h {
45530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char	*name;		/* A display name for debugging purposes */
45630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
45730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	cmd;		/* A unique ID */
45830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
45930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* Flags */
46030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	set:1;		/* Either a set or get property */
46130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	buffer:1;	/* Does this property use the buffer? */
46230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	reserved:30;	/* Align */
46330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
46430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
46530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/**
46630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Scale types for the quality parameters.
46730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @FE_SCALE_NOT_AVAILABLE: That QoS measure is not available. That
46830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *			    could indicate a temporary or a permanent
46930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *			    condition.
47030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @FE_SCALE_DECIBEL: The scale is measured in 0.0001 dB steps, typically
47130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *		  used on signal measures.
47230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @FE_SCALE_RELATIVE: The scale is a relative percentual measure,
47330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *			ranging from 0 (0%) to 0xffff (100%).
47430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @FE_SCALE_COUNTER: The scale counts the occurrence of an event, like
47530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *			bit error, block error, lapsed time.
47630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
47730692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum fecap_scale_params {
47830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_SCALE_NOT_AVAILABLE = 0,
47930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_SCALE_DECIBEL,
48030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_SCALE_RELATIVE,
48130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FE_SCALE_COUNTER
48230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
48330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
48430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/**
48530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * struct dtv_stats - Used for reading a DTV status property
48630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
48730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @value:	value of the measure. Should range from 0 to 0xffff;
48830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @scale:	Filled with enum fecap_scale_params - the scale
48930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *		in usage for that parameter
49030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
49130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * For most delivery systems, this will return a single value for each
49230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * parameter.
49330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * It should be noticed, however, that new OFDM delivery systems like
49430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * ISDB can use different modulation types for each group of carriers.
49530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * On such standards, up to 8 groups of statistics can be provided, one
49630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * for each carrier group (called "layer" on ISDB).
49730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * In order to be consistent with other delivery systems, the first
49830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * value refers to the entire set of carriers ("global").
49930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * dtv_status:scale should use the value FE_SCALE_NOT_AVAILABLE when
50030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * the value for the entire group of carriers or from one specific layer
50130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * is not provided by the hardware.
50230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * st.len should be filled with the latest filled status + 1.
50330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
50430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * In other words, for ISDB, those values should be filled like:
50530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	u.st.stat.svalue[0] = global statistics;
50630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	u.st.stat.scale[0] = FE_SCALE_DECIBELS;
50730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	u.st.stat.value[1] = layer A statistics;
50830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	u.st.stat.scale[1] = FE_SCALE_NOT_AVAILABLE (if not available);
50930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	u.st.stat.svalue[2] = layer B statistics;
51030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	u.st.stat.scale[2] = FE_SCALE_DECIBELS;
51130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	u.st.stat.svalue[3] = layer C statistics;
51230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	u.st.stat.scale[3] = FE_SCALE_DECIBELS;
51330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	u.st.len = 4;
51430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
51530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct dtv_stats {
51630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8 scale;	/* enum fecap_scale_params type */
51730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	union {
51830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		__u64 uvalue;	/* for counters and relative scales */
51930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		__s64 svalue;	/* for 0.0001 dB measures */
52030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	};
52130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__ ((packed));
52230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
52330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
52430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define MAX_DTV_STATS   4
52530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
52630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct dtv_fe_stats {
52730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8 len;
52830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct dtv_stats stat[MAX_DTV_STATS];
52930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__ ((packed));
53030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
53130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct dtv_property {
53230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 cmd;
53330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 reserved[3];
53430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	union {
53530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		__u32 data;
53630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct dtv_fe_stats st;
53730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		struct {
53830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			__u8 data[32];
53930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			__u32 len;
54030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			__u32 reserved1[3];
54130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			void *reserved2;
54230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		} buffer;
54330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	} u;
54430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int result;
54530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__ ((packed));
54630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
54730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */
54830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DTV_IOCTL_MAX_MSGS 64
54930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
55030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct dtv_properties {
55130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 num;
55230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct dtv_property *props;
55330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
55430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
55530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_SET_PROPERTY		   _IOW('o', 82, struct dtv_properties)
55630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_GET_PROPERTY		   _IOR('o', 83, struct dtv_properties)
55730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
55830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
55930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/**
56030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * When set, this flag will disable any zigzagging or other "normal" tuning
56130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * behaviour. Additionally, there will be no automatic monitoring of the lock
56230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * status, and hence no frontend events will be generated. If a frontend device
56330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * is closed, this flag will be automatically turned off when the device is
56430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * reopened read-write.
56530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
56630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_TUNE_MODE_ONESHOT 0x01
56730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
56830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
56930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_GET_INFO		   _IOR('o', 61, struct dvb_frontend_info)
57030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
57130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_DISEQC_RESET_OVERLOAD   _IO('o', 62)
57230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_DISEQC_SEND_MASTER_CMD  _IOW('o', 63, struct dvb_diseqc_master_cmd)
57330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_DISEQC_RECV_SLAVE_REPLY _IOR('o', 64, struct dvb_diseqc_slave_reply)
57430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_DISEQC_SEND_BURST       _IO('o', 65)  /* fe_sec_mini_cmd_t */
57530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
57630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_SET_TONE		   _IO('o', 66)  /* fe_sec_tone_mode_t */
57730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_SET_VOLTAGE		   _IO('o', 67)  /* fe_sec_voltage_t */
57830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_ENABLE_HIGH_LNB_VOLTAGE _IO('o', 68)  /* int */
57930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
58030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_READ_STATUS		   _IOR('o', 69, fe_status_t)
58130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_READ_BER		   _IOR('o', 70, __u32)
58230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_READ_SIGNAL_STRENGTH    _IOR('o', 71, __u16)
58330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_READ_SNR		   _IOR('o', 72, __u16)
58430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_READ_UNCORRECTED_BLOCKS _IOR('o', 73, __u32)
58530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
58630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_SET_FRONTEND		   _IOW('o', 76, struct dvb_frontend_parameters)
58730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_GET_FRONTEND		   _IOR('o', 77, struct dvb_frontend_parameters)
58830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_SET_FRONTEND_TUNE_MODE  _IO('o', 81) /* unsigned int */
58930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_GET_EVENT		   _IOR('o', 78, struct dvb_frontend_event)
59030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
59130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */
59230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
59330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /*_DVBFRONTEND_H_*/
594