提交 75d9a45c 编写于 作者: P Pavel Machek 提交者: Tom Rini

Ethernet: let user know if there is no valid ethernet address

Improve error messages in case of invalid/unset ethernet addresses.
Signed-off-by: NPavel Machek <pavel@denx.de>
上级 2c997e7a
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include <net.h> #include <net.h>
#include <miiphy.h> #include <miiphy.h>
#include <phy.h> #include <phy.h>
#include <asm/errno.h>
void eth_parse_enetaddr(const char *addr, uchar *enetaddr) void eth_parse_enetaddr(const char *addr, uchar *enetaddr)
{ {
...@@ -152,6 +153,11 @@ static void eth_current_changed(void) ...@@ -152,6 +153,11 @@ static void eth_current_changed(void)
setenv("ethact", NULL); 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_write_hwaddr(struct eth_device *dev, const char *base_name,
int eth_number) int eth_number)
{ {
...@@ -160,8 +166,8 @@ int eth_write_hwaddr(struct eth_device *dev, const char *base_name, ...@@ -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); eth_getenv_enetaddr_by_index(base_name, eth_number, env_enetaddr);
if (memcmp(env_enetaddr, "\0\0\0\0\0\0", 6)) { if (eth_address_set(env_enetaddr)) {
if (memcmp(dev->enetaddr, "\0\0\0\0\0\0", 6) && if (eth_address_set(dev->enetaddr) &&
memcmp(dev->enetaddr, env_enetaddr, 6)) { memcmp(dev->enetaddr, env_enetaddr, 6)) {
printf("\nWarning: %s MAC addresses don't match:\n", printf("\nWarning: %s MAC addresses don't match:\n",
dev->name); dev->name);
...@@ -177,14 +183,22 @@ int eth_write_hwaddr(struct eth_device *dev, const char *base_name, ...@@ -177,14 +183,22 @@ int eth_write_hwaddr(struct eth_device *dev, const char *base_name,
dev->enetaddr); dev->enetaddr);
printf("\nWarning: %s using MAC address from net device\n", printf("\nWarning: %s using MAC address from net device\n",
dev->name); dev->name);
} else if (!(eth_address_set(dev->enetaddr))) {
printf("\nError: %s address not set.\n",
dev->name);
return -EINVAL;
} }
if (dev->write_hwaddr && if (dev->write_hwaddr && !eth_mac_skip(eth_number)) {
!eth_mac_skip(eth_number)) { if (!is_valid_ether_addr(dev->enetaddr)) {
if (!is_valid_ether_addr(dev->enetaddr)) printf("\nError: %s address %pM illegal value\n",
return -1; dev->name, dev->enetaddr);
return -EINVAL;
}
ret = dev->write_hwaddr(dev); ret = dev->write_hwaddr(dev);
if (ret)
printf("\nWarning: %s failed to set MAC address\n", dev->name);
} }
return ret; return ret;
...@@ -303,8 +317,7 @@ int eth_initialize(bd_t *bis) ...@@ -303,8 +317,7 @@ int eth_initialize(bd_t *bis)
puts("\nWarning: eth device name has a space!" puts("\nWarning: eth device name has a space!"
"\n"); "\n");
if (eth_write_hwaddr(dev, "eth", dev->index)) eth_write_hwaddr(dev, "eth", dev->index);
puts("\nWarning: failed to set MAC address\n");
dev = dev->next; dev = dev->next;
num_devices++; num_devices++;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册