2021-11-18 16:41:36

by Ben Greear

[permalink] [raw]
Subject: [PATCH 07/11] mt76: mt7915: fix rate rix and flags in txs path

From: Ben Greear <[email protected]>

Do not initialize rix to -1, build the rix and set flags
based on the mcs, nss, and mode.

Signed-off-by: Ben Greear <[email protected]>
---
drivers/net/wireless/mediatek/mt76/mt7915/mac.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
index edf33540658e..300928edd0d7 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
@@ -1571,7 +1571,7 @@ mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid,
struct ieee80211_supported_band *sband;
struct mt76_dev *mdev = &dev->mt76;
struct mt76_phy *mphy;
- struct ieee80211_tx_info *info;
+ struct ieee80211_tx_info *info = NULL;
struct sk_buff_head list;
struct rate_info rate = {};
struct sk_buff *skb = NULL;
@@ -1596,8 +1596,6 @@ mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid,
info->status.ampdu_len = 1;
info->status.ampdu_ack_len = !!(info->flags &
IEEE80211_TX_STAT_ACK);
-
- info->status.rates[0].idx = -1;
}

txrate = FIELD_GET(MT_TXS0_TX_RATE, txs);
@@ -1627,6 +1625,8 @@ mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid,

rate.mcs = mt76_get_rate(mphy->dev, sband, rate.mcs, cck);
rate.legacy = sband->bitrates[rate.mcs].bitrate;
+ if (info)
+ info->status.rates[0].idx = rate.mcs;
break;
case MT_PHY_TYPE_HT:
case MT_PHY_TYPE_HT_GF:
@@ -1637,6 +1637,10 @@ mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid,
rate.flags = RATE_INFO_FLAGS_MCS;
if (wcid->rate_short_gi)
rate.flags |= RATE_INFO_FLAGS_SHORT_GI;
+ if (info) {
+ info->status.rates[0].idx = rate.mcs + rate.nss * 8;
+ info->status.rates[0].flags |= IEEE80211_TX_RC_MCS;
+ }
break;
case MT_PHY_TYPE_VHT:
if (rate.mcs > 9)
@@ -1645,6 +1649,10 @@ mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid,
rate.flags = RATE_INFO_FLAGS_VHT_MCS;
if (wcid->rate_short_gi)
rate.flags |= RATE_INFO_FLAGS_SHORT_GI;
+ if (info) {
+ info->status.rates[0].idx = (rate.nss << 4) | rate.mcs;
+ info->status.rates[0].flags |= IEEE80211_TX_RC_VHT_MCS;
+ }
break;
case MT_PHY_TYPE_HE_SU:
case MT_PHY_TYPE_HE_EXT_SU:
@@ -1656,6 +1664,8 @@ mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid,
rate.he_gi = wcid->rate_he_gi;
rate.he_dcm = FIELD_GET(MT_TX_RATE_DCM, txrate);
rate.flags = RATE_INFO_FLAGS_HE_MCS;
+ if (info)
+ info->status.rates[0].idx = (rate.nss << 4) | rate.mcs;
break;
default:
WARN_ON_ONCE(true);
--
2.20.1



2022-01-04 11:16:06

by Lorenzo Bianconi

[permalink] [raw]
Subject: Re: [PATCH 07/11] mt76: mt7915: fix rate rix and flags in txs path

> From: Ben Greear <[email protected]>
>
> Do not initialize rix to -1, build the rix and set flags
> based on the mcs, nss, and mode.
>
> Signed-off-by: Ben Greear <[email protected]>
> ---
> drivers/net/wireless/mediatek/mt76/mt7915/mac.c | 16 +++++++++++++---
> 1 file changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
> index edf33540658e..300928edd0d7 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
> @@ -1571,7 +1571,7 @@ mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid,
> struct ieee80211_supported_band *sband;
> struct mt76_dev *mdev = &dev->mt76;
> struct mt76_phy *mphy;
> - struct ieee80211_tx_info *info;
> + struct ieee80211_tx_info *info = NULL;
> struct sk_buff_head list;
> struct rate_info rate = {};
> struct sk_buff *skb = NULL;
> @@ -1596,8 +1596,6 @@ mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid,
> info->status.ampdu_len = 1;
> info->status.ampdu_ack_len = !!(info->flags &
> IEEE80211_TX_STAT_ACK);
> -
> - info->status.rates[0].idx = -1;
> }
>
> txrate = FIELD_GET(MT_TXS0_TX_RATE, txs);
> @@ -1627,6 +1625,8 @@ mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid,
>
> rate.mcs = mt76_get_rate(mphy->dev, sband, rate.mcs, cck);
> rate.legacy = sband->bitrates[rate.mcs].bitrate;
> + if (info)
> + info->status.rates[0].idx = rate.mcs;

can it be NULL?

> break;
> case MT_PHY_TYPE_HT:
> case MT_PHY_TYPE_HT_GF:
> @@ -1637,6 +1637,10 @@ mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid,
> rate.flags = RATE_INFO_FLAGS_MCS;
> if (wcid->rate_short_gi)
> rate.flags |= RATE_INFO_FLAGS_SHORT_GI;
> + if (info) {
> + info->status.rates[0].idx = rate.mcs + rate.nss * 8;
> + info->status.rates[0].flags |= IEEE80211_TX_RC_MCS;
> + }
> break;
> case MT_PHY_TYPE_VHT:
> if (rate.mcs > 9)
> @@ -1645,6 +1649,10 @@ mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid,
> rate.flags = RATE_INFO_FLAGS_VHT_MCS;
> if (wcid->rate_short_gi)
> rate.flags |= RATE_INFO_FLAGS_SHORT_GI;
> + if (info) {
> + info->status.rates[0].idx = (rate.nss << 4) | rate.mcs;

ieee80211_rate_set_vht()

> + info->status.rates[0].flags |= IEEE80211_TX_RC_VHT_MCS;
> + }
> break;
> case MT_PHY_TYPE_HE_SU:
> case MT_PHY_TYPE_HE_EXT_SU:
> @@ -1656,6 +1664,8 @@ mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid,
> rate.he_gi = wcid->rate_he_gi;
> rate.he_dcm = FIELD_GET(MT_TX_RATE_DCM, txrate);
> rate.flags = RATE_INFO_FLAGS_HE_MCS;
> + if (info)
> + info->status.rates[0].idx = (rate.nss << 4) | rate.mcs;
> break;
> default:
> WARN_ON_ONCE(true);
> --
> 2.20.1
>


Attachments:
(No filename) (2.88 kB)
signature.asc (228.00 B)
Download all attachments