diff options
Diffstat (limited to 'drivers/net/wireless/rtlwifi/rtl8192ce/trx.c')
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/trx.c | 24 |
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 | ||
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); |