[PATCH v2 2/5] include: linux: Update kernel headers to version v6.10-rc1

Kieran Bingham kieran.bingham at ideasonboard.com
Thu May 30 23:47:18 CEST 2024


Quoting Hans de Goede (2024-05-30 18:15:57)
> Updated kernel headers to v6.10-rc1 using utils/update-kernel-headers.sh
> and re-instating libcamera local modifications.
> 
> This includes adding include/linux/udmabuf.h which was not part
> of libcamera's include/linux headers before.
> 
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>

I thought I recalled we added something locally before it got merged for
RPi formats - but there's nothing being lost / removed here so I think
we're all good.

And the checkstyle warnings you mentioned are fine here. We should
figure out how to exclude this directory.

Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>

> ---
>  include/linux/README             |  2 +-
>  include/linux/drm_fourcc.h       | 10 ++---
>  include/linux/media-bus-format.h |  9 ++++
>  include/linux/rkisp1-config.h    | 56 +++++++++++++------------
>  include/linux/udmabuf.h          | 33 +++++++++++++++
>  include/linux/v4l2-controls.h    |  6 +++
>  include/linux/v4l2-mediabus.h    | 18 +++++---
>  include/linux/v4l2-subdev.h      | 29 ++++++++++---
>  include/linux/videodev2.h        | 72 ++++++++++++++++++++++++--------
>  9 files changed, 172 insertions(+), 63 deletions(-)
>  create mode 100644 include/linux/udmabuf.h
> 
> diff --git a/include/linux/README b/include/linux/README
> index 101e4997..b7795309 100644
> --- a/include/linux/README
> +++ b/include/linux/README
> @@ -1,4 +1,4 @@
>  # SPDX-License-Identifier: CC0-1.0
>  
> -Files in this directory are imported from v6.7 of the Linux kernel. Do not
> +Files in this directory are imported from v6.10-rc1 of the Linux kernel. Do not
>  modify them manually.
> diff --git a/include/linux/drm_fourcc.h b/include/linux/drm_fourcc.h
> index b4e1a092..d8e99940 100644
> --- a/include/linux/drm_fourcc.h
> +++ b/include/linux/drm_fourcc.h
> @@ -54,7 +54,7 @@ extern "C" {
>   * Format modifiers may change any property of the buffer, including the number
>   * of planes and/or the required allocation size. Format modifiers are
>   * vendor-namespaced, and as such the relationship between a fourcc code and a
> - * modifier is specific to the modifer being used. For example, some modifiers
> + * modifier is specific to the modifier being used. For example, some modifiers
>   * may preserve meaning - such as number of planes - from the fourcc code,
>   * whereas others may not.
>   *
> @@ -79,7 +79,7 @@ extern "C" {
>   *   format.
>   * - Higher-level programs interfacing with KMS/GBM/EGL/Vulkan/etc: these users
>   *   see modifiers as opaque tokens they can check for equality and intersect.
> - *   These users musn't need to know to reason about the modifier value
> + *   These users mustn't need to know to reason about the modifier value
>   *   (i.e. they are not expected to extract information out of the modifier).
>   *
>   * Vendors should document their modifier usage in as much detail as
> @@ -610,7 +610,7 @@ extern "C" {
>   * This is a tiled layout using 4Kb tiles in row-major layout.
>   * Within the tile pixels are laid out in 16 256 byte units / sub-tiles which
>   * are arranged in four groups (two wide, two high) with column-major layout.
> - * Each group therefore consits out of four 256 byte units, which are also laid
> + * Each group therefore consists out of four 256 byte units, which are also laid
>   * out as 2x2 column-major.
>   * 256 byte units are made out of four 64 byte blocks of pixels, producing
>   * either a square block or a 2:1 unit.
> @@ -1183,7 +1183,7 @@ drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier)
>   */
>  
>  /*
> - * The top 4 bits (out of the 56 bits alloted for specifying vendor specific
> + * The top 4 bits (out of the 56 bits allotted for specifying vendor specific
>   * modifiers) denote the category for modifiers. Currently we have three
>   * categories of modifiers ie AFBC, MISC and AFRC. We can have a maximum of
>   * sixteen different categories.
> @@ -1499,7 +1499,7 @@ drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier)
>   * Amlogic FBC Memory Saving mode
>   *
>   * Indicates the storage is packed when pixel size is multiple of word
> - * boudaries, i.e. 8bit should be stored in this mode to save allocation
> + * boundaries, i.e. 8bit should be stored in this mode to save allocation
>   * memory.
>   *
>   * This mode reduces body layout to 3072 bytes per 64x32 superblock with
> diff --git a/include/linux/media-bus-format.h b/include/linux/media-bus-format.h
> index f05f747e..d4c1d991 100644
> --- a/include/linux/media-bus-format.h
> +++ b/include/linux/media-bus-format.h
> @@ -174,4 +174,13 @@
>   */
>  #define MEDIA_BUS_FMT_METADATA_FIXED           0x7001
>  
> +/* Generic line based metadata formats for serial buses. Next is 0x8008. */
> +#define MEDIA_BUS_FMT_META_8                   0x8001
> +#define MEDIA_BUS_FMT_META_10                  0x8002
> +#define MEDIA_BUS_FMT_META_12                  0x8003
> +#define MEDIA_BUS_FMT_META_14                  0x8004
> +#define MEDIA_BUS_FMT_META_16                  0x8005
> +#define MEDIA_BUS_FMT_META_20                  0x8006
> +#define MEDIA_BUS_FMT_META_24                  0x8007
> +
>  #endif /* __LINUX_MEDIA_BUS_FORMAT_H */
> diff --git a/include/linux/rkisp1-config.h b/include/linux/rkisp1-config.h
> index 2d1c448a..f87c6bd4 100644
> --- a/include/linux/rkisp1-config.h
> +++ b/include/linux/rkisp1-config.h
> @@ -4,8 +4,8 @@
>   * Copyright (C) 2017 Rockchip Electronics Co., Ltd.
>   */
>  
> -#ifndef _UAPI_RKISP1_CONFIG_H
> -#define _UAPI_RKISP1_CONFIG_H
> +#ifndef _RKISP1_CONFIG_H
> +#define _RKISP1_CONFIG_H
>  
>  #include <linux/types.h>
>  
> @@ -175,11 +175,14 @@
>  /**
>   * enum rkisp1_cif_isp_version - ISP variants
>   *
> - * @RKISP1_V10: used at least in rk3288 and rk3399
> - * @RKISP1_V11: declared in the original vendor code, but not used
> - * @RKISP1_V12: used at least in rk3326 and px30
> - * @RKISP1_V13: used at least in rk1808
> - * @RKISP1_V_IMX8MP: used in at least imx8mp
> + * @RKISP1_V10: Used at least in RK3288 and RK3399.
> + * @RKISP1_V11: Declared in the original vendor code, but not used. Same number
> + *     of entries in grids and histogram as v10.
> + * @RKISP1_V12: Used at least in RK3326 and PX30.
> + * @RKISP1_V13: Used at least in RK1808. Same number of entries in grids and
> + *     histogram as v12.
> + * @RKISP1_V_IMX8MP: Used in at least i.MX8MP. Same number of entries in grids
> + *     and histogram as v10.
>   */
>  enum rkisp1_cif_isp_version {
>         RKISP1_V10 = 10,
> @@ -586,10 +589,9 @@ enum rkisp1_cif_isp_goc_mode {
>   * as is reported by the hw_revision field of the struct media_device_info
>   * that is returned by ioctl MEDIA_IOC_DEVICE_INFO.
>   *
> - * Versions <= V11 have RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V10
> - * entries, versions >= V12 have RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V12
> - * entries. RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES is equal to the maximum
> - * of the two.
> + * V10 has RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V10 entries, V12 has
> + * RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V12 entries.
> + * RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES is equal to the maximum of the two.
>   */
>  struct rkisp1_cif_isp_goc_config {
>         __u32 mode;
> @@ -609,10 +611,10 @@ struct rkisp1_cif_isp_goc_config {
>   * as is reported by the hw_revision field of the struct media_device_info
>   * that is returned by ioctl MEDIA_IOC_DEVICE_INFO.
>   *
> - * Versions <= V11 have RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V10
> - * entries, versions >= V12 have RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V12
> - * entries. RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE is equal to the maximum
> - * of the two.
> + * V10 has RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V10 entries, V12 has
> + * RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V12 entries.
> + * RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE is equal to the maximum of the
> + * two.
>   */
>  struct rkisp1_cif_isp_hst_config {
>         __u32 mode;
> @@ -904,9 +906,9 @@ struct rkisp1_cif_isp_bls_meas_val {
>   * as is reported by the hw_revision field of the struct media_device_info
>   * that is returned by ioctl MEDIA_IOC_DEVICE_INFO.
>   *
> - * Versions <= V11 have RKISP1_CIF_ISP_AE_MEAN_MAX_V10 entries,
> - * versions >= V12 have RKISP1_CIF_ISP_AE_MEAN_MAX_V12 entries.
> - * RKISP1_CIF_ISP_AE_MEAN_MAX is equal to the maximum of the two.
> + * V10 has RKISP1_CIF_ISP_AE_MEAN_MAX_V10 entries, V12 has
> + * RKISP1_CIF_ISP_AE_MEAN_MAX_V12 entries. RKISP1_CIF_ISP_AE_MEAN_MAX is equal
> + * to the maximum of the two.
>   *
>   * Image is divided into 5x5 blocks on V10 and 9x9 blocks on V12.
>   */
> @@ -946,21 +948,21 @@ struct rkisp1_cif_isp_af_stat {
>   *            integer part.
>   *
>   * The window of the measurements area is divided to 5x5 sub-windows for
> - * V10/V11 and to 9x9 sub-windows for V12. The histogram is then computed for
> - * each sub-window independently and the final result is a weighted average of
> - * the histogram measurements on all sub-windows. The window of the
> - * measurements area and the weight of each sub-window are configurable using
> + * V10 and to 9x9 sub-windows for V12. The histogram is then computed for each
> + * sub-window independently and the final result is a weighted average of the
> + * histogram measurements on all sub-windows. The window of the measurements
> + * area and the weight of each sub-window are configurable using
>   * struct @rkisp1_cif_isp_hst_config.
>   *
> - * The histogram contains 16 bins in V10/V11 and 32 bins in V12/V13.
> + * The histogram contains 16 bins in V10 and 32 bins in V12.
>   *
>   * The number of entries of @hist_bins depends on the hardware revision
>   * as is reported by the hw_revision field of the struct media_device_info
>   * that is returned by ioctl MEDIA_IOC_DEVICE_INFO.
>   *
> - * Versions <= V11 have RKISP1_CIF_ISP_HIST_BIN_N_MAX_V10 entries,
> - * versions >= V12 have RKISP1_CIF_ISP_HIST_BIN_N_MAX_V12 entries.
> - * RKISP1_CIF_ISP_HIST_BIN_N_MAX is equal to the maximum of the two.
> + * V10 has RKISP1_CIF_ISP_HIST_BIN_N_MAX_V10 entries, V12 has
> + * RKISP1_CIF_ISP_HIST_BIN_N_MAX_V12 entries. RKISP1_CIF_ISP_HIST_BIN_N_MAX is
> + * equal to the maximum of the two.
>   */
>  struct rkisp1_cif_isp_hist_stat {
>         __u32 hist_bins[RKISP1_CIF_ISP_HIST_BIN_N_MAX];
> @@ -994,4 +996,4 @@ struct rkisp1_stat_buffer {
>         struct rkisp1_cif_isp_stat params;
>  };
>  
> -#endif /* _UAPI_RKISP1_CONFIG_H */
> +#endif /* _RKISP1_CONFIG_H */
> diff --git a/include/linux/udmabuf.h b/include/linux/udmabuf.h
> new file mode 100644
> index 00000000..76cc7de9
> --- /dev/null
> +++ b/include/linux/udmabuf.h
> @@ -0,0 +1,33 @@
> +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
> +#ifndef _LINUX_UDMABUF_H
> +#define _LINUX_UDMABUF_H
> +
> +#include <linux/types.h>
> +#include <linux/ioctl.h>
> +
> +#define UDMABUF_FLAGS_CLOEXEC  0x01
> +
> +struct udmabuf_create {
> +       __u32 memfd;
> +       __u32 flags;
> +       __u64 offset;
> +       __u64 size;
> +};
> +
> +struct udmabuf_create_item {
> +       __u32 memfd;
> +       __u32 __pad;
> +       __u64 offset;
> +       __u64 size;
> +};
> +
> +struct udmabuf_create_list {
> +       __u32 flags;
> +       __u32 count;
> +       struct udmabuf_create_item list[];
> +};
> +
> +#define UDMABUF_CREATE       _IOW('u', 0x42, struct udmabuf_create)
> +#define UDMABUF_CREATE_LIST  _IOW('u', 0x43, struct udmabuf_create_list)
> +
> +#endif /* _LINUX_UDMABUF_H */
> diff --git a/include/linux/v4l2-controls.h b/include/linux/v4l2-controls.h
> index b9f64810..1e6e816b 100644
> --- a/include/linux/v4l2-controls.h
> +++ b/include/linux/v4l2-controls.h
> @@ -211,6 +211,12 @@ enum v4l2_colorfx {
>   */
>  #define V4L2_CID_USER_NPCM_BASE                        (V4L2_CID_USER_BASE + 0x11b0)
>  
> +/*
> + * The base for THine THP7312 driver controls.
> + * We reserve 32 controls for this driver.
> + */
> +#define V4L2_CID_USER_THP7312_BASE             (V4L2_CID_USER_BASE + 0x11c0)
> +
>  /* MPEG-class control IDs */
>  /* The MPEG controls are applicable to all codec controls
>   * and the 'MPEG' part of the define is historical */
> diff --git a/include/linux/v4l2-mediabus.h b/include/linux/v4l2-mediabus.h
> index 2c318de1..097ef739 100644
> --- a/include/linux/v4l2-mediabus.h
> +++ b/include/linux/v4l2-mediabus.h
> @@ -19,12 +19,18 @@
>   * @width:     image width
>   * @height:    image height
>   * @code:      data format code (from enum v4l2_mbus_pixelcode)
> - * @field:     used interlacing type (from enum v4l2_field)
> - * @colorspace:        colorspace of the data (from enum v4l2_colorspace)
> - * @ycbcr_enc: YCbCr encoding of the data (from enum v4l2_ycbcr_encoding)
> - * @hsv_enc:   HSV encoding of the data (from enum v4l2_hsv_encoding)
> - * @quantization: quantization of the data (from enum v4l2_quantization)
> - * @xfer_func:  transfer function of the data (from enum v4l2_xfer_func)
> + * @field:     used interlacing type (from enum v4l2_field), zero for metadata
> + *             mbus codes
> + * @colorspace:        colorspace of the data (from enum v4l2_colorspace), zero on
> + *             metadata mbus codes
> + * @ycbcr_enc: YCbCr encoding of the data (from enum v4l2_ycbcr_encoding), zero
> + *             for metadata mbus codes
> + * @hsv_enc:   HSV encoding of the data (from enum v4l2_hsv_encoding), zero for
> + *             metadata mbus codes
> + * @quantization: quantization of the data (from enum v4l2_quantization), zero
> + *             for metadata mbus codes
> + * @xfer_func:  transfer function of the data (from enum v4l2_xfer_func), zero
> + *             for metadata mbus codes
>   * @flags:     flags (V4L2_MBUS_FRAMEFMT_*)
>   * @reserved:  reserved bytes that can be later used
>   */
> diff --git a/include/linux/v4l2-subdev.h b/include/linux/v4l2-subdev.h
> index b383c2fe..2347e266 100644
> --- a/include/linux/v4l2-subdev.h
> +++ b/include/linux/v4l2-subdev.h
> @@ -50,6 +50,10 @@ struct v4l2_subdev_format {
>   * @rect: pad crop rectangle boundaries
>   * @stream: stream number, defined in subdev routing
>   * @reserved: drivers and applications must zero this array
> + *
> + * The subdev crop API is an obsolete interface and may be removed in the
> + * future. It is superseded by the selection API. No new extensions to this
> + * structure will be accepted.
>   */
>  struct v4l2_subdev_crop {
>         __u32 which;
> @@ -116,13 +120,15 @@ struct v4l2_subdev_frame_size_enum {
>   * @pad: pad number, as reported by the media API
>   * @interval: frame interval in seconds
>   * @stream: stream number, defined in subdev routing
> + * @which: interval type (from enum v4l2_subdev_format_whence)
>   * @reserved: drivers and applications must zero this array
>   */
>  struct v4l2_subdev_frame_interval {
>         __u32 pad;
>         struct v4l2_fract interval;
>         __u32 stream;
> -       __u32 reserved[8];
> +       __u32 which;
> +       __u32 reserved[7];
>  };
>  
>  /**
> @@ -133,7 +139,7 @@ struct v4l2_subdev_frame_interval {
>   * @width: frame width in pixels
>   * @height: frame height in pixels
>   * @interval: frame interval in seconds
> - * @which: format type (from enum v4l2_subdev_format_whence)
> + * @which: interval type (from enum v4l2_subdev_format_whence)
>   * @stream: stream number, defined in subdev routing
>   * @reserved: drivers and applications must zero this array
>   */
> @@ -222,15 +228,19 @@ struct v4l2_subdev_route {
>   * struct v4l2_subdev_routing - Subdev routing information
>   *
>   * @which: configuration type (from enum v4l2_subdev_format_whence)
> - * @num_routes: the total number of routes in the routes array
> + * @len_routes: the length of the routes array, in routes; set by the user, not
> + *             modified by the kernel
>   * @routes: pointer to the routes array
> + * @num_routes: the total number of routes, possibly more than fits in the
> + *             routes array
>   * @reserved: drivers and applications must zero this array
>   */
>  struct v4l2_subdev_routing {
>         __u32 which;
> -       __u32 num_routes;
> +       __u32 len_routes;
>         __u64 routes;
> -       __u32 reserved[6];
> +       __u32 num_routes;
> +       __u32 reserved[11];
>  };
>  
>  /*
> @@ -239,7 +249,14 @@ struct v4l2_subdev_routing {
>   * set (which is the default), the 'stream' fields will be forced to 0 by the
>   * kernel.
>   */
> - #define V4L2_SUBDEV_CLIENT_CAP_STREAMS                (1ULL << 0)
> +#define V4L2_SUBDEV_CLIENT_CAP_STREAMS                 (1ULL << 0)
> +
> +/*
> + * The client is aware of the struct v4l2_subdev_frame_interval which field. If
> + * this is not set (which is the default), the which field is forced to
> + * V4L2_SUBDEV_FORMAT_ACTIVE by the kernel.
> + */
> +#define V4L2_SUBDEV_CLIENT_CAP_INTERVAL_USES_WHICH     (1ULL << 1)
>  
>  /**
>   * struct v4l2_subdev_client_capability - Capabilities of the client accessing
> diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
> index 0b5482a0..7fe522e8 100644
> --- a/include/linux/videodev2.h
> +++ b/include/linux/videodev2.h
> @@ -574,6 +574,8 @@ struct v4l2_pix_format {
>  #define V4L2_PIX_FMT_Y10BPACK    v4l2_fourcc('Y', '1', '0', 'B') /* 10  Greyscale bit-packed */
>  #define V4L2_PIX_FMT_Y10P    v4l2_fourcc('Y', '1', '0', 'P') /* 10  Greyscale, MIPI RAW10 packed */
>  #define V4L2_PIX_FMT_IPU3_Y10          v4l2_fourcc('i', 'p', '3', 'y') /* IPU3 packed 10-bit greyscale */
> +#define V4L2_PIX_FMT_Y12P    v4l2_fourcc('Y', '1', '2', 'P') /* 12  Greyscale, MIPI RAW12 packed */
> +#define V4L2_PIX_FMT_Y14P    v4l2_fourcc('Y', '1', '4', 'P') /* 14  Greyscale, MIPI RAW14 packed */
>  
>  /* Palette formats */
>  #define V4L2_PIX_FMT_PAL8    v4l2_fourcc('P', 'A', 'L', '8') /*  8  8-bit palette */
> @@ -867,6 +869,7 @@ struct v4l2_fmtdesc {
>  #define V4L2_FMT_FLAG_CSC_YCBCR_ENC            0x0080
>  #define V4L2_FMT_FLAG_CSC_HSV_ENC              V4L2_FMT_FLAG_CSC_YCBCR_ENC
>  #define V4L2_FMT_FLAG_CSC_QUANTIZATION         0x0100
> +#define V4L2_FMT_FLAG_META_LINE_BASED          0x0200
>  
>         /* Frame Size and frame rate enumeration */
>  /*
> @@ -1016,18 +1019,20 @@ struct v4l2_requestbuffers {
>  #define V4L2_BUF_CAP_SUPPORTS_ORPHANED_BUFS            (1 << 4)
>  #define V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF     (1 << 5)
>  #define V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS         (1 << 6)
> +#define V4L2_BUF_CAP_SUPPORTS_MAX_NUM_BUFFERS          (1 << 7)
> +#define V4L2_BUF_CAP_SUPPORTS_REMOVE_BUFS              (1 << 8)
>  
>  /**
>   * struct v4l2_plane - plane info for multi-planar buffers
>   * @bytesused:         number of bytes occupied by data in the plane (payload)
>   * @length:            size of this plane (NOT the payload) in bytes
> - * @mem_offset:                when memory in the associated struct v4l2_buffer is
> + * @m.mem_offset:      when memory in the associated struct v4l2_buffer is
>   *                     V4L2_MEMORY_MMAP, equals the offset from the start of
>   *                     the device memory for this plane (or is a "cookie" that
>   *                     should be passed to mmap() called on the video node)
> - * @userptr:           when memory is V4L2_MEMORY_USERPTR, a userspace pointer
> + * @m.userptr:         when memory is V4L2_MEMORY_USERPTR, a userspace pointer
>   *                     pointing to this plane
> - * @fd:                        when memory is V4L2_MEMORY_DMABUF, a userspace file
> + * @m.fd:              when memory is V4L2_MEMORY_DMABUF, a userspace file
>   *                     descriptor associated with this plane
>   * @m:                 union of @mem_offset, @userptr and @fd
>   * @data_offset:       offset in the plane to the start of data; usually 0,
> @@ -1065,14 +1070,14 @@ struct v4l2_plane {
>   * @sequence:  sequence count of this frame
>   * @memory:    enum v4l2_memory; the method, in which the actual video data is
>   *             passed
> - * @offset:    for non-multiplanar buffers with memory == V4L2_MEMORY_MMAP;
> + * @m.offset:  for non-multiplanar buffers with memory == V4L2_MEMORY_MMAP;
>   *             offset from the start of the device memory for this plane,
>   *             (or a "cookie" that should be passed to mmap() as offset)
> - * @userptr:   for non-multiplanar buffers with memory == V4L2_MEMORY_USERPTR;
> + * @m.userptr: for non-multiplanar buffers with memory == V4L2_MEMORY_USERPTR;
>   *             a userspace pointer pointing to this buffer
> - * @fd:                for non-multiplanar buffers with memory == V4L2_MEMORY_DMABUF;
> + * @m.fd:              for non-multiplanar buffers with memory == V4L2_MEMORY_DMABUF;
>   *             a userspace file descriptor associated with this buffer
> - * @planes:    for multiplanar buffers; userspace pointer to the array of plane
> + * @m.planes:  for multiplanar buffers; userspace pointer to the array of plane
>   *             info structs for this buffer
>   * @m:         union of @offset, @userptr, @planes and @fd
>   * @length:    size in bytes of the buffer (NOT its payload) for single-plane
> @@ -1810,8 +1815,10 @@ struct v4l2_ext_control {
>                 struct v4l2_ctrl_av1_tile_group_entry *p_av1_tile_group_entry;
>                 struct v4l2_ctrl_av1_frame *p_av1_frame;
>                 struct v4l2_ctrl_av1_film_grain *p_av1_film_grain;
> +               struct v4l2_ctrl_hdr10_cll_info *p_hdr10_cll_info;
> +               struct v4l2_ctrl_hdr10_mastering_display *p_hdr10_mastering_display;
>                 void *ptr;
> -       };
> +       } __attribute__ ((packed));
>  } __attribute__ ((packed));
>  
>  struct v4l2_ext_controls {
> @@ -2381,23 +2388,32 @@ struct v4l2_sdr_format {
>   * struct v4l2_meta_format - metadata format definition
>   * @dataformat:                little endian four character code (fourcc)
>   * @buffersize:                maximum size in bytes required for data
> + * @width:             number of data units of data per line (valid for line
> + *                     based formats only, see format documentation)
> + * @height:            number of lines of data per buffer (valid for line based
> + *                     formats only)
> + * @bytesperline:      offset between the beginnings of two adjacent lines in
> + *                     bytes (valid for line based formats only)
>   */
>  struct v4l2_meta_format {
>         __u32                           dataformat;
>         __u32                           buffersize;
> +       __u32                           width;
> +       __u32                           height;
> +       __u32                           bytesperline;
>  } __attribute__ ((packed));
>  
>  /**
>   * struct v4l2_format - stream data format
> - * @type:      enum v4l2_buf_type; type of the data stream
> - * @pix:       definition of an image format
> - * @pix_mp:    definition of a multiplanar image format
> - * @win:       definition of an overlaid image
> - * @vbi:       raw VBI capture or output parameters
> - * @sliced:    sliced VBI capture or output parameters
> - * @raw_data:  placeholder for future extensions and custom formats
> - * @fmt:       union of @pix, @pix_mp, @win, @vbi, @sliced, @sdr, @meta
> - *             and @raw_data
> + * @type:              enum v4l2_buf_type; type of the data stream
> + * @fmt.pix:           definition of an image format
> + * @fmt.pix_mp:                definition of a multiplanar image format
> + * @fmt.win:           definition of an overlaid image
> + * @fmt.vbi:           raw VBI capture or output parameters
> + * @fmt.sliced:                sliced VBI capture or output parameters
> + * @fmt.raw_data:      placeholder for future extensions and custom formats
> + * @fmt:               union of @pix, @pix_mp, @win, @vbi, @sliced, @sdr,
> + *                     @meta and @raw_data
>   */
>  struct v4l2_format {
>         __u32    type;
> @@ -2570,6 +2586,9 @@ struct v4l2_dbg_chip_info {
>   * @flags:     additional buffer management attributes (ignored unless the
>   *             queue has V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS capability
>   *             and configured for MMAP streaming I/O).
> + * @max_num_buffers: if V4L2_BUF_CAP_SUPPORTS_MAX_NUM_BUFFERS capability flag is set
> + *             this field indicate the maximum possible number of buffers
> + *             for this queue.
>   * @reserved:  future extensions
>   */
>  struct v4l2_create_buffers {
> @@ -2579,7 +2598,22 @@ struct v4l2_create_buffers {
>         struct v4l2_format      format;
>         __u32                   capabilities;
>         __u32                   flags;
> -       __u32                   reserved[6];
> +       __u32                   max_num_buffers;
> +       __u32                   reserved[5];
> +};
> +
> +/**
> + * struct v4l2_remove_buffers - VIDIOC_REMOVE_BUFS argument
> + * @index:     the first buffer to be removed
> + * @count:     number of buffers to removed
> + * @type:      enum v4l2_buf_type
> + * @reserved:  future extensions
> + */
> +struct v4l2_remove_buffers {
> +       __u32                   index;
> +       __u32                   count;
> +       __u32                   type;
> +       __u32                   reserved[13];
>  };
>  
>  /*
> @@ -2681,6 +2715,8 @@ struct v4l2_create_buffers {
>  #define VIDIOC_DBG_G_CHIP_INFO  _IOWR('V', 102, struct v4l2_dbg_chip_info)
>  
>  #define VIDIOC_QUERY_EXT_CTRL  _IOWR('V', 103, struct v4l2_query_ext_ctrl)
> +#define VIDIOC_REMOVE_BUFS     _IOWR('V', 104, struct v4l2_remove_buffers)
> +
>  
>  /* Reminder: when adding new ioctls please add support for them to
>     drivers/media/v4l2-core/v4l2-compat-ioctl32.c as well! */
> -- 
> 2.45.1
>


More information about the libcamera-devel mailing list