Declare new utility functions for converting between the environment
variables (eth*addr) and the binary MAC address representation.  This way
we can unify all the random places that already do this kind of thing.

The functions in question:
        eth_parse_enetaddr - "..." -> {...}
        eth_getenv_enetaddr - env -> {...}
        eth_setenv_enetaddr - {...} -> env
        str_enetaddr - {...} -> "..."

Signed-off-by: Mike Frysinger <vap...@gentoo.org>
CC: Ben Warren <biggerbadder...@gmail.com>
---
 include/net.h |    4 +++
 net/eth.c     |   79 ++++++++++++++++++++++++++++++++++----------------------
 2 files changed, 52 insertions(+), 31 deletions(-)

diff --git a/include/net.h b/include/net.h
index bbe0d4b..25124be 100644
--- a/include/net.h
+++ b/include/net.h
@@ -119,6 +119,10 @@ extern struct eth_device *eth_get_dev(void);       /* get 
the current device MAC   */
 extern struct eth_device *eth_get_dev_by_name(char *devname); /* get device    
*/
 extern int eth_get_dev_index (void);           /* get the device index         
*/
 extern void eth_set_enetaddr(int num, char* a);        /* Set new MAC address  
        */
+extern void eth_parse_enetaddr(const char *addr, uchar *enetaddr);
+extern int eth_getenv_enetaddr(char *name, uchar *enetaddr);
+extern int eth_setenv_enetaddr(char *name, const uchar *enetaddr);
+extern char *str_enetaddr(char *buf, const uchar *enetaddr);
 
 extern int eth_init(bd_t *bis);                        /* Initialize the 
device        */
 extern int eth_send(volatile void *packet, int length);           /* Send a 
packet     */
diff --git a/net/eth.c b/net/eth.c
index b7ef09f..d8025d0 100644
--- a/net/eth.c
+++ b/net/eth.c
@@ -26,6 +26,43 @@
 #include <net.h>
 #include <miiphy.h>
 
+#ifdef CONFIG_CMD_NET
+char *str_enetaddr(char *buf, const uchar *enetaddr)
+{
+       sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X",
+               enetaddr[0], enetaddr[1], enetaddr[2],
+               enetaddr[3], enetaddr[4], enetaddr[5]);
+       return buf;
+}
+
+void eth_parse_enetaddr(const char *addr, uchar *enetaddr)
+{
+       char *end;
+       int i;
+       for (i = 0; i < 6; ++i) {
+               enetaddr[i] = addr ? simple_strtoul(addr, &end, 16) : 0;
+               if (addr)
+                       addr = (*end) ? end + 1 : end;
+       }
+}
+
+int eth_getenv_enetaddr(char *name, uchar *enetaddr)
+{
+       int ret = 0;
+       char *addr = getenv(name);
+       if (!addr)
+               ret = -1;
+       eth_parse_enetaddr(addr, enetaddr);
+       return ret;
+}
+
+int eth_setenv_enetaddr(char *name, const uchar *enetaddr)
+{
+       char buf[20];
+       return setenv(name, str_enetaddr(buf, enetaddr));
+}
+#endif
+
 #if defined(CONFIG_CMD_NET) && defined(CONFIG_NET_MULTI)
 
 /*
@@ -131,8 +168,7 @@ int eth_initialize(bd_t *bis)
 {
        char enetvar[32];
        unsigned char env_enetaddr[6];
-       int i, eth_number = 0;
-       char *tmp, *end;
+       int eth_number = 0;
 
        eth_devices = NULL;
        eth_current = NULL;
@@ -172,13 +208,7 @@ int eth_initialize(bd_t *bis)
                        }
 
                        sprintf(enetvar, eth_number ? "eth%daddr" : "ethaddr", 
eth_number);
-                       tmp = getenv (enetvar);
-
-                       for (i=0; i<6; i++) {
-                               env_enetaddr[i] = tmp ? simple_strtoul(tmp, 
&end, 16) : 0;
-                               if (tmp)
-                                       tmp = (*end) ? end+1 : end;
-                       }
+                       eth_parse_enetaddr(getenv(enetvar), env_enetaddr);
 
                        if (memcmp(env_enetaddr, "\0\0\0\0\0\0", 6)) {
                                if (memcmp(dev->enetaddr, "\0\0\0\0\0\0", 6) &&
@@ -186,16 +216,10 @@ int eth_initialize(bd_t *bis)
                                {
                                        printf ("\nWarning: %s MAC addresses 
don't match:\n",
                                                dev->name);
-                                       printf ("Address in SROM is         "
-                                              
"%02X:%02X:%02X:%02X:%02X:%02X\n",
-                                              dev->enetaddr[0], 
dev->enetaddr[1],
-                                              dev->enetaddr[2], 
dev->enetaddr[3],
-                                              dev->enetaddr[4], 
dev->enetaddr[5]);
-                                       printf ("Address in environment is  "
-                                              
"%02X:%02X:%02X:%02X:%02X:%02X\n",
-                                              env_enetaddr[0], env_enetaddr[1],
-                                              env_enetaddr[2], env_enetaddr[3],
-                                              env_enetaddr[4], 
env_enetaddr[5]);
+                                       printf ("Address in SROM is         
%s\n",
+                                               str_enetaddr(enetvar, 
dev->enetaddr));
+                                       printf ("Address in environment is  
%s\n",
+                                               str_enetaddr(enetvar, 
env_enetaddr));
                                }
 
                                memcpy(dev->enetaddr, env_enetaddr, 6);
@@ -224,19 +248,14 @@ int eth_initialize(bd_t *bis)
 void eth_set_enetaddr(int num, char *addr) {
        struct eth_device *dev;
        unsigned char enetaddr[6];
-       char *end;
-       int i;
+       char buf[20];
 
        debug ("eth_set_enetaddr(num=%d, addr=%s)\n", num, addr);
 
        if (!eth_devices)
                return;
 
-       for (i=0; i<6; i++) {
-               enetaddr[i] = addr ? simple_strtoul(addr, &end, 16) : 0;
-               if (addr)
-                       addr = (*end) ? end+1 : end;
-       }
+       eth_parse_enetaddr(addr, enetaddr);
 
        dev = eth_devices;
        while(num-- > 0) {
@@ -246,12 +265,10 @@ void eth_set_enetaddr(int num, char *addr) {
                        return;
        }
 
+       str_enetaddr(buf, enetaddr);
        debug ( "Setting new HW address on %s\n"
-               "New Address is             %02X:%02X:%02X:%02X:%02X:%02X\n",
-               dev->name,
-               enetaddr[0], enetaddr[1],
-               enetaddr[2], enetaddr[3],
-               enetaddr[4], enetaddr[5]);
+               "New Address is             %s\n",
+               dev->name, buf);
 
        memcpy(dev->enetaddr, enetaddr, 6);
 }
-- 
1.6.1.3

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to