All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
To: dev@dpdk.org
Cc: Viacheslav Galaktionov <viacheslav.galaktionov@oktetlabs.ru>,
	Andy Moreton <amoreton@xilinx.com>
Subject: [dpdk-dev] [PATCH 30/38] common/sfc_efx/base: add a means to read MAE mport journal
Date: Fri, 27 Aug 2021 09:57:09 +0300	[thread overview]
Message-ID: <20210827065717.1838258-31-andrew.rybchenko@oktetlabs.ru> (raw)
In-Reply-To: <20210827065717.1838258-1-andrew.rybchenko@oktetlabs.ru>

From: Viacheslav Galaktionov <viacheslav.galaktionov@oktetlabs.ru>

This is required to provide the driver with the current state of mports.

Signed-off-by: Viacheslav Galaktionov <viacheslav.galaktionov@oktetlabs.ru>
Signed-off-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
 drivers/common/sfc_efx/base/efx.h      |  56 +++++++
 drivers/common/sfc_efx/base/efx_mae.c  | 224 +++++++++++++++++++++++++
 drivers/common/sfc_efx/base/efx_mcdi.h |  54 ++++++
 drivers/common/sfc_efx/version.map     |   1 +
 4 files changed, 335 insertions(+)

diff --git a/drivers/common/sfc_efx/base/efx.h b/drivers/common/sfc_efx/base/efx.h
index 996126217e..e77b297950 100644
--- a/drivers/common/sfc_efx/base/efx.h
+++ b/drivers/common/sfc_efx/base/efx.h
@@ -4205,6 +4205,42 @@ typedef struct efx_mport_id_s {
 	uint32_t id;
 } efx_mport_id_t;
 
+typedef enum efx_mport_type_e {
+	EFX_MPORT_TYPE_NET_PORT = 0,
+	EFX_MPORT_TYPE_ALIAS,
+	EFX_MPORT_TYPE_VNIC,
+} efx_mport_type_t;
+
+typedef enum efx_mport_vnic_client_type_e {
+	EFX_MPORT_VNIC_CLIENT_FUNCTION = 1,
+	EFX_MPORT_VNIC_CLIENT_PLUGIN,
+} efx_mport_vnic_client_type_t;
+
+typedef struct efx_mport_desc_s {
+	efx_mport_id_t			emd_id;
+	boolean_t			emd_can_receive_on;
+	boolean_t			emd_can_deliver_to;
+	boolean_t			emd_can_delete;
+	boolean_t			emd_zombie;
+	efx_mport_type_t		emd_type;
+	union {
+		struct {
+			uint32_t	ep_index;
+		} emd_net_port;
+		struct {
+			efx_mport_id_t	ea_target_mport_id;
+		} emd_alias;
+		struct {
+			efx_mport_vnic_client_type_t	ev_client_type;
+			efx_pcie_interface_t		ev_intf;
+			uint16_t			ev_pf;
+			uint16_t			ev_vf;
+			/* MCDI client handle for this VNIC. */
+			uint32_t			ev_handle;
+		} emd_vnic;
+	};
+} efx_mport_desc_t;
+
 #define	EFX_MPORT_NULL			(0U)
 
 /*
@@ -4635,6 +4671,26 @@ efx_mae_mport_free(
 	__in				efx_nic_t *enp,
 	__in				const efx_mport_id_t *mportp);
 
+typedef __checkReturn	efx_rc_t
+(efx_mae_read_mport_journal_cb)(
+	__in		void *cb_datap,
+	__in		efx_mport_desc_t *mportp,
+	__in		size_t mport_len);
+
+/*
+ * Read mport descriptions from the MAE journal (which describes added and
+ * removed mports) and pass them to a user-supplied callback. The user gets
+ * only one chance to process the data it's given. Once the callback function
+ * finishes, that particular mport description will be gone.
+ * The journal will be fully repopulated on PCI reset (efx_nic_reset function).
+ */
+LIBEFX_API
+extern	__checkReturn			efx_rc_t
+efx_mae_read_mport_journal(
+	__in				efx_nic_t *enp,
+	__in				efx_mae_read_mport_journal_cb *cbp,
+	__in				void *cb_datap);
+
 #endif /* EFSYS_OPT_MAE */
 
 #if EFSYS_OPT_VIRTIO
