diff options
-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 |
4 files changed, 27 insertions, 5 deletions
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, |