diff options
author | John W. Linville <linville@tuxdriver.com> | 2012-02-29 14:53:21 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-02-29 14:53:21 -0500 |
commit | 8701ff0a88bcfc8c7dced3842919ad8d016a6835 (patch) | |
tree | ba71774b83e92d6507a398024a6d89b146181320 | |
parent | f4fb4b212d2668f831918023bc3ca451997faee6 (diff) | |
parent | 00f157b49780e194c38dafdf9df8e10b8a6a9626 (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.c | 25 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9002_hw.c | 19 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath/carl9170/tx.c | 9 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmsmac/ampdu.c | 6 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-sta.c | 10 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/cfg80211.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00dev.c | 3 | ||||
-rw-r--r-- | net/mac80211/iface.c | 3 | ||||
-rw-r--r-- | net/mac80211/rate.c | 2 |
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) |