From patchwork Mon Oct 19 08:53:40 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiawen Wu X-Patchwork-Id: 81307 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 B1ECDA04DC; Mon, 19 Oct 2020 11:02:14 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A8AD9CA00; Mon, 19 Oct 2020 10:53:30 +0200 (CEST) Received: from smtpbgeu2.qq.com (smtpbgeu2.qq.com [18.194.254.142]) by dpdk.org (Postfix) with ESMTP id 3890AC8C4 for ; Mon, 19 Oct 2020 10:53:02 +0200 (CEST) X-QQ-mid: bizesmtp6t1603097577tlylko3eu Received: from localhost.localdomain.com (unknown [183.129.236.74]) by esmtp6.qq.com (ESMTP) with id ; Mon, 19 Oct 2020 16:52:56 +0800 (CST) X-QQ-SSF: 01400000002000C0C000B00A0000000 X-QQ-FEAT: U0jJ0jgQbJHqt3/nYJDKSVNYHmu6JvnD4AqIWX2ANlfeE9zHEZg46Pf6NW4UY a3WNiDJ20+Yq9ciuoh9VHPvnUV+R9qruhOVSj2jlB+Pm17ISjHdchM3LzVkKIRRK/tuMiu9 asMcirYC8u0Epkmor2lobyVxBMRCHb35xjF4+VIgOryUg3pJcZgW9wg1NRV65lNDOT3mtOt 1eaUP3M8QbTOksxIEOvs7/lOygMs0jWReTSQ5c7An85GsFfeiiRLnVsEQA1eLiB8hdoO+hr rEU8IIwgXG88cCCYcuCwah1u3Yw1QLfvvg5wFlpKfT2qyMP5rz7gJEG0NtS6Ti2PM7UbEZZ BuOqQKIBTF0pgKiplFOjaa5W45M/Q== X-QQ-GoodBg: 2 From: Jiawen Wu To: dev@dpdk.org Cc: Jiawen Wu Date: Mon, 19 Oct 2020 16:53:40 +0800 Message-Id: <20201019085415.82207-24-jiawenwu@trustnetic.com> X-Mailer: git-send-email 2.18.4 In-Reply-To: <20201019085415.82207-1-jiawenwu@trustnetic.com> References: <20201019085415.82207-1-jiawenwu@trustnetic.com> X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:trustnetic.com:qybgforeign:qybgforeign5 X-QQ-Bgrelay: 1 Subject: [dpdk-dev] [PATCH v4 23/58] net/txgbe: add packet type 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" Add packet type marco definition and convert ptype to ptid. Signed-off-by: Jiawen Wu --- doc/guides/nics/features/txgbe.ini | 1 + doc/guides/nics/txgbe.rst | 1 + drivers/net/txgbe/meson.build | 1 + drivers/net/txgbe/txgbe_ethdev.h | 1 + drivers/net/txgbe/txgbe_ptypes.c | 673 +++++++++++++++++++++++++++++ drivers/net/txgbe/txgbe_ptypes.h | 351 +++++++++++++++ drivers/net/txgbe/txgbe_rxtx.h | 2 - 7 files changed, 1028 insertions(+), 2 deletions(-) create mode 100644 drivers/net/txgbe/txgbe_ptypes.c create mode 100644 drivers/net/txgbe/txgbe_ptypes.h diff --git a/doc/guides/nics/features/txgbe.ini b/doc/guides/nics/features/txgbe.ini index e76e9af46..247704572 100644 --- a/doc/guides/nics/features/txgbe.ini +++ b/doc/guides/nics/features/txgbe.ini @@ -14,6 +14,7 @@ Unicast MAC filter = Y Multicast MAC filter = Y CRC offload = P VLAN offload = P +Packet type parsing = Y Linux UIO = Y Linux VFIO = Y ARMv8 = Y diff --git a/doc/guides/nics/txgbe.rst b/doc/guides/nics/txgbe.rst index 9ae359c9b..3bee5d023 100644 --- a/doc/guides/nics/txgbe.rst +++ b/doc/guides/nics/txgbe.rst @@ -12,6 +12,7 @@ Features - Multiple queues for TX and RX - MAC filtering +- Packet type information - Jumbo frames - Link state information diff --git a/drivers/net/txgbe/meson.build b/drivers/net/txgbe/meson.build index 3c11d5e33..ea028d208 100644 --- a/drivers/net/txgbe/meson.build +++ b/drivers/net/txgbe/meson.build @@ -6,6 +6,7 @@ objs = [base_objs] sources = files( 'txgbe_ethdev.c', + 'txgbe_ptypes.c', 'txgbe_rxtx.c', ) diff --git a/drivers/net/txgbe/txgbe_ethdev.h b/drivers/net/txgbe/txgbe_ethdev.h index 1a29281a8..21b1699ea 100644 --- a/drivers/net/txgbe/txgbe_ethdev.h +++ b/drivers/net/txgbe/txgbe_ethdev.h @@ -6,6 +6,7 @@ #define _TXGBE_ETHDEV_H_ #include "base/txgbe.h" +#include "txgbe_ptypes.h" /* need update link, bit flag */ #define TXGBE_FLAG_NEED_LINK_UPDATE (uint32_t)(1 << 0) diff --git a/drivers/net/txgbe/txgbe_ptypes.c b/drivers/net/txgbe/txgbe_ptypes.c new file mode 100644 index 000000000..cd160ebba --- /dev/null +++ b/drivers/net/txgbe/txgbe_ptypes.c @@ -0,0 +1,673 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2015-2020 + */ + +#include +#include + +#include "base/txgbe_type.h" +#include "txgbe_ptypes.h" + +/* The txgbe_ptype_lookup is used to convert from the 8-bit ptid in the + * hardware to a bit-field that can be used by SW to more easily determine the + * packet type. + * + * Macros are used to shorten the table lines and make this table human + * readable. + * + * We store the PTYPE in the top byte of the bit field - this is just so that + * we can check that the table doesn't have a row missing, as the index into + * the table should be the PTYPE. + * + * Typical work flow: + * + * IF NOT txgbe_ptype_lookup[ptid].known + * THEN + * Packet is unknown + * ELSE IF txgbe_ptype_lookup[ptid].mac == TXGBE_DEC_PTYPE_MAC_IP + * Use the rest of the fields to look at the tunnels, inner protocols, etc + * ELSE + * Use the enum txgbe_l2_ptypes to decode the packet type + * ENDIF + */ +#define TPTE(ptid, l2, l3, l4, tun, el2, el3, el4) \ + [ptid] = (RTE_PTYPE_L2_##l2 | \ + RTE_PTYPE_L3_##l3 | \ + RTE_PTYPE_L4_##l4 | \ + RTE_PTYPE_TUNNEL_##tun | \ + RTE_PTYPE_INNER_L2_##el2 | \ + RTE_PTYPE_INNER_L3_##el3 | \ + RTE_PTYPE_INNER_L4_##el4) + +#define RTE_PTYPE_L2_NONE 0 +#define RTE_PTYPE_L3_NONE 0 +#define RTE_PTYPE_L4_NONE 0 +#define RTE_PTYPE_TUNNEL_NONE 0 +#define RTE_PTYPE_INNER_L2_NONE 0 +#define RTE_PTYPE_INNER_L3_NONE 0 +#define RTE_PTYPE_INNER_L4_NONE 0 + +static u32 txgbe_ptype_lookup[TXGBE_PTID_MAX] __rte_cache_aligned = { + /* L2:0-3 L3:4-7 L4:8-11 TUN:12-15 EL2:16-19 EL3:20-23 EL2:24-27 */ + /* L2: ETH */ + TPTE(0x11, ETHER, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x12, ETHER_TIMESYNC, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x13, ETHER_FIP, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x14, ETHER_LLDP, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x15, ETHER_CNM, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x16, ETHER_EAPOL, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x17, ETHER_ARP, NONE, NONE, NONE, NONE, NONE, NONE), + /* L2: Ethertype Filter */ + TPTE(0x18, ETHER_FILTER, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x19, ETHER_FILTER, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x1A, ETHER_FILTER, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x1B, ETHER_FILTER, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x1C, ETHER_FILTER, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x1D, ETHER_FILTER, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x1E, ETHER_FILTER, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x1F, ETHER_FILTER, NONE, NONE, NONE, NONE, NONE, NONE), + /* L3: IP */ + TPTE(0x21, ETHER, IPV4, FRAG, NONE, NONE, NONE, NONE), + TPTE(0x22, ETHER, IPV4, NONFRAG, NONE, NONE, NONE, NONE), + TPTE(0x23, ETHER, IPV4, UDP, NONE, NONE, NONE, NONE), + TPTE(0x24, ETHER, IPV4, TCP, NONE, NONE, NONE, NONE), + TPTE(0x25, ETHER, IPV4, SCTP, NONE, NONE, NONE, NONE), + TPTE(0x29, ETHER, IPV6, FRAG, NONE, NONE, NONE, NONE), + TPTE(0x2A, ETHER, IPV6, NONFRAG, NONE, NONE, NONE, NONE), + TPTE(0x2B, ETHER, IPV6, UDP, NONE, NONE, NONE, NONE), + TPTE(0x2C, ETHER, IPV6, TCP, NONE, NONE, NONE, NONE), + TPTE(0x2D, ETHER, IPV6, SCTP, NONE, NONE, NONE, NONE), + /* L2: FCoE */ + TPTE(0x30, ETHER_FCOE, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x31, ETHER_FCOE, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x32, ETHER_FCOE, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x33, ETHER_FCOE, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x34, ETHER_FCOE, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x35, ETHER_FCOE, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x36, ETHER_FCOE, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x37, ETHER_FCOE, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x38, ETHER_FCOE, NONE, NONE, NONE, NONE, NONE, NONE), + TPTE(0x39, ETHER_FCOE, NONE, NONE, NONE, NONE, NONE, NONE), + /* IPv4 -> IPv4/IPv6 */ + TPTE(0x81, ETHER, IPV4, NONE, IP, NONE, IPV4, FRAG), + TPTE(0x82, ETHER, IPV4, NONE, IP, NONE, IPV4, NONFRAG), + TPTE(0x83, ETHER, IPV4, NONE, IP, NONE, IPV4, UDP), + TPTE(0x84, ETHER, IPV4, NONE, IP, NONE, IPV4, TCP), + TPTE(0x85, ETHER, IPV4, NONE, IP, NONE, IPV4, SCTP), + TPTE(0x89, ETHER, IPV4, NONE, IP, NONE, IPV6, FRAG), + TPTE(0x8A, ETHER, IPV4, NONE, IP, NONE, IPV6, NONFRAG), + TPTE(0x8B, ETHER, IPV4, NONE, IP, NONE, IPV6, UDP), + TPTE(0x8C, ETHER, IPV4, NONE, IP, NONE, IPV6, TCP), + TPTE(0x8D, ETHER, IPV4, NONE, IP, NONE, IPV6, SCTP), + /* IPv4 -> GRE/Teredo/VXLAN -> NONE/IPv4/IPv6 */ + TPTE(0x90, ETHER, IPV4, NONE, GRENAT, NONE, NONE, NONE), + TPTE(0x91, ETHER, IPV4, NONE, GRENAT, NONE, IPV4, FRAG), + TPTE(0x92, ETHER, IPV4, NONE, GRENAT, NONE, IPV4, NONFRAG), + TPTE(0x93, ETHER, IPV4, NONE, GRENAT, NONE, IPV4, UDP), + TPTE(0x94, ETHER, IPV4, NONE, GRENAT, NONE, IPV4, TCP), + TPTE(0x95, ETHER, IPV4, NONE, GRENAT, NONE, IPV4, SCTP), + TPTE(0x99, ETHER, IPV4, NONE, GRENAT, NONE, IPV6, FRAG), + TPTE(0x9A, ETHER, IPV4, NONE, GRENAT, NONE, IPV6, NONFRAG), + TPTE(0x9B, ETHER, IPV4, NONE, GRENAT, NONE, IPV6, UDP), + TPTE(0x9C, ETHER, IPV4, NONE, GRENAT, NONE, IPV6, TCP), + TPTE(0x9D, ETHER, IPV4, NONE, GRENAT, NONE, IPV6, SCTP), + /* IPv4 -> GRE/Teredo/VXLAN -> MAC -> NONE/IPv4/IPv6 */ + TPTE(0xA0, ETHER, IPV4, NONE, GRENAT, ETHER, NONE, NONE), + TPTE(0xA1, ETHER, IPV4, NONE, GRENAT, ETHER, IPV4, FRAG), + TPTE(0xA2, ETHER, IPV4, NONE, GRENAT, ETHER, IPV4, NONFRAG), + TPTE(0xA3, ETHER, IPV4, NONE, GRENAT, ETHER, IPV4, UDP), + TPTE(0xA4, ETHER, IPV4, NONE, GRENAT, ETHER, IPV4, TCP), + TPTE(0xA5, ETHER, IPV4, NONE, GRENAT, ETHER, IPV4, SCTP), + TPTE(0xA9, ETHER, IPV4, NONE, GRENAT, ETHER, IPV6, FRAG), + TPTE(0xAA, ETHER, IPV4, NONE, GRENAT, ETHER, IPV6, NONFRAG), + TPTE(0xAB, ETHER, IPV4, NONE, GRENAT, ETHER, IPV6, UDP), + TPTE(0xAC, ETHER, IPV4, NONE, GRENAT, ETHER, IPV6, TCP), + TPTE(0xAD, ETHER, IPV4, NONE, GRENAT, ETHER, IPV6, SCTP), + /* IPv4 -> GRE/Teredo/VXLAN -> MAC+VLAN -> NONE/IPv4/IPv6 */ + TPTE(0xB0, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, NONE, NONE), + TPTE(0xB1, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, IPV4, FRAG), + TPTE(0xB2, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, IPV4, NONFRAG), + TPTE(0xB3, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, IPV4, UDP), + TPTE(0xB4, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, IPV4, TCP), + TPTE(0xB5, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, IPV4, SCTP), + TPTE(0xB9, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, IPV6, FRAG), + TPTE(0xBA, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, IPV6, NONFRAG), + TPTE(0xBB, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, IPV6, UDP), + TPTE(0xBC, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, IPV6, TCP), + TPTE(0xBD, ETHER, IPV4, NONE, GRENAT, ETHER_VLAN, IPV6, SCTP), + /* IPv6 -> IPv4/IPv6 */ + TPTE(0xC1, ETHER, IPV6, NONE, IP, NONE, IPV4, FRAG), + TPTE(0xC2, ETHER, IPV6, NONE, IP, NONE, IPV4, NONFRAG), + TPTE(0xC3, ETHER, IPV6, NONE, IP, NONE, IPV4, UDP), + TPTE(0xC4, ETHER, IPV6, NONE, IP, NONE, IPV4, TCP), + TPTE(0xC5, ETHER, IPV6, NONE, IP, NONE, IPV4, SCTP), + TPTE(0xC9, ETHER, IPV6, NONE, IP, NONE, IPV6, FRAG), + TPTE(0xCA, ETHER, IPV6, NONE, IP, NONE, IPV6, NONFRAG), + TPTE(0xCB, ETHER, IPV6, NONE, IP, NONE, IPV6, UDP), + TPTE(0xCC, ETHER, IPV6, NONE, IP, NONE, IPV6, TCP), + TPTE(0xCD, ETHER, IPV6, NONE, IP, NONE, IPV6, SCTP), + /* IPv6 -> GRE/Teredo/VXLAN -> NONE/IPv4/IPv6 */ + TPTE(0xD0, ETHER, IPV6, NONE, GRENAT, NONE, NONE, NONE), + TPTE(0xD1, ETHER, IPV6, NONE, GRENAT, NONE, IPV4, FRAG), + TPTE(0xD2, ETHER, IPV6, NONE, GRENAT, NONE, IPV4, NONFRAG), + TPTE(0xD3, ETHER, IPV6, NONE, GRENAT, NONE, IPV4, UDP), + TPTE(0xD4, ETHER, IPV6, NONE, GRENAT, NONE, IPV4, TCP), + TPTE(0xD5, ETHER, IPV6, NONE, GRENAT, NONE, IPV4, SCTP), + TPTE(0xD9, ETHER, IPV6, NONE, GRENAT, NONE, IPV6, FRAG), + TPTE(0xDA, ETHER, IPV6, NONE, GRENAT, NONE, IPV6, NONFRAG), + TPTE(0xDB, ETHER, IPV6, NONE, GRENAT, NONE, IPV6, UDP), + TPTE(0xDC, ETHER, IPV6, NONE, GRENAT, NONE, IPV6, TCP), + TPTE(0xDD, ETHER, IPV6, NONE, GRENAT, NONE, IPV6, SCTP), + /* IPv6 -> GRE/Teredo/VXLAN -> MAC -> NONE/IPv4/IPv6 */ + TPTE(0xE0, ETHER, IPV6, NONE, GRENAT, ETHER, NONE, NONE), + TPTE(0xE1, ETHER, IPV6, NONE, GRENAT, ETHER, IPV4, FRAG), + TPTE(0xE2, ETHER, IPV6, NONE, GRENAT, ETHER, IPV4, NONFRAG), + TPTE(0xE3, ETHER, IPV6, NONE, GRENAT, ETHER, IPV4, UDP), + TPTE(0xE4, ETHER, IPV6, NONE, GRENAT, ETHER, IPV4, TCP), + TPTE(0xE5, ETHER, IPV6, NONE, GRENAT, ETHER, IPV4, SCTP), + TPTE(0xE9, ETHER, IPV6, NONE, GRENAT, ETHER, IPV6, FRAG), + TPTE(0xEA, ETHER, IPV6, NONE, GRENAT, ETHER, IPV6, NONFRAG), + TPTE(0xEB, ETHER, IPV6, NONE, GRENAT, ETHER, IPV6, UDP), + TPTE(0xEC, ETHER, IPV6, NONE, GRENAT, ETHER, IPV6, TCP), + TPTE(0xED, ETHER, IPV6, NONE, GRENAT, ETHER, IPV6, SCTP), + /* IPv6 -> GRE/Teredo/VXLAN -> MAC+VLAN -> NONE/IPv4/IPv6 */ + TPTE(0xF0, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, NONE, NONE), + TPTE(0xF1, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, IPV4, FRAG), + TPTE(0xF2, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, IPV4, NONFRAG), + TPTE(0xF3, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, IPV4, UDP), + TPTE(0xF4, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, IPV4, TCP), + TPTE(0xF5, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, IPV4, SCTP), + TPTE(0xF9, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, IPV6, FRAG), + TPTE(0xFA, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, IPV6, NONFRAG), + TPTE(0xFB, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, IPV6, UDP), + TPTE(0xFC, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, IPV6, TCP), + TPTE(0xFD, ETHER, IPV6, NONE, GRENAT, ETHER_VLAN, IPV6, SCTP), +}; + +u32 *txgbe_get_supported_ptypes(void) +{ + static u32 ptypes[] = { + /* For non-vec functions, + * refers to txgbe_rxd_pkt_info_to_pkt_type(); + */ + RTE_PTYPE_L2_ETHER, + RTE_PTYPE_L3_IPV4, + RTE_PTYPE_L3_IPV4_EXT, + RTE_PTYPE_L3_IPV6, + RTE_PTYPE_L3_IPV6_EXT, + RTE_PTYPE_L4_SCTP, + RTE_PTYPE_L4_TCP, + RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_IP, + RTE_PTYPE_INNER_L3_IPV6, + RTE_PTYPE_INNER_L3_IPV6_EXT, + RTE_PTYPE_INNER_L4_TCP, + RTE_PTYPE_INNER_L4_UDP, + RTE_PTYPE_UNKNOWN + }; + + return ptypes; +} + +static inline u8 +txgbe_encode_ptype_fcoe(u32 ptype) +{ + u8 ptid; + + UNREFERENCED_PARAMETER(ptype); + ptid = TXGBE_PTID_PKT_FCOE; + + return ptid; +} + +static inline u8 +txgbe_encode_ptype_mac(u32 ptype) +{ + u8 ptid; + + ptid = TXGBE_PTID_PKT_MAC; + + switch (ptype & RTE_PTYPE_L2_MASK) { + case RTE_PTYPE_L2_ETHER_FCOE: + ptid = txgbe_encode_ptype_fcoe(ptype); + break; + case RTE_PTYPE_UNKNOWN: + break; + case RTE_PTYPE_L2_ETHER_TIMESYNC: + ptid |= TXGBE_PTID_TYP_TS; + break; + case RTE_PTYPE_L2_ETHER_ARP: + ptid |= TXGBE_PTID_TYP_ARP; + break; + case RTE_PTYPE_L2_ETHER_LLDP: + ptid |= TXGBE_PTID_TYP_LLDP; + break; + default: + ptid |= TXGBE_PTID_TYP_MAC; + break; + } + + return ptid; +} + +static inline u8 +txgbe_encode_ptype_ip(u32 ptype) +{ + u8 ptid; + + ptid = TXGBE_PTID_PKT_IP; + + switch (ptype & RTE_PTYPE_L3_MASK) { + case RTE_PTYPE_L3_IPV4: + case RTE_PTYPE_L3_IPV4_EXT: + case RTE_PTYPE_L3_IPV4_EXT_UNKNOWN: + break; + case RTE_PTYPE_L3_IPV6: + case RTE_PTYPE_L3_IPV6_EXT: + case RTE_PTYPE_L3_IPV6_EXT_UNKNOWN: + ptid |= TXGBE_PTID_PKT_IPV6; + break; + default: + return txgbe_encode_ptype_mac(ptype); + } + + switch (ptype & RTE_PTYPE_L4_MASK) { + case RTE_PTYPE_L4_TCP: + ptid |= TXGBE_PTID_TYP_TCP; + break; + case RTE_PTYPE_L4_UDP: + ptid |= TXGBE_PTID_TYP_UDP; + break; + case RTE_PTYPE_L4_SCTP: + ptid |= TXGBE_PTID_TYP_SCTP; + break; + case RTE_PTYPE_L4_FRAG: + ptid |= TXGBE_PTID_TYP_IPFRAG; + break; + default: + ptid |= TXGBE_PTID_TYP_IPDATA; + break; + } + + return ptid; +} + +static inline u8 +txgbe_encode_ptype_tunnel(u32 ptype) +{ + u8 ptid; + + ptid = TXGBE_PTID_PKT_TUN; + + switch (ptype & RTE_PTYPE_L3_MASK) { + case RTE_PTYPE_L3_IPV4: + case RTE_PTYPE_L3_IPV4_EXT: + case RTE_PTYPE_L3_IPV4_EXT_UNKNOWN: + break; + case RTE_PTYPE_L3_IPV6: + case RTE_PTYPE_L3_IPV6_EXT: + case RTE_PTYPE_L3_IPV6_EXT_UNKNOWN: + ptid |= TXGBE_PTID_TUN_IPV6; + break; + default: + return txgbe_encode_ptype_ip(ptype); + } + + switch (ptype & RTE_PTYPE_TUNNEL_MASK) { + case RTE_PTYPE_TUNNEL_IP: + ptid |= TXGBE_PTID_TUN_EI; + break; + case RTE_PTYPE_TUNNEL_GRE: + ptid |= TXGBE_PTID_TUN_EIG; + break; + case RTE_PTYPE_TUNNEL_VXLAN: + case RTE_PTYPE_TUNNEL_VXLAN_GPE: + case RTE_PTYPE_TUNNEL_NVGRE: + case RTE_PTYPE_TUNNEL_GENEVE: + case RTE_PTYPE_TUNNEL_GRENAT: + break; + default: + return ptid; + } + + switch (ptype & RTE_PTYPE_INNER_L2_MASK) { + case RTE_PTYPE_INNER_L2_ETHER: + ptid |= TXGBE_PTID_TUN_EIGM; + break; + case RTE_PTYPE_INNER_L2_ETHER_VLAN: + ptid |= TXGBE_PTID_TUN_EIGMV; + break; + case RTE_PTYPE_INNER_L2_ETHER_QINQ: + ptid |= TXGBE_PTID_TUN_EIGMV; + return ptid; + default: + break; + } + + switch (ptype & RTE_PTYPE_INNER_L3_MASK) { + case RTE_PTYPE_INNER_L3_IPV4: + case RTE_PTYPE_INNER_L3_IPV4_EXT: + case RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN: + break; + case RTE_PTYPE_INNER_L3_IPV6: + case RTE_PTYPE_INNER_L3_IPV6_EXT: + case RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN: + ptid |= TXGBE_PTID_PKT_IPV6; + break; + default: + return ptid; + } + + switch (ptype & RTE_PTYPE_INNER_L4_MASK) { + case RTE_PTYPE_INNER_L4_TCP: + ptid |= TXGBE_PTID_TYP_TCP; + break; + case RTE_PTYPE_INNER_L4_UDP: + ptid |= TXGBE_PTID_TYP_UDP; + break; + case RTE_PTYPE_INNER_L4_SCTP: + ptid |= TXGBE_PTID_TYP_SCTP; + break; + case RTE_PTYPE_INNER_L4_FRAG: + ptid |= TXGBE_PTID_TYP_IPFRAG; + break; + default: + ptid |= TXGBE_PTID_TYP_IPDATA; + break; + } + + return ptid; +} + +u32 txgbe_decode_ptype(u8 ptid) +{ + if (-1 != txgbe_etflt_id(ptid)) + return RTE_PTYPE_UNKNOWN; + + return txgbe_ptype_lookup[ptid]; +} + +u8 txgbe_encode_ptype(u32 ptype) +{ + u8 ptid = 0; + + if (ptype & RTE_PTYPE_TUNNEL_MASK) + ptid = txgbe_encode_ptype_tunnel(ptype); + else if (ptype & RTE_PTYPE_L3_MASK) + ptid = txgbe_encode_ptype_ip(ptype); + else if (ptype & RTE_PTYPE_L2_MASK) + ptid = txgbe_encode_ptype_mac(ptype); + else + ptid = TXGBE_PTID_NULL; + + return ptid; +} + +/** + * Use 2 different table for normal packet and tunnel packet + * to save the space. + */ +const u32 +txgbe_ptype_table[TXGBE_PTID_MAX] __rte_cache_aligned = { + [TXGBE_PT_ETHER] = RTE_PTYPE_L2_ETHER, + [TXGBE_PT_IPV4] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4, + [TXGBE_PT_IPV4_TCP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_TCP, + [TXGBE_PT_IPV4_UDP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_UDP, + [TXGBE_PT_IPV4_SCTP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_SCTP, + [TXGBE_PT_IPV4_EXT] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT, + [TXGBE_PT_IPV4_EXT_TCP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_TCP, + [TXGBE_PT_IPV4_EXT_UDP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_UDP, + [TXGBE_PT_IPV4_EXT_SCTP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_SCTP, + [TXGBE_PT_IPV6] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV6, + [TXGBE_PT_IPV6_TCP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_TCP, + [TXGBE_PT_IPV6_UDP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_UDP, + [TXGBE_PT_IPV6_SCTP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_SCTP, + [TXGBE_PT_IPV6_EXT] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV6_EXT, + [TXGBE_PT_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_TCP, + [TXGBE_PT_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_UDP, + [TXGBE_PT_IPV6_EXT_SCTP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_SCTP, + [TXGBE_PT_IPV4_IPV6] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP | + RTE_PTYPE_INNER_L3_IPV6, + [TXGBE_PT_IPV4_IPV6_TCP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP | + RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_TCP, + [TXGBE_PT_IPV4_IPV6_UDP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP | + RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_UDP, + [TXGBE_PT_IPV4_IPV6_SCTP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP | + RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_SCTP, + [TXGBE_PT_IPV4_EXT_IPV6] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP | + RTE_PTYPE_INNER_L3_IPV6, + [TXGBE_PT_IPV4_EXT_IPV6_TCP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP | + RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_TCP, + [TXGBE_PT_IPV4_EXT_IPV6_UDP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP | + RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_UDP, + [TXGBE_PT_IPV4_EXT_IPV6_SCTP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP | + RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_SCTP, + [TXGBE_PT_IPV4_IPV6_EXT] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP | + RTE_PTYPE_INNER_L3_IPV6_EXT, + [TXGBE_PT_IPV4_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP | + RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_TCP, + [TXGBE_PT_IPV4_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP | + RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_UDP, + [TXGBE_PT_IPV4_IPV6_EXT_SCTP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_IP | + RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_SCTP, + [TXGBE_PT_IPV4_EXT_IPV6_EXT] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP | + RTE_PTYPE_INNER_L3_IPV6_EXT, + [TXGBE_PT_IPV4_EXT_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP | + RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_TCP, + [TXGBE_PT_IPV4_EXT_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP | + RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_UDP, + [TXGBE_PT_IPV4_EXT_IPV6_EXT_SCTP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_IP | + RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_SCTP, +}; + +const u32 +txgbe_ptype_table_tn[TXGBE_PTID_MAX] __rte_cache_aligned = { + [TXGBE_PT_NVGRE] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER, + [TXGBE_PT_NVGRE_IPV4] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4, + [TXGBE_PT_NVGRE_IPV4_EXT] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4_EXT, + [TXGBE_PT_NVGRE_IPV6] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6, + [TXGBE_PT_NVGRE_IPV4_IPV6] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4, + [TXGBE_PT_NVGRE_IPV6_EXT] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6_EXT, + [TXGBE_PT_NVGRE_IPV4_IPV6_EXT] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4, + [TXGBE_PT_NVGRE_IPV4_TCP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4 | + RTE_PTYPE_INNER_L4_TCP, + [TXGBE_PT_NVGRE_IPV6_TCP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6 | + RTE_PTYPE_INNER_L4_TCP, + [TXGBE_PT_NVGRE_IPV4_IPV6_TCP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4, + [TXGBE_PT_NVGRE_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6_EXT | + RTE_PTYPE_INNER_L4_TCP, + [TXGBE_PT_NVGRE_IPV4_IPV6_EXT_TCP] = + RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_TUNNEL_GRE | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV4, + [TXGBE_PT_NVGRE_IPV4_UDP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4 | + RTE_PTYPE_INNER_L4_UDP, + [TXGBE_PT_NVGRE_IPV6_UDP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6 | + RTE_PTYPE_INNER_L4_UDP, + [TXGBE_PT_NVGRE_IPV6_SCTP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6 | + RTE_PTYPE_INNER_L4_SCTP, + [TXGBE_PT_NVGRE_IPV4_IPV6_UDP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4, + [TXGBE_PT_NVGRE_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6_EXT | + RTE_PTYPE_INNER_L4_UDP, + [TXGBE_PT_NVGRE_IPV6_EXT_SCTP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV6_EXT | + RTE_PTYPE_INNER_L4_SCTP, + [TXGBE_PT_NVGRE_IPV4_IPV6_EXT_UDP] = + RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_TUNNEL_GRE | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV4, + [TXGBE_PT_NVGRE_IPV4_SCTP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4 | + RTE_PTYPE_INNER_L4_SCTP, + [TXGBE_PT_NVGRE_IPV4_EXT_SCTP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4_EXT | + RTE_PTYPE_INNER_L4_SCTP, + [TXGBE_PT_NVGRE_IPV4_EXT_TCP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4_EXT | + RTE_PTYPE_INNER_L4_TCP, + [TXGBE_PT_NVGRE_IPV4_EXT_UDP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_TUNNEL_GRE | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4_EXT | + RTE_PTYPE_INNER_L4_UDP, + + [TXGBE_PT_VXLAN] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER, + [TXGBE_PT_VXLAN_IPV4] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV4, + [TXGBE_PT_VXLAN_IPV4_EXT] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV4_EXT, + [TXGBE_PT_VXLAN_IPV6] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV6, + [TXGBE_PT_VXLAN_IPV4_IPV6] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV4, + [TXGBE_PT_VXLAN_IPV6_EXT] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV6_EXT, + [TXGBE_PT_VXLAN_IPV4_IPV6_EXT] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV4, + [TXGBE_PT_VXLAN_IPV4_TCP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV4 | RTE_PTYPE_INNER_L4_TCP, + [TXGBE_PT_VXLAN_IPV6_TCP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_TCP, + [TXGBE_PT_VXLAN_IPV4_IPV6_TCP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV4, + [TXGBE_PT_VXLAN_IPV6_EXT_TCP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_TCP, + [TXGBE_PT_VXLAN_IPV4_IPV6_EXT_TCP] = + RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_UDP | RTE_PTYPE_TUNNEL_VXLAN | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4, + [TXGBE_PT_VXLAN_IPV4_UDP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV4 | RTE_PTYPE_INNER_L4_UDP, + [TXGBE_PT_VXLAN_IPV6_UDP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_UDP, + [TXGBE_PT_VXLAN_IPV6_SCTP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV6 | RTE_PTYPE_INNER_L4_SCTP, + [TXGBE_PT_VXLAN_IPV4_IPV6_UDP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV4, + [TXGBE_PT_VXLAN_IPV6_EXT_UDP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_UDP, + [TXGBE_PT_VXLAN_IPV6_EXT_SCTP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV6_EXT | RTE_PTYPE_INNER_L4_SCTP, + [TXGBE_PT_VXLAN_IPV4_IPV6_EXT_UDP] = + RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_UDP | RTE_PTYPE_TUNNEL_VXLAN | + RTE_PTYPE_INNER_L2_ETHER | RTE_PTYPE_INNER_L3_IPV4, + [TXGBE_PT_VXLAN_IPV4_SCTP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV4 | RTE_PTYPE_INNER_L4_SCTP, + [TXGBE_PT_VXLAN_IPV4_EXT_SCTP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV4_EXT | RTE_PTYPE_INNER_L4_SCTP, + [TXGBE_PT_VXLAN_IPV4_EXT_TCP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV4_EXT | RTE_PTYPE_INNER_L4_TCP, + [TXGBE_PT_VXLAN_IPV4_EXT_UDP] = RTE_PTYPE_L2_ETHER | + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_UDP | + RTE_PTYPE_TUNNEL_VXLAN | RTE_PTYPE_INNER_L2_ETHER | + RTE_PTYPE_INNER_L3_IPV4_EXT | RTE_PTYPE_INNER_L4_UDP, +}; + diff --git a/drivers/net/txgbe/txgbe_ptypes.h b/drivers/net/txgbe/txgbe_ptypes.h new file mode 100644 index 000000000..6af4b0ded --- /dev/null +++ b/drivers/net/txgbe/txgbe_ptypes.h @@ -0,0 +1,351 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2015-2020 + */ + +#ifndef _TXGBE_PTYPE_H_ +#define _TXGBE_PTYPE_H_ + +/** + * PTID(Packet Type Identifier, 8bits) + * - Bit 3:0 detailed types. + * - Bit 5:4 basic types. + * - Bit 7:6 tunnel types. + **/ +#define TXGBE_PTID_NULL 0 +#define TXGBE_PTID_MAX 256 +#define TXGBE_PTID_MASK 0xFF +#define TXGBE_PTID_MASK_TUNNEL 0x7F + +/* TUN */ +#define TXGBE_PTID_TUN_IPV6 0x40 +#define TXGBE_PTID_TUN_EI 0x00 /* IP */ +#define TXGBE_PTID_TUN_EIG 0x10 /* IP+GRE */ +#define TXGBE_PTID_TUN_EIGM 0x20 /* IP+GRE+MAC */ +#define TXGBE_PTID_TUN_EIGMV 0x30 /* IP+GRE+MAC+VLAN */ + +/* PKT for !TUN */ +#define TXGBE_PTID_PKT_TUN (0x80) +#define TXGBE_PTID_PKT_MAC (0x10) +#define TXGBE_PTID_PKT_IP (0x20) +#define TXGBE_PTID_PKT_FCOE (0x30) + +/* TYP for PKT=mac */ +#define TXGBE_PTID_TYP_MAC (0x01) +#define TXGBE_PTID_TYP_TS (0x02) /* time sync */ +#define TXGBE_PTID_TYP_FIP (0x03) +#define TXGBE_PTID_TYP_LLDP (0x04) +#define TXGBE_PTID_TYP_CNM (0x05) +#define TXGBE_PTID_TYP_EAPOL (0x06) +#define TXGBE_PTID_TYP_ARP (0x07) +#define TXGBE_PTID_TYP_ETF (0x08) + +/* TYP for PKT=ip */ +#define TXGBE_PTID_PKT_IPV6 (0x08) +#define TXGBE_PTID_TYP_IPFRAG (0x01) +#define TXGBE_PTID_TYP_IPDATA (0x02) +#define TXGBE_PTID_TYP_UDP (0x03) +#define TXGBE_PTID_TYP_TCP (0x04) +#define TXGBE_PTID_TYP_SCTP (0x05) + +/* TYP for PKT=fcoe */ +#define TXGBE_PTID_PKT_VFT (0x08) +#define TXGBE_PTID_TYP_FCOE (0x00) +#define TXGBE_PTID_TYP_FCDATA (0x01) +#define TXGBE_PTID_TYP_FCRDY (0x02) +#define TXGBE_PTID_TYP_FCRSP (0x03) +#define TXGBE_PTID_TYP_FCOTHER (0x04) + +/* packet type non-ip values */ +enum txgbe_l2_ptids { + TXGBE_PTID_L2_ABORTED = (TXGBE_PTID_PKT_MAC), + TXGBE_PTID_L2_MAC = (TXGBE_PTID_PKT_MAC | TXGBE_PTID_TYP_MAC), + TXGBE_PTID_L2_TMST = (TXGBE_PTID_PKT_MAC | TXGBE_PTID_TYP_TS), + TXGBE_PTID_L2_FIP = (TXGBE_PTID_PKT_MAC | TXGBE_PTID_TYP_FIP), + TXGBE_PTID_L2_LLDP = (TXGBE_PTID_PKT_MAC | TXGBE_PTID_TYP_LLDP), + TXGBE_PTID_L2_CNM = (TXGBE_PTID_PKT_MAC | TXGBE_PTID_TYP_CNM), + TXGBE_PTID_L2_EAPOL = (TXGBE_PTID_PKT_MAC | TXGBE_PTID_TYP_EAPOL), + TXGBE_PTID_L2_ARP = (TXGBE_PTID_PKT_MAC | TXGBE_PTID_TYP_ARP), + + TXGBE_PTID_L2_IPV4_FRAG = (TXGBE_PTID_PKT_IP | TXGBE_PTID_TYP_IPFRAG), + TXGBE_PTID_L2_IPV4 = (TXGBE_PTID_PKT_IP | TXGBE_PTID_TYP_IPDATA), + TXGBE_PTID_L2_IPV4_UDP = (TXGBE_PTID_PKT_IP | TXGBE_PTID_TYP_UDP), + TXGBE_PTID_L2_IPV4_TCP = (TXGBE_PTID_PKT_IP | TXGBE_PTID_TYP_TCP), + TXGBE_PTID_L2_IPV4_SCTP = (TXGBE_PTID_PKT_IP | TXGBE_PTID_TYP_SCTP), + TXGBE_PTID_L2_IPV6_FRAG = (TXGBE_PTID_PKT_IP | TXGBE_PTID_PKT_IPV6 | + TXGBE_PTID_TYP_IPFRAG), + TXGBE_PTID_L2_IPV6 = (TXGBE_PTID_PKT_IP | TXGBE_PTID_PKT_IPV6 | + TXGBE_PTID_TYP_IPDATA), + TXGBE_PTID_L2_IPV6_UDP = (TXGBE_PTID_PKT_IP | TXGBE_PTID_PKT_IPV6 | + TXGBE_PTID_TYP_UDP), + TXGBE_PTID_L2_IPV6_TCP = (TXGBE_PTID_PKT_IP | TXGBE_PTID_PKT_IPV6 | + TXGBE_PTID_TYP_TCP), + TXGBE_PTID_L2_IPV6_SCTP = (TXGBE_PTID_PKT_IP | TXGBE_PTID_PKT_IPV6 | + TXGBE_PTID_TYP_SCTP), + + TXGBE_PTID_L2_FCOE = (TXGBE_PTID_PKT_FCOE | + TXGBE_PTID_TYP_FCOE), + TXGBE_PTID_L2_FCOE_FCDATA = (TXGBE_PTID_PKT_FCOE | + TXGBE_PTID_TYP_FCDATA), + TXGBE_PTID_L2_FCOE_FCRDY = (TXGBE_PTID_PKT_FCOE | + TXGBE_PTID_TYP_FCRDY), + TXGBE_PTID_L2_FCOE_FCRSP = (TXGBE_PTID_PKT_FCOE | + TXGBE_PTID_TYP_FCRSP), + TXGBE_PTID_L2_FCOE_FCOTHER = (TXGBE_PTID_PKT_FCOE | + TXGBE_PTID_TYP_FCOTHER), + TXGBE_PTID_L2_FCOE_VFT = (TXGBE_PTID_PKT_FCOE | + TXGBE_PTID_PKT_VFT), + TXGBE_PTID_L2_FCOE_VFT_FCDATA = (TXGBE_PTID_PKT_FCOE | + TXGBE_PTID_PKT_VFT | TXGBE_PTID_TYP_FCDATA), + TXGBE_PTID_L2_FCOE_VFT_FCRDY = (TXGBE_PTID_PKT_FCOE | + TXGBE_PTID_PKT_VFT | TXGBE_PTID_TYP_FCRDY), + TXGBE_PTID_L2_FCOE_VFT_FCRSP = (TXGBE_PTID_PKT_FCOE | + TXGBE_PTID_PKT_VFT | TXGBE_PTID_TYP_FCRSP), + TXGBE_PTID_L2_FCOE_VFT_FCOTHER = (TXGBE_PTID_PKT_FCOE | + TXGBE_PTID_PKT_VFT | TXGBE_PTID_TYP_FCOTHER), + + TXGBE_PTID_L2_TUN4_MAC = (TXGBE_PTID_PKT_TUN | + TXGBE_PTID_TUN_EIGM), + TXGBE_PTID_L2_TUN6_MAC = (TXGBE_PTID_PKT_TUN | + TXGBE_PTID_TUN_IPV6 | TXGBE_PTID_TUN_EIGM), +}; + + +/* + * PTYPE(Packet Type, 32bits) + * - Bit 3:0 is for L2 types. + * - Bit 7:4 is for L3 or outer L3 (for tunneling case) types. + * - Bit 11:8 is for L4 or outer L4 (for tunneling case) types. + * - Bit 15:12 is for tunnel types. + * - Bit 19:16 is for inner L2 types. + * - Bit 23:20 is for inner L3 types. + * - Bit 27:24 is for inner L4 types. + * - Bit 31:28 is reserved. + * please ref to rte_mbuf.h: rte_mbuf.packet_type + */ +struct rte_txgbe_ptype { + u32 l2:4; /* outer mac */ + u32 l3:4; /* outer internet protocol */ + u32 l4:4; /* outer transport protocol */ + u32 tun:4; /* tunnel protocol */ + + u32 el2:4; /* inner mac */ + u32 el3:4; /* inner internet protocol */ + u32 el4:4; /* inner transport protocol */ + u32 rsv:3; + u32 known:1; +}; + +#ifndef RTE_PTYPE_UNKNOWN +#define RTE_PTYPE_UNKNOWN 0x00000000 +#define RTE_PTYPE_L2_ETHER 0x00000001 +#define RTE_PTYPE_L2_ETHER_TIMESYNC 0x00000002 +#define RTE_PTYPE_L2_ETHER_ARP 0x00000003 +#define RTE_PTYPE_L2_ETHER_LLDP 0x00000004 +#define RTE_PTYPE_L2_ETHER_NSH 0x00000005 +#define RTE_PTYPE_L2_ETHER_FCOE 0x00000009 +#define RTE_PTYPE_L3_IPV4 0x00000010 +#define RTE_PTYPE_L3_IPV4_EXT 0x00000030 +#define RTE_PTYPE_L3_IPV6 0x00000040 +#define RTE_PTYPE_L3_IPV4_EXT_UNKNOWN 0x00000090 +#define RTE_PTYPE_L3_IPV6_EXT 0x000000c0 +#define RTE_PTYPE_L3_IPV6_EXT_UNKNOWN 0x000000e0 +#define RTE_PTYPE_L4_TCP 0x00000100 +#define RTE_PTYPE_L4_UDP 0x00000200 +#define RTE_PTYPE_L4_FRAG 0x00000300 +#define RTE_PTYPE_L4_SCTP 0x00000400 +#define RTE_PTYPE_L4_ICMP 0x00000500 +#define RTE_PTYPE_L4_NONFRAG 0x00000600 +#define RTE_PTYPE_TUNNEL_IP 0x00001000 +#define RTE_PTYPE_TUNNEL_GRE 0x00002000 +#define RTE_PTYPE_TUNNEL_VXLAN 0x00003000 +#define RTE_PTYPE_TUNNEL_NVGRE 0x00004000 +#define RTE_PTYPE_TUNNEL_GENEVE 0x00005000 +#define RTE_PTYPE_TUNNEL_GRENAT 0x00006000 +#define RTE_PTYPE_INNER_L2_ETHER 0x00010000 +#define RTE_PTYPE_INNER_L2_ETHER_VLAN 0x00020000 +#define RTE_PTYPE_INNER_L3_IPV4 0x00100000 +#define RTE_PTYPE_INNER_L3_IPV4_EXT 0x00200000 +#define RTE_PTYPE_INNER_L3_IPV6 0x00300000 +#define RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN 0x00400000 +#define RTE_PTYPE_INNER_L3_IPV6_EXT 0x00500000 +#define RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN 0x00600000 +#define RTE_PTYPE_INNER_L4_TCP 0x01000000 +#define RTE_PTYPE_INNER_L4_UDP 0x02000000 +#define RTE_PTYPE_INNER_L4_FRAG 0x03000000 +#define RTE_PTYPE_INNER_L4_SCTP 0x04000000 +#define RTE_PTYPE_INNER_L4_ICMP 0x05000000 +#define RTE_PTYPE_INNER_L4_NONFRAG 0x06000000 +#endif /* !RTE_PTYPE_UNKNOWN */ +#define RTE_PTYPE_L3_IPV4u RTE_PTYPE_L3_IPV4_EXT_UNKNOWN +#define RTE_PTYPE_L3_IPV6u RTE_PTYPE_L3_IPV6_EXT_UNKNOWN +#define RTE_PTYPE_INNER_L3_IPV4u RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN +#define RTE_PTYPE_INNER_L3_IPV6u RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN +#define RTE_PTYPE_L2_ETHER_FIP RTE_PTYPE_L2_ETHER +#define RTE_PTYPE_L2_ETHER_CNM RTE_PTYPE_L2_ETHER +#define RTE_PTYPE_L2_ETHER_EAPOL RTE_PTYPE_L2_ETHER +#define RTE_PTYPE_L2_ETHER_FILTER RTE_PTYPE_L2_ETHER + +u32 *txgbe_get_supported_ptypes(void); +u32 txgbe_decode_ptype(u8 ptid); +u8 txgbe_encode_ptype(u32 ptype); + +/** + * PT(Packet Type, 32bits) + * - Bit 3:0 is for L2 types. + * - Bit 7:4 is for L3 or outer L3 (for tunneling case) types. + * - Bit 11:8 is for L4 or outer L4 (for tunneling case) types. + * - Bit 15:12 is for tunnel types. + * - Bit 19:16 is for inner L2 types. + * - Bit 23:20 is for inner L3 types. + * - Bit 27:24 is for inner L4 types. + * - Bit 31:28 is reserved. + * PT is a more accurate version of PTYPE + **/ +#define TXGBE_PT_ETHER 0x00 +#define TXGBE_PT_IPV4 0x01 +#define TXGBE_PT_IPV4_TCP 0x11 +#define TXGBE_PT_IPV4_UDP 0x21 +#define TXGBE_PT_IPV4_SCTP 0x41 +#define TXGBE_PT_IPV4_EXT 0x03 +#define TXGBE_PT_IPV4_EXT_TCP 0x13 +#define TXGBE_PT_IPV4_EXT_UDP 0x23 +#define TXGBE_PT_IPV4_EXT_SCTP 0x43 +#define TXGBE_PT_IPV6 0x04 +#define TXGBE_PT_IPV6_TCP 0x14 +#define TXGBE_PT_IPV6_UDP 0x24 +#define TXGBE_PT_IPV6_SCTP 0x44 +#define TXGBE_PT_IPV6_EXT 0x0C +#define TXGBE_PT_IPV6_EXT_TCP 0x1C +#define TXGBE_PT_IPV6_EXT_UDP 0x2C +#define TXGBE_PT_IPV6_EXT_SCTP 0x4C +#define TXGBE_PT_IPV4_IPV6 0x05 +#define TXGBE_PT_IPV4_IPV6_TCP 0x15 +#define TXGBE_PT_IPV4_IPV6_UDP 0x25 +#define TXGBE_PT_IPV4_IPV6_SCTP 0x45 +#define TXGBE_PT_IPV4_EXT_IPV6 0x07 +#define TXGBE_PT_IPV4_EXT_IPV6_TCP 0x17 +#define TXGBE_PT_IPV4_EXT_IPV6_UDP 0x27 +#define TXGBE_PT_IPV4_EXT_IPV6_SCTP 0x47 +#define TXGBE_PT_IPV4_IPV6_EXT 0x0D +#define TXGBE_PT_IPV4_IPV6_EXT_TCP 0x1D +#define TXGBE_PT_IPV4_IPV6_EXT_UDP 0x2D +#define TXGBE_PT_IPV4_IPV6_EXT_SCTP 0x4D +#define TXGBE_PT_IPV4_EXT_IPV6_EXT 0x0F +#define TXGBE_PT_IPV4_EXT_IPV6_EXT_TCP 0x1F +#define TXGBE_PT_IPV4_EXT_IPV6_EXT_UDP 0x2F +#define TXGBE_PT_IPV4_EXT_IPV6_EXT_SCTP 0x4F + +#define TXGBE_PT_NVGRE 0x00 +#define TXGBE_PT_NVGRE_IPV4 0x01 +#define TXGBE_PT_NVGRE_IPV4_TCP 0x11 +#define TXGBE_PT_NVGRE_IPV4_UDP 0x21 +#define TXGBE_PT_NVGRE_IPV4_SCTP 0x41 +#define TXGBE_PT_NVGRE_IPV4_EXT 0x03 +#define TXGBE_PT_NVGRE_IPV4_EXT_TCP 0x13 +#define TXGBE_PT_NVGRE_IPV4_EXT_UDP 0x23 +#define TXGBE_PT_NVGRE_IPV4_EXT_SCTP 0x43 +#define TXGBE_PT_NVGRE_IPV6 0x04 +#define TXGBE_PT_NVGRE_IPV6_TCP 0x14 +#define TXGBE_PT_NVGRE_IPV6_UDP 0x24 +#define TXGBE_PT_NVGRE_IPV6_SCTP 0x44 +#define TXGBE_PT_NVGRE_IPV6_EXT 0x0C +#define TXGBE_PT_NVGRE_IPV6_EXT_TCP 0x1C +#define TXGBE_PT_NVGRE_IPV6_EXT_UDP 0x2C +#define TXGBE_PT_NVGRE_IPV6_EXT_SCTP 0x4C +#define TXGBE_PT_NVGRE_IPV4_IPV6 0x05 +#define TXGBE_PT_NVGRE_IPV4_IPV6_TCP 0x15 +#define TXGBE_PT_NVGRE_IPV4_IPV6_UDP 0x25 +#define TXGBE_PT_NVGRE_IPV4_IPV6_EXT 0x0D +#define TXGBE_PT_NVGRE_IPV4_IPV6_EXT_TCP 0x1D +#define TXGBE_PT_NVGRE_IPV4_IPV6_EXT_UDP 0x2D + +#define TXGBE_PT_VXLAN 0x80 +#define TXGBE_PT_VXLAN_IPV4 0x81 +#define TXGBE_PT_VXLAN_IPV4_TCP 0x91 +#define TXGBE_PT_VXLAN_IPV4_UDP 0xA1 +#define TXGBE_PT_VXLAN_IPV4_SCTP 0xC1 +#define TXGBE_PT_VXLAN_IPV4_EXT 0x83 +#define TXGBE_PT_VXLAN_IPV4_EXT_TCP 0x93 +#define TXGBE_PT_VXLAN_IPV4_EXT_UDP 0xA3 +#define TXGBE_PT_VXLAN_IPV4_EXT_SCTP 0xC3 +#define TXGBE_PT_VXLAN_IPV6 0x84 +#define TXGBE_PT_VXLAN_IPV6_TCP 0x94 +#define TXGBE_PT_VXLAN_IPV6_UDP 0xA4 +#define TXGBE_PT_VXLAN_IPV6_SCTP 0xC4 +#define TXGBE_PT_VXLAN_IPV6_EXT 0x8C +#define TXGBE_PT_VXLAN_IPV6_EXT_TCP 0x9C +#define TXGBE_PT_VXLAN_IPV6_EXT_UDP 0xAC +#define TXGBE_PT_VXLAN_IPV6_EXT_SCTP 0xCC +#define TXGBE_PT_VXLAN_IPV4_IPV6 0x85 +#define TXGBE_PT_VXLAN_IPV4_IPV6_TCP 0x95 +#define TXGBE_PT_VXLAN_IPV4_IPV6_UDP 0xA5 +#define TXGBE_PT_VXLAN_IPV4_IPV6_EXT 0x8D +#define TXGBE_PT_VXLAN_IPV4_IPV6_EXT_TCP 0x9D +#define TXGBE_PT_VXLAN_IPV4_IPV6_EXT_UDP 0xAD + +#define TXGBE_PT_MAX 256 +extern const u32 txgbe_ptype_table[TXGBE_PT_MAX]; +extern const u32 txgbe_ptype_table_tn[TXGBE_PT_MAX]; + + +/* ether type filter list: one static filter per filter consumer. This is + * to avoid filter collisions later. Add new filters + * here!! + * EAPOL 802.1x (0x888e): Filter 0 + * FCoE (0x8906): Filter 2 + * 1588 (0x88f7): Filter 3 + * FIP (0x8914): Filter 4 + * LLDP (0x88CC): Filter 5 + * LACP (0x8809): Filter 6 + * FC (0x8808): Filter 7 + */ +#define TXGBE_ETF_ID_EAPOL 0 +#define TXGBE_ETF_ID_FCOE 2 +#define TXGBE_ETF_ID_1588 3 +#define TXGBE_ETF_ID_FIP 4 +#define TXGBE_ETF_ID_LLDP 5 +#define TXGBE_ETF_ID_LACP 6 +#define TXGBE_ETF_ID_FC 7 +#define TXGBE_ETF_ID_MAX 8 + +#define TXGBE_PTID_ETF_MIN 0x18 +#define TXGBE_PTID_ETF_MAX 0x1F +static inline int txgbe_etflt_id(u8 ptid) +{ + if (ptid >= TXGBE_PTID_ETF_MIN && ptid <= TXGBE_PTID_ETF_MAX) + return ptid - TXGBE_PTID_ETF_MIN; + else + return -1; +} + +struct txgbe_udphdr { + __be16 source; + __be16 dest; + __be16 len; + __be16 check; +}; + +struct txgbe_vxlanhdr { + __be32 vx_flags; + __be32 vx_vni; +}; + +struct txgbe_genevehdr { + u8 opt_len:6; + u8 ver:2; + u8 rsvd1:6; + u8 critical:1; + u8 oam:1; + __be16 proto_type; + + u8 vni[3]; + u8 rsvd2; +}; + +struct txgbe_nvgrehdr { + __be16 flags; + __be16 proto; + __be32 tni; +}; + +#endif /* _TXGBE_PTYPE_H_ */ diff --git a/drivers/net/txgbe/txgbe_rxtx.h b/drivers/net/txgbe/txgbe_rxtx.h index 5b991e304..54a19b451 100644 --- a/drivers/net/txgbe/txgbe_rxtx.h +++ b/drivers/net/txgbe/txgbe_rxtx.h @@ -65,8 +65,6 @@ struct txgbe_tx_desc { #define RX_RING_SZ ((TXGBE_RING_DESC_MAX + RTE_PMD_TXGBE_RX_MAX_BURST) * \ sizeof(struct txgbe_rx_desc)) -#define TXGBE_PTID_MASK 0xFF - #define RTE_TXGBE_REGISTER_POLL_WAIT_10_MS 10 #define RTE_TXGBE_WAIT_100_US 100