Merge from Quantenna SDK v37.4.15.62.
Change-Id: I4067c5e4e9611a6be6988204635e2737016b668b
diff --git a/arch/arc/boot/Makefile b/arch/arc/boot/Makefile
index 655d0cb..502336f 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 0x84938000 -e 0x84938000 -n "ARC700 Linux kernel" -Q 0x1 -d
+MKIMAGEFLAGS := -A arc -O linux -C lzma -T kernel -a 0x8493A000 -e 0x8493A000 -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 c70bcb7..0e586c2 100644
--- a/arch/arc/configs/topaz_dbdc_config
+++ b/arch/arc/configs/topaz_dbdc_config
@@ -80,6 +80,7 @@
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 1b65a29..744eb1f 100644
--- a/arch/arc/configs/topaz_fpga_config
+++ b/arch/arc/configs/topaz_fpga_config
@@ -80,6 +80,7 @@
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 2984cf7..555fa6d 100644
--- a/arch/arc/configs/topaz_host_config
+++ b/arch/arc/configs/topaz_host_config
@@ -82,6 +82,7 @@
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 4924fd6..1dfe540 100755
--- a/arch/arc/configs/topaz_msft_config
+++ b/arch/arc/configs/topaz_msft_config
@@ -80,6 +80,7 @@
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 4924fd6..1dfe540 100755
--- a/arch/arc/configs/topaz_msmr_config
+++ b/arch/arc/configs/topaz_msmr_config
@@ -80,6 +80,7 @@
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 ee42e2e..7df77c7 100644
--- a/arch/arc/configs/topaz_pcie_config
+++ b/arch/arc/configs/topaz_pcie_config
@@ -81,6 +81,7 @@
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 66e9102..11525a6 100644
--- a/arch/arc/configs/topaz_rfic6_config
+++ b/arch/arc/configs/topaz_rfic6_config
@@ -80,6 +80,7 @@
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 4924fd6..e5fa6d3 100644
--- a/arch/arc/configs/topaz_vb_config
+++ b/arch/arc/configs/topaz_vb_config
@@ -80,6 +80,7 @@
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
@@ -449,7 +450,8 @@
# CONFIG_FIRMWARE_IN_KERNEL is not set
CONFIG_EXTRA_FIRMWARE=""
# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_CONNECTOR is not set
+CONFIG_CONNECTOR=y
+CONFIG_PROC_EVENTS=y
CONFIG_MTD=y
# CONFIG_MTD_DEBUG is not set
# CONFIG_MTD_TESTS is not set
@@ -528,6 +530,7 @@
# 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 60178b1..f5c487a 100755
--- a/arch/arc/include/asm/elf.h
+++ b/arch/arc/include/asm/elf.h
@@ -25,8 +25,13 @@
#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 d981025..6df40c9 100644
--- a/arch/arc/kernel/troubleshoot.c
+++ b/arch/arc/kernel/troubleshoot.c
@@ -24,7 +24,6 @@
#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 */
@@ -424,7 +423,7 @@
workspace_size = zlib_deflate_workspacesize();
printk(KERN_DEBUG "%s: workspace_size = %d\n", __func__, workspace_size);
- stream.workspace = vmalloc(workspace_size);
+ stream.workspace = kmalloc(workspace_size, GFP_ATOMIC);
if (!stream.workspace) {
printk(KERN_ERR "%s: Failed to allocate %d bytes for deflate workspace\n", __func__,
zlib_deflate_workspacesize());
@@ -435,7 +434,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);
- vfree(stream.workspace);
+ kfree(stream.workspace);
return retval;
}
@@ -534,7 +533,7 @@
printk(KERN_WARNING "%s: zlib_deflateEnd failed, zlib_retval = %d\n", __func__, zlib_retval);
}
- vfree(stream.workspace);
+ kfree(stream.workspace);
return retval;
}
diff --git a/arch/arc/proc/arc700/traps.c b/arch/arc/proc/arc700/traps.c
index 4deb21e..c47fc28 100755
--- a/arch/arc/proc/arc700/traps.c
+++ b/arch/arc/proc/arc700/traps.c
@@ -35,14 +35,15 @@
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) {
- show_kernel_fault_diag(str, regs, address, cause_reg);
- }
+ if (running_on_hw) {
+ oops_in_progress = 1;
+ 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 5c3f9d2..79c0aa1 100644
--- a/drivers/topaz/Makefile
+++ b/drivers/topaz/Makefile
@@ -1,10 +1,22 @@
EXTRA_CFLAGS += -Wall -Werror -Wno-unknown-pragmas
ifeq ($(board_config),topaz_config)
- EXTRA_CFLAGS += -DTOPAZ_VB_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
else
- ifeq ($(board_config),topaz_vb_config)
- EXTRA_CFLAGS += -DTOPAZ_VB_CONFIG
+ ifeq ($(board_config),topaz_msmr_config)
+ EXTRA_CFLAGS += -DERICSSON_CONFIG
endif
endif
diff --git a/drivers/topaz/fwt_if.c b/drivers/topaz/fwt_if.c
index 661496c..e9ef948 100755
--- a/drivers/topaz/fwt_if.c
+++ b/drivers/topaz/fwt_if.c
@@ -234,7 +234,7 @@
case FWT_IF_ENABLE:
sscanf(str, "%u", ¶m);
if ( (param == 0) || (param == 1)) {
- *((uint8_t*)var) = param;
+ *((uint32_t*)var) = param;
} else {
return -EINVAL;
}
diff --git a/drivers/topaz/switch_emac.c b/drivers/topaz/switch_emac.c
index a805902..7169949 100644
--- a/drivers/topaz/switch_emac.c
+++ b/drivers/topaz/switch_emac.c
@@ -53,7 +53,7 @@
#include <compat.h>
-#if defined (TOPAZ_VB_CONFIG)
+#if defined (TOPAZ_SRAM_CONFIG)
#define EMAC_DESC_USE_SRAM 0
#else
#define EMAC_DESC_USE_SRAM 1
@@ -78,7 +78,12 @@
#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[] = {
{
@@ -322,6 +327,7 @@
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:
@@ -340,18 +346,11 @@
/*
* restore VLAN tag to packet if needed
*/
- skb2 = switch_vlan_restore_tag(skb, 1);
- if (!skb2) {
- printk(KERN_WARNING "failed to add VLAN tag back to header\n");
+ skb2 = switch_vlan_from_proto_stack(skb, vdev, 0, 1);
+ if (!skb2)
return NETDEV_TX_OK;
- }
- /*
- * 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)) {
+ if (vlan_enabled && !qtn_vlan_egress(vdev, 0, skb2->data)) {
dev_kfree_skb(skb2);
return NETDEV_TX_OK;
}
@@ -696,8 +695,9 @@
}
}
- switch_vlan_strip_tag(skb, 0);
- netif_receive_skb(skb);
+ skb = switch_vlan_to_proto_stack(skb, 0);
+ if (skb)
+ netif_receive_skb(skb);
}
#ifdef TOPAZ_EMAC_NULL_BUF_WR
@@ -919,35 +919,53 @@
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[2];
+ struct topaz_dpi_field_def field;
- /* IPv4 && UDP && srcport == 67 && dstport == 68 */
+ /* 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 = 2;
+ req.fields = &field;
+ req.field_count = 1;
req.out_port = TOPAZ_TQE_LHOST_PORT;
req.out_node = 0;
req.tid = 0;
- 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;
+ 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;
topaz_dpi_filter_add(port_num, &req);
}
@@ -1099,12 +1117,13 @@
topaz_ipprt_clear_all_entries(port_num);
topaz_ipprt_set(port_num, IPPROTO_IGMP, TOPAZ_TQE_LHOST_PORT, 0);
-#if defined (TOPAZ_VB_CONFIG)
+#if defined(TOPAZ_CONGE_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);
@@ -1267,6 +1286,8 @@
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 96a9275..3329820 100644
--- a/drivers/topaz/switch_tqe.c
+++ b/drivers/topaz/switch_tqe.c
@@ -46,6 +46,7 @@
#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];
@@ -81,6 +82,8 @@
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);
@@ -119,24 +122,21 @@
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;
}
- 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);
+ mcast_ent = g_tqe_fwt_get_mcast_ff_hook();
+ if (unlikely(!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);
}
void tqe_port_set_group(const enum topaz_tqe_port port, int32_t group)
@@ -165,6 +165,15 @@
}
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;
@@ -237,6 +246,7 @@
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)
@@ -248,6 +258,7 @@
printk("%s line %d fail to get tqe semaphore\n", funcname, linenum);
prtcnt++;
}
+#endif
return 1;
}
@@ -256,6 +267,7 @@
uint32_t
switch_tqe_multi_proc_sem_up(void)
{
+#ifdef CONFIG_TOPAZ_PCIE_TARGET
if (tqe_sem_en == 0)
return 1;
@@ -265,6 +277,9 @@
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);
@@ -394,6 +409,32 @@
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
*/
@@ -423,7 +464,7 @@
}
/* find the expected enqueue count and set the HBM buffer reference count */
- push_count = topaz_fwt_sw_mcast_enqueues(&mcast_ent, mcast_ent.port_bitmap,
+ push_count = tqe_mcast_enqueue_cnt(&mcast_ent, mcast_ent.port_bitmap,
in_port, in_node);
if (unlikely(!push_count)) {
return 0;
@@ -440,7 +481,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) {
+ if (port != in_port && !tqe_port_same_group(in_port, port)) {
tqe_push_mcast(desc, NULL, port, 0, 0);
++pushes;
}
@@ -541,7 +582,7 @@
}
if (ipaddr) {
- topaz_tqe_vlan_gettid(desc->data.pkt, &tid, &vlan_index);
+ topaz_tqe_vlan_gettid(bus_to_virt((uintptr_t)(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
@@ -551,7 +592,7 @@
if (g_tqe_fwt_get_mcast_hook)
mcast_ent = g_tqe_fwt_get_mcast_hook(fwt_lu.data.entry_addr,
- ipaddr, *ether_type, vlan_index);
+ ipaddr, *ether_type);
if (mcast_ent) {
if ((mcast_ent->flood_forward) && (in_port == TOPAZ_TQE_MUC_PORT)) {
@@ -596,9 +637,12 @@
}
EXPORT_SYMBOL(tqe_register_ucastfwt_cbk);
-void tqe_register_macfwt_cbk(tqe_fwt_get_from_mac_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)
{
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);
@@ -635,10 +679,10 @@
if(g_dscp_flag){
tid = (g_dscp_value[desc->data.in_port] & 0xFF);
} else {
- topaz_tqe_vlan_gettid(desc->data.pkt, &tid, &vlan_index);
+ topaz_tqe_vlan_gettid(bus_to_virt((uintptr_t)(desc->data.pkt)), &tid, &vlan_index);
}
} else {
- topaz_tqe_vlan_gettid(desc->data.pkt, &tid, &vlan_index);
+ topaz_tqe_vlan_gettid(bus_to_virt((uintptr_t)(desc->data.pkt)), &tid, &vlan_index);
}
port = fwt_ent->out_port;
@@ -708,6 +752,222 @@
}
#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;
@@ -754,14 +1014,12 @@
return 0;
fwt_ent = g_tqe_fwt_get_ucast_hook(eh->ether_shost, eh->ether_dhost);
- if (unlikely(!fwt_ent))
- return 0;
+ if (unlikely(!fwt_ent || (fwt_ent->out_port == TOPAZ_TQE_DROP_PORT)))
+ return topaz_tx_unknown_unicast(desc, fwt_ent);
/* Don't return to sender */
if (unlikely((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_port_same_group(in_port, fwt_ent->out_port))) {
tqe_rx_pkt_drop(desc);
return 1;
}
@@ -1107,11 +1365,6 @@
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;
@@ -1139,14 +1392,7 @@
memcpy(hbm_buf_virt, buf_virt, data_len);
buf_virt = hbm_buf_virt;
- 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)) {
+ 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);
@@ -1337,6 +1583,8 @@
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 89914c3..99cd319 100644
--- a/drivers/topaz/switch_vlan.c
+++ b/drivers/topaz/switch_vlan.c
@@ -23,6 +23,7 @@
#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>
@@ -51,7 +52,6 @@
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_DUMMY_PORT;
+static enum topaz_tqe_port g_topaz_tqe_pcie_rel_port = TOPAZ_TQE_DROP_PORT;
void tqe_register_pcie_rel_port(const enum topaz_tqe_port tqe_port)
{
g_topaz_tqe_pcie_rel_port = tqe_port;
@@ -468,107 +468,221 @@
}
EXPORT_SYMBOL(switch_vlan_clr_node);
-int switch_vlan_is_local(const uint8_t *data)
+static struct sk_buff *switch_vlan_tag_pkt(struct sk_buff *skb, uint16_t vlanid)
{
- 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;
+ struct vlan_ethhdr *veth;
+ struct qtn_vlan_pkt old;
+ struct qtn_vlan_pkt *new;
- if (likely(brdev)) {
- ret = !compare_ether_addr(eth->h_source, brdev->dev_addr);
- dev_put(brdev);
+ memcpy(&old, qtn_vlan_get_info(skb->data), sizeof(old));
+
+ if (skb_cow_head(skb, VLAN_HLEN) < 0) {
+ kfree_skb(skb);
+ return NULL;
}
+ veth = (struct vlan_ethhdr *)skb_push(skb, VLAN_HLEN);
- return ret;
+ /* 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;
}
-EXPORT_SYMBOL(switch_vlan_is_local);
-struct sk_buff *switch_vlan_strip_tag(struct sk_buff *skb, int copy)
+static struct sk_buff *switch_vlan_untag_pkt(struct sk_buff *skb, int copy)
{
struct sk_buff *skb2;
struct vlan_ethhdr *veth;
+ struct qtn_vlan_pkt *pktinfo;
+
+ if (copy) {
+ skb2 = skb_copy(skb, GFP_ATOMIC);
+ kfree_skb(skb);
+ } else {
+ skb2 = skb;
+ }
+
+ if (!skb2)
+ return NULL;
+
+ veth = (struct vlan_ethhdr *)(skb2->data);
+ 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;
+
+ return skb2;
+}
+
+struct net_device *switch_vlan_find_br(struct net_device *ndev)
+{
+ struct net_device *brdev = NULL;
+
+ 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)
return skb;
- veth = vlan_eth_hdr(skb);
- if (veth->h_vlan_proto != __constant_htons(ETH_P_8021Q))
+ if (skb->protocol == __constant_htons(ETH_P_PAE))
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);
+ M_FLAG_SET(skb, M_ORIG_OUTSIDE);
- return skb;
+ 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);
+ } else {
+ return 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 (!skb)
+ return NULL;
+
+ skb->protocol = eth_type_trans(skb, skb->dev);
+ }
+
+ return skb;
+}
+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;
}
- dev_put(brdev);
+ kfree_skb(skb);
+ skb = skb2;
}
- if (copy) {
- skb2 = skb_copy(skb, GFP_ATOMIC);
- dev_kfree_skb(skb);
- } else {
- skb2 = skb;
- }
+ pktinfo = qtn_vlan_get_info(skb->data);
+ pktinfo->magic = QVLAN_PKT_MAGIC;
- if (!skb2)
- return NULL;
-
- 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_push(skb2, ETH_HLEN - VLAN_HLEN);
- skb2->protocol = eth_type_trans(skb2, skb2->dev);
- M_FLAG_SET(skb2, M_VLAN_TAG_OWE);
-
- return skb2;
+ M_FLAG_SET(skb, M_VLAN_TAGGED);
+ return skb;
}
-EXPORT_SYMBOL(switch_vlan_strip_tag);
-struct sk_buff *switch_vlan_restore_tag(struct sk_buff *skb, int copy)
+struct sk_buff *switch_vlan_from_proto_stack(struct sk_buff *skb, struct qtn_vlan_dev *outdev, uint16_t ncidx, int copy)
{
- struct sk_buff *skb2;
- struct qtn_vlan_pkt pkt;
+ struct qtn_vlan_pkt *pktinfo;
+ struct vlan_ethhdr *veth;
+ uint16_t vlanid;
+ int tag_in_frame;
+ int should_tag;
- if (!M_FLAG_ISSET(skb, M_VLAN_TAG_OWE))
+ if (!vlan_enabled)
return skb;
- if (copy) {
- skb2 = skb_copy(skb, GFP_ATOMIC);
- dev_kfree_skb(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 {
- skb2 = skb;
+ 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 (!skb2)
- return NULL;
+ if (tag_in_frame != should_tag) {
+ if (should_tag)
+ skb = switch_vlan_tag_pkt(skb, vlanid);
+ else
+ skb = switch_vlan_untag_pkt(skb, copy);
+ }
- memcpy(&pkt, qtn_vlan_get_info(skb2->data), sizeof(pkt));
- BUG_ON(pkt.magic != QVLAN_PKT_MAGIC);
-
- 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;
- }
-
- memcpy(qtn_vlan_get_info(skb2->data), &pkt, sizeof(pkt));
-
- return skb2;
+ return skb;
+drop_out:
+ kfree_skb(skb);
+ return NULL;
}
-EXPORT_SYMBOL(switch_vlan_restore_tag);
+EXPORT_SYMBOL(switch_vlan_from_proto_stack);
static int switch_vlan_stats_rd(char *page, char **start, off_t offset,
int count, int *eof, void *data)
@@ -589,13 +703,13 @@
if (unlikely(!ndev))
continue;
- 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);
+ 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);
dev_put(ndev);
}
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
index 3bc625e..c73137b 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
@@ -57,6 +57,10 @@
#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
@@ -1401,8 +1405,38 @@
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]);
@@ -1576,7 +1610,13 @@
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
deleted file mode 100644
index 45f863a..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.103.0-v32.104.0
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * \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
deleted file mode 100644
index a6e95ca..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.104.0-v32.105.0
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * \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
deleted file mode 100644
index c894ee5..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.108.0-v32.109.0
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * \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
deleted file mode 100644
index b3c858a..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.108.1-v32.108.2
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
deleted file mode 100644
index bbeb7ca..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.111.0-v32.112.0
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 8b91091..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.112.0-v32.113.0
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 42a3b91..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.117.0-v32.118.0
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 084235a..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.118.0-v32.119.0
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 95dbb57..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.120.0-v32.121.0
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * \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
deleted file mode 100644
index c089639..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.122.0-v32.123.0
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * \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
deleted file mode 100644
index d2e821a..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.123.0-v32.124.0
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * \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
deleted file mode 100644
index e8d6916..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.128.0-v32.129.0
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 72deaaa..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.129.0-v32.130.0
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 3a9b6ef..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.90.0-v32.91.0
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * \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
deleted file mode 100644
index c140f29..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.94.0-v32.95.0
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * \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
deleted file mode 100644
index b43b08d..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v32.95.0-v32.96.0
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 76b4a7b..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.12-v35.1.0.13
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 68dac1f..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.14-v35.1.0.15
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
deleted file mode 100644
index c3fbe75..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.15-v35.2.0.1
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * \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
deleted file mode 100644
index e5ca032..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.4-v35.1.0.5
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 14062b1..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.6-v35.1.0.7
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
deleted file mode 100644
index e536db9..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.1.0.9-v35.1.0.10
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 8773b07..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.14-v35.2.0.15
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * \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
deleted file mode 100644
index d32355a..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.15-v35.2.0.16
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 29c68ba..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.16-v35.2.0.17
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 9f72cf7..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.19-v35.2.0.20
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 6df4759..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.2-v35.2.0.3
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 26cf365..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.4-v35.2.0.5
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 469f884..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.7-v35.2.0.8
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 6e4498a..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v35.2.0.9-v35.2.0.10
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
new file mode 100644
index 0000000..2e5e107
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1-v36.4
@@ -0,0 +1,50 @@
+/**
+ * \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
deleted file mode 100644
index bd4cc87..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.0-v36.1.0.1
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 1ecbb03..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.10-v36.1.0.11
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * \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
deleted file mode 100644
index eb2fc12..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.13-v36.1.0.14
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 31dbf12..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.14-v36.1.0.15
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
deleted file mode 100644
index b9dabe2..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.15-v36.1.0.16
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * \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
deleted file mode 100644
index f965cdd..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.3-v36.1.0.4
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 77e2894..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.5-v36.1.0.6
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * \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
deleted file mode 100644
index c94ef5c..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.7-v36.1.0.8
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 826e9b3..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.1.0.8-v36.1.0.9
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * \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
new file mode 100644
index 0000000..450d713
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4-v36.5
@@ -0,0 +1,36 @@
+/**
+ * \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
deleted file mode 100644
index 9245df3..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4.0.1-v36.4.0.2
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 849c111..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4.0.3-v36.4.0.4
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 10080bc..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4.0.4-v36.4.0.5
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 604130f..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4.0.8-v36.4.0.9
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 0a2cec3..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.4.0.9-v36.5.0.0
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * \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
new file mode 100644
index 0000000..2e7ac14
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5-v36.6
@@ -0,0 +1,33 @@
+/**
+ * \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
deleted file mode 100644
index d813123..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.0-v36.5.0.1
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 4142d00..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.1-v36.5.0.2
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 35f7745..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.5-v36.5.0.6
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * \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
deleted file mode 100644
index a692e16..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.6-v36.5.0.7
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 73e2b26..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.7-v36.5.0.8
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 481d72d..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.5.0.8-v36.6.0.0
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * \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
new file mode 100644
index 0000000..d8d2a72
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.6-v36.7
@@ -0,0 +1,11 @@
+/**
+ * \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
deleted file mode 100644
index ce94d29..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.6.0.1-v36.7.0.0
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
new file mode 100644
index 0000000..19bf20d
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7-v37.3
@@ -0,0 +1,73 @@
+/**
+ * \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
deleted file mode 100644
index b378e13..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.0-v36.7.0.1
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 986e467..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.1-v36.7.0.2
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * \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
deleted file mode 100644
index cf8cd33..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.2-v36.7.0.3
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 50bd713..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.3-v36.7.0.4
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 134358c..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.4-v36.7.0.5
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * \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
deleted file mode 100644
index fd768f7..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.5-v36.7.0.6
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 547e3d0..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.6-v36.7.0.7
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * \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
deleted file mode 100644
index e43bcb4..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.7-v36.7.0.8
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
deleted file mode 100644
index edde96b..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v36.7.0.8-v37.3.0.0
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * \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
new file mode 100644
index 0000000..0ab0b4c
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3-v37.4
@@ -0,0 +1,191 @@
+/**
+ * \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
deleted file mode 100644
index 9662fb4..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.0-v37.3.0.1
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 7f40d09..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.1-v37.3.0.2
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 576eb38..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.10-v37.3.0.11
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * \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
deleted file mode 100644
index a8a056e..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.11-v37.3.0.12
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 6939006..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.12-v37.3.0.13
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 9c878f9..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.14-v37.3.0.15
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 61b2526..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.15-v37.3.0.16
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 0dc105e..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.16-v37.3.0.17
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * \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
deleted file mode 100644
index db4753d..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.17-v37.3.0.18
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 7a6b3c0..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.18-v37.3.0.19
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 3b499c2..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.19-v37.3.0.20
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 333ca49..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.2-v37.3.0.3
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 7876698..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.20-v37.3.0.21
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 9972a0f..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.21-v37.4.0.0
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 070d273..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.3-v37.3.0.4
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
deleted file mode 100644
index af0df88..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.5-v37.3.0.6
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * \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
deleted file mode 100644
index e412184..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.7-v37.3.0.8
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 336e97a..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.8-v37.3.0.9
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * \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
deleted file mode 100644
index c21c8b1..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.3.0.9-v37.3.0.10
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * \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
new file mode 100644
index 0000000..b6b501d
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.0-v37.4.0.18
@@ -0,0 +1,101 @@
+/**
+ * \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
deleted file mode 100644
index c42ae35..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.1-v37.4.0.2
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 477a85b..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.11-v37.4.0.12
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
deleted file mode 100644
index da9c881..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.12-v37.4.0.13
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * \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
deleted file mode 100644
index e05ebc0..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.16-v37.4.0.17
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 0b9c149..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.2-v37.4.0.3
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 0e569b1..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.21-v37.4.0.22
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 69036c6..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.22-v37.4.0.23
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 4a9329d..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.23-v37.4.0.24
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * \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
deleted file mode 100644
index 5819cd0..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.24-v37.4.0.25
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * \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
deleted file mode 100644
index ad6a0c7..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.4-v37.4.0.5
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * \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
new file mode 100644
index 0000000..6c76903
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.47-v37.4.0.48
@@ -0,0 +1,12 @@
+/**
+ * \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
new file mode 100644
index 0000000..4fedac4
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.49-v37.4.0.50
@@ -0,0 +1,13 @@
+/**
+ * \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
deleted file mode 100644
index 0075dc7..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.5-v37.4.0.6
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * \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
new file mode 100644
index 0000000..95e7483
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.50-v37.4.0.51
@@ -0,0 +1,16 @@
+/**
+ * \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
new file mode 100644
index 0000000..e4a7d82
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.51-v37.4.0.52
@@ -0,0 +1,16 @@
+/**
+ * \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
new file mode 100644
index 0000000..5686b24
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.53-v37.4.0.54
@@ -0,0 +1,11 @@
+/**
+ * \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
new file mode 100644
index 0000000..78a346e
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.56-v37.4.0.57
@@ -0,0 +1,33 @@
+/**
+ * \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
new file mode 100644
index 0000000..5641f8f
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.57-v37.4.0.58
@@ -0,0 +1,14 @@
+/**
+ * \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
new file mode 100644
index 0000000..376a0e5
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.58-v37.4.0.59
@@ -0,0 +1,12 @@
+/**
+ * \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
new file mode 100644
index 0000000..1d3133f
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.59-v37.4.0.60
@@ -0,0 +1,11 @@
+/**
+ * \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
deleted file mode 100644
index f8e25c5..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.6-v37.4.0.7
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * \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
new file mode 100644
index 0000000..1ecc44e
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.60-v37.4.0.61
@@ -0,0 +1,12 @@
+/**
+ * \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
new file mode 100644
index 0000000..43b07b7
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.62-v37.4.1.62
@@ -0,0 +1,16 @@
+/**
+ * \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
deleted file mode 100644
index 294b5ff..0000000
--- a/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.0.8-v37.4.0.9
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * \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
new file mode 100644
index 0000000..3f47d09
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.10.62-v37.4.11.62
@@ -0,0 +1,11 @@
+/**
+ * \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
new file mode 100644
index 0000000..e1e8b41
--- /dev/null
+++ b/include/common/doxygen/qcsapi_doc/changelog/changes-v37.4.6.62-v37.4.7.62
@@ -0,0 +1,16 @@
+/**
+ * \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 44dced9..0b7e2f0 100644
--- a/include/common/doxygen/qcsapi_doc/groupdefine.txt
+++ b/include/common/doxygen/qcsapi_doc/groupdefine.txt
@@ -335,6 +335,7 @@
/**@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
@@ -368,6 +369,7 @@
* <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>
@@ -420,6 +422,24 @@
* <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 013e07b..06c97bf 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) + (580 * 1024))
+#define CONFIG_ARC_MUC_SIZE ((3 * 1024 * 1024) + (584 * 1024))
#else
-#define CONFIG_ARC_MUC_SIZE ((2 * 1024 * 1024) + (768 * 1024))
+#define CONFIG_ARC_MUC_SIZE ((2 * 1024 * 1024) + (772 * 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 8 /* one per vap */
+#define TOPAZ_FWT_MCAST_FF_ENTRIES 1 /* one for all FF addresses */
#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 052b46e..8319f2f 100644
--- a/include/common/ruby_pm.h
+++ b/include/common/ruby_pm.h
@@ -46,6 +46,7 @@
#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 7664b11..342d60e 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.28"
+#define RUBY_UBOOT_VERSION "v37.4.0.29"
#endif // __RUBY_RELEASE_H__
diff --git a/include/kernel/net80211/ieee80211_beacon_desc.h b/include/kernel/net80211/ieee80211_beacon_desc.h
new file mode 100644
index 0000000..79b9181
--- /dev/null
+++ b/include/kernel/net80211/ieee80211_beacon_desc.h
@@ -0,0 +1,53 @@
+/**
+ 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 778303e..bb7b59c 100644
--- a/include/kernel/net80211/ieee80211_node.h
+++ b/include/kernel/net80211/ieee80211_node.h
@@ -63,6 +63,13 @@
#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
@@ -279,6 +286,7 @@
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 */
@@ -406,6 +414,9 @@
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;
@@ -421,6 +432,7 @@
__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 */
@@ -635,8 +647,9 @@
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_nonqtn_sta_join(struct ieee80211vap *vap, struct ieee80211_node *ni);
-void ieee80211_nonqtn_sta_leave(struct ieee80211vap *vap, struct ieee80211_node *ni);
+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);
#define WDS_AGING_TIME 600 /* 10 minutes */
#define WDS_AGING_COUNT 2
@@ -782,6 +795,9 @@
#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 *);
@@ -832,5 +848,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_no_rxamsdu_no_bf(struct ieee80211_node *ni);
+int ieee80211_node_is_opti_node(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 99a7cd5..43de757 100644
--- a/include/kernel/net80211/ieee80211_proto.h
+++ b/include/kernel/net80211/ieee80211_proto.h
@@ -126,6 +126,7 @@
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,
@@ -139,6 +140,8 @@
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,
@@ -496,11 +499,15 @@
};
struct sk_buff *ieee80211_beacon_alloc(struct ieee80211_node *,
struct ieee80211_beacon_offsets *);
-int ieee80211_beacon_update(struct ieee80211_node *,
+void 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 *);
@@ -530,14 +537,12 @@
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(uint8_t *frm, struct ieee80211com *ic, int band_24g);
+uint8_t *ieee80211_add_vhtop_notif(struct ieee80211_node *ni, 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 a66d477..1899de3 100644
--- a/include/kernel/net80211/ieee80211_scan.h
+++ b/include/kernel/net80211/ieee80211_scan.h
@@ -255,6 +255,7 @@
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 */
@@ -370,8 +371,12 @@
/* 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];
@@ -405,6 +410,8 @@
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 907f669..6890593 100644
--- a/include/kernel/net80211/ieee80211_tdls.h
+++ b/include/kernel/net80211/ieee80211_tdls.h
@@ -161,6 +161,9 @@
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);
@@ -228,9 +231,6 @@
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 42b8745..6264595 100644
--- a/include/kernel/net80211/ieee80211_var.h
+++ b/include/kernel/net80211/ieee80211_var.h
@@ -104,12 +104,6 @@
#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))
@@ -180,6 +174,35 @@
#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)
@@ -214,6 +237,11 @@
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 {
@@ -241,7 +269,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 */
- uint16_t scs_debug_enable;
+ int16_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;
@@ -288,6 +316,7 @@
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;
@@ -599,6 +628,34 @@
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 */
@@ -613,6 +670,7 @@
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;
@@ -650,6 +708,7 @@
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 */
@@ -678,10 +737,11 @@
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*/
- 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;
+ 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;
uint8_t ic_pppc_select_enable;
uint8_t ic_pppc_select_enable_backup;
uint8_t ic_pppc_step_db;
@@ -699,8 +759,9 @@
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:
@@ -728,22 +789,11 @@
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 */
@@ -758,6 +808,7 @@
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 */
@@ -854,6 +905,7 @@
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*/
@@ -868,7 +920,8 @@
u_int32_t ic_rx_agg_timeout;
u_int32_t ic_ndpa_dur;
- u_int32_t ic_txbf_pkt_cnt;
+ u_int32_t ic_su_txbf_pkt_cnt;
+ u_int32_t ic_mu_txbf_pkt_cnt;
u_int32_t ic_tx_max_ampdu_size;
u_int16_t ic_mu_debug_level;
@@ -879,6 +932,13 @@
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 *);
@@ -995,10 +1055,15 @@
void (*ic_mark_channel_availability_status)(struct ieee80211com *ic, struct ieee80211_channel *chan, uint8_t usable);
- 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, const char *offending_func);
- void (*ic_ap_next_cac)(struct ieee80211com *ic, struct ieee80211vap *vap,
+ 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);
+
+ int (*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);
@@ -1008,6 +1073,9 @@
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 */
@@ -1062,6 +1130,8 @@
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,
@@ -1167,10 +1237,6 @@
/* 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;
@@ -1178,11 +1244,27 @@
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)
@@ -1505,6 +1587,7 @@
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 */
@@ -1590,6 +1673,8 @@
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 */
@@ -1610,6 +1695,7 @@
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);
@@ -1744,13 +1830,28 @@
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)
@@ -1940,6 +2041,10 @@
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);
@@ -1950,6 +2055,7 @@
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);
@@ -1969,6 +2075,7 @@
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);
@@ -1978,6 +2085,7 @@
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);
@@ -1991,7 +2099,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), uint8_t reason,
+ void (*finish_csa)(unsigned long arg), uint32_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);
@@ -2009,6 +2117,13 @@
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.
*/
@@ -2031,6 +2146,16 @@
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
*/
@@ -2071,6 +2196,23 @@
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 7323ddc..fd26ce5 100755
--- a/include/qtn/auc_debug_stats.h
+++ b/include/qtn/auc_debug_stats.h
@@ -134,6 +134,7 @@
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 1c147f6..2fc2cce 100644
--- a/include/qtn/lhost_muc_comm.h
+++ b/include/qtn/lhost_muc_comm.h
@@ -17,6 +17,7 @@
#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)
@@ -326,6 +327,9 @@
#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 */
@@ -408,7 +412,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
@@ -542,6 +546,9 @@
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;
@@ -549,6 +556,18 @@
};
#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;
@@ -559,6 +578,9 @@
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 {
@@ -570,6 +592,9 @@
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;
@@ -580,6 +605,7 @@
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 {
@@ -888,6 +914,7 @@
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;
@@ -912,17 +939,15 @@
struct qtn_beacon_args
{
- 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 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 */
};
struct qtn_key {
@@ -969,6 +994,13 @@
#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;
@@ -1010,5 +1042,26 @@
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 5f1f9ae..8c5e3f5 100644
--- a/include/qtn/mproc_sync.h
+++ b/include/qtn/mproc_sync.h
@@ -126,30 +126,20 @@
RUBY_INLINE int
_qtn_mproc_3way_tqe_sem_down(enum topaz_mproc_tqe_sem_id cpuid)
{
- uint32_t sem_get_cnt = 0;
- uint32_t value;
+ const uint32_t set_value = ((cpuid << QTN_MULTI_PROCESSOR_SEMA_KEY_SHIFT) | cpuid);
+ uint32_t sem_set_cnt = 0;
- 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, value);
- value = qtn_mproc_sync_mem_read(TOPAZ_MPROC_SEMA);
-
- if ((value & QTN_MULTI_PROCESS_TQE_SEMA) == cpuid)
+ 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) {
return 1;
- /*
- * 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);
+ }
+ } while (++sem_set_cnt < TQE_SEMA_GET_MAX);
return 0;
}
diff --git a/include/qtn/muc_phy_stats.h b/include/qtn/muc_phy_stats.h
index 396a796..c0734b6 100644
--- a/include/qtn/muc_phy_stats.h
+++ b/include/qtn/muc_phy_stats.h
@@ -72,6 +72,12 @@
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 {
@@ -96,6 +102,8 @@
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 e103114..2445a86 100644
--- a/include/qtn/muc_txrx_stats.h
+++ b/include/qtn/muc_txrx_stats.h
@@ -86,63 +86,7 @@
* 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;
@@ -152,13 +96,7 @@
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;
@@ -172,8 +110,6 @@
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;
@@ -205,10 +141,6 @@
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;
@@ -293,6 +225,11 @@
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;
@@ -817,6 +754,7 @@
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 e761234..e19268d 100644
--- a/include/qtn/qdrv_sch.h
+++ b/include/qtn/qdrv_sch.h
@@ -134,63 +134,6 @@
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)
{
@@ -212,14 +155,71 @@
return 0;
}
-#define qdrv_vlan_tx_tag_present(__skb) ((__skb)->vlan_tci)
+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);
+}
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 vlan_wme_ac = WME_AC_BE;
+ uint8_t tid;
+ uint8_t vlan_index;
if (M_FLAG_ISSET(skb, M_CLASSIFY)) {
return;
@@ -228,28 +228,33 @@
QTN_SKB_CB_ETHERTYPE(skb) = ether_type;
- if (likely(ether_type == __constant_htons(ETH_P_IP))) {
- if ((skb->len >= (data_start - skb->data) + sizeof(*iphdr_p)) &&
- (iphdr_p->version == 4)) {
- wme_ac = qdrv_sch_classify_ipv4(skb, iphdr_p);
- }
- }
+ if (ether_type == __constant_htons(ETH_P_IP)) {
+ struct iphdr *iphdr_p = (struct iphdr *)data_start;
+ if ((skb->len >= (data_start - skb->data) + sizeof(*iphdr_p)) &&
+ (iphdr_p->version == 4))
+ QTN_SKB_CB_IPPROTO(skb) = iphdr_p->protocol;
+ }
#ifdef CONFIG_IPV6
- if (ether_type == __constant_htons(ETH_P_IPV6)) {
+ else if (ether_type == __constant_htons(ETH_P_IPV6)) {
+ struct ipv6hdr *ipv6hdr_p = (struct ipv6hdr *)data_start;
+
if (skb->len >= (data_start - skb->data) + sizeof(struct ipv6hdr) &&
- (iphdr_p->version == 6)) {
- wme_ac = qdrv_sch_classify_ipv6(skb, (struct ipv6hdr *)data_start);
+ (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;
}
}
#endif
+
if (qdrv_sch_classify_ctrl(skb)) {
wme_ac = QTN_AC_MGMT;
- }
-
- 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);
+ } else {
+ topaz_tqe_vlan_gettid(skb->data, &tid, &vlan_index);
+ wme_ac = TID_TO_WMM_AC(tid);
}
skb->priority = wme_ac;
@@ -405,64 +410,6 @@
#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 2016fc5..070c7ad 100644
--- a/include/qtn/qtn_auc_stats_fields.h
+++ b/include/qtn/qtn_auc_stats_fields.h
@@ -1,234 +1,235 @@
- { 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" },
+ { 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" },
diff --git a/include/qtn/qtn_buffers.h b/include/qtn/qtn_buffers.h
index de0540d..a037e66 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 9
-#elif defined (TOPAZ_VB_CONFIG)
+#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 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 9afffc8..90d9bc1 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)) & QVLAN_MASK_VID;
+ ether_type_l3 = ((llc[10] << 0) | (llc[11] << 8));
ether_type_eh = ether_type_l3;
vlan_hdr = 4;
}
diff --git a/include/qtn/qtn_global.h b/include/qtn/qtn_global.h
index c1f5aba..8f4852f 100644
--- a/include/qtn/qtn_global.h
+++ b/include/qtn/qtn_global.h
@@ -58,7 +58,8 @@
#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 800000
+#define QTN_RX_REORDER_BUF_TIMEOUT_US 200000
+#define QTN_RX_REORDER_BUF_TIMEOUT_US_VI 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 */
@@ -114,7 +115,12 @@
#define QTN_DBG_FD_FLAG_MASK 0x0000FFFF
#define QTN_HW_UPDATE_NDPA_DUR 0x0
-#define QTN_TXBF_TX_CNT_DEF_THRSHLD 2
+#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
#if (defined(MUC_BUILD) || defined(SYSTEM_BUILD))
@@ -328,13 +334,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_txbf_pkt_cnt; /* Tx operation count threshold to a TxBF station */
+ 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 */
struct qtn_auto_cca_params g_auto_cca_params;
struct qtn_wowlan_params wowlan_params;
uint8_t g_rx_optim;
@@ -352,6 +358,7 @@
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 */
};
@@ -407,13 +414,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_TXBF_TX_CNT_DEF_THRSHLD, \
+ QTN_SU_TXBF_TX_CNT_DEF_THRSHLD, \
+ QTN_MU_TXBF_TX_CNT_DEF_THRSHLD, \
QTN_AUTO_CCA_PARARMS_DEFAULT, \
{0, 0, 0x0842, 0xffff}, \
0, \
@@ -431,6 +438,7 @@
QTN_AUTO_CS_ENABLE, \
0, \
0, \
+ QTN_RX_BAR_SYNC_QTN, \
"end" \
}
@@ -440,6 +448,8 @@
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 6c663f9..cfbec57 100644
--- a/include/qtn/qtn_muc_stats_print.h
+++ b/include/qtn/qtn_muc_stats_print.h
@@ -11,16 +11,6 @@
"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", \
@@ -30,13 +20,7 @@
"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", \
@@ -50,8 +34,6 @@
"txalert_ndp_update", \
"tx_ndp_q_occupied", \
"tx_ndp_start", \
- "txdone_mgmt", \
- "txdone_data", \
"tx_pwr", \
"bcn_scheme_power_save", \
"bcn_scheme", \
@@ -69,10 +51,6 @@
"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", \
@@ -153,6 +131,11 @@
"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", \
@@ -417,6 +400,7 @@
"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 41da785..eed19e2 100644
--- a/include/qtn/qtn_skb_cb.h
+++ b/include/qtn/qtn_skb_cb.h
@@ -39,7 +39,9 @@
#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_VLAN_TAG_OWE 0x8000 /* VLAN tag is stripped of this skb */
+#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 QTN_SKB_ENCAP_ETH 0
diff --git a/include/qtn/qtn_vlan.h b/include/qtn/qtn_vlan.h
index f9d71e4..ca1c220 100644
--- a/include/qtn/qtn_vlan.h
+++ b/include/qtn/qtn_vlan.h
@@ -22,6 +22,7 @@
#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
@@ -99,6 +100,7 @@
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)
@@ -138,6 +140,10 @@
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 {
@@ -258,25 +264,6 @@
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__)
@@ -289,6 +276,17 @@
}
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))
@@ -302,7 +300,7 @@
{
struct qtn_vlan_pkt *pkt = qtn_vlan_get_info(data);
- if (!qtn_vlan_magic_check(pkt)
+ if (!qtn_vlan_magic_check(outdev, 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);
@@ -360,16 +358,6 @@
}
#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];
@@ -396,9 +384,8 @@
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 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 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 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 9c52eb3..d982684 100644
--- a/include/qtn/qvsp.h
+++ b/include/qtn/qvsp.h
@@ -113,6 +113,8 @@
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 ee1483a..780e5ec 100644
--- a/include/qtn/shared_defs.h
+++ b/include/qtn/shared_defs.h
@@ -114,6 +114,7 @@
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
};
@@ -260,6 +261,17 @@
#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 */
@@ -443,8 +455,9 @@
#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_MASK 0x000B /* Mask for TDLS bits */
+#define IEEE80211_NODE_TDLS_PTI_MASK 0x000B /* Mask for TDLS PTI bits */
#define QTN_VAP_PRIORITY_RESERVED 2 /* reserve the low values for internal use */
#define QTN_VAP_PRIORITY_NUM 4
@@ -465,7 +478,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_IS_NO_RXAMSDU_NO_BF_NODE 0x0000800
+#define QTN_OPTI_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
@@ -583,6 +596,13 @@
/**
* 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 f42926b..e207e6a 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 uint8_t node)
+ const uint8_t port, const uint16_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 uint8_t node)
+ const uint8_t port, const uint16_t node)
{
if (port == TOPAZ_TQE_WMAC_PORT) {
e->node_bitmap[node / TOPAZ_BITS_PER_WD] &= ~(1 << (node % TOPAZ_BITS_PER_WD));
@@ -426,10 +426,9 @@
return &fwt[index];
}
-RUBY_INLINE struct topaz_fwt_sw_mcast_entry *topaz_fwt_sw_mcast_ff_entry_get(uint8_t vap_idx)
+RUBY_INLINE struct topaz_fwt_sw_mcast_entry *topaz_fwt_sw_mcast_ff_entry_get(void)
{
- return (void *)(RUBY_DRAM_BEGIN + TOPAZ_FWT_MCAST_TQE_FF_BASE +
- (vap_idx * TOPAZ_FWT_MCAST_TQE_ENT_SIZE));
+ return (void *)(RUBY_DRAM_BEGIN + TOPAZ_FWT_MCAST_TQE_FF_BASE);
}
RUBY_INLINE struct topaz_fwt_sw_mcast_entry *topaz_fwt_sw_mcast_entry_get(uint16_t index)
@@ -456,29 +455,6 @@
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 9f47d16..2c9c54b 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(uint8_t vap_idx)
+static inline struct topaz_fwt_sw_mcast_entry *fwt_db_get_sw_mcast_ff(void)
{
- return topaz_fwt_sw_mcast_ff_entry_get(vap_idx);
+ return topaz_fwt_sw_mcast_ff_entry_get();
}
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 739413f..0267b16 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(uint8_t node_num, uint8_t vap_idx);
+void fwt_sw_register_node(uint16_t node_num);
/*
* Unregister a node
* @param node_num: node number
* @param vap_idx: vap index
*/
-void fwt_sw_unregister_node(uint8_t node_num, uint8_t vap_idx);
+void fwt_sw_unregister_node(uint16_t node_num);
/*
* Add device to the FWT.
diff --git a/include/qtn/topaz_shared_params.h b/include/qtn/topaz_shared_params.h
index a673848..f2dc0cb 100644
--- a/include/qtn/topaz_shared_params.h
+++ b/include/qtn/topaz_shared_params.h
@@ -54,13 +54,14 @@
enum shared_params_auc_ipc_cmd
{
SHARED_PARAMS_IPC_NONE_CMD = 0,
- SHARED_PARAMS_IPC_M2A_SRESET_BEGIN_CMD,
- SHARED_PARAMS_IPC_M2A_SRESET_END_CMD,
- SHARED_PARAMS_IPC_M2A_NODE_CREATE_CMD,
+
+ /* 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_NODE_CREATE_CMD,
SHARED_PARAMS_IPC_M2A_NODE_DESTROY_CMD,
- SHARED_PARAMS_IPC_M2A_TID_CREATE_CMD,
SHARED_PARAMS_IPC_M2A_SLOW_TID_CREATE_CMD,
+ SHARED_PARAMS_IPC_M2A_TID_CREATE_CMD,
SHARED_PARAMS_IPC_M2A_TID_DESTROY_CMD,
SHARED_PARAMS_IPC_M2A_TID_ACTIVATE_CMD,
SHARED_PARAMS_IPC_M2A_TID_DEACTIVATE_CMD,
@@ -72,17 +73,23 @@
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_PAUSE_ON_CMD,
- SHARED_PARAMS_IPC_M2A_PAUSE_OFF_CMD,
- SHARED_PARAMS_IPC_M2A_NODE_RATEDATA_CHANGE_CMD,
+ SHARED_PARAMS_IPC_M2A_TX_AGG_DURATION,
SHARED_PARAMS_IPC_M2A_FCS_GIVE_CMD,
+ SHARED_PARAMS_IPC_M2A_NODE_RATEDATA_CHANGE_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
@@ -270,13 +277,14 @@
#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 */
-#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
+ /*
+ * '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)
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;
@@ -355,20 +363,22 @@
RUBY_INLINE enum shared_params_auc_ipc_cmd
qtn_mproc_sync_auc_ipc_wait_mready(volatile struct shared_params_auc_ipc *ipc,
- enum shared_params_auc_ipc_cmd *cmds, int cmds_num, int relax_count)
+ int relax_count, int loop_count)
{
- while(1) {
- int i;
- enum shared_params_auc_ipc_cmd cmd = ipc->cmd;
+ enum shared_params_auc_ipc_cmd cmd;
+ int loop = 0;
- for (i = 0; i < cmds_num; ++i) {
- if (cmds[i] == cmd) {
- return 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;
}
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 0cce989..36a7a0a 100644
--- a/include/qtn/topaz_tqe.h
+++ b/include/qtn/topaz_tqe.h
@@ -26,25 +26,27 @@
#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,
- uint8_t vap_idx);
+ *tqe_fwt_get_mcast_hook)(uint16_t fwt_index, const void *addr, uint16_t ether_type);
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)(uint8_t vap_idx);
-typedef void(*tqe_fwt_set_mcast_ff_hook)(uint8_t vap_idx);
+ *tqe_fwt_get_mcast_ff_hook)(void);
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);
@@ -52,7 +54,8 @@
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);
+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_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 80b8f58..0d41069 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_DUMMY_PORT = 15
+ TOPAZ_TQE_DROP_PORT = 15
};
enum topaz_mproc_tqe_sem_id
@@ -71,7 +71,8 @@
#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", }
+#define TOPAZ_TQE_PORT_NAMES { "emac0", "emac1", "wmac", "pcie", "lhost", "muc", "dsp", "auc", \
+ "", "", "", "", "", "", "", "drop", }
#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 7051987..5dad35e 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 (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)
+#define QTN_TXBF_DSP_TO_HOST_INST_MU_GRP 1
+#define QTN_TXBF_DSP_TO_HOST_DELE_MU_GRP 2
#ifndef __ASSEMBLY__
@@ -286,6 +286,9 @@
__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 1669ee4..c0a4fb5 100644
--- a/include/shared/net80211/_ieee80211.h
+++ b/include/shared/net80211/_ieee80211.h
@@ -170,19 +170,6 @@
};
/*
- * 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
*/
@@ -345,6 +332,17 @@
#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,
@@ -1108,6 +1106,14 @@
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 */
@@ -1327,13 +1333,22 @@
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;
- u_int32_t sp_fail;
- u_int32_t lp_fail;
- u_int16_t others_time;
+ 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_int8_t *extra_ie;
u_int16_t extra_ie_len;
} qtn_cca;
@@ -1481,6 +1496,7 @@
(_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 2988ef0..47b9c0e 100644
--- a/include/shared/net80211/ieee80211.h
+++ b/include/shared/net80211/ieee80211.h
@@ -628,7 +628,10 @@
} __packed;
/* Quantenna SCS IE */
-#define QTN_SCS_IE_TYPE_STA_INTF_RPT 0x1
+#define QTN_SCS_IE_TYPE_STA_INTF_RPT 0x1
+#define QTN_SCS_IE_TYPE_STA_FAT_RPT 0x3
+#pragma pack(push)
+#pragma pack(1)
struct ieee80211_ie_qtn_scs {
uint8_t id; /* IEEE80211_ELEMID_VENDOR */
uint8_t len; /* length in bytes */
@@ -636,14 +639,25 @@
uint8_t qtn_ie_type; /* IE type */
uint8_t scs_ie_type; /* for future expansion and backward compatibility */
/* following depends on scs_ie_type */
- 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 */
+ 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 */
uint16_t extra_ie_len; /* extra ie len */
uint8_t extra_ie[0]; /* tdls stats */
-} __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)
+};
+#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)
#define IEEE80211_IS_ALL_SET(__flags__, __msb__) \
(((__flags__) & ((1 << ((__msb__)+1)) - 1)) == ((1 << ((__msb__)+1)) - 1))
@@ -2946,7 +2960,7 @@
#define IEEE80211_RATE_BASIC 0x80
#define IEEE80211_RATE_VAL 0x7f
-#define IEEE80211_BSS_MEMBERSHIP_SELECTOR 0x7F
+#define IEEE80211_BSS_MEMBERSHIP_SELECTOR_HT_PHY 0x7F
/* EPR information element flags */
#define IEEE80211_ERP_NON_ERP_PRESENT 0x01
@@ -3063,6 +3077,9 @@
#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
*/
@@ -3074,6 +3091,7 @@
} __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 fc5c37c..8ea15f9 100644
--- a/include/shared/net80211/ieee80211_dfs_reentry.h
+++ b/include/shared/net80211/ieee80211_dfs_reentry.h
@@ -30,4 +30,11 @@
#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 9c3cd0c..6b43162 100644
--- a/include/shared/net80211/ieee80211_ioctl.h
+++ b/include/shared/net80211/ieee80211_ioctl.h
@@ -307,6 +307,10 @@
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;
@@ -319,6 +323,7 @@
uint16_t iscr_rx_ms;
uint32_t iscr_pmbl;
};
+
struct ieee80211req_scs_ranking_rpt_chan {
uint8_t isrc_chan;
uint8_t isrc_dfs;
@@ -336,12 +341,25 @@
/* 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;
@@ -409,6 +427,7 @@
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,
};
@@ -426,6 +445,7 @@
#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
@@ -471,11 +491,20 @@
};
/*
+ * 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_channel ic_chans[IEEE80211_CHAN_MAX];
+ struct ieee80211_chan ic_chans[IEEE80211_CHAN_MAX];
};
/*
@@ -833,6 +862,7 @@
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 {
@@ -869,6 +899,9 @@
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*/
};
@@ -1352,7 +1385,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_TXBF_PKT_CNT = 305, /* set the pkt cnt per txbf interval to fire sounding to a node */
+ IEEE80211_PARAM_SU_TXBF_PKT_CNT = 305, /* set the pkt cnt per txbf interval to fire SU 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,
@@ -1477,8 +1510,41 @@
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)
@@ -1540,6 +1606,7 @@
#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,
@@ -1844,6 +1911,20 @@
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
new file mode 100644
index 0000000..eb7d501
--- /dev/null
+++ b/include/shared/qtn/beacon_ioctl.h
@@ -0,0 +1,27 @@
+/*
+ * 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 7c30d76..d6bbb4c 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -894,6 +894,15 @@
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 b16e1c9..d3676ec 100644
--- a/net/bridge/br_device.c
+++ b/net/bridge/br_device.c
@@ -22,6 +22,8 @@
#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)
{
@@ -45,6 +47,7 @@
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 570ce26..91a3067 100644
--- a/net/bridge/br_input.c
+++ b/net/bridge/br_input.c
@@ -115,6 +115,11 @@
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)
{
@@ -137,8 +142,11 @@
br_handle_mcast_mgmt_frame(skb, br) &&
br_handle_mcast_exception(br, dest, data)) {
if (BR_INPUT_SKB_CB_MROUTERS_ONLY(skb)) {
- mdst = br_mdb_get_ext(br, skb);
- br_report_flood(br, mdst, 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);
+ }
br_multicast_forward(NULL, skb, skb2);
skb = NULL;
} else if(BR_INPUT_SKB_CB_UCAST_FWD(skb)) {
@@ -206,6 +214,7 @@
}
/* 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 116007c..bd9eafa 100644
--- a/net/bridge/br_multicast.c
+++ b/net/bridge/br_multicast.c
@@ -62,6 +62,9 @@
"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)
{
@@ -148,7 +151,7 @@
}
BR_SNOOP_DBG(" from %pI4 group %pI4%s\n",
- &saddr, igmp->group, snoop_enabled ? "" : " [ignored]");
+ &saddr, &igmp->group, snoop_enabled ? "" : " [ignored]");
}
@@ -941,6 +944,7 @@
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;
@@ -1214,22 +1218,24 @@
/* 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;
}
@@ -1793,7 +1799,14 @@
BR_INPUT_SKB_CB(skb)->igmp = 1;
ih = igmp_hdr(skb2);
- if (br->igmp_snoop_enabled) {
+/*
+ * 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
+ {
switch (ih->type) {
case IGMP_HOST_MEMBERSHIP_REPORT:
case IGMPV2_HOST_MEMBERSHIP_REPORT:
@@ -1814,7 +1827,10 @@
}
}
- br_igmp_snoop_trace(skb->dev, iph->saddr, ih, skb2, br->igmp_snoop_enabled);
+ 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");
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 65aa114..edb0284 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 65cff5e..edcdd52 100644
--- a/net/bridge/br_sysfs_br.c
+++ b/net/bridge/br_sysfs_br.c
@@ -288,6 +288,39 @@
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)
{
@@ -798,6 +831,7 @@
&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