From 6bf0e0d2c113114bdfdefc17d64d47f4f51ce061 Mon Sep 17 00:00:00 2001 From: Jiri Pirko Date: Fri, 13 Mar 2009 11:47:48 -0700 Subject: [PATCH] --- yaml --- r: 135166 b: refs/heads/master c: c048aaf4ca854fa67a3bfa9dab5b9ddc5083b3b7 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/net/8139cp.c | 24 +++++++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 6a6cf42bdb70..c96718949ac2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6fc791ee631728b2beddda87560f1af59e32230e +refs/heads/master: c048aaf4ca854fa67a3bfa9dab5b9ddc5083b3b7 diff --git a/trunk/drivers/net/8139cp.c b/trunk/drivers/net/8139cp.c index 35517b06ec3f..a09e3a7cac4f 100644 --- a/trunk/drivers/net/8139cp.c +++ b/trunk/drivers/net/8139cp.c @@ -1602,6 +1602,28 @@ static int cp_ioctl (struct net_device *dev, struct ifreq *rq, int cmd) return rc; } +static int cp_set_mac_address(struct net_device *dev, void *p) +{ + struct cp_private *cp = netdev_priv(dev); + 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(&cp->lock); + + cpw8_f(Cfg9346, Cfg9346_Unlock); + cpw32_f(MAC0 + 0, le32_to_cpu (*(__le32 *) (dev->dev_addr + 0))); + cpw32_f(MAC0 + 4, le32_to_cpu (*(__le32 *) (dev->dev_addr + 4))); + cpw8_f(Cfg9346, Cfg9346_Lock); + + spin_unlock_irq(&cp->lock); + + return 0; +} + /* Serial EEPROM section. */ /* EEPROM_Ctrl bits. */ @@ -1821,7 +1843,7 @@ static const struct net_device_ops cp_netdev_ops = { .ndo_open = cp_open, .ndo_stop = cp_close, .ndo_validate_addr = eth_validate_addr, - .ndo_set_mac_address = eth_mac_addr, + .ndo_set_mac_address = cp_set_mac_address, .ndo_set_multicast_list = cp_set_rx_mode, .ndo_get_stats = cp_get_stats, .ndo_do_ioctl = cp_ioctl,