diff --git a/autobuild_mac80211_release/package/kernel/mt76/patches/1007-mt76-mt7915-add-mt76-vendor-muru-onoff-command.patch b/autobuild_mac80211_release/package/kernel/mt76/patches/1007-mt76-mt7915-add-mt76-vendor-muru-onoff-command.patch
index 92f3f59..050a40b 100644
--- a/autobuild_mac80211_release/package/kernel/mt76/patches/1007-mt76-mt7915-add-mt76-vendor-muru-onoff-command.patch
+++ b/autobuild_mac80211_release/package/kernel/mt76/patches/1007-mt76-mt7915-add-mt76-vendor-muru-onoff-command.patch
@@ -18,7 +18,7 @@
  		if (val == 0)
  			phy->muru_onoff = MUMIMO_DL_CERT | MUMIMO_DL;
  		break;
-+	case RATE_PARAM_AUTO_HEMU:
++	case RATE_PARAM_AUTO_MU:
 +		if (val < 0 || val > 15) {
 +			printk("Wrong value! The value is between 0-15.\n");
 +			break;
@@ -36,7 +36,7 @@
  #ifdef CONFIG_MTK_VENDOR
  	RATE_PARAM_FIXED_MIMO = 30,
  	RATE_PARAM_FIXED_OFDMA = 31,
-+	RATE_PARAM_AUTO_HEMU = 32,
++	RATE_PARAM_AUTO_MU = 32,
  #endif
  };
  
@@ -49,8 +49,8 @@
  };
  
 +static const struct nla_policy
-+hemu_ctrl_policy[NUM_MTK_VENDOR_ATTRS_HEMU_CTRL] = {
-+	[MTK_VENDOR_ATTR_HEMU_CTRL_ONOFF] = {.type = NLA_U8 },
++mu_ctrl_policy[NUM_MTK_VENDOR_ATTRS_MU_CTRL] = {
++	[MTK_VENDOR_ATTR_MU_CTRL_ONOFF] = {.type = NLA_U8 },
 +};
 +
  static const struct nla_policy
@@ -60,25 +60,25 @@
  	return 0;
  }
  
