root/include/drm/drm_drv.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. drm_dev_is_unplugged
  2. drm_core_check_feature
  3. drm_drv_uses_atomic_modeset

   1 /*
   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 
  33 #include <drm/drm_device.h>
  34 
  35 struct drm_file;
  36 struct drm_gem_object;
  37 struct drm_master;
  38 struct drm_minor;
  39 struct dma_buf_attachment;
  40 struct drm_display_mode;
  41 struct drm_mode_create_dumb;
  42 struct drm_printer;
  43 
  44 /**
  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  */
  50 enum 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_RENDER:
  66          *
  67          * Driver supports dedicated render nodes. See also the :ref:`section on
  68          * render nodes <drm_render_node>` for details.
  69          */
  70         DRIVER_RENDER                   = BIT(3),
  71         /**
  72          * @DRIVER_ATOMIC:
  73          *
  74          * Driver supports the full atomic modesetting userspace API. Drivers
  75          * which only use atomic internally, but do not the support the full
  76          * userspace API (e.g. not all properties converted to atomic, or
  77          * multi-plane updates are not guaranteed to be tear-free) should not
  78          * set this flag.
  79          */
  80         DRIVER_ATOMIC                   = BIT(4),
  81         /**
  82          * @DRIVER_SYNCOBJ:
  83          *
  84          * Driver supports &drm_syncobj for explicit synchronization of command
  85          * submission.
  86          */
  87         DRIVER_SYNCOBJ                  = BIT(5),
  88         /**
  89          * @DRIVER_SYNCOBJ_TIMELINE:
  90          *
  91          * Driver supports the timeline flavor of &drm_syncobj for explicit
  92          * synchronization of command submission.
  93          */
  94         DRIVER_SYNCOBJ_TIMELINE         = BIT(6),
  95 
  96         /* IMPORTANT: Below are all the legacy flags, add new ones above. */
  97 
  98         /**
  99          * @DRIVER_USE_AGP:
 100          *
 101          * Set up DRM AGP support, see drm_agp_init(), the DRM core will manage
 102          * AGP resources. New drivers don't need this.
 103          */
 104         DRIVER_USE_AGP                  = BIT(25),
 105         /**
 106          * @DRIVER_LEGACY:
 107          *
 108          * Denote a legacy driver using shadow attach. Do not use.
 109          */
 110         DRIVER_LEGACY                   = BIT(26),
 111         /**
 112          * @DRIVER_PCI_DMA:
 113          *
 114          * Driver is capable of PCI DMA, mapping of PCI DMA buffers to userspace
 115          * will be enabled. Only for legacy drivers. Do not use.
 116          */
 117         DRIVER_PCI_DMA                  = BIT(27),
 118         /**
 119          * @DRIVER_SG:
 120          *
 121          * Driver can perform scatter/gather DMA, allocation and mapping of
 122          * scatter/gather buffers will be enabled. Only for legacy drivers. Do
 123          * not use.
 124          */
 125         DRIVER_SG                       = BIT(28),
 126 
 127         /**
 128          * @DRIVER_HAVE_DMA:
 129          *
 130          * Driver supports DMA, the userspace DMA API will be supported. Only
 131          * for legacy drivers. Do not use.
 132          */
 133         DRIVER_HAVE_DMA                 = BIT(29),
 134         /**
 135          * @DRIVER_HAVE_IRQ:
 136          *
 137          * Legacy irq support. Only for legacy drivers. Do not use.
 138          *
 139          * New drivers can either use the drm_irq_install() and
 140          * drm_irq_uninstall() helper functions, or roll their own irq support
 141          * code by calling request_irq() directly.
 142          */
 143         DRIVER_HAVE_IRQ                 = BIT(30),
 144         /**
 145          * @DRIVER_KMS_LEGACY_CONTEXT:
 146          *
 147          * Used only by nouveau for backwards compatibility with existing
 148          * userspace.  Do not use.
 149          */
 150         DRIVER_KMS_LEGACY_CONTEXT       = BIT(31),
 151 };
 152 
 153 /**
 154  * struct drm_driver - DRM driver structure
 155  *
 156  * This structure represent the common code for a family of cards. There will be
 157  * one &struct drm_device for each card present in this family. It contains lots
 158  * of vfunc entries, and a pile of those probably should be moved to more
 159  * appropriate places like &drm_mode_config_funcs or into a new operations
 160  * structure for GEM drivers.
 161  */
 162 struct drm_driver {
 163         /**
 164          * @load:
 165          *
 166          * Backward-compatible driver callback to complete
 167          * initialization steps after the driver is registered.  For
 168          * this reason, may suffer from race conditions and its use is
 169          * deprecated for new drivers.  It is therefore only supported
 170          * for existing drivers not yet converted to the new scheme.
 171          * See drm_dev_init() and drm_dev_register() for proper and
 172          * race-free way to set up a &struct drm_device.
 173          *
 174          * This is deprecated, do not use!
 175          *
 176          * Returns:
 177          *
 178          * Zero on success, non-zero value on failure.
 179          */
 180         int (*load) (struct drm_device *, unsigned long flags);
 181 
 182         /**
 183          * @open:
 184          *
 185          * Driver callback when a new &struct drm_file is opened. Useful for
 186          * setting up driver-private data structures like buffer allocators,
 187          * execution contexts or similar things. Such driver-private resources
 188          * must be released again in @postclose.
 189          *
 190          * Since the display/modeset side of DRM can only be owned by exactly
 191          * one &struct drm_file (see &drm_file.is_master and &drm_device.master)
 192          * there should never be a need to set up any modeset related resources
 193          * in this callback. Doing so would be a driver design bug.
 194          *
 195          * Returns:
 196          *
 197          * 0 on success, a negative error code on failure, which will be
 198          * promoted to userspace as the result of the open() system call.
 199          */
 200         int (*open) (struct drm_device *, struct drm_file *);
 201 
 202         /**
 203          * @postclose:
 204          *
 205          * One of the driver callbacks when a new &struct drm_file is closed.
 206          * Useful for tearing down driver-private data structures allocated in
 207          * @open like buffer allocators, execution contexts or similar things.
 208          *
 209          * Since the display/modeset side of DRM can only be owned by exactly
 210          * one &struct drm_file (see &drm_file.is_master and &drm_device.master)
 211          * there should never be a need to tear down any modeset related
 212          * resources in this callback. Doing so would be a driver design bug.
 213          */
 214         void (*postclose) (struct drm_device *, struct drm_file *);
 215 
 216         /**
 217          * @lastclose:
 218          *
 219          * Called when the last &struct drm_file has been closed and there's
 220          * currently no userspace client for the &struct drm_device.
 221          *
 222          * Modern drivers should only use this to force-restore the fbdev
 223          * framebuffer using drm_fb_helper_restore_fbdev_mode_unlocked().
 224          * Anything else would indicate there's something seriously wrong.
 225          * Modern drivers can also use this to execute delayed power switching
 226          * state changes, e.g. in conjunction with the :ref:`vga_switcheroo`
 227          * infrastructure.
 228          *
 229          * This is called after @postclose hook has been called.
 230          *
 231          * NOTE:
 232          *
 233          * All legacy drivers use this callback to de-initialize the hardware.
 234          * This is purely because of the shadow-attach model, where the DRM
 235          * kernel driver does not really own the hardware. Instead ownershipe is
 236          * handled with the help of userspace through an inheritedly racy dance
 237          * to set/unset the VT into raw mode.
 238          *
 239          * Legacy drivers initialize the hardware in the @firstopen callback,
 240          * which isn't even called for modern drivers.
 241          */
 242         void (*lastclose) (struct drm_device *);
 243 
 244         /**
 245          * @unload:
 246          *
 247          * Reverse the effects of the driver load callback.  Ideally,
 248          * the clean up performed by the driver should happen in the
 249          * reverse order of the initialization.  Similarly to the load
 250          * hook, this handler is deprecated and its usage should be
 251          * dropped in favor of an open-coded teardown function at the
 252          * driver layer.  See drm_dev_unregister() and drm_dev_put()
 253          * for the proper way to remove a &struct drm_device.
 254          *
 255          * The unload() hook is called right after unregistering
 256          * the device.
 257          *
 258          */
 259         void (*unload) (struct drm_device *);
 260 
 261         /**
 262          * @release:
 263          *
 264          * Optional callback for destroying device data after the final
 265          * reference is released, i.e. the device is being destroyed. Drivers
 266          * using this callback are responsible for calling drm_dev_fini()
 267          * to finalize the device and then freeing the struct themselves.
 268          */
 269         void (*release) (struct drm_device *);
 270 
 271         /**
 272          * @get_vblank_counter:
 273          *
 274          * Driver callback for fetching a raw hardware vblank counter for the
 275          * CRTC specified with the pipe argument.  If a device doesn't have a
 276          * hardware counter, the driver can simply leave the hook as NULL.
 277          * The DRM core will account for missed vblank events while interrupts
 278          * where disabled based on system timestamps.
 279          *
 280          * Wraparound handling and loss of events due to modesetting is dealt
 281          * with in the DRM core code, as long as drivers call
 282          * drm_crtc_vblank_off() and drm_crtc_vblank_on() when disabling or
 283          * enabling a CRTC.
 284          *
 285          * This is deprecated and should not be used by new drivers.
 286          * Use &drm_crtc_funcs.get_vblank_counter instead.
 287          *
 288          * Returns:
 289          *
 290          * Raw vblank counter value.
 291          */
 292         u32 (*get_vblank_counter) (struct drm_device *dev, unsigned int pipe);
 293 
 294         /**
 295          * @enable_vblank:
 296          *
 297          * Enable vblank interrupts for the CRTC specified with the pipe
 298          * argument.
 299          *
 300          * This is deprecated and should not be used by new drivers.
 301          * Use &drm_crtc_funcs.enable_vblank instead.
 302          *
 303          * Returns:
 304          *
 305          * Zero on success, appropriate errno if the given @crtc's vblank
 306          * interrupt cannot be enabled.
 307          */
 308         int (*enable_vblank) (struct drm_device *dev, unsigned int pipe);
 309 
 310         /**
 311          * @disable_vblank:
 312          *
 313          * Disable vblank interrupts for the CRTC specified with the pipe
 314          * argument.
 315          *
 316          * This is deprecated and should not be used by new drivers.
 317          * Use &drm_crtc_funcs.disable_vblank instead.
 318          */
 319         void (*disable_vblank) (struct drm_device *dev, unsigned int pipe);
 320 
 321         /**
 322          * @get_scanout_position:
 323          *
 324          * Called by vblank timestamping code.
 325          *
 326          * Returns the current display scanout position from a crtc, and an
 327          * optional accurate ktime_get() timestamp of when position was
 328          * measured. Note that this is a helper callback which is only used if a
 329          * driver uses drm_calc_vbltimestamp_from_scanoutpos() for the
 330          * @get_vblank_timestamp callback.
 331          *
 332          * Parameters:
 333          *
 334          * dev:
 335          *     DRM device.
 336          * pipe:
 337          *     Id of the crtc to query.
 338          * in_vblank_irq:
 339          *     True when called from drm_crtc_handle_vblank().  Some drivers
 340          *     need to apply some workarounds for gpu-specific vblank irq quirks
 341          *     if flag is set.
 342          * vpos:
 343          *     Target location for current vertical scanout position.
 344          * hpos:
 345          *     Target location for current horizontal scanout position.
 346          * stime:
 347          *     Target location for timestamp taken immediately before
 348          *     scanout position query. Can be NULL to skip timestamp.
 349          * etime:
 350          *     Target location for timestamp taken immediately after
 351          *     scanout position query. Can be NULL to skip timestamp.
 352          * mode:
 353          *     Current display timings.
 354          *
 355          * Returns vpos as a positive number while in active scanout area.
 356          * Returns vpos as a negative number inside vblank, counting the number
 357          * of scanlines to go until end of vblank, e.g., -1 means "one scanline
 358          * until start of active scanout / end of vblank."
 359          *
 360          * Returns:
 361          *
 362          * True on success, false if a reliable scanout position counter could
 363          * not be read out.
 364          *
 365          * FIXME:
 366          *
 367          * Since this is a helper to implement @get_vblank_timestamp, we should
 368          * move it to &struct drm_crtc_helper_funcs, like all the other
 369          * helper-internal hooks.
 370          */
 371         bool (*get_scanout_position) (struct drm_device *dev, unsigned int pipe,
 372                                       bool in_vblank_irq, int *vpos, int *hpos,
 373                                       ktime_t *stime, ktime_t *etime,
 374                                       const struct drm_display_mode *mode);
 375 
 376         /**
 377          * @get_vblank_timestamp:
 378          *
 379          * Called by drm_get_last_vbltimestamp(). Should return a precise
 380          * timestamp when the most recent VBLANK interval ended or will end.
 381          *
 382          * Specifically, the timestamp in @vblank_time should correspond as
 383          * closely as possible to the time when the first video scanline of
 384          * the video frame after the end of VBLANK will start scanning out,
 385          * the time immediately after end of the VBLANK interval. If the
 386          * @crtc is currently inside VBLANK, this will be a time in the future.
 387          * If the @crtc is currently scanning out a frame, this will be the
 388          * past start time of the current scanout. This is meant to adhere
 389          * to the OpenML OML_sync_control extension specification.
 390          *
 391          * Paramters:
 392          *
 393          * dev:
 394          *     dev DRM device handle.
 395          * pipe:
 396          *     crtc for which timestamp should be returned.
 397          * max_error:
 398          *     Maximum allowable timestamp error in nanoseconds.
 399          *     Implementation should strive to provide timestamp
 400          *     with an error of at most max_error nanoseconds.
 401          *     Returns true upper bound on error for timestamp.
 402          * vblank_time:
 403          *     Target location for returned vblank timestamp.
 404          * in_vblank_irq:
 405          *     True when called from drm_crtc_handle_vblank().  Some drivers
 406          *     need to apply some workarounds for gpu-specific vblank irq quirks
 407          *     if flag is set.
 408          *
 409          * Returns:
 410          *
 411          * True on success, false on failure, which means the core should
 412          * fallback to a simple timestamp taken in drm_crtc_handle_vblank().
 413          *
 414          * FIXME:
 415          *
 416          * We should move this hook to &struct drm_crtc_funcs like all the other
 417          * vblank hooks.
 418          */
 419         bool (*get_vblank_timestamp) (struct drm_device *dev, unsigned int pipe,
 420                                      int *max_error,
 421                                      ktime_t *vblank_time,
 422                                      bool in_vblank_irq);
 423 
 424         /**
 425          * @irq_handler:
 426          *
 427          * Interrupt handler called when using drm_irq_install(). Not used by
 428          * drivers which implement their own interrupt handling.
 429          */
 430         irqreturn_t(*irq_handler) (int irq, void *arg);
 431 
 432         /**
 433          * @irq_preinstall:
 434          *
 435          * Optional callback used by drm_irq_install() which is called before
 436          * the interrupt handler is registered. This should be used to clear out
 437          * any pending interrupts (from e.g. firmware based drives) and reset
 438          * the interrupt handling registers.
 439          */
 440         void (*irq_preinstall) (struct drm_device *dev);
 441 
 442         /**
 443          * @irq_postinstall:
 444          *
 445          * Optional callback used by drm_irq_install() which is called after
 446          * the interrupt handler is registered. This should be used to enable
 447          * interrupt generation in the hardware.
 448          */
 449         int (*irq_postinstall) (struct drm_device *dev);
 450 
 451         /**
 452          * @irq_uninstall:
 453          *
 454          * Optional callback used by drm_irq_uninstall() which is called before
 455          * the interrupt handler is unregistered. This should be used to disable
 456          * interrupt generation in the hardware.
 457          */
 458         void (*irq_uninstall) (struct drm_device *dev);
 459 
 460         /**
 461          * @master_create:
 462          *
 463          * Called whenever a new master is created. Only used by vmwgfx.
 464          */
 465         int (*master_create)(struct drm_device *dev, struct drm_master *master);
 466 
 467         /**
 468          * @master_destroy:
 469          *
 470          * Called whenever a master is destroyed. Only used by vmwgfx.
 471          */
 472         void (*master_destroy)(struct drm_device *dev, struct drm_master *master);
 473 
 474         /**
 475          * @master_set:
 476          *
 477          * Called whenever the minor master is set. Only used by vmwgfx.
 478          */
 479         int (*master_set)(struct drm_device *dev, struct drm_file *file_priv,
 480                           bool from_open);
 481         /**
 482          * @master_drop:
 483          *
 484          * Called whenever the minor master is dropped. Only used by vmwgfx.
 485          */
 486         void (*master_drop)(struct drm_device *dev, struct drm_file *file_priv);
 487 
 488         /**
 489          * @debugfs_init:
 490          *
 491          * Allows drivers to create driver-specific debugfs files.
 492          */
 493         int (*debugfs_init)(struct drm_minor *minor);
 494 
 495         /**
 496          * @gem_free_object: deconstructor for drm_gem_objects
 497          *
 498          * This is deprecated and should not be used by new drivers. Use
 499          * &drm_gem_object_funcs.free instead.
 500          */
 501         void (*gem_free_object) (struct drm_gem_object *obj);
 502 
 503         /**
 504          * @gem_free_object_unlocked: deconstructor for drm_gem_objects
 505          *
 506          * This is deprecated and should not be used by new drivers. Use
 507          * &drm_gem_object_funcs.free instead.
 508          * Compared to @gem_free_object this is not encumbered with
 509          * &drm_device.struct_mutex legacy locking schemes.
 510          */
 511         void (*gem_free_object_unlocked) (struct drm_gem_object *obj);
 512 
 513         /**
 514          * @gem_open_object:
 515          *
 516          * This callback is deprecated in favour of &drm_gem_object_funcs.open.
 517          *
 518          * Driver hook called upon gem handle creation
 519          */
 520         int (*gem_open_object) (struct drm_gem_object *, struct drm_file *);
 521 
 522         /**
 523          * @gem_close_object:
 524          *
 525          * This callback is deprecated in favour of &drm_gem_object_funcs.close.
 526          *
 527          * Driver hook called upon gem handle release
 528          */
 529         void (*gem_close_object) (struct drm_gem_object *, struct drm_file *);
 530 
 531         /**
 532          * @gem_print_info:
 533          *
 534          * This callback is deprecated in favour of
 535          * &drm_gem_object_funcs.print_info.
 536          *
 537          * If driver subclasses struct &drm_gem_object, it can implement this
 538          * optional hook for printing additional driver specific info.
 539          *
 540          * drm_printf_indent() should be used in the callback passing it the
 541          * indent argument.
 542          *
 543          * This callback is called from drm_gem_print_info().
 544          */
 545         void (*gem_print_info)(struct drm_printer *p, unsigned int indent,
 546                                const struct drm_gem_object *obj);
 547 
 548         /**
 549          * @gem_create_object: constructor for gem objects
 550          *
 551          * Hook for allocating the GEM object struct, for use by the CMA and
 552          * SHMEM GEM helpers.
 553          */
 554         struct drm_gem_object *(*gem_create_object)(struct drm_device *dev,
 555                                                     size_t size);
 556         /**
 557          * @prime_handle_to_fd:
 558          *
 559          * Main PRIME export function. Should be implemented with
 560          * drm_gem_prime_handle_to_fd() for GEM based drivers.
 561          *
 562          * For an in-depth discussion see :ref:`PRIME buffer sharing
 563          * documentation <prime_buffer_sharing>`.
 564          */
 565         int (*prime_handle_to_fd)(struct drm_device *dev, struct drm_file *file_priv,
 566                                 uint32_t handle, uint32_t flags, int *prime_fd);
 567         /**
 568          * @prime_fd_to_handle:
 569          *
 570          * Main PRIME import function. Should be implemented with
 571          * drm_gem_prime_fd_to_handle() for GEM based drivers.
 572          *
 573          * For an in-depth discussion see :ref:`PRIME buffer sharing
 574          * documentation <prime_buffer_sharing>`.
 575          */
 576         int (*prime_fd_to_handle)(struct drm_device *dev, struct drm_file *file_priv,
 577                                 int prime_fd, uint32_t *handle);
 578         /**
 579          * @gem_prime_export:
 580          *
 581          * Export hook for GEM drivers. Deprecated in favour of
 582          * &drm_gem_object_funcs.export.
 583          */
 584         struct dma_buf * (*gem_prime_export)(struct drm_gem_object *obj,
 585                                              int flags);
 586         /**
 587          * @gem_prime_import:
 588          *
 589          * Import hook for GEM drivers.
 590          *
 591          * This defaults to drm_gem_prime_import() if not set.
 592          */
 593         struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev,
 594                                 struct dma_buf *dma_buf);
 595 
 596         /**
 597          * @gem_prime_pin:
 598          *
 599          * Deprecated hook in favour of &drm_gem_object_funcs.pin.
 600          */
 601         int (*gem_prime_pin)(struct drm_gem_object *obj);
 602 
 603         /**
 604          * @gem_prime_unpin:
 605          *
 606          * Deprecated hook in favour of &drm_gem_object_funcs.unpin.
 607          */
 608         void (*gem_prime_unpin)(struct drm_gem_object *obj);
 609 
 610 
 611         /**
 612          * @gem_prime_get_sg_table:
 613          *
 614          * Deprecated hook in favour of &drm_gem_object_funcs.get_sg_table.
 615          */
 616         struct sg_table *(*gem_prime_get_sg_table)(struct drm_gem_object *obj);
 617 
 618         /**
 619          * @gem_prime_import_sg_table:
 620          *
 621          * Optional hook used by the PRIME helper functions
 622          * drm_gem_prime_import() respectively drm_gem_prime_import_dev().
 623          */
 624         struct drm_gem_object *(*gem_prime_import_sg_table)(
 625                                 struct drm_device *dev,
 626                                 struct dma_buf_attachment *attach,
 627                                 struct sg_table *sgt);
 628         /**
 629          * @gem_prime_vmap:
 630          *
 631          * Deprecated vmap hook for GEM drivers. Please use
 632          * &drm_gem_object_funcs.vmap instead.
 633          */
 634         void *(*gem_prime_vmap)(struct drm_gem_object *obj);
 635 
 636         /**
 637          * @gem_prime_vunmap:
 638          *
 639          * Deprecated vunmap hook for GEM drivers. Please use
 640          * &drm_gem_object_funcs.vunmap instead.
 641          */
 642         void (*gem_prime_vunmap)(struct drm_gem_object *obj, void *vaddr);
 643 
 644         /**
 645          * @gem_prime_mmap:
 646          *
 647          * mmap hook for GEM drivers, used to implement dma-buf mmap in the
 648          * PRIME helpers.
 649          *
 650          * FIXME: There's way too much duplication going on here, and also moved
 651          * to &drm_gem_object_funcs.
 652          */
 653         int (*gem_prime_mmap)(struct drm_gem_object *obj,
 654                                 struct vm_area_struct *vma);
 655 
 656         /**
 657          * @dumb_create:
 658          *
 659          * This creates a new dumb buffer in the driver's backing storage manager (GEM,
 660          * TTM or something else entirely) and returns the resulting buffer handle. This
 661          * handle can then be wrapped up into a framebuffer modeset object.
 662          *
 663          * Note that userspace is not allowed to use such objects for render
 664          * acceleration - drivers must create their own private ioctls for such a use
 665          * case.
 666          *
 667          * Width, height and depth are specified in the &drm_mode_create_dumb
 668          * argument. The callback needs to fill the handle, pitch and size for
 669          * the created buffer.
 670          *
 671          * Called by the user via ioctl.
 672          *
 673          * Returns:
 674          *
 675          * Zero on success, negative errno on failure.
 676          */
 677         int (*dumb_create)(struct drm_file *file_priv,
 678                            struct drm_device *dev,
 679                            struct drm_mode_create_dumb *args);
 680         /**
 681          * @dumb_map_offset:
 682          *
 683          * Allocate an offset in the drm device node's address space to be able to
 684          * memory map a dumb buffer.
 685          *
 686          * The default implementation is drm_gem_create_mmap_offset(). GEM based
 687          * drivers must not overwrite this.
 688          *
 689          * Called by the user via ioctl.
 690          *
 691          * Returns:
 692          *
 693          * Zero on success, negative errno on failure.
 694          */
 695         int (*dumb_map_offset)(struct drm_file *file_priv,
 696                                struct drm_device *dev, uint32_t handle,
 697                                uint64_t *offset);
 698         /**
 699          * @dumb_destroy:
 700          *
 701          * This destroys the userspace handle for the given dumb backing storage buffer.
 702          * Since buffer objects must be reference counted in the kernel a buffer object
 703          * won't be immediately freed if a framebuffer modeset object still uses it.
 704          *
 705          * Called by the user via ioctl.
 706          *
 707          * The default implementation is drm_gem_dumb_destroy(). GEM based drivers
 708          * must not overwrite this.
 709          *
 710          * Returns:
 711          *
 712          * Zero on success, negative errno on failure.
 713          */
 714         int (*dumb_destroy)(struct drm_file *file_priv,
 715                             struct drm_device *dev,
 716                             uint32_t handle);
 717 
 718         /**
 719          * @gem_vm_ops: Driver private ops for this object
 720          *
 721          * For GEM drivers this is deprecated in favour of
 722          * &drm_gem_object_funcs.vm_ops.
 723          */
 724         const struct vm_operations_struct *gem_vm_ops;
 725 
 726         /** @major: driver major number */
 727         int major;
 728         /** @minor: driver minor number */
 729         int minor;
 730         /** @patchlevel: driver patch level */
 731         int patchlevel;
 732         /** @name: driver name */
 733         char *name;
 734         /** @desc: driver description */
 735         char *desc;
 736         /** @date: driver date */
 737         char *date;
 738 
 739         /**
 740          * @driver_features:
 741          * Driver features, see &enum drm_driver_feature. Drivers can disable
 742          * some features on a per-instance basis using
 743          * &drm_device.driver_features.
 744          */
 745         u32 driver_features;
 746 
 747         /**
 748          * @ioctls:
 749          *
 750          * Array of driver-private IOCTL description entries. See the chapter on
 751          * :ref:`IOCTL support in the userland interfaces
 752          * chapter<drm_driver_ioctl>` for the full details.
 753          */
 754 
 755         const struct drm_ioctl_desc *ioctls;
 756         /** @num_ioctls: Number of entries in @ioctls. */
 757         int num_ioctls;
 758 
 759         /**
 760          * @fops:
 761          *
 762          * File operations for the DRM device node. See the discussion in
 763          * :ref:`file operations<drm_driver_fops>` for in-depth coverage and
 764          * some examples.
 765          */
 766         const struct file_operations *fops;
 767 
 768         /* Everything below here is for legacy driver, never use! */
 769         /* private: */
 770 
 771         /* List of devices hanging off this driver with stealth attach. */
 772         struct list_head legacy_dev_list;
 773         int (*firstopen) (struct drm_device *);
 774         void (*preclose) (struct drm_device *, struct drm_file *file_priv);
 775         int (*dma_ioctl) (struct drm_device *dev, void *data, struct drm_file *file_priv);
 776         int (*dma_quiescent) (struct drm_device *);
 777         int (*context_dtor) (struct drm_device *dev, int context);
 778         int dev_priv_size;
 779 };
 780 
 781 extern unsigned int drm_debug;
 782 
 783 int drm_dev_init(struct drm_device *dev,
 784                  struct drm_driver *driver,
 785                  struct device *parent);
 786 int devm_drm_dev_init(struct device *parent,
 787                       struct drm_device *dev,
 788                       struct drm_driver *driver);
 789 void drm_dev_fini(struct drm_device *dev);
 790 
 791 struct drm_device *drm_dev_alloc(struct drm_driver *driver,
 792                                  struct device *parent);
 793 int drm_dev_register(struct drm_device *dev, unsigned long flags);
 794 void drm_dev_unregister(struct drm_device *dev);
 795 
 796 void drm_dev_get(struct drm_device *dev);
 797 void drm_dev_put(struct drm_device *dev);
 798 void drm_put_dev(struct drm_device *dev);
 799 bool drm_dev_enter(struct drm_device *dev, int *idx);
 800 void drm_dev_exit(int idx);
 801 void drm_dev_unplug(struct drm_device *dev);
 802 
 803 /**
 804  * drm_dev_is_unplugged - is a DRM device unplugged
 805  * @dev: DRM device
 806  *
 807  * This function can be called to check whether a hotpluggable is unplugged.
 808  * Unplugging itself is singalled through drm_dev_unplug(). If a device is
 809  * unplugged, these two functions guarantee that any store before calling
 810  * drm_dev_unplug() is visible to callers of this function after it completes
 811  *
 812  * WARNING: This function fundamentally races against drm_dev_unplug(). It is
 813  * recommended that drivers instead use the underlying drm_dev_enter() and
 814  * drm_dev_exit() function pairs.
 815  */
 816 static inline bool drm_dev_is_unplugged(struct drm_device *dev)
 817 {
 818         int idx;
 819 
 820         if (drm_dev_enter(dev, &idx)) {
 821                 drm_dev_exit(idx);
 822                 return false;
 823         }
 824 
 825         return true;
 826 }
 827 
 828 /**
 829  * drm_core_check_feature - check driver feature flags
 830  * @dev: DRM device to check
 831  * @feature: feature flag
 832  *
 833  * This checks @dev for driver features, see &drm_driver.driver_features,
 834  * &drm_device.driver_features, and the various &enum drm_driver_feature flags.
 835  *
 836  * Returns true if the @feature is supported, false otherwise.
 837  */
 838 static inline bool drm_core_check_feature(const struct drm_device *dev, u32 feature)
 839 {
 840         return dev->driver->driver_features & dev->driver_features & feature;
 841 }
 842 
 843 /**
 844  * drm_drv_uses_atomic_modeset - check if the driver implements
 845  * atomic_commit()
 846  * @dev: DRM device
 847  *
 848  * This check is useful if drivers do not have DRIVER_ATOMIC set but
 849  * have atomic modesetting internally implemented.
 850  */
 851 static inline bool drm_drv_uses_atomic_modeset(struct drm_device *dev)
 852 {
 853         return drm_core_check_feature(dev, DRIVER_ATOMIC) ||
 854                 (dev->mode_config.funcs && dev->mode_config.funcs->atomic_commit != NULL);
 855 }
 856 
 857 
 858 int drm_dev_set_unique(struct drm_device *dev, const char *name);
 859 
 860 
 861 #endif

/* [<][>][^][v][top][bottom][index][help] */