[Intel-xe] [RFC PATCH v3 2/2] drm/xe/uapi: Add query engines uAPI
Souza, Jose
jose.souza at intel.com
Fri Mar 24 15:38:07 UTC 2023
On Wed, 2023-03-22 at 19:58 -0700, Matthew Brost wrote:
> Not all hardware engines are created equally, certain instance have
> unique capabilities or properties. Introduce a uAPI to query for both
> capabilities and properties. The capabilities are represented by a bit
> mask which is unique to each class. The properties are represented by a
> name and value return in an array to the user.
>
> v3: s/xe_engine/xe_hw_engine
>
> Signed-off-by: Matthew Brost <matthew.brost at intel.com>
> ---
> include/uapi/drm/xe_drm.h | 41 +++++++++++++++++++++++++++++++++++++++
> 1 file changed, 41 insertions(+)
>
> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index 89596d353d3e..2f936fe2e452 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/xe_drm.h
> @@ -119,6 +119,7 @@ struct xe_user_extension {
> #define DRM_XE_WAIT_USER_FENCE 0x0b
> #define DRM_XE_VM_MADVISE 0x0c
> #define DRM_XE_ENGINE_GET_PROPERTY 0x0d
> +#define DRM_XE_HW_ENGINE_QUERY 0x0f
0x0e
>
> /* Must be kept compact -- no holes */
> #define DRM_IOCTL_XE_DEVICE_QUERY DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_DEVICE_QUERY, struct drm_xe_device_query)
> @@ -135,6 +136,7 @@ struct xe_user_extension {
> #define DRM_IOCTL_XE_ENGINE_SET_PROPERTY DRM_IOW( DRM_COMMAND_BASE + DRM_XE_ENGINE_SET_PROPERTY, struct drm_xe_engine_set_property)
> #define DRM_IOCTL_XE_WAIT_USER_FENCE DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_WAIT_USER_FENCE, struct drm_xe_wait_user_fence)
> #define DRM_IOCTL_XE_VM_MADVISE DRM_IOW( DRM_COMMAND_BASE + DRM_XE_VM_MADVISE, struct drm_xe_vm_madvise)
> +#define DRM_IOCTL_XE_ENGINE_QUERY DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_HW_ENGINE_QUERY, struct drm_xe_hw_engine_query)
>
> struct drm_xe_hw_engine_class_instance {
> __u16 engine_class;
> @@ -253,6 +255,45 @@ struct drm_xe_device_query {
> __u64 reserved[2];
> };
>
> +struct drm_xe_hw_engine_query_property {
> + /** @name: name of the property */
> + __u64 name;
Name actually will be a property id? Maybe name it prop_id, property_id, id?
Will the the properties be added in implementation patch?
With a rename and the pad that Matthew Auld mentioned this is
Reviewed-by: José Roberto de Souza <jose.souza at intel.com>
> +
> + /** @value: value property */
> + __u64 value;
> +
> + /** @reserved: reserved */
> + __u64 reserved[2];
> +};
> +
> +struct drm_xe_hw_engine_query {
> + /** @extensions: pointer to the first extension struct, if any */
> + __u64 extensions;
> +
> + /** @eci: engine class instance to query */
> + struct drm_xe_hw_engine_class_instance eci;
> +
> + /** @capabilities: bit mask of capabilities, specific to each class */
> + __u64 capabilities;
> +
> + /**
> + * @size: Size of the queried properties, if user passes in zero the KMD
> + * returns the size of the properties array, if user passes in the size
> + * of the properties array the KMD copies the properties to the user
> + * pointer.
> + */
> + __u32 size;
> +
> + /**
> + * @properties: user pointer to which an array of struct
> + * drm_xe_hw_engine_query_property are copied to if size is non-zero
> + */
> + __u64 properties;
> +
> + /** @reserved: reserved */
> + __u64 reserved[2];
> +};
> +
> struct drm_xe_gem_create {
> /** @extensions: Pointer to the first extension struct, if any */
> __u64 extensions;
More information about the Intel-xe
mailing list