Эх сурвалжийг харах

qcacld-3.0: Add CFG items of power

Add power items related CFG items in new file,
and store the respective inis in MLME component

Change-Id: Iac183da52495aca07c6270edeb9f383ab49c1ff5
CRs-Fixed: 2341900
gaurank kathpalia 6 жил өмнө
parent
commit
57db85a71d

+ 24 - 0
mlme/core/src/wlan_mlme_main.c

@@ -1420,6 +1420,29 @@ mlme_limit_max_per_index_score(uint32_t per_index_score)
 	return per_index_score;
 	return per_index_score;
 }
 }
 
 
+static void mlme_init_power_cfg(struct wlan_objmgr_psoc *psoc,
+				struct wlan_mlme_power *power)
+{
+	power->tx_power_2g = cfg_get(psoc, CFG_SET_TXPOWER_LIMIT2G);
+	power->tx_power_5g = cfg_get(psoc, CFG_SET_TXPOWER_LIMIT5G);
+
+	power->max_tx_power_24.max_len = CFG_MAX_TX_POWER_2_4_LEN;
+	qdf_uint8_array_parse(cfg_default(CFG_MAX_TX_POWER_2_4),
+			      power->max_tx_power_24.data,
+			      sizeof(power->max_tx_power_24.data),
+			      &power->max_tx_power_24.len);
+
+	power->max_tx_power_5.max_len = CFG_MAX_TX_POWER_5_LEN;
+	qdf_uint8_array_parse(cfg_default(CFG_MAX_TX_POWER_5),
+			      power->max_tx_power_5.data,
+			      sizeof(power->max_tx_power_5.data),
+			      &power->max_tx_power_5.len);
+
+	power->power_usage.max_len = CFG_POWER_USAGE_MAX_LEN;
+	power->power_usage.len = CFG_POWER_USAGE_MAX_LEN;
+	qdf_mem_copy(power->power_usage.data, cfg_get(psoc, CFG_POWER_USAGE),
+		     power->power_usage.len);
+}
 static void mlme_init_scoring_cfg(struct wlan_objmgr_psoc *psoc,
 static void mlme_init_scoring_cfg(struct wlan_objmgr_psoc *psoc,
 				  struct wlan_mlme_scoring_cfg *scoring_cfg)
 				  struct wlan_mlme_scoring_cfg *scoring_cfg)
 {
 {
@@ -1818,6 +1841,7 @@ QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc)
 	mlme_init_scoring_cfg(psoc, &mlme_cfg->scoring);
 	mlme_init_scoring_cfg(psoc, &mlme_cfg->scoring);
 	mlme_init_threshold_cfg(psoc, &mlme_cfg->threshold);
 	mlme_init_threshold_cfg(psoc, &mlme_cfg->threshold);
 	mlme_init_acs_cfg(psoc, &mlme_cfg->acs);
 	mlme_init_acs_cfg(psoc, &mlme_cfg->acs);
+	mlme_init_power_cfg(psoc, &mlme_cfg->power);
 	mlme_init_oce_cfg(psoc, &mlme_cfg->oce);
 	mlme_init_oce_cfg(psoc, &mlme_cfg->oce);
 	mlme_init_wep_cfg(&mlme_cfg->wep_params);
 	mlme_init_wep_cfg(&mlme_cfg->wep_params);
 	mlme_init_wps_params_cfg(psoc, &mlme_cfg->wps_params);
 	mlme_init_wps_params_cfg(psoc, &mlme_cfg->wps_params);

+ 2 - 0
mlme/dispatcher/inc/cfg_mlme.h

@@ -27,6 +27,7 @@
 #include "cfg_mlme_edca_params.h"
 #include "cfg_mlme_edca_params.h"
 #include "cfg_mlme_generic.h"
 #include "cfg_mlme_generic.h"
 #include "cfg_mlme_acs.h"
 #include "cfg_mlme_acs.h"
+#include "cfg_mlme_power.h"
 #include "cfg_mlme_ht_caps.h"
 #include "cfg_mlme_ht_caps.h"
 #include "cfg_mlme_he_caps.h"
 #include "cfg_mlme_he_caps.h"
 #include "cfg_mlme_lfr.h"
 #include "cfg_mlme_lfr.h"
@@ -62,6 +63,7 @@
 	CFG_HE_CAPS_ALL \
 	CFG_HE_CAPS_ALL \
 	CFG_LFR_ALL \
 	CFG_LFR_ALL \
 	CFG_MBO_ALL \
 	CFG_MBO_ALL \
+	CFG_MLME_POWER_ALL \
 	CFG_MLME_PRODUCT_DETAILS_ALL \
 	CFG_MLME_PRODUCT_DETAILS_ALL \
 	CFG_NSS_CHAINS_ALL \
 	CFG_NSS_CHAINS_ALL \
 	CFG_OBSS_HT40_ALL \
 	CFG_OBSS_HT40_ALL \

+ 120 - 0
mlme/dispatcher/inc/cfg_mlme_power.h

@@ -0,0 +1,120 @@
+/*
+ * 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_MLME_POWER_H
+#define __CFG_MLME_POWER_H
+
+/*
+ * <cfg>
+ * max_tx_power_24 - max tx power allowed for 2.4 ghz
+ * @Min: 0 minimum length of tx power
+ * @Max: default data length of tx power in string format
+ * @Default: 1, 14, 20
+ */
+#define CFG_MAX_TX_POWER_2_4_DATA "1, 14, 20"
+#define CFG_MAX_TX_POWER_2_4 CFG_STRING( \
+		"max_tx_power_24", \
+		0, \
+		sizeof(CFG_MAX_TX_POWER_2_4_DATA) - 1, \
+		CFG_MAX_TX_POWER_2_4_DATA, \
+		"max tx power 24")
+
+/*
+ * <cfg>
+ * max_tx_power_5 - max tx power allowed for 5 ghz
+ * @Min: 0 minimum length of tx power
+ * @Max: default data length of tx power in string format
+ * @Default: 36, 126, 20
+ */
+#define CFG_MAX_TX_POWER_5_DATA "36, 126, 20"
+#define CFG_MAX_TX_POWER_5 CFG_STRING( \
+		"max_tx_power_5", \
+		0, \
+		sizeof(CFG_MAX_TX_POWER_5_DATA) - 1, \
+		CFG_MAX_TX_POWER_5_DATA, \
+		"max tx power 5")
+
+/*
+ * <ini>
+ * gPowerUsage - power usage name
+ * @Min: "Min" - minimum power usage
+ * @Max: "Max" - maximum power usage
+ * @Default: "Mod"
+ *
+ * Usage: Internal/External
+ *
+ * </ini>
+ */
+
+#define CFG_POWER_USAGE CFG_INI_STRING( \
+		"gPowerUsage", \
+		0, \
+		3, \
+		"Mod", \
+		"power usage")
+/*
+ * <ini>
+ * TxPower2g - Limit power in case of 2.4ghz
+ * @Min: 0
+ * @Max: 30
+ * @Default: 30
+ *
+ * Usage: Internal/External
+ *
+ * </ini>
+ */
+
+#define CFG_SET_TXPOWER_LIMIT2G CFG_INI_UINT( \
+			"TxPower2g", \
+			0, \
+			30, \
+			30, \
+			CFG_VALUE_OR_DEFAULT, \
+			"power limit 2g")
+/*
+ * <ini>
+ * TxPower5g - Limit power in case of 5ghz
+ * @Min: 0
+ * @Max: 30
+ * @Default: 30
+ *
+ * Usage: Internal/External
+ *
+ * </ini>
+ */
+
+#define CFG_SET_TXPOWER_LIMIT5G CFG_INI_UINT( \
+			"TxPower5g", \
+			0, \
+			30, \
+			30, \
+			CFG_VALUE_OR_DEFAULT, \
+			"power limit 5g")
+
+#define CFG_MLME_POWER_ALL \
+	CFG(CFG_MAX_TX_POWER_2_4) \
+	CFG(CFG_MAX_TX_POWER_5) \
+	CFG(CFG_POWER_USAGE) \
+	CFG(CFG_SET_TXPOWER_LIMIT2G) \
+	CFG(CFG_SET_TXPOWER_LIMIT5G)
+
+#endif /* __CFG_MLME_POWER_H */

