Add UHR capabilities for bringing up the interface in UHR mode. This is required to validate UHR test cases. Signed-off-by: Karthikeyan Kathirvel --- drivers/net/wireless/virtual/mac80211_hwsim.c | 285 ++++++++++++++++++ 1 file changed, 285 insertions(+) diff --git a/drivers/net/wireless/virtual/mac80211_hwsim.c b/drivers/net/wireless/virtual/mac80211_hwsim.c index 4d9f5f87e814..5a576bbb7688 100644 --- a/drivers/net/wireless/virtual/mac80211_hwsim.c +++ b/drivers/net/wireless/virtual/mac80211_hwsim.c @@ -4478,6 +4478,49 @@ static const struct ieee80211_sband_iftype_data sband_capa_2ghz[] = { }, /* PPE threshold information is not supported */ }, + .uhr_cap = { + .has_uhr = true, + .mac = { + .mac_cap[0] = + IEEE80211_UHR_MAC_CAP0_DPS_SUPP | + IEEE80211_UHR_MAC_CAP0_DPS_ASSIST_SUPP | + IEEE80211_UHR_MAC_CAP0_DPS_AP_STATIC_HCM_SUPP | + IEEE80211_UHR_MAC_CAP0_NPCA_SUPP | + IEEE80211_UHR_MAC_CAP0_ENH_BSR_SUPP | + IEEE80211_UHR_MAC_CAP0_ADD_MAP_TID_SUPP | + IEEE80211_UHR_MAC_CAP0_EOTSP_SUPP, + .mac_cap[1] = + IEEE80211_UHR_MAC_CAP1_DSO_SUPP | + IEEE80211_UHR_MAC_CAP1_PEDCA_SUPP | + IEEE80211_UHR_MAC_CAP1_UL_LLI_SUPP | + IEEE80211_UHR_MAC_CAP1_P2P_LLI_SUPP | + IEEE80211_UHR_MAC_CAP1_PUO_SUPP | + IEEE80211_UHR_MAC_CAP1_AP_PUO_SUPP | + IEEE80211_UHR_MAC_CAP1_DUO_SUPP, + .mac_cap[2] = + IEEE80211_UHR_MAC_CAP2_OMC_UL_MU_DIS_RX_SUPP | + IEEE80211_UHR_MAC_CAP2_AOM_SUPP | + IEEE80211_UHR_MAC_CAP2_IFCS_LOC_SUPP | + IEEE80211_UHR_MAC_CAP2_UHR_TRS_SUPP | + IEEE80211_UHR_MAC_CAP2_TXSPG_SUPP | + IEEE80211_UHR_MAC_CAP2_TXOP_RET_IN_TXSPG | + IEEE80211_UHR_MAC_CAP2_UHR_OM_PU_TO_LOW, + .mac_cap[3] = + IEEE80211_UHR_MAC_CAP3_UHR_OM_PU_TO_HIGH | + IEEE80211_UHR_MAC_CAP3_PARAM_UPD_ADV_NOTIF_INTV | + IEEE80211_UHR_MAC_CAP3_UPD_IND_TIM_INTV_LOW, + .mac_cap[4] = + IEEE80211_UHR_MAC_CAP4_UPD_IND_TIM_INTV_HIGH | + IEEE80211_UHR_MAC_CAP4_BOUNDED_ESS | + IEEE80211_UHR_MAC_CAP4_BTM_ASSURANCE | + IEEE80211_UHR_MAC_CAP4_CO_BF_SUPP, + }, + .phy = { + .cap = + IEEE80211_UHR_PHY_CAP_ELR_RX | + IEEE80211_UHR_PHY_CAP_ELR_TX, + }, + }, }, { .types_mask = BIT(NL80211_IFTYPE_AP) | @@ -4586,6 +4629,50 @@ static const struct ieee80211_sband_iftype_data sband_capa_2ghz[] = { }, /* PPE threshold information is not supported */ }, + .uhr_cap = { + .has_uhr = true, + .mac = { + .mac_cap[0] = + IEEE80211_UHR_MAC_CAP0_DPS_SUPP | + IEEE80211_UHR_MAC_CAP0_DPS_ASSIST_SUPP | + IEEE80211_UHR_MAC_CAP0_DPS_AP_STATIC_HCM_SUPP | + IEEE80211_UHR_MAC_CAP0_NPCA_SUPP | + IEEE80211_UHR_MAC_CAP0_ENH_BSR_SUPP | + IEEE80211_UHR_MAC_CAP0_ADD_MAP_TID_SUPP | + IEEE80211_UHR_MAC_CAP0_EOTSP_SUPP, + .mac_cap[1] = + IEEE80211_UHR_MAC_CAP1_DSO_SUPP | + IEEE80211_UHR_MAC_CAP1_PEDCA_SUPP | + IEEE80211_UHR_MAC_CAP1_DBE_SUPP | + IEEE80211_UHR_MAC_CAP1_UL_LLI_SUPP | + IEEE80211_UHR_MAC_CAP1_P2P_LLI_SUPP | + IEEE80211_UHR_MAC_CAP1_PUO_SUPP | + IEEE80211_UHR_MAC_CAP1_AP_PUO_SUPP | + IEEE80211_UHR_MAC_CAP1_DUO_SUPP, + .mac_cap[2] = + IEEE80211_UHR_MAC_CAP2_OMC_UL_MU_DIS_RX_SUPP | + IEEE80211_UHR_MAC_CAP2_AOM_SUPP | + IEEE80211_UHR_MAC_CAP2_IFCS_LOC_SUPP | + IEEE80211_UHR_MAC_CAP2_UHR_TRS_SUPP | + IEEE80211_UHR_MAC_CAP2_TXSPG_SUPP | + IEEE80211_UHR_MAC_CAP2_TXOP_RET_IN_TXSPG | + IEEE80211_UHR_MAC_CAP2_UHR_OM_PU_TO_LOW, + .mac_cap[3] = + IEEE80211_UHR_MAC_CAP3_UHR_OM_PU_TO_HIGH | + IEEE80211_UHR_MAC_CAP3_PARAM_UPD_ADV_NOTIF_INTV | + IEEE80211_UHR_MAC_CAP3_UPD_IND_TIM_INTV_LOW, + .mac_cap[4] = + IEEE80211_UHR_MAC_CAP4_UPD_IND_TIM_INTV_HIGH | + IEEE80211_UHR_MAC_CAP4_BOUNDED_ESS | + IEEE80211_UHR_MAC_CAP4_BTM_ASSURANCE | + IEEE80211_UHR_MAC_CAP4_CO_BF_SUPP, + }, + .phy = { + .cap = + IEEE80211_UHR_PHY_CAP_ELR_RX | + IEEE80211_UHR_PHY_CAP_ELR_TX, + }, + }, }, #ifdef CONFIG_MAC80211_MESH { @@ -4755,6 +4842,55 @@ static const struct ieee80211_sband_iftype_data sband_capa_5ghz[] = { }, /* PPE threshold information is not supported */ }, + .uhr_cap = { + .has_uhr = true, + .mac = { + .mac_cap[0] = + IEEE80211_UHR_MAC_CAP0_DPS_SUPP | + IEEE80211_UHR_MAC_CAP0_DPS_ASSIST_SUPP | + IEEE80211_UHR_MAC_CAP0_DPS_AP_STATIC_HCM_SUPP | + IEEE80211_UHR_MAC_CAP0_NPCA_SUPP | + IEEE80211_UHR_MAC_CAP0_ENH_BSR_SUPP | + IEEE80211_UHR_MAC_CAP0_ADD_MAP_TID_SUPP | + IEEE80211_UHR_MAC_CAP0_EOTSP_SUPP, + .mac_cap[1] = + IEEE80211_UHR_MAC_CAP1_DSO_SUPP | + IEEE80211_UHR_MAC_CAP1_PEDCA_SUPP | + IEEE80211_UHR_MAC_CAP1_UL_LLI_SUPP | + IEEE80211_UHR_MAC_CAP1_P2P_LLI_SUPP | + IEEE80211_UHR_MAC_CAP1_PUO_SUPP | + IEEE80211_UHR_MAC_CAP1_AP_PUO_SUPP | + IEEE80211_UHR_MAC_CAP1_DUO_SUPP, + .mac_cap[2] = + IEEE80211_UHR_MAC_CAP2_OMC_UL_MU_DIS_RX_SUPP | + IEEE80211_UHR_MAC_CAP2_AOM_SUPP | + IEEE80211_UHR_MAC_CAP2_IFCS_LOC_SUPP | + IEEE80211_UHR_MAC_CAP2_UHR_TRS_SUPP | + IEEE80211_UHR_MAC_CAP2_TXSPG_SUPP | + IEEE80211_UHR_MAC_CAP2_TXOP_RET_IN_TXSPG | + IEEE80211_UHR_MAC_CAP2_UHR_OM_PU_TO_LOW, + .mac_cap[3] = + IEEE80211_UHR_MAC_CAP3_UHR_OM_PU_TO_HIGH | + IEEE80211_UHR_MAC_CAP3_PARAM_UPD_ADV_NOTIF_INTV | + IEEE80211_UHR_MAC_CAP3_UPD_IND_TIM_INTV_LOW, + .mac_cap[4] = + IEEE80211_UHR_MAC_CAP4_UPD_IND_TIM_INTV_HIGH | + IEEE80211_UHR_MAC_CAP4_BOUNDED_ESS | + IEEE80211_UHR_MAC_CAP4_BTM_ASSURANCE | + IEEE80211_UHR_MAC_CAP4_CO_BF_SUPP, + }, + .phy = { + .cap = + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_SND_NDP_LE80 | + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_DL_MU_LE80 | + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_SND_NDP_160 | + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_DL_MU_160 | + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_SND_NDP_320 | + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_DL_MU_320 | + IEEE80211_UHR_PHY_CAP_ELR_RX | + IEEE80211_UHR_PHY_CAP_ELR_TX, + }, + }, }, { .types_mask = BIT(NL80211_IFTYPE_AP) | @@ -4880,6 +5016,56 @@ static const struct ieee80211_sband_iftype_data sband_capa_5ghz[] = { }, /* PPE threshold information is not supported */ }, + .uhr_cap = { + .has_uhr = true, + .mac = { + .mac_cap[0] = + IEEE80211_UHR_MAC_CAP0_DPS_SUPP | + IEEE80211_UHR_MAC_CAP0_DPS_ASSIST_SUPP | + IEEE80211_UHR_MAC_CAP0_DPS_AP_STATIC_HCM_SUPP | + IEEE80211_UHR_MAC_CAP0_NPCA_SUPP | + IEEE80211_UHR_MAC_CAP0_ENH_BSR_SUPP | + IEEE80211_UHR_MAC_CAP0_ADD_MAP_TID_SUPP | + IEEE80211_UHR_MAC_CAP0_EOTSP_SUPP, + .mac_cap[1] = + IEEE80211_UHR_MAC_CAP1_DSO_SUPP | + IEEE80211_UHR_MAC_CAP1_PEDCA_SUPP | + IEEE80211_UHR_MAC_CAP1_DBE_SUPP | + IEEE80211_UHR_MAC_CAP1_UL_LLI_SUPP | + IEEE80211_UHR_MAC_CAP1_P2P_LLI_SUPP | + IEEE80211_UHR_MAC_CAP1_PUO_SUPP | + IEEE80211_UHR_MAC_CAP1_AP_PUO_SUPP | + IEEE80211_UHR_MAC_CAP1_DUO_SUPP, + .mac_cap[2] = + IEEE80211_UHR_MAC_CAP2_OMC_UL_MU_DIS_RX_SUPP | + IEEE80211_UHR_MAC_CAP2_AOM_SUPP | + IEEE80211_UHR_MAC_CAP2_IFCS_LOC_SUPP | + IEEE80211_UHR_MAC_CAP2_UHR_TRS_SUPP | + IEEE80211_UHR_MAC_CAP2_TXSPG_SUPP | + IEEE80211_UHR_MAC_CAP2_TXOP_RET_IN_TXSPG | + IEEE80211_UHR_MAC_CAP2_UHR_OM_PU_TO_LOW, + .mac_cap[3] = + IEEE80211_UHR_MAC_CAP3_UHR_OM_PU_TO_HIGH | + IEEE80211_UHR_MAC_CAP3_PARAM_UPD_ADV_NOTIF_INTV | + IEEE80211_UHR_MAC_CAP3_UPD_IND_TIM_INTV_LOW, + .mac_cap[4] = + IEEE80211_UHR_MAC_CAP4_UPD_IND_TIM_INTV_HIGH | + IEEE80211_UHR_MAC_CAP4_BOUNDED_ESS | + IEEE80211_UHR_MAC_CAP4_BTM_ASSURANCE | + IEEE80211_UHR_MAC_CAP4_CO_BF_SUPP, + }, + .phy = { + .cap = + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_SND_NDP_LE80 | + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_DL_MU_LE80 | + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_SND_NDP_160 | + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_DL_MU_160 | + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_SND_NDP_320 | + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_DL_MU_320 | + IEEE80211_UHR_PHY_CAP_ELR_RX | + IEEE80211_UHR_PHY_CAP_ELR_TX, + }, + }, }, #ifdef CONFIG_MAC80211_MESH { @@ -5073,6 +5259,55 @@ static const struct ieee80211_sband_iftype_data sband_capa_6ghz[] = { }, /* PPE threshold information is not supported */ }, + .uhr_cap = { + .has_uhr = true, + .mac = { + .mac_cap[0] = + IEEE80211_UHR_MAC_CAP0_DPS_SUPP | + IEEE80211_UHR_MAC_CAP0_DPS_ASSIST_SUPP | + IEEE80211_UHR_MAC_CAP0_DPS_AP_STATIC_HCM_SUPP | + IEEE80211_UHR_MAC_CAP0_NPCA_SUPP | + IEEE80211_UHR_MAC_CAP0_ENH_BSR_SUPP | + IEEE80211_UHR_MAC_CAP0_ADD_MAP_TID_SUPP | + IEEE80211_UHR_MAC_CAP0_EOTSP_SUPP, + .mac_cap[1] = + IEEE80211_UHR_MAC_CAP1_DSO_SUPP | + IEEE80211_UHR_MAC_CAP1_PEDCA_SUPP | + IEEE80211_UHR_MAC_CAP1_UL_LLI_SUPP | + IEEE80211_UHR_MAC_CAP1_P2P_LLI_SUPP | + IEEE80211_UHR_MAC_CAP1_PUO_SUPP | + IEEE80211_UHR_MAC_CAP1_AP_PUO_SUPP | + IEEE80211_UHR_MAC_CAP1_DUO_SUPP, + .mac_cap[2] = + IEEE80211_UHR_MAC_CAP2_OMC_UL_MU_DIS_RX_SUPP | + IEEE80211_UHR_MAC_CAP2_AOM_SUPP | + IEEE80211_UHR_MAC_CAP2_IFCS_LOC_SUPP | + IEEE80211_UHR_MAC_CAP2_UHR_TRS_SUPP | + IEEE80211_UHR_MAC_CAP2_TXSPG_SUPP | + IEEE80211_UHR_MAC_CAP2_TXOP_RET_IN_TXSPG | + IEEE80211_UHR_MAC_CAP2_UHR_OM_PU_TO_LOW, + .mac_cap[3] = + IEEE80211_UHR_MAC_CAP3_UHR_OM_PU_TO_HIGH | + IEEE80211_UHR_MAC_CAP3_PARAM_UPD_ADV_NOTIF_INTV | + IEEE80211_UHR_MAC_CAP3_UPD_IND_TIM_INTV_LOW, + .mac_cap[4] = + IEEE80211_UHR_MAC_CAP4_UPD_IND_TIM_INTV_HIGH | + IEEE80211_UHR_MAC_CAP4_BOUNDED_ESS | + IEEE80211_UHR_MAC_CAP4_BTM_ASSURANCE | + IEEE80211_UHR_MAC_CAP4_CO_BF_SUPP, + }, + .phy = { + .cap = + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_SND_NDP_LE80 | + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_DL_MU_LE80 | + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_SND_NDP_160 | + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_DL_MU_160 | + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_SND_NDP_320 | + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_DL_MU_320 | + IEEE80211_UHR_PHY_CAP_ELR_RX | + IEEE80211_UHR_PHY_CAP_ELR_TX, + }, + }, }, { .types_mask = BIT(NL80211_IFTYPE_AP) | @@ -5219,6 +5454,56 @@ static const struct ieee80211_sband_iftype_data sband_capa_6ghz[] = { }, /* PPE threshold information is not supported */ }, + .uhr_cap = { + .has_uhr = true, + .mac = { + .mac_cap[0] = + IEEE80211_UHR_MAC_CAP0_DPS_SUPP | + IEEE80211_UHR_MAC_CAP0_DPS_ASSIST_SUPP | + IEEE80211_UHR_MAC_CAP0_DPS_AP_STATIC_HCM_SUPP | + IEEE80211_UHR_MAC_CAP0_NPCA_SUPP | + IEEE80211_UHR_MAC_CAP0_ENH_BSR_SUPP | + IEEE80211_UHR_MAC_CAP0_ADD_MAP_TID_SUPP | + IEEE80211_UHR_MAC_CAP0_EOTSP_SUPP, + .mac_cap[1] = + IEEE80211_UHR_MAC_CAP1_DSO_SUPP | + IEEE80211_UHR_MAC_CAP1_PEDCA_SUPP | + IEEE80211_UHR_MAC_CAP1_DBE_SUPP | + IEEE80211_UHR_MAC_CAP1_UL_LLI_SUPP | + IEEE80211_UHR_MAC_CAP1_P2P_LLI_SUPP | + IEEE80211_UHR_MAC_CAP1_PUO_SUPP | + IEEE80211_UHR_MAC_CAP1_AP_PUO_SUPP | + IEEE80211_UHR_MAC_CAP1_DUO_SUPP, + .mac_cap[2] = + IEEE80211_UHR_MAC_CAP2_OMC_UL_MU_DIS_RX_SUPP | + IEEE80211_UHR_MAC_CAP2_AOM_SUPP | + IEEE80211_UHR_MAC_CAP2_IFCS_LOC_SUPP | + IEEE80211_UHR_MAC_CAP2_UHR_TRS_SUPP | + IEEE80211_UHR_MAC_CAP2_TXSPG_SUPP | + IEEE80211_UHR_MAC_CAP2_TXOP_RET_IN_TXSPG | + IEEE80211_UHR_MAC_CAP2_UHR_OM_PU_TO_LOW, + .mac_cap[3] = + IEEE80211_UHR_MAC_CAP3_UHR_OM_PU_TO_HIGH | + IEEE80211_UHR_MAC_CAP3_PARAM_UPD_ADV_NOTIF_INTV | + IEEE80211_UHR_MAC_CAP3_UPD_IND_TIM_INTV_LOW, + .mac_cap[4] = + IEEE80211_UHR_MAC_CAP4_UPD_IND_TIM_INTV_HIGH | + IEEE80211_UHR_MAC_CAP4_BOUNDED_ESS | + IEEE80211_UHR_MAC_CAP4_BTM_ASSURANCE | + IEEE80211_UHR_MAC_CAP4_CO_BF_SUPP, + }, + .phy = { + .cap = + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_SND_NDP_LE80 | + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_DL_MU_LE80 | + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_SND_NDP_160 | + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_DL_MU_160 | + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_SND_NDP_320 | + IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_DL_MU_320 | + IEEE80211_UHR_PHY_CAP_ELR_RX | + IEEE80211_UHR_PHY_CAP_ELR_TX, + }, + }, }, #ifdef CONFIG_MAC80211_MESH { -- 2.34.1