Browse Source

qcacmn: Add API to update cmn vdev mlme structures

Add API to update cmn vdev mlme structures,
with the addition of new members to the new mlme
vdev structure,new api's are required to update
those members which will be subsequently used the
new mlme target if layer to send commands to the firmware

Change-Id: I9618613c0ad00f78003cd32951b30b631934ba71
Akshay Kosigi 6 years ago
parent
commit
1726ae21c5

+ 85 - 0
os_if/linux/mlme/inc/wlan_cfg80211_vdev_mlme.h

@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 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
+ * 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: wlan_cfg80211_vdev_mlme.h
+ *
+ * This header file provide API declarations for osif layer
+ * to get and set vdev mgr mlme structure parameters
+ */
+
+#ifndef __WLAN_CFG80211_VDEV_MLME_H__
+#define __WLAN_CFG80211_VDEV_MLME_H__
+#include <wlan_objmgr_vdev_obj.h>
+#include <qdf_nbuf.h>
+#include "include/wlan_vdev_mlme.h"
+
+/**
+ * wlan_cfg80211_vdev_mlme_get_param_ssid() – cfg80211 MLME API to
+ * get ssid
+ * @vdev: pointer to vdev object
+ * @ssid: pointer to store the ssid
+ * @ssid_len: pointer to store the ssid length value
+ *
+ * Return: 0 on success, negative value on failure
+ */
+int
+wlan_cfg80211_vdev_mlme_get_param_ssid(struct wlan_objmgr_vdev *vdev,
+				       uint8_t *ssid,
+				       uint8_t *ssid_len);
+
+/**
+ * wlan_cfg80211_vdev_mlme_get_trans_bssid() – cfg80211 MLME API to
+ * get trans bssid
+ * @vdev: pointer to vdev object
+ * @addr: pointer to store the addr of the transmission bssid
+ *
+ * Return: 0 on success, negative value on failure
+ */
+int
+wlan_cfg80211_vdev_mlme_get_trans_bssid(struct wlan_objmgr_vdev *vdev,
+					uint8_t *addr);
+
+/**
+ * wlan_cfg80211_vdev_mlme_set_param() – cfg80211 MLME API to fill common
+ * parameters of vdev_mlme object
+ * @vdev: pointer to vdev object
+ * @param_id: param id for which the value should be set
+ * @mlme_cfg: structure of a union to set the parameter
+ *
+ * Return: void
+ */
+void
+wlan_cfg80211_vdev_mlme_set_param(struct wlan_objmgr_vdev *vdev,
+				  enum wlan_mlme_cfg_id param_id,
+				  struct wlan_vdev_mgr_cfg mlme_cfg);
+
+/**
+ * wlan_cfg80211_vdev_mlme_get_param() – cfg80211 MLME API to get common
+ * parameters of vdev_mlme object
+ * @vdev: pointer to vdev object
+ * @param_id: param id for which the value should be set
+ * @value: pointer to store the value of the req vdev_mlme object
+ *
+ * Return: void
+ */
+void
+wlan_cfg80211_vdev_mlme_get_param(struct wlan_objmgr_vdev *vdev,
+				  enum wlan_mlme_cfg_id param_id,
+				  uint32_t *value);
+#endif /* __WLAN_CFG80211_VDEV_MLME_H__ */

+ 79 - 0
os_if/linux/mlme/src/wlan_cfg80211_vdev_mlme.c

@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 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
+ * 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: wlan_cfg80211_vdev_mlme.c
+ *
+ * This file provide API definitions for osif layer
+ * to get and set vdev mgr mlme structure parameters
+ */
+
+#include <wlan_cfg80211_vdev_mlme.h>
+
+int
+wlan_cfg80211_vdev_mlme_get_param_ssid(struct wlan_objmgr_vdev *vdev,
+				       uint8_t *ssid,
+				       uint8_t *ssid_len)
+{
+	if (!vdev) {
+		cfg80211_err("VDEV is NULL!!!!");
+		return qdf_status_to_os_return(QDF_STATUS_E_FAILURE);
+	}
+
+	ucfg_wlan_vdev_mgr_get_param_ssid(vdev, ssid, ssid_len);
+	return qdf_status_to_os_return(QDF_STATUS_SUCCESS);
+}
+
+int
+wlan_cfg80211_vdev_mlme_get_trans_bssid(struct wlan_objmgr_vdev *vdev,
+					uint8_t *addr)
+{
+	if (!vdev) {
+		cfg80211_err("VDEV is NULL!!!!");
+		return qdf_status_to_os_return(QDF_STATUS_E_FAILURE);
+	}
+
+	ucfg_wlan_vdev_mlme_get_trans_bssid(vdev, addr);
+	return qdf_status_to_os_return(QDF_STATUS_SUCCESS);
+}
+
+void
+wlan_cfg80211_vdev_mlme_set_param(struct wlan_objmgr_vdev *vdev,
+				  enum wlan_mlme_cfg_id param_id,
+				  struct wlan_vdev_mgr_cfg mlme_cfg)
+{
+	if (!vdev) {
+		cfg80211_err("VDEV is NULL!!!!");
+		return;
+	}
+
+	ucfg_wlan_vdev_mgr_set_param(vdev, param_id, mlme_cfg);
+}
+
+void
+wlan_cfg80211_vdev_mlme_get_param(struct wlan_objmgr_vdev *vdev,
+				  enum wlan_mlme_cfg_id param_id,
+				  uint32_t *value)
+{
+	if (!vdev) {
+		cfg80211_err("VDEV is NULL!!!!");
+		return;
+	}
+
+	ucfg_wlan_vdev_mgr_get_param(vdev, param_id, value);
+}

+ 6 - 2
target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_tx_ops.c

@@ -125,6 +125,7 @@ target_if_vdev_mlme_id_2_wmi(uint32_t cfg_id)
 	case WLAN_MLME_CFG_MUBFEE:
 	case WLAN_MLME_CFG_IMLICIT_BF:
 	case WLAN_MLME_CFG_SOUNDING_DIM:
+	case WLAN_MLME_CFG_TXBF_CAPS:
 		wmi_id = wmi_vdev_param_txbf;
 		break;
 	case WLAN_MLME_CFG_HE_OPS:
@@ -163,6 +164,9 @@ target_if_vdev_mlme_id_2_wmi(uint32_t cfg_id)
 	case WLAN_MLME_CFG_UAPSD:
 		wmi_id = WMI_HOST_STA_PS_PARAM_UAPSD;
 		break;
+	case WLAN_MLME_CFG_BCN_TX_RATE:
+		wmi_id = wmi_vdev_param_beacon_rate;
+		break;
 	default:
 		wmi_id = cfg_id;
 		break;
@@ -782,8 +786,8 @@ static QDF_STATUS target_if_vdev_mgr_sta_ps_param_send(
 		return QDF_STATUS_E_INVAL;
 	}
 
-	param_id = target_if_vdev_mlme_id_2_wmi(param->param);
-	param->param = param_id;
+	param_id = target_if_vdev_mlme_id_2_wmi(param->param_id);
+	param->param_id = param_id;
 
 	status = wmi_unified_sta_ps_cmd_send(wmi_handle, param);
 

+ 2 - 0
umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h

@@ -185,6 +185,8 @@
 #define WLAN_SOC_F_MBSS_IE_ENABLE      0x00800000
 	/* Spectral disable */
 #define WLAN_SOC_F_SPECTRAL_DISABLE    0x01000000
+	/* FTM testmode enable */
+#define WLAN_SOC_F_TESTMODE_ENABLE     0x02000000
 
 /* PSOC op flags */
 

+ 432 - 65
umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h

@@ -32,6 +32,11 @@
 #include "wlan_objmgr_pdev_obj.h"
 #include "wlan_objmgr_psoc_obj.h"
 #include "wlan_vdev_mlme_main.h"
+#ifdef CMN_VDEV_MGR_TGT_IF_ENABLE
+#include "include/wlan_vdev_mlme.h"
+#include "wlan_vdev_mlme_api.h"
+#include "wlan_mlme_dbg.h"
+#endif
 
 	/* CONF: privacy enabled */
 #define WLAN_VDEV_F_PRIVACY              0x00000001