diff --git a/drivers/common/sfc_efx/base/efx_mae.c b/drivers/common/sfc_efx/base/efx_mae.c
index 37cc48eafc..110addd92d 100644
--- a/drivers/common/sfc_efx/base/efx_mae.c
+++ b/drivers/common/sfc_efx/base/efx_mae.c
@@ -3292,4 +3292,228 @@ efx_mae_mport_free(
 	return (rc);
 }
 
+static	__checkReturn			efx_rc_t
+efx_mae_read_mport_journal_single(
+	__in				uint8_t *entry_buf,
+	__out				efx_mport_desc_t *desc)
+{
+	uint32_t pcie_intf;
+	efx_rc_t rc;
+
+	memset(desc, 0, sizeof (*desc));
+
+	desc->emd_id.id = MCDI_STRUCT_DWORD(entry_buf,
+	    MAE_MPORT_DESC_V2_MPORT_ID);
+
+	desc->emd_can_receive_on = MCDI_STRUCT_DWORD_FIELD(entry_buf,
+	    MAE_MPORT_DESC_V2_FLAGS,
+	    MAE_MPORT_DESC_V2_CAN_RECEIVE_ON);
+
+	desc->emd_can_deliver_to = MCDI_STRUCT_DWORD_FIELD(entry_buf,
+	    MAE_MPORT_DESC_V2_FLAGS,
+	    MAE_MPORT_DESC_V2_CAN_DELIVER_TO);
+
+	desc->emd_can_delete = MCDI_STRUCT_DWORD_FIELD(entry_buf,
+	    MAE_MPORT_DESC_V2_FLAGS,
+	    MAE_MPORT_DESC_V2_CAN_DELETE);
+
+	desc->emd_zombie = MCDI_STRUCT_DWORD_FIELD(entry_buf,
+	    MAE_MPORT_DESC_V2_FLAGS,
+	    MAE_MPORT_DESC_V2_IS_ZOMBIE);
+
+	desc->emd_type = MCDI_STRUCT_DWORD(entry_buf,
+	    MAE_MPORT_DESC_V2_MPORT_TYPE);
+
+	/*
+	 * We can't check everything here. If some additional checks are
+	 * required, they should be performed by the callback function.
+	 */
+	switch (desc->emd_type) {
+	case EFX_MPORT_TYPE_NET_PORT:
+		desc->emd_net_port.ep_index =
+		    MCDI_STRUCT_DWORD(entry_buf,
+			MAE_MPORT_DESC_V2_NET_PORT_IDX);
+		break;
+	case EFX_MPORT_TYPE_ALIAS:
+		desc->emd_alias.ea_target_mport_id.id =
+		    MCDI_STRUCT_DWORD(entry_buf,
+			MAE_MPORT_DESC_V2_ALIAS_DELIVER_MPORT_ID);
+		break;
+	case EFX_MPORT_TYPE_VNIC:
+		desc->emd_vnic.ev_client_type =
+		    MCDI_STRUCT_DWORD(entry_buf,
+			MAE_MPORT_DESC_V2_VNIC_CLIENT_TYPE);
+		if (desc->emd_vnic.ev_client_type !=
+		    EFX_MPORT_VNIC_CLIENT_FUNCTION)
+			break;
+
+		pcie_intf = MCDI_STRUCT_DWORD(entry_buf,
+		    MAE_MPORT_DESC_V2_VNIC_FUNCTION_INTERFACE);
+		rc = efx_mcdi_intf_from_pcie(pcie_intf,
+		    &desc->emd_vnic.ev_intf);
+		if (rc != 0)
+			goto fail1;
+
+		desc->emd_vnic.ev_pf = MCDI_STRUCT_WORD(entry_buf,
+		    MAE_MPORT_DESC_V2_VNIC_FUNCTION_PF_IDX);
+		desc->emd_vnic.ev_vf = MCDI_STRUCT_WORD(entry_buf,
+		    MAE_MPORT_DESC_V2_VNIC_FUNCTION_VF_IDX);
+		desc->emd_vnic.ev_handle = MCDI_STRUCT_DWORD(entry_buf,
+		    MAE_MPORT_DESC_V2_VNIC_CLIENT_HANDLE);
+		break;
+	default:
+		rc = EINVAL;
+		goto fail2;
+	}
+
+	return (0);
+
+fail2:
+	EFSYS_PROBE(fail2);
+fail1:
+	EFSYS_PROBE1(fail1, efx_rc_t, rc);
+	return (rc);
+}
+
+static	__checkReturn			efx_rc_t
+efx_mae_read_mport_journal_batch(
+	__in				efx_nic_t *enp,
+	__in				efx_mae_read_mport_journal_cb *cbp,
+	__in				void *cb_datap,
+	__out				uint32_t *morep)
+{
+	efx_mcdi_req_t req;
+	EFX_MCDI_DECLARE_BUF(payload,
+	    MC_CMD_MAE_MPORT_READ_JOURNAL_IN_LEN,
+	    MC_CMD_MAE_MPORT_READ_JOURNAL_OUT_LENMAX_MCDI2);
+	uint32_t n_entries;
+	uint32_t entry_sz;
+	uint8_t *entry_buf;
+	unsigned int i;
+	efx_rc_t rc;
+
+	EFX_STATIC_ASSERT(EFX_MPORT_TYPE_NET_PORT ==
+	    MAE_MPORT_DESC_V2_MPORT_TYPE_NET_PORT);
+	EFX_STATIC_ASSERT(EFX_MPORT_TYPE_ALIAS ==
+	    MAE_MPORT_DESC_V2_MPORT_TYPE_ALIAS);
+	EFX_STATIC_ASSERT(EFX_MPORT_TYPE_VNIC ==
+	    MAE_MPORT_DESC_V2_MPORT_TYPE_VNIC);
+
+	EFX_STATIC_ASSERT(EFX_MPORT_VNIC_CLIENT_FUNCTION ==
+	    MAE_MPORT_DESC_V2_VNIC_CLIENT_TYPE_FUNCTION);
+	EFX_STATIC_ASSERT(EFX_MPORT_VNIC_CLIENT_PLUGIN ==
+	    MAE_MPORT_DESC_V2_VNIC_CLIENT_TYPE_PLUGIN);
+
+	if (cbp == NULL) {
+		rc = EINVAL;
+		goto fail1;
+	}
+
+	req.emr_cmd = MC_CMD_MAE_MPORT_READ_JOURNAL;
+	req.emr_in_buf = payload;
+	req.emr_in_length = MC_CMD_MAE_MPORT_READ_JOURNAL_IN_LEN;
+	req.emr_out_buf = payload;
+	req.emr_out_length = MC_CMD_MAE_MPORT_READ_JOURNAL_OUT_LENMAX_MCDI2;
+
+	MCDI_IN_SET_DWORD(req, MAE_MPORT_READ_JOURNAL_IN_FLAGS, 0);
+
+	efx_mcdi_execute(enp, &req);
+
+	if (req.emr_rc != 0) {
+		rc = req.emr_rc;
+		goto fail2;
+	}
+
+	if (req.emr_out_length_used <
+	    MC_CMD_MAE_MPORT_READ_JOURNAL_OUT_LENMIN) {
+		rc = EMSGSIZE;
+		goto fail3;
+	}
+
+	if (morep != NULL) {
+		*morep = MCDI_OUT_DWORD_FIELD(req,
+		    MAE_MPORT_READ_JOURNAL_OUT_FLAGS,
+		    MAE_MPORT_READ_JOURNAL_OUT_MORE);
+	}
+	n_entries = MCDI_OUT_DWORD(req,
+	    MAE_MPORT_READ_JOURNAL_OUT_MPORT_DESC_COUNT);
+	entry_sz = MCDI_OUT_DWORD(req,
+	    MAE_MPORT_READ_JOURNAL_OUT_SIZEOF_MPORT_DESC);
+	entry_buf = MCDI_OUT2(req, uint8_t,
+	    MAE_MPORT_READ_JOURNAL_OUT_MPORT_DESC_DATA);
+
+	if (entry_sz < MAE_MPORT_DESC_V2_VNIC_CLIENT_HANDLE_OFST +
+	    MAE_MPORT_DESC_V2_VNIC_CLIENT_HANDLE_LEN) {
+		rc = EINVAL;
+		goto fail4;
+	}
+	if (n_entries * entry_sz / entry_sz != n_entries) {
+		rc = EINVAL;
+		goto fail5;
+	}
+	if (req.emr_out_length_used !=
+	    MC_CMD_MAE_MPORT_READ_JOURNAL_OUT_LENMIN + n_entries * entry_sz) {
+		rc = EINVAL;
+		goto fail6;
+	}
+
+	for (i = 0; i < n_entries; i++) {
+		efx_mport_desc_t desc;
+
+		rc = efx_mae_read_mport_journal_single(entry_buf, &desc);
+		if (rc != 0)
+			continue;
+
+		(*cbp)(cb_datap, &desc, sizeof (desc));
+		entry_buf += entry_sz;
+	}
+
+	return (0);
+
+fail6:
+	EFSYS_PROBE(fail6);
+fail5:
+	EFSYS_PROBE(fail5);
+fail4:
+	EFSYS_PROBE(fail4);
+fail3:
+	EFSYS_PROBE(fail3);
+fail2:
+	EFSYS_PROBE(fail2);
+fail1:
+	EFSYS_PROBE1(fail1, efx_rc_t, rc);
+	return (rc);
+}
+
+	__checkReturn			efx_rc_t
+efx_mae_read_mport_journal(
+	__in				efx_nic_t *enp,
+	__in				efx_mae_read_mport_journal_cb *cbp,
+	__in				void *cb_datap)
+{
+	const efx_nic_cfg_t *encp = efx_nic_cfg_get(enp);
+	uint32_t more = 0;
+	efx_rc_t rc;
+
+	if (encp->enc_mae_supported == B_FALSE) {
+		rc = ENOTSUP;
+		goto fail1;
+	}
+
+	do {
+		rc = efx_mae_read_mport_journal_batch(enp, cbp, cb_datap,
+		    &more);
+		if (rc != 0)
+			goto fail2;
+	} while (more != 0);
+
+	return (0);
+
+fail2:
+	EFSYS_PROBE(fail2);
+fail1:
+	EFSYS_PROBE1(fail1, efx_rc_t, rc);
+	return (rc);
+}
+
 #endif /* EFSYS_OPT_MAE */
