aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Wilcox <matthew@wil.cx>2007-07-31 17:00:29 -0400
committerDavid S. Miller <davem@davemloft.net>2007-07-31 17:00:29 -0400
commit313674afa8fdced2fe79f50f38e1c387b63d8790 (patch)
tree40b14cab2f48af45615dacf35c93a268c42b7f9a
parent61a44b9c4b20d40c41fd1b70a4ceb13b75ea79a4 (diff)
[NET]: ethtool_perm_addr only has one implementation
All drivers implement ethtool get_perm_addr the same way -- by calling the generic function. So we can inline the generic function into the caller and avoid going through the drivers. Signed-off-by: Matthew Wilcox <matthew@wil.cx> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/3c59x.c1
-rw-r--r--drivers/net/8139cp.c1
-rw-r--r--drivers/net/8139too.c1
-rw-r--r--drivers/net/ax88796.c1
-rw-r--r--drivers/net/b44.c1
-rw-r--r--drivers/net/bnx2.c1
-rw-r--r--drivers/net/cxgb3/cxgb3_main.c1
-rw-r--r--drivers/net/e100.c1
-rw-r--r--drivers/net/e1000/e1000_ethtool.c1
-rw-r--r--drivers/net/forcedeth.c1
-rw-r--r--drivers/net/ixgb/ixgb_ethtool.c1
-rw-r--r--drivers/net/ne2k-pci.c1
-rw-r--r--drivers/net/netxen/netxen_nic_ethtool.c1
-rw-r--r--drivers/net/pcnet32.c1
-rwxr-xr-xdrivers/net/qla3xxx.c1
-rw-r--r--drivers/net/r8169.c1
-rw-r--r--drivers/net/sc92031.c1
-rw-r--r--drivers/net/skge.c1
-rw-r--r--drivers/net/sky2.c1
-rw-r--r--drivers/net/sundance.c1
-rw-r--r--drivers/net/sunvnet.c1
-rw-r--r--drivers/net/tc35815.c1
-rw-r--r--drivers/net/tg3.c1
-rw-r--r--drivers/net/via-rhine.c1
-rw-r--r--include/linux/ethtool.h4
-rw-r--r--net/core/ethtool.c43
26 files changed, 8 insertions, 63 deletions
diff --git a/drivers/net/3c59x.c b/drivers/net/3c59x.c
index 6deb20fc7a08..001c66dd3a94 100644
--- a/drivers/net/3c59x.c
+++ b/drivers/net/3c59x.c
@@ -2886,7 +2886,6 @@ static const struct ethtool_ops vortex_ethtool_ops = {
2886 .set_settings = vortex_set_settings, 2886 .set_settings = vortex_set_settings,
2887 .get_link = ethtool_op_get_link, 2887 .get_link = ethtool_op_get_link,
2888 .nway_reset = vortex_nway_reset, 2888 .nway_reset = vortex_nway_reset,
2889 .get_perm_addr = ethtool_op_get_perm_addr,
2890}; 2889};
2891 2890
2892#ifdef CONFIG_PCI 2891#ifdef CONFIG_PCI
diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c
index e970e64bf966..a79f28c7a100 100644
--- a/drivers/net/8139cp.c
+++ b/drivers/net/8139cp.c
@@ -1578,7 +1578,6 @@ static const struct ethtool_ops cp_ethtool_ops = {
1578 .set_wol = cp_set_wol, 1578 .set_wol = cp_set_wol,
1579 .get_strings = cp_get_strings, 1579 .get_strings = cp_get_strings,
1580 .get_ethtool_stats = cp_get_ethtool_stats, 1580 .get_ethtool_stats = cp_get_ethtool_stats,
1581 .get_perm_addr = ethtool_op_get_perm_addr,
1582 .get_eeprom_len = cp_get_eeprom_len, 1581 .get_eeprom_len = cp_get_eeprom_len,
1583 .get_eeprom = cp_get_eeprom, 1582 .get_eeprom = cp_get_eeprom,
1584 .set_eeprom = cp_set_eeprom, 1583 .set_eeprom = cp_set_eeprom,
diff --git a/drivers/net/8139too.c b/drivers/net/8139too.c
index 327eaa7b4999..f4e4298d24b9 100644
--- a/drivers/net/8139too.c
+++ b/drivers/net/8139too.c
@@ -2452,7 +2452,6 @@ static const struct ethtool_ops rtl8139_ethtool_ops = {
2452 .get_strings = rtl8139_get_strings, 2452 .get_strings = rtl8139_get_strings,
2453 .get_stats_count = rtl8139_get_stats_count, 2453 .get_stats_count = rtl8139_get_stats_count,
2454 .get_ethtool_stats = rtl8139_get_ethtool_stats, 2454 .get_ethtool_stats = rtl8139_get_ethtool_stats,
2455 .get_perm_addr = ethtool_op_get_perm_addr,
2456}; 2455};
2457 2456
2458static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) 2457static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
diff --git a/drivers/net/ax88796.c b/drivers/net/ax88796.c
index e43e8047b90e..83da1770bafb 100644
--- a/drivers/net/ax88796.c
+++ b/drivers/net/ax88796.c
@@ -580,7 +580,6 @@ static const struct ethtool_ops ax_ethtool_ops = {
580 .set_settings = ax_set_settings, 580 .set_settings = ax_set_settings,
581 .nway_reset = ax_nway_reset, 581 .nway_reset = ax_nway_reset,
582 .get_link = ax_get_link, 582 .get_link = ax_get_link,
583 .get_perm_addr = ethtool_op_get_perm_addr,
584}; 583};
585 584
586/* setup code */ 585/* setup code */
diff --git a/drivers/net/b44.c b/drivers/net/b44.c
index 37f1b6ff5c12..0795df235492 100644
--- a/drivers/net/b44.c
+++ b/drivers/net/b44.c
@@ -2033,7 +2033,6 @@ static const struct ethtool_ops b44_ethtool_ops = {
2033 .get_strings = b44_get_strings, 2033 .get_strings = b44_get_strings,
2034 .get_stats_count = b44_get_stats_count, 2034 .get_stats_count = b44_get_stats_count,
2035 .get_ethtool_stats = b44_get_ethtool_stats, 2035 .get_ethtool_stats = b44_get_ethtool_stats,
2036 .get_perm_addr = ethtool_op_get_perm_addr,
2037}; 2036};
2038 2037
2039static int b44_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) 2038static int b44_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index a729da061bbb..d53dfc5bbae0 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -6269,7 +6269,6 @@ static const struct ethtool_ops bnx2_ethtool_ops = {
6269 .phys_id = bnx2_phys_id, 6269 .phys_id = bnx2_phys_id,
6270 .get_stats_count = bnx2_get_stats_count, 6270 .get_stats_count = bnx2_get_stats_count,
6271 .get_ethtool_stats = bnx2_get_ethtool_stats, 6271 .get_ethtool_stats = bnx2_get_ethtool_stats,
6272 .get_perm_addr = ethtool_op_get_perm_addr,
6273}; 6272};
6274 6273
6275/* Called with rtnl_lock */ 6274/* Called with rtnl_lock */
diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c
index 6fd1e5241833..dc5d26988bb3 100644
--- a/drivers/net/cxgb3/cxgb3_main.c
+++ b/drivers/net/cxgb3/cxgb3_main.c
@@ -1583,7 +1583,6 @@ static const struct ethtool_ops cxgb_ethtool_ops = {
1583 .get_wol = get_wol, 1583 .get_wol = get_wol,
1584 .get_tso = ethtool_op_get_tso, 1584 .get_tso = ethtool_op_get_tso,
1585 .set_tso = ethtool_op_set_tso, 1585 .set_tso = ethtool_op_set_tso,
1586 .get_perm_addr = ethtool_op_get_perm_addr
1587}; 1586};
1588 1587
1589static int in_range(int val, int lo, int hi) 1588static int in_range(int val, int lo, int hi)
diff --git a/drivers/net/e100.c b/drivers/net/e100.c
index 6b6401e9304e..280313b9b069 100644
--- a/drivers/net/e100.c
+++ b/drivers/net/e100.c
@@ -2506,7 +2506,6 @@ static const struct ethtool_ops e100_ethtool_ops = {
2506 .phys_id = e100_phys_id, 2506 .phys_id = e100_phys_id,
2507 .get_stats_count = e100_get_stats_count, 2507 .get_stats_count = e100_get_stats_count,
2508 .get_ethtool_stats = e100_get_ethtool_stats, 2508 .get_ethtool_stats = e100_get_ethtool_stats,
2509 .get_perm_addr = ethtool_op_get_perm_addr,
2510}; 2509};
2511 2510
2512static int e100_do_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd) 2511static 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 bb08375b5f13..c90c92e72d2a 100644
--- a/drivers/net/e1000/e1000_ethtool.c
+++ b/drivers/net/e1000/e1000_ethtool.c
@@ -1973,7 +1973,6 @@ static const struct ethtool_ops e1000_ethtool_ops = {
1973 .phys_id = e1000_phys_id, 1973 .phys_id = e1000_phys_id,
1974 .get_stats_count = e1000_get_stats_count, 1974 .get_stats_count = e1000_get_stats_count,
1975 .get_ethtool_stats = e1000_get_ethtool_stats, 1975 .get_ethtool_stats = e1000_get_ethtool_stats,
1976 .get_perm_addr = ethtool_op_get_perm_addr,
1977}; 1976};
1978 1977
1979void e1000_set_ethtool_ops(struct net_device *netdev) 1978void e1000_set_ethtool_ops(struct net_device *netdev)
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c
index 51e1cb472738..69f5f365239a 100644
--- a/drivers/net/forcedeth.c
+++ b/drivers/net/forcedeth.c
@@ -4707,7 +4707,6 @@ static const struct ethtool_ops ops = {
4707 .get_regs_len = nv_get_regs_len, 4707 .get_regs_len = nv_get_regs_len,
4708 .get_regs = nv_get_regs, 4708 .get_regs = nv_get_regs,
4709 .nway_reset = nv_nway_reset, 4709 .nway_reset = nv_nway_reset,
4710 .get_perm_addr = ethtool_op_get_perm_addr,
4711 .get_tso = ethtool_op_get_tso, 4710 .get_tso = ethtool_op_get_tso,
4712 .set_tso = nv_set_tso, 4711 .set_tso = nv_set_tso,
4713 .get_ringparam = nv_get_ringparam, 4712 .get_ringparam = nv_get_ringparam,
diff --git a/drivers/net/ixgb/ixgb_ethtool.c b/drivers/net/ixgb/ixgb_ethtool.c
index afde84868bea..0413cd95eda7 100644
--- a/drivers/net/ixgb/ixgb_ethtool.c
+++ b/drivers/net/ixgb/ixgb_ethtool.c
@@ -724,7 +724,6 @@ static const struct ethtool_ops ixgb_ethtool_ops = {
724 .phys_id = ixgb_phys_id, 724 .phys_id = ixgb_phys_id,
725 .get_stats_count = ixgb_get_stats_count, 725 .get_stats_count = ixgb_get_stats_count,
726 .get_ethtool_stats = ixgb_get_ethtool_stats, 726 .get_ethtool_stats = ixgb_get_ethtool_stats,
727 .get_perm_addr = ethtool_op_get_perm_addr,
728}; 727};
729 728
730void ixgb_set_ethtool_ops(struct net_device *netdev) 729void ixgb_set_ethtool_ops(struct net_device *netdev)
diff --git a/drivers/net/ne2k-pci.c b/drivers/net/ne2k-pci.c
index cfdeaf7aa163..f81d9398d605 100644
--- a/drivers/net/ne2k-pci.c
+++ b/drivers/net/ne2k-pci.c
@@ -638,7 +638,6 @@ static const struct ethtool_ops ne2k_pci_ethtool_ops = {
638 .get_drvinfo = ne2k_pci_get_drvinfo, 638 .get_drvinfo = ne2k_pci_get_drvinfo,
639 .get_tx_csum = ethtool_op_get_tx_csum, 639 .get_tx_csum = ethtool_op_get_tx_csum,
640 .get_sg = ethtool_op_get_sg, 640 .get_sg = ethtool_op_get_sg,
641 .get_perm_addr = ethtool_op_get_perm_addr,
642}; 641};
643 642
644static void __devexit ne2k_pci_remove_one (struct pci_dev *pdev) 643static void __devexit ne2k_pci_remove_one (struct pci_dev *pdev)
diff --git a/drivers/net/netxen/netxen_nic_ethtool.c b/drivers/net/netxen/netxen_nic_ethtool.c
index 0175f6c353f6..a6138b474b4a 100644
--- a/drivers/net/netxen/netxen_nic_ethtool.c
+++ b/drivers/net/netxen/netxen_nic_ethtool.c
@@ -755,5 +755,4 @@ struct ethtool_ops netxen_nic_ethtool_ops = {
755 .get_strings = netxen_nic_get_strings, 755 .get_strings = netxen_nic_get_strings,
756 .get_stats_count = netxen_nic_get_stats_count, 756 .get_stats_count = netxen_nic_get_stats_count,
757 .get_ethtool_stats = netxen_nic_get_ethtool_stats, 757 .get_ethtool_stats = netxen_nic_get_ethtool_stats,
758 .get_perm_addr = ethtool_op_get_perm_addr,
759}; 758};
diff --git a/drivers/net/pcnet32.c b/drivers/net/pcnet32.c
index 465485a3fbc6..e6a67531de99 100644
--- a/drivers/net/pcnet32.c
+++ b/drivers/net/pcnet32.c
@@ -1515,7 +1515,6 @@ static const struct ethtool_ops pcnet32_ethtool_ops = {
1515 .phys_id = pcnet32_phys_id, 1515 .phys_id = pcnet32_phys_id,
1516 .get_regs_len = pcnet32_get_regs_len, 1516 .get_regs_len = pcnet32_get_regs_len,
1517 .get_regs = pcnet32_get_regs, 1517 .get_regs = pcnet32_get_regs,
1518 .get_perm_addr = ethtool_op_get_perm_addr,
1519}; 1518};
1520 1519
1521/* only probes for non-PCI devices, the rest are handled by 1520/* only probes for non-PCI devices, the rest are handled by
diff --git a/drivers/net/qla3xxx.c b/drivers/net/qla3xxx.c
index 8be8be451ada..69da95b5ad0c 100755
--- a/drivers/net/qla3xxx.c
+++ b/drivers/net/qla3xxx.c
@@ -1904,7 +1904,6 @@ static void ql_get_pauseparam(struct net_device *ndev,
1904static const struct ethtool_ops ql3xxx_ethtool_ops = { 1904static const struct ethtool_ops ql3xxx_ethtool_ops = {
1905 .get_settings = ql_get_settings, 1905 .get_settings = ql_get_settings,
1906 .get_drvinfo = ql_get_drvinfo, 1906 .get_drvinfo = ql_get_drvinfo,
1907 .get_perm_addr = ethtool_op_get_perm_addr,
1908 .get_link = ethtool_op_get_link, 1907 .get_link = ethtool_op_get_link,
1909 .get_msglevel = ql_get_msglevel, 1908 .get_msglevel = ql_get_msglevel,
1910 .set_msglevel = ql_set_msglevel, 1909 .set_msglevel = ql_set_msglevel,
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
index bb6896ae3151..c9333b9dd51a 100644
--- a/drivers/net/r8169.c
+++ b/drivers/net/r8169.c
@@ -1066,7 +1066,6 @@ static const struct ethtool_ops rtl8169_ethtool_ops = {
1066 .get_strings = rtl8169_get_strings, 1066 .get_strings = rtl8169_get_strings,
1067 .get_stats_count = rtl8169_get_stats_count, 1067 .get_stats_count = rtl8169_get_stats_count,
1068 .get_ethtool_stats = rtl8169_get_ethtool_stats, 1068 .get_ethtool_stats = rtl8169_get_ethtool_stats,
1069 .get_perm_addr = ethtool_op_get_perm_addr,
1070}; 1069};
1071 1070
1072static void rtl8169_write_gmii_reg_bit(void __iomem *ioaddr, int reg, 1071static void rtl8169_write_gmii_reg_bit(void __iomem *ioaddr, int reg,
diff --git a/drivers/net/sc92031.c b/drivers/net/sc92031.c
index 5b7284c955dc..872cb1cc9c41 100644
--- a/drivers/net/sc92031.c
+++ b/drivers/net/sc92031.c
@@ -1402,7 +1402,6 @@ static struct ethtool_ops sc92031_ethtool_ops = {
1402 .get_strings = sc92031_ethtool_get_strings, 1402 .get_strings = sc92031_ethtool_get_strings,
1403 .get_stats_count = sc92031_ethtool_get_stats_count, 1403 .get_stats_count = sc92031_ethtool_get_stats_count,
1404 .get_ethtool_stats = sc92031_ethtool_get_ethtool_stats, 1404 .get_ethtool_stats = sc92031_ethtool_get_ethtool_stats,
1405 .get_perm_addr = ethtool_op_get_perm_addr,
1406 .get_ufo = ethtool_op_get_ufo, 1405 .get_ufo = ethtool_op_get_ufo,
1407}; 1406};
1408 1407
diff --git a/drivers/net/skge.c b/drivers/net/skge.c
index 776692946562..e3d8520209b8 100644
--- a/drivers/net/skge.c
+++ b/drivers/net/skge.c
@@ -821,7 +821,6 @@ static const struct ethtool_ops skge_ethtool_ops = {
821 .phys_id = skge_phys_id, 821 .phys_id = skge_phys_id,
822 .get_stats_count = skge_get_stats_count, 822 .get_stats_count = skge_get_stats_count,
823 .get_ethtool_stats = skge_get_ethtool_stats, 823 .get_ethtool_stats = skge_get_ethtool_stats,
824 .get_perm_addr = ethtool_op_get_perm_addr,
825}; 824};
826 825
827/* 826/*
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
index 13f08a390e1f..e7a2eadcc3b0 100644
--- a/drivers/net/sky2.c
+++ b/drivers/net/sky2.c
@@ -3548,7 +3548,6 @@ static const struct ethtool_ops sky2_ethtool_ops = {
3548 .phys_id = sky2_phys_id, 3548 .phys_id = sky2_phys_id,
3549 .get_stats_count = sky2_get_stats_count, 3549 .get_stats_count = sky2_get_stats_count,
3550 .get_ethtool_stats = sky2_get_ethtool_stats, 3550 .get_ethtool_stats = sky2_get_ethtool_stats,
3551 .get_perm_addr = ethtool_op_get_perm_addr,
3552}; 3551};
3553 3552
3554#ifdef CONFIG_SKY2_DEBUG 3553#ifdef CONFIG_SKY2_DEBUG
diff --git a/drivers/net/sundance.c b/drivers/net/sundance.c
index af0c9831074c..a8f2af8f778a 100644
--- a/drivers/net/sundance.c
+++ b/drivers/net/sundance.c
@@ -1586,7 +1586,6 @@ static const struct ethtool_ops ethtool_ops = {
1586 .get_link = get_link, 1586 .get_link = get_link,
1587 .get_msglevel = get_msglevel, 1587 .get_msglevel = get_msglevel,
1588 .set_msglevel = set_msglevel, 1588 .set_msglevel = set_msglevel,
1589 .get_perm_addr = ethtool_op_get_perm_addr,
1590}; 1589};
1591 1590
1592static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) 1591static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
diff --git a/drivers/net/sunvnet.c b/drivers/net/sunvnet.c
index 61f98251feab..ff1028a597df 100644
--- a/drivers/net/sunvnet.c
+++ b/drivers/net/sunvnet.c
@@ -906,7 +906,6 @@ static const struct ethtool_ops vnet_ethtool_ops = {
906 .get_msglevel = vnet_get_msglevel, 906 .get_msglevel = vnet_get_msglevel,
907 .set_msglevel = vnet_set_msglevel, 907 .set_msglevel = vnet_set_msglevel,
908 .get_link = ethtool_op_get_link, 908 .get_link = ethtool_op_get_link,
909 .get_perm_addr = ethtool_op_get_perm_addr,
910}; 909};
911 910
912static void vnet_port_free_tx_bufs(struct vnet_port *port) 911static void vnet_port_free_tx_bufs(struct vnet_port *port)
diff --git a/drivers/net/tc35815.c b/drivers/net/tc35815.c
index 7f94ca930988..ec41469eee82 100644
--- a/drivers/net/tc35815.c
+++ b/drivers/net/tc35815.c
@@ -2198,7 +2198,6 @@ static const struct ethtool_ops tc35815_ethtool_ops = {
2198 .get_strings = tc35815_get_strings, 2198 .get_strings = tc35815_get_strings,
2199 .get_stats_count = tc35815_get_stats_count, 2199 .get_stats_count = tc35815_get_stats_count,
2200 .get_ethtool_stats = tc35815_get_ethtool_stats, 2200 .get_ethtool_stats = tc35815_get_ethtool_stats,
2201 .get_perm_addr = ethtool_op_get_perm_addr,
2202}; 2201};
2203 2202
2204static int tc35815_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) 2203static int tc35815_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index 887b9a5cfe48..dc41c055ebb5 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -9294,7 +9294,6 @@ static const struct ethtool_ops tg3_ethtool_ops = {
9294 .get_ethtool_stats = tg3_get_ethtool_stats, 9294 .get_ethtool_stats = tg3_get_ethtool_stats,
9295 .get_coalesce = tg3_get_coalesce, 9295 .get_coalesce = tg3_get_coalesce,
9296 .set_coalesce = tg3_set_coalesce, 9296 .set_coalesce = tg3_set_coalesce,
9297 .get_perm_addr = ethtool_op_get_perm_addr,
9298}; 9297};
9299 9298
9300static void __devinit tg3_get_eeprom_size(struct tg3 *tp) 9299static void __devinit tg3_get_eeprom_size(struct tg3 *tp)
diff --git a/drivers/net/via-rhine.c b/drivers/net/via-rhine.c
index f51c2c138f10..c3fe230695a0 100644
--- a/drivers/net/via-rhine.c
+++ b/drivers/net/via-rhine.c
@@ -1805,7 +1805,6 @@ static const struct ethtool_ops netdev_ethtool_ops = {
1805 .set_wol = rhine_set_wol, 1805 .set_wol = rhine_set_wol,
1806 .get_sg = ethtool_op_get_sg, 1806 .get_sg = ethtool_op_get_sg,
1807 .get_tx_csum = ethtool_op_get_tx_csum, 1807 .get_tx_csum = ethtool_op_get_tx_csum,
1808 .get_perm_addr = ethtool_op_get_perm_addr,
1809}; 1808};
1810 1809
1811static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) 1810static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
index 3a632244f31b..23ccea811297 100644
--- a/include/linux/ethtool.h
+++ b/include/linux/ethtool.h
@@ -270,8 +270,6 @@ u32 ethtool_op_get_sg(struct net_device *dev);
270int ethtool_op_set_sg(struct net_device *dev, u32 data); 270int ethtool_op_set_sg(struct net_device *dev, u32 data);
271u32 ethtool_op_get_tso(struct net_device *dev); 271u32 ethtool_op_get_tso(struct net_device *dev);
272int ethtool_op_set_tso(struct net_device *dev, u32 data); 272int ethtool_op_set_tso(struct net_device *dev, u32 data);
273int ethtool_op_get_perm_addr(struct net_device *dev,
274 struct ethtool_perm_addr *addr, u8 *data);
275u32 ethtool_op_get_ufo(struct net_device *dev); 273u32 ethtool_op_get_ufo(struct net_device *dev);
276int ethtool_op_set_ufo(struct net_device *dev, u32 data); 274int ethtool_op_set_ufo(struct net_device *dev, u32 data);
277 275
@@ -309,7 +307,6 @@ int ethtool_op_set_ufo(struct net_device *dev, u32 data);
309 * get_strings: Return a set of strings that describe the requested objects 307 * get_strings: Return a set of strings that describe the requested objects
310 * phys_id: Identify the device 308 * phys_id: Identify the device
311 * get_stats: Return statistics about the device 309 * get_stats: Return statistics about the device
312 * get_perm_addr: Gets the permanent hardware address
313 * 310 *
314 * Description: 311 * Description:
315 * 312 *
@@ -368,7 +365,6 @@ struct ethtool_ops {
368 int (*phys_id)(struct net_device *, u32); 365 int (*phys_id)(struct net_device *, u32);
369 int (*get_stats_count)(struct net_device *); 366 int (*get_stats_count)(struct net_device *);
370 void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *); 367 void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *);
371 int (*get_perm_addr)(struct net_device *, struct ethtool_perm_addr *, u8 *);
372 int (*begin)(struct net_device *); 368 int (*begin)(struct net_device *);
373 void (*complete)(struct net_device *); 369 void (*complete)(struct net_device *);
374 u32 (*get_ufo)(struct net_device *); 370 u32 (*get_ufo)(struct net_device *);
diff --git a/net/core/ethtool.c b/net/core/ethtool.c
index 2bf565e8d0b3..2ab0a60046a5 100644
--- a/net/core/ethtool.c
+++ b/net/core/ethtool.c
@@ -95,18 +95,6 @@ int ethtool_op_set_tso(struct net_device *dev, u32 data)
95 return 0; 95 return 0;
96} 96}
97 97
98int ethtool_op_get_perm_addr(struct net_device *dev, struct ethtool_perm_addr *addr, u8 *data)
99{
100 unsigned char len = dev->addr_len;
101 if ( addr->size < len )
102 return -ETOOSMALL;
103
104 addr->size = len;
105 memcpy(data, dev->perm_addr, len);
106 return 0;
107}
108
109
110u32 ethtool_op_get_ufo(struct net_device *dev) 98u32 ethtool_op_get_ufo(struct net_device *dev)
111{ 99{
112 return (dev->features & NETIF_F_UFO) != 0; 100 return (dev->features & NETIF_F_UFO) != 0;
@@ -779,34 +767,20 @@ static int ethtool_get_stats(struct net_device *dev, void __user *useraddr)
779static int ethtool_get_perm_addr(struct net_device *dev, void __user *useraddr) 767static int ethtool_get_perm_addr(struct net_device *dev, void __user *useraddr)
780{ 768{
781 struct ethtool_perm_addr epaddr; 769 struct ethtool_perm_addr epaddr;
782 u8 *data;
783 int ret;
784
785 if (!dev->ethtool_ops->get_perm_addr)
786 return -EOPNOTSUPP;
787 770
788 if (copy_from_user(&epaddr,useraddr,sizeof(epaddr))) 771 if (copy_from_user(&epaddr, useraddr, sizeof(epaddr)))
789 return -EFAULT; 772 return -EFAULT;
790 773
791 data = kmalloc(epaddr.size, GFP_USER); 774 if (epaddr.size < dev->addr_len)
792 if (!data) 775 return -ETOOSMALL;
793 return -ENOMEM; 776 epaddr.size = dev->addr_len;
794
795 ret = dev->ethtool_ops->get_perm_addr(dev,&epaddr,data);
796 if (ret)
797 return ret;
798 777
799 ret = -EFAULT;
800 if (copy_to_user(useraddr, &epaddr, sizeof(epaddr))) 778 if (copy_to_user(useraddr, &epaddr, sizeof(epaddr)))
801 goto out; 779 return -EFAULT;
802 useraddr += sizeof(epaddr); 780 useraddr += sizeof(epaddr);
803 if (copy_to_user(useraddr, data, epaddr.size)) 781 if (copy_to_user(useraddr, dev->perm_addr, epaddr.size))
804 goto out; 782 return -EFAULT;
805 ret = 0; 783 return 0;
806
807 out:
808 kfree(data);
809 return ret;
810} 784}
811 785
812/* The main entry point in this file. Called from net/core/dev.c */ 786/* The main entry point in this file. Called from net/core/dev.c */
@@ -976,7 +950,6 @@ int dev_ethtool(struct ifreq *ifr)
976 950
977EXPORT_SYMBOL(dev_ethtool); 951EXPORT_SYMBOL(dev_ethtool);
978EXPORT_SYMBOL(ethtool_op_get_link); 952EXPORT_SYMBOL(ethtool_op_get_link);
979EXPORT_SYMBOL_GPL(ethtool_op_get_perm_addr);
980EXPORT_SYMBOL(ethtool_op_get_sg); 953EXPORT_SYMBOL(ethtool_op_get_sg);
981EXPORT_SYMBOL(ethtool_op_get_tso); 954EXPORT_SYMBOL(ethtool_op_get_tso);
982EXPORT_SYMBOL(ethtool_op_get_tx_csum); 955EXPORT_SYMBOL(ethtool_op_get_tx_csum);