Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[atl1e] Fix compilation on gcc-4.4.1-2.fc11.i586.
Error message was:

[BUILD] bin/atl1e.oncc1: warnings being treated as errors
drivers/net/atl1e.c: In function 'atl1e_get_permanent_address':
drivers/net/atl1e.c:1326: error: dereferencing type-punned pointer will break strict-aliasing rules
make: *** [bin/atl1e.o] Error 1

Reported-by: Giandomenico  De Tullio <ghisha@email.it>
Signed-off-by: Michael Brown <mcb30@etherboot.org>
Modified-by: Michael Brown <mcb30@etherboot.org>
  • Loading branch information
rwcr authored and Michael Brown committed Oct 24, 2009
1 parent 8912e24 commit 858b5fd
Showing 1 changed file with 9 additions and 8 deletions.
17 changes: 9 additions & 8 deletions src/drivers/net/atl1e.c
Expand Up @@ -1296,14 +1296,14 @@ void atl1e_hw_set_mac_addr(struct atl1e_hw *hw)
*/
static int atl1e_get_permanent_address(struct atl1e_hw *hw)
{
u32 addr[2];
union {
u32 dword[2];
u8 byte[8];
} hw_addr;
u32 i;
u32 twsi_ctrl_data;
u8 eth_addr[ETH_ALEN];

/* init */
addr[0] = addr[1] = 0;

if (!atl1e_check_eeprom_exist(hw)) {
/* eeprom exist */
twsi_ctrl_data = AT_READ_REG(hw, REG_TWSI_CTRL);
Expand All @@ -1320,10 +1320,11 @@ static int atl1e_get_permanent_address(struct atl1e_hw *hw)
}

/* maybe MAC-address is from BIOS */
addr[0] = AT_READ_REG(hw, REG_MAC_STA_ADDR);
addr[1] = AT_READ_REG(hw, REG_MAC_STA_ADDR + 4);
*(u32 *) &eth_addr[2] = swap32(addr[0]);
*(u16 *) &eth_addr[0] = swap16(*(u16 *)&addr[1]);
hw_addr.dword[0] = AT_READ_REG(hw, REG_MAC_STA_ADDR);
hw_addr.dword[1] = AT_READ_REG(hw, REG_MAC_STA_ADDR + 4);
for (i = 0; i < ETH_ALEN; i++) {
eth_addr[ETH_ALEN - i - 1] = hw_addr.byte[i];
}

memcpy(hw->perm_mac_addr, eth_addr, ETH_ALEN);
return 0;
Expand Down

0 comments on commit 858b5fd

Please sign in to comment.