From 2e3fa839e5d5bbce1870a1480804e1abcc3f411a Mon Sep 17 00:00:00 2001 From: Jiri Pirko Date: Fri, 13 Mar 2009 11:48:18 -0700 Subject: [PATCH] --- yaml --- r: 135167 b: refs/heads/master c: bda6a15a0d283d531b865fb7c596bb3ff258e87e h: refs/heads/master i: 135165: ea2d8ac1242954ca0954d7227b28dc1ba5779931 135163: 57dedc9e947734e8ff854f86b7ec8acc05dfde73 135159: f74aae631c9f308f08626dbabaef90f9d6ef3e8f 135151: cd6fd38d5d59ab21255216bc3fb3bc61ea21b5bf 135135: f5f14644e725f4dd22192705189ed04667e96761 135103: ec842c82ed2cb8d1285f173bd1d317c8e427cfc5 135039: a1faa895b3f15f122214fdfc7fae0813836cf65c 134911: f503982e3df2baf7d4d80dd52dcede3d877a3160 134655: a27a40745c11a82c07c5800ad19b249043c3d100 134143: 2deca3f9b4451835de73b0c06a5e5634ccb3e279 133119: d1f7ac09831de80c227bbffc92a978177408273d 131071: 5e1d55329a1e76f29215b146a22e31dd45999a04 v: v3 --- [refs] | 2 +- trunk/drivers/net/8139too.c | 26 +++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index c96718949ac2..15b98b7f3855 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c048aaf4ca854fa67a3bfa9dab5b9ddc5083b3b7 +refs/heads/master: bda6a15a0d283d531b865fb7c596bb3ff258e87e diff --git a/trunk/drivers/net/8139too.c b/trunk/drivers/net/8139too.c index 5341da604e84..29df398b7727 100644 --- a/trunk/drivers/net/8139too.c +++ b/trunk/drivers/net/8139too.c @@ -640,6 +640,7 @@ static int rtl8139_start_xmit (struct sk_buff *skb, #ifdef CONFIG_NET_POLL_CONTROLLER static void rtl8139_poll_controller(struct net_device *dev); #endif +static int rtl8139_set_mac_address(struct net_device *dev, void *p); static int rtl8139_poll(struct napi_struct *napi, int budget); static irqreturn_t rtl8139_interrupt (int irq, void *dev_instance); static int rtl8139_close (struct net_device *dev); @@ -917,7 +918,7 @@ static const struct net_device_ops rtl8139_netdev_ops = { .ndo_stop = rtl8139_close, .ndo_get_stats = rtl8139_get_stats, .ndo_validate_addr = eth_validate_addr, - .ndo_set_mac_address = eth_mac_addr, + .ndo_set_mac_address = rtl8139_set_mac_address, .ndo_start_xmit = rtl8139_start_xmit, .ndo_set_multicast_list = rtl8139_set_rx_mode, .ndo_do_ioctl = netdev_ioctl, @@ -2215,6 +2216,29 @@ static void rtl8139_poll_controller(struct net_device *dev) } #endif +static int rtl8139_set_mac_address(struct net_device *dev, void *p) +{ + struct rtl8139_private *tp = netdev_priv(dev); + void __iomem *ioaddr = tp->mmio_addr; + struct sockaddr *addr = p; + + if (!is_valid_ether_addr(addr->sa_data)) + return -EADDRNOTAVAIL; + + memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); + + spin_lock_irq(&tp->lock); + + RTL_W8_F(Cfg9346, Cfg9346_Unlock); + RTL_W32_F(MAC0 + 0, cpu_to_le32 (*(u32 *) (dev->dev_addr + 0))); + RTL_W32_F(MAC0 + 4, cpu_to_le32 (*(u32 *) (dev->dev_addr + 4))); + RTL_W8_F(Cfg9346, Cfg9346_Lock); + + spin_unlock_irq(&tp->lock); + + return 0; +} + static int rtl8139_close (struct net_device *dev) { struct rtl8139_private *tp = netdev_priv(dev);