drm: add drm_core_check_all_features() to check for a mask of features
authorJani Nikula <jani.nikula@intel.com>
Thu, 23 Jan 2020 12:48:00 +0000 (14:48 +0200)
committerJani Nikula <jani.nikula@intel.com>
Sat, 25 Jan 2020 13:49:01 +0000 (15:49 +0200)
Add new drm_core_check_all_features() function to check for a mask of
features. All features in the mask are required.

Redefine existing drm_core_check_feature() in terms of this function,
using the drm_driver_feature enum for the parameter.

v3:
- add drm_core_check_all_features() (Thomas)

v2:
- fix kernel-doc (Ville)
- add an extra variable for clarity (Ville)

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200123124801.14958-1-jani.nikula@intel.com
include/drm/drm_drv.h

index cf13470810a5e036d27ba26f258817b4486bd2c2..23b636691fb449b48917469a3501186cd35f37e3 100644 (file)
@@ -823,6 +823,25 @@ static inline bool drm_dev_is_unplugged(struct drm_device *dev)
        return true;
 }
 
+/**
+ * drm_core_check_all_features - check driver feature flags mask
+ * @dev: DRM device to check
+ * @features: feature flag(s) mask
+ *
+ * This checks @dev for driver features, see &drm_driver.driver_features,
+ * &drm_device.driver_features, and the various &enum drm_driver_feature flags.
+ *
+ * Returns true if all features in the @features mask are supported, false
+ * otherwise.
+ */
+static inline bool drm_core_check_all_features(const struct drm_device *dev,
+                                              u32 features)
+{
+       u32 supported = dev->driver->driver_features & dev->driver_features;
+
+       return features && (supported & features) == features;
+}
+
 /**
  * drm_core_check_feature - check driver feature flags
  * @dev: DRM device to check
@@ -833,9 +852,10 @@ static inline bool drm_dev_is_unplugged(struct drm_device *dev)
  *
  * Returns true if the @feature is supported, false otherwise.
  */
-static inline bool drm_core_check_feature(const struct drm_device *dev, u32 feature)
+static inline bool drm_core_check_feature(const struct drm_device *dev,
+                                         enum drm_driver_feature feature)
 {
-       return dev->driver->driver_features & dev->driver_features & feature;
+       return drm_core_check_all_features(dev, feature);
 }
 
 /**