diff --git a/core/mac/src/pe/lim/lim_process_action_frame.c b/core/mac/src/pe/lim/lim_process_action_frame.c
index 069b508..cfefff7 100644
--- a/core/mac/src/pe/lim/lim_process_action_frame.c
+++ b/core/mac/src/pe/lim/lim_process_action_frame.c
@@ -1092,7 +1092,8 @@
 	lim_send_sme_mgmt_frame_ind(mac_ctx, mac_hdr->fc.subType,
 			(uint8_t *) mac_hdr,
 			frame_len + sizeof(tSirMacMgmtHdr), 0,
-			WMA_GET_RX_CH(rx_pkt_info), session, 0);
+			WMA_GET_RX_CH(rx_pkt_info), session,
+			WMA_GET_RX_RSSI_NORMALIZED(rx_pkt_info));
 }
 
 #ifdef ANI_SUPPORT_11H
@@ -1301,7 +1302,8 @@
 
 	lim_send_sme_mgmt_frame_ind(pMac, pHdr->fc.subType, (uint8_t *)pHdr,
 		frameLen + sizeof(tSirMacMgmtHdr), 0,
-		WMA_GET_RX_CH(pRxPacketInfo), psessionEntry, 0);
+		WMA_GET_RX_CH(pRxPacketInfo), psessionEntry,
+		WMA_GET_RX_RSSI_NORMALIZED(pRxPacketInfo));
 
 	frm = qdf_mem_malloc(sizeof(*frm));
 	if (frm == NULL) {
@@ -1528,7 +1530,9 @@
 		lim_send_sme_mgmt_frame_ind(pMac, pHdr->fc.subType, (uint8_t *) pHdr,
 					    frameLen + sizeof(tSirMacMgmtHdr), 0,
 					    WMA_GET_RX_CH(pRxPacketInfo),
-					    psessionEntry, 0);
+					    psessionEntry,
+					    WMA_GET_RX_RSSI_NORMALIZED(
+					    pRxPacketInfo));
 		return;
 	}
 
@@ -2025,7 +2029,9 @@
 					sizeof(tSirMacMgmtHdr),
 					session->smeSessionId,
 					WMA_GET_RX_CH(rx_pkt_info),
-					session, 0);
+					session,
+					WMA_GET_RX_RSSI_NORMALIZED(
+					rx_pkt_info));
 		} else {
 			pe_debug("Dropping the vendor specific action frame"
 					"beacause of (WES Mode not enabled "
@@ -2099,7 +2105,9 @@
 					(uint8_t *) mac_hdr,
 					frame_len + sizeof(tSirMacMgmtHdr),
 					session->smeSessionId,
-					WMA_GET_RX_CH(rx_pkt_info), session, 0);
+					WMA_GET_RX_CH(rx_pkt_info), session,
+					WMA_GET_RX_RSSI_NORMALIZED(
+					rx_pkt_info));
 		break;
 #ifdef FEATURE_WLAN_TDLS
 #ifndef CONVERGED_TDLS_ENABLE
@@ -2187,7 +2195,9 @@
 					    frame_len + sizeof(tSirMacMgmtHdr),
 					    session->smeSessionId,
 					    WMA_GET_RX_CH(rx_pkt_info),
-					    session, 0);
+					    session,
+					    WMA_GET_RX_RSSI_NORMALIZED(
+					    rx_pkt_info));
 		break;
 	}
 	case SIR_MAC_ACTION_PROT_DUAL_PUB:
@@ -2234,6 +2244,52 @@
 	}
 }
 
