소스 검색

qcacld-3.0: Send rx rssi in mgmt frame ind

Rssi value is set to zero in mgmt frame ind
sent to sme via lim_send_sme_mgmt_frame_ind
in few cases.

Fix is to send rx rssi normalized value.

Change-Id: Ie8731dc2968fdfe4503266039f4753405db1b8ce
CRs-Fixed: 2032629
yeshwanth sriram guntuka 8 년 전
부모
커밋
2bc14356bc

+ 64 - 35
core/mac/src/pe/lim/lim_process_action_frame.c

@@ -1092,7 +1092,8 @@ static void __lim_process_qos_map_configure_frame(tpAniSirGlobal mac_ctx,
 	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_process_radio_measure_request(tpAniSirGlobal pMac, uint8_t *pRxPacketInfo,
 
 	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 @@ static void __lim_process_sa_query_response_action_frame(tpAniSirGlobal pMac,
 		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 @@ void lim_process_action_frame(tpAniSirGlobal mac_ctx,
 					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 @@ void lim_process_action_frame(tpAniSirGlobal mac_ctx,
 					(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 @@ void lim_process_action_frame(tpAniSirGlobal mac_ctx,
 					    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 @@ void lim_process_action_frame(tpAniSirGlobal mac_ctx,
 	}
 }
 
+#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 @@ void lim_process_action_frame_no_session(tpAniSirGlobal pMac, uint8_t *pBd)
 	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",

+ 2 - 1
core/mac/src/pe/lim/lim_process_message_queue.c

@@ -840,7 +840,8 @@ lim_check_mgmt_registered_frames(tpAniSirGlobal mac_ctx, uint8_t *buff_desc,
 			(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)

+ 2 - 1
core/mac/src/pe/lim/lim_process_probe_req_frame.c

@@ -561,7 +561,8 @@ lim_indicate_probe_req_to_hdd(tpAniSirGlobal pMac, uint8_t *pBd,
 				    (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() ***/
 
 /**