diff --git a/mlme/core/src/wlan_mlme_main.c b/mlme/core/src/wlan_mlme_main.c
index 7a39eae3aa..1f13adbd69 100644
--- a/mlme/core/src/wlan_mlme_main.c
+++ b/mlme/core/src/wlan_mlme_main.c
@@ -906,6 +906,10 @@ static void mlme_init_feature_flag_in_cfg(
feature_flags->mcc_bcast_prob_rsp = cfg_get(psoc,
CFG_FW_MCC_BCAST_PROB_RESP);
feature_flags->enable_mcc = cfg_get(psoc, CFG_MCC_FEATURE);
+ feature_flags->channel_bonding_mode_24ghz =
+ cfg_get(psoc, CFG_CHANNEL_BONDING_MODE_24GHZ);
+ feature_flags->channel_bonding_mode_5ghz =
+ cfg_get(psoc, CFG_CHANNEL_BONDING_MODE_5GHZ);
}
static void mlme_init_sap_protection_cfg(struct wlan_objmgr_psoc *psoc,
diff --git a/mlme/dispatcher/inc/cfg_mlme_feature_flag.h b/mlme/dispatcher/inc/cfg_mlme_feature_flag.h
index b8e27059b7..7b9e1b8097 100644
--- a/mlme/dispatcher/inc/cfg_mlme_feature_flag.h
+++ b/mlme/dispatcher/inc/cfg_mlme_feature_flag.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2019 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
@@ -158,6 +158,56 @@
CFG_VALUE_OR_DEFAULT, \
"Enable/Disable MCC feature.")
+/*
+ *
+ * gChannelBondingMode24GHz - Configures Channel Bonding in 24 GHz
+ * @Min: 0
+ * @Max: 10
+ * @Default: 0
+ *
+ * This ini is used to set default channel bonding mode 24GHZ
+ *
+ * Related: None
+ *
+ * Supported Feature: STA
+ *
+ * Usage: Internal/External
+ *
+ *
+ */
+#define CFG_CHANNEL_BONDING_MODE_24GHZ CFG_INI_UINT( \
+ "gChannelBondingMode24GHz", \
+ 0, \
+ 10, \
+ 0, \
+ CFG_VALUE_OR_DEFAULT, \
+ "Configures Channel Bonding in 24 GHz")
+
+/*
+ *
+ * gChannelBondingMode5GHz - Configures Channel Bonding in 5 GHz
+ * @Min: 0
+ * @Max: 10
+ * @Default: 0
+ *
+ * This ini is used to set default channel bonding mode 5GHZ
+ *
+ * Related: None
+ *
+ * Supported Feature: STA
+ *
+ * Usage: Internal/External
+ *
+ *
+ */
+#define CFG_CHANNEL_BONDING_MODE_5GHZ CFG_INI_UINT( \
+ "gChannelBondingMode5GHz", \
+ 0, \
+ 10, \
+ 0, \
+ CFG_VALUE_OR_DEFAULT, \
+ "Configures Channel Bonding in 5 GHz")
+
#define CFG_FEATURE_FLAG_ALL \
CFG(CFG_ACCEPT_SHORT_SLOT_ASSOC_ONLY) \
CFG(CFG_HCF_ENABLED) \
@@ -169,7 +219,9 @@
CFG(CFG_11G_SHORT_SLOT_TIME_ENABLED) \
CFG(CFG_CHANNEL_BONDING_MODE) \
CFG(CFG_BLOCK_ACK_ENABLED) \
- CFG(CFG_ENABLE_AMPDUPS)
+ CFG(CFG_ENABLE_AMPDUPS) \
+ CFG(CFG_CHANNEL_BONDING_MODE_24GHZ) \
+ CFG(CFG_CHANNEL_BONDING_MODE_5GHZ)
#endif /* __CFG_MLME_FEATURE_FLAG_H */
diff --git a/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/mlme/dispatcher/inc/wlan_mlme_public_struct.h
index 7fe41de971..e65c2bde62 100644
--- a/mlme/dispatcher/inc/wlan_mlme_public_struct.h
+++ b/mlme/dispatcher/inc/wlan_mlme_public_struct.h
@@ -893,11 +893,16 @@ struct wlan_mlme_rates {
* @enable_hcf: enable HCF feature
* @enable_rsn: enable RSN for connection
* @enable_short_preamble_11g: enable short preamble for 11g
+ * @enable_short_slot_time_11g
+ * @enable_ampdu: enable AMPDU feature
+ * @enable_mcc: enable MCC feature
+ * @mcc_rts_cts_prot: RTS-CTS protection in MCC
+ * @mcc_bcast_prob_rsp: broadcast Probe Response in MCC
* @channel_bonding_mode: channel bonding mode
* @enable_block_ack: enable block ack feature
- * @enable_ampdu: Enable AMPDU feature
+ * @channel_bonding_mode_24ghz: configures Channel Bonding in 24 GHz
+ * @channel_bonding_mode_5ghz: configures Channel Bonding in 5 GHz
*/
-
struct wlan_mlme_feature_flag {
bool accept_short_slot_assoc;
bool enable_hcf;
@@ -910,6 +915,8 @@ struct wlan_mlme_feature_flag {
uint8_t mcc_bcast_prob_rsp;
uint32_t channel_bonding_mode;
uint32_t enable_block_ack;
+ uint32_t channel_bonding_mode_24ghz;
+ uint32_t channel_bonding_mode_5ghz;
};
/*
diff --git a/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h
index 97b29c375f..008c79c9bc 100644
--- a/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h
+++ b/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h
@@ -3565,4 +3565,47 @@ ucfg_mlme_set_obss_detection_offload_enabled(struct wlan_objmgr_psoc *psoc,
QDF_STATUS
ucfg_mlme_set_obss_color_collision_offload_enabled(
struct wlan_objmgr_psoc *psoc, uint8_t value);
+
+/**
+ * ucfg_mlme_get_channel_bonding_24ghz() - get channel bonding mode of 24ghz
+ * @psoc: pointer to psoc object
+ * @value: pointer to the value which will be filled for the caller
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS
+ucfg_mlme_get_channel_bonding_24ghz(struct wlan_objmgr_psoc *psoc,
+ uint32_t *value);
+
+/**
+ * ucfg_mlme_set_channel_bonding_24ghz() - set channel bonding mode for 24ghz
+ * @psoc: pointer to psoc object
+ * @value: channel bonding mode
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS
+ucfg_mlme_set_channel_bonding_24ghz(struct wlan_objmgr_psoc *psoc,
+ uint32_t value);
+/**
+ * ucfg_mlme_get_channel_bonding_5ghz() - get channel bonding mode of 5ghz
+ * @psoc: pointer to psoc object
+ * @value: pointer to the value which will be filled for the caller
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS
+ucfg_mlme_get_channel_bonding_5ghz(struct wlan_objmgr_psoc *psoc,
+ uint32_t *value);
+
+/**
+ * ucfg_mlme_set_channel_bonding_5ghz() - set channel bonding mode for 5ghz
+ * @psoc: pointer to psoc object
+ * @value: channel bonding mode
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS
+ucfg_mlme_set_channel_bonding_5ghz(struct wlan_objmgr_psoc *psoc,
+ uint32_t value);
#endif /* _WLAN_MLME_UCFG_API_H_ */
diff --git a/mlme/dispatcher/src/wlan_mlme_ucfg_api.c b/mlme/dispatcher/src/wlan_mlme_ucfg_api.c
index 0289e6a491..047940c3f3 100644
--- a/mlme/dispatcher/src/wlan_mlme_ucfg_api.c
+++ b/mlme/dispatcher/src/wlan_mlme_ucfg_api.c
@@ -1534,3 +1534,66 @@ ucfg_mlme_set_obss_color_collision_offload_enabled(
return QDF_STATUS_SUCCESS;
}
+
+QDF_STATUS
+ucfg_mlme_get_channel_bonding_24ghz(struct wlan_objmgr_psoc *psoc,
+ uint32_t *val)
+{
+ struct wlan_mlme_psoc_obj *mlme_obj;
+
+ mlme_obj = mlme_get_psoc_obj(psoc);
+ if (!mlme_obj) {
+ *val = cfg_default(CFG_CHANNEL_BONDING_MODE_24GHZ);
+ return QDF_STATUS_E_INVAL;
+ }
+ *val = mlme_obj->cfg.feature_flags.channel_bonding_mode_24ghz;
+
+ return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS
+ucfg_mlme_set_channel_bonding_24ghz(struct wlan_objmgr_psoc *psoc,
+ uint32_t value)
+{
+ struct wlan_mlme_psoc_obj *mlme_obj;
+
+ mlme_obj = mlme_get_psoc_obj(psoc);
+ if (!mlme_obj)
+ return QDF_STATUS_E_INVAL;
+
+ mlme_obj->cfg.feature_flags.channel_bonding_mode_24ghz = value;
+
+ return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS
+ucfg_mlme_get_channel_bonding_5ghz(struct wlan_objmgr_psoc *psoc,
+ uint32_t *value)
+{
+ struct wlan_mlme_psoc_obj *mlme_obj;
+
+ mlme_obj = mlme_get_psoc_obj(psoc);
+ if (!mlme_obj) {
+ *value = cfg_default(CFG_CHANNEL_BONDING_MODE_5GHZ);
+ return QDF_STATUS_E_INVAL;
+ }
+ *value = mlme_obj->cfg.feature_flags.channel_bonding_mode_5ghz;
+
+ return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS
+ucfg_mlme_set_channel_bonding_5ghz(struct wlan_objmgr_psoc *psoc,
+ uint32_t value)
+{
+ struct wlan_mlme_psoc_obj *mlme_obj;
+
+ mlme_obj = mlme_get_psoc_obj(psoc);
+ if (!mlme_obj)
+ return QDF_STATUS_E_INVAL;
+
+ mlme_obj->cfg.feature_flags.channel_bonding_mode_5ghz = value;
+
+ return QDF_STATUS_SUCCESS;
+}
+