On 20-05-2026 19:59, Dmitry Baryshkov wrote:
On Tue, May 19, 2026 at 11:45:58AM +0530, Ekansh Gupta via B4 Relay wrote:
From: Ekansh Gupta ekansh.gupta@oss.qualcomm.com
Introduce the DRM_IOCTL_QDA_QUERY IOCTL, which allows user-space to identify which DSP domain a given /dev/accel/accel* node represents (e.g. "cdsp", "adsp").
include/uapi/drm/qda_accel.h Defines the QDA IOCTL command numbers and the associated data structures. The header follows the standard DRM UAPI conventions: __u8/__u32 types, a C++ extern "C" guard, and GPL-2.0-only WITH Linux-syscall-note licensing.
drivers/accel/qda/qda_ioctl.c / qda_ioctl.h Implements qda_ioctl_query(), which copies the DSP domain name stored in qda_dev.dsp_name into the user-supplied drm_qda_query buffer using strscpy().
drivers/accel/qda/qda_drv.c Registers the qda_ioctls[] table with the drm_driver so that the DRM core dispatches DRM_IOCTL_QDA_QUERY to qda_ioctl_query().
Assisted-by: Claude:claude-4-6-sonnet Signed-off-by: Ekansh Gupta ekansh.gupta@oss.qualcomm.com
drivers/accel/qda/Makefile | 1 + drivers/accel/qda/qda_drv.c | 8 +++++++ drivers/accel/qda/qda_ioctl.c | 26 +++++++++++++++++++++++ drivers/accel/qda/qda_ioctl.h | 13 ++++++++++++ include/uapi/drm/qda_accel.h | 49 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 97 insertions(+)
diff --git a/drivers/accel/qda/Makefile b/drivers/accel/qda/Makefile index 701fad5ffb50..b658dad35fee 100644 --- a/drivers/accel/qda/Makefile +++ b/drivers/accel/qda/Makefile @@ -8,6 +8,7 @@ obj-$(CONFIG_DRM_ACCEL_QDA) := qda.o qda-y := \ qda_cb.o \ qda_drv.o \
- qda_ioctl.o \ qda_memory_manager.o \ qda_rpmsg.o
diff --git a/drivers/accel/qda/qda_drv.c b/drivers/accel/qda/qda_drv.c index 0ad5d9873d7e..becd831d10be 100644 --- a/drivers/accel/qda/qda_drv.c +++ b/drivers/accel/qda/qda_drv.c @@ -8,8 +8,10 @@ #include <drm/drm_gem.h> #include <drm/drm_ioctl.h> #include <drm/drm_print.h> +#include <drm/qda_accel.h> #include "qda_drv.h" +#include "qda_ioctl.h" #include "qda_rpmsg.h" static int qda_open(struct drm_device *dev, struct drm_file *file) @@ -36,11 +38,17 @@ static void qda_postclose(struct drm_device *dev, struct drm_file *file) DEFINE_DRM_ACCEL_FOPS(qda_accel_fops); +static const struct drm_ioctl_desc qda_ioctls[] = {
- DRM_IOCTL_DEF_DRV(QDA_QUERY, qda_ioctl_query, 0),
+};
static const struct drm_driver qda_drm_driver = { .driver_features = DRIVER_COMPUTE_ACCEL, .fops = &qda_accel_fops, .open = qda_open, .postclose = qda_postclose,
- .ioctls = qda_ioctls,
- .num_ioctls = ARRAY_SIZE(qda_ioctls), .name = QDA_DRIVER_NAME, .desc = "Qualcomm DSP Accelerator Driver",
}; diff --git a/drivers/accel/qda/qda_ioctl.c b/drivers/accel/qda/qda_ioctl.c new file mode 100644 index 000000000000..761d3567c33f --- /dev/null +++ b/drivers/accel/qda/qda_ioctl.c @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: GPL-2.0-only +// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. +#include <drm/drm_ioctl.h> +#include <drm/qda_accel.h> +#include "qda_drv.h" +#include "qda_ioctl.h"
+/**
- qda_ioctl_query() - Query DSP device information
- @dev: DRM device structure
- @data: User-space data (struct drm_qda_query)
- @file_priv: DRM file private data
- Return: 0 on success, negative error code on failure
- */
+int qda_ioctl_query(struct drm_device *dev, void *data, struct drm_file *file_priv) +{
- struct drm_qda_query *args = data;
- struct qda_dev *qdev;
- qdev = qda_dev_from_drm(dev);
- strscpy(args->dsp_name, qdev->dsp_name, sizeof(args->dsp_name));
- return 0;
+} diff --git a/drivers/accel/qda/qda_ioctl.h b/drivers/accel/qda/qda_ioctl.h new file mode 100644 index 000000000000..b8fd536a111f --- /dev/null +++ b/drivers/accel/qda/qda_ioctl.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/*
- Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
- */
+#ifndef __QDA_IOCTL_H__ +#define __QDA_IOCTL_H__
+#include "qda_drv.h"
+int qda_ioctl_query(struct drm_device *dev, void *data, struct drm_file *file_priv);
+#endif /* __QDA_IOCTL_H__ */ diff --git a/include/uapi/drm/qda_accel.h b/include/uapi/drm/qda_accel.h new file mode 100644 index 000000000000..1971a4263065 --- /dev/null +++ b/include/uapi/drm/qda_accel.h @@ -0,0 +1,49 @@ +/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */ +/*
- Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
- */
+#ifndef __QDA_ACCEL_H__ +#define __QDA_ACCEL_H__
+#include "drm.h"
+#if defined(__cplusplus) +extern "C" { +#endif
+/*
- QDA IOCTL command numbers
- These define the command numbers for QDA-specific IOCTLs.
- They are used with DRM_COMMAND_BASE to create the full IOCTL numbers.
- */
+#define DRM_QDA_QUERY 0x00
+/*
- QDA IOCTL definitions
- These macros define the actual IOCTL numbers used by userspace applications.
- They combine the command numbers with DRM_COMMAND_BASE and specify the
- data structure and direction (read/write) for each IOCTL.
- */
+#define DRM_IOCTL_QDA_QUERY DRM_IOR(DRM_COMMAND_BASE + DRM_QDA_QUERY, \
struct drm_qda_query)+/**
- struct drm_qda_query - Device information query structure
- @dsp_name: Name of DSP (e.g., "adsp", "cdsp", "cdsp1", "gdsp0", "gdsp1")
- This structure is used with DRM_IOCTL_QDA_QUERY to query device type,
- allowing userspace to identify which DSP a device node represents. The
- kernel provides the DSP name directly as a null-terminated string.
- */
+struct drm_qda_query {
- __u8 dsp_name[16];
Are you sure that you want to query only the name? No extra options, no attributes, no hardware capabilities?
There are plans to extend this ioctl to support DSP capabilities and few other query options, but as per my understanding, I don't need to add reserved IOCTLs in drm case and I can extend it in future. Please correct me if my understanding is wrong and I should add reserved fields.
Copying the statement from the doc[1]. "Note that drm_ioctl() automatically zero-extends structures, hence make sure you can add more stuff at the end, i.e. don’t put a variable sized array there."
[1] https://www.kernel.org/doc/html/v7.0/gpu/drm-uapi.html#ioctl-support-on-devi...
+};
+#if defined(__cplusplus) +} +#endif
+#endif /* __QDA_ACCEL_H__ */
-- 2.34.1