Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 460e631d authored by Linux Build Service Account's avatar Linux Build Service Account
Browse files

Merge 6081afca on remote branch

Change-Id: Ibe6bd3b4eb024ec51c80a640c91a8c07efcd32d9
parents b70d7d42 6081afca
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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
+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
@@ -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)
@@ -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.
	 */
+7 −1
Original line number Diff line number Diff line
@@ -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");
+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
@@ -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
@@ -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;
@@ -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;
};

/**
@@ -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
@@ -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
+109 −0
Original line number Diff line number Diff line
@@ -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;
}

@@ -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);
@@ -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)
@@ -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