xref: /OK3568_Linux_fs/kernel/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* Broadcom NetXtreme-C/E network driver.
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * Copyright (c) 2017 Broadcom Limited
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or modify
6*4882a593Smuzhiyun  * it under the terms of the GNU General Public License as published by
7*4882a593Smuzhiyun  * the Free Software Foundation.
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #ifndef BNXT_DEVLINK_H
11*4882a593Smuzhiyun #define BNXT_DEVLINK_H
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun /* Struct to hold housekeeping info needed by devlink interface */
14*4882a593Smuzhiyun struct bnxt_dl {
15*4882a593Smuzhiyun 	struct bnxt *bp;	/* back ptr to the controlling dev */
16*4882a593Smuzhiyun };
17*4882a593Smuzhiyun 
bnxt_get_bp_from_dl(struct devlink * dl)18*4882a593Smuzhiyun static inline struct bnxt *bnxt_get_bp_from_dl(struct devlink *dl)
19*4882a593Smuzhiyun {
20*4882a593Smuzhiyun 	return ((struct bnxt_dl *)devlink_priv(dl))->bp;
21*4882a593Smuzhiyun }
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun /* To clear devlink pointer from bp, pass NULL dl */
bnxt_link_bp_to_dl(struct bnxt * bp,struct devlink * dl)24*4882a593Smuzhiyun static inline void bnxt_link_bp_to_dl(struct bnxt *bp, struct devlink *dl)
25*4882a593Smuzhiyun {
26*4882a593Smuzhiyun 	bp->dl = dl;
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun 	/* add a back pointer in dl to bp */
29*4882a593Smuzhiyun 	if (dl) {
30*4882a593Smuzhiyun 		struct bnxt_dl *bp_dl = devlink_priv(dl);
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun 		bp_dl->bp = bp;
33*4882a593Smuzhiyun 	}
34*4882a593Smuzhiyun }
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun #define NVM_OFF_MSIX_VEC_PER_PF_MAX	108
37*4882a593Smuzhiyun #define NVM_OFF_MSIX_VEC_PER_PF_MIN	114
38*4882a593Smuzhiyun #define NVM_OFF_IGNORE_ARI		164
39*4882a593Smuzhiyun #define NVM_OFF_DIS_GRE_VER_CHECK	171
40*4882a593Smuzhiyun #define NVM_OFF_ENABLE_SRIOV		401
41*4882a593Smuzhiyun #define NVM_OFF_NVM_CFG_VER		602
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun #define BNXT_NVM_CFG_VER_BITS		24
44*4882a593Smuzhiyun #define BNXT_NVM_CFG_VER_BYTES		4
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun #define BNXT_MSIX_VEC_MAX	512
47*4882a593Smuzhiyun #define BNXT_MSIX_VEC_MIN_MAX	128
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun enum bnxt_nvm_dir_type {
50*4882a593Smuzhiyun 	BNXT_NVM_SHARED_CFG = 40,
51*4882a593Smuzhiyun 	BNXT_NVM_PORT_CFG,
52*4882a593Smuzhiyun 	BNXT_NVM_FUNC_CFG,
53*4882a593Smuzhiyun };
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun struct bnxt_dl_nvm_param {
56*4882a593Smuzhiyun 	u16 id;
57*4882a593Smuzhiyun 	u16 offset;
58*4882a593Smuzhiyun 	u16 dir_type;
59*4882a593Smuzhiyun 	u16 nvm_num_bits;
60*4882a593Smuzhiyun 	u8 dl_num_bytes;
61*4882a593Smuzhiyun };
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun enum bnxt_dl_version_type {
64*4882a593Smuzhiyun 	BNXT_VERSION_FIXED,
65*4882a593Smuzhiyun 	BNXT_VERSION_RUNNING,
66*4882a593Smuzhiyun 	BNXT_VERSION_STORED,
67*4882a593Smuzhiyun };
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun void bnxt_devlink_health_report(struct bnxt *bp, unsigned long event);
70*4882a593Smuzhiyun void bnxt_dl_health_status_update(struct bnxt *bp, bool healthy);
71*4882a593Smuzhiyun void bnxt_dl_health_recovery_done(struct bnxt *bp);
72*4882a593Smuzhiyun void bnxt_dl_fw_reporters_create(struct bnxt *bp);
73*4882a593Smuzhiyun void bnxt_dl_fw_reporters_destroy(struct bnxt *bp, bool all);
74*4882a593Smuzhiyun int bnxt_dl_register(struct bnxt *bp);
75*4882a593Smuzhiyun void bnxt_dl_unregister(struct bnxt *bp);
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun #endif /* BNXT_DEVLINK_H */
78