1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Abilis Systems Single DVB-T Receiver 4*4882a593Smuzhiyun * Copyright (C) 2008 Pierrick Hascoet <pierrick.hascoet@abilis.com> 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun #ifndef _AS10X_CMD_H_ 7*4882a593Smuzhiyun #define _AS10X_CMD_H_ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #include <linux/kernel.h> 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include "as102_fe_types.h" 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun /*********************************/ 14*4882a593Smuzhiyun /* MACRO DEFINITIONS */ 15*4882a593Smuzhiyun /*********************************/ 16*4882a593Smuzhiyun #define AS10X_CMD_ERROR -1 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #define SERVICE_PROG_ID 0x0002 19*4882a593Smuzhiyun #define SERVICE_PROG_VERSION 0x0001 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun #define HIER_NONE 0x00 22*4882a593Smuzhiyun #define HIER_LOW_PRIORITY 0x01 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun #define HEADER_SIZE (sizeof(struct as10x_cmd_header_t)) 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun /* context request types */ 27*4882a593Smuzhiyun #define GET_CONTEXT_DATA 1 28*4882a593Smuzhiyun #define SET_CONTEXT_DATA 2 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun /* ODSP suspend modes */ 31*4882a593Smuzhiyun #define CFG_MODE_ODSP_RESUME 0 32*4882a593Smuzhiyun #define CFG_MODE_ODSP_SUSPEND 1 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun /* Dump memory size */ 35*4882a593Smuzhiyun #define DUMP_BLOCK_SIZE_MAX 0x20 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun /*********************************/ 38*4882a593Smuzhiyun /* TYPE DEFINITION */ 39*4882a593Smuzhiyun /*********************************/ 40*4882a593Smuzhiyun enum control_proc { 41*4882a593Smuzhiyun CONTROL_PROC_TURNON = 0x0001, 42*4882a593Smuzhiyun CONTROL_PROC_TURNON_RSP = 0x0100, 43*4882a593Smuzhiyun CONTROL_PROC_SET_REGISTER = 0x0002, 44*4882a593Smuzhiyun CONTROL_PROC_SET_REGISTER_RSP = 0x0200, 45*4882a593Smuzhiyun CONTROL_PROC_GET_REGISTER = 0x0003, 46*4882a593Smuzhiyun CONTROL_PROC_GET_REGISTER_RSP = 0x0300, 47*4882a593Smuzhiyun CONTROL_PROC_SETTUNE = 0x000A, 48*4882a593Smuzhiyun CONTROL_PROC_SETTUNE_RSP = 0x0A00, 49*4882a593Smuzhiyun CONTROL_PROC_GETTUNESTAT = 0x000B, 50*4882a593Smuzhiyun CONTROL_PROC_GETTUNESTAT_RSP = 0x0B00, 51*4882a593Smuzhiyun CONTROL_PROC_GETTPS = 0x000D, 52*4882a593Smuzhiyun CONTROL_PROC_GETTPS_RSP = 0x0D00, 53*4882a593Smuzhiyun CONTROL_PROC_SETFILTER = 0x000E, 54*4882a593Smuzhiyun CONTROL_PROC_SETFILTER_RSP = 0x0E00, 55*4882a593Smuzhiyun CONTROL_PROC_REMOVEFILTER = 0x000F, 56*4882a593Smuzhiyun CONTROL_PROC_REMOVEFILTER_RSP = 0x0F00, 57*4882a593Smuzhiyun CONTROL_PROC_GET_IMPULSE_RESP = 0x0012, 58*4882a593Smuzhiyun CONTROL_PROC_GET_IMPULSE_RESP_RSP = 0x1200, 59*4882a593Smuzhiyun CONTROL_PROC_START_STREAMING = 0x0013, 60*4882a593Smuzhiyun CONTROL_PROC_START_STREAMING_RSP = 0x1300, 61*4882a593Smuzhiyun CONTROL_PROC_STOP_STREAMING = 0x0014, 62*4882a593Smuzhiyun CONTROL_PROC_STOP_STREAMING_RSP = 0x1400, 63*4882a593Smuzhiyun CONTROL_PROC_GET_DEMOD_STATS = 0x0015, 64*4882a593Smuzhiyun CONTROL_PROC_GET_DEMOD_STATS_RSP = 0x1500, 65*4882a593Smuzhiyun CONTROL_PROC_ELNA_CHANGE_MODE = 0x0016, 66*4882a593Smuzhiyun CONTROL_PROC_ELNA_CHANGE_MODE_RSP = 0x1600, 67*4882a593Smuzhiyun CONTROL_PROC_ODSP_CHANGE_MODE = 0x0017, 68*4882a593Smuzhiyun CONTROL_PROC_ODSP_CHANGE_MODE_RSP = 0x1700, 69*4882a593Smuzhiyun CONTROL_PROC_AGC_CHANGE_MODE = 0x0018, 70*4882a593Smuzhiyun CONTROL_PROC_AGC_CHANGE_MODE_RSP = 0x1800, 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun CONTROL_PROC_CONTEXT = 0x00FC, 73*4882a593Smuzhiyun CONTROL_PROC_CONTEXT_RSP = 0xFC00, 74*4882a593Smuzhiyun CONTROL_PROC_DUMP_MEMORY = 0x00FD, 75*4882a593Smuzhiyun CONTROL_PROC_DUMP_MEMORY_RSP = 0xFD00, 76*4882a593Smuzhiyun CONTROL_PROC_DUMPLOG_MEMORY = 0x00FE, 77*4882a593Smuzhiyun CONTROL_PROC_DUMPLOG_MEMORY_RSP = 0xFE00, 78*4882a593Smuzhiyun CONTROL_PROC_TURNOFF = 0x00FF, 79*4882a593Smuzhiyun CONTROL_PROC_TURNOFF_RSP = 0xFF00 80*4882a593Smuzhiyun }; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun union as10x_turn_on { 83*4882a593Smuzhiyun /* request */ 84*4882a593Smuzhiyun struct { 85*4882a593Smuzhiyun /* request identifier */ 86*4882a593Smuzhiyun __le16 proc_id; 87*4882a593Smuzhiyun } __packed req; 88*4882a593Smuzhiyun /* response */ 89*4882a593Smuzhiyun struct { 90*4882a593Smuzhiyun /* response identifier */ 91*4882a593Smuzhiyun __le16 proc_id; 92*4882a593Smuzhiyun /* error */ 93*4882a593Smuzhiyun uint8_t error; 94*4882a593Smuzhiyun } __packed rsp; 95*4882a593Smuzhiyun } __packed; 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun union as10x_turn_off { 98*4882a593Smuzhiyun /* request */ 99*4882a593Smuzhiyun struct { 100*4882a593Smuzhiyun /* request identifier */ 101*4882a593Smuzhiyun __le16 proc_id; 102*4882a593Smuzhiyun } __packed req; 103*4882a593Smuzhiyun /* response */ 104*4882a593Smuzhiyun struct { 105*4882a593Smuzhiyun /* response identifier */ 106*4882a593Smuzhiyun __le16 proc_id; 107*4882a593Smuzhiyun /* error */ 108*4882a593Smuzhiyun uint8_t err; 109*4882a593Smuzhiyun } __packed rsp; 110*4882a593Smuzhiyun } __packed; 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun union as10x_set_tune { 113*4882a593Smuzhiyun /* request */ 114*4882a593Smuzhiyun struct { 115*4882a593Smuzhiyun /* request identifier */ 116*4882a593Smuzhiyun __le16 proc_id; 117*4882a593Smuzhiyun /* tune params */ 118*4882a593Smuzhiyun struct as10x_tune_args args; 119*4882a593Smuzhiyun } __packed req; 120*4882a593Smuzhiyun /* response */ 121*4882a593Smuzhiyun struct { 122*4882a593Smuzhiyun /* response identifier */ 123*4882a593Smuzhiyun __le16 proc_id; 124*4882a593Smuzhiyun /* response error */ 125*4882a593Smuzhiyun uint8_t error; 126*4882a593Smuzhiyun } __packed rsp; 127*4882a593Smuzhiyun } __packed; 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun union as10x_get_tune_status { 130*4882a593Smuzhiyun /* request */ 131*4882a593Smuzhiyun struct { 132*4882a593Smuzhiyun /* request identifier */ 133*4882a593Smuzhiyun __le16 proc_id; 134*4882a593Smuzhiyun } __packed req; 135*4882a593Smuzhiyun /* response */ 136*4882a593Smuzhiyun struct { 137*4882a593Smuzhiyun /* response identifier */ 138*4882a593Smuzhiyun __le16 proc_id; 139*4882a593Smuzhiyun /* response error */ 140*4882a593Smuzhiyun uint8_t error; 141*4882a593Smuzhiyun /* tune status */ 142*4882a593Smuzhiyun struct as10x_tune_status sts; 143*4882a593Smuzhiyun } __packed rsp; 144*4882a593Smuzhiyun } __packed; 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun union as10x_get_tps { 147*4882a593Smuzhiyun /* request */ 148*4882a593Smuzhiyun struct { 149*4882a593Smuzhiyun /* request identifier */ 150*4882a593Smuzhiyun __le16 proc_id; 151*4882a593Smuzhiyun } __packed req; 152*4882a593Smuzhiyun /* response */ 153*4882a593Smuzhiyun struct { 154*4882a593Smuzhiyun /* response identifier */ 155*4882a593Smuzhiyun __le16 proc_id; 156*4882a593Smuzhiyun /* response error */ 157*4882a593Smuzhiyun uint8_t error; 158*4882a593Smuzhiyun /* tps details */ 159*4882a593Smuzhiyun struct as10x_tps tps; 160*4882a593Smuzhiyun } __packed rsp; 161*4882a593Smuzhiyun } __packed; 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun union as10x_common { 164*4882a593Smuzhiyun /* request */ 165*4882a593Smuzhiyun struct { 166*4882a593Smuzhiyun /* request identifier */ 167*4882a593Smuzhiyun __le16 proc_id; 168*4882a593Smuzhiyun } __packed req; 169*4882a593Smuzhiyun /* response */ 170*4882a593Smuzhiyun struct { 171*4882a593Smuzhiyun /* response identifier */ 172*4882a593Smuzhiyun __le16 proc_id; 173*4882a593Smuzhiyun /* response error */ 174*4882a593Smuzhiyun uint8_t error; 175*4882a593Smuzhiyun } __packed rsp; 176*4882a593Smuzhiyun } __packed; 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun union as10x_add_pid_filter { 179*4882a593Smuzhiyun /* request */ 180*4882a593Smuzhiyun struct { 181*4882a593Smuzhiyun /* request identifier */ 182*4882a593Smuzhiyun __le16 proc_id; 183*4882a593Smuzhiyun /* PID to filter */ 184*4882a593Smuzhiyun __le16 pid; 185*4882a593Smuzhiyun /* stream type (MPE, PSI/SI or PES )*/ 186*4882a593Smuzhiyun uint8_t stream_type; 187*4882a593Smuzhiyun /* PID index in filter table */ 188*4882a593Smuzhiyun uint8_t idx; 189*4882a593Smuzhiyun } __packed req; 190*4882a593Smuzhiyun /* response */ 191*4882a593Smuzhiyun struct { 192*4882a593Smuzhiyun /* response identifier */ 193*4882a593Smuzhiyun __le16 proc_id; 194*4882a593Smuzhiyun /* response error */ 195*4882a593Smuzhiyun uint8_t error; 196*4882a593Smuzhiyun /* Filter id */ 197*4882a593Smuzhiyun uint8_t filter_id; 198*4882a593Smuzhiyun } __packed rsp; 199*4882a593Smuzhiyun } __packed; 200*4882a593Smuzhiyun 201*4882a593Smuzhiyun union as10x_del_pid_filter { 202*4882a593Smuzhiyun /* request */ 203*4882a593Smuzhiyun struct { 204*4882a593Smuzhiyun /* request identifier */ 205*4882a593Smuzhiyun __le16 proc_id; 206*4882a593Smuzhiyun /* PID to remove */ 207*4882a593Smuzhiyun __le16 pid; 208*4882a593Smuzhiyun } __packed req; 209*4882a593Smuzhiyun /* response */ 210*4882a593Smuzhiyun struct { 211*4882a593Smuzhiyun /* response identifier */ 212*4882a593Smuzhiyun __le16 proc_id; 213*4882a593Smuzhiyun /* response error */ 214*4882a593Smuzhiyun uint8_t error; 215*4882a593Smuzhiyun } __packed rsp; 216*4882a593Smuzhiyun } __packed; 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun union as10x_start_streaming { 219*4882a593Smuzhiyun /* request */ 220*4882a593Smuzhiyun struct { 221*4882a593Smuzhiyun /* request identifier */ 222*4882a593Smuzhiyun __le16 proc_id; 223*4882a593Smuzhiyun } __packed req; 224*4882a593Smuzhiyun /* response */ 225*4882a593Smuzhiyun struct { 226*4882a593Smuzhiyun /* response identifier */ 227*4882a593Smuzhiyun __le16 proc_id; 228*4882a593Smuzhiyun /* error */ 229*4882a593Smuzhiyun uint8_t error; 230*4882a593Smuzhiyun } __packed rsp; 231*4882a593Smuzhiyun } __packed; 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun union as10x_stop_streaming { 234*4882a593Smuzhiyun /* request */ 235*4882a593Smuzhiyun struct { 236*4882a593Smuzhiyun /* request identifier */ 237*4882a593Smuzhiyun __le16 proc_id; 238*4882a593Smuzhiyun } __packed req; 239*4882a593Smuzhiyun /* response */ 240*4882a593Smuzhiyun struct { 241*4882a593Smuzhiyun /* response identifier */ 242*4882a593Smuzhiyun __le16 proc_id; 243*4882a593Smuzhiyun /* error */ 244*4882a593Smuzhiyun uint8_t error; 245*4882a593Smuzhiyun } __packed rsp; 246*4882a593Smuzhiyun } __packed; 247*4882a593Smuzhiyun 248*4882a593Smuzhiyun union as10x_get_demod_stats { 249*4882a593Smuzhiyun /* request */ 250*4882a593Smuzhiyun struct { 251*4882a593Smuzhiyun /* request identifier */ 252*4882a593Smuzhiyun __le16 proc_id; 253*4882a593Smuzhiyun } __packed req; 254*4882a593Smuzhiyun /* response */ 255*4882a593Smuzhiyun struct { 256*4882a593Smuzhiyun /* response identifier */ 257*4882a593Smuzhiyun __le16 proc_id; 258*4882a593Smuzhiyun /* error */ 259*4882a593Smuzhiyun uint8_t error; 260*4882a593Smuzhiyun /* demod stats */ 261*4882a593Smuzhiyun struct as10x_demod_stats stats; 262*4882a593Smuzhiyun } __packed rsp; 263*4882a593Smuzhiyun } __packed; 264*4882a593Smuzhiyun 265*4882a593Smuzhiyun union as10x_get_impulse_resp { 266*4882a593Smuzhiyun /* request */ 267*4882a593Smuzhiyun struct { 268*4882a593Smuzhiyun /* request identifier */ 269*4882a593Smuzhiyun __le16 proc_id; 270*4882a593Smuzhiyun } __packed req; 271*4882a593Smuzhiyun /* response */ 272*4882a593Smuzhiyun struct { 273*4882a593Smuzhiyun /* response identifier */ 274*4882a593Smuzhiyun __le16 proc_id; 275*4882a593Smuzhiyun /* error */ 276*4882a593Smuzhiyun uint8_t error; 277*4882a593Smuzhiyun /* impulse response ready */ 278*4882a593Smuzhiyun uint8_t is_ready; 279*4882a593Smuzhiyun } __packed rsp; 280*4882a593Smuzhiyun } __packed; 281*4882a593Smuzhiyun 282*4882a593Smuzhiyun union as10x_fw_context { 283*4882a593Smuzhiyun /* request */ 284*4882a593Smuzhiyun struct { 285*4882a593Smuzhiyun /* request identifier */ 286*4882a593Smuzhiyun __le16 proc_id; 287*4882a593Smuzhiyun /* value to write (for set context)*/ 288*4882a593Smuzhiyun struct as10x_register_value reg_val; 289*4882a593Smuzhiyun /* context tag */ 290*4882a593Smuzhiyun __le16 tag; 291*4882a593Smuzhiyun /* context request type */ 292*4882a593Smuzhiyun __le16 type; 293*4882a593Smuzhiyun } __packed req; 294*4882a593Smuzhiyun /* response */ 295*4882a593Smuzhiyun struct { 296*4882a593Smuzhiyun /* response identifier */ 297*4882a593Smuzhiyun __le16 proc_id; 298*4882a593Smuzhiyun /* value read (for get context) */ 299*4882a593Smuzhiyun struct as10x_register_value reg_val; 300*4882a593Smuzhiyun /* context request type */ 301*4882a593Smuzhiyun __le16 type; 302*4882a593Smuzhiyun /* error */ 303*4882a593Smuzhiyun uint8_t error; 304*4882a593Smuzhiyun } __packed rsp; 305*4882a593Smuzhiyun } __packed; 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun union as10x_set_register { 308*4882a593Smuzhiyun /* request */ 309*4882a593Smuzhiyun struct { 310*4882a593Smuzhiyun /* response identifier */ 311*4882a593Smuzhiyun __le16 proc_id; 312*4882a593Smuzhiyun /* register description */ 313*4882a593Smuzhiyun struct as10x_register_addr reg_addr; 314*4882a593Smuzhiyun /* register content */ 315*4882a593Smuzhiyun struct as10x_register_value reg_val; 316*4882a593Smuzhiyun } __packed req; 317*4882a593Smuzhiyun /* response */ 318*4882a593Smuzhiyun struct { 319*4882a593Smuzhiyun /* response identifier */ 320*4882a593Smuzhiyun __le16 proc_id; 321*4882a593Smuzhiyun /* error */ 322*4882a593Smuzhiyun uint8_t error; 323*4882a593Smuzhiyun } __packed rsp; 324*4882a593Smuzhiyun } __packed; 325*4882a593Smuzhiyun 326*4882a593Smuzhiyun union as10x_get_register { 327*4882a593Smuzhiyun /* request */ 328*4882a593Smuzhiyun struct { 329*4882a593Smuzhiyun /* response identifier */ 330*4882a593Smuzhiyun __le16 proc_id; 331*4882a593Smuzhiyun /* register description */ 332*4882a593Smuzhiyun struct as10x_register_addr reg_addr; 333*4882a593Smuzhiyun } __packed req; 334*4882a593Smuzhiyun /* response */ 335*4882a593Smuzhiyun struct { 336*4882a593Smuzhiyun /* response identifier */ 337*4882a593Smuzhiyun __le16 proc_id; 338*4882a593Smuzhiyun /* error */ 339*4882a593Smuzhiyun uint8_t error; 340*4882a593Smuzhiyun /* register content */ 341*4882a593Smuzhiyun struct as10x_register_value reg_val; 342*4882a593Smuzhiyun } __packed rsp; 343*4882a593Smuzhiyun } __packed; 344*4882a593Smuzhiyun 345*4882a593Smuzhiyun union as10x_cfg_change_mode { 346*4882a593Smuzhiyun /* request */ 347*4882a593Smuzhiyun struct { 348*4882a593Smuzhiyun /* request identifier */ 349*4882a593Smuzhiyun __le16 proc_id; 350*4882a593Smuzhiyun /* mode */ 351*4882a593Smuzhiyun uint8_t mode; 352*4882a593Smuzhiyun } __packed req; 353*4882a593Smuzhiyun /* response */ 354*4882a593Smuzhiyun struct { 355*4882a593Smuzhiyun /* response identifier */ 356*4882a593Smuzhiyun __le16 proc_id; 357*4882a593Smuzhiyun /* error */ 358*4882a593Smuzhiyun uint8_t error; 359*4882a593Smuzhiyun } __packed rsp; 360*4882a593Smuzhiyun } __packed; 361*4882a593Smuzhiyun 362*4882a593Smuzhiyun struct as10x_cmd_header_t { 363*4882a593Smuzhiyun __le16 req_id; 364*4882a593Smuzhiyun __le16 prog; 365*4882a593Smuzhiyun __le16 version; 366*4882a593Smuzhiyun __le16 data_len; 367*4882a593Smuzhiyun } __packed; 368*4882a593Smuzhiyun 369*4882a593Smuzhiyun #define DUMP_BLOCK_SIZE 16 370*4882a593Smuzhiyun 371*4882a593Smuzhiyun union as10x_dump_memory { 372*4882a593Smuzhiyun /* request */ 373*4882a593Smuzhiyun struct { 374*4882a593Smuzhiyun /* request identifier */ 375*4882a593Smuzhiyun __le16 proc_id; 376*4882a593Smuzhiyun /* dump memory type request */ 377*4882a593Smuzhiyun uint8_t dump_req; 378*4882a593Smuzhiyun /* register description */ 379*4882a593Smuzhiyun struct as10x_register_addr reg_addr; 380*4882a593Smuzhiyun /* nb blocks to read */ 381*4882a593Smuzhiyun __le16 num_blocks; 382*4882a593Smuzhiyun } __packed req; 383*4882a593Smuzhiyun /* response */ 384*4882a593Smuzhiyun struct { 385*4882a593Smuzhiyun /* response identifier */ 386*4882a593Smuzhiyun __le16 proc_id; 387*4882a593Smuzhiyun /* error */ 388*4882a593Smuzhiyun uint8_t error; 389*4882a593Smuzhiyun /* dump response */ 390*4882a593Smuzhiyun uint8_t dump_rsp; 391*4882a593Smuzhiyun /* data */ 392*4882a593Smuzhiyun union { 393*4882a593Smuzhiyun uint8_t data8[DUMP_BLOCK_SIZE]; 394*4882a593Smuzhiyun __le16 data16[DUMP_BLOCK_SIZE / sizeof(__le16)]; 395*4882a593Smuzhiyun __le32 data32[DUMP_BLOCK_SIZE / sizeof(__le32)]; 396*4882a593Smuzhiyun } __packed u; 397*4882a593Smuzhiyun } __packed rsp; 398*4882a593Smuzhiyun } __packed; 399*4882a593Smuzhiyun 400*4882a593Smuzhiyun union as10x_dumplog_memory { 401*4882a593Smuzhiyun struct { 402*4882a593Smuzhiyun /* request identifier */ 403*4882a593Smuzhiyun __le16 proc_id; 404*4882a593Smuzhiyun /* dump memory type request */ 405*4882a593Smuzhiyun uint8_t dump_req; 406*4882a593Smuzhiyun } __packed req; 407*4882a593Smuzhiyun struct { 408*4882a593Smuzhiyun /* request identifier */ 409*4882a593Smuzhiyun __le16 proc_id; 410*4882a593Smuzhiyun /* error */ 411*4882a593Smuzhiyun uint8_t error; 412*4882a593Smuzhiyun /* dump response */ 413*4882a593Smuzhiyun uint8_t dump_rsp; 414*4882a593Smuzhiyun /* dump data */ 415*4882a593Smuzhiyun uint8_t data[DUMP_BLOCK_SIZE]; 416*4882a593Smuzhiyun } __packed rsp; 417*4882a593Smuzhiyun } __packed; 418*4882a593Smuzhiyun 419*4882a593Smuzhiyun union as10x_raw_data { 420*4882a593Smuzhiyun /* request */ 421*4882a593Smuzhiyun struct { 422*4882a593Smuzhiyun __le16 proc_id; 423*4882a593Smuzhiyun uint8_t data[64 - sizeof(struct as10x_cmd_header_t) 424*4882a593Smuzhiyun - 2 /* proc_id */]; 425*4882a593Smuzhiyun } __packed req; 426*4882a593Smuzhiyun /* response */ 427*4882a593Smuzhiyun struct { 428*4882a593Smuzhiyun __le16 proc_id; 429*4882a593Smuzhiyun uint8_t error; 430*4882a593Smuzhiyun uint8_t data[64 - sizeof(struct as10x_cmd_header_t) 431*4882a593Smuzhiyun - 2 /* proc_id */ - 1 /* rc */]; 432*4882a593Smuzhiyun } __packed rsp; 433*4882a593Smuzhiyun } __packed; 434*4882a593Smuzhiyun 435*4882a593Smuzhiyun struct as10x_cmd_t { 436*4882a593Smuzhiyun struct as10x_cmd_header_t header; 437*4882a593Smuzhiyun union { 438*4882a593Smuzhiyun union as10x_turn_on turn_on; 439*4882a593Smuzhiyun union as10x_turn_off turn_off; 440*4882a593Smuzhiyun union as10x_set_tune set_tune; 441*4882a593Smuzhiyun union as10x_get_tune_status get_tune_status; 442*4882a593Smuzhiyun union as10x_get_tps get_tps; 443*4882a593Smuzhiyun union as10x_common common; 444*4882a593Smuzhiyun union as10x_add_pid_filter add_pid_filter; 445*4882a593Smuzhiyun union as10x_del_pid_filter del_pid_filter; 446*4882a593Smuzhiyun union as10x_start_streaming start_streaming; 447*4882a593Smuzhiyun union as10x_stop_streaming stop_streaming; 448*4882a593Smuzhiyun union as10x_get_demod_stats get_demod_stats; 449*4882a593Smuzhiyun union as10x_get_impulse_resp get_impulse_rsp; 450*4882a593Smuzhiyun union as10x_fw_context context; 451*4882a593Smuzhiyun union as10x_set_register set_register; 452*4882a593Smuzhiyun union as10x_get_register get_register; 453*4882a593Smuzhiyun union as10x_cfg_change_mode cfg_change_mode; 454*4882a593Smuzhiyun union as10x_dump_memory dump_memory; 455*4882a593Smuzhiyun union as10x_dumplog_memory dumplog_memory; 456*4882a593Smuzhiyun union as10x_raw_data raw_data; 457*4882a593Smuzhiyun } __packed body; 458*4882a593Smuzhiyun } __packed; 459*4882a593Smuzhiyun 460*4882a593Smuzhiyun struct as10x_token_cmd_t { 461*4882a593Smuzhiyun /* token cmd */ 462*4882a593Smuzhiyun struct as10x_cmd_t c; 463*4882a593Smuzhiyun /* token response */ 464*4882a593Smuzhiyun struct as10x_cmd_t r; 465*4882a593Smuzhiyun } __packed; 466*4882a593Smuzhiyun 467*4882a593Smuzhiyun 468*4882a593Smuzhiyun /**************************/ 469*4882a593Smuzhiyun /* FUNCTION DECLARATION */ 470*4882a593Smuzhiyun /**************************/ 471*4882a593Smuzhiyun 472*4882a593Smuzhiyun void as10x_cmd_build(struct as10x_cmd_t *pcmd, uint16_t proc_id, 473*4882a593Smuzhiyun uint16_t cmd_len); 474*4882a593Smuzhiyun int as10x_rsp_parse(struct as10x_cmd_t *r, uint16_t proc_id); 475*4882a593Smuzhiyun 476*4882a593Smuzhiyun /* as10x cmd */ 477*4882a593Smuzhiyun int as10x_cmd_turn_on(struct as10x_bus_adapter_t *adap); 478*4882a593Smuzhiyun int as10x_cmd_turn_off(struct as10x_bus_adapter_t *adap); 479*4882a593Smuzhiyun 480*4882a593Smuzhiyun int as10x_cmd_set_tune(struct as10x_bus_adapter_t *adap, 481*4882a593Smuzhiyun struct as10x_tune_args *ptune); 482*4882a593Smuzhiyun 483*4882a593Smuzhiyun int as10x_cmd_get_tune_status(struct as10x_bus_adapter_t *adap, 484*4882a593Smuzhiyun struct as10x_tune_status *pstatus); 485*4882a593Smuzhiyun 486*4882a593Smuzhiyun int as10x_cmd_get_tps(struct as10x_bus_adapter_t *adap, 487*4882a593Smuzhiyun struct as10x_tps *ptps); 488*4882a593Smuzhiyun 489*4882a593Smuzhiyun int as10x_cmd_get_demod_stats(struct as10x_bus_adapter_t *adap, 490*4882a593Smuzhiyun struct as10x_demod_stats *pdemod_stats); 491*4882a593Smuzhiyun 492*4882a593Smuzhiyun int as10x_cmd_get_impulse_resp(struct as10x_bus_adapter_t *adap, 493*4882a593Smuzhiyun uint8_t *is_ready); 494*4882a593Smuzhiyun 495*4882a593Smuzhiyun /* as10x cmd stream */ 496*4882a593Smuzhiyun int as10x_cmd_add_PID_filter(struct as10x_bus_adapter_t *adap, 497*4882a593Smuzhiyun struct as10x_ts_filter *filter); 498*4882a593Smuzhiyun int as10x_cmd_del_PID_filter(struct as10x_bus_adapter_t *adap, 499*4882a593Smuzhiyun uint16_t pid_value); 500*4882a593Smuzhiyun 501*4882a593Smuzhiyun int as10x_cmd_start_streaming(struct as10x_bus_adapter_t *adap); 502*4882a593Smuzhiyun int as10x_cmd_stop_streaming(struct as10x_bus_adapter_t *adap); 503*4882a593Smuzhiyun 504*4882a593Smuzhiyun /* as10x cmd cfg */ 505*4882a593Smuzhiyun int as10x_cmd_set_context(struct as10x_bus_adapter_t *adap, 506*4882a593Smuzhiyun uint16_t tag, 507*4882a593Smuzhiyun uint32_t value); 508*4882a593Smuzhiyun int as10x_cmd_get_context(struct as10x_bus_adapter_t *adap, 509*4882a593Smuzhiyun uint16_t tag, 510*4882a593Smuzhiyun uint32_t *pvalue); 511*4882a593Smuzhiyun 512*4882a593Smuzhiyun int as10x_cmd_eLNA_change_mode(struct as10x_bus_adapter_t *adap, uint8_t mode); 513*4882a593Smuzhiyun int as10x_context_rsp_parse(struct as10x_cmd_t *prsp, uint16_t proc_id); 514*4882a593Smuzhiyun #endif 515