msm: ADSPRPC: Update unsigned pd support on cDSP from kernel
Query for unsigned pd support on cDSP domain and update
the unsigned_support flag during fastrpc_init process.
Change-Id: I61f4c748ad08155f418422183acc8473a7b0e0a8
Signed-off-by: vgattupa <vgattupa@codeaurora.org>
diff --git a/drivers/char/adsprpc.c b/drivers/char/adsprpc.c
index 2c32c4a..6554e71 100644
--- a/drivers/char/adsprpc.c
+++ b/drivers/char/adsprpc.c
@@ -3904,6 +3904,27 @@
return err;
}
+static int fastrpc_update_cdsp_support(struct fastrpc_file *fl)
+{
+ struct fastrpc_ioctl_dsp_capabilities *dsp_query;
+ struct fastrpc_apps *me = &gfa;
+ int err = 0;
+
+ VERIFY(err, NULL != (dsp_query = kzalloc(sizeof(*dsp_query),
+ GFP_KERNEL)));
+ if (err)
+ goto bail;
+ dsp_query->domain = CDSP_DOMAIN_ID;
+ err = fastrpc_get_info_from_kernel(dsp_query, fl);
+ if (err)
+ goto bail;
+ if (!(dsp_query->dsp_attributes[1]))
+ me->channel[CDSP_DOMAIN_ID].unsigned_support = false;
+bail:
+ kfree(dsp_query);
+ return err;
+}
+
static long fastrpc_device_ioctl(struct file *file, unsigned int ioctl_num,
unsigned long ioctl_param)
{
@@ -3927,6 +3948,7 @@
struct fastrpc_file *fl = (struct fastrpc_file *)file->private_data;
int size = 0, err = 0;
uint32_t info;
+ static bool isQueryDone;
VERIFY(err, fl != NULL);
if (err) {
@@ -4127,6 +4149,11 @@
VERIFY(err, 0 == (err = fastrpc_init_process(fl, &p.init)));
if (err)
goto bail;
+ if ((fl->cid == CDSP_DOMAIN_ID) && !isQueryDone) {
+ err = fastrpc_update_cdsp_support(fl);
+ if (!err)
+ isQueryDone = true;
+ }
break;
case FASTRPC_IOCTL_GET_DSP_INFO:
err = fastrpc_get_dsp_info(&p.dsp_cap, param, fl);