diff options
author | Alex Kiernan <alex.kiernan@gmail.com> | 2018-04-01 09:22:38 +0000 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2018-04-08 23:00:58 -0400 |
commit | 9925f1dbc38c0ef7220c6fca5968c708b8e48764 (patch) | |
tree | 7f9453351477c094456f585036ca3d9b9a06c4c6 /cmd | |
parent | 8cf2f3602e6778b207f3a95fda6be3fc420a8162 (diff) | |
download | u-boot-9925f1dbc38c0ef7220c6fca5968c708b8e48764.tar.gz |
net: Move enetaddr env access code to env config instead of net config
In order that we can use eth_env_* even when CONFIG_NET isn't set, move
these functions to environment code from net code.
This fixes failures such as:
board/ti/am335x/built-in.o: In function `board_late_init':
board/ti/am335x/board.c:752: undefined reference to `eth_env_set_enetaddr'
u-boot/board/ti/am335x/board.c:766: undefined reference to `eth_env_set_enetaddr'
which caters for use cases such as:
commit f411b5cca48f ("board: am335x: Always set eth/eth1addr environment
variable")
when Ethernet is required in Linux, but not U-Boot.
Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/elf.c | 1 | ||||
-rw-r--r-- | cmd/ethsw.c | 1 | ||||
-rw-r--r-- | cmd/nvedit.c | 30 |
3 files changed, 32 insertions, 0 deletions
@@ -16,6 +16,7 @@ #include <common.h> #include <command.h> #include <elf.h> +#include <environment.h> #include <net.h> #include <vxworks.h> #ifdef CONFIG_X86 diff --git a/cmd/ethsw.c b/cmd/ethsw.c index b600965e8a..92a60b4515 100644 --- a/cmd/ethsw.c +++ b/cmd/ethsw.c @@ -8,6 +8,7 @@ #include <common.h> #include <command.h> +#include <environment.h> #include <errno.h> #include <env_flags.h> #include <ethsw.h> diff --git a/cmd/nvedit.c b/cmd/nvedit.c index 4cb25b8248..9838678262 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, uint8_t *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, uint8_t *enetaddr) +{ + eth_parse_enetaddr(env_get(name), enetaddr); + return is_valid_ethaddr(enetaddr); +} + +int eth_env_set_enetaddr(const char *name, const uint8_t *enetaddr) +{ + char buf[ARP_HLEN_ASCII + 1]; + + if (eth_env_get_enetaddr(name, (uint8_t *)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[]) { |