• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/staging/crystalhd/
1/********************************************************************
2 * Copyright(c) 2006-2009 Broadcom Corporation.
3 *
4 *  Name: bc_dts_defs.h
5 *
6 *  Description: Common definitions for all components. Only types
7 *		 is allowed to be included from this file.
8 *
9 *  AU
10 *
11 *  HISTORY:
12 *
13 ********************************************************************
14 * This header is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License as published
16 * by the Free Software Foundation, either version 2.1 of the License.
17 *
18 * This header is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 * GNU Lesser General Public License for more details.
22 * You should have received a copy of the GNU Lesser General Public License
23 * along with this header.  If not, see <http://www.gnu.org/licenses/>.
24 *******************************************************************/
25
26#ifndef _BC_DTS_DEFS_H_
27#define _BC_DTS_DEFS_H_
28
29/* BIT Mask */
30#define BC_BIT(_x)		(1 << (_x))
31
32enum BC_STATUS {
33	BC_STS_SUCCESS		= 0,
34	BC_STS_INV_ARG		= 1,
35	BC_STS_BUSY		= 2,
36	BC_STS_NOT_IMPL		= 3,
37	BC_STS_PGM_QUIT		= 4,
38	BC_STS_NO_ACCESS	= 5,
39	BC_STS_INSUFF_RES	= 6,
40	BC_STS_IO_ERROR		= 7,
41	BC_STS_NO_DATA		= 8,
42	BC_STS_VER_MISMATCH	= 9,
43	BC_STS_TIMEOUT		= 10,
44	BC_STS_FW_CMD_ERR	= 11,
45	BC_STS_DEC_NOT_OPEN	= 12,
46	BC_STS_ERR_USAGE	= 13,
47	BC_STS_IO_USER_ABORT	= 14,
48	BC_STS_IO_XFR_ERROR	= 15,
49	BC_STS_DEC_NOT_STARTED	= 16,
50	BC_STS_FWHEX_NOT_FOUND	= 17,
51	BC_STS_FMT_CHANGE	= 18,
52	BC_STS_HIF_ACCESS	= 19,
53	BC_STS_CMD_CANCELLED	= 20,
54	BC_STS_FW_AUTH_FAILED	= 21,
55	BC_STS_BOOTLOADER_FAILED = 22,
56	BC_STS_CERT_VERIFY_ERROR = 23,
57	BC_STS_DEC_EXIST_OPEN	= 24,
58	BC_STS_PENDING		= 25,
59	BC_STS_CLK_NOCHG	= 26,
60
61	/* Must be the last one.*/
62	BC_STS_ERROR		= -1
63};
64
65/*------------------------------------------------------*
66 *    Registry Key Definitions				*
67 *------------------------------------------------------*/
68#define BC_REG_KEY_MAIN_PATH	"Software\\Broadcom\\MediaPC\\70010"
69#define BC_REG_KEY_FWPATH		"FirmwareFilePath"
70#define BC_REG_KEY_SEC_OPT		"DbgOptions"
71
72/*
73 * Options:
74 *
75 *  b[5] = Enable RSA KEY in EEPROM Support
76 *  b[6] = Enable Old PIB scheme. (0 = Use PIB with video scheme)
77 *
78 *  b[12] = Enable send message to NotifyIcon
79 *
80 */
81
82enum BC_SW_OPTIONS {
83	BC_OPT_DOSER_OUT_ENCRYPT	= BC_BIT(3),
84	BC_OPT_LINK_OUT_ENCRYPT		= BC_BIT(29),
85};
86
87struct BC_REG_CONFIG{
88	uint32_t		DbgOptions;
89};
90
91#if defined(__KERNEL__) || defined(__LINUX_USER__)
92#else
93/* Align data structures */
94#define ALIGN(x)	__declspec(align(x))
95#endif
96
97/* mode
98 * b[0]..b[7]	= _DtsDeviceOpenMode
99 * b[8]		=  Load new FW
100 * b[9]		=  Load file play back FW
101 * b[10]	=  Disk format (0 for HD DVD and 1 for BLU ray)
102 * b[11]-b[15]	=  default output resolution
103 * b[16]	=  Skip TX CPB Buffer Check
104 * b[17]	=  Adaptive Output Encrypt/Scramble Scheme
105 * b[18]-b[31]	=  reserved for future use
106 */
107
108/* To allow multiple apps to open the device. */
109enum DtsDeviceOpenMode {
110	DTS_PLAYBACK_MODE = 0,
111	DTS_DIAG_MODE,
112	DTS_MONITOR_MODE,
113	DTS_HWINIT_MODE
114};
115
116/* To enable the filter to selectively enable/disable fixes or erratas */
117enum DtsDeviceFixMode {
118	DTS_LOAD_NEW_FW		= BC_BIT(8),
119	DTS_LOAD_FILE_PLAY_FW	= BC_BIT(9),
120	DTS_DISK_FMT_BD		= BC_BIT(10),
121	/* b[11]-b[15] : Default output resolution */
122	DTS_SKIP_TX_CHK_CPB	= BC_BIT(16),
123	DTS_ADAPTIVE_OUTPUT_PER	= BC_BIT(17),
124	DTS_INTELLIMAP		= BC_BIT(18),
125	/* b[19]-b[21] : select clock frequency */
126	DTS_PLAYBACK_DROP_RPT_MODE = BC_BIT(22)
127};
128
129#define DTS_DFLT_RESOLUTION(x)	(x<<11)
130
131#define DTS_DFLT_CLOCK(x) (x<<19)
132
133/* F/W File Version corresponding to S/W Releases */
134enum FW_FILE_VER {
135	/* S/W release: 02.04.02	F/W release 2.12.2.0 */
136	BC_FW_VER_020402 = ((12<<16) | (2<<8) | (0))
137};
138
139/*------------------------------------------------------*
140 *    Stream Types for DtsOpenDecoder()			*
141 *------------------------------------------------------*/
142enum DtsOpenDecStreamTypes {
143	BC_STREAM_TYPE_ES		= 0,
144	BC_STREAM_TYPE_PES		= 1,
145	BC_STREAM_TYPE_TS		= 2,
146	BC_STREAM_TYPE_ES_TSTAMP	= 6,
147};
148
149/*------------------------------------------------------*
150 *    Video Algorithms for DtsSetVideoParams()		*
151 *------------------------------------------------------*/
152enum DtsSetVideoParamsAlgo {
153	BC_VID_ALGO_H264		= 0,
154	BC_VID_ALGO_MPEG2		= 1,
155	BC_VID_ALGO_VC1			= 4,
156	BC_VID_ALGO_VC1MP		= 7,
157};
158
159/*------------------------------------------------------*
160 *    MPEG Extension to the PPB				*
161 *------------------------------------------------------*/
162#define BC_MPEG_VALID_PANSCAN		(1)
163
164struct BC_PIB_EXT_MPEG {
165	uint32_t	valid;
166	/* Always valid,  defaults to picture size if no
167	 * sequence display extension in the stream. */
168	uint32_t	display_horizontal_size;
169	uint32_t	display_vertical_size;
170
171	/* MPEG_VALID_PANSCAN
172	 * Offsets are a copy values from the MPEG stream. */
173	uint32_t	offset_count;
174	int32_t		horizontal_offset[3];
175	int32_t		vertical_offset[3];
176};
177
178/*------------------------------------------------------*
179 *    H.264 Extension to the PPB			*
180 *------------------------------------------------------*/
181/* Bit definitions for 'other.h264.valid' field */
182#define H264_VALID_PANSCAN		(1)
183#define H264_VALID_SPS_CROP		(2)
184#define H264_VALID_VUI			(4)
185
186struct BC_PIB_EXT_H264 {
187	/* 'valid' specifies which fields (or sets of
188	 * fields) below are valid.  If the corresponding
189	 * bit in 'valid' is NOT set then that field(s)
190	 * is (are) not initialized. */
191	uint32_t	valid;
192
193	/* H264_VALID_PANSCAN */
194	uint32_t	pan_scan_count;
195	int32_t		pan_scan_left[3];
196	int32_t		pan_scan_right[3];
197	int32_t		pan_scan_top[3];
198	int32_t		pan_scan_bottom[3];
199
200	/* H264_VALID_SPS_CROP */
201	int32_t		sps_crop_left;
202	int32_t		sps_crop_right;
203	int32_t		sps_crop_top;
204	int32_t		sps_crop_bottom;
205
206	/* H264_VALID_VUI */
207	uint32_t	chroma_top;
208	uint32_t	chroma_bottom;
209};
210
211/*------------------------------------------------------*
212 *    VC1 Extension to the PPB				*
213 *------------------------------------------------------*/
214#define VC1_VALID_PANSCAN		(1)
215
216struct BC_PIB_EXT_VC1 {
217	uint32_t	valid;
218
219	/* Always valid, defaults to picture size if no
220	 * sequence display extension in the stream. */
221	uint32_t	display_horizontal_size;
222	uint32_t	display_vertical_size;
223
224	/* VC1 pan scan windows */
225	uint32_t	num_panscan_windows;
226	int32_t		ps_horiz_offset[4];
227	int32_t		ps_vert_offset[4];
228	int32_t		ps_width[4];
229	int32_t		ps_height[4];
230};
231
232/*------------------------------------------------------*
233 *    Picture Information Block				*
234 *------------------------------------------------------*/
235#if defined(__LINUX_USER__)
236/* Values for 'pulldown' field.  '0' means no pulldown information
237 * was present for this picture. */
238enum {
239	vdecNoPulldownInfo	= 0,
240	vdecTop			= 1,
241	vdecBottom		= 2,
242	vdecTopBottom		= 3,
243	vdecBottomTop		= 4,
244	vdecTopBottomTop	= 5,
245	vdecBottomTopBottom	= 6,
246	vdecFrame_X2		= 7,
247	vdecFrame_X3		= 8,
248	vdecFrame_X1		= 9,
249	vdecFrame_X4		= 10,
250};
251
252/* Values for the 'frame_rate' field. */
253enum {
254	vdecFrameRateUnknown = 0,
255	vdecFrameRate23_97,
256	vdecFrameRate24,
257	vdecFrameRate25,
258	vdecFrameRate29_97,
259	vdecFrameRate30,
260	vdecFrameRate50,
261	vdecFrameRate59_94,
262	vdecFrameRate60,
263};
264
265/* Values for the 'aspect_ratio' field. */
266enum {
267	vdecAspectRatioUnknown = 0,
268	vdecAspectRatioSquare,
269	vdecAspectRatio12_11,
270	vdecAspectRatio10_11,
271	vdecAspectRatio16_11,
272	vdecAspectRatio40_33,
273	vdecAspectRatio24_11,
274	vdecAspectRatio20_11,
275	vdecAspectRatio32_11,
276	vdecAspectRatio80_33,
277	vdecAspectRatio18_11,
278	vdecAspectRatio15_11,
279	vdecAspectRatio64_33,
280	vdecAspectRatio160_99,
281	vdecAspectRatio4_3,
282	vdecAspectRatio16_9,
283	vdecAspectRatio221_1,
284	vdecAspectRatioOther = 255,
285};
286
287/* Values for the 'colour_primaries' field. */
288enum {
289	vdecColourPrimariesUnknown = 0,
290	vdecColourPrimariesBT709,
291	vdecColourPrimariesUnspecified,
292	vdecColourPrimariesReserved,
293	vdecColourPrimariesBT470_2M = 4,
294	vdecColourPrimariesBT470_2BG,
295	vdecColourPrimariesSMPTE170M,
296	vdecColourPrimariesSMPTE240M,
297	vdecColourPrimariesGenericFilm,
298};
299
300enum {
301	vdecRESOLUTION_CUSTOM	= 0x00000000, /* custom */
302	vdecRESOLUTION_480i	= 0x00000001, /* 480i */
303	vdecRESOLUTION_1080i	= 0x00000002, /* 1080i (1920x1080, 60i) */
304	vdecRESOLUTION_NTSC	= 0x00000003, /* NTSC (720x483, 60i) */
305	vdecRESOLUTION_480p	= 0x00000004, /* 480p (720x480, 60p) */
306	vdecRESOLUTION_720p	= 0x00000005, /* 720p (1280x720, 60p) */
307	vdecRESOLUTION_PAL1	= 0x00000006, /* PAL_1 (720x576, 50i) */
308	vdecRESOLUTION_1080i25	= 0x00000007, /* 1080i25 (1920x1080, 50i) */
309	vdecRESOLUTION_720p50	= 0x00000008, /* 720p50 (1280x720, 50p) */
310	vdecRESOLUTION_576p	= 0x00000009, /* 576p (720x576, 50p) */
311	vdecRESOLUTION_1080i29_97 = 0x0000000A, /* 1080i (1920x1080, 59.94i) */
312	vdecRESOLUTION_720p59_94  = 0x0000000B, /* 720p (1280x720, 59.94p) */
313	vdecRESOLUTION_SD_DVD	= 0x0000000C, /* SD DVD (720x483, 60i) */
314	vdecRESOLUTION_480p656	= 0x0000000D, /* 480p (720x480, 60p), output bus width 8 bit, clock 74.25MHz */
315	vdecRESOLUTION_1080p23_976 = 0x0000000E, /* 1080p23_976 (1920x1080, 23.976p) */
316	vdecRESOLUTION_720p23_976  = 0x0000000F, /* 720p23_976 (1280x720p, 23.976p) */
317	vdecRESOLUTION_240p29_97   = 0x00000010, /* 240p (1440x240, 29.97p ) */
318	vdecRESOLUTION_240p30	= 0x00000011, /* 240p (1440x240, 30p) */
319	vdecRESOLUTION_288p25	= 0x00000012, /* 288p (1440x288p, 25p) */
320	vdecRESOLUTION_1080p29_97 = 0x00000013, /* 1080p29_97 (1920x1080, 29.97p) */
321	vdecRESOLUTION_1080p30	= 0x00000014, /* 1080p30 (1920x1080, 30p) */
322	vdecRESOLUTION_1080p24	= 0x00000015, /* 1080p24 (1920x1080, 24p) */
323	vdecRESOLUTION_1080p25	= 0x00000016, /* 1080p25 (1920x1080, 25p) */
324	vdecRESOLUTION_720p24	= 0x00000017, /* 720p24 (1280x720, 25p) */
325	vdecRESOLUTION_720p29_97  = 0x00000018, /* 720p29.97 (1280x720, 29.97p) */
326	vdecRESOLUTION_480p23_976 = 0x00000019, /* 480p23.976 (720*480, 23.976) */
327	vdecRESOLUTION_480p29_97  = 0x0000001A, /* 480p29.976 (720*480, 29.97p) */
328	vdecRESOLUTION_576p25	= 0x0000001B, /* 576p25 (720*576, 25p) */
329	/* For Zero Frame Rate */
330	vdecRESOLUTION_480p0	= 0x0000001C, /* 480p (720x480, 0p) */
331	vdecRESOLUTION_480i0	= 0x0000001D, /* 480i (720x480, 0i) */
332	vdecRESOLUTION_576p0	= 0x0000001E, /* 576p (720x576, 0p) */
333	vdecRESOLUTION_720p0	= 0x0000001F, /* 720p (1280x720, 0p) */
334	vdecRESOLUTION_1080p0	= 0x00000020, /* 1080p (1920x1080, 0p) */
335	vdecRESOLUTION_1080i0	= 0x00000021, /* 1080i (1920x1080, 0i) */
336};
337
338/* Bit definitions for 'flags' field */
339#define VDEC_FLAG_EOS				(0x0004)
340
341#define VDEC_FLAG_FRAME				(0x0000)
342#define VDEC_FLAG_FIELDPAIR			(0x0008)
343#define VDEC_FLAG_TOPFIELD			(0x0010)
344#define VDEC_FLAG_BOTTOMFIELD			(0x0018)
345
346#define VDEC_FLAG_PROGRESSIVE_SRC		(0x0000)
347#define VDEC_FLAG_INTERLACED_SRC		(0x0020)
348#define VDEC_FLAG_UNKNOWN_SRC			(0x0040)
349
350#define VDEC_FLAG_BOTTOM_FIRST			(0x0080)
351#define VDEC_FLAG_LAST_PICTURE			(0x0100)
352
353#define VDEC_FLAG_PICTURE_META_DATA_PRESENT	(0x40000)
354
355#endif /* __LINUX_USER__ */
356
357enum _BC_OUTPUT_FORMAT {
358	MODE420				= 0x0,
359	MODE422_YUY2			= 0x1,
360	MODE422_UYVY			= 0x2,
361};
362
363struct BC_PIC_INFO_BLOCK {
364	/* Common fields. */
365	uint64_t	timeStamp;	/* Timestamp */
366	uint32_t	picture_number;	/* Ordinal display number  */
367	uint32_t	width;		/* pixels	    */
368	uint32_t	height;		/* pixels	    */
369	uint32_t	chroma_format;	/* 0x420, 0x422 or 0x444 */
370	uint32_t	pulldown;
371	uint32_t	flags;
372	uint32_t	frame_rate;
373	uint32_t	aspect_ratio;
374	uint32_t	colour_primaries;
375	uint32_t	picture_meta_payload;
376	uint32_t	sess_num;
377	uint32_t	ycom;
378	uint32_t	custom_aspect_ratio_width_height;
379	uint32_t	n_drop;	/* number of non-reference frames remaining to be dropped */
380
381	/* Protocol-specific extensions. */
382	union {
383		struct BC_PIB_EXT_H264	h264;
384		struct BC_PIB_EXT_MPEG	mpeg;
385		struct BC_PIB_EXT_VC1	 vc1;
386	} other;
387
388};
389
390/*------------------------------------------------------*
391 *    ProcOut Info					*
392 *------------------------------------------------------*/
393/* Optional flags for ProcOut Interface.*/
394enum POUT_OPTIONAL_IN_FLAGS_{
395	/* Flags from App to Device */
396	BC_POUT_FLAGS_YV12	  = 0x01,	/* Copy Data in YV12 format */
397	BC_POUT_FLAGS_STRIDE	  = 0x02,	/* Stride size is valid. */
398	BC_POUT_FLAGS_SIZE	  = 0x04,	/* Take size information from Application */
399	BC_POUT_FLAGS_INTERLACED  = 0x08,	/* copy only half the bytes */
400	BC_POUT_FLAGS_INTERLEAVED = 0x10,	/* interleaved frame */
401
402	/* Flags from Device to APP */
403	BC_POUT_FLAGS_FMT_CHANGE  = 0x10000,	/* Data is not VALID when this flag is set */
404	BC_POUT_FLAGS_PIB_VALID	  = 0x20000,	/* PIB Information valid */
405	BC_POUT_FLAGS_ENCRYPTED	  = 0x40000,	/* Data is encrypted. */
406	BC_POUT_FLAGS_FLD_BOT	  = 0x80000,	/* Bottom Field data */
407};
408
409typedef enum BC_STATUS(*dts_pout_callback)(void  *shnd, uint32_t width, uint32_t height, uint32_t stride, void *pOut);
410
411/* Line 21 Closed Caption */
412/* User Data */
413#define MAX_UD_SIZE		1792	/* 1920 - 128 */
414
415struct BC_DTS_PROC_OUT {
416	uint8_t		*Ybuff;			/* Caller Supplied buffer for Y data */
417	uint32_t	YbuffSz;		/* Caller Supplied Y buffer size */
418	uint32_t	YBuffDoneSz;		/* Transferred Y datasize */
419
420	uint8_t		*UVbuff;		/* Caller Supplied buffer for UV data */
421	uint32_t	UVbuffSz;		/* Caller Supplied UV buffer size */
422	uint32_t	UVBuffDoneSz;		/* Transferred UV data size */
423
424	uint32_t	StrideSz;		/* Caller supplied Stride Size */
425	uint32_t	PoutFlags;		/* Call IN Flags */
426
427	uint32_t	discCnt;		/* Picture discontinuity count */
428
429	struct BC_PIC_INFO_BLOCK PicInfo;		/* Picture Information Block Data */
430
431	/* Line 21 Closed Caption */
432	/* User Data */
433	uint32_t	UserDataSz;
434	uint8_t		UserData[MAX_UD_SIZE];
435
436	void		*hnd;
437	dts_pout_callback AppCallBack;
438	uint8_t		DropFrames;
439	uint8_t		b422Mode;		/* Picture output Mode */
440	uint8_t		bPibEnc;		/* PIB encrypted */
441	uint8_t		bRevertScramble;
442
443};
444
445struct BC_DTS_STATUS {
446	uint8_t		ReadyListCount;	/* Number of frames in ready list (reported by driver) */
447	uint8_t		FreeListCount;	/* Number of frame buffers free.  (reported by driver) */
448	uint8_t		PowerStateChange; /* Number of active state power transitions (reported by driver) */
449	uint8_t		reserved_[1];
450
451	uint32_t	FramesDropped;	/* Number of frames dropped.  (reported by DIL) */
452	uint32_t	FramesCaptured;	/* Number of frames captured. (reported by DIL) */
453	uint32_t	FramesRepeated;	/* Number of frames repeated. (reported by DIL) */
454
455	uint32_t	InputCount;	/* Times compressed video has been sent to the HW.
456					 * i.e. Successful DtsProcInput() calls (reported by DIL) */
457	uint64_t	InputTotalSize;	/* Amount of compressed video that has been sent to the HW.
458					 * (reported by DIL) */
459	uint32_t	InputBusyCount;	/* Times compressed video has attempted to be sent to the HW
460					 * but the input FIFO was full. (reported by DIL) */
461
462	uint32_t	PIBMissCount;	/* Amount of times a PIB is invalid. (reported by DIL) */
463
464	uint32_t	cpbEmptySize;	/* supported only for H.264, specifically changed for
465					 * Adobe. Report size of CPB buffer available.
466					 * Reported by DIL */
467	uint64_t	NextTimeStamp;	/* TimeStamp of the next picture that will be returned
468					 * by a call to ProcOutput. Added for Adobe. Reported
469					 * back from the driver */
470	uint8_t		reserved__[16];
471
472};
473
474#define BC_SWAP32(_v)			\
475	((((_v) & 0xFF000000)>>24)|	\
476	  (((_v) & 0x00FF0000)>>8)|	\
477	  (((_v) & 0x0000FF00)<<8)|	\
478	  (((_v) & 0x000000FF)<<24))
479
480#define WM_AGENT_TRAYICON_DECODER_OPEN	10001
481#define WM_AGENT_TRAYICON_DECODER_CLOSE	10002
482#define WM_AGENT_TRAYICON_DECODER_START	10003
483#define WM_AGENT_TRAYICON_DECODER_STOP	10004
484#define WM_AGENT_TRAYICON_DECODER_RUN	10005
485#define WM_AGENT_TRAYICON_DECODER_PAUSE	10006
486
487
488#endif	/* _BC_DTS_DEFS_H_ */
489