All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
To: Ferruh Yigit <ferruh.yigit@intel.com>
Cc: dev@dpdk.org, Vijay Kumar Srivastava <vsrivast@xilinx.com>
Subject: [dpdk-dev] [PATCH v2 5/8] common/sfc_efx/base: add support to verify virtio features
Date: Mon, 15 Mar 2021 16:58:20 +0300	[thread overview]
Message-ID: <20210315135823.605774-6-andrew.rybchenko@oktetlabs.ru> (raw)
In-Reply-To: <20210315135823.605774-1-andrew.rybchenko@oktetlabs.ru>

From: Vijay Kumar Srivastava <vsrivast@xilinx.com>

Add an API to verify virtio features supported by device.

Signed-off-by: Vijay Kumar Srivastava <vsrivast@xilinx.com>
Signed-off-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
---
 drivers/common/sfc_efx/base/efx.h          |  7 ++++
 drivers/common/sfc_efx/base/efx_impl.h     |  2 +
 drivers/common/sfc_efx/base/efx_virtio.c   | 38 +++++++++++++++++++
 drivers/common/sfc_efx/base/rhead_impl.h   |  7 ++++
 drivers/common/sfc_efx/base/rhead_virtio.c | 44 ++++++++++++++++++++++
 5 files changed, 98 insertions(+)

diff --git a/drivers/common/sfc_efx/base/efx.h b/drivers/common/sfc_efx/base/efx.h
index e3ac51eae0..ff5091a36b 100644
--- a/drivers/common/sfc_efx/base/efx.h
+++ b/drivers/common/sfc_efx/base/efx.h
@@ -4501,6 +4501,13 @@ efx_virtio_get_features(
 	__in		efx_virtio_device_type_t type,
 	__out		uint64_t *featuresp);
 
+LIBEFX_API
+extern	__checkReturn	efx_rc_t
+efx_virtio_verify_features(
+	__in		efx_nic_t *enp,
+	__in		efx_virtio_device_type_t type,
+	__in		uint64_t features);
+
 #endif /* EFSYS_OPT_VIRTIO */
 
 #ifdef	__cplusplus
diff --git a/drivers/common/sfc_efx/base/efx_impl.h b/drivers/common/sfc_efx/base/efx_impl.h
index 758206d382..aa878014c1 100644
--- a/drivers/common/sfc_efx/base/efx_impl.h
+++ b/drivers/common/sfc_efx/base/efx_impl.h
@@ -320,6 +320,8 @@ typedef struct efx_virtio_ops_s {
 				uint32_t *);
 	efx_rc_t	(*evo_get_features)(efx_nic_t *,
 				efx_virtio_device_type_t, uint64_t *);
+	efx_rc_t	(*evo_verify_features)(efx_nic_t *,
+				efx_virtio_device_type_t, uint64_t);
 } efx_virtio_ops_t;
 #endif /* EFSYS_OPT_VIRTIO */
 
diff --git a/drivers/common/sfc_efx/base/efx_virtio.c b/drivers/common/sfc_efx/base/efx_virtio.c
index 20c22f02b5..b46997c09e 100644
--- a/drivers/common/sfc_efx/base/efx_virtio.c
+++ b/drivers/common/sfc_efx/base/efx_virtio.c
@@ -14,6 +14,7 @@ static const efx_virtio_ops_t	__efx_virtio_rhead_ops = {
 	rhead_virtio_qstop,			/* evo_virtio_qstop */
 	rhead_virtio_get_doorbell_offset,	/* evo_get_doorbell_offset */
 	rhead_virtio_get_features,		/* evo_get_features */
+	rhead_virtio_verify_features,		/* evo_verify_features */
 };
 #endif /* EFSYS_OPT_RIVERHEAD */
 
@@ -299,4 +300,41 @@ efx_virtio_get_features(
 	return (rc);
 }
 
