1 /* 2 * frontend.h 3 * 4 * Copyright (C) 2000 Marcus Metzler <[email protected]> 5 * Ralph Metzler <[email protected]> 6 * Holger Waechtler <[email protected]> 7 * Andre Draszik <[email protected]> 8 * for convergence integrated media GmbH 9 * 10 * This program is free software; you can redistribute it and/or 11 * modify it under the terms of the GNU Lesser General Public License 12 * as published by the Free Software Foundation; either version 2.1 13 * of the License, or (at your option) any later version. 14 * 15 * This program is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU General Public License for more details. 19 * 20 * You should have received a copy of the GNU Lesser General Public License 21 * along with this program; if not, write to the Free Software 22 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 23 * 24 */ 25 26 #ifndef _DVBFRONTEND_H_ 27 #define _DVBFRONTEND_H_ 28 29 #include <linux/types.h> 30 31 /** 32 * enum fe_caps - Frontend capabilities 33 * 34 * @FE_IS_STUPID: There's something wrong at the 35 * frontend, and it can't report its 36 * capabilities. 37 * @FE_CAN_INVERSION_AUTO: Can auto-detect frequency spectral 38 * band inversion 39 * @FE_CAN_FEC_1_2: Supports FEC 1/2 40 * @FE_CAN_FEC_2_3: Supports FEC 2/3 41 * @FE_CAN_FEC_3_4: Supports FEC 3/4 42 * @FE_CAN_FEC_4_5: Supports FEC 4/5 43 * @FE_CAN_FEC_5_6: Supports FEC 5/6 44 * @FE_CAN_FEC_6_7: Supports FEC 6/7 45 * @FE_CAN_FEC_7_8: Supports FEC 7/8 46 * @FE_CAN_FEC_8_9: Supports FEC 8/9 47 * @FE_CAN_FEC_AUTO: Can auto-detect FEC 48 * @FE_CAN_QPSK: Supports QPSK modulation 49 * @FE_CAN_QAM_16: Supports 16-QAM modulation 50 * @FE_CAN_QAM_32: Supports 32-QAM modulation 51 * @FE_CAN_QAM_64: Supports 64-QAM modulation 52 * @FE_CAN_QAM_128: Supports 128-QAM modulation 53 * @FE_CAN_QAM_256: Supports 256-QAM modulation 54 * @FE_CAN_QAM_AUTO: Can auto-detect QAM modulation 55 * @FE_CAN_TRANSMISSION_MODE_AUTO: Can auto-detect transmission mode 56 * @FE_CAN_BANDWIDTH_AUTO: Can auto-detect bandwidth 57 * @FE_CAN_GUARD_INTERVAL_AUTO: Can auto-detect guard interval 58 * @FE_CAN_HIERARCHY_AUTO: Can auto-detect hierarchy 59 * @FE_CAN_8VSB: Supports 8-VSB modulation 60 * @FE_CAN_16VSB: Supporta 16-VSB modulation 61 * @FE_HAS_EXTENDED_CAPS: Unused 62 * @FE_CAN_MULTISTREAM: Supports multistream filtering 63 * @FE_CAN_TURBO_FEC: Supports "turbo FEC" modulation 64 * @FE_CAN_2G_MODULATION: Supports "2nd generation" modulation, 65 * e. g. DVB-S2, DVB-T2, DVB-C2 66 * @FE_NEEDS_BENDING: Unused 67 * @FE_CAN_RECOVER: Can recover from a cable unplug 68 * automatically 69 * @FE_CAN_MUTE_TS: Can stop spurious TS data output 70 */ 71 enum fe_caps { 72 FE_IS_STUPID = 0, 73 FE_CAN_INVERSION_AUTO = 0x1, 74 FE_CAN_FEC_1_2 = 0x2, 75 FE_CAN_FEC_2_3 = 0x4, 76 FE_CAN_FEC_3_4 = 0x8, 77 FE_CAN_FEC_4_5 = 0x10, 78 FE_CAN_FEC_5_6 = 0x20, 79 FE_CAN_FEC_6_7 = 0x40, 80 FE_CAN_FEC_7_8 = 0x80, 81 FE_CAN_FEC_8_9 = 0x100, 82 FE_CAN_FEC_AUTO = 0x200, 83 FE_CAN_QPSK = 0x400, 84 FE_CAN_QAM_16 = 0x800, 85 FE_CAN_QAM_32 = 0x1000, 86 FE_CAN_QAM_64 = 0x2000, 87 FE_CAN_QAM_128 = 0x4000, 88 FE_CAN_QAM_256 = 0x8000, 89 FE_CAN_QAM_AUTO = 0x10000, 90 FE_CAN_TRANSMISSION_MODE_AUTO = 0x20000, 91 FE_CAN_BANDWIDTH_AUTO = 0x40000, 92 FE_CAN_GUARD_INTERVAL_AUTO = 0x80000, 93 FE_CAN_HIERARCHY_AUTO = 0x100000, 94 FE_CAN_8VSB = 0x200000, 95 FE_CAN_16VSB = 0x400000, 96 FE_HAS_EXTENDED_CAPS = 0x800000, 97 FE_CAN_MULTISTREAM = 0x4000000, 98 FE_CAN_TURBO_FEC = 0x8000000, 99 FE_CAN_2G_MODULATION = 0x10000000, 100 FE_NEEDS_BENDING = 0x20000000, 101 FE_CAN_RECOVER = 0x40000000, 102 FE_CAN_MUTE_TS = 0x80000000 103 }; 104 105 /* 106 * DEPRECATED: Should be kept just due to backward compatibility. 107 */ 108 enum fe_type { 109 FE_QPSK, 110 FE_QAM, 111 FE_OFDM, 112 FE_ATSC 113 }; 114 115 /** 116 * struct dvb_frontend_info - Frontend properties and capabilities 117 * 118 * @name: Name of the frontend 119 * @type: **DEPRECATED**. 120 * Should not be used on modern programs, 121 * as a frontend may have more than one type. 122 * In order to get the support types of a given 123 * frontend, use :c:type:`DTV_ENUM_DELSYS` 124 * instead. 125 * @frequency_min: Minimal frequency supported by the frontend. 126 * @frequency_max: Minimal frequency supported by the frontend. 127 * @frequency_stepsize: All frequencies are multiple of this value. 128 * @frequency_tolerance: Frequency tolerance. 129 * @symbol_rate_min: Minimal symbol rate, in bauds 130 * (for Cable/Satellite systems). 131 * @symbol_rate_max: Maximal symbol rate, in bauds 132 * (for Cable/Satellite systems). 133 * @symbol_rate_tolerance: Maximal symbol rate tolerance, in ppm 134 * (for Cable/Satellite systems). 135 * @notifier_delay: **DEPRECATED**. Not used by any driver. 136 * @caps: Capabilities supported by the frontend, 137 * as specified in &enum fe_caps. 138 * 139 * .. note: 140 * 141 * #. The frequencies are specified in Hz for Terrestrial and Cable 142 * systems. 143 * #. The frequencies are specified in kHz for Satellite systems. 144 */ 145 struct dvb_frontend_info { 146 char name[128]; 147 enum fe_type type; /* DEPRECATED. Use DTV_ENUM_DELSYS instead */ 148 __u32 frequency_min; 149 __u32 frequency_max; 150 __u32 frequency_stepsize; 151 __u32 frequency_tolerance; 152 __u32 symbol_rate_min; 153 __u32 symbol_rate_max; 154 __u32 symbol_rate_tolerance; 155 __u32 notifier_delay; /* DEPRECATED */ 156 enum fe_caps caps; 157 }; 158 159 /** 160 * struct dvb_diseqc_master_cmd - DiSEqC master command 161 * 162 * @msg: 163 * DiSEqC message to be sent. It contains a 3 bytes header with: 164 * framing + address + command, and an optional argument 165 * of up to 3 bytes of data. 166 * @msg_len: 167 * Length of the DiSEqC message. Valid values are 3 to 6. 168 * 169 * Check out the DiSEqC bus spec available on http://www.eutelsat.org/ for 170 * the possible messages that can be used. 171 */ 172 struct dvb_diseqc_master_cmd { 173 __u8 msg[6]; 174 __u8 msg_len; 175 }; 176 177 /** 178 * struct dvb_diseqc_slave_reply - DiSEqC received data 179 * 180 * @msg: 181 * DiSEqC message buffer to store a message received via DiSEqC. 182 * It contains one byte header with: framing and 183 * an optional argument of up to 3 bytes of data. 184 * @msg_len: 185 * Length of the DiSEqC message. Valid values are 0 to 4, 186 * where 0 means no message. 187 * @timeout: 188 * Return from ioctl after timeout ms with errorcode when 189 * no message was received. 190 * 191 * Check out the DiSEqC bus spec available on http://www.eutelsat.org/ for 192 * the possible messages that can be used. 193 */ 194 struct dvb_diseqc_slave_reply { 195 __u8 msg[4]; 196 __u8 msg_len; 197 int timeout; 198 }; 199 200 /** 201 * enum fe_sec_voltage - DC Voltage used to feed the LNBf 202 * 203 * @SEC_VOLTAGE_13: Output 13V to the LNBf 204 * @SEC_VOLTAGE_18: Output 18V to the LNBf 205 * @SEC_VOLTAGE_OFF: Don't feed the LNBf with a DC voltage 206 */ 207 enum fe_sec_voltage { 208 SEC_VOLTAGE_13, 209 SEC_VOLTAGE_18, 210 SEC_VOLTAGE_OFF 211 }; 212 213 /** 214 * enum fe_sec_tone_mode - Type of tone to be send to the LNBf. 215 * @SEC_TONE_ON: Sends a 22kHz tone burst to the antenna. 216 * @SEC_TONE_OFF: Don't send a 22kHz tone to the antenna (except 217 * if the ``FE_DISEQC_*`` ioctls are called). 218 */ 219 enum fe_sec_tone_mode { 220 SEC_TONE_ON, 221 SEC_TONE_OFF 222 }; 223 224 /** 225 * enum fe_sec_mini_cmd - Type of mini burst to be sent 226 * 227 * @SEC_MINI_A: Sends a mini-DiSEqC 22kHz '0' Tone Burst to select 228 * satellite-A 229 * @SEC_MINI_B: Sends a mini-DiSEqC 22kHz '1' Data Burst to select 230 * satellite-B 231 */ 232 enum fe_sec_mini_cmd { 233 SEC_MINI_A, 234 SEC_MINI_B 235 }; 236 237 /** 238 * enum fe_status - Enumerates the possible frontend status. 239 * @FE_NONE: The frontend doesn't have any kind of lock. 240 * That's the initial frontend status 241 * @FE_HAS_SIGNAL: Has found something above the noise level. 242 * @FE_HAS_CARRIER: Has found a signal. 243 * @FE_HAS_VITERBI: FEC inner coding (Viterbi, LDPC or other inner code). 244 * is stable. 245 * @FE_HAS_SYNC: Synchronization bytes was found. 246 * @FE_HAS_LOCK: Digital TV were locked and everything is working. 247 * @FE_TIMEDOUT: Fo lock within the last about 2 seconds. 248 * @FE_REINIT: Frontend was reinitialized, application is recommended 249 * to reset DiSEqC, tone and parameters. 250 */ 251 enum fe_status { 252 FE_NONE = 0x00, 253 FE_HAS_SIGNAL = 0x01, 254 FE_HAS_CARRIER = 0x02, 255 FE_HAS_VITERBI = 0x04, 256 FE_HAS_SYNC = 0x08, 257 FE_HAS_LOCK = 0x10, 258 FE_TIMEDOUT = 0x20, 259 FE_REINIT = 0x40, 260 }; 261 262 /** 263 * enum fe_spectral_inversion - Type of inversion band 264 * 265 * @INVERSION_OFF: Don't do spectral band inversion. 266 * @INVERSION_ON: Do spectral band inversion. 267 * @INVERSION_AUTO: Autodetect spectral band inversion. 268 * 269 * This parameter indicates if spectral inversion should be presumed or 270 * not. In the automatic setting (``INVERSION_AUTO``) the hardware will try 271 * to figure out the correct setting by itself. If the hardware doesn't 272 * support, the %dvb_frontend will try to lock at the carrier first with 273 * inversion off. If it fails, it will try to enable inversion. 274 */ 275 enum fe_spectral_inversion { 276 INVERSION_OFF, 277 INVERSION_ON, 278 INVERSION_AUTO 279 }; 280 281 /** 282 * enum fe_code_rate - Type of Forward Error Correction (FEC) 283 * 284 * 285 * @FEC_NONE: No Forward Error Correction Code 286 * @FEC_1_2: Forward Error Correction Code 1/2 287 * @FEC_2_3: Forward Error Correction Code 2/3 288 * @FEC_3_4: Forward Error Correction Code 3/4 289 * @FEC_4_5: Forward Error Correction Code 4/5 290 * @FEC_5_6: Forward Error Correction Code 5/6 291 * @FEC_6_7: Forward Error Correction Code 6/7 292 * @FEC_7_8: Forward Error Correction Code 7/8 293 * @FEC_8_9: Forward Error Correction Code 8/9 294 * @FEC_AUTO: Autodetect Error Correction Code 295 * @FEC_3_5: Forward Error Correction Code 3/5 296 * @FEC_9_10: Forward Error Correction Code 9/10 297 * @FEC_2_5: Forward Error Correction Code 2/5 298 * 299 * Please note that not all FEC types are supported by a given standard. 300 */ 301 enum fe_code_rate { 302 FEC_NONE = 0, 303 FEC_1_2, 304 FEC_2_3, 305 FEC_3_4, 306 FEC_4_5, 307 FEC_5_6, 308 FEC_6_7, 309 FEC_7_8, 310 FEC_8_9, 311 FEC_AUTO, 312 FEC_3_5, 313 FEC_9_10, 314 FEC_2_5, 315 }; 316 317 /** 318 * enum fe_modulation - Type of modulation/constellation 319 * @QPSK: QPSK modulation 320 * @QAM_16: 16-QAM modulation 321 * @QAM_32: 32-QAM modulation 322 * @QAM_64: 64-QAM modulation 323 * @QAM_128: 128-QAM modulation 324 * @QAM_256: 256-QAM modulation 325 * @QAM_AUTO: Autodetect QAM modulation 326 * @VSB_8: 8-VSB modulation 327 * @VSB_16: 16-VSB modulation 328 * @PSK_8: 8-PSK modulation 329 * @APSK_16: 16-APSK modulation 330 * @APSK_32: 32-APSK modulation 331 * @DQPSK: DQPSK modulation 332 * @QAM_4_NR: 4-QAM-NR modulation 333 * 334 * Please note that not all modulations are supported by a given standard. 335 * 336 */ 337 enum fe_modulation { 338 QPSK, 339 QAM_16, 340 QAM_32, 341 QAM_64, 342 QAM_128, 343 QAM_256, 344 QAM_AUTO, 345 VSB_8, 346 VSB_16, 347 PSK_8, 348 APSK_16, 349 APSK_32, 350 DQPSK, 351 QAM_4_NR, 352 }; 353 354 /** 355 * enum fe_transmit_mode - Transmission mode 356 * 357 * @TRANSMISSION_MODE_AUTO: 358 * Autodetect transmission mode. The hardware will try to find the 359 * correct FFT-size (if capable) to fill in the missing parameters. 360 * @TRANSMISSION_MODE_1K: 361 * Transmission mode 1K 362 * @TRANSMISSION_MODE_2K: 363 * Transmission mode 2K 364 * @TRANSMISSION_MODE_8K: 365 * Transmission mode 8K 366 * @TRANSMISSION_MODE_4K: 367 * Transmission mode 4K 368 * @TRANSMISSION_MODE_16K: 369 * Transmission mode 16K 370 * @TRANSMISSION_MODE_32K: 371 * Transmission mode 32K 372 * @TRANSMISSION_MODE_C1: 373 * Single Carrier (C=1) transmission mode (DTMB only) 374 * @TRANSMISSION_MODE_C3780: 375 * Multi Carrier (C=3780) transmission mode (DTMB only) 376 * 377 * Please note that not all transmission modes are supported by a given 378 * standard. 379 */ 380 enum fe_transmit_mode { 381 TRANSMISSION_MODE_2K, 382 TRANSMISSION_MODE_8K, 383 TRANSMISSION_MODE_AUTO, 384 TRANSMISSION_MODE_4K, 385 TRANSMISSION_MODE_1K, 386 TRANSMISSION_MODE_16K, 387 TRANSMISSION_MODE_32K, 388 TRANSMISSION_MODE_C1, 389 TRANSMISSION_MODE_C3780, 390 }; 391 392 /** 393 * enum fe_guard_interval - Guard interval 394 * 395 * @GUARD_INTERVAL_AUTO: Autodetect the guard interval 396 * @GUARD_INTERVAL_1_128: Guard interval 1/128 397 * @GUARD_INTERVAL_1_32: Guard interval 1/32 398 * @GUARD_INTERVAL_1_16: Guard interval 1/16 399 * @GUARD_INTERVAL_1_8: Guard interval 1/8 400 * @GUARD_INTERVAL_1_4: Guard interval 1/4 401 * @GUARD_INTERVAL_19_128: Guard interval 19/128 402 * @GUARD_INTERVAL_19_256: Guard interval 19/256 403 * @GUARD_INTERVAL_PN420: PN length 420 (1/4) 404 * @GUARD_INTERVAL_PN595: PN length 595 (1/6) 405 * @GUARD_INTERVAL_PN945: PN length 945 (1/9) 406 * 407 * Please note that not all guard intervals are supported by a given standard. 408 */ 409 enum fe_guard_interval { 410 GUARD_INTERVAL_1_32, 411 GUARD_INTERVAL_1_16, 412 GUARD_INTERVAL_1_8, 413 GUARD_INTERVAL_1_4, 414 GUARD_INTERVAL_AUTO, 415 GUARD_INTERVAL_1_128, 416 GUARD_INTERVAL_19_128, 417 GUARD_INTERVAL_19_256, 418 GUARD_INTERVAL_PN420, 419 GUARD_INTERVAL_PN595, 420 GUARD_INTERVAL_PN945, 421 }; 422 423 /** 424 * enum fe_hierarchy - Hierarchy 425 * @HIERARCHY_NONE: No hierarchy 426 * @HIERARCHY_AUTO: Autodetect hierarchy (if supported) 427 * @HIERARCHY_1: Hierarchy 1 428 * @HIERARCHY_2: Hierarchy 2 429 * @HIERARCHY_4: Hierarchy 4 430 * 431 * Please note that not all hierarchy types are supported by a given standard. 432 */ 433 enum fe_hierarchy { 434 HIERARCHY_NONE, 435 HIERARCHY_1, 436 HIERARCHY_2, 437 HIERARCHY_4, 438 HIERARCHY_AUTO 439 }; 440 441 /** 442 * enum fe_interleaving - Interleaving 443 * @INTERLEAVING_NONE: No interleaving. 444 * @INTERLEAVING_AUTO: Auto-detect interleaving. 445 * @INTERLEAVING_240: Interleaving of 240 symbols. 446 * @INTERLEAVING_720: Interleaving of 720 symbols. 447 * 448 * Please note that, currently, only DTMB uses it. 449 */ 450 enum fe_interleaving { 451 INTERLEAVING_NONE, 452 INTERLEAVING_AUTO, 453 INTERLEAVING_240, 454 INTERLEAVING_720, 455 }; 456 457 /* DVBv5 property Commands */ 458 459 #define DTV_UNDEFINED 0 460 #define DTV_TUNE 1 461 #define DTV_CLEAR 2 462 #define DTV_FREQUENCY 3 463 #define DTV_MODULATION 4 464 #define DTV_BANDWIDTH_HZ 5 465 #define DTV_INVERSION 6 466 #define DTV_DISEQC_MASTER 7 467 #define DTV_SYMBOL_RATE 8 468 #define DTV_INNER_FEC 9 469 #define DTV_VOLTAGE 10 470 #define DTV_TONE 11 471 #define DTV_PILOT 12 472 #define DTV_ROLLOFF 13 473 #define DTV_DISEQC_SLAVE_REPLY 14 474 475 /* Basic enumeration set for querying unlimited capabilities */ 476 #define DTV_FE_CAPABILITY_COUNT 15 477 #define DTV_FE_CAPABILITY 16 478 #define DTV_DELIVERY_SYSTEM 17 479 480 /* ISDB-T and ISDB-Tsb */ 481 #define DTV_ISDBT_PARTIAL_RECEPTION 18 482 #define DTV_ISDBT_SOUND_BROADCASTING 19 483 484 #define DTV_ISDBT_SB_SUBCHANNEL_ID 20 485 #define DTV_ISDBT_SB_SEGMENT_IDX 21 486 #define DTV_ISDBT_SB_SEGMENT_COUNT 22 487 488 #define DTV_ISDBT_LAYERA_FEC 23 489 #define DTV_ISDBT_LAYERA_MODULATION 24 490 #define DTV_ISDBT_LAYERA_SEGMENT_COUNT 25 491 #define DTV_ISDBT_LAYERA_TIME_INTERLEAVING 26 492 493 #define DTV_ISDBT_LAYERB_FEC 27 494 #define DTV_ISDBT_LAYERB_MODULATION 28 495 #define DTV_ISDBT_LAYERB_SEGMENT_COUNT 29 496 #define DTV_ISDBT_LAYERB_TIME_INTERLEAVING 30 497 498 #define DTV_ISDBT_LAYERC_FEC 31 499 #define DTV_ISDBT_LAYERC_MODULATION 32 500 #define DTV_ISDBT_LAYERC_SEGMENT_COUNT 33 501 #define DTV_ISDBT_LAYERC_TIME_INTERLEAVING 34 502 503 #define DTV_API_VERSION 35 504 505 #define DTV_CODE_RATE_HP 36 506 #define DTV_CODE_RATE_LP 37 507 #define DTV_GUARD_INTERVAL 38 508 #define DTV_TRANSMISSION_MODE 39 509 #define DTV_HIERARCHY 40 510 511 #define DTV_ISDBT_LAYER_ENABLED 41 512 513 #define DTV_STREAM_ID 42 514 #define DTV_ISDBS_TS_ID_LEGACY DTV_STREAM_ID 515 #define DTV_DVBT2_PLP_ID_LEGACY 43 516 517 #define DTV_ENUM_DELSYS 44 518 519 /* ATSC-MH */ 520 #define DTV_ATSCMH_FIC_VER 45 521 #define DTV_ATSCMH_PARADE_ID 46 522 #define DTV_ATSCMH_NOG 47 523 #define DTV_ATSCMH_TNOG 48 524 #define DTV_ATSCMH_SGN 49 525 #define DTV_ATSCMH_PRC 50 526 #define DTV_ATSCMH_RS_FRAME_MODE 51 527 #define DTV_ATSCMH_RS_FRAME_ENSEMBLE 52 528 #define DTV_ATSCMH_RS_CODE_MODE_PRI 53 529 #define DTV_ATSCMH_RS_CODE_MODE_SEC 54 530 #define DTV_ATSCMH_SCCC_BLOCK_MODE 55 531 #define DTV_ATSCMH_SCCC_CODE_MODE_A 56 532 #define DTV_ATSCMH_SCCC_CODE_MODE_B 57 533 #define DTV_ATSCMH_SCCC_CODE_MODE_C 58 534 #define DTV_ATSCMH_SCCC_CODE_MODE_D 59 535 536 #define DTV_INTERLEAVING 60 537 #define DTV_LNA 61 538 539 /* Quality parameters */ 540 #define DTV_STAT_SIGNAL_STRENGTH 62 541 #define DTV_STAT_CNR 63 542 #define DTV_STAT_PRE_ERROR_BIT_COUNT 64 543 #define DTV_STAT_PRE_TOTAL_BIT_COUNT 65 544 #define DTV_STAT_POST_ERROR_BIT_COUNT 66 545 #define DTV_STAT_POST_TOTAL_BIT_COUNT 67 546 #define DTV_STAT_ERROR_BLOCK_COUNT 68 547 #define DTV_STAT_TOTAL_BLOCK_COUNT 69 548 549 #define DTV_MAX_COMMAND DTV_STAT_TOTAL_BLOCK_COUNT 550 551 /** 552 * enum fe_pilot - Type of pilot tone 553 * 554 * @PILOT_ON: Pilot tones enabled 555 * @PILOT_OFF: Pilot tones disabled 556 * @PILOT_AUTO: Autodetect pilot tones 557 */ 558 enum fe_pilot { 559 PILOT_ON, 560 PILOT_OFF, 561 PILOT_AUTO, 562 }; 563 564 /** 565 * enum fe_rolloff - Rolloff factor 566 * @ROLLOFF_35: Roloff factor: α=35% 567 * @ROLLOFF_20: Roloff factor: α=20% 568 * @ROLLOFF_25: Roloff factor: α=25% 569 * @ROLLOFF_AUTO: Auto-detect the roloff factor. 570 * 571 * .. note: 572 * 573 * Roloff factor of 35% is implied on DVB-S. On DVB-S2, it is default. 574 */ 575 enum fe_rolloff { 576 ROLLOFF_35, 577 ROLLOFF_20, 578 ROLLOFF_25, 579 ROLLOFF_AUTO, 580 }; 581 582 /** 583 * enum fe_delivery_system - Type of the delivery system 584 * 585 * @SYS_UNDEFINED: 586 * Undefined standard. Generally, indicates an error 587 * @SYS_DVBC_ANNEX_A: 588 * Cable TV: DVB-C following ITU-T J.83 Annex A spec 589 * @SYS_DVBC_ANNEX_B: 590 * Cable TV: DVB-C following ITU-T J.83 Annex B spec (ClearQAM) 591 * @SYS_DVBC_ANNEX_C: 592 * Cable TV: DVB-C following ITU-T J.83 Annex C spec 593 * @SYS_ISDBC: 594 * Cable TV: ISDB-C (no drivers yet) 595 * @SYS_DVBT: 596 * Terrestrial TV: DVB-T 597 * @SYS_DVBT2: 598 * Terrestrial TV: DVB-T2 599 * @SYS_ISDBT: 600 * Terrestrial TV: ISDB-T 601 * @SYS_ATSC: 602 * Terrestrial TV: ATSC 603 * @SYS_ATSCMH: 604 * Terrestrial TV (mobile): ATSC-M/H 605 * @SYS_DTMB: 606 * Terrestrial TV: DTMB 607 * @SYS_DVBS: 608 * Satellite TV: DVB-S 609 * @SYS_DVBS2: 610 * Satellite TV: DVB-S2 611 * @SYS_TURBO: 612 * Satellite TV: DVB-S Turbo 613 * @SYS_ISDBS: 614 * Satellite TV: ISDB-S 615 * @SYS_DAB: 616 * Digital audio: DAB (not fully supported) 617 * @SYS_DSS: 618 * Satellite TV: DSS (not fully supported) 619 * @SYS_CMMB: 620 * Terrestrial TV (mobile): CMMB (not fully supported) 621 * @SYS_DVBH: 622 * Terrestrial TV (mobile): DVB-H (standard deprecated) 623 */ 624 enum fe_delivery_system { 625 SYS_UNDEFINED, 626 SYS_DVBC_ANNEX_A, 627 SYS_DVBC_ANNEX_B, 628 SYS_DVBT, 629 SYS_DSS, 630 SYS_DVBS, 631 SYS_DVBS2, 632 SYS_DVBH, 633 SYS_ISDBT, 634 SYS_ISDBS, 635 SYS_ISDBC, 636 SYS_ATSC, 637 SYS_ATSCMH, 638 SYS_DTMB, 639 SYS_CMMB, 640 SYS_DAB, 641 SYS_DVBT2, 642 SYS_TURBO, 643 SYS_DVBC_ANNEX_C, 644 }; 645 646 /* backward compatibility definitions for delivery systems */ 647 #define SYS_DVBC_ANNEX_AC SYS_DVBC_ANNEX_A 648 #define SYS_DMBTH SYS_DTMB /* DMB-TH is legacy name, use DTMB */ 649 650 /* ATSC-MH specific parameters */ 651 652 /** 653 * enum atscmh_sccc_block_mode - Type of Series Concatenated Convolutional 654 * Code Block Mode. 655 * 656 * @ATSCMH_SCCC_BLK_SEP: 657 * Separate SCCC: the SCCC outer code mode shall be set independently 658 * for each Group Region (A, B, C, D) 659 * @ATSCMH_SCCC_BLK_COMB: 660 * Combined SCCC: all four Regions shall have the same SCCC outer 661 * code mode. 662 * @ATSCMH_SCCC_BLK_RES: 663 * Reserved. Shouldn't be used. 664 */ 665 enum atscmh_sccc_block_mode { 666 ATSCMH_SCCC_BLK_SEP = 0, 667 ATSCMH_SCCC_BLK_COMB = 1, 668 ATSCMH_SCCC_BLK_RES = 2, 669 }; 670 671 /** 672 * enum atscmh_sccc_code_mode - Type of Series Concatenated Convolutional 673 * Code Rate. 674 * 675 * @ATSCMH_SCCC_CODE_HLF: 676 * The outer code rate of a SCCC Block is 1/2 rate. 677 * @ATSCMH_SCCC_CODE_QTR: 678 * The outer code rate of a SCCC Block is 1/4 rate. 679 * @ATSCMH_SCCC_CODE_RES: 680 * Reserved. Should not be used. 681 */ 682 enum atscmh_sccc_code_mode { 683 ATSCMH_SCCC_CODE_HLF = 0, 684 ATSCMH_SCCC_CODE_QTR = 1, 685 ATSCMH_SCCC_CODE_RES = 2, 686 }; 687 688 /** 689 * enum atscmh_rs_frame_ensemble - Reed Solomon(RS) frame ensemble. 690 * 691 * @ATSCMH_RSFRAME_ENS_PRI: Primary Ensemble. 692 * @ATSCMH_RSFRAME_ENS_SEC: Secondary Ensemble. 693 */ 694 enum atscmh_rs_frame_ensemble { 695 ATSCMH_RSFRAME_ENS_PRI = 0, 696 ATSCMH_RSFRAME_ENS_SEC = 1, 697 }; 698 699 /** 700 * enum atscmh_rs_frame_mode - Reed Solomon (RS) frame mode. 701 * 702 * @ATSCMH_RSFRAME_PRI_ONLY: 703 * Single Frame: There is only a primary RS Frame for all Group 704 * Regions. 705 * @ATSCMH_RSFRAME_PRI_SEC: 706 * Dual Frame: There are two separate RS Frames: Primary RS Frame for 707 * Group Region A and B and Secondary RS Frame for Group Region C and 708 * D. 709 * @ATSCMH_RSFRAME_RES: 710 * Reserved. Shouldn't be used. 711 */ 712 enum atscmh_rs_frame_mode { 713 ATSCMH_RSFRAME_PRI_ONLY = 0, 714 ATSCMH_RSFRAME_PRI_SEC = 1, 715 ATSCMH_RSFRAME_RES = 2, 716 }; 717 718 /** 719 * enum atscmh_rs_code_mode 720 * @ATSCMH_RSCODE_211_187: Reed Solomon code (211,187). 721 * @ATSCMH_RSCODE_223_187: Reed Solomon code (223,187). 722 * @ATSCMH_RSCODE_235_187: Reed Solomon code (235,187). 723 * @ATSCMH_RSCODE_RES: Reserved. Shouldn't be used. 724 */ 725 enum atscmh_rs_code_mode { 726 ATSCMH_RSCODE_211_187 = 0, 727 ATSCMH_RSCODE_223_187 = 1, 728 ATSCMH_RSCODE_235_187 = 2, 729 ATSCMH_RSCODE_RES = 3, 730 }; 731 732 #define NO_STREAM_ID_FILTER (~0U) 733 #define LNA_AUTO (~0U) 734 735 /** 736 * enum fecap_scale_params - scale types for the quality parameters. 737 * 738 * @FE_SCALE_NOT_AVAILABLE: That QoS measure is not available. That 739 * could indicate a temporary or a permanent 740 * condition. 741 * @FE_SCALE_DECIBEL: The scale is measured in 0.001 dB steps, typically 742 * used on signal measures. 743 * @FE_SCALE_RELATIVE: The scale is a relative percentual measure, 744 * ranging from 0 (0%) to 0xffff (100%). 745 * @FE_SCALE_COUNTER: The scale counts the occurrence of an event, like 746 * bit error, block error, lapsed time. 747 */ 748 enum fecap_scale_params { 749 FE_SCALE_NOT_AVAILABLE = 0, 750 FE_SCALE_DECIBEL, 751 FE_SCALE_RELATIVE, 752 FE_SCALE_COUNTER 753 }; 754 755 /** 756 * struct dtv_stats - Used for reading a DTV status property 757 * 758 * @scale: Filled with enum fecap_scale_params - the scale 759 * in usage for that parameter 760 * 761 * The ``{unnamed_union}`` may have either one of the values below: 762 * 763 * %svalue 764 * integer value of the measure, for %FE_SCALE_DECIBEL, 765 * used for dB measures. The unit is 0.001 dB. 766 * 767 * %uvalue 768 * unsigned integer value of the measure, used when @scale is 769 * either %FE_SCALE_RELATIVE or %FE_SCALE_COUNTER. 770 * 771 * For most delivery systems, this will return a single value for each 772 * parameter. 773 * 774 * It should be noticed, however, that new OFDM delivery systems like 775 * ISDB can use different modulation types for each group of carriers. 776 * On such standards, up to 8 groups of statistics can be provided, one 777 * for each carrier group (called "layer" on ISDB). 778 * 779 * In order to be consistent with other delivery systems, the first 780 * value refers to the entire set of carriers ("global"). 781 * 782 * @scale should use the value %FE_SCALE_NOT_AVAILABLE when 783 * the value for the entire group of carriers or from one specific layer 784 * is not provided by the hardware. 785 * 786 * @len should be filled with the latest filled status + 1. 787 * 788 * In other words, for ISDB, those values should be filled like:: 789 * 790 * u.st.stat.svalue[0] = global statistics; 791 * u.st.stat.scale[0] = FE_SCALE_DECIBEL; 792 * u.st.stat.value[1] = layer A statistics; 793 * u.st.stat.scale[1] = FE_SCALE_NOT_AVAILABLE (if not available); 794 * u.st.stat.svalue[2] = layer B statistics; 795 * u.st.stat.scale[2] = FE_SCALE_DECIBEL; 796 * u.st.stat.svalue[3] = layer C statistics; 797 * u.st.stat.scale[3] = FE_SCALE_DECIBEL; 798 * u.st.len = 4; 799 */ 800 struct dtv_stats { 801 __u8 scale; /* enum fecap_scale_params type */ 802 union { 803 __u64 uvalue; /* for counters and relative scales */ 804 __s64 svalue; /* for 0.001 dB measures */ 805 }; 806 } __attribute__ ((packed)); 807 808 809 #define MAX_DTV_STATS 4 810 811 /** 812 * struct dtv_fe_stats - store Digital TV frontend statistics 813 * 814 * @len: length of the statistics - if zero, stats is disabled. 815 * @stat: array with digital TV statistics. 816 * 817 * On most standards, @len can either be 0 or 1. However, for ISDB, each 818 * layer is modulated in separate. So, each layer may have its own set 819 * of statistics. If so, stat[0] carries on a global value for the property. 820 * Indexes 1 to 3 means layer A to B. 821 */ 822 struct dtv_fe_stats { 823 __u8 len; 824 struct dtv_stats stat[MAX_DTV_STATS]; 825 } __attribute__ ((packed)); 826 827 /** 828 * struct dtv_property - store one of frontend command and its value 829 * 830 * @cmd: Digital TV command. 831 * @reserved: Not used. 832 * @u: Union with the values for the command. 833 * @result: Result of the command set (currently unused). 834 * 835 * The @u union may have either one of the values below: 836 * 837 * %data 838 * an unsigned 32-bits number. 839 * %st 840 * a &struct dtv_fe_stats array of statistics. 841 * %buffer 842 * a buffer of up to 32 characters (currently unused). 843 */ 844 struct dtv_property { 845 __u32 cmd; 846 __u32 reserved[3]; 847 union { 848 __u32 data; 849 struct dtv_fe_stats st; 850 struct { 851 __u8 data[32]; 852 __u32 len; 853 __u32 reserved1[3]; 854 void *reserved2; 855 } buffer; 856 } u; 857 int result; 858 } __attribute__ ((packed)); 859 860 /* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */ 861 #define DTV_IOCTL_MAX_MSGS 64 862 863 /** 864 * struct dtv_properties - a set of command/value pairs. 865 * 866 * @num: amount of commands stored at the struct. 867 * @props: a pointer to &struct dtv_property. 868 */ 869 struct dtv_properties { 870 __u32 num; 871 struct dtv_property *props; 872 }; 873 874 /* 875 * When set, this flag will disable any zigzagging or other "normal" tuning 876 * behavior. Additionally, there will be no automatic monitoring of the lock 877 * status, and hence no frontend events will be generated. If a frontend device 878 * is closed, this flag will be automatically turned off when the device is 879 * reopened read-write. 880 */ 881 #define FE_TUNE_MODE_ONESHOT 0x01 882 883 /* Digital TV Frontend API calls */ 884 885 #define FE_GET_INFO _IOR('o', 61, struct dvb_frontend_info) 886 887 #define FE_DISEQC_RESET_OVERLOAD _IO('o', 62) 888 #define FE_DISEQC_SEND_MASTER_CMD _IOW('o', 63, struct dvb_diseqc_master_cmd) 889 #define FE_DISEQC_RECV_SLAVE_REPLY _IOR('o', 64, struct dvb_diseqc_slave_reply) 890 #define FE_DISEQC_SEND_BURST _IO('o', 65) /* fe_sec_mini_cmd_t */ 891 892 #define FE_SET_TONE _IO('o', 66) /* fe_sec_tone_mode_t */ 893 #define FE_SET_VOLTAGE _IO('o', 67) /* fe_sec_voltage_t */ 894 #define FE_ENABLE_HIGH_LNB_VOLTAGE _IO('o', 68) /* int */ 895 896 #define FE_READ_STATUS _IOR('o', 69, fe_status_t) 897 #define FE_READ_BER _IOR('o', 70, __u32) 898 #define FE_READ_SIGNAL_STRENGTH _IOR('o', 71, __u16) 899 #define FE_READ_SNR _IOR('o', 72, __u16) 900 #define FE_READ_UNCORRECTED_BLOCKS _IOR('o', 73, __u32) 901 902 #define FE_SET_FRONTEND_TUNE_MODE _IO('o', 81) /* unsigned int */ 903 #define FE_GET_EVENT _IOR('o', 78, struct dvb_frontend_event) 904 905 #define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */ 906 907 #define FE_SET_PROPERTY _IOW('o', 82, struct dtv_properties) 908 #define FE_GET_PROPERTY _IOR('o', 83, struct dtv_properties) 909 910 #if defined(__DVB_CORE__) || !defined(__KERNEL__) 911 912 /* 913 * DEPRECATED: Everything below is deprecated in favor of DVBv5 API 914 * 915 * The DVBv3 only ioctls, structs and enums should not be used on 916 * newer programs, as it doesn't support the second generation of 917 * digital TV standards, nor supports newer delivery systems. 918 * They also don't support modern frontends with usually support multiple 919 * delivery systems. 920 * 921 * Drivers shouldn't use them. 922 * 923 * New applications should use DVBv5 delivery system instead 924 */ 925 926 /* 927 */ 928 929 enum fe_bandwidth { 930 BANDWIDTH_8_MHZ, 931 BANDWIDTH_7_MHZ, 932 BANDWIDTH_6_MHZ, 933 BANDWIDTH_AUTO, 934 BANDWIDTH_5_MHZ, 935 BANDWIDTH_10_MHZ, 936 BANDWIDTH_1_712_MHZ, 937 }; 938 939 /* This is kept for legacy userspace support */ 940 typedef enum fe_sec_voltage fe_sec_voltage_t; 941 typedef enum fe_caps fe_caps_t; 942 typedef enum fe_type fe_type_t; 943 typedef enum fe_sec_tone_mode fe_sec_tone_mode_t; 944 typedef enum fe_sec_mini_cmd fe_sec_mini_cmd_t; 945 typedef enum fe_status fe_status_t; 946 typedef enum fe_spectral_inversion fe_spectral_inversion_t; 947 typedef enum fe_code_rate fe_code_rate_t; 948 typedef enum fe_modulation fe_modulation_t; 949 typedef enum fe_transmit_mode fe_transmit_mode_t; 950 typedef enum fe_bandwidth fe_bandwidth_t; 951 typedef enum fe_guard_interval fe_guard_interval_t; 952 typedef enum fe_hierarchy fe_hierarchy_t; 953 typedef enum fe_pilot fe_pilot_t; 954 typedef enum fe_rolloff fe_rolloff_t; 955 typedef enum fe_delivery_system fe_delivery_system_t; 956 957 /* DVBv3 structs */ 958 959 struct dvb_qpsk_parameters { 960 __u32 symbol_rate; /* symbol rate in Symbols per second */ 961 fe_code_rate_t fec_inner; /* forward error correction (see above) */ 962 }; 963 964 struct dvb_qam_parameters { 965 __u32 symbol_rate; /* symbol rate in Symbols per second */ 966 fe_code_rate_t fec_inner; /* forward error correction (see above) */ 967 fe_modulation_t modulation; /* modulation type (see above) */ 968 }; 969 970 struct dvb_vsb_parameters { 971 fe_modulation_t modulation; /* modulation type (see above) */ 972 }; 973 974 struct dvb_ofdm_parameters { 975 fe_bandwidth_t bandwidth; 976 fe_code_rate_t code_rate_HP; /* high priority stream code rate */ 977 fe_code_rate_t code_rate_LP; /* low priority stream code rate */ 978 fe_modulation_t constellation; /* modulation type (see above) */ 979 fe_transmit_mode_t transmission_mode; 980 fe_guard_interval_t guard_interval; 981 fe_hierarchy_t hierarchy_information; 982 }; 983 984 struct dvb_frontend_parameters { 985 __u32 frequency; /* (absolute) frequency in Hz for DVB-C/DVB-T/ATSC */ 986 /* intermediate frequency in kHz for DVB-S */ 987 fe_spectral_inversion_t inversion; 988 union { 989 struct dvb_qpsk_parameters qpsk; /* DVB-S */ 990 struct dvb_qam_parameters qam; /* DVB-C */ 991 struct dvb_ofdm_parameters ofdm; /* DVB-T */ 992 struct dvb_vsb_parameters vsb; /* ATSC */ 993 } u; 994 }; 995 996 struct dvb_frontend_event { 997 fe_status_t status; 998 struct dvb_frontend_parameters parameters; 999 }; 1000 1001 /* DVBv3 API calls */ 1002 1003 #define FE_SET_FRONTEND _IOW('o', 76, struct dvb_frontend_parameters) 1004 #define FE_GET_FRONTEND _IOR('o', 77, struct dvb_frontend_parameters) 1005 1006 #endif 1007 1008 #endif /*_DVBFRONTEND_H_*/ 1009