Add virtchnl protocol header and field definitions for advanced RSS
configuration including GTPC, GTPU, L2TPv2, ECPRI, PPP, GRE, and IP
fragment headers.

- Define new virtchnl protocol header types
- Add RSS field selectors for tunnel protocols
- Extend static mapping arrays for protocol field matching
- Add L2TPv2 session ID and length+session ID field support

This provides the foundational definitions needed for VF RSS
configuration of tunnel protocols.

Co-developed-by: Dan Nowlin <[email protected]>
Signed-off-by: Dan Nowlin <[email protected]>
Co-developed-by: Jie Wang <[email protected]>
Signed-off-by: Jie Wang <[email protected]>
Co-developed-by: Junfeng Guo <[email protected]>
Signed-off-by: Junfeng Guo <[email protected]>
Co-developed-by: Qi Zhang <[email protected]>
Signed-off-by: Qi Zhang <[email protected]>
Co-developed-by: Ting Xu <[email protected]>
Signed-off-by: Ting Xu <[email protected]>
Signed-off-by: Przemek Kitszel <[email protected]>
Signed-off-by: Aleksandr Loktionov <[email protected]>
---
 drivers/net/ethernet/intel/ice/ice_vf_lib.h |  48 +++++
 drivers/net/ethernet/intel/ice/virt/rss.c   | 219 +++++++++++++++++++-
 include/linux/avf/virtchnl.h                |  50 +++++
 3 files changed, 316 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_vf_lib.h 
b/drivers/net/ethernet/intel/ice/ice_vf_lib.h
index b007089..7a9c75d 100644
--- a/drivers/net/ethernet/intel/ice/ice_vf_lib.h
+++ b/drivers/net/ethernet/intel/ice/ice_vf_lib.h
@@ -53,19 +53,65 @@ struct ice_mdd_vf_events {
        u16 last_printed;
 };
 
+enum ice_hash_ip_ctx_type {
+       ICE_HASH_IP_CTX_IP = 0,
+       ICE_HASH_IP_CTX_IP_ESP,
+       ICE_HASH_IP_CTX_IP_UDP_ESP,
+       ICE_HASH_IP_CTX_IP_AH,
+       ICE_HASH_IP_CTX_IP_PFCP,
+       ICE_HASH_IP_CTX_IP_UDP,
+       ICE_HASH_IP_CTX_IP_TCP,
+       ICE_HASH_IP_CTX_IP_SCTP,
+       ICE_HASH_IP_CTX_MAX,
+};
+
+struct ice_vf_hash_ip_ctx {
+       struct ice_rss_hash_cfg ctx[ICE_HASH_IP_CTX_MAX];
+};
+
+enum ice_hash_gtpu_ctx_type {
+       ICE_HASH_GTPU_CTX_EH_IP = 0,
+       ICE_HASH_GTPU_CTX_EH_IP_UDP,
+       ICE_HASH_GTPU_CTX_EH_IP_TCP,
+       ICE_HASH_GTPU_CTX_UP_IP,
+       ICE_HASH_GTPU_CTX_UP_IP_UDP,
+       ICE_HASH_GTPU_CTX_UP_IP_TCP,
+       ICE_HASH_GTPU_CTX_DW_IP,
+       ICE_HASH_GTPU_CTX_DW_IP_UDP,
+       ICE_HASH_GTPU_CTX_DW_IP_TCP,
+       ICE_HASH_GTPU_CTX_MAX,
+};
+
+struct ice_vf_hash_gtpu_ctx {
+       struct ice_rss_hash_cfg ctx[ICE_HASH_GTPU_CTX_MAX];
+};
+
+struct ice_vf_hash_ctx {
+       struct ice_vf_hash_ip_ctx v4;
+       struct ice_vf_hash_ip_ctx v6;
+       struct ice_vf_hash_gtpu_ctx ipv4;
+       struct ice_vf_hash_gtpu_ctx ipv6;
+};
+
 /* Structure to store fdir fv entry */
 struct ice_fdir_prof_info {
        struct ice_parser_profile prof;
        u64 fdir_active_cnt;
 };
 
 struct ice_vf_qs_bw {
        u32 committed;
        u32 peak;
        u16 queue_id;
        u8 tc;
 };
 