+	__checkReturn	efx_rc_t
+efx_virtio_verify_features(
+	__in		efx_nic_t *enp,
+	__in		efx_virtio_device_type_t type,
+	__in		uint64_t features)
+{
+	const efx_virtio_ops_t *evop = enp->en_evop;
+	efx_rc_t rc;
+
+	if (type >= EFX_VIRTIO_DEVICE_NTYPES) {
+		rc = EINVAL;
+		goto fail1;
+	}
+
+	EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
+	EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_VIRTIO);
+
+	if (evop == NULL) {
+		rc = ENOTSUP;
+		goto fail2;
+	}
+
+	if ((rc = evop->evo_verify_features(enp, type, features)) != 0)
+		goto fail3;
+
+	return (0);
+
+fail3:
+	EFSYS_PROBE(fail3);
+fail2:
+	EFSYS_PROBE(fail2);
+fail1:
+	EFSYS_PROBE1(fail1, efx_rc_t, rc);
+
+	return (rc);
+}
+
 #endif /* EFSYS_OPT_VIRTIO */
diff --git a/drivers/common/sfc_efx/base/rhead_impl.h b/drivers/common/sfc_efx/base/rhead_impl.h
index 69d701a47e..3bf9beceb0 100644
--- a/drivers/common/sfc_efx/base/rhead_impl.h
+++ b/drivers/common/sfc_efx/base/rhead_impl.h
@@ -505,6 +505,13 @@ rhead_virtio_get_features(
 	__in				efx_virtio_device_type_t type,
 	__out				uint64_t *featuresp);
 
+LIBEFX_INTERNAL
+extern	__checkReturn			efx_rc_t
+rhead_virtio_verify_features(
+	__in				efx_nic_t *enp,
+	__in				efx_virtio_device_type_t type,
+	__in				uint64_t features);
+
 #endif /* EFSYS_OPT_VIRTIO */
 
 #ifdef	__cplusplus
diff --git a/drivers/common/sfc_efx/base/rhead_virtio.c b/drivers/common/sfc_efx/base/rhead_virtio.c
index 508d03d58f..0023ea1e83 100644
--- a/drivers/common/sfc_efx/base/rhead_virtio.c
+++ b/drivers/common/sfc_efx/base/rhead_virtio.c
@@ -332,4 +332,48 @@ rhead_virtio_get_features(
 	return (rc);
 }
 
+	__checkReturn	efx_rc_t
+rhead_virtio_verify_features(
+	__in		efx_nic_t *enp,
+	__in		efx_virtio_device_type_t type,
+	__in		uint64_t features)
+{
+	efx_mcdi_req_t req;
+	EFX_MCDI_DECLARE_BUF(payload, MC_CMD_VIRTIO_TEST_FEATURES_IN_LEN,
+		MC_CMD_VIRTIO_TEST_FEATURES_OUT_LEN);
+	efx_rc_t rc;
+
+	EFX_STATIC_ASSERT(EFX_VIRTIO_DEVICE_TYPE_NET ==
+		MC_CMD_VIRTIO_GET_FEATURES_IN_NET);
+	EFX_STATIC_ASSERT(EFX_VIRTIO_DEVICE_TYPE_BLOCK ==
+		MC_CMD_VIRTIO_GET_FEATURES_IN_BLOCK);
+
+	req.emr_cmd = MC_CMD_VIRTIO_TEST_FEATURES;
+	req.emr_in_buf = payload;
+	req.emr_in_length = MC_CMD_VIRTIO_TEST_FEATURES_IN_LEN;
+	req.emr_out_buf = payload;
+	req.emr_out_length = MC_CMD_VIRTIO_TEST_FEATURES_OUT_LEN;
+
+	MCDI_IN_SET_DWORD(req, VIRTIO_TEST_FEATURES_IN_DEVICE_ID, type);
+
+	MCDI_IN_SET_DWORD(req, VIRTIO_TEST_FEATURES_IN_FEATURES_LO,
+		features & 0xFFFFFFFF);
+	MCDI_IN_SET_DWORD(req, VIRTIO_TEST_FEATURES_IN_FEATURES_HI,
+		((features >> 32) & 0xFFFFFFFF));
+
+	efx_mcdi_execute(enp, &req);
+
+	if (req.emr_rc != 0) {
+		rc = req.emr_rc;
+		goto fail1;
+	}
+
+	return (0);
+
+fail1:
+	EFSYS_PROBE1(fail1, efx_rc_t, rc);
+
+	return (rc);
+}
+
 #endif	/* EFSYS_OPT_RIVERHEAD && EFSYS_OPT_VIRTIO */
