Merge branch 'master' of git://www.denx.de/git/u-boot-ppc4xx
[platform/kernel/u-boot.git] / net / eth.c
index f707971..21d1496 100644 (file)
--- a/net/eth.c
+++ b/net/eth.c
@@ -60,8 +60,11 @@ extern int npe_initialize(bd_t *);
 extern int uec_initialize(int);
 extern int bfin_EMAC_initialize(bd_t *);
 extern int atstk1000_eth_initialize(bd_t *);
+extern int greth_initialize(bd_t *);
 extern int atngw100_eth_initialize(bd_t *);
 extern int mcffec_initialize(bd_t*);
+extern int mcdmafec_initialize(bd_t*);
+extern int at91sam9_eth_initialize(bd_t *);
 
 #ifdef CONFIG_API
 extern void (*push_packet)(volatile void *, int);
@@ -218,6 +221,9 @@ int eth_initialize(bd_t *bis)
 #if defined(CONFIG_UEC_ETH3)
        uec_initialize(2);
 #endif
+#if defined(CONFIG_UEC_ETH4)
+       uec_initialize(3);
+#endif
 
 #if defined(FEC_ENET) || defined(CONFIG_ETHER_ON_FCC)
        fec_initialize(bis);
@@ -270,12 +276,22 @@ int eth_initialize(bd_t *bis)
 #if defined(CONFIG_ATSTK1000)
        atstk1000_eth_initialize(bis);
 #endif
+#if defined(CONFIG_GRETH)
+       greth_initialize(bis);
+#endif
 #if defined(CONFIG_ATNGW100)
        atngw100_eth_initialize(bis);
 #endif
 #if defined(CONFIG_MCFFEC)
        mcffec_initialize(bis);
 #endif
+#if defined(CONFIG_FSLDMAFEC)
+       mcdmafec_initialize(bis);
+#endif
+#if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \
+    defined(CONFIG_AT91SAM9263)
+       at91sam9_eth_initialize(bis);
+#endif
 
        if (!eth_devices) {
                puts ("No ethernet found.\n");
@@ -430,8 +446,10 @@ int eth_init(bd_t *bis)
 {
        struct eth_device* old_current;
 
-       if (!eth_current)
+       if (!eth_current) {
+               puts ("No ethernet found.\n");
                return -1;
+       }
 
        old_current = eth_current;
        do {
@@ -526,6 +544,15 @@ int eth_receive(volatile void *packet, int length)
 void eth_try_another(int first_restart)
 {
        static struct eth_device *first_failed = NULL;
+       char *ethrotate;
+
+       /*
+        * Do not rotate between network interfaces when
+        * 'ethrotate' variable is set to 'no'.
+        */
+       if (((ethrotate = getenv ("ethrotate")) != NULL) &&
+           (strcmp(ethrotate, "no") == 0))
+               return;
 
        if (!eth_current)
                return;