}
} else if (os_strcmp(buf, "he_6ghz_reg_pwr_type") == 0) {
conf->he_6ghz_reg_pwr_type = atoi(pos);
+ if (conf->he_6ghz_reg_pwr_type > HE_REG_INFO_6GHZ_AP_TYPE_MAX) {
+ wpa_printf(MSG_ERROR,
+ "Line %d: invalid he_6ghz_reg_pwr_type value",
+ line);
+ return 1;
+ }
} else if (os_strcmp(buf, "he_oper_chwidth") == 0) {
conf->he_oper_chwidth = atoi(pos);
} else if (os_strcmp(buf, "he_oper_centr_freq_seg0_idx") == 0) {
# 6 GHz Access Point type
# This config is to set the 6 GHz Access Point type. Possible options are:
-# 0 = Indoor AP (default)
-# 1 = Standard Power AP
+# 0 = Indoor AP
+# 1 = Standard power AP
+# 2 = Very low power AP (default)
+# 3 = Indoor enabled AP
+# 4 = Indoor standard power AP
# This has no impact for operation on other bands.
+# See IEEE P802.11-REVme/D4.0, Table E-12 (Regulatory Info subfield encoding)
+# for more details.
#he_6ghz_reg_pwr_type=0
# Unsolicited broadcast Probe Response transmission settings
conf->he_6ghz_max_ampdu_len_exp = 7;
conf->he_6ghz_rx_ant_pat = 1;
conf->he_6ghz_tx_ant_pat = 1;
+ conf->he_6ghz_reg_pwr_type = HE_REG_INFO_6GHZ_AP_TYPE_VLP;
#endif /* CONFIG_IEEE80211AX */
/* The third octet of the country string uses an ASCII space character
/* An additional Transmit Power Envelope element for
* subordinate client */
if (hapd->iconf->he_6ghz_reg_pwr_type ==
- HE_6GHZ_INDOOR_AP)
+ HE_REG_INFO_6GHZ_AP_TYPE_INDOOR)
buflen += 4;
}
}
/* Transmit Power Envelope element(s) */
if (is_6ghz_op_class(hapd->iconf->op_class)) {
total_len += 4;
- if (hapd->iconf->he_6ghz_reg_pwr_type == HE_6GHZ_INDOOR_AP)
+ if (hapd->iconf->he_6ghz_reg_pwr_type ==
+ HE_REG_INFO_6GHZ_AP_TYPE_INDOOR)
total_len += 4;
}
#endif /* CONFIG_IEEE80211AX */
/* An additional Transmit Power Envelope element for
* subordinate client */
if (hapd->iconf->he_6ghz_reg_pwr_type ==
- HE_6GHZ_INDOOR_AP)
+ HE_REG_INFO_6GHZ_AP_TYPE_INDOOR)
tail_len += 4;
}
}
/* Indoor Access Point must include an additional TPE for
* subordinate devices */
- if (iconf->he_6ghz_reg_pwr_type == HE_6GHZ_INDOOR_AP) {
+ if (iconf->he_6ghz_reg_pwr_type ==
+ HE_REG_INFO_6GHZ_AP_TYPE_INDOOR) {
/* TODO: Extract PSD limits from channel data */
tx_pwr = REG_PSD_MAX_TXPOWER_FOR_SUBORDINATE_CLIENT * 2;
eid = hostapd_add_tpe_info(eid, tx_pwr_count,
control = 3;
else
control = center_idx_to_bw_6ghz(seg0);
- if (hapd->iconf->he_6ghz_reg_pwr_type == 1)
- control |= HE_6GHZ_STANDARD_POWER_AP <<
- HE_6GHZ_OPER_INFO_CTRL_REG_INFO_SHIFT;
- else
- control |= HE_6GHZ_INDOOR_AP <<
- HE_6GHZ_OPER_INFO_CTRL_REG_INFO_SHIFT;
+
+ control |= hapd->iconf->he_6ghz_reg_pwr_type <<
+ HE_6GHZ_OPER_INFO_CTRL_REG_INFO_SHIFT;
+
*pos++ = control;
/* Channel Center Freq Seg0/Seg1 */
#define HE_OPERATION_BSS_COLOR_MAX 64
/**
- * enum he_6ghz_ap_type - Allowed Access Point types for 6 GHz Band
+ * enum he_reg_info_6ghz_ap_type - Allowed Access Point types for 6 GHz Band
*
- * IEEE Std 802.11ax-2021, Table E-12 (Regulatory Info subfield encoding in the
- * United States)
+ * IEEE P802.11-REVme/D4.0, Table E-12 (Regulatory Info subfield encoding)
*/
-enum he_6ghz_ap_type {
- HE_6GHZ_INDOOR_AP = 0,
- HE_6GHZ_STANDARD_POWER_AP = 1,
+enum he_reg_info_6ghz_ap_type {
+ HE_REG_INFO_6GHZ_AP_TYPE_INDOOR = 0,
+ HE_REG_INFO_6GHZ_AP_TYPE_SP = 1,
+ HE_REG_INFO_6GHZ_AP_TYPE_VLP = 2,
+ HE_REG_INFO_6GHZ_AP_TYPE_INDOOR_ENABLED = 3,
+ HE_REG_INFO_6GHZ_AP_TYPE_INDOOR_SP = 4,
+ HE_REG_INFO_6GHZ_AP_TYPE_MAX = HE_REG_INFO_6GHZ_AP_TYPE_INDOOR_SP,
};
/* Spatial Reuse defines */