-- 
2.30.1


  parent reply	other threads:[~2021-03-15 14:00 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-11 11:03 [dpdk-dev] [PATCH 0/8] common/sfc_efx: prepare to introduce vDPA driver Andrew Rybchenko
2021-03-11 11:03 ` [dpdk-dev] [PATCH 1/8] common/sfc_efx/base: add base virtio support for vDPA Andrew Rybchenko
2021-03-11 11:03 ` [dpdk-dev] [PATCH 2/8] common/sfc_efx/base: add API to get VirtQ doorbell offset Andrew Rybchenko
2021-03-11 11:03 ` [dpdk-dev] [PATCH 3/8] common/sfc_efx/base: add virtio build dependency Andrew Rybchenko
2021-03-11 11:03 ` [dpdk-dev] [PATCH 4/8] common/sfc_efx/base: add support to get virtio features Andrew Rybchenko
2021-03-11 11:03 ` [dpdk-dev] [PATCH 5/8] common/sfc_efx/base: add support to verify " Andrew Rybchenko
2021-03-11 11:03 ` [dpdk-dev] [PATCH 6/8] common/sfc_efx: add support to get the device class Andrew Rybchenko
2021-03-11 11:03 ` [dpdk-dev] [PATCH 7/8] net/sfc: skip driver probe for incompatible " Andrew Rybchenko
2021-03-11 11:03 ` [dpdk-dev] [PATCH 8/8] drivers: add common driver API to get efx family Andrew Rybchenko
2021-03-14  0:36   ` Ferruh Yigit
2021-03-15 14:01     ` Andrew Rybchenko
2021-03-15 13:58 ` [dpdk-dev] [PATCH v2 0/8] common/sfc_efx: prepare to introduce vDPA driver Andrew Rybchenko
2021-03-15 13:58   ` [dpdk-dev] [PATCH v2 1/8] common/sfc_efx/base: add base virtio support for vDPA Andrew Rybchenko
2021-03-15 13:58   ` [dpdk-dev] [PATCH v2 2/8] common/sfc_efx/base: add API to get VirtQ doorbell offset Andrew Rybchenko
2021-03-15 13:58   ` [dpdk-dev] [PATCH v2 3/8] common/sfc_efx/base: add virtio build dependency Andrew Rybchenko
2021-03-15 13:58   ` [dpdk-dev] [PATCH v2 4/8] common/sfc_efx/base: add support to get virtio features Andrew Rybchenko
2021-03-15 13:58   ` Andrew Rybchenko [this message]
2021-03-15 13:58   ` [dpdk-dev] [PATCH v2 6/8] common/sfc_efx: add support to get the device class Andrew Rybchenko
2021-03-15 13:58   ` [dpdk-dev] [PATCH v2 7/8] net/sfc: skip driver probe for incompatible " Andrew Rybchenko
2021-03-15 13:58   ` [dpdk-dev] [PATCH v2 8/8] drivers: add common driver API to get efx family Andrew Rybchenko
2021-03-15 15:54   ` [dpdk-dev] [PATCH v2 0/8] common/sfc_efx: prepare to introduce vDPA driver Ferruh Yigit
2021-03-16  7:25     ` Andrew Rybchenko
2021-03-16  6:15 ` [dpdk-dev] [PATCH v3 " Andrew Rybchenko
2021-03-16  6:15   ` [dpdk-dev] [PATCH v3 1/8] common/sfc_efx/base: add base virtio support for vDPA Andrew Rybchenko
2021-03-16  6:15   ` [dpdk-dev] [PATCH v3 2/8] common/sfc_efx/base: add API to get VirtQ doorbell offset Andrew Rybchenko
2021-03-16  6:15   ` [dpdk-dev] [PATCH v3 3/8] common/sfc_efx/base: add virtio build dependency Andrew Rybchenko
2021-03-16  6:15   ` [dpdk-dev] [PATCH v3 4/8] common/sfc_efx/base: add support to get virtio features Andrew Rybchenko
2021-03-16  6:15   ` [dpdk-dev] [PATCH v3 5/8] common/sfc_efx/base: add support to verify " Andrew Rybchenko
2021-03-16  6:15   ` [dpdk-dev] [PATCH v3 6/8] common/sfc_efx: add support to get the device class Andrew Rybchenko
2021-03-16  6:15   ` [dpdk-dev] [PATCH v3 7/8] net/sfc: skip driver probe for incompatible " Andrew Rybchenko
2021-03-16  6:15   ` [dpdk-dev] [PATCH v3 8/8] drivers: add common driver API to get efx family Andrew Rybchenko
2021-03-16  8:55   ` [dpdk-dev] [PATCH v3 0/8] common/sfc_efx: prepare to introduce vDPA driver Andrew Rybchenko
2021-03-16  8:58 ` [dpdk-dev] [PATCH v4 " Andrew Rybchenko
2021-03-16  8:58   ` [dpdk-dev] [PATCH v4 1/8] common/sfc_efx/base: add base virtio support for vDPA Andrew Rybchenko
2021-03-16 11:30     ` Ferruh Yigit
2021-03-16 11:47       ` Andrew Rybchenko
2021-03-16 11:58         ` Ferruh Yigit
2021-03-16 12:14           ` Andrew Rybchenko
2021-03-16 12:41             ` Ferruh Yigit
2021-03-16  8:58   ` [dpdk-dev] [PATCH v4 2/8] common/sfc_efx/base: add API to get VirtQ doorbell offset Andrew Rybchenko
2021-03-16  8:58   ` [dpdk-dev] [PATCH v4 3/8] common/sfc_efx/base: add virtio build dependency Andrew Rybchenko
2021-03-16  8:58   ` [dpdk-dev] [PATCH v4 4/8] common/sfc_efx/base: add support to get virtio features Andrew Rybchenko
2021-03-16  8:58   ` [dpdk-dev] [PATCH v4 5/8] common/sfc_efx/base: add support to verify " Andrew Rybchenko
2021-03-16  8:58   ` [dpdk-dev] [PATCH v4 6/8] common/sfc_efx: add support to get the device class Andrew Rybchenko
2021-03-16  8:58   ` [dpdk-dev] [PATCH v4 7/8] net/sfc: skip driver probe for incompatible " Andrew Rybchenko
2021-03-16  8:58   ` [dpdk-dev] [PATCH v4 8/8] drivers: add common driver API to get efx family Andrew Rybchenko
2021-03-16 11:26   ` [dpdk-dev] [PATCH v4 0/8] common/sfc_efx: prepare to introduce vDPA driver Ferruh Yigit
2021-03-16 11:30     ` Andrew Rybchenko
2021-03-16 11:32       ` Ferruh Yigit
2021-03-16 11:34         ` Ferruh Yigit
2021-03-16 11:46   ` Ferruh Yigit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210315135823.605774-6-andrew.rybchenko@oktetlabs.ru \
    --to=andrew.rybchenko@oktetlabs.ru \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=vsrivast@xilinx.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.