common/sfc_efx/base: indicate MAE support for encapsulation
[dpdk.git] / drivers / common / sfc_efx / base / efx_mae.c
index 9618942..58b323d 100644 (file)
@@ -39,9 +39,29 @@ efx_mae_get_capabilities(
                goto fail2;
        }
 
+       maep->em_max_n_outer_prios =
+           MCDI_OUT_DWORD(req, MAE_GET_CAPS_OUT_OUTER_PRIOS);
+
        maep->em_max_n_action_prios =
            MCDI_OUT_DWORD(req, MAE_GET_CAPS_OUT_ACTION_PRIOS);
 
+       maep->em_encap_types_supported = 0;
+
+       if (MCDI_OUT_DWORD(req, MAE_GET_CAPS_OUT_ENCAP_TYPE_VXLAN) == 1) {
+               maep->em_encap_types_supported |=
+                   (1U << EFX_TUNNEL_PROTOCOL_VXLAN);
+       }
+
+       if (MCDI_OUT_DWORD(req, MAE_GET_CAPS_OUT_ENCAP_TYPE_GENEVE) == 1) {
+               maep->em_encap_types_supported |=
+                   (1U << EFX_TUNNEL_PROTOCOL_GENEVE);
+       }
+
+       if (MCDI_OUT_DWORD(req, MAE_GET_CAPS_OUT_ENCAP_TYPE_NVGRE) == 1) {
+               maep->em_encap_types_supported |=
+                   (1U << EFX_TUNNEL_PROTOCOL_NVGRE);
+       }
+
        maep->em_max_nfields =
            MCDI_OUT_DWORD(req, MAE_GET_CAPS_OUT_MATCH_FIELD_COUNT);
 
@@ -225,7 +245,9 @@ efx_mae_get_limits(
                goto fail1;
        }
 
+       emlp->eml_max_n_outer_prios = maep->em_max_n_outer_prios;
        emlp->eml_max_n_action_prios = maep->em_max_n_action_prios;
+       emlp->eml_encap_types_supported = maep->em_encap_types_supported;
 
        return (0);
 
@@ -295,6 +317,11 @@ typedef enum efx_mae_field_cap_id_e {
        EFX_MAE_FIELD_ID_IP_PROTO = MAE_FIELD_IP_PROTO,
        EFX_MAE_FIELD_ID_IP_TOS = MAE_FIELD_IP_TOS,
        EFX_MAE_FIELD_ID_IP_TTL = MAE_FIELD_IP_TTL,
+       EFX_MAE_FIELD_ID_SRC_IP6_BE = MAE_FIELD_SRC_IP6,
+       EFX_MAE_FIELD_ID_DST_IP6_BE = MAE_FIELD_DST_IP6,
+       EFX_MAE_FIELD_ID_L4_SPORT_BE = MAE_FIELD_L4_SPORT,
+       EFX_MAE_FIELD_ID_L4_DPORT_BE = MAE_FIELD_L4_DPORT,
+       EFX_MAE_FIELD_ID_TCP_FLAGS_BE = MAE_FIELD_TCP_FLAGS,
 
        EFX_MAE_FIELD_CAP_NIDS
 } efx_mae_field_cap_id_t;
@@ -349,6 +376,11 @@ static const efx_mae_mv_desc_t __efx_mae_action_rule_mv_desc_set[] = {
        EFX_MAE_MV_DESC(IP_PROTO, EFX_MAE_FIELD_BE),
        EFX_MAE_MV_DESC(IP_TOS, EFX_MAE_FIELD_BE),
        EFX_MAE_MV_DESC(IP_TTL, EFX_MAE_FIELD_BE),
+       EFX_MAE_MV_DESC(SRC_IP6_BE, EFX_MAE_FIELD_BE),
+       EFX_MAE_MV_DESC(DST_IP6_BE, EFX_MAE_FIELD_BE),
+       EFX_MAE_MV_DESC(L4_SPORT_BE, EFX_MAE_FIELD_BE),
+       EFX_MAE_MV_DESC(L4_DPORT_BE, EFX_MAE_FIELD_BE),
+       EFX_MAE_MV_DESC(TCP_FLAGS_BE, EFX_MAE_FIELD_BE),
 
 #undef EFX_MAE_MV_DESC
 };