diff options
author | John W. Linville <linville@tuxdriver.com> | 2014-12-08 13:58:58 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2014-12-08 13:58:58 -0500 |
commit | 81c412600f946fc1c8731685cb6c6fae8002043a (patch) | |
tree | 87bbdf52615ec4ee6003b69e74ea330ca1427e46 | |
parent | fc99dd0829fd4d080b78141ade9a79bcc3dcd160 (diff) | |
parent | 87141db0848aa20c43d453f5545efc8f390d4372 (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.c | 9 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/of.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/pcie.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/usb.c | 6 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/pci.c | 20 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/hw.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/sw.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/trx.c | 24 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/trx.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8821ae/hw.c | 5 | ||||
-rw-r--r-- | net/mac80211/rc80211_minstrel_ht.c | 15 |
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 | ||
746 | finalize: | 748 | finalize: |
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 | ||
1292 | void rtl92ce_disable_interrupt(struct ieee80211_hw *hw) | 1293 | void 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 | ||
1302 | static void _rtl92ce_poweroff_adapter(struct ieee80211_hw *hw) | 1303 | static 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 | ||
742 | bool 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 | |||
743 | void rtl92ce_tx_polling(struct ieee80211_hw *hw, u8 hw_queue) | 759 | void 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, | |||
723 | void rtl92ce_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx, | 723 | void rtl92ce_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx, |
724 | u8 desc_name, u8 *val); | 724 | u8 desc_name, u8 *val); |
725 | u32 rtl92ce_get_desc(u8 *pdesc, bool istx, u8 desc_name); | 725 | u32 rtl92ce_get_desc(u8 *pdesc, bool istx, u8 desc_name); |
726 | bool rtl92ce_is_tx_desc_closed(struct ieee80211_hw *hw, | ||
727 | u8 hw_queue, u16 index); | ||
726 | void rtl92ce_tx_polling(struct ieee80211_hw *hw, u8 hw_queue); | 728 | void rtl92ce_tx_polling(struct ieee80211_hw *hw, u8 hw_queue); |
727 | void rtl92ce_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, | 729 | void 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) * |