]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - net/net.c
Introduce new eth_receive routine
[karo-tx-uboot.git] / net / net.c
index e9d77576419ff1bdd024fc62cf2655bc6941527b..cac3e09d96dc2302f230fc6c1574fca834e83149 100644 (file)
--- a/net/net.c
+++ b/net/net.c
@@ -94,7 +94,7 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#define ARP_TIMEOUT            5               /* Seconds before trying ARP again */
+#define ARP_TIMEOUT            5UL             /* Seconds before trying ARP again */
 #ifndef        CONFIG_NET_RETRY_COUNT
 # define ARP_TIMEOUT_COUNT     5               /* # of timeouts before giving up  */
 #else
@@ -118,6 +118,10 @@ char               NetOurHostName[32]={0,};        /* Our hostname                 */
 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) */
@@ -133,6 +137,9 @@ uchar               NetBcastAddr[6] =       /* Ethernet bcast address               */
                        { 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 };
@@ -537,11 +544,11 @@ restart:
 
                case NETLOOP_SUCCESS:
                        if (NetBootFileXferSize > 0) {
-                               char buf[10];
+                               char buf[20];
                                printf("Bytes transferred = %ld (%lx hex)\n",
                                        NetBootFileXferSize,
                                        NetBootFileXferSize);
-                               sprintf(buf, "%lx", NetBootFileXferSize);
+                               sprintf(buf, "%lX", NetBootFileXferSize);
                                setenv("filesize", buf);
 
                                sprintf(buf, "%lX", (unsigned long)load_addr);
@@ -585,7 +592,7 @@ void NetStartAgain (void)
                return;
        }
 #ifndef CONFIG_NET_MULTI
-       NetSetTimeout (10 * CFG_HZ, startAgainTimeout);
+       NetSetTimeout (10UL * CFG_HZ, startAgainTimeout);
        NetSetHandler (startAgainHandler);
 #else  /* !CONFIG_NET_MULTI*/
        eth_halt ();
@@ -594,7 +601,7 @@ void NetStartAgain (void)
        if (NetRestartWrap) {
                NetRestartWrap = 0;
                if (NetDevExists && !once) {
-                       NetSetTimeout (10 * CFG_HZ, startAgainTimeout);
+                       NetSetTimeout (10UL * CFG_HZ, startAgainTimeout);
                        NetSetHandler (startAgainHandler);
                } else {
                        NetState = NETLOOP_FAIL;
@@ -770,7 +777,7 @@ static void PingStart(void)
 #if defined(CONFIG_NET_MULTI)
        printf ("Using %s device\n", eth_get_name());
 #endif /* CONFIG_NET_MULTI */
-       NetSetTimeout (10 * CFG_HZ, PingTimeout);
+       NetSetTimeout (10UL * CFG_HZ, PingTimeout);
        NetSetHandler (PingHandler);
 
        PingSend();
@@ -1157,6 +1164,13 @@ NetReceive(volatile uchar * inpkt, int len)
        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;
@@ -1386,6 +1400,9 @@ NetReceive(volatile uchar * inpkt, int len)
                }
                tmp = NetReadIP(&ip->ip_dst);
                if (NetOurIP && tmp != NetOurIP && tmp != 0xFFFFFFFF) {
+#ifdef CONFIG_MCAST_TFTP
+                       if (Mcast_addr != tmp)
+#endif
                        return;
                }
                /*
@@ -1492,6 +1509,7 @@ NetReceive(volatile uchar * inpkt, int len)
                }
 #endif
 
+
 #ifdef CONFIG_NETCONSOLE
                nc_input_packet((uchar *)ip +IP_HDR_SIZE,
                                                ntohs(ip->udp_dst),