diff --git a/mlme/core/src/wlan_mlme_main.c b/mlme/core/src/wlan_mlme_main.c
index bf16442766..9397b87488 100644
--- a/mlme/core/src/wlan_mlme_main.c
+++ b/mlme/core/src/wlan_mlme_main.c
@@ -25,6 +25,7 @@
#include "wmi_unified.h"
#include "wlan_scan_public_structs.h"
#include "wlan_vdev_mlme_api.h"
+#include "wlan_mlme_api.h"
#define NUM_OF_SOUNDING_DIMENSIONS 1 /*Nss - 1, (Nss = 2 for 2x2)*/
@@ -1857,6 +1858,51 @@ static void mlme_init_btm_cfg(struct wlan_mlme_btm *btm)
btm->btm_sticky_time = cfg_default(CFG_BTM_STICKY_TIME);
}
+/**
+ * mlme_init_fe_wlm_in_cfg() - Populate WLM INI in MLME cfg
+ * @psoc: pointer to the psoc object
+ * @wlm_config: pointer to the MLME WLM cfg
+ *
+ * Return: None
+ */
+static void mlme_init_fe_wlm_in_cfg(struct wlan_objmgr_psoc *psoc,
+ struct wlan_mlme_fe_wlm *wlm_config)
+{
+ wlm_config->latency_enable = cfg_get(psoc, CFG_LATENCY_ENABLE);
+ wlm_config->latency_level = cfg_get(psoc, CFG_LATENCY_LEVEL);
+ wlm_config->latency_flags[0] = cfg_get(psoc, CFG_LATENCY_FLAGS_NORMAL);
+ wlm_config->latency_flags[1] = cfg_get(psoc, CFG_LATENCY_FLAGS_MOD);
+ wlm_config->latency_flags[2] = cfg_get(psoc, CFG_LATENCY_FLAGS_LOW);
+ wlm_config->latency_flags[3] = cfg_get(psoc, CFG_LATENCY_FLAGS_ULTLOW);
+}
+
+/**
+ * mlme_init_fe_rrm_in_cfg() - Populate RRM INI in MLME cfg
+ * @psoc: pointer to the psoc object
+ * @rrm_config: pointer to the MLME RRM cfg
+ *
+ * Return: None
+ */
+static void mlme_init_fe_rrm_in_cfg(struct wlan_objmgr_psoc *psoc,
+ struct wlan_mlme_fe_rrm *rrm_config)
+{
+ qdf_size_t len;
+
+ rrm_config->rrm_enabled = cfg_get(psoc, CFG_RRM_ENABLE);
+ rrm_config->rrm_rand_interval = cfg_get(psoc, CFG_RRM_MEAS_RAND_INTVL);
+
+ qdf_uint8_array_parse(cfg_get(psoc, CFG_RM_CAPABILITY),
+ rrm_config->rm_capability,
+ sizeof(rrm_config->rm_capability), &len);
+
+ if (len < MLME_RMENABLEDCAP_MAX_LEN) {
+ mlme_debug("Incorrect RM capability, using default");
+ qdf_uint8_array_parse(cfg_default(CFG_RM_CAPABILITY),
+ rrm_config->rm_capability,
+ sizeof(rrm_config->rm_capability), &len);
+ }
+}
+
QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc)
{
struct wlan_mlme_psoc_obj *mlme_obj;
@@ -1900,6 +1946,8 @@ QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc)
mlme_init_wifi_pos_cfg(psoc, &mlme_cfg->wifi_pos_cfg);
mlme_init_wps_params_cfg(psoc, &mlme_cfg->wps_params);
mlme_init_btm_cfg(&mlme_cfg->btm);
+ mlme_init_fe_wlm_in_cfg(psoc, &mlme_cfg->wlm_config);
+ mlme_init_fe_rrm_in_cfg(psoc, &mlme_cfg->rrm_config);
return status;
}
diff --git a/mlme/dispatcher/inc/cfg_mlme.h b/mlme/dispatcher/inc/cfg_mlme.h
index 9b428e188e..1c7f0f8272 100644
--- a/mlme/dispatcher/inc/cfg_mlme.h
+++ b/mlme/dispatcher/inc/cfg_mlme.h
@@ -52,6 +52,8 @@
#include "cfg_mlme_wep_params.h"
#include "cfg_mlme_wifi_pos.h"
#include "cfg_mlme_btm.h"
+#include "cfg_mlme_fe_wlm.h"
+#include "cfg_mlme_fe_rrm.h"
/* Please Maintain Alphabetic Order here */
#define CFG_MLME_ALL \
@@ -60,6 +62,8 @@
CFG_CHAINMASK_ALL \
CFG_DFS_ALL \
CFG_EDCA_PARAMS_ALL \
+ CFG_FE_RRM_ALL \
+ CFG_FE_WLM_ALL \
CFG_FEATURE_FLAG_ALL \
CFG_GENERIC_ALL \
CFG_HT_CAPS_ALL \
diff --git a/mlme/dispatcher/inc/cfg_mlme_fe_rrm.h b/mlme/dispatcher/inc/cfg_mlme_fe_rrm.h
new file mode 100644
index 0000000000..9a81b7a743
--- /dev/null
+++ b/mlme/dispatcher/inc/cfg_mlme_fe_rrm.h
@@ -0,0 +1,106 @@
+/*
+ * 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_FE_RRM_H
+#define __CFG_MLME_FE_RRM_H
+
+/*
+ *
+ * gRrmEnable - Enable/Disable RRM
+ * @Min: 0
+ * @Max: 1
+ * @Default: 0
+ *
+ * This ini is used to controls the capabilities (11 k) included
+ * in the capabilities field.
+ *
+ * Related: None.
+ *
+ * Supported Feature: 11k
+ *
+ * Usage: Internal/External
+ *
+ *
+ */
+#define CFG_RRM_ENABLE CFG_INI_BOOL("gRrmEnable", \
+ 0, \
+ "Enable/Disable RRM")
+
+/*
+ *
+ * gRrmRandnIntvl - Randomization interval
+ * @Min: 10
+ * @Max: 100
+ * @Default: 100
+ *
+ * This ini is used to set randomization interval which is used to start a timer
+ * of a random value within randomization interval. Next RRM Scan request
+ * will be issued after the expiry of this random interval.
+ *
+ * Related: None.
+ *
+ * Supported Feature: 11k
+ *
+ * Usage: Internal/External
+ *
+ *
+ */
+#define CFG_RRM_MEAS_RAND_INTVL CFG_INI_UINT("gRrmRandnIntvl", \
+ 10, \
+ 100, \
+ 100, \
+ CFG_VALUE_OR_DEFAULT, \
+ "RRM Randomization interval")
+
+/*
+ *
+ * rm_capability - Configure RM enabled capabilities IE
+ * @Default: 0x73,0x10,0x91,0x00,0x04
+ *
+ * This ini is used to configure RM enabled capabilities IE.
+ * Using this INI, we can set/unset any of the bits in 5 bytes
+ * (last 4bytes are reserved). Bit details are updated as per
+ * Draft version of 11mc spec. (Draft P802.11REVmc_D4.2)
+ *
+ * Bitwise details are defined as bit mask in rrm_global.h
+ * Comma is used as a separator for each byte.
+ *
+ * Related: None.
+ *
+ * Supported Feature: 11k
+ *
+ * Usage: Internal/External
+ *
+ *
+ */
+#define CFG_RM_CAPABILITY CFG_INI_STRING("rm_capability", \
+ 24, \
+ 40, \
+ "0x73,0x10,0x91,0x00,0x04", \
+ "RM enabled capabilities IE")
+
+#define CFG_FE_RRM_ALL \
+ CFG(CFG_RRM_ENABLE) \
+ CFG(CFG_RRM_MEAS_RAND_INTVL) \
+ CFG(CFG_RM_CAPABILITY)
+
+#endif /* __CFG_MLME_FE_RRM_H */
diff --git a/mlme/dispatcher/inc/cfg_mlme_fe_wlm.h b/mlme/dispatcher/inc/cfg_mlme_fe_wlm.h
new file mode 100644
index 0000000000..701e9a7493
--- /dev/null
+++ b/mlme/dispatcher/inc/cfg_mlme_fe_wlm.h
@@ -0,0 +1,246 @@
+/*
+ * 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_FE_WLM_H
+#define __CFG_MLME_FE_WLM_H
+
+/*
+ *
+ * wlm_latency_enable - WLM latency Enable
+ *
+ * @min: 0
+ * @max: 1
+ * @default: 0
+ *
+ * 0 - disable
+ * 1 - enable
+ *
+ *
+ */
+#define CFG_LATENCY_ENABLE CFG_INI_BOOL("wlm_latency_enable", \
+ 0, \
+ "WLM latency Enable")
+
+/*
+ *
+ * wlm_latency_level - WLM latency level
+ * Define 4 latency level to gain latency
+ *
+ * @min: 0
+ * @max: 3
+ * @defalut: 0
+ *
+ * 0 - normal
+ * 1 - moderate
+ * 2 - low
+ * 3 - ultralow
+ *
+ *
+ */
+#define CFG_LATENCY_LEVEL CFG_INI_UINT("wlm_latency_level", \
+ 0, \
+ 3, \
+ 0, \
+ CFG_VALUE_OR_DEFAULT, \
+ "WLM latency level")
+
+/*
+ *
+ * wlm_latency_flags_normal - WLM flags setting for normal level
+ *
+ * @min: 0x0
+ * @max: 0xffffffff
+ * @defalut: 0x0
+ *
+ * |31 12| 11 | 10 |9 8|7 6|5 4|3 2| 1 | 0 |
+ * +------+------+------+------+------+------+------+-----+-----+
+ * | RSVD | SSLP | CSLP | RSVD | Roam | RSVD | DWLT | DFS | SUP |
+ * +------+-------------+-------------+-------------------------+
+ * | WAL | PS | Roam | Scan |
+ *
+ * bit 0: Avoid scan request from HLOS if setting
+ * bit 1: Skip DFS channel SCAN if setting
+ * bit 2-3: Define policy of dwell time/duration for each foreign channel
+ * (b2 b3)
+ * (0 0 ): Default scan dwell time
+ * (0 1 ): Reserve
+ * (1 0 ): Shrink off channel dwell time
+ * (1 1 ): Reserve
+ * bit 4-5: Reserve for scan
+ * bit 6-7: Define roaming policy
+ * (b6 b7)
+ * (0 0 ): Default roaming behavior, allow roaming in all scenarios
+ * (0 1 ): Disallow all roaming
+ * (1 0 ): Allow roaming when final bmissed
+ * (1 1 ): Reserve
+ * bit 8-9: Reserve for roaming
+ * bit 10: Disable css power collapse if setting
+ * bit 11: Disable sys sleep if setting
+ * bit 12-31: Reserve for future useage
+ *
+ *
+ */
+#define CFG_LATENCY_FLAGS_NORMAL CFG_INI_UINT("wlm_latency_flags_normal", \
+ 0, \
+ 0xffffffff, \
+ 0, \
+ CFG_VALUE_OR_DEFAULT, \
+ "WLM flag setting for normal lvl")
+
+/*
+ *
+ * wlm_latency_flags_moderate - WLM flags setting for moderate level
+ *
+ * @min: 0x0
+ * @max: 0xffffffff
+ * @defalut: 0x8
+ *
+ * |31 12| 11 | 10 |9 8|7 6|5 4|3 2| 1 | 0 |
+ * +------+------+------+------+------+------+------+-----+-----+
+ * | RSVD | SSLP | CSLP | RSVD | Roam | RSVD | DWLT | DFS | SUP |
+ * +------+-------------+-------------+-------------------------+
+ * | WAL | PS | Roam | Scan |
+ *
+ * bit 0: Avoid scan request from HLOS if setting
+ * bit 1: Skip DFS channel SCAN if setting
+ * bit 2-3: Define policy of dwell time/duration for each foreign channel
+ * (b2 b3)
+ * (0 0 ): Default scan dwell time
+ * (0 1 ): Reserve
+ * (1 0 ): Shrink off channel dwell time
+ * (1 1 ): Reserve
+ * bit 4-5: Reserve for scan
+ * bit 6-7: Define roaming policy
+ * (b6 b7)
+ * (0 0 ): Default roaming behavior, allow roaming in all scenarios
+ * (0 1 ): Disallow all roaming
+ * (1 0 ): Allow roaming when final bmissed
+ * (1 1 ): Reserve
+ * bit 8-9: Reserve for roaming
+ * bit 10: Disable css power collapse if setting
+ * bit 11: Disable sys sleep if setting
+ * bit 12-31: Reserve for future useage
+ *
+ *
+ */
+#define CFG_LATENCY_FLAGS_MOD CFG_INI_UINT("wlm_latency_flags_moderate", \
+ 0, \
+ 0xffffffff, \
+ 0x8, \
+ CFG_VALUE_OR_DEFAULT, \
+ "WLM flag setting for moderate lvl")
+
+/*
+ *
+ * wlm_latency_flags_low - WLM flags setting for low level
+ *
+ * @min: 0x0
+ * @max: 0xffffffff
+ * @defalut: 0xa
+ *
+ * |31 12| 11 | 10 |9 8|7 6|5 4|3 2| 1 | 0 |
+ * +------+------+------+------+------+------+------+-----+-----+
+ * | RSVD | SSLP | CSLP | RSVD | Roam | RSVD | DWLT | DFS | SUP |
+ * +------+-------------+-------------+-------------------------+
+ * | WAL | PS | Roam | Scan |
+ *
+ * bit 0: Avoid scan request from HLOS if setting
+ * bit 1: Skip DFS channel SCAN if setting
+ * bit 2-3: Define policy of dwell time/duration for each foreign channel
+ * (b2 b3)
+ * (0 0 ): Default scan dwell time
+ * (0 1 ): Reserve
+ * (1 0 ): Shrink off channel dwell time
+ * (1 1 ): Reserve
+ * bit 4-5: Reserve for scan
+ * bit 6-7: Define roaming policy
+ * (b6 b7)
+ * (0 0 ): Default roaming behavior, allow roaming in all scenarios
+ * (0 1 ): Disallow all roaming
+ * (1 0 ): Allow roaming when final bmissed
+ * (1 1 ): Reserve
+ * bit 8-9: Reserve for roaming
+ * bit 10: Disable css power collapse if setting
+ * bit 11: Disable sys sleep if setting
+ * bit 12-31: Reserve for future useage
+ *
+ *
+ */
+#define CFG_LATENCY_FLAGS_LOW CFG_INI_UINT("wlm_latency_flags_low", \
+ 0, \
+ 0xffffffff, \
+ 0xa, \
+ CFG_VALUE_OR_DEFAULT, \
+ "WLM flags setting for low level")
+
+/*
+ *
+ * wlm_latency_flags_ultralow - WLM flags setting for ultralow level
+ *
+ * @min: 0x0
+ * @max: 0xffffffff
+ * @defalut: 0xc8a
+ *
+ * |31 12| 11 | 10 |9 8|7 6|5 4|3 2| 1 | 0 |
+ * +------+------+------+------+------+------+------+-----+-----+
+ * | RSVD | SSLP | CSLP | RSVD | Roam | RSVD | DWLT | DFS | SUP |
+ * +------+-------------+-------------+-------------------------+
+ * | WAL | PS | Roam | Scan |
+ *
+ * bit 0: Avoid scan request from HLOS if setting
+ * bit 1: Skip DFS channel SCAN if setting
+ * bit 2-3: Define policy of dwell time/duration for each foreign channel
+ * (b2 b3)
+ * (0 0 ): Default scan dwell time
+ * (0 1 ): Reserve
+ * (1 0 ): Shrink off channel dwell time
+ * (1 1 ): Reserve
+ * bit 4-5: Reserve for scan
+ * bit 6-7: Define roaming policy
+ * (b6 b7)
+ * (0 0 ): Default roaming behavior, allow roaming in all scenarios
+ * (0 1 ): Disallow all roaming
+ * (1 0 ): Allow roaming when final bmissed
+ * (1 1 ): Reserve
+ * bit 8-9: Reserve for roaming
+ * bit 10: Disable css power collapse if setting
+ * bit 11: Disable sys sleep if setting
+ * bit 12-31: Reserve for future useage
+ *
+ *
+ */
+#define CFG_LATENCY_FLAGS_ULTLOW CFG_INI_UINT("wlm_latency_flags_ultralow",\
+ 0, \
+ 0xffffffff, \
+ 0xc8a, \
+ CFG_VALUE_OR_DEFAULT, \
+ "WLM flags for ultralow level")
+
+#define CFG_FE_WLM_ALL \
+ CFG(CFG_LATENCY_ENABLE) \
+ CFG(CFG_LATENCY_LEVEL) \
+ CFG(CFG_LATENCY_FLAGS_NORMAL) \
+ CFG(CFG_LATENCY_FLAGS_MOD) \
+ CFG(CFG_LATENCY_FLAGS_LOW) \
+ CFG(CFG_LATENCY_FLAGS_ULTLOW)
+
+#endif /* __CFG_MLME_FE_WLM_H */
diff --git a/mlme/dispatcher/inc/wlan_mlme_api.h b/mlme/dispatcher/inc/wlan_mlme_api.h
index 055d7d4256..14e2483d6c 100644
--- a/mlme/dispatcher/inc/wlan_mlme_api.h
+++ b/mlme/dispatcher/inc/wlan_mlme_api.h
@@ -1963,4 +1963,14 @@ wlan_mlme_get_mcc_rts_cts_prot(struct wlan_objmgr_psoc *psoc,
QDF_STATUS
wlan_mlme_get_mcc_feature(struct wlan_objmgr_psoc *psoc,
uint8_t *value);
+
+/**
+ * wlan_mlme_get_rrm_enabled() - Get the RRM enabled ini
+ * @psoc: pointer to psoc object
+ * @value: pointer to the value which will be filled for the caller
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS wlan_mlme_get_rrm_enabled(struct wlan_objmgr_psoc *psoc,
+ bool *value);
#endif /* _WLAN_MLME_API_H_ */
diff --git a/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/mlme/dispatcher/inc/wlan_mlme_public_struct.h
index ea2508f519..c6366d2162 100644
--- a/mlme/dispatcher/inc/wlan_mlme_public_struct.h
+++ b/mlme/dispatcher/inc/wlan_mlme_public_struct.h
@@ -265,6 +265,9 @@ struct wlan_mlme_edca_params {
#define WLAN_CFG_MFR_PRODUCT_NAME_LEN (31)
#define WLAN_CFG_MFR_PRODUCT_VERSION_LEN (31)
+#define MLME_NUM_WLM_LATENCY_LEVEL 4
+#define MLME_RMENABLEDCAP_MAX_LEN 5
+
/**
* struct mlme_ht_capabilities_info - HT Capabilities Info
* @l_sig_tx_op_protection: L-SIG TXOP Protection Mechanism support
@@ -1699,6 +1702,30 @@ struct wlan_mlme_btm {
uint32_t btm_sticky_time;
};
+/**
+ * struct wlan_mlme_fe_wlm - WLM related configs
+ * @latency_enable: Flag to check if latency is enabled
+ * @latency_level: WLM latency level
+ * @latency_flags: WLM latency flags setting
+ */
+struct wlan_mlme_fe_wlm {
+ bool latency_enable;
+ uint8_t latency_level;
+ uint32_t latency_flags[MLME_NUM_WLM_LATENCY_LEVEL];
+};
+
+/**
+ * struct wlan_mlme_fe_rrm - RRM related configs
+ * @rrm_enabled: Flag to check if RRM is enabled
+ * @rrm_rand_interval: RRM randomization interval
+ * @rm_capability: RM enabled capabilities IE
+ */
+struct wlan_mlme_fe_rrm {
+ bool rrm_enabled;
+ uint8_t rrm_rand_interval;
+ uint8_t rm_capability[MLME_RMENABLEDCAP_MAX_LEN];
+};
+
/**
* struct wlan_mlme_cfg - MLME config items
* @chainmask_cfg: VHT chainmask related cfg items
@@ -1731,6 +1758,8 @@ struct wlan_mlme_btm {
* @wmm_params: WMM related CFG & INI Items
* @wps_params: WPS related CFG itmes
* @btm: BTM related CFG itmes
+ * @wlm_config: WLM related CFG items
+ * @rrm_config: RRM related CFG items
*/
struct wlan_mlme_cfg {
struct wlan_mlme_chainmask chainmask_cfg;
@@ -1765,6 +1794,8 @@ struct wlan_mlme_cfg {
struct wlan_mlme_wmm_params wmm_params;
struct wlan_mlme_wps_params wps_params;
struct wlan_mlme_btm btm;
+ struct wlan_mlme_fe_wlm wlm_config;
+ struct wlan_mlme_fe_rrm rrm_config;
};
#endif
diff --git a/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h
index 974ddce3a3..27d45e86ca 100644
--- a/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h
+++ b/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h
@@ -3194,4 +3194,18 @@ ucfg_mlme_get_mcc_feature(struct wlan_objmgr_psoc *psoc,
{
return wlan_mlme_get_mcc_feature(psoc, value);
}
+
+/**
+ * ucfg_wlan_mlme_get_rrm_enabled() - Get the rrm enabled
+ * @psoc: pointer to psoc object
+ * @value: Value that needs to be get from the caller
+ *
+ * Return: QDF Status
+ */
+static inline
+QDF_STATUS ucfg_wlan_mlme_get_rrm_enabled(struct wlan_objmgr_psoc *psoc,
+ bool *value)
+{
+ return wlan_mlme_get_rrm_enabled(psoc, value);
+}
#endif /* _WLAN_MLME_UCFG_API_H_ */
diff --git a/mlme/dispatcher/src/wlan_mlme_api.c b/mlme/dispatcher/src/wlan_mlme_api.c
index 2906cb778f..5b6d93068b 100644
--- a/mlme/dispatcher/src/wlan_mlme_api.c
+++ b/mlme/dispatcher/src/wlan_mlme_api.c
@@ -3178,3 +3178,18 @@ QDF_STATUS wlan_mlme_set_sap_uapsd_flag(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_SUCCESS;
}
+
+QDF_STATUS wlan_mlme_get_rrm_enabled(struct wlan_objmgr_psoc *psoc,
+ bool *value)
+{
+ 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 QDF_STATUS_E_FAILURE;
+ }
+ *value = mlme_obj->cfg.rrm_config.rrm_enabled;
+
+ return QDF_STATUS_SUCCESS;
+}