linux/drivers/media/pci/saa7164/saa7164-types.h
<<
>>
Prefs
   1/*
   2 *  Driver for the NXP SAA7164 PCIe bridge
   3 *
   4 *  Copyright (c) 2010-2015 Steven Toth <stoth@kernellabs.com>
   5 *
   6 *  This program is free software; you can redistribute it and/or modify
   7 *  it under the terms of the GNU General Public License as published by
   8 *  the Free Software Foundation; either version 2 of the License, or
   9 *  (at your option) any later version.
  10 *
  11 *  This program is distributed in the hope that it will be useful,
  12 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 *
  15 *  GNU General Public License for more details.
  16 */
  17
  18/* TODO: Cleanup and shorten the namespace */
  19
  20/* Some structues are passed directly to/from the firmware and
  21 * have strict alignment requirements. This is one of them.
  22 */
  23struct tmComResHWDescr {
  24        u8      bLength;
  25        u8      bDescriptorType;
  26        u8      bDescriptorSubtype;
  27        u16     bcdSpecVersion;
  28        u32     dwClockFrequency;
  29        u32     dwClockUpdateRes;
  30        u8      bCapabilities;
  31        u32     dwDeviceRegistersLocation;
  32        u32     dwHostMemoryRegion;
  33        u32     dwHostMemoryRegionSize;
  34        u32     dwHostHibernatMemRegion;
  35        u32     dwHostHibernatMemRegionSize;
  36} __attribute__((packed));
  37
  38/* This is DWORD aligned on windows but I can't find the right
  39 * gcc syntax to match the binary data from the device.
  40 * I've manually padded with Reserved[3] bytes to match the hardware,
  41 * but this could break if GCC decies to pack in a different way.
  42 */
  43struct tmComResInterfaceDescr {
  44        u8      bLength;
  45        u8      bDescriptorType;
  46        u8      bDescriptorSubtype;
  47        u8      bFlags;
  48        u8      bInterfaceType;
  49        u8      bInterfaceId;
  50        u8      bBaseInterface;
  51        u8      bInterruptId;
  52        u8      bDebugInterruptId;
  53        u8      BARLocation;
  54        u8      Reserved[3];
  55};
  56
  57struct tmComResBusDescr {
  58        u64     CommandRing;
  59        u64     ResponseRing;
  60        u32     CommandWrite;
  61        u32     CommandRead;
  62        u32     ResponseWrite;
  63        u32     ResponseRead;
  64};
  65
  66enum tmBusType {
  67        NONE            = 0,
  68        TYPE_BUS_PCI    = 1,
  69        TYPE_BUS_PCIe   = 2,
  70        TYPE_BUS_USB    = 3,
  71        TYPE_BUS_I2C    = 4
  72};
  73
  74struct tmComResBusInfo {
  75        enum tmBusType Type;
  76        u16     m_wMaxReqSize;
  77        u8 __iomem *m_pdwSetRing;
  78        u32     m_dwSizeSetRing;
  79        u8 __iomem *m_pdwGetRing;
  80        u32     m_dwSizeGetRing;
  81        u32     m_dwSetWritePos;
  82        u32     m_dwSetReadPos;
  83        u32     m_dwGetWritePos;
  84        u32     m_dwGetReadPos;
  85
  86        /* All access is protected */
  87        struct mutex lock;
  88
  89};
  90
  91struct tmComResInfo {
  92        u8      id;
  93        u8      flags;
  94        u16     size;
  95        u32     command;
  96        u16     controlselector;
  97        u8      seqno;
  98} __attribute__((packed));
  99
 100enum tmComResCmd {
 101        SET_CUR  = 0x01,
 102        GET_CUR  = 0x81,
 103        GET_MIN  = 0x82,
 104        GET_MAX  = 0x83,
 105        GET_RES  = 0x84,
 106        GET_LEN  = 0x85,
 107        GET_INFO = 0x86,
 108        GET_DEF  = 0x87
 109};
 110
 111struct cmd {
 112        u8 seqno;
 113        u32 inuse;
 114        u32 timeout;
 115        u32 signalled;
 116        struct mutex lock;
 117        wait_queue_head_t wait;
 118};
 119
 120struct tmDescriptor {
 121        u32     pathid;
 122        u32     size;
 123        void    *descriptor;
 124};
 125
 126struct tmComResDescrHeader {
 127        u8      len;
 128        u8      type;
 129        u8      subtype;
 130        u8      unitid;
 131} __attribute__((packed));
 132
 133struct tmComResExtDevDescrHeader {
 134        u8      len;
 135        u8      type;
 136        u8      subtype;
 137        u8      unitid;
 138        u32     devicetype;
 139        u16     deviceid;
 140        u32     numgpiopins;
 141        u8      numgpiogroups;
 142        u8      controlsize;
 143} __attribute__((packed));
 144
 145struct tmComResGPIO {
 146        u32     pin;
 147        u8      state;
 148} __attribute__((packed));
 149
 150struct tmComResPathDescrHeader {
 151        u8      len;
 152        u8      type;
 153        u8      subtype;
 154        u8      pathid;
 155} __attribute__((packed));
 156
 157/* terminaltype */
 158enum tmComResTermType {
 159        ITT_ANTENNA              = 0x0203,
 160        LINE_CONNECTOR           = 0x0603,
 161        SPDIF_CONNECTOR          = 0x0605,
 162        COMPOSITE_CONNECTOR      = 0x0401,
 163        SVIDEO_CONNECTOR         = 0x0402,
 164        COMPONENT_CONNECTOR      = 0x0403,
 165        STANDARD_DMA             = 0xF101
 166};
 167
 168struct tmComResAntTermDescrHeader {
 169        u8      len;
 170        u8      type;
 171        u8      subtype;
 172        u8      terminalid;
 173        u16     terminaltype;
 174        u8      assocterminal;
 175        u8      iterminal;
 176        u8      controlsize;
 177} __attribute__((packed));
 178
 179struct tmComResTunerDescrHeader {
 180        u8      len;
 181        u8      type;
 182        u8      subtype;
 183        u8      unitid;
 184        u8      sourceid;
 185        u8      iunit;
 186        u32     tuningstandards;
 187        u8      controlsize;
 188        u32     controls;
 189} __attribute__((packed));
 190
 191enum tmBufferFlag {
 192        /* the buffer does not contain any valid data */
 193        TM_BUFFER_FLAG_EMPTY,
 194
 195        /* the buffer is filled with valid data */
 196        TM_BUFFER_FLAG_DONE,
 197
 198        /* the buffer is the dummy buffer - TODO??? */
 199        TM_BUFFER_FLAG_DUMMY_BUFFER
 200};
 201
 202struct tmBuffer {
 203        u64             *pagetablevirt;
 204        u64             pagetablephys;
 205        u16             offset;
 206        u8              *context;
 207        u64             timestamp;
 208        enum tmBufferFlag BufferFlag;
 209        u32             lostbuffers;
 210        u32             validbuffers;
 211        u64             *dummypagevirt;
 212        u64             dummypagephys;
 213        u64             *addressvirt;
 214};
 215
 216struct tmHWStreamParameters {
 217        u32     bitspersample;
 218        u32     samplesperline;
 219        u32     numberoflines;
 220        u32     pitch;
 221        u32     linethreshold;
 222        u64     **pagetablelistvirt;
 223        u64     *pagetablelistphys;
 224        u32     numpagetables;
 225        u32     numpagetableentries;
 226};
 227
 228struct tmStreamParameters {
 229        struct tmHWStreamParameters     HWStreamParameters;
 230        u64                             qwDummyPageTablePhys;
 231        u64                             *pDummyPageTableVirt;
 232};
 233
 234struct tmComResDMATermDescrHeader {
 235        u8      len;
 236        u8      type;
 237        u8      subtyle;
 238        u8      unitid;
 239        u16     terminaltype;
 240        u8      assocterminal;
 241        u8      sourceid;
 242        u8      iterminal;
 243        u32     BARLocation;
 244        u8      flags;
 245        u8      interruptid;
 246        u8      buffercount;
 247        u8      metadatasize;
 248        u8      numformats;
 249        u8      controlsize;
 250} __attribute__((packed));
 251
 252/*
 253 *
 254 * Description:
 255 *  This is the transport stream format header.
 256 *
 257 * Settings:
 258 *  bLength                 - The size of this descriptor in bytes.
 259 *  bDescriptorType         - CS_INTERFACE.
 260 *  bDescriptorSubtype      - VS_FORMAT_MPEG2TS descriptor subtype.
 261 *  bFormatIndex            - A non-zero constant that uniquely identifies the
 262 *                            format.
 263 *  bDataOffset             - Offset to TSP packet within MPEG-2 TS transport
 264 *                            stride, in bytes.
 265 *  bPacketLength           - Length of TSP packet, in bytes (typically 188).
 266 *  bStrideLength           - Length of MPEG-2 TS transport stride.
 267 *  guidStrideFormat        - A Globally Unique Identifier indicating the
 268 *                            format of the stride data (if any). Set to zeros
 269 *                            if there is no Stride Data, or if the Stride
 270 *                            Data is to be ignored by the application.
 271 *
 272 */
 273struct tmComResTSFormatDescrHeader {
 274        u8      len;
 275        u8      type;
 276        u8      subtype;
 277        u8      bFormatIndex;
 278        u8      bDataOffset;
 279        u8      bPacketLength;
 280        u8      bStrideLength;
 281        u8      guidStrideFormat[16];
 282} __attribute__((packed));
 283
 284/* Encoder related structures */
 285
 286/* A/V Mux Selector */
 287struct tmComResSelDescrHeader {
 288        u8      len;
 289        u8      type;
 290        u8      subtype;
 291        u8      unitid;
 292        u8      nrinpins;
 293        u8      sourceid;
 294} __attribute__((packed));
 295
 296/* A/V Audio processor definitions */
 297struct tmComResProcDescrHeader {
 298        u8      len;
 299        u8      type;
 300        u8      subtype;
 301        u8      unitid;
 302        u8      sourceid;
 303        u16     wreserved;
 304        u8      controlsize;
 305} __attribute__((packed));
 306
 307/* Video bitrate control message */
 308#define EU_VIDEO_BIT_RATE_MODE_CONSTANT         (0)
 309#define EU_VIDEO_BIT_RATE_MODE_VARIABLE_AVERAGE (1)
 310#define EU_VIDEO_BIT_RATE_MODE_VARIABLE_PEAK    (2)
 311struct tmComResEncVideoBitRate {
 312        u8      ucVideoBitRateMode;
 313        u32     dwVideoBitRate;
 314        u32     dwVideoBitRatePeak;
 315} __attribute__((packed));
 316
 317/* Video Encoder Aspect Ratio message */
 318struct tmComResEncVideoInputAspectRatio {
 319        u8      width;
 320        u8      height;
 321} __attribute__((packed));
 322
 323/* Video Encoder GOP IBP message */
 324/* 1. IPPPPPPPPPPPPPP */
 325/* 2. IBPBPBPBPBPBPBP */
 326/* 3. IBBPBBPBBPBBP   */
 327#define SAA7164_ENCODER_DEFAULT_GOP_DIST (1)
 328#define SAA7164_ENCODER_DEFAULT_GOP_SIZE (15)
 329struct tmComResEncVideoGopStructure {
 330        u8      ucGOPSize;      /* GOP Size 12, 15 */
 331        u8      ucRefFrameDist; /* Reference Frame Distance */
 332} __attribute__((packed));
 333
 334/* Encoder processor definition */
 335struct tmComResEncoderDescrHeader {
 336        u8      len;
 337        u8      type;
 338        u8      subtype;
 339        u8      unitid;
 340        u8      vsourceid;
 341        u8      asourceid;
 342        u8      iunit;
 343        u32     dwmControlCap;
 344        u32     dwmProfileCap;
 345        u32     dwmVidFormatCap;
 346        u8      bmVidBitrateCap;
 347        u16     wmVidResolutionsCap;
 348        u16     wmVidFrmRateCap;
 349        u32     dwmAudFormatCap;
 350        u8      bmAudBitrateCap;
 351} __attribute__((packed));
 352
 353/* Audio processor definition */
 354struct tmComResAFeatureDescrHeader {
 355        u8      len;
 356        u8      type;
 357        u8      subtype;
 358        u8      unitid;
 359        u8      sourceid;
 360        u8      controlsize;
 361} __attribute__((packed));
 362
 363/* Audio control messages */
 364struct tmComResAudioDefaults {
 365        u8      ucDecoderLevel;
 366        u8      ucDecoderFM_Level;
 367        u8      ucMonoLevel;
 368        u8      ucNICAM_Level;
 369        u8      ucSAP_Level;
 370        u8      ucADC_Level;
 371} __attribute__((packed));
 372
 373/* Audio bitrate control message */
 374struct tmComResEncAudioBitRate {
 375        u8      ucAudioBitRateMode;
 376        u32     dwAudioBitRate;
 377        u32     dwAudioBitRatePeak;
 378} __attribute__((packed));
 379
 380/* Tuner / AV Decoder messages */
 381struct tmComResTunerStandard {
 382        u8      std;
 383        u32     country;
 384} __attribute__((packed));
 385
 386struct tmComResTunerStandardAuto {
 387        u8      mode;
 388} __attribute__((packed));
 389
 390/* EEPROM definition for PS stream types */
 391struct tmComResPSFormatDescrHeader {
 392        u8      len;
 393        u8      type;
 394        u8      subtype;
 395        u8      bFormatIndex;
 396        u16     wPacketLength;
 397        u16     wPackLength;
 398        u8      bPackDataType;
 399} __attribute__((packed));
 400
 401/* VBI control structure */
 402struct tmComResVBIFormatDescrHeader {
 403        u8      len;
 404        u8      type;
 405        u8      subtype; /* VS_FORMAT_VBI */
 406        u8      bFormatIndex;
 407        u32     VideoStandard; /* See KS_AnalogVideoStandard, NTSC = 1 */
 408        u8      StartLine; /* NTSC Start = 10 */
 409        u8      EndLine; /* NTSC = 21 */
 410        u8      FieldRate; /* 60 for NTSC */
 411        u8      bNumLines; /* Unused - scheduled for removal */
 412} __attribute__((packed));
 413
 414struct tmComResProbeCommit {
 415        u16     bmHint;
 416        u8      bFormatIndex;
 417        u8      bFrameIndex;
 418} __attribute__((packed));
 419
 420struct tmComResDebugSetLevel {
 421        u32     dwDebugLevel;
 422} __attribute__((packed));
 423
 424struct tmComResDebugGetData {
 425        u32     dwResult;
 426        u8      ucDebugData[256];
 427} __attribute__((packed));
 428
 429struct tmFwInfoStruct {
 430        u32     status;
 431        u32     mode;
 432        u32     devicespec;
 433        u32     deviceinst;
 434        u32     CPULoad;
 435        u32     RemainHeap;
 436        u32     CPUClock;
 437        u32     RAMSpeed;
 438} __attribute__((packed));
 439