|
@@ -720,16 +720,15 @@ u32 rtl92ce_get_desc(u8 *p_desc, bool istx, u8 desc_name)
|
|
|
break;
|
|
|
}
|
|
|
} else {
|
|
|
- struct rx_desc_92c *pdesc = (struct rx_desc_92c *)p_desc;
|
|
|
switch (desc_name) {
|
|
|
case HW_DESC_OWN:
|
|
|
- ret = GET_RX_DESC_OWN(pdesc);
|
|
|
+ ret = GET_RX_DESC_OWN(p_desc);
|
|
|
break;
|
|
|
case HW_DESC_RXPKT_LEN:
|
|
|
- ret = GET_RX_DESC_PKT_LEN(pdesc);
|
|
|
+ ret = GET_RX_DESC_PKT_LEN(p_desc);
|
|
|
break;
|
|
|
case HW_DESC_RXBUFF_ADDR:
|
|
|
- ret = GET_RX_STATUS_DESC_BUFF_ADDR(pdesc);
|
|
|
+ ret = GET_RX_DESC_BUFF_ADDR(p_desc);
|
|
|
break;
|
|
|
default:
|
|
|
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)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+bool rtl92ce_is_tx_desc_closed(struct ieee80211_hw *hw,
|
|
|
+ u8 hw_queue, u16 index)
|
|
|
+{
|
|
|
+ struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
|
|
+ struct rtl8192_tx_ring *ring = &rtlpci->tx_ring[hw_queue];
|
|
|
+ u8 *entry = (u8 *)(&ring->desc[ring->idx]);
|
|
|
+ u8 own = (u8)rtl92ce_get_desc(entry, true, HW_DESC_OWN);
|
|
|
+
|
|
|
+ /*beacon packet will only use the first
|
|
|
+ *descriptor defautly,and the own may not
|
|
|
+ *be cleared by the hardware
|
|
|
+ */
|
|
|
+ if (own)
|
|
|
+ return false;
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
void rtl92ce_tx_polling(struct ieee80211_hw *hw, u8 hw_queue)
|
|
|
{
|
|
|
struct rtl_priv *rtlpriv = rtl_priv(hw);
|