From b05512b81bbe1c90b71da9c571e742f162fc0575 Mon Sep 17 00:00:00 2001 From: Michele Paolino Date: Tue, 14 Nov 2023 18:07:09 +0100 Subject: CAN, GPIO, RNG vhost-devices for virtio-loopback [v6] This patch adds key components of the viritio-loopback architecture: - kernel-module-virtio-loopback: the virtio loopback kernel driver - CAN, GPIO and RNG vhost-user devices from meta-virtualization (commit a215d8320edee0a317a6511e7e2efa5bba867486) Notes: - libgpiod, comes from meta-openembedded commit 3029554ceb0b0bb52a8d8ec3f0a75c5113662fe6 - cleaned eg-virt from unused drivers (kernel-module-virtio-video) Bug-AGL: SPEC-4834 V2 changes: - related meta-virtualization commit message added in the cover letter - updated libgpio recipe to v2.1 - SPEC reference added in cover letter v3 - add vhost-device-can preliminary version. This is placed here with the objective to share the link when proposing the new device to the rust-vmm/vhost-device community - remove cargo-update-recipe-crates includes in bb file because it is not supported by the rust mixin layer - vhost-device folder README changes v4 - fixed libgpiod required version - tested ref hw and qemu x86/64 builds - vsock, scsi and i2c rust devices removed from the build as they are not yet integrated in virtiod-loopback - cleaned-up kernel modules kernel-module-virtio-video and gstreamer1.0-plugins-bad - virtio-loopback-driver set to 2-or-later v5 - Merge with Jan-Simon version v4: - remove broken kernel-module-virtio-video - use FEATURE_PACKAGES instead of IMAGE_INSTALL:append - rename virtio-loopback-driver.bb to kernel-module-virtio-loopback_git.bb for consistency v6 - adding version in the title - removing MODULE_GIT_REPOSITORY in kernel-modules Change-Id: Id6cc58e777b9edad03b6c50d0dddaac8601edeaf Signed-off-by: Michele Paolino Signed-off-by: Jan-Simon Moeller --- .../files/include/uapi/linux/virtio_video.h | 493 --------------------- 1 file changed, 493 deletions(-) delete mode 100644 meta-egvirt/recipes-kernel/kernel-module-virtio-video/files/include/uapi/linux/virtio_video.h (limited to 'meta-egvirt/recipes-kernel/kernel-module-virtio-video/files/include/uapi') diff --git a/meta-egvirt/recipes-kernel/kernel-module-virtio-video/files/include/uapi/linux/virtio_video.h b/meta-egvirt/recipes-kernel/kernel-module-virtio-video/files/include/uapi/linux/virtio_video.h deleted file mode 100644 index 12792129..00000000 --- a/meta-egvirt/recipes-kernel/kernel-module-virtio-video/files/include/uapi/linux/virtio_video.h +++ /dev/null @@ -1,493 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ -/* - * Virtio Video Device - * - * This header is BSD licensed so anyone can use the definitions - * to implement compatible drivers/servers: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of IBM nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL IBM OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Copyright (C) 2020 OpenSynergy GmbH. - */ - -#ifndef _UAPI_LINUX_VIRTIO_VIDEO_H -#define _UAPI_LINUX_VIRTIO_VIDEO_H - -#include -#include - -enum virtio_video_device_type { - VIRTIO_VIDEO_DEVICE_ENCODER = 0x0100, - VIRTIO_VIDEO_DEVICE_DECODER, - VIRTIO_VIDEO_DEVICE_CAMERA, -}; - -/* - * Feature bits - */ - -/* Guest pages can be used for video buffers. */ -#define VIRTIO_VIDEO_F_RESOURCE_GUEST_PAGES 0 -/* - * The host can process buffers even if they are non-contiguous memory such as - * scatter-gather lists. - */ -#define VIRTIO_VIDEO_F_RESOURCE_NON_CONTIG 1 - -#define VIRTIO_VIDEO_MAX_PLANES 8 - -/* - * Image formats - */ - -enum virtio_video_format { - /* Raw formats */ - VIRTIO_VIDEO_FORMAT_RAW_MIN = 1, - VIRTIO_VIDEO_FORMAT_ARGB8888 = VIRTIO_VIDEO_FORMAT_RAW_MIN, - VIRTIO_VIDEO_FORMAT_BGRA8888, - VIRTIO_VIDEO_FORMAT_RGBA8888, - VIRTIO_VIDEO_FORMAT_NV12, /* 12 Y/CbCr 4:2:0 */ - VIRTIO_VIDEO_FORMAT_YUV420, /* 12 YUV 4:2:0 */ - VIRTIO_VIDEO_FORMAT_YVU420, /* 12 YVU 4:2:0 */ - VIRTIO_VIDEO_FORMAT_YUV422, /* 16 YUV 4:2:2 */ - VIRTIO_VIDEO_FORMAT_RAW_MAX = VIRTIO_VIDEO_FORMAT_YUV422, - - /* Coded formats */ - VIRTIO_VIDEO_FORMAT_CODED_MIN = 0x1000, - VIRTIO_VIDEO_FORMAT_MPEG2 = - VIRTIO_VIDEO_FORMAT_CODED_MIN, /* MPEG-2 Part 2 */ - VIRTIO_VIDEO_FORMAT_MPEG4, /* MPEG-4 Part 2 */ - VIRTIO_VIDEO_FORMAT_H264, /* H.264 */ - VIRTIO_VIDEO_FORMAT_HEVC, /* HEVC aka H.265*/ - VIRTIO_VIDEO_FORMAT_VP8, /* VP8 */ - VIRTIO_VIDEO_FORMAT_VP9, /* VP9 */ - VIRTIO_VIDEO_FORMAT_CODED_MAX = VIRTIO_VIDEO_FORMAT_VP9, -}; - -enum virtio_video_profile { - /* H.264 */ - VIRTIO_VIDEO_PROFILE_H264_MIN = 0x100, - VIRTIO_VIDEO_PROFILE_H264_BASELINE = VIRTIO_VIDEO_PROFILE_H264_MIN, - VIRTIO_VIDEO_PROFILE_H264_MAIN, - VIRTIO_VIDEO_PROFILE_H264_EXTENDED, - VIRTIO_VIDEO_PROFILE_H264_HIGH, - VIRTIO_VIDEO_PROFILE_H264_HIGH10PROFILE, - VIRTIO_VIDEO_PROFILE_H264_HIGH422PROFILE, - VIRTIO_VIDEO_PROFILE_H264_HIGH444PREDICTIVEPROFILE, - VIRTIO_VIDEO_PROFILE_H264_SCALABLEBASELINE, - VIRTIO_VIDEO_PROFILE_H264_SCALABLEHIGH, - VIRTIO_VIDEO_PROFILE_H264_STEREOHIGH, - VIRTIO_VIDEO_PROFILE_H264_MULTIVIEWHIGH, - VIRTIO_VIDEO_PROFILE_H264_MAX = VIRTIO_VIDEO_PROFILE_H264_MULTIVIEWHIGH, - - /* HEVC */ - VIRTIO_VIDEO_PROFILE_HEVC_MIN = 0x200, - VIRTIO_VIDEO_PROFILE_HEVC_MAIN = VIRTIO_VIDEO_PROFILE_HEVC_MIN, - VIRTIO_VIDEO_PROFILE_HEVC_MAIN10, - VIRTIO_VIDEO_PROFILE_HEVC_MAIN_STILL_PICTURE, - VIRTIO_VIDEO_PROFILE_HEVC_MAX = - VIRTIO_VIDEO_PROFILE_HEVC_MAIN_STILL_PICTURE, - - /* VP8 */ - VIRTIO_VIDEO_PROFILE_VP8_MIN = 0x300, - VIRTIO_VIDEO_PROFILE_VP8_PROFILE0 = VIRTIO_VIDEO_PROFILE_VP8_MIN, - VIRTIO_VIDEO_PROFILE_VP8_PROFILE1, - VIRTIO_VIDEO_PROFILE_VP8_PROFILE2, - VIRTIO_VIDEO_PROFILE_VP8_PROFILE3, - VIRTIO_VIDEO_PROFILE_VP8_MAX = VIRTIO_VIDEO_PROFILE_VP8_PROFILE3, - - /* VP9 */ - VIRTIO_VIDEO_PROFILE_VP9_MIN = 0x400, - VIRTIO_VIDEO_PROFILE_VP9_PROFILE0 = VIRTIO_VIDEO_PROFILE_VP9_MIN, - VIRTIO_VIDEO_PROFILE_VP9_PROFILE1, - VIRTIO_VIDEO_PROFILE_VP9_PROFILE2, - VIRTIO_VIDEO_PROFILE_VP9_PROFILE3, - VIRTIO_VIDEO_PROFILE_VP9_MAX = VIRTIO_VIDEO_PROFILE_VP9_PROFILE3, -}; - -enum virtio_video_level { - /* H.264 */ - VIRTIO_VIDEO_LEVEL_H264_MIN = 0x100, - VIRTIO_VIDEO_LEVEL_H264_1_0 = VIRTIO_VIDEO_LEVEL_H264_MIN, - VIRTIO_VIDEO_LEVEL_H264_1_1, - VIRTIO_VIDEO_LEVEL_H264_1_2, - VIRTIO_VIDEO_LEVEL_H264_1_3, - VIRTIO_VIDEO_LEVEL_H264_2_0, - VIRTIO_VIDEO_LEVEL_H264_2_1, - VIRTIO_VIDEO_LEVEL_H264_2_2, - VIRTIO_VIDEO_LEVEL_H264_3_0, - VIRTIO_VIDEO_LEVEL_H264_3_1, - VIRTIO_VIDEO_LEVEL_H264_3_2, - VIRTIO_VIDEO_LEVEL_H264_4_0, - VIRTIO_VIDEO_LEVEL_H264_4_1, - VIRTIO_VIDEO_LEVEL_H264_4_2, - VIRTIO_VIDEO_LEVEL_H264_5_0, - VIRTIO_VIDEO_LEVEL_H264_5_1, - VIRTIO_VIDEO_LEVEL_H264_MAX = VIRTIO_VIDEO_LEVEL_H264_5_1, -}; - -/* - * Config - */ - -struct virtio_video_config { - __le32 version; - __le32 max_caps_length; - __le32 max_resp_length; -}; - -/* - * Commands - */ - -enum virtio_video_cmd_type { - /* Command */ - VIRTIO_VIDEO_CMD_QUERY_CAPABILITY = 0x0100, - VIRTIO_VIDEO_CMD_STREAM_CREATE, - VIRTIO_VIDEO_CMD_STREAM_DESTROY, - VIRTIO_VIDEO_CMD_STREAM_DRAIN, - VIRTIO_VIDEO_CMD_RESOURCE_ATTACH, - VIRTIO_VIDEO_CMD_RESOURCE_QUEUE, - VIRTIO_VIDEO_CMD_QUEUE_DETACH_RESOURCES, - VIRTIO_VIDEO_CMD_QUEUE_CLEAR, - VIRTIO_VIDEO_CMD_GET_PARAMS, - VIRTIO_VIDEO_CMD_SET_PARAMS, - VIRTIO_VIDEO_CMD_QUERY_CONTROL, - VIRTIO_VIDEO_CMD_GET_CONTROL, - VIRTIO_VIDEO_CMD_SET_CONTROL, - - /* Response */ - VIRTIO_VIDEO_RESP_OK_NODATA = 0x0200, - VIRTIO_VIDEO_RESP_OK_QUERY_CAPABILITY, - VIRTIO_VIDEO_RESP_OK_RESOURCE_QUEUE, - VIRTIO_VIDEO_RESP_OK_GET_PARAMS, - VIRTIO_VIDEO_RESP_OK_QUERY_CONTROL, - VIRTIO_VIDEO_RESP_OK_GET_CONTROL, - - VIRTIO_VIDEO_RESP_ERR_INVALID_OPERATION = 0x0300, - VIRTIO_VIDEO_RESP_ERR_OUT_OF_MEMORY, - VIRTIO_VIDEO_RESP_ERR_INVALID_STREAM_ID, - VIRTIO_VIDEO_RESP_ERR_INVALID_RESOURCE_ID, - VIRTIO_VIDEO_RESP_ERR_INVALID_PARAMETER, - VIRTIO_VIDEO_RESP_ERR_UNSUPPORTED_CONTROL, -}; - -struct virtio_video_cmd_hdr { - __le32 type; /* One of enum virtio_video_cmd_type */ - __le32 stream_id; -}; - -/* VIRTIO_VIDEO_CMD_QUERY_CAPABILITY */ -enum virtio_video_queue_type { - VIRTIO_VIDEO_QUEUE_TYPE_INPUT = 0x100, - VIRTIO_VIDEO_QUEUE_TYPE_OUTPUT, -}; - -struct virtio_video_query_capability { - struct virtio_video_cmd_hdr hdr; - __le32 queue_type; /* One of VIRTIO_VIDEO_QUEUE_TYPE_* types */ - __u8 padding[4]; -}; - -enum virtio_video_planes_layout_flag { - VIRTIO_VIDEO_PLANES_LAYOUT_SINGLE_BUFFER = 1 << 0, - VIRTIO_VIDEO_PLANES_LAYOUT_PER_PLANE = 1 << 1, -}; - -struct virtio_video_format_range { - __le32 min; - __le32 max; - __le32 step; - __u8 padding[4]; -}; - -struct virtio_video_format_frame { - struct virtio_video_format_range width; - struct virtio_video_format_range height; - __le32 num_rates; - __u8 padding[4]; - /* Followed by struct virtio_video_format_range frame_rates[] */ -}; - -struct virtio_video_format_desc { - __le64 mask; - __le32 format; /* One of VIRTIO_VIDEO_FORMAT_* types */ - __le32 planes_layout; /* Bitmask with VIRTIO_VIDEO_PLANES_LAYOUT_* */ - __le32 plane_align; - __le32 num_frames; - /* Followed by struct virtio_video_format_frame frames[] */ -}; - -struct virtio_video_query_capability_resp { - struct virtio_video_cmd_hdr hdr; - __le32 num_descs; - __u8 padding[4]; - /* Followed by struct virtio_video_format_desc descs[] */ -}; - -/* VIRTIO_VIDEO_CMD_STREAM_CREATE */ -enum virtio_video_mem_type { - VIRTIO_VIDEO_MEM_TYPE_GUEST_PAGES, -}; - -struct virtio_video_stream_create { - struct virtio_video_cmd_hdr hdr; - __le32 in_mem_type; /* One of VIRTIO_VIDEO_MEM_TYPE_* types */ - __le32 out_mem_type; /* One of VIRTIO_VIDEO_MEM_TYPE_* types */ - __le32 coded_format; /* One of VIRTIO_VIDEO_FORMAT_* types */ - __u8 padding[4]; - __u8 tag[64]; -}; - -/* VIRTIO_VIDEO_CMD_STREAM_DESTROY */ -struct virtio_video_stream_destroy { - struct virtio_video_cmd_hdr hdr; -}; - -/* VIRTIO_VIDEO_CMD_STREAM_DRAIN */ -struct virtio_video_stream_drain { - struct virtio_video_cmd_hdr hdr; -}; - -/* VIRTIO_VIDEO_CMD_RESOURCE_ATTACH */ -struct virtio_video_resource_object { - __u8 uuid [16]; -}; - -struct virtio_video_resource_sg_entry { - __le64 addr; - __le32 length; - __u8 padding[4]; -}; - -struct virtio_video_resource_sg_list { - __le32 num_entries; - __u8 padding[4]; - struct virtio_video_resource_sg_entry entries[]; -}; -#define VIRTIO_VIDEO_RESOURCE_SG_SIZE(n) \ - offsetof(struct virtio_video_resource_sg_list, entries[n]) - -union virtio_video_resource { - struct virtio_video_resource_sg_list sg_list; - struct virtio_video_resource_object object; -}; - -struct virtio_video_resource_attach { - __le32 cmd_type; - __le32 stream_id; - __le32 queue_type; /* VIRTIO_VIDEO_QUEUE_TYPE_* */ - __le32 resource_id; - /* Followed by struct virtio_video_resource resources[] */ -}; - -/* VIRTIO_VIDEO_CMD_RESOURCE_QUEUE */ -struct virtio_video_resource_queue { - __le32 cmd_type; - __le32 stream_id; - __le32 queue_type; /* VIRTIO_VIDEO_QUEUE_TYPE_* */ - __le32 resource_id; - __le32 flags; /* Bitmask with VIRTIO_VIDEO_ENQUEUE_FLAG_ * */ - __u8 padding[4]; - __le64 timestamp; - __le32 data_sizes[VIRTIO_VIDEO_MAX_PLANES]; -}; - -enum virtio_video_dequeue_flag { - VIRTIO_VIDEO_DEQUEUE_FLAG_ERR = 0, - VIRTIO_VIDEO_DEQUEUE_FLAG_EOS, - - /* Encoder only */ - VIRTIO_VIDEO_DEQUEUE_FLAG_KEY_FRAME, - VIRTIO_VIDEO_DEQUEUE_FLAG_PFRAME, - VIRTIO_VIDEO_DEQUEUE_FLAG_BFRAME, -}; - -struct virtio_video_resource_queue_resp { - struct virtio_video_cmd_hdr hdr; - __le32 flags; - __le64 timestamp; - __le32 data_sizes[VIRTIO_VIDEO_MAX_PLANES]; -}; - -/* VIRTIO_VIDEO_CMD_QUEUE_DETACH_RESOURCES */ -struct virtio_video_queue_detach_resources { - __le32 cmd_type; - __le32 stream_id; - __le32 queue_type; /* One of VIRTIO_VIDEO_QUEUE_TYPE_* types */ - __u8 padding[4]; -}; - -/* VIRTIO_VIDEO_CMD_QUEUE_CLEAR */ -struct virtio_video_queue_clear { - struct virtio_video_cmd_hdr hdr; - __le32 queue_type; /* One of VIRTIO_VIDEO_QUEUE_TYPE_* types */ - __u8 padding[4]; -}; - -/* VIRTIO_VIDEO_CMD_GET_PARAMS */ -struct virtio_video_plane_format { - __le32 plane_size; - __le32 stride; -}; - -struct virtio_video_crop { - __le32 left; - __le32 top; - __le32 width; - __le32 height; -}; - -struct virtio_video_params { - __le32 queue_type; /* One of VIRTIO_VIDEO_QUEUE_TYPE_* types */ - __le32 format; /* One of VIRTIO_VIDEO_FORMAT_* types */ - __le32 frame_width; - __le32 frame_height; - __le32 min_buffers; - __le32 max_buffers; - struct virtio_video_crop crop; - __le32 frame_rate; - __le32 num_planes; - struct virtio_video_plane_format plane_formats[VIRTIO_VIDEO_MAX_PLANES]; -}; - -struct virtio_video_get_params { - struct virtio_video_cmd_hdr hdr; - __le32 queue_type; /* One of VIRTIO_VIDEO_QUEUE_TYPE_* types */ - __u8 padding[4]; -}; - -struct virtio_video_get_params_resp { - struct virtio_video_cmd_hdr hdr; - struct virtio_video_params params; -}; - -/* VIRTIO_VIDEO_CMD_SET_PARAMS */ -struct virtio_video_set_params { - struct virtio_video_cmd_hdr hdr; - struct virtio_video_params params; -}; - -/* VIRTIO_VIDEO_CMD_QUERY_CONTROL */ -enum virtio_video_control_type { - VIRTIO_VIDEO_CONTROL_BITRATE = 1, - VIRTIO_VIDEO_CONTROL_PROFILE, - VIRTIO_VIDEO_CONTROL_LEVEL, -}; - -struct virtio_video_query_control_profile { - __le32 format; /* One of VIRTIO_VIDEO_FORMAT_* */ - __u8 padding[4]; -}; - -struct virtio_video_query_control_level { - __le32 format; /* One of VIRTIO_VIDEO_FORMAT_* */ - __u8 padding[4]; -}; - -struct virtio_video_query_control { - struct virtio_video_cmd_hdr hdr; - __le32 control; /* One of VIRTIO_VIDEO_CONTROL_* types */ - __u8 padding[4]; - /* - * Followed by a value of struct virtio_video_query_control_* - * in accordance with the value of control. - */ -}; - -struct virtio_video_query_control_resp_profile { - __le32 num; - __u8 padding[4]; - /* Followed by an array le32 profiles[] */ -}; - -struct virtio_video_query_control_resp_level { - __le32 num; - __u8 padding[4]; - /* Followed by an array le32 level[] */ -}; - -struct virtio_video_query_control_resp { - struct virtio_video_cmd_hdr hdr; - /* Followed by one of struct virtio_video_query_control_resp_* */ -}; - -/* VIRTIO_VIDEO_CMD_GET_CONTROL */ -struct virtio_video_get_control { - struct virtio_video_cmd_hdr hdr; - __le32 control; /* One of VIRTIO_VIDEO_CONTROL_* types */ - __u8 padding[4]; -}; - -struct virtio_video_control_val_bitrate { - __le32 bitrate; - __u8 padding[4]; -}; - -struct virtio_video_control_val_profile { - __le32 profile; - __u8 padding[4]; -}; - -struct virtio_video_control_val_level { - __le32 level; - __u8 padding[4]; -}; - -struct virtio_video_get_control_resp { - struct virtio_video_cmd_hdr hdr; - /* Followed by one of struct virtio_video_control_val_* */ -}; - -/* VIRTIO_VIDEO_CMD_SET_CONTROL */ -struct virtio_video_set_control { - struct virtio_video_cmd_hdr hdr; - __le32 control; /* One of VIRTIO_VIDEO_CONTROL_* types */ - __u8 padding[4]; - /* Followed by one of struct virtio_video_control_val_* */ -}; - -struct virtio_video_set_control_resp { - struct virtio_video_cmd_hdr hdr; -}; - -/* - * Events - */ - -enum virtio_video_event_type { - /* For all devices */ - VIRTIO_VIDEO_EVENT_ERROR = 0x0100, - - /* For decoder only */ - VIRTIO_VIDEO_EVENT_DECODER_RESOLUTION_CHANGED = 0x0200, -}; - -struct virtio_video_event { - __le32 event_type; /* One of VIRTIO_VIDEO_EVENT_* types */ - __le32 stream_id; -}; - -#endif /* _UAPI_LINUX_VIRTIO_VIDEO_H */ -- cgit 1.2.3-korg