int     (*get_sset_count)(struct dsa_switch *ds, int port, int sset);
        void    (*get_ethtool_phy_stats)(struct dsa_switch *ds,
                                         int port, uint64_t *data);
+       void    (*get_eth_phy_stats)(struct dsa_switch *ds, int port,
+                                    struct ethtool_eth_phy_stats *phy_stats);
+       void    (*get_eth_mac_stats)(struct dsa_switch *ds, int port,
+                                    struct ethtool_eth_mac_stats *mac_stats);
+       void    (*get_eth_ctrl_stats)(struct dsa_switch *ds, int port,
+                                     struct ethtool_eth_ctrl_stats *ctrl_stats);
        void    (*get_stats64)(struct dsa_switch *ds, int port,
                                   struct rtnl_link_stats64 *s);
        void    (*self_test)(struct dsa_switch *ds, int port,
 
        return -EOPNOTSUPP;
 }
 
+static void dsa_slave_get_eth_phy_stats(struct net_device *dev,
+                                       struct ethtool_eth_phy_stats *phy_stats)
+{
+       struct dsa_port *dp = dsa_slave_to_port(dev);
+       struct dsa_switch *ds = dp->ds;
+
+       if (ds->ops->get_eth_phy_stats)
+               ds->ops->get_eth_phy_stats(ds, dp->index, phy_stats);
+}
+
+static void dsa_slave_get_eth_mac_stats(struct net_device *dev,
+                                       struct ethtool_eth_mac_stats *mac_stats)
+{
+       struct dsa_port *dp = dsa_slave_to_port(dev);
+       struct dsa_switch *ds = dp->ds;
+
+       if (ds->ops->get_eth_mac_stats)
+               ds->ops->get_eth_mac_stats(ds, dp->index, mac_stats);
+}
+
+static void
+dsa_slave_get_eth_ctrl_stats(struct net_device *dev,
+                            struct ethtool_eth_ctrl_stats *ctrl_stats)
+{
+       struct dsa_port *dp = dsa_slave_to_port(dev);
+       struct dsa_switch *ds = dp->ds;
+
+       if (ds->ops->get_eth_ctrl_stats)
+               ds->ops->get_eth_ctrl_stats(ds, dp->index, ctrl_stats);
+}
+
 static void dsa_slave_net_selftest(struct net_device *ndev,
                                   struct ethtool_test *etest, u64 *buf)
 {
        .get_strings            = dsa_slave_get_strings,
        .get_ethtool_stats      = dsa_slave_get_ethtool_stats,
        .get_sset_count         = dsa_slave_get_sset_count,
+       .get_eth_phy_stats      = dsa_slave_get_eth_phy_stats,
+       .get_eth_mac_stats      = dsa_slave_get_eth_mac_stats,
+       .get_eth_ctrl_stats     = dsa_slave_get_eth_ctrl_stats,
        .set_wol                = dsa_slave_set_wol,
        .get_wol                = dsa_slave_get_wol,
        .set_eee                = dsa_slave_set_eee,