Merge tag 'mvebu-dt64-4.12-3' of git://git.infradead.org/linux-mvebu into fixes
[sfrench/cifs-2.6.git] / drivers / net / ethernet / mellanox / mlx5 / core / eswitch.h
index ad329b1680b455ddd4cdfda56bf512bfbea37529..b746f62c8c79b17a64c0923665917170a075092a 100644 (file)
@@ -36,7 +36,6 @@
 #include <linux/if_ether.h>
 #include <linux/if_link.h>
 #include <net/devlink.h>
-#include <net/ip_tunnels.h>
 #include <linux/mlx5/device.h>
 
 #define MLX5_MAX_UC_PER_VPORT(dev) \
@@ -210,6 +209,14 @@ struct mlx5_esw_offload {
        DECLARE_HASHTABLE(encap_tbl, 8);
        u8 inline_mode;
        u64 num_flows;
+       u8 encap;
+};
+
+/* E-Switch MC FDB table hash node */
+struct esw_mc_addr { /* SRIOV only */
+       struct l2addr_node     node;
+       struct mlx5_flow_handle *uplink_rule; /* Forward to uplink rule */
+       u32                    refcnt;
 };
 
 struct mlx5_eswitch {
@@ -225,7 +232,7 @@ struct mlx5_eswitch {
         * and async SRIOV admin state changes
         */
        struct mutex            state_lock;
-       struct esw_mc_addr      *mc_promisc;
+       struct esw_mc_addr      mc_promisc;
 
        struct {
                bool            enabled;
@@ -285,20 +292,8 @@ enum {
        SET_VLAN_INSERT = BIT(1)
 };
 
-#define MLX5_FLOW_CONTEXT_ACTION_VLAN_POP  0x40
-#define MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH 0x80
-
-struct mlx5_encap_entry {
-       struct hlist_node encap_hlist;
-       struct list_head flows;
-       u32 encap_id;
-       struct neighbour *n;
-       struct ip_tunnel_info tun_info;
-       unsigned char h_dest[ETH_ALEN]; /* destination eth addr */
-
-       struct net_device *out_dev;
-       int tunnel_type;
-};
+#define MLX5_FLOW_CONTEXT_ACTION_VLAN_POP  0x4000
+#define MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH 0x8000
 
 struct mlx5_esw_flow_attr {
        struct mlx5_eswitch_rep *in_rep;
@@ -307,7 +302,9 @@ struct mlx5_esw_flow_attr {
        int     action;
        u16     vlan;
        bool    vlan_handled;
-       struct mlx5_encap_entry *encap;
+       u32     encap_id;
+       u32     mod_hdr_id;
+       struct mlx5e_tc_flow_parse_attr *parse_attr;
 };
 
 int mlx5_eswitch_sqs2vport_start(struct mlx5_eswitch *esw,
@@ -321,6 +318,8 @@ int mlx5_devlink_eswitch_mode_get(struct devlink *devlink, u16 *mode);
 int mlx5_devlink_eswitch_inline_mode_set(struct devlink *devlink, u8 mode);
 int mlx5_devlink_eswitch_inline_mode_get(struct devlink *devlink, u8 *mode);
 int mlx5_eswitch_inline_mode_get(struct mlx5_eswitch *esw, int nvfs, u8 *mode);
+int mlx5_devlink_eswitch_encap_mode_set(struct devlink *devlink, u8 encap);
+int mlx5_devlink_eswitch_encap_mode_get(struct devlink *devlink, u8 *encap);
 void mlx5_eswitch_register_vport_rep(struct mlx5_eswitch *esw,
                                     int vport_index,
                                     struct mlx5_eswitch_rep *rep);