> 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
Hi Felix. Could this function be valid?. I'm afraid I cannot make anything more sophisticated ar8xxx_sw_get_port_stats(struct switch_dev *dev, int port, struct switch_port_stats *stats) { struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev); unsigned int base; unsigned int rx_offset, tx_offset; if (port >= dev->ports) return -EINVAL; base = priv->chip->reg_port_stats_start + priv->chip->reg_port_stats_length * port; if (priv->chip->num_mibs == ARRAY_SIZE(ar8236_mibs)){ rx_offset = AR8236_STATS_RXGOODBYTE; tx_offset = AR8236_STATS_TXBYTE; } else if (priv->chip->num_mibs == ARRAY_SIZE(ar8216_mibs)){ rx_offset = AR8216_STATS_RXGOODBYTE; tx_offset = AR8216_STATS_TXBYTE; } stats->rx_bytes = ar8xxx_read(priv, base + rx_offset); stats->tx_bytes = ar8xxx_read(priv, base + tx_offset); return 0; } Also tested and working ok. Regards Daniel _______________________________________________ Lede-dev mailing list Lede-dev@lists.infradead.org http://lists.infradead.org/mailman/listinfo/lede-dev