@@ -278,21 +283,21 @@ struct wlan_channel {
  * @mlme_state:         VDEV MLME SM substate
  * @bss_chan:           BSS channel
  * @des_chan:           Desired channel, for STA Desired may not be used
- * @nss:                Num. Spatial streams
- * @tx_chainmask:       Tx Chainmask
- * @rx_chainmask:       Rx Chainmask
- * @tx_power:           Tx power
  * @vdev_caps:          VDEV capabilities
  * @vdev_feat_caps:     VDEV feature caps
  * @vdev_feat_ext_caps: VDEV Extended feature caps
- * @max_rate:           MAX rate
- * @tx_mgmt_rate:       TX Mgmt. Rate
- * @per_band_mgmt_rate: Per-band TX Mgmt. Rate
  * @vdev_op_flags:      Operation flags
  * @mataddr[]:          MAT address
  * @macaddr[]:          VDEV self MAC address
  * @ssid[]:             SSID
  * @ssid_len:           SSID length
+ * @nss:                Num. Spatial streams
+ * @tx_chainmask:       Tx Chainmask
+ * @rx_chainmask:       Rx Chainmask
+ * @tx_power:           Tx power
+ * @max_rate:           MAX rate
+ * @tx_mgmt_rate:       TX Mgmt. Rate
+ * @per_band_mgmt_rate: Per-band TX Mgmt. Rate
  */
 struct wlan_objmgr_vdev_mlme {
 	enum QDF_OPMODE vdev_opmode;
@@ -300,21 +305,23 @@ struct wlan_objmgr_vdev_mlme {
 	enum wlan_vdev_state mlme_substate;
 	struct wlan_channel *bss_chan;
 	struct wlan_channel *des_chan;
-	uint8_t nss;
-	uint8_t tx_chainmask;
-	uint8_t rx_chainmask;
-	uint8_t  tx_power;
 	uint32_t vdev_caps;
 	uint32_t vdev_feat_caps;
 	uint32_t vdev_feat_ext_caps;
-	uint32_t max_rate;
-	uint32_t tx_mgmt_rate;
-	uint32_t per_band_mgmt_rate[WLAN_BAND_NUM_MAX];
 	uint32_t vdev_op_flags;
 	uint8_t  mataddr[QDF_MAC_ADDR_SIZE];
 	uint8_t  macaddr[QDF_MAC_ADDR_SIZE];
-	char ssid[WLAN_SSID_MAX_LEN+1];
+#ifndef CMN_VDEV_MGR_TGT_IF_ENABLE
+	char ssid[WLAN_SSID_MAX_LEN + 1];
 	uint8_t ssid_len;
+	uint8_t nss;
+	uint8_t tx_chainmask;
+	uint8_t rx_chainmask;
+	uint8_t  tx_power;
+	uint32_t max_rate;
+	uint32_t tx_mgmt_rate;
+	uint32_t per_band_mgmt_rate[WLAN_BAND_NUM_MAX];
+#endif
 };
 
 /**
@@ -803,6 +810,98 @@ static inline uint8_t *wlan_vdev_get_hw_macaddr(struct wlan_objmgr_vdev *vdev)
 		return NULL;
 }
 
+/**
+ * wlan_vdev_obj_lock() - Acquire VDEV spinlock
+ * @vdev: VDEV object
+ *
+ * API to acquire VDEV lock
+ * Parent lock should not be taken in child lock context
+ * but child lock can be taken in parent lock context
+ * (for ex: psoc lock can't be invoked in pdev/vdev/peer lock context)
+ *
+ * Return: void
+ */
+static inline void wlan_vdev_obj_lock(struct wlan_objmgr_vdev *vdev)
+{
+	qdf_spin_lock_bh(&vdev->vdev_lock);
+}
+
+/**
+ * wlan_vdev_obj_unlock() - Release VDEV spinlock
+ * @vdev: VDEV object
+ *
+ * API to Release VDEV lock
+ *
+ * Return: void
+ */
+static inline void wlan_vdev_obj_unlock(struct wlan_objmgr_vdev *vdev)
+{
+	qdf_spin_unlock_bh(&vdev->vdev_lock);
+}
+
+/**
+ * wlan_vdev_mlme_set_bss_chan() - set bss chan
+ * @vdev: VDEV object
+ * @bss_chan: Channel
+ *
+ * API to set the BSS channel
+ *
+ * Return: void
+ */
+static inline void wlan_vdev_mlme_set_bss_chan(
+				struct wlan_objmgr_vdev *vdev,
+				struct wlan_channel *bss_chan)
+{
+	vdev->vdev_mlme.bss_chan = bss_chan;
+}
+
+/**
+ * wlan_vdev_mlme_get_bss_chan() - get bss chan
+ * @vdev: VDEV object
+ *
+ * API to get the BSS channel
+ *
+ * Return:
+ * @bss_chan: Channel
+ */
+static inline struct wlan_channel *wlan_vdev_mlme_get_bss_chan(
+				struct wlan_objmgr_vdev *vdev)
+{
+	return vdev->vdev_mlme.bss_chan;
+}
+
+/**
+ * wlan_vdev_mlme_set_des_chan() - set desired chan
+ * @vdev: VDEV object
+ * @des_chan: Channel configured by user
+ *
+ * API to set the desired channel
+ *
+ * Return: void
+ */
+static inline void wlan_vdev_mlme_set_des_chan(
+				struct wlan_objmgr_vdev *vdev,
+				struct wlan_channel *des_chan)
+{
+	vdev->vdev_mlme.des_chan = des_chan;
+}
+
+/**
+ * wlan_vdev_mlme_get_des_chan() - get desired chan
+ * @vdev: VDEV object
+ *
+ * API to get the desired channel
+ *
+ * Return:
+ * @des_chan: Channel configured by user
+ */
+static inline struct wlan_channel *wlan_vdev_mlme_get_des_chan(
+				struct wlan_objmgr_vdev *vdev)
+{
+	return vdev->vdev_mlme.des_chan;
+}
+
+#ifdef CMN_VDEV_MGR_TGT_IF_ENABLE
 /**
  * wlan_vdev_mlme_set_ssid() - set ssid
  * @vdev: VDEV object
@@ -820,12 +919,18 @@ static inline QDF_STATUS wlan_vdev_mlme_set_ssid(
 				struct wlan_objmgr_vdev *vdev,
 				const uint8_t *ssid, uint8_t ssid_len)
 {
+	struct vdev_mlme_obj *vdev_mlme;
+
 	/* This API is invoked with lock acquired, do not add log prints */
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme)
+		return QDF_STATUS_E_FAILURE;
+
 	if (ssid_len <= WLAN_SSID_MAX_LEN) {
-		qdf_mem_copy(vdev->vdev_mlme.ssid, ssid, ssid_len);
-		vdev->vdev_mlme.ssid_len = ssid_len;
+		qdf_mem_copy(vdev_mlme->mgmt.generic.ssid, ssid, ssid_len);
+		vdev_mlme->mgmt.generic.ssid_len = ssid_len;
 	} else {
-		vdev->vdev_mlme.ssid_len = 0;
+		vdev_mlme->mgmt.generic.ssid_len = 0;
 		return QDF_STATUS_E_FAILURE;
 	}
 	return QDF_STATUS_SUCCESS;
@@ -849,10 +954,16 @@ static inline QDF_STATUS wlan_vdev_mlme_get_ssid(
 				struct wlan_objmgr_vdev *vdev,
 				 uint8_t *ssid, uint8_t *ssid_len)
 {
+	struct vdev_mlme_obj *vdev_mlme;
+
 	/* This API is invoked with lock acquired, do not add log prints */
-	if (vdev->vdev_mlme.ssid_len > 0) {
-		*ssid_len = vdev->vdev_mlme.ssid_len;
-		qdf_mem_copy(ssid, vdev->vdev_mlme.ssid, *ssid_len);
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme)
+		return QDF_STATUS_E_FAILURE;
+
+	if (vdev_mlme->mgmt.generic.ssid_len > 0) {
+		*ssid_len = vdev_mlme->mgmt.generic.ssid_len;
+		qdf_mem_copy(ssid, vdev_mlme->mgmt.generic.ssid, *ssid_len);
 	} else {
 		*ssid_len = 0;
 		return QDF_STATUS_E_FAILURE;
@@ -861,92 +972,342 @@ static inline QDF_STATUS wlan_vdev_mlme_get_ssid(
 }
 
 /**
- * wlan_vdev_obj_lock() - Acquire VDEV spinlock
+ * wlan_vdev_mlme_set_nss() - set NSS
  * @vdev: VDEV object
+ * @nss: nss configured by user
  *
- * API to acquire VDEV lock
- * Parent lock should not be taken in child lock context
- * but child lock can be taken in parent lock context
- * (for ex: psoc lock can't be invoked in pdev/vdev/peer lock context)
+ * API to set the Number of Spatial streams
  *
  * Return: void
  */
-static inline void wlan_vdev_obj_lock(struct wlan_objmgr_vdev *vdev)
+static inline void wlan_vdev_mlme_set_nss(
+				struct wlan_objmgr_vdev *vdev,
+				uint8_t nss)
 {
-	qdf_spin_lock_bh(&vdev->vdev_lock);
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme) {
+		mlme_err("VDEV MLME is NULL");
+		return;
+	}
+
+	vdev_mlme->proto.generic.nss = nss;
 }
 
 /**
- * wlan_vdev_obj_unlock() - Release VDEV spinlock
+ * wlan_vdev_mlme_get_nss() - get NSS
  * @vdev: VDEV object
  *
- * API to Release VDEV lock
+ * API to get the Number of Spatial Streams
+ *
+ * Return:
+ * @nss: nss value
+ */
+static inline uint8_t wlan_vdev_mlme_get_nss(
+				struct wlan_objmgr_vdev *vdev)
+{
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme) {
+		mlme_err("VDEV MLME is NULL");
+		return 0;
+	}
+
+	return vdev_mlme->proto.generic.nss;
+}
+
+/**
+ * wlan_vdev_mlme_set_txchainmask() - set Tx chainmask
+ * @vdev: VDEV object
+ * @chainmask : chainmask either configured by user or max supported
+ *
+ * API to set the Tx chainmask
  *
  * Return: void
  */
-static inline void wlan_vdev_obj_unlock(struct wlan_objmgr_vdev *vdev)
+static inline void wlan_vdev_mlme_set_txchainmask(
+				struct wlan_objmgr_vdev *vdev,
+				uint8_t chainmask)
 {
-	qdf_spin_unlock_bh(&vdev->vdev_lock);
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+
+	if (!vdev_mlme) {
+		mlme_err("VDEV MLME is NULL");
+		return;
+	}
+
+	vdev_mlme->mgmt.chainmask_info.tx_chainmask = chainmask;
 }
 
 /**
- * wlan_vdev_mlme_set_bss_chan() - set bss chan
+ * wlan_vdev_mlme_get_txchainmask() - get Tx chainmask
  * @vdev: VDEV object
- * @bss_chan: Channel
  *
- * API to set the BSS channel
+ * API to get the Tx chainmask
+ *
+ * Return:
+ * @chainmask : Tx chainmask either configured by user or max supported
+ */
+static inline uint8_t wlan_vdev_mlme_get_txchainmask(
+				struct wlan_objmgr_vdev *vdev)
+{
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme) {
+		mlme_err("VDEV MLME is NULL");
+		return 0;
+	}
+
+	return vdev_mlme->mgmt.chainmask_info.tx_chainmask;
+}
+
+/**
+ * wlan_vdev_mlme_set_rxchainmask() - set Rx chainmask
+ * @vdev: VDEV object
+ * @chainmask : Rx chainmask either configured by user or max supported
+ *
+ * API to set the Rx chainmask
  *
  * Return: void
  */
