root/drivers/media/pci/saa7164/saa7164-types.h

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

INCLUDED FROM


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

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