diff --git a/components/fw_offload/core/inc/wlan_fw_offload_main.h b/components/fw_offload/core/inc/wlan_fw_offload_main.h index 0a29742d54ac..40e87a20202b 100644 --- a/components/fw_offload/core/inc/wlan_fw_offload_main.h +++ b/components/fw_offload/core/inc/wlan_fw_offload_main.h @@ -61,12 +61,36 @@ struct wlan_fwol_coex_config { int16_t bt_interference_high_ul; }; +/* + * struct wlan_fwol_thermal_temp - Thermal temperature config items + * thermal_temp_min_level0: Thermal temperature minimum level 0 + * thermal_temp_max_level0: Thermal temperature maximum level 0 + * thermal_temp_min_level1: Thermal temperature minimum level 1 + * thermal_temp_max_level1: Thermal temperature maximum level 1 + * thermal_temp_min_level2: Thermal temperature minimum level 2 + * thermal_temp_max_level2: Thermal temperature maximum level 2 + * thermal_temp_min_level3: Thermal temperature minimum level 3 + * thermal_temp_max_level3: Thermal temperature maximum level 3 + */ +struct wlan_fwol_thermal_temp { + uint16_t thermal_temp_min_level0; + uint16_t thermal_temp_max_level0; + uint16_t thermal_temp_min_level1; + uint16_t thermal_temp_max_level1; + uint16_t thermal_temp_min_level2; + uint16_t thermal_temp_max_level2; + uint16_t thermal_temp_min_level3; + uint16_t thermal_temp_max_level3; +}; + /** * struct wlan_fwol_cfg - fwol config items * coex_config: coex config items + * thermal_temp_cfg: Thermal temperature related config items */ struct wlan_fwol_cfg { struct wlan_fwol_coex_config coex_config; + struct wlan_fwol_thermal_temp thermal_temp_cfg; }; /** diff --git a/components/fw_offload/core/src/wlan_fw_offload_main.c b/components/fw_offload/core/src/wlan_fw_offload_main.c index 475890b269a7..2564be83addf 100644 --- a/components/fw_offload/core/src/wlan_fw_offload_main.c +++ b/components/fw_offload/core/src/wlan_fw_offload_main.c @@ -54,6 +54,28 @@ fwol_update_coex_config_in_cfg(struct wlan_objmgr_psoc *psoc, cfg_get(psoc, CFG_BT_INTERFERENCE_HIGH_UL); } +static void +fwol_update_thermal_temp_in_cfg(struct wlan_objmgr_psoc *psoc, + struct wlan_fwol_thermal_temp *thermal_temp) +{ + thermal_temp->thermal_temp_min_level0 = + cfg_get(psoc, CFG_THERMAL_TEMP_MIN_LEVEL0); + thermal_temp->thermal_temp_max_level0 = + cfg_get(psoc, CFG_THERMAL_TEMP_MAX_LEVEL0); + thermal_temp->thermal_temp_min_level1 = + cfg_get(psoc, CFG_THERMAL_TEMP_MIN_LEVEL1); + thermal_temp->thermal_temp_max_level1 = + cfg_get(psoc, CFG_THERMAL_TEMP_MAX_LEVEL1); + thermal_temp->thermal_temp_min_level2 = + cfg_get(psoc, CFG_THERMAL_TEMP_MIN_LEVEL2); + thermal_temp->thermal_temp_max_level2 = + cfg_get(psoc, CFG_THERMAL_TEMP_MAX_LEVEL2); + thermal_temp->thermal_temp_min_level3 = + cfg_get(psoc, CFG_THERMAL_TEMP_MIN_LEVEL3); + thermal_temp->thermal_temp_max_level3 = + cfg_get(psoc, CFG_THERMAL_TEMP_MAX_LEVEL3); +} + QDF_STATUS fwol_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc) { QDF_STATUS status = QDF_STATUS_SUCCESS; @@ -69,6 +91,7 @@ QDF_STATUS fwol_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc) fwol_cfg = &fwol_obj->cfg; fwol_update_coex_config_in_cfg(psoc, &fwol_cfg->coex_config); + fwol_update_thermal_temp_in_cfg(psoc, &fwol_cfg->thermal_temp_cfg); return status; } diff --git a/components/fw_offload/dispatcher/inc/cfg_fwol.h b/components/fw_offload/dispatcher/inc/cfg_fwol.h index 29f9321f3b01..ef00a7d93fb6 100644 --- a/components/fw_offload/dispatcher/inc/cfg_fwol.h +++ b/components/fw_offload/dispatcher/inc/cfg_fwol.h @@ -24,9 +24,11 @@ #include "qdf_types.h" #include "cfg_coex.h" +#include "cfg_thermal_temp.h" #define CFG_FWOL_ALL \ - CFG_COEX_ALL + CFG_COEX_ALL \ + CFG_THERMAL_TEMP_ALL #endif /* __CFG_FWOL_H */ diff --git a/components/fw_offload/dispatcher/inc/cfg_thermal_temp.h b/components/fw_offload/dispatcher/inc/cfg_thermal_temp.h new file mode 100644 index 000000000000..328546e4d99a --- /dev/null +++ b/components/fw_offload/dispatcher/inc/cfg_thermal_temp.h @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved. + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/** + * DOC: This file contains centralized definitions of converged configuration. + */ + +#ifndef __CFG_THERMAL_TEMP_H +#define __CFG_THERMAL_TEMP_H + +#define CFG_THERMAL_TEMP_MIN_LEVEL0 CFG_INI_UINT( \ + "gThermalTempMinLevel0", \ + 0, \ + 1000, \ + 0, \ + CFG_VALUE_OR_DEFAULT, \ + "Thermal Temp Min Level0") + +#define CFG_THERMAL_TEMP_MAX_LEVEL0 CFG_INI_UINT( \ + "gThermalTempMaxLevel0", \ + 0, \ + 1000, \ + 90, \ + CFG_VALUE_OR_DEFAULT, \ + "Thermal Temp Max Level0") + +#define CFG_THERMAL_TEMP_MIN_LEVEL1 CFG_INI_UINT( \ + "gThermalTempMinLevel1", \ + 0, \ + 1000, \ + 70, \ + CFG_VALUE_OR_DEFAULT, \ + "Thermal Temp Min Level1") + +#define CFG_THERMAL_TEMP_MAX_LEVEL1 CFG_INI_UINT( \ + "gThermalTempMaxLevel1", \ + 0, \ + 1000, \ + 110, \ + CFG_VALUE_OR_DEFAULT, \ + "Thermal Temp Max Level1") + +#define CFG_THERMAL_TEMP_MIN_LEVEL2 CFG_INI_UINT( \ + "gThermalTempMinLevel2", \ + 0, \ + 1000, \ + 90, \ + CFG_VALUE_OR_DEFAULT, \ + "Thermal Temp Min Level2") + +#define CFG_THERMAL_TEMP_MAX_LEVEL2 CFG_INI_UINT( \ + "gThermalTempMaxLevel2", \ + 0, \ + 1000, \ + 125, \ + CFG_VALUE_OR_DEFAULT, \ + "Thermal Temp Max Level2") + +#define CFG_THERMAL_TEMP_MIN_LEVEL3 CFG_INI_UINT( \ + "gThermalTempMinLevel3", \ + 0, \ + 1000, \ + 110, \ + CFG_VALUE_OR_DEFAULT, \ + "Thermal Temp Min Level3") + +#define CFG_THERMAL_TEMP_MAX_LEVEL3 CFG_INI_UINT( \ + "gThermalTempMaxLevel3", \ + 0, \ + 1000, \ + 0, \ + CFG_VALUE_OR_DEFAULT, \ + "Thermal Temp Max Level3") + +#define CFG_THERMAL_TEMP_ALL \ + CFG(CFG_THERMAL_TEMP_MIN_LEVEL0) \ + CFG(CFG_THERMAL_TEMP_MAX_LEVEL0) \ + CFG(CFG_THERMAL_TEMP_MIN_LEVEL1) \ + CFG(CFG_THERMAL_TEMP_MAX_LEVEL1) \ + CFG(CFG_THERMAL_TEMP_MIN_LEVEL2) \ + CFG(CFG_THERMAL_TEMP_MAX_LEVEL2) \ + CFG(CFG_THERMAL_TEMP_MIN_LEVEL3) \ + CFG(CFG_THERMAL_TEMP_MAX_LEVEL3) \ + +#endif + diff --git a/components/fw_offload/dispatcher/inc/wlan_fwol_ucfg_api.h b/components/fw_offload/dispatcher/inc/wlan_fwol_ucfg_api.h index 41e3fb28efbf..852ef0a80c7d 100644 --- a/components/fw_offload/dispatcher/inc/wlan_fwol_ucfg_api.h +++ b/components/fw_offload/dispatcher/inc/wlan_fwol_ucfg_api.h @@ -25,6 +25,7 @@ #include #include #include +#include "wlan_fw_offload_main.h" #include "wlan_fw_offload_main.h" @@ -77,4 +78,15 @@ QDF_STATUS ucfg_fwol_get_coex_config_params(struct wlan_objmgr_psoc *psoc, struct wlan_fwol_coex_config *coex_config); +/** + * ucfg_fwol_get_thermal_temp() - Get thermal temperature config params + * @psoc: Pointer to psoc object + * @thermal_temp: Pointer to struct wlan_fwol_thermal_temp + * + * Return: QDF Status + */ +QDF_STATUS +ucfg_fwol_get_thermal_temp(struct wlan_objmgr_psoc *psoc, + struct wlan_fwol_thermal_temp *thermal_temp); + #endif /* _WLAN_FWOL_UCFG_API_H_ */ diff --git a/components/fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c b/components/fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c index aa8666284334..82d703b8bd8c 100644 --- a/components/fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c +++ b/components/fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c @@ -165,3 +165,20 @@ ucfg_fwol_get_coex_config_params(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } + +QDF_STATUS +ucfg_fwol_get_thermal_temp(struct wlan_objmgr_psoc *psoc, + struct wlan_fwol_thermal_temp *thermal_info) +{ + struct wlan_fwol_psoc_obj *fwol_obj; + + fwol_obj = fwol_get_psoc_obj(psoc); + if (!fwol_obj) { + fwol_err("Failed to get fwol obj"); + return QDF_STATUS_E_FAILURE; + } + + *thermal_info = fwol_obj->cfg.thermal_temp_cfg; + + return QDF_STATUS_SUCCESS; +} diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index dc68d4157108..57473a51d4f2 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -5081,46 +5081,6 @@ enum hdd_link_speed_rpt_type { #define CFG_THROTTLE_DUTY_CYCLE_LEVEL3_MAX (100) #define CFG_THROTTLE_DUTY_CYCLE_LEVEL3_DEFAULT (94) -#define CFG_THERMAL_TEMP_MIN_LEVEL0_NAME "gThermalTempMinLevel0" -#define CFG_THERMAL_TEMP_MIN_LEVEL0_MIN (0) -#define CFG_THERMAL_TEMP_MIN_LEVEL0_MAX (1000) -#define CFG_THERMAL_TEMP_MIN_LEVEL0_DEFAULT (0) - -#define CFG_THERMAL_TEMP_MAX_LEVEL0_NAME "gThermalTempMaxLevel0" -#define CFG_THERMAL_TEMP_MAX_LEVEL0_MIN (0) -#define CFG_THERMAL_TEMP_MAX_LEVEL0_MAX (1000) -#define CFG_THERMAL_TEMP_MAX_LEVEL0_DEFAULT (90) - -#define CFG_THERMAL_TEMP_MIN_LEVEL1_NAME "gThermalTempMinLevel1" -#define CFG_THERMAL_TEMP_MIN_LEVEL1_MIN (0) -#define CFG_THERMAL_TEMP_MIN_LEVEL1_MAX (1000) -#define CFG_THERMAL_TEMP_MIN_LEVEL1_DEFAULT (70) - -#define CFG_THERMAL_TEMP_MAX_LEVEL1_NAME "gThermalTempMaxLevel1" -#define CFG_THERMAL_TEMP_MAX_LEVEL1_MIN (0) -#define CFG_THERMAL_TEMP_MAX_LEVEL1_MAX (1000) -#define CFG_THERMAL_TEMP_MAX_LEVEL1_DEFAULT (110) - -#define CFG_THERMAL_TEMP_MIN_LEVEL2_NAME "gThermalTempMinLevel2" -#define CFG_THERMAL_TEMP_MIN_LEVEL2_MIN (0) -#define CFG_THERMAL_TEMP_MIN_LEVEL2_MAX (1000) -#define CFG_THERMAL_TEMP_MIN_LEVEL2_DEFAULT (90) - -#define CFG_THERMAL_TEMP_MAX_LEVEL2_NAME "gThermalTempMaxLevel2" -#define CFG_THERMAL_TEMP_MAX_LEVEL2_MIN (0) -#define CFG_THERMAL_TEMP_MAX_LEVEL2_MAX (1000) -#define CFG_THERMAL_TEMP_MAX_LEVEL2_DEFAULT (125) - -#define CFG_THERMAL_TEMP_MIN_LEVEL3_NAME "gThermalTempMinLevel3" -#define CFG_THERMAL_TEMP_MIN_LEVEL3_MIN (0) -#define CFG_THERMAL_TEMP_MIN_LEVEL3_MAX (1000) -#define CFG_THERMAL_TEMP_MIN_LEVEL3_DEFAULT (110) - -#define CFG_THERMAL_TEMP_MAX_LEVEL3_NAME "gThermalTempMaxLevel3" -#define CFG_THERMAL_TEMP_MAX_LEVEL3_MIN (0) -#define CFG_THERMAL_TEMP_MAX_LEVEL3_MAX (1000) -#define CFG_THERMAL_TEMP_MAX_LEVEL3_DEFAULT (0) - /* * Enable/Disable Modulated DTIM feature * Default: Disable @@ -11080,14 +11040,6 @@ struct hdd_config { uint8_t wowEnable; uint8_t disableDFSChSwitch; uint8_t enableDFSMasterCap; - uint16_t thermalTempMinLevel0; - uint16_t thermalTempMaxLevel0; - uint16_t thermalTempMinLevel1; - uint16_t thermalTempMaxLevel1; - uint16_t thermalTempMinLevel2; - uint16_t thermalTempMaxLevel2; - uint16_t thermalTempMinLevel3; - uint16_t thermalTempMaxLevel3; uint32_t TxPower2g; uint32_t TxPower5g; uint32_t gEnableDebugLog; diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 02919ee0377d..63203c669bb4 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -2297,62 +2297,6 @@ struct reg_table_entry g_registry_table[] = { CFG_IBSS_PS_1RX_CHAIN_IN_ATIM_WINDOW_MIN, CFG_IBSS_PS_1RX_CHAIN_IN_ATIM_WINDOW_MAX), - REG_VARIABLE(CFG_THERMAL_TEMP_MIN_LEVEL0_NAME, WLAN_PARAM_Integer, - struct hdd_config, thermalTempMinLevel0, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_THERMAL_TEMP_MIN_LEVEL0_DEFAULT, - CFG_THERMAL_TEMP_MIN_LEVEL0_MIN, - CFG_THERMAL_TEMP_MIN_LEVEL0_MAX), - - REG_VARIABLE(CFG_THERMAL_TEMP_MAX_LEVEL0_NAME, WLAN_PARAM_Integer, - struct hdd_config, thermalTempMaxLevel0, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_THERMAL_TEMP_MAX_LEVEL0_DEFAULT, - CFG_THERMAL_TEMP_MAX_LEVEL0_MIN, - CFG_THERMAL_TEMP_MAX_LEVEL0_MAX), - - REG_VARIABLE(CFG_THERMAL_TEMP_MIN_LEVEL1_NAME, WLAN_PARAM_Integer, - struct hdd_config, thermalTempMinLevel1, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_THERMAL_TEMP_MIN_LEVEL1_DEFAULT, - CFG_THERMAL_TEMP_MIN_LEVEL1_MIN, - CFG_THERMAL_TEMP_MIN_LEVEL1_MAX), - - REG_VARIABLE(CFG_THERMAL_TEMP_MAX_LEVEL1_NAME, WLAN_PARAM_Integer, - struct hdd_config, thermalTempMaxLevel1, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_THERMAL_TEMP_MAX_LEVEL1_DEFAULT, - CFG_THERMAL_TEMP_MAX_LEVEL1_MIN, - CFG_THERMAL_TEMP_MAX_LEVEL1_MAX), - - REG_VARIABLE(CFG_THERMAL_TEMP_MIN_LEVEL2_NAME, WLAN_PARAM_Integer, - struct hdd_config, thermalTempMinLevel2, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_THERMAL_TEMP_MIN_LEVEL2_DEFAULT, - CFG_THERMAL_TEMP_MIN_LEVEL2_MIN, - CFG_THERMAL_TEMP_MIN_LEVEL2_MAX), - - REG_VARIABLE(CFG_THERMAL_TEMP_MAX_LEVEL2_NAME, WLAN_PARAM_Integer, - struct hdd_config, thermalTempMaxLevel2, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_THERMAL_TEMP_MAX_LEVEL2_DEFAULT, - CFG_THERMAL_TEMP_MAX_LEVEL2_MIN, - CFG_THERMAL_TEMP_MAX_LEVEL2_MAX), - - REG_VARIABLE(CFG_THERMAL_TEMP_MIN_LEVEL3_NAME, WLAN_PARAM_Integer, - struct hdd_config, thermalTempMinLevel3, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_THERMAL_TEMP_MIN_LEVEL3_DEFAULT, - CFG_THERMAL_TEMP_MIN_LEVEL3_MIN, - CFG_THERMAL_TEMP_MIN_LEVEL3_MAX), - - REG_VARIABLE(CFG_THERMAL_TEMP_MAX_LEVEL3_NAME, WLAN_PARAM_Integer, - struct hdd_config, thermalTempMaxLevel3, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_THERMAL_TEMP_MAX_LEVEL3_DEFAULT, - CFG_THERMAL_TEMP_MAX_LEVEL3_MIN, - CFG_THERMAL_TEMP_MAX_LEVEL3_MAX), - REG_VARIABLE(CFG_SET_TXPOWER_LIMIT2G_NAME, WLAN_PARAM_Integer, struct hdd_config, TxPower2g, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 605a8a130cc9..da6c94b1279a 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -9756,6 +9756,7 @@ static int hdd_init_thermal_info(struct hdd_context *hdd_ctx) tSmeThermalParams thermal_param; QDF_STATUS status; mac_handle_t mac_handle; + struct wlan_fwol_thermal_temp thermal_temp = {0}; thermal_param.smeThermalMgmtEnabled = hdd_ctx->config->thermalMitigationEnable; @@ -9770,22 +9771,26 @@ static int hdd_init_thermal_info(struct hdd_context *hdd_ctx) thermal_param.sme_throttle_duty_cycle_tbl[3] = hdd_ctx->config->throttle_dutycycle_level3; + status = ucfg_fwol_get_thermal_temp(hdd_ctx->hdd_psoc, &thermal_temp); + if (QDF_IS_STATUS_ERROR(status)) + return qdf_status_to_os_return(status); + thermal_param.smeThermalLevels[0].smeMinTempThreshold = - hdd_ctx->config->thermalTempMinLevel0; + thermal_temp.thermal_temp_min_level0; thermal_param.smeThermalLevels[0].smeMaxTempThreshold = - hdd_ctx->config->thermalTempMaxLevel0; + thermal_temp.thermal_temp_max_level0; thermal_param.smeThermalLevels[1].smeMinTempThreshold = - hdd_ctx->config->thermalTempMinLevel1; + thermal_temp.thermal_temp_min_level1; thermal_param.smeThermalLevels[1].smeMaxTempThreshold = - hdd_ctx->config->thermalTempMaxLevel1; + thermal_temp.thermal_temp_max_level1; thermal_param.smeThermalLevels[2].smeMinTempThreshold = - hdd_ctx->config->thermalTempMinLevel2; + thermal_temp.thermal_temp_min_level2; thermal_param.smeThermalLevels[2].smeMaxTempThreshold = - hdd_ctx->config->thermalTempMaxLevel2; + thermal_temp.thermal_temp_max_level2; thermal_param.smeThermalLevels[3].smeMinTempThreshold = - hdd_ctx->config->thermalTempMinLevel3; + thermal_temp.thermal_temp_min_level3; thermal_param.smeThermalLevels[3].smeMaxTempThreshold = - hdd_ctx->config->thermalTempMaxLevel3; + thermal_temp.thermal_temp_max_level3; mac_handle = hdd_ctx->mac_handle; status = sme_init_thermal_info(mac_handle, thermal_param);