diff options
35 files changed, 345 insertions, 245 deletions
diff --git a/drivers/net/3c59x.c b/drivers/net/3c59x.c index 58311199e321..93eb78425d6d 100644 --- a/drivers/net/3c59x.c +++ b/drivers/net/3c59x.c | |||
@@ -2833,9 +2833,14 @@ static void vortex_set_msglevel(struct net_device *dev, u32 dbg) | |||
2833 | vortex_debug = dbg; | 2833 | vortex_debug = dbg; |
2834 | } | 2834 | } |
2835 | 2835 | ||
2836 | static int vortex_get_stats_count(struct net_device *dev) | 2836 | static int vortex_get_sset_count(struct net_device *dev, int sset) |
2837 | { | 2837 | { |
2838 | return VORTEX_NUM_STATS; | 2838 | switch (sset) { |
2839 | case ETH_SS_STATS: | ||
2840 | return VORTEX_NUM_STATS; | ||
2841 | default: | ||
2842 | return -EOPNOTSUPP; | ||
2843 | } | ||
2839 | } | 2844 | } |
2840 | 2845 | ||
2841 | static void vortex_get_ethtool_stats(struct net_device *dev, | 2846 | static void vortex_get_ethtool_stats(struct net_device *dev, |
@@ -2892,7 +2897,7 @@ static const struct ethtool_ops vortex_ethtool_ops = { | |||
2892 | .get_msglevel = vortex_get_msglevel, | 2897 | .get_msglevel = vortex_get_msglevel, |
2893 | .set_msglevel = vortex_set_msglevel, | 2898 | .set_msglevel = vortex_set_msglevel, |
2894 | .get_ethtool_stats = vortex_get_ethtool_stats, | 2899 | .get_ethtool_stats = vortex_get_ethtool_stats, |
2895 | .get_stats_count = vortex_get_stats_count, | 2900 | .get_sset_count = vortex_get_sset_count, |
2896 | .get_settings = vortex_get_settings, | 2901 | .get_settings = vortex_get_settings, |
2897 | .set_settings = vortex_set_settings, | 2902 | .set_settings = vortex_set_settings, |
2898 | .get_link = ethtool_op_get_link, | 2903 | .get_link = ethtool_op_get_link, |
diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c index 7edd50cf7776..d437823c2c5e 100644 --- a/drivers/net/8139cp.c +++ b/drivers/net/8139cp.c | |||
@@ -1383,9 +1383,14 @@ static int cp_get_regs_len(struct net_device *dev) | |||
1383 | return CP_REGS_SIZE; | 1383 | return CP_REGS_SIZE; |
1384 | } | 1384 | } |
1385 | 1385 | ||
1386 | static int cp_get_stats_count (struct net_device *dev) | 1386 | static int cp_get_sset_count (struct net_device *dev, int sset) |
1387 | { | 1387 | { |
1388 | return CP_NUM_STATS; | 1388 | switch (sset) { |
1389 | case ETH_SS_STATS: | ||
1390 | return CP_NUM_STATS; | ||
1391 | default: | ||
1392 | return -EOPNOTSUPP; | ||
1393 | } | ||
1389 | } | 1394 | } |
1390 | 1395 | ||
1391 | static int cp_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) | 1396 | static int cp_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) |
@@ -1563,7 +1568,7 @@ static void cp_get_ethtool_stats (struct net_device *dev, | |||
1563 | static const struct ethtool_ops cp_ethtool_ops = { | 1568 | static const struct ethtool_ops cp_ethtool_ops = { |
1564 | .get_drvinfo = cp_get_drvinfo, | 1569 | .get_drvinfo = cp_get_drvinfo, |
1565 | .get_regs_len = cp_get_regs_len, | 1570 | .get_regs_len = cp_get_regs_len, |
1566 | .get_stats_count = cp_get_stats_count, | 1571 | .get_sset_count = cp_get_sset_count, |
1567 | .get_settings = cp_get_settings, | 1572 | .get_settings = cp_get_settings, |
1568 | .set_settings = cp_set_settings, | 1573 | .set_settings = cp_set_settings, |
1569 | .nway_reset = cp_nway_reset, | 1574 | .nway_reset = cp_nway_reset, |
diff --git a/drivers/net/8139too.c b/drivers/net/8139too.c index d3088a786e26..973b684c11e3 100644 --- a/drivers/net/8139too.c +++ b/drivers/net/8139too.c | |||
@@ -2406,9 +2406,14 @@ static void rtl8139_get_regs(struct net_device *dev, struct ethtool_regs *regs, | |||
2406 | } | 2406 | } |
2407 | #endif /* CONFIG_8139TOO_MMIO */ | 2407 | #endif /* CONFIG_8139TOO_MMIO */ |
2408 | 2408 | ||
2409 | static int rtl8139_get_stats_count(struct net_device *dev) | 2409 | static int rtl8139_get_sset_count(struct net_device *dev, int sset) |
2410 | { | 2410 | { |
2411 | return RTL_NUM_STATS; | 2411 | switch (sset) { |
2412 | case ETH_SS_STATS: | ||
2413 | return RTL_NUM_STATS; | ||
2414 | default: | ||
2415 | return -EOPNOTSUPP; | ||
2416 | } | ||
2412 | } | 2417 | } |
2413 | 2418 | ||
2414 | static void rtl8139_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *stats, u64 *data) | 2419 | static void rtl8139_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *stats, u64 *data) |
@@ -2439,7 +2444,7 @@ static const struct ethtool_ops rtl8139_ethtool_ops = { | |||
2439 | .get_wol = rtl8139_get_wol, | 2444 | .get_wol = rtl8139_get_wol, |
2440 | .set_wol = rtl8139_set_wol, | 2445 | .set_wol = rtl8139_set_wol, |
2441 | .get_strings = rtl8139_get_strings, | 2446 | .get_strings = rtl8139_get_strings, |
2442 | .get_stats_count = rtl8139_get_stats_count, | 2447 | .get_sset_count = rtl8139_get_sset_count, |
2443 | .get_ethtool_stats = rtl8139_get_ethtool_stats, | 2448 | .get_ethtool_stats = rtl8139_get_ethtool_stats, |
2444 | }; | 2449 | }; |
2445 | 2450 | ||
diff --git a/drivers/net/atl1/atl1_ethtool.c b/drivers/net/atl1/atl1_ethtool.c index 53353b60a9c8..68a83be843ab 100644 --- a/drivers/net/atl1/atl1_ethtool.c +++ b/drivers/net/atl1/atl1_ethtool.c | |||
@@ -88,9 +88,14 @@ static void atl1_get_ethtool_stats(struct net_device *netdev, | |||
88 | 88 | ||
89 | } | 89 | } |
90 | 90 | ||
91 | static int atl1_get_stats_count(struct net_device *netdev) | 91 | static int atl1_get_sset_count(struct net_device *netdev, int sset) |
92 | { | 92 | { |
93 | return ARRAY_SIZE(atl1_gstrings_stats); | 93 | switch (sset) { |
94 | case ETH_SS_STATS: | ||
95 | return ARRAY_SIZE(atl1_gstrings_stats); | ||
96 | default: | ||
97 | return -EOPNOTSUPP; | ||
98 | } | ||
94 | } | 99 | } |
95 | 100 | ||
96 | static int atl1_get_settings(struct net_device *netdev, | 101 | static int atl1_get_settings(struct net_device *netdev, |
@@ -495,6 +500,6 @@ const struct ethtool_ops atl1_ethtool_ops = { | |||
495 | .get_strings = atl1_get_strings, | 500 | .get_strings = atl1_get_strings, |
496 | .nway_reset = atl1_nway_reset, | 501 | .nway_reset = atl1_nway_reset, |
497 | .get_ethtool_stats = atl1_get_ethtool_stats, | 502 | .get_ethtool_stats = atl1_get_ethtool_stats, |
498 | .get_stats_count = atl1_get_stats_count, | 503 | .get_sset_count = atl1_get_sset_count, |
499 | .set_tso = ethtool_op_set_tso, | 504 | .set_tso = ethtool_op_set_tso, |
500 | }; | 505 | }; |
diff --git a/drivers/net/b44.c b/drivers/net/b44.c index e90ba217d244..3d247f3f4a3c 100644 --- a/drivers/net/b44.c +++ b/drivers/net/b44.c | |||
@@ -1962,9 +1962,14 @@ static void b44_get_strings(struct net_device *dev, u32 stringset, u8 *data) | |||
1962 | } | 1962 | } |
1963 | } | 1963 | } |
1964 | 1964 | ||
1965 | static int b44_get_stats_count(struct net_device *dev) | 1965 | static int b44_get_sset_count(struct net_device *dev, int sset) |
1966 | { | 1966 | { |
1967 | return ARRAY_SIZE(b44_gstrings); | 1967 | switch (sset) { |
1968 | case ETH_SS_STATS: | ||
1969 | return ARRAY_SIZE(b44_gstrings); | ||
1970 | default: | ||
1971 | return -EOPNOTSUPP; | ||
1972 | } | ||
1968 | } | 1973 | } |
1969 | 1974 | ||
1970 | static void b44_get_ethtool_stats(struct net_device *dev, | 1975 | static void b44_get_ethtool_stats(struct net_device *dev, |
@@ -2025,7 +2030,7 @@ static const struct ethtool_ops b44_ethtool_ops = { | |||
2025 | .get_msglevel = b44_get_msglevel, | 2030 | .get_msglevel = b44_get_msglevel, |
2026 | .set_msglevel = b44_set_msglevel, | 2031 | .set_msglevel = b44_set_msglevel, |
2027 | .get_strings = b44_get_strings, | 2032 | .get_strings = b44_get_strings, |
2028 | .get_stats_count = b44_get_stats_count, | 2033 | .get_sset_count = b44_get_sset_count, |
2029 | .get_ethtool_stats = b44_get_ethtool_stats, | 2034 | .get_ethtool_stats = b44_get_ethtool_stats, |
2030 | }; | 2035 | }; |
2031 | 2036 | ||
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c index ee9aed3aa489..57f7d994c9c1 100644 --- a/drivers/net/bnx2.c +++ b/drivers/net/bnx2.c | |||
@@ -6068,9 +6068,16 @@ static struct { | |||
6068 | }; | 6068 | }; |
6069 | 6069 | ||
6070 | static int | 6070 | static int |
6071 | bnx2_self_test_count(struct net_device *dev) | 6071 | bnx2_get_sset_count(struct net_device *dev, int sset) |
6072 | { | 6072 | { |
6073 | return BNX2_NUM_TESTS; | 6073 | switch (sset) { |
6074 | case ETH_SS_TEST: | ||
6075 | return BNX2_NUM_TESTS; | ||
6076 | case ETH_SS_STATS: | ||
6077 | return BNX2_NUM_STATS; | ||
6078 | default: | ||
6079 | return -EOPNOTSUPP; | ||
6080 | } | ||
6074 | } | 6081 | } |
6075 | 6082 | ||
6076 | static void | 6083 | static void |
@@ -6144,12 +6151,6 @@ bnx2_get_strings(struct net_device *dev, u32 stringset, u8 *buf) | |||
6144 | } | 6151 | } |
6145 | } | 6152 | } |
6146 | 6153 | ||
6147 | static int | ||
6148 | bnx2_get_stats_count(struct net_device *dev) | ||
6149 | { | ||
6150 | return BNX2_NUM_STATS; | ||
6151 | } | ||
6152 | |||
6153 | static void | 6154 | static void |
6154 | bnx2_get_ethtool_stats(struct net_device *dev, | 6155 | bnx2_get_ethtool_stats(struct net_device *dev, |
6155 | struct ethtool_stats *stats, u64 *buf) | 6156 | struct ethtool_stats *stats, u64 *buf) |
@@ -6260,12 +6261,11 @@ static const struct ethtool_ops bnx2_ethtool_ops = { | |||
6260 | .set_tx_csum = bnx2_set_tx_csum, | 6261 | .set_tx_csum = bnx2_set_tx_csum, |
6261 | .set_sg = ethtool_op_set_sg, | 6262 | .set_sg = ethtool_op_set_sg, |
6262 | .set_tso = bnx2_set_tso, | 6263 | .set_tso = bnx2_set_tso, |
6263 | .self_test_count = bnx2_self_test_count, | ||
6264 | .self_test = bnx2_self_test, | 6264 | .self_test = bnx2_self_test, |
6265 | .get_strings = bnx2_get_strings, | 6265 | .get_strings = bnx2_get_strings, |
6266 | .phys_id = bnx2_phys_id, | 6266 | .phys_id = bnx2_phys_id, |
6267 | .get_stats_count = bnx2_get_stats_count, | ||
6268 | .get_ethtool_stats = bnx2_get_ethtool_stats, | 6267 | .get_ethtool_stats = bnx2_get_ethtool_stats, |
6268 | .get_sset_count = bnx2_get_sset_count, | ||
6269 | }; | 6269 | }; |
6270 | 6270 | ||
6271 | /* Called with rtnl_lock */ | 6271 | /* Called with rtnl_lock */ |
diff --git a/drivers/net/cassini.c b/drivers/net/cassini.c index adc2e4d5a69e..563bf5f6fa2a 100644 --- a/drivers/net/cassini.c +++ b/drivers/net/cassini.c | |||
@@ -4772,9 +4772,14 @@ static void cas_get_regs(struct net_device *dev, struct ethtool_regs *regs, | |||
4772 | cas_read_regs(cp, p, regs->len / sizeof(u32)); | 4772 | cas_read_regs(cp, p, regs->len / sizeof(u32)); |
4773 | } | 4773 | } |
4774 | 4774 | ||
4775 | static int cas_get_stats_count(struct net_device *dev) | 4775 | static int cas_get_sset_count(struct net_device *dev, int sset) |
4776 | { | 4776 | { |
4777 | return CAS_NUM_STAT_KEYS; | 4777 | switch (sset) { |
4778 | case ETH_SS_STATS: | ||
4779 | return CAS_NUM_STAT_KEYS; | ||
4780 | default: | ||
4781 | return -EOPNOTSUPP; | ||
4782 | } | ||
4778 | } | 4783 | } |
4779 | 4784 | ||
4780 | static void cas_get_strings(struct net_device *dev, u32 stringset, u8 *data) | 4785 | static void cas_get_strings(struct net_device *dev, u32 stringset, u8 *data) |
@@ -4818,7 +4823,7 @@ static const struct ethtool_ops cas_ethtool_ops = { | |||
4818 | .set_msglevel = cas_set_msglevel, | 4823 | .set_msglevel = cas_set_msglevel, |
4819 | .get_regs_len = cas_get_regs_len, | 4824 | .get_regs_len = cas_get_regs_len, |
4820 | .get_regs = cas_get_regs, | 4825 | .get_regs = cas_get_regs, |
4821 | .get_stats_count = cas_get_stats_count, | 4826 | .get_sset_count = cas_get_sset_count, |
4822 | .get_strings = cas_get_strings, | 4827 | .get_strings = cas_get_strings, |
4823 | .get_ethtool_stats = cas_get_ethtool_stats, | 4828 | .get_ethtool_stats = cas_get_ethtool_stats, |
4824 | }; | 4829 | }; |
diff --git a/drivers/net/chelsio/cxgb2.c b/drivers/net/chelsio/cxgb2.c index 7029f13d008d..2dbf8dc116c6 100644 --- a/drivers/net/chelsio/cxgb2.c +++ b/drivers/net/chelsio/cxgb2.c | |||
@@ -439,9 +439,14 @@ static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) | |||
439 | strcpy(info->bus_info, pci_name(adapter->pdev)); | 439 | strcpy(info->bus_info, pci_name(adapter->pdev)); |
440 | } | 440 | } |
441 | 441 | ||
442 | static int get_stats_count(struct net_device *dev) | 442 | static int get_sset_count(struct net_device *dev, int sset) |
443 | { | 443 | { |
444 | return ARRAY_SIZE(stats_strings); | 444 | switch (sset) { |
445 | case ETH_SS_STATS: | ||
446 | return ARRAY_SIZE(stats_strings); | ||
447 | default: | ||
448 | return -EOPNOTSUPP; | ||
449 | } | ||
445 | } | 450 | } |
446 | 451 | ||
447 | static void get_strings(struct net_device *dev, u32 stringset, u8 *data) | 452 | static void get_strings(struct net_device *dev, u32 stringset, u8 *data) |
@@ -798,7 +803,7 @@ static const struct ethtool_ops t1_ethtool_ops = { | |||
798 | .set_sg = ethtool_op_set_sg, | 803 | .set_sg = ethtool_op_set_sg, |
799 | .get_link = ethtool_op_get_link, | 804 | .get_link = ethtool_op_get_link, |
800 | .get_strings = get_strings, | 805 | .get_strings = get_strings, |
801 | .get_stats_count = get_stats_count, | 806 | .get_sset_count = get_sset_count, |
802 | .get_ethtool_stats = get_stats, | 807 | .get_ethtool_stats = get_stats, |
803 | .get_regs_len = get_regs_len, | 808 | .get_regs_len = get_regs_len, |
804 | .get_regs = get_regs, | 809 | .get_regs = get_regs, |
diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c index 04633ea55202..e22d06531051 100644 --- a/drivers/net/cxgb3/cxgb3_main.c +++ b/drivers/net/cxgb3/cxgb3_main.c | |||
@@ -1131,9 +1131,14 @@ static char stats_strings[][ETH_GSTRING_LEN] = { | |||
1131 | 1131 | ||
1132 | }; | 1132 | }; |
1133 | 1133 | ||
1134 | static int get_stats_count(struct net_device *dev) | 1134 | static int get_sset_count(struct net_device *dev, int sset) |
1135 | { | 1135 | { |
1136 | return ARRAY_SIZE(stats_strings); | 1136 | switch (sset) { |
1137 | case ETH_SS_STATS: | ||
1138 | return ARRAY_SIZE(stats_strings); | ||
1139 | default: | ||
1140 | return -EOPNOTSUPP; | ||
1141 | } | ||
1137 | } | 1142 | } |
1138 | 1143 | ||
1139 | #define T3_REGMAP_SIZE (3 * 1024) | 1144 | #define T3_REGMAP_SIZE (3 * 1024) |
@@ -1640,7 +1645,7 @@ static const struct ethtool_ops cxgb_ethtool_ops = { | |||
1640 | .get_strings = get_strings, | 1645 | .get_strings = get_strings, |
1641 | .phys_id = cxgb3_phys_id, | 1646 | .phys_id = cxgb3_phys_id, |
1642 | .nway_reset = restart_autoneg, | 1647 | .nway_reset = restart_autoneg, |
1643 | .get_stats_count = get_stats_count, | 1648 | .get_sset_count = get_sset_count, |
1644 | .get_ethtool_stats = get_stats, | 1649 | .get_ethtool_stats = get_stats, |
1645 | .get_regs_len = get_regs_len, | 1650 | .get_regs_len = get_regs_len, |
1646 | .get_regs = get_regs, | 1651 | .get_regs = get_regs, |
diff --git a/drivers/net/e100.c b/drivers/net/e100.c index 720994b1e13a..7bd960402687 100644 --- a/drivers/net/e100.c +++ b/drivers/net/e100.c | |||
@@ -2374,11 +2374,6 @@ static const char e100_gstrings_test[][ETH_GSTRING_LEN] = { | |||
2374 | }; | 2374 | }; |
2375 | #define E100_TEST_LEN sizeof(e100_gstrings_test) / ETH_GSTRING_LEN | 2375 | #define E100_TEST_LEN sizeof(e100_gstrings_test) / ETH_GSTRING_LEN |
2376 | 2376 | ||
2377 | static int e100_diag_test_count(struct net_device *netdev) | ||
2378 | { | ||
2379 | return E100_TEST_LEN; | ||
2380 | } | ||
2381 | |||
2382 | static void e100_diag_test(struct net_device *netdev, | 2377 | static void e100_diag_test(struct net_device *netdev, |
2383 | struct ethtool_test *test, u64 *data) | 2378 | struct ethtool_test *test, u64 *data) |
2384 | { | 2379 | { |
@@ -2441,9 +2436,16 @@ static const char e100_gstrings_stats[][ETH_GSTRING_LEN] = { | |||
2441 | #define E100_NET_STATS_LEN 21 | 2436 | #define E100_NET_STATS_LEN 21 |
2442 | #define E100_STATS_LEN sizeof(e100_gstrings_stats) / ETH_GSTRING_LEN | 2437 | #define E100_STATS_LEN sizeof(e100_gstrings_stats) / ETH_GSTRING_LEN |
2443 | 2438 | ||
2444 | static int e100_get_stats_count(struct net_device *netdev) | 2439 | static int e100_get_sset_count(struct net_device *netdev, int sset) |
2445 | { | 2440 | { |
2446 | return E100_STATS_LEN; | 2441 | switch (sset) { |
2442 | case ETH_SS_TEST: | ||
2443 | return E100_TEST_LEN; | ||
2444 | case ETH_SS_STATS: | ||
2445 | return E100_STATS_LEN; | ||
2446 | default: | ||
2447 | return -EOPNOTSUPP; | ||
2448 | } | ||
2447 | } | 2449 | } |
2448 | 2450 | ||
2449 | static void e100_get_ethtool_stats(struct net_device *netdev, | 2451 | static void e100_get_ethtool_stats(struct net_device *netdev, |
@@ -2494,12 +2496,11 @@ static const struct ethtool_ops e100_ethtool_ops = { | |||
2494 | .set_eeprom = e100_set_eeprom, | 2496 | .set_eeprom = e100_set_eeprom, |
2495 | .get_ringparam = e100_get_ringparam, | 2497 | .get_ringparam = e100_get_ringparam, |
2496 | .set_ringparam = e100_set_ringparam, | 2498 | .set_ringparam = e100_set_ringparam, |
2497 | .self_test_count = e100_diag_test_count, | ||
2498 | .self_test = e100_diag_test, | 2499 | .self_test = e100_diag_test, |
2499 | .get_strings = e100_get_strings, | 2500 | .get_strings = e100_get_strings, |
2500 | .phys_id = e100_phys_id, | 2501 | .phys_id = e100_phys_id, |
2501 | .get_stats_count = e100_get_stats_count, | ||
2502 | .get_ethtool_stats = e100_get_ethtool_stats, | 2502 | .get_ethtool_stats = e100_get_ethtool_stats, |
2503 | .get_sset_count = e100_get_sset_count, | ||
2503 | }; | 2504 | }; |
2504 | 2505 | ||
2505 | static int e100_do_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd) | 2506 | static int e100_do_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd) |
diff --git a/drivers/net/e1000/e1000_ethtool.c b/drivers/net/e1000/e1000_ethtool.c index e6c4a3bb9e4c..6c9a643426f5 100644 --- a/drivers/net/e1000/e1000_ethtool.c +++ b/drivers/net/e1000/e1000_ethtool.c | |||
@@ -618,8 +618,6 @@ e1000_get_drvinfo(struct net_device *netdev, | |||
618 | 618 | ||
619 | strncpy(drvinfo->fw_version, firmware_version, 32); | 619 | strncpy(drvinfo->fw_version, firmware_version, 32); |
620 | strncpy(drvinfo->bus_info, pci_name(adapter->pdev), 32); | 620 | strncpy(drvinfo->bus_info, pci_name(adapter->pdev), 32); |
621 | drvinfo->n_stats = E1000_STATS_LEN; | ||
622 | drvinfo->testinfo_len = E1000_TEST_LEN; | ||
623 | drvinfo->regdump_len = e1000_get_regs_len(netdev); | 621 | drvinfo->regdump_len = e1000_get_regs_len(netdev); |
624 | drvinfo->eedump_len = e1000_get_eeprom_len(netdev); | 622 | drvinfo->eedump_len = e1000_get_eeprom_len(netdev); |
625 | } | 623 | } |
@@ -1611,9 +1609,16 @@ e1000_link_test(struct e1000_adapter *adapter, uint64_t *data) | |||
1611 | } | 1609 | } |
1612 | 1610 | ||
1613 | static int | 1611 | static int |
1614 | e1000_diag_test_count(struct net_device *netdev) | 1612 | e1000_get_sset_count(struct net_device *netdev, int sset) |
1615 | { | 1613 | { |
1616 | return E1000_TEST_LEN; | 1614 | switch (sset) { |
1615 | case ETH_SS_TEST: | ||
1616 | return E1000_TEST_LEN; | ||
1617 | case ETH_SS_STATS: | ||
1618 | return E1000_STATS_LEN; | ||
1619 | default: | ||
1620 | return -EOPNOTSUPP; | ||
1621 | } | ||
1617 | } | 1622 | } |
1618 | 1623 | ||
1619 | extern void e1000_power_up_phy(struct e1000_adapter *); | 1624 | extern void e1000_power_up_phy(struct e1000_adapter *); |
@@ -1898,12 +1903,6 @@ e1000_nway_reset(struct net_device *netdev) | |||
1898 | return 0; | 1903 | return 0; |
1899 | } | 1904 | } |
1900 | 1905 | ||
1901 | static int | ||
1902 | e1000_get_stats_count(struct net_device *netdev) | ||
1903 | { | ||
1904 | return E1000_STATS_LEN; | ||
1905 | } | ||
1906 | |||
1907 | static void | 1906 | static void |
1908 | e1000_get_ethtool_stats(struct net_device *netdev, | 1907 | e1000_get_ethtool_stats(struct net_device *netdev, |
1909 | struct ethtool_stats *stats, uint64_t *data) | 1908 | struct ethtool_stats *stats, uint64_t *data) |
@@ -1967,12 +1966,11 @@ static const struct ethtool_ops e1000_ethtool_ops = { | |||
1967 | .set_tx_csum = e1000_set_tx_csum, | 1966 | .set_tx_csum = e1000_set_tx_csum, |
1968 | .set_sg = ethtool_op_set_sg, | 1967 | .set_sg = ethtool_op_set_sg, |
1969 | .set_tso = e1000_set_tso, | 1968 | .set_tso = e1000_set_tso, |
1970 | .self_test_count = e1000_diag_test_count, | ||
1971 | .self_test = e1000_diag_test, | 1969 | .self_test = e1000_diag_test, |
1972 | .get_strings = e1000_get_strings, | 1970 | .get_strings = e1000_get_strings, |
1973 | .phys_id = e1000_phys_id, | 1971 | .phys_id = e1000_phys_id, |
1974 | .get_stats_count = e1000_get_stats_count, | ||
1975 | .get_ethtool_stats = e1000_get_ethtool_stats, | 1972 | .get_ethtool_stats = e1000_get_ethtool_stats, |
1973 | .get_sset_count = e1000_get_sset_count, | ||
1976 | }; | 1974 | }; |
1977 | 1975 | ||
1978 | void e1000_set_ethtool_ops(struct net_device *netdev) | 1976 | void e1000_set_ethtool_ops(struct net_device *netdev) |
diff --git a/drivers/net/e1000e/ethtool.c b/drivers/net/e1000e/ethtool.c index 0e80406bfbd7..3423f33769b7 100644 --- a/drivers/net/e1000e/ethtool.c +++ b/drivers/net/e1000e/ethtool.c | |||
@@ -577,8 +577,6 @@ static void e1000_get_drvinfo(struct net_device *netdev, | |||
577 | 577 | ||
578 | strncpy(drvinfo->fw_version, firmware_version, 32); | 578 | strncpy(drvinfo->fw_version, firmware_version, 32); |
579 | strncpy(drvinfo->bus_info, pci_name(adapter->pdev), 32); | 579 | strncpy(drvinfo->bus_info, pci_name(adapter->pdev), 32); |
580 | drvinfo->n_stats = E1000_STATS_LEN; | ||
581 | drvinfo->testinfo_len = E1000_TEST_LEN; | ||
582 | drvinfo->regdump_len = e1000_get_regs_len(netdev); | 580 | drvinfo->regdump_len = e1000_get_regs_len(netdev); |
583 | drvinfo->eedump_len = e1000_get_eeprom_len(netdev); | 581 | drvinfo->eedump_len = e1000_get_eeprom_len(netdev); |
584 | } | 582 | } |
@@ -1493,9 +1491,16 @@ static int e1000_link_test(struct e1000_adapter *adapter, u64 *data) | |||
1493 | return *data; | 1491 | return *data; |
1494 | } | 1492 | } |
1495 | 1493 | ||
1496 | static int e1000_diag_test_count(struct net_device *netdev) | 1494 | static int e1000e_get_sset_count(struct net_device *netdev, int sset) |
1497 | { | 1495 | { |
1498 | return E1000_TEST_LEN; | 1496 | switch (sset) { |
1497 | case ETH_SS_TEST: | ||
1498 | return E1000_TEST_LEN; | ||
1499 | case ETH_SS_STATS: | ||
1500 | return E1000_STATS_LEN; | ||
1501 | default: | ||
1502 | return -EOPNOTSUPP; | ||
1503 | } | ||
1499 | } | 1504 | } |
1500 | 1505 | ||
1501 | static void e1000_diag_test(struct net_device *netdev, | 1506 | static void e1000_diag_test(struct net_device *netdev, |
@@ -1692,11 +1697,6 @@ static int e1000_nway_reset(struct net_device *netdev) | |||
1692 | return 0; | 1697 | return 0; |
1693 | } | 1698 | } |
1694 | 1699 | ||
1695 | static int e1000_get_stats_count(struct net_device *netdev) | ||
1696 | { | ||
1697 | return E1000_STATS_LEN; | ||
1698 | } | ||
1699 | |||
1700 | static void e1000_get_ethtool_stats(struct net_device *netdev, | 1700 | static void e1000_get_ethtool_stats(struct net_device *netdev, |
1701 | struct ethtool_stats *stats, | 1701 | struct ethtool_stats *stats, |
1702 | u64 *data) | 1702 | u64 *data) |
@@ -1760,12 +1760,11 @@ static const struct ethtool_ops e1000_ethtool_ops = { | |||
1760 | .set_sg = ethtool_op_set_sg, | 1760 | .set_sg = ethtool_op_set_sg, |
1761 | .get_tso = ethtool_op_get_tso, | 1761 | .get_tso = ethtool_op_get_tso, |
1762 | .set_tso = e1000_set_tso, | 1762 | .set_tso = e1000_set_tso, |
1763 | .self_test_count = e1000_diag_test_count, | ||
1764 | .self_test = e1000_diag_test, | 1763 | .self_test = e1000_diag_test, |
1765 | .get_strings = e1000_get_strings, | 1764 | .get_strings = e1000_get_strings, |
1766 | .phys_id = e1000_phys_id, | 1765 | .phys_id = e1000_phys_id, |
1767 | .get_stats_count = e1000_get_stats_count, | ||
1768 | .get_ethtool_stats = e1000_get_ethtool_stats, | 1766 | .get_ethtool_stats = e1000_get_ethtool_stats, |
1767 | .get_sset_count = e1000e_get_sset_count, | ||
1769 | }; | 1768 | }; |
1770 | 1769 | ||
1771 | void e1000e_set_ethtool_ops(struct net_device *netdev) | 1770 | void e1000e_set_ethtool_ops(struct net_device *netdev) |
diff --git a/drivers/net/ehea/ehea_ethtool.c b/drivers/net/ehea/ehea_ethtool.c index 6498455bf97c..679f40ee9572 100644 --- a/drivers/net/ehea/ehea_ethtool.c +++ b/drivers/net/ehea/ehea_ethtool.c | |||
@@ -196,9 +196,14 @@ static void ehea_get_strings(struct net_device *dev, u32 stringset, u8 *data) | |||
196 | } | 196 | } |
197 | } | 197 | } |
198 | 198 | ||
199 | static int ehea_get_stats_count(struct net_device *dev) | 199 | static int ehea_get_sset_count(struct net_device *dev, int sset) |
200 | { | 200 | { |
201 | return ARRAY_SIZE(ehea_ethtool_stats_keys); | 201 | switch (sset) { |
202 | case ETH_SS_STATS: | ||
203 | return ARRAY_SIZE(ehea_ethtool_stats_keys); | ||
204 | default: | ||
205 | return -EOPNOTSUPP; | ||
206 | } | ||
202 | } | 207 | } |
203 | 208 | ||
204 | static void ehea_get_ethtool_stats(struct net_device *dev, | 209 | static void ehea_get_ethtool_stats(struct net_device *dev, |
@@ -207,7 +212,7 @@ static void ehea_get_ethtool_stats(struct net_device *dev, | |||
207 | int i, k, tmp; | 212 | int i, k, tmp; |
208 | struct ehea_port *port = netdev_priv(dev); | 213 | struct ehea_port *port = netdev_priv(dev); |
209 | 214 | ||
210 | for (i = 0; i < ehea_get_stats_count(dev); i++) | 215 | for (i = 0; i < ehea_get_sset_count(dev, ETH_SS_STATS); i++) |
211 | data[i] = 0; | 216 | data[i] = 0; |
212 | i = 0; | 217 | i = 0; |
213 | 218 | ||
@@ -264,7 +269,7 @@ const struct ethtool_ops ehea_ethtool_ops = { | |||
264 | .get_link = ethtool_op_get_link, | 269 | .get_link = ethtool_op_get_link, |
265 | .set_tso = ethtool_op_set_tso, | 270 | .set_tso = ethtool_op_set_tso, |
266 | .get_strings = ehea_get_strings, | 271 | .get_strings = ehea_get_strings, |
267 | .get_stats_count = ehea_get_stats_count, | 272 | .get_sset_count = ehea_get_sset_count, |
268 | .get_ethtool_stats = ehea_get_ethtool_stats, | 273 | .get_ethtool_stats = ehea_get_ethtool_stats, |
269 | .get_rx_csum = ehea_get_rx_csum, | 274 | .get_rx_csum = ehea_get_rx_csum, |
270 | .set_settings = ehea_set_settings, | 275 | .set_settings = ehea_set_settings, |
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c index f7354bc9b009..666de42e5a76 100644 --- a/drivers/net/forcedeth.c +++ b/drivers/net/forcedeth.c | |||
@@ -4333,16 +4333,26 @@ static int nv_set_sg(struct net_device *dev, u32 data) | |||
4333 | return -EOPNOTSUPP; | 4333 | return -EOPNOTSUPP; |
4334 | } | 4334 | } |
4335 | 4335 | ||
4336 | static int nv_get_stats_count(struct net_device *dev) | 4336 | static int nv_get_sset_count(struct net_device *dev, int sset) |
4337 | { | 4337 | { |
4338 | struct fe_priv *np = netdev_priv(dev); | 4338 | struct fe_priv *np = netdev_priv(dev); |
4339 | 4339 | ||
4340 | if (np->driver_data & DEV_HAS_STATISTICS_V1) | 4340 | switch (sset) { |
4341 | return NV_DEV_STATISTICS_V1_COUNT; | 4341 | case ETH_SS_TEST: |
4342 | else if (np->driver_data & DEV_HAS_STATISTICS_V2) | 4342 | if (np->driver_data & DEV_HAS_TEST_EXTENDED) |
4343 | return NV_DEV_STATISTICS_V2_COUNT; | 4343 | return NV_TEST_COUNT_EXTENDED; |
4344 | else | 4344 | else |
4345 | return 0; | 4345 | return NV_TEST_COUNT_BASE; |
4346 | case ETH_SS_STATS: | ||
4347 | if (np->driver_data & DEV_HAS_STATISTICS_V1) | ||
4348 | return NV_DEV_STATISTICS_V1_COUNT; | ||
4349 | else if (np->driver_data & DEV_HAS_STATISTICS_V2) | ||
4350 | return NV_DEV_STATISTICS_V2_COUNT; | ||
4351 | else | ||
4352 | return 0; | ||
4353 | default: | ||
4354 | return -EOPNOTSUPP; | ||
4355 | } | ||
4346 | } | 4356 | } |
4347 | 4357 | ||
4348 | static void nv_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *estats, u64 *buffer) | 4358 | static void nv_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *estats, u64 *buffer) |
@@ -4352,17 +4362,7 @@ static void nv_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *e | |||
4352 | /* update stats */ | 4362 | /* update stats */ |
4353 | nv_do_stats_poll((unsigned long)dev); | 4363 | nv_do_stats_poll((unsigned long)dev); |
4354 | 4364 | ||
4355 | memcpy(buffer, &np->estats, nv_get_stats_count(dev)*sizeof(u64)); | 4365 | memcpy(buffer, &np->estats, nv_get_sset_count(dev, ETH_SS_STATS)*sizeof(u64)); |
4356 | } | ||
4357 | |||
4358 | static int nv_self_test_count(struct net_device *dev) | ||
4359 | { | ||
4360 | struct fe_priv *np = netdev_priv(dev); | ||
4361 | |||
4362 | if (np->driver_data & DEV_HAS_TEST_EXTENDED) | ||
4363 | return NV_TEST_COUNT_EXTENDED; | ||
4364 | else | ||
4365 | return NV_TEST_COUNT_BASE; | ||
4366 | } | 4366 | } |
4367 | 4367 | ||
4368 | static int nv_link_test(struct net_device *dev) | 4368 | static int nv_link_test(struct net_device *dev) |
@@ -4609,7 +4609,7 @@ static void nv_self_test(struct net_device *dev, struct ethtool_test *test, u64 | |||
4609 | struct fe_priv *np = netdev_priv(dev); | 4609 | struct fe_priv *np = netdev_priv(dev); |
4610 | u8 __iomem *base = get_hwbase(dev); | 4610 | u8 __iomem *base = get_hwbase(dev); |
4611 | int result; | 4611 | int result; |
4612 | memset(buffer, 0, nv_self_test_count(dev)*sizeof(u64)); | 4612 | memset(buffer, 0, nv_get_sset_count(dev, ETH_SS_TEST)*sizeof(u64)); |
4613 | 4613 | ||
4614 | if (!nv_link_test(dev)) { | 4614 | if (!nv_link_test(dev)) { |
4615 | test->flags |= ETH_TEST_FL_FAILED; | 4615 | test->flags |= ETH_TEST_FL_FAILED; |
@@ -4692,10 +4692,10 @@ static void nv_get_strings(struct net_device *dev, u32 stringset, u8 *buffer) | |||
4692 | { | 4692 | { |
4693 | switch (stringset) { | 4693 | switch (stringset) { |
4694 | case ETH_SS_STATS: | 4694 | case ETH_SS_STATS: |
4695 | memcpy(buffer, &nv_estats_str, nv_get_stats_count(dev)*sizeof(struct nv_ethtool_str)); | 4695 | memcpy(buffer, &nv_estats_str, nv_get_sset_count(dev, ETH_SS_STATS)*sizeof(struct nv_ethtool_str)); |
4696 | break; | 4696 | break; |
4697 | case ETH_SS_TEST: | 4697 | case ETH_SS_TEST: |
4698 | memcpy(buffer, &nv_etests_str, nv_self_test_count(dev)*sizeof(struct nv_ethtool_str)); | 4698 | memcpy(buffer, &nv_etests_str, nv_get_sset_count(dev, ETH_SS_TEST)*sizeof(struct nv_ethtool_str)); |
4699 | break; | 4699 | break; |
4700 | } | 4700 | } |
4701 | } | 4701 | } |
@@ -4720,9 +4720,8 @@ static const struct ethtool_ops ops = { | |||
4720 | .set_tx_csum = nv_set_tx_csum, | 4720 | .set_tx_csum = nv_set_tx_csum, |
4721 | .set_sg = nv_set_sg, | 4721 | .set_sg = nv_set_sg, |
4722 | .get_strings = nv_get_strings, | 4722 | .get_strings = nv_get_strings, |
4723 | .get_stats_count = nv_get_stats_count, | ||
4724 | .get_ethtool_stats = nv_get_ethtool_stats, | 4723 | .get_ethtool_stats = nv_get_ethtool_stats, |
4725 | .self_test_count = nv_self_test_count, | 4724 | .get_sset_count = nv_get_sset_count, |
4726 | .self_test = nv_self_test, | 4725 | .self_test = nv_self_test, |
4727 | }; | 4726 | }; |
4728 | 4727 | ||
diff --git a/drivers/net/gianfar_ethtool.c b/drivers/net/gianfar_ethtool.c index 2470903fbc74..6007147cc1e9 100644 --- a/drivers/net/gianfar_ethtool.c +++ b/drivers/net/gianfar_ethtool.c | |||
@@ -152,15 +152,19 @@ static void gfar_fill_stats(struct net_device *dev, struct ethtool_stats *dummy, | |||
152 | buf[i] = extra[i]; | 152 | buf[i] = extra[i]; |
153 | } | 153 | } |
154 | 154 | ||
155 | /* Returns the number of stats (and their corresponding strings) */ | 155 | static int gfar_sset_count(struct net_device *dev, int sset) |
156 | static int gfar_stats_count(struct net_device *dev) | ||
157 | { | 156 | { |
158 | struct gfar_private *priv = netdev_priv(dev); | 157 | struct gfar_private *priv = netdev_priv(dev); |
159 | 158 | ||
160 | if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_RMON) | 159 | switch (sset) { |
161 | return GFAR_STATS_LEN; | 160 | case ETH_SS_STATS: |
162 | else | 161 | if (priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_RMON) |
163 | return GFAR_EXTRA_STATS_LEN; | 162 | return GFAR_STATS_LEN; |
163 | else | ||
164 | return GFAR_EXTRA_STATS_LEN; | ||
165 | default: | ||
166 | return -EOPNOTSUPP; | ||
167 | } | ||
164 | } | 168 | } |
165 | 169 | ||
166 | /* Fills in the drvinfo structure with some basic info */ | 170 | /* Fills in the drvinfo structure with some basic info */ |
@@ -171,8 +175,6 @@ static void gfar_gdrvinfo(struct net_device *dev, struct | |||
171 | strncpy(drvinfo->version, gfar_driver_version, GFAR_INFOSTR_LEN); | 175 | strncpy(drvinfo->version, gfar_driver_version, GFAR_INFOSTR_LEN); |
172 | strncpy(drvinfo->fw_version, "N/A", GFAR_INFOSTR_LEN); | 176 | strncpy(drvinfo->fw_version, "N/A", GFAR_INFOSTR_LEN); |
173 | strncpy(drvinfo->bus_info, "N/A", GFAR_INFOSTR_LEN); | 177 | strncpy(drvinfo->bus_info, "N/A", GFAR_INFOSTR_LEN); |
174 | drvinfo->n_stats = GFAR_STATS_LEN; | ||
175 | drvinfo->testinfo_len = 0; | ||
176 | drvinfo->regdump_len = 0; | 178 | drvinfo->regdump_len = 0; |
177 | drvinfo->eedump_len = 0; | 179 | drvinfo->eedump_len = 0; |
178 | } | 180 | } |
@@ -575,7 +577,7 @@ const struct ethtool_ops gfar_ethtool_ops = { | |||
575 | .get_ringparam = gfar_gringparam, | 577 | .get_ringparam = gfar_gringparam, |
576 | .set_ringparam = gfar_sringparam, | 578 | .set_ringparam = gfar_sringparam, |
577 | .get_strings = gfar_gstrings, | 579 | .get_strings = gfar_gstrings, |
578 | .get_stats_count = gfar_stats_count, | 580 | .get_sset_count = gfar_sset_count, |
579 | .get_ethtool_stats = gfar_fill_stats, | 581 | .get_ethtool_stats = gfar_fill_stats, |
580 | .get_rx_csum = gfar_get_rx_csum, | 582 | .get_rx_csum = gfar_get_rx_csum, |
581 | .get_tx_csum = gfar_get_tx_csum, | 583 | .get_tx_csum = gfar_get_tx_csum, |
diff --git a/drivers/net/ibm_emac/ibm_emac_core.c b/drivers/net/ibm_emac/ibm_emac_core.c index 7d4fa7644e4b..73664f226f32 100644 --- a/drivers/net/ibm_emac/ibm_emac_core.c +++ b/drivers/net/ibm_emac/ibm_emac_core.c | |||
@@ -1842,9 +1842,14 @@ static int emac_ethtool_nway_reset(struct net_device *ndev) | |||
1842 | return res; | 1842 | return res; |
1843 | } | 1843 | } |
1844 | 1844 | ||
1845 | static int emac_ethtool_get_stats_count(struct net_device *ndev) | 1845 | static int emac_get_sset_count(struct net_device *ndev, int sset) |
1846 | { | 1846 | { |
1847 | return EMAC_ETHTOOL_STATS_COUNT; | 1847 | switch (sset) { |
1848 | case ETH_SS_STATS: | ||
1849 | return EMAC_ETHTOOL_STATS_COUNT; | ||
1850 | default: | ||
1851 | return -EOPNOTSUPP; | ||
1852 | } | ||
1848 | } | 1853 | } |
1849 | 1854 | ||
1850 | static void emac_ethtool_get_strings(struct net_device *ndev, u32 stringset, | 1855 | static void emac_ethtool_get_strings(struct net_device *ndev, u32 stringset, |
@@ -1875,7 +1880,6 @@ static void emac_ethtool_get_drvinfo(struct net_device *ndev, | |||
1875 | strcpy(info->version, DRV_VERSION); | 1880 | strcpy(info->version, DRV_VERSION); |
1876 | info->fw_version[0] = '\0'; | 1881 | info->fw_version[0] = '\0'; |
1877 | sprintf(info->bus_info, "PPC 4xx EMAC %d", dev->def->index); | 1882 | sprintf(info->bus_info, "PPC 4xx EMAC %d", dev->def->index); |
1878 | info->n_stats = emac_ethtool_get_stats_count(ndev); | ||
1879 | info->regdump_len = emac_ethtool_get_regs_len(ndev); | 1883 | info->regdump_len = emac_ethtool_get_regs_len(ndev); |
1880 | } | 1884 | } |
1881 | 1885 | ||
@@ -1895,7 +1899,7 @@ static const struct ethtool_ops emac_ethtool_ops = { | |||
1895 | .get_rx_csum = emac_ethtool_get_rx_csum, | 1899 | .get_rx_csum = emac_ethtool_get_rx_csum, |
1896 | 1900 | ||
1897 | .get_strings = emac_ethtool_get_strings, | 1901 | .get_strings = emac_ethtool_get_strings, |
1898 | .get_stats_count = emac_ethtool_get_stats_count, | 1902 | .get_sset_count = emac_get_sset_count, |
1899 | .get_ethtool_stats = emac_ethtool_get_ethtool_stats, | 1903 | .get_ethtool_stats = emac_ethtool_get_ethtool_stats, |
1900 | 1904 | ||
1901 | .get_link = ethtool_op_get_link, | 1905 | .get_link = ethtool_op_get_link, |
diff --git a/drivers/net/ibmveth.c b/drivers/net/ibmveth.c index 228973484ed8..4ac161e1ca12 100644 --- a/drivers/net/ibmveth.c +++ b/drivers/net/ibmveth.c | |||
@@ -802,9 +802,14 @@ static void ibmveth_get_strings(struct net_device *dev, u32 stringset, u8 *data) | |||
802 | memcpy(data, ibmveth_stats[i].name, ETH_GSTRING_LEN); | 802 | memcpy(data, ibmveth_stats[i].name, ETH_GSTRING_LEN); |
803 | } | 803 | } |
804 | 804 | ||
805 | static int ibmveth_get_stats_count(struct net_device *dev) | 805 | static int ibmveth_get_sset_count(struct net_device *dev, int sset) |
806 | { | 806 | { |
807 | return ARRAY_SIZE(ibmveth_stats); | 807 | switch (sset) { |
808 | case ETH_SS_STATS: | ||
809 | return ARRAY_SIZE(ibmveth_stats); | ||
810 | default: | ||
811 | return -EOPNOTSUPP; | ||
812 | } | ||
808 | } | 813 | } |
809 | 814 | ||
810 | static void ibmveth_get_ethtool_stats(struct net_device *dev, | 815 | static void ibmveth_get_ethtool_stats(struct net_device *dev, |
@@ -825,7 +830,7 @@ static const struct ethtool_ops netdev_ethtool_ops = { | |||
825 | .get_rx_csum = ibmveth_get_rx_csum, | 830 | .get_rx_csum = ibmveth_get_rx_csum, |
826 | .set_rx_csum = ibmveth_set_rx_csum, | 831 | .set_rx_csum = ibmveth_set_rx_csum, |
827 | .get_strings = ibmveth_get_strings, | 832 | .get_strings = ibmveth_get_strings, |
828 | .get_stats_count = ibmveth_get_stats_count, | 833 | .get_sset_count = ibmveth_get_sset_count, |
829 | .get_ethtool_stats = ibmveth_get_ethtool_stats, | 834 | .get_ethtool_stats = ibmveth_get_ethtool_stats, |
830 | }; | 835 | }; |
831 | 836 | ||
diff --git a/drivers/net/ixgb/ixgb_ethtool.c b/drivers/net/ixgb/ixgb_ethtool.c index 181b59dc1ac3..ddad26bb5c58 100644 --- a/drivers/net/ixgb/ixgb_ethtool.c +++ b/drivers/net/ixgb/ixgb_ethtool.c | |||
@@ -659,9 +659,14 @@ ixgb_phys_id(struct net_device *netdev, uint32_t data) | |||
659 | } | 659 | } |
660 | 660 | ||
661 | static int | 661 | static int |
662 | ixgb_get_stats_count(struct net_device *netdev) | 662 | ixgb_get_sset_count(struct net_device *netdev, int sset) |
663 | { | 663 | { |
664 | return IXGB_STATS_LEN; | 664 | switch (sset) { |
665 | case ETH_SS_STATS: | ||
666 | return IXGB_STATS_LEN; | ||
667 | default: | ||
668 | return -EOPNOTSUPP; | ||
669 | } | ||
665 | } | 670 | } |
666 | 671 | ||
667 | static void | 672 | static void |
@@ -719,7 +724,7 @@ static const struct ethtool_ops ixgb_ethtool_ops = { | |||
719 | .set_tso = ixgb_set_tso, | 724 | .set_tso = ixgb_set_tso, |
720 | .get_strings = ixgb_get_strings, | 725 | .get_strings = ixgb_get_strings, |
721 | .phys_id = ixgb_phys_id, | 726 | .phys_id = ixgb_phys_id, |
722 | .get_stats_count = ixgb_get_stats_count, | 727 | .get_sset_count = ixgb_get_sset_count, |
723 | .get_ethtool_stats = ixgb_get_ethtool_stats, | 728 | .get_ethtool_stats = ixgb_get_ethtool_stats, |
724 | }; | 729 | }; |
725 | 730 | ||
diff --git a/drivers/net/ixgbe/ixgbe_ethtool.c b/drivers/net/ixgbe/ixgbe_ethtool.c index 43a2a46e2874..a4e576a0c543 100644 --- a/drivers/net/ixgbe/ixgbe_ethtool.c +++ b/drivers/net/ixgbe/ixgbe_ethtool.c | |||
@@ -737,9 +737,14 @@ err_setup: | |||
737 | return err; | 737 | return err; |
738 | } | 738 | } |
739 | 739 | ||
740 | static int ixgbe_get_stats_count(struct net_device *netdev) | 740 | static int ixgbe_get_sset_count(struct net_device *netdev, int sset) |
741 | { | 741 | { |
742 | return IXGBE_STATS_LEN; | 742 | switch (sset) { |
743 | case ETH_SS_STATS: | ||
744 | return IXGBE_STATS_LEN; | ||
745 | default: | ||
746 | return -EOPNOTSUPP; | ||
747 | } | ||
743 | } | 748 | } |
744 | 749 | ||
745 | static void ixgbe_get_ethtool_stats(struct net_device *netdev, | 750 | static void ixgbe_get_ethtool_stats(struct net_device *netdev, |
@@ -931,7 +936,7 @@ static struct ethtool_ops ixgbe_ethtool_ops = { | |||
931 | .set_tso = ixgbe_set_tso, | 936 | .set_tso = ixgbe_set_tso, |
932 | .get_strings = ixgbe_get_strings, | 937 | .get_strings = ixgbe_get_strings, |
933 | .phys_id = ixgbe_phys_id, | 938 | .phys_id = ixgbe_phys_id, |
934 | .get_stats_count = ixgbe_get_stats_count, | 939 | .get_sset_count = ixgbe_get_sset_count, |
935 | .get_ethtool_stats = ixgbe_get_ethtool_stats, | 940 | .get_ethtool_stats = ixgbe_get_ethtool_stats, |
936 | .get_coalesce = ixgbe_get_coalesce, | 941 | .get_coalesce = ixgbe_get_coalesce, |
937 | .set_coalesce = ixgbe_set_coalesce, | 942 | .set_coalesce = ixgbe_set_coalesce, |
diff --git a/drivers/net/mv643xx_eth.c b/drivers/net/mv643xx_eth.c index e379165d8375..b33d21f4efff 100644 --- a/drivers/net/mv643xx_eth.c +++ b/drivers/net/mv643xx_eth.c | |||
@@ -2674,9 +2674,14 @@ static void mv643xx_get_drvinfo(struct net_device *netdev, | |||
2674 | drvinfo->n_stats = MV643XX_STATS_LEN; | 2674 | drvinfo->n_stats = MV643XX_STATS_LEN; |
2675 | } | 2675 | } |
2676 | 2676 | ||
2677 | static int mv643xx_get_stats_count(struct net_device *netdev) | 2677 | static int mv643xx_get_sset_count(struct net_device *netdev, int sset) |
2678 | { | 2678 | { |
2679 | return MV643XX_STATS_LEN; | 2679 | switch (sset) { |
2680 | case ETH_SS_STATS: | ||
2681 | return MV643XX_STATS_LEN; | ||
2682 | default: | ||
2683 | return -EOPNOTSUPP; | ||
2684 | } | ||
2680 | } | 2685 | } |
2681 | 2686 | ||
2682 | static void mv643xx_get_ethtool_stats(struct net_device *netdev, | 2687 | static void mv643xx_get_ethtool_stats(struct net_device *netdev, |
@@ -2737,7 +2742,6 @@ static const struct ethtool_ops mv643xx_ethtool_ops = { | |||
2737 | .get_drvinfo = mv643xx_get_drvinfo, | 2742 | .get_drvinfo = mv643xx_get_drvinfo, |
2738 | .get_link = mv643xx_eth_get_link, | 2743 | .get_link = mv643xx_eth_get_link, |
2739 | .set_sg = ethtool_op_set_sg, | 2744 | .set_sg = ethtool_op_set_sg, |
2740 | .get_stats_count = mv643xx_get_stats_count, | ||
2741 | .get_ethtool_stats = mv643xx_get_ethtool_stats, | 2745 | .get_ethtool_stats = mv643xx_get_ethtool_stats, |
2742 | .get_strings = mv643xx_get_strings, | 2746 | .get_strings = mv643xx_get_strings, |
2743 | .nway_reset = mv643xx_eth_nway_restart, | 2747 | .nway_reset = mv643xx_eth_nway_restart, |
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c index 38b03f538e95..e8afa101433e 100644 --- a/drivers/net/myri10ge/myri10ge.c +++ b/drivers/net/myri10ge/myri10ge.c | |||
@@ -1418,9 +1418,14 @@ myri10ge_get_strings(struct net_device *netdev, u32 stringset, u8 * data) | |||
1418 | } | 1418 | } |
1419 | } | 1419 | } |
1420 | 1420 | ||
1421 | static int myri10ge_get_stats_count(struct net_device *netdev) | 1421 | static int myri10ge_get_sset_count(struct net_device *netdev, int sset) |
1422 | { | 1422 | { |
1423 | return MYRI10GE_STATS_LEN; | 1423 | switch (sset) { |
1424 | case ETH_SS_STATS: | ||
1425 | return MYRI10GE_STATS_LEN; | ||
1426 | default: | ||
1427 | return -EOPNOTSUPP; | ||
1428 | } | ||
1424 | } | 1429 | } |
1425 | 1430 | ||
1426 | static void | 1431 | static void |
@@ -1504,7 +1509,7 @@ static const struct ethtool_ops myri10ge_ethtool_ops = { | |||
1504 | .set_tso = ethtool_op_set_tso, | 1509 | .set_tso = ethtool_op_set_tso, |
1505 | .get_link = ethtool_op_get_link, | 1510 | .get_link = ethtool_op_get_link, |
1506 | .get_strings = myri10ge_get_strings, | 1511 | .get_strings = myri10ge_get_strings, |
1507 | .get_stats_count = myri10ge_get_stats_count, | 1512 | .get_sset_count = myri10ge_get_sset_count, |
1508 | .get_ethtool_stats = myri10ge_get_ethtool_stats, | 1513 | .get_ethtool_stats = myri10ge_get_ethtool_stats, |
1509 | .set_msglevel = myri10ge_set_msglevel, | 1514 | .set_msglevel = myri10ge_set_msglevel, |
1510 | .get_msglevel = myri10ge_get_msglevel | 1515 | .get_msglevel = myri10ge_get_msglevel |
diff --git a/drivers/net/netxen/netxen_nic_ethtool.c b/drivers/net/netxen/netxen_nic_ethtool.c index 08c76b343663..78e42316e70f 100644 --- a/drivers/net/netxen/netxen_nic_ethtool.c +++ b/drivers/net/netxen/netxen_nic_ethtool.c | |||
@@ -115,8 +115,6 @@ netxen_nic_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *drvinfo) | |||
115 | sprintf(drvinfo->fw_version, "%d.%d.%d", fw_major, fw_minor, fw_build); | 115 | sprintf(drvinfo->fw_version, "%d.%d.%d", fw_major, fw_minor, fw_build); |
116 | 116 | ||
117 | strncpy(drvinfo->bus_info, pci_name(adapter->pdev), 32); | 117 | strncpy(drvinfo->bus_info, pci_name(adapter->pdev), 32); |
118 | drvinfo->n_stats = NETXEN_NIC_STATS_LEN; | ||
119 | drvinfo->testinfo_len = NETXEN_NIC_TEST_LEN; | ||
120 | drvinfo->regdump_len = NETXEN_NIC_REGS_LEN; | 118 | drvinfo->regdump_len = NETXEN_NIC_REGS_LEN; |
121 | drvinfo->eedump_len = netxen_nic_get_eeprom_len(dev); | 119 | drvinfo->eedump_len = netxen_nic_get_eeprom_len(dev); |
122 | } | 120 | } |
@@ -672,9 +670,16 @@ static int netxen_nic_reg_test(struct net_device *dev) | |||
672 | return 0; | 670 | return 0; |
673 | } | 671 | } |
674 | 672 | ||
675 | static int netxen_nic_diag_test_count(struct net_device *dev) | 673 | static int netxen_get_sset_count(struct net_device *dev, int sset) |
676 | { | 674 | { |
677 | return NETXEN_NIC_TEST_LEN; | 675 | switch (sset) { |
676 | case ETH_SS_TEST: | ||
677 | return NETXEN_NIC_TEST_LEN; | ||
678 | case ETH_SS_STATS: | ||
679 | return NETXEN_NIC_STATS_LEN; | ||
680 | default: | ||
681 | return -EOPNOTSUPP; | ||
682 | } | ||
678 | } | 683 | } |
679 | 684 | ||
680 | static void | 685 | static void |
@@ -709,11 +714,6 @@ netxen_nic_get_strings(struct net_device *dev, u32 stringset, u8 * data) | |||
709 | } | 714 | } |
710 | } | 715 | } |
711 | 716 | ||
712 | static int netxen_nic_get_stats_count(struct net_device *dev) | ||
713 | { | ||
714 | return NETXEN_NIC_STATS_LEN; | ||
715 | } | ||
716 | |||
717 | static void | 717 | static void |
718 | netxen_nic_get_ethtool_stats(struct net_device *dev, | 718 | netxen_nic_get_ethtool_stats(struct net_device *dev, |
719 | struct ethtool_stats *stats, u64 * data) | 719 | struct ethtool_stats *stats, u64 * data) |
@@ -747,9 +747,8 @@ struct ethtool_ops netxen_nic_ethtool_ops = { | |||
747 | .set_tx_csum = ethtool_op_set_tx_csum, | 747 | .set_tx_csum = ethtool_op_set_tx_csum, |
748 | .set_sg = ethtool_op_set_sg, | 748 | .set_sg = ethtool_op_set_sg, |
749 | .set_tso = ethtool_op_set_tso, | 749 | .set_tso = ethtool_op_set_tso, |
750 | .self_test_count = netxen_nic_diag_test_count, | ||
751 | .self_test = netxen_nic_diag_test, | 750 | .self_test = netxen_nic_diag_test, |
752 | .get_strings = netxen_nic_get_strings, | 751 | .get_strings = netxen_nic_get_strings, |
753 | .get_stats_count = netxen_nic_get_stats_count, | ||
754 | .get_ethtool_stats = netxen_nic_get_ethtool_stats, | 752 | .get_ethtool_stats = netxen_nic_get_ethtool_stats, |
753 | .get_sset_count = netxen_get_sset_count, | ||
755 | }; | 754 | }; |
diff --git a/drivers/net/pcnet32.c b/drivers/net/pcnet32.c index 4840ddea71ac..36f92dd55508 100644 --- a/drivers/net/pcnet32.c +++ b/drivers/net/pcnet32.c | |||
@@ -847,9 +847,14 @@ static void pcnet32_get_strings(struct net_device *dev, u32 stringset, | |||
847 | memcpy(data, pcnet32_gstrings_test, sizeof(pcnet32_gstrings_test)); | 847 | memcpy(data, pcnet32_gstrings_test, sizeof(pcnet32_gstrings_test)); |
848 | } | 848 | } |
849 | 849 | ||
850 | static int pcnet32_self_test_count(struct net_device *dev) | 850 | static int pcnet32_get_sset_count(struct net_device *dev, int sset) |
851 | { | 851 | { |
852 | return PCNET32_TEST_LEN; | 852 | switch (sset) { |
853 | case ETH_SS_TEST: | ||
854 | return PCNET32_TEST_LEN; | ||
855 | default: | ||
856 | return -EOPNOTSUPP; | ||
857 | } | ||
853 | } | 858 | } |
854 | 859 | ||
855 | static void pcnet32_ethtool_test(struct net_device *dev, | 860 | static void pcnet32_ethtool_test(struct net_device *dev, |
@@ -1510,11 +1515,11 @@ static const struct ethtool_ops pcnet32_ethtool_ops = { | |||
1510 | .get_ringparam = pcnet32_get_ringparam, | 1515 | .get_ringparam = pcnet32_get_ringparam, |
1511 | .set_ringparam = pcnet32_set_ringparam, | 1516 | .set_ringparam = pcnet32_set_ringparam, |
1512 | .get_strings = pcnet32_get_strings, | 1517 | .get_strings = pcnet32_get_strings, |
1513 | .self_test_count = pcnet32_self_test_count, | ||
1514 | .self_test = pcnet32_ethtool_test, | 1518 | .self_test = pcnet32_ethtool_test, |
1515 | .phys_id = pcnet32_phys_id, | 1519 | .phys_id = pcnet32_phys_id, |
1516 | .get_regs_len = pcnet32_get_regs_len, | 1520 | .get_regs_len = pcnet32_get_regs_len, |
1517 | .get_regs = pcnet32_get_regs, | 1521 | .get_regs = pcnet32_get_regs, |
1522 | .get_sset_count = pcnet32_get_sset_count, | ||
1518 | }; | 1523 | }; |
1519 | 1524 | ||
1520 | /* only probes for non-PCI devices, the rest are handled by | 1525 | /* only probes for non-PCI devices, the rest are handled by |
diff --git a/drivers/net/qla3xxx.c b/drivers/net/qla3xxx.c index ed79aa820df2..48069ece4e51 100755 --- a/drivers/net/qla3xxx.c +++ b/drivers/net/qla3xxx.c | |||
@@ -1865,8 +1865,6 @@ static void ql_get_drvinfo(struct net_device *ndev, | |||
1865 | strncpy(drvinfo->version, ql3xxx_driver_version, 32); | 1865 | strncpy(drvinfo->version, ql3xxx_driver_version, 32); |
1866 | strncpy(drvinfo->fw_version, "N/A", 32); | 1866 | strncpy(drvinfo->fw_version, "N/A", 32); |
1867 | strncpy(drvinfo->bus_info, pci_name(qdev->pdev), 32); | 1867 | strncpy(drvinfo->bus_info, pci_name(qdev->pdev), 32); |
1868 | drvinfo->n_stats = 0; | ||
1869 | drvinfo->testinfo_len = 0; | ||
1870 | drvinfo->regdump_len = 0; | 1868 | drvinfo->regdump_len = 0; |
1871 | drvinfo->eedump_len = 0; | 1869 | drvinfo->eedump_len = 0; |
1872 | } | 1870 | } |
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c index 06a1a6f2d17b..eecd811feead 100644 --- a/drivers/net/r8169.c +++ b/drivers/net/r8169.c | |||
@@ -992,9 +992,14 @@ struct rtl8169_counters { | |||
992 | u16 tx_underun; | 992 | u16 tx_underun; |
993 | }; | 993 | }; |
994 | 994 | ||
995 | static int rtl8169_get_stats_count(struct net_device *dev) | 995 | static int rtl8169_get_sset_count(struct net_device *dev, int sset) |
996 | { | 996 | { |
997 | return ARRAY_SIZE(rtl8169_gstrings); | 997 | switch (sset) { |
998 | case ETH_SS_STATS: | ||
999 | return ARRAY_SIZE(rtl8169_gstrings); | ||
1000 | default: | ||
1001 | return -EOPNOTSUPP; | ||
1002 | } | ||
998 | } | 1003 | } |
999 | 1004 | ||
1000 | static void rtl8169_get_ethtool_stats(struct net_device *dev, | 1005 | static void rtl8169_get_ethtool_stats(struct net_device *dev, |
@@ -1068,7 +1073,7 @@ static const struct ethtool_ops rtl8169_ethtool_ops = { | |||
1068 | .get_wol = rtl8169_get_wol, | 1073 | .get_wol = rtl8169_get_wol, |
1069 | .set_wol = rtl8169_set_wol, | 1074 | .set_wol = rtl8169_set_wol, |
1070 | .get_strings = rtl8169_get_strings, | 1075 | .get_strings = rtl8169_get_strings, |
1071 | .get_stats_count = rtl8169_get_stats_count, | 1076 | .get_sset_count = rtl8169_get_sset_count, |
1072 | .get_ethtool_stats = rtl8169_get_ethtool_stats, | 1077 | .get_ethtool_stats = rtl8169_get_ethtool_stats, |
1073 | }; | 1078 | }; |
1074 | 1079 | ||
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c index 26895de3e264..7f6b0e611e3b 100644 --- a/drivers/net/s2io.c +++ b/drivers/net/s2io.c | |||
@@ -5040,12 +5040,6 @@ static void s2io_ethtool_gdrvinfo(struct net_device *dev, | |||
5040 | strncpy(info->bus_info, pci_name(sp->pdev), sizeof(info->bus_info)); | 5040 | strncpy(info->bus_info, pci_name(sp->pdev), sizeof(info->bus_info)); |
5041 | info->regdump_len = XENA_REG_SPACE; | 5041 | info->regdump_len = XENA_REG_SPACE; |
5042 | info->eedump_len = XENA_EEPROM_SPACE; | 5042 | info->eedump_len = XENA_EEPROM_SPACE; |
5043 | info->testinfo_len = S2IO_TEST_LEN; | ||
5044 | |||
5045 | if (sp->device_type == XFRAME_I_DEVICE) | ||
5046 | info->n_stats = XFRAME_I_STAT_LEN; | ||
5047 | else | ||
5048 | info->n_stats = XFRAME_II_STAT_LEN; | ||
5049 | } | 5043 | } |
5050 | 5044 | ||
5051 | /** | 5045 | /** |
@@ -6241,9 +6235,25 @@ static int s2io_get_eeprom_len(struct net_device *dev) | |||
6241 | return (XENA_EEPROM_SPACE); | 6235 | return (XENA_EEPROM_SPACE); |
6242 | } | 6236 | } |
6243 | 6237 | ||
6244 | static int s2io_ethtool_self_test_count(struct net_device *dev) | 6238 | static int s2io_get_sset_count(struct net_device *dev, int sset) |
6245 | { | 6239 | { |
6246 | return (S2IO_TEST_LEN); | 6240 | struct s2io_nic *sp = dev->priv; |
6241 | |||
6242 | switch (sset) { | ||
6243 | case ETH_SS_TEST: | ||
6244 | return S2IO_TEST_LEN; | ||
6245 | case ETH_SS_STATS: | ||
6246 | switch(sp->device_type) { | ||
6247 | case XFRAME_I_DEVICE: | ||
6248 | return XFRAME_I_STAT_LEN; | ||
6249 | case XFRAME_II_DEVICE: | ||
6250 | return XFRAME_II_STAT_LEN; | ||
6251 | default: | ||
6252 | return 0; | ||
6253 | } | ||
6254 | default: | ||
6255 | return -EOPNOTSUPP; | ||
6256 | } | ||
6247 | } | 6257 | } |
6248 | 6258 | ||
6249 | static void s2io_ethtool_get_strings(struct net_device *dev, | 6259 | static void s2io_ethtool_get_strings(struct net_device *dev, |
@@ -6270,22 +6280,6 @@ static void s2io_ethtool_get_strings(struct net_device *dev, | |||
6270 | sizeof(ethtool_driver_stats_keys)); | 6280 | sizeof(ethtool_driver_stats_keys)); |
6271 | } | 6281 | } |
6272 | } | 6282 | } |
6273 | static int s2io_ethtool_get_stats_count(struct net_device *dev) | ||
6274 | { | ||
6275 | struct s2io_nic *sp = dev->priv; | ||
6276 | int stat_count = 0; | ||
6277 | switch(sp->device_type) { | ||
6278 | case XFRAME_I_DEVICE: | ||
6279 | stat_count = XFRAME_I_STAT_LEN; | ||
6280 | break; | ||
6281 | |||
6282 | case XFRAME_II_DEVICE: | ||
6283 | stat_count = XFRAME_II_STAT_LEN; | ||
6284 | break; | ||
6285 | } | ||
6286 | |||
6287 | return stat_count; | ||
6288 | } | ||
6289 | 6283 | ||
6290 | static int s2io_ethtool_op_set_tx_csum(struct net_device *dev, u32 data) | 6284 | static int s2io_ethtool_op_set_tx_csum(struct net_device *dev, u32 data) |
6291 | { | 6285 | { |
@@ -6331,12 +6325,11 @@ static const struct ethtool_ops netdev_ethtool_ops = { | |||
6331 | .get_tso = s2io_ethtool_op_get_tso, | 6325 | .get_tso = s2io_ethtool_op_get_tso, |
6332 | .set_tso = s2io_ethtool_op_set_tso, | 6326 | .set_tso = s2io_ethtool_op_set_tso, |
6333 | .set_ufo = ethtool_op_set_ufo, | 6327 | .set_ufo = ethtool_op_set_ufo, |
6334 | .self_test_count = s2io_ethtool_self_test_count, | ||
6335 | .self_test = s2io_ethtool_test, | 6328 | .self_test = s2io_ethtool_test, |
6336 | .get_strings = s2io_ethtool_get_strings, | 6329 | .get_strings = s2io_ethtool_get_strings, |
6337 | .phys_id = s2io_ethtool_idnic, | 6330 | .phys_id = s2io_ethtool_idnic, |
6338 | .get_stats_count = s2io_ethtool_get_stats_count, | 6331 | .get_ethtool_stats = s2io_get_ethtool_stats, |
6339 | .get_ethtool_stats = s2io_get_ethtool_stats | 6332 | .get_sset_count = s2io_get_sset_count, |
6340 | }; | 6333 | }; |
6341 | 6334 | ||
6342 | /** | 6335 | /** |
diff --git a/drivers/net/sc92031.c b/drivers/net/sc92031.c index 02c472ecbe55..37b42394560d 100644 --- a/drivers/net/sc92031.c +++ b/drivers/net/sc92031.c | |||
@@ -1372,9 +1372,14 @@ static void sc92031_ethtool_get_strings(struct net_device *dev, | |||
1372 | SILAN_STATS_NUM * ETH_GSTRING_LEN); | 1372 | SILAN_STATS_NUM * ETH_GSTRING_LEN); |
1373 | } | 1373 | } |
1374 | 1374 | ||
1375 | static int sc92031_ethtool_get_stats_count(struct net_device *dev) | 1375 | static int sc92031_ethtool_get_sset_count(struct net_device *dev, int sset) |
1376 | { | 1376 | { |
1377 | return SILAN_STATS_NUM; | 1377 | switch (sset) { |
1378 | case ETH_SS_STATS: | ||
1379 | return SILAN_STATS_NUM; | ||
1380 | default: | ||
1381 | return -EOPNOTSUPP; | ||
1382 | } | ||
1378 | } | 1383 | } |
1379 | 1384 | ||
1380 | static void sc92031_ethtool_get_ethtool_stats(struct net_device *dev, | 1385 | static void sc92031_ethtool_get_ethtool_stats(struct net_device *dev, |
@@ -1397,7 +1402,7 @@ static struct ethtool_ops sc92031_ethtool_ops = { | |||
1397 | .nway_reset = sc92031_ethtool_nway_reset, | 1402 | .nway_reset = sc92031_ethtool_nway_reset, |
1398 | .get_link = ethtool_op_get_link, | 1403 | .get_link = ethtool_op_get_link, |
1399 | .get_strings = sc92031_ethtool_get_strings, | 1404 | .get_strings = sc92031_ethtool_get_strings, |
1400 | .get_stats_count = sc92031_ethtool_get_stats_count, | 1405 | .get_sset_count = sc92031_ethtool_get_sset_count, |
1401 | .get_ethtool_stats = sc92031_ethtool_get_ethtool_stats, | 1406 | .get_ethtool_stats = sc92031_ethtool_get_ethtool_stats, |
1402 | }; | 1407 | }; |
1403 | 1408 | ||
diff --git a/drivers/net/skge.c b/drivers/net/skge.c index ec1acfddf350..2aae9fe38c5a 100644 --- a/drivers/net/skge.c +++ b/drivers/net/skge.c | |||
@@ -410,9 +410,14 @@ static const struct skge_stat { | |||
410 | { "rx_fcs_error", XM_RXF_FCS_ERR, GM_RXF_FCS_ERR }, | 410 | { "rx_fcs_error", XM_RXF_FCS_ERR, GM_RXF_FCS_ERR }, |
411 | }; | 411 | }; |
412 | 412 | ||
413 | static int skge_get_stats_count(struct net_device *dev) | 413 | static int skge_get_sset_count(struct net_device *dev, int sset) |
414 | { | 414 | { |
415 | return ARRAY_SIZE(skge_stats); | 415 | switch (sset) { |
416 | case ETH_SS_STATS: | ||
417 | return ARRAY_SIZE(skge_stats); | ||
418 | default: | ||
419 | return -EOPNOTSUPP; | ||
420 | } | ||
416 | } | 421 | } |
417 | 422 | ||
418 | static void skge_get_ethtool_stats(struct net_device *dev, | 423 | static void skge_get_ethtool_stats(struct net_device *dev, |
@@ -817,7 +822,7 @@ static const struct ethtool_ops skge_ethtool_ops = { | |||
817 | .set_rx_csum = skge_set_rx_csum, | 822 | .set_rx_csum = skge_set_rx_csum, |
818 | .get_strings = skge_get_strings, | 823 | .get_strings = skge_get_strings, |
819 | .phys_id = skge_phys_id, | 824 | .phys_id = skge_phys_id, |
820 | .get_stats_count = skge_get_stats_count, | 825 | .get_sset_count = skge_get_sset_count, |
821 | .get_ethtool_stats = skge_get_ethtool_stats, | 826 | .get_ethtool_stats = skge_get_ethtool_stats, |
822 | }; | 827 | }; |
823 | 828 | ||
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index a70bcbcf8a16..fe0e7560d236 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c | |||
@@ -3190,9 +3190,14 @@ static void sky2_set_msglevel(struct net_device *netdev, u32 value) | |||
3190 | sky2->msg_enable = value; | 3190 | sky2->msg_enable = value; |
3191 | } | 3191 | } |
3192 | 3192 | ||
3193 | static int sky2_get_stats_count(struct net_device *dev) | 3193 | static int sky2_get_sset_count(struct net_device *dev, int sset) |
3194 | { | 3194 | { |
3195 | return ARRAY_SIZE(sky2_stats); | 3195 | switch (sset) { |
3196 | case ETH_SS_STATS: | ||
3197 | return ARRAY_SIZE(sky2_stats); | ||
3198 | default: | ||
3199 | return -EOPNOTSUPP; | ||
3200 | } | ||
3196 | } | 3201 | } |
3197 | 3202 | ||
3198 | static void sky2_get_ethtool_stats(struct net_device *dev, | 3203 | static void sky2_get_ethtool_stats(struct net_device *dev, |
@@ -3723,7 +3728,7 @@ static const struct ethtool_ops sky2_ethtool_ops = { | |||
3723 | .get_pauseparam = sky2_get_pauseparam, | 3728 | .get_pauseparam = sky2_get_pauseparam, |
3724 | .set_pauseparam = sky2_set_pauseparam, | 3729 | .set_pauseparam = sky2_set_pauseparam, |
3725 | .phys_id = sky2_phys_id, | 3730 | .phys_id = sky2_phys_id, |
3726 | .get_stats_count = sky2_get_stats_count, | 3731 | .get_sset_count = sky2_get_sset_count, |
3727 | .get_ethtool_stats = sky2_get_ethtool_stats, | 3732 | .get_ethtool_stats = sky2_get_ethtool_stats, |
3728 | }; | 3733 | }; |
3729 | 3734 | ||
diff --git a/drivers/net/spider_net_ethtool.c b/drivers/net/spider_net_ethtool.c index 1460d5006d1c..94273037102f 100644 --- a/drivers/net/spider_net_ethtool.c +++ b/drivers/net/spider_net_ethtool.c | |||
@@ -147,9 +147,14 @@ spider_net_ethtool_get_ringparam(struct net_device *netdev, | |||
147 | ering->rx_pending = card->rx_chain.num_desc; | 147 | ering->rx_pending = card->rx_chain.num_desc; |
148 | } | 148 | } |
149 | 149 | ||
150 | static int spider_net_get_stats_count(struct net_device *netdev) | 150 | static int spider_net_get_sset_count(struct net_device *netdev, int sset) |
151 | { | 151 | { |
152 | return SPIDER_NET_NUM_STATS; | 152 | switch (sset) { |
153 | case ETH_SS_STATS: | ||
154 | return SPIDER_NET_NUM_STATS; | ||
155 | default: | ||
156 | return -EOPNOTSUPP; | ||
157 | } | ||
153 | } | 158 | } |
154 | 159 | ||
155 | static void spider_net_get_ethtool_stats(struct net_device *netdev, | 160 | static void spider_net_get_ethtool_stats(struct net_device *netdev, |
@@ -191,7 +196,7 @@ const struct ethtool_ops spider_net_ethtool_ops = { | |||
191 | .set_tx_csum = ethtool_op_set_tx_csum, | 196 | .set_tx_csum = ethtool_op_set_tx_csum, |
192 | .get_ringparam = spider_net_ethtool_get_ringparam, | 197 | .get_ringparam = spider_net_ethtool_get_ringparam, |
193 | .get_strings = spider_net_get_strings, | 198 | .get_strings = spider_net_get_strings, |
194 | .get_stats_count = spider_net_get_stats_count, | 199 | .get_sset_count = spider_net_get_sset_count, |
195 | .get_ethtool_stats = spider_net_get_ethtool_stats, | 200 | .get_ethtool_stats = spider_net_get_ethtool_stats, |
196 | }; | 201 | }; |
197 | 202 | ||
diff --git a/drivers/net/tc35815.c b/drivers/net/tc35815.c index df8237360f58..a679f4310ce1 100644 --- a/drivers/net/tc35815.c +++ b/drivers/net/tc35815.c | |||
@@ -2162,10 +2162,16 @@ static void tc35815_set_msglevel(struct net_device *dev, u32 datum) | |||
2162 | lp->msg_enable = datum; | 2162 | lp->msg_enable = datum; |
2163 | } | 2163 | } |
2164 | 2164 | ||
2165 | static int tc35815_get_stats_count(struct net_device *dev) | 2165 | static int tc35815_get_sset_count(struct net_device *dev, int sset) |
2166 | { | 2166 | { |
2167 | struct tc35815_local *lp = dev->priv; | 2167 | struct tc35815_local *lp = dev->priv; |
2168 | return sizeof(lp->lstats) / sizeof(int); | 2168 | |
2169 | switch (sset) { | ||
2170 | case ETH_SS_STATS: | ||
2171 | return sizeof(lp->lstats) / sizeof(int); | ||
2172 | default: | ||
2173 | return -EOPNOTSUPP; | ||
2174 | } | ||
2169 | } | 2175 | } |
2170 | 2176 | ||
2171 | static void tc35815_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *stats, u64 *data) | 2177 | static void tc35815_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *stats, u64 *data) |
@@ -2200,7 +2206,7 @@ static const struct ethtool_ops tc35815_ethtool_ops = { | |||
2200 | .get_msglevel = tc35815_get_msglevel, | 2206 | .get_msglevel = tc35815_get_msglevel, |
2201 | .set_msglevel = tc35815_set_msglevel, | 2207 | .set_msglevel = tc35815_set_msglevel, |
2202 | .get_strings = tc35815_get_strings, | 2208 | .get_strings = tc35815_get_strings, |
2203 | .get_stats_count = tc35815_get_stats_count, | 2209 | .get_sset_count = tc35815_get_sset_count, |
2204 | .get_ethtool_stats = tc35815_get_ethtool_stats, | 2210 | .get_ethtool_stats = tc35815_get_ethtool_stats, |
2205 | }; | 2211 | }; |
2206 | 2212 | ||
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 1b860e0817f6..d4ac6e9ef6db 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -8347,14 +8347,16 @@ static int tg3_set_tx_csum(struct net_device *dev, u32 data) | |||
8347 | return 0; | 8347 | return 0; |
8348 | } | 8348 | } |
8349 | 8349 | ||
8350 | static int tg3_get_stats_count (struct net_device *dev) | 8350 | static int tg3_get_sset_count (struct net_device *dev, int sset) |
8351 | { | 8351 | { |
8352 | return TG3_NUM_STATS; | 8352 | switch (sset) { |
8353 | } | 8353 | case ETH_SS_TEST: |
8354 | 8354 | return TG3_NUM_TEST; | |
8355 | static int tg3_get_test_count (struct net_device *dev) | 8355 | case ETH_SS_STATS: |
8356 | { | 8356 | return TG3_NUM_STATS; |
8357 | return TG3_NUM_TEST; | 8357 | default: |
8358 | return -EOPNOTSUPP; | ||
8359 | } | ||
8358 | } | 8360 | } |
8359 | 8361 | ||
8360 | static void tg3_get_strings (struct net_device *dev, u32 stringset, u8 *buf) | 8362 | static void tg3_get_strings (struct net_device *dev, u32 stringset, u8 *buf) |
@@ -9281,14 +9283,13 @@ static const struct ethtool_ops tg3_ethtool_ops = { | |||
9281 | .set_tx_csum = tg3_set_tx_csum, | 9283 | .set_tx_csum = tg3_set_tx_csum, |
9282 | .set_sg = ethtool_op_set_sg, | 9284 | .set_sg = ethtool_op_set_sg, |
9283 | .set_tso = tg3_set_tso, | 9285 | .set_tso = tg3_set_tso, |
9284 | .self_test_count = tg3_get_test_count, | ||
9285 | .self_test = tg3_self_test, | 9286 | .self_test = tg3_self_test, |
9286 | .get_strings = tg3_get_strings, | 9287 | .get_strings = tg3_get_strings, |
9287 | .phys_id = tg3_phys_id, | 9288 | .phys_id = tg3_phys_id, |
9288 | .get_stats_count = tg3_get_stats_count, | ||
9289 | .get_ethtool_stats = tg3_get_ethtool_stats, | 9289 | .get_ethtool_stats = tg3_get_ethtool_stats, |
9290 | .get_coalesce = tg3_get_coalesce, | 9290 | .get_coalesce = tg3_get_coalesce, |
9291 | .set_coalesce = tg3_set_coalesce, | 9291 | .set_coalesce = tg3_set_coalesce, |
9292 | .get_sset_count = tg3_get_sset_count, | ||
9292 | }; | 9293 | }; |
9293 | 9294 | ||
9294 | static void __devinit tg3_get_eeprom_size(struct tg3 *tp) | 9295 | static void __devinit tg3_get_eeprom_size(struct tg3 *tp) |
diff --git a/drivers/net/ucc_geth_ethtool.c b/drivers/net/ucc_geth_ethtool.c index 73aa677a4a3e..9a9622c13e2b 100644 --- a/drivers/net/ucc_geth_ethtool.c +++ b/drivers/net/ucc_geth_ethtool.c | |||
@@ -276,20 +276,26 @@ uec_set_ringparam(struct net_device *netdev, | |||
276 | return ret; | 276 | return ret; |
277 | } | 277 | } |
278 | 278 | ||
279 | static int uec_get_stats_count(struct net_device *netdev) | 279 | static int uec_get_sset_count(struct net_device *netdev, int sset) |
280 | { | 280 | { |
281 | struct ucc_geth_private *ugeth = netdev_priv(netdev); | 281 | struct ucc_geth_private *ugeth = netdev_priv(netdev); |
282 | u32 stats_mode = ugeth->ug_info->statisticsMode; | 282 | u32 stats_mode = ugeth->ug_info->statisticsMode; |
283 | int len = 0; | 283 | int len = 0; |
284 | 284 | ||
285 | if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_HARDWARE) | 285 | switch (sset) { |
286 | len += UEC_HW_STATS_LEN; | 286 | case ETH_SS_STATS: |
287 | if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_FIRMWARE_TX) | 287 | if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_HARDWARE) |
288 | len += UEC_TX_FW_STATS_LEN; | 288 | len += UEC_HW_STATS_LEN; |
289 | if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_FIRMWARE_RX) | 289 | if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_FIRMWARE_TX) |
290 | len += UEC_RX_FW_STATS_LEN; | 290 | len += UEC_TX_FW_STATS_LEN; |
291 | if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_FIRMWARE_RX) | ||
292 | len += UEC_RX_FW_STATS_LEN; | ||
293 | |||
294 | return len; | ||
291 | 295 | ||
292 | return len; | 296 | default: |
297 | return -EOPNOTSUPP; | ||
298 | } | ||
293 | } | 299 | } |
294 | 300 | ||
295 | static void uec_get_strings(struct net_device *netdev, u32 stringset, u8 *buf) | 301 | static void uec_get_strings(struct net_device *netdev, u32 stringset, u8 *buf) |
@@ -353,8 +359,6 @@ uec_get_drvinfo(struct net_device *netdev, | |||
353 | strncpy(drvinfo->version, DRV_VERSION, 32); | 359 | strncpy(drvinfo->version, DRV_VERSION, 32); |
354 | strncpy(drvinfo->fw_version, "N/A", 32); | 360 | strncpy(drvinfo->fw_version, "N/A", 32); |
355 | strncpy(drvinfo->bus_info, "QUICC ENGINE", 32); | 361 | strncpy(drvinfo->bus_info, "QUICC ENGINE", 32); |
356 | drvinfo->n_stats = uec_get_stats_count(netdev); | ||
357 | drvinfo->testinfo_len = 0; | ||
358 | drvinfo->eedump_len = 0; | 362 | drvinfo->eedump_len = 0; |
359 | drvinfo->regdump_len = uec_get_regs_len(netdev); | 363 | drvinfo->regdump_len = uec_get_regs_len(netdev); |
360 | } | 364 | } |
@@ -374,7 +378,7 @@ static const struct ethtool_ops uec_ethtool_ops = { | |||
374 | .get_pauseparam = uec_get_pauseparam, | 378 | .get_pauseparam = uec_get_pauseparam, |
375 | .set_pauseparam = uec_set_pauseparam, | 379 | .set_pauseparam = uec_set_pauseparam, |
376 | .set_sg = ethtool_op_set_sg, | 380 | .set_sg = ethtool_op_set_sg, |
377 | .get_stats_count = uec_get_stats_count, | 381 | .get_sset_count = uec_get_sset_count, |
378 | .get_strings = uec_get_strings, | 382 | .get_strings = uec_get_strings, |
379 | .get_ethtool_stats = uec_get_ethtool_stats, | 383 | .get_ethtool_stats = uec_get_ethtool_stats, |
380 | }; | 384 | }; |
diff --git a/drivers/net/veth.c b/drivers/net/veth.c index 2c86a4459d8a..fdd1e034569d 100644 --- a/drivers/net/veth.c +++ b/drivers/net/veth.c | |||
@@ -79,9 +79,14 @@ static void veth_get_strings(struct net_device *dev, u32 stringset, u8 *buf) | |||
79 | } | 79 | } |
80 | } | 80 | } |
81 | 81 | ||
82 | static int veth_get_stats_count(struct net_device *dev) | 82 | static int veth_get_sset_count(struct net_device *dev, int sset) |
83 | { | 83 | { |
84 | return ARRAY_SIZE(ethtool_stats_keys); | 84 | switch (sset) { |
85 | case ETH_SS_STATS: | ||
86 | return ARRAY_SIZE(ethtool_stats_keys); | ||
87 | default: | ||
88 | return -EOPNOTSUPP; | ||
89 | } | ||
85 | } | 90 | } |
86 | 91 | ||
87 | static void veth_get_ethtool_stats(struct net_device *dev, | 92 | static void veth_get_ethtool_stats(struct net_device *dev, |
@@ -135,7 +140,7 @@ static struct ethtool_ops veth_ethtool_ops = { | |||
135 | .get_sg = ethtool_op_get_sg, | 140 | .get_sg = ethtool_op_get_sg, |
136 | .set_sg = ethtool_op_set_sg, | 141 | .set_sg = ethtool_op_set_sg, |
137 | .get_strings = veth_get_strings, | 142 | .get_strings = veth_get_strings, |
138 | .get_stats_count = veth_get_stats_count, | 143 | .get_sset_count = veth_get_sset_count, |
139 | .get_ethtool_stats = veth_get_ethtool_stats, | 144 | .get_ethtool_stats = veth_get_ethtool_stats, |
140 | }; | 145 | }; |
141 | 146 | ||
diff --git a/drivers/net/wireless/libertas/ethtool.c b/drivers/net/wireless/libertas/ethtool.c index d793d843f7d5..3dae15211b6a 100644 --- a/drivers/net/wireless/libertas/ethtool.c +++ b/drivers/net/wireless/libertas/ethtool.c | |||
@@ -109,29 +109,8 @@ static void libertas_ethtool_get_stats(struct net_device * dev, | |||
109 | struct ethtool_stats * stats, u64 * data) | 109 | struct ethtool_stats * stats, u64 * data) |
110 | { | 110 | { |
111 | wlan_private *priv = dev->priv; | 111 | wlan_private *priv = dev->priv; |
112 | |||
113 | lbs_deb_enter(LBS_DEB_ETHTOOL); | ||
114 | |||
115 | stats->cmd = ETHTOOL_GSTATS; | ||
116 | BUG_ON(stats->n_stats != MESH_STATS_NUM); | ||
117 | |||
118 | data[0] = priv->mstats.fwd_drop_rbt; | ||
119 | data[1] = priv->mstats.fwd_drop_ttl; | ||
120 | data[2] = priv->mstats.fwd_drop_noroute; | ||
121 | data[3] = priv->mstats.fwd_drop_nobuf; | ||
122 | data[4] = priv->mstats.fwd_unicast_cnt; | ||
123 | data[5] = priv->mstats.fwd_bcast_cnt; | ||
124 | data[6] = priv->mstats.drop_blind; | ||
125 | data[7] = priv->mstats.tx_failed_cnt; | ||
126 | |||
127 | lbs_deb_enter(LBS_DEB_ETHTOOL); | ||
128 | } | ||
129 | |||
130 | static int libertas_ethtool_get_stats_count(struct net_device * dev) | ||
131 | { | ||
132 | int ret; | ||
133 | wlan_private *priv = dev->priv; | ||
134 | struct cmd_ds_mesh_access mesh_access; | 112 | struct cmd_ds_mesh_access mesh_access; |
113 | int ret; | ||
135 | 114 | ||
136 | lbs_deb_enter(LBS_DEB_ETHTOOL); | 115 | lbs_deb_enter(LBS_DEB_ETHTOOL); |
137 | 116 | ||
@@ -140,25 +119,38 @@ static int libertas_ethtool_get_stats_count(struct net_device * dev) | |||
140 | CMD_MESH_ACCESS, CMD_ACT_MESH_GET_STATS, | 119 | CMD_MESH_ACCESS, CMD_ACT_MESH_GET_STATS, |
141 | CMD_OPTION_WAITFORRSP, 0, &mesh_access); | 120 | CMD_OPTION_WAITFORRSP, 0, &mesh_access); |
142 | 121 | ||
143 | if (ret) { | 122 | if (ret) |
144 | ret = 0; | 123 | return; |
145 | goto done; | 124 | |
146 | } | 125 | priv->mstats.fwd_drop_rbt = le32_to_cpu(mesh_access.data[0]); |
147 | 126 | priv->mstats.fwd_drop_ttl = le32_to_cpu(mesh_access.data[1]); | |
148 | priv->mstats.fwd_drop_rbt = le32_to_cpu(mesh_access.data[0]); | 127 | priv->mstats.fwd_drop_noroute = le32_to_cpu(mesh_access.data[2]); |
149 | priv->mstats.fwd_drop_ttl = le32_to_cpu(mesh_access.data[1]); | 128 | priv->mstats.fwd_drop_nobuf = le32_to_cpu(mesh_access.data[3]); |
150 | priv->mstats.fwd_drop_noroute = le32_to_cpu(mesh_access.data[2]); | 129 | priv->mstats.fwd_unicast_cnt = le32_to_cpu(mesh_access.data[4]); |
151 | priv->mstats.fwd_drop_nobuf = le32_to_cpu(mesh_access.data[3]); | 130 | priv->mstats.fwd_bcast_cnt = le32_to_cpu(mesh_access.data[5]); |
152 | priv->mstats.fwd_unicast_cnt = le32_to_cpu(mesh_access.data[4]); | 131 | priv->mstats.drop_blind = le32_to_cpu(mesh_access.data[6]); |
153 | priv->mstats.fwd_bcast_cnt = le32_to_cpu(mesh_access.data[5]); | 132 | priv->mstats.tx_failed_cnt = le32_to_cpu(mesh_access.data[7]); |
154 | priv->mstats.drop_blind = le32_to_cpu(mesh_access.data[6]); | 133 | |
155 | priv->mstats.tx_failed_cnt = le32_to_cpu(mesh_access.data[7]); | 134 | data[0] = priv->mstats.fwd_drop_rbt; |
135 | data[1] = priv->mstats.fwd_drop_ttl; | ||
136 | data[2] = priv->mstats.fwd_drop_noroute; | ||
137 | data[3] = priv->mstats.fwd_drop_nobuf; | ||
138 | data[4] = priv->mstats.fwd_unicast_cnt; | ||
139 | data[5] = priv->mstats.fwd_bcast_cnt; | ||
140 | data[6] = priv->mstats.drop_blind; | ||
141 | data[7] = priv->mstats.tx_failed_cnt; | ||
156 | 142 | ||
157 | ret = MESH_STATS_NUM; | 143 | lbs_deb_enter(LBS_DEB_ETHTOOL); |
144 | } | ||
158 | 145 | ||
159 | done: | 146 | static int libertas_ethtool_get_sset_count(struct net_device * dev, int sset) |
160 | lbs_deb_enter_args(LBS_DEB_ETHTOOL, "ret %d", ret); | 147 | { |
161 | return ret; | 148 | switch (sset) { |
149 | case ETH_SS_STATS: | ||
150 | return MESH_STATS_NUM; | ||
151 | default: | ||
152 | return -EOPNOTSUPP; | ||
153 | } | ||
162 | } | 154 | } |
163 | 155 | ||
164 | static void libertas_ethtool_get_strings (struct net_device * dev, | 156 | static void libertas_ethtool_get_strings (struct net_device * dev, |
@@ -185,7 +177,7 @@ struct ethtool_ops libertas_ethtool_ops = { | |||
185 | .get_drvinfo = libertas_ethtool_get_drvinfo, | 177 | .get_drvinfo = libertas_ethtool_get_drvinfo, |
186 | .get_eeprom = libertas_ethtool_get_eeprom, | 178 | .get_eeprom = libertas_ethtool_get_eeprom, |
187 | .get_eeprom_len = libertas_ethtool_get_eeprom_len, | 179 | .get_eeprom_len = libertas_ethtool_get_eeprom_len, |
188 | .get_stats_count = libertas_ethtool_get_stats_count, | 180 | .get_sset_count = libertas_ethtool_get_sset_count, |
189 | .get_ethtool_stats = libertas_ethtool_get_stats, | 181 | .get_ethtool_stats = libertas_ethtool_get_stats, |
190 | .get_strings = libertas_ethtool_get_strings, | 182 | .get_strings = libertas_ethtool_get_strings, |
191 | }; | 183 | }; |