Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 215218
b: refs/heads/master
c: 3666e0b
h: refs/heads/master
v: v3
  • Loading branch information
amit salecha authored and David S. Miller committed Oct 18, 2010
1 parent d5f85ef commit 98d96b2
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 27a954bd560f3e385bbed38fde3051fe718b8d75
refs/heads/master: 3666e0b04f092f9d9da8a6d6a3820de6c870407c
73 changes: 70 additions & 3 deletions trunk/drivers/net/qlcnic/qlcnic_ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,25 @@ static const struct qlcnic_stats qlcnic_gstrings_stats[] = {

};

static const char qlcnic_device_gstrings_stats[][ETH_GSTRING_LEN] = {
"rx unicast frames",
"rx multicast frames",
"rx broadcast frames",
"rx dropped frames",
"rx errors",
"rx local frames",
"rx numbytes",
"tx unicast frames",
"tx multicast frames",
"tx broadcast frames",
"tx dropped frames",
"tx errors",
"tx local frames",
"tx numbytes",
};

#define QLCNIC_STATS_LEN ARRAY_SIZE(qlcnic_gstrings_stats)
#define QLCNIC_DEVICE_STATS_LEN ARRAY_SIZE(qlcnic_device_gstrings_stats)

static const char qlcnic_gstrings_test[][ETH_GSTRING_LEN] = {
"Register_Test_on_offline",
Expand Down Expand Up @@ -625,10 +643,13 @@ static int qlcnic_reg_test(struct net_device *dev)

static int qlcnic_get_sset_count(struct net_device *dev, int sset)
{
struct qlcnic_adapter *adapter = netdev_priv(dev);
switch (sset) {
case ETH_SS_TEST:
return QLCNIC_TEST_LEN;
case ETH_SS_STATS:
if (adapter->flags & QLCNIC_ESWITCH_ENABLED)
return QLCNIC_STATS_LEN + QLCNIC_DEVICE_STATS_LEN;
return QLCNIC_STATS_LEN;
default:
return -EOPNOTSUPP;
Expand Down Expand Up @@ -795,7 +816,8 @@ qlcnic_diag_test(struct net_device *dev, struct ethtool_test *eth_test,
static void
qlcnic_get_strings(struct net_device *dev, u32 stringset, u8 * data)
{
int index;
struct qlcnic_adapter *adapter = netdev_priv(dev);
int index, i;

switch (stringset) {
case ETH_SS_TEST:
Expand All @@ -808,16 +830,43 @@ qlcnic_get_strings(struct net_device *dev, u32 stringset, u8 * data)
qlcnic_gstrings_stats[index].stat_string,
ETH_GSTRING_LEN);
}
break;
if (!(adapter->flags & QLCNIC_ESWITCH_ENABLED))
return;
for (i = 0; i < QLCNIC_DEVICE_STATS_LEN; index++, i++) {
memcpy(data + index * ETH_GSTRING_LEN,
qlcnic_device_gstrings_stats[i],
ETH_GSTRING_LEN);
}
}
}

#define QLCNIC_FILL_ESWITCH_STATS(VAL1) \
(((VAL1) == QLCNIC_ESW_STATS_NOT_AVAIL) ? 0 : VAL1)

static void
qlcnic_fill_device_stats(int *index, u64 *data,
struct __qlcnic_esw_statistics *stats)
{
int ind = *index;

data[ind++] = QLCNIC_FILL_ESWITCH_STATS(stats->unicast_frames);
data[ind++] = QLCNIC_FILL_ESWITCH_STATS(stats->multicast_frames);
data[ind++] = QLCNIC_FILL_ESWITCH_STATS(stats->broadcast_frames);
data[ind++] = QLCNIC_FILL_ESWITCH_STATS(stats->dropped_frames);
data[ind++] = QLCNIC_FILL_ESWITCH_STATS(stats->errors);
data[ind++] = QLCNIC_FILL_ESWITCH_STATS(stats->local_frames);
data[ind++] = QLCNIC_FILL_ESWITCH_STATS(stats->numbytes);

*index = ind;
}

static void
qlcnic_get_ethtool_stats(struct net_device *dev,
struct ethtool_stats *stats, u64 * data)
{
struct qlcnic_adapter *adapter = netdev_priv(dev);
int index;
struct qlcnic_esw_statistics port_stats;
int index, ret;

for (index = 0; index < QLCNIC_STATS_LEN; index++) {
char *p =
Expand All @@ -827,6 +876,24 @@ qlcnic_get_ethtool_stats(struct net_device *dev,
(qlcnic_gstrings_stats[index].sizeof_stat ==
sizeof(u64)) ? *(u64 *)p:(*(u32 *)p);
}

if (!(adapter->flags & QLCNIC_ESWITCH_ENABLED))
return;

memset(&port_stats, 0, sizeof(struct qlcnic_esw_statistics));
ret = qlcnic_get_port_stats(adapter, adapter->ahw.pci_func,
QLCNIC_QUERY_RX_COUNTER, &port_stats.rx);
if (ret)
return;

qlcnic_fill_device_stats(&index, data, &port_stats.rx);

ret = qlcnic_get_port_stats(adapter, adapter->ahw.pci_func,
QLCNIC_QUERY_TX_COUNTER, &port_stats.tx);
if (ret)
return;

qlcnic_fill_device_stats(&index, data, &port_stats.tx);
}

static int qlcnic_set_tx_csum(struct net_device *dev, u32 data)
Expand Down

0 comments on commit 98d96b2

Please sign in to comment.