blob: 5d386888079aba485046459f35b469b9ac99dc58 [file] [log] [blame]
developer683be522023-05-11 14:24:50 +08001From e61b734969cd94121434adef85f241f835aa1f5a Mon Sep 17 00:00:00 2001
2From: Evelyn Tsai <evelyn.tsai@mediatek.com>
3Date: Thu, 11 May 2023 14:16:57 +0800
4Subject: [PATCH 103/103] hostapd: mtk: Add BW320 channel switch command
5
6---
7 hostapd/ctrl_iface.c | 32 +++++++++++++++++++++++++++++++
8 src/ap/drv_callbacks.c | 3 ++-
9 src/ap/hostapd.c | 4 ++++
10 src/drivers/driver_nl80211_capa.c | 2 ++
11 4 files changed, 40 insertions(+), 1 deletion(-)
12
13diff --git a/hostapd/ctrl_iface.c b/hostapd/ctrl_iface.c
14index 2d99647..274d079 100644
15--- a/hostapd/ctrl_iface.c
16+++ b/hostapd/ctrl_iface.c
17@@ -2713,6 +2713,38 @@ static int hostapd_ctrl_check_freq_params(struct hostapd_freq_params *params,
18 return -1;
19 }
20 break;
21+ case 320:
22+ if (!params->center_freq1 || params->center_freq2 ||
23+ !params->sec_channel_offset)
24+ return -1;
25+
26+ switch (params->sec_channel_offset) {
27+ case 1:
28+ if (params->freq + 150 != params->center_freq1 &&
29+ params->freq + 110 != params->center_freq1 &&
30+ params->freq + 70 != params->center_freq1 &&
31+ params->freq + 30 != params->center_freq1 &&
32+ params->freq - 10 != params->center_freq1 &&
33+ params->freq - 50 != params->center_freq1 &&
34+ params->freq - 90 != params->center_freq1 &&
35+ params->freq - 130 != params->center_freq1)
36+ return -1;
37+ break;
38+ case -1:
39+ if (params->freq + 130 != params->center_freq1 &&
40+ params->freq + 90 != params->center_freq1 &&
41+ params->freq + 50 != params->center_freq1 &&
42+ params->freq + 10 != params->center_freq1 &&
43+ params->freq - 30 != params->center_freq1 &&
44+ params->freq - 70 != params->center_freq1 &&
45+ params->freq - 110 != params->center_freq1 &&
46+ params->freq - 150 != params->center_freq1)
47+ return -1;
48+ break;
49+ default:
50+ return -1;
51+ }
52+ break;
53 default:
54 return -1;
55 }
56diff --git a/src/ap/drv_callbacks.c b/src/ap/drv_callbacks.c
57index c1f9a0e..dccbdb6 100644
58--- a/src/ap/drv_callbacks.c
59+++ b/src/ap/drv_callbacks.c
60@@ -988,7 +988,8 @@ void hostapd_event_ch_switch(struct hostapd_data *hapd, int freq, int ht,
61 hapd->iconf->ch_switch_eht_config = 0;
62
63 if (width == CHAN_WIDTH_40 || width == CHAN_WIDTH_80 ||
64- width == CHAN_WIDTH_80P80 || width == CHAN_WIDTH_160)
65+ width == CHAN_WIDTH_80P80 || width == CHAN_WIDTH_160 ||
66+ width == CHAN_WIDTH_320)
67 hapd->iconf->ht_capab |= HT_CAP_INFO_SUPP_CHANNEL_WIDTH_SET;
68 else if (width == CHAN_WIDTH_20 || width == CHAN_WIDTH_20_NOHT)
69 hapd->iconf->ht_capab &= ~HT_CAP_INFO_SUPP_CHANNEL_WIDTH_SET;
70diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c
71index 9bd81d3..6fd5947 100644
72--- a/src/ap/hostapd.c
73+++ b/src/ap/hostapd.c
74@@ -3705,6 +3705,7 @@ static int hostapd_change_config_freq(struct hostapd_data *hapd,
75 case 40:
76 case 80:
77 case 160:
78+ case 320:
79 conf->ht_capab |= HT_CAP_INFO_SUPP_CHANNEL_WIDTH_SET;
80 break;
81 default:
82@@ -3777,6 +3778,9 @@ static int hostapd_fill_csa_settings(struct hostapd_data *hapd,
83 case 160:
84 bandwidth = CONF_OPER_CHWIDTH_160MHZ;
85 break;
86+ case 320:
87+ bandwidth = CONF_OPER_CHWIDTH_320MHZ;
88+ break;
89 default:
90 bandwidth = CONF_OPER_CHWIDTH_USE_HT;
91 break;
92diff --git a/src/drivers/driver_nl80211_capa.c b/src/drivers/driver_nl80211_capa.c
93index 7b5079b..1a53ade 100644
94--- a/src/drivers/driver_nl80211_capa.c
95+++ b/src/drivers/driver_nl80211_capa.c
96@@ -1701,6 +1701,8 @@ static void phy_info_freq(struct hostapd_hw_modes *mode,
97 chan->allowed_bw &= ~HOSTAPD_CHAN_WIDTH_80;
98 if (tb_freq[NL80211_FREQUENCY_ATTR_NO_160MHZ])
99 chan->allowed_bw &= ~HOSTAPD_CHAN_WIDTH_160;
100+ if (tb_freq[NL80211_FREQUENCY_ATTR_NO_320MHZ])
101+ chan->allowed_bw &= ~HOSTAPD_CHAN_WIDTH_320;
102
103 if (tb_freq[NL80211_FREQUENCY_ATTR_DFS_STATE]) {
104 enum nl80211_dfs_state state =
105--
1062.18.0
107