bus: add vmbus support
PATCH v3 1/1 bus: add vmbus support
From: Stephen Hemminger <[email protected]>
This patch adds support for an additional bus type VMBUS. Virtual Machine BUS is used on Microsoft Hyper-V in Windows 10, Windows Server 2016 and Azure.
Most of this code was extracted from FreeBSD and some of this is from earlier code donated by Brocade.
Only Linux is supported at present, but the code is split to allow future FreeBSD and Windows support.
The bus support is generally useful for doing device detection such as TAP PMD and failsafe PMD. Doing user-mode PMD for Hyper-V requires this bus support as well the uio_hv_generic which is in upstream Linux already.
---
v3 - use SPDX for signify BSD 3-clause license
add config_base entry
v2 - fix checkpatch complaints
MAINTAINERS | 3 + config/common_base | 5 + drivers/bus/Makefile | 3 + drivers/bus/vmbus/Makefile | 10 + drivers/bus/vmbus/common/Makefile | 9 + drivers/bus/vmbus/common/common_bufring.c | 211 ++++++++++++ drivers/bus/vmbus/common/common_chan.c | 278 ++++++++++++++++ drivers/bus/vmbus/common/common_uio.c | 228 +++++++++++++ drivers/bus/vmbus/common/common_vmbus.c | 282 ++++++++++++++++ drivers/bus/vmbus/common/include/rte_vmbus.h | 356 ++++++++++++++++++++ drivers/bus/vmbus/common/include/vmbus_logs.h | 14 + drivers/bus/vmbus/common/include/vmbus_reg.h | 360 +++++++++++++++++++++ drivers/bus/vmbus/common/vmbus_private.h | 113 +++++++ drivers/bus/vmbus/linuxapp/Makefile | 22 ++ .../bus/vmbus/linuxapp/rte_bus_vmbus_version.map | 22 ++ drivers/bus/vmbus/linuxapp/vmbus_bus.c | 351 ++++++++++++++++++++ drivers/bus/vmbus/linuxapp/vmbus_uio.c | 183 +++++++++++ mk/rte.app.mk | 2 + 18 files changed, 2452 insertions(+) create mode 100644 drivers/bus/vmbus/Makefile create mode 100644 drivers/bus/vmbus/common/Makefile create mode 100644 drivers/bus/vmbus/common/common_bufring.c create mode 100644 drivers/bus/vmbus/common/common_chan.c create mode 100644 drivers/bus/vmbus/common/common_uio.c create mode 100644 drivers/bus/vmbus/common/common_vmbus.c create mode 100644 drivers/bus/vmbus/common/include/rte_vmbus.h create mode 100644 drivers/bus/vmbus/common/include/vmbus_logs.h create mode 100644 drivers/bus/vmbus/common/include/vmbus_reg.h create mode 100644 drivers/bus/vmbus/common/vmbus_private.h create mode 100644 drivers/bus/vmbus/linuxapp/Makefile create mode 100644 drivers/bus/vmbus/linuxapp/rte_bus_vmbus_version.map create mode 100644 drivers/bus/vmbus/linuxapp/vmbus_bus.c create mode 100644 drivers/bus/vmbus/linuxapp/vmbus_uio.c
MAINTAINERS +3 -0
@@ -309,6 +309,9 @@ VDEV bus driver M: Jianfeng Tan <[email protected]> F: drivers/bus/vdev/ +VMBUS bus driver +M: Stephen Hemminger <[email protected]> +F: drivers/bus/vmbus/ Networking Drivers ------------------
config/common_base +5 -0
@@ -426,6 +426,11 @@ CONFIG_RTE_LIBRTE_QEDE_FW="" CONFIG_RTE_LIBRTE_PMD_AF_PACKET=n # +# Compile Hyper-V VMBUS +# +CONFIG_RTE_VMBUS=n + +# # Compile ARK PMD # CONFIG_RTE_LIBRTE_ARK_PMD=y
drivers/bus/Makefile +3 -0
@@ -35,4 +35,7 @@ DIRS-$(CONFIG_RTE_LIBRTE_FSLMC_BUS) += fslmc DIRS-$(CONFIG_RTE_LIBRTE_PCI_BUS) += pci DIRS-$(CONFIG_RTE_LIBRTE_VDEV_BUS) += vdev +DIRS-$(CONFIG_RTE_VMBUS) += vmbus +DEPDIRS-vmbus = $(core-libs) + include $(RTE_SDK)/mk/rte.subdir.mk
drivers/bus/vmbus/Makefile new file +10 -0
@@ -0,0 +1,10 @@ +# SPDX-License-Identifier: BSD-3-Clause + +include $(RTE_SDK)/mk/rte.vars.mk + +DIRS-y += common +DIRS-y += linuxapp + +DEPDIRS-linuxapp := common + +include $(RTE_SDK)/mk/rte.subdir.mk
drivers/bus/vmbus/common/Makefile new file +9 -0
@@ -0,0 +1,9 @@ +# SPDX-License-Identifier: BSD-3-Clause + +include $(RTE_SDK)/mk/rte.vars.mk + +INC += rte_vmbus.h vmbus_reg.h + +SYMLINK-$(CONFIG_RTE_LIBRTE_EAL)-include := $(addprefix include/,$(INC)) + +include $(RTE_SDK)/mk/rte.install.mk
drivers/bus/vmbus/common/common_bufring.c new file +211 -0
211 lines not on this page · raw message
drivers/bus/vmbus/common/common_chan.c new file +278 -0
278 lines not on this page · raw message
drivers/bus/vmbus/common/common_uio.c new file +228 -0
228 lines not on this page · raw message
drivers/bus/vmbus/common/common_vmbus.c new file +282 -0
282 lines not on this page · raw message
drivers/bus/vmbus/common/include/rte_vmbus.h new file +356 -0
356 lines not on this page · raw message
drivers/bus/vmbus/common/include/vmbus_logs.h new file +14 -0
@@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ + +#ifndef _VMBUS_LOGS_H_ +#define _VMBUS_LOGS_H_ + +#include <rte_log.h> + +extern int vmbus_logtype_bus; + +#define VMBUS_LOG(level, fmt, args...) \ + rte_log(RTE_LOG_ ## level, vmbus_logtype_bus, "%s(): " fmt "\n", \ + __func__, ##args) + +#endif /* _VMBUS_LOGS_H_ */
drivers/bus/vmbus/common/include/vmbus_reg.h new file +360 -0
360 lines not on this page · raw message
drivers/bus/vmbus/common/vmbus_private.h new file +113 -0
113 lines not on this page · raw message
drivers/bus/vmbus/linuxapp/Makefile new file +22 -0
@@ -0,0 +1,22 @@ +# SPDX-License-Identifier: BSD-3-Clause + +include $(RTE_SDK)/mk/rte.vars.mk + +LIB = librte_bus_vmbus.a + +EXPORT_MAP := rte_bus_vmbus_version.map + +LIBABIVER := 1 + +VPATH += $(RTE_SDK)/drivers/bus/vmbus/common + +CFLAGS += -I$(RTE_SDK)/drivers/bus/vmbus/common/ +CFLAGS += -I$(RTE_SDK)/drivers/bus/vmbus/common/include/ +CFLAGS += $(WERROR_FLAGS) -O3 + +LDLIBS += -luuid + +SRCS-y += vmbus_bus.c vmbus_uio.c +SRCS-y += common_vmbus.c common_uio.c common_chan.c common_bufring.c + +include $(RTE_SDK)/mk/rte.lib.mk
drivers/bus/vmbus/linuxapp/rte_bus_vmbus_version.map new file +22 -0
@@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ +DPDK_17.08 { + global: + + rte_vmbus_chan_close; + rte_vmbus_chan_open; + rte_vmbus_chan_recv; + rte_vmbus_chan_send; + rte_vmbus_chan_send_sglist; + rte_vmbus_irq_mask; + rte_vmbus_irq_read; + rte_vmbus_irq_unmask; + rte_vmbus_map_device; + rte_vmbus_probe; + rte_vmbus_probe_one; + rte_vmbus_register; + rte_vmbus_scan; + rte_vmbus_unmap_device; + rte_vmbus_unregister; + + local: *; +};
drivers/bus/vmbus/linuxapp/vmbus_bus.c new file +351 -0
351 lines not on this page · raw message
drivers/bus/vmbus/linuxapp/vmbus_uio.c new file +183 -0
183 lines not on this page · raw message
mk/rte.app.mk +2 -0
@@ -162,6 +162,8 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_VHOST) += -lrte_pmd_vhost endif # $(CONFIG_RTE_LIBRTE_VHOST) _LDLIBS-$(CONFIG_RTE_LIBRTE_VMXNET3_PMD) += -lrte_pmd_vmxnet3_uio +_LDLIBS-$(CONFIG_RTE_VMBUS) += -lrte_bus_vmbus -luuid + ifeq ($(CONFIG_RTE_LIBRTE_CRYPTODEV),y) _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_MB) += -lrte_pmd_aesni_mb _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_MB) += -L$(AESNI_MULTI_BUFFER_LIB_PATH) -lIPSec_MB
Signature · 1 line
2.11.0