diff options
author | Pavel Machek <pavel@denx.de> | 2014-07-13 10:27:02 +0200 |
---|---|---|
committer | Tom Rini <trini@ti.com> | 2014-07-22 07:44:28 -0400 |
commit | 75d9a45cb0ace62d81d4a66bbed026a82861708c (patch) | |
tree | dd89e3526ec4c9c96d6dfdab03b7aff87a3116b4 /net/eth.c | |
parent | 2c997e7a8f1d23513e6c63cd6519ed34133256ad (diff) |
Ethernet: let user know if there is no valid ethernet address
Improve error messages in case of invalid/unset ethernet addresses.
Signed-off-by: Pavel Machek <pavel@denx.de>
Diffstat (limited to 'net/eth.c')
-rw-r--r-- | net/eth.c | 29 |
1 files changed, 21 insertions, 8 deletions
@@ -10,6 +10,7 @@ #include <net.h> #include <miiphy.h> #include <phy.h> +#include <asm/errno.h> void eth_parse_enetaddr(const char *addr, uchar *enetaddr) { @@ -152,6 +153,11 @@ static void eth_current_changed(void) setenv("ethact", NULL); } +int eth_address_set(unsigned char *addr) +{ + return memcmp(addr, "\0\0\0\0\0\0", 6); +} + int eth_write_hwaddr(struct eth_device *dev, const char *base_name, int eth_number) { @@ -160,8 +166,8 @@ int eth_write_hwaddr(struct eth_device *dev, const char *base_name, eth_getenv_enetaddr_by_index(base_name, eth_number, env_enetaddr); - if (memcmp(env_enetaddr, "\0\0\0\0\0\0", 6)) { - if (memcmp(dev->enetaddr, "\0\0\0\0\0\0", 6) && + if (eth_address_set(env_enetaddr)) { + if (eth_address_set(dev->enetaddr) && memcmp(dev->enetaddr, env_enetaddr, 6)) { printf("\nWarning: %s MAC addresses don't match:\n", dev->name); @@ -177,14 +183,22 @@ int eth_write_hwaddr(struct eth_device *dev, const char *base_name, dev->enetaddr); printf("\nWarning: %s using MAC address from net device\n", dev->name); + } else if (!(eth_address_set(dev->enetaddr))) { + printf("\nError: %s address not set.\n", + dev->name); + return -EINVAL; } - if (dev->write_hwaddr && - !eth_mac_skip(eth_number)) { - if (!is_valid_ether_addr(dev->enetaddr)) - return -1; + if (dev->write_hwaddr && !eth_mac_skip(eth_number)) { + if (!is_valid_ether_addr(dev->enetaddr)) { + printf("\nError: %s address %pM illegal value\n", + dev->name, dev->enetaddr); + return -EINVAL; + } ret = dev->write_hwaddr(dev); + if (ret) + printf("\nWarning: %s failed to set MAC address\n", dev->name); } return ret; @@ -303,8 +317,7 @@ int eth_initialize(bd_t *bis) puts("\nWarning: eth device name has a space!" "\n"); - if (eth_write_hwaddr(dev, "eth", dev->index)) - puts("\nWarning: failed to set MAC address\n"); + eth_write_hwaddr(dev, "eth", dev->index); dev = dev->next; num_devices++; |