summaryrefslogtreecommitdiffstats
path: root/sys/dev/dc
diff options
context:
space:
mode:
authormarius <marius@FreeBSD.org>2005-12-05 12:32:20 +0000
committermarius <marius@FreeBSD.org>2005-12-05 12:32:20 +0000
commit2d1f0805dac87b79aa2bfd75db0f44e672070411 (patch)
tree692f8c140d842ecfe46d285630f5a8d3b2f92be2 /sys/dev/dc
parent9b19d72862ec030327b619472a0fdd12ace7a4c0 (diff)
downloadFreeBSD-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/dev/dc')
-rw-r--r--sys/dev/dc/if_dc.c7
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;
OpenPOWER on IntegriCloud