Message ID | 20210906175350.13461-1-ramonreisfontes@gmail.com |
---|---|
State | New |
Headers | show |
Series | mac80211_hwsim: enable 6GHz channels | expand |
Hi Ramon, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on mac80211-next/master] [also build test WARNING on mac80211/master linux/master linus/master v5.14 next-20210910] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Ramon-Fontes/mac80211_hwsim-enable-6GHz-channels/20210907-015533 base: https://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git master config: i386-randconfig-s002-20210912 (attached as .config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 reproduce: # apt-get install sparse # sparse version: v0.6.4-dirty # https://github.com/0day-ci/linux/commit/61f607d25097df8c64fc1a21b0375f69a1a38e94 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Ramon-Fontes/mac80211_hwsim-enable-6GHz-channels/20210907-015533 git checkout 61f607d25097df8c64fc1a21b0375f69a1a38e94 # save the attached .config to linux build tree make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=i386 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> sparse warnings: (new ones prefixed by >>) >> drivers/net/wireless/mac80211_hwsim.c:3000:70: sparse: sparse: incorrect type in initializer (different base types) @@ expected restricted __le16 [usertype] capa @@ got int @@ drivers/net/wireless/mac80211_hwsim.c:3000:70: sparse: expected restricted __le16 [usertype] capa drivers/net/wireless/mac80211_hwsim.c:3000:70: sparse: got int drivers/net/wireless/mac80211_hwsim.c:3058:70: sparse: sparse: incorrect type in initializer (different base types) @@ expected restricted __le16 [usertype] capa @@ got int @@ drivers/net/wireless/mac80211_hwsim.c:3058:70: sparse: expected restricted __le16 [usertype] capa drivers/net/wireless/mac80211_hwsim.c:3058:70: sparse: got int vim +3000 drivers/net/wireless/mac80211_hwsim.c 2990 2991 static const struct ieee80211_sband_iftype_data he_capa_6ghz[] = { 2992 { 2993 /* TODO: should we support other types, e.g., P2P?*/ 2994 .types_mask = BIT(NL80211_IFTYPE_STATION) | 2995 BIT(NL80211_IFTYPE_AP), 2996 .he_6ghz_capa = { 2997 .capa = IEEE80211_HE_6GHZ_CAP_MIN_MPDU_START | 2998 IEEE80211_HE_6GHZ_CAP_MAX_AMPDU_LEN_EXP | 2999 IEEE80211_HE_6GHZ_CAP_MAX_MPDU_LEN | > 3000 IEEE80211_HE_6GHZ_CAP_TX_ANTPAT_CONS | 3001 IEEE80211_HE_6GHZ_CAP_RX_ANTPAT_CONS, 3002 }, 3003 .he_cap = { 3004 .has_he = true, 3005 .he_cap_elem = { 3006 .mac_cap_info[0] = 3007 IEEE80211_HE_MAC_CAP0_HTC_HE, 3008 .mac_cap_info[1] = 3009 IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_16US | 3010 IEEE80211_HE_MAC_CAP1_MULTI_TID_AGG_RX_QOS_8, 3011 .mac_cap_info[2] = 3012 IEEE80211_HE_MAC_CAP2_BSR | 3013 IEEE80211_HE_MAC_CAP2_MU_CASCADING | 3014 IEEE80211_HE_MAC_CAP2_ACK_EN, 3015 .mac_cap_info[3] = 3016 IEEE80211_HE_MAC_CAP3_OMI_CONTROL | 3017 IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3, 3018 .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU, 3019 .phy_cap_info[0] = 3020 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G | 3021 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G | 3022 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G, 3023 .phy_cap_info[1] = 3024 IEEE80211_HE_PHY_CAP1_PREAMBLE_PUNC_RX_MASK | 3025 IEEE80211_HE_PHY_CAP1_DEVICE_CLASS_A | 3026 IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD | 3027 IEEE80211_HE_PHY_CAP1_MIDAMBLE_RX_TX_MAX_NSTS, 3028 .phy_cap_info[2] = 3029 IEEE80211_HE_PHY_CAP2_NDP_4x_LTF_AND_3_2US | 3030 IEEE80211_HE_PHY_CAP2_STBC_TX_UNDER_80MHZ | 3031 IEEE80211_HE_PHY_CAP2_STBC_RX_UNDER_80MHZ | 3032 IEEE80211_HE_PHY_CAP2_UL_MU_FULL_MU_MIMO | 3033 IEEE80211_HE_PHY_CAP2_UL_MU_PARTIAL_MU_MIMO, 3034 3035 /* Leave all the other PHY capability bytes 3036 * unset, as DCM, beam forming, RU and PPE 3037 * threshold information are not supported 3038 */ 3039 }, 3040 .he_mcs_nss_supp = { 3041 .rx_mcs_80 = cpu_to_le16(0xfffa), 3042 .tx_mcs_80 = cpu_to_le16(0xfffa), 3043 .rx_mcs_160 = cpu_to_le16(0xfffa), 3044 .tx_mcs_160 = cpu_to_le16(0xfffa), 3045 .rx_mcs_80p80 = cpu_to_le16(0xfffa), 3046 .tx_mcs_80p80 = cpu_to_le16(0xfffa), 3047 }, 3048 }, 3049 }, 3050 #ifdef CONFIG_MAC80211_MESH 3051 { 3052 /* TODO: should we support other types, e.g., IBSS?*/ 3053 .types_mask = BIT(NL80211_IFTYPE_MESH_POINT), 3054 .he_6ghz_capa = { 3055 .capa = IEEE80211_HE_6GHZ_CAP_MIN_MPDU_START | 3056 IEEE80211_HE_6GHZ_CAP_MAX_AMPDU_LEN_EXP | 3057 IEEE80211_HE_6GHZ_CAP_MAX_MPDU_LEN | 3058 IEEE80211_HE_6GHZ_CAP_TX_ANTPAT_CONS | 3059 IEEE80211_HE_6GHZ_CAP_RX_ANTPAT_CONS, 3060 }, 3061 .he_cap = { 3062 .has_he = true, 3063 .he_cap_elem = { 3064 .mac_cap_info[0] = 3065 IEEE80211_HE_MAC_CAP0_HTC_HE, 3066 .mac_cap_info[1] = 3067 IEEE80211_HE_MAC_CAP1_MULTI_TID_AGG_RX_QOS_8, 3068 .mac_cap_info[2] = 3069 IEEE80211_HE_MAC_CAP2_ACK_EN, 3070 .mac_cap_info[3] = 3071 IEEE80211_HE_MAC_CAP3_OMI_CONTROL | 3072 IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3, 3073 .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU, 3074 .phy_cap_info[0] = 3075 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G | 3076 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G | 3077 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G, 3078 .phy_cap_info[1] = 3079 IEEE80211_HE_PHY_CAP1_PREAMBLE_PUNC_RX_MASK | 3080 IEEE80211_HE_PHY_CAP1_DEVICE_CLASS_A | 3081 IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD | 3082 IEEE80211_HE_PHY_CAP1_MIDAMBLE_RX_TX_MAX_NSTS, 3083 .phy_cap_info[2] = 0, 3084 3085 /* Leave all the other PHY capability bytes 3086 * unset, as DCM, beam forming, RU and PPE 3087 * threshold information are not supported 3088 */ 3089 }, 3090 .he_mcs_nss_supp = { 3091 .rx_mcs_80 = cpu_to_le16(0xfffa), 3092 .tx_mcs_80 = cpu_to_le16(0xfffa), 3093 .rx_mcs_160 = cpu_to_le16(0xfffa), 3094 .tx_mcs_160 = cpu_to_le16(0xfffa), 3095 .rx_mcs_80p80 = cpu_to_le16(0xfffa), 3096 .tx_mcs_80p80 = cpu_to_le16(0xfffa), 3097 }, 3098 }, 3099 }, 3100 #endif 3101 }; 3102 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c index ffa894f73..d36770db1 100644 --- a/drivers/net/wireless/mac80211_hwsim.c +++ b/drivers/net/wireless/mac80211_hwsim.c @@ -2988,6 +2988,118 @@ static const struct ieee80211_sband_iftype_data he_capa_5ghz[] = { #endif }; +static const struct ieee80211_sband_iftype_data he_capa_6ghz[] = { + { + /* TODO: should we support other types, e.g., P2P?*/ + .types_mask = BIT(NL80211_IFTYPE_STATION) | + BIT(NL80211_IFTYPE_AP), + .he_6ghz_capa = { + .capa = IEEE80211_HE_6GHZ_CAP_MIN_MPDU_START | + IEEE80211_HE_6GHZ_CAP_MAX_AMPDU_LEN_EXP | + IEEE80211_HE_6GHZ_CAP_MAX_MPDU_LEN | + IEEE80211_HE_6GHZ_CAP_TX_ANTPAT_CONS | + IEEE80211_HE_6GHZ_CAP_RX_ANTPAT_CONS, + }, + .he_cap = { + .has_he = true, + .he_cap_elem = { + .mac_cap_info[0] = + IEEE80211_HE_MAC_CAP0_HTC_HE, + .mac_cap_info[1] = + IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_16US | + IEEE80211_HE_MAC_CAP1_MULTI_TID_AGG_RX_QOS_8, + .mac_cap_info[2] = + IEEE80211_HE_MAC_CAP2_BSR | + IEEE80211_HE_MAC_CAP2_MU_CASCADING | + IEEE80211_HE_MAC_CAP2_ACK_EN, + .mac_cap_info[3] = + IEEE80211_HE_MAC_CAP3_OMI_CONTROL | + IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3, + .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU, + .phy_cap_info[0] = + IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G | + IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G | + IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G, + .phy_cap_info[1] = + IEEE80211_HE_PHY_CAP1_PREAMBLE_PUNC_RX_MASK | + IEEE80211_HE_PHY_CAP1_DEVICE_CLASS_A | + IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD | + IEEE80211_HE_PHY_CAP1_MIDAMBLE_RX_TX_MAX_NSTS, + .phy_cap_info[2] = + IEEE80211_HE_PHY_CAP2_NDP_4x_LTF_AND_3_2US | + IEEE80211_HE_PHY_CAP2_STBC_TX_UNDER_80MHZ | + IEEE80211_HE_PHY_CAP2_STBC_RX_UNDER_80MHZ | + IEEE80211_HE_PHY_CAP2_UL_MU_FULL_MU_MIMO | + IEEE80211_HE_PHY_CAP2_UL_MU_PARTIAL_MU_MIMO, + + /* Leave all the other PHY capability bytes + * unset, as DCM, beam forming, RU and PPE + * threshold information are not supported + */ + }, + .he_mcs_nss_supp = { + .rx_mcs_80 = cpu_to_le16(0xfffa), + .tx_mcs_80 = cpu_to_le16(0xfffa), + .rx_mcs_160 = cpu_to_le16(0xfffa), + .tx_mcs_160 = cpu_to_le16(0xfffa), + .rx_mcs_80p80 = cpu_to_le16(0xfffa), + .tx_mcs_80p80 = cpu_to_le16(0xfffa), + }, + }, + }, +#ifdef CONFIG_MAC80211_MESH + { + /* TODO: should we support other types, e.g., IBSS?*/ + .types_mask = BIT(NL80211_IFTYPE_MESH_POINT), + .he_6ghz_capa = { + .capa = IEEE80211_HE_6GHZ_CAP_MIN_MPDU_START | + IEEE80211_HE_6GHZ_CAP_MAX_AMPDU_LEN_EXP | + IEEE80211_HE_6GHZ_CAP_MAX_MPDU_LEN | + IEEE80211_HE_6GHZ_CAP_TX_ANTPAT_CONS | + IEEE80211_HE_6GHZ_CAP_RX_ANTPAT_CONS, + }, + .he_cap = { + .has_he = true, + .he_cap_elem = { + .mac_cap_info[0] = + IEEE80211_HE_MAC_CAP0_HTC_HE, + .mac_cap_info[1] = + IEEE80211_HE_MAC_CAP1_MULTI_TID_AGG_RX_QOS_8, + .mac_cap_info[2] = + IEEE80211_HE_MAC_CAP2_ACK_EN, + .mac_cap_info[3] = + IEEE80211_HE_MAC_CAP3_OMI_CONTROL | + IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3, + .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU, + .phy_cap_info[0] = + IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G | + IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G | + IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G, + .phy_cap_info[1] = + IEEE80211_HE_PHY_CAP1_PREAMBLE_PUNC_RX_MASK | + IEEE80211_HE_PHY_CAP1_DEVICE_CLASS_A | + IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD | + IEEE80211_HE_PHY_CAP1_MIDAMBLE_RX_TX_MAX_NSTS, + .phy_cap_info[2] = 0, + + /* Leave all the other PHY capability bytes + * unset, as DCM, beam forming, RU and PPE + * threshold information are not supported + */ + }, + .he_mcs_nss_supp = { + .rx_mcs_80 = cpu_to_le16(0xfffa), + .tx_mcs_80 = cpu_to_le16(0xfffa), + .rx_mcs_160 = cpu_to_le16(0xfffa), + .tx_mcs_160 = cpu_to_le16(0xfffa), + .rx_mcs_80p80 = cpu_to_le16(0xfffa), + .tx_mcs_80p80 = cpu_to_le16(0xfffa), + }, + }, + }, +#endif +}; + static void mac80211_hwsim_he_capab(struct ieee80211_supported_band *sband) { u16 n_iftype_data; @@ -3000,6 +3112,10 @@ static void mac80211_hwsim_he_capab(struct ieee80211_supported_band *sband) n_iftype_data = ARRAY_SIZE(he_capa_5ghz); sband->iftype_data = (struct ieee80211_sband_iftype_data *)he_capa_5ghz; + } else if (sband->band == NL80211_BAND_6GHZ) { + n_iftype_data = ARRAY_SIZE(he_capa_6ghz); + sband->iftype_data = + (struct ieee80211_sband_iftype_data *)he_capa_6ghz; } else { return; } @@ -3290,6 +3406,12 @@ static int mac80211_hwsim_new_radio(struct genl_info *info, sband->vht_cap.vht_mcs.tx_mcs_map = sband->vht_cap.vht_mcs.rx_mcs_map; break; + case NL80211_BAND_6GHZ: + sband->channels = data->channels_6ghz; + sband->n_channels = ARRAY_SIZE(hwsim_channels_6ghz); + sband->bitrates = data->rates + 4; + sband->n_bitrates = ARRAY_SIZE(hwsim_rates) - 4; + break; case NL80211_BAND_S1GHZ: memcpy(&sband->s1g_cap, &hwsim_s1g_cap, sizeof(sband->s1g_cap)); @@ -3300,19 +3422,21 @@ static int mac80211_hwsim_new_radio(struct genl_info *info, continue; } - sband->ht_cap.ht_supported = true; - sband->ht_cap.cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 | - IEEE80211_HT_CAP_GRN_FLD | - IEEE80211_HT_CAP_SGI_20 | - IEEE80211_HT_CAP_SGI_40 | - IEEE80211_HT_CAP_DSSSCCK40; - sband->ht_cap.ampdu_factor = 0x3; - sband->ht_cap.ampdu_density = 0x6; - memset(&sband->ht_cap.mcs, 0, - sizeof(sband->ht_cap.mcs)); - sband->ht_cap.mcs.rx_mask[0] = 0xff; - sband->ht_cap.mcs.rx_mask[1] = 0xff; - sband->ht_cap.mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED; + if (band != NL80211_BAND_6GHZ){ + sband->ht_cap.ht_supported = true; + sband->ht_cap.cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 | + IEEE80211_HT_CAP_GRN_FLD | + IEEE80211_HT_CAP_SGI_20 | + IEEE80211_HT_CAP_SGI_40 | + IEEE80211_HT_CAP_DSSSCCK40; + sband->ht_cap.ampdu_factor = 0x3; + sband->ht_cap.ampdu_density = 0x6; + memset(&sband->ht_cap.mcs, 0, + sizeof(sband->ht_cap.mcs)); + sband->ht_cap.mcs.rx_mask[0] = 0xff; + sband->ht_cap.mcs.rx_mask[1] = 0xff; + sband->ht_cap.mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED; + } mac80211_hwsim_he_capab(sband);
This adds 6 GHz capabilities and reject HT/VHT Signed-off-by: Ramon Fontes <ramonreisfontes@gmail.com> --- drivers/net/wireless/mac80211_hwsim.c | 150 +++++++++++++++++++++++--- 1 file changed, 137 insertions(+), 13 deletions(-)