|
@@ -3553,7 +3553,7 @@ static void ixgbe_configure_virtualization(struct ixgbe_adapter *adapter)
|
|
|
IXGBE_WRITE_REG(hw, IXGBE_VFRE(reg_offset ^ 1), reg_offset - 1);
|
|
|
IXGBE_WRITE_REG(hw, IXGBE_VFTE(reg_offset), (~0) << vf_shift);
|
|
|
IXGBE_WRITE_REG(hw, IXGBE_VFTE(reg_offset ^ 1), reg_offset - 1);
|
|
|
- if (adapter->flags2 & IXGBE_FLAG2_BRIDGE_MODE_VEB)
|
|
|
+ if (adapter->bridge_mode == BRIDGE_MODE_VEB)
|
|
|
IXGBE_WRITE_REG(hw, IXGBE_PFDTXGSWC, IXGBE_PFDTXGSWC_VT_LBEN);
|
|
|
|
|
|
/* Map PF MAC address in RAR Entry 0 to first pool following VFs */
|
|
@@ -7886,7 +7886,6 @@ static int ixgbe_ndo_bridge_setlink(struct net_device *dev,
|
|
|
|
|
|
nla_for_each_nested(attr, br_spec, rem) {
|
|
|
__u16 mode;
|
|
|
- u32 reg = 0;
|
|
|
|
|
|
if (nla_type(attr) != IFLA_BRIDGE_MODE)
|
|
|
continue;
|
|
@@ -7895,19 +7894,24 @@ static int ixgbe_ndo_bridge_setlink(struct net_device *dev,
|
|
|
return -EINVAL;
|
|
|
|
|
|
mode = nla_get_u16(attr);
|
|
|
- if (mode == BRIDGE_MODE_VEPA) {
|
|
|
- reg = 0;
|
|
|
- adapter->flags2 &= ~IXGBE_FLAG2_BRIDGE_MODE_VEB;
|
|
|
- } else if (mode == BRIDGE_MODE_VEB) {
|
|
|
- reg = IXGBE_PFDTXGSWC_VT_LBEN;
|
|
|
- adapter->flags2 |= IXGBE_FLAG2_BRIDGE_MODE_VEB;
|
|
|
- } else
|
|
|
+ switch (mode) {
|
|
|
+ case BRIDGE_MODE_VEPA:
|
|
|
+ IXGBE_WRITE_REG(&adapter->hw, IXGBE_PFDTXGSWC, 0);
|
|
|
+ break;
|
|
|
+ case BRIDGE_MODE_VEB:
|
|
|
+ IXGBE_WRITE_REG(&adapter->hw, IXGBE_PFDTXGSWC,
|
|
|
+ IXGBE_PFDTXGSWC_VT_LBEN);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
return -EINVAL;
|
|
|
+ }
|
|
|
|
|
|
- IXGBE_WRITE_REG(&adapter->hw, IXGBE_PFDTXGSWC, reg);
|
|
|
+ adapter->bridge_mode = mode;
|
|
|
|
|
|
e_info(drv, "enabling bridge mode: %s\n",
|
|
|
mode == BRIDGE_MODE_VEPA ? "VEPA" : "VEB");
|
|
|
+
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
@@ -7918,17 +7922,12 @@ static int ixgbe_ndo_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
|
|
|
u32 filter_mask)
|
|
|
{
|
|
|
struct ixgbe_adapter *adapter = netdev_priv(dev);
|
|
|
- u16 mode;
|
|
|
|
|
|
if (!(adapter->flags & IXGBE_FLAG_SRIOV_ENABLED))
|
|
|
return 0;
|
|
|
|
|
|
- if (adapter->flags2 & IXGBE_FLAG2_BRIDGE_MODE_VEB)
|
|
|
- mode = BRIDGE_MODE_VEB;
|
|
|
- else
|
|
|
- mode = BRIDGE_MODE_VEPA;
|
|
|
-
|
|
|
- return ndo_dflt_bridge_getlink(skb, pid, seq, dev, mode, 0, 0);
|
|
|
+ return ndo_dflt_bridge_getlink(skb, pid, seq, dev,
|
|
|
+ adapter->bridge_mode, 0, 0);
|
|
|
}
|
|
|
|
|
|
static void *ixgbe_fwd_add(struct net_device *pdev, struct net_device *vdev)
|