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:
abhinav kumar
2021-08-09 16:51:17 +05:30
committed by Madan Koyyalamudi
부모 939ba8556a
커밋 3173789d99
5개의 변경된 파일92개의 추가작업 그리고 4개의 파일을 삭제

파일 보기

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