From 34205ed1077ac7e759cf112ec424966e48ad314f Mon Sep 17 00:00:00 2001
From: Michael-CY Lee <michael-cy.lee@mediatek.com>
Date: Mon, 11 Sep 2023 13:39:14 +0800
Subject: [PATCH] ucode: mtk: synchronize bandwidth in AP/STA support

Change-Id: I1ec83a1d218784de53509b771e2e5487a01e0da6
---
 .../network/services/hostapd/files/hostapd.uc | 40 +++++++++++++------
 .../services/hostapd/files/wpa_supplicant.uc  |  5 +++
 2 files changed, 33 insertions(+), 12 deletions(-)

diff --git a/package/network/services/hostapd/files/hostapd.uc b/package/network/services/hostapd/files/hostapd.uc
index 43637ac7..7202a8df 100644
--- a/package/network/services/hostapd/files/hostapd.uc
+++ b/package/network/services/hostapd/files/hostapd.uc
@@ -58,6 +58,7 @@ start_disabled=1
 function iface_freq_info(iface, config, params)
 {
 	let freq = params.frequency;
+	let bw320_offset = params.bw320_offset;
 	if (!freq)
 		return null;
 
@@ -66,25 +67,29 @@ function iface_freq_info(iface, config, params)
 		sec_offset = 0;
 
 	let width = 0;
-	for (let line in config.radio.data) {
-		if (!sec_offset && match(line, /^ht_capab=.*HT40/)) {
-			sec_offset = null; // auto-detect
-			continue;
-		}
+	if (params.ch_width >= 0){
+		width = params.ch_width;
+	} else {
+		for (let line in config.radio.data) {
+			if (!sec_offset && match(line, /^ht_capab=.*HT40/)) {
+				sec_offset = null; // auto-detect
+				continue;
+			}
 
-		let val = match(line, /^(vht_oper_chwidth|he_oper_chwidth|eht_oper_chwidth)=(\d+)/);
-		if (!val)
-			continue;
+			let val = match(line, /^(vht_oper_chwidth|he_oper_chwidth|eht_oper_chwidth)=(\d+)/);
+			if (!val)
+				continue;
 
-		val = int(val[2]);
-		if (val > width)
-			width = val;
+			val = int(val[2]);
+			if (val > width)
+				width = val;
+		}
 	}
 
 	if (freq < 4000)
 		width = 0;
 
-	return hostapd.freq_info(freq, sec_offset, width);
+	return hostapd.freq_info(freq, sec_offset, width, bw320_offset);
 }
 
 function iface_add(phy, config, phy_status)
@@ -386,6 +391,8 @@ let main_obj = {
 			up: true,
 			frequency: 0,
 			sec_chan_offset: 0,
+			ch_width: -1,
+			bw320_offset: 1,
 			csa: true,
 			csa_count: 0,
 		},
@@ -393,6 +400,15 @@ let main_obj = {
 			if (req.args.up == null || !req.args.phy)
 				return libubus.STATUS_INVALID_ARGUMENT;
 
+			hostapd.printf(`ucode: mtk: apsta state update`);
+			hostapd.printf(`    * phy: ${req.args.phy}`);
+			hostapd.printf(`    * up: ${req.args.up}`);
+			hostapd.printf(`    * freqeuncy: ${req.args.frequency}`);
+			hostapd.printf(`    * sec_chan_offset: ${req.args.sec_chan_offset}`);
+			hostapd.printf(`    * ch_width: ${req.args.ch_width}`);
+			hostapd.printf(`    * bw320_offset: ${req.args.bw320_offset}`);
+			hostapd.printf(`    * csa: ${req.args.csa}`);
+
 			let phy = req.args.phy;
 			let config = hostapd.data.config[phy];
 			if (!config || !config.bss || !config.bss[0] || !config.bss[0].ifname)
diff --git a/package/network/services/hostapd/files/wpa_supplicant.uc b/package/network/services/hostapd/files/wpa_supplicant.uc
index f8a3fcb5..c24ea03c 100644
--- a/package/network/services/hostapd/files/wpa_supplicant.uc
+++ b/package/network/services/hostapd/files/wpa_supplicant.uc
@@ -226,6 +226,7 @@ function iface_hostapd_notify(phy, ifname, iface, state)
 	let status = iface.status();
 	let msg = { phy: phy };
 
+	wpas.printf(`ucode: mtk: wpa_s in state ${state} notifies hostapd`);
 	switch (state) {
 	case "DISCONNECTED":
 	case "AUTHENTICATING":
@@ -240,6 +241,8 @@ function iface_hostapd_notify(phy, ifname, iface, state)
 		msg.up = true;
 		msg.frequency = status.frequency;
 		msg.sec_chan_offset = status.sec_chan_offset;
+		msg.ch_width = status.ch_width;
+		msg.bw320_offset = status.bw320_offset;
 		break;
 	default:
 		return;
@@ -256,6 +259,8 @@ function iface_channel_switch(phy, ifname, iface, info)
 		csa: true,
 		csa_count: info.csa_count ? info.csa_count - 1 : 0,
 		frequency: info.frequency,
+		ch_width: info.ch_width,
+		bw320_offset: info.bw320_offset,
 		sec_chan_offset: info.sec_chan_offset,
 	};
 	ubus.call("hostapd", "apsta_state", msg);
-- 
2.25.1

