From patchwork Thu Oct 22 09:42:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Rybchenko X-Patchwork-Id: 81763 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id C7E44A04DD; Thu, 22 Oct 2020 11:44:42 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 1EB27A985; Thu, 22 Oct 2020 11:43:17 +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 65553A964 for ; Thu, 22 Oct 2020 11:43: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 024C420071; Thu, 22 Oct 2020 09:43:04 +0000 (UTC) Received: from us4-mdac16-52.at1.mdlocal (unknown [10.110.48.101]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 01BF98009B; Thu, 22 Oct 2020 09:43:04 +0000 (UTC) X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.48.45]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 9836540058; Thu, 22 Oct 2020 09:43:03 +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 4919D94005E; Thu, 22 Oct 2020 09:43:03 +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; Thu, 22 Oct 2020 10:43:00 +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; Thu, 22 Oct 2020 10:43:00 +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 09M9h0m3023168; Thu, 22 Oct 2020 10:43:00 +0100 Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id A16EE1613A9; Thu, 22 Oct 2020 10:43:00 +0100 (BST) From: Andrew Rybchenko To: Jeff Guo , Haiyue Wang , "Thomas Monjalon" , Ferruh Yigit , Andrew Rybchenko CC: Date: Thu, 22 Oct 2020 10:42:28 +0100 Message-ID: <1603359758-13297-6-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1603359758-13297-1-git-send-email-arybchenko@solarflare.com> References: <1603030152-13451-1-git-send-email-arybchenko@solarflare.com> <1603359758-13297-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.6.1012-25740.003 X-TM-AS-Result: No-0.983900-8.000000-10 X-TMASE-MatchedRID: KyVCty+UR6C/kNGHVZrslklR2DE0NRdaTtNpk/ZYt1RTq//rncsNWRfA rDcyWLohgbxHanC51U4uOLCbbJQ2ONpsFVyqUNwXnFVnNmvv47tLXPA26IG0hN9RlPzeVuQQauP Bry+3W1GKW2S8qAzRK1+kMTeH4iZv8mlg3ZRQcwfv560pwpG2rm9Xf86cwKVaWfmMcjcXc0ekiy icbogEksSRnVZvCYWWwiLT2fbw6Eesue+K4hesa4SzHD2R/d28frTt+hmA5bK1puFMoejkd9noq uRwHY3B5P3UBEkBqDECAkvUf/Zkhp1BUm3xPz1Nx5sgyUhLCNtKgIbix5+XxKcxvibtoCq3cJj/ 63vxb+ZF6Ft+j3f5Q1iCMdM/Z4E3rsR9esMEBdpHQFjzAbvJEH0tCKdnhB589yM15V5aWpj6C0e Ps7A07cMFHFkKVmrBIoLSeHPfl9q5ZtOXtIOQiLT2R+BSTi4uXyTwUCFPCxJ+t7ewrC86DOMcbM OiQeil4AHACNiK9Qvg/GcInvf3RSTrrDFXTXmn2kC7SwvGlKhDwb7Jglhh1lFkOwaJdCKgviPEq cclEtzAvpLE+mvX8g== X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--0.983900-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.6.1012-25740.003 X-MDID: 1603359784-Q_369MkqX_c0 X-PPE-DISP: 1603359784;Q_369MkqX_c0 Subject: [dpdk-dev] [PATCH v2 05/14] ethdev: move flexible filter type to e1000 driver 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" net/e1000 driver is the only user of the struct rte_eth_flex_filter and helper defines. Move it to the driver and use igb_ prefix instead of rte_eth_. Signed-off-by: Andrew Rybchenko Acked-by: Haiyue Wang --- drivers/net/e1000/e1000_ethdev.h | 22 +++++++++++++++++-- drivers/net/e1000/igb_ethdev.c | 2 +- drivers/net/e1000/igb_flow.c | 36 ++++++++++++++++---------------- lib/librte_ethdev/rte_eth_ctrl.h | 19 ----------------- 4 files changed, 39 insertions(+), 40 deletions(-) diff --git a/drivers/net/e1000/e1000_ethdev.h b/drivers/net/e1000/e1000_ethdev.h index 1e41ae9de1..4755a5f333 100644 --- a/drivers/net/e1000/e1000_ethdev.h +++ b/drivers/net/e1000/e1000_ethdev.h @@ -331,10 +331,28 @@ struct igb_eth_syn_filter_ele { struct rte_eth_syn_filter filter_info; }; +#define IGB_FLEX_FILTER_MAXLEN 128 /**< bytes to use in flex filter. */ +#define IGB_FLEX_FILTER_MASK_SIZE \ + (RTE_ALIGN(IGB_FLEX_FILTER_MAXLEN, CHAR_BIT) / CHAR_BIT) + /**< mask bytes in flex filter. */ + +/** + * A structure used to define the flex filter entry + * to support RTE_ETH_FILTER_FLEXIBLE data representation. + */ +struct igb_flex_filter { + uint16_t len; + uint8_t bytes[IGB_FLEX_FILTER_MAXLEN]; /**< flex bytes in big endian. */ + uint8_t mask[IGB_FLEX_FILTER_MASK_SIZE]; + /**< if mask bit is 1b, do not compare corresponding byte. */ + uint8_t priority; + uint16_t queue; /**< Queue assigned to when match. */ +}; + /* flex filter list structure */ struct igb_flex_filter_ele { TAILQ_ENTRY(igb_flex_filter_ele) entries; - struct rte_eth_flex_filter filter_info; + struct igb_flex_filter filter_info; }; /* rss filter list structure */ @@ -515,7 +533,7 @@ int eth_igb_syn_filter_set(struct rte_eth_dev *dev, struct rte_eth_syn_filter *filter, bool add); int eth_igb_add_del_flex_filter(struct rte_eth_dev *dev, - struct rte_eth_flex_filter *filter, + struct igb_flex_filter *filter, bool add); int igb_rss_conf_init(struct rte_eth_dev *dev, struct igb_rte_flow_rss_conf *out, diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c index 7f99b76e48..db67bcb7f9 100644 --- a/drivers/net/e1000/igb_ethdev.c +++ b/drivers/net/e1000/igb_ethdev.c @@ -4050,7 +4050,7 @@ igb_remove_flex_filter(struct rte_eth_dev *dev, int eth_igb_add_del_flex_filter(struct rte_eth_dev *dev, - struct rte_eth_flex_filter *filter, + struct igb_flex_filter *filter, bool add) { struct e1000_filter_info *filter_info = diff --git a/drivers/net/e1000/igb_flow.c b/drivers/net/e1000/igb_flow.c index 43fef889b5..ccb184df95 100644 --- a/drivers/net/e1000/igb_flow.c +++ b/drivers/net/e1000/igb_flow.c @@ -1041,7 +1041,7 @@ static int cons_parse_flex_filter(const struct rte_flow_attr *attr, const struct rte_flow_item pattern[], const struct rte_flow_action actions[], - struct rte_eth_flex_filter *filter, + struct igb_flex_filter *filter, struct rte_flow_error *error) { const struct rte_flow_item *item; @@ -1102,7 +1102,7 @@ cons_parse_flex_filter(const struct rte_flow_attr *attr, if (!raw_mask->length || !raw_mask->relative) { - memset(filter, 0, sizeof(struct rte_eth_flex_filter)); + memset(filter, 0, sizeof(struct igb_flex_filter)); rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM, item, "Not supported by flex filter"); @@ -1116,7 +1116,7 @@ cons_parse_flex_filter(const struct rte_flow_attr *attr, for (j = 0; j < raw_spec->length; j++) { if (raw_mask->pattern[j] != 0xFF) { - memset(filter, 0, sizeof(struct rte_eth_flex_filter)); + memset(filter, 0, sizeof(struct igb_flex_filter)); rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM, item, "Not supported by flex filter"); @@ -1140,8 +1140,8 @@ cons_parse_flex_filter(const struct rte_flow_attr *attr, } if ((raw_spec->length + offset + total_offset) > - RTE_FLEX_FILTER_MAXLEN) { - memset(filter, 0, sizeof(struct rte_eth_flex_filter)); + IGB_FLEX_FILTER_MAXLEN) { + memset(filter, 0, sizeof(struct igb_flex_filter)); rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM, item, "Not supported by flex filter"); @@ -1204,7 +1204,7 @@ cons_parse_flex_filter(const struct rte_flow_attr *attr, /* check if the first not void action is QUEUE. */ NEXT_ITEM_OF_ACTION(act, actions, index); if (act->type != RTE_FLOW_ACTION_TYPE_QUEUE) { - memset(filter, 0, sizeof(struct rte_eth_flex_filter)); + memset(filter, 0, sizeof(struct igb_flex_filter)); rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION, act, "Not supported action."); @@ -1218,7 +1218,7 @@ cons_parse_flex_filter(const struct rte_flow_attr *attr, index++; NEXT_ITEM_OF_ACTION(act, actions, index); if (act->type != RTE_FLOW_ACTION_TYPE_END) { - memset(filter, 0, sizeof(struct rte_eth_flex_filter)); + memset(filter, 0, sizeof(struct igb_flex_filter)); rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION, act, "Not supported action."); @@ -1228,7 +1228,7 @@ cons_parse_flex_filter(const struct rte_flow_attr *attr, /* parse attr */ /* must be input direction */ if (!attr->ingress) { - memset(filter, 0, sizeof(struct rte_eth_flex_filter)); + memset(filter, 0, sizeof(struct igb_flex_filter)); rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ATTR_INGRESS, attr, "Only support ingress."); @@ -1237,7 +1237,7 @@ cons_parse_flex_filter(const struct rte_flow_attr *attr, /* not supported */ if (attr->egress) { - memset(filter, 0, sizeof(struct rte_eth_flex_filter)); + memset(filter, 0, sizeof(struct igb_flex_filter)); rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ATTR_EGRESS, attr, "Not support egress."); @@ -1246,7 +1246,7 @@ cons_parse_flex_filter(const struct rte_flow_attr *attr, /* not supported */ if (attr->transfer) { - memset(filter, 0, sizeof(struct rte_eth_flex_filter)); + memset(filter, 0, sizeof(struct igb_flex_filter)); rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ATTR_TRANSFER, attr, "No support for transfer."); @@ -1254,7 +1254,7 @@ cons_parse_flex_filter(const struct rte_flow_attr *attr, } if (attr->priority > 0xFFFF) { - memset(filter, 0, sizeof(struct rte_eth_flex_filter)); + memset(filter, 0, sizeof(struct igb_flex_filter)); rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ATTR_PRIORITY, attr, "Error priority."); @@ -1271,7 +1271,7 @@ igb_parse_flex_filter(struct rte_eth_dev *dev, const struct rte_flow_attr *attr, const struct rte_flow_item pattern[], const struct rte_flow_action actions[], - struct rte_eth_flex_filter *filter, + struct igb_flex_filter *filter, struct rte_flow_error *error) { struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -1283,7 +1283,7 @@ igb_parse_flex_filter(struct rte_eth_dev *dev, actions, filter, error); if (filter->queue >= IGB_MAX_RX_QUEUE_NUM) { - memset(filter, 0, sizeof(struct rte_eth_flex_filter)); + memset(filter, 0, sizeof(struct igb_flex_filter)); rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM, NULL, "queue number not supported by flex filter"); @@ -1444,7 +1444,7 @@ igb_flow_create(struct rte_eth_dev *dev, struct rte_eth_ntuple_filter ntuple_filter; struct rte_eth_ethertype_filter ethertype_filter; struct rte_eth_syn_filter syn_filter; - struct rte_eth_flex_filter flex_filter; + struct igb_flex_filter flex_filter; struct igb_rte_flow_rss_conf rss_conf; struct rte_flow *flow = NULL; struct igb_ntuple_filter_ele *ntuple_filter_ptr; @@ -1549,7 +1549,7 @@ igb_flow_create(struct rte_eth_dev *dev, goto out; } - memset(&flex_filter, 0, sizeof(struct rte_eth_flex_filter)); + memset(&flex_filter, 0, sizeof(struct igb_flex_filter)); ret = igb_parse_flex_filter(dev, attr, pattern, actions, &flex_filter, error); if (!ret) { @@ -1564,7 +1564,7 @@ igb_flow_create(struct rte_eth_dev *dev, rte_memcpy(&flex_filter_ptr->filter_info, &flex_filter, - sizeof(struct rte_eth_flex_filter)); + sizeof(struct igb_flex_filter)); TAILQ_INSERT_TAIL(&igb_filter_flex_list, flex_filter_ptr, entries); flow->rule = flex_filter_ptr; @@ -1621,7 +1621,7 @@ igb_flow_validate(__rte_unused struct rte_eth_dev *dev, struct rte_eth_ntuple_filter ntuple_filter; struct rte_eth_ethertype_filter ethertype_filter; struct rte_eth_syn_filter syn_filter; - struct rte_eth_flex_filter flex_filter; + struct igb_flex_filter flex_filter; struct igb_rte_flow_rss_conf rss_conf; int ret; @@ -1643,7 +1643,7 @@ igb_flow_validate(__rte_unused struct rte_eth_dev *dev, if (!ret) return 0; - memset(&flex_filter, 0, sizeof(struct rte_eth_flex_filter)); + memset(&flex_filter, 0, sizeof(struct igb_flex_filter)); ret = igb_parse_flex_filter(dev, attr, pattern, actions, &flex_filter, error); if (!ret) diff --git a/lib/librte_ethdev/rte_eth_ctrl.h b/lib/librte_ethdev/rte_eth_ctrl.h index 5690f8111a..c5e33bec31 100644 --- a/lib/librte_ethdev/rte_eth_ctrl.h +++ b/lib/librte_ethdev/rte_eth_ctrl.h @@ -56,25 +56,6 @@ enum rte_filter_op { RTE_ETH_FILTER_OP_MAX }; -#define RTE_FLEX_FILTER_MAXLEN 128 /**< bytes to use in flex filter. */ -#define RTE_FLEX_FILTER_MASK_SIZE \ - (RTE_ALIGN(RTE_FLEX_FILTER_MAXLEN, CHAR_BIT) / CHAR_BIT) - /**< mask bytes in flex filter. */ - -/** - * A structure used to define the flex filter entry - * to support RTE_ETH_FILTER_FLEXIBLE with RTE_ETH_FILTER_ADD, - * RTE_ETH_FILTER_DELETE and RTE_ETH_FILTER_GET operations. - */ -struct rte_eth_flex_filter { - uint16_t len; - uint8_t bytes[RTE_FLEX_FILTER_MAXLEN]; /**< flex bytes in big endian.*/ - uint8_t mask[RTE_FLEX_FILTER_MASK_SIZE]; /**< if mask bit is 1b, do - not compare corresponding byte. */ - uint8_t priority; - uint16_t queue; /**< Queue assigned to when match. */ -}; - /** * A structure used to define the TCP syn filter entry * to support RTE_ETH_FILTER_SYN with RTE_ETH_FILTER_ADD,