+/* Structure to store RSS field vector entry */
+struct ice_rss_prof_info {
+       struct ice_parser_profile prof;
+       bool symm;
+};
+
 /* VF operations */
 struct ice_vf_ops {
        enum ice_disq_rst_src reset_type;
@@ -106,6 +152,8 @@ struct ice_vf {
        u16 ctrl_vsi_idx;
        struct ice_vf_fdir fdir;
        struct ice_fdir_prof_info fdir_prof_info[ICE_MAX_PTGS];
+       struct ice_rss_prof_info rss_prof_info[ICE_MAX_PTGS];
+       struct ice_vf_hash_ctx hash_ctx;
        u64 rss_hashcfg;                /* RSS hash configuration */
        struct ice_sw *vf_sw_id;        /* switch ID the VF VSIs connect to */
        struct virtchnl_version_info vf_ver;
diff --git a/drivers/net/ethernet/intel/ice/virt/rss.c 
b/drivers/net/ethernet/intel/ice/virt/rss.c
index cbdbb32..ee0d1ec3 100644
--- a/drivers/net/ethernet/intel/ice/virt/rss.c
+++ b/drivers/net/ethernet/intel/ice/virt/rss.c
@@ -36,6 +36,11 @@ static const struct ice_vc_hdr_match_type ice_vc_hdr_list[] 
= {
        {VIRTCHNL_PROTO_HDR_ESP,        ICE_FLOW_SEG_HDR_ESP},
        {VIRTCHNL_PROTO_HDR_AH,         ICE_FLOW_SEG_HDR_AH},
        {VIRTCHNL_PROTO_HDR_PFCP,       ICE_FLOW_SEG_HDR_PFCP_SESSION},
+       {VIRTCHNL_PROTO_HDR_GTPC,       ICE_FLOW_SEG_HDR_GTPC},
+       {VIRTCHNL_PROTO_HDR_L2TPV2,     ICE_FLOW_SEG_HDR_L2TPV2},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,  ICE_FLOW_SEG_HDR_IPV_FRAG},
+       {VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG,       ICE_FLOW_SEG_HDR_IPV_FRAG},
+       {VIRTCHNL_PROTO_HDR_GRE,        ICE_FLOW_SEG_HDR_GRE},
 };
 
 struct ice_vc_hash_field_match_type {
@@ -87,8 +92,125 @@ ice_vc_hash_field_match_type ice_vc_hash_field_list[] = {
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT),
                ICE_FLOW_HASH_IPV4 | BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)},
-       {VIRTCHNL_PROTO_HDR_IPV4, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT),
+       {VIRTCHNL_PROTO_HDR_IPV4,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_FRAG_PKID),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_ID)},
+       {VIRTCHNL_PROTO_HDR_IPV4,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               ICE_FLOW_HASH_IPV4 | BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               ICE_FLOW_HASH_IPV4 | BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT),
                BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST),
+               ICE_FLOW_HASH_IPV4},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT),
+               ICE_FLOW_HASH_IPV4 | BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_FRAG_PKID),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_ID)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               ICE_FLOW_HASH_IPV4 | BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               ICE_FLOW_HASH_IPV4 | BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
        {VIRTCHNL_PROTO_HDR_IPV6, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_SRC),
                BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA)},
        {VIRTCHNL_PROTO_HDR_IPV6, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_DST),
@@ -110,51 +232,146 @@ ice_vc_hash_field_match_type ice_vc_hash_field_list[] = {
                ICE_FLOW_HASH_IPV6 | BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)},
        {VIRTCHNL_PROTO_HDR_IPV6, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT),
                BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)},
+       {VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG_PKID),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_ID)},
+       {VIRTCHNL_PROTO_HDR_IPV6,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST),
+               ICE_FLOW_HASH_IPV6_PRE64},
+       {VIRTCHNL_PROTO_HDR_IPV6,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA)},
+       {VIRTCHNL_PROTO_HDR_IPV6,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA)},
+       {VIRTCHNL_PROTO_HDR_IPV6,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT),
+               ICE_FLOW_HASH_IPV6_PRE64 |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)},
+       {VIRTCHNL_PROTO_HDR_IPV6,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)},
+       {VIRTCHNL_PROTO_HDR_IPV6,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)},
        {VIRTCHNL_PROTO_HDR_TCP,
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_SRC_PORT),
                BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)},
        {VIRTCHNL_PROTO_HDR_TCP,
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_DST_PORT),
                BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)},
        {VIRTCHNL_PROTO_HDR_TCP,
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_SRC_PORT) |
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_DST_PORT),
                ICE_FLOW_HASH_TCP_PORT},
