Skip to contentSkip to conversation

bus: add vmbus support

PATCH New Stephen Hemminger 1 participant 1 message Nov 29, 2017

lore
Share & tools
lore
#0 lore raw

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
index f0baeb4230c2..844373249f3a 100644
@@ -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
index e74febef4848..e02f21ad2004 100644
@@ -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
index c20beb438781..526218e3b6f1 100644
@@ -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
new file mode 100644
index 000000000000..97ece2a0c146
@@ -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
new file mode 100644
index 000000000000..94f2f3b439a4
@@ -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
new file mode 100644
index 000000000000..f61daf015a53
@@ -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
new file mode 100644
index 000000000000..be21ac1b2cbf
@@ -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
new file mode 100644
index 000000000000..cdc6620651a6
@@ -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
index 6a6a7452e2f9..203b7a8c95fe 100644
@@ -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