lkml.org 
[lkml]   [2019]   [Dec]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 076/177] rtlwifi: rtl8192de: Fix missing callback that tests for hw release of buffer
    Date
    From: Larry Finger <Larry.Finger@lwfinger.net>

    commit 3155db7613edea8fb943624062baf1e4f9cfbfd6 upstream.

    In commit 38506ecefab9 ("rtlwifi: rtl_pci: Start modification for
    new drivers"), a callback needed to check if the hardware has released
    a buffer indicating that a DMA operation is completed was not added.

    Fixes: 38506ecefab9 ("rtlwifi: rtl_pci: Start modification for new drivers")
    Cc: Stable <stable@vger.kernel.org> # v3.18+
    Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c | 1 +
    drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c | 17 +++++++++++++++++
    drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.h | 2 ++
    3 files changed, 20 insertions(+)

    --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
    +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
    @@ -216,6 +216,7 @@ static struct rtl_hal_ops rtl8192de_hal_
    .led_control = rtl92de_led_control,
    .set_desc = rtl92de_set_desc,
    .get_desc = rtl92de_get_desc,
    + .is_tx_desc_closed = rtl92de_is_tx_desc_closed,
    .tx_polling = rtl92de_tx_polling,
    .enable_hw_sec = rtl92de_enable_hw_security_config,
    .set_key = rtl92de_set_key,
    --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c
    +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c
    @@ -823,6 +823,23 @@ u64 rtl92de_get_desc(struct ieee80211_hw
    return ret;
    }

    +bool rtl92de_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)rtl92de_get_desc(hw, entry, true, HW_DESC_OWN);
    +
    + /* a beacon packet will only use the first
    + * descriptor by defaut, and the own bit may not
    + * be cleared by the hardware
    + */
    + if (own)
    + return false;
    + return true;
    +}
    +
    void rtl92de_tx_polling(struct ieee80211_hw *hw, u8 hw_queue)
    {
    struct rtl_priv *rtlpriv = rtl_priv(hw);
    --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.h
    +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.h
    @@ -715,6 +715,8 @@ void rtl92de_set_desc(struct ieee80211_h
    u8 desc_name, u8 *val);
    u64 rtl92de_get_desc(struct ieee80211_hw *hw,
    u8 *p_desc, bool istx, u8 desc_name);
    +bool rtl92de_is_tx_desc_closed(struct ieee80211_hw *hw,
    + u8 hw_queue, u16 index);
    void rtl92de_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
    void rtl92de_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
    bool b_firstseg, bool b_lastseg,

    \
     
     \ /
      Last update: 2019-12-16 19:52    [W:3.173 / U:0.384 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site