浏览代码

qcacmn: Add support for mlo peer delete params

Add support for mlo peer delete params

Change-Id: Ic6ef0786f73a7bb16c8a5de035b13a0a56862125
CRs-Fixed: 3188357
Himanshu Batra 3 年之前
父节点
当前提交
826f250128

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

@@ -423,6 +423,17 @@ struct peer_flush_params {
 	uint8_t peer_mac[QDF_MAC_ADDR_SIZE];
 };
 
+/**
+ * struct peer_delete_params - peer delete cmd parameter
+ * @vdev_id: vdev id
+ * @mlo_logical_link_id_bitmap: logical link id bitmap for peers
+ * not getting created
+ */
+struct peer_delete_cmd_params {
+	uint8_t vdev_id;
+	uint32_t hw_link_id_bitmap;
+};
+
 /* Default FILS DISCOVERY/probe response sent in period of 20TU */
 #define DEFAULT_FILS_DISCOVERY_PERIOD 20
 #define DEFAULT_PROBE_RESP_PERIOD 20

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

@@ -327,6 +327,8 @@ uint16_t wlan_mlo_get_pdev_hw_link_id(struct wlan_objmgr_pdev *pdev)
 	return hw_link_id;
 }
 
+qdf_export_symbol(wlan_mlo_get_pdev_hw_link_id);
+
 static void wlan_pdev_hw_link_iterator(struct wlan_objmgr_psoc *psoc,
 				       void *obj, void *arg)
 {
@@ -371,6 +373,8 @@ wlan_mlo_get_pdev_by_hw_link_id(uint16_t hw_link_id,
 
 	return itr.pdev;
 }
+
+qdf_export_symbol(wlan_mlo_get_pdev_by_hw_link_id);
 #endif /*WLAN_MLO_MULTI_CHIP*/
 
 void mlo_get_ml_vdev_list(struct wlan_objmgr_vdev *vdev,

+ 31 - 0
wmi/inc/wmi_unified_11be_tlv.h

@@ -134,6 +134,25 @@ size_t peer_assoc_t2lm_params_size(struct peer_assoc_params *req);
  */
 uint8_t *peer_assoc_add_tid_to_link_map(uint8_t *buf_ptr,
 					struct peer_assoc_params *req);
+
+/**
+ *  peer_delete_mlo_params_size() - Get MLO params size in pdev delete
+ *  @req: peer delete request params
+ *
+ *  Return: size of MLO params in vdev start
+ */
+size_t peer_delete_mlo_params_size(struct peer_delete_cmd_params *req);
+
+/**
+ *  peer_delete_add_mlo_params() - Add MLO params in peer delete cmd
+ *  @buf_ptr: pointer to peer delete cmd  buffer.
+ *  @req: ponter to peer delete request param
+ *
+ *  Return: pointer to new offset of cmd buffer
+ */
+uint8_t *peer_delete_add_mlo_params(uint8_t *buf_ptr,
+				    struct peer_delete_cmd_params *req);
+
 /** wmi_11be_tlv_attach_tlv - Attach 11be relaated callbacks
  *  @wmi_handle: WMI handle
  */
@@ -229,6 +248,18 @@ static uint8_t *peer_assoc_add_tid_to_link_map(uint8_t *buf_ptr,
 	return buf_ptr + WMI_TLV_HDR_SIZE;
 }
 
+static size_t peer_delete_mlo_params_size(struct peer_delete_cmd_params *req)
+{
+	return WMI_TLV_HDR_SIZE;
+}
+
+static uint8_t *peer_delete_add_mlo_params(uint8_t *buf_ptr,
+					   struct peer_delete_cmd_params *req)
+{
+	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
+	return buf_ptr + WMI_TLV_HDR_SIZE;
+}
+
 static void wmi_11be_attach_tlv(wmi_unified_t wmi_handle)
 { }
 #endif /*WLAN_FEATURE_11BE_MLO*/

+ 2 - 2
wmi/inc/wmi_unified_api.h

@@ -913,14 +913,14 @@ QDF_STATUS wmi_unified_sifs_trigger_send(wmi_unified_t wmi_handle,
  * wmi_unified_peer_delete_send() - send PEER delete command to fw
  * @wmi_handle: wmi handle
  * @peer_addr: peer mac addr
- * @vdev_id: vdev id
+ * @param: pointer to hold peer delete parameters
  *
  * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
  */
 QDF_STATUS
 wmi_unified_peer_delete_send(wmi_unified_t wmi_handle,
 			     uint8_t peer_addr[QDF_MAC_ADDR_SIZE],
-			     uint8_t vdev_id);
+			     struct peer_delete_cmd_params *param);
 
 /**
  * wmi_unified_peer_flush_tids_send() - flush peer tids packets in fw

+ 2 - 2
wmi/inc/wmi_unified_priv.h

@@ -494,8 +494,8 @@ QDF_STATUS (*send_peer_flush_tids_cmd)(wmi_unified_t wmi,
 					 struct peer_flush_params *param);
 
 QDF_STATUS (*send_peer_delete_cmd)(wmi_unified_t wmi,
-				    uint8_t peer_addr[QDF_MAC_ADDR_SIZE],
-				    uint8_t vdev_id);
+				   uint8_t peer_addr[QDF_MAC_ADDR_SIZE],
+				   struct peer_delete_cmd_params *param);
 
 QDF_STATUS (*send_peer_delete_all_cmd)(
 				wmi_unified_t wmi,

+ 30 - 0
wmi/src/wmi_unified_11be_tlv.c

@@ -251,6 +251,36 @@ uint8_t *peer_assoc_add_ml_partner_links(uint8_t *buf_ptr,
 		sizeof(wmi_peer_assoc_mlo_partner_link_params));
 }
 
+size_t peer_delete_mlo_params_size(struct peer_delete_cmd_params *req)
+{
+	if (!req->hw_link_id_bitmap)
+		return WMI_TLV_HDR_SIZE;
+
+	return sizeof(wmi_peer_delete_mlo_params) + WMI_TLV_HDR_SIZE;
+}
+
+uint8_t *peer_delete_add_mlo_params(uint8_t *buf_ptr,
+				    struct peer_delete_cmd_params *req)
+{
+	wmi_peer_delete_mlo_params *mlo_params;
+
+	if (!req->hw_link_id_bitmap) {
+		WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
+		return buf_ptr + WMI_TLV_HDR_SIZE;
+	}
+
+	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
+		       sizeof(wmi_peer_delete_mlo_params));
+	buf_ptr += sizeof(uint32_t);
+
+	mlo_params = (wmi_peer_delete_mlo_params *)buf_ptr;
+	WMITLV_SET_HDR(&mlo_params->tlv_header,
+		       WMITLV_TAG_STRUC_wmi_peer_delete_mlo_params,
+		       WMITLV_GET_STRUCT_TLVLEN(wmi_peer_delete_mlo_params));
+	mlo_params->mlo_hw_link_id_bitmap = req->hw_link_id_bitmap;
+	return buf_ptr + sizeof(wmi_peer_delete_mlo_params);
+}
+
 /**
  * force_mode_host_to_fw() - translate force mode for MLO link set active
  *  command

+ 4 - 3
wmi/src/wmi_unified_api.c

@@ -162,11 +162,12 @@ wmi_unified_peer_flush_tids_send(wmi_unified_t wmi_handle,
 
 QDF_STATUS wmi_unified_peer_delete_send(wmi_unified_t wmi_handle,
 					uint8_t peer_addr[QDF_MAC_ADDR_SIZE],
-					uint8_t vdev_id)
+					struct peer_delete_cmd_params *param)
 {
 	if (wmi_handle->ops->send_peer_delete_cmd)
-		return wmi_handle->ops->send_peer_delete_cmd(wmi_handle,
-				  peer_addr, vdev_id);
+		return wmi_handle->ops->send_peer_delete_cmd(
+				wmi_handle,
+				peer_addr, param);
 
 	return QDF_STATUS_E_FAILURE;
 }

+ 2 - 1
wmi/src/wmi_unified_ocb_ut.c

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. 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
@@ -379,7 +380,7 @@ static QDF_STATUS fake_peer_create_cmd_tlv(wmi_unified_t wmi,
  */
 static QDF_STATUS fake_peer_delete_cmd_tlv(wmi_unified_t wmi,
 				 uint8_t peer_addr[QDF_MAC_ADDR_SIZE],
-				 uint8_t vdev_id)
+				 struct peer_delete_cmd_params *param)
 {
 	wmi_debug("called");
 	return QDF_STATUS_SUCCESS;

+ 11 - 7
wmi/src/wmi_unified_tlv.c

@@ -1286,38 +1286,42 @@ static QDF_STATUS send_peer_flush_tids_cmd_tlv(wmi_unified_t wmi,
  * send_peer_delete_cmd_tlv() - send PEER delete command to fw
  * @wmi: wmi handle
  * @peer_addr: peer mac addr
- * @vdev_id: vdev id
+ * @param: peer delete parameters
  *
  * Return: QDF_STATUS_SUCCESS for success or error code
  */
 static QDF_STATUS send_peer_delete_cmd_tlv(wmi_unified_t wmi,
 				 uint8_t peer_addr[QDF_MAC_ADDR_SIZE],
-				 uint8_t vdev_id)
+				 struct peer_delete_cmd_params *param)
 {
 	wmi_peer_delete_cmd_fixed_param *cmd;
 	wmi_buf_t buf;
 	int32_t len = sizeof(*cmd);
+	uint8_t *buf_ptr;
+
+	len += peer_delete_mlo_params_size(param);
 	buf = wmi_buf_alloc(wmi, len);
 	if (!buf)
 		return QDF_STATUS_E_NOMEM;
 
-	cmd = (wmi_peer_delete_cmd_fixed_param *) wmi_buf_data(buf);
+	buf_ptr = (uint8_t *)wmi_buf_data(buf);
+	cmd = (wmi_peer_delete_cmd_fixed_param *)buf_ptr;
 	WMITLV_SET_HDR(&cmd->tlv_header,
 		       WMITLV_TAG_STRUC_wmi_peer_delete_cmd_fixed_param,
 		       WMITLV_GET_STRUCT_TLVLEN
 			       (wmi_peer_delete_cmd_fixed_param));
 	WMI_CHAR_ARRAY_TO_MAC_ADDR(peer_addr, &cmd->peer_macaddr);
-	cmd->vdev_id = vdev_id;
-
+	cmd->vdev_id = param->vdev_id;
+	buf_ptr = (uint8_t *)(((uintptr_t) cmd) + sizeof(*cmd));
+	buf_ptr = peer_delete_add_mlo_params(buf_ptr, param);
 	wmi_debug("peer_addr "QDF_MAC_ADDR_FMT" vdev_id %d",
-		 QDF_MAC_ADDR_REF(peer_addr), vdev_id);
+		 QDF_MAC_ADDR_REF(peer_addr), param->vdev_id);
 	wmi_mtrace(WMI_PEER_DELETE_CMDID, cmd->vdev_id, 0);
 	if (wmi_unified_cmd_send(wmi, buf, len, WMI_PEER_DELETE_CMDID)) {
 		wmi_err("Failed to send peer delete command");
 		wmi_buf_free(buf);
 		return QDF_STATUS_E_FAILURE;
 	}
-
 	return 0;
 }