Commit 6e5b47a4 authored by Simon Ser's avatar Simon Ser
Browse files

drm: document drm_mode_get_property



It's not obvious what the fields mean and how they should be used.
The most important detail is the link to drm_property.flags, which
describes how property types work.

v2: document enum drm_mode_property_enum, add ref to "Modeset Base
Object Abstraction" (Daniel)

Signed-off-by: default avatarSimon Ser <contact@emersion.fr>
Acked-by: default avatarPekka Paalanen <pekka.paalanen@collabora.com>
Acked-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Cc: Leandro Ribeiro <leandro.ribeiro@collabora.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210802072826.500078-1-contact@emersion.fr
parent 2f425cf5
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -159,6 +159,8 @@ KMS Core Structures and Functions
.. kernel-doc:: drivers/gpu/drm/drm_mode_config.c
.. kernel-doc:: drivers/gpu/drm/drm_mode_config.c
   :export:
   :export:


.. _kms_base_object_abstraction:

Modeset Base Object Abstraction
Modeset Base Object Abstraction
===============================
===============================


+56 −4
Original line number Original line Diff line number Diff line
@@ -541,22 +541,74 @@ struct drm_mode_get_connector {
 */
 */
#define DRM_MODE_PROP_ATOMIC        0x80000000
#define DRM_MODE_PROP_ATOMIC        0x80000000


/**
 * struct drm_mode_property_enum - Description for an enum/bitfield entry.
 * @value: numeric value for this enum entry.
 * @name: symbolic name for this enum entry.
 *
 * See struct drm_property_enum for details.
 */
struct drm_mode_property_enum {
struct drm_mode_property_enum {
	__u64 value;
	__u64 value;
	char name[DRM_PROP_NAME_LEN];
	char name[DRM_PROP_NAME_LEN];
};
};


/**
 * struct drm_mode_get_property - Get property metadata.
 *
 * User-space can perform a GETPROPERTY ioctl to retrieve information about a
 * property. The same property may be attached to multiple objects, see
 * "Modeset Base Object Abstraction".
 *
 * The meaning of the @values_ptr field changes depending on the property type.
 * See &drm_property.flags for more details.
 *
 * The @enum_blob_ptr and @count_enum_blobs fields are only meaningful when the
 * property has the type &DRM_MODE_PROP_ENUM or &DRM_MODE_PROP_BITMASK. For
 * backwards compatibility, the kernel will always set @count_enum_blobs to
 * zero when the property has the type &DRM_MODE_PROP_BLOB. User-space must
 * ignore these two fields if the property has a different type.
 *
 * User-space is expected to retrieve values and enums by performing this ioctl
 * at least twice: the first time to retrieve the number of elements, the
 * second time to retrieve the elements themselves.
 *
 * To retrieve the number of elements, set @count_values and @count_enum_blobs
 * to zero, then call the ioctl. @count_values will be updated with the number
 * of elements. If the property has the type &DRM_MODE_PROP_ENUM or
 * &DRM_MODE_PROP_BITMASK, @count_enum_blobs will be updated as well.
 *
 * To retrieve the elements themselves, allocate an array for @values_ptr and
 * set @count_values to its capacity. If the property has the type
 * &DRM_MODE_PROP_ENUM or &DRM_MODE_PROP_BITMASK, allocate an array for
 * @enum_blob_ptr and set @count_enum_blobs to its capacity. Calling the ioctl
 * again will fill the arrays.
 */
struct drm_mode_get_property {
struct drm_mode_get_property {
	__u64 values_ptr; /* values and blob lengths */
	/** @values_ptr: Pointer to a ``__u64`` array. */
	__u64 enum_blob_ptr; /* enum and blob id ptrs */
	__u64 values_ptr;
	/** @enum_blob_ptr: Pointer to a struct drm_mode_property_enum array. */
	__u64 enum_blob_ptr;


	/**
	 * @prop_id: Object ID of the property which should be retrieved. Set
	 * by the caller.
	 */
	__u32 prop_id;
	__u32 prop_id;
	/**
	 * @flags: ``DRM_MODE_PROP_*`` bitfield. See &drm_property.flags for
	 * a definition of the flags.
	 */
	__u32 flags;
	__u32 flags;
	/**
	 * @name: Symbolic property name. User-space should use this field to
	 * recognize properties.
	 */
	char name[DRM_PROP_NAME_LEN];
	char name[DRM_PROP_NAME_LEN];


	/** @count_values: Number of elements in @values_ptr. */
	__u32 count_values;
	__u32 count_values;
	/* This is only used to count enum values, not blobs. The _blobs is
	/** @count_enum_blobs: Number of elements in @enum_blob_ptr. */
	 * simply because of a historical reason, i.e. backwards compat. */
	__u32 count_enum_blobs;
	__u32 count_enum_blobs;
};
};