X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=net%2Feth.c;h=3a7ff50bf3905c1602f4ab3ea705ebb7a2bfbf7d;hb=6f6e6e09b24e9a9dfa4af28f3e7704d335411cb4;hp=5c70d4f3ff31018eef5be5f32dcd74ea6e02b841;hpb=6d8d4ef994a7c46e34b5fe53b1af7aa4f78192bf;p=u-boot diff --git a/net/eth.c b/net/eth.c index 5c70d4f3ff..3a7ff50bf3 100644 --- a/net/eth.c +++ b/net/eth.c @@ -166,20 +166,33 @@ int eth_get_dev_index (void) return (0); } -int eth_register(struct eth_device* dev) +static void eth_current_changed(void) { - struct eth_device *d; - - if (!eth_devices) { - eth_current = eth_devices = dev; #ifdef CONFIG_NET_MULTI + { + char *act = getenv("ethact"); /* 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); } + /* + * remove the variable completely if there is no active + * interface + */ + else if (act != NULL) + setenv("ethact", NULL); + } #endif +} + +int eth_register(struct eth_device *dev) +{ + struct eth_device *d; + if (!eth_devices) { + eth_current = eth_devices = dev; + eth_current_changed(); } else { for (d=eth_devices; d->next!=eth_devices; d=d->next) ; @@ -204,10 +217,18 @@ int eth_initialize(bd_t *bis) #if defined(CONFIG_MII) || defined(CONFIG_CMD_MII) miiphy_init(); #endif - /* Try board-specific initialization first. If it fails or isn't - * present, try the cpu-specific initialization */ - if (board_eth_init(bis) < 0) - cpu_eth_init(bis); + /* + * If board-specific initialization exists, call it. + * If not, call a CPU-specific one + */ + if (board_eth_init != __def_eth_init) { + if (board_eth_init(bis) < 0) + printf("Board Net Initialization Failed\n"); + } else if (cpu_eth_init != __def_eth_init) { + if (cpu_eth_init(bis) < 0) + printf("CPU Net Initialization Failed\n"); + } else + printf("Net Initialization Skipped\n"); #if defined(CONFIG_DB64360) || defined(CONFIG_CPCI750) mv6436x_eth_initialize(bis); @@ -263,14 +284,7 @@ int eth_initialize(bd_t *bis) dev = dev->next; } while(dev != eth_devices); - /* 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); - + eth_current_changed(); putc ('\n'); } @@ -439,7 +453,7 @@ int eth_receive(volatile void *packet, int length) void eth_try_another(int first_restart) { static struct eth_device *first_failed = NULL; - char *ethrotate, *act; + char *ethrotate; /* * Do not rotate between network interfaces when @@ -458,10 +472,7 @@ void eth_try_another(int first_restart) eth_current = eth_current->next; - /* update current ethernet name */ - act = getenv("ethact"); - if (act == NULL || strcmp(act, eth_current->name) != 0) - setenv("ethact", eth_current->name); + eth_current_changed(); if (first_failed == eth_current) { NetRestartWrap = 1; @@ -492,7 +503,7 @@ void eth_set_current(void) } while (old_current != eth_current); } - setenv("ethact", eth_current->name); + eth_current_changed(); } char *eth_get_name (void)