diff options
author | yongari <yongari@FreeBSD.org> | 2006-08-03 00:15:19 +0000 |
---|---|---|
committer | yongari <yongari@FreeBSD.org> | 2006-08-03 00:15:19 +0000 |
commit | 3b874defd95ed6c3f34debc9113ec550197dc149 (patch) | |
tree | 6770c1d43bce80835fa3113333068a699c4e10cb | |
parent | 774fbf773647291ff95c92284f46c14766a97e89 (diff) | |
download | FreeBSD-src-3b874defd95ed6c3f34debc9113ec550197dc149.zip FreeBSD-src-3b874defd95ed6c3f34debc9113ec550197dc149.tar.gz |
Fix re(4) breakge introduced in tree from rev 1.68.
This should fix incorrect configuration of station address on
big-endian architectures.
Reviewed by: wpaul
Tested on: sparc64
-rw-r--r-- | sys/dev/re/if_re.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/sys/dev/re/if_re.c b/sys/dev/re/if_re.c index 00e4c54..8500d8f 100644 --- a/sys/dev/re/if_re.c +++ b/sys/dev/re/if_re.c @@ -411,7 +411,7 @@ re_read_eeprom(sc, dest, off, cnt) re_eeprom_getword(sc, off + i, &word); CSR_CLRBIT_1(sc, RL_EECMD, RL_EE_SEL); ptr = (u_int16_t *)(dest + (i * 2)); - *ptr = le16toh(word); + *ptr = word; } CSR_CLRBIT_1(sc, RL_EECMD, RL_EEMODE_PROGRAM); @@ -1122,7 +1122,7 @@ re_attach(dev) device_t dev; { u_char eaddr[ETHER_ADDR_LEN]; - u_int16_t as[3]; + u_int16_t as[ETHER_ADDR_LEN / 2]; struct rl_softc *sc; struct ifnet *ifp; struct rl_hwrev *hw_rev; @@ -1190,10 +1190,9 @@ re_attach(dev) * Get station address from the EEPROM. */ re_read_eeprom(sc, (caddr_t)as, RL_EE_EADDR, 3); - for (i = 0; i < 3; i++) { - eaddr[(i * 2) + 0] = as[i] & 0xff; - eaddr[(i * 2) + 1] = as[i] >> 8; - } + for (i = 0; i < ETHER_ADDR_LEN / 2; i++) + as[i] = le16toh(as[i]); + bcopy(as, eaddr, sizeof(eaddr)); if (sc->rl_type == RL_8169) { /* Set RX length mask */ |