aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/rtlwifi/rtl8192ce/trx.c')
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192ce/trx.c24
1 files changed, 20 insertions, 4 deletions
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);