Browse Source

qcacmn: set partner link op-class

Update partner link op-class in station mode

Change-Id: I8d6908253e78adebabab724e7fd89737906367d2
CRs-Fixed: 3206442
Rohan Dutta 2 years ago
parent
commit
1f9ff41325

+ 1 - 0
os_if/linux/mlme/src/osif_cm_req.c

@@ -596,6 +596,7 @@ QDF_STATUS osif_update_mlo_partner_info(
 		mlo_clear_connect_req_links_bmap(vdev);
 		mlo_update_connect_req_links(vdev, 1);
 		osif_update_partner_vdev_info(vdev, partner_info);
+		mlo_mlme_sta_op_class(vdev, ml_ie);
 	}
 
 	return QDF_STATUS_SUCCESS;

+ 10 - 0
umac/mlo_mgr/inc/wlan_mlo_mgr_cmn.h

@@ -154,6 +154,16 @@ QDF_STATUS mlo_unreg_mlme_ext_cb(struct mlo_mgr_context *ctx);
 QDF_STATUS mlo_mlme_clone_sta_security(struct wlan_objmgr_vdev *vdev,
 				       struct wlan_cm_connect_req *req);
 
+/**
+ * mlo_mlme_sta_op_class() - Update partner link op-class from ML-IE
+ * @vdev: Object manager vdev
+ * @ml_ie: buffer having the ML-IE from supplicant
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS mlo_mlme_sta_op_class(struct wlan_objmgr_vdev *vdev,
+				 uint8_t *ml_ie);
+
 /**
  * mlo_mlme_validate_conn_req() - Validate connect request
  * @vdev: Object manager vdev

+ 4 - 0
umac/mlo_mgr/inc/wlan_mlo_mgr_public_structs.h

@@ -744,6 +744,10 @@ struct mlo_mlme_ext_ops {
 	void (*mlo_mlme_ext_handle_sta_csa_param)(
 				struct wlan_objmgr_vdev *vdev,
 				struct csa_offload_params *csa_param);
+	QDF_STATUS (*mlo_mlme_ext_sta_op_class)(
+			struct vdev_mlme_obj *vdev_mlme,
+			uint8_t *ml_ie);
+
 };
 
 /* maximum size of vdev bitmap array for MLO link set active command */

+ 23 - 0
umac/mlo_mgr/src/wlan_mlo_mgr_cmn.c

@@ -123,6 +123,29 @@ QDF_STATUS mlo_mlme_clone_sta_security(struct wlan_objmgr_vdev *vdev,
 	return status;
 }
 
+QDF_STATUS mlo_mlme_sta_op_class(struct wlan_objmgr_vdev *vdev,
+				 uint8_t *ml_ie)
+{
+	struct mlo_mgr_context *mlo_ctx = wlan_objmgr_get_mlo_ctx();
+	struct vdev_mlme_obj *vdev_mlme;
+	QDF_STATUS status = QDF_STATUS_SUCCESS;
+
+	if (!mlo_ctx || !mlo_ctx->mlme_ops ||
+	    !mlo_ctx->mlme_ops->mlo_mlme_ext_validate_conn_req)
+		return QDF_STATUS_E_FAILURE;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme)
+		return QDF_STATUS_E_FAILURE;
+
+	if (mlo_ctx->mlme_ops->mlo_mlme_ext_sta_op_class)
+		status =
+			mlo_ctx->mlme_ops->mlo_mlme_ext_sta_op_class(
+				vdev_mlme, ml_ie);
+
+	return status;
+}
+
 QDF_STATUS mlo_mlme_validate_conn_req(struct wlan_objmgr_vdev *vdev,
 				      void *ext_data)
 {