@ -201,6 +201,22 @@ static int ivm_check_crc(unsigned char *buf, int block)
return 0 ;
}
static int calculate_mac_offset ( unsigned char * valbuf , unsigned char * buf ,
int offset )
{
unsigned long val = ( buf [ 4 ] < < 16 ) + ( buf [ 5 ] < < 8 ) + buf [ 6 ] ;
if ( offset = = 0 )
return 0 ;
val + = offset ;
buf [ 4 ] = ( val > > 16 ) & 0xff ;
buf [ 5 ] = ( val > > 8 ) & 0xff ;
buf [ 6 ] = val & 0xff ;
sprintf ( ( char * ) valbuf , " %pM " , buf + 1 ) ;
return 0 ;
}
static int ivm_analyze_block2 ( unsigned char * buf , int len )
{
unsigned char valbuf [ CONFIG_SYS_IVM_EEPROM_PAGE_LEN ] ;
@ -210,17 +226,7 @@ static int ivm_analyze_block2(unsigned char *buf, int len)
sprintf ( ( char * ) valbuf , " %pM " , buf + 1 ) ;
ivm_set_value ( " IVM_MacAddress " , ( char * ) valbuf ) ;
/* if an offset is defined, add it */
# if defined(CONFIG_PIGGY_MAC_ADRESS_OFFSET)
if ( CONFIG_PIGGY_MAC_ADRESS_OFFSET > 0 ) {
unsigned long val = ( buf [ 4 ] < < 16 ) + ( buf [ 5 ] < < 8 ) + buf [ 6 ] ;
val + = CONFIG_PIGGY_MAC_ADRESS_OFFSET ;
buf [ 4 ] = ( val > > 16 ) & 0xff ;
buf [ 5 ] = ( val > > 8 ) & 0xff ;
buf [ 6 ] = val & 0xff ;
sprintf ( ( char * ) valbuf , " %pM " , buf + 1 ) ;
}
# endif
calculate_mac_offset ( buf , valbuf , CONFIG_PIGGY_MAC_ADRESS_OFFSET ) ;
# ifdef MACH_TYPE_KM_KIRKWOOD
setenv ( ( char * ) " ethaddr " , ( char * ) valbuf ) ;
# else