From: Ekansh Gupta <[email protected]> Wire FASTRPC_IOCTL_GET_DSP_INFO into the legacy FastRPC compatibility shim on top of qda_fastrpc_get_dsp_info(), so existing user space can query DSP capabilities through the /dev/fastrpc-* interface exactly as it could with the driver this one replaces.
The device-wide capability cache introduced for the native DRM_IOCTL_QDA_QUERY path is reused as-is; the shim only has to translate between the legacy fastrpc_ioctl_capability layout and the shared qda_fastrpc_get_dsp_info() call. Signed-off-by: Ekansh Gupta <[email protected]> --- drivers/accel/qda/qda_fastrpc_shim.c | 20 ++++++++++++++++++++ drivers/accel/qda/qda_legacy_ops.c | 6 ++++++ drivers/accel/qda/qda_legacy_ops.h | 2 ++ 3 files changed, 28 insertions(+) diff --git a/drivers/accel/qda/qda_fastrpc_shim.c b/drivers/accel/qda/qda_fastrpc_shim.c index c1464b1adbc2..2be1dd116ef7 100644 --- a/drivers/accel/qda/qda_fastrpc_shim.c +++ b/drivers/accel/qda/qda_fastrpc_shim.c @@ -463,6 +463,24 @@ static long qda_shim_mem_unmap(struct qda_shim_file *sf, void __user *argp) return 0; } +static long qda_shim_get_dsp_info(struct qda_shim_file *sf, void __user *argp) +{ + struct fastrpc_ioctl_capability args; + int err; + + if (copy_from_user(&args, argp, sizeof(args))) + return -EFAULT; + + err = qda_legacy_ops_table.get_dsp_info(sf->session, args.attribute_id, &args.capability); + if (err) + return err; + + if (copy_to_user(argp, &args, sizeof(args))) + return -EFAULT; + + return 0; +} + static long qda_shim_invoke(struct qda_shim_file *sf, void __user *argp) { struct qda_legacy_invoke_arg *largs; @@ -550,6 +568,8 @@ static long qda_shim_dispatch(struct qda_shim_file *sf, unsigned int cmd, void _ return qda_shim_mem_unmap(sf, argp); case FASTRPC_IOCTL_INVOKE: return qda_shim_invoke(sf, argp); + case FASTRPC_IOCTL_GET_DSP_INFO: + return qda_shim_get_dsp_info(sf, argp); default: /* * Includes FASTRPC_IOCTL_FREE_DMA_BUFF, which the driver this diff --git a/drivers/accel/qda/qda_legacy_ops.c b/drivers/accel/qda/qda_legacy_ops.c index fc5e94c0c9bc..8d9d597c76c2 100644 --- a/drivers/accel/qda/qda_legacy_ops.c +++ b/drivers/accel/qda/qda_legacy_ops.c @@ -188,6 +188,11 @@ static int legacy_invoke(struct qda_session *session, u32 handle, u32 sc, return qda_fastrpc_invoke_legacy(session->qda_dev, session, handle, sc, args); } +static int legacy_get_dsp_info(struct qda_session *session, u32 attribute_id, u32 *capability) +{ + return qda_get_dsp_capability(session->qda_dev, session, attribute_id, capability); +} + const struct qda_legacy_ops qda_legacy_ops_table = { .session_create = legacy_session_create, .session_destroy = legacy_session_destroy, @@ -201,5 +206,6 @@ const struct qda_legacy_ops qda_legacy_ops_table = { .alloc_dmabuf = legacy_alloc_dmabuf, .import_dmabuf = legacy_import_dmabuf, .invoke = legacy_invoke, + .get_dsp_info = legacy_get_dsp_info, }; EXPORT_SYMBOL_FOR_MODULES(qda_legacy_ops_table, "qda_fastrpc_shim"); diff --git a/drivers/accel/qda/qda_legacy_ops.h b/drivers/accel/qda/qda_legacy_ops.h index 95a169edc594..c79003021fc1 100644 --- a/drivers/accel/qda/qda_legacy_ops.h +++ b/drivers/accel/qda/qda_legacy_ops.h @@ -57,6 +57,8 @@ struct qda_legacy_ops { /** @invoke: Run a method on the DSP; takes ownership of each @args[i].obj */ int (*invoke)(struct qda_session *session, u32 handle, u32 sc, struct qda_legacy_invoke_arg *args); + /** @get_dsp_info: Query a DSP capability attribute */ + int (*get_dsp_info)(struct qda_session *session, u32 attribute_id, u32 *capability); }; extern const struct qda_legacy_ops qda_legacy_ops_table; -- 2.34.1
