xref: /linux/drivers/net/ethernet/marvell/octeontx2/af/rvu_devlink.h (revision 02680c23d7b3febe45ea3d4f9818c2b2dc89020a)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*  Marvell OcteonTx2 RVU Devlink
3  *
4  * Copyright (C) 2020 Marvell.
5  *
6  */
7 
8 #ifndef RVU_DEVLINK_H
9 #define  RVU_DEVLINK_H
10 
11 #define RVU_REPORTERS(_name)  \
12 static const struct devlink_health_reporter_ops  rvu_ ## _name ## _reporter_ops =  { \
13 	.name = #_name, \
14 	.recover = rvu_ ## _name ## _recover, \
15 	.dump = rvu_ ## _name ## _dump, \
16 }
17 
18 enum npa_af_rvu_health {
19 	NPA_AF_RVU_INTR,
20 	NPA_AF_RVU_GEN,
21 	NPA_AF_RVU_ERR,
22 	NPA_AF_RVU_RAS,
23 };
24 
25 struct rvu_npa_event_ctx {
26 	u64 npa_af_rvu_int;
27 	u64 npa_af_rvu_gen;
28 	u64 npa_af_rvu_err;
29 	u64 npa_af_rvu_ras;
30 };
31 
32 struct rvu_npa_health_reporters {
33 	struct rvu_npa_event_ctx *npa_event_ctx;
34 	struct devlink_health_reporter *rvu_hw_npa_intr_reporter;
35 	struct work_struct              intr_work;
36 	struct devlink_health_reporter *rvu_hw_npa_gen_reporter;
37 	struct work_struct              gen_work;
38 	struct devlink_health_reporter *rvu_hw_npa_err_reporter;
39 	struct work_struct             err_work;
40 	struct devlink_health_reporter *rvu_hw_npa_ras_reporter;
41 	struct work_struct              ras_work;
42 };
43 
44 enum nix_af_rvu_health {
45 	NIX_AF_RVU_INTR,
46 	NIX_AF_RVU_GEN,
47 	NIX_AF_RVU_ERR,
48 	NIX_AF_RVU_RAS,
49 };
50 
51 struct rvu_nix_event_ctx {
52 	u64 nix_af_rvu_int;
53 	u64 nix_af_rvu_gen;
54 	u64 nix_af_rvu_err;
55 	u64 nix_af_rvu_ras;
56 };
57 
58 struct rvu_nix_health_reporters {
59 	struct rvu_nix_event_ctx *nix_event_ctx;
60 	struct devlink_health_reporter *rvu_hw_nix_intr_reporter;
61 	struct work_struct		intr_work;
62 	struct devlink_health_reporter *rvu_hw_nix_gen_reporter;
63 	struct work_struct		gen_work;
64 	struct devlink_health_reporter *rvu_hw_nix_err_reporter;
65 	struct work_struct		err_work;
66 	struct devlink_health_reporter *rvu_hw_nix_ras_reporter;
67 	struct work_struct		ras_work;
68 };
69 
70 struct rvu_devlink {
71 	struct devlink *dl;
72 	struct rvu *rvu;
73 	struct workqueue_struct *devlink_wq;
74 	struct rvu_npa_health_reporters *rvu_npa_health_reporter;
75 	struct rvu_nix_health_reporters *rvu_nix_health_reporter;
76 };
77 
78 /* Devlink APIs */
79 int rvu_register_dl(struct rvu *rvu);
80 void rvu_unregister_dl(struct rvu *rvu);
81 
82 #endif /* RVU_DEVLINK_H */
83