2018-06-19 21:50:12 +03:00
/* SPDX-License-Identifier: GPL-2.0 */
2017-07-09 22:42:43 +03:00
/*
* Defines for the Maxlinear MX58x family of tuners / demods
*
* Copyright ( C ) 2014 Digital Devices GmbH
*
* based on code :
* Copyright ( c ) 2011 - 2013 MaxLinear , Inc . All rights reserved
* which was released under GPL V2
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* version 2 , as published by the Free Software Foundation .
*/
enum MXL_BOOL_E {
MXL_DISABLE = 0 ,
MXL_ENABLE = 1 ,
MXL_FALSE = 0 ,
MXL_TRUE = 1 ,
MXL_INVALID = 0 ,
MXL_VALID = 1 ,
MXL_NO = 0 ,
MXL_YES = 1 ,
MXL_OFF = 0 ,
MXL_ON = 1
} ;
/* Firmware-Host Command IDs */
enum MXL_HYDRA_HOST_CMD_ID_E {
/* --Device command IDs-- */
MXL_HYDRA_DEV_NO_OP_CMD = 0 , /* No OP */
MXL_HYDRA_DEV_SET_POWER_MODE_CMD = 1 ,
MXL_HYDRA_DEV_SET_OVERWRITE_DEF_CMD = 2 ,
/* Host-used CMD, not used by firmware */
MXL_HYDRA_DEV_FIRMWARE_DOWNLOAD_CMD = 3 ,
/* Additional CONTROL types from DTV */
MXL_HYDRA_DEV_SET_BROADCAST_PID_STB_ID_CMD = 4 ,
MXL_HYDRA_DEV_GET_PMM_SLEEP_CMD = 5 ,
/* --Tuner command IDs-- */
MXL_HYDRA_TUNER_TUNE_CMD = 6 ,
MXL_HYDRA_TUNER_GET_STATUS_CMD = 7 ,
/* --Demod command IDs-- */
MXL_HYDRA_DEMOD_SET_PARAM_CMD = 8 ,
MXL_HYDRA_DEMOD_GET_STATUS_CMD = 9 ,
MXL_HYDRA_DEMOD_RESET_FEC_COUNTER_CMD = 10 ,
MXL_HYDRA_DEMOD_SET_PKT_NUM_CMD = 11 ,
MXL_HYDRA_DEMOD_SET_IQ_SOURCE_CMD = 12 ,
MXL_HYDRA_DEMOD_GET_IQ_DATA_CMD = 13 ,
MXL_HYDRA_DEMOD_GET_M68HC05_VER_CMD = 14 ,
MXL_HYDRA_DEMOD_SET_ERROR_COUNTER_MODE_CMD = 15 ,
/* --- ABORT channel tune */
MXL_HYDRA_ABORT_TUNE_CMD = 16 , /* Abort current tune command. */
/* --SWM/FSK command IDs-- */
MXL_HYDRA_FSK_RESET_CMD = 17 ,
MXL_HYDRA_FSK_MSG_CMD = 18 ,
MXL_HYDRA_FSK_SET_OP_MODE_CMD = 19 ,
/* --DiSeqC command IDs-- */
MXL_HYDRA_DISEQC_MSG_CMD = 20 ,
MXL_HYDRA_DISEQC_COPY_MSG_TO_MAILBOX = 21 ,
MXL_HYDRA_DISEQC_CFG_MSG_CMD = 22 ,
/* --- FFT Debug Command IDs-- */
MXL_HYDRA_REQ_FFT_SPECTRUM_CMD = 23 ,
/* -- Demod scramblle code */
MXL_HYDRA_DEMOD_SCRAMBLE_CODE_CMD = 24 ,
/* ---For host to know how many commands in total */
MXL_HYDRA_LAST_HOST_CMD = 25 ,
MXL_HYDRA_DEMOD_INTR_TYPE_CMD = 47 ,
MXL_HYDRA_DEV_INTR_CLEAR_CMD = 48 ,
MXL_HYDRA_TUNER_SPECTRUM_REQ_CMD = 53 ,
MXL_HYDRA_TUNER_ACTIVATE_CMD = 55 ,
MXL_HYDRA_DEV_CFG_POWER_MODE_CMD = 56 ,
MXL_HYDRA_DEV_XTAL_CAP_CMD = 57 ,
MXL_HYDRA_DEV_CFG_SKU_CMD = 58 ,
MXL_HYDRA_TUNER_SPECTRUM_MIN_GAIN_CMD = 59 ,
MXL_HYDRA_DISEQC_CONT_TONE_CFG = 60 ,
MXL_HYDRA_DEV_RF_WAKE_UP_CMD = 61 ,
MXL_HYDRA_DEMOD_CFG_EQ_CTRL_PARAM_CMD = 62 ,
MXL_HYDRA_DEMOD_FREQ_OFFSET_SEARCH_RANGE_CMD = 63 ,
MXL_HYDRA_DEV_REQ_PWR_FROM_ADCRSSI_CMD = 64 ,
MXL_XCPU_PID_FLT_CFG_CMD = 65 ,
MXL_XCPU_SHMEM_TEST_CMD = 66 ,
MXL_XCPU_ABORT_TUNE_CMD = 67 ,
MXL_XCPU_CHAN_TUNE_CMD = 68 ,
MXL_XCPU_FLT_BOND_HDRS_CMD = 69 ,
MXL_HYDRA_DEV_BROADCAST_WAKE_UP_CMD = 70 ,
MXL_HYDRA_FSK_CFG_FSK_FREQ_CMD = 71 ,
MXL_HYDRA_FSK_POWER_DOWN_CMD = 72 ,
MXL_XCPU_CLEAR_CB_STATS_CMD = 73 ,
MXL_XCPU_CHAN_BOND_RESTART_CMD = 74
} ;
# define MXL_ENABLE_BIG_ENDIAN (0)
# define MXL_HYDRA_OEM_MAX_BLOCK_WRITE_LENGTH 248
# define MXL_HYDRA_OEM_MAX_CMD_BUFF_LEN (248)
# define MXL_HYDRA_CAP_MIN 10
# define MXL_HYDRA_CAP_MAX 33
# define MXL_HYDRA_PLID_REG_READ 0xFB /* Read register PLID */
# define MXL_HYDRA_PLID_REG_WRITE 0xFC /* Write register PLID */
# define MXL_HYDRA_PLID_CMD_READ 0xFD /* Command Read PLID */
# define MXL_HYDRA_PLID_CMD_WRITE 0xFE /* Command Write PLID */
# define MXL_HYDRA_REG_SIZE_IN_BYTES 4 /* Hydra register size in bytes */
# define MXL_HYDRA_I2C_HDR_SIZE (2 * sizeof(u8)) /* PLID + LEN(0xFF) */
# define MXL_HYDRA_CMD_HEADER_SIZE (MXL_HYDRA_REG_SIZE_IN_BYTES + MXL_HYDRA_I2C_HDR_SIZE)
# define MXL_HYDRA_SKU_ID_581 0
# define MXL_HYDRA_SKU_ID_584 1
# define MXL_HYDRA_SKU_ID_585 2
# define MXL_HYDRA_SKU_ID_544 3
# define MXL_HYDRA_SKU_ID_561 4
# define MXL_HYDRA_SKU_ID_582 5
# define MXL_HYDRA_SKU_ID_568 6
/* macro for register write data buffer size
* ( PLID + LEN ( 0xFF ) + RegAddr + RegData )
*/
# define MXL_HYDRA_REG_WRITE_LEN (MXL_HYDRA_I2C_HDR_SIZE + (2 * MXL_HYDRA_REG_SIZE_IN_BYTES))
/* macro to extract a single byte from 4-byte(32-bit) data */
# define GET_BYTE(x, n) (((x) >> (8*(n))) & 0xFF)
# define MAX_CMD_DATA 512
# define MXL_GET_REG_MASK_32(lsb_loc, num_of_bits) ((0xFFFFFFFF >> (32 - (num_of_bits))) << (lsb_loc))
# define FW_DL_SIGN (0xDEADBEEF)
# define MBIN_FORMAT_VERSION '1'
# define MBIN_FILE_HEADER_ID 'M'
# define MBIN_SEGMENT_HEADER_ID 'S'
# define MBIN_MAX_FILE_LENGTH (1<<23)
struct MBIN_FILE_HEADER_T {
u8 id ;
u8 fmt_version ;
u8 header_len ;
u8 num_segments ;
u8 entry_address [ 4 ] ;
u8 image_size24 [ 3 ] ;
u8 image_checksum ;
u8 reserved [ 4 ] ;
} ;
struct MBIN_FILE_T {
struct MBIN_FILE_HEADER_T header ;
u8 data [ 1 ] ;
} ;
struct MBIN_SEGMENT_HEADER_T {
u8 id ;
u8 len24 [ 3 ] ;
u8 address [ 4 ] ;
} ;
struct MBIN_SEGMENT_T {
struct MBIN_SEGMENT_HEADER_T header ;
u8 data [ 1 ] ;
} ;
enum MXL_CMD_TYPE_E { MXL_CMD_WRITE = 0 , MXL_CMD_READ } ;
# define BUILD_HYDRA_CMD(cmd_id, req_type, size, data_ptr, cmd_buff) \
do { \
cmd_buff [ 0 ] = ( ( req_type = = MXL_CMD_WRITE ) ? MXL_HYDRA_PLID_CMD_WRITE : MXL_HYDRA_PLID_CMD_READ ) ; \
cmd_buff [ 1 ] = ( size > 251 ) ? 0xff : ( u8 ) ( size + 4 ) ; \
cmd_buff [ 2 ] = size ; \
cmd_buff [ 3 ] = cmd_id ; \
cmd_buff [ 4 ] = 0x00 ; \
cmd_buff [ 5 ] = 0x00 ; \
convert_endian ( MXL_ENABLE_BIG_ENDIAN , size , ( u8 * ) data_ptr ) ; \
memcpy ( ( void * ) & cmd_buff [ 6 ] , data_ptr , size ) ; \
} while ( 0 )
struct MXL_REG_FIELD_T {
u32 reg_addr ;
u8 lsb_pos ;
u8 num_of_bits ;
} ;
struct MXL_DEV_CMD_DATA_T {
u32 data_size ;
u8 data [ MAX_CMD_DATA ] ;
} ;
enum MXL_HYDRA_SKU_TYPE_E {
MXL_HYDRA_SKU_TYPE_MIN = 0x00 ,
MXL_HYDRA_SKU_TYPE_581 = 0x00 ,
MXL_HYDRA_SKU_TYPE_584 = 0x01 ,
MXL_HYDRA_SKU_TYPE_585 = 0x02 ,
MXL_HYDRA_SKU_TYPE_544 = 0x03 ,
MXL_HYDRA_SKU_TYPE_561 = 0x04 ,
MXL_HYDRA_SKU_TYPE_5XX = 0x05 ,
MXL_HYDRA_SKU_TYPE_5YY = 0x06 ,
MXL_HYDRA_SKU_TYPE_511 = 0x07 ,
MXL_HYDRA_SKU_TYPE_561_DE = 0x08 ,
MXL_HYDRA_SKU_TYPE_582 = 0x09 ,
MXL_HYDRA_SKU_TYPE_541 = 0x0A ,
MXL_HYDRA_SKU_TYPE_568 = 0x0B ,
MXL_HYDRA_SKU_TYPE_542 = 0x0C ,
MXL_HYDRA_SKU_TYPE_MAX = 0x0D ,
} ;
struct MXL_HYDRA_SKU_COMMAND_T {
enum MXL_HYDRA_SKU_TYPE_E sku_type ;
} ;
enum MXL_HYDRA_DEMOD_ID_E {
MXL_HYDRA_DEMOD_ID_0 = 0 ,
MXL_HYDRA_DEMOD_ID_1 ,
MXL_HYDRA_DEMOD_ID_2 ,
MXL_HYDRA_DEMOD_ID_3 ,
MXL_HYDRA_DEMOD_ID_4 ,
MXL_HYDRA_DEMOD_ID_5 ,
MXL_HYDRA_DEMOD_ID_6 ,
MXL_HYDRA_DEMOD_ID_7 ,
MXL_HYDRA_DEMOD_MAX
} ;
# define MXL_DEMOD_SCRAMBLE_SEQ_LEN 12
# define MAX_STEP_SIZE_24_XTAL_102_05_KHZ 195
# define MAX_STEP_SIZE_24_XTAL_204_10_KHZ 215
# define MAX_STEP_SIZE_24_XTAL_306_15_KHZ 203
# define MAX_STEP_SIZE_24_XTAL_408_20_KHZ 177
# define MAX_STEP_SIZE_27_XTAL_102_05_KHZ 195
# define MAX_STEP_SIZE_27_XTAL_204_10_KHZ 215
# define MAX_STEP_SIZE_27_XTAL_306_15_KHZ 203
# define MAX_STEP_SIZE_27_XTAL_408_20_KHZ 177
# define MXL_HYDRA_SPECTRUM_MIN_FREQ_KHZ 300000
# define MXL_HYDRA_SPECTRUM_MAX_FREQ_KHZ 2350000
enum MXL_DEMOD_CHAN_PARAMS_OFFSET_E {
DMD_STANDARD_ADDR = 0 ,
DMD_SPECTRUM_INVERSION_ADDR ,
DMD_SPECTRUM_ROLL_OFF_ADDR ,
DMD_SYMBOL_RATE_ADDR ,
DMD_MODULATION_SCHEME_ADDR ,
DMD_FEC_CODE_RATE_ADDR ,
DMD_SNR_ADDR ,
DMD_FREQ_OFFSET_ADDR ,
DMD_CTL_FREQ_OFFSET_ADDR ,
DMD_STR_FREQ_OFFSET_ADDR ,
DMD_FTL_FREQ_OFFSET_ADDR ,
DMD_STR_NBC_SYNC_LOCK_ADDR ,
DMD_CYCLE_SLIP_COUNT_ADDR ,
DMD_DISPLAY_IQ_ADDR ,
DMD_DVBS2_CRC_ERRORS_ADDR ,
DMD_DVBS2_PER_COUNT_ADDR ,
DMD_DVBS2_PER_WINDOW_ADDR ,
DMD_DVBS_CORR_RS_ERRORS_ADDR ,
DMD_DVBS_UNCORR_RS_ERRORS_ADDR ,
DMD_DVBS_BER_COUNT_ADDR ,
DMD_DVBS_BER_WINDOW_ADDR ,
DMD_TUNER_ID_ADDR ,
DMD_DVBS2_PILOT_ON_OFF_ADDR ,
DMD_FREQ_SEARCH_RANGE_IN_KHZ_ADDR ,
MXL_DEMOD_CHAN_PARAMS_BUFF_SIZE ,
} ;
enum MXL_HYDRA_TUNER_ID_E {
MXL_HYDRA_TUNER_ID_0 = 0 ,
MXL_HYDRA_TUNER_ID_1 ,
MXL_HYDRA_TUNER_ID_2 ,
MXL_HYDRA_TUNER_ID_3 ,
MXL_HYDRA_TUNER_MAX
} ;
enum MXL_HYDRA_BCAST_STD_E {
MXL_HYDRA_DSS = 0 ,
MXL_HYDRA_DVBS ,
MXL_HYDRA_DVBS2 ,
} ;
enum MXL_HYDRA_FEC_E {
MXL_HYDRA_FEC_AUTO = 0 ,
MXL_HYDRA_FEC_1_2 ,
MXL_HYDRA_FEC_3_5 ,
MXL_HYDRA_FEC_2_3 ,
MXL_HYDRA_FEC_3_4 ,
MXL_HYDRA_FEC_4_5 ,
MXL_HYDRA_FEC_5_6 ,
MXL_HYDRA_FEC_6_7 ,
MXL_HYDRA_FEC_7_8 ,
MXL_HYDRA_FEC_8_9 ,
MXL_HYDRA_FEC_9_10 ,
} ;
enum MXL_HYDRA_MODULATION_E {
MXL_HYDRA_MOD_AUTO = 0 ,
MXL_HYDRA_MOD_QPSK ,
MXL_HYDRA_MOD_8PSK
} ;
enum MXL_HYDRA_SPECTRUM_E {
MXL_HYDRA_SPECTRUM_AUTO = 0 ,
MXL_HYDRA_SPECTRUM_INVERTED ,
MXL_HYDRA_SPECTRUM_NON_INVERTED ,
} ;
enum MXL_HYDRA_ROLLOFF_E {
MXL_HYDRA_ROLLOFF_AUTO = 0 ,
MXL_HYDRA_ROLLOFF_0_20 ,
MXL_HYDRA_ROLLOFF_0_25 ,
MXL_HYDRA_ROLLOFF_0_35
} ;
enum MXL_HYDRA_PILOTS_E {
MXL_HYDRA_PILOTS_OFF = 0 ,
MXL_HYDRA_PILOTS_ON ,
MXL_HYDRA_PILOTS_AUTO
} ;
enum MXL_HYDRA_CONSTELLATION_SRC_E {
MXL_HYDRA_FORMATTER = 0 ,
MXL_HYDRA_LEGACY_FEC ,
MXL_HYDRA_FREQ_RECOVERY ,
MXL_HYDRA_NBC ,
MXL_HYDRA_CTL ,
MXL_HYDRA_EQ ,
} ;
struct MXL_HYDRA_DEMOD_LOCK_T {
int agc_lock ; /* AGC lock info */
int fec_lock ; /* Demod FEC block lock info */
} ;
struct MXL_HYDRA_DEMOD_STATUS_DVBS_T {
u32 rs_errors ; /* RS decoder err counter */
u32 ber_window ; /* Ber Windows */
u32 ber_count ; /* BER count */
u32 ber_window_iter1 ; /* Ber Windows - post viterbi */
u32 ber_count_iter1 ; /* BER count - post viterbi */
} ;
struct MXL_HYDRA_DEMOD_STATUS_DSS_T {
u32 rs_errors ; /* RS decoder err counter */
u32 ber_window ; /* Ber Windows */
u32 ber_count ; /* BER count */
} ;
struct MXL_HYDRA_DEMOD_STATUS_DVBS2_T {
u32 crc_errors ; /* CRC error counter */
u32 packet_error_count ; /* Number of packet errors */
u32 total_packets ; /* Total packets */
} ;
struct MXL_HYDRA_DEMOD_STATUS_T {
enum MXL_HYDRA_BCAST_STD_E standard_mask ; /* Standard DVB-S, DVB-S2 or DSS */
union {
struct MXL_HYDRA_DEMOD_STATUS_DVBS_T demod_status_dvbs ; /* DVB-S demod status */
struct MXL_HYDRA_DEMOD_STATUS_DVBS2_T demod_status_dvbs2 ; /* DVB-S2 demod status */
struct MXL_HYDRA_DEMOD_STATUS_DSS_T demod_status_dss ; /* DSS demod status */
} u ;
} ;
struct MXL_HYDRA_DEMOD_SIG_OFFSET_INFO_T {
s32 carrier_offset_in_hz ; /* CRL offset info */
s32 symbol_offset_in_symbol ; /* SRL offset info */
} ;
struct MXL_HYDRA_DEMOD_SCRAMBLE_INFO_T {
u8 scramble_sequence [ MXL_DEMOD_SCRAMBLE_SEQ_LEN ] ; /* scramble sequence */
u32 scramble_code ; /* scramble gold code */
} ;
enum MXL_HYDRA_SPECTRUM_STEP_SIZE_E {
MXL_HYDRA_STEP_SIZE_24_XTAL_102_05KHZ , /* 102.05 KHz for 24 MHz XTAL */
MXL_HYDRA_STEP_SIZE_24_XTAL_204_10KHZ , /* 204.10 KHz for 24 MHz XTAL */
MXL_HYDRA_STEP_SIZE_24_XTAL_306_15KHZ , /* 306.15 KHz for 24 MHz XTAL */
MXL_HYDRA_STEP_SIZE_24_XTAL_408_20KHZ , /* 408.20 KHz for 24 MHz XTAL */
MXL_HYDRA_STEP_SIZE_27_XTAL_102_05KHZ , /* 102.05 KHz for 27 MHz XTAL */
MXL_HYDRA_STEP_SIZE_27_XTAL_204_35KHZ , /* 204.35 KHz for 27 MHz XTAL */
MXL_HYDRA_STEP_SIZE_27_XTAL_306_52KHZ , /* 306.52 KHz for 27 MHz XTAL */
MXL_HYDRA_STEP_SIZE_27_XTAL_408_69KHZ , /* 408.69 KHz for 27 MHz XTAL */
} ;
enum MXL_HYDRA_SPECTRUM_RESOLUTION_E {
MXL_HYDRA_SPECTRUM_RESOLUTION_00_1_DB , /* 0.1 dB */
MXL_HYDRA_SPECTRUM_RESOLUTION_01_0_DB , /* 1.0 dB */
MXL_HYDRA_SPECTRUM_RESOLUTION_05_0_DB , /* 5.0 dB */
MXL_HYDRA_SPECTRUM_RESOLUTION_10_0_DB , /* 10 dB */
} ;
enum MXL_HYDRA_SPECTRUM_ERROR_CODE_E {
MXL_SPECTRUM_NO_ERROR ,
MXL_SPECTRUM_INVALID_PARAMETER ,
MXL_SPECTRUM_INVALID_STEP_SIZE ,
MXL_SPECTRUM_BW_CANNOT_BE_COVERED ,
MXL_SPECTRUM_DEMOD_BUSY ,
MXL_SPECTRUM_TUNER_NOT_ENABLED ,
} ;
struct MXL_HYDRA_SPECTRUM_REQ_T {
u32 tuner_index ; /* TUNER Ctrl: one of MXL58x_TUNER_ID_E */
u32 demod_index ; /* DEMOD Ctrl: one of MXL58x_DEMOD_ID_E */
enum MXL_HYDRA_SPECTRUM_STEP_SIZE_E step_size_in_khz ;
u32 starting_freq_ink_hz ;
u32 total_steps ;
enum MXL_HYDRA_SPECTRUM_RESOLUTION_E spectrum_division ;
} ;
enum MXL_HYDRA_SEARCH_FREQ_OFFSET_TYPE_E {
MXL_HYDRA_SEARCH_MAX_OFFSET = 0 , /* DMD searches for max freq offset (i.e. 5MHz) */
MXL_HYDRA_SEARCH_BW_PLUS_ROLLOFF , /* DMD searches for BW + ROLLOFF/2 */
} ;
struct MXL58X_CFG_FREQ_OFF_SEARCH_RANGE_T {
u32 demod_index ;
enum MXL_HYDRA_SEARCH_FREQ_OFFSET_TYPE_E search_type ;
} ;
/* there are two slices
* slice0 - TS0 , TS1 , TS2 & TS3
* slice1 - TS4 , TS5 , TS6 & TS7
*/
# define MXL_HYDRA_TS_SLICE_MAX 2
# define MAX_FIXED_PID_NUM 32
# define MXL_HYDRA_NCO_CLK 418 /* 418 MHz */
# define MXL_HYDRA_MAX_TS_CLOCK 139 /* 139 MHz */
# define MXL_HYDRA_TS_FIXED_PID_FILT_SIZE 32
# define MXL_HYDRA_SHARED_PID_FILT_SIZE_DEFAULT 33 /* Shared PID filter size in 1-1 mux mode */
# define MXL_HYDRA_SHARED_PID_FILT_SIZE_2_TO_1 66 /* Shared PID filter size in 2-1 mux mode */
# define MXL_HYDRA_SHARED_PID_FILT_SIZE_4_TO_1 132 /* Shared PID filter size in 4-1 mux mode */
enum MXL_HYDRA_PID_BANK_TYPE_E {
MXL_HYDRA_SOFTWARE_PID_BANK = 0 ,
MXL_HYDRA_HARDWARE_PID_BANK ,
} ;
enum MXL_HYDRA_TS_MUX_MODE_E {
MXL_HYDRA_TS_MUX_PID_REMAP = 0 ,
MXL_HYDRA_TS_MUX_PREFIX_EXTRA_HEADER = 1 ,
} ;
enum MXL_HYDRA_TS_MUX_TYPE_E {
MXL_HYDRA_TS_MUX_DISABLE = 0 , /* No Mux ( 1 TSIF to 1 TSIF) */
MXL_HYDRA_TS_MUX_2_TO_1 , /* Mux 2 TSIF to 1 TSIF */
MXL_HYDRA_TS_MUX_4_TO_1 , /* Mux 4 TSIF to 1 TSIF */
} ;
enum MXL_HYDRA_TS_GROUP_E {
MXL_HYDRA_TS_GROUP_0_3 = 0 , /* TS group 0 to 3 (TS0, TS1, TS2 & TS3) */
MXL_HYDRA_TS_GROUP_4_7 , /* TS group 0 to 3 (TS4, TS5, TS6 & TS7) */
} ;
enum MXL_HYDRA_TS_PID_FLT_CTRL_E {
MXL_HYDRA_TS_PIDS_ALLOW_ALL = 0 , /* Allow all pids */
MXL_HYDRA_TS_PIDS_DROP_ALL , /* Drop all pids */
MXL_HYDRA_TS_INVALIDATE_PID_FILTER , /* Delete current PD filter in the device */
} ;
enum MXL_HYDRA_TS_PID_TYPE_E {
MXL_HYDRA_TS_PID_FIXED = 0 ,
MXL_HYDRA_TS_PID_REGULAR ,
} ;
struct MXL_HYDRA_TS_PID_T {
u16 original_pid ; /* pid from TS */
u16 remapped_pid ; /* remapped pid */
enum MXL_BOOL_E enable ; /* enable or disable pid */
enum MXL_BOOL_E allow_or_drop ; /* allow or drop pid */
enum MXL_BOOL_E enable_pid_remap ; /* enable or disable pid remap */
u8 bond_id ; /* Bond ID in A0 always 0 - Only for 568 Sku */
u8 dest_id ; /* Output port ID for the PID - Only for 568 Sku */
} ;
struct MXL_HYDRA_TS_MUX_PREFIX_HEADER_T {
enum MXL_BOOL_E enable ;
u8 num_byte ;
u8 header [ 12 ] ;
} ;
enum MXL_HYDRA_PID_FILTER_BANK_E {
MXL_HYDRA_PID_BANK_A = 0 ,
MXL_HYDRA_PID_BANK_B ,
} ;
enum MXL_HYDRA_MPEG_DATA_FMT_E {
MXL_HYDRA_MPEG_SERIAL_MSB_1ST = 0 ,
MXL_HYDRA_MPEG_SERIAL_LSB_1ST ,
MXL_HYDRA_MPEG_SYNC_WIDTH_BIT = 0 ,
MXL_HYDRA_MPEG_SYNC_WIDTH_BYTE
} ;
enum MXL_HYDRA_MPEG_MODE_E {
MXL_HYDRA_MPEG_MODE_SERIAL_4_WIRE = 0 , /* MPEG 4 Wire serial mode */
MXL_HYDRA_MPEG_MODE_SERIAL_3_WIRE , /* MPEG 3 Wire serial mode */
MXL_HYDRA_MPEG_MODE_SERIAL_2_WIRE , /* MPEG 2 Wire serial mode */
MXL_HYDRA_MPEG_MODE_PARALLEL /* MPEG parallel mode - valid only for MxL581 */
} ;
enum MXL_HYDRA_MPEG_CLK_TYPE_E {
MXL_HYDRA_MPEG_CLK_CONTINUOUS = 0 , /* Continuous MPEG clock */
MXL_HYDRA_MPEG_CLK_GAPPED , /* Gapped (gated) MPEG clock */
} ;
enum MXL_HYDRA_MPEG_CLK_FMT_E {
MXL_HYDRA_MPEG_ACTIVE_LOW = 0 ,
MXL_HYDRA_MPEG_ACTIVE_HIGH ,
MXL_HYDRA_MPEG_CLK_NEGATIVE = 0 ,
MXL_HYDRA_MPEG_CLK_POSITIVE ,
MXL_HYDRA_MPEG_CLK_IN_PHASE = 0 ,
MXL_HYDRA_MPEG_CLK_INVERTED ,
} ;
enum MXL_HYDRA_MPEG_CLK_PHASE_E {
MXL_HYDRA_MPEG_CLK_PHASE_SHIFT_0_DEG = 0 ,
MXL_HYDRA_MPEG_CLK_PHASE_SHIFT_90_DEG ,
MXL_HYDRA_MPEG_CLK_PHASE_SHIFT_180_DEG ,
MXL_HYDRA_MPEG_CLK_PHASE_SHIFT_270_DEG
} ;
enum MXL_HYDRA_MPEG_ERR_INDICATION_E {
MXL_HYDRA_MPEG_ERR_REPLACE_SYNC = 0 ,
MXL_HYDRA_MPEG_ERR_REPLACE_VALID ,
MXL_HYDRA_MPEG_ERR_INDICATION_DISABLED
} ;
struct MXL_HYDRA_MPEGOUT_PARAM_T {
int enable ; /* Enable or Disable MPEG OUT */
enum MXL_HYDRA_MPEG_CLK_TYPE_E mpeg_clk_type ; /* Continuous or gapped */
enum MXL_HYDRA_MPEG_CLK_FMT_E mpeg_clk_pol ; /* MPEG Clk polarity */
u8 max_mpeg_clk_rate ; /* Max MPEG Clk rate (0 - 104 MHz, 139 MHz) */
enum MXL_HYDRA_MPEG_CLK_PHASE_E mpeg_clk_phase ; /* MPEG Clk phase */
enum MXL_HYDRA_MPEG_DATA_FMT_E lsb_or_msb_first ; /* LSB first or MSB first in TS transmission */
enum MXL_HYDRA_MPEG_DATA_FMT_E mpeg_sync_pulse_width ; /* MPEG SYNC pulse width (1-bit or 1-byte) */
enum MXL_HYDRA_MPEG_CLK_FMT_E mpeg_valid_pol ; /* MPEG VALID polarity */
enum MXL_HYDRA_MPEG_CLK_FMT_E mpeg_sync_pol ; /* MPEG SYNC polarity */
enum MXL_HYDRA_MPEG_MODE_E mpeg_mode ; /* config 4/3/2-wire serial or parallel TS out */
enum MXL_HYDRA_MPEG_ERR_INDICATION_E mpeg_error_indication ; /* Enable or Disable MPEG error indication */
} ;
enum MXL_HYDRA_EXT_TS_IN_ID_E {
MXL_HYDRA_EXT_TS_IN_0 = 0 ,
MXL_HYDRA_EXT_TS_IN_1 ,
MXL_HYDRA_EXT_TS_IN_2 ,
MXL_HYDRA_EXT_TS_IN_3 ,
MXL_HYDRA_EXT_TS_IN_MAX
} ;
enum MXL_HYDRA_TS_OUT_ID_E {
MXL_HYDRA_TS_OUT_0 = 0 ,
MXL_HYDRA_TS_OUT_1 ,
MXL_HYDRA_TS_OUT_2 ,
MXL_HYDRA_TS_OUT_3 ,
MXL_HYDRA_TS_OUT_4 ,
MXL_HYDRA_TS_OUT_5 ,
MXL_HYDRA_TS_OUT_6 ,
MXL_HYDRA_TS_OUT_7 ,
MXL_HYDRA_TS_OUT_MAX
} ;
enum MXL_HYDRA_TS_DRIVE_STRENGTH_E {
MXL_HYDRA_TS_DRIVE_STRENGTH_1X = 0 ,
MXL_HYDRA_TS_DRIVE_STRENGTH_2X ,
MXL_HYDRA_TS_DRIVE_STRENGTH_3X ,
MXL_HYDRA_TS_DRIVE_STRENGTH_4X ,
MXL_HYDRA_TS_DRIVE_STRENGTH_5X ,
MXL_HYDRA_TS_DRIVE_STRENGTH_6X ,
MXL_HYDRA_TS_DRIVE_STRENGTH_7X ,
MXL_HYDRA_TS_DRIVE_STRENGTH_8X
} ;
enum MXL_HYDRA_DEVICE_E {
MXL_HYDRA_DEVICE_581 = 0 ,
MXL_HYDRA_DEVICE_584 ,
MXL_HYDRA_DEVICE_585 ,
MXL_HYDRA_DEVICE_544 ,
MXL_HYDRA_DEVICE_561 ,
MXL_HYDRA_DEVICE_TEST ,
MXL_HYDRA_DEVICE_582 ,
MXL_HYDRA_DEVICE_541 ,
MXL_HYDRA_DEVICE_568 ,
MXL_HYDRA_DEVICE_542 ,
MXL_HYDRA_DEVICE_541S ,
MXL_HYDRA_DEVICE_561S ,
MXL_HYDRA_DEVICE_581S ,
MXL_HYDRA_DEVICE_MAX
} ;
/* Demod IQ data */
struct MXL_HYDRA_DEMOD_IQ_SRC_T {
u32 demod_id ;
u32 source_of_iq ; /* == 0, it means I/Q comes from Formatter
* = = 1 , Legacy FEC
* = = 2 , Frequency Recovery
* = = 3 , NBC
* = = 4 , CTL
* = = 5 , EQ
* = = 6 , FPGA
*/
} ;
struct MXL_HYDRA_DEMOD_ABORT_TUNE_T {
u32 demod_id ;
} ;
struct MXL_HYDRA_TUNER_CMD {
u8 tuner_id ;
u8 enable ;
} ;
/* Demod Para for Channel Tune */
struct MXL_HYDRA_DEMOD_PARAM_T {
u32 tuner_index ;
u32 demod_index ;
u32 frequency_in_hz ; /* Frequency */
u32 standard ; /* one of MXL_HYDRA_BCAST_STD_E */
u32 spectrum_inversion ; /* Input : Spectrum inversion. */
u32 roll_off ; /* rollOff (alpha) factor */
u32 symbol_rate_in_hz ; /* Symbol rate */
u32 pilots ; /* TRUE = pilots enabled */
u32 modulation_scheme ; /* Input : Modulation Scheme is one of MXL_HYDRA_MODULATION_E */
u32 fec_code_rate ; /* Input : Forward error correction rate. Is one of MXL_HYDRA_FEC_E */
u32 max_carrier_offset_in_mhz ; /* Maximum carrier freq offset in MHz. Same as freqSearchRangeKHz, but in unit of MHz. */
} ;
struct MXL_HYDRA_DEMOD_SCRAMBLE_CODE_T {
u32 demod_index ;
u8 scramble_sequence [ 12 ] ; /* scramble sequence */
u32 scramble_code ; /* scramble gold code */
} ;
struct MXL_INTR_CFG_T {
u32 intr_type ;
u32 intr_duration_in_nano_secs ;
u32 intr_mask ;
} ;
struct MXL_HYDRA_POWER_MODE_CMD {
u8 power_mode ; /* enumeration values are defined in MXL_HYDRA_PWR_MODE_E (device API.h) */
} ;
struct MXL_HYDRA_RF_WAKEUP_PARAM_T {
u32 time_interval_in_seconds ; /* in seconds */
u32 tuner_index ;
s32 rssi_threshold ;
} ;
struct MXL_HYDRA_RF_WAKEUP_CFG_T {
u32 tuner_count ;
struct MXL_HYDRA_RF_WAKEUP_PARAM_T params ;
} ;
enum MXL_HYDRA_AUX_CTRL_MODE_E {
MXL_HYDRA_AUX_CTRL_MODE_FSK = 0 , /* Select FSK controller */
MXL_HYDRA_AUX_CTRL_MODE_DISEQC , /* Select DiSEqC controller */
} ;
enum MXL_HYDRA_DISEQC_OPMODE_E {
MXL_HYDRA_DISEQC_ENVELOPE_MODE = 0 ,
MXL_HYDRA_DISEQC_TONE_MODE ,
} ;
enum MXL_HYDRA_DISEQC_VER_E {
MXL_HYDRA_DISEQC_1_X = 0 , /* Config DiSEqC 1.x mode */
MXL_HYDRA_DISEQC_2_X , /* Config DiSEqC 2.x mode */
MXL_HYDRA_DISEQC_DISABLE /* Disable DiSEqC */
} ;
enum MXL_HYDRA_DISEQC_CARRIER_FREQ_E {
MXL_HYDRA_DISEQC_CARRIER_FREQ_22KHZ = 0 , /* DiSEqC signal frequency of 22 KHz */
MXL_HYDRA_DISEQC_CARRIER_FREQ_33KHZ , /* DiSEqC signal frequency of 33 KHz */
MXL_HYDRA_DISEQC_CARRIER_FREQ_44KHZ /* DiSEqC signal frequency of 44 KHz */
} ;
enum MXL_HYDRA_DISEQC_ID_E {
MXL_HYDRA_DISEQC_ID_0 = 0 ,
MXL_HYDRA_DISEQC_ID_1 ,
MXL_HYDRA_DISEQC_ID_2 ,
MXL_HYDRA_DISEQC_ID_3
} ;
enum MXL_HYDRA_FSK_OP_MODE_E {
MXL_HYDRA_FSK_CFG_TYPE_39KPBS = 0 , /* 39.0kbps */
MXL_HYDRA_FSK_CFG_TYPE_39_017KPBS , /* 39.017kbps */
MXL_HYDRA_FSK_CFG_TYPE_115_2KPBS /* 115.2kbps */
} ;
struct MXL58X_DSQ_OP_MODE_T {
u32 diseqc_id ; /* DSQ 0, 1, 2 or 3 */
u32 op_mode ; /* Envelope mode (0) or internal tone mode (1) */
u32 version ; /* 0: 1.0, 1: 1.1, 2: Disable */
u32 center_freq ; /* 0: 22KHz, 1: 33KHz and 2: 44 KHz */
} ;
struct MXL_HYDRA_DISEQC_CFG_CONT_TONE_T {
u32 diseqc_id ;
u32 cont_tone_flag ; /* 1: Enable , 0: Disable */
} ;