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