From 58b2b071e77f38c5e9ffaccd895ec5b9756faf73 Mon Sep 17 00:00:00 2001 From: Gururaj Pandurangi Date: Tue, 10 Nov 2020 18:09:14 -0800 Subject: [PATCH] qcacld-3.0: Add support to view peer RSSI value in auth/assoc req pkt Add support to view station's peer RSSI value in auth and assoc request packet by extracting rssi from probe request and passing it down to FW in the auth request and assoc request mgmt frames. Change-Id: I980427756ef542d054221d52693e3c89f307a658 CRs-Fixed: 2832977 --- core/mac/inc/ani_global.h | 3 + .../src/pe/lim/lim_process_probe_rsp_frame.c | 6 +- core/mac/src/pe/lim/lim_process_tdls.c | 9 +-- .../src/pe/lim/lim_send_frames_host_roam.c | 4 +- .../src/pe/lim/lim_send_management_frames.c | 60 ++++++++++--------- core/wma/inc/wma_types.h | 14 +++-- core/wma/src/wma_data.c | 5 +- 7 files changed, 60 insertions(+), 41 deletions(-) diff --git a/core/mac/inc/ani_global.h b/core/mac/inc/ani_global.h index ef53ea4e8827..8e685545cf13 100644 --- a/core/mac/inc/ani_global.h +++ b/core/mac/inc/ani_global.h @@ -518,6 +518,9 @@ typedef struct sAniSirLim { tCacheParams protStaOverlapCache[LIM_PROT_STA_OVERLAP_CACHE_SIZE]; tCacheParams protStaCache[LIM_PROT_STA_CACHE_SIZE]; + /* Peer RSSI value */ + int8_t bss_rssi; + /* ASSOC RELATED END */ /* ////////////////////////////// HT RELATED ////////////////////////////////////////// */ diff --git a/core/mac/src/pe/lim/lim_process_probe_rsp_frame.c b/core/mac/src/pe/lim/lim_process_probe_rsp_frame.c index be73dc1d03f0..6f95ed93c6d6 100644 --- a/core/mac/src/pe/lim/lim_process_probe_rsp_frame.c +++ b/core/mac/src/pe/lim/lim_process_probe_rsp_frame.c @@ -126,6 +126,9 @@ lim_process_probe_rsp_frame(struct mac_context *mac_ctx, uint8_t *rx_Packet_info header = WMA_GET_RX_MAC_HEADER(rx_Packet_info); + mac_ctx->lim.bss_rssi = (int8_t) + WMA_GET_RX_RSSI_NORMALIZED(rx_Packet_info); + /* Validate IE information before processing Probe Response Frame */ if (lim_validate_ie_information_in_probe_rsp_frame(mac_ctx, rx_Packet_info) != @@ -139,8 +142,7 @@ lim_process_probe_rsp_frame(struct mac_context *mac_ctx, uint8_t *rx_Packet_info pe_debug("Probe Resp(len %d): " QDF_MAC_ADDR_FMT " RSSI %d", WMA_GET_RX_MPDU_LEN(rx_Packet_info), QDF_MAC_ADDR_REF(header->bssId), - (uint)abs((int8_t) - WMA_GET_RX_RSSI_NORMALIZED(rx_Packet_info))); + (uint)abs(mac_ctx->lim.bss_rssi)); /* Get pointer to Probe Response frame body */ body = WMA_GET_RX_MPDU_DATA(rx_Packet_info); /* Enforce Mandatory IEs */ diff --git a/core/mac/src/pe/lim/lim_process_tdls.c b/core/mac/src/pe/lim/lim_process_tdls.c index e94cb4872388..85dfceec40c3 100644 --- a/core/mac/src/pe/lim/lim_process_tdls.c +++ b/core/mac/src/pe/lim/lim_process_tdls.c @@ -654,7 +654,8 @@ static QDF_STATUS lim_send_tdls_dis_req_frame(struct mac_context *mac, lim_mgmt_tdls_tx_complete, HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME | HAL_USE_PEER_STA_REQUESTED_MASK, - smeSessionId, false, 0, RATEID_DEFAULT); + smeSessionId, false, 0, + RATEID_DEFAULT, 0); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { mac->lim.tdls_frm_session_id = NO_SESSION; pe_err("could not send TDLS Discovery Request frame"); @@ -966,7 +967,7 @@ static QDF_STATUS lim_send_tdls_dis_rsp_frame(struct mac_context *mac, lim_mgmt_tdls_tx_complete, HAL_USE_SELF_STA_REQUESTED_MASK, smeSessionId, false, 0, - RATEID_DEFAULT); + RATEID_DEFAULT, 0); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { mac->lim.tdls_frm_session_id = NO_SESSION; pe_err("could not send TDLS Discovery Response frame!"); @@ -1051,7 +1052,7 @@ wma_tx_frame_with_tx_complete_send(struct mac_context *mac, void *pPacket, HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME | HAL_USE_PEER_STA_REQUESTED_MASK, smeSessionId, flag, 0, - RATEID_DEFAULT); + RATEID_DEFAULT, 0); } #else @@ -1072,7 +1073,7 @@ wma_tx_frame_with_tx_complete_send(struct mac_context *mac, void *pPacket, HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME | HAL_USE_PEER_STA_REQUESTED_MASK, smeSessionId, false, 0, - RATEID_DEFAULT); + RATEID_DEFAULT, 0); } #endif diff --git a/core/mac/src/pe/lim/lim_send_frames_host_roam.c b/core/mac/src/pe/lim/lim_send_frames_host_roam.c index 57ceb8076bd4..db35cb762459 100644 --- a/core/mac/src/pe/lim/lim_send_frames_host_roam.c +++ b/core/mac/src/pe/lim/lim_send_frames_host_roam.c @@ -451,7 +451,7 @@ void lim_send_reassoc_req_with_ft_ies_mgmt_frame(struct mac_context *mac_ctx, (uint16_t) (bytes + ft_ies_length), TXRX_FRM_802_11_MGMT, ANI_TXDIR_TODS, 7, lim_tx_complete, frame, tx_flag, vdev_id, - 0, RATEID_DEFAULT); + 0, RATEID_DEFAULT, 0); MTRACE(qdf_trace(QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, pe_session->peSessionId, qdf_status)); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { @@ -786,7 +786,7 @@ void lim_send_reassoc_req_mgmt_frame(struct mac_context *mac, (uint16_t) (sizeof(tSirMacMgmtHdr) + nPayload), TXRX_FRM_802_11_MGMT, ANI_TXDIR_TODS, 7, lim_tx_complete, pFrame, txFlag, smeSessionId, 0, - RATEID_DEFAULT); + RATEID_DEFAULT, 0); MTRACE(qdf_trace (QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, pe_session->peSessionId, qdf_status)); diff --git a/core/mac/src/pe/lim/lim_send_management_frames.c b/core/mac/src/pe/lim/lim_send_management_frames.c index 83685ed0153d..d628e342bcab 100644 --- a/core/mac/src/pe/lim/lim_send_management_frames.c +++ b/core/mac/src/pe/lim/lim_send_management_frames.c @@ -438,7 +438,7 @@ lim_send_probe_req_mgmt_frame(struct mac_context *mac_ctx, (uint16_t) sizeof(tSirMacMgmtHdr) + payload, TXRX_FRM_802_11_MGMT, ANI_TXDIR_TODS, 7, lim_tx_complete, frame, txflag, vdev_id, - 0, RATEID_DEFAULT); + 0, RATEID_DEFAULT, 0); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { pe_err("could not send Probe Request frame!"); /* Pkt will be freed up by the callback */ @@ -873,7 +873,7 @@ lim_send_probe_rsp_mgmt_frame(struct mac_context *mac_ctx, TXRX_FRM_802_11_MGMT, ANI_TXDIR_TODS, 7, lim_tx_complete, frame, tx_flag, - vdev_id, 0, RATEID_DEFAULT); + vdev_id, 0, RATEID_DEFAULT, 0); /* Pkt will be freed up by the callback */ if (!QDF_IS_STATUS_SUCCESS(qdf_status)) @@ -1086,7 +1086,7 @@ lim_send_addts_req_action_frame(struct mac_context *mac, TXRX_FRM_802_11_MGMT, ANI_TXDIR_TODS, 7, lim_tx_complete, pFrame, txFlag, - smeSessionId, 0, RATEID_DEFAULT); + smeSessionId, 0, RATEID_DEFAULT, 0); MTRACE(qdf_trace(QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, pe_session->peSessionId, qdf_status)); @@ -1210,7 +1210,7 @@ void lim_send_mscs_req_action_frame(struct mac_context *mac, TXRX_FRM_802_11_MGMT, ANI_TXDIR_TODS, 7, lim_tx_complete, frame, lim_mscs_req_tx_complete_cnf, HAL_USE_PEER_STA_REQUESTED_MASK, pe_session->vdev_id, - false, 0, RATEID_DEFAULT); + false, 0, RATEID_DEFAULT, 0); if (QDF_IS_STATUS_SUCCESS(qdf_status)) { mlme_set_is_mscs_req_sent(pe_session->vdev, true); } else { @@ -1705,14 +1705,14 @@ lim_send_assoc_rsp_mgmt_frame( ANI_TXDIR_TODS, 7, lim_tx_complete, frame, lim_assoc_rsp_tx_complete, tx_flag, - sme_session, false, 0, RATEID_DEFAULT); + sme_session, false, 0, RATEID_DEFAULT, 0); else qdf_status = wma_tx_frame( mac_ctx, packet, (uint16_t)bytes, TXRX_FRM_802_11_MGMT, ANI_TXDIR_TODS, 7, lim_tx_complete, frame, tx_flag, - sme_session, 0, RATEID_DEFAULT); + sme_session, 0, RATEID_DEFAULT, 0); MTRACE(qdf_trace(QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, pe_session->peSessionId, qdf_status)); @@ -1859,7 +1859,7 @@ lim_send_delts_req_action_frame(struct mac_context *mac, TXRX_FRM_802_11_MGMT, ANI_TXDIR_TODS, 7, lim_tx_complete, pFrame, txFlag, - smeSessionId, 0, RATEID_DEFAULT); + smeSessionId, 0, RATEID_DEFAULT, 0); MTRACE(qdf_trace(QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, pe_session->peSessionId, qdf_status)); /* Pkt will be freed up by the callback */ @@ -2039,6 +2039,7 @@ lim_send_assoc_req_mgmt_frame(struct mac_context *mac_ctx, uint8_t mbo_ie_len = 0, adaptive_11r_ie_len = 0, rsnx_ie_len = 0; uint8_t mscs_ext_ie_len = 0; bool bss_mfp_capable; + int8_t peer_rssi = 0; if (!pe_session) { pe_err("pe_session is NULL"); @@ -2620,12 +2621,15 @@ lim_send_assoc_req_mgmt_frame(struct mac_context *mac_ctx, pe_session, QDF_STATUS_SUCCESS, QDF_STATUS_SUCCESS); lim_diag_mgmt_tx_event_report(mac_ctx, mac_hdr, pe_session, QDF_STATUS_SUCCESS, QDF_STATUS_SUCCESS); + + peer_rssi = mac_ctx->lim.bss_rssi; + qdf_status = wma_tx_frameWithTxComplete(mac_ctx, packet, (uint16_t) (sizeof(tSirMacMgmtHdr) + payload), TXRX_FRM_802_11_MGMT, ANI_TXDIR_TODS, 7, lim_tx_complete, frame, lim_assoc_tx_complete_cnf, - tx_flag, vdev_id, false, 0, min_rid); + tx_flag, vdev_id, false, 0, min_rid, peer_rssi); MTRACE(qdf_trace (QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, pe_session->peSessionId, qdf_status)); @@ -2832,6 +2836,7 @@ lim_send_auth_mgmt_frame(struct mac_context *mac_ctx, bool challenge_req = false; enum rateid min_rid = RATEID_DEFAULT; uint16_t ch_freq_tx_frame = 0; + int8_t peer_rssi = 0; if (!session) { pe_err("Error: psession Entry is NULL"); @@ -3099,6 +3104,7 @@ alloc_packet: mac_ctx->auth_ack_status = LIM_ACK_NOT_RCD; min_rid = lim_get_min_session_txrate(session); + peer_rssi = mac_ctx->lim.bss_rssi; lim_diag_mgmt_tx_event_report(mac_ctx, mac_hdr, session, QDF_STATUS_SUCCESS, QDF_STATUS_SUCCESS); @@ -3112,7 +3118,7 @@ alloc_packet: 7, lim_tx_complete, frame, lim_auth_tx_complete_cnf, tx_flag, vdev_id, false, - ch_freq_tx_frame, min_rid); + ch_freq_tx_frame, min_rid, peer_rssi); MTRACE(qdf_trace(QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, session->peSessionId, qdf_status)); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { @@ -3582,7 +3588,7 @@ lim_send_disassoc_mgmt_frame(struct mac_context *mac, ANI_TXDIR_TODS, 7, lim_tx_complete, pFrame, lim_disassoc_tx_complete_cnf_handler, txFlag, smeSessionId, false, 0, - RATEID_DEFAULT); + RATEID_DEFAULT, 0); MTRACE(qdf_trace (QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, pe_session->peSessionId, qdf_status)); @@ -3621,7 +3627,7 @@ lim_send_disassoc_mgmt_frame(struct mac_context *mac, ANI_TXDIR_TODS, 7, lim_tx_complete, pFrame, txFlag, - smeSessionId, 0, RATEID_DEFAULT); + smeSessionId, 0, RATEID_DEFAULT, 0); MTRACE(qdf_trace (QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, pe_session->peSessionId, qdf_status)); @@ -3789,7 +3795,7 @@ lim_send_deauth_mgmt_frame(struct mac_context *mac, ANI_TXDIR_TODS, 7, lim_tx_complete, pFrame, lim_deauth_tx_complete_cnf_handler, txFlag, smeSessionId, false, 0, - RATEID_DEFAULT); + RATEID_DEFAULT, 0); MTRACE(qdf_trace (QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, pe_session->peSessionId, qdf_status)); @@ -3836,7 +3842,7 @@ lim_send_deauth_mgmt_frame(struct mac_context *mac, wma_tx_frame(mac, pPacket, (uint16_t) nBytes, TXRX_FRM_802_11_MGMT, ANI_TXDIR_IBSS, 7, lim_tx_complete, pFrame, txFlag, - smeSessionId, 0, RATEID_DEFAULT); + smeSessionId, 0, RATEID_DEFAULT, 0); } else { #endif lim_diag_mgmt_tx_event_report(mac, pMacHdr, @@ -3848,7 +3854,7 @@ lim_send_deauth_mgmt_frame(struct mac_context *mac, wma_tx_frame(mac, pPacket, (uint16_t) nBytes, TXRX_FRM_802_11_MGMT, ANI_TXDIR_TODS, 7, lim_tx_complete, pFrame, txFlag, - smeSessionId, 0, RATEID_DEFAULT); + smeSessionId, 0, RATEID_DEFAULT, 0); #ifdef FEATURE_WLAN_TDLS } #endif @@ -3975,7 +3981,7 @@ lim_send_meas_report_frame(struct mac_context *mac, qdf_status = wma_tx_frame(mac, pPacket, (uint16_t) nBytes, TXRX_FRM_802_11_MGMT, ANI_TXDIR_TODS, 7, - lim_tx_complete, pFrame, 0, 0, RATEID_DEFAULT); + lim_tx_complete, pFrame, 0, 0, RATEID_DEFAULT, 0); MTRACE(qdf_trace (QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, ((pe_session) ? pe_session->peSessionId : NO_SESSION), @@ -4083,7 +4089,7 @@ lim_send_tpc_report_frame(struct mac_context *mac, qdf_status = wma_tx_frame(mac, pPacket, (uint16_t) nBytes, TXRX_FRM_802_11_MGMT, ANI_TXDIR_TODS, 7, - lim_tx_complete, pFrame, 0, 0, RATEID_DEFAULT); + lim_tx_complete, pFrame, 0, 0, RATEID_DEFAULT, 0); MTRACE(qdf_trace (QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, ((pe_session) ? pe_session->peSessionId : NO_SESSION), @@ -4208,7 +4214,7 @@ lim_send_channel_switch_mgmt_frame(struct mac_context *mac, TXRX_FRM_802_11_MGMT, ANI_TXDIR_TODS, 7, lim_tx_complete, pFrame, txFlag, - smeSessionId, 0, RATEID_DEFAULT); + smeSessionId, 0, RATEID_DEFAULT, 0); MTRACE(qdf_trace(QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, pe_session->peSessionId, qdf_status)); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { @@ -4356,7 +4362,7 @@ lim_send_extended_chan_switch_action_frame(struct mac_context *mac_ctx, 7, lim_tx_complete, frame, txFlag, vdev_id, 0, - RATEID_DEFAULT); + RATEID_DEFAULT, 0); MTRACE(qdf_trace(QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, session_entry->peSessionId, qdf_status)); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { @@ -4505,7 +4511,7 @@ lim_p2p_oper_chan_change_confirm_action_frame(struct mac_context *mac_ctx, TXRX_FRM_802_11_MGMT, ANI_TXDIR_TODS, 7, lim_tx_complete, frame, lim_oper_chan_change_confirm_tx_complete_cnf, - tx_flag, vdev_id, false, 0, RATEID_DEFAULT); + tx_flag, vdev_id, false, 0, RATEID_DEFAULT, 0); MTRACE(qdf_trace(QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, session_entry->peSessionId, qdf_status)); @@ -4636,7 +4642,7 @@ lim_send_neighbor_report_request_frame(struct mac_context *mac, TXRX_FRM_802_11_MGMT, ANI_TXDIR_TODS, 7, lim_tx_complete, pFrame, txFlag, - smeSessionId, 0, RATEID_DEFAULT); + smeSessionId, 0, RATEID_DEFAULT, 0); MTRACE(qdf_trace(QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, pe_session->peSessionId, qdf_status)); if (QDF_STATUS_SUCCESS != qdf_status) { @@ -4764,7 +4770,7 @@ lim_send_link_report_action_frame(struct mac_context *mac, TXRX_FRM_802_11_MGMT, ANI_TXDIR_TODS, 7, lim_tx_complete, pFrame, txFlag, - vdev_id, 0, RATEID_DEFAULT); + vdev_id, 0, RATEID_DEFAULT, 0); MTRACE(qdf_trace(QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, pe_session->peSessionId, qdf_status)); if (QDF_STATUS_SUCCESS != qdf_status) { @@ -4937,7 +4943,7 @@ lim_send_radio_measure_report_action_frame(struct mac_context *mac, qdf_status = wma_tx_frame(mac, pPacket, (uint16_t)nBytes, TXRX_FRM_802_11_MGMT, ANI_TXDIR_TODS, 7, lim_tx_complete, pFrame, txFlag, - smeSessionId, 0, RATEID_DEFAULT); + smeSessionId, 0, RATEID_DEFAULT, 0); MTRACE(qdf_trace(QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, pe_session->peSessionId, qdf_status)); if (QDF_STATUS_SUCCESS != qdf_status) { @@ -5069,7 +5075,7 @@ QDF_STATUS lim_send_sa_query_request_frame(struct mac_context *mac, uint8_t *tra TXRX_FRM_802_11_MGMT, ANI_TXDIR_TODS, 7, lim_tx_complete, pFrame, txFlag, - smeSessionId, 0, RATEID_DEFAULT); + smeSessionId, 0, RATEID_DEFAULT, 0); if (QDF_STATUS_SUCCESS != qdf_status) { pe_err("wma_tx_frame FAILED! Status [%d]", qdf_status); nSirStatus = QDF_STATUS_E_FAILURE; @@ -5237,7 +5243,7 @@ QDF_STATUS lim_send_sa_query_response_frame(struct mac_context *mac, TXRX_FRM_802_11_MGMT, ANI_TXDIR_TODS, 7, lim_tx_complete, pFrame, txFlag, - smeSessionId, 0, RATEID_DEFAULT); + smeSessionId, 0, RATEID_DEFAULT, 0); MTRACE(qdf_trace(QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, pe_session->peSessionId, qdf_status)); if (QDF_STATUS_SUCCESS != qdf_status) { @@ -5439,7 +5445,7 @@ QDF_STATUS lim_send_addba_response_frame(struct mac_context *mac_ctx, NULL, frame_ptr, lim_addba_rsp_tx_complete_cnf, tx_flag, vdev_id, - false, 0, RATEID_DEFAULT); + false, 0, RATEID_DEFAULT, 0); MTRACE(qdf_trace(QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, session->peSessionId, qdf_status)); if (QDF_STATUS_SUCCESS != qdf_status) { @@ -5600,7 +5606,7 @@ QDF_STATUS lim_send_delba_action_frame(struct mac_context *mac_ctx, NULL, frame_ptr, lim_delba_tx_complete_cnf, tx_flag, vdev_id, - false, 0, RATEID_DEFAULT); + false, 0, RATEID_DEFAULT, 0); if (qdf_status != QDF_STATUS_SUCCESS) { pe_err("delba wma_tx_frame FAILED! Status [%d]", qdf_status); return qdf_status; @@ -5655,7 +5661,7 @@ static void lim_tx_mgmt_frame(struct mac_context *mac_ctx, uint8_t vdev_id, TXRX_FRM_802_11_MGMT, ANI_TXDIR_TODS, 7, lim_tx_complete, frame, lim_auth_tx_complete_cnf, - 0, vdev_id, false, 0, min_rid); + 0, vdev_id, false, 0, min_rid, 0); MTRACE(qdf_trace(QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, session->peSessionId, qdf_status)); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { diff --git a/core/wma/inc/wma_types.h b/core/wma/inc/wma_types.h index df846f68040b..b43d60a5053e 100644 --- a/core/wma/inc/wma_types.h +++ b/core/wma/inc/wma_types.h @@ -460,7 +460,7 @@ enum wmamsgtype { #define HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME 0x40 #define wma_tx_frame(hHal, pFrmBuf, frmLen, frmType, txDir, tid, pCompFunc, \ - pData, txFlag, sessionid, channel_freq, rid) \ + pData, txFlag, sessionid, channel_freq, rid, peer_rssi) \ (QDF_STATUS)( wma_tx_packet( \ cds_get_context(QDF_MODULE_ID_WMA), \ (pFrmBuf), \ @@ -475,11 +475,12 @@ enum wmamsgtype { (sessionid), \ (false), \ (channel_freq), \ - (rid))) + (rid), \ + (peer_rssi))) #define wma_tx_frameWithTxComplete(hHal, pFrmBuf, frmLen, frmType, txDir, tid, \ pCompFunc, pData, pCBackFnTxComp, txFlag, sessionid, tdlsflag, \ - channel_freq, rid) \ + channel_freq, rid, peer_rssi) \ (QDF_STATUS)( wma_tx_packet( \ cds_get_context(QDF_MODULE_ID_WMA), \ (pFrmBuf), \ @@ -494,7 +495,8 @@ enum wmamsgtype { (sessionid), \ (tdlsflag), \ (channel_freq), \ - (rid))) + (rid), \ + (peer_rssi))) /** * struct sUapsd_Params - Powersave Offload Changes @@ -687,6 +689,7 @@ void wma_tx_abort(uint8_t vdev_id); * @tdls_flag: tdls flag * @channel_freq: channel frequency * @rid: rate id + * @peer_rssi: peer RSSI value * * This function sends the frame corresponding to the * given vdev id. @@ -700,7 +703,8 @@ QDF_STATUS wma_tx_packet(void *wma_context, void *tx_frame, uint16_t frmLen, void *pData, wma_tx_ota_comp_callback tx_frm_ota_comp_cb, uint8_t tx_flag, uint8_t vdev_id, bool tdls_flag, - uint16_t channel_freq, enum rateid rid); + uint16_t channel_freq, enum rateid rid, + int8_t peer_rssi); /** * wma_open() - Allocate wma context and initialize it. diff --git a/core/wma/src/wma_data.c b/core/wma/src/wma_data.c index 9dc5be0badcc..61a23e4bf178 100644 --- a/core/wma/src/wma_data.c +++ b/core/wma/src/wma_data.c @@ -2223,7 +2223,8 @@ QDF_STATUS wma_tx_packet(void *wma_context, void *tx_frame, uint16_t frmLen, void *pData, wma_tx_ota_comp_callback tx_frm_ota_comp_cb, uint8_t tx_flag, uint8_t vdev_id, bool tdls_flag, - uint16_t channel_freq, enum rateid rid) + uint16_t channel_freq, enum rateid rid, + int8_t peer_rssi) { tp_wma_handle wma_handle = (tp_wma_handle) (wma_context); int32_t status; @@ -2622,6 +2623,8 @@ QDF_STATUS wma_tx_packet(void *wma_context, void *tx_frame, uint16_t frmLen, mgmt_param.qdf_ctx = cds_get_context(QDF_MODULE_ID_QDF_DEVICE); mgmt_param.use_6mbps = use_6mbps; mgmt_param.tx_type = tx_frm_index; + mgmt_param.peer_rssi = peer_rssi; + if (tx_flag & HAL_USE_INCORRECT_KEY_PMF) mgmt_param.tx_flags |= MGMT_TX_USE_INCORRECT_KEY;