developer | 683be52 | 2023-05-11 14:24:50 +0800 | [diff] [blame] | 1 | From e61b734969cd94121434adef85f241f835aa1f5a Mon Sep 17 00:00:00 2001 |
| 2 | From: Evelyn Tsai <evelyn.tsai@mediatek.com> |
| 3 | Date: Thu, 11 May 2023 14:16:57 +0800 |
| 4 | Subject: [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 | |
| 13 | diff --git a/hostapd/ctrl_iface.c b/hostapd/ctrl_iface.c |
| 14 | index 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 | } |
| 56 | diff --git a/src/ap/drv_callbacks.c b/src/ap/drv_callbacks.c |
| 57 | index 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; |
| 70 | diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c |
| 71 | index 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; |
| 92 | diff --git a/src/drivers/driver_nl80211_capa.c b/src/drivers/driver_nl80211_capa.c |
| 93 | index 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 | -- |
| 106 | 2.18.0 |
| 107 | |