+       {VIRTCHNL_PROTO_HDR_TCP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_TCP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_SRC_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_TCP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_DST_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_TCP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_SRC_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_DST_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_CHKSUM),
+               ICE_FLOW_HASH_TCP_PORT |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_CHKSUM)},
        {VIRTCHNL_PROTO_HDR_UDP,
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_SRC_PORT),
                BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)},
        {VIRTCHNL_PROTO_HDR_UDP,
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_DST_PORT),
                BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)},
        {VIRTCHNL_PROTO_HDR_UDP,
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_SRC_PORT) |
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_DST_PORT),
                ICE_FLOW_HASH_UDP_PORT},
+       {VIRTCHNL_PROTO_HDR_UDP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_UDP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_SRC_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_UDP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_DST_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_UDP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_SRC_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_DST_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_CHKSUM),
+               ICE_FLOW_HASH_UDP_PORT |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_CHKSUM)},
        {VIRTCHNL_PROTO_HDR_SCTP,
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_SRC_PORT),
                BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)},
        {VIRTCHNL_PROTO_HDR_SCTP,
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_DST_PORT),
                BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)},
        {VIRTCHNL_PROTO_HDR_SCTP,
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_SRC_PORT) |
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_DST_PORT),
                ICE_FLOW_HASH_SCTP_PORT},
+       {VIRTCHNL_PROTO_HDR_SCTP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_SCTP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_SRC_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_SCTP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_DST_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_SCTP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_SRC_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_DST_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_CHKSUM),
+               ICE_FLOW_HASH_SCTP_PORT |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_CHKSUM)},
        {VIRTCHNL_PROTO_HDR_PPPOE,
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_PPPOE_SESS_ID),
                BIT_ULL(ICE_FLOW_FIELD_IDX_PPPOE_SESS_ID)},
        {VIRTCHNL_PROTO_HDR_GTPU_IP,
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_GTPU_IP_TEID),
                BIT_ULL(ICE_FLOW_FIELD_IDX_GTPU_IP_TEID)},
        {VIRTCHNL_PROTO_HDR_L2TPV3,
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_L2TPV3_SESS_ID),
                BIT_ULL(ICE_FLOW_FIELD_IDX_L2TPV3_SESS_ID)},
        {VIRTCHNL_PROTO_HDR_ESP, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_ESP_SPI),
                BIT_ULL(ICE_FLOW_FIELD_IDX_ESP_SPI)},
        {VIRTCHNL_PROTO_HDR_AH, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_AH_SPI),
                BIT_ULL(ICE_FLOW_FIELD_IDX_AH_SPI)},
        {VIRTCHNL_PROTO_HDR_PFCP, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_PFCP_SEID),
                BIT_ULL(ICE_FLOW_FIELD_IDX_PFCP_SEID)},
+       {VIRTCHNL_PROTO_HDR_GTPC,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_GTPC_TEID),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_GTPC_TEID)},
+       {VIRTCHNL_PROTO_HDR_L2TPV2,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_L2TPV2_SESS_ID),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_L2TPV2_SESS_ID)},
+       {VIRTCHNL_PROTO_HDR_L2TPV2,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_L2TPV2_LEN_SESS_ID),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_L2TPV2_LEN_SESS_ID)},
 };
 
 /**
diff --git a/include/linux/avf/virtchnl.h b/include/linux/avf/virtchnl.h
index 5be1881..11bdab5 100644
--- a/include/linux/avf/virtchnl.h
+++ b/include/linux/avf/virtchnl.h
@@ -1253,6 +1253,17 @@ enum virtchnl_proto_hdr_type {
        VIRTCHNL_PROTO_HDR_ESP,
        VIRTCHNL_PROTO_HDR_AH,
        VIRTCHNL_PROTO_HDR_PFCP,
+       VIRTCHNL_PROTO_HDR_GTPC,
+       VIRTCHNL_PROTO_HDR_ECPRI,
+       VIRTCHNL_PROTO_HDR_L2TPV2,
+       VIRTCHNL_PROTO_HDR_PPP,
+       /* IPv4 and IPv6 Fragment header types are only associated to
+        * VIRTCHNL_PROTO_HDR_IPV4 and VIRTCHNL_PROTO_HDR_IPV6 respectively,
+        * cannot be used independently.
+        */
+       VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+       VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG,
+       VIRTCHNL_PROTO_HDR_GRE,
 };
 
 /* Protocol header field within a protocol header. */
