xref: /freebsd/sys/dev/bnxt/bnxt_en/bnxt_sriov.h (revision 7c450d1127c7f08361f848c0ac57189910da8d3b)
1*f2f831b2SChandrakanth Patil #ifndef _BNXT_SRIOV_H_
2*f2f831b2SChandrakanth Patil #define _BNXT_SRIOV_H_
3*f2f831b2SChandrakanth Patil 
4*f2f831b2SChandrakanth Patil #include <sys/iov_schema.h>
5*f2f831b2SChandrakanth Patil #include <linux/pci.h>
6*f2f831b2SChandrakanth Patil #include <dev/pci/pci_iov.h>
7*f2f831b2SChandrakanth Patil 
8*f2f831b2SChandrakanth Patil #include "opt_global.h"
9*f2f831b2SChandrakanth Patil #include "bnxt.h"
10*f2f831b2SChandrakanth Patil 
11*f2f831b2SChandrakanth Patil #ifndef PCI_IOV
12*f2f831b2SChandrakanth Patil #define PCI_IOV 1
13*f2f831b2SChandrakanth Patil #endif
14*f2f831b2SChandrakanth Patil 
15*f2f831b2SChandrakanth Patil /* macro definations */
16*f2f831b2SChandrakanth Patil 
17*f2f831b2SChandrakanth Patil #define BNXT_MAX_VFS 4
18*f2f831b2SChandrakanth Patil #define BNXT_HWRM_REQ_MAX_SIZE	128
19*f2f831b2SChandrakanth Patil #define BNXT_MAX_VF_CMD_FWD_PAGES  4
20*f2f831b2SChandrakanth Patil #define BNXT_VF_QOS		0x1
21*f2f831b2SChandrakanth Patil #define BNXT_VF_SPOOFCHK	0x2
22*f2f831b2SChandrakanth Patil #define BNXT_VF_LINK_FORCED	0x4
23*f2f831b2SChandrakanth Patil #define BNXT_VF_LINK_UP		0x8
24*f2f831b2SChandrakanth Patil #define BNXT_VF_TRUST		0x10
25*f2f831b2SChandrakanth Patil #define BNXT_VLAN_VID_MASK	0x0fff
26*f2f831b2SChandrakanth Patil 
27*f2f831b2SChandrakanth Patil #define BNXT_EXEC_FWD_RESP_SIZE_ERR(n)					\
28*f2f831b2SChandrakanth Patil 	((offsetof(struct hwrm_exec_fwd_resp_input, encap_request) + n) >\
29*f2f831b2SChandrakanth Patil 	 offsetof(struct hwrm_exec_fwd_resp_input, encap_resp_target_id))
30*f2f831b2SChandrakanth Patil 
31*f2f831b2SChandrakanth Patil #define BNXT_VF_RESV_STRATEGY_MAXIMAL   0
32*f2f831b2SChandrakanth Patil #define BNXT_VF_RESV_STRATEGY_MINIMAL   1
33*f2f831b2SChandrakanth Patil #define BNXT_VF_RESV_STRATEGY_MINIMAL_STATIC    2
34*f2f831b2SChandrakanth Patil #define FUNC_RESOURCE_QCAPS_RESP_FLAGS_MIN_GUARANTEED     0x1UL
35*f2f831b2SChandrakanth Patil 
36*f2f831b2SChandrakanth Patil #define BNXT_SRIOV_LOCK_INIT(sc, _name)	\
37*f2f831b2SChandrakanth Patil 	mtx_init(&(sc)->sriov_lock, _name, "sriov_lock", MTX_DEF | MTX_NOWITNESS)
38*f2f831b2SChandrakanth Patil #define BNXT_SRIOV_LOCK(sc)		mtx_lock(&(sc)->sriov_lock)
39*f2f831b2SChandrakanth Patil #define BNXT_SRIOV_UNLOCK(sc)		mtx_unlock(&(sc)->sriov_lock)
40*f2f831b2SChandrakanth Patil #define BNXT_SRIOV_LOCK_DESTROY(sc)				\
41*f2f831b2SChandrakanth Patil 	do {							\
42*f2f831b2SChandrakanth Patil 		if (mtx_initialized(&(sc)->sriov_lock))		\
43*f2f831b2SChandrakanth Patil 			mtx_destroy(&(sc)->sriov_lock);		\
44*f2f831b2SChandrakanth Patil } while (0)
45*f2f831b2SChandrakanth Patil 
46*f2f831b2SChandrakanth Patil 
47*f2f831b2SChandrakanth Patil /* structure declartions/definations */
48*f2f831b2SChandrakanth Patil 
49*f2f831b2SChandrakanth Patil struct bnxt_softc;
50*f2f831b2SChandrakanth Patil 
51*f2f831b2SChandrakanth Patil struct bnxt_vf_info {
52*f2f831b2SChandrakanth Patil 	uint8_t		vfnum;
53*f2f831b2SChandrakanth Patil 	uint16_t	fw_fid;
54*f2f831b2SChandrakanth Patil 	uint8_t		mac_addr[ETHER_ADDR_LEN];
55*f2f831b2SChandrakanth Patil 	uint8_t		vf_mac_addr[ETHER_ADDR_LEN];
56*f2f831b2SChandrakanth Patil 	uint32_t	vlan;
57*f2f831b2SChandrakanth Patil 	uint32_t	flags;
58*f2f831b2SChandrakanth Patil 	uint32_t	func_qcfg_flags;
59*f2f831b2SChandrakanth Patil 	uint32_t	min_tx_rate;
60*f2f831b2SChandrakanth Patil 	uint32_t	max_tx_rate;
61*f2f831b2SChandrakanth Patil 	uint16_t	min_tx_rings;
62*f2f831b2SChandrakanth Patil 	uint16_t	max_tx_rings;
63*f2f831b2SChandrakanth Patil 	uint16_t	min_rx_rings;
64*f2f831b2SChandrakanth Patil 	uint16_t	max_rx_rings;
65*f2f831b2SChandrakanth Patil 	uint16_t	min_cp_rings;
66*f2f831b2SChandrakanth Patil 	uint16_t	max_cp_rings;
67*f2f831b2SChandrakanth Patil 	uint16_t	min_rsscos_ctxs;
68*f2f831b2SChandrakanth Patil 	uint16_t	max_rsscos_ctxs;
69*f2f831b2SChandrakanth Patil 	uint16_t	min_stat_ctxs;
70*f2f831b2SChandrakanth Patil 	uint16_t	max_stat_ctxs;
71*f2f831b2SChandrakanth Patil 	uint16_t	min_ring_grps;
72*f2f831b2SChandrakanth Patil 	uint16_t	max_hw_ring_grps;
73*f2f831b2SChandrakanth Patil 	uint16_t	min_vnics;
74*f2f831b2SChandrakanth Patil 	uint16_t	max_vnics;
75*f2f831b2SChandrakanth Patil 	uint16_t	min_irqs;
76*f2f831b2SChandrakanth Patil 	uint16_t	max_irqs;
77*f2f831b2SChandrakanth Patil 	uint16_t	min_l2_ctxs;
78*f2f831b2SChandrakanth Patil 	uint16_t	max_l2_ctxs;
79*f2f831b2SChandrakanth Patil 	void		*hwrm_cmd_req_addr;
80*f2f831b2SChandrakanth Patil 	bus_addr_t	hwrm_cmd_req_dma_addr;
81*f2f831b2SChandrakanth Patil 	struct		iflib_dma_info	hwrm_cmd_req;
82*f2f831b2SChandrakanth Patil 	uint16_t	trusted;
83*f2f831b2SChandrakanth Patil 	bool		spoofchk;
84*f2f831b2SChandrakanth Patil };
85*f2f831b2SChandrakanth Patil 
86*f2f831b2SChandrakanth Patil struct bnxt_resc_map {
87*f2f831b2SChandrakanth Patil 	uint16_t *min_field;
88*f2f831b2SChandrakanth Patil 	uint16_t *max_field;
89*f2f831b2SChandrakanth Patil 	uint16_t hw_max;
90*f2f831b2SChandrakanth Patil 	uint16_t pf_alloc;
91*f2f831b2SChandrakanth Patil };
92*f2f831b2SChandrakanth Patil 
93*f2f831b2SChandrakanth Patil /* function prototypes */
94*f2f831b2SChandrakanth Patil 
95*f2f831b2SChandrakanth Patil void bnxt_sriov_attach(struct bnxt_softc *softc);
96*f2f831b2SChandrakanth Patil int bnxt_iov_init(if_ctx_t ctx, uint16_t num_vfs, const nvlist_t *params);
97*f2f831b2SChandrakanth Patil void bnxt_iov_uninit(if_ctx_t ctx);
98*f2f831b2SChandrakanth Patil int bnxt_iov_vf_add(if_ctx_t ctx, uint16_t vfnum, const nvlist_t *params);
99*f2f831b2SChandrakanth Patil int bnxt_hwrm_func_vf_resource_free(struct bnxt_softc *softc, int num_vfs);
100*f2f831b2SChandrakanth Patil void bnxt_free_vf_resources(struct bnxt_softc *softc);
101*f2f831b2SChandrakanth Patil int bnxt_create_trusted_vf_sysctls(struct bnxt_softc *softc, uint16_t num_vfs);
102*f2f831b2SChandrakanth Patil int bnxt_create_spoofchk_vf_sysctls(struct bnxt_softc *softc, uint16_t num_vfs);
103*f2f831b2SChandrakanth Patil bool bnxt_is_trusted_vf(struct bnxt_softc *bp, struct bnxt_vf_info *vf);
104*f2f831b2SChandrakanth Patil void bnxt_hwrm_exec_fwd_req(struct bnxt_softc *bp);
105*f2f831b2SChandrakanth Patil void bnxt_destroy_trusted_vf_sysctls(struct bnxt_softc *softc);
106*f2f831b2SChandrakanth Patil int bnxt_set_vf_trust(struct bnxt_softc *softc, int vf_id, bool trusted);
107*f2f831b2SChandrakanth Patil int bnxt_approve_mac(struct bnxt_softc *sc);
108*f2f831b2SChandrakanth Patil void bnxt_update_vf_mac(struct bnxt_softc *sc);
109*f2f831b2SChandrakanth Patil bool bnxt_promisc_ok(struct bnxt_softc *softc);
110*f2f831b2SChandrakanth Patil int bnxt_set_vf_spoofchk(struct bnxt_softc *sc, int vf_id, bool enable);
111*f2f831b2SChandrakanth Patil int bnxt_cfg_hw_sriov(struct bnxt_softc *softc, uint16_t *num_vfs, bool reset);
112*f2f831b2SChandrakanth Patil void bnxt_reenable_sriov(struct bnxt_softc *bp);
113*f2f831b2SChandrakanth Patil 
114*f2f831b2SChandrakanth Patil 
115*f2f831b2SChandrakanth Patil #endif /* _BNXT_SRIOV_H_ */
116