VXLAN/NVGRE (and Geneve) support is available on SFN8xxx with
full-feature firmware variant running.

Signed-off-by: Andrew Rybchenko <arybche...@solarflare.com>
Reviewed-by: Andrew Lee <a...@solarflare.com>
Reviewed-by: Andy Moreton <amore...@solarflare.com>
Reviewed-by: Mark Spender <mspen...@solarflare.com>
---
 drivers/net/sfc/base/ef10_nic.c | 10 ++++++++++
 drivers/net/sfc/base/efx.h      |  9 +++++++++
 2 files changed, 19 insertions(+)

diff --git a/drivers/net/sfc/base/ef10_nic.c b/drivers/net/sfc/base/ef10_nic.c
index aac2679..58d1b0a 100644
--- a/drivers/net/sfc/base/ef10_nic.c
+++ b/drivers/net/sfc/base/ef10_nic.c
@@ -1072,6 +1072,16 @@
        encp->enc_mac_stats_40g_tx_size_bins =
            CAP_FLAG2(flags2, MAC_STATS_40G_TX_SIZE_BINS) ? B_TRUE : B_FALSE;
 
+       /*
+        * Check if firmware supports VXLAN and NVGRE tunnels.
+        * The capability indicates Geneve protocol support as well.
+        */
+       if (CAP_FLAG(flags, VXLAN_NVGRE))
+               encp->enc_tunnel_encapsulations_supported =
+                   (1u << EFX_TUNNEL_PROTOCOL_VXLAN) |
+                   (1u << EFX_TUNNEL_PROTOCOL_GENEVE) |
+                   (1u << EFX_TUNNEL_PROTOCOL_NVGRE);
+
 #undef CAP_FLAG
 #undef CAP_FLAG2
 
diff --git a/drivers/net/sfc/base/efx.h b/drivers/net/sfc/base/efx.h
index 7eabc37..c227546 100644
--- a/drivers/net/sfc/base/efx.h
+++ b/drivers/net/sfc/base/efx.h
@@ -1088,6 +1088,14 @@ enum {
 #define        EFX_FEATURE_FW_ASSISTED_TSO_V2  0x00002000
 #define        EFX_FEATURE_PACKED_STREAM       0x00004000
 
+typedef enum efx_tunnel_protocol_e {
+       EFX_TUNNEL_PROTOCOL_NONE = 0,
+       EFX_TUNNEL_PROTOCOL_VXLAN,
+       EFX_TUNNEL_PROTOCOL_GENEVE,
+       EFX_TUNNEL_PROTOCOL_NVGRE,
+       EFX_TUNNEL_NPROTOS
+} efx_tunnel_protocol_t;
+
 typedef struct efx_nic_cfg_s {
        uint32_t                enc_board_type;
        uint32_t                enc_phy_type;
@@ -1187,6 +1195,7 @@ enum {
        boolean_t               enc_rx_var_packed_stream_supported;
        boolean_t               enc_pm_and_rxdp_counters;
        boolean_t               enc_mac_stats_40g_tx_size_bins;
+       uint32_t                enc_tunnel_encapsulations_supported;
        /* External port identifier */
        uint8_t                 enc_external_port;
        uint32_t                enc_mcdi_max_payload_length;
-- 
1.8.2.3

Reply via email to