Browse Source

qcacmn: Add wmi changes to extract addba window size from mgmt tlv

Add wmi changes to extract addba window size from mgmt tlv

CRs-Fixed: 3156291
Change-Id: I09891ef15942d3a7d594dfa839b758a9d4a5ba78
Aakanksha Doda 3 năm trước cách đây
mục cha
commit
f420dce004

+ 40 - 2
umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_utils_api.h

@@ -803,6 +803,16 @@ struct frame_pn_params {
 	uint8_t prev_pn[WLAN_MGMT_TXRX_HOST_MAX_PN_LEN];
 };
 
+/**
+ * struct mgmt_rx_event_ext_params - Host mgmt extended params
+ * @ba_win_size: Block-Ack window size
+ * @reo_win_size: Reo win size
+ */
+struct mgmt_rx_event_ext_params {
+	uint16_t ba_win_size;
+	uint16_t reo_win_size;
+};
+
 /**
  * struct mgmt_rx_event_params - host mgmt header params
  * @chan_freq: channel frequency on which this frame is received
@@ -827,6 +837,7 @@ struct frame_pn_params {
  *             (win specific, will be removed in phase 4)
  * @reo_params: Pointer to MGMT Rx REO params
  * @pn_params: Frame PN params
+ * @ext_params: Extended params
  */
 struct mgmt_rx_event_params {
 	uint32_t    chan_freq;
@@ -847,6 +858,7 @@ struct mgmt_rx_event_params {
 	struct mgmt_rx_reo_params *reo_params;
 #endif
 	struct frame_pn_params pn_params;
+	struct mgmt_rx_event_ext_params *ext_params;
 };
 
 #ifdef WLAN_MGMT_RX_REO_SUPPORT
@@ -867,14 +879,25 @@ struct mgmt_rx_event_params *alloc_mgmt_rx_event_params(void)
 		return NULL;
 	}
 
+	rx_params->ext_params =
+		qdf_mem_malloc(sizeof(struct mgmt_rx_event_ext_params));
+
+	if (!rx_params->ext_params) {
+		qdf_mem_free(rx_params->reo_params);
+		qdf_mem_free(rx_params);
+		return NULL;
+	}
+
 	return rx_params;
 }
 
 static inline void
 free_mgmt_rx_event_params(struct mgmt_rx_event_params *rx_params)
 {
-	if (rx_params)
+	if (rx_params) {
+		qdf_mem_free(rx_params->ext_params);
 		qdf_mem_free(rx_params->reo_params);
+	}
 
 	qdf_mem_free(rx_params);
 }
@@ -888,10 +911,25 @@ struct mgmt_rx_event_params *alloc_mgmt_rx_event_params(void)
 	if (!rx_params)
 		return NULL;
 
+	rx_params->ext_params =
+		qdf_mem_malloc(sizeof(struct mgmt_rx_event_ext_params));
+
+	if (!rx_params->ext_params) {
+		qdf_mem_free(rx_params);
+		return NULL;
+	}
+
 	return rx_params;
 }
 
