net/mlx4_core: Preparation for VF vlan protocol 802.1ad
Check device capability to support VF vlan protocol 802.1ad mode. Add vport attribute vlan protocol. Init vport vlan protocol by default to 802.1Q. Add update QP support for VF vlan protocol 802.1ad. Add func capability vlan_offload_disable to disable all vlan HW acceleration on VF while the VF is set to VF vlan protocol 802.1ad mode. No change in VF vlan protocol 802.1Q (VST) mode. Signed-off-by: Moshe Shemesh <moshe@mellanox.com> Signed-off-by: Tariq Toukan <tariqt@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
c9cc599a96
commit
7c3d21c815
@@ -1851,6 +1851,7 @@ static int mlx4_master_immediate_activate_vlan_qos(struct mlx4_priv *priv,
|
||||
|
||||
if (vp_oper->state.default_vlan == vp_admin->default_vlan &&
|
||||
vp_oper->state.default_qos == vp_admin->default_qos &&
|
||||
vp_oper->state.vlan_proto == vp_admin->vlan_proto &&
|
||||
vp_oper->state.link_state == vp_admin->link_state &&
|
||||
vp_oper->state.qos_vport == vp_admin->qos_vport)
|
||||
return 0;
|
||||
@@ -1909,6 +1910,7 @@ static int mlx4_master_immediate_activate_vlan_qos(struct mlx4_priv *priv,
|
||||
|
||||
vp_oper->state.default_vlan = vp_admin->default_vlan;
|
||||
vp_oper->state.default_qos = vp_admin->default_qos;
|
||||
vp_oper->state.vlan_proto = vp_admin->vlan_proto;
|
||||
vp_oper->state.link_state = vp_admin->link_state;
|
||||
vp_oper->state.qos_vport = vp_admin->qos_vport;
|
||||
|
||||
@@ -1922,6 +1924,7 @@ static int mlx4_master_immediate_activate_vlan_qos(struct mlx4_priv *priv,
|
||||
work->qos_vport = vp_oper->state.qos_vport;
|
||||
work->vlan_id = vp_oper->state.default_vlan;
|
||||
work->vlan_ix = vp_oper->vlan_idx;
|
||||
work->vlan_proto = vp_oper->state.vlan_proto;
|
||||
work->priv = priv;
|
||||
INIT_WORK(&work->work, mlx4_vf_immed_vlan_work_handler);
|
||||
queue_work(priv->mfunc.master.comm_wq, &work->work);
|
||||
@@ -2012,6 +2015,8 @@ static int mlx4_master_activate_admin_state(struct mlx4_priv *priv, int slave)
|
||||
vp_admin->default_vlan, &(vp_oper->vlan_idx));
|
||||
if (err) {
|
||||
vp_oper->vlan_idx = NO_INDX;
|
||||
vp_oper->state.default_vlan = MLX4_VGT;
|
||||
vp_oper->state.vlan_proto = htons(ETH_P_8021Q);
|
||||
mlx4_warn(&priv->dev,
|
||||
"No vlan resources slave %d, port %d\n",
|
||||
slave, port);
|
||||
@@ -2388,6 +2393,8 @@ int mlx4_multi_func_init(struct mlx4_dev *dev)
|
||||
admin_vport->qos_vport =
|
||||
MLX4_VPP_DEFAULT_VPORT;
|
||||
oper_vport->qos_vport = MLX4_VPP_DEFAULT_VPORT;
|
||||
admin_vport->vlan_proto = htons(ETH_P_8021Q);
|
||||
oper_vport->vlan_proto = htons(ETH_P_8021Q);
|
||||
vf_oper->vport[port].vlan_idx = NO_INDX;
|
||||
vf_oper->vport[port].mac_idx = NO_INDX;
|
||||
mlx4_set_random_admin_guid(dev, i, port);
|
||||
|
Reference in New Issue
Block a user