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