Revert "Merge from Quantenna SDK v37.4.15.62."

This reverts commit ea0ece8e0fec89cd0c162d6962ed11b5f1115d70, reversing
changes made to 4c68df5b16068fa4b8e16922e09d1b07b413bec8.

Change-Id: I83ba1e38c2913ff091d9c64f8a0d5d4eade1abfe
diff --git a/arch/arc/boot/Makefile b/arch/arc/boot/Makefile
index 502336f..655d0cb 100755
--- a/arch/arc/boot/Makefile
+++ b/arch/arc/boot/Makefile
@@ -14,7 +14,7 @@
 
 LZMA := $(shell which lzma)
 MKIMAGE := $(srctree)/scripts/mkuboot.sh
-MKIMAGEFLAGS := -A arc -O linux -C lzma -T kernel -a 0x8493A000 -e 0x8493A000 -n "ARC700 Linux kernel" -Q 0x1 -d
+MKIMAGEFLAGS := -A arc -O linux -C lzma -T kernel -a 0x84938000 -e 0x84938000 -n "ARC700 Linux kernel" -Q 0x1 -d
 OBJCOPYFLAGS := -O binary -R .note -R .note.gnu.build-id -R .comment -S
 
 # From Beta's doc:
diff --git a/arch/arc/configs/topaz_dbdc_config b/arch/arc/configs/topaz_dbdc_config
index 0e586c2..c70bcb7 100644
--- a/arch/arc/configs/topaz_dbdc_config
+++ b/arch/arc/configs/topaz_dbdc_config
@@ -80,7 +80,6 @@
 CONFIG_DEFERRED_PRINTK=y
 CONFIG_BUG=y
 CONFIG_ELF_CORE=y
-# CONFIG_ARC_ELF_CORE_FIX is not set
 # CONFIG_BASE_FULL is not set
 # CONFIG_FUTEX is not set
 # CONFIG_EPOLL is not set
diff --git a/arch/arc/configs/topaz_fpga_config b/arch/arc/configs/topaz_fpga_config
index 744eb1f..1b65a29 100644
--- a/arch/arc/configs/topaz_fpga_config
+++ b/arch/arc/configs/topaz_fpga_config
@@ -80,7 +80,6 @@
 CONFIG_DEFERRED_PRINTK=y
 CONFIG_BUG=y
 CONFIG_ELF_CORE=y
-# CONFIG_ARC_ELF_CORE_FIX is not set
 # CONFIG_BASE_FULL is not set
 # CONFIG_FUTEX is not set
 # CONFIG_EPOLL is not set
diff --git a/arch/arc/configs/topaz_host_config b/arch/arc/configs/topaz_host_config
index 555fa6d..2984cf7 100644
--- a/arch/arc/configs/topaz_host_config
+++ b/arch/arc/configs/topaz_host_config
@@ -82,7 +82,6 @@
 CONFIG_DEFERRED_PRINTK=y
 CONFIG_BUG=y
 CONFIG_ELF_CORE=y
-# CONFIG_ARC_ELF_CORE_FIX is not set
 # CONFIG_BASE_FULL is not set
 # CONFIG_FUTEX is not set
 # CONFIG_EPOLL is not set
diff --git a/arch/arc/configs/topaz_msft_config b/arch/arc/configs/topaz_msft_config
index 1dfe540..4924fd6 100755
--- a/arch/arc/configs/topaz_msft_config
+++ b/arch/arc/configs/topaz_msft_config
@@ -80,7 +80,6 @@
 CONFIG_DEFERRED_PRINTK=y
 CONFIG_BUG=y
 CONFIG_ELF_CORE=y
-# CONFIG_ARC_ELF_CORE_FIX is not set
 # CONFIG_BASE_FULL is not set
 # CONFIG_FUTEX is not set
 # CONFIG_EPOLL is not set
diff --git a/arch/arc/configs/topaz_msmr_config b/arch/arc/configs/topaz_msmr_config
index 1dfe540..4924fd6 100755
--- a/arch/arc/configs/topaz_msmr_config
+++ b/arch/arc/configs/topaz_msmr_config
@@ -80,7 +80,6 @@
 CONFIG_DEFERRED_PRINTK=y
 CONFIG_BUG=y
 CONFIG_ELF_CORE=y
-# CONFIG_ARC_ELF_CORE_FIX is not set
 # CONFIG_BASE_FULL is not set
 # CONFIG_FUTEX is not set
 # CONFIG_EPOLL is not set
diff --git a/arch/arc/configs/topaz_pcie_config b/arch/arc/configs/topaz_pcie_config
index 7df77c7..ee42e2e 100644
--- a/arch/arc/configs/topaz_pcie_config
+++ b/arch/arc/configs/topaz_pcie_config
@@ -81,7 +81,6 @@
 CONFIG_DEFERRED_PRINTK=y
 CONFIG_BUG=y
 CONFIG_ELF_CORE=y
-# CONFIG_ARC_ELF_CORE_FIX is not set
 # CONFIG_BASE_FULL is not set
 # CONFIG_FUTEX is not set
 # CONFIG_EPOLL is not set
diff --git a/arch/arc/configs/topaz_rfic6_config b/arch/arc/configs/topaz_rfic6_config
index 11525a6..66e9102 100644
--- a/arch/arc/configs/topaz_rfic6_config
+++ b/arch/arc/configs/topaz_rfic6_config
@@ -80,7 +80,6 @@
 CONFIG_DEFERRED_PRINTK=n
 CONFIG_BUG=y
 CONFIG_ELF_CORE=y
-# CONFIG_ARC_ELF_CORE_FIX is not set
 # CONFIG_BASE_FULL is not set
 # CONFIG_FUTEX is not set
 # CONFIG_EPOLL is not set
diff --git a/arch/arc/configs/topaz_vb_config b/arch/arc/configs/topaz_vb_config
index e5fa6d3..4924fd6 100644
--- a/arch/arc/configs/topaz_vb_config
+++ b/arch/arc/configs/topaz_vb_config
@@ -80,7 +80,6 @@
 CONFIG_DEFERRED_PRINTK=y
 CONFIG_BUG=y
 CONFIG_ELF_CORE=y
-CONFIG_ARC_ELF_CORE_FIX=y
 # CONFIG_BASE_FULL is not set
 # CONFIG_FUTEX is not set
 # CONFIG_EPOLL is not set
@@ -450,8 +449,7 @@
 # CONFIG_FIRMWARE_IN_KERNEL is not set
 CONFIG_EXTRA_FIRMWARE=""
 # CONFIG_SYS_HYPERVISOR is not set
-CONFIG_CONNECTOR=y
-CONFIG_PROC_EVENTS=y
+# CONFIG_CONNECTOR is not set
 CONFIG_MTD=y
 # CONFIG_MTD_DEBUG is not set
 # CONFIG_MTD_TESTS is not set
@@ -530,7 +528,6 @@
 # CONFIG_BLK_DEV_COW_COMMON is not set
 CONFIG_BLK_DEV_LOOP=y
 # CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_DRBD is not set
 
 #
 # DRBD disabled because PROC_FS, INET or CONNECTOR not selected
diff --git a/arch/arc/include/asm/elf.h b/arch/arc/include/asm/elf.h
index f5c487a..60178b1 100755
--- a/arch/arc/include/asm/elf.h
+++ b/arch/arc/include/asm/elf.h
@@ -25,13 +25,8 @@
 
 #define EM_ARCTANGENT	0x5D
 
-#ifdef CONFIG_ARC_ELF_CORE_FIX
-/* Backported from 3.14.24 kernel to fix core dump format */
-#define ELF_NGREG	(sizeof(struct user_regs_struct) / sizeof(elf_greg_t))
-#else
 /* core dump regs is in the order pt_regs, callee_regs, stop_pc (for gdb's sake) */
 #define ELF_NGREG ((sizeof (struct pt_regs)+ sizeof (struct callee_regs) + sizeof(unsigned long))/ sizeof(elf_greg_t))
-#endif
 
 typedef elf_greg_t elf_gregset_t[ELF_NGREG];
 
diff --git a/arch/arc/kernel/troubleshoot.c b/arch/arc/kernel/troubleshoot.c
index 6df40c9..d981025 100644
--- a/arch/arc/kernel/troubleshoot.c
+++ b/arch/arc/kernel/troubleshoot.c
@@ -24,6 +24,7 @@
 #include <asm/board/kdump.h>
 #include <asm/board/troubleshoot.h>
 #include <asm/cacheflush.h>
+#include <linux/vmalloc.h>
 #include <linux/zlib.h>
 
 /* 3.4 times seems safe for LHost crash - found by trial and error */
@@ -423,7 +424,7 @@
 	workspace_size = zlib_deflate_workspacesize();
 	printk(KERN_DEBUG "%s: workspace_size = %d\n", __func__, workspace_size);
 
-	stream.workspace = kmalloc(workspace_size, GFP_ATOMIC);
+	stream.workspace = vmalloc(workspace_size);
         if (!stream.workspace) {
 		printk(KERN_ERR "%s: Failed to allocate %d bytes for deflate workspace\n", __func__,
 			zlib_deflate_workspacesize());
@@ -434,7 +435,7 @@
 	zlib_retval = zlib_deflateInit(&stream, Z_DEFAULT_COMPRESSION);
 	if (zlib_retval != Z_OK) {
                 printk(KERN_ERR "%s: zlib_deflateInit failed, zlib_retval = %d\n", __func__, zlib_retval);
-		kfree(stream.workspace);
+		vfree(stream.workspace);
 		return retval;
 	}
 
@@ -533,7 +534,7 @@
 		printk(KERN_WARNING "%s: zlib_deflateEnd failed, zlib_retval = %d\n", __func__, zlib_retval);
 	}
 
-	kfree(stream.workspace);
+	vfree(stream.workspace);
 
 	return retval;
 }
diff --git a/arch/arc/proc/arc700/traps.c b/arch/arc/proc/arc700/traps.c
index c47fc28..4deb21e 100755
--- a/arch/arc/proc/arc700/traps.c
+++ b/arch/arc/proc/arc700/traps.c
@@ -35,15 +35,14 @@
 volatile int running_on_hw = 1;
 
 void die(const char *str, struct pt_regs *regs, unsigned long address,
-	unsigned long cause_reg)
+         unsigned long cause_reg)
 {
-	if (running_on_hw) {
-		oops_in_progress = 1;
-		show_kernel_fault_diag(str, regs, address, cause_reg);
-	}
+    if (running_on_hw) {
+        show_kernel_fault_diag(str, regs, address, cause_reg);
+    }
 
-	// DEAD END
-	__asm__("flag 1");
+    // DEAD END
+    __asm__("flag 1");
 }
 
 static int noinline do_fatal_exception(unsigned long cause, char *str,
diff --git a/drivers/topaz/Makefile b/drivers/topaz/Makefile
index 79c0aa1..5c3f9d2 100644
--- a/drivers/topaz/Makefile
+++ b/drivers/topaz/Makefile
@@ -1,22 +1,10 @@
 EXTRA_CFLAGS +=	-Wall -Werror -Wno-unknown-pragmas
 
 ifeq ($(board_config),topaz_config)
-	EXTRA_CFLAGS += -DTOPAZ_VB_CONFIG -DTOPAZ_CONGE_CONFIG -DTOPAZ_SRAM_CONFIG
-else ifeq ($(board_config),topaz_vb_config)
-	EXTRA_CFLAGS += -DTOPAZ_VB_CONFIG -DTOPAZ_CONGE_CONFIG -DTOPAZ_SRAM_CONFIG
-else ifeq ($(board_config),topaz_rfic6_config)
-	EXTRA_CFLAGS += -DTOPAZ_VB_CONFIG -DTOPAZ_CONGE_CONFIG -DTOPAZ_SRAM_CONFIG
-else ifeq ($(board_config),topaz_rgmii_config)
-	EXTRA_CFLAGS += -DTOPAZ_CONGE_CONFIG -DTOPAZ_RGMII_CONFIG -DTOPAZ_SRAM_CONFIG
-else ifeq ($(board_config),topaz_vzn_config)
-	EXTRA_CFLAGS += -DTOPAZ_CONGE_CONFIG -DTOPAZ_VZN_CONFIG -DTOPAZ_SRAM_CONFIG
-endif
-
-ifeq ($(board_config),topaz_msft_config)
-	EXTRA_CFLAGS += -DERICSSON_CONFIG
+	EXTRA_CFLAGS += -DTOPAZ_VB_CONFIG
 else
-	ifeq ($(board_config),topaz_msmr_config)
-		EXTRA_CFLAGS += -DERICSSON_CONFIG
+	ifeq ($(board_config),topaz_vb_config)
+		EXTRA_CFLAGS += -DTOPAZ_VB_CONFIG
 	endif
 endif
 
diff --git a/drivers/topaz/fwt_if.c b/drivers/topaz/fwt_if.c
index e9ef948..661496c 100755
--- a/drivers/topaz/fwt_if.c
+++ b/drivers/topaz/fwt_if.c
@@ -234,7 +234,7 @@
 	case FWT_IF_ENABLE:
 		sscanf(str, "%u", &param);
 		if ( (param == 0) || (param == 1)) {
-			*((uint32_t*)var) = param;
+			*((uint8_t*)var) = param;
 		} else {
 			return -EINVAL;
 		}
diff --git a/drivers/topaz/switch_emac.c b/drivers/topaz/switch_emac.c
index 7169949..a805902 100644
--- a/drivers/topaz/switch_emac.c
+++ b/drivers/topaz/switch_emac.c
@@ -53,7 +53,7 @@
 
 #include <compat.h>
 
-#if defined (TOPAZ_SRAM_CONFIG)
+#if defined (TOPAZ_VB_CONFIG)
 #define EMAC_DESC_USE_SRAM 0
 #else
 #define EMAC_DESC_USE_SRAM 1
@@ -78,12 +78,7 @@
 #define EMAC_WBSP_CTRL_DISABLED	0
 #define EMAC_WBSP_CTRL_ENABLED	1
 #define EMAC_WBSP_CTRL_SWAPPED	2
-#if defined (ERICSSON_CONFIG)
-static int emac_wbsp_ctrl = EMAC_WBSP_CTRL_ENABLED;
-#else
 static int emac_wbsp_ctrl = EMAC_WBSP_CTRL_DISABLED;
-#endif
-
 
 static const struct emac_port_info iflist[] = {
 	{
@@ -327,7 +322,6 @@
 	int8_t pool = TOPAZ_HBM_EMAC_TX_DONE_POOL;
 	int interface;
 	struct sk_buff *skb2;
-	struct qtn_vlan_dev *vdev = vport_tbl_lhost[priv->tqe_port];
 
 	for (interface = 0; interface < EMAC_MAX_INTERFACE; interface++){
 		/* In order to drop a packet, the following conditions has to be met:
@@ -346,11 +340,18 @@
 	/*
 	 * restore VLAN tag to packet if needed
 	 */
-	skb2 = switch_vlan_from_proto_stack(skb, vdev, 0, 1);
-	if (!skb2)
+	skb2 = switch_vlan_restore_tag(skb, 1);
+	if (!skb2) {
+		printk(KERN_WARNING "failed to add VLAN tag back to header\n");
 		return NETDEV_TX_OK;
+	}
 
-	if (vlan_enabled && !qtn_vlan_egress(vdev, 0, skb2->data)) {
+	/*
+	 * VLAN egress check, for EMAC ports
+	 */
+	if (vlan_enabled
+			&& !switch_vlan_is_local(skb2->data)
+			&& !qtn_vlan_egress(vport_tbl_lhost[priv->tqe_port], 0, skb2->data)) {
 		dev_kfree_skb(skb2);
 		return NETDEV_TX_OK;
 	}
@@ -695,9 +696,8 @@
 		}
 	}
 
-	skb = switch_vlan_to_proto_stack(skb, 0);
-	if (skb)
-		netif_receive_skb(skb);
+	switch_vlan_strip_tag(skb, 0);
+	netif_receive_skb(skb);
 }
 
 #ifdef TOPAZ_EMAC_NULL_BUF_WR
@@ -919,53 +919,35 @@
 	topaz_dpi_filter_add(port_num, &req);
 }
 
-static void __init topaz_dpi_filter_dscp_vi(int port_num)
-{
-        struct topaz_dpi_filter_request req;
-        struct topaz_dpi_field_def field;
-
-        /* DSCP VI */
-        memset(&req, 0, sizeof(req));
-        memset(&field, 0, sizeof(field));
-
-        req.fields = &field;
-        req.field_count = 1;
-        req.out_port = TOPAZ_TQE_LHOST_PORT;
-        req.out_node = 0;
-        req.tid = 0;
-
-        field.ctrl.data.enable = TOPAZ_DPI_ENABLE;
-        field.ctrl.data.anchor = TOPAZ_DPI_ANCHOR_IPV4;
-        field.ctrl.data.cmp_op = TOPAZ_DPI_CMPOP_EQ;
-        field.ctrl.data.offset = 0;
-	field.val =  0x00b80000;
-	field.mask = 0x00fc0000;
-
-        topaz_dpi_filter_add(port_num, &req);
-}
-
 static void __init topaz_dpi_filter_dhcp(int port_num)
 {
 	struct topaz_dpi_filter_request req;
-	struct topaz_dpi_field_def field;
+	struct topaz_dpi_field_def field[2];
 
-	/* UDP && srcport == 67 && dstport == 68 */
+	/* IPv4 && UDP && srcport == 67 && dstport == 68 */
 
 	memset(&req, 0, sizeof(req));
-	memset(&field, 0, sizeof(field));
+	memset(field, 0, sizeof(field));
 
-	req.fields = &field;
-	req.field_count = 1;
+	req.fields = field;
+	req.field_count = 2;
 	req.out_port = TOPAZ_TQE_LHOST_PORT;
 	req.out_node = 0;
 	req.tid = 0;
 
-	field.ctrl.data.enable = TOPAZ_DPI_ENABLE;
-	field.ctrl.data.anchor = TOPAZ_DPI_ANCHOR_UDP;
-	field.ctrl.data.cmp_op = TOPAZ_DPI_CMPOP_EQ;
-	field.ctrl.data.offset = 0;	/* src_port/dst_port */
-	field.val = (DHCPSERVER_PORT << 16) | DHCPCLIENT_PORT;
-	field.mask = 0xffffffff;
+	field[0].ctrl.data.enable = TOPAZ_DPI_ENABLE;
+	field[0].ctrl.data.anchor = TOPAZ_DPI_ANCHOR_IPV4;
+	field[0].ctrl.data.cmp_op = TOPAZ_DPI_CMPOP_EQ;
+	field[0].ctrl.data.offset = 0;
+	field[0].val = IPUTIL_HDR_VER_4 << 28;
+	field[0].mask = 0xf0000000;
+
+	field[1].ctrl.data.enable = TOPAZ_DPI_ENABLE;
+	field[1].ctrl.data.anchor = TOPAZ_DPI_ANCHOR_UDP;
+	field[1].ctrl.data.cmp_op = TOPAZ_DPI_CMPOP_EQ;
+	field[1].ctrl.data.offset = 0;	/* src_port/dst_port */
+	field[1].val = (DHCPSERVER_PORT << 16) | DHCPCLIENT_PORT;
+	field[1].mask = 0xffffffff;
 
 	topaz_dpi_filter_add(port_num, &req);
 }
@@ -1117,13 +1099,12 @@
 
 	topaz_ipprt_clear_all_entries(port_num);
 	topaz_ipprt_set(port_num, IPPROTO_IGMP, TOPAZ_TQE_LHOST_PORT, 0);
-#if defined(TOPAZ_CONGE_CONFIG)
+#if defined (TOPAZ_VB_CONFIG)
 	topaz_ipprt_set(port_num, IPPROTO_ICMP, TOPAZ_TQE_LHOST_PORT, 0);
 	topaz_ipprt_set(port_num, IPPROTO_TCP, TOPAZ_TQE_LHOST_PORT, 0);
 #endif
 	topaz_dpi_init(port_num);
 	topaz_dpi_filter_arp(port_num);
-	topaz_dpi_filter_dscp_vi(port_num);
 	topaz_dpi_filter_dhcp(port_num);
 #ifdef CONFIG_IPV6
 	topaz_dpi_filter_dhcpv6(port_num);
@@ -1286,8 +1267,6 @@
 	int emac_cfg_p0, emac_cfg_p1;
 	int emac_phy;
 
-	printk("emac wbsp: %d\n", emac_wbsp_ctrl);
-
 	if (!TOPAZ_HBM_SKB_ALLOCATOR_DEFAULT) {
 		printk(KERN_ERR "%s: switch_emac should be used with topaz hbm skb allocator only\n", __FUNCTION__);
 	}
diff --git a/drivers/topaz/switch_tqe.c b/drivers/topaz/switch_tqe.c
index 3329820..96a9275 100644
--- a/drivers/topaz/switch_tqe.c
+++ b/drivers/topaz/switch_tqe.c
@@ -46,7 +46,6 @@
 #include <qtn/iputil.h>
 #include <qtn/mproc_sync.h>
 #include <qtn/qtn_vlan.h>
-#include "linux/net/bridge/br_public.h"
 
 int g_dscp_flag = 0;
 int g_dscp_value[2];
@@ -82,8 +81,6 @@
 static tqe_fwt_get_ucast_hook g_tqe_fwt_get_ucast_hook = NULL;
 static tqe_fwt_false_miss_hook g_tqe_fwt_false_miss_hook = NULL;
 static tqe_fwt_get_from_mac_hook g_tqe_fwt_get_from_mac_hook = NULL;
-static tqe_fwt_add_from_mac_hook g_tqe_fwt_add_from_mac_hook = NULL;
-static tqe_fwt_del_from_mac_hook g_tqe_fwt_del_from_mac_hook = NULL;
 
 static tqe_mac_reserved_hook g_tqe_mac_reserved_hook = NULL;
 static inline void __sram_text tqe_rx_pkt_drop(const union topaz_tqe_cpuif_descr *desc);
@@ -122,21 +119,24 @@
 static void tqe_port_set(const enum topaz_tqe_port port, const uint8_t enable)
 {
 	struct topaz_fwt_sw_mcast_entry *mcast_ent;
+	int i;
 
 	if (!g_tqe_fwt_get_mcast_ff_hook) {
 		return;
 	}
 
-	mcast_ent = g_tqe_fwt_get_mcast_ff_hook();
-	if (unlikely(!mcast_ent)) {
-		return;
+	for (i = 0; i < TOPAZ_FWT_MCAST_FF_ENTRIES; i++) {
+		mcast_ent = g_tqe_fwt_get_mcast_ff_hook(i);
+		if (!mcast_ent) {
+			return;
+		}
+		if (enable) {
+			topaz_fwt_sw_mcast_port_set(mcast_ent, port);
+		} else {
+			topaz_fwt_sw_mcast_port_clear(mcast_ent, port);
+		}
+		topaz_fwt_sw_mcast_flush(mcast_ent);
 	}
-	if (enable) {
-		topaz_fwt_sw_mcast_port_set(mcast_ent, port);
-	} else {
-		topaz_fwt_sw_mcast_port_clear(mcast_ent, port);
-	}
-	topaz_fwt_sw_mcast_flush(mcast_ent);
 }
 
 void tqe_port_set_group(const enum topaz_tqe_port port, int32_t group)
@@ -165,15 +165,6 @@
 }
 EXPORT_SYMBOL(tqe_port_unregister);
 
-static inline int tqe_port_same_group(enum topaz_tqe_port in_port, enum topaz_tqe_port out_port)
-{
-	if (tqe_port_handlers[in_port].group > 0 &&
-			tqe_port_handlers[in_port].group == tqe_port_handlers[out_port].group)
-		return 1;
-
-	return 0;
-}
-
 struct update_multicast_tx_stats {
 	void (*fn)(void *ctx, uint8_t node);
 	void *ctx;
@@ -246,7 +237,6 @@
 uint32_t
 switch_tqe_multi_proc_sem_down(char * funcname, int linenum)
 {
-#ifdef CONFIG_TOPAZ_PCIE_TARGET
 	uint32_t prtcnt;
 
 	if (tqe_sem_en == 0)
@@ -258,7 +248,6 @@
 			printk("%s line %d fail to get tqe semaphore\n", funcname, linenum);
 		prtcnt++;
 	}
-#endif
 	return 1;
 }
 
@@ -267,7 +256,6 @@
 uint32_t
 switch_tqe_multi_proc_sem_up(void)
 {
-#ifdef CONFIG_TOPAZ_PCIE_TARGET
 	if (tqe_sem_en == 0)
 		return 1;
 
@@ -277,9 +265,6 @@
 		WARN_ONCE(1, "%s failed to relese HW semaphore\n", __func__);
 		return 0;
 	}
-#else
-	return 1;
-#endif
 }
 
 EXPORT_SYMBOL(switch_tqe_multi_proc_sem_up);
@@ -409,32 +394,6 @@
 		update_multicast.fn(update_multicast.ctx, node);
 }
 
-static inline uint32_t tqe_mcast_enqueue_cnt(const struct topaz_fwt_sw_mcast_entry *const e,
-		uint8_t port_bitmap, const uint8_t in_port, const uint8_t in_node)
-{
-	uint32_t enqueues = 0;
-	uint8_t i;
-
-        /* Exclude input port. If WMAC, the port doesn't contribute, only nodes. */
-        port_bitmap &= ~((1 << in_port) | (1 << TOPAZ_TQE_WMAC_PORT));
-	for (i = 0; i < TOPAZ_TQE_NUM_PORTS; i++) {
-		if ((port_bitmap & BIT(i)) && !tqe_port_same_group(in_port, i))
-			enqueues++;
-	}
-
-        /* add wmac nodes */
-        for (i = 0; i < ARRAY_SIZE(e->node_bitmap) ; i++) {
-                enqueues += topaz_fwt_sw_count_bits(e->node_bitmap[i]);
-        }
-
-        /* must exclude the input node */
-        if (topaz_fwt_sw_mcast_node_is_set(e, in_port, in_node)) {
-                --enqueues;
-        }
-
-        return enqueues;
-}
-
 /*
  * returns the number of TQE pushes; 0 means buffer is not consumed here
  */
@@ -464,7 +423,7 @@
 	}
 
 	/* find the expected enqueue count and set the HBM buffer reference count */
-	push_count = tqe_mcast_enqueue_cnt(&mcast_ent, mcast_ent.port_bitmap,
+	push_count = topaz_fwt_sw_mcast_enqueues(&mcast_ent, mcast_ent.port_bitmap,
 						in_port, in_node);
 	if (unlikely(!push_count)) {
 		return 0;
@@ -481,7 +440,7 @@
 				pushes += topaz_fwt_sw_mcast_do_per_node(tqe_push_mcast,
 							&mcast_ent, desc, queue, in_node, port, tid);
 			} else {
-				if (port != in_port && !tqe_port_same_group(in_port, port))  {
+				if (port != in_port)  {
 					tqe_push_mcast(desc, NULL, port, 0, 0);
 					++pushes;
 				}
@@ -582,7 +541,7 @@
 	}
 
 	if (ipaddr) {
-		topaz_tqe_vlan_gettid(bus_to_virt((uintptr_t)(desc->data.pkt)), &tid, &vlan_index);
+		topaz_tqe_vlan_gettid(desc->data.pkt, &tid, &vlan_index);
 		fwt_lu = topaz_fwt_hw_lookup_wait_be(eh->ether_dhost, &timeout, &false_miss);
 		if (fwt_lu.data.valid && !timeout) {
 #ifndef TOPAZ_DISABLE_FWT_WAR
@@ -592,7 +551,7 @@
 
 			if (g_tqe_fwt_get_mcast_hook)
 				mcast_ent = g_tqe_fwt_get_mcast_hook(fwt_lu.data.entry_addr,
-						ipaddr, *ether_type);
+						ipaddr, *ether_type, vlan_index);
 
 			if (mcast_ent) {
 				if ((mcast_ent->flood_forward) && (in_port == TOPAZ_TQE_MUC_PORT)) {
@@ -637,12 +596,9 @@
 }
 EXPORT_SYMBOL(tqe_register_ucastfwt_cbk);
 
-void tqe_register_macfwt_cbk(tqe_fwt_get_from_mac_hook cbk_func,
-			tqe_fwt_add_from_mac_hook add_func, tqe_fwt_del_from_mac_hook del_func)
+void tqe_register_macfwt_cbk(tqe_fwt_get_from_mac_hook cbk_func)
 {
 	 g_tqe_fwt_get_from_mac_hook = cbk_func;
-	 g_tqe_fwt_add_from_mac_hook = add_func;
-	 g_tqe_fwt_del_from_mac_hook = del_func;
 }
 EXPORT_SYMBOL(tqe_register_macfwt_cbk);
 
@@ -679,10 +635,10 @@
 		if(g_dscp_flag){
 			tid = (g_dscp_value[desc->data.in_port] & 0xFF);
 		} else {
-			topaz_tqe_vlan_gettid(bus_to_virt((uintptr_t)(desc->data.pkt)), &tid, &vlan_index);
+			topaz_tqe_vlan_gettid(desc->data.pkt, &tid, &vlan_index);
 		}
 	} else {
-		topaz_tqe_vlan_gettid(bus_to_virt((uintptr_t)(desc->data.pkt)), &tid, &vlan_index);
+		topaz_tqe_vlan_gettid(desc->data.pkt, &tid, &vlan_index);
 	}
 
 	port = fwt_ent->out_port;
@@ -752,222 +708,6 @@
 }
 #endif
 
-struct tqe_unknown_dst_entry {
-	unsigned char dst_mac[ETH_ALEN];
-	unsigned long updated;
-	STAILQ_ENTRY(tqe_unknown_dst_entry) next;
-};
-
-typedef STAILQ_HEAD(, tqe_unknown_dst_entry) tqe_unknown_dst_entry_head;
-
-static int tqe_unknown_dst_entry_tot = 0;
-static int tqe_unknown_dst_entry_max = 32;
-module_param(tqe_unknown_dst_entry_max, int, S_IRWXU);
-static int tqe_unknown_dst_expiry = HZ;
-module_param(tqe_unknown_dst_expiry, int, S_IRWXU);
-
-static spinlock_t tqe_unknown_dst_lock;
-static tqe_unknown_dst_entry_head tqe_unknown_dst_entries;
-static struct timer_list tqe_unknown_dst_timer;
-
-static int tqe_unknown_dst_entry_add(const unsigned char *mac)
-{
-	struct tqe_unknown_dst_entry *entry;
-
-	if (tqe_unknown_dst_entry_tot >= tqe_unknown_dst_entry_max)
-		return -EBUSY;
-
-	STAILQ_FOREACH(entry, &tqe_unknown_dst_entries, next) {
-		if (memcmp(entry->dst_mac, mac, ETH_ALEN) == 0) {
-			entry->updated = jiffies;
-			return 0;
-		}
-	}
-
-	entry = kmalloc(sizeof(struct tqe_unknown_dst_entry), GFP_ATOMIC);
-	if (entry == NULL)
-		return -ENOMEM;
-
-	memcpy(entry->dst_mac, mac, ETH_ALEN);
-	entry->updated = jiffies;
-	STAILQ_INSERT_TAIL(&tqe_unknown_dst_entries, entry, next);
-
-	tqe_unknown_dst_entry_tot++;
-
-	if (tqe_unknown_dst_entry_tot == 1)
-		mod_timer(&tqe_unknown_dst_timer, jiffies + tqe_unknown_dst_expiry);
-
-	return 0;
-}
-
-static int tqe_unknown_dst_entry_del(struct tqe_unknown_dst_entry *entry)
-{
-	if (entry == NULL)
-		return -EINVAL;
-
-	KASSERT(tqe_unknown_dst_entry_tot > 0, ("should not be 0"));
-
-	STAILQ_REMOVE(&tqe_unknown_dst_entries, entry, tqe_unknown_dst_entry, next);
-	kfree(entry);
-
-	tqe_unknown_dst_entry_tot--;
-
-	return 0;
-}
-
-/* RCU lock must be held */
-static struct net_bridge *tqe_find_bridge(const struct net_device *ndev)
-{
-	struct net_bridge *br = NULL;
-
-	if ((ndev->flags & IFF_SLAVE) && ndev->master)
-		ndev = ndev->master;
-
-	if (rcu_dereference(ndev->br_port) != NULL)
-		br = ndev->br_port->br;
-
-	return br;
-}
-
-static int tqe_unknown_dst_local_find(const struct net_device *dev, unsigned char *mac)
-{
-	struct net_bridge_fdb_entry *fdb;
-	struct net_bridge *br;
-
-	int is_local = 0;
-
-	if ((br_fdb_get_hook == NULL) || (br_fdb_put_hook == NULL))
-		return 0;
-
-	if (dev == NULL)
-		return 0;
-
-	rcu_read_lock();
-
-	br = tqe_find_bridge(dev);
-	if (!br)
-		goto out;
-
-	fdb = br_fdb_get_hook(br, NULL, mac);
-	if (fdb == NULL)
-		goto out;
-
-	is_local = fdb->is_local;
-
-	br_fdb_put_hook(fdb);
-
-out:
-	rcu_read_unlock();
-
-	return is_local;
-}
-
-static void tqe_unknown_dst_timer_func(unsigned long data)
-{
-	struct tqe_unknown_dst_entry *cur_entry;
-	struct tqe_unknown_dst_entry *tmp_entry;
-
-	const struct fwt_db_entry *fwt_entry;
-
-	if ((g_tqe_fwt_get_from_mac_hook == NULL) || (g_tqe_fwt_del_from_mac_hook == NULL))
-		return;
-
-	spin_lock(&tqe_unknown_dst_lock);
-
-	STAILQ_FOREACH_SAFE(cur_entry, &tqe_unknown_dst_entries, next, tmp_entry) {
-		if (time_before(jiffies, cur_entry->updated + tqe_unknown_dst_expiry))
-			continue;
-
-		tqe_unknown_dst_entry_del(cur_entry);
-
-		fwt_entry = g_tqe_fwt_get_from_mac_hook(cur_entry->dst_mac);
-		/*
-		 * keep the "drop" FWT entry if it has been updated
-		 * with correct destination port
-		 */
-		if ((fwt_entry != NULL) && (fwt_entry->out_port == TOPAZ_TQE_DROP_PORT))
-			g_tqe_fwt_del_from_mac_hook(cur_entry->dst_mac);
-	}
-
-	if (tqe_unknown_dst_entry_tot > 0)
-		mod_timer(&tqe_unknown_dst_timer, jiffies + tqe_unknown_dst_expiry);
-
-	spin_unlock(&tqe_unknown_dst_lock);
-}
-
-static void tqe_unknown_dst_entry_init(void)
-{
-	STAILQ_INIT(&tqe_unknown_dst_entries);
-
-	spin_lock_init(&tqe_unknown_dst_lock);
-
-	init_timer(&tqe_unknown_dst_timer);
-
-	tqe_unknown_dst_timer.function = tqe_unknown_dst_timer_func;
-}
-
-static int topaz_tx_unknown_unicast(const union topaz_tqe_cpuif_descr *desc,
-			const struct fwt_db_entry *fwt_ent)
-{
-	const struct fwt_db_entry *fwt_dst;
-
-	struct ether_header *eth;
-	struct net_device *dev;
-
-	int ret;
-
-	if (tqe_unknown_dst_entry_max == 0)
-		return 0;
-
-	if ((fwt_ent != NULL) && (fwt_ent->out_port == TOPAZ_TQE_DROP_PORT)) {
-		/*
-		 * Few packets may still be pushed to LHost before the "drop"
-		 * FWT entry takes effect
-		 */
-		tqe_rx_pkt_drop(desc);
-
-		return 1;
-	}
-
-	dev = (struct net_device *)tqe_port_handlers[desc->data.in_port].token;
-	eth = bus_to_virt((uintptr_t)desc->data.pkt);
-	/*
-	 * Local addresses of Linux bridge don't have corresponding hardware FWT entries,
-	 * hence they are always "unknown"
-	 */
-	if (tqe_unknown_dst_local_find(dev, eth->ether_dhost))
-		return 0;
-
-	if ((g_tqe_fwt_get_from_mac_hook == NULL) || (g_tqe_fwt_add_from_mac_hook == NULL))
-		return 0;
-	/*
-	 * TODO fwt_ent is NULL in two cases:
-	 *	src MAC address is not found in FWT
-	 *	dst MAC address is not found in FWT
-	 */
-	fwt_dst = g_tqe_fwt_get_from_mac_hook(eth->ether_dhost);
-	/*
-	 * dst MAC address is found in FWT, but src MAC address is not: pass up for
-	 * src MAC learning
-	 */
-	if (fwt_dst != NULL)
-		return 0;
-
-	spin_lock(&tqe_unknown_dst_lock);
-	ret = tqe_unknown_dst_entry_add(eth->ether_dhost);
-	spin_unlock(&tqe_unknown_dst_lock);
-
-	if (ret < 0)
-		return 0;
-	/*
-	 * add a "drop" FWT entry to push packets destined to same dst
-	 * MAC address to "drop" port and drop them
-	 */
-	g_tqe_fwt_add_from_mac_hook(eth->ether_dhost, TOPAZ_TQE_DROP_PORT, 0, NULL);
-
-	return 0;
-}
-
 static int __sram_text tqe_rx_pktfwd(void *queue, const union topaz_tqe_cpuif_descr *desc)
 {
 	enum topaz_tqe_port in_port = desc->data.in_port;
@@ -1014,12 +754,14 @@
 		return 0;
 
 	fwt_ent = g_tqe_fwt_get_ucast_hook(eh->ether_shost, eh->ether_dhost);
-	if (unlikely(!fwt_ent || (fwt_ent->out_port == TOPAZ_TQE_DROP_PORT)))
-		return topaz_tx_unknown_unicast(desc, fwt_ent);
+	if (unlikely(!fwt_ent))
+		return 0;
 
 	/* Don't return to sender */
 	if (unlikely((in_port == fwt_ent->out_port) ||
-			tqe_port_same_group(in_port, fwt_ent->out_port))) {
+		((tqe_port_handlers[in_port].group > 0) &&
+			tqe_port_handlers[in_port].group ==
+				tqe_port_handlers[fwt_ent->out_port].group))) {
 		tqe_rx_pkt_drop(desc);
 		return 1;
 	}
@@ -1365,6 +1107,11 @@
 		void *hbm_buf_virt;
 		uintptr_t flush_start;
 		size_t flush_size;
+		int from_local = 0;
+
+		if (vlan_enabled && ppctl->data.out_port == TOPAZ_TQE_WMAC_PORT) {
+			from_local = switch_vlan_is_local(buf_virt);
+		}
 
 		if (data_len < TOPAZ_HBM_BUF_EMAC_RX_SIZE) {
 			pool = TOPAZ_HBM_BUF_EMAC_RX_POOL;
@@ -1392,7 +1139,14 @@
 		memcpy(hbm_buf_virt, buf_virt, data_len);
 		buf_virt = hbm_buf_virt;
 
-		if (M_FLAG_ISSET(skb, M_VLAN_TAGGED)) {
+		if (from_local) {
+			struct qtn_vlan_pkt *pkt = (struct qtn_vlan_pkt *)((uint8_t *)buf_virt - QVLAN_PKTCTRL_LEN);
+			pkt->magic = QVLAN_PKT_MAGIC;
+			pkt->vlan_info = QVLAN_SKIP_CHECK;
+
+			flush_start = (uintptr_t) align_buf_cache((uint8_t *)buf_virt - QVLAN_PKTCTRL_LEN);
+			flush_size = align_buf_cache_size((uint8_t *)buf_virt - QVLAN_PKTCTRL_LEN, data_len + QVLAN_PKTCTRL_LEN);
+		} else if (M_FLAG_ISSET(skb, M_VLAN_TAGGED)) {
 			buf_virt_vlan = qtn_vlan_get_info(buf_virt);
 			memcpy(buf_virt_vlan, (uint8_t *)qtn_vlan_get_info(skb->data),
 					QVLAN_PKTCTRL_LEN);
@@ -1583,8 +1337,6 @@
 
 	device_create_file(&dev->dev, &dev_attr_dbg);
 
-	tqe_unknown_dst_entry_init();
-
 	return dev;
 
 netdev_register_error:
diff --git a/drivers/topaz/switch_vlan.c b/drivers/topaz/switch_vlan.c
index 99cd319..89914c3 100644
--- a/drivers/topaz/switch_vlan.c
+++ b/drivers/topaz/switch_vlan.c
@@ -23,7 +23,6 @@
 #include <linux/etherdevice.h>
 #include <linux/if_vlan.h>
 #include <linux/spinlock.h>
-#include <linux/net/bridge/br_public.h>
 
 #include <net80211/if_ethersubr.h>
 #include <qtn/topaz_tqe_cpuif.h>
@@ -52,6 +51,7 @@
 
 static DEFINE_SPINLOCK(lock);
 
+#define         SWITCH_VLAN_LOCAL_INTERFACE_NAME    "br0"
 #define		SWITCH_VLAN_PROC	"topaz_vlan"
 
 static inline void __switch_vlan_add_member(struct qtn_vlan_dev *vdev, uint16_t vid)
@@ -242,7 +242,7 @@
 EXPORT_SYMBOL(switch_free_vlan_dev_by_idx);
 
 #ifdef CONFIG_TOPAZ_DBDC_HOST
-static enum topaz_tqe_port g_topaz_tqe_pcie_rel_port = TOPAZ_TQE_DROP_PORT;
+static enum topaz_tqe_port g_topaz_tqe_pcie_rel_port = TOPAZ_TQE_DUMMY_PORT;
 void tqe_register_pcie_rel_port(const enum topaz_tqe_port tqe_port)
 {
 	g_topaz_tqe_pcie_rel_port = tqe_port;
@@ -468,41 +468,52 @@
 }
 EXPORT_SYMBOL(switch_vlan_clr_node);
 
-static struct sk_buff *switch_vlan_tag_pkt(struct sk_buff *skb, uint16_t vlanid)
+int switch_vlan_is_local(const uint8_t *data)
 {
-	struct vlan_ethhdr *veth;
-	struct qtn_vlan_pkt old;
-	struct qtn_vlan_pkt *new;
+	const struct ethhdr *eth = (struct ethhdr *)data;
+	struct net_device *brdev = dev_get_by_name(&init_net, SWITCH_VLAN_LOCAL_INTERFACE_NAME);
+	int ret = 0;
 
-	memcpy(&old, qtn_vlan_get_info(skb->data), sizeof(old));
-
-	if (skb_cow_head(skb, VLAN_HLEN) < 0) {
-		kfree_skb(skb);
-		return NULL;
+	if (likely(brdev)) {
+		ret = !compare_ether_addr(eth->h_source, brdev->dev_addr);
+		dev_put(brdev);
 	}
-	veth = (struct vlan_ethhdr *)skb_push(skb, VLAN_HLEN);
 
-	/* Move the mac addresses to the beginning of the new header. */
-	memmove(skb->data, skb->data + VLAN_HLEN, 2 * VLAN_ETH_ALEN);
-	veth->h_vlan_proto = __constant_htons(ETH_P_8021Q);
-	veth->h_vlan_TCI = htons(vlanid);
-
-	new = qtn_vlan_get_info(skb->data);
-	memcpy(new, &old, sizeof(*new));
-	new->vlan_info |= QVLAN_TAGGED;
-
-	return skb;
+	return ret;
 }
+EXPORT_SYMBOL(switch_vlan_is_local);
 
-static struct sk_buff *switch_vlan_untag_pkt(struct sk_buff *skb, int copy)
+struct sk_buff *switch_vlan_strip_tag(struct sk_buff *skb, int copy)
 {
 	struct sk_buff *skb2;
 	struct vlan_ethhdr *veth;
-	struct qtn_vlan_pkt *pktinfo;
+	uint16_t vlan_id;
+	struct net_device *brdev;
+
+	BUG_ON(!skb_mac_header_was_set(skb));
+
+	if (!vlan_enabled)
+		return skb;
+
+	veth = vlan_eth_hdr(skb);
+	if (veth->h_vlan_proto != __constant_htons(ETH_P_8021Q))
+		return skb;
+
+	brdev = dev_get_by_name(&init_net, SWITCH_VLAN_LOCAL_INTERFACE_NAME);
+	if (likely(brdev)) {
+		vlan_id = ntohs(veth->h_vlan_TCI) & VLAN_VID_MASK;
+		if (vlan_check_vlan_exist(brdev, vlan_id)) {
+			dev_put(brdev);
+
+			return skb;
+		}
+
+		dev_put(brdev);
+	}
 
 	if (copy) {
 		skb2 = skb_copy(skb, GFP_ATOMIC);
-		kfree_skb(skb);
+		dev_kfree_skb(skb);
 	} else {
 		skb2 = skb;
 	}
@@ -510,179 +521,54 @@
 	if (!skb2)
 		return NULL;
 
-	veth = (struct vlan_ethhdr *)(skb2->data);
+	veth = vlan_eth_hdr(skb2);
 	memmove((uint8_t *)veth - QVLAN_PKTCTRL_LEN + VLAN_HLEN,
 		(uint8_t *)veth - QVLAN_PKTCTRL_LEN,
 		QVLAN_PKTCTRL_LEN + 2 * VLAN_ETH_ALEN);
 
-	skb_pull(skb2, VLAN_HLEN);
-
-	pktinfo = qtn_vlan_get_info(skb2->data);
-	pktinfo->vlan_info &= ~QVLAN_TAGGED;
+	skb_push(skb2, ETH_HLEN - VLAN_HLEN);
+	skb2->protocol = eth_type_trans(skb2, skb2->dev);
+	M_FLAG_SET(skb2, M_VLAN_TAG_OWE);
 
 	return skb2;
 }
+EXPORT_SYMBOL(switch_vlan_strip_tag);
 
-struct net_device *switch_vlan_find_br(struct net_device *ndev)
+struct sk_buff *switch_vlan_restore_tag(struct sk_buff *skb, int copy)
 {
-	struct net_device *brdev = NULL;
+	struct sk_buff *skb2;
+	struct qtn_vlan_pkt pkt;
 
-	if ((ndev->flags & IFF_SLAVE) && ndev->master)
-		ndev = ndev->master;
-
-	rcu_read_lock();
-	if (rcu_dereference(ndev->br_port) != NULL)
-		brdev = ndev->br_port->br->dev;
-	rcu_read_unlock();
-
-	return brdev;
-}
-
-/*
- * supposed to be called after eth_type_trans and before netif_receive_skb
- * VLAN ingress handling should be done already
- */
-struct sk_buff *switch_vlan_to_proto_stack(struct sk_buff *skb, int copy)
-{
-	struct qtn_vlan_pkt *pkt;
-	uint16_t vlan_id;
-	struct net_device *brdev;
-	int tag_in_frame;
-	int should_tag;
-
-	BUG_ON(!skb_mac_header_was_set(skb));
-
-	if (!vlan_enabled)
+	if (!M_FLAG_ISSET(skb, M_VLAN_TAG_OWE))
 		return skb;
 
-	if (skb->protocol == __constant_htons(ETH_P_PAE))
-		return skb;
-
-	M_FLAG_SET(skb, M_ORIG_OUTSIDE);
-
-	pkt = qtn_vlan_get_info(skb_mac_header(skb));
-
-	tag_in_frame = !!(pkt->vlan_info & QVLAN_TAGGED);
-	vlan_id = (pkt->vlan_info & QVLAN_MASK_VID);
-
-	brdev = switch_vlan_find_br(skb->dev);
-	if (likely(brdev)) {
-		should_tag = !!vlan_check_vlan_exist(brdev, vlan_id);
+	if (copy) {
+		skb2 = skb_copy(skb, GFP_ATOMIC);
+		dev_kfree_skb(skb);
 	} else {
-		return skb;
+		skb2 = skb;
 	}
 
-	if (tag_in_frame != should_tag) {
-		skb_push(skb, ETH_HLEN);
-		if (should_tag)
-			skb = switch_vlan_tag_pkt(skb, vlan_id);
-		else
-			skb = switch_vlan_untag_pkt(skb, copy);
+	if (!skb2)
+		return NULL;
 
-		if (!skb)
-			return NULL;
+	memcpy(&pkt, qtn_vlan_get_info(skb2->data), sizeof(pkt));
+	BUG_ON(pkt.magic != QVLAN_PKT_MAGIC);
 
-		skb->protocol = eth_type_trans(skb, skb->dev);
+	skb2 = __vlan_put_tag(skb2, pkt.vlan_info & QVLAN_MASK_VID);
+	if (!skb2)
+		return NULL;
+
+	if (unlikely(skb_headroom(skb2) < QVLAN_PKTCTRL_LEN)) {
+		dev_kfree_skb(skb2);
+		return NULL;
 	}
 
-	return skb;
+	memcpy(qtn_vlan_get_info(skb2->data), &pkt, sizeof(pkt));
+
+	return skb2;
 }
-EXPORT_SYMBOL(switch_vlan_to_proto_stack);
-
-static struct sk_buff *switch_vlan_add_pktinfo(struct sk_buff *skb)
-{
-	struct qtn_vlan_pkt *pktinfo;
-
-	if (skb_headroom(skb) < QVLAN_PKTCTRL_LEN) {
-		struct sk_buff *skb2;
-
-		skb2 = skb_copy_expand(skb, QVLAN_PKTCTRL_LEN * 2, skb_tailroom(skb), GFP_ATOMIC);
-		if (!skb2) {
-			kfree_skb(skb);
-			return NULL;
-		}
-
-		kfree_skb(skb);
-		skb = skb2;
-	}
-
-	pktinfo = qtn_vlan_get_info(skb->data);
-	pktinfo->magic = QVLAN_PKT_MAGIC;
-
-	M_FLAG_SET(skb, M_VLAN_TAGGED);
-	return skb;
-}
-
-struct sk_buff *switch_vlan_from_proto_stack(struct sk_buff *skb, struct qtn_vlan_dev *outdev, uint16_t ncidx, int copy)
-{
-	struct qtn_vlan_pkt *pktinfo;
-	struct vlan_ethhdr *veth;
-	uint16_t vlanid;
-	int tag_in_frame;
-	int should_tag;
-
-	if (!vlan_enabled)
-		return skb;
-
-	if (!M_FLAG_ISSET(skb, M_ORIG_OUTSIDE)) {
-		/*
-		 * The packet is generated by the device.
-		 * A qtn_vlan_pkt structure is needed.
-		 */
-		skb = switch_vlan_add_pktinfo(skb);
-		if (!skb)
-			return NULL;
-
-		pktinfo = qtn_vlan_get_info(skb->data);
-
-		if (M_FLAG_ISSET(skb, M_ORIG_BR)) {
-			veth = (struct vlan_ethhdr *)(skb->data);
-
-			if (veth->h_vlan_proto == __constant_htons(ETH_P_8021Q)) {
-				vlanid = ntohs(veth->h_vlan_TCI) & VLAN_VID_MASK;
-				pktinfo->vlan_info = (QVLAN_TAGGED | vlanid);
-			} else {
-				pktinfo->vlan_info = QVLAN_SKIP_CHECK;
-			}
-		} else {
-			pktinfo->vlan_info = QVLAN_SKIP_CHECK;
-		}
-	}
-
-	pktinfo = qtn_vlan_get_info(skb->data);
-	if (pktinfo->vlan_info & QVLAN_SKIP_CHECK)
-		return skb;
-
-	tag_in_frame = !!(pktinfo->vlan_info & QVLAN_TAGGED);
-	vlanid = pktinfo->vlan_info & QVLAN_MASK_VID;
-
-	if (QVLAN_IS_DYNAMIC(outdev)) {
-		if (outdev->u.node_vlan[ncidx] != vlanid) {
-			qtn_vlan_inc_stats(&outdev->eg_drop);
-			goto drop_out;
-		}
-		should_tag = 0;
-	} else {
-		if (!qtn_vlan_is_member(outdev, vlanid)) {
-			qtn_vlan_inc_stats(&outdev->eg_drop);
-			goto drop_out;
-		}
-		should_tag = qtn_vlan_is_tagged_member(outdev, vlanid);
-	}
-
-	if (tag_in_frame != should_tag) {
-		if (should_tag)
-			skb = switch_vlan_tag_pkt(skb, vlanid);
-		else
-			skb = switch_vlan_untag_pkt(skb, copy);
-        }
-
-	return skb;
-drop_out:
-	kfree_skb(skb);
-	return NULL;
-}
-EXPORT_SYMBOL(switch_vlan_from_proto_stack);
+EXPORT_SYMBOL(switch_vlan_restore_tag);
 
 static int switch_vlan_stats_rd(char *page, char **start, off_t offset,
 		int count, int *eof, void *data)
@@ -703,13 +589,13 @@
 		if (unlikely(!ndev))
 			continue;
 
-		p += sprintf(p, "%s\ti-pass\t\te-pass\t\ti-drop\t\te-drop\t\tmagic-invalid\n", ndev->name);
-		p += sprintf(p, "Lhost\t%u\t\t%u\t\t%u\t\t%u\t\t%u\n", vdev->ig_pass.lhost, vdev->eg_pass.lhost,
-				vdev->ig_drop.lhost, vdev->eg_drop.lhost, vdev->magic_invalid.lhost);
-		p += sprintf(p, "AuC\t%u\t\t%u\t\t%u\t\t%u\t\t%u\n", vdev->ig_pass.auc, vdev->eg_pass.auc,
-				vdev->ig_drop.auc, vdev->eg_drop.auc, vdev->magic_invalid.auc);
-		p += sprintf(p, "MuC\t%u\t\t%u\t\t%u\t\t%u\t\t%u\n", vdev->ig_pass.muc, vdev->eg_pass.muc,
-				vdev->ig_drop.muc, vdev->eg_drop.muc, vdev->magic_invalid.muc);
+		p += sprintf(p, "%s\ti-pass\t\te-pass\t\ti-drop\t\te-drop\n", ndev->name);
+		p += sprintf(p, "Lhost\t%u\t\t%u\t\t%u\t\t%u\n", vdev->ig_pass.lhost, vdev->eg_pass.lhost,
+				vdev->ig_drop.lhost, vdev->eg_drop.lhost);
+		p += sprintf(p, "AuC\t%u\t\t%u\t\t%u\t\t%u\n", vdev->ig_pass.auc, vdev->eg_pass.auc,
+				vdev->ig_drop.auc, vdev->eg_drop.auc);
+		p += sprintf(p, "MuC\t%u\t\t%u\t\t%u\t\t%u\n", vdev->ig_pass.muc, vdev->eg_pass.muc,
+				vdev->ig_drop.muc, vdev->eg_drop.muc);
 
 		dev_put(ndev);
 	}
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
index c73137b..3bc625e 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
@@ -57,10 +57,6 @@
 #define ELF_MIN_ALIGN	PAGE_SIZE
 #endif
 
-#ifdef CONFIG_ARC_ELF_CORE_FIX
-#define ARC_ELF_CORE_PRSTATUS_SIZE 236	/* PRSTATUS size expected by binutils/gdb */
-#endif
-
 #ifndef ELF_CORE_EFLAGS
 #define ELF_CORE_EFLAGS	0
 #endif
@@ -1405,38 +1401,8 @@
 				    0, sizeof(t->prstatus.pr_reg),
 				    &t->prstatus.pr_reg, NULL);
 
-#ifdef CONFIG_ARC_ELF_CORE_FIX
-	/*
-	 * Fix core dump format for ARC architecture to be readable
-	 * by toolchain.
-	 * Need to cut two fields (orig_r0, orig_r8) in the middle of
-	 * user_regs_struct structure to comply with binutils/gdb
-	 * core dump format.
-	 */
-	const u8 *prstatus_orig_data = (u8 *) &t->prstatus;
-	u8 *prstatus_fixed = kmalloc(ARC_ELF_CORE_PRSTATUS_SIZE, GFP_KERNEL);
-	const size_t prstatus_cut_pos = offsetof(struct elf_prstatus, pr_reg) +
-					offsetof(struct user_regs_struct, orig_r0);
-	const size_t prstatus_cut_size = sizeof(elf_greg_t) * 2; /* Cut two registers */
-
-	if (unlikely(!prstatus_fixed))
-		return 0;
-
-	BUG_ON(ARC_ELF_CORE_PRSTATUS_SIZE !=
-			(sizeof(struct elf_prstatus) - prstatus_cut_size));
-
-	memcpy(prstatus_fixed, prstatus_orig_data, prstatus_cut_pos);
-	memcpy(prstatus_fixed + prstatus_cut_pos,
-			prstatus_orig_data + prstatus_cut_pos +	prstatus_cut_size,
-			sizeof(struct elf_prstatus) - prstatus_cut_pos - prstatus_cut_size);
-
-	fill_note(&t->notes[0], "CORE", NT_PRSTATUS,
-			ARC_ELF_CORE_PRSTATUS_SIZE, prstatus_fixed);
-#else
 	fill_note(&t->notes[0], "CORE", NT_PRSTATUS,
 		  sizeof(t->prstatus), &t->prstatus);
-#endif
-
 	*total += notesize(&t->notes[0]);
 
 	do_thread_regset_writeback(t->task, &view->regsets[0]);
@@ -1610,13 +1576,7 @@
 		unsigned int i;
 		struct elf_thread_core_info *t = threads;
 		threads = t->next;
-#ifdef CONFIG_ARC_ELF_CORE_FIX
-		if (likely(t->notes[0].data && t->notes[0].data != &t->prstatus &&
-		    t->notes[0].type == NT_PRSTATUS))
-			kfree(t->notes[0].data);
-#else
 		WARN_ON(t->notes[0].data && t->notes[0].data != &t->prstatus);
-#endif
 		for (i = 1; i < info->thread_notes; ++i)
 			kfree(t->notes[i].data);
 		kfree(t);
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.103.0-v32.104.0 b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.103.0-v32.104.0
new file mode 100644
index 0000000..45f863a
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.103.0-v32.104.0
@@ -0,0 +1,19 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v32_103_0_TO_v32_104_0 Version v32.103.0 to version v32.104.0 changes
+ *
+ * \subsection v32_103_0_TO_v32_104_0Added Added functions
+ *
+ * The following functions were added between versions v32.103.0 and v32.104.0
+ *
+ * \li \ref qcsapi_wifi_get_ap_isolate
+ * \li \ref qcsapi_wps_set_param
+ * \li \ref qcsapi_wifi_get_wpa_status
+ * \li \ref qcsapi_wifi_get_associated_device_ip_addr
+ * \li \ref qcsapi_wifi_get_radar_status
+ * \li \ref qcsapi_wifi_get_auth_state
+ * \li \ref qcsapi_wifi_set_ap_isolate
+ * \li \ref qcsapi_wifi_qos_set_param
+ */
+
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.104.0-v32.105.0 b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.104.0-v32.105.0
new file mode 100644
index 0000000..a6e95ca
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.104.0-v32.105.0
@@ -0,0 +1,12 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v32_104_0_TO_v32_105_0 Version v32.104.0 to version v32.105.0 changes
+ *
+ * \subsection v32_104_0_TO_v32_105_0Added Added functions
+ *
+ * The following functions were added between versions v32.104.0 and v32.105.0
+ *
+ * \li \ref qcsapi_get_max_bitrate
+ * \li \ref qcsapi_set_max_bitrate
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.108.0-v32.109.0 b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.108.0-v32.109.0
new file mode 100644
index 0000000..c894ee5
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.108.0-v32.109.0
@@ -0,0 +1,30 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v32_108_0_TO_v32_109_0 Version v32.108.0 to version v32.109.0 changes
+ *
+ * \subsection v32_108_0_TO_v32_109_0Added Added functions
+ *
+ * The following functions were added between versions v32.108.0 and v32.109.0
+ *
+ * \li \ref qcsapi_sem_init
+ * \li \ref qcsapi_vsp_set_config
+ * \li \ref qcsapi_sem_lock
+ * \li \ref qcsapi_vsp_add_rule
+ * \li \ref qcsapi_vsp_get_strm
+ * \li \ref qcsapi_vsp_get_rule
+ * \li \ref qcsapi_vsp_get_wl
+ * \li \ref qcsapi_sem_disable
+ * \li \ref qcsapi_vsp_add_wl
+ * \li \ref qcsapi_vsp_del_rule
+ * \li \ref qcsapi_vsp_get_config
+ * \li \ref qcsapi_vsp_del_wl
+ * \li \ref qcsapi_vsp_get_stats
+ * \li \ref qcsapi_vsp_get_state_all
+ * \li \ref qcsapi_vsp_get_state
+ * \li \ref qcsapi_vsp_del_rule_index
+ * \li \ref qcsapi_vsp_del_wl_index
+ * \li \ref qcsapi_vsp_set_state
+ * \li \ref qcsapi_sem_unlock
+ * \li \ref qcsapi_vsp_get_config_all
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.108.1-v32.108.2 b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.108.1-v32.108.2
new file mode 100644
index 0000000..b3c858a
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.108.1-v32.108.2
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v32_108_1_TO_v32_108_2 Version v32.108.1 to version v32.108.2 changes
+ *
+ * \subsection v32_108_1_TO_v32_108_2Added Added functions
+ *
+ * The following functions were added between versions v32.108.1 and v32.108.2
+ *
+ * \li \ref qcsapi_pm_set_mode
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.111.0-v32.112.0 b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.111.0-v32.112.0
new file mode 100644
index 0000000..bbeb7ca
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.111.0-v32.112.0
@@ -0,0 +1,14 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v32_111_0_TO_v32_112_0 Version v32.111.0 to version v32.112.0 changes
+ *
+ * \subsection v32_111_0_TO_v32_112_0Added Added functions
+ *
+ * The following functions were added between versions v32.111.0 and v32.112.0
+ *
+ * \li \ref qcsapi_wifi_get_pairing_enable
+ * \li \ref qcsapi_wifi_get_pairing_id
+ * \li \ref qcsapi_wifi_set_pairing_enable
+ * \li \ref qcsapi_wifi_set_pairing_id
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.112.0-v32.113.0 b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.112.0-v32.113.0
new file mode 100644
index 0000000..8b91091
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.112.0-v32.113.0
@@ -0,0 +1,15 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v32_112_0_TO_v32_113_0 Version v32.112.0 to version v32.113.0 changes
+ *
+ * \subsection v32_112_0_TO_v32_113_0Added Added functions
+ *
+ * The following functions were added between versions v32.112.0 and v32.113.0
+ *
+ * \li \ref qcsapi_wifi_set_scs_verbose
+ * \li \ref qcsapi_wifi_set_scs_cca_intf_smth_fctr
+ * \li \ref qcsapi_wifi_rfstatus
+ * \li \ref qcsapi_wifi_set_scs_smpl_enable
+ * \li \ref qcsapi_get_phy_stats
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.117.0-v32.118.0 b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.117.0-v32.118.0
new file mode 100644
index 0000000..42a3b91
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.117.0-v32.118.0
@@ -0,0 +1,12 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v32_117_0_TO_v32_118_0 Version v32.117.0 to version v32.118.0 changes
+ *
+ * \subsection v32_117_0_TO_v32_118_0Added Added functions
+ *
+ * The following functions were added between versions v32.117.0 and v32.118.0
+ *
+ * \li \ref qcsapi_wifi_run_script
+ * \li \ref qcsapi_pm_set_mode
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.118.0-v32.119.0 b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.118.0-v32.119.0
new file mode 100644
index 0000000..084235a
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.118.0-v32.119.0
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v32_118_0_TO_v32_119_0 Version v32.118.0 to version v32.119.0 changes
+ *
+ * \subsection v32_118_0_TO_v32_119_0Added Added functions
+ *
+ * The following functions were added between versions v32.118.0 and v32.119.0
+ *
+ * \li \ref qcsapi_wifi_get_disconn_cnt
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.120.0-v32.121.0 b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.120.0-v32.121.0
new file mode 100644
index 0000000..95dbb57
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.120.0-v32.121.0
@@ -0,0 +1,13 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v32_120_0_TO_v32_121_0 Version v32.120.0 to version v32.121.0 changes
+ *
+ * \subsection v32_120_0_TO_v32_121_0Added Added functions
+ *
+ * The following functions were added between versions v32.120.0 and v32.121.0
+ *
+ * \li \ref qcsapi_eth_phy_power_control
+ * \li \ref qcsapi_wifi_create_restricted_bss
+ * \li \ref qcsapi_wifi_test_traffic
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.122.0-v32.123.0 b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.122.0-v32.123.0
new file mode 100644
index 0000000..c089639
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.122.0-v32.123.0
@@ -0,0 +1,17 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v32_122_0_TO_v32_123_0 Version v32.122.0 to version v32.123.0 changes
+ *
+ * \subsection v32_122_0_TO_v32_123_0Added Added functions
+ *
+ * The following functions were added between versions v32.122.0 and v32.123.0
+ *
+ * \li \ref qcsapi_wifi_get_disconn_info
+ *
+ * \subsection v32_122_0_TO_v32_123_0Removed Removed functions
+ *
+ * The following functions were removed between versions v32.122.0 and v32.123.0
+ *
+ * \li qcsapi_wifi_get_disconn_cnt
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.123.0-v32.124.0 b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.123.0-v32.124.0
new file mode 100644
index 0000000..d2e821a
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.123.0-v32.124.0
@@ -0,0 +1,12 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v32_123_0_TO_v32_124_0 Version v32.123.0 to version v32.124.0 changes
+ *
+ * \subsection v32_123_0_TO_v32_124_0Added Added functions
+ *
+ * The following functions were added between versions v32.123.0 and v32.124.0
+ *
+ * \li \ref qcsapi_wifi_get_scs_dfs_reentry_request
+ * \li \ref qcsapi_wifi_set_scs_chan_mtrc_mrgn
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.128.0-v32.129.0 b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.128.0-v32.129.0
new file mode 100644
index 0000000..e8d6916
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.128.0-v32.129.0
@@ -0,0 +1,25 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v32_128_0_TO_v32_129_0 Version v32.128.0 to version v32.129.0 changes
+ *
+ * \subsection v32_128_0_TO_v32_129_0Added Added functions
+ *
+ * The following functions were added between versions v32.128.0 and v32.129.0
+ *
+ * \li \ref qcsapi_calcmd_get_test_mode_bw
+ * \li \ref qcsapi_calcmd_send_dc_cw_signal
+ * \li \ref qcsapi_calcmd_send_test_packet
+ * \li \ref qcsapi_calcmd_get_test_mode_antenna_sel
+ * \li \ref qcsapi_calcmd_get_test_mode_mcs
+ * \li \ref qcsapi_get_temperature_info
+ * \li \ref qcsapi_calcmd_stop_test_packet
+ * \li \ref qcsapi_calcmd_get_tx_power
+ * \li \ref qcsapi_calcmd_show_test_packet
+ * \li \ref qcsapi_calcmd_stop_dc_cw_signal
+ * \li \ref qcsapi_calcmd_set_tx_power
+ * \li \ref qcsapi_wifi_set_accept_oui_filter
+ * \li \ref qcsapi_calcmd_set_test_mode
+ * \li \ref qcsapi_calcmd_get_test_mode_rssi
+ * \li \ref qcsapi_wifi_get_accept_oui_filter
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.129.0-v32.130.0 b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.129.0-v32.130.0
new file mode 100644
index 0000000..72deaaa
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.129.0-v32.130.0
@@ -0,0 +1,12 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v32_129_0_TO_v32_130_0 Version v32.129.0 to version v32.130.0 changes
+ *
+ * \subsection v32_129_0_TO_v32_130_0Added Added functions
+ *
+ * The following functions were added between versions v32.129.0 and v32.130.0
+ *
+ * \li \ref qcsapi_wps_allow_pbc_overlap
+ * \li \ref qcsapi_wps_get_allow_pbc_overlap_status
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.90.0-v32.91.0 b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.90.0-v32.91.0
new file mode 100644
index 0000000..3a9b6ef
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.90.0-v32.91.0
@@ -0,0 +1,16 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v32_90_0_TO_v32_91_0 Version v32.90.0 to version v32.91.0 changes
+ *
+ * \subsection v32_90_0_TO_v32_91_0Added Added functions
+ *
+ * The following functions were added between versions v32.90.0 and v32.91.0
+ *
+ * \li \ref qcsapi_wps_set_access_control
+ * \li \ref qcsapi_wps_get_access_control
+ * \li \ref qcsapi_wifi_get_assoc_records
+ * \li \ref qcsapi_wifi_start_dfs_reentry
+ * \li \ref qcsapi_wifi_start_scan_ext
+ * \li \ref qcsapi_wifi_get_csw_records
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.94.0-v32.95.0 b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.94.0-v32.95.0
new file mode 100644
index 0000000..c140f29
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.94.0-v32.95.0
@@ -0,0 +1,35 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v32_94_0_TO_v32_95_0 Version v32.94.0 to version v32.95.0 changes
+ *
+ * \subsection v32_94_0_TO_v32_95_0Added Added functions
+ *
+ * The following functions were added between versions v32.94.0 and v32.95.0
+ *
+ * \li \ref qcsapi_reset_all_counters
+ * \li \ref qcsapi_wifi_set_scs_smpl_dwell_time
+ * \li \ref qcsapi_wifi_set_scs_intf_detect_intv
+ * \li \ref qcsapi_wifi_get_scs_status
+ * \li \ref qcsapi_wifi_set_scs_thrshld
+ * \li \ref qcsapi_wifi_set_scs_sample_intv
+ * \li \ref qcsapi_wifi_get_scs_cce_channels
+ * \li \ref qcsapi_wifi_scs_enable
+ * \li \ref qcsapi_wifi_set_scs_report_only
+ * \li \ref qcsapi_wifi_get_scs_stat_report
+ * \li \ref qcsapi_wifi_set_scs_wf
+ *
+ * \subsection v32940TOv32950Removed Removed functions
+ *
+ * The following functions were removed between versions v32.94.0 and v32.95.0
+ *
+ * \li qcsapi_wifi_set_adm_smpl_dwell_time
+ * \li qcsapi_wifi_adm_enable
+ * \li qcsapi_wifi_get_adm_status
+ * \li qcsapi_wifi_set_adm_sample_intv
+ * \li qcsapi_wifi_get_adm_stat_report
+ * \li qcsapi_wifi_get_adm_cce_channels
+ * \li qcsapi_wifi_set_report_only
+ * \li qcsapi_wifi_set_adm_wf
+ * \li qcsapi_wifi_set_adm_thrshld
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.95.0-v32.96.0 b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.95.0-v32.96.0
new file mode 100644
index 0000000..b43b08d
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v32.95.0-v32.96.0
@@ -0,0 +1,12 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v32_95_0_TO_v32_96_0 Version v32.95.0 to version v32.96.0 changes
+ *
+ * \subsection v32_95_0_TO_v32_96_0Added Added functions
+ *
+ * The following functions were added between versions v32.95.0 and v32.96.0
+ *
+ * \li \ref qcsapi_wifi_clear_mac_address_filters
+ */
+
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.12-v35.1.0.13 b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.12-v35.1.0.13
new file mode 100644
index 0000000..76b4a7b
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.12-v35.1.0.13
@@ -0,0 +1,18 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v35_1_0_12_TO_v35_1_0_13 Version v35.1.0.12 to version v35.1.0.13 changes
+ *
+ * \subsection v35_1_0_12_TO_v35_1_0_13Added Added functions
+ *
+ * The following functions were added between versions v35.1.0.12 and v35.1.0.13
+ *
+ * \li \ref qcsapi_calcmd_clear_counter
+ *
+ * \subsection v35_1_0_12_TO_v35_1_0_13Removed Removed functions
+ *
+ * The following functions were removed between versions v35.1.0.12 and v35.1.0.13
+ *
+ * \li qcsapi_wifi_get_max_retries
+ * \li qcsapi_wifi_set_max_retries
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.14-v35.1.0.15 b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.14-v35.1.0.15
new file mode 100644
index 0000000..68dac1f
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.14-v35.1.0.15
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v35_1_0_14_TO_v35_1_0_15 Version v35.1.0.14 to version v35.1.0.15 changes
+ *
+ * \subsection v35_1_0_14_TO_v35_1_0_15Added Added functions
+ *
+ * The following functions were added between versions v35.1.0.14 and v35.1.0.15
+ *
+ * \li \ref qcsapi_SSID_remove_SSID
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.15-v35.2.0.1 b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.15-v35.2.0.1
new file mode 100644
index 0000000..c3fbe75
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.15-v35.2.0.1
@@ -0,0 +1,16 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v35_2_0_0_TO_v35_2_0_1 Version v35.2.0.0 to version v35.2.0.1 changes
+ *
+ * \subsection v35_2_0_0_TO_v35_2_0_1Added Added functions
+ *
+ * The following functions were added between versions v35.2.0.0 and v35.2.0.1
+ *
+ * \li \ref qcsapi_wifi_get_scs_currchan_report
+ * \li \ref qcsapi_wifi_get_autochan_report
+ * \li \ref qcsapi_wifi_get_wmm_ac_map
+ * \li \ref qcsapi_wifi_get_scan_status
+ * \li \ref qcsapi_wps_cancel
+ * \li \ref qcsapi_wifi_set_wmm_ac_map
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.4-v35.1.0.5 b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.4-v35.1.0.5
new file mode 100644
index 0000000..e5ca032
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.4-v35.1.0.5
@@ -0,0 +1,13 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v35_1_0_4_TO_v35_1_0_5 Version v35.1.0.4 to version v35.1.0.5 changes
+ *
+ * \subsection v35_1_0_4_TO_v35_1_0_5Added Added functions
+ *
+ * The following functions were added between versions v35.1.0.4 and v35.1.0.5
+ *
+ * \li \ref qcsapi_wifi_set_bgscan_dwell_times
+ * \li \ref qcsapi_calcmd_set_mac_filter
+ * \li \ref qcsapi_wifi_get_bgscan_dwell_times
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.6-v35.1.0.7 b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.6-v35.1.0.7
new file mode 100644
index 0000000..14062b1
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.6-v35.1.0.7
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v35_1_0_6_TO_v35_1_0_7 Version v35.1.0.6 to version v35.1.0.7 changes
+ *
+ * \subsection v35_1_0_6_TO_v35_1_0_7Added Added functions
+ *
+ * The following functions were added between versions v35.1.0.6 and v35.1.0.7
+ *
+ * \li \ref qcsapi_calcmd_get_antenna_count
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.9-v35.1.0.10 b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.9-v35.1.0.10
new file mode 100644
index 0000000..e536db9
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.9-v35.1.0.10
@@ -0,0 +1,12 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v35_1_0_9_TO_v35_1_0_10 Version v35.1.0.9 to version v35.1.0.10 changes
+ *
+ * \subsection v35_1_0_9_TO_v35_1_0_10Added Added functions
+ *
+ * The following functions were added between versions v35.1.0.9 and v35.1.0.10
+ *
+ * \li \ref qcsapi_wifi_set_power_constraint
+ * \li \ref qcsapi_wifi_get_power_constraint
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.14-v35.2.0.15 b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.14-v35.2.0.15
new file mode 100644
index 0000000..8773b07
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.14-v35.2.0.15
@@ -0,0 +1,12 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v35_2_0_14_TO_v35_2_0_15 Version v35.2.0.14 to version v35.2.0.15 changes
+ *
+ * \subsection v35_2_0_14_TO_v35_2_0_15Added Added functions
+ *
+ * The following functions were added between versions v35.2.0.14 and v35.2.0.15
+ *
+ * \li \ref qcsapi_wifi_get_tpc_interval
+ * \li \ref qcsapi_wifi_set_tpc_interval
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.15-v35.2.0.16 b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.15-v35.2.0.16
new file mode 100644
index 0000000..d32355a
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.15-v35.2.0.16
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v35_2_0_15_TO_v35_2_0_16 Version v35.2.0.15 to version v35.2.0.16 changes
+ *
+ * \subsection v35_2_0_15_TO_v35_2_0_16Added Added functions
+ *
+ * The following functions were added between versions v35.2.0.15 and v35.2.0.16
+ *
+ * \li \ref qcsapi_wifi_get_cac_status
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.16-v35.2.0.17 b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.16-v35.2.0.17
new file mode 100644
index 0000000..29c68ba
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.16-v35.2.0.17
@@ -0,0 +1,12 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v35_2_0_16_TO_v35_2_0_17 Version v35.2.0.16 to version v35.2.0.17 changes
+ *
+ * \subsection v35_2_0_16_TO_v35_2_0_17Added Added functions
+ *
+ * The following functions were added between versions v35.2.0.16 and v35.2.0.17
+ *
+ * \li \ref qcsapi_get_system_status
+ * \li \ref qcsapi_vsp_get_inactive_flags
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.19-v35.2.0.20 b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.19-v35.2.0.20
new file mode 100644
index 0000000..9f72cf7
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.19-v35.2.0.20
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v35_2_0_19_TO_v35_2_0_20 Version v35.2.0.19 to version v35.2.0.20 changes
+ *
+ * \subsection v35_2_0_19_TO_v35_2_0_20Added Added functions
+ *
+ * The following functions were added between versions v35.2.0.19 and v35.2.0.20
+ *
+ * \li \ref qcsapi_wifi_scs_switch_channel
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.2-v35.2.0.3 b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.2-v35.2.0.3
new file mode 100644
index 0000000..6df4759
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.2-v35.2.0.3
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v35_2_0_2_TO_v35_2_0_3 Version v35.2.0.2 to version v35.2.0.3 changes
+ *
+ * \subsection v35_2_0_2_TO_v35_2_0_3Added Added functions
+ *
+ * The following functions were added between versions v35.2.0.2 and v35.2.0.3
+ *
+ * \li \ref qcsapi_wifi_get_hw_noise_per_association
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.4-v35.2.0.5 b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.4-v35.2.0.5
new file mode 100644
index 0000000..26cf365
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.4-v35.2.0.5
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v35_2_0_4_TO_v35_2_0_5 Version v35.2.0.4 to version v35.2.0.5 changes
+ *
+ * \subsection v35_2_0_4_TO_v35_2_0_5Added Added functions
+ *
+ * The following functions were added between versions v35.2.0.4 and v35.2.0.5
+ *
+ * \li \ref qcsapi_wifi_vlan_config
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.7-v35.2.0.8 b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.7-v35.2.0.8
new file mode 100644
index 0000000..469f884
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.7-v35.2.0.8
@@ -0,0 +1,13 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v35_2_0_7_TO_v35_2_0_8 Version v35.2.0.7 to version v35.2.0.8 changes
+ *
+ * \subsection v35_2_0_7_TO_v35_2_0_8Added Added functions
+ *
+ * The following functions were added between versions v35.2.0.7 and v35.2.0.8
+ *
+ * \li \ref qcsapi_set_soc_mac_addr
+ * \li \ref qcsapi_wifi_set_vlan_promisc
+ * \li \ref qcsapi_enable_vlan_pass_through
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.9-v35.2.0.10 b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.9-v35.2.0.10
new file mode 100644
index 0000000..6e4498a
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.9-v35.2.0.10
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v35_2_0_9_TO_v35_2_0_10 Version v35.2.0.9 to version v35.2.0.10 changes
+ *
+ * \subsection v35_2_0_9_TO_v35_2_0_10Added Added functions
+ *
+ * The following functions were added between versions v35.2.0.9 and v35.2.0.10
+ *
+ * \li \ref qcsapi_wifi_get_scs_cca_intf
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1-v36.4 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1-v36.4
deleted file mode 100644
index 2e5e107..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1-v36.4
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * \page ChangeLog
- *
- * \section v36_1_TO_v36_4 Version v36.1 to version v36.4 changes
- *
- * \subsection v36_1_TO_v36_4Added Added functions
- *
- * The following functions were added between versions v36.1 and v36.4
- *
- * \li \ref qcsapi_wifi_set_vht (36.1.0.1)
- * \li \ref qcsapi_bootcfg_commit (36.1.0.1)
- * \li \ref qcsapi_wifi_scs_switch_channel (36.1.0.1)
- * \li \ref qcsapi_wifi_get_vht (36.1.0.1)
- * \li \ref qcsapi_wifi_get_scs_param_report (36.1.0.4)
- * \li \ref qcsapi_wifi_set_ocac_thrshld (36.1.0.6)
- * \li \ref qcsapi_wifi_set_ocac_duration (36.1.0.6)
- * \li \ref qcsapi_wifi_set_ocac_cac_time (36.1.0.6)
- * \li \ref qcsapi_wifi_get_ocac_status (36.1.0.6)
- * \li \ref qcsapi_wps_set_timeout (36.1.0.6)
- * \li \ref qcsapi_wifi_get_psk_auth_failures (36.1.0.6)
- * \li \ref qcsapi_wifi_set_ocac_report_only (36.1.0.6)
- * \li \ref qcsapi_wifi_stop_ocac (36.1.0.6)
- * \li \ref qcsapi_wifi_set_ocac_dwell_time (36.1.0.6)
- * \li \ref qcsapi_wifi_start_ocac (36.1.0.6)
- * \li \ref qcsapi_wps_on_hidden_ssid (36.1.0.6)
- * \li \ref qcsapi_non_wps_get_pp_enable (36.1.0.8)
- * \li \ref qcsapi_non_wps_set_pp_enable (36.1.0.8)
- * \li \ref qcsapi_wifi_get_dscp_8021p_map (36.1.0.8)
- * \li \ref qcsapi_set_carrier_id (36.1.0.8)
- * \li \ref qcsapi_get_carrier_id (36.1.0.8)
- * \li \ref qcsapi_wifi_set_dscp_8021p_map (36.1.0.8)
- * \li \ref qcsapi_wps_set_ap_pin (36.1.0.9)
- * \li \ref qcsapi_wps_save_ap_pin (36.1.0.9)
- * \li \ref qcsapi_wps_upnp_status (36.1.0.11)
- * \li \ref qcsapi_wps_upnp_enable (36.1.0.11)
- * \li \ref qcsapi_wps_get_pbc_in_srcm (36.1.0.14)
- * \li \ref qcsapi_wps_set_pbc_in_srcm (36.1.0.14)
- * \li \ref qcsapi_wifi_set_chan_pri_inactive (36.1.0.15)
- * \li \ref qcsapi_wifi_enable_tdls (36.1.0.16)
- * \li \ref qcsapi_wifi_get_tdls_status (36.1.0.16)
- * \li \ref qcsapi_wifi_get_tdls_params (36.1.0.16)
- * \li \ref qcsapi_wifi_tdls_operate (36.1.0.16)
- * \li \ref qcsapi_wifi_set_tdls_params (36.1.0.16)
- *
- * \subsection v36_1_TO_v36_4Removed Removed functions
- *
- * The following functions were removed between versions v36.1 and v36.4
- *
- * \li qcsapi_wifi_set_scs_wf (36.1.0.1)
- */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.0-v36.1.0.1 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.0-v36.1.0.1
new file mode 100644
index 0000000..bd4cc87
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.0-v36.1.0.1
@@ -0,0 +1,20 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_1_0_0_TO_v36_1_0_1 Version v36.1.0.0 to version v36.1.0.1 changes
+ *
+ * \subsection v36_1_0_0_TO_v36_1_0_1Added Added functions
+ *
+ * The following functions were added between versions v36.1.0.0 and v36.1.0.1
+ *
+ * \li \ref qcsapi_wifi_set_vht
+ * \li \ref qcsapi_bootcfg_commit
+ * \li \ref qcsapi_wifi_scs_switch_channel
+ * \li \ref qcsapi_wifi_get_vht
+ *
+ * \subsection v36_1_0_0_TO_v36_1_0_1Removed Removed functions
+ *
+ * The following functions were removed between versions v36.1.0.0 and v36.1.0.1
+ *
+ * \li qcsapi_wifi_set_scs_wf
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.10-v36.1.0.11 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.10-v36.1.0.11
new file mode 100644
index 0000000..1ecbb03
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.10-v36.1.0.11
@@ -0,0 +1,12 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_1_0_10_TO_v36_1_0_11 Version v36.1.0.10 to version v36.1.0.11 changes
+ *
+ * \subsection v36_1_0_10_TO_v36_1_0_11Added Added functions
+ *
+ * The following functions were added between versions v36.1.0.10 and v36.1.0.11
+ *
+ * \li \ref qcsapi_wps_upnp_status
+ * \li \ref qcsapi_wps_upnp_enable
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.13-v36.1.0.14 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.13-v36.1.0.14
new file mode 100644
index 0000000..eb2fc12
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.13-v36.1.0.14
@@ -0,0 +1,12 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_1_0_13_TO_v36_1_0_14 Version v36.1.0.13 to version v36.1.0.14 changes
+ *
+ * \subsection v36_1_0_13_TO_v36_1_0_14Added Added functions
+ *
+ * The following functions were added between versions v36.1.0.13 and v36.1.0.14
+ *
+ * \li \ref qcsapi_wps_get_pbc_in_srcm
+ * \li \ref qcsapi_wps_set_pbc_in_srcm
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.14-v36.1.0.15 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.14-v36.1.0.15
new file mode 100644
index 0000000..31dbf12
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.14-v36.1.0.15
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_1_0_14_TO_v36_1_0_15 Version v36.1.0.14 to version v36.1.0.15 changes
+ *
+ * \subsection v36_1_0_14_TO_v36_1_0_15Added Added functions
+ *
+ * The following functions were added between versions v36.1.0.14 and v36.1.0.15
+ *
+ * \li \ref qcsapi_wifi_set_chan_pri_inactive
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.15-v36.1.0.16 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.15-v36.1.0.16
new file mode 100644
index 0000000..b9dabe2
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.15-v36.1.0.16
@@ -0,0 +1,15 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_1_0_15_TO_v36_1_0_16 Version v36.1.0.15 to version v36.1.0.16 changes
+ *
+ * \subsection v36_1_0_15_TO_v36_1_0_16Added Added functions
+ *
+ * The following functions were added between versions v36.1.0.15 and v36.1.0.16
+ *
+ * \li \ref qcsapi_wifi_enable_tdls
+ * \li \ref qcsapi_wifi_get_tdls_status
+ * \li \ref qcsapi_wifi_get_tdls_params
+ * \li \ref qcsapi_wifi_tdls_operate
+ * \li \ref qcsapi_wifi_set_tdls_params
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.3-v36.1.0.4 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.3-v36.1.0.4
new file mode 100644
index 0000000..f965cdd
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.3-v36.1.0.4
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_1_0_3_TO_v36_1_0_4 Version v36.1.0.3 to version v36.1.0.4 changes
+ *
+ * \subsection v36_1_0_3_TO_v36_1_0_4Added Added functions
+ *
+ * The following functions were added between versions v36.1.0.3 and v36.1.0.4
+ *
+ * \li \ref qcsapi_wifi_get_scs_param_report
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.5-v36.1.0.6 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.5-v36.1.0.6
new file mode 100644
index 0000000..77e2894
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.5-v36.1.0.6
@@ -0,0 +1,21 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_1_0_5_TO_v36_1_0_6 Version v36.1.0.5 to version v36.1.0.6 changes
+ *
+ * \subsection v36_1_0_5_TO_v36_1_0_6Added Added functions
+ *
+ * The following functions were added between versions v36.1.0.5 and v36.1.0.6
+ *
+ * \li \ref qcsapi_wifi_set_ocac_thrshld
+ * \li \ref qcsapi_wifi_set_ocac_duration
+ * \li \ref qcsapi_wifi_set_ocac_cac_time
+ * \li \ref qcsapi_wifi_get_ocac_status
+ * \li \ref qcsapi_wps_set_timeout
+ * \li \ref qcsapi_wifi_get_psk_auth_failures
+ * \li \ref qcsapi_wifi_set_ocac_report_only
+ * \li \ref qcsapi_wifi_stop_ocac
+ * \li \ref qcsapi_wifi_set_ocac_dwell_time
+ * \li \ref qcsapi_wifi_start_ocac
+ * \li \ref qcsapi_wps_on_hidden_ssid
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.7-v36.1.0.8 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.7-v36.1.0.8
new file mode 100644
index 0000000..c94ef5c
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.7-v36.1.0.8
@@ -0,0 +1,16 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_1_0_7_TO_v36_1_0_8 Version v36.1.0.7 to version v36.1.0.8 changes
+ *
+ * \subsection v36_1_0_7_TO_v36_1_0_8Added Added functions
+ *
+ * The following functions were added between versions v36.1.0.7 and v36.1.0.8
+ *
+ * \li \ref qcsapi_non_wps_get_pp_enable
+ * \li \ref qcsapi_non_wps_set_pp_enable
+ * \li \ref qcsapi_wifi_get_dscp_8021p_map
+ * \li \ref qcsapi_set_carrier_id
+ * \li \ref qcsapi_get_carrier_id
+ * \li \ref qcsapi_wifi_set_dscp_8021p_map
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.8-v36.1.0.9 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.8-v36.1.0.9
new file mode 100644
index 0000000..826e9b3
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.8-v36.1.0.9
@@ -0,0 +1,12 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_1_0_8_TO_v36_1_0_9 Version v36.1.0.8 to version v36.1.0.9 changes
+ *
+ * \subsection v36_1_0_8_TO_v36_1_0_9Added Added functions
+ *
+ * The following functions were added between versions v36.1.0.8 and v36.1.0.9
+ *
+ * \li \ref qcsapi_wps_set_ap_pin
+ * \li \ref qcsapi_wps_save_ap_pin
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4-v36.5 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4-v36.5
deleted file mode 100644
index 450d713..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4-v36.5
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * \page ChangeLog
- *
- * \section v36_4TO_v36_5 Version v36.4 to version v36.5 changes
- *
- * \subsection v36_4_TO_v36_5Added Added functions
- *
- * The following functions were added between versions v36.4 and v36.4
- *
- * \li \ref qcsapi_wifi_set_dscp_ac_map (36.4.0.2)
- * \li \ref qcsapi_wifi_get_congestion_index (36.4.0.2)
- * \li \ref qcsapi_wifi_set_tx_power (36.4.0.2)
- * \li \ref qcsapi_wifi_get_dscp_ac_map (36.4.0.2)
- * \li \ref qcsapi_registrar_get_default_pbc_bss (36.4.0.2)
- * \li \ref qcsapi_wifi_get_priority (36.4.0.2)
- * \li \ref qcsapi_regulatory_get_db_version (36.4.0.2)
- * \li \ref qcsapi_wifi_get_carrier_interference (36.4.0.2)
- * \li \ref qcsapi_wifi_set_priority (36.4.0.2)
- * \li \ref qcsapi_registrar_set_default_pbc_bss (36.4.0.2)
- * \li \ref qcsapi_wps_on_hidden_ssid_status (36.4.0.2)
- * \li \ref qcsapi_wps_get_runtime_state (36.4.0.2)
- * \li \ref qcsapi_regulatory_overwrite_country_code (36.4.0.4)
- * \li \ref qcsapi_wifi_get_spinor_jedecid (36.4.0.4)
- * \li \ref qcsapi_get_custom_value (36.4.0.5)
- * \li \ref qcsapi_wifi_get_michael_errcnt (36.4.0.9)
- * \li \ref qcsapi_wifi_get_bw_power (36.5.0.0)
- * \li \ref qcsapi_wifi_set_bw_power (36.5.0.0)
- * \li \ref qcsapi_regulatory_set_bw_power (36.5.0.0)
- *
- * \subsection v36_4TO_v36_5Removed Removed functions
- *
- * The following functions were removed between versions v36.4 and v36.5
- *
- * \li qcsapi_regulatory_get_supported_tx_power_levels (36.4.0.5)
- * \li qcsapi_regulatory_get_current_tx_power_level (36.4.0.5)
- */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4.0.1-v36.4.0.2 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4.0.1-v36.4.0.2
new file mode 100644
index 0000000..9245df3
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4.0.1-v36.4.0.2
@@ -0,0 +1,22 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_4_0_1_TO_v36_4_0_2 Version v36.4.0.1 to version v36.4.0.2 changes
+ *
+ * \subsection v36_4_0_1_TO_v36_4_0_2Added Added functions
+ *
+ * The following functions were added between versions v36.4.0.1 and v36.4.0.2
+ *
+ * \li \ref qcsapi_wifi_set_dscp_ac_map
+ * \li \ref qcsapi_wifi_get_congestion_index
+ * \li \ref qcsapi_wifi_set_tx_power
+ * \li \ref qcsapi_wifi_get_dscp_ac_map
+ * \li \ref qcsapi_registrar_get_default_pbc_bss
+ * \li \ref qcsapi_wifi_get_priority
+ * \li \ref qcsapi_regulatory_get_db_version
+ * \li \ref qcsapi_wifi_get_carrier_interference
+ * \li \ref qcsapi_wifi_set_priority
+ * \li \ref qcsapi_registrar_set_default_pbc_bss
+ * \li \ref qcsapi_wps_on_hidden_ssid_status
+ * \li \ref qcsapi_wps_get_runtime_state
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4.0.3-v36.4.0.4 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4.0.3-v36.4.0.4
new file mode 100644
index 0000000..849c111
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4.0.3-v36.4.0.4
@@ -0,0 +1,12 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_4_0_3_TO_v36_4_0_4 Version v36.4.0.3 to version v36.4.0.4 changes
+ *
+ * \subsection v36_4_0_3_TO_v36_4_0_4Added Added functions
+ *
+ * The following functions were added between versions v36.4.0.3 and v36.4.0.4
+ *
+ * \li \ref qcsapi_regulatory_overwrite_country_code
+ * \li \ref qcsapi_wifi_get_spinor_jedecid
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4.0.4-v36.4.0.5 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4.0.4-v36.4.0.5
new file mode 100644
index 0000000..10080bc
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4.0.4-v36.4.0.5
@@ -0,0 +1,18 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_4_0_4_TO_v36_4_0_5 Version v36.4.0.4 to version v36.4.0.5 changes
+ *
+ * \subsection v36_4_0_4_TO_v36_4_0_5Added Added functions
+ *
+ * The following functions were added between versions v36.4.0.4 and v36.4.0.5
+ *
+ * \li \ref qcsapi_get_custom_value
+ *
+ * \subsection v36_4_0_4_TO_v36_4_0_5Removed Removed functions
+ *
+ * The following functions were removed between versions v36.4.0.4 and v36.4.0.5
+ *
+ * \li qcsapi_regulatory_get_supported_tx_power_levels
+ * \li qcsapi_regulatory_get_current_tx_power_level
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4.0.8-v36.4.0.9 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4.0.8-v36.4.0.9
new file mode 100644
index 0000000..604130f
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4.0.8-v36.4.0.9
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_4_0_8_TO_v36_4_0_9 Version v36.4.0.8 to version v36.4.0.9 changes
+ *
+ * \subsection v36_4_0_8_TO_v36_4_0_9Added Added functions
+ *
+ * The following functions were added between versions v36.4.0.8 and v36.4.0.9
+ *
+ * \li \ref qcsapi_wifi_get_michael_errcnt
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4.0.9-v36.5.0.0 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4.0.9-v36.5.0.0
new file mode 100644
index 0000000..0a2cec3
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4.0.9-v36.5.0.0
@@ -0,0 +1,13 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_4_0_9_TO_v36_5_0_0 Version v36.4.0.9 to version v36.5.0.0 changes
+ *
+ * \subsection v36_4_0_9_TO_v36_5_0_0Added Added functions
+ *
+ * The following functions were added between versions v36.4.0.9 and v36.5.0.0
+ *
+ * \li \ref qcsapi_wifi_get_bw_power
+ * \li \ref qcsapi_wifi_set_bw_power
+ * \li \ref qcsapi_regulatory_set_bw_power
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5-v36.6 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5-v36.6
deleted file mode 100644
index 2e7ac14..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5-v36.6
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * \page ChangeLog
- *
- * \section v36_5TO_v36_6 Version v36.5 to version v36.6 changes
- *
- * \subsection v36_5TO_v36_6Added Added functions
- *
- * The following functions were added between versions v36.5 and v36.6
- *
- * \li \ref qcsapi_pm_get_mode (36.5.0.1)
- * \li \ref qcsapi_wifi_cancel_scan (36.5.0.2)
- * \li \ref qcsapi_wifi_show_vlan_config (36.5.0.2)
- * \li \ref qcsapi_wifi_set_nss_cap (36.5.0.6)
- * \li \ref qcsapi_wifi_get_ipff (36.5.0.6)
- * \li \ref qcsapi_wifi_get_tx_mcs_per_association (36.5.0.6)
- * \li \ref qcsapi_wifi_get_mlme_stats_per_association (36.5.0.6)
- * \li \ref qcsapi_wifi_get_rx_mcs_per_association (36.5.0.6)
- * \li \ref qcsapi_wifi_get_mlme_stats_per_mac (36.5.0.6)
- * \li \ref qcsapi_wifi_del_ipff (36.5.0.6)
- * \li \ref qcsapi_wifi_get_nss_cap (36.5.0.6)
- * \li \ref qcsapi_wifi_add_ipff (36.5.0.6)
- * \li \ref qcsapi_wifi_get_mlme_stats_macs_list (36.5.0.6)
- * \li \ref qcsapi_wps_enable_ap_pin (36.5.0.7)
- * \li \ref qcsapi_wifi_get_security_defer_mode (36.5.0.8)
- * \li \ref qcsapi_wifi_startprod (36.5.0.8)
- * \li \ref qcsapi_wifi_apply_security_config (36.5.0.8)
- * \li \ref qcsapi_store_ipaddr (36.5.0.8)
- * \li \ref qcsapi_wifi_set_security_defer_mode (36.5.0.8)
- * \li \ref qcsapi_wifi_set_rts_threshold (36.6.0.0)
- * \li \ref qcsapi_config_get_ssid_parameter (36.6.0.0)
- * \li \ref qcsapi_config_update_ssid_parameter (36.6.0.0)
- * \li \ref qcsapi_wifi_get_rts_threshold (36.6.0.0)
- */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.0-v36.5.0.1 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.0-v36.5.0.1
new file mode 100644
index 0000000..d813123
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.0-v36.5.0.1
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_5_0_0_TO_v36_5_0_1 Version v36.5.0.0 to version v36.5.0.1 changes
+ *
+ * \subsection v36_5_0_0_TO_v36_5_0_1Added Added functions
+ *
+ * The following functions were added between versions v36.5.0.0 and v36.5.0.1
+ *
+ * \li \ref qcsapi_pm_get_mode
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.1-v36.5.0.2 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.1-v36.5.0.2
new file mode 100644
index 0000000..4142d00
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.1-v36.5.0.2
@@ -0,0 +1,12 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_5_0_1_TO_v36_5_0_2 Version v36.5.0.1 to version v36.5.0.2 changes
+ *
+ * \subsection v36_5_0_1_TO_v36_5_0_2Added Added functions
+ *
+ * The following functions were added between versions v36.5.0.1 and v36.5.0.2
+ *
+ * \li \ref qcsapi_wifi_cancel_scan
+ * \li \ref qcsapi_wifi_show_vlan_config
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.5-v36.5.0.6 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.5-v36.5.0.6
new file mode 100644
index 0000000..35f7745
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.5-v36.5.0.6
@@ -0,0 +1,20 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_5_0_5_TO_v36_5_0_6 Version v36.5.0.5 to version v36.5.0.6 changes
+ *
+ * \subsection v36_5_0_5_TO_v36_5_0_6Added Added functions
+ *
+ * The following functions were added between versions v36.5.0.5 and v36.5.0.6
+ *
+ * \li \ref qcsapi_wifi_set_nss_cap
+ * \li \ref qcsapi_wifi_get_ipff
+ * \li \ref qcsapi_wifi_get_tx_mcs_per_association
+ * \li \ref qcsapi_wifi_get_mlme_stats_per_association
+ * \li \ref qcsapi_wifi_get_rx_mcs_per_association
+ * \li \ref qcsapi_wifi_get_mlme_stats_per_mac
+ * \li \ref qcsapi_wifi_del_ipff
+ * \li \ref qcsapi_wifi_get_nss_cap
+ * \li \ref qcsapi_wifi_add_ipff
+ * \li \ref qcsapi_wifi_get_mlme_stats_macs_list
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.6-v36.5.0.7 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.6-v36.5.0.7
new file mode 100644
index 0000000..a692e16
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.6-v36.5.0.7
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_5_0_6_TO_v36_5_0_7 Version v36.5.0.6 to version v36.5.0.7 changes
+ *
+ * \subsection v36_5_0_6_TO_v36_5_0_7Added Added functions
+ *
+ * The following functions were added between versions v36.5.0.6 and v36.5.0.7
+ *
+ * \li \ref qcsapi_wps_enable_ap_pin
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.7-v36.5.0.8 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.7-v36.5.0.8
new file mode 100644
index 0000000..73e2b26
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.7-v36.5.0.8
@@ -0,0 +1,15 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_5_0_7_TO_v36_5_0_8 Version v36.5.0.7 to version v36.5.0.8 changes
+ *
+ * \subsection v36_5_0_7_TO_v36_5_0_8Added Added functions
+ *
+ * The following functions were added between versions v36.5.0.7 and v36.5.0.8
+ *
+ * \li \ref qcsapi_wifi_get_security_defer_mode
+ * \li \ref qcsapi_wifi_startprod
+ * \li \ref qcsapi_wifi_apply_security_config
+ * \li \ref qcsapi_store_ipaddr
+ * \li \ref qcsapi_wifi_set_security_defer_mode
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.8-v36.6.0.0 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.8-v36.6.0.0
new file mode 100644
index 0000000..481d72d
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.8-v36.6.0.0
@@ -0,0 +1,14 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_5_0_8_TO_v36_6_0_0 Version v36.5.0.8 to version v36.6.0.0 changes
+ *
+ * \subsection v36_5_0_8_TO_v36_6_0_0Added Added functions
+ *
+ * The following functions were added between versions v36.5.0.8 and v36.6.0.0
+ *
+ * \li \ref qcsapi_wifi_set_rts_threshold
+ * \li \ref qcsapi_config_get_ssid_parameter
+ * \li \ref qcsapi_config_update_ssid_parameter
+ * \li \ref qcsapi_wifi_get_rts_threshold
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.6-v36.7 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.6-v36.7
deleted file mode 100644
index d8d2a72..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.6-v36.7
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \page ChangeLog
- *
- * \section v36_6TO_v36_7 Version v36.6 to version v36.7 changes
- *
- * \subsection v36_6TO_v36_7Added Added functions
- *
- * The following functions were added between versions v36.6 and v36.7
- *
- * \li \ref qcsapi_regulatory_apply_tx_power_cap (36.7.0.0)
- */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.6.0.1-v36.7.0.0 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.6.0.1-v36.7.0.0
new file mode 100644
index 0000000..ce94d29
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.6.0.1-v36.7.0.0
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_6_0_1_TO_v36_7_0_0 Version v36.6.0.1 to version v36.7.0.0 changes
+ *
+ * \subsection v36_6_0_1_TO_v36_7_0_0Added Added functions
+ *
+ * The following functions were added between versions v36.6.0.1 and v36.7.0.0
+ *
+ * \li \ref qcsapi_regulatory_apply_tx_power_cap
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7-v37.3 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7-v37.3
deleted file mode 100644
index 19bf20d..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7-v37.3
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * \page ChangeLog
- *
- * \section v36_7TO_v37_3 Version v36.7 to version v37.3 changes
- *
- * \subsection v36_7_TO_v37_3Added Added functions
- *
- * The following functions were added between versions v36.7 and v37.3
- *
- * \li \ref qcsapi_wifi_get_pmf (36.7.0.1)
- * \li \ref qcsapi_set_aspm_l1 (36.7.0.1)
- * \li \ref qcsapi_wifi_set_pmf (36.7.0.1)
- * \li \ref qcsapi_led_pwm_enable (36.7.0.2)
- * \li \ref qcsapi_led_brightness (36.7.0.2)
- * \li \ref qcsapi_wifi_set_eap_shared_key (36.7.0.3)
- * \li \ref qcsapi_SSID_get_pmf (36.7.0.3)
- * \li \ref qcsapi_wifi_set_phy_mode (36.7.0.3)
- * \li \ref qcsapi_wifi_get_eap_shared_key (36.7.0.3)
- * \li \ref qcsapi_regulatory_restore_regulatory_tx_power (36.7.0.3)
- * \li \ref qcsapi_wifi_set_eap_radius_port (36.7.0.3)
- * \li \ref qcsapi_get_board_parameter (36.7.0.3)
- * \li \ref qcsapi_SSID_set_pmf (36.7.0.3)
- * \li \ref qcsapi_wifi_set_eap_radius_ipaddr (36.7.0.3)
- * \li \ref qcsapi_wifi_get_eap_radius_port (36.7.0.3)
- * \li \ref qcsapi_wifi_get_phy_mode (36.7.0.3)
- * \li \ref qcsapi_wifi_set_own_ip_addr (36.7.0.3)
- * \li \ref qcsapi_wifi_get_eap_radius_ipaddr (36.7.0.3)
- * \li \ref qcsapi_wifi_set_bss_isolate (36.7.0.4)
- * \li \ref qcsapi_wowlan_set_magic_pattern (36.7.0.4)
- * \li \ref qcsapi_wifi_set_intra_bss_isolate (36.7.0.4)
- * \li \ref qcsapi_wowlan_set_L2_type (36.7.0.4)
- * \li \ref qcsapi_wifi_get_intra_bss_isolate (36.7.0.4)
- * \li \ref qcsapi_set_host_state (36.7.0.4)
- * \li \ref qcsapi_wowlan_set_udp_port (36.7.0.4)
- * \li \ref qcsapi_wifi_get_bss_isolate (36.7.0.4)
- * \li \ref qcsapi_wowlan_set_match_type (36.7.0.4)
- * \li \ref qcsapi_wifi_get_bgscan_status (36.7.0.5)
- * \li \ref qcsapi_wifi_get_extender_params (36.7.0.5)
- * \li \ref qcsapi_wifi_enable_bgscan (36.7.0.5)
- * \li \ref qcsapi_wifi_set_extender_params (36.7.0.5)
- * \li \ref qcsapi_wds_get_mode (36.7.0.5)
- * \li \ref qcsapi_wds_add_peer_encrypt (36.7.0.5)
- * \li \ref qcsapi_wds_set_mode (36.7.0.5)
- * \li \ref qcsapi_get_uboot_info (36.7.0.6)
- * \li \ref qcsapi_wifi_get_airfair (36.7.0.7)
- * \li \ref qcsapi_wifi_get_group_key_interval (36.7.0.7)
- * \li \ref qcsapi_wifi_set_airfair (36.7.0.7)
- * \li \ref qcsapi_wifi_set_group_key_interval (36.7.0.7)
- * \li \ref qcsapi_wifi_disable_dfs_channels (36.7.0.8)
- * \li \ref qcsapi_is_startprod_done (37.3.0.0)
- * \li \ref qcsapi_wifi_wowlan_get_magic_pattern (37.3.0.0)
- * \li \ref qcsapi_wifi_get_auth_enc_per_association (37.3.0.0)
- * \li \ref qcsapi_wifi_get_tx_amsdu (37.3.0.0)
- * \li \ref qcsapi_wifi_wowlan_get_host_state (37.3.0.0)
- * \li \ref qcsapi_wifi_set_scs_stats (37.3.0.0)
- * \li \ref qcsapi_wifi_wowlan_get_match_type (37.3.0.0)
- * \li \ref qcsapi_set_l1 (37.3.0.0)
- * \li \ref qcsapi_wifi_get_config_BSSID (37.3.0.0)
- * \li \ref qcsapi_wifi_set_bf_power (37.3.0.0)
- * \li \ref qcsapi_wifi_set_bb_param (37.3.0.0)
- * \li \ref qcsapi_wifi_get_bb_param (37.3.0.0)
- * \li \ref qcsapi_wifi_get_disassoc_reason (37.3.0.0)
- * \li \ref qcsapi_wifi_get_vendor_per_association (37.3.0.0)
- * \li \ref qcsapi_wifi_wowlan_param_get (37.3.0.0)
- * \li \ref qcsapi_wifi_disassociate_sta (37.3.0.0)
- * \li \ref qcsapi_wifi_wowlan_get_udp_port (37.3.0.0)
- * \li \ref qcsapi_wifi_wowlan_get_l2_type (37.3.0.0)
- * \li \ref qcsapi_wifi_get_bf_power (37.3.0.0)
- * \li \ref qcsapi_get_qpm_level (37.3.0.0)
- * \li \ref qcsapi_wifi_get_tput_caps (37.3.0.0)
- * \li \ref qcsapi_wifi_set_tx_amsdu (37.3.0.0)
- * \li \ref qcsapi_regulatory_set_bf_power (37.3.0.0)
- */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.0-v36.7.0.1 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.0-v36.7.0.1
new file mode 100644
index 0000000..b378e13
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.0-v36.7.0.1
@@ -0,0 +1,13 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_7_0_0_TO_v36_7_0_1 Version v36.7.0.0 to version v36.7.0.1 changes
+ *
+ * \subsection v36_7_0_0_TO_v36_7_0_1Added Added functions
+ *
+ * The following functions were added between versions v36.7.0.0 and v36.7.0.1
+ *
+ * \li \ref qcsapi_wifi_get_pmf
+ * \li \ref qcsapi_set_aspm_l1
+ * \li \ref qcsapi_wifi_set_pmf
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.1-v36.7.0.2 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.1-v36.7.0.2
new file mode 100644
index 0000000..986e467
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.1-v36.7.0.2
@@ -0,0 +1,12 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_7_0_1_TO_v36_7_0_2 Version v36.7.0.1 to version v36.7.0.2 changes
+ *
+ * \subsection v36_7_0_1_TO_v36_7_0_2Added Added functions
+ *
+ * The following functions were added between versions v36.7.0.1 and v36.7.0.2
+ *
+ * \li \ref qcsapi_led_pwm_enable
+ * \li \ref qcsapi_led_brightness
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.2-v36.7.0.3 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.2-v36.7.0.3
new file mode 100644
index 0000000..cf8cd33
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.2-v36.7.0.3
@@ -0,0 +1,23 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_7_0_2_TO_v36_7_0_3 Version v36.7.0.2 to version v36.7.0.3 changes
+ *
+ * \subsection v36_7_0_2_TO_v36_7_0_3Added Added functions
+ *
+ * The following functions were added between versions v36.7.0.2 and v36.7.0.3
+ *
+ * \li \ref qcsapi_wifi_set_eap_shared_key
+ * \li \ref qcsapi_SSID_get_pmf
+ * \li \ref qcsapi_wifi_set_phy_mode
+ * \li \ref qcsapi_wifi_get_eap_shared_key
+ * \li \ref qcsapi_regulatory_restore_regulatory_tx_power
+ * \li \ref qcsapi_wifi_set_eap_radius_port
+ * \li \ref qcsapi_get_board_parameter
+ * \li \ref qcsapi_SSID_set_pmf
+ * \li \ref qcsapi_wifi_set_eap_radius_ipaddr
+ * \li \ref qcsapi_wifi_get_eap_radius_port
+ * \li \ref qcsapi_wifi_get_phy_mode
+ * \li \ref qcsapi_wifi_set_own_ip_addr
+ * \li \ref qcsapi_wifi_get_eap_radius_ipaddr
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.3-v36.7.0.4 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.3-v36.7.0.4
new file mode 100644
index 0000000..50bd713
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.3-v36.7.0.4
@@ -0,0 +1,19 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_7_0_3_TO_v36_7_0_4 Version v36.7.0.3 to version v36.7.0.4 changes
+ *
+ * \subsection v36_7_0_3_TO_v36_7_0_4Added Added functions
+ *
+ * The following functions were added between versions v36.7.0.3 and v36.7.0.4
+ *
+ * \li \ref qcsapi_wifi_set_bss_isolate
+ * \li \ref qcsapi_wowlan_set_magic_pattern
+ * \li \ref qcsapi_wifi_set_intra_bss_isolate
+ * \li \ref qcsapi_wowlan_set_L2_type
+ * \li \ref qcsapi_wifi_get_intra_bss_isolate
+ * \li \ref qcsapi_set_host_state
+ * \li \ref qcsapi_wowlan_set_udp_port
+ * \li \ref qcsapi_wifi_get_bss_isolate
+ * \li \ref qcsapi_wowlan_set_match_type
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.4-v36.7.0.5 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.4-v36.7.0.5
new file mode 100644
index 0000000..134358c
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.4-v36.7.0.5
@@ -0,0 +1,17 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_7_0_4_TO_v36_7_0_5 Version v36.7.0.4 to version v36.7.0.5 changes
+ *
+ * \subsection v36_7_0_4_TO_v36_7_0_5Added Added functions
+ *
+ * The following functions were added between versions v36.7.0.4 and v36.7.0.5
+ *
+ * \li \ref qcsapi_wifi_get_bgscan_status
+ * \li \ref qcsapi_wifi_get_extender_params
+ * \li \ref qcsapi_wifi_enable_bgscan
+ * \li \ref qcsapi_wifi_set_extender_params
+ * \li \ref qcsapi_wds_get_mode
+ * \li \ref qcsapi_wds_add_peer_encrypt
+ * \li \ref qcsapi_wds_set_mode
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.5-v36.7.0.6 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.5-v36.7.0.6
new file mode 100644
index 0000000..fd768f7
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.5-v36.7.0.6
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_7_0_5_TO_v36_7_0_6 Version v36.7.0.5 to version v36.7.0.6 changes
+ *
+ * \subsection v36_7_0_5_TO_v36_7_0_6Added Added functions
+ *
+ * The following functions were added between versions v36.7.0.5 and v36.7.0.6
+ *
+ * \li \ref qcsapi_get_uboot_info
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.6-v36.7.0.7 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.6-v36.7.0.7
new file mode 100644
index 0000000..547e3d0
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.6-v36.7.0.7
@@ -0,0 +1,14 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_7_0_6_TO_v36_7_0_7 Version v36.7.0.6 to version v36.7.0.7 changes
+ *
+ * \subsection v36_7_0_6_TO_v36_7_0_7Added Added functions
+ *
+ * The following functions were added between versions v36.7.0.6 and v36.7.0.7
+ *
+ * \li \ref qcsapi_wifi_get_airfair
+ * \li \ref qcsapi_wifi_get_group_key_interval
+ * \li \ref qcsapi_wifi_set_airfair
+ * \li \ref qcsapi_wifi_set_group_key_interval
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.7-v36.7.0.8 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.7-v36.7.0.8
new file mode 100644
index 0000000..e43bcb4
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.7-v36.7.0.8
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_7_0_7_TO_v36_7_0_8 Version v36.7.0.7 to version v36.7.0.8 changes
+ *
+ * \subsection v36_7_0_7_TO_v36_7_0_8Added Added functions
+ *
+ * The following functions were added between versions v36.7.0.7 and v36.7.0.8
+ *
+ * \li \ref qcsapi_wifi_disable_dfs_channels
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.8-v37.3.0.0 b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.8-v37.3.0.0
new file mode 100644
index 0000000..edde96b
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.8-v37.3.0.0
@@ -0,0 +1,33 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v36_7_0_8_TO_v37_3_0_0 Version v36.7.0.8 to version v37.3.0.0 changes
+ *
+ * \subsection v36_7_0_8_TO_v37_3_0_0Added Added functions
+ *
+ * The following functions were added between versions v36.7.0.8 and v37.3.0.0
+ *
+ * \li \ref qcsapi_is_startprod_done
+ * \li \ref qcsapi_wifi_wowlan_get_magic_pattern
+ * \li \ref qcsapi_wifi_get_auth_enc_per_association
+ * \li \ref qcsapi_wifi_get_tx_amsdu
+ * \li \ref qcsapi_wifi_wowlan_get_host_state
+ * \li \ref qcsapi_wifi_set_scs_stats
+ * \li \ref qcsapi_wifi_wowlan_get_match_type
+ * \li \ref qcsapi_set_l1
+ * \li \ref qcsapi_wifi_get_config_BSSID
+ * \li \ref qcsapi_wifi_set_bf_power
+ * \li \ref qcsapi_wifi_set_bb_param
+ * \li \ref qcsapi_wifi_get_bb_param
+ * \li \ref qcsapi_wifi_get_disassoc_reason
+ * \li \ref qcsapi_wifi_get_vendor_per_association
+ * \li \ref qcsapi_wifi_wowlan_param_get
+ * \li \ref qcsapi_wifi_disassociate_sta
+ * \li \ref qcsapi_wifi_wowlan_get_udp_port
+ * \li \ref qcsapi_wifi_wowlan_get_l2_type
+ * \li \ref qcsapi_wifi_get_bf_power
+ * \li \ref qcsapi_get_qpm_level
+ * \li \ref qcsapi_wifi_get_tput_caps
+ * \li \ref qcsapi_wifi_set_tx_amsdu
+ * \li \ref qcsapi_regulatory_set_bf_power
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3-v37.4 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3-v37.4
deleted file mode 100644
index 0ab0b4c..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3-v37.4
+++ /dev/null
@@ -1,191 +0,0 @@
-/**
- * \page ChangeLog
- *
- * \section v37_3_TO_v37_4 Version v37.3 to version v37.4 changes
- *
- * \subsection v37_3_TO_v37_4Added Added functions
- *
- * The following functions were added between versions v37.3 and v37.4
- *
- * \li \ref qcsapi_interface_get_counter64 (37.3.0.1)
- * \li \ref qcsapi_wifi_get_scan_buf_max_size (37.3.0.2)
- * \li \ref qcsapi_calcmd_get_info (37.3.0.2)
- * \li \ref qcsapi_wifi_set_scan_buf_max_size (37.3.0.2)
- * \li \ref qcsapi_wifi_get_scan_table_max_len (37.3.0.2)
- * \li \ref qcsapi_wifi_set_scan_table_max_len (37.3.0.2)
- * \li \ref qcsapi_wifi_get_tdls_params (37.3.0.3)
- * \li \ref qcsapi_wifi_get_tdls_status (37.3.0.3)
- * \li \ref qcsapi_wifi_tdls_operate (37.3.0.3)
- * \li \ref qcsapi_wifi_get_connection_mode (37.3.0.3)
- * \li \ref qcsapi_wifi_set_tdls_params (37.3.0.3)
- * \li \ref qcsapi_wifi_reassociate (37.3.0.4)
- * \li \ref qcsapi_wifi_get_max_mimo (37.3.0.6)
- * \li \ref qcsapi_get_swfeat_list (37.3.0.6)
- * \li \ref qcsapi_security_get_nai_realms (37.3.0.8)
- * \li \ref qcsapi_wifi_get_proxy_arp (37.3.0.8)
- * \li \ref qcsapi_wifi_get_80211u_params (37.3.0.8)
- * \li \ref qcsapi_remove_hs20_param (37.3.0.8)
- * \li \ref qcsapi_wifi_set_interworking (37.3.0.8)
- * \li \ref qcsapi_wifi_get_power_selection (37.3.0.8)
- * \li \ref qcsapi_security_get_roaming_consortium (37.3.0.8)
- * \li \ref qcsapi_wifi_get_interworking (37.3.0.8)
- * \li \ref qcsapi_security_del_roaming_consortium (37.3.0.8)
- * \li \ref qcsapi_security_del_nai_realm (37.3.0.8)
- * \li \ref qcsapi_wifi_get_hs20_status (37.3.0.8)
- * \li \ref qcsapi_wifi_set_hs20_status (37.3.0.8)
- * \li \ref qcsapi_wifi_get_hs20_params (37.3.0.8)
- * \li \ref qcsapi_wifi_get_venue_info (37.3.0.8)
- * \li \ref qcsapi_security_add_roaming_consortium (37.3.0.8)
- * \li \ref qcsapi_wifi_set_proxy_arp (37.3.0.8)
- * \li \ref qcsapi_remove_11u_param (37.3.0.8)
- * \li \ref qcsapi_wifi_set_power_selection (37.3.0.8)
- * \li \ref qcsapi_wifi_set_hs20_params (37.3.0.8)
- * \li \ref qcsapi_wifi_set_80211u_params (37.3.0.8)
- * \li \ref qcsapi_wifi_set_venue_info (37.3.0.8)
- * \li \ref qcsapi_security_add_nai_realm (37.3.0.8)
- * \li \ref qcsapi_qtm_del_rule_index (37.3.0.9)
- * \li \ref qcsapi_qtm_get_strm (37.3.0.9)
- * \li \ref qcsapi_qtm_get_state (37.3.0.9)
- * \li \ref qcsapi_qtm_get_state_all (37.3.0.9)
- * \li \ref qcsapi_qtm_del_rule (37.3.0.9)
- * \li \ref qcsapi_qtm_set_state (37.3.0.9)
- * \li \ref qcsapi_qtm_get_config (37.3.0.9)
- * \li \ref qcsapi_qtm_add_rule (37.3.0.9)
- * \li \ref qcsapi_qtm_get_stats (37.3.0.9)
- * \li \ref qcsapi_qtm_get_config_all (37.3.0.9)
- * \li \ref qcsapi_qtm_get_rule (37.3.0.9)
- * \li \ref qcsapi_qtm_get_inactive_flags (37.3.0.9)
- * \li \ref qcsapi_qtm_set_config (37.3.0.9)
- * \li \ref qcsapi_regulatory_get_configured_tx_power_ext (37.3.0.10)
- * \li \ref qcsapi_wifi_get_scan_chk_inv (37.3.0.10)
- * \li \ref qcsapi_get_service_action_enum (37.3.0.10)
- * \li \ref qcsapi_wifi_set_scan_chk_inv (37.3.0.10)
- * \li \ref qcsapi_service_control (37.3.0.10)
- * \li \ref qcsapi_get_service_name_enum (37.3.0.10)
- * \li \ref qcsapi_wifi_set_tx_power_ext (37.3.0.10)
- * \li \ref qcsapi_wifi_get_tx_power_ext (37.3.0.10)
- * \li \ref qcsapi_wifi_enable_tdls_over_qhop (37.3.0.11)
- * \li \ref qcsapi_interface_get_ip4 (37.3.0.12)
- * \li \ref qcsapi_wifi_set_dfs_s_radio_dwell_time (37.3.0.12)
- * \li \ref qcsapi_wifi_set_dfs_s_radio_thrshld (37.3.0.12)
- * \li \ref qcsapi_wifi_get_dfs_s_radio_status (37.3.0.12)
- * \li \ref qcsapi_wifi_get_bss_assoc_limit (37.3.0.12)
- * \li \ref qcsapi_wifi_set_dfs_s_radio_report_only (37.3.0.12)
- * \li \ref qcsapi_wifi_set_dfs_s_radio_cac_time (37.3.0.12)
- * \li \ref qcsapi_wifi_get_dfs_s_radio_availability (37.3.0.12)
- * \li \ref qcsapi_wifi_set_bss_assoc_limit (37.3.0.12)
- * \li \ref qcsapi_interface_set_ip4 (37.3.0.12)
- * \li \ref qcsapi_wifi_start_dfs_s_radio (37.3.0.12)
- * \li \ref qcsapi_wifi_set_dfs_s_radio_duration (37.3.0.12)
- * \li \ref qcsapi_wifi_stop_dfs_s_radio (37.3.0.12)
- * \li \ref qcsapi_security_add_oper_friendly_name (37.3.0.13)
- * \li \ref qcsapi_security_del_venue_name (37.3.0.13)
- * \li \ref qcsapi_security_get_hs20_conn_capab (37.3.0.13)
- * \li \ref qcsapi_security_get_venue_name (37.3.0.13)
- * \li \ref qcsapi_security_add_venue_name (37.3.0.13)
- * \li \ref qcsapi_security_get_oper_friendly_name (37.3.0.13)
- * \li \ref qcsapi_security_del_oper_friendly_name (37.3.0.13)
- * \li \ref qcsapi_security_del_hs20_conn_capab (37.3.0.13)
- * \li \ref qcsapi_verify_numeric (37.3.0.13)
- * \li \ref qcsapi_security_add_hs20_conn_capab (37.3.0.13)
- * \li \ref qcsapi_wifi_del_radius_auth_server_cfg (37.3.0.15)
- * \li \ref qcsapi_wifi_get_radius_auth_server_cfg (37.3.0.15)
- * \li \ref qcsapi_wifi_add_radius_auth_server_cfg (37.3.0.15)
- * \li \ref qcsapi_get_random_seed (37.3.0.16)
- * \li \ref qcsapi_set_random_seed (37.3.0.16)
- * \li \ref qcsapi_wifi_get_link_quality_max (37.3.0.16)
- * \li \ref qcsapi_wifi_set_enable_mu (37.3.0.17)
- * \li \ref qcsapi_wifi_get_mu_use_eq (37.3.0.17)
- * \li \ref qcsapi_wifi_get_mu_use_precode (37.3.0.17)
- * \li \ref qcsapi_wifi_get_enable_mu (37.3.0.17)
- * \li \ref qcsapi_wifi_set_mu_use_eq (37.3.0.17)
- * \li \ref qcsapi_wfa_cert_mode_enable (37.3.0.17)
- * \li \ref qcsapi_wifi_get_mu_groups (37.3.0.17)
- * \li \ref qcsapi_wifi_set_mu_use_precode (37.3.0.17)
- * \li \ref qcsapi_wifi_set_l2_ext_filter (37.3.0.19)
- * \li \ref qcsapi_wifi_get_l2_ext_filter (37.3.0.19)
- * \li \ref qcsapi_set_emac_switch (37.3.0.20)
- * \li \ref qcsapi_send_file (37.3.0.20)
- * \li \ref qcsapi_get_emac_switch (37.3.0.20)
- * \li \ref qcsapi_eth_dscp_map (37.3.0.20)
- * \li \ref qcsapi_wifi_set_dfs_s_radio_wea_cac_time (37.4.0.0)
- * \li \ref qcsapi_str_to_uint32 (37.4.0.0)
- * \li \ref qcsapi_wifi_set_dfs_s_radio_wea_duration (37.4.0.0)
- *
- * \subsection v37_3_TO_v37_4Removed Removed functions
- *
- * The following functions were removed between versions v37.3 and v37.4
- *
- * \li qcsapi_vsp_add_rule (37.3.0.9)
- * \li qcsapi_vsp_get_rule (37.3.0.9)
- * \li qcsapi_vsp_get_strm (37.3.0.9)
- * \li qcsapi_vsp_set_config (37.3.0.9)
- * \li qcsapi_vsp_get_inactive_flags (37.3.0.9)
- * \li qcsapi_vsp_del_rule (37.3.0.9)
- * \li qcsapi_vsp_get_config (37.3.0.9)
- * \li qcsapi_vsp_get_stats (37.3.0.9)
- * \li qcsapi_vsp_get_state_all (37.3.0.9)
- * \li qcsapi_vsp_get_state (37.3.0.9)
- * \li qcsapi_vsp_del_rule_index (37.3.0.9)
- * \li qcsapi_vsp_set_state (37.3.0.9)
- * \li qcsapi_vsp_get_config_all (37.3.0.9)
- * \li \ref qcsapi_wifi_set_venue_info (37.3.0.13)
- * \li \ref qcsapi_wifi_get_venue_info (37.3.0.13)
- * \li qcsapi_wifi_set_eap_shared_key (37.3.0.15)
- * \li qcsapi_wifi_get_eap_shared_key (37.3.0.15)
- * \li qcsapi_wifi_set_eap_radius_port (37.3.0.15)
- * \li qcsapi_wifi_set_eap_radius_ipaddr (37.3.0.15)
- * \li qcsapi_wifi_get_eap_radius_port (37.3.0.15)
- * \li qcsapi_wifi_get_eap_radius_ipaddr (37.3.0.15)
- *
- * \subsection v37_3_0_1_TO_v37_3_0_2Proto Function prototype changes
- * The following function prototypes were modified between versions v37.3 and v37.4
- *  - \ref qcsapi_wifi_get_auth_state (37.3.0.2)
- *    - Old prototype: int qcsapi_wifi_get_auth_state(const char *ifname, char *mac_addr, int *auth_state);
- *    - New prototype: int qcsapi_wifi_get_auth_state(const char *ifname, const char *mac_addr, int *auth_state);
- *  - \ref qcsapi_wifi_get_wpa_status (37.3.0.2)
- *    - Old prototype: int qcsapi_wifi_get_wpa_status(const char *ifname, char *wpa_status, char *mac_addr, const qcsapi_unsigned_int max_len);
- *    - New prototype: int qcsapi_wifi_get_wpa_status(const char *ifname, char *wpa_status, const char *mac_addr, const qcsapi_unsigned_int max_len);
- *  - \ref qcsapi_wifi_tdls_operate (37.3.0.11)
- *    - Old prototype: int qcsapi_wifi_tdls_operate(const char *ifname, qcsapi_tdls_oper operate, const char *mac_addr_str);
- *    - New prototype: int qcsapi_wifi_tdls_operate(const char *ifname, qcsapi_tdls_oper operate, const char *mac_addr_str, int cs_interval);
- *  - \ref qcsapi_security_add_roaming_consortium (37.3.0.13)
- *    - Old prototype: int qcsapi_security_add_roaming_consortium(const char *ifname, const string_32 p_value);
- *    - New prototype: int qcsapi_security_add_roaming_consortium(const char *ifname, const char *p_value);
- *  - \ref qcsapi_security_get_nai_realms (37.3.0.13)
- *    - Old prototype: int qcsapi_security_get_nai_realms(const char *ifname, string_1024 p_value);
- *    - New prototype: int qcsapi_security_get_nai_realms(const char *ifname, string_4096 p_value);
- *  - \ref qcsapi_wifi_set_80211u_params (37.3.0.13)
- *    - Old prototype: int qcsapi_wifi_set_80211u_params(const char *ifname, const string_32 param, const string_32 p_value);
- *    - New prototype: int qcsapi_wifi_set_80211u_params(const char *ifname, const string_32 param, const string_256 value1, const string_32 value2);
- *  - \ref qcsapi_security_del_nai_realm (37.3.0.13)
- *    - Old prototype: int qcsapi_security_del_nai_realm(const char *ifname, const string_32 p_value);
- *    - New prototype: int qcsapi_security_del_nai_realm(const char *ifname, const char *nai_realm);
- *  - \ref qcsapi_get_temperature_info (37.3.0.13)
- *    - Old prototype: int qcsapi_get_temperature_info(int *temp_external, int *temp_internal);
- *    - New prototype: int qcsapi_get_temperature_info(int *temp_external, int *temp_internal, int *temp_bb_internal);
- *  - \ref qcsapi_security_del_roaming_consortium (37.3.0.13)
- *    - Old prototype: int qcsapi_security_del_roaming_consortium(const char *ifname, const string_32 p_value);
- *    - New prototype: int qcsapi_security_del_roaming_consortium(const char *ifname, const char *p_value);
- *  - \ref qcsapi_wifi_get_80211u_params (37.3.0.13)
- *    - Old prototype: int qcsapi_wifi_get_80211u_params(const char *ifname, const string_32 param, string_32 p_value);
- *    - New prototype: int qcsapi_wifi_get_80211u_params(const char *ifname, const string_32 param, string_256 p_value);
- *  - \ref qcsapi_wifi_set_phy_mode (37.3.0.17)
- *    - Old prototype: int qcsapi_wifi_set_phy_mode(const char *ifname, char *new_phy_mode);
- *    - New prototype: int qcsapi_wifi_set_phy_mode(const char *ifname, const char *new_phy_mode);
- *  - \ref qcsapi_wifi_rfstatus (37.3.0.18)
- *    - Old prototype: int qcsapi_wifi_rfstatus(const char *ifname, qcsapi_unsigned_int *rfstatus);
- *    - New prototype: int qcsapi_wifi_rfstatus(qcsapi_unsigned_int *rfstatus);
- *  - \ref qcsapi_wifi_rfenable (37.3.0.18)
- *    - Old prototype: int qcsapi_wifi_rfenable(const char *ifname, const qcsapi_unsigned_int onoff);
- *    - New prototype: int qcsapi_wifi_rfenable(const qcsapi_unsigned_int onoff);
- *  - \ref qcsapi_get_service_action_enum (37.3.0.19)
- *    - Old prototype: int qcsapi_get_service_action_enum(string_32 lookup_action, qcsapi_service_action *serv_action);
- *    - New prototype: int qcsapi_get_service_action_enum(const char *lookup_action, qcsapi_service_action *serv_action);
- *  - \ref qcsapi_get_service_name_enum (37.3.0.19)
- *    - Old prototype: int qcsapi_get_service_name_enum(string_32 lookup_service, qcsapi_service_name *serv_name);
- *    - New prototype: int qcsapi_get_service_name_enum(const char *lookup_service, qcsapi_service_name *serv_name);
- *  - \ref qcsapi_wifi_set_hs20_params (37.3.0.21)
- *    - Old prototype: int qcsapi_wifi_set_hs20_params(const char *ifname, const string_32 param, const string_64 p_value);
- *    - New prototype: int qcsapi_wifi_set_hs20_params(const char *ifname, const string_32 param, const string_64 value1, const string_64 value2, const string_64 value3, const string_64 value4, const string_64 value5, const string_64 value6);
- */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.0-v37.3.0.1 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.0-v37.3.0.1
new file mode 100644
index 0000000..9662fb4
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.0-v37.3.0.1
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_3_0_0_TO_v37_3_0_1 Version v37.3.0.0 to version v37.3.0.1 changes
+ *
+ * \subsection v37_3_0_0_TO_v37_3_0_1Added Added functions
+ *
+ * The following functions were added between versions v37.3.0.0 and v37.3.0.1
+ *
+ * \li \ref qcsapi_interface_get_counter64
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.1-v37.3.0.2 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.1-v37.3.0.2
new file mode 100644
index 0000000..7f40d09
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.1-v37.3.0.2
@@ -0,0 +1,25 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_3_0_1_TO_v37_3_0_2 Version v37.3.0.1 to version v37.3.0.2 changes
+ *
+ * \subsection v37_3_0_1_TO_v37_3_0_2Added Added functions
+ *
+ * The following functions were added between versions v37.3.0.1 and v37.3.0.2
+ * \li \ref qcsapi_wifi_get_scan_buf_max_size
+ * \li \ref qcsapi_calcmd_get_info
+ * \li \ref qcsapi_wifi_set_scan_buf_max_size
+ * \li \ref qcsapi_wifi_get_scan_table_max_len
+ * \li \ref qcsapi_wifi_set_scan_table_max_len
+ *
+ * \subsection v37_3_0_1_TO_v37_3_0_2Proto Function prototype changes
+ *
+ * The following function prototypes were modified between versions v37.3.0.1 and v37.3.0.2
+ *  - \ref qcsapi_wifi_get_auth_state
+ *    - Old prototype: int qcsapi_wifi_get_auth_state(const char *ifname, char *mac_addr, int *auth_state);
+ *    - New prototype: int qcsapi_wifi_get_auth_state(const char *ifname, const char *mac_addr, int *auth_state);
+ *  - \ref qcsapi_wifi_get_wpa_status
+ *    - Old prototype: int qcsapi_wifi_get_wpa_status(const char *ifname, char *wpa_status, char *mac_addr, const qcsapi_unsigned_int max_len);
+ *    - New prototype: int qcsapi_wifi_get_wpa_status(const char *ifname, char *wpa_status, const char *mac_addr, const qcsapi_unsigned_int max_len);
+ */
+
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.10-v37.3.0.11 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.10-v37.3.0.11
new file mode 100644
index 0000000..576eb38
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.10-v37.3.0.11
@@ -0,0 +1,18 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_3_0_10_TO_v37_3_0_11 Version v37.3.0.10 to version v37.3.0.11 changes
+ *
+ * \subsection v37_3_0_10_TO_v37_3_0_11Added Added functions
+ *
+ * The following functions were added between versions v37.3.0.10 and v37.3.0.11
+ * \li \ref qcsapi_wifi_enable_tdls_over_qhop
+ *
+ * \subsection v37_3_0_10_TO_v37_3_0_11Proto Function prototype changes
+ *
+ * The following function prototypes were modified between versions v37.3.0.10 and v37.3.0.11
+ *  - \ref qcsapi_wifi_tdls_operate
+ *    - Old prototype: int qcsapi_wifi_tdls_operate(const char *ifname, qcsapi_tdls_oper operate, const char *mac_addr_str);
+ *    - New prototype: int qcsapi_wifi_tdls_operate(const char *ifname, qcsapi_tdls_oper operate, const char *mac_addr_str, int cs_interval);
+ */
+
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.11-v37.3.0.12 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.11-v37.3.0.12
new file mode 100644
index 0000000..a8a056e
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.11-v37.3.0.12
@@ -0,0 +1,23 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_3_0_11_TO_v37_3_0_12 Version v37.3.0.11 to version v37.3.0.12 changes
+ *
+ * \subsection v37_3_0_11_TO_v37_3_0_12Added Added functions
+ *
+ * The following functions were added between versions v37.3.0.11 and v37.3.0.12
+ *
+ * \li \ref qcsapi_interface_get_ip4
+ * \li \ref qcsapi_wifi_set_dfs_s_radio_dwell_time
+ * \li \ref qcsapi_wifi_set_dfs_s_radio_thrshld
+ * \li \ref qcsapi_wifi_get_dfs_s_radio_status
+ * \li \ref qcsapi_wifi_get_bss_assoc_limit
+ * \li \ref qcsapi_wifi_set_dfs_s_radio_report_only
+ * \li \ref qcsapi_wifi_set_dfs_s_radio_cac_time
+ * \li \ref qcsapi_wifi_get_dfs_s_radio_availability
+ * \li \ref qcsapi_wifi_set_bss_assoc_limit
+ * \li \ref qcsapi_interface_set_ip4
+ * \li \ref qcsapi_wifi_start_dfs_s_radio
+ * \li \ref qcsapi_wifi_set_dfs_s_radio_duration
+ * \li \ref qcsapi_wifi_stop_dfs_s_radio
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.12-v37.3.0.13 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.12-v37.3.0.13
new file mode 100644
index 0000000..6939006
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.12-v37.3.0.13
@@ -0,0 +1,51 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_3_0_12_TO_v37_3_0_13 Version v37.3.0.12 to version v37.3.0.13 changes
+ *
+ * \subsection v37_3_0_12_TO_v37_3_0_13Added Added functions
+ *
+ * The following functions were added between versions v37.3.0.12 and v37.3.0.13
+ * \li \ref qcsapi_security_add_oper_friendly_name
+ * \li \ref qcsapi_security_del_venue_name
+ * \li \ref qcsapi_security_get_hs20_conn_capab
+ * \li \ref qcsapi_security_get_venue_name
+ * \li \ref qcsapi_security_add_venue_name
+ * \li \ref qcsapi_security_get_oper_friendly_name
+ * \li \ref qcsapi_security_del_oper_friendly_name
+ * \li \ref qcsapi_security_del_hs20_conn_capab
+ * \li \ref qcsapi_verify_numeric
+ * \li \ref qcsapi_security_add_hs20_conn_capab
+ *
+ * \subsection v37_3_0_12_TO_v37_3_0_13Removed Removed functions
+ *
+ * The following functions were removed between versions v37.3.0.12 and v37.3.0.13
+ * \li \ref qcsapi_wifi_set_venue_info
+ * \li \ref qcsapi_wifi_get_venue_info
+ *
+ * \subsection v37_3_0_12_TO_v37_3_0_13Proto Function prototype changes
+ *
+ * The following function prototypes were modified between versions v37.3.0.12 and v37.3.0.13
+ *  - \ref qcsapi_security_add_roaming_consortium
+ *    - Old prototype: int qcsapi_security_add_roaming_consortium(const char *ifname, const string_32 p_value);
+ *    - New prototype: int qcsapi_security_add_roaming_consortium(const char *ifname, const char *p_value);
+ *  - \ref qcsapi_security_get_nai_realms
+ *    - Old prototype: int qcsapi_security_get_nai_realms(const char *ifname, string_1024 p_value);
+ *    - New prototype: int qcsapi_security_get_nai_realms(const char *ifname, string_4096 p_value);
+ *  - \ref qcsapi_wifi_set_80211u_params
+ *    - Old prototype: int qcsapi_wifi_set_80211u_params(const char *ifname, const string_32 param, const string_32 p_value);
+ *    - New prototype: int qcsapi_wifi_set_80211u_params(const char *ifname, const string_32 param, const string_256 value1, const string_32 value2);
+ *  - \ref qcsapi_security_del_nai_realm
+ *    - Old prototype: int qcsapi_security_del_nai_realm(const char *ifname, const string_32 p_value);
+ *    - New prototype: int qcsapi_security_del_nai_realm(const char *ifname, const char *nai_realm);
+ *  - \ref qcsapi_get_temperature_info
+ *    - Old prototype: int qcsapi_get_temperature_info(int *temp_external, int *temp_internal);
+ *    - New prototype: int qcsapi_get_temperature_info(int *temp_external, int *temp_internal, int *temp_bb_internal);
+ *  - \ref qcsapi_security_del_roaming_consortium
+ *    - Old prototype: int qcsapi_security_del_roaming_consortium(const char *ifname, const string_32 p_value);
+ *    - New prototype: int qcsapi_security_del_roaming_consortium(const char *ifname, const char *p_value);
+ *  - \ref qcsapi_wifi_get_80211u_params
+ *    - Old prototype: int qcsapi_wifi_get_80211u_params(const char *ifname, const string_32 param, string_32 p_value);
+ *    - New prototype: int qcsapi_wifi_get_80211u_params(const char *ifname, const string_32 param, string_256 p_value);
+ */
+
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.14-v37.3.0.15 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.14-v37.3.0.15
new file mode 100644
index 0000000..9c878f9
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.14-v37.3.0.15
@@ -0,0 +1,24 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_3_0_14_TO_v37_3_0_15 Version v37.3.0.14 to version v37.3.0.15 changes
+ *
+ * \subsection v37_3_0_14_TO_v37_3_0_15Added Added functions
+ *
+ * The following functions were added between versions v37.3.0.14 and v37.3.0.15
+ *
+ * \li \ref qcsapi_wifi_del_radius_auth_server_cfg
+ * \li \ref qcsapi_wifi_get_radius_auth_server_cfg
+ * \li \ref qcsapi_wifi_add_radius_auth_server_cfg
+ *
+ * \subsection v37_3_0_14_TO_v37_3_0_15Removed Removed functions
+ *
+ * The following functions were removed between versions v37.3.0.14 and v37.3.0.15
+ *
+ * \li qcsapi_wifi_set_eap_shared_key
+ * \li qcsapi_wifi_get_eap_shared_key
+ * \li qcsapi_wifi_set_eap_radius_port
+ * \li qcsapi_wifi_set_eap_radius_ipaddr
+ * \li qcsapi_wifi_get_eap_radius_port
+ * \li qcsapi_wifi_get_eap_radius_ipaddr
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.15-v37.3.0.16 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.15-v37.3.0.16
new file mode 100644
index 0000000..61b2526
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.15-v37.3.0.16
@@ -0,0 +1,13 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_3_0_15_TO_v37_3_0_16 Version v37.3.0.15 to version v37.3.0.16 changes
+ *
+ * \subsection v37_3_0_15_TO_v37_3_0_16Added Added functions
+ *
+ * The following functions were added between versions v37.3.0.15 and v37.3.0.16
+ *
+ * \li \ref qcsapi_get_random_seed
+ * \li \ref qcsapi_set_random_seed
+ * \li \ref qcsapi_wifi_get_link_quality_max
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.16-v37.3.0.17 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.16-v37.3.0.17
new file mode 100644
index 0000000..0dc105e
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.16-v37.3.0.17
@@ -0,0 +1,25 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_3_0_16_TO_v37_3_0_17 Version v37.3.0.16 to version v37.3.0.17 changes
+ *
+ * \subsection v37_3_0_16_TO_v37_3_0_17Added Added functions
+ *
+ * The following functions were added between versions v37.3.0.16 and v37.3.0.17
+ * \li \ref qcsapi_wifi_set_enable_mu
+ * \li \ref qcsapi_wifi_get_mu_use_eq
+ * \li \ref qcsapi_wifi_get_mu_use_precode
+ * \li \ref qcsapi_wifi_get_enable_mu
+ * \li \ref qcsapi_wifi_set_mu_use_eq
+ * \li \ref qcsapi_wfa_cert_mode_enable
+ * \li \ref qcsapi_wifi_get_mu_groups
+ * \li \ref qcsapi_wifi_set_mu_use_precode
+ *
+ * \subsection v37_3_0_16_TO_v37_3_0_17Proto Function prototype changes
+ *
+ * The following function prototypes were modified between versions v37.3.0.16 and v37.3.0.17
+ *  - \ref qcsapi_wifi_set_phy_mode
+ *    - Old prototype: int qcsapi_wifi_set_phy_mode(const char *ifname, char *new_phy_mode);
+ *    - New prototype: int qcsapi_wifi_set_phy_mode(const char *ifname, const char *new_phy_mode);
+ */
+
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.17-v37.3.0.18 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.17-v37.3.0.18
new file mode 100644
index 0000000..db4753d
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.17-v37.3.0.18
@@ -0,0 +1,16 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_3_0_17_TO_v37_3_0_18 Version v37.3.0.17 to version v37.3.0.18 changes
+ *
+ * \subsection v37_3_0_17_TO_v37_3_0_18Proto Function prototype changes
+ *
+ * The following function prototypes were modified between versions v37.3.0.17 and v37.3.0.18
+ *  - \ref qcsapi_wifi_rfstatus
+ *    - Old prototype: int qcsapi_wifi_rfstatus(const char *ifname, qcsapi_unsigned_int *rfstatus);
+ *    - New prototype: int qcsapi_wifi_rfstatus(qcsapi_unsigned_int *rfstatus);
+ *  - \ref qcsapi_wifi_rfenable
+ *    - Old prototype: int qcsapi_wifi_rfenable(const char *ifname, const qcsapi_unsigned_int onoff);
+ *    - New prototype: int qcsapi_wifi_rfenable(const qcsapi_unsigned_int onoff);
+ */
+
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.18-v37.3.0.19 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.18-v37.3.0.19
new file mode 100644
index 0000000..7a6b3c0
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.18-v37.3.0.19
@@ -0,0 +1,22 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_3_0_18_TO_v37_3_0_19 Version v37.3.0.18 to version v37.3.0.19 changes
+ *
+ * \subsection v37_3_0_18_TO_v37_3_0_19Added Added functions
+ *
+ * The following functions were added between versions v37.3.0.18 and v37.3.0.19
+ * \li \ref qcsapi_wifi_set_l2_ext_filter
+ * \li \ref qcsapi_wifi_get_l2_ext_filter
+ *
+ * \subsection v37_3_0_18_TO_v37_3_0_19Proto Function prototype changes
+ *
+ * The following function prototypes were modified between versions v37.3.0.18 and v37.3.0.19
+ *  - \ref qcsapi_get_service_action_enum
+ *    - Old prototype: int qcsapi_get_service_action_enum(string_32 lookup_action, qcsapi_service_action *serv_action);
+ *    - New prototype: int qcsapi_get_service_action_enum(const char *lookup_action, qcsapi_service_action *serv_action);
+ *  - \ref qcsapi_get_service_name_enum
+ *    - Old prototype: int qcsapi_get_service_name_enum(string_32 lookup_service, qcsapi_service_name *serv_name);
+ *    - New prototype: int qcsapi_get_service_name_enum(const char *lookup_service, qcsapi_service_name *serv_name);
+ */
+
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.19-v37.3.0.20 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.19-v37.3.0.20
new file mode 100644
index 0000000..3b499c2
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.19-v37.3.0.20
@@ -0,0 +1,14 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_3_0_19_TO_v37_3_0_20 Version v37.3.0.19 to version v37.3.0.20 changes
+ *
+ * \subsection v37_3_0_19_TO_v37_3_0_20Added Added functions
+ *
+ * The following functions were added between versions v37.3.0.19 and v37.3.0.20
+ *
+ * \li \ref qcsapi_set_emac_switch
+ * \li \ref qcsapi_send_file
+ * \li \ref qcsapi_get_emac_switch
+ * \li \ref qcsapi_eth_dscp_map
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.2-v37.3.0.3 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.2-v37.3.0.3
new file mode 100644
index 0000000..333ca49
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.2-v37.3.0.3
@@ -0,0 +1,15 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_3_0_2_TO_v37_3_0_3 Version v37.3.0.2 to version v37.3.0.3 changes
+ *
+ * \subsection v37_3_0_2_TO_v37_3_0_3Added Added functions
+ *
+ * The following functions were added between versions v37.3.0.2 and v37.3.0.3
+ *
+ * \li \ref qcsapi_wifi_get_tdls_params
+ * \li \ref qcsapi_wifi_get_tdls_status
+ * \li \ref qcsapi_wifi_tdls_operate
+ * \li \ref qcsapi_wifi_get_connection_mode
+ * \li \ref qcsapi_wifi_set_tdls_params
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.20-v37.3.0.21 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.20-v37.3.0.21
new file mode 100644
index 0000000..7876698
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.20-v37.3.0.21
@@ -0,0 +1,13 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_3_0_20_TO_v37_3_0_21 Version v37.3.0.20 to version v37.3.0.21 changes
+ *
+ * \subsection v37_3_0_20_TO_v37_3_0_21Proto Function prototype changes
+ *
+ * The following function prototypes were modified between versions v37.3.0.20 and v37.3.0.21
+ *  - \ref qcsapi_wifi_set_hs20_params
+ *    - Old prototype: int qcsapi_wifi_set_hs20_params(const char *ifname, const string_32 param, const string_64 p_value);
+ *    - New prototype: int qcsapi_wifi_set_hs20_params(const char *ifname, const string_32 param, const string_64 value1, const string_64 value2, const string_64 value3, const string_64 value4, const string_64 value5, const string_64 value6);
+ */
+
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.21-v37.4.0.0 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.21-v37.4.0.0
new file mode 100644
index 0000000..9972a0f
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.21-v37.4.0.0
@@ -0,0 +1,13 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_3_0_21_TO_v37_4_0_0 Version v37.3.0.21 to version v37.4.0.0 changes
+ *
+ * \subsection v37_3_0_21_TO_v37_4_0_0Added Added functions
+ *
+ * The following functions were added between versions v37.3.0.21 and v37.4.0.0
+ *
+ * \li \ref qcsapi_wifi_set_dfs_s_radio_wea_cac_time
+ * \li \ref qcsapi_str_to_uint32
+ * \li \ref qcsapi_wifi_set_dfs_s_radio_wea_duration
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.3-v37.3.0.4 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.3-v37.3.0.4
new file mode 100644
index 0000000..070d273
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.3-v37.3.0.4
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_3_0_3_TO_v37_3_0_4 Version v37.3.0.3 to version v37.3.0.4 changes
+ *
+ * \subsection v37_3_0_3_TO_v37_3_0_4Added Added functions
+ *
+ * The following functions were added between versions v37.3.0.3 and v37.3.0.4
+ *
+ * \li \ref qcsapi_wifi_reassociate
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.5-v37.3.0.6 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.5-v37.3.0.6
new file mode 100644
index 0000000..af0df88
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.5-v37.3.0.6
@@ -0,0 +1,12 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_3_0_5_TO_v37_3_0_6 Version v37.3.0.5 to version v37.3.0.6 changes
+ *
+ * \subsection v37_3_0_5_TO_v37_3_0_6Added Added functions
+ *
+ * The following functions were added between versions v37.3.0.5 and v37.3.0.6
+ *
+ * \li \ref qcsapi_wifi_get_max_mimo
+ * \li \ref qcsapi_get_swfeat_list
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.7-v37.3.0.8 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.7-v37.3.0.8
new file mode 100644
index 0000000..e412184
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.7-v37.3.0.8
@@ -0,0 +1,32 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_3_0_7_TO_v37_3_0_8 Version v37.3.0.7 to version v37.3.0.8 changes
+ *
+ * \subsection v37_3_0_7_TO_v37_3_0_8Added Added functions
+ *
+ * The following functions were added between versions v37.3.0.7 and v37.3.0.8
+ *
+ * \li \ref qcsapi_security_get_nai_realms
+ * \li \ref qcsapi_wifi_get_proxy_arp
+ * \li \ref qcsapi_wifi_get_80211u_params
+ * \li \ref qcsapi_remove_hs20_param
+ * \li \ref qcsapi_wifi_set_interworking
+ * \li \ref qcsapi_wifi_get_power_selection
+ * \li \ref qcsapi_security_get_roaming_consortium
+ * \li \ref qcsapi_wifi_get_interworking
+ * \li \ref qcsapi_security_del_roaming_consortium
+ * \li \ref qcsapi_security_del_nai_realm
+ * \li \ref qcsapi_wifi_get_hs20_status
+ * \li \ref qcsapi_wifi_set_hs20_status
+ * \li \ref qcsapi_wifi_get_hs20_params
+ * \li \ref qcsapi_wifi_get_venue_info
+ * \li \ref qcsapi_security_add_roaming_consortium
+ * \li \ref qcsapi_wifi_set_proxy_arp
+ * \li \ref qcsapi_remove_11u_param
+ * \li \ref qcsapi_wifi_set_power_selection
+ * \li \ref qcsapi_wifi_set_hs20_params
+ * \li \ref qcsapi_wifi_set_80211u_params
+ * \li \ref qcsapi_wifi_set_venue_info
+ * \li \ref qcsapi_security_add_nai_realm
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.8-v37.3.0.9 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.8-v37.3.0.9
new file mode 100644
index 0000000..336e97a
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.8-v37.3.0.9
@@ -0,0 +1,41 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_3_0_8_TO_v37_3_0_9 Version v37.3.0.8 to version v37.3.0.9 changes
+ *
+ * \subsection v37_3_0_8_TO_v37_3_0_9Added Added functions
+ *
+ * The following functions were added between versions v37.3.0.8 and v37.3.0.9
+ *
+ * \li \ref qcsapi_qtm_del_rule_index
+ * \li \ref qcsapi_qtm_get_strm
+ * \li \ref qcsapi_qtm_get_state
+ * \li \ref qcsapi_qtm_get_state_all
+ * \li \ref qcsapi_qtm_del_rule
+ * \li \ref qcsapi_qtm_set_state
+ * \li \ref qcsapi_qtm_get_config
+ * \li \ref qcsapi_qtm_add_rule
+ * \li \ref qcsapi_qtm_get_stats
+ * \li \ref qcsapi_qtm_get_config_all
+ * \li \ref qcsapi_qtm_get_rule
+ * \li \ref qcsapi_qtm_get_inactive_flags
+ * \li \ref qcsapi_qtm_set_config
+ *
+ * \subsection v37_3_0_8_TO_v37_3_0_9Removed Removed functions
+ *
+ * The following functions were removed between versions v37.3.0.8 and v37.3.0.9
+ *
+ * \li qcsapi_vsp_add_rule
+ * \li qcsapi_vsp_get_rule
+ * \li qcsapi_vsp_get_strm
+ * \li qcsapi_vsp_set_config
+ * \li qcsapi_vsp_get_inactive_flags
+ * \li qcsapi_vsp_del_rule
+ * \li qcsapi_vsp_get_config
+ * \li qcsapi_vsp_get_stats
+ * \li qcsapi_vsp_get_state_all
+ * \li qcsapi_vsp_get_state
+ * \li qcsapi_vsp_del_rule_index
+ * \li qcsapi_vsp_set_state
+ * \li qcsapi_vsp_get_config_all
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.9-v37.3.0.10 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.9-v37.3.0.10
new file mode 100644
index 0000000..c21c8b1
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.9-v37.3.0.10
@@ -0,0 +1,18 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_3_0_9_TO_v37_3_0_10 Version v37.3.0.9 to version v37.3.0.10 changes
+ *
+ * \subsection v37_3_0_9_TO_v37_3_0_10Added Added functions
+ *
+ * The following functions were added between versions v37.3.0.9 and v37.3.0.10
+ *
+ * \li \ref qcsapi_regulatory_get_configured_tx_power_ext
+ * \li \ref qcsapi_wifi_get_scan_chk_inv
+ * \li \ref qcsapi_get_service_action_enum
+ * \li \ref qcsapi_wifi_set_scan_chk_inv
+ * \li \ref qcsapi_service_control
+ * \li \ref qcsapi_get_service_name_enum
+ * \li \ref qcsapi_wifi_set_tx_power_ext
+ * \li \ref qcsapi_wifi_get_tx_power_ext
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.0-v37.4.0.18 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.0-v37.4.0.18
deleted file mode 100644
index b6b501d..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.0-v37.4.0.18
+++ /dev/null
@@ -1,101 +0,0 @@
-/**
- * \page ChangeLog
- *
- * \section v37_4_0_0_TO_v37_4_0_18 Version v37.4.0.0 to version v37.4.0.18 changes
- *
- * \subsection v37_4_0_0_TO_v37_4_0_18Added Added functions
- *
- * The following functions were added between versions v37.4.0.0 and v37.4.0.18
- *
- * \li \ref qcsapi_wifi_set_optim_stats (37.4.0.3)
- * \li \ref qcsapi_wifi_set_sys_time (37.4.0.5)
- * \li \ref qcsapi_wifi_set_2_4ghz_bw (37.4.0.5)
- * \li \ref qcsapi_wifi_get_mac_address_reserve (37.4.0.5)
- * \li \ref qcsapi_wifi_set_vco_lock_detect_mode (37.4.0.5)
- * \li \ref qcsapi_wifi_clear_mac_address_reserve (37.4.0.5)
- * \li \ref qcsapi_wifi_set_mac_address_reserve (37.4.0.5)
- * \li \ref qcsapi_wifi_get_vco_lock_detect_mode (37.4.0.5)
- * \li \ref qcsapi_wifi_get_sys_time (37.4.0.5)
- * \li \ref qcsapi_wifi_set_pref_band (37.4.0.5)
- * \li \ref qcsapi_wifi_get_2_4ghz_bw (37.4.0.5)
- * \li \ref qcsapi_wifi_get_pref_band (37.4.0.5)
- * \li \ref qcsapi_wifi_ssid_get_bssid (37.4.0.6)
- * \li \ref qcsapi_wifi_ssid_set_bssid (37.4.0.6)
- * \li \ref qcsapi_get_eth_info (37.4.0.6)
- * \li \ref qcsapi_wifi_get_chan_power_table (37.4.0.7)
- * \li \ref qcsapi_wifi_get_scs_score_report (37.4.0.7)
- * \li \ref qcsapi_wifi_set_chan_power_table (37.4.0.7)
- * \li \ref qcsapi_wifi_get_ap_interface_name (37.4.0.9)
- * \li \ref qcsapi_wifi_set_ap_interface_name (37.4.0.9)
- * \li \ref qcsapi_wifi_verify_repeater_mode (37.4.0.9)
- * \li \ref qcsapi_wifi_block_bss (37.4.0.12)
- * \li \ref qcsapi_wifi_chan_control (37.4.0.13)
- * \li \ref qcsapi_wifi_get_chan_disabled (37.4.0.13)
- * \li \ref qcsapi_wifi_set_txba_disable (37.4.0.17)
- * \li \ref qcsapi_security_del_hs20_icon (37.4.0.17)
- * \li \ref qcsapi_wifi_get_pairwise_key_interval (37.4.0.17)
- * \li \ref qcsapi_wifi_get_vap_state (37.4.0.17)
- * \li \ref qcsapi_wifi_set_vap_default_state (37.4.0.17)
- * \li \ref qcsapi_wifi_send_qos_map_conf (37.4.0.17)
- * \li \ref qcsapi_wifi_set_chan_pri_inactive_ext (37.4.0.17)
- * \li \ref qcsapi_wifi_get_txburst (37.4.0.17)
- * \li \ref qcsapi_wifi_get_supported_freq_bands (37.4.0.17)
- * \li \ref qcsapi_wifi_get_qos_map (37.4.0.17)
- * \li \ref qcsapi_security_del_osu_server_uri (37.4.0.17)
- * \li \ref qcsapi_wifi_get_sec_chan (37.4.0.17)
- * \li \ref qcsapi_wifi_get_dscp_tid_map (37.4.0.17)
- * \li \ref qcsapi_wifi_get_rxba_decline (37.4.0.17)
- * \li \ref qcsapi_wifi_del_qos_map (37.4.0.17)
- * \li \ref qcsapi_wifi_set_pairwise_key_interval (37.4.0.17)
- * \li \ref qcsapi_security_add_osu_server_uri (37.4.0.17)
- * \li \ref qcsapi_security_get_osu_server_uri (37.4.0.17)
- * \li \ref qcsapi_security_get_osu_server_param (37.4.0.17)
- * \li \ref qcsapi_wifi_set_vap_state (37.4.0.17)
- * \li \ref qcsapi_wifi_get_txba_disable (37.4.0.17)
- * \li \ref qcsapi_security_del_osu_server_param (37.4.0.17)
- * \li \ref qcsapi_security_get_hs20_icon (37.4.0.17)
- * \li \ref qcsapi_wifi_set_qos_map (37.4.0.17)
- * \li \ref qcsapi_wifi_set_rxba_decline (37.4.0.17)
- * \li \ref qcsapi_wifi_set_txburst (37.4.0.17)
- * \li \ref qcsapi_wifi_set_sec_chan (37.4.0.17)
- * \li \ref qcsapi_security_add_osu_server_param (37.4.0.17)
- * \li \ref qcsapi_security_add_hs20_icon (37.4.0.17)
- * \li \ref qcsapi_wifi_get_vap_default_state (37.4.0.17)
- *
- * \subsection v37_4_0_0_TO_v37_4_0_18Proto Function prototype changes
- *
- * The following function prototypes were modified between versions v37.4.0.0 and v37.4.0.18
- *  - \ref qcsapi_security_del_venue_name (37.4.0.2)
- *    - Old prototype: int qcsapi_security_del_venue_name(const char *ifname, char *lang_code, char *venue_name);
- *    - New prototype: int qcsapi_security_del_venue_name(const char *ifname, const char *lang_code, const char *venue_name);
- *  - \ref qcsapi_security_add_venue_name (37.4.0.2)
- *    - Old prototype: int qcsapi_security_add_venue_name(const char *ifname, char *lang_code, char *venue_name);
- *    - New prototype: int qcsapi_security_add_venue_name(const char *ifname, const char *lang_code, const char *venue_name);
- *  - \ref qcsapi_security_del_oper_friendly_name (37.4.0.2)
- *    - Old prototype: int qcsapi_security_del_oper_friendly_name(const char *ifname, char *lang_code, char *oper_friendly_name);
- *    - New prototype: int qcsapi_security_del_oper_friendly_name(const char *ifname, const char *lang_code, const char *oper_friendly_name);
- *  - \ref qcsapi_security_add_nai_realm (37.4.0.2)
- *    - Old prototype: int qcsapi_security_add_nai_realm(const char *ifname, int encoding, char *nai_realm, char *eap_method);
- *    - New prototype: int qcsapi_security_add_nai_realm(const char *ifname, const int encoding, const char *nai_realm, const char *eap_method);
- *  - \ref qcsapi_security_add_oper_friendly_name (37.4.0.2)
- *    - Old prototype: int qcsapi_security_add_oper_friendly_name(const char *ifname, char *lang_code, char *oper_friendly_name);
- *    - New prototype: int qcsapi_security_add_oper_friendly_name(const char *ifname, const char *lang_code, const char *oper_friendly_name);
- *  - \ref qcsapi_enable_vlan_pass_through (37.4.0.7)
- *    - Old prototype: int qcsapi_enable_vlan_pass_through(int enabled);
- *    - New prototype: int qcsapi_enable_vlan_pass_through(const char *ifname, int enabled);
- *  - \ref qcsapi_get_uboot_info (37.4.0.9)
- *    - Old prototype: int qcsapi_get_uboot_info(char *info, qcsapi_unsigned_int uboot_info);
- *    - New prototype: int qcsapi_get_uboot_info(string_32 uboot_version, struct early_flash_config *ef_config);
- *  - \ref qcsapi_wifi_set_group_key_interval (37.4.0.17)
- *    - Old prototype: int qcsapi_wifi_set_group_key_interval(const char *ifname, const string_16 group_key_interval);
- *    - New prototype: int qcsapi_wifi_set_group_key_interval(const char *ifname, const unsigned int key_interval);
- *  - \ref qcsapi_wifi_show_vlan_config (37.4.0.17)
- *    - Old prototype: int qcsapi_wifi_show_vlan_config(const char *ifname, string_1024 vcfg);
- *    - New prototype: int qcsapi_wifi_show_vlan_config(const char *ifname, string_2048 vcfg, const char *flag);
- *  - \ref qcsapi_wifi_get_group_key_interval (37.4.0.17)
- *    - Old prototype: int qcsapi_wifi_get_group_key_interval(const char *ifname, string_16 group_key_interval);
- *    - New prototype: int qcsapi_wifi_get_group_key_interval(const char *ifname, unsigned int *p_key_interval);
- *  - \ref qcsapi_wifi_vlan_config (37.4.0.17)
- *    - Old prototype: int qcsapi_wifi_vlan_config(const char *ifname, qcsapi_vlan_cmd cmd, uint32_t vlanid, uint32_t flags);
- *    - New prototype: int qcsapi_wifi_vlan_config(const char *ifname, qcsapi_vlan_cmd cmd, uint32_t vlanid);
- */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.1-v37.4.0.2 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.1-v37.4.0.2
new file mode 100644
index 0000000..c42ae35
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.1-v37.4.0.2
@@ -0,0 +1,25 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_4_0_1_TO_v37_4_0_2 Version v37.4.0.1 to version v37.4.0.2 changes
+ *
+ * \subsection v37_4_0_1_TO_v37_4_0_2Proto Function prototype changes
+ *
+ * The following function prototypes were modified between versions v37.4.0.1 and v37.4.0.2
+ *  - \ref qcsapi_security_del_venue_name
+ *    - Old prototype: int qcsapi_security_del_venue_name(const char *ifname, char *lang_code, char *venue_name);
+ *    - New prototype: int qcsapi_security_del_venue_name(const char *ifname, const char *lang_code, const char *venue_name);
+ *  - \ref qcsapi_security_add_venue_name
+ *    - Old prototype: int qcsapi_security_add_venue_name(const char *ifname, char *lang_code, char *venue_name);
+ *    - New prototype: int qcsapi_security_add_venue_name(const char *ifname, const char *lang_code, const char *venue_name);
+ *  - \ref qcsapi_security_del_oper_friendly_name
+ *    - Old prototype: int qcsapi_security_del_oper_friendly_name(const char *ifname, char *lang_code, char *oper_friendly_name);
+ *    - New prototype: int qcsapi_security_del_oper_friendly_name(const char *ifname, const char *lang_code, const char *oper_friendly_name);
+ *  - \ref qcsapi_security_add_nai_realm
+ *    - Old prototype: int qcsapi_security_add_nai_realm(const char *ifname, int encoding, char *nai_realm, char *eap_method);
+ *    - New prototype: int qcsapi_security_add_nai_realm(const char *ifname, const int encoding, const char *nai_realm, const char *eap_method);
+ *  - \ref qcsapi_security_add_oper_friendly_name
+ *    - Old prototype: int qcsapi_security_add_oper_friendly_name(const char *ifname, char *lang_code, char *oper_friendly_name);
+ *    - New prototype: int qcsapi_security_add_oper_friendly_name(const char *ifname, const char *lang_code, const char *oper_friendly_name);
+ */
+
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.11-v37.4.0.12 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.11-v37.4.0.12
new file mode 100644
index 0000000..477a85b
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.11-v37.4.0.12
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_4_0_11_TO_v37_4_0_12 Version v37.4.0.11 to version v37.4.0.12 changes
+ *
+ * \subsection v37_4_0_11_TO_v37_4_0_12Added Added functions
+ *
+ * The following functions were added between versions v37.4.0.11 and v37.4.0.12
+ *
+ * \li \ref qcsapi_wifi_block_bss
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.12-v37.4.0.13 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.12-v37.4.0.13
new file mode 100644
index 0000000..da9c881
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.12-v37.4.0.13
@@ -0,0 +1,12 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_4_0_12_TO_v37_4_0_13 Version v37.4.0.12 to version v37.4.0.13 changes
+ *
+ * \subsection v37_4_0_12_TO_v37_4_0_13Added Added functions
+ *
+ * The following functions were added between versions v37.4.0.12 and v37.4.0.13
+ *
+ * \li \ref qcsapi_wifi_chan_control
+ * \li \ref qcsapi_wifi_get_chan_disabled
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.16-v37.4.0.17 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.16-v37.4.0.17
new file mode 100644
index 0000000..e05ebc0
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.16-v37.4.0.17
@@ -0,0 +1,56 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_4_0_16_TO_v37_4_0_17 Version v37.4.0.16 to version v37.4.0.17 changes
+ *
+ * \subsection v37_4_0_16_TO_v37_4_0_17Added Added functions
+ *
+ * The following functions were added between versions v37.4.0.16 and v37.4.0.17
+ * \li \ref qcsapi_wifi_set_txba_disable
+ * \li \ref qcsapi_security_del_hs20_icon
+ * \li \ref qcsapi_wifi_get_pairwise_key_interval
+ * \li \ref qcsapi_wifi_get_vap_state
+ * \li \ref qcsapi_wifi_set_vap_default_state
+ * \li \ref qcsapi_wifi_send_qos_map_conf
+ * \li \ref qcsapi_wifi_set_chan_pri_inactive_ext
+ * \li \ref qcsapi_wifi_get_txburst
+ * \li \ref qcsapi_wifi_get_supported_freq_bands
+ * \li \ref qcsapi_wifi_get_qos_map
+ * \li \ref qcsapi_security_del_osu_server_uri
+ * \li \ref qcsapi_wifi_get_sec_chan
+ * \li \ref qcsapi_wifi_get_dscp_tid_map
+ * \li \ref qcsapi_wifi_get_rxba_decline
+ * \li \ref qcsapi_wifi_del_qos_map
+ * \li \ref qcsapi_wifi_set_pairwise_key_interval
+ * \li \ref qcsapi_security_add_osu_server_uri
+ * \li \ref qcsapi_security_get_osu_server_uri
+ * \li \ref qcsapi_security_get_osu_server_param
+ * \li \ref qcsapi_wifi_set_vap_state
+ * \li \ref qcsapi_wifi_get_txba_disable
+ * \li \ref qcsapi_security_del_osu_server_param
+ * \li \ref qcsapi_security_get_hs20_icon
+ * \li \ref qcsapi_wifi_set_qos_map
+ * \li \ref qcsapi_wifi_set_rxba_decline
+ * \li \ref qcsapi_wifi_set_txburst
+ * \li \ref qcsapi_wifi_set_sec_chan
+ * \li \ref qcsapi_security_add_osu_server_param
+ * \li \ref qcsapi_security_add_hs20_icon
+ * \li \ref qcsapi_wifi_get_vap_default_state
+ *
+ * \subsection v37_4_0_16_TO_v37_4_0_17Proto Function prototype changes
+ *
+ * The following function prototypes were modified between versions v37.4.0.16 and v37.4.0.17
+ *  - \ref qcsapi_wifi_set_group_key_interval
+ *    - Old prototype: int qcsapi_wifi_set_group_key_interval(const char *ifname, const string_16 group_key_interval);
+ *    - New prototype: int qcsapi_wifi_set_group_key_interval(const char *ifname, const unsigned int key_interval);
+ *  - \ref qcsapi_wifi_show_vlan_config
+ *    - Old prototype: int qcsapi_wifi_show_vlan_config(const char *ifname, string_1024 vcfg);
+ *    - New prototype: int qcsapi_wifi_show_vlan_config(const char *ifname, string_2048 vcfg, const char *flag);
+ *  - \ref qcsapi_wifi_get_group_key_interval
+ *    - Old prototype: int qcsapi_wifi_get_group_key_interval(const char *ifname, string_16 group_key_interval);
+ *    - New prototype: int qcsapi_wifi_get_group_key_interval(const char *ifname, unsigned int *p_key_interval);
+ *  - \ref qcsapi_wifi_vlan_config
+ *    - Old prototype: int qcsapi_wifi_vlan_config(const char *ifname, qcsapi_vlan_cmd cmd, uint32_t vlanid, uint32_t flags);
+ *    - New prototype: int qcsapi_wifi_vlan_config(const char *ifname, qcsapi_vlan_cmd cmd, uint32_t vlanid);
+ */
+
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.2-v37.4.0.3 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.2-v37.4.0.3
new file mode 100644
index 0000000..0b9c149
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.2-v37.4.0.3
@@ -0,0 +1,11 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_4_0_2_TO_v37_4_0_3 Version v37.4.0.2 to version v37.4.0.3 changes
+ *
+ * \subsection v37_4_0_2_TO_v37_4_0_3Added Added functions
+ *
+ * The following functions were added between versions v37.4.0.2 and v37.4.0.3
+ *
+ * \li \ref qcsapi_wifi_set_optim_stats
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.21-v37.4.0.22 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.21-v37.4.0.22
new file mode 100644
index 0000000..0e569b1
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.21-v37.4.0.22
@@ -0,0 +1,6 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_4_0_21_TO_v37_4_0_22 Version v37.4.0.21 to version v37.4.0.22 changes
+ */
+
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.22-v37.4.0.23 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.22-v37.4.0.23
new file mode 100644
index 0000000..69036c6
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.22-v37.4.0.23
@@ -0,0 +1,6 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_4_0_22_TO_v37_4_0_23 Version v37.4.0.22 to version v37.4.0.23 changes
+ */
+
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.23-v37.4.0.24 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.23-v37.4.0.24
new file mode 100644
index 0000000..4a9329d
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.23-v37.4.0.24
@@ -0,0 +1,6 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_4_0_23_TO_v37_4_0_24 Version v37.4.0.23 to version v37.4.0.24 changes
+ */
+
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.24-v37.4.0.25 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.24-v37.4.0.25
new file mode 100644
index 0000000..5819cd0
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.24-v37.4.0.25
@@ -0,0 +1,6 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_4_0_24_TO_v37_4_0_25 Version v37.4.0.24 to version v37.4.0.25 changes
+ */
+
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.4-v37.4.0.5 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.4-v37.4.0.5
new file mode 100644
index 0000000..ad6a0c7
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.4-v37.4.0.5
@@ -0,0 +1,21 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_4_0_4_TO_v37_4_0_5 Version v37.4.0.4 to version v37.4.0.5 changes
+ *
+ * \subsection v37_4_0_4_TO_v37_4_0_5Added Added functions
+ *
+ * The following functions were added between versions v37.4.0.4 and v37.4.0.5
+ *
+ * \li \ref qcsapi_wifi_set_sys_time
+ * \li \ref qcsapi_wifi_set_2_4ghz_bw
+ * \li \ref qcsapi_wifi_get_mac_address_reserve
+ * \li \ref qcsapi_wifi_set_vco_lock_detect_mode
+ * \li \ref qcsapi_wifi_clear_mac_address_reserve
+ * \li \ref qcsapi_wifi_set_mac_address_reserve
+ * \li \ref qcsapi_wifi_get_vco_lock_detect_mode
+ * \li \ref qcsapi_wifi_get_sys_time
+ * \li \ref qcsapi_wifi_set_pref_band
+ * \li \ref qcsapi_wifi_get_2_4ghz_bw
+ * \li \ref qcsapi_wifi_get_pref_band
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.47-v37.4.0.48 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.47-v37.4.0.48
deleted file mode 100644
index 6c76903..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.47-v37.4.0.48
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * \page ChangeLog
- *
- * \section v37_4_0_47_TO_v37_4_0_48 Version v37.4.0.47 to version v37.4.0.48 changes
- *
- * \subsection v37_4_0_47_TO_v37_4_0_48Added Added functions
- *
- * The following functions were added between versions v37.4.0.47 and v37.4.0.48
- * \li \ref qcsapi_wps_set_default_pbc_bss
- * \li \ref qcsapi_wps_get_default_pbc_bss
- */
-
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.49-v37.4.0.50 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.49-v37.4.0.50
deleted file mode 100644
index 4fedac4..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.49-v37.4.0.50
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * \page ChangeLog
- *
- * \section v37_4_0_49_TO_v37_4_0_50 Version v37.4.0.49 to version v37.4.0.50 changes
- *
- * \subsection v37_4_0_49_TO_v37_4_0_50Added Added functions
- *
- * The following functions were added between versions v37.4.0.49 and v37.4.0.50
- * \li \ref qcsapi_wifi_authorize_mac_address_list_ext
- * \li \ref qcsapi_wifi_deny_mac_address_list_ext
- * \li \ref qcsapi_wifi_remove_mac_address_list_ext
- */
-
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.5-v37.4.0.6 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.5-v37.4.0.6
new file mode 100644
index 0000000..0075dc7
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.5-v37.4.0.6
@@ -0,0 +1,13 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_4_0_5_TO_v37_4_0_6 Version v37.4.0.5 to version v37.4.0.6 changes
+ *
+ * \subsection v37_4_0_5_TO_v37_4_0_6Added Added functions
+ *
+ * The following functions were added between versions v37.4.0.5 and v37.4.0.6
+ *
+ * \li \ref qcsapi_wifi_ssid_get_bssid
+ * \li \ref qcsapi_wifi_ssid_set_bssid
+ * \li \ref qcsapi_get_eth_info
+ */
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.50-v37.4.0.51 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.50-v37.4.0.51
deleted file mode 100644
index 95e7483..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.50-v37.4.0.51
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * \page ChangeLog
- *
- * \section v37_4_0_50_TO_v37_4_0_51 Version v37.4.0.50 to version v37.4.0.51 changes
- *
- * \subsection v37_4_0_50_TO_v37_4_0_51Proto Function prototype changes
- *
- * The following function prototypes were modified between versions v37.4.0.50 and v37.4.0.51
- *  - \ref qcsapi_wifi_show_vlan_config
- *    - Old prototype: int qcsapi_wifi_show_vlan_config(const char *ifname, string_2048 vcfg, const char *flag);
- *    - New prototype: int qcsapi_wifi_show_vlan_config(const char *ifname, struct qcsapi_data_2Kbytes *vcfg, const char *flag);
- *  - \ref qcsapi_wifi_get_rates
- *    - Old prototype: int qcsapi_wifi_get_rates(const char *ifname, qcsapi_rate_type rate_type, string_1024 supported_rates);
- *    - New prototype: int qcsapi_wifi_get_rates(const char *ifname, qcsapi_rate_type rate_type, string_2048 supported_rates);
- */
-
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.51-v37.4.0.52 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.51-v37.4.0.52
deleted file mode 100644
index e4a7d82..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.51-v37.4.0.52
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * \page ChangeLog
- *
- * \section v37_4_0_51_TO_v37_4_0_52 Version v37.4.0.51 to version v37.4.0.52 changes
- *
- * \subsection v37_4_0_51_TO_v37_4_0_52Added Added functions
- *
- * The following functions were added between versions v37.4.0.51 and v37.4.0.52
- * \li \ref qcsapi_set_log_level
- * \li \ref qcsapi_get_log_level
- * \li \ref qcsapi_get_app_core_dump
- * \li \ref qcsapi_wifi_set_threshold_of_neighborhood_type
- * \li \ref qcsapi_get_app_core_dump_size
- * \li \ref qcsapi_wifi_get_neighborhood_type
- */
-
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.53-v37.4.0.54 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.53-v37.4.0.54
deleted file mode 100644
index 5686b24..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.53-v37.4.0.54
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \page ChangeLog
- *
- * \section v37_4_0_53_TO_v37_4_0_54 Version v37.4.0.53 to version v37.4.0.54 changes
- *
- * \subsection v37_4_0_53_TO_v37_4_0_54Added Added functions
- *
- * The following functions were added between versions v37.4.0.53 and v37.4.0.54
- * \li \ref qcsapi_wifi_set_current_tx_power_level
- */
-
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.56-v37.4.0.57 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.56-v37.4.0.57
deleted file mode 100644
index 78a346e..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.56-v37.4.0.57
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * \page ChangeLog
- *
- * \section v37_4_0_56_TO_v37_4_0_57 Version v37.4.0.56 to version v37.4.0.57 changes
- *
- * \subsection v37_4_0_56_TO_v37_4_0_57Added Added functions
- *
- * The following functions were added between versions v37.4.0.56 and v37.4.0.57
- * \li \ref qcsapi_do_system_action
- * \li \ref qcsapi_set_remote_logging
- * \li \ref qcsapi_wifi_node_get_txrx_airtime
- * \li \ref qcsapi_wifi_get_txrx_airtime
- *
- * \subsection v37_4_0_56_TO_v37_4_0_57Removed Removed functions
- *
- * The following functions were removed between versions v37.4.0.56 and v37.4.0.57
- * \li \ref qcsapi_wifi_get_tx_airtime
- * \li \ref qcsapi_wifi_node_get_tx_airtime
- *
- * \subsection v37_4_0_56_TO_v37_4_0_57Proto Function prototype changes
- *
- * The following function prototypes were modified between versions v37.4.0.56 and v37.4.0.57
- *  - \ref qcsapi_set_log_level
- *    - Old prototype: int qcsapi_set_log_level(const char *interface, string_32 level, qcsapi_log_module_name index);
- *    - New prototype: int qcsapi_set_log_level(const char *ifname, qcsapi_log_module_name index, const string_128 params);
- *  - \ref qcsapi_get_log_level
- *    - Old prototype: int qcsapi_get_log_level(const char *interface, string_32 level, qcsapi_log_module_name index);
- *    - New prototype: int qcsapi_get_log_level(const char *ifname, qcsapi_log_module_name index, string_128 params);
- *  - \ref qcsapi_wifi_scs_switch_channel
- *    - Old prototype: int qcsapi_wifi_scs_switch_channel(const char *ifname);
- *    - New prototype: int qcsapi_wifi_scs_switch_channel(const char *ifname, uint16_t pick_flags);
- */
-
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.57-v37.4.0.58 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.57-v37.4.0.58
deleted file mode 100644
index 5641f8f..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.57-v37.4.0.58
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * \page ChangeLog
- *
- * \section v37_4_0_57_TO_v37_4_0_58 Version v37.4.0.57 to version v37.4.0.58 changes
- *
- * \subsection v37_4_0_57_TO_v37_4_0_58Added Added functions
- *
- * The following functions were added between versions v37.4.0.57 and v37.4.0.58
- * \li \ref qcsapi_wifi_get_threshold_of_neighborhood_type
- * \li \ref qcsapi_wifi_set_parameter
- * \li \ref qcsapi_wifi_is_weather_channel
- * \li \ref qcsapi_wifi_get_parameter
- */
-
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.58-v37.4.0.59 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.58-v37.4.0.59
deleted file mode 100644
index 376a0e5..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.58-v37.4.0.59
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * \page ChangeLog
- *
- * \section v37_4_0_58_TO_v37_4_0_59 Version v37.4.0.58 to version v37.4.0.59 changes
- *
- * \subsection v37_4_0_58_TO_v37_4_0_59Added Added functions
- *
- * The following functions were added between versions v37.4.0.58 and v37.4.0.59
- * \li \ref qcsapi_wifi_set_br_isolate
- * \li \ref qcsapi_wifi_get_br_isolate
- */
-
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.59-v37.4.0.60 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.59-v37.4.0.60
deleted file mode 100644
index 1d3133f..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.59-v37.4.0.60
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \page ChangeLog
- *
- * \section v37_4_0_59_TO_v37_4_0_60 Version v37.4.0.59 to version v37.4.0.60 changes
- *
- * \subsection v37_4_0_59_TO_v37_4_0_60Added Added functions
- *
- * The following functions were added between versions v37.4.0.59 and v37.4.0.60
- * \li \ref qcsapi_set_console
- */
-
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.6-v37.4.0.7 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.6-v37.4.0.7
new file mode 100644
index 0000000..f8e25c5
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.6-v37.4.0.7
@@ -0,0 +1,20 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_4_0_6_TO_v37_4_0_7 Version v37.4.0.6 to version v37.4.0.7 changes
+ *
+ * \subsection v37_4_0_6_TO_v37_4_0_7Added Added functions
+ *
+ * The following functions were added between versions v37.4.0.6 and v37.4.0.7
+ * \li \ref qcsapi_wifi_get_chan_power_table
+ * \li \ref qcsapi_wifi_get_scs_score_report
+ * \li \ref qcsapi_wifi_set_chan_power_table
+ *
+ * \subsection v37_4_0_6_TO_v37_4_0_7Proto Function prototype changes
+ *
+ * The following function prototypes were modified between versions v37.4.0.6 and v37.4.0.7
+ *  - \ref qcsapi_enable_vlan_pass_through
+ *    - Old prototype: int qcsapi_enable_vlan_pass_through(int enabled);
+ *    - New prototype: int qcsapi_enable_vlan_pass_through(const char *ifname, int enabled);
+ */
+
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.60-v37.4.0.61 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.60-v37.4.0.61
deleted file mode 100644
index 1ecc44e..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.60-v37.4.0.61
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * \page ChangeLog
- *
- * \section v37_4_0_60_TO_v37_4_0_61 Version v37.4.0.60 to version v37.4.0.61 changes
- *
- * \subsection v37_4_0_60_TO_v37_4_0_61Added Added functions
- *
- * The following functions were added between versions v37.4.0.60 and v37.4.0.61
- * \li \ref qcsapi_wifi_set_tx_max_amsdu
- * \li \ref qcsapi_wifi_get_tx_max_amsdu
- */
-
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.62-v37.4.1.62 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.62-v37.4.1.62
deleted file mode 100644
index 43b07b7..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.62-v37.4.1.62
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * \page ChangeLog
- *
- * \section v37_4_0_62_TO_v37_4_1_62 Version v37.4.0.62 to version v37.4.1.62 changes
- *
- * \subsection v37_4_0_62_TO_v37_4_1_62Proto Function prototype changes
- *
- * The following function prototypes were modified between versions v37.4.0.62 and v37.4.1.62
- *  - \ref qcsapi_get_app_core_dump
- *    - Old prototype: int qcsapi_get_app_core_dump(char *file, string_4096 buf, uint32_t bytes_to_copy, uint32_t offset, uint32_t *bytes_copied);
- *    - New prototype: int qcsapi_get_app_core_dump(const char *file, string_4096 buf, uint32_t bytes_to_copy, uint32_t offset, uint32_t *bytes_copied);
- *  - \ref qcsapi_get_app_core_dump_size
- *    - Old prototype: int qcsapi_get_app_core_dump_size(char *file, uint32_t *core_dump_size);
- *    - New prototype: int qcsapi_get_app_core_dump_size(const char *file, uint32_t *core_dump_size);
- */
-
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.8-v37.4.0.9 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.8-v37.4.0.9
new file mode 100644
index 0000000..294b5ff
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.8-v37.4.0.9
@@ -0,0 +1,20 @@
+/**
+ * \page ChangeLog
+ *
+ * \section v37_4_0_8_TO_v37_4_0_9 Version v37.4.0.8 to version v37.4.0.9 changes
+ *
+ * \subsection v37_4_0_8_TO_v37_4_0_9Added Added functions
+ *
+ * The following functions were added between versions v37.4.0.8 and v37.4.0.9
+ * \li \ref qcsapi_wifi_get_ap_interface_name
+ * \li \ref qcsapi_wifi_set_ap_interface_name
+ * \li \ref qcsapi_wifi_verify_repeater_mode
+ *
+ * \subsection v37_4_0_8_TO_v37_4_0_9Proto Function prototype changes
+ *
+ * The following function prototypes were modified between versions v37.4.0.8 and v37.4.0.9
+ *  - \ref qcsapi_get_uboot_info
+ *    - Old prototype: int qcsapi_get_uboot_info(char *info, qcsapi_unsigned_int uboot_info);
+ *    - New prototype: int qcsapi_get_uboot_info(string_32 uboot_version, struct early_flash_config *ef_config);
+ */
+
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.10.62-v37.4.11.62 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.10.62-v37.4.11.62
deleted file mode 100644
index 3f47d09..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.10.62-v37.4.11.62
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \page ChangeLog
- *
- * \section v37_4_10_62_TO_v37_4_11_62 Version v37.4.10.62 to version v37.4.11.62 changes
- *
- * \subsection v37_4_10_62_TO_v37_4_11_62Added Added functions
- *
- * The following functions were added between versions v37.4.10.62 and v37.4.11.62
- * \li \ref qcsapi_wifi_get_scs_interference_report
- */
-
diff --git a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.6.62-v37.4.7.62 b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.6.62-v37.4.7.62
deleted file mode 100644
index e1e8b41..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.6.62-v37.4.7.62
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * \page ChangeLog
- *
- * \section v37_4_6_62_TO_v37_4_7_62 Version v37.4.6.62 to version v37.4.7.62 changes
- *
- * \subsection v37_4_6_62_TO_v37_4_7_62Added Added functions
- *
- * The following functions were added between versions v37.4.6.62 and v37.4.7.62
- * \li \ref qcsapi_get_app_core_dump_ext
- *
- * \subsection v37_4_6_62_TO_v37_4_7_62Removed Removed functions
- *
- * The following functions were removed between versions v37.4.6.62 and v37.4.7.62
- * \li \ref qcsapi_get_app_core_dump_size
- */
-
diff --git a/include/common/doxygen/qcsapi_doc/groupdefine.txt b/include/common/doxygen/qcsapi_doc/groupdefine.txt
index 0b7e2f0..44dced9 100644
--- a/include/common/doxygen/qcsapi_doc/groupdefine.txt
+++ b/include/common/doxygen/qcsapi_doc/groupdefine.txt
@@ -335,7 +335,6 @@
 /**@defgroup OptionsAPIs Options
  * @brief A variety of options can be accessed or set.
  * See the discussion of the datatype qcsapi_option_type for the list of available options.
- * See the discussion of the datatype qcsapi_wifi_param_type for the list of available parameters.
  * Relevant entry points follow:
  *
  * @section mysection10_3 WiFi Options and the call_qcsapi Interface
@@ -369,7 +368,6 @@
  * <TR>		<TD>qcsapi_obss_coexist</TD>		<TD>obss_coexist</TD>	</TR>
  * <TR>		<TD>qcsapi_11g_protection</TD>		<TD>11g_protection</TD>	</TR>
  * <TR>		<TD>qcsapi_11n_protection</TD>		<TD>11n_protection</TD>	</TR>
- * <TR>		<TD>qcsapi_txamsdu_11n</TD>		<TD>tx_amsdu_11n</TD>	</TR>
  * </TABLE>
  * To access the get option API enter:<br>
  * <c>call_qcsapi get_option wifi0 \<option\>	</c><br>
@@ -422,24 +420,6 @@
  *      <c>QCS API error 1044: Option is not supported</c><br>
  *   Caller can check the return value <c>-qcsapi_option_not_supported</c> to query
  *   if the option is supported.
- *
- * @section mysection10_5 WiFi Parameters and the call_qcsapi Interface
- * The table below lists selected parameters as listed in the enumerated type and how to pass them to call_qcsapi.
- * <TABLE>
- * <TR>		<TD><b>Option</b></TD>		<TD><b>call_qcsapi representation</b></TD>	</TR>
- * <TR>		<TD>qcsapi_wifi_param_dtim_period</TD>		<TD>dtim_period</TD>	</TR>
- * </TABLE>
- * To access the get parameter API enter:<br>
- * <c>call_qcsapi get_wifi_param wifi0 \<parameter\>	</c><br>
- * Unless an error occurs, the output will be the numeric value of the parameter.<br>
- * To access the set parameter API enter:<br>
- * <c>call_qcsapi set_wifi_param wifi0 \<parameter\> \<numeric value\></c><br>
- * Unless an error occurs, the output will be the string <c>complete</c>.
- *
- * @section mysection10_6 Notes on Selected Parameters
- *
- * - The dtim period is an AP only parameter.<br>
- *   It controls how often the broadcast/multicast traffic indication bit set in beacon unit.<br>
  */
 
 
diff --git a/include/common/ruby_mem.h b/include/common/ruby_mem.h
index 06c97bf..013e07b 100644
--- a/include/common/ruby_mem.h
+++ b/include/common/ruby_mem.h
@@ -121,9 +121,9 @@
 #define CONFIG_ARC_DSP_END		(CONFIG_ARC_DSP_BASE + CONFIG_ARC_DSP_SIZE)
 #define CONFIG_ARC_MUC_BASE		CONFIG_ARC_DSP_END
 #ifdef TOPAZ_128_NODE_MODE
-#define CONFIG_ARC_MUC_SIZE		((3 * 1024 * 1024) + (584 * 1024))
+#define CONFIG_ARC_MUC_SIZE		((3 * 1024 * 1024) + (580 * 1024))
 #else
-#define CONFIG_ARC_MUC_SIZE		((2 * 1024 * 1024) + (772 * 1024))
+#define CONFIG_ARC_MUC_SIZE		((2 * 1024 * 1024) + (768 * 1024))
 #endif
 #define MUC_DRAM_RX_RESVERED_RELOC_SIZE		(8 * 1024)
 #define CONFIG_ARC_MUC_END		(CONFIG_ARC_MUC_BASE + CONFIG_ARC_MUC_SIZE)
@@ -184,7 +184,7 @@
 #define TOPAZ_HBM_BUF_END		(TOPAZ_HBM_BUF_WMAC_RX_END + TOPAZ_HBM_POOL_GUARD_SIZE)
 
 #define TOPAZ_FWT_MCAST_ENTRIES		2048
-#define TOPAZ_FWT_MCAST_FF_ENTRIES	1	/* one for all FF addresses */
+#define TOPAZ_FWT_MCAST_FF_ENTRIES	8	/* one per vap */
 #define TOPAZ_FWT_MCAST_IPMAP_ENT_SIZE	64	/* sizeof(struct topaz_fwt_sw_ipmap) */
 #define TOPAZ_FWT_MCAST_TQE_ENT_SIZE	20	/* sizeof(struct topaz_fwt_sw_mcast_entry) */
 /* Tables are cache-line aligned to ensure proper memory flushing. */
diff --git a/include/common/ruby_pm.h b/include/common/ruby_pm.h
index 8319f2f..052b46e 100644
--- a/include/common/ruby_pm.h
+++ b/include/common/ruby_pm.h
@@ -46,7 +46,6 @@
 #define BOARD_PM_WLAN_IDLE_TIMEOUT		(120 * HZ)
 #define BOARD_PM_WLAN_STA_IDLE_TIMEOUT		(15 * HZ)
 #define BOARD_PM_WLAN_DEFAULT_TIMEOUT		(0)
-#define BOARD_PM_WLAN_CHECK_IDLE_AFTER_CAC	(30 * HZ)
 
 /* qdisc parameters to switch between modes */
 #define BOARD_PM_QDISC_TIMER_TIMEOUT		(50/*ms*/ * HZ / 1000)
diff --git a/include/common/ruby_version.h b/include/common/ruby_version.h
index 342d60e..7664b11 100644
--- a/include/common/ruby_version.h
+++ b/include/common/ruby_version.h
@@ -12,6 +12,6 @@
 // Defines
 ////////////////////////////////////////////////////////////////////////////
 
-#define RUBY_UBOOT_VERSION	"v37.4.0.29"
+#define RUBY_UBOOT_VERSION	"v37.4.0.28"
 
 #endif // __RUBY_RELEASE_H__
diff --git a/include/kernel/net80211/ieee80211_beacon_desc.h b/include/kernel/net80211/ieee80211_beacon_desc.h
deleted file mode 100644
index 79b9181..0000000
--- a/include/kernel/net80211/ieee80211_beacon_desc.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
-  Copyright (c) 2015 Quantenna Communications Inc
-  All Rights Reserved
-
-  This program is free software; you can redistribute it and/or
-  modify it under the terms of the GNU General Public License
-  as published by the Free Software Foundation; either version 2
-  of the License, or (at your option) any later version.
-
-  This program is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with this program; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
-**/
-
-#ifndef IEEE80211_BEACON_DESC_H_
-#define IEEE80211_BEACON_DESC_H_
-#include "qtn/beacon_ioctl.h"
-
-struct ieee80211_beacon_param_t {
-	struct beacon_shared_ie_t  *head;
-	struct beacon_shared_ie_t  *tail;
-	uint8_t buf[BEACON_PARAM_SIZE];		/* liner buffer for the ie list */
-	uint32_t curr;			/* current offset of using buffer */
-	uint16_t size;				/* allocated buffer size */
-};
-
-#define IEEE80211_ELEMID_VENDOR_WME		(IEEE80211_ELEMID_VENDOR << 8 | 0x0)
-#define IEEE80211_ELEMID_VENDOR_WPA		(IEEE80211_ELEMID_VENDOR << 8 | 0x1)
-#define IEEE80211_ELEMID_VENDOR_ATH		(IEEE80211_ELEMID_VENDOR << 8 | 0x2)
-#define IEEE80211_ELEMID_VENDOR_QTN		(IEEE80211_ELEMID_VENDOR << 8 | 0x3)
-#define IEEE80211_ELEMID_VENDOR_EXT_ROLE	(IEEE80211_ELEMID_VENDOR << 8 | 0x4)
-#define IEEE80211_ELEMID_VENDOR_EXT_BSSID	(IEEE80211_ELEMID_VENDOR << 8 | 0x5)
-#define IEEE80211_ELEMID_VENDOR_EXT_STATE	(IEEE80211_ELEMID_VENDOR << 8 | 0x6)
-#define IEEE80211_ELEMID_VENDOR_QTN_WME		(IEEE80211_ELEMID_VENDOR << 8 | 0x7)
-#define IEEE80211_ELEMID_VENDOR_EPIGRAM		(IEEE80211_ELEMID_VENDOR << 8 | 0x8)
-#define IEEE80211_ELEMID_VENDOR_APP		(IEEE80211_ELEMID_VENDOR << 8 | 0x9)
-
-int ieee80211_beacon_create_param(struct ieee80211vap *vap);
-void ieee80211_beacon_flush_param(struct ieee80211_beacon_param_t *param);
-void ieee80211_beacon_destroy_param(struct ieee80211vap *vap);
-uint8_t *ieee80211_add_beacon_desc_header(struct ieee80211_node *ni, uint8_t *frm);
-uint8_t *ieee80211_add_beacon_desc_mandatory_fields(struct ieee80211_node *ni, uint8_t *frm,
-		struct ieee80211_beacon_offsets *bo);
-uint8_t *ieee80211_add_beacon_desc_ie(struct ieee80211_node *ni, uint16_t ext_ie_id, uint8_t *frm);
-void ieee80211_dump_beacon_desc_ie(struct ieee80211_beacon_param_t *param);
-
-#endif
diff --git a/include/kernel/net80211/ieee80211_node.h b/include/kernel/net80211/ieee80211_node.h
index bb7b59c..778303e 100644
--- a/include/kernel/net80211/ieee80211_node.h
+++ b/include/kernel/net80211/ieee80211_node.h
@@ -63,13 +63,6 @@
 #endif
 void ieee80211_node_dbgref_history_dump(void);
 
-/* Define of the V optimization */
-enum ieee80211_vopt_state {
-	IEEE80211_VOPT_DISABLED	= 0,
-	IEEE80211_VOPT_ENABLED	= 1,
-	IEEE80211_VOPT_AUTO	= 2,
-};
-
 /*
  * Each ieee80211com instance has a single timer that fires once a
  * second.  This is used to initiate various work depending on the
@@ -286,7 +279,6 @@
 	u_int ni_scangen;			/* gen# for timeout scan */
 	u_int8_t ni_authmode;			/* authentication algorithm */
 	u_int16_t ni_flags;			/* special-purpose state */
-	uint16_t ni_ext_flags;			/* extended special-purpose state */
 	u_int8_t ni_ath_flags;			/* Atheros feature flags */
 	/* NB: These must have the same values as IEEE80211_ATHC_* */
 #define IEEE80211_NODE_TURBOP	0x0001		/* Turbo prime enable */
@@ -414,9 +406,6 @@
 	uint16_t ni_recent_others_time_smth;
 	uint16_t ni_recent_tdls_tx_time;
 	uint16_t ni_recent_tdls_rx_time;
-	uint32_t ni_recent_cca_idle;
-	uint32_t ni_recent_cca_idle_smthed;
-	uint32_t ni_recent_cca_idle_smth_jiffies;
 	uint16_t ni_tdls_tx_time_smthed;
 	uint16_t ni_tdls_rx_time_smthed;
 	uint32_t ni_tdls_time_smth_jiffies;
@@ -432,7 +421,6 @@
 		__le64 tsf;
 	} ni_tstamp;				/* from last rcv'd beacon */
 
-	u_int16_t ni_raw_bintval;		/* raw beacon interval */
 	u_int16_t ni_intval;			/* beacon interval */
 	u_int16_t ni_intval_old;		/* beacon interval before first change */
 	u_int16_t ni_intval_cnt;		/* count of ni_intval != ni_intval_old */
@@ -647,9 +635,8 @@
                                        uint8_t bw, uint8_t rx_nss);
 int ieee80211_send_20_40_bss_coex(struct ieee80211vap *vap);
 int ieee80211_check_mode(struct ieee80211vap *vap);
-void ieee80211_update_active_chanlist(struct ieee80211com *ic, int bw);
-void ieee80211_nonqtn_sta_join(struct ieee80211vap *vap, struct ieee80211_node *ni, const char *caller);
-void ieee80211_nonqtn_sta_leave(struct ieee80211vap *vap, struct ieee80211_node *ni, const char *caller);
+void ieee80211_nonqtn_sta_join(struct ieee80211vap *vap, struct ieee80211_node *ni);
+void ieee80211_nonqtn_sta_leave(struct ieee80211vap *vap, struct ieee80211_node *ni);
 
 #define WDS_AGING_TIME		600   /* 10 minutes */
 #define WDS_AGING_COUNT		2
@@ -795,9 +782,6 @@
 
 #endif /* IEEE80211_DEBUG_REFCNT */
 
-void ieee80211_sta_assocs_inc(struct ieee80211vap *vap, const char *caller);
-void ieee80211_sta_assocs_dec(struct ieee80211vap *vap, const char *caller);
-
 int ieee80211_add_wds_addr(struct ieee80211_node_table *, struct ieee80211_node *,
 	const u_int8_t *, u_int8_t);
 void ieee80211_remove_wds_addr(struct ieee80211_node_table *, const u_int8_t *);
@@ -848,5 +832,5 @@
 void ieee80211_disconnect_node(struct ieee80211vap *vap, struct ieee80211_node *ni);
 int ieee80211_node_is_intel(struct ieee80211_node *ni);
 int ieee80211_node_is_realtek(struct ieee80211_node *ni);
-int ieee80211_node_is_opti_node(struct ieee80211_node *ni);
+int ieee80211_node_is_no_rxamsdu_no_bf(struct ieee80211_node *ni);
 #endif /* _NET80211_IEEE80211_NODE_H_ */
diff --git a/include/kernel/net80211/ieee80211_proto.h b/include/kernel/net80211/ieee80211_proto.h
index 43de757..99a7cd5 100644
--- a/include/kernel/net80211/ieee80211_proto.h
+++ b/include/kernel/net80211/ieee80211_proto.h
@@ -126,7 +126,6 @@
 void ieee80211_set11gbasicrates(struct ieee80211_rateset *, enum ieee80211_phymode);
 enum ieee80211_phymode ieee80211_get11gbasicrates(struct ieee80211_rateset *);
 void ieee80211_send_pspoll(struct ieee80211_node *);
-void ieee80211_send_vht_opmode_to_all(struct ieee80211com *ic, uint8_t bw);
 void ieee80211_tkip_mic_failure(struct ieee80211vap *, int count);
 void ieee80211_send_rm_req_stastats(struct ieee80211_node *ni, u_int32_t flags);
 int32_t ieee80211_send_rm_rep_stastats(struct ieee80211_node *ni,
@@ -140,8 +139,6 @@
 void ieee80211_send_action_cca_report(struct ieee80211_node *ni, uint8_t token,
 		uint16_t cca_intf, uint64_t tsf, uint16_t duration, uint32_t sp_fail,
 		uint32_t lp_fail, uint16_t others_time, uint8_t *extra_ie, uint16_t ie_len);
-void ieee80211_send_action_fat_report(struct ieee80211_node *ni, uint8_t token,
-		uint16_t cca_intf, uint64_t tsf, uint16_t duration, uint16_t idle_time);
 void ieee80211_send_rm_req_stastats_all(struct ieee80211com *ic);
 void ieee80211_send_rm_req_chan_load(struct ieee80211_node *ni,
 				u_int8_t channel,
@@ -499,15 +496,11 @@
 };
 struct sk_buff *ieee80211_beacon_alloc(struct ieee80211_node *,
 	struct ieee80211_beacon_offsets *);
-void ieee80211_beacon_update(struct ieee80211_node *,
+int ieee80211_beacon_update(struct ieee80211_node *,
 	struct ieee80211_beacon_offsets *, struct sk_buff *, int);
 void ieee80211_beacon_update_all(struct ieee80211com *);
 
 /* XXX exposed due to of beacon code botch */
-uint8_t *ieee80211_add_beacon_header(struct ieee80211_node *ni, uint8_t *frm);
-uint8_t *ieee80211_add_epigram_ie(uint8_t *frm);
-uint8_t *ieee80211_add_mandatory_field(struct ieee80211_node *ni, uint8_t *frm,
-		struct ieee80211_beacon_offsets *bo);
 u_int8_t *ieee80211_add_rates(u_int8_t *, const struct ieee80211_rateset *);
 u_int8_t *ieee80211_add_supported_chans(uint8_t *frm, struct ieee80211com *ic);
 u_int8_t *ieee80211_add_xrates(u_int8_t *, const struct ieee80211_rateset *);
@@ -537,12 +530,14 @@
 
 u_int8_t *ieee80211_add_vhtcap(struct ieee80211_node *, u_int8_t *, struct ieee80211_vhtcap *, uint8_t);
 u_int8_t *ieee80211_add_vhtop(struct ieee80211_node *, u_int8_t *, struct ieee80211_vhtop *);
-uint8_t *ieee80211_add_vhtop_notif(struct ieee80211_node *ni, uint8_t *frm, struct ieee80211com *ic, int band_24g);
+uint8_t *ieee80211_add_vhtop_notif(uint8_t *frm, struct ieee80211com *ic, int band_24g);
 
 /* MU MIMO */
 void
 ieee80211_send_vht_grp_id_mgmt_action(struct ieee80211vap *vap,
 				      struct ieee80211_node *ni);
+void ieee80211_node_mu_grp_update(struct ieee80211_node *ni, uint8_t grp,
+				  uint8_t pos, uint8_t delete);
 struct ieee80211_node *ieee80211_find_node_by_aid(struct ieee80211com *ic, uint8_t aid);
 
 u_int8_t * ieee80211_add_20_40_bss_coex_ie(u_int8_t *frm, u_int8_t coex);
diff --git a/include/kernel/net80211/ieee80211_scan.h b/include/kernel/net80211/ieee80211_scan.h
index 1899de3..a66d477 100644
--- a/include/kernel/net80211/ieee80211_scan.h
+++ b/include/kernel/net80211/ieee80211_scan.h
@@ -255,7 +255,6 @@
 	u_int8_t *se_vhtcap_ie;		/* captured VHT Capability Info ie */
 	u_int8_t *se_vhtop_ie;		/* captured VHT Operation Info ie */
 	u_int8_t *se_ath_ie;		/* captured Atheros ie */
-	u_int8_t *se_qtn_ie;		/* captured qtn ie */
 	u_int8_t se_qtn_ie_flags;	/* captured Quantenna flags */
 	u_int8_t se_is_qtn_dev;		/* 1 - is QTN device, 0 - non-QTN device */
 	u_int8_t se_ext_role;		/* 0 - default mode, 1 - MBS, 2 - RBS */
@@ -371,12 +370,8 @@
 
 	/* CCA interference */
 #define SCS_CCA_INTF_INVALID	0xFFFF
-#define SCS_CCA_IDLE_INVALID	0xFFFF
 	uint16_t as_cca_intf_smth;
 	uint16_t as_cca_intf[IEEE80211_CHAN_MAX];
-	uint16_t as_cca_intf_pri[IEEE80211_CHAN_MAX];
-	uint16_t as_cca_intf_sec[IEEE80211_CHAN_MAX];
-	uint16_t as_cca_intf_sec40[IEEE80211_CHAN_MAX];
 	uint32_t as_cca_intf_jiffies[IEEE80211_CHAN_MAX];
 	uint32_t as_pmbl_err_ap[IEEE80211_CHAN_MAX];
 	uint32_t as_pmbl_err_sta[IEEE80211_CHAN_MAX];
@@ -410,8 +405,6 @@
 			struct ieee80211_channel *chan_pri);
 int ieee80211_wps_active(uint8_t *wsc_ie);
 void ieee80211_dump_scan_res(struct ieee80211_scan_state *ss);
-int ieee80211_get_type_of_neighborhood(struct ieee80211com *ic);
-void ieee80211_check_type_of_neighborhood(struct ieee80211com *ic);
 
 const struct ieee80211_scanner *ieee80211_scanner_get(enum ieee80211_opmode,
 	int);
diff --git a/include/kernel/net80211/ieee80211_tdls.h b/include/kernel/net80211/ieee80211_tdls.h
index 6890593..907f669 100644
--- a/include/kernel/net80211/ieee80211_tdls.h
+++ b/include/kernel/net80211/ieee80211_tdls.h
@@ -161,9 +161,6 @@
 int
 ieee80211_tdls_disable_peer_link(struct ieee80211_node *ni);
 
-int
-ieee80211_tdls_enable_peer_link(struct ieee80211vap *vap, struct ieee80211_node *ni);
-
 void
 ieee80211_tdls_chan_switch_timeout(unsigned long arg);
 
@@ -231,6 +228,9 @@
 ieee80211_tdls_vdetach(struct ieee80211vap *vap);
 
 int
+ieee80211_tdls_node_join(struct ieee80211vap *vap, struct ieee80211_node *ni);
+
+int
 ieee80211_tdls_node_leave(struct ieee80211vap *vap, struct ieee80211_node *ni);
 
 int
diff --git a/include/kernel/net80211/ieee80211_var.h b/include/kernel/net80211/ieee80211_var.h
index 6264595..42b8745 100644
--- a/include/kernel/net80211/ieee80211_var.h
+++ b/include/kernel/net80211/ieee80211_var.h
@@ -104,6 +104,12 @@
 #define IEEE80211_USEC_TO_MS(x)		((x) / 1000)
 #define IEEE80211_MS_TO_JIFFIES(x)	((x) * HZ / 1000)
 
+#define IEEE80211_SCS_PICK_DFS_ONLY			0x1/* Pick channels from DFS set only*/
+#define IEEE80211_SCS_PICK_NON_DFS_ONLY			0x2/* Pick channels from Non-DFS set only*/
+#define IEEE80211_SCS_PICK_AVAILABLE_ANY_CHANNEL	0x4/* Pick channels from DFS and Non-DFS sets*/
+#define IEEE80211_SCS_PICK_ANYWAY			0x8/* Omit channel margins during channel pick*/
+#define IEEE80211_SCS_PICK_NOT_AVAILABLE_DFS_ONLY	0x10
+
 
 #define IEEE80211_RX_AGG_TIMEOUT_DEFAULT	(IEEE80211_USEC_TO_MS(QTN_RX_REORDER_BUF_TIMEOUT_US))
 
@@ -174,35 +180,6 @@
 #define IEEE80211_EXTENDER_SCAN_MBS_INTERVAL		15	/* seconds */
 #define IEEE80211_EXTENDER_MBS_INVALID_TIMEOUT		5	/* seconds */
 
-#define STA_DFS_STRICT_TX_CHAN_CLOSE_TIME_MAX		1000	/* ms */
-#define STA_DFS_STRICT_TX_CHAN_CLOSE_TIME_MIN		1	/* ms */
-#define STA_DFS_STRICT_TX_CHAN_CLOSE_TIME_DEFAULT	1000	/* ms */
-
-/*
- * All Non-DFS channels are AVAILABLE by default
- * [AP] Any DFS channel is set to AVAILABLE:
- *	(i) only after CAC_DONE,
- *	(ii) and no radar was found
- * [STA] All DFS channels are NON_AVAILABLE by default.
- *
- */
-#define IEEE80211_CHANNEL_STATUS_NON_AVAILABLE			(0x1)
-#define IEEE80211_CHANNEL_STATUS_AVAILABLE			(0x2)
-/* A DFS channel will stay in the NOT_AVAILABLE_RADAR_DETECTED state during the non-occupancy period */
-#define IEEE80211_CHANNEL_STATUS_NOT_AVAILABLE_RADAR_DETECTED	(0x4)
-/* All DFS channels are marked as NOT_AVAILABLE_CAC_REQUIRED by default */
-#define IEEE80211_CHANNEL_STATUS_NOT_AVAILABLE_CAC_REQUIRED	(0x8)
-
-#define ieee80211_is_chan_available(channel_to_check) \
-	(IEEE80211_CHANNEL_STATUS_AVAILABLE == ic->ic_get_chan_availability_status_by_chan_num(ic, (channel_to_check)))
-#define ieee80211_is_chan_not_available(channel_to_check) \
-	(IEEE80211_CHANNEL_STATUS_NON_AVAILABLE == ic->ic_get_chan_availability_status_by_chan_num(ic, (channel_to_check)))
-#define ieee80211_is_chan_radar_detected(channel_to_check) \
-	(IEEE80211_CHANNEL_STATUS_NOT_AVAILABLE_RADAR_DETECTED == ic->ic_get_chan_availability_status_by_chan_num(ic, (channel_to_check)))
-#define ieee80211_is_chan_cac_required(channel_to_check) \
-	(IEEE80211_CHANNEL_STATUS_NOT_AVAILABLE_CAC_REQUIRED == ic->ic_get_chan_availability_status_by_chan_num(ic, (channel_to_check)))
-
-
 /*
  * 802.11 control state is split into a common portion that maps
  * 1-1 to a physical device and one or more "Virtual AP's" (VAP)
@@ -237,11 +214,6 @@
 	IEEE80211_SCS_CNT_MAX,
 };
 
-enum ieee80211_phy_mode{
-        IEEE80211_11AC_ONLY = 0x1,
-        IEEE80211_11N_ONLY = 0x2
-};
-
 #define	IEEE80211_MAX_TDLS_NODES	16
 
 struct ieee80211_tdls_scs_stats {
@@ -269,7 +241,7 @@
 	uint32_t		scs_thrshld_aging_nor;            /* unit: minute */
 	uint32_t		scs_thrshld_aging_dfsreent;       /* unit: minute */
 	uint16_t		scs_enable;	/* 1 - channel switching can be triggered; 0 - don't change channel */
-	int16_t			scs_debug_enable;
+	uint16_t		scs_debug_enable;
 	uint16_t		scs_smpl_enable;
 	uint8_t			scs_stats_on;	/* 1 - scs stats on; 0 - scs stats off */
 	uint8_t			scs_report_only;
@@ -316,7 +288,6 @@
 	uint16_t		scs_as_tx_time_smth_fctr;
 	uint16_t		scs_cca_idle_smthed;
 	uint16_t		scs_cca_idle_smth_fctr;
-	uint16_t		scs_cca_threshold_type;		/* 0:normal, 1:less sensitive, 2:more sensitive */
 
 	ATH_LIST_HEAD(, ieee80211_tdls_scs_entry) scs_tdls_list[IEEE80211_NODE_HASHSIZE];
 	spinlock_t		scs_tdls_lock;
@@ -628,34 +599,6 @@
 	u_int16_t assocs;
 };
 
-struct offchan_protect {
-	struct timer_list offchan_stop_expire;	/* off channel suspend/resume expiration timer */
-	uint32_t offchan_suspend_cnt;	/* off channel suspending counter */
-	unsigned long offchan_timeout;	/* off channel suspending timeout, in jiffies */
-};
-
-struct sta_dfs_info {
-	struct timer_list sta_radar_timer;
-	bool	sta_dfs_radar_detected_timer;
-	int	sta_dfs_radar_detected_channel;
-	unsigned long	sta_dfs_tx_chan_close_time;
-	uint8_t	sta_dfs_strict_mode;
-	bool	sta_dfs_strict_msr_cac;
-	bool	allow_measurement_report;
-};
-
-struct ieee80211_vopt_info {
-	uint8_t state;
-	uint8_t	cur_state;
-	uint8_t	bf;
-	uint8_t	bbf;
-	uint8_t	pppc;
-	uint8_t airfair;
-	uint32_t scs;
-	uint32_t ocac;
-	uint32_t qtm;
-};
-
 struct ieee80211com {
 	/* MATS FIX The member ic_dev is not used in QDRV and should be removed */
 	struct net_device *ic_dev;		/* associated device */
@@ -670,7 +613,6 @@
 	struct ifmedia ic_media;		/* interface media config */
 	u_int8_t ic_myaddr[IEEE80211_ADDR_LEN];
 	struct timer_list ic_inact;		/* mgmt/inactivity timer */
-	struct offchan_protect ic_offchan_protect;
 
 	uint32_t ic_ver_sw;
 	uint16_t ic_ver_hw;
@@ -708,7 +650,6 @@
 	u_int16_t		ic_uapsdmaxtriggers; /* max triggers that could arrive */
 	u_int8_t		ic_coverageclass; /* coverage class */
 	int8_t			ic_pwr_adjust_scancnt; /* Num of scans after which gain settings toggle */
-	uint32_t		ic_bcn_hang_timeout; /* Beacon hang timeout */
 
 	int rts_cts_prot; /* RTS-CTS protection support */
 
@@ -737,11 +678,10 @@
 	struct ieee80211_scs ic_scs; /* SCS related information */
 	struct delayed_work ic_scs_sample_work;	/* SCS (ACI/CCI Detection and Mitigation) workqueue */
 	struct ieee80211_ocac ic_ocac; /* OCAC related information*/
-	uint32_t ic_11n_40_only_mode;
-	uint16_t ic_vht_opmode_notif;	/* Override OpMode Notification IE, for WFA Testbed */
-	uint8_t ic_non_ht_sta;
-	uint8_t ic_ht_20mhz_only_sta;
-	uint8_t ic_non_ht_non_member;
+	u_int8_t ic_non_ht_sta;
+	u_int8_t ic_ht_20mhz_only_sta;
+	u_int8_t ic_non_ht_non_member;
+	u_int32_t ic_11n_40_only_mode;
 	uint8_t ic_pppc_select_enable;
 	uint8_t ic_pppc_select_enable_backup;
 	uint8_t ic_pppc_step_db;
@@ -759,9 +699,8 @@
 	uint8_t ic_dyn_wmm;		/* Dynamic WMM enabled */
 	uint8_t ic_emi_power_switch_enable;
 	uint8_t ic_dfs_channels_deactive; /* Deactive all DFS channels */
+	uint16_t ic_vht_opmode_notif;	/* Override OpMode Notification IE, for WFA Testbed */
 	uint8_t ic_beaconing_scheme;
-	uint8_t ic_dfs_csa_cnt;
-	uint8_t ic_weachan_cac_allowed;
 
 	/*
 	 * Channel state:
@@ -789,11 +728,22 @@
 	struct ieee80211req_csw_record	ic_csw_record;	/* channel switch record */
 	struct ieee80211_chan_occupy_record ic_chan_occupy_record;
 	uint32_t ic_csw_reason;				/* reason for the last channel switch */
-	u_int8_t ic_csw_mac[IEEE80211_ADDR_LEN];	/* client mac addr when SCS channel switch */
 	struct ieee80211_assoc_history ic_assoc_history;
 	u_int8_t ic_chan_avail[IEEE80211_CHAN_BYTES];
 	u_int8_t ic_chan_active[IEEE80211_CHAN_BYTES];
 
+	/* All DFS channels are marked with CAC_NOT_DONE by default */
+#define IEEE80211_CHANNEL_STATUS_NOT_AVAILABLE_CAC_NOT_DONE	(0x1)
+
+#define IEEE80211_CHANNEL_STATUS_NOT_AVAILABLE_RADAR_DETECTED	(0x2)
+
+	/* --> All Non-DFS channels are AVAILABLE by default
+	 * --> Any DFS Channel is set to AVAILABLE
+	 *	(i) only after CAC_DONE,
+	 *      (ii) and no radar was found
+	 */
+#define IEEE80211_CHANNEL_STATUS_AVAILABLE			(0x4)
+
 	u_int8_t ic_chan_availability_status[IEEE80211_CHAN_MAX+1];
 
 	u_int8_t ic_chan_pri_inactive[IEEE80211_CHAN_BYTES];	/* channel not used as primary */
@@ -808,7 +758,6 @@
 	u_int8_t ic_chan_active_80[IEEE80211_CHAN_BYTES];
 	u_int8_t ic_max_system_bw;
 	u_int8_t ic_bss_bw;			/* BSS channel width, in station mode only */
-	struct ieee80211_vopt_info ic_vopt;
 
 	struct ieee80211_channel *ic_curchan;	/* current channel */
 	struct ieee80211_channel *ic_bsschan;	/* bss channel */
@@ -905,7 +854,6 @@
 	u_int8_t ic_cca_chan;			/* channel of cca measurement */
 
 	u_int8_t ic_ieee_alt_chan;		/* if not zero jump to this channel if radar is detected */
-	u_int8_t ic_ieee_best_alt_chan;		/* tracks best alternate chan to fast-switch into if radar is detected */
 	u_int32_t ic_non_occupancy_period;	/* radar non-occupancy period. */
 
 	/* boot time CAC*/
@@ -920,8 +868,7 @@
 
 	u_int32_t ic_rx_agg_timeout;
 	u_int32_t ic_ndpa_dur;
-	u_int32_t ic_su_txbf_pkt_cnt;
-	u_int32_t ic_mu_txbf_pkt_cnt;
+	u_int32_t ic_txbf_pkt_cnt;
 	u_int32_t ic_tx_max_ampdu_size;
 
 	u_int16_t ic_mu_debug_level;
@@ -932,13 +879,6 @@
 	u_int8_t use_non_ht_duplicate_for_mu;
 	u_int8_t rx_bws_support_for_mu_ndpa;
 
-	u_int8_t cca_fix_disable;
-	u_int8_t auto_cca_enable;
-	u_int8_t ic_opmode_bw_switch_en;
-
-	struct muc_tx_stats *ic_muc_tx_stats;
-
-
 	/* virtual ap create/delete */
 	struct ieee80211vap *(*ic_vap_create)(struct ieee80211com *,
 		const char *, int, int, int, struct net_device *);
@@ -1055,15 +995,10 @@
 
 
 	void (*ic_mark_channel_availability_status)(struct ieee80211com *ic, struct ieee80211_channel *chan, uint8_t usable);
-
-	void (*ic_set_chan_availability_status_by_chan_num)(struct ieee80211com *ic,
-			struct ieee80211_channel *chan, uint8_t usable);
-	int (*ic_get_chan_availability_status_by_chan_num)(struct ieee80211com *ic, struct ieee80211_channel *chan);
-
 	void (*ic_mark_channel_dfs_cac_status)(struct ieee80211com *ic, struct ieee80211_channel *chan, u_int32_t cac_flag, bool set);
-	void (*ic_dump_available_channels)(struct ieee80211com *ic);
+	void (*ic_dump_available_channels)(struct ieee80211com *ic, const char *offending_func);
 
-	int (*ic_ap_next_cac)(struct ieee80211com *ic, struct ieee80211vap *vap,
+	void (*ic_ap_next_cac)(struct ieee80211com *ic, struct ieee80211vap *vap,
 			unsigned long cac_period,
 			struct ieee80211_channel **qdrv_radar_cb_cac_chan,
 			u_int32_t flags);
@@ -1073,9 +1008,6 @@
 	void (*ic_set_init_cac_duration)(struct ieee80211com *ic, int val);
 	void (*ic_start_icac_procedure)(struct ieee80211com *ic);
 	void (*ic_stop_icac_procedure)(struct ieee80211com *ic);
-	bool (*ic_chan_compare_equality)(struct ieee80211com *ic,
-					struct ieee80211_channel *curr_chan,
-					struct ieee80211_channel *new_chan);
 
 
 	/* DFS select channel */
@@ -1130,8 +1062,6 @@
 			const struct ieee80211_qvsp_strm_id *strm_id, struct ieee80211_qvsp_strm_dis_attr *attr);
 	void (*ic_vsp_change_stamode)(struct ieee80211com *ic, uint8_t stamode);
 	void (*ic_vsp_configure)(struct ieee80211com *ic, uint32_t index, uint32_t value);
-	void (*ic_vsp_set)(struct ieee80211com *ic, uint32_t index, uint32_t value);
-	int (*ic_vsp_get)(struct ieee80211com *ic, uint32_t index, uint32_t *value);
 
 	/* Callbacks at AP to send commands to sta */
 	void (*ic_vsp_cb_strm_ctrl)(void *token, struct ieee80211_node *node, uint8_t strm_state,
@@ -1237,6 +1167,10 @@
 
 	/* VHT related callbacks */
 	void (*ic_send_vht_grp_id_act)(struct ieee80211vap *vap, struct ieee80211_node *ni);
+	void (*ic_node_mu_grp_update)(struct ieee80211_node *ni, uint8_t grp,
+				      uint8_t pos, uint8_t delete);
+	void (*ic_mu_grp_qmat_update)(struct ieee80211_node *ni, uint8_t grp_id,
+					int delete, int feedback);
 	struct timer_list ic_obss_timer;
 	uint8_t ic_obss_scan_enable;
 	uint8_t ic_obss_scan_count;
@@ -1244,27 +1178,11 @@
 	void (*ic_coex_stats_update)(struct ieee80211com *ic, uint32_t value);
 	struct ieee80211_dm_factor ic_dm_factor;
 	uint32_t ic_vap_default_state;	/* 1 - enabled, 0 - disabled*/
-	int32_t ic_neighbor_count;	/* Neighbor APs' count */
-	uint8_t ic_neighbor_cnt_sparse; /* Threshold of neighbor AP count when it's sparse */
-	uint8_t ic_neighbor_cnt_dense;	/* Threshold of neighbor AP count when it's dense */
 
 	/* tx airtime callbacks */
 	uint32_t (*ic_tx_airtime)(const struct ieee80211_node *ni);
 	uint32_t (*ic_tx_accum_airtime)(const struct ieee80211_node *ni);
 	void     (*ic_tx_airtime_control)(struct ieee80211vap *vap, uint32_t value);
-	uint32_t (*ic_rx_airtime) (const struct ieee80211_node *ni);
-	uint32_t (*ic_rx_accum_airtime) (const struct ieee80211_node *ni);
-	/* mu group update callback */
-	void	(*ic_mu_group_update)(struct ieee80211com *ic, struct qtn_mu_group_update_args *state);
-
-	/* sync rx reorder window on receiving BAR
-	 * 0 - disabled
-	 * 1 - enabled for QTN devices only
-	 * 2 - enabled for all devices
-	 */
-	uint8_t ic_rx_bar_sync;
-	uint8_t bb_deafness_war_disable;
-	struct sta_dfs_info sta_dfs_info;
 };
 
 static __inline__ uint32_t ieee80211_pm_period_tu(const struct ieee80211com *ic)
@@ -1587,7 +1505,6 @@
 	const struct ieee80211_aclator *iv_acl;	/* aclator glue */
 	void *iv_as;				/* private aclator state */
 
-	struct ieee80211_beacon_param_t *param;		/* beacon ie arguments list */
 	struct timer_list iv_swbmiss;		/* software beacon miss timer */
 	u_int16_t iv_swbmiss_period;		/* software beacon miss timer period */
 	struct timer_list iv_swberp;		/* software obss erp protection check timer */
@@ -1673,8 +1590,6 @@
 	ATH_LIST_HEAD(, ieee80211_extender_wds_info) iv_extender_wds_hash[IEEE80211_NODE_HASHSIZE];
 
 	uint8_t                 iv_tx_amsdu;            /* Enable/disable A-MSDU  */
-	uint8_t			iv_tx_amsdu_11n;	/* Enable/disable A-MSDU for 11n nodes */
-	uint8_t			iv_tx_max_amsdu;	/* Max TX A-MSDU */
 
 	/* 802.11u related */
 	uint8_t			interworking;           /* 1 - Enabled, 0 - Disabled */
@@ -1695,7 +1610,6 @@
 	spinlock_t		sample_sta_lock;
 	struct list_head	sample_sta_list;
 	struct bcast_pps_info	bcast_pps;
-	uint8_t			iv_11ac_and_11n_flag;	/* 1 - IEEE80211_AC_ONLY, 2 - IEEE80211_N_ONLY */
 };
 MALLOC_DECLARE(M_80211_VAP);
 
@@ -1830,28 +1744,13 @@
 static inline int
 ieee80211_is_repeater(struct ieee80211com *ic)
 {
+
 	if (!(ic->ic_flags_ext & IEEE80211_FEXT_REPEATER))
 		return 0;
 
 	return 1;
 }
 
-static inline int
-ieee80211_is_repeater_associated(struct ieee80211com *ic)
-{
-	struct ieee80211vap *vap;
-
-	if (!ieee80211_is_repeater(ic))
-		return 0;
-
-	/* 1st VAP is for STA interface */
-	vap = TAILQ_FIRST(&ic->ic_vaps);
-	if (vap && vap->iv_state == IEEE80211_S_RUN)
-		return 1;
-
-	return 0;
-}
-
 #define IEEE80211_COM_UAPSD_ENABLE(_ic)		((_ic)->ic_flags_ext |= IEEE80211_FEXT_UAPSD)
 #define IEEE80211_COM_UAPSD_DISABLE(_ic)	((_ic)->ic_flags_ext &= ~IEEE80211_FEXT_UAPSD)
 #define IEEE80211_COM_UAPSD_ENABLED(_ic)	((_ic)->ic_flags_ext & IEEE80211_FEXT_UAPSD)
@@ -2041,10 +1940,6 @@
 	ifm_change_cb_t, ifm_stat_cb_t);
 void ieee80211_param_to_qdrv(struct ieee80211vap *vap,
 	int param, int value, unsigned char *data, int len);
-void ieee80211_param_from_qdrv(struct ieee80211vap *vap,
-	int param, int *value, unsigned char *data, int *len);
-int ieee80211_param_scs_set(struct net_device *dev, struct ieee80211vap *vap, u_int32_t value);
-int ieee80211_param_ocac_set(struct net_device *dev, struct ieee80211vap *vap, u_int32_t value);
 void get_node_info(void *s, struct ieee80211_node *ni);
 void get_node_assoc_state(void *s, struct ieee80211_node *ni);
 void get_node_ver(void *s, struct ieee80211_node *ni);
@@ -2055,7 +1950,6 @@
 void ieee80211_channel_switch_post(struct ieee80211com *ic);
 void ieee80211_eap_output(struct net_device *dev, const void *eap_msg, int eap_msg_len);
 int ieee80211_blacklist_check(struct ieee80211_node *ni);
-void ieee80211_remove_node_blacklist_timeout(struct ieee80211_node *ni);
 int ieee80211_pwr_adjust(struct ieee80211vap *vap, int rxgain_state);
 void ieee80211_pm_queue_work(struct ieee80211com *ic);
 void ieee80211_beacon_interval_set(struct ieee80211com *ic, int value);
@@ -2075,7 +1969,6 @@
 void ieee80211_scs_show_ranking_stats(struct ieee80211com *ic, int show_input, int show_result);
 void ieee80211_show_initial_ranking_stats(struct ieee80211com *ic);
 void ieee80211_scs_update_ranking_table_by_scan(struct ieee80211com *ic);
-void ieee80211_scs_adjust_cca_threshold(struct ieee80211com *ic);
 int ieee80211_dual_sec_chan_supported(struct ieee80211vap *vap, int chan);
 void ieee80211_update_sec_chan_offset(struct ieee80211_channel *chan, int offset);
 int ieee80211_get_bw(struct ieee80211com *ic);
@@ -2085,7 +1978,6 @@
 int ieee80211_get_max_system_bw(struct ieee80211com *ic);
 int ieee80211_get_max_channel_bw(struct ieee80211com *ic, int channel);
 int ieee80211_get_max_bw(struct ieee80211vap *vap, struct ieee80211_node *ni, uint32_t chan);
-void ieee80211_update_bw_capa(struct ieee80211vap *vap, int bw);
 int ieee80211_get_mu_grp(struct ieee80211com *ic,
 	struct qtn_mu_grp_args *mu_grp_tbl);
 int ieee80211_find_sec_chan(struct ieee80211_channel *chan);
@@ -2099,7 +1991,7 @@
 
 void ieee80211_finish_csa(unsigned long arg);
 int ieee80211_enter_csa(struct ieee80211com *ic, struct ieee80211_channel *chan,
-		void (*finish_csa)(unsigned long arg), uint32_t reason,
+		void (*finish_csa)(unsigned long arg), uint8_t reason,
 		uint8_t csa_count, uint8_t csa_mode, uint32_t flag);
 void ieee80211_obss_scan_timer(unsigned long arg);
 void ieee80211_start_obss_scan_timer(struct ieee80211vap *vap);
@@ -2117,13 +2009,6 @@
 		struct ieee80211_scan_entry *se, uint8_t *pri_chan, uint8_t *sec_chan);
 int ieee80211_20_40_operation_permitted(struct ieee80211vap *vap,
 				uint8_t se_pri_chan, uint8_t se_sec_chan);
-
-void ieee80211_off_channel_timeout(unsigned long arg);
-void ieee80211_off_channel_resume(struct ieee80211vap *vap);
-void ieee80211_off_channel_suspend(struct ieee80211vap *vap, uint32_t timeout);
-int get_max_supported_chwidth(struct ieee80211_node *ni);
-uint8_t recalc_opmode(struct ieee80211_node *ni, uint8_t opmode);
-
 /*
  * Key update synchronization methods.  XXX should not be visible.
  */
@@ -2146,16 +2031,6 @@
 
 	return 1;
 }
-
-static __inline int
-is_ieee80211_chan_valid(struct ieee80211_channel *chan)
-{
-	if (!chan || (chan == IEEE80211_CHAN_ANYC))
-		return 0;
-
-	return 1;
-}
-
 /*
  * XXX these need to be here for IEEE80211_F_DATAPAD
  */
@@ -2196,23 +2071,6 @@
 	return size;
 }
 
-static __inline int
-ieee80211_tx_amsdu_disabled(struct ieee80211_node *ni)
-{
-	struct ieee80211vap *vap = ni->ni_vap;
-
-	if (!vap->iv_tx_amsdu)
-		return 1;
-
-	if (!IEEE80211_NODE_IS_VHT(ni) &&
-			IEEE80211_NODE_IS_HT(ni) &&
-			!vap->iv_tx_amsdu_11n)
-		return 1;
-
-	return 0;
-}
-
-
 #define IEEE80211_MSG_11N	0x80000000	/* 11n mode debug */
 #define	IEEE80211_MSG_DEBUG	0x40000000	/* IFF_DEBUG equivalent */
 #define	IEEE80211_MSG_DUMPPKTS	0x20000000	/* IFF_LINK2 equivalent */
diff --git a/include/qtn/auc_debug_stats.h b/include/qtn/auc_debug_stats.h
index fd26ce5..7323ddc 100755
--- a/include/qtn/auc_debug_stats.h
+++ b/include/qtn/auc_debug_stats.h
@@ -134,7 +134,6 @@
 	uint32_t tx_ctl_pkt_hbm_alloc_fails;
 	uint32_t tx_ctl_pkt_alloc_descr_fails;
 	uint32_t tx_bar_alloc_ctl_pkt_fails;
-	uint32_t tx_valid_bit_not_set;
 
 	uint32_t wmm_ps_tx;
 	uint32_t wmm_ps_tx_null_frames;
diff --git a/include/qtn/lhost_muc_comm.h b/include/qtn/lhost_muc_comm.h
index 2fc2cce..1c147f6 100644
--- a/include/qtn/lhost_muc_comm.h
+++ b/include/qtn/lhost_muc_comm.h
@@ -17,7 +17,6 @@
 #include "muc_txrx_stats.h"
 #include "qtn/qvsp_common.h"
 #include "qtn/shared_defs.h"
-#include "qtn/txbf_common.h"
 
 /* packed definitions for each compiler */
 #if defined(MUC_BUILD) || defined(DSP_BUILD) || defined(AUC_BUILD)
@@ -327,9 +326,6 @@
 #define	IOCTL_DEV_NODE_UPDATE		62	/* Update node information again after association */
 #define IOCTL_DEV_AIRTIME_CONTROL       63      /* control node tx airtime accumulation start|stop */
 #define IOCTL_DEV_SUSPEND_OFF_CHANNEL   64      /* suspend/resume all off-channel mechanisms globally */
-#define IOCTL_DEV_MU_GROUP_UPDATE	65	/* Update MU groups: nodes and qmats */
-#define IOCTL_DEV_FLUSH_DATA		66	/* periodically flush data */
-#define IOCTL_DEV_GET_TX_MAXAMSDU	67	/* get the TX max msdu size */
 
 #define IOCTL_DEV_CMD_MEMDBG_DUMP	1	/* Dump MuC memory */
 #define IOCTL_DEV_CMD_MEMDBG_DUMPCFG	2	/* Configuration for dumping MuC memory */
@@ -412,7 +408,7 @@
 	uint32_t	post_notification_tu;	/* post channel change notification */
 	uint32_t	freq_band;		/* freqency band info */
 	uint32_t	channel;		/* channel to switch to */
-	uint8_t		sta_dfs_strict_mode;
+
 #define QTN_CSA_STATUS_MUC_SCHEDULED		0x00000001
 #define QTN_CSA_STATUS_MUC_ERROR_SCHED		0x00000010
 #define QTN_CSA_STATUS_MUC_PRE			0x00000002
@@ -546,9 +542,6 @@
 	uint32_t	cca_tx;
 	uint32_t	cca_intf;
 	uint32_t	cca_try;
-	uint32_t	cca_pri;
-	uint32_t	cca_sec20;
-	uint32_t	cca_sec40;
 	uint32_t	bcn_rcvd;
 	uint32_t	crc_err;
 	uint32_t	lpre_err;
@@ -556,18 +549,6 @@
 };
 
 #define QTN_SCS_MAX_OC_INFO	32
-struct qtn_scs_data_history {
-#define QTN_SCS_FILTER_WINDOW_SZ	5
-#define QTN_SCS_FILTER_MEDIAN_IDX	(QTN_SCS_FILTER_WINDOW_SZ / 2)
-	uint32_t idx;
-	uint32_t buffer[QTN_SCS_FILTER_WINDOW_SZ];
-};
-
-struct qtn_scs_stats_history {
-	struct qtn_scs_data_history lp_errs[QTN_SCS_MAX_OC_INFO];
-	struct qtn_scs_data_history sp_errs[QTN_SCS_MAX_OC_INFO];
-};
-
 struct qtn_scs_oc_info {
 	uint32_t	off_channel;
 	uint32_t	off_chan_bw_sel;
@@ -578,9 +559,6 @@
 	uint32_t	off_chan_crc_errs;
 	uint32_t	off_chan_sp_errs;
 	uint32_t	off_chan_lp_errs;
-	uint32_t	off_chan_cca_pri;
-	uint32_t	off_chan_cca_sec;
-	uint32_t	off_chan_cca_sec40;
 };
 /* Smart channel selection data shared between Lhost and MuC */
 struct qtn_scs_info {
@@ -592,9 +570,6 @@
 	uint32_t	cca_idle;
 	uint32_t	cca_tx;
 	uint32_t	cca_interference;
-	uint32_t	cca_pri;
-	uint32_t	cca_sec20;
-	uint32_t	cca_sec40;
 	uint32_t	beacon_recvd;
 	uint32_t	tx_usecs;
 	uint32_t	rx_usecs;
@@ -605,7 +580,6 @@
 	uint32_t	valid_index; /* 0 or 1 */
 	struct qtn_scs_info scs_info[2];
 	struct qtn_scs_scan_info scan_info[IEEE80211_CHAN_MAX];
-	struct qtn_scs_stats_history stats_history;
 };
 
 struct qtn_remain_chan_info {
@@ -914,7 +888,6 @@
 	struct wmm_params	wmm_params[WME_NUM_AC];
 	uint8_t	ni_implicit_ba_rx; /* The RX side of the implicit BA. Zero for no implicit RX BA */
 	uint8_t	ni_implicit_ba_tx; /* The TX side of the implicit BA. Zero for no implicit TX BA */
-	uint16_t	ni_raw_bintval;		/* raw beacon interval */
 	uint16_t	ni_implicit_ba_size; /* Size of the implicit BAs */
 	uint8_t	ni_qtn_ie_flags;
 	uint8_t ni_vendor;
@@ -939,15 +912,17 @@
 
 struct qtn_beacon_args
 {
-	struct wmm_params		wmm_params[WME_NUM_AC];
-	uint32_t			bintval;
-	uint32_t			bo_tim_len;
-	uint32_t			bo_htcap;
-	uint32_t			bo_htinfo;
-	uint32_t			bo_vhtcap;
-	uint32_t			bo_vhtop;
-	uint32_t			bc_ie_head;		/* Beacon ie link list head */
-	uint32_t			bc_ie_buf_start;	/* Beacon ie buffer start for MuC */
+	uint32_t	pkt_data;
+	struct wmm_params	wmm_params[WME_NUM_AC];
+	uint32_t	bintval;
+	uint32_t	bo_tim;
+	uint32_t	bo_tim_len;
+	uint32_t	bo_tpc_rep;
+	uint32_t	bo_chanswitch;
+	uint32_t	bo_htcap;
+	uint32_t	bo_htinfo;
+	uint32_t	bo_vhtcap;
+	uint32_t	bo_vhtop;
 };
 
 struct qtn_key {
@@ -994,13 +969,6 @@
 
 #define MUC_RXSTATUS_DONE		0x1
 
-#define MUC_RXSTATUS_MIC_ERR		0x00000002
-#define MUC_RXSTATUS_MIC_ERR_S		1
-#define MUC_RXSTATUS_NCIDX		0x00000FFC
-#define MUC_RXSTATUS_NCIDX_S		2
-#define MUC_RXSTATUS_RXLEN		0xFFFF0000
-#define MUC_RXSTATUS_RXLEN_S		16
-
 struct qtn_link_margin_info {
 	uint32_t	mcs;
 	uint32_t	bw;
@@ -1042,26 +1010,5 @@
 	uint32_t upd_cnt;
 	int32_t rank;
 };
-
-enum grp_op {
-	MU_GRP_NONE = 0,
-	MU_GRP_INST,
-	MU_GRP_DELE,
-};
-
-struct qtn_mu_group_update_args {
-	enum grp_op op;
-	struct upd_grp {
-		int grp_id;
-		unsigned int ap_devid;
-		uint8_t ap_macaddr[IEEE80211_ADDR_LEN];
-		struct upd_nodes {
-			int as_sta;
-			struct ieee80211_vht_mu_grp grp;
-			uint8_t macaddr[IEEE80211_ADDR_LEN];
-		} nodes[QTN_MU_NODES_PER_GROUP];
-	} groups[QTN_MU_QMAT_MAX_SLOTS];
-};
-
 #endif	// _LHOST_MUC_COMM_H
 
diff --git a/include/qtn/mproc_sync.h b/include/qtn/mproc_sync.h
index 8c5e3f5..5f1f9ae 100644
--- a/include/qtn/mproc_sync.h
+++ b/include/qtn/mproc_sync.h
@@ -126,20 +126,30 @@
 RUBY_INLINE int
 _qtn_mproc_3way_tqe_sem_down(enum topaz_mproc_tqe_sem_id cpuid)
 {
-	const uint32_t  set_value = ((cpuid << QTN_MULTI_PROCESSOR_SEMA_KEY_SHIFT) | cpuid);
-	uint32_t        sem_set_cnt = 0;
+	uint32_t	sem_get_cnt = 0;
+	uint32_t	value;
 
+	value = ((cpuid << QTN_MULTI_PROCESSOR_SEMA_KEY_SHIFT) | cpuid);
 	do {
 		/*
 		 * The semaphore bits [3:0] can be set successfully only when it is unset or already
 		 * owned by current cpuid, otherwise the write has no effect.
 		 */
-		qtn_mproc_sync_mem_write(TOPAZ_MPROC_SEMA, set_value);
-		if ((qtn_mproc_sync_mem_read(TOPAZ_MPROC_SEMA) &
-				QTN_MULTI_PROCESS_TQE_SEMA) == cpuid) {
+		qtn_mproc_sync_mem_write(TOPAZ_MPROC_SEMA, value);
+		value = qtn_mproc_sync_mem_read(TOPAZ_MPROC_SEMA);
+
+		if ((value & QTN_MULTI_PROCESS_TQE_SEMA) == cpuid)
 			return 1;
-		}
-	} while (++sem_set_cnt < TQE_SEMA_GET_MAX);
+		/*
+		 * Reading the semaphore returns a owner cpuid or zero in the field if is free.
+		 * Wait until no-one is holding the semaphore.
+		 */
+		do {
+			value = qtn_mproc_sync_mem_read(TOPAZ_MPROC_SEMA);
+			value &= QTN_MULTI_PROCESS_TQE_SEMA;
+		} while (value && (sem_get_cnt++ < TQE_SEMA_GET_MAX));
+
+	} while (sem_get_cnt++ < TQE_SEMA_GET_MAX);
 
 	return 0;
 }
diff --git a/include/qtn/muc_phy_stats.h b/include/qtn/muc_phy_stats.h
index c0734b6..396a796 100644
--- a/include/qtn/muc_phy_stats.h
+++ b/include/qtn/muc_phy_stats.h
@@ -72,12 +72,6 @@
 	uint32_t acks;
 	uint32_t tx_airtime;
 	uint32_t tx_accum_airtime;
-	/*
-	 * The number of data packets transmitted through
-	 * wireless media for each traffic category(TC).
-	 */
-#define WMM_AC_NUM 4
-	uint32_t tx_sent_data_msdu[WMM_AC_NUM];
 };
 
 struct qtn_node_shared_stats_rx {
@@ -102,8 +96,6 @@
 	uint32_t pkts_cum;
 	uint32_t inv_phy_rate_smoothed;
 	uint32_t cost;
-	uint32_t rx_airtime;
-	uint32_t rx_accum_airtime;
 };
 
 /**
diff --git a/include/qtn/muc_txrx_stats.h b/include/qtn/muc_txrx_stats.h
index 2445a86..e103114 100644
--- a/include/qtn/muc_txrx_stats.h
+++ b/include/qtn/muc_txrx_stats.h
@@ -86,7 +86,63 @@
 	 * The number of packets held, waiting for BA to complete.
 	 */
 	u_int32_t	pkt_push_back;
+	u_int32_t	tx_timeout;
 
+	/**
+	 * This counter shows the number of MPDUs or AMPDUs which needed to be retried
+	 * by the hardware.
+	 *
+	 * For an MPDU, it indicates that no ACK was received from the peer.
+	 *
+	 * For an AMPDU, it indicates that no BACK was received from the peer.
+	 * In this case, all subframes within the aggregate failed, and the hardware
+	 * has requeued the entire aggregate for retransmission.
+	 *
+	 * If all hardware retries fail, the packet is returned back to the MAC for
+	 * software retries.
+	 *
+	 * \sa tx_sw_retry.
+	 */
+	u_int32_t	tx_hw_retry;
+
+	/**
+	 * This counter shows the number of non-aggregate MPDUs that have been resent
+	 * by software for retransmission after an initial transmission failure.
+	 *
+	 * Transmission failure is when no ACK has been received from the peer after the
+	 * configured number of hardware retries.
+	 */
+	u_int32_t	tx_sw_retry_noagg;
+
+	/**
+	 * This counter shows the number of AMPDUs that have been repackaged
+	 * by software for retransmission after an initial transmission failure.
+	 *
+	 * Transmission failure is when an AMPDU fails to receive a full block
+	 * ACK (some subframes are incorrectly received).  The repackaged AMPDU
+	 * contains a subset of the subframes from the original AMPDU.
+	 */
+	u_int32_t	tx_sw_retry;
+	u_int32_t	tx_xretry;
+	u_int32_t	tx_pspoll_deagg;
+
+	/**
+	 * This counter shows the number of packets (AMPDU subframes) for which all retry
+	 * attempts have failed.
+	 *
+	 * \note This counter represents genuine packet loss.
+	 */
+	u_int32_t	tx_xattempts;
+
+	/**
+	 * This counter shows the number of non-aggregate MPDUs for which all retry
+	 * attempts have failed.
+	 *
+	 * \note This counter represents genuine packet loss.
+	 */
+	u_int32_t	tx_xattempts_noagg;
+	u_int32_t	tx_done_failed;
+	u_int32_t	tx_cca_defer_cnt;
 	u_int32_t	pkt_to_hw;
 	u_int32_t	pkt_to_hw_deferred;
 	u_int32_t	fd_absent;
@@ -96,7 +152,13 @@
 	u_int32_t	pkt_add_q;
 	u_int32_t	pkt_qtn_hardstart;
 	u_int32_t	tx_reserved;
+	u_int32_t	tx_released;
 	u_int32_t	tx_reserve_fail;
+	u_int32_t	tx_release_err;
+	u_int32_t	tx_mu_reserved;
+	u_int32_t	tx_mu_released;
+	u_int32_t	tx_mu_reserve_fail;
+	u_int32_t	tx_mu_release_err;
 	u_int32_t	txalert_mu_ndp_update;
 	u_int32_t	txalert_mu_rpt_poll;
 	u_int32_t	txalert_mu_queue_full;
@@ -110,6 +172,8 @@
 	u_int32_t	txalert_ndp_update;
 	u_int32_t	tx_ndp_q_occupied;
 	u_int32_t	tx_ndp_start;
+	u_int32_t	txdone_mgmt;
+	u_int32_t	txdone_data;
 	u_int32_t	tx_pwr;
 	u_int32_t	bcn_scheme_power_save;
 	u_int32_t	bcn_scheme;
@@ -141,6 +205,10 @@
 	u_int32_t	ba_del;
 	u_int32_t	fd_free_nodeclean;
 	u_int32_t	msdu_expired;
+	u_int32_t	last_ack_ssq;
+	u_int32_t	last_sent_seq;
+	u_int32_t	ampdu_subframe_failure;
+	u_int32_t	ampdu_subframe_done;
 	u_int32_t	tx_window_locked;
 	u_int32_t	tx_window_failed;
 	u_int32_t	tx_restrict_probe;
@@ -225,11 +293,6 @@
 	uint32_t	qtn_bcn_stop;
 	uint32_t	mu_grp_snd_queue_is_not_empty;
 	uint32_t	mu_prec_snd_queue_is_not_empty;
-	uint32_t	mu_group_delete;
-	uint32_t	mu_group_install;
-	uint32_t	mu_group_rate_node_updates;
-	uint32_t	mu_update_rates_mu;
-	uint32_t	mu_update_rates_su;
 	uint32_t	autocs_sample_bits;
 	uint32_t	autocs_adjust_bits;
 	uint32_t	autocs_step_size;
@@ -754,7 +817,6 @@
 	uint32_t	rxq_desc_chain_empty[QTN_FW_WMAC_RX_QNUM];
 	uint32_t	rx_data_last_seqfrag;
 	uint32_t	rx_data_last_ip_id;
-	uint32_t	rx_opmode_notify;
 
 	/**
 	 * This counter is incremented once per packet which is sent via the
diff --git a/include/qtn/qdrv_sch.h b/include/qtn/qdrv_sch.h
index e19268d..e761234 100644
--- a/include/qtn/qdrv_sch.h
+++ b/include/qtn/qdrv_sch.h
@@ -134,6 +134,63 @@
 	return wme_ac;
 }
 
+static inline uint32_t qdrv_sch_classify_ipv4(struct sk_buff *skb, struct iphdr *iphdr_p)
+{
+	int wme_ac;
+
+	wme_ac = qdrv_sch_tclass_to_ac(iphdr_p->tos);
+
+	QTN_SKB_CB_IPPROTO(skb) = iphdr_p->protocol;
+
+	return wme_ac;
+}
+
+#ifdef CONFIG_IPV6
+static inline uint32_t qdrv_sch_classify_ipv6(struct sk_buff *skb, struct ipv6hdr *ipv6hdr_p)
+{
+	int wme_ac;
+	uint8_t t_class = 0;
+	uint8_t nexthdr;
+
+	t_class = (ipv6hdr_p->priority << 4) | (ipv6hdr_p->flow_lbl[0] >> 4);
+	wme_ac = qdrv_sch_tclass_to_ac(t_class);
+
+	iputil_v6_skip_exthdr(ipv6hdr_p, sizeof(struct ipv6hdr), &nexthdr,
+				(skb->len - ((uint8_t *)ipv6hdr_p - skb->data)), NULL, NULL);
+	QTN_SKB_CB_IPPROTO(skb) = nexthdr;
+
+	return wme_ac;
+}
+#endif
+
+static inline uint32_t qdrv_sch_classify_vlan_tag(struct sk_buff *skb)
+{
+	int wme_ac = WME_AC_BE;
+	struct vlan_ethhdr *vlan_eth = (struct vlan_ethhdr *) skb->data;
+	uint8_t v_pri;
+
+	v_pri = (ntohs(get_unaligned(&vlan_eth->h_vlan_TCI)) >> VLAN_PRI_SHIFT) & VLAN_PRI_MASK;
+	wme_ac = qdrv_sch_tos2ac[v_pri];
+
+	return wme_ac;
+}
+
+/*
+ * Get the max priority between vlan priority and 11p priority
+ */
+static inline uint8_t
+qdrv_sch_get_max_priority(uint8_t vlan_ac, uint8_t ip_ac)
+{
+	uint8_t max_ac = WME_AC_BE;
+
+	if ((vlan_ac <= WME_AC_BK) && (ip_ac <= WME_AC_BK))
+		max_ac = min(vlan_ac, ip_ac);
+	else
+		max_ac = max(vlan_ac, ip_ac);
+
+	return max_ac;
+}
+
 static inline int
 qdrv_sch_classify_ctrl(struct sk_buff *skb)
 {
@@ -155,71 +212,14 @@
 	return 0;
 }
 
-static inline uint8_t qdrv_sch_mask_gettid(uint8_t ifindex, uint8_t dscp)
-{
-	uint8_t index;
-	uint32_t curval;
-	uint8_t	tid;
-
-	index = (dscp >> 1);
-	curval = qdrv_sch_dscp2tid[ifindex][index];
-
-	if (dscp & 0x1)
-		tid  = (curval & 0xf);
-	else
-		tid = (curval >> QDRV_IP_DSCP_MAPPING_SHIFT) & 0xf;
-
-	return tid;
-}
-
-/* Multiple VLAN tags are not currently supported */
-static inline void topaz_tqe_vlan_gettid(void *data, uint8_t *tid, uint8_t *vlan_index)
-{
-	struct vlan_ethhdr *vhd;
-	uint16_t vid = 0;
-	uint8_t ip_dscp = 0;
-	int i;
-	const void *iphdr = NULL;
-	const struct ether_header *eh = data;
-	const uint16_t *ether_type = &eh->ether_type;
-
-	*vlan_index = 0;
-	if (*ether_type == __constant_htons(ETH_P_8021Q)) {
-		ether_type += 2;
-		vhd = data;
-		vid = __constant_htons(vhd->h_vlan_TCI) & VLAN_VID_MASK;
-		for (i = 0; i < qdrv_vap_vlan_max; i++) {
-			if (qdrv_sch_vlan2index[i] == vid) {
-				*vlan_index = i;
-				break;
-			}
-		}
-	}
-
-	iphdr = ether_type + 1;
-	if (*ether_type == __constant_htons(ETH_P_IP)) {
-		const struct qtn_ipv4 *ipv4 = (const struct qtn_ipv4 *) iphdr;
-		ip_dscp = IP_DSCP(ipv4->dscp);
-	} else if (*ether_type == __constant_htons(ETH_P_IPV6)) {
-		const struct qtn_ipv6 *ipv6 = (const struct qtn_ipv6 *) iphdr;
-		ip_dscp = qtn_ipv6_tclass(ipv6);
-	} else if ((*ether_type == __constant_htons(ETH_P_ARP)) || (*ether_type == __constant_htons(ETH_P_PAE))) {
-		*tid = WME_AC_TO_TID(WMM_AC_VO);
-		return;
-	} else {
-		*tid = WME_AC_TO_TID(WMM_AC_BE);
-		return;
-	}
-
-	*tid = qdrv_sch_mask_gettid(*vlan_index, ip_dscp);
-}
+#define qdrv_vlan_tx_tag_present(__skb)      ((__skb)->vlan_tci)
 
 static inline void
 qdrv_sch_classify(struct sk_buff *skb, uint16_t ether_type, uint8_t *data_start)
 {
+	struct iphdr *iphdr_p = (struct iphdr *)data_start;
 	uint8_t wme_ac = WME_AC_BE;
-	uint8_t tid;
-	uint8_t vlan_index;
+	uint8_t vlan_wme_ac = WME_AC_BE;
 
 	if (M_FLAG_ISSET(skb, M_CLASSIFY)) {
 		return;
@@ -228,33 +228,28 @@
 
 	QTN_SKB_CB_ETHERTYPE(skb) = ether_type;
 
-	if (ether_type == __constant_htons(ETH_P_IP)) {
-		struct iphdr *iphdr_p = (struct iphdr *)data_start;
-
+	if (likely(ether_type == __constant_htons(ETH_P_IP))) {
 		if ((skb->len >= (data_start - skb->data) + sizeof(*iphdr_p)) &&
-				(iphdr_p->version == 4))
-			QTN_SKB_CB_IPPROTO(skb) = iphdr_p->protocol;
+				(iphdr_p->version == 4)) {
+			wme_ac = qdrv_sch_classify_ipv4(skb, iphdr_p);
+		}
 	}
+
 #ifdef CONFIG_IPV6
-	else if (ether_type == __constant_htons(ETH_P_IPV6)) {
-		struct ipv6hdr *ipv6hdr_p = (struct ipv6hdr *)data_start;
-
+	if (ether_type == __constant_htons(ETH_P_IPV6)) {
 		if (skb->len >= (data_start - skb->data) + sizeof(struct ipv6hdr) &&
-				(ipv6hdr_p->version == 6)) {
-			uint8_t nexthdr;
-
-			iputil_v6_skip_exthdr(ipv6hdr_p, sizeof(struct ipv6hdr), &nexthdr,
-				(skb->len - ((uint8_t *)ipv6hdr_p - skb->data)), NULL, NULL);
-			QTN_SKB_CB_IPPROTO(skb) = nexthdr;
+				(iphdr_p->version == 6)) {
+			wme_ac = qdrv_sch_classify_ipv6(skb, (struct ipv6hdr *)data_start);
 		}
 	}
 #endif
-
 	if (qdrv_sch_classify_ctrl(skb)) {
 		wme_ac = QTN_AC_MGMT;
-	} else {
-		topaz_tqe_vlan_gettid(skb->data, &tid, &vlan_index);
-		wme_ac = TID_TO_WMM_AC(tid);
+	}
+
+	if (qdrv_vlan_tx_tag_present(skb)) {
+		vlan_wme_ac = qdrv_sch_classify_vlan_tag(skb);
+		wme_ac = qdrv_sch_get_max_priority(vlan_wme_ac, wme_ac);
 	}
 
 	skb->priority = wme_ac;
@@ -410,6 +405,64 @@
 #endif
 }
 
+static inline uint8_t qdrv_sch_mask_gettid(uint8_t ifindex, uint8_t dscp)
+{
+	uint8_t index;
+	uint32_t curval;
+	uint8_t	tid;
+
+	index = (dscp >> 1);
+	curval = qdrv_sch_dscp2tid[ifindex][index];
+
+	if (dscp & 0x1)
+		tid  = (curval & 0xf);
+	else
+		tid = (curval >> QDRV_IP_DSCP_MAPPING_SHIFT) & 0xf;
+
+	return tid;
+}
+
+/* Multiple VLAN tags are not currently supported */
+static inline void topaz_tqe_vlan_gettid(void *data, uint8_t *tid, uint8_t *vlan_index)
+{
+	struct vlan_ethhdr *vhd;
+	uint16_t vid = 0;
+	uint8_t ip_dscp = 0;
+	int i;
+	const void *iphdr = NULL;
+	const struct ether_header *eh = bus_to_virt((uintptr_t) data);
+	const uint16_t *ether_type = &eh->ether_type;
+
+	*vlan_index = 0;
+	if (*ether_type == __constant_htons(ETH_P_8021Q)) {
+		ether_type += 2;
+		vhd = bus_to_virt((uintptr_t) data);
+		vid = __constant_htons(vhd->h_vlan_TCI) & VLAN_VID_MASK;
+		for (i = 0; i < qdrv_vap_vlan_max; i++) {
+			if (qdrv_sch_vlan2index[i] == vid) {
+				*vlan_index = i;
+				break;
+			}
+		}
+	}
+
+	iphdr = ether_type + 1;
+	if (*ether_type == __constant_htons(ETH_P_IP)) {
+		const struct qtn_ipv4 *ipv4 = (const struct qtn_ipv4 *) iphdr;
+		ip_dscp = IP_DSCP(ipv4->dscp);
+	} else if (*ether_type == __constant_htons(ETH_P_IPV6)) {
+		const struct qtn_ipv6 *ipv6 = (const struct qtn_ipv6 *) iphdr;
+		ip_dscp = qtn_ipv6_tclass(ipv6);
+	} else if ((*ether_type == __constant_htons(ETH_P_ARP)) || (*ether_type == __constant_htons(ETH_P_PAE))) {
+		*tid = WME_AC_TO_TID(WMM_AC_VO);
+		return;
+	} else {
+		*tid = WME_AC_TO_TID(WMM_AC_BE);
+		return;
+	}
+
+	*tid = qdrv_sch_mask_gettid(*vlan_index, ip_dscp);
+}
 int qdrv_sch_node_is_active(const struct qdrv_sch_node_band_data *nbd,
 				const struct qdrv_sch_node_data *nd, uint8_t band);
 int qdrv_sch_enqueue_node(struct qdrv_sch_node_data *nd, struct sk_buff *skb,
diff --git a/include/qtn/qtn_auc_stats_fields.h b/include/qtn/qtn_auc_stats_fields.h
index 070c7ad..2016fc5 100644
--- a/include/qtn/qtn_auc_stats_fields.h
+++ b/include/qtn/qtn_auc_stats_fields.h
@@ -1,235 +1,234 @@
-	{ 0xe510124c, "sleep" },
-	{ 0xe5101284, "jiffies" },
-	{ 0xe51033c8, "IRQ_0" },
-	{ 0xe51033cc, "IRQ_1" },
-	{ 0xe51033d0, "IRQ_2" },
-	{ 0xe51033d4, "IRQ_3" },
-	{ 0xe51033d8, "IRQ_4" },
-	{ 0xe51033dc, "IRQ_5" },
-	{ 0xe51033e0, "IRQ_6" },
-	{ 0xe51033e4, "IRQ_7" },
-	{ 0xe51033e8, "IRQ_8" },
-	{ 0xe51033ec, "IRQ_9" },
-	{ 0xe51033f0, "IRQ_10" },
-	{ 0xe51033f4, "IRQ_11" },
-	{ 0xe51033f8, "IRQ_12" },
-	{ 0xe51033fc, "IRQ_13" },
-	{ 0xe5103400, "IRQ_14" },
-	{ 0xe5103404, "IRQ_15" },
-	{ 0xe5103408, "IRQ_16" },
-	{ 0xe510340c, "IRQ_17" },
-	{ 0xe5103410, "IRQ_18" },
-	{ 0xe5103414, "IRQ_19" },
-	{ 0xe5103424,	"task_alive_counters[0]" },
-	{ 0xe5103428,	"task_alive_counters[1]" },
-	{ 0xe510342c,	"task_alive_counters[2]" },
-	{ 0xe5103430,	"task_alive_counters[3]" },
-	{ 0xe5103434,	"task_alive_counters[4]" },
-	{ 0xe5103438,	"task_alive_counters[5]" },
-	{ 0xe510343c,	"task_alive_counters[6]" },
-	{ 0xe5103440,	"task_alive_counters[7]" },
-	{ 0xe5103444,	"task_alive_counters[8]" },
-	{ 0xe5103448,	"task_alive_counters[9]" },
-	{ 0xe510344c,	"task_alive_counters[10]" },
-	{ 0xe5103450,	"task_alive_counters[11]" },
-	{ 0xe5103454,	"task_alive_counters[12]" },
-	{ 0xe5103458,	"task_alive_counters[13]" },
-	{ 0xe510345c,	"task_alive_counters[14]" },
-	{ 0xe5103460,	"task_alive_counters[15]" },
-	{ 0xe5103464,	"task_alive_counters[16]" },
-	{ 0xe5103468,	"task_alive_counters[17]" },
-	{ 0xe510346c,	"task_alive_counters[18]" },
-	{ 0xe5103470,	"task_alive_counters[19]" },
-	{ 0xe5103474,	"task_false_trigger[0]" },
-	{ 0xe5103478,	"task_false_trigger[1]" },
-	{ 0xe510347c,	"task_false_trigger[2]" },
-	{ 0xe5103480,	"task_false_trigger[3]" },
-	{ 0xe5103484,	"task_false_trigger[4]" },
-	{ 0xe5103488,	"task_false_trigger[5]" },
-	{ 0xe510348c,	"task_false_trigger[6]" },
-	{ 0xe5103490,	"task_false_trigger[7]" },
-	{ 0xe5103494,	"task_false_trigger[8]" },
-	{ 0xe5103498,	"task_false_trigger[9]" },
-	{ 0xe510349c,	"task_false_trigger[10]" },
-	{ 0xe51034a0,	"task_false_trigger[11]" },
-	{ 0xe51034a4,	"task_false_trigger[12]" },
-	{ 0xe51034a8,	"task_false_trigger[13]" },
-	{ 0xe51034ac,	"task_false_trigger[14]" },
-	{ 0xe51034b0,	"task_false_trigger[15]" },
-	{ 0xe51034b4,	"task_false_trigger[16]" },
-	{ 0xe51034b8,	"task_false_trigger[17]" },
-	{ 0xe51034bc,	"task_false_trigger[18]" },
-	{ 0xe51034c0,	"task_false_trigger[19]" },
-	{ 0xe51034c4,	"tqew_ac[0]" },
-	{ 0xe51034c8,	"tqew_ac[1]" },
-	{ 0xe51034cc,	"tqew_ac[2]" },
-	{ 0xe51034d0,	"tqew_ac[3]" },
-	{ 0xe51034d4,	"tqew_ac_avail[0]" },
-	{ 0xe51034d8,	"tqew_ac_avail[1]" },
-	{ 0xe51034dc,	"tqew_ac_avail[2]" },
-	{ 0xe51034e0,	"tqew_ac_avail[3]" },
-	{ 0xe51034e4,	"tqew_air_humble" },
-	{ 0xe51034e8,	"tqew_air_suppress" },
-	{ 0xe51034ec,	"tqew_air_use_idletime" },
-	{ 0xe51034f0,	"tqew_air_dequeue_only" },
-	{ 0xe51034f4,	"tqew_pkt_pending_for_txdone" },
-	{ 0xe51034f8,	"tqew_descr_alloc_fail" },
-	{ 0xe51034fc,	"tqew_ring_alloc_fail" },
-	{ 0xe5103500,	"tqew_pop_alloc_fail" },
-	{ 0xe5103504,	"tqew_pop_sw_limit" },
-	{ 0xe5103508,	"tqew_pop_empty" },
-	{ 0xe510350c,	"tqew_available_set" },
-	{ 0xe5103510,	"tqew_available_reset" },
-	{ 0xe5103514,	"tqew_rx" },
-	{ 0xe5103518,	"tqew_drop" },
-	{ 0xe510351c,	"tqew_free" },
-	{ 0xe5103520,	"tqew_buf_invalid" },
-	{ 0xe5103524,	"wmac_tx_done[0]" },
-	{ 0xe5103528,	"wmac_tx_done[1]" },
-	{ 0xe510352c,	"wmac_tx_done[2]" },
-	{ 0xe5103530,	"wmac_tx_done[3]" },
-	{ 0xe5103534,	"agg_aggregate_flag" },
-	{ 0xe5103538,	"agg_aggressive_agg" },
-	{ 0xe510353c,	"hdrs_available_recent_min" },
-	{ 0xe5103540,	"agg_states[0]" },
-	{ 0xe5103544,	"agg_states[1]" },
-	{ 0xe5103548,	"agg_states[2]" },
-	{ 0xe510354c,	"agg_states[3]" },
-	{ 0xe5103550,	"agg_states[4]" },
-	{ 0xe5103554,	"ethq_push" },
-	{ 0xe5103558,	"ethq_pop" },
-	{ 0xe510355c,	"agg_aggregate_mpdu" },
-	{ 0xe5103560,	"agg_aggregate_msdu" },
-	{ 0xe5103564,	"agg_singleton_mpdu" },
-	{ 0xe5103568,	"agg_singleton_mgmt" },
-	{ 0xe510356c,	"agg_singleton_ctl" },
-	{ 0xe5103570,	"agg_singleton_probe" },
-	{ 0xe5103574,	"agg_4K_amsdu" },
-	{ 0xe5103578,	"agg_8K_amsdu" },
-	{ 0xe510357c,	"agg_11K_amsdu" },
-	{ 0xe5103580,	"tx_feedback_success" },
-	{ 0xe5103584,	"tx_feedback_fail" },
-	{ 0xe5103588,	"tx_done_status_success" },
-	{ 0xe510358c,	"tx_done_status_timeout" },
-	{ 0xe5103590,	"tx_done_status_xretry" },
-	{ 0xe5103594,	"tx_done_status_timeout_xretry" },
-	{ 0xe5103598,	"tx_done_pkt_chain_reset" },
-	{ 0xe510359c,	"tx_done_pkt_chain_success" },
-	{ 0xe51035a0,	"tx_done_pkt_chain_drop_tid_down" },
-	{ 0xe51035a4,	"tx_done_pkt_chain_drop_xattempts" },
-	{ 0xe51035a8,	"tx_done_singleton_finish" },
-	{ 0xe51035ac,	"tx_done_singleton_swretry" },
-	{ 0xe51035b0,	"tx_done_aggregate_finish" },
-	{ 0xe51035b4,	"tx_done_aggregate_hwretry" },
-	{ 0xe51035b8,	"tx_done_aggregate_swretry" },
-	{ 0xe51035bc,	"tx_done_mpdu_swretry" },
-	{ 0xe51035c0,	"tx_sample" },
-	{ 0xe51035c4,	"tx_bw_sample" },
-	{ 0xe51035c8,	"tx_swretry_lower_bw" },
-	{ 0xe51035cc,	"tx_swretry_agg_exceed" },
-	{ 0xe51035d0,	"tx_scale_base_20m" },
-	{ 0xe51035d4,	"tx_scale_base_40m" },
-	{ 0xe51035d8,	"tx_scale_base_80m" },
-	{ 0xe51035dc,	"tx_scale_max" },
-	{ 0xe51035e0,	"tx_scale_overstep" },
-	{ 0xe51035e4,	"alloc_tqew_fast" },
-	{ 0xe51035e8,	"free_tqew_fast" },
-	{ 0xe51035ec,	"alloc_tqew_slow" },
-	{ 0xe51035f0,	"free_tqew_slow" },
-	{ 0xe51035f4,	"alloc_tqew_local" },
-	{ 0xe51035f8,	"free_tqew_local" },
-	{ 0xe51035fc,	"alloc_hdr_fast" },
-	{ 0xe5103600,	"free_hdr_fast" },
-	{ 0xe5103604,	"alloc_hdr_slow" },
-	{ 0xe5103608,	"free_hdr_slow" },
-	{ 0xe510360c,	"alloc_msdu_hdr_failed" },
-	{ 0xe5103610,	"alloc_mpdu_hdr_failed" },
-	{ 0xe5103614,	"alloc_tid_superfast" },
-	{ 0xe5103618,	"free_tid_superfast" },
-	{ 0xe510361c,	"alloc_tid_fast" },
-	{ 0xe5103620,	"free_tid_fast" },
-	{ 0xe5103624,	"alloc_tid_slow" },
-	{ 0xe5103628,	"free_tid_slow" },
-	{ 0xe510362c,	"alloc_node_rate_fast" },
-	{ 0xe5103630,	"free_node_rate_fast" },
-	{ 0xe5103634,	"alloc_node_rate_slow" },
-	{ 0xe5103638,	"free_node_rate_slow" },
-	{ 0xe510363c,	"alloc_node_superfast" },
-	{ 0xe5103640,	"free_node_superfast" },
-	{ 0xe5103644,	"alloc_node_fast" },
-	{ 0xe5103648,	"free_node_fast" },
-	{ 0xe510364c,	"alloc_fcs" },
-	{ 0xe5103650,	"free_fcs" },
-	{ 0xe5103654,	"alloc_mac_descr" },
-	{ 0xe5103658,	"free_mac_descr" },
-	{ 0xe510365c,	"tx_mac_push" },
-	{ 0xe5103660,	"tx_mac_idle" },
-	{ 0xe5103664,	"tx_mac_rts" },
-	{ 0xe5103668,	"tx_mac_cts2self" },
-	{ 0xe510366c,	"tx_vlan_drop" },
-	{ 0xe5103670,	"tx_acm_drop" },
-	{ 0xe5103674,	"tx_ps_drop" },
-	{ 0xe5103678,	"ocs_tx_suspend" },
-	{ 0xe510367c,	"ocs_tx_resume" },
-	{ 0xe5103680,	"ocs_singleton_suspend" },
-	{ 0xe5103684,	"ocs_ampdu_suspend" },
-	{ 0xe5103688,	"ocs_frame_created" },
-	{ 0xe510368c,	"pwr_mgmt_awake" },
-	{ 0xe5103690,	"pwr_mgmt_sleep" },
-	{ 0xe5103694,	"pwr_mgmt_tx" },
-	{ 0xe5103698,	"pspoll_rx" },
-	{ 0xe510369c,	"dtim_q_push" },
-	{ 0xe51036a0,	"dtim_q_pop" },
-	{ 0xe51036a4,	"dtim_trigger" },
-	{ 0xe51036a8,	"dtim_q_overflow" },
-	{ 0xe51036ac,	"tx_restrict_dropped" },
-	{ 0xe51036b0,	"tx_throt_dropped" },
-	{ 0xe51036b4,	"tx_block_singleton" },
-	{ 0xe51036b8,	"tx_force_unblock_tid" },
-	{ 0xe51036bc,	"tx_ctl_pkt_hbm_alloc_fails" },
-	{ 0xe51036c0,	"tx_ctl_pkt_alloc_descr_fails" },
-	{ 0xe51036c4,	"tx_bar_alloc_ctl_pkt_fails" },
-	{ 0xe51036c8,	"tx_valid_bit_not_set" },
-	{ 0xe51036cc,	"wmm_ps_tx" },
-	{ 0xe51036d0,	"wmm_ps_tx_null_frames" },
-	{ 0xe51036d4,	"wmm_ps_tx_more_data_frames" },
-	{ 0xe51036d8,	"wmm_ps_tx_eosp_frames" },
-	{ 0xe51036dc,	"mu_tx_su_count" },
-	{ 0xe51036e0,	"mu_tx_send_mu_fail" },
-	{ 0xe51036e4,	"mu_tx_push_count" },
-	{ 0xe51036e8,	"mu_tx_done_count" },
-	{ 0xe51036ec,	"mu_tx_done_succ" },
-	{ 0xe51036f0,	"mu_tx_done_fail" },
-	{ 0xe51036f4,	"mu_tx_sample" },
-	{ 0xe51036f8,	"mu_bar_bitmap_non_zero" },
-	{ 0xe51036fc,	"mu_bar_bitmap_zero" },
-	{ 0xe5103700,	"mu_mac_wmac1_ipc_push" },
-	{ 0xe5103704,	"mu_mac_wmac1_auc_push" },
-	{ 0xe5103708,	"mu_wmac1_resets" },
-	{ 0xe510370c,	"mu_tx_swretry_agg_exceed" },
-	{ 0xe5103710,	"mu_tx_buddy_try" },
-	{ 0xe5103714,	"mu_tx_buddy_fail_wmac" },
-	{ 0xe5103718,	"mu_tx_buddy_fail_ptid" },
-	{ 0xe510371c,	"mu_tx_buddy_fail_rate" },
-	{ 0xe5103720,	"mu_tx_buddy_fail_create_agg" },
-	{ 0xe5103724,	"mu_tx_buddy_mu_only_timeout" },
-	{ 0xe5103728,	"mu_tx_another_q_push_succ" },
-	{ 0xe510372c,	"mu_tx_another_q_push_fail" },
-	{ 0xe5103730,	"mu_tx_buddy_multi_tid" },
-	{ 0xe5103734,	"mu_tx_wmac_0_done_count" },
-	{ 0xe5103738,	"mu_tx_wmac_0_bitmap_non_zero" },
-	{ 0xe510373c,	"mu_tx_wmac_0_bitmap_zero" },
-	{ 0xe5103740,	"mu_tx_wmac_0_done_timeout" },
-	{ 0xe5103744,	"mu_tx_wmac_0_done_succ" },
-	{ 0xe5103748,	"mu_tx_wmac_0_done_fail" },
-	{ 0xe510374c,	"mu_tx_wmac_1_done_succ" },
-	{ 0xe5103750,	"mu_tx_wmac_1_done_fail" },
-	{ 0xe5103754,	"mu_tx_wmac_0_mpdu_total" },
-	{ 0xe5103758,	"mu_tx_wmac_0_mpdu_succ" },
-	{ 0xe510375c,	"mu_tx_wmac_1_mpdu_total" },
-	{ 0xe5103760,	"mu_tx_wmac_1_mpdu_succ" },
-	{ 0xe5103764,	"mu_tx_qnum[0]" },
-	{ 0xe5103768,	"mu_tx_qnum[1]" },
-	{ 0xe510376c,	"mu_tx_qnum[2]" },
-	{ 0xe5103770,	"mu_tx_qnum[3]" },
-	{ 0xe5103774,	"tqe_sema_fails" },
+	{ 0xe5101248, "sleep" },
+	{ 0xe5101280, "jiffies" },
+	{ 0xe5103344, "IRQ_0" },
+	{ 0xe5103348, "IRQ_1" },
+	{ 0xe510334c, "IRQ_2" },
+	{ 0xe5103350, "IRQ_3" },
+	{ 0xe5103354, "IRQ_4" },
+	{ 0xe5103358, "IRQ_5" },
+	{ 0xe510335c, "IRQ_6" },
+	{ 0xe5103360, "IRQ_7" },
+	{ 0xe5103364, "IRQ_8" },
+	{ 0xe5103368, "IRQ_9" },
+	{ 0xe510336c, "IRQ_10" },
+	{ 0xe5103370, "IRQ_11" },
+	{ 0xe5103374, "IRQ_12" },
+	{ 0xe5103378, "IRQ_13" },
+	{ 0xe510337c, "IRQ_14" },
+	{ 0xe5103380, "IRQ_15" },
+	{ 0xe5103384, "IRQ_16" },
+	{ 0xe5103388, "IRQ_17" },
+	{ 0xe510338c, "IRQ_18" },
+	{ 0xe5103390, "IRQ_19" },
+	{ 0xe51033a0,	"task_alive_counters[0]" },
+	{ 0xe51033a4,	"task_alive_counters[1]" },
+	{ 0xe51033a8,	"task_alive_counters[2]" },
+	{ 0xe51033ac,	"task_alive_counters[3]" },
+	{ 0xe51033b0,	"task_alive_counters[4]" },
+	{ 0xe51033b4,	"task_alive_counters[5]" },
+	{ 0xe51033b8,	"task_alive_counters[6]" },
+	{ 0xe51033bc,	"task_alive_counters[7]" },
+	{ 0xe51033c0,	"task_alive_counters[8]" },
+	{ 0xe51033c4,	"task_alive_counters[9]" },
+	{ 0xe51033c8,	"task_alive_counters[10]" },
+	{ 0xe51033cc,	"task_alive_counters[11]" },
+	{ 0xe51033d0,	"task_alive_counters[12]" },
+	{ 0xe51033d4,	"task_alive_counters[13]" },
+	{ 0xe51033d8,	"task_alive_counters[14]" },
+	{ 0xe51033dc,	"task_alive_counters[15]" },
+	{ 0xe51033e0,	"task_alive_counters[16]" },
+	{ 0xe51033e4,	"task_alive_counters[17]" },
+	{ 0xe51033e8,	"task_alive_counters[18]" },
+	{ 0xe51033ec,	"task_alive_counters[19]" },
+	{ 0xe51033f0,	"task_false_trigger[0]" },
+	{ 0xe51033f4,	"task_false_trigger[1]" },
+	{ 0xe51033f8,	"task_false_trigger[2]" },
+	{ 0xe51033fc,	"task_false_trigger[3]" },
+	{ 0xe5103400,	"task_false_trigger[4]" },
+	{ 0xe5103404,	"task_false_trigger[5]" },
+	{ 0xe5103408,	"task_false_trigger[6]" },
+	{ 0xe510340c,	"task_false_trigger[7]" },
+	{ 0xe5103410,	"task_false_trigger[8]" },
+	{ 0xe5103414,	"task_false_trigger[9]" },
+	{ 0xe5103418,	"task_false_trigger[10]" },
+	{ 0xe510341c,	"task_false_trigger[11]" },
+	{ 0xe5103420,	"task_false_trigger[12]" },
+	{ 0xe5103424,	"task_false_trigger[13]" },
+	{ 0xe5103428,	"task_false_trigger[14]" },
+	{ 0xe510342c,	"task_false_trigger[15]" },
+	{ 0xe5103430,	"task_false_trigger[16]" },
+	{ 0xe5103434,	"task_false_trigger[17]" },
+	{ 0xe5103438,	"task_false_trigger[18]" },
+	{ 0xe510343c,	"task_false_trigger[19]" },
+	{ 0xe5103440,	"tqew_ac[0]" },
+	{ 0xe5103444,	"tqew_ac[1]" },
+	{ 0xe5103448,	"tqew_ac[2]" },
+	{ 0xe510344c,	"tqew_ac[3]" },
+	{ 0xe5103450,	"tqew_ac_avail[0]" },
+	{ 0xe5103454,	"tqew_ac_avail[1]" },
+	{ 0xe5103458,	"tqew_ac_avail[2]" },
+	{ 0xe510345c,	"tqew_ac_avail[3]" },
+	{ 0xe5103460,	"tqew_air_humble" },
+	{ 0xe5103464,	"tqew_air_suppress" },
+	{ 0xe5103468,	"tqew_air_use_idletime" },
+	{ 0xe510346c,	"tqew_air_dequeue_only" },
+	{ 0xe5103470,	"tqew_pkt_pending_for_txdone" },
+	{ 0xe5103474,	"tqew_descr_alloc_fail" },
+	{ 0xe5103478,	"tqew_ring_alloc_fail" },
+	{ 0xe510347c,	"tqew_pop_alloc_fail" },
+	{ 0xe5103480,	"tqew_pop_sw_limit" },
+	{ 0xe5103484,	"tqew_pop_empty" },
+	{ 0xe5103488,	"tqew_available_set" },
+	{ 0xe510348c,	"tqew_available_reset" },
+	{ 0xe5103490,	"tqew_rx" },
+	{ 0xe5103494,	"tqew_drop" },
+	{ 0xe5103498,	"tqew_free" },
+	{ 0xe510349c,	"tqew_buf_invalid" },
+	{ 0xe51034a0,	"wmac_tx_done[0]" },
+	{ 0xe51034a4,	"wmac_tx_done[1]" },
+	{ 0xe51034a8,	"wmac_tx_done[2]" },
+	{ 0xe51034ac,	"wmac_tx_done[3]" },
+	{ 0xe51034b0,	"agg_aggregate_flag" },
+	{ 0xe51034b4,	"agg_aggressive_agg" },
+	{ 0xe51034b8,	"hdrs_available_recent_min" },
+	{ 0xe51034bc,	"agg_states[0]" },
+	{ 0xe51034c0,	"agg_states[1]" },
+	{ 0xe51034c4,	"agg_states[2]" },
+	{ 0xe51034c8,	"agg_states[3]" },
+	{ 0xe51034cc,	"agg_states[4]" },
+	{ 0xe51034d0,	"ethq_push" },
+	{ 0xe51034d4,	"ethq_pop" },
+	{ 0xe51034d8,	"agg_aggregate_mpdu" },
+	{ 0xe51034dc,	"agg_aggregate_msdu" },
+	{ 0xe51034e0,	"agg_singleton_mpdu" },
+	{ 0xe51034e4,	"agg_singleton_mgmt" },
+	{ 0xe51034e8,	"agg_singleton_ctl" },
+	{ 0xe51034ec,	"agg_singleton_probe" },
+	{ 0xe51034f0,	"agg_4K_amsdu" },
+	{ 0xe51034f4,	"agg_8K_amsdu" },
+	{ 0xe51034f8,	"agg_11K_amsdu" },
+	{ 0xe51034fc,	"tx_feedback_success" },
+	{ 0xe5103500,	"tx_feedback_fail" },
+	{ 0xe5103504,	"tx_done_status_success" },
+	{ 0xe5103508,	"tx_done_status_timeout" },
+	{ 0xe510350c,	"tx_done_status_xretry" },
+	{ 0xe5103510,	"tx_done_status_timeout_xretry" },
+	{ 0xe5103514,	"tx_done_pkt_chain_reset" },
+	{ 0xe5103518,	"tx_done_pkt_chain_success" },
+	{ 0xe510351c,	"tx_done_pkt_chain_drop_tid_down" },
+	{ 0xe5103520,	"tx_done_pkt_chain_drop_xattempts" },
+	{ 0xe5103524,	"tx_done_singleton_finish" },
+	{ 0xe5103528,	"tx_done_singleton_swretry" },
+	{ 0xe510352c,	"tx_done_aggregate_finish" },
+	{ 0xe5103530,	"tx_done_aggregate_hwretry" },
+	{ 0xe5103534,	"tx_done_aggregate_swretry" },
+	{ 0xe5103538,	"tx_done_mpdu_swretry" },
+	{ 0xe510353c,	"tx_sample" },
+	{ 0xe5103540,	"tx_bw_sample" },
+	{ 0xe5103544,	"tx_swretry_lower_bw" },
+	{ 0xe5103548,	"tx_swretry_agg_exceed" },
+	{ 0xe510354c,	"tx_scale_base_20m" },
+	{ 0xe5103550,	"tx_scale_base_40m" },
+	{ 0xe5103554,	"tx_scale_base_80m" },
+	{ 0xe5103558,	"tx_scale_max" },
+	{ 0xe510355c,	"tx_scale_overstep" },
+	{ 0xe5103560,	"alloc_tqew_fast" },
+	{ 0xe5103564,	"free_tqew_fast" },
+	{ 0xe5103568,	"alloc_tqew_slow" },
+	{ 0xe510356c,	"free_tqew_slow" },
+	{ 0xe5103570,	"alloc_tqew_local" },
+	{ 0xe5103574,	"free_tqew_local" },
+	{ 0xe5103578,	"alloc_hdr_fast" },
+	{ 0xe510357c,	"free_hdr_fast" },
+	{ 0xe5103580,	"alloc_hdr_slow" },
+	{ 0xe5103584,	"free_hdr_slow" },
+	{ 0xe5103588,	"alloc_msdu_hdr_failed" },
+	{ 0xe510358c,	"alloc_mpdu_hdr_failed" },
+	{ 0xe5103590,	"alloc_tid_superfast" },
+	{ 0xe5103594,	"free_tid_superfast" },
+	{ 0xe5103598,	"alloc_tid_fast" },
+	{ 0xe510359c,	"free_tid_fast" },
+	{ 0xe51035a0,	"alloc_tid_slow" },
+	{ 0xe51035a4,	"free_tid_slow" },
+	{ 0xe51035a8,	"alloc_node_rate_fast" },
+	{ 0xe51035ac,	"free_node_rate_fast" },
+	{ 0xe51035b0,	"alloc_node_rate_slow" },
+	{ 0xe51035b4,	"free_node_rate_slow" },
+	{ 0xe51035b8,	"alloc_node_superfast" },
+	{ 0xe51035bc,	"free_node_superfast" },
+	{ 0xe51035c0,	"alloc_node_fast" },
+	{ 0xe51035c4,	"free_node_fast" },
+	{ 0xe51035c8,	"alloc_fcs" },
+	{ 0xe51035cc,	"free_fcs" },
+	{ 0xe51035d0,	"alloc_mac_descr" },
+	{ 0xe51035d4,	"free_mac_descr" },
+	{ 0xe51035d8,	"tx_mac_push" },
+	{ 0xe51035dc,	"tx_mac_idle" },
+	{ 0xe51035e0,	"tx_mac_rts" },
+	{ 0xe51035e4,	"tx_mac_cts2self" },
+	{ 0xe51035e8,	"tx_vlan_drop" },
+	{ 0xe51035ec,	"tx_acm_drop" },
+	{ 0xe51035f0,	"tx_ps_drop" },
+	{ 0xe51035f4,	"ocs_tx_suspend" },
+	{ 0xe51035f8,	"ocs_tx_resume" },
+	{ 0xe51035fc,	"ocs_singleton_suspend" },
+	{ 0xe5103600,	"ocs_ampdu_suspend" },
+	{ 0xe5103604,	"ocs_frame_created" },
+	{ 0xe5103608,	"pwr_mgmt_awake" },
+	{ 0xe510360c,	"pwr_mgmt_sleep" },
+	{ 0xe5103610,	"pwr_mgmt_tx" },
+	{ 0xe5103614,	"pspoll_rx" },
+	{ 0xe5103618,	"dtim_q_push" },
+	{ 0xe510361c,	"dtim_q_pop" },
+	{ 0xe5103620,	"dtim_trigger" },
+	{ 0xe5103624,	"dtim_q_overflow" },
+	{ 0xe5103628,	"tx_restrict_dropped" },
+	{ 0xe510362c,	"tx_throt_dropped" },
+	{ 0xe5103630,	"tx_block_singleton" },
+	{ 0xe5103634,	"tx_force_unblock_tid" },
+	{ 0xe5103638,	"tx_ctl_pkt_hbm_alloc_fails" },
+	{ 0xe510363c,	"tx_ctl_pkt_alloc_descr_fails" },
+	{ 0xe5103640,	"tx_bar_alloc_ctl_pkt_fails" },
+	{ 0xe5103644,	"wmm_ps_tx" },
+	{ 0xe5103648,	"wmm_ps_tx_null_frames" },
+	{ 0xe510364c,	"wmm_ps_tx_more_data_frames" },
+	{ 0xe5103650,	"wmm_ps_tx_eosp_frames" },
+	{ 0xe5103654,	"mu_tx_su_count" },
+	{ 0xe5103658,	"mu_tx_send_mu_fail" },
+	{ 0xe510365c,	"mu_tx_push_count" },
+	{ 0xe5103660,	"mu_tx_done_count" },
+	{ 0xe5103664,	"mu_tx_done_succ" },
+	{ 0xe5103668,	"mu_tx_done_fail" },
+	{ 0xe510366c,	"mu_tx_sample" },
+	{ 0xe5103670,	"mu_bar_bitmap_non_zero" },
+	{ 0xe5103674,	"mu_bar_bitmap_zero" },
+	{ 0xe5103678,	"mu_mac_wmac1_ipc_push" },
+	{ 0xe510367c,	"mu_mac_wmac1_auc_push" },
+	{ 0xe5103680,	"mu_wmac1_resets" },
+	{ 0xe5103684,	"mu_tx_swretry_agg_exceed" },
+	{ 0xe5103688,	"mu_tx_buddy_try" },
+	{ 0xe510368c,	"mu_tx_buddy_fail_wmac" },
+	{ 0xe5103690,	"mu_tx_buddy_fail_ptid" },
+	{ 0xe5103694,	"mu_tx_buddy_fail_rate" },
+	{ 0xe5103698,	"mu_tx_buddy_fail_create_agg" },
+	{ 0xe510369c,	"mu_tx_buddy_mu_only_timeout" },
+	{ 0xe51036a0,	"mu_tx_another_q_push_succ" },
+	{ 0xe51036a4,	"mu_tx_another_q_push_fail" },
+	{ 0xe51036a8,	"mu_tx_buddy_multi_tid" },
+	{ 0xe51036ac,	"mu_tx_wmac_0_done_count" },
+	{ 0xe51036b0,	"mu_tx_wmac_0_bitmap_non_zero" },
+	{ 0xe51036b4,	"mu_tx_wmac_0_bitmap_zero" },
+	{ 0xe51036b8,	"mu_tx_wmac_0_done_timeout" },
+	{ 0xe51036bc,	"mu_tx_wmac_0_done_succ" },
+	{ 0xe51036c0,	"mu_tx_wmac_0_done_fail" },
+	{ 0xe51036c4,	"mu_tx_wmac_1_done_succ" },
+	{ 0xe51036c8,	"mu_tx_wmac_1_done_fail" },
+	{ 0xe51036cc,	"mu_tx_wmac_0_mpdu_total" },
+	{ 0xe51036d0,	"mu_tx_wmac_0_mpdu_succ" },
+	{ 0xe51036d4,	"mu_tx_wmac_1_mpdu_total" },
+	{ 0xe51036d8,	"mu_tx_wmac_1_mpdu_succ" },
+	{ 0xe51036dc,	"mu_tx_qnum[0]" },
+	{ 0xe51036e0,	"mu_tx_qnum[1]" },
+	{ 0xe51036e4,	"mu_tx_qnum[2]" },
+	{ 0xe51036e8,	"mu_tx_qnum[3]" },
+	{ 0xe51036ec,	"tqe_sema_fails" },
diff --git a/include/qtn/qtn_buffers.h b/include/qtn/qtn_buffers.h
index a037e66..de0540d 100644
--- a/include/qtn/qtn_buffers.h
+++ b/include/qtn/qtn_buffers.h
@@ -76,8 +76,8 @@
 #if defined (CONFIG_TOPAZ_PCIE_TARGET)
 #define QTN_BUFS_LHOST_TQE_RX_RING_S	8
 #elif defined (CONFIG_TOPAZ_PCIE_HOST)
-#define QTN_BUFS_LHOST_TQE_RX_RING_S	10
-#elif defined(TOPAZ_VB_CONFIG) || defined(TOPAZ_RGMII_CONFIG) || defined(TOPAZ_VZN_CONFIG)
+#define QTN_BUFS_LHOST_TQE_RX_RING_S	9
+#elif defined (TOPAZ_VB_CONFIG)
 #define QTN_BUFS_LHOST_TQE_RX_RING_S	11
 #else
 #define QTN_BUFS_LHOST_TQE_RX_RING_S	9
diff --git a/include/qtn/qtn_decap.h b/include/qtn/qtn_decap.h
index 90d9bc1..9afffc8 100644
--- a/include/qtn/qtn_decap.h
+++ b/include/qtn/qtn_decap.h
@@ -123,7 +123,7 @@
 			}
 		} else if (tagrx == QVLAN_TAGRX_STRIP) {
 			if (ether_type_l3 == htons(ETHERTYPE_8021Q)) {
-				ether_type_l3 = ((llc[10] << 0) | (llc[11] << 8));
+				ether_type_l3 = ((llc[10] << 0) | (llc[11] << 8)) & QVLAN_MASK_VID;
 				ether_type_eh = ether_type_l3;
 				vlan_hdr = 4;
 			}
diff --git a/include/qtn/qtn_global.h b/include/qtn/qtn_global.h
index 8f4852f..c1f5aba 100644
--- a/include/qtn/qtn_global.h
+++ b/include/qtn/qtn_global.h
@@ -58,8 +58,7 @@
 #define QTN_GLOBAL_RATE_NSS_MAX		4
 #define QTN_2X2_GLOBAL_RATE_NSS_MAX	2
 #define QTN_3X3_GLOBAL_RATE_NSS_MAX	3
-#define QTN_RX_REORDER_BUF_TIMEOUT_US		200000
-#define QTN_RX_REORDER_BUF_TIMEOUT_US_VI	800000
+#define QTN_RX_REORDER_BUF_TIMEOUT_US	800000
 #define QTN_PROBE_RES_MAX_RETRY_COUNT	4
 #define QTN_TX_SWRETRY_AGG_MAX		8	/* high value for zero PER */
 #define QTN_TX_SWRETRY_NOAGG_MAX	1	/* add tx restrict check if this is increased */
@@ -115,12 +114,7 @@
 #define QTN_DBG_FD_FLAG_MASK		0x0000FFFF
 
 #define QTN_HW_UPDATE_NDPA_DUR  0x0
-#define	QTN_SU_TXBF_TX_CNT_DEF_THRSHLD 2
-#define QTN_MU_TXBF_TX_CNT_DEF_THRSHLD 2
-
-#define QTN_RX_BAR_SYNC_DISABLE	0
-#define QTN_RX_BAR_SYNC_QTN	1
-#define QTN_RX_BAR_SYNC_ALL	2
+#define	QTN_TXBF_TX_CNT_DEF_THRSHLD 2
 
 #if (defined(MUC_BUILD) || defined(SYSTEM_BUILD))
 
@@ -334,13 +328,13 @@
 	uint8_t		g_rx_accelerate;
 	uint8_t		g_rx_accel_lu_sa;
 	uint8_t		g_tx_auc;
+	uint16_t	g_tx_maxmpdu;
 	uint8_t		g_tx_ac_inheritance;	/* promote AC_BE traffic to vo/vi */
 	uint8_t         g_txbf_iot;             /* turn on/off TxBF IOT with non QTN node */
 	uint8_t		g_tx_ac_q2q_inheritance;/* promote AC_BE traffic to vo/vi */
 	uint8_t		g_tx_1ss_amsdu_supp;	/* enable-disable 1ss AMSDU support - Non-qtn clients */
 	uint32_t        g_vht_ndpa_dur;         /* manual update VHT NDPA duration, if it is 0, then HW auto update */
-	uint32_t        g_su_txbf_pkt_cnt;      /* Tx operation count threshold to a SU TxBF station */
-	uint32_t        g_mu_txbf_pkt_cnt;      /* Tx operation count threshold to a MU TxBF station */
+	uint32_t        g_txbf_pkt_cnt;         /* Tx operation count threshold to a TxBF station */
 	struct qtn_auto_cca_params	g_auto_cca_params;
 	struct qtn_wowlan_params wowlan_params;
 	uint8_t		g_rx_optim;
@@ -358,7 +352,6 @@
 	uint32_t	g_auto_cs_enable;	/* enable/disable auto cs threshold */
 	uint8_t		g_beaconing_scheme;
 	uint32_t	g_muc_sys_dbg;
-	uint32_t	g_rx_bar_sync;		/* sync rx reorder window on receiving BAR */
 	char		*g_last_field;		/* Add all new fields before this one */
 };
 
@@ -414,13 +407,13 @@
 	1,					\
 	1,					\
 	QTN_TX_AUC_DEFAULT,			\
+	IEEE80211_VHTCAP_MAX_MPDU_11454,	\
 	QTN_AC_BE_INHERIT_VO,			\
 	QTN_TXBF_IOT_ENABLE,			\
 	QTN_AC_BE_INHERIT_Q2Q_ENABLE,		\
 	QTN_TX_AMSDU_DISABLED,			\
 	QTN_HW_UPDATE_NDPA_DUR,			\
-	QTN_SU_TXBF_TX_CNT_DEF_THRSHLD,	        \
-	QTN_MU_TXBF_TX_CNT_DEF_THRSHLD,	        \
+	QTN_TXBF_TX_CNT_DEF_THRSHLD,		\
 	QTN_AUTO_CCA_PARARMS_DEFAULT,		\
 	{0, 0, 0x0842, 0xffff},			\
 	0,					\
@@ -438,7 +431,6 @@
 	QTN_AUTO_CS_ENABLE,			\
 	0,					\
 	0,					\
-	QTN_RX_BAR_SYNC_QTN,			\
 	"end"					\
 }
 
@@ -448,8 +440,6 @@
 extern struct qtn_cca_stats g_qtn_cca_stats;
 extern uint32_t g_qtn_rxtime_usecs;
 extern uint32_t g_qtn_txtime_usecs;
-extern uint8_t g_rf_mixer_gain;
-extern uint8_t g_afe_pga_gain; 
 extern uint32_t g_rf_xmit_status;
 extern int vlan_enabled_bus;
 
diff --git a/include/qtn/qtn_muc_stats_print.h b/include/qtn/qtn_muc_stats_print.h
index cfbec57..6c663f9 100644
--- a/include/qtn/qtn_muc_stats_print.h
+++ b/include/qtn/qtn_muc_stats_print.h
@@ -11,6 +11,16 @@
 	"pkt_before_encap", \
 	"pkt_after_encap", \
 	"pkt_push_back", \
+	"tx_timeout", \
+	"tx_hw_retry", \
+	"tx_sw_retry_noagg", \
+	"tx_sw_retry", \
+	"tx_xretry", \
+	"tx_pspoll_deagg", \
+	"tx_xattempts", \
+	"tx_xattempts_noagg", \
+	"tx_done_failed", \
+	"tx_cca_defer_cnt", \
 	"pkt_to_hw", \
 	"pkt_to_hw_deferred", \
 	"fd_absent", \
@@ -20,7 +30,13 @@
 	"pkt_add_q", \
 	"pkt_qtn_hardstart", \
 	"tx_reserved", \
+	"tx_released", \
 	"tx_reserve_fail", \
+	"tx_release_err", \
+	"tx_mu_reserved", \
+	"tx_mu_released", \
+	"tx_mu_reserve_fail", \
+	"tx_mu_release_err", \
 	"txalert_mu_ndp_update", \
 	"txalert_mu_rpt_poll", \
 	"txalert_mu_queue_full", \
@@ -34,6 +50,8 @@
 	"txalert_ndp_update", \
 	"tx_ndp_q_occupied", \
 	"tx_ndp_start", \
+	"txdone_mgmt", \
+	"txdone_data", \
 	"tx_pwr", \
 	"bcn_scheme_power_save", \
 	"bcn_scheme", \
@@ -51,6 +69,10 @@
 	"ba_del", \
 	"fd_free_nodeclean", \
 	"msdu_expired", \
+	"last_ack_ssq", \
+	"last_sent_seq", \
+	"ampdu_subframe_failure", \
+	"ampdu_subframe_done", \
 	"tx_window_locked", \
 	"tx_window_failed", \
 	"tx_restrict_probe", \
@@ -131,11 +153,6 @@
 	"qtn_bcn_stop", \
 	"mu_grp_snd_queue_is_not_empty", \
 	"mu_prec_snd_queue_is_not_empty", \
-	"mu_group_delete", \
-	"mu_group_install", \
-	"mu_group_rate_node_updates", \
-	"mu_update_rates_mu", \
-	"mu_update_rates_su", \
 	"autocs_sample_bits", \
 	"autocs_adjust_bits", \
 	"autocs_step_size", \
@@ -400,7 +417,6 @@
 	"rxq_desc_chain_empty[2]", \
 	"rx_data_last_seqfrag", \
 	"rx_data_last_ip_id", \
-	"rx_opmode_notify", \
 	"accel_l2_ext_filter", \
 	"accel_mc_send_l2_ext_filter", \
 	"accel_mc_drop_l2_ext_filter", \
diff --git a/include/qtn/qtn_skb_cb.h b/include/qtn/qtn_skb_cb.h
index eed19e2..41da785 100644
--- a/include/qtn/qtn_skb_cb.h
+++ b/include/qtn/qtn_skb_cb.h
@@ -39,9 +39,7 @@
 #define M_ENQUEUED_MUC		0x1000	/* Enqueued to MuC */
 #define	M_TX_DONE_IMM_INT	0x2000	/* Immediately interrupt lhost when tx done */
 #define M_VLAN_TAGGED		0x4000	/* skb belongs to some VLAN */
-#define M_ORIG_OUTSIDE		0x8000	/* skb is not from local protocol stack */
-#define M_ORIG_BR		0x10000	/* skb is sent from bridge interfaces */
-#define M_NO_L2_LRN		0x20000	/* MAC learning disabled */
+#define M_VLAN_TAG_OWE		0x8000	/* VLAN tag is stripped of this skb */
 };
 
 #define QTN_SKB_ENCAP_ETH		0
diff --git a/include/qtn/qtn_vlan.h b/include/qtn/qtn_vlan.h
index ca1c220..f9d71e4 100644
--- a/include/qtn/qtn_vlan.h
+++ b/include/qtn/qtn_vlan.h
@@ -22,7 +22,6 @@
 #define QVLAN_MODE_HYBRID		2
 #define QVLAN_MODE_DYNAMIC		3
 #define QVLAN_MODE_MAX			QVLAN_MODE_DYNAMIC
-#define QVLAN_MODE_DISABLED		(QVLAN_MODE_MAX + 1)
 #define QVLAN_SHIFT_MODE		16
 #define QVLAN_MASK_MODE			0xffff0000
 #define QVLAN_MASK_VID			0x00000fff
@@ -100,7 +99,6 @@
 	struct qtn_vlan_stats ig_drop;
 	struct qtn_vlan_stats eg_pass;
 	struct qtn_vlan_stats eg_drop;
-	struct qtn_vlan_stats magic_invalid;
 	void		*user_data;
 };
 #define QVLAN_IS_DYNAMIC(vdev)		((vdev)->flags & QVLAN_DEV_F_DYNAMIC)
@@ -140,10 +138,6 @@
 	return (shift << QVLAN_TAGRX_BITSHIFT);
 }
 
-/*
- * Must be in sync with qcsapi_vlan_config in qcsapi.h
- *  -- Whenever 'struct qtn_vlan_config' changes, qcsapi.h changes as well
- */
 struct qtn_vlan_config {
 	uint32_t	vlan_cfg;
 	union {
@@ -264,6 +258,25 @@
 	return pkt;
 }
 
+RUBY_INLINE int
+qtn_vlan_magic_check(struct qtn_vlan_pkt *pkt)
+{
+#define QVLAN_EGRESS_MAGIC_MSG	"VLAN-egress: magic number incorrect(0x%04x)\n"
+
+	if (unlikely(pkt->magic != QVLAN_PKT_MAGIC)) {
+#if defined (__KERNEL__)
+		printk(KERN_WARNING QVLAN_EGRESS_MAGIC_MSG, pkt->magic);
+#elif defined(AUC_BUILD)
+		auc_os_printf(QVLAN_EGRESS_MAGIC_MSG, pkt->magic);
+#elif defined(MUC_BUILD)
+		uc_printk(QVLAN_EGRESS_MAGIC_MSG, pkt->magic);
+#endif
+		return 0;
+	}
+
+	return 1;
+}
+
 RUBY_INLINE void
 qtn_vlan_inc_stats(struct qtn_vlan_stats *stats) {
 #if defined(__KERNEL__)
@@ -276,17 +289,6 @@
 }
 
 RUBY_INLINE int
-qtn_vlan_magic_check(struct qtn_vlan_dev *outdev, struct qtn_vlan_pkt *pkt)
-{
-	if (unlikely(pkt->magic != QVLAN_PKT_MAGIC)) {
-		qtn_vlan_inc_stats(&outdev->magic_invalid);
-		return 0;
-	}
-
-	return 1;
-}
-
-RUBY_INLINE int
 qtn_vlan_vlanid_check(struct qtn_vlan_dev *vdev, uint16_t ncidx, uint16_t vlanid)
 {
 	if (QVLAN_IS_DYNAMIC(vdev))
@@ -300,7 +302,7 @@
 {
 	struct qtn_vlan_pkt *pkt = qtn_vlan_get_info(data);
 
-	if (!qtn_vlan_magic_check(outdev, pkt)
+	if (!qtn_vlan_magic_check(pkt)
 			|| (pkt->vlan_info & QVLAN_SKIP_CHECK)
 			|| qtn_vlan_vlanid_check(outdev, ncidx, pkt->vlan_info & QVLAN_MASK_VID)) {
 		qtn_vlan_inc_stats(&outdev->eg_pass);
@@ -358,6 +360,16 @@
 }
 #endif
 
+RUBY_INLINE int
+qtn_vlancfg_reform(struct qtn_vlan_config *vcfg)
+{
+	/* remove 0,15,16,31 bits to restore vlan_cfg */
+	vcfg->vlan_cfg &= 0x7ffe7ffe;
+	vcfg->vlan_cfg >>= 1;
+
+	return ((vcfg->vlan_cfg & QVLAN_MASK_MODE) >> QVLAN_SHIFT_MODE);
+}
+
 #if defined(__KERNEL__)
 extern uint8_t vlan_enabled;
 extern struct qtn_vlan_dev *vdev_tbl_lhost[VLAN_INTERFACE_MAX];
@@ -384,8 +396,9 @@
 extern int switch_vlan_set_node(struct qtn_vlan_dev *vdev, uint16_t ncidx, uint16_t vlan);
 extern int switch_vlan_clr_node(struct qtn_vlan_dev *vdev, uint16_t ncidx);
 
-extern struct sk_buff *switch_vlan_to_proto_stack(struct sk_buff *, int copy);
-extern struct sk_buff *switch_vlan_from_proto_stack(struct sk_buff *, struct qtn_vlan_dev *, uint16_t ncidx, int copy);
+extern int switch_vlan_is_local(const uint8_t *data);
+extern struct sk_buff *switch_vlan_strip_tag(struct sk_buff *, int copy);
+extern struct sk_buff *switch_vlan_restore_tag(struct sk_buff *, int copy);
 extern void switch_vlan_reset(void);
 extern void switch_vlan_dev_reset(struct qtn_vlan_dev *vdev, uint8_t mode);
 extern void switch_vlan_emac_to_lhost(uint32_t enable);
diff --git a/include/qtn/qvsp.h b/include/qtn/qvsp.h
index d982684..9c52eb3 100644
--- a/include/qtn/qvsp.h
+++ b/include/qtn/qvsp.h
@@ -113,8 +113,6 @@
 void qvsp_cmd_strm_state_set(struct qvsp_s *qvsp, uint8_t strm_state,
 			const struct ieee80211_qvsp_strm_id *strm_id, struct ieee80211_qvsp_strm_dis_attr *attr);
 void qvsp_cmd_vsp_configure(struct qvsp_s *qvsp, uint32_t index, uint32_t value);
-void qvsp_cmd_vsp_cfg_set(struct qvsp_s *qvsp, uint32_t index, uint32_t value);
-int qvsp_cmd_vsp_cfg_get(struct qvsp_s *qvsp, uint32_t index, uint32_t *value);
 void qvsp_fat_set(struct qvsp_s *qvsp, uint32_t fat, uint32_t intf_ms, uint8_t chan);
 void qvsp_node_del(struct qvsp_s *qvsp, struct ieee80211_node *ni);
 void qvsp_reset(struct qvsp_s *qvsp);
diff --git a/include/qtn/shared_defs.h b/include/qtn/shared_defs.h
index 780e5ec..ee1483a 100644
--- a/include/qtn/shared_defs.h
+++ b/include/qtn/shared_defs.h
@@ -114,7 +114,6 @@
 	IEEE80211_SCS_SET_PMBL_ERR_THRSHLD,
 	IEEE80211_SCS_SET_CCA_INTF_DFS_MARGIN,
 	IEEE80211_SCS_SET_LEAVE_DFS_CHAN_MTRC_MRGN,
-	IEEE80211_SCS_SET_CCA_THRESHOLD_TYPE,
 	IEEE80211_SCS_SET_MAX
 };
 
@@ -261,17 +260,6 @@
 
 #define	IEEE80211_REMAIN_CHAN_MIN_RSV_PERD	2
 
-#define IEEE80211_SCS_UNSTABLE_INTF			0x00000001
-#define IEEE80211_SCS_UNSTABLE_INTF_OUTDATED		0x00000002
-#define IEEE80211_SCS_UNSTABLE_INTF_INVALID		0x00000004
-#define IEEE80211_SCS_UNSTABLE_IDLE			0x00000008
-#define IEEE80211_SCS_UNSTABLE_IDLE_OUTDATED		0x00000010
-#define IEEE80211_SCS_UNSTABLE_OTHERSTIME		0x00000020
-#define IEEE80211_SCS_UNSTABLE_OTHERSTIME_OUTDATED	0x00000040
-#define IEEE80211_SCS_UNSTABLE_TDLS_TX			0x00000080
-#define IEEE80211_SCS_UNSTABLE_TDLS_RX			0x00000100
-#define IEEE80211_SCS_UNSTABLE_TDLS_OUTDATED		0x00000200
-
 enum ieee80211_scs_update_mode {
 	IEEE80211_SCS_OFFCHAN,		/* off-channel, use smoothing and omit current channel */
 	IEEE80211_SCS_COCHAN,		/* co-channel mode */
@@ -455,9 +443,8 @@
 #define IEEE80211_NODE_TDLS_PTI_PENDING	0x0002	/* PTI request xmit to peer but not responsed */
 #define IEEE80211_NODE_UAPSD_SP_IN_PROGRESS	0x0004	/* U-APSD SP in progress */
 #define IEEE80211_NODE_TDLS_PTI_RESP	0x0008	/* PTI response frame received */
-#define	IEEE80211_NODE_TDLS_AUTH	0x0010	/* authorized for TDLS link data */
 
-#define	IEEE80211_NODE_TDLS_PTI_MASK	0x000B	/* Mask for TDLS PTI bits */
+#define	IEEE80211_NODE_TDLS_MASK	0x000B	/* Mask for TDLS bits */
 
 #define QTN_VAP_PRIORITY_RESERVED	2	/* reserve the low values for internal use */
 #define QTN_VAP_PRIORITY_NUM		4
@@ -478,7 +465,7 @@
 #define QTN_IS_REALTEK_NODE		0x0000100
 #define	QTN_NODE_TX_RESTRICTED		0x0000200 /* restricted tx enabled */
 #define	QTN_NODE_TX_RESTRICT_RTS	0x0000400 /* use RTS to confirm node is lost */
-#define QTN_OPTI_NODE			0x0000800
+#define QTN_IS_NO_RXAMSDU_NO_BF_NODE	0x0000800
 #define QTN_NODE_RXAMSDU_SUPPORT	0x0001000 /* node support TX amsdu */
 #define QTN_NODE_11N_TXAMSDU_OFF	0x0002000
 #define	QTN_NODE_TXOP_RESTRICTED	0x0004000
@@ -596,13 +583,6 @@
 /**
  * Reason for channel change
  */
-#define CSW_REASON_MASK 0xff
-#define CSW_SCS_FLAG_SHIFT 16
-#define CSW_SCS_FLAG_MASK 0xff0000
-#define CSW_SCS_FLAG_STRING_MAX 64
-
-#define	CSW_REASON_GET_SCS_FLAG(_reason) (((_reason) & CSW_SCS_FLAG_MASK) >> CSW_SCS_FLAG_SHIFT)
-#define CSW_REASON_SET_SCS_FLAG(_scs_flag, _reason)	((((_scs_flag) << CSW_SCS_FLAG_SHIFT) & CSW_SCS_FLAG_MASK) | (_reason))
 enum ieee80211_csw_reason {
 	/**
 	 * Reason is unknown
diff --git a/include/qtn/topaz_fwt_cpuif.h b/include/qtn/topaz_fwt_cpuif.h
index e207e6a..f42926b 100644
--- a/include/qtn/topaz_fwt_cpuif.h
+++ b/include/qtn/topaz_fwt_cpuif.h
@@ -401,7 +401,7 @@
 }
 
 RUBY_INLINE void topaz_fwt_sw_mcast_node_set(struct topaz_fwt_sw_mcast_entry *const e,
-						const uint8_t port, const uint16_t node)
+						const uint8_t port, const uint8_t node)
 {
 	if (port == TOPAZ_TQE_WMAC_PORT) {
 		e->node_bitmap[node / TOPAZ_BITS_PER_WD] |= (1 << (node % TOPAZ_BITS_PER_WD));
@@ -409,7 +409,7 @@
 }
 
 RUBY_INLINE void topaz_fwt_sw_mcast_node_clear(struct topaz_fwt_sw_mcast_entry *const e,
-						const uint8_t port, const uint16_t node)
+						const uint8_t port, const uint8_t node)
 {
 	if (port == TOPAZ_TQE_WMAC_PORT) {
 		e->node_bitmap[node / TOPAZ_BITS_PER_WD] &= ~(1 << (node % TOPAZ_BITS_PER_WD));
@@ -426,9 +426,10 @@
 	return &fwt[index];
 }
 
-RUBY_INLINE struct topaz_fwt_sw_mcast_entry *topaz_fwt_sw_mcast_ff_entry_get(void)
+RUBY_INLINE struct topaz_fwt_sw_mcast_entry *topaz_fwt_sw_mcast_ff_entry_get(uint8_t vap_idx)
 {
-	return (void *)(RUBY_DRAM_BEGIN + TOPAZ_FWT_MCAST_TQE_FF_BASE);
+	return (void *)(RUBY_DRAM_BEGIN + TOPAZ_FWT_MCAST_TQE_FF_BASE +
+			(vap_idx * TOPAZ_FWT_MCAST_TQE_ENT_SIZE));
 }
 
 RUBY_INLINE struct topaz_fwt_sw_mcast_entry *topaz_fwt_sw_mcast_entry_get(uint16_t index)
@@ -455,6 +456,29 @@
 	return bits_set;
 }
 
+RUBY_INLINE uint32_t topaz_fwt_sw_mcast_enqueues(const struct topaz_fwt_sw_mcast_entry *const e,
+		uint8_t port_bitmap, const uint8_t in_port, const uint8_t in_node)
+{
+	uint32_t enqueues = 0;
+	uint8_t i;
+
+	/* Exclude input port. If WMAC, the port doesn't contribute, only nodes. */
+	port_bitmap &= ~((1 << in_port) | (1 << TOPAZ_TQE_WMAC_PORT));
+	enqueues += topaz_fwt_sw_count_bits(port_bitmap);
+
+	/* add wmac nodes */
+	for (i = 0; i < ARRAY_SIZE(e->node_bitmap) ; i++) {
+		enqueues += topaz_fwt_sw_count_bits(e->node_bitmap[i]);
+	}
+
+	/* must exclude the input node */
+	if (topaz_fwt_sw_mcast_node_is_set(e, in_port, in_node)) {
+		--enqueues;
+	}
+
+	return enqueues;
+}
+
 RUBY_INLINE void __topaz_fwt_hash_set(int enable)
 {
 	uint32_t reg = enable ? TOPAZ_FWT_HASH_CTRL_ENABLE : 0;
diff --git a/include/qtn/topaz_fwt_db.h b/include/qtn/topaz_fwt_db.h
index 2c9c54b..9f47d16 100644
--- a/include/qtn/topaz_fwt_db.h
+++ b/include/qtn/topaz_fwt_db.h
@@ -97,9 +97,9 @@
 	return NULL;
 }
 
-static inline struct topaz_fwt_sw_mcast_entry *fwt_db_get_sw_mcast_ff(void)
+static inline struct topaz_fwt_sw_mcast_entry *fwt_db_get_sw_mcast_ff(uint8_t vap_idx)
 {
-	return topaz_fwt_sw_mcast_ff_entry_get();
+	return topaz_fwt_sw_mcast_ff_entry_get(vap_idx);
 }
 
 static inline void topaz_fwt_sw_alias_table_flush(struct topaz_fwt_sw_alias_table *p)
diff --git a/include/qtn/topaz_fwt_sw.h b/include/qtn/topaz_fwt_sw.h
index 0267b16..739413f 100644
--- a/include/qtn/topaz_fwt_sw.h
+++ b/include/qtn/topaz_fwt_sw.h
@@ -37,14 +37,14 @@
  * @param node_num: node number
  * @param vap_idx: vap index
  */
-void fwt_sw_register_node(uint16_t node_num);
+void fwt_sw_register_node(uint8_t node_num, uint8_t vap_idx);
 
 /*
  * Unregister a node
  * @param node_num: node number
  * @param vap_idx: vap index
  */
-void fwt_sw_unregister_node(uint16_t node_num);
+void fwt_sw_unregister_node(uint8_t node_num, uint8_t vap_idx);
 
 /*
  * Add device to the FWT.
diff --git a/include/qtn/topaz_shared_params.h b/include/qtn/topaz_shared_params.h
index f2dc0cb..a673848 100644
--- a/include/qtn/topaz_shared_params.h
+++ b/include/qtn/topaz_shared_params.h
@@ -54,14 +54,13 @@
 enum shared_params_auc_ipc_cmd
 {
 	SHARED_PARAMS_IPC_NONE_CMD		= 0,
-
-	/* begining of M2A IPC config commands */
-	SHARED_PARAMS_IPC_M2A_CFG_PARAMS_MIN,
-	SHARED_PARAMS_IPC_M2A_SLOW_NODE_CREATE_CMD,
+	SHARED_PARAMS_IPC_M2A_SRESET_BEGIN_CMD,
+	SHARED_PARAMS_IPC_M2A_SRESET_END_CMD,
 	SHARED_PARAMS_IPC_M2A_NODE_CREATE_CMD,
+	SHARED_PARAMS_IPC_M2A_SLOW_NODE_CREATE_CMD,
 	SHARED_PARAMS_IPC_M2A_NODE_DESTROY_CMD,
-	SHARED_PARAMS_IPC_M2A_SLOW_TID_CREATE_CMD,
 	SHARED_PARAMS_IPC_M2A_TID_CREATE_CMD,
+	SHARED_PARAMS_IPC_M2A_SLOW_TID_CREATE_CMD,
 	SHARED_PARAMS_IPC_M2A_TID_DESTROY_CMD,
 	SHARED_PARAMS_IPC_M2A_TID_ACTIVATE_CMD,
 	SHARED_PARAMS_IPC_M2A_TID_DEACTIVATE_CMD,
@@ -73,23 +72,17 @@
 	SHARED_PARAMS_IPC_M2A_TX_AGG_TIMEOUT_CMD,
 	SHARED_PARAMS_IPC_M2A_TX_DBG_CMD,
 	SHARED_PARAMS_IPC_M2A_TX_QOS_SCH_CMD,
-	SHARED_PARAMS_IPC_M2A_TX_AGG_DURATION,
-	SHARED_PARAMS_IPC_M2A_FCS_GIVE_CMD,
+	SHARED_PARAMS_IPC_M2A_PAUSE_ON_CMD,
+	SHARED_PARAMS_IPC_M2A_PAUSE_OFF_CMD,
 	SHARED_PARAMS_IPC_M2A_NODE_RATEDATA_CHANGE_CMD,
+	SHARED_PARAMS_IPC_M2A_FCS_GIVE_CMD,
 	SHARED_PARAMS_IPC_M2A_OCS_TX_SUSPEND_CMD,
 	SHARED_PARAMS_IPC_M2A_TQEW_DESCR_LIMIT_CMD,
 	SHARED_PARAMS_IPC_M2A_ENABLE_VLAN_CMD,
 	SHARED_PARAMS_IPC_M2A_MU_GRP_UPDATE_CMD,
+	SHARED_PARAMS_IPC_M2A_MU_QMAT_UPDATE_CMD,
 	SHARED_PARAMS_IPC_M2A_MU_DBG_FLAG_UPDATE_CMD,
 	SHARED_PARAMS_IPC_M2A_MU_AIRTIME_PADDING_UPDATE_CMD,
-	/* end of M2A IPC config commands */
-	SHARED_PARAMS_IPC_M2A_CFG_PARAMS_MAX,
-
-	SHARED_PARAMS_IPC_M2A_MU_QMAT_UPDATE_CMD,
-	SHARED_PARAMS_IPC_M2A_SRESET_BEGIN_CMD,
-	SHARED_PARAMS_IPC_M2A_SRESET_END_CMD,
-	SHARED_PARAMS_IPC_M2A_PAUSE_ON_CMD,
-	SHARED_PARAMS_IPC_M2A_PAUSE_OFF_CMD,
 
 	/*
 	 * Following are cmd used in A2M IPC interrupt. Put in same enum so that most code can be
@@ -277,14 +270,13 @@
 #define SHARED_PARAMS_AUC_IPC_STUB			((shared_params_auc_ipc*)1)
 	struct shared_params_auc_ipc		*m2a_ipc;	/* M2A */
 	struct shared_params_auc_ipc		*a2m_ipc;	/* A2M */
-	/*
-	 * 'ma_shared_buf' is used to transfer data btw MuC and AuC in IPC call.
-	 * So far it is used to pass node position in node cache and ieee80211
-	 * vht group. The buffer size is defined to exactly match those data:
-	 * sizeof(struct ieee80211_mu_groups_update)
-	 */
-#define MA_SHARED_BUF_SIZE	(150)
+#if QTN_HDP_MU
+	/* Buf used to transfer data btw MuC and AuC in IPC call. So far it is used to pass
+	MU group and user position masks as well as Q matrixes. The buffer size is defined
+	to exactly match those data */
+#define MA_SHARED_BUF_SIZE	24
 	uint8_t					(*ma_shared_buf)[MA_SHARED_BUF_SIZE];
+#endif
 	struct qtn_auc_per_node_data_s		**auc_per_node_data_ptr;
 	struct qtn_auc_misc_data_s		*auc_misc_data_ptr;
 	struct qtn_auc_per_mac_data_s		*auc_per_mac_data_ptr;
@@ -363,22 +355,20 @@
 
 RUBY_INLINE enum shared_params_auc_ipc_cmd
 qtn_mproc_sync_auc_ipc_wait_mready(volatile struct shared_params_auc_ipc *ipc,
-		int relax_count, int loop_count)
+		enum shared_params_auc_ipc_cmd *cmds, int cmds_num, int relax_count)
 {
-	enum shared_params_auc_ipc_cmd cmd;
-	int loop = 0;
+	while(1) {
+		int i;
+		enum shared_params_auc_ipc_cmd cmd = ipc->cmd;
 
-	while(loop++ < loop_count) {
-		cmd = ipc->cmd;
-		if (cmd > SHARED_PARAMS_IPC_M2A_CFG_PARAMS_MIN &&
-				cmd < SHARED_PARAMS_IPC_M2A_CFG_PARAMS_MAX) {
-			return cmd;
+		for (i = 0; i < cmds_num; ++i) {
+			if (cmds[i] == cmd) {
+				return cmd;
+			}
 		}
 
 		qtn_mproc_sync_mutex_relax(relax_count);
 	}
-
-	return SHARED_PARAMS_IPC_NONE_CMD;
 }
 
 RUBY_INLINE int
diff --git a/include/qtn/topaz_tqe.h b/include/qtn/topaz_tqe.h
index 36a7a0a..0cce989 100644
--- a/include/qtn/topaz_tqe.h
+++ b/include/qtn/topaz_tqe.h
@@ -26,27 +26,25 @@
 #include <linux/if_ether.h>
 #include <linux/netdevice.h>
 #include <qtn/topaz_tqe_cpuif.h>
-#include <qtn/br_types.h>
+
 
 typedef void (*tqe_port_handler)(void *token,
 		const union topaz_tqe_cpuif_descr *descr,
 		struct sk_buff *skb, uint8_t *whole_frm_hdr);
 
 typedef const struct topaz_fwt_sw_mcast_entry*(
-		*tqe_fwt_get_mcast_hook)(uint16_t fwt_index, const void *addr, uint16_t ether_type);
+		*tqe_fwt_get_mcast_hook)(uint16_t fwt_index, const void *addr, uint16_t ether_type,
+					uint8_t vap_idx);
 typedef const struct fwt_db_entry*(
 		*tqe_fwt_get_ucast_hook)(const unsigned char *src_mac_be, const unsigned char *dst_mac_be);
 typedef const struct fwt_db_entry*(
 		*tqe_fwt_get_from_mac_hook)(const unsigned char *mac_be);
 typedef int(*tqe_mac_reserved_hook)(const uint8_t *addr);
 typedef struct topaz_fwt_sw_mcast_entry*(
-		*tqe_fwt_get_mcast_ff_hook)(void);
+		*tqe_fwt_get_mcast_ff_hook)(uint8_t vap_idx);
+typedef void(*tqe_fwt_set_mcast_ff_hook)(uint8_t vap_idx);
 typedef void(*tqe_fwt_false_miss_hook)(int fwt_index, uint8_t false_miss);
 
-typedef int (*tqe_fwt_add_from_mac_hook)(const uint8_t *mac_be, uint8_t port_id,
-			uint8_t node_idx, const struct br_ip *group);
-typedef int (*tqe_fwt_del_from_mac_hook)(const uint8_t *mac_be);
-
 int tqe_port_add_handler(enum topaz_tqe_port port, tqe_port_handler handler, void *token);
 void tqe_port_remove_handler(enum topaz_tqe_port port);
 int tqe_tx(union topaz_tqe_cpuif_ppctl *ppctl, struct sk_buff *skb);
@@ -54,8 +52,7 @@
 				tqe_fwt_get_mcast_ff_hook mcast_ff_get_cbk_func,
 				tqe_fwt_false_miss_hook false_miss_func);
 void tqe_register_ucastfwt_cbk(tqe_fwt_get_ucast_hook cbk_func);
-void tqe_register_macfwt_cbk(tqe_fwt_get_from_mac_hook cbk_func,
-			tqe_fwt_add_from_mac_hook add_func, tqe_fwt_del_from_mac_hook del_func);
+void tqe_register_macfwt_cbk(tqe_fwt_get_from_mac_hook cbk_func);
 void tqe_register_mac_reserved_cbk(tqe_mac_reserved_hook cbk_func);
 int tqe_rx_multicast(void *queue, const union topaz_tqe_cpuif_descr *desc);
 void tqe_port_register(const enum topaz_tqe_port port);
diff --git a/include/qtn/topaz_tqe_cpuif.h b/include/qtn/topaz_tqe_cpuif.h
index 0d41069..80b8f58 100644
--- a/include/qtn/topaz_tqe_cpuif.h
+++ b/include/qtn/topaz_tqe_cpuif.h
@@ -38,7 +38,7 @@
 	TOPAZ_TQE_AUC_PORT	= 7,
 
 	TOPAZ_TQE_NUM_PORTS	= 8,
-	TOPAZ_TQE_DROP_PORT	= 15
+	TOPAZ_TQE_DUMMY_PORT	= 15
 };
 
 enum topaz_mproc_tqe_sem_id
@@ -71,8 +71,7 @@
 #define EXTRACT_DEV_ID_FROM_PORT_ID(port_id) \
 		GET_BIT_FIELD((port_id), (PORT_ID_BITS - DEV_ID_BITS), DEV_ID_BITS)
 
-#define TOPAZ_TQE_PORT_NAMES	{ "emac0", "emac1", "wmac", "pcie", "lhost", "muc", "dsp", "auc", \
-					"", "", "", "", "", "", "", "drop", }
+#define TOPAZ_TQE_PORT_NAMES	{ "emac0", "emac1", "wmac", "pcie", "lhost", "muc", "dsp", "auc", }
 #define TOPAZ_TQE_PORT_IS_EMAC(_port)	(((_port) == TOPAZ_TQE_EMAC_0_PORT) || \
 						((_port) == TOPAZ_TQE_EMAC_1_PORT))
 #define TOPAZ_TQE_PORT_IS_WMAC(_port)	((_port) == TOPAZ_TQE_WMAC_PORT)
diff --git a/include/qtn/txbf_mbox.h b/include/qtn/txbf_mbox.h
index 5dad35e..7051987 100644
--- a/include/qtn/txbf_mbox.h
+++ b/include/qtn/txbf_mbox.h
@@ -44,8 +44,8 @@
 #define QTN_TXBF_NDP_DATA_BUFS			(1)
 
 /* MU group install/delete IPC from DSP to LHost */
-#define QTN_TXBF_DSP_TO_HOST_INST_MU_GRP        1
-#define QTN_TXBF_DSP_TO_HOST_DELE_MU_GRP        2
+#define QTN_TXBF_DSP_TO_HOST_INST_MU_GRP        (QTN_TXBF_MUC_DSP_MSG_RING_SIZE + 1)
+#define QTN_TXBF_DSP_TO_HOST_DELE_MU_GRP        (QTN_TXBF_DSP_TO_HOST_INST_MU_GRP + 1)
 
 #ifndef __ASSEMBLY__
 
@@ -286,9 +286,6 @@
 				__attribute__ ((aligned (ARC_DCACHE_LINE_LENGTH) ));
 };
 
-#define QTN_TXBF_MBOX_PROCESSED 1
-#define QTN_TXBF_MBOX_NOT_PROCESSED 0
-
 #if !defined(MUC_BUILD) && !defined(DSP_BUILD) && !defined(AUC_BUILD)
 
 #if CONFIG_USE_SPI1_FOR_IPC
diff --git a/include/shared/net80211/_ieee80211.h b/include/shared/net80211/_ieee80211.h
index c0a4fb5..1669ee4 100644
--- a/include/shared/net80211/_ieee80211.h
+++ b/include/shared/net80211/_ieee80211.h
@@ -170,6 +170,19 @@
 };
 
 /*
+ * True if this mode must behave like a DFS master, ie do Channel
+ * Check Availability and In Service Monitoring. We need to make sure
+ * that all modes cannot send data without being authorized. Such
+ * enforcement is not done in monitor mode however.
+ */
+
+#define IEEE80211_IS_MODE_DFS_MASTER(_opmode) \
+	((_opmode == IEEE80211_M_IBSS) || \
+	(_opmode == IEEE80211_M_AHDEMO) || \
+	(_opmode == IEEE80211_M_HOSTAP) || \
+	(_opmode == IEEE80211_M_WDS))
+
+/*
  * 802.11n
  */
 
@@ -332,17 +345,6 @@
 #define IEEE80211_IS_OBSS_CHAN_SECONDARY(_c) \
 	(((_c) & IEEE80211_OBSS_CHAN_SEC20) == IEEE80211_OBSS_CHAN_SEC20)
 
-enum ieee80211_neighborhood_type {
-	IEEE80211_NEIGHBORHOOD_TYPE_SPARSE = 0,
-	IEEE80211_NEIGHBORHOOD_TYPE_DENSE = 1,
-	IEEE80211_NEIGHBORHOOD_TYPE_VERY_DENSE = 2,
-	IEEE80211_NEIGHBORHOOD_TYPE_MAX	= IEEE80211_NEIGHBORHOOD_TYPE_VERY_DENSE,
-	IEEE80211_NEIGHBORHOOD_TYPE_UNKNOWN = IEEE80211_NEIGHBORHOOD_TYPE_MAX + 1
-};
-
-#define IEEE80211_NEIGHBORHOOD_TYPE_SPARSE_DFT_THRSHLD	3
-#define IEEE80211_NEIGHBORHOOD_TYPE_DENSE_DFT_THRSHLD	15
-
 /* power index definition */
 enum ieee80211_power_index_beamforming {
 	PWR_IDX_BF_OFF = 0,
@@ -1106,14 +1108,6 @@
 	u_int8_t pos[IEEE80211_VHT_USR_POS_ARRAY_SIZE];
 } __packed;
 
-#define QTN_MU_NODES_PER_GROUP 2 /* Max number of nodes currently supported */
-#define QTN_MU_QMAT_MAX_SLOTS 3
-
-struct ieee80211_mu_groups_update {
-	u_int8_t ncidx[QTN_MU_NODES_PER_GROUP * QTN_MU_QMAT_MAX_SLOTS];
-	struct ieee80211_vht_mu_grp grps[QTN_MU_NODES_PER_GROUP * QTN_MU_QMAT_MAX_SLOTS];
-} __packed;
-
 struct ieee80211_action_data {
 	u_int8_t cat;				/* category identifier */
 	u_int8_t action;			/* action identifier */
@@ -1333,22 +1327,13 @@
 			u_int8_t group_id;
 		} sta_stats;
 		struct _rep_qtn_cca {
-			u_int16_t type;
-			/* CCA radio measurement report field */
 			u_int64_t start_tsf;
 			u_int16_t duration_ms;
 			u_int8_t channel;
 			u_int8_t qtn_cca_report;
-			union {
-				struct _rep_qtn_cca_info {
-					u_int16_t others_time;
-					u_int32_t sp_fail;
-					u_int32_t lp_fail;
-				} qtn_cca_info;
-				struct _rep_qtn_fat_info {
-					u_int16_t free_airtime;
-				} qtn_fat_info;
-			} u;
+			u_int32_t sp_fail;
+			u_int32_t lp_fail;
+			u_int16_t others_time;
 			u_int8_t *extra_ie;
 			u_int16_t extra_ie_len;
 		} qtn_cca;
@@ -1496,7 +1481,6 @@
 	 (_bi) : IEEE80211_BINTVAL_DEFAULT)
 
 #define IEEE80211_SCAN_TBL_LEN_MAX_DFLT	2000
-#define IEEE80211_BEACON_HANG_TIMEOUT_DFLT	(5 * IEEE80211_BINTVAL_DEFAULT)
 
 #define IEEE80211_BWSTR_20	"20"
 #define IEEE80211_BWSTR_40	"40"
diff --git a/include/shared/net80211/ieee80211.h b/include/shared/net80211/ieee80211.h
index 47b9c0e..2988ef0 100644
--- a/include/shared/net80211/ieee80211.h
+++ b/include/shared/net80211/ieee80211.h
@@ -628,10 +628,7 @@
 } __packed;
 
 /* Quantenna SCS IE */
-#define QTN_SCS_IE_TYPE_STA_INTF_RPT		0x1
-#define QTN_SCS_IE_TYPE_STA_FAT_RPT		0x3
-#pragma pack(push)
-#pragma pack(1)
+#define QTN_SCS_IE_TYPE_STA_INTF_RPT        0x1
 struct ieee80211_ie_qtn_scs {
 	uint8_t id;			/* IEEE80211_ELEMID_VENDOR */
 	uint8_t len;                    /* length in bytes */
@@ -639,25 +636,14 @@
 	uint8_t qtn_ie_type;		/* IE type */
 	uint8_t scs_ie_type;            /* for future expansion and backward compatibility */
 	/* following depends on scs_ie_type */
-	union {
-		struct {
-			uint32_t sp_fail;		/* short preamble failure in last second */
-			uint32_t lp_fail;		/* long preamble failure in last second */
-			uint16_t others_time;		/* rx + tx time for all nodes */
-		} cca_info;
-		struct {
-			uint16_t free_airtime;		/* free air time */
-		} fat_info;
-	} u;
-	/* Warning: using this variable length field would cause backward compatibility issue
-	 * in future if want to add new fields */
+	uint32_t sp_fail;		/* short preamble failure in last second */
+	uint32_t lp_fail;		/* long preamble failure in last second */
+	uint16_t others_time;		/* rx + tx time for all nodes */
 	uint16_t extra_ie_len;		/* extra ie len */
 	uint8_t extra_ie[0];		/* tdls stats */
-};
-#pragma pack(pop)
-#define QTN_SCS_IE_LEN_MIN			7    /* till scs ie type */
-#define QTN_SCS_IE_STA_INTF_RPT_LEN_MIN		(QTN_SCS_IE_LEN_MIN + 8)
-#define QTN_SCS_IE_STA_FAT_RPT_LEN_MIN		(QTN_SCS_IE_LEN_MIN + 2)
+} __packed;
+#define QTN_SCS_IE_LEN_MIN              7    /* till scs ie type */
+#define QTN_SCS_IE_STA_INTF_RPT_LEN_MIN     (QTN_SCS_IE_LEN_MIN + 8)
 
 #define IEEE80211_IS_ALL_SET(__flags__, __msb__)	\
 	(((__flags__) & ((1 << ((__msb__)+1)) - 1)) == ((1 << ((__msb__)+1)) - 1))
@@ -2960,7 +2946,7 @@
 
 #define	IEEE80211_RATE_BASIC		0x80
 #define	IEEE80211_RATE_VAL			0x7f
-#define IEEE80211_BSS_MEMBERSHIP_SELECTOR_HT_PHY 0x7F
+#define IEEE80211_BSS_MEMBERSHIP_SELECTOR	0x7F
 
 /* EPR information element flags */
 #define	IEEE80211_ERP_NON_ERP_PRESENT	0x01
@@ -3077,9 +3063,6 @@
 #define PEER_VENDOR_RTK		0x10
 #define PEER_VENDOR_INTEL	0x20
 
-#define PEER_VENDOR_MASK	(PEER_VENDOR_BRCM | PEER_VENDOR_ATH | PEER_VENDOR_RLNK \
-				| PEER_VENDOR_RTK | PEER_VENDOR_INTEL)
-
 /*
  * 802.11ac VHT Capabilities element
  */
@@ -3091,7 +3074,6 @@
 } __packed;
 
 /* VHT capabilities flags */
-#define IEEE80211_VHTCAP_C_CHWIDTH			0x0000000C
 #define IEEE80211_VHTCAP_C_RX_LDPC			0x00000010
 #define IEEE80211_VHTCAP_C_SHORT_GI_80			0x00000020
 #define IEEE80211_VHTCAP_C_SHORT_GI_160			0x00000040
diff --git a/include/shared/net80211/ieee80211_dfs_reentry.h b/include/shared/net80211/ieee80211_dfs_reentry.h
index 8ea15f9..fc5c37c 100644
--- a/include/shared/net80211/ieee80211_dfs_reentry.h
+++ b/include/shared/net80211/ieee80211_dfs_reentry.h
@@ -30,11 +30,4 @@
 #define IEEE80211_PICK_NOPICK_BG	0x0800		/* scan background and do not pick channel */
 #define IEEE80211_PICK_DEFAULT		(IEEE80211_PICK_ALL | IEEE80211_PICK_CLEAREST)
 
-#define IEEE80211_SCS_PICK_DFS_ONLY			0x1/* Pick channels from DFS set only*/
-#define IEEE80211_SCS_PICK_NON_DFS_ONLY			0x2/* Pick channels from Non-DFS set only*/
-#define IEEE80211_SCS_PICK_AVAILABLE_DFS_ONLY		0x4/* Pick channels from available DFS set*/
-#define IEEE80211_SCS_PICK_AVAILABLE_ANY_CHANNEL	0x8/* Pick channels from available DFS and Non-DFS sets*/
-#define IEEE80211_SCS_PICK_ANYWAY			0x10/* Omit channel margins during channel pick*/
-#define IEEE80211_SCS_PICK_NOT_AVAILABLE_DFS_ONLY	0x20/* Pick channels from unavailable DFS set*/
-
 #endif
diff --git a/include/shared/net80211/ieee80211_ioctl.h b/include/shared/net80211/ieee80211_ioctl.h
index 6b43162..9c3cd0c 100644
--- a/include/shared/net80211/ieee80211_ioctl.h
+++ b/include/shared/net80211/ieee80211_ioctl.h
@@ -307,10 +307,6 @@
 	int32_t ib_pkt_len;
 };
 
-#define QTN_CHAN_AVAIL_STATUS_TO_STR	{"", "Non-Available", "Available",\
-					"", "Not-Available-Radar-Detected", "",\
-					"", "", "Not-Available-CAC-Required"}
-
 #define IEEE80211REQ_SCS_REPORT_CHAN_NUM    32
 struct ieee80211req_scs_currchan_rpt {
 	uint8_t iscr_curchan;
@@ -323,7 +319,6 @@
 	uint16_t iscr_rx_ms;
 	uint32_t iscr_pmbl;
 };
-
 struct ieee80211req_scs_ranking_rpt_chan {
 	uint8_t isrc_chan;
 	uint8_t isrc_dfs;
@@ -341,25 +336,12 @@
 	/* channel usage */
 	uint32_t isrc_duration;
 	uint32_t isrc_times;
-	uint8_t isrc_chan_avail_status;
 };
-
 struct ieee80211req_scs_ranking_rpt {
 	uint8_t isr_num;
 	struct ieee80211req_scs_ranking_rpt_chan isr_chans[IEEE80211REQ_SCS_REPORT_CHAN_NUM];
 };
 
-struct ieee80211req_scs_interference_rpt_chan {
-	uint8_t isrc_chan;
-	uint16_t isrc_cca_intf_20;
-	uint16_t isrc_cca_intf_40;
-	uint16_t isrc_cca_intf_80;
-};
-struct ieee80211req_scs_interference_rpt {
-	uint8_t isr_num;
-	struct ieee80211req_scs_interference_rpt_chan isr_chans[IEEE80211REQ_SCS_REPORT_CHAN_NUM];
-};
-
 struct ieee80211req_scs_score_rpt_chan {
 	uint8_t isrc_chan;
 	uint8_t isrc_score;
@@ -427,7 +409,6 @@
 	SCS_TDLS_TIME_COMPENSTATION_START,
 	SCS_TDLS_TIME_COMPENSTATION_END = SCS_TDLS_TIME_COMPENSTATION_START+SCS_MAX_TDLSTIME_COMP_INDEX-1,
 	SCS_LEAVE_DFS_CHAN_MTRC_MRGN,
-	SCS_CCA_THRESHOD_TYPE,
 	SCS_PARAM_MAX,
 };
 
@@ -445,7 +426,6 @@
 #define IEEE80211REQ_SCS_GET_RANKING_RPT          (IEEE80211REQ_SCS_FLAG_GET | 3)
 #define IEEE80211REQ_SCS_GET_PARAM_RPT            (IEEE80211REQ_SCS_FLAG_GET | 4)
 #define IEEE80211REQ_SCS_GET_SCORE_RPT            (IEEE80211REQ_SCS_FLAG_GET | 5)
-#define IEEE80211REQ_SCS_GET_INTERFERENCE_RPT     (IEEE80211REQ_SCS_FLAG_GET | 6)
 	uint32_t *is_status;                  /* SCS specific reason for ioctl failure */
 #define IEEE80211REQ_SCS_RESULT_OK                    0
 #define IEEE80211REQ_SCS_RESULT_SYSCALL_ERR           1
@@ -491,20 +471,11 @@
 };
 
 /*
- * Basic IEEE Channel info for wireless tools
- */
-struct ieee80211_chan {
-	uint16_t ic_freq;	/* Freq setting in Mhz */
-	uint32_t ic_flags;	/* Channel flags */
-	uint8_t ic_ieee;	/* IEEE channel number */
-} __packed;
-
-/*
  * Get the active channel list info.
  */
 struct ieee80211req_chaninfo {
 	uint32_t ic_nchans;
-	struct ieee80211_chan ic_chans[IEEE80211_CHAN_MAX];
+	struct ieee80211_channel ic_chans[IEEE80211_CHAN_MAX];
 };
 
 /*
@@ -862,7 +833,6 @@
 	uint32_t channel[CSW_MAX_RECORDS_MAX];
 	uint32_t timestamp[CSW_MAX_RECORDS_MAX];
 	uint32_t reason[CSW_MAX_RECORDS_MAX];
-	uint8_t csw_record_mac[CSW_MAX_RECORDS_MAX][IEEE80211_ADDR_LEN];
 };
 
 struct ieee80211req_radar_status {
@@ -899,9 +869,6 @@
 	int8_t		ap_qhop_role;
 	uint32_t	ap_bestrate;
 	int32_t		ap_num_genies;
-	uint16_t	ap_beacon_intval;
-	uint8_t		ap_dtim_intval;
-	uint8_t		ap_is_ess;
 	int8_t		ap_ie_buf[0];	/* just to remind there might be WPA/RSN/WSC IEs right behind*/
 };
 
@@ -1385,7 +1352,7 @@
 	IEEE80211_PARAM_VAP_TX_AMSDU = 302,     /* Enable/disable A-MSDU for VAP */
 	IEEE80211_PARAM_PC_OVERRIDE = 303,              /* RSSI based Power-contraint override */
 	IEEE80211_PARAM_NDPA_DUR = 304,         /* set vht NDPA duration field */
-	IEEE80211_PARAM_SU_TXBF_PKT_CNT = 305,  /* set the pkt cnt per txbf interval to fire SU sounding to a node */
+	IEEE80211_PARAM_TXBF_PKT_CNT = 305,     /* set the pkt cnt per txbf interval to fire sounding to a node */
 	IEEE80211_PARAM_MAX_AGG_SIZE = 306,	/* Maximum AMPDU size in bytes */
 	IEEE80211_PARAM_TQEW_DESCR_LIMIT = 307,     /* Set/Get tqew descriptors limit */
 	IEEE80211_PARAM_SCAN_TBL_LEN_MAX = 308,
@@ -1510,41 +1477,8 @@
 	IEEE80211_PARAM_BSS_GROUP_ID = 432,	/* Assigns VAP (SSID) a logical group id */
 	IEEE80211_PARAM_BSS_ASSOC_RESERVE = 433,	/* Reserve associations for specified group */
 	IEEE80211_PARAM_MAX_BOOT_CAC_DURATION = 434,	/* Max boot CAC duration in seconds */
-	IEEE80211_PARAM_RX_BAR_SYNC = 435,	/* sync rx reorder window on receiving BAR */
-	IEEE80211_PARAM_GET_REG_DOMAIN_IS_EU = 436,	/* Check if regulatory region falls under EU domain*/
-	IEEE80211_PARAM_AUC_TX_AGG_DURATION = 437,
-	IEEE80211_PARAM_GET_CHAN_AVAILABILITY_STATUS = 438, /* Channel availability status */
-	IEEE80211_PARAM_STOP_ICAC = 439,
-	IEEE80211_PARAM_STA_DFS_STRICT_MODE = 440,	/* STA DFS - strict mode operation */
-	IEEE80211_PARAM_STA_DFS_STRICT_MEASUREMENT_IN_CAC = 441, /* STA DFS - Send Measurement report if radar found during CAC */
-	IEEE80211_PARAM_STA_DFS_STRICT_TX_CHAN_CLOSE_TIME = 442, /*  STA DFS - Configure channel tx close time when radar detected */
-	IEEE80211_PARAM_NEIGHBORHOOD_THRSHD = 443, /* Set the threshold for neighborhood density type */
-	IEEE80211_PARAM_NEIGHBORHOOD_TYPE = 444, /* Get the neighborhood density type */
-	IEEE80211_PARAM_NEIGHBORHOOD_COUNT = 445,/* Get the neighbor count */
-	IEEE80211_PARAM_MU_TXBF_PKT_CNT = 446, /* set the pkt cnt per txbf interval to fire mu sounding to a node */
-	IEEE80211_PARAM_DFS_CSA_CNT = 447,	/* set CSA count for reason of IEEE80211_CSW_REASON_DFS */
-	IEEE80211_PARAM_IS_WEATHER_CHANNEL = 448, /* check if it's a weather channel */
-	IEEE80211_PARAM_GET_CCA_STATS = 458, /* get CCA stats */
-	IEEE80211_PARAM_OPMODE_BW_SW_EN = 459, /* enable/disable dynamic peer BW using opmode action */
-	IEEE80211_PARAM_LEGACY_SIFS_TIMING = 460, /* write/read legacy sifs timing register */
-	IEEE80211_PARAM_WEATHERCHAN_CAC_ALLOWED = 461, /* control whether weather channels CAC is allowed or not */
-	IEEE80211_PARAM_BEACON_HANG_TIMEOUT = 462,	/* Software beacon hang checking timeout, in ms */
-	IEEE80211_PARAM_BB_DEAFNESS_WAR_EN = 463, /* control whether WAR for BB deafness fast recovery is enabled or not */
-	IEEE80211_PARAM_VOPT = 464,	/* enable/disable V optimization */
-	IEEE80211_PARAM_VMODE = 465,		/* disable/enable v test mode */
-	IEEE80211_PARAM_VAP_TX_AMSDU_11N = 466,     /* Enable/disable A-MSDU for 11n nodes */
-	IEEE80211_PARAM_DYNAMIC_SIFS_TIMING = 468, /* set/get SIFS timing */
 };
 
-#define IEEE80211_OFFCHAN_SUSPEND_MASK		0x80000000
-#define IEEE80211_OFFCHAN_SUSPEND_MASK_S	31
-#define IEEE80211_OFFCHAN_TIMEOUT_MASK		0x7FFFFFFF
-#define IEEE80211_OFFCHAN_TIMEOUT_DEFAULT	1 /* second*/
-#define IEEE80211_OFFCHAN_TIMEOUT_MAX		60 /* second*/
-#define IEEE80211_OFFCHAN_TIMEOUT_MIN		1 /* second*/
-#define IEEE80211_OFFCHAN_TIMEOUT_AUTH		5 /* second*/
-#define IEEE80211_OFFCHAN_TIMEOUT_EAPOL		8 /* second*/
-
 #define	SIOCG80211STATS			(SIOCDEVPRIVATE+2)
 /* NB: require in+out parameters so cannot use wireless extensions, yech */
 #define	IEEE80211_IOCTL_GETKEY		(SIOCDEVPRIVATE+3)
@@ -1606,7 +1540,6 @@
 #define SIOCDEV_SUBIO_GET_CLIENT_MACS		(SIOCDEV_SUBIO_BASE + 38)
 #define SIOCDEV_SUBIO_SAMPLE_ALL_DATA		(SIOCDEV_SUBIO_BASE + 39)
 #define SIOCDEV_SUBIO_GET_ASSOC_DATA		(SIOCDEV_SUBIO_BASE + 40)
-#define SIOCDEV_SUBIO_GET_INTERFACE_WMMAC_STATS	(SIOCDEV_SUBIO_BASE + 41)
 
 enum L2_EXT_FILTER_PORT {
 	L2_EXT_FILTER_EMAC_0_PORT = 0,
@@ -1911,20 +1844,6 @@
 	uint8_t wds_extender_ie[0];
 }__packed;
 
-struct ieee80211req_interface_wmmac_stats {
-#define WMM_AC_NUM 4
-	/**
-	 * Number of dropped data packets failed to transmit through
-	 * wireless media for each traffic category(TC).
-	 */
-	uint32_t tx_wifi_drop[WMM_AC_NUM];
-	/**
-	 * Number of sent data packets that transmit through
-	 * wireless media for each traffic category(TC).
-	 */
-	uint32_t tx_wifi_sent[WMM_AC_NUM];
-};
-
 #endif /* __linux__ */
 
 #pragma pack()
diff --git a/include/shared/qtn/beacon_ioctl.h b/include/shared/qtn/beacon_ioctl.h
deleted file mode 100644
index eb7d501..0000000
--- a/include/shared/qtn/beacon_ioctl.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2015 Quantenna Communications, Inc.
- * All rights reserved.
- */
-
-#ifndef __BEACON_IOCTL_H__
-#define __BEACON_IOCTL_H__
-/*
-#define LHOST_DEBUG_BEACON
-#define MUC_DEBUG_BEACON
-*/
-
-#define BEACON_PARAM_SIZE		1000
-/*
- * A general ie descriptor shared between sender (LHOST) and receiver (MuC).
- * To avoid issues of alignment compatibility between different hosts, all fields has 32bits
- * aligned.
- */
-struct beacon_shared_ie_t
-{
-	dma_addr_t	buf;			/* MuC reference to the ie buffer */
-	uint8_t *	lhost_buf;		/* LHOST reference to the ie buffer */
-	uint32_t	size;			/* total length of ie including id + len */
-	uint32_t	next_muc_addr;		/* next ie descriptor address presented in MuC addr mapping */
-	struct		beacon_shared_ie_t *next;	/* next ie descriptor */
-};
-#endif /* __BEACON_IOCTL_H__ */
diff --git a/init/Kconfig b/init/Kconfig
index d6bbb4c..7c30d76 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -894,15 +894,6 @@
 	help
 	  Enable support for generating core dumps. Disabling saves about 4k.
 
-config ARC_ELF_CORE_FIX
-	default n
-	bool "Enable core dump .reg section fix for ARC" if EMBEDDED
-	depends on ARCH_ARC && ELF_CORE
-	help
-	  Changes ELF core dump registers section format to conform to binutils/gdb
-	  core dump format. Enables kernel to generate core dumps readable by
-	  new versions of ARC GNU toolchain (e.g. 2015.12).
-
 config PCSPKR_PLATFORM
 	bool "Enable PC-Speaker support" if EMBEDDED
 	depends on ALPHA || X86 || MIPS || PPC_PREP || PPC_CHRP || PPC_PSERIES
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
index d3676ec..b16e1c9 100644
--- a/net/bridge/br_device.c
+++ b/net/bridge/br_device.c
@@ -22,8 +22,6 @@
 #include <asm/uaccess.h>
 #include "br_private.h"
 
-#include <qtn/qtn_skb_cb.h>
-
 /* net device transmit always called with BH disabled */
 netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
 {
@@ -47,7 +45,6 @@
 
 	skb_reset_mac_header(skb);
 	skb_pull(skb, ETH_HLEN);
-	M_FLAG_SET(skb, M_ORIG_BR);
 
 	rcu_read_lock();
 	if (is_multicast_ether_addr(dest)) {
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c
index 91a3067..570ce26 100644
--- a/net/bridge/br_input.c
+++ b/net/bridge/br_input.c
@@ -115,11 +115,6 @@
 	return retval;
 }
 
-int br_wlan_report_flood(struct net_bridge *br)
-{
-	return !!br->wlan_report_flood_enable;
-}
-
 int br_handle_frame_finish_multicast(struct sk_buff *skb,
 		struct net_bridge *br, const unsigned char *dest)
 {
@@ -142,11 +137,8 @@
 			br_handle_mcast_mgmt_frame(skb, br) &&
 			br_handle_mcast_exception(br, dest, data)) {
 		if (BR_INPUT_SKB_CB_MROUTERS_ONLY(skb)) {
-			if (!br_is_wlan_dev(skb->dev) ||
-					br_wlan_report_flood(br)) {
-				mdst = br_mdb_get_ext(br, skb);
-				br_report_flood(br, mdst, skb);
-			}
+			mdst = br_mdb_get_ext(br, skb);
+			br_report_flood(br, mdst, skb);
 			br_multicast_forward(NULL, skb, skb2);
 			skb = NULL;
 		} else if(BR_INPUT_SKB_CB_UCAST_FWD(skb)) {
@@ -214,7 +206,6 @@
 	}
 
 	/* insert into forwarding database after filtering to avoid spoofing */
-	if (!M_FLAG_ISSET(skb, M_NO_L2_LRN))
 	br_fdb_update(br, p, eth_hdr(skb)->h_source, skb->src_port);
 	br_handle_fwt_capacity(br);
 
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
index bd9eafa..116007c 100644
--- a/net/bridge/br_multicast.c
+++ b/net/bridge/br_multicast.c
@@ -62,9 +62,6 @@
 	"block_old_sources",
 };
 
-/*
- * This function assumes that igmp packet is valid
- */
 static void br_igmp_snoop_trace_v3_report(struct net_device *dev, __be32 saddr,
 	const struct igmphdr *igmp, const char *vlan_str, uint8_t snoop_enabled)
 {
@@ -151,7 +148,7 @@
 	}
 
 	BR_SNOOP_DBG(" from %pI4 group %pI4%s\n",
-		&saddr, &igmp->group, snoop_enabled ? "" : " [ignored]");
+		&saddr, igmp->group, snoop_enabled ? "" : " [ignored]");
 
 }
 
@@ -944,7 +941,6 @@
 		goto err;
 
 	if (!port) {
-		if (hlist_unhashed(&mp->mglist))
 		hlist_add_head(&mp->mglist, &br->mglist);
 		mod_timer(&mp->timer, now + br->multicast_membership_interval);
 		goto out;
@@ -1218,24 +1214,22 @@
 
 		/* We treat this as an IGMPv2 report for now. */
 		switch (type) {
-		case IGMPV3_MODE_IS_INCLUDE:
 		case IGMPV3_MODE_IS_EXCLUDE:
-		case IGMPV3_CHANGE_TO_INCLUDE:
 		case IGMPV3_CHANGE_TO_EXCLUDE:
 		case IGMPV3_ALLOW_NEW_SOURCES:
 		case IGMPV3_BLOCK_OLD_SOURCES:
+			err = br_ip4_multicast_add_group(br, port,
+					src_mac, skb->src_port, group);
 			break;
+		case IGMPV3_CHANGE_TO_INCLUDE:
+		case IGMPV3_MODE_IS_INCLUDE:
+			br_ip4_multicast_leave_group(br, port,
+					src_mac, skb->src_port, group);
+			/* continue */
 		default:
 			continue;
 		}
 
-		if ((type == IGMPV3_CHANGE_TO_INCLUDE || type == IGMPV3_MODE_IS_INCLUDE) &&
-				ntohs(grec->grec_nsrcs) == 0) {
-			br_ip4_multicast_leave_group(br, port, src_mac, skb->src_port, group);
-		} else {
-			err = br_ip4_multicast_add_group(br, port, src_mac, skb->src_port, group);
-		}
-
 		if (err)
 			break;
 	}
@@ -1799,14 +1793,7 @@
 	BR_INPUT_SKB_CB(skb)->igmp = 1;
 	ih = igmp_hdr(skb2);
 
-/*
- * Allow IGMP snooping on PCIe RC ever if it is disabled
- * This is a WAR to allow IP multicast traffic to go on HDP
- */
-#ifndef CONFIG_TOPAZ_PCIE_HOST
-	if (br->igmp_snoop_enabled)
-#endif
-	{
+	if (br->igmp_snoop_enabled) {
 		switch (ih->type) {
 		case IGMP_HOST_MEMBERSHIP_REPORT:
 		case IGMPV2_HOST_MEMBERSHIP_REPORT:
@@ -1827,10 +1814,7 @@
 		}
 	}
 
-	if (!err)
-		br_igmp_snoop_trace(skb->dev, iph->saddr, ih, skb2, br->igmp_snoop_enabled);
-	else
-		BR_SNOOP_DBG("IGMP packet is damaged\n");
+	br_igmp_snoop_trace(skb->dev, iph->saddr, ih, skb2, br->igmp_snoop_enabled);
 
 	if ((skb2 != skb) && BR_INPUT_SKB_CB(skb2)->ucast_fwd)
 		BR_INPUT_SKB_CB(skb)->ucast_fwd = 1;
diff --git a/net/bridge/br_public.h b/net/bridge/br_public.h
index edb0284..65aa114 100755
--- a/net/bridge/br_public.h
+++ b/net/bridge/br_public.h
@@ -154,7 +154,7 @@
 	u32				hash_max;
 #define BR_ALWAYS_FLOOD_REPORT		(-1U)
 	u32				report_flood_interval;
-	u32				wlan_report_flood_enable;
+
 	u32				multicast_last_member_count;
 	u32				multicast_startup_queries_sent;
 	u32				multicast_startup_query_count;
diff --git a/net/bridge/br_sysfs_br.c b/net/bridge/br_sysfs_br.c
index edcdd52..65cff5e 100644
--- a/net/bridge/br_sysfs_br.c
+++ b/net/bridge/br_sysfs_br.c
@@ -288,39 +288,6 @@
 static DEVICE_ATTR(report_flood_interval, S_IRUGO | S_IWUSR, show_report_flood_interval,
 		   store_report_flood_interval);
 
-static ssize_t show_wlan_report_flood_enable(struct device *d,
-			      struct device_attribute *attr, char *buf)
-{
-	struct net_bridge *br = to_bridge(d);
-	return sprintf(buf, "%u\n", br->wlan_report_flood_enable);
-}
-
-static ssize_t store_wlan_report_flood_enable(struct device *d,
-			       struct device_attribute *attr, const char *buf,
-			       size_t len)
-{
-	struct net_bridge *br = to_bridge(d);
-	char *endp;
-	long val;
-
-	if (!capable(CAP_NET_ADMIN))
-		return -EPERM;
-
-	val = simple_strtol(buf, &endp, 0);
-	if (endp == buf)
-		return -EINVAL;
-
-	rtnl_lock();
-	br->wlan_report_flood_enable = val;
-	rtnl_unlock();
-	printk("BRIDGE WLAN report flood-forwarding %s\n",
-				br->wlan_report_flood_enable ? "enabled" : "disabled");
-
-	return len;
-}
-static DEVICE_ATTR(wlan_report_flood_enable, S_IRUGO | S_IWUSR, show_wlan_report_flood_enable,
-		   store_wlan_report_flood_enable);
-
 static ssize_t show_priority(struct device *d, struct device_attribute *attr,
 			     char *buf)
 {
@@ -831,7 +798,6 @@
 	&dev_attr_multicast_query_response_interval.attr,
 	&dev_attr_multicast_startup_query_interval.attr,
 	&dev_attr_report_flood_interval.attr,
-	&dev_attr_wlan_report_flood_enable.attr,
 	&dev_attr_igmp_snoop_group.attr,
 	&dev_attr_igmp_snoop_debug.attr,
 #endif