projects
/
platform
/
kernel
/
u-boot.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
MAKEALL: Automatically use parallel builds
[platform/kernel/u-boot.git]
/
net
/
net.c
diff --git
a/net/net.c
b/net/net.c
index
e9d7757
..
e9754e4
100644
(file)
--- a/
net/net.c
+++ b/
net/net.c
@@
-89,16
+89,25
@@
#if defined(CONFIG_CMD_SNTP)
#include "sntp.h"
#endif
#if defined(CONFIG_CMD_SNTP)
#include "sntp.h"
#endif
+#if defined(CONFIG_CDP_VERSION)
+#include <timestamp.h>
+#endif
#if defined(CONFIG_CMD_NET)
DECLARE_GLOBAL_DATA_PTR;
#if defined(CONFIG_CMD_NET)
DECLARE_GLOBAL_DATA_PTR;
-#define ARP_TIMEOUT 5 /* Seconds before trying ARP again */
+#ifndef CONFIG_ARP_TIMEOUT
+# define ARP_TIMEOUT 5000UL /* Milliseconds before trying ARP again */
+#else
+# define ARP_TIMEOUT CONFIG_ARP_TIMEOUT
+#endif
+
+
#ifndef CONFIG_NET_RETRY_COUNT
#ifndef CONFIG_NET_RETRY_COUNT
-# define ARP_TIMEOUT_COUNT 5
/* # of timeouts before giving up */
+# define ARP_TIMEOUT_COUNT 5 /* # of timeouts before giving up */
#else
#else
-# define ARP_TIMEOUT_COUNT
(CONFIG_NET_RETRY_COUNT)
+# define ARP_TIMEOUT_COUNT
CONFIG_NET_RETRY_COUNT
#endif
#if 0
#endif
#if 0
@@
-118,6
+127,10
@@
char NetOurHostName[32]={0,}; /* Our hostname */
char NetOurRootPath[64]={0,}; /* Our bootpath */
ushort NetBootFileSize=0; /* Our bootfile size in blocks */
char NetOurRootPath[64]={0,}; /* Our bootpath */
ushort NetBootFileSize=0; /* Our bootfile size in blocks */
+#ifdef CONFIG_MCAST_TFTP /* Multicast TFTP */
+IPaddr_t Mcast_addr;
+#endif
+
/** END OF BOOTP EXTENTIONS **/
ulong NetBootFileXferSize; /* The actual transferred size of the bootfile (in bytes) */
/** END OF BOOTP EXTENTIONS **/
ulong NetBootFileXferSize; /* The actual transferred size of the bootfile (in bytes) */
@@
-125,7
+138,7
@@
uchar NetOurEther[6]; /* Our ethernet address */
uchar NetServerEther[6] = /* Boot server enet address */
{ 0, 0, 0, 0, 0, 0 };
IPaddr_t NetOurIP; /* Our IP addr (0 = unknown) */
uchar NetServerEther[6] = /* Boot server enet address */
{ 0, 0, 0, 0, 0, 0 };
IPaddr_t NetOurIP; /* Our IP addr (0 = unknown) */
-IPaddr_t NetServerIP; /*
Our IP addr (0 = unknown)
*/
+IPaddr_t NetServerIP; /*
Server IP addr (0 = unknown)
*/
volatile uchar *NetRxPkt; /* Current receive packet */
int NetRxPktLen; /* Current rx packet length */
unsigned NetIPID; /* IP packet ID */
volatile uchar *NetRxPkt; /* Current receive packet */
int NetRxPktLen; /* Current rx packet length */
unsigned NetIPID; /* IP packet ID */
@@
-133,6
+146,9
@@
uchar NetBcastAddr[6] = /* Ethernet bcast address */
{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
uchar NetEtherNullAddr[6] =
{ 0, 0, 0, 0, 0, 0 };
{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
uchar NetEtherNullAddr[6] =
{ 0, 0, 0, 0, 0, 0 };
+#ifdef CONFIG_API
+void (*push_packet)(volatile void *, int len) = 0;
+#endif
#if defined(CONFIG_CMD_CDP)
uchar NetCDPAddr[6] = /* Ethernet bcast address */
{ 0x01, 0x00, 0x0c, 0xcc, 0xcc, 0xcc };
#if defined(CONFIG_CMD_CDP)
uchar NetCDPAddr[6] = /* Ethernet bcast address */
{ 0x01, 0x00, 0x0c, 0xcc, 0xcc, 0xcc };
@@
-151,7
+167,7
@@
ushort NetOurNativeVLAN = 0xFFFF; /* ditto */
char BootFile[128]; /* Boot File name */
#if defined(CONFIG_CMD_PING)
char BootFile[128]; /* Boot File name */
#if defined(CONFIG_CMD_PING)
-IPaddr_t NetPingIP; /* the ip address to ping */
+IPaddr_t NetPingIP; /* the ip address to ping */
static void PingStart(void);
#endif
static void PingStart(void);
#endif
@@
-189,7
+205,7
@@
IPaddr_t NetArpWaitReplyIP;
uchar *NetArpWaitPacketMAC; /* MAC address of waiting packet's destination */
uchar *NetArpWaitTxPacket; /* THE transmit packet */
int NetArpWaitTxPacketSize;
uchar *NetArpWaitPacketMAC; /* MAC address of waiting packet's destination */
uchar *NetArpWaitTxPacket; /* THE transmit packet */
int NetArpWaitTxPacketSize;
-uchar NetArpWaitPacketBuf[PKTSIZE_ALIGN + PKTALIGN];
+uchar NetArpWaitPacketBuf[PKTSIZE_ALIGN + PKTALIGN];
ulong NetArpWaitTimerStart;
int NetArpWaitTry;
ulong NetArpWaitTimerStart;
int NetArpWaitTry;
@@
-246,7
+262,7
@@
void ArpTimeoutCheck(void)
t = get_timer(0);
/* check for arp timeout */
t = get_timer(0);
/* check for arp timeout */
- if ((t - NetArpWaitTimerStart) > ARP_TIMEOUT
* CFG_HZ
) {
+ if ((t - NetArpWaitTimerStart) > ARP_TIMEOUT) {
NetArpWaitTry++;
if (NetArpWaitTry >= ARP_TIMEOUT_COUNT) {
NetArpWaitTry++;
if (NetArpWaitTry >= ARP_TIMEOUT_COUNT) {
@@
-459,16
+475,16
@@
restart:
}
#if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
}
#if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
-#if defined(C
FG
_FAULT_ECHO_LINK_DOWN) && defined(CONFIG_STATUS_LED) && defined(STATUS_LED_RED)
+#if defined(C
ONFIG_SYS
_FAULT_ECHO_LINK_DOWN) && defined(CONFIG_STATUS_LED) && defined(STATUS_LED_RED)
/*
* Echo the inverted link state to the fault LED.
*/
/*
* Echo the inverted link state to the fault LED.
*/
- if(miiphy_link(eth_get_dev()->name, C
FG
_FAULT_MII_ADDR)) {
+ if(miiphy_link(eth_get_dev()->name, C
ONFIG_SYS
_FAULT_MII_ADDR)) {
status_led_set (STATUS_LED_RED, STATUS_LED_OFF);
} else {
status_led_set (STATUS_LED_RED, STATUS_LED_ON);
}
status_led_set (STATUS_LED_RED, STATUS_LED_OFF);
} else {
status_led_set (STATUS_LED_RED, STATUS_LED_ON);
}
-#endif /* C
FG
_FAULT_ECHO_LINK_DOWN, ... */
+#endif /* C
ONFIG_SYS
_FAULT_ECHO_LINK_DOWN, ... */
#endif /* CONFIG_MII, ... */
/*
#endif /* CONFIG_MII, ... */
/*
@@
-487,7
+503,7
@@
restart:
* Check the ethernet for a new packet. The ethernet
* receive routine will process it.
*/
* Check the ethernet for a new packet. The ethernet
* receive routine will process it.
*/
-
eth_rx();
+ eth_rx();
/*
* Abort if ctrl-c was pressed.
/*
* Abort if ctrl-c was pressed.
@@
-508,18
+524,18
@@
restart:
thand_f *x;
#if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
thand_f *x;
#if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
-# if defined(C
FG
_FAULT_ECHO_LINK_DOWN) && \
+# if defined(C
ONFIG_SYS
_FAULT_ECHO_LINK_DOWN) && \
defined(CONFIG_STATUS_LED) && \
defined(STATUS_LED_RED)
/*
* Echo the inverted link state to the fault LED.
*/
defined(CONFIG_STATUS_LED) && \
defined(STATUS_LED_RED)
/*
* Echo the inverted link state to the fault LED.
*/
- if(miiphy_link(eth_get_dev()->name, C
FG
_FAULT_MII_ADDR)) {
+ if(miiphy_link(eth_get_dev()->name, C
ONFIG_SYS
_FAULT_MII_ADDR)) {
status_led_set (STATUS_LED_RED, STATUS_LED_OFF);
} else {
status_led_set (STATUS_LED_RED, STATUS_LED_ON);
}
status_led_set (STATUS_LED_RED, STATUS_LED_OFF);
} else {
status_led_set (STATUS_LED_RED, STATUS_LED_ON);
}
-# endif /* C
FG
_FAULT_ECHO_LINK_DOWN, ... */
+# endif /* C
ONFIG_SYS
_FAULT_ECHO_LINK_DOWN, ... */
#endif /* CONFIG_MII, ... */
x = timeHandler;
timeHandler = (thand_f *)0;
#endif /* CONFIG_MII, ... */
x = timeHandler;
timeHandler = (thand_f *)0;
@@
-537,11
+553,11
@@
restart:
case NETLOOP_SUCCESS:
if (NetBootFileXferSize > 0) {
case NETLOOP_SUCCESS:
if (NetBootFileXferSize > 0) {
- char buf[
1
0];
+ char buf[
2
0];
printf("Bytes transferred = %ld (%lx hex)\n",
NetBootFileXferSize,
NetBootFileXferSize);
printf("Bytes transferred = %ld (%lx hex)\n",
NetBootFileXferSize,
NetBootFileXferSize);
- sprintf(buf, "%l
x
", NetBootFileXferSize);
+ sprintf(buf, "%l
X
", NetBootFileXferSize);
setenv("filesize", buf);
sprintf(buf, "%lX", (unsigned long)load_addr);
setenv("filesize", buf);
sprintf(buf, "%lX", (unsigned long)load_addr);
@@
-585,16
+601,18
@@
void NetStartAgain (void)
return;
}
#ifndef CONFIG_NET_MULTI
return;
}
#ifndef CONFIG_NET_MULTI
- NetSetTimeout (10
* CFG_HZ
, startAgainTimeout);
+ NetSetTimeout (10
000UL
, startAgainTimeout);
NetSetHandler (startAgainHandler);
#else /* !CONFIG_NET_MULTI*/
eth_halt ();
NetSetHandler (startAgainHandler);
#else /* !CONFIG_NET_MULTI*/
eth_halt ();
+#if !defined(CONFIG_NET_DO_NOT_TRY_ANOTHER)
eth_try_another (!NetRestarted);
eth_try_another (!NetRestarted);
+#endif
eth_init (gd->bd);
if (NetRestartWrap) {
NetRestartWrap = 0;
if (NetDevExists && !once) {
eth_init (gd->bd);
if (NetRestartWrap) {
NetRestartWrap = 0;
if (NetDevExists && !once) {
- NetSetTimeout (10
* CFG_HZ
, startAgainTimeout);
+ NetSetTimeout (10
000UL
, startAgainTimeout);
NetSetHandler (startAgainHandler);
} else {
NetState = NETLOOP_FAIL;
NetSetHandler (startAgainHandler);
} else {
NetState = NETLOOP_FAIL;
@@
-731,7
+749,7
@@
int PingSend(void)
s = &ip->udp_src; /* XXX ICMP starts here */
s[0] = htons(0x0800); /* echo-request, code */
s[1] = 0; /* checksum */
s = &ip->udp_src; /* XXX ICMP starts here */
s[0] = htons(0x0800); /* echo-request, code */
s[1] = 0; /* checksum */
- s[2] = 0; /* identifier */
+ s[2] = 0; /* identifier */
s[3] = htons(PingSeqNo++); /* sequence number */
s[1] = ~NetCksum((uchar *)s, 8/2);
s[3] = htons(PingSeqNo++); /* sequence number */
s[1] = ~NetCksum((uchar *)s, 8/2);
@@
-770,7
+788,7
@@
static void PingStart(void)
#if defined(CONFIG_NET_MULTI)
printf ("Using %s device\n", eth_get_name());
#endif /* CONFIG_NET_MULTI */
#if defined(CONFIG_NET_MULTI)
printf ("Using %s device\n", eth_get_name());
#endif /* CONFIG_NET_MULTI */
- NetSetTimeout (10
* CFG_HZ
, PingTimeout);
+ NetSetTimeout (10
000UL
, PingTimeout);
NetSetHandler (PingHandler);
PingSend();
NetSetHandler (PingHandler);
PingSend();
@@
-793,7
+811,7
@@
static void PingStart(void)
#define CDP_SYSOBJECT_TLV 0x0015
#define CDP_MANAGEMENT_ADDRESS_TLV 0x0016
#define CDP_SYSOBJECT_TLV 0x0015
#define CDP_MANAGEMENT_ADDRESS_TLV 0x0016
-#define CDP_TIMEOUT
(CFG_HZ/4)
/* one packet every 250ms */
+#define CDP_TIMEOUT
250UL
/* one packet every 250ms */
static int CDPSeq;
static int CDPOK;
static int CDPSeq;
static int CDPOK;
@@
-1157,6
+1175,13
@@
NetReceive(volatile uchar * inpkt, int len)
if (len < ETHER_HDR_SIZE)
return;
if (len < ETHER_HDR_SIZE)
return;
+#ifdef CONFIG_API
+ if (push_packet) {
+ (*push_packet)(inpkt, len);
+ return;
+ }
+#endif
+
#if defined(CONFIG_CMD_CDP)
/* keep track if packet is CDP */
iscdp = memcmp(et->et_dest, NetCDPAddr, 6) == 0;
#if defined(CONFIG_CMD_CDP)
/* keep track if packet is CDP */
iscdp = memcmp(et->et_dest, NetCDPAddr, 6) == 0;
@@
-1363,7
+1388,7
@@
NetReceive(volatile uchar * inpkt, int len)
puts ("Got IP\n");
#endif
if (len < IP_HDR_SIZE) {
puts ("Got IP\n");
#endif
if (len < IP_HDR_SIZE) {
- debug ("len bad %d < %
d\n", len,
IP_HDR_SIZE);
+ debug ("len bad %d < %
lu\n", len, (ulong)
IP_HDR_SIZE);
return;
}
if (len < ntohs(ip->ip_len)) {
return;
}
if (len < ntohs(ip->ip_len)) {
@@
-1380,12
+1405,19
@@
NetReceive(volatile uchar * inpkt, int len)
if (ip->ip_off & htons(0x1fff)) { /* Can't deal w/ fragments */
return;
}
if (ip->ip_off & htons(0x1fff)) { /* Can't deal w/ fragments */
return;
}
+ /* can't deal with headers > 20 bytes */
+ if ((ip->ip_hl_v & 0x0f) > 0x05) {
+ return;
+ }
if (!NetCksumOk((uchar *)ip, IP_HDR_SIZE_NO_UDP / 2)) {
puts ("checksum bad\n");
return;
}
tmp = NetReadIP(&ip->ip_dst);
if (NetOurIP && tmp != NetOurIP && tmp != 0xFFFFFFFF) {
if (!NetCksumOk((uchar *)ip, IP_HDR_SIZE_NO_UDP / 2)) {
puts ("checksum bad\n");
return;
}
tmp = NetReadIP(&ip->ip_dst);
if (NetOurIP && tmp != NetOurIP && tmp != 0xFFFFFFFF) {
+#ifdef CONFIG_MCAST_TFTP
+ if (Mcast_addr != tmp)
+#endif
return;
}
/*
return;
}
/*
@@
-1486,12
+1518,14
@@
NetReceive(volatile uchar * inpkt, int len)
xsum = (xsum & 0x0000ffff) + ((xsum >> 16) & 0x0000ffff);
}
if ((xsum != 0x00000000) && (xsum != 0x0000ffff)) {
xsum = (xsum & 0x0000ffff) + ((xsum >> 16) & 0x0000ffff);
}
if ((xsum != 0x00000000) && (xsum != 0x0000ffff)) {
- printf(" UDP wrong checksum %08x %08x\n", xsum, ntohs(ip->udp_xsum));
+ printf(" UDP wrong checksum %08lx %08x\n",
+ xsum, ntohs(ip->udp_xsum));
return;
}
}
#endif
return;
}
}
#endif
+
#ifdef CONFIG_NETCONSOLE
nc_input_packet((uchar *)ip +IP_HDR_SIZE,
ntohs(ip->udp_dst),
#ifdef CONFIG_NETCONSOLE
nc_input_packet((uchar *)ip +IP_HDR_SIZE,
ntohs(ip->udp_dst),