Loading Kbuild +2 −0 Original line number Diff line number Diff line Loading @@ -3272,6 +3272,8 @@ cppflags-$(CONFIG_WLAN_FEATURE_PKT_CAPTURE) += -DWLAN_FEATURE_PKT_CAPTURE cppflags-$(CONFIG_WLAN_FEATURE_PKT_CAPTURE_V2) += -DWLAN_FEATURE_PKT_CAPTURE_V2 cppflags-$(CONFIG_DP_RX_UDP_OVER_PEER_ROAM) += -DDP_RX_UDP_OVER_PEER_ROAM cppflags-$(CONFIG_QCA_WIFI_NAPIER_EMULATION) += -DQCA_WIFI_NAPIER_EMULATION cppflags-$(CONFIG_SHADOW_V2) += -DCONFIG_SHADOW_V2 cppflags-$(CONFIG_QCA6290_HEADERS_DEF) += -DQCA6290_HEADERS_DEF Loading components/cmn_services/interface_mgr/src/wlan_if_mgr_roam.c +20 −0 Original line number Diff line number Diff line /* * Copyright (c) 2020-2021, 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 above Loading Loading @@ -32,6 +33,7 @@ #include "wlan_vdev_mgr_utils_api.h" #include "wni_api.h" #include "wlan_mlme_vdev_mgr_interface.h" #include "wlan_scan_api.h" static void if_mgr_enable_roaming_on_vdev(struct wlan_objmgr_pdev *pdev, void *object, void *arg) Loading Loading @@ -744,6 +746,24 @@ QDF_STATUS if_mgr_validate_candidate(struct wlan_objmgr_vdev *vdev, if (!psoc) return QDF_STATUS_E_FAILURE; /* * Do not allow STA to connect on 6Ghz or indoor channel for non dbs * hardware if SAP and skip_6g_and_indoor_freq_scan ini are present */ if (wlan_scan_cfg_skip_6g_and_indoor_freq(psoc) && !policy_mgr_is_hw_dbs_capable(psoc) && (WLAN_REG_IS_6GHZ_CHAN_FREQ(chan_freq) || wlan_reg_is_freq_indoor(pdev, chan_freq)) && op_mode == QDF_STA_MODE && policy_mgr_mode_specific_connection_count( psoc, PM_SAP_MODE, NULL)) { ifmgr_debug("STA connection not allowed on bssid: "QDF_MAC_ADDR_FMT" with freq: %d (6Ghz or indoor(%d)), as SAP is present", QDF_MAC_ADDR_REF(candidate_info->peer_addr.bytes), chan_freq, wlan_reg_is_freq_indoor(pdev, chan_freq)); return QDF_STATUS_E_INVAL; } /* * Ignore the BSS if any other vdev is already connected to it. */ Loading components/ipa/core/src/wlan_ipa_main.c +7 −1 Original line number Diff line number Diff line Loading @@ -754,9 +754,15 @@ void ipa_fw_rejuvenate_send_msg(struct wlan_objmgr_pdev *pdev) void ipa_component_config_update(struct wlan_objmgr_psoc *psoc) { struct device *dev = wlan_psoc_get_qdf_dev(psoc)->dev; struct device *dev; QDF_STATUS status; if (!wlan_psoc_get_qdf_dev(psoc)) { ipa_err("wlan_psoc_get_qdf_dev returned NULL"); return; } dev = wlan_psoc_get_qdf_dev(psoc)->dev; status = ipa_config_mem_alloc(); if (QDF_IS_STATUS_ERROR(status)) { ipa_err("Failed to alloc g_ipa_config"); Loading components/mlme/core/inc/wlan_mlme_main.h +43 −1 Original line number Diff line number Diff line /* * Copyright (c) 2018-2020 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 Loading Loading @@ -38,6 +38,7 @@ #define mlme_legacy_info(params...) QDF_TRACE_INFO(QDF_MODULE_ID_MLME, params) #define mlme_legacy_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_MLME, params) #define MLME_PEER_SET_KEY_WAKELOCK_TIMEOUT WAKELOCK_DURATION_RECOMMENDED /** * struct wlan_mlme_psoc_ext_obj -MLME ext psoc priv object * @cfg: cfg items Loading Loading @@ -85,6 +86,9 @@ struct sae_auth_retry { * @last_assoc_received_time: last assoc received time * @last_disassoc_deauth_received_time: last disassoc/deauth received time * @twt_ctx: TWT context * @peer_set_key_wakelock: wakelock to protect peer set key op with firmware * @peer_set_key_runtime_wakelock: runtime pm wakelock for set key * @is_key_wakelock_set: flag to check if key wakelock is pending to release */ struct peer_mlme_priv_obj { uint8_t last_pn_valid; Loading @@ -96,6 +100,9 @@ struct peer_mlme_priv_obj { #ifdef WLAN_SUPPORT_TWT struct twt_context twt_ctx; #endif qdf_wake_lock_t peer_set_key_wakelock; qdf_runtime_lock_t peer_set_key_runtime_wakelock; bool is_key_wakelock_set; }; /** Loading Loading @@ -562,6 +569,32 @@ void mlme_set_peer_pmf_status(struct wlan_objmgr_peer *peer, */ bool mlme_get_peer_pmf_status(struct wlan_objmgr_peer *peer); /** * wlan_acquire_peer_key_wakelock -api to get key wakelock * @pdev: pdev * @mac_addr: peer mac addr * * This function acquires wakelock and prevent runtime pm during key * installation * * Return: None */ void wlan_acquire_peer_key_wakelock(struct wlan_objmgr_pdev *pdev, uint8_t *mac_addr); /** * wlan_release_peer_key_wakelock -api to release key wakelock * @pdev: pdev * @mac_addr: peer mac addr * * This function releases wakelock and allow runtime pm after key * installation * * Return: None */ void wlan_release_peer_key_wakelock(struct wlan_objmgr_pdev *pdev, uint8_t *mac_addr); /** * mlme_set_discon_reason_n_from_ap() - set disconnect reason and from ap flag * @psoc: PSOC pointer Loading Loading @@ -774,4 +807,13 @@ QDF_STATUS mlme_get_cfg_wlm_reset(struct wlan_objmgr_psoc *psoc, */ void mlme_reinit_control_config_lfr_params(struct wlan_objmgr_psoc *psoc, struct wlan_mlme_lfr_cfg *lfr); /** * wlan_is_vdev_id_up() - check if vdev id is in UP state * @pdev: Pointer to pdev * @vdev_id: vdev id * * Return: if vdev is up */ bool wlan_is_vdev_id_up(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id); #endif components/mlme/core/src/wlan_mlme_main.c +109 −0 Original line number Diff line number Diff line Loading @@ -231,6 +231,10 @@ mlme_peer_object_created_notification(struct wlan_objmgr_peer *peer, qdf_mem_free(peer_priv); } qdf_wake_lock_create(&peer_priv->peer_set_key_wakelock, "peer_set_key"); qdf_runtime_lock_init(&peer_priv->peer_set_key_runtime_wakelock); peer_priv->is_key_wakelock_set = false; return status; } Loading @@ -253,6 +257,10 @@ mlme_peer_object_destroyed_notification(struct wlan_objmgr_peer *peer, return QDF_STATUS_E_FAILURE; } peer_priv->is_key_wakelock_set = false; qdf_runtime_lock_deinit(&peer_priv->peer_set_key_runtime_wakelock); qdf_wake_lock_destroy(&peer_priv->peer_set_key_wakelock); status = wlan_objmgr_peer_component_obj_detach(peer, WLAN_UMAC_COMP_MLME, peer_priv); Loading Loading @@ -2839,6 +2847,88 @@ bool mlme_get_peer_pmf_status(struct wlan_objmgr_peer *peer) return peer_priv->is_pmf_enabled; } void wlan_acquire_peer_key_wakelock(struct wlan_objmgr_pdev *pdev, uint8_t *mac_addr) { uint8_t pdev_id; struct wlan_objmgr_peer *peer; struct peer_mlme_priv_obj *peer_priv; struct wlan_objmgr_psoc *psoc; psoc = wlan_pdev_get_psoc(pdev); if (!psoc) return; pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev); peer = wlan_objmgr_get_peer(psoc, pdev_id, mac_addr, WLAN_LEGACY_MAC_ID); if (!peer) return; peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer, WLAN_UMAC_COMP_MLME); if (!peer_priv) { wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID); return; } if (peer_priv->is_key_wakelock_set) { wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID); return; } mlme_debug(QDF_MAC_ADDR_FMT ": Acquire set key wake lock for %d ms", QDF_MAC_ADDR_REF(mac_addr), MLME_PEER_SET_KEY_WAKELOCK_TIMEOUT); qdf_wake_lock_timeout_acquire(&peer_priv->peer_set_key_wakelock, MLME_PEER_SET_KEY_WAKELOCK_TIMEOUT); qdf_runtime_pm_prevent_suspend( &peer_priv->peer_set_key_runtime_wakelock); peer_priv->is_key_wakelock_set = true; wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID); } void wlan_release_peer_key_wakelock(struct wlan_objmgr_pdev *pdev, uint8_t *mac_addr) { uint8_t pdev_id; struct wlan_objmgr_peer *peer; struct peer_mlme_priv_obj *peer_priv; struct wlan_objmgr_psoc *psoc; psoc = wlan_pdev_get_psoc(pdev); if (!psoc) return; pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev); peer = wlan_objmgr_get_peer(psoc, pdev_id, mac_addr, WLAN_LEGACY_MAC_ID); if (!peer) return; peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer, WLAN_UMAC_COMP_MLME); if (!peer_priv) { wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID); return; } if (!peer_priv->is_key_wakelock_set) { wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID); return; } peer_priv->is_key_wakelock_set = false; mlme_debug(QDF_MAC_ADDR_FMT ": Release set key wake lock", QDF_MAC_ADDR_REF(mac_addr)); qdf_wake_lock_release(&peer_priv->peer_set_key_wakelock, WIFI_POWER_EVENT_WAKELOCK_WMI_CMD_RSP); qdf_runtime_pm_allow_suspend( &peer_priv->peer_set_key_runtime_wakelock); wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID); } void mlme_set_discon_reason_n_from_ap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, bool from_ap, uint32_t reason_code) Loading Loading @@ -3276,3 +3366,22 @@ QDF_STATUS mlme_get_fw_scan_channels(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } #endif bool wlan_is_vdev_id_up(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id) { struct wlan_objmgr_vdev *vdev; bool is_up = false; if (!pdev) return is_up; vdev = wlan_objmgr_get_vdev_by_id_from_pdev(pdev, vdev_id, WLAN_LEGACY_MAC_ID); if (vdev) { is_up = QDF_IS_STATUS_SUCCESS(wlan_vdev_is_up(vdev)); wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID); } return is_up; } Loading
Kbuild +2 −0 Original line number Diff line number Diff line Loading @@ -3272,6 +3272,8 @@ cppflags-$(CONFIG_WLAN_FEATURE_PKT_CAPTURE) += -DWLAN_FEATURE_PKT_CAPTURE cppflags-$(CONFIG_WLAN_FEATURE_PKT_CAPTURE_V2) += -DWLAN_FEATURE_PKT_CAPTURE_V2 cppflags-$(CONFIG_DP_RX_UDP_OVER_PEER_ROAM) += -DDP_RX_UDP_OVER_PEER_ROAM cppflags-$(CONFIG_QCA_WIFI_NAPIER_EMULATION) += -DQCA_WIFI_NAPIER_EMULATION cppflags-$(CONFIG_SHADOW_V2) += -DCONFIG_SHADOW_V2 cppflags-$(CONFIG_QCA6290_HEADERS_DEF) += -DQCA6290_HEADERS_DEF Loading
components/cmn_services/interface_mgr/src/wlan_if_mgr_roam.c +20 −0 Original line number Diff line number Diff line /* * Copyright (c) 2020-2021, 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 above Loading Loading @@ -32,6 +33,7 @@ #include "wlan_vdev_mgr_utils_api.h" #include "wni_api.h" #include "wlan_mlme_vdev_mgr_interface.h" #include "wlan_scan_api.h" static void if_mgr_enable_roaming_on_vdev(struct wlan_objmgr_pdev *pdev, void *object, void *arg) Loading Loading @@ -744,6 +746,24 @@ QDF_STATUS if_mgr_validate_candidate(struct wlan_objmgr_vdev *vdev, if (!psoc) return QDF_STATUS_E_FAILURE; /* * Do not allow STA to connect on 6Ghz or indoor channel for non dbs * hardware if SAP and skip_6g_and_indoor_freq_scan ini are present */ if (wlan_scan_cfg_skip_6g_and_indoor_freq(psoc) && !policy_mgr_is_hw_dbs_capable(psoc) && (WLAN_REG_IS_6GHZ_CHAN_FREQ(chan_freq) || wlan_reg_is_freq_indoor(pdev, chan_freq)) && op_mode == QDF_STA_MODE && policy_mgr_mode_specific_connection_count( psoc, PM_SAP_MODE, NULL)) { ifmgr_debug("STA connection not allowed on bssid: "QDF_MAC_ADDR_FMT" with freq: %d (6Ghz or indoor(%d)), as SAP is present", QDF_MAC_ADDR_REF(candidate_info->peer_addr.bytes), chan_freq, wlan_reg_is_freq_indoor(pdev, chan_freq)); return QDF_STATUS_E_INVAL; } /* * Ignore the BSS if any other vdev is already connected to it. */ Loading
components/ipa/core/src/wlan_ipa_main.c +7 −1 Original line number Diff line number Diff line Loading @@ -754,9 +754,15 @@ void ipa_fw_rejuvenate_send_msg(struct wlan_objmgr_pdev *pdev) void ipa_component_config_update(struct wlan_objmgr_psoc *psoc) { struct device *dev = wlan_psoc_get_qdf_dev(psoc)->dev; struct device *dev; QDF_STATUS status; if (!wlan_psoc_get_qdf_dev(psoc)) { ipa_err("wlan_psoc_get_qdf_dev returned NULL"); return; } dev = wlan_psoc_get_qdf_dev(psoc)->dev; status = ipa_config_mem_alloc(); if (QDF_IS_STATUS_ERROR(status)) { ipa_err("Failed to alloc g_ipa_config"); Loading
components/mlme/core/inc/wlan_mlme_main.h +43 −1 Original line number Diff line number Diff line /* * Copyright (c) 2018-2020 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 Loading Loading @@ -38,6 +38,7 @@ #define mlme_legacy_info(params...) QDF_TRACE_INFO(QDF_MODULE_ID_MLME, params) #define mlme_legacy_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_MLME, params) #define MLME_PEER_SET_KEY_WAKELOCK_TIMEOUT WAKELOCK_DURATION_RECOMMENDED /** * struct wlan_mlme_psoc_ext_obj -MLME ext psoc priv object * @cfg: cfg items Loading Loading @@ -85,6 +86,9 @@ struct sae_auth_retry { * @last_assoc_received_time: last assoc received time * @last_disassoc_deauth_received_time: last disassoc/deauth received time * @twt_ctx: TWT context * @peer_set_key_wakelock: wakelock to protect peer set key op with firmware * @peer_set_key_runtime_wakelock: runtime pm wakelock for set key * @is_key_wakelock_set: flag to check if key wakelock is pending to release */ struct peer_mlme_priv_obj { uint8_t last_pn_valid; Loading @@ -96,6 +100,9 @@ struct peer_mlme_priv_obj { #ifdef WLAN_SUPPORT_TWT struct twt_context twt_ctx; #endif qdf_wake_lock_t peer_set_key_wakelock; qdf_runtime_lock_t peer_set_key_runtime_wakelock; bool is_key_wakelock_set; }; /** Loading Loading @@ -562,6 +569,32 @@ void mlme_set_peer_pmf_status(struct wlan_objmgr_peer *peer, */ bool mlme_get_peer_pmf_status(struct wlan_objmgr_peer *peer); /** * wlan_acquire_peer_key_wakelock -api to get key wakelock * @pdev: pdev * @mac_addr: peer mac addr * * This function acquires wakelock and prevent runtime pm during key * installation * * Return: None */ void wlan_acquire_peer_key_wakelock(struct wlan_objmgr_pdev *pdev, uint8_t *mac_addr); /** * wlan_release_peer_key_wakelock -api to release key wakelock * @pdev: pdev * @mac_addr: peer mac addr * * This function releases wakelock and allow runtime pm after key * installation * * Return: None */ void wlan_release_peer_key_wakelock(struct wlan_objmgr_pdev *pdev, uint8_t *mac_addr); /** * mlme_set_discon_reason_n_from_ap() - set disconnect reason and from ap flag * @psoc: PSOC pointer Loading Loading @@ -774,4 +807,13 @@ QDF_STATUS mlme_get_cfg_wlm_reset(struct wlan_objmgr_psoc *psoc, */ void mlme_reinit_control_config_lfr_params(struct wlan_objmgr_psoc *psoc, struct wlan_mlme_lfr_cfg *lfr); /** * wlan_is_vdev_id_up() - check if vdev id is in UP state * @pdev: Pointer to pdev * @vdev_id: vdev id * * Return: if vdev is up */ bool wlan_is_vdev_id_up(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id); #endif
components/mlme/core/src/wlan_mlme_main.c +109 −0 Original line number Diff line number Diff line Loading @@ -231,6 +231,10 @@ mlme_peer_object_created_notification(struct wlan_objmgr_peer *peer, qdf_mem_free(peer_priv); } qdf_wake_lock_create(&peer_priv->peer_set_key_wakelock, "peer_set_key"); qdf_runtime_lock_init(&peer_priv->peer_set_key_runtime_wakelock); peer_priv->is_key_wakelock_set = false; return status; } Loading @@ -253,6 +257,10 @@ mlme_peer_object_destroyed_notification(struct wlan_objmgr_peer *peer, return QDF_STATUS_E_FAILURE; } peer_priv->is_key_wakelock_set = false; qdf_runtime_lock_deinit(&peer_priv->peer_set_key_runtime_wakelock); qdf_wake_lock_destroy(&peer_priv->peer_set_key_wakelock); status = wlan_objmgr_peer_component_obj_detach(peer, WLAN_UMAC_COMP_MLME, peer_priv); Loading Loading @@ -2839,6 +2847,88 @@ bool mlme_get_peer_pmf_status(struct wlan_objmgr_peer *peer) return peer_priv->is_pmf_enabled; } void wlan_acquire_peer_key_wakelock(struct wlan_objmgr_pdev *pdev, uint8_t *mac_addr) { uint8_t pdev_id; struct wlan_objmgr_peer *peer; struct peer_mlme_priv_obj *peer_priv; struct wlan_objmgr_psoc *psoc; psoc = wlan_pdev_get_psoc(pdev); if (!psoc) return; pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev); peer = wlan_objmgr_get_peer(psoc, pdev_id, mac_addr, WLAN_LEGACY_MAC_ID); if (!peer) return; peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer, WLAN_UMAC_COMP_MLME); if (!peer_priv) { wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID); return; } if (peer_priv->is_key_wakelock_set) { wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID); return; } mlme_debug(QDF_MAC_ADDR_FMT ": Acquire set key wake lock for %d ms", QDF_MAC_ADDR_REF(mac_addr), MLME_PEER_SET_KEY_WAKELOCK_TIMEOUT); qdf_wake_lock_timeout_acquire(&peer_priv->peer_set_key_wakelock, MLME_PEER_SET_KEY_WAKELOCK_TIMEOUT); qdf_runtime_pm_prevent_suspend( &peer_priv->peer_set_key_runtime_wakelock); peer_priv->is_key_wakelock_set = true; wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID); } void wlan_release_peer_key_wakelock(struct wlan_objmgr_pdev *pdev, uint8_t *mac_addr) { uint8_t pdev_id; struct wlan_objmgr_peer *peer; struct peer_mlme_priv_obj *peer_priv; struct wlan_objmgr_psoc *psoc; psoc = wlan_pdev_get_psoc(pdev); if (!psoc) return; pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev); peer = wlan_objmgr_get_peer(psoc, pdev_id, mac_addr, WLAN_LEGACY_MAC_ID); if (!peer) return; peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer, WLAN_UMAC_COMP_MLME); if (!peer_priv) { wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID); return; } if (!peer_priv->is_key_wakelock_set) { wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID); return; } peer_priv->is_key_wakelock_set = false; mlme_debug(QDF_MAC_ADDR_FMT ": Release set key wake lock", QDF_MAC_ADDR_REF(mac_addr)); qdf_wake_lock_release(&peer_priv->peer_set_key_wakelock, WIFI_POWER_EVENT_WAKELOCK_WMI_CMD_RSP); qdf_runtime_pm_allow_suspend( &peer_priv->peer_set_key_runtime_wakelock); wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID); } void mlme_set_discon_reason_n_from_ap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, bool from_ap, uint32_t reason_code) Loading Loading @@ -3276,3 +3366,22 @@ QDF_STATUS mlme_get_fw_scan_channels(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } #endif bool wlan_is_vdev_id_up(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id) { struct wlan_objmgr_vdev *vdev; bool is_up = false; if (!pdev) return is_up; vdev = wlan_objmgr_get_vdev_by_id_from_pdev(pdev, vdev_id, WLAN_LEGACY_MAC_ID); if (vdev) { is_up = QDF_IS_STATUS_SUCCESS(wlan_vdev_is_up(vdev)); wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID); } return is_up; }