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 bc7fe05465cb9b4c3b0a1e8a1d45264862be7fae..966d1cfba360ce7e7505dd5f806ce13543b0654c 100644
(file)
--- a/
net/tftp.c
+++ b/
net/tftp.c
@@
-40,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
@@
-156,7
+157,7
@@
mcast_cleanup(void)
#endif /* CONFIG_MCAST_TFTP */
static inline void
#endif /* CONFIG_MCAST_TFTP */
static inline void
-store_block(
unsigned
block, uchar *src, unsigned len)
+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;
@@
-177,7
+178,7
@@
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;
}
} else
return;
}
} else
@@
-280,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 */
@@
-299,8
+300,14
@@
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
}
static void
@@
-322,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:
@@
-439,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) {
@@
-458,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)) {
@@
-549,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();
@@
-627,7
+634,7
@@
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
#endif
}
} else
#endif
@@
-637,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:
@@
-775,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
@@
-840,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 */