[PATCH 1/4] ACS: Add 40- MHz support in 2GHz band.
Michael-CY Lee
michael-cy.lee at mediatek.com
Thu Dec 21 20:59:08 PST 2023
This patch adds the support for 40- MHz in 2GHz band.
Co-developed-by: Money Wang <money.wang at mediatek.com>
Signed-off-by: Michael-CY Lee <michael-cy.lee at mediatek.com>
---
src/ap/acs.c | 26 ++++++++++++--------------
1 file changed, 12 insertions(+), 14 deletions(-)
diff --git a/src/ap/acs.c b/src/ap/acs.c
index 7ab310f75..f04c8a8d8 100644
--- a/src/ap/acs.c
+++ b/src/ap/acs.c
@@ -787,6 +787,10 @@ acs_find_ideal_chan_mode(struct hostapd_iface *iface,
long double factor;
int i, j;
unsigned int k;
+ int secondary_channel = 1, freq_offset;
+
+ if (is_24ghz_mode(mode->mode))
+ secondary_channel = iface->conf->secondary_channel;
for (i = 0; i < mode->num_channels; i++) {
double total_weight;
@@ -825,7 +829,7 @@ acs_find_ideal_chan_mode(struct hostapd_iface *iface,
iface->conf->country[2] == 0x4f)
continue;
- if (!chan_bw_allowed(chan, bw, 1, 1)) {
+ if (!chan_bw_allowed(chan, bw, secondary_channel != -1, 1)) {
wpa_printf(MSG_DEBUG,
"ACS: Channel %d: BW %u is not supported",
chan->chan, bw);
@@ -884,7 +888,8 @@ acs_find_ideal_chan_mode(struct hostapd_iface *iface,
total_weight = 1;
for (j = 1; j < n_chans; j++) {
- adj_chan = acs_find_chan(iface, chan->freq + (j * 20));
+ adj_chan = acs_find_chan(iface, chan->freq +
+ (j * secondary_channel * 20));
if (!adj_chan)
break;
@@ -932,8 +937,9 @@ acs_find_ideal_chan_mode(struct hostapd_iface *iface,
* channel interference factor. */
if (is_24ghz_mode(mode->mode)) {
for (j = 0; j < n_chans; j++) {
+ freq_offset = j * 20 * secondary_channel;
adj_chan = acs_find_chan(iface, chan->freq +
- (j * 20) - 5);
+ freq_offset - 5);
if (adj_chan && acs_usable_chan(adj_chan)) {
factor += ACS_ADJ_WEIGHT *
adj_chan->interference_factor;
@@ -941,7 +947,7 @@ acs_find_ideal_chan_mode(struct hostapd_iface *iface,
}
adj_chan = acs_find_chan(iface, chan->freq +
- (j * 20) - 10);
+ freq_offset - 10);
if (adj_chan && acs_usable_chan(adj_chan)) {
factor += ACS_NEXT_ADJ_WEIGHT *
adj_chan->interference_factor;
@@ -949,7 +955,7 @@ acs_find_ideal_chan_mode(struct hostapd_iface *iface,
}
adj_chan = acs_find_chan(iface, chan->freq +
- (j * 20) + 5);
+ freq_offset + 5);
if (adj_chan && acs_usable_chan(adj_chan)) {
factor += ACS_ADJ_WEIGHT *
adj_chan->interference_factor;
@@ -957,7 +963,7 @@ acs_find_ideal_chan_mode(struct hostapd_iface *iface,
}
adj_chan = acs_find_chan(iface, chan->freq +
- (j * 20) + 10);
+ freq_offset + 10);
if (adj_chan && acs_usable_chan(adj_chan)) {
factor += ACS_NEXT_ADJ_WEIGHT *
adj_chan->interference_factor;
@@ -1042,14 +1048,6 @@ acs_find_ideal_chan(struct hostapd_iface *iface)
goto bw_selected;
}
- /* TODO: HT40- support */
-
- if (iface->conf->ieee80211n &&
- iface->conf->secondary_channel == -1) {
- wpa_printf(MSG_ERROR, "ACS: HT40- is not supported yet. Please try HT40+");
- return NULL;
- }
-
if (iface->conf->ieee80211n &&
iface->conf->secondary_channel)
n_chans = 2;
--
2.25.1
More information about the Hostap
mailing list