]> git.karo-electronics.de Git - karo-tx-uboot.git/blobdiff - net/net.c
dm: eth: Add basic driver model support to Ethernet stack
[karo-tx-uboot.git] / net / net.c
index 2bea07b3cdf671e4dc825b299ada89125f1b89c2..c0028f06905aed953071a6ca52c87e9f879243c9 100644 (file)
--- a/net/net.c
+++ b/net/net.c
@@ -275,7 +275,7 @@ static void NetInitLoop(void)
                env_changed_id = env_id;
        }
        if (eth_get_dev())
-               memcpy(NetOurEther, eth_get_dev()->enetaddr, 6);
+               memcpy(NetOurEther, eth_get_ethaddr(), 6);
 
        return;
 }
@@ -324,7 +324,6 @@ void net_init(void)
 
 int NetLoop(enum proto_t protocol)
 {
-       bd_t *bd = gd->bd;
        int ret = -1;
 
        NetRestarted = 0;
@@ -337,12 +336,12 @@ int NetLoop(enum proto_t protocol)
        if (eth_is_on_demand_init() || protocol != NETCONS) {
                eth_halt();
                eth_set_current();
-               if (eth_init(bd) < 0) {
+               if (eth_init() < 0) {
                        eth_halt();
                        return -1;
                }
        } else
-               eth_init_state_only(bd);
+               eth_init_state_only();
 
 restart:
 #ifdef CONFIG_USB_KEYBOARD
@@ -439,6 +438,11 @@ restart:
                case LINKLOCAL:
                        link_local_start();
                        break;
+#endif
+#if defined(CONFIG_CMD_BOOTCE)
+               case BOOTME:
+                       BootmeStart();
+                       break;
 #endif
                default:
                        break;
@@ -504,7 +508,7 @@ restart:
                 *      Check for a timeout, and run the timeout handler
                 *      if we have one.
                 */
-               if (timeHandler && ((get_timer(0) - timeStart) > timeDelta)) {
+               if (timeHandler && ((get_timer(timeStart)) > timeDelta)) {
                        thand_f *x;
 
 #if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
@@ -528,6 +532,8 @@ restart:
                        (*x)();
                }
 
+               if (net_state == NETLOOP_FAIL)
+                       NetStartAgain();
 
                switch (net_state) {
 
@@ -544,10 +550,11 @@ restart:
                                setenv_hex("filesize", NetBootFileXferSize);
                                setenv_hex("fileaddr", load_addr);
                        }
-                       if (protocol != NETCONS)
+                       if (protocol != NETCONS) {
                                eth_halt();
-                       else
+                       } else {
                                eth_halt_state_only();
+                       }
 
                        eth_set_last_protocol(protocol);
 
@@ -603,8 +610,10 @@ void NetStartAgain(void)
                        retrycnt = 1;
                else
                        retrycnt = simple_strtoul(nretry, NULL, 0);
-       } else
-               retry_forever = 1;
+       } else {
+               retrycnt = 0;
+               retry_forever = 0;
+       }
 
        if ((!retry_forever) && (NetTryCount >= retrycnt)) {
                eth_halt();
@@ -618,7 +627,7 @@ void NetStartAgain(void)
 #if !defined(CONFIG_NET_DO_NOT_TRY_ANOTHER)
        eth_try_another(!NetRestarted);
 #endif
-       eth_init(gd->bd);
+       eth_init();
        if (NetRestartWrap) {
                NetRestartWrap = 0;
                if (NetDevExists) {
@@ -1086,7 +1095,7 @@ NetReceive(uchar *inpkt, int len)
                if ((ip->ip_hl_v & 0x0f) > 0x05)
                        return;
                /* Check the Checksum of the header */
-               if (!NetCksumOk((uchar *)ip, IP_HDR_SIZE / 2)) {
+               if (!ip_checksum_ok((uchar *)ip, IP_HDR_SIZE)) {
                        debug("checksum bad\n");
                        return;
                }
@@ -1208,7 +1217,6 @@ NetReceive(uchar *inpkt, int len)
 static int net_check_prereq(enum proto_t protocol)
 {
        switch (protocol) {
-               /* Fall through */
 #if defined(CONFIG_CMD_PING)
        case PING:
                if (NetPingIP == 0) {
@@ -1248,6 +1256,7 @@ common:
 #endif
                /* Fall through */
 
+       case BOOTME:
        case NETCONS:
        case TFTPSRV:
                if (NetOurIP == 0) {
@@ -1290,27 +1299,6 @@ common:
 }
 /**********************************************************************/
 
-int
-NetCksumOk(uchar *ptr, int len)
-{
-       return !((NetCksum(ptr, len) + 1) & 0xfffe);
-}
-
-
-unsigned
-NetCksum(uchar *ptr, int len)
-{
-       ulong   xsum;
-       ushort *p = (ushort *)ptr;
-
-       xsum = 0;
-       while (len-- > 0)
-               xsum += *p++;
-       xsum = (xsum & 0xffff) + (xsum >> 16);
-       xsum = (xsum & 0xffff) + (xsum >> 16);
-       return xsum & 0xffff;
-}
-
 int
 NetEthHdrSize(void)
 {
@@ -1410,7 +1398,7 @@ void net_set_udp_header(uchar *pkt, IPaddr_t dest, int dport, int sport,
        net_set_ip_header(pkt, dest, NetOurIP);
        ip->ip_len   = htons(IP_UDP_HDR_SIZE + len);
        ip->ip_p     = IPPROTO_UDP;
-       ip->ip_sum   = ~NetCksum((uchar *)ip, IP_HDR_SIZE >> 1);
+       ip->ip_sum   = compute_ip_checksum(ip, IP_HDR_SIZE);
 
        ip->udp_src  = htons(sport);
        ip->udp_dst  = htons(dport);