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