X-Git-Url: https://git.kernelconcepts.de/?a=blobdiff_plain;f=net%2Fnfs.c;h=d11bb4c15fb87803eb252c764616ed814571262a;hb=2fba7a08770586b342db367750a8447f21882d9a;hp=1b27c977c18df5dcf384c006e2e438919cfa0879;hpb=881cf02f47390c7515f4e11727a473ab042d6d76;p=karo-tx-uboot.git diff --git a/net/nfs.c b/net/nfs.c index 1b27c977c1..d11bb4c15f 100644 --- a/net/nfs.c +++ b/net/nfs.c @@ -29,12 +29,9 @@ #include "nfs.h" #include "bootp.h" -/*#define NFS_DEBUG*/ - -#if defined(CONFIG_CMD_NET) && 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; @@ -68,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; @@ -86,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); } @@ -356,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: @@ -396,9 +391,7 @@ 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; @@ -426,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); @@ -453,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); @@ -479,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); @@ -506,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); @@ -529,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; @@ -543,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)); @@ -586,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 @@ -596,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; @@ -656,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); @@ -669,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 (); @@ -691,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; @@ -736,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); @@ -758,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; @@ -773,5 +753,3 @@ NfsStart (void) NfsSend (); } - -#endif