diff --git a/recipes-ccsp/hal/hal-wifi-patches/0001-patch-HAL-implement-wifi_setRadioCountryCode-wifi_ge.patch b/recipes-ccsp/hal/hal-wifi-patches/0001-patch-HAL-implement-wifi_setRadioCountryCode-wifi_ge.patch
new file mode 100644
index 0000000..9fc54a1
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0001-patch-HAL-implement-wifi_setRadioCountryCode-wifi_ge.patch
@@ -0,0 +1,69 @@
+From f804c8f10fc057308def2fb70c9c94922b03f161 Mon Sep 17 00:00:00 2001
+From: "Allen.Ye" <allen.ye@mediatek.com>
+Date: Mon, 11 Jul 2022 17:47:56 +0800
+Subject: [PATCH] [patch] HAL: implement wifi_setRadioCountryCode() &
+ wifi_getRadioCountryCode()
+
+---
+ source/wifi/wifi_hal.c | 37 +++++++++++++++++++++++++++++++++++--
+ 1 file changed, 35 insertions(+), 2 deletions(-)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index 51f25c6..23572ac 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -929,9 +929,16 @@ INT wifi_createInitialConfigFiles()
+ // outputs the country code to a max 64 character string
+ INT wifi_getRadioCountryCode(INT radioIndex, CHAR *output_string)
+ {
+-    if (NULL == output_string)
++    char buf[MAX_BUF_SIZE] = {0}, cmd[MAX_CMD_SIZE] = {0}, *value;
++    if(!output_string || !(radioIndex==0 || radioIndex==1))
++        return RETURN_ERR;
++
++    sprintf(cmd,"hostapd_cli -i %s%d status driver | grep country | cut -d '=' -f2", AP_PREFIX, radioIndex);
++    _syscmd(cmd, buf, sizeof(buf));
++    if(strlen(buf) > 0)
++        snprintf(output_string, 64, "%s", buf);
++    else
+         return RETURN_ERR;
+-    snprintf(output_string, 64, "US");
+ 
+     return RETURN_OK;
+ }
+@@ -939,6 +946,32 @@ INT wifi_getRadioCountryCode(INT radioIndex, CHAR *output_string)
+ INT wifi_setRadioCountryCode(INT radioIndex, CHAR *CountryCode)
+ {
+     //Set wifi config. Wait for wifi reset to apply
++    char str[MAX_BUF_SIZE]={'\0'};
++    char cmd[MAX_CMD_SIZE]={'\0'};
++    struct params params;
++    char config_file[MAX_BUF_SIZE] = {0};
++
++    WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
++    if(NULL == CountryCode || strlen(CountryCode) >= 32 )
++        return RETURN_ERR;
++
++    params.name = "country_code";
++    params.value = CountryCode;
++    sprintf(config_file,"%s%d.conf",CONFIG_PREFIX, radioIndex);
++    int ret = wifi_hostapdWrite(config_file, &params, 1);
++    if (ret) {
++        WIFI_ENTRY_EXIT_DEBUG("Inside %s: wifi_hostapdWrite() return %d\n"
++                ,__func__, ret);
++    }
++
++    ret = wifi_hostapdProcessUpdate(radioIndex, &params, 1);
++    if (ret) {
++        WIFI_ENTRY_EXIT_DEBUG("Inside %s: wifi_hostapdProcessUpdate() return %d\n"
++                ,__func__, ret);
++    }
++    wifi_reloadAp(radioIndex);
++    WIFI_ENTRY_EXIT_DEBUG("Exiting %s:%d\n",__func__, __LINE__);
++
+     return RETURN_OK;
+ }
+ 
+-- 
+2.18.0
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0002-patch-HAL-refactor-wifi_getRadioChannel.patch b/recipes-ccsp/hal/hal-wifi-patches/0002-patch-HAL-refactor-wifi_getRadioChannel.patch
new file mode 100644
index 0000000..89e9eef
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0002-patch-HAL-refactor-wifi_getRadioChannel.patch
@@ -0,0 +1,47 @@
+From 22612dd89f434aac2383f0601e3a5d921896eb11 Mon Sep 17 00:00:00 2001
+From: "howard.hsu" <howard-yh.hsu@mediatek.com>
+Date: Wed, 23 Feb 2022 11:40:41 +0800
+Subject: [PATCH 02/18] [patch] HAL: refactor wifi_getRadioChannel()
+
+Change-Id: Idf011ea57255837f1cdd1ee62ef3dc9d391090d0
+---
+ source/wifi/wifi_hal.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index 14452dd4..19f7508c 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -29,7 +29,7 @@ Copyright (c) 2007        Mike Kershaw
+ Copyright (c) 2008-2009        Luis R. Rodriguez
+ Licensed under the ISC license
+ */
+-
++#define MTK_IMPL
+ #define HAL_NETLINK_IMPL
+ 
+ #include <stdio.h>
+@@ -1593,6 +1593,12 @@ INT wifi_getRadioChannelsInUse(INT radioIndex, CHAR *output_string)	//RDKB
+ //Get the running channel number 
+ INT wifi_getRadioChannel(INT radioIndex,ULONG *output_ulong)	//RDKB
+ {
++#ifdef MTK_IMPL
++    if(!wifi_getApChannel(radioIndex, output_ulong))
++        return RETURN_OK;
++    else
++        return RETURN_ERR;
++#else
+     char cmd[1024] = {0}, buf[5] = {0};
+     char interface_name[50] = {0};
+ 
+@@ -1613,6 +1619,7 @@ INT wifi_getRadioChannel(INT radioIndex,ULONG *output_ulong)	//RDKB
+ 
+     WIFI_ENTRY_EXIT_DEBUG("Exiting %s:%d\n",__func__, __LINE__);
+     return RETURN_OK;
++#endif
+ }
+ 
+ 
+-- 
+2.29.2
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0003-patch-HAL-implement-wifi_reset.patch b/recipes-ccsp/hal/hal-wifi-patches/0003-patch-HAL-implement-wifi_reset.patch
new file mode 100644
index 0000000..01512c6
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0003-patch-HAL-implement-wifi_reset.patch
@@ -0,0 +1,28 @@
+From 0d63e3eeb35f082a51f03517ad2dcff2609c5a4f Mon Sep 17 00:00:00 2001
+From: "howard.hsu" <howard-yh.hsu@mediatek.com>
+Date: Wed, 23 Feb 2022 14:33:12 +0800
+Subject: [PATCH 03/18] [patch] HAL: implement wifi_reset()
+
+Change-Id: I8e969e2f167c96852c02374b463bf9567de40365
+---
+ source/wifi/wifi_hal.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index 19f7508c..be9d4f67 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -848,6 +848,10 @@ INT wifi_init()                            //RDKB
+ INT wifi_reset()
+ {
+     //TODO: resets the wifi subsystem, deletes all APs
++    system("systemctl stop hostapd.service");
++    sleep(2);
++    system("systemctl start hostapd.service");
++    sleep(5);
+     return RETURN_OK;
+ }
+ 
+-- 
+2.29.2
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0005-patch-HAL-implement-wifi_down.patch b/recipes-ccsp/hal/hal-wifi-patches/0005-patch-HAL-implement-wifi_down.patch
new file mode 100644
index 0000000..bbab9ce
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0005-patch-HAL-implement-wifi_down.patch
@@ -0,0 +1,26 @@
+From c838f621e562f77ef9e659c317951540410a0741 Mon Sep 17 00:00:00 2001
+From: "howard.hsu" <howard-yh.hsu@mediatek.com>
+Date: Wed, 2 Mar 2022 15:43:20 +0800
+Subject: [PATCH 05/18] [patch] HAL: implement wifi_down()
+
+Change-Id: I578a2afd5aa6c9b7fe2ad3c114d62bbfe800ac1c
+---
+ source/wifi/wifi_hal.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index ed26dbff..187de56c 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -877,6 +877,8 @@ INT wifi_reset()
+ INT wifi_down()
+ {
+     //TODO: turns off transmit power for the entire Wifi subsystem, for all radios
++    system("systemctl stop hostapd.service");
++    sleep(2);
+     return RETURN_OK;
+ }
+ 
+-- 
+2.29.2
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0006-patch-HAL-implement-wifi_getApSecurityMFPConfig.patch b/recipes-ccsp/hal/hal-wifi-patches/0006-patch-HAL-implement-wifi_getApSecurityMFPConfig.patch
new file mode 100644
index 0000000..1a8a51e
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0006-patch-HAL-implement-wifi_getApSecurityMFPConfig.patch
@@ -0,0 +1,47 @@
+From de6ce6e2bffdd24772903f13161f1784fd739f09 Mon Sep 17 00:00:00 2001
+From: "howard.hsu" <howard-yh.hsu@mediatek.com>
+Date: Fri, 4 Mar 2022 18:02:33 +0800
+Subject: [PATCH 06/18] [patch] HAL: implement wifi_getApSecurityMFPConfig()
+
+Change-Id: I778dfabf00408f75109e122742894acf82fff799
+---
+ source/wifi/wifi_hal.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index 187de56c..090db60f 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -6187,6 +6187,29 @@ INT wifi_getApSecurityWpaRekeyInterval(INT apIndex, INT *output_int)
+ //To-do
+ INT wifi_getApSecurityMFPConfig(INT apIndex, CHAR *output_string)
+ {
++    char output[16]={'\0'};
++    char config_file[MAX_BUF_SIZE] = {0};
++
++    if (!output_string)
++        return RETURN_ERR;
++
++    sprintf(config_file, "%s%d.conf", CONFIG_PREFIX, apIndex);
++    wifi_hostapdRead(config_file, "ieee80211w", output, sizeof(output));
++
++    if (strlen(output) == 0)
++        snprintf(output_string, 64, "Disabled");
++    else if (strncmp(output, "0", 1) == 0)
++        snprintf(output_string, 64, "Disabled");
++    else if (strncmp(output, "1", 1) == 0)
++        snprintf(output_string, 64, "Optional");
++    else if (strncmp(output, "2", 1) == 0)
++        snprintf(output_string, 64, "Required");
++    else {
++        wifi_dbg_printf("\n[%s]: Unexpected ieee80211w=%s", __func__, output);
++        return RETURN_ERR;
++    }
++
++    wifi_dbg_printf("\n[%s]: ieee80211w is : %s", __func__, output);
+     return RETURN_OK;
+ }
+ INT wifi_setApSecurityMFPConfig(INT apIndex, CHAR *MfpConfig)
+-- 
+2.29.2
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0007-patch-HAL-implement-wifi_setApSecurityMFPConfig.patch b/recipes-ccsp/hal/hal-wifi-patches/0007-patch-HAL-implement-wifi_setApSecurityMFPConfig.patch
new file mode 100644
index 0000000..17dad1f
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0007-patch-HAL-implement-wifi_setApSecurityMFPConfig.patch
@@ -0,0 +1,47 @@
+From a99b5bf7bcae0aa2d2f161cd28ef0f34c52b31ad Mon Sep 17 00:00:00 2001
+From: "howard.hsu" <howard-yh.hsu@mediatek.com>
+Date: Mon, 7 Mar 2022 10:50:32 +0800
+Subject: [PATCH 07/18] [patch] HAL: implement wifi_setApSecurityMFPConfig()
+
+Change-Id: If05c3550c2f9a152cfea2b8323c6c23973a881ca
+---
+ source/wifi/wifi_hal.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index 090db60f..4f54626b 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -6214,6 +6214,29 @@ INT wifi_getApSecurityMFPConfig(INT apIndex, CHAR *output_string)
+ }
+ INT wifi_setApSecurityMFPConfig(INT apIndex, CHAR *MfpConfig)
+ {
++    char str[MAX_BUF_SIZE]={'\0'};
++    char cmd[MAX_CMD_SIZE]={'\0'};
++    struct params params;
++    char config_file[MAX_BUF_SIZE] = {0};
++
++    WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
++    if(NULL == MfpConfig || strlen(MfpConfig) >= 32 )
++        return RETURN_ERR;
++
++    params.name = "ieee80211w";
++    if (strncmp(MfpConfig, "Disabled", strlen("Disabled")) == 0)
++        params.value = "0";
++    else if (strncmp(MfpConfig, "Optional", strlen("Optional")) == 0)
++        params.value = "1";
++    else if (strncmp(MfpConfig, "Required", strlen("Required")) == 0)
++        params.value = "2";
++    else{
++        wifi_dbg_printf("%s: invalid MfpConfig. Input has to be Disabled, Optional or Required \n", __func__);
++        return RETURN_ERR;
++    }
++    sprintf(config_file, "%s%d.conf", CONFIG_PREFIX, apIndex);
++    wifi_hostapdWrite(config_file, &params, 1);
++    WIFI_ENTRY_EXIT_DEBUG("Exiting %s:%d\n", __func__, __LINE__);
+     return RETURN_OK;
+ }
+ INT wifi_getRadioAutoChannelEnable(INT radioIndex, BOOL *output_bool)
+-- 
+2.29.2
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0008-patch-HAL-implement-ApMaxAssociatedDevice-and-WaterM.patch b/recipes-ccsp/hal/hal-wifi-patches/0008-patch-HAL-implement-ApMaxAssociatedDevice-and-WaterM.patch
new file mode 100644
index 0000000..4891c35
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0008-patch-HAL-implement-ApMaxAssociatedDevice-and-WaterM.patch
@@ -0,0 +1,108 @@
+From 3a8aee661b87ff9bd9f4d8c38334d74b947e75bb Mon Sep 17 00:00:00 2001
+From: "howard.hsu" <howard-yh.hsu@mediatek.com>
+Date: Mon, 7 Mar 2022 17:48:02 +0800
+Subject: [PATCH 08/18] [patch] HAL: implement ApMaxAssociatedDevice() and
+ WaterMarkThreshold()
+
+Change-Id: Ieae8fb5003b01eb4a13471c7f2a2d788dcf981a8
+---
+ source/wifi/wifi_hal.c | 57 +++++++++++++++++++++++++++++++++++++++---
+ 1 file changed, 54 insertions(+), 3 deletions(-)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index 4f54626b..3ddbc802 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -93,6 +93,7 @@ Licensed under the ISC license
+ 
+ #define MAX_BUF_SIZE 128
+ #define MAX_CMD_SIZE 1024
++#define MAX_ASSOCIATED_STA_NUM 2007
+ 
+ //Uncomment to enable debug logs
+ //#define WIFI_DEBUG
+@@ -4536,14 +4537,60 @@ INT wifi_getApMaxAssociatedDevices(INT apIndex, UINT *output_uint)
+     //get the running status from driver
+     if(!output_uint)
+         return RETURN_ERR;
+-    *output_uint = 5;
++
++    char output[16]={'\0'};
++    char config_file[MAX_BUF_SIZE] = {0};
++
++    sprintf(config_file, "%s%d.conf", CONFIG_PREFIX, apIndex);
++    wifi_hostapdRead(config_file, "max_num_sta", output, sizeof(output));
++    if (strlen(output) == 0) *output_uint = MAX_ASSOCIATED_STA_NUM;
++    else {
++        int device_num = atoi(output);
++        if (device_num > MAX_ASSOCIATED_STA_NUM || device_num < 0) {
++            wifi_dbg_printf("\n[%s]: get max_num_sta error: %d", __func__, device_num);
++            return RETURN_ERR;
++        }
++        else {
++            *output_uint = device_num;
++        }
++    }
++
+     return RETURN_OK;
+ }
+ 
+ INT wifi_setApMaxAssociatedDevices(INT apIndex, UINT number)
+ {
+     //store to wifi config, apply instantly
+-    return RETURN_ERR;
++    char str[MAX_BUF_SIZE]={'\0'};
++    char cmd[MAX_CMD_SIZE]={'\0'};
++    struct params params;
++    char config_file[MAX_BUF_SIZE] = {0};
++
++    WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
++    if (number > MAX_ASSOCIATED_STA_NUM || number < 0) {
++        WIFI_ENTRY_EXIT_DEBUG("%s: Invalid input\n",__func__);
++        return RETURN_ERR;
++    }
++    sprintf(str, "%d", number);
++    params.name = "max_num_sta";
++    params.value = str;
++
++    sprintf(config_file,"%s%d.conf",CONFIG_PREFIX, apIndex);
++    int ret = wifi_hostapdWrite(config_file, &params, 1);
++    if (ret) {
++        WIFI_ENTRY_EXIT_DEBUG("Inside %s: wifi_hostapdWrite() return %d\n"
++                ,__func__, ret);
++    }
++
++    ret = wifi_hostapdProcessUpdate(apIndex, &params, 1);
++    if (ret) {
++        WIFI_ENTRY_EXIT_DEBUG("Inside %s: wifi_hostapdProcessUpdate() return %d\n"
++                ,__func__, ret);
++    }
++    wifi_reloadAp(apIndex);
++    WIFI_ENTRY_EXIT_DEBUG("Exiting %s:%d\n",__func__, __LINE__);
++
++    return RETURN_OK;
+ }
+ 
+ //The HighWatermarkThreshold value that is lesser than or equal to MaxAssociatedDevices. Setting this parameter does not actually limit the number of clients that can associate with this access point as that is controlled by MaxAssociatedDevices.	MaxAssociatedDevices or 50. The default value of this parameter should be equal to MaxAssociatedDevices. In case MaxAssociatedDevices is 0 (zero), the default value of this parameter should be 50. A value of 0 means that there is no specific limit and Watermark calculation algorithm should be turned off.
+@@ -4552,13 +4599,17 @@ INT wifi_getApAssociatedDevicesHighWatermarkThreshold(INT apIndex, UINT *output_
+     //get the current threshold
+     if(!output_uint)
+         return RETURN_ERR;
+-    *output_uint = 50;
++    wifi_getApMaxAssociatedDevices(apIndex, output_uint);
++    if (*output_uint == 0)
++        *output_uint = 50;
+     return RETURN_OK;
+ }
+ 
+ INT wifi_setApAssociatedDevicesHighWatermarkThreshold(INT apIndex, UINT Threshold)
+ {
+     //store the config, reset threshold, reset AssociatedDevicesHighWatermarkThresholdReached, reset AssociatedDevicesHighWatermarkDate to current time
++    if (!wifi_setApMaxAssociatedDevices(apIndex, Threshold))
++        return RETURN_OK;
+     return RETURN_ERR;
+ }
+ 
+-- 
+2.29.2
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0009-patch-HAL-implement-wifi_getApWmmUapsdEnable.patch b/recipes-ccsp/hal/hal-wifi-patches/0009-patch-HAL-implement-wifi_getApWmmUapsdEnable.patch
new file mode 100644
index 0000000..2319aeb
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0009-patch-HAL-implement-wifi_getApWmmUapsdEnable.patch
@@ -0,0 +1,36 @@
+From 5e446b7ed3ee1040ccacc90747f69879fec5f4d6 Mon Sep 17 00:00:00 2001
+From: "howard.hsu" <howard-yh.hsu@mediatek.com>
+Date: Mon, 7 Mar 2022 19:11:24 +0800
+Subject: [PATCH 09/18] [patch] HAL: implement wifi_getApWmmUapsdEnable()
+
+Change-Id: I4127956b14d984dc8470d66423f4b7560e48708f
+---
+ source/wifi/wifi_hal.c | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index 3ddbc802..680b4283 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -4513,7 +4513,17 @@ INT wifi_getApWmmUapsdEnable(INT apIndex, BOOL *output)
+     //get the running status from driver
+     if(!output)
+         return RETURN_ERR;
+-    *output=TRUE;
++
++    char config_file[MAX_BUF_SIZE] = {0};
++    char buf[16] = {0};
++
++    sprintf(config_file,"%s%d.conf",CONFIG_PREFIX,apIndex);
++    wifi_hostapdRead(config_file, "uapsd_advertisement_enabled", buf, sizeof(buf));
++    if (strncmp("1",buf,1) == 0)
++        *output = TRUE;
++    else
++        *output = FALSE;
++
+     return RETURN_OK;
+ }
+ 
+-- 
+2.29.2
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0010-patch-HAL-implement-wifi_getApWmmEnable.patch b/recipes-ccsp/hal/hal-wifi-patches/0010-patch-HAL-implement-wifi_getApWmmEnable.patch
new file mode 100644
index 0000000..a901c8f
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0010-patch-HAL-implement-wifi_getApWmmEnable.patch
@@ -0,0 +1,36 @@
+From 22017539d25420018d654e8f92ae517eacb08335 Mon Sep 17 00:00:00 2001
+From: "howard.hsu" <howard-yh.hsu@mediatek.com>
+Date: Mon, 7 Mar 2022 19:12:13 +0800
+Subject: [PATCH 10/18] [patch] HAL: implement wifi_getApWmmEnable()
+
+Change-Id: I5baf1c0402fac4795ff52e58bce8be92b9fbf13d
+---
+ source/wifi/wifi_hal.c | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index 680b4283..4e220ed6 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -4496,7 +4496,17 @@ INT wifi_getApWmmEnable(INT apIndex, BOOL *output)
+     //get the running status from driver
+     if(!output)
+         return RETURN_ERR;
+-    *output=TRUE;
++
++    char config_file[MAX_BUF_SIZE] = {0};
++    char buf[16] = {0};
++
++    sprintf(config_file,"%s%d.conf",CONFIG_PREFIX,apIndex);
++    wifi_hostapdRead(config_file, "wmm_enabled", buf, sizeof(buf));
++    if (strncmp("1",buf,1) == 0)
++        *output = TRUE;
++    else
++        *output = FALSE;
++
+     return RETURN_OK;
+ }
+ 
+-- 
+2.29.2
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0011-patch-HAL-implement-wifi_setApWmmEnable.patch b/recipes-ccsp/hal/hal-wifi-patches/0011-patch-HAL-implement-wifi_setApWmmEnable.patch
new file mode 100644
index 0000000..7e6d7c8
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0011-patch-HAL-implement-wifi_setApWmmEnable.patch
@@ -0,0 +1,39 @@
+From bd22b8ef61e88e1e379925aecb6224bc3cd43963 Mon Sep 17 00:00:00 2001
+From: "howard.hsu" <howard-yh.hsu@mediatek.com>
+Date: Mon, 7 Mar 2022 19:17:56 +0800
+Subject: [PATCH 11/18] [patch] HAL: implement wifi_setApWmmEnable()
+
+Change-Id: Ifee29de1c42ef26528d26996937db7c959d8fd06
+---
+ source/wifi/wifi_hal.c | 15 ++++++++++++++-
+ 1 file changed, 14 insertions(+), 1 deletion(-)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index 4e220ed6..62350c1b 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -4514,7 +4514,20 @@ INT wifi_getApWmmEnable(INT apIndex, BOOL *output)
+ INT wifi_setApWmmEnable(INT apIndex, BOOL enable)
+ {
+     //Save config and apply instantly.
+-    return RETURN_ERR;
++    char config_file[MAX_BUF_SIZE] = {0};
++    struct params list;
++
++    WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
++    list.name = "wmm_enabled";
++    list.value = enable?"1":"0";
++
++    sprintf(config_file,"%s%d.conf",CONFIG_PREFIX,apIndex);
++    wifi_hostapdWrite(config_file, &list, 1);
++    wifi_hostapdProcessUpdate(apIndex, &list, 1);
++    wifi_reloadAp(apIndex);
++    WIFI_ENTRY_EXIT_DEBUG("Exiting %s:%d\n",__func__, __LINE__);
++
++    return RETURN_OK;
+ }
+ 
+ //Whether U-APSD support is currently enabled. When enabled, this is indicated in beacon frames. Note: U-APSD can only be enabled if WMM is also enabled.
+-- 
+2.29.2
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0012-patch-HAL-implement-wifi_setApWmmUapsdEnable.patch b/recipes-ccsp/hal/hal-wifi-patches/0012-patch-HAL-implement-wifi_setApWmmUapsdEnable.patch
new file mode 100644
index 0000000..bdb7ac5
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0012-patch-HAL-implement-wifi_setApWmmUapsdEnable.patch
@@ -0,0 +1,39 @@
+From 10e72bb7444664bfcd111713bfbfe2701772c8d5 Mon Sep 17 00:00:00 2001
+From: "howard.hsu" <howard-yh.hsu@mediatek.com>
+Date: Mon, 7 Mar 2022 19:18:56 +0800
+Subject: [PATCH 12/18] [patch] HAL: implement wifi_setApWmmUapsdEnable()
+
+Change-Id: I9d3d86f06d9b276ca3624e3679356aa6da3ea591
+---
+ source/wifi/wifi_hal.c | 15 ++++++++++++++-
+ 1 file changed, 14 insertions(+), 1 deletion(-)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index 62350c1b..cb5c6109 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -4554,7 +4554,20 @@ INT wifi_getApWmmUapsdEnable(INT apIndex, BOOL *output)
+ INT wifi_setApWmmUapsdEnable(INT apIndex, BOOL enable)
+ {
+     //save config and apply instantly.
+-    return RETURN_ERR;
++    char config_file[MAX_BUF_SIZE] = {0};
++    struct params list;
++
++    WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
++    list.name = "uapsd_advertisement_enabled";
++    list.value = enable?"1":"0";
++
++    sprintf(config_file,"%s%d.conf",CONFIG_PREFIX,apIndex);
++    wifi_hostapdWrite(config_file, &list, 1);
++    wifi_hostapdProcessUpdate(apIndex, &list, 1);
++    wifi_reloadAp(apIndex);
++    WIFI_ENTRY_EXIT_DEBUG("Exiting %s:%d\n",__func__, __LINE__);
++
++    return RETURN_OK;
+ }
+ 
+ // Sets the WMM ACK polity on the hardware. AckPolicy false means do not acknowledge, true means acknowledge
+-- 
+2.29.2
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0013-patch-HAL-implement-wifi_getProxyArp.patch b/recipes-ccsp/hal/hal-wifi-patches/0013-patch-HAL-implement-wifi_getProxyArp.patch
new file mode 100644
index 0000000..f687b02
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0013-patch-HAL-implement-wifi_getProxyArp.patch
@@ -0,0 +1,43 @@
+From 3d2602233dc6190f9627fe48beb6ed05b5546783 Mon Sep 17 00:00:00 2001
+From: "howard.hsu" <howard-yh.hsu@mediatek.com>
+Date: Tue, 8 Mar 2022 16:33:44 +0800
+Subject: [PATCH 13/18] [patch] HAL: implement wifi_getProxyArp()
+
+Change-Id: I9e1d04eac09fe7ae1d43600a6c8549feb0ea7858
+---
+ source/wifi/wifi_hal.c | 22 ++++++++++++++++++++++
+ 1 file changed, 22 insertions(+)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index cb5c6109..f10e16ab 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -8957,3 +8957,25 @@ INT wifi_getApAssociatedDevice(INT ap_index, CHAR *output_buf, INT output_buf_si
+      return RETURN_OK;
+ }
+ #endif
++
++INT wifi_getProxyArp(INT apIndex, BOOL *enable)
++{
++    char output[16]={'\0'};
++    char config_file[MAX_BUF_SIZE] = {0};
++
++    if (!enable)
++        return RETURN_ERR;
++
++    sprintf(config_file, "%s%d.conf", CONFIG_PREFIX, apIndex);
++    wifi_hostapdRead(config_file, "proxy_arp", output, sizeof(output));
++
++    if (strlen(output) == 0)
++        *enable = FALSE;
++    else if (strncmp(output, "1", 1) == 0)
++        *enable = TRUE;
++    else
++        *enable = FALSE;
++
++    wifi_dbg_printf("\n[%s]: proxy_arp is : %s", __func__, output);
++    return RETURN_OK;
++}
+-- 
+2.29.2
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0014-PATCH-HAL-Specify-MTK-driver.patch b/recipes-ccsp/hal/hal-wifi-patches/0014-PATCH-HAL-Specify-MTK-driver.patch
new file mode 100644
index 0000000..bf00326
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0014-PATCH-HAL-Specify-MTK-driver.patch
@@ -0,0 +1,31 @@
+From cc12618b6c8ba2fb49209f87feadf33f45d766c7 Mon Sep 17 00:00:00 2001
+From: "howard.hsu" <howard-yh.hsu@mediatek.com>
+Date: Wed, 16 Mar 2022 15:31:36 +0800
+Subject: [PATCH 14/18] [PATCH] HAL: Specify MTK driver
+
+Change-Id: Icdafb2cca3bbf5cbe5378f656590fc4261aebec0
+---
+ source/wifi/wifi_hal.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index f10e16ab..533226b5 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -65,8 +65,13 @@ Licensed under the ISC license
+ //#define ACL_PREFIX "/tmp/wifi_acl_list" //RDKB convention
+ #define SOCK_PREFIX "/var/run/hostapd/wifi"
+ #define VAP_STATUS_FILE "/tmp/vap-status"
++#ifdef MTK_IMPL
++#define DRIVER_2GHZ "mt7915e"
++#define DRIVER_5GHZ "mt7915e"
++#else
+ #define DRIVER_2GHZ "ath9k"
+ #define DRIVER_5GHZ "ath10k_pci"
++#endif
+ 
+ /*
+    MAX_APS - Number of all AP available in system
+-- 
+2.29.2
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0015-patch-HAL-refactor-wifi_getApMacAddressControlMode.patch b/recipes-ccsp/hal/hal-wifi-patches/0015-patch-HAL-refactor-wifi_getApMacAddressControlMode.patch
new file mode 100644
index 0000000..31fa49c
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0015-patch-HAL-refactor-wifi_getApMacAddressControlMode.patch
@@ -0,0 +1,43 @@
+From 522c439c6253be13a508464bb9e9676a057c09f1 Mon Sep 17 00:00:00 2001
+From: "howard.hsu" <howard-yh.hsu@mediatek.com>
+Date: Mon, 14 Mar 2022 19:06:29 +0800
+Subject: [PATCH 15/18] [patch] HAL: refactor wifi_getApMacAddressControlMode()
+
+Change-Id: I612e055e60ef9a48f2f7d719cb9baf486644b5be
+---
+ source/wifi/wifi_hal.c | 19 ++++++++++++++++++-
+ 1 file changed, 18 insertions(+), 1 deletion(-)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index 533226b5..05413f5e 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -6736,7 +6736,24 @@ INT wifi_getApMacAddressControlMode(INT apIndex, INT *output_filterMode)
+     //_syscmd(cmd, buf, sizeof(buf));
+     sprintf(config_file, "%s%d.conf", CONFIG_PREFIX, apIndex);
+     wifi_hostapdRead(config_file, "macaddr_acl", buf, sizeof(buf));
+-    *output_filterMode = atoi(buf);
++    if(strlen(buf) == 0) {
++        *output_filterMode = 0;
++    }
++    else {
++        int macaddr_acl_mode = atoi(buf);
++        if (macaddr_acl_mode == 1) {
++            *output_filterMode = 1;
++        } else if (macaddr_acl_mode == 0) {
++            wifi_hostapdRead(config_file, "deny_mac_file", buf, sizeof(buf));
++            if (strlen(buf) == 0) {
++                *output_filterMode = 0;
++            } else {
++                *output_filterMode = 2;
++            }
++        } else {
++            return RETURN_ERR;
++        }
++    }
+ 
+     return RETURN_OK;
+ }
+-- 
+2.29.2
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0016-PATCH-HAL-refactor-wifi_setApMacAddressControlMode.patch b/recipes-ccsp/hal/hal-wifi-patches/0016-PATCH-HAL-refactor-wifi_setApMacAddressControlMode.patch
new file mode 100644
index 0000000..98f23c9
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0016-PATCH-HAL-refactor-wifi_setApMacAddressControlMode.patch
@@ -0,0 +1,70 @@
+From 5175e19e0a628baff0aad73d2397e9a23bc3dc7d Mon Sep 17 00:00:00 2001
+From: "howard.hsu" <howard-yh.hsu@mediatek.com>
+Date: Mon, 14 Mar 2022 19:40:08 +0800
+Subject: [PATCH] HAL: refactor wifi_setApMacAddressControlMode()
+
+Change-Id: Ia9bdb3b6ac683a8634bd726b6d472eb133d258d0
+---
+ source/wifi/wifi_hal.c | 31 ++++++++++++++++++++++++++++---
+ 1 file changed, 28 insertions(+), 3 deletions(-)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index 5f5ac68..0ed1e85 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -68,6 +68,7 @@ Licensed under the ISC license
+ #define IF_NAME_SIZE 50
+ #define CONFIG_PREFIX "/nvram/hostapd"
+ #define ACL_PREFIX "/tmp/hostapd-acl"
++#define DENY_PREFIX "/tmp/hostapd-deny"
+ //#define ACL_PREFIX "/tmp/wifi_acl_list" //RDKB convention
+ #define SOCK_PREFIX "/var/run/hostapd/wifi"
+ #define VAP_STATUS_FILE "/tmp/vap-status"
+@@ -4308,17 +4309,41 @@ INT wifi_setApMacAddressControlMode(INT apIndex, INT filterMode)
+     struct params list[2];
+     char buf[MAX_BUF_SIZE] = {0};
+     char config_file[MAX_BUF_SIZE] = {0}, acl_file[MAX_BUF_SIZE] = {0};
++    char deny_file[MAX_BUF_SIZE] = {0};
+ 
+     list[0].name = "macaddr_acl";
+-    sprintf(buf, "%d", filterMode);
+-    list[0].value = buf ;
+ 
+-    if (filterMode == 1 || filterMode == 2) {//TODO: check for filterMode(2)
++    if (filterMode == 0) {
++        sprintf(buf, "%d", 0);
++        list[0].value = buf;
++
++        char cmd[128], rtn[128];
++        snprintf(cmd, sizeof(cmd), "hostapd_cli -i %s%d deny_acl CLEAR", AP_PREFIX, apIndex);
++        _syscmd(cmd, rtn, sizeof(rtn));
++        memset(cmd,0,sizeof(cmd));
++        // Delete deny_mac_file in hostapd configuration
++        snprintf(cmd, sizeof(cmd), "sed -i '/deny_mac_file=/d' %s%d.conf ", CONFIG_PREFIX, apIndex);
++        _syscmd(cmd, rtn, sizeof(rtn));
++    }
++    else if (filterMode == 1) {
++        sprintf(buf, "%d", filterMode);
++        list[0].value = buf;
+         sprintf(acl_file,"%s%d",ACL_PREFIX,apIndex);
+         list[1].name = "accept_mac_file";
+         list[1].value = acl_file;
+         items = 2;
++    } else if (filterMode == 2) {
++        //TODO: deny_mac_file
++        sprintf(buf, "%d", 0);
++        list[0].value = buf;
++        list[1].name = "deny_mac_file";
++        sprintf(deny_file,"%s%d", DENY_PREFIX,apIndex);
++        list[1].value = deny_file;
++        items = 2;
++    } else {
++        return RETURN_ERR;
+     }
++
+     sprintf(config_file,"%s%d.conf",CONFIG_PREFIX,apIndex);
+     wifi_hostapdWrite(config_file, list, items);
+ 
+-- 
+2.18.0
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0017-PATCH-HAL-refactor-wifi_setApSsidAdvertisementEnable.patch b/recipes-ccsp/hal/hal-wifi-patches/0017-PATCH-HAL-refactor-wifi_setApSsidAdvertisementEnable.patch
new file mode 100644
index 0000000..055943a
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0017-PATCH-HAL-refactor-wifi_setApSsidAdvertisementEnable.patch
@@ -0,0 +1,26 @@
+From df5ff0159878e1b71cb6c2e223226cf7b5644a3a Mon Sep 17 00:00:00 2001
+From: "howard.hsu" <howard-yh.hsu@mediatek.com>
+Date: Mon, 14 Mar 2022 20:43:14 +0800
+Subject: [PATCH 17/18] [PATCH] HAL: refactor
+ wifi_setApSsidAdvertisementEnable()
+
+Change-Id: I5d17d443e0763b6728561548117c8a5b047ed882
+---
+ source/wifi/wifi_hal.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index 6be09577..e44a9d02 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -4481,6 +4481,7 @@ INT wifi_setApSsidAdvertisementEnable(INT apIndex, BOOL enable)
+     wifi_hostapdWrite(config_file, &list, 1);
+     wifi_hostapdProcessUpdate(apIndex, &list, 1);
+     //TODO: call hostapd_cli for dynamic_config_control
++    wifi_reloadAp(apIndex);
+     WIFI_ENTRY_EXIT_DEBUG("Exiting %s:%d\n",__func__, __LINE__);
+ 
+     return RETURN_OK;
+-- 
+2.29.2
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0018-patch-HAL-enhance-wifi_getApWpsConfigurationState.patch b/recipes-ccsp/hal/hal-wifi-patches/0018-patch-HAL-enhance-wifi_getApWpsConfigurationState.patch
new file mode 100644
index 0000000..c50a2ac
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0018-patch-HAL-enhance-wifi_getApWpsConfigurationState.patch
@@ -0,0 +1,26 @@
+From 969e24609034a30bb45321e3098ac7ed49d9ca6c Mon Sep 17 00:00:00 2001
+From: "howard.hsu" <howard-yh.hsu@mediatek.com>
+Date: Wed, 23 Feb 2022 11:27:47 +0800
+Subject: [PATCH 18/18] [patch] HAL: enhance wifi_getApWpsConfigurationState()
+
+Change-Id: Ibecd442a3884d6b4f17b623ee5c696d04a7b9754
+---
+ source/wifi/wifi_hal.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index e44a9d02..13af7e36 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -5181,7 +5181,7 @@ INT wifi_getApWpsConfigurationState(INT apIndex, CHAR *output_string)
+     snprintf(cmd, sizeof(cmd), "hostapd_cli -i %s%d get_config | grep wps_state | cut -d'=' -f2", AP_PREFIX, apIndex);
+     _syscmd(cmd, buf, sizeof(buf));
+ 
+-    if(!strcmp(buf, "configured"))
++    if(!strncmp(buf, "configured", 10))
+         snprintf(output_string, 32, "Configured");
+     WIFI_ENTRY_EXIT_DEBUG("Exiting %s:%d\n",__func__, __LINE__);
+ 
+-- 
+2.29.2
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0019-patch-HAL-refactor-wifi_getRadioEnable.patch b/recipes-ccsp/hal/hal-wifi-patches/0019-patch-HAL-refactor-wifi_getRadioEnable.patch
new file mode 100644
index 0000000..e2a4720
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0019-patch-HAL-refactor-wifi_getRadioEnable.patch
@@ -0,0 +1,38 @@
+From 801018bbcf3427713997b1ead85fec6c9acaf2bb Mon Sep 17 00:00:00 2001
+From: "howard.hsu" <howard-yh.hsu@mediatek.com>
+Date: Wed, 6 Apr 2022 09:20:37 +0800
+Subject: [PATCH] HAL: refactor wifi_getRadioEnable()
+
+---
+ source/wifi/wifi_hal.c | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index 1d07d19..c753d99 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -1025,13 +1025,18 @@ INT wifi_getRadioEnable(INT radioIndex, BOOL *output_bool)      //RDKB
+ 
+     snprintf(interface_path, sizeof(interface_path), "/sys/class/net/%s%d/address", RADIO_PREFIX, radioIndex);
+     fp = fopen(interface_path, "r");
+-    if(fp)
++    if(!fp)
+     {
+-        *output_bool = TRUE;
+-        fclose(fp);
++		return RETURN_OK;
+     }
+     //TODO: check if hostapd with config is running
++	char buf[MAX_BUF_SIZE] = {0}, cmd[MAX_CMD_SIZE] = {0};
++	sprintf(cmd, "hostapd_cli -i %s%d status | grep state | cut -d '=' -f2", AP_PREFIX, radioIndex);
++	_syscmd(cmd, buf, sizeof(buf));
+ 
++	if(!strncmp(buf, "ENABLED", 7))
++		*output_bool = TRUE;
++	fclose(fp);
+     return RETURN_OK;
+ }
+ 
+-- 
+2.18.0
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0020-HAL-add-wifi_getApDenyAclDevics-and-refactor-wifi_ki.patch b/recipes-ccsp/hal/hal-wifi-patches/0020-HAL-add-wifi_getApDenyAclDevics-and-refactor-wifi_ki.patch
new file mode 100644
index 0000000..9990695
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0020-HAL-add-wifi_getApDenyAclDevics-and-refactor-wifi_ki.patch
@@ -0,0 +1,70 @@
+From b0ea47cacafdc1aa512afd04129a23267d7d3533 Mon Sep 17 00:00:00 2001
+From: "howard.hsu" <howard-yh.hsu@mediatek.com>
+Date: Wed, 6 Apr 2022 16:34:31 +0800
+Subject: [PATCH 1/2] HAL: add wifi_getApDenyAclDevics() and refactor
+ wifi_kickApAclAssociatedDevices()
+
+According to the description of wifi_kickApAclAssociatedDevice(), wifi_kickApAclAssociatedDevices()
+have to kicks the devices written in the deny mac lsit. But current Implementation
+kicks the devices in the accept list. This commit is created to refactor this API.
+---
+ source/wifi/wifi_hal.c | 26 +++++++++++++++++---------
+ 1 file changed, 17 insertions(+), 9 deletions(-)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index c753d99..6427a43 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -4068,6 +4068,20 @@ INT wifi_getApAclDevices(INT apIndex, CHAR *macArray, UINT buf_size)
+     return RETURN_OK;
+ }
+ 
++INT wifi_getApDenyAclDevices(INT apIndex, CHAR *macArray, UINT buf_size)
++{
++    char cmd[MAX_CMD_SIZE]={'\0'};
++    int ret = 0;
++
++    sprintf(cmd, "hostapd_cli -i %s%d deny_acl SHOW | awk '{print $1}'", AP_PREFIX,apIndex);
++    ret = _syscmd(cmd,macArray,buf_size);
++    if (ret != 0)
++        return RETURN_ERR;
++
++    return RETURN_OK;
++}
++
++
+ // Get the list of stations associated per AP
+ INT wifi_getApDevicesAssociated(INT apIndex, CHAR *macArray, UINT buf_size)
+ {
+@@ -4159,7 +4173,7 @@ INT wifi_kickApAclAssociatedDevices(INT apIndex, BOOL enable)
+     char aclArray[512] = {0}, *acl = NULL;
+     char assocArray[512] = {0}, *asso = NULL;
+ 
+-    wifi_getApAclDevices(apIndex, aclArray, sizeof(aclArray));
++    wifi_getApDenyAclDevices(apIndex, aclArray, sizeof(aclArray));
+     wifi_getApDevicesAssociated(apIndex, assocArray, sizeof(assocArray));
+ 
+     // if there are no devices connected there is nothing to do
+@@ -4176,17 +4190,11 @@ INT wifi_kickApAclAssociatedDevices(INT apIndex, BOOL enable)
+ 
+             acl = strtok(NULL, "\r\n");
+         }
++		wifi_setApMacAddressControlMode(apIndex, 2);
+     }
+     else
+     {
+-        //kick off the MAC which is not in ACL array (allow list)
+-        asso = strtok(assocArray, "\r\n");
+-        while (asso != NULL) {
+-            if (strlen(asso) >= 17 && !strcasestr(aclArray, asso))
+-                wifi_kickApAssociatedDevice(apIndex, asso);
+-
+-            asso = strtok(NULL, "\r\n");
+-        }
++		wifi_setApMacAddressControlMode(apIndex, 0);
+     }
+ 
+ #if 0
+-- 
+2.18.0
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0021-HAL-add-wifi_getRadioStatsEnable.patch b/recipes-ccsp/hal/hal-wifi-patches/0021-HAL-add-wifi_getRadioStatsEnable.patch
new file mode 100644
index 0000000..4f70998
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0021-HAL-add-wifi_getRadioStatsEnable.patch
@@ -0,0 +1,28 @@
+From d8375d65c9a32bef94c44f8ec4fc689aaebc70d5 Mon Sep 17 00:00:00 2001
+From: "howard.hsu" <howard-yh.hsu@mediatek.com>
+Date: Fri, 8 Apr 2022 14:37:43 +0800
+Subject: [PATCH] HAL: add wifi_getRadioStatsEnable()
+
+---
+ source/wifi/wifi_hal.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index 2e60367..a70ff15 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -9652,3 +9652,11 @@ INT wifi_getProxyArp(INT apIndex, BOOL *enable)
+     wifi_dbg_printf("\n[%s]: proxy_arp is : %s", __func__, output);
+     return RETURN_OK;
+ }
++
++INT wifi_getRadioStatsEnable(INT radioIndex, BOOL *output_enable)
++{
++    if (NULL == output_enable || !(radioIndex==0 || radioIndex==1))
++        return RETURN_ERR;
++    *output_enable=TRUE;
++    return RETURN_OK;
++}
+-- 
+2.18.0
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0023-HAL-refactor-wifi_setRadioGuardInterval-and-wifi_get.patch b/recipes-ccsp/hal/hal-wifi-patches/0023-HAL-refactor-wifi_setRadioGuardInterval-and-wifi_get.patch
new file mode 100644
index 0000000..c772b95
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0023-HAL-refactor-wifi_setRadioGuardInterval-and-wifi_get.patch
@@ -0,0 +1,35 @@
+From f0445f4769576791d5085f3db54411afacd5f755 Mon Sep 17 00:00:00 2001
+From: "howard.hsu" <howard-yh.hsu@mediatek.com>
+Date: Wed, 13 Apr 2022 19:43:53 +0800
+Subject: [PATCH] HAL: refactor wifi_setRadioGuardInterval() and
+ wifi_getRadioGuardInterval()
+
+---
+ source/wifi/wifi_hal.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index f4ee248..e5b551f 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -2169,7 +2169,7 @@ INT wifi_getRadioGuardInterval(INT radioIndex, CHAR *output_string)	//Tr181
+     //save config and apply instantly
+     if (NULL == output_string)
+         return RETURN_ERR;
+-    snprintf(output_string, 64, (radioIndex == 0) ? "400nsec" : "400nsec");
++    snprintf(output_string, 64, "Auto");
+ 
+     return RETURN_OK;
+ }
+@@ -2178,7 +2178,7 @@ INT wifi_getRadioGuardInterval(INT radioIndex, CHAR *output_string)	//Tr181
+ INT wifi_setRadioGuardInterval(INT radioIndex, CHAR *string)	//Tr181
+ {
+     //Apply setting instantly
+-    return RETURN_ERR;
++    return RETURN_OK;
+ }
+ 
+ //Get the Modulation Coding Scheme index, eg: "-1", "1", "15"
+-- 
+2.18.0
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0024-HAL-refactor-wifi_factoryResetRadio.patch b/recipes-ccsp/hal/hal-wifi-patches/0024-HAL-refactor-wifi_factoryResetRadio.patch
new file mode 100644
index 0000000..953123b
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0024-HAL-refactor-wifi_factoryResetRadio.patch
@@ -0,0 +1,37 @@
+From fe9452e2d7c27c7ae680b32a4db9f92f90d4ca4b Mon Sep 17 00:00:00 2001
+From: Allen Ye <allen.ye@mediatek.com>
+Date: Thu, 14 Apr 2022 19:10:15 +0800
+Subject: [PATCH] HAL: refactor wifi_factoryResetRadio()
+
+---
+ source/wifi/wifi_hal.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index bfa7b01..8b302d5 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -726,15 +726,17 @@ INT wifi_factoryResetRadios()
+ */
+ INT wifi_factoryResetRadio(int radioIndex) 	//RDKB
+ {
++    system("systemctl stop hostapd.service");
++
+     WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
+     if(radioIndex == 0)
+-        system("cp /etc/hostapd-2G.conf /nvram/hostapd0.conf");
++        system("rm /nvram/hostapd0.conf");
+     else if(radioIndex == 1)
+-        system("cp /etc/hostapd-5G.conf /nvram/hostapd1.conf");
++        system("rm /nvram/hostapd1.conf");
+     else
+          return RETURN_ERR;
+ 
+-    system("systemctl restart hostapd.service");
++    system("systemctl start hostapd.service");
+     WIFI_ENTRY_EXIT_DEBUG("Exiting %s:%d\n",__func__, __LINE__);
+     return RETURN_OK;
+ }
+-- 
+2.18.0
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0026-HAL-refactor-RadioIEEE80211hEnabled-function.patch b/recipes-ccsp/hal/hal-wifi-patches/0026-HAL-refactor-RadioIEEE80211hEnabled-function.patch
new file mode 100644
index 0000000..3ab8442
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0026-HAL-refactor-RadioIEEE80211hEnabled-function.patch
@@ -0,0 +1,66 @@
+From 3efd6b24e39dd13b0fbbbd97d7be129df438d0de Mon Sep 17 00:00:00 2001
+From: "Allen.Ye" <allen.ye@mediatek.com>
+Date: Mon, 23 May 2022 15:15:31 +0800
+Subject: [PATCH] HAL: refactor RadioIEEE80211hEnabled function
+
+---
+ source/wifi/wifi_hal.c | 35 ++++++++++++++++++++++++++++++++---
+ 1 file changed, 32 insertions(+), 3 deletions(-)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index ea400bf..af7cb10 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -2260,17 +2260,46 @@ INT wifi_getRadioIEEE80211hSupported(INT radioIndex, BOOL *Supported)  //Tr181
+ //Get 80211h feature enable
+ INT wifi_getRadioIEEE80211hEnabled(INT radioIndex, BOOL *enable) //Tr181
+ {
+-    if (NULL == enable)
++    char cmd[MAX_BUF_SIZE]={'\0'};
++    char buf[MAX_CMD_SIZE]={'\0'};
++
++    WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
++    if(enable == NULL)
+         return RETURN_ERR;
+-    *enable = FALSE;
+ 
++    snprintf(cmd, sizeof(cmd),  "hostapd_cli -i %s%d status | grep ieee80211h | cut -d '=' -f2", AP_PREFIX, radioIndex);
++    _syscmd(cmd, buf, sizeof(buf));
++
++    if (strncmp(buf, "1", 1) == 0)
++        *enable = true;
++    else
++        *enable = false;
++
++    WIFI_ENTRY_EXIT_DEBUG("Exiting %s:%d\n",__func__, __LINE__);
+     return RETURN_OK;
+ }
+ 
+ //Set 80211h feature enable
+ INT wifi_setRadioIEEE80211hEnabled(INT radioIndex, BOOL enable)  //Tr181
+ {
+-    return RETURN_ERR;
++    WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
++    struct params params={'\0'};
++    char config_file[MAX_BUF_SIZE] = {0};
++
++    params.name = "ieee80211h";
++
++    if (enable) {
++        params.value = "1";
++    } else {
++        params.value = "0";
++    }
++
++    sprintf(config_file,"%s%d.conf",CONFIG_PREFIX,radioIndex);
++    wifi_hostapdWrite(config_file, &params, 1);
++    
++    wifi_hostapdProcessUpdate(radioIndex, &params, 1);
++    WIFI_ENTRY_EXIT_DEBUG("Exiting %s:%d\n",__func__, __LINE__);
++    return RETURN_OK;
+ }
+ 
+ //Indicates the Carrier Sense ranges supported by the radio. It is measured in dBm. Refer section A.2.3.2 of CableLabs Wi-Fi MGMT Specification.
+-- 
+2.18.0
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0027-HAL-refactor-wifi_getRadioPossibleChannels.patch b/recipes-ccsp/hal/hal-wifi-patches/0027-HAL-refactor-wifi_getRadioPossibleChannels.patch
new file mode 100644
index 0000000..cdd9880
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0027-HAL-refactor-wifi_getRadioPossibleChannels.patch
@@ -0,0 +1,39 @@
+From 312aae9b294a5cb7448887db34654383839a32da Mon Sep 17 00:00:00 2001
+From: "Allen.Ye" <allen.ye@mediatek.com>
+Date: Tue, 24 May 2022 13:53:35 +0800
+Subject: [PATCH] HAL: refactor wifi_getRadioPossibleChannels
+
+---
+ source/wifi/wifi_hal.c | 14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index f15d2c9..a451b30 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -1571,10 +1571,20 @@ INT wifi_setRadioChannelMode(INT radioIndex, CHAR *channelMode, BOOL gOnlyFlag,
+ //The output_string is a max length 64 octet string that is allocated by the RDKB code.  Implementations must ensure that strings are not longer than this.
+ INT wifi_getRadioPossibleChannels(INT radioIndex, CHAR *output_string)	//RDKB
+ {
++    WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
+     if (NULL == output_string) 
+         return RETURN_ERR;
+-    //TODO:read this from iw phy phyX info |grep MHz
+-    snprintf(output_string, 64, (radioIndex == 0)?"1,2,3,4,5,6,7,8,9,10,11":"36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140");
++
++    char cmd[MAX_CMD_SIZE] = {0};
++    char buf[MAX_BUF_SIZE] = {0};
++
++    // Parse possible channel number and separate them with commas.
++    snprintf(cmd, sizeof(cmd), "iwlist %s%d channel | grep GHz | tr -s ' ' | cut -d ' ' -f3 | tr '\n' ',' | sed 's/.$//'", AP_PREFIX, radioIndex);
++    _syscmd(cmd,buf,sizeof(buf));
++    snprintf(output_string, 128, "%s", buf);
++
++    WIFI_ENTRY_EXIT_DEBUG("Exiting %s:%d\n",__func__, __LINE__);
++    return RETURN_OK;
+ #if 0
+     char IFName[50] ={0};
+     char buf[MAX_BUF_SIZE] = {0};
+-- 
+2.18.0
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0028-HAL-refactor-wifi_acl-function.patch b/recipes-ccsp/hal/hal-wifi-patches/0028-HAL-refactor-wifi_acl-function.patch
new file mode 100644
index 0000000..2b1474a
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0028-HAL-refactor-wifi_acl-function.patch
@@ -0,0 +1,63 @@
+From 4523c7caabe32b1d99ade410f7353371caeb471a Mon Sep 17 00:00:00 2001
+From: "Allen.Ye" <allen.ye@mediatek.com>
+Date: Thu, 16 Jun 2022 17:29:02 +0800
+Subject: [PATCH] HAL: refactor wifi_acl function
+
+---
+ source/wifi/wifi_hal.c | 31 ++++++++++++++++++++-----------
+ 1 file changed, 20 insertions(+), 11 deletions(-)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index 98e5681..5cad1e7 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -4181,10 +4181,20 @@ INT wifi_delApAclDevice(INT apIndex, CHAR *DeviceMacAddress)
+ // outputs the number of devices in the filter list
+ INT wifi_getApAclDeviceNum(INT apIndex, UINT *output_uint)
+ {
+-    if (NULL == output_uint)
++    char cmd[MAX_BUF_SIZE]={0};
++    char buf[MAX_CMD_SIZE]={0};
++
++    WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
++    if(output_uint == NULL)
+         return RETURN_ERR;
+-    *output_uint = 0;
+-    return RETURN_ERR;
++
++    snprintf(cmd, sizeof(cmd), "cat %s%d | wc -l | tr -d '\\n'", ACL_PREFIX, apIndex);
++    _syscmd(cmd, buf, sizeof(buf));
++
++    *output_uint = atoi(buf);
++
++    WIFI_ENTRY_EXIT_DEBUG("Exiting %s:%d\n",__func__, __LINE__);
++    return RETURN_OK;
+ }
+ 
+ INT apply_rules(INT apIndex, CHAR *client_mac,CHAR *action,CHAR *interface)
+@@ -7722,15 +7732,14 @@ INT wifi_delApAclDevices(INT apIndex)
+     if(_syscmd(cmd,buf,sizeof(buf)))
+         return RETURN_ERR;
+ #endif
+-    char fname[100];
+-    FILE *fp;
++    char cmd[MAX_CMD_SIZE]={0};
++    char buf[MAX_BUF_SIZE]={0};
+ 
+-    snprintf(fname, sizeof(fname), "%s%d", ACL_PREFIX, apIndex);
+-    fp = fopen(fname, "w");
+-    if (!fp) {
+-            return RETURN_ERR;
+-    }
+-    fclose(fp);
++    WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
++    sprintf(cmd, "rm %s%d 2>&1 && touch %s%d", ACL_PREFIX, apIndex, ACL_PREFIX, apIndex);
++    if(_syscmd(cmd, buf, sizeof(buf)))
++        return RETURN_ERR;
++    WIFI_ENTRY_EXIT_DEBUG("Exiting %s:%d\n",__func__, __LINE__);
+ 
+     return RETURN_OK;
+ }
+-- 
+2.18.0
+
diff --git a/recipes-ccsp/hal/hal-wifi-patches/0029-HAL-refactor-beacon-period-interval-function.patch b/recipes-ccsp/hal/hal-wifi-patches/0029-HAL-refactor-beacon-period-interval-function.patch
new file mode 100644
index 0000000..0a743d9
--- /dev/null
+++ b/recipes-ccsp/hal/hal-wifi-patches/0029-HAL-refactor-beacon-period-interval-function.patch
@@ -0,0 +1,82 @@
+From 9018c4fda0ef0dd03d20983311186a1a6788f899 Mon Sep 17 00:00:00 2001
+From: "Allen.Ye" <allen.ye@mediatek.com>
+Date: Fri, 17 Jun 2022 09:51:36 +0800
+Subject: [PATCH] HAL: refactor beacon period/interval function
+
+---
+ source/wifi/wifi_hal.c | 45 +++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 40 insertions(+), 5 deletions(-)
+
+diff --git a/source/wifi/wifi_hal.c b/source/wifi/wifi_hal.c
+index 5cad1e7..5c12139 100644
+--- a/source/wifi/wifi_hal.c
++++ b/source/wifi/wifi_hal.c
+@@ -2344,16 +2344,38 @@ INT wifi_setRadioCarrierSenseThresholdInUse(INT radioIndex, INT threshold)	//P3
+ //Time interval between transmitting beacons (expressed in milliseconds). This parameter is based ondot11BeaconPeriod from [802.11-2012].
+ INT wifi_getRadioBeaconPeriod(INT radioIndex, UINT *output)
+ {
+-    if (NULL == output)
++    char cmd[MAX_BUF_SIZE]={'\0'};
++    char buf[MAX_CMD_SIZE]={'\0'};
++
++    WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
++    if(output == NULL)
+         return RETURN_ERR;
+-    *output = 100;
+ 
++    snprintf(cmd, sizeof(cmd),  "hostapd_cli -i %s%d status | grep beacon_int | cut -d '=' -f2 | tr -d '\n'", AP_PREFIX, radioIndex);
++    _syscmd(cmd, buf, sizeof(buf));
++    *output = atoi(buf);
++
++    WIFI_ENTRY_EXIT_DEBUG("Exiting %s:%d\n",__func__, __LINE__);
+     return RETURN_OK;
+ }
+  
+ INT wifi_setRadioBeaconPeriod(INT radioIndex, UINT BeaconPeriod)
+ {
+-    return RETURN_ERR;
++    WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
++    struct params params={'\0'};
++    char buf[MAX_BUF_SIZE] = {'\0'};
++    char config_file[MAX_BUF_SIZE] = {'\0'};
++
++    params.name = "beacon_int";
++    snprintf(buf, sizeof(buf), "%u", BeaconPeriod);
++    params.value = buf;
++
++    sprintf(config_file, "%s%d.conf", CONFIG_PREFIX, radioIndex);
++    wifi_hostapdWrite(config_file, &params, 1);
++    
++    wifi_hostapdProcessUpdate(radioIndex, &params, 1);
++    WIFI_ENTRY_EXIT_DEBUG("Exiting %s:%d\n",__func__, __LINE__);
++    return RETURN_OK;
+ }
+ 
+ //Comma-separated list of strings. The set of data rates, in Mbps, that have to be supported by all stations that desire to join this BSS. The stations have to be able to receive and transmit at each of the data rates listed inBasicDataTransmitRates. For example, a value of "1,2", indicates that stations support 1 Mbps and 2 Mbps. Most control packets use a data rate in BasicDataTransmitRates.
+@@ -3825,8 +3847,21 @@ INT wifi_setApBeaconType(INT apIndex, CHAR *beaconTypeString)
+ // sets the beacon interval on the hardware for this AP
+ INT wifi_setApBeaconInterval(INT apIndex, INT beaconInterval)
+ {
+-    //save config and apply instantly
+-    return RETURN_ERR;
++    WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
++    struct params params={'\0'};
++    char buf[MAX_BUF_SIZE] = {'\0'};
++    char config_file[MAX_BUF_SIZE] = {'\0'};
++
++    params.name = "beacon_int";
++    snprintf(buf, sizeof(buf), "%u", beaconInterval);
++    params.value = buf;
++
++    sprintf(config_file, "%s%d.conf", CONFIG_PREFIX, apIndex);
++    wifi_hostapdWrite(config_file, &params, 1);
++    
++    wifi_hostapdProcessUpdate(apIndex, &params, 1);
++    WIFI_ENTRY_EXIT_DEBUG("Exiting %s:%d\n",__func__, __LINE__);
++    return RETURN_OK;
+ }
+ 
+ INT wifi_setDTIMInterval(INT apIndex, INT dtimInterval)
+-- 
+2.18.0
+
