Commit 96c6f337 authored by Oleksij Rempel's avatar Oleksij Rempel Committed by David S. Miller

net: dsa: add support for DCB get/set apptrust configuration

Add DCB support to get/set trust configuration for different packet
priority information sources. Some switch allow to chose different
source of packet priority classification. For example on KSZ switches it
is possible to configure VLAN PCP and/or DSCP sources.
Signed-off-by: default avatarOleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: default avatarFlorian Fainelli <florian.fainelli@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 09ca9940
...@@ -955,6 +955,10 @@ struct dsa_switch_ops { ...@@ -955,6 +955,10 @@ struct dsa_switch_ops {
u8 prio); u8 prio);
int (*port_del_dscp_prio)(struct dsa_switch *ds, int port, u8 dscp, int (*port_del_dscp_prio)(struct dsa_switch *ds, int port, u8 dscp,
u8 prio); u8 prio);
int (*port_set_apptrust)(struct dsa_switch *ds, int port,
const u8 *sel, int nsel);
int (*port_get_apptrust)(struct dsa_switch *ds, int port, u8 *sel,
int *nsel);
/* /*
* Suspend and resume * Suspend and resume
......
...@@ -2136,6 +2136,32 @@ int dsa_user_change_mtu(struct net_device *dev, int new_mtu) ...@@ -2136,6 +2136,32 @@ int dsa_user_change_mtu(struct net_device *dev, int new_mtu)
return err; return err;
} }
static int __maybe_unused
dsa_user_dcbnl_set_apptrust(struct net_device *dev, u8 *sel, int nsel)
{
struct dsa_port *dp = dsa_user_to_port(dev);
struct dsa_switch *ds = dp->ds;
int port = dp->index;
if (!ds->ops->port_set_apptrust)
return -EOPNOTSUPP;
return ds->ops->port_set_apptrust(ds, port, sel, nsel);
}
static int __maybe_unused
dsa_user_dcbnl_get_apptrust(struct net_device *dev, u8 *sel, int *nsel)
{
struct dsa_port *dp = dsa_user_to_port(dev);
struct dsa_switch *ds = dp->ds;
int port = dp->index;
if (!ds->ops->port_get_apptrust)
return -EOPNOTSUPP;
return ds->ops->port_get_apptrust(ds, port, sel, nsel);
}
static int __maybe_unused static int __maybe_unused
dsa_user_dcbnl_set_default_prio(struct net_device *dev, struct dcb_app *app) dsa_user_dcbnl_set_default_prio(struct net_device *dev, struct dcb_app *app)
{ {
...@@ -2376,6 +2402,8 @@ static const struct ethtool_ops dsa_user_ethtool_ops = { ...@@ -2376,6 +2402,8 @@ static const struct ethtool_ops dsa_user_ethtool_ops = {
static const struct dcbnl_rtnl_ops __maybe_unused dsa_user_dcbnl_ops = { static const struct dcbnl_rtnl_ops __maybe_unused dsa_user_dcbnl_ops = {
.ieee_setapp = dsa_user_dcbnl_ieee_setapp, .ieee_setapp = dsa_user_dcbnl_ieee_setapp,
.ieee_delapp = dsa_user_dcbnl_ieee_delapp, .ieee_delapp = dsa_user_dcbnl_ieee_delapp,
.dcbnl_setapptrust = dsa_user_dcbnl_set_apptrust,
.dcbnl_getapptrust = dsa_user_dcbnl_get_apptrust,
}; };
static void dsa_user_get_stats64(struct net_device *dev, static void dsa_user_get_stats64(struct net_device *dev,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment