mirror of https://gitee.com/openkylin/linux.git
net: dsa: felix: propagate the LAG offload ops towards the ocelot lib
The ocelot switch has been supporting LAG offload since its initial commit, however felix could not make use of that, due to lack of a LAG abstraction in DSA. Now that we have that, let's forward DSA's calls towards the ocelot library, who will deal with setting up the bonding. Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
a324d3d48f
commit
8fe6832e96
|
@ -569,6 +569,35 @@ static void felix_bridge_leave(struct dsa_switch *ds, int port,
|
|||
ocelot_port_bridge_leave(ocelot, port, br);
|
||||
}
|
||||
|
||||
static int felix_lag_join(struct dsa_switch *ds, int port,
|
||||
struct net_device *bond,
|
||||
struct netdev_lag_upper_info *info)
|
||||
{
|
||||
struct ocelot *ocelot = ds->priv;
|
||||
|
||||
return ocelot_port_lag_join(ocelot, port, bond, info);
|
||||
}
|
||||
|
||||
static int felix_lag_leave(struct dsa_switch *ds, int port,
|
||||
struct net_device *bond)
|
||||
{
|
||||
struct ocelot *ocelot = ds->priv;
|
||||
|
||||
ocelot_port_lag_leave(ocelot, port, bond);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int felix_lag_change(struct dsa_switch *ds, int port)
|
||||
{
|
||||
struct dsa_port *dp = dsa_to_port(ds, port);
|
||||
struct ocelot *ocelot = ds->priv;
|
||||
|
||||
ocelot_port_lag_change(ocelot, port, dp->lag_tx_enabled);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int felix_vlan_prepare(struct dsa_switch *ds, int port,
|
||||
const struct switchdev_obj_port_vlan *vlan)
|
||||
{
|
||||
|
@ -1331,6 +1360,9 @@ const struct dsa_switch_ops felix_switch_ops = {
|
|||
.port_mdb_del = felix_mdb_del,
|
||||
.port_bridge_join = felix_bridge_join,
|
||||
.port_bridge_leave = felix_bridge_leave,
|
||||
.port_lag_join = felix_lag_join,
|
||||
.port_lag_leave = felix_lag_leave,
|
||||
.port_lag_change = felix_lag_change,
|
||||
.port_stp_state_set = felix_bridge_stp_state_set,
|
||||
.port_vlan_filtering = felix_vlan_filtering,
|
||||
.port_vlan_add = felix_vlan_add,
|
||||
|
|
|
@ -109,12 +109,6 @@ int ocelot_mact_learn(struct ocelot *ocelot, int port,
|
|||
unsigned int vid, enum macaccess_entry_type type);
|
||||
int ocelot_mact_forget(struct ocelot *ocelot,
|
||||
const unsigned char mac[ETH_ALEN], unsigned int vid);
|
||||
int ocelot_port_lag_join(struct ocelot *ocelot, int port,
|
||||
struct net_device *bond,
|
||||
struct netdev_lag_upper_info *info);
|
||||
void ocelot_port_lag_leave(struct ocelot *ocelot, int port,
|
||||
struct net_device *bond);
|
||||
void ocelot_port_lag_change(struct ocelot *ocelot, int port, bool lag_tx_active);
|
||||
struct net_device *ocelot_port_to_netdev(struct ocelot *ocelot, int port);
|
||||
int ocelot_netdev_to_port(struct net_device *dev);
|
||||
|
||||
|
|
|
@ -798,6 +798,12 @@ int ocelot_port_mdb_add(struct ocelot *ocelot, int port,
|
|||
const struct switchdev_obj_port_mdb *mdb);
|
||||
int ocelot_port_mdb_del(struct ocelot *ocelot, int port,
|
||||
const struct switchdev_obj_port_mdb *mdb);
|
||||
int ocelot_port_lag_join(struct ocelot *ocelot, int port,
|
||||
struct net_device *bond,
|
||||
struct netdev_lag_upper_info *info);
|
||||
void ocelot_port_lag_leave(struct ocelot *ocelot, int port,
|
||||
struct net_device *bond);
|
||||
void ocelot_port_lag_change(struct ocelot *ocelot, int port, bool lag_tx_active);
|
||||
|
||||
int ocelot_devlink_sb_register(struct ocelot *ocelot);
|
||||
void ocelot_devlink_sb_unregister(struct ocelot *ocelot);
|
||||
|
|
Loading…
Reference in New Issue