blob: 77a88f0e791dfd8e183ad2dba66c96b318eda7e2 [file] [log] [blame]
Daniel Vetter85e634b2016-11-14 12:58:19 +01001/*
2 * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
3 * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
4 * Copyright (c) 2009-2010, Code Aurora Forum.
5 * Copyright 2016 Intel Corp.
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 (including the next
15 * paragraph) shall be included in all copies or substantial portions of the
16 * Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
22 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
23 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24 * OTHER DEALINGS IN THE SOFTWARE.
25 */
26
27#ifndef _DRM_DRV_H_
28#define _DRM_DRV_H_
29
30#include <linux/list.h>
31#include <linux/irqreturn.h>
32
Daniel Vetterc07dcd62017-08-02 13:56:02 +020033#include <drm/drm_device.h>
34
Daniel Vetter85e634b2016-11-14 12:58:19 +010035struct drm_file;
36struct drm_gem_object;
37struct drm_master;
38struct drm_minor;
39struct dma_buf_attachment;
40struct drm_display_mode;
41struct drm_mode_create_dumb;
Noralf Trønnes45d58b42017-11-07 20:13:40 +010042struct drm_printer;
Daniel Vetter85e634b2016-11-14 12:58:19 +010043
Daniel Vetter0e2a9332019-01-29 11:42:47 +010044/**
45 * enum drm_driver_feature - feature flags
46 *
47 * See &drm_driver.driver_features, drm_device.driver_features and
48 * drm_core_check_feature().
49 */
50enum drm_driver_feature {
51 /**
52 * @DRIVER_GEM:
53 *
54 * Driver use the GEM memory manager. This should be set for all modern
55 * drivers.
56 */
57 DRIVER_GEM = BIT(0),
58 /**
59 * @DRIVER_MODESET:
60 *
61 * Driver supports mode setting interfaces (KMS).
62 */
63 DRIVER_MODESET = BIT(1),
64 /**
65 * @DRIVER_PRIME:
66 *
67 * Driver implements DRM PRIME buffer sharing.
68 */
69 DRIVER_PRIME = BIT(2),
70 /**
71 * @DRIVER_RENDER:
72 *
73 * Driver supports dedicated render nodes. See also the :ref:`section on
74 * render nodes <drm_render_node>` for details.
75 */
76 DRIVER_RENDER = BIT(3),
77 /**
78 * @DRIVER_ATOMIC:
79 *
80 * Driver supports the full atomic modesetting userspace API. Drivers
81 * which only use atomic internally, but do not the support the full
82 * userspace API (e.g. not all properties converted to atomic, or
83 * multi-plane updates are not guaranteed to be tear-free) should not
84 * set this flag.
85 */
86 DRIVER_ATOMIC = BIT(4),
87 /**
88 * @DRIVER_SYNCOBJ:
89 *
90 * Driver supports &drm_syncobj for explicit synchronization of command
91 * submission.
92 */
93 DRIVER_SYNCOBJ = BIT(5),
Lionel Landwerlin060cebb2019-04-16 13:57:50 +010094 /**
95 * @DRIVER_SYNCOBJ_TIMELINE:
96 *
97 * Driver supports the timeline flavor of &drm_syncobj for explicit
98 * synchronization of command submission.
99 */
100 DRIVER_SYNCOBJ_TIMELINE = BIT(6),
Daniel Vetter0e2a9332019-01-29 11:42:47 +0100101
102 /* IMPORTANT: Below are all the legacy flags, add new ones above. */
103
104 /**
105 * @DRIVER_USE_AGP:
106 *
107 * Set up DRM AGP support, see drm_agp_init(), the DRM core will manage
108 * AGP resources. New drivers don't need this.
109 */
Daniel Vetter1ff49482019-01-29 11:42:48 +0100110 DRIVER_USE_AGP = BIT(25),
Daniel Vetter0e2a9332019-01-29 11:42:47 +0100111 /**
112 * @DRIVER_LEGACY:
113 *
114 * Denote a legacy driver using shadow attach. Do not use.
115 */
Daniel Vetter1ff49482019-01-29 11:42:48 +0100116 DRIVER_LEGACY = BIT(26),
Daniel Vetter0e2a9332019-01-29 11:42:47 +0100117 /**
118 * @DRIVER_PCI_DMA:
119 *
120 * Driver is capable of PCI DMA, mapping of PCI DMA buffers to userspace
121 * will be enabled. Only for legacy drivers. Do not use.
122 */
Daniel Vetter1ff49482019-01-29 11:42:48 +0100123 DRIVER_PCI_DMA = BIT(27),
Daniel Vetter0e2a9332019-01-29 11:42:47 +0100124 /**
125 * @DRIVER_SG:
126 *
127 * Driver can perform scatter/gather DMA, allocation and mapping of
128 * scatter/gather buffers will be enabled. Only for legacy drivers. Do
129 * not use.
130 */
Daniel Vetter1ff49482019-01-29 11:42:48 +0100131 DRIVER_SG = BIT(28),
Daniel Vetter0e2a9332019-01-29 11:42:47 +0100132
133 /**
134 * @DRIVER_HAVE_DMA:
135 *
136 * Driver supports DMA, the userspace DMA API will be supported. Only
137 * for legacy drivers. Do not use.
138 */
Daniel Vetter1ff49482019-01-29 11:42:48 +0100139 DRIVER_HAVE_DMA = BIT(29),
Daniel Vetter0e2a9332019-01-29 11:42:47 +0100140 /**
141 * @DRIVER_HAVE_IRQ:
142 *
143 * Legacy irq support. Only for legacy drivers. Do not use.
144 *
145 * New drivers can either use the drm_irq_install() and
146 * drm_irq_uninstall() helper functions, or roll their own irq support
147 * code by calling request_irq() directly.
148 */
Daniel Vetter1ff49482019-01-29 11:42:48 +0100149 DRIVER_HAVE_IRQ = BIT(30),
Daniel Vetter0e2a9332019-01-29 11:42:47 +0100150 /**
151 * @DRIVER_KMS_LEGACY_CONTEXT:
152 *
153 * Used only by nouveau for backwards compatibility with existing
154 * userspace. Do not use.
155 */
156 DRIVER_KMS_LEGACY_CONTEXT = BIT(31),
157};
Daniel Vetter85e634b2016-11-14 12:58:19 +0100158
159/**
160 * struct drm_driver - DRM driver structure
161 *
Luca Ceresoli60e6ecf2019-03-13 16:35:37 +0100162 * This structure represent the common code for a family of cards. There will be
163 * one &struct drm_device for each card present in this family. It contains lots
164 * of vfunc entries, and a pile of those probably should be moved to more
Daniel Vetter85e634b2016-11-14 12:58:19 +0100165 * appropriate places like &drm_mode_config_funcs or into a new operations
166 * structure for GEM drivers.
167 */
168struct drm_driver {
Gabriel Krisman Bertazi56926502017-01-02 12:20:08 -0200169 /**
170 * @load:
171 *
172 * Backward-compatible driver callback to complete
173 * initialization steps after the driver is registered. For
174 * this reason, may suffer from race conditions and its use is
175 * deprecated for new drivers. It is therefore only supported
176 * for existing drivers not yet converted to the new scheme.
177 * See drm_dev_init() and drm_dev_register() for proper and
178 * race-free way to set up a &struct drm_device.
179 *
Daniel Vetterb93658f2017-03-08 15:12:44 +0100180 * This is deprecated, do not use!
181 *
Gabriel Krisman Bertazi56926502017-01-02 12:20:08 -0200182 * Returns:
183 *
184 * Zero on success, non-zero value on failure.
185 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100186 int (*load) (struct drm_device *, unsigned long flags);
Daniel Vetterb93658f2017-03-08 15:12:44 +0100187
188 /**
189 * @open:
190 *
191 * Driver callback when a new &struct drm_file is opened. Useful for
192 * setting up driver-private data structures like buffer allocators,
193 * execution contexts or similar things. Such driver-private resources
194 * must be released again in @postclose.
195 *
196 * Since the display/modeset side of DRM can only be owned by exactly
197 * one &struct drm_file (see &drm_file.is_master and &drm_device.master)
198 * there should never be a need to set up any modeset related resources
199 * in this callback. Doing so would be a driver design bug.
200 *
201 * Returns:
202 *
203 * 0 on success, a negative error code on failure, which will be
204 * promoted to userspace as the result of the open() system call.
205 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100206 int (*open) (struct drm_device *, struct drm_file *);
Daniel Vetterb93658f2017-03-08 15:12:44 +0100207
208 /**
Daniel Vetterb93658f2017-03-08 15:12:44 +0100209 * @postclose:
210 *
211 * One of the driver callbacks when a new &struct drm_file is closed.
212 * Useful for tearing down driver-private data structures allocated in
213 * @open like buffer allocators, execution contexts or similar things.
214 *
215 * Since the display/modeset side of DRM can only be owned by exactly
216 * one &struct drm_file (see &drm_file.is_master and &drm_device.master)
217 * there should never be a need to tear down any modeset related
218 * resources in this callback. Doing so would be a driver design bug.
Daniel Vetterb93658f2017-03-08 15:12:44 +0100219 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100220 void (*postclose) (struct drm_device *, struct drm_file *);
Daniel Vetterb93658f2017-03-08 15:12:44 +0100221
222 /**
223 * @lastclose:
224 *
225 * Called when the last &struct drm_file has been closed and there's
226 * currently no userspace client for the &struct drm_device.
227 *
228 * Modern drivers should only use this to force-restore the fbdev
229 * framebuffer using drm_fb_helper_restore_fbdev_mode_unlocked().
230 * Anything else would indicate there's something seriously wrong.
231 * Modern drivers can also use this to execute delayed power switching
232 * state changes, e.g. in conjunction with the :ref:`vga_switcheroo`
233 * infrastructure.
234 *
Daniel Vetter45c3d212017-05-08 10:26:33 +0200235 * This is called after @postclose hook has been called.
Daniel Vetterb93658f2017-03-08 15:12:44 +0100236 *
237 * NOTE:
238 *
239 * All legacy drivers use this callback to de-initialize the hardware.
240 * This is purely because of the shadow-attach model, where the DRM
241 * kernel driver does not really own the hardware. Instead ownershipe is
242 * handled with the help of userspace through an inheritedly racy dance
243 * to set/unset the VT into raw mode.
244 *
245 * Legacy drivers initialize the hardware in the @firstopen callback,
246 * which isn't even called for modern drivers.
247 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100248 void (*lastclose) (struct drm_device *);
Gabriel Krisman Bertazi56926502017-01-02 12:20:08 -0200249
250 /**
251 * @unload:
252 *
253 * Reverse the effects of the driver load callback. Ideally,
254 * the clean up performed by the driver should happen in the
255 * reverse order of the initialization. Similarly to the load
256 * hook, this handler is deprecated and its usage should be
257 * dropped in favor of an open-coded teardown function at the
Aishwarya Pant9a96f552017-09-26 13:58:49 +0530258 * driver layer. See drm_dev_unregister() and drm_dev_put()
Gabriel Krisman Bertazi56926502017-01-02 12:20:08 -0200259 * for the proper way to remove a &struct drm_device.
260 *
261 * The unload() hook is called right after unregistering
262 * the device.
263 *
Gabriel Krisman Bertazi56926502017-01-02 12:20:08 -0200264 */
Gabriel Krisman Bertazi11b3c202017-01-06 15:57:31 -0200265 void (*unload) (struct drm_device *);
Chris Wilsonf30c9252017-02-02 09:36:32 +0000266
267 /**
268 * @release:
269 *
270 * Optional callback for destroying device data after the final
271 * reference is released, i.e. the device is being destroyed. Drivers
272 * using this callback are responsible for calling drm_dev_fini()
273 * to finalize the device and then freeing the struct themselves.
274 */
275 void (*release) (struct drm_device *);
276
Daniel Vetter85e634b2016-11-14 12:58:19 +0100277 /**
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100278 * @get_vblank_counter:
Daniel Vetter85e634b2016-11-14 12:58:19 +0100279 *
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100280 * Driver callback for fetching a raw hardware vblank counter for the
281 * CRTC specified with the pipe argument. If a device doesn't have a
Shawn Guo5ac74752017-02-07 17:16:15 +0800282 * hardware counter, the driver can simply leave the hook as NULL.
283 * The DRM core will account for missed vblank events while interrupts
284 * where disabled based on system timestamps.
Daniel Vetter85e634b2016-11-14 12:58:19 +0100285 *
286 * Wraparound handling and loss of events due to modesetting is dealt
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100287 * with in the DRM core code, as long as drivers call
288 * drm_crtc_vblank_off() and drm_crtc_vblank_on() when disabling or
289 * enabling a CRTC.
Daniel Vetter85e634b2016-11-14 12:58:19 +0100290 *
Shawn Guo84e35482017-02-07 17:16:13 +0800291 * This is deprecated and should not be used by new drivers.
292 * Use &drm_crtc_funcs.get_vblank_counter instead.
293 *
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100294 * Returns:
295 *
Daniel Vetter85e634b2016-11-14 12:58:19 +0100296 * Raw vblank counter value.
297 */
298 u32 (*get_vblank_counter) (struct drm_device *dev, unsigned int pipe);
299
300 /**
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100301 * @enable_vblank:
Daniel Vetter85e634b2016-11-14 12:58:19 +0100302 *
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100303 * Enable vblank interrupts for the CRTC specified with the pipe
304 * argument.
Daniel Vetter85e634b2016-11-14 12:58:19 +0100305 *
Shawn Guo84e35482017-02-07 17:16:13 +0800306 * This is deprecated and should not be used by new drivers.
307 * Use &drm_crtc_funcs.enable_vblank instead.
308 *
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100309 * Returns:
310 *
Daniel Vetter85e634b2016-11-14 12:58:19 +0100311 * Zero on success, appropriate errno if the given @crtc's vblank
312 * interrupt cannot be enabled.
313 */
314 int (*enable_vblank) (struct drm_device *dev, unsigned int pipe);
315
316 /**
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100317 * @disable_vblank:
Daniel Vetter85e634b2016-11-14 12:58:19 +0100318 *
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100319 * Disable vblank interrupts for the CRTC specified with the pipe
320 * argument.
Shawn Guo84e35482017-02-07 17:16:13 +0800321 *
322 * This is deprecated and should not be used by new drivers.
323 * Use &drm_crtc_funcs.disable_vblank instead.
Daniel Vetter85e634b2016-11-14 12:58:19 +0100324 */
325 void (*disable_vblank) (struct drm_device *dev, unsigned int pipe);
326
327 /**
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100328 * @get_scanout_position:
329 *
Daniel Vetter85e634b2016-11-14 12:58:19 +0100330 * Called by vblank timestamping code.
331 *
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100332 * Returns the current display scanout position from a crtc, and an
333 * optional accurate ktime_get() timestamp of when position was
334 * measured. Note that this is a helper callback which is only used if a
335 * driver uses drm_calc_vbltimestamp_from_scanoutpos() for the
336 * @get_vblank_timestamp callback.
Daniel Vetter85e634b2016-11-14 12:58:19 +0100337 *
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100338 * Parameters:
339 *
340 * dev:
341 * DRM device.
342 * pipe:
343 * Id of the crtc to query.
Daniel Vetter3fcdcb22017-05-09 16:03:26 +0200344 * in_vblank_irq:
345 * True when called from drm_crtc_handle_vblank(). Some drivers
346 * need to apply some workarounds for gpu-specific vblank irq quirks
347 * if flag is set.
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100348 * vpos:
349 * Target location for current vertical scanout position.
350 * hpos:
351 * Target location for current horizontal scanout position.
352 * stime:
353 * Target location for timestamp taken immediately before
354 * scanout position query. Can be NULL to skip timestamp.
355 * etime:
356 * Target location for timestamp taken immediately after
357 * scanout position query. Can be NULL to skip timestamp.
358 * mode:
359 * Current display timings.
Daniel Vetter85e634b2016-11-14 12:58:19 +0100360 *
361 * Returns vpos as a positive number while in active scanout area.
362 * Returns vpos as a negative number inside vblank, counting the number
363 * of scanlines to go until end of vblank, e.g., -1 means "one scanline
364 * until start of active scanout / end of vblank."
365 *
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100366 * Returns:
Daniel Vetter85e634b2016-11-14 12:58:19 +0100367 *
Daniel Vetter1bf6ad62017-05-09 16:03:28 +0200368 * True on success, false if a reliable scanout position counter could
369 * not be read out.
Daniel Vetter85e634b2016-11-14 12:58:19 +0100370 *
Daniel Vetter2a39b882017-05-09 16:03:27 +0200371 * FIXME:
372 *
373 * Since this is a helper to implement @get_vblank_timestamp, we should
374 * move it to &struct drm_crtc_helper_funcs, like all the other
375 * helper-internal hooks.
Daniel Vetter85e634b2016-11-14 12:58:19 +0100376 */
Daniel Vetter1bf6ad62017-05-09 16:03:28 +0200377 bool (*get_scanout_position) (struct drm_device *dev, unsigned int pipe,
378 bool in_vblank_irq, int *vpos, int *hpos,
379 ktime_t *stime, ktime_t *etime,
380 const struct drm_display_mode *mode);
Daniel Vetter85e634b2016-11-14 12:58:19 +0100381
382 /**
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100383 * @get_vblank_timestamp:
384 *
385 * Called by drm_get_last_vbltimestamp(). Should return a precise
Daniel Vetter85e634b2016-11-14 12:58:19 +0100386 * timestamp when the most recent VBLANK interval ended or will end.
387 *
388 * Specifically, the timestamp in @vblank_time should correspond as
389 * closely as possible to the time when the first video scanline of
390 * the video frame after the end of VBLANK will start scanning out,
391 * the time immediately after end of the VBLANK interval. If the
392 * @crtc is currently inside VBLANK, this will be a time in the future.
393 * If the @crtc is currently scanning out a frame, this will be the
394 * past start time of the current scanout. This is meant to adhere
395 * to the OpenML OML_sync_control extension specification.
396 *
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100397 * Paramters:
Daniel Vetter85e634b2016-11-14 12:58:19 +0100398 *
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100399 * dev:
400 * dev DRM device handle.
401 * pipe:
402 * crtc for which timestamp should be returned.
403 * max_error:
404 * Maximum allowable timestamp error in nanoseconds.
405 * Implementation should strive to provide timestamp
406 * with an error of at most max_error nanoseconds.
407 * Returns true upper bound on error for timestamp.
408 * vblank_time:
409 * Target location for returned vblank timestamp.
Daniel Vetter3fcdcb22017-05-09 16:03:26 +0200410 * in_vblank_irq:
411 * True when called from drm_crtc_handle_vblank(). Some drivers
412 * need to apply some workarounds for gpu-specific vblank irq quirks
413 * if flag is set.
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100414 *
415 * Returns:
416 *
Daniel Vetterd673c022017-05-09 16:03:25 +0200417 * True on success, false on failure, which means the core should
418 * fallback to a simple timestamp taken in drm_crtc_handle_vblank().
Daniel Vetter2a39b882017-05-09 16:03:27 +0200419 *
420 * FIXME:
421 *
422 * We should move this hook to &struct drm_crtc_funcs like all the other
423 * vblank hooks.
Daniel Vetter85e634b2016-11-14 12:58:19 +0100424 */
Daniel Vetterd673c022017-05-09 16:03:25 +0200425 bool (*get_vblank_timestamp) (struct drm_device *dev, unsigned int pipe,
Daniel Vetter85e634b2016-11-14 12:58:19 +0100426 int *max_error,
Arnd Bergmann67680d32017-10-11 17:20:12 +0200427 ktime_t *vblank_time,
Daniel Vetter3fcdcb22017-05-09 16:03:26 +0200428 bool in_vblank_irq);
Daniel Vetter85e634b2016-11-14 12:58:19 +0100429
Daniel Vetter16584b22017-05-31 11:22:53 +0200430 /**
431 * @irq_handler:
432 *
433 * Interrupt handler called when using drm_irq_install(). Not used by
434 * drivers which implement their own interrupt handling.
435 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100436 irqreturn_t(*irq_handler) (int irq, void *arg);
Daniel Vetter16584b22017-05-31 11:22:53 +0200437
438 /**
439 * @irq_preinstall:
440 *
441 * Optional callback used by drm_irq_install() which is called before
442 * the interrupt handler is registered. This should be used to clear out
443 * any pending interrupts (from e.g. firmware based drives) and reset
444 * the interrupt handling registers.
445 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100446 void (*irq_preinstall) (struct drm_device *dev);
Daniel Vetter16584b22017-05-31 11:22:53 +0200447
448 /**
449 * @irq_postinstall:
450 *
451 * Optional callback used by drm_irq_install() which is called after
452 * the interrupt handler is registered. This should be used to enable
453 * interrupt generation in the hardware.
454 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100455 int (*irq_postinstall) (struct drm_device *dev);
Daniel Vetter16584b22017-05-31 11:22:53 +0200456
457 /**
458 * @irq_uninstall:
459 *
460 * Optional callback used by drm_irq_uninstall() which is called before
461 * the interrupt handler is unregistered. This should be used to disable
462 * interrupt generation in the hardware.
463 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100464 void (*irq_uninstall) (struct drm_device *dev);
465
Daniel Vetter85e634b2016-11-14 12:58:19 +0100466 /**
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100467 * @master_create:
468 *
469 * Called whenever a new master is created. Only used by vmwgfx.
Daniel Vetter85e634b2016-11-14 12:58:19 +0100470 */
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100471 int (*master_create)(struct drm_device *dev, struct drm_master *master);
Daniel Vetter85e634b2016-11-14 12:58:19 +0100472
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100473 /**
474 * @master_destroy:
475 *
476 * Called whenever a master is destroyed. Only used by vmwgfx.
477 */
478 void (*master_destroy)(struct drm_device *dev, struct drm_master *master);
479
480 /**
481 * @master_set:
482 *
483 * Called whenever the minor master is set. Only used by vmwgfx.
484 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100485 int (*master_set)(struct drm_device *dev, struct drm_file *file_priv,
486 bool from_open);
Daniel Vetter6c4789e2016-11-14 12:58:20 +0100487 /**
488 * @master_drop:
489 *
490 * Called whenever the minor master is dropped. Only used by vmwgfx.
491 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100492 void (*master_drop)(struct drm_device *dev, struct drm_file *file_priv);
493
Sean Pauld1b6c622017-07-20 13:47:43 -0400494 /**
495 * @debugfs_init:
496 *
497 * Allows drivers to create driver-specific debugfs files.
498 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100499 int (*debugfs_init)(struct drm_minor *minor);
Daniel Vetter85e634b2016-11-14 12:58:19 +0100500
501 /**
502 * @gem_free_object: deconstructor for drm_gem_objects
503 *
504 * This is deprecated and should not be used by new drivers. Use
Daniel Vetter805dc6142019-06-20 14:46:15 +0200505 * &drm_gem_object_funcs.free instead.
Daniel Vetter85e634b2016-11-14 12:58:19 +0100506 */
507 void (*gem_free_object) (struct drm_gem_object *obj);
508
509 /**
510 * @gem_free_object_unlocked: deconstructor for drm_gem_objects
511 *
Daniel Vetter805dc6142019-06-20 14:46:15 +0200512 * This is deprecated and should not be used by new drivers. Use
513 * &drm_gem_object_funcs.free instead.
514 * Compared to @gem_free_object this is not encumbered with
515 * &drm_device.struct_mutex legacy locking schemes.
Daniel Vetter85e634b2016-11-14 12:58:19 +0100516 */
517 void (*gem_free_object_unlocked) (struct drm_gem_object *obj);
518
Sean Pauld1b6c622017-07-20 13:47:43 -0400519 /**
520 * @gem_open_object:
521 *
Daniel Vetter805dc6142019-06-20 14:46:15 +0200522 * This callback is deprecated in favour of &drm_gem_object_funcs.open.
523 *
Sean Pauld1b6c622017-07-20 13:47:43 -0400524 * Driver hook called upon gem handle creation
525 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100526 int (*gem_open_object) (struct drm_gem_object *, struct drm_file *);
Sean Pauld1b6c622017-07-20 13:47:43 -0400527
528 /**
529 * @gem_close_object:
530 *
Daniel Vetter805dc6142019-06-20 14:46:15 +0200531 * This callback is deprecated in favour of &drm_gem_object_funcs.close.
532 *
Sean Pauld1b6c622017-07-20 13:47:43 -0400533 * Driver hook called upon gem handle release
534 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100535 void (*gem_close_object) (struct drm_gem_object *, struct drm_file *);
536
537 /**
Noralf Trønnes45d58b42017-11-07 20:13:40 +0100538 * @gem_print_info:
539 *
Daniel Vetter805dc6142019-06-20 14:46:15 +0200540 * This callback is deprecated in favour of
541 * &drm_gem_object_funcs.print_info.
542 *
Noralf Trønnes45d58b42017-11-07 20:13:40 +0100543 * If driver subclasses struct &drm_gem_object, it can implement this
544 * optional hook for printing additional driver specific info.
545 *
546 * drm_printf_indent() should be used in the callback passing it the
547 * indent argument.
548 *
549 * This callback is called from drm_gem_print_info().
550 */
551 void (*gem_print_info)(struct drm_printer *p, unsigned int indent,
552 const struct drm_gem_object *obj);
553
554 /**
Chris Wilson218adc12016-11-25 12:34:27 +0000555 * @gem_create_object: constructor for gem objects
556 *
Daniel Vetter805dc6142019-06-20 14:46:15 +0200557 * Hook for allocating the GEM object struct, for use by the CMA and
558 * SHMEM GEM helpers.
Daniel Vetter85e634b2016-11-14 12:58:19 +0100559 */
560 struct drm_gem_object *(*gem_create_object)(struct drm_device *dev,
561 size_t size);
Sean Pauld1b6c622017-07-20 13:47:43 -0400562 /**
563 * @prime_handle_to_fd:
564 *
Daniel Vetter805dc6142019-06-20 14:46:15 +0200565 * Main PRIME export function. Should be implemented with
566 * drm_gem_prime_handle_to_fd() for GEM based drivers.
567 *
568 * For an in-depth discussion see :ref:`PRIME buffer sharing
569 * documentation <prime_buffer_sharing>`.
Sean Pauld1b6c622017-07-20 13:47:43 -0400570 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100571 int (*prime_handle_to_fd)(struct drm_device *dev, struct drm_file *file_priv,
572 uint32_t handle, uint32_t flags, int *prime_fd);
Sean Pauld1b6c622017-07-20 13:47:43 -0400573 /**
574 * @prime_fd_to_handle:
575 *
Daniel Vetter805dc6142019-06-20 14:46:15 +0200576 * Main PRIME import function. Should be implemented with
577 * drm_gem_prime_fd_to_handle() for GEM based drivers.
578 *
579 * For an in-depth discussion see :ref:`PRIME buffer sharing
580 * documentation <prime_buffer_sharing>`.
Sean Pauld1b6c622017-07-20 13:47:43 -0400581 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100582 int (*prime_fd_to_handle)(struct drm_device *dev, struct drm_file *file_priv,
583 int prime_fd, uint32_t *handle);
Sean Pauld1b6c622017-07-20 13:47:43 -0400584 /**
585 * @gem_prime_export:
586 *
Daniel Vetter805dc6142019-06-20 14:46:15 +0200587 * Export hook for GEM drivers. Deprecated in favour of
588 * &drm_gem_object_funcs.export.
Sean Pauld1b6c622017-07-20 13:47:43 -0400589 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100590 struct dma_buf * (*gem_prime_export)(struct drm_device *dev,
591 struct drm_gem_object *obj, int flags);
Sean Pauld1b6c622017-07-20 13:47:43 -0400592 /**
593 * @gem_prime_import:
594 *
Daniel Vetter805dc6142019-06-20 14:46:15 +0200595 * Import hook for GEM drivers.
Noralf Trønnesf0014882018-11-10 15:56:43 +0100596 *
597 * This defaults to drm_gem_prime_import() if not set.
Sean Pauld1b6c622017-07-20 13:47:43 -0400598 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100599 struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev,
600 struct dma_buf *dma_buf);
Daniel Vetter805dc6142019-06-20 14:46:15 +0200601
602 /**
603 * @gem_prime_pin:
604 *
605 * Deprecated hook in favour of &drm_gem_object_funcs.pin.
606 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100607 int (*gem_prime_pin)(struct drm_gem_object *obj);
Daniel Vetter805dc6142019-06-20 14:46:15 +0200608
609 /**
610 * @gem_prime_unpin:
611 *
612 * Deprecated hook in favour of &drm_gem_object_funcs.unpin.
613 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100614 void (*gem_prime_unpin)(struct drm_gem_object *obj);
Daniel Vetter805dc6142019-06-20 14:46:15 +0200615
616
617 /**
618 * @gem_prime_get_sg_table:
619 *
620 * Deprecated hook in favour of &drm_gem_object_funcs.get_sg_table.
621 */
622 struct sg_table *(*gem_prime_get_sg_table)(struct drm_gem_object *obj);
623
624 /**
625 * @gem_prime_res_obj:
626 *
627 * Optional hook to look up the &reservation_object for an buffer when
628 * exporting it.
629 *
630 * FIXME: This hook is deprecated. Users of this hook should be replaced
631 * by setting &drm_gem_object.resv instead.
632 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100633 struct reservation_object * (*gem_prime_res_obj)(
634 struct drm_gem_object *obj);
Daniel Vetter805dc6142019-06-20 14:46:15 +0200635
636 /**
637 * @gem_prime_import_sg_table:
638 *
639 * Optional hook used by the PRIME helper functions
640 * drm_gem_prime_import() respectively drm_gem_prime_import_dev().
641 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100642 struct drm_gem_object *(*gem_prime_import_sg_table)(
643 struct drm_device *dev,
644 struct dma_buf_attachment *attach,
645 struct sg_table *sgt);
Daniel Vetter805dc6142019-06-20 14:46:15 +0200646 /**
647 * @gem_prime_vmap:
648 *
649 * Deprecated vmap hook for GEM drivers. Please use
650 * &drm_gem_object_funcs.vmap instead.
651 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100652 void *(*gem_prime_vmap)(struct drm_gem_object *obj);
Daniel Vetter805dc6142019-06-20 14:46:15 +0200653
654 /**
655 * @gem_prime_vunmap:
656 *
657 * Deprecated vunmap hook for GEM drivers. Please use
658 * &drm_gem_object_funcs.vunmap instead.
659 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100660 void (*gem_prime_vunmap)(struct drm_gem_object *obj, void *vaddr);
Daniel Vetter805dc6142019-06-20 14:46:15 +0200661
662 /**
663 * @gem_prime_mmap:
664 *
665 * mmap hook for GEM drivers, used to implement dma-buf mmap in the
666 * PRIME helpers.
667 *
668 * FIXME: There's way too much duplication going on here, and also moved
669 * to &drm_gem_object_funcs.
670 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100671 int (*gem_prime_mmap)(struct drm_gem_object *obj,
672 struct vm_area_struct *vma);
673
Daniel Vetter4f936242016-11-14 12:58:21 +0100674 /**
675 * @dumb_create:
676 *
677 * This creates a new dumb buffer in the driver's backing storage manager (GEM,
678 * TTM or something else entirely) and returns the resulting buffer handle. This
679 * handle can then be wrapped up into a framebuffer modeset object.
680 *
681 * Note that userspace is not allowed to use such objects for render
682 * acceleration - drivers must create their own private ioctls for such a use
683 * case.
684 *
685 * Width, height and depth are specified in the &drm_mode_create_dumb
686 * argument. The callback needs to fill the handle, pitch and size for
687 * the created buffer.
688 *
689 * Called by the user via ioctl.
690 *
691 * Returns:
692 *
693 * Zero on success, negative errno on failure.
694 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100695 int (*dumb_create)(struct drm_file *file_priv,
696 struct drm_device *dev,
697 struct drm_mode_create_dumb *args);
Daniel Vetter4f936242016-11-14 12:58:21 +0100698 /**
699 * @dumb_map_offset:
700 *
701 * Allocate an offset in the drm device node's address space to be able to
Daniel Vetter39dea702018-11-27 10:19:21 +0100702 * memory map a dumb buffer.
703 *
704 * The default implementation is drm_gem_create_mmap_offset(). GEM based
705 * drivers must not overwrite this.
Daniel Vetter4f936242016-11-14 12:58:21 +0100706 *
707 * Called by the user via ioctl.
708 *
709 * Returns:
710 *
711 * Zero on success, negative errno on failure.
712 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100713 int (*dumb_map_offset)(struct drm_file *file_priv,
714 struct drm_device *dev, uint32_t handle,
715 uint64_t *offset);
Daniel Vetter4f936242016-11-14 12:58:21 +0100716 /**
717 * @dumb_destroy:
718 *
719 * This destroys the userspace handle for the given dumb backing storage buffer.
720 * Since buffer objects must be reference counted in the kernel a buffer object
721 * won't be immediately freed if a framebuffer modeset object still uses it.
722 *
723 * Called by the user via ioctl.
724 *
Daniel Vetter39dea702018-11-27 10:19:21 +0100725 * The default implementation is drm_gem_dumb_destroy(). GEM based drivers
726 * must not overwrite this.
727 *
Daniel Vetter4f936242016-11-14 12:58:21 +0100728 * Returns:
729 *
730 * Zero on success, negative errno on failure.
731 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100732 int (*dumb_destroy)(struct drm_file *file_priv,
733 struct drm_device *dev,
734 uint32_t handle);
735
Sean Pauld1b6c622017-07-20 13:47:43 -0400736 /**
737 * @gem_vm_ops: Driver private ops for this object
Daniel Vetter805dc6142019-06-20 14:46:15 +0200738 *
739 * For GEM drivers this is deprecated in favour of
740 * &drm_gem_object_funcs.vm_ops.
Sean Pauld1b6c622017-07-20 13:47:43 -0400741 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100742 const struct vm_operations_struct *gem_vm_ops;
743
Sean Pauld1b6c622017-07-20 13:47:43 -0400744 /** @major: driver major number */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100745 int major;
Sean Pauld1b6c622017-07-20 13:47:43 -0400746 /** @minor: driver minor number */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100747 int minor;
Sean Pauld1b6c622017-07-20 13:47:43 -0400748 /** @patchlevel: driver patch level */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100749 int patchlevel;
Sean Pauld1b6c622017-07-20 13:47:43 -0400750 /** @name: driver name */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100751 char *name;
Sean Pauld1b6c622017-07-20 13:47:43 -0400752 /** @desc: driver description */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100753 char *desc;
Sean Pauld1b6c622017-07-20 13:47:43 -0400754 /** @date: driver date */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100755 char *date;
756
Daniel Vetter0e2a9332019-01-29 11:42:47 +0100757 /**
758 * @driver_features:
759 * Driver features, see &enum drm_driver_feature. Drivers can disable
760 * some features on a per-instance basis using
761 * &drm_device.driver_features.
762 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100763 u32 driver_features;
Daniel Vetterbb2eaba2017-05-31 11:20:45 +0200764
765 /**
766 * @ioctls:
767 *
768 * Array of driver-private IOCTL description entries. See the chapter on
769 * :ref:`IOCTL support in the userland interfaces
770 * chapter<drm_driver_ioctl>` for the full details.
771 */
772
Daniel Vetter85e634b2016-11-14 12:58:19 +0100773 const struct drm_ioctl_desc *ioctls;
Daniel Vetterbb2eaba2017-05-31 11:20:45 +0200774 /** @num_ioctls: Number of entries in @ioctls. */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100775 int num_ioctls;
Daniel Vetterbb2eaba2017-05-31 11:20:45 +0200776
777 /**
778 * @fops:
779 *
780 * File operations for the DRM device node. See the discussion in
781 * :ref:`file operations<drm_driver_fops>` for in-depth coverage and
782 * some examples.
783 */
Daniel Vetter85e634b2016-11-14 12:58:19 +0100784 const struct file_operations *fops;
785
Daniel Vetter0683c0a2017-01-25 07:26:54 +0100786 /* Everything below here is for legacy driver, never use! */
787 /* private: */
788
Daniel Vetter85e634b2016-11-14 12:58:19 +0100789 /* List of devices hanging off this driver with stealth attach. */
790 struct list_head legacy_dev_list;
Daniel Vetter0683c0a2017-01-25 07:26:54 +0100791 int (*firstopen) (struct drm_device *);
Daniel Vetter45c3d212017-05-08 10:26:33 +0200792 void (*preclose) (struct drm_device *, struct drm_file *file_priv);
Daniel Vetter0683c0a2017-01-25 07:26:54 +0100793 int (*dma_ioctl) (struct drm_device *dev, void *data, struct drm_file *file_priv);
794 int (*dma_quiescent) (struct drm_device *);
795 int (*context_dtor) (struct drm_device *dev, int context);
796 int dev_priv_size;
Daniel Vetter85e634b2016-11-14 12:58:19 +0100797};
798
Daniel Vetter85e634b2016-11-14 12:58:19 +0100799extern unsigned int drm_debug;
800
801int drm_dev_init(struct drm_device *dev,
802 struct drm_driver *driver,
803 struct device *parent);
Noralf Trønnes9b1f1b62019-02-25 15:42:27 +0100804int devm_drm_dev_init(struct device *parent,
805 struct drm_device *dev,
806 struct drm_driver *driver);
Chris Wilsonf30c9252017-02-02 09:36:32 +0000807void drm_dev_fini(struct drm_device *dev);
808
Daniel Vetter85e634b2016-11-14 12:58:19 +0100809struct drm_device *drm_dev_alloc(struct drm_driver *driver,
810 struct device *parent);
811int drm_dev_register(struct drm_device *dev, unsigned long flags);
812void drm_dev_unregister(struct drm_device *dev);
813
Aishwarya Pant9a96f552017-09-26 13:58:49 +0530814void drm_dev_get(struct drm_device *dev);
815void drm_dev_put(struct drm_device *dev);
Daniel Vetter85e634b2016-11-14 12:58:19 +0100816void drm_put_dev(struct drm_device *dev);
Noralf Trønnesbee330f2018-03-28 10:38:35 +0300817bool drm_dev_enter(struct drm_device *dev, int *idx);
818void drm_dev_exit(int idx);
Daniel Vetterc07dcd62017-08-02 13:56:02 +0200819void drm_dev_unplug(struct drm_device *dev);
820
821/**
822 * drm_dev_is_unplugged - is a DRM device unplugged
823 * @dev: DRM device
824 *
825 * This function can be called to check whether a hotpluggable is unplugged.
826 * Unplugging itself is singalled through drm_dev_unplug(). If a device is
827 * unplugged, these two functions guarantee that any store before calling
828 * drm_dev_unplug() is visible to callers of this function after it completes
Daniel Vetter168982d2019-01-29 09:56:43 +0100829 *
830 * WARNING: This function fundamentally races against drm_dev_unplug(). It is
831 * recommended that drivers instead use the underlying drm_dev_enter() and
832 * drm_dev_exit() function pairs.
Daniel Vetterc07dcd62017-08-02 13:56:02 +0200833 */
Noralf Trønnesbee330f2018-03-28 10:38:35 +0300834static inline bool drm_dev_is_unplugged(struct drm_device *dev)
Daniel Vetterc07dcd62017-08-02 13:56:02 +0200835{
Noralf Trønnesbee330f2018-03-28 10:38:35 +0300836 int idx;
837
838 if (drm_dev_enter(dev, &idx)) {
839 drm_dev_exit(idx);
840 return false;
841 }
842
843 return true;
Daniel Vetterc07dcd62017-08-02 13:56:02 +0200844}
845
Daniel Vetter3479fc22018-07-09 10:40:02 +0200846/**
847 * drm_core_check_feature - check driver feature flags
848 * @dev: DRM device to check
849 * @feature: feature flag
850 *
Ville Syrjälä18ace112018-09-13 16:16:21 +0300851 * This checks @dev for driver features, see &drm_driver.driver_features,
Daniel Vetter0e2a9332019-01-29 11:42:47 +0100852 * &drm_device.driver_features, and the various &enum drm_driver_feature flags.
Daniel Vetter3479fc22018-07-09 10:40:02 +0200853 *
854 * Returns true if the @feature is supported, false otherwise.
855 */
Emil Velikovf16bb4d2019-01-14 08:54:07 +0000856static inline bool drm_core_check_feature(const struct drm_device *dev, u32 feature)
Daniel Vetter3479fc22018-07-09 10:40:02 +0200857{
Ville Syrjälä18ace112018-09-13 16:16:21 +0300858 return dev->driver->driver_features & dev->driver_features & feature;
Daniel Vetter3479fc22018-07-09 10:40:02 +0200859}
860
861/**
862 * drm_drv_uses_atomic_modeset - check if the driver implements
863 * atomic_commit()
864 * @dev: DRM device
865 *
866 * This check is useful if drivers do not have DRIVER_ATOMIC set but
867 * have atomic modesetting internally implemented.
868 */
869static inline bool drm_drv_uses_atomic_modeset(struct drm_device *dev)
870{
871 return drm_core_check_feature(dev, DRIVER_ATOMIC) ||
Dave Airlie57078332018-09-18 16:20:18 +1000872 (dev->mode_config.funcs && dev->mode_config.funcs->atomic_commit != NULL);
Daniel Vetter3479fc22018-07-09 10:40:02 +0200873}
874
Daniel Vetter85e634b2016-11-14 12:58:19 +0100875
Dave Airlie63207452016-11-30 14:18:51 +1000876int drm_dev_set_unique(struct drm_device *dev, const char *name);
877
878
Daniel Vetter85e634b2016-11-14 12:58:19 +0100879#endif