diff options
author | Danny Kukawka <danny.kukawka@bisect.de> | 2012-02-16 07:09:31 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-02-19 19:03:04 -0500 |
commit | 5055d2f236e1495d68c468eeb684fd5789673f1d (patch) | |
tree | 603d6ce83fc899461ab1e7862c9e2ad94ef73023 | |
parent | fa63c6da22b4a6ea6e7d04e3dc9178dd72304903 (diff) |
adi: adapt to eth_hw_addr_random() and changes in arch/blackfin
Adapt adi ethernet driver to changes in bfin_get_ether_addr()
from arch/blackfin. bfin_get_ether_addr() returns now a state.
Set a random mac address via new eth_hw_addr_random() in case
the return value is not 0.
Reset the state to NET_ADDR_PERM as soon as the MAC get
changed via .ndo_set_mac_address.
v2: change the logic to reduce unneeded checks
Signed-off-by: Danny Kukawka <danny.kukawka@bisect.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/adi/bfin_mac.c | 15 | ||||
-rw-r--r-- | drivers/net/ethernet/adi/bfin_mac.h | 2 |
2 files changed, 10 insertions, 7 deletions
diff --git a/drivers/net/ethernet/adi/bfin_mac.c b/drivers/net/ethernet/adi/bfin_mac.c index 49733696703a..ab4daeccdf98 100644 --- a/drivers/net/ethernet/adi/bfin_mac.c +++ b/drivers/net/ethernet/adi/bfin_mac.c @@ -621,6 +621,7 @@ static int bfin_mac_set_mac_address(struct net_device *dev, void *p) if (netif_running(dev)) return -EBUSY; memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); + dev->addr_assign_type &= ~NET_ADDR_RANDOM; setup_mac_addr(dev->dev_addr); return 0; } @@ -1494,12 +1495,14 @@ static int __devinit bfin_mac_probe(struct platform_device *pdev) * Grab the MAC from the board somehow * this is done in the arch/blackfin/mach-bfxxx/boards/eth_mac.c */ - if (!is_valid_ether_addr(ndev->dev_addr)) - bfin_get_ether_addr(ndev->dev_addr); - - /* If still not valid, get a random one */ - if (!is_valid_ether_addr(ndev->dev_addr)) - random_ether_addr(ndev->dev_addr); + if (!is_valid_ether_addr(ndev->dev_addr)) { + if (bfin_get_ether_addr(ndev->dev_addr) || + !is_valid_ether_addr(ndev->dev_addr)) { + /* Still not valid, get a random one */ + netdev_warn(ndev, "Setting Ethernet MAC to a random one\n"); + eth_hw_addr_random(ndev); + } + } setup_mac_addr(ndev->dev_addr); diff --git a/drivers/net/ethernet/adi/bfin_mac.h b/drivers/net/ethernet/adi/bfin_mac.h index f8559ac9a403..960905c08223 100644 --- a/drivers/net/ethernet/adi/bfin_mac.h +++ b/drivers/net/ethernet/adi/bfin_mac.h @@ -101,6 +101,6 @@ struct bfin_mac_local { #endif }; -extern void bfin_get_ether_addr(char *addr); +extern int bfin_get_ether_addr(char *addr); #endif |