1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Defines for the Maxlinear MX58x family of tuners/demods 4 * 5 * Copyright (C) 2014 Digital Devices GmbH 6 * 7 * based on code: 8 * Copyright (c) 2011-2013 MaxLinear, Inc. All rights reserved 9 * which was released under GPL V2 10 * 11 * This program is free software; you can redistribute it and/or 12 * modify it under the terms of the GNU General Public License 13 * version 2, as published by the Free Software Foundation. 14 */ 15 16 enum MXL_BOOL_E { 17 MXL_DISABLE = 0, 18 MXL_ENABLE = 1, 19 20 MXL_FALSE = 0, 21 MXL_TRUE = 1, 22 23 MXL_INVALID = 0, 24 MXL_VALID = 1, 25 26 MXL_NO = 0, 27 MXL_YES = 1, 28 29 MXL_OFF = 0, 30 MXL_ON = 1 31 }; 32 33 /* Firmware-Host Command IDs */ 34 enum MXL_HYDRA_HOST_CMD_ID_E { 35 /* --Device command IDs-- */ 36 MXL_HYDRA_DEV_NO_OP_CMD = 0, /* No OP */ 37 38 MXL_HYDRA_DEV_SET_POWER_MODE_CMD = 1, 39 MXL_HYDRA_DEV_SET_OVERWRITE_DEF_CMD = 2, 40 41 /* Host-used CMD, not used by firmware */ 42 MXL_HYDRA_DEV_FIRMWARE_DOWNLOAD_CMD = 3, 43 44 /* Additional CONTROL types from DTV */ 45 MXL_HYDRA_DEV_SET_BROADCAST_PID_STB_ID_CMD = 4, 46 MXL_HYDRA_DEV_GET_PMM_SLEEP_CMD = 5, 47 48 /* --Tuner command IDs-- */ 49 MXL_HYDRA_TUNER_TUNE_CMD = 6, 50 MXL_HYDRA_TUNER_GET_STATUS_CMD = 7, 51 52 /* --Demod command IDs-- */ 53 MXL_HYDRA_DEMOD_SET_PARAM_CMD = 8, 54 MXL_HYDRA_DEMOD_GET_STATUS_CMD = 9, 55 56 MXL_HYDRA_DEMOD_RESET_FEC_COUNTER_CMD = 10, 57 58 MXL_HYDRA_DEMOD_SET_PKT_NUM_CMD = 11, 59 60 MXL_HYDRA_DEMOD_SET_IQ_SOURCE_CMD = 12, 61 MXL_HYDRA_DEMOD_GET_IQ_DATA_CMD = 13, 62 63 MXL_HYDRA_DEMOD_GET_M68HC05_VER_CMD = 14, 64 65 MXL_HYDRA_DEMOD_SET_ERROR_COUNTER_MODE_CMD = 15, 66 67 /* --- ABORT channel tune */ 68 MXL_HYDRA_ABORT_TUNE_CMD = 16, /* Abort current tune command. */ 69 70 /* --SWM/FSK command IDs-- */ 71 MXL_HYDRA_FSK_RESET_CMD = 17, 72 MXL_HYDRA_FSK_MSG_CMD = 18, 73 MXL_HYDRA_FSK_SET_OP_MODE_CMD = 19, 74 75 /* --DiSeqC command IDs-- */ 76 MXL_HYDRA_DISEQC_MSG_CMD = 20, 77 MXL_HYDRA_DISEQC_COPY_MSG_TO_MAILBOX = 21, 78 MXL_HYDRA_DISEQC_CFG_MSG_CMD = 22, 79 80 /* --- FFT Debug Command IDs-- */ 81 MXL_HYDRA_REQ_FFT_SPECTRUM_CMD = 23, 82 83 /* -- Demod scramblle code */ 84 MXL_HYDRA_DEMOD_SCRAMBLE_CODE_CMD = 24, 85 86 /* ---For host to know how many commands in total */ 87 MXL_HYDRA_LAST_HOST_CMD = 25, 88 89 MXL_HYDRA_DEMOD_INTR_TYPE_CMD = 47, 90 MXL_HYDRA_DEV_INTR_CLEAR_CMD = 48, 91 MXL_HYDRA_TUNER_SPECTRUM_REQ_CMD = 53, 92 MXL_HYDRA_TUNER_ACTIVATE_CMD = 55, 93 MXL_HYDRA_DEV_CFG_POWER_MODE_CMD = 56, 94 MXL_HYDRA_DEV_XTAL_CAP_CMD = 57, 95 MXL_HYDRA_DEV_CFG_SKU_CMD = 58, 96 MXL_HYDRA_TUNER_SPECTRUM_MIN_GAIN_CMD = 59, 97 MXL_HYDRA_DISEQC_CONT_TONE_CFG = 60, 98 MXL_HYDRA_DEV_RF_WAKE_UP_CMD = 61, 99 MXL_HYDRA_DEMOD_CFG_EQ_CTRL_PARAM_CMD = 62, 100 MXL_HYDRA_DEMOD_FREQ_OFFSET_SEARCH_RANGE_CMD = 63, 101 MXL_HYDRA_DEV_REQ_PWR_FROM_ADCRSSI_CMD = 64, 102 103 MXL_XCPU_PID_FLT_CFG_CMD = 65, 104 MXL_XCPU_SHMEM_TEST_CMD = 66, 105 MXL_XCPU_ABORT_TUNE_CMD = 67, 106 MXL_XCPU_CHAN_TUNE_CMD = 68, 107 MXL_XCPU_FLT_BOND_HDRS_CMD = 69, 108 109 MXL_HYDRA_DEV_BROADCAST_WAKE_UP_CMD = 70, 110 MXL_HYDRA_FSK_CFG_FSK_FREQ_CMD = 71, 111 MXL_HYDRA_FSK_POWER_DOWN_CMD = 72, 112 MXL_XCPU_CLEAR_CB_STATS_CMD = 73, 113 MXL_XCPU_CHAN_BOND_RESTART_CMD = 74 114 }; 115 116 #define MXL_ENABLE_BIG_ENDIAN (0) 117 118 #define MXL_HYDRA_OEM_MAX_BLOCK_WRITE_LENGTH 248 119 120 #define MXL_HYDRA_OEM_MAX_CMD_BUFF_LEN (248) 121 122 #define MXL_HYDRA_CAP_MIN 10 123 #define MXL_HYDRA_CAP_MAX 33 124 125 #define MXL_HYDRA_PLID_REG_READ 0xFB /* Read register PLID */ 126 #define MXL_HYDRA_PLID_REG_WRITE 0xFC /* Write register PLID */ 127 128 #define MXL_HYDRA_PLID_CMD_READ 0xFD /* Command Read PLID */ 129 #define MXL_HYDRA_PLID_CMD_WRITE 0xFE /* Command Write PLID */ 130 131 #define MXL_HYDRA_REG_SIZE_IN_BYTES 4 /* Hydra register size in bytes */ 132 #define MXL_HYDRA_I2C_HDR_SIZE (2 * sizeof(u8)) /* PLID + LEN(0xFF) */ 133 #define MXL_HYDRA_CMD_HEADER_SIZE (MXL_HYDRA_REG_SIZE_IN_BYTES + MXL_HYDRA_I2C_HDR_SIZE) 134 135 #define MXL_HYDRA_SKU_ID_581 0 136 #define MXL_HYDRA_SKU_ID_584 1 137 #define MXL_HYDRA_SKU_ID_585 2 138 #define MXL_HYDRA_SKU_ID_544 3 139 #define MXL_HYDRA_SKU_ID_561 4 140 #define MXL_HYDRA_SKU_ID_582 5 141 #define MXL_HYDRA_SKU_ID_568 6 142 143 /* macro for register write data buffer size 144 * (PLID + LEN (0xFF) + RegAddr + RegData) 145 */ 146 #define MXL_HYDRA_REG_WRITE_LEN (MXL_HYDRA_I2C_HDR_SIZE + (2 * MXL_HYDRA_REG_SIZE_IN_BYTES)) 147 148 /* macro to extract a single byte from 4-byte(32-bit) data */ 149 #define GET_BYTE(x, n) (((x) >> (8*(n))) & 0xFF) 150 151 #define MAX_CMD_DATA 512 152 153 #define MXL_GET_REG_MASK_32(lsb_loc, num_of_bits) ((0xFFFFFFFF >> (32 - (num_of_bits))) << (lsb_loc)) 154 155 #define FW_DL_SIGN (0xDEADBEEF) 156 157 #define MBIN_FORMAT_VERSION '1' 158 #define MBIN_FILE_HEADER_ID 'M' 159 #define MBIN_SEGMENT_HEADER_ID 'S' 160 #define MBIN_MAX_FILE_LENGTH (1<<23) 161 162 struct MBIN_FILE_HEADER_T { 163 u8 id; 164 u8 fmt_version; 165 u8 header_len; 166 u8 num_segments; 167 u8 entry_address[4]; 168 u8 image_size24[3]; 169 u8 image_checksum; 170 u8 reserved[4]; 171 }; 172 173 struct MBIN_FILE_T { 174 struct MBIN_FILE_HEADER_T header; 175 u8 data[1]; 176 }; 177 178 struct MBIN_SEGMENT_HEADER_T { 179 u8 id; 180 u8 len24[3]; 181 u8 address[4]; 182 }; 183 184 struct MBIN_SEGMENT_T { 185 struct MBIN_SEGMENT_HEADER_T header; 186 u8 data[1]; 187 }; 188 189 enum MXL_CMD_TYPE_E { MXL_CMD_WRITE = 0, MXL_CMD_READ }; 190 191 #define BUILD_HYDRA_CMD(cmd_id, req_type, size, data_ptr, cmd_buff) \ 192 do { \ 193 cmd_buff[0] = ((req_type == MXL_CMD_WRITE) ? MXL_HYDRA_PLID_CMD_WRITE : MXL_HYDRA_PLID_CMD_READ); \ 194 cmd_buff[1] = (size > 251) ? 0xff : (u8) (size + 4); \ 195 cmd_buff[2] = size; \ 196 cmd_buff[3] = cmd_id; \ 197 cmd_buff[4] = 0x00; \ 198 cmd_buff[5] = 0x00; \ 199 convert_endian(MXL_ENABLE_BIG_ENDIAN, size, (u8 *)data_ptr); \ 200 memcpy((void *)&cmd_buff[6], data_ptr, size); \ 201 } while (0) 202 203 struct MXL_REG_FIELD_T { 204 u32 reg_addr; 205 u8 lsb_pos; 206 u8 num_of_bits; 207 }; 208 209 struct MXL_DEV_CMD_DATA_T { 210 u32 data_size; 211 u8 data[MAX_CMD_DATA]; 212 }; 213 214 enum MXL_HYDRA_SKU_TYPE_E { 215 MXL_HYDRA_SKU_TYPE_MIN = 0x00, 216 MXL_HYDRA_SKU_TYPE_581 = 0x00, 217 MXL_HYDRA_SKU_TYPE_584 = 0x01, 218 MXL_HYDRA_SKU_TYPE_585 = 0x02, 219 MXL_HYDRA_SKU_TYPE_544 = 0x03, 220 MXL_HYDRA_SKU_TYPE_561 = 0x04, 221 MXL_HYDRA_SKU_TYPE_5XX = 0x05, 222 MXL_HYDRA_SKU_TYPE_5YY = 0x06, 223 MXL_HYDRA_SKU_TYPE_511 = 0x07, 224 MXL_HYDRA_SKU_TYPE_561_DE = 0x08, 225 MXL_HYDRA_SKU_TYPE_582 = 0x09, 226 MXL_HYDRA_SKU_TYPE_541 = 0x0A, 227 MXL_HYDRA_SKU_TYPE_568 = 0x0B, 228 MXL_HYDRA_SKU_TYPE_542 = 0x0C, 229 MXL_HYDRA_SKU_TYPE_MAX = 0x0D, 230 }; 231 232 struct MXL_HYDRA_SKU_COMMAND_T { 233 enum MXL_HYDRA_SKU_TYPE_E sku_type; 234 }; 235 236 enum MXL_HYDRA_DEMOD_ID_E { 237 MXL_HYDRA_DEMOD_ID_0 = 0, 238 MXL_HYDRA_DEMOD_ID_1, 239 MXL_HYDRA_DEMOD_ID_2, 240 MXL_HYDRA_DEMOD_ID_3, 241 MXL_HYDRA_DEMOD_ID_4, 242 MXL_HYDRA_DEMOD_ID_5, 243 MXL_HYDRA_DEMOD_ID_6, 244 MXL_HYDRA_DEMOD_ID_7, 245 MXL_HYDRA_DEMOD_MAX 246 }; 247 248 #define MXL_DEMOD_SCRAMBLE_SEQ_LEN 12 249 250 #define MAX_STEP_SIZE_24_XTAL_102_05_KHZ 195 251 #define MAX_STEP_SIZE_24_XTAL_204_10_KHZ 215 252 #define MAX_STEP_SIZE_24_XTAL_306_15_KHZ 203 253 #define MAX_STEP_SIZE_24_XTAL_408_20_KHZ 177 254 255 #define MAX_STEP_SIZE_27_XTAL_102_05_KHZ 195 256 #define MAX_STEP_SIZE_27_XTAL_204_10_KHZ 215 257 #define MAX_STEP_SIZE_27_XTAL_306_15_KHZ 203 258 #define MAX_STEP_SIZE_27_XTAL_408_20_KHZ 177 259 260 #define MXL_HYDRA_SPECTRUM_MIN_FREQ_KHZ 300000 261 #define MXL_HYDRA_SPECTRUM_MAX_FREQ_KHZ 2350000 262 263 enum MXL_DEMOD_CHAN_PARAMS_OFFSET_E { 264 DMD_STANDARD_ADDR = 0, 265 DMD_SPECTRUM_INVERSION_ADDR, 266 DMD_SPECTRUM_ROLL_OFF_ADDR, 267 DMD_SYMBOL_RATE_ADDR, 268 DMD_MODULATION_SCHEME_ADDR, 269 DMD_FEC_CODE_RATE_ADDR, 270 DMD_SNR_ADDR, 271 DMD_FREQ_OFFSET_ADDR, 272 DMD_CTL_FREQ_OFFSET_ADDR, 273 DMD_STR_FREQ_OFFSET_ADDR, 274 DMD_FTL_FREQ_OFFSET_ADDR, 275 DMD_STR_NBC_SYNC_LOCK_ADDR, 276 DMD_CYCLE_SLIP_COUNT_ADDR, 277 DMD_DISPLAY_IQ_ADDR, 278 DMD_DVBS2_CRC_ERRORS_ADDR, 279 DMD_DVBS2_PER_COUNT_ADDR, 280 DMD_DVBS2_PER_WINDOW_ADDR, 281 DMD_DVBS_CORR_RS_ERRORS_ADDR, 282 DMD_DVBS_UNCORR_RS_ERRORS_ADDR, 283 DMD_DVBS_BER_COUNT_ADDR, 284 DMD_DVBS_BER_WINDOW_ADDR, 285 DMD_TUNER_ID_ADDR, 286 DMD_DVBS2_PILOT_ON_OFF_ADDR, 287 DMD_FREQ_SEARCH_RANGE_IN_KHZ_ADDR, 288 289 MXL_DEMOD_CHAN_PARAMS_BUFF_SIZE, 290 }; 291 292 enum MXL_HYDRA_TUNER_ID_E { 293 MXL_HYDRA_TUNER_ID_0 = 0, 294 MXL_HYDRA_TUNER_ID_1, 295 MXL_HYDRA_TUNER_ID_2, 296 MXL_HYDRA_TUNER_ID_3, 297 MXL_HYDRA_TUNER_MAX 298 }; 299 300 enum MXL_HYDRA_BCAST_STD_E { 301 MXL_HYDRA_DSS = 0, 302 MXL_HYDRA_DVBS, 303 MXL_HYDRA_DVBS2, 304 }; 305 306 enum MXL_HYDRA_FEC_E { 307 MXL_HYDRA_FEC_AUTO = 0, 308 MXL_HYDRA_FEC_1_2, 309 MXL_HYDRA_FEC_3_5, 310 MXL_HYDRA_FEC_2_3, 311 MXL_HYDRA_FEC_3_4, 312 MXL_HYDRA_FEC_4_5, 313 MXL_HYDRA_FEC_5_6, 314 MXL_HYDRA_FEC_6_7, 315 MXL_HYDRA_FEC_7_8, 316 MXL_HYDRA_FEC_8_9, 317 MXL_HYDRA_FEC_9_10, 318 }; 319 320 enum MXL_HYDRA_MODULATION_E { 321 MXL_HYDRA_MOD_AUTO = 0, 322 MXL_HYDRA_MOD_QPSK, 323 MXL_HYDRA_MOD_8PSK 324 }; 325 326 enum MXL_HYDRA_SPECTRUM_E { 327 MXL_HYDRA_SPECTRUM_AUTO = 0, 328 MXL_HYDRA_SPECTRUM_INVERTED, 329 MXL_HYDRA_SPECTRUM_NON_INVERTED, 330 }; 331 332 enum MXL_HYDRA_ROLLOFF_E { 333 MXL_HYDRA_ROLLOFF_AUTO = 0, 334 MXL_HYDRA_ROLLOFF_0_20, 335 MXL_HYDRA_ROLLOFF_0_25, 336 MXL_HYDRA_ROLLOFF_0_35 337 }; 338 339 enum MXL_HYDRA_PILOTS_E { 340 MXL_HYDRA_PILOTS_OFF = 0, 341 MXL_HYDRA_PILOTS_ON, 342 MXL_HYDRA_PILOTS_AUTO 343 }; 344 345 enum MXL_HYDRA_CONSTELLATION_SRC_E { 346 MXL_HYDRA_FORMATTER = 0, 347 MXL_HYDRA_LEGACY_FEC, 348 MXL_HYDRA_FREQ_RECOVERY, 349 MXL_HYDRA_NBC, 350 MXL_HYDRA_CTL, 351 MXL_HYDRA_EQ, 352 }; 353 354 struct MXL_HYDRA_DEMOD_LOCK_T { 355 int agc_lock; /* AGC lock info */ 356 int fec_lock; /* Demod FEC block lock info */ 357 }; 358 359 struct MXL_HYDRA_DEMOD_STATUS_DVBS_T { 360 u32 rs_errors; /* RS decoder err counter */ 361 u32 ber_window; /* Ber Windows */ 362 u32 ber_count; /* BER count */ 363 u32 ber_window_iter1; /* Ber Windows - post viterbi */ 364 u32 ber_count_iter1; /* BER count - post viterbi */ 365 }; 366 367 struct MXL_HYDRA_DEMOD_STATUS_DSS_T { 368 u32 rs_errors; /* RS decoder err counter */ 369 u32 ber_window; /* Ber Windows */ 370 u32 ber_count; /* BER count */ 371 }; 372 373 struct MXL_HYDRA_DEMOD_STATUS_DVBS2_T { 374 u32 crc_errors; /* CRC error counter */ 375 u32 packet_error_count; /* Number of packet errors */ 376 u32 total_packets; /* Total packets */ 377 }; 378 379 struct MXL_HYDRA_DEMOD_STATUS_T { 380 enum MXL_HYDRA_BCAST_STD_E standard_mask; /* Standard DVB-S, DVB-S2 or DSS */ 381 382 union { 383 struct MXL_HYDRA_DEMOD_STATUS_DVBS_T demod_status_dvbs; /* DVB-S demod status */ 384 struct MXL_HYDRA_DEMOD_STATUS_DVBS2_T demod_status_dvbs2; /* DVB-S2 demod status */ 385 struct MXL_HYDRA_DEMOD_STATUS_DSS_T demod_status_dss; /* DSS demod status */ 386 } u; 387 }; 388 389 struct MXL_HYDRA_DEMOD_SIG_OFFSET_INFO_T { 390 s32 carrier_offset_in_hz; /* CRL offset info */ 391 s32 symbol_offset_in_symbol; /* SRL offset info */ 392 }; 393 394 struct MXL_HYDRA_DEMOD_SCRAMBLE_INFO_T { 395 u8 scramble_sequence[MXL_DEMOD_SCRAMBLE_SEQ_LEN]; /* scramble sequence */ 396 u32 scramble_code; /* scramble gold code */ 397 }; 398 399 enum MXL_HYDRA_SPECTRUM_STEP_SIZE_E { 400 MXL_HYDRA_STEP_SIZE_24_XTAL_102_05KHZ, /* 102.05 KHz for 24 MHz XTAL */ 401 MXL_HYDRA_STEP_SIZE_24_XTAL_204_10KHZ, /* 204.10 KHz for 24 MHz XTAL */ 402 MXL_HYDRA_STEP_SIZE_24_XTAL_306_15KHZ, /* 306.15 KHz for 24 MHz XTAL */ 403 MXL_HYDRA_STEP_SIZE_24_XTAL_408_20KHZ, /* 408.20 KHz for 24 MHz XTAL */ 404 405 MXL_HYDRA_STEP_SIZE_27_XTAL_102_05KHZ, /* 102.05 KHz for 27 MHz XTAL */ 406 MXL_HYDRA_STEP_SIZE_27_XTAL_204_35KHZ, /* 204.35 KHz for 27 MHz XTAL */ 407 MXL_HYDRA_STEP_SIZE_27_XTAL_306_52KHZ, /* 306.52 KHz for 27 MHz XTAL */ 408 MXL_HYDRA_STEP_SIZE_27_XTAL_408_69KHZ, /* 408.69 KHz for 27 MHz XTAL */ 409 }; 410 411 enum MXL_HYDRA_SPECTRUM_RESOLUTION_E { 412 MXL_HYDRA_SPECTRUM_RESOLUTION_00_1_DB, /* 0.1 dB */ 413 MXL_HYDRA_SPECTRUM_RESOLUTION_01_0_DB, /* 1.0 dB */ 414 MXL_HYDRA_SPECTRUM_RESOLUTION_05_0_DB, /* 5.0 dB */ 415 MXL_HYDRA_SPECTRUM_RESOLUTION_10_0_DB, /* 10 dB */ 416 }; 417 418 enum MXL_HYDRA_SPECTRUM_ERROR_CODE_E { 419 MXL_SPECTRUM_NO_ERROR, 420 MXL_SPECTRUM_INVALID_PARAMETER, 421 MXL_SPECTRUM_INVALID_STEP_SIZE, 422 MXL_SPECTRUM_BW_CANNOT_BE_COVERED, 423 MXL_SPECTRUM_DEMOD_BUSY, 424 MXL_SPECTRUM_TUNER_NOT_ENABLED, 425 }; 426 427 struct MXL_HYDRA_SPECTRUM_REQ_T { 428 u32 tuner_index; /* TUNER Ctrl: one of MXL58x_TUNER_ID_E */ 429 u32 demod_index; /* DEMOD Ctrl: one of MXL58x_DEMOD_ID_E */ 430 enum MXL_HYDRA_SPECTRUM_STEP_SIZE_E step_size_in_khz; 431 u32 starting_freq_ink_hz; 432 u32 total_steps; 433 enum MXL_HYDRA_SPECTRUM_RESOLUTION_E spectrum_division; 434 }; 435 436 enum MXL_HYDRA_SEARCH_FREQ_OFFSET_TYPE_E { 437 MXL_HYDRA_SEARCH_MAX_OFFSET = 0, /* DMD searches for max freq offset (i.e. 5MHz) */ 438 MXL_HYDRA_SEARCH_BW_PLUS_ROLLOFF, /* DMD searches for BW + ROLLOFF/2 */ 439 }; 440 441 struct MXL58X_CFG_FREQ_OFF_SEARCH_RANGE_T { 442 u32 demod_index; 443 enum MXL_HYDRA_SEARCH_FREQ_OFFSET_TYPE_E search_type; 444 }; 445 446 /* there are two slices 447 * slice0 - TS0, TS1, TS2 & TS3 448 * slice1 - TS4, TS5, TS6 & TS7 449 */ 450 #define MXL_HYDRA_TS_SLICE_MAX 2 451 452 #define MAX_FIXED_PID_NUM 32 453 454 #define MXL_HYDRA_NCO_CLK 418 /* 418 MHz */ 455 456 #define MXL_HYDRA_MAX_TS_CLOCK 139 /* 139 MHz */ 457 458 #define MXL_HYDRA_TS_FIXED_PID_FILT_SIZE 32 459 460 #define MXL_HYDRA_SHARED_PID_FILT_SIZE_DEFAULT 33 /* Shared PID filter size in 1-1 mux mode */ 461 #define MXL_HYDRA_SHARED_PID_FILT_SIZE_2_TO_1 66 /* Shared PID filter size in 2-1 mux mode */ 462 #define MXL_HYDRA_SHARED_PID_FILT_SIZE_4_TO_1 132 /* Shared PID filter size in 4-1 mux mode */ 463 464 enum MXL_HYDRA_PID_BANK_TYPE_E { 465 MXL_HYDRA_SOFTWARE_PID_BANK = 0, 466 MXL_HYDRA_HARDWARE_PID_BANK, 467 }; 468 469 enum MXL_HYDRA_TS_MUX_MODE_E { 470 MXL_HYDRA_TS_MUX_PID_REMAP = 0, 471 MXL_HYDRA_TS_MUX_PREFIX_EXTRA_HEADER = 1, 472 }; 473 474 enum MXL_HYDRA_TS_MUX_TYPE_E { 475 MXL_HYDRA_TS_MUX_DISABLE = 0, /* No Mux ( 1 TSIF to 1 TSIF) */ 476 MXL_HYDRA_TS_MUX_2_TO_1, /* Mux 2 TSIF to 1 TSIF */ 477 MXL_HYDRA_TS_MUX_4_TO_1, /* Mux 4 TSIF to 1 TSIF */ 478 }; 479 480 enum MXL_HYDRA_TS_GROUP_E { 481 MXL_HYDRA_TS_GROUP_0_3 = 0, /* TS group 0 to 3 (TS0, TS1, TS2 & TS3) */ 482 MXL_HYDRA_TS_GROUP_4_7, /* TS group 0 to 3 (TS4, TS5, TS6 & TS7) */ 483 }; 484 485 enum MXL_HYDRA_TS_PID_FLT_CTRL_E { 486 MXL_HYDRA_TS_PIDS_ALLOW_ALL = 0, /* Allow all pids */ 487 MXL_HYDRA_TS_PIDS_DROP_ALL, /* Drop all pids */ 488 MXL_HYDRA_TS_INVALIDATE_PID_FILTER, /* Delete current PD filter in the device */ 489 }; 490 491 enum MXL_HYDRA_TS_PID_TYPE_E { 492 MXL_HYDRA_TS_PID_FIXED = 0, 493 MXL_HYDRA_TS_PID_REGULAR, 494 }; 495 496 struct MXL_HYDRA_TS_PID_T { 497 u16 original_pid; /* pid from TS */ 498 u16 remapped_pid; /* remapped pid */ 499 enum MXL_BOOL_E enable; /* enable or disable pid */ 500 enum MXL_BOOL_E allow_or_drop; /* allow or drop pid */ 501 enum MXL_BOOL_E enable_pid_remap; /* enable or disable pid remap */ 502 u8 bond_id; /* Bond ID in A0 always 0 - Only for 568 Sku */ 503 u8 dest_id; /* Output port ID for the PID - Only for 568 Sku */ 504 }; 505 506 struct MXL_HYDRA_TS_MUX_PREFIX_HEADER_T { 507 enum MXL_BOOL_E enable; 508 u8 num_byte; 509 u8 header[12]; 510 }; 511 512 enum MXL_HYDRA_PID_FILTER_BANK_E { 513 MXL_HYDRA_PID_BANK_A = 0, 514 MXL_HYDRA_PID_BANK_B, 515 }; 516 517 enum MXL_HYDRA_MPEG_DATA_FMT_E { 518 MXL_HYDRA_MPEG_SERIAL_MSB_1ST = 0, 519 MXL_HYDRA_MPEG_SERIAL_LSB_1ST, 520 521 MXL_HYDRA_MPEG_SYNC_WIDTH_BIT = 0, 522 MXL_HYDRA_MPEG_SYNC_WIDTH_BYTE 523 }; 524 525 enum MXL_HYDRA_MPEG_MODE_E { 526 MXL_HYDRA_MPEG_MODE_SERIAL_4_WIRE = 0, /* MPEG 4 Wire serial mode */ 527 MXL_HYDRA_MPEG_MODE_SERIAL_3_WIRE, /* MPEG 3 Wire serial mode */ 528 MXL_HYDRA_MPEG_MODE_SERIAL_2_WIRE, /* MPEG 2 Wire serial mode */ 529 MXL_HYDRA_MPEG_MODE_PARALLEL /* MPEG parallel mode - valid only for MxL581 */ 530 }; 531 532 enum MXL_HYDRA_MPEG_CLK_TYPE_E { 533 MXL_HYDRA_MPEG_CLK_CONTINUOUS = 0, /* Continuous MPEG clock */ 534 MXL_HYDRA_MPEG_CLK_GAPPED, /* Gapped (gated) MPEG clock */ 535 }; 536 537 enum MXL_HYDRA_MPEG_CLK_FMT_E { 538 MXL_HYDRA_MPEG_ACTIVE_LOW = 0, 539 MXL_HYDRA_MPEG_ACTIVE_HIGH, 540 541 MXL_HYDRA_MPEG_CLK_NEGATIVE = 0, 542 MXL_HYDRA_MPEG_CLK_POSITIVE, 543 544 MXL_HYDRA_MPEG_CLK_IN_PHASE = 0, 545 MXL_HYDRA_MPEG_CLK_INVERTED, 546 }; 547 548 enum MXL_HYDRA_MPEG_CLK_PHASE_E { 549 MXL_HYDRA_MPEG_CLK_PHASE_SHIFT_0_DEG = 0, 550 MXL_HYDRA_MPEG_CLK_PHASE_SHIFT_90_DEG, 551 MXL_HYDRA_MPEG_CLK_PHASE_SHIFT_180_DEG, 552 MXL_HYDRA_MPEG_CLK_PHASE_SHIFT_270_DEG 553 }; 554 555 enum MXL_HYDRA_MPEG_ERR_INDICATION_E { 556 MXL_HYDRA_MPEG_ERR_REPLACE_SYNC = 0, 557 MXL_HYDRA_MPEG_ERR_REPLACE_VALID, 558 MXL_HYDRA_MPEG_ERR_INDICATION_DISABLED 559 }; 560 561 struct MXL_HYDRA_MPEGOUT_PARAM_T { 562 int enable; /* Enable or Disable MPEG OUT */ 563 enum MXL_HYDRA_MPEG_CLK_TYPE_E mpeg_clk_type; /* Continuous or gapped */ 564 enum MXL_HYDRA_MPEG_CLK_FMT_E mpeg_clk_pol; /* MPEG Clk polarity */ 565 u8 max_mpeg_clk_rate; /* Max MPEG Clk rate (0 - 104 MHz, 139 MHz) */ 566 enum MXL_HYDRA_MPEG_CLK_PHASE_E mpeg_clk_phase; /* MPEG Clk phase */ 567 enum MXL_HYDRA_MPEG_DATA_FMT_E lsb_or_msb_first; /* LSB first or MSB first in TS transmission */ 568 enum MXL_HYDRA_MPEG_DATA_FMT_E mpeg_sync_pulse_width; /* MPEG SYNC pulse width (1-bit or 1-byte) */ 569 enum MXL_HYDRA_MPEG_CLK_FMT_E mpeg_valid_pol; /* MPEG VALID polarity */ 570 enum MXL_HYDRA_MPEG_CLK_FMT_E mpeg_sync_pol; /* MPEG SYNC polarity */ 571 enum MXL_HYDRA_MPEG_MODE_E mpeg_mode; /* config 4/3/2-wire serial or parallel TS out */ 572 enum MXL_HYDRA_MPEG_ERR_INDICATION_E mpeg_error_indication; /* Enable or Disable MPEG error indication */ 573 }; 574 575 enum MXL_HYDRA_EXT_TS_IN_ID_E { 576 MXL_HYDRA_EXT_TS_IN_0 = 0, 577 MXL_HYDRA_EXT_TS_IN_1, 578 MXL_HYDRA_EXT_TS_IN_2, 579 MXL_HYDRA_EXT_TS_IN_3, 580 MXL_HYDRA_EXT_TS_IN_MAX 581 }; 582 583 enum MXL_HYDRA_TS_OUT_ID_E { 584 MXL_HYDRA_TS_OUT_0 = 0, 585 MXL_HYDRA_TS_OUT_1, 586 MXL_HYDRA_TS_OUT_2, 587 MXL_HYDRA_TS_OUT_3, 588 MXL_HYDRA_TS_OUT_4, 589 MXL_HYDRA_TS_OUT_5, 590 MXL_HYDRA_TS_OUT_6, 591 MXL_HYDRA_TS_OUT_7, 592 MXL_HYDRA_TS_OUT_MAX 593 }; 594 595 enum MXL_HYDRA_TS_DRIVE_STRENGTH_E { 596 MXL_HYDRA_TS_DRIVE_STRENGTH_1X = 0, 597 MXL_HYDRA_TS_DRIVE_STRENGTH_2X, 598 MXL_HYDRA_TS_DRIVE_STRENGTH_3X, 599 MXL_HYDRA_TS_DRIVE_STRENGTH_4X, 600 MXL_HYDRA_TS_DRIVE_STRENGTH_5X, 601 MXL_HYDRA_TS_DRIVE_STRENGTH_6X, 602 MXL_HYDRA_TS_DRIVE_STRENGTH_7X, 603 MXL_HYDRA_TS_DRIVE_STRENGTH_8X 604 }; 605 606 enum MXL_HYDRA_DEVICE_E { 607 MXL_HYDRA_DEVICE_581 = 0, 608 MXL_HYDRA_DEVICE_584, 609 MXL_HYDRA_DEVICE_585, 610 MXL_HYDRA_DEVICE_544, 611 MXL_HYDRA_DEVICE_561, 612 MXL_HYDRA_DEVICE_TEST, 613 MXL_HYDRA_DEVICE_582, 614 MXL_HYDRA_DEVICE_541, 615 MXL_HYDRA_DEVICE_568, 616 MXL_HYDRA_DEVICE_542, 617 MXL_HYDRA_DEVICE_541S, 618 MXL_HYDRA_DEVICE_561S, 619 MXL_HYDRA_DEVICE_581S, 620 MXL_HYDRA_DEVICE_MAX 621 }; 622 623 /* Demod IQ data */ 624 struct MXL_HYDRA_DEMOD_IQ_SRC_T { 625 u32 demod_id; 626 u32 source_of_iq; /* == 0, it means I/Q comes from Formatter 627 * == 1, Legacy FEC 628 * == 2, Frequency Recovery 629 * == 3, NBC 630 * == 4, CTL 631 * == 5, EQ 632 * == 6, FPGA 633 */ 634 }; 635 636 struct MXL_HYDRA_DEMOD_ABORT_TUNE_T { 637 u32 demod_id; 638 }; 639 640 struct MXL_HYDRA_TUNER_CMD { 641 u8 tuner_id; 642 u8 enable; 643 }; 644 645 /* Demod Para for Channel Tune */ 646 struct MXL_HYDRA_DEMOD_PARAM_T { 647 u32 tuner_index; 648 u32 demod_index; 649 u32 frequency_in_hz; /* Frequency */ 650 u32 standard; /* one of MXL_HYDRA_BCAST_STD_E */ 651 u32 spectrum_inversion; /* Input : Spectrum inversion. */ 652 u32 roll_off; /* rollOff (alpha) factor */ 653 u32 symbol_rate_in_hz; /* Symbol rate */ 654 u32 pilots; /* TRUE = pilots enabled */ 655 u32 modulation_scheme; /* Input : Modulation Scheme is one of MXL_HYDRA_MODULATION_E */ 656 u32 fec_code_rate; /* Input : Forward error correction rate. Is one of MXL_HYDRA_FEC_E */ 657 u32 max_carrier_offset_in_mhz; /* Maximum carrier freq offset in MHz. Same as freqSearchRangeKHz, but in unit of MHz. */ 658 }; 659 660 struct MXL_HYDRA_DEMOD_SCRAMBLE_CODE_T { 661 u32 demod_index; 662 u8 scramble_sequence[12]; /* scramble sequence */ 663 u32 scramble_code; /* scramble gold code */ 664 }; 665 666 struct MXL_INTR_CFG_T { 667 u32 intr_type; 668 u32 intr_duration_in_nano_secs; 669 u32 intr_mask; 670 }; 671 672 struct MXL_HYDRA_POWER_MODE_CMD { 673 u8 power_mode; /* enumeration values are defined in MXL_HYDRA_PWR_MODE_E (device API.h) */ 674 }; 675 676 struct MXL_HYDRA_RF_WAKEUP_PARAM_T { 677 u32 time_interval_in_seconds; /* in seconds */ 678 u32 tuner_index; 679 s32 rssi_threshold; 680 }; 681 682 struct MXL_HYDRA_RF_WAKEUP_CFG_T { 683 u32 tuner_count; 684 struct MXL_HYDRA_RF_WAKEUP_PARAM_T params; 685 }; 686 687 enum MXL_HYDRA_AUX_CTRL_MODE_E { 688 MXL_HYDRA_AUX_CTRL_MODE_FSK = 0, /* Select FSK controller */ 689 MXL_HYDRA_AUX_CTRL_MODE_DISEQC, /* Select DiSEqC controller */ 690 }; 691 692 enum MXL_HYDRA_DISEQC_OPMODE_E { 693 MXL_HYDRA_DISEQC_ENVELOPE_MODE = 0, 694 MXL_HYDRA_DISEQC_TONE_MODE, 695 }; 696 697 enum MXL_HYDRA_DISEQC_VER_E { 698 MXL_HYDRA_DISEQC_1_X = 0, /* Config DiSEqC 1.x mode */ 699 MXL_HYDRA_DISEQC_2_X, /* Config DiSEqC 2.x mode */ 700 MXL_HYDRA_DISEQC_DISABLE /* Disable DiSEqC */ 701 }; 702 703 enum MXL_HYDRA_DISEQC_CARRIER_FREQ_E { 704 MXL_HYDRA_DISEQC_CARRIER_FREQ_22KHZ = 0, /* DiSEqC signal frequency of 22 KHz */ 705 MXL_HYDRA_DISEQC_CARRIER_FREQ_33KHZ, /* DiSEqC signal frequency of 33 KHz */ 706 MXL_HYDRA_DISEQC_CARRIER_FREQ_44KHZ /* DiSEqC signal frequency of 44 KHz */ 707 }; 708 709 enum MXL_HYDRA_DISEQC_ID_E { 710 MXL_HYDRA_DISEQC_ID_0 = 0, 711 MXL_HYDRA_DISEQC_ID_1, 712 MXL_HYDRA_DISEQC_ID_2, 713 MXL_HYDRA_DISEQC_ID_3 714 }; 715 716 enum MXL_HYDRA_FSK_OP_MODE_E { 717 MXL_HYDRA_FSK_CFG_TYPE_39KPBS = 0, /* 39.0kbps */ 718 MXL_HYDRA_FSK_CFG_TYPE_39_017KPBS, /* 39.017kbps */ 719 MXL_HYDRA_FSK_CFG_TYPE_115_2KPBS /* 115.2kbps */ 720 }; 721 722 struct MXL58X_DSQ_OP_MODE_T { 723 u32 diseqc_id; /* DSQ 0, 1, 2 or 3 */ 724 u32 op_mode; /* Envelope mode (0) or internal tone mode (1) */ 725 u32 version; /* 0: 1.0, 1: 1.1, 2: Disable */ 726 u32 center_freq; /* 0: 22KHz, 1: 33KHz and 2: 44 KHz */ 727 }; 728 729 struct MXL_HYDRA_DISEQC_CFG_CONT_TONE_T { 730 u32 diseqc_id; 731 u32 cont_tone_flag; /* 1: Enable , 0: Disable */ 732 }; 733