diff --git a/drivers/common/sfc_efx/base/efx_mcdi.h b/drivers/common/sfc_efx/base/efx_mcdi.h
index 90b70de97b..96f237b1b0 100644
--- a/drivers/common/sfc_efx/base/efx_mcdi.h
+++ b/drivers/common/sfc_efx/base/efx_mcdi.h
@@ -462,6 +462,60 @@ efx_mcdi_phy_module_get_info(
 	EFX_DWORD_FIELD(*(MCDI_OUT2(_emr, efx_dword_t, _ofst) +		\
 			(_idx)), _field)
 
+#define	MCDI_OUT_INDEXED_STRUCT_MEMBER(_emr, _type, _arr_ofst, _idx,	\
+		_member_ofst)						\
+	((_type *)(MCDI_OUT2(_emr, uint8_t, _arr_ofst) +		\
+		   _idx * MC_CMD_ ## _arr_ofst ## _LEN +		\
+		   _member_ofst ## _OFST))
+
+#define	MCDI_OUT_INDEXED_MEMBER_DWORD(_emr, _arr_ofst, _idx,		\
+		_member_ofst)						\
+	EFX_DWORD_FIELD(						\
+		*(MCDI_OUT_INDEXED_STRUCT_MEMBER(_emr, efx_dword_t,	\
+						 _arr_ofst, _idx,	\
+						 _member_ofst)),	\
+		EFX_DWORD_0)
+
+#define	MCDI_OUT_INDEXED_MEMBER_QWORD(_emr, _arr_ofst, _idx,		\
+		_member_ofst)						\
+	((uint64_t)EFX_QWORD_FIELD(					\
+		*(MCDI_OUT_INDEXED_STRUCT_MEMBER(_emr, efx_qword_t,	\
+						 _arr_ofst, _idx,	\
+						 _member_ofst)),	\
+		EFX_DWORD_0) |						\
+	(uint64_t)EFX_QWORD_FIELD(					\
+		*(MCDI_OUT_INDEXED_STRUCT_MEMBER(_emr, efx_qword_t,	\
+						 _arr_ofst, _idx,	\
+						 _member_ofst)),	\
+		EFX_DWORD_1) << 32)
+
+#define MCDI_STRUCT_MEMBER(_buf, _type, _ofst)				\
+	((_type *)((char *)_buf + _ofst ## _OFST))	\
+
+#define MCDI_STRUCT_BYTE(_buf, _ofst)					\
+	EFX_BYTE_FIELD(*MCDI_STRUCT_MEMBER(_buf, efx_byte_t, _ofst),	\
+		       EFX_BYTE_0)
+
+#define MCDI_STRUCT_BYTE_FIELD(_buf, _ofst, _field)			\
+	EFX_BYTE_FIELD(*MCDI_STRUCT_MEMBER(_buf, efx_byte_t, _ofst),	\
+		       _field)
+
+#define MCDI_STRUCT_WORD(_buf, _ofst)					\
+	EFX_WORD_FIELD(*MCDI_STRUCT_MEMBER(_buf, efx_word_t, _ofst),	\
+		       EFX_WORD_0)
+
+#define MCDI_STRUCT_WORD_FIELD(_buf, _ofst, _field)			\
+	EFX_WORD_FIELD(*MCDI_STRUCT_MEMBER(_buf, efx_word_t, _ofst),	\
+		       _field)
+
+#define MCDI_STRUCT_DWORD(_buf, _ofst)					\
+	EFX_DWORD_FIELD(*MCDI_STRUCT_MEMBER(_buf, efx_dword_t, _ofst),	\
+			EFX_DWORD_0)
+
+#define MCDI_STRUCT_DWORD_FIELD(_buf, _ofst, _field)			\
+	EFX_DWORD_FIELD(*MCDI_STRUCT_MEMBER(_buf, efx_dword_t, _ofst),	\
+			_field)
+
 #define	MCDI_EV_FIELD(_eqp, _field)					\
 	EFX_QWORD_FIELD(*_eqp, MCDI_EVENT_ ## _field)
 
diff --git a/drivers/common/sfc_efx/version.map b/drivers/common/sfc_efx/version.map
index 225909892b..10216bb37d 100644
--- a/drivers/common/sfc_efx/version.map
+++ b/drivers/common/sfc_efx/version.map
@@ -133,6 +133,7 @@ INTERNAL {
 	efx_mae_mport_invalid;
 	efx_mae_outer_rule_insert;
 	efx_mae_outer_rule_remove;
+	efx_mae_read_mport_journal;
 
 	efx_mcdi_fini;
 	efx_mcdi_get_proxy_handle;
-- 
2.30.2


  parent reply	other threads:[~2021-08-27  7:00 UTC|newest]

Thread overview: 79+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-27  6:56 [dpdk-dev] [PATCH 00/38] net/sfc: support port representors Andrew Rybchenko
2021-08-27  6:56 ` [dpdk-dev] [PATCH 01/38] common/sfc_efx/base: update MCDI headers Andrew Rybchenko
2021-08-27  6:56 ` [dpdk-dev] [PATCH 02/38] common/sfc_efx/base: update EF100 registers definitions Andrew Rybchenko
2021-08-27  6:56 ` [dpdk-dev] [PATCH 03/38] net/sfc: add switch mode device argument Andrew Rybchenko
2021-08-27  6:56 ` [dpdk-dev] [PATCH 04/38] net/sfc: insert switchdev mode MAE rules Andrew Rybchenko
2021-08-27  6:56 ` [dpdk-dev] [PATCH 05/38] common/sfc_efx/base: add an API to get mport ID by selector Andrew Rybchenko
2021-08-27  6:56 ` [dpdk-dev] [PATCH 06/38] net/sfc: support EF100 Tx override prefix Andrew Rybchenko
2021-08-27  6:56 ` [dpdk-dev] [PATCH 07/38] net/sfc: add representors proxy infrastructure Andrew Rybchenko
2021-08-27  6:56 ` [dpdk-dev] [PATCH 08/38] net/sfc: reserve TxQ and RxQ for port representors Andrew Rybchenko
2021-08-27  6:56 ` [dpdk-dev] [PATCH 09/38] net/sfc: move adapter state enum to separate header Andrew Rybchenko
2021-08-27  6:56 ` [dpdk-dev] [PATCH 10/38] common/sfc_efx/base: allow creating invalid mport selectors Andrew Rybchenko
2021-08-27  6:56 ` [dpdk-dev] [PATCH 11/38] net/sfc: add port representors infrastructure Andrew Rybchenko
2021-08-27  6:56 ` [dpdk-dev] [PATCH 12/38] common/sfc_efx/base: add filter ingress mport matching field Andrew Rybchenko
2021-08-27  6:56 ` [dpdk-dev] [PATCH 13/38] common/sfc_efx/base: add API to get mport selector by ID Andrew Rybchenko
2021-08-27  6:56 ` [dpdk-dev] [PATCH 14/38] common/sfc_efx/base: add mport alias MCDI wrappers Andrew Rybchenko
2021-08-27  6:56 ` [dpdk-dev] [PATCH 15/38] net/sfc: add representor proxy port API Andrew Rybchenko
2021-08-27  6:56 ` [dpdk-dev] [PATCH 16/38] net/sfc: implement representor queue setup and release Andrew Rybchenko
2021-08-27  6:56 ` [dpdk-dev] [PATCH 17/38] net/sfc: implement representor RxQ start/stop Andrew Rybchenko
2021-08-27  6:56 ` [dpdk-dev] [PATCH 18/38] net/sfc: implement representor TxQ start/stop Andrew Rybchenko
2021-08-27  6:56 ` [dpdk-dev] [PATCH 19/38] net/sfc: implement port representor start and stop Andrew Rybchenko
2021-08-27  6:56 ` [dpdk-dev] [PATCH 20/38] net/sfc: implement port representor link update Andrew Rybchenko
2021-08-27  6:57 ` [dpdk-dev] [PATCH 21/38] net/sfc: support multiple device probe Andrew Rybchenko
2021-08-27  6:57 ` [dpdk-dev] [PATCH 22/38] net/sfc: implement representor Tx routine Andrew Rybchenko
2021-08-27  6:57 ` [dpdk-dev] [PATCH 23/38] net/sfc: use xword type for EF100 Rx prefix Andrew Rybchenko
2021-08-27  6:57 ` [dpdk-dev] [PATCH 24/38] net/sfc: handle ingress m-port in " Andrew Rybchenko
2021-08-27  6:57 ` [dpdk-dev] [PATCH 25/38] net/sfc: implement representor Rx routine Andrew Rybchenko
2021-08-27  6:57 ` [dpdk-dev] [PATCH 26/38] net/sfc: add simple port representor statistics Andrew Rybchenko
2021-08-27  6:57 ` [dpdk-dev] [PATCH 27/38] net/sfc: free MAE lock once switch domain is assigned Andrew Rybchenko
2021-08-27  6:57 ` [dpdk-dev] [PATCH 28/38] common/sfc_efx/base: add multi-host function M-port selector Andrew Rybchenko
2021-08-27  6:57 ` [dpdk-dev] [PATCH 29/38] common/sfc_efx/base: retrieve function interfaces for VNICs Andrew Rybchenko
2021-08-27  6:57 ` Andrew Rybchenko [this message]
2021-08-27  6:57 ` [dpdk-dev] [PATCH 31/38] common/sfc_efx/base: allow getting VNIC MCDI client handles Andrew Rybchenko
2021-08-27  6:57 ` [dpdk-dev] [PATCH 32/38] net/sfc: maintain controller to EFX interface mapping Andrew Rybchenko
2021-08-27  6:57 ` [dpdk-dev] [PATCH 33/38] net/sfc: store PCI address for represented entities Andrew Rybchenko
2021-08-27  6:57 ` [dpdk-dev] [PATCH 34/38] net/sfc: include controller and port in representor name Andrew Rybchenko
2021-08-27  6:57 ` [dpdk-dev] [PATCH 35/38] net/sfc: support new representor parameter syntax Andrew Rybchenko
2021-08-27  6:57 ` [dpdk-dev] [PATCH 36/38] net/sfc: use switch port ID as representor ID Andrew Rybchenko
2021-08-27  6:57 ` [dpdk-dev] [PATCH 37/38] net/sfc: implement the representor info API Andrew Rybchenko
2021-08-27  6:57 ` [dpdk-dev] [PATCH 38/38] net/sfc: update comment about representor support Andrew Rybchenko
2021-10-11 14:48 ` [dpdk-dev] [PATCH v2 00/38] net/sfc: support port representors Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 01/38] common/sfc_efx/base: update MCDI headers Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 02/38] common/sfc_efx/base: update EF100 registers definitions Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 03/38] net/sfc: add switch mode device argument Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 04/38] net/sfc: insert switchdev mode MAE rules Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 05/38] common/sfc_efx/base: add an API to get mport ID by selector Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 06/38] net/sfc: support EF100 Tx override prefix Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 07/38] net/sfc: add representors proxy infrastructure Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 08/38] net/sfc: reserve TxQ and RxQ for port representors Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 09/38] net/sfc: move adapter state enum to separate header Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 10/38] common/sfc_efx/base: allow creating invalid mport selectors Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 11/38] net/sfc: add port representors infrastructure Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 12/38] common/sfc_efx/base: add filter ingress mport matching field Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 13/38] common/sfc_efx/base: add API to get mport selector by ID Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 14/38] common/sfc_efx/base: add mport alias MCDI wrappers Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 15/38] net/sfc: add representor proxy port API Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 16/38] net/sfc: implement representor queue setup and release Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 17/38] net/sfc: implement representor RxQ start/stop Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 18/38] net/sfc: implement representor TxQ start/stop Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 19/38] net/sfc: implement port representor start and stop Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 20/38] net/sfc: implement port representor link update Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 21/38] net/sfc: support multiple device probe Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 22/38] net/sfc: implement representor Tx routine Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 23/38] net/sfc: use xword type for EF100 Rx prefix Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 24/38] net/sfc: handle ingress m-port in " Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 25/38] net/sfc: implement representor Rx routine Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 26/38] net/sfc: add simple port representor statistics Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 27/38] net/sfc: free MAE lock once switch domain is assigned Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 28/38] common/sfc_efx/base: add multi-host function M-port selector Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 29/38] common/sfc_efx/base: retrieve function interfaces for VNICs Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 30/38] common/sfc_efx/base: add a means to read MAE mport journal Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 31/38] common/sfc_efx/base: allow getting VNIC MCDI client handles Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 32/38] net/sfc: maintain controller to EFX interface mapping Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 33/38] net/sfc: store PCI address for represented entities Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 34/38] net/sfc: include controller and port in representor name Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 35/38] net/sfc: support new representor parameter syntax Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 36/38] net/sfc: use switch port ID as representor ID Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 37/38] net/sfc: implement the representor info API Andrew Rybchenko
2021-10-11 14:48   ` [dpdk-dev] [PATCH v2 38/38] net/sfc: update comment about representor support Andrew Rybchenko
2021-10-12 16:45   ` [dpdk-dev] [PATCH v2 00/38] net/sfc: support port representors 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=20210827065717.1838258-31-andrew.rybchenko@oktetlabs.ru \
    --to=andrew.rybchenko@oktetlabs.ru \
    --cc=amoreton@xilinx.com \
    --cc=dev@dpdk.org \
    --cc=viacheslav.galaktionov@oktetlabs.ru \
    /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.