1 /* 2 * Copyright © 2006 Keith Packard 3 * Copyright © 2007-2008 Dave Airlie 4 * Copyright © 2007-2008 Intel Corporation 5 * Jesse Barnes <jesse.barnes@intel.com> 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a 8 * copy of this software and associated documentation files (the "Software"), 9 * to deal in the Software without restriction, including without limitation 10 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11 * and/or sell copies of the Software, and to permit persons to whom the 12 * Software is furnished to do so, subject to the following conditions: 13 * 14 * The above copyright notice and this permission notice shall be included in 15 * all copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 * OTHER DEALINGS IN THE SOFTWARE. 24 */ 25 #ifndef __DRM_CRTC_H__ 26 #define __DRM_CRTC_H__ 27 28 #include <linux/i2c.h> 29 #include <linux/spinlock.h> 30 #include <linux/types.h> 31 #include <linux/fb.h> 32 #include <linux/hdmi.h> 33 #include <linux/media-bus-format.h> 34 #include <uapi/drm/drm_mode.h> 35 #include <uapi/drm/drm_fourcc.h> 36 #include <drm/drm_modeset_lock.h> 37 #include <drm/drm_rect.h> 38 #include <drm/drm_mode_object.h> 39 #include <drm/drm_framebuffer.h> 40 #include <drm/drm_modes.h> 41 #include <drm/drm_connector.h> 42 #include <drm/drm_property.h> 43 #include <drm/drm_bridge.h> 44 #include <drm/drm_edid.h> 45 #include <drm/drm_plane.h> 46 #include <drm/drm_blend.h> 47 #include <drm/drm_color_mgmt.h> 48 #include <drm/drm_debugfs_crc.h> 49 #include <drm/drm_mode_config.h> 50 51 struct drm_device; 52 struct drm_mode_set; 53 struct drm_file; 54 struct drm_clip_rect; 55 struct drm_printer; 56 struct device_node; 57 struct dma_fence; 58 struct edid; 59 60 static inline int64_t U642I64(uint64_t val) 61 { 62 return (int64_t)*((int64_t *)&val); 63 } 64 static inline uint64_t I642U64(int64_t val) 65 { 66 return (uint64_t)*((uint64_t *)&val); 67 } 68 69 struct drm_crtc; 70 struct drm_pending_vblank_event; 71 struct drm_plane; 72 struct drm_bridge; 73 struct drm_atomic_state; 74 75 struct drm_crtc_helper_funcs; 76 struct drm_plane_helper_funcs; 77 78 /** 79 * struct drm_crtc_state - mutable CRTC state 80 * @crtc: backpointer to the CRTC 81 * @enable: whether the CRTC should be enabled, gates all other state 82 * @active: whether the CRTC is actively displaying (used for DPMS) 83 * @planes_changed: planes on this crtc are updated 84 * @mode_changed: crtc_state->mode or crtc_state->enable has been changed 85 * @active_changed: crtc_state->active has been toggled. 86 * @connectors_changed: connectors to this crtc have been updated 87 * @zpos_changed: zpos values of planes on this crtc have been updated 88 * @color_mgmt_changed: color management properties have changed (degamma or 89 * gamma LUT or CSC matrix) 90 * @plane_mask: bitmask of (1 << drm_plane_index(plane)) of attached planes 91 * @connector_mask: bitmask of (1 << drm_connector_index(connector)) of attached connectors 92 * @encoder_mask: bitmask of (1 << drm_encoder_index(encoder)) of attached encoders 93 * @adjusted_mode: for use by helpers and drivers to compute adjusted mode timings 94 * @mode: current mode timings 95 * @mode_blob: &drm_property_blob for @mode 96 * @degamma_lut: Lookup table for converting framebuffer pixel data 97 * before apply the conversion matrix 98 * @ctm: Transformation matrix 99 * @gamma_lut: Lookup table for converting pixel data after the 100 * conversion matrix 101 * @state: backpointer to global drm_atomic_state 102 * 103 * Note that the distinction between @enable and @active is rather subtile: 104 * Flipping @active while @enable is set without changing anything else may 105 * never return in a failure from the ->atomic_check callback. Userspace assumes 106 * that a DPMS On will always succeed. In other words: @enable controls resource 107 * assignment, @active controls the actual hardware state. 108 * 109 * The three booleans active_changed, connectors_changed and mode_changed are 110 * intended to indicate whether a full modeset is needed, rather than strictly 111 * describing what has changed in a commit. 112 * See also: drm_atomic_crtc_needs_modeset() 113 */ 114 struct drm_crtc_state { 115 struct drm_crtc *crtc; 116 117 bool enable; 118 bool active; 119 120 /* computed state bits used by helpers and drivers */ 121 bool planes_changed : 1; 122 bool mode_changed : 1; 123 bool active_changed : 1; 124 bool connectors_changed : 1; 125 bool zpos_changed : 1; 126 bool color_mgmt_changed : 1; 127 128 /* attached planes bitmask: 129 * WARNING: transitional helpers do not maintain plane_mask so 130 * drivers not converted over to atomic helpers should not rely 131 * on plane_mask being accurate! 132 */ 133 u32 plane_mask; 134 135 u32 connector_mask; 136 u32 encoder_mask; 137 138 /* adjusted_mode: for use by helpers and drivers */ 139 struct drm_display_mode adjusted_mode; 140 141 struct drm_display_mode mode; 142 143 /* blob property to expose current mode to atomic userspace */ 144 struct drm_property_blob *mode_blob; 145 146 /* blob property to expose color management to userspace */ 147 struct drm_property_blob *degamma_lut; 148 struct drm_property_blob *ctm; 149 struct drm_property_blob *gamma_lut; 150 151 /** 152 * @event: 153 * 154 * Optional pointer to a DRM event to signal upon completion of the 155 * state update. The driver must send out the event when the atomic 156 * commit operation completes. There are two cases: 157 * 158 * - The event is for a CRTC which is being disabled through this 159 * atomic commit. In that case the event can be send out any time 160 * after the hardware has stopped scanning out the current 161 * framebuffers. It should contain the timestamp and counter for the 162 * last vblank before the display pipeline was shut off. 163 * 164 * - For a CRTC which is enabled at the end of the commit (even when it 165 * undergoes an full modeset) the vblank timestamp and counter must 166 * be for the vblank right before the first frame that scans out the 167 * new set of buffers. Again the event can only be sent out after the 168 * hardware has stopped scanning out the old buffers. 169 * 170 * - Events for disabled CRTCs are not allowed, and drivers can ignore 171 * that case. 172 * 173 * This can be handled by the drm_crtc_send_vblank_event() function, 174 * which the driver should call on the provided event upon completion of 175 * the atomic commit. Note that if the driver supports vblank signalling 176 * and timestamping the vblank counters and timestamps must agree with 177 * the ones returned from page flip events. With the current vblank 178 * helper infrastructure this can be achieved by holding a vblank 179 * reference while the page flip is pending, acquired through 180 * drm_crtc_vblank_get() and released with drm_crtc_vblank_put(). 181 * Drivers are free to implement their own vblank counter and timestamp 182 * tracking though, e.g. if they have accurate timestamp registers in 183 * hardware. 184 * 185 * For hardware which supports some means to synchronize vblank 186 * interrupt delivery with committing display state there's also 187 * drm_crtc_arm_vblank_event(). See the documentation of that function 188 * for a detailed discussion of the constraints it needs to be used 189 * safely. 190 */ 191 struct drm_pending_vblank_event *event; 192 193 struct drm_atomic_state *state; 194 }; 195 196 /** 197 * struct drm_crtc_funcs - control CRTCs for a given device 198 * 199 * The drm_crtc_funcs structure is the central CRTC management structure 200 * in the DRM. Each CRTC controls one or more connectors (note that the name 201 * CRTC is simply historical, a CRTC may control LVDS, VGA, DVI, TV out, etc. 202 * connectors, not just CRTs). 203 * 204 * Each driver is responsible for filling out this structure at startup time, 205 * in addition to providing other modesetting features, like i2c and DDC 206 * bus accessors. 207 */ 208 struct drm_crtc_funcs { 209 /** 210 * @reset: 211 * 212 * Reset CRTC hardware and software state to off. This function isn't 213 * called by the core directly, only through drm_mode_config_reset(). 214 * It's not a helper hook only for historical reasons. 215 * 216 * Atomic drivers can use drm_atomic_helper_crtc_reset() to reset 217 * atomic state using this hook. 218 */ 219 void (*reset)(struct drm_crtc *crtc); 220 221 /** 222 * @cursor_set: 223 * 224 * Update the cursor image. The cursor position is relative to the CRTC 225 * and can be partially or fully outside of the visible area. 226 * 227 * Note that contrary to all other KMS functions the legacy cursor entry 228 * points don't take a framebuffer object, but instead take directly a 229 * raw buffer object id from the driver's buffer manager (which is 230 * either GEM or TTM for current drivers). 231 * 232 * This entry point is deprecated, drivers should instead implement 233 * universal plane support and register a proper cursor plane using 234 * drm_crtc_init_with_planes(). 235 * 236 * This callback is optional 237 * 238 * RETURNS: 239 * 240 * 0 on success or a negative error code on failure. 241 */ 242 int (*cursor_set)(struct drm_crtc *crtc, struct drm_file *file_priv, 243 uint32_t handle, uint32_t width, uint32_t height); 244 245 /** 246 * @cursor_set2: 247 * 248 * Update the cursor image, including hotspot information. The hotspot 249 * must not affect the cursor position in CRTC coordinates, but is only 250 * meant as a hint for virtualized display hardware to coordinate the 251 * guests and hosts cursor position. The cursor hotspot is relative to 252 * the cursor image. Otherwise this works exactly like @cursor_set. 253 * 254 * This entry point is deprecated, drivers should instead implement 255 * universal plane support and register a proper cursor plane using 256 * drm_crtc_init_with_planes(). 257 * 258 * This callback is optional. 259 * 260 * RETURNS: 261 * 262 * 0 on success or a negative error code on failure. 263 */ 264 int (*cursor_set2)(struct drm_crtc *crtc, struct drm_file *file_priv, 265 uint32_t handle, uint32_t width, uint32_t height, 266 int32_t hot_x, int32_t hot_y); 267 268 /** 269 * @cursor_move: 270 * 271 * Update the cursor position. The cursor does not need to be visible 272 * when this hook is called. 273 * 274 * This entry point is deprecated, drivers should instead implement 275 * universal plane support and register a proper cursor plane using 276 * drm_crtc_init_with_planes(). 277 * 278 * This callback is optional. 279 * 280 * RETURNS: 281 * 282 * 0 on success or a negative error code on failure. 283 */ 284 int (*cursor_move)(struct drm_crtc *crtc, int x, int y); 285 286 /** 287 * @gamma_set: 288 * 289 * Set gamma on the CRTC. 290 * 291 * This callback is optional. 292 * 293 * NOTE: 294 * 295 * Drivers that support gamma tables and also fbdev emulation through 296 * the provided helper library need to take care to fill out the gamma 297 * hooks for both. Currently there's a bit an unfortunate duplication 298 * going on, which should eventually be unified to just one set of 299 * hooks. 300 */ 301 int (*gamma_set)(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b, 302 uint32_t size); 303 304 /** 305 * @destroy: 306 * 307 * Clean up plane resources. This is only called at driver unload time 308 * through drm_mode_config_cleanup() since a CRTC cannot be hotplugged 309 * in DRM. 310 */ 311 void (*destroy)(struct drm_crtc *crtc); 312 313 /** 314 * @set_config: 315 * 316 * This is the main legacy entry point to change the modeset state on a 317 * CRTC. All the details of the desired configuration are passed in a 318 * struct &drm_mode_set - see there for details. 319 * 320 * Drivers implementing atomic modeset should use 321 * drm_atomic_helper_set_config() to implement this hook. 322 * 323 * RETURNS: 324 * 325 * 0 on success or a negative error code on failure. 326 */ 327 int (*set_config)(struct drm_mode_set *set); 328 329 /** 330 * @page_flip: 331 * 332 * Legacy entry point to schedule a flip to the given framebuffer. 333 * 334 * Page flipping is a synchronization mechanism that replaces the frame 335 * buffer being scanned out by the CRTC with a new frame buffer during 336 * vertical blanking, avoiding tearing (except when requested otherwise 337 * through the DRM_MODE_PAGE_FLIP_ASYNC flag). When an application 338 * requests a page flip the DRM core verifies that the new frame buffer 339 * is large enough to be scanned out by the CRTC in the currently 340 * configured mode and then calls the CRTC ->page_flip() operation with a 341 * pointer to the new frame buffer. 342 * 343 * The driver must wait for any pending rendering to the new framebuffer 344 * to complete before executing the flip. It should also wait for any 345 * pending rendering from other drivers if the underlying buffer is a 346 * shared dma-buf. 347 * 348 * An application can request to be notified when the page flip has 349 * completed. The drm core will supply a struct &drm_event in the event 350 * parameter in this case. This can be handled by the 351 * drm_crtc_send_vblank_event() function, which the driver should call on 352 * the provided event upon completion of the flip. Note that if 353 * the driver supports vblank signalling and timestamping the vblank 354 * counters and timestamps must agree with the ones returned from page 355 * flip events. With the current vblank helper infrastructure this can 356 * be achieved by holding a vblank reference while the page flip is 357 * pending, acquired through drm_crtc_vblank_get() and released with 358 * drm_crtc_vblank_put(). Drivers are free to implement their own vblank 359 * counter and timestamp tracking though, e.g. if they have accurate 360 * timestamp registers in hardware. 361 * 362 * This callback is optional. 363 * 364 * NOTE: 365 * 366 * Very early versions of the KMS ABI mandated that the driver must 367 * block (but not reject) any rendering to the old framebuffer until the 368 * flip operation has completed and the old framebuffer is no longer 369 * visible. This requirement has been lifted, and userspace is instead 370 * expected to request delivery of an event and wait with recycling old 371 * buffers until such has been received. 372 * 373 * RETURNS: 374 * 375 * 0 on success or a negative error code on failure. Note that if a 376 * ->page_flip() operation is already pending the callback should return 377 * -EBUSY. Pageflips on a disabled CRTC (either by setting a NULL mode 378 * or just runtime disabled through DPMS respectively the new atomic 379 * "ACTIVE" state) should result in an -EINVAL error code. Note that 380 * drm_atomic_helper_page_flip() checks this already for atomic drivers. 381 */ 382 int (*page_flip)(struct drm_crtc *crtc, 383 struct drm_framebuffer *fb, 384 struct drm_pending_vblank_event *event, 385 uint32_t flags); 386 387 /** 388 * @page_flip_target: 389 * 390 * Same as @page_flip but with an additional parameter specifying the 391 * absolute target vertical blank period (as reported by 392 * drm_crtc_vblank_count()) when the flip should take effect. 393 * 394 * Note that the core code calls drm_crtc_vblank_get before this entry 395 * point, and will call drm_crtc_vblank_put if this entry point returns 396 * any non-0 error code. It's the driver's responsibility to call 397 * drm_crtc_vblank_put after this entry point returns 0, typically when 398 * the flip completes. 399 */ 400 int (*page_flip_target)(struct drm_crtc *crtc, 401 struct drm_framebuffer *fb, 402 struct drm_pending_vblank_event *event, 403 uint32_t flags, uint32_t target); 404 405 /** 406 * @set_property: 407 * 408 * This is the legacy entry point to update a property attached to the 409 * CRTC. 410 * 411 * Drivers implementing atomic modeset should use 412 * drm_atomic_helper_crtc_set_property() to implement this hook. 413 * 414 * This callback is optional if the driver does not support any legacy 415 * driver-private properties. 416 * 417 * RETURNS: 418 * 419 * 0 on success or a negative error code on failure. 420 */ 421 int (*set_property)(struct drm_crtc *crtc, 422 struct drm_property *property, uint64_t val); 423 424 /** 425 * @atomic_duplicate_state: 426 * 427 * Duplicate the current atomic state for this CRTC and return it. 428 * The core and helpers gurantee that any atomic state duplicated with 429 * this hook and still owned by the caller (i.e. not transferred to the 430 * driver by calling ->atomic_commit() from struct 431 * &drm_mode_config_funcs) will be cleaned up by calling the 432 * @atomic_destroy_state hook in this structure. 433 * 434 * Atomic drivers which don't subclass struct &drm_crtc should use 435 * drm_atomic_helper_crtc_duplicate_state(). Drivers that subclass the 436 * state structure to extend it with driver-private state should use 437 * __drm_atomic_helper_crtc_duplicate_state() to make sure shared state is 438 * duplicated in a consistent fashion across drivers. 439 * 440 * It is an error to call this hook before crtc->state has been 441 * initialized correctly. 442 * 443 * NOTE: 444 * 445 * If the duplicate state references refcounted resources this hook must 446 * acquire a reference for each of them. The driver must release these 447 * references again in @atomic_destroy_state. 448 * 449 * RETURNS: 450 * 451 * Duplicated atomic state or NULL when the allocation failed. 452 */ 453 struct drm_crtc_state *(*atomic_duplicate_state)(struct drm_crtc *crtc); 454 455 /** 456 * @atomic_destroy_state: 457 * 458 * Destroy a state duplicated with @atomic_duplicate_state and release 459 * or unreference all resources it references 460 */ 461 void (*atomic_destroy_state)(struct drm_crtc *crtc, 462 struct drm_crtc_state *state); 463 464 /** 465 * @atomic_set_property: 466 * 467 * Decode a driver-private property value and store the decoded value 468 * into the passed-in state structure. Since the atomic core decodes all 469 * standardized properties (even for extensions beyond the core set of 470 * properties which might not be implemented by all drivers) this 471 * requires drivers to subclass the state structure. 472 * 473 * Such driver-private properties should really only be implemented for 474 * truly hardware/vendor specific state. Instead it is preferred to 475 * standardize atomic extension and decode the properties used to expose 476 * such an extension in the core. 477 * 478 * Do not call this function directly, use 479 * drm_atomic_crtc_set_property() instead. 480 * 481 * This callback is optional if the driver does not support any 482 * driver-private atomic properties. 483 * 484 * NOTE: 485 * 486 * This function is called in the state assembly phase of atomic 487 * modesets, which can be aborted for any reason (including on 488 * userspace's request to just check whether a configuration would be 489 * possible). Drivers MUST NOT touch any persistent state (hardware or 490 * software) or data structures except the passed in @state parameter. 491 * 492 * Also since userspace controls in which order properties are set this 493 * function must not do any input validation (since the state update is 494 * incomplete and hence likely inconsistent). Instead any such input 495 * validation must be done in the various atomic_check callbacks. 496 * 497 * RETURNS: 498 * 499 * 0 if the property has been found, -EINVAL if the property isn't 500 * implemented by the driver (which should never happen, the core only 501 * asks for properties attached to this CRTC). No other validation is 502 * allowed by the driver. The core already checks that the property 503 * value is within the range (integer, valid enum value, ...) the driver 504 * set when registering the property. 505 */ 506 int (*atomic_set_property)(struct drm_crtc *crtc, 507 struct drm_crtc_state *state, 508 struct drm_property *property, 509 uint64_t val); 510 /** 511 * @atomic_get_property: 512 * 513 * Reads out the decoded driver-private property. This is used to 514 * implement the GETCRTC IOCTL. 515 * 516 * Do not call this function directly, use 517 * drm_atomic_crtc_get_property() instead. 518 * 519 * This callback is optional if the driver does not support any 520 * driver-private atomic properties. 521 * 522 * RETURNS: 523 * 524 * 0 on success, -EINVAL if the property isn't implemented by the 525 * driver (which should never happen, the core only asks for 526 * properties attached to this CRTC). 527 */ 528 int (*atomic_get_property)(struct drm_crtc *crtc, 529 const struct drm_crtc_state *state, 530 struct drm_property *property, 531 uint64_t *val); 532 533 /** 534 * @late_register: 535 * 536 * This optional hook can be used to register additional userspace 537 * interfaces attached to the crtc like debugfs interfaces. 538 * It is called late in the driver load sequence from drm_dev_register(). 539 * Everything added from this callback should be unregistered in 540 * the early_unregister callback. 541 * 542 * Returns: 543 * 544 * 0 on success, or a negative error code on failure. 545 */ 546 int (*late_register)(struct drm_crtc *crtc); 547 548 /** 549 * @early_unregister: 550 * 551 * This optional hook should be used to unregister the additional 552 * userspace interfaces attached to the crtc from 553 * late_unregister(). It is called from drm_dev_unregister(), 554 * early in the driver unload sequence to disable userspace access 555 * before data structures are torndown. 556 */ 557 void (*early_unregister)(struct drm_crtc *crtc); 558 559 /** 560 * @set_crc_source: 561 * 562 * Changes the source of CRC checksums of frames at the request of 563 * userspace, typically for testing purposes. The sources available are 564 * specific of each driver and a %NULL value indicates that CRC 565 * generation is to be switched off. 566 * 567 * When CRC generation is enabled, the driver should call 568 * drm_crtc_add_crc_entry() at each frame, providing any information 569 * that characterizes the frame contents in the crcN arguments, as 570 * provided from the configured source. Drivers must accept a "auto" 571 * source name that will select a default source for this CRTC. 572 * 573 * This callback is optional if the driver does not support any CRC 574 * generation functionality. 575 * 576 * RETURNS: 577 * 578 * 0 on success or a negative error code on failure. 579 */ 580 int (*set_crc_source)(struct drm_crtc *crtc, const char *source, 581 size_t *values_cnt); 582 583 /** 584 * @atomic_print_state: 585 * 586 * If driver subclasses struct &drm_crtc_state, it should implement 587 * this optional hook for printing additional driver specific state. 588 * 589 * Do not call this directly, use drm_atomic_crtc_print_state() 590 * instead. 591 */ 592 void (*atomic_print_state)(struct drm_printer *p, 593 const struct drm_crtc_state *state); 594 }; 595 596 /** 597 * struct drm_crtc - central CRTC control structure 598 * @dev: parent DRM device 599 * @port: OF node used by drm_of_find_possible_crtcs() 600 * @head: list management 601 * @name: human readable name, can be overwritten by the driver 602 * @mutex: per-CRTC locking 603 * @base: base KMS object for ID tracking etc. 604 * @primary: primary plane for this CRTC 605 * @cursor: cursor plane for this CRTC 606 * @cursor_x: current x position of the cursor, used for universal cursor planes 607 * @cursor_y: current y position of the cursor, used for universal cursor planes 608 * @enabled: is this CRTC enabled? 609 * @mode: current mode timings 610 * @hwmode: mode timings as programmed to hw regs 611 * @x: x position on screen 612 * @y: y position on screen 613 * @funcs: CRTC control functions 614 * @gamma_size: size of gamma ramp 615 * @gamma_store: gamma ramp values 616 * @helper_private: mid-layer private data 617 * @properties: property tracking for this CRTC 618 * 619 * Each CRTC may have one or more connectors associated with it. This structure 620 * allows the CRTC to be controlled. 621 */ 622 struct drm_crtc { 623 struct drm_device *dev; 624 struct device_node *port; 625 struct list_head head; 626 627 char *name; 628 629 /** 630 * @mutex: 631 * 632 * This provides a read lock for the overall crtc state (mode, dpms 633 * state, ...) and a write lock for everything which can be update 634 * without a full modeset (fb, cursor data, crtc properties ...). Full 635 * modeset also need to grab dev->mode_config.connection_mutex. 636 */ 637 struct drm_modeset_lock mutex; 638 639 struct drm_mode_object base; 640 641 /* primary and cursor planes for CRTC */ 642 struct drm_plane *primary; 643 struct drm_plane *cursor; 644 645 /** 646 * @index: Position inside the mode_config.list, can be used as an array 647 * index. It is invariant over the lifetime of the CRTC. 648 */ 649 unsigned index; 650 651 /* position of cursor plane on crtc */ 652 int cursor_x; 653 int cursor_y; 654 655 bool enabled; 656 657 /* Requested mode from modesetting. */ 658 struct drm_display_mode mode; 659 660 /* Programmed mode in hw, after adjustments for encoders, 661 * crtc, panel scaling etc. Needed for timestamping etc. 662 */ 663 struct drm_display_mode hwmode; 664 665 int x, y; 666 const struct drm_crtc_funcs *funcs; 667 668 /* Legacy FB CRTC gamma size for reporting to userspace */ 669 uint32_t gamma_size; 670 uint16_t *gamma_store; 671 672 /* if you are using the helper */ 673 const struct drm_crtc_helper_funcs *helper_private; 674 675 struct drm_object_properties properties; 676 677 /** 678 * @state: 679 * 680 * Current atomic state for this CRTC. 681 */ 682 struct drm_crtc_state *state; 683 684 /** 685 * @commit_list: 686 * 687 * List of &drm_crtc_commit structures tracking pending commits. 688 * Protected by @commit_lock. This list doesn't hold its own full 689 * reference, but burrows it from the ongoing commit. Commit entries 690 * must be removed from this list once the commit is fully completed, 691 * but before it's correspoding &drm_atomic_state gets destroyed. 692 */ 693 struct list_head commit_list; 694 695 /** 696 * @commit_lock: 697 * 698 * Spinlock to protect @commit_list. 699 */ 700 spinlock_t commit_lock; 701 702 /** 703 * @acquire_ctx: 704 * 705 * Per-CRTC implicit acquire context used by atomic drivers for legacy 706 * IOCTLs, so that atomic drivers can get at the locking acquire 707 * context. 708 */ 709 struct drm_modeset_acquire_ctx *acquire_ctx; 710 711 #ifdef CONFIG_DEBUG_FS 712 /** 713 * @debugfs_entry: 714 * 715 * Debugfs directory for this CRTC. 716 */ 717 struct dentry *debugfs_entry; 718 719 /** 720 * @crc: 721 * 722 * Configuration settings of CRC capture. 723 */ 724 struct drm_crtc_crc crc; 725 #endif 726 727 /** 728 * @fence_context: 729 * 730 * timeline context used for fence operations. 731 */ 732 unsigned int fence_context; 733 734 /** 735 * @fence_lock: 736 * 737 * spinlock to protect the fences in the fence_context. 738 */ 739 740 spinlock_t fence_lock; 741 /** 742 * @fence_seqno: 743 * 744 * Seqno variable used as monotonic counter for the fences 745 * created on the CRTC's timeline. 746 */ 747 unsigned long fence_seqno; 748 749 /** 750 * @timeline_name: 751 * 752 * The name of the CRTC's fence timeline. 753 */ 754 char timeline_name[32]; 755 }; 756 757 /** 758 * struct drm_mode_set - new values for a CRTC config change 759 * @fb: framebuffer to use for new config 760 * @crtc: CRTC whose configuration we're about to change 761 * @mode: mode timings to use 762 * @x: position of this CRTC relative to @fb 763 * @y: position of this CRTC relative to @fb 764 * @connectors: array of connectors to drive with this CRTC if possible 765 * @num_connectors: size of @connectors array 766 * 767 * Represents a single crtc the connectors that it drives with what mode 768 * and from which framebuffer it scans out from. 769 * 770 * This is used to set modes. 771 */ 772 struct drm_mode_set { 773 struct drm_framebuffer *fb; 774 struct drm_crtc *crtc; 775 struct drm_display_mode *mode; 776 777 uint32_t x; 778 uint32_t y; 779 780 struct drm_connector **connectors; 781 size_t num_connectors; 782 }; 783 784 #define obj_to_crtc(x) container_of(x, struct drm_crtc, base) 785 786 __printf(6, 7) 787 int drm_crtc_init_with_planes(struct drm_device *dev, 788 struct drm_crtc *crtc, 789 struct drm_plane *primary, 790 struct drm_plane *cursor, 791 const struct drm_crtc_funcs *funcs, 792 const char *name, ...); 793 void drm_crtc_cleanup(struct drm_crtc *crtc); 794 795 /** 796 * drm_crtc_index - find the index of a registered CRTC 797 * @crtc: CRTC to find index for 798 * 799 * Given a registered CRTC, return the index of that CRTC within a DRM 800 * device's list of CRTCs. 801 */ 802 static inline unsigned int drm_crtc_index(const struct drm_crtc *crtc) 803 { 804 return crtc->index; 805 } 806 807 /** 808 * drm_crtc_mask - find the mask of a registered CRTC 809 * @crtc: CRTC to find mask for 810 * 811 * Given a registered CRTC, return the mask bit of that CRTC for an 812 * encoder's possible_crtcs field. 813 */ 814 static inline uint32_t drm_crtc_mask(const struct drm_crtc *crtc) 815 { 816 return 1 << drm_crtc_index(crtc); 817 } 818 819 void drm_crtc_get_hv_timing(const struct drm_display_mode *mode, 820 int *hdisplay, int *vdisplay); 821 int drm_crtc_force_disable(struct drm_crtc *crtc); 822 int drm_crtc_force_disable_all(struct drm_device *dev); 823 824 int drm_mode_set_config_internal(struct drm_mode_set *set); 825 826 /* Helpers */ 827 static inline struct drm_crtc *drm_crtc_find(struct drm_device *dev, 828 uint32_t id) 829 { 830 struct drm_mode_object *mo; 831 mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_CRTC); 832 return mo ? obj_to_crtc(mo) : NULL; 833 } 834 835 #define drm_for_each_crtc(crtc, dev) \ 836 list_for_each_entry(crtc, &(dev)->mode_config.crtc_list, head) 837 838 static inline void 839 assert_drm_connector_list_read_locked(struct drm_mode_config *mode_config) 840 { 841 /* 842 * The connector hotadd/remove code currently grabs both locks when 843 * updating lists. Hence readers need only hold either of them to be 844 * safe and the check amounts to 845 * 846 * WARN_ON(not_holding(A) && not_holding(B)). 847 */ 848 WARN_ON(!mutex_is_locked(&mode_config->mutex) && 849 !drm_modeset_is_locked(&mode_config->connection_mutex)); 850 } 851 852 #endif /* __DRM_CRTC_H__ */ 853