qcacld-3.0: Add support to send MWS-COEX configurations to FW
Add support to send below two MWS-COEX configurations to FW
1. Enable/disable MWS-COEX 4G (LTE) Quick FTDM
2. Set MWS-COEX 5G-NR power limit
Change-Id: I14656ced91c9dec2be85590e6f6c1e7497505a28
CRs-Fixed: 2265352
diff --git a/Kbuild b/Kbuild
index f2a6d7c..b30e82d 100644
--- a/Kbuild
+++ b/Kbuild
@@ -1881,6 +1881,9 @@
cppflags-y += -DBIG_ENDIAN_HOST
endif
+#Enable MWS COEX support for 4G quick TDM and 5G NR pwr limit
+cppflags-y += -DMWS_COEX
+
#Enable TX reclaim support
cppflags-$(CONFIG_TX_CREDIT_RECLAIM_SUPPORT) += -DTX_CREDIT_RECLAIM_SUPPORT
diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h
index 8439339..6d9d2af 100644
--- a/core/hdd/inc/wlan_hdd_cfg.h
+++ b/core/hdd/inc/wlan_hdd_cfg.h
@@ -13894,6 +13894,58 @@
#define CFG_NUM_VDEV_ENABLE_MAX (0x4)
#define CFG_NUM_VDEV_ENABLE_DEFAULT (CFG_TGT_NUM_VDEV)
+#ifdef MWS_COEX
+/*
+ * <ini>
+ * gMwsCoex4gQuickTdm - Bitmap to control MWS-COEX 4G quick FTDM policy
+ * @Min: 0x00000000
+ * @Max: 0xFFFFFFFF
+ * @Default: 0x00000000
+ *
+ * It is a 32 bit value such that the various bits represent as below:
+ * Bit-0 : 0 - Don't allow quick FTDM policy (Default)
+ * 1 - Allow quick FTDM policy
+ * Bit 1-31 : reserved for future use
+ *
+ * It is used to enable or disable MWS-COEX 4G (LTE) Quick FTDM
+ *
+ * Usage: Internal
+ *
+ * </ini>
+ */
+
+#define CFG_MWS_COEX_4G_QUICK_FTDM_NAME "gMwsCoex4gQuickTdm"
+#define CFG_MWS_COEX_4G_QUICK_FTDM_MIN (0x00000000)
+#define CFG_MWS_COEX_4G_QUICK_FTDM_MAX (0xFFFFFFFF)
+#define CFG_MWS_COEX_4G_QUICK_FTDM_DEFAULT (0x00000000)
+
+/*
+ * <ini>
+ * gMwsCoex5gnrPwrLimit - Bitmap to set MWS-COEX 5G-NR power limit
+ * @Min: 0x00000000
+ * @Max: 0xFFFFFFFF
+ * @Default: 0x00000000
+ *
+ * It is a 32 bit value such that the various bits represent as below:
+ * Bit-0 : Don't apply user specific power limit,
+ * use internal power limit (Default)
+ * Bit 1-2 : Invalid value (Ignored)
+ * Bit 3-21 : Apply the specified value as the external power limit, in dBm
+ * Bit 22-31 : Invalid value (Ignored)
+ *
+ * It is used to set MWS-COEX 5G-NR power limit
+ *
+ * Usage: Internal
+ *
+ * </ini>
+ */
+
+#define CFG_MWS_COEX_5G_NR_PWR_LIMIT_NAME "gMwsCoex5gnrPwrLimit"
+#define CFG_MWS_COEX_5G_NR_PWR_LIMIT_MIN (0x00000000)
+#define CFG_MWS_COEX_5G_NR_PWR_LIMIT_MAX (0xFFFFFFFF)
+#define CFG_MWS_COEX_5G_NR_PWR_LIMIT_DEFAULT (0x00000000)
+#endif
+
/*
* <ini>
* gEnableChangeChannelBandWidth - Enable/Disable change
@@ -13983,6 +14035,14 @@
/* Bitmap for operating voltage corner mode */
uint32_t vc_mode_cfg_bitmap;
+#ifdef MWS_COEX
+ /* Bitmap for MWS-COEX 4G Quick FTDM */
+ uint32_t mws_coex_4g_quick_tdm;
+
+ /* Bitmap for MWS-COEX 5G-NR power limit */
+ uint32_t mws_coex_5g_nr_pwr_limit;
+#endif
+
uint16_t nNeighborScanPeriod;
uint16_t neighbor_scan_min_period;
uint8_t nNeighborLookupRssiThreshold;
diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c
index a411eee..1d5d534 100644
--- a/core/hdd/src/wlan_hdd_cfg.c
+++ b/core/hdd/src/wlan_hdd_cfg.c
@@ -5301,6 +5301,20 @@
CFG_CHANGE_CHANNEL_BANDWIDTH_DEFAULT,
CFG_CHANGE_CHANNEL_BANDWIDTH_MIN,
CFG_CHANGE_CHANNEL_BANDWIDTH_MAX),
+#ifdef MWS_COEX
+ REG_VARIABLE(CFG_MWS_COEX_4G_QUICK_FTDM_NAME, WLAN_PARAM_HexInteger,
+ struct hdd_config, mws_coex_4g_quick_tdm,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_MWS_COEX_4G_QUICK_FTDM_DEFAULT,
+ CFG_MWS_COEX_4G_QUICK_FTDM_MIN,
+ CFG_MWS_COEX_4G_QUICK_FTDM_MAX),
+ REG_VARIABLE(CFG_MWS_COEX_5G_NR_PWR_LIMIT_NAME, WLAN_PARAM_HexInteger,
+ struct hdd_config, mws_coex_5g_nr_pwr_limit,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_MWS_COEX_5G_NR_PWR_LIMIT_DEFAULT,
+ CFG_MWS_COEX_5G_NR_PWR_LIMIT_MIN,
+ CFG_MWS_COEX_5G_NR_PWR_LIMIT_MAX),
+#endif
};
diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c
index 7a48e04..baedd17 100644
--- a/core/hdd/src/wlan_hdd_main.c
+++ b/core/hdd/src/wlan_hdd_main.c
@@ -10256,6 +10256,44 @@
}
#endif
+#ifdef MWS_COEX
+/**
+ * hdd_set_mws_coex() - Set MWS coex configurations
+ * @hdd_ctx: HDD context
+ *
+ * This function sends MWS-COEX 4G quick FTDM and
+ * MWS-COEX 5G-NR power limit to FW
+ *
+ * Return: 0 on success and errno on failure.
+ */
+static int hdd_init_mws_coex(struct hdd_context *hdd_ctx)
+{
+ int ret = 0;
+
+ ret = sme_cli_set_command(0, WMI_PDEV_PARAM_MWSCOEX_4G_ALLOW_QUICK_FTDM,
+ hdd_ctx->config->mws_coex_4g_quick_tdm,
+ PDEV_CMD);
+ if (ret) {
+ hdd_warn("Unable to send MWS-COEX 4G quick FTDM policy");
+ return ret;
+ }
+
+ ret = sme_cli_set_command(0, WMI_PDEV_PARAM_MWSCOEX_SET_5GNR_PWR_LIMIT,
+ hdd_ctx->config->mws_coex_5g_nr_pwr_limit,
+ PDEV_CMD);
+ if (ret) {
+ hdd_warn("Unable to send MWS-COEX 4G quick FTDM policy");
+ return ret;
+ }
+ return ret;
+}
+#else
+static int hdd_init_mws_coex(struct hdd_context *hdd_ctx)
+{
+ return 0;
+}
+#endif
+
/**
* hdd_features_init() - Init features
* @hdd_ctx: HDD context
@@ -10275,6 +10313,10 @@
hdd_enter();
+ ret = hdd_init_mws_coex(hdd_ctx);
+ if (ret)
+ hdd_warn("Error initializing mws-coex");
+
cfg = hdd_ctx->config;
/* FW capabilities received, Set the Dot11 mode */
mac_handle = hdd_ctx->mac_handle;