Merge "[qca-nss-drv] Add new WiFi message for MIC error handling."
diff --git a/exports/nss_api_if.h b/exports/nss_api_if.h
index 87a7639..17aff87 100644
--- a/exports/nss_api_if.h
+++ b/exports/nss_api_if.h
@@ -383,7 +383,7 @@
 		/**< Rule that indicates pure bridge flow (no routing is involved). */
 #define NSS_IPV4_CREATE_FLAG_ROUTED 0x04	/**< Rule for a routed connection. */
 
-#define NSS_IPV4_CREATE_FLAG_DSCP_MARKING 0x08	/**< Rule for DSCP marking */
+#define NSS_IPV4_CREATE_FLAG_DSCP_MARKING 0x08	/**< Rule for DSCP marking. */
 #define NSS_IPV4_CREATE_FLAG_VLAN_MARKING 0x10	/**< Rule for VLAN marking. */
 
 /**
diff --git a/exports/nss_bridge.h b/exports/nss_bridge.h
index fe83147..95bc54a 100644
--- a/exports/nss_bridge.h
+++ b/exports/nss_bridge.h
@@ -14,7 +14,7 @@
  **************************************************************************
  */
 
-/*
+/**
  * @file nss_bridge.h
  *	NSS Bridge interface definitions.
  */
diff --git a/exports/nss_capwap.h b/exports/nss_capwap.h
index 3b3e82b..79a0a4f 100644
--- a/exports/nss_capwap.h
+++ b/exports/nss_capwap.h
@@ -180,18 +180,21 @@
 	int8_t rps;
 
 	uint8_t type_flags;		/**< VLAN or PPPOE is configured. */
-	uint8_t l3_proto;		/**< Prototype is NSS_CAPWAP_TUNNEL_IPV4 or NSS_CAPWAP_TUNNEL_IPV6. */
+	uint8_t l3_proto;
+			/**< Prototype is NSS_CAPWAP_TUNNEL_IPV4 or NSS_CAPWAP_TUNNEL_IPV6. */
 	uint8_t which_udp;		/**< Tunnel uses the UDP or UDPLite protocol. */
-	uint32_t mtu_adjust;		/**< MUT is reserved for a DTLS process. */
-	uint32_t gmac_ifnum;		/**< Outgoing physical interface. */
-	uint32_t enabled_features;	/**< Tunnel enabled features bit flag. */
+	uint32_t mtu_adjust;	/**< MTU is reserved for a DTLS process. */
+	uint32_t gmac_ifnum;	/**< Outgoing physical interface. */
+	uint32_t enabled_features;
+			/**< Tunnel enabled features bit flag. */
 
 	/*
 	 * Parameters for each features
 	 */
 	uint32_t dtls_inner_if_num;	/**< Interface number of the associated DTLS node. */
 	uint8_t bssid[ETH_ALEN];	/**< BSSID value. */
-	uint16_t outer_sgt_value;	/**< Security Group Tag value configured for this tunnel. */
+	uint16_t outer_sgt_value;
+			/**< Security Group Tag value configured for this tunnel. */
 };
 
 /**
@@ -215,11 +218,10 @@
  *	DTLS message information.
  */
 struct nss_capwap_dtls_msg {
-	uint32_t enable;	/**< Enable or disable DTLS. */
-	uint32_t dtls_inner_if_num;
-				/**< Interface number of the associated DTLS. */
-	uint32_t mtu_adjust;	/**< MTU adjustment reported by the DTLS node. */
-	uint32_t reserved;	/**< Reserved field for future use. */
+	uint32_t enable;			/**< Enable or disable DTLS. */
+	uint32_t dtls_inner_if_num;	/**< Interface number of the associated DTLS. */
+	uint32_t mtu_adjust;		/**< MTU adjustment reported by the DTLS node. */
+	uint32_t reserved;			/**< Reserved field for future use. */
 };
 
 /**
diff --git a/exports/nss_cmn.h b/exports/nss_cmn.h
index fc01472..70d303a 100644
--- a/exports/nss_cmn.h
+++ b/exports/nss_cmn.h
@@ -14,7 +14,7 @@
  **************************************************************************
  */
 
-/*
+/**
  * @file nss_cmn.h
  *	NSS Common Message Structure and APIs
  */
@@ -23,7 +23,7 @@
 #define __NSS_CMN_H
 
 /**
- * @addtogroup nss_driver_api
+ * @addtogroup nss_common_subsystem
  * @{
  */
 
diff --git a/exports/nss_crypto.h b/exports/nss_crypto.h
index 382672a..5ef514d 100644
--- a/exports/nss_crypto.h
+++ b/exports/nss_crypto.h
@@ -14,7 +14,7 @@
  **************************************************************************
  */
 
-/*
+/**
  * @file nss_crypto.h
  *	NSS Crypto interface definitions.
  */
diff --git a/exports/nss_crypto_cmn.h b/exports/nss_crypto_cmn.h
index 714ef89..d8741c5 100644
--- a/exports/nss_crypto_cmn.h
+++ b/exports/nss_crypto_cmn.h
@@ -22,7 +22,7 @@
 #define __NSS_CRYPTO_CMN_H
 
 /**
- * @addtogroup nss_crypto_cmn_subsystem
+ * @addtogroup nss_crypto_subsystem
  * @{
  */
 
