2 * Copyright (c) 2013 Texas Instruments Inc.
4 * David Griego, <dagriego@biglakesoftware.com>
5 * Dale Farnsworth, <dale@farnsworth.org>
6 * Archit Taneja, <archit@ti.com>
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.
13 #ifndef _TI_VPDMA_PRIV_H_
14 #define _TI_VPDMA_PRIV_H_
17 * VPDMA Register offsets
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 #define VPDMA_MAX_SIZE_WIDTH_MASK 0xffff
32 #define VPDMA_MAX_SIZE_WIDTH_SHFT 16
33 #define VPDMA_MAX_SIZE_HEIGHT_MASK 0xffff
34 #define VPDMA_MAX_SIZE_HEIGHT_SHFT 0
37 #define VPDMA_INT_CHAN_STAT(grp) (0x40 + grp * 8)
38 #define VPDMA_INT_CHAN_MASK(grp) (VPDMA_INT_CHAN_STAT(grp) + 4)
39 #define VPDMA_INT_CLIENT0_STAT 0x78
40 #define VPDMA_INT_CLIENT0_MASK 0x7c
41 #define VPDMA_INT_CLIENT1_STAT 0x80
42 #define VPDMA_INT_CLIENT1_MASK 0x84
43 #define VPDMA_INT_LIST0_STAT 0x88
44 #define VPDMA_INT_LIST0_MASK 0x8c
46 #define VPDMA_INTX_OFFSET 0x50
48 #define VPDMA_PERFMON(i) (0x200 + i * 4)
50 /* VIP/VPE client registers */
51 #define VPDMA_DEI_CHROMA1_CSTAT 0x0300
52 #define VPDMA_DEI_LUMA1_CSTAT 0x0304
53 #define VPDMA_DEI_LUMA2_CSTAT 0x0308
54 #define VPDMA_DEI_CHROMA2_CSTAT 0x030c
55 #define VPDMA_DEI_LUMA3_CSTAT 0x0310
56 #define VPDMA_DEI_CHROMA3_CSTAT 0x0314
57 #define VPDMA_DEI_MV_IN_CSTAT 0x0330
58 #define VPDMA_DEI_MV_OUT_CSTAT 0x033c
59 #define VPDMA_VIP_LO_Y_CSTAT 0x0388
60 #define VPDMA_VIP_LO_UV_CSTAT 0x038c
61 #define VPDMA_VIP_UP_Y_CSTAT 0x0390
62 #define VPDMA_VIP_UP_UV_CSTAT 0x0394
63 #define VPDMA_VPI_CTL_CSTAT 0x03d0
65 /* Reg field info for VPDMA_CLIENT_CSTAT registers */
66 #define VPDMA_CSTAT_LINE_MODE_MASK 0x03
67 #define VPDMA_CSTAT_LINE_MODE_SHIFT 8
68 #define VPDMA_CSTAT_FRAME_START_MASK 0xf
69 #define VPDMA_CSTAT_FRAME_START_SHIFT 10
71 #define VPDMA_LIST_NUM_MASK 0x07
72 #define VPDMA_LIST_NUM_SHFT 24
73 #define VPDMA_LIST_STOP_SHFT 20
74 #define VPDMA_LIST_RDY_MASK 0x01
75 #define VPDMA_LIST_RDY_SHFT 19
76 #define VPDMA_LIST_TYPE_MASK 0x03
77 #define VPDMA_LIST_TYPE_SHFT 16
78 #define VPDMA_LIST_SIZE_MASK 0xffff
81 * The YUV data type definition below are taken from
82 * both the TRM and i839 Errata information.
83 * Use the correct data type considering byte
84 * reordering of components.
86 * Also since the single use of "C" in the 422 case
87 * to mean "Cr" (i.e. V component). It was decided
88 * to explicitly label them CR to remove any confusion.
89 * Bear in mind that the type label refer to the memory
90 * packed order (LSB - MSB).
92 #define DATA_TYPE_Y444 0x0
93 #define DATA_TYPE_Y422 0x1
94 #define DATA_TYPE_Y420 0x2
95 #define DATA_TYPE_C444 0x4
96 #define DATA_TYPE_C422 0x5
97 #define DATA_TYPE_C420 0x6
98 #define DATA_TYPE_YC444 0x8
99 #define DATA_TYPE_YCB422 0x7
100 #define DATA_TYPE_YCR422 0x17
101 #define DATA_TYPE_CBY422 0x27
102 #define DATA_TYPE_CRY422 0x37
105 * The RGB data type definition below are defined
106 * to follow Errata i819.
107 * The initial values were taken from:
108 * VPDMA_data_type_mapping_v0.2vayu_c.pdf
109 * But some of the ARGB definition appeared to be wrong
110 * in the document also. As they would yield RGBA instead.
111 * They have been corrected based on experimentation.
113 #define DATA_TYPE_RGB16_565 0x10
114 #define DATA_TYPE_ARGB_1555 0x13
115 #define DATA_TYPE_ARGB_4444 0x14
116 #define DATA_TYPE_RGBA_5551 0x11
117 #define DATA_TYPE_RGBA_4444 0x12
118 #define DATA_TYPE_ARGB24_6666 0x18
119 #define DATA_TYPE_RGB24_888 0x16
120 #define DATA_TYPE_ARGB32_8888 0x17
121 #define DATA_TYPE_RGBA24_6666 0x15
122 #define DATA_TYPE_RGBA32_8888 0x19
123 #define DATA_TYPE_BGR16_565 0x0
124 #define DATA_TYPE_ABGR_1555 0x3
125 #define DATA_TYPE_ABGR_4444 0x4
126 #define DATA_TYPE_BGRA_5551 0x1
127 #define DATA_TYPE_BGRA_4444 0x2
128 #define DATA_TYPE_ABGR24_6666 0x8
129 #define DATA_TYPE_BGR24_888 0x6
130 #define DATA_TYPE_ABGR32_8888 0x7
131 #define DATA_TYPE_BGRA24_6666 0x5
132 #define DATA_TYPE_BGRA32_8888 0x9
134 #define DATA_TYPE_MV 0x3
136 /* VPDMA channel numbers, some are common between VIP/VPE and appear twice */
137 #define VPE_CHAN_NUM_LUMA1_IN 0
138 #define VPE_CHAN_NUM_CHROMA1_IN 1
139 #define VPE_CHAN_NUM_LUMA2_IN 2
140 #define VPE_CHAN_NUM_CHROMA2_IN 3
141 #define VPE_CHAN_NUM_LUMA3_IN 4
142 #define VPE_CHAN_NUM_CHROMA3_IN 5
143 #define VPE_CHAN_NUM_MV_IN 12
144 #define VPE_CHAN_NUM_MV_OUT 15
145 #define VIP1_CHAN_NUM_MULT_PORT_A_SRC0 38
146 #define VIP1_CHAN_NUM_MULT_ANC_A_SRC0 70
147 #define VPE_CHAN_NUM_LUMA_OUT 102
148 #define VPE_CHAN_NUM_CHROMA_OUT 103
149 #define VIP1_CHAN_NUM_PORT_A_LUMA 102
150 #define VIP1_CHAN_NUM_PORT_A_CHROMA 103
151 #define VPE_CHAN_NUM_RGB_OUT 106
152 #define VIP1_CHAN_NUM_PORT_A_RGB 106
153 #define VIP1_CHAN_NUM_PORT_B_RGB 107
155 * a VPDMA address data block payload for a configuration descriptor needs to
156 * have each sub block length as a multiple of 16 bytes. Therefore, the overall
157 * size of the payload also needs to be a multiple of 16 bytes. The sub block
158 * lengths should be ensured to be aligned by the VPDMA user.
160 #define VPDMA_ADB_SIZE_ALIGN 0x0f
163 * data transfer descriptor
168 u32 xfer_length_height
;
171 dma_addr_t start_addr
;
174 u32 frame_width_height
; /* inbound */
175 dma_addr_t desc_write_addr
; /* outbound */
178 u32 start_h_v
; /* inbound */
179 u32 max_width_height
; /* outbound */
185 /* Data Transfer Descriptor specifics */
186 #define DTD_NO_NOTIFY 0
189 #define DTD_PKT_TYPE 0xa
191 #define DTD_DIR_OUT 1
193 /* type_ctl_stride */
194 #define DTD_DATA_TYPE_MASK 0x3f
195 #define DTD_DATA_TYPE_SHFT 26
196 #define DTD_NOTIFY_MASK 0x01
197 #define DTD_NOTIFY_SHFT 25
198 #define DTD_FIELD_MASK 0x01
199 #define DTD_FIELD_SHFT 24
200 #define DTD_1D_MASK 0x01
201 #define DTD_1D_SHFT 23
202 #define DTD_EVEN_LINE_SKIP_MASK 0x01
203 #define DTD_EVEN_LINE_SKIP_SHFT 20
204 #define DTD_ODD_LINE_SKIP_MASK 0x01
205 #define DTD_ODD_LINE_SKIP_SHFT 16
206 #define DTD_LINE_STRIDE_MASK 0xffff
207 #define DTD_LINE_STRIDE_SHFT 0
209 /* xfer_length_height */
210 #define DTD_LINE_LENGTH_MASK 0xffff
211 #define DTD_LINE_LENGTH_SHFT 16
212 #define DTD_XFER_HEIGHT_MASK 0xffff
213 #define DTD_XFER_HEIGHT_SHFT 0
216 #define DTD_PKT_TYPE_MASK 0x1f
217 #define DTD_PKT_TYPE_SHFT 27
218 #define DTD_MODE_MASK 0x01
219 #define DTD_MODE_SHFT 26
220 #define DTD_DIR_MASK 0x01
221 #define DTD_DIR_SHFT 25
222 #define DTD_CHAN_MASK 0x01ff
223 #define DTD_CHAN_SHFT 16
224 #define DTD_PRI_MASK 0x0f
225 #define DTD_PRI_SHFT 9
226 #define DTD_NEXT_CHAN_MASK 0x01ff
227 #define DTD_NEXT_CHAN_SHFT 0
229 /* frame_width_height */
230 #define DTD_FRAME_WIDTH_MASK 0xffff
231 #define DTD_FRAME_WIDTH_SHFT 16
232 #define DTD_FRAME_HEIGHT_MASK 0xffff
233 #define DTD_FRAME_HEIGHT_SHFT 0
236 #define DTD_H_START_MASK 0xffff
237 #define DTD_H_START_SHFT 16
238 #define DTD_V_START_MASK 0xffff
239 #define DTD_V_START_SHFT 0
241 #define DTD_DESC_START_MASK 0xffffffe0
242 #define DTD_DESC_START_SHIFT 5
243 #define DTD_WRITE_DESC_MASK 0x01
244 #define DTD_WRITE_DESC_SHIFT 2
245 #define DTD_DROP_DATA_MASK 0x01
246 #define DTD_DROP_DATA_SHIFT 1
247 #define DTD_USE_DESC_MASK 0x01
248 #define DTD_USE_DESC_SHIFT 0
250 /* max_width_height */
251 #define DTD_MAX_WIDTH_MASK 0x07
252 #define DTD_MAX_WIDTH_SHFT 4
253 #define DTD_MAX_HEIGHT_MASK 0x07
254 #define DTD_MAX_HEIGHT_SHFT 0
256 static inline u32
dtd_type_ctl_stride(int type
, bool notify
, int field
,
257 bool one_d
, bool even_line_skip
, bool odd_line_skip
,
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
) |
267 static inline u32
dtd_xfer_length_height(int line_length
, int xfer_height
)
269 return (line_length
<< DTD_LINE_LENGTH_SHFT
) | xfer_height
;
272 static inline u32
dtd_pkt_ctl(bool mode
, bool dir
, int chan
, int pri
,
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
;
280 static inline u32
dtd_frame_width_height(int width
, int height
)
282 return (width
<< DTD_FRAME_WIDTH_SHFT
) | height
;
285 static inline u32
dtd_desc_write_addr(unsigned int addr
, bool write_desc
,
286 bool drop_data
, bool use_desc
)
288 return (addr
& DTD_DESC_START_MASK
) |
289 (write_desc
<< DTD_WRITE_DESC_SHIFT
) |
290 (drop_data
<< DTD_DROP_DATA_SHIFT
) |
294 static inline u32
dtd_start_h_v(int h_start
, int v_start
)
296 return (h_start
<< DTD_H_START_SHFT
) | v_start
;
299 static inline u32
dtd_max_width_height(int max_width
, int max_height
)
301 return (max_width
<< DTD_MAX_WIDTH_SHFT
) | max_height
;
304 static inline int dtd_get_data_type(struct vpdma_dtd
*dtd
)
306 return dtd
->type_ctl_stride
>> DTD_DATA_TYPE_SHFT
;
309 static inline bool dtd_get_notify(struct vpdma_dtd
*dtd
)
311 return (dtd
->type_ctl_stride
>> DTD_NOTIFY_SHFT
) & DTD_NOTIFY_MASK
;
314 static inline int dtd_get_field(struct vpdma_dtd
*dtd
)
316 return (dtd
->type_ctl_stride
>> DTD_FIELD_SHFT
) & DTD_FIELD_MASK
;
319 static inline bool dtd_get_1d(struct vpdma_dtd
*dtd
)
321 return (dtd
->type_ctl_stride
>> DTD_1D_SHFT
) & DTD_1D_MASK
;
324 static inline bool dtd_get_even_line_skip(struct vpdma_dtd
*dtd
)
326 return (dtd
->type_ctl_stride
>> DTD_EVEN_LINE_SKIP_SHFT
)
327 & DTD_EVEN_LINE_SKIP_MASK
;
330 static inline bool dtd_get_odd_line_skip(struct vpdma_dtd
*dtd
)
332 return (dtd
->type_ctl_stride
>> DTD_ODD_LINE_SKIP_SHFT
)
333 & DTD_ODD_LINE_SKIP_MASK
;
336 static inline int dtd_get_line_stride(struct vpdma_dtd
*dtd
)
338 return dtd
->type_ctl_stride
& DTD_LINE_STRIDE_MASK
;
341 static inline int dtd_get_line_length(struct vpdma_dtd
*dtd
)
343 return dtd
->xfer_length_height
>> DTD_LINE_LENGTH_SHFT
;
346 static inline int dtd_get_xfer_height(struct vpdma_dtd
*dtd
)
348 return dtd
->xfer_length_height
& DTD_XFER_HEIGHT_MASK
;
351 static inline int dtd_get_pkt_type(struct vpdma_dtd
*dtd
)
353 return dtd
->pkt_ctl
>> DTD_PKT_TYPE_SHFT
;
356 static inline bool dtd_get_mode(struct vpdma_dtd
*dtd
)
358 return (dtd
->pkt_ctl
>> DTD_MODE_SHFT
) & DTD_MODE_MASK
;
361 static inline bool dtd_get_dir(struct vpdma_dtd
*dtd
)
363 return (dtd
->pkt_ctl
>> DTD_DIR_SHFT
) & DTD_DIR_MASK
;
366 static inline int dtd_get_chan(struct vpdma_dtd
*dtd
)
368 return (dtd
->pkt_ctl
>> DTD_CHAN_SHFT
) & DTD_CHAN_MASK
;
371 static inline int dtd_get_priority(struct vpdma_dtd
*dtd
)
373 return (dtd
->pkt_ctl
>> DTD_PRI_SHFT
) & DTD_PRI_MASK
;
376 static inline int dtd_get_next_chan(struct vpdma_dtd
*dtd
)
378 return (dtd
->pkt_ctl
>> DTD_NEXT_CHAN_SHFT
) & DTD_NEXT_CHAN_MASK
;
381 static inline int dtd_get_frame_width(struct vpdma_dtd
*dtd
)
383 return dtd
->frame_width_height
>> DTD_FRAME_WIDTH_SHFT
;
386 static inline int dtd_get_frame_height(struct vpdma_dtd
*dtd
)
388 return dtd
->frame_width_height
& DTD_FRAME_HEIGHT_MASK
;
391 static inline int dtd_get_desc_write_addr(struct vpdma_dtd
*dtd
)
393 return dtd
->desc_write_addr
& DTD_DESC_START_MASK
;
396 static inline bool dtd_get_write_desc(struct vpdma_dtd
*dtd
)
398 return (dtd
->desc_write_addr
>> DTD_WRITE_DESC_SHIFT
) &
402 static inline bool dtd_get_drop_data(struct vpdma_dtd
*dtd
)
404 return (dtd
->desc_write_addr
>> DTD_DROP_DATA_SHIFT
) &
408 static inline bool dtd_get_use_desc(struct vpdma_dtd
*dtd
)
410 return dtd
->desc_write_addr
& DTD_USE_DESC_MASK
;
413 static inline int dtd_get_h_start(struct vpdma_dtd
*dtd
)
415 return dtd
->start_h_v
>> DTD_H_START_SHFT
;
418 static inline int dtd_get_v_start(struct vpdma_dtd
*dtd
)
420 return dtd
->start_h_v
& DTD_V_START_MASK
;
423 static inline int dtd_get_max_width(struct vpdma_dtd
*dtd
)
425 return (dtd
->max_width_height
>> DTD_MAX_WIDTH_SHFT
) &
429 static inline int dtd_get_max_height(struct vpdma_dtd
*dtd
)
431 return (dtd
->max_width_height
>> DTD_MAX_HEIGHT_SHFT
) &
436 * configuration descriptor
440 u32 dest_addr_offset
;
444 u32 block_len
; /* in words */
448 u32 ctl_payload_len
; /* in words */
451 /* Configuration descriptor specifics */
453 #define CFD_PKT_TYPE 0xb
456 #define CFD_INDIRECT 0
457 #define CFD_CLS_ADB 0
458 #define CFD_CLS_BLOCK 1
461 #define CFD__BLOCK_LEN_MASK 0xffff
462 #define CFD__BLOCK_LEN_SHFT 0
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
476 static inline u32
cfd_pkt_payload_len(bool direct
, int cls
, int dest
,
479 return (CFD_PKT_TYPE
<< CFD_PKT_TYPE_SHFT
) |
480 (direct
<< CFD_DIRECT_SHFT
) |
481 (cls
<< CFD_CLASS_SHFT
) |
482 (dest
<< CFD_DEST_SHFT
) |
486 static inline int cfd_get_pkt_type(struct vpdma_cfd
*cfd
)
488 return cfd
->ctl_payload_len
>> CFD_PKT_TYPE_SHFT
;
491 static inline bool cfd_get_direct(struct vpdma_cfd
*cfd
)
493 return (cfd
->ctl_payload_len
>> CFD_DIRECT_SHFT
) & CFD_DIRECT_MASK
;
496 static inline bool cfd_get_class(struct vpdma_cfd
*cfd
)
498 return (cfd
->ctl_payload_len
>> CFD_CLASS_SHFT
) & CFD_CLASS_MASK
;
501 static inline int cfd_get_dest(struct vpdma_cfd
*cfd
)
503 return (cfd
->ctl_payload_len
>> CFD_DEST_SHFT
) & CFD_DEST_MASK
;
506 static inline int cfd_get_payload_len(struct vpdma_cfd
*cfd
)
508 return cfd
->ctl_payload_len
& CFD_PAYLOAD_LEN_MASK
;
521 u32 pixel_line_count
;
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
544 #define CTD_PKT_TYPE 0xc
547 #define CTD_TIMER_VALUE_MASK 0xffff
548 #define CTD_TIMER_VALUE_SHFT 0
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
557 #define CTD_LIST_SIZE_MASK 0xffff
558 #define CTD_LIST_SIZE_SHFT 0
561 #define CTD_EVENT_MASK 0x0f
562 #define CTD_EVENT_SHFT 0
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
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
580 static inline u32
ctd_pixel_line_count(int pixel_count
, int line_count
)
582 return (pixel_count
<< CTD_PIXEL_COUNT_SHFT
) | line_count
;
585 static inline u32
ctd_set_fid_ctl(int fid0
, int fid1
, int fid2
)
587 return (fid2
<< CTD_FID2_SHFT
) | (fid1
<< CTD_FID1_SHFT
) | fid0
;
590 static inline u32
ctd_type_source_ctl(int source
, int control
)
592 return (CTD_PKT_TYPE
<< CTD_PKT_TYPE_SHFT
) |
593 (source
<< CTD_SOURCE_SHFT
) | control
;
596 static inline u32
ctd_get_pixel_count(struct vpdma_ctd
*ctd
)
598 return ctd
->pixel_line_count
>> CTD_PIXEL_COUNT_SHFT
;
601 static inline int ctd_get_line_count(struct vpdma_ctd
*ctd
)
603 return ctd
->pixel_line_count
& CTD_LINE_COUNT_MASK
;
606 static inline int ctd_get_event(struct vpdma_ctd
*ctd
)
608 return ctd
->event
& CTD_EVENT_MASK
;
611 static inline int ctd_get_fid2_ctl(struct vpdma_ctd
*ctd
)
613 return (ctd
->fid_ctl
>> CTD_FID2_SHFT
) & CTD_FID2_MASK
;
616 static inline int ctd_get_fid1_ctl(struct vpdma_ctd
*ctd
)
618 return (ctd
->fid_ctl
>> CTD_FID1_SHFT
) & CTD_FID1_MASK
;
621 static inline int ctd_get_fid0_ctl(struct vpdma_ctd
*ctd
)
623 return ctd
->fid_ctl
& CTD_FID2_MASK
;
626 static inline int ctd_get_pkt_type(struct vpdma_ctd
*ctd
)
628 return ctd
->type_source_ctl
>> CTD_PKT_TYPE_SHFT
;
631 static inline int ctd_get_source(struct vpdma_ctd
*ctd
)
633 return (ctd
->type_source_ctl
>> CTD_SOURCE_SHFT
) & CTD_SOURCE_MASK
;
636 static inline int ctd_get_ctl(struct vpdma_ctd
*ctd
)
638 return ctd
->type_source_ctl
& CTD_CONTROL_MASK
;