@@ -1275,25 +1286,42 @@ enum virtchnl_proto_hdr_field {
        VIRTCHNL_PROTO_HDR_IPV4_DSCP,
        VIRTCHNL_PROTO_HDR_IPV4_TTL,
        VIRTCHNL_PROTO_HDR_IPV4_PROT,
+       VIRTCHNL_PROTO_HDR_IPV4_CHKSUM,
        /* IPV6 */
        VIRTCHNL_PROTO_HDR_IPV6_SRC =
                PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_IPV6),
        VIRTCHNL_PROTO_HDR_IPV6_DST,
        VIRTCHNL_PROTO_HDR_IPV6_TC,
        VIRTCHNL_PROTO_HDR_IPV6_HOP_LIMIT,
        VIRTCHNL_PROTO_HDR_IPV6_PROT,
+       /* IPV6 Prefix */
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX32_SRC,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX32_DST,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX40_SRC,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX40_DST,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX48_SRC,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX48_DST,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX56_SRC,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX56_DST,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX96_SRC,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX96_DST,
        /* TCP */
        VIRTCHNL_PROTO_HDR_TCP_SRC_PORT =
                PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_TCP),
        VIRTCHNL_PROTO_HDR_TCP_DST_PORT,
+       VIRTCHNL_PROTO_HDR_TCP_CHKSUM,
        /* UDP */
        VIRTCHNL_PROTO_HDR_UDP_SRC_PORT =
                PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_UDP),
        VIRTCHNL_PROTO_HDR_UDP_DST_PORT,
+       VIRTCHNL_PROTO_HDR_UDP_CHKSUM,
        /* SCTP */
        VIRTCHNL_PROTO_HDR_SCTP_SRC_PORT =
                PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_SCTP),
        VIRTCHNL_PROTO_HDR_SCTP_DST_PORT,
+       VIRTCHNL_PROTO_HDR_SCTP_CHKSUM,
        /* GTPU_IP */
        VIRTCHNL_PROTO_HDR_GTPU_IP_TEID =
                PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_GTPU_IP),
@@ -1317,6 +1345,28 @@ enum virtchnl_proto_hdr_field {
        VIRTCHNL_PROTO_HDR_PFCP_S_FIELD =
                PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_PFCP),
        VIRTCHNL_PROTO_HDR_PFCP_SEID,
+       /* GTPC */
+       VIRTCHNL_PROTO_HDR_GTPC_TEID =
+               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_GTPC),
+       /* ECPRI */
+       VIRTCHNL_PROTO_HDR_ECPRI_MSG_TYPE =
+               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_ECPRI),
+       VIRTCHNL_PROTO_HDR_ECPRI_PC_RTC_ID,
+       /* IPv4 Dummy Fragment */
+       VIRTCHNL_PROTO_HDR_IPV4_FRAG_PKID =
+               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_IPV4_FRAG),
+       /* IPv6 Extension Fragment */
+       VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG_PKID =
+               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG),
+       /* GTPU_DWN/UP */
+       VIRTCHNL_PROTO_HDR_GTPU_DWN_QFI =
+               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_GTPU_EH_PDU_DWN),
+       VIRTCHNL_PROTO_HDR_GTPU_UP_QFI =
+               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_GTPU_EH_PDU_UP),
+       /* L2TPv2 */
+       VIRTCHNL_PROTO_HDR_L2TPV2_SESS_ID =
+               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_L2TPV2),
+       VIRTCHNL_PROTO_HDR_L2TPV2_LEN_SESS_ID,
 };
 
 struct virtchnl_proto_hdr {
-- 
2.49.0

Reply via email to