aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2012-02-29 14:53:21 -0500
committerJohn W. Linville <linville@tuxdriver.com>2012-02-29 14:53:21 -0500
commit8701ff0a88bcfc8c7dced3842919ad8d016a6835 (patch)
treeba71774b83e92d6507a398024a6d89b146181320
parentf4fb4b212d2668f831918023bc3ca451997faee6 (diff)
parent00f157b49780e194c38dafdf9df8e10b8a6a9626 (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
-rw-r--r--drivers/net/wireless/ath/ath9k/ar5008_phy.c25
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9002_hw.c19
-rw-r--r--drivers/net/wireless/ath/ath9k/hw.h1
-rw-r--r--drivers/net/wireless/ath/carl9170/tx.c9
-rw-r--r--drivers/net/wireless/brcm80211/brcmsmac/ampdu.c6
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-sta.c10
-rw-r--r--drivers/net/wireless/mwifiex/cfg80211.c1
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00dev.c3
-rw-r--r--net/mac80211/iface.c3
-rw-r--r--net/mac80211/rate.c2
10 files changed, 45 insertions, 34 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
index f901a17f76ba..86a891f93fc9 100644
--- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
@@ -489,8 +489,6 @@ static int ar5008_hw_rf_alloc_ext_banks(struct ath_hw *ah)
489 ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows); 489 ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows);
490 ATH_ALLOC_BANK(ah->analogBank6TPCData, ah->iniBank6TPC.ia_rows); 490 ATH_ALLOC_BANK(ah->analogBank6TPCData, ah->iniBank6TPC.ia_rows);
491 ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows); 491 ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows);
492 ATH_ALLOC_BANK(ah->addac5416_21,
493 ah->iniAddac.ia_rows * ah->iniAddac.ia_columns);
494 ATH_ALLOC_BANK(ah->bank6Temp, ah->iniBank6.ia_rows); 492 ATH_ALLOC_BANK(ah->bank6Temp, ah->iniBank6.ia_rows);
495 493
496 return 0; 494 return 0;
@@ -519,7 +517,6 @@ static void ar5008_hw_rf_free_ext_banks(struct ath_hw *ah)
519 ATH_FREE_BANK(ah->analogBank6Data); 517 ATH_FREE_BANK(ah->analogBank6Data);
520 ATH_FREE_BANK(ah->analogBank6TPCData); 518 ATH_FREE_BANK(ah->analogBank6TPCData);
521 ATH_FREE_BANK(ah->analogBank7Data); 519 ATH_FREE_BANK(ah->analogBank7Data);
522 ATH_FREE_BANK(ah->addac5416_21);
523 ATH_FREE_BANK(ah->bank6Temp); 520 ATH_FREE_BANK(ah->bank6Temp);
524 521
525#undef ATH_FREE_BANK 522#undef ATH_FREE_BANK
@@ -805,27 +802,7 @@ static int ar5008_hw_process_ini(struct ath_hw *ah,
805 if (ah->eep_ops->set_addac) 802 if (ah->eep_ops->set_addac)
806 ah->eep_ops->set_addac(ah, chan); 803 ah->eep_ops->set_addac(ah, chan);
807 804
808 if (AR_SREV_5416_22_OR_LATER(ah)) { 805 REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites);
809 REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites);
810 } else {
811 struct ar5416IniArray temp;
812 u32 addacSize =
813 sizeof(u32) * ah->iniAddac.ia_rows *
814 ah->iniAddac.ia_columns;
815
816 /* For AR5416 2.0/2.1 */
817 memcpy(ah->addac5416_21,
818 ah->iniAddac.ia_array, addacSize);
819
820 /* override CLKDRV value at [row, column] = [31, 1] */
821 (ah->addac5416_21)[31 * ah->iniAddac.ia_columns + 1] = 0;
822
823 temp.ia_array = ah->addac5416_21;
824 temp.ia_columns = ah->iniAddac.ia_columns;
825 temp.ia_rows = ah->iniAddac.ia_rows;
826 REG_WRITE_ARRAY(&temp, 1, regWrites);
827 }
828
829 REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_INTERNAL_ADDAC); 806 REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_INTERNAL_ADDAC);
830 807
831 ENABLE_REGWRITE_BUFFER(ah); 808 ENABLE_REGWRITE_BUFFER(ah);
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_hw.c b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
index d48f5fe8af7f..e3f268900763 100644
--- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c
+++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
@@ -141,6 +141,25 @@ static void ar9002_hw_init_mode_regs(struct ath_hw *ah)
141 INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC_9100, 141 INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC_9100,
142 ARRAY_SIZE(ar5416Bank6TPC_9100), 3); 142 ARRAY_SIZE(ar5416Bank6TPC_9100), 3);
143 } 143 }
144
145 /* iniAddac needs to be modified for these chips */
146 if (AR_SREV_9160(ah) || !AR_SREV_5416_22_OR_LATER(ah)) {
147 struct ar5416IniArray *addac = &ah->iniAddac;
148 u32 size = sizeof(u32) * addac->ia_rows * addac->ia_columns;
149 u32 *data;
150
151 data = kmalloc(size, GFP_KERNEL);
152 if (!data)
153 return;
154
155 memcpy(data, addac->ia_array, size);
156 addac->ia_array = data;
157
158 if (!AR_SREV_5416_22_OR_LATER(ah)) {
159 /* override CLKDRV value */
160 INI_RA(addac, 31,1) = 0;
161 }
162 }
144} 163}
145 164
146/* Support for Japan ch.14 (2484) spread */ 165/* Support for Japan ch.14 (2484) spread */
diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h
index c785303eb3ad..1707137e0a30 100644
--- a/drivers/net/wireless/ath/ath9k/hw.h
+++ b/drivers/net/wireless/ath/ath9k/hw.h
@@ -781,7 +781,6 @@ struct ath_hw {
781 u32 *analogBank6Data; 781 u32 *analogBank6Data;
782 u32 *analogBank6TPCData; 782 u32 *analogBank6TPCData;
783 u32 *analogBank7Data; 783 u32 *analogBank7Data;
784 u32 *addac5416_21;
785 u32 *bank6Temp; 784 u32 *bank6Temp;
786 785
787 u8 txpower_limit; 786 u8 txpower_limit;
diff --git a/drivers/net/wireless/ath/carl9170/tx.c b/drivers/net/wireless/ath/carl9170/tx.c
index 771e1a9294c5..0f00721995ef 100644
--- a/drivers/net/wireless/ath/carl9170/tx.c
+++ b/drivers/net/wireless/ath/carl9170/tx.c
@@ -1236,6 +1236,7 @@ static bool carl9170_tx_ps_drop(struct ar9170 *ar, struct sk_buff *skb)
1236{ 1236{
1237 struct ieee80211_sta *sta; 1237 struct ieee80211_sta *sta;
1238 struct carl9170_sta_info *sta_info; 1238 struct carl9170_sta_info *sta_info;
1239 struct ieee80211_tx_info *tx_info;
1239 1240
1240 rcu_read_lock(); 1241 rcu_read_lock();
1241 sta = __carl9170_get_tx_sta(ar, skb); 1242 sta = __carl9170_get_tx_sta(ar, skb);
@@ -1243,16 +1244,18 @@ static bool carl9170_tx_ps_drop(struct ar9170 *ar, struct sk_buff *skb)
1243 goto out_rcu; 1244 goto out_rcu;
1244 1245
1245 sta_info = (void *) sta->drv_priv; 1246 sta_info = (void *) sta->drv_priv;
1246 if (unlikely(sta_info->sleeping)) { 1247 tx_info = IEEE80211_SKB_CB(skb);
1247 struct ieee80211_tx_info *tx_info;
1248 1248
1249 if (unlikely(sta_info->sleeping) &&
1250 !(tx_info->flags & (IEEE80211_TX_CTL_POLL_RESPONSE |
1251 IEEE80211_TX_CTL_CLEAR_PS_FILT))) {
1249 rcu_read_unlock(); 1252 rcu_read_unlock();
1250 1253
1251 tx_info = IEEE80211_SKB_CB(skb);
1252 if (tx_info->flags & IEEE80211_TX_CTL_AMPDU) 1254 if (tx_info->flags & IEEE80211_TX_CTL_AMPDU)
1253 atomic_dec(&ar->tx_ampdu_upload); 1255 atomic_dec(&ar->tx_ampdu_upload);
1254 1256
1255 tx_info->flags |= IEEE80211_TX_STAT_TX_FILTERED; 1257 tx_info->flags |= IEEE80211_TX_STAT_TX_FILTERED;
1258 carl9170_release_dev_space(ar, skb);
1256 carl9170_tx_status(ar, skb, false); 1259 carl9170_tx_status(ar, skb, false);
1257 return true; 1260 return true;
1258 } 1261 }
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/ampdu.c b/drivers/net/wireless/brcm80211/brcmsmac/ampdu.c
index c1ce831b9bf4..dbee69620a90 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/ampdu.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/ampdu.c
@@ -1070,9 +1070,9 @@ brcms_c_ampdu_dotxstatus_complete(struct ampdu_info *ampdu, struct scb *scb,
1070 IEEE80211_TX_STAT_AMPDU_NO_BACK; 1070 IEEE80211_TX_STAT_AMPDU_NO_BACK;
1071 skb_pull(p, D11_PHY_HDR_LEN); 1071 skb_pull(p, D11_PHY_HDR_LEN);
1072 skb_pull(p, D11_TXH_LEN); 1072 skb_pull(p, D11_TXH_LEN);
1073 wiphy_err(wiphy, "%s: BA Timeout, seq %d, in_" 1073 BCMMSG(wiphy,
1074 "transit %d\n", "AMPDU status", seq, 1074 "BA Timeout, seq %d, in_transit %d\n",
1075 ini->tx_in_transit); 1075 seq, ini->tx_in_transit);
1076 ieee80211_tx_status_irqsafe(wlc->pub->ieee_hw, 1076 ieee80211_tx_status_irqsafe(wlc->pub->ieee_hw,
1077 p); 1077 p);
1078 } 1078 }
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
index d6aab00272b9..f1298cd6a19a 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
@@ -1190,6 +1190,7 @@ int iwl_remove_dynamic_key(struct iwl_priv *priv,
1190 unsigned long flags; 1190 unsigned long flags;
1191 struct iwl_addsta_cmd sta_cmd; 1191 struct iwl_addsta_cmd sta_cmd;
1192 u8 sta_id = iwlagn_key_sta_id(priv, ctx->vif, sta); 1192 u8 sta_id = iwlagn_key_sta_id(priv, ctx->vif, sta);
1193 __le16 key_flags;
1193 1194
1194 /* if station isn't there, neither is the key */ 1195 /* if station isn't there, neither is the key */
1195 if (sta_id == IWL_INVALID_STATION) 1196 if (sta_id == IWL_INVALID_STATION)
@@ -1215,7 +1216,14 @@ int iwl_remove_dynamic_key(struct iwl_priv *priv,
1215 IWL_ERR(priv, "offset %d not used in uCode key table.\n", 1216 IWL_ERR(priv, "offset %d not used in uCode key table.\n",
1216 keyconf->hw_key_idx); 1217 keyconf->hw_key_idx);
1217 1218
1218 sta_cmd.key.key_flags = STA_KEY_FLG_NO_ENC | STA_KEY_FLG_INVALID; 1219 key_flags = cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS);
1220 key_flags |= STA_KEY_FLG_MAP_KEY_MSK | STA_KEY_FLG_NO_ENC |
1221 STA_KEY_FLG_INVALID;
1222
1223 if (!(keyconf->flags & IEEE80211_KEY_FLAG_PAIRWISE))
1224 key_flags |= STA_KEY_MULTICAST_MSK;
1225
1226 sta_cmd.key.key_flags = key_flags;
1219 sta_cmd.key.key_offset = WEP_INVALID_OFFSET; 1227 sta_cmd.key.key_offset = WEP_INVALID_OFFSET;
1220 sta_cmd.sta.modify_mask = STA_MODIFY_KEY_MASK; 1228 sta_cmd.sta.modify_mask = STA_MODIFY_KEY_MASK;
1221 sta_cmd.mode = STA_CONTROL_MODIFY_MSK; 1229 sta_cmd.mode = STA_CONTROL_MODIFY_MSK;
diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c
index 503717c59358..a460fb0cc503 100644
--- a/drivers/net/wireless/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/mwifiex/cfg80211.c
@@ -872,6 +872,7 @@ mwifiex_cfg80211_assoc(struct mwifiex_private *priv, size_t ssid_len, u8 *ssid,
872 priv->sec_info.wpa_enabled = false; 872 priv->sec_info.wpa_enabled = false;
873 priv->sec_info.wpa2_enabled = false; 873 priv->sec_info.wpa2_enabled = false;
874 priv->wep_key_curr_index = 0; 874 priv->wep_key_curr_index = 0;
875 priv->sec_info.encryption_mode = 0;
875 ret = mwifiex_set_encode(priv, NULL, 0, 0, 1); 876 ret = mwifiex_set_encode(priv, NULL, 0, 0, 1);
876 877
877 if (mode == NL80211_IFTYPE_ADHOC) { 878 if (mode == NL80211_IFTYPE_ADHOC) {
diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c
index dfe485a872f6..49a51b4195ef 100644
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
@@ -1236,7 +1236,8 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev)
1236 cancel_work_sync(&rt2x00dev->rxdone_work); 1236 cancel_work_sync(&rt2x00dev->rxdone_work);
1237 cancel_work_sync(&rt2x00dev->txdone_work); 1237 cancel_work_sync(&rt2x00dev->txdone_work);
1238 } 1238 }
1239 destroy_workqueue(rt2x00dev->workqueue); 1239 if (rt2x00dev->workqueue)
1240 destroy_workqueue(rt2x00dev->workqueue);
1240 1241
1241 /* 1242 /*
1242 * Free the tx status fifo. 1243 * Free the tx status fifo.
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index 60b240ce709e..620ca8d2ad42 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -1344,6 +1344,9 @@ u32 __ieee80211_recalc_idle(struct ieee80211_local *local)
1344 hw_roc = true; 1344 hw_roc = true;
1345 1345
1346 list_for_each_entry(sdata, &local->interfaces, list) { 1346 list_for_each_entry(sdata, &local->interfaces, list) {
1347 if (sdata->vif.type == NL80211_IFTYPE_MONITOR ||
1348 sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
1349 continue;
1347 if (sdata->old_idle == sdata->vif.bss_conf.idle) 1350 if (sdata->old_idle == sdata->vif.bss_conf.idle)
1348 continue; 1351 continue;
1349 if (!ieee80211_sdata_running(sdata)) 1352 if (!ieee80211_sdata_running(sdata))
diff --git a/net/mac80211/rate.c b/net/mac80211/rate.c
index 111fba38be82..b4f7600a3e36 100644
--- a/net/mac80211/rate.c
+++ b/net/mac80211/rate.c
@@ -447,7 +447,7 @@ void rate_control_get_rate(struct ieee80211_sub_if_data *sdata,
447 for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) { 447 for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) {
448 info->control.rates[i].idx = -1; 448 info->control.rates[i].idx = -1;
449 info->control.rates[i].flags = 0; 449 info->control.rates[i].flags = 0;
450 info->control.rates[i].count = 1; 450 info->control.rates[i].count = 0;
451 } 451 }
452 452
453 if (sdata->local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL) 453 if (sdata->local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL)