Browse Source

qcacmn: Add support to extract wmi_mlo_link_removal_tbtt_update TLV

WMI_MLO_LINK_REMOVAL_EVENTID will be sent by FW to update the Host with the
progress of the link delete operation. Add support to extract the TBTT
update TLV sent in this event.

Change-Id: I01ce710d282f16e7a7cf4fb767279661558d129f
CRs-Fixed: 3322714
Shiva Krishna Pittala 2 years ago
parent
commit
11dccd8fac

+ 18 - 3
umac/mlo_mgr/inc/wlan_mlo_mgr_public_structs.h

@@ -1008,7 +1008,7 @@ struct mlo_vdev_host_tid_to_link_map_resp {
 	uint8_t mapping_switch_tsf;
 };
 
-/*
+/**
  * struct mlo_link_removal_cmd_params - MLO link removal command parameters
  * @vdev_id: vdev ID of the link to be removed
  * @reconfig_ml_ie: Entire ML reconfiguration element
@@ -1020,11 +1020,26 @@ struct mlo_link_removal_cmd_params {
 	uint32_t reconfig_ml_ie_size;
 };
 
-/*
+/**
+ * struct mlo_link_removal_tbtt_info - MLO link removal TBTT info. This
+ * information will be in correspondence with an outgoing beacon instance.
+ * @tbtt_count: Delete timer TBTT count in the reported beacon
+ * @qtimer_reading: Q-timer reading when the reported beacon is sent out
+ * @tsf: TSF of the reported beacon
+ */
+struct mlo_link_removal_tbtt_info {
+	uint32_t tbtt_count;
+	uint64_t qtimer_reading;
+	uint64_t tsf;
+};
+
+/**
  * struct mlo_link_removal_evt_params - MLO link removal event parameters
- * @vdev_id: vdev ID of the link to be removed
+ * @vdev_id: vdev ID of the link undergoing removal
+ * @tbtt_info: TBTT information of the link undergoing removal
  */
 struct mlo_link_removal_evt_params {
 	uint8_t vdev_id;
+	struct mlo_link_removal_tbtt_info tbtt_info;
 };
 #endif

+ 15 - 1
wmi/inc/wmi_unified_11be_api.h

@@ -44,7 +44,7 @@ wmi_extract_mlo_link_set_active_resp(wmi_unified_t wmi,
 
 /**
  * wmi_send_mlo_link_set_active_cmd() - send mlo link set active command
- * @wmi: WMI handle for this pdev
+ * @wmi_handle: WMI handle for this pdev
  * @param: Pointer to mlo link set active param
  *
  * Return: QDF_STATUS code
@@ -89,6 +89,20 @@ QDF_STATUS wmi_extract_mlo_link_removal_evt_fixed_param(
 		struct wmi_unified *wmi_handle,
 		void *buf,
 		struct mlo_link_removal_evt_params *params);
+
+/**
+ * wmi_extract_mlo_link_removal_tbtt_update() - Extract TBTT update TLV
+ * from the MLO link removal WMI  event
+ * @wmi_handle: wmi handle
+ * @buf: pointer to event buffer
+ * @tbtt_info: TBTT information
+ *
+ * Return: QDF_STATUS of operation
+ */
+QDF_STATUS wmi_extract_mlo_link_removal_tbtt_update(
+		struct wmi_unified *wmi_handle,
+		void *buf,
+		struct mlo_link_removal_tbtt_info *tbtt_info);
 #endif /*WLAN_FEATURE_11BE_MLO*/
 
 #ifdef WLAN_FEATURE_11BE

+ 5 - 0
wmi/inc/wmi_unified_priv.h

@@ -3044,6 +3044,11 @@ QDF_STATUS (*extract_mlo_link_removal_evt_fixed_param)(
 		struct wmi_unified *wmi_handle,
 		void *buf,
 		struct mlo_link_removal_evt_params *params);
+
+QDF_STATUS (*extract_mlo_link_removal_tbtt_update)(
+		struct wmi_unified *wmi_handle,
+		void *buf,
+		struct mlo_link_removal_tbtt_info *tbtt_info);
 #endif
 
 #ifdef WLAN_FEATURE_SON

+ 12 - 0
wmi/src/wmi_unified_11be_api.c

@@ -141,3 +141,15 @@ QDF_STATUS wmi_extract_mlo_link_removal_evt_fixed_param(
 
 	return QDF_STATUS_E_FAILURE;
 }
+
+QDF_STATUS wmi_extract_mlo_link_removal_tbtt_update(
+		struct wmi_unified *wmi,
+		void *buf,
+		struct mlo_link_removal_tbtt_info *tbtt_info)
+{
+	if (wmi->ops->extract_mlo_link_removal_tbtt_update)
+		return wmi->ops->extract_mlo_link_removal_tbtt_update(
+							wmi, buf, tbtt_info);
+
+	return QDF_STATUS_E_FAILURE;
+}

+ 40 - 0
wmi/src/wmi_unified_11be_tlv.c

@@ -702,6 +702,44 @@ extract_mlo_link_removal_evt_fixed_param_tlv(
 	return QDF_STATUS_SUCCESS;
 }
 
+/**
+ * extract_mlo_link_removal_tbtt_update_tlv() - Extract TBTT update TLV
+ * from the MLO link removal WMI  event
+ * @wmi_handle: wmi handle
+ * @buf: pointer to event buffer
+ * @tbtt_info: TBTT information to be populated
+ *
+ * Return: QDF_STATUS of operation
+ */
+static QDF_STATUS
+extract_mlo_link_removal_tbtt_update_tlv(
+	struct wmi_unified *wmi_handle,
+	void *buf,
+	struct mlo_link_removal_tbtt_info *tbtt_info)
+{
+	WMI_MLO_LINK_REMOVAL_EVENTID_param_tlvs *param_buf = buf;
+	wmi_mlo_link_removal_tbtt_update *tlv;
+
+	if (!param_buf) {
+		wmi_err_rl("Param_buf is NULL");
+		return QDF_STATUS_E_NULL_VALUE;
+	}
+
+	if (!tbtt_info) {
+		wmi_err_rl("Writable argument is NULL");
+		return QDF_STATUS_E_NULL_VALUE;
+	}
+
+	tlv = param_buf->tbtt_update;
+
+	tbtt_info->tbtt_count = tlv->tbtt_count;
+	tbtt_info->tsf = ((uint64_t)tlv->tsf_high << 32) | tlv->tsf_low;
+	tbtt_info->qtimer_reading =
+		((uint64_t)tlv->qtimer_ts_high << 32) | tlv->qtimer_ts_low;
+
+	return QDF_STATUS_SUCCESS;
+}
+
 #ifdef WLAN_FEATURE_11BE
 size_t peer_assoc_t2lm_params_size(struct peer_assoc_params *req)
 {
@@ -1419,4 +1457,6 @@ void wmi_11be_attach_tlv(wmi_unified_t wmi_handle)
 	ops->send_mlo_link_removal_cmd = send_mlo_link_removal_cmd_tlv;
 	ops->extract_mlo_link_removal_evt_fixed_param =
 			extract_mlo_link_removal_evt_fixed_param_tlv;
+	ops->extract_mlo_link_removal_tbtt_update =
+			extract_mlo_link_removal_tbtt_update_tlv;
 }