diff --git a/wmi_unified_roam_api.c b/wmi_unified_roam_api.c index 0cfb0027fd..4204785759 100644 --- a/wmi_unified_roam_api.c +++ b/wmi_unified_roam_api.c @@ -288,6 +288,18 @@ QDF_STATUS wmi_unified_send_btm_config(void *wmi_hdl, return QDF_STATUS_E_FAILURE; } +QDF_STATUS wmi_unified_send_bss_load_config(void *wmi_hdl, + struct wmi_bss_load_config *params) +{ + wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl; + + if (wmi_handle->ops->send_roam_bss_load_config) + return wmi_handle->ops->send_roam_bss_load_config(wmi_handle, + params); + + return QDF_STATUS_E_FAILURE; +} + QDF_STATUS wmi_unified_offload_11k_cmd(void *wmi_hdl, struct wmi_11k_offload_params *params) { diff --git a/wmi_unified_roam_tlv.c b/wmi_unified_roam_tlv.c index b11ae647b9..f69ca47f13 100644 --- a/wmi_unified_roam_tlv.c +++ b/wmi_unified_roam_tlv.c @@ -2046,6 +2046,50 @@ static QDF_STATUS send_btm_config_cmd_tlv(wmi_unified_t wmi_handle, return QDF_STATUS_SUCCESS; } +/** + * send_roam_bss_load_config_tlv() - send roam load bss trigger configuration + * @wmi_handle: wmi handle + * @parms: pointer to wmi_bss_load_config + * + * This function sends the roam load bss trigger configuration to fw. + * the bss_load_threshold parameter is used to configure the maximum + * bss load percentage, above which the firmware should trigger roaming + * + * Return: QDF status + */ +static QDF_STATUS +send_roam_bss_load_config_tlv(wmi_unified_t wmi_handle, + struct wmi_bss_load_config *params) +{ + wmi_roam_bss_load_config_cmd_fixed_param *cmd; + wmi_buf_t buf; + uint32_t len; + + len = sizeof(*cmd); + buf = wmi_buf_alloc(wmi_handle, len); + if (!buf) + return QDF_STATUS_E_NOMEM; + + cmd = (wmi_roam_bss_load_config_cmd_fixed_param *)wmi_buf_data(buf); + WMITLV_SET_HDR( + &cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_roam_bss_load_config_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN(wmi_roam_bss_load_config_cmd_fixed_param)); + cmd->vdev_id = params->vdev_id; + cmd->bss_load_threshold = params->bss_load_threshold; + + wmi_mtrace(WMI_ROAM_BSS_LOAD_CONFIG_CMDID, cmd->vdev_id, 0); + if (wmi_unified_cmd_send(wmi_handle, buf, len, + WMI_ROAM_BSS_LOAD_CONFIG_CMDID)) { + WMI_LOGE("%s: failed to send WMI_ROAM_BSS_LOAD_CONFIG_CMDID ", + __func__); + wmi_buf_free(buf); + return QDF_STATUS_E_FAILURE; + } + + return QDF_STATUS_SUCCESS; +} + /** * send_offload_11k_cmd_tlv() - send wmi cmd with 11k offload params * @wmi_handle: wmi handler @@ -2214,6 +2258,7 @@ void wmi_roam_attach_tlv(wmi_unified_t wmi_handle) ops->send_offload_11k_cmd = send_offload_11k_cmd_tlv; ops->send_invoke_neighbor_report_cmd = send_invoke_neighbor_report_cmd_tlv; + ops->send_roam_bss_load_config = send_roam_bss_load_config_tlv; wmi_lfr_subnet_detection_attach_tlv(wmi_handle); wmi_rssi_monitor_attach_tlv(wmi_handle);