mt76: mt7915: improve starec readability of txbf

1. Drop unnecessary MT_EBF/MT_IBF enum.
2. Rename fields 'nc'/'nr' to 'ncol'/'nrow'.

Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
Ryder Lee 2021-10-18 16:07:01 +08:00 committed by Felix Fietkau
parent f89f297aef
commit a56c431ede
2 changed files with 45 additions and 49 deletions

View File

@ -1811,7 +1811,6 @@ mt7915_is_ebf_supported(struct mt7915_phy *phy, struct ieee80211_vif *vif,
static void static void
mt7915_mcu_sta_sounding_rate(struct sta_rec_bf *bf) mt7915_mcu_sta_sounding_rate(struct sta_rec_bf *bf)
{ {
bf->bf_cap = MT_EBF;
bf->sounding_phy = MT_PHY_TYPE_OFDM; bf->sounding_phy = MT_PHY_TYPE_OFDM;
bf->ndp_rate = 0; /* mcs0 */ bf->ndp_rate = 0; /* mcs0 */
bf->ndpa_rate = MT7915_CFEND_RATE_DEFAULT; /* ofdm 24m */ bf->ndpa_rate = MT7915_CFEND_RATE_DEFAULT; /* ofdm 24m */
@ -1826,7 +1825,6 @@ mt7915_mcu_sta_bfer_ht(struct ieee80211_sta *sta, struct mt7915_phy *phy,
u8 n = 0; u8 n = 0;
bf->tx_mode = MT_PHY_TYPE_HT; bf->tx_mode = MT_PHY_TYPE_HT;
bf->bf_cap = MT_IBF;
if ((mcs->tx_params & IEEE80211_HT_MCS_TX_RX_DIFF) && if ((mcs->tx_params & IEEE80211_HT_MCS_TX_RX_DIFF) &&
(mcs->tx_params & IEEE80211_HT_MCS_TX_DEFINED)) (mcs->tx_params & IEEE80211_HT_MCS_TX_DEFINED))
@ -1839,8 +1837,8 @@ mt7915_mcu_sta_bfer_ht(struct ieee80211_sta *sta, struct mt7915_phy *phy,
else if (mcs->rx_mask[1]) else if (mcs->rx_mask[1])
n = 1; n = 1;
bf->nr = hweight8(phy->mt76->chainmask) - 1; bf->nrow = hweight8(phy->mt76->chainmask) - 1;
bf->nc = min_t(u8, bf->nr, n); bf->ncol = min_t(u8, bf->nrow, n);
bf->ibf_ncol = n; bf->ibf_ncol = n;
} }
@ -1857,23 +1855,23 @@ mt7915_mcu_sta_bfer_vht(struct ieee80211_sta *sta, struct mt7915_phy *phy,
bf->tx_mode = MT_PHY_TYPE_VHT; bf->tx_mode = MT_PHY_TYPE_VHT;
if (explicit) { if (explicit) {
u8 bfee_nr, bfer_nr; u8 sts, snd_dim;
mt7915_mcu_sta_sounding_rate(bf); mt7915_mcu_sta_sounding_rate(bf);
bfee_nr = FIELD_GET(IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK,
pc->cap); sts = FIELD_GET(IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK,
bfer_nr = FIELD_GET(IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK, pc->cap);
snd_dim = FIELD_GET(IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK,
vc->cap); vc->cap);
bf->nr = min_t(u8, min_t(u8, bfer_nr, bfee_nr), tx_ant); bf->nrow = min_t(u8, min_t(u8, snd_dim, sts), tx_ant);
bf->nc = min_t(u8, nss_mcs, bf->nr); bf->ncol = min_t(u8, nss_mcs, bf->nrow);
bf->ibf_ncol = bf->nc; bf->ibf_ncol = bf->ncol;
if (sta->bandwidth == IEEE80211_STA_RX_BW_160) if (sta->bandwidth == IEEE80211_STA_RX_BW_160)
bf->nr = 1; bf->nrow = 1;
} else { } else {
bf->bf_cap = MT_IBF; bf->nrow = tx_ant;
bf->nr = tx_ant; bf->ncol = min_t(u8, nss_mcs, bf->nrow);
bf->nc = min_t(u8, nss_mcs, bf->nr);
bf->ibf_ncol = nss_mcs; bf->ibf_ncol = nss_mcs;
if (sta->bandwidth == IEEE80211_STA_RX_BW_160) if (sta->bandwidth == IEEE80211_STA_RX_BW_160)
@ -1891,21 +1889,23 @@ mt7915_mcu_sta_bfer_he(struct ieee80211_sta *sta, struct ieee80211_vif *vif,
const struct ieee80211_he_cap_elem *ve = &vc->he_cap_elem; const struct ieee80211_he_cap_elem *ve = &vc->he_cap_elem;
u16 mcs_map = le16_to_cpu(pc->he_mcs_nss_supp.rx_mcs_80); u16 mcs_map = le16_to_cpu(pc->he_mcs_nss_supp.rx_mcs_80);
u8 nss_mcs = mt7915_mcu_get_sta_nss(mcs_map); u8 nss_mcs = mt7915_mcu_get_sta_nss(mcs_map);
u8 bfee_nr, bfer_nr; u8 snd_dim, sts;
bf->tx_mode = MT_PHY_TYPE_HE_SU; bf->tx_mode = MT_PHY_TYPE_HE_SU;
mt7915_mcu_sta_sounding_rate(bf); mt7915_mcu_sta_sounding_rate(bf);
bf->trigger_su = HE_PHY(CAP6_TRIG_SU_BEAMFORMING_FB, bf->trigger_su = HE_PHY(CAP6_TRIG_SU_BEAMFORMING_FB,
pe->phy_cap_info[6]); pe->phy_cap_info[6]);
bf->trigger_mu = HE_PHY(CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB, bf->trigger_mu = HE_PHY(CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB,
pe->phy_cap_info[6]); pe->phy_cap_info[6]);
bfer_nr = HE_PHY(CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK, snd_dim = HE_PHY(CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK,
ve->phy_cap_info[5]); ve->phy_cap_info[5]);
bfee_nr = HE_PHY(CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_MASK, sts = HE_PHY(CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_MASK,
pe->phy_cap_info[4]); pe->phy_cap_info[4]);
bf->nr = min_t(u8, bfer_nr, bfee_nr); bf->nrow = min_t(u8, snd_dim, sts);
bf->nc = min_t(u8, nss_mcs, bf->nr); bf->ncol = min_t(u8, nss_mcs, bf->nrow);
bf->ibf_ncol = bf->nc; bf->ibf_ncol = bf->ncol;
if (sta->bandwidth != IEEE80211_STA_RX_BW_160) if (sta->bandwidth != IEEE80211_STA_RX_BW_160)
return; return;
@ -1916,7 +1916,7 @@ mt7915_mcu_sta_bfer_he(struct ieee80211_sta *sta, struct ieee80211_vif *vif,
mcs_map = le16_to_cpu(pc->he_mcs_nss_supp.rx_mcs_160); mcs_map = le16_to_cpu(pc->he_mcs_nss_supp.rx_mcs_160);
nss_mcs = mt7915_mcu_get_sta_nss(mcs_map); nss_mcs = mt7915_mcu_get_sta_nss(mcs_map);
bf->nc_bw160 = nss_mcs; bf->ncol_bw160 = nss_mcs;
} }
if (pe->phy_cap_info[0] & if (pe->phy_cap_info[0] &
@ -1924,18 +1924,18 @@ mt7915_mcu_sta_bfer_he(struct ieee80211_sta *sta, struct ieee80211_vif *vif,
mcs_map = le16_to_cpu(pc->he_mcs_nss_supp.rx_mcs_80p80); mcs_map = le16_to_cpu(pc->he_mcs_nss_supp.rx_mcs_80p80);
nss_mcs = mt7915_mcu_get_sta_nss(mcs_map); nss_mcs = mt7915_mcu_get_sta_nss(mcs_map);
if (bf->nc_bw160) if (bf->ncol_bw160)
bf->nc_bw160 = min_t(u8, bf->nc_bw160, nss_mcs); bf->ncol_bw160 = min_t(u8, bf->ncol_bw160, nss_mcs);
else else
bf->nc_bw160 = nss_mcs; bf->ncol_bw160 = nss_mcs;
} }
bfer_nr = HE_PHY(CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_MASK, snd_dim = HE_PHY(CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_MASK,
ve->phy_cap_info[5]); ve->phy_cap_info[5]);
bfee_nr = HE_PHY(CAP4_BEAMFORMEE_MAX_STS_ABOVE_80MHZ_MASK, sts = HE_PHY(CAP4_BEAMFORMEE_MAX_STS_ABOVE_80MHZ_MASK,
pe->phy_cap_info[4]); pe->phy_cap_info[4]);
bf->nr_bw160 = min_t(int, bfer_nr, bfee_nr); bf->nrow_bw160 = min_t(int, snd_dim, sts);
} }
static void static void
@ -1976,19 +1976,20 @@ mt7915_mcu_sta_bfer_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
else else
return; return;
bf->bf_cap = ebf ? ebf : dev->ibf << 1;
bf->bw = sta->bandwidth; bf->bw = sta->bandwidth;
bf->ibf_dbw = sta->bandwidth; bf->ibf_dbw = sta->bandwidth;
bf->ibf_nrow = tx_ant; bf->ibf_nrow = tx_ant;
if (!ebf && sta->bandwidth <= IEEE80211_STA_RX_BW_40 && !bf->nc) if (!ebf && sta->bandwidth <= IEEE80211_STA_RX_BW_40 && !bf->ncol)
bf->ibf_timeout = 0x48; bf->ibf_timeout = 0x48;
else else
bf->ibf_timeout = 0x18; bf->ibf_timeout = 0x18;
if (ebf && bf->nr != tx_ant) if (ebf && bf->nrow != tx_ant)
bf->mem_20m = matrix[tx_ant][bf->nc]; bf->mem_20m = matrix[tx_ant][bf->ncol];
else else
bf->mem_20m = matrix[bf->nr][bf->nc]; bf->mem_20m = matrix[bf->nrow][bf->ncol];
switch (sta->bandwidth) { switch (sta->bandwidth) {
case IEEE80211_STA_RX_BW_160: case IEEE80211_STA_RX_BW_160:
@ -2014,7 +2015,7 @@ mt7915_mcu_sta_bfee_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
int tx_ant = hweight8(phy->mt76->chainmask) - 1; int tx_ant = hweight8(phy->mt76->chainmask) - 1;
struct sta_rec_bfee *bfee; struct sta_rec_bfee *bfee;
struct tlv *tlv; struct tlv *tlv;
u8 nr = 0; u8 nrow = 0;
if (!mt7915_is_ebf_supported(phy, vif, sta, true)) if (!mt7915_is_ebf_supported(phy, vif, sta, true))
return; return;
@ -2025,17 +2026,17 @@ mt7915_mcu_sta_bfee_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
if (sta->he_cap.has_he) { if (sta->he_cap.has_he) {
struct ieee80211_he_cap_elem *pe = &sta->he_cap.he_cap_elem; struct ieee80211_he_cap_elem *pe = &sta->he_cap.he_cap_elem;
nr = HE_PHY(CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK, nrow = HE_PHY(CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK,
pe->phy_cap_info[5]); pe->phy_cap_info[5]);
} else if (sta->vht_cap.vht_supported) { } else if (sta->vht_cap.vht_supported) {
struct ieee80211_sta_vht_cap *pc = &sta->vht_cap; struct ieee80211_sta_vht_cap *pc = &sta->vht_cap;
nr = FIELD_GET(IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK, nrow = FIELD_GET(IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK,
pc->cap); pc->cap);
} }
/* reply with identity matrix to avoid 2x2 BF negative gain */ /* reply with identity matrix to avoid 2x2 BF negative gain */
bfee->fb_identity_matrix = !!(nr == 1 && tx_ant == 2); bfee->fb_identity_matrix = (nrow == 1 && tx_ant == 2);
} }
static int static int

View File

@ -973,8 +973,8 @@ struct sta_rec_bf {
u8 ndp_rate; u8 ndp_rate;
u8 rept_poll_rate; u8 rept_poll_rate;
u8 tx_mode; /* 0: legacy, 1: OFDM, 2: HT, 4: VHT ... */ u8 tx_mode; /* 0: legacy, 1: OFDM, 2: HT, 4: VHT ... */
u8 nc; u8 ncol;
u8 nr; u8 nrow;
u8 bw; /* 0: 20M, 1: 40M, 2: 80M, 3: 160M */ u8 bw; /* 0: 20M, 1: 40M, 2: 80M, 3: 160M */
u8 mem_total; u8 mem_total;
@ -994,8 +994,8 @@ struct sta_rec_bf {
u8 ibf_dbw; u8 ibf_dbw;
u8 ibf_ncol; u8 ibf_ncol;
u8 ibf_nrow; u8 ibf_nrow;
u8 nr_bw160; u8 nrow_bw160;
u8 nc_bw160; u8 ncol_bw160;
u8 ru_start_idx; u8 ru_start_idx;
u8 ru_end_idx; u8 ru_end_idx;
@ -1086,11 +1086,6 @@ enum {
THERMAL_PROTECT_STATE_ACT, THERMAL_PROTECT_STATE_ACT,
}; };
enum {
MT_EBF = BIT(0), /* explicit beamforming */
MT_IBF = BIT(1) /* implicit beamforming */
};
enum { enum {
MT_BF_SOUNDING_ON = 1, MT_BF_SOUNDING_ON = 1,
MT_BF_TYPE_UPDATE = 20, MT_BF_TYPE_UPDATE = 20,