
Commit f411b5cca48f ("board: am335x: Always set eth/eth1addr environment variable") adds support for Ethernet in Linux, but not U-Boot.
Ensure that we can do this even when U-Boot is compiled without network support.
Signed-off-by: Alex Kiernan alex.kiernan@gmail.com ---
cmd/nvedit.c | 30 ++++++++++++++++++++++++++++++ include/common.h | 4 ++++ include/net.h | 3 --- net/eth_common.c | 30 ------------------------------ 4 files changed, 34 insertions(+), 33 deletions(-)
diff --git a/cmd/nvedit.c b/cmd/nvedit.c index 4cb25b8..4008de1 100644 --- a/cmd/nvedit.c +++ b/cmd/nvedit.c @@ -341,6 +341,36 @@ ulong env_get_hex(const char *varname, ulong default_val) return value; }
+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_env_get_enetaddr(const char *name, uchar *enetaddr) +{ + eth_parse_enetaddr(env_get(name), enetaddr); + return is_valid_ethaddr(enetaddr); +} + +int eth_env_set_enetaddr(const char *name, const uchar *enetaddr) +{ + char buf[ARP_HLEN_ASCII + 1]; + + if (eth_env_get_enetaddr(name, (uchar *)buf)) + return -EEXIST; + + sprintf(buf, "%pM", enetaddr); + + return env_set(name, buf); +} + #ifndef CONFIG_SPL_BUILD static int do_env_set(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { diff --git a/include/common.h b/include/common.h index 3087505..b7280eb 100644 --- a/include/common.h +++ b/include/common.h @@ -243,6 +243,10 @@ static inline int env_set_addr(const char *varname, const void *addr) return env_set_hex(varname, (ulong)addr); }
+void eth_parse_enetaddr(const char *addr, uchar *enetaddr); +int eth_env_get_enetaddr(const char *name, uchar *enetaddr); +int eth_env_set_enetaddr(const char *name, const uchar *enetaddr); + #ifdef CONFIG_AUTO_COMPLETE int env_complete(char *var, int maxv, char *cmdv[], int maxsz, char *buf); #endif diff --git a/include/net.h b/include/net.h index 455b48f..c339b9d 100644 --- a/include/net.h +++ b/include/net.h @@ -238,9 +238,6 @@ void eth_try_another(int first_restart); /* Change the device */ void eth_set_current(void); /* set nterface to ethcur var */
int eth_get_dev_index(void); /* get the device index */ -void eth_parse_enetaddr(const char *addr, uchar *enetaddr); -int eth_env_get_enetaddr(const char *name, uchar *enetaddr); -int eth_env_set_enetaddr(const char *name, const uchar *enetaddr);
/** * eth_env_set_enetaddr_by_index() - set the MAC address environment variable diff --git a/net/eth_common.c b/net/eth_common.c index 66d0d22..cb7f029 100644 --- a/net/eth_common.c +++ b/net/eth_common.c @@ -12,36 +12,6 @@ #include <net.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_env_get_enetaddr(const char *name, uchar *enetaddr) -{ - eth_parse_enetaddr(env_get(name), enetaddr); - return is_valid_ethaddr(enetaddr); -} - -int eth_env_set_enetaddr(const char *name, const uchar *enetaddr) -{ - char buf[ARP_HLEN_ASCII + 1]; - - if (eth_env_get_enetaddr(name, (uchar *)buf)) - return -EEXIST; - - sprintf(buf, "%pM", enetaddr); - - return env_set(name, buf); -} - int eth_env_get_enetaddr_by_index(const char *base_name, int index, uchar *enetaddr) {