drm: Switch DRIVER_ flags to an enum
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 29 Jan 2019 10:42:47 +0000 (11:42 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 29 Jan 2019 14:45:12 +0000 (15:45 +0100)
And move the documenation we alreay have into kerneldoc, plus a bit of
polish while at it.

v2:
- Ditch FIXME from commit message, I've resolved that already before
  sending out the first version.
- Put the legacy DRIVER_ flags at the end (Sam).

Cc: Sam Ravnborg <sam@ravnborg.org>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190129104248.26607-2-daniel.vetter@ffwll.ch
Documentation/gpu/drm-internals.rst
include/drm/drm_drv.h

index 2caf21effd281d28805a64a27f921235e489ba66..3ae23a5454aca4822944296acac375b658e63cf7 100644 (file)
@@ -39,68 +39,6 @@ sections.
 Driver Information
 ------------------
 
-Driver Features
-~~~~~~~~~~~~~~~
-
-Drivers inform the DRM core about their requirements and supported
-features by setting appropriate flags in the driver_features field.
-Since those flags influence the DRM core behaviour since registration
-time, most of them must be set to registering the :c:type:`struct
-drm_driver <drm_driver>` instance.
-
-u32 driver_features;
-
-DRIVER_USE_AGP
-    Driver uses AGP interface, the DRM core will manage AGP resources.
-
-DRIVER_LEGACY
-    Denote a legacy driver using shadow attach. Don't use.
-
-DRIVER_KMS_LEGACY_CONTEXT
-    Used only by nouveau for backwards compatibility with existing userspace.
-    Don't use.
-
-DRIVER_PCI_DMA
-    Driver is capable of PCI DMA, mapping of PCI DMA buffers to
-    userspace will be enabled. Deprecated.
-
-DRIVER_SG
-    Driver can perform scatter/gather DMA, allocation and mapping of
-    scatter/gather buffers will be enabled. Deprecated.
-
-DRIVER_HAVE_DMA
-    Driver supports DMA, the userspace DMA API will be supported.
-    Deprecated.
-
-DRIVER_HAVE_IRQ; DRIVER_IRQ_SHARED
-    DRIVER_HAVE_IRQ indicates whether the driver has an IRQ handler
-    managed by the DRM Core. The core will support simple IRQ handler
-    installation when the flag is set. The installation process is
-    described in ?.
-
-    DRIVER_IRQ_SHARED indicates whether the device & handler support
-    shared IRQs (note that this is required of PCI drivers).
-
-DRIVER_GEM
-    Driver use the GEM memory manager.
-
-DRIVER_MODESET
-    Driver supports mode setting interfaces (KMS).
-
-DRIVER_PRIME
-    Driver implements DRM PRIME buffer sharing.
-
-DRIVER_RENDER
-    Driver supports dedicated render nodes.
-
-DRIVER_ATOMIC
-    Driver supports atomic properties. In this case the driver must
-    implement appropriate obj->atomic_get_property() vfuncs for any
-    modeset objects with driver specific properties.
-
-DRIVER_SYNCOBJ
-    Driver support drm sync objects.
-
 Major, Minor and Patchlevel
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
index e32c12877bc5f01bcd8d54cb4c2bd055ccbe2fae..0760a1d7b6c21da6d074195ebe4a3fb4da43bdf4 100644 (file)
@@ -41,21 +41,123 @@ struct drm_display_mode;
 struct drm_mode_create_dumb;
 struct drm_printer;
 
-/* driver capabilities and requirements mask */
-#define DRIVER_USE_AGP                 0x1
-#define DRIVER_LEGACY                  0x2
-#define DRIVER_PCI_DMA                 0x8
-#define DRIVER_SG                      0x10
-#define DRIVER_HAVE_DMA                        0x20
-#define DRIVER_HAVE_IRQ                        0x40
-#define DRIVER_IRQ_SHARED              0x80
-#define DRIVER_GEM                     0x1000
-#define DRIVER_MODESET                 0x2000
-#define DRIVER_PRIME                   0x4000
-#define DRIVER_RENDER                  0x8000
-#define DRIVER_ATOMIC                  0x10000
-#define DRIVER_KMS_LEGACY_CONTEXT      0x20000
-#define DRIVER_SYNCOBJ                  0x40000
+/**
+ * enum drm_driver_feature - feature flags
+ *
+ * See &drm_driver.driver_features, drm_device.driver_features and
+ * drm_core_check_feature().
+ */
+enum drm_driver_feature {
+       /**
+        * @DRIVER_GEM:
+        *
+        * Driver use the GEM memory manager. This should be set for all modern
+        * drivers.
+        */
+       DRIVER_GEM                      = BIT(0),
+       /**
+        * @DRIVER_MODESET:
+        *
+        * Driver supports mode setting interfaces (KMS).
+        */
+       DRIVER_MODESET                  = BIT(1),
+       /**
+        * @DRIVER_PRIME:
+        *
+        * Driver implements DRM PRIME buffer sharing.
+        */
+       DRIVER_PRIME                    = BIT(2),
+       /**
+        * @DRIVER_RENDER:
+        *
+        * Driver supports dedicated render nodes. See also the :ref:`section on
+        * render nodes <drm_render_node>` for details.
+        */
+       DRIVER_RENDER                   = BIT(3),
+       /**
+        * @DRIVER_ATOMIC:
+        *
+        * Driver supports the full atomic modesetting userspace API. Drivers
+        * which only use atomic internally, but do not the support the full
+        * userspace API (e.g. not all properties converted to atomic, or
+        * multi-plane updates are not guaranteed to be tear-free) should not
+        * set this flag.
+        */
+       DRIVER_ATOMIC                   = BIT(4),
+       /**
+        * @DRIVER_SYNCOBJ:
+        *
+        * Driver supports &drm_syncobj for explicit synchronization of command
+        * submission.
+        */
+       DRIVER_SYNCOBJ                  = BIT(5),
+
+       /* IMPORTANT: Below are all the legacy flags, add new ones above. */
+
+       /**
+        * @DRIVER_USE_AGP:
+        *
+        * Set up DRM AGP support, see drm_agp_init(), the DRM core will manage
+        * AGP resources. New drivers don't need this.
+        */
+       DRIVER_USE_AGP                  = BIT(24),
+       /**
+        * @DRIVER_LEGACY:
+        *
+        * Denote a legacy driver using shadow attach. Do not use.
+        */
+       DRIVER_LEGACY                   = BIT(25),
+       /**
+        * @DRIVER_PCI_DMA:
+        *
+        * Driver is capable of PCI DMA, mapping of PCI DMA buffers to userspace
+        * will be enabled. Only for legacy drivers. Do not use.
+        */
+       DRIVER_PCI_DMA                  = BIT(26),
+       /**
+        * @DRIVER_SG:
+        *
+        * Driver can perform scatter/gather DMA, allocation and mapping of
+        * scatter/gather buffers will be enabled. Only for legacy drivers. Do
+        * not use.
+        */
+       DRIVER_SG                       = BIT(27),
+
+       /**
+        * @DRIVER_HAVE_DMA:
+        *
+        * Driver supports DMA, the userspace DMA API will be supported. Only
+        * for legacy drivers. Do not use.
+        */
+       DRIVER_HAVE_DMA                 = BIT(28),
+       /**
+        * @DRIVER_HAVE_IRQ:
+        *
+        * Legacy irq support. Only for legacy drivers. Do not use.
+        *
+        * New drivers can either use the drm_irq_install() and
+        * drm_irq_uninstall() helper functions, or roll their own irq support
+        * code by calling request_irq() directly.
+        */
+       DRIVER_HAVE_IRQ                 = BIT(29),
+       /**
+        * @DRIVER_IRQ_SHARED:
+        *
+        * Indicates to drm_irq_install() that a shared irq should be requested.
+        *
+        * FIXME: This should be an explicit argument for non-legacy drivers, or
+        * at least the default for PCI devices (which would cover all current
+        * users).
+        */
+       DRIVER_IRQ_SHARED               = BIT(30),
+       /**
+        * @DRIVER_KMS_LEGACY_CONTEXT:
+        *
+        * Used only by nouveau for backwards compatibility with existing
+        * userspace.  Do not use.
+        */
+       DRIVER_KMS_LEGACY_CONTEXT       = BIT(31),
+};
 
 /**
  * struct drm_driver - DRM driver structure
@@ -579,7 +681,12 @@ struct drm_driver {
        /** @date: driver date */
        char *date;
 
-       /** @driver_features: driver features */
+       /**
+        * @driver_features:
+        * Driver features, see &enum drm_driver_feature. Drivers can disable
+        * some features on a per-instance basis using
+        * &drm_device.driver_features.
+        */
        u32 driver_features;
 
        /**
@@ -666,7 +773,7 @@ static inline bool drm_dev_is_unplugged(struct drm_device *dev)
  * @feature: feature flag
  *
  * This checks @dev for driver features, see &drm_driver.driver_features,
- * &drm_device.driver_features, and the various DRIVER_\* flags.
+ * &drm_device.driver_features, and the various &enum drm_driver_feature flags.
  *
  * Returns true if the @feature is supported, false otherwise.
  */