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; }