@@ -108,12 +108,12 @@
  *	Response errors from crypto hardware
  */
 enum nss_crypto_cmn_resp_error {
-	NSS_CRYPTO_CMN_RESP_ERROR_NONE = 0,		/**< No error. */
+	NSS_CRYPTO_CMN_RESP_ERROR_NONE = 0,			/**< No error. */
 	NSS_CRYPTO_CMN_RESP_ERROR_HDR_VERSION,		/**< Header version mismatch. */
 	NSS_CRYPTO_CMN_RESP_ERROR_CTX_RANGE,		/**< Crypto index out-of-range. */
 	NSS_CRYPTO_CMN_RESP_ERROR_CTX_NOUSE,		/**< Crypto index is freed. */
 	NSS_CRYPTO_CMN_RESP_ERROR_DATA_EMPTY,		/**< Crypto data is empty. */
-	NSS_CRYPTO_CMN_RESP_ERROR_DATA_LEN,		/**< Crypto data length. */
+	NSS_CRYPTO_CMN_RESP_ERROR_DATA_LEN,			/**< Crypto data length. */
 	NSS_CRYPTO_CMN_RESP_ERROR_DATA_TIMEOUT,		/**< Data timeout from hardware. */
 	NSS_CRYPTO_CMN_RESP_ERROR_CIPHER_ALGO,		/**< Cipher algorithm is not supported. */
 	NSS_CRYPTO_CMN_RESP_ERROR_CIPHER_MODE,		/**< Cipher mode is not supported. */
@@ -182,8 +182,8 @@
  * nss_crypto_cmn_node
  *	Node message for setting up the crypto node.
  *
- * Note: Upon boot this is the first message sent by Host to NSS crypto
- *	- It notifies the maximum number of Crypto Context.
+ * Note: Upon boot this is the first message sent by Host to NSS crypto.
+ *	- It notifies the maximum number of crypto context.
  *	- It notifies the maximum number of DMA rings.
  *	- It returns the maximum size of crypto context record.
  */
@@ -198,8 +198,8 @@
  *	Engine message for setting up the instance of crypto engine.
  *
  * Note: This is sent after 'node' message for each engine to
- *	- Get valid DMA pairs supported by firmware
- *	- Get maximum request/token count available in firmware
+ *	- Get valid DMA pairs supported by firmware.
+ *	- Get maximum request/token count available in firmware.
  */
 struct nss_crypto_cmn_engine {
 	uint32_t fw_ver[NSS_CRYPTO_CMN_VER_WORDS];	/**< Firmware version. */
@@ -233,7 +233,7 @@
 
 /**
  * nss_crypto_cmn_stats
- *	statistics message applicable for Node/Engine/Context.
+ *	Statistics message applicable for node/engine/context.
  */
 struct nss_crypto_cmn_stats {
 	struct nss_cmn_node_stats nstats;	/**< Common node statistics. */
@@ -263,16 +263,16 @@
 #ifdef __KERNEL__  /* only kernel will use */
 
 /**
- * Callback function for receiving crypto transformation upon completion
+ * Callback function for receiving crypto transformation upon completion.
  *
- * @datatype
+ * @datatypes
  * net_device \n
  * sk_buff \n
  * napi_struct
  *
- * @param[in] netdev  Networking device registered for callback
- * @param[in] skb     Packet buffer
- * @param[in] napi    NAPI pointer for Linux NAPI handling
+ * @param[in] netdev  Networking device registered for callback.
+ * @param[in] skb     Packet buffer.
+ * @param[in] napi    NAPI pointer for Linux NAPI handling.
  *
  * @return
  * None.
@@ -281,9 +281,9 @@
 						struct napi_struct *napi);
 
 /**
- * Callback function for receiving crypto_cmn messages
+ * Callback function for receiving crypto_cmn messages.
  *
- * @datatype
+ * @datatypes
  * nss_crypto_cmn_msg
  *
  * @param[in] app_data  Context of the callback user.
@@ -296,9 +296,9 @@
 
 /**
  * nss_crypto_cmn_tx_buf
- *	Send crypto payload to firmware for transformation
+ *	Send crypto payload to firmware for transformation.
  *
- * @datatype
+ * @datatypes
  * nss_ctx_instance \n
  * sk_buff
  *
@@ -313,9 +313,9 @@
 
 /**
  * nss_crypto_cmn_tx_msg
- *	Send crypto message to firmware for configuration
+ *	Send crypto message to firmware for configuration.
  *
- * @datatype
+ * @datatypes
  * nss_ctx_instance \n
  * nss_crypto_cmn_msg
  *
@@ -329,9 +329,9 @@
 
 /**
  * nss_crypto_cmn_tx_msg
- *	Send crypto message to firmware for configuration synchronously
+ *	Send crypto message to firmware for configuration synchronously.
  *
- * @datatype
+ * @datatypes
  * nss_ctx_instance \n
  * nss_crypto_cmn_msg
  *
@@ -350,13 +350,13 @@
 
 /**
  * nss_crypto_cmn_notify_register
- *	register a event callback handler with NSS driver
+ *	Register a event callback handler with NSS driver
  *
- * @datatype
+ * @datatypes
  * nss_crypto_cmn_msg_callback_t
  *
- * @param[in] cb            Event callback function.
- * @param[in] app_data[IN]  Context of the callback user.
+ * @param[in] cb        Event callback function.
+ * @param[in] app_data  Context of the callback user.
  *
  * @return
  * Pointer to the NSS core context.
@@ -365,12 +365,12 @@
 
 /**
  * nss_crypto_cmn_notify_unregister
- *	unregister the event callback handler with NSS driver
+ *	De-register the event callback handler with NSS driver.
  *
- * @datatype
+ * @datatypes
  * nss_ctx_instance
  *
- * @param[in] nss_ctx  NSS context per NSS core.
+ * @param[in] ctx  Pointer to the NSS context per NSS core.
  *
  * @return
  * None.
@@ -379,9 +379,9 @@
 
 /**
  * nss_crypto_cmn_data_register
- *	crypto data register
+ *	Crypto data register.
  *
- * @datatype
+ * @datatypes
  * nss_crypto_cmn_buf_callback_t \n
  * net_device
  *
@@ -400,7 +400,7 @@
 
 /**
  * nss_crypto_cmn_data_unregister
- *	crypto data unregister
+ *	Crypto data de-register.
  *
  * @param[in] ctx     NSS context per NSS core.
  * @param[in] if_num  Interface number.
@@ -412,7 +412,7 @@
 
 /**
  * nss_crypto_cmn_get_context
- *	get the per NSS core context enabled for crypto
+ *	Get the per NSS core context enabled for crypto.
  *
  * @return
  * Pointer to the NSS core context.
@@ -421,9 +421,9 @@
 
 /**
  * nss_crypto_cmn_msg_init
- *	crypto common message init
+ *	Crypto common message initialization.
  *
- * @datatype
+ * @datatypes
  * nss_crypto_cmn_msg \n
  * nss_crypto_cmn_msg_callback_t
  *
diff --git a/exports/nss_def.h b/exports/nss_def.h
index cd553cd..9bfab79 100644
--- a/exports/nss_def.h
+++ b/exports/nss_def.h
@@ -14,7 +14,7 @@
  **************************************************************************
  */
 
-/*
+/**
  * @file nss_def.h
  *	NSS definitions
  */
@@ -23,7 +23,7 @@
 #define __NSS_DEF_H
 
 /**
- * @addtogroup nss_driver_api
+ * @addtogroup nss_common_subsystem
  * @{
  */
 
diff --git a/exports/nss_dtls_cmn.h b/exports/nss_dtls_cmn.h
index 2285974..5752987 100644
--- a/exports/nss_dtls_cmn.h
+++ b/exports/nss_dtls_cmn.h
@@ -72,7 +72,8 @@
 };
 
 /**
- * DTLS node statistics
+ * nss_dtls_cmn_node_stats
+ * 	DTLS node statistics.
  */
 struct nss_dtls_cmn_node_stats {
 	uint32_t fail_ctx_alloc;	/**< Failure in allocating a context. */
@@ -81,7 +82,8 @@
 };
 
 /**
- * DTLS hardware statistics
+ * nss_dtls_cmn_hw_stats
+ * 	DTLS hardware statistics.
  */
 struct nss_dtls_cmn_hw_stats {
 	uint32_t len_error;             /**< Length error. */
diff --git a/exports/nss_edma.h b/exports/nss_edma.h
index d21b3e6..744c59b 100644
--- a/exports/nss_edma.h
+++ b/exports/nss_edma.h
@@ -14,7 +14,7 @@
  **************************************************************************
  */
 
-/*
+/**
  * @file nss_edma.h
  *	NSS EDMA interface definitions.
  */
diff --git a/exports/nss_gre_tunnel.h b/exports/nss_gre_tunnel.h
index 218f767..5aaeafe 100644
--- a/exports/nss_gre_tunnel.h
+++ b/exports/nss_gre_tunnel.h
@@ -14,7 +14,7 @@
  **************************************************************************
  */
 
-/*
+/**
  * @file nss_gre_tunnel.h
  *	NSS GRE Tunnel interface definitions.
  */
diff --git a/exports/nss_if.h b/exports/nss_if.h
index bfa1add..cd9b26e 100644
--- a/exports/nss_if.h
+++ b/exports/nss_if.h
@@ -14,7 +14,7 @@
  **************************************************************************
  */
 
-/*
+/**
  * @file nss_if.h
  *	NSS interface definitions.
  */
@@ -23,7 +23,7 @@
 #define __NSS_IF_H
 
 /**
- * @addtogroup nss_driver_api
+ * @addtogroup nss_driver_subsystem
  * @{
  */
 
diff --git a/exports/nss_ipsec.h b/exports/nss_ipsec.h
index 6008235..a5adfd7 100644
--- a/exports/nss_ipsec.h
+++ b/exports/nss_ipsec.h
@@ -14,7 +14,7 @@
  **************************************************************************
  */
 
-/*
+/**
  * @file nss_ipsec.h
  *	NSS IPSec interface definitions.
  */
@@ -207,7 +207,7 @@
 	uint32_t fail_hash_cont;	/**< Consecutive hash fail count. */
 	uint8_t esn_enabled;		/**< Indicates whether ESN is enabled. */
 	uint8_t res[3];			/**< Reserved for future use. */
-} __attribute__((packed));
+} /** @cond */ __attribute__((packed))/** @endcond */;
 
 /**
  * nss_ipsec_flow_stats
diff --git a/exports/nss_ipsecmgr.h b/exports/nss_ipsecmgr.h
index 77626ce..3fe3460 100644
--- a/exports/nss_ipsecmgr.h
+++ b/exports/nss_ipsecmgr.h
@@ -14,7 +14,7 @@
  **************************************************************************
  */
 
-/*
+/**
  * @file nss_ipsecmgr.h
  *	NSS IPSec Manager interface definitions.
  */
@@ -23,7 +23,7 @@
 #define __NSS_IPSECMGR_H
 
 /**
- * @addtogroup nss_ipsec_manager_subsystem
+ * @addtogroup nss_ipsec_subsystem
  * @{
  */
 
diff --git a/exports/nss_ipv4.h b/exports/nss_ipv4.h
index f78bc90..cb0a6eb 100644
--- a/exports/nss_ipv4.h
+++ b/exports/nss_ipv4.h
@@ -14,7 +14,7 @@
  **************************************************************************
  */
 
-/*
+/**
  * @file nss_ipv4.h
  *	NSS IPv4 interface definitions.
  */
@@ -294,7 +294,8 @@
 };
 
 /**
- * RPS rule structure
+ * nss_ipv4_rps_rule
+ *	RPS rule structure.
  */
 struct nss_ipv4_rps_rule {
 	uint8_t flow_rps;
diff --git a/exports/nss_ipv6.h b/exports/nss_ipv6.h
index 8d676d2..d25c277 100644
--- a/exports/nss_ipv6.h
+++ b/exports/nss_ipv6.h
@@ -14,7 +14,7 @@
  **************************************************************************
  */
 
-/*
+/**
  * @file nss_ipv6.h
  *	NSS IPv6 interface definitions.
  */
@@ -336,7 +336,8 @@
 };
 
 /**
- * RPS rule structure
+ * nss_ipv6_rps_rule
+ *	RPS rule structure.
  */
 struct nss_ipv6_rps_rule {
 	uint8_t flow_rps;
diff --git a/exports/nss_n2h.h b/exports/nss_n2h.h
index bf28312..937a422 100644
--- a/exports/nss_n2h.h
+++ b/exports/nss_n2h.h
@@ -131,7 +131,7 @@
 			/**< Virtual addresses of the buffers. */
 #ifndef __LP64__
 	uint32_t padding[MAX_PAGES_PER_MSG];
-			/* Pad to fit 64bits, do not reuse */
+			/* Pad to fit 64 bits, do not reuse. */
 #endif
 };
 
diff --git a/exports/nss_oam.h b/exports/nss_oam.h
index 292d8be..af25e37 100644
--- a/exports/nss_oam.h
+++ b/exports/nss_oam.h
@@ -14,7 +14,7 @@
  **************************************************************************
  */
 
-/*
+/**
  * @file nss_oam.h
  *	NSS OAM - Operations, Administration and Maintenance Service
  */
diff --git a/exports/nss_portid.h b/exports/nss_portid.h
index 159c364..61e8ac6 100644
--- a/exports/nss_portid.h
+++ b/exports/nss_portid.h
@@ -14,7 +14,7 @@
  **************************************************************************
  */
 
-/*
+/**
  * @file nss_portid.h
  *	NSS Port ID interface definitions.
  */
@@ -232,7 +232,7 @@
  *	Deregisters the port interface from the NSS.
  *
  * @param[in] if_num  NSS interface number.
-. *
+ *
  * @return
  * TRUE or FALSE.
  *
diff --git a/exports/nss_ppe.h b/exports/nss_ppe.h
index d9f534b..f3ac045 100644
--- a/exports/nss_ppe.h
+++ b/exports/nss_ppe.h
@@ -14,7 +14,7 @@
  **************************************************************************
  */
 
-/*
+/**
  * @file nss_ppe.h
  *	NSS PPE interface definitions.
  */
@@ -63,12 +63,12 @@
 	uint32_t nss_ppe_v4_create_fail;	/**< Number of IPv4 create failures. */
 	uint32_t nss_ppe_v4_destroy_req;	/**< Number of IPv4 delete requests. */
 	uint32_t nss_ppe_v4_destroy_fail;	/**< Number of IPv4 delete failures. */
-	uint32_t nss_ppe_v4_mc_create_req;	/**< Number of IPv4 MC create requests */
-	uint32_t nss_ppe_v4_mc_create_fail;	/**< Number of IPv4 MC create failure */
-	uint32_t nss_ppe_v4_mc_update_req;	/**< Number of IPv4 MC update requests */
-	uint32_t nss_ppe_v4_mc_update_fail;	/**< Number of IPv4 MC update failure */
-	uint32_t nss_ppe_v4_mc_destroy_req;	/**< Number of IPv4 MC delete requests */
-	uint32_t nss_ppe_v4_mc_destroy_fail;	/**< Number of IPv4 MC delete failure */
+	uint32_t nss_ppe_v4_mc_create_req;	/**< Number of IPv4 MC create requests. */
+	uint32_t nss_ppe_v4_mc_create_fail;	/**< Number of IPv4 MC create failure. */
+	uint32_t nss_ppe_v4_mc_update_req;	/**< Number of IPv4 MC update requests. */
+	uint32_t nss_ppe_v4_mc_update_fail;	/**< Number of IPv4 MC update failure. */
+	uint32_t nss_ppe_v4_mc_destroy_req;	/**< Number of IPv4 MC delete requests. */
+	uint32_t nss_ppe_v4_mc_destroy_fail;	/**< Number of IPv4 MC delete failure. */
 
 	uint32_t nss_ppe_v6_l3_flows;		/**< Number of IPv6 routed flows. */
 	uint32_t nss_ppe_v6_l2_flows;		/**< Number of IPv6 bridge flows. */
@@ -76,12 +76,12 @@
 	uint32_t nss_ppe_v6_create_fail;	/**< Number of IPv6 create failures. */
 	uint32_t nss_ppe_v6_destroy_req;	/**< Number of IPv6 delete requests. */
 	uint32_t nss_ppe_v6_destroy_fail;	/**< Number of IPv6 delete failures. */
-	uint32_t nss_ppe_v6_mc_create_req;	/**< Number of IPv6 MC create requests */
-	uint32_t nss_ppe_v6_mc_create_fail;	/**< Number of IPv6 MC create failure */
-	uint32_t nss_ppe_v6_mc_update_req;	/**< Number of IPv6 MC update requests */
-	uint32_t nss_ppe_v6_mc_update_fail;	/**< Number of IPv6 MC update failure */
-	uint32_t nss_ppe_v6_mc_destroy_req;	/**< Number of IPv6 MC delete requests */
-	uint32_t nss_ppe_v6_mc_destroy_fail;	/**< Number of IPv6 MC delete failure */
+	uint32_t nss_ppe_v6_mc_create_req;	/**< Number of IPv6 MC create requests. */
+	uint32_t nss_ppe_v6_mc_create_fail;	/**< Number of IPv6 MC create failure. */
+	uint32_t nss_ppe_v6_mc_update_req;	/**< Number of IPv6 MC update requests. */
+	uint32_t nss_ppe_v6_mc_update_fail;	/**< Number of IPv6 MC update failure. */
+	uint32_t nss_ppe_v6_mc_destroy_req;	/**< Number of IPv6 MC delete requests. */
+	uint32_t nss_ppe_v6_mc_destroy_fail;	/**< Number of IPv6 MC delete failure. */
 
 	uint32_t nss_ppe_fail_vp_full;
 			/**< Request failed because the virtual port table is full */
