]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blame - drivers/net/ethernet/mellanox/mlx5/core/lag.h
Merge tag 'asoc-v5.7' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie...
[mirror_ubuntu-hirsute-kernel.git] / drivers / net / ethernet / mellanox / mlx5 / core / lag.h
CommitLineData
10a193ed
RD
1/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
2/* Copyright (c) 2019 Mellanox Technologies. */
3
4#ifndef __MLX5_LAG_H__
5#define __MLX5_LAG_H__
6
7#include "mlx5_core.h"
544fe7c2 8#include "lag_mp.h"
10a193ed 9
84d2dbb0
EA
10enum {
11 MLX5_LAG_P1,
12 MLX5_LAG_P2,
13};
14
10a193ed
RD
15enum {
16 MLX5_LAG_FLAG_ROCE = 1 << 0,
17 MLX5_LAG_FLAG_SRIOV = 1 << 1,
724b509c 18 MLX5_LAG_FLAG_MULTIPATH = 1 << 2,
10a193ed
RD
19};
20
724b509c
RD
21#define MLX5_LAG_MODE_FLAGS (MLX5_LAG_FLAG_ROCE | MLX5_LAG_FLAG_SRIOV |\
22 MLX5_LAG_FLAG_MULTIPATH)
10a193ed
RD
23
24struct lag_func {
25 struct mlx5_core_dev *dev;
26 struct net_device *netdev;
27};
28
29/* Used for collection of netdev event info. */
30struct lag_tracker {
31 enum netdev_lag_tx_type tx_type;
32 struct netdev_lag_lower_state_info netdev_state[MLX5_MAX_PORTS];
33 unsigned int is_bonded:1;
34};
35
36/* LAG data of a ConnectX card.
37 * It serves both its phys functions.
38 */
39struct mlx5_lag {
40 u8 flags;
41 u8 v2p_map[MLX5_MAX_PORTS];
42 struct lag_func pf[MLX5_MAX_PORTS];
43 struct lag_tracker tracker;
e6ee5e71 44 struct workqueue_struct *wq;
10a193ed
RD
45 struct delayed_work bond_work;
46 struct notifier_block nb;
544fe7c2 47 struct lag_mp lag_mp;
10a193ed
RD
48};
49
50static inline struct mlx5_lag *
51mlx5_lag_dev_get(struct mlx5_core_dev *dev)
52{
53 return dev->priv.lag;
54}
55
56static inline bool
57__mlx5_lag_is_active(struct mlx5_lag *ldev)
58{
59 return !!(ldev->flags & MLX5_LAG_MODE_FLAGS);
60}
61
62void mlx5_modify_lag(struct mlx5_lag *ldev,
63 struct lag_tracker *tracker);
64int mlx5_activate_lag(struct mlx5_lag *ldev,
65 struct lag_tracker *tracker,
66 u8 flags);
67int mlx5_lag_dev_get_netdev_idx(struct mlx5_lag *ldev,
68 struct net_device *ndev);
69
70#endif /* __MLX5_LAG_H__ */