Merge tag 'rtc-5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux
[linux-2.6-microblaze.git] / drivers / net / ethernet / mellanox / mlx5 / core / en / health.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright (c) 2019 Mellanox Technologies. */
3
4 #ifndef __MLX5E_EN_HEALTH_H
5 #define __MLX5E_EN_HEALTH_H
6
7 #include "en.h"
8 #include "diag/rsc_dump.h"
9
10 static inline bool cqe_syndrome_needs_recover(u8 syndrome)
11 {
12         return syndrome == MLX5_CQE_SYNDROME_LOCAL_QP_OP_ERR ||
13                syndrome == MLX5_CQE_SYNDROME_LOCAL_PROT_ERR ||
14                syndrome == MLX5_CQE_SYNDROME_WR_FLUSH_ERR;
15 }
16
17 void mlx5e_reporter_tx_create(struct mlx5e_priv *priv);
18 void mlx5e_reporter_tx_destroy(struct mlx5e_priv *priv);
19 void mlx5e_reporter_tx_err_cqe(struct mlx5e_txqsq *sq);
20 int mlx5e_reporter_tx_timeout(struct mlx5e_txqsq *sq);
21
22 int mlx5e_health_cq_diag_fmsg(struct mlx5e_cq *cq, struct devlink_fmsg *fmsg);
23 int mlx5e_health_cq_common_diag_fmsg(struct mlx5e_cq *cq, struct devlink_fmsg *fmsg);
24 int mlx5e_health_eq_diag_fmsg(struct mlx5_eq_comp *eq, struct devlink_fmsg *fmsg);
25 int mlx5e_health_fmsg_named_obj_nest_start(struct devlink_fmsg *fmsg, char *name);
26 int mlx5e_health_fmsg_named_obj_nest_end(struct devlink_fmsg *fmsg);
27
28 void mlx5e_reporter_rx_create(struct mlx5e_priv *priv);
29 void mlx5e_reporter_rx_destroy(struct mlx5e_priv *priv);
30 void mlx5e_reporter_icosq_cqe_err(struct mlx5e_icosq *icosq);
31 void mlx5e_reporter_rq_cqe_err(struct mlx5e_rq *rq);
32 void mlx5e_reporter_rx_timeout(struct mlx5e_rq *rq);
33
34 #define MLX5E_REPORTER_PER_Q_MAX_LEN 256
35 #define MLX5E_REPORTER_FLUSH_TIMEOUT_MSEC 2000
36
37 struct mlx5e_err_ctx {
38         int (*recover)(void *ctx);
39         int (*dump)(struct mlx5e_priv *priv, struct devlink_fmsg *fmsg, void *ctx);
40         void *ctx;
41 };
42
43 int mlx5e_health_sq_to_ready(struct mlx5_core_dev *mdev, struct net_device *dev, u32 sqn);
44 int mlx5e_health_channel_eq_recover(struct net_device *dev, struct mlx5_eq_comp *eq,
45                                     struct mlx5e_ch_stats *stats);
46 int mlx5e_health_recover_channels(struct mlx5e_priv *priv);
47 int mlx5e_health_report(struct mlx5e_priv *priv,
48                         struct devlink_health_reporter *reporter, char *err_str,
49                         struct mlx5e_err_ctx *err_ctx);
50 void mlx5e_health_create_reporters(struct mlx5e_priv *priv);
51 void mlx5e_health_destroy_reporters(struct mlx5e_priv *priv);
52 void mlx5e_health_channels_update(struct mlx5e_priv *priv);
53 int mlx5e_health_rsc_fmsg_dump(struct mlx5e_priv *priv, struct mlx5_rsc_key *key,
54                                struct devlink_fmsg *fmsg);
55 int mlx5e_health_queue_dump(struct mlx5e_priv *priv, struct devlink_fmsg *fmsg,
56                             int queue_idx, char *lbl);
57 #endif