Merge "[qca-nss-drv] Receving the edma allocation fail count stat"
diff --git a/exports/nss_api_if.h b/exports/nss_api_if.h
index 6366b36..701a710 100644
--- a/exports/nss_api_if.h
+++ b/exports/nss_api_if.h
@@ -203,6 +203,24 @@
 		/**< Special interface number for dscp2pri. */
 
 /**
+ * Wireless Multimedia Extention Access Category to TID.
+ */
+#define NSS_WIFILI_WME_AC_TO_TID(_ac) (	\
+		((_ac) == NSS_WIFILI_WME_AC_VO) ? 6 : \
+		(((_ac) == NSS_WIFILI_WME_AC_VI) ? 5 : \
+		(((_ac) == NSS_WIFILI_WME_AC_BK) ? 1 : \
+		0)))
+
+/**
+ * Wireless TID to Wireless Extension Multimedia Access Category.
+ */
+#define NSS_WIFILI_TID_TO_WME_AC(_tid) (	\
+		(((_tid) == 0) || ((_tid) == 3)) ? NSS_WIFILI_WME_AC_BE : \
+		((((_tid) == 1) || ((_tid) == 2)) ? NSS_WIFILI_WME_AC_BK : \
+		((((_tid) == 4) || ((_tid) == 5)) ? NSS_WIFILI_WME_AC_VI : \
+		NSS_WIFILI_WME_AC_VO)))
+
+/**
  * Converts the format of an IPv6 address from Linux to NSS. @hideinitializer
  */
 #define IN6_ADDR_TO_IPV6_ADDR(ipv6, in6) \
diff --git a/exports/nss_wifili_if.h b/exports/nss_wifili_if.h
index 0bba091..331f84e 100644
--- a/exports/nss_wifili_if.h
+++ b/exports/nss_wifili_if.h
@@ -17,33 +17,80 @@
  /**
   * @file nss_wifili.h
   *	NSS TO HLOS interface definitions.
+  *	NOTE: Here we will use wifili as a reference to
+  *	the IPQ807x Wi-Fi object.
   */
 #ifndef __NSS_WIFILI_H
 #define __NSS_WIFILI_H
 
 #define NSS_WIFILI_MAX_SRNG_REG_GROUPS_MSG 2
-				/**< Max srng register groups. */
+				/**< Maximum srng (ring) register groups. */
 #define NSS_WIFILI_MAX_NUMBER_OF_PAGE_MSG 32
-				/**< Max number of pages allocated from host. */
+				/**< Maximum number of pages allocated from host. */
 #define NSS_WIFILI_MAX_TCL_DATA_RINGS_MSG 4
-				/**< Max number of tcl data ring for NSS. */
+				/**< Maximum number of Transmit Classifier data ring for NSS. */
 #define NSS_WIFILI_MAX_REO_DATA_RINGS_MSG 4
-				/**< Max number of 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 stats. */
+				/**< Metadata area for storing Rx statistics. */
 #define NSS_WIFILI_MAX_TXDESC_POOLS_MSG 4
-				/**< Max number of txdesc sw pools */
+				/**< Maximum number of Tx Descriptor software pools. */
 #define NSS_WIFILI_MAX_TX_EXT_DESC_POOLS_MSG 4
-				/**< Max number of txdesc ext sw pools */
+				/**< Maximum number of Tx Descriptor Extended software pools. */
 #define NSS_WIFILI_MAX_PDEV_NUM_MSG 3
-				/**< Max number of pdev devices*/
+				/**< Maximum number of pdev devices. */
+#define NSS_WIFILI_MAX_MCS 12
+				/**< Maximum Modulaton And Coding Scheme (MCS) count. */
+#define NSS_WIFILI_MAX_MCS_11A 8
+				/**< Maximum MCS for 11a mode. */
+#define NSS_WIFILI_MAX_MCS_11B 7
+				/**< Maximum MCS for 11b mode. */
+#define NSS_WIFILI_MAX_MCS_11AC 10
+				/**< Maximum MCS for 11ac mode. */
+#define NSS_WIFILI_MAX_MCS_11AX 10
+				/**< Maximum MCS for 11ax mode. */
+#define NSS_WIFILI_SS_COUNT 8
+				/**< Maximum spatial streams count. */
+#define NSS_WIFILI_SUPPORTED_BW 4
+				/**< Maximum number of bandwidth supported. */
+#define NSS_WIFILI_REPT_MU_MIMO 1
+#define NSS_WIFILI_REPT_MU_OFDMA_MIMO 3
+#define NSS_WIFILI_SUPPORTED_RECEPTION_TYPES 4
+				/**< Maximum supported reception types. */
+#define NSS_WIFILI_SOC_PER_PACKET_METADATA_SIZE 60
+				/**< Metadata area total size. */
+
+/**
+ * nss_wifili_wme_stream_classes
+ *	WME stream classes.
+ */
+enum nss_wifili_wme_stream_classes {
+	NSS_WIFILI_WME_AC_BE,	/**< Best effort. */
+	NSS_WIFILI_WME_AC_BK,	/**< Background. */
+	NSS_WIFILI_WME_AC_VI,	/**< Video. */
+	NSS_WIFILI_WME_AC_VO,	/**< Voice. */
+	NSS_WIFILI_WME_AC_MAX	/**< Maximum AC Value. */
+};
+
+/**
+ * nss_wifili_packet_type
+ *	Different Packet Types.
+ */
+enum nss_wifili_packet_type {
+	NSS_WIFILI_DOT11_A,		/**< 802.11a packet type. */
+	NSS_WIFILI_DOT11_B,		/**< 802.11b packet type. */
+	NSS_WIFILI_DOT11_N,		/**< 802.11n packet type. */
+	NSS_WIFILI_DOT11_AC,		/**< 802.11ac packet type. */
+	NSS_WIFILI_DOT11_AX ,		/**< 802.11ax packet type. */
+	NSS_WIFILI_DOT11_MAX		/**< Maximum 802.11 packet types. */
+};
 
 /**
  * nss_wifili_msg_types
- *	nss_wifili messages
+ *	NSS wifili messages.
  */
 enum nss_wifili_msg_types {
-	NSS_WIFILI_INIT_MSG = 0,
+	NSS_WIFILI_INIT_MSG,
 	NSS_WIFILI_SOC_RESET_MSG,
 	NSS_WIFILI_PDEV_INIT_MSG,
 	NSS_WIFILI_PDEV_DEINIT_MSG,
@@ -55,454 +102,569 @@
 	NSS_WIFILI_PEER_FREELIST_APPEND_MSG,
 	NSS_WIFILI_STATS_MSG,
 	NSS_WIFILI_WDS_VENDOR_MSG,
+	NSS_WIFILI_PEER_STATS_MSG,
 	NSS_WIFILI_MAX_MSG
 };
 
 /**
- * wifili_error_types
- *	wifili msg error types
+ * nss_wifili_error_types
+ *	Wifili error message types for functions.
  */
