From 858b5fd253b50ad662ab34ec5be86c3ee004ec2d Mon Sep 17 00:00:00 2001 From: Joshua Oreman Date: Fri, 23 Oct 2009 17:04:38 +0200 Subject: [PATCH] [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 Signed-off-by: Michael Brown Modified-by: Michael Brown --- src/drivers/net/atl1e.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/drivers/net/atl1e.c b/src/drivers/net/atl1e.c index 664eba03..6c0b0502 100644 --- a/src/drivers/net/atl1e.c +++ b/src/drivers/net/atl1e.c @@ -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); @@ -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 *) ð_addr[2] = swap32(addr[0]); - *(u16 *) ð_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;