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
This commit is contained in:
wadesong 2019-09-12 18:04:40 +08:00 committed by nshrivas
parent 1d48051e26
commit 70ebc4e9ff
2 changed files with 14 additions and 1 deletions

View File

@ -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,

View File

@ -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;