-static inline void wlan_vdev_mlme_set_bss_chan(struct wlan_objmgr_vdev *vdev,
-			struct wlan_channel *bss_chan)
+static inline void wlan_vdev_mlme_set_rxchainmask(
+				struct wlan_objmgr_vdev *vdev,
+				uint8_t chainmask)
 {
-	vdev->vdev_mlme.bss_chan = bss_chan;
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme) {
+		mlme_err("VDEV MLME is NULL");
+		return;
+	}
+
+	vdev_mlme->mgmt.chainmask_info.rx_chainmask = chainmask;
 }
 
 /**
- * wlan_vdev_mlme_get_bss_chan() - get bss chan
+ * wlan_vdev_mlme_get_rxchainmask() - get Rx chainmask
  * @vdev: VDEV object
  *
- * API to get the BSS channel
+ * API to get the Rx chainmask
  *
  * Return:
- * @bss_chan: Channel
+ * @chainmask : Rx chainmask either configured by user or max supported
  */
-static inline struct wlan_channel *wlan_vdev_mlme_get_bss_chan(
+static inline uint8_t wlan_vdev_mlme_get_rxchainmask(
 				struct wlan_objmgr_vdev *vdev)
 {
-	return vdev->vdev_mlme.bss_chan;
+	struct vdev_mlme_obj *vdev_mlme;
+
+	/* This API is invoked with lock acquired, do not add log prints */
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme)
+		return 0;
+
+	return vdev_mlme->mgmt.chainmask_info.rx_chainmask;
 }
 
 /**
- * wlan_vdev_mlme_set_des_chan() - set desired chan
+ * wlan_vdev_mlme_set_txpower() - set tx power
  * @vdev: VDEV object
- * @des_chan: Channel configured by user
+ * @txpow: tx power either configured by used or max allowed
  *
- * API to set the desired channel
+ * API to set the tx power
  *
  * Return: void
  */
-static inline void wlan_vdev_mlme_set_des_chan(struct wlan_objmgr_vdev *vdev,
-			struct wlan_channel *des_chan)
+static inline void wlan_vdev_mlme_set_txpower(
+					struct wlan_objmgr_vdev *vdev,
+					uint8_t txpow)
 {
-	vdev->vdev_mlme.des_chan = des_chan;
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme) {
+		mlme_err("VDEV MLME is NULL");
+		return;
+	}
+
+	vdev_mlme->mgmt.generic.tx_power = txpow;
 }
 
 /**
- * wlan_vdev_mlme_get_des_chan() - get desired chan
+ * wlan_vdev_mlme_get_txpower() - get tx power
  * @vdev: VDEV object
  *
- * API to get the desired channel
+ * API to get the tx power
  *
  * Return:
- * @des_chan: Channel configured by user
+ * @txpow: tx power either configured by used or max allowed
  */