@@ -114,7 +114,7 @@
  *	Message structure for L2 exception.
  */
 struct nss_ppe_l2_exception_msg {
-	uint32_t l2_exception_enable;   /**< Enable/Disable L2 exception */
+	uint32_t l2_exception_enable;   /**< Enable/Disable L2 exception. */
 };
 
 /**
diff --git a/exports/nss_project.h b/exports/nss_project.h
index a1a2cc9..bf32ae4 100644
--- a/exports/nss_project.h
+++ b/exports/nss_project.h
@@ -23,7 +23,7 @@
 #define __NSS_PROJECT_H
 
 /**
- * @addtogroup nss_project_subsystem
+ * @addtogroup nss_dscp2pri_subsystem
  * @{
  */
 
diff --git a/exports/nss_shaper.h b/exports/nss_shaper.h
index fcb49cc..16dbf70 100644
--- a/exports/nss_shaper.h
+++ b/exports/nss_shaper.h
@@ -641,7 +641,7 @@
  *	Configuration message for a shaper node.
  */
 struct nss_shaper_configure {
-	nss_shaper_config_type_t request_type;		/**< Messgae is a request. */
+	nss_shaper_config_type_t request_type;		/**< Message is a request. */
 	nss_shaper_response_type_t response_type;	/**< Message is a response. */
 
 	/**
diff --git a/exports/nss_vlan.h b/exports/nss_vlan.h
index 2dbf47e..872d2e0 100644
--- a/exports/nss_vlan.h
+++ b/exports/nss_vlan.h
@@ -14,7 +14,7 @@
  **************************************************************************
  */
 
-/*
+/**
  * @file nss_vlan.h
  *	NSS VLAN interface definitions.
  */
diff --git a/exports/nss_wifi.h b/exports/nss_wifi.h
index ee5be92..7925c10 100644
--- a/exports/nss_wifi.h
+++ b/exports/nss_wifi.h
@@ -14,7 +14,7 @@
  **************************************************************************
  */
 
-/*
+/**
  * @file nss_wifi.h
  *	NSS TO HLOS Wi-Fi interface definitions.
  */
diff --git a/exports/nss_wifi_if.h b/exports/nss_wifi_if.h
index 79043d2..3ef2b13 100644
--- a/exports/nss_wifi_if.h
+++ b/exports/nss_wifi_if.h
@@ -14,7 +14,7 @@
  **************************************************************************
  */
 
-/*
+/**
  * @file nss_wifi_if.h
  *	NSS Wi-Fi interface message Structure and APIs.
  */
@@ -23,7 +23,7 @@
 #define __NSS_WIFI_IF_H
 
 /**
- * @addtogroup nss_wifi_msg_if_subsystem
+ * @addtogroup nss_wifi_subsystem
  * @{
  */
 
diff --git a/exports/nss_wifi_vdev.h b/exports/nss_wifi_vdev.h
index bd5d0e2..19ff628 100644
--- a/exports/nss_wifi_vdev.h
+++ b/exports/nss_wifi_vdev.h
@@ -26,17 +26,13 @@
  * @addtogroup nss_wifi_vdev_subsystem
  * @{
  */
-
 #define NSS_WIFI_HTT_TRANSFER_HDRSIZE_WORD 6	/**< Size of the Host-To-Target (HTT) message transfer header. */
 #define NSS_WIFI_VDEV_PER_PACKET_METADATA_OFFSET 4
-						/**< Offset of the metadata in a (virtual-device) vdev message. */
+/**< Offset of the metadata in a (virtual-device) vdev message. */
 #define NSS_WIFI_VDEV_DSCP_MAP_LEN 64		/**< Length of the DSCP MAP field. */
-#define NSS_WIFI_VDEV_IPV6_ADDR_LENGTH 16
-		/**< Size of the IPv6 address field. */
-#define NSS_WIFI_MAX_SRCS 4
-		/**< Maximum number of multicast sources. */
-#define NSS_WIFI_VDEV_MAX_ME_ENTRIES 32
-		/**< Maximum number of multicast enhancement entries. */
+#define NSS_WIFI_VDEV_IPV6_ADDR_LENGTH 16	/**< Size of the IPv6 address field. */
+#define NSS_WIFI_MAX_SRCS 4			/**< Maximum number of multicast sources. */
+#define NSS_WIFI_VDEV_MAX_ME_ENTRIES 32		/**< Maximum number of multicast enhancement entries. */
 
 /**
  * nss_wifi_vdev_msg_types
@@ -127,6 +123,7 @@
 	NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_WNM_TFS = 10,	/**< WNM TFGS related metadata. */
 	NSS_WIFI_VDEV_EXT_TX_COMPL_PKT_TYPE = 11,	/**< Tx completion. */
 	NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_WDS_LEARN = 12,	/**< WDS source port learning command. */
+	NSS_WIFI_VDEV_EXT_DATA_PPDU_INFO = 13,		/**< PPDU metadata information. */
 	NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_MAX
 };
 
@@ -142,23 +139,24 @@
 	NSS_WIFI_VDEV_NAWDS_MODE_CMD,	/**< Configuration to set NAWDS mode on VAP. */
 	NSS_WIFI_VDEV_EXTAP_CONFIG_CMD,	/**< Configuration to set extended AP mode on VAP. */
 	NSS_WIFI_VDEV_CFG_BSTEER_CMD,	/**< Configuration to set bandsteering on VAP. */
-	NSS_WIFI_VDEV_VOW_DBG_MODE_CMD,	/**< Configuration to set video over wireless(VOW) debug mode on VAP. */
+	NSS_WIFI_VDEV_VOW_DBG_MODE_CMD,	/**< Configuration to set video over wireless (VOW) debug mode on VAP. */
 	NSS_WIFI_VDEV_VOW_DBG_RST_STATS_CMD,
-									/**< Configuration to reset video over wireless(VOW) debug mode on VAP. */
+					/**< Configuration to reset video over wireless (VOW) debug mode on VAP. */
 	NSS_WIFI_VDEV_CFG_DSCP_OVERRIDE_CMD,
-									/**< Configuration to set DSCP/TID value override on VAP. */
-	NSS_WIFI_VDEV_CFG_WNM_CAP_CMD,	/**< Configuration to set wireless network management(WNM) capability on VAP. */
-	NSS_WIFI_VDEV_CFG_WNM_TFS_CMD,	/**< Configuration to set WNM traffic filtering and sleep mode(TFS) capability on VAP. */
+					/**< Configuration to set DSCP/TID value override on VAP. */
+	NSS_WIFI_VDEV_CFG_WNM_CAP_CMD,	/**< Configuration to set wireless network management (WNM) capability on VAP. */
+	NSS_WIFI_VDEV_CFG_WNM_TFS_CMD,	/**< Configuration to set WNM traffic filtering and sleep mode (TFS) capability on VAP. */
 	NSS_WIFI_VDEV_CFG_WDS_EXT_ENABLE_CMD,
-									/**< Configuration to set WDS extention capability on VAP. */
-	NSS_WIFI_VDEV_CFG_WDS_CMD,		/**< Configuration to set WDS on VAP. */
-	NSS_WIFI_VDEV_CFG_AP_BRIDGE_CMD,        /**< Configuration to enable/disable client isolation. */
+					/**< Configuration to set WDS extention capability on VAP. */
+	NSS_WIFI_VDEV_CFG_WDS_CMD,	/**< Configuration to set WDS on VAP. */
+	NSS_WIFI_VDEV_CFG_AP_BRIDGE_CMD,
+					/**< Configuration to enable/disable client isolation. */
 	NSS_WIFI_VDEV_MAX_CMD
 };
 
 /**
  * nss_wifi_vdev_dp_type
- *	Vdev datapath types.
+ *	Virtual device datapath types.
  */
 enum nss_wifi_vdev_dp_type {
 	NSS_WIFI_VDEV_DP_ACCELERATED,		/**< Wi-Fi accelerated VAP type. */
@@ -178,17 +176,17 @@
 	uint32_t downloadlen;		/**< Size of the header download length. */
 	uint32_t hdrcachelen;		/**< Size of the header cache. */
 	uint32_t hdrcache[NSS_WIFI_HTT_TRANSFER_HDRSIZE_WORD];
-			/**< Cached per descriptor metedata shared with NSS Firmware. */
-	uint32_t opmode;		/**< VAP operating mode: Access-Point(AP) or Station(STA). */
+					/**< Cached per descriptor metedata shared with NSS Firmware. */
+	uint32_t opmode;		/**< VAP operating mode: Access-Point (AP) or Station (STA). */
 	uint32_t mesh_mode_en;		/**< Mesh mode is enabled. */
 	uint8_t is_mpsta;
-			/**< Specifies whether the station is a VAP Master-Proxy(MP) station. */
+					/**< Specifies whether the station is a VAP Master-Proxy (MP) station. */
 	uint8_t is_psta;
-			/**< Specifies whether the station is a proxy station. */
+					/**< Specifies whether the station is a proxy station. */
 	uint8_t special_vap_mode;
-			/**< Special VAP for monitoring received management packets. */
+					/**< Special VAP for monitoring received management packets. */
 	uint8_t smartmesh_mode_en;
-			/**< VAP is configured as a smart monitor VAP. */
+					/**< VAP is configured as a smart monitor VAP. */
 };
 
 /**
@@ -241,7 +239,8 @@
 				/**< IPv6 address. */
 	} u;			/**< IP address of the multicast group. */
 
