aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2014-12-08 13:58:58 -0500
committerJohn W. Linville <linville@tuxdriver.com>2014-12-08 13:58:58 -0500
commit81c412600f946fc1c8731685cb6c6fae8002043a (patch)
tree87bbdf52615ec4ee6003b69e74ea330ca1427e46
parentfc99dd0829fd4d080b78141ade9a79bcc3dcd160 (diff)
parent87141db0848aa20c43d453f5545efc8f390d4372 (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
-rw-r--r--drivers/net/wireless/ath/ath9k/main.c9
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/of.c4
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/pcie.c2
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/usb.c6
-rw-r--r--drivers/net/wireless/rtlwifi/pci.c20
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192ce/hw.c3
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192ce/sw.c3
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192ce/trx.c24
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192ce/trx.h2
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8821ae/hw.c5
-rw-r--r--net/mac80211/rc80211_minstrel_ht.c15
11 files changed, 59 insertions, 34 deletions
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index cff070d7a325..9a72640237cb 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -1000,9 +1000,8 @@ void ath9k_calculate_iter_data(struct ath_softc *sc,
1000 struct ath_vif *avp; 1000 struct ath_vif *avp;
1001 1001
1002 /* 1002 /*
1003 * Pick the MAC address of the first interface as the new hardware 1003 * The hardware will use primary station addr together with the
1004 * MAC address. The hardware will use it together with the BSSID mask 1004 * BSSID mask when matching addresses.
1005 * when matching addresses.
1006 */ 1005 */
1007 memset(iter_data, 0, sizeof(*iter_data)); 1006 memset(iter_data, 0, sizeof(*iter_data));
1008 memset(&iter_data->mask, 0xff, ETH_ALEN); 1007 memset(&iter_data->mask, 0xff, ETH_ALEN);
@@ -1232,6 +1231,8 @@ static int ath9k_add_interface(struct ieee80211_hw *hw,
1232 list_add_tail(&avp->list, &avp->chanctx->vifs); 1231 list_add_tail(&avp->list, &avp->chanctx->vifs);
1233 } 1232 }
1234 1233
1234 ath9k_calculate_summary_state(sc, avp->chanctx);
1235
1235 ath9k_assign_hw_queues(hw, vif); 1236 ath9k_assign_hw_queues(hw, vif);
1236 1237
1237 an->sc = sc; 1238 an->sc = sc;
@@ -1301,6 +1302,8 @@ static void ath9k_remove_interface(struct ieee80211_hw *hw,
1301 1302
1302 ath_tx_node_cleanup(sc, &avp->mcast_node); 1303 ath_tx_node_cleanup(sc, &avp->mcast_node);
1303 1304
1305 ath9k_calculate_summary_state(sc, avp->chanctx);
1306
1304 mutex_unlock(&sc->mutex); 1307 mutex_unlock(&sc->mutex);
1305} 1308}
1306 1309
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/of.c b/drivers/net/wireless/brcm80211/brcmfmac/of.c
index eb3fce82a223..c824570ddea3 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/of.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/of.c
@@ -40,8 +40,8 @@ void brcmf_of_probe(struct brcmf_sdio_dev *sdiodev)
40 return; 40 return;
41 41
42 irq = irq_of_parse_and_map(np, 0); 42 irq = irq_of_parse_and_map(np, 0);
43 if (irq < 0) { 43 if (!irq) {
44 brcmf_err("interrupt could not be mapped: err=%d\n", irq); 44 brcmf_err("interrupt could not be mapped\n");
45 devm_kfree(dev, sdiodev->pdata); 45 devm_kfree(dev, sdiodev->pdata);
46 return; 46 return;
47 } 47 }
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/brcm80211/brcmfmac/pcie.c
index a66481976d5c..905991fdb7b1 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/pcie.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/pcie.c
@@ -19,10 +19,10 @@
19#include <linux/pci.h> 19#include <linux/pci.h>
20#include <linux/vmalloc.h> 20#include <linux/vmalloc.h>
21#include <linux/delay.h> 21#include <linux/delay.h>
22#include <linux/unaligned/access_ok.h>
23#include <linux/interrupt.h> 22#include <linux/interrupt.h>
24#include <linux/bcma/bcma.h> 23#include <linux/bcma/bcma.h>
25#include <linux/sched.h> 24#include <linux/sched.h>
25#include <asm/unaligned.h>
26 26
27#include <soc.h> 27#include <soc.h>
28#include <chipcommon.h> 28#include <chipcommon.h>
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/usb.c b/drivers/net/wireless/brcm80211/brcmfmac/usb.c
index 5265aa70b094..4572defc280f 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/usb.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/usb.c
@@ -738,10 +738,12 @@ static int brcmf_usb_dl_cmd(struct brcmf_usbdev_info *devinfo, u8 cmd,
738 goto finalize; 738 goto finalize;
739 } 739 }
740 740
741 if (!brcmf_usb_ioctl_resp_wait(devinfo)) 741 if (!brcmf_usb_ioctl_resp_wait(devinfo)) {
742 usb_kill_urb(devinfo->ctl_urb);
742 ret = -ETIMEDOUT; 743 ret = -ETIMEDOUT;
743 else 744 } else {
744 memcpy(buffer, tmpbuf, buflen); 745 memcpy(buffer, tmpbuf, buflen);
746 }
745 747
746finalize: 748finalize:
747 kfree(tmpbuf); 749 kfree(tmpbuf);
diff --git a/drivers/net/wireless/rtlwifi/pci.c b/drivers/net/wireless/rtlwifi/pci.c
index 61f5d36eca6a..846a2e6e34d8 100644
--- a/drivers/net/wireless/rtlwifi/pci.c
+++ b/drivers/net/wireless/rtlwifi/pci.c
@@ -2249,6 +2249,16 @@ int rtl_pci_probe(struct pci_dev *pdev,
2249 /*like read eeprom and so on */ 2249 /*like read eeprom and so on */
2250 rtlpriv->cfg->ops->read_eeprom_info(hw); 2250 rtlpriv->cfg->ops->read_eeprom_info(hw);
2251 2251
2252 if (rtlpriv->cfg->ops->init_sw_vars(hw)) {
2253 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "Can't init_sw_vars\n");
2254 err = -ENODEV;
2255 goto fail3;
2256 }
2257 rtlpriv->cfg->ops->init_sw_leds(hw);
2258
2259 /*aspm */
2260 rtl_pci_init_aspm(hw);
2261
2252 /* Init mac80211 sw */ 2262 /* Init mac80211 sw */
2253 err = rtl_init_core(hw); 2263 err = rtl_init_core(hw);
2254 if (err) { 2264 if (err) {
@@ -2264,16 +2274,6 @@ int rtl_pci_probe(struct pci_dev *pdev,
2264 goto fail3; 2274 goto fail3;
2265 } 2275 }
2266 2276
2267 if (rtlpriv->cfg->ops->init_sw_vars(hw)) {
2268 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "Can't init_sw_vars\n");
2269 err = -ENODEV;
2270 goto fail3;
2271 }
2272 rtlpriv->cfg->ops->init_sw_leds(hw);
2273
2274 /*aspm */
2275 rtl_pci_init_aspm(hw);
2276
2277 err = ieee80211_register_hw(hw); 2277 err = ieee80211_register_hw(hw);
2278 if (err) { 2278 if (err) {
2279 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, 2279 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/hw.c b/drivers/net/wireless/rtlwifi/rtl8192ce/hw.c
index 55357d69397a..d2ec5160bbf0 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192ce/hw.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192ce/hw.c
@@ -1287,6 +1287,7 @@ void rtl92ce_enable_interrupt(struct ieee80211_hw *hw)
1287 1287
1288 rtl_write_dword(rtlpriv, REG_HIMR, rtlpci->irq_mask[0] & 0xFFFFFFFF); 1288 rtl_write_dword(rtlpriv, REG_HIMR, rtlpci->irq_mask[0] & 0xFFFFFFFF);
1289 rtl_write_dword(rtlpriv, REG_HIMRE, rtlpci->irq_mask[1] & 0xFFFFFFFF); 1289 rtl_write_dword(rtlpriv, REG_HIMRE, rtlpci->irq_mask[1] & 0xFFFFFFFF);
1290 rtlpci->irq_enabled = true;
1290} 1291}
1291 1292
1292void rtl92ce_disable_interrupt(struct ieee80211_hw *hw) 1293void rtl92ce_disable_interrupt(struct ieee80211_hw *hw)
@@ -1296,7 +1297,7 @@ void rtl92ce_disable_interrupt(struct ieee80211_hw *hw)
1296 1297
1297 rtl_write_dword(rtlpriv, REG_HIMR, IMR8190_DISABLED); 1298 rtl_write_dword(rtlpriv, REG_HIMR, IMR8190_DISABLED);
1298 rtl_write_dword(rtlpriv, REG_HIMRE, IMR8190_DISABLED); 1299 rtl_write_dword(rtlpriv, REG_HIMRE, IMR8190_DISABLED);
1299 synchronize_irq(rtlpci->pdev->irq); 1300 rtlpci->irq_enabled = false;
1300} 1301}
1301 1302
1302static void _rtl92ce_poweroff_adapter(struct ieee80211_hw *hw) 1303static void _rtl92ce_poweroff_adapter(struct ieee80211_hw *hw)
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/sw.c b/drivers/net/wireless/rtlwifi/rtl8192ce/sw.c
index 46ea07605eb4..dd5aa089126a 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192ce/sw.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192ce/sw.c
@@ -228,6 +228,7 @@ static struct rtl_hal_ops rtl8192ce_hal_ops = {
228 .led_control = rtl92ce_led_control, 228 .led_control = rtl92ce_led_control,
229 .set_desc = rtl92ce_set_desc, 229 .set_desc = rtl92ce_set_desc,
230 .get_desc = rtl92ce_get_desc, 230 .get_desc = rtl92ce_get_desc,
231 .is_tx_desc_closed = rtl92ce_is_tx_desc_closed,
231 .tx_polling = rtl92ce_tx_polling, 232 .tx_polling = rtl92ce_tx_polling,
232 .enable_hw_sec = rtl92ce_enable_hw_security_config, 233 .enable_hw_sec = rtl92ce_enable_hw_security_config,
233 .set_key = rtl92ce_set_key, 234 .set_key = rtl92ce_set_key,
@@ -271,6 +272,8 @@ static struct rtl_hal_cfg rtl92ce_hal_cfg = {
271 .maps[MAC_RCR_ACRC32] = ACRC32, 272 .maps[MAC_RCR_ACRC32] = ACRC32,
272 .maps[MAC_RCR_ACF] = ACF, 273 .maps[MAC_RCR_ACF] = ACF,
273 .maps[MAC_RCR_AAP] = AAP, 274 .maps[MAC_RCR_AAP] = AAP,
275 .maps[MAC_HIMR] = REG_HIMR,
276 .maps[MAC_HIMRE] = REG_HIMRE,
274 277
275 .maps[EFUSE_TEST] = REG_EFUSE_TEST, 278 .maps[EFUSE_TEST] = REG_EFUSE_TEST,
276 .maps[EFUSE_CTRL] = REG_EFUSE_CTRL, 279 .maps[EFUSE_CTRL] = REG_EFUSE_CTRL,
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c b/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c
index dc3d20b17a26..e88dcd0e0af1 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c
@@ -720,16 +720,15 @@ u32 rtl92ce_get_desc(u8 *p_desc, bool istx, u8 desc_name)
720 break; 720 break;
721 } 721 }
722 } else { 722 } else {
723 struct rx_desc_92c *pdesc = (struct rx_desc_92c *)p_desc;
724 switch (desc_name) { 723 switch (desc_name) {
725 case HW_DESC_OWN: 724 case HW_DESC_OWN:
726 ret = GET_RX_DESC_OWN(pdesc); 725 ret = GET_RX_DESC_OWN(p_desc);
727 break; 726 break;
728 case HW_DESC_RXPKT_LEN: 727 case HW_DESC_RXPKT_LEN:
729 ret = GET_RX_DESC_PKT_LEN(pdesc); 728 ret = GET_RX_DESC_PKT_LEN(p_desc);
730 break; 729 break;
731 case HW_DESC_RXBUFF_ADDR: 730 case HW_DESC_RXBUFF_ADDR:
732 ret = GET_RX_STATUS_DESC_BUFF_ADDR(pdesc); 731 ret = GET_RX_DESC_BUFF_ADDR(p_desc);
733 break; 732 break;
734 default: 733 default:
735 RT_ASSERT(false, "ERR rxdesc :%d not process\n", 734 RT_ASSERT(false, "ERR rxdesc :%d not process\n",
@@ -740,6 +739,23 @@ u32 rtl92ce_get_desc(u8 *p_desc, bool istx, u8 desc_name)
740 return ret; 739 return ret;
741} 740}
742 741
742bool rtl92ce_is_tx_desc_closed(struct ieee80211_hw *hw,
743 u8 hw_queue, u16 index)
744{
745 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
746 struct rtl8192_tx_ring *ring = &rtlpci->tx_ring[hw_queue];
747 u8 *entry = (u8 *)(&ring->desc[ring->idx]);
748 u8 own = (u8)rtl92ce_get_desc(entry, true, HW_DESC_OWN);
749
750 /*beacon packet will only use the first
751 *descriptor defautly,and the own may not
752 *be cleared by the hardware
753 */
754 if (own)
755 return false;
756 return true;
757}
758
743void rtl92ce_tx_polling(struct ieee80211_hw *hw, u8 hw_queue) 759void rtl92ce_tx_polling(struct ieee80211_hw *hw, u8 hw_queue)
744{ 760{
745 struct rtl_priv *rtlpriv = rtl_priv(hw); 761 struct rtl_priv *rtlpriv = rtl_priv(hw);
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/trx.h b/drivers/net/wireless/rtlwifi/rtl8192ce/trx.h
index 9a39ec4204dd..4bec4b07e3e0 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192ce/trx.h
+++ b/drivers/net/wireless/rtlwifi/rtl8192ce/trx.h
@@ -723,6 +723,8 @@ bool rtl92ce_rx_query_desc(struct ieee80211_hw *hw,
723void rtl92ce_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx, 723void rtl92ce_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
724 u8 desc_name, u8 *val); 724 u8 desc_name, u8 *val);
725u32 rtl92ce_get_desc(u8 *pdesc, bool istx, u8 desc_name); 725u32 rtl92ce_get_desc(u8 *pdesc, bool istx, u8 desc_name);
726bool rtl92ce_is_tx_desc_closed(struct ieee80211_hw *hw,
727 u8 hw_queue, u16 index);
726void rtl92ce_tx_polling(struct ieee80211_hw *hw, u8 hw_queue); 728void rtl92ce_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
727void rtl92ce_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, 729void rtl92ce_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
728 bool b_firstseg, bool b_lastseg, 730 bool b_firstseg, bool b_lastseg,
diff --git a/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c b/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c
index 310d3163dc5b..8ec8200002c7 100644
--- a/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c
+++ b/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c
@@ -3672,8 +3672,9 @@ static void rtl8821ae_update_hal_rate_mask(struct ieee80211_hw *hw,
3672 mac->opmode == NL80211_IFTYPE_ADHOC) 3672 mac->opmode == NL80211_IFTYPE_ADHOC)
3673 macid = sta->aid + 1; 3673 macid = sta->aid + 1;
3674 if (wirelessmode == WIRELESS_MODE_N_5G || 3674 if (wirelessmode == WIRELESS_MODE_N_5G ||
3675 wirelessmode == WIRELESS_MODE_AC_5G) 3675 wirelessmode == WIRELESS_MODE_AC_5G ||
3676 ratr_bitmap = sta->supp_rates[NL80211_BAND_5GHZ]; 3676 wirelessmode == WIRELESS_MODE_A)
3677 ratr_bitmap = sta->supp_rates[NL80211_BAND_5GHZ] << 4;
3677 else 3678 else
3678 ratr_bitmap = sta->supp_rates[NL80211_BAND_2GHZ]; 3679 ratr_bitmap = sta->supp_rates[NL80211_BAND_2GHZ];
3679 3680
diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c
index b52996aca4f1..80452cfd2dc5 100644
--- a/net/mac80211/rc80211_minstrel_ht.c
+++ b/net/mac80211/rc80211_minstrel_ht.c
@@ -394,19 +394,16 @@ minstrel_ht_sort_best_tp_rates(struct minstrel_ht_sta *mi, u16 index,
394 cur_thr = mi->groups[cur_group].rates[cur_idx].cur_tp; 394 cur_thr = mi->groups[cur_group].rates[cur_idx].cur_tp;
395 cur_prob = mi->groups[cur_group].rates[cur_idx].probability; 395 cur_prob = mi->groups[cur_group].rates[cur_idx].probability;
396 396
397 tmp_group = tp_list[j - 1] / MCS_GROUP_RATES; 397 do {
398 tmp_idx = tp_list[j - 1] % MCS_GROUP_RATES;
399 tmp_thr = mi->groups[tmp_group].rates[tmp_idx].cur_tp;
400 tmp_prob = mi->groups[tmp_group].rates[tmp_idx].probability;
401
402 while (j > 0 && (cur_thr > tmp_thr ||
403 (cur_thr == tmp_thr && cur_prob > tmp_prob))) {
404 j--;
405 tmp_group = tp_list[j - 1] / MCS_GROUP_RATES; 398 tmp_group = tp_list[j - 1] / MCS_GROUP_RATES;
406 tmp_idx = tp_list[j - 1] % MCS_GROUP_RATES; 399 tmp_idx = tp_list[j - 1] % MCS_GROUP_RATES;
407 tmp_thr = mi->groups[tmp_group].rates[tmp_idx].cur_tp; 400 tmp_thr = mi->groups[tmp_group].rates[tmp_idx].cur_tp;
408 tmp_prob = mi->groups[tmp_group].rates[tmp_idx].probability; 401 tmp_prob = mi->groups[tmp_group].rates[tmp_idx].probability;
409 } 402 if (cur_thr < tmp_thr ||
403 (cur_thr == tmp_thr && cur_prob <= tmp_prob))
404 break;
405 j--;
406 } while (j > 0);
410 407
411 if (j < MAX_THR_RATES - 1) { 408 if (j < MAX_THR_RATES - 1) {
412 memmove(&tp_list[j + 1], &tp_list[j], (sizeof(*tp_list) * 409 memmove(&tp_list[j + 1], &tp_list[j], (sizeof(*tp_list) *