From patchwork Wed Sep 29 20:57:24 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivan Malov X-Patchwork-Id: 100024 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8490DA0032; Wed, 29 Sep 2021 22:58:09 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id F02D94111F; Wed, 29 Sep 2021 22:57:49 +0200 (CEST) Received: from shelob.oktetlabs.ru (shelob.oktetlabs.ru [91.220.146.113]) by mails.dpdk.org (Postfix) with ESMTP id 43301410EF for ; Wed, 29 Sep 2021 22:57:45 +0200 (CEST) Received: from localhost.localdomain (unknown [5.144.122.192]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by shelob.oktetlabs.ru (Postfix) with ESMTPSA id 126587F6D1; Wed, 29 Sep 2021 23:57:45 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 shelob.oktetlabs.ru 126587F6D1 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=oktetlabs.ru; s=default; t=1632949065; bh=I800JZhpt5ExxgD7IIuIgiK0s/59U5wX6PFSkNPo90Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=sPomJgy+KmF0p3KW0CzE+yUiVLiPI9+JYYMRFnqEbyPrWm1LBRtXW/6RALCnJyZ4V 4LMFdFKZELjc9THBLECKS1a5YhYleXiwa6c+VYQ7bk+6lw/VNoj+299ZhkE9neS78U we06GB0AC1fNzgKsY9FSSHN8ojk0x7xgpT+znqaA= From: Ivan Malov To: dev@dpdk.org Cc: Andrew Rybchenko , Ray Kinsella Date: Wed, 29 Sep 2021 23:57:24 +0300 Message-Id: <20210929205730.775-5-ivan.malov@oktetlabs.ru> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210929205730.775-1-ivan.malov@oktetlabs.ru> References: <20210929205730.775-1-ivan.malov@oktetlabs.ru> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 04/10] common/sfc_efx/base: add RECIRC ID match in action rules API X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Currently, there is an API for setting recirculation ID in outer rules. Add an API to let action rules match on it. Signed-off-by: Ivan Malov Reviewed-by: Andrew Rybchenko --- drivers/common/sfc_efx/base/efx.h | 13 ++++++++++ drivers/common/sfc_efx/base/efx_mae.c | 36 ++++++++++++++++++++++++--- drivers/common/sfc_efx/version.map | 1 + 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/drivers/common/sfc_efx/base/efx.h b/drivers/common/sfc_efx/base/efx.h index ca747de7a4..22f5edfedd 100644 --- a/drivers/common/sfc_efx/base/efx.h +++ b/drivers/common/sfc_efx/base/efx.h @@ -4177,6 +4177,11 @@ typedef enum efx_mae_field_id_e { EFX_MAE_FIELD_ENC_HAS_OVLAN, EFX_MAE_FIELD_ENC_HAS_IVLAN, + /* + * Fields which can be set by efx_mae_match_spec_field_set() + * or by using dedicated field-specific helper APIs. + */ + EFX_MAE_FIELD_RECIRC_ID, EFX_MAE_FIELD_NIDS } efx_mae_field_id_t; @@ -4251,6 +4256,12 @@ efx_mae_match_spec_mport_set( __in const efx_mport_sel_t *valuep, __in_opt const efx_mport_sel_t *maskp); +LIBEFX_API +extern __checkReturn efx_rc_t +efx_mae_match_spec_recirc_id_set( + __in efx_mae_match_spec_t *spec, + __in uint8_t recirc_id); + LIBEFX_API extern __checkReturn boolean_t efx_mae_match_specs_equal( @@ -4387,6 +4398,8 @@ typedef struct efx_mae_rule_id_s { /* * Set the initial recirculation ID. It goes to action rule (AR) lookup. + * + * To match on this ID in an AR, use efx_mae_match_spec_recirc_id_set(). */ LIBEFX_API extern __checkReturn efx_rc_t diff --git a/drivers/common/sfc_efx/base/efx_mae.c b/drivers/common/sfc_efx/base/efx_mae.c index c37e90831f..80be922e51 100644 --- a/drivers/common/sfc_efx/base/efx_mae.c +++ b/drivers/common/sfc_efx/base/efx_mae.c @@ -473,6 +473,7 @@ typedef enum efx_mae_field_cap_id_e { EFX_MAE_FIELD_ID_HAS_IVLAN = MAE_FIELD_HAS_IVLAN, EFX_MAE_FIELD_ID_ENC_HAS_OVLAN = MAE_FIELD_ENC_HAS_OVLAN, EFX_MAE_FIELD_ID_ENC_HAS_IVLAN = MAE_FIELD_ENC_HAS_IVLAN, + EFX_MAE_FIELD_ID_RECIRC_ID = MAE_FIELD_RECIRC_ID, EFX_MAE_FIELD_CAP_NIDS } efx_mae_field_cap_id_t; @@ -519,10 +520,10 @@ static const efx_mae_mv_desc_t __efx_mae_action_rule_mv_desc_set[] = { [EFX_MAE_FIELD_##_name] = \ { \ EFX_MAE_FIELD_ID_##_name, \ - MAE_FIELD_MASK_VALUE_PAIRS_##_name##_LEN, \ - MAE_FIELD_MASK_VALUE_PAIRS_##_name##_OFST, \ - MAE_FIELD_MASK_VALUE_PAIRS_##_name##_MASK_LEN, \ - MAE_FIELD_MASK_VALUE_PAIRS_##_name##_MASK_OFST, \ + MAE_FIELD_MASK_VALUE_PAIRS_V2_##_name##_LEN, \ + MAE_FIELD_MASK_VALUE_PAIRS_V2_##_name##_OFST, \ + MAE_FIELD_MASK_VALUE_PAIRS_V2_##_name##_MASK_LEN, \ + MAE_FIELD_MASK_VALUE_PAIRS_V2_##_name##_MASK_OFST, \ 0, 0 /* no alternative field */, \ _endianness \ } @@ -547,6 +548,7 @@ static const efx_mae_mv_desc_t __efx_mae_action_rule_mv_desc_set[] = { EFX_MAE_MV_DESC(TCP_FLAGS_BE, EFX_MAE_FIELD_BE), EFX_MAE_MV_DESC(ENC_VNET_ID_BE, EFX_MAE_FIELD_BE), EFX_MAE_MV_DESC(OUTER_RULE_ID, EFX_MAE_FIELD_LE), + EFX_MAE_MV_DESC(RECIRC_ID, EFX_MAE_FIELD_LE), #undef EFX_MAE_MV_DESC }; @@ -961,6 +963,32 @@ efx_mae_match_spec_mport_set( fail2: EFSYS_PROBE(fail2); +fail1: + EFSYS_PROBE1(fail1, efx_rc_t, rc); + return (rc); +} + + __checkReturn efx_rc_t +efx_mae_match_spec_recirc_id_set( + __in efx_mae_match_spec_t *spec, + __in uint8_t recirc_id) +{ + uint8_t full_mask = UINT8_MAX; + const uint8_t *vp; + const uint8_t *mp; + efx_rc_t rc; + + vp = (const uint8_t *)&recirc_id; + mp = (const uint8_t *)&full_mask; + + rc = efx_mae_match_spec_field_set(spec, EFX_MAE_FIELD_RECIRC_ID, + sizeof (recirc_id), vp, + sizeof (full_mask), mp); + if (rc != 0) + goto fail1; + + return (0); + fail1: EFSYS_PROBE1(fail1, efx_rc_t, rc); return (rc); diff --git a/drivers/common/sfc_efx/version.map b/drivers/common/sfc_efx/version.map index d4878dfb9a..f59f2d8de0 100644 --- a/drivers/common/sfc_efx/version.map +++ b/drivers/common/sfc_efx/version.map @@ -122,6 +122,7 @@ INTERNAL { efx_mae_match_spec_is_valid; efx_mae_match_spec_mport_set; efx_mae_match_spec_outer_rule_id_set; + efx_mae_match_spec_recirc_id_set; efx_mae_match_specs_class_cmp; efx_mae_match_specs_equal; efx_mae_mport_by_pcie_function;