root/include/linux/mlx5/eswitch.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. mlx5_eswitch_mode
  2. mlx5_eswitch_get_encap_mode
  3. mlx5_eswitch_vport_match_metadata_enabled
  4. mlx5_eswitch_get_vport_metadata_for_match

   1 /* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */
   2 /*
   3  * Copyright (c) 2018 Mellanox Technologies. All rights reserved.
   4  */
   5 
   6 #ifndef _MLX5_ESWITCH_
   7 #define _MLX5_ESWITCH_
   8 
   9 #include <linux/mlx5/driver.h>
  10 #include <net/devlink.h>
  11 
  12 #define MLX5_ESWITCH_MANAGER(mdev) MLX5_CAP_GEN(mdev, eswitch_manager)
  13 
  14 enum {
  15         MLX5_ESWITCH_NONE,
  16         MLX5_ESWITCH_LEGACY,
  17         MLX5_ESWITCH_OFFLOADS
  18 };
  19 
  20 enum {
  21         REP_ETH,
  22         REP_IB,
  23         NUM_REP_TYPES,
  24 };
  25 
  26 enum {
  27         REP_UNREGISTERED,
  28         REP_REGISTERED,
  29         REP_LOADED,
  30 };
  31 
  32 struct mlx5_eswitch_rep;
  33 struct mlx5_eswitch_rep_ops {
  34         int (*load)(struct mlx5_core_dev *dev, struct mlx5_eswitch_rep *rep);
  35         void (*unload)(struct mlx5_eswitch_rep *rep);
  36         void *(*get_proto_dev)(struct mlx5_eswitch_rep *rep);
  37 };
  38 
  39 struct mlx5_eswitch_rep_data {
  40         void *priv;
  41         atomic_t state;
  42 };
  43 
  44 struct mlx5_eswitch_rep {
  45         struct mlx5_eswitch_rep_data rep_data[NUM_REP_TYPES];
  46         u16                    vport;
  47         u16                    vlan;
  48         /* Only IB rep is using vport_index */
  49         u16                    vport_index;
  50         u32                    vlan_refcount;
  51 };
  52 
  53 void mlx5_eswitch_register_vport_reps(struct mlx5_eswitch *esw,
  54                                       const struct mlx5_eswitch_rep_ops *ops,
  55                                       u8 rep_type);
  56 void mlx5_eswitch_unregister_vport_reps(struct mlx5_eswitch *esw, u8 rep_type);
  57 void *mlx5_eswitch_get_proto_dev(struct mlx5_eswitch *esw,
  58                                  u16 vport_num,
  59                                  u8 rep_type);
  60 struct mlx5_eswitch_rep *mlx5_eswitch_vport_rep(struct mlx5_eswitch *esw,
  61                                                 u16 vport_num);
  62 void *mlx5_eswitch_uplink_get_proto_dev(struct mlx5_eswitch *esw, u8 rep_type);
  63 struct mlx5_flow_handle *
  64 mlx5_eswitch_add_send_to_vport_rule(struct mlx5_eswitch *esw,
  65                                     u16 vport_num, u32 sqn);
  66 
  67 u16 mlx5_eswitch_get_total_vports(const struct mlx5_core_dev *dev);
  68 
  69 #ifdef CONFIG_MLX5_ESWITCH
  70 enum devlink_eswitch_encap_mode
  71 mlx5_eswitch_get_encap_mode(const struct mlx5_core_dev *dev);
  72 
  73 bool mlx5_eswitch_vport_match_metadata_enabled(const struct mlx5_eswitch *esw);
  74 u32 mlx5_eswitch_get_vport_metadata_for_match(const struct mlx5_eswitch *esw,
  75                                               u16 vport_num);
  76 u8 mlx5_eswitch_mode(struct mlx5_eswitch *esw);
  77 #else  /* CONFIG_MLX5_ESWITCH */
  78 
  79 static inline u8 mlx5_eswitch_mode(struct mlx5_eswitch *esw)
  80 {
  81         return MLX5_ESWITCH_NONE;
  82 }
  83 
  84 static inline enum devlink_eswitch_encap_mode
  85 mlx5_eswitch_get_encap_mode(const struct mlx5_core_dev *dev)
  86 {
  87         return DEVLINK_ESWITCH_ENCAP_MODE_NONE;
  88 }
  89 
  90 static inline bool
  91 mlx5_eswitch_vport_match_metadata_enabled(const struct mlx5_eswitch *esw)
  92 {
  93         return false;
  94 };
  95 
  96 static inline u32
  97 mlx5_eswitch_get_vport_metadata_for_match(const struct mlx5_eswitch *esw,
  98                                           int vport_num)
  99 {
 100         return 0;
 101 };
 102 #endif /* CONFIG_MLX5_ESWITCH */
 103 
 104 #endif

/* [<][>][^][v][top][bottom][index][help] */