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