Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c14ee43b authored by Jes Sorensen's avatar Jes Sorensen Committed by Kalle Valo
Browse files

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: default avatarJes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 585dfe81
Loading
Loading
Loading
Loading
+12 −5
Original line number Original line Diff line number Diff line
@@ -5048,6 +5048,7 @@ static void rtl8xxxu_rx_urb_work(struct work_struct *work)
int rtl8xxxu_parse_rxdesc16(struct rtl8xxxu_priv *priv, struct sk_buff *skb,
int rtl8xxxu_parse_rxdesc16(struct rtl8xxxu_priv *priv, struct sk_buff *skb,
			    struct ieee80211_rx_status *rx_status)
			    struct ieee80211_rx_status *rx_status)
{
{
	struct ieee80211_hw *hw = priv->hw;
	struct rtl8xxxu_rxdesc16 *rx_desc =
	struct rtl8xxxu_rxdesc16 *rx_desc =
		(struct rtl8xxxu_rxdesc16 *)skb->data;
		(struct rtl8xxxu_rxdesc16 *)skb->data;
	struct rtl8723au_phy_stats *phy_stats;
	struct rtl8723au_phy_stats *phy_stats;
@@ -5059,6 +5060,8 @@ int rtl8xxxu_parse_rxdesc16(struct rtl8xxxu_priv *priv, struct sk_buff *skb,
	for (i = 0; i < (sizeof(struct rtl8xxxu_rxdesc16) / sizeof(u32)); i++)
	for (i = 0; i < (sizeof(struct rtl8xxxu_rxdesc16) / sizeof(u32)); i++)
		_rx_desc[i] = le32_to_cpu(_rx_desc_le[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));
	skb_pull(skb, sizeof(struct rtl8xxxu_rxdesc16));


	phy_stats = (struct rtl8723au_phy_stats *)skb->data;
	phy_stats = (struct rtl8723au_phy_stats *)skb->data;
@@ -5088,12 +5091,16 @@ int rtl8xxxu_parse_rxdesc16(struct rtl8xxxu_priv *priv, struct sk_buff *skb,
		rx_status->rate_idx = rx_desc->rxmcs;
		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;
	return RX_TYPE_DATA_PKT;
}
}


int rtl8xxxu_parse_rxdesc24(struct rtl8xxxu_priv *priv, struct sk_buff *skb,
int rtl8xxxu_parse_rxdesc24(struct rtl8xxxu_priv *priv, struct sk_buff *skb,
			    struct ieee80211_rx_status *rx_status)
			    struct ieee80211_rx_status *rx_status)
{
{
	struct ieee80211_hw *hw = priv->hw;
	struct rtl8xxxu_rxdesc24 *rx_desc =
	struct rtl8xxxu_rxdesc24 *rx_desc =
		(struct rtl8xxxu_rxdesc24 *)skb->data;
		(struct rtl8xxxu_rxdesc24 *)skb->data;
	struct rtl8723au_phy_stats *phy_stats;
	struct rtl8723au_phy_stats *phy_stats;
@@ -5105,6 +5112,8 @@ int rtl8xxxu_parse_rxdesc24(struct rtl8xxxu_priv *priv, struct sk_buff *skb,
	for (i = 0; i < (sizeof(struct rtl8xxxu_rxdesc24) / sizeof(u32)); i++)
	for (i = 0; i < (sizeof(struct rtl8xxxu_rxdesc24) / sizeof(u32)); i++)
		_rx_desc[i] = le32_to_cpu(_rx_desc_le[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));
	skb_pull(skb, sizeof(struct rtl8xxxu_rxdesc24));


	phy_stats = (struct rtl8723au_phy_stats *)skb->data;
	phy_stats = (struct rtl8723au_phy_stats *)skb->data;
@@ -5140,6 +5149,9 @@ int rtl8xxxu_parse_rxdesc24(struct rtl8xxxu_priv *priv, struct sk_buff *skb,
		rx_status->rate_idx = rx_desc->rxmcs;
		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;
	return RX_TYPE_DATA_PKT;
}
}


@@ -5202,13 +5214,8 @@ static void rtl8xxxu_rx_complete(struct urb *urb)
	skb_put(skb, urb->actual_length);
	skb_put(skb, urb->actual_length);


	if (urb->status == 0) {
	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_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)
		if (rx_type == RX_TYPE_DATA_PKT)
			ieee80211_rx_irqsafe(hw, skb);
			ieee80211_rx_irqsafe(hw, skb);
		else {
		else {