]> git.sur5r.net Git - u-boot/blobdiff - net/eth.c
Add PCI support for Sorcery board.
[u-boot] / net / eth.c
index 177fab8ba17f2bb846214a4d456489e06c0972bc..29c24c8827a2f0648c77ef1e8b06604b2ac05bd7 100644 (file)
--- a/net/eth.c
+++ b/net/eth.c
@@ -39,6 +39,7 @@ extern int eth_3com_initialize(bd_t*);
 extern int fec_initialize(bd_t*);
 extern int inca_switch_initialize(bd_t*);
 extern int mpc5xxx_fec_initialize(bd_t*);
+extern int mpc8220_fec_initialize(bd_t*);
 extern int mv6436x_eth_initialize(bd_t *);
 extern int mv6446x_eth_initialize(bd_t *);
 extern int natsemi_initialize(bd_t*);
@@ -48,9 +49,10 @@ extern int plb2800_eth_initialize(bd_t*);
 extern int ppc_4xx_eth_initialize(bd_t *);
 extern int ppc_440x_eth_initialize(bd_t *);
 extern int rtl8139_initialize(bd_t*);
+extern int rtl8169_initialize(bd_t*);
 extern int scc_initialize(bd_t*);
 extern int skge_initialize(bd_t*);
-extern int tsec_initialize(bd_t*);
+extern int tsec_initialize(bd_t*, int);
 
 static struct eth_device *eth_devices, *eth_current;
 
