summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorManikandan Mohan <manikand@codeaurora.org>2019-08-23 08:32:56 -0700
committernshrivas <nshrivas@codeaurora.org>2019-09-20 16:11:59 -0700
commitebc31619ce67d63385b09df432845ed17b8e7766 (patch)
tree35dbc87e475a1a19856fab9025c7b7c6d97db755 /core
parentf6ff082e08fe4458d2ef7733e61ca248323afa3f (diff)
downloadqcacld-ebc31619ce67d63385b09df432845ed17b8e7766.tar.gz
qcacld-3.0: Add support for WMI over QMI
Add support for WMI over QMI to reduce power consumption for periodic stats report. Change-Id: Iec725b357d9bcfa33029aedf7c568814499bc130 CRs-fixed: 2521826
Diffstat (limited to 'core')
-rw-r--r--core/cds/src/cds_api.c19
-rw-r--r--core/hdd/src/wlan_hdd_stats.c17
2 files changed, 30 insertions, 6 deletions
diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c
index eba06d2936..6e6aba831b 100644
--- a/core/cds/src/cds_api.c
+++ b/core/cds/src/cds_api.c
@@ -194,6 +194,23 @@ static bool cds_is_drv_connected(void)
return ((ret > 0) ? true : false);
}
+static QDF_STATUS cds_wmi_send_recv_qmi(void *buf, uint32_t len, void * cb_ctx,
+ qdf_wmi_recv_qmi_cb wmi_rx_cb)
+{
+ qdf_device_t qdf_ctx;
+
+ qdf_ctx = cds_get_context(QDF_MODULE_ID_QDF_DEVICE);
+ if (!qdf_ctx) {
+ cds_err("cds context is invalid");
+ return false;
+ }
+
+ if (pld_qmi_send(qdf_ctx->dev, 0, buf, len, cb_ctx, wmi_rx_cb))
+ return QDF_STATUS_E_INVAL;
+
+ return QDF_STATUS_SUCCESS;
+}
+
QDF_STATUS cds_init(void)
{
QDF_STATUS status;
@@ -214,6 +231,7 @@ QDF_STATUS cds_init(void)
qdf_register_fw_down_callback(cds_is_fw_down);
qdf_register_recovering_state_query_callback(cds_is_driver_recovering);
qdf_register_drv_connected_callback(cds_is_drv_connected);
+ qdf_register_wmi_send_recv_qmi_callback(cds_wmi_send_recv_qmi);
return QDF_STATUS_SUCCESS;
@@ -238,6 +256,7 @@ void cds_deinit(void)
qdf_register_recovering_state_query_callback(NULL);
qdf_register_fw_down_callback(NULL);
qdf_register_self_recovery_callback(NULL);
+ qdf_register_wmi_send_recv_qmi_callback(NULL);
gp_cds_context->qdf_ctx = NULL;
qdf_mem_zero(&g_qdf_ctx, sizeof(g_qdf_ctx));
diff --git a/core/hdd/src/wlan_hdd_stats.c b/core/hdd/src/wlan_hdd_stats.c
index 1dc9a467a8..5d0ea2874f 100644
--- a/core/hdd/src/wlan_hdd_stats.c
+++ b/core/hdd/src/wlan_hdd_stats.c
@@ -1545,13 +1545,21 @@ int wlan_hdd_cfg80211_ll_stats_get(struct wiphy *wiphy,
{
struct osif_vdev_sync *vdev_sync;
int errno;
+ qdf_device_t qdf_ctx = cds_get_context(QDF_MODULE_ID_QDF_DEVICE);
errno = osif_vdev_sync_op_start(wdev->netdev, &vdev_sync);
if (errno)
return errno;
+ errno = pld_qmi_send_get(qdf_ctx->dev);
+ if (errno)
+ goto end;
+
errno = __wlan_hdd_cfg80211_ll_stats_get(wiphy, wdev, data, data_len);
+ pld_qmi_send_put(qdf_ctx->dev);
+
+end:
osif_vdev_sync_op_stop(vdev_sync);
return errno;
@@ -4655,23 +4663,20 @@ static int _wlan_hdd_cfg80211_get_station(struct wiphy *wiphy,
struct station_info *sinfo)
{
struct hdd_context *hdd_ctx = wiphy_priv(wiphy);
- void *hif_ctx = cds_get_context(QDF_MODULE_ID_HIF);
+ qdf_device_t qdf_ctx = cds_get_context(QDF_MODULE_ID_QDF_DEVICE);
int errno;
errno = wlan_hdd_validate_context(hdd_ctx);
if (errno)
return errno;
- errno = hif_pm_runtime_get_sync(hif_ctx);
+ errno = pld_qmi_send_get(qdf_ctx->dev);
if (errno)
return errno;
errno = __wlan_hdd_cfg80211_get_station(wiphy, dev, mac, sinfo);
- if (wlan_hdd_rx_rpm_mark_last_busy(hdd_ctx, hif_ctx))
- hif_pm_runtime_put(hif_ctx);
- else
- hif_pm_runtime_put_sync_suspend(hif_ctx);
+ pld_qmi_send_put(qdf_ctx->dev);
return errno;
}