From abcbed0edfa7d0ffa9e6a3632752b048e3cd2ba6 Mon Sep 17 00:00:00 2001 From: Amruta Kulkarni Date: Mon, 8 Mar 2021 15:38:41 -0800 Subject: [PATCH] qcacld-3.0: Send roam score delta and min rssi params When "wmi_service_configure_roam_trigger_param_support" service bit is set populate roam score delta and min rssi parameters and send via WMI_ROAM_ENABLE_DISABLE_TRIGGER_REASON_CMDID. Change-Id: I3c7fc56a95c28c43992763be3351d91d9fd44041 CRs-Fixed: 2890148 --- .../core/src/wlan_cm_roam_offload.c | 2 + .../dispatcher/inc/wlan_cm_roam_api.h | 33 ++ .../inc/wlan_cm_roam_public_struct.h | 70 ++-- .../dispatcher/src/wlan_cm_roam_api.c | 34 ++ components/wmi/src/wmi_unified_roam_tlv.c | 332 +++++++++++------- 5 files changed, 316 insertions(+), 155 deletions(-) diff --git a/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c b/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c index 271784a961a9..a692d4c26f63 100644 --- a/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c +++ b/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c @@ -120,6 +120,8 @@ cm_roam_triggers(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, wlan_cm_get_roam_scan_scheme_bitmap(psoc, vdev_id); wlan_cm_roam_get_vendor_btm_params(psoc, vdev_id, ¶ms->vendor_btm_param); + wlan_cm_roam_get_score_delta_params(psoc, params); + wlan_cm_roam_get_min_rssi_params(psoc, params); } /** diff --git a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_api.h b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_api.h index 02c885048d05..8f8c84178849 100644 --- a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_api.h +++ b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_api.h @@ -517,6 +517,28 @@ wlan_cm_roam_get_vendor_btm_params(struct wlan_objmgr_psoc *psoc, struct wlan_cm_roam_vendor_btm_params *param); +/** + * wlan_cm_roam_get_score_delta_params() - API to get roam score delta param + * @psoc: PSOC pointer + * @params: roam trigger param + * + * Return: none + */ +void +wlan_cm_roam_get_score_delta_params(struct wlan_objmgr_psoc *psoc, + struct wlan_roam_triggers *params); + +/** + * wlan_cm_roam_get_min_rssi_params() - API to get roam trigger min rssi param + * @psoc: PSOC pointer + * @params: roam trigger param + * + * Return: none + */ +void +wlan_cm_roam_get_min_rssi_params(struct wlan_objmgr_psoc *psoc, + struct wlan_roam_triggers *params); + /** * wlan_cm_update_roam_scan_scheme_bitmap() - Set roam scan scheme bitmap for * each vdev @@ -606,6 +628,17 @@ wlan_cm_roam_get_vendor_btm_params(struct wlan_objmgr_psoc *psoc, struct wlan_cm_roam_vendor_btm_params *param) {} +static inline void +wlan_cm_roam_get_score_delta_params(struct wlan_objmgr_psoc *psoc, + uint8_t vdev_id, + struct roam_trigger_score_delta *param) +{} + +static inline void +wlan_cm_roam_get_min_rssi_params(struct wlan_objmgr_psoc *psoc, + struct wlan_roam_triggers *params) +{} + static inline QDF_STATUS wlan_cm_update_roam_scan_scheme_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, diff --git a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h index da506f216c39..40e325e60d07 100644 --- a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h +++ b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h @@ -97,6 +97,19 @@ #define DEFAULT_ROAM_SCAN_SCHEME_BITMAP 0 #define ROAM_MAX_CFG_VALUE 0xffffffff +/* + * Currently roam score delta value is sent for 2 triggers and min rssi + * values are sent for 3 triggers + */ +#define NUM_OF_ROAM_TRIGGERS 2 +#define IDLE_ROAM_TRIGGER 0 +#define BTM_ROAM_TRIGGER 1 + +#define NUM_OF_ROAM_MIN_RSSI 3 +#define DEAUTH_MIN_RSSI 0 +#define BMISS_MIN_RSSI 1 +#define MIN_RSSI_2G_TO_5G_ROAM 2 + /** * enum roam_cfg_param - Type values for roaming parameters used as index * for get/set of roaming config values(pNeighborRoamInfo in legacy) @@ -157,26 +170,6 @@ struct wlan_cm_roam_vendor_btm_params { uint32_t user_roam_reason; }; -/** - * struct wlan_roam_triggers - vendor configured roam triggers - * @vdev_id: vdev id - * @trigger_bitmap: vendor configured roam trigger bitmap as - * defined @enum roam_control_trigger_reason - * @roam_score_delta: Value of roam score delta - * percentage to trigger roam - * @roam_scan_scheme_bitmap: Bitmap of roam triggers as defined in - * enum roam_trigger_reason, for which the roam scan scheme should - * be partial scan - * @control_param: roam trigger param - */ -struct wlan_roam_triggers { - uint32_t vdev_id; - uint32_t trigger_bitmap; - uint32_t roam_score_delta; - uint32_t roam_scan_scheme_bitmap; - struct wlan_cm_roam_vendor_btm_params vendor_btm_param; -}; - /** * struct ap_profile - Structure ap profile to match candidate * @flags: flags @@ -281,19 +274,6 @@ struct scoring_param { struct per_slot_score oce_wan_scoring; }; -/* - * Currently roam score delta value is sent for 2 triggers and min rssi values - * are sent for 3 triggers - */ -#define NUM_OF_ROAM_TRIGGERS 2 -#define IDLE_ROAM_TRIGGER 0 -#define BTM_ROAM_TRIGGER 1 - -#define NUM_OF_ROAM_MIN_RSSI 3 -#define DEAUTH_MIN_RSSI 0 -#define BMISS_MIN_RSSI 1 -#define MIN_RSSI_2G_TO_5G_ROAM 2 - /** * enum roam_trigger_reason - Reason for triggering roam * ROAM_TRIGGER_REASON_NONE: Roam trigger reason none @@ -373,6 +353,30 @@ struct roam_trigger_score_delta { enum roam_trigger_reason trigger_reason; }; +/** + * struct wlan_roam_triggers - vendor configured roam triggers + * @vdev_id: vdev id + * @trigger_bitmap: vendor configured roam trigger bitmap as + * defined @enum roam_control_trigger_reason + * @roam_score_delta: Value of roam score delta + * percentage to trigger roam + * @roam_scan_scheme_bitmap: Bitmap of roam triggers as defined in + * enum roam_trigger_reason, for which the roam scan scheme should + * be partial scan + * @control_param: roam trigger param + * @min_rssi_params: Min RSSI values for different roam triggers + * @score_delta_params: Roam score delta values for different triggers + */ +struct wlan_roam_triggers { + uint32_t vdev_id; + uint32_t trigger_bitmap; + uint32_t roam_score_delta; + uint32_t roam_scan_scheme_bitmap; + struct wlan_cm_roam_vendor_btm_params vendor_btm_param; + struct roam_trigger_min_rssi min_rssi_params[NUM_OF_ROAM_MIN_RSSI]; + struct roam_trigger_score_delta score_delta_param[NUM_OF_ROAM_TRIGGERS]; +}; + /** * struct ap_profile_params - ap profile params * @vdev_id: vdev id diff --git a/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c b/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c index 3abbbe7dd8aa..22df8858a36e 100644 --- a/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c +++ b/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c @@ -474,6 +474,40 @@ wlan_cm_roam_get_vendor_btm_params(struct wlan_objmgr_psoc *psoc, wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); } + +void +wlan_cm_roam_get_score_delta_params(struct wlan_objmgr_psoc *psoc, + struct wlan_roam_triggers *params) +{ + struct wlan_mlme_psoc_ext_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_ext_obj(psoc); + if (!mlme_obj) + return; + + params->score_delta_param[IDLE_ROAM_TRIGGER] = + mlme_obj->cfg.trig_score_delta[IDLE_ROAM_TRIGGER]; + params->score_delta_param[BTM_ROAM_TRIGGER] = + mlme_obj->cfg.trig_score_delta[BTM_ROAM_TRIGGER]; +} + +void +wlan_cm_roam_get_min_rssi_params(struct wlan_objmgr_psoc *psoc, + struct wlan_roam_triggers *params) +{ + struct wlan_mlme_psoc_ext_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_ext_obj(psoc); + if (!mlme_obj) + return; + + params->min_rssi_params[DEAUTH_MIN_RSSI] = + mlme_obj->cfg.trig_min_rssi[DEAUTH_MIN_RSSI]; + params->min_rssi_params[BMISS_MIN_RSSI] = + mlme_obj->cfg.trig_min_rssi[BMISS_MIN_RSSI]; + params->min_rssi_params[MIN_RSSI_2G_TO_5G_ROAM] = + mlme_obj->cfg.trig_min_rssi[MIN_RSSI_2G_TO_5G_ROAM]; +} #endif QDF_STATUS wlan_cm_roam_cfg_get_value(struct wlan_objmgr_psoc *psoc, diff --git a/components/wmi/src/wmi_unified_roam_tlv.c b/components/wmi/src/wmi_unified_roam_tlv.c index 46ebc0d14adb..141bbbf783c6 100644 --- a/components/wmi/src/wmi_unified_roam_tlv.c +++ b/components/wmi/src/wmi_unified_roam_tlv.c @@ -767,6 +767,63 @@ void wmi_ese_attach_tlv(wmi_unified_t wmi_handle) } #endif /* FEATURE_WLAN_ESE */ +/** + * convert_roam_trigger_reason() - Function to convert unified Roam trigger + * enum to TLV specific WMI_ROAM_TRIGGER_REASON_ID + * @reason: Roam trigger reason + * + * Return: WMI roam trigger reason + */ +static uint32_t +convert_roam_trigger_reason(enum roam_trigger_reason trigger_reason) +{ + switch (trigger_reason) { + case ROAM_TRIGGER_REASON_NONE: + return WMI_ROAM_TRIGGER_REASON_NONE; + case ROAM_TRIGGER_REASON_PER: + return WMI_ROAM_TRIGGER_REASON_PER; + case ROAM_TRIGGER_REASON_BMISS: + return WMI_ROAM_TRIGGER_REASON_BMISS; + case ROAM_TRIGGER_REASON_LOW_RSSI: + return WMI_ROAM_TRIGGER_REASON_LOW_RSSI; + case ROAM_TRIGGER_REASON_HIGH_RSSI: + return WMI_ROAM_TRIGGER_REASON_HIGH_RSSI; + case ROAM_TRIGGER_REASON_PERIODIC: + return WMI_ROAM_TRIGGER_REASON_PERIODIC; + case ROAM_TRIGGER_REASON_MAWC: + return WMI_ROAM_TRIGGER_REASON_MAWC; + case ROAM_TRIGGER_REASON_DENSE: + return WMI_ROAM_TRIGGER_REASON_DENSE; + case ROAM_TRIGGER_REASON_BACKGROUND: + return WMI_ROAM_TRIGGER_REASON_BACKGROUND; + case ROAM_TRIGGER_REASON_FORCED: + return WMI_ROAM_TRIGGER_REASON_FORCED; + case ROAM_TRIGGER_REASON_BTM: + return WMI_ROAM_TRIGGER_REASON_BTM; + case ROAM_TRIGGER_REASON_UNIT_TEST: + return WMI_ROAM_TRIGGER_REASON_UNIT_TEST; + case ROAM_TRIGGER_REASON_BSS_LOAD: + return WMI_ROAM_TRIGGER_REASON_BSS_LOAD; + case ROAM_TRIGGER_REASON_DEAUTH: + return WMI_ROAM_TRIGGER_REASON_DEAUTH; + case ROAM_TRIGGER_REASON_IDLE: + return WMI_ROAM_TRIGGER_REASON_IDLE; + case ROAM_TRIGGER_REASON_STA_KICKOUT: + return WMI_ROAM_TRIGGER_REASON_STA_KICKOUT; + case ROAM_TRIGGER_REASON_ESS_RSSI: + return WMI_ROAM_TRIGGER_REASON_ESS_RSSI; + case ROAM_TRIGGER_REASON_WTC_BTM: + return WMI_ROAM_TRIGGER_REASON_WTC_BTM; + case ROAM_TRIGGER_REASON_PMK_TIMEOUT: + return WMI_ROAM_TRIGGER_REASON_PMK_TIMEOUT; + case ROAM_TRIGGER_REASON_MAX: + return WMI_ROAM_TRIGGER_REASON_MAX; + default: + return WMI_ROAM_TRIGGER_REASON_NONE; + } +} + + #ifdef WLAN_FEATURE_ROAM_OFFLOAD /* send_set_ric_req_cmd_tlv() - set ric request element * @wmi_handle: wmi handle @@ -1164,6 +1221,53 @@ static void wmi_fill_default_roam_trigger_parameters( roam_trigger_params->reason_code = ROAM_MAX_CFG_VALUE; } +static void wmi_fill_score_delta_params( + wmi_configure_roam_trigger_parameters *roam_trigger_params, + struct wlan_roam_triggers *triggers, + uint8_t trig_index) +{ + enum roam_trigger_reason trig_reason; + + if (trig_index >= NUM_OF_ROAM_TRIGGERS) + return; + + trig_reason = + triggers->score_delta_param[trig_index].trigger_reason; + wmi_fill_default_roam_trigger_parameters( + roam_trigger_params, + convert_roam_trigger_reason(trig_reason)); + roam_trigger_params->roam_score_delta_percentage = + triggers->score_delta_param[trig_index].roam_score_delta; + + wmi_debug("RSO_CFG: Score delta per: %d converted trig_reason: %d", + roam_trigger_params->roam_score_delta_percentage, + convert_roam_trigger_reason(trig_reason)); + +} + +static void wmi_fill_min_rssi_params( + wmi_configure_roam_trigger_parameters *roam_trigger_params, + struct wlan_roam_triggers *triggers, + uint8_t trig_index) +{ + enum roam_trigger_reason trig_reason; + + if (trig_index >= NUM_OF_ROAM_MIN_RSSI) + return; + + trig_reason = + triggers->min_rssi_params[trig_index].trigger_reason; + wmi_fill_default_roam_trigger_parameters( + roam_trigger_params, + convert_roam_trigger_reason(trig_reason)); + roam_trigger_params->cand_ap_min_rssi_threshold = + triggers->min_rssi_params[trig_index].min_rssi; + + wmi_debug("RSO_CFG: Min rssi thresh: %d converted trig_reason: %d", + roam_trigger_params->cand_ap_min_rssi_threshold, + convert_roam_trigger_reason(trig_reason)); +} + /** * send_set_roam_trigger_cmd_tlv() - send set roam triggers to fw * @wmi_handle: wmi handle @@ -1186,7 +1290,7 @@ static QDF_STATUS send_set_roam_trigger_cmd_tlv(wmi_unified_t wmi_handle, *roam_trigger_parameters; uint32_t num_triggers_enabled = 0; uint32_t roam_scan_scheme_bitmap = triggers->roam_scan_scheme_bitmap; - uint32_t total_tlv_len; + uint32_t total_tlv_len = 0; if (BIT(ROAM_TRIGGER_REASON_PER) & roam_scan_scheme_bitmap) num_triggers_enabled++; @@ -1203,7 +1307,12 @@ static QDF_STATUS send_set_roam_trigger_cmd_tlv(wmi_unified_t wmi_handle, if (BIT(ROAM_TRIGGER_REASON_BSS_LOAD) & roam_scan_scheme_bitmap) num_triggers_enabled++; - total_tlv_len = 2 * sizeof(wmi_configure_roam_trigger_parameters) + + if (wmi_service_enabled(wmi_handle, + wmi_service_configure_roam_trigger_param_support)) + total_tlv_len += (NUM_OF_ROAM_TRIGGERS + NUM_OF_ROAM_MIN_RSSI) * + sizeof(wmi_configure_roam_trigger_parameters); + + total_tlv_len += 2 * sizeof(wmi_configure_roam_trigger_parameters) + num_triggers_enabled * sizeof(wmi_configure_roam_trigger_parameters); len += WMI_TLV_HDR_SIZE + total_tlv_len; @@ -1259,6 +1368,34 @@ static QDF_STATUS send_set_roam_trigger_cmd_tlv(wmi_unified_t wmi_handle, triggers->vendor_btm_param.user_roam_reason; roam_trigger_parameters++; + if (wmi_service_enabled(wmi_handle, + wmi_service_configure_roam_trigger_param_support)) { + wmi_fill_score_delta_params(roam_trigger_parameters, + triggers, + IDLE_ROAM_TRIGGER); + roam_trigger_parameters++; + + wmi_fill_score_delta_params(roam_trigger_parameters, + triggers, + BTM_ROAM_TRIGGER); + roam_trigger_parameters++; + + wmi_fill_min_rssi_params(roam_trigger_parameters, + triggers, + DEAUTH_MIN_RSSI); + roam_trigger_parameters++; + + wmi_fill_min_rssi_params(roam_trigger_parameters, + triggers, + BMISS_MIN_RSSI); + roam_trigger_parameters++; + + wmi_fill_min_rssi_params(roam_trigger_parameters, + triggers, + MIN_RSSI_2G_TO_5G_ROAM); + roam_trigger_parameters++; + } + wmi_fill_default_roam_trigger_parameters( roam_trigger_parameters, WMI_ROAM_TRIGGER_REASON_PMK_TIMEOUT); @@ -2291,62 +2428,6 @@ send_roam_scan_mode_cmd: return status; } -/** - * convert_roam_trigger_reason() - Function to convert unified Roam trigger - * enum to TLV specific WMI_ROAM_TRIGGER_REASON_ID - * @reason: Roam trigger reason - * - * Return: WMI roam trigger reason - */ -static uint32_t -convert_roam_trigger_reason(enum roam_trigger_reason trigger_reason) -{ - switch (trigger_reason) { - case ROAM_TRIGGER_REASON_NONE: - return WMI_ROAM_TRIGGER_REASON_NONE; - case ROAM_TRIGGER_REASON_PER: - return WMI_ROAM_TRIGGER_REASON_PER; - case ROAM_TRIGGER_REASON_BMISS: - return WMI_ROAM_TRIGGER_REASON_BMISS; - case ROAM_TRIGGER_REASON_LOW_RSSI: - return WMI_ROAM_TRIGGER_REASON_LOW_RSSI; - case ROAM_TRIGGER_REASON_HIGH_RSSI: - return WMI_ROAM_TRIGGER_REASON_HIGH_RSSI; - case ROAM_TRIGGER_REASON_PERIODIC: - return WMI_ROAM_TRIGGER_REASON_PERIODIC; - case ROAM_TRIGGER_REASON_MAWC: - return WMI_ROAM_TRIGGER_REASON_MAWC; - case ROAM_TRIGGER_REASON_DENSE: - return WMI_ROAM_TRIGGER_REASON_DENSE; - case ROAM_TRIGGER_REASON_BACKGROUND: - return WMI_ROAM_TRIGGER_REASON_BACKGROUND; - case ROAM_TRIGGER_REASON_FORCED: - return WMI_ROAM_TRIGGER_REASON_FORCED; - case ROAM_TRIGGER_REASON_BTM: - return WMI_ROAM_TRIGGER_REASON_BTM; - case ROAM_TRIGGER_REASON_UNIT_TEST: - return WMI_ROAM_TRIGGER_REASON_UNIT_TEST; - case ROAM_TRIGGER_REASON_BSS_LOAD: - return WMI_ROAM_TRIGGER_REASON_BSS_LOAD; - case ROAM_TRIGGER_REASON_DEAUTH: - return WMI_ROAM_TRIGGER_REASON_DEAUTH; - case ROAM_TRIGGER_REASON_IDLE: - return WMI_ROAM_TRIGGER_REASON_IDLE; - case ROAM_TRIGGER_REASON_STA_KICKOUT: - return WMI_ROAM_TRIGGER_REASON_STA_KICKOUT; - case ROAM_TRIGGER_REASON_ESS_RSSI: - return WMI_ROAM_TRIGGER_REASON_ESS_RSSI; - case ROAM_TRIGGER_REASON_WTC_BTM: - return WMI_ROAM_TRIGGER_REASON_WTC_BTM; - case ROAM_TRIGGER_REASON_PMK_TIMEOUT: - return WMI_ROAM_TRIGGER_REASON_PMK_TIMEOUT; - case ROAM_TRIGGER_REASON_MAX: - return WMI_ROAM_TRIGGER_REASON_MAX; - default: - return WMI_ROAM_TRIGGER_REASON_NONE; - } -} - /** * send_roam_scan_offload_ap_profile_cmd_tlv() - set roam ap profile in fw * @wmi_handle: wmi handle @@ -2373,10 +2454,14 @@ send_roam_scan_offload_ap_profile_cmd_tlv(wmi_unified_t wmi_handle, len = sizeof(wmi_roam_ap_profile_fixed_param) + sizeof(wmi_ap_profile); len += sizeof(*score_param); - len += WMI_TLV_HDR_SIZE; - len += NUM_OF_ROAM_TRIGGERS * sizeof(*score_delta_param); - len += WMI_TLV_HDR_SIZE; - len += NUM_OF_ROAM_MIN_RSSI * sizeof(*min_rssi_param); + + if (!wmi_service_enabled(wmi_handle, + wmi_service_configure_roam_trigger_param_support)) { + len += WMI_TLV_HDR_SIZE; + len += NUM_OF_ROAM_TRIGGERS * sizeof(*score_delta_param); + len += WMI_TLV_HDR_SIZE; + len += NUM_OF_ROAM_MIN_RSSI * sizeof(*min_rssi_param); + } buf = wmi_buf_alloc(wmi_handle, len); if (!buf) return QDF_STATUS_E_NOMEM; @@ -2551,73 +2636,76 @@ send_roam_scan_offload_ap_profile_cmd_tlv(wmi_unified_t wmi_handle, score_param->candidate_min_roam_score_delta); buf_ptr += sizeof(*score_param); - WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, - (NUM_OF_ROAM_TRIGGERS * sizeof(*score_delta_param))); - buf_ptr += WMI_TLV_HDR_SIZE; - score_delta_param = (wmi_roam_score_delta_param *)buf_ptr; - WMITLV_SET_HDR(&score_delta_param->tlv_header, - WMITLV_TAG_STRUC_wmi_roam_score_delta_param, - WMITLV_GET_STRUCT_TLVLEN(wmi_roam_score_delta_param)); - trig_reason = - ap_profile->score_delta_param[IDLE_ROAM_TRIGGER].trigger_reason; - score_delta_param->roam_trigger_reason = - convert_roam_trigger_reason(trig_reason); - score_delta_param->roam_score_delta = - ap_profile->score_delta_param[IDLE_ROAM_TRIGGER].roam_score_delta; + if (!wmi_service_enabled(wmi_handle, + wmi_service_configure_roam_trigger_param_support)) { + WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, + (NUM_OF_ROAM_TRIGGERS * sizeof(*score_delta_param))); + buf_ptr += WMI_TLV_HDR_SIZE; - buf_ptr += sizeof(*score_delta_param); - score_delta_param = (wmi_roam_score_delta_param *)buf_ptr; - WMITLV_SET_HDR(&score_delta_param->tlv_header, - WMITLV_TAG_STRUC_wmi_roam_score_delta_param, - WMITLV_GET_STRUCT_TLVLEN(wmi_roam_score_delta_param)); - trig_reason = - ap_profile->score_delta_param[BTM_ROAM_TRIGGER].trigger_reason; - score_delta_param->roam_trigger_reason = - convert_roam_trigger_reason(trig_reason); - score_delta_param->roam_score_delta = - ap_profile->score_delta_param[BTM_ROAM_TRIGGER].roam_score_delta; + score_delta_param = (wmi_roam_score_delta_param *)buf_ptr; + WMITLV_SET_HDR(&score_delta_param->tlv_header, + WMITLV_TAG_STRUC_wmi_roam_score_delta_param, + WMITLV_GET_STRUCT_TLVLEN(wmi_roam_score_delta_param)); + trig_reason = + ap_profile->score_delta_param[IDLE_ROAM_TRIGGER].trigger_reason; + score_delta_param->roam_trigger_reason = + convert_roam_trigger_reason(trig_reason); + score_delta_param->roam_score_delta = + ap_profile->score_delta_param[IDLE_ROAM_TRIGGER].roam_score_delta; - buf_ptr += sizeof(*score_delta_param); - WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, - (NUM_OF_ROAM_MIN_RSSI * sizeof(*min_rssi_param))); - buf_ptr += WMI_TLV_HDR_SIZE; + buf_ptr += sizeof(*score_delta_param); + score_delta_param = (wmi_roam_score_delta_param *)buf_ptr; + WMITLV_SET_HDR(&score_delta_param->tlv_header, + WMITLV_TAG_STRUC_wmi_roam_score_delta_param, + WMITLV_GET_STRUCT_TLVLEN(wmi_roam_score_delta_param)); + trig_reason = + ap_profile->score_delta_param[BTM_ROAM_TRIGGER].trigger_reason; + score_delta_param->roam_trigger_reason = + convert_roam_trigger_reason(trig_reason); + score_delta_param->roam_score_delta = + ap_profile->score_delta_param[BTM_ROAM_TRIGGER].roam_score_delta; - min_rssi_param = (wmi_roam_cnd_min_rssi_param *)buf_ptr; - WMITLV_SET_HDR(&min_rssi_param->tlv_header, - WMITLV_TAG_STRUC_wmi_roam_cnd_min_rssi_param, - WMITLV_GET_STRUCT_TLVLEN(wmi_roam_cnd_min_rssi_param)); - trig_reason = - ap_profile->min_rssi_params[DEAUTH_MIN_RSSI].trigger_reason; - min_rssi_param->roam_trigger_reason = - convert_roam_trigger_reason(trig_reason); - min_rssi_param->candidate_min_rssi = - ap_profile->min_rssi_params[DEAUTH_MIN_RSSI].min_rssi; + buf_ptr += sizeof(*score_delta_param); + WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, + (NUM_OF_ROAM_MIN_RSSI * sizeof(*min_rssi_param))); + buf_ptr += WMI_TLV_HDR_SIZE; - buf_ptr += sizeof(*min_rssi_param); - min_rssi_param = (wmi_roam_cnd_min_rssi_param *)buf_ptr; - WMITLV_SET_HDR(&min_rssi_param->tlv_header, - WMITLV_TAG_STRUC_wmi_roam_cnd_min_rssi_param, - WMITLV_GET_STRUCT_TLVLEN(wmi_roam_cnd_min_rssi_param)); - trig_reason = - ap_profile->min_rssi_params[BMISS_MIN_RSSI].trigger_reason; - min_rssi_param->roam_trigger_reason = - convert_roam_trigger_reason(trig_reason); - min_rssi_param->candidate_min_rssi = - ap_profile->min_rssi_params[BMISS_MIN_RSSI].min_rssi; + min_rssi_param = (wmi_roam_cnd_min_rssi_param *)buf_ptr; + WMITLV_SET_HDR(&min_rssi_param->tlv_header, + WMITLV_TAG_STRUC_wmi_roam_cnd_min_rssi_param, + WMITLV_GET_STRUCT_TLVLEN(wmi_roam_cnd_min_rssi_param)); + trig_reason = + ap_profile->min_rssi_params[DEAUTH_MIN_RSSI].trigger_reason; + min_rssi_param->roam_trigger_reason = + convert_roam_trigger_reason(trig_reason); + min_rssi_param->candidate_min_rssi = + ap_profile->min_rssi_params[DEAUTH_MIN_RSSI].min_rssi; - buf_ptr += sizeof(*min_rssi_param); - min_rssi_param = (wmi_roam_cnd_min_rssi_param *)buf_ptr; - WMITLV_SET_HDR(&min_rssi_param->tlv_header, - WMITLV_TAG_STRUC_wmi_roam_cnd_min_rssi_param, - WMITLV_GET_STRUCT_TLVLEN(wmi_roam_cnd_min_rssi_param)); - trig_reason = - ap_profile->min_rssi_params[MIN_RSSI_2G_TO_5G_ROAM].trigger_reason; - min_rssi_param->roam_trigger_reason = - convert_roam_trigger_reason(trig_reason); - min_rssi_param->candidate_min_rssi = - ap_profile->min_rssi_params[MIN_RSSI_2G_TO_5G_ROAM].min_rssi; + buf_ptr += sizeof(*min_rssi_param); + min_rssi_param = (wmi_roam_cnd_min_rssi_param *)buf_ptr; + WMITLV_SET_HDR(&min_rssi_param->tlv_header, + WMITLV_TAG_STRUC_wmi_roam_cnd_min_rssi_param, + WMITLV_GET_STRUCT_TLVLEN(wmi_roam_cnd_min_rssi_param)); + trig_reason = + ap_profile->min_rssi_params[BMISS_MIN_RSSI].trigger_reason; + min_rssi_param->roam_trigger_reason = + convert_roam_trigger_reason(trig_reason); + min_rssi_param->candidate_min_rssi = + ap_profile->min_rssi_params[BMISS_MIN_RSSI].min_rssi; + buf_ptr += sizeof(*min_rssi_param); + min_rssi_param = (wmi_roam_cnd_min_rssi_param *)buf_ptr; + WMITLV_SET_HDR(&min_rssi_param->tlv_header, + WMITLV_TAG_STRUC_wmi_roam_cnd_min_rssi_param, + WMITLV_GET_STRUCT_TLVLEN(wmi_roam_cnd_min_rssi_param)); + trig_reason = + ap_profile->min_rssi_params[MIN_RSSI_2G_TO_5G_ROAM].trigger_reason; + min_rssi_param->roam_trigger_reason = + convert_roam_trigger_reason(trig_reason); + min_rssi_param->candidate_min_rssi = + ap_profile->min_rssi_params[MIN_RSSI_2G_TO_5G_ROAM].min_rssi; + } wmi_mtrace(WMI_ROAM_AP_PROFILE, NO_SESSION, 0); status = wmi_unified_cmd_send(wmi_handle, buf, len, WMI_ROAM_AP_PROFILE);