-static inline struct wlan_channel *wlan_vdev_mlme_get_des_chan(
+static inline uint8_t wlan_vdev_mlme_get_txpower(
 				struct wlan_objmgr_vdev *vdev)
 {
-	return vdev->vdev_mlme.des_chan;
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme) {
+		mlme_err("VDEV MLME is NULL");
+		return 0;
+	}
+
+	return vdev_mlme->mgmt.generic.tx_power;
+}
+
+/**
+ * wlan_vdev_mlme_set_maxrate() - set max rate
+ * @vdev: VDEV object
+ * @maxrate: configured by used or based on configured mode
+ *
+ * API to set the max rate the vdev supports
+ *
+ * Return: void
+ */
+static inline void wlan_vdev_mlme_set_maxrate(
+				struct wlan_objmgr_vdev *vdev,
+				uint32_t maxrate)
+{
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme) {
+		mlme_err("VDEV MLME is NULL");
+		return;
+	}
+
+	vdev_mlme->mgmt.rate_info.max_rate = maxrate;
+}
+
+/**
+ * wlan_vdev_mlme_get_maxrate() - get max rate
+ * @vdev: VDEV object
+ *
+ * API to get the max rate the vdev supports
+ *
+ * Return:
+ * @maxrate: configured by used or based on configured mode
+ */
+static inline uint32_t wlan_vdev_mlme_get_maxrate(
+				struct wlan_objmgr_vdev *vdev)
+{
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme) {
+		mlme_err("VDEV MLME is NULL");
+		return 0;
+	}
+
+	return vdev_mlme->mgmt.rate_info.max_rate;
+}
+
+/**
+ * wlan_vdev_mlme_set_txmgmtrate() - set txmgmtrate
+ * @vdev: VDEV object
+ * @txmgmtrate: Tx Mgmt rate
+ *
+ * API to set Mgmt Tx rate
+ *
+ * Return: void
+ */
+static inline void wlan_vdev_mlme_set_txmgmtrate(
+				struct wlan_objmgr_vdev *vdev,
+				uint32_t txmgmtrate)
+{
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme) {
+		mlme_err("VDEV MLME is NULL");
+		return;
+	}
+	vdev_mlme->mgmt.rate_info.tx_mgmt_rate = txmgmtrate;
+}
+
+/**
+ * wlan_vdev_mlme_get_txmgmtrate() - get txmgmtrate
+ * @vdev: VDEV object
+ *
+ * API to get Mgmt Tx rate
+ *
+ * Return:
+ * @txmgmtrate: Tx Mgmt rate
+ */
+static inline uint32_t wlan_vdev_mlme_get_txmgmtrate(
+				struct wlan_objmgr_vdev *vdev)
+{
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme) {
+		mlme_err("VDEV MLME is NULL");
+		return 0;
+	}
+
+	return vdev_mlme->mgmt.rate_info.tx_mgmt_rate;
+}
+#else
+
+/**
+ * wlan_vdev_mlme_set_ssid() - set ssid
+ * @vdev: VDEV object
+ * @ssid: SSID (input)
+ * @ssid_len: Length of SSID
+ *
+ * API to set the SSID of VDEV
+ *
+ * Caller need to acquire lock with wlan_vdev_obj_lock()
+ *
+ * Return: SUCCESS, if update is done
+ *          FAILURE, if ssid length is > max ssid len
+ */
+static inline QDF_STATUS wlan_vdev_mlme_set_ssid(
+				struct wlan_objmgr_vdev *vdev,
+				const uint8_t *ssid, uint8_t ssid_len)
+{
+	/* This API is invoked with lock acquired, do not add log prints */
+	if (ssid_len <= WLAN_SSID_MAX_LEN) {
+		qdf_mem_copy(vdev->vdev_mlme.ssid, ssid, ssid_len);
+		vdev->vdev_mlme.ssid_len = ssid_len;
+	} else {
+		vdev->vdev_mlme.ssid_len = 0;
+		return QDF_STATUS_E_FAILURE;
+	}
+	return QDF_STATUS_SUCCESS;
+}
+
+/**
+ * wlan_vdev_mlme_get_ssid() - get ssid
+ * @vdev: VDEV object
+ * @ssid: SSID
+ * @ssid_len: Length of SSID
+ *
+ * API to get the SSID of VDEV, it updates the SSID and its length
+ * in @ssid, @ssid_len respectively
+ *
+ * Caller need to acquire lock with wlan_vdev_obj_lock()
+ *
+ * Return: SUCCESS, if update is done
+ *          FAILURE, if ssid length is > max ssid len
+ */
+static inline QDF_STATUS wlan_vdev_mlme_get_ssid(
+				struct wlan_objmgr_vdev *vdev,
+				 uint8_t *ssid, uint8_t *ssid_len)
+{
+	/* This API is invoked with lock acquired, do not add log prints */
+	if (vdev->vdev_mlme.ssid_len > 0) {
+		*ssid_len = vdev->vdev_mlme.ssid_len;
+		qdf_mem_copy(ssid, vdev->vdev_mlme.ssid, *ssid_len);
+	} else {
+		*ssid_len = 0;
+		return QDF_STATUS_E_FAILURE;
+	}
+	return QDF_STATUS_SUCCESS;
 }
 
 /**
@@ -959,7 +1320,7 @@ static inline struct wlan_channel *wlan_vdev_mlme_get_des_chan(
  * Return: void
  */
 static inline void wlan_vdev_mlme_set_nss(struct wlan_objmgr_vdev *vdev,
-			uint8_t nss)
+					  uint8_t nss)
 {
 	vdev->vdev_mlme.nss = nss;
 }
