Parcourir la source

qcacld-3.0: Add support to send set IE request in cnx manager

With connection manager enabled, the send IE request is
not sent after connection.

Add support to send set IE request after connection is
successful in connection manger.

Change-Id: I2f30eb67ba295e0ca416ccb40e12a376e0d7a47e
CRs-Fixed: 2976734
Pragaspathi Thilagaraj il y a 3 ans
Parent
commit
70e6c4fc40

+ 8 - 0
components/umac/mlme/connection_mgr/core/src/wlan_cm_vdev_api.h

@@ -255,6 +255,14 @@ QDF_STATUS cm_get_rssi_snr_by_bssid(struct wlan_objmgr_pdev *pdev,
 				    struct qdf_mac_addr *bssid,
 				    int8_t *rssi, int8_t *snr);
 
+/**
+ * cm_csr_send_set_ie()  - CM wrapper to send the set IE request
+ * @vdev: Object manager VDEV
+ *
+ * Return: None
+ */
+void cm_csr_send_set_ie(struct wlan_objmgr_vdev *vdev);
+
 static inline QDF_STATUS
 cm_ext_hdl_create(struct wlan_objmgr_vdev *vdev, cm_ext_t **ext_cm_ptr)
 {

+ 1 - 0
components/umac/mlme/connection_mgr/core/src/wlan_cm_vdev_connect.c

@@ -1274,6 +1274,7 @@ static void cm_process_connect_complete(struct wlan_objmgr_psoc *psoc,
 	}
 
 	cm_csr_set_joined(vdev_id);
+	cm_csr_send_set_ie(vdev);
 
 	ucast_cipher = wlan_crypto_get_param(vdev,
 					     WLAN_CRYPTO_PARAM_UCAST_CIPHER);

+ 3 - 2
core/mac/src/pe/lim/lim_process_sme_req_messages.c

@@ -8538,10 +8538,11 @@ static void lim_process_set_ie_req(struct mac_context *mac_ctx, uint32_t *msg_bu
 
 	pe_session = pe_find_session_by_vdev_id(mac_ctx, vdev_id);
 	if (pe_session) {
-		add_ie_len = pe_session->lim_join_req->addIEAssoc.length;
-		if (!add_ie_len)
+		if (!pe_session->lim_join_req ||
+		    !pe_session->lim_join_req->addIEAssoc.length)
 			goto send_ie;
 
+		add_ie_len = pe_session->lim_join_req->addIEAssoc.length;
 		add_ie = qdf_mem_malloc(add_ie_len);
 		if (!add_ie)
 			goto send_ie;

+ 16 - 0
core/sme/src/csr/csr_api_roam.c

@@ -6055,6 +6055,22 @@ static inline void csr_update_tspec_info(struct mac_context *mac_ctx,
 					 tDot11fBeaconIEs *ie_struct) {}
 #endif
 
+void cm_csr_send_set_ie(struct wlan_objmgr_vdev *vdev)
+{
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme) {
+		sme_err("Failed to get vdev mlme obj!");
+		QDF_BUG(0);
+		return;
+	}
+
+	csr_send_set_ie(vdev_mlme->mgmt.generic.type,
+			vdev_mlme->mgmt.generic.subtype,
+			wlan_vdev_get_id(vdev));
+}
+
 QDF_STATUS cm_csr_handle_join_req(struct wlan_objmgr_vdev *vdev,
 				  struct wlan_cm_vdev_connect_req *req,
 				  struct cm_vdev_join_req *join_req,