Move vhost-vdpa backend implementation into common folder. Signed-off-by: Gowrishankar Muthukrishnan <gmuthukri...@marvell.com> --- drivers/common/virtio/meson.build | 13 +++++++++ drivers/common/virtio/version.map | 9 ++++++ .../virtio/virtio_user/vhost.h | 2 -- .../virtio/virtio_user/vhost_vdpa.c | 29 ++++++++++++++++++- drivers/crypto/virtio/meson.build | 2 +- drivers/crypto/virtio/virtio_cryptodev.c | 2 -- drivers/meson.build | 1 + drivers/net/virtio/meson.build | 1 - drivers/net/virtio/virtio_ethdev.c | 2 -- drivers/net/virtio/virtio_user/vhost_kernel.c | 4 ++- drivers/net/virtio/virtio_user/vhost_user.c | 2 +- .../net/virtio/virtio_user/virtio_user_dev.c | 6 ++-- .../net/virtio/virtio_user/virtio_user_dev.h | 24 ++++++++------- drivers/net/virtio/virtio_user_ethdev.c | 2 +- 14 files changed, 75 insertions(+), 24 deletions(-) create mode 100644 drivers/common/virtio/meson.build create mode 100644 drivers/common/virtio/version.map rename drivers/{net => common}/virtio/virtio_user/vhost.h (98%) rename drivers/{net => common}/virtio/virtio_user/vhost_vdpa.c (96%)
diff --git a/drivers/common/virtio/meson.build b/drivers/common/virtio/meson.build new file mode 100644 index 0000000000..5ea5dc5d57 --- /dev/null +++ b/drivers/common/virtio/meson.build @@ -0,0 +1,13 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2024 Marvell + +if is_windows + build = false + reason = 'not supported on Windows' + subdir_done() +endif + +if is_linux + sources += files('virtio_user/vhost_vdpa.c') + deps += ['bus_vdev'] +endif diff --git a/drivers/common/virtio/version.map b/drivers/common/virtio/version.map new file mode 100644 index 0000000000..a1e45cd354 --- /dev/null +++ b/drivers/common/virtio/version.map @@ -0,0 +1,9 @@ +INTERNAL { + global: + + virtio_ops_vdpa; + virtio_logtype_init; + virtio_logtype_driver; + + local: *; +}; diff --git a/drivers/net/virtio/virtio_user/vhost.h b/drivers/common/virtio/virtio_user/vhost.h similarity index 98% rename from drivers/net/virtio/virtio_user/vhost.h rename to drivers/common/virtio/virtio_user/vhost.h index eee3a4bc47..50b089a5dc 100644 --- a/drivers/net/virtio/virtio_user/vhost.h +++ b/drivers/common/virtio/virtio_user/vhost.h @@ -11,9 +11,7 @@ #include <rte_errno.h> -#include "../virtio.h" #include "../virtio_logs.h" -#include "../virtqueue.h" struct vhost_vring_state { unsigned int index; diff --git a/drivers/net/virtio/virtio_user/vhost_vdpa.c b/drivers/common/virtio/virtio_user/vhost_vdpa.c similarity index 96% rename from drivers/net/virtio/virtio_user/vhost_vdpa.c rename to drivers/common/virtio/virtio_user/vhost_vdpa.c index 77e2fd62d8..c32cfdeb18 100644 --- a/drivers/net/virtio/virtio_user/vhost_vdpa.c +++ b/drivers/common/virtio/virtio_user/vhost_vdpa.c @@ -12,7 +12,8 @@ #include <rte_memory.h> -#include "../virtio_net_logs.h" +#include "vhost.h" +#include "../virtio_logs.h" struct vhost_vdpa_data { int vhostfd; @@ -99,6 +100,29 @@ vhost_vdpa_ioctl(int fd, uint64_t request, void *arg) return 0; } +struct virtio_hw { + struct virtqueue **vqs; +}; + +struct virtio_user_dev { + union { + struct virtio_hw hw; + uint8_t dummy[256]; + }; + + void *backend_data; + uint16_t **notify_area; + char path[PATH_MAX]; + bool hw_cvq; + uint16_t max_queue_pairs; + uint64_t device_features; + bool *qp_enabled; +}; + +#define VIRTIO_NET_F_CTRL_VQ 17 +#define VIRTIO_F_IOMMU_PLATFORM 33 +#define VIRTIO_ID_NETWORK 0x01 + static int vhost_vdpa_set_owner(struct virtio_user_dev *dev) { @@ -714,3 +738,6 @@ struct virtio_user_backend_ops virtio_ops_vdpa = { .map_notification_area = vhost_vdpa_map_notification_area, .unmap_notification_area = vhost_vdpa_unmap_notification_area, }; + +RTE_LOG_REGISTER_SUFFIX(virtio_logtype_init, init, NOTICE); +RTE_LOG_REGISTER_SUFFIX(virtio_logtype_driver, driver, NOTICE); diff --git a/drivers/crypto/virtio/meson.build b/drivers/crypto/virtio/meson.build index 6c082a3112..a4954a094b 100644 --- a/drivers/crypto/virtio/meson.build +++ b/drivers/crypto/virtio/meson.build @@ -9,7 +9,7 @@ endif includes += include_directories('../../../lib/vhost') includes += include_directories('../../common/virtio') -deps += 'bus_pci' +deps += ['bus_pci', 'common_virtio'] sources = files( 'virtio_cryptodev.c', 'virtio_cvq.c', diff --git a/drivers/crypto/virtio/virtio_cryptodev.c b/drivers/crypto/virtio/virtio_cryptodev.c index b31e7ea0cf..159e96f7db 100644 --- a/drivers/crypto/virtio/virtio_cryptodev.c +++ b/drivers/crypto/virtio/virtio_cryptodev.c @@ -1749,8 +1749,6 @@ RTE_PMD_REGISTER_PCI(CRYPTODEV_NAME_VIRTIO_PMD, rte_virtio_crypto_driver); RTE_PMD_REGISTER_CRYPTO_DRIVER(virtio_crypto_drv, rte_virtio_crypto_driver.driver, cryptodev_virtio_driver_id); -RTE_LOG_REGISTER_SUFFIX(virtio_logtype_init, init, NOTICE); RTE_LOG_REGISTER_SUFFIX(virtio_crypto_logtype_session, session, NOTICE); RTE_LOG_REGISTER_SUFFIX(virtio_crypto_logtype_rx, rx, NOTICE); RTE_LOG_REGISTER_SUFFIX(virtio_crypto_logtype_tx, tx, NOTICE); -RTE_LOG_REGISTER_SUFFIX(virtio_logtype_driver, driver, NOTICE); diff --git a/drivers/meson.build b/drivers/meson.build index 495e21b54a..2f0d312479 100644 --- a/drivers/meson.build +++ b/drivers/meson.build @@ -17,6 +17,7 @@ subdirs = [ 'common/nitrox', # depends on bus. 'common/qat', # depends on bus. 'common/sfc_efx', # depends on bus. + 'common/virtio', # depends on bus. 'mempool', # depends on common and bus. 'dma', # depends on common and bus. 'net', # depends on common, bus, mempool diff --git a/drivers/net/virtio/meson.build b/drivers/net/virtio/meson.build index 6331366712..bc80d45efc 100644 --- a/drivers/net/virtio/meson.build +++ b/drivers/net/virtio/meson.build @@ -55,7 +55,6 @@ if is_linux 'virtio_user/vhost_kernel.c', 'virtio_user/vhost_kernel_tap.c', 'virtio_user/vhost_user.c', - 'virtio_user/vhost_vdpa.c', 'virtio_user/virtio_user_dev.c') deps += ['bus_vdev', 'common_virtio'] endif diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c index 491b75ec19..b257c9cfc4 100644 --- a/drivers/net/virtio/virtio_ethdev.c +++ b/drivers/net/virtio/virtio_ethdev.c @@ -2712,5 +2712,3 @@ __rte_unused uint8_t is_rx) return 0; } -RTE_LOG_REGISTER_SUFFIX(virtio_logtype_init, init, NOTICE); -RTE_LOG_REGISTER_SUFFIX(virtio_logtype_driver, driver, NOTICE); diff --git a/drivers/net/virtio/virtio_user/vhost_kernel.c b/drivers/net/virtio/virtio_user/vhost_kernel.c index e42bb35935..b48a1e058d 100644 --- a/drivers/net/virtio/virtio_user/vhost_kernel.c +++ b/drivers/net/virtio/virtio_user/vhost_kernel.c @@ -11,9 +11,11 @@ #include <rte_memory.h> -#include "vhost.h" +#include "virtio_user/vhost.h" + #include "virtio_user_dev.h" #include "vhost_kernel_tap.h" +#include "../virtqueue.h" struct vhost_kernel_data { int *vhostfds; diff --git a/drivers/net/virtio/virtio_user/vhost_user.c b/drivers/net/virtio/virtio_user/vhost_user.c index c10252506b..3f8ece914a 100644 --- a/drivers/net/virtio/virtio_user/vhost_user.c +++ b/drivers/net/virtio/virtio_user/vhost_user.c @@ -16,7 +16,7 @@ #include <rte_string_fns.h> #include <rte_fbarray.h> -#include "vhost.h" +#include "virtio_user/vhost.h" #include "virtio_user_dev.h" struct vhost_user_data { diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c b/drivers/net/virtio/virtio_user/virtio_user_dev.c index 2997d2bd26..87ebb2cba3 100644 --- a/drivers/net/virtio/virtio_user/virtio_user_dev.c +++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c @@ -20,10 +20,12 @@ #include <rte_malloc.h> #include <rte_io.h> -#include "vhost.h" -#include "virtio.h" +#include "virtio_user/vhost.h" + #include "virtio_user_dev.h" +#include "../virtqueue.h" #include "../virtio_ethdev.h" +#include "../virtio_net_logs.h" #define VIRTIO_USER_MEM_EVENT_CLB_NAME "virtio_user_mem_event_clb" diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.h b/drivers/net/virtio/virtio_user/virtio_user_dev.h index 66400b3b62..70604d6956 100644 --- a/drivers/net/virtio/virtio_user/virtio_user_dev.h +++ b/drivers/net/virtio/virtio_user/virtio_user_dev.h @@ -25,26 +25,36 @@ struct virtio_user_queue { }; struct virtio_user_dev { - struct virtio_hw hw; + union { + struct virtio_hw hw; + uint8_t dummy[256]; + }; + + void *backend_data; + uint16_t **notify_area; + char path[PATH_MAX]; + bool hw_cvq; + uint16_t max_queue_pairs; + uint64_t device_features; /* supported features by device */ + bool *qp_enabled; + enum virtio_user_backend_type backend_type; bool is_server; /* server or client mode */ int *callfds; int *kickfds; int mac_specified; - uint16_t max_queue_pairs; + uint16_t queue_pairs; uint32_t queue_size; uint64_t features; /* the negotiated features with driver, * and will be sync with device */ - uint64_t device_features; /* supported features by device */ uint64_t frontend_features; /* enabled frontend features */ uint64_t unsupported_features; /* unsupported features mask */ uint8_t status; uint16_t net_status; uint8_t mac_addr[RTE_ETHER_ADDR_LEN]; - char path[PATH_MAX]; char *ifname; union { @@ -54,18 +64,12 @@ struct virtio_user_dev { } vrings; struct virtio_user_queue *packed_queues; - bool *qp_enabled; struct virtio_user_backend_ops *ops; pthread_mutex_t mutex; bool started; - bool hw_cvq; struct virtqueue *scvq; - - void *backend_data; - - uint16_t **notify_area; }; int virtio_user_dev_set_features(struct virtio_user_dev *dev); diff --git a/drivers/net/virtio/virtio_user_ethdev.c b/drivers/net/virtio/virtio_user_ethdev.c index fda6634c94..41e78e57fb 100644 --- a/drivers/net/virtio/virtio_user_ethdev.c +++ b/drivers/net/virtio/virtio_user_ethdev.c @@ -21,13 +21,13 @@ #include <rte_io.h> #include "virtio_net_logs.h" +#include "virtio_user/vhost.h" #include "virtio_ethdev.h" #include "virtio.h" #include "virtqueue.h" #include "virtio_rxtx.h" #include "virtio_user/virtio_user_dev.h" -#include "virtio_user/vhost.h" #define virtio_user_get_dev(hwp) container_of(hwp, struct virtio_user_dev, hw) -- 2.25.1