On 2017-02-25 22:51, Daniel Gonzalez Cabanelas wrote: > Currently the switch LED trigger only shows link status, but not traffic > activity by blinking > the LEDs on the AR8316/AR8327 switch. It turns out that the get_port_stats is > missing. > > I've made this patch, which works ok. But I'm not sure if there is any reason > to not implement this > function. And probably the function ar8xxx_sw_get_port_stats can be improved. > > There are a few boards with an AR8316/AR8327 switch that need this trigger, > usually on the WAN port. > As said without get_port_stats the light stays always fixed, like if there > wasn't traffic activity. We can use > the netdev trigger but then the light is always on even when the cable is > unplugged, and there isn't the > possibility of using a second LED trigger on the same port for indicating a > reduced link speed. > > diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c > b/target/linux/generic/files/drivers/net/phy/ar8216.c > index 37877d5..ffaa77e 100644 > --- a/target/linux/generic/files/drivers/net/phy/ar8216.c > +++ b/target/linux/generic/files/drivers/net/phy/ar8216.c > @@ -1001,6 +1001,41 @@ ar8xxx_sw_get_port_link(struct switch_dev *dev, int > port, > return 0; > } > > +int > +ar8xxx_sw_get_port_stats(struct switch_dev *dev, int port, > + struct switch_port_stats *stats) > +{ > + struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev); > + const struct ar8xxx_chip *chip = priv->chip; > + u64 *mib_stats, mib_data; > + const char *mib_name; > + int i; > + > + if (!ar8xxx_has_mib_counters(priv)) > + return -EOPNOTSUPP; > + > + if (port >= dev->ports) > + return -EINVAL; > + > + mutex_lock(&priv->mib_lock); > + > + ar8xxx_mib_fetch_port_stat(priv, port, false); > + > + mib_stats = &priv->mib_stats[port * chip->num_mibs]; > + for (i = 0; i < chip->num_mibs; i++) { > + mib_name = chip->mib_decs[i].name; > + mib_data = mib_stats[i]; > + if (!strcmp(mib_name, "TxByte")) > + stats->tx_bytes = mib_data; > + if (!strcmp(mib_name, "RxGoodByte")) > + stats->rx_bytes = mib_data; > + }
Fetching the entire port stats only to look up two fields seems rather excessive. Please make a function instead that will look up the register number and fetch only the relevant registers. The lookup can be further simplified by adding an enum for the mib_stats array index. - Felix _______________________________________________ Lede-dev mailing list Lede-dev@lists.infradead.org http://lists.infradead.org/mailman/listinfo/lede-dev