+#ifndef CONVERGED_P2P_ENABLE
+/*
+ * lim_process_action_vendor_specific() - Process action frame received
+ * @mac_ctx: Pointer to Global MAC structure
+ * @pkt_info: A pointer to packet info structure
+ * @action_hdr: Pointer to vendor specific action frame hdr
+ * @session: PE session entry
+ *
+ * Return: none
+ */
+static void lim_process_action_vendor_specific(tpAniSirGlobal mac_ctx,
+			uint8_t *pkt_info,
+			tpSirMacVendorSpecificPublicActionFrameHdr action_hdr,
+			tpPESession session)
+{
+
+	tpSirMacMgmtHdr mac_hdr;
+	uint32_t frame_len;
+	uint8_t session_id = 0;
+	uint8_t p2p_oui[] = { 0x50, 0x6F, 0x9A, 0x09 };
+
+	mac_hdr = WMA_GET_RX_MAC_HEADER(pkt_info);
+	frame_len = WMA_GET_RX_PAYLOAD_LEN(pkt_info);
+	if (session)
+		session_id = session->smeSessionId;
+
+	/* Check if it is a P2P public action frame. */
+	if (!qdf_mem_cmp(action_hdr->Oui, p2p_oui, 4)) {
+		/* Forward to the SME to HDD to wpa_supplicant */
+		/* type is ACTION */
+		lim_send_sme_mgmt_frame_ind(mac_ctx, mac_hdr->fc.subType,
+					    (uint8_t *) mac_hdr, frame_len +
+					    sizeof(tSirMacMgmtHdr), session_id,
+					    WMA_GET_RX_CH(pkt_info), session,
+					    WMA_GET_RX_RSSI_NORMALIZED(
+					    pkt_info));
+	} else {
+		pe_debug("Unhandled public action frame (Vendor specific) OUI: %x %x %x %x",
+			 action_hdr->Oui[0],
+			 action_hdr->Oui[1],
+			 action_hdr->Oui[2],
+			 action_hdr->Oui[3]);
+	}
+}
+#endif
+
 /**
  * lim_process_action_frame_no_session
  *
@@ -2266,35 +2322,8 @@
 	case SIR_MAC_ACTION_PUBLIC_USAGE:
 		switch (pActionHdr->actionID) {
 		case SIR_MAC_ACTION_VENDOR_SPECIFIC:
-		{
-			tpSirMacMgmtHdr pHdr;
-			uint32_t frameLen;
-			uint8_t P2POui[] = { 0x50, 0x6F, 0x9A, 0x09 };
-
-			pHdr = WMA_GET_RX_MAC_HEADER(pBd);
-			frameLen = WMA_GET_RX_PAYLOAD_LEN(pBd);
-
-			/* Check if it is a P2P public action frame. */
-			if (!qdf_mem_cmp(pActionHdr->Oui, P2POui, 4)) {
-				/* Forward to the SME to HDD to wpa_supplicant */
-				/* type is ACTION */
-				lim_send_sme_mgmt_frame_ind(pMac,
-							    pHdr->fc.subType,
-							    (uint8_t *) pHdr,
-							    frameLen +
-							    sizeof
-							    (tSirMacMgmtHdr),
-							    0,
-							    WMA_GET_RX_CH
-								    (pBd), NULL, 0);
-			} else {
-				pe_debug("Unhandled public action frame (Vendor specific) OUI: %x %x %x %x",
-					pActionHdr->Oui[0],
-					pActionHdr->Oui[1],
-					pActionHdr->Oui[2],
-					pActionHdr->Oui[3]);
-			}
-		}
+			lim_process_action_vendor_specific(pMac, pBd,
+							   pActionHdr, NULL);
 		break;
 		default:
 			pe_warn("Unhandled public action frame: %x",
diff --git a/core/mac/src/pe/lim/lim_process_message_queue.c b/core/mac/src/pe/lim/lim_process_message_queue.c
index 01c9498..75177f7 100644
--- a/core/mac/src/pe/lim/lim_process_message_queue.c
+++ b/core/mac/src/pe/lim/lim_process_message_queue.c
@@ -840,7 +840,8 @@
 			(uint8_t *) hdr,
 			WMA_GET_RX_PAYLOAD_LEN(buff_desc) +
 			sizeof(tSirMacMgmtHdr), mgmt_frame->sessionId,
-			WMA_GET_RX_CH(buff_desc), session_entry, 0);
+			WMA_GET_RX_CH(buff_desc), session_entry,
+			WMA_GET_RX_RSSI_NORMALIZED(buff_desc));
 
 		if ((type == SIR_MAC_MGMT_FRAME)
 		    && (fc.type == SIR_MAC_MGMT_FRAME)
diff --git a/core/mac/src/pe/lim/lim_process_probe_req_frame.c b/core/mac/src/pe/lim/lim_process_probe_req_frame.c
index ede7ca0..feec899 100644
--- a/core/mac/src/pe/lim/lim_process_probe_req_frame.c
+++ b/core/mac/src/pe/lim/lim_process_probe_req_frame.c
@@ -561,7 +561,8 @@
 				    (uint8_t *) pHdr,
 				    (frameLen + sizeof(tSirMacMgmtHdr)),
 				    psessionEntry->smeSessionId, WMA_GET_RX_CH(pBd),
-				    psessionEntry, 0);
+				    psessionEntry,
+				    WMA_GET_RX_RSSI_NORMALIZED(pBd));
 } /*** end lim_indicate_probe_req_to_hdd() ***/
 
 /**
