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