Loading drivers/media/platform/msm/vidc/Makefile +1 −0 Original line number Diff line number Diff line ccflags-y += -I$(srctree)/drivers/media/platform/msm/vidc/ msm-vidc-objs := msm_v4l2_vidc.o \ msm_v4l2_private.o \ msm_vidc_platform.o \ msm_vidc_common.o \ msm_vidc.o \ Loading drivers/media/platform/msm/vidc/msm_v4l2_private.c 0 → 100644 +88 −0 Original line number Diff line number Diff line /* Copyright (c) 2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and * only version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "msm_v4l2_private.h" static int convert_from_user(struct msm_vidc_arg *kp, unsigned long arg) { int rc = 0; struct msm_vidc_arg __user *up = compat_ptr(arg); if (get_user(kp->type, &up->type)) return -EFAULT; switch (kp->type) { default: dprintk(VIDC_ERR, "%s: unknown cmd type 0x%x\n", __func__, kp->type); rc = -EINVAL; break; } return rc; } static int convert_to_user(struct msm_vidc_arg *kp, unsigned long arg) { int rc = 0; struct msm_vidc_arg __user *up = compat_ptr(arg); if (put_user(kp->type, &up->type)) return -EFAULT; switch (kp->type) { default: dprintk(VIDC_ERR, "%s: unknown cmd type 0x%x\n", __func__, kp->type); rc = -EINVAL; break; } return rc; } long msm_v4l2_private(struct file *filp, unsigned int cmd, unsigned long arg) { int rc; struct msm_vidc_inst *inst; struct msm_vidc_arg karg; if (!filp || !filp->private_data) { dprintk(VIDC_ERR, "%s: invalid params\n", __func__); return -EINVAL; } inst = container_of(filp->private_data, struct msm_vidc_inst, event_handler); memset(&karg, 0, sizeof(struct msm_vidc_arg)); /* * the arg points to user space memory and needs * to be converted to kernel space before using it. * Check do_video_ioctl() for more details. */ if (convert_from_user(&karg, arg)) return -EFAULT; rc = msm_vidc_private((void *)inst, cmd, &karg); if (rc) { dprintk(VIDC_ERR, "%s: failed cmd type %x\n", __func__, karg.type); return -EINVAL; } if (convert_to_user(&karg, arg)) return -EFAULT; return rc; } drivers/media/platform/msm/vidc/msm_v4l2_private.h 0 → 100644 +22 −0 Original line number Diff line number Diff line /* Copyright (c) 2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and * only version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #ifndef _MSM_V4L2_PRIVATE_H_ #define _MSM_V4L2_PRIVATE_H_ #include <media/msm_vidc_private.h> #include "msm_vidc_debug.h" long msm_v4l2_private(struct file *file, unsigned int cmd, unsigned long arg); #endif drivers/media/platform/msm/vidc/msm_v4l2_vidc.c +2 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ #include "msm_vidc_resources.h" #include "venus_boot.h" #include "vidc_hfi_api.h" #include "msm_v4l2_private.h" #define BASE_DEVICE_NUMBER 32 Loading Loading @@ -292,6 +293,7 @@ static const struct v4l2_file_operations msm_v4l2_vidc_fops = { .open = msm_v4l2_open, .release = msm_v4l2_close, .unlocked_ioctl = video_ioctl2, .compat_ioctl32 = msm_v4l2_private, .poll = msm_v4l2_poll, }; Loading drivers/media/platform/msm/vidc/msm_vidc.c +15 −0 Original line number Diff line number Diff line Loading @@ -1291,6 +1291,21 @@ int msm_vidc_dqevent(void *inst, struct v4l2_event *event) } EXPORT_SYMBOL(msm_vidc_dqevent); int msm_vidc_private(void *vidc_inst, unsigned int cmd, struct msm_vidc_arg *arg) { int rc = 0; struct msm_vidc_inst *inst = (struct msm_vidc_inst *)vidc_inst; if (!inst || !arg) { dprintk(VIDC_ERR, "%s: invalid args\n", __func__); return -EINVAL; } return rc; } EXPORT_SYMBOL(msm_vidc_private); static bool msm_vidc_check_for_inst_overload(struct msm_vidc_core *core) { u32 instance_count = 0; Loading Loading
drivers/media/platform/msm/vidc/Makefile +1 −0 Original line number Diff line number Diff line ccflags-y += -I$(srctree)/drivers/media/platform/msm/vidc/ msm-vidc-objs := msm_v4l2_vidc.o \ msm_v4l2_private.o \ msm_vidc_platform.o \ msm_vidc_common.o \ msm_vidc.o \ Loading
drivers/media/platform/msm/vidc/msm_v4l2_private.c 0 → 100644 +88 −0 Original line number Diff line number Diff line /* Copyright (c) 2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and * only version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "msm_v4l2_private.h" static int convert_from_user(struct msm_vidc_arg *kp, unsigned long arg) { int rc = 0; struct msm_vidc_arg __user *up = compat_ptr(arg); if (get_user(kp->type, &up->type)) return -EFAULT; switch (kp->type) { default: dprintk(VIDC_ERR, "%s: unknown cmd type 0x%x\n", __func__, kp->type); rc = -EINVAL; break; } return rc; } static int convert_to_user(struct msm_vidc_arg *kp, unsigned long arg) { int rc = 0; struct msm_vidc_arg __user *up = compat_ptr(arg); if (put_user(kp->type, &up->type)) return -EFAULT; switch (kp->type) { default: dprintk(VIDC_ERR, "%s: unknown cmd type 0x%x\n", __func__, kp->type); rc = -EINVAL; break; } return rc; } long msm_v4l2_private(struct file *filp, unsigned int cmd, unsigned long arg) { int rc; struct msm_vidc_inst *inst; struct msm_vidc_arg karg; if (!filp || !filp->private_data) { dprintk(VIDC_ERR, "%s: invalid params\n", __func__); return -EINVAL; } inst = container_of(filp->private_data, struct msm_vidc_inst, event_handler); memset(&karg, 0, sizeof(struct msm_vidc_arg)); /* * the arg points to user space memory and needs * to be converted to kernel space before using it. * Check do_video_ioctl() for more details. */ if (convert_from_user(&karg, arg)) return -EFAULT; rc = msm_vidc_private((void *)inst, cmd, &karg); if (rc) { dprintk(VIDC_ERR, "%s: failed cmd type %x\n", __func__, karg.type); return -EINVAL; } if (convert_to_user(&karg, arg)) return -EFAULT; return rc; }
drivers/media/platform/msm/vidc/msm_v4l2_private.h 0 → 100644 +22 −0 Original line number Diff line number Diff line /* Copyright (c) 2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and * only version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #ifndef _MSM_V4L2_PRIVATE_H_ #define _MSM_V4L2_PRIVATE_H_ #include <media/msm_vidc_private.h> #include "msm_vidc_debug.h" long msm_v4l2_private(struct file *file, unsigned int cmd, unsigned long arg); #endif
drivers/media/platform/msm/vidc/msm_v4l2_vidc.c +2 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ #include "msm_vidc_resources.h" #include "venus_boot.h" #include "vidc_hfi_api.h" #include "msm_v4l2_private.h" #define BASE_DEVICE_NUMBER 32 Loading Loading @@ -292,6 +293,7 @@ static const struct v4l2_file_operations msm_v4l2_vidc_fops = { .open = msm_v4l2_open, .release = msm_v4l2_close, .unlocked_ioctl = video_ioctl2, .compat_ioctl32 = msm_v4l2_private, .poll = msm_v4l2_poll, }; Loading
drivers/media/platform/msm/vidc/msm_vidc.c +15 −0 Original line number Diff line number Diff line Loading @@ -1291,6 +1291,21 @@ int msm_vidc_dqevent(void *inst, struct v4l2_event *event) } EXPORT_SYMBOL(msm_vidc_dqevent); int msm_vidc_private(void *vidc_inst, unsigned int cmd, struct msm_vidc_arg *arg) { int rc = 0; struct msm_vidc_inst *inst = (struct msm_vidc_inst *)vidc_inst; if (!inst || !arg) { dprintk(VIDC_ERR, "%s: invalid args\n", __func__); return -EINVAL; } return rc; } EXPORT_SYMBOL(msm_vidc_private); static bool msm_vidc_check_for_inst_overload(struct msm_vidc_core *core) { u32 instance_count = 0; Loading