qcacld-3.0: Add new BT Coex roam trigger reason
Send additional roam trigger TLV for BTC in WMI_ROAM_ENABLE_DISABLE_TRIGGER_REASON_CMDID command, to support a new roaming trigger "WMI_ROAM_TRIGGER_REASON_BTC". Change-Id: Ib767bd6bcf005c187b0fb58986ad287fe8753c1b CRs-Fixed: 3009788
This commit is contained in:
@@ -3958,6 +3958,8 @@ char *mlme_get_roam_trigger_str(uint32_t roam_scan_trigger)
|
||||
return "NONE";
|
||||
case WMI_ROAM_TRIGGER_REASON_PMK_TIMEOUT:
|
||||
return "PMK Expired";
|
||||
case WMI_ROAM_TRIGGER_REASON_BTC:
|
||||
return "BTC TRIGGER";
|
||||
default:
|
||||
return "UNKNOWN";
|
||||
}
|
||||
|
@@ -345,8 +345,6 @@ target_if_cm_roam_idle_params(wmi_unified_t wmi_handle, uint8_t command,
|
||||
switch (command) {
|
||||
case ROAM_SCAN_OFFLOAD_START:
|
||||
case ROAM_SCAN_OFFLOAD_UPDATE_CFG:
|
||||
if (!req->enable)
|
||||
return;
|
||||
break;
|
||||
case ROAM_SCAN_OFFLOAD_STOP:
|
||||
req->enable = false;
|
||||
|
@@ -40,6 +40,7 @@
|
||||
#include "connection_mgr/core/src/wlan_cm_roam.h"
|
||||
#include "connection_mgr/core/src/wlan_cm_main.h"
|
||||
#include "connection_mgr/core/src/wlan_cm_sm.h"
|
||||
#include "wlan_reg_ucfg_api.h"
|
||||
|
||||
#ifdef WLAN_FEATURE_SAE
|
||||
#define CM_IS_FW_FT_SAE_SUPPORTED(fw_akm_bitmap) \
|
||||
@@ -162,6 +163,53 @@ cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
params->enable_roam_reason_vsie = enable_roam_reason_vsie;
|
||||
}
|
||||
|
||||
/**
|
||||
* cm_is_only_2g_band_supported() - Check if BTC trigger and IDLE trigger needs
|
||||
* to be disabled based on the current connected band.
|
||||
* @psoc: Pointer to the psoc object
|
||||
* @vdev_id: Vdev id
|
||||
*
|
||||
* Return: true if BTC trigger and IDLE trigger are allowed or not
|
||||
*/
|
||||
static bool
|
||||
cm_is_only_2g_band_supported(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_objmgr_pdev *pdev;
|
||||
bool only_2g_band_supported = false;
|
||||
uint32_t band_bitmap;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
|
||||
WLAN_MLME_CM_ID);
|
||||
if (!vdev) {
|
||||
mlme_err("Vdev is null for vdev_id:%d", vdev_id);
|
||||
return false;
|
||||
}
|
||||
|
||||
pdev = wlan_vdev_get_pdev(vdev);
|
||||
if (!pdev) {
|
||||
mlme_err("pdev is null for vdev_id:%d", vdev_id);
|
||||
goto release;
|
||||
}
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(ucfg_reg_get_band(pdev, &band_bitmap))) {
|
||||
mlme_debug("Failed to get band");
|
||||
goto release;
|
||||
}
|
||||
|
||||
mlme_debug("Current band bitmap:%d", band_bitmap);
|
||||
|
||||
if (band_bitmap & BIT(REG_BAND_2G) &&
|
||||
!(band_bitmap & BIT(REG_BAND_5G)) &&
|
||||
!(band_bitmap & BIT(REG_BAND_6G)))
|
||||
only_2g_band_supported = true;
|
||||
|
||||
|
||||
release:
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);
|
||||
return only_2g_band_supported;
|
||||
}
|
||||
|
||||
/**
|
||||
* cm_roam_triggers() - set roam triggers
|
||||
* @psoc: psoc pointer
|
||||
@@ -191,6 +239,17 @@ cm_roam_triggers(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
if (!is_per_roam_enabled)
|
||||
params->trigger_bitmap &= ~BIT(ROAM_TRIGGER_REASON_PER);
|
||||
|
||||
/*
|
||||
* Enable BTC trigger and IDLE trigger only when DUT is dual band
|
||||
* capable(2g + 5g/6g)
|
||||
*/
|
||||
if (cm_is_only_2g_band_supported(psoc, vdev_id)) {
|
||||
params->trigger_bitmap &= ~BIT(ROAM_TRIGGER_REASON_IDLE);
|
||||
params->trigger_bitmap &= ~BIT(ROAM_TRIGGER_REASON_BTC);
|
||||
}
|
||||
|
||||
mlme_debug("[ROAM_TRIGGER] trigger_bitmap:%d", params->trigger_bitmap);
|
||||
|
||||
params->roam_scan_scheme_bitmap =
|
||||
wlan_cm_get_roam_scan_scheme_bitmap(psoc, vdev_id);
|
||||
wlan_cm_roam_get_vendor_btm_params(psoc, ¶ms->vendor_btm_param);
|
||||
@@ -2491,6 +2550,10 @@ cm_roam_start_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
cm_roam_bss_load_config(psoc, vdev_id, &start_req->bss_load_config);
|
||||
cm_roam_disconnect_params(psoc, vdev_id, &start_req->disconnect_params);
|
||||
cm_roam_idle_params(psoc, vdev_id, &start_req->idle_params);
|
||||
if (!(BIT(ROAM_TRIGGER_REASON_IDLE) &
|
||||
start_req->roam_triggers.trigger_bitmap))
|
||||
start_req->idle_params.enable = false;
|
||||
|
||||
cm_roam_scan_offload_rssi_thresh(psoc, vdev_id,
|
||||
&start_req->rssi_params, rso_cfg);
|
||||
cm_roam_scan_offload_scan_period(vdev_id,
|
||||
@@ -2568,10 +2631,13 @@ cm_roam_update_config_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
if (MLME_IS_ROAM_STATE_RSO_ENABLED(psoc, vdev_id)) {
|
||||
cm_roam_disconnect_params(psoc, vdev_id,
|
||||
&update_req->disconnect_params);
|
||||
cm_roam_idle_params(psoc, vdev_id,
|
||||
&update_req->idle_params);
|
||||
cm_roam_triggers(psoc, vdev_id,
|
||||
&update_req->roam_triggers);
|
||||
cm_roam_idle_params(psoc, vdev_id,
|
||||
&update_req->idle_params);
|
||||
if (!(BIT(ROAM_TRIGGER_REASON_IDLE) &
|
||||
update_req->roam_triggers.trigger_bitmap))
|
||||
update_req->idle_params.enable = false;
|
||||
}
|
||||
cm_roam_scan_offload_rssi_thresh(psoc, vdev_id,
|
||||
&update_req->rssi_params, rso_cfg);
|
||||
|
@@ -823,6 +823,8 @@ convert_roam_trigger_reason(enum roam_trigger_reason trigger_reason)
|
||||
return WMI_ROAM_TRIGGER_REASON_WTC_BTM;
|
||||
case ROAM_TRIGGER_REASON_PMK_TIMEOUT:
|
||||
return WMI_ROAM_TRIGGER_REASON_PMK_TIMEOUT;
|
||||
case ROAM_TRIGGER_REASON_BTC:
|
||||
return WMI_ROAM_TRIGGER_REASON_BTC;
|
||||
case ROAM_TRIGGER_REASON_MAX:
|
||||
return WMI_ROAM_TRIGGER_REASON_MAX;
|
||||
default:
|
||||
@@ -1312,6 +1314,9 @@ static QDF_STATUS send_set_roam_trigger_cmd_tlv(wmi_unified_t wmi_handle,
|
||||
if (BIT(ROAM_TRIGGER_REASON_PER) & roam_scan_scheme_bitmap)
|
||||
num_triggers_enabled++;
|
||||
|
||||
if (BIT(ROAM_TRIGGER_REASON_BTC) & roam_scan_scheme_bitmap)
|
||||
num_triggers_enabled++;
|
||||
|
||||
if (BIT(ROAM_TRIGGER_REASON_BMISS) & roam_scan_scheme_bitmap)
|
||||
num_triggers_enabled++;
|
||||
|
||||
@@ -1395,6 +1400,12 @@ static QDF_STATUS send_set_roam_trigger_cmd_tlv(wmi_unified_t wmi_handle,
|
||||
wmi_fill_score_delta_params(roam_trigger_parameters,
|
||||
triggers,
|
||||
IDLE_ROAM_TRIGGER);
|
||||
if (cmd->trigger_reason_bitmask &
|
||||
BIT(WMI_ROAM_TRIGGER_REASON_IDLE))
|
||||
roam_trigger_parameters->enable = 1;
|
||||
else
|
||||
roam_trigger_parameters->enable = 0;
|
||||
|
||||
roam_trigger_parameters++;
|
||||
|
||||
wmi_fill_score_delta_params(roam_trigger_parameters,
|
||||
@@ -1444,6 +1455,16 @@ static QDF_STATUS send_set_roam_trigger_cmd_tlv(wmi_unified_t wmi_handle,
|
||||
roam_trigger_parameters++;
|
||||
}
|
||||
|
||||
if (BIT(ROAM_TRIGGER_REASON_BTC) & roam_scan_scheme_bitmap) {
|
||||
wmi_fill_default_roam_trigger_parameters(
|
||||
roam_trigger_parameters,
|
||||
WMI_ROAM_TRIGGER_REASON_BTC);
|
||||
roam_trigger_parameters->scan_mode =
|
||||
ROAM_TRIGGER_SCAN_MODE_PARTIAL;
|
||||
|
||||
roam_trigger_parameters++;
|
||||
}
|
||||
|
||||
if (BIT(ROAM_TRIGGER_REASON_BMISS) & roam_scan_scheme_bitmap) {
|
||||
wmi_fill_default_roam_trigger_parameters(
|
||||
roam_trigger_parameters,
|
||||
|
@@ -1594,6 +1594,7 @@ wma_get_trigger_detail_str(struct wmi_roam_trigger_info *roam_info, char *buf)
|
||||
case WMI_ROAM_TRIGGER_REASON_IDLE:
|
||||
case WMI_ROAM_TRIGGER_REASON_FORCED:
|
||||
case WMI_ROAM_TRIGGER_REASON_UNIT_TEST:
|
||||
case WMI_ROAM_TRIGGER_REASON_BTC:
|
||||
return;
|
||||
case WMI_ROAM_TRIGGER_REASON_BTM:
|
||||
buf_cons = qdf_snprint(temp, buf_left,
|
||||
|
Reference in New Issue
Block a user