-	uint8_t grp_addr[ETH_ALEN];	/**< MAC address of the multicast group. */
+	uint8_t grp_addr[ETH_ALEN];
+				/**< MAC address of the multicast group. */
 };
 
 /**
@@ -249,7 +248,7 @@
  *	Information for deleting a snooplist group list.
  */
 struct nss_wifi_vdev_me_snptbl_grp_delete_msg {
-	uint32_t ether_type;		/**< Ether type of the multicast group. */
+	uint32_t ether_type;	/**< Ether type of the multicast group. */
 
 	/**
 	 * IP address of the multicast group.
@@ -269,7 +268,7 @@
  *	Information for adding a snooplist group member.
  */
 struct nss_wifi_vdev_me_snptbl_grp_mbr_add_msg {
-	uint32_t ether_type;		/**< Ether type of the multicast group. */
+	uint32_t ether_type;	/**< Ether type of the multicast group. */
 
 	/**
 	 * IP address of the multicast group.
@@ -281,16 +280,15 @@
 				/**< IPv6 address. */
 	} u;			/**< IP address of the multicast group. */
 
-	uint32_t peer_id;		/**< Peer ID. */
-	uint8_t grp_addr[ETH_ALEN];	/**< MAC address of the multicast group. */
+	uint32_t peer_id;	/**< Peer ID. */
+	uint8_t grp_addr[ETH_ALEN];
+				/**< MAC address of the multicast group. */
 	uint8_t grp_member_addr[ETH_ALEN];
-		/**< MAC address of the multicast group member. */
-	uint8_t mode;
-		/**< Multi-cast Enhancement Mode - Mode 2 and Mode 5. */
-	uint8_t nsrcs;
-		/**< Number of source IP addresses for SSM. */
+				/**< MAC address of the multicast group member. */
+	uint8_t mode;		/**< Multi-cast Enhancement Mode - Mode 2 and Mode 5. */
+	uint8_t nsrcs;		/**< Number of source IP addresses for SSM. */
 	uint8_t src_ip_addr[NSS_WIFI_VDEV_IPV6_ADDR_LENGTH * NSS_WIFI_MAX_SRCS];
-		/**< Source IP address. */
+				/**< Source IP address. */
 };
 
 /**
@@ -309,11 +307,10 @@
 		uint8_t grpaddr_ip6[NSS_WIFI_VDEV_IPV6_ADDR_LENGTH];
 				/**< IPv6 address. */
 	}u;			/**< IP address of the multicast group. */
-
 	uint8_t grp_addr[ETH_ALEN];
-			/**< MAC address of the multicast group. */
+				/**< MAC address of the multicast group. */
 	uint8_t grp_member_addr[ETH_ALEN];
-			/**< MAC address of the multicast group member. */
+				/**< MAC address of the multicast group member. */
 };
 
 /**
@@ -333,13 +330,14 @@
 				/**< IPv6 address. */
 	}u;			/**< IP address of the multicast group. */
 
-	uint8_t grp_addr[ETH_ALEN];	/**< MAC address of the multicast group. */
+	uint8_t grp_addr[ETH_ALEN];
+				/**< MAC address of the multicast group. */
 	uint8_t grp_member_addr[ETH_ALEN];
-			/**< MAC address of the multicast group member. */
-	uint8_t mode;	/**< Multi-cast Enhancement Mode - Mode 2 and Mode 5 */
-	uint8_t nsrcs;	/**< Number of source IP addresses for SSM. */
+				/**< MAC address of the multicast group member. */
+	uint8_t mode;		/**< Multi-cast Enhancement Mode - Mode 2 and Mode 5 */
+	uint8_t nsrcs;		/**< Number of source IP addresses for SSM. */
 	uint8_t src_ip_addr[NSS_WIFI_VDEV_IPV6_ADDR_LENGTH * NSS_WIFI_MAX_SRCS];
