1/*
2 * Copyright (c) 2013 Texas Instruments Inc.
3 *
4 * David Griego, <dagriego@biglakesoftware.com>
5 * Dale Farnsworth, <dale@farnsworth.org>
6 * Archit Taneja, <archit@ti.com>
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License version 2 as published by
10 * the Free Software Foundation.
11 */
12
13#ifndef _TI_VPDMA_PRIV_H_
14#define _TI_VPDMA_PRIV_H_
15
16/*
17 * VPDMA Register offsets
18 */
19
20/* Top level */
21#define VPDMA_PID		0x00
22#define VPDMA_LIST_ADDR		0x04
23#define VPDMA_LIST_ATTR		0x08
24#define VPDMA_LIST_STAT_SYNC	0x0c
25#define VPDMA_BG_RGB		0x18
26#define VPDMA_BG_YUV		0x1c
27#define VPDMA_SETUP		0x30
28#define VPDMA_MAX_SIZE1		0x34
29#define VPDMA_MAX_SIZE2		0x38
30#define VPDMA_MAX_SIZE3		0x3c
31
32/* Interrupts */
33#define VPDMA_INT_CHAN_STAT(grp)	(0x40 + grp * 8)
34#define VPDMA_INT_CHAN_MASK(grp)	(VPDMA_INT_CHAN_STAT(grp) + 4)
35#define VPDMA_INT_CLIENT0_STAT		0x78
36#define VPDMA_INT_CLIENT0_MASK		0x7c
37#define VPDMA_INT_CLIENT1_STAT		0x80
38#define VPDMA_INT_CLIENT1_MASK		0x84
39#define VPDMA_INT_LIST0_STAT		0x88
40#define VPDMA_INT_LIST0_MASK		0x8c
41
42#define VPDMA_PERFMON(i)		(0x200 + i * 4)
43
44/* VPE specific client registers */
45#define VPDMA_DEI_CHROMA1_CSTAT		0x0300
46#define VPDMA_DEI_LUMA1_CSTAT		0x0304
47#define VPDMA_DEI_LUMA2_CSTAT		0x0308
48#define VPDMA_DEI_CHROMA2_CSTAT		0x030c
49#define VPDMA_DEI_LUMA3_CSTAT		0x0310
50#define VPDMA_DEI_CHROMA3_CSTAT		0x0314
51#define VPDMA_DEI_MV_IN_CSTAT		0x0330
52#define VPDMA_DEI_MV_OUT_CSTAT		0x033c
53#define VPDMA_VIP_UP_Y_CSTAT		0x0390
54#define VPDMA_VIP_UP_UV_CSTAT		0x0394
55#define VPDMA_VPI_CTL_CSTAT		0x03d0
56
57/* Reg field info for VPDMA_CLIENT_CSTAT registers */
58#define VPDMA_CSTAT_LINE_MODE_MASK	0x03
59#define VPDMA_CSTAT_LINE_MODE_SHIFT	8
60#define VPDMA_CSTAT_FRAME_START_MASK	0xf
61#define VPDMA_CSTAT_FRAME_START_SHIFT	10
62
63#define VPDMA_LIST_NUM_MASK		0x07
64#define VPDMA_LIST_NUM_SHFT		24
65#define VPDMA_LIST_STOP_SHFT		20
66#define VPDMA_LIST_RDY_MASK		0x01
67#define VPDMA_LIST_RDY_SHFT		19
68#define VPDMA_LIST_TYPE_MASK		0x03
69#define VPDMA_LIST_TYPE_SHFT		16
70#define VPDMA_LIST_SIZE_MASK		0xffff
71
72/* VPDMA data type values for data formats */
73#define DATA_TYPE_Y444				0x0
74#define DATA_TYPE_Y422				0x1
75#define DATA_TYPE_Y420				0x2
76#define DATA_TYPE_C444				0x4
77#define DATA_TYPE_C422				0x5
78#define DATA_TYPE_C420				0x6
79#define DATA_TYPE_YC422				0x7
80#define DATA_TYPE_YC444				0x8
81#define DATA_TYPE_CY422				0x27
82
83#define DATA_TYPE_RGB16_565			0x0
84#define DATA_TYPE_ARGB_1555			0x1
85#define DATA_TYPE_ARGB_4444			0x2
86#define DATA_TYPE_RGBA_5551			0x3
87#define DATA_TYPE_RGBA_4444			0x4
88#define DATA_TYPE_ARGB24_6666			0x5
89#define DATA_TYPE_RGB24_888			0x6
90#define DATA_TYPE_ARGB32_8888			0x7
91#define DATA_TYPE_RGBA24_6666			0x8
92#define DATA_TYPE_RGBA32_8888			0x9
93#define DATA_TYPE_BGR16_565			0x10
94#define DATA_TYPE_ABGR_1555			0x11
95#define DATA_TYPE_ABGR_4444			0x12
96#define DATA_TYPE_BGRA_5551			0x13
97#define DATA_TYPE_BGRA_4444			0x14
98#define DATA_TYPE_ABGR24_6666			0x15
99#define DATA_TYPE_BGR24_888			0x16
100#define DATA_TYPE_ABGR32_8888			0x17
101#define DATA_TYPE_BGRA24_6666			0x18
102#define DATA_TYPE_BGRA32_8888			0x19
103
104#define DATA_TYPE_MV				0x3
105
106/* VPDMA channel numbers(only VPE channels for now) */
107#define	VPE_CHAN_NUM_LUMA1_IN		0
108#define	VPE_CHAN_NUM_CHROMA1_IN		1
109#define	VPE_CHAN_NUM_LUMA2_IN		2
110#define	VPE_CHAN_NUM_CHROMA2_IN		3
111#define	VPE_CHAN_NUM_LUMA3_IN		4
112#define	VPE_CHAN_NUM_CHROMA3_IN		5
113#define	VPE_CHAN_NUM_MV_IN		12
114#define	VPE_CHAN_NUM_MV_OUT		15
115#define	VPE_CHAN_NUM_LUMA_OUT		102
116#define	VPE_CHAN_NUM_CHROMA_OUT		103
117#define	VPE_CHAN_NUM_RGB_OUT		106
118
119/*
120 * a VPDMA address data block payload for a configuration descriptor needs to
121 * have each sub block length as a multiple of 16 bytes. Therefore, the overall
122 * size of the payload also needs to be a multiple of 16 bytes. The sub block
123 * lengths should be ensured to be aligned by the VPDMA user.
124 */
125#define VPDMA_ADB_SIZE_ALIGN		0x0f
126
127/*
128 * data transfer descriptor
129 */
130struct vpdma_dtd {
131	u32			type_ctl_stride;
132	union {
133		u32		xfer_length_height;
134		u32		w1;
135	};
136	dma_addr_t		start_addr;
137	u32			pkt_ctl;
138	union {
139		u32		frame_width_height;	/* inbound */
140		dma_addr_t	desc_write_addr;	/* outbound */
141	};
142	union {
143		u32		start_h_v;		/* inbound */
144		u32		max_width_height;	/* outbound */
145	};
146	u32			client_attr0;
147	u32			client_attr1;
148};
149
150/* Data Transfer Descriptor specifics */
151#define DTD_NO_NOTIFY		0
152#define DTD_NOTIFY		1
153
154#define DTD_PKT_TYPE		0xa
155#define DTD_DIR_IN		0
156#define DTD_DIR_OUT		1
157
158/* type_ctl_stride */
159#define DTD_DATA_TYPE_MASK	0x3f
160#define DTD_DATA_TYPE_SHFT	26
161#define DTD_NOTIFY_MASK		0x01
162#define DTD_NOTIFY_SHFT		25
163#define DTD_FIELD_MASK		0x01
164#define DTD_FIELD_SHFT		24
165#define DTD_1D_MASK		0x01
166#define DTD_1D_SHFT		23
167#define DTD_EVEN_LINE_SKIP_MASK	0x01
168#define DTD_EVEN_LINE_SKIP_SHFT	20
169#define DTD_ODD_LINE_SKIP_MASK	0x01
170#define DTD_ODD_LINE_SKIP_SHFT	16
171#define DTD_LINE_STRIDE_MASK	0xffff
172#define DTD_LINE_STRIDE_SHFT	0
173
174/* xfer_length_height */
175#define DTD_LINE_LENGTH_MASK	0xffff
176#define DTD_LINE_LENGTH_SHFT	16
177#define DTD_XFER_HEIGHT_MASK	0xffff
178#define DTD_XFER_HEIGHT_SHFT	0
179
180/* pkt_ctl */
181#define DTD_PKT_TYPE_MASK	0x1f
182#define DTD_PKT_TYPE_SHFT	27
183#define DTD_MODE_MASK		0x01
184#define DTD_MODE_SHFT		26
185#define DTD_DIR_MASK		0x01
186#define DTD_DIR_SHFT		25
187#define DTD_CHAN_MASK		0x01ff
188#define DTD_CHAN_SHFT		16
189#define DTD_PRI_MASK		0x0f
190#define DTD_PRI_SHFT		9
191#define DTD_NEXT_CHAN_MASK	0x01ff
192#define DTD_NEXT_CHAN_SHFT	0
193
194/* frame_width_height */
195#define DTD_FRAME_WIDTH_MASK	0xffff
196#define DTD_FRAME_WIDTH_SHFT	16
197#define DTD_FRAME_HEIGHT_MASK	0xffff
198#define DTD_FRAME_HEIGHT_SHFT	0
199
200/* start_h_v */
201#define DTD_H_START_MASK	0xffff
202#define DTD_H_START_SHFT	16
203#define DTD_V_START_MASK	0xffff
204#define DTD_V_START_SHFT	0
205
206#define DTD_DESC_START_SHIFT	5
207#define DTD_WRITE_DESC_MASK	0x01
208#define DTD_WRITE_DESC_SHIFT	2
209#define DTD_DROP_DATA_MASK	0x01
210#define DTD_DROP_DATA_SHIFT	1
211#define DTD_USE_DESC_MASK	0x01
212#define DTD_USE_DESC_SHIFT	0
213
214/* max_width_height */
215#define DTD_MAX_WIDTH_MASK	0x07
216#define DTD_MAX_WIDTH_SHFT	4
217#define DTD_MAX_HEIGHT_MASK	0x07
218#define DTD_MAX_HEIGHT_SHFT	0
219
220/* max width configurations */
221 /* unlimited width */
222#define	MAX_OUT_WIDTH_UNLIMITED		0
223/* as specified in max_size1 reg */
224#define MAX_OUT_WIDTH_REG1		1
225/* as specified in max_size2 reg */
226#define MAX_OUT_WIDTH_REG2		2
227/* as specified in max_size3 reg */
228#define	MAX_OUT_WIDTH_REG3		3
229/* maximum of 352 pixels as width */
230#define MAX_OUT_WIDTH_352		4
231/* maximum of 768 pixels as width */
232#define	MAX_OUT_WIDTH_768		5
233/* maximum of 1280 pixels width */
234#define	MAX_OUT_WIDTH_1280		6
235/* maximum of 1920 pixels as width */
236#define	MAX_OUT_WIDTH_1920		7
237
238/* max height configurations */
239 /* unlimited height */
240#define	MAX_OUT_HEIGHT_UNLIMITED	0
241/* as specified in max_size1 reg */
242#define MAX_OUT_HEIGHT_REG1		1
243/* as specified in max_size2 reg */
244#define MAX_OUT_HEIGHT_REG2		2
245/* as specified in max_size3 reg */
246#define	MAX_OUT_HEIGHT_REG3		3
247/* maximum of 288 lines as height */
248#define MAX_OUT_HEIGHT_288		4
249/* maximum of 576 lines as height */
250#define	MAX_OUT_HEIGHT_576		5
251/* maximum of 720 lines as height */
252#define	MAX_OUT_HEIGHT_720		6
253/* maximum of 1080 lines as height */
254#define	MAX_OUT_HEIGHT_1080		7
255
256static inline u32 dtd_type_ctl_stride(int type, bool notify, int field,
257			bool one_d, bool even_line_skip, bool odd_line_skip,
258			int line_stride)
259{
260	return (type << DTD_DATA_TYPE_SHFT) | (notify << DTD_NOTIFY_SHFT) |
261		(field << DTD_FIELD_SHFT) | (one_d << DTD_1D_SHFT) |
262		(even_line_skip << DTD_EVEN_LINE_SKIP_SHFT) |
263		(odd_line_skip << DTD_ODD_LINE_SKIP_SHFT) |
264		line_stride;
265}
266
267static inline u32 dtd_xfer_length_height(int line_length, int xfer_height)
268{
269	return (line_length << DTD_LINE_LENGTH_SHFT) | xfer_height;
270}
271
272static inline u32 dtd_pkt_ctl(bool mode, bool dir, int chan, int pri,
273			int next_chan)
274{
275	return (DTD_PKT_TYPE << DTD_PKT_TYPE_SHFT) | (mode << DTD_MODE_SHFT) |
276		(dir << DTD_DIR_SHFT) | (chan << DTD_CHAN_SHFT) |
277		(pri << DTD_PRI_SHFT) | next_chan;
278}
279
280static inline u32 dtd_frame_width_height(int width, int height)
281{
282	return (width << DTD_FRAME_WIDTH_SHFT) | height;
283}
284
285static inline u32 dtd_desc_write_addr(unsigned int addr, bool write_desc,
286			bool drop_data, bool use_desc)
287{
288	return (addr << DTD_DESC_START_SHIFT) |
289		(write_desc << DTD_WRITE_DESC_SHIFT) |
290		(drop_data << DTD_DROP_DATA_SHIFT) |
291		use_desc;
292}
293
294static inline u32 dtd_start_h_v(int h_start, int v_start)
295{
296	return (h_start << DTD_H_START_SHFT) | v_start;
297}
298
299static inline u32 dtd_max_width_height(int max_width, int max_height)
300{
301	return (max_width << DTD_MAX_WIDTH_SHFT) | max_height;
302}
303
304static inline int dtd_get_data_type(struct vpdma_dtd *dtd)
305{
306	return dtd->type_ctl_stride >> DTD_DATA_TYPE_SHFT;
307}
308
309static inline bool dtd_get_notify(struct vpdma_dtd *dtd)
310{
311	return (dtd->type_ctl_stride >> DTD_NOTIFY_SHFT) & DTD_NOTIFY_MASK;
312}
313
314static inline int dtd_get_field(struct vpdma_dtd *dtd)
315{
316	return (dtd->type_ctl_stride >> DTD_FIELD_SHFT) & DTD_FIELD_MASK;
317}
318
319static inline bool dtd_get_1d(struct vpdma_dtd *dtd)
320{
321	return (dtd->type_ctl_stride >> DTD_1D_SHFT) & DTD_1D_MASK;
322}
323
324static inline bool dtd_get_even_line_skip(struct vpdma_dtd *dtd)
325{
326	return (dtd->type_ctl_stride >> DTD_EVEN_LINE_SKIP_SHFT)
327		& DTD_EVEN_LINE_SKIP_MASK;
328}
329
330static inline bool dtd_get_odd_line_skip(struct vpdma_dtd *dtd)
331{
332	return (dtd->type_ctl_stride >> DTD_ODD_LINE_SKIP_SHFT)
333		& DTD_ODD_LINE_SKIP_MASK;
334}
335
336static inline int dtd_get_line_stride(struct vpdma_dtd *dtd)
337{
338	return dtd->type_ctl_stride & DTD_LINE_STRIDE_MASK;
339}
340
341static inline int dtd_get_line_length(struct vpdma_dtd *dtd)
342{
343	return dtd->xfer_length_height >> DTD_LINE_LENGTH_SHFT;
344}
345
346static inline int dtd_get_xfer_height(struct vpdma_dtd *dtd)
347{
348	return dtd->xfer_length_height & DTD_XFER_HEIGHT_MASK;
349}
350
351static inline int dtd_get_pkt_type(struct vpdma_dtd *dtd)
352{
353	return dtd->pkt_ctl >> DTD_PKT_TYPE_SHFT;
354}
355
356static inline bool dtd_get_mode(struct vpdma_dtd *dtd)
357{
358	return (dtd->pkt_ctl >> DTD_MODE_SHFT) & DTD_MODE_MASK;
359}
360
361static inline bool dtd_get_dir(struct vpdma_dtd *dtd)
362{
363	return (dtd->pkt_ctl >> DTD_DIR_SHFT) & DTD_DIR_MASK;
364}
365
366static inline int dtd_get_chan(struct vpdma_dtd *dtd)
367{
368	return (dtd->pkt_ctl >> DTD_CHAN_SHFT) & DTD_CHAN_MASK;
369}
370
371static inline int dtd_get_priority(struct vpdma_dtd *dtd)
372{
373	return (dtd->pkt_ctl >> DTD_PRI_SHFT) & DTD_PRI_MASK;
374}
375
376static inline int dtd_get_next_chan(struct vpdma_dtd *dtd)
377{
378	return (dtd->pkt_ctl >> DTD_NEXT_CHAN_SHFT) & DTD_NEXT_CHAN_MASK;
379}
380
381static inline int dtd_get_frame_width(struct vpdma_dtd *dtd)
382{
383	return dtd->frame_width_height >> DTD_FRAME_WIDTH_SHFT;
384}
385
386static inline int dtd_get_frame_height(struct vpdma_dtd *dtd)
387{
388	return dtd->frame_width_height & DTD_FRAME_HEIGHT_MASK;
389}
390
391static inline int dtd_get_desc_write_addr(struct vpdma_dtd *dtd)
392{
393	return dtd->desc_write_addr >> DTD_DESC_START_SHIFT;
394}
395
396static inline bool dtd_get_write_desc(struct vpdma_dtd *dtd)
397{
398	return (dtd->desc_write_addr >> DTD_WRITE_DESC_SHIFT) &
399							DTD_WRITE_DESC_MASK;
400}
401
402static inline bool dtd_get_drop_data(struct vpdma_dtd *dtd)
403{
404	return (dtd->desc_write_addr >> DTD_DROP_DATA_SHIFT) &
405							DTD_DROP_DATA_MASK;
406}
407
408static inline bool dtd_get_use_desc(struct vpdma_dtd *dtd)
409{
410	return dtd->desc_write_addr & DTD_USE_DESC_MASK;
411}
412
413static inline int dtd_get_h_start(struct vpdma_dtd *dtd)
414{
415	return dtd->start_h_v >> DTD_H_START_SHFT;
416}
417
418static inline int dtd_get_v_start(struct vpdma_dtd *dtd)
419{
420	return dtd->start_h_v & DTD_V_START_MASK;
421}
422
423static inline int dtd_get_max_width(struct vpdma_dtd *dtd)
424{
425	return (dtd->max_width_height >> DTD_MAX_WIDTH_SHFT) &
426							DTD_MAX_WIDTH_MASK;
427}
428
429static inline int dtd_get_max_height(struct vpdma_dtd *dtd)
430{
431	return (dtd->max_width_height >> DTD_MAX_HEIGHT_SHFT) &
432							DTD_MAX_HEIGHT_MASK;
433}
434
435/*
436 * configuration descriptor
437 */
438struct vpdma_cfd {
439	union {
440		u32	dest_addr_offset;
441		u32	w0;
442	};
443	union {
444		u32	block_len;		/* in words */
445		u32	w1;
446	};
447	u32		payload_addr;
448	u32		ctl_payload_len;	/* in words */
449};
450
451/* Configuration descriptor specifics */
452
453#define CFD_PKT_TYPE		0xb
454
455#define CFD_DIRECT		1
456#define CFD_INDIRECT		0
457#define CFD_CLS_ADB		0
458#define CFD_CLS_BLOCK		1
459
460/* block_len */
461#define CFD__BLOCK_LEN_MASK	0xffff
462#define CFD__BLOCK_LEN_SHFT	0
463
464/* ctl_payload_len */
465#define CFD_PKT_TYPE_MASK	0x1f
466#define CFD_PKT_TYPE_SHFT	27
467#define CFD_DIRECT_MASK		0x01
468#define CFD_DIRECT_SHFT		26
469#define CFD_CLASS_MASK		0x03
470#define CFD_CLASS_SHFT		24
471#define CFD_DEST_MASK		0xff
472#define CFD_DEST_SHFT		16
473#define CFD_PAYLOAD_LEN_MASK	0xffff
474#define CFD_PAYLOAD_LEN_SHFT	0
475
476static inline u32 cfd_pkt_payload_len(bool direct, int cls, int dest,
477		int payload_len)
478{
479	return (CFD_PKT_TYPE << CFD_PKT_TYPE_SHFT) |
480		(direct << CFD_DIRECT_SHFT) |
481		(cls << CFD_CLASS_SHFT) |
482		(dest << CFD_DEST_SHFT) |
483		payload_len;
484}
485
486static inline int cfd_get_pkt_type(struct vpdma_cfd *cfd)
487{
488	return cfd->ctl_payload_len >> CFD_PKT_TYPE_SHFT;
489}
490
491static inline bool cfd_get_direct(struct vpdma_cfd *cfd)
492{
493	return (cfd->ctl_payload_len >> CFD_DIRECT_SHFT) & CFD_DIRECT_MASK;
494}
495
496static inline bool cfd_get_class(struct vpdma_cfd *cfd)
497{
498	return (cfd->ctl_payload_len >> CFD_CLASS_SHFT) & CFD_CLASS_MASK;
499}
500
501static inline int cfd_get_dest(struct vpdma_cfd *cfd)
502{
503	return (cfd->ctl_payload_len >> CFD_DEST_SHFT) & CFD_DEST_MASK;
504}
505
506static inline int cfd_get_payload_len(struct vpdma_cfd *cfd)
507{
508	return cfd->ctl_payload_len & CFD_PAYLOAD_LEN_MASK;
509}
510
511/*
512 * control descriptor
513 */
514struct vpdma_ctd {
515	union {
516		u32	timer_value;
517		u32	list_addr;
518		u32	w0;
519	};
520	union {
521		u32	pixel_line_count;
522		u32	list_size;
523		u32	w1;
524	};
525	union {
526		u32	event;
527		u32	fid_ctl;
528		u32	w2;
529	};
530	u32		type_source_ctl;
531};
532
533/* control descriptor types */
534#define CTD_TYPE_SYNC_ON_CLIENT		0
535#define CTD_TYPE_SYNC_ON_LIST		1
536#define CTD_TYPE_SYNC_ON_EXT		2
537#define CTD_TYPE_SYNC_ON_LM_TIMER	3
538#define CTD_TYPE_SYNC_ON_CHANNEL	4
539#define CTD_TYPE_CHNG_CLIENT_IRQ	5
540#define CTD_TYPE_SEND_IRQ		6
541#define CTD_TYPE_RELOAD_LIST		7
542#define CTD_TYPE_ABORT_CHANNEL		8
543
544#define CTD_PKT_TYPE		0xc
545
546/* timer_value */
547#define CTD_TIMER_VALUE_MASK	0xffff
548#define CTD_TIMER_VALUE_SHFT	0
549
550/* pixel_line_count */
551#define CTD_PIXEL_COUNT_MASK	0xffff
552#define CTD_PIXEL_COUNT_SHFT	16
553#define CTD_LINE_COUNT_MASK	0xffff
554#define CTD_LINE_COUNT_SHFT	0
555
556/* list_size */
557#define CTD_LIST_SIZE_MASK	0xffff
558#define CTD_LIST_SIZE_SHFT	0
559
560/* event */
561#define CTD_EVENT_MASK		0x0f
562#define CTD_EVENT_SHFT		0
563
564/* fid_ctl */
565#define CTD_FID2_MASK		0x03
566#define CTD_FID2_SHFT		4
567#define CTD_FID1_MASK		0x03
568#define CTD_FID1_SHFT		2
569#define CTD_FID0_MASK		0x03
570#define CTD_FID0_SHFT		0
571
572/* type_source_ctl */
573#define CTD_PKT_TYPE_MASK	0x1f
574#define CTD_PKT_TYPE_SHFT	27
575#define CTD_SOURCE_MASK		0xff
576#define CTD_SOURCE_SHFT		16
577#define CTD_CONTROL_MASK	0x0f
578#define CTD_CONTROL_SHFT	0
579
580static inline u32 ctd_pixel_line_count(int pixel_count, int line_count)
581{
582	return (pixel_count << CTD_PIXEL_COUNT_SHFT) | line_count;
583}
584
585static inline u32 ctd_set_fid_ctl(int fid0, int fid1, int fid2)
586{
587	return (fid2 << CTD_FID2_SHFT) | (fid1 << CTD_FID1_SHFT) | fid0;
588}
589
590static inline u32 ctd_type_source_ctl(int source, int control)
591{
592	return (CTD_PKT_TYPE << CTD_PKT_TYPE_SHFT) |
593		(source << CTD_SOURCE_SHFT) | control;
594}
595
596static inline u32 ctd_get_pixel_count(struct vpdma_ctd *ctd)
597{
598	return ctd->pixel_line_count >> CTD_PIXEL_COUNT_SHFT;
599}
600
601static inline int ctd_get_line_count(struct vpdma_ctd *ctd)
602{
603	return ctd->pixel_line_count & CTD_LINE_COUNT_MASK;
604}
605
606static inline int ctd_get_event(struct vpdma_ctd *ctd)
607{
608	return ctd->event & CTD_EVENT_MASK;
609}
610
611static inline int ctd_get_fid2_ctl(struct vpdma_ctd *ctd)
612{
613	return (ctd->fid_ctl >> CTD_FID2_SHFT) & CTD_FID2_MASK;
614}
615
616static inline int ctd_get_fid1_ctl(struct vpdma_ctd *ctd)
617{
618	return (ctd->fid_ctl >> CTD_FID1_SHFT) & CTD_FID1_MASK;
619}
620
621static inline int ctd_get_fid0_ctl(struct vpdma_ctd *ctd)
622{
623	return ctd->fid_ctl & CTD_FID2_MASK;
624}
625
626static inline int ctd_get_pkt_type(struct vpdma_ctd *ctd)
627{
628	return ctd->type_source_ctl >> CTD_PKT_TYPE_SHFT;
629}
630
631static inline int ctd_get_source(struct vpdma_ctd *ctd)
632{
633	return (ctd->type_source_ctl >> CTD_SOURCE_SHFT) & CTD_SOURCE_MASK;
634}
635
636static inline int ctd_get_ctl(struct vpdma_ctd *ctd)
637{
638	return ctd->type_source_ctl & CTD_CONTROL_MASK;
639}
640
641#endif
642