aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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
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
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,