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