Correct endianness handling in getting station address from EEPROM.

While I'm here, remove aue_eeprom_getword() as its only usage is to
read station address and make it more readable.  This change is
inspired by NetBSD.
With this change, aue(4) should work on big endian architectures.

PR:	188177
This commit is contained in:
Pyun YongHyeon 2014-04-03 01:32:43 +00:00
parent c3f5e9c515
commit 759d456324
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=264062

View File

@ -212,9 +212,7 @@ static uint8_t aue_csr_read_1(struct aue_softc *, uint16_t);
static uint16_t aue_csr_read_2(struct aue_softc *, uint16_t);
static void aue_csr_write_1(struct aue_softc *, uint16_t, uint8_t);
static void aue_csr_write_2(struct aue_softc *, uint16_t, uint16_t);
static void aue_eeprom_getword(struct aue_softc *, int, uint16_t *);
static void aue_read_eeprom(struct aue_softc *, uint8_t *, uint16_t,
uint16_t);
static uint16_t aue_eeprom_getword(struct aue_softc *, int);
static void aue_reset(struct aue_softc *);
static void aue_reset_pegasus_II(struct aue_softc *);
@ -376,11 +374,10 @@ aue_csr_write_2(struct aue_softc *sc, uint16_t reg, uint16_t val)
/*
* Read a word of data stored in the EEPROM at address 'addr.'
*/
static void
aue_eeprom_getword(struct aue_softc *sc, int addr, uint16_t *dest)
static uint16_t
aue_eeprom_getword(struct aue_softc *sc, int addr)
{
int i;
uint16_t word = 0;
aue_csr_write_1(sc, AUE_EE_REG, addr);
aue_csr_write_1(sc, AUE_EE_CTL, AUE_EECTL_READ);
@ -395,22 +392,23 @@ aue_eeprom_getword(struct aue_softc *sc, int addr, uint16_t *dest)
if (i == AUE_TIMEOUT)
device_printf(sc->sc_ue.ue_dev, "EEPROM read timed out\n");
word = aue_csr_read_2(sc, AUE_EE_DATA);
*dest = word;
return (aue_csr_read_2(sc, AUE_EE_DATA));
}
/*
* Read a sequence of words from the EEPROM.
* Read station address(offset 0) from the EEPROM.
*/
static void
aue_read_eeprom(struct aue_softc *sc, uint8_t *dest,
uint16_t off, uint16_t len)
aue_read_mac(struct aue_softc *sc, uint8_t *eaddr)
{
uint16_t *ptr = (uint16_t *)dest;
int i;
int i, offset;
uint16_t word;
for (i = 0; i != len; i++, ptr++)
aue_eeprom_getword(sc, off + i, ptr);
for (i = 0, offset = 0; i < ETHER_ADDR_LEN / 2; i++) {
word = aue_eeprom_getword(sc, offset + i);
eaddr[i * 2] = (uint8_t)word;
eaddr[i * 2 + 1] = (uint8_t)(word >> 8);
}
}
static int
@ -636,7 +634,7 @@ aue_attach_post(struct usb_ether *ue)
aue_reset(sc);
/* get station address from the EEPROM */
aue_read_eeprom(sc, ue->ue_eaddr, 0, 3);
aue_read_mac(sc, ue->ue_eaddr);
}
/*