From: Chenming Huang Date: Wed, 12 Jul 2023 03:02:32 +0000 (+0530) Subject: EHT: Support puncturing for 320 MHz channel bandwidth X-Git-Tag: hostap_2_11~1046 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a94ba5322803afdfdab2d07f36c15a0a42b74fa1;p=thirdparty%2Fhostap.git EHT: Support puncturing for 320 MHz channel bandwidth Determine the channel width by operating class for the 6 GHz band when validating puncturing bitmap. This is needed to allow puncturing to be used with 320 MHz channels. Signed-off-by: Jouni Malinen --- diff --git a/src/ap/hw_features.c b/src/ap/hw_features.c index 7d899f50d..5bef2087d 100644 --- a/src/ap/hw_features.c +++ b/src/ap/hw_features.c @@ -908,7 +908,8 @@ static bool hostapd_is_usable_punct_bitmap(struct hostapd_iface *iface) { #ifdef CONFIG_IEEE80211BE struct hostapd_config *conf = iface->conf; - u8 bw, start_chan; + u16 bw; + u8 start_chan; if (!conf->punct_bitmap) return true; @@ -925,21 +926,30 @@ static bool hostapd_is_usable_punct_bitmap(struct hostapd_iface *iface) return false; } - switch (conf->eht_oper_chwidth) { - case 0: - wpa_printf(MSG_ERROR, - "RU puncturing is supported only in 80 MHz and 160 MHz"); - return false; - case 1: - bw = 80; - start_chan = conf->eht_oper_centr_freq_seg0_idx - 6; - break; - case 2: - bw = 160; - start_chan = conf->eht_oper_centr_freq_seg0_idx - 14; - break; - default: - return false; + /* + * In the 6 GHz band, eht_oper_chwidth is ignored. Use operating class + * to determine channel width. + */ + if (conf->op_class == 137) { + bw = 320; + start_chan = conf->eht_oper_centr_freq_seg0_idx - 30; + } else { + switch (conf->eht_oper_chwidth) { + case 0: + wpa_printf(MSG_ERROR, + "RU puncturing is supported only in 80 MHz and 160 MHz"); + return false; + case 1: + bw = 80; + start_chan = conf->eht_oper_centr_freq_seg0_idx - 6; + break; + case 2: + bw = 160; + start_chan = conf->eht_oper_centr_freq_seg0_idx - 14; + break; + default: + return false; + } } if (!is_punct_bitmap_valid(bw, (conf->channel - start_chan) / 4,