net/bnxt: support VLAN pvid
This patch adds code to support vlan_pvid_set dev_op Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
This commit is contained in:
parent
2fc201884b
commit
3e12fdb78e
@ -67,6 +67,7 @@ struct bnxt_child_vf_info {
|
|||||||
uint32_t func_cfg_flags;
|
uint32_t func_cfg_flags;
|
||||||
uint32_t l2_rx_mask;
|
uint32_t l2_rx_mask;
|
||||||
uint16_t fid;
|
uint16_t fid;
|
||||||
|
uint16_t dflt_vlan;
|
||||||
bool random_mac;
|
bool random_mac;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1477,6 +1477,26 @@ static int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev, uint16_t new_mtu)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
bnxt_vlan_pvid_set_op(struct rte_eth_dev *dev, uint16_t pvid, int on)
|
||||||
|
{
|
||||||
|
struct bnxt *bp = (struct bnxt *)dev->data->dev_private;
|
||||||
|
uint16_t vlan = bp->vlan;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
if (BNXT_NPAR_PF(bp) || BNXT_VF(bp)) {
|
||||||
|
RTE_LOG(ERR, PMD,
|
||||||
|
"PVID cannot be modified for this function\n");
|
||||||
|
return -ENOTSUP;
|
||||||
|
}
|
||||||
|
bp->vlan = on ? pvid : 0;
|
||||||
|
|
||||||
|
rc = bnxt_hwrm_set_default_vlan(bp, 0, 0);
|
||||||
|
if (rc)
|
||||||
|
bp->vlan = vlan;
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialization
|
* Initialization
|
||||||
*/
|
*/
|
||||||
@ -1512,6 +1532,7 @@ static const struct eth_dev_ops bnxt_dev_ops = {
|
|||||||
.udp_tunnel_port_del = bnxt_udp_tunnel_port_del_op,
|
.udp_tunnel_port_del = bnxt_udp_tunnel_port_del_op,
|
||||||
.vlan_filter_set = bnxt_vlan_filter_set_op,
|
.vlan_filter_set = bnxt_vlan_filter_set_op,
|
||||||
.vlan_offload_set = bnxt_vlan_offload_set_op,
|
.vlan_offload_set = bnxt_vlan_offload_set_op,
|
||||||
|
.vlan_pvid_set = bnxt_vlan_pvid_set_op,
|
||||||
.mtu_set = bnxt_mtu_set_op,
|
.mtu_set = bnxt_mtu_set_op,
|
||||||
.mac_addr_set = bnxt_set_default_mac_addr_op,
|
.mac_addr_set = bnxt_set_default_mac_addr_op,
|
||||||
.xstats_get = bnxt_dev_xstats_get_op,
|
.xstats_get = bnxt_dev_xstats_get_op,
|
||||||
|
@ -2256,6 +2256,37 @@ int bnxt_hwrm_vf_func_cfg_def_cp(struct bnxt *bp)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int bnxt_hwrm_set_default_vlan(struct bnxt *bp, int vf, uint8_t is_vf)
|
||||||
|
{
|
||||||
|
struct hwrm_func_cfg_input req = {0};
|
||||||
|
struct hwrm_func_cfg_output *resp = bp->hwrm_cmd_resp_addr;
|
||||||
|
uint16_t dflt_vlan, fid;
|
||||||
|
uint32_t func_cfg_flags;
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
|
HWRM_PREP(req, FUNC_CFG, -1, resp);
|
||||||
|
|
||||||
|
if (is_vf) {
|
||||||
|
dflt_vlan = bp->pf.vf_info[vf].dflt_vlan;
|
||||||
|
fid = bp->pf.vf_info[vf].fid;
|
||||||
|
func_cfg_flags = bp->pf.vf_info[vf].func_cfg_flags;
|
||||||
|
} else {
|
||||||
|
fid = rte_cpu_to_le_16(0xffff);
|
||||||
|
func_cfg_flags = bp->pf.func_cfg_flags;
|
||||||
|
dflt_vlan = bp->vlan;
|
||||||
|
}
|
||||||
|
|
||||||
|
req.flags = rte_cpu_to_le_32(func_cfg_flags);
|
||||||
|
req.fid = rte_cpu_to_le_16(fid);
|
||||||
|
req.enables |= rte_cpu_to_le_32(HWRM_FUNC_CFG_INPUT_ENABLES_DFLT_VLAN);
|
||||||
|
req.dflt_vlan = rte_cpu_to_le_16(dflt_vlan);
|
||||||
|
|
||||||
|
rc = bnxt_hwrm_send_message(bp, &req, sizeof(req));
|
||||||
|
HWRM_CHECK_RESULT;
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
int bnxt_hwrm_reject_fwd_resp(struct bnxt *bp, uint16_t target_id,
|
int bnxt_hwrm_reject_fwd_resp(struct bnxt *bp, uint16_t target_id,
|
||||||
void *encaped, size_t ec_size)
|
void *encaped, size_t ec_size)
|
||||||
{
|
{
|
||||||
|
@ -123,6 +123,7 @@ int bnxt_hwrm_tunnel_dst_port_alloc(struct bnxt *bp, uint16_t port,
|
|||||||
int bnxt_hwrm_tunnel_dst_port_free(struct bnxt *bp, uint16_t port,
|
int bnxt_hwrm_tunnel_dst_port_free(struct bnxt *bp, uint16_t port,
|
||||||
uint8_t tunnel_type);
|
uint8_t tunnel_type);
|
||||||
void bnxt_free_tunnel_ports(struct bnxt *bp);
|
void bnxt_free_tunnel_ports(struct bnxt *bp);
|
||||||
|
int bnxt_hwrm_set_default_vlan(struct bnxt *bp, int vf, uint8_t is_vf);
|
||||||
int bnxt_hwrm_port_qstats(struct bnxt *bp);
|
int bnxt_hwrm_port_qstats(struct bnxt *bp);
|
||||||
int bnxt_hwrm_port_clr_stats(struct bnxt *bp);
|
int bnxt_hwrm_port_clr_stats(struct bnxt *bp);
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user