092e77d948
Patches by Jes Sorensen: https://git.kernel.org/cgit/linux/kernel/git/jes/linux.git/ Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
83 lines
2.9 KiB
Diff
83 lines
2.9 KiB
Diff
From be5bf7d23ac03bcfa2e6875248f7d45165589d4f Mon Sep 17 00:00:00 2001
|
|
From: Jes Sorensen <Jes.Sorensen@redhat.com>
|
|
Date: Mon, 16 May 2016 21:57:25 -0400
|
|
Subject: [PATCH] rtl8xxxu: Set all ieee80211_rx_status values in
|
|
parse_rx_desc()
|
|
|
|
This needs to be handled locally in the parse_rx_desc() function in
|
|
order to be able to handle aggregated packets in the future.
|
|
|
|
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
|
|
---
|
|
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 17 ++++++++++++-----
|
|
1 file changed, 12 insertions(+), 5 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
|
|
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
|
|
@@ -5048,6 +5048,7 @@ static void rtl8xxxu_rx_urb_work(struct
|
|
int rtl8xxxu_parse_rxdesc16(struct rtl8xxxu_priv *priv, struct sk_buff *skb,
|
|
struct ieee80211_rx_status *rx_status)
|
|
{
|
|
+ struct ieee80211_hw *hw = priv->hw;
|
|
struct rtl8xxxu_rxdesc16 *rx_desc =
|
|
(struct rtl8xxxu_rxdesc16 *)skb->data;
|
|
struct rtl8723au_phy_stats *phy_stats;
|
|
@@ -5059,6 +5060,8 @@ int rtl8xxxu_parse_rxdesc16(struct rtl8x
|
|
for (i = 0; i < (sizeof(struct rtl8xxxu_rxdesc16) / sizeof(u32)); i++)
|
|
_rx_desc[i] = le32_to_cpu(_rx_desc_le[i]);
|
|
|
|
+ memset(rx_status, 0, sizeof(struct ieee80211_rx_status));
|
|
+
|
|
skb_pull(skb, sizeof(struct rtl8xxxu_rxdesc16));
|
|
|
|
phy_stats = (struct rtl8723au_phy_stats *)skb->data;
|
|
@@ -5088,12 +5091,16 @@ int rtl8xxxu_parse_rxdesc16(struct rtl8x
|
|
rx_status->rate_idx = rx_desc->rxmcs;
|
|
}
|
|
|
|
+ rx_status->freq = hw->conf.chandef.chan->center_freq;
|
|
+ rx_status->band = hw->conf.chandef.chan->band;
|
|
+
|
|
return RX_TYPE_DATA_PKT;
|
|
}
|
|
|
|
int rtl8xxxu_parse_rxdesc24(struct rtl8xxxu_priv *priv, struct sk_buff *skb,
|
|
struct ieee80211_rx_status *rx_status)
|
|
{
|
|
+ struct ieee80211_hw *hw = priv->hw;
|
|
struct rtl8xxxu_rxdesc24 *rx_desc =
|
|
(struct rtl8xxxu_rxdesc24 *)skb->data;
|
|
struct rtl8723au_phy_stats *phy_stats;
|
|
@@ -5105,6 +5112,8 @@ int rtl8xxxu_parse_rxdesc24(struct rtl8x
|
|
for (i = 0; i < (sizeof(struct rtl8xxxu_rxdesc24) / sizeof(u32)); i++)
|
|
_rx_desc[i] = le32_to_cpu(_rx_desc_le[i]);
|
|
|
|
+ memset(rx_status, 0, sizeof(struct ieee80211_rx_status));
|
|
+
|
|
skb_pull(skb, sizeof(struct rtl8xxxu_rxdesc24));
|
|
|
|
phy_stats = (struct rtl8723au_phy_stats *)skb->data;
|
|
@@ -5140,6 +5149,9 @@ int rtl8xxxu_parse_rxdesc24(struct rtl8x
|
|
rx_status->rate_idx = rx_desc->rxmcs;
|
|
}
|
|
|
|
+ rx_status->freq = hw->conf.chandef.chan->center_freq;
|
|
+ rx_status->band = hw->conf.chandef.chan->band;
|
|
+
|
|
return RX_TYPE_DATA_PKT;
|
|
}
|
|
|
|
@@ -5202,13 +5214,8 @@ static void rtl8xxxu_rx_complete(struct
|
|
skb_put(skb, urb->actual_length);
|
|
|
|
if (urb->status == 0) {
|
|
- memset(rx_status, 0, sizeof(struct ieee80211_rx_status));
|
|
-
|
|
rx_type = priv->fops->parse_rx_desc(priv, skb, rx_status);
|
|
|
|
- rx_status->freq = hw->conf.chandef.chan->center_freq;
|
|
- rx_status->band = hw->conf.chandef.chan->band;
|
|
-
|
|
if (rx_type == RX_TYPE_DATA_PKT)
|
|
ieee80211_rx_irqsafe(hw, skb);
|
|
else {
|