Index: hostapd-2020-07-02-58b384f4/hostapd/config_file.c =================================================================== --- hostapd-2020-07-02-58b384f4.orig/hostapd/config_file.c +++ hostapd-2020-07-02-58b384f4/hostapd/config_file.c @@ -3455,6 +3455,8 @@ static int hostapd_config_fill(struct ho 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_ul_mumimo") == 0) { + conf->he_phy_capab.he_ul_mumimo = atoi(pos); } else if (os_strcmp(buf, "he_bss_color") == 0) { conf->he_op.he_bss_color = atoi(pos); if (conf->he_op.he_bss_color > 63) Index: hostapd-2020-07-02-58b384f4/hostapd/hostapd.conf =================================================================== --- hostapd-2020-07-02-58b384f4.orig/hostapd/hostapd.conf +++ hostapd-2020-07-02-58b384f4/hostapd/hostapd.conf @@ -801,7 +801,13 @@ wmm_ac_vo_acm=0 # 1 = supported #he_mu_beamformer=1 -# he_bss_color: +#he_ul_mumimo: HE Uplink multiple user MIMO support +# -1 or unspecified = Decided by firmware or underlying hardware(Default) +# 0 = not supported +# 1 = supported +#he_mu_beamformer=1 + + # he_bss_color: # 0 = disable # 1-63 = pre-defined color # 64+ = random color Index: hostapd-2020-07-02-58b384f4/src/ap/ap_config.c =================================================================== --- hostapd-2020-07-02-58b384f4.orig/src/ap/ap_config.c +++ hostapd-2020-07-02-58b384f4/src/ap/ap_config.c @@ -265,6 +265,8 @@ struct hostapd_config * hostapd_config_d HE_OPERATION_RTS_THRESHOLD_OFFSET; /* Set default basic MCS/NSS set to single stream MCS 0-7 */ conf->he_op.he_basic_mcs_nss_set = 0xfffc; + /* Set default to be decided by Driver/underlying HW */ + conf->he_phy_capab.he_ul_mumimo = -1; conf->he_op.he_bss_color_disabled = 1; conf->he_op.he_bss_color_partial = 0; conf->he_op.he_bss_color = 1; Index: hostapd-2020-07-02-58b384f4/src/ap/ap_config.h =================================================================== --- hostapd-2020-07-02-58b384f4.orig/src/ap/ap_config.h +++ hostapd-2020-07-02-58b384f4/src/ap/ap_config.h @@ -878,6 +878,7 @@ struct he_phy_capabilities_info { bool he_su_beamformer; bool he_su_beamformee; bool he_mu_beamformer; + int he_ul_mumimo; }; /** Index: hostapd-2020-07-02-58b384f4/src/ap/hw_features.c =================================================================== --- hostapd-2020-07-02-58b384f4.orig/src/ap/hw_features.c +++ hostapd-2020-07-02-58b384f4/src/ap/hw_features.c @@ -714,9 +714,10 @@ static int ieee80211ax_supported_he_capa HE_CAP_CHECK(hw->phy_cap, HE_PHYCAP_SPR_SR_CAPB, HE_PHYCAP_SPR_SR_CAPB_IDX, conf->spr.sr_control); - HE_CAP_CHECK2(hw->phy_cap, HE_PHYCAP_UL_MUMIMO_CAPB, - HE_PHYCAP_UL_MUMIMO_CAPB_IDX, HE_PHYCAP_UL_MUOFDMA_CAPB, - HE_PHYCAP_UL_MUOFDMA_CAPB_IDX, conf->he_mu_edca.he_qos_info); + if (conf->he_phy_capab.he_ul_mumimo != -1) + HE_CAP_CHECK(hw->phy_cap, HE_PHYCAP_UL_MUMIMO_CAPB, + HE_PHYCAP_UL_MUMIMO_CAPB_IDX, + conf->he_phy_capab.he_ul_mumimo); HE_CAP_CHECK2(hw->mac_cap, HE_MACCAP_TWT_REQUESTER, HE_MACCAP_TWT_REQUESTER_IDX, HE_MACCAP_TWT_RESPONDER, HE_MACCAP_TWT_RESPONDER_IDX, Index: hostapd-2020-07-02-58b384f4/src/ap/ieee802_11_he.c =================================================================== --- hostapd-2020-07-02-58b384f4.orig/src/ap/ieee802_11_he.c +++ hostapd-2020-07-02-58b384f4/src/ap/ieee802_11_he.c @@ -151,6 +151,13 @@ u8 * hostapd_eid_he_capab(struct hostapd cap->he_phy_capab_info[HE_PHYCAP_MU_BEAMFORMER_CAPAB_IDX] &= ~HE_PHYCAP_MU_BEAMFORMER_CAPAB; + if (hapd->iface->conf->he_phy_capab.he_ul_mumimo == 1) + cap->he_phy_capab_info[HE_PHYCAP_UL_MUMIMO_CAPB_IDX] |= + HE_PHYCAP_UL_MUMIMO_CAPB; + else if (hapd->iface->conf->he_phy_capab.he_ul_mumimo == 0) + cap->he_phy_capab_info[HE_PHYCAP_UL_MUMIMO_CAPB_IDX] &= + ~HE_PHYCAP_UL_MUMIMO_CAPB; + cap->he_phy_capab_info[HE_PHYCAP_CHANNEL_WIDTH_SET_IDX] &= he_oper_chwidth;