Commit fa1f0cb3 authored by Sivakumar Subramani's avatar Sivakumar Subramani Committed by Jeff Garzik

S2IO: Avoid printing the Enhanced statistics for Xframe I card.

- Enhanced Statistics are supported only for Xframe II (Herculas) card. Add
  condition check such Enhanced statistics will included only in the case of
  Xframe II card.
Signed-off-by: default avatarSivakumar Subramani <sivakumar.subramani@neterion.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent ac1f90d6
...@@ -139,7 +139,7 @@ static char s2io_gstrings[][ETH_GSTRING_LEN] = { ...@@ -139,7 +139,7 @@ static char s2io_gstrings[][ETH_GSTRING_LEN] = {
"BIST Test\t(offline)" "BIST Test\t(offline)"
}; };
static char ethtool_stats_keys[][ETH_GSTRING_LEN] = { static char ethtool_xena_stats_keys[][ETH_GSTRING_LEN] = {
{"tmac_frms"}, {"tmac_frms"},
{"tmac_data_octets"}, {"tmac_data_octets"},
{"tmac_drop_frms"}, {"tmac_drop_frms"},
...@@ -233,7 +233,10 @@ static char ethtool_stats_keys[][ETH_GSTRING_LEN] = { ...@@ -233,7 +233,10 @@ static char ethtool_stats_keys[][ETH_GSTRING_LEN] = {
{"rxd_rd_cnt"}, {"rxd_rd_cnt"},
{"rxd_wr_cnt"}, {"rxd_wr_cnt"},
{"txf_rd_cnt"}, {"txf_rd_cnt"},
{"rxf_wr_cnt"}, {"rxf_wr_cnt"}
};
static char ethtool_enhanced_stats_keys[][ETH_GSTRING_LEN] = {
{"rmac_ttl_1519_4095_frms"}, {"rmac_ttl_1519_4095_frms"},
{"rmac_ttl_4096_8191_frms"}, {"rmac_ttl_4096_8191_frms"},
{"rmac_ttl_8192_max_frms"}, {"rmac_ttl_8192_max_frms"},
...@@ -249,7 +252,10 @@ static char ethtool_stats_keys[][ETH_GSTRING_LEN] = { ...@@ -249,7 +252,10 @@ static char ethtool_stats_keys[][ETH_GSTRING_LEN] = {
{"rmac_red_discard"}, {"rmac_red_discard"},
{"rmac_rts_discard"}, {"rmac_rts_discard"},
{"rmac_ingm_full_discard"}, {"rmac_ingm_full_discard"},
{"link_fault_cnt"}, {"link_fault_cnt"}
};
static char ethtool_driver_stats_keys[][ETH_GSTRING_LEN] = {
{"\n DRIVER STATISTICS"}, {"\n DRIVER STATISTICS"},
{"single_bit_ecc_errs"}, {"single_bit_ecc_errs"},
{"double_bit_ecc_errs"}, {"double_bit_ecc_errs"},
...@@ -277,8 +283,16 @@ static char ethtool_stats_keys[][ETH_GSTRING_LEN] = { ...@@ -277,8 +283,16 @@ static char ethtool_stats_keys[][ETH_GSTRING_LEN] = {
("lro_avg_aggr_pkts"), ("lro_avg_aggr_pkts"),
}; };
#define S2IO_STAT_LEN sizeof(ethtool_stats_keys)/ ETH_GSTRING_LEN #define S2IO_XENA_STAT_LEN sizeof(ethtool_xena_stats_keys)/ ETH_GSTRING_LEN
#define S2IO_STAT_STRINGS_LEN S2IO_STAT_LEN * ETH_GSTRING_LEN #define S2IO_ENHANCED_STAT_LEN sizeof(ethtool_enhanced_stats_keys)/ \
ETH_GSTRING_LEN
#define S2IO_DRIVER_STAT_LEN sizeof(ethtool_driver_stats_keys)/ ETH_GSTRING_LEN
#define XFRAME_I_STAT_LEN (S2IO_XENA_STAT_LEN + S2IO_DRIVER_STAT_LEN )
#define XFRAME_II_STAT_LEN (XFRAME_I_STAT_LEN + S2IO_ENHANCED_STAT_LEN )
#define XFRAME_I_STAT_STRINGS_LEN ( XFRAME_I_STAT_LEN * ETH_GSTRING_LEN )
#define XFRAME_II_STAT_STRINGS_LEN ( XFRAME_II_STAT_LEN * ETH_GSTRING_LEN )
#define S2IO_TEST_LEN sizeof(s2io_gstrings) / ETH_GSTRING_LEN #define S2IO_TEST_LEN sizeof(s2io_gstrings) / ETH_GSTRING_LEN
#define S2IO_STRINGS_LEN S2IO_TEST_LEN * ETH_GSTRING_LEN #define S2IO_STRINGS_LEN S2IO_TEST_LEN * ETH_GSTRING_LEN
...@@ -4609,7 +4623,11 @@ static void s2io_ethtool_gdrvinfo(struct net_device *dev, ...@@ -4609,7 +4623,11 @@ static void s2io_ethtool_gdrvinfo(struct net_device *dev,
info->regdump_len = XENA_REG_SPACE; info->regdump_len = XENA_REG_SPACE;
info->eedump_len = XENA_EEPROM_SPACE; info->eedump_len = XENA_EEPROM_SPACE;
info->testinfo_len = S2IO_TEST_LEN; info->testinfo_len = S2IO_TEST_LEN;
info->n_stats = S2IO_STAT_LEN;
if (sp->device_type == XFRAME_I_DEVICE)
info->n_stats = XFRAME_I_STAT_LEN;
else
info->n_stats = XFRAME_II_STAT_LEN;
} }
/** /**
...@@ -5631,9 +5649,15 @@ static void s2io_get_ethtool_stats(struct net_device *dev, ...@@ -5631,9 +5649,15 @@ static void s2io_get_ethtool_stats(struct net_device *dev,
tmp_stats[i++] = le32_to_cpu(stat_info->rxd_wr_cnt); tmp_stats[i++] = le32_to_cpu(stat_info->rxd_wr_cnt);
tmp_stats[i++] = le32_to_cpu(stat_info->txf_rd_cnt); tmp_stats[i++] = le32_to_cpu(stat_info->txf_rd_cnt);
tmp_stats[i++] = le32_to_cpu(stat_info->rxf_wr_cnt); tmp_stats[i++] = le32_to_cpu(stat_info->rxf_wr_cnt);
tmp_stats[i++] = le64_to_cpu(stat_info->rmac_ttl_1519_4095_frms);
tmp_stats[i++] = le64_to_cpu(stat_info->rmac_ttl_4096_8191_frms); /* Enhanced statistics exist only for Hercules */
tmp_stats[i++] = le64_to_cpu(stat_info->rmac_ttl_8192_max_frms); if(sp->device_type == XFRAME_II_DEVICE) {
tmp_stats[i++] =
le64_to_cpu(stat_info->rmac_ttl_1519_4095_frms);
tmp_stats[i++] =
le64_to_cpu(stat_info->rmac_ttl_4096_8191_frms);
tmp_stats[i++] =
le64_to_cpu(stat_info->rmac_ttl_8192_max_frms);
tmp_stats[i++] = le64_to_cpu(stat_info->rmac_ttl_gt_max_frms); tmp_stats[i++] = le64_to_cpu(stat_info->rmac_ttl_gt_max_frms);
tmp_stats[i++] = le64_to_cpu(stat_info->rmac_osized_alt_frms); tmp_stats[i++] = le64_to_cpu(stat_info->rmac_osized_alt_frms);
tmp_stats[i++] = le64_to_cpu(stat_info->rmac_jabber_alt_frms); tmp_stats[i++] = le64_to_cpu(stat_info->rmac_jabber_alt_frms);
...@@ -5647,6 +5671,8 @@ static void s2io_get_ethtool_stats(struct net_device *dev, ...@@ -5647,6 +5671,8 @@ static void s2io_get_ethtool_stats(struct net_device *dev,
tmp_stats[i++] = le32_to_cpu(stat_info->rmac_rts_discard); tmp_stats[i++] = le32_to_cpu(stat_info->rmac_rts_discard);
tmp_stats[i++] = le32_to_cpu(stat_info->rmac_ingm_full_discard); tmp_stats[i++] = le32_to_cpu(stat_info->rmac_ingm_full_discard);
tmp_stats[i++] = le32_to_cpu(stat_info->link_fault_cnt); tmp_stats[i++] = le32_to_cpu(stat_info->link_fault_cnt);
}
tmp_stats[i++] = 0; tmp_stats[i++] = 0;
tmp_stats[i++] = stat_info->sw_stat.single_ecc_errs; tmp_stats[i++] = stat_info->sw_stat.single_ecc_errs;
tmp_stats[i++] = stat_info->sw_stat.double_ecc_errs; tmp_stats[i++] = stat_info->sw_stat.double_ecc_errs;
...@@ -5726,18 +5752,42 @@ static int s2io_ethtool_self_test_count(struct net_device *dev) ...@@ -5726,18 +5752,42 @@ static int s2io_ethtool_self_test_count(struct net_device *dev)
static void s2io_ethtool_get_strings(struct net_device *dev, static void s2io_ethtool_get_strings(struct net_device *dev,
u32 stringset, u8 * data) u32 stringset, u8 * data)
{ {
int stat_size = 0;
struct s2io_nic *sp = dev->priv;
switch (stringset) { switch (stringset) {
case ETH_SS_TEST: case ETH_SS_TEST:
memcpy(data, s2io_gstrings, S2IO_STRINGS_LEN); memcpy(data, s2io_gstrings, S2IO_STRINGS_LEN);
break; break;
case ETH_SS_STATS: case ETH_SS_STATS:
memcpy(data, &ethtool_stats_keys, stat_size = sizeof(ethtool_xena_stats_keys);
sizeof(ethtool_stats_keys)); memcpy(data, &ethtool_xena_stats_keys,stat_size);
if(sp->device_type == XFRAME_II_DEVICE) {
memcpy(data + stat_size,
&ethtool_enhanced_stats_keys,
sizeof(ethtool_enhanced_stats_keys));
stat_size += sizeof(ethtool_enhanced_stats_keys);
}
memcpy(data + stat_size, &ethtool_driver_stats_keys,
sizeof(ethtool_driver_stats_keys));
} }
} }
static int s2io_ethtool_get_stats_count(struct net_device *dev) static int s2io_ethtool_get_stats_count(struct net_device *dev)
{ {
return (S2IO_STAT_LEN); struct s2io_nic *sp = dev->priv;
int stat_count = 0;
switch(sp->device_type) {
case XFRAME_I_DEVICE:
stat_count = XFRAME_I_STAT_LEN;
break;
case XFRAME_II_DEVICE:
stat_count = XFRAME_II_STAT_LEN;
break;
}
return stat_count;
} }
static int s2io_ethtool_op_set_tx_csum(struct net_device *dev, u32 data) static int s2io_ethtool_op_set_tx_csum(struct net_device *dev, u32 data)
......
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