|
@@ -10,6 +10,49 @@
|
|
|
#include <miiphy.h>
|
|
|
#include "eth_internal.h"
|
|
|
|
|
|
+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(const char *name, uchar *enetaddr)
|
|
|
+{
|
|
|
+ eth_parse_enetaddr(getenv(name), enetaddr);
|
|
|
+ return is_valid_ethaddr(enetaddr);
|
|
|
+}
|
|
|
+
|
|
|
+int eth_setenv_enetaddr(const char *name, const uchar *enetaddr)
|
|
|
+{
|
|
|
+ char buf[20];
|
|
|
+
|
|
|
+ sprintf(buf, "%pM", enetaddr);
|
|
|
+
|
|
|
+ return setenv(name, buf);
|
|
|
+}
|
|
|
+
|
|
|
+int eth_getenv_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_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);
|
|
|
+}
|
|
|
+
|
|
|
void eth_common_init(void)
|
|
|
{
|
|
|
bootstage_mark(BOOTSTAGE_ID_NET_ETH_START);
|