ath6kl: use custom MAC address for newly created interfaces
authorAarthi Thiruvengadam <athiruve@qca.qualcomm.com>
Tue, 10 Jul 2012 20:20:40 +0000 (13:20 -0700)
committerKalle Valo <kvalo@qca.qualcomm.com>
Wed, 24 Oct 2012 08:49:32 +0000 (11:49 +0300)
Firmware and driver generate MAC addresses for the second and third interfaces.
In addition to the existing algorithm, flip bit 7 of 5th octet. Since both
firmware and driver individually generate the MAC addresses, introduce a new
firmware capability bit to keep them compatible.

Signed-off-by: Aarthi Thiruvengadam <athiruve@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath6kl/cfg80211.c
drivers/net/wireless/ath/ath6kl/core.h

index a5f3d6e5470853bd140f51ef5a4c14d49d0603a7..a624a0c5e5f5142616c3bce55f72ec1a662d49a0 100644 (file)
@@ -3523,9 +3523,13 @@ struct wireless_dev *ath6kl_interface_add(struct ath6kl *ar, const char *name,
        vif->htcap[IEEE80211_BAND_5GHZ].ht_enable = true;
 
        memcpy(ndev->dev_addr, ar->mac_addr, ETH_ALEN);
-       if (fw_vif_idx != 0)
+       if (fw_vif_idx != 0) {
                ndev->dev_addr[0] = (ndev->dev_addr[0] ^ (1 << fw_vif_idx)) |
                                     0x2;
+               if (test_bit(ATH6KL_FW_CAPABILITY_CUSTOM_MAC_ADDR,
+                            ar->fw_capabilities))
+                       ndev->dev_addr[4] ^= 0x80;
+       }
 
        init_netdev(ndev);
 
index a6f0d2c40d2e2d4b2b3521034f43f682ebbe2fd6..4e5edd9f16a8ecbe0d40e1feee025051cc59df5e 100644 (file)
@@ -118,6 +118,9 @@ enum ath6kl_fw_capability {
        /* Firmware supports filtering BSS results by RSSI */
        ATH6KL_FW_CAPABILITY_RSSI_SCAN_THOLD,
 
+       /* FW sets mac_addr[4] ^= 0x80 for newly created interfaces */
+       ATH6KL_FW_CAPABILITY_CUSTOM_MAC_ADDR,
+
        /* this needs to be last */
        ATH6KL_FW_CAPABILITY_MAX,
 };