diff options
author | Sivakumar Subramani <Sivakumar.Subramani@neterion.com> | 2007-02-24 02:03:22 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-02-27 04:27:11 -0500 |
commit | fa1f0cb350989617281a98d30e6a3a4914c79b58 (patch) | |
tree | dff354873c7866eda0114efb72ac58c89a709563 /drivers/net/s2io.c | |
parent | ac1f90d6f1267b916c47cc5a033ef5ec1baf4280 (diff) |
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: Sivakumar Subramani <sivakumar.subramani@neterion.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net/s2io.c')
-rw-r--r-- | drivers/net/s2io.c | 100 |
1 files changed, 75 insertions, 25 deletions
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c index 7c3551bad14c..b991fb2ff83f 100644 --- a/drivers/net/s2io.c +++ b/drivers/net/s2io.c | |||
@@ -139,7 +139,7 @@ static char s2io_gstrings[][ETH_GSTRING_LEN] = { | |||
139 | "BIST Test\t(offline)" | 139 | "BIST Test\t(offline)" |
140 | }; | 140 | }; |
141 | 141 | ||
142 | static char ethtool_stats_keys[][ETH_GSTRING_LEN] = { | 142 | static char ethtool_xena_stats_keys[][ETH_GSTRING_LEN] = { |
143 | {"tmac_frms"}, | 143 | {"tmac_frms"}, |
144 | {"tmac_data_octets"}, | 144 | {"tmac_data_octets"}, |
145 | {"tmac_drop_frms"}, | 145 | {"tmac_drop_frms"}, |
@@ -233,7 +233,10 @@ static char ethtool_stats_keys[][ETH_GSTRING_LEN] = { | |||
233 | {"rxd_rd_cnt"}, | 233 | {"rxd_rd_cnt"}, |
234 | {"rxd_wr_cnt"}, | 234 | {"rxd_wr_cnt"}, |
235 | {"txf_rd_cnt"}, | 235 | {"txf_rd_cnt"}, |
236 | {"rxf_wr_cnt"}, | 236 | {"rxf_wr_cnt"} |
237 | }; | ||
238 | |||
239 | static char ethtool_enhanced_stats_keys[][ETH_GSTRING_LEN] = { | ||
237 | {"rmac_ttl_1519_4095_frms"}, | 240 | {"rmac_ttl_1519_4095_frms"}, |
238 | {"rmac_ttl_4096_8191_frms"}, | 241 | {"rmac_ttl_4096_8191_frms"}, |
239 | {"rmac_ttl_8192_max_frms"}, | 242 | {"rmac_ttl_8192_max_frms"}, |
@@ -249,7 +252,10 @@ static char ethtool_stats_keys[][ETH_GSTRING_LEN] = { | |||
249 | {"rmac_red_discard"}, | 252 | {"rmac_red_discard"}, |
250 | {"rmac_rts_discard"}, | 253 | {"rmac_rts_discard"}, |
251 | {"rmac_ingm_full_discard"}, | 254 | {"rmac_ingm_full_discard"}, |
252 | {"link_fault_cnt"}, | 255 | {"link_fault_cnt"} |
256 | }; | ||
257 | |||
258 | static char ethtool_driver_stats_keys[][ETH_GSTRING_LEN] = { | ||
253 | {"\n DRIVER STATISTICS"}, | 259 | {"\n DRIVER STATISTICS"}, |
254 | {"single_bit_ecc_errs"}, | 260 | {"single_bit_ecc_errs"}, |
255 | {"double_bit_ecc_errs"}, | 261 | {"double_bit_ecc_errs"}, |
@@ -277,8 +283,16 @@ static char ethtool_stats_keys[][ETH_GSTRING_LEN] = { | |||
277 | ("lro_avg_aggr_pkts"), | 283 | ("lro_avg_aggr_pkts"), |
278 | }; | 284 | }; |
279 | 285 | ||
280 | #define S2IO_STAT_LEN sizeof(ethtool_stats_keys)/ ETH_GSTRING_LEN | 286 | #define S2IO_XENA_STAT_LEN sizeof(ethtool_xena_stats_keys)/ ETH_GSTRING_LEN |
281 | #define S2IO_STAT_STRINGS_LEN S2IO_STAT_LEN * ETH_GSTRING_LEN | 287 | #define S2IO_ENHANCED_STAT_LEN sizeof(ethtool_enhanced_stats_keys)/ \ |
288 | ETH_GSTRING_LEN | ||
289 | #define S2IO_DRIVER_STAT_LEN sizeof(ethtool_driver_stats_keys)/ ETH_GSTRING_LEN | ||
290 | |||
291 | #define XFRAME_I_STAT_LEN (S2IO_XENA_STAT_LEN + S2IO_DRIVER_STAT_LEN ) | ||
292 | #define XFRAME_II_STAT_LEN (XFRAME_I_STAT_LEN + S2IO_ENHANCED_STAT_LEN ) | ||
293 | |||
294 | #define XFRAME_I_STAT_STRINGS_LEN ( XFRAME_I_STAT_LEN * ETH_GSTRING_LEN ) | ||
295 | #define XFRAME_II_STAT_STRINGS_LEN ( XFRAME_II_STAT_LEN * ETH_GSTRING_LEN ) | ||
282 | 296 | ||
283 | #define S2IO_TEST_LEN sizeof(s2io_gstrings) / ETH_GSTRING_LEN | 297 | #define S2IO_TEST_LEN sizeof(s2io_gstrings) / ETH_GSTRING_LEN |
284 | #define S2IO_STRINGS_LEN S2IO_TEST_LEN * ETH_GSTRING_LEN | 298 | #define S2IO_STRINGS_LEN S2IO_TEST_LEN * ETH_GSTRING_LEN |
@@ -4609,7 +4623,11 @@ static void s2io_ethtool_gdrvinfo(struct net_device *dev, | |||
4609 | info->regdump_len = XENA_REG_SPACE; | 4623 | info->regdump_len = XENA_REG_SPACE; |
4610 | info->eedump_len = XENA_EEPROM_SPACE; | 4624 | info->eedump_len = XENA_EEPROM_SPACE; |
4611 | info->testinfo_len = S2IO_TEST_LEN; | 4625 | info->testinfo_len = S2IO_TEST_LEN; |
4612 | info->n_stats = S2IO_STAT_LEN; | 4626 | |
4627 | if (sp->device_type == XFRAME_I_DEVICE) | ||
4628 | info->n_stats = XFRAME_I_STAT_LEN; | ||
4629 | else | ||
4630 | info->n_stats = XFRAME_II_STAT_LEN; | ||
4613 | } | 4631 | } |
4614 | 4632 | ||
4615 | /** | 4633 | /** |
@@ -5631,22 +5649,30 @@ static void s2io_get_ethtool_stats(struct net_device *dev, | |||
5631 | tmp_stats[i++] = le32_to_cpu(stat_info->rxd_wr_cnt); | 5649 | tmp_stats[i++] = le32_to_cpu(stat_info->rxd_wr_cnt); |
5632 | tmp_stats[i++] = le32_to_cpu(stat_info->txf_rd_cnt); | 5650 | tmp_stats[i++] = le32_to_cpu(stat_info->txf_rd_cnt); |
5633 | tmp_stats[i++] = le32_to_cpu(stat_info->rxf_wr_cnt); | 5651 | tmp_stats[i++] = le32_to_cpu(stat_info->rxf_wr_cnt); |
5634 | tmp_stats[i++] = le64_to_cpu(stat_info->rmac_ttl_1519_4095_frms); | 5652 | |
5635 | tmp_stats[i++] = le64_to_cpu(stat_info->rmac_ttl_4096_8191_frms); | 5653 | /* Enhanced statistics exist only for Hercules */ |
5636 | tmp_stats[i++] = le64_to_cpu(stat_info->rmac_ttl_8192_max_frms); | 5654 | if(sp->device_type == XFRAME_II_DEVICE) { |
5637 | tmp_stats[i++] = le64_to_cpu(stat_info->rmac_ttl_gt_max_frms); | 5655 | tmp_stats[i++] = |
5638 | tmp_stats[i++] = le64_to_cpu(stat_info->rmac_osized_alt_frms); | 5656 | le64_to_cpu(stat_info->rmac_ttl_1519_4095_frms); |
5639 | tmp_stats[i++] = le64_to_cpu(stat_info->rmac_jabber_alt_frms); | 5657 | tmp_stats[i++] = |
5640 | tmp_stats[i++] = le64_to_cpu(stat_info->rmac_gt_max_alt_frms); | 5658 | le64_to_cpu(stat_info->rmac_ttl_4096_8191_frms); |
5641 | tmp_stats[i++] = le64_to_cpu(stat_info->rmac_vlan_frms); | 5659 | tmp_stats[i++] = |
5642 | tmp_stats[i++] = le32_to_cpu(stat_info->rmac_len_discard); | 5660 | le64_to_cpu(stat_info->rmac_ttl_8192_max_frms); |
5643 | tmp_stats[i++] = le32_to_cpu(stat_info->rmac_fcs_discard); | 5661 | tmp_stats[i++] = le64_to_cpu(stat_info->rmac_ttl_gt_max_frms); |
5644 | tmp_stats[i++] = le32_to_cpu(stat_info->rmac_pf_discard); | 5662 | tmp_stats[i++] = le64_to_cpu(stat_info->rmac_osized_alt_frms); |
5645 | tmp_stats[i++] = le32_to_cpu(stat_info->rmac_da_discard); | 5663 | tmp_stats[i++] = le64_to_cpu(stat_info->rmac_jabber_alt_frms); |
5646 | tmp_stats[i++] = le32_to_cpu(stat_info->rmac_red_discard); | 5664 | tmp_stats[i++] = le64_to_cpu(stat_info->rmac_gt_max_alt_frms); |
5647 | tmp_stats[i++] = le32_to_cpu(stat_info->rmac_rts_discard); | 5665 | tmp_stats[i++] = le64_to_cpu(stat_info->rmac_vlan_frms); |
5648 | tmp_stats[i++] = le32_to_cpu(stat_info->rmac_ingm_full_discard); | 5666 | tmp_stats[i++] = le32_to_cpu(stat_info->rmac_len_discard); |
5649 | tmp_stats[i++] = le32_to_cpu(stat_info->link_fault_cnt); | 5667 | tmp_stats[i++] = le32_to_cpu(stat_info->rmac_fcs_discard); |
5668 | tmp_stats[i++] = le32_to_cpu(stat_info->rmac_pf_discard); | ||
5669 | tmp_stats[i++] = le32_to_cpu(stat_info->rmac_da_discard); | ||
5670 | tmp_stats[i++] = le32_to_cpu(stat_info->rmac_red_discard); | ||
5671 | tmp_stats[i++] = le32_to_cpu(stat_info->rmac_rts_discard); | ||
5672 | tmp_stats[i++] = le32_to_cpu(stat_info->rmac_ingm_full_discard); | ||
5673 | tmp_stats[i++] = le32_to_cpu(stat_info->link_fault_cnt); | ||
5674 | } | ||
5675 | |||
5650 | tmp_stats[i++] = 0; | 5676 | tmp_stats[i++] = 0; |
5651 | tmp_stats[i++] = stat_info->sw_stat.single_ecc_errs; | 5677 | tmp_stats[i++] = stat_info->sw_stat.single_ecc_errs; |
5652 | tmp_stats[i++] = stat_info->sw_stat.double_ecc_errs; | 5678 | 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 | static void s2io_ethtool_get_strings(struct net_device *dev, | 5752 | static void s2io_ethtool_get_strings(struct net_device *dev, |
5727 | u32 stringset, u8 * data) | 5753 | u32 stringset, u8 * data) |
5728 | { | 5754 | { |
5755 | int stat_size = 0; | ||
5756 | struct s2io_nic *sp = dev->priv; | ||
5757 | |||
5729 | switch (stringset) { | 5758 | switch (stringset) { |
5730 | case ETH_SS_TEST: | 5759 | case ETH_SS_TEST: |
5731 | memcpy(data, s2io_gstrings, S2IO_STRINGS_LEN); | 5760 | memcpy(data, s2io_gstrings, S2IO_STRINGS_LEN); |
5732 | break; | 5761 | break; |
5733 | case ETH_SS_STATS: | 5762 | case ETH_SS_STATS: |
5734 | memcpy(data, ðtool_stats_keys, | 5763 | stat_size = sizeof(ethtool_xena_stats_keys); |
5735 | sizeof(ethtool_stats_keys)); | 5764 | memcpy(data, ðtool_xena_stats_keys,stat_size); |
5765 | if(sp->device_type == XFRAME_II_DEVICE) { | ||
5766 | memcpy(data + stat_size, | ||
5767 | ðtool_enhanced_stats_keys, | ||
5768 | sizeof(ethtool_enhanced_stats_keys)); | ||
5769 | stat_size += sizeof(ethtool_enhanced_stats_keys); | ||
5770 | } | ||
5771 | |||
5772 | memcpy(data + stat_size, ðtool_driver_stats_keys, | ||
5773 | sizeof(ethtool_driver_stats_keys)); | ||
5736 | } | 5774 | } |
5737 | } | 5775 | } |
5738 | static int s2io_ethtool_get_stats_count(struct net_device *dev) | 5776 | static int s2io_ethtool_get_stats_count(struct net_device *dev) |
5739 | { | 5777 | { |
5740 | return (S2IO_STAT_LEN); | 5778 | struct s2io_nic *sp = dev->priv; |
5779 | int stat_count = 0; | ||
5780 | switch(sp->device_type) { | ||
5781 | case XFRAME_I_DEVICE: | ||
5782 | stat_count = XFRAME_I_STAT_LEN; | ||
5783 | break; | ||
5784 | |||
5785 | case XFRAME_II_DEVICE: | ||
5786 | stat_count = XFRAME_II_STAT_LEN; | ||
5787 | break; | ||
5788 | } | ||
5789 | |||
5790 | return stat_count; | ||
5741 | } | 5791 | } |
5742 | 5792 | ||
5743 | static int s2io_ethtool_op_set_tx_csum(struct net_device *dev, u32 data) | 5793 | static int s2io_ethtool_op_set_tx_csum(struct net_device *dev, u32 data) |