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  * Copyright © 2011-2013 Intel Corporation
7  * Copyright © 2015 Intel Corporation
8  *   Daniel Vetter <daniel.vetter@ffwll.ch>
9  *
10  * Permission is hereby granted, free of charge, to any person obtaining a
11  * copy of this software and associated documentation files (the "Software"),
12  * to deal in the Software without restriction, including without limitation
13  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
14  * and/or sell copies of the Software, and to permit persons to whom the
15  * Software is furnished to do so, subject to the following conditions:
16  *
17  * The above copyright notice and this permission notice shall be included in
18  * all copies or substantial portions of the Software.
19  *
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
23  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
24  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
25  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26  * OTHER DEALINGS IN THE SOFTWARE.
27  */
28 
29 #ifndef __DRM_MODESET_HELPER_VTABLES_H__
30 #define __DRM_MODESET_HELPER_VTABLES_H__
31 
32 #include <drm/drm_crtc.h>
33 
34 /**
35  * DOC: overview
36  *
37  * The DRM mode setting helper functions are common code for drivers to use if
38  * they wish.  Drivers are not forced to use this code in their
39  * implementations but it would be useful if the code they do use at least
40  * provides a consistent interface and operation to userspace. Therefore it is
41  * highly recommended to use the provided helpers as much as possible.
42  *
43  * Because there is only one pointer per modeset object to hold a vfunc table
44  * for helper libraries they are by necessity shared among the different
45  * helpers.
46  *
47  * To make this clear all the helper vtables are pulled together in this location here.
48  */
49 
50 enum mode_set_atomic;
51 
52 /**
53  * struct drm_crtc_helper_funcs - helper operations for CRTCs
54  *
55  * These hooks are used by the legacy CRTC helpers, the transitional plane
56  * helpers and the new atomic modesetting helpers.
57  */
58 struct drm_crtc_helper_funcs {
59 	/**
60 	 * @dpms:
61 	 *
62 	 * Callback to control power levels on the CRTC.  If the mode passed in
63 	 * is unsupported, the provider must use the next lowest power level.
64 	 * This is used by the legacy CRTC helpers to implement DPMS
65 	 * functionality in drm_helper_connector_dpms().
66 	 *
67 	 * This callback is also used to disable a CRTC by calling it with
68 	 * DRM_MODE_DPMS_OFF if the @disable hook isn't used.
69 	 *
70 	 * This callback is used by the legacy CRTC helpers.  Atomic helpers
71 	 * also support using this hook for enabling and disabling a CRTC to
72 	 * facilitate transitions to atomic, but it is deprecated. Instead
73 	 * @enable and @disable should be used.
74 	 */
75 	void (*dpms)(struct drm_crtc *crtc, int mode);
76 
77 	/**
78 	 * @prepare:
79 	 *
80 	 * This callback should prepare the CRTC for a subsequent modeset, which
81 	 * in practice means the driver should disable the CRTC if it is
82 	 * running. Most drivers ended up implementing this by calling their
83 	 * @dpms hook with DRM_MODE_DPMS_OFF.
84 	 *
85 	 * This callback is used by the legacy CRTC helpers.  Atomic helpers
86 	 * also support using this hook for disabling a CRTC to facilitate
87 	 * transitions to atomic, but it is deprecated. Instead @disable should
88 	 * be used.
89 	 */
90 	void (*prepare)(struct drm_crtc *crtc);
91 
92 	/**
93 	 * @commit:
94 	 *
95 	 * This callback should commit the new mode on the CRTC after a modeset,
96 	 * which in practice means the driver should enable the CRTC.  Most
97 	 * drivers ended up implementing this by calling their @dpms hook with
98 	 * DRM_MODE_DPMS_ON.
99 	 *
100 	 * This callback is used by the legacy CRTC helpers.  Atomic helpers
101 	 * also support using this hook for enabling a CRTC to facilitate
102 	 * transitions to atomic, but it is deprecated. Instead @enable should
103 	 * be used.
104 	 */
105 	void (*commit)(struct drm_crtc *crtc);
106 
107 	/**
108 	 * @mode_fixup:
109 	 *
110 	 * This callback is used to validate a mode. The parameter mode is the
111 	 * display mode that userspace requested, adjusted_mode is the mode the
112 	 * encoders need to be fed with. Note that this is the inverse semantics
113 	 * of the meaning for the &drm_encoder and &drm_bridge
114 	 * ->mode_fixup() functions. If the CRTC cannot support the requested
115 	 * conversion from mode to adjusted_mode it should reject the modeset.
116 	 *
117 	 * This function is used by both legacy CRTC helpers and atomic helpers.
118 	 * With atomic helpers it is optional.
119 	 *
120 	 * NOTE:
121 	 *
122 	 * This function is called in the check phase of atomic modesets, which
123 	 * can be aborted for any reason (including on userspace's request to
124 	 * just check whether a configuration would be possible). Atomic drivers
125 	 * MUST NOT touch any persistent state (hardware or software) or data
126 	 * structures except the passed in adjusted_mode parameter.
127 	 *
128 	 * This is in contrast to the legacy CRTC helpers where this was
129 	 * allowed.
130 	 *
131 	 * Atomic drivers which need to inspect and adjust more state should
132 	 * instead use the @atomic_check callback.
133 	 *
134 	 * Also beware that neither core nor helpers filter modes before
135 	 * passing them to the driver: While the list of modes that is
136 	 * advertised to userspace is filtered using the connector's
137 	 * ->mode_valid() callback, neither the core nor the helpers do any
138 	 * filtering on modes passed in from userspace when setting a mode. It
139 	 * is therefore possible for userspace to pass in a mode that was
140 	 * previously filtered out using ->mode_valid() or add a custom mode
141 	 * that wasn't probed from EDID or similar to begin with.  Even though
142 	 * this is an advanced feature and rarely used nowadays, some users rely
143 	 * on being able to specify modes manually so drivers must be prepared
144 	 * to deal with it. Specifically this means that all drivers need not
145 	 * only validate modes in ->mode_valid() but also in ->mode_fixup() to
146 	 * make sure invalid modes passed in from userspace are rejected.
147 	 *
148 	 * RETURNS:
149 	 *
150 	 * True if an acceptable configuration is possible, false if the modeset
151 	 * operation should be rejected.
152 	 */
153 	bool (*mode_fixup)(struct drm_crtc *crtc,
154 			   const struct drm_display_mode *mode,
155 			   struct drm_display_mode *adjusted_mode);
156 
157 	/**
158 	 * @mode_set:
159 	 *
160 	 * This callback is used by the legacy CRTC helpers to set a new mode,
161 	 * position and framebuffer. Since it ties the primary plane to every
162 	 * mode change it is incompatible with universal plane support. And
163 	 * since it can't update other planes it's incompatible with atomic
164 	 * modeset support.
165 	 *
166 	 * This callback is only used by CRTC helpers and deprecated.
167 	 *
168 	 * RETURNS:
169 	 *
170 	 * 0 on success or a negative error code on failure.
171 	 */
172 	int (*mode_set)(struct drm_crtc *crtc, struct drm_display_mode *mode,
173 			struct drm_display_mode *adjusted_mode, int x, int y,
174 			struct drm_framebuffer *old_fb);
175 
176 	/**
177 	 * @mode_set_nofb:
178 	 *
179 	 * This callback is used to update the display mode of a CRTC without
180 	 * changing anything of the primary plane configuration. This fits the
181 	 * requirement of atomic and hence is used by the atomic helpers. It is
182 	 * also used by the transitional plane helpers to implement a
183 	 * @mode_set hook in drm_helper_crtc_mode_set().
184 	 *
185 	 * Note that the display pipe is completely off when this function is
186 	 * called. Atomic drivers which need hardware to be running before they
187 	 * program the new display mode (e.g. because they implement runtime PM)
188 	 * should not use this hook. This is because the helper library calls
189 	 * this hook only once per mode change and not every time the display
190 	 * pipeline is suspended using either DPMS or the new "ACTIVE" property.
191 	 * Which means register values set in this callback might get reset when
192 	 * the CRTC is suspended, but not restored.  Such drivers should instead
193 	 * move all their CRTC setup into the @enable callback.
194 	 *
195 	 * This callback is optional.
196 	 */
197 	void (*mode_set_nofb)(struct drm_crtc *crtc);
198 
199 	/**
200 	 * @mode_set_base:
201 	 *
202 	 * This callback is used by the legacy CRTC helpers to set a new
203 	 * framebuffer and scanout position. It is optional and used as an
204 	 * optimized fast-path instead of a full mode set operation with all the
205 	 * resulting flickering. If it is not present
206 	 * drm_crtc_helper_set_config() will fall back to a full modeset, using
207 	 * the ->mode_set() callback. Since it can't update other planes it's
208 	 * incompatible with atomic modeset support.
209 	 *
210 	 * This callback is only used by the CRTC helpers and deprecated.
211 	 *
212 	 * RETURNS:
213 	 *
214 	 * 0 on success or a negative error code on failure.
215 	 */
216 	int (*mode_set_base)(struct drm_crtc *crtc, int x, int y,
217 			     struct drm_framebuffer *old_fb);
218 
219 	/**
220 	 * @mode_set_base_atomic:
221 	 *
222 	 * This callback is used by the fbdev helpers to set a new framebuffer
223 	 * and scanout without sleeping, i.e. from an atomic calling context. It
224 	 * is only used to implement kgdb support.
225 	 *
226 	 * This callback is optional and only needed for kgdb support in the fbdev
227 	 * helpers.
228 	 *
229 	 * RETURNS:
230 	 *
231 	 * 0 on success or a negative error code on failure.
232 	 */
233 	int (*mode_set_base_atomic)(struct drm_crtc *crtc,
234 				    struct drm_framebuffer *fb, int x, int y,
235 				    enum mode_set_atomic);
236 
237 	/**
238 	 * @load_lut:
239 	 *
240 	 * Load a LUT prepared with the @gamma_set functions from
241 	 * &drm_fb_helper_funcs.
242 	 *
243 	 * This callback is optional and is only used by the fbdev emulation
244 	 * helpers.
245 	 *
246 	 * FIXME:
247 	 *
248 	 * This callback is functionally redundant with the core gamma table
249 	 * support and simply exists because the fbdev hasn't yet been
250 	 * refactored to use the core gamma table interfaces.
251 	 */
252 	void (*load_lut)(struct drm_crtc *crtc);
253 
254 	/**
255 	 * @disable:
256 	 *
257 	 * This callback should be used to disable the CRTC. With the atomic
258 	 * drivers it is called after all encoders connected to this CRTC have
259 	 * been shut off already using their own ->disable hook. If that
260 	 * sequence is too simple drivers can just add their own hooks and call
261 	 * it from this CRTC callback here by looping over all encoders
262 	 * connected to it using for_each_encoder_on_crtc().
263 	 *
264 	 * This hook is used both by legacy CRTC helpers and atomic helpers.
265 	 * Atomic drivers don't need to implement it if there's no need to
266 	 * disable anything at the CRTC level. To ensure that runtime PM
267 	 * handling (using either DPMS or the new "ACTIVE" property) works
268 	 * @disable must be the inverse of @enable for atomic drivers.
269 	 *
270 	 * NOTE:
271 	 *
272 	 * With legacy CRTC helpers there's a big semantic difference between
273 	 * @disable and other hooks (like @prepare or @dpms) used to shut down a
274 	 * CRTC: @disable is only called when also logically disabling the
275 	 * display pipeline and needs to release any resources acquired in
276 	 * @mode_set (like shared PLLs, or again release pinned framebuffers).
277 	 *
278 	 * Therefore @disable must be the inverse of @mode_set plus @commit for
279 	 * drivers still using legacy CRTC helpers, which is different from the
280 	 * rules under atomic.
281 	 */
282 	void (*disable)(struct drm_crtc *crtc);
283 
284 	/**
285 	 * @enable:
286 	 *
287 	 * This callback should be used to enable the CRTC. With the atomic
288 	 * drivers it is called before all encoders connected to this CRTC are
289 	 * enabled through the encoder's own ->enable hook.  If that sequence is
290 	 * too simple drivers can just add their own hooks and call it from this
291 	 * CRTC callback here by looping over all encoders connected to it using
292 	 * for_each_encoder_on_crtc().
293 	 *
294 	 * This hook is used only by atomic helpers, for symmetry with @disable.
295 	 * Atomic drivers don't need to implement it if there's no need to
296 	 * enable anything at the CRTC level. To ensure that runtime PM handling
297 	 * (using either DPMS or the new "ACTIVE" property) works
298 	 * @enable must be the inverse of @disable for atomic drivers.
299 	 */
300 	void (*enable)(struct drm_crtc *crtc);
301 
302 	/**
303 	 * @atomic_check:
304 	 *
305 	 * Drivers should check plane-update related CRTC constraints in this
306 	 * hook. They can also check mode related limitations but need to be
307 	 * aware of the calling order, since this hook is used by
308 	 * drm_atomic_helper_check_planes() whereas the preparations needed to
309 	 * check output routing and the display mode is done in
310 	 * drm_atomic_helper_check_modeset(). Therefore drivers that want to
311 	 * check output routing and display mode constraints in this callback
312 	 * must ensure that drm_atomic_helper_check_modeset() has been called
313 	 * beforehand. This is calling order used by the default helper
314 	 * implementation in drm_atomic_helper_check().
315 	 *
316 	 * When using drm_atomic_helper_check_planes() CRTCs' ->atomic_check()
317 	 * hooks are called after the ones for planes, which allows drivers to
318 	 * assign shared resources requested by planes in the CRTC callback
319 	 * here. For more complicated dependencies the driver can call the provided
320 	 * check helpers multiple times until the computed state has a final
321 	 * configuration and everything has been checked.
322 	 *
323 	 * This function is also allowed to inspect any other object's state and
324 	 * can add more state objects to the atomic commit if needed. Care must
325 	 * be taken though to ensure that state check&compute functions for
326 	 * these added states are all called, and derived state in other objects
327 	 * all updated. Again the recommendation is to just call check helpers
328 	 * until a maximal configuration is reached.
329 	 *
330 	 * This callback is used by the atomic modeset helpers and by the
331 	 * transitional plane helpers, but it is optional.
332 	 *
333 	 * NOTE:
334 	 *
335 	 * This function is called in the check phase of an atomic update. The
336 	 * driver is not allowed to change anything outside of the free-standing
337 	 * state objects passed-in or assembled in the overall &drm_atomic_state
338 	 * update tracking structure.
339 	 *
340 	 * RETURNS:
341 	 *
342 	 * 0 on success, -EINVAL if the state or the transition can't be
343 	 * supported, -ENOMEM on memory allocation failure and -EDEADLK if an
344 	 * attempt to obtain another state object ran into a &drm_modeset_lock
345 	 * deadlock.
346 	 */
347 	int (*atomic_check)(struct drm_crtc *crtc,
348 			    struct drm_crtc_state *state);
349 
350 	/**
351 	 * @atomic_begin:
352 	 *
353 	 * Drivers should prepare for an atomic update of multiple planes on
354 	 * a CRTC in this hook. Depending upon hardware this might be vblank
355 	 * evasion, blocking updates by setting bits or doing preparatory work
356 	 * for e.g. manual update display.
357 	 *
358 	 * This hook is called before any plane commit functions are called.
359 	 *
360 	 * Note that the power state of the display pipe when this function is
361 	 * called depends upon the exact helpers and calling sequence the driver
362 	 * has picked. See drm_atomic_commit_planes() for a discussion of the
363 	 * tradeoffs and variants of plane commit helpers.
364 	 *
365 	 * This callback is used by the atomic modeset helpers and by the
366 	 * transitional plane helpers, but it is optional.
367 	 */
368 	void (*atomic_begin)(struct drm_crtc *crtc,
369 			     struct drm_crtc_state *old_crtc_state);
370 	/**
371 	 * @atomic_flush:
372 	 *
373 	 * Drivers should finalize an atomic update of multiple planes on
374 	 * a CRTC in this hook. Depending upon hardware this might include
375 	 * checking that vblank evasion was successful, unblocking updates by
376 	 * setting bits or setting the GO bit to flush out all updates.
377 	 *
378 	 * Simple hardware or hardware with special requirements can commit and
379 	 * flush out all updates for all planes from this hook and forgo all the
380 	 * other commit hooks for plane updates.
381 	 *
382 	 * This hook is called after any plane commit functions are called.
383 	 *
384 	 * Note that the power state of the display pipe when this function is
385 	 * called depends upon the exact helpers and calling sequence the driver
386 	 * has picked. See drm_atomic_commit_planes() for a discussion of the
387 	 * tradeoffs and variants of plane commit helpers.
388 	 *
389 	 * This callback is used by the atomic modeset helpers and by the
390 	 * transitional plane helpers, but it is optional.
391 	 */
392 	void (*atomic_flush)(struct drm_crtc *crtc,
393 			     struct drm_crtc_state *old_crtc_state);
394 };
395 
396 /**
397  * drm_crtc_helper_add - sets the helper vtable for a crtc
398  * @crtc: DRM CRTC
399  * @funcs: helper vtable to set for @crtc
400  */
401 static inline void drm_crtc_helper_add(struct drm_crtc *crtc,
402 				       const struct drm_crtc_helper_funcs *funcs)
403 {
404 	crtc->helper_private = funcs;
405 }
406 
407 /**
408  * struct drm_encoder_helper_funcs - helper operations for encoders
409  *
410  * These hooks are used by the legacy CRTC helpers, the transitional plane
411  * helpers and the new atomic modesetting helpers.
412  */
413 struct drm_encoder_helper_funcs {
414 	/**
415 	 * @dpms:
416 	 *
417 	 * Callback to control power levels on the encoder.  If the mode passed in
418 	 * is unsupported, the provider must use the next lowest power level.
419 	 * This is used by the legacy encoder helpers to implement DPMS
420 	 * functionality in drm_helper_connector_dpms().
421 	 *
422 	 * This callback is also used to disable an encoder by calling it with
423 	 * DRM_MODE_DPMS_OFF if the @disable hook isn't used.
424 	 *
425 	 * This callback is used by the legacy CRTC helpers.  Atomic helpers
426 	 * also support using this hook for enabling and disabling an encoder to
427 	 * facilitate transitions to atomic, but it is deprecated. Instead
428 	 * @enable and @disable should be used.
429 	 */
430 	void (*dpms)(struct drm_encoder *encoder, int mode);
431 
432 	/**
433 	 * @mode_fixup:
434 	 *
435 	 * This callback is used to validate and adjust a mode. The parameter
436 	 * mode is the display mode that should be fed to the next element in
437 	 * the display chain, either the final &drm_connector or a &drm_bridge.
438 	 * The parameter adjusted_mode is the input mode the encoder requires. It
439 	 * can be modified by this callback and does not need to match mode.
440 	 *
441 	 * This function is used by both legacy CRTC helpers and atomic helpers.
442 	 * This hook is optional.
443 	 *
444 	 * NOTE:
445 	 *
446 	 * This function is called in the check phase of atomic modesets, which
447 	 * can be aborted for any reason (including on userspace's request to
448 	 * just check whether a configuration would be possible). Atomic drivers
449 	 * MUST NOT touch any persistent state (hardware or software) or data
450 	 * structures except the passed in adjusted_mode parameter.
451 	 *
452 	 * This is in contrast to the legacy CRTC helpers where this was
453 	 * allowed.
454 	 *
455 	 * Atomic drivers which need to inspect and adjust more state should
456 	 * instead use the @atomic_check callback.
457 	 *
458 	 * Also beware that neither core nor helpers filter modes before
459 	 * passing them to the driver: While the list of modes that is
460 	 * advertised to userspace is filtered using the connector's
461 	 * ->mode_valid() callback, neither the core nor the helpers do any
462 	 * filtering on modes passed in from userspace when setting a mode. It
463 	 * is therefore possible for userspace to pass in a mode that was
464 	 * previously filtered out using ->mode_valid() or add a custom mode
465 	 * that wasn't probed from EDID or similar to begin with.  Even though
466 	 * this is an advanced feature and rarely used nowadays, some users rely
467 	 * on being able to specify modes manually so drivers must be prepared
468 	 * to deal with it. Specifically this means that all drivers need not
469 	 * only validate modes in ->mode_valid() but also in ->mode_fixup() to
470 	 * make sure invalid modes passed in from userspace are rejected.
471 	 *
472 	 * RETURNS:
473 	 *
474 	 * True if an acceptable configuration is possible, false if the modeset
475 	 * operation should be rejected.
476 	 */
477 	bool (*mode_fixup)(struct drm_encoder *encoder,
478 			   const struct drm_display_mode *mode,
479 			   struct drm_display_mode *adjusted_mode);
480 
481 	/**
482 	 * @prepare:
483 	 *
484 	 * This callback should prepare the encoder for a subsequent modeset,
485 	 * which in practice means the driver should disable the encoder if it
486 	 * is running. Most drivers ended up implementing this by calling their
487 	 * @dpms hook with DRM_MODE_DPMS_OFF.
488 	 *
489 	 * This callback is used by the legacy CRTC helpers.  Atomic helpers
490 	 * also support using this hook for disabling an encoder to facilitate
491 	 * transitions to atomic, but it is deprecated. Instead @disable should
492 	 * be used.
493 	 */
494 	void (*prepare)(struct drm_encoder *encoder);
495 
496 	/**
497 	 * @commit:
498 	 *
499 	 * This callback should commit the new mode on the encoder after a modeset,
500 	 * which in practice means the driver should enable the encoder.  Most
501 	 * drivers ended up implementing this by calling their @dpms hook with
502 	 * DRM_MODE_DPMS_ON.
503 	 *
504 	 * This callback is used by the legacy CRTC helpers.  Atomic helpers
505 	 * also support using this hook for enabling an encoder to facilitate
506 	 * transitions to atomic, but it is deprecated. Instead @enable should
507 	 * be used.
508 	 */
509 	void (*commit)(struct drm_encoder *encoder);
510 
511 	/**
512 	 * @mode_set:
513 	 *
514 	 * This callback is used to update the display mode of an encoder.
515 	 *
516 	 * Note that the display pipe is completely off when this function is
517 	 * called. Drivers which need hardware to be running before they program
518 	 * the new display mode (because they implement runtime PM) should not
519 	 * use this hook, because the helper library calls it only once and not
520 	 * every time the display pipeline is suspend using either DPMS or the
521 	 * new "ACTIVE" property. Such drivers should instead move all their
522 	 * encoder setup into the ->enable() callback.
523 	 *
524 	 * This callback is used both by the legacy CRTC helpers and the atomic
525 	 * modeset helpers. It is optional in the atomic helpers.
526 	 */
527 	void (*mode_set)(struct drm_encoder *encoder,
528 			 struct drm_display_mode *mode,
529 			 struct drm_display_mode *adjusted_mode);
530 
531 	/**
532 	 * @get_crtc:
533 	 *
534 	 * This callback is used by the legacy CRTC helpers to work around
535 	 * deficiencies in its own book-keeping.
536 	 *
537 	 * Do not use, use atomic helpers instead, which get the book keeping
538 	 * right.
539 	 *
540 	 * FIXME:
541 	 *
542 	 * Currently only nouveau is using this, and as soon as nouveau is
543 	 * atomic we can ditch this hook.
544 	 */
545 	struct drm_crtc *(*get_crtc)(struct drm_encoder *encoder);
546 
547 	/**
548 	 * @detect:
549 	 *
550 	 * This callback can be used by drivers who want to do detection on the
551 	 * encoder object instead of in connector functions.
552 	 *
553 	 * It is not used by any helper and therefore has purely driver-specific
554 	 * semantics. New drivers shouldn't use this and instead just implement
555 	 * their own private callbacks.
556 	 *
557 	 * FIXME:
558 	 *
559 	 * This should just be converted into a pile of driver vfuncs.
560 	 * Currently radeon, amdgpu and nouveau are using it.
561 	 */
562 	enum drm_connector_status (*detect)(struct drm_encoder *encoder,
563 					    struct drm_connector *connector);
564 
565 	/**
566 	 * @disable:
567 	 *
568 	 * This callback should be used to disable the encoder. With the atomic
569 	 * drivers it is called before this encoder's CRTC has been shut off
570 	 * using the CRTC's own ->disable hook.  If that sequence is too simple
571 	 * drivers can just add their own driver private encoder hooks and call
572 	 * them from CRTC's callback by looping over all encoders connected to
573 	 * it using for_each_encoder_on_crtc().
574 	 *
575 	 * This hook is used both by legacy CRTC helpers and atomic helpers.
576 	 * Atomic drivers don't need to implement it if there's no need to
577 	 * disable anything at the encoder level. To ensure that runtime PM
578 	 * handling (using either DPMS or the new "ACTIVE" property) works
579 	 * @disable must be the inverse of @enable for atomic drivers.
580 	 *
581 	 * NOTE:
582 	 *
583 	 * With legacy CRTC helpers there's a big semantic difference between
584 	 * @disable and other hooks (like @prepare or @dpms) used to shut down a
585 	 * encoder: @disable is only called when also logically disabling the
586 	 * display pipeline and needs to release any resources acquired in
587 	 * @mode_set (like shared PLLs, or again release pinned framebuffers).
588 	 *
589 	 * Therefore @disable must be the inverse of @mode_set plus @commit for
590 	 * drivers still using legacy CRTC helpers, which is different from the
591 	 * rules under atomic.
592 	 */
593 	void (*disable)(struct drm_encoder *encoder);
594 
595 	/**
596 	 * @enable:
597 	 *
598 	 * This callback should be used to enable the encoder. With the atomic
599 	 * drivers it is called after this encoder's CRTC has been enabled using
600 	 * the CRTC's own ->enable hook.  If that sequence is too simple drivers
601 	 * can just add their own driver private encoder hooks and call them
602 	 * from CRTC's callback by looping over all encoders connected to it
603 	 * using for_each_encoder_on_crtc().
604 	 *
605 	 * This hook is used only by atomic helpers, for symmetry with @disable.
606 	 * Atomic drivers don't need to implement it if there's no need to
607 	 * enable anything at the encoder level. To ensure that runtime PM handling
608 	 * (using either DPMS or the new "ACTIVE" property) works
609 	 * @enable must be the inverse of @disable for atomic drivers.
610 	 */
611 	void (*enable)(struct drm_encoder *encoder);
612 
613 	/**
614 	 * @atomic_check:
615 	 *
616 	 * This callback is used to validate encoder state for atomic drivers.
617 	 * Since the encoder is the object connecting the CRTC and connector it
618 	 * gets passed both states, to be able to validate interactions and
619 	 * update the CRTC to match what the encoder needs for the requested
620 	 * connector.
621 	 *
622 	 * This function is used by the atomic helpers, but it is optional.
623 	 *
624 	 * NOTE:
625 	 *
626 	 * This function is called in the check phase of an atomic update. The
627 	 * driver is not allowed to change anything outside of the free-standing
628 	 * state objects passed-in or assembled in the overall &drm_atomic_state
629 	 * update tracking structure.
630 	 *
631 	 * RETURNS:
632 	 *
633 	 * 0 on success, -EINVAL if the state or the transition can't be
634 	 * supported, -ENOMEM on memory allocation failure and -EDEADLK if an
635 	 * attempt to obtain another state object ran into a &drm_modeset_lock
636 	 * deadlock.
637 	 */
638 	int (*atomic_check)(struct drm_encoder *encoder,
639 			    struct drm_crtc_state *crtc_state,
640 			    struct drm_connector_state *conn_state);
641 };
642 
643 /**
644  * drm_encoder_helper_add - sets the helper vtable for an encoder
645  * @encoder: DRM encoder
646  * @funcs: helper vtable to set for @encoder
647  */
648 static inline void drm_encoder_helper_add(struct drm_encoder *encoder,
649 					  const struct drm_encoder_helper_funcs *funcs)
650 {
651 	encoder->helper_private = funcs;
652 }
653 
654 /**
655  * struct drm_connector_helper_funcs - helper operations for connectors
656  *
657  * These functions are used by the atomic and legacy modeset helpers and by the
658  * probe helpers.
659  */
660 struct drm_connector_helper_funcs {
661 	/**
662 	 * @get_modes:
663 	 *
664 	 * This function should fill in all modes currently valid for the sink
665 	 * into the connector->probed_modes list. It should also update the
666 	 * EDID property by calling drm_mode_connector_update_edid_property().
667 	 *
668 	 * The usual way to implement this is to cache the EDID retrieved in the
669 	 * probe callback somewhere in the driver-private connector structure.
670 	 * In this function drivers then parse the modes in the EDID and add
671 	 * them by calling drm_add_edid_modes(). But connectors that driver a
672 	 * fixed panel can also manually add specific modes using
673 	 * drm_mode_probed_add(). Drivers which manually add modes should also
674 	 * make sure that the @display_info, @width_mm and @height_mm fields of the
675 	 * struct #drm_connector are filled in.
676 	 *
677 	 * Virtual drivers that just want some standard VESA mode with a given
678 	 * resolution can call drm_add_modes_noedid(), and mark the preferred
679 	 * one using drm_set_preferred_mode().
680 	 *
681 	 * Finally drivers that support audio probably want to update the ELD
682 	 * data, too, using drm_edid_to_eld().
683 	 *
684 	 * This function is only called after the ->detect() hook has indicated
685 	 * that a sink is connected and when the EDID isn't overridden through
686 	 * sysfs or the kernel commandline.
687 	 *
688 	 * This callback is used by the probe helpers in e.g.
689 	 * drm_helper_probe_single_connector_modes().
690 	 *
691 	 * RETURNS:
692 	 *
693 	 * The number of modes added by calling drm_mode_probed_add().
694 	 */
695 	int (*get_modes)(struct drm_connector *connector);
696 
697 	/**
698 	 * @mode_valid:
699 	 *
700 	 * Callback to validate a mode for a connector, irrespective of the
701 	 * specific display configuration.
702 	 *
703 	 * This callback is used by the probe helpers to filter the mode list
704 	 * (which is usually derived from the EDID data block from the sink).
705 	 * See e.g. drm_helper_probe_single_connector_modes().
706 	 *
707 	 * NOTE:
708 	 *
709 	 * This only filters the mode list supplied to userspace in the
710 	 * GETCONNECOTR IOCTL. Userspace is free to create modes of its own and
711 	 * ask the kernel to use them. It this case the atomic helpers or legacy
712 	 * CRTC helpers will not call this function. Drivers therefore must
713 	 * still fully validate any mode passed in in a modeset request.
714 	 *
715 	 * RETURNS:
716 	 *
717 	 * Either MODE_OK or one of the failure reasons in enum
718 	 * &drm_mode_status.
719 	 */
720 	enum drm_mode_status (*mode_valid)(struct drm_connector *connector,
721 					   struct drm_display_mode *mode);
722 	/**
723 	 * @best_encoder:
724 	 *
725 	 * This function should select the best encoder for the given connector.
726 	 *
727 	 * This function is used by both the atomic helpers (in the
728 	 * drm_atomic_helper_check_modeset() function) and in the legacy CRTC
729 	 * helpers.
730 	 *
731 	 * NOTE:
732 	 *
733 	 * In atomic drivers this function is called in the check phase of an
734 	 * atomic update. The driver is not allowed to change or inspect
735 	 * anything outside of arguments passed-in. Atomic drivers which need to
736 	 * inspect dynamic configuration state should instead use
737 	 * @atomic_best_encoder.
738 	 *
739 	 * RETURNS:
740 	 *
741 	 * Encoder that should be used for the given connector and connector
742 	 * state, or NULL if no suitable encoder exists. Note that the helpers
743 	 * will ensure that encoders aren't used twice, drivers should not check
744 	 * for this.
745 	 */
746 	struct drm_encoder *(*best_encoder)(struct drm_connector *connector);
747 
748 	/**
749 	 * @atomic_best_encoder:
750 	 *
751 	 * This is the atomic version of @best_encoder for atomic drivers which
752 	 * need to select the best encoder depending upon the desired
753 	 * configuration and can't select it statically.
754 	 *
755 	 * This function is used by drm_atomic_helper_check_modeset() and either
756 	 * this or @best_encoder is required.
757 	 *
758 	 * NOTE:
759 	 *
760 	 * This function is called in the check phase of an atomic update. The
761 	 * driver is not allowed to change anything outside of the free-standing
762 	 * state objects passed-in or assembled in the overall &drm_atomic_state
763 	 * update tracking structure.
764 	 *
765 	 * RETURNS:
766 	 *
767 	 * Encoder that should be used for the given connector and connector
768 	 * state, or NULL if no suitable encoder exists. Note that the helpers
769 	 * will ensure that encoders aren't used twice, drivers should not check
770 	 * for this.
771 	 */
772 	struct drm_encoder *(*atomic_best_encoder)(struct drm_connector *connector,
773 						   struct drm_connector_state *connector_state);
774 };
775 
776 /**
777  * drm_connector_helper_add - sets the helper vtable for a connector
778  * @connector: DRM connector
779  * @funcs: helper vtable to set for @connector
780  */
781 static inline void drm_connector_helper_add(struct drm_connector *connector,
782 					    const struct drm_connector_helper_funcs *funcs)
783 {
784 	connector->helper_private = funcs;
785 }
786 
787 /**
788  * struct drm_plane_helper_funcs - helper operations for planes
789  *
790  * These functions are used by the atomic helpers and by the transitional plane
791  * helpers.
792  */
793 struct drm_plane_helper_funcs {
794 	/**
795 	 * @prepare_fb:
796 	 *
797 	 * This hook is to prepare a framebuffer for scanout by e.g. pinning
798 	 * it's backing storage or relocating it into a contiguous block of
799 	 * VRAM. Other possible preparatory work includes flushing caches.
800 	 *
801 	 * This function must not block for outstanding rendering, since it is
802 	 * called in the context of the atomic IOCTL even for async commits to
803 	 * be able to return any errors to userspace. Instead the recommended
804 	 * way is to fill out the fence member of the passed-in
805 	 * &drm_plane_state. If the driver doesn't support native fences then
806 	 * equivalent functionality should be implemented through private
807 	 * members in the plane structure.
808 	 *
809 	 * The helpers will call @cleanup_fb with matching arguments for every
810 	 * successful call to this hook.
811 	 *
812 	 * This callback is used by the atomic modeset helpers and by the
813 	 * transitional plane helpers, but it is optional.
814 	 *
815 	 * RETURNS:
816 	 *
817 	 * 0 on success or one of the following negative error codes allowed by
818 	 * the atomic_commit hook in &drm_mode_config_funcs. When using helpers
819 	 * this callback is the only one which can fail an atomic commit,
820 	 * everything else must complete successfully.
821 	 */
822 	int (*prepare_fb)(struct drm_plane *plane,
823 			  struct drm_plane_state *new_state);
824 	/**
825 	 * @cleanup_fb:
826 	 *
827 	 * This hook is called to clean up any resources allocated for the given
828 	 * framebuffer and plane configuration in @prepare_fb.
829 	 *
830 	 * This callback is used by the atomic modeset helpers and by the
831 	 * transitional plane helpers, but it is optional.
832 	 */
833 	void (*cleanup_fb)(struct drm_plane *plane,
834 			   struct drm_plane_state *old_state);
835 
836 	/**
837 	 * @atomic_check:
838 	 *
839 	 * Drivers should check plane specific constraints in this hook.
840 	 *
841 	 * When using drm_atomic_helper_check_planes() plane's ->atomic_check()
842 	 * hooks are called before the ones for CRTCs, which allows drivers to
843 	 * request shared resources that the CRTC controls here. For more
844 	 * complicated dependencies the driver can call the provided check helpers
845 	 * multiple times until the computed state has a final configuration and
846 	 * everything has been checked.
847 	 *
848 	 * This function is also allowed to inspect any other object's state and
849 	 * can add more state objects to the atomic commit if needed. Care must
850 	 * be taken though to ensure that state check&compute functions for
851 	 * these added states are all called, and derived state in other objects
852 	 * all updated. Again the recommendation is to just call check helpers
853 	 * until a maximal configuration is reached.
854 	 *
855 	 * This callback is used by the atomic modeset helpers and by the
856 	 * transitional plane helpers, but it is optional.
857 	 *
858 	 * NOTE:
859 	 *
860 	 * This function is called in the check phase of an atomic update. The
861 	 * driver is not allowed to change anything outside of the free-standing
862 	 * state objects passed-in or assembled in the overall &drm_atomic_state
863 	 * update tracking structure.
864 	 *
865 	 * RETURNS:
866 	 *
867 	 * 0 on success, -EINVAL if the state or the transition can't be
868 	 * supported, -ENOMEM on memory allocation failure and -EDEADLK if an
869 	 * attempt to obtain another state object ran into a &drm_modeset_lock
870 	 * deadlock.
871 	 */
872 	int (*atomic_check)(struct drm_plane *plane,
873 			    struct drm_plane_state *state);
874 
875 	/**
876 	 * @atomic_update:
877 	 *
878 	 * Drivers should use this function to update the plane state.  This
879 	 * hook is called in-between the ->atomic_begin() and
880 	 * ->atomic_flush() of &drm_crtc_helper_funcs.
881 	 *
882 	 * Note that the power state of the display pipe when this function is
883 	 * called depends upon the exact helpers and calling sequence the driver
884 	 * has picked. See drm_atomic_commit_planes() for a discussion of the
885 	 * tradeoffs and variants of plane commit helpers.
886 	 *
887 	 * This callback is used by the atomic modeset helpers and by the
888 	 * transitional plane helpers, but it is optional.
889 	 */
890 	void (*atomic_update)(struct drm_plane *plane,
891 			      struct drm_plane_state *old_state);
892 	/**
893 	 * @atomic_disable:
894 	 *
895 	 * Drivers should use this function to unconditionally disable a plane.
896 	 * This hook is called in-between the ->atomic_begin() and
897 	 * ->atomic_flush() of &drm_crtc_helper_funcs. It is an alternative to
898 	 * @atomic_update, which will be called for disabling planes, too, if
899 	 * the @atomic_disable hook isn't implemented.
900 	 *
901 	 * This hook is also useful to disable planes in preparation of a modeset,
902 	 * by calling drm_atomic_helper_disable_planes_on_crtc() from the
903 	 * ->disable() hook in &drm_crtc_helper_funcs.
904 	 *
905 	 * Note that the power state of the display pipe when this function is
906 	 * called depends upon the exact helpers and calling sequence the driver
907 	 * has picked. See drm_atomic_commit_planes() for a discussion of the
908 	 * tradeoffs and variants of plane commit helpers.
909 	 *
910 	 * This callback is used by the atomic modeset helpers and by the
911 	 * transitional plane helpers, but it is optional.
912 	 */
913 	void (*atomic_disable)(struct drm_plane *plane,
914 			       struct drm_plane_state *old_state);
915 };
916 
917 /**
918  * drm_plane_helper_add - sets the helper vtable for a plane
919  * @plane: DRM plane
920  * @funcs: helper vtable to set for @plane
921  */
922 static inline void drm_plane_helper_add(struct drm_plane *plane,
923 					const struct drm_plane_helper_funcs *funcs)
924 {
925 	plane->helper_private = funcs;
926 }
927 
928 #endif
929