@ -54,10 +54,11 @@ int eth_setenv_enetaddr(char *name, const uchar *enetaddr)
return setenv ( name , buf ) ;
return setenv ( name , buf ) ;
}
}
int eth_getenv_enetaddr_by_index ( int index , uchar * enetaddr )
int eth_getenv_enetaddr_by_index ( const char * base_name , int index ,
uchar * enetaddr )
{
{
char enetvar [ 32 ] ;
char enetvar [ 32 ] ;
sprintf ( enetvar , index ? " eth %daddr" : " ethaddr " , index ) ;
sprintf ( enetvar , index ? " %s %daddr" : " %saddr " , base_name , index ) ;
return eth_getenv_enetaddr ( enetvar , enetaddr ) ;
return eth_getenv_enetaddr ( enetvar , enetaddr ) ;
}
}
@ -188,6 +189,38 @@ static void eth_current_changed(void)
# endif
# endif
}
}
int eth_write_hwaddr ( struct eth_device * dev , const char * base_name ,
int eth_number )
{
unsigned char env_enetaddr [ 6 ] ;
int ret = 0 ;
if ( ! eth_getenv_enetaddr_by_index ( base_name , eth_number , env_enetaddr ) )
return - 1 ;
if ( memcmp ( env_enetaddr , " \0 \0 \0 \0 \0 \0 " , 6 ) ) {
if ( memcmp ( dev - > enetaddr , " \0 \0 \0 \0 \0 \0 " , 6 ) & &
memcmp ( dev - > enetaddr , env_enetaddr , 6 ) ) {
printf ( " \n Warning: %s MAC addresses don't match: \n " ,
dev - > name ) ;
printf ( " Address in SROM is %pM \n " ,
dev - > enetaddr ) ;
printf ( " Address in environment is %pM \n " ,
env_enetaddr ) ;
}
memcpy ( dev - > enetaddr , env_enetaddr , 6 ) ;
}
if ( dev - > write_hwaddr & &
! eth_mac_skip ( eth_number ) & &
is_valid_ether_addr ( dev - > enetaddr ) ) {
ret = dev - > write_hwaddr ( dev ) ;
}
return ret ;
}
int eth_register ( struct eth_device * dev )
int eth_register ( struct eth_device * dev )
{
{
struct eth_device * d ;
struct eth_device * d ;
@ -208,7 +241,6 @@ int eth_register(struct eth_device *dev)
int eth_initialize ( bd_t * bis )
int eth_initialize ( bd_t * bis )
{
{
unsigned char env_enetaddr [ 6 ] ;
int eth_number = 0 ;
int eth_number = 0 ;
eth_devices = NULL ;
eth_devices = NULL ;
@ -264,27 +296,8 @@ int eth_initialize(bd_t *bis)
if ( strchr ( dev - > name , ' ' ) )
if ( strchr ( dev - > name , ' ' ) )
puts ( " \n Warning: eth device name has a space! \n " ) ;
puts ( " \n Warning: eth device name has a space! \n " ) ;
eth_getenv_enetaddr_by_index ( eth_number , env_enetaddr ) ;
if ( eth_write_hwaddr ( dev , NULL , eth_number ) )
puts ( " Warning: failed to set MAC address \n " ) ;
if ( memcmp ( env_enetaddr , " \0 \0 \0 \0 \0 \0 " , 6 ) ) {
if ( memcmp ( dev - > enetaddr , " \0 \0 \0 \0 \0 \0 " , 6 ) & &
memcmp ( dev - > enetaddr , env_enetaddr , 6 ) )
{
printf ( " \n Warning: %s MAC addresses don't match: \n " ,
dev - > name ) ;
printf ( " Address in SROM is %pM \n " ,
dev - > enetaddr ) ;
printf ( " Address in environment is %pM \n " ,
env_enetaddr ) ;
}
memcpy ( dev - > enetaddr , env_enetaddr , 6 ) ;
}
if ( dev - > write_hwaddr & &
! eth_mac_skip ( eth_number ) & &
is_valid_ether_addr ( dev - > enetaddr ) ) {
dev - > write_hwaddr ( dev ) ;
}
eth_number + + ;
eth_number + + ;
dev = dev - > next ;
dev = dev - > next ;
@ -359,7 +372,8 @@ int eth_init(bd_t *bis)
do {
do {
uchar env_enetaddr [ 6 ] ;
uchar env_enetaddr [ 6 ] ;
if ( eth_getenv_enetaddr_by_index ( eth_number , env_enetaddr ) )
if ( eth_getenv_enetaddr_by_index ( " eth " , eth_number ,
env_enetaddr ) )
memcpy ( dev - > enetaddr , env_enetaddr , 6 ) ;
memcpy ( dev - > enetaddr , env_enetaddr , 6 ) ;
+ + eth_number ;
+ + eth_number ;