]> git.sur5r.net Git - u-boot/blobdiff - net/eth.c
powerpc/B4860: Corrected FMAN1 operating frequency print at u-boot
[u-boot] / net / eth.c
index d526264fa659309c1a568b4c9d8c555974452983..321d5b18fd842d3d5df52549b2647ab8fb9ef816 100644 (file)
--- a/net/eth.c
+++ b/net/eth.c
@@ -62,6 +62,15 @@ int eth_getenv_enetaddr_by_index(const char *base_name, int index,
        return eth_getenv_enetaddr(enetvar, enetaddr);
 }
 
+static inline int eth_setenv_enetaddr_by_index(const char *base_name, int index,
+                                uchar *enetaddr)
+{
+       char enetvar[32];
+       sprintf(enetvar, index ? "%s%daddr" : "%saddr", base_name, index);
+       return eth_setenv_enetaddr(enetvar, enetaddr);
+}
+
+
 static int eth_mac_skip(int index)
 {
        char enetvar[15];
@@ -112,12 +121,8 @@ static struct {
 static unsigned int eth_rcv_current, eth_rcv_last;
 #endif
 
-static struct eth_device *eth_devices, *eth_current;
-
-struct eth_device *eth_get_dev(void)
-{
-       return eth_current;
-}
+static struct eth_device *eth_devices;
+struct eth_device *eth_current;
 
 struct eth_device *eth_get_dev_by_name(const char *devname)
 {
@@ -205,12 +210,20 @@ int eth_write_hwaddr(struct eth_device *dev, const char *base_name,
                }
 
                memcpy(dev->enetaddr, env_enetaddr, 6);
+       } else if (is_valid_ether_addr(dev->enetaddr)) {
+               eth_setenv_enetaddr_by_index(base_name, eth_number,
+                                            dev->enetaddr);
+               printf("\nWarning: %s using MAC address from net device\n",
+                       dev->name);
        }
 
        if (dev->write_hwaddr &&
-                       !eth_mac_skip(eth_number) &&
-                       is_valid_ether_addr(dev->enetaddr))
+                       !eth_mac_skip(eth_number)) {
+               if (!is_valid_ether_addr(dev->enetaddr))
+                       return -1;
+
                ret = dev->write_hwaddr(dev);
+       }
 
        return ret;
 }
@@ -486,10 +499,7 @@ int eth_receive(void *packet, int length)
                        return -1;
        }
 
-       if (length < eth_rcv_bufs[eth_rcv_current].length)
-               return -1;
-
-       length = eth_rcv_bufs[eth_rcv_current].length;
+       length = min(eth_rcv_bufs[eth_rcv_current].length, length);
 
        for (i = 0; i < length; i++)
                p[i] = eth_rcv_bufs[eth_rcv_current].data[i];