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 #define MLX5E_RX_ERR_CQE(cqe) (get_cqe_opcode(cqe) != MLX5_CQE_RESP_SEND) 11 12 static inline bool cqe_syndrome_needs_recover(u8 syndrome) 13 { 14 return syndrome == MLX5_CQE_SYNDROME_LOCAL_QP_OP_ERR || 15 syndrome == MLX5_CQE_SYNDROME_LOCAL_PROT_ERR || 16 syndrome == MLX5_CQE_SYNDROME_WR_FLUSH_ERR; 17 } 18 19 int mlx5e_reporter_tx_create(struct mlx5e_priv *priv); 20 void mlx5e_reporter_tx_destroy(struct mlx5e_priv *priv); 21 void mlx5e_reporter_tx_err_cqe(struct mlx5e_txqsq *sq); 22 int mlx5e_reporter_tx_timeout(struct mlx5e_txqsq *sq); 23 24 int mlx5e_reporter_cq_diagnose(struct mlx5e_cq *cq, struct devlink_fmsg *fmsg); 25 int mlx5e_reporter_cq_common_diagnose(struct mlx5e_cq *cq, struct devlink_fmsg *fmsg); 26 int mlx5e_reporter_named_obj_nest_start(struct devlink_fmsg *fmsg, char *name); 27 int mlx5e_reporter_named_obj_nest_end(struct devlink_fmsg *fmsg); 28 29 int mlx5e_reporter_rx_create(struct mlx5e_priv *priv); 30 void mlx5e_reporter_rx_destroy(struct mlx5e_priv *priv); 31 void mlx5e_reporter_icosq_cqe_err(struct mlx5e_icosq *icosq); 32 void mlx5e_reporter_rq_cqe_err(struct mlx5e_rq *rq); 33 void mlx5e_reporter_rx_timeout(struct mlx5e_rq *rq); 34 35 #define MLX5E_REPORTER_PER_Q_MAX_LEN 256 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 mlx5e_channel *channel, u32 sqn); 44 int mlx5e_health_channel_eq_recover(struct mlx5_eq_comp *eq, struct mlx5e_channel *channel); 45 int mlx5e_health_recover_channels(struct mlx5e_priv *priv); 46 int mlx5e_health_report(struct mlx5e_priv *priv, 47 struct devlink_health_reporter *reporter, char *err_str, 48 struct mlx5e_err_ctx *err_ctx); 49 int mlx5e_health_create_reporters(struct mlx5e_priv *priv); 50 void mlx5e_health_destroy_reporters(struct mlx5e_priv *priv); 51 void mlx5e_health_channels_update(struct mlx5e_priv *priv); 52 int mlx5e_health_rsc_fmsg_dump(struct mlx5e_priv *priv, struct mlx5_rsc_key *key, 53 struct devlink_fmsg *fmsg); 54 int mlx5e_health_queue_dump(struct mlx5e_priv *priv, struct devlink_fmsg *fmsg, 55 int queue_idx, char *lbl); 56 #endif 57