Commit 5d283e8c authored by David Woodhouse's avatar David Woodhouse Committed by John W. Linville

libertas: Fix ethtool statistics

Fix various problems:
 - We converted MESH_ACCESS to a direct command but missed this caller.
 - We were trying to access mesh stats even on meshless firmware.
 - We should really zero the buffer if something goes wrong.
Signed-off-by: default avatarDavid Woodhouse <dwmw2@infradead.org>
Acked-by: default avatarDan Williams <dcbw@redhat.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 0d580a77
...@@ -73,8 +73,8 @@ static int lbs_ethtool_get_eeprom(struct net_device *dev, ...@@ -73,8 +73,8 @@ static int lbs_ethtool_get_eeprom(struct net_device *dev,
return ret; return ret;
} }
static void lbs_ethtool_get_stats(struct net_device * dev, static void lbs_ethtool_get_stats(struct net_device *dev,
struct ethtool_stats * stats, u64 * data) struct ethtool_stats *stats, uint64_t *data)
{ {
struct lbs_private *priv = dev->priv; struct lbs_private *priv = dev->priv;
struct cmd_ds_mesh_access mesh_access; struct cmd_ds_mesh_access mesh_access;
...@@ -83,12 +83,12 @@ static void lbs_ethtool_get_stats(struct net_device * dev, ...@@ -83,12 +83,12 @@ static void lbs_ethtool_get_stats(struct net_device * dev,
lbs_deb_enter(LBS_DEB_ETHTOOL); lbs_deb_enter(LBS_DEB_ETHTOOL);
/* Get Mesh Statistics */ /* Get Mesh Statistics */
ret = lbs_prepare_and_send_command(priv, ret = lbs_mesh_access(priv, CMD_ACT_MESH_GET_STATS, &mesh_access);
CMD_MESH_ACCESS, CMD_ACT_MESH_GET_STATS,
CMD_OPTION_WAITFORRSP, 0, &mesh_access);
if (ret) if (ret) {
memset(data, 0, MESH_STATS_NUM*(sizeof(uint64_t)));
return; return;
}
priv->mstats.fwd_drop_rbt = le32_to_cpu(mesh_access.data[0]); priv->mstats.fwd_drop_rbt = le32_to_cpu(mesh_access.data[0]);
priv->mstats.fwd_drop_ttl = le32_to_cpu(mesh_access.data[1]); priv->mstats.fwd_drop_ttl = le32_to_cpu(mesh_access.data[1]);
...@@ -111,19 +111,18 @@ static void lbs_ethtool_get_stats(struct net_device * dev, ...@@ -111,19 +111,18 @@ static void lbs_ethtool_get_stats(struct net_device * dev,
lbs_deb_enter(LBS_DEB_ETHTOOL); lbs_deb_enter(LBS_DEB_ETHTOOL);
} }
static int lbs_ethtool_get_sset_count(struct net_device * dev, int sset) static int lbs_ethtool_get_sset_count(struct net_device *dev, int sset)
{ {
switch (sset) { struct lbs_private *priv = dev->priv;
case ETH_SS_STATS:
if (sset == ETH_SS_STATS && dev == priv->mesh_dev)
return MESH_STATS_NUM; return MESH_STATS_NUM;
default:
return -EOPNOTSUPP; return -EOPNOTSUPP;
}
} }
static void lbs_ethtool_get_strings(struct net_device *dev, static void lbs_ethtool_get_strings(struct net_device *dev,
u32 stringset, uint32_t stringset, uint8_t *s)
u8 * s)
{ {
int i; int i;
......
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