diff --git a/core/mac/src/pe/lim/lim_api.c b/core/mac/src/pe/lim/lim_api.c index d5a2e239f62e..73c5a7f6a04b 100644 --- a/core/mac/src/pe/lim/lim_api.c +++ b/core/mac/src/pe/lim/lim_api.c @@ -1374,6 +1374,26 @@ static bool pe_filter_bcn_probe_frame(tpAniSirGlobal mac_ctx, return false; } +static QDF_STATUS pe_handle_probe_req_frames(tpAniSirGlobal mac_ctx, + cds_pkt_t *pkt) +{ + QDF_STATUS status; + struct scheduler_msg msg = {0}; + + /* Forward to MAC via mesg = SIR_BB_XPORT_MGMT_MSG */ + msg.type = SIR_BB_XPORT_MGMT_MSG; + msg.bodyptr = pkt; + msg.bodyval = 0; + msg.callback = pe_mc_process_handler; + + status = scheduler_post_msg(QDF_MODULE_ID_SCAN, &msg); + + if (!QDF_IS_STATUS_SUCCESS(status)) + pe_err_rl("Failed to post probe req frame to Scan Queue"); + + return status; +} + /* --------------------------------------------------------------------------- */ /** * pe_handle_mgmt_frame() - Process the Management frames from TXRX @@ -1449,6 +1469,18 @@ static QDF_STATUS pe_handle_mgmt_frame(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } + /* + * Post Probe Req frames to Scan queue and return + */ + if (mHdr->fc.subType == SIR_MAC_MGMT_PROBE_REQ) { + qdf_status = pe_handle_probe_req_frames(pMac, pVosPkt); + if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { + cds_pkt_return_packet(pVosPkt); + pVosPkt = NULL; + } + return qdf_status; + } + if (QDF_STATUS_SUCCESS != pe_drop_pending_rx_mgmt_frames(pMac, mHdr, pVosPkt)) return QDF_STATUS_E_FAILURE;