diff options
author | Ron Mercer <ron.mercer@qlogic.com> | 2009-06-09 05:39:33 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-06-10 01:04:13 -0700 |
commit | 542512e4824c1cecc05478f279dccbde1d8bf97a (patch) | |
tree | 09731618c827d4d07414fcbb2cacb92caf7a7880 | |
parent | ec33a49135d96df56ef106a49c2434ca81f821f9 (diff) | |
download | op-kernel-dev-542512e4824c1cecc05478f279dccbde1d8bf97a.zip op-kernel-dev-542512e4824c1cecc05478f279dccbde1d8bf97a.tar.gz |
qlge: Add support for using alternate MAC address.
Extract either manufacturer or Bladecenter Open Fabric
Manager (BOFM) MAC address. BOFM may indicate an
alternate MAC address. This patch honors that request
by extracting the MAC address from a different
flash location if a flag is set.
Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/qlge/qlge_main.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c index 738691d..d6517eb 100644 --- a/drivers/net/qlge/qlge_main.c +++ b/drivers/net/qlge/qlge_main.c @@ -675,6 +675,7 @@ static int ql_get_8000_flash_params(struct ql_adapter *qdev) int status; __le32 *p = (__le32 *)&qdev->flash; u32 offset; + u8 mac_addr[6]; /* Get flash offset for function and adjust * for dword access. @@ -705,14 +706,26 @@ static int ql_get_8000_flash_params(struct ql_adapter *qdev) goto exit; } - if (!is_valid_ether_addr(qdev->flash.flash_params_8000.mac_addr)) { + /* Extract either manufacturer or BOFM modified + * MAC address. + */ + if (qdev->flash.flash_params_8000.data_type1 == 2) + memcpy(mac_addr, + qdev->flash.flash_params_8000.mac_addr1, + qdev->ndev->addr_len); + else + memcpy(mac_addr, + qdev->flash.flash_params_8000.mac_addr, + qdev->ndev->addr_len); + + if (!is_valid_ether_addr(mac_addr)) { QPRINTK(qdev, IFUP, ERR, "Invalid MAC address.\n"); status = -EINVAL; goto exit; } memcpy(qdev->ndev->dev_addr, - qdev->flash.flash_params_8000.mac_addr, + mac_addr, qdev->ndev->addr_len); exit: |