From patchwork Tue Jan 12 09:32:41 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Guo, Jia" X-Patchwork-Id: 86392 X-Patchwork-Delegate: qi.z.zhang@intel.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 D6F0CA04B5; Tue, 12 Jan 2021 10:39:16 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DB82B140DBD; Tue, 12 Jan 2021 10:39:13 +0100 (CET) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by mails.dpdk.org (Postfix) with ESMTP id E25A8140DB2 for ; Tue, 12 Jan 2021 10:39:11 +0100 (CET) IronPort-SDR: 2fENsWn6Ua7Sv0DhyvAkSfUIZ3aSTnJ9m4zsuRtICmaZIignoR1EgDmtmRlthazR8zu4UoS5F5 9wx93YgxCoAw== X-IronPort-AV: E=McAfee;i="6000,8403,9861"; a="239554317" X-IronPort-AV: E=Sophos;i="5.79,341,1602572400"; d="scan'208";a="239554317" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jan 2021 01:39:11 -0800 IronPort-SDR: /i/bXjbvyzJwKgCl8bE77Knove00/wo4QPqnCLGseFRlIzCmxFNQYDcGJ3jU4U21y5tvbAqoYg tt4Sl8VflaMg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.79,341,1602572400"; d="scan'208";a="381356089" Received: from npg-dpdk-cvl-jeffguo-01.sh.intel.com ([10.67.111.128]) by orsmga008.jf.intel.com with ESMTP; 12 Jan 2021 01:39:09 -0800 From: Jeff Guo To: qi.z.zhang@intel.com, jingjing.wu@intel.com, qiming.yang@intel.com, haiyue.wang@intel.com Cc: dev@dpdk.org, jia.guo@intel.com, simei.su@intel.com Date: Tue, 12 Jan 2021 17:32:41 +0800 Message-Id: <20210112093243.40840-2-jia.guo@intel.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210112093243.40840-1-jia.guo@intel.com> References: <20201216085854.7842-1-jia.guo@intel.com> <20210112093243.40840-1-jia.guo@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [dpdk-dev v3 1/3] net/ice/base: add package PTYPE enable information 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" Scan the 'Marker PType TCAM' session to retrieve the Rx parser PTYPE enable information from the current package. Signed-off-by: Haiyue Wang Signed-off-by: Jeff Guo --- drivers/net/ice/base/ice_flex_pipe.c | 79 ++++++++++++++++++++++++++++ drivers/net/ice/base/ice_flex_pipe.h | 3 ++ drivers/net/ice/base/ice_flex_type.h | 19 +++++++ drivers/net/ice/base/ice_type.h | 1 + 4 files changed, 102 insertions(+) diff --git a/drivers/net/ice/base/ice_flex_pipe.c b/drivers/net/ice/base/ice_flex_pipe.c index 96aed3b795..96628ae5dc 100644 --- a/drivers/net/ice/base/ice_flex_pipe.c +++ b/drivers/net/ice/base/ice_flex_pipe.c @@ -316,6 +316,84 @@ ice_pkg_enum_entry(struct ice_seg *ice_seg, struct ice_pkg_enum *state, return entry; } +/** + * ice_hw_ptype_ena - check if the PTYPE is enabled or not + * @hw: pointer to the HW structure + * @ptype: the hardware PTYPE + */ +bool ice_hw_ptype_ena(struct ice_hw *hw, u16 ptype) +{ + return ptype < ICE_FLOW_PTYPE_MAX && + ice_is_bit_set(hw->hw_ptype, ptype); +} + +/** + * ice_marker_ptype_tcam_handler + * @sect_type: section type + * @section: pointer to section + * @index: index of the Marker PType TCAM entry to be returned + * @offset: pointer to receive absolute offset, always 0 for ptype TCAM sections + * + * This is a callback function that can be passed to ice_pkg_enum_entry. + * Handles enumeration of individual Marker PType TCAM entries. + */ +static void * +ice_marker_ptype_tcam_handler(u32 sect_type, void *section, u32 index, + u32 *offset) +{ + struct ice_marker_ptype_tcam_section *marker_ptype; + + if (!section) + return NULL; + + if (sect_type != ICE_SID_RXPARSER_MARKER_PTYPE) + return NULL; + + if (index > ICE_MAX_MARKER_PTYPE_TCAMS_IN_BUF) + return NULL; + + if (offset) + *offset = 0; + + marker_ptype = (struct ice_marker_ptype_tcam_section *)section; + + if (index >= LE16_TO_CPU(marker_ptype->count)) + return NULL; + + return marker_ptype->tcam + index; +} + +/** + * ice_fill_hw_ptype - fill the enabled PTYPE bit information + * @hw: pointer to the HW structure + */ +static void +ice_fill_hw_ptype(struct ice_hw *hw) +{ + struct ice_marker_ptype_tcam_entry *tcam; + struct ice_seg *seg = hw->seg; + struct ice_pkg_enum state; + + ice_zero_bitmap(hw->hw_ptype, ICE_FLOW_PTYPE_MAX); + if (!seg) + return; + + ice_memset(&state, 0, sizeof(state), ICE_NONDMA_MEM); + + do { + tcam = (struct ice_marker_ptype_tcam_entry *) + ice_pkg_enum_entry(seg, &state, + ICE_SID_RXPARSER_MARKER_PTYPE, NULL, + ice_marker_ptype_tcam_handler); + if (tcam && + LE16_TO_CPU(tcam->addr) < ICE_MARKER_PTYPE_TCAM_ADDR_MAX && + LE16_TO_CPU(tcam->ptype) < ICE_FLOW_PTYPE_MAX) + ice_set_bit(LE16_TO_CPU(tcam->ptype), hw->hw_ptype); + + seg = NULL; + } while (tcam); +} + /** * ice_boost_tcam_handler * @sect_type: section type @@ -1541,6 +1619,7 @@ enum ice_status ice_init_pkg(struct ice_hw *hw, u8 *buf, u32 len) */ ice_init_pkg_regs(hw); ice_fill_blk_tbls(hw); + ice_fill_hw_ptype(hw); ice_get_prof_index_max(hw); } else { ice_debug(hw, ICE_DBG_INIT, "package load failed, %d\n", diff --git a/drivers/net/ice/base/ice_flex_pipe.h b/drivers/net/ice/base/ice_flex_pipe.h index d4679cc940..066ff95e13 100644 --- a/drivers/net/ice/base/ice_flex_pipe.h +++ b/drivers/net/ice/base/ice_flex_pipe.h @@ -54,6 +54,9 @@ bool ice_tunnel_port_in_use(struct ice_hw *hw, u16 port, u16 *index); bool ice_tunnel_get_type(struct ice_hw *hw, u16 port, enum ice_tunnel_type *type); +/* RX parser PType functions */ +bool ice_hw_ptype_ena(struct ice_hw *hw, u16 ptype); + /* XLT2/VSI group functions */ enum ice_status ice_vsig_find_vsi(struct ice_hw *hw, enum ice_block blk, u16 vsi, u16 *vsig); diff --git a/drivers/net/ice/base/ice_flex_type.h b/drivers/net/ice/base/ice_flex_type.h index 62cc81b49c..9b9503b3ba 100644 --- a/drivers/net/ice/base/ice_flex_type.h +++ b/drivers/net/ice/base/ice_flex_type.h @@ -472,6 +472,25 @@ struct ice_boost_tcam_section { sizeof(struct ice_boost_tcam_entry), \ sizeof(struct ice_boost_tcam_entry)) +/* package Marker PType TCAM entry */ +struct ice_marker_ptype_tcam_entry { +#define ICE_MARKER_PTYPE_TCAM_ADDR_MAX 1024 + __le16 addr; + __le16 ptype; + u8 keys[20]; +}; + +struct ice_marker_ptype_tcam_section { + __le16 count; + __le16 reserved; + struct ice_marker_ptype_tcam_entry tcam[STRUCT_HACK_VAR_LEN]; +}; + +#define ICE_MAX_MARKER_PTYPE_TCAMS_IN_BUF ICE_MAX_ENTRIES_IN_BUF( \ + ice_struct_size((struct ice_marker_ptype_tcam_section *)0, tcam, 1) - \ + sizeof(struct ice_marker_ptype_tcam_entry), \ + sizeof(struct ice_marker_ptype_tcam_entry)) + struct ice_xlt1_section { __le16 count; __le16 offset; diff --git a/drivers/net/ice/base/ice_type.h b/drivers/net/ice/base/ice_type.h index bb2cfd07fd..86e93c34a1 100644 --- a/drivers/net/ice/base/ice_type.h +++ b/drivers/net/ice/base/ice_type.h @@ -995,6 +995,7 @@ struct ice_hw { struct ice_lock rss_locks; /* protect RSS configuration */ struct LIST_HEAD_TYPE rss_list_head; struct ice_vlan_mode_ops vlan_mode_ops; + ice_declare_bitmap(hw_ptype, ICE_FLOW_PTYPE_MAX); }; /* Statistics collected by each port, VSI, VEB, and S-channel */ From patchwork Tue Jan 12 09:32:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Guo, Jia" X-Patchwork-Id: 86393 X-Patchwork-Delegate: qi.z.zhang@intel.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 441B6A04B5; Tue, 12 Jan 2021 10:39:23 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 180B8140DC9; Tue, 12 Jan 2021 10:39:16 +0100 (CET) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by mails.dpdk.org (Postfix) with ESMTP id 20098140D1B for ; Tue, 12 Jan 2021 10:39:13 +0100 (CET) IronPort-SDR: NiyVIVWoaHFvplaSoHB7RFrxIamLVkhDvXTNX03Dv7tiShMWp1UvX2L8U9ozkfb+c4pHLXnrDm AIv4YVPHJZ8g== X-IronPort-AV: E=McAfee;i="6000,8403,9861"; a="239554322" X-IronPort-AV: E=Sophos;i="5.79,341,1602572400"; d="scan'208";a="239554322" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jan 2021 01:39:13 -0800 IronPort-SDR: ViCyzKQxb132NGlK0EFuBvx7RIUN+6ESuUsHugj2pkDjLMRWCeqXEG24wSy80ekDinJlpS6FGl TVJ433X514sg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.79,341,1602572400"; d="scan'208";a="381356094" Received: from npg-dpdk-cvl-jeffguo-01.sh.intel.com ([10.67.111.128]) by orsmga008.jf.intel.com with ESMTP; 12 Jan 2021 01:39:11 -0800 From: Jeff Guo To: qi.z.zhang@intel.com, jingjing.wu@intel.com, qiming.yang@intel.com, haiyue.wang@intel.com Cc: dev@dpdk.org, jia.guo@intel.com, simei.su@intel.com Date: Tue, 12 Jan 2021 17:32:42 +0800 Message-Id: <20210112093243.40840-3-jia.guo@intel.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210112093243.40840-1-jia.guo@intel.com> References: <20201216085854.7842-1-jia.guo@intel.com> <20210112093243.40840-1-jia.guo@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [dpdk-dev v3 2/3] net/ice/base: add PTYPE value 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" Add some macros for some PType value. Signed-off-by: Jeff Guo --- drivers/net/ice/base/ice_flex_type.h | 138 +++++++++++++++++++-------- 1 file changed, 99 insertions(+), 39 deletions(-) diff --git a/drivers/net/ice/base/ice_flex_type.h b/drivers/net/ice/base/ice_flex_type.h index 9b9503b3ba..da408ec49c 100644 --- a/drivers/net/ice/base/ice_flex_type.h +++ b/drivers/net/ice/base/ice_flex_type.h @@ -267,45 +267,105 @@ enum ice_sect { }; /* Packet Type (PTYPE) values */ -#define ICE_PTYPE_MAC_PAY 1 -#define ICE_PTYPE_IPV4FRAG_PAY 22 -#define ICE_PTYPE_IPV4_PAY 23 -#define ICE_PTYPE_IPV4_UDP_PAY 24 -#define ICE_PTYPE_IPV4_TCP_PAY 26 -#define ICE_PTYPE_IPV4_SCTP_PAY 27 -#define ICE_PTYPE_IPV4_ICMP_PAY 28 -#define ICE_PTYPE_IPV6FRAG_PAY 88 -#define ICE_PTYPE_IPV6_PAY 89 -#define ICE_PTYPE_IPV6_UDP_PAY 90 -#define ICE_PTYPE_IPV6_TCP_PAY 92 -#define ICE_PTYPE_IPV6_SCTP_PAY 93 -#define ICE_PTYPE_IPV6_ICMP_PAY 94 -#define ICE_MAC_IPV4_GTPC_TEID 325 -#define ICE_MAC_IPV6_GTPC_TEID 326 -#define ICE_MAC_IPV4_GTPC 327 -#define ICE_MAC_IPV6_GTPC 328 -#define ICE_MAC_IPV4_GTPU 329 -#define ICE_MAC_IPV6_GTPU 330 -#define ICE_MAC_IPV4_GTPU_IPV4_FRAG 331 -#define ICE_MAC_IPV4_GTPU_IPV4_PAY 332 -#define ICE_MAC_IPV4_GTPU_IPV4_UDP_PAY 333 -#define ICE_MAC_IPV4_GTPU_IPV4_TCP 334 -#define ICE_MAC_IPV4_GTPU_IPV4_ICMP 335 -#define ICE_MAC_IPV6_GTPU_IPV4_FRAG 336 -#define ICE_MAC_IPV6_GTPU_IPV4_PAY 337 -#define ICE_MAC_IPV6_GTPU_IPV4_UDP_PAY 338 -#define ICE_MAC_IPV6_GTPU_IPV4_TCP 339 -#define ICE_MAC_IPV6_GTPU_IPV4_ICMP 340 -#define ICE_MAC_IPV4_GTPU_IPV6_FRAG 341 -#define ICE_MAC_IPV4_GTPU_IPV6_PAY 342 -#define ICE_MAC_IPV4_GTPU_IPV6_UDP_PAY 343 -#define ICE_MAC_IPV4_GTPU_IPV6_TCP 344 -#define ICE_MAC_IPV4_GTPU_IPV6_ICMPV6 345 -#define ICE_MAC_IPV6_GTPU_IPV6_FRAG 346 -#define ICE_MAC_IPV6_GTPU_IPV6_PAY 347 -#define ICE_MAC_IPV6_GTPU_IPV6_UDP_PAY 348 -#define ICE_MAC_IPV6_GTPU_IPV6_TCP 349 -#define ICE_MAC_IPV6_GTPU_IPV6_ICMPV6 350 +#define ICE_PTYPE_MAC_PAY 1 +#define ICE_MAC_PTP 2 +#define ICE_MAC_LLDP 6 +#define ICE_MAC_ARP 11 +#define ICE_PTYPE_IPV4FRAG_PAY 22 +#define ICE_PTYPE_IPV4_PAY 23 +#define ICE_PTYPE_IPV4_UDP_PAY 24 +#define ICE_PTYPE_IPV4_TCP_PAY 26 +#define ICE_PTYPE_IPV4_SCTP_PAY 27 +#define ICE_PTYPE_IPV4_ICMP_PAY 28 +#define ICE_MAC_IPV4_TUN_PAY 43 +#define ICE_MAC_IPV4_TUN_IPV4_FRAG 44 +#define ICE_MAC_IPV4_TUN_IPV4_PAY 45 +#define ICE_MAC_IPV4_TUN_IPV4_UDP_PAY 46 +#define ICE_MAC_IPV4_TUN_IPV4_TCP 48 +#define ICE_MAC_IPV4_TUN_IPV4_SCTP 49 +#define ICE_MAC_IPV4_TUN_IPV4_ICMP 50 +#define ICE_MAC_IPV4_TUN_IPV6_FRAG 51 +#define ICE_MAC_IPV4_TUN_IPV6_PAY 52 +#define ICE_MAC_IPV4_TUN_IPV6_UDP_PAY 53 +#define ICE_MAC_IPV4_TUN_IPV6_TCP 55 +#define ICE_MAC_IPV4_TUN_IPV6_SCTP 56 +#define ICE_MAC_IPV4_TUN_IPV6_ICMPV6 57 +#define ICE_MAC_IPV4_TUN_ICE_MAC_PAY 58 +#define ICE_MAC_IPV4_TUN_ICE_MAC_IPV4_FRAG 59 +#define ICE_MAC_IPV4_TUN_ICE_MAC_IPV4_PAY 60 +#define ICE_MAC_IPV4_TUN_ICE_MAC_IPV4_UDP_PAY 61 +#define ICE_MAC_IPV4_TUN_ICE_MAC_IPV4_TCP 63 +#define ICE_MAC_IPV4_TUN_ICE_MAC_IPV4_SCTP 64 +#define ICE_MAC_IPV4_TUN_ICE_MAC_IPV4_ICMP 65 +#define ICE_MAC_IPV4_TUN_ICE_MAC_IPV6_FRAG 66 +#define ICE_MAC_IPV4_TUN_ICE_MAC_IPV6_PAY 67 +#define ICE_MAC_IPV4_TUN_ICE_MAC_IPV6_UDP_PAY 68 +#define ICE_MAC_IPV4_TUN_ICE_MAC_IPV6_TCP 70 +#define ICE_MAC_IPV4_TUN_ICE_MAC_IPV6_SCTP 71 +#define ICE_MAC_IPV4_TUN_ICE_MAC_IPV6_ICMPV6 72 +#define ICE_PTYPE_IPV6FRAG_PAY 88 +#define ICE_PTYPE_IPV6_PAY 89 +#define ICE_PTYPE_IPV6_UDP_PAY 90 +#define ICE_PTYPE_IPV6_TCP_PAY 92 +#define ICE_PTYPE_IPV6_SCTP_PAY 93 +#define ICE_PTYPE_IPV6_ICMP_PAY 94 +#define ICE_MAC_IPV4_ESP 160 +#define ICE_MAC_IPV6_ESP 161 +#define ICE_MAC_IPV4_AH 162 +#define ICE_MAC_IPV6_AH 163 +#define ICE_MAC_IPV4_NAT_T_ESP 164 +#define ICE_MAC_IPV6_NAT_T_ESP 165 +#define ICE_MAC_IPV4_NAT_T_IKE 166 +#define ICE_MAC_IPV6_NAT_T_IKE 167 +#define ICE_MAC_IPV4_NAT_T_KEEP 168 +#define ICE_MAC_IPV6_NAT_T_KEEP 169 +#define ICE_MAC_PPPOD_PAY 300 +#define ICE_MAC_PPPOE_PAY 301 +#define ICE_MAC_PPPOE_IPV4_FRAG 302 +#define ICE_MAC_PPPOE_IPV4_PAY 303 +#define ICE_MAC_PPPOE_IPV4_UDP_PAY 304 +#define ICE_MAC_PPPOE_IPV4_TCP 305 +#define ICE_MAC_PPPOE_IPV4_SCTP 306 +#define ICE_MAC_PPPOE_IPV4_ICMP 307 +#define ICE_MAC_PPPOE_IPV6_FRAG 308 +#define ICE_MAC_PPPOE_IPV6_PAY 309 +#define ICE_MAC_PPPOE_IPV6_UDP_PAY 310 +#define ICE_MAC_PPPOE_IPV6_TCP 311 +#define ICE_MAC_PPPOE_IPV6_SCTP 312 +#define ICE_MAC_PPPOE_IPV6_ICMPV6 313 +#define ICE_MAC_IPV4_GTPC_TEID 325 +#define ICE_MAC_IPV6_GTPC_TEID 326 +#define ICE_MAC_IPV4_GTPC 327 +#define ICE_MAC_IPV6_GTPC 328 +#define ICE_MAC_IPV4_GTPU 329 +#define ICE_MAC_IPV6_GTPU 330 +#define ICE_MAC_IPV4_GTPU_IPV4_FRAG 331 +#define ICE_MAC_IPV4_GTPU_IPV4_PAY 332 +#define ICE_MAC_IPV4_GTPU_IPV4_UDP_PAY 333 +#define ICE_MAC_IPV4_GTPU_IPV4_TCP 334 +#define ICE_MAC_IPV4_GTPU_IPV4_ICMP 335 +#define ICE_MAC_IPV6_GTPU_IPV4_FRAG 336 +#define ICE_MAC_IPV6_GTPU_IPV4_PAY 337 +#define ICE_MAC_IPV6_GTPU_IPV4_UDP_PAY 338 +#define ICE_MAC_IPV6_GTPU_IPV4_TCP 339 +#define ICE_MAC_IPV6_GTPU_IPV4_ICMP 340 +#define ICE_MAC_IPV4_GTPU_IPV6_FRAG 341 +#define ICE_MAC_IPV4_GTPU_IPV6_PAY 342 +#define ICE_MAC_IPV4_GTPU_IPV6_UDP_PAY 343 +#define ICE_MAC_IPV4_GTPU_IPV6_TCP 344 +#define ICE_MAC_IPV4_GTPU_IPV6_ICMPV6 345 +#define ICE_MAC_IPV6_GTPU_IPV6_FRAG 346 +#define ICE_MAC_IPV6_GTPU_IPV6_PAY 347 +#define ICE_MAC_IPV6_GTPU_IPV6_UDP_PAY 348 +#define ICE_MAC_IPV6_GTPU_IPV6_TCP 349 +#define ICE_MAC_IPV6_GTPU_IPV6_ICMPV6 350 +#define ICE_MAC_IPV4_PFCP_NODE 351 +#define ICE_MAC_IPV4_PFCP_SESSION 352 +#define ICE_MAC_IPV6_PFCP_NODE 353 +#define ICE_MAC_IPV6_PFCP_SESSION 354 +#define ICE_MAC_IPV4_L2TPV3 360 +#define ICE_MAC_IPV6_L2TPV3 361 + /* Attributes that can modify PTYPE definitions. * From patchwork Tue Jan 12 09:32:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Guo, Jia" X-Patchwork-Id: 86394 X-Patchwork-Delegate: qi.z.zhang@intel.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 D9EB0A04B5; Tue, 12 Jan 2021 10:39:29 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 544F2140DD3; Tue, 12 Jan 2021 10:39:19 +0100 (CET) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by mails.dpdk.org (Postfix) with ESMTP id C5BBD140DCE for ; Tue, 12 Jan 2021 10:39:16 +0100 (CET) IronPort-SDR: Zw79MpJEnpcSFu3gjKZmEqEeMqRh1EZBlFLyJgD47Diri9idBPLjegoZuaiQBi8BIIpDi0RH+5 o1LqDmrJFkbw== X-IronPort-AV: E=McAfee;i="6000,8403,9861"; a="239554326" X-IronPort-AV: E=Sophos;i="5.79,341,1602572400"; d="scan'208";a="239554326" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jan 2021 01:39:16 -0800 IronPort-SDR: GM/Pu0TOxAj3bkiyKEFLobqgnGtP9DHrMc6K9AosgvuFRV+HLufaOViQtIFoSGyuPpbKRulWqX 1cMAaoof/bsg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.79,341,1602572400"; d="scan'208";a="381356099" Received: from npg-dpdk-cvl-jeffguo-01.sh.intel.com ([10.67.111.128]) by orsmga008.jf.intel.com with ESMTP; 12 Jan 2021 01:39:13 -0800 From: Jeff Guo To: qi.z.zhang@intel.com, jingjing.wu@intel.com, qiming.yang@intel.com, haiyue.wang@intel.com Cc: dev@dpdk.org, jia.guo@intel.com, simei.su@intel.com Date: Tue, 12 Jan 2021 17:32:43 +0800 Message-Id: <20210112093243.40840-4-jia.guo@intel.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210112093243.40840-1-jia.guo@intel.com> References: <20201216085854.7842-1-jia.guo@intel.com> <20210112093243.40840-1-jia.guo@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [dpdk-dev v3 3/3] net/ice: refactor PTYPE parsing 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" If the capability of a PTYPE within a specific package could be negotiated, no need to maintain a different PTYPE list for each type of the package when parsing PTYPE. So refactor the PTYPE parsing mechanism for each flow engines. Signed-off-by: Jeff Guo --- drivers/net/ice/ice_acl_filter.c | 3 +- drivers/net/ice/ice_fdir_filter.c | 63 ++----------- drivers/net/ice/ice_generic_flow.c | 132 ++++++++++++++++++++++++-- drivers/net/ice/ice_generic_flow.h | 9 +- drivers/net/ice/ice_hash.c | 47 ++-------- drivers/net/ice/ice_switch_filter.c | 139 ++++------------------------ 6 files changed, 165 insertions(+), 228 deletions(-) diff --git a/drivers/net/ice/ice_acl_filter.c b/drivers/net/ice/ice_acl_filter.c index f7dbe53574..363ce68318 100644 --- a/drivers/net/ice/ice_acl_filter.c +++ b/drivers/net/ice/ice_acl_filter.c @@ -914,7 +914,8 @@ ice_acl_parse(struct ice_adapter *ad, int ret; memset(filter, 0, sizeof(*filter)); - item = ice_search_pattern_match_item(pattern, array, array_len, error); + item = ice_search_pattern_match_item(ad, pattern, array, array_len, + error); if (!item) return -rte_errno; diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_filter.c index 175abcdd5c..ce6aa09d3d 100644 --- a/drivers/net/ice/ice_fdir_filter.c +++ b/drivers/net/ice/ice_fdir_filter.c @@ -84,34 +84,7 @@ ICE_INSET_IPV6_SRC | ICE_INSET_IPV6_DST | \ ICE_INSET_GTPU_TEID | ICE_INSET_GTPU_QFI) -static struct ice_pattern_match_item ice_fdir_pattern_os[] = { - {pattern_eth_ipv4, ICE_FDIR_INSET_ETH_IPV4, ICE_INSET_NONE}, - {pattern_eth_ipv4_udp, ICE_FDIR_INSET_ETH_IPV4_UDP, ICE_INSET_NONE}, - {pattern_eth_ipv4_tcp, ICE_FDIR_INSET_ETH_IPV4_TCP, ICE_INSET_NONE}, - {pattern_eth_ipv4_sctp, ICE_FDIR_INSET_ETH_IPV4_SCTP, ICE_INSET_NONE}, - {pattern_eth_ipv6, ICE_FDIR_INSET_ETH_IPV6, ICE_INSET_NONE}, - {pattern_eth_ipv6_udp, ICE_FDIR_INSET_ETH_IPV6_UDP, ICE_INSET_NONE}, - {pattern_eth_ipv6_tcp, ICE_FDIR_INSET_ETH_IPV6_TCP, ICE_INSET_NONE}, - {pattern_eth_ipv6_sctp, ICE_FDIR_INSET_ETH_IPV6_SCTP, ICE_INSET_NONE}, - {pattern_eth_ipv4_udp_vxlan_ipv4, - ICE_FDIR_INSET_VXLAN_IPV4, ICE_INSET_NONE}, - {pattern_eth_ipv4_udp_vxlan_ipv4_udp, - ICE_FDIR_INSET_VXLAN_IPV4_UDP, ICE_INSET_NONE}, - {pattern_eth_ipv4_udp_vxlan_ipv4_tcp, - ICE_FDIR_INSET_VXLAN_IPV4_TCP, ICE_INSET_NONE}, - {pattern_eth_ipv4_udp_vxlan_ipv4_sctp, - ICE_FDIR_INSET_VXLAN_IPV4_SCTP, ICE_INSET_NONE}, - {pattern_eth_ipv4_udp_vxlan_eth_ipv4, - ICE_FDIR_INSET_VXLAN_IPV4, ICE_INSET_NONE}, - {pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp, - ICE_FDIR_INSET_VXLAN_IPV4_UDP, ICE_INSET_NONE}, - {pattern_eth_ipv4_udp_vxlan_eth_ipv4_tcp, - ICE_FDIR_INSET_VXLAN_IPV4_TCP, ICE_INSET_NONE}, - {pattern_eth_ipv4_udp_vxlan_eth_ipv4_sctp, - ICE_FDIR_INSET_VXLAN_IPV4_SCTP, ICE_INSET_NONE}, -}; - -static struct ice_pattern_match_item ice_fdir_pattern_comms[] = { +static struct ice_pattern_match_item ice_fdir_pattern_list[] = { {pattern_ethertype, ICE_FDIR_INSET_ETH, ICE_INSET_NONE}, {pattern_eth_ipv4, ICE_FDIR_INSET_ETH_IPV4, ICE_INSET_NONE}, {pattern_eth_ipv4_udp, ICE_FDIR_INSET_ETH_IPV4_UDP, ICE_INSET_NONE}, @@ -143,8 +116,7 @@ static struct ice_pattern_match_item ice_fdir_pattern_comms[] = { {pattern_eth_ipv6_gtpu_eh, ICE_FDIR_INSET_IPV6_GTPU_EH, ICE_INSET_NONE}, }; -static struct ice_flow_parser ice_fdir_parser_os; -static struct ice_flow_parser ice_fdir_parser_comms; +static struct ice_flow_parser ice_fdir_parser; static int ice_fdir_is_tunnel_profile(enum ice_fdir_tunnel_type tunnel_type); @@ -1111,12 +1083,7 @@ ice_fdir_init(struct ice_adapter *ad) if (ret) return ret; - if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS) - parser = &ice_fdir_parser_comms; - else if (ad->active_pkg_type == ICE_PKG_TYPE_OS_DEFAULT) - parser = &ice_fdir_parser_os; - else - return -EINVAL; + parser = &ice_fdir_parser; return ice_register_parser(parser, ad); } @@ -1124,16 +1091,13 @@ ice_fdir_init(struct ice_adapter *ad) static void ice_fdir_uninit(struct ice_adapter *ad) { - struct ice_pf *pf = &ad->pf; struct ice_flow_parser *parser; + struct ice_pf *pf = &ad->pf; if (ad->hw.dcf_enabled) return; - if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS) - parser = &ice_fdir_parser_comms; - else - parser = &ice_fdir_parser_os; + parser = &ice_fdir_parser; ice_unregister_parser(parser, ad); @@ -2039,7 +2003,8 @@ ice_fdir_parse(struct ice_adapter *ad, int ret; memset(filter, 0, sizeof(*filter)); - item = ice_search_pattern_match_item(pattern, array, array_len, error); + item = ice_search_pattern_match_item(ad, pattern, array, array_len, + error); if (!item) return -rte_errno; @@ -2067,18 +2032,10 @@ ice_fdir_parse(struct ice_adapter *ad, return ret; } -static struct ice_flow_parser ice_fdir_parser_os = { - .engine = &ice_fdir_engine, - .array = ice_fdir_pattern_os, - .array_len = RTE_DIM(ice_fdir_pattern_os), - .parse_pattern_action = ice_fdir_parse, - .stage = ICE_FLOW_STAGE_DISTRIBUTOR, -}; - -static struct ice_flow_parser ice_fdir_parser_comms = { +static struct ice_flow_parser ice_fdir_parser = { .engine = &ice_fdir_engine, - .array = ice_fdir_pattern_comms, - .array_len = RTE_DIM(ice_fdir_pattern_comms), + .array = ice_fdir_pattern_list, + .array_len = RTE_DIM(ice_fdir_pattern_list), .parse_pattern_action = ice_fdir_parse, .stage = ICE_FLOW_STAGE_DISTRIBUTOR, }; diff --git a/drivers/net/ice/ice_generic_flow.c b/drivers/net/ice/ice_generic_flow.c index 1429cbc3b6..4313aae183 100644 --- a/drivers/net/ice/ice_generic_flow.c +++ b/drivers/net/ice/ice_generic_flow.c @@ -2046,17 +2046,127 @@ ice_match_pattern(enum rte_flow_item_type *item_array, item->type == RTE_FLOW_ITEM_TYPE_END); } +struct ice_ptype_match { + enum rte_flow_item_type *pattern_list; + uint16_t hw_ptype; +}; + +static struct ice_ptype_match ice_ptype_map[] = { + {pattern_eth_ipv4, ICE_PTYPE_IPV4_PAY}, + {pattern_eth_ipv4_udp, ICE_PTYPE_IPV4_UDP_PAY}, + {pattern_eth_ipv4_tcp, ICE_PTYPE_IPV4_TCP_PAY}, + {pattern_eth_ipv4_sctp, ICE_PTYPE_IPV4_SCTP_PAY}, + {pattern_eth_ipv4_gtpu, ICE_MAC_IPV4_GTPU}, + {pattern_eth_ipv4_gtpu_eh, ICE_MAC_IPV4_GTPU}, + {pattern_eth_ipv4_gtpu_ipv4, ICE_MAC_IPV4_GTPU_IPV4_PAY}, + {pattern_eth_ipv4_gtpu_ipv4_udp, ICE_MAC_IPV4_GTPU_IPV4_UDP_PAY}, + {pattern_eth_ipv4_gtpu_ipv4_tcp, ICE_MAC_IPV4_GTPU_IPV4_TCP}, + {pattern_eth_ipv4_gtpu_ipv6, ICE_MAC_IPV4_GTPU_IPV6_PAY}, + {pattern_eth_ipv4_gtpu_ipv6_udp, ICE_MAC_IPV4_GTPU_IPV6_UDP_PAY}, + {pattern_eth_ipv4_gtpu_ipv6_tcp, ICE_MAC_IPV4_GTPU_IPV6_TCP}, + {pattern_eth_ipv4_gtpu_eh_ipv4, ICE_MAC_IPV4_GTPU_IPV4_PAY}, + {pattern_eth_ipv4_gtpu_eh_ipv4_udp, ICE_MAC_IPV4_GTPU_IPV4_UDP_PAY}, + {pattern_eth_ipv4_gtpu_eh_ipv4_tcp, ICE_MAC_IPV4_GTPU_IPV4_TCP}, + {pattern_eth_ipv4_gtpu_eh_ipv6, ICE_MAC_IPV4_GTPU_IPV6_PAY}, + {pattern_eth_ipv4_gtpu_eh_ipv6_udp, ICE_MAC_IPV4_GTPU_IPV6_UDP_PAY}, + {pattern_eth_ipv4_gtpu_eh_ipv6_tcp, ICE_MAC_IPV4_GTPU_IPV6_TCP}, + {pattern_eth_ipv4_esp, ICE_MAC_IPV4_ESP}, + {pattern_eth_ipv4_udp_esp, ICE_MAC_IPV4_NAT_T_ESP}, + {pattern_eth_ipv4_ah, ICE_MAC_IPV4_AH}, + {pattern_eth_ipv4_l2tp, ICE_MAC_IPV4_L2TPV3}, + {pattern_eth_ipv4_pfcp, ICE_MAC_IPV4_PFCP_SESSION}, + {pattern_eth_ipv6, ICE_PTYPE_IPV6_PAY}, + {pattern_eth_ipv6_udp, ICE_PTYPE_IPV6_UDP_PAY}, + {pattern_eth_ipv6_tcp, ICE_PTYPE_IPV6_TCP_PAY}, + {pattern_eth_ipv6_sctp, ICE_PTYPE_IPV6_SCTP_PAY}, + {pattern_eth_ipv6_gtpu, ICE_MAC_IPV6_GTPU}, + {pattern_eth_ipv6_gtpu_eh, ICE_MAC_IPV6_GTPU}, + {pattern_eth_ipv6_gtpu_ipv4, ICE_MAC_IPV6_GTPU_IPV4_PAY}, + {pattern_eth_ipv6_gtpu_ipv4_udp, ICE_MAC_IPV6_GTPU_IPV4_UDP_PAY}, + {pattern_eth_ipv6_gtpu_ipv4_tcp, ICE_MAC_IPV6_GTPU_IPV4_TCP}, + {pattern_eth_ipv6_gtpu_ipv6, ICE_MAC_IPV6_GTPU_IPV6_PAY}, + {pattern_eth_ipv6_gtpu_ipv6_udp, ICE_MAC_IPV6_GTPU_IPV6_UDP_PAY}, + {pattern_eth_ipv6_gtpu_ipv6_tcp, ICE_MAC_IPV6_GTPU_IPV6_TCP}, + {pattern_eth_ipv6_gtpu_eh_ipv4, ICE_MAC_IPV6_GTPU_IPV4_PAY}, + {pattern_eth_ipv6_gtpu_eh_ipv4_udp, ICE_MAC_IPV6_GTPU_IPV4_UDP_PAY}, + {pattern_eth_ipv6_gtpu_eh_ipv4_tcp, ICE_MAC_IPV6_GTPU_IPV4_TCP}, + {pattern_eth_ipv6_gtpu_eh_ipv6, ICE_MAC_IPV6_GTPU_IPV6_PAY}, + {pattern_eth_ipv6_gtpu_eh_ipv6_udp, ICE_MAC_IPV6_GTPU_IPV6_UDP_PAY}, + {pattern_eth_ipv6_gtpu_eh_ipv6_tcp, ICE_MAC_IPV6_GTPU_IPV6_TCP}, + {pattern_eth_ipv6_esp, ICE_MAC_IPV6_ESP}, + {pattern_eth_ipv6_udp_esp, ICE_MAC_IPV6_NAT_T_ESP}, + {pattern_eth_ipv6_ah, ICE_MAC_IPV6_AH}, + {pattern_eth_ipv6_l2tp, ICE_MAC_IPV6_L2TPV3}, + {pattern_eth_ipv6_pfcp, ICE_MAC_IPV6_PFCP_SESSION}, + {pattern_ethertype, ICE_PTYPE_MAC_PAY}, + {pattern_ethertype_vlan, ICE_PTYPE_MAC_PAY}, + {pattern_eth_arp, ICE_PTYPE_MAC_PAY}, + {pattern_eth_vlan_ipv4, ICE_PTYPE_IPV4_PAY}, + {pattern_eth_vlan_ipv4_udp, ICE_PTYPE_IPV4_UDP_PAY}, + {pattern_eth_vlan_ipv4_tcp, ICE_PTYPE_IPV4_TCP_PAY}, + {pattern_eth_vlan_ipv4_sctp, ICE_PTYPE_IPV4_SCTP_PAY}, + {pattern_eth_vlan_ipv6, ICE_PTYPE_IPV6_PAY}, + {pattern_eth_vlan_ipv6_udp, ICE_PTYPE_IPV6_UDP_PAY}, + {pattern_eth_vlan_ipv6_tcp, ICE_PTYPE_IPV6_TCP_PAY}, + {pattern_eth_vlan_ipv6_sctp, ICE_PTYPE_IPV6_SCTP_PAY}, + {pattern_eth_pppoes, ICE_MAC_PPPOE_PAY}, + {pattern_eth_vlan_pppoes, ICE_MAC_PPPOE_PAY}, + {pattern_eth_pppoes_proto, ICE_MAC_PPPOE_PAY}, + {pattern_eth_vlan_pppoes_proto, ICE_MAC_PPPOE_PAY}, + {pattern_eth_pppoes_ipv4, ICE_MAC_PPPOE_IPV4_PAY}, + {pattern_eth_pppoes_ipv4_udp, ICE_MAC_PPPOE_IPV4_UDP_PAY}, + {pattern_eth_pppoes_ipv4_tcp, ICE_MAC_PPPOE_IPV4_TCP}, + {pattern_eth_vlan_pppoes_ipv4, ICE_MAC_PPPOE_IPV4_PAY}, + {pattern_eth_vlan_pppoes_ipv4_tcp, ICE_MAC_PPPOE_IPV4_TCP}, + {pattern_eth_vlan_pppoes_ipv4_udp, ICE_MAC_PPPOE_IPV4_UDP_PAY}, + {pattern_eth_pppoes_ipv6, ICE_MAC_PPPOE_IPV6_PAY}, + {pattern_eth_pppoes_ipv6_udp, ICE_MAC_PPPOE_IPV6_UDP_PAY}, + {pattern_eth_pppoes_ipv6_tcp, ICE_MAC_PPPOE_IPV6_TCP}, + {pattern_eth_vlan_pppoes_ipv6, ICE_MAC_PPPOE_IPV6_PAY}, + {pattern_eth_vlan_pppoes_ipv6_tcp, ICE_MAC_PPPOE_IPV6_TCP}, + {pattern_eth_vlan_pppoes_ipv6_udp, ICE_MAC_PPPOE_IPV6_UDP_PAY}, + {pattern_eth_ipv4_udp_vxlan_ipv4, ICE_MAC_IPV4_TUN_IPV4_PAY}, + {pattern_eth_ipv4_udp_vxlan_ipv4_udp, ICE_MAC_IPV4_TUN_IPV4_UDP_PAY}, + {pattern_eth_ipv4_udp_vxlan_ipv4_tcp, ICE_MAC_IPV4_TUN_IPV4_TCP}, + {pattern_eth_ipv4_udp_vxlan_ipv4_sctp, ICE_MAC_IPV4_TUN_IPV4_SCTP}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv4, ICE_MAC_IPV4_TUN_IPV4_PAY}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp, ICE_MAC_IPV4_TUN_IPV4_UDP_PAY}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv4_tcp, ICE_MAC_IPV4_TUN_IPV4_TCP}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv4_sctp, ICE_MAC_IPV4_TUN_IPV4_SCTP}, + {pattern_eth_ipv4_nvgre_eth_ipv4, ICE_MAC_IPV4_TUN_IPV4_PAY}, + {pattern_eth_ipv4_nvgre_eth_ipv4_udp, ICE_MAC_IPV4_TUN_IPV4_UDP_PAY}, + {pattern_eth_ipv4_nvgre_eth_ipv4_tcp, ICE_MAC_IPV4_TUN_IPV4_TCP}, +}; + +static bool +ice_pattern_is_supported(__rte_unused struct ice_adapter *ad, + const struct rte_flow_item *pattern) +{ + uint16_t i; + + for (i = 0; i < RTE_DIM(ice_ptype_map); i++) { + if (ice_match_pattern(ice_ptype_map[i].pattern_list, + pattern)) { + return ice_hw_ptype_ena(&ad->hw, + ice_ptype_map[i].hw_ptype); + } + } + + return false; +} + struct ice_pattern_match_item * -ice_search_pattern_match_item(const struct rte_flow_item pattern[], - struct ice_pattern_match_item *array, - uint32_t array_len, - struct rte_flow_error *error) +ice_search_pattern_match_item(struct ice_adapter *ad, + const struct rte_flow_item pattern[], + struct ice_pattern_match_item *array, + uint32_t array_len, + struct rte_flow_error *error) { - uint16_t i = 0; struct ice_pattern_match_item *pattern_match_item; /* need free by each filter */ struct rte_flow_item *items; /* used for pattern without VOID items */ uint32_t item_num = 0; /* non-void item number */ + uint16_t i = 0; /* Get the non-void item number of pattern */ while ((pattern + i)->type != RTE_FLOW_ITEM_TYPE_END) { @@ -2078,14 +2188,18 @@ ice_search_pattern_match_item(const struct rte_flow_item pattern[], if (!pattern_match_item) { rte_flow_error_set(error, ENOMEM, RTE_FLOW_ERROR_TYPE_HANDLE, NULL, "Failed to allocate memory."); + rte_free(items); return NULL; } ice_pattern_skip_void_item(items, pattern); - for (i = 0; i < array_len; i++) + if (!ice_pattern_is_supported(ad, pattern)) + goto unsupported; + + for (i = 0; i < array_len; i++) { if (ice_match_pattern(array[i].pattern_list, - items)) { + items)) { pattern_match_item->input_set_mask = array[i].input_set_mask; pattern_match_item->pattern_list = @@ -2094,9 +2208,11 @@ ice_search_pattern_match_item(const struct rte_flow_item pattern[], rte_free(items); return pattern_match_item; } + } + +unsupported: rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM, pattern, "Unsupported pattern"); - rte_free(items); rte_free(pattern_match_item); return NULL; diff --git a/drivers/net/ice/ice_generic_flow.h b/drivers/net/ice/ice_generic_flow.h index 434d2f425d..0dcb620809 100644 --- a/drivers/net/ice/ice_generic_flow.h +++ b/drivers/net/ice/ice_generic_flow.h @@ -593,10 +593,11 @@ int ice_register_parser(struct ice_flow_parser *parser, void ice_unregister_parser(struct ice_flow_parser *parser, struct ice_adapter *ad); struct ice_pattern_match_item * -ice_search_pattern_match_item(const struct rte_flow_item pattern[], - struct ice_pattern_match_item *array, - uint32_t array_len, - struct rte_flow_error *error); +ice_search_pattern_match_item(struct ice_adapter *ad, + const struct rte_flow_item pattern[], + struct ice_pattern_match_item *array, + uint32_t array_len, + struct rte_flow_error *error); int ice_flow_redirect(struct ice_adapter *ad, struct ice_flow_redirect *rd); diff --git a/drivers/net/ice/ice_hash.c b/drivers/net/ice/ice_hash.c index fe3e06c579..fab2d397b7 100644 --- a/drivers/net/ice/ice_hash.c +++ b/drivers/net/ice/ice_hash.c @@ -313,21 +313,7 @@ struct rss_type_match_hdr hint_eth_pppoes = { ICE_FLOW_SEG_HDR_PPPOE, ETH_RSS_ETH | ETH_RSS_PPPOE}; -/* Supported pattern for os default package. */ -static struct ice_pattern_match_item ice_hash_pattern_list_os[] = { - {pattern_eth_ipv4, ICE_INSET_NONE, &hint_eth_ipv4}, - {pattern_eth_ipv4_udp, ICE_INSET_NONE, &hint_eth_ipv4_udp}, - {pattern_eth_ipv4_tcp, ICE_INSET_NONE, &hint_eth_ipv4_tcp}, - {pattern_eth_ipv4_sctp, ICE_INSET_NONE, &hint_eth_ipv4_sctp}, - {pattern_eth_ipv6, ICE_INSET_NONE, &hint_eth_ipv6}, - {pattern_eth_ipv6_udp, ICE_INSET_NONE, &hint_eth_ipv6_udp}, - {pattern_eth_ipv6_tcp, ICE_INSET_NONE, &hint_eth_ipv6_tcp}, - {pattern_eth_ipv6_sctp, ICE_INSET_NONE, &hint_eth_ipv6_sctp}, - {pattern_empty, ICE_INSET_NONE, &hint_empty}, -}; - -/* Supported pattern for comms package. */ -static struct ice_pattern_match_item ice_hash_pattern_list_comms[] = { +static struct ice_pattern_match_item ice_hash_pattern_list[] = { {pattern_empty, ICE_INSET_NONE, &hint_empty}, {pattern_eth_ipv4, ICE_INSET_NONE, @@ -915,19 +901,10 @@ static struct ice_flow_engine ice_hash_engine = { }; /* Register parser for os package. */ -static struct ice_flow_parser ice_hash_parser_os = { - .engine = &ice_hash_engine, - .array = ice_hash_pattern_list_os, - .array_len = RTE_DIM(ice_hash_pattern_list_os), - .parse_pattern_action = ice_hash_parse_pattern_action, - .stage = ICE_FLOW_STAGE_RSS, -}; - -/* Register parser for comms package. */ -static struct ice_flow_parser ice_hash_parser_comms = { +static struct ice_flow_parser ice_hash_parser = { .engine = &ice_hash_engine, - .array = ice_hash_pattern_list_comms, - .array_len = RTE_DIM(ice_hash_pattern_list_comms), + .array = ice_hash_pattern_list, + .array_len = RTE_DIM(ice_hash_pattern_list), .parse_pattern_action = ice_hash_parse_pattern_action, .stage = ICE_FLOW_STAGE_RSS, }; @@ -946,12 +923,7 @@ ice_hash_init(struct ice_adapter *ad) if (ad->hw.dcf_enabled) return 0; - if (ad->active_pkg_type == ICE_PKG_TYPE_OS_DEFAULT) - parser = &ice_hash_parser_os; - else if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS) - parser = &ice_hash_parser_comms; - else - return -EINVAL; + parser = &ice_hash_parser; return ice_register_parser(parser, ad); } @@ -1211,8 +1183,8 @@ ice_hash_parse_pattern_action(__rte_unused struct ice_adapter *ad, } /* Check rss supported pattern and find matched pattern. */ - pattern_match_item = ice_search_pattern_match_item(pattern, - array, array_len, error); + pattern_match_item = ice_search_pattern_match_item(ad, pattern, array, + array_len, error); if (!pattern_match_item) { ret = -rte_errno; goto error; @@ -1352,10 +1324,7 @@ ice_hash_uninit(struct ice_adapter *ad) if (ad->hw.dcf_enabled) return; - if (ad->active_pkg_type == ICE_PKG_TYPE_OS_DEFAULT) - ice_unregister_parser(&ice_hash_parser_os, ad); - else if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS) - ice_unregister_parser(&ice_hash_parser_comms, ad); + ice_unregister_parser(&ice_hash_parser, ad); } static void diff --git a/drivers/net/ice/ice_switch_filter.c b/drivers/net/ice/ice_switch_filter.c index 8cba6eb7b1..e5b7d56068 100644 --- a/drivers/net/ice/ice_switch_filter.c +++ b/drivers/net/ice/ice_switch_filter.c @@ -137,47 +137,11 @@ struct sw_meta { struct ice_adv_rule_info rule_info; }; -static struct ice_flow_parser ice_switch_dist_parser_os; -static struct ice_flow_parser ice_switch_dist_parser_comms; -static struct ice_flow_parser ice_switch_perm_parser_os; -static struct ice_flow_parser ice_switch_perm_parser_comms; +static struct ice_flow_parser ice_switch_dist_parser; +static struct ice_flow_parser ice_switch_perm_parser; static struct -ice_pattern_match_item ice_switch_pattern_dist_os[] = { - {pattern_ethertype, - ICE_SW_INSET_ETHER, ICE_INSET_NONE}, - {pattern_ethertype_vlan, - ICE_SW_INSET_MAC_VLAN, ICE_INSET_NONE}, - {pattern_eth_arp, - ICE_INSET_NONE, ICE_INSET_NONE}, - {pattern_eth_ipv4, - ICE_SW_INSET_MAC_IPV4, ICE_INSET_NONE}, - {pattern_eth_ipv4_udp, - ICE_SW_INSET_MAC_IPV4_UDP, ICE_INSET_NONE}, - {pattern_eth_ipv4_tcp, - ICE_SW_INSET_MAC_IPV4_TCP, ICE_INSET_NONE}, - {pattern_eth_ipv6, - ICE_SW_INSET_MAC_IPV6, ICE_INSET_NONE}, - {pattern_eth_ipv6_udp, - ICE_SW_INSET_MAC_IPV6_UDP, ICE_INSET_NONE}, - {pattern_eth_ipv6_tcp, - ICE_SW_INSET_MAC_IPV6_TCP, ICE_INSET_NONE}, - {pattern_eth_ipv4_udp_vxlan_eth_ipv4, - ICE_SW_INSET_DIST_VXLAN_IPV4, ICE_INSET_NONE}, - {pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp, - ICE_SW_INSET_DIST_VXLAN_IPV4_UDP, ICE_INSET_NONE}, - {pattern_eth_ipv4_udp_vxlan_eth_ipv4_tcp, - ICE_SW_INSET_DIST_VXLAN_IPV4_TCP, ICE_INSET_NONE}, - {pattern_eth_ipv4_nvgre_eth_ipv4, - ICE_SW_INSET_DIST_NVGRE_IPV4, ICE_INSET_NONE}, - {pattern_eth_ipv4_nvgre_eth_ipv4_udp, - ICE_SW_INSET_DIST_NVGRE_IPV4_UDP, ICE_INSET_NONE}, - {pattern_eth_ipv4_nvgre_eth_ipv4_tcp, - ICE_SW_INSET_DIST_NVGRE_IPV4_TCP, ICE_INSET_NONE}, -}; - -static struct -ice_pattern_match_item ice_switch_pattern_dist_comms[] = { +ice_pattern_match_item ice_switch_pattern_dist_list[] = { {pattern_ethertype, ICE_SW_INSET_ETHER, ICE_INSET_NONE}, {pattern_ethertype_vlan, @@ -265,41 +229,7 @@ ice_pattern_match_item ice_switch_pattern_dist_comms[] = { }; static struct -ice_pattern_match_item ice_switch_pattern_perm_os[] = { - {pattern_ethertype, - ICE_SW_INSET_ETHER, ICE_INSET_NONE}, - {pattern_ethertype_vlan, - ICE_SW_INSET_MAC_VLAN, ICE_INSET_NONE}, - {pattern_eth_arp, - ICE_INSET_NONE, ICE_INSET_NONE}, - {pattern_eth_ipv4, - ICE_SW_INSET_MAC_IPV4, ICE_INSET_NONE}, - {pattern_eth_ipv4_udp, - ICE_SW_INSET_MAC_IPV4_UDP, ICE_INSET_NONE}, - {pattern_eth_ipv4_tcp, - ICE_SW_INSET_MAC_IPV4_TCP, ICE_INSET_NONE}, - {pattern_eth_ipv6, - ICE_SW_INSET_MAC_IPV6, ICE_INSET_NONE}, - {pattern_eth_ipv6_udp, - ICE_SW_INSET_MAC_IPV6_UDP, ICE_INSET_NONE}, - {pattern_eth_ipv6_tcp, - ICE_SW_INSET_MAC_IPV6_TCP, ICE_INSET_NONE}, - {pattern_eth_ipv4_udp_vxlan_eth_ipv4, - ICE_SW_INSET_PERM_TUNNEL_IPV4, ICE_INSET_NONE}, - {pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp, - ICE_SW_INSET_PERM_TUNNEL_IPV4_UDP, ICE_INSET_NONE}, - {pattern_eth_ipv4_udp_vxlan_eth_ipv4_tcp, - ICE_SW_INSET_PERM_TUNNEL_IPV4_TCP, ICE_INSET_NONE}, - {pattern_eth_ipv4_nvgre_eth_ipv4, - ICE_SW_INSET_PERM_TUNNEL_IPV4, ICE_INSET_NONE}, - {pattern_eth_ipv4_nvgre_eth_ipv4_udp, - ICE_SW_INSET_PERM_TUNNEL_IPV4_UDP, ICE_INSET_NONE}, - {pattern_eth_ipv4_nvgre_eth_ipv4_tcp, - ICE_SW_INSET_PERM_TUNNEL_IPV4_TCP, ICE_INSET_NONE}, -}; - -static struct -ice_pattern_match_item ice_switch_pattern_perm_comms[] = { +ice_pattern_match_item ice_switch_pattern_perm_list[] = { {pattern_ethertype, ICE_SW_INSET_ETHER, ICE_INSET_NONE}, {pattern_ethertype_vlan, @@ -1699,7 +1629,8 @@ ice_switch_parse_pattern_action(struct ice_adapter *ad, } pattern_match_item = - ice_search_pattern_match_item(pattern, array, array_len, error); + ice_search_pattern_match_item(ad, pattern, array, array_len, + error); if (!pattern_match_item) { rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_HANDLE, NULL, @@ -1859,21 +1790,11 @@ ice_switch_init(struct ice_adapter *ad) struct ice_flow_parser *dist_parser; struct ice_flow_parser *perm_parser; - if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS) - dist_parser = &ice_switch_dist_parser_comms; - else if (ad->active_pkg_type == ICE_PKG_TYPE_OS_DEFAULT) - dist_parser = &ice_switch_dist_parser_os; - else - return -EINVAL; - if (ad->devargs.pipe_mode_support) { - if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS) - perm_parser = &ice_switch_perm_parser_comms; - else - perm_parser = &ice_switch_perm_parser_os; - + perm_parser = &ice_switch_perm_parser; ret = ice_register_parser(perm_parser, ad); } else { + dist_parser = &ice_switch_dist_parser; ret = ice_register_parser(dist_parser, ad); } return ret; @@ -1885,21 +1806,11 @@ ice_switch_uninit(struct ice_adapter *ad) struct ice_flow_parser *dist_parser; struct ice_flow_parser *perm_parser; - if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS) - dist_parser = &ice_switch_dist_parser_comms; - else if (ad->active_pkg_type == ICE_PKG_TYPE_OS_DEFAULT) - dist_parser = &ice_switch_dist_parser_os; - else - return; - if (ad->devargs.pipe_mode_support) { - if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS) - perm_parser = &ice_switch_perm_parser_comms; - else - perm_parser = &ice_switch_perm_parser_os; - + perm_parser = &ice_switch_perm_parser; ice_unregister_parser(perm_parser, ad); } else { + dist_parser = &ice_switch_dist_parser; ice_unregister_parser(dist_parser, ad); } } @@ -1917,37 +1828,19 @@ ice_flow_engine ice_switch_engine = { }; static struct -ice_flow_parser ice_switch_dist_parser_os = { +ice_flow_parser ice_switch_dist_parser = { .engine = &ice_switch_engine, - .array = ice_switch_pattern_dist_os, - .array_len = RTE_DIM(ice_switch_pattern_dist_os), + .array = ice_switch_pattern_dist_list, + .array_len = RTE_DIM(ice_switch_pattern_dist_list), .parse_pattern_action = ice_switch_parse_pattern_action, .stage = ICE_FLOW_STAGE_DISTRIBUTOR, }; static struct -ice_flow_parser ice_switch_dist_parser_comms = { - .engine = &ice_switch_engine, - .array = ice_switch_pattern_dist_comms, - .array_len = RTE_DIM(ice_switch_pattern_dist_comms), - .parse_pattern_action = ice_switch_parse_pattern_action, - .stage = ICE_FLOW_STAGE_DISTRIBUTOR, -}; - -static struct -ice_flow_parser ice_switch_perm_parser_os = { - .engine = &ice_switch_engine, - .array = ice_switch_pattern_perm_os, - .array_len = RTE_DIM(ice_switch_pattern_perm_os), - .parse_pattern_action = ice_switch_parse_pattern_action, - .stage = ICE_FLOW_STAGE_PERMISSION, -}; - -static struct -ice_flow_parser ice_switch_perm_parser_comms = { +ice_flow_parser ice_switch_perm_parser = { .engine = &ice_switch_engine, - .array = ice_switch_pattern_perm_comms, - .array_len = RTE_DIM(ice_switch_pattern_perm_comms), + .array = ice_switch_pattern_perm_list, + .array_len = RTE_DIM(ice_switch_pattern_perm_list), .parse_pattern_action = ice_switch_parse_pattern_action, .stage = ICE_FLOW_STAGE_PERMISSION, };