]> git.sur5r.net Git - u-boot/blobdiff - doc/README.enetaddr
Merge branch 'master' of git://git.denx.de/u-boot-sunxi
[u-boot] / doc / README.enetaddr
index 94d800a02ae0ff437746030587fbc65a75d49276..f9264859866c1ca57cd927b00d96e3960fbad756 100644 (file)
@@ -15,7 +15,7 @@ Here are the places where MAC addresses might be stored:
  - board-specific location (eeprom, dedicated flash, ...)
        Note: only used when mandatory due to hardware design etc...
 
- - environment ("ethaddr", "eth1addr", ...) (see CONFIG_ETHADDR)
+ - environment ("ethaddr", "eth1addr", ...)
        Note: this is the preferred way to permanently store MAC addresses
 
  - ethernet data (struct eth_device -> enetaddr)
@@ -32,12 +32,20 @@ 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
-4. Program hardware in the device's init() function.
-
-If somebody wants to subvert the design philosophy, this can be done
-in the board-specific board_eth_init() function by calling eth_init()
-after all the NICs have been registered.
+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.
+   If both are invalid and CONFIG_NET_RANDOM_ETHADDR is defined, a random,
+   locally-assigned MAC is written to eth_device->enetaddr.
+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
+       c) The address is valid (unicast, not all-zeros)
+
+Previous behavior had the MAC address always being programmed into hardware
+in the device's init() function.
 
 -------
  Usage
@@ -76,26 +84,26 @@ uchar enetaddr[6];
 eth_parse_enetaddr(addr, enetaddr);
 /* enetaddr now equals { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 } */
 
-       * int eth_getenv_enetaddr(char *name, uchar *enetaddr);
+       * int eth_env_get_enetaddr(char *name, uchar *enetaddr);
 
 Look up an environment variable and convert the stored address.  If the address
 is valid, then the function returns 1.  Otherwise, the function returns 0.  In
 all cases, the enetaddr memory is initialized.  If the env var is not found,
-then it is set to all zeros.  The common function is_valid_ether_addr() is used
+then it is set to all zeros.  The common function is_valid_ethaddr() is used
 to determine address validity.
 uchar enetaddr[6];
-if (!eth_getenv_enetaddr("ethaddr", enetaddr)) {
+if (!eth_env_get_enetaddr("ethaddr", enetaddr)) {
        /* "ethaddr" is not set in the environment */
        ... try and setup "ethaddr" in the env ...
 }
 /* enetaddr is now set to the value stored in the ethaddr env var */
 
-       * int eth_setenv_enetaddr(char *name, const uchar *enetaddr);
+       * int eth_env_set_enetaddr(char *name, const uchar *enetaddr);
 
 Store the MAC address into the named environment variable.  The return value is
-the same as the setenv() function.
+the same as the env_set() function.
 uchar enetaddr[6] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 };
-eth_setenv_enetaddr("ethaddr", enetaddr);
+eth_env_set_enetaddr("ethaddr", enetaddr);
 /* the "ethaddr" env var should now be set to "00:11:22:33:44:55" */
 
        * the %pM format modifier