frontend.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648
  1. /*
  2. * frontend.h
  3. *
  4. * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de>
  5. * Ralph Metzler <ralph@convergence.de>
  6. * Holger Waechtler <holger@convergence.de>
  7. * Andre Draszik <ad@convergence.de>
  8. * for convergence integrated media GmbH
  9. *
  10. * Copyright (C) Manu Abraham <abraham.manu@gmail.com>
  11. *
  12. * This program is free software; you can redistribute it and/or
  13. * modify it under the terms of the GNU Lesser General Public License
  14. * as published by the Free Software Foundation; either version 2.1
  15. * of the License, or (at your option) any later version.
  16. *
  17. * This program is distributed in the hope that it will be useful,
  18. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  20. * GNU General Public License for more details.
  21. *
  22. * You should have received a copy of the GNU Lesser General Public License
  23. * along with this program; if not, write to the Free Software
  24. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  25. *
  26. */
  27. #ifndef _DVBFRONTEND_H_
  28. #define _DVBFRONTEND_H_
  29. #include <asm/types.h>
  30. typedef enum fe_type {
  31. FE_QPSK,
  32. FE_QAM,
  33. FE_OFDM,
  34. FE_ATSC
  35. } fe_type_t;
  36. typedef enum fe_caps {
  37. FE_IS_STUPID = 0,
  38. FE_CAN_INVERSION_AUTO = 0x1,
  39. FE_CAN_FEC_1_2 = 0x2,
  40. FE_CAN_FEC_2_3 = 0x4,
  41. FE_CAN_FEC_3_4 = 0x8,
  42. FE_CAN_FEC_4_5 = 0x10,
  43. FE_CAN_FEC_5_6 = 0x20,
  44. FE_CAN_FEC_6_7 = 0x40,
  45. FE_CAN_FEC_7_8 = 0x80,
  46. FE_CAN_FEC_8_9 = 0x100,
  47. FE_CAN_FEC_AUTO = 0x200,
  48. FE_CAN_QPSK = 0x400,
  49. FE_CAN_QAM_16 = 0x800,
  50. FE_CAN_QAM_32 = 0x1000,
  51. FE_CAN_QAM_64 = 0x2000,
  52. FE_CAN_QAM_128 = 0x4000,
  53. FE_CAN_QAM_256 = 0x8000,
  54. FE_CAN_QAM_AUTO = 0x10000,
  55. FE_CAN_TRANSMISSION_MODE_AUTO = 0x20000,
  56. FE_CAN_BANDWIDTH_AUTO = 0x40000,
  57. FE_CAN_GUARD_INTERVAL_AUTO = 0x80000,
  58. FE_CAN_HIERARCHY_AUTO = 0x100000,
  59. FE_CAN_8VSB = 0x200000,
  60. FE_CAN_16VSB = 0x400000,
  61. FE_NEEDS_BENDING = 0x20000000, // not supported anymore, don't use (frontend requires frequency bending)
  62. FE_CAN_RECOVER = 0x40000000, // frontend can recover from a cable unplug automatically
  63. FE_CAN_MUTE_TS = 0x80000000 // frontend can stop spurious TS data output
  64. } fe_caps_t;
  65. struct dvb_frontend_info {
  66. char name[128];
  67. fe_type_t type;
  68. __u32 frequency_min;
  69. __u32 frequency_max;
  70. __u32 frequency_stepsize;
  71. __u32 frequency_tolerance;
  72. __u32 symbol_rate_min;
  73. __u32 symbol_rate_max;
  74. __u32 symbol_rate_tolerance; /* ppm */
  75. __u32 notifier_delay; /* DEPRECATED */
  76. fe_caps_t caps;
  77. };
  78. /**
  79. * Check out the DiSEqC bus spec available on http://www.eutelsat.org/ for
  80. * the meaning of this struct...
  81. */
  82. struct dvb_diseqc_master_cmd {
  83. __u8 msg [6]; /* { framing, address, command, data [3] } */
  84. __u8 msg_len; /* valid values are 3...6 */
  85. };
  86. struct dvb_diseqc_slave_reply {
  87. __u8 msg [4]; /* { framing, data [3] } */
  88. __u8 msg_len; /* valid values are 0...4, 0 means no msg */
  89. int timeout; /* return from ioctl after timeout ms with */
  90. }; /* errorcode when no message was received */
  91. typedef enum fe_sec_voltage {
  92. SEC_VOLTAGE_13,
  93. SEC_VOLTAGE_18,
  94. SEC_VOLTAGE_OFF
  95. } fe_sec_voltage_t;
  96. typedef enum fe_sec_tone_mode {
  97. SEC_TONE_ON,
  98. SEC_TONE_OFF
  99. } fe_sec_tone_mode_t;
  100. typedef enum fe_sec_mini_cmd {
  101. SEC_MINI_A,
  102. SEC_MINI_B
  103. } fe_sec_mini_cmd_t;
  104. typedef enum fe_status {
  105. FE_HAS_SIGNAL = 0x01, /* found something above the noise level */
  106. FE_HAS_CARRIER = 0x02, /* found a DVB signal */
  107. FE_HAS_VITERBI = 0x04, /* FEC is stable */
  108. FE_HAS_SYNC = 0x08, /* found sync bytes */
  109. FE_HAS_LOCK = 0x10, /* everything's working... */
  110. FE_TIMEDOUT = 0x20, /* no lock within the last ~2 seconds */
  111. FE_REINIT = 0x40 /* frontend was reinitialized, */
  112. } fe_status_t; /* application is recommended to reset */
  113. /* DiSEqC, tone and parameters */
  114. typedef enum fe_spectral_inversion {
  115. INVERSION_OFF,
  116. INVERSION_ON,
  117. INVERSION_AUTO
  118. } fe_spectral_inversion_t;
  119. typedef enum fe_code_rate {
  120. FEC_NONE = 0,
  121. FEC_1_2,
  122. FEC_2_3,
  123. FEC_3_4,
  124. FEC_4_5,
  125. FEC_5_6,
  126. FEC_6_7,
  127. FEC_7_8,
  128. FEC_8_9,
  129. FEC_AUTO
  130. } fe_code_rate_t;
  131. typedef enum fe_modulation {
  132. QPSK,
  133. QAM_16,
  134. QAM_32,
  135. QAM_64,
  136. QAM_128,
  137. QAM_256,
  138. QAM_AUTO,
  139. VSB_8,
  140. VSB_16
  141. } fe_modulation_t;
  142. typedef enum fe_transmit_mode {
  143. TRANSMISSION_MODE_2K,
  144. TRANSMISSION_MODE_8K,
  145. TRANSMISSION_MODE_AUTO
  146. } fe_transmit_mode_t;
  147. typedef enum fe_bandwidth {
  148. BANDWIDTH_8_MHZ,
  149. BANDWIDTH_7_MHZ,
  150. BANDWIDTH_6_MHZ,
  151. BANDWIDTH_AUTO
  152. } fe_bandwidth_t;
  153. typedef enum fe_guard_interval {
  154. GUARD_INTERVAL_1_32,
  155. GUARD_INTERVAL_1_16,
  156. GUARD_INTERVAL_1_8,
  157. GUARD_INTERVAL_1_4,
  158. GUARD_INTERVAL_AUTO
  159. } fe_guard_interval_t;
  160. typedef enum fe_hierarchy {
  161. HIERARCHY_NONE,
  162. HIERARCHY_1,
  163. HIERARCHY_2,
  164. HIERARCHY_4,
  165. HIERARCHY_AUTO
  166. } fe_hierarchy_t;
  167. struct dvb_qpsk_parameters {
  168. __u32 symbol_rate; /* symbol rate in Symbols per second */
  169. fe_code_rate_t fec_inner; /* forward error correction (see above) */
  170. };
  171. struct dvb_qam_parameters {
  172. __u32 symbol_rate; /* symbol rate in Symbols per second */
  173. fe_code_rate_t fec_inner; /* forward error correction (see above) */
  174. fe_modulation_t modulation; /* modulation type (see above) */
  175. };
  176. struct dvb_vsb_parameters {
  177. fe_modulation_t modulation; /* modulation type (see above) */
  178. };
  179. struct dvb_ofdm_parameters {
  180. fe_bandwidth_t bandwidth;
  181. fe_code_rate_t code_rate_HP; /* high priority stream code rate */
  182. fe_code_rate_t code_rate_LP; /* low priority stream code rate */
  183. fe_modulation_t constellation; /* modulation type (see above) */
  184. fe_transmit_mode_t transmission_mode;
  185. fe_guard_interval_t guard_interval;
  186. fe_hierarchy_t hierarchy_information;
  187. };
  188. struct dvb_frontend_parameters {
  189. __u32 frequency; /* (absolute) frequency in Hz for QAM/OFDM/ATSC */
  190. /* intermediate frequency in kHz for QPSK */
  191. fe_spectral_inversion_t inversion;
  192. union {
  193. struct dvb_qpsk_parameters qpsk;
  194. struct dvb_qam_parameters qam;
  195. struct dvb_ofdm_parameters ofdm;
  196. struct dvb_vsb_parameters vsb;
  197. } u;
  198. };
  199. /**
  200. * When set, this flag will disable any zigzagging or other "normal" tuning
  201. * behaviour. Additionally, there will be no automatic monitoring of the lock
  202. * status, and hence no frontend events will be generated. If a frontend device
  203. * is closed, this flag will be automatically turned off when the device is
  204. * reopened read-write.
  205. */
  206. #define FE_TUNE_MODE_ONESHOT 0x01
  207. #define FE_GET_INFO _IOR('o', 61, struct dvb_frontend_info)
  208. #define FE_DISEQC_RESET_OVERLOAD _IO('o', 62)
  209. #define FE_DISEQC_SEND_MASTER_CMD _IOW('o', 63, struct dvb_diseqc_master_cmd)
  210. #define FE_DISEQC_RECV_SLAVE_REPLY _IOR('o', 64, struct dvb_diseqc_slave_reply)
  211. #define FE_DISEQC_SEND_BURST _IO('o', 65) /* fe_sec_mini_cmd_t */
  212. #define FE_SET_TONE _IO('o', 66) /* fe_sec_tone_mode_t */
  213. #define FE_SET_VOLTAGE _IO('o', 67) /* fe_sec_voltage_t */
  214. #define FE_ENABLE_HIGH_LNB_VOLTAGE _IO('o', 68) /* int */
  215. #define FE_READ_STATUS _IOR('o', 69, fe_status_t)
  216. #define FE_READ_BER _IOR('o', 70, __u32)
  217. #define FE_READ_SIGNAL_STRENGTH _IOR('o', 71, __u16)
  218. #define FE_READ_SNR _IOR('o', 72, __u16)
  219. #define FE_READ_UNCORRECTED_BLOCKS _IOR('o', 73, __u32)
  220. #define FE_SET_FRONTEND _IOW('o', 76, struct dvb_frontend_parameters)
  221. #define FE_GET_FRONTEND _IOR('o', 77, struct dvb_frontend_parameters)
  222. #define FE_SET_FRONTEND_TUNE_MODE _IO('o', 81) /* unsigned int */
  223. #define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */
  224. /*
  225. * References:
  226. * DVB-S : EN 300 421
  227. * DVB-S2: EN 302 307, TR 102 376, EN 301 210
  228. * DVB-C : EN 300 429
  229. * DVB-T : EN 300 744
  230. * DVB-H : EN 300 304
  231. * ATSC : A/53A
  232. */
  233. /*
  234. * Delivery Systems
  235. * needs to set/queried for multistandard frontends
  236. */
  237. enum dvbfe_delsys {
  238. DVBFE_DELSYS_DVBS = (1 << 0),
  239. DVBFE_DELSYS_DSS = (1 << 1),
  240. DVBFE_DELSYS_DVBS2 = (1 << 2),
  241. DVBFE_DELSYS_DVBC = (1 << 3),
  242. DVBFE_DELSYS_DVBT = (1 << 4),
  243. DVBFE_DELSYS_DVBH = (1 << 5),
  244. DVBFE_DELSYS_ATSC = (1 << 6),
  245. DVBFE_DELSYS_DUMMY = (1 << 31)
  246. };
  247. #define DVBFE_GET_DELSYS _IOR('o', 82, enum dvbfe_delsys)
  248. #define DVBFE_SET_DELSYS _IOW('o', 87, enum dvbfe_delsys)
  249. /* Modulation types */
  250. enum dvbfe_modulation {
  251. DVBFE_MOD_NONE = (0 << 0),
  252. DVBFE_MOD_BPSK = (1 << 0),
  253. DVBFE_MOD_QPSK = (1 << 1),
  254. DVBFE_MOD_OQPSK = (1 << 2),
  255. DVBFE_MOD_8PSK = (1 << 3),
  256. DVBFE_MOD_16APSK = (1 << 4),
  257. DVBFE_MOD_32APSK = (1 << 5),
  258. DVBFE_MOD_QAM4 = (1 << 6),
  259. DVBFE_MOD_QAM16 = (1 << 7),
  260. DVBFE_MOD_QAM32 = (1 << 8),
  261. DVBFE_MOD_QAM64 = (1 << 9),
  262. DVBFE_MOD_QAM128 = (1 << 10),
  263. DVBFE_MOD_QAM256 = (1 << 11),
  264. DVBFE_MOD_QAM512 = (1 << 12),
  265. DVBFE_MOD_QAM1024 = (1 << 13),
  266. DVBFE_MOD_QAMAUTO = (1 << 14),
  267. DVBFE_MOD_OFDM = (1 << 15),
  268. DVBFE_MOD_COFDM = (1 << 16),
  269. DVBFE_MOD_VSB8 = (1 << 17),
  270. DVBFE_MOD_VSB16 = (1 << 18),
  271. DVBFE_MOD_AUTO = (1 << 31)
  272. };
  273. /*
  274. * Convolution Code Rate (Viterbi Inner Code Rate)
  275. * DVB-S2 uses LDPC. Information on LDPC can be found at
  276. * http://www.ldpc-codes.com
  277. */
  278. enum dvbfe_fec {
  279. DVBFE_FEC_NONE = (0 << 0),
  280. DVBFE_FEC_1_4 = (1 << 0),
  281. DVBFE_FEC_1_3 = (1 << 1),
  282. DVBFE_FEC_2_5 = (1 << 2),
  283. DVBFE_FEC_1_2 = (1 << 3),
  284. DVBFE_FEC_3_5 = (1 << 4),
  285. DVBFE_FEC_2_3 = (1 << 5),
  286. DVBFE_FEC_3_4 = (1 << 6),
  287. DVBFE_FEC_4_5 = (1 << 7),
  288. DVBFE_FEC_5_6 = (1 << 8),
  289. DVBFE_FEC_6_7 = (1 << 9),
  290. DVBFE_FEC_7_8 = (1 << 10),
  291. DVBFE_FEC_8_9 = (1 << 11),
  292. DVBFE_FEC_9_10 = (1 << 12),
  293. DVBFE_FEC_AUTO = (1 << 31)
  294. };
  295. /* Frontend Inversion (I/Q Swap) */
  296. enum dvbfe_inversion {
  297. DVBFE_INVERSION_OFF = 0,
  298. DVBFE_INVERSION_ON = 1,
  299. DVBFE_INVERSION_AUTO = 2
  300. };
  301. /* DVB-S parameters */
  302. struct dvbs_params {
  303. __u32 symbol_rate;
  304. enum dvbfe_modulation modulation;
  305. enum dvbfe_fec fec;
  306. };
  307. /* DSS parameters */
  308. struct dss_params {
  309. __u32 symbol_rate;
  310. enum dvbfe_modulation modulation;
  311. enum dvbfe_fec fec;
  312. };
  313. /*
  314. * Rolloff Rate (Nyquist Filter Rolloff)
  315. * NOTE: DVB-S2 has rates of 0.20, 0.25, 0.35
  316. * Values are x100
  317. * Applies to DVB-S2
  318. */
  319. enum dvbfe_rolloff {
  320. DVBFE_ROLLOFF_35 = 0,
  321. DVBFE_ROLLOFF_25 = 1,
  322. DVBFE_ROLLOFF_20 = 2,
  323. DVBFE_ROLLOFF_UNKNOWN = 3
  324. };
  325. /* DVB-S2 parameters */
  326. struct dvbs2_params {
  327. __u32 symbol_rate;
  328. enum dvbfe_modulation modulation;
  329. enum dvbfe_fec fec;
  330. /* Informational fields only */
  331. enum dvbfe_rolloff rolloff;
  332. __u8 matype_1;
  333. __u8 matype_2;
  334. __u8 upl_1;
  335. __u8 upl_2;
  336. __u8 dfl_1;
  337. __u8 dfl_2;
  338. __u8 sync;
  339. __u8 syncd_1;
  340. __u8 syncd_2;
  341. __u8 pad[32];
  342. };
  343. /* DVB-C parameters */
  344. struct dvbc_params {
  345. __u32 symbol_rate;
  346. enum dvbfe_modulation modulation;
  347. enum dvbfe_fec fec;
  348. };
  349. /* DVB-T Channel bandwidth */
  350. enum dvbfe_bandwidth {
  351. DVBFE_BANDWIDTH_8_MHZ = (1 << 0),
  352. DVBFE_BANDWIDTH_7_MHZ = (1 << 1),
  353. DVBFE_BANDWIDTH_6_MHZ = (1 << 2),
  354. DVBFE_BANDWIDTH_5_MHZ = (1 << 3),
  355. DVBFE_BANDWIDTH_AUTO = (1 << 31)
  356. };
  357. /* DVB-T/DVB-H transmission mode */
  358. enum dvbfe_transmission_mode {
  359. DVBFE_TRANSMISSION_MODE_2K = (1 << 0),
  360. DVBFE_TRANSMISSION_MODE_4K = (1 << 1),
  361. DVBFE_TRANSMISSION_MODE_8K = (1 << 2),
  362. DVBFE_TRANSMISSION_MODE_AUTO = (1 << 31)
  363. };
  364. /* DVB-T/DVB-H Guard interval */
  365. enum dvbfe_guard_interval {
  366. DVBFE_GUARD_INTERVAL_1_32 = (1 << 1),
  367. DVBFE_GUARD_INTERVAL_1_16 = (1 << 2),
  368. DVBFE_GUARD_INTERVAL_1_8 = (1 << 3),
  369. DVBFE_GUARD_INTERVAL_1_4 = (1 << 4),
  370. DVBFE_GUARD_INTERVAL_AUTO = (1 << 31)
  371. };
  372. /* DVB-T/DVB-H Hierarchial modulation */
  373. enum dvbfe_hierarchy {
  374. DVBFE_HIERARCHY_OFF = (1 << 0),
  375. DVBFE_HIERARCHY_ON = (1 << 1),
  376. DVBFE_HIERARCHY_AUTO = (1 << 2)
  377. };
  378. /* DVB-T/DVB-H Rolloff's */
  379. enum dvbfe_alpha {
  380. DVBFE_ALPHA_1 = (1 << 0),
  381. DVBFE_ALPHA_2 = (1 << 1),
  382. DVBFE_ALPHA_4 = (1 << 2)
  383. };
  384. /* Stream priority (Hierachial coding) */
  385. enum dvbfe_stream_priority {
  386. DVBFE_STREAM_PRIORITY_HP = (0 << 0),
  387. DVBFE_STREAM_PRIORITY_LP = (1 << 0)
  388. };
  389. /* DVB-T parameters */
  390. struct dvbt_params {
  391. enum dvbfe_modulation constellation;
  392. enum dvbfe_bandwidth bandwidth;
  393. enum dvbfe_fec code_rate_HP;
  394. enum dvbfe_fec code_rate_LP;
  395. enum dvbfe_transmission_mode transmission_mode;
  396. enum dvbfe_guard_interval guard_interval;
  397. enum dvbfe_hierarchy hierarchy;
  398. enum dvbfe_alpha alpha;
  399. enum dvbfe_stream_priority priority;
  400. __u8 pad[32];
  401. };
  402. /* DVB-H Interleaver type */
  403. enum dvbfe_interleaver {
  404. DVBFE_INTERLEAVER_NATIVE = (1 << 0),
  405. DVBFE_INTERLEAVER_INDEPTH = (1 << 1),
  406. DVBFE_INTERLEAVER_AUTO = (1 << 31)
  407. };
  408. /* DVB-H MPE-FEC Indicator */
  409. enum dvbfe_mpefec {
  410. DVBFE_MPEFEC_OFF = (1 << 0),
  411. DVBFE_MPEFEC_ON = (1 << 1)
  412. };
  413. /* DVB-H Timeslicing Indicator */
  414. enum dvbfe_timeslicing {
  415. DVBFE_TIMESLICING_OFF = (1 << 0),
  416. DVBFE_TIMESLICING_ON = (1 << 1)
  417. };
  418. /* DVB-H parameters */
  419. struct dvbh_params {
  420. enum dvbfe_modulation constellation;
  421. enum dvbfe_fec code_rate_HP;
  422. enum dvbfe_fec code_rate_LP;
  423. enum dvbfe_transmission_mode transmission_mode;
  424. enum dvbfe_guard_interval guard_interval;
  425. enum dvbfe_hierarchy hierarchy;
  426. enum dvbfe_alpha alpha;
  427. enum dvbfe_interleaver interleaver;
  428. enum dvbfe_mpefec mpefec;
  429. enum dvbfe_timeslicing timeslicing;
  430. enum dvbfe_stream_priority priority;
  431. __u32 bandwidth;
  432. __u8 pad[32];
  433. };
  434. /* ATSC parameters */
  435. struct atsc_params {
  436. enum dvbfe_modulation modulation;
  437. __u8 pad[32];
  438. };
  439. /* DVB Frontend Tuning Parameters */
  440. struct dvbfe_params {
  441. __u32 frequency;
  442. enum fe_spectral_inversion inversion;
  443. enum dvbfe_delsys delivery;
  444. __u8 pad[32];
  445. union {
  446. struct dvbs_params dvbs;
  447. struct dss_params dss;
  448. struct dvbs2_params dvbs2;
  449. struct dvbc_params dvbc;
  450. struct dvbt_params dvbt;
  451. struct dvbh_params dvbh;
  452. struct atsc_params atsc;
  453. __u8 pad[128];
  454. } delsys;
  455. };
  456. #define DVBFE_SET_PARAMS _IOW('o', 83, struct dvbfe_params)
  457. #define DVBFE_GET_PARAMS _IOWR('o', 84, struct dvbfe_params)
  458. /* DVB-S capability bitfields */
  459. struct dvbfe_dvbs_info {
  460. enum dvbfe_modulation modulation;
  461. enum dvbfe_fec fec;
  462. };
  463. /* DSS capability bitfields */
  464. struct dvbfe_dss_info {
  465. enum dvbfe_modulation modulation;
  466. enum dvbfe_fec fec;
  467. };
  468. /* DVB-S2 capability bitfields */
  469. struct dvbfe_dvbs2_info {
  470. enum dvbfe_modulation modulation;
  471. enum dvbfe_fec fec;
  472. __u8 pad[32];
  473. };
  474. /* DVB-C capability bitfields */
  475. struct dvbfe_dvbc_info {
  476. enum dvbfe_modulation modulation;
  477. };
  478. /* DVB-T capability bitfields */
  479. struct dvbfe_dvbt_info {
  480. enum dvbfe_modulation modulation;
  481. enum dvbfe_stream_priority stream_priority;
  482. __u8 pad[32];
  483. };
  484. /* DVB-H capability bitfields */
  485. struct dvbfe_dvbh_info {
  486. enum dvbfe_modulation modulation;
  487. enum dvbfe_stream_priority stream_priority;
  488. __u8 pad[32];
  489. };
  490. /* ATSC capability bitfields */
  491. struct dvbfe_atsc_info {
  492. enum dvbfe_modulation modulation;
  493. __u8 pad[32];
  494. };
  495. /* DVB Frontend related Information */
  496. struct dvbfe_info {
  497. char name[128];
  498. union {
  499. struct dvbfe_dvbs_info dvbs;
  500. struct dvbfe_dss_info dss;
  501. struct dvbfe_dvbs2_info dvbs2;
  502. struct dvbfe_dvbc_info dvbc;
  503. struct dvbfe_dvbt_info dvbt;
  504. struct dvbfe_dvbh_info dvbh;
  505. struct dvbfe_atsc_info atsc;
  506. __u8 pad[128];
  507. } delsys;
  508. __u32 frequency_min;
  509. __u32 frequency_max;
  510. __u32 frequency_step;
  511. __u32 frequency_tolerance;
  512. __u32 symbol_rate_min;
  513. __u32 symbol_rate_max;
  514. __u32 symbol_rate_tolerance;
  515. enum fe_spectral_inversion inversion;
  516. __u8 pad[128];
  517. };
  518. #define DVBFE_GET_INFO _IOR('o', 85, struct dvbfe_info)
  519. enum dvbfe_status {
  520. DVBFE_HAS_SIGNAL = (1 << 0), /* something above noise floor */
  521. DVBFE_HAS_CARRIER = (1 << 1), /* Signal found */
  522. DVBFE_HAS_VITERBI = (1 << 2), /* FEC is stable */
  523. DVBFE_HAS_SYNC = (1 << 3), /* SYNC found */
  524. DVBFE_HAS_LOCK = (1 << 4), /* OK .. */
  525. DVBFE_TIMEDOUT = (1 << 5), /* no lock in last ~2 s */
  526. DVBFE_STATUS_DUMMY = (1 << 31)
  527. };
  528. /* DVB Frontend events */
  529. struct dvbfe_events {
  530. enum dvbfe_status status;
  531. __u8 pad[32];
  532. };
  533. struct dvb_frontend_event {
  534. fe_status_t status;
  535. struct dvb_frontend_parameters parameters;
  536. };
  537. #define FE_GET_EVENT _IOR('o', 78, struct dvb_frontend_event)
  538. struct dvbfe_event {
  539. struct dvbfe_events fe_events;
  540. struct dvbfe_params fe_params;
  541. };
  542. #define DVBFE_GET_EVENT _IOR('o', 86, struct dvbfe_event)
  543. #endif /*_DVBFRONTEND_H_*/