> 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

Reply via email to