From 826f250128e44c95e1b9778ac363cf451e8f7a05 Mon Sep 17 00:00:00 2001 From: Himanshu Batra Date: Mon, 18 Apr 2022 08:44:39 +0530 Subject: [PATCH] qcacmn: Add support for mlo peer delete params Add support for mlo peer delete params Change-Id: Ic6ef0786f73a7bb16c8a5de035b13a0a56862125 CRs-Fixed: 3188357 --- .../inc/wlan_vdev_mgr_tgt_if_tx_defs.h | 11 +++++++ umac/mlo_mgr/src/wlan_mlo_mgr_cmn.c | 4 +++ wmi/inc/wmi_unified_11be_tlv.h | 31 +++++++++++++++++++ wmi/inc/wmi_unified_api.h | 4 +-- wmi/inc/wmi_unified_priv.h | 4 +-- wmi/src/wmi_unified_11be_tlv.c | 30 ++++++++++++++++++ wmi/src/wmi_unified_api.c | 7 +++-- wmi/src/wmi_unified_ocb_ut.c | 3 +- wmi/src/wmi_unified_tlv.c | 18 ++++++----- 9 files changed, 97 insertions(+), 15 deletions(-) diff --git a/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_tgt_if_tx_defs.h b/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_tgt_if_tx_defs.h index 2a65981ad9..dce7ab2597 100644 --- a/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_tgt_if_tx_defs.h +++ b/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 diff --git a/umac/mlo_mgr/src/wlan_mlo_mgr_cmn.c b/umac/mlo_mgr/src/wlan_mlo_mgr_cmn.c index fb39ff10c4..204c03fcbc 100644 --- a/umac/mlo_mgr/src/wlan_mlo_mgr_cmn.c +++ b/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, diff --git a/wmi/inc/wmi_unified_11be_tlv.h b/wmi/inc/wmi_unified_11be_tlv.h index 1bd33e22cf..519584912f 100644 --- a/wmi/inc/wmi_unified_11be_tlv.h +++ b/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*/ diff --git a/wmi/inc/wmi_unified_api.h b/wmi/inc/wmi_unified_api.h index 9d7afc742b..3120e14b04 100644 --- a/wmi/inc/wmi_unified_api.h +++ b/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 diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h index f4e3d2180e..8d729e2f09 100644 --- a/wmi/inc/wmi_unified_priv.h +++ b/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, diff --git a/wmi/src/wmi_unified_11be_tlv.c b/wmi/src/wmi_unified_11be_tlv.c index 57c56a171e..a46dcadb26 100644 --- a/wmi/src/wmi_unified_11be_tlv.c +++ b/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 diff --git a/wmi/src/wmi_unified_api.c b/wmi/src/wmi_unified_api.c index b19760271c..c74aa2ac40 100644 --- a/wmi/src/wmi_unified_api.c +++ b/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; } diff --git a/wmi/src/wmi_unified_ocb_ut.c b/wmi/src/wmi_unified_ocb_ut.c index 4b8ecae311..03ccd50a66 100644 --- a/wmi/src/wmi_unified_ocb_ut.c +++ b/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; diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 8e99c6930c..373eef128b 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/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; }