summaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/652-0001-rtl8xxxu-Set-all-ieee80211_rx_status-values-in-parse.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/652-0001-rtl8xxxu-Set-all-ieee80211_rx_status-values-in-parse.patch')
-rw-r--r--package/kernel/mac80211/patches/652-0001-rtl8xxxu-Set-all-ieee80211_rx_status-values-in-parse.patch84
1 files changed, 84 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/652-0001-rtl8xxxu-Set-all-ieee80211_rx_status-values-in-parse.patch b/package/kernel/mac80211/patches/652-0001-rtl8xxxu-Set-all-ieee80211_rx_status-values-in-parse.patch
new file mode 100644
index 0000000000..ccbd11097d
--- /dev/null
+++ b/package/kernel/mac80211/patches/652-0001-rtl8xxxu-Set-all-ieee80211_rx_status-values-in-parse.patch
@@ -0,0 +1,84 @@
+From c14ee43b8ae2fe0777335daaf278b86a9f6691a1 Mon Sep 17 00:00:00 2001
+From: Jes Sorensen <Jes.Sorensen@redhat.com>
+Date: Mon, 27 Jun 2016 12:31:59 -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>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+ 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 {