+ 19 - 0
mlme/dispatcher/inc/wlan_mlme_api.h

@@ -85,6 +85,25 @@ QDF_STATUS mlme_get_wep_key(struct wlan_mlme_wep_cfg *wep_params,
 QDF_STATUS mlme_set_wep_key(struct wlan_mlme_wep_cfg *wep_params,
 QDF_STATUS mlme_set_wep_key(struct wlan_mlme_wep_cfg *wep_params,
 			    enum wep_key_id wep_keyid, uint8_t *key_to_set,
 			    enum wep_key_id wep_keyid, uint8_t *key_to_set,
 			    qdf_size_t len);
 			    qdf_size_t len);
+
+/**
+ * wlan_mlme_get_tx_power() - Get the max tx power in particular band
+ * @psoc: pointer to psoc object
+ * @band: 2ghz/5ghz band
+ *
+ * Return: value of tx power in the respective band
+ */
+uint8_t wlan_mlme_get_tx_power(struct wlan_objmgr_psoc *psoc,
+			       enum band_info band);
+
+/**
+ * wlan_mlme_get_power_usage() - Get the power usage info
+ * @psoc: pointer to psoc object
+ *
+ * Return: pointer to character array of power usage
+ */
+char *wlan_mlme_get_power_usage(struct wlan_objmgr_psoc *psoc);
+
 /**
 /**
  * wlan_mlme_get_ht_cap_info() - Get the HT cap info config
  * wlan_mlme_get_ht_cap_info() - Get the HT cap info config
  * @psoc: pointer to psoc object
  * @psoc: pointer to psoc object

+ 54 - 0
mlme/dispatcher/inc/wlan_mlme_public_struct.h

@@ -43,6 +43,9 @@
 
 
 #define CFG_STR_DATA_LEN     17
 #define CFG_STR_DATA_LEN     17
 #define CFG_EDCA_DATA_LEN    17
 #define CFG_EDCA_DATA_LEN    17
+#define CFG_MAX_TX_POWER_2_4_LEN    128
+#define CFG_MAX_TX_POWER_5_LEN      128
+#define CFG_POWER_USAGE_MAX_LEN      4
 
 
 #define CFG_VALID_CHANNEL_LIST_LEN 100
 #define CFG_VALID_CHANNEL_LIST_LEN 100
 #define CFG_VALID_CHANNEL_LIST_STRING_LEN (CFG_VALID_CHANNEL_LIST_LEN * 4)
 #define CFG_VALID_CHANNEL_LIST_STRING_LEN (CFG_VALID_CHANNEL_LIST_LEN * 4)
@@ -1490,6 +1493,55 @@ struct wlan_mlme_threshold {
 	uint32_t frag_threshold;
 	uint32_t frag_threshold;
 };
 };
 
 
+/* struct mlme_max_tx_power_24 - power related items
+ * @max_len: max length of string
+ * @len: actual len of string
+ * @data: Data in string format
+ */
+struct mlme_max_tx_power_24 {
+	qdf_size_t max_len;
+	qdf_size_t len;
+	uint8_t data[CFG_MAX_TX_POWER_2_4_LEN];
+};
+
+/* struct mlme_max_tx_power_5 - power related items
+ * @max_len: max length of string
+ * @len: actual len of string
+ * @data: Data in string format
+ */
+struct mlme_max_tx_power_5 {
+	qdf_size_t max_len;
+	qdf_size_t len;
+	uint8_t data[CFG_MAX_TX_POWER_5_LEN];
+};
+
+/* struct mlme_power_usage - power related items
+ * @max_len: max length of string
+ * @len: actual len of string
+ * @data: Data in string format
+ */
+struct mlme_power_usage {
+	qdf_size_t max_len;
+	qdf_size_t len;
+	char data[CFG_POWER_USAGE_MAX_LEN];
+};
+
+/*
+ * struct wlan_mlme_power - power related config items
+ * @max_tx_power_24: max power Tx for 2.4 ghz
+ * @max_tx_power_5: max power Tx for 5 ghz
+ * @power_usage: power usage mode, min, max, mod
+ * @tx_power_2g: limit tx power in 2.4 ghz
+ * @tx_power_5g: limit tx power in 5 ghz
+ */
+struct wlan_mlme_power {
+	struct mlme_max_tx_power_24 max_tx_power_24;
+	struct mlme_max_tx_power_5 max_tx_power_5;
+	struct mlme_power_usage power_usage;
+	uint8_t tx_power_2g;
+	uint8_t tx_power_5g;
+};
+
 /*
 /*
  * struct wlan_mlme_timeout - mlme timeout related config items
  * struct wlan_mlme_timeout - mlme timeout related config items
  * @join_failure_timeout: join failure timeout
  * @join_failure_timeout: join failure timeout
@@ -1602,6 +1654,7 @@ struct wlan_mlme_wep_cfg {
  * @threshold: threshold related cfg items
  * @threshold: threshold related cfg items
  * @timeouts: mlme timeout related CFG items
  * @timeouts: mlme timeout related CFG items
  * @twt_cfg: TWT CFG Items
  * @twt_cfg: TWT CFG Items
+ * @wlan_mlme_power: power related items
  * @acs: ACS related CFG items
  * @acs: ACS related CFG items
  * @feature_flags: Feature flag config items
  * @feature_flags: Feature flag config items
  * @wep_params:  WEP related config items
  * @wep_params:  WEP related config items
@@ -1633,6 +1686,7 @@ struct wlan_mlme_cfg {
 	struct wlan_mlme_threshold threshold;
 	struct wlan_mlme_threshold threshold;
 	struct wlan_mlme_timeout timeouts;
 	struct wlan_mlme_timeout timeouts;
 	struct wlan_mlme_cfg_twt twt_cfg;
 	struct wlan_mlme_cfg_twt twt_cfg;
+	struct wlan_mlme_power power;
 	struct wlan_mlme_acs acs;
 	struct wlan_mlme_acs acs;
 	struct wlan_mlme_feature_flag feature_flags;
 	struct wlan_mlme_feature_flag feature_flags;
 	struct wlan_mlme_wep_cfg wep_params;
 	struct wlan_mlme_wep_cfg wep_params;

+ 25 - 0
mlme/dispatcher/inc/wlan_mlme_ucfg_api.h

@@ -117,6 +117,31 @@ static inline QDF_STATUS ucfg_mlme_pdev_close(struct wlan_objmgr_pdev *pdev)
 }
 }
 #endif
 #endif
 
 
+/**
+ * wlan_mlme_get_power_usage() - Get the power usage info
+ * @psoc: pointer to psoc object
+ *
+ * Return: pointer to character array of power usage
+ */
+static inline
+char *ucfg_mlme_get_power_usage(struct wlan_objmgr_psoc *psoc)
+{
+	return wlan_mlme_get_power_usage(psoc);
+}
+
+/**
+ * ucfg_get_tx_power() - Get the max tx power in particular band
+ * @psoc: pointer to psoc object
+ * @band: 2ghz/5ghz band
+ *
+ * Return: value of tx power in the respective band
+ */
+static inline
+uint8_t ucfg_get_tx_power(struct wlan_objmgr_psoc *psoc, uint8_t band)
+{
+	return wlan_mlme_get_tx_power(psoc, band);
+}
+
 /**
 /**
  * ucfg_mlme_get_ht_cap_info() - Get the HT cap info config
  * ucfg_mlme_get_ht_cap_info() - Get the HT cap info config
  * @psoc: pointer to psoc object
  * @psoc: pointer to psoc object

+ 35 - 0
mlme/dispatcher/src/wlan_mlme_api.c

@@ -56,6 +56,41 @@ QDF_STATUS wlan_mlme_set_cfg_str(uint8_t *src, struct mlme_cfg_str *dst_cfg_str,
 	return QDF_STATUS_SUCCESS;
 	return QDF_STATUS_SUCCESS;
 }
 }
 
 
+uint8_t wlan_mlme_get_tx_power(struct wlan_objmgr_psoc *psoc,
+			       enum band_info band)
+{
+	struct wlan_mlme_psoc_obj *mlme_obj;
+
+	mlme_obj = mlme_get_psoc_obj(psoc);
+	if (!mlme_obj) {
+		mlme_err("Failed to get MLME Obj");
+		return 0;
+	}
+
+	switch (band) {
+	case BAND_2G:
+		return mlme_obj->cfg.power.tx_power_2g;
+	case BAND_5G:
+		return mlme_obj->cfg.power.tx_power_5g;
+	default:
+		break;
+	}
+	return 0;
+}
+
+char *wlan_mlme_get_power_usage(struct wlan_objmgr_psoc *psoc)
+{
+	struct wlan_mlme_psoc_obj *mlme_obj;
+
+	mlme_obj = mlme_get_psoc_obj(psoc);
+	if (!mlme_obj) {
+		mlme_err("Failed to get MLME Obj");
+		return NULL;
+	}
+
+	return mlme_obj->cfg.power.power_usage.data;
+}
+
 QDF_STATUS wlan_mlme_get_ht_cap_info(struct wlan_objmgr_psoc *psoc,
 QDF_STATUS wlan_mlme_get_ht_cap_info(struct wlan_objmgr_psoc *psoc,
 				     struct mlme_ht_capabilities_info
 				     struct mlme_ht_capabilities_info
 				     *ht_cap_info)
 				     *ht_cap_info)