-			/**< Source IP address. */
+				/**< Source IP address. */
 };
 
 /**
@@ -356,7 +354,7 @@
  */
 struct nss_wifi_vdev_txmsg {
 	uint16_t peer_id;	/**< Peer ID. */
-	uint16_t tid;		/**< TID. */
+	uint16_t tid;		/**< Traffic ID. */
 };
 
 /**
@@ -393,7 +391,7 @@
  */
 struct nss_wifi_vdev_dscptid_map_id {
 	uint8_t dscp_tid_map_id;
-		/**< Dscp to TID mapping id to be used.  */
+		/**< DSCP to TID mapping ID to be used.  */
 };
 
 /**
@@ -401,10 +399,11 @@
  *	Per-packet metadata for IGMP packets.
  */
 struct nss_wifi_vdev_igmp_per_packet_metadata {
-	uint32_t tid;				/**< TID. */
-	uint32_t tsf32;				/**< TSF value. */
-	uint8_t peer_mac_addr[ETH_ALEN];	/**< Peer MAC address. */
-	uint8_t reserved[2];			/**< Reserved for 4 byte-alignment. */
+	uint32_t tid;		/**< TID. */
+	uint32_t tsf32;		/**< TSF value. */
+	uint8_t peer_mac_addr[ETH_ALEN];
+				/**< Peer MAC address. */
+	uint8_t reserved[2];	/**< Reserved for 4 byte-alignment. */
 };
 
 /**
@@ -423,34 +422,39 @@
  *	Per-packet metadata for Tx completion information packets.
  */
 struct nss_wifi_vdev_txinfo_per_packet_metadata {
-	uint32_t status;		/**< Tx completion status. */
-	uint16_t msdu_count;		/**< Count of MSDUs in the MSDU list. */
-	uint16_t num_msdu;		/**< Sequence Number of MSDU in the MSDU list. */
-	uint32_t msdu_q_time;		/**< Time spent by an MSDU in the Wi-Fi firmware. */
-	uint32_t ppdu_rate;		/**< PPDU rate in code rate. */
-	uint8_t ppdu_num_mpdus_success;		/**< Number of successful MPDUs. */
-	uint8_t ppdu_num_mpdus_fail;		/**< Number of failed MPDUs. */
-	uint16_t ppdu_num_msdus_success;	/**< Number of successful MSDUs. */
-	uint32_t ppdu_bytes_success;	/**< Number of successful bytes. */
-	uint32_t ppdu_duration;		/**< Estimated air time. */
-	uint8_t ppdu_retries;		/**< Number of times a PPDU is retried. */
-	uint8_t ppdu_is_aggregate;	/**< Flag to check whether a PPDU is aggregated. */
-	uint16_t start_seq_num;		/**< Starting MSDU ID for this PPDU. */
-	uint16_t version;		/**< PPDU statistics version. */
+	uint32_t status;	/**< Tx completion status. */
+	uint16_t msdu_count;	/**< Count of MSDUs in the MSDU list. */
+	uint16_t num_msdu;	/**< Sequence Number of MSDU in the MSDU list. */
+	uint32_t msdu_q_time;	/**< Time spent by an MSDU in the Wi-Fi firmware. */
+	uint32_t ppdu_rate;	/**< PPDU rate in code rate. */
+	uint8_t ppdu_num_mpdus_success;
+				/**< Number of successful MPDUs. */
+	uint8_t ppdu_num_mpdus_fail;
+				/**< Number of failed MPDUs. */
+	uint16_t ppdu_num_msdus_success;
+				/**< Number of successful MSDUs. */
+	uint32_t ppdu_bytes_success;
+				/**< Number of successful bytes. */
+	uint32_t ppdu_duration;	/**< Estimated air time. */
+	uint8_t ppdu_retries;	/**< Number of times a PPDU is retried. */
+	uint8_t ppdu_is_aggregate;
+				/**< Flag to check whether a PPDU is aggregated. */
+	uint16_t start_seq_num;	/**< Starting MSDU ID for this PPDU. */
+	uint16_t version;	/**< PPDU statistics version. */
 	uint32_t ppdu_ack_timestamp;
-			/**< Timestamp(in ms) when an acknowledgement was received. */
+				/**< Timestamp (in ms) when an acknowledgement was received. */
 	uint32_t ppdu_bmap_enqueued_lo;
-			/**< Bitmap of packets enqueued to the hardware (LSB). */
+				/**< Bitmap of packets enqueued to the hardware (LSB). */
 	uint32_t ppdu_bmap_enqueued_hi;
-			/**< Bitmap of packets enqueued to the hardware (MSB). */
+				/**< Bitmap of packets enqueued to the hardware (MSB). */
 	uint32_t ppdu_bmap_tried_lo;
-			/**< Bitmap of packets sent over the air (LSB). */
+				/**< Bitmap of packets sent over the air (LSB). */
 	uint32_t ppdu_bmap_tried_hi;
-			/**< Bitmap of packets sent over the air (MSB). */
+				/**< Bitmap of packets sent over the air (MSB). */
 	uint32_t ppdu_bmap_failed_lo;
-			/**< Bitmap of packets that failed to be acknowledged (LSB). */
+				/**< Bitmap of packets that failed to be acknowledged (LSB). */
 	uint32_t ppdu_bmap_failed_hi;
-			/**< Bitmap of packets that failed to be acknowledged (MSB). */
+				/**< Bitmap of packets that failed to be acknowledged (MSB). */
 };
 
 /**
@@ -478,8 +482,8 @@
  *	Per-packet metadata for transmitting packets to an MP station.
  */
 struct nss_wifi_vdev_mpsta_per_packet_tx_metadata {
-	uint16_t vdev_id;		/**< Virtual device ID. */
-	uint16_t metadata_type;		/**< Tx metadata type. */
+	uint16_t vdev_id;	/**< Virtual device ID. */
+	uint16_t metadata_type;	/**< Tx metadata type. */
 };
 
 /**
@@ -487,23 +491,24 @@
  *	Per-packet metadata for receiving packets from an MP station.
  */
 struct nss_wifi_vdev_mpsta_per_packet_rx_metadata {
-	uint16_t vdev_id;		/**< Virtual device ID. */
-	uint16_t peer_id;		/**< Peer ID. */
+	uint16_t vdev_id;	/**< Virtual device ID. */
+	uint16_t peer_id;	/**< Peer ID. */
 };
 
-/*
+/**
  * nss_wifi_vdev_rx_err_per_packet_metadata
  *	Per-packet metadata for error packets received.
  */
 struct nss_wifi_vdev_rx_err_per_packet_metadata {
-	uint8_t peer_mac_addr[ETH_ALEN];	/*< Peer MAC address. */
-	uint8_t tid;				/*< TID. */
-	uint8_t vdev_id;			/*< Virtual device ID. */
-	uint8_t err_type;			/*< Error type. */
-	uint8_t rsvd[3];			/*< Reserved for future enhancement. */
+	uint8_t peer_mac_addr[ETH_ALEN];
+				/**< Peer MAC address. */
+	uint8_t tid;		/**< TID. */
+	uint8_t vdev_id;	/**< Virtual device ID. */
+	uint8_t err_type;	/**< Error type. */
+	uint8_t rsvd[3];	/**< Reserved for future enhancement. */
 };
 
-/*
+/**
  * nss_wifi_vdev_extap_per_packet_metadata
  *	Per-packet metadata for ExtAP.
  */
@@ -546,7 +551,27 @@
 };
 
 /**
- * wifi per packet metadata content
+ * nss_wifi_vdev PPDU meta data direction
+ * 	Physical layer protocol data unit (PPDU) meta data direction.
+ */
+enum nss_wifi_vdev_ppdu_mdata_dir {
+	WIFI_VDEV_PPDU_MDATA_TX,	/**< PPDU meta data for transmit direction */
+	WIFI_VDEV_PPDU_MDATA_RX		/**< PPDU meta data for receive direction */
+};
+
+/**
+ * nss_wifi_vdev_ppdu_metadata
+ * 	PPDU meta data
+ */
+struct nss_wifi_vdev_ppdu_metadata {
+	uint32_t ppdu_id;	/**< PPDU ID. */
+	uint16_t peer_id;	/**< Peer ID. */
+	enum nss_wifi_vdev_ppdu_mdata_dir dir;
+				/**< Data direction for meta data. */
+};
+
+/**
+ * Wi-Fi per packet metadata content.
  */
 struct nss_wifi_vdev_per_packet_metadata {
 	uint32_t pkt_type;	/**< Type of packet. */
@@ -556,22 +581,25 @@
 	 */
 	union {
 		struct nss_wifi_vdev_igmp_per_packet_metadata igmp_metadata;
-			/**< Per packet Metadata structure for IGMP. */
+			/**< Per packet metadata structure for IGMP. */
 		struct nss_wifi_vdev_mesh_per_packet_metadata mesh_metadata;
-			/**< Per packet Metadata structure for Mesh mode. */
+			/**< Per packet metadata structure for mesh mode. */
 		struct nss_wifi_vdev_txinfo_per_packet_metadata txinfo_metadata;
-			/**< Per packet Metadata structure for TX Information. */
+			/**< Per packet metadata structure for Tx information. */
 		struct nss_wifi_vdev_mpsta_per_packet_tx_metadata mpsta_tx_metadata;
-			/**< Per packet TX Metadata structure for Master-Proxy Station. */
+			/**< Per packet Tx metadata structure for master-proxy station. */
 		struct nss_wifi_vdev_mpsta_per_packet_rx_metadata mpsta_rx_metadata;
-			/**< Per packet RX Metadata structure for Master-Proxy Station. */
+			/**< Per packet Rx metadata structure for master-proxy station. */
 		struct nss_wifi_vdev_rx_err_per_packet_metadata rx_err_metadata;
-			/**< Per packet Metadata structure for RX Error. */
+			/**< Per packet metadata structure for Rx error. */
 		struct nss_wifi_vdev_tx_compl_metadata tx_compl_metadata;
-			/**< Per packet TX Metadata structure for TX Completion. */
+			/**< Per packet Tx metadata structure for Tx completion. */
 		struct nss_wifi_vdev_wds_per_packet_metadata wds_metadata;
-			/**< Per packet TX Metadata structure for wireless distribution system mode. */
-	} metadata;	/**< Metadata Payload for Special Data receive message. */
+			/**< Per packet Tx metadata structure for wireless distribution system mode. */
+		struct nss_wifi_vdev_ppdu_metadata ppdu_metadata;
+			/**< Per packet PPDU metadata needed for AM copy mode. */
+	} metadata;
+			/**< Metadata payload for special data receive message. */
 };
 
 /**
@@ -579,7 +607,7 @@
  *	Metadata payload for Mesh mode receive.
  */
 struct nss_wifi_vdev_meshmode_rx_metadata {
-	uint16_t rs_ratephy;	/**< PHY rate. */
+	uint16_t rs_ratephy;/**< PHY rate. */
 	uint16_t vdev_id;	/**< Virtual device ID. */
 	uint16_t peer_id;	/**< Peer ID. */
 	uint16_t rs_rssi;	/**< RSSI (noise floor adjusted). */
@@ -626,7 +654,8 @@
 			/**< IPv6 group address. */
 	} u;	/**< Type of group addresses. */
 
