package/devel/binutils: Update to 2.27
[openwrt/staging/lynxis/omap.git] / package / kernel / mac80211 / patches / 652-0001-rtl8xxxu-Set-all-ieee80211_rx_status-values-in-parse.patch
1 From c14ee43b8ae2fe0777335daaf278b86a9f6691a1 Mon Sep 17 00:00:00 2001
2 From: Jes Sorensen <Jes.Sorensen@redhat.com>
3 Date: Mon, 27 Jun 2016 12:31:59 -0400
4 Subject: [PATCH] rtl8xxxu: Set all ieee80211_rx_status values in
5 parse_rx_desc()
6
7 This needs to be handled locally in the parse_rx_desc() function in
8 order to be able to handle aggregated packets in the future.
9
10 Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
11 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
12 ---
13 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 17 ++++++++++++-----
14 1 file changed, 12 insertions(+), 5 deletions(-)
15
16 --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
17 +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
18 @@ -5048,6 +5048,7 @@ static void rtl8xxxu_rx_urb_work(struct
19 int rtl8xxxu_parse_rxdesc16(struct rtl8xxxu_priv *priv, struct sk_buff *skb,
20 struct ieee80211_rx_status *rx_status)
21 {
22 + struct ieee80211_hw *hw = priv->hw;
23 struct rtl8xxxu_rxdesc16 *rx_desc =
24 (struct rtl8xxxu_rxdesc16 *)skb->data;
25 struct rtl8723au_phy_stats *phy_stats;
26 @@ -5059,6 +5060,8 @@ int rtl8xxxu_parse_rxdesc16(struct rtl8x
27 for (i = 0; i < (sizeof(struct rtl8xxxu_rxdesc16) / sizeof(u32)); i++)
28 _rx_desc[i] = le32_to_cpu(_rx_desc_le[i]);
29
30 + memset(rx_status, 0, sizeof(struct ieee80211_rx_status));
31 +
32 skb_pull(skb, sizeof(struct rtl8xxxu_rxdesc16));
33
34 phy_stats = (struct rtl8723au_phy_stats *)skb->data;
35 @@ -5088,12 +5091,16 @@ int rtl8xxxu_parse_rxdesc16(struct rtl8x
36 rx_status->rate_idx = rx_desc->rxmcs;
37 }
38
39 + rx_status->freq = hw->conf.chandef.chan->center_freq;
40 + rx_status->band = hw->conf.chandef.chan->band;
41 +
42 return RX_TYPE_DATA_PKT;
43 }
44
45 int rtl8xxxu_parse_rxdesc24(struct rtl8xxxu_priv *priv, struct sk_buff *skb,
46 struct ieee80211_rx_status *rx_status)
47 {
48 + struct ieee80211_hw *hw = priv->hw;
49 struct rtl8xxxu_rxdesc24 *rx_desc =
50 (struct rtl8xxxu_rxdesc24 *)skb->data;
51 struct rtl8723au_phy_stats *phy_stats;
52 @@ -5105,6 +5112,8 @@ int rtl8xxxu_parse_rxdesc24(struct rtl8x
53 for (i = 0; i < (sizeof(struct rtl8xxxu_rxdesc24) / sizeof(u32)); i++)
54 _rx_desc[i] = le32_to_cpu(_rx_desc_le[i]);
55
56 + memset(rx_status, 0, sizeof(struct ieee80211_rx_status));
57 +
58 skb_pull(skb, sizeof(struct rtl8xxxu_rxdesc24));
59
60 phy_stats = (struct rtl8723au_phy_stats *)skb->data;
61 @@ -5140,6 +5149,9 @@ int rtl8xxxu_parse_rxdesc24(struct rtl8x
62 rx_status->rate_idx = rx_desc->rxmcs;
63 }
64
65 + rx_status->freq = hw->conf.chandef.chan->center_freq;
66 + rx_status->band = hw->conf.chandef.chan->band;
67 +
68 return RX_TYPE_DATA_PKT;
69 }
70
71 @@ -5202,13 +5214,8 @@ static void rtl8xxxu_rx_complete(struct
72 skb_put(skb, urb->actual_length);
73
74 if (urb->status == 0) {
75 - memset(rx_status, 0, sizeof(struct ieee80211_rx_status));
76 -
77 rx_type = priv->fops->parse_rx_desc(priv, skb, rx_status);
78
79 - rx_status->freq = hw->conf.chandef.chan->center_freq;
80 - rx_status->band = hw->conf.chandef.chan->band;
81 -
82 if (rx_type == RX_TYPE_DATA_PKT)
83 ieee80211_rx_irqsafe(hw, skb);
84 else {