net: dsa: Hook {get,set}_rxnfc ethtool operations
In preparation for adding support for CFP/TCAMP in the bcm_sf2 driver add the plumbing to call into driver specific {get,set}_rxnfc operations. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
40be0dda07
commit
bf9f26485d
|
@ -377,6 +377,14 @@ struct dsa_switch_ops {
|
||||||
int (*port_mdb_dump)(struct dsa_switch *ds, int port,
|
int (*port_mdb_dump)(struct dsa_switch *ds, int port,
|
||||||
struct switchdev_obj_port_mdb *mdb,
|
struct switchdev_obj_port_mdb *mdb,
|
||||||
int (*cb)(struct switchdev_obj *obj));
|
int (*cb)(struct switchdev_obj *obj));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RXNFC
|
||||||
|
*/
|
||||||
|
int (*get_rxnfc)(struct dsa_switch *ds, int port,
|
||||||
|
struct ethtool_rxnfc *nfc, u32 *rule_locs);
|
||||||
|
int (*set_rxnfc)(struct dsa_switch *ds, int port,
|
||||||
|
struct ethtool_rxnfc *nfc);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct dsa_switch_driver {
|
struct dsa_switch_driver {
|
||||||
|
|
|
@ -1002,6 +1002,30 @@ void dsa_cpu_port_ethtool_init(struct ethtool_ops *ops)
|
||||||
ops->get_strings = dsa_cpu_port_get_strings;
|
ops->get_strings = dsa_cpu_port_get_strings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int dsa_slave_get_rxnfc(struct net_device *dev,
|
||||||
|
struct ethtool_rxnfc *nfc, u32 *rule_locs)
|
||||||
|
{
|
||||||
|
struct dsa_slave_priv *p = netdev_priv(dev);
|
||||||
|
struct dsa_switch *ds = p->dp->ds;
|
||||||
|
|
||||||
|
if (!ds->ops->get_rxnfc)
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
|
return ds->ops->get_rxnfc(ds, p->dp->index, nfc, rule_locs);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int dsa_slave_set_rxnfc(struct net_device *dev,
|
||||||
|
struct ethtool_rxnfc *nfc)
|
||||||
|
{
|
||||||
|
struct dsa_slave_priv *p = netdev_priv(dev);
|
||||||
|
struct dsa_switch *ds = p->dp->ds;
|
||||||
|
|
||||||
|
if (!ds->ops->set_rxnfc)
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
|
return ds->ops->set_rxnfc(ds, p->dp->index, nfc);
|
||||||
|
}
|
||||||
|
|
||||||
static const struct ethtool_ops dsa_slave_ethtool_ops = {
|
static const struct ethtool_ops dsa_slave_ethtool_ops = {
|
||||||
.get_drvinfo = dsa_slave_get_drvinfo,
|
.get_drvinfo = dsa_slave_get_drvinfo,
|
||||||
.get_regs_len = dsa_slave_get_regs_len,
|
.get_regs_len = dsa_slave_get_regs_len,
|
||||||
|
@ -1020,6 +1044,8 @@ static const struct ethtool_ops dsa_slave_ethtool_ops = {
|
||||||
.get_eee = dsa_slave_get_eee,
|
.get_eee = dsa_slave_get_eee,
|
||||||
.get_link_ksettings = dsa_slave_get_link_ksettings,
|
.get_link_ksettings = dsa_slave_get_link_ksettings,
|
||||||
.set_link_ksettings = dsa_slave_set_link_ksettings,
|
.set_link_ksettings = dsa_slave_set_link_ksettings,
|
||||||
|
.get_rxnfc = dsa_slave_get_rxnfc,
|
||||||
|
.set_rxnfc = dsa_slave_set_rxnfc,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct net_device_ops dsa_slave_netdev_ops = {
|
static const struct net_device_ops dsa_slave_netdev_ops = {
|
||||||
|
|
Loading…
Reference in New Issue