[Intel-xe] [RFC PATCH v3 2/2] drm/xe/uapi: Add query engines uAPI

Matthew Brost matthew.brost at intel.com
Thu Mar 23 02:58:01 UTC 2023


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
 
 /* 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;
+
+	/** @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;
-- 
2.34.1



More information about the Intel-xe mailing list