diff options
| -rw-r--r-- | doc/README.enetaddr | 6 | ||||
| -rw-r--r-- | net/eth.c | 14 | 
2 files changed, 19 insertions, 1 deletions
| diff --git a/doc/README.enetaddr b/doc/README.enetaddr index 2d8e24f5c..1eaeaf941 100644 --- a/doc/README.enetaddr +++ b/doc/README.enetaddr @@ -32,7 +32,11 @@ Correct flow of setting up the MAC address (summarized):  1. Read from hardware in initialize() function  2. Read from environment in net/eth.c after initialize() -3. Give priority to the value in the environment if a conflict +3. The environment variable will be compared to the driver initialized +   struct eth_device->enetaddr. If they differ, a warning is printed, and the +   environment variable will be used unchanged. +   If the environment variable is not set, it will be initialized from +   eth_device->enetaddr, and a warning will be printed.  4. Program the address into hardware if the following conditions are met:  	a) The relevant driver has a 'write_addr' function  	b) The user hasn't set an 'ethmacskip' environment variable @@ -62,6 +62,15 @@ int eth_getenv_enetaddr_by_index(const char *base_name, int index,  	return eth_getenv_enetaddr(enetvar, enetaddr);  } +int eth_setenv_enetaddr_by_index(const char *base_name, int index, +				 uchar *enetaddr) +{ +	char enetvar[32]; +	sprintf(enetvar, index ? "%s%daddr" : "%saddr", base_name, index); +	return eth_setenv_enetaddr(enetvar, enetaddr); +} + +  static int eth_mac_skip(int index)  {  	char enetvar[15]; @@ -205,6 +214,11 @@ int eth_write_hwaddr(struct eth_device *dev, const char *base_name,  		}  		memcpy(dev->enetaddr, env_enetaddr, 6); +	} else if (is_valid_ether_addr(dev->enetaddr)) { +		eth_setenv_enetaddr_by_index(base_name, eth_number, +					     dev->enetaddr); +		printf("\nWarning: %s using MAC address from net device\n", +			dev->name);  	}  	if (dev->write_hwaddr && |