-#define free_mgmt_rx_event_params(rx_params) qdf_mem_free((rx_params))
+static inline void
+free_mgmt_rx_event_params(struct mgmt_rx_event_params *rx_params)
+{
+	if (rx_params)
+		qdf_mem_free(rx_params->ext_params);
+
+	qdf_mem_free(rx_params);
+}
 #endif
 
 /**

+ 12 - 0
wmi/inc/wmi_unified_api.h

@@ -2916,6 +2916,18 @@ QDF_STATUS
 wmi_extract_mgmt_rx_params(wmi_unified_t wmi_handle, void *evt_buf,
 			   struct mgmt_rx_event_params *hdr, uint8_t **bufp);
 
+/**
+ * wmi_extract_mgmt_rx_ext_params() - extract extended rx params from event
+ * @wmi_handle: wmi handle
+ * @evt_buf: pointer to event buffer
+ * @params: Pointer to hold ext params
+ *
+ * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
+ */
+QDF_STATUS
+wmi_extract_mgmt_rx_ext_params(wmi_unified_t wmi_handle, void *evt_buf,
+			       struct mgmt_rx_event_ext_params *params);
+
 #ifdef WLAN_MGMT_RX_REO_SUPPORT
 /**
  * wmi_extract_mgmt_rx_fw_consumed() - extract MGMT Rx FW consumed event

+ 4 - 0
wmi/inc/wmi_unified_priv.h

@@ -2899,6 +2899,10 @@ QDF_STATUS
 			       void *evt_buf,
 			       struct wmi_host_pdev_set_halphy_cal_event *param);
 
+QDF_STATUS (*extract_mgmt_rx_ext_params)(wmi_unified_t wmi_handle,
+					 void *evt_buf,
+					 struct mgmt_rx_event_ext_params *params);
+
 #ifdef WLAN_MGMT_RX_REO_SUPPORT
 QDF_STATUS (*extract_mgmt_rx_fw_consumed)(wmi_unified_t wmi_handle,
 					  void *evt_buf,

+ 11 - 0
wmi/src/wmi_unified_api.c

@@ -2045,6 +2045,17 @@ wmi_extract_mgmt_rx_params(wmi_unified_t wmi_handle, void *evt_buf,
 	return QDF_STATUS_E_FAILURE;
 }
 
+QDF_STATUS
+wmi_extract_mgmt_rx_ext_params(wmi_unified_t wmi_handle, void *evt_buf,
+			       struct mgmt_rx_event_ext_params *params)
+{
+	if (wmi_handle->ops->extract_mgmt_rx_ext_params)
+		return wmi_handle->ops->extract_mgmt_rx_ext_params(
+				wmi_handle, evt_buf, params);
+
+	return QDF_STATUS_E_FAILURE;
+}
+
 #ifdef WLAN_MGMT_RX_REO_SUPPORT
 QDF_STATUS wmi_extract_mgmt_rx_fw_consumed(wmi_unified_t wmi_handle,
 					   void *evt_buf,

+ 43 - 0
wmi/src/wmi_unified_tlv.c

@@ -11596,6 +11596,48 @@ static QDF_STATUS extract_mgmt_rx_params_tlv(wmi_unified_t wmi_handle,
 	return QDF_STATUS_SUCCESS;
 }
 
+static QDF_STATUS extract_mgmt_rx_ext_params_tlv(wmi_unified_t wmi_handle,
+	void *evt_buf, struct mgmt_rx_event_ext_params *ext_params)
+{
+	WMI_MGMT_RX_EVENTID_param_tlvs *param_tlvs;
+	wmi_mgmt_rx_params_ext *ext_params_tlv;
+	wmi_mgmt_rx_hdr *ev_hdr;
+
+	param_tlvs = (WMI_MGMT_RX_EVENTID_param_tlvs *) evt_buf;
+	if (!param_tlvs) {
+		wmi_err("param_tlvs is NULL");
+		return QDF_STATUS_E_INVAL;
+	}
+
+	ev_hdr = param_tlvs->hdr;
+	if (!ev_hdr) {
+		wmi_err("Rx event is NULL");
+		return QDF_STATUS_E_INVAL;
+	}
+
+	ext_params_tlv = param_tlvs->mgmt_rx_params_ext;
+	if (ext_params_tlv) {
+		ext_params->ba_win_size = WMI_RX_PARAM_EXT_BA_WIN_SIZE_GET(
+					ext_params_tlv->mgmt_rx_params_ext_dword1);
+		if (ext_params->ba_win_size > 1024) {
+			wmi_err("ba win size from TLV is Invalid");
+			return QDF_STATUS_E_INVAL;
+		}
+
+		ext_params->reo_win_size = WMI_RX_PARAM_EXT_REO_WIN_SIZE_GET(
+					ext_params_tlv->mgmt_rx_params_ext_dword1);
+		if (ext_params->reo_win_size > 2048) {
+			wmi_err("reo win size from TLV is Invalid");
+			return QDF_STATUS_E_INVAL;
+		}
+	} else {
+		ext_params->ba_win_size = 0;
+		ext_params->reo_win_size = 0;
+	}
+
+	return QDF_STATUS_SUCCESS;
+}
+
 #ifdef WLAN_MGMT_RX_REO_SUPPORT
 /**
  * extract_mgmt_rx_fw_consumed_tlv() - extract MGMT Rx FW consumed event
@@ -18344,6 +18386,7 @@ struct wmi_ops tlv_ops =  {
 	.extract_pktlog_decode_info_event =
 		extract_pktlog_decode_info_event_tlv,
 	.extract_pdev_telemetry_stats = extract_pdev_telemetry_stats_tlv,
+	.extract_mgmt_rx_ext_params = extract_mgmt_rx_ext_params_tlv,
 };
 
 #ifdef WLAN_FEATURE_11BE_MLO