root/drivers/media/usb/as102/as10x_cmd.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


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

/* [<][>][^][v][top][bottom][index][help] */