| From 14983cd66d94a51d6bc3eab41f8069979c8037c4 Mon Sep 17 00:00:00 2001 |
| From: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> |
| Date: Thu, 13 Jun 2013 00:55:34 +0400 |
| Subject: sh_eth: split 'sh_eth_netdev_ops' |
| |
| Commit 9f86134155047720a3685cda21467f68695152d2 (sh_eth: remove SH_ETH_HAS_TSU) |
| removes 'const' from 'sh_eth_netdev_ops' and modifies it in case TSU registers |
| are present. I've originally suggested to Iwamatsu-san to split this structure |
| in two instead and afterwards Dave M. suggested doing the same. |
| Split 'sh_eth_netdev_ops_tsu' from 'sh_eth_netdev_ops', making both 'const', and |
| assigning 'ndev->detdev_ops' depending on the presence of TSU registers. |
| |
| Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| (cherry picked from commit 8f728d7934c77f63e89abcc96b46a7a98416d5c1) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| drivers/net/ethernet/renesas/sh_eth.c | 29 ++++++++++++++++++++--------- |
| 1 file changed, 20 insertions(+), 9 deletions(-) |
| |
| diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c |
| index f5cb5416..a651f766 100644 |
| --- a/drivers/net/ethernet/renesas/sh_eth.c |
| +++ b/drivers/net/ethernet/renesas/sh_eth.c |
| @@ -2497,7 +2497,7 @@ static const u16 *sh_eth_get_register_offset(int register_type) |
| return reg_offset; |
| } |
| |
| -static struct net_device_ops sh_eth_netdev_ops = { |
| +static const struct net_device_ops sh_eth_netdev_ops = { |
| .ndo_open = sh_eth_open, |
| .ndo_stop = sh_eth_close, |
| .ndo_start_xmit = sh_eth_start_xmit, |
| @@ -2509,6 +2509,21 @@ static struct net_device_ops sh_eth_netdev_ops = { |
| .ndo_change_mtu = eth_change_mtu, |
| }; |
| |
| +static const struct net_device_ops sh_eth_netdev_ops_tsu = { |
| + .ndo_open = sh_eth_open, |
| + .ndo_stop = sh_eth_close, |
| + .ndo_start_xmit = sh_eth_start_xmit, |
| + .ndo_get_stats = sh_eth_get_stats, |
| + .ndo_set_rx_mode = sh_eth_set_multicast_list, |
| + .ndo_vlan_rx_add_vid = sh_eth_vlan_rx_add_vid, |
| + .ndo_vlan_rx_kill_vid = sh_eth_vlan_rx_kill_vid, |
| + .ndo_tx_timeout = sh_eth_tx_timeout, |
| + .ndo_do_ioctl = sh_eth_do_ioctl, |
| + .ndo_validate_addr = eth_validate_addr, |
| + .ndo_set_mac_address = eth_mac_addr, |
| + .ndo_change_mtu = eth_change_mtu, |
| +}; |
| + |
| static int sh_eth_drv_probe(struct platform_device *pdev) |
| { |
| int ret, devno = 0; |
| @@ -2579,14 +2594,10 @@ static int sh_eth_drv_probe(struct platform_device *pdev) |
| sh_eth_set_default_cpu_data(mdp->cd); |
| |
| /* set function */ |
| - if (mdp->cd->tsu) { |
| - sh_eth_netdev_ops.ndo_set_rx_mode = sh_eth_set_multicast_list; |
| - sh_eth_netdev_ops.ndo_vlan_rx_add_vid = sh_eth_vlan_rx_add_vid; |
| - sh_eth_netdev_ops.ndo_vlan_rx_kill_vid = |
| - sh_eth_vlan_rx_kill_vid; |
| - } |
| - |
| - ndev->netdev_ops = &sh_eth_netdev_ops; |
| + if (mdp->cd->tsu) |
| + ndev->netdev_ops = &sh_eth_netdev_ops_tsu; |
| + else |
| + ndev->netdev_ops = &sh_eth_netdev_ops; |
| SET_ETHTOOL_OPS(ndev, &sh_eth_ethtool_ops); |
| ndev->watchdog_timeo = TX_TIMEOUT; |
| |
| -- |
| 1.8.4.3.gca3854a |
| |