On 08/10/2015 12:57 PM, Joe Hershberger wrote: > Too much top-posting. > > On Mon, Aug 10, 2015 at 2:41 PM, York Sun <york...@freescale.com> wrote: >> SPL doesn't use net/eth.c. You add a call in env_flags.c. >> >> I think you can put it in header file and use static inline, or keep it in >> the >> same file where it is called. > > That is probably fine. > >> Another way is to undef CONFIG_CMD_NET for SPL part. It is default to 'y' in >> Kconfig. Joe may have some good suggestion. > > I don't think this is the reason. The problem is that net is *not* > build for SPL, but env is.
Yes, env is built. The offending lines in common/env_flags.c are gated by "#ifdef CONFIG_CMD_NET". That's why I say it could be another way. York > >> On 08/10/2015 01:44 AM, Ciubotariu Codrin Constantin-B43658 wrote: >>> Hi York, >>> >>> I didn't know that SPL uses net/eth.c . Could you please suggest a place >>> for eth_validate_ethaddr_str()? >>> >>> Thanks and best regards, >>> Codrin >>> >>>> -----Original Message----- >>>> From: Sun York-R58495 >>>> Sent: Saturday, August 08, 2015 3:31 AM >>>> To: Ciubotariu Codrin Constantin-B43658; u-boot@lists.denx.de >>>> Cc: joe.hershber...@ni.com; Kushwaha Prabhakar-B32579 >>>> Subject: Re: [PATCH v3 11/16] net/eth.c: Add function to validate a MAC >>>> address >>>> >>>> On 07/24/2015 06:55 AM, Codrin Ciubotariu wrote: >>>>> The code from common/env_flags.c that checks if a string has the >>>>> format of a MAC address has been moved in net/eth.c as a separate >>>>> function called eth_validate_ethaddr_str(). >>>>> >>>>> Signed-off-by: Codrin Ciubotariu <codrin.ciubota...@freescale.com> >>>>> --- >>>>> >>>>> Changes for v3: >>>>> - none, new patch; >>>>> >>>>> common/env_flags.c | 15 ++------------- >>>>> include/net.h | 1 + >>>>> net/eth.c | 30 ++++++++++++++++++++++++++++++ >>>>> 3 files changed, 33 insertions(+), 13 deletions(-) >>>>> >>>>> diff --git a/common/env_flags.c b/common/env_flags.c index >>>>> 5189f5b..3e39fd1 100644 >>>>> --- a/common/env_flags.c >>>>> +++ b/common/env_flags.c >>>>> @@ -239,19 +239,8 @@ static int _env_flags_validate_type(const char >>>>> *value, >>>>> } >>>>> break; >>>>> case env_flags_vartype_macaddr: >>>>> - cur = value; >>>>> - for (i = 0; i < 6; i++) { >>>>> - skip_num(1, cur, &end, 2); >>>>> - if (cur == end) >>>>> - return -1; >>>>> - if (cur + 2 == end && is_hex_prefix(cur)) >>>>> - return -1; >>>>> - if (i != 5 && *end != ':') >>>>> - return -1; >>>>> - if (i == 5 && *end != '\0') >>>>> - return -1; >>>>> - cur = end + 1; >>>>> - } >>>>> + if (eth_validate_ethaddr_str(value)) >>>>> + return -1; >>>>> break; >>>>> #endif >>>>> case env_flags_vartype_end: >>>>> diff --git a/include/net.h b/include/net.h index d17173d..c487aa7 >>>>> 100644 >>>>> --- a/include/net.h >>>>> +++ b/include/net.h >>>>> @@ -218,6 +218,7 @@ 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 */ >>>>> +int eth_validate_ethaddr_str(const char *addr); >>>>> void eth_parse_enetaddr(const char *addr, uchar *enetaddr); int >>>>> eth_getenv_enetaddr(char *name, uchar *enetaddr); int >>>>> eth_setenv_enetaddr(char *name, const uchar *enetaddr); diff --git >>>>> a/net/eth.c b/net/eth.c index 953b731..a6fdf1b 100644 >>>>> --- a/net/eth.c >>>>> +++ b/net/eth.c >>>>> @@ -7,6 +7,7 @@ >>>>> */ >>>>> >>>>> #include <common.h> >>>>> +#include <linux/ctype.h> >>>>> #include <command.h> >>>>> #include <dm.h> >>>>> #include <environment.h> >>>>> @@ -19,6 +20,35 @@ >>>>> >>>>> DECLARE_GLOBAL_DATA_PTR; >>>>> >>>>> +int eth_validate_ethaddr_str(const char *addr) { >>>>> + unsigned long val; >>>>> + int i; >>>>> + const char *cur; >>>>> + char *end; >>>>> + >>>>> + if (!addr) >>>>> + return -1; >>>>> + >>>>> + cur = addr; >>>>> + for (i = 0; i < 6; i++) { >>>>> + val = simple_strtoul(cur, &end, 16); >>>>> + if (cur + 1 != end && cur + 2 != end) >>>>> + return -1; >>>>> + if (val > 0xff) >>>>> + return -1; >>>>> + if (cur + 2 >= end && tolower(*(cur + 1)) == 'x') >>>>> + return -1; >>>>> + if (i != 5 && *end != ':') >>>>> + return -1; >>>>> + if (i == 5 && *end != '\0') >>>>> + return -1; >>>>> + cur = end + 1; >>>>> + } >>>>> + >>>>> + return 0; >>>>> +} >>>>> + >>>>> void eth_parse_enetaddr(const char *addr, uchar *enetaddr) { >>>>> char *end; >>>>> >>>> >>>> Codrin, >>>> >>>> This patch breaks most SPL targets. Please reconsider the location of >>>> eth_validate_ethaddr_str(). >>>> >>>> York >> _______________________________________________ >> U-Boot mailing list >> U-Boot@lists.denx.de >> http://lists.denx.de/mailman/listinfo/u-boot _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot