diff options
Diffstat (limited to 'drivers/staging/nmf-cm/cm_syscall.c')
-rw-r--r-- | drivers/staging/nmf-cm/cm_syscall.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/staging/nmf-cm/cm_syscall.c b/drivers/staging/nmf-cm/cm_syscall.c index ca8d664abb4..304b86ffee7 100644 --- a/drivers/staging/nmf-cm/cm_syscall.c +++ b/drivers/staging/nmf-cm/cm_syscall.c @@ -1115,6 +1115,33 @@ out: return 0; } + +inline int cmld_WriteComponentAttribute(struct cm_process_priv *procPriv, + CM_WriteComponentAttribute_t __user *param) +{ + CM_WriteComponentAttribute_t data; + char attrName[MAX_ATTRIBUTE_NAME_LENGTH]; + + /* Copy user input data in kernel space */ + if (copy_from_user(&data.in, ¶m->in, sizeof(data.in))) + return -EFAULT; + + if ((data.out.error = copy_string_from_user(attrName, + data.in.attrName, + sizeof(attrName)))) + goto out; + + data.out.error = CM_ENGINE_WriteComponentAttribute(data.in.component, + attrName, + data.in.value); +out: + /* Copy results back to userspace */ + if (copy_to_user(¶m->out, &data.out, sizeof(data.out))) + return -EFAULT; + return 0; +} + + inline int cmld_GetExecutiveEngineHandle(struct cm_process_priv *procPriv, CM_GetExecutiveEngineHandle_t __user *param) { |