From b023e638a1e309d49c517d48524746d455f70709 Mon Sep 17 00:00:00 2001 From: Changpeng Liu Date: Wed, 3 Nov 2021 22:05:41 +0800 Subject: [PATCH] nvmf/ctrlr: let transport can set VID SSVID and IEEE values The nvmf library will use INTEL VID/SSVID/IEEE values by default, each transport can overwrite them if needed. Change-Id: I9dad521c4d080b6f0cc1aaeb4b5d5f6863c6846d Signed-off-by: Changpeng Liu Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/10095 Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Jim Harris --- include/spdk/nvmf_transport.h | 6 ++++++ lib/nvmf/Makefile | 2 +- lib/nvmf/ctrlr.c | 12 ++++++++++++ lib/nvmf/vfio_user.c | 7 ++++++- 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/include/spdk/nvmf_transport.h b/include/spdk/nvmf_transport.h index 8cc7c074c..ba268e2d7 100644 --- a/include/spdk/nvmf_transport.h +++ b/include/spdk/nvmf_transport.h @@ -200,6 +200,12 @@ struct spdk_nvmf_listener { */ struct spdk_nvmf_ctrlr_data { uint16_t kas; + /** pci vendor id */ + uint16_t vid; + /** pci subsystem vendor id */ + uint16_t ssvid; + /** ieee oui identifier */ + uint8_t ieee[3]; struct spdk_nvme_cdata_oncs oncs; struct spdk_nvme_cdata_sgls sgls; struct spdk_nvme_cdata_nvmf_specific nvmf_specific; diff --git a/lib/nvmf/Makefile b/lib/nvmf/Makefile index 4819dee36..fdf512f69 100644 --- a/lib/nvmf/Makefile +++ b/lib/nvmf/Makefile @@ -34,7 +34,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk -SO_VER := 10 +SO_VER := 11 SO_MINOR := 0 C_SRCS = ctrlr.c ctrlr_discovery.c ctrlr_bdev.c \ diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index ea7244f73..966d503e9 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -305,6 +305,12 @@ nvmf_ctrlr_cdata_init(struct spdk_nvmf_transport *transport, struct spdk_nvmf_su struct spdk_nvmf_ctrlr_data *cdata) { cdata->kas = KAS_DEFAULT_VALUE; + cdata->vid = SPDK_PCI_VID_INTEL; + cdata->ssvid = SPDK_PCI_VID_INTEL; + /* INTEL OUI */ + cdata->ieee[0] = 0xe4; + cdata->ieee[1] = 0xd2; + cdata->ieee[2] = 0x5c; cdata->oncs.reservations = 1; cdata->sgls.supported = 1; cdata->sgls.keyed_sgl = 1; @@ -2514,6 +2520,12 @@ spdk_nvmf_ctrlr_identify_ctrlr(struct spdk_nvmf_ctrlr *ctrlr, struct spdk_nvme_c */ cdata->oaes.discovery_log_change_notices = 1; } else { + cdata->vid = ctrlr->cdata.vid; + cdata->ssvid = ctrlr->cdata.ssvid; + cdata->ieee[0] = ctrlr->cdata.ieee[0]; + cdata->ieee[1] = ctrlr->cdata.ieee[1]; + cdata->ieee[2] = ctrlr->cdata.ieee[2]; + /* * NVM subsystem fields (reserved for discovery subsystems) */ diff --git a/lib/nvmf/vfio_user.c b/lib/nvmf/vfio_user.c index ce3c1ff69..b2c207711 100644 --- a/lib/nvmf/vfio_user.c +++ b/lib/nvmf/vfio_user.c @@ -1884,7 +1884,7 @@ vfio_user_dev_info_fill(struct nvmf_vfio_user_transport *vu_transport, SPDK_ERRLOG("vfu_ctx %p failed to initialize PCI\n", vfu_ctx); return ret; } - vfu_pci_set_id(vfu_ctx, 0x4e58, 0x0001, 0, 0); + vfu_pci_set_id(vfu_ctx, 0x4e58, 0x0001, 0x4e58, 0); /* * 0x02, controller uses the NVM Express programming interface * 0x08, non-volatile memory controller @@ -2185,6 +2185,11 @@ nvmf_vfio_user_cdata_init(struct spdk_nvmf_transport *transport, struct spdk_nvmf_subsystem *subsystem, struct spdk_nvmf_ctrlr_data *cdata) { + cdata->vid = 0x4e58; + cdata->ssvid = 0x4e58; + cdata->ieee[0] = 0x8d; + cdata->ieee[1] = 0x6b; + cdata->ieee[2] = 0x50; memset(&cdata->sgls, 0, sizeof(struct spdk_nvme_cdata_sgls)); cdata->sgls.supported = SPDK_NVME_SGLS_SUPPORTED_DWORD_ALIGNED; /* libvfio-user can only support 1 connection for now */