-+static int mt7915_vendor_hemu_ctrl(struct wiphy *wiphy,
++static int mt7915_vendor_mu_ctrl(struct wiphy *wiphy,
 +				  struct wireless_dev *wdev,
 +				  const void *data,
 +				  int data_len)
 +{
 +	struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
-+	struct nlattr *tb[NUM_MTK_VENDOR_ATTRS_HEMU_CTRL];
++	struct nlattr *tb[NUM_MTK_VENDOR_ATTRS_MU_CTRL];
 +	int err;
 +	u8 val8;
 +	u32 val32 = 0;
 +
-+	err = nla_parse(tb, MTK_VENDOR_ATTR_HEMU_CTRL_MAX, data, data_len,
-+			hemu_ctrl_policy, NULL);
++	err = nla_parse(tb, MTK_VENDOR_ATTR_MU_CTRL_MAX, data, data_len,
++			mu_ctrl_policy, NULL);
 +	if (err)
 +		return err;
 +
-+	if (tb[MTK_VENDOR_ATTR_HEMU_CTRL_ONOFF]) {
-+		val8 = nla_get_u8(tb[MTK_VENDOR_ATTR_HEMU_CTRL_ONOFF]);
-+		val32 |= FIELD_PREP(RATE_CFG_MODE, RATE_PARAM_AUTO_HEMU) |
++	if (tb[MTK_VENDOR_ATTR_MU_CTRL_ONOFF]) {
++		val8 = nla_get_u8(tb[MTK_VENDOR_ATTR_MU_CTRL_ONOFF]);
++		val32 |= FIELD_PREP(RATE_CFG_MODE, RATE_PARAM_AUTO_MU) |
 +			 FIELD_PREP(RATE_CFG_VAL, val8);
 +		ieee80211_iterate_active_interfaces_atomic(hw, IEEE80211_IFACE_ITER_RESUME_ALL,
 +			mt7915_set_wireless_vif, &val32);
@@ -98,13 +98,13 @@
 +	{
 +		.info = {
 +			.vendor_id = MTK_NL80211_VENDOR_ID,
-+			.subcmd = MTK_NL80211_VENDOR_SUBCMD_HEMU_CTRL,
++			.subcmd = MTK_NL80211_VENDOR_SUBCMD_MU_CTRL,
 +		},
 +		.flags = WIPHY_VENDOR_CMD_NEED_NETDEV |
 +			WIPHY_VENDOR_CMD_NEED_RUNNING,
-+		.doit = mt7915_vendor_hemu_ctrl,
-+		.policy = hemu_ctrl_policy,
-+		.maxattr = MTK_VENDOR_ATTR_HEMU_CTRL_MAX,
++		.doit = mt7915_vendor_mu_ctrl,
++		.policy = mu_ctrl_policy,
++		.maxattr = MTK_VENDOR_ATTR_MU_CTRL_MAX,
  	}
  };
  
@@ -116,7 +116,7 @@
  	MTK_NL80211_VENDOR_SUBCMD_CSI_CTRL = 0xc2,
  	MTK_NL80211_VENDOR_SUBCMD_RFEATURE_CTRL = 0xc3,
  	MTK_NL80211_VENDOR_SUBCMD_WIRELESS_CTRL = 0xc4,
-+	MTK_NL80211_VENDOR_SUBCMD_HEMU_CTRL = 0xc5,
++	MTK_NL80211_VENDOR_SUBCMD_MU_CTRL = 0xc5,
  };
  
  enum mtk_capi_control_changed {
@@ -124,15 +124,15 @@
  		NUM_MTK_VENDOR_ATTRS_WIRELESS_CTRL - 1
  };
  
-+enum mtk_vendor_attr_hemu_ctrl {
-+	MTK_VENDOR_ATTR_HEMU_CTRL_UNSPEC,
++enum mtk_vendor_attr_mu_ctrl {
++	MTK_VENDOR_ATTR_MU_CTRL_UNSPEC,
 +
-+	MTK_VENDOR_ATTR_HEMU_CTRL_ONOFF,
++	MTK_VENDOR_ATTR_MU_CTRL_ONOFF,
 +
 +	/* keep last */
-+	NUM_MTK_VENDOR_ATTRS_HEMU_CTRL,
-+	MTK_VENDOR_ATTR_HEMU_CTRL_MAX =
-+		NUM_MTK_VENDOR_ATTRS_HEMU_CTRL - 1
++	NUM_MTK_VENDOR_ATTRS_MU_CTRL,
++	MTK_VENDOR_ATTR_MU_CTRL_MAX =
++		NUM_MTK_VENDOR_ATTRS_MU_CTRL - 1
 +};
 +
  enum mtk_vendor_attr_rfeature_ctrl {
diff --git a/autobuild_mac80211_release/package/kernel/mt76/patches/1120-mt76-mt7915-add-phy-capability-vendor-command.patch b/autobuild_mac80211_release/package/kernel/mt76/patches/1120-mt76-mt7915-add-phy-capability-vendor-command.patch
index d9f1eec..302d0ab 100644
--- a/autobuild_mac80211_release/package/kernel/mt76/patches/1120-mt76-mt7915-add-phy-capability-vendor-command.patch
+++ b/autobuild_mac80211_release/package/kernel/mt76/patches/1120-mt76-mt7915-add-phy-capability-vendor-command.patch
@@ -44,7 +44,7 @@
  struct csi_null_tone {
  	u8 start;
  	u8 end;
-@@ -974,6 +986,35 @@ static int mt7915_vendor_hemu_ctrl(struct wiphy *wiphy,
+@@ -974,6 +986,35 @@ static int mt7915_vendor_mu_ctrl(struct wiphy *wiphy,
  	return 0;
  }
  
@@ -81,9 +81,9 @@
  	{
  		.info = {
 @@ -1031,6 +1072,17 @@ static const struct wiphy_vendor_command mt7915_vendor_commands[] = {
- 		.doit = mt7915_vendor_hemu_ctrl,
- 		.policy = hemu_ctrl_policy,
- 		.maxattr = MTK_VENDOR_ATTR_HEMU_CTRL_MAX,
+ 		.doit = mt7915_vendor_mu_ctrl,
+ 		.policy = mu_ctrl_policy,
+ 		.maxattr = MTK_VENDOR_ATTR_MU_CTRL_MAX,
 +	},
 +	{
 +		.info = {
@@ -105,7 +105,7 @@
 @@ -9,6 +9,7 @@ enum mtk_nl80211_vendor_subcmds {
  	MTK_NL80211_VENDOR_SUBCMD_RFEATURE_CTRL = 0xc3,
  	MTK_NL80211_VENDOR_SUBCMD_WIRELESS_CTRL = 0xc4,
- 	MTK_NL80211_VENDOR_SUBCMD_HEMU_CTRL = 0xc5,
+ 	MTK_NL80211_VENDOR_SUBCMD_MU_CTRL = 0xc5,
 +	MTK_NL80211_VENDOR_SUBCMD_PHY_CAPA_CTRL = 0xc6,
  };
  
diff --git a/autobuild_mac80211_release/package/kernel/mt76/patches/1121-mt76-mt7915-add-vendor-subcmd-EDCCA-ctrl-enable-thre.patch b/autobuild_mac80211_release/package/kernel/mt76/patches/1121-mt76-mt7915-add-vendor-subcmd-EDCCA-ctrl-enable-thre.patch
index 9472892..ca559be 100644
--- a/autobuild_mac80211_release/package/kernel/mt76/patches/1121-mt76-mt7915-add-vendor-subcmd-EDCCA-ctrl-enable-thre.patch
+++ b/autobuild_mac80211_release/package/kernel/mt76/patches/1121-mt76-mt7915-add-vendor-subcmd-EDCCA-ctrl-enable-thre.patch
@@ -339,7 +339,7 @@
  	MTK_NL80211_VENDOR_SUBCMD_AMNT_CTRL = 0xae,
 @@ -10,6 +11,38 @@ enum mtk_nl80211_vendor_subcmds {
  	MTK_NL80211_VENDOR_SUBCMD_WIRELESS_CTRL = 0xc4,
- 	MTK_NL80211_VENDOR_SUBCMD_HEMU_CTRL = 0xc5,
+ 	MTK_NL80211_VENDOR_SUBCMD_MU_CTRL = 0xc5,
  	MTK_NL80211_VENDOR_SUBCMD_PHY_CAPA_CTRL = 0xc6,
 +	MTK_NL80211_VENDOR_SUBCMD_EDCCA_CTRL = 0xc7,
 +};
diff --git a/autobuild_mac80211_release/package/kernel/mt76/patches/1124-mt76-mt7915-Add-hemu-dump-support.patch b/autobuild_mac80211_release/package/kernel/mt76/patches/1124-mt76-mt7915-Add-mu-dump-support.patch
similarity index 64%
rename from autobuild_mac80211_release/package/kernel/mt76/patches/1124-mt76-mt7915-Add-hemu-dump-support.patch
rename to autobuild_mac80211_release/package/kernel/mt76/patches/1124-mt76-mt7915-Add-mu-dump-support.patch
index 0fcde9d..b3789c3 100644
--- a/autobuild_mac80211_release/package/kernel/mt76/patches/1124-mt76-mt7915-Add-hemu-dump-support.patch
+++ b/autobuild_mac80211_release/package/kernel/mt76/patches/1124-mt76-mt7915-Add-mu-dump-support.patch
@@ -1,7 +1,7 @@
 From dc1ea53db698073c61765925cdb17d28043c6f2d Mon Sep 17 00:00:00 2001
 From: TomLiu <tomml.liu@mediatek.com>
 Date: Thu, 11 Aug 2022 18:09:45 -0700
-Subject: [PATCH 1124/1133] mt76: mt7915: Add hemu dump support
+Subject: [PATCH 1124/1133] mt76: mt7915: Add mu dump support
 
 Change-Id: I521214f3feb6f0d528a9f550255050ffd1ec96d2
 ---
@@ -15,19 +15,19 @@
 +++ b/mt7915/vendor.c
 @@ -37,6 +37,7 @@ wireless_ctrl_policy[NUM_MTK_VENDOR_ATTRS_WIRELESS_CTRL] = {
  static const struct nla_policy
- hemu_ctrl_policy[NUM_MTK_VENDOR_ATTRS_HEMU_CTRL] = {
- 	[MTK_VENDOR_ATTR_HEMU_CTRL_ONOFF] = {.type = NLA_U8 },
-+	[MTK_VENDOR_ATTR_HEMU_CTRL_DUMP] = {.type = NLA_U8 },
+ mu_ctrl_policy[NUM_MTK_VENDOR_ATTRS_MU_CTRL] = {
+ 	[MTK_VENDOR_ATTR_MU_CTRL_ONOFF] = {.type = NLA_U8 },
++	[MTK_VENDOR_ATTR_MU_CTRL_DUMP] = {.type = NLA_U8 },
  };
  
  static const struct nla_policy
-@@ -1004,6 +1005,28 @@ static int mt7915_vendor_hemu_ctrl(struct wiphy *wiphy,
+@@ -1004,6 +1005,28 @@ static int mt7915_vendor_mu_ctrl(struct wiphy *wiphy,
  	return 0;
  }
  
 +
 +static int
-+mt7915_vendor_hemu_ctrl_dump(struct wiphy *wiphy, struct wireless_dev *wdev,
++mt7915_vendor_mu_ctrl_dump(struct wiphy *wiphy, struct wireless_dev *wdev,
 +			     struct sk_buff *skb, const void *data, int data_len,
 +			     unsigned long *storage)
 +{
@@ -39,7 +39,7 @@
 +		return -ENOENT;
 +	*storage = 1;
 +
-+	if (nla_put_u8(skb, MTK_VENDOR_ATTR_HEMU_CTRL_DUMP, phy->muru_onoff))
++	if (nla_put_u8(skb, MTK_VENDOR_ATTR_MU_CTRL_DUMP, phy->muru_onoff))
 +		return -ENOMEM;
 +	len += 1;
 +
@@ -53,23 +53,23 @@
 @@ -1190,6 +1213,7 @@ static const struct wiphy_vendor_command mt7915_vendor_commands[] = {
  		.flags = WIPHY_VENDOR_CMD_NEED_NETDEV |
  			WIPHY_VENDOR_CMD_NEED_RUNNING,
- 		.doit = mt7915_vendor_hemu_ctrl,
-+		.dumpit = mt7915_vendor_hemu_ctrl_dump,
- 		.policy = hemu_ctrl_policy,
- 		.maxattr = MTK_VENDOR_ATTR_HEMU_CTRL_MAX,
+ 		.doit = mt7915_vendor_mu_ctrl,
++		.dumpit = mt7915_vendor_mu_ctrl_dump,
+ 		.policy = mu_ctrl_policy,
+ 		.maxattr = MTK_VENDOR_ATTR_MU_CTRL_MAX,
  	},
 diff --git a/mt7915/vendor.h b/mt7915/vendor.h
 index 72319717..c19ffe72 100644
 --- a/mt7915/vendor.h
 +++ b/mt7915/vendor.h
-@@ -72,6 +72,7 @@ enum mtk_vendor_attr_hemu_ctrl {
- 	MTK_VENDOR_ATTR_HEMU_CTRL_UNSPEC,
+@@ -72,6 +72,7 @@ enum mtk_vendor_attr_mu_ctrl {
+ 	MTK_VENDOR_ATTR_MU_CTRL_UNSPEC,
  
- 	MTK_VENDOR_ATTR_HEMU_CTRL_ONOFF,
-+	MTK_VENDOR_ATTR_HEMU_CTRL_DUMP,
+ 	MTK_VENDOR_ATTR_MU_CTRL_ONOFF,
++	MTK_VENDOR_ATTR_MU_CTRL_DUMP,
  
  	/* keep last */
- 	NUM_MTK_VENDOR_ATTRS_HEMU_CTRL,
+ 	NUM_MTK_VENDOR_ATTRS_MU_CTRL,
 -- 
 2.18.0
 
diff --git a/autobuild_mac80211_release/package/kernel/mt76/patches/1125-mt76-mt7915-add-vendor-subcmd-three-wire-PTA-ctrl.patch b/autobuild_mac80211_release/package/kernel/mt76/patches/1125-mt76-mt7915-add-vendor-subcmd-three-wire-PTA-ctrl.patch
index 370bbcf..cd5fd8f 100644
--- a/autobuild_mac80211_release/package/kernel/mt76/patches/1125-mt76-mt7915-add-vendor-subcmd-three-wire-PTA-ctrl.patch
+++ b/autobuild_mac80211_release/package/kernel/mt76/patches/1125-mt76-mt7915-add-vendor-subcmd-three-wire-PTA-ctrl.patch
@@ -149,8 +149,8 @@
 index 83f38e07..48d124e0 100644
 --- a/mt7915/vendor.c
 +++ b/mt7915/vendor.c
-@@ -40,6 +40,11 @@ hemu_ctrl_policy[NUM_MTK_VENDOR_ATTRS_HEMU_CTRL] = {
- 	[MTK_VENDOR_ATTR_HEMU_CTRL_DUMP] = {.type = NLA_U8 },
+@@ -40,6 +40,11 @@ mu_ctrl_policy[NUM_MTK_VENDOR_ATTRS_MU_CTRL] = {
+ 	[MTK_VENDOR_ATTR_MU_CTRL_DUMP] = {.type = NLA_U8 },
  };
  
 +static const struct nla_policy
@@ -233,7 +233,7 @@
 --- a/mt7915/vendor.h
 +++ b/mt7915/vendor.h
 @@ -12,6 +12,7 @@ enum mtk_nl80211_vendor_subcmds {
- 	MTK_NL80211_VENDOR_SUBCMD_HEMU_CTRL = 0xc5,
+ 	MTK_NL80211_VENDOR_SUBCMD_MU_CTRL = 0xc5,
  	MTK_NL80211_VENDOR_SUBCMD_PHY_CAPA_CTRL = 0xc6,
  	MTK_NL80211_VENDOR_SUBCMD_EDCCA_CTRL = 0xc7,
 +	MTK_NL80211_VENDOR_SUBCMD_3WIRE_CTRL = 0xc8
diff --git a/autobuild_mac80211_release/package/kernel/mt76/patches/1126-mt76-mt7915-add-ibf-control-vendor-cmd.patch b/autobuild_mac80211_release/package/kernel/mt76/patches/1126-mt76-mt7915-add-ibf-control-vendor-cmd.patch
index 899c849..1fa6a9a 100644
--- a/autobuild_mac80211_release/package/kernel/mt76/patches/1126-mt76-mt7915-add-ibf-control-vendor-cmd.patch
+++ b/autobuild_mac80211_release/package/kernel/mt76/patches/1126-mt76-mt7915-add-ibf-control-vendor-cmd.patch
@@ -104,7 +104,7 @@
 --- a/mt7915/vendor.h
 +++ b/mt7915/vendor.h
 @@ -12,7 +12,8 @@ enum mtk_nl80211_vendor_subcmds {
- 	MTK_NL80211_VENDOR_SUBCMD_HEMU_CTRL = 0xc5,
+ 	MTK_NL80211_VENDOR_SUBCMD_MU_CTRL = 0xc5,
  	MTK_NL80211_VENDOR_SUBCMD_PHY_CAPA_CTRL = 0xc6,
  	MTK_NL80211_VENDOR_SUBCMD_EDCCA_CTRL = 0xc7,
 -	MTK_NL80211_VENDOR_SUBCMD_3WIRE_CTRL = 0xc8
diff --git a/autobuild_mac80211_release/package/kernel/mt76/patches/1130-mt76-mt7915-amsdu-set-and-get-control.patch b/autobuild_mac80211_release/package/kernel/mt76/patches/1130-mt76-mt7915-amsdu-set-and-get-control.patch
index 6db0006..54ca9d2 100644
--- a/autobuild_mac80211_release/package/kernel/mt76/patches/1130-mt76-mt7915-amsdu-set-and-get-control.patch
+++ b/autobuild_mac80211_release/package/kernel/mt76/patches/1130-mt76-mt7915-amsdu-set-and-get-control.patch
@@ -62,8 +62,8 @@
 +};
 +
  static const struct nla_policy
- hemu_ctrl_policy[NUM_MTK_VENDOR_ATTRS_HEMU_CTRL] = {
- 	[MTK_VENDOR_ATTR_HEMU_CTRL_ONOFF] = {.type = NLA_U8 },
+ mu_ctrl_policy[NUM_MTK_VENDOR_ATTRS_MU_CTRL] = {
+ 	[MTK_VENDOR_ATTR_MU_CTRL_ONOFF] = {.type = NLA_U8 },
 @@ -983,11 +989,35 @@ static int mt7915_vendor_wireless_ctrl(struct wiphy *wiphy,
  		val8 = nla_get_u8(tb[MTK_VENDOR_ATTR_WIRELESS_CTRL_CERT]);
  		mt7915_mcu_set_cfg(phy, CFGINFO_CERT_CFG, val8); /* Cert Enable for OMI */
@@ -97,7 +97,7 @@
 +	return len;
 +}
 +
- static int mt7915_vendor_hemu_ctrl(struct wiphy *wiphy,
+ static int mt7915_vendor_mu_ctrl(struct wiphy *wiphy,
  				  struct wireless_dev *wdev,
  				  const void *data,
 @@ -1286,6 +1316,7 @@ static const struct wiphy_vendor_command mt7915_vendor_commands[] = {
@@ -135,8 +135,8 @@
 +		NUM_MTK_VENDOR_ATTRS_WIRELESS_DUMP - 1
 +};
 +
- enum mtk_vendor_attr_hemu_ctrl {
- 	MTK_VENDOR_ATTR_HEMU_CTRL_UNSPEC,
+ enum mtk_vendor_attr_mu_ctrl {
+ 	MTK_VENDOR_ATTR_MU_CTRL_UNSPEC,
  
 -- 
 2.18.0
diff --git a/autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0006-hostapd-mtk-Add-hostapd-HEMU-SET-GET-control.patch b/autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0006-hostapd-mtk-Add-hostapd-MU-SET-GET-control.patch
similarity index 71%
rename from autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0006-hostapd-mtk-Add-hostapd-HEMU-SET-GET-control.patch
rename to autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0006-hostapd-mtk-Add-hostapd-MU-SET-GET-control.patch
index 27e71da..07e0d6d 100644
--- a/autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0006-hostapd-mtk-Add-hostapd-HEMU-SET-GET-control.patch
+++ b/autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0006-hostapd-mtk-Add-hostapd-MU-SET-GET-control.patch
@@ -1,7 +1,7 @@
 From 4919444a2dc29c019ec92321109603763c732071 Mon Sep 17 00:00:00 2001
 From: TomLiu <tomml.liu@mediatek.com>
 Date: Tue, 9 Aug 2022 10:23:44 -0700
-Subject: [PATCH 06/15] hostapd: mtk: Add hostapd HEMU SET/GET control
+Subject: [PATCH 06/15] hostapd: mtk: Add hostapd MU SET/GET control
 
 ---
  hostapd/config_file.c             |   9 +++
@@ -27,15 +27,15 @@
  			return 1;
  		}
  		bss->unsol_bcast_probe_resp_interval = val;
-+	} else if (os_strcmp(buf, "hemu_onoff") == 0) {
++	} else if (os_strcmp(buf, "mu_onoff") == 0) {
 +		int val = atoi(pos);
 +		if (val < 0 || val > 15) {
 +			wpa_printf(MSG_ERROR,
-+				   "Line %d: invalid hemu_onoff value",
++				   "Line %d: invalid mu_onoff value",
 +				   line);
 +			return 1;
 +		}
-+		conf->hemu_onoff = val;
++		conf->mu_onoff = val;
  #endif /* CONFIG_IEEE80211AX */
  	} else if (os_strcmp(buf, "max_listen_interval") == 0) {
  		bss->max_listen_interval = atoi(pos);
@@ -48,7 +48,7 @@
  
  
 +static int
-+hostapd_ctrl_iface_set_hemu(struct hostapd_data *hapd, char *cmd,
++hostapd_ctrl_iface_set_mu(struct hostapd_data *hapd, char *cmd,
 +					 char *buf, size_t buflen)
 +{
 +	char *pos, *config, *value;
@@ -63,19 +63,19 @@
 +	value = pos;
 +
 +	if (os_strcmp(config, "onoff") == 0) {
-+		int hemu = atoi(value);
-+		if (hemu < 0 || hemu > 15) {
-+			wpa_printf(MSG_ERROR, "Invalid value for hemu");
++		int mu = atoi(value);
++		if (mu < 0 || mu > 15) {
++			wpa_printf(MSG_ERROR, "Invalid value for mu");
 +			return -1;
 +		}
-+		hapd->iconf->hemu_onoff = (u8) hemu;
++		hapd->iconf->mu_onoff = (u8) mu;
 +	} else {
 +		wpa_printf(MSG_ERROR,
-+			"Unsupported parameter %s for SET_HEMU", config);
++			"Unsupported parameter %s for SET_MU", config);
 +		return -1;
 +	}
 +
-+	if(hostapd_drv_hemu_ctrl(hapd) == 0) {
++	if(hostapd_drv_mu_ctrl(hapd) == 0) {
 +		return os_snprintf(buf, buflen, "OK\n");
 +	} else {
 +		return -1;
@@ -84,19 +84,19 @@
 +
 +
 +static int
-+hostapd_ctrl_iface_get_hemu(struct hostapd_data *hapd, char *buf,
++hostapd_ctrl_iface_get_mu(struct hostapd_data *hapd, char *buf,
 +					 size_t buflen)
 +{
-+	u8 hemu_onoff;
++	u8 mu_onoff;
 +	char *pos, *end;
 +
 +	pos = buf;
 +	end = buf + buflen;
 +
-+	if (hostapd_drv_hemu_dump(hapd, &hemu_onoff) == 0) {
-+		hapd->iconf->hemu_onoff = hemu_onoff;
++	if (hostapd_drv_mu_dump(hapd, &mu_onoff) == 0) {
++		hapd->iconf->mu_onoff = mu_onoff;
 +		return os_snprintf(pos, end - pos, "[hostapd_cli] = UL MU-MIMO: %d, DL MU-MIMO: %d, UL OFDMA: %d, DL OFDMA: %d\n",
-+			!!(hemu_onoff&BIT(3)), !!(hemu_onoff&BIT(2)), !!(hemu_onoff&BIT(1)), !!(hemu_onoff&BIT(0)));
++			!!(mu_onoff&BIT(3)), !!(mu_onoff&BIT(2)), !!(mu_onoff&BIT(1)), !!(mu_onoff&BIT(0)));
 +	} else {
 +		wpa_printf(MSG_INFO, "ctrl iface failed to call");
 +		return -1;
@@ -111,11 +111,11 @@
  	} else if (os_strncmp(buf, "GET_EDCCA ", 10) == 0) {
  		reply_len = hostapd_ctrl_iface_get_edcca(hapd, buf+10, reply,
  							  reply_size);
-+	} else if (os_strncmp(buf, "SET_HEMU ", 9) == 0) {
-+		reply_len = hostapd_ctrl_iface_set_hemu(hapd, buf+9, reply,
++	} else if (os_strncmp(buf, "SET_MU ", 7) == 0) {
++		reply_len = hostapd_ctrl_iface_set_mu(hapd, buf + 7, reply,
 +							  reply_size);
-+	} else if (os_strncmp(buf, "GET_HEMU", 8) == 0) {
-+		reply_len = hostapd_ctrl_iface_get_hemu(hapd, reply, reply_size);
++	} else if (os_strncmp(buf, "GET_MU", 6) == 0) {
++		reply_len = hostapd_ctrl_iface_get_mu(hapd, reply, reply_size);
  	} else {
  		os_memcpy(reply, "UNKNOWN COMMAND\n", 16);
  		reply_len = 16;
@@ -127,17 +127,17 @@
  }
  
  
-+static int hostapd_cli_cmd_set_hemu(struct wpa_ctrl *ctrl, int argc,
++static int hostapd_cli_cmd_set_mu(struct wpa_ctrl *ctrl, int argc,
 +					   char *argv[])
 +{
-+	return hostapd_cli_cmd(ctrl, "SET_HEMU", 1, argc, argv);
++	return hostapd_cli_cmd(ctrl, "SET_MU", 1, argc, argv);
 +}
 +
 +
-+static int hostapd_cli_cmd_get_hemu(struct wpa_ctrl *ctrl, int argc,
++static int hostapd_cli_cmd_get_mu(struct wpa_ctrl *ctrl, int argc,
 +					   char *argv[])
 +{
-+	return hostapd_cli_cmd(ctrl, "GET_HEMU", 0, NULL, NULL);
++	return hostapd_cli_cmd(ctrl, "GET_MU", 0, NULL, NULL);
 +}
 +
 +
@@ -148,10 +148,10 @@
  	  " = send FTM range request"},
  	{ "driver_flags", hostapd_cli_cmd_driver_flags, NULL,
  	  " = show supported driver flags"},
-+	{ "set_hemu", hostapd_cli_cmd_set_hemu, NULL,
++	{ "set_mu", hostapd_cli_cmd_set_mu, NULL,
 +		"<value> [0-15] bitmap- UL MU-MIMO(bit3), DL MU-MIMO(bit2), UL OFDMA(bit1), DL OFDMA(bit0)"},
-+	{ "get_hemu", hostapd_cli_cmd_get_hemu, NULL,
-+		" = show hemu onoff value in 0-15 bitmap"},
++	{ "get_mu", hostapd_cli_cmd_get_mu, NULL,
++		" = show mu onoff value in 0-15 bitmap"},
  #ifdef CONFIG_DPP
  	{ "dpp_qr_code", hostapd_cli_cmd_dpp_qr_code, NULL,
  	  "report a scanned DPP URI from a QR Code" },
@@ -163,7 +163,7 @@
  	conf->he_6ghz_max_ampdu_len_exp = 7;
  	conf->he_6ghz_rx_ant_pat = 1;
  	conf->he_6ghz_tx_ant_pat = 1;
-+	conf->hemu_onoff = 13;
++	conf->mu_onoff = 13;
  #endif /* CONFIG_IEEE80211AX */
  
  	/* The third octet of the country string uses an ASCII space character
@@ -175,7 +175,7 @@
  	u8 he_6ghz_rx_ant_pat;
  	u8 he_6ghz_tx_ant_pat;
  	u8 he_6ghz_reg_pwr_type;
-+	u8 hemu_onoff;
++	u8 mu_onoff;
  #endif /* CONFIG_IEEE80211AX */
  
  	/* VHT enable/disable config from CHAN_SWITCH */
@@ -188,18 +188,18 @@
  	return hapd->driver->get_edcca(hapd->drv_priv, mode, value);
  }
 +
-+int hostapd_drv_hemu_ctrl(struct hostapd_data *hapd)
++int hostapd_drv_mu_ctrl(struct hostapd_data *hapd)
 +{
-+	if (!hapd->driver || !hapd->driver->hemu_ctrl)
++	if (!hapd->driver || !hapd->driver->mu_ctrl)
 +		return 0;
-+	return hapd->driver->hemu_ctrl(hapd->drv_priv, hapd->iconf->hemu_onoff);
++	return hapd->driver->mu_ctrl(hapd->drv_priv, hapd->iconf->mu_onoff);
 +}
 +
-+int hostapd_drv_hemu_dump(struct hostapd_data *hapd, u8 *hemu_onoff)
++int hostapd_drv_mu_dump(struct hostapd_data *hapd, u8 *mu_onoff)
 +{
-+	if (!hapd->driver || !hapd->driver->hemu_dump)
++	if (!hapd->driver || !hapd->driver->mu_dump)
 +		return 0;
-+	return hapd->driver->hemu_dump(hapd->drv_priv, hemu_onoff);
++	return hapd->driver->mu_dump(hapd->drv_priv, mu_onoff);
 +}
 diff --git a/src/ap/ap_drv_ops.h b/src/ap/ap_drv_ops.h
 index 70a99f406..bca39c502 100644
@@ -209,8 +209,8 @@
  int hostapd_drv_configure_edcca_threshold(struct hostapd_data *hapd,
  					  const int *threshold);
  int hostapd_drv_get_edcca(struct hostapd_data *hapd, const u8 mode, u8 *value);
-+int hostapd_drv_hemu_ctrl(struct hostapd_data *hapd);
-+int hostapd_drv_hemu_dump(struct hostapd_data *hapd, u8 *hemu_onoff);
++int hostapd_drv_mu_ctrl(struct hostapd_data *hapd);
++int hostapd_drv_mu_dump(struct hostapd_data *hapd, u8 *mu_onoff);
  
  #include "drivers/driver.h"
  
@@ -222,7 +222,7 @@
  	if (hostapd_drv_configure_edcca_threshold(hapd,
  						  hapd->iconf->edcca_threshold) < 0)
  		goto fail;
-+	if (hostapd_drv_hemu_ctrl(hapd) < 0)
++	if (hostapd_drv_mu_ctrl(hapd) < 0)
 +		goto fail;
  
  	wpa_printf(MSG_DEBUG, "%s: Setup of interface done.",
@@ -235,7 +235,7 @@
  	MTK_NL80211_VENDOR_SUBCMD_CSI_CTRL = 0xc2,
  	MTK_NL80211_VENDOR_SUBCMD_RFEATURE_CTRL = 0xc3,
  	MTK_NL80211_VENDOR_SUBCMD_WIRELESS_CTRL = 0xc4,
-+	MTK_NL80211_VENDOR_SUBCMD_HEMU_CTRL = 0xc5,
++	MTK_NL80211_VENDOR_SUBCMD_MU_CTRL = 0xc5,
 +	MTK_NL80211_VENDOR_SUBCMD_PHY_CAPA_CTRL= 0xc6,
  	MTK_NL80211_VENDOR_SUBCMD_EDCCA_CTRL = 0xc7,
  };
@@ -244,16 +244,16 @@
  		NUM_MTK_VENDOR_ATTRS_RFEATURE_CTRL - 1
  };
  
-+enum mtk_vendor_attr_hemu_ctrl {
-+	MTK_VENDOR_ATTR_HEMU_CTRL_UNSPEC,
++enum mtk_vendor_attr_mu_ctrl {
++	MTK_VENDOR_ATTR_MU_CTRL_UNSPEC,
 +
-+	MTK_VENDOR_ATTR_HEMU_CTRL_ONOFF,
-+	MTK_VENDOR_ATTR_HEMU_CTRL_DUMP,
++	MTK_VENDOR_ATTR_MU_CTRL_ONOFF,
++	MTK_VENDOR_ATTR_MU_CTRL_DUMP,
 +
 +	/* keep last */
-+	NUM_MTK_VENDOR_ATTRS_HEMU_CTRL,
-+	MTK_VENDOR_ATTR_HEMU_CTRL_MAX =
-+		NUM_MTK_VENDOR_ATTRS_HEMU_CTRL - 1
++	NUM_MTK_VENDOR_ATTRS_MU_CTRL,
++	MTK_VENDOR_ATTR_MU_CTRL_MAX =
++		NUM_MTK_VENDOR_ATTRS_MU_CTRL - 1
 +};
 +
 +
@@ -270,9 +270,9 @@
  	size_t unsol_bcast_probe_resp_tmpl_len;
 +
 +	/**
-+	 * hemu onoff=<val> (bitmap- UL MU-MIMO(bit3), DL MU-MIMO(bit2), UL OFDMA(bit1), DL OFDMA(bit0))
++	 * mu onoff=<val> (bitmap- UL MU-MIMO(bit3), DL MU-MIMO(bit2), UL OFDMA(bit1), DL OFDMA(bit0))
 +	 */
-+	u8 hemu_onoff;
++	u8 mu_onoff;
  };
  
  struct wpa_driver_mesh_bss_params {
@@ -282,12 +282,12 @@
  	int (*get_edcca)(void *priv, const u8 mode, u8 *value);
 +
 +	/**
-+	 * hemu_ctrl - ctrl on off for UL/DL MURU
++	 * mu_ctrl - ctrl on off for UL/DL MURU
 +	 * @priv: Private driver interface data
 +	 *
 +	 */
-+	 int (*hemu_ctrl)(void *priv, u8 hemu_onoff);
-+	 int (*hemu_dump)(void *priv, u8 *hemu_onoff);
++	 int (*mu_ctrl)(void *priv, u8 mu_onoff);
++	 int (*mu_dump)(void *priv, u8 *mu_onoff);
  };
  
  /**
@@ -300,7 +300,7 @@
  
  
 +#ifdef CONFIG_IEEE80211AX
-+static int nl80211_hemu_muruonoff(void *priv, u8 hemu_onoff)
++static int nl80211_mu_onoff(void *priv, u8 mu_onoff)
 +{
 +	struct i802_bss *bss = priv;
 +	struct wpa_driver_nl80211_data *drv = bss->drv;
@@ -308,41 +308,41 @@
 +	struct nlattr *data;
 +	int ret;
 +
-+	if (!drv->mtk_hemu_vendor_cmd_avail) {
++	if (!drv->mtk_mu_vendor_cmd_avail) {
 +		wpa_printf(MSG_INFO,
-+			   "nl80211: Driver does not support setting hemu control");
++			   "nl80211: Driver does not support setting mu control");
 +		return 0;
 +	}
 +
 +	if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) ||
 +		nla_put_u32(msg, NL80211_ATTR_VENDOR_ID, OUI_MTK) ||
-+		nla_put_u32(msg, NL80211_ATTR_VENDOR_SUBCMD, MTK_NL80211_VENDOR_SUBCMD_HEMU_CTRL) ||
++		nla_put_u32(msg, NL80211_ATTR_VENDOR_SUBCMD, MTK_NL80211_VENDOR_SUBCMD_MU_CTRL) ||
 +		!(data = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA)) ||
-+		nla_put_u8(msg, MTK_VENDOR_ATTR_HEMU_CTRL_ONOFF, hemu_onoff)) {
++		nla_put_u8(msg, MTK_VENDOR_ATTR_MU_CTRL_ONOFF, mu_onoff)) {
 +		nlmsg_free(msg);
 +		return -ENOBUFS;
 +	}
 +	nla_nest_end(msg, data);
 +	ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL);
 +	if(ret){
-+		wpa_printf(MSG_ERROR, "Failed to set hemu_onoff. ret=%d (%s)", ret, strerror(-ret));
++		wpa_printf(MSG_ERROR, "Failed to set mu_onoff. ret=%d (%s)", ret, strerror(-ret));
 +	}
 +	return ret;
 +}
 +
 +
-+static int hemu_dump_handler(struct nl_msg *msg, void *arg)
++static int mu_dump_handler(struct nl_msg *msg, void *arg)
 +{
-+	u8 *hemu_onoff = (u8 *) arg;
++	u8 *mu_onoff = (u8 *) arg;
 +	struct nlattr *tb[NL80211_ATTR_MAX + 1];
-+	struct nlattr *tb_vendor[MTK_VENDOR_ATTR_HEMU_CTRL_MAX + 1];
++	struct nlattr *tb_vendor[MTK_VENDOR_ATTR_MU_CTRL_MAX + 1];
 +	struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
 +	struct nlattr *nl_vend, *attr;
 +
 +	static const struct nla_policy
-+	hemu_ctrl_policy[NUM_MTK_VENDOR_ATTRS_HEMU_CTRL + 1] = {
-+		[MTK_VENDOR_ATTR_HEMU_CTRL_ONOFF] = {.type = NLA_U8 },
-+		[MTK_VENDOR_ATTR_HEMU_CTRL_DUMP] = {.type = NLA_U8 },
++	mu_ctrl_policy[NUM_MTK_VENDOR_ATTRS_MU_CTRL + 1] = {
++		[MTK_VENDOR_ATTR_MU_CTRL_ONOFF] = {.type = NLA_U8 },
++		[MTK_VENDOR_ATTR_MU_CTRL_DUMP] = {.type = NLA_U8 },
 +	};
 +
 +	nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
@@ -352,22 +352,22 @@
 +	if (!nl_vend)
 +		return NL_SKIP;
 +
-+	nla_parse(tb_vendor, MTK_VENDOR_ATTR_HEMU_CTRL_MAX,
++	nla_parse(tb_vendor, MTK_VENDOR_ATTR_MU_CTRL_MAX,
 +		  nla_data(nl_vend), nla_len(nl_vend), NULL);
 +
-+	attr = tb_vendor[MTK_VENDOR_ATTR_HEMU_CTRL_DUMP];
++	attr = tb_vendor[MTK_VENDOR_ATTR_MU_CTRL_DUMP];
 +	if (!attr) {
-+		wpa_printf(MSG_ERROR, "nl80211: cannot find MTK_VENDOR_ATTR_HEMU_CTRL_DUMP");
++		wpa_printf(MSG_ERROR, "nl80211: cannot find MTK_VENDOR_ATTR_MU_CTRL_DUMP");
 +		return NL_SKIP;
 +	}
 +
-+	*hemu_onoff = nla_get_u8(attr);
-+	wpa_printf(MSG_DEBUG, "nla_get hemu_onoff: %d\n", *hemu_onoff);
++	*mu_onoff = nla_get_u8(attr);
++	wpa_printf(MSG_DEBUG, "nla_get mu_onoff: %d\n", *mu_onoff);
 +
 +	return 0;
 +}
 +
-+static int nl80211_hemu_dump(void *priv, u8 *hemu_onoff)
++static int nl80211_mu_dump(void *priv, u8 *mu_onoff)
 +{
 +	struct i802_bss *bss = priv;
 +	struct wpa_driver_nl80211_data *drv = bss->drv;
@@ -375,15 +375,15 @@
 +	struct nlattr *attr;
 +	int ret;
 +
-+	if (!drv->mtk_hemu_vendor_cmd_avail) {
++	if (!drv->mtk_mu_vendor_cmd_avail) {
 +		wpa_printf(MSG_INFO,
-+			   "nl80211: Driver does not support setting hemu control");
++			   "nl80211: Driver does not support setting mu control");
 +		return 0;
 +	}
 +
 +	if (!(msg = nl80211_drv_msg(drv, NLM_F_DUMP, NL80211_CMD_VENDOR)) ||
 +		nla_put_u32(msg, NL80211_ATTR_VENDOR_ID, OUI_MTK) ||
-+		nla_put_u32(msg, NL80211_ATTR_VENDOR_SUBCMD, MTK_NL80211_VENDOR_SUBCMD_HEMU_CTRL)) {
++		nla_put_u32(msg, NL80211_ATTR_VENDOR_SUBCMD, MTK_NL80211_VENDOR_SUBCMD_MU_CTRL)) {
 +		nlmsg_free(msg);
 +		return -ENOBUFS;
 +	}
@@ -396,10 +396,10 @@
 +
 +	nla_nest_end(msg, attr);
 +
-+	ret = send_and_recv_msgs(drv, msg, hemu_dump_handler, hemu_onoff, NULL, NULL);
++	ret = send_and_recv_msgs(drv, msg, mu_dump_handler, mu_onoff, NULL, NULL);
 +
 +	if(ret){
-+		wpa_printf(MSG_ERROR, "Failed to get hemu_onoff. ret=%d (%s)", ret, strerror(-ret));
++		wpa_printf(MSG_ERROR, "Failed to get mu_onoff. ret=%d (%s)", ret, strerror(-ret));
 +	}
 +
 +	return ret;
@@ -414,8 +414,8 @@
  	.update_connect_params = nl80211_update_connection_params,
  	.send_external_auth_status = nl80211_send_external_auth_status,
  	.set_4addr_mode = nl80211_set_4addr_mode,
-+	.hemu_ctrl = nl80211_hemu_muruonoff,
-+	.hemu_dump = nl80211_hemu_dump,
++	.mu_ctrl = nl80211_mu_onoff,
++	.mu_dump = nl80211_mu_dump,
  #ifdef CONFIG_DPP
  	.dpp_listen = nl80211_dpp_listen,
  #endif /* CONFIG_DPP */
@@ -427,7 +427,7 @@
  	unsigned int brcm_do_acs:1;
  	unsigned int uses_6ghz:1;
  	unsigned int mtk_edcca_vendor_cmd_avail:1;
-+	unsigned int mtk_hemu_vendor_cmd_avail:1;
++	unsigned int mtk_mu_vendor_cmd_avail:1;
  
  	u64 vendor_scan_cookie;
  	u64 remain_on_chan_cookie;
@@ -439,8 +439,8 @@
  				case MTK_NL80211_VENDOR_SUBCMD_EDCCA_CTRL :
  					drv->mtk_edcca_vendor_cmd_avail = 1;
  					break;
-+				case MTK_NL80211_VENDOR_SUBCMD_HEMU_CTRL :
-+					drv->mtk_hemu_vendor_cmd_avail = 1;
++				case MTK_NL80211_VENDOR_SUBCMD_MU_CTRL :
++					drv->mtk_mu_vendor_cmd_avail = 1;
 +					break;
  				}
  			}
diff --git a/autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0007-hostapd-mtk-Add-three-wire-PTA-ctrl-hostapd-vendor-c.patch b/autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0007-hostapd-mtk-Add-three-wire-PTA-ctrl-hostapd-vendor-c.patch
index 4bc3fcd..8ca8c55 100644
--- a/autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0007-hostapd-mtk-Add-three-wire-PTA-ctrl-hostapd-vendor-c.patch
+++ b/autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0007-hostapd-mtk-Add-three-wire-PTA-ctrl-hostapd-vendor-c.patch
@@ -74,9 +74,9 @@
 index 4598737a3..a1d83e4ee 100644
 --- a/src/ap/ap_drv_ops.c
 +++ b/src/ap/ap_drv_ops.c
-@@ -1053,3 +1053,14 @@ int hostapd_drv_hemu_dump(struct hostapd_data *hapd, u8 *hemu_onoff)
+@@ -1053,3 +1053,14 @@ int hostapd_drv_mu_dump(struct hostapd_data *hapd, u8 *mu_onoff)
  		return 0;
- 	return hapd->driver->hemu_dump(hapd->drv_priv, hemu_onoff);
+ 	return hapd->driver->mu_dump(hapd->drv_priv, mu_onoff);
  }
 +
 +int hostapd_drv_three_wire_ctrl(struct hostapd_data *hapd)
@@ -95,8 +95,8 @@
 +++ b/src/ap/ap_drv_ops.h
 @@ -144,6 +144,7 @@ int hostapd_drv_configure_edcca_threshold(struct hostapd_data *hapd,
  int hostapd_drv_get_edcca(struct hostapd_data *hapd, const u8 mode, u8 *value);
- int hostapd_drv_hemu_ctrl(struct hostapd_data *hapd);
- int hostapd_drv_hemu_dump(struct hostapd_data *hapd, u8 *hemu_onoff);
+ int hostapd_drv_mu_ctrl(struct hostapd_data *hapd);
+ int hostapd_drv_mu_dump(struct hostapd_data *hapd, u8 *mu_onoff);
 +int hostapd_drv_three_wire_ctrl(struct hostapd_data *hapd);
  
  #include "drivers/driver.h"
@@ -107,7 +107,7 @@
 +++ b/src/ap/hostapd.c
 @@ -2304,6 +2304,8 @@ dfs_offload:
  		goto fail;
- 	if (hostapd_drv_hemu_ctrl(hapd) < 0)
+ 	if (hostapd_drv_mu_ctrl(hapd) < 0)
  		goto fail;
 +	if (hostapd_drv_three_wire_ctrl(hapd) < 0)
 +		goto fail;
@@ -119,7 +119,7 @@
 --- a/src/common/mtk_vendor.h
 +++ b/src/common/mtk_vendor.h
 @@ -13,6 +13,7 @@ enum mtk_nl80211_vendor_subcmds {
- 	MTK_NL80211_VENDOR_SUBCMD_HEMU_CTRL = 0xc5,
+ 	MTK_NL80211_VENDOR_SUBCMD_MU_CTRL = 0xc5,
  	MTK_NL80211_VENDOR_SUBCMD_PHY_CAPA_CTRL= 0xc6,
  	MTK_NL80211_VENDOR_SUBCMD_EDCCA_CTRL = 0xc7,
 +	MTK_NL80211_VENDOR_SUBCMD_3WIRE_CTRL = 0xc8
@@ -154,8 +154,8 @@
 +++ b/src/drivers/driver.h
 @@ -4693,6 +4693,14 @@ struct wpa_driver_ops {
  	 */
- 	 int (*hemu_ctrl)(void *priv, u8 hemu_onoff);
- 	 int (*hemu_dump)(void *priv, u8 *hemu_onoff);
+ 	 int (*mu_ctrl)(void *priv, u8 mu_onoff);
+ 	 int (*mu_dump)(void *priv, u8 *mu_onoff);
 +
 +	/**
 +	 * three_wire_ctrl - set three_wire_ctrl mode
@@ -223,7 +223,7 @@
 @@ -183,6 +183,7 @@ struct wpa_driver_nl80211_data {
  	unsigned int uses_6ghz:1;
  	unsigned int mtk_edcca_vendor_cmd_avail:1;
- 	unsigned int mtk_hemu_vendor_cmd_avail:1;
+ 	unsigned int mtk_mu_vendor_cmd_avail:1;
 +	unsigned int mtk_3wire_vendor_cmd_avail:1;
  
  	u64 vendor_scan_cookie;
@@ -233,8 +233,8 @@
 --- a/src/drivers/driver_nl80211_capa.c
 +++ b/src/drivers/driver_nl80211_capa.c
 @@ -1059,6 +1059,9 @@ static int wiphy_info_handler(struct nl_msg *msg, void *arg)
- 				case MTK_NL80211_VENDOR_SUBCMD_HEMU_CTRL :
- 					drv->mtk_hemu_vendor_cmd_avail = 1;
+ 				case MTK_NL80211_VENDOR_SUBCMD_MU_CTRL :
+ 					drv->mtk_mu_vendor_cmd_avail = 1;
  					break;
 +				case MTK_NL80211_VENDOR_SUBCMD_3WIRE_CTRL :
 +					drv->mtk_3wire_vendor_cmd_avail = 1;
diff --git a/autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0008-hostapd-mtk-Add-hostapd-iBF-control.patch b/autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0008-hostapd-mtk-Add-hostapd-iBF-control.patch
index 6bfe3d0..fc38b4f 100644
--- a/autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0008-hostapd-mtk-Add-hostapd-iBF-control.patch
+++ b/autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0008-hostapd-mtk-Add-hostapd-iBF-control.patch
@@ -38,7 +38,7 @@
 index 5f71aeea9..c881d3717 100644
 --- a/hostapd/ctrl_iface.c
 +++ b/hostapd/ctrl_iface.c
-@@ -3498,6 +3498,30 @@ hostapd_ctrl_iface_get_hemu(struct hostapd_data *hapd, char *buf,
+@@ -3498,6 +3498,30 @@ hostapd_ctrl_iface_get_mu(struct hostapd_data *hapd, char *buf,
  }
  
  
@@ -71,8 +71,8 @@
  					      int reply_size,
 @@ -4055,6 +4079,8 @@ static int hostapd_ctrl_iface_receive_process(struct hostapd_data *hapd,
  							  reply_size);
- 	} else if (os_strncmp(buf, "GET_HEMU", 8) == 0) {
- 		reply_len = hostapd_ctrl_iface_get_hemu(hapd, reply, reply_size);
+ 	} else if (os_strncmp(buf, "GET_MU", 6) == 0) {
+ 		reply_len = hostapd_ctrl_iface_get_mu(hapd, reply, reply_size);
 +	} else if (os_strncmp(buf, "GET_IBF", 7) == 0) {
 +		reply_len = hostapd_ctrl_iface_get_ibf(hapd, reply, reply_size);
  	} else {
@@ -165,8 +165,8 @@
 --- a/src/ap/ap_drv_ops.h
 +++ b/src/ap/ap_drv_ops.h
 @@ -145,6 +145,8 @@ int hostapd_drv_get_edcca(struct hostapd_data *hapd, const u8 mode, u8 *value);
- int hostapd_drv_hemu_ctrl(struct hostapd_data *hapd);
- int hostapd_drv_hemu_dump(struct hostapd_data *hapd, u8 *hemu_onoff);
+ int hostapd_drv_mu_ctrl(struct hostapd_data *hapd);
+ int hostapd_drv_mu_dump(struct hostapd_data *hapd, u8 *mu_onoff);
  int hostapd_drv_three_wire_ctrl(struct hostapd_data *hapd);
 +int hostapd_drv_ibf_ctrl(struct hostapd_data *hapd);
 +int hostapd_drv_ibf_dump(struct hostapd_data *hapd, u8 *ibf_enable);
@@ -191,7 +191,7 @@
 --- a/src/common/mtk_vendor.h
 +++ b/src/common/mtk_vendor.h
 @@ -13,7 +13,8 @@ enum mtk_nl80211_vendor_subcmds {
- 	MTK_NL80211_VENDOR_SUBCMD_HEMU_CTRL = 0xc5,
+ 	MTK_NL80211_VENDOR_SUBCMD_MU_CTRL = 0xc5,
  	MTK_NL80211_VENDOR_SUBCMD_PHY_CAPA_CTRL= 0xc6,
  	MTK_NL80211_VENDOR_SUBCMD_EDCCA_CTRL = 0xc7,
 -	MTK_NL80211_VENDOR_SUBCMD_3WIRE_CTRL = 0xc8
@@ -200,8 +200,8 @@
  };
  
  enum mtk_vendor_attr_edcca_ctrl {
-@@ -204,6 +205,38 @@ enum mtk_vendor_attr_hemu_ctrl {
- 		NUM_MTK_VENDOR_ATTRS_HEMU_CTRL - 1
+@@ -204,6 +205,38 @@ enum mtk_vendor_attr_mu_ctrl {
+ 		NUM_MTK_VENDOR_ATTRS_MU_CTRL - 1
  };
  
 +enum mtk_vendor_attr_ibf_ctrl {
@@ -244,9 +244,9 @@
 --- a/src/drivers/driver.h
 +++ b/src/drivers/driver.h
 @@ -1628,6 +1628,11 @@ struct wpa_driver_ap_params {
- 	 * hemu onoff=<val> (bitmap- UL MU-MIMO(bit3), DL MU-MIMO(bit2), UL OFDMA(bit1), DL OFDMA(bit0))
+ 	 * mu onoff=<val> (bitmap- UL MU-MIMO(bit3), DL MU-MIMO(bit2), UL OFDMA(bit1), DL OFDMA(bit0))
  	 */
- 	u8 hemu_onoff;
+ 	u8 mu_onoff;
 +
 +	/**
 +	 * ibf_enable=<val>
@@ -406,7 +406,7 @@
 +++ b/src/drivers/driver_nl80211.h
 @@ -184,6 +184,7 @@ struct wpa_driver_nl80211_data {
  	unsigned int mtk_edcca_vendor_cmd_avail:1;
- 	unsigned int mtk_hemu_vendor_cmd_avail:1;
+ 	unsigned int mtk_mu_vendor_cmd_avail:1;
  	unsigned int mtk_3wire_vendor_cmd_avail:1;
 +	unsigned int mtk_ibf_vendor_cmd_avail:1;
  
diff --git a/autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0010-hostapd-mtk-Add-DFS-and-ZWDFS-support.patch b/autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0010-hostapd-mtk-Add-DFS-and-ZWDFS-support.patch
index 8a387a7..3237aa3 100644
--- a/autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0010-hostapd-mtk-Add-DFS-and-ZWDFS-support.patch
+++ b/autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0010-hostapd-mtk-Add-DFS-and-ZWDFS-support.patch
@@ -133,7 +133,7 @@
  					      char *buf, char *reply,
  					      int reply_size,
 @@ -4081,6 +4171,11 @@ static int hostapd_ctrl_iface_receive_process(struct hostapd_data *hapd,
- 		reply_len = hostapd_ctrl_iface_get_hemu(hapd, reply, reply_size);
+ 		reply_len = hostapd_ctrl_iface_get_mu(hapd, reply, reply_size);
  	} else if (os_strncmp(buf, "GET_IBF", 7) == 0) {
  		reply_len = hostapd_ctrl_iface_get_ibf(hapd, reply, reply_size);
 +	} else if (os_strncmp(buf, "DFS_DETECT_MODE ", 16) == 0) {
diff --git a/autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0011-hostapd-mtk-Add-amsdu-set-get-ctrl.patch b/autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0011-hostapd-mtk-Add-amsdu-set-get-ctrl.patch
index ed796c1..dba90d1 100644
--- a/autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0011-hostapd-mtk-Add-amsdu-set-get-ctrl.patch
+++ b/autobuild_mac80211_release/package/network/services/hostapd/patches/mtk-0011-hostapd-mtk-Add-amsdu-set-get-ctrl.patch
@@ -162,7 +162,7 @@
 index ab9aedcee..4406666fd 100644
 --- a/src/ap/ap_drv_ops.h
 +++ b/src/ap/ap_drv_ops.h
-@@ -147,6 +147,8 @@ int hostapd_drv_hemu_dump(struct hostapd_data *hapd, u8 *hemu_onoff);
+@@ -147,6 +147,8 @@ int hostapd_drv_mu_dump(struct hostapd_data *hapd, u8 *mu_onoff);
  int hostapd_drv_three_wire_ctrl(struct hostapd_data *hapd);
  int hostapd_drv_ibf_ctrl(struct hostapd_data *hapd);
  int hostapd_drv_ibf_dump(struct hostapd_data *hapd, u8 *ibf_enable);
@@ -374,7 +374,7 @@
 --- a/src/drivers/driver_nl80211.h
 +++ b/src/drivers/driver_nl80211.h
 @@ -185,6 +185,7 @@ struct wpa_driver_nl80211_data {
- 	unsigned int mtk_hemu_vendor_cmd_avail:1;
+ 	unsigned int mtk_mu_vendor_cmd_avail:1;
  	unsigned int mtk_3wire_vendor_cmd_avail:1;
  	unsigned int mtk_ibf_vendor_cmd_avail:1;
 +	unsigned int mtk_wireless_vendor_cmd_avail:1;
diff --git a/feed/atenl/files/iwpriv.sh b/feed/atenl/files/iwpriv.sh
index 333852d..8b0d76f 100755
--- a/feed/atenl/files/iwpriv.sh
+++ b/feed/atenl/files/iwpriv.sh
@@ -1073,7 +1073,7 @@
     echo "  mwctl <interface> set ap_wireless ampdu=<enable>"
     echo "  mwctl <interface> set ap_wireless amsdu=<enable>"
     echo "  mwctl <interface> set ap_wireless cert=<enable>"
-    echo "  mwctl <interface> set hemu onoff=<val> (bitmap- UL MU-MIMO(bit3), DL MU-MIMO(bit2), UL OFDMA(bit1), DL OFDMA(bit0))"
+    echo "  mwctl <interface> set mu onoff=<val> (bitmap- UL MU-MIMO(bit3), DL MU-MIMO(bit2), UL OFDMA(bit1), DL OFDMA(bit0))"
     echo "  mwctl <interface> dump phy_capa"
 }
 
@@ -1121,7 +1121,7 @@
         ## In wifi 7 chipset, testmode & vendor command both use mwctl
         ## Therefore this wrapper would translate it to either mt76-test or mt76-vendor based on the attribute of the command
         ## Translate to mt76-vendor command
-        "csi"|"amnt"|"ap_rfeatures"|"ap_wireless"|"hemu")
+        "csi"|"amnt"|"ap_rfeatures"|"ap_wireless"|"mu")
 	    if [ ${is_eagle} == "1" ]; then
                 do_cmd "hostapd_cli -i $*"
                 skip=1
diff --git a/feed/mt76-vendor/src/CMakeLists.txt b/feed/mt76-vendor/src/CMakeLists.txt
index dd6ef76..bca3897 100644
--- a/feed/mt76-vendor/src/CMakeLists.txt
+++ b/feed/mt76-vendor/src/CMakeLists.txt
@@ -3,7 +3,7 @@
 PROJECT(mt76-vendor C)
 ADD_DEFINITIONS(-Os -Wall --std=gnu99 -g3)
 
-ADD_EXECUTABLE(mt76-vendor main.c csi.c amnt.c capi.c hemu.c phy_capa.c)
+ADD_EXECUTABLE(mt76-vendor main.c csi.c amnt.c capi.c mu.c phy_capa.c)
 TARGET_LINK_LIBRARIES(mt76-vendor nl-tiny)
 
 SET(CMAKE_INSTALL_PREFIX /usr)
diff --git a/feed/mt76-vendor/src/main.c b/feed/mt76-vendor/src/main.c
index f308d9c..e0bf9d9 100644
--- a/feed/mt76-vendor/src/main.c
+++ b/feed/mt76-vendor/src/main.c
@@ -32,7 +32,7 @@
 		"set ap_wireless amsdu=<enable>",
 		"set ap_wireless cert=<enable>",
 
-		"set hemu onoff=<val> (bitmap- UL MU-MIMO(bit3), DL MU-MIMO(bit2), UL OFDMA(bit1), DL OFDMA(bit0))",
+		"set mu onoff=<val> (bitmap- UL MU-MIMO(bit3), DL MU-MIMO(bit2), UL OFDMA(bit1), DL OFDMA(bit0))",
 
 		"dump phy_capa",
 	};
@@ -81,8 +81,8 @@
 			ret = mt76_ap_rfeatures_set(if_idx, argc, argv);
 		else if (!strncmp(subcmd, "ap_wireless", 11))
 			ret = mt76_ap_wireless_set(if_idx, argc, argv);
-		else if (!strncmp(subcmd, "hemu", 4))
-			ret = mt76_hemu_onoff_set(if_idx, argc, argv);
+		else if (!strncmp(subcmd, "mu", 2))
+			ret = mt76_mu_onoff_set(if_idx, argc, argv);
 	} else {
 		usage();
 	}
diff --git a/feed/mt76-vendor/src/mt76-vendor.h b/feed/mt76-vendor/src/mt76-vendor.h
index 7e11b91..61b0426 100644
--- a/feed/mt76-vendor/src/mt76-vendor.h
+++ b/feed/mt76-vendor/src/mt76-vendor.h
@@ -38,7 +38,7 @@
 	MTK_NL80211_VENDOR_SUBCMD_CSI_CTRL = 0xc2,
 	MTK_NL80211_VENDOR_SUBCMD_RFEATURE_CTRL = 0xc3,
 	MTK_NL80211_VENDOR_SUBCMD_WIRELESS_CTRL = 0xc4,
-	MTK_NL80211_VENDOR_SUBCMD_HEMU_CTRL = 0xc5,
+	MTK_NL80211_VENDOR_SUBCMD_MU_CTRL = 0xc5,
 	MTK_NL80211_VENDOR_SUBCMD_PHY_CAPA_CTRL = 0xc6,
 };
 
@@ -148,15 +148,15 @@
 		NUM_MTK_VENDOR_ATTRS_WIRELESS_CTRL - 1
 };
 
-enum mtk_vendor_attr_hemu_ctrl {
-	MTK_VENDOR_ATTR_HEMU_CTRL_UNSPEC,
+enum mtk_vendor_attr_mu_ctrl {
+	MTK_VENDOR_ATTR_MU_CTRL_UNSPEC,
 
-	MTK_VENDOR_ATTR_HEMU_CTRL_ONOFF,
+	MTK_VENDOR_ATTR_MU_CTRL_ONOFF,
 
 	/* keep last */
-	NUM_MTK_VENDOR_ATTRS_HEMU_CTRL,
-	MTK_VENDOR_ATTR_HEMU_CTRL_MAX =
-		NUM_MTK_VENDOR_ATTRS_HEMU_CTRL - 1
+	NUM_MTK_VENDOR_ATTRS_MU_CTRL,
+	MTK_VENDOR_ATTR_MU_CTRL_MAX =
+		NUM_MTK_VENDOR_ATTRS_MU_CTRL - 1
 };
 
 enum mtk_vendor_attr_rfeature_ctrl {
@@ -236,7 +236,7 @@
 int mt76_ap_rfeatures_set(int idx, int argc, char **argv);
 int mt76_ap_wireless_set(int idx, int argc, char **argv);
 
-int mt76_hemu_onoff_set(int idx, int argc, char **argv);
+int mt76_mu_onoff_set(int idx, int argc, char **argv);
 
 int mt76_phy_capa_dump(int idx, int argc, char **argv);
 #endif
diff --git a/feed/mt76-vendor/src/hemu.c b/feed/mt76-vendor/src/mu.c
similarity index 72%
rename from feed/mt76-vendor/src/hemu.c
rename to feed/mt76-vendor/src/mu.c
index ec1cea0..fb4157e 100755
--- a/feed/mt76-vendor/src/hemu.c
+++ b/feed/mt76-vendor/src/mu.c
@@ -3,7 +3,7 @@
 
 #include "mt76-vendor.h"
 
-static int mt76_hemu_onoff_set_attr(struct nl_msg *msg, int argc, char **argv)
+static int mt76_mu_onoff_set_attr(struct nl_msg *msg, int argc, char **argv)
 {
 	char *val;
 
@@ -14,12 +14,13 @@
 	*(val++) = 0;
 
 	if (!strncmp(argv[0], "onoff", 5))
-		nla_put_u8(msg, MTK_VENDOR_ATTR_HEMU_CTRL_ONOFF, strtoul(val, NULL, 0));
+		nla_put_u8(msg, MTK_VENDOR_ATTR_MU_CTRL_ONOFF,
+			   strtoul(val, NULL, 0));
 
 	return 0;
 }
 
-int mt76_hemu_onoff_set(int idx, int argc, char **argv)
+int mt76_mu_onoff_set(int idx, int argc, char **argv)
 {
 	struct nl_msg *msg;
 	void *data;
@@ -37,14 +38,15 @@
 
 	if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, idx) ||
 	    nla_put_u32(msg, NL80211_ATTR_VENDOR_ID, MTK_NL80211_VENDOR_ID) ||
-	    nla_put_u32(msg, NL80211_ATTR_VENDOR_SUBCMD, MTK_NL80211_VENDOR_SUBCMD_HEMU_CTRL))
+	    nla_put_u32(msg, NL80211_ATTR_VENDOR_SUBCMD,
+			MTK_NL80211_VENDOR_SUBCMD_MU_CTRL))
 		return false;
 
 	data = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA | NLA_F_NESTED);
 	if (!data)
 		return -ENOMEM;
 
-	mt76_hemu_onoff_set_attr(msg, argc, argv);
+	mt76_mu_onoff_set_attr(msg, argc, argv);
 
 	nla_nest_end(msg, data);
 
@@ -55,4 +57,4 @@
 	unl_free(&unl);
 
 	return ret;
-}
\ No newline at end of file
+}
