Commit 6b819f89 authored by Ramya Gnanasekar's avatar Ramya Gnanasekar Committed by Kalle Valo
Browse files

wifi: ath12k: register EHT mesh capabilities



The capabilities for the EHT mesh are generated from the capabilities
reported by the firmware. But the firmware only reports the overall
capabilities and not the one which are specific for mesh.

Capabilities which requires infrastructure setup with a main STA(AP)
controlling operations are not needed for mesh and hence remove these
capabilities from the list.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0-02903-QCAHKSWPL_SILICONZ-1
Signed-off-by: default avatarRamya Gnanasekar <quic_rgnanase@quicinc.com>
Acked-by: default avatarJeff Johnson <quic_jjohnson@quicinc.com>
Signed-off-by: default avatarKalle Valo <quic_kvalo@quicinc.com>
Link: https://lore.kernel.org/r/20231013070007.25597-3-quic_rgnanase@quicinc.com
parent 9d2c23d2
Loading
Loading
Loading
Loading
+45 −0
Original line number Diff line number Diff line
@@ -4554,6 +4554,48 @@ static void ath12k_mac_copy_eht_ppe_thresh(struct ath12k_wmi_ppe_threshold_arg *
	}
}

static void
ath12k_mac_filter_eht_cap_mesh(struct ieee80211_eht_cap_elem_fixed
			       *eht_cap_elem)
{
	u8 m;

	m = IEEE80211_EHT_MAC_CAP0_EPCS_PRIO_ACCESS;
	eht_cap_elem->mac_cap_info[0] &= ~m;

	m = IEEE80211_EHT_PHY_CAP0_PARTIAL_BW_UL_MU_MIMO;
	eht_cap_elem->phy_cap_info[0] &= ~m;

	m = IEEE80211_EHT_PHY_CAP3_NG_16_MU_FEEDBACK |
	    IEEE80211_EHT_PHY_CAP3_CODEBOOK_7_5_MU_FDBK |
	    IEEE80211_EHT_PHY_CAP3_TRIG_MU_BF_PART_BW_FDBK |
	    IEEE80211_EHT_PHY_CAP3_TRIG_CQI_FDBK;
	eht_cap_elem->phy_cap_info[3] &= ~m;

	m = IEEE80211_EHT_PHY_CAP4_PART_BW_DL_MU_MIMO |
	    IEEE80211_EHT_PHY_CAP4_PSR_SR_SUPP |
	    IEEE80211_EHT_PHY_CAP4_POWER_BOOST_FACT_SUPP |
	    IEEE80211_EHT_PHY_CAP4_EHT_MU_PPDU_4_EHT_LTF_08_GI;
	eht_cap_elem->phy_cap_info[4] &= ~m;

	m = IEEE80211_EHT_PHY_CAP5_NON_TRIG_CQI_FEEDBACK |
	    IEEE80211_EHT_PHY_CAP5_TX_LESS_242_TONE_RU_SUPP |
	    IEEE80211_EHT_PHY_CAP5_RX_LESS_242_TONE_RU_SUPP |
	    IEEE80211_EHT_PHY_CAP5_MAX_NUM_SUPP_EHT_LTF_MASK;
	eht_cap_elem->phy_cap_info[5] &= ~m;

	m = IEEE80211_EHT_PHY_CAP6_MAX_NUM_SUPP_EHT_LTF_MASK;
	eht_cap_elem->phy_cap_info[6] &= ~m;

	m = IEEE80211_EHT_PHY_CAP7_NON_OFDMA_UL_MU_MIMO_80MHZ |
	    IEEE80211_EHT_PHY_CAP7_NON_OFDMA_UL_MU_MIMO_160MHZ |
	    IEEE80211_EHT_PHY_CAP7_NON_OFDMA_UL_MU_MIMO_320MHZ |
	    IEEE80211_EHT_PHY_CAP7_MU_BEAMFORMER_80MHZ |
	    IEEE80211_EHT_PHY_CAP7_MU_BEAMFORMER_160MHZ |
	    IEEE80211_EHT_PHY_CAP7_MU_BEAMFORMER_320MHZ;
	eht_cap_elem->phy_cap_info[7] &= ~m;
}

static void ath12k_mac_copy_eht_cap(struct ath12k *ar,
				    struct ath12k_band_cap *band_cap,
				    struct ieee80211_he_cap_elem *he_cap_elem,
@@ -4592,6 +4634,9 @@ static void ath12k_mac_copy_eht_cap(struct ath12k *ar,
			  IEEE80211_EHT_PHY_CAP7_MU_BEAMFORMER_160MHZ |
			  IEEE80211_EHT_PHY_CAP7_MU_BEAMFORMER_320MHZ);
		break;
	case NL80211_IFTYPE_MESH_POINT:
		ath12k_mac_filter_eht_cap_mesh(eht_cap_elem);
		break;
	default:
		break;
	}