blob: dd966238b82238f7654f0f96ba3a30f9c7de4130 [file] [log] [blame]
From ea7da2297d396febe75de0d7cf77cba9d2eab778 Mon Sep 17 00:00:00 2001
From: MeiChia Chiu <meichia.chiu@mediatek.com>
Date: Thu, 12 Jan 2023 15:18:19 +0800
Subject: [PATCH 13/40] hostapd: mtk: Add he_ldpc configuration
---
hostapd/config_file.c | 2 ++
hostapd/hostapd.conf | 5 +++++
src/ap/ap_config.c | 1 +
src/ap/ap_config.h | 1 +
src/ap/ieee802_11_he.c | 7 +++++++
src/common/ieee802_11_defs.h | 3 +++
6 files changed, 19 insertions(+)
diff --git a/hostapd/config_file.c b/hostapd/config_file.c
index d17e50e..04ca433 100644
--- a/hostapd/config_file.c
+++ b/hostapd/config_file.c
@@ -3515,6 +3515,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
conf->he_phy_capab.he_su_beamformee = atoi(pos);
} else if (os_strcmp(buf, "he_mu_beamformer") == 0) {
conf->he_phy_capab.he_mu_beamformer = atoi(pos);
+ } else if (os_strcmp(buf, "he_ldpc") == 0) {
+ conf->he_phy_capab.he_ldpc = atoi(pos);
} else if (os_strcmp(buf, "he_bss_color") == 0) {
conf->he_op.he_bss_color = atoi(pos) & 0x3f;
conf->he_op.he_bss_color_disabled = 0;
diff --git a/hostapd/hostapd.conf b/hostapd/hostapd.conf
index 30fb06d..fd42c50 100644
--- a/hostapd/hostapd.conf
+++ b/hostapd/hostapd.conf
@@ -833,6 +833,11 @@ wmm_ac_vo_acm=0
# 1 = supported
#he_mu_beamformer=1
+#he_ldpc: HE LDPC support
+# 0 = not supported
+# 1 = supported (default)
+#he_ldpc=1
+
# he_bss_color: BSS color (1-63)
#he_bss_color=1
diff --git a/src/ap/ap_config.c b/src/ap/ap_config.c
index f519a76..223db56 100644
--- a/src/ap/ap_config.c
+++ b/src/ap/ap_config.c
@@ -269,6 +269,7 @@ struct hostapd_config * hostapd_config_defaults(void)
#endif /* CONFIG_ACS */
#ifdef CONFIG_IEEE80211AX
+ conf->he_phy_capab.he_ldpc = 1;
conf->he_op.he_rts_threshold = HE_OPERATION_RTS_THRESHOLD_MASK >>
HE_OPERATION_RTS_THRESHOLD_OFFSET;
/* Set default basic MCS/NSS set to single stream MCS 0-7 */
diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h
index b8f6680..5b2dbff 100644
--- a/src/ap/ap_config.h
+++ b/src/ap/ap_config.h
@@ -956,6 +956,7 @@ struct hostapd_bss_config {
* struct he_phy_capabilities_info - HE PHY capabilities
*/
struct he_phy_capabilities_info {
+ bool he_ldpc;
bool he_su_beamformer;
bool he_su_beamformee;
bool he_mu_beamformer;
diff --git a/src/ap/ieee802_11_he.c b/src/ap/ieee802_11_he.c
index 548a448..9407dd6 100644
--- a/src/ap/ieee802_11_he.c
+++ b/src/ap/ieee802_11_he.c
@@ -138,6 +138,13 @@ u8 * hostapd_eid_he_capab(struct hostapd_data *hapd, u8 *eid,
os_memcpy(&cap->optional[mcs_nss_size],
mode->he_capab[opmode].ppet, ppet_size);
+ if (hapd->iface->conf->he_phy_capab.he_ldpc)
+ cap->he_phy_capab_info[HE_PHYCAP_LDPC_CODING_IN_PAYLOAD_IDX] |=
+ HE_PHYCAP_LDPC_CODING_IN_PAYLOAD;
+ else
+ cap->he_phy_capab_info[HE_PHYCAP_LDPC_CODING_IN_PAYLOAD_IDX] &=
+ ~HE_PHYCAP_LDPC_CODING_IN_PAYLOAD;
+
if (hapd->iface->conf->he_phy_capab.he_su_beamformer)
cap->he_phy_capab_info[HE_PHYCAP_SU_BEAMFORMER_CAPAB_IDX] |=
HE_PHYCAP_SU_BEAMFORMER_CAPAB;
diff --git a/src/common/ieee802_11_defs.h b/src/common/ieee802_11_defs.h
index 0b7b776..cf3ef98 100644
--- a/src/common/ieee802_11_defs.h
+++ b/src/common/ieee802_11_defs.h
@@ -2357,6 +2357,9 @@ struct ieee80211_spatial_reuse {
#define HE_PHYCAP_CHANNEL_WIDTH_SET_160MHZ_IN_5G ((u8) BIT(3))
#define HE_PHYCAP_CHANNEL_WIDTH_SET_80PLUS80MHZ_IN_5G ((u8) BIT(4))
+#define HE_PHYCAP_LDPC_CODING_IN_PAYLOAD_IDX 1
+#define HE_PHYCAP_LDPC_CODING_IN_PAYLOAD ((u8) BIT(5))
+
#define HE_PHYCAP_SU_BEAMFORMER_CAPAB_IDX 3
#define HE_PHYCAP_SU_BEAMFORMER_CAPAB ((u8) BIT(7))
#define HE_PHYCAP_SU_BEAMFORMEE_CAPAB_IDX 4
--
2.18.0