-enum wifili_error_types {
-	NSS_WIFILI_EMSG_NONE = 0,
-			/**< no error */
+enum nss_wifili_error_types {
+	NSS_WIFILI_EMSG_NONE,
+			/**< No error. */
 	NSS_WIFILI_EMSG_RINGS_INIT_FAIL,
-			/**< device ring initialization fail */
+			/**< Device ring initialization failure. */
 	NSS_WIFILI_EMSG_PDEV_INIT_IMPROPER_STATE_FAIL,
-			/**< radio init fail due to improper state of device */
+			/**< Radio initialization failure due to improper state of device. */
 	NSS_WIFILI_EMSG_PDEV_INIT_INVALID_RADIOID_FAIL,
-			/**< radio init failed due to invalid radio id */
+			/**< Radio initialization failed due to invalid radio ID. */
 	NSS_WIFILI_EMSG_PDEV_RESET_INVALID_RADIOID_FAIL,
-			/**< radio reset failed due to invalid radio id */
+			/**< Radio reset failed due to invalid radio ID. */
 	NSS_WIFILI_EMSG_START_IMPROPER_STATE_FAIL,
-			/**< device start fail due to improper state */
+			/**< Device start failure due to improper state. */
 	NSS_WIFILI_EMSG_PEER_CREATE_FAIL,
-			/**< peed creat fail */
+			/**< Peer creation failure. */
 	NSS_WIFILI_EMSG_PEER_DELETE_FAIL,
-			/**< peer delete fail */
+			/**< Peer delete failure. */
 	NSS_WIFILI_EMSG_HASHMEM_INIT_FAIL,
-			/**< peer hash mem init fail */
+			/**< Peer hash memory initialization failure. */
 	NSS_WIFILI_EMSG_PEER_FREELIST_APPEND_FAIL,
-			/**< peer freelist append fail*/
+			/**< Peer freelist append failure. */
 	NSS_WIFILI_EMSG_PEER_CREATE_INVALID_VDEVID_FAIL,
-			/**< peer create fail due to invalide vdev_id */
+			/**< Peer creation failure due to invalid vdev ID. */
 	NSS_WIFILI_EMSG_PEER_CREATE_INVALID_PEER_ID_FAIL,
-			/**< peer create fail due to invalide peer_id */
+			/**< Peer creation failure due to invalid peer ID. */
 	NSS_WIFILI_EMSG_PEER_CREATE_VDEV_NULL_FAIL,
-			/**< peer create fail due to vdev null */
+			/**< Peer creation failure due to null vdev. */
 	NSS_WIFILI_EMSG_PEER_CREATE_PDEV_NULL_FAIL,
-			/**< peer create fail due to peer null */
+			/**< Peer creation failure due to null peer. */
 	NSS_WIFILI_EMSG_PEER_CREATE_ALLOC_FAIL,
-			/**< peer create fail due to mem alloc fail */
+			/**< Peer creation failure due to memory allocation failure. */
 	NSS_WIFILI_EMSG_PEER_DELETE_VAPID_INVALID_FAIL,
-			/**< peer delete fail due to invalide vdev_id */
+			/**< Peer delete failure due to invalid vdev_ID. */
 	NSS_WIFILI_EMSG_PEER_DELETE_INVALID_PEERID_FAIL,
-			/**< peer delete fail due to invalide peer_id */
+			/**< Peer delete failure due to invalid peer ID. */
 	NSS_WIFILI_EMSG_PEER_DELETE_VDEV_NULL_FAIL,
-			/**< peer delete fail due to vdev null */
+			/**< Peer delete failure due to null vdev. */
 	NSS_WIFILI_EMSG_PEER_DELETE_PDEV_NULL_FAIL,
-			/**< peer create fail due to pdev null */
+			/**< Peer creation failure due to null vdev. */
 	NSS_WIFILI_EMSG_PEER_DELETE_PEER_NULL_FAIL,
-			/**< peer create fail due to peer null */
+			/**< Peer creation failure due to null peer. */
 	NSS_WIFILI_EMSG_PEER_DELETE_PEER_CORRUPTED_FAIL,
-			/**< peer create fail due to corrupted peer  */
+			/**< Peer creation failure due to corrupted peer. */
 	NSS_WIFILI_EMSG_GROUP0_TIMER_ALLOC_FAIL,
-			/**< timer alloc fail */
+			/**< Timer allocation failure. */
 	NSS_WIFILI_EMSG_INSUFFICIENT_WT_FAIL,
-			/**< insufficient worker thread error */
+			/**< Insufficient worker thread error. */
 	NSS_WIFILI_EMSG_INVALID_NUM_TCL_RING_FAIL,
-			/**< invlalid number of tcl ring provided in init msg */
+			/**< Invlalid number of Transmit Classifier ring provided in initialization message. */
 	NSS_WIFILI_EMSG_INVALID_NUM_REO_DST_RING_FAIL,
-			/**< invalid number of reo dst ring in init msg */
+			/**< Invalid number of reorder destination ring in initialization message. */
 	NSS_WIFILI_EMSG_HAL_SRNG_SOC_ALLOC_FAIL,
-			/**< srng soc memory allocation failure */
+			/**< Srng SoC memory allocation failure. */
 	NSS_WIFILI_EMSG_HAL_TCL_SRNG_ALLOC_FAIL,
-			/**< tcl srng ring alloc fail */
+			/**< Transmit Classifier srng ring allocation failure. */
 	NSS_WIFILI_EMSG_HAL_TXCOMP_SRNG_ALLOC_FAIL,
-			/**< txcomp srng ring alloc fail */
+			/**< Txcomp srng ring allocation failure. */
 	NSS_WIFILI_EMSG_HAL_REODST_SRNG_ALLOC_FAIL,
-			/**< reo dst srng ring alloc fail */
+			/**< Reorder destination srng ring allocation failure. */
 	NSS_WIFILI_EMSG_HAL_REOREINJECT_SRNG_ALLOC_FAIL,
-			/**< reo reinject srng ring alloc fail */
+			/**< Reorder reinject srng ring allocation failure. */
 	NSS_WIFILI_EMSG_HAL_RXRELEASE_SRNG_ALLOC_FAIL,
-			/**< rx release srng ring alloc fail */
+			/**< Rx release srng ring allocation failure. */
 	NSS_WIFILI_EMSG_HAL_RXEXCP_SRNG_ALLOC_FAIL,
-			/**< rx exception srng ring alloc fail */
+			/**< Rx exception srng ring allocation failure. */
 	NSS_WIFILI_EMSG_HAL_TX_MEMALLOC_FAIL,
-			/**< tx hal srng ring alloc fail */
+			/**< Tx hal (hardware Abstraction Layer) srng ring allocation failure. */
 	NSS_WIFILI_EMSG_HAL_TX_INVLID_POOL_NUM_FAIL,
-			/**< invalid pool num in init msg  */
+			/**< Invalid pool number in initialization message. */
 	NSS_WIFILI_EMSG_HAL_TX_INVALID_PAGE_NUM_FAIL,
-			/**< invalid page num in init msg  */
+			/**< Invalid page numner in initialization message. */
 	NSS_WIFILI_EMSG_HAL_TX_DESC_MEM_ALLOC_FAIL,
-			/**< tx desc mem allocation fail  */
+			/**< Tx descriptor memory allocation failure. */
 	NSS_WIFILI_EMSG_HAL_RX_MEMALLOC_FAIL,
-			/**< rx memalloc fail */
+			/**< Rx memory allocation failure. */
 	NSS_WIFILI_EMSG_UNKNOWN
-			/**< unknown error message */
+			/**< Unknown error message. */
 };
 
 /**
- * wifili_soc_extended_data_types
- *	enumeration of extended data type to host
+ * nss_wifili_soc_extended_data_types
+ *	Enumeration of extended data type to host.
  */
-enum wifili_soc_extended_data_types {
-	WIFILI_SOC_EXT_DATA_PKT_TYPE_NONE,
-	WIFILI_SOC_EXT_DATA_PKT_MSDU_LINK_DESC,
-	WIFILI_SOC_EXT_DATA_PKT_TYPE_MAX
+enum nss_wifili_soc_extended_data_types {
+	WIFILI_SOC_EXT_DATA_PKT_TYPE_NONE,		/**< Packet type is none. */
+	WIFILI_SOC_EXT_DATA_PKT_MSDU_LINK_DESC,		/**< Packet type is MSDU link desctriptor. */
+	WIFILI_SOC_EXT_DATA_PKT_INVALID_PEER,		/**< Packet type is Invalid peer. */
+	WIFILI_SOC_EXT_DATA_PKT_TYPE_MAX		/**< Maximum extended data types. */
 };
 
 /**
  * nss_wifili_hal_srng_info
- *	wifili hal srng info
+ *	Wifili hal srng information.
  */
 struct nss_wifili_hal_srng_info{
 	uint8_t ring_id;
-			/**< ring id */
+			/**< Ring ID. */
 	uint8_t mac_id;
-			/**< pdev id */
+			/**< Pdev ID. */
 	uint8_t resv[2];
 	uint32_t ring_base_paddr;
-			/**< physical base address of the ring */
+			/**< Physical base address of the ring. */
 	uint32_t num_entries;
-			/**< number of entries in ring */
-	uint32_t flags;	/**< misc flags */
+			/**< Number of entries in ring. */
+	uint32_t flags;	/**< Miscellaneous flags. */
 	uint32_t ring_dir;
-			/**< ring direction: source or dest */
+			/**< Ring direction: source or destination. */
 	uint32_t entry_size;
-			/**< ring entry size */
+			/**< Ring entry size. */
 	uint32_t low_threshold;
-			/**< Low threshold – in number of ring entries (valid for src rings only) */
+			/**< Low threshold – in number of ring entries (valid for source rings only). */
 	uint32_t hwreg_base[NSS_WIFILI_MAX_SRNG_REG_GROUPS_MSG];
-			/**< hw ring base address */
+			/**< Hardware ring base address. */
 };
 
 /**
  * nss_wifili_hal_srng_soc_msg
- *	wifi li hal srng message
+ *	Wifili hal srng message.
  */
 struct nss_wifili_hal_srng_soc_msg {
 	uint32_t dev_base_addr;
-			/**< base address of wlan dev */
+			/**< Base address of wlan dev. */
 	uint32_t shadow_rdptr_mem_addr;
-			/**< shadow rdptr address */
+			/**< Shadow read pointer address. */
 	uint32_t shadow_wrptr_mem_addr;
-			/**< shadow wrptr address */
+			/**< Shadow write pointer address. */
 };
 
 /**
  * nss_wifili_tx_desc_init_msg
- *	wifi li software desc pool init msg
+ *	Wifili software descriptor pool initialization message.
  */
 struct nss_wifili_tx_desc_init_msg {
 	uint32_t num_tx_desc;
-			/**< count of the sw descriptors */
+			/**< Count of the software descriptors. */
 	uint32_t num_tx_desc_ext;
-			/**< count of sw extention descriptors */
+			/**< Count of software extented descriptors. */
 	uint32_t num_pool;
-			/**< number of descriptor pools */
+			/**< Number of descriptor pools. */
 	uint32_t memory_addr[NSS_WIFILI_MAX_NUMBER_OF_PAGE_MSG];
-			/**< memory start address of each page */
+			/**< Memory start address of each page. */
 	uint32_t memory_size[NSS_WIFILI_MAX_NUMBER_OF_PAGE_MSG];
-			/**< memory size */
+			/**< Memory size. */
 	uint32_t num_memaddr;
-			/**< number of mem address */
+			/**< Number of memory address. */
 	uint32_t ext_desc_page_num;
-			/**< ext_desc_page number */
+			/**< Extended descriptor page number. */
 };
 
 /**
  * nss_wifili_init_msg
- *	Lithium soc init msg
+ *	Wifili SoC initialization message.
  */
 struct nss_wifili_init_msg {
 	struct nss_wifili_hal_srng_soc_msg hssm;
 	uint8_t num_tcl_data_rings;
-			/**< number of tcl data rings */
+			/**< Number of Transmit Classifier data rings. */
 	uint8_t num_reo_dest_rings;
-			/**< number of reo rings */
+			/**< Number of reorder rings. */
 	uint8_t resv[2];
-			/**< reserve for alignment */
+			/**< Reserve for alignment. */
 	struct nss_wifili_hal_srng_info tcl_ring_info[NSS_WIFILI_MAX_TCL_DATA_RINGS_MSG];
-			/**< tcl data ring config info */
+			/**< Transmit Classifier data ring configuration information. */
 	struct nss_wifili_hal_srng_info tx_comp_ring[NSS_WIFILI_MAX_TCL_DATA_RINGS_MSG];
-			/**< tx completion ring config info */
+			/**< Tx completion ring configuration information. */
 	struct nss_wifili_hal_srng_info reo_dest_ring[NSS_WIFILI_MAX_REO_DATA_RINGS_MSG];
-			/**< reo destination ring config info */
+			/**< Reorder destination ring configuration information. */
 	struct nss_wifili_hal_srng_info reo_exception_ring;
-			/**< reo exception ring config info */
+			/**< Reorder exception ring configuration information. */
 	struct nss_wifili_hal_srng_info rx_rel_ring;
-			/**< wbm release ring config info */
+			/**< WBM (Wireless Buffer manager) release ring configuration information. */
 	struct nss_wifili_hal_srng_info reo_reinject_ring;
-			/**< reinject ring config info */
+			/**< Reinject ring configuration information. */
 	struct nss_wifili_tx_desc_init_msg wtdim;
-			/**< tx descriptor init message */
+			/**< Tx descriptor initialization message. */
 };
 
 /**
  * nss_wifili_pdev_deinit_msg
- *	li pdev deinit msg
+ *	Wifili pdev deinit message.
  */
 struct nss_wifili_pdev_deinit_msg {
-	uint32_t ifnum;	/**< nss ifnum of pdev */
+	uint32_t ifnum;	/**< NSS interface number of pdev. */
 };
 
 /**
  * nss_wifili_pdev_init_msg
- *	li pdev init msg
+ *	Wifili pdev initialization message.
  */
 struct nss_wifili_pdev_init_msg {
 	struct nss_wifili_hal_srng_info rxdma_ring;
-			/**< mac ring configuration */
+			/**< MAC (Media Access Point) ring configuration. */
 	uint32_t radio_id;
-			/**< mac radio id */
+			/**< MAC radio ID. */
 	uint32_t hwmode;
-			/**< mac hw mode */
+			/**< MAC hardware mode. */
 };
 
 /**
  * nss_wifili_peer_msg
- *	wifili peer create message.
+ *	Wifili peer creation message.
  */
 struct nss_wifili_peer_msg {
 	uint8_t peer_mac_addr[6];
-			/**< peer mac address */
+			/**< Peer MAC address. */
 	uint16_t vdev_id;
-			/**< vap id */
+			/**< VAP ID. */
 	uint16_t peer_id;
-			/**< peer id */
+			/**< Peer ID. */
 	uint16_t hw_ast_idx;
-			/**< hw address search table index */
+			/**< Hardware address search table index. */
 	uint8_t is_nawds;
-			/**< is NAWDS enabled for peer */
+			/**< NAWDS enabled for peer. */
 };
 
 /**
  * nss_wifili_peer_freelist_append_msg
- *	peer memory request
+ *	Peer memory request.
  */
 struct nss_wifili_peer_freelist_append_msg {
 	uint32_t addr;
-			/**< starting address of peer_freelist pool */
+			/**< Starting address of peer_freelist pool. */
 	uint32_t length;
-			/**< length of peer_freelist pool */
+			/**< Length of peer freelist pool. */
 	uint32_t num_peers;
-			/**< max number of peer entries supported in pool */
+			/**< Maximum number of peer entries supported in pool. */
 };
 
 /**
  * nss_wifili_tx_stats
- *	tx statistics
+ *	Tx statistics.
  */
 struct nss_wifili_tx_stats {
 	uint32_t tx_enqueue_dropped;
-			/**< tx enqueue drop count */
+			/**< Tx enqueue drop count. */
 	uint32_t tx_enqueue_cnt;
-			/**< tx enqueue succesful count */
+			/**< Tx enqueue succesful count. */
 	uint32_t tx_dequeue_cnt;
-			/**< tx dequeue count */
+			/**< Tx dequeue count. */
 	uint32_t tx_send_fail_cnt;
-			/**< hw send fail count */
+			/**< Hardware send failure count. */
 	uint32_t inv_peer;
-			/**< invalid peer enqueue count */
+			/**< Invalid peer enqueue count. */
 	uint32_t inv_peer_drop_byte_cnt;
-			/**< invalid peer drop byte count */
+			/**< Invalid peer drop byte count. */
 	uint32_t tx_input_pkt;
-			/**< tx packets ready to sent */
+			/**< Tx packets ready to sent. */
 	uint32_t tx_processed_pkt;
-			/**< tx no of packets sent */
+			/**< Tx numner of packets sent. */
 	uint32_t tx_processed_bytes;
-			/**< tx no of bytes processed */
+			/**< Tx number of bytes processed. */
 
 };
 
-/*
+/**
  * nss_wifili_rx_stats
- *	rx statistics
+ *	Rx statistics.
  */
 struct nss_wifili_rx_stats {
 	uint32_t rx_msdu_err;
-					/**< rx msdu error count */
+					/**< Rx msdu error count. */
 	uint32_t rx_inv_peer;
-					/**< rx invalid peer count */
+					/**< Rx invalid peer count. */
 	uint32_t rx_scatter_inv_peer;
-					/**< rx scatter invalid peer count */
+					/**< Rx scatter invalid peer count. */
 	uint32_t rx_wds_learn_send;
-					/**< wds src port learn packet */
+					/**< WDS source port learn packet. */
 	uint32_t rx_wds_learn_send_fail;
-					/**< wds src port learn exception send fail cnt */
+					/**< WDS source port learn exception send failure count. */
 	uint32_t rx_send_dropped;
-					/**< rx send dropped count */
+					/**< Rx send dropped count. */
 	uint32_t rx_deliver_cnt;
-					/**< rx deliver count to next node */
+					/**< Rx deliver count to next node. */
 	uint32_t rx_deliver_cnt_fail;
-					/**< rx deliver count fail*/
+					/**< Rx deliver count failure. */
 	uint32_t rx_intra_bss_ucast_send;
-					/**< intrabss unicast sent count */
+					/**< Intra-BSS unicast sent count. */
 	uint32_t rx_intra_bss_ucast_send_fail;
-					/**< intrabss unicast send fail count */
+					/**< Intra-BSS unicast send failure count. */
 	uint32_t rx_intra_bss_mcast_send;
-					/**< intrabss mcast send count */
+					/**< Intra-BSS mcast send count. */
 	uint32_t rx_intra_bss_mcast_send_fail;
-					/**< intrabss mcast send fail count */
+					/**< Intra-BSS mcast send failure count. */
 	uint32_t rx_sg_recv_send;
-					/**< rx sg receive send count */
+					/**< Rx scatter-gather receive send count. */
 	uint32_t rx_sg_recv_fail;
-					/**< rx sg receive fail count */
+					/**< Rx scatter-gather receive failure count. */
 };
 
 /**
  * nss_wifili_tx_tcl_ring_stats
- *	tcl ring specific statistics;
+ *	Transmit Classifier ring specific statistics.
  */
 struct nss_wifili_tx_tcl_ring_stats {
-	uint32_t tcl_no_hw_desc;	/**< no of tcl hw descriptors*/
-	uint32_t tcl_ring_full;		/**< no of times tcl ring full*/
-	uint32_t tcl_ring_sent;		/**< totall no of ring sent*/
+	uint32_t tcl_no_hw_desc;	/**< Number of Transmit Classifier hardware descriptors. */
+	uint32_t tcl_ring_full;		/**< Number of times Transmit Classifier ring full. */
+	uint32_t tcl_ring_sent;		/**< Total number of ring sent. */
 };
 
 /**
  * nss_wifili_tx_comp_ring_stats
- *	Tx completion ring statistics
+ *	Tx completion ring statistics.
  */
 struct nss_wifili_tx_comp_ring_stats {
-	uint32_t invalid_bufsrc;	/**< tx comp ring desc invalid bufsrc */
-	uint32_t invalid_cookie;	/**< tx com ring desc invalid cookie  */
-	uint32_t hw_ring_empty;		/**< tx comp no comp ring available */
-	uint32_t ring_reaped;		/**< tx comp successfull ring reaped*/
+	uint32_t invalid_bufsrc;	/**< Tx comp (Completion) ring descriptor invalid buffer source. */
+	uint32_t invalid_cookie;	/**< Tx comletion ring descriptor has invalid cookies. */
+	uint32_t hw_ring_empty;		/**< Tx completion hardware ring empty. */
+	uint32_t ring_reaped;		/**< Tx completion successfull ring reaped. */
 
 };
 
 /**
  * nss_wifili_tx_sw_pool_stats
- *	Tx completion sw stats
+ *	Tx completion sw statistics.
  */
 struct nss_wifili_tx_sw_pool_stats {
-	uint32_t desc_alloc;			/**< tx desc sw pool desc in use*/
-	uint32_t desc_alloc_fail;		/**< tx desc sw pool alloc fail  */
-	uint32_t desc_already_allocated;	/**< tx desc re-alloc for allocated desc */
-	uint32_t desc_invalid_free;		/**< tx desc freeing of allocated desc */
-	uint32_t tx_rel_src_fw;			/**< tx desc src is fw */
-	uint32_t tx_rel_ext_desc;		/**< tx desc sg */
-	uint32_t tx_rel_tx_desc;		/**< tx desc src is hw*/
-	uint32_t tx_rel_no_pb;			/**< tx desc has pbuf present */
+	uint32_t desc_alloc;			/**< Tx descriptor software pool descriptor in use. */
+	uint32_t desc_alloc_fail;		/**< Tx descriptor software pool allocation failure . */
+	uint32_t desc_already_allocated;	/**< Tx descriptor re-allocation for allocated descriptor. */
+	uint32_t desc_invalid_free;		/**< Tx descriptor freeing of allocated descriptor. */
+	uint32_t tx_rel_src_fw;			/**< Tx descriptor source is firmware. */
+	uint32_t tx_rel_ext_desc;		/**< Tx descriptor scatter-gather. */
+	uint32_t tx_rel_tx_desc;		/**< Tx descriptor source is hardware*/
+	uint32_t tx_rel_no_pb;			/**< Tx descriptor has pbuf present. */
 };
 
-/*
+/**
  * wifili_tx_ext_sw_pool_stats
- *	Tx ext desc pool
+ *	Tx extended descriptor pool.
  */
 struct nss_wifili_tx_ext_sw_pool_stats {
-	uint32_t desc_alloc;			/**< tx ext(sg) desc in use */
-	uint32_t desc_alloc_fail;		/**< tx ext desc alloc fail */
-	uint32_t desc_already_allocated;	/**< tx ext desc already allocated */
-	uint32_t desc_invalid_free;		/**< tx desc invalid src */
+	uint32_t desc_alloc;			/**< Tx extend (scatter gather) descriptor in use. */
+	uint32_t desc_alloc_fail;		/**< Tx extend descriptor allocation failure. */
+	uint32_t desc_already_allocated;	/**< Tx extend descriptor already allocated. */
+	uint32_t desc_invalid_free;		/**< Tx descriptor invalid source. */
 
 };
 
 /**
  * nss_wifili_rx_wbm_ring_stats
- *	wbm release ring statistics
+ *	WBM (Wireless Buffer Manager) release ring statistics.
  */
 struct nss_wifili_rx_wbm_ring_stats {
-	uint32_t invalid_buf_mgr;		/**< wbm invalid buffer manager */
-	uint32_t err_src_rxdma;			/**< wbm src is rdma ring */
-	uint32_t err_src_rxdma_code_inv;	/**< wbm src dma reason unknown */
-	uint32_t err_src_reo;			/**< wbm src is reo */
-	uint32_t err_src_reo_code_nullq;	/**< wbm src reo because of null tlv */
-	uint32_t err_src_reo_code_inv;		/**< wbm src reo reason unknown */
-	uint32_t err_src_invalid;		/**< wbm src is unknown */
+	uint32_t invalid_buf_mgr;		/**< Invalid buffer manager. */
+	uint32_t err_src_rxdma;			/**< WBM source is rdma ring. */
+	uint32_t err_src_rxdma_code_inv;	/**< WBM source DMA reason unknown. */
+	uint32_t err_src_reo;			/**< WBM source is reorder ring. */
+	uint32_t err_src_reo_code_nullq;	/**< WBM source reorder ring because of null tlv. */
+	uint32_t err_src_reo_code_inv;		/**< WBM source reorder ring reason unknown. */
+	uint32_t err_src_invalid;		/**< WBM source is unknown. */
 };
 
 /**
  * nss_wifili_rx_reo_ring_stats
- * 	reo error statistics
+ * 	Reorder error statistics.
  */
 struct nss_wifili_rx_reo_ring_stats {
-	uint32_t ring_error;			/**< reo ring error*/
-	uint32_t ring_reaped;			/**< no of ring desc reaped */
-	uint32_t invalid_cookie;		/**< no of invalid cookie */
+	uint32_t ring_error;			/**< Reorder ring error. */
+	uint32_t ring_reaped;			/**< Number of ring descriptor reaped. */
+	uint32_t invalid_cookie;		/**< Number of invalid cookie. */
 };
 
 /**
  * nss_wifili_rx sw_pool_stats
- *	nss_wifoli dma sw pool stats
+ *	Wifili DMA sw pool statistics.
  */
 struct nss_wifili_rx_sw_pool_stats {
-	uint32_t rx_no_pb;			/**< rx sw  desc no buff avail */
-	uint32_t desc_alloc;			/**< no of desc in use */
-	uint32_t desc_alloc_fail;		/**< no of desc alloc fail */
+	uint32_t rx_no_pb;			/**< Rx software descriptor number of buffer available. */
+	uint32_t desc_alloc;			/**< Number of descriptor in use. */
+	uint32_t desc_alloc_fail;		/**< Number of descriptor allocation failure. */
 };
 
-/*
- * wifili rx dma ring stats
- *	nss_wifli dma ring statistics
+/**
+ * nss_wifili_rx_dma_ring_stats
+ *	Wifili Rx DMA ring statistics.
  */
 struct nss_wifili_rx_dma_ring_stats {
-	uint32_t rx_hw_desc_unavailable;	/**< no of times hw desc is unavailable */
+	uint32_t rx_hw_desc_unavailable;	/**< Number of times hardware descriptor is unavailable. */
 };
 
 /**
  * nss_wifili_device_stats
- * 	wifili device specific stats
+ * 	Wifili specific statistics.
  */
 struct nss_wifili_device_stats {
 	struct nss_wifili_tx_tcl_ring_stats tcl_stats[NSS_WIFILI_MAX_TCL_DATA_RINGS_MSG];
-									/**< tcl ring stats */
+									/**< Transmit Classifier ring statistics. */
 	struct nss_wifili_tx_comp_ring_stats txcomp_stats[NSS_WIFILI_MAX_TCL_DATA_RINGS_MSG];
-									/**< tx comp ring stats*/
+									/**< Tx completion ring stats. */
 	struct nss_wifili_tx_sw_pool_stats tx_sw_pool_stats[NSS_WIFILI_MAX_TXDESC_POOLS_MSG];
-									/**< tx sw pool stats */
+									/**< Tx software pool statistics. */
 	struct nss_wifili_tx_ext_sw_pool_stats tx_ext_sw_pool_stats[NSS_WIFILI_MAX_TX_EXT_DESC_POOLS_MSG];
-									/**< tx ext ext sw pool stats */
+									/**< Tx extended software pool statistics. */
 	struct nss_wifili_tx_stats tx_data_stats[NSS_WIFILI_MAX_PDEV_NUM_MSG];
-									/**< tx data stats for each pdev */
+									/**< Tx data statistics for each pdev. */
 	struct nss_wifili_rx_reo_ring_stats rxreo_stats[NSS_WIFILI_MAX_REO_DATA_RINGS_MSG];
-									/**< rx reo ring stats */
+									/**< Rx reorder ring statistics. */
 	struct nss_wifili_rx_sw_pool_stats rx_sw_pool_stats[NSS_WIFILI_MAX_PDEV_NUM_MSG];
-									/**< rx dma sw pool stats */
+									/**< Rx DMA software pool statistics. */
 	struct nss_wifili_rx_stats rx_data_stats[NSS_WIFILI_MAX_PDEV_NUM_MSG];
-									/**< rx data stats for each pdev */
+									/**< Rx data statistics for each pdev. */
 	struct nss_wifili_rx_dma_ring_stats rxdma_stats[NSS_WIFILI_MAX_PDEV_NUM_MSG];
-									/**< rx dma ring stats */
+									/**< Rx DMA ring statistics. */
 	struct nss_wifili_rx_wbm_ring_stats rxwbm_stats;
-									/**< wbm ring stats */
+									/**< WBM ring statistics. */
 };
 
 /**
  * nss_wifili_stats_sync_msg
- *	li stats sync msg
+ *	Wifili SoC statistics synchronization message.
  */
 struct nss_wifili_stats_sync_msg {
 	struct nss_wifili_device_stats stats;
-			/**< device statistics */
+			/**< Device statistics. */
 };
 
 /**
- * wifili_soc_linkdesc_per_packet_metadata
- *	linkdesc per packet metadata
+ * nss_wifili_soc_linkdesc_per_packet_metadata
+ *	Link descriptor per packet metadata.
  */
-struct wifili_soc_linkdesc_per_packet_metadata
+struct nss_wifili_soc_linkdesc_per_packet_metadata
 {
-	uint32_t desc_addr;	/**< link descriptor address */
+	uint32_t desc_addr;	/**< Link descriptor address. */
 };
 
 /**
- * wifili_soc_per_packet_metadata
- *	Per packet special data that has to be sent to host
+ * nss_wifili_soc_per_packet_metadata
+ *	Per packet special data that has to be sent to host.
  */
-struct wifili_soc_per_packet_metadata {
+struct nss_wifili_soc_per_packet_metadata {
 	uint32_t pkt_type;
 	union {
-		struct wifili_soc_linkdesc_per_packet_metadata linkdesc_metadata;
+		struct nss_wifili_soc_linkdesc_per_packet_metadata linkdesc_metadata;
 	} metadata;
 };
 
 /**
+ * nss_wifili_tx_mcs
+ *	Peer MCS count.
+ */
+struct nss_wifili_tx_mcs {
+	uint32_t mcs_count[NSS_WIFILI_MAX_MCS + 1];	/**< MCS count. */
+};
+
+/**
+ * Packets dropped on the Tx side
+ *	Tx peer dropped packets.
+ */
+struct nss_wifili_tx_dropped {
+	uint32_t dma_map_error;		/**< Discarded by firmware. */
+	uint32_t ring_full;		/**< Dropped due to ring full. */
+	uint32_t fw_discard;		/**< Discarded by firmware. */
+	uint32_t fw_discard_retired;	/**< Firmware discard retired. */
+	uint32_t fw_discard_untransmitted;	/**< Firmware discard untransmitted. */
+	uint32_t mpdu_age_out;		/**< Number of PDU aged out. */
+	uint32_t fw_discard_reason1;	/**< Firmware discarded PDU reason 1. */
+	uint32_t fw_discard_reason2;	/**< Firmware discarded PDU reason 2. */
+	uint32_t fw_discard_reason3;	/**< Firmware discarded PDU reason 3. */
+};
+
+/**
+ * nss_wifili_tx_ctrl_stats
+ *	Tx peer statistics.
+ */
+struct nss_wifili_tx_ctrl_stats {
+	uint32_t tx_failed; 		/**< Total Tx failure. */
+	uint32_t ofdma; 		/**< Total number of OFDMA packets. */
+	uint32_t stbc; 			/**< Packets in STBC. */
+	uint32_t ldpc; 			/**< Packets in LDPC. */
+	uint32_t retries; 		/**< Packet retries. */
+	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 last_ack_rssi; 	/**< RSSI of last packet. */
+
+	struct nss_wifili_tx_mcs pkt_type[NSS_WIFILI_DOT11_MAX];	/**< MCS count. */
+	uint32_t sgi_count[NSS_WIFILI_MAX_MCS + 1]; 	/**< SGI count. */
+	uint32_t bw[NSS_WIFILI_SUPPORTED_BW];		/**< Packet Count for different bandwidths. */
+	uint32_t wme_ac_type[NSS_WIFILI_WME_AC_MAX]; 	/**< Wireless Multimedia type Count. */
+	uint32_t excess_retries_ac[NSS_WIFILI_WME_AC_MAX];	/**< Wireless Multimedia type Count. */
+	struct nss_wifili_tx_dropped dropped;	/**< Tx peer dropped. */
+	uint32_t complete_pkt;		/**< Complete packet count. */
+	uint32_t complete_byte;		/**< Complete byte count. */
+	uint32_t failed;		/**< Failed packet count. */
+	uint32_t success;		/**< Success packet count. */
+	uint32_t success_bytes;		/**< Success bytes count. */
+};
+
+/**
+ * nss_wifili_peer_rx_err
+ *	Rx peer errors.
+ */
+struct nss_wifili_rx_err {
+	uint32_t mic_err;	/**< Rx MIC errors. */
+	uint32_t decrypt_err;	/**< Rx Decryption errors. */
+};
+
+/**
+ * nss_wifili_rx_ctrl_stats
+ *	Peer Rx statistics.
+ */
+struct nss_wifili_rx_ctrl_stats {
+	struct nss_wifili_rx_err err;			/**< Rx peer errors. */
+	uint32_t wme_ac_type[NSS_WIFILI_WME_AC_MAX];	/**< Wireless Multimedia type Count. */
+	uint32_t reception_type[NSS_WIFILI_SUPPORTED_RECEPTION_TYPES];	/**< Reception type OS packets. */
+	uint32_t mcs_count[NSS_WIFILI_MAX_MCS + 1];	/**< Packets in different MCS rates. */
+	uint32_t sgi_count[NSS_WIFILI_MAX_MCS + 1];	/**< SGI count. */
+	uint32_t nss[NSS_WIFILI_SS_COUNT];		/**< Packet count in spatiel Streams. */
+	uint32_t bw[NSS_WIFILI_SUPPORTED_BW];		/**< Packet Count in different bandwidths. */
+	uint32_t non_ampdu_cnt;			/**< Number of MSDUs with no MPDU level aggregation. */
+	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 ucast_rcv_cnt;			/**< Unicast received count. */
+	uint32_t rx_recvd;			/**< Total Rx received count. */
+};
+
+/**
+ * nss_wifili_peer_ctrl_stats
+ *	Wifili peer control statistics.
+ */
+struct nss_wifili_peer_ctrl_stats {
+	uint32_t peer_id;	/**< Peer ID. */
+	struct nss_wifili_tx_ctrl_stats tx;
+				/**< Peer Tx control statistics. */
+	struct nss_wifili_rx_ctrl_stats rx;
+				/**< Peer Rx control statistics. */
+};
+
+/**
+ * nss_wifili peer stats
+ *	Wifili peer statistics.
+ */
+struct nss_wifili_peer_stats {
+	uint32_t npeers;	/**< Number of entries of peer statistics. */
+	struct nss_wifili_peer_ctrl_stats wpcs[1];
+				/**< Wifili peer control statistics. */
+};
+
+/**
+ * wifili_peer_stats_msg
+ *	Wifili peer statistics message.
+ */
+struct nss_wifili_peer_stats_msg {
+	struct nss_wifili_peer_stats stats;
+			/**< Wifili peer statistics. */
+};
+
+
+/**
  * nss_wifili_msg
- *	Structure that describes wifi li messages
+ *	Structure that describes wifili messages.
  */
 struct nss_wifili_msg {
-	struct nss_cmn_msg cm;                  /**< Common message Header */
+	struct nss_cmn_msg cm;                  /**< Common message header. */
 	union {
 		struct nss_wifili_init_msg init;
 				/**< Wi-Fi initialization data. */
@@ -516,19 +678,21 @@
 				/**< Information for creating a peer freelist. */
 		struct nss_wifili_stats_sync_msg wlsoc_stats;
 				/**< Synchronization statistics. */
+		struct nss_wifili_peer_stats_msg peer_stats;
+				/**< Wifili peer statistics. */
 	} msg;
 };
 
 /**
  * nss_wifili_tx_msg
- *	Send wifili messages
+ *	Send wifili messages.
  *
  * @datatypes
  * nss_ctx_instance \n
  * nss_wifili_msg
  *
  * @param[in] nss_ctx NSS context.
- * @param[in] msg     NSS wifi message.
+ * @param[in] msg     NSS Wi-Fi message.
  *
  * @return
  * nss_tx_status_t Tx status
@@ -537,7 +701,7 @@
 
 /**
  * nss_wifili_msg_callback_t
- *	Callback to receive wifili messages
+ *	Callback to receive wifili messages.
  *
  * @datatypes
  * nss_wifili_msg
@@ -552,7 +716,7 @@
 
 /**
  * nss_wifili_callback_t
- *	Callback to receive wifi data
+ *	Callback to receive Wi-Fi data.
  *
  * @datatypes
  * net_device \n
@@ -571,7 +735,7 @@
 
 /**
  * nss_register_wifili_if
- *	Register to send/receive wifi li soc messages to NSS
+ *	Register to send/receive wifili SoC messages to NSS.
  *
  * @datatypes
  * nss_wifili_callback_t \n
@@ -594,7 +758,7 @@
 
 /**
  * nss_unregister_wifili_if
- *	Unregister wifi li soc interface with NSS
+ *	Deregister wifili SoC interface with NSS.
  *
  * @param[in] if_num NSS interface number
  *
@@ -605,7 +769,7 @@
 
 /**
  * nss_register_wifili_radio_if
- *	Register to send/receive wifi li radio messages to NSS
+ *	Register to send/receive wifili radio messages to NSS.
  *
  * @datatypes
  * nss_wifili_callback_t \n
@@ -628,7 +792,7 @@
 
 /**
  * nss_unregister_wifili_radio_if
- *	Unregister wifi li radio interface with NSS
+ *	Deregister wifili radio interface with NSS.
  *
  * @param[in] if_num NSS interface number
  *
diff --git a/nss_core.c b/nss_core.c
index 2395be1..b4a7f4a 100644
--- a/nss_core.c
+++ b/nss_core.c
@@ -1577,16 +1577,9 @@
 		return NSS_N2H_INTR_DATA_QUEUE_3;
 	}
 
-	if (cause & NSS_N2H_INTR_COREDUMP_COMPLETE_0) {
-		printk("NSS core 0 signal COREDUMP COMPLETE %x ", cause);
+	if (cause & NSS_N2H_INTR_COREDUMP_COMPLETE) {
 		*type = NSS_INTR_CAUSE_EMERGENCY;
-		return NSS_N2H_INTR_COREDUMP_COMPLETE_0;
-	}
-
-	if (cause & NSS_N2H_INTR_COREDUMP_COMPLETE_1) {
-		printk("NSS core 1 signal COREDUMP COMPLETE %x\n", cause);
-		*type = NSS_INTR_CAUSE_EMERGENCY;
-		return NSS_N2H_INTR_COREDUMP_COMPLETE_1;
+		return NSS_N2H_INTR_COREDUMP_COMPLETE;
 	}
 
 	return 0;
@@ -1648,6 +1641,8 @@
 				break;
 
 			case NSS_INTR_CAUSE_EMERGENCY:
+				nss_info_always("NSS core %d signal COREDUMP COMPLETE %x\n",
+					nss_ctx->id, int_ctx->cause);
 				nss_fw_coredump_notify(nss_ctx, prio_cause);
 				int_ctx->cause &= ~prio_cause;
 				break;
@@ -1677,6 +1672,22 @@
 }
 
 /*
+ * nss_core_handle_napi_emergency()
+ *	NAPI handler for NSS crash
+ */
+int nss_core_handle_napi_emergency(struct napi_struct *napi, int budget)
+{
+	struct netdev_priv_instance *ndev_priv = netdev_priv(napi->dev);
+	struct int_ctx_instance *int_ctx = ndev_priv->int_ctx;
+
+	nss_info_always("NSS core %d signal COREDUMP COMPLETE %x\n",
+				int_ctx->nss_ctx->id, int_ctx->cause);
+	nss_fw_coredump_notify(int_ctx->nss_ctx, 0);
+
+	return 0;
+}
+
+/*
  * nss_core_handle_napi_queue()
  *	NAPI handler for NSS queue cause
  */
diff --git a/nss_core.h b/nss_core.h
index a68d76d..428fb82 100644
--- a/nss_core.h
+++ b/nss_core.h
@@ -163,7 +163,7 @@
  */
 #if defined(NSS_HAL_IPQ807x_SUPPORT)
 #define NSS_MAX_IRQ_PER_INSTANCE 4
-#define NSS_MAX_IRQ_PER_CORE 7
+#define NSS_MAX_IRQ_PER_CORE 8
 #else
 #define NSS_MAX_IRQ_PER_INSTANCE 1
 #define NSS_MAX_IRQ_PER_CORE 2
@@ -200,6 +200,10 @@
 #define NSS_FREQ_110_MIN	0x03000		/* Instructions Per ms Min */
 #define NSS_FREQ_110_MAX	0x07000		/* Instructions Per ms Max */
 
+#define NSS_FREQ_187		187200000	/* Frequency in hz */
+#define NSS_FREQ_187_MIN	0x03000		/* Instructions Per ms Min */
+#define NSS_FREQ_187_MAX	0x07000		/* Instructions Per ms Max */
+
 #define NSS_FREQ_275		275000000	/* Frequency in hz */
 #define NSS_FREQ_275_MIN	0x03000		/* Instructions Per ms Min */
 #define NSS_FREQ_275_MAX	0x07000		/* Instructions Per ms Max */
@@ -216,10 +220,22 @@
 #define NSS_FREQ_733_MIN	0x07000		/* Instructions Per ms Min */
 #define NSS_FREQ_733_MAX	0x25000		/* Instructions Per ms Max */
 
+#define NSS_FREQ_748		748800000	/* Frequency in hz */
+#define NSS_FREQ_748_MIN	0x07000		/* Instructions Per ms Min */
+#define NSS_FREQ_748_MAX	0x10000		/* Instructions Per ms Max */
+
 #define NSS_FREQ_800		800000000	/* Frequency in hz */
 #define NSS_FREQ_800_MIN	0x07000		/* Instructions Per ms Min */
 #define NSS_FREQ_800_MAX	0x25000		/* Instructions Per ms Max */
 
+#define NSS_FREQ_1497		1497600000	/* Frequency in hz */
+#define NSS_FREQ_1497_MIN	0x10000		/* Instructions Per ms Min */
+#define NSS_FREQ_1497_MAX	0x25000		/* Instructions Per ms Max */
+
+#define NSS_FREQ_1689		1689600000	/* Frequency in hz */
+#define NSS_FREQ_1689_MIN	0x10000		/* Instructions Per ms Min */
+#define NSS_FREQ_1689_MAX	0x25000		/* Instructions Per ms Max */
+
 #if (NSS_DT_SUPPORT == 1)
 #define NSSTCM_FREQ		400000000	/* NSS TCM Frequency in Hz */
 
@@ -1920,6 +1936,7 @@
 extern int nss_core_handle_napi(struct napi_struct *napi, int budget);
 extern int nss_core_handle_napi_queue(struct napi_struct *napi, int budget);
 extern int nss_core_handle_napi_non_queue(struct napi_struct *napi, int budget);
+extern int nss_core_handle_napi_emergency(struct napi_struct *napi, int budget);
 extern int32_t nss_core_send_buffer(struct nss_ctx_instance *nss_ctx, uint32_t if_num,
 					struct sk_buff *nbuf, uint16_t qid,
 					uint8_t buffer_type, uint16_t flags);
diff --git a/nss_hal/include/nss_hal.h b/nss_hal/include/nss_hal.h
index 1ac6e20..ec27362 100644
--- a/nss_hal/include/nss_hal.h
+++ b/nss_hal/include/nss_hal.h
@@ -28,6 +28,7 @@
 #include <nss_hal_ops.h>
 
 extern struct clk *nss_core0_clk;
+extern struct clk *nss_core1_clk;
 extern struct nss_runtime_sampling nss_runtime_samples;
 extern struct clk *nss_fab0_clk;
 extern struct clk *nss_fab1_clk;
@@ -47,8 +48,7 @@
 					NSS_N2H_INTR_DATA_QUEUE_1 | \
 					NSS_N2H_INTR_EMPTY_BUFFERS_SOS | \
 					NSS_N2H_INTR_TX_UNBLOCKED | \
-					NSS_N2H_INTR_COREDUMP_COMPLETE_0 | \
-					NSS_N2H_INTR_COREDUMP_COMPLETE_1)
+					NSS_N2H_INTR_COREDUMP_COMPLETE)
 
 /*
  * nss_hal_read_interrupt_cause()
diff --git a/nss_hal/include/nss_regs.h b/nss_hal/include/nss_regs.h
index 9af9508..e9b1fdf 100644
--- a/nss_hal/include/nss_regs.h
+++ b/nss_hal/include/nss_regs.h
@@ -66,8 +66,7 @@
 #define NSS_N2H_INTR_DATA_QUEUE_3		(1 << 4)
 #define NSS_N2H_INTR_EMPTY_BUFFERS_SOS		(1 << 10)
 #define NSS_N2H_INTR_TX_UNBLOCKED		(1 << 11)
-#define NSS_N2H_INTR_COREDUMP_COMPLETE_1	(1 << 13)
-#define NSS_N2H_INTR_COREDUMP_COMPLETE_0	(1 << 14)
+#define NSS_N2H_INTR_COREDUMP_COMPLETE		(1 << 14)
 
 /*
  * Types of H2N interrupts
diff --git a/nss_hal/ipq807x/nss_hal_pvt.c b/nss_hal/ipq807x/nss_hal_pvt.c
index 61363ba..bb683bd 100644
--- a/nss_hal/ipq807x/nss_hal_pvt.c
+++ b/nss_hal/ipq807x/nss_hal_pvt.c
@@ -398,11 +398,9 @@
  */
 static int __nss_hal_clock_configure(struct nss_ctx_instance *nss_ctx, struct platform_device *nss_dev, struct nss_platform_data *npd)
 {
-	if (nss_hal_clock_set_and_enable(&nss_dev->dev, NSS_NSSNOC_AHB_CLK, 200000000)) {
-		return -EFAULT;
-	}
+	uint32_t i;
 
-	if (nss_hal_clock_set_and_enable(&nss_dev->dev, NSS_CORE_CLK, 1497600000)) {
+	if (nss_hal_clock_set_and_enable(&nss_dev->dev, NSS_NSSNOC_AHB_CLK, 200000000)) {
 		return -EFAULT;
 	}
 
@@ -422,6 +420,85 @@
 		return -EFAULT;
 	}
 
+	/*
+	 * No entries, then just load default
+	 */
+	if ((nss_runtime_samples.freq_scale[NSS_FREQ_LOW_SCALE].frequency == 0) ||
+		(nss_runtime_samples.freq_scale[NSS_FREQ_MID_SCALE].frequency == 0) ||
+		(nss_runtime_samples.freq_scale[NSS_FREQ_HIGH_SCALE].frequency == 0)) {
+		nss_runtime_samples.freq_scale[NSS_FREQ_LOW_SCALE].frequency = NSS_FREQ_187;
+		nss_runtime_samples.freq_scale[NSS_FREQ_MID_SCALE].frequency = NSS_FREQ_748;
+		nss_runtime_samples.freq_scale[NSS_FREQ_HIGH_SCALE].frequency = NSS_FREQ_1497;
+	}
+
+	/*
+	 * Test frequency from dtsi, if fail, try to set default frequency.
+	 */
+	if (nss_hal_clock_set_and_enable(&nss_dev->dev, NSS_CORE_CLK, nss_runtime_samples.freq_scale[NSS_FREQ_HIGH_SCALE].frequency)) {
+		if (nss_hal_clock_set_and_enable(&nss_dev->dev, NSS_CORE_CLK, NSS_FREQ_1497)) {
+			return -EFAULT;
+		}
+	}
+
+	/*
+	 * Setup ranges, test frequency, and display.
+	 */
+	for (i = 0; i < NSS_FREQ_MAX_SCALE; i++) {
+		if (nss_runtime_samples.freq_scale[i].frequency == NSS_FREQ_187) {
+			nss_runtime_samples.freq_scale[i].minimum = NSS_FREQ_187_MIN;
+			nss_runtime_samples.freq_scale[i].maximum = NSS_FREQ_187_MAX;
+		} else if (nss_runtime_samples.freq_scale[i].frequency == NSS_FREQ_748) {
+			nss_runtime_samples.freq_scale[i].minimum = NSS_FREQ_748_MIN;
+			nss_runtime_samples.freq_scale[i].maximum = NSS_FREQ_748_MAX;
+		} else if (nss_runtime_samples.freq_scale[i].frequency == NSS_FREQ_1497) {
+			nss_runtime_samples.freq_scale[i].minimum = NSS_FREQ_1497_MIN;
+			nss_runtime_samples.freq_scale[i].maximum = NSS_FREQ_1497_MAX;
+		} else if (nss_runtime_samples.freq_scale[i].frequency == NSS_FREQ_1689) {
+			nss_runtime_samples.freq_scale[i].minimum = NSS_FREQ_1689_MIN;
+			nss_runtime_samples.freq_scale[i].maximum = NSS_FREQ_1689_MAX;
+		} else {
+			nss_info_always("Frequency not found %d", nss_runtime_samples.freq_scale[i].frequency);
+			return -EFAULT;
+		}
+
+		/*
+		 * Test the frequency, if fail, then default to safe frequency and abort
+		 */
+		if (nss_hal_clock_set_and_enable(&nss_dev->dev, NSS_CORE_CLK, nss_runtime_samples.freq_scale[i].frequency)) {
+			return -EFAULT;
+		}
+	}
+
+	nss_info_always("Supported Frequencies - ");
+	for (i = 0; i < NSS_FREQ_MAX_SCALE; i++) {
+		if (nss_runtime_samples.freq_scale[i].frequency == NSS_FREQ_187) {
+			nss_info_always("187 MHz ");
+		} else if (nss_runtime_samples.freq_scale[i].frequency == NSS_FREQ_748) {
+			nss_info_always("748 MHz ");
+		} else if (nss_runtime_samples.freq_scale[i].frequency == NSS_FREQ_1497) {
+			nss_info_always("1.4976 GHz ");
+		} else if (nss_runtime_samples.freq_scale[i].frequency == NSS_FREQ_1689) {
+			nss_info_always("1.689 GHz ");
+		} else {
+			nss_info_always("Error\nNo Table/Invalid Frequency Found");
+			return -EFAULT;
+		}
+	}
+	nss_info_always("\n");
+
+	/*
+	 * Set values only once for core0. Grab the proper clock.
+	 */
+	if (nss_ctx->id) {
+		nss_core1_clk = clk_get(&nss_dev->dev, NSS_CORE_CLK);
+	} else {
+		nss_core0_clk = clk_get(&nss_dev->dev, NSS_CORE_CLK);
+	}
+
+	if (nss_hal_clock_set_and_enable(&nss_dev->dev, NSS_CORE_CLK, nss_runtime_samples.freq_scale[NSS_FREQ_MID_SCALE].frequency)) {
+		return -EFAULT;
+	}
+
 	return 0;
 }
 
@@ -517,6 +594,12 @@
 		err = request_irq(irq, nss_hal_handle_irq, 0, "nss_queue3", int_ctx);
 	}
 
