@@ -3630,6 +3630,10 @@ static int hostapd_config_fill(struct hostapd_config *conf,
line);
return 1;
}
+ } else if (os_strcmp(buf, "reg_def_cli_eirp_psd") == 0) {
+ conf->reg_def_cli_eirp_psd = atoi(pos);
+ } else if (os_strcmp(buf, "reg_sub_cli_eirp_psd") == 0) {
+ conf->reg_sub_cli_eirp_psd = atoi(pos);
} 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) {
@@ -987,6 +987,13 @@ wmm_ac_vo_acm=0
# 4 = Indoor Standard Power AP
# This has no impact for operation on other bands.
#he_6ghz_reg_pwr_type=0
+#
+# 6GHz Maximum Tx Power used in Tx Power Envelope Elements, where the
+# "Transmit Power Interpretation" is set to "Regulatory client EIRP PSD".
+# For Maximum Transmit Power Category subfield encoding set to default (0):
+#reg_def_cli_eirp_psd=-1
+# For Maximum Transmit Power Category subfield encoding set to subordinate (1):
+#reg_sub_cli_eirp_psd=-1
# Unsolicited broadcast Probe Response transmission settings
# This is for the 6 GHz band only. If the interval is set to a non-zero value,
@@ -282,6 +282,8 @@ struct hostapd_config * hostapd_config_defaults(void)
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;
+ conf->reg_def_cli_eirp_psd = -1;
+ conf->reg_sub_cli_eirp_psd = -1;
#endif /* CONFIG_IEEE80211AX */
/* The third octet of the country string uses an ASCII space character
@@ -1137,7 +1137,11 @@ struct hostapd_config {
u8 he_6ghz_rx_ant_pat;
u8 he_6ghz_tx_ant_pat;
u8 he_6ghz_reg_pwr_type;
- bool require_he;
+
+ int reg_def_cli_eirp_psd;
+ int reg_sub_cli_eirp_psd;
+
+ int require_he;
#endif /* CONFIG_IEEE80211AX */
/* VHT enable/disable config from CHAN_SWITCH */
@@ -7060,16 +7060,24 @@ u8 * hostapd_eid_txpower_envelope(struct hostapd_data *hapd, u8 *eid)
tx_pwr_intrpn = REGULATORY_CLIENT_EIRP_PSD;
/* Default Transmit Power Envelope for Global Operating Class */
- tx_pwr = REG_PSD_MAX_TXPOWER_FOR_DEFAULT_CLIENT * 2;
+ if (hapd->iconf->reg_def_cli_eirp_psd != -1)
+ tx_pwr = hapd->iconf->reg_def_cli_eirp_psd;
+ else
+ tx_pwr = REG_PSD_MAX_TXPOWER_FOR_DEFAULT_CLIENT * 2;
+
eid = hostapd_add_tpe_info(eid, tx_pwr_count, tx_pwr_intrpn,
REG_DEFAULT_CLIENT, tx_pwr);
/* Indoor Access Point must include an additional TPE for
- * subordinate devices */
+ * subordinate devices
+ */
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;
+ if (hapd->iconf->reg_sub_cli_eirp_psd != -1)
+ tx_pwr = hapd->iconf->reg_sub_cli_eirp_psd;
+ else
+ tx_pwr = REG_PSD_MAX_TXPOWER_FOR_SUBORDINATE_CLIENT * 2;
eid = hostapd_add_tpe_info(eid, tx_pwr_count,
tx_pwr_intrpn,
REG_SUBORDINATE_CLIENT,