|
|
|
@ -210,7 +210,7 @@ static int smc_rcv(void); |
|
|
|
|
. If an EEPROM is present it really should be consulted. |
|
|
|
|
*/ |
|
|
|
|
int smc_get_ethaddr(bd_t *bd); |
|
|
|
|
int get_rom_mac(char *v_rom_mac); |
|
|
|
|
int get_rom_mac(uchar *v_rom_mac); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
------------------------------------------------------------ |
|
|
|
@ -276,17 +276,23 @@ static inline void SMC_outb(byte value, dword offset) |
|
|
|
|
|
|
|
|
|
static inline void SMC_insw(dword offset, volatile uchar* buf, dword len) |
|
|
|
|
{ |
|
|
|
|
volatile word *p = (volatile word *)buf; |
|
|
|
|
|
|
|
|
|
while (len-- > 0) { |
|
|
|
|
*((word*)buf)++ = SMC_inw(offset); |
|
|
|
|
barrier(); *((volatile u32*)(0xc0000000)); |
|
|
|
|
*p++ = SMC_inw(offset); |
|
|
|
|
barrier(); |
|
|
|
|
*((volatile u32*)(0xc0000000)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static inline void SMC_outsw(dword offset, uchar* buf, dword len) |
|
|
|
|
{ |
|
|
|
|
volatile word *p = (volatile word *)buf; |
|
|
|
|
|
|
|
|
|
while (len-- > 0) { |
|
|
|
|
SMC_outw(*((word*)buf)++, offset); |
|
|
|
|
barrier(); *(volatile u32*)(0xc0000000); |
|
|
|
|
SMC_outw(*p++, offset); |
|
|
|
|
barrier(); |
|
|
|
|
*(volatile u32*)(0xc0000000); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
#endif /* CONFIG_SMC_USE_IOFUNCS */ |
|
|
|
@ -298,7 +304,7 @@ static char unsigned smc_mac_addr[6] = {0x02, 0x80, 0xad, 0x20, 0x31, 0xb8}; |
|
|
|
|
* the default mac address. |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
void smc_set_mac_addr(const char *addr) { |
|
|
|
|
void smc_set_mac_addr(const unsigned char *addr) { |
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
for (i=0; i < sizeof(smc_mac_addr); i++){ |
|
|
|
@ -1524,7 +1530,8 @@ int smc_get_ethaddr (bd_t * bd) |
|
|
|
|
{ |
|
|
|
|
int env_size, rom_valid, env_present = 0, reg; |
|
|
|
|
char *s = NULL, *e, *v_mac, es[] = "11:22:33:44:55:66"; |
|
|
|
|
uchar s_env_mac[64], v_env_mac[6], v_rom_mac[6]; |
|
|
|
|
char s_env_mac[64]; |
|
|
|
|
uchar v_env_mac[6], v_rom_mac[6]; |
|
|
|
|
|
|
|
|
|
env_size = getenv_r ("ethaddr", s_env_mac, sizeof (s_env_mac)); |
|
|
|
|
if ((env_size > 0) && (env_size < sizeof (es))) { /* exit if env is bad */ |
|
|
|
@ -1547,7 +1554,7 @@ int smc_get_ethaddr (bd_t * bd) |
|
|
|
|
|
|
|
|
|
if (!env_present) { /* if NO env */ |
|
|
|
|
if (rom_valid) { /* but ROM is valid */ |
|
|
|
|
v_mac = v_rom_mac; |
|
|
|
|
v_mac = (char *)v_rom_mac; |
|
|
|
|
sprintf (s_env_mac, "%02X:%02X:%02X:%02X:%02X:%02X", |
|
|
|
|
v_mac[0], v_mac[1], v_mac[2], v_mac[3], |
|
|
|
|
v_mac[4], v_mac[5]); |
|
|
|
@ -1557,7 +1564,7 @@ int smc_get_ethaddr (bd_t * bd) |
|
|
|
|
return (-1); |
|
|
|
|
} |
|
|
|
|
} else { /* good env, don't care ROM */ |
|
|
|
|
v_mac = v_env_mac; /* always use a good env over a ROM */ |
|
|
|
|
v_mac = (char *)v_env_mac; /* always use a good env over a ROM */ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (env_present && rom_valid) { /* if both env and ROM are good */ |
|
|
|
@ -1577,13 +1584,13 @@ int smc_get_ethaddr (bd_t * bd) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
memcpy (bd->bi_enetaddr, v_mac, 6); /* update global address to match env (allows env changing) */ |
|
|
|
|
smc_set_mac_addr (v_mac); /* use old function to update smc default */ |
|
|
|
|
smc_set_mac_addr ((uchar *)v_mac); /* use old function to update smc default */ |
|
|
|
|
PRINTK("Using MAC Address %02X:%02X:%02X:%02X:%02X:%02X\n", v_mac[0], v_mac[1], |
|
|
|
|
v_mac[2], v_mac[3], v_mac[4], v_mac[5]); |
|
|
|
|
return (0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int get_rom_mac (char *v_rom_mac) |
|
|
|
|
int get_rom_mac (uchar *v_rom_mac) |
|
|
|
|
{ |
|
|
|
|
#ifdef HARDCODE_MAC /* used for testing or to supress run time warnings */ |
|
|
|
|
char hw_mac_addr[] = { 0x02, 0x80, 0xad, 0x20, 0x31, 0xb8 }; |
|
|
|
|