[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <28ddf35a-3e7a-4470-8305-c64a551fd8c7@kernel.org>
Date: Thu, 7 Aug 2025 09:58:34 +0200
From: Hans Verkuil <hverkuil+cisco@...nel.org>
To: Jacopo Mondi <jacopo.mondi@...asonboard.com>,
Mauro Carvalho Chehab <mchehab@...nel.org>, Devarsh Thakkar
<devarsht@...com>, Benoit Parrot <bparrot@...com>,
Hans Verkuil <hverkuil@...nel.org>, Mike Isely <isely@...ox.com>,
Laurent Pinchart <laurent.pinchart@...asonboard.com>,
Hans de Goede <hansg@...nel.org>,
Parthiban Veerasooran <parthiban.veerasooran@...rochip.com>,
Christian Gromm <christian.gromm@...rochip.com>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>, Alex Shi
<alexs@...nel.org>, Yanteng Si <si.yanteng@...ux.dev>,
Dongliang Mu <dzm91@...t.edu.cn>, Jonathan Corbet <corbet@....net>,
Tomasz Figa <tfiga@...omium.org>, Marek Szyprowski
<m.szyprowski@...sung.com>, Andy Walls <awalls@...metrocast.net>,
Michael Tretter <m.tretter@...gutronix.de>,
Pengutronix Kernel Team <kernel@...gutronix.de>,
Bin Liu <bin.liu@...iatek.com>, Matthias Brugger <matthias.bgg@...il.com>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@...labora.com>,
Dmitry Osipenko <digetx@...il.com>, Thierry Reding
<thierry.reding@...il.com>, Jonathan Hunter <jonathanh@...dia.com>,
Mirela Rabulea <mirela.rabulea@....com>, Shawn Guo <shawnguo@...nel.org>,
Sascha Hauer <s.hauer@...gutronix.de>, Fabio Estevam <festevam@...il.com>,
Kieran Bingham <kieran.bingham+renesas@...asonboard.com>,
Michal Simek <michal.simek@....com>, Ming Qian <ming.qian@....com>,
Zhou Peng <eagle.zhou@....com>, Xavier Roumegue
<xavier.roumegue@....nxp.com>, Philipp Zabel <p.zabel@...gutronix.de>,
Vikash Garodia <quic_vgarodia@...cinc.com>,
Dikshita Agarwal <quic_dikshita@...cinc.com>,
Abhinav Kumar <abhinav.kumar@...ux.dev>,
Bryan O'Donoghue <bryan.odonoghue@...aro.org>,
Sylwester Nawrocki <sylvester.nawrocki@...il.com>,
Jernej Skrabec <jernej.skrabec@...il.com>, Chen-Yu Tsai <wens@...e.org>,
Samuel Holland <samuel@...lland.org>,
Daniel Almeida <daniel.almeida@...labora.com>,
Neil Armstrong <neil.armstrong@...aro.org>,
Kevin Hilman <khilman@...libre.com>, Jerome Brunet <jbrunet@...libre.com>,
Martin Blumenstingl <martin.blumenstingl@...glemail.com>,
Nas Chung <nas.chung@...psnmedia.com>,
Jackson Lee <jackson.lee@...psnmedia.com>,
Minghsiu Tsai <minghsiu.tsai@...iatek.com>,
Houlong Wei <houlong.wei@...iatek.com>,
Andrew-CT Chen <andrew-ct.chen@...iatek.com>,
Tiffany Lin <tiffany.lin@...iatek.com>,
Yunfei Dong <yunfei.dong@...iatek.com>,
Geert Uytterhoeven <geert+renesas@...der.be>,
Magnus Damm <magnus.damm@...il.com>,
Mikhail Ulyanov <mikhail.ulyanov@...entembedded.com>,
Jacob Chen <jacob-chen@...wrt.com>,
Ezequiel Garcia <ezequiel@...guardiasur.com.ar>,
Heiko Stuebner <heiko@...ech.de>,
Detlev Casanova <detlev.casanova@...labora.com>,
Krzysztof Kozlowski <krzk@...nel.org>, Alim Akhtar
<alim.akhtar@...sung.com>, Sylwester Nawrocki <s.nawrocki@...sung.com>,
Łukasz Stelmach <l.stelmach@...sung.com>,
Andrzej Pietrasiewicz <andrzejtp2010@...il.com>,
Jacek Anaszewski <jacek.anaszewski@...il.com>,
Andrzej Hajda <andrzej.hajda@...el.com>,
Fabien Dessenne <fabien.dessenne@...s.st.com>,
Hugues Fruchet <hugues.fruchet@...s.st.com>,
Jean-Christophe Trotin <jean-christophe.trotin@...s.st.com>,
Maxime Coquelin <mcoquelin.stm32@...il.com>,
Alexandre Torgue <alexandre.torgue@...s.st.com>,
Nicolas Dufresne <nicolas.dufresne@...labora.com>,
Benjamin Gaignard <benjamin.gaignard@...labora.com>,
Steve Longerbeam <slongerbeam@...il.com>, Maxime Ripard
<mripard@...nel.org>, Paul Kocialkowski <paulk@...-base.io>,
Niklas Söderlund <niklas.soderlund@...natech.se>,
Robert Foss <rfoss@...nel.org>, Todor Tomov <todor.too@...il.com>,
Vladimir Zapolskiy <vladimir.zapolskiy@...aro.org>,
Corentin Labbe <clabbe@...libre.com>,
Sakari Ailus <sakari.ailus@...ux.intel.com>,
Bingbu Cao <bingbu.cao@...el.com>, Tianshu Qiu <tian.shu.qiu@...el.com>,
Stanislaw Gruszka <stanislaw.gruszka@...ux.intel.com>
Cc: linux-media@...r.kernel.org, linux-kernel@...r.kernel.org,
linux-staging@...ts.linux.dev, linux-doc@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org, linux-mediatek@...ts.infradead.org,
linux-tegra@...r.kernel.org, imx@...ts.linux.dev,
linux-renesas-soc@...r.kernel.org, linux-arm-msm@...r.kernel.org,
linux-samsung-soc@...r.kernel.org, linux-sunxi@...ts.linux.dev,
linux-usb@...r.kernel.org, linux-amlogic@...ts.infradead.org,
linux-rockchip@...ts.infradead.org,
linux-stm32@...md-mailman.stormreply.com, mjpeg-users@...ts.sourceforge.net
Subject: Re: [PATCH 65/65] media: v4l2-ioctl: Stop passing fh pointer to ioctl
handlers
On 07/08/2025 09:26, Hans Verkuil wrote:
> On 02/08/2025 11:23, Jacopo Mondi wrote:
>> From: Laurent Pinchart <laurent.pinchart@...asonboard.com>
>>
>> Now that all drivers access the v4l2_fh from the file structure, there
>> is no need to pass it as an explicit argument to ioctl handlers. Set the
>> argument to NULL in the w__video_do_ioctl(), and drop the name of the
>> void *fh argument in the ioctl handler declarations to indicate it is
>> not used.
>>
>> The argument could be removed altogether with a mechanical change
>> (probably using coccinelle), but there are plans to pass a new argument
>> to the ioctl handlers in the near future. The tree-wide change to remove
>> the argument, only to add another one soon after, would be too much
>> churn.
>>
>> Signed-off-by: Laurent Pinchart <laurent.pinchart@...asonboard.com>
>> Signed-off-by: Jacopo Mondi <jacopo.mondi@...asonboard.com>
>> ---
>> drivers/media/v4l2-core/v4l2-ioctl.c | 5 +-
>> include/media/v4l2-ioctl.h | 236 +++++++++++++++++------------------
>> 2 files changed, 120 insertions(+), 121 deletions(-)
>>
>> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
>> index 44c2f5ef3dae407d9786c5278d13efc982be2ff0..248a0b5b56ec7a09f2d4c61114f81aa5a9b8b041 100644
>> --- a/drivers/media/v4l2-core/v4l2-ioctl.c
>> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
>> @@ -3078,7 +3078,6 @@ static long __video_do_ioctl(struct file *file,
>> bool write_only = false;
>> struct v4l2_ioctl_info default_info;
>> const struct v4l2_ioctl_info *info;
>> - void *fh = file_to_v4l2_fh(file);
>> struct v4l2_fh *vfh = NULL;
>> int dev_debug = vfd->dev_debug;
>> long ret = -ENOTTY;
>> @@ -3140,11 +3139,11 @@ static long __video_do_ioctl(struct file *file,
>>
>> write_only = _IOC_DIR(cmd) == _IOC_WRITE;
>> if (info != &default_info) {
>> - ret = info->func(ops, file, fh, arg);
>> + ret = info->func(ops, file, NULL, arg);
>> } else if (!ops->vidioc_default) {
>> ret = -ENOTTY;
>> } else {
>> - ret = ops->vidioc_default(file, fh,
>> + ret = ops->vidioc_default(file, NULL,
>> vfh ? v4l2_prio_check(vfd->prio, vfh->prio) >= 0 : 0,
>> cmd, arg);
>> }
>
> drivers/media/v4l2-core/v4l2-compat-ioctl32.c also calls ops->vidioc_query_ext_ctrl
> directly, but still passes the fh as second argument: that needs to be replaced by
> a NULL pointer as well. That should be fixed in this patch as well.
>
> Regarding v4l2-ioctl.c: I would like a follow-up patch that pushes the NULL pointer
> down into each ioctl helper function. I.e. drop the 'void *fh' argument in the
> struct v4l2_ioctl_info 'func' callback, and all callbacks like v4l_g_fmt() just
> replace 'fh' by 'NULL' when they call the vidioc op.
>
> Part of it is that the core functions currently suggest that the second argument is
> a filehandle (since it's still named 'fh'), which is obviously wrong. And I also think
> that the core framework shouldn't use a dummy second argument at all. I admit that
> changing all vidioc callbacks in the whole subsystem to drop the second argument is
> too much churn, but for this core file I think it is something that should be done.
A follow-up on this: I would not be against a large patch that drops the second priv
argument from all vidioc ops since it is now unused. If nothing else, it helps ensure
that it is really unused by all drivers :-)
But if you don't want to go there, then there is something that I think need to be addressed:
a lot of drivers name the second argument 'fh' or '_fh' or even 'fh0'. Can we add a patch that
renames the second arg to 'priv'?
At minimum I think this should be done for drivers/media/test-drivers and
samples/v4l/v4l2-pci-skeleton.c. These drivers are often used as reference drivers,
so they should be up-to-date.
I would also suggest to do this for uvc since it is by far the most widely used media
driver.
I also see the use of 'fh' in v4l2-mem2mem.c in a few places.
Regards,
Hans
>
> Regards,
>
> Hans
>
>> diff --git a/include/media/v4l2-ioctl.h b/include/media/v4l2-ioctl.h
>> index 82695c3a300a73219f262fb556ed61a8f09d273e..223e2c7a3516fc96fb486ab64226163e52f775a6 100644
>> --- a/include/media/v4l2-ioctl.h
>> +++ b/include/media/v4l2-ioctl.h
>> @@ -293,144 +293,144 @@ struct v4l2_ioctl_ops {
>> /* ioctl callbacks */
>>
>> /* VIDIOC_QUERYCAP handler */
>> - int (*vidioc_querycap)(struct file *file, void *fh,
>> + int (*vidioc_querycap)(struct file *file, void *,
>> struct v4l2_capability *cap);
>>
>> /* VIDIOC_ENUM_FMT handlers */
>> - int (*vidioc_enum_fmt_vid_cap)(struct file *file, void *fh,
>> + int (*vidioc_enum_fmt_vid_cap)(struct file *file, void *,
>> struct v4l2_fmtdesc *f);
>> - int (*vidioc_enum_fmt_vid_overlay)(struct file *file, void *fh,
>> + int (*vidioc_enum_fmt_vid_overlay)(struct file *file, void *,
>> struct v4l2_fmtdesc *f);
>> - int (*vidioc_enum_fmt_vid_out)(struct file *file, void *fh,
>> + int (*vidioc_enum_fmt_vid_out)(struct file *file, void *,
>> struct v4l2_fmtdesc *f);
>> - int (*vidioc_enum_fmt_sdr_cap)(struct file *file, void *fh,
>> + int (*vidioc_enum_fmt_sdr_cap)(struct file *file, void *,
>> struct v4l2_fmtdesc *f);
>> - int (*vidioc_enum_fmt_sdr_out)(struct file *file, void *fh,
>> + int (*vidioc_enum_fmt_sdr_out)(struct file *file, void *,
>> struct v4l2_fmtdesc *f);
>> - int (*vidioc_enum_fmt_meta_cap)(struct file *file, void *fh,
>> + int (*vidioc_enum_fmt_meta_cap)(struct file *file, void *,
>> struct v4l2_fmtdesc *f);
>> - int (*vidioc_enum_fmt_meta_out)(struct file *file, void *fh,
>> + int (*vidioc_enum_fmt_meta_out)(struct file *file, void *,
>> struct v4l2_fmtdesc *f);
>>
>> /* VIDIOC_G_FMT handlers */
>> - int (*vidioc_g_fmt_vid_cap)(struct file *file, void *fh,
>> + int (*vidioc_g_fmt_vid_cap)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_g_fmt_vid_overlay)(struct file *file, void *fh,
>> + int (*vidioc_g_fmt_vid_overlay)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_g_fmt_vid_out)(struct file *file, void *fh,
>> + int (*vidioc_g_fmt_vid_out)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_g_fmt_vid_out_overlay)(struct file *file, void *fh,
>> + int (*vidioc_g_fmt_vid_out_overlay)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_g_fmt_vbi_cap)(struct file *file, void *fh,
>> + int (*vidioc_g_fmt_vbi_cap)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_g_fmt_vbi_out)(struct file *file, void *fh,
>> + int (*vidioc_g_fmt_vbi_out)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_g_fmt_sliced_vbi_cap)(struct file *file, void *fh,
>> + int (*vidioc_g_fmt_sliced_vbi_cap)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_g_fmt_sliced_vbi_out)(struct file *file, void *fh,
>> + int (*vidioc_g_fmt_sliced_vbi_out)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_g_fmt_vid_cap_mplane)(struct file *file, void *fh,
>> + int (*vidioc_g_fmt_vid_cap_mplane)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_g_fmt_vid_out_mplane)(struct file *file, void *fh,
>> + int (*vidioc_g_fmt_vid_out_mplane)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_g_fmt_sdr_cap)(struct file *file, void *fh,
>> + int (*vidioc_g_fmt_sdr_cap)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_g_fmt_sdr_out)(struct file *file, void *fh,
>> + int (*vidioc_g_fmt_sdr_out)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_g_fmt_meta_cap)(struct file *file, void *fh,
>> + int (*vidioc_g_fmt_meta_cap)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_g_fmt_meta_out)(struct file *file, void *fh,
>> + int (*vidioc_g_fmt_meta_out)(struct file *file, void *,
>> struct v4l2_format *f);
>>
>> /* VIDIOC_S_FMT handlers */
>> - int (*vidioc_s_fmt_vid_cap)(struct file *file, void *fh,
>> + int (*vidioc_s_fmt_vid_cap)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_s_fmt_vid_overlay)(struct file *file, void *fh,
>> + int (*vidioc_s_fmt_vid_overlay)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_s_fmt_vid_out)(struct file *file, void *fh,
>> + int (*vidioc_s_fmt_vid_out)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_s_fmt_vid_out_overlay)(struct file *file, void *fh,
>> + int (*vidioc_s_fmt_vid_out_overlay)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_s_fmt_vbi_cap)(struct file *file, void *fh,
>> + int (*vidioc_s_fmt_vbi_cap)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_s_fmt_vbi_out)(struct file *file, void *fh,
>> + int (*vidioc_s_fmt_vbi_out)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_s_fmt_sliced_vbi_cap)(struct file *file, void *fh,
>> + int (*vidioc_s_fmt_sliced_vbi_cap)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_s_fmt_sliced_vbi_out)(struct file *file, void *fh,
>> + int (*vidioc_s_fmt_sliced_vbi_out)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_s_fmt_vid_cap_mplane)(struct file *file, void *fh,
>> + int (*vidioc_s_fmt_vid_cap_mplane)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_s_fmt_vid_out_mplane)(struct file *file, void *fh,
>> + int (*vidioc_s_fmt_vid_out_mplane)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_s_fmt_sdr_cap)(struct file *file, void *fh,
>> + int (*vidioc_s_fmt_sdr_cap)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_s_fmt_sdr_out)(struct file *file, void *fh,
>> + int (*vidioc_s_fmt_sdr_out)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_s_fmt_meta_cap)(struct file *file, void *fh,
>> + int (*vidioc_s_fmt_meta_cap)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_s_fmt_meta_out)(struct file *file, void *fh,
>> + int (*vidioc_s_fmt_meta_out)(struct file *file, void *,
>> struct v4l2_format *f);
>>
>> /* VIDIOC_TRY_FMT handlers */
>> - int (*vidioc_try_fmt_vid_cap)(struct file *file, void *fh,
>> + int (*vidioc_try_fmt_vid_cap)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_try_fmt_vid_overlay)(struct file *file, void *fh,
>> + int (*vidioc_try_fmt_vid_overlay)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_try_fmt_vid_out)(struct file *file, void *fh,
>> + int (*vidioc_try_fmt_vid_out)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_try_fmt_vid_out_overlay)(struct file *file, void *fh,
>> + int (*vidioc_try_fmt_vid_out_overlay)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_try_fmt_vbi_cap)(struct file *file, void *fh,
>> + int (*vidioc_try_fmt_vbi_cap)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_try_fmt_vbi_out)(struct file *file, void *fh,
>> + int (*vidioc_try_fmt_vbi_out)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_try_fmt_sliced_vbi_cap)(struct file *file, void *fh,
>> + int (*vidioc_try_fmt_sliced_vbi_cap)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_try_fmt_sliced_vbi_out)(struct file *file, void *fh,
>> + int (*vidioc_try_fmt_sliced_vbi_out)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_try_fmt_vid_cap_mplane)(struct file *file, void *fh,
>> + int (*vidioc_try_fmt_vid_cap_mplane)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_try_fmt_vid_out_mplane)(struct file *file, void *fh,
>> + int (*vidioc_try_fmt_vid_out_mplane)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_try_fmt_sdr_cap)(struct file *file, void *fh,
>> + int (*vidioc_try_fmt_sdr_cap)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_try_fmt_sdr_out)(struct file *file, void *fh,
>> + int (*vidioc_try_fmt_sdr_out)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_try_fmt_meta_cap)(struct file *file, void *fh,
>> + int (*vidioc_try_fmt_meta_cap)(struct file *file, void *,
>> struct v4l2_format *f);
>> - int (*vidioc_try_fmt_meta_out)(struct file *file, void *fh,
>> + int (*vidioc_try_fmt_meta_out)(struct file *file, void *,
>> struct v4l2_format *f);
>>
>> /* Buffer handlers */
>> - int (*vidioc_reqbufs)(struct file *file, void *fh,
>> + int (*vidioc_reqbufs)(struct file *file, void *,
>> struct v4l2_requestbuffers *b);
>> - int (*vidioc_querybuf)(struct file *file, void *fh,
>> + int (*vidioc_querybuf)(struct file *file, void *,
>> struct v4l2_buffer *b);
>> - int (*vidioc_qbuf)(struct file *file, void *fh,
>> + int (*vidioc_qbuf)(struct file *file, void *,
>> struct v4l2_buffer *b);
>> - int (*vidioc_expbuf)(struct file *file, void *fh,
>> + int (*vidioc_expbuf)(struct file *file, void *,
>> struct v4l2_exportbuffer *e);
>> - int (*vidioc_dqbuf)(struct file *file, void *fh,
>> + int (*vidioc_dqbuf)(struct file *file, void *,
>> struct v4l2_buffer *b);
>>
>> - int (*vidioc_create_bufs)(struct file *file, void *fh,
>> + int (*vidioc_create_bufs)(struct file *file, void *,
>> struct v4l2_create_buffers *b);
>> - int (*vidioc_prepare_buf)(struct file *file, void *fh,
>> + int (*vidioc_prepare_buf)(struct file *file, void *,
>> struct v4l2_buffer *b);
>> - int (*vidioc_remove_bufs)(struct file *file, void *fh,
>> + int (*vidioc_remove_bufs)(struct file *file, void *,
>> struct v4l2_remove_buffers *d);
>>
>> - int (*vidioc_overlay)(struct file *file, void *fh, unsigned int i);
>> - int (*vidioc_g_fbuf)(struct file *file, void *fh,
>> + int (*vidioc_overlay)(struct file *file, void *, unsigned int i);
>> + int (*vidioc_g_fbuf)(struct file *file, void *,
>> struct v4l2_framebuffer *a);
>> - int (*vidioc_s_fbuf)(struct file *file, void *fh,
>> + int (*vidioc_s_fbuf)(struct file *file, void *,
>> const struct v4l2_framebuffer *a);
>>
>> /* Stream on/off */
>> - int (*vidioc_streamon)(struct file *file, void *fh,
>> + int (*vidioc_streamon)(struct file *file, void *,
>> enum v4l2_buf_type i);
>> - int (*vidioc_streamoff)(struct file *file, void *fh,
>> + int (*vidioc_streamoff)(struct file *file, void *,
>> enum v4l2_buf_type i);
>>
>> /*
>> @@ -438,135 +438,135 @@ struct v4l2_ioctl_ops {
>> *
>> * Note: ENUMSTD is handled by videodev.c
>> */
>> - int (*vidioc_g_std)(struct file *file, void *fh, v4l2_std_id *norm);
>> - int (*vidioc_s_std)(struct file *file, void *fh, v4l2_std_id norm);
>> - int (*vidioc_querystd)(struct file *file, void *fh, v4l2_std_id *a);
>> + int (*vidioc_g_std)(struct file *file, void *, v4l2_std_id *norm);
>> + int (*vidioc_s_std)(struct file *file, void *, v4l2_std_id norm);
>> + int (*vidioc_querystd)(struct file *file, void *, v4l2_std_id *a);
>>
>> /* Input handling */
>> - int (*vidioc_enum_input)(struct file *file, void *fh,
>> + int (*vidioc_enum_input)(struct file *file, void *,
>> struct v4l2_input *inp);
>> - int (*vidioc_g_input)(struct file *file, void *fh, unsigned int *i);
>> - int (*vidioc_s_input)(struct file *file, void *fh, unsigned int i);
>> + int (*vidioc_g_input)(struct file *file, void *, unsigned int *i);
>> + int (*vidioc_s_input)(struct file *file, void *, unsigned int i);
>>
>> /* Output handling */
>> - int (*vidioc_enum_output)(struct file *file, void *fh,
>> + int (*vidioc_enum_output)(struct file *file, void *,
>> struct v4l2_output *a);
>> - int (*vidioc_g_output)(struct file *file, void *fh, unsigned int *i);
>> - int (*vidioc_s_output)(struct file *file, void *fh, unsigned int i);
>> + int (*vidioc_g_output)(struct file *file, void *, unsigned int *i);
>> + int (*vidioc_s_output)(struct file *file, void *, unsigned int i);
>>
>> /* Control handling */
>> - int (*vidioc_query_ext_ctrl)(struct file *file, void *fh,
>> + int (*vidioc_query_ext_ctrl)(struct file *file, void *,
>> struct v4l2_query_ext_ctrl *a);
>> - int (*vidioc_g_ext_ctrls)(struct file *file, void *fh,
>> + int (*vidioc_g_ext_ctrls)(struct file *file, void *,
>> struct v4l2_ext_controls *a);
>> - int (*vidioc_s_ext_ctrls)(struct file *file, void *fh,
>> + int (*vidioc_s_ext_ctrls)(struct file *file, void *,
>> struct v4l2_ext_controls *a);
>> - int (*vidioc_try_ext_ctrls)(struct file *file, void *fh,
>> + int (*vidioc_try_ext_ctrls)(struct file *file, void *,
>> struct v4l2_ext_controls *a);
>> - int (*vidioc_querymenu)(struct file *file, void *fh,
>> + int (*vidioc_querymenu)(struct file *file, void *,
>> struct v4l2_querymenu *a);
>>
>> /* Audio ioctls */
>> - int (*vidioc_enumaudio)(struct file *file, void *fh,
>> + int (*vidioc_enumaudio)(struct file *file, void *,
>> struct v4l2_audio *a);
>> - int (*vidioc_g_audio)(struct file *file, void *fh,
>> + int (*vidioc_g_audio)(struct file *file, void *,
>> struct v4l2_audio *a);
>> - int (*vidioc_s_audio)(struct file *file, void *fh,
>> + int (*vidioc_s_audio)(struct file *file, void *,
>> const struct v4l2_audio *a);
>>
>> /* Audio out ioctls */
>> - int (*vidioc_enumaudout)(struct file *file, void *fh,
>> + int (*vidioc_enumaudout)(struct file *file, void *,
>> struct v4l2_audioout *a);
>> - int (*vidioc_g_audout)(struct file *file, void *fh,
>> + int (*vidioc_g_audout)(struct file *file, void *,
>> struct v4l2_audioout *a);
>> - int (*vidioc_s_audout)(struct file *file, void *fh,
>> + int (*vidioc_s_audout)(struct file *file, void *,
>> const struct v4l2_audioout *a);
>> - int (*vidioc_g_modulator)(struct file *file, void *fh,
>> + int (*vidioc_g_modulator)(struct file *file, void *,
>> struct v4l2_modulator *a);
>> - int (*vidioc_s_modulator)(struct file *file, void *fh,
>> + int (*vidioc_s_modulator)(struct file *file, void *,
>> const struct v4l2_modulator *a);
>> /* Crop ioctls */
>> - int (*vidioc_g_pixelaspect)(struct file *file, void *fh,
>> + int (*vidioc_g_pixelaspect)(struct file *file, void *,
>> int buf_type, struct v4l2_fract *aspect);
>> - int (*vidioc_g_selection)(struct file *file, void *fh,
>> + int (*vidioc_g_selection)(struct file *file, void *,
>> struct v4l2_selection *s);
>> - int (*vidioc_s_selection)(struct file *file, void *fh,
>> + int (*vidioc_s_selection)(struct file *file, void *,
>> struct v4l2_selection *s);
>> /* Compression ioctls */
>> - int (*vidioc_g_jpegcomp)(struct file *file, void *fh,
>> + int (*vidioc_g_jpegcomp)(struct file *file, void *,
>> struct v4l2_jpegcompression *a);
>> - int (*vidioc_s_jpegcomp)(struct file *file, void *fh,
>> + int (*vidioc_s_jpegcomp)(struct file *file, void *,
>> const struct v4l2_jpegcompression *a);
>> - int (*vidioc_g_enc_index)(struct file *file, void *fh,
>> + int (*vidioc_g_enc_index)(struct file *file, void *,
>> struct v4l2_enc_idx *a);
>> - int (*vidioc_encoder_cmd)(struct file *file, void *fh,
>> + int (*vidioc_encoder_cmd)(struct file *file, void *,
>> struct v4l2_encoder_cmd *a);
>> - int (*vidioc_try_encoder_cmd)(struct file *file, void *fh,
>> + int (*vidioc_try_encoder_cmd)(struct file *file, void *,
>> struct v4l2_encoder_cmd *a);
>> - int (*vidioc_decoder_cmd)(struct file *file, void *fh,
>> + int (*vidioc_decoder_cmd)(struct file *file, void *,
>> struct v4l2_decoder_cmd *a);
>> - int (*vidioc_try_decoder_cmd)(struct file *file, void *fh,
>> + int (*vidioc_try_decoder_cmd)(struct file *file, void *,
>> struct v4l2_decoder_cmd *a);
>>
>> /* Stream type-dependent parameter ioctls */
>> - int (*vidioc_g_parm)(struct file *file, void *fh,
>> + int (*vidioc_g_parm)(struct file *file, void *,
>> struct v4l2_streamparm *a);
>> - int (*vidioc_s_parm)(struct file *file, void *fh,
>> + int (*vidioc_s_parm)(struct file *file, void *,
>> struct v4l2_streamparm *a);
>>
>> /* Tuner ioctls */
>> - int (*vidioc_g_tuner)(struct file *file, void *fh,
>> + int (*vidioc_g_tuner)(struct file *file, void *,
>> struct v4l2_tuner *a);
>> - int (*vidioc_s_tuner)(struct file *file, void *fh,
>> + int (*vidioc_s_tuner)(struct file *file, void *,
>> const struct v4l2_tuner *a);
>> - int (*vidioc_g_frequency)(struct file *file, void *fh,
>> + int (*vidioc_g_frequency)(struct file *file, void *,
>> struct v4l2_frequency *a);
>> - int (*vidioc_s_frequency)(struct file *file, void *fh,
>> + int (*vidioc_s_frequency)(struct file *file, void *,
>> const struct v4l2_frequency *a);
>> - int (*vidioc_enum_freq_bands)(struct file *file, void *fh,
>> + int (*vidioc_enum_freq_bands)(struct file *file, void *,
>> struct v4l2_frequency_band *band);
>>
>> /* Sliced VBI cap */
>> - int (*vidioc_g_sliced_vbi_cap)(struct file *file, void *fh,
>> + int (*vidioc_g_sliced_vbi_cap)(struct file *file, void *,
>> struct v4l2_sliced_vbi_cap *a);
>>
>> /* Log status ioctl */
>> - int (*vidioc_log_status)(struct file *file, void *fh);
>> + int (*vidioc_log_status)(struct file *file, void *);
>>
>> - int (*vidioc_s_hw_freq_seek)(struct file *file, void *fh,
>> + int (*vidioc_s_hw_freq_seek)(struct file *file, void *,
>> const struct v4l2_hw_freq_seek *a);
>>
>> /* Debugging ioctls */
>> #ifdef CONFIG_VIDEO_ADV_DEBUG
>> - int (*vidioc_g_register)(struct file *file, void *fh,
>> + int (*vidioc_g_register)(struct file *file, void *,
>> struct v4l2_dbg_register *reg);
>> - int (*vidioc_s_register)(struct file *file, void *fh,
>> + int (*vidioc_s_register)(struct file *file, void *,
>> const struct v4l2_dbg_register *reg);
>>
>> - int (*vidioc_g_chip_info)(struct file *file, void *fh,
>> + int (*vidioc_g_chip_info)(struct file *file, void *,
>> struct v4l2_dbg_chip_info *chip);
>> #endif
>>
>> - int (*vidioc_enum_framesizes)(struct file *file, void *fh,
>> + int (*vidioc_enum_framesizes)(struct file *file, void *,
>> struct v4l2_frmsizeenum *fsize);
>>
>> - int (*vidioc_enum_frameintervals)(struct file *file, void *fh,
>> + int (*vidioc_enum_frameintervals)(struct file *file, void *,
>> struct v4l2_frmivalenum *fival);
>>
>> /* DV Timings IOCTLs */
>> - int (*vidioc_s_dv_timings)(struct file *file, void *fh,
>> + int (*vidioc_s_dv_timings)(struct file *file, void *,
>> struct v4l2_dv_timings *timings);
>> - int (*vidioc_g_dv_timings)(struct file *file, void *fh,
>> + int (*vidioc_g_dv_timings)(struct file *file, void *,
>> struct v4l2_dv_timings *timings);
>> - int (*vidioc_query_dv_timings)(struct file *file, void *fh,
>> + int (*vidioc_query_dv_timings)(struct file *file, void *,
>> struct v4l2_dv_timings *timings);
>> - int (*vidioc_enum_dv_timings)(struct file *file, void *fh,
>> + int (*vidioc_enum_dv_timings)(struct file *file, void *,
>> struct v4l2_enum_dv_timings *timings);
>> - int (*vidioc_dv_timings_cap)(struct file *file, void *fh,
>> + int (*vidioc_dv_timings_cap)(struct file *file, void *,
>> struct v4l2_dv_timings_cap *cap);
>> - int (*vidioc_g_edid)(struct file *file, void *fh,
>> + int (*vidioc_g_edid)(struct file *file, void *,
>> struct v4l2_edid *edid);
>> - int (*vidioc_s_edid)(struct file *file, void *fh,
>> + int (*vidioc_s_edid)(struct file *file, void *,
>> struct v4l2_edid *edid);
>>
>> int (*vidioc_subscribe_event)(struct v4l2_fh *fh,
>> @@ -575,7 +575,7 @@ struct v4l2_ioctl_ops {
>> const struct v4l2_event_subscription *sub);
>>
>> /* For other private ioctls */
>> - long (*vidioc_default)(struct file *file, void *fh,
>> + long (*vidioc_default)(struct file *file, void *,
>> bool valid_prio, unsigned int cmd, void *arg);
>> };
>>
>>
>
>
Powered by blists - more mailing lists