14edc17fdSAya Levin /* SPDX-License-Identifier: GPL-2.0 */
24edc17fdSAya Levin /* Copyright (c) 2019 Mellanox Technologies. */
34edc17fdSAya Levin 
44edc17fdSAya Levin #ifndef __MLX5E_EN_HEALTH_H
54edc17fdSAya Levin #define __MLX5E_EN_HEALTH_H
64edc17fdSAya Levin 
74edc17fdSAya Levin #include "en.h"
85f29458bSAya Levin #include "diag/rsc_dump.h"
94edc17fdSAya Levin 
cqe_syndrome_needs_recover(u8 syndrome)108276ea13SAya Levin static inline bool cqe_syndrome_needs_recover(u8 syndrome)
118276ea13SAya Levin {
12187a9830SAya Levin 	return syndrome == MLX5_CQE_SYNDROME_LOCAL_QP_OP_ERR ||
138276ea13SAya Levin 	       syndrome == MLX5_CQE_SYNDROME_LOCAL_PROT_ERR ||
148276ea13SAya Levin 	       syndrome == MLX5_CQE_SYNDROME_WR_FLUSH_ERR;
158276ea13SAya Levin }
168276ea13SAya Levin 
17b3ea4c4fSEran Ben Elisha void mlx5e_reporter_tx_create(struct mlx5e_priv *priv);
1806293ae4SAya Levin void mlx5e_reporter_tx_destroy(struct mlx5e_priv *priv);
1906293ae4SAya Levin void mlx5e_reporter_tx_err_cqe(struct mlx5e_txqsq *sq);
2006293ae4SAya Levin int mlx5e_reporter_tx_timeout(struct mlx5e_txqsq *sq);
21*53b836a4SRahul Rameshbabu void mlx5e_reporter_tx_ptpsq_unhealthy(struct mlx5e_ptpsq *ptpsq);
224edc17fdSAya Levin 
23d5cbedd7SAya Levin int mlx5e_health_cq_diag_fmsg(struct mlx5e_cq *cq, struct devlink_fmsg *fmsg);
24d5cbedd7SAya Levin int mlx5e_health_cq_common_diag_fmsg(struct mlx5e_cq *cq, struct devlink_fmsg *fmsg);
2556837c2aSAya Levin int mlx5e_health_eq_diag_fmsg(struct mlx5_eq_comp *eq, struct devlink_fmsg *fmsg);
26d5cbedd7SAya Levin int mlx5e_health_fmsg_named_obj_nest_start(struct devlink_fmsg *fmsg, char *name);
27d5cbedd7SAya Levin int mlx5e_health_fmsg_named_obj_nest_end(struct devlink_fmsg *fmsg);
282d708887SAya Levin 
29b3ea4c4fSEran Ben Elisha void mlx5e_reporter_rx_create(struct mlx5e_priv *priv);
309032e719SAya Levin void mlx5e_reporter_rx_destroy(struct mlx5e_priv *priv);
31be5323c8SAya Levin void mlx5e_reporter_icosq_cqe_err(struct mlx5e_icosq *icosq);
328276ea13SAya Levin void mlx5e_reporter_rq_cqe_err(struct mlx5e_rq *rq);
3332c57fb2SAya Levin void mlx5e_reporter_rx_timeout(struct mlx5e_rq *rq);
3417958d7cSMaxim Mikityanskiy void mlx5e_reporter_icosq_suspend_recovery(struct mlx5e_channel *c);
3517958d7cSMaxim Mikityanskiy void mlx5e_reporter_icosq_resume_recovery(struct mlx5e_channel *c);
369032e719SAya Levin 
37c50de4afSAya Levin #define MLX5E_REPORTER_PER_Q_MAX_LEN 256
38c50de4afSAya Levin 
39c50de4afSAya Levin struct mlx5e_err_ctx {
40c50de4afSAya Levin 	int (*recover)(void *ctx);
415f29458bSAya Levin 	int (*dump)(struct mlx5e_priv *priv, struct devlink_fmsg *fmsg, void *ctx);
42c50de4afSAya Levin 	void *ctx;
43c50de4afSAya Levin };
44c50de4afSAya Levin 
454ad40d8eSEran Ben Elisha int mlx5e_health_sq_to_ready(struct mlx5_core_dev *mdev, struct net_device *dev, u32 sqn);
46521f31afSAya Levin int mlx5e_health_channel_eq_recover(struct net_device *dev, struct mlx5_eq_comp *eq,
47521f31afSAya Levin 				    struct mlx5e_ch_stats *stats);
48c50de4afSAya Levin int mlx5e_health_recover_channels(struct mlx5e_priv *priv);
49c50de4afSAya Levin int mlx5e_health_report(struct mlx5e_priv *priv,
50c50de4afSAya Levin 			struct devlink_health_reporter *reporter, char *err_str,
51c50de4afSAya Levin 			struct mlx5e_err_ctx *err_ctx);
52b3ea4c4fSEran Ben Elisha void mlx5e_health_create_reporters(struct mlx5e_priv *priv);
5311af6a6dSAya Levin void mlx5e_health_destroy_reporters(struct mlx5e_priv *priv);
5411af6a6dSAya Levin void mlx5e_health_channels_update(struct mlx5e_priv *priv);
555f29458bSAya Levin int mlx5e_health_rsc_fmsg_dump(struct mlx5e_priv *priv, struct mlx5_rsc_key *key,
565f29458bSAya Levin 			       struct devlink_fmsg *fmsg);
575f29458bSAya Levin int mlx5e_health_queue_dump(struct mlx5e_priv *priv, struct devlink_fmsg *fmsg,
585f29458bSAya Levin 			    int queue_idx, char *lbl);
594edc17fdSAya Levin #endif
60