aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2013-04-16 06:51:56 -0400
committerJohn W. Linville <linville@tuxdriver.com>2013-04-22 15:20:15 -0400
commitecbbed32e7c2ad7d9a6305b02e11502b51f2605c (patch)
tree0645e1b463290d14376580cec10631879527998c /drivers/net/wireless/ath
parent703a4e5521dcd6624a8740c5be597c4fc8e4b9bb (diff)
ath: update hardware mac address with bssid mask
Preparation for updating common->macaddr along with virtual interface MAC address changes. Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath')
-rw-r--r--drivers/net/wireless/ath/ath9k/hw.c7
-rw-r--r--drivers/net/wireless/ath/ath9k/reg.h3
-rw-r--r--drivers/net/wireless/ath/hw.c6
-rw-r--r--drivers/net/wireless/ath/reg.h4
4 files changed, 13 insertions, 7 deletions
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
index 8a980a4bf4ec..10eb6bae12d9 100644
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
@@ -1698,12 +1698,11 @@ static void ath9k_hw_reset_opmode(struct ath_hw *ah,
1698 1698
1699 ENABLE_REGWRITE_BUFFER(ah); 1699 ENABLE_REGWRITE_BUFFER(ah);
1700 1700
1701 REG_WRITE(ah, AR_STA_ID0, get_unaligned_le32(common->macaddr)); 1701 REG_RMW(ah, AR_STA_ID1, macStaId1
1702 REG_WRITE(ah, AR_STA_ID1, get_unaligned_le16(common->macaddr + 4)
1703 | macStaId1
1704 | AR_STA_ID1_RTS_USE_DEF 1702 | AR_STA_ID1_RTS_USE_DEF
1705 | (ah->config.ack_6mb ? AR_STA_ID1_ACKCTS_6MB : 0) 1703 | (ah->config.ack_6mb ? AR_STA_ID1_ACKCTS_6MB : 0)
1706 | ah->sta_id1_defaults); 1704 | ah->sta_id1_defaults,
1705 ~AR_STA_ID1_SADH_MASK);
1707 ath_hw_setbssidmask(common); 1706 ath_hw_setbssidmask(common);
1708 REG_WRITE(ah, AR_DEF_ANTENNA, saveDefAntenna); 1707 REG_WRITE(ah, AR_DEF_ANTENNA, saveDefAntenna);
1709 ath9k_hw_write_associd(ah); 1708 ath9k_hw_write_associd(ah);
diff --git a/drivers/net/wireless/ath/ath9k/reg.h b/drivers/net/wireless/ath/ath9k/reg.h
index 5929850649f0..5c4ab5026dca 100644
--- a/drivers/net/wireless/ath/ath9k/reg.h
+++ b/drivers/net/wireless/ath/ath9k/reg.h
@@ -1493,9 +1493,6 @@ enum {
1493#define AR9271_RADIO_RF_RST 0x20 1493#define AR9271_RADIO_RF_RST 0x20
1494#define AR9271_GATE_MAC_CTL 0x4000 1494#define AR9271_GATE_MAC_CTL 0x4000
1495 1495
1496#define AR_STA_ID0 0x8000
1497#define AR_STA_ID1 0x8004
1498#define AR_STA_ID1_SADH_MASK 0x0000FFFF
1499#define AR_STA_ID1_STA_AP 0x00010000 1496#define AR_STA_ID1_STA_AP 0x00010000
1500#define AR_STA_ID1_ADHOC 0x00020000 1497#define AR_STA_ID1_ADHOC 0x00020000
1501#define AR_STA_ID1_PWR_SAV 0x00040000 1498#define AR_STA_ID1_PWR_SAV 0x00040000
diff --git a/drivers/net/wireless/ath/hw.c b/drivers/net/wireless/ath/hw.c
index 39e8a590d7fc..eae9abf540a7 100644
--- a/drivers/net/wireless/ath/hw.c
+++ b/drivers/net/wireless/ath/hw.c
@@ -118,6 +118,12 @@
118void ath_hw_setbssidmask(struct ath_common *common) 118void ath_hw_setbssidmask(struct ath_common *common)
119{ 119{
120 void *ah = common->ah; 120 void *ah = common->ah;
121 u32 id1;
122
123 REG_WRITE(ah, AR_STA_ID0, get_unaligned_le32(common->macaddr));
124 id1 = REG_READ(ah, AR_STA_ID1) & ~AR_STA_ID1_SADH_MASK;
125 id1 |= get_unaligned_le16(common->macaddr + 4);
126 REG_WRITE(ah, AR_STA_ID1, id1);
121 127
122 REG_WRITE(ah, AR_BSSMSKL, get_unaligned_le32(common->bssidmask)); 128 REG_WRITE(ah, AR_BSSMSKL, get_unaligned_le32(common->bssidmask));
123 REG_WRITE(ah, AR_BSSMSKU, get_unaligned_le16(common->bssidmask + 4)); 129 REG_WRITE(ah, AR_BSSMSKU, get_unaligned_le16(common->bssidmask + 4));
diff --git a/drivers/net/wireless/ath/reg.h b/drivers/net/wireless/ath/reg.h
index 298e53f3fa48..3ad4c774bd22 100644
--- a/drivers/net/wireless/ath/reg.h
+++ b/drivers/net/wireless/ath/reg.h
@@ -23,6 +23,10 @@
23#define AR_MIBC_CMC 0x00000004 23#define AR_MIBC_CMC 0x00000004
24#define AR_MIBC_MCS 0x00000008 24#define AR_MIBC_MCS 0x00000008
25 25
26#define AR_STA_ID0 0x8000
27#define AR_STA_ID1 0x8004
28#define AR_STA_ID1_SADH_MASK 0x0000ffff
29
26/* 30/*
27 * BSSID mask registers. See ath_hw_set_bssid_mask() 31 * BSSID mask registers. See ath_hw_set_bssid_mask()
28 * for detailed documentation about these registers. 32 * for detailed documentation about these registers.