blob: 1c5caccc3e6989a0c530ed19ed9eec3fb887fca2 [file] [log] [blame]
developerec5af762023-06-13 11:04:21 +08001From 43c8934074a4f6fd1e98143b3bd011e71fe69fdb Mon Sep 17 00:00:00 2001
2From: MeiChia Chiu <meichia.chiu@mediatek.com>
3Date: Fri Jun 9 09:03:05 2023 +0800
4Subject: hostapd: mtk: Add HE capabilities check
5
6Add HE capabilities check.
7Since "HE capabilities" check has been removed by driver,
8add the support for "HE capabilities" check in hostapd.
9
10---
11 src/ap/hw_features.c | 26 ++++++++++++++++++++++++++
12 1 files changed, 26 insertions(+)
13
14diff --git a/src/ap/hw_features.c b/src/ap/hw_features.c
15index 9967494..309f2d5 100644
16--- a/src/ap/hw_features.c
17+++ b/src/ap/hw_features.c
18@@ -680,6 +680,32 @@ static int ieee80211ac_supported_vht_capab(struct hostapd_iface *iface)
19 #ifdef CONFIG_IEEE80211AX
20 static int ieee80211ax_supported_he_capab(struct hostapd_iface *iface)
21 {
22+ struct hostapd_hw_modes *mode = iface->current_mode;
23+ struct he_capabilities *he_cap = &mode->he_capab[IEEE80211_MODE_AP];
24+ struct hostapd_config *conf = iface->conf;
25+
26+#define HE_CAP_CHECK(hw_cap, field, phy_idx, cfg_cap) \
27+ do { \
28+ if (cfg_cap && !(hw_cap[phy_idx] & field)) { \
29+ wpa_printf(MSG_ERROR, "Driver does not support configured" \
30+ " HE capability [%s]", #field); \
31+ return 0; \
32+ } \
33+ } while (0)
34+
35+ HE_CAP_CHECK(he_cap->phy_cap, HE_PHYCAP_LDPC_CODING_IN_PAYLOAD,
36+ HE_PHYCAP_LDPC_CODING_IN_PAYLOAD_IDX,
37+ conf->he_phy_capab.he_ldpc);
38+ HE_CAP_CHECK(he_cap->phy_cap, HE_PHYCAP_SU_BEAMFORMER_CAPAB,
39+ HE_PHYCAP_SU_BEAMFORMER_CAPAB_IDX,
40+ conf->he_phy_capab.he_su_beamformer);
41+ HE_CAP_CHECK(he_cap->phy_cap, HE_PHYCAP_SU_BEAMFORMEE_CAPAB,
42+ HE_PHYCAP_SU_BEAMFORMEE_CAPAB_IDX,
43+ conf->he_phy_capab.he_su_beamformee);
44+ HE_CAP_CHECK(he_cap->phy_cap, HE_PHYCAP_MU_BEAMFORMER_CAPAB,
45+ HE_PHYCAP_MU_BEAMFORMER_CAPAB_IDX,
46+ conf->he_phy_capab.he_mu_beamformer);
47+
48 return 1;
49 }
50 #endif /* CONFIG_IEEE80211AX */
51--
522.39.0
53