'netretry = once' does the same as 'netretry = yes', because it is not stored
when it was tried once.
Signed-off-by: Remy Bohmer li...@bohmer.net
---
net/net.c | 34 +-
1 files changed, 25 insertions(+), 9 deletions(-)
diff --git a/net/net.c b/net/net.c
index cab4b2d..fd13cd9 100644
--- a/net/net.c
+++ b/net/net.c
@@ -197,6 +197,8 @@ volatile uchar *NetTxPacket = 0;/* THE transmit packet
*/
static int net_check_prereq (proto_t protocol);
+static int NetTryCount;
+
/**/
IPaddr_t NetArpWaitPacketIP;
@@ -320,6 +322,7 @@ NetLoop(proto_t protocol)
NetArpWaitReplyIP = 0;
NetArpWaitTxPacket = NULL;
NetTxPacket = NULL;
+ NetTryCount = 1;
if (!NetTxPacket) {
int i;
@@ -558,17 +561,30 @@ startAgainHandler(uchar * pkt, unsigned dest, unsigned
src, unsigned len)
void NetStartAgain (void)
{
char *nretry;
- int noretry = 0, once = 0;
+ int retry_forever = 0;
+ unsigned long retrycnt = 0;
+
+ nretry = getenv(netretry);
+ if (nretry) {
+ if (!strcmp(nretry, yes))
+ retry_forever = 1;
+ else if (!strcmp(nretry, no))
+ retrycnt = 0;
+ else if (!strcmp(nretry, once))
+ retrycnt = 1;
+ else
+ retrycnt = simple_strtoul(nretry, NULL, 0);
+ } else
+ retry_forever = 1;
- if ((nretry = getenv (netretry)) != NULL) {
- noretry = (strcmp (nretry, no) == 0);
- once = (strcmp (nretry, once) == 0);
- }
- if (noretry) {
- eth_halt ();
+ if ((!retry_forever) (NetTryCount = retrycnt)) {
+ eth_halt();
NetState = NETLOOP_FAIL;
return;
}
+
+ NetTryCount++;
+
#ifndef CONFIG_NET_MULTI
NetSetTimeout (1UL, startAgainTimeout);
NetSetHandler (startAgainHandler);
@@ -580,7 +596,7 @@ void NetStartAgain (void)
eth_init (gd-bd);
if (NetRestartWrap) {
NetRestartWrap = 0;
- if (NetDevExists !once) {
+ if (NetDevExists) {
NetSetTimeout (1UL, startAgainTimeout);
NetSetHandler (startAgainHandler);
} else {
--
1.6.0.4
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot