Przeglądaj źródła

qcacmn: Add WMI vdev create params for MLO

WMI vdev create is changed to incude mlo macdress as one of TLV.
Add changes in WMI vdev create send API to include this new TLV.

Change-Id: Ia13bdb8fbfc9f68d1e4c0209201f9acc4f575387
CRs-Fixed: 2958839
Kiran Venkatappa 4 lat temu
rodzic
commit
923cd4dea9

+ 3 - 0
umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_tgt_if_tx_defs.h

@@ -520,6 +520,9 @@ struct vdev_create_params {
 	uint32_t mbssid_flags;
 	uint8_t vdevid_trans;
 	bool special_vdev_mode;
+#ifdef WLAN_FEATURE_11BE_MLO
+	uint8_t mlo_mac[QDF_MAC_ADDR_SIZE];
+#endif
 };
 
 /**

+ 49 - 0
wmi/inc/wmi_unified_11be_tlv.h

@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2021, 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.
+ */
+
+#ifndef _WMI_UNIFIED_11BE_TLV_H_
+#define _WMI_UNIFIED_11BE_TLV_H_
+
+#ifdef WLAN_FEATURE_11BE_MLO
+/**
+ *  vdev_create_mlo_params_size() - Get MLO params size in vdev create
+ *
+ *  Return: size of MLO params in vdev create
+ */
+size_t vdev_create_mlo_params_size(void);
+/**
+ *  vdev_create_add_mlo_params() - Add MLO params in vdev create cmd
+ *  @buf_ptr: pointer to vdev create buffer.
+ *  @param: ponter to vdev create request param
+ *
+ *  Return: pointer to new offset of vdev create buffer
+ */
+uint8_t *vdev_create_add_mlo_params(uint8_t *buf_ptr,
+				    struct vdev_create_params *param);
+#else
+static uint8_t *vdev_create_add_mlo_params(uint8_t *buf_ptr,
+					   struct vdev_create_params *param)
+{
+	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
+	return buf_ptr + WMI_TLV_HDR_SIZE;
+}
+
+static size_t vdev_create_mlo_params_size(void)
+{
+	return WMI_TLV_HDR_SIZE;
+}
+#endif /*WLAN_FEATURE_11BE_MLO*/
+#endif /*_WMI_UNIFIED_11BE_TLV_H_*/

+ 47 - 0
wmi/src/wmi_unified_11be_tlv.c

@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2021, 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.
+ */
+
+#include "wmi_unified_api.h"
+#include "wmi.h"
+#include "wmi_unified_priv.h"
+#include "wmi_unified_param.h"
+#include "wmi_unified_11be_tlv.h"
+
+size_t vdev_create_mlo_params_size(void)
+{
+	return sizeof(wmi_vdev_create_mlo_params) + WMI_TLV_HDR_SIZE;
+}
+
+uint8_t *vdev_create_add_mlo_params(uint8_t *buf_ptr,
+				    struct vdev_create_params *param)
+{
+	wmi_vdev_create_mlo_params *mlo_params;
+
+	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
+		       sizeof(wmi_vdev_create_mlo_params));
+	buf_ptr += sizeof(uint32_t);
+
+	mlo_params = (wmi_vdev_create_mlo_params *)buf_ptr;
+	WMITLV_SET_HDR(&mlo_params->tlv_header,
+		       WMITLV_TAG_STRUC_wmi_vdev_create_mlo_params,
+		       WMITLV_GET_STRUCT_TLVLEN(wmi_vdev_create_mlo_params));
+
+	WMI_CHAR_ARRAY_TO_MAC_ADDR(param->mlo_mac, &mlo_params->mld_macaddr);
+
+	wmi_debug("MLD Addr = "QDF_MAC_ADDR_FMT,
+		  QDF_MAC_ADDR_REF(param->mlo_mac));
+	return buf_ptr + sizeof(wmi_vdev_create_mlo_params);
+}

+ 7 - 0
wmi/src/wmi_unified_tlv.c

@@ -63,6 +63,7 @@
 
 #include <wmi_unified_vdev_api.h>
 #include <wmi_unified_vdev_tlv.h>
+#include <wmi_unified_11be_tlv.h>
 
 /*
  * If FW supports WMI_SERVICE_SCAN_CONFIG_PER_CHANNEL,
@@ -773,6 +774,8 @@ static QDF_STATUS send_vdev_create_cmd_tlv(wmi_unified_t wmi_handle,
 	wmi_vdev_txrx_streams *txrx_streams;
 
 	len += (num_bands * sizeof(*txrx_streams) + WMI_TLV_HDR_SIZE);
+	len += vdev_create_mlo_params_size();
+
 	buf = wmi_buf_alloc(wmi_handle, len);
 	if (!buf)
 		return QDF_STATUS_E_NOMEM;
@@ -817,6 +820,10 @@ static QDF_STATUS send_vdev_create_cmd_tlv(wmi_unified_t wmi_handle,
 	WMITLV_SET_HDR(&txrx_streams->tlv_header,
 		       WMITLV_TAG_STRUC_wmi_vdev_txrx_streams,
 		       WMITLV_GET_STRUCT_TLVLEN(wmi_vdev_txrx_streams));
+
+	buf_ptr += (num_bands * sizeof(wmi_vdev_txrx_streams));
+	buf_ptr = vdev_create_add_mlo_params(buf_ptr, param);
+
 	wmi_mtrace(WMI_VDEV_CREATE_CMDID, cmd->vdev_id, 0);
 	ret = wmi_unified_cmd_send(wmi_handle, buf, len, WMI_VDEV_CREATE_CMDID);
 	if (QDF_IS_STATUS_ERROR(ret)) {