wlan: Changes for supporting RSSI Monitoring feature
Framework should get a indication whenever AP breaches rssi range.
Add support to set the rssi range in FW and forward the breach
event from FW to framework.
Change-Id: I08248d15fde966aad2ba54614d444b7310b3775a
CRs-Fixed: 916888
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index dc2463b..1b2266a 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -7655,6 +7655,91 @@
}
return(status);
}
+/* ---------------------------------------------------------------------------
+
+ \fn sme_StartRssiMonitoring
+
+ \brief
+ SME will pass this request to lower mac to start monitoring rssi range on
+ a bssid.
+
+ \param
+
+ hHal - The handle returned by macOpen.
+
+ tSirRssiMonitorReq req- depict the monitor req params.
+
+ \return eHalStatus
+
+--------------------------------------------------------------------------- */
+eHalStatus sme_StartRssiMonitoring( tHalHandle hHal,
+ tSirRssiMonitorReq *req)
+{
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+ VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
+ tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+ vos_msg_t vosMessage;
+
+ if ( eHAL_STATUS_SUCCESS == ( status =
+ sme_AcquireGlobalLock( &pMac->sme ) ) )
+ {
+ /* serialize the req through MC thread */
+ vosMessage.bodyptr = req;
+ vosMessage.type = WDA_START_RSSI_MONITOR_REQ;
+ MTRACE(vos_trace(VOS_MODULE_ID_SME,
+ TRACE_CODE_SME_TX_WDA_MSG, NO_SESSION, vosMessage.type));
+ vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &vosMessage );
+ if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
+ {
+ status = eHAL_STATUS_FAILURE;
+ }
+ sme_ReleaseGlobalLock( &pMac->sme );
+ }
+ return(status);
+}
+
+/* ---------------------------------------------------------------------------
+
+ \fn sme_StopRssiMonitoring
+
+ \brief
+ SME will pass this request to lower mac to stop monitoring rssi range on
+ a bssid.
+
+ \param
+
+ hHal - The handle returned by macOpen.
+
+ tSirRssiMonitorReq req- depict the monitor req params.
+
+ \return eHalStatus
+
+--------------------------------------------------------------------------- */
+eHalStatus sme_StopRssiMonitoring(tHalHandle hHal,
+ tSirRssiMonitorReq *req)
+{
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+ VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
+ tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+ vos_msg_t vosMessage;
+
+ if ( eHAL_STATUS_SUCCESS == ( status =
+ sme_AcquireGlobalLock( &pMac->sme ) ) )
+ {
+ /* serialize the req through MC thread */
+ vosMessage.bodyptr = req;
+ vosMessage.type = WDA_STOP_RSSI_MONITOR_REQ;
+ MTRACE(vos_trace(VOS_MODULE_ID_SME,
+ TRACE_CODE_SME_TX_WDA_MSG, NO_SESSION, vosMessage.type));
+ vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &vosMessage );
+ if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
+ {
+ status = eHAL_STATUS_FAILURE;
+ }
+ sme_ReleaseGlobalLock( &pMac->sme );
+ }
+ return(status);
+}
/* ---------------------------------------------------------------------------
@@ -11827,6 +11912,35 @@
}
#endif /* FEATURE_WLAN_CH_AVOID */
+
+/**
+ * sme_set_rssi_threshold_breached_cb() - set rssi threshold breached callback
+ * @hal: global hal handle
+ * @cb: callback function pointer
+ *
+ * This function stores the rssi threshold breached callback function.
+ *
+ * Return: eHalStatus enumeration.
+ */
+eHalStatus sme_set_rssi_threshold_breached_cb(tHalHandle hal,
+ void (*cb)(void *, struct rssi_breach_event *))
+{
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+ tpAniSirGlobal mac = PMAC_STRUCT(hal);
+
+ status = sme_AcquireGlobalLock(&mac->sme);
+ if (status != eHAL_STATUS_SUCCESS) {
+ smsLog(mac, LOGE,
+ FL("sme_AcquireGlobalLock failed!(status=%d)"),
+ status);
+ return status;
+ }
+
+ mac->sme.rssiThresholdBreachedCb = cb;
+ sme_ReleaseGlobalLock(&mac->sme);
+ return status;
+}
+
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
/* ---------------------------------------------------------------------------