Merge remote-tracking branch 'tpmdd/next'
[deliverable/linux.git] / include / drm / drm_crtc.h
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/idr.h>
32 #include <linux/fb.h>
33 #include <linux/hdmi.h>
34 #include <linux/media-bus-format.h>
35 #include <uapi/drm/drm_mode.h>
36 #include <uapi/drm/drm_fourcc.h>
37 #include <drm/drm_modeset_lock.h>
38 #include <drm/drm_rect.h>
39 #include <drm/drm_mode_object.h>
40 #include <drm/drm_framebuffer.h>
41 #include <drm/drm_modes.h>
42 #include <drm/drm_connector.h>
43 #include <drm/drm_encoder.h>
44 #include <drm/drm_property.h>
45
46 struct drm_device;
47 struct drm_mode_set;
48 struct drm_file;
49 struct drm_clip_rect;
50 struct device_node;
51 struct fence;
52 struct edid;
53
54 static inline int64_t U642I64(uint64_t val)
55 {
56 return (int64_t)*((int64_t *)&val);
57 }
58 static inline uint64_t I642U64(int64_t val)
59 {
60 return (uint64_t)*((uint64_t *)&val);
61 }
62
63 /*
64 * Rotation property bits. DRM_ROTATE_<degrees> rotates the image by the
65 * specified amount in degrees in counter clockwise direction. DRM_REFLECT_X and
66 * DRM_REFLECT_Y reflects the image along the specified axis prior to rotation
67 */
68 #define DRM_ROTATE_0 BIT(0)
69 #define DRM_ROTATE_90 BIT(1)
70 #define DRM_ROTATE_180 BIT(2)
71 #define DRM_ROTATE_270 BIT(3)
72 #define DRM_ROTATE_MASK (DRM_ROTATE_0 | DRM_ROTATE_90 | \
73 DRM_ROTATE_180 | DRM_ROTATE_270)
74 #define DRM_REFLECT_X BIT(4)
75 #define DRM_REFLECT_Y BIT(5)
76 #define DRM_REFLECT_MASK (DRM_REFLECT_X | DRM_REFLECT_Y)
77
78 /* data corresponds to displayid vend/prod/serial */
79 struct drm_tile_group {
80 struct kref refcount;
81 struct drm_device *dev;
82 int id;
83 u8 group_data[8];
84 };
85
86 struct drm_crtc;
87 struct drm_encoder;
88 struct drm_pending_vblank_event;
89 struct drm_plane;
90 struct drm_bridge;
91 struct drm_atomic_state;
92
93 struct drm_crtc_helper_funcs;
94 struct drm_encoder_helper_funcs;
95 struct drm_plane_helper_funcs;
96
97 /**
98 * struct drm_crtc_state - mutable CRTC state
99 * @crtc: backpointer to the CRTC
100 * @enable: whether the CRTC should be enabled, gates all other state
101 * @active: whether the CRTC is actively displaying (used for DPMS)
102 * @planes_changed: planes on this crtc are updated
103 * @mode_changed: crtc_state->mode or crtc_state->enable has been changed
104 * @active_changed: crtc_state->active has been toggled.
105 * @connectors_changed: connectors to this crtc have been updated
106 * @zpos_changed: zpos values of planes on this crtc have been updated
107 * @color_mgmt_changed: color management properties have changed (degamma or
108 * gamma LUT or CSC matrix)
109 * @plane_mask: bitmask of (1 << drm_plane_index(plane)) of attached planes
110 * @connector_mask: bitmask of (1 << drm_connector_index(connector)) of attached connectors
111 * @encoder_mask: bitmask of (1 << drm_encoder_index(encoder)) of attached encoders
112 * @last_vblank_count: for helpers and drivers to capture the vblank of the
113 * update to ensure framebuffer cleanup isn't done too early
114 * @adjusted_mode: for use by helpers and drivers to compute adjusted mode timings
115 * @mode: current mode timings
116 * @mode_blob: &drm_property_blob for @mode
117 * @degamma_lut: Lookup table for converting framebuffer pixel data
118 * before apply the conversion matrix
119 * @ctm: Transformation matrix
120 * @gamma_lut: Lookup table for converting pixel data after the
121 * conversion matrix
122 * @event: optional pointer to a DRM event to signal upon completion of the
123 * state update
124 * @state: backpointer to global drm_atomic_state
125 *
126 * Note that the distinction between @enable and @active is rather subtile:
127 * Flipping @active while @enable is set without changing anything else may
128 * never return in a failure from the ->atomic_check callback. Userspace assumes
129 * that a DPMS On will always succeed. In other words: @enable controls resource
130 * assignment, @active controls the actual hardware state.
131 */
132 struct drm_crtc_state {
133 struct drm_crtc *crtc;
134
135 bool enable;
136 bool active;
137
138 /* computed state bits used by helpers and drivers */
139 bool planes_changed : 1;
140 bool mode_changed : 1;
141 bool active_changed : 1;
142 bool connectors_changed : 1;
143 bool zpos_changed : 1;
144 bool color_mgmt_changed : 1;
145
146 /* attached planes bitmask:
147 * WARNING: transitional helpers do not maintain plane_mask so
148 * drivers not converted over to atomic helpers should not rely
149 * on plane_mask being accurate!
150 */
151 u32 plane_mask;
152
153 u32 connector_mask;
154 u32 encoder_mask;
155
156 /* last_vblank_count: for vblank waits before cleanup */
157 u32 last_vblank_count;
158
159 /* adjusted_mode: for use by helpers and drivers */
160 struct drm_display_mode adjusted_mode;
161
162 struct drm_display_mode mode;
163
164 /* blob property to expose current mode to atomic userspace */
165 struct drm_property_blob *mode_blob;
166
167 /* blob property to expose color management to userspace */
168 struct drm_property_blob *degamma_lut;
169 struct drm_property_blob *ctm;
170 struct drm_property_blob *gamma_lut;
171
172 struct drm_pending_vblank_event *event;
173
174 struct drm_atomic_state *state;
175 };
176
177 /**
178 * struct drm_crtc_funcs - control CRTCs for a given device
179 *
180 * The drm_crtc_funcs structure is the central CRTC management structure
181 * in the DRM. Each CRTC controls one or more connectors (note that the name
182 * CRTC is simply historical, a CRTC may control LVDS, VGA, DVI, TV out, etc.
183 * connectors, not just CRTs).
184 *
185 * Each driver is responsible for filling out this structure at startup time,
186 * in addition to providing other modesetting features, like i2c and DDC
187 * bus accessors.
188 */
189 struct drm_crtc_funcs {
190 /**
191 * @reset:
192 *
193 * Reset CRTC hardware and software state to off. This function isn't
194 * called by the core directly, only through drm_mode_config_reset().
195 * It's not a helper hook only for historical reasons.
196 *
197 * Atomic drivers can use drm_atomic_helper_crtc_reset() to reset
198 * atomic state using this hook.
199 */
200 void (*reset)(struct drm_crtc *crtc);
201
202 /**
203 * @cursor_set:
204 *
205 * Update the cursor image. The cursor position is relative to the CRTC
206 * and can be partially or fully outside of the visible area.
207 *
208 * Note that contrary to all other KMS functions the legacy cursor entry
209 * points don't take a framebuffer object, but instead take directly a
210 * raw buffer object id from the driver's buffer manager (which is
211 * either GEM or TTM for current drivers).
212 *
213 * This entry point is deprecated, drivers should instead implement
214 * universal plane support and register a proper cursor plane using
215 * drm_crtc_init_with_planes().
216 *
217 * This callback is optional
218 *
219 * RETURNS:
220 *
221 * 0 on success or a negative error code on failure.
222 */
223 int (*cursor_set)(struct drm_crtc *crtc, struct drm_file *file_priv,
224 uint32_t handle, uint32_t width, uint32_t height);
225
226 /**
227 * @cursor_set2:
228 *
229 * Update the cursor image, including hotspot information. The hotspot
230 * must not affect the cursor position in CRTC coordinates, but is only
231 * meant as a hint for virtualized display hardware to coordinate the
232 * guests and hosts cursor position. The cursor hotspot is relative to
233 * the cursor image. Otherwise this works exactly like @cursor_set.
234 *
235 * This entry point is deprecated, drivers should instead implement
236 * universal plane support and register a proper cursor plane using
237 * drm_crtc_init_with_planes().
238 *
239 * This callback is optional.
240 *
241 * RETURNS:
242 *
243 * 0 on success or a negative error code on failure.
244 */
245 int (*cursor_set2)(struct drm_crtc *crtc, struct drm_file *file_priv,
246 uint32_t handle, uint32_t width, uint32_t height,
247 int32_t hot_x, int32_t hot_y);
248
249 /**
250 * @cursor_move:
251 *
252 * Update the cursor position. The cursor does not need to be visible
253 * when this hook is called.
254 *
255 * This entry point is deprecated, drivers should instead implement
256 * universal plane support and register a proper cursor plane using
257 * drm_crtc_init_with_planes().
258 *
259 * This callback is optional.
260 *
261 * RETURNS:
262 *
263 * 0 on success or a negative error code on failure.
264 */
265 int (*cursor_move)(struct drm_crtc *crtc, int x, int y);
266
267 /**
268 * @gamma_set:
269 *
270 * Set gamma on the CRTC.
271 *
272 * This callback is optional.
273 *
274 * NOTE:
275 *
276 * Drivers that support gamma tables and also fbdev emulation through
277 * the provided helper library need to take care to fill out the gamma
278 * hooks for both. Currently there's a bit an unfortunate duplication
279 * going on, which should eventually be unified to just one set of
280 * hooks.
281 */
282 int (*gamma_set)(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
283 uint32_t size);
284
285 /**
286 * @destroy:
287 *
288 * Clean up plane resources. This is only called at driver unload time
289 * through drm_mode_config_cleanup() since a CRTC cannot be hotplugged
290 * in DRM.
291 */
292 void (*destroy)(struct drm_crtc *crtc);
293
294 /**
295 * @set_config:
296 *
297 * This is the main legacy entry point to change the modeset state on a
298 * CRTC. All the details of the desired configuration are passed in a
299 * struct &drm_mode_set - see there for details.
300 *
301 * Drivers implementing atomic modeset should use
302 * drm_atomic_helper_set_config() to implement this hook.
303 *
304 * RETURNS:
305 *
306 * 0 on success or a negative error code on failure.
307 */
308 int (*set_config)(struct drm_mode_set *set);
309
310 /**
311 * @page_flip:
312 *
313 * Legacy entry point to schedule a flip to the given framebuffer.
314 *
315 * Page flipping is a synchronization mechanism that replaces the frame
316 * buffer being scanned out by the CRTC with a new frame buffer during
317 * vertical blanking, avoiding tearing (except when requested otherwise
318 * through the DRM_MODE_PAGE_FLIP_ASYNC flag). When an application
319 * requests a page flip the DRM core verifies that the new frame buffer
320 * is large enough to be scanned out by the CRTC in the currently
321 * configured mode and then calls the CRTC ->page_flip() operation with a
322 * pointer to the new frame buffer.
323 *
324 * The driver must wait for any pending rendering to the new framebuffer
325 * to complete before executing the flip. It should also wait for any
326 * pending rendering from other drivers if the underlying buffer is a
327 * shared dma-buf.
328 *
329 * An application can request to be notified when the page flip has
330 * completed. The drm core will supply a struct &drm_event in the event
331 * parameter in this case. This can be handled by the
332 * drm_crtc_send_vblank_event() function, which the driver should call on
333 * the provided event upon completion of the flip. Note that if
334 * the driver supports vblank signalling and timestamping the vblank
335 * counters and timestamps must agree with the ones returned from page
336 * flip events. With the current vblank helper infrastructure this can
337 * be achieved by holding a vblank reference while the page flip is
338 * pending, acquired through drm_crtc_vblank_get() and released with
339 * drm_crtc_vblank_put(). Drivers are free to implement their own vblank
340 * counter and timestamp tracking though, e.g. if they have accurate
341 * timestamp registers in hardware.
342 *
343 * This callback is optional.
344 *
345 * NOTE:
346 *
347 * Very early versions of the KMS ABI mandated that the driver must
348 * block (but not reject) any rendering to the old framebuffer until the
349 * flip operation has completed and the old framebuffer is no longer
350 * visible. This requirement has been lifted, and userspace is instead
351 * expected to request delivery of an event and wait with recycling old
352 * buffers until such has been received.
353 *
354 * RETURNS:
355 *
356 * 0 on success or a negative error code on failure. Note that if a
357 * ->page_flip() operation is already pending the callback should return
358 * -EBUSY. Pageflips on a disabled CRTC (either by setting a NULL mode
359 * or just runtime disabled through DPMS respectively the new atomic
360 * "ACTIVE" state) should result in an -EINVAL error code. Note that
361 * drm_atomic_helper_page_flip() checks this already for atomic drivers.
362 */
363 int (*page_flip)(struct drm_crtc *crtc,
364 struct drm_framebuffer *fb,
365 struct drm_pending_vblank_event *event,
366 uint32_t flags);
367
368 /**
369 * @page_flip_target:
370 *
371 * Same as @page_flip but with an additional parameter specifying the
372 * absolute target vertical blank period (as reported by
373 * drm_crtc_vblank_count()) when the flip should take effect.
374 *
375 * Note that the core code calls drm_crtc_vblank_get before this entry
376 * point, and will call drm_crtc_vblank_put if this entry point returns
377 * any non-0 error code. It's the driver's responsibility to call
378 * drm_crtc_vblank_put after this entry point returns 0, typically when
379 * the flip completes.
380 */
381 int (*page_flip_target)(struct drm_crtc *crtc,
382 struct drm_framebuffer *fb,
383 struct drm_pending_vblank_event *event,
384 uint32_t flags, uint32_t target);
385
386 /**
387 * @set_property:
388 *
389 * This is the legacy entry point to update a property attached to the
390 * CRTC.
391 *
392 * Drivers implementing atomic modeset should use
393 * drm_atomic_helper_crtc_set_property() to implement this hook.
394 *
395 * This callback is optional if the driver does not support any legacy
396 * driver-private properties.
397 *
398 * RETURNS:
399 *
400 * 0 on success or a negative error code on failure.
401 */
402 int (*set_property)(struct drm_crtc *crtc,
403 struct drm_property *property, uint64_t val);
404
405 /**
406 * @atomic_duplicate_state:
407 *
408 * Duplicate the current atomic state for this CRTC and return it.
409 * The core and helpers gurantee that any atomic state duplicated with
410 * this hook and still owned by the caller (i.e. not transferred to the
411 * driver by calling ->atomic_commit() from struct
412 * &drm_mode_config_funcs) will be cleaned up by calling the
413 * @atomic_destroy_state hook in this structure.
414 *
415 * Atomic drivers which don't subclass struct &drm_crtc should use
416 * drm_atomic_helper_crtc_duplicate_state(). Drivers that subclass the
417 * state structure to extend it with driver-private state should use
418 * __drm_atomic_helper_crtc_duplicate_state() to make sure shared state is
419 * duplicated in a consistent fashion across drivers.
420 *
421 * It is an error to call this hook before crtc->state has been
422 * initialized correctly.
423 *
424 * NOTE:
425 *
426 * If the duplicate state references refcounted resources this hook must
427 * acquire a reference for each of them. The driver must release these
428 * references again in @atomic_destroy_state.
429 *
430 * RETURNS:
431 *
432 * Duplicated atomic state or NULL when the allocation failed.
433 */
434 struct drm_crtc_state *(*atomic_duplicate_state)(struct drm_crtc *crtc);
435
436 /**
437 * @atomic_destroy_state:
438 *
439 * Destroy a state duplicated with @atomic_duplicate_state and release
440 * or unreference all resources it references
441 */
442 void (*atomic_destroy_state)(struct drm_crtc *crtc,
443 struct drm_crtc_state *state);
444
445 /**
446 * @atomic_set_property:
447 *
448 * Decode a driver-private property value and store the decoded value
449 * into the passed-in state structure. Since the atomic core decodes all
450 * standardized properties (even for extensions beyond the core set of
451 * properties which might not be implemented by all drivers) this
452 * requires drivers to subclass the state structure.
453 *
454 * Such driver-private properties should really only be implemented for
455 * truly hardware/vendor specific state. Instead it is preferred to
456 * standardize atomic extension and decode the properties used to expose
457 * such an extension in the core.
458 *
459 * Do not call this function directly, use
460 * drm_atomic_crtc_set_property() instead.
461 *
462 * This callback is optional if the driver does not support any
463 * driver-private atomic properties.
464 *
465 * NOTE:
466 *
467 * This function is called in the state assembly phase of atomic
468 * modesets, which can be aborted for any reason (including on
469 * userspace's request to just check whether a configuration would be
470 * possible). Drivers MUST NOT touch any persistent state (hardware or
471 * software) or data structures except the passed in @state parameter.
472 *
473 * Also since userspace controls in which order properties are set this
474 * function must not do any input validation (since the state update is
475 * incomplete and hence likely inconsistent). Instead any such input
476 * validation must be done in the various atomic_check callbacks.
477 *
478 * RETURNS:
479 *
480 * 0 if the property has been found, -EINVAL if the property isn't
481 * implemented by the driver (which should never happen, the core only
482 * asks for properties attached to this CRTC). No other validation is
483 * allowed by the driver. The core already checks that the property
484 * value is within the range (integer, valid enum value, ...) the driver
485 * set when registering the property.
486 */
487 int (*atomic_set_property)(struct drm_crtc *crtc,
488 struct drm_crtc_state *state,
489 struct drm_property *property,
490 uint64_t val);
491 /**
492 * @atomic_get_property:
493 *
494 * Reads out the decoded driver-private property. This is used to
495 * implement the GETCRTC IOCTL.
496 *
497 * Do not call this function directly, use
498 * drm_atomic_crtc_get_property() instead.
499 *
500 * This callback is optional if the driver does not support any
501 * driver-private atomic properties.
502 *
503 * RETURNS:
504 *
505 * 0 on success, -EINVAL if the property isn't implemented by the
506 * driver (which should never happen, the core only asks for
507 * properties attached to this CRTC).
508 */
509 int (*atomic_get_property)(struct drm_crtc *crtc,
510 const struct drm_crtc_state *state,
511 struct drm_property *property,
512 uint64_t *val);
513
514 /**
515 * @late_register:
516 *
517 * This optional hook can be used to register additional userspace
518 * interfaces attached to the crtc like debugfs interfaces.
519 * It is called late in the driver load sequence from drm_dev_register().
520 * Everything added from this callback should be unregistered in
521 * the early_unregister callback.
522 *
523 * Returns:
524 *
525 * 0 on success, or a negative error code on failure.
526 */
527 int (*late_register)(struct drm_crtc *crtc);
528
529 /**
530 * @early_unregister:
531 *
532 * This optional hook should be used to unregister the additional
533 * userspace interfaces attached to the crtc from
534 * late_unregister(). It is called from drm_dev_unregister(),
535 * early in the driver unload sequence to disable userspace access
536 * before data structures are torndown.
537 */
538 void (*early_unregister)(struct drm_crtc *crtc);
539 };
540
541 /**
542 * struct drm_crtc - central CRTC control structure
543 * @dev: parent DRM device
544 * @port: OF node used by drm_of_find_possible_crtcs()
545 * @head: list management
546 * @name: human readable name, can be overwritten by the driver
547 * @mutex: per-CRTC locking
548 * @base: base KMS object for ID tracking etc.
549 * @primary: primary plane for this CRTC
550 * @cursor: cursor plane for this CRTC
551 * @cursor_x: current x position of the cursor, used for universal cursor planes
552 * @cursor_y: current y position of the cursor, used for universal cursor planes
553 * @enabled: is this CRTC enabled?
554 * @mode: current mode timings
555 * @hwmode: mode timings as programmed to hw regs
556 * @x: x position on screen
557 * @y: y position on screen
558 * @funcs: CRTC control functions
559 * @gamma_size: size of gamma ramp
560 * @gamma_store: gamma ramp values
561 * @helper_private: mid-layer private data
562 * @properties: property tracking for this CRTC
563 *
564 * Each CRTC may have one or more connectors associated with it. This structure
565 * allows the CRTC to be controlled.
566 */
567 struct drm_crtc {
568 struct drm_device *dev;
569 struct device_node *port;
570 struct list_head head;
571
572 char *name;
573
574 /**
575 * @mutex:
576 *
577 * This provides a read lock for the overall crtc state (mode, dpms
578 * state, ...) and a write lock for everything which can be update
579 * without a full modeset (fb, cursor data, crtc properties ...). Full
580 * modeset also need to grab dev->mode_config.connection_mutex.
581 */
582 struct drm_modeset_lock mutex;
583
584 struct drm_mode_object base;
585
586 /* primary and cursor planes for CRTC */
587 struct drm_plane *primary;
588 struct drm_plane *cursor;
589
590 /**
591 * @index: Position inside the mode_config.list, can be used as an array
592 * index. It is invariant over the lifetime of the CRTC.
593 */
594 unsigned index;
595
596 /* position of cursor plane on crtc */
597 int cursor_x;
598 int cursor_y;
599
600 bool enabled;
601
602 /* Requested mode from modesetting. */
603 struct drm_display_mode mode;
604
605 /* Programmed mode in hw, after adjustments for encoders,
606 * crtc, panel scaling etc. Needed for timestamping etc.
607 */
608 struct drm_display_mode hwmode;
609
610 int x, y;
611 const struct drm_crtc_funcs *funcs;
612
613 /* Legacy FB CRTC gamma size for reporting to userspace */
614 uint32_t gamma_size;
615 uint16_t *gamma_store;
616
617 /* if you are using the helper */
618 const struct drm_crtc_helper_funcs *helper_private;
619
620 struct drm_object_properties properties;
621
622 /**
623 * @state:
624 *
625 * Current atomic state for this CRTC.
626 */
627 struct drm_crtc_state *state;
628
629 /**
630 * @commit_list:
631 *
632 * List of &drm_crtc_commit structures tracking pending commits.
633 * Protected by @commit_lock. This list doesn't hold its own full
634 * reference, but burrows it from the ongoing commit. Commit entries
635 * must be removed from this list once the commit is fully completed,
636 * but before it's correspoding &drm_atomic_state gets destroyed.
637 */
638 struct list_head commit_list;
639
640 /**
641 * @commit_lock:
642 *
643 * Spinlock to protect @commit_list.
644 */
645 spinlock_t commit_lock;
646
647 /**
648 * @acquire_ctx:
649 *
650 * Per-CRTC implicit acquire context used by atomic drivers for legacy
651 * IOCTLs, so that atomic drivers can get at the locking acquire
652 * context.
653 */
654 struct drm_modeset_acquire_ctx *acquire_ctx;
655 };
656
657 /**
658 * struct drm_plane_state - mutable plane state
659 * @plane: backpointer to the plane
660 * @crtc: currently bound CRTC, NULL if disabled
661 * @fb: currently bound framebuffer
662 * @fence: optional fence to wait for before scanning out @fb
663 * @crtc_x: left position of visible portion of plane on crtc
664 * @crtc_y: upper position of visible portion of plane on crtc
665 * @crtc_w: width of visible portion of plane on crtc
666 * @crtc_h: height of visible portion of plane on crtc
667 * @src_x: left position of visible portion of plane within
668 * plane (in 16.16)
669 * @src_y: upper position of visible portion of plane within
670 * plane (in 16.16)
671 * @src_w: width of visible portion of plane (in 16.16)
672 * @src_h: height of visible portion of plane (in 16.16)
673 * @rotation: rotation of the plane
674 * @zpos: priority of the given plane on crtc (optional)
675 * @normalized_zpos: normalized value of zpos: unique, range from 0 to N-1
676 * where N is the number of active planes for given crtc
677 * @src: clipped source coordinates of the plane (in 16.16)
678 * @dst: clipped destination coordinates of the plane
679 * @visible: visibility of the plane
680 * @state: backpointer to global drm_atomic_state
681 */
682 struct drm_plane_state {
683 struct drm_plane *plane;
684
685 struct drm_crtc *crtc; /* do not write directly, use drm_atomic_set_crtc_for_plane() */
686 struct drm_framebuffer *fb; /* do not write directly, use drm_atomic_set_fb_for_plane() */
687 struct fence *fence;
688
689 /* Signed dest location allows it to be partially off screen */
690 int32_t crtc_x, crtc_y;
691 uint32_t crtc_w, crtc_h;
692
693 /* Source values are 16.16 fixed point */
694 uint32_t src_x, src_y;
695 uint32_t src_h, src_w;
696
697 /* Plane rotation */
698 unsigned int rotation;
699
700 /* Plane zpos */
701 unsigned int zpos;
702 unsigned int normalized_zpos;
703
704 /* Clipped coordinates */
705 struct drm_rect src, dst;
706
707 /*
708 * Is the plane actually visible? Can be false even
709 * if fb!=NULL and crtc!=NULL, due to clipping.
710 */
711 bool visible;
712
713 struct drm_atomic_state *state;
714 };
715
716
717 /**
718 * struct drm_plane_funcs - driver plane control functions
719 */
720 struct drm_plane_funcs {
721 /**
722 * @update_plane:
723 *
724 * This is the legacy entry point to enable and configure the plane for
725 * the given CRTC and framebuffer. It is never called to disable the
726 * plane, i.e. the passed-in crtc and fb paramters are never NULL.
727 *
728 * The source rectangle in frame buffer memory coordinates is given by
729 * the src_x, src_y, src_w and src_h parameters (as 16.16 fixed point
730 * values). Devices that don't support subpixel plane coordinates can
731 * ignore the fractional part.
732 *
733 * The destination rectangle in CRTC coordinates is given by the
734 * crtc_x, crtc_y, crtc_w and crtc_h parameters (as integer values).
735 * Devices scale the source rectangle to the destination rectangle. If
736 * scaling is not supported, and the source rectangle size doesn't match
737 * the destination rectangle size, the driver must return a
738 * -<errorname>EINVAL</errorname> error.
739 *
740 * Drivers implementing atomic modeset should use
741 * drm_atomic_helper_update_plane() to implement this hook.
742 *
743 * RETURNS:
744 *
745 * 0 on success or a negative error code on failure.
746 */
747 int (*update_plane)(struct drm_plane *plane,
748 struct drm_crtc *crtc, struct drm_framebuffer *fb,
749 int crtc_x, int crtc_y,
750 unsigned int crtc_w, unsigned int crtc_h,
751 uint32_t src_x, uint32_t src_y,
752 uint32_t src_w, uint32_t src_h);
753
754 /**
755 * @disable_plane:
756 *
757 * This is the legacy entry point to disable the plane. The DRM core
758 * calls this method in response to a DRM_IOCTL_MODE_SETPLANE IOCTL call
759 * with the frame buffer ID set to 0. Disabled planes must not be
760 * processed by the CRTC.
761 *
762 * Drivers implementing atomic modeset should use
763 * drm_atomic_helper_disable_plane() to implement this hook.
764 *
765 * RETURNS:
766 *
767 * 0 on success or a negative error code on failure.
768 */
769 int (*disable_plane)(struct drm_plane *plane);
770
771 /**
772 * @destroy:
773 *
774 * Clean up plane resources. This is only called at driver unload time
775 * through drm_mode_config_cleanup() since a plane cannot be hotplugged
776 * in DRM.
777 */
778 void (*destroy)(struct drm_plane *plane);
779
780 /**
781 * @reset:
782 *
783 * Reset plane hardware and software state to off. This function isn't
784 * called by the core directly, only through drm_mode_config_reset().
785 * It's not a helper hook only for historical reasons.
786 *
787 * Atomic drivers can use drm_atomic_helper_plane_reset() to reset
788 * atomic state using this hook.
789 */
790 void (*reset)(struct drm_plane *plane);
791
792 /**
793 * @set_property:
794 *
795 * This is the legacy entry point to update a property attached to the
796 * plane.
797 *
798 * Drivers implementing atomic modeset should use
799 * drm_atomic_helper_plane_set_property() to implement this hook.
800 *
801 * This callback is optional if the driver does not support any legacy
802 * driver-private properties.
803 *
804 * RETURNS:
805 *
806 * 0 on success or a negative error code on failure.
807 */
808 int (*set_property)(struct drm_plane *plane,
809 struct drm_property *property, uint64_t val);
810
811 /**
812 * @atomic_duplicate_state:
813 *
814 * Duplicate the current atomic state for this plane and return it.
815 * The core and helpers gurantee that any atomic state duplicated with
816 * this hook and still owned by the caller (i.e. not transferred to the
817 * driver by calling ->atomic_commit() from struct
818 * &drm_mode_config_funcs) will be cleaned up by calling the
819 * @atomic_destroy_state hook in this structure.
820 *
821 * Atomic drivers which don't subclass struct &drm_plane_state should use
822 * drm_atomic_helper_plane_duplicate_state(). Drivers that subclass the
823 * state structure to extend it with driver-private state should use
824 * __drm_atomic_helper_plane_duplicate_state() to make sure shared state is
825 * duplicated in a consistent fashion across drivers.
826 *
827 * It is an error to call this hook before plane->state has been
828 * initialized correctly.
829 *
830 * NOTE:
831 *
832 * If the duplicate state references refcounted resources this hook must
833 * acquire a reference for each of them. The driver must release these
834 * references again in @atomic_destroy_state.
835 *
836 * RETURNS:
837 *
838 * Duplicated atomic state or NULL when the allocation failed.
839 */
840 struct drm_plane_state *(*atomic_duplicate_state)(struct drm_plane *plane);
841
842 /**
843 * @atomic_destroy_state:
844 *
845 * Destroy a state duplicated with @atomic_duplicate_state and release
846 * or unreference all resources it references
847 */
848 void (*atomic_destroy_state)(struct drm_plane *plane,
849 struct drm_plane_state *state);
850
851 /**
852 * @atomic_set_property:
853 *
854 * Decode a driver-private property value and store the decoded value
855 * into the passed-in state structure. Since the atomic core decodes all
856 * standardized properties (even for extensions beyond the core set of
857 * properties which might not be implemented by all drivers) this
858 * requires drivers to subclass the state structure.
859 *
860 * Such driver-private properties should really only be implemented for
861 * truly hardware/vendor specific state. Instead it is preferred to
862 * standardize atomic extension and decode the properties used to expose
863 * such an extension in the core.
864 *
865 * Do not call this function directly, use
866 * drm_atomic_plane_set_property() instead.
867 *
868 * This callback is optional if the driver does not support any
869 * driver-private atomic properties.
870 *
871 * NOTE:
872 *
873 * This function is called in the state assembly phase of atomic
874 * modesets, which can be aborted for any reason (including on
875 * userspace's request to just check whether a configuration would be
876 * possible). Drivers MUST NOT touch any persistent state (hardware or
877 * software) or data structures except the passed in @state parameter.
878 *
879 * Also since userspace controls in which order properties are set this
880 * function must not do any input validation (since the state update is
881 * incomplete and hence likely inconsistent). Instead any such input
882 * validation must be done in the various atomic_check callbacks.
883 *
884 * RETURNS:
885 *
886 * 0 if the property has been found, -EINVAL if the property isn't
887 * implemented by the driver (which shouldn't ever happen, the core only
888 * asks for properties attached to this plane). No other validation is
889 * allowed by the driver. The core already checks that the property
890 * value is within the range (integer, valid enum value, ...) the driver
891 * set when registering the property.
892 */
893 int (*atomic_set_property)(struct drm_plane *plane,
894 struct drm_plane_state *state,
895 struct drm_property *property,
896 uint64_t val);
897
898 /**
899 * @atomic_get_property:
900 *
901 * Reads out the decoded driver-private property. This is used to
902 * implement the GETPLANE IOCTL.
903 *
904 * Do not call this function directly, use
905 * drm_atomic_plane_get_property() instead.
906 *
907 * This callback is optional if the driver does not support any
908 * driver-private atomic properties.
909 *
910 * RETURNS:
911 *
912 * 0 on success, -EINVAL if the property isn't implemented by the
913 * driver (which should never happen, the core only asks for
914 * properties attached to this plane).
915 */
916 int (*atomic_get_property)(struct drm_plane *plane,
917 const struct drm_plane_state *state,
918 struct drm_property *property,
919 uint64_t *val);
920 /**
921 * @late_register:
922 *
923 * This optional hook can be used to register additional userspace
924 * interfaces attached to the plane like debugfs interfaces.
925 * It is called late in the driver load sequence from drm_dev_register().
926 * Everything added from this callback should be unregistered in
927 * the early_unregister callback.
928 *
929 * Returns:
930 *
931 * 0 on success, or a negative error code on failure.
932 */
933 int (*late_register)(struct drm_plane *plane);
934
935 /**
936 * @early_unregister:
937 *
938 * This optional hook should be used to unregister the additional
939 * userspace interfaces attached to the plane from
940 * late_unregister(). It is called from drm_dev_unregister(),
941 * early in the driver unload sequence to disable userspace access
942 * before data structures are torndown.
943 */
944 void (*early_unregister)(struct drm_plane *plane);
945 };
946
947 enum drm_plane_type {
948 DRM_PLANE_TYPE_OVERLAY,
949 DRM_PLANE_TYPE_PRIMARY,
950 DRM_PLANE_TYPE_CURSOR,
951 };
952
953
954 /**
955 * struct drm_plane - central DRM plane control structure
956 * @dev: DRM device this plane belongs to
957 * @head: for list management
958 * @name: human readable name, can be overwritten by the driver
959 * @base: base mode object
960 * @possible_crtcs: pipes this plane can be bound to
961 * @format_types: array of formats supported by this plane
962 * @format_count: number of formats supported
963 * @format_default: driver hasn't supplied supported formats for the plane
964 * @crtc: currently bound CRTC
965 * @fb: currently bound fb
966 * @old_fb: Temporary tracking of the old fb while a modeset is ongoing. Used by
967 * drm_mode_set_config_internal() to implement correct refcounting.
968 * @funcs: helper functions
969 * @properties: property tracking for this plane
970 * @type: type of plane (overlay, primary, cursor)
971 * @state: current atomic state for this plane
972 * @zpos_property: zpos property for this plane
973 * @helper_private: mid-layer private data
974 */
975 struct drm_plane {
976 struct drm_device *dev;
977 struct list_head head;
978
979 char *name;
980
981 /**
982 * @mutex:
983 *
984 * Protects modeset plane state, together with the mutex of &drm_crtc
985 * this plane is linked to (when active, getting actived or getting
986 * disabled).
987 */
988 struct drm_modeset_lock mutex;
989
990 struct drm_mode_object base;
991
992 uint32_t possible_crtcs;
993 uint32_t *format_types;
994 unsigned int format_count;
995 bool format_default;
996
997 struct drm_crtc *crtc;
998 struct drm_framebuffer *fb;
999
1000 struct drm_framebuffer *old_fb;
1001
1002 const struct drm_plane_funcs *funcs;
1003
1004 struct drm_object_properties properties;
1005
1006 enum drm_plane_type type;
1007
1008 /**
1009 * @index: Position inside the mode_config.list, can be used as an array
1010 * index. It is invariant over the lifetime of the plane.
1011 */
1012 unsigned index;
1013
1014 const struct drm_plane_helper_funcs *helper_private;
1015
1016 struct drm_plane_state *state;
1017
1018 struct drm_property *zpos_property;
1019 };
1020
1021 /**
1022 * struct drm_bridge_funcs - drm_bridge control functions
1023 */
1024 struct drm_bridge_funcs {
1025 /**
1026 * @attach:
1027 *
1028 * This callback is invoked whenever our bridge is being attached to a
1029 * &drm_encoder.
1030 *
1031 * The attach callback is optional.
1032 *
1033 * RETURNS:
1034 *
1035 * Zero on success, error code on failure.
1036 */
1037 int (*attach)(struct drm_bridge *bridge);
1038
1039 /**
1040 * @detach:
1041 *
1042 * This callback is invoked whenever our bridge is being detached from a
1043 * &drm_encoder.
1044 *
1045 * The detach callback is optional.
1046 */
1047 void (*detach)(struct drm_bridge *bridge);
1048
1049 /**
1050 * @mode_fixup:
1051 *
1052 * This callback is used to validate and adjust a mode. The paramater
1053 * mode is the display mode that should be fed to the next element in
1054 * the display chain, either the final &drm_connector or the next
1055 * &drm_bridge. The parameter adjusted_mode is the input mode the bridge
1056 * requires. It can be modified by this callback and does not need to
1057 * match mode.
1058 *
1059 * This is the only hook that allows a bridge to reject a modeset. If
1060 * this function passes all other callbacks must succeed for this
1061 * configuration.
1062 *
1063 * The mode_fixup callback is optional.
1064 *
1065 * NOTE:
1066 *
1067 * This function is called in the check phase of atomic modesets, which
1068 * can be aborted for any reason (including on userspace's request to
1069 * just check whether a configuration would be possible). Drivers MUST
1070 * NOT touch any persistent state (hardware or software) or data
1071 * structures except the passed in @state parameter.
1072 *
1073 * RETURNS:
1074 *
1075 * True if an acceptable configuration is possible, false if the modeset
1076 * operation should be rejected.
1077 */
1078 bool (*mode_fixup)(struct drm_bridge *bridge,
1079 const struct drm_display_mode *mode,
1080 struct drm_display_mode *adjusted_mode);
1081 /**
1082 * @disable:
1083 *
1084 * This callback should disable the bridge. It is called right before
1085 * the preceding element in the display pipe is disabled. If the
1086 * preceding element is a bridge this means it's called before that
1087 * bridge's ->disable() function. If the preceding element is a
1088 * &drm_encoder it's called right before the encoder's ->disable(),
1089 * ->prepare() or ->dpms() hook from struct &drm_encoder_helper_funcs.
1090 *
1091 * The bridge can assume that the display pipe (i.e. clocks and timing
1092 * signals) feeding it is still running when this callback is called.
1093 *
1094 * The disable callback is optional.
1095 */
1096 void (*disable)(struct drm_bridge *bridge);
1097
1098 /**
1099 * @post_disable:
1100 *
1101 * This callback should disable the bridge. It is called right after
1102 * the preceding element in the display pipe is disabled. If the
1103 * preceding element is a bridge this means it's called after that
1104 * bridge's ->post_disable() function. If the preceding element is a
1105 * &drm_encoder it's called right after the encoder's ->disable(),
1106 * ->prepare() or ->dpms() hook from struct &drm_encoder_helper_funcs.
1107 *
1108 * The bridge must assume that the display pipe (i.e. clocks and timing
1109 * singals) feeding it is no longer running when this callback is
1110 * called.
1111 *
1112 * The post_disable callback is optional.
1113 */
1114 void (*post_disable)(struct drm_bridge *bridge);
1115
1116 /**
1117 * @mode_set:
1118 *
1119 * This callback should set the given mode on the bridge. It is called
1120 * after the ->mode_set() callback for the preceding element in the
1121 * display pipeline has been called already. The display pipe (i.e.
1122 * clocks and timing signals) is off when this function is called.
1123 */
1124 void (*mode_set)(struct drm_bridge *bridge,
1125 struct drm_display_mode *mode,
1126 struct drm_display_mode *adjusted_mode);
1127 /**
1128 * @pre_enable:
1129 *
1130 * This callback should enable the bridge. It is called right before
1131 * the preceding element in the display pipe is enabled. If the
1132 * preceding element is a bridge this means it's called before that
1133 * bridge's ->pre_enable() function. If the preceding element is a
1134 * &drm_encoder it's called right before the encoder's ->enable(),
1135 * ->commit() or ->dpms() hook from struct &drm_encoder_helper_funcs.
1136 *
1137 * The display pipe (i.e. clocks and timing signals) feeding this bridge
1138 * will not yet be running when this callback is called. The bridge must
1139 * not enable the display link feeding the next bridge in the chain (if
1140 * there is one) when this callback is called.
1141 *
1142 * The pre_enable callback is optional.
1143 */
1144 void (*pre_enable)(struct drm_bridge *bridge);
1145
1146 /**
1147 * @enable:
1148 *
1149 * This callback should enable the bridge. It is called right after
1150 * the preceding element in the display pipe is enabled. If the
1151 * preceding element is a bridge this means it's called after that
1152 * bridge's ->enable() function. If the preceding element is a
1153 * &drm_encoder it's called right after the encoder's ->enable(),
1154 * ->commit() or ->dpms() hook from struct &drm_encoder_helper_funcs.
1155 *
1156 * The bridge can assume that the display pipe (i.e. clocks and timing
1157 * signals) feeding it is running when this callback is called. This
1158 * callback must enable the display link feeding the next bridge in the
1159 * chain if there is one.
1160 *
1161 * The enable callback is optional.
1162 */
1163 void (*enable)(struct drm_bridge *bridge);
1164 };
1165
1166 /**
1167 * struct drm_bridge - central DRM bridge control structure
1168 * @dev: DRM device this bridge belongs to
1169 * @encoder: encoder to which this bridge is connected
1170 * @next: the next bridge in the encoder chain
1171 * @of_node: device node pointer to the bridge
1172 * @list: to keep track of all added bridges
1173 * @funcs: control functions
1174 * @driver_private: pointer to the bridge driver's internal context
1175 */
1176 struct drm_bridge {
1177 struct drm_device *dev;
1178 struct drm_encoder *encoder;
1179 struct drm_bridge *next;
1180 #ifdef CONFIG_OF
1181 struct device_node *of_node;
1182 #endif
1183 struct list_head list;
1184
1185 const struct drm_bridge_funcs *funcs;
1186 void *driver_private;
1187 };
1188
1189 /**
1190 * struct drm_crtc_commit - track modeset commits on a CRTC
1191 *
1192 * This structure is used to track pending modeset changes and atomic commit on
1193 * a per-CRTC basis. Since updating the list should never block this structure
1194 * is reference counted to allow waiters to safely wait on an event to complete,
1195 * without holding any locks.
1196 *
1197 * It has 3 different events in total to allow a fine-grained synchronization
1198 * between outstanding updates::
1199 *
1200 * atomic commit thread hardware
1201 *
1202 * write new state into hardware ----> ...
1203 * signal hw_done
1204 * switch to new state on next
1205 * ... v/hblank
1206 *
1207 * wait for buffers to show up ...
1208 *
1209 * ... send completion irq
1210 * irq handler signals flip_done
1211 * cleanup old buffers
1212 *
1213 * signal cleanup_done
1214 *
1215 * wait for flip_done <----
1216 * clean up atomic state
1217 *
1218 * The important bit to know is that cleanup_done is the terminal event, but the
1219 * ordering between flip_done and hw_done is entirely up to the specific driver
1220 * and modeset state change.
1221 *
1222 * For an implementation of how to use this look at
1223 * drm_atomic_helper_setup_commit() from the atomic helper library.
1224 */
1225 struct drm_crtc_commit {
1226 /**
1227 * @crtc:
1228 *
1229 * DRM CRTC for this commit.
1230 */
1231 struct drm_crtc *crtc;
1232
1233 /**
1234 * @ref:
1235 *
1236 * Reference count for this structure. Needed to allow blocking on
1237 * completions without the risk of the completion disappearing
1238 * meanwhile.
1239 */
1240 struct kref ref;
1241
1242 /**
1243 * @flip_done:
1244 *
1245 * Will be signaled when the hardware has flipped to the new set of
1246 * buffers. Signals at the same time as when the drm event for this
1247 * commit is sent to userspace, or when an out-fence is singalled. Note
1248 * that for most hardware, in most cases this happens after @hw_done is
1249 * signalled.
1250 */
1251 struct completion flip_done;
1252
1253 /**
1254 * @hw_done:
1255 *
1256 * Will be signalled when all hw register changes for this commit have
1257 * been written out. Especially when disabling a pipe this can be much
1258 * later than than @flip_done, since that can signal already when the
1259 * screen goes black, whereas to fully shut down a pipe more register
1260 * I/O is required.
1261 *
1262 * Note that this does not need to include separately reference-counted
1263 * resources like backing storage buffer pinning, or runtime pm
1264 * management.
1265 */
1266 struct completion hw_done;
1267
1268 /**
1269 * @cleanup_done:
1270 *
1271 * Will be signalled after old buffers have been cleaned up by calling
1272 * drm_atomic_helper_cleanup_planes(). Since this can only happen after
1273 * a vblank wait completed it might be a bit later. This completion is
1274 * useful to throttle updates and avoid hardware updates getting ahead
1275 * of the buffer cleanup too much.
1276 */
1277 struct completion cleanup_done;
1278
1279 /**
1280 * @commit_entry:
1281 *
1282 * Entry on the per-CRTC commit_list. Protected by crtc->commit_lock.
1283 */
1284 struct list_head commit_entry;
1285
1286 /**
1287 * @event:
1288 *
1289 * &drm_pending_vblank_event pointer to clean up private events.
1290 */
1291 struct drm_pending_vblank_event *event;
1292 };
1293
1294 struct __drm_planes_state {
1295 struct drm_plane *ptr;
1296 struct drm_plane_state *state;
1297 };
1298
1299 struct __drm_crtcs_state {
1300 struct drm_crtc *ptr;
1301 struct drm_crtc_state *state;
1302 struct drm_crtc_commit *commit;
1303 };
1304
1305 struct __drm_connnectors_state {
1306 struct drm_connector *ptr;
1307 struct drm_connector_state *state;
1308 };
1309
1310 /**
1311 * struct drm_atomic_state - the global state object for atomic updates
1312 * @dev: parent DRM device
1313 * @allow_modeset: allow full modeset
1314 * @legacy_cursor_update: hint to enforce legacy cursor IOCTL semantics
1315 * @legacy_set_config: Disable conflicting encoders instead of failing with -EINVAL.
1316 * @planes: pointer to array of structures with per-plane data
1317 * @crtcs: pointer to array of CRTC pointers
1318 * @num_connector: size of the @connectors and @connector_states arrays
1319 * @connectors: pointer to array of structures with per-connector data
1320 * @acquire_ctx: acquire context for this atomic modeset state update
1321 */
1322 struct drm_atomic_state {
1323 struct drm_device *dev;
1324 bool allow_modeset : 1;
1325 bool legacy_cursor_update : 1;
1326 bool legacy_set_config : 1;
1327 struct __drm_planes_state *planes;
1328 struct __drm_crtcs_state *crtcs;
1329 int num_connector;
1330 struct __drm_connnectors_state *connectors;
1331
1332 struct drm_modeset_acquire_ctx *acquire_ctx;
1333
1334 /**
1335 * @commit_work:
1336 *
1337 * Work item which can be used by the driver or helpers to execute the
1338 * commit without blocking.
1339 */
1340 struct work_struct commit_work;
1341 };
1342
1343
1344 /**
1345 * struct drm_mode_set - new values for a CRTC config change
1346 * @fb: framebuffer to use for new config
1347 * @crtc: CRTC whose configuration we're about to change
1348 * @mode: mode timings to use
1349 * @x: position of this CRTC relative to @fb
1350 * @y: position of this CRTC relative to @fb
1351 * @connectors: array of connectors to drive with this CRTC if possible
1352 * @num_connectors: size of @connectors array
1353 *
1354 * Represents a single crtc the connectors that it drives with what mode
1355 * and from which framebuffer it scans out from.
1356 *
1357 * This is used to set modes.
1358 */
1359 struct drm_mode_set {
1360 struct drm_framebuffer *fb;
1361 struct drm_crtc *crtc;
1362 struct drm_display_mode *mode;
1363
1364 uint32_t x;
1365 uint32_t y;
1366
1367 struct drm_connector **connectors;
1368 size_t num_connectors;
1369 };
1370
1371 /**
1372 * struct drm_mode_config_funcs - basic driver provided mode setting functions
1373 *
1374 * Some global (i.e. not per-CRTC, connector, etc) mode setting functions that
1375 * involve drivers.
1376 */
1377 struct drm_mode_config_funcs {
1378 /**
1379 * @fb_create:
1380 *
1381 * Create a new framebuffer object. The core does basic checks on the
1382 * requested metadata, but most of that is left to the driver. See
1383 * struct &drm_mode_fb_cmd2 for details.
1384 *
1385 * If the parameters are deemed valid and the backing storage objects in
1386 * the underlying memory manager all exist, then the driver allocates
1387 * a new &drm_framebuffer structure, subclassed to contain
1388 * driver-specific information (like the internal native buffer object
1389 * references). It also needs to fill out all relevant metadata, which
1390 * should be done by calling drm_helper_mode_fill_fb_struct().
1391 *
1392 * The initialization is finalized by calling drm_framebuffer_init(),
1393 * which registers the framebuffer and makes it accessible to other
1394 * threads.
1395 *
1396 * RETURNS:
1397 *
1398 * A new framebuffer with an initial reference count of 1 or a negative
1399 * error code encoded with ERR_PTR().
1400 */
1401 struct drm_framebuffer *(*fb_create)(struct drm_device *dev,
1402 struct drm_file *file_priv,
1403 const struct drm_mode_fb_cmd2 *mode_cmd);
1404
1405 /**
1406 * @output_poll_changed:
1407 *
1408 * Callback used by helpers to inform the driver of output configuration
1409 * changes.
1410 *
1411 * Drivers implementing fbdev emulation with the helpers can call
1412 * drm_fb_helper_hotplug_changed from this hook to inform the fbdev
1413 * helper of output changes.
1414 *
1415 * FIXME:
1416 *
1417 * Except that there's no vtable for device-level helper callbacks
1418 * there's no reason this is a core function.
1419 */
1420 void (*output_poll_changed)(struct drm_device *dev);
1421
1422 /**
1423 * @atomic_check:
1424 *
1425 * This is the only hook to validate an atomic modeset update. This
1426 * function must reject any modeset and state changes which the hardware
1427 * or driver doesn't support. This includes but is of course not limited
1428 * to:
1429 *
1430 * - Checking that the modes, framebuffers, scaling and placement
1431 * requirements and so on are within the limits of the hardware.
1432 *
1433 * - Checking that any hidden shared resources are not oversubscribed.
1434 * This can be shared PLLs, shared lanes, overall memory bandwidth,
1435 * display fifo space (where shared between planes or maybe even
1436 * CRTCs).
1437 *
1438 * - Checking that virtualized resources exported to userspace are not
1439 * oversubscribed. For various reasons it can make sense to expose
1440 * more planes, crtcs or encoders than which are physically there. One
1441 * example is dual-pipe operations (which generally should be hidden
1442 * from userspace if when lockstepped in hardware, exposed otherwise),
1443 * where a plane might need 1 hardware plane (if it's just on one
1444 * pipe), 2 hardware planes (when it spans both pipes) or maybe even
1445 * shared a hardware plane with a 2nd plane (if there's a compatible
1446 * plane requested on the area handled by the other pipe).
1447 *
1448 * - Check that any transitional state is possible and that if
1449 * requested, the update can indeed be done in the vblank period
1450 * without temporarily disabling some functions.
1451 *
1452 * - Check any other constraints the driver or hardware might have.
1453 *
1454 * - This callback also needs to correctly fill out the &drm_crtc_state
1455 * in this update to make sure that drm_atomic_crtc_needs_modeset()
1456 * reflects the nature of the possible update and returns true if and
1457 * only if the update cannot be applied without tearing within one
1458 * vblank on that CRTC. The core uses that information to reject
1459 * updates which require a full modeset (i.e. blanking the screen, or
1460 * at least pausing updates for a substantial amount of time) if
1461 * userspace has disallowed that in its request.
1462 *
1463 * - The driver also does not need to repeat basic input validation
1464 * like done for the corresponding legacy entry points. The core does
1465 * that before calling this hook.
1466 *
1467 * See the documentation of @atomic_commit for an exhaustive list of
1468 * error conditions which don't have to be checked at the
1469 * ->atomic_check() stage?
1470 *
1471 * See the documentation for struct &drm_atomic_state for how exactly
1472 * an atomic modeset update is described.
1473 *
1474 * Drivers using the atomic helpers can implement this hook using
1475 * drm_atomic_helper_check(), or one of the exported sub-functions of
1476 * it.
1477 *
1478 * RETURNS:
1479 *
1480 * 0 on success or one of the below negative error codes:
1481 *
1482 * - -EINVAL, if any of the above constraints are violated.
1483 *
1484 * - -EDEADLK, when returned from an attempt to acquire an additional
1485 * &drm_modeset_lock through drm_modeset_lock().
1486 *
1487 * - -ENOMEM, if allocating additional state sub-structures failed due
1488 * to lack of memory.
1489 *
1490 * - -EINTR, -EAGAIN or -ERESTARTSYS, if the IOCTL should be restarted.
1491 * This can either be due to a pending signal, or because the driver
1492 * needs to completely bail out to recover from an exceptional
1493 * situation like a GPU hang. From a userspace point all errors are
1494 * treated equally.
1495 */
1496 int (*atomic_check)(struct drm_device *dev,
1497 struct drm_atomic_state *state);
1498
1499 /**
1500 * @atomic_commit:
1501 *
1502 * This is the only hook to commit an atomic modeset update. The core
1503 * guarantees that @atomic_check has been called successfully before
1504 * calling this function, and that nothing has been changed in the
1505 * interim.
1506 *
1507 * See the documentation for struct &drm_atomic_state for how exactly
1508 * an atomic modeset update is described.
1509 *
1510 * Drivers using the atomic helpers can implement this hook using
1511 * drm_atomic_helper_commit(), or one of the exported sub-functions of
1512 * it.
1513 *
1514 * Nonblocking commits (as indicated with the nonblock parameter) must
1515 * do any preparatory work which might result in an unsuccessful commit
1516 * in the context of this callback. The only exceptions are hardware
1517 * errors resulting in -EIO. But even in that case the driver must
1518 * ensure that the display pipe is at least running, to avoid
1519 * compositors crashing when pageflips don't work. Anything else,
1520 * specifically committing the update to the hardware, should be done
1521 * without blocking the caller. For updates which do not require a
1522 * modeset this must be guaranteed.
1523 *
1524 * The driver must wait for any pending rendering to the new
1525 * framebuffers to complete before executing the flip. It should also
1526 * wait for any pending rendering from other drivers if the underlying
1527 * buffer is a shared dma-buf. Nonblocking commits must not wait for
1528 * rendering in the context of this callback.
1529 *
1530 * An application can request to be notified when the atomic commit has
1531 * completed. These events are per-CRTC and can be distinguished by the
1532 * CRTC index supplied in &drm_event to userspace.
1533 *
1534 * The drm core will supply a struct &drm_event in the event
1535 * member of each CRTC's &drm_crtc_state structure. This can be handled by the
1536 * drm_crtc_send_vblank_event() function, which the driver should call on
1537 * the provided event upon completion of the atomic commit. Note that if
1538 * the driver supports vblank signalling and timestamping the vblank
1539 * counters and timestamps must agree with the ones returned from page
1540 * flip events. With the current vblank helper infrastructure this can
1541 * be achieved by holding a vblank reference while the page flip is
1542 * pending, acquired through drm_crtc_vblank_get() and released with
1543 * drm_crtc_vblank_put(). Drivers are free to implement their own vblank
1544 * counter and timestamp tracking though, e.g. if they have accurate
1545 * timestamp registers in hardware.
1546 *
1547 * NOTE:
1548 *
1549 * Drivers are not allowed to shut down any display pipe successfully
1550 * enabled through an atomic commit on their own. Doing so can result in
1551 * compositors crashing if a page flip is suddenly rejected because the
1552 * pipe is off.
1553 *
1554 * RETURNS:
1555 *
1556 * 0 on success or one of the below negative error codes:
1557 *
1558 * - -EBUSY, if a nonblocking updated is requested and there is
1559 * an earlier updated pending. Drivers are allowed to support a queue
1560 * of outstanding updates, but currently no driver supports that.
1561 * Note that drivers must wait for preceding updates to complete if a
1562 * synchronous update is requested, they are not allowed to fail the
1563 * commit in that case.
1564 *
1565 * - -ENOMEM, if the driver failed to allocate memory. Specifically
1566 * this can happen when trying to pin framebuffers, which must only
1567 * be done when committing the state.
1568 *
1569 * - -ENOSPC, as a refinement of the more generic -ENOMEM to indicate
1570 * that the driver has run out of vram, iommu space or similar GPU
1571 * address space needed for framebuffer.
1572 *
1573 * - -EIO, if the hardware completely died.
1574 *
1575 * - -EINTR, -EAGAIN or -ERESTARTSYS, if the IOCTL should be restarted.
1576 * This can either be due to a pending signal, or because the driver
1577 * needs to completely bail out to recover from an exceptional
1578 * situation like a GPU hang. From a userspace point of view all errors are
1579 * treated equally.
1580 *
1581 * This list is exhaustive. Specifically this hook is not allowed to
1582 * return -EINVAL (any invalid requests should be caught in
1583 * @atomic_check) or -EDEADLK (this function must not acquire
1584 * additional modeset locks).
1585 */
1586 int (*atomic_commit)(struct drm_device *dev,
1587 struct drm_atomic_state *state,
1588 bool nonblock);
1589
1590 /**
1591 * @atomic_state_alloc:
1592 *
1593 * This optional hook can be used by drivers that want to subclass struct
1594 * &drm_atomic_state to be able to track their own driver-private global
1595 * state easily. If this hook is implemented, drivers must also
1596 * implement @atomic_state_clear and @atomic_state_free.
1597 *
1598 * RETURNS:
1599 *
1600 * A new &drm_atomic_state on success or NULL on failure.
1601 */
1602 struct drm_atomic_state *(*atomic_state_alloc)(struct drm_device *dev);
1603
1604 /**
1605 * @atomic_state_clear:
1606 *
1607 * This hook must clear any driver private state duplicated into the
1608 * passed-in &drm_atomic_state. This hook is called when the caller
1609 * encountered a &drm_modeset_lock deadlock and needs to drop all
1610 * already acquired locks as part of the deadlock avoidance dance
1611 * implemented in drm_modeset_lock_backoff().
1612 *
1613 * Any duplicated state must be invalidated since a concurrent atomic
1614 * update might change it, and the drm atomic interfaces always apply
1615 * updates as relative changes to the current state.
1616 *
1617 * Drivers that implement this must call drm_atomic_state_default_clear()
1618 * to clear common state.
1619 */
1620 void (*atomic_state_clear)(struct drm_atomic_state *state);
1621
1622 /**
1623 * @atomic_state_free:
1624 *
1625 * This hook needs driver private resources and the &drm_atomic_state
1626 * itself. Note that the core first calls drm_atomic_state_clear() to
1627 * avoid code duplicate between the clear and free hooks.
1628 *
1629 * Drivers that implement this must call drm_atomic_state_default_free()
1630 * to release common resources.
1631 */
1632 void (*atomic_state_free)(struct drm_atomic_state *state);
1633 };
1634
1635 /**
1636 * struct drm_mode_config - Mode configuration control structure
1637 * @mutex: mutex protecting KMS related lists and structures
1638 * @connection_mutex: ww mutex protecting connector state and routing
1639 * @acquire_ctx: global implicit acquire context used by atomic drivers for
1640 * legacy IOCTLs
1641 * @fb_lock: mutex to protect fb state and lists
1642 * @num_fb: number of fbs available
1643 * @fb_list: list of framebuffers available
1644 * @num_encoder: number of encoders on this device
1645 * @encoder_list: list of encoder objects
1646 * @num_overlay_plane: number of overlay planes on this device
1647 * @num_total_plane: number of universal (i.e. with primary/curso) planes on this device
1648 * @plane_list: list of plane objects
1649 * @num_crtc: number of CRTCs on this device
1650 * @crtc_list: list of CRTC objects
1651 * @property_list: list of property objects
1652 * @min_width: minimum pixel width on this device
1653 * @min_height: minimum pixel height on this device
1654 * @max_width: maximum pixel width on this device
1655 * @max_height: maximum pixel height on this device
1656 * @funcs: core driver provided mode setting functions
1657 * @fb_base: base address of the framebuffer
1658 * @poll_enabled: track polling support for this device
1659 * @poll_running: track polling status for this device
1660 * @delayed_event: track delayed poll uevent deliver for this device
1661 * @output_poll_work: delayed work for polling in process context
1662 * @property_blob_list: list of all the blob property objects
1663 * @blob_lock: mutex for blob property allocation and management
1664 * @*_property: core property tracking
1665 * @preferred_depth: preferred RBG pixel depth, used by fb helpers
1666 * @prefer_shadow: hint to userspace to prefer shadow-fb rendering
1667 * @cursor_width: hint to userspace for max cursor width
1668 * @cursor_height: hint to userspace for max cursor height
1669 * @helper_private: mid-layer private data
1670 *
1671 * Core mode resource tracking structure. All CRTC, encoders, and connectors
1672 * enumerated by the driver are added here, as are global properties. Some
1673 * global restrictions are also here, e.g. dimension restrictions.
1674 */
1675 struct drm_mode_config {
1676 struct mutex mutex; /* protects configuration (mode lists etc.) */
1677 struct drm_modeset_lock connection_mutex; /* protects connector->encoder and encoder->crtc links */
1678 struct drm_modeset_acquire_ctx *acquire_ctx; /* for legacy _lock_all() / _unlock_all() */
1679
1680 /**
1681 * @idr_mutex:
1682 *
1683 * Mutex for KMS ID allocation and management. Protects both @crtc_idr
1684 * and @tile_idr.
1685 */
1686 struct mutex idr_mutex;
1687
1688 /**
1689 * @crtc_idr:
1690 *
1691 * Main KMS ID tracking object. Use this idr for all IDs, fb, crtc,
1692 * connector, modes - just makes life easier to have only one.
1693 */
1694 struct idr crtc_idr;
1695
1696 /**
1697 * @tile_idr:
1698 *
1699 * Use this idr for allocating new IDs for tiled sinks like use in some
1700 * high-res DP MST screens.
1701 */
1702 struct idr tile_idr;
1703
1704 struct mutex fb_lock; /* proctects global and per-file fb lists */
1705 int num_fb;
1706 struct list_head fb_list;
1707
1708 /**
1709 * @num_connector: Number of connectors on this device.
1710 */
1711 int num_connector;
1712 /**
1713 * @connector_ida: ID allocator for connector indices.
1714 */
1715 struct ida connector_ida;
1716 /**
1717 * @connector_list: List of connector objects.
1718 */
1719 struct list_head connector_list;
1720 int num_encoder;
1721 struct list_head encoder_list;
1722
1723 /*
1724 * Track # of overlay planes separately from # of total planes. By
1725 * default we only advertise overlay planes to userspace; if userspace
1726 * sets the "universal plane" capability bit, we'll go ahead and
1727 * expose all planes.
1728 */
1729 int num_overlay_plane;
1730 int num_total_plane;
1731 struct list_head plane_list;
1732
1733 int num_crtc;
1734 struct list_head crtc_list;
1735
1736 struct list_head property_list;
1737
1738 int min_width, min_height;
1739 int max_width, max_height;
1740 const struct drm_mode_config_funcs *funcs;
1741 resource_size_t fb_base;
1742
1743 /* output poll support */
1744 bool poll_enabled;
1745 bool poll_running;
1746 bool delayed_event;
1747 struct delayed_work output_poll_work;
1748
1749 struct mutex blob_lock;
1750
1751 /* pointers to standard properties */
1752 struct list_head property_blob_list;
1753 /**
1754 * @edid_property: Default connector property to hold the EDID of the
1755 * currently connected sink, if any.
1756 */
1757 struct drm_property *edid_property;
1758 /**
1759 * @dpms_property: Default connector property to control the
1760 * connector's DPMS state.
1761 */
1762 struct drm_property *dpms_property;
1763 /**
1764 * @path_property: Default connector property to hold the DP MST path
1765 * for the port.
1766 */
1767 struct drm_property *path_property;
1768 /**
1769 * @tile_property: Default connector property to store the tile
1770 * position of a tiled screen, for sinks which need to be driven with
1771 * multiple CRTCs.
1772 */
1773 struct drm_property *tile_property;
1774 /**
1775 * @plane_type_property: Default plane property to differentiate
1776 * CURSOR, PRIMARY and OVERLAY legacy uses of planes.
1777 */
1778 struct drm_property *plane_type_property;
1779 /**
1780 * @rotation_property: Optional property for planes or CRTCs to specifiy
1781 * rotation.
1782 */
1783 struct drm_property *rotation_property;
1784 /**
1785 * @prop_src_x: Default atomic plane property for the plane source
1786 * position in the connected &drm_framebuffer.
1787 */
1788 struct drm_property *prop_src_x;
1789 /**
1790 * @prop_src_y: Default atomic plane property for the plane source
1791 * position in the connected &drm_framebuffer.
1792 */
1793 struct drm_property *prop_src_y;
1794 /**
1795 * @prop_src_w: Default atomic plane property for the plane source
1796 * position in the connected &drm_framebuffer.
1797 */
1798 struct drm_property *prop_src_w;
1799 /**
1800 * @prop_src_h: Default atomic plane property for the plane source
1801 * position in the connected &drm_framebuffer.
1802 */
1803 struct drm_property *prop_src_h;
1804 /**
1805 * @prop_crtc_x: Default atomic plane property for the plane destination
1806 * position in the &drm_crtc is is being shown on.
1807 */
1808 struct drm_property *prop_crtc_x;
1809 /**
1810 * @prop_crtc_y: Default atomic plane property for the plane destination
1811 * position in the &drm_crtc is is being shown on.
1812 */
1813 struct drm_property *prop_crtc_y;
1814 /**
1815 * @prop_crtc_w: Default atomic plane property for the plane destination
1816 * position in the &drm_crtc is is being shown on.
1817 */
1818 struct drm_property *prop_crtc_w;
1819 /**
1820 * @prop_crtc_h: Default atomic plane property for the plane destination
1821 * position in the &drm_crtc is is being shown on.
1822 */
1823 struct drm_property *prop_crtc_h;
1824 /**
1825 * @prop_fb_id: Default atomic plane property to specify the
1826 * &drm_framebuffer.
1827 */
1828 struct drm_property *prop_fb_id;
1829 /**
1830 * @prop_crtc_id: Default atomic plane property to specify the
1831 * &drm_crtc.
1832 */
1833 struct drm_property *prop_crtc_id;
1834 /**
1835 * @prop_active: Default atomic CRTC property to control the active
1836 * state, which is the simplified implementation for DPMS in atomic
1837 * drivers.
1838 */
1839 struct drm_property *prop_active;
1840 /**
1841 * @prop_mode_id: Default atomic CRTC property to set the mode for a
1842 * CRTC. A 0 mode implies that the CRTC is entirely disabled - all
1843 * connectors must be of and active must be set to disabled, too.
1844 */
1845 struct drm_property *prop_mode_id;
1846
1847 /**
1848 * @dvi_i_subconnector_property: Optional DVI-I property to
1849 * differentiate between analog or digital mode.
1850 */
1851 struct drm_property *dvi_i_subconnector_property;
1852 /**
1853 * @dvi_i_select_subconnector_property: Optional DVI-I property to
1854 * select between analog or digital mode.
1855 */
1856 struct drm_property *dvi_i_select_subconnector_property;
1857
1858 /**
1859 * @tv_subconnector_property: Optional TV property to differentiate
1860 * between different TV connector types.
1861 */
1862 struct drm_property *tv_subconnector_property;
1863 /**
1864 * @tv_select_subconnector_property: Optional TV property to select
1865 * between different TV connector types.
1866 */
1867 struct drm_property *tv_select_subconnector_property;
1868 /**
1869 * @tv_mode_property: Optional TV property to select
1870 * the output TV mode.
1871 */
1872 struct drm_property *tv_mode_property;
1873 /**
1874 * @tv_left_margin_property: Optional TV property to set the left
1875 * margin.
1876 */
1877 struct drm_property *tv_left_margin_property;
1878 /**
1879 * @tv_right_margin_property: Optional TV property to set the right
1880 * margin.
1881 */
1882 struct drm_property *tv_right_margin_property;
1883 /**
1884 * @tv_top_margin_property: Optional TV property to set the right
1885 * margin.
1886 */
1887 struct drm_property *tv_top_margin_property;
1888 /**
1889 * @tv_bottom_margin_property: Optional TV property to set the right
1890 * margin.
1891 */
1892 struct drm_property *tv_bottom_margin_property;
1893 /**
1894 * @tv_brightness_property: Optional TV property to set the
1895 * brightness.
1896 */
1897 struct drm_property *tv_brightness_property;
1898 /**
1899 * @tv_contrast_property: Optional TV property to set the
1900 * contrast.
1901 */
1902 struct drm_property *tv_contrast_property;
1903 /**
1904 * @tv_flicker_reduction_property: Optional TV property to control the
1905 * flicker reduction mode.
1906 */
1907 struct drm_property *tv_flicker_reduction_property;
1908 /**
1909 * @tv_overscan_property: Optional TV property to control the overscan
1910 * setting.
1911 */
1912 struct drm_property *tv_overscan_property;
1913 /**
1914 * @tv_saturation_property: Optional TV property to set the
1915 * saturation.
1916 */
1917 struct drm_property *tv_saturation_property;
1918 /**
1919 * @tv_hue_property: Optional TV property to set the hue.
1920 */
1921 struct drm_property *tv_hue_property;
1922
1923 /**
1924 * @scaling_mode_property: Optional connector property to control the
1925 * upscaling, mostly used for built-in panels.
1926 */
1927 struct drm_property *scaling_mode_property;
1928 /**
1929 * @aspect_ratio_property: Optional connector property to control the
1930 * HDMI infoframe aspect ratio setting.
1931 */
1932 struct drm_property *aspect_ratio_property;
1933 /**
1934 * @degamma_lut_property: Optional CRTC property to set the LUT used to
1935 * convert the framebuffer's colors to linear gamma.
1936 */
1937 struct drm_property *degamma_lut_property;
1938 /**
1939 * @degamma_lut_size_property: Optional CRTC property for the size of
1940 * the degamma LUT as supported by the driver (read-only).
1941 */
1942 struct drm_property *degamma_lut_size_property;
1943 /**
1944 * @ctm_property: Optional CRTC property to set the
1945 * matrix used to convert colors after the lookup in the
1946 * degamma LUT.
1947 */
1948 struct drm_property *ctm_property;
1949 /**
1950 * @gamma_lut_property: Optional CRTC property to set the LUT used to
1951 * convert the colors, after the CTM matrix, to the gamma space of the
1952 * connected screen.
1953 */
1954 struct drm_property *gamma_lut_property;
1955 /**
1956 * @gamma_lut_size_property: Optional CRTC property for the size of the
1957 * gamma LUT as supported by the driver (read-only).
1958 */
1959 struct drm_property *gamma_lut_size_property;
1960
1961 /**
1962 * @suggested_x_property: Optional connector property with a hint for
1963 * the position of the output on the host's screen.
1964 */
1965 struct drm_property *suggested_x_property;
1966 /**
1967 * @suggested_y_property: Optional connector property with a hint for
1968 * the position of the output on the host's screen.
1969 */
1970 struct drm_property *suggested_y_property;
1971
1972 /* dumb ioctl parameters */
1973 uint32_t preferred_depth, prefer_shadow;
1974
1975 /**
1976 * @async_page_flip: Does this device support async flips on the primary
1977 * plane?
1978 */
1979 bool async_page_flip;
1980
1981 /**
1982 * @allow_fb_modifiers:
1983 *
1984 * Whether the driver supports fb modifiers in the ADDFB2.1 ioctl call.
1985 */
1986 bool allow_fb_modifiers;
1987
1988 /* cursor size */
1989 uint32_t cursor_width, cursor_height;
1990
1991 struct drm_mode_config_helper_funcs *helper_private;
1992 };
1993
1994 /**
1995 * drm_for_each_plane_mask - iterate over planes specified by bitmask
1996 * @plane: the loop cursor
1997 * @dev: the DRM device
1998 * @plane_mask: bitmask of plane indices
1999 *
2000 * Iterate over all planes specified by bitmask.
2001 */
2002 #define drm_for_each_plane_mask(plane, dev, plane_mask) \
2003 list_for_each_entry((plane), &(dev)->mode_config.plane_list, head) \
2004 for_each_if ((plane_mask) & (1 << drm_plane_index(plane)))
2005
2006 /**
2007 * drm_for_each_encoder_mask - iterate over encoders specified by bitmask
2008 * @encoder: the loop cursor
2009 * @dev: the DRM device
2010 * @encoder_mask: bitmask of encoder indices
2011 *
2012 * Iterate over all encoders specified by bitmask.
2013 */
2014 #define drm_for_each_encoder_mask(encoder, dev, encoder_mask) \
2015 list_for_each_entry((encoder), &(dev)->mode_config.encoder_list, head) \
2016 for_each_if ((encoder_mask) & (1 << drm_encoder_index(encoder)))
2017
2018 #define obj_to_crtc(x) container_of(x, struct drm_crtc, base)
2019 #define obj_to_mode(x) container_of(x, struct drm_display_mode, base)
2020 #define obj_to_fb(x) container_of(x, struct drm_framebuffer, base)
2021 #define obj_to_blob(x) container_of(x, struct drm_property_blob, base)
2022 #define obj_to_plane(x) container_of(x, struct drm_plane, base)
2023
2024 extern __printf(6, 7)
2025 int drm_crtc_init_with_planes(struct drm_device *dev,
2026 struct drm_crtc *crtc,
2027 struct drm_plane *primary,
2028 struct drm_plane *cursor,
2029 const struct drm_crtc_funcs *funcs,
2030 const char *name, ...);
2031 extern void drm_crtc_cleanup(struct drm_crtc *crtc);
2032
2033 /**
2034 * drm_crtc_index - find the index of a registered CRTC
2035 * @crtc: CRTC to find index for
2036 *
2037 * Given a registered CRTC, return the index of that CRTC within a DRM
2038 * device's list of CRTCs.
2039 */
2040 static inline unsigned int drm_crtc_index(struct drm_crtc *crtc)
2041 {
2042 return crtc->index;
2043 }
2044
2045 /**
2046 * drm_crtc_mask - find the mask of a registered CRTC
2047 * @crtc: CRTC to find mask for
2048 *
2049 * Given a registered CRTC, return the mask bit of that CRTC for an
2050 * encoder's possible_crtcs field.
2051 */
2052 static inline uint32_t drm_crtc_mask(struct drm_crtc *crtc)
2053 {
2054 return 1 << drm_crtc_index(crtc);
2055 }
2056
2057 extern __printf(8, 9)
2058 int drm_universal_plane_init(struct drm_device *dev,
2059 struct drm_plane *plane,
2060 unsigned long possible_crtcs,
2061 const struct drm_plane_funcs *funcs,
2062 const uint32_t *formats,
2063 unsigned int format_count,
2064 enum drm_plane_type type,
2065 const char *name, ...);
2066 extern int drm_plane_init(struct drm_device *dev,
2067 struct drm_plane *plane,
2068 unsigned long possible_crtcs,
2069 const struct drm_plane_funcs *funcs,
2070 const uint32_t *formats, unsigned int format_count,
2071 bool is_primary);
2072 extern void drm_plane_cleanup(struct drm_plane *plane);
2073
2074 /**
2075 * drm_plane_index - find the index of a registered plane
2076 * @plane: plane to find index for
2077 *
2078 * Given a registered plane, return the index of that plane within a DRM
2079 * device's list of planes.
2080 */
2081 static inline unsigned int drm_plane_index(struct drm_plane *plane)
2082 {
2083 return plane->index;
2084 }
2085 extern struct drm_plane * drm_plane_from_index(struct drm_device *dev, int idx);
2086 extern void drm_plane_force_disable(struct drm_plane *plane);
2087 extern void drm_crtc_get_hv_timing(const struct drm_display_mode *mode,
2088 int *hdisplay, int *vdisplay);
2089 extern int drm_crtc_force_disable(struct drm_crtc *crtc);
2090 extern int drm_crtc_force_disable_all(struct drm_device *dev);
2091
2092 extern void drm_mode_config_init(struct drm_device *dev);
2093 extern void drm_mode_config_reset(struct drm_device *dev);
2094 extern void drm_mode_config_cleanup(struct drm_device *dev);
2095
2096 extern int drm_mode_crtc_set_gamma_size(struct drm_crtc *crtc,
2097 int gamma_size);
2098
2099 extern int drm_mode_set_config_internal(struct drm_mode_set *set);
2100
2101 extern struct drm_tile_group *drm_mode_create_tile_group(struct drm_device *dev,
2102 char topology[8]);
2103 extern struct drm_tile_group *drm_mode_get_tile_group(struct drm_device *dev,
2104 char topology[8]);
2105 extern void drm_mode_put_tile_group(struct drm_device *dev,
2106 struct drm_tile_group *tg);
2107
2108 extern int drm_mode_plane_set_obj_prop(struct drm_plane *plane,
2109 struct drm_property *property,
2110 uint64_t value);
2111
2112 extern struct drm_property *drm_mode_create_rotation_property(struct drm_device *dev,
2113 unsigned int supported_rotations);
2114 extern unsigned int drm_rotation_simplify(unsigned int rotation,
2115 unsigned int supported_rotations);
2116 extern void drm_crtc_enable_color_mgmt(struct drm_crtc *crtc,
2117 uint degamma_lut_size,
2118 bool has_ctm,
2119 uint gamma_lut_size);
2120
2121 int drm_plane_create_zpos_property(struct drm_plane *plane,
2122 unsigned int zpos,
2123 unsigned int min, unsigned int max);
2124
2125 int drm_plane_create_zpos_immutable_property(struct drm_plane *plane,
2126 unsigned int zpos);
2127
2128 /* Helpers */
2129 static inline struct drm_plane *drm_plane_find(struct drm_device *dev,
2130 uint32_t id)
2131 {
2132 struct drm_mode_object *mo;
2133 mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_PLANE);
2134 return mo ? obj_to_plane(mo) : NULL;
2135 }
2136
2137 static inline struct drm_crtc *drm_crtc_find(struct drm_device *dev,
2138 uint32_t id)
2139 {
2140 struct drm_mode_object *mo;
2141 mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_CRTC);
2142 return mo ? obj_to_crtc(mo) : NULL;
2143 }
2144
2145 /*
2146 * Extract a degamma/gamma LUT value provided by user and round it to the
2147 * precision supported by the hardware.
2148 */
2149 static inline uint32_t drm_color_lut_extract(uint32_t user_input,
2150 uint32_t bit_precision)
2151 {
2152 uint32_t val = user_input;
2153 uint32_t max = 0xffff >> (16 - bit_precision);
2154
2155 /* Round only if we're not using full precision. */
2156 if (bit_precision < 16) {
2157 val += 1UL << (16 - bit_precision - 1);
2158 val >>= 16 - bit_precision;
2159 }
2160
2161 return clamp_val(val, 0, max);
2162 }
2163
2164 /* Plane list iterator for legacy (overlay only) planes. */
2165 #define drm_for_each_legacy_plane(plane, dev) \
2166 list_for_each_entry(plane, &(dev)->mode_config.plane_list, head) \
2167 for_each_if (plane->type == DRM_PLANE_TYPE_OVERLAY)
2168
2169 #define drm_for_each_plane(plane, dev) \
2170 list_for_each_entry(plane, &(dev)->mode_config.plane_list, head)
2171
2172 #define drm_for_each_crtc(crtc, dev) \
2173 list_for_each_entry(crtc, &(dev)->mode_config.crtc_list, head)
2174
2175 static inline void
2176 assert_drm_connector_list_read_locked(struct drm_mode_config *mode_config)
2177 {
2178 /*
2179 * The connector hotadd/remove code currently grabs both locks when
2180 * updating lists. Hence readers need only hold either of them to be
2181 * safe and the check amounts to
2182 *
2183 * WARN_ON(not_holding(A) && not_holding(B)).
2184 */
2185 WARN_ON(!mutex_is_locked(&mode_config->mutex) &&
2186 !drm_modeset_is_locked(&mode_config->connection_mutex));
2187 }
2188
2189 #define drm_for_each_connector(connector, dev) \
2190 for (assert_drm_connector_list_read_locked(&(dev)->mode_config), \
2191 connector = list_first_entry(&(dev)->mode_config.connector_list, \
2192 struct drm_connector, head); \
2193 &connector->head != (&(dev)->mode_config.connector_list); \
2194 connector = list_next_entry(connector, head))
2195
2196 #define drm_for_each_encoder(encoder, dev) \
2197 list_for_each_entry(encoder, &(dev)->mode_config.encoder_list, head)
2198
2199 #define drm_for_each_fb(fb, dev) \
2200 for (WARN_ON(!mutex_is_locked(&(dev)->mode_config.fb_lock)), \
2201 fb = list_first_entry(&(dev)->mode_config.fb_list, \
2202 struct drm_framebuffer, head); \
2203 &fb->head != (&(dev)->mode_config.fb_list); \
2204 fb = list_next_entry(fb, head))
2205
2206 /* drm_edid.c */
2207 bool drm_probe_ddc(struct i2c_adapter *adapter);
2208 struct edid *drm_get_edid(struct drm_connector *connector,
2209 struct i2c_adapter *adapter);
2210 struct edid *drm_get_edid_switcheroo(struct drm_connector *connector,
2211 struct i2c_adapter *adapter);
2212 struct edid *drm_edid_duplicate(const struct edid *edid);
2213 int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid);
2214
2215 u8 drm_match_cea_mode(const struct drm_display_mode *to_match);
2216 enum hdmi_picture_aspect drm_get_cea_aspect_ratio(const u8 video_code);
2217 bool drm_detect_hdmi_monitor(struct edid *edid);
2218 bool drm_detect_monitor_audio(struct edid *edid);
2219 bool drm_rgb_quant_range_selectable(struct edid *edid);
2220 int drm_add_modes_noedid(struct drm_connector *connector,
2221 int hdisplay, int vdisplay);
2222 void drm_set_preferred_mode(struct drm_connector *connector,
2223 int hpref, int vpref);
2224
2225 int drm_edid_header_is_valid(const u8 *raw_edid);
2226 bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid,
2227 bool *edid_corrupt);
2228 bool drm_edid_is_valid(struct edid *edid);
2229 void drm_edid_get_monitor_name(struct edid *edid, char *name,
2230 int buflen);
2231 struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev,
2232 int hsize, int vsize, int fresh,
2233 bool rb);
2234
2235 /* drm_bridge.c */
2236 extern int drm_bridge_add(struct drm_bridge *bridge);
2237 extern void drm_bridge_remove(struct drm_bridge *bridge);
2238 extern struct drm_bridge *of_drm_find_bridge(struct device_node *np);
2239 extern int drm_bridge_attach(struct drm_device *dev, struct drm_bridge *bridge);
2240 extern void drm_bridge_detach(struct drm_bridge *bridge);
2241
2242 bool drm_bridge_mode_fixup(struct drm_bridge *bridge,
2243 const struct drm_display_mode *mode,
2244 struct drm_display_mode *adjusted_mode);
2245 void drm_bridge_disable(struct drm_bridge *bridge);
2246 void drm_bridge_post_disable(struct drm_bridge *bridge);
2247 void drm_bridge_mode_set(struct drm_bridge *bridge,
2248 struct drm_display_mode *mode,
2249 struct drm_display_mode *adjusted_mode);
2250 void drm_bridge_pre_enable(struct drm_bridge *bridge);
2251 void drm_bridge_enable(struct drm_bridge *bridge);
2252
2253 #endif /* __DRM_CRTC_H__ */
This page took 0.110869 seconds and 5 git commands to generate.