@@ -988,8 +1349,9 @@ static inline uint8_t wlan_vdev_mlme_get_nss(
  *
  * Return: void
  */
-static inline void wlan_vdev_mlme_set_txchainmask(struct wlan_objmgr_vdev *vdev,
-			uint8_t chainmask)
+static inline void wlan_vdev_mlme_set_txchainmask(
+				struct wlan_objmgr_vdev *vdev,
+				uint8_t chainmask)
 {
 	vdev->vdev_mlme.tx_chainmask = chainmask;
 }
@@ -1018,8 +1380,9 @@ static inline uint8_t wlan_vdev_mlme_get_txchainmask(
  *
  * Return: void
  */
-static inline void wlan_vdev_mlme_set_rxchainmask(struct wlan_objmgr_vdev *vdev,
-			uint8_t chainmask)
+static inline void wlan_vdev_mlme_set_rxchainmask(
+				struct wlan_objmgr_vdev *vdev,
+				uint8_t chainmask)
 {
 	vdev->vdev_mlme.rx_chainmask = chainmask;
 }
@@ -1049,8 +1412,9 @@ static inline uint8_t wlan_vdev_mlme_get_rxchainmask(
  *
  * Return: void
  */
-static inline void wlan_vdev_mlme_set_txpower(struct wlan_objmgr_vdev *vdev,
-			uint8_t txpow)
+static inline void wlan_vdev_mlme_set_txpower(
+				struct wlan_objmgr_vdev *vdev,
+				uint8_t txpow)
 {
 	vdev->vdev_mlme.tx_power = txpow;
 }
@@ -1079,8 +1443,9 @@ static inline uint8_t wlan_vdev_mlme_get_txpower(
  *
  * Return: void
  */
-static inline void wlan_vdev_mlme_set_maxrate(struct wlan_objmgr_vdev *vdev,
-			uint32_t maxrate)
+static inline void wlan_vdev_mlme_set_maxrate(
+				struct wlan_objmgr_vdev *vdev,
+				uint32_t maxrate)
 {
 	vdev->vdev_mlme.max_rate = maxrate;
 }
@@ -1109,8 +1474,9 @@ static inline uint32_t wlan_vdev_mlme_get_maxrate(
  *
  * Return: void
  */
-static inline void wlan_vdev_mlme_set_txmgmtrate(struct wlan_objmgr_vdev *vdev,
-			uint32_t txmgmtrate)
+static inline void wlan_vdev_mlme_set_txmgmtrate(
+				struct wlan_objmgr_vdev *vdev,
+				uint32_t txmgmtrate)
 {
 	vdev->vdev_mlme.tx_mgmt_rate = txmgmtrate;
 }
@@ -1129,6 +1495,7 @@ static inline uint32_t wlan_vdev_mlme_get_txmgmtrate(
 {
 	return vdev->vdev_mlme.tx_mgmt_rate;
 }
+#endif
 
 /**
  * wlan_vdev_mlme_feat_cap_set() - set feature caps

+ 0 - 4
umac/dfs/core/src/dfs.h

@@ -863,10 +863,6 @@ struct dfs_event_log {
 	int16_t   psidx_diff;
 };
 
-#define WLAN_DFS_RESET_TIME_S 7
-#define WLAN_DFS_WAIT (60 + WLAN_DFS_RESET_TIME_S) /* 60 seconds */
-#define WLAN_DFS_WAIT_MS ((WLAN_DFS_WAIT) * 1000)  /*in MS*/
-
 #define WLAN_DFS_WEATHER_CHANNEL_WAIT_MIN 10 /*10 minutes*/
 #define WLAN_DFS_WEATHER_CHANNEL_WAIT_S (WLAN_DFS_WEATHER_CHANNEL_WAIT_MIN * 60)
 #define WLAN_DFS_WEATHER_CHANNEL_WAIT_MS  \

+ 4 - 0
umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h

@@ -27,6 +27,10 @@
 
 #include <wlan_dfs_public_struct.h>
 
+#define WLAN_DFS_RESET_TIME_S 7
+#define WLAN_DFS_WAIT (60 + WLAN_DFS_RESET_TIME_S) /* 60 seconds */
+#define WLAN_DFS_WAIT_MS ((WLAN_DFS_WAIT) * 1000)  /*in MS*/
+
 /* Command id to send test radar to firmware */
 #define DFS_PHYERR_OFFLOAD_TEST_SET_RADAR 0
 

+ 0 - 2
umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h

@@ -189,7 +189,6 @@ struct wlan_lmac_if_ftm_tx_ops {
  * @vdev_mlme_detach: function to unregister events
  * @vdev_mlme_rsp_timer_mgmt: function to manage vdev response timer
  * @vdev_create_send: function to send vdev create
- * @vdev_create_complete: function to send WMI cfg required for create
  * @vdev_start_send: function to send vdev start
  * @vdev_up_send: function to send vdev up
  * @vdev_delete_send: function to send vdev delete
@@ -224,7 +223,6 @@ struct wlan_lmac_if_mlme_tx_ops {
 					       bool flag);
 	QDF_STATUS (*vdev_create_send)(struct wlan_objmgr_vdev *vdev,
 				       struct vdev_create_params *param);
-	QDF_STATUS (*vdev_create_complete)(struct wlan_objmgr_vdev *vdev);
 	QDF_STATUS (*vdev_start_send)(struct wlan_objmgr_vdev *vdev,
 				      struct vdev_start_params *param);
 	QDF_STATUS (*vdev_up_send)(struct wlan_objmgr_vdev *vdev,

+ 4 - 0
umac/mlme/include/wlan_vdev_mlme.h

@@ -54,6 +54,8 @@ struct vdev_mlme_obj;
  * @beacon_interval: beacon interval
  * @ldpc: low density parity check value
  * @nss: number of spatial stream
+ * @nss_2g: 2.4GHz number of spatial stream
+ * @nss_5g: 5GHz number of spatial stream
  * @tsfadjust: adjusted timer sync value
  */
 struct vdev_mlme_proto_generic {
@@ -63,6 +65,8 @@ struct vdev_mlme_proto_generic {
 	uint16_t beacon_interval;
 	uint8_t ldpc;
 	uint8_t nss;
+	uint8_t nss_2g;
+	uint8_t nss_5g;
 	uint64_t tsfadjust;
 };
 

+ 2 - 3
umac/mlme/vdev_mgr/core/src/vdev_mgr_ops.c

@@ -19,7 +19,7 @@
 /**
  * DOC: vdev_mgr_ops.c
  *
- * This header file provides API definitions for filling data structures
+ * This file provide API definitions for filling data structures
  * and sending vdev mgmt commands to target_if/mlme
  */
 #include "vdev_mgr_ops.h"
@@ -32,7 +32,6 @@
 #include <wlan_lmac_if_api.h>
 #include <wlan_reg_services_api.h>
 #include <wlan_dfs_tgt_api.h>
-#include "core/src/dfs.h"
 #include <wlan_vdev_mgr_ucfg_api.h>
 
 static QDF_STATUS vdev_mgr_create_param_update(
@@ -314,7 +313,7 @@ static QDF_STATUS vdev_mgr_sta_ps_param_update(
 
 	vdev = mlme_obj->vdev;
 	param->vdev_id = wlan_vdev_get_id(vdev);
-	param->param = WLAN_MLME_CFG_UAPSD;
+	param->param_id = WLAN_MLME_CFG_UAPSD;
 	param->value = mlme_obj->proto.sta.uapsd_cfg;
 	return QDF_STATUS_SUCCESS;
 }

+ 2 - 2
umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_tgt_if_tx_defs.h

@@ -59,12 +59,12 @@ enum mlme_bcn_tx_rate_code {
 /**
  * struct sta_ps_params - sta ps cmd parameter
  * @vdev_id: vdev id
- * @param: sta ps parameter
+ * @param_id: sta ps parameter
  * @value: sta ps parameter value
  */
 struct sta_ps_params {
 	uint32_t vdev_id;
-	uint32_t param;
+	uint32_t param_id;
 	uint32_t value;
 };
 

+ 67 - 4
umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_ucfg_api.h

@@ -23,8 +23,8 @@
  * for mlme ucfg and declarations for ucfg public APIs
  */
 
-#ifndef __UCFG_WLAN_VDEV_MLME_UCFG_H__
-#define __UCFG_WLAN_VDEV_MLME_UCFG_H__
+#ifndef __WLAN_VDEV_MGR_UCFG_API_H__
+#define __WLAN_VDEV_MGR_UCFG_API_H__
 
 #include <wlan_objmgr_vdev_obj.h>
 #include <wlan_vdev_mgr_tgt_if_tx_defs.h>
@@ -47,6 +47,7 @@ enum wlan_mlme_cfg_id {
 	WLAN_MLME_CFG_MUBFEE,
 	WLAN_MLME_CFG_IMLICIT_BF,
 	WLAN_MLME_CFG_SOUNDING_DIM,
+	WLAN_MLME_CFG_TXBF_CAPS,
 	WLAN_MLME_CFG_HT_CAPS,
 	WLAN_MLME_CFG_HE_OPS,
 	WLAN_MLME_CFG_RTS_THRESHOLD,
@@ -99,30 +100,92 @@ enum wlan_mlme_cfg_id {
 	WLAN_MLME_CFG_MAX
 };
 
+/**
+ * struct wlan_vdev_mgr_cfg - vdev mgr configuration
+ * @value: configuration value
+ * @tsf: tsf adjust value
+ * @trans_bssid: transmission bssid address
+ * @ssid_cfg: ssid configuration
+ */
 struct wlan_vdev_mgr_cfg {
 	union {
 		uint32_t value;
+		uint64_t tsf;
 		uint8_t trans_bssid[QDF_MAC_ADDR_SIZE];
 		struct mlme_mac_ssid ssid_cfg;
-	} u;
+	};
 };
 
+/**
+ * ucfg_wlan_vdev_mgr_set_param() – ucfg MLME API to
+ * set value into mlme vdev mgr component
+ * @vdev: pointer to vdev object
+ * @param_id: param of type wlan_mlme_cfg_id
+ * @mlme_cfg: value to set into mlme vdev mgr
+ *
+ * Return: QDF_STATUS
+ */
 QDF_STATUS ucfg_wlan_vdev_mgr_set_param(struct wlan_objmgr_vdev *vdev,
 					enum wlan_mlme_cfg_id param_id,
 					struct wlan_vdev_mgr_cfg mlme_cfg);
 
+/**
+ * ucfg_wlan_vdev_mgr_get_param() – ucfg MLME API to
+ * get value from mlme vdev mgr component
+ * @vdev: pointer to vdev object
+ * @param_id: param of type wlan_mlme_cfg_id
+ * @param_value: pointer to store the value of mlme vdev mgr
+ *
+ * Return: void
+ */
 void ucfg_wlan_vdev_mgr_get_param(struct wlan_objmgr_vdev *vdev,
 				  enum wlan_mlme_cfg_id param_id,
 				  uint32_t *param_value);
 
+/**
+ * ucfg_wlan_vdev_mgr_get_param_ssid() – ucfg MLME API to
+ * get ssid from mlme vdev mgr component
+ * @vdev: pointer to vdev object
+ * @ssid: pointer to store the ssid
+ * @ssid_len: pointer to store the ssid length value
+ *
+ * Return: void
+ */
 void ucfg_wlan_vdev_mgr_get_param_ssid(struct wlan_objmgr_vdev *vdev,
 				       uint8_t *ssid,
 				       uint8_t *ssid_len);
 
+/**
+ * ucfg_wlan_vdev_mgr_get_beacon_buffer() – ucfg MLME API to
+ * get beacon buffer from mlme vdev mgr component
+ * @vdev: pointer to vdev object
+ * @buf: pointer to store the beacon buffer
+ *
+ * Return: void
+ */
 void ucfg_wlan_vdev_mgr_get_beacon_buffer(struct wlan_objmgr_vdev *vdev,
 					  qdf_nbuf_t buf);
 
+/**
+ * ucfg_wlan_vdev_mgr_get_trans_bssid() – ucfg MLME API to
+ * get transmission bssid from mlme vdev mgr component
+ * @vdev: pointer to vdev object
+ * @addr: pointer to store the transmission bssid
+ *
+ * Return: void
+ */
 void ucfg_wlan_vdev_mgr_get_trans_bssid(struct wlan_objmgr_vdev *vdev,
 					uint8_t *addr);
 
-#endif /* __UCFG_WLAN_VDEV_MLME_UCFG_H__ */
+/**
+ * ucfg_wlan_vdev_mgr_get_tsf_adjust() – ucfg MLME API to
+ * get tsf_adjust from mlme vdev mgr component
+ * @vdev: pointer to vdev object
+ * @tsf_adjust: pointer to store the tsf adjust value
+ *
+ * Return: void
+ */
+void ucfg_wlan_vdev_mgr_get_tsf_adjust(struct wlan_objmgr_vdev *vdev,
+				       uint64_t *tsf_adjust);
+
+#endif /* __WLAN_VDEV_MLME_UCFG_H__ */

+ 48 - 3
umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_tgt_if_tx_api.c

@@ -34,6 +34,7 @@
 #include <wlan_vdev_mlme_api.h>
 #include <wlan_dfs_utils_api.h>
 #include <wlan_vdev_mgr_utils_api.h>
+#include <wlan_vdev_mgr_ucfg_api.h>
 
 static inline struct wlan_lmac_if_mlme_tx_ops
 *wlan_vdev_mlme_get_lmac_txops(struct wlan_objmgr_vdev *vdev)
@@ -128,12 +129,56 @@ tgt_vdev_mgr_create_end:
 	return status;
 }
 
-QDF_STATUS tgt_vdev_mgr_create_complete(struct vdev_mlme_obj *mlme_obj)
+QDF_STATUS tgt_vdev_mgr_create_complete(struct vdev_mlme_obj *vdev_mlme)
 {
 	struct wlan_objmgr_vdev *vdev;
+	enum QDF_OPMODE opmode;
+	struct vdev_set_params param = {0};
+	struct wlan_lmac_if_mlme_tx_ops *txops;
+	struct vdev_mlme_inactivity_params *inactivity;
+	QDF_STATUS status = QDF_STATUS_SUCCESS;
 
-	vdev = mlme_obj->vdev;
-	return QDF_STATUS_SUCCESS;
+	vdev = vdev_mlme->vdev;
+	txops = wlan_vdev_mlme_get_lmac_txops(vdev);
+	if (!txops || !txops->vdev_set_param_send) {
+		mlme_err("No Tx Ops");
+		return QDF_STATUS_E_INVAL;
+	}
+
+	opmode = wlan_vdev_mlme_get_opmode(vdev);
+	inactivity = &vdev_mlme->mgmt.inactivity_params;
+	if (opmode == QDF_SAP_MODE) {
+		param.vdev_id = wlan_vdev_get_id(vdev);
+
+		param.param_value = vdev_mlme->mgmt.rate_info.bcn_tx_rate;
+		param.param_id = WLAN_MLME_CFG_BCN_TX_RATE;
+		status = txops->vdev_set_param_send(vdev, &param);
+		if (QDF_IS_STATUS_ERROR(status))
+			mlme_err("Failed to set beacon rate!");
+
+		param.param_value =
+			inactivity->keepalive_min_idle_inactive_time_secs;
+		param.param_id = WLAN_MLME_CFG_MIN_IDLE_INACTIVE_TIME;
+		status = txops->vdev_set_param_send(vdev, &param);
+		if (QDF_IS_STATUS_ERROR(status))
+			mlme_err("Failed to set min idle inactive time!");
+
+		param.param_value =
+			inactivity->keepalive_max_idle_inactive_time_secs;
+		param.param_id = WLAN_MLME_CFG_MAX_IDLE_INACTIVE_TIME;
+		status = txops->vdev_set_param_send(vdev, &param);
+		if (QDF_IS_STATUS_ERROR(status))
+			mlme_err("Failed to set max idle inactive time!");
+
+		param.param_value =
+			inactivity->keepalive_max_unresponsive_time_secs;
+		param.param_id = WLAN_MLME_CFG_MAX_UNRESPONSIVE_INACTIVE_TIME;
+		status = txops->vdev_set_param_send(vdev, &param);
+		if (QDF_IS_STATUS_ERROR(status))
+			mlme_err("Failed to set max unresponsive inactive time!");
+	}
+
+	return status;
 }
 
 QDF_STATUS tgt_vdev_mgr_start_send(

+ 22 - 0
umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_ucfg_api.c

@@ -27,6 +27,7 @@
 #include "include/wlan_vdev_mlme.h"
 #include <wlan_mlme_dbg.h>
 #include <wlan_vdev_mgr_utils_api.h>
+#include <wlan_vdev_mlme_api.h>
 
 void ucfg_wlan_vdev_mgr_get_param_ssid(
 				struct wlan_objmgr_vdev *vdev,
@@ -96,6 +97,27 @@ void ucfg_wlan_vdev_mgr_get_trans_bssid(
 
 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_trans_bssid);
 
+void ucfg_wlan_vdev_mgr_get_tsf_adjust(
+				struct wlan_objmgr_vdev *vdev,
+				uint64_t *tsf_adjust)
+{
+	struct vdev_mlme_obj *vdev_mlme;
+	struct vdev_mlme_proto *mlme_proto;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+
+	if (!vdev_mlme) {
+		mlme_err("VDEV MLME is NULL");
+		return;
+	}
+
+	mlme_proto = &vdev_mlme->proto;
+
+	*tsf_adjust = mlme_proto->generic.tsfadjust;
+}
+
+qdf_export_symbol(ucfg_wlan_vdev_mgr_get_tsf_adjust);
+
 QDF_STATUS ucfg_wlan_vdev_mgr_set_param(
 				struct wlan_objmgr_vdev *vdev,
 				enum wlan_mlme_cfg_id param_id,

+ 74 - 70
umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_utils_api.c

@@ -63,6 +63,10 @@ wlan_util_vdev_mlme_set_param(struct vdev_mlme_obj *vdev_mlme,
 	int ret = QDF_STATUS_SUCCESS;
 	struct vdev_set_params param = {0};
 
+	if (!vdev_mlme) {
+		mlme_err("VDEV MLME is NULL");
+		return QDF_STATUS_E_FAILURE;
+	}
 	vdev = vdev_mlme->vdev;
 	mlme_proto = &vdev_mlme->proto;
 	mlme_mgmt = &vdev_mlme->mgmt;
@@ -70,175 +74,174 @@ wlan_util_vdev_mlme_set_param(struct vdev_mlme_obj *vdev_mlme,
 
 	switch (param_id) {
 	case WLAN_MLME_CFG_DTIM_PERIOD:
-		mlme_proto->generic.dtim_period = mlme_cfg.u.value;
+		mlme_proto->generic.dtim_period = mlme_cfg.value;
 		is_wmi_cmd = 1;
 		break;
 	case WLAN_MLME_CFG_SLOT_TIME:
-		mlme_proto->generic.slot_time = mlme_cfg.u.value;
+		mlme_proto->generic.slot_time = mlme_cfg.value;
 		is_wmi_cmd = 1;
 		break;
 	case WLAN_MLME_CFG_PROTECTION_MODE:
-		mlme_proto->generic.protection_mode = mlme_cfg.u.value;
+		mlme_proto->generic.protection_mode = mlme_cfg.value;
 		is_wmi_cmd = 1;
 		break;
 	case WLAN_MLME_CFG_BEACON_INTERVAL:
-		mlme_proto->generic.beacon_interval = mlme_cfg.u.value;
+		mlme_proto->generic.beacon_interval = mlme_cfg.value;
 		is_wmi_cmd = 1;
 		break;
 	case WLAN_MLME_CFG_LDPC:
-		mlme_proto->generic.ldpc = mlme_cfg.u.value;
+		mlme_proto->generic.ldpc = mlme_cfg.value;
 		is_wmi_cmd = 1;
 		break;
 	case WLAN_MLME_CFG_NSS:
-		mlme_proto->generic.nss = mlme_cfg.u.value;
+		mlme_proto->generic.nss = mlme_cfg.value;
 		is_wmi_cmd = 1;
 		break;
 	case WLAN_MLME_CFG_TSF_ADJUST:
-		mlme_proto->generic.tsfadjust = mlme_cfg.u.value;
+		mlme_proto->generic.tsfadjust = mlme_cfg.tsf;
 		break;
 	case WLAN_MLME_CFG_ASSOC_ID:
-		mlme_proto->sta.assoc_id = mlme_cfg.u.value;
+		mlme_proto->sta.assoc_id = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_VHT_CAPS:
-		mlme_proto->vht_info.caps = mlme_cfg.u.value;
+		mlme_proto->vht_info.caps = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_SUBFER:
-		mlme_proto->vht_info.subfer = mlme_cfg.u.value;
-		is_wmi_cmd = 1;
+		mlme_proto->vht_info.subfer = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_MUBFER:
-		mlme_proto->vht_info.mubfer = mlme_cfg.u.value;
-		is_wmi_cmd = 1;
+		mlme_proto->vht_info.mubfer = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_SUBFEE:
-		mlme_proto->vht_info.subfee = mlme_cfg.u.value;
-		is_wmi_cmd = 1;
+		mlme_proto->vht_info.subfee = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_MUBFEE:
-		mlme_proto->vht_info.mubfee = mlme_cfg.u.value;
-		is_wmi_cmd = 1;
+		mlme_proto->vht_info.mubfee = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_IMLICIT_BF:
-		mlme_proto->vht_info.implicit_bf = mlme_cfg.u.value;
-		is_wmi_cmd = 1;
+		mlme_proto->vht_info.implicit_bf = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_SOUNDING_DIM:
-		mlme_proto->vht_info.sounding_dimension = mlme_cfg.u.value;
+		mlme_proto->vht_info.sounding_dimension = mlme_cfg.value;
+		break;
+	case WLAN_MLME_CFG_TXBF_CAPS:
 		is_wmi_cmd = 1;
 		break;
 	case WLAN_MLME_CFG_HT_CAPS:
-		mlme_proto->ht_info.ht_caps = mlme_cfg.u.value;
+		mlme_proto->ht_info.ht_caps = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_HE_OPS:
-		mlme_proto->he_ops_info.he_ops = mlme_cfg.u.value;
+		mlme_proto->he_ops_info.he_ops = mlme_cfg.value;
 		is_wmi_cmd = 1;
 		break;
 	case WLAN_MLME_CFG_RTS_THRESHOLD:
-		mlme_mgmt->generic.rts_threshold = mlme_cfg.u.value;
+		mlme_mgmt->generic.rts_threshold = mlme_cfg.value;
 		is_wmi_cmd = 1;
 		break;
 	case WLAN_MLME_CFG_FRAG_THRESHOLD:
-		mlme_mgmt->generic.frag_threshold = mlme_cfg.u.value;
+		mlme_mgmt->generic.frag_threshold = mlme_cfg.value;
 		is_wmi_cmd = 1;
 		break;
 	case WLAN_MLME_CFG_PROBE_DELAY:
-		mlme_mgmt->generic.probe_delay = mlme_cfg.u.value;
+		mlme_mgmt->generic.probe_delay = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_REPEAT_PROBE_TIME:
-		mlme_mgmt->generic.repeat_probe_time = mlme_cfg.u.value;
+		mlme_mgmt->generic.repeat_probe_time = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_DROP_UNENCRY:
-		mlme_mgmt->generic.drop_unencry = mlme_cfg.u.value;
+		mlme_mgmt->generic.drop_unencry = mlme_cfg.value;
 		is_wmi_cmd = 1;
 		break;
 	case WLAN_MLME_CFG_TX_PWR_LIMIT:
-		mlme_mgmt->generic.tx_pwrlimit = mlme_cfg.u.value;
+		mlme_mgmt->generic.tx_pwrlimit = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_TX_POWER:
-		mlme_mgmt->generic.tx_power = mlme_cfg.u.value;
+		mlme_mgmt->generic.tx_power = mlme_cfg.value;
 		is_wmi_cmd = 1;
 		break;
 	case WLAN_MLME_CFG_AMPDU:
-		mlme_mgmt->generic.ampdu = mlme_cfg.u.value;
+		mlme_mgmt->generic.ampdu = mlme_cfg.value;
+		mlme_cfg.value = (mlme_cfg.value << 8) + 0xFF;
 		is_wmi_cmd = 1;
 		break;
 	case WLAN_MLME_CFG_AMSDU:
-		mlme_mgmt->generic.amsdu = mlme_cfg.u.value;
+		mlme_mgmt->generic.amsdu = mlme_cfg.value;
+		mlme_cfg.value = (mlme_cfg.value << 8) + 0xFF;
 		is_wmi_cmd = 1;
 		break;
 	case WLAN_MLME_CFG_BMISS_FIRST_BCNT:
-		inactivity_params->bmiss_first_bcnt = mlme_cfg.u.value;
+		inactivity_params->bmiss_first_bcnt = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_BMISS_FINAL_BCNT:
-		inactivity_params->bmiss_final_bcnt = mlme_cfg.u.value;
+		inactivity_params->bmiss_final_bcnt = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_MIN_IDLE_INACTIVE_TIME:
 		inactivity_params->keepalive_min_idle_inactive_time_secs =
-							mlme_cfg.u.value;
+							mlme_cfg.value;
 		is_wmi_cmd = 1;
 		break;
 	case WLAN_MLME_CFG_MAX_IDLE_INACTIVE_TIME:
 		inactivity_params->keepalive_max_idle_inactive_time_secs =
-							mlme_cfg.u.value;
+							mlme_cfg.value;
 		is_wmi_cmd = 1;
 		break;
 	case WLAN_MLME_CFG_MAX_UNRESPONSIVE_INACTIVE_TIME:
 		inactivity_params->keepalive_max_unresponsive_time_secs =
-							mlme_cfg.u.value;
+							mlme_cfg.value;
 		is_wmi_cmd = 1;
 		break;
 	case WLAN_MLME_CFG_RATE_FLAGS:
-		mlme_mgmt->rate_info.rate_flags = mlme_cfg.u.value;
+		mlme_mgmt->rate_info.rate_flags = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_PER_BAND_TX_MGMT_RATE:
-		mlme_mgmt->rate_info.per_band_tx_mgmt_rate = mlme_cfg.u.value;
+		mlme_mgmt->rate_info.per_band_tx_mgmt_rate = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_MAX_RATE:
-		mlme_mgmt->rate_info.max_rate = mlme_cfg.u.value;
+		mlme_mgmt->rate_info.max_rate = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_TX_MGMT_RATE:
-		mlme_mgmt->rate_info.tx_mgmt_rate = mlme_cfg.u.value;
+		mlme_mgmt->rate_info.tx_mgmt_rate = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_TX_CHAINMASK:
-		mlme_mgmt->chainmask_info.tx_chainmask = mlme_cfg.u.value;
+		mlme_mgmt->chainmask_info.tx_chainmask = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_RX_CHAINMASK:
-		mlme_mgmt->chainmask_info.rx_chainmask = mlme_cfg.u.value;
+		mlme_mgmt->chainmask_info.rx_chainmask = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_PKT_POWERSAVE:
-		mlme_mgmt->powersave_info.packet_powersave = mlme_cfg.u.value;
+		mlme_mgmt->powersave_info.packet_powersave = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_MAX_LI_OF_MODDTIM:
-		mlme_mgmt->powersave_info.max_li_of_moddtim = mlme_cfg.u.value;
+		mlme_mgmt->powersave_info.max_li_of_moddtim = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_DYNDTIM_CNT:
-		mlme_mgmt->powersave_info.dyndtim_cnt = mlme_cfg.u.value;
+		mlme_mgmt->powersave_info.dyndtim_cnt = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_LISTEN_INTERVAL:
-		mlme_mgmt->powersave_info.listen_interval = mlme_cfg.u.value;
+		mlme_mgmt->powersave_info.listen_interval = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_MODDTIM_CNT:
-		mlme_mgmt->powersave_info.moddtim_cnt = mlme_cfg.u.value;
+		mlme_mgmt->powersave_info.moddtim_cnt = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_PROILE_IDX:
-		mlme_mgmt->mbss_11ax.profile_idx = mlme_cfg.u.value;
+		mlme_mgmt->mbss_11ax.profile_idx = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_PROFILE_NUM:
-		mlme_mgmt->mbss_11ax.profile_num = mlme_cfg.u.value;
+		mlme_mgmt->mbss_11ax.profile_num = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_MBSSID_FLAGS:
-		mlme_mgmt->mbss_11ax.mbssid_flags = mlme_cfg.u.value;
+		mlme_mgmt->mbss_11ax.mbssid_flags = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_VDEVID_TRANS:
-		mlme_mgmt->mbss_11ax.vdevid_trans = mlme_cfg.u.value;
+		mlme_mgmt->mbss_11ax.vdevid_trans = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_SSID:
-		if (mlme_cfg.u.ssid_cfg.length <= WLAN_SSID_MAX_LEN) {
+		if (mlme_cfg.ssid_cfg.length <= WLAN_SSID_MAX_LEN) {
 			qdf_mem_copy(mlme_mgmt->generic.ssid,
-				     mlme_cfg.u.ssid_cfg.mac_ssid,
-				     mlme_cfg.u.ssid_cfg.length);
+				     mlme_cfg.ssid_cfg.mac_ssid,
+				     mlme_cfg.ssid_cfg.length);
 			mlme_mgmt->generic.ssid_len =
-						mlme_cfg.u.ssid_cfg.length;
+						mlme_cfg.ssid_cfg.length;
 		} else {
 			mlme_mgmt->generic.ssid_len = 0;
 		}
@@ -246,37 +249,37 @@ wlan_util_vdev_mlme_set_param(struct vdev_mlme_obj *vdev_mlme,
 		break;
 	case WLAN_MLME_CFG_TRANS_BSSID:
 		qdf_mem_copy(mlme_mgmt->mbss_11ax.trans_bssid,
-			     mlme_cfg.u.trans_bssid, QDF_MAC_ADDR_SIZE);
+			     mlme_cfg.trans_bssid, QDF_MAC_ADDR_SIZE);
 		break;
 	case WLAN_MLME_CFG_TYPE:
-		mlme_mgmt->generic.type = mlme_cfg.u.value;
+		mlme_mgmt->generic.type = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_SUBTYPE:
-		mlme_mgmt->generic.subtype = mlme_cfg.u.value;
+		mlme_mgmt->generic.subtype = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_UAPSD:
-		mlme_proto->sta.uapsd_cfg = mlme_cfg.u.value;
+		mlme_proto->sta.uapsd_cfg = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_TX_DECAP_TYPE:
-		mlme_mgmt->generic.tx_decap_type = mlme_cfg.u.value;
+		mlme_mgmt->generic.tx_decap_type = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_RX_DECAP_TYPE:
-		mlme_mgmt->generic.rx_decap_type = mlme_cfg.u.value;
+		mlme_mgmt->generic.rx_decap_type = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_RATEMASK_TYPE:
-		mlme_mgmt->rate_info.type = mlme_cfg.u.value;
+		mlme_mgmt->rate_info.type = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_RATEMASK_LOWER32:
-		mlme_mgmt->rate_info.lower32 = mlme_cfg.u.value;
+		mlme_mgmt->rate_info.lower32 = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_RATEMASK_HIGHER32:
-		mlme_mgmt->rate_info.higher32 = mlme_cfg.u.value;
+		mlme_mgmt->rate_info.higher32 = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_RATEMASK_LOWER32_2:
-		mlme_mgmt->rate_info.lower32_2 = mlme_cfg.u.value;
+		mlme_mgmt->rate_info.lower32_2 = mlme_cfg.value;
 		break;
 	case WLAN_MLME_CFG_BCN_TX_RATE:
-		mlme_mgmt->rate_info.bcn_tx_rate = mlme_cfg.u.value;
+		mlme_mgmt->rate_info.bcn_tx_rate = mlme_cfg.value;
 		break;
 	default:
 		break;
@@ -285,7 +288,7 @@ wlan_util_vdev_mlme_set_param(struct vdev_mlme_obj *vdev_mlme,
 	if (is_wmi_cmd) {
 		param.param_id = param_id;
 		param.vdev_id = wlan_vdev_get_id(vdev);
-		param.param_value = mlme_cfg.u.value;
+		param.param_value = mlme_cfg.value;
 		ret = tgt_vdev_mgr_set_param_send(vdev_mlme, &param);
 	}
 
@@ -302,6 +305,10 @@ void wlan_util_vdev_mlme_get_param(struct vdev_mlme_obj *vdev_mlme,
 	struct vdev_mlme_mgmt *mlme_mgmt;
 	struct vdev_mlme_inactivity_params *inactivity_params;
 
+	if (!vdev_mlme) {
+		mlme_err("VDEV MLME is NULL");
+		return;
+	}
 	mlme_proto = &vdev_mlme->proto;
 	mlme_mgmt = &vdev_mlme->mgmt;
 	inactivity_params = &mlme_mgmt->inactivity_params;
@@ -325,9 +332,6 @@ void wlan_util_vdev_mlme_get_param(struct vdev_mlme_obj *vdev_mlme,
 	case WLAN_MLME_CFG_NSS:
 		*value = mlme_proto->generic.nss;
 		break;
-	case WLAN_MLME_CFG_TSF_ADJUST:
-		*value = mlme_proto->generic.tsfadjust;
-		break;
 	case WLAN_MLME_CFG_ASSOC_ID:
 		*value = mlme_proto->sta.assoc_id;
 		break;

+ 2 - 0
umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mlme_api.c

@@ -44,6 +44,8 @@ struct vdev_mlme_obj *wlan_vdev_mlme_get_cmpt_obj(struct wlan_objmgr_vdev *vdev)
 	return vdev_mlme;
 }
 
+qdf_export_symbol(wlan_vdev_mlme_get_cmpt_obj);
+
 void wlan_vdev_mlme_set_ext_hdl(struct wlan_objmgr_vdev *vdev, void *ext_hdl)
 {
 	struct vdev_mlme_obj *vdev_mlme;

+ 9 - 0
wmi/src/wmi_unified_tlv.c

@@ -1469,14 +1469,23 @@ static QDF_STATUS send_set_sta_ps_param_cmd_tlv(wmi_unified_t wmi_handle,
 		       WMITLV_GET_STRUCT_TLVLEN
 			       (wmi_sta_powersave_param_cmd_fixed_param));
 	cmd->vdev_id = param->vdev_id;
+#ifdef CMN_VDEV_MGR_TGT_IF_ENABLE
+	cmd->param = param->param_id;
+#else
 	cmd->param = param->param;
+#endif
 	cmd->value = param->value;
 
 	wmi_mtrace(WMI_STA_POWERSAVE_PARAM_CMDID, cmd->vdev_id, 0);
 	if (wmi_unified_cmd_send(wmi_handle, buf, len,
 				 WMI_STA_POWERSAVE_PARAM_CMDID)) {
+#ifdef CMN_VDEV_MGR_TGT_IF_ENABLE
+		WMI_LOGE("Set Sta Ps param Failed vdevId %d Param %d val %d",
+			 param->vdev_id, param->param_id, param->value);
+#else
 		WMI_LOGE("Set Sta Ps param Failed vdevId %d Param %d val %d",
 			 param->vdev_id, param->param, param->value);
+#endif
 		wmi_buf_free(buf);
 		return QDF_STATUS_E_FAILURE;
 	}