]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - net/tftp.c
Remove CONFIG_SYS_BOOTCOUNT_SINGLEWORD
[people/ms/u-boot.git] / net / tftp.c
index 18ce84c20214ccec75036d135ed0da246e485c5b..6671b1f7ca726acf44b6f18f41f9f017c10fd1ec 100644 (file)
@@ -8,9 +8,10 @@
 
 #include <common.h>
 #include <command.h>
+#include <efi_loader.h>
 #include <mapmem.h>
 #include <net.h>
-#include "tftp.h"
+#include <net/tftp.h>
 #include "bootp.h"
 #ifdef CONFIG_SYS_DIRECT_FLASH_TFTP
 #include <flash.h>
 /* Well known TFTP port # */
 #define WELL_KNOWN_PORT        69
 /* Millisecs to timeout for lost pkt */
-#define TIMEOUT                100UL
+#define TIMEOUT                5000UL
 #ifndef        CONFIG_NET_RETRY_COUNT
 /* # of timeouts before giving up */
-# define TIMEOUT_COUNT 1000
+# define TIMEOUT_COUNT 10
 #else
 # define TIMEOUT_COUNT  (CONFIG_NET_RETRY_COUNT * 2)
 #endif
@@ -602,7 +603,7 @@ static void tftp_handler(uchar *pkt, unsigned dest, struct in_addr sip,
                }
 
                tftp_prev_block = tftp_cur_block;
-               timeout_count_max = TIMEOUT_COUNT;
+               timeout_count_max = tftp_timeout_count_max;
                net_set_timeout_handler(timeout_ms, tftp_timeout_handler);
 
                store_block(tftp_cur_block - 1, pkt + 2, len);
@@ -697,25 +698,38 @@ static void tftp_timeout_handler(void)
 
 void tftp_start(enum proto_t protocol)
 {
+#if CONFIG_NET_TFTP_VARS
        char *ep;             /* Environment pointer */
 
        /*
         * Allow the user to choose TFTP blocksize and timeout.
         * TFTP protocol has a minimal timeout of 1 second.
         */
-       ep = getenv("tftpblocksize");
+
+       ep = env_get("tftpblocksize");
        if (ep != NULL)
                tftp_block_size_option = simple_strtol(ep, NULL, 10);
 
-       ep = getenv("tftptimeout");
+       ep = env_get("tftptimeout");
        if (ep != NULL)
                timeout_ms = simple_strtol(ep, NULL, 10);
 
-       if (timeout_ms < 10) {
-               printf("TFTP timeout (%ld ms) too low, set min = 10 ms\n",
+       if (timeout_ms < 1000) {
+               printf("TFTP timeout (%ld ms) too low, set min = 1000 ms\n",
                       timeout_ms);
-               timeout_ms = 10;
+               timeout_ms = 1000;
+       }
+
+       ep = env_get("tftptimeoutcountmax");
+       if (ep != NULL)
+               tftp_timeout_count_max = simple_strtol(ep, NULL, 10);
+
+       if (tftp_timeout_count_max < 0) {
+               printf("TFTP timeout count max (%d ms) negative, set to 0\n",
+                      tftp_timeout_count_max);
+               tftp_timeout_count_max = 0;
        }
+#endif
 
        debug("TFTP blocksize = %i, timeout = %ld ms\n",
              tftp_block_size_option, timeout_ms);
@@ -728,8 +742,8 @@ void tftp_start(enum proto_t protocol)
                        (net_ip.s_addr >> 16) & 0xFF,
                        (net_ip.s_addr >> 24) & 0xFF);
 
-               strncpy(tftp_filename, default_filename, MAX_LEN);
-               tftp_filename[MAX_LEN - 1] = 0;
+               strncpy(tftp_filename, default_filename, DEFAULT_NAME_LEN);
+               tftp_filename[DEFAULT_NAME_LEN - 1] = 0;
 
                printf("*** Warning: no boot file name; using '%s'\n",
                       tftp_filename);
@@ -791,6 +805,9 @@ void tftp_start(enum proto_t protocol)
                printf("Load address: 0x%lx\n", load_addr);
                puts("Loading: *\b");
                tftp_state = STATE_SEND_RRQ;
+#ifdef CONFIG_CMD_BOOTEFI
+               efi_set_bootdev("Net", "", tftp_filename);
+#endif
        }
 
        time_start = get_timer(0);
@@ -807,10 +824,10 @@ void tftp_start(enum proto_t protocol)
        tftp_our_port = 1024 + (get_timer(0) % 3072);
 
 #ifdef CONFIG_TFTP_PORT
-       ep = getenv("tftpdstp");
+       ep = env_get("tftpdstp");
        if (ep != NULL)
                tftp_remote_port = simple_strtol(ep, NULL, 10);
-       ep = getenv("tftpsrcp");
+       ep = env_get("tftpsrcp");
        if (ep != NULL)
                tftp_our_port = simple_strtol(ep, NULL, 10);
 #endif
@@ -842,7 +859,7 @@ void tftp_start_server(void)
 
        puts("Loading: *\b");
 
-       timeout_count_max = TIMEOUT_COUNT;
+       timeout_count_max = tftp_timeout_count_max;
        timeout_count = 0;
        timeout_ms = TIMEOUT;
        net_set_timeout_handler(timeout_ms, tftp_timeout_handler);