+	if (irq_num == NSS_HAL_N2H_INTR_PURPOSE_COREDUMP_COMPLETE) {
+		int_ctx->cause = NSS_N2H_INTR_COREDUMP_COMPLETE;
+		netif_napi_add(int_ctx->ndev, &int_ctx->napi, nss_core_handle_napi_emergency, NSS_DATA_COMMAND_BUFFER_PROCESSING_WEIGHT);
+		err = request_irq(irq, nss_hal_handle_irq, 0, "nss_coredump_complete", int_ctx);
+	}
+
 	if (err) {
 		return err;
 	}
diff --git a/nss_init.c b/nss_init.c
index 0f81a04..1bee547 100644
--- a/nss_init.c
+++ b/nss_init.c
@@ -73,6 +73,7 @@
  * Handler to send NSS messages
  */
 struct clk *nss_core0_clk;
+struct clk *nss_core1_clk;
 
 /*
  * Handle fabric requests - only on new kernel
@@ -197,10 +198,14 @@
 		nss_freq_change(&nss_top_main.nss[NSS_CORE_1], my_work->frequency, my_work->stats_enable, 0);
 	}
 	clk_set_rate(nss_core0_clk, my_work->frequency);
+
 	nss_freq_change(&nss_top_main.nss[NSS_CORE_0], my_work->frequency, my_work->stats_enable, 1);
 	if (nss_top_main.nss[NSS_CORE_1].state == NSS_CORE_STATE_INITIALIZED) {
 		nss_freq_change(&nss_top_main.nss[NSS_CORE_1], my_work->frequency, my_work->stats_enable, 1);
 	}
+#if defined(NSS_HAL_IPQ807x_SUPPORT)
+	clk_set_rate(nss_core1_clk, my_work->frequency);
+#endif
 
 /*
  * If we are running NSS_PM_SUPPORT, we are on banana