aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorVivek Natarajan <vnatarajan@atheros.com>2011-04-26 01:09:52 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-04-28 14:50:00 -0400
commit978f78bf71372a48785ac9407ebc10170f14f56c (patch)
tree5d68d324e0502503ab02fefc7feae7c2f328e117 /drivers/net/wireless
parent8178d38b704f0a08a74b030c35e6eca5f5019d3d (diff)
ath9k_hw: Move bt_stomp to hw from common.
Move bt_stomp to ath9k_hw and add its support for latest chipsets. Signed-off-by: Vivek Natarajan <vnatarajan@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/ath/ath9k/btcoex.c66
-rw-r--r--drivers/net/wireless/ath/ath9k/btcoex.h10
-rw-r--r--drivers/net/wireless/ath/ath9k/common.c31
-rw-r--r--drivers/net/wireless/ath/ath9k/common.h8
-rw-r--r--drivers/net/wireless/ath/ath9k/gpio.c7
-rw-r--r--drivers/net/wireless/ath/ath9k/htc_drv_gpio.c6
6 files changed, 82 insertions, 46 deletions
diff --git a/drivers/net/wireless/ath/ath9k/btcoex.c b/drivers/net/wireless/ath/ath9k/btcoex.c
index d33bf204c99..71e9e4841fa 100644
--- a/drivers/net/wireless/ath/ath9k/btcoex.c
+++ b/drivers/net/wireless/ath/ath9k/btcoex.c
@@ -209,3 +209,69 @@ void ath9k_hw_btcoex_disable(struct ath_hw *ah)
209 ah->btcoex_hw.enabled = false; 209 ah->btcoex_hw.enabled = false;
210} 210}
211EXPORT_SYMBOL(ath9k_hw_btcoex_disable); 211EXPORT_SYMBOL(ath9k_hw_btcoex_disable);
212
213static void ar9003_btcoex_bt_stomp(struct ath_hw *ah,
214 enum ath_stomp_type stomp_type)
215{
216 ah->bt_coex_bt_weight[0] = AR9300_BT_WGHT;
217 ah->bt_coex_bt_weight[1] = AR9300_BT_WGHT;
218 ah->bt_coex_bt_weight[2] = AR9300_BT_WGHT;
219 ah->bt_coex_bt_weight[3] = AR9300_BT_WGHT;
220
221
222 switch (stomp_type) {
223 case ATH_BTCOEX_STOMP_ALL:
224 ah->bt_coex_wlan_weight[0] = AR9300_STOMP_ALL_WLAN_WGHT0;
225 ah->bt_coex_wlan_weight[1] = AR9300_STOMP_ALL_WLAN_WGHT1;
226 break;
227 case ATH_BTCOEX_STOMP_LOW:
228 ah->bt_coex_wlan_weight[0] = AR9300_STOMP_LOW_WLAN_WGHT0;
229 ah->bt_coex_wlan_weight[1] = AR9300_STOMP_LOW_WLAN_WGHT1;
230 break;
231 case ATH_BTCOEX_STOMP_NONE:
232 ah->bt_coex_wlan_weight[0] = AR9300_STOMP_NONE_WLAN_WGHT0;
233 ah->bt_coex_wlan_weight[1] = AR9300_STOMP_NONE_WLAN_WGHT1;
234 break;
235
236 default:
237 ath_dbg(ath9k_hw_common(ah), ATH_DBG_BTCOEX,
238 "Invalid Stomptype\n");
239 break;
240 }
241
242 ath9k_hw_btcoex_enable(ah);
243}
244
245/*
246 * Configures appropriate weight based on stomp type.
247 */
248void ath9k_hw_btcoex_bt_stomp(struct ath_hw *ah,
249 enum ath_stomp_type stomp_type)
250{
251 if (AR_SREV_9300_20_OR_LATER(ah)) {
252 ar9003_btcoex_bt_stomp(ah, stomp_type);
253 return;
254 }
255
256 switch (stomp_type) {
257 case ATH_BTCOEX_STOMP_ALL:
258 ath9k_hw_btcoex_set_weight(ah, AR_BT_COEX_WGHT,
259 AR_STOMP_ALL_WLAN_WGHT);
260 break;
261 case ATH_BTCOEX_STOMP_LOW:
262 ath9k_hw_btcoex_set_weight(ah, AR_BT_COEX_WGHT,
263 AR_STOMP_LOW_WLAN_WGHT);
264 break;
265 case ATH_BTCOEX_STOMP_NONE:
266 ath9k_hw_btcoex_set_weight(ah, AR_BT_COEX_WGHT,
267 AR_STOMP_NONE_WLAN_WGHT);
268 break;
269 default:
270 ath_dbg(ath9k_hw_common(ah), ATH_DBG_BTCOEX,
271 "Invalid Stomptype\n");
272 break;
273 }
274
275 ath9k_hw_btcoex_enable(ah);
276}
277EXPORT_SYMBOL(ath9k_hw_btcoex_bt_stomp);
diff --git a/drivers/net/wireless/ath/ath9k/btcoex.h b/drivers/net/wireless/ath/ath9k/btcoex.h
index 588dfd464dd..aac8fae5081 100644
--- a/drivers/net/wireless/ath/ath9k/btcoex.h
+++ b/drivers/net/wireless/ath/ath9k/btcoex.h
@@ -32,6 +32,14 @@
32#define ATH_BT_CNT_THRESHOLD 3 32#define ATH_BT_CNT_THRESHOLD 3
33#define ATH_BT_CNT_SCAN_THRESHOLD 15 33#define ATH_BT_CNT_SCAN_THRESHOLD 15
34 34
35/* Defines the BT AR_BT_COEX_WGHT used */
36enum ath_stomp_type {
37 ATH_BTCOEX_NO_STOMP,
38 ATH_BTCOEX_STOMP_ALL,
39 ATH_BTCOEX_STOMP_LOW,
40 ATH_BTCOEX_STOMP_NONE
41};
42
35enum ath_btcoex_scheme { 43enum ath_btcoex_scheme {
36 ATH_BTCOEX_CFG_NONE, 44 ATH_BTCOEX_CFG_NONE,
37 ATH_BTCOEX_CFG_2WIRE, 45 ATH_BTCOEX_CFG_2WIRE,
@@ -57,5 +65,7 @@ void ath9k_hw_btcoex_set_weight(struct ath_hw *ah,
57 u32 wlan_weight); 65 u32 wlan_weight);
58void ath9k_hw_btcoex_enable(struct ath_hw *ah); 66void ath9k_hw_btcoex_enable(struct ath_hw *ah);
59void ath9k_hw_btcoex_disable(struct ath_hw *ah); 67void ath9k_hw_btcoex_disable(struct ath_hw *ah);
68void ath9k_hw_btcoex_bt_stomp(struct ath_hw *ah,
69 enum ath_stomp_type stomp_type);
60 70
61#endif 71#endif
diff --git a/drivers/net/wireless/ath/ath9k/common.c b/drivers/net/wireless/ath/ath9k/common.c
index 16ba8c67fbd..74535e6dfb8 100644
--- a/drivers/net/wireless/ath/ath9k/common.c
+++ b/drivers/net/wireless/ath/ath9k/common.c
@@ -158,37 +158,6 @@ int ath9k_cmn_count_streams(unsigned int chainmask, int max)
158} 158}
159EXPORT_SYMBOL(ath9k_cmn_count_streams); 159EXPORT_SYMBOL(ath9k_cmn_count_streams);
160 160
161/*
162 * Configures appropriate weight based on stomp type.
163 */
164void ath9k_cmn_btcoex_bt_stomp(struct ath_common *common,
165 enum ath_stomp_type stomp_type)
166{
167 struct ath_hw *ah = common->ah;
168
169 switch (stomp_type) {
170 case ATH_BTCOEX_STOMP_ALL:
171 ath9k_hw_btcoex_set_weight(ah, AR_BT_COEX_WGHT,
172 AR_STOMP_ALL_WLAN_WGHT);
173 break;
174 case ATH_BTCOEX_STOMP_LOW:
175 ath9k_hw_btcoex_set_weight(ah, AR_BT_COEX_WGHT,
176 AR_STOMP_LOW_WLAN_WGHT);
177 break;
178 case ATH_BTCOEX_STOMP_NONE:
179 ath9k_hw_btcoex_set_weight(ah, AR_BT_COEX_WGHT,
180 AR_STOMP_NONE_WLAN_WGHT);
181 break;
182 default:
183 ath_dbg(common, ATH_DBG_BTCOEX,
184 "Invalid Stomptype\n");
185 break;
186 }
187
188 ath9k_hw_btcoex_enable(ah);
189}
190EXPORT_SYMBOL(ath9k_cmn_btcoex_bt_stomp);
191
192void ath9k_cmn_update_txpow(struct ath_hw *ah, u16 cur_txpow, 161void ath9k_cmn_update_txpow(struct ath_hw *ah, u16 cur_txpow,
193 u16 new_txpow, u16 *txpower) 162 u16 new_txpow, u16 *txpower)
194{ 163{
diff --git a/drivers/net/wireless/ath/ath9k/common.h b/drivers/net/wireless/ath/ath9k/common.h
index b2f7b5f8909..5124f1420b3 100644
--- a/drivers/net/wireless/ath/ath9k/common.h
+++ b/drivers/net/wireless/ath/ath9k/common.h
@@ -50,14 +50,6 @@
50#define ATH_EP_RND(x, mul) \ 50#define ATH_EP_RND(x, mul) \
51 ((((x)%(mul)) >= ((mul)/2)) ? ((x) + ((mul) - 1)) / (mul) : (x)/(mul)) 51 ((((x)%(mul)) >= ((mul)/2)) ? ((x) + ((mul) - 1)) / (mul) : (x)/(mul))
52 52
53/* Defines the BT AR_BT_COEX_WGHT used */
54enum ath_stomp_type {
55 ATH_BTCOEX_NO_STOMP,
56 ATH_BTCOEX_STOMP_ALL,
57 ATH_BTCOEX_STOMP_LOW,
58 ATH_BTCOEX_STOMP_NONE
59};
60
61int ath9k_cmn_padpos(__le16 frame_control); 53int ath9k_cmn_padpos(__le16 frame_control);
62int ath9k_cmn_get_hw_crypto_keytype(struct sk_buff *skb); 54int ath9k_cmn_get_hw_crypto_keytype(struct sk_buff *skb);
63void ath9k_cmn_update_ichannel(struct ath9k_channel *ichan, 55void ath9k_cmn_update_ichannel(struct ath9k_channel *ichan,
diff --git a/drivers/net/wireless/ath/ath9k/gpio.c b/drivers/net/wireless/ath/ath9k/gpio.c
index 2c59452a720..3a4ddd19e60 100644
--- a/drivers/net/wireless/ath/ath9k/gpio.c
+++ b/drivers/net/wireless/ath/ath9k/gpio.c
@@ -176,7 +176,6 @@ static void ath_btcoex_period_timer(unsigned long data)
176 struct ath_softc *sc = (struct ath_softc *) data; 176 struct ath_softc *sc = (struct ath_softc *) data;
177 struct ath_hw *ah = sc->sc_ah; 177 struct ath_hw *ah = sc->sc_ah;
178 struct ath_btcoex *btcoex = &sc->btcoex; 178 struct ath_btcoex *btcoex = &sc->btcoex;
179 struct ath_common *common = ath9k_hw_common(ah);
180 u32 timer_period; 179 u32 timer_period;
181 bool is_btscan; 180 bool is_btscan;
182 181
@@ -186,7 +185,7 @@ static void ath_btcoex_period_timer(unsigned long data)
186 185
187 spin_lock_bh(&btcoex->btcoex_lock); 186 spin_lock_bh(&btcoex->btcoex_lock);
188 187
189 ath9k_cmn_btcoex_bt_stomp(common, is_btscan ? ATH_BTCOEX_STOMP_ALL : 188 ath9k_hw_btcoex_bt_stomp(ah, is_btscan ? ATH_BTCOEX_STOMP_ALL :
190 btcoex->bt_stomp_type); 189 btcoex->bt_stomp_type);
191 190
192 spin_unlock_bh(&btcoex->btcoex_lock); 191 spin_unlock_bh(&btcoex->btcoex_lock);
@@ -224,9 +223,9 @@ static void ath_btcoex_no_stomp_timer(void *arg)
224 spin_lock_bh(&btcoex->btcoex_lock); 223 spin_lock_bh(&btcoex->btcoex_lock);
225 224
226 if (btcoex->bt_stomp_type == ATH_BTCOEX_STOMP_LOW || is_btscan) 225 if (btcoex->bt_stomp_type == ATH_BTCOEX_STOMP_LOW || is_btscan)
227 ath9k_cmn_btcoex_bt_stomp(common, ATH_BTCOEX_STOMP_NONE); 226 ath9k_hw_btcoex_bt_stomp(ah, ATH_BTCOEX_STOMP_NONE);
228 else if (btcoex->bt_stomp_type == ATH_BTCOEX_STOMP_ALL) 227 else if (btcoex->bt_stomp_type == ATH_BTCOEX_STOMP_ALL)
229 ath9k_cmn_btcoex_bt_stomp(common, ATH_BTCOEX_STOMP_LOW); 228 ath9k_hw_btcoex_bt_stomp(ah, ATH_BTCOEX_STOMP_LOW);
230 229
231 spin_unlock_bh(&btcoex->btcoex_lock); 230 spin_unlock_bh(&btcoex->btcoex_lock);
232} 231}
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_gpio.c b/drivers/net/wireless/ath/ath9k/htc_drv_gpio.c
index d051a4263e0..26ede1daa30 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_gpio.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_gpio.c
@@ -77,7 +77,7 @@ static void ath_btcoex_period_work(struct work_struct *work)
77 return; 77 return;
78 } 78 }
79 79
80 ath9k_cmn_btcoex_bt_stomp(common, is_btscan ? ATH_BTCOEX_STOMP_ALL : 80 ath9k_hw_btcoex_bt_stomp(priv->ah, is_btscan ? ATH_BTCOEX_STOMP_ALL :
81 btcoex->bt_stomp_type); 81 btcoex->bt_stomp_type);
82 82
83 timer_period = is_btscan ? btcoex->btscan_no_stomp : 83 timer_period = is_btscan ? btcoex->btscan_no_stomp :
@@ -105,9 +105,9 @@ static void ath_btcoex_duty_cycle_work(struct work_struct *work)
105 "time slice work for bt and wlan\n"); 105 "time slice work for bt and wlan\n");
106 106
107 if (btcoex->bt_stomp_type == ATH_BTCOEX_STOMP_LOW || is_btscan) 107 if (btcoex->bt_stomp_type == ATH_BTCOEX_STOMP_LOW || is_btscan)
108 ath9k_cmn_btcoex_bt_stomp(common, ATH_BTCOEX_STOMP_NONE); 108 ath9k_hw_btcoex_bt_stomp(ah, ATH_BTCOEX_STOMP_NONE);
109 else if (btcoex->bt_stomp_type == ATH_BTCOEX_STOMP_ALL) 109 else if (btcoex->bt_stomp_type == ATH_BTCOEX_STOMP_ALL)
110 ath9k_cmn_btcoex_bt_stomp(common, ATH_BTCOEX_STOMP_LOW); 110 ath9k_hw_btcoex_bt_stomp(ah, ATH_BTCOEX_STOMP_LOW);
111} 111}
112 112
113void ath_htc_init_btcoex_work(struct ath9k_htc_priv *priv) 113void ath_htc_init_btcoex_work(struct ath9k_htc_priv *priv)