mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-10 10:20:17 -04:00
wifi: ath12k: push EHT MU-MIMO params to hardware
Currently, only the EHT IE in management frames is updated with respect to MU-MIMO configurations, but this change is not reflected in the hardware. Add support to propagate MU-MIMO configurations to the hardware as well for AP mode. Similar support for STA mode will be added in future. Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1 Co-developed-by: Muna Sinada <quic_msinada@quicinc.com> Signed-off-by: Muna Sinada <quic_msinada@quicinc.com> Signed-off-by: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com> Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com> Link: https://patch.msgid.link/20250701010408.1257201-3-quic_pradeepc@quicinc.com Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
This commit is contained in:
committed by
Jeff Johnson
parent
5d6707e88e
commit
df8207bc0b
@@ -3279,6 +3279,58 @@ static int ath12k_mac_vif_recalc_sta_he_txbf(struct ath12k *ar,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ath12k_mac_set_eht_txbf_conf(struct ath12k_link_vif *arvif)
|
||||
{
|
||||
struct ath12k_vif *ahvif = arvif->ahvif;
|
||||
struct ath12k *ar = arvif->ar;
|
||||
u32 param = WMI_VDEV_PARAM_SET_EHT_MU_MODE;
|
||||
u32 value = 0;
|
||||
int ret;
|
||||
struct ieee80211_bss_conf *link_conf;
|
||||
|
||||
link_conf = ath12k_mac_get_link_bss_conf(arvif);
|
||||
if (!link_conf) {
|
||||
ath12k_warn(ar->ab, "unable to access bss link conf in eht txbf conf\n");
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
if (!link_conf->eht_support)
|
||||
return 0;
|
||||
|
||||
if (link_conf->eht_su_beamformer) {
|
||||
value |= u32_encode_bits(EHT_SU_BFER_ENABLE, EHT_MODE_SU_TX_BFER);
|
||||
if (link_conf->eht_mu_beamformer &&
|
||||
ahvif->vdev_type == WMI_VDEV_TYPE_AP)
|
||||
value |= u32_encode_bits(EHT_MU_BFER_ENABLE,
|
||||
EHT_MODE_MU_TX_BFER) |
|
||||
u32_encode_bits(EHT_DL_MUOFDMA_ENABLE,
|
||||
EHT_MODE_DL_OFDMA_MUMIMO) |
|
||||
u32_encode_bits(EHT_UL_MUOFDMA_ENABLE,
|
||||
EHT_MODE_UL_OFDMA_MUMIMO);
|
||||
}
|
||||
|
||||
if (ahvif->vif->type != NL80211_IFTYPE_MESH_POINT) {
|
||||
value |= u32_encode_bits(EHT_DL_MUOFDMA_ENABLE, EHT_MODE_DL_OFDMA) |
|
||||
u32_encode_bits(EHT_UL_MUOFDMA_ENABLE, EHT_MODE_UL_OFDMA);
|
||||
|
||||
if (link_conf->eht_80mhz_full_bw_ul_mumimo)
|
||||
value |= u32_encode_bits(EHT_UL_MUMIMO_ENABLE, EHT_MODE_MUMIMO);
|
||||
|
||||
if (link_conf->eht_su_beamformee)
|
||||
value |= u32_encode_bits(EHT_SU_BFEE_ENABLE,
|
||||
EHT_MODE_SU_TX_BFEE);
|
||||
}
|
||||
|
||||
ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param, value);
|
||||
if (ret) {
|
||||
ath12k_warn(ar->ab, "failed to set vdev %d EHT MU mode: %d\n",
|
||||
arvif->vdev_id, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u32 ath12k_mac_ieee80211_sta_bw_to_wmi(struct ath12k *ar,
|
||||
struct ieee80211_link_sta *link_sta)
|
||||
{
|
||||
@@ -4018,6 +4070,12 @@ static void ath12k_mac_bss_info_changed(struct ath12k *ar,
|
||||
ath12k_warn(ar->ab,
|
||||
"failed to set HE TXBF config for vdev: %d\n",
|
||||
arvif->vdev_id);
|
||||
|
||||
ret = ath12k_mac_set_eht_txbf_conf(arvif);
|
||||
if (ret)
|
||||
ath12k_warn(ar->ab,
|
||||
"failed to set EHT TXBF config for vdev: %d\n",
|
||||
arvif->vdev_id);
|
||||
}
|
||||
ath12k_control_beaconing(arvif, info);
|
||||
|
||||
|
||||
@@ -1178,6 +1178,7 @@ enum wmi_tlv_vdev_param {
|
||||
WMI_VDEV_PARAM_BSS_COLOR,
|
||||
WMI_VDEV_PARAM_SET_HEMU_MODE,
|
||||
WMI_VDEV_PARAM_HEOPS_0_31 = 0x8003,
|
||||
WMI_VDEV_PARAM_SET_EHT_MU_MODE = 0x8005,
|
||||
};
|
||||
|
||||
enum wmi_tlv_peer_flags {
|
||||
@@ -3153,6 +3154,26 @@ struct ath12k_wmi_rx_reorder_queue_remove_arg {
|
||||
#define HE_MU_BFER_ENABLE 1
|
||||
#define HE_SU_BFER_ENABLE 1
|
||||
|
||||
#define EHT_MODE_SU_TX_BFEE BIT(0)
|
||||
#define EHT_MODE_SU_TX_BFER BIT(1)
|
||||
#define EHT_MODE_MU_TX_BFEE BIT(2)
|
||||
#define EHT_MODE_MU_TX_BFER BIT(3)
|
||||
#define EHT_MODE_DL_OFDMA BIT(4)
|
||||
#define EHT_MODE_UL_OFDMA BIT(5)
|
||||
#define EHT_MODE_MUMIMO BIT(6)
|
||||
#define EHT_MODE_DL_OFDMA_TXBF BIT(7)
|
||||
#define EHT_MODE_DL_OFDMA_MUMIMO BIT(8)
|
||||
#define EHT_MODE_UL_OFDMA_MUMIMO BIT(9)
|
||||
|
||||
#define EHT_DL_MUOFDMA_ENABLE 1
|
||||
#define EHT_UL_MUOFDMA_ENABLE 1
|
||||
#define EHT_DL_MUMIMO_ENABLE 1
|
||||
#define EHT_UL_MUMIMO_ENABLE 1
|
||||
#define EHT_MU_BFEE_ENABLE 1
|
||||
#define EHT_SU_BFEE_ENABLE 1
|
||||
#define EHT_MU_BFER_ENABLE 1
|
||||
#define EHT_SU_BFER_ENABLE 1
|
||||
|
||||
#define HE_VHT_SOUNDING_MODE_ENABLE 1
|
||||
#define HE_SU_MU_SOUNDING_MODE_ENABLE 1
|
||||
#define HE_TRIG_NONTRIG_SOUNDING_MODE_ENABLE 1
|
||||
|
||||
Reference in New Issue
Block a user