summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuca Ceresoli <luca.ceresoli@comelit.it>2011-05-17 00:03:40 +0000
committerWolfgang Denk <wd@denx.de>2011-05-19 21:38:32 +0200
commit7a83af07aef3c924cfb2d36e68eea8b86d22f2a1 (patch)
tree695b7755a149f98ace4097f4a48762f258614d35
parente59e35620af0d57de75cddb9ec3f19449b998868 (diff)
downloadu-boot-7a83af07aef3c924cfb2d36e68eea8b86d22f2a1.tar.gz
u-boot-7a83af07aef3c924cfb2d36e68eea8b86d22f2a1.tar.xz
u-boot-7a83af07aef3c924cfb2d36e68eea8b86d22f2a1.zip
TFTP: add tftpsrv command
Signed-off-by: Luca Ceresoli <luca.ceresoli@comelit.it> Cc: Wolfgang Denk <wd@denx.de> Acked-by: Detlev Zundel <dzu@denx.de>
-rw-r--r--README1
-rw-r--r--common/cmd_net.c17
-rw-r--r--include/net.h3
-rw-r--r--net/net.c7
4 files changed, 26 insertions, 2 deletions
diff --git a/README b/README
index 6f3748d6dc..ed73981b94 100644
--- a/README
+++ b/README
@@ -709,6 +709,7 @@ The following options need to be configured:
(requires CONFIG_CMD_MEMORY)
CONFIG_CMD_SOURCE "source" command Support
CONFIG_CMD_SPI * SPI serial bus support
+ CONFIG_CMD_TFTPSRV * TFTP transfer in server mode
CONFIG_CMD_USB * USB support
CONFIG_CMD_VFD * VFD support (TRAB)
CONFIG_CMD_CDP * Cisco Discover Protocol support
diff --git a/common/cmd_net.c b/common/cmd_net.c
index 8c6f5c8c3d..b2c9355a21 100644
--- a/common/cmd_net.c
+++ b/common/cmd_net.c
@@ -52,6 +52,23 @@ U_BOOT_CMD(
"[loadAddress] [[hostIPaddr:]bootfilename]"
);
+#ifdef CONFIG_CMD_TFTPSRV
+static int do_tftpsrv(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
+{
+ return netboot_common(TFTPSRV, cmdtp, argc, argv);
+}
+
+U_BOOT_CMD(
+ tftpsrv, 2, 1, do_tftpsrv,
+ "act as a TFTP server and boot the first received file",
+ "[loadAddress]\n"
+ "Listen for an incoming TFTP transfer, receive a file and boot it.\n"
+ "The transfer is aborted if a transfer has not been started after\n"
+ "about 50 seconds or if Ctrl-C is pressed."
+);
+#endif
+
+
#ifdef CONFIG_CMD_RARP
int do_rarpb (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
diff --git a/include/net.h b/include/net.h
index 01f7159a07..018a74402c 100644
--- a/include/net.h
+++ b/include/net.h
@@ -364,7 +364,8 @@ extern int NetState; /* Network loop state */
extern int NetRestartWrap; /* Tried all network devices */
#endif
-typedef enum { BOOTP, RARP, ARP, TFTP, DHCP, PING, DNS, NFS, CDP, NETCONS, SNTP } proto_t;
+typedef enum { BOOTP, RARP, ARP, TFTP, DHCP, PING, DNS, NFS, CDP, NETCONS, SNTP,
+ TFTPSRV } proto_t;
/* from net/net.c */
extern char BootFile[128]; /* Boot File name */
diff --git a/net/net.c b/net/net.c
index 2abf87929b..7a93542122 100644
--- a/net/net.c
+++ b/net/net.c
@@ -423,7 +423,11 @@ restart:
/* always use ARP to get server ethernet address */
TftpStart();
break;
-
+#ifdef CONFIG_CMD_TFTPSRV
+ case TFTPSRV:
+ TftpStartServer();
+ break;
+#endif
#if defined(CONFIG_CMD_DHCP)
case DHCP:
BootpTry = 0;
@@ -1791,6 +1795,7 @@ common:
/* Fall through */
case NETCONS:
+ case TFTPSRV:
if (NetOurIP == 0) {
puts("*** ERROR: `ipaddr' not set\n");
return 1;