]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/blobdiff - include/linux/mlx5/eswitch.h
{IB, net}/mlx5: E-Switch, Use index of rep for vport to IB port mapping
[mirror_ubuntu-focal-kernel.git] / include / linux / mlx5 / eswitch.h
index 0ca77dd1429c07efb12e17d5a0e2311065ec82c9..36cb641188b041b799d42edc355994762aaffdcf 100644 (file)
@@ -7,6 +7,7 @@
 #define _MLX5_ESWITCH_
 
 #include <linux/mlx5/driver.h>
+#include <net/devlink.h>
 
 #define MLX5_ESWITCH_MANAGER(mdev) MLX5_CAP_GEN(mdev, eswitch_manager)
 
@@ -29,25 +30,29 @@ enum {
 };
 
 struct mlx5_eswitch_rep;
-struct mlx5_eswitch_rep_if {
-       int                    (*load)(struct mlx5_core_dev *dev,
-                                      struct mlx5_eswitch_rep *rep);
-       void                   (*unload)(struct mlx5_eswitch_rep *rep);
-       void                   *(*get_proto_dev)(struct mlx5_eswitch_rep *rep);
-       void                    *priv;
-       atomic_t                state;
+struct mlx5_eswitch_rep_ops {
+       int (*load)(struct mlx5_core_dev *dev, struct mlx5_eswitch_rep *rep);
+       void (*unload)(struct mlx5_eswitch_rep *rep);
+       void *(*get_proto_dev)(struct mlx5_eswitch_rep *rep);
+};
+
+struct mlx5_eswitch_rep_data {
+       void *priv;
+       atomic_t state;
 };
 
 struct mlx5_eswitch_rep {
-       struct mlx5_eswitch_rep_if rep_if[NUM_REP_TYPES];
+       struct mlx5_eswitch_rep_data rep_data[NUM_REP_TYPES];
        u16                    vport;
        u8                     hw_id[ETH_ALEN];
        u16                    vlan;
+       /* Only IB rep is using vport_index */
+       u16                    vport_index;
        u32                    vlan_refcount;
 };
 
 void mlx5_eswitch_register_vport_reps(struct mlx5_eswitch *esw,
-                                     struct mlx5_eswitch_rep_if *rep_if,
+                                     const struct mlx5_eswitch_rep_ops *ops,
                                      u8 rep_type);
 void mlx5_eswitch_unregister_vport_reps(struct mlx5_eswitch *esw, u8 rep_type);
 void *mlx5_eswitch_get_proto_dev(struct mlx5_eswitch *esw,
@@ -60,4 +65,32 @@ u8 mlx5_eswitch_mode(struct mlx5_eswitch *esw);
 struct mlx5_flow_handle *
 mlx5_eswitch_add_send_to_vport_rule(struct mlx5_eswitch *esw,
                                    int vport, u32 sqn);
+
+#ifdef CONFIG_MLX5_ESWITCH
+enum devlink_eswitch_encap_mode
+mlx5_eswitch_get_encap_mode(const struct mlx5_core_dev *dev);
+
+bool mlx5_eswitch_vport_match_metadata_enabled(const struct mlx5_eswitch *esw);
+u32 mlx5_eswitch_get_vport_metadata_for_match(const struct mlx5_eswitch *esw,
+                                             u16 vport_num);
+#else  /* CONFIG_MLX5_ESWITCH */
+static inline enum devlink_eswitch_encap_mode
+mlx5_eswitch_get_encap_mode(const struct mlx5_core_dev *dev)
+{
+       return DEVLINK_ESWITCH_ENCAP_MODE_NONE;
+}
+
+static inline bool
+mlx5_eswitch_vport_match_metadata_enabled(const struct mlx5_eswitch *esw)
+{
+       return false;
+};
+
+static inline u32
+mlx5_eswitch_get_vport_metadata_for_match(const struct mlx5_eswitch *esw,
+                                         int vport_num)
+{
+       return 0;
+};
+#endif /* CONFIG_MLX5_ESWITCH */
 #endif