@@ -87,6 +89,14 @@ int eth_register(struct eth_device* dev)
 
        if (!eth_devices) {
                eth_current = eth_devices = dev;
+#ifdef CONFIG_NET_MULTI
+               /* update current ethernet name */
+               {
+                       char *act = getenv("ethact");
+                       if (act == NULL || strcmp(act, eth_current->name) != 0)
+                               setenv("ethact", eth_current->name);
+               }
+#endif
        } else {
                for (d=eth_devices; d->next!=eth_devices; d=d->next);
                d->next = dev;
@@ -110,10 +120,14 @@ int eth_initialize(bd_t *bis)
 #ifdef CONFIG_DB64360
        mv6436x_eth_initialize(bis);
 #endif
+#ifdef CONFIG_CPCI750
+       mv6436x_eth_initialize(bis);
+#endif
 #ifdef CONFIG_DB64460
        mv6446x_eth_initialize(bis);
 #endif
-#if defined(CONFIG_405GP) || defined(CONFIG_405EP) || ( defined(CONFIG_440) && !defined(CONFIG_NET_MULTI) )
+#if defined(CONFIG_405GP) || defined(CONFIG_405EP) || \
+  ( defined(CONFIG_440) && !defined(CONFIG_NET_MULTI) )
        ppc_4xx_eth_initialize(bis);
 #endif
 #if defined(CONFIG_440) && defined(CONFIG_NET_MULTI)
@@ -125,6 +139,33 @@ int eth_initialize(bd_t *bis)
 #ifdef CONFIG_PLB2800_ETHER
        plb2800_eth_initialize(bis);
 #endif
+#ifdef SCC_ENET
+       scc_initialize(bis);
+#endif
+#if defined(FEC_ENET) || defined(CONFIG_ETHER_ON_FCC)
+       fec_initialize(bis);
+#endif
+#if defined(CONFIG_MPC5xxx_FEC)
+       mpc5xxx_fec_initialize(bis);
+#endif
+#if defined(CONFIG_MPC8220_FEC)
+       mpc8220_fec_initialize(bis);
+#endif
+#if defined(CONFIG_SK98)
+       skge_initialize(bis);
+#endif
+#if defined(CONFIG_MPC85XX_TSEC1)
+       tsec_initialize(bis, 0);
+#endif
+#if defined(CONFIG_MPC85XX_TSEC2)
+       tsec_initialize(bis, 1);
+#endif
+#if defined(CONFIG_MPC85XX_FEC)
+       tsec_initialize(bis, 2);
+#endif
+#if defined(CONFIG_AU1X00)
+       au1x00_enet_initialize(bis);
+#endif
 #ifdef CONFIG_E1000
        e1000_initialize(bis);
 #endif
@@ -149,27 +190,12 @@ int eth_initialize(bd_t *bis)
 #ifdef CONFIG_NS8382X
        ns8382x_initialize(bis);
 #endif
-#ifdef SCC_ENET
-       scc_initialize(bis);
-#endif
-#if defined(FEC_ENET) || defined(CONFIG_ETHER_ON_FCC)
-       fec_initialize(bis);
-#endif
-#if defined(CONFIG_MPC5XXX_FEC)
-       mpc5xxx_fec_initialize(bis);
-#endif
-#if defined(CONFIG_SK98)
-       skge_initialize(bis);
-#endif
-#ifdef CONFIG_TSEC_ENET
-       tsec_initialize(bis);
-#endif
-#if defined(CONFIG_AU1X00)
-       au1x00_enet_initialize(bis);
-#endif
 #if defined(CONFIG_RTL8139)
        rtl8139_initialize(bis);
 #endif
+#if defined(CONFIG_RTL8169)
+       rtl8169_initialize(bis);
+#endif
 
        if (!eth_devices) {
                puts ("No ethernet found.\n");
@@ -201,13 +227,14 @@ int eth_initialize(bd_t *bis)
                                if (memcmp(dev->enetaddr, "\0\0\0\0\0\0", 6) &&
                                    memcmp(dev->enetaddr, env_enetaddr, 6))
                                {
-                                       printf("\nWarning: %s MAC addresses don't match:\n", dev->name);
-                                       printf("Address in SROM is         "
+                                       printf ("\nWarning: %s MAC addresses don't match:\n",
+                                               dev->name);
+                                       printf ("Address in SROM is         "
                                               "%02X:%02X:%02X:%02X:%02X:%02X\n",
                                               dev->enetaddr[0], dev->enetaddr[1],
                                               dev->enetaddr[2], dev->enetaddr[3],
                                               dev->enetaddr[4], dev->enetaddr[5]);
-                                       printf("Address in environment is  "
+                                       printf ("Address in environment is  "
                                               "%02X:%02X:%02X:%02X:%02X:%02X\n",
                                               env_enetaddr[0], env_enetaddr[1],
                                               env_enetaddr[2], env_enetaddr[3],
@@ -221,6 +248,16 @@ int eth_initialize(bd_t *bis)
                        dev = dev->next;
                } while(dev != eth_devices);
 
+#ifdef CONFIG_NET_MULTI
+               /* update current ethernet name */
+               if (eth_current) {
+                       char *act = getenv("ethact");
+                       if (act == NULL || strcmp(act, eth_current->name) != 0)
+                               setenv("ethact", eth_current->name);
+               } else
+                       setenv("ethact", NULL);
+#endif
+
                putc ('\n');
        }
 
@@ -319,19 +356,49 @@ void eth_try_another(int first_restart)
        if (!eth_current)
                return;
 
-       if (first_restart)
-       {
+       if (first_restart) {
                first_failed = eth_current;
        }
 
        eth_current = eth_current->next;
 
-       if (first_failed == eth_current)
+#ifdef CONFIG_NET_MULTI
+       /* update current ethernet name */
        {
+               char *act = getenv("ethact");
+               if (act == NULL || strcmp(act, eth_current->name) != 0)
+                       setenv("ethact", eth_current->name);
+       }
+#endif
+
+       if (first_failed == eth_current) {
                NetRestartWrap = 1;
        }
 }
 
+#ifdef CONFIG_NET_MULTI
+void eth_set_current(void)
+{
+       char *act;
+       struct eth_device* old_current;
+
+       if (!eth_current)       /* XXX no current */
+               return;
+
+       act = getenv("ethact");
+       if (act != NULL) {
+               old_current = eth_current;
+               do {
+                       if (strcmp(eth_current->name, act) == 0)
+                               return;
+                       eth_current = eth_current->next;
+               } while (old_current != eth_current);
+       }
+
+       setenv("ethact", eth_current->name);
+}
+#endif
+
 char *eth_get_name (void)
 {
        return (eth_current ? eth_current->name : "unknown");