Hi Michael, On Thu, May 17, 2012 at 3:43 PM, Michael Walle <mich...@walle.cc> wrote: > > Hi Joe, > > Am Mittwoch 16 Mai 2012, 02:56:39 schrieb Joe Hershberger: >> Hi Michael, >> >> On Fri, May 11, 2012 at 5:50 PM, Michael Walle <mich...@walle.cc> wrote: >> > Signed-off-by: Michael Walle <mich...@walle.cc> >> > Cc: Joe Hershberger <joe.hershber...@gmail.com> >> > ---- >> > diff --git a/net/eth.c b/net/eth.c >> > index afce863..d66e22a 100644 >> > --- a/net/eth.c >> > +++ b/net/eth.c >> > @@ -67,6 +67,21 @@ int eth_getenv_enetaddr_by_index(const char >> > *base_name, int index, return eth_getenv_enetaddr(enetvar, enetaddr); >> > } >> > >> > +#ifdef CONFIG_SETENV_ENETADDR_BY_INDEX >> > +int eth_setenv_enetaddr_by_index(const char *base_name, int index, >> > + const uchar *enetaddr) >> > +{ >> > + char enetvar[32]; >> > + >> > + if (index) >> > + sprintf(enetvar, "%s%daddr", base_name, index); >> > + else >> > + sprintf(enetvar, "%saddr", base_name); >> > + >> > + return eth_setenv_enetaddr(enetvar, enetaddr); >> > +} >> > +#endif
How about something like this instead... -----------8<-----------8<-----------8<-----------8<----------- diff --git a/include/net.h b/include/net.h index a092f29..5bc4b0d 100644 --- a/include/net.h +++ b/include/net.h @@ -600,6 +600,22 @@ static inline int is_broadcast_ether_addr(const u8 *addr) } /* + * Create a variable name for the ethernet address + * + * @param base_name Input string constant (typically "eth") prepended to name + * @param index Index to be added to the name if not 0 + * @param ethaddr_var Output string variable name for MAC address + */ +static inline void eth_enetaddr_var_by_index(const char *base_name, int index, + char *ethaddr_var) +{ + if (index) + sprintf(ethaddr_var, "%s%daddr", base_name, index); + else + sprintf(ethaddr_var, "%saddr", base_name); +} + +/* * is_valid_ether_addr - Determine if the given Ethernet address is valid * @addr: Pointer to a six-byte array containing the Ethernet address * diff --git a/net/eth.c b/net/eth.c index d9a6430..4b38bc4 100644 --- a/net/eth.c +++ b/net/eth.c @@ -58,7 +58,8 @@ 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); + + eth_enetaddr_var_by_index(base_name, index, enetvar); return eth_getenv_enetaddr(enetvar, enetaddr); } ----------->8----------->8----------->8----------->8----------- And then in your board support... -----------8<-----------8<-----------8<-----------8<----------- diff --git a/board/buffalo/lsxl/lsxl.c b/board/buffalo/lsxl/lsxl.c new file mode 100644 index 0000000..603d11a --- /dev/null +++ b/board/buffalo/lsxl/lsxl.c +... + +static void rescue_mode(void) +{ + uchar enetaddr[6]; + char enetvar[32]; + + printf("Entering rescue mode..\n"); + if (!eth_getenv_enetaddr_by_index("eth", 0, enetaddr)) { + eth_random_enetaddr(enetaddr); + eth_enetaddr_var_by_index("eth", 0, enetvar); + if (eth_setenv_enetaddr(enetvar, enetaddr)) { + printf("Failed to set ethernet address\n"); + set_led(LED_ALARM_BLINKING); + return; + } + } + setenv("bootsource", "rescue"); +} + ----------->8----------->8----------->8----------->8----------- That way you aren't adding a function that noone else uses and you don't need a silly guard around it. Cheers, -Joe _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot