| Message ID | 20251007-v4l2-params-v5-2-8db451a81398@ideasonboard.com |
|---|---|
| State | Superseded |
| Headers | show |
| Series |
|
| Related | show |
Quoting Jacopo Mondi (2025-10-07 19:17:44) > Import the v4l2-isp.h header from the Linux kernel sources. > > The file has not been merged in mainline Linux yet but is available > at v6: > https://lore.kernel.org/all/20251007-extensible-parameters-validation-v6-1-5f719d9f39e5@ideasonboard.com > > Create the include/linux/media/ directory so that header files > exported from the kernel which include this file do not need > to be adjusted when imported in libcamera. > > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > Tested-by: Antoine Bouyer <antoine.bouyer@nxp.com> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > include/linux/media/v4l2-isp.h | 82 ++++++++++++++++++++++++++++++++++++++++++ > utils/update-kernel-headers.sh | 1 + > 2 files changed, 83 insertions(+) > > diff --git a/include/linux/media/v4l2-isp.h b/include/linux/media/v4l2-isp.h > new file mode 100644 > index 0000000000000000000000000000000000000000..49b451e30d88cce7d15ab40e6a3d533c7bb7a12c > --- /dev/null > +++ b/include/linux/media/v4l2-isp.h > @@ -0,0 +1,82 @@ > +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ > +/* > + * Video4Linux2 generic ISP parameters and statistics support > + * > + * Copyright (C) 2025 Ideas On Board Oy > + * Author: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > + */ > + > +#ifndef _V4L2_ISP_H_ > +#define _V4L2_ISP_H_ > + > +#include <linux/stddef.h> > +#include <linux/types.h> > + > +#define V4L2_ISP_PARAMS_FL_BLOCK_DISABLE (1U << 0) > +#define V4L2_ISP_PARAMS_FL_BLOCK_ENABLE (1U << 1) > + > +/* > + * Reserve the first 8 bits for V4L2_ISP_PARAMS_FL_* flag. > + * > + * Driver-specific flags should be defined as: > + * #define DRIVER_SPECIFIC_FLAG0 ((1U << V4L2_ISP_PARAMS_FL_DRIVER_FLAGS(0)) > + * #define DRIVER_SPECIFIC_FLAG1 ((1U << V4L2_ISP_PARAMS_FL_DRIVER_FLAGS(1)) > + */ > +#define V4L2_ISP_PARAMS_FL_DRIVER_FLAGS(n) ((n) + 8) > + > +/** > + * struct v4l2_isp_params_block_header - V4L2 extensible parameters block header > + * @type: The parameters block type (driver-specific) > + * @flags: A bitmask of block flags (driver-specific) > + * @size: Size (in bytes) of the parameters block, including this header > + * > + * This structure represents the common part of all the ISP configuration > + * blocks. Each parameters block shall embed an instance of this structure type > + * as its first member, followed by the block-specific configuration data. > + * > + * The @type field is an ISP driver-specific value that identifies the block > + * type. The @size field specifies the size of the parameters block. > + * > + * The @flags field is a bitmask of per-block flags V4L2_PARAMS_ISP_FL_* and > + * driver-specific flags specified by the driver header. > + */ > +struct v4l2_isp_params_block_header { > + __u16 type; > + __u16 flags; > + __u32 size; > +} __attribute__((aligned(8))); > + > +/** > + * struct v4l2_isp_params_buffer - V4L2 extensible parameters configuration > + * @version: The parameters buffer version (driver-specific) > + * @data_size: The configuration data effective size, excluding this header > + * @data: The configuration data > + * > + * This structure contains the configuration parameters of the ISP algorithms, > + * serialized by userspace into a data buffer. Each configuration parameter > + * block is represented by a block-specific structure which contains a > + * :c:type:`v4l2_isp_params_block_header` entry as first member. Userspace > + * populates the @data buffer with configuration parameters for the blocks that > + * it intends to configure. As a consequence, the data buffer effective size > + * changes according to the number of ISP blocks that userspace intends to > + * configure and is set by userspace in the @data_size field. > + * > + * The parameters buffer is versioned by the @version field to allow modifying > + * and extending its definition. Userspace shall populate the @version field to > + * inform the driver about the version it intends to use. The driver will parse > + * and handle the @data buffer according to the data layout specific to the > + * indicated version and return an error if the desired version is not > + * supported. > + * > + * For each ISP block that userspace wants to configure, a block-specific > + * structure is appended to the @data buffer, one after the other without gaps > + * in between. Userspace shall populate the @data_size field with the effective > + * size, in bytes, of the @data buffer. > + */ > +struct v4l2_isp_params_buffer { > + __u32 version; > + __u32 data_size; > + __u8 data[] __counted_by(data_size); > +}; > + > +#endif /* _V4L2_ISP_H_ */ > diff --git a/utils/update-kernel-headers.sh b/utils/update-kernel-headers.sh > index 666624f9972ea61067e5b5695237ab7a17c61664..857601df8766c6493e51b62f0f9ca551d7efbd4a 100755 > --- a/utils/update-kernel-headers.sh > +++ b/utils/update-kernel-headers.sh > @@ -56,6 +56,7 @@ headers=" > linux/udmabuf.h > linux/v4l2-common.h > linux/v4l2-controls.h > + linux/v4l2-isp.h How come this isn't linux/media/v4l2-isp.h ? > linux/v4l2-mediabus.h > linux/v4l2-subdev.h > linux/videodev2.h > > -- > 2.51.0 >
Hi Kieran On Wed, Oct 08, 2025 at 10:06:01AM +0100, Kieran Bingham wrote: > Quoting Jacopo Mondi (2025-10-07 19:17:44) > > Import the v4l2-isp.h header from the Linux kernel sources. > > > > The file has not been merged in mainline Linux yet but is available > > at v6: > > https://lore.kernel.org/all/20251007-extensible-parameters-validation-v6-1-5f719d9f39e5@ideasonboard.com > > > > Create the include/linux/media/ directory so that header files > > exported from the kernel which include this file do not need > > to be adjusted when imported in libcamera. > > > > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > > Tested-by: Antoine Bouyer <antoine.bouyer@nxp.com> > > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > --- > > include/linux/media/v4l2-isp.h | 82 ++++++++++++++++++++++++++++++++++++++++++ > > utils/update-kernel-headers.sh | 1 + > > 2 files changed, 83 insertions(+) > > > > diff --git a/include/linux/media/v4l2-isp.h b/include/linux/media/v4l2-isp.h > > new file mode 100644 > > index 0000000000000000000000000000000000000000..49b451e30d88cce7d15ab40e6a3d533c7bb7a12c > > --- /dev/null > > +++ b/include/linux/media/v4l2-isp.h > > @@ -0,0 +1,82 @@ > > +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ > > +/* > > + * Video4Linux2 generic ISP parameters and statistics support > > + * > > + * Copyright (C) 2025 Ideas On Board Oy > > + * Author: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > > + */ > > + > > +#ifndef _V4L2_ISP_H_ > > +#define _V4L2_ISP_H_ > > + > > +#include <linux/stddef.h> > > +#include <linux/types.h> > > + > > +#define V4L2_ISP_PARAMS_FL_BLOCK_DISABLE (1U << 0) > > +#define V4L2_ISP_PARAMS_FL_BLOCK_ENABLE (1U << 1) > > + > > +/* > > + * Reserve the first 8 bits for V4L2_ISP_PARAMS_FL_* flag. > > + * > > + * Driver-specific flags should be defined as: > > + * #define DRIVER_SPECIFIC_FLAG0 ((1U << V4L2_ISP_PARAMS_FL_DRIVER_FLAGS(0)) > > + * #define DRIVER_SPECIFIC_FLAG1 ((1U << V4L2_ISP_PARAMS_FL_DRIVER_FLAGS(1)) > > + */ > > +#define V4L2_ISP_PARAMS_FL_DRIVER_FLAGS(n) ((n) + 8) > > + > > +/** > > + * struct v4l2_isp_params_block_header - V4L2 extensible parameters block header > > + * @type: The parameters block type (driver-specific) > > + * @flags: A bitmask of block flags (driver-specific) > > + * @size: Size (in bytes) of the parameters block, including this header > > + * > > + * This structure represents the common part of all the ISP configuration > > + * blocks. Each parameters block shall embed an instance of this structure type > > + * as its first member, followed by the block-specific configuration data. > > + * > > + * The @type field is an ISP driver-specific value that identifies the block > > + * type. The @size field specifies the size of the parameters block. > > + * > > + * The @flags field is a bitmask of per-block flags V4L2_PARAMS_ISP_FL_* and > > + * driver-specific flags specified by the driver header. > > + */ > > +struct v4l2_isp_params_block_header { > > + __u16 type; > > + __u16 flags; > > + __u32 size; > > +} __attribute__((aligned(8))); > > + > > +/** > > + * struct v4l2_isp_params_buffer - V4L2 extensible parameters configuration > > + * @version: The parameters buffer version (driver-specific) > > + * @data_size: The configuration data effective size, excluding this header > > + * @data: The configuration data > > + * > > + * This structure contains the configuration parameters of the ISP algorithms, > > + * serialized by userspace into a data buffer. Each configuration parameter > > + * block is represented by a block-specific structure which contains a > > + * :c:type:`v4l2_isp_params_block_header` entry as first member. Userspace > > + * populates the @data buffer with configuration parameters for the blocks that > > + * it intends to configure. As a consequence, the data buffer effective size > > + * changes according to the number of ISP blocks that userspace intends to > > + * configure and is set by userspace in the @data_size field. > > + * > > + * The parameters buffer is versioned by the @version field to allow modifying > > + * and extending its definition. Userspace shall populate the @version field to > > + * inform the driver about the version it intends to use. The driver will parse > > + * and handle the @data buffer according to the data layout specific to the > > + * indicated version and return an error if the desired version is not > > + * supported. > > + * > > + * For each ISP block that userspace wants to configure, a block-specific > > + * structure is appended to the @data buffer, one after the other without gaps > > + * in between. Userspace shall populate the @data_size field with the effective > > + * size, in bytes, of the @data buffer. > > + */ > > +struct v4l2_isp_params_buffer { > > + __u32 version; > > + __u32 data_size; > > + __u8 data[] __counted_by(data_size); > > +}; > > + > > +#endif /* _V4L2_ISP_H_ */ > > diff --git a/utils/update-kernel-headers.sh b/utils/update-kernel-headers.sh > > index 666624f9972ea61067e5b5695237ab7a17c61664..857601df8766c6493e51b62f0f9ca551d7efbd4a 100755 > > --- a/utils/update-kernel-headers.sh > > +++ b/utils/update-kernel-headers.sh > > @@ -56,6 +56,7 @@ headers=" > > linux/udmabuf.h > > linux/v4l2-common.h > > linux/v4l2-controls.h > > + linux/v4l2-isp.h > > How come this isn't linux/media/v4l2-isp.h ? > Because I moved the file back and forth from include/linux/ and include/linux/media/ and forgot to update this. Good catch, I'll fix! > > linux/v4l2-mediabus.h > > linux/v4l2-subdev.h > > linux/videodev2.h > > > > -- > > 2.51.0 > >
Quoting Jacopo Mondi (2025-10-08 11:02:16) > Hi Kieran > > On Wed, Oct 08, 2025 at 10:06:01AM +0100, Kieran Bingham wrote: > > Quoting Jacopo Mondi (2025-10-07 19:17:44) > > > Import the v4l2-isp.h header from the Linux kernel sources. > > > > > > The file has not been merged in mainline Linux yet but is available > > > at v6: > > > https://lore.kernel.org/all/20251007-extensible-parameters-validation-v6-1-5f719d9f39e5@ideasonboard.com > > > > > > Create the include/linux/media/ directory so that header files > > > exported from the kernel which include this file do not need > > > to be adjusted when imported in libcamera. > > > > > > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > > > Tested-by: Antoine Bouyer <antoine.bouyer@nxp.com> > > > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > > --- > > > include/linux/media/v4l2-isp.h | 82 ++++++++++++++++++++++++++++++++++++++++++ > > > utils/update-kernel-headers.sh | 1 + > > > 2 files changed, 83 insertions(+) > > > > > > diff --git a/include/linux/media/v4l2-isp.h b/include/linux/media/v4l2-isp.h > > > new file mode 100644 > > > index 0000000000000000000000000000000000000000..49b451e30d88cce7d15ab40e6a3d533c7bb7a12c > > > --- /dev/null > > > +++ b/include/linux/media/v4l2-isp.h > > > @@ -0,0 +1,82 @@ > > > +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ > > > +/* > > > + * Video4Linux2 generic ISP parameters and statistics support > > > + * > > > + * Copyright (C) 2025 Ideas On Board Oy > > > + * Author: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > > > + */ > > > + > > > +#ifndef _V4L2_ISP_H_ > > > +#define _V4L2_ISP_H_ > > > + > > > +#include <linux/stddef.h> > > > +#include <linux/types.h> > > > + > > > +#define V4L2_ISP_PARAMS_FL_BLOCK_DISABLE (1U << 0) > > > +#define V4L2_ISP_PARAMS_FL_BLOCK_ENABLE (1U << 1) > > > + > > > +/* > > > + * Reserve the first 8 bits for V4L2_ISP_PARAMS_FL_* flag. > > > + * > > > + * Driver-specific flags should be defined as: > > > + * #define DRIVER_SPECIFIC_FLAG0 ((1U << V4L2_ISP_PARAMS_FL_DRIVER_FLAGS(0)) > > > + * #define DRIVER_SPECIFIC_FLAG1 ((1U << V4L2_ISP_PARAMS_FL_DRIVER_FLAGS(1)) > > > + */ > > > +#define V4L2_ISP_PARAMS_FL_DRIVER_FLAGS(n) ((n) + 8) > > > + > > > +/** > > > + * struct v4l2_isp_params_block_header - V4L2 extensible parameters block header > > > + * @type: The parameters block type (driver-specific) > > > + * @flags: A bitmask of block flags (driver-specific) > > > + * @size: Size (in bytes) of the parameters block, including this header > > > + * > > > + * This structure represents the common part of all the ISP configuration > > > + * blocks. Each parameters block shall embed an instance of this structure type > > > + * as its first member, followed by the block-specific configuration data. > > > + * > > > + * The @type field is an ISP driver-specific value that identifies the block > > > + * type. The @size field specifies the size of the parameters block. > > > + * > > > + * The @flags field is a bitmask of per-block flags V4L2_PARAMS_ISP_FL_* and > > > + * driver-specific flags specified by the driver header. > > > + */ > > > +struct v4l2_isp_params_block_header { > > > + __u16 type; > > > + __u16 flags; > > > + __u32 size; > > > +} __attribute__((aligned(8))); > > > + > > > +/** > > > + * struct v4l2_isp_params_buffer - V4L2 extensible parameters configuration > > > + * @version: The parameters buffer version (driver-specific) > > > + * @data_size: The configuration data effective size, excluding this header > > > + * @data: The configuration data > > > + * > > > + * This structure contains the configuration parameters of the ISP algorithms, > > > + * serialized by userspace into a data buffer. Each configuration parameter > > > + * block is represented by a block-specific structure which contains a > > > + * :c:type:`v4l2_isp_params_block_header` entry as first member. Userspace > > > + * populates the @data buffer with configuration parameters for the blocks that > > > + * it intends to configure. As a consequence, the data buffer effective size > > > + * changes according to the number of ISP blocks that userspace intends to > > > + * configure and is set by userspace in the @data_size field. > > > + * > > > + * The parameters buffer is versioned by the @version field to allow modifying > > > + * and extending its definition. Userspace shall populate the @version field to > > > + * inform the driver about the version it intends to use. The driver will parse > > > + * and handle the @data buffer according to the data layout specific to the > > > + * indicated version and return an error if the desired version is not > > > + * supported. > > > + * > > > + * For each ISP block that userspace wants to configure, a block-specific > > > + * structure is appended to the @data buffer, one after the other without gaps > > > + * in between. Userspace shall populate the @data_size field with the effective > > > + * size, in bytes, of the @data buffer. > > > + */ > > > +struct v4l2_isp_params_buffer { > > > + __u32 version; > > > + __u32 data_size; > > > + __u8 data[] __counted_by(data_size); > > > +}; > > > + > > > +#endif /* _V4L2_ISP_H_ */ > > > diff --git a/utils/update-kernel-headers.sh b/utils/update-kernel-headers.sh > > > index 666624f9972ea61067e5b5695237ab7a17c61664..857601df8766c6493e51b62f0f9ca551d7efbd4a 100755 > > > --- a/utils/update-kernel-headers.sh > > > +++ b/utils/update-kernel-headers.sh > > > @@ -56,6 +56,7 @@ headers=" > > > linux/udmabuf.h > > > linux/v4l2-common.h > > > linux/v4l2-controls.h > > > + linux/v4l2-isp.h > > > > How come this isn't linux/media/v4l2-isp.h ? > > > > Because I moved the file back and forth from include/linux/ and > include/linux/media/ and forgot to update this. > > Good catch, I'll fix! Ahaha ok well once that's done add: Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com> > > > > linux/v4l2-mediabus.h > > > linux/v4l2-subdev.h > > > linux/videodev2.h > > > > > > -- > > > 2.51.0 > > >
Hi Jacopo On 08/10/2025 11:13, Kieran Bingham wrote: > Quoting Jacopo Mondi (2025-10-08 11:02:16) >> Hi Kieran >> >> On Wed, Oct 08, 2025 at 10:06:01AM +0100, Kieran Bingham wrote: >>> Quoting Jacopo Mondi (2025-10-07 19:17:44) >>>> Import the v4l2-isp.h header from the Linux kernel sources. >>>> >>>> The file has not been merged in mainline Linux yet but is available >>>> at v6: >>>> https://lore.kernel.org/all/20251007-extensible-parameters-validation-v6-1-5f719d9f39e5@ideasonboard.com >>>> >>>> Create the include/linux/media/ directory so that header files >>>> exported from the kernel which include this file do not need >>>> to be adjusted when imported in libcamera. >>>> >>>> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> >>>> Tested-by: Antoine Bouyer <antoine.bouyer@nxp.com> >>>> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> >>>> --- >>>> include/linux/media/v4l2-isp.h | 82 ++++++++++++++++++++++++++++++++++++++++++ >>>> utils/update-kernel-headers.sh | 1 + >>>> 2 files changed, 83 insertions(+) >>>> >>>> diff --git a/include/linux/media/v4l2-isp.h b/include/linux/media/v4l2-isp.h >>>> new file mode 100644 >>>> index 0000000000000000000000000000000000000000..49b451e30d88cce7d15ab40e6a3d533c7bb7a12c >>>> --- /dev/null >>>> +++ b/include/linux/media/v4l2-isp.h >>>> @@ -0,0 +1,82 @@ >>>> +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ >>>> +/* >>>> + * Video4Linux2 generic ISP parameters and statistics support >>>> + * >>>> + * Copyright (C) 2025 Ideas On Board Oy >>>> + * Author: Jacopo Mondi <jacopo.mondi@ideasonboard.com> >>>> + */ >>>> + >>>> +#ifndef _V4L2_ISP_H_ >>>> +#define _V4L2_ISP_H_ >>>> + >>>> +#include <linux/stddef.h> >>>> +#include <linux/types.h> >>>> + >>>> +#define V4L2_ISP_PARAMS_FL_BLOCK_DISABLE (1U << 0) >>>> +#define V4L2_ISP_PARAMS_FL_BLOCK_ENABLE (1U << 1) >>>> + >>>> +/* >>>> + * Reserve the first 8 bits for V4L2_ISP_PARAMS_FL_* flag. >>>> + * >>>> + * Driver-specific flags should be defined as: >>>> + * #define DRIVER_SPECIFIC_FLAG0 ((1U << V4L2_ISP_PARAMS_FL_DRIVER_FLAGS(0)) >>>> + * #define DRIVER_SPECIFIC_FLAG1 ((1U << V4L2_ISP_PARAMS_FL_DRIVER_FLAGS(1)) >>>> + */ >>>> +#define V4L2_ISP_PARAMS_FL_DRIVER_FLAGS(n) ((n) + 8) >>>> + >>>> +/** >>>> + * struct v4l2_isp_params_block_header - V4L2 extensible parameters block header >>>> + * @type: The parameters block type (driver-specific) >>>> + * @flags: A bitmask of block flags (driver-specific) >>>> + * @size: Size (in bytes) of the parameters block, including this header >>>> + * >>>> + * This structure represents the common part of all the ISP configuration >>>> + * blocks. Each parameters block shall embed an instance of this structure type >>>> + * as its first member, followed by the block-specific configuration data. >>>> + * >>>> + * The @type field is an ISP driver-specific value that identifies the block >>>> + * type. The @size field specifies the size of the parameters block. >>>> + * >>>> + * The @flags field is a bitmask of per-block flags V4L2_PARAMS_ISP_FL_* and >>>> + * driver-specific flags specified by the driver header. >>>> + */ >>>> +struct v4l2_isp_params_block_header { >>>> + __u16 type; >>>> + __u16 flags; >>>> + __u32 size; >>>> +} __attribute__((aligned(8))); >>>> + >>>> +/** >>>> + * struct v4l2_isp_params_buffer - V4L2 extensible parameters configuration >>>> + * @version: The parameters buffer version (driver-specific) >>>> + * @data_size: The configuration data effective size, excluding this header >>>> + * @data: The configuration data >>>> + * >>>> + * This structure contains the configuration parameters of the ISP algorithms, >>>> + * serialized by userspace into a data buffer. Each configuration parameter >>>> + * block is represented by a block-specific structure which contains a >>>> + * :c:type:`v4l2_isp_params_block_header` entry as first member. Userspace >>>> + * populates the @data buffer with configuration parameters for the blocks that >>>> + * it intends to configure. As a consequence, the data buffer effective size >>>> + * changes according to the number of ISP blocks that userspace intends to >>>> + * configure and is set by userspace in the @data_size field. >>>> + * >>>> + * The parameters buffer is versioned by the @version field to allow modifying >>>> + * and extending its definition. Userspace shall populate the @version field to >>>> + * inform the driver about the version it intends to use. The driver will parse >>>> + * and handle the @data buffer according to the data layout specific to the >>>> + * indicated version and return an error if the desired version is not >>>> + * supported. >>>> + * >>>> + * For each ISP block that userspace wants to configure, a block-specific >>>> + * structure is appended to the @data buffer, one after the other without gaps >>>> + * in between. Userspace shall populate the @data_size field with the effective >>>> + * size, in bytes, of the @data buffer. >>>> + */ >>>> +struct v4l2_isp_params_buffer { >>>> + __u32 version; >>>> + __u32 data_size; >>>> + __u8 data[] __counted_by(data_size); >>>> +}; >>>> + >>>> +#endif /* _V4L2_ISP_H_ */ >>>> diff --git a/utils/update-kernel-headers.sh b/utils/update-kernel-headers.sh >>>> index 666624f9972ea61067e5b5695237ab7a17c61664..857601df8766c6493e51b62f0f9ca551d7efbd4a 100755 >>>> --- a/utils/update-kernel-headers.sh >>>> +++ b/utils/update-kernel-headers.sh >>>> @@ -56,6 +56,7 @@ headers=" >>>> linux/udmabuf.h >>>> linux/v4l2-common.h >>>> linux/v4l2-controls.h >>>> + linux/v4l2-isp.h >>> >>> How come this isn't linux/media/v4l2-isp.h ? >>> >> >> Because I moved the file back and forth from include/linux/ and >> include/linux/media/ and forgot to update this. >> >> Good catch, I'll fix! > > Ahaha ok well once that's done add: > > > Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com> And also: Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>> >> >>>> linux/v4l2-mediabus.h >>>> linux/v4l2-subdev.h >>>> linux/videodev2.h >>>> >>>> -- >>>> 2.51.0 >>>>
diff --git a/include/linux/media/v4l2-isp.h b/include/linux/media/v4l2-isp.h new file mode 100644 index 0000000000000000000000000000000000000000..49b451e30d88cce7d15ab40e6a3d533c7bb7a12c --- /dev/null +++ b/include/linux/media/v4l2-isp.h @@ -0,0 +1,82 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +/* + * Video4Linux2 generic ISP parameters and statistics support + * + * Copyright (C) 2025 Ideas On Board Oy + * Author: Jacopo Mondi <jacopo.mondi@ideasonboard.com> + */ + +#ifndef _V4L2_ISP_H_ +#define _V4L2_ISP_H_ + +#include <linux/stddef.h> +#include <linux/types.h> + +#define V4L2_ISP_PARAMS_FL_BLOCK_DISABLE (1U << 0) +#define V4L2_ISP_PARAMS_FL_BLOCK_ENABLE (1U << 1) + +/* + * Reserve the first 8 bits for V4L2_ISP_PARAMS_FL_* flag. + * + * Driver-specific flags should be defined as: + * #define DRIVER_SPECIFIC_FLAG0 ((1U << V4L2_ISP_PARAMS_FL_DRIVER_FLAGS(0)) + * #define DRIVER_SPECIFIC_FLAG1 ((1U << V4L2_ISP_PARAMS_FL_DRIVER_FLAGS(1)) + */ +#define V4L2_ISP_PARAMS_FL_DRIVER_FLAGS(n) ((n) + 8) + +/** + * struct v4l2_isp_params_block_header - V4L2 extensible parameters block header + * @type: The parameters block type (driver-specific) + * @flags: A bitmask of block flags (driver-specific) + * @size: Size (in bytes) of the parameters block, including this header + * + * This structure represents the common part of all the ISP configuration + * blocks. Each parameters block shall embed an instance of this structure type + * as its first member, followed by the block-specific configuration data. + * + * The @type field is an ISP driver-specific value that identifies the block + * type. The @size field specifies the size of the parameters block. + * + * The @flags field is a bitmask of per-block flags V4L2_PARAMS_ISP_FL_* and + * driver-specific flags specified by the driver header. + */ +struct v4l2_isp_params_block_header { + __u16 type; + __u16 flags; + __u32 size; +} __attribute__((aligned(8))); + +/** + * struct v4l2_isp_params_buffer - V4L2 extensible parameters configuration + * @version: The parameters buffer version (driver-specific) + * @data_size: The configuration data effective size, excluding this header + * @data: The configuration data + * + * This structure contains the configuration parameters of the ISP algorithms, + * serialized by userspace into a data buffer. Each configuration parameter + * block is represented by a block-specific structure which contains a + * :c:type:`v4l2_isp_params_block_header` entry as first member. Userspace + * populates the @data buffer with configuration parameters for the blocks that + * it intends to configure. As a consequence, the data buffer effective size + * changes according to the number of ISP blocks that userspace intends to + * configure and is set by userspace in the @data_size field. + * + * The parameters buffer is versioned by the @version field to allow modifying + * and extending its definition. Userspace shall populate the @version field to + * inform the driver about the version it intends to use. The driver will parse + * and handle the @data buffer according to the data layout specific to the + * indicated version and return an error if the desired version is not + * supported. + * + * For each ISP block that userspace wants to configure, a block-specific + * structure is appended to the @data buffer, one after the other without gaps + * in between. Userspace shall populate the @data_size field with the effective + * size, in bytes, of the @data buffer. + */ +struct v4l2_isp_params_buffer { + __u32 version; + __u32 data_size; + __u8 data[] __counted_by(data_size); +}; + +#endif /* _V4L2_ISP_H_ */ diff --git a/utils/update-kernel-headers.sh b/utils/update-kernel-headers.sh index 666624f9972ea61067e5b5695237ab7a17c61664..857601df8766c6493e51b62f0f9ca551d7efbd4a 100755 --- a/utils/update-kernel-headers.sh +++ b/utils/update-kernel-headers.sh @@ -56,6 +56,7 @@ headers=" linux/udmabuf.h linux/v4l2-common.h linux/v4l2-controls.h + linux/v4l2-isp.h linux/v4l2-mediabus.h linux/v4l2-subdev.h linux/videodev2.h