X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=net%2Fnfs.c;h=d11bb4c15fb87803eb252c764616ed814571262a;hb=d611295032c30e6c533cb356005fa82ab7992824;hp=449ea3454d82021b87310c62c58b6a36d042c42b;hpb=6e2115acb6a892d53a6881bf253ae41d3df39156;p=u-boot diff --git a/net/nfs.c b/net/nfs.c index 449ea3454d..d11bb4c15f 100644 --- a/net/nfs.c +++ b/net/nfs.c @@ -29,13 +29,9 @@ #include "nfs.h" #include "bootp.h" -/*#define NFS_DEBUG*/ - -#if (((CONFIG_COMMANDS & CFG_CMD_NET) || defined(CONFIG_CMD_NET)) \ - && ((CONFIG_COMMANDS & CFG_CMD_NFS)) || defined(CONFIG_CMD_NFS)) - #define HASHES_PER_LINE 65 /* Number of "loading" hashes per line */ -#define NFS_TIMEOUT 60 +#define NFS_RETRY_COUNT 30 +#define NFS_TIMEOUT 2000UL static int fs_mounted = 0; static unsigned long rpc_id = 0; @@ -69,10 +65,10 @@ static __inline__ int store_block (uchar * src, unsigned offset, unsigned len) { ulong newsize = offset + len; -#ifdef CFG_DIRECT_FLASH_NFS +#ifdef CONFIG_SYS_DIRECT_FLASH_NFS int i, rc = 0; - for (i=0; i= flash_info[i].start[0]) { rc = 1; @@ -87,7 +83,7 @@ store_block (uchar * src, unsigned offset, unsigned len) return -1; } } else -#endif /* CFG_DIRECT_FLASH_NFS */ +#endif /* CONFIG_SYS_DIRECT_FLASH_NFS */ { (void)memcpy ((void *)(load_addr + offset), src, len); } @@ -357,9 +353,7 @@ RPC request dispatcher static void NfsSend (void) { -#ifdef NFS_DEBUG - printf ("%s\n", __FUNCTION__); -#endif + debug("%s\n", __func__); switch (NfsState) { case STATE_PRCLOOKUP_PROG_MOUNT_REQ: @@ -397,16 +391,13 @@ rpc_lookup_reply (int prog, uchar *pkt, unsigned len) memcpy ((unsigned char *)&rpc_pkt, pkt, len); -#ifdef NFS_DEBUG - printf ("%s\n", __FUNCTION__); -#endif + debug("%s\n", __func__); if (ntohl(rpc_pkt.u.reply.id) != rpc_id) return -1; if (rpc_pkt.u.reply.rstatus || rpc_pkt.u.reply.verifier || - rpc_pkt.u.reply.astatus || rpc_pkt.u.reply.astatus) { return -1; } @@ -428,9 +419,7 @@ nfs_mount_reply (uchar *pkt, unsigned len) { struct rpc_t rpc_pkt; -#ifdef NFS_DEBUG - printf ("%s\n", __FUNCTION__); -#endif + debug("%s\n", __func__); memcpy ((unsigned char *)&rpc_pkt, pkt, len); @@ -455,9 +444,7 @@ nfs_umountall_reply (uchar *pkt, unsigned len) { struct rpc_t rpc_pkt; -#ifdef NFS_DEBUG - printf ("%s\n", __FUNCTION__); -#endif + debug("%s\n", __func__); memcpy ((unsigned char *)&rpc_pkt, pkt, len); @@ -481,9 +468,7 @@ nfs_lookup_reply (uchar *pkt, unsigned len) { struct rpc_t rpc_pkt; -#ifdef NFS_DEBUG - printf ("%s\n", __FUNCTION__); -#endif + debug("%s\n", __func__); memcpy ((unsigned char *)&rpc_pkt, pkt, len); @@ -508,9 +493,7 @@ nfs_readlink_reply (uchar *pkt, unsigned len) struct rpc_t rpc_pkt; int rlen; -#ifdef NFS_DEBUG - printf ("%s\n", __FUNCTION__); -#endif + debug("%s\n", __func__); memcpy ((unsigned char *)&rpc_pkt, pkt, len); @@ -531,7 +514,7 @@ nfs_readlink_reply (uchar *pkt, unsigned len) strcat (nfs_path, "/"); pathlen = strlen(nfs_path); memcpy (nfs_path+pathlen, (uchar *)&(rpc_pkt.u.reply.data[2]), rlen); - nfs_path[pathlen+rlen+1] = 0; + nfs_path[pathlen + rlen] = 0; } else { memcpy (nfs_path, (uchar *)&(rpc_pkt.u.reply.data[2]), rlen); nfs_path[rlen] = 0; @@ -545,9 +528,7 @@ nfs_read_reply (uchar *pkt, unsigned len) struct rpc_t rpc_pkt; int rlen; -#ifdef NFS_DEBUG_nop - printf ("%s\n", __FUNCTION__); -#endif + debug("%s\n", __func__); memcpy ((uchar *)&rpc_pkt, pkt, sizeof(rpc_pkt.u.reply)); @@ -588,9 +569,14 @@ Interfaces of U-BOOT static void NfsTimeout (void) { - puts ("Timeout\n"); - NetState = NETLOOP_FAIL; - return; + if ( ++NfsTimeoutCount > NFS_RETRY_COUNT ) { + puts ("\nRetry count exceeded; starting again\n"); + NetStartAgain (); + } else { + puts("T "); + NetSetTimeout (NFS_TIMEOUT, NfsTimeout); + NfsSend (); + } } static void @@ -598,9 +584,7 @@ NfsHandler (uchar *pkt, unsigned dest, unsigned src, unsigned len) { int rlen; -#ifdef NFS_DEBUG - printf ("%s\n", __FUNCTION__); -#endif + debug("%s\n", __func__); if (dest != NfsOurPort) return; @@ -658,9 +642,7 @@ NfsHandler (uchar *pkt, unsigned dest, unsigned src, unsigned len) NfsState = STATE_UMOUNT_REQ; NfsSend (); } else { -#ifdef NFS_DEBUG - printf ("Symlink --> %s\n", nfs_path); -#endif + debug("Symlink --> %s\n", nfs_path); nfs_filename = basename (nfs_path); nfs_path = dirname (nfs_path); @@ -671,7 +653,7 @@ NfsHandler (uchar *pkt, unsigned dest, unsigned src, unsigned len) case STATE_READ_REQ: rlen = nfs_read_reply (pkt, len); - NetSetTimeout (NFS_TIMEOUT * CFG_HZ, NfsTimeout); + NetSetTimeout (NFS_TIMEOUT, NfsTimeout); if (rlen > 0) { nfs_offset += rlen; NfsSend (); @@ -693,9 +675,7 @@ NfsHandler (uchar *pkt, unsigned dest, unsigned src, unsigned len) void NfsStart (void) { -#ifdef NFS_DEBUG - printf ("%s\n", __FUNCTION__); -#endif + debug("%s\n", __func__); NfsDownloadState = NETLOOP_FAIL; NfsServerIP = NetServerIP; @@ -738,18 +718,16 @@ NfsStart (void) printf ("Using %s device\n", eth_get_name()); #endif - puts ("File transfer via NFS from server "); print_IPaddr (NfsServerIP); - puts ("; our IP address is "); print_IPaddr (NetOurIP); + printf("File transfer via NFS from server %pI4" + "; our IP address is %pI4", &NfsServerIP, &NetOurIP); /* Check if we need to send across this subnet */ if (NetOurGatewayIP && NetOurSubnetMask) { IPaddr_t OurNet = NetOurIP & NetOurSubnetMask; IPaddr_t ServerNet = NetServerIP & NetOurSubnetMask; - if (OurNet != ServerNet) { - puts ("; sending through gateway "); - print_IPaddr (NetOurGatewayIP) ; - } + if (OurNet != ServerNet) + printf("; sending through gateway %pI4", &NetOurGatewayIP); } printf ("\nFilename '%s/%s'.", nfs_path, nfs_filename); @@ -760,7 +738,7 @@ NfsStart (void) printf ("\nLoad address: 0x%lx\n" "Loading: *\b", load_addr); - NetSetTimeout (NFS_TIMEOUT * CFG_HZ, NfsTimeout); + NetSetTimeout (NFS_TIMEOUT, NfsTimeout); NetSetHandler (NfsHandler); NfsTimeoutCount = 0; @@ -775,5 +753,3 @@ NfsStart (void) NfsSend (); } - -#endif /* CONFIG_COMMANDS & CFG_CMD_NFS */