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:
parent
f89f297aef
commit
a56c431ede
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Reference in New Issue