|
|
@@ -1537,23 +1537,32 @@ static int rtl83xx_vlan_del(struct dsa_switch *ds, int port,
|
|
|
|
|
|
static void rtl83xx_setup_l2_uc_entry(struct rtl838x_l2_entry *e, int port, int vid, u64 mac)
|
|
|
{
|
|
|
- e->is_ip_mc = e->is_ipv6_mc = false;
|
|
|
+ memset(e, 0, sizeof(*e));
|
|
|
+
|
|
|
+ e->type = L2_UNICAST;
|
|
|
e->valid = true;
|
|
|
+
|
|
|
e->age = 3;
|
|
|
- e->port = port,
|
|
|
- e->vid = vid;
|
|
|
+ e->is_static = true;
|
|
|
+
|
|
|
+ e->port = port;
|
|
|
+
|
|
|
+ e->rvid = e->vid = vid;
|
|
|
+ e->is_ip_mc = e->is_ipv6_mc = false;
|
|
|
u64_to_ether_addr(mac, e->mac);
|
|
|
}
|
|
|
|
|
|
-static void rtl83xx_setup_l2_mc_entry(struct rtl838x_switch_priv *priv,
|
|
|
- struct rtl838x_l2_entry *e, int vid, u64 mac, int mc_group)
|
|
|
+static void rtl83xx_setup_l2_mc_entry(struct rtl838x_l2_entry *e, int vid, u64 mac, int mc_group)
|
|
|
{
|
|
|
- e->is_ip_mc = e->is_ipv6_mc = false;
|
|
|
+ memset(e, 0, sizeof(*e));
|
|
|
+
|
|
|
+ e->type = L2_MULTICAST;
|
|
|
e->valid = true;
|
|
|
+
|
|
|
e->mc_portmask_index = mc_group;
|
|
|
- e->type = L2_MULTICAST;
|
|
|
+
|
|
|
e->rvid = e->vid = vid;
|
|
|
- pr_debug("%s: vid: %d, rvid: %d\n", __func__, e->vid, e->rvid);
|
|
|
+ e->is_ip_mc = e->is_ipv6_mc = false;
|
|
|
u64_to_ether_addr(mac, e->mac);
|
|
|
}
|
|
|
|
|
|
@@ -1768,7 +1777,7 @@ static void rtl83xx_port_mdb_add(struct dsa_switch *ds, int port,
|
|
|
err = -ENOTSUPP;
|
|
|
goto out;
|
|
|
}
|
|
|
- rtl83xx_setup_l2_mc_entry(priv, &e, vid, mac, mc_group);
|
|
|
+ rtl83xx_setup_l2_mc_entry(&e, vid, mac, mc_group);
|
|
|
priv->r->write_l2_entry_using_hash(idx >> 2, idx & 0x3, &e);
|
|
|
}
|
|
|
goto out;
|
|
|
@@ -1789,7 +1798,7 @@ static void rtl83xx_port_mdb_add(struct dsa_switch *ds, int port,
|
|
|
err = -ENOTSUPP;
|
|
|
goto out;
|
|
|
}
|
|
|
- rtl83xx_setup_l2_mc_entry(priv, &e, vid, mac, mc_group);
|
|
|
+ rtl83xx_setup_l2_mc_entry(&e, vid, mac, mc_group);
|
|
|
priv->r->write_cam(idx, &e);
|
|
|
}
|
|
|
goto out;
|