diff options
author | marius <marius@FreeBSD.org> | 2005-12-05 12:32:20 +0000 |
---|---|---|
committer | marius <marius@FreeBSD.org> | 2005-12-05 12:32:20 +0000 |
commit | 2d1f0805dac87b79aa2bfd75db0f44e672070411 (patch) | |
tree | 692f8c140d842ecfe46d285630f5a8d3b2f92be2 /sys | |
parent | 9b19d72862ec030327b619472a0fdd12ace7a4c0 (diff) | |
download | FreeBSD-src-2d1f0805dac87b79aa2bfd75db0f44e672070411.zip FreeBSD-src-2d1f0805dac87b79aa2bfd75db0f44e672070411.tar.gz |
- 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
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/dc/if_dc.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/sys/dev/dc/if_dc.c b/sys/dev/dc/if_dc.c index 91d08d3..bf1d86d 100644 --- a/sys/dev/dc/if_dc.c +++ b/sys/dev/dc/if_dc.c @@ -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; |