From 2fa9d8794252fc0eaf2acf2078143a4d6c2053fd Mon Sep 17 00:00:00 2001 From: Arun Kumar Khandavalli Date: Tue, 15 Mar 2022 21:50:06 +0530 Subject: [PATCH] qcacld-3.0: Configure the mld address wow pattern during vdev create Currently mac address is getting configured as the wow pattern while the vdev is getting created, configure the mld address also during the vdev creation so during legacy connection or roaming between the ml-legacy vice versa there wont be packet drops because of pattern mismatch. Change-Id: I9b98649bca132a6665f2e4dd94d9c6b840223827 CRs-Fixed: 3124115 --- .../pmo/core/src/wlan_pmo_static_config.c | 18 +++++++++++++++++- .../pmo/dispatcher/inc/wlan_pmo_ucfg_api.h | 16 +++++++++++++++- .../pmo/dispatcher/src/wlan_pmo_ucfg_api.c | 7 ++++++- core/hdd/src/wlan_hdd_main.c | 4 ++++ 4 files changed, 42 insertions(+), 3 deletions(-) diff --git a/components/pmo/core/src/wlan_pmo_static_config.c b/components/pmo/core/src/wlan_pmo_static_config.c index bf928f065d..7bb77e66b7 100644 --- a/components/pmo/core/src/wlan_pmo_static_config.c +++ b/components/pmo/core/src/wlan_pmo_static_config.c @@ -1,6 +1,6 @@ /* * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved. - * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2021-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 @@ -255,6 +255,7 @@ static QDF_STATUS pmo_configure_wow_sta(struct wlan_objmgr_vdev *vdev) uint8_t mac_mask[QDF_MAC_ADDR_SIZE]; QDF_STATUS ret = QDF_STATUS_SUCCESS; struct pmo_vdev_priv_obj *vdev_ctx; + struct qdf_mac_addr *mld_addr; vdev_ctx = pmo_vdev_get_priv(vdev); @@ -274,6 +275,21 @@ static QDF_STATUS pmo_configure_wow_sta(struct wlan_objmgr_vdev *vdev) return ret; } + mld_addr = (struct qdf_mac_addr *)wlan_vdev_mlme_get_mldaddr(vdev); + if (!qdf_is_macaddr_zero(mld_addr)) { + ret = pmo_tgt_send_wow_patterns_to_fw( + vdev, + pmo_get_and_increment_wow_default_ptrn(vdev_ctx), + (uint8_t *)mld_addr, + QDF_MAC_ADDR_SIZE, 0, mac_mask, + QDF_MAC_ADDR_SIZE, false); + if (QDF_IS_STATUS_ERROR(ret)) { + pmo_err("Failed to add WOW MLD unicast pattern ret %d", + ret); + return ret; + } + } + ret = pmo_configure_ssdp(vdev); if (ret != QDF_STATUS_SUCCESS) pmo_err("Failed to configure SSDP patterns to FW"); diff --git a/components/pmo/dispatcher/inc/wlan_pmo_ucfg_api.h b/components/pmo/dispatcher/inc/wlan_pmo_ucfg_api.h index 5f3570cc10..a45b5b13bd 100644 --- a/components/pmo/dispatcher/inc/wlan_pmo_ucfg_api.h +++ b/components/pmo/dispatcher/inc/wlan_pmo_ucfg_api.h @@ -1,6 +1,6 @@ /* * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved. - * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2021-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 @@ -1010,6 +1010,15 @@ QDF_STATUS ucfg_pmo_add_wow_user_pattern(struct wlan_objmgr_vdev *vdev, struct pmo_wow_add_pattern *ptrn); +/** + * ucfg_pmo_register_wow_default_patterns() - register default wow patterns + * with fw + * @vdev: Pointer to object manager vdev + * + * Return: none + */ +void ucfg_pmo_register_wow_default_patterns(struct wlan_objmgr_vdev *vdev); + /** * ucfg_pmo_del_wow_pattern() - Delete WoWl patterns * @vdev: objmgr vdev @@ -1826,6 +1835,11 @@ ucfg_pmo_del_wow_user_pattern( return QDF_STATUS_SUCCESS; } +static inline void +ucfg_pmo_register_wow_default_patterns(struct wlan_objmgr_vdev *vdev) +{ +} + QDF_STATUS ucfg_pmo_del_wow_pattern(struct wlan_objmgr_vdev *vdev) { diff --git a/components/pmo/dispatcher/src/wlan_pmo_ucfg_api.c b/components/pmo/dispatcher/src/wlan_pmo_ucfg_api.c index e59a73518a..d80fcb483e 100644 --- a/components/pmo/dispatcher/src/wlan_pmo_ucfg_api.c +++ b/components/pmo/dispatcher/src/wlan_pmo_ucfg_api.c @@ -1,6 +1,6 @@ /* * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved. - * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2021-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 @@ -485,6 +485,11 @@ ucfg_pmo_add_wow_user_pattern(struct wlan_objmgr_vdev *vdev, return pmo_core_add_wow_user_pattern(vdev, ptrn); } +void ucfg_pmo_register_wow_default_patterns(struct wlan_objmgr_vdev *vdev) +{ + pmo_register_wow_default_patterns(vdev); +} + QDF_STATUS ucfg_pmo_del_wow_pattern(struct wlan_objmgr_vdev *vdev) { diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index a09eea3f45..c2314aa3e2 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -5417,6 +5417,10 @@ status_ret: } sme_vdev_set_data_tx_callback(adapter->vdev); + /* Update FW WoW pattern with new MAC address */ + ucfg_pmo_del_wow_pattern(adapter->vdev); + ucfg_pmo_register_wow_default_patterns(adapter->vdev); + return ret; }