From 70ebc4e9ff9f5b4aefef884e9495ecf15df8aef0 Mon Sep 17 00:00:00 2001 From: wadesong Date: Thu, 12 Sep 2019 18:04:40 +0800 Subject: [PATCH] qcacld-3.0: Add db2dbm conversion check When WMI_IFACE_LINK_STATS_EVENTID is received, WMA layer should check FW service bit to confirm if HW db2dbm conversion is enabled or not, or the final results indicated to HDD layer will be inaccurate. Add FW service bit checking to make sure db2dbm conversion is done by driver when HW doesn't support it. Change-Id: Id369999e4d5a6805200de82d1e8caf3121582c40 CRs-Fixed: 2506620 --- core/hdd/src/wlan_hdd_debugfs_llstat.c | 2 +- core/wma/src/wma_utils.c | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/core/hdd/src/wlan_hdd_debugfs_llstat.c b/core/hdd/src/wlan_hdd_debugfs_llstat.c index e4ab8708f231..7f6d50475a54 100644 --- a/core/hdd/src/wlan_hdd_debugfs_llstat.c +++ b/core/hdd/src/wlan_hdd_debugfs_llstat.c @@ -91,7 +91,7 @@ void hdd_debugfs_process_iface_stats(struct hdd_adapter *adapter, buffer += len; ll_stats.len += len; len = scnprintf(buffer, DEBUGFS_LLSTATS_BUF_SIZE - ll_stats.len, - "\nbeacon_rx: %u, mgmt_rx: %u, mgmt_action_rx: %u, mgmt_action_tx: %u, rssi_mgmt: %u, rssi_data: %u, rssi_ack: %u, is_leaky_ap: %u, avg_rx_frms_leaked: %u, rx_leak_window: %u, average_tsf_offset: %llu, Tx RTS success count: %u, Tx RTS fail count: %u, Tx ppdu success count: %u, Tx ppdu fail count: %u, Connected duration: %u, Disconnected duration: %u, RTT ranging duration: %u, RTT responder duration: %u, Num tx probes: %u, Num beacon miss: %u,\n\nNumber of AC: %d", + "\nbeacon_rx: %u, mgmt_rx: %u, mgmt_action_rx: %u, mgmt_action_tx: %u, rssi_mgmt: %d, rssi_data: %d, rssi_ack: %d, is_leaky_ap: %u, avg_rx_frms_leaked: %u, rx_leak_window: %u, average_tsf_offset: %llu, Tx RTS success count: %u, Tx RTS fail count: %u, Tx ppdu success count: %u, Tx ppdu fail count: %u, Connected duration: %u, Disconnected duration: %u, RTT ranging duration: %u, RTT responder duration: %u, Num tx probes: %u, Num beacon miss: %u,\n\nNumber of AC: %d", link_stats->beacon_rx, link_stats->mgmt_rx, link_stats->mgmt_action_rx, link_stats->mgmt_action_tx, link_stats->rssi_mgmt, link_stats->rssi_data, diff --git a/core/wma/src/wma_utils.c b/core/wma/src/wma_utils.c index ccb37b207bd9..1dd4c8ea9d26 100644 --- a/core/wma/src/wma_utils.c +++ b/core/wma/src/wma_utils.c @@ -2097,6 +2097,7 @@ int wma_unified_link_iface_stats_event_handler(void *handle, uint8_t *cmd_param_info, uint32_t len) { + tp_wma_handle wma_handle = (tp_wma_handle)handle; WMI_IFACE_LINK_STATS_EVENTID_param_tlvs *param_tlvs; wmi_iface_link_stats_event_fixed_param *fixed_param; wmi_iface_link_stats *link_stats, *iface_link_stats; @@ -2108,6 +2109,7 @@ int wma_unified_link_iface_stats_event_handler(void *handle, size_t link_stats_size, ac_stats_size, iface_info_size; size_t link_stats_results_size, offload_stats_size; size_t total_ac_size, total_offload_size; + bool db2dbm_enabled; struct mac_context *mac = cds_get_context(QDF_MODULE_ID_PE); @@ -2200,6 +2202,17 @@ int wma_unified_link_iface_stats_event_handler(void *handle, iface_link_stats = &iface_stat->link_stats; *iface_link_stats = *link_stats; + db2dbm_enabled = wmi_service_enabled(wma_handle->wmi_handle, + wmi_service_hw_db2dbm_support); + if (!db2dbm_enabled) { + /* FW doesn't indicate support for HW db2dbm conversion */ + iface_link_stats->rssi_mgmt += WMA_TGT_NOISE_FLOOR_DBM; + iface_link_stats->rssi_data += WMA_TGT_NOISE_FLOOR_DBM; + iface_link_stats->rssi_ack += WMA_TGT_NOISE_FLOOR_DBM; + } + WMA_LOGD("db2dbm: %d, rssi_mgmt: %d, rssi_data: %d, rssi_ack: %d", + db2dbm_enabled, iface_link_stats->rssi_mgmt, + iface_link_stats->rssi_data, iface_link_stats->rssi_ack); /* Copy roaming state */ iface_stat->info.roaming = link_stats->roam_state;