-	uint32_t src_ip_addr;			/**< Source IP address. */
+	uint32_t src_ip_addr;
+			/**< Source IP address. */
 };
 
 /**
@@ -634,11 +663,11 @@
  *	Synchronization message for a multicast enhancement host group.
  */
 struct nss_wifi_vdev_me_host_sync_msg {
-	uint16_t vdev_id;	/**< Virtual device ID. */
-	uint8_t nentries;	/**< Number of group entries carried by this message. */
-	uint8_t radio_ifnum;	/**< Interface number of the Wi-Fi radio. */
+	uint16_t vdev_id;		/**< Virtual device ID. */
+	uint8_t nentries;		/**< Number of group entries carried by this message. */
+	uint8_t radio_ifnum;		/**< Interface number of the Wi-Fi radio. */
 	struct nss_wifi_vdev_me_host_sync_grp_entry grp_entry[NSS_WIFI_VDEV_MAX_ME_ENTRIES];
-				/**< Array for multicast group entries. */
+					/**< Array for multicast group entries. */
 };
 
 /**
@@ -705,30 +734,34 @@
  *	Message to get virtual device statistics from NSS Firmware to Host.
  */
 struct nss_wifi_vdev_stats_sync_msg {
-	uint32_t dropped;				/**< Number of dropped packets. */
-	uint32_t tx_enqueue_cnt;			/**< Tx pnode enqueue count. */
-	uint32_t tx_enqueue_fail_cnt;			/**< Tx pnode enqueue count. */
-	uint32_t tx_intra_bss_enqueue_cnt;		/**< Intra BSS enqueue count. */
-	uint32_t tx_intra_bss_enqueue_fail_cnt;		/**< Intra BSS enqueue fail count. */
-	uint32_t tx_intra_bss_mcast_send_cnt;		/**< Vdev mcast/bcast packet count in AP mode. */
-	uint32_t tx_intra_bss_mcast_send_fail_cnt;	/**< Vdev mcast/bcast packet count in AP mode. */
-	uint32_t tx_enqueue_bytes;			/**< Tx enqueue bytes count. */
-	uint32_t rx_enqueue_cnt;			/**< Ethernet node enqueue count. */
-	uint32_t rx_enqueue_fail_cnt;			/**< Ethernet node enqueue fail count. */
-	uint32_t rx_except_enqueue_cnt;			/**< N2h (NSS to Host)  node enqueue count. */
-	uint32_t rx_except_enqueue_fail_cnt;		/**< N2h (NSS to Host) node enqueue fail count. */
-	uint32_t rx_enqueue_bytes;			/**< Rx enqueue bytes count. */
-	uint32_t rx_wds_learn_send_cnt;			/**< Vdev WDS source port learn count. */
-	uint32_t rx_wds_learn_send_fail_cnt;		/**< Vdev WDS source count fail. */
-	struct nss_wifi_vdev_mcast_enhance_stats wvmes;	/**< Multicast enhancement statistics. */
-	uint32_t num_tx_exception;			/**< Number of Tx exception to Firmware. */
-	uint32_t tx_dma_map_fail;			/**< DMA map failure. */
-	uint32_t tx_desc_alloc_fail;			/**< Descriptor allocation failure. */
-	uint32_t tx_hw_ring_full;			/**< Hardware ring is full. */
-	uint32_t tx_tso_pkt;				/**< Number of TSO packets. */
-	uint32_t tx_num_seg;				/**< Number of segments in TSO packets. */
-	uint32_t tx_rcvd;				/**< Number of packets received from Host. */
-	uint32_t tx_rcvd_bytes;				/**< Number of bytes received from host. */
+	uint32_t dropped;			/**< Number of dropped packets. */
+	uint32_t tx_enqueue_cnt;		/**< Tx pnode enqueue count. */
+	uint32_t tx_enqueue_fail_cnt;		/**< Tx pnode enqueue count. */
+	uint32_t tx_intra_bss_enqueue_cnt;	/**< Intra BSS enqueue count. */
+	uint32_t tx_intra_bss_enqueue_fail_cnt;
+						/**< Intra BSS enqueue fail count. */
+	uint32_t tx_intra_bss_mcast_send_cnt;
+						/**< Vdev mcast/bcast packet count in AP mode. */
+	uint32_t tx_intra_bss_mcast_send_fail_cnt;
+						/**< Vdev mcast/bcast packet count in AP mode. */
+	uint32_t tx_enqueue_bytes;		/**< Tx enqueue bytes count. */
+	uint32_t rx_enqueue_cnt;		/**< Ethernet node enqueue count. */
+	uint32_t rx_enqueue_fail_cnt;		/**< Ethernet node enqueue fail count. */
+	uint32_t rx_except_enqueue_cnt;		/**< N2H (NSS to Host) node enqueue count. */
+	uint32_t rx_except_enqueue_fail_cnt;	/**< N2H (NSS to Host) node enqueue fail count. */
+	uint32_t rx_enqueue_bytes;		/**< Rx enqueue bytes count. */
+	uint32_t rx_wds_learn_send_cnt;		/**< Vdev WDS source port learn count. */
+	uint32_t rx_wds_learn_send_fail_cnt;	/**< Vdev WDS source count fail. */
+	struct nss_wifi_vdev_mcast_enhance_stats wvmes;
+						/**< Multicast enhancement statistics. */
+	uint32_t num_tx_exception;		/**< Number of Tx exception to firmware. */
+	uint32_t tx_dma_map_fail;		/**< DMA map failure. */
+	uint32_t tx_desc_alloc_fail;		/**< Descriptor allocation failure. */
+	uint32_t tx_hw_ring_full;		/**< Hardware ring is full. */
+	uint32_t tx_tso_pkt;			/**< Number of TSO packets. */
+	uint32_t tx_num_seg;			/**< Number of segments in TSO packets. */
+	uint32_t tx_rcvd;			/**< Number of packets received from host. */
+	uint32_t tx_rcvd_bytes;			/**< Number of bytes received from host. */
 };
 
 /**
@@ -739,7 +772,7 @@
 	struct nss_cmn_msg cm;		/**< Common message header. */
 
 	/**
-	 * Payload of a virtual-device(vdev) specific message.
+	 * Payload of a virtual-device (vdev) specific message.
 	 */
 	union {
 		struct nss_wifi_vdev_config_msg vdev_config;
@@ -952,7 +985,7 @@
 
 /*
  * nss_wifi_vdev_set_dp_type
- *	Set datapath type for vdev.
+ *	Set datapath type for virtual device.
  *
  * @datatypes
  * nss_ctx_instance \n
@@ -966,7 +999,7 @@
  * @param[in]   dp_type  Datapath type of the VAP.
  *
  * @return
- * true if success or false if its a failure.
+ * True if a success, or false if a failure.
  */
 bool nss_wifi_vdev_set_dp_type(struct nss_ctx_instance *nss_ctx, struct net_device *netdev,
 						uint32_t if_num, enum nss_wifi_vdev_dp_type dp_type);
diff --git a/exports/nss_wifili_if.h b/exports/nss_wifili_if.h
index 6e060fb..05e2e44 100644
--- a/exports/nss_wifili_if.h
+++ b/exports/nss_wifili_if.h
@@ -15,7 +15,7 @@
  */
 
  /**
-  * @file nss_wifili.h
+  * @file nss_wifili_if.h
   *	NSS TO HLOS interface definitions.
   *	NOTE: Here we will use wifili as a reference to
   *	the IPQ807x Wi-Fi object.
@@ -23,20 +23,25 @@
 #ifndef __NSS_WIFILI_H
 #define __NSS_WIFILI_H
 
+ /**
+  * @addtogroup nss_wifili_subsystem
+  * @{
+  */
+
 #define NSS_WIFILI_MAX_SRNG_REG_GROUPS_MSG 2
 				/**< Maximum srng (ring) register groups. */
 #define NSS_WIFILI_MAX_NUMBER_OF_PAGE_MSG 32
 				/**< Maximum number of pages allocated from host. */
 #define NSS_WIFILI_MAX_TCL_DATA_RINGS_MSG 4
-				/**< Maximum number of transmit classifier data ring for NSS. */
+				/**< Maximum number of Transmit Classifier data ring for NSS. */
 #define NSS_WIFILI_MAX_REO_DATA_RINGS_MSG 4
-				/**< Maximum number of reorder (reo) data ring for NSS. */
+				/**< Maximum number of Reorder (reo) data ring for NSS. */
 #define NSS_WIFILI_SOC_PER_PACKET_METADATA_OFFSET 4
 				/**< Metadata area for storing Rx statistics. */
 #define NSS_WIFILI_MAX_TXDESC_POOLS_MSG 4
-				/**< Maximum number of Tx descriptor software pools. */
+				/**< Maximum number of Tx Descriptor software pools. */
 #define NSS_WIFILI_MAX_TX_EXT_DESC_POOLS_MSG 4
-				/**< Maximum number of Tx descriptor Extended software pools. */
+				/**< Maximum number of Tx Descriptor Extended software pools. */
 #define NSS_WIFILI_MAX_PDEV_NUM_MSG 3
 				/**< Maximum number of pdev devices. */
 #define NSS_WIFILI_MAX_MCS 12
@@ -122,6 +127,7 @@
 	NSS_WIFILI_WDS_ACTIVE_INFO_MSG,
 	NSS_WIFILI_STATS_CFG_MSG,
 	NSS_WIFILI_TID_REOQ_SETUP_MSG,
+	NSS_WIFILI_RADIO_CMD_MSG,
 	NSS_WIFILI_MAX_MSG
 };
 
@@ -251,8 +257,17 @@
 };
 
 /**
+ * nss_wifili_radio_cmd
+ *	Wi-Fi radio commands for wifili.
+ */
+enum nss_wifili_radio_cmd {
+	NSS_WIFILI_RADIO_TX_CAPTURE_CMD,			/**< Enable Tx capture. */
+	NSS_WIFILI_RADIO_MAX_CMD
+};
+
+/**
  * nss_wifili_hal_srng_info
- *	Wifili hal srng information.
+ *	Wifili HAL srng information.
  */
 struct nss_wifili_hal_srng_info{
 	uint8_t ring_id;
@@ -679,8 +694,8 @@
 	uint32_t ampdu_cnt;			/**< Number of MSDUs part of AMPDU. */
 	uint32_t non_amsdu_cnt;			/**< Number of MSDUs with no MSDU level aggregation. */
 	uint32_t amsdu_cnt;			/**< Number of MSDUs part of AMSDU. */
-	uint32_t mcast_rcv_cnt;			/**< Total number of mcast packets received. */
-	uint32_t mcast_rcv_bytes;		/**< Total number of mcast bytes received. */
+	uint32_t mcast_rcv_cnt;			/**< Total number of multicast packets received. */
+	uint32_t mcast_rcv_bytes;		/**< Total number of multicast bytes received. */
 	uint32_t rx_recvd;			/**< Total Rx received count. */
 	uint32_t rx_recvd_bytes;		/**< Total Rx received count. */
 	uint32_t decap_type[NSS_WIFILI_DECAP_TYPE_MAX];
@@ -741,7 +756,7 @@
  */
 struct nss_wifili_wds_peer_map_msg {
 	uint8_t dest_mac[ETH_ALEN];	/**< MAC address of the destination. */
-	uint16_t peer_id;			/**< Connected  peer ID for this WDS peer. */
+	uint16_t peer_id;			/**< Connected peer ID for this WDS peer. */
 	uint16_t ast_idx;			/**< AST (address search table) index for this peer in host. */
 	uint8_t reserved[2];		/**< Reserved for 4-byte alignment padding. */
 };
@@ -766,14 +781,36 @@
 
 /**
  * nss_wifili_reo_tidq_msg
- *	REO tid queue setup message.
+ *	REO TID queue setup message.
  */
 struct nss_wifili_reo_tidq_msg {
-	uint32_t tid;		/**< TID (Traffic identification) value. */
+	uint32_t tid;		/**< TID (traffic identification) value. */
 	uint16_t peer_id;	/**< Peer ID. */
 };
 
 /**
+ * nss_wifili_radio_cmd_msg
+ *	Wi-Fi radio specific special commands.
+ */
+struct nss_wifili_radio_cmd_msg {
+	enum nss_wifili_radio_cmd cmd;
+							/**< Type of command message. */
+	uint32_t value;			/**< Value of the command. */
+};
+
+/**
+ * nss_wifili_radio_cfg_msg
+ *	Wi-Fi radio specific special configurations.
+ */
+struct nss_wifili_radio_cfg_msg {
+	uint32_t radio_if_num;	/**< NSS assigned interface number for radio. */
+	union {
+		struct nss_wifili_radio_cmd_msg radiocmdmsg;
+							/**< Radio specific commands. */
+	} radiomsg;
+};
+
+/**
  * nss_wifili_msg
  *	Structure that describes wifili messages.
  */
@@ -804,6 +841,8 @@
 				/**< Wifili peer statistics configuration message. */
 		struct nss_wifili_reo_tidq_msg reotidqmsg;
 				/**< REO TID queue setup message. */
+		struct nss_wifili_radio_cfg_msg radiocfgmsg;
+				/**< Radio command message. */
 	} msg;
 };
 
@@ -925,4 +964,8 @@
  */
 void nss_unregister_wifili_radio_if(uint32_t if_num);
 
+/**
+  * @}
+  */
+
 #endif /* __NSS_WIFILI_H */
diff --git a/nss_wifi.c b/nss_wifi.c
index fb2ec65..315b438 100644
--- a/nss_wifi.c
+++ b/nss_wifi.c
@@ -199,6 +199,7 @@
 	nss_assert(nss_ctx);
 	nss_assert((if_num >= NSS_MAX_VIRTUAL_INTERFACES) && (if_num < NSS_MAX_NET_INTERFACES));
 
+	nss_ctx->nss_top->wifi_msg_callback = NULL;
 	nss_core_unregister_subsys_dp(nss_ctx, if_num);
 }