1 /************************************************************************** 2 * Copyright (c) 2007, Intel Corporation. 3 * All Rights Reserved. 4 * Copyright (c) 2008, Tungsten Graphics Inc. Cedar Park, TX., USA. 5 * All Rights Reserved. 6 * 7 * This program is free software; you can redistribute it and/or modify it 8 * under the terms and conditions of the GNU General Public License, 9 * version 2, as published by the Free Software Foundation. 10 * 11 * This program is distributed in the hope it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 14 * more details. 15 * 16 * You should have received a copy of the GNU General Public License along with 17 * this program; if not, write to the Free Software Foundation, Inc., 18 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 19 * 20 **************************************************************************/ 21 22 #ifndef _PSB_DRM_H_ 23 #define _PSB_DRM_H_ 24 25 #if defined(__linux__) && !defined(__KERNEL__) 26 #include <stdbool.h> 27 #include <stdint.h> 28 #include <linux/types.h> 29 #include "drm_mode.h" 30 #endif 31 32 33 34 /* 35 * Menlow/MRST graphics driver package version 36 * a.b.c.xxxx 37 * a - Product Family: 5 - Linux 38 * b - Major Release Version: 0 - non-Gallium (Unbuntu) 39 * 1 - Gallium (Moblin2) 40 * 2 - IMG (Moblin2) 41 * 3 - IMG (Meego) 42 * 4 - IMG (Android) 43 * c - Hotfix Release 44 * xxxx - Graphics internal build # 45 */ 46 #define PSB_PACKAGE_VERSION "5.6.0.1202" 47 48 #define DRM_PSB_SAREA_MAJOR 0 49 #define DRM_PSB_SAREA_MINOR 2 50 #define PSB_FIXED_SHIFT 16 51 52 #define PSB_NUM_PIPE 3 53 54 /* 55 * Public memory types. 56 */ 57 58 #define DRM_PSB_MEM_MMU TTM_PL_PRIV1 59 #define DRM_PSB_FLAG_MEM_MMU TTM_PL_FLAG_PRIV1 60 61 #define TTM_PL_CI TTM_PL_PRIV0 62 #define TTM_PL_FLAG_CI TTM_PL_FLAG_PRIV0 63 #define TTM_PL_RAR TTM_PL_PRIV2 64 #define TTM_PL_FLAG_RAR TTM_PL_FLAG_PRIV2 65 #define TTM_PL_IMR TTM_PL_PRIV2 66 #define TTM_PL_FLAG_IMR TTM_PL_FLAG_PRIV2 67 68 #define DRM_PSB_MEM_MMU_TILING TTM_PL_PRIV3 69 #define DRM_PSB_FLAG_MEM_MMU_TILING TTM_PL_FLAG_PRIV3 70 71 72 /*Status of the command sent to the gfx device.*/ 73 typedef enum { 74 DRM_CMD_SUCCESS, 75 DRM_CMD_FAILED, 76 DRM_CMD_HANG 77 } drm_cmd_status_t; 78 79 struct drm_psb_scanout { 80 uint32_t buffer_id; /* DRM buffer object ID */ 81 uint32_t rotation; /* Rotation as in RR_rotation definitions */ 82 uint32_t stride; /* Buffer stride in bytes */ 83 uint32_t depth; /* Buffer depth in bits (NOT) bpp */ 84 uint32_t width; /* Buffer width in pixels */ 85 uint32_t height; /* Buffer height in lines */ 86 int32_t transform[3][3]; /* Buffer composite transform */ 87 /* (scaling, rot, reflect) */ 88 }; 89 90 #define DRM_PSB_SAREA_OWNERS 16 91 #define DRM_PSB_SAREA_OWNER_2D 0 92 #define DRM_PSB_SAREA_OWNER_3D 1 93 #define DRM_PSB_SAREA_SCANOUTS 3 94 95 struct drm_psb_sarea { 96 /* Track changes of this data structure */ 97 98 uint32_t major; 99 uint32_t minor; 100 101 /* Last context to touch part of hw */ 102 uint32_t ctx_owners[DRM_PSB_SAREA_OWNERS]; 103 104 /* Definition of front- and rotated buffers */ 105 uint32_t num_scanouts; 106 struct drm_psb_scanout scanouts[DRM_PSB_SAREA_SCANOUTS]; 107 108 int planeA_x; 109 int planeA_y; 110 int planeA_w; 111 int planeA_h; 112 int planeB_x; 113 int planeB_y; 114 int planeB_w; 115 int planeB_h; 116 /* Number of active scanouts */ 117 uint32_t num_active_scanouts; 118 }; 119 120 #define PSB_RELOC_MAGIC 0x67676767 121 #define PSB_RELOC_SHIFT_MASK 0x0000FFFF 122 #define PSB_RELOC_SHIFT_SHIFT 0 123 #define PSB_RELOC_ALSHIFT_MASK 0xFFFF0000 124 #define PSB_RELOC_ALSHIFT_SHIFT 16 125 126 /* Offset of the indicated buffer*/ 127 #define PSB_RELOC_OP_OFFSET 0 128 129 struct drm_psb_reloc { 130 uint32_t reloc_op; 131 uint32_t where; /* offset in destination buffer */ 132 uint32_t buffer; /* Buffer reloc applies to */ 133 uint32_t mask; /* Destination format: */ 134 uint32_t shift; /* Destination format: */ 135 uint32_t pre_add; /* Destination format: */ 136 uint32_t background; /* Destination add */ 137 uint32_t dst_buffer; /* Destination buffer. Index into buffer_list */ 138 uint32_t arg0; /* Reloc-op dependant */ 139 uint32_t arg1; 140 }; 141 142 143 #define PSB_GPU_ACCESS_READ (1ULL << 32) 144 #define PSB_GPU_ACCESS_WRITE (1ULL << 33) 145 #define PSB_GPU_ACCESS_MASK (PSB_GPU_ACCESS_READ | PSB_GPU_ACCESS_WRITE) 146 147 #define PSB_BO_FLAG_COMMAND (1ULL << 52) 148 149 #define PSB_ENGINE_2D 2 150 #define PSB_ENGINE_DECODE 0 151 #define PSB_ENGINE_VIDEO 0 152 #define LNC_ENGINE_ENCODE 1 153 #ifdef MERRIFIELD 154 #define PSB_NUM_ENGINES 7 155 #else 156 #define PSB_NUM_ENGINES 2 157 #endif 158 #define VSP_ENGINE_VPP 6 159 160 /* 161 * For this fence class we have a couple of 162 * fence types. 163 */ 164 165 #define _PSB_FENCE_EXE_SHIFT 0 166 #define _PSB_FENCE_FEEDBACK_SHIFT 4 167 168 #define _PSB_FENCE_TYPE_EXE (1 << _PSB_FENCE_EXE_SHIFT) 169 #define _PSB_FENCE_TYPE_FEEDBACK (1 << _PSB_FENCE_FEEDBACK_SHIFT) 170 171 #define PSB_FEEDBACK_OP_VISTEST (1 << 0) 172 173 struct drm_psb_extension_rep { 174 int32_t exists; 175 uint32_t driver_ioctl_offset; 176 uint32_t sarea_offset; 177 uint32_t major; 178 uint32_t minor; 179 uint32_t pl; 180 }; 181 182 #define DRM_PSB_EXT_NAME_LEN 128 183 184 union drm_psb_extension_arg { 185 char extension[DRM_PSB_EXT_NAME_LEN]; 186 struct drm_psb_extension_rep rep; 187 }; 188 189 #define PSB_NOT_FENCE (1 << 0) 190 #define PSB_MEM_CLFLUSH (1 << 1) 191 192 struct psb_validate_req { 193 uint64_t set_flags; 194 uint64_t clear_flags; 195 uint64_t next; 196 uint64_t presumed_gpu_offset; 197 uint32_t buffer_handle; 198 uint32_t presumed_flags; 199 uint32_t pad64; 200 uint32_t unfence_flag; 201 }; 202 203 struct psb_validate_rep { 204 uint64_t gpu_offset; 205 uint32_t placement; 206 uint32_t fence_type_mask; 207 }; 208 209 #define PSB_USE_PRESUMED (1 << 0) 210 211 struct psb_validate_arg { 212 uint64_t handled; 213 uint64_t ret; 214 union { 215 struct psb_validate_req req; 216 struct psb_validate_rep rep; 217 } d; 218 }; 219 220 221 #define DRM_PSB_FENCE_NO_USER (1 << 0) 222 223 struct psb_ttm_fence_rep { 224 uint32_t handle; 225 uint32_t fence_class; 226 uint32_t fence_type; 227 uint32_t signaled_types; 228 uint32_t error; 229 }; 230 231 typedef struct drm_psb_cmdbuf_arg { 232 uint64_t buffer_list; /* List of buffers to validate */ 233 uint64_t fence_arg; 234 235 uint32_t cmdbuf_handle; /* 2D Command buffer object or, */ 236 uint32_t cmdbuf_offset; /* rasterizer reg-value pairs */ 237 uint32_t cmdbuf_size; 238 239 uint32_t reloc_handle; /* Reloc buffer object */ 240 uint32_t reloc_offset; 241 uint32_t num_relocs; 242 243 /* Not implemented yet */ 244 uint32_t fence_flags; 245 uint32_t engine; 246 247 } drm_psb_cmdbuf_arg_t; 248 249 typedef struct drm_psb_pageflip_arg { 250 uint32_t flip_offset; 251 uint32_t stride; 252 } drm_psb_pageflip_arg_t; 253 254 typedef enum { 255 LNC_VIDEO_DEVICE_INFO, 256 LNC_VIDEO_GETPARAM_IMR_INFO, 257 LNC_VIDEO_GETPARAM_CI_INFO, 258 LNC_VIDEO_FRAME_SKIP, 259 IMG_VIDEO_DECODE_STATUS, 260 IMG_VIDEO_NEW_CONTEXT, 261 IMG_VIDEO_RM_CONTEXT, 262 IMG_VIDEO_UPDATE_CONTEXT, 263 IMG_VIDEO_MB_ERROR, 264 IMG_VIDEO_SET_DISPLAYING_FRAME, 265 IMG_VIDEO_GET_DISPLAYING_FRAME, 266 IMG_VIDEO_GET_HDMI_STATE, 267 IMG_VIDEO_SET_HDMI_STATE, 268 PNW_VIDEO_QUERY_ENTRY, 269 IMG_DISPLAY_SET_WIDI_EXT_STATE, 270 IMG_VIDEO_IED_STATE 271 } lnc_getparam_key_t; 272 273 struct drm_lnc_video_getparam_arg { 274 uint64_t key; 275 uint64_t arg; /* argument pointer */ 276 uint64_t value; /* feed back pointer */ 277 }; 278 279 struct drm_video_displaying_frameinfo { 280 uint32_t buf_handle; 281 uint32_t width; 282 uint32_t height; 283 uint32_t size; /* buffer size */ 284 uint32_t format; /* fourcc */ 285 uint32_t luma_stride; /* luma stride */ 286 uint32_t chroma_u_stride; /* chroma stride */ 287 uint32_t chroma_v_stride; 288 uint32_t luma_offset; /* luma offset from the beginning of the memory */ 289 uint32_t chroma_u_offset; /* UV offset from the beginning of the memory */ 290 uint32_t chroma_v_offset; 291 uint32_t reserved; 292 }; 293 294 /* 295 * Feedback components: 296 */ 297 298 /* 299 * Vistest component. The number of these in the feedback buffer 300 * equals the number of vistest breakpoints + 1. 301 * This is currently the only feedback component. 302 */ 303 304 struct drm_psb_vistest { 305 uint32_t vt[8]; 306 }; 307 308 struct drm_psb_sizes_arg { 309 uint32_t ta_mem_size; 310 uint32_t mmu_size; 311 uint32_t pds_size; 312 uint32_t rastgeom_size; 313 uint32_t tt_size; 314 uint32_t vram_size; 315 }; 316 317 struct drm_psb_hist_status_arg { 318 uint32_t buf[32]; 319 }; 320 321 struct drm_psb_dpst_lut_arg { 322 uint8_t lut[256]; 323 int output_id; 324 }; 325 326 struct mrst_timing_info { 327 uint16_t pixel_clock; 328 uint8_t hactive_lo; 329 uint8_t hblank_lo; 330 uint8_t hblank_hi:4; 331 uint8_t hactive_hi:4; 332 uint8_t vactive_lo; 333 uint8_t vblank_lo; 334 uint8_t vblank_hi:4; 335 uint8_t vactive_hi:4; 336 uint8_t hsync_offset_lo; 337 uint8_t hsync_pulse_width_lo; 338 uint8_t vsync_pulse_width_lo:4; 339 uint8_t vsync_offset_lo:4; 340 uint8_t vsync_pulse_width_hi:2; 341 uint8_t vsync_offset_hi:2; 342 uint8_t hsync_pulse_width_hi:2; 343 uint8_t hsync_offset_hi:2; 344 uint8_t width_mm_lo; 345 uint8_t height_mm_lo; 346 uint8_t height_mm_hi:4; 347 uint8_t width_mm_hi:4; 348 uint8_t hborder; 349 uint8_t vborder; 350 uint8_t unknown0:1; 351 uint8_t hsync_positive:1; 352 uint8_t vsync_positive:1; 353 uint8_t separate_sync:2; 354 uint8_t stereo:1; 355 uint8_t unknown6:1; 356 uint8_t interlaced:1; 357 } __attribute__((packed)); 358 359 struct gct_r10_timing_info { 360 uint16_t pixel_clock; 361 uint32_t hactive_lo:8; 362 uint32_t hactive_hi:4; 363 uint32_t hblank_lo:8; 364 uint32_t hblank_hi:4; 365 uint32_t hsync_offset_lo:8; 366 uint16_t hsync_offset_hi:2; 367 uint16_t hsync_pulse_width_lo:8; 368 uint16_t hsync_pulse_width_hi:2; 369 uint16_t hsync_positive:1; 370 uint16_t rsvd_1:3; 371 uint8_t vactive_lo:8; 372 uint16_t vactive_hi:4; 373 uint16_t vblank_lo:8; 374 uint16_t vblank_hi:4; 375 uint16_t vsync_offset_lo:4; 376 uint16_t vsync_offset_hi:2; 377 uint16_t vsync_pulse_width_lo:4; 378 uint16_t vsync_pulse_width_hi:2; 379 uint16_t vsync_positive:1; 380 uint16_t rsvd_2:3; 381 } __attribute__((packed)); 382 383 struct mrst_panel_descriptor_v1 { 384 uint32_t Panel_Port_Control; /* 1 dword, Register 0x61180 if LVDS */ 385 /* 0x61190 if MIPI */ 386 uint32_t Panel_Power_On_Sequencing;/*1 dword,Register 0x61208,*/ 387 uint32_t Panel_Power_Off_Sequencing;/*1 dword,Register 0x6120C,*/ 388 uint32_t Panel_Power_Cycle_Delay_and_Reference_Divisor;/* 1 dword */ 389 /* Register 0x61210 */ 390 struct mrst_timing_info DTD;/*18 bytes, Standard definition */ 391 uint16_t Panel_Backlight_Inverter_Descriptor;/* 16 bits, as follows */ 392 /* Bit 0, Frequency, 15 bits,0 - 32767Hz */ 393 /* Bit 15, Polarity, 1 bit, 0: Normal, 1: Inverted */ 394 uint16_t Panel_MIPI_Display_Descriptor; 395 /*16 bits, Defined as follows: */ 396 /* if MIPI, 0x0000 if LVDS */ 397 /* Bit 0, Type, 2 bits, */ 398 /* 0: Type-1, */ 399 /* 1: Type-2, */ 400 /* 2: Type-3, */ 401 /* 3: Type-4 */ 402 /* Bit 2, Pixel Format, 4 bits */ 403 /* Bit0: 16bpp (not supported in LNC), */ 404 /* Bit1: 18bpp loosely packed, */ 405 /* Bit2: 18bpp packed, */ 406 /* Bit3: 24bpp */ 407 /* Bit 6, Reserved, 2 bits, 00b */ 408 /* Bit 8, Minimum Supported Frame Rate, 6 bits, 0 - 63Hz */ 409 /* Bit 14, Reserved, 2 bits, 00b */ 410 } __attribute__((packed)); 411 412 struct mrst_panel_descriptor_v2 { 413 uint32_t Panel_Port_Control; /* 1 dword, Register 0x61180 if LVDS */ 414 /* 0x61190 if MIPI */ 415 uint32_t Panel_Power_On_Sequencing;/*1 dword,Register 0x61208,*/ 416 uint32_t Panel_Power_Off_Sequencing;/*1 dword,Register 0x6120C,*/ 417 uint8_t Panel_Power_Cycle_Delay_and_Reference_Divisor;/* 1 byte */ 418 /* Register 0x61210 */ 419 struct mrst_timing_info DTD;/*18 bytes, Standard definition */ 420 uint16_t Panel_Backlight_Inverter_Descriptor;/*16 bits, as follows*/ 421 /*Bit 0, Frequency, 16 bits, 0 - 32767Hz*/ 422 uint8_t Panel_Initial_Brightness;/* [7:0] 0 - 100% */ 423 /*Bit 7, Polarity, 1 bit,0: Normal, 1: Inverted*/ 424 uint16_t Panel_MIPI_Display_Descriptor; 425 /*16 bits, Defined as follows: */ 426 /* if MIPI, 0x0000 if LVDS */ 427 /* Bit 0, Type, 2 bits, */ 428 /* 0: Type-1, */ 429 /* 1: Type-2, */ 430 /* 2: Type-3, */ 431 /* 3: Type-4 */ 432 /* Bit 2, Pixel Format, 4 bits */ 433 /* Bit0: 16bpp (not supported in LNC), */ 434 /* Bit1: 18bpp loosely packed, */ 435 /* Bit2: 18bpp packed, */ 436 /* Bit3: 24bpp */ 437 /* Bit 6, Reserved, 2 bits, 00b */ 438 /* Bit 8, Minimum Supported Frame Rate, 6 bits, 0 - 63Hz */ 439 /* Bit 14, Reserved, 2 bits, 00b */ 440 } __attribute__((packed)); 441 442 union mrst_panel_rx { 443 struct { 444 uint16_t NumberOfLanes:2; /*Num of Lanes, 2 bits,0 = 1 lane,*/ 445 /* 1 = 2 lanes, 2 = 3 lanes, 3 = 4 lanes. */ 446 uint16_t MaxLaneFreq:3; /* 0: 100MHz, 1: 200MHz, 2: 300MHz, */ 447 /*3: 400MHz, 4: 500MHz, 5: 600MHz, 6: 700MHz, 7: 800MHz.*/ 448 uint16_t SupportedVideoTransferMode:2; /*0: Non-burst only */ 449 /* 1: Burst and non-burst */ 450 /* 2/3: Reserved */ 451 uint16_t HSClkBehavior:1; /*0: Continuous, 1: Non-continuous*/ 452 uint16_t DuoDisplaySupport:1; /*1 bit,0: No, 1: Yes*/ 453 uint16_t ECC_ChecksumCapabilities:1; /*1 bit,0: No, 1: Yes*/ 454 uint16_t BidirectionalCommunication:1; /*1 bit,0: No, 1: Yes */ 455 uint16_t Rsvd:5; /*5 bits,00000b */ 456 } panelrx; 457 uint16_t panel_receiver; 458 } __attribute__((packed)); 459 460 struct gct_ioctl_arg { 461 uint8_t bpi; /* boot panel index, number of panel used during boot */ 462 uint8_t pt; /* panel type, 4 bit field, 0=lvds, 1=mipi */ 463 struct mrst_timing_info DTD; /* timing info for the selected panel */ 464 uint32_t Panel_Port_Control; 465 uint32_t PP_On_Sequencing;/*1 dword,Register 0x61208,*/ 466 uint32_t PP_Off_Sequencing;/*1 dword,Register 0x6120C,*/ 467 uint32_t PP_Cycle_Delay; 468 uint16_t Panel_Backlight_Inverter_Descriptor; 469 uint16_t Panel_MIPI_Display_Descriptor; 470 } __attribute__((packed)); 471 472 473 struct gct_timing_desc_block { 474 uint16_t clock; 475 uint16_t hactive:12; 476 uint16_t hblank:12; 477 uint16_t hsync_start:10; 478 uint16_t hsync_end:10; 479 uint16_t hsync_polarity:1; 480 uint16_t h_reversed:3; 481 uint16_t vactive:12; 482 uint16_t vblank:12; 483 uint16_t vsync_start:6; 484 uint16_t vsync_end:6; 485 uint16_t vsync_polarity:1; 486 uint16_t v_reversed:3; 487 } __packed; 488 489 struct gct_display_desc_block { 490 uint8_t type:2; 491 uint8_t pxiel_format:4; 492 uint8_t mode:2; 493 uint8_t frame_rate:6; 494 uint8_t reserved:2; 495 } __attribute__((packed)); 496 497 struct gct_dsi_desc_block { 498 uint8_t lane_count:2; 499 uint8_t lane_frequency:3; 500 uint8_t transfer_mode:2; 501 uint8_t hs_clock_behavior:1; 502 uint8_t duo_display_support:1; 503 uint8_t ecc_caps:1; 504 uint8_t bdirect_support:1; 505 uint8_t reversed:5; 506 } __packed; 507 508 struct gct_bkl_desc_block { 509 uint16_t frequency; 510 uint8_t max_brightness:7; 511 uint8_t polarity:1; 512 } __packed; 513 514 struct gct_r20_clock_desc { 515 uint8_t pre_divisor:2; 516 uint16_t divisor:9; 517 uint8_t post_divisor:4; 518 uint8_t pll_bypass:1; 519 uint8_t cck_clock_divisor:1; 520 uint8_t reserved:7; 521 } __packed; 522 523 struct gct_r20_panel_info { 524 uint16_t width; 525 uint16_t height; 526 } __packed; 527 528 struct gct_r20_panel_mode { 529 uint8_t mode:1; 530 uint16_t reserved:15; 531 } __packed; 532 533 struct gct_r20_dsi_desc { 534 uint8_t num_dsi_lanes:2; 535 uint16_t reserved:14; 536 } __packed; 537 538 struct gct_r20_panel_desc { 539 uint8_t panel_name[16]; 540 struct gct_timing_desc_block timing; 541 struct gct_r20_clock_desc clock_desc; 542 struct gct_r20_panel_info panel_info; 543 struct gct_r20_panel_mode panel_mode; 544 struct gct_r20_dsi_desc dsi_desc; 545 uint32_t early_init_seq; 546 uint32_t late_init_seq; 547 } __packed; 548 549 struct gct_r11_panel_desc { 550 uint8_t panel_name[16]; 551 struct gct_timing_desc_block timing; 552 struct gct_display_desc_block display; 553 struct gct_dsi_desc_block dsi; 554 struct gct_bkl_desc_block bkl; 555 uint32_t early_init_seq; 556 uint32_t late_init_seq; 557 } __packed; 558 559 struct gct_r10_panel_desc { 560 struct gct_timing_desc_block timing; 561 struct gct_display_desc_block display; 562 struct gct_dsi_desc_block dsi; 563 struct gct_bkl_desc_block bkl; 564 uint32_t early_init_seq; 565 uint32_t late_init_seq; 566 uint8_t reversed[4]; 567 } __packed; 568 569 struct intel_mid_vbt { 570 char signature[4]; /*4 bytes,"$GCT" */ 571 uint8_t revision; /*1 byte GCT version*/ 572 uint8_t checksum; /*1 byte checksum*/ 573 uint16_t size; /*2 byte size of checksumed data*/ 574 uint8_t num_of_panel_desc; /*1 byte number of panel descriptor*/ 575 uint8_t primary_panel_idx; /*1 byte primary panel descriptor idx*/ 576 uint8_t secondary_panel_idx; /*1 byte secondary panel desc idx*/ 577 uint8_t splash_flag; /*1 byte bit 0 is to disable splash*/ 578 uint8_t reserved[4]; /*[0..1] relates to GPU burst for R20*/ 579 void *panel_descs; 580 } __packed; 581 582 struct mrst_vbt { 583 char Signature[4]; /*4 bytes,"$GCT" */ 584 uint8_t Revision; /*1 byte */ 585 uint8_t Size; /*1 byte */ 586 uint8_t Checksum; /*1 byte,Calculated */ 587 void *mrst_gct; 588 } __attribute__ ((packed)); 589 590 struct mrst_gct_v1 { /* expect this table to change per customer request*/ 591 union { /*8 bits,Defined as follows: */ 592 struct { 593 uint8_t PanelType:4; /*4 bits, Bit field for panels*/ 594 /* 0 - 3: 0 = LVDS, 1 = MIPI*/ 595 /*2 bits,Specifies which of the*/ 596 uint8_t BootPanelIndex:2; 597 /* 4 panels to use by default*/ 598 uint8_t BootMIPI_DSI_RxIndex:2; /*Specifies which of*/ 599 /* the 4 MIPI DSI receivers to use*/ 600 } PD; 601 uint8_t PanelDescriptor; 602 }; 603 struct mrst_panel_descriptor_v1 panel[4];/*panel descrs,38 bytes each*/ 604 union mrst_panel_rx panelrx[4]; /* panel receivers*/ 605 } __attribute__((packed)); 606 607 struct mrst_gct_v2 { /* expect this table to change per customer request*/ 608 union { /*8 bits,Defined as follows: */ 609 struct { 610 uint8_t PanelType:4; /*4 bits, Bit field for panels*/ 611 /* 0 - 3: 0 = LVDS, 1 = MIPI*/ 612 /*2 bits,Specifies which of the*/ 613 uint8_t BootPanelIndex:2; 614 /* 4 panels to use by default*/ 615 uint8_t BootMIPI_DSI_RxIndex:2; /*Specifies which of*/ 616 /* the 4 MIPI DSI receivers to use*/ 617 } PD; 618 uint8_t PanelDescriptor; 619 }; 620 struct mrst_panel_descriptor_v2 panel[4];/*panel descrs,38 bytes each*/ 621 union mrst_panel_rx panelrx[4]; /* panel receivers*/ 622 } __attribute__((packed)); 623 624 #define PSB_DC_CRTC_SAVE 0x01 625 #define PSB_DC_CRTC_RESTORE 0x02 626 #define PSB_DC_OUTPUT_SAVE 0x04 627 #define PSB_DC_OUTPUT_RESTORE 0x08 628 #define PSB_DC_CRTC_MASK 0x03 629 #define PSB_DC_OUTPUT_MASK 0x0C 630 631 struct drm_psb_dc_state_arg { 632 uint32_t flags; 633 uint32_t obj_id; 634 }; 635 636 struct drm_psb_mode_operation_arg { 637 uint32_t obj_id; 638 uint16_t operation; 639 struct drm_mode_modeinfo mode; 640 void *data; 641 }; 642 643 struct drm_psb_stolen_memory_arg { 644 uint32_t base; 645 uint32_t size; 646 }; 647 648 /*Display Register Bits*/ 649 #define REGRWBITS_PFIT_CONTROLS (1 << 0) 650 #define REGRWBITS_PFIT_AUTOSCALE_RATIOS (1 << 1) 651 #define REGRWBITS_PFIT_PROGRAMMED_SCALE_RATIOS (1 << 2) 652 #define REGRWBITS_PIPEASRC (1 << 3) 653 #define REGRWBITS_PIPEBSRC (1 << 4) 654 #define REGRWBITS_VTOTAL_A (1 << 5) 655 #define REGRWBITS_VTOTAL_B (1 << 6) 656 #define REGRWBITS_DSPACNTR (1 << 8) 657 #define REGRWBITS_DSPBCNTR (1 << 9) 658 #define REGRWBITS_DSPCCNTR (1 << 10) 659 #define REGRWBITS_SPRITE_UPDATE (1 << 11) 660 #define REGRWBITS_PIPEASTAT (1 << 12) 661 #define REGRWBITS_INT_MASK (1 << 13) 662 #define REGRWBITS_INT_ENABLE (1 << 14) 663 #define REGRWBITS_DISPLAY_ALL (1 << 15) 664 /*Overlay Register Bits*/ 665 #define OV_REGRWBITS_OVADD (1 << 0) 666 #define OV_REGRWBITS_OGAM_ALL (1 << 1) 667 668 #define OVC_REGRWBITS_OVADD (1 << 2) 669 #define OVC_REGRWBITS_OGAM_ALL (1 << 3) 670 671 #define OV_REGRWBITS_WAIT_FLIP (1 << 4) 672 #define OVC_REGRWBITS_WAIT_FLIP (1 << 5) 673 #define OVSTATUS_REGRBIT_OVR_UPDT (1 << 6) 674 675 /*sprite update fields*/ 676 #define SPRITE_UPDATE_SURFACE (0x00000001UL) 677 #define SPRITE_UPDATE_CONTROL (0x00000002UL) 678 #define SPRITE_UPDATE_POSITION (0x00000004UL) 679 #define SPRITE_UPDATE_SIZE (0x00000008UL) 680 #define SPRITE_UPDATE_WAIT_VBLANK (0X00000010UL) 681 #define SPRITE_UPDATE_CONSTALPHA (0x00000020UL) 682 #define SPRITE_UPDATE_ALL (0x0000003fUL) 683 684 /*vsync operation*/ 685 #define VSYNC_ENABLE (1 << 0) 686 #define VSYNC_DISABLE (1 << 1) 687 #define VSYNC_WAIT (1 << 2) 688 #define GET_VSYNC_COUNT (1 << 3) 689 struct intel_overlay_context { 690 uint32_t index; 691 uint32_t pipe; 692 uint32_t ovadd; 693 }; 694 695 struct intel_sprite_context { 696 uint32_t update_mask; 697 /*plane index 0-A, 1-B, 2-C,etc*/ 698 uint32_t index; 699 uint32_t pipe; 700 701 uint32_t cntr; 702 uint32_t linoff; 703 uint32_t stride; 704 uint32_t pos; 705 uint32_t size; 706 uint32_t keyminval; 707 uint32_t keymask; 708 uint32_t surf; 709 uint32_t keymaxval; 710 uint32_t tileoff; 711 uint32_t contalpa; 712 }; 713 714 /* dependent macros*/ 715 #define INTEL_SPRITE_PLANE_NUM 3 716 #define INTEL_OVERLAY_PLANE_NUM 2 717 #define INTEL_DISPLAY_PLANE_NUM 5 718 /* Medfield */ 719 #define INTEL_MDFLD_SPRITE_PLANE_NUM 3 720 #define INTEL_MDFLD_OVERLAY_PLANE_NUM 2 721 #define INTEL_MDFLD_CURSOR_PLANE_NUM 3 722 #define INTEL_MDFLD_DISPLAY_PLANE_NUM 8 723 #define INTEL_MDFLD_DISPLAY_PIPE_NUM 3 724 /* Clovertrail+ */ 725 #define INTEL_CTP_SPRITE_PLANE_NUM 2 726 #define INTEL_CTP_OVERLAY_PLANE_NUM 1 727 #define INTEL_CTP_CURSOR_PLANE_NUM 2 728 #define INTEL_CTP_DISPLAY_PLANE_NUM 5 729 #define INTEL_CTP_DISPLAY_PIPE_NUM 2 730 731 #define INVALID_INDEX 0xffffffff 732 733 struct mdfld_plane_contexts { 734 uint32_t active_primaries; 735 uint32_t active_sprites; 736 uint32_t active_overlays; 737 struct intel_sprite_context primary_contexts[INTEL_SPRITE_PLANE_NUM]; 738 struct intel_sprite_context sprite_contexts[INTEL_SPRITE_PLANE_NUM]; 739 struct intel_overlay_context overlay_contexts[INTEL_OVERLAY_PLANE_NUM]; 740 }; 741 742 struct drm_psb_vsync_set_arg { 743 uint32_t vsync_operation_mask; 744 745 struct { 746 uint32_t pipe; 747 int vsync_pipe; 748 int vsync_count; 749 uint64_t timestamp; 750 } vsync; 751 }; 752 753 struct drm_psb_dc_info { 754 uint32_t pipe_count; 755 756 uint32_t primary_plane_count; 757 uint32_t sprite_plane_count; 758 uint32_t overlay_plane_count; 759 uint32_t cursor_plane_count; 760 }; 761 762 struct drm_psb_register_rw_arg { 763 uint32_t b_force_hw_on; 764 765 uint32_t display_read_mask; 766 uint32_t display_write_mask; 767 struct { 768 uint32_t pfit_controls; 769 uint32_t pfit_autoscale_ratios; 770 uint32_t pfit_programmed_scale_ratios; 771 uint32_t pipeasrc; 772 uint32_t pipebsrc; 773 uint32_t vtotal_a; 774 uint32_t vtotal_b; 775 uint32_t dspcntr_a; 776 uint32_t dspcntr_b; 777 uint32_t pipestat_a; 778 uint32_t int_mask; 779 uint32_t int_enable; 780 } display; 781 782 uint32_t overlay_read_mask; 783 uint32_t overlay_write_mask; 784 785 struct { 786 uint32_t OVADD; 787 uint32_t OGAMC0; 788 uint32_t OGAMC1; 789 uint32_t OGAMC2; 790 uint32_t OGAMC3; 791 uint32_t OGAMC4; 792 uint32_t OGAMC5; 793 uint32_t IEP_ENABLED; 794 uint32_t IEP_BLE_MINMAX; 795 uint32_t IEP_BSSCC_CONTROL; 796 uint32_t index; 797 uint32_t b_wait_vblank; 798 uint32_t b_wms; 799 uint32_t buffer_handle; 800 } overlay; 801 802 uint32_t vsync_operation_mask; 803 804 struct { 805 uint32_t pipe; 806 int vsync_pipe; 807 int vsync_count; 808 uint64_t timestamp; 809 } vsync; 810 811 uint32_t sprite_enable_mask; 812 uint32_t sprite_disable_mask; 813 814 struct { 815 uint32_t dspa_control; 816 uint32_t dspa_key_value; 817 uint32_t dspa_key_mask; 818 uint32_t dspc_control; 819 uint32_t dspc_stride; 820 uint32_t dspc_position; 821 uint32_t dspc_linear_offset; 822 uint32_t dspc_size; 823 uint32_t dspc_surface; 824 } sprite; 825 826 uint32_t subpicture_enable_mask; 827 uint32_t subpicture_disable_mask; 828 struct { 829 uint32_t CursorADDR; 830 uint32_t xPos; 831 uint32_t yPos; 832 uint32_t CursorSize; 833 } cursor; 834 uint32_t cursor_enable_mask; 835 uint32_t cursor_disable_mask; 836 837 uint32_t plane_enable_mask; 838 uint32_t plane_disable_mask; 839 840 uint32_t get_plane_state_mask; 841 842 struct { 843 uint32_t type; 844 uint32_t index; 845 uint32_t ctx; 846 } plane; 847 }; 848 849 enum { 850 PSB_DC_PLANE_ENABLED, 851 PSB_DC_PLANE_DISABLED, 852 }; 853 854 enum { 855 PSB_GTT_MAP_TYPE_MEMINFO = 0, 856 PSB_GTT_MAP_TYPE_BCD, 857 PSB_GTT_MAP_TYPE_BCD_INFO, 858 PSB_GTT_MAP_TYPE_VIRTUAL, 859 }; 860 861 struct psb_gtt_mapping_arg { 862 uint32_t type; 863 void *hKernelMemInfo; 864 uint32_t offset_pages; 865 uint32_t page_align; 866 uint32_t bcd_device_id; 867 uint32_t bcd_buffer_id; 868 uint32_t bcd_buffer_count; 869 uint32_t bcd_buffer_stride; 870 uint32_t vaddr; 871 uint32_t size; 872 }; 873 874 struct drm_psb_getpageaddrs_arg { 875 uint64_t handle; 876 uint64_t page_addrs; 877 uint64_t gtt_offset; 878 }; 879 880 881 #define MAX_SLICES_PER_PICTURE 72 882 struct psb_msvdx_mb_region { 883 uint32_t start; 884 uint32_t end; 885 }; 886 887 typedef struct drm_psb_msvdx_decode_status { 888 uint32_t num_region; 889 struct psb_msvdx_mb_region mb_regions[MAX_SLICES_PER_PICTURE]; 890 } drm_psb_msvdx_decode_status_t; 891 892 893 enum { 894 IDLE_CTRL_ENABLE = 0, 895 IDLE_CTRL_DISABLE, 896 IDLE_CTRL_ENTER, 897 IDLE_CTRL_EXIT 898 }; 899 900 struct drm_psb_idle_ctrl { 901 uint32_t cmd; 902 uint32_t value; 903 }; 904 905 /* Controlling the kernel modesetting buffers */ 906 907 #define DRM_PSB_KMS_OFF 0x00 908 #define DRM_PSB_KMS_ON 0x01 909 #define DRM_PSB_VT_LEAVE 0x02 910 #define DRM_PSB_VT_ENTER 0x03 911 #define DRM_PSB_EXTENSION 0x06 912 #define DRM_PSB_SIZES 0x07 913 #define DRM_PSB_FUSE_REG 0x08 914 #define DRM_PSB_VBT 0x09 915 #define DRM_PSB_DC_STATE 0x0A 916 #define DRM_PSB_ADB 0x0B 917 #define DRM_PSB_MODE_OPERATION 0x0C 918 #define DRM_PSB_STOLEN_MEMORY 0x0D 919 #define DRM_PSB_REGISTER_RW 0x0E 920 #define DRM_PSB_GTT_MAP 0x0F 921 #define DRM_PSB_GTT_UNMAP 0x10 922 #define DRM_PSB_GETPAGEADDRS 0x11 923 /** 924 * NOTE: Add new commands here, but increment 925 * the values below and increment their 926 * corresponding defines where they're 927 * defined elsewhere. 928 */ 929 #define DRM_PVR_RESERVED1 0x12 930 #define DRM_PVR_RESERVED2 0x13 931 #define DRM_PVR_RESERVED3 0x14 932 #define DRM_PVR_RESERVED4 0x15 933 #define DRM_PVR_RESERVED5 0x16 934 935 #define DRM_PSB_HIST_ENABLE 0x17 936 #define DRM_PSB_HIST_STATUS 0x18 937 #define DRM_PSB_UPDATE_GUARD 0x19 938 #define DRM_PSB_INIT_COMM 0x1A 939 #define DRM_PSB_DPST 0x1B 940 #define DRM_PSB_GAMMA 0x1C 941 #define DRM_PSB_DPST_BL 0x1D 942 943 #define DRM_PVR_RESERVED6 0x1E 944 945 #define DRM_PSB_GET_PIPE_FROM_CRTC_ID 0x1F 946 #define DRM_PSB_DPU_QUERY 0x20 947 #define DRM_PSB_DPU_DSR_ON 0x21 948 #define DRM_PSB_DPU_DSR_OFF 0x22 949 #define DRM_PSB_HDMI_FB_CMD 0x23 950 951 /* HDCP IOCTLs */ 952 #define DRM_PSB_QUERY_HDCP 0x24 953 #define DRM_PSB_VALIDATE_HDCP_KSV 0x25 954 #define DRM_PSB_GET_HDCP_STATUS 0x26 955 #define DRM_PSB_ENABLE_HDCP 0x27 956 #define DRM_PSB_DISABLE_HDCP 0x28 957 #define DRM_PSB_GET_HDCP_LINK_STATUS 0x2b 958 #define DRM_PSB_ENABLE_HDCP_REPEATER 0x2c 959 #define DRM_PSB_DISABLE_HDCP_REPEATER 0x2d 960 #define DRM_PSB_HDCP_REPEATER_PRESENT 0x2e 961 962 /* CSC IOCTLS */ 963 #define DRM_PSB_CSC_GAMMA_SETTING 0x29 964 #define DRM_PSB_SET_CSC 0x2a 965 966 /* IED session */ 967 #define DRM_PSB_ENABLE_IED_SESSION 0x30 968 #define DRM_PSB_DISABLE_IED_SESSION 0x31 969 970 /* VSYNC IOCTLS */ 971 #define DRM_PSB_VSYNC_SET 0x32 972 973 /* HDCP */ 974 #define DRM_PSB_HDCP_DISPLAY_IED_OFF 0x33 975 #define DRM_PSB_HDCP_DISPLAY_IED_ON 0x34 976 #define DRM_PSB_QUERY_HDCP_DISPLAY_IED_CAPS 0x35 977 978 /* DPST LEVEL */ 979 #define DRM_PSB_DPST_LEVEL 0x36 980 981 /* GET DC INFO IOCTLS */ 982 #define DRM_PSB_GET_DC_INFO 0x37 983 984 /* Panel type query, 0: command mode, 1: video mode */ 985 #define DRM_PSB_PANEL_QUERY 0x38 986 987 /* IDLE IOCTL*/ 988 #define DRM_PSB_IDLE_CTRL 0x39 989 990 /****BEGIN HDMI TEST IOCTLS ****/ 991 #define DRM_PSB_HDMITEST 0x3A 992 993 /* read an hdmi test register */ 994 #define HT_READ 1 995 /* write an hdmi test register */ 996 #define HT_WRITE 2 997 /* force power island on */ 998 #define HT_FORCEON 4 999 1000 typedef struct tagHDMITESTREGREADWRITE { 1001 /* register offset */ 1002 unsigned int reg; 1003 /* input/output value */ 1004 unsigned int data; 1005 /* OR'ed combo of HT_xx flags */ 1006 int mode; 1007 } drm_psb_hdmireg_t, *drm_psb_hdmireg_p; 1008 1009 /**** END HDMI TEST IOCTLS ****/ 1010 1011 1012 /* GET PANEL ORIENTATION INFO */ 1013 #define DRM_PSB_PANEL_ORIENTATION 0x3B 1014 1015 /* Update cursor position, input is intel_dc_cursor_ctx */ 1016 #define DRM_PSB_UPDATE_CURSOR_POS 0x3C 1017 1018 1019 /* Do not use IOCTL between 0x40 and 0x4F */ 1020 /* These will be reserved for OEM to use */ 1021 /* OEM IOCTLs */ 1022 #define DRM_OEM_RESERVED_START 0x40 1023 #define DRM_OEM_RESERVED_END 0x4F 1024 1025 1026 /* 1027 * TTM execbuf extension. 1028 */ 1029 #define DRM_PSB_TTM_START 0x50 1030 #define DRM_PSB_TTM_END 0x5F 1031 #if defined(PDUMP) 1032 #define DRM_PSB_CMDBUF (PVR_DRM_DBGDRV_CMD + 1) 1033 #else 1034 #define DRM_PSB_CMDBUF (DRM_PSB_TTM_START) 1035 #endif 1036 #define DRM_PSB_SCENE_UNREF (DRM_PSB_CMDBUF + 1) 1037 #define DRM_PSB_PLACEMENT_OFFSET (DRM_PSB_SCENE_UNREF + 1) 1038 1039 1040 1041 1042 #define DRM_PSB_DSR_ENABLE 0xfffffffe 1043 #define DRM_PSB_DSR_DISABLE 0xffffffff 1044 1045 struct drm_psb_csc_matrix { 1046 int pipe; 1047 int64_t matrix[9]; 1048 }__attribute__((packed)); 1049 1050 struct psb_drm_dpu_rect { 1051 int x, y; 1052 int width, height; 1053 }; 1054 1055 struct drm_psb_drv_dsr_off_arg { 1056 int screen; 1057 struct psb_drm_dpu_rect damage_rect; 1058 }; 1059 1060 1061 struct drm_psb_dev_info_arg { 1062 uint32_t num_use_attribute_registers; 1063 }; 1064 #define DRM_PSB_DEVINFO 0x01 1065 #define PSB_MODE_OPERATION_MODE_VALID 0x01 1066 #define PSB_MODE_OPERATION_SET_DC_BASE 0x02 1067 1068 struct drm_psb_get_pipe_from_crtc_id_arg { 1069 /** ID of CRTC being requested **/ 1070 uint32_t crtc_id; 1071 1072 /** pipe of requested CRTC **/ 1073 uint32_t pipe; 1074 }; 1075 #define DRM_PSB_DISP_SAVE_HDMI_FB_HANDLE 1 1076 #define DRM_PSB_DISP_GET_HDMI_FB_HANDLE 2 1077 #define DRM_PSB_DISP_INIT_HDMI_FLIP_CHAIN 1 1078 #define DRM_PSB_DISP_QUEUE_BUFFER 2 1079 #define DRM_PSB_DISP_DEQUEUE_BUFFER 3 1080 #define DRM_PSB_DISP_PLANEB_DISABLE 4 1081 #define DRM_PSB_DISP_PLANEB_ENABLE 5 1082 #define DRM_PSB_HDMI_OSPM_ISLAND_DOWN 6 1083 #define DRM_PSB_HDMI_NOTIFY_HOTPLUG_TO_AUDIO 7 1084 1085 /*csc gamma setting*/ 1086 typedef enum { 1087 GAMMA, 1088 CSC, 1089 GAMMA_INITIA, 1090 GAMMA_SETTING, 1091 GAMMA_REG_SETTING, 1092 CSC_INITIA, 1093 CSC_CHROME_SETTING, 1094 CSC_SETTING, 1095 CSC_REG_SETTING 1096 } setting_type; 1097 1098 typedef enum { 1099 /* gamma 0.5 */ 1100 GAMMA_05 = 1, 1101 /* gamma 2.0 */ 1102 GAMMA_20, 1103 /* gamma 0.5 + 2.0*/ 1104 GAMMA_05_20, 1105 /* gamma 2.0 + 0.5*/ 1106 GAMMA_20_05, 1107 /* gamma 1.0 */ 1108 GAMMA_10 1109 } gamma_mode; 1110 1111 #define CSC_REG_COUNT 6 1112 #define CHROME_COUNT 16 1113 #define CSC_COUNT 9 1114 1115 struct csc_setting { 1116 uint32_t pipe; 1117 setting_type type; 1118 bool enable_state; 1119 uint32_t data_len; 1120 union { 1121 int csc_reg_data[CSC_REG_COUNT]; 1122 int chrome_data[CHROME_COUNT]; 1123 int64_t csc_data[CSC_COUNT]; 1124 } data; 1125 }; 1126 #define GAMMA_10_BIT_TABLE_COUNT 129 1127 1128 struct gamma_setting { 1129 uint32_t pipe; 1130 setting_type type; 1131 bool enable_state; 1132 gamma_mode initia_mode; 1133 uint32_t data_len; 1134 uint32_t gamma_tableX100[GAMMA_10_BIT_TABLE_COUNT]; 1135 }; 1136 struct drm_psb_csc_gamma_setting { 1137 setting_type type; 1138 union { 1139 struct csc_setting csc_data; 1140 struct gamma_setting gamma_data; 1141 } data; 1142 }__attribute__((packed)); 1143 struct drm_psb_buffer_data { 1144 void *h_buffer; 1145 }; 1146 struct drm_psb_flip_chain_data { 1147 void **h_buffer_array; 1148 unsigned int size; 1149 }; 1150 struct drm_psb_disp_ctrl { 1151 uint32_t cmd; 1152 union { 1153 uint32_t data; 1154 struct drm_psb_buffer_data buf_data; 1155 struct drm_psb_flip_chain_data flip_chain_data; 1156 } u; 1157 }; 1158 1159 /* Merrifield driver specific interface */ 1160 1161 #define S3D_MIPIA_DISPLAY 0 1162 #define S3D_HDMI_DISPLAY 1 1163 #define S3D_MIPIC_DISPLAY 2 1164 #define S3D_WIDI_DISPLAY 0xFF 1165 1166 struct drm_psb_s3d_query { 1167 uint32_t s3d_display_type; 1168 uint32_t is_s3d_supported; 1169 uint32_t s3d_format; 1170 uint32_t mode_resolution_x; 1171 uint32_t mode_resolution_y; 1172 uint32_t mode_refresh_rate; 1173 uint32_t is_interleaving; 1174 }; 1175 1176 struct drm_psb_s3d_premodeset { 1177 uint32_t s3d_buffer_format; 1178 }; 1179 1180 1181 typedef enum intel_dc_plane_types { 1182 DC_UNKNOWN_PLANE = 0, 1183 DC_SPRITE_PLANE = 1, 1184 DC_OVERLAY_PLANE, 1185 DC_PRIMARY_PLANE, 1186 DC_CURSOR_PLANE, 1187 DC_PLANE_MAX, 1188 } DC_MRFLD_PLANE_TYPE; 1189 1190 #define SPRITE_UPDATE_SURFACE (0x00000001UL) 1191 #define SPRITE_UPDATE_CONTROL (0x00000002UL) 1192 #define SPRITE_UPDATE_POSITION (0x00000004UL) 1193 #define SPRITE_UPDATE_SIZE (0x00000008UL) 1194 #define SPRITE_UPDATE_WAIT_VBLANK (0X00000010UL) 1195 #define SPRITE_UPDATE_CONSTALPHA (0x00000020UL) 1196 #define SPRITE_UPDATE_ALL (0x0000003fUL) 1197 #define MRFLD_PRIMARY_COUNT 3 1198 1199 typedef struct intel_dc_overlay_ctx { 1200 uint32_t index; 1201 uint32_t pipe; 1202 uint32_t ovadd; 1203 } DC_MRFLD_OVERLAY_CONTEXT; 1204 1205 typedef struct intel_dc_cursor_ctx { 1206 uint32_t index; 1207 uint32_t pipe; 1208 uint32_t cntr; 1209 uint32_t surf; 1210 uint32_t pos; 1211 } DC_MRFLD_CURSOR_CONTEXT; 1212 1213 typedef struct intel_dc_sprite_ctx { 1214 uint32_t update_mask; 1215 /* plane index 0-A, 1-B, 2-C,etc */ 1216 uint32_t index; 1217 uint32_t pipe; 1218 1219 uint32_t cntr; 1220 uint32_t linoff; 1221 uint32_t stride; 1222 uint32_t pos; 1223 uint32_t size; 1224 uint32_t keyminval; 1225 uint32_t keymask; 1226 uint32_t surf; 1227 uint32_t keymaxval; 1228 uint32_t tileoff; 1229 uint32_t contalpa; 1230 } DC_MRFLD_SPRITE_CONTEXT; 1231 1232 typedef struct intel_dc_primary_ctx { 1233 uint32_t update_mask; 1234 /* plane index 0-A, 1-B, 2-C,etc */ 1235 uint32_t index; 1236 uint32_t pipe; 1237 uint32_t cntr; 1238 uint32_t linoff; 1239 uint32_t stride; 1240 uint32_t pos; 1241 uint32_t size; 1242 uint32_t keyminval; 1243 uint32_t keymask; 1244 uint32_t surf; 1245 uint32_t keymaxval; 1246 uint32_t tileoff; 1247 uint32_t contalpa; 1248 } DC_MRFLD_PRIMARY_CONTEXT; 1249 1250 typedef struct intel_dc_plane_zorder { 1251 /* 3 primary planes */ 1252 uint32_t forceBottom[3]; 1253 /* 1 sprite plane */ 1254 uint32_t abovePrimary; 1255 } DC_MRFLD_DC_PLANE_ZORDER; 1256 1257 typedef struct intel_dc_plane_ctx { 1258 enum intel_dc_plane_types type; 1259 struct intel_dc_plane_zorder zorder; 1260 union { 1261 struct intel_dc_overlay_ctx ov_ctx; 1262 struct intel_dc_sprite_ctx sp_ctx; 1263 struct intel_dc_primary_ctx prim_ctx; 1264 struct intel_dc_cursor_ctx cs_ctx; 1265 } ctx; 1266 } DC_MRFLD_SURF_CUSTOM; 1267 1268 #endif 1269