1 /* Broadcom NetXtreme-C/E network driver.
2  *
3  * Copyright (c) 2016-2017 Broadcom Limited
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation.
8  */
9 
10 #ifndef BNXT_VFR_H
11 #define BNXT_VFR_H
12 
13 #ifdef CONFIG_BNXT_SRIOV
14 
15 #define	MAX_CFA_CODE			65536
16 
17 /* Struct to hold housekeeping info needed by devlink interface */
18 struct bnxt_dl {
19 	struct bnxt *bp;	/* back ptr to the controlling dev */
20 };
21 
22 static inline struct bnxt *bnxt_get_bp_from_dl(struct devlink *dl)
23 {
24 	return ((struct bnxt_dl *)devlink_priv(dl))->bp;
25 }
26 
27 /* To clear devlink pointer from bp, pass NULL dl */
28 static inline void bnxt_link_bp_to_dl(struct bnxt *bp, struct devlink *dl)
29 {
30 	bp->dl = dl;
31 
32 	/* add a back pointer in dl to bp */
33 	if (dl) {
34 		struct bnxt_dl *bp_dl = devlink_priv(dl);
35 
36 		bp_dl->bp = bp;
37 	}
38 }
39 
40 int bnxt_dl_register(struct bnxt *bp);
41 void bnxt_dl_unregister(struct bnxt *bp);
42 void bnxt_vf_reps_destroy(struct bnxt *bp);
43 void bnxt_vf_reps_close(struct bnxt *bp);
44 void bnxt_vf_reps_open(struct bnxt *bp);
45 void bnxt_vf_rep_rx(struct bnxt *bp, struct sk_buff *skb);
46 struct net_device *bnxt_get_vf_rep(struct bnxt *bp, u16 cfa_code);
47 
48 static inline u16 bnxt_vf_rep_get_fid(struct net_device *dev)
49 {
50 	struct bnxt_vf_rep *vf_rep = netdev_priv(dev);
51 	struct bnxt *bp = vf_rep->bp;
52 
53 	return bp->pf.vf[vf_rep->vf_idx].fw_fid;
54 }
55 
56 #else
57 
58 static inline int bnxt_dl_register(struct bnxt *bp)
59 {
60 	return 0;
61 }
62 
63 static inline void bnxt_dl_unregister(struct bnxt *bp)
64 {
65 }
66 
67 static inline void bnxt_vf_reps_close(struct bnxt *bp)
68 {
69 }
70 
71 static inline void bnxt_vf_reps_open(struct bnxt *bp)
72 {
73 }
74 
75 static inline void bnxt_vf_rep_rx(struct bnxt *bp, struct sk_buff *skb)
76 {
77 }
78 
79 static inline struct net_device *bnxt_get_vf_rep(struct bnxt *bp, u16 cfa_code)
80 {
81 	return NULL;
82 }
83 
84 static inline u16 bnxt_vf_rep_get_fid(struct net_device *dev)
85 {
86 	return 0;
87 }
88 #endif /* CONFIG_BNXT_SRIOV */
89 #endif /* BNXT_VFR_H */
90