- 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:
Marius Strobl 2005-12-05 12:32:20 +00:00
parent 342ed5d948
commit 802cab0330

View File

@ -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;