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