- Rev. 1.175 fixed compilation on sparc64 but also backed out zeroing of
the eaddr array (introduced in rev. 1.174) prior to writing to it. As dc_read_eeprom() is told to write only 3 16-bit words to eaddr but eaddr in fact is somewhat larger removal of the zeroing defeated the check whether the MAC address is all zero as there can be some random garbage in eaddr past the 3 words written to it and the check verifys all bits in eaddr. Solve this by changing the check to verify only the 3 words (happenning to be ETHER_ADDR_LEN bytes) written to eaddr. - While here change the notation of "FCode" in a nearby comment to the official way. Ok'ed by: marcel, ru
This commit is contained in:
parent
342ed5d948
commit
802cab0330
@ -2064,12 +2064,9 @@ dc_attach(device_t dev)
|
||||
#ifdef __sparc64__
|
||||
/*
|
||||
* If this is an onboard dc(4) the station address read from
|
||||
* the EEPROM is all zero and we have to get it from the fcode.
|
||||
* the EEPROM is all zero and we have to get it from the FCode.
|
||||
*/
|
||||
for (i = 0; i < (ETHER_ADDR_LEN+3)/4; i++)
|
||||
if (eaddr[i] != 0)
|
||||
break;
|
||||
if (i >= (ETHER_ADDR_LEN+3)/4)
|
||||
if (eaddr[0] == 0 && (eaddr[1] & ~0xffff) == 0)
|
||||
OF_getetheraddr(dev, (caddr_t)&eaddr);
|
||||
#endif
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user