From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3F81FA04B7; Tue, 13 Oct 2020 15:53:36 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9EF1A1DC1D; Tue, 13 Oct 2020 15:46:36 +0200 (CEST) Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [67.231.154.164]) by dpdk.org (Postfix) with ESMTP id 8087E1DB8E for ; Tue, 13 Oct 2020 15:46:05 +0200 (CEST) Received: from mx1-us1.ppe-hosted.com (unknown [10.110.50.143]) by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 023B320121 for ; Tue, 13 Oct 2020 13:46:05 +0000 (UTC) Received: from us4-mdac16-69.at1.mdlocal (unknown [10.110.50.186]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 007D3800A4 for ; Tue, 13 Oct 2020 13:46:05 +0000 (UTC) X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.49.106]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 75F0F40076 for ; Tue, 13 Oct 2020 13:46:04 +0000 (UTC) Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 3E072B40053 for ; Tue, 13 Oct 2020 13:46:04 +0000 (UTC) Received: from ukex01.SolarFlarecom.com (10.17.10.4) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 13 Oct 2020 14:45:56 +0100 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Tue, 13 Oct 2020 14:45:56 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id 09DDjuV6006129 for ; Tue, 13 Oct 2020 14:45:56 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id C2F8C1613A9 for ; Tue, 13 Oct 2020 14:45:56 +0100 (BST) From: Andrew Rybchenko To: Date: Tue, 13 Oct 2020 14:45:46 +0100 Message-ID: <1602596753-32282-30-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1602596753-32282-1-git-send-email-arybchenko@solarflare.com> References: <1602596753-32282-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 Content-Type: text/plain X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.6.1012-25722.003 X-TM-AS-Result: No-3.410500-8.000000-10 X-TMASE-MatchedRID: 1e4GURu5ZSmjlw9B/l/xz5zEHTUOuMX3hnpDm0ThsHTVtKZKT0dQ2r6Y VRYkPkYCRSEtFPcDwZ99ZPDCsHjnZpmRr1k6e+lgugvJpUjzDZdLqa9X75MqabjOUXWmQ3OWUNM prKLZkXqlUbQd5K36vJYZEKz74UzS3VGQScEUC76cVWc2a+/ju+vcTjVWUqx9HdBrA/l5hJ3Ntu LrbWwF94aEw1nFgppib4dLW5zWEQFoqrxe97HpSgw5bFG3LCD6UGKOMTReNj5QmhcK24nKvmBCV 2cQfcttfzJoLQB1Y2j2Krmg+1bGVSrLMSB2aRSwngIgpj8eDcAZ1CdBJOsoY8RB0bsfrpPIreCT u6Ejg5g4QvpH6YF6lyXKMRS1neay9OmolNHpXDqKS3BJ5C+fbfwgEJb95rIr/wE8CxmMTTFMbsi EVMA+DtJANSutlA1dEEg3GtUOKhockqAQnqJUA6vLjyQveEhYEdOpeiiHeDd69DNEijZ11lqAtP M/2FFilExlQIQeRG0= X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10-3.410500-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.6.1012-25722.003 X-MDID: 1602596764-lf-sXYI4XGEy X-PPE-DISP: 1602596764;lf-sXYI4XGEy Subject: [dpdk-dev] [PATCH 29/36] common/sfc_efx/base: provide helper to check Rx prefix X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" A new function allows to check if used Rx prefix layout matches available Rx prefix layout. Length check is out-of-scope of the function and caller should ensure length is either checked or different length with everything required in place is handled properly. Signed-off-by: Andrew Rybchenko --- drivers/common/sfc_efx/base/efx.h | 12 ++++++ drivers/common/sfc_efx/base/efx_rx.c | 40 +++++++++++++++++++ .../sfc_efx/rte_common_sfc_efx_version.map | 1 + 3 files changed, 53 insertions(+) diff --git a/drivers/common/sfc_efx/base/efx.h b/drivers/common/sfc_efx/base/efx.h index 406e96caf8..bd1ac303b1 100644 --- a/drivers/common/sfc_efx/base/efx.h +++ b/drivers/common/sfc_efx/base/efx.h @@ -2920,6 +2920,18 @@ typedef struct efx_rx_prefix_layout_s { efx_rx_prefix_field_info_t erpl_fields[EFX_RX_PREFIX_NFIELDS]; } efx_rx_prefix_layout_t; +/* + * Helper function to find out a bit mask of wanted but not available + * Rx prefix fields. + * + * A field is considered as not available if any parameter mismatch. + */ +LIBEFX_API +extern __checkReturn uint32_t +efx_rx_prefix_layout_check( + __in const efx_rx_prefix_layout_t *available, + __in const efx_rx_prefix_layout_t *wanted); + LIBEFX_API extern __checkReturn efx_rc_t efx_rx_prefix_get_layout( diff --git a/drivers/common/sfc_efx/base/efx_rx.c b/drivers/common/sfc_efx/base/efx_rx.c index d6b56fec48..93a73703ed 100644 --- a/drivers/common/sfc_efx/base/efx_rx.c +++ b/drivers/common/sfc_efx/base/efx_rx.c @@ -1803,3 +1803,43 @@ siena_rx_fini( } #endif /* EFSYS_OPT_SIENA */ + +static __checkReturn boolean_t +efx_rx_prefix_layout_fields_match( + __in const efx_rx_prefix_field_info_t *erpfip1, + __in const efx_rx_prefix_field_info_t *erpfip2) +{ + if (erpfip1->erpfi_offset_bits != erpfip2->erpfi_offset_bits) + return (B_FALSE); + + if (erpfip1->erpfi_width_bits != erpfip2->erpfi_width_bits) + return (B_FALSE); + + if (erpfip1->erpfi_big_endian != erpfip2->erpfi_big_endian) + return (B_FALSE); + + return (B_TRUE); +} + + __checkReturn uint32_t +efx_rx_prefix_layout_check( + __in const efx_rx_prefix_layout_t *available, + __in const efx_rx_prefix_layout_t *wanted) +{ + uint32_t result = 0; + unsigned int i; + + EFX_STATIC_ASSERT(EFX_RX_PREFIX_NFIELDS < sizeof (result) * 8); + for (i = 0; i < EFX_RX_PREFIX_NFIELDS; ++i) { + /* Skip the field if driver does not want to use it */ + if (wanted->erpl_fields[i].erpfi_width_bits == 0) + continue; + + if (efx_rx_prefix_layout_fields_match( + &available->erpl_fields[i], + &wanted->erpl_fields[i]) == B_FALSE) + result |= (1U << i); + } + + return (result); +} diff --git a/drivers/common/sfc_efx/rte_common_sfc_efx_version.map b/drivers/common/sfc_efx/rte_common_sfc_efx_version.map index fd95fd09e5..f656d5b644 100644 --- a/drivers/common/sfc_efx/rte_common_sfc_efx_version.map +++ b/drivers/common/sfc_efx/rte_common_sfc_efx_version.map @@ -141,6 +141,7 @@ INTERNAL { efx_rx_hash_default_support_get; efx_rx_init; efx_rx_prefix_get_layout; + efx_rx_prefix_layout_check; efx_rx_qcreate; efx_rx_qcreate_es_super_buffer; efx_rx_qdestroy; -- 2.17.1