Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fd8c5a7da3c48e53c7859d9f0c1d82ba02ca0a20
Commit:     fd8c5a7da3c48e53c7859d9f0c1d82ba02ca0a20
Parent:     a62daa4c7544a0f0ca94d61458e3f78f630e0c05
Author:     Jay Cliburn <[EMAIL PROTECTED]>
AuthorDate: Wed Feb 14 20:14:55 2007 -0600
Committer:  Jeff Garzik <[EMAIL PROTECTED]>
CommitDate: Sat Feb 17 15:16:08 2007 -0500

    atl1: read MAC address from register
    
    On some Asus motherboards containing the L1 NIC, the MAC address is
    written by the BIOS directly to the MAC register during POST, and is
    not stored in eeprom.  If we don't succeed in fetching the MAC address
    from eeprom or spi, try reading it directly from the MAC register.
    Suggested by Xiong Huang.
    
    And do some cleanup while we've got the hood up...
    
    Signed-off-by: Jay Cliburn <[EMAIL PROTECTED]>
    Signed-off-by: Chris Snook <[EMAIL PROTECTED]>
    Signed-off-by: Jeff Garzik <[EMAIL PROTECTED]>
---
 drivers/net/atl1/atl1_hw.c |   35 ++++++++++++++++++++---------------
 1 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/drivers/net/atl1/atl1_hw.c b/drivers/net/atl1/atl1_hw.c
index e28707a..314dbaa 100644
--- a/drivers/net/atl1/atl1_hw.c
+++ b/drivers/net/atl1/atl1_hw.c
@@ -243,14 +243,8 @@ static int atl1_get_permanent_address(struct atl1_hw *hw)
                        i += 4;
                }
 
-/*
- * The following 2 lines are the Attansic originals.  Saving for posterity.
- *             *(u32 *) & eth_addr[2] = LONGSWAP(addr[0]);
- *             *(u16 *) & eth_addr[0] = SHORTSWAP(*(u16 *) & addr[1]);
- */
-               *(u32 *) & eth_addr[2] = swab32(addr[0]);
-               *(u16 *) & eth_addr[0] = swab16(*(u16 *) & addr[1]);
-
+               *(u32 *) &eth_addr[2] = swab32(addr[0]);
+               *(u16 *) &eth_addr[0] = swab16(*(u16 *) &addr[1]);
                if (is_valid_ether_addr(eth_addr)) {
                        memcpy(hw->perm_mac_addr, eth_addr, ETH_ALEN);
                        return 0;
@@ -281,17 +275,28 @@ static int atl1_get_permanent_address(struct atl1_hw *hw)
                i += 4;
        }
 
-/*
- * The following 2 lines are the Attansic originals.  Saving for posterity.
- *     *(u32 *) & eth_addr[2] = LONGSWAP(addr[0]);
- *     *(u16 *) & eth_addr[0] = SHORTSWAP(*(u16 *) & addr[1]);
- */
-       *(u32 *) & eth_addr[2] = swab32(addr[0]);
-       *(u16 *) & eth_addr[0] = swab16(*(u16 *) & addr[1]);
+       *(u32 *) &eth_addr[2] = swab32(addr[0]);
+       *(u16 *) &eth_addr[0] = swab16(*(u16 *) &addr[1]);
        if (is_valid_ether_addr(eth_addr)) {
                memcpy(hw->perm_mac_addr, eth_addr, ETH_ALEN);
                return 0;
        }
+
+       /*
+        * On some motherboards, the MAC address is written by the
+        * BIOS directly to the MAC register during POST, and is
+        * not stored in eeprom.  If all else thus far has failed
+        * to fetch the permanent MAC address, try reading it directly.
+        */
+       addr[0] = ioread32(hw->hw_addr + REG_MAC_STA_ADDR);
+       addr[1] = ioread16(hw->hw_addr + (REG_MAC_STA_ADDR + 4));
+       *(u32 *) &eth_addr[2] = swab32(addr[0]);
+       *(u16 *) &eth_addr[0] = swab16(*(u16 *) &addr[1]);
+       if (is_valid_ether_addr(eth_addr)) {
+               memcpy(hw->perm_mac_addr, eth_addr, ETH_ALEN);
+               return 0;
+       }
+
        return 1;
 }
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to