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