|
@@ -549,7 +549,6 @@ static u16 get_desc_addr_fr_q_idx(u16 queue_index)
|
|
|
|
|
|
u16 rtl92ee_get_available_desc(struct ieee80211_hw *hw, u8 q_idx)
|
|
|
{
|
|
|
- struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
|
|
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
|
|
u16 point_diff = 0;
|
|
|
u16 current_tx_read_point = 0, current_tx_write_point = 0;
|
|
@@ -564,7 +563,6 @@ u16 rtl92ee_get_available_desc(struct ieee80211_hw *hw, u8 q_idx)
|
|
|
current_tx_write_point,
|
|
|
TX_DESC_NUM_92E);
|
|
|
|
|
|
- rtlpci->tx_ring[q_idx].avl_desc = point_diff;
|
|
|
return point_diff;
|
|
|
}
|
|
|
|
|
@@ -909,10 +907,6 @@ void rtl92ee_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
|
|
|
u8 desc_name, u8 *val)
|
|
|
{
|
|
|
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
|
|
- u16 cur_tx_rp = 0;
|
|
|
- u16 cur_tx_wp = 0;
|
|
|
- static bool over_run;
|
|
|
- u32 tmp = 0;
|
|
|
u8 q_idx = *val;
|
|
|
bool dma64 = rtlpriv->cfg->mod_params->dma64;
|
|
|
|
|
@@ -933,38 +927,12 @@ void rtl92ee_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ /* make sure tx desc is available by caller */
|
|
|
ring->cur_tx_wp = ((ring->cur_tx_wp + 1) % max_tx_desc);
|
|
|
|
|
|
- if (over_run) {
|
|
|
- ring->cur_tx_wp = 0;
|
|
|
- over_run = false;
|
|
|
- }
|
|
|
- if (ring->avl_desc > 1) {
|
|
|
- ring->avl_desc--;
|
|
|
-
|
|
|
- rtl_write_word(rtlpriv,
|
|
|
- get_desc_addr_fr_q_idx(q_idx),
|
|
|
- ring->cur_tx_wp);
|
|
|
- }
|
|
|
-
|
|
|
- if (ring->avl_desc < (max_tx_desc - 15)) {
|
|
|
- u16 point_diff = 0;
|
|
|
-
|
|
|
- tmp =
|
|
|
- rtl_read_dword(rtlpriv,
|
|
|
- get_desc_addr_fr_q_idx(q_idx));
|
|
|
- cur_tx_rp = (u16)((tmp >> 16) & 0x0fff);
|
|
|
- cur_tx_wp = (u16)(tmp & 0x0fff);
|
|
|
-
|
|
|
- ring->cur_tx_wp = cur_tx_wp;
|
|
|
- ring->cur_tx_rp = cur_tx_rp;
|
|
|
- point_diff = ((cur_tx_rp > cur_tx_wp) ?
|
|
|
- (cur_tx_rp - cur_tx_wp) :
|
|
|
- (TX_DESC_NUM_92E - 1 -
|
|
|
- cur_tx_wp + cur_tx_rp));
|
|
|
-
|
|
|
- ring->avl_desc = point_diff;
|
|
|
- }
|
|
|
+ rtl_write_word(rtlpriv,
|
|
|
+ get_desc_addr_fr_q_idx(q_idx),
|
|
|
+ ring->cur_tx_wp);
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
@@ -1046,13 +1014,12 @@ bool rtl92ee_is_tx_desc_closed(struct ieee80211_hw *hw, u8 hw_queue, u16 index)
|
|
|
{
|
|
|
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
|
|
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
|
|
- u16 read_point, write_point, available_desc_num;
|
|
|
+ u16 read_point, write_point;
|
|
|
bool ret = false;
|
|
|
static u8 stop_report_cnt;
|
|
|
struct rtl8192_tx_ring *ring = &rtlpci->tx_ring[hw_queue];
|
|
|
|
|
|
{
|
|
|
- u16 point_diff = 0;
|
|
|
u16 cur_tx_rp, cur_tx_wp;
|
|
|
u32 tmpu32 = 0;
|
|
|
|
|
@@ -1062,18 +1029,12 @@ bool rtl92ee_is_tx_desc_closed(struct ieee80211_hw *hw, u8 hw_queue, u16 index)
|
|
|
cur_tx_rp = (u16)((tmpu32 >> 16) & 0x0fff);
|
|
|
cur_tx_wp = (u16)(tmpu32 & 0x0fff);
|
|
|
|
|
|
- ring->cur_tx_wp = cur_tx_wp;
|
|
|
+ /* don't need to update ring->cur_tx_wp */
|
|
|
ring->cur_tx_rp = cur_tx_rp;
|
|
|
- point_diff = ((cur_tx_rp > cur_tx_wp) ?
|
|
|
- (cur_tx_rp - cur_tx_wp) :
|
|
|
- (TX_DESC_NUM_92E - cur_tx_wp + cur_tx_rp));
|
|
|
-
|
|
|
- ring->avl_desc = point_diff;
|
|
|
}
|
|
|
|
|
|
read_point = ring->cur_tx_rp;
|
|
|
write_point = ring->cur_tx_wp;
|
|
|
- available_desc_num = ring->avl_desc;
|
|
|
|
|
|
if (write_point > read_point) {
|
|
|
if (index < write_point && index >= read_point)
|