Commit cc2646d4 authored by Jes Sorensen's avatar Jes Sorensen Committed by Kalle Valo

rtl8xxxu: Set sequence number correctly for 40 byte TX descriptors

SEQ changed location in the 40 byte TX descriptor. Set it correctly.
Signed-off-by: default avatarJes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent a40ace4f
...@@ -6943,6 +6943,7 @@ static void rtl8xxxu_tx(struct ieee80211_hw *hw, ...@@ -6943,6 +6943,7 @@ static void rtl8xxxu_tx(struct ieee80211_hw *hw,
struct ieee80211_rate *tx_rate = ieee80211_get_tx_rate(hw, tx_info); struct ieee80211_rate *tx_rate = ieee80211_get_tx_rate(hw, tx_info);
struct rtl8xxxu_priv *priv = hw->priv; struct rtl8xxxu_priv *priv = hw->priv;
struct rtl8723au_tx_desc *tx_desc; struct rtl8723au_tx_desc *tx_desc;
struct rtl8723bu_tx_desc *tx_desc40;
struct rtl8xxxu_tx_urb *tx_urb; struct rtl8xxxu_tx_urb *tx_urb;
struct ieee80211_sta *sta = NULL; struct ieee80211_sta *sta = NULL;
struct ieee80211_vif *vif = tx_info->control.vif; struct ieee80211_vif *vif = tx_info->control.vif;
...@@ -6953,7 +6954,7 @@ static void rtl8xxxu_tx(struct ieee80211_hw *hw, ...@@ -6953,7 +6954,7 @@ static void rtl8xxxu_tx(struct ieee80211_hw *hw,
u16 rate_flag = tx_info->control.rates[0].flags; u16 rate_flag = tx_info->control.rates[0].flags;
int tx_desc_size = priv->fops->tx_desc_size; int tx_desc_size = priv->fops->tx_desc_size;
int ret; int ret;
bool txdesc40, ampdu_enable; bool usedesc40, ampdu_enable;
if (skb_headroom(skb) < tx_desc_size) { if (skb_headroom(skb) < tx_desc_size) {
dev_warn(dev, dev_warn(dev,
...@@ -6981,7 +6982,7 @@ static void rtl8xxxu_tx(struct ieee80211_hw *hw, ...@@ -6981,7 +6982,7 @@ static void rtl8xxxu_tx(struct ieee80211_hw *hw,
if (ieee80211_is_action(hdr->frame_control)) if (ieee80211_is_action(hdr->frame_control))
rtl8xxxu_dump_action(dev, hdr); rtl8xxxu_dump_action(dev, hdr);
txdesc40 = (tx_desc_size == 40); usedesc40 = (tx_desc_size == 40);
tx_info->rate_driver_data[0] = hw; tx_info->rate_driver_data[0] = hw;
if (control && control->sta) if (control && control->sta)
...@@ -7017,9 +7018,6 @@ static void rtl8xxxu_tx(struct ieee80211_hw *hw, ...@@ -7017,9 +7018,6 @@ static void rtl8xxxu_tx(struct ieee80211_hw *hw,
} }
} }
seq_number = IEEE80211_SEQ_TO_SN(le16_to_cpu(hdr->seq_ctrl));
tx_desc->txdw3 = cpu_to_le32((u32)seq_number << TXDESC_SEQ_SHIFT);
if (rate_flag & IEEE80211_TX_RC_MCS) if (rate_flag & IEEE80211_TX_RC_MCS)
rate = tx_info->control.rates[0].idx + DESC_RATE_MCS0; rate = tx_info->control.rates[0].idx + DESC_RATE_MCS0;
else else
...@@ -7043,16 +7041,26 @@ static void rtl8xxxu_tx(struct ieee80211_hw *hw, ...@@ -7043,16 +7041,26 @@ static void rtl8xxxu_tx(struct ieee80211_hw *hw,
} }
} }
if (!txdesc40) { seq_number = IEEE80211_SEQ_TO_SN(le16_to_cpu(hdr->seq_ctrl));
if (!usedesc40) {
tx_desc->txdw3 =
cpu_to_le32((u32)seq_number << TXDESC_SEQ_SHIFT_8723A);
if (ampdu_enable) if (ampdu_enable)
tx_desc->txdw1 |= cpu_to_le32(TXDESC_AGG_ENABLE_8723A); tx_desc->txdw1 |= cpu_to_le32(TXDESC_AGG_ENABLE_8723A);
else else
tx_desc->txdw1 |= cpu_to_le32(TXDESC_AGG_BREAK_8723A); tx_desc->txdw1 |= cpu_to_le32(TXDESC_AGG_BREAK_8723A);
} else { } else {
tx_desc40 = (struct rtl8723bu_tx_desc *)tx_desc;
tx_desc40->txdw9 =
cpu_to_le32((u32)seq_number << TXDESC_SEQ_SHIFT_8723B);
if (ampdu_enable) if (ampdu_enable)
tx_desc->txdw2 |= cpu_to_le32(TXDESC_AGG_ENABLE_8723B); tx_desc40->txdw2 |=
cpu_to_le32(TXDESC_AGG_ENABLE_8723B);
else else
tx_desc->txdw2 |= cpu_to_le32(TXDESC_AGG_BREAK_8723B); tx_desc40->txdw2 |= cpu_to_le32(TXDESC_AGG_BREAK_8723B);
}; };
if (ieee80211_is_data_qos(hdr->frame_control)) if (ieee80211_is_data_qos(hdr->frame_control))
......
...@@ -467,8 +467,8 @@ struct rtl8723bu_tx_desc { ...@@ -467,8 +467,8 @@ struct rtl8723bu_tx_desc {
#define TXDESC_GID_8723B BIT(24) #define TXDESC_GID_8723B BIT(24)
/* Word 3 */ /* Word 3 */
#define TXDESC_SEQ_SHIFT 16 #define TXDESC_SEQ_SHIFT_8723A 16
#define TXDESC_SEQ_MASK 0x0fff0000 #define TXDESC_SEQ_MASK_8723A 0x0fff0000
/* Word 4 */ /* Word 4 */
#define TXDESC_QOS BIT(6) #define TXDESC_QOS BIT(6)
...@@ -498,6 +498,10 @@ struct rtl8723bu_tx_desc { ...@@ -498,6 +498,10 @@ struct rtl8723bu_tx_desc {
/* Word 6 */ /* Word 6 */
#define TXDESC_MAX_AGG_SHIFT 11 #define TXDESC_MAX_AGG_SHIFT 11
/* Word 9 */
#define TXDESC_SEQ_SHIFT_8723B 12
#define TXDESC_SEQ_MASK_8723B 0x00fff000
struct phy_rx_agc_info { struct phy_rx_agc_info {
#ifdef __LITTLE_ENDIAN #ifdef __LITTLE_ENDIAN
u8 gain:7, trsw:1; u8 gain:7, trsw:1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment