projects
/
oweals
/
u-boot.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fb: Add a prototype for board_video_skip()
[oweals/u-boot.git]
/
net
/
tftp.c
diff --git
a/net/tftp.c
b/net/tftp.c
index 7aa3e23c95d1aba5f79202b7a0f550fd04889754..966d1cfba360ce7e7505dd5f806ce13543b0654c 100644
(file)
--- a/
net/tftp.c
+++ b/
net/tftp.c
@@
-11,6
+11,9
@@
#include <net.h>
#include "tftp.h"
#include "bootp.h"
#include <net.h>
#include "tftp.h"
#include "bootp.h"
+#ifdef CONFIG_SYS_DIRECT_FLASH_TFTP
+#include <flash.h>
+#endif
/* Well known TFTP port # */
#define WELL_KNOWN_PORT 69
/* Well known TFTP port # */
#define WELL_KNOWN_PORT 69
@@
-37,6
+40,7
@@
static ulong TftpTimeoutMSecs = TIMEOUT;
static int TftpTimeoutCountMax = TIMEOUT_COUNT;
static ulong TftpTimeoutMSecs = TIMEOUT;
static int TftpTimeoutCountMax = TIMEOUT_COUNT;
+static ulong time_start; /* Record time we started tftp */
/*
* These globals govern the timeout behavior when attempting a connection to a
/*
* These globals govern the timeout behavior when attempting a connection to a
@@
-112,10
+116,6
@@
static char default_filename[DEFAULT_NAME_LEN];
static char tftp_filename[MAX_LEN];
static char tftp_filename[MAX_LEN];
-#ifdef CONFIG_SYS_DIRECT_FLASH_TFTP
-extern flash_info_t flash_info[];
-#endif
-
/* 512 is poor choice for ethernet, MTU is typically 1500.
* Minus eth.hdrs thats 1468. Can get 2x better throughput with
* almost-MTU block sizes. At least try... fall back to 512 if need be.
/* 512 is poor choice for ethernet, MTU is typically 1500.
* Minus eth.hdrs thats 1468. Can get 2x better throughput with
* almost-MTU block sizes. At least try... fall back to 512 if need be.
@@
-137,7
+137,6
@@
static unsigned *Bitmap;
static int PrevBitmapHole, Mapsize = MTFTP_BITMAPSIZE;
static uchar ProhibitMcast, MasterClient;
static uchar Multicast;
static int PrevBitmapHole, Mapsize = MTFTP_BITMAPSIZE;
static uchar ProhibitMcast, MasterClient;
static uchar Multicast;
-extern IPaddr_t Mcast_addr;
static int Mcast_port;
static ulong TftpEndingBlock; /* can get 'last' block before done..*/
static int Mcast_port;
static ulong TftpEndingBlock; /* can get 'last' block before done..*/
@@
-157,8
+156,8
@@
mcast_cleanup(void)
#endif /* CONFIG_MCAST_TFTP */
#endif /* CONFIG_MCAST_TFTP */
-static
__inline__
void
-store_block(
unsigned
block, uchar *src, unsigned len)
+static
inline
void
+store_block(
int
block, uchar *src, unsigned len)
{
ulong offset = block * TftpBlkSize + TftpBlockWrapOffset;
ulong newsize = offset + len;
{
ulong offset = block * TftpBlkSize + TftpBlockWrapOffset;
ulong newsize = offset + len;
@@
-179,11
+178,10
@@
store_block(unsigned block, uchar *src, unsigned len)
rc = flash_write((char *)src, (ulong)(load_addr+offset), len);
if (rc) {
flash_perror(rc);
rc = flash_write((char *)src, (ulong)(load_addr+offset), len);
if (rc) {
flash_perror(rc);
-
NetState = NETLOOP_FAIL
;
+
net_set_state(NETLOOP_FAIL)
;
return;
}
return;
}
- }
- else
+ } else
#endif /* CONFIG_SYS_DIRECT_FLASH_TFTP */
{
(void)memcpy((void *)(load_addr + offset), src, len);
#endif /* CONFIG_SYS_DIRECT_FLASH_TFTP */
{
(void)memcpy((void *)(load_addr + offset), src, len);
@@
-283,7
+281,7
@@
static void update_block_number(void)
* number of 0 this means that there was a wrap
* around of the (16 bit) counter.
*/
* number of 0 this means that there was a wrap
* around of the (16 bit) counter.
*/
- if (TftpBlock == 0) {
+ if (TftpBlock == 0
&& TftpLastBlock != 0
) {
TftpBlockWrap++;
TftpBlockWrapOffset += TftpBlkSize * TFTP_SEQUENCE_SIZE;
TftpTimeoutCount = 0; /* we've done well, reset thhe timeout */
TftpBlockWrap++;
TftpBlockWrapOffset += TftpBlkSize * TFTP_SEQUENCE_SIZE;
TftpTimeoutCount = 0; /* we've done well, reset thhe timeout */
@@
-302,17
+300,23
@@
static void tftp_complete(void)
TftpNumchars++;
}
#endif
TftpNumchars++;
}
#endif
+ time_start = get_timer(time_start);
+ if (time_start > 0) {
+ puts("\n\t "); /* Line up with "Loading: " */
+ print_size(NetBootFileXferSize /
+ time_start * 1000, "/s");
+ }
puts("\ndone\n");
puts("\ndone\n");
-
NetState = NETLOOP_SUCCESS
;
+
net_set_state(NETLOOP_SUCCESS)
;
}
static void
TftpSend(void)
{
uchar *pkt;
}
static void
TftpSend(void)
{
uchar *pkt;
-
volatile
uchar *xp;
- int
len = 0;
-
volatile
ushort *s;
+ uchar *xp;
+ int len = 0;
+ ushort *s;
#ifdef CONFIG_MCAST_TFTP
/* Multicast TFTP.. non-MasterClients do not ACK data. */
#ifdef CONFIG_MCAST_TFTP
/* Multicast TFTP.. non-MasterClients do not ACK data. */
@@
-325,7
+329,7
@@
TftpSend(void)
* We will always be sending some sort of packet, so
* cobble together the packet headers now.
*/
* We will always be sending some sort of packet, so
* cobble together the packet headers now.
*/
- pkt =
(uchar *)(NetTxPacket + NetEthHdrSize() + IP_HDR_SIZE)
;
+ pkt =
NetTxPacket + NetEthHdrSize() + IP_UDP_HDR_SIZE
;
switch (TftpState) {
case STATE_SEND_RRQ:
switch (TftpState) {
case STATE_SEND_RRQ:
@@
-357,12
+361,14
@@
TftpSend(void)
0, TftpBlkSizeOption, 0);
#ifdef CONFIG_MCAST_TFTP
/* Check all preconditions before even trying the option */
0, TftpBlkSizeOption, 0);
#ifdef CONFIG_MCAST_TFTP
/* Check all preconditions before even trying the option */
- if (!ProhibitMcast
- && (Bitmap = malloc(Mapsize))
- && eth_get_dev()->mcast) {
- free(Bitmap);
- Bitmap = NULL;
- pkt += sprintf((char *)pkt, "multicast%c%c", 0, 0);
+ if (!ProhibitMcast) {
+ Bitmap = malloc(Mapsize);
+ if (Bitmap && eth_get_dev()->mcast) {
+ free(Bitmap);
+ Bitmap = NULL;
+ pkt += sprintf((char *)pkt, "multicast%c%c",
+ 0, 0);
+ }
}
#endif /* CONFIG_MCAST_TFTP */
len = pkt - xp;
}
#endif /* CONFIG_MCAST_TFTP */
len = pkt - xp;
@@
-440,8
+446,8
@@
static void
TftpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
unsigned len)
{
TftpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
unsigned len)
{
-
ushort
proto;
-
ushort
*s;
+
__be16
proto;
+
__be16
*s;
int i;
if (dest != TftpOurPort) {
int i;
if (dest != TftpOurPort) {
@@
-459,7
+465,7
@@
TftpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
return;
len -= 2;
/* warning: don't use increment (++) in ntohs() macros!! */
return;
len -= 2;
/* warning: don't use increment (++) in ntohs() macros!! */
- s = (
ushort
*)pkt;
+ s = (
__be16
*)pkt;
proto = *s++;
pkt = (uchar *)s;
switch (ntohs(proto)) {
proto = *s++;
pkt = (uchar *)s;
switch (ntohs(proto)) {
@@
-550,7
+556,7
@@
TftpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
if (len < 2)
return;
len -= 2;
if (len < 2)
return;
len -= 2;
- TftpBlock = ntohs(*(
ushort
*)pkt);
+ TftpBlock = ntohs(*(
__be16
*)pkt);
update_block_number();
update_block_number();
@@
-628,10
+634,9
@@
TftpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
if (MasterClient && (TftpBlock >= TftpEndingBlock)) {
puts("\nMulticast tftp done\n");
mcast_cleanup();
if (MasterClient && (TftpBlock >= TftpEndingBlock)) {
puts("\nMulticast tftp done\n");
mcast_cleanup();
-
NetState = NETLOOP_SUCCESS
;
+
net_set_state(NETLOOP_SUCCESS)
;
}
}
- }
- else
+ } else
#endif
if (len < TftpBlkSize)
tftp_complete();
#endif
if (len < TftpBlkSize)
tftp_complete();
@@
-639,14
+644,14
@@
TftpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
case TFTP_ERROR:
printf("\nTFTP error: '%s' (%d)\n",
case TFTP_ERROR:
printf("\nTFTP error: '%s' (%d)\n",
- pkt + 2, ntohs(*(
ushort
*)pkt));
+ pkt + 2, ntohs(*(
__be16
*)pkt));
- switch (ntohs(*(
ushort
*)pkt)) {
+ switch (ntohs(*(
__be16
*)pkt)) {
case TFTP_ERR_FILE_NOT_FOUND:
case TFTP_ERR_ACCESS_DENIED:
puts("Not retrying...\n");
eth_halt();
case TFTP_ERR_FILE_NOT_FOUND:
case TFTP_ERR_ACCESS_DENIED:
puts("Not retrying...\n");
eth_halt();
-
NetState = NETLOOP_FAIL
;
+
net_set_state(NETLOOP_FAIL)
;
break;
case TFTP_ERR_UNDEFINED:
case TFTP_ERR_DISK_FULL:
break;
case TFTP_ERR_UNDEFINED:
case TFTP_ERR_DISK_FULL:
@@
-777,10
+782,11
@@
void TftpStart(enum proto_t protocol)
TftpState = STATE_SEND_RRQ;
}
TftpState = STATE_SEND_RRQ;
}
+ time_start = get_timer(0);
TftpTimeoutCountMax = TftpRRQTimeoutCountMax;
NetSetTimeout(TftpTimeoutMSecs, TftpTimeout);
TftpTimeoutCountMax = TftpRRQTimeoutCountMax;
NetSetTimeout(TftpTimeoutMSecs, TftpTimeout);
-
NetSetH
andler(TftpHandler);
+
net_set_udp_h
andler(TftpHandler);
#ifdef CONFIG_CMD_TFTPPUT
net_set_icmp_handler(icmp_handler);
#endif
#ifdef CONFIG_CMD_TFTPPUT
net_set_icmp_handler(icmp_handler);
#endif
@@
-842,7
+848,10
@@
TftpStartServer(void)
#endif
TftpState = STATE_RECV_WRQ;
#endif
TftpState = STATE_RECV_WRQ;
- NetSetHandler(TftpHandler);
+ net_set_udp_handler(TftpHandler);
+
+ /* zero out server ether in case the server ip has changed */
+ memset(NetServerEther, 0, 6);
}
#endif /* CONFIG_CMD_TFTPSRV */
}
#endif /* CONFIG_CMD_TFTPSRV */