From: Krzysztof Kozlowski <krzk@kernel.org>
To: Vikash Garodia <quic_vgarodia@quicinc.com>,
stanimir.k.varbanov@gmail.com, agross@kernel.org,
andersson@kernel.org, konrad.dybcio@linaro.org,
mchehab@kernel.org, hans.verkuil@cisco.com,
linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
linux-arm-msm@vger.kernel.org
Cc: quic_dikshita@quicinc.com
Subject: Re: [PATCH 03/33] iris: vidc: add v4l2 wrapper file
Date: Mon, 31 Jul 2023 23:23:04 +0200 [thread overview]
Message-ID: <aaf1aba2-a757-d9c8-77c9-182ed1aaed35@kernel.org> (raw)
In-Reply-To: <1690550624-14642-4-git-send-email-quic_vgarodia@quicinc.com>
On 28/07/2023 15:23, Vikash Garodia wrote:
> Here is the implementation of v4l2 wrapper functions for all
> v4l2 IOCTLs.
>
> Signed-off-by: Dikshita Agarwal <quic_dikshita@quicinc.com>
> Signed-off-by: Vikash Garodia <quic_vgarodia@quicinc.com>
> ---
> .../platform/qcom/iris/vidc/inc/msm_vidc_v4l2.h | 77 ++
> .../platform/qcom/iris/vidc/src/msm_vidc_v4l2.c | 953 +++++++++++++++++++++
> 2 files changed, 1030 insertions(+)
> create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/msm_vidc_v4l2.h
> create mode 100644 drivers/media/platform/qcom/iris/vidc/src/msm_vidc_v4l2.c
>
> diff --git a/drivers/media/platform/qcom/iris/vidc/inc/msm_vidc_v4l2.h b/drivers/media/platform/qcom/iris/vidc/inc/msm_vidc_v4l2.h
> new file mode 100644
> index 0000000..3766c9d
> --- /dev/null
> +++ b/drivers/media/platform/qcom/iris/vidc/inc/msm_vidc_v4l2.h
> @@ -0,0 +1,77 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +/*
> + * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
> + * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
> + */
> +
> +#ifndef _MSM_VIDC_V4L2_H_
> +#define _MSM_VIDC_V4L2_H_
> +
> +#include <linux/fs.h>
> +#include <linux/poll.h>
> +#include <media/v4l2-ctrls.h>
> +#include <media/v4l2-dev.h>
> +#include <media/v4l2-ioctl.h>
> +
> +int msm_v4l2_open(struct file *filp);
> +int msm_v4l2_close(struct file *filp);
> +int msm_v4l2_querycap(struct file *filp, void *fh,
> + struct v4l2_capability *cap);
> +int msm_v4l2_enum_fmt(struct file *file, void *fh,
> + struct v4l2_fmtdesc *f);
> +int msm_v4l2_try_fmt(struct file *file, void *fh,
> + struct v4l2_format *f);
> +int msm_v4l2_s_fmt(struct file *file, void *fh,
> + struct v4l2_format *f);
> +int msm_v4l2_g_fmt(struct file *file, void *fh,
> + struct v4l2_format *f);
> +int msm_v4l2_s_selection(struct file *file, void *fh,
> + struct v4l2_selection *s);
> +int msm_v4l2_g_selection(struct file *file, void *fh,
> + struct v4l2_selection *s);
> +int msm_v4l2_s_parm(struct file *file, void *fh,
> + struct v4l2_streamparm *a);
> +int msm_v4l2_g_parm(struct file *file, void *fh,
> + struct v4l2_streamparm *a);
> +int msm_v4l2_reqbufs(struct file *file, void *fh,
> + struct v4l2_requestbuffers *b);
> +int msm_v4l2_querybuf(struct file *file, void *fh,
> + struct v4l2_buffer *b);
> +int msm_v4l2_create_bufs(struct file *filp, void *fh,
> + struct v4l2_create_buffers *b);
> +int msm_v4l2_prepare_buf(struct file *filp, void *fh,
> + struct v4l2_buffer *b);
> +int msm_v4l2_qbuf(struct file *file, void *fh,
> + struct v4l2_buffer *b);
> +int msm_v4l2_dqbuf(struct file *file, void *fh,
> + struct v4l2_buffer *b);
> +int msm_v4l2_streamon(struct file *file, void *fh,
> + enum v4l2_buf_type i);
> +int msm_v4l2_streamoff(struct file *file, void *fh,
> + enum v4l2_buf_type i);
> +int msm_v4l2_subscribe_event(struct v4l2_fh *fh,
> + const struct v4l2_event_subscription *sub);
> +int msm_v4l2_unsubscribe_event(struct v4l2_fh *fh,
> + const struct v4l2_event_subscription *sub);
> +int msm_v4l2_try_decoder_cmd(struct file *file, void *fh,
> + struct v4l2_decoder_cmd *enc);
> +int msm_v4l2_decoder_cmd(struct file *file, void *fh,
> + struct v4l2_decoder_cmd *dec);
> +int msm_v4l2_try_encoder_cmd(struct file *file, void *fh,
> + struct v4l2_encoder_cmd *enc);
> +int msm_v4l2_encoder_cmd(struct file *file, void *fh,
> + struct v4l2_encoder_cmd *enc);
> +int msm_v4l2_enum_framesizes(struct file *file, void *fh,
> + struct v4l2_frmsizeenum *fsize);
> +int msm_v4l2_enum_frameintervals(struct file *file, void *fh,
> + struct v4l2_frmivalenum *fival);
> +int msm_v4l2_queryctrl(struct file *file, void *fh,
> + struct v4l2_queryctrl *ctrl);
> +int msm_v4l2_querymenu(struct file *file, void *fh,
> + struct v4l2_querymenu *qmenu);
> +unsigned int msm_v4l2_poll(struct file *filp,
> + struct poll_table_struct *pt);
> +void msm_v4l2_m2m_device_run(void *priv);
> +void msm_v4l2_m2m_job_abort(void *priv);
> +
> +#endif // _MSM_VIDC_V4L2_H_
> diff --git a/drivers/media/platform/qcom/iris/vidc/src/msm_vidc_v4l2.c b/drivers/media/platform/qcom/iris/vidc/src/msm_vidc_v4l2.c
> new file mode 100644
> index 0000000..6dfb18b
> --- /dev/null
> +++ b/drivers/media/platform/qcom/iris/vidc/src/msm_vidc_v4l2.c
> @@ -0,0 +1,953 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
> + * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
> + */
> +
> +#include "msm_vidc.h"
> +#include "msm_vidc_core.h"
> +#include "msm_vidc_debug.h"
> +#include "msm_vidc_driver.h"
> +#include "msm_vidc_inst.h"
> +#include "msm_vidc_internal.h"
> +#include "msm_vidc_v4l2.h"
> +
> +static struct msm_vidc_inst *get_vidc_inst(struct file *filp, void *fh)
> +{
> + if (!filp || !filp->private_data)
> + return NULL;
> + return container_of(filp->private_data,
> + struct msm_vidc_inst, fh);
> +}
> +
> +unsigned int msm_v4l2_poll(struct file *filp, struct poll_table_struct *pt)
> +{
> + int poll = 0;
> + struct msm_vidc_inst *inst = get_vidc_inst(filp, NULL);
> +
> + inst = get_inst_ref(g_core, inst);
> + if (!inst) {
> + d_vpr_e("%s: invalid instance\n", __func__);
This does not look like Linux coding style. Don't create your own
abstraction layer over Linux internal API. Use standard Linux functions
which will behave better and scale along with kernel development.
> + return POLLERR;
> + }
> + if (is_session_error(inst)) {
> + i_vpr_e(inst, "%s: inst in error state\n", __func__);
i_vpr_e is so obvious for every kernel developer... Please, no.
> + poll = POLLERR;
> + goto exit;
> + }
> +
> + poll = msm_vidc_poll((void *)inst, filp, pt);
> + if (poll)
> + goto exit;
> +
> +exit:
> + put_inst(inst);
> + return poll;
> +}
> +
> +int msm_v4l2_open(struct file *filp)
> +{
> + struct video_device *vdev = video_devdata(filp);
> + struct msm_video_device *vid_dev =
> + container_of(vdev, struct msm_video_device, vdev);
> + struct msm_vidc_core *core = video_drvdata(filp);
> + struct msm_vidc_inst *inst;
> +
> + inst = msm_vidc_open(core, vid_dev->type);
> + if (!inst) {
> + d_vpr_e("Failed to create instance, type = %d\n",
> + vid_dev->type);
> + return -ENOMEM;
> + }
> + filp->private_data = &inst->fh;
> + return 0;
> +}
> +
> +int msm_v4l2_close(struct file *filp)
> +{
> + int rc = 0;
> + struct msm_vidc_inst *inst;
> +
> + inst = get_vidc_inst(filp, NULL);
> + if (!inst) {
> + d_vpr_e("%s: invalid instance\n", __func__);
> + return -EINVAL;
> + }
> +
> + rc = msm_vidc_close(inst);
> + filp->private_data = NULL;
> + return rc;
> +}
> +
> +int msm_v4l2_querycap(struct file *filp, void *fh,
> + struct v4l2_capability *cap)
> +{
> + struct msm_vidc_inst *inst = get_vidc_inst(filp, fh);
> + int rc = 0;
> +
> + inst = get_inst_ref(g_core, inst);
> + if (!inst || !cap) {
> + d_vpr_e("%s: invalid instance\n", __func__);
> + return -EINVAL;
> + }
> +
> + client_lock(inst, __func__);
? So we don't know what's this? Mutex? Spinlock? Own reinvented lock?
> + inst_lock(inst, __func__);
Neither this?
No, don't create your own abstractions over standard API.
Best regards,
Krzysztof
next prev parent reply other threads:[~2023-07-31 21:23 UTC|newest]
Thread overview: 108+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-28 13:23 [PATCH 00/33] Qualcomm video decoder/encoder driver Vikash Garodia
2023-07-28 13:23 ` [PATCH 01/33] MAINTAINERS: Add Qualcomm Iris video accelerator driver Vikash Garodia
2023-07-28 22:48 ` Randy Dunlap
2023-08-14 18:44 ` Dikshita Agarwal
2023-08-16 12:00 ` Bryan O'Donoghue
2023-08-16 13:14 ` Dmitry Baryshkov
2023-07-28 13:23 ` [PATCH 02/33] iris: vidc: add core functions Vikash Garodia
2023-07-28 13:45 ` Konrad Dybcio
2023-08-14 18:49 ` Dikshita Agarwal
2023-07-28 13:47 ` Konrad Dybcio
2023-07-28 13:49 ` Dmitry Baryshkov
2023-08-14 18:58 ` Dikshita Agarwal
2023-08-14 21:03 ` Dmitry Baryshkov
2023-08-24 15:32 ` Vikash Garodia
2023-07-31 21:16 ` Krzysztof Kozlowski
2023-08-14 18:54 ` Dikshita Agarwal
2023-08-14 20:04 ` Krzysztof Kozlowski
2023-07-31 21:23 ` Krzysztof Kozlowski
2023-08-14 18:51 ` Dikshita Agarwal
2023-07-28 13:23 ` [PATCH 03/33] iris: vidc: add v4l2 wrapper file Vikash Garodia
2023-07-28 13:34 ` Dmitry Baryshkov
2023-08-14 18:59 ` Dikshita Agarwal
2023-08-14 21:19 ` Dmitry Baryshkov
2023-07-28 16:23 ` Bjorn Andersson
2023-07-28 17:50 ` Nicolas Dufresne
2023-08-14 19:14 ` Dikshita Agarwal
2023-07-31 21:23 ` Krzysztof Kozlowski [this message]
2023-08-14 19:00 ` Dikshita Agarwal
2023-07-28 13:23 ` [PATCH 04/33] iris: add vidc " Vikash Garodia
2023-07-28 13:23 ` [PATCH 05/33] iris: vidc: add vb2 ops Vikash Garodia
2023-07-28 18:03 ` Nicolas Dufresne
2023-08-14 19:03 ` Dikshita Agarwal
2023-07-28 13:23 ` [PATCH 06/33] iris: vidc: define video core and instance context Vikash Garodia
2023-07-28 15:47 ` Bryan O'Donoghue
2023-08-14 19:04 ` Dikshita Agarwal
2023-07-28 13:23 ` [PATCH 07/33] iris: iris: add video encoder files Vikash Garodia
2023-07-28 13:23 ` [PATCH 08/33] iris: vidc: add video decoder files Vikash Garodia
2023-07-28 17:21 ` Konrad Dybcio
2023-08-14 19:13 ` Dikshita Agarwal
2023-07-28 13:23 ` [PATCH 09/33] iris: vidc: add control files Vikash Garodia
2023-07-28 13:23 ` [PATCH 10/33] iris: vidc: add helper functions Vikash Garodia
2023-07-28 17:41 ` Konrad Dybcio
2023-08-14 19:15 ` Dikshita Agarwal
2023-08-16 11:46 ` Konrad Dybcio
2023-07-28 13:23 ` [PATCH 11/33] iris: vidc: add helpers for memory management Vikash Garodia
2023-07-28 16:28 ` Bjorn Andersson
2023-07-28 17:22 ` Konrad Dybcio
2023-08-14 19:06 ` Dikshita Agarwal
2023-08-25 18:38 ` Konrad Dybcio
2023-08-14 19:05 ` Dikshita Agarwal
2023-07-28 13:23 ` [PATCH 12/33] iris: vidc: add helper functions for resource management Vikash Garodia
2023-07-28 17:30 ` Konrad Dybcio
2023-08-14 19:07 ` Dikshita Agarwal
2023-07-28 13:23 ` [PATCH 13/33] iris: vidc: add helper functions for power management Vikash Garodia
2023-07-28 17:46 ` Konrad Dybcio
2023-08-14 19:10 ` Dikshita Agarwal
2023-07-28 13:23 ` [PATCH 14/33] iris: vidc: add helpers for state management Vikash Garodia
2023-07-28 17:52 ` Konrad Dybcio
2023-08-14 19:17 ` Dikshita Agarwal
2023-07-28 13:23 ` [PATCH 15/33] iris: add vidc buffer files Vikash Garodia
2023-07-28 13:23 ` [PATCH 16/33] iris: add helpers for media format Vikash Garodia
2023-07-28 17:55 ` Konrad Dybcio
2023-08-14 19:18 ` Dikshita Agarwal
2023-07-28 13:23 ` [PATCH 17/33] iris: vidc: define various structures and enum Vikash Garodia
2023-07-28 13:23 ` [PATCH 18/33] iris: vidc: hfi: add Host Firmware Interface (HFI) Vikash Garodia
2023-07-28 15:58 ` Bryan O'Donoghue
2023-08-14 19:11 ` Dikshita Agarwal
2023-07-31 9:02 ` Bryan O'Donoghue
2023-08-14 19:11 ` Dikshita Agarwal
2023-07-28 13:23 ` [PATCH 19/33] iris: vidc: hfi: add Host Firmware Interface (HFI) response handling Vikash Garodia
2023-07-28 13:23 ` [PATCH 20/33] iris: vidc: hfi: add helpers for handling shared queues Vikash Garodia
2023-07-28 17:58 ` Konrad Dybcio
2023-08-14 19:19 ` Dikshita Agarwal
2023-07-28 13:23 ` [PATCH 21/33] iris: vidc: hfi: Add packetization layer Vikash Garodia
2023-07-28 13:23 ` [PATCH 22/33] iris: vidc: hfi: defines HFI properties and enums Vikash Garodia
2023-07-28 13:23 ` [PATCH 23/33] iris: vidc: add PIL functionality for video firmware Vikash Garodia
2023-07-28 13:23 ` [PATCH 24/33] iris: vidc: add debug files Vikash Garodia
2023-07-31 21:31 ` Krzysztof Kozlowski
2023-08-14 19:12 ` Dikshita Agarwal
2023-07-28 13:23 ` [PATCH 25/33] iris: platform: add platform files Vikash Garodia
2023-07-28 13:23 ` [PATCH 26/33] iris: platform: sm8550: add capability file for sm8550 Vikash Garodia
2023-07-28 14:13 ` Dmitry Baryshkov
2023-08-14 19:35 ` Dikshita Agarwal
2023-08-14 21:17 ` Dmitry Baryshkov
2023-07-28 13:23 ` [PATCH 27/33] iris: variant: add helper functions for register handling Vikash Garodia
2023-07-28 13:23 ` [PATCH 28/33] iris: variant: iris3: add iris3 specific ops Vikash Garodia
2023-07-28 13:23 ` [PATCH 29/33] iris: variant: iris3: add helpers for buffer size calculations Vikash Garodia
2023-07-28 14:19 ` Dmitry Baryshkov
2023-08-14 20:00 ` Dikshita Agarwal
2023-08-14 20:59 ` Dmitry Baryshkov
2023-07-28 13:23 ` [PATCH 30/33] iris: variant: iris3: add helper for bus and clock calculation Vikash Garodia
2023-07-28 13:23 ` [PATCH 31/33] iris: variant: iris: implement the logic to compute bus bandwidth Vikash Garodia
2023-07-28 18:09 ` Konrad Dybcio
2023-08-14 19:21 ` Dikshita Agarwal
2023-07-28 13:23 ` [PATCH 32/33] iris: variant: iris3: implement logic to compute clock frequency Vikash Garodia
2023-07-28 18:13 ` Konrad Dybcio
2023-08-14 19:25 ` Dikshita Agarwal
2023-07-28 13:23 ` [PATCH 33/33] iris: enable building of iris video driver Vikash Garodia
2023-07-28 14:40 ` Dmitry Baryshkov
2023-07-28 15:25 ` Bryan O'Donoghue
2023-07-28 15:51 ` Dmitry Baryshkov
2023-07-28 13:32 ` [PATCH 00/33] Qualcomm video decoder/encoder driver Dmitry Baryshkov
2023-07-28 17:38 ` Nicolas Dufresne
2023-07-28 14:01 ` Dmitry Baryshkov
2023-08-14 12:58 ` Stanimir Varbanov
2023-08-14 15:00 ` Dmitry Baryshkov
2023-08-24 15:23 ` Vikash Garodia
2023-07-28 14:34 ` Bryan O'Donoghue
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aaf1aba2-a757-d9c8-77c9-182ed1aaed35@kernel.org \
--to=krzk@kernel.org \
--cc=agross@kernel.org \
--cc=andersson@kernel.org \
--cc=hans.verkuil@cisco.com \
--cc=konrad.dybcio@linaro.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=quic_dikshita@quicinc.com \
--cc=quic_vgarodia@quicinc.com \
--cc=stanimir.k.varbanov@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox