qcacld-3.0: Add spatial reuse feature support
Add SAP mode support for non-srg spatial reuse. Change-Id: Ic575eefd0d36b6750d826c9bccbd53f07ae9ea75 CRs-Fixed: 3213404
This commit is contained in:

committed by
Madan Koyyalamudi

parent
19a58a9c0f
commit
e728680f11
20
Kbuild
20
Kbuild
@@ -2530,6 +2530,22 @@ $(call add-wlan-objs,son,$(WLAN_SON_OBJS))
|
|||||||
|
|
||||||
#######################################################
|
#######################################################
|
||||||
|
|
||||||
|
######################### SPATIAL_REUSE #########################
|
||||||
|
SR_UCFG_DIR := components/spatial_reuse/dispatcher/src
|
||||||
|
SR_UCFG_INC := -I$(WLAN_ROOT)/components/spatial_reuse/dispatcher/inc
|
||||||
|
SR_TGT_DIR := $(WLAN_COMMON_ROOT)/target_if/spatial_reuse/src
|
||||||
|
SR_TGT_INC := -I$(WLAN_COMMON_INC)/target_if/spatial_reuse/inc/
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_WLAN_FEATURE_11AX), y)
|
||||||
|
WLAN_SR_OBJS := $(SR_UCFG_DIR)/spatial_reuse_ucfg_api.o \
|
||||||
|
$(SR_UCFG_DIR)/spatial_reuse_api.o \
|
||||||
|
$(SR_TGT_DIR)/target_if_spatial_reuse.o
|
||||||
|
endif
|
||||||
|
|
||||||
|
$(call add-wlan-objs,spatial_reuse,$(WLAN_SR_OBJS))
|
||||||
|
|
||||||
|
#######################################################
|
||||||
|
|
||||||
###### COEX ########
|
###### COEX ########
|
||||||
COEX_OS_IF_SRC := os_if/coex/src
|
COEX_OS_IF_SRC := os_if/coex/src
|
||||||
COEX_TGT_SRC := components/target_if/coex/src
|
COEX_TGT_SRC := components/target_if/coex/src
|
||||||
@@ -3019,7 +3035,11 @@ INCS += $(SON_CORE_INC)
|
|||||||
INCS += $(SON_UCFG_INC)
|
INCS += $(SON_UCFG_INC)
|
||||||
INCS += $(SON_TGT_INC)
|
INCS += $(SON_TGT_INC)
|
||||||
INCS += $(SON_OS_IF_INC)
|
INCS += $(SON_OS_IF_INC)
|
||||||
|
################ SPATIAL_REUSE ################
|
||||||
|
INCS += $(SR_UCFG_INC)
|
||||||
|
INCS += $(SR_TGT_INC)
|
||||||
##########################################
|
##########################################
|
||||||
|
|
||||||
INCS += $(UMAC_OBJMGR_INC)
|
INCS += $(UMAC_OBJMGR_INC)
|
||||||
INCS += $(UMAC_MGMT_TXRX_INC)
|
INCS += $(UMAC_MGMT_TXRX_INC)
|
||||||
INCS += $(PMO_INC)
|
INCS += $(PMO_INC)
|
||||||
|
40
components/spatial_reuse/dispatcher/inc/spatial_reuse_api.h
Normal file
40
components/spatial_reuse/dispatcher/inc/spatial_reuse_api.h
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* 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
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DOC : contains interface prototypes for spatial_reuse api
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SPATIAL_REUSE_API_H_
|
||||||
|
#define _SPATIAL_REUSE_API_H_
|
||||||
|
|
||||||
|
#include <qdf_types.h>
|
||||||
|
#include <qdf_trace.h>
|
||||||
|
#include <wlan_objmgr_vdev_obj.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_spatial_reuse_config_set() - Set spatial reuse config
|
||||||
|
* @vdev: objmgr manager vdev
|
||||||
|
* @sr_ctrl: spatial reuse control
|
||||||
|
* @non_srg_max_pd_offset: non-srg max pd offset
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS wlan_spatial_reuse_config_set(struct wlan_objmgr_vdev *vdev,
|
||||||
|
uint8_t sr_ctrl,
|
||||||
|
uint8_t non_srg_max_pd_offset);
|
||||||
|
|
||||||
|
#endif
|
@@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* 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
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DOC : contains interface prototypes for OS_IF layer
|
||||||
|
*/
|
||||||
|
#ifndef _SPATIAL_REUSE_UCFG_API_H_
|
||||||
|
#define _SPATIAL_REUSE_UCFG_API_H_
|
||||||
|
|
||||||
|
#include <qdf_trace.h>
|
||||||
|
#include <wlan_objmgr_vdev_obj.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_spatial_reuse_get_sr_config() - Spatial reuse config get
|
||||||
|
*
|
||||||
|
* @vdev: object manager vdev
|
||||||
|
* @sr_ctrl: spatial reuse sr control
|
||||||
|
* @non_srg_max_pd_offset: non-srg max pd offset
|
||||||
|
* @he_spr_enabled: spatial reuse enabled
|
||||||
|
*
|
||||||
|
* Return: void
|
||||||
|
*/
|
||||||
|
void ucfg_spatial_reuse_get_sr_config(struct wlan_objmgr_vdev *vdev,
|
||||||
|
uint8_t *sr_ctrl,
|
||||||
|
uint8_t *non_srg_max_pd_offset,
|
||||||
|
bool *he_spr_enabled);
|
||||||
|
/**
|
||||||
|
* ucfg_spatial_reuse_get_sr_config() - Spatial reuse config set
|
||||||
|
*
|
||||||
|
* @vdev: object manager vdev
|
||||||
|
* @sr_ctrl: spatial reuse sr control
|
||||||
|
* @non_srg_max_pd_offset: non-srg max pd offset
|
||||||
|
* @he_spr_enabled: Spatial reuse enabled
|
||||||
|
*
|
||||||
|
* Return: void
|
||||||
|
*/
|
||||||
|
void ucfg_spatial_reuse_set_sr_config(struct wlan_objmgr_vdev *vdev,
|
||||||
|
uint8_t sr_ctrl,
|
||||||
|
uint8_t non_srg_max_pd_offset);
|
||||||
|
/**
|
||||||
|
* ucfg_spatial_reuse_send_sr_config() - Send spatial reuse config to fw
|
||||||
|
*
|
||||||
|
* @vdev: object manager vdev
|
||||||
|
* @enable: spatial reuse config to be enabled or not
|
||||||
|
*
|
||||||
|
* Return: void
|
||||||
|
*/
|
||||||
|
void ucfg_spatial_reuse_send_sr_config(struct wlan_objmgr_vdev *vdev,
|
||||||
|
bool enable);
|
||||||
|
#endif
|
||||||
|
|
42
components/spatial_reuse/dispatcher/src/spatial_reuse_api.c
Normal file
42
components/spatial_reuse/dispatcher/src/spatial_reuse_api.c
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* 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
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DOC : contains interface prototypes for spatial_reuse api
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <spatial_reuse_api.h>
|
||||||
|
|
||||||
|
QDF_STATUS wlan_spatial_reuse_config_set(struct wlan_objmgr_vdev *vdev,
|
||||||
|
uint8_t sr_ctrl,
|
||||||
|
uint8_t non_srg_max_pd_offset)
|
||||||
|
{
|
||||||
|
struct wlan_lmac_if_tx_ops *tx_ops;
|
||||||
|
struct wlan_objmgr_psoc *psoc = wlan_vdev_get_psoc(vdev);
|
||||||
|
|
||||||
|
if (!psoc)
|
||||||
|
return QDF_STATUS_E_NULL_VALUE;
|
||||||
|
|
||||||
|
tx_ops = wlan_psoc_get_lmac_if_txops(psoc);
|
||||||
|
if (!tx_ops)
|
||||||
|
return QDF_STATUS_E_NULL_VALUE;
|
||||||
|
|
||||||
|
if (tx_ops->spatial_reuse_tx_ops.send_cfg)
|
||||||
|
return tx_ops->spatial_reuse_tx_ops.send_cfg(vdev, sr_ctrl,
|
||||||
|
non_srg_max_pd_offset);
|
||||||
|
|
||||||
|
return QDF_STATUS_E_NULL_VALUE;
|
||||||
|
}
|
@@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* 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
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DOC : contains interface prototypes for OS_IF layer
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <qdf_trace.h>
|
||||||
|
#include <spatial_reuse_ucfg_api.h>
|
||||||
|
#include <spatial_reuse_api.h>
|
||||||
|
|
||||||
|
void ucfg_spatial_reuse_get_sr_config(struct wlan_objmgr_vdev *vdev,
|
||||||
|
uint8_t *sr_ctrl,
|
||||||
|
uint8_t *non_srg_max_pd_offset,
|
||||||
|
bool *he_spr_enabled)
|
||||||
|
{
|
||||||
|
*sr_ctrl = wlan_vdev_mlme_get_sr_ctrl(vdev);
|
||||||
|
*non_srg_max_pd_offset = wlan_vdev_mlme_get_pd_offset(vdev);
|
||||||
|
*he_spr_enabled = wlan_vdev_mlme_get_he_spr_enabled(vdev);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ucfg_spatial_reuse_set_sr_config(struct wlan_objmgr_vdev *vdev,
|
||||||
|
uint8_t sr_ctrl,
|
||||||
|
uint8_t non_srg_max_pd_offset)
|
||||||
|
{
|
||||||
|
wlan_vdev_mlme_set_sr_ctrl(vdev, sr_ctrl);
|
||||||
|
wlan_vdev_mlme_set_pd_offset(vdev, non_srg_max_pd_offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ucfg_spatial_reuse_send_sr_config(struct wlan_objmgr_vdev *vdev,
|
||||||
|
bool enable)
|
||||||
|
{
|
||||||
|
uint8_t sr_ctrl = 0;
|
||||||
|
uint8_t non_srg_max_pd_offset = 0;
|
||||||
|
|
||||||
|
if (enable && (!wlan_vdev_mlme_get_he_spr_enabled(vdev))) {
|
||||||
|
sr_ctrl = wlan_vdev_mlme_get_sr_ctrl(vdev);
|
||||||
|
non_srg_max_pd_offset = wlan_vdev_mlme_get_pd_offset(vdev);
|
||||||
|
if (sr_ctrl && non_srg_max_pd_offset) {
|
||||||
|
wlan_spatial_reuse_config_set(vdev, sr_ctrl,
|
||||||
|
non_srg_max_pd_offset);
|
||||||
|
wlan_vdev_mlme_set_he_spr_enabled(vdev, true);
|
||||||
|
}
|
||||||
|
} else if (!enable && wlan_vdev_mlme_get_he_spr_enabled(vdev)) {
|
||||||
|
wlan_spatial_reuse_config_set(vdev, sr_ctrl,
|
||||||
|
non_srg_max_pd_offset);
|
||||||
|
wlan_vdev_mlme_set_he_spr_enabled(vdev, false);
|
||||||
|
}
|
||||||
|
}
|
@@ -2121,6 +2121,7 @@ static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter,
|
|||||||
|
|
||||||
policy_mgr_check_concurrent_intf_and_restart_sap(hdd_ctx->psoc);
|
policy_mgr_check_concurrent_intf_and_restart_sap(hdd_ctx->psoc);
|
||||||
wlan_twt_concurrency_update(hdd_ctx);
|
wlan_twt_concurrency_update(hdd_ctx);
|
||||||
|
hdd_update_he_obss_pd(adapter, NULL, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_HOST_ROAM
|
#ifdef WLAN_FEATURE_HOST_ROAM
|
||||||
|
@@ -746,6 +746,7 @@ hdd_cm_connect_failure_post_user_update(struct wlan_objmgr_vdev *vdev,
|
|||||||
WLAN_CONTROL_PATH);
|
WLAN_CONTROL_PATH);
|
||||||
hdd_periodic_sta_stats_start(adapter);
|
hdd_periodic_sta_stats_start(adapter);
|
||||||
wlan_twt_concurrency_update(hdd_ctx);
|
wlan_twt_concurrency_update(hdd_ctx);
|
||||||
|
hdd_update_he_obss_pd(adapter, NULL, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hdd_cm_connect_failure(struct wlan_objmgr_vdev *vdev,
|
static void hdd_cm_connect_failure(struct wlan_objmgr_vdev *vdev,
|
||||||
@@ -1351,6 +1352,7 @@ hdd_cm_connect_success_post_user_update(struct wlan_objmgr_vdev *vdev,
|
|||||||
}
|
}
|
||||||
hdd_periodic_sta_stats_start(adapter);
|
hdd_periodic_sta_stats_start(adapter);
|
||||||
wlan_twt_concurrency_update(hdd_ctx);
|
wlan_twt_concurrency_update(hdd_ctx);
|
||||||
|
hdd_update_he_obss_pd(adapter, NULL, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hdd_cm_connect_success(struct wlan_objmgr_vdev *vdev,
|
static void hdd_cm_connect_success(struct wlan_objmgr_vdev *vdev,
|
||||||
|
@@ -49,6 +49,7 @@
|
|||||||
#include "wlan_hdd_cfr.h"
|
#include "wlan_hdd_cfr.h"
|
||||||
#include "wlan_roam_debug.h"
|
#include "wlan_roam_debug.h"
|
||||||
#include "wma_api.h"
|
#include "wma_api.h"
|
||||||
|
#include "wlan_hdd_hostapd.h"
|
||||||
|
|
||||||
void hdd_handle_disassociation_event(struct hdd_adapter *adapter,
|
void hdd_handle_disassociation_event(struct hdd_adapter *adapter,
|
||||||
struct qdf_mac_addr *peer_macaddr)
|
struct qdf_mac_addr *peer_macaddr)
|
||||||
@@ -449,6 +450,7 @@ hdd_cm_disconnect_complete_post_user_update(struct wlan_objmgr_vdev *vdev,
|
|||||||
hdd_cm_set_default_wlm_mode(adapter);
|
hdd_cm_set_default_wlm_mode(adapter);
|
||||||
__hdd_cm_disconnect_handler_post_user_update(adapter, vdev);
|
__hdd_cm_disconnect_handler_post_user_update(adapter, vdev);
|
||||||
wlan_twt_concurrency_update(hdd_ctx);
|
wlan_twt_concurrency_update(hdd_ctx);
|
||||||
|
hdd_update_he_obss_pd(adapter, NULL, false);
|
||||||
hdd_cm_reset_udp_qos_upgrade_config(adapter);
|
hdd_cm_reset_udp_qos_upgrade_config(adapter);
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
|
@@ -106,6 +106,7 @@
|
|||||||
#ifdef WLAN_FEATURE_11BE_MLO
|
#ifdef WLAN_FEATURE_11BE_MLO
|
||||||
#include <wlan_mlo_mgr_ap.h>
|
#include <wlan_mlo_mgr_ap.h>
|
||||||
#endif
|
#endif
|
||||||
|
#include "spatial_reuse_ucfg_api.h"
|
||||||
#include "wlan_hdd_son.h"
|
#include "wlan_hdd_son.h"
|
||||||
#include "wlan_hdd_mcc_quota.h"
|
#include "wlan_hdd_mcc_quota.h"
|
||||||
#include "wlan_hdd_wds.h"
|
#include "wlan_hdd_wds.h"
|
||||||
@@ -6495,6 +6496,7 @@ error:
|
|||||||
|
|
||||||
free:
|
free:
|
||||||
wlan_twt_concurrency_update(hdd_ctx);
|
wlan_twt_concurrency_update(hdd_ctx);
|
||||||
|
hdd_update_he_obss_pd(adapter, NULL, true);
|
||||||
if (deliver_start_evt) {
|
if (deliver_start_evt) {
|
||||||
status = ucfg_if_mgr_deliver_event(
|
status = ucfg_if_mgr_deliver_event(
|
||||||
vdev,
|
vdev,
|
||||||
@@ -6662,6 +6664,7 @@ static int __wlan_hdd_cfg80211_stop_ap(struct wiphy *wiphy,
|
|||||||
false);
|
false);
|
||||||
wlan_twt_concurrency_update(hdd_ctx);
|
wlan_twt_concurrency_update(hdd_ctx);
|
||||||
wlan_set_sap_user_config_freq(adapter->vdev, 0);
|
wlan_set_sap_user_config_freq(adapter->vdev, 0);
|
||||||
|
hdd_update_he_obss_pd(adapter, NULL, false);
|
||||||
status = ucfg_if_mgr_deliver_event(adapter->vdev,
|
status = ucfg_if_mgr_deliver_event(adapter->vdev,
|
||||||
WLAN_IF_MGR_EV_AP_STOP_BSS_COMPLETE,
|
WLAN_IF_MGR_EV_AP_STOP_BSS_COMPLETE,
|
||||||
NULL);
|
NULL);
|
||||||
@@ -7144,6 +7147,66 @@ wlan_util_get_centre_freq(struct wireless_dev *wdev, unsigned int link_id)
|
|||||||
return wdev->chandef.chan->center_freq;
|
return wdev->chandef.chan->center_freq;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined WLAN_FEATURE_11AX
|
||||||
|
void hdd_update_he_obss_pd(struct hdd_adapter *adapter,
|
||||||
|
struct cfg80211_ap_settings *params,
|
||||||
|
bool iface_start)
|
||||||
|
{
|
||||||
|
struct wlan_objmgr_vdev *vdev, *conc_vdev;
|
||||||
|
uint8_t vdev_id = adapter->vdev_id;
|
||||||
|
uint8_t mac_id;
|
||||||
|
struct wlan_objmgr_psoc *psoc;
|
||||||
|
uint32_t conc_vdev_id;
|
||||||
|
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0)) || \
|
||||||
|
defined(CFG80211_SPATIAL_REUSE_EXT_BACKPORT)
|
||||||
|
struct ieee80211_he_obss_pd *obss_pd;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
vdev = hdd_objmgr_get_vdev_by_user(adapter, WLAN_OSIF_ID);
|
||||||
|
if (!vdev)
|
||||||
|
return;
|
||||||
|
|
||||||
|
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0)) || \
|
||||||
|
defined(CFG80211_SPATIAL_REUSE_EXT_BACKPORT)
|
||||||
|
if (params && params->he_obss_pd.enable) {
|
||||||
|
obss_pd = ¶ms->he_obss_pd;
|
||||||
|
ucfg_spatial_reuse_set_sr_config(vdev,
|
||||||
|
obss_pd->sr_ctrl,
|
||||||
|
obss_pd->non_srg_max_offset);
|
||||||
|
hdd_debug("obss_pd_enable: %d, sr_ctrl: %d, non_srg_max_offset: %d",
|
||||||
|
obss_pd->enable, obss_pd->sr_ctrl,
|
||||||
|
obss_pd->non_srg_max_offset);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
psoc = wlan_vdev_get_psoc(vdev);
|
||||||
|
policy_mgr_get_mac_id_by_session_id(psoc, vdev_id, &mac_id);
|
||||||
|
conc_vdev_id = policy_mgr_get_conc_vdev_on_same_mac(psoc, vdev_id,
|
||||||
|
mac_id);
|
||||||
|
if (conc_vdev_id != WLAN_INVALID_VDEV_ID) {
|
||||||
|
conc_vdev =
|
||||||
|
wlan_objmgr_get_vdev_by_id_from_psoc(
|
||||||
|
psoc, conc_vdev_id,
|
||||||
|
WLAN_HDD_ID_OBJ_MGR);
|
||||||
|
if (!conc_vdev)
|
||||||
|
goto release_ref;
|
||||||
|
|
||||||
|
if (iface_start) {
|
||||||
|
ucfg_spatial_reuse_send_sr_config(conc_vdev, false);
|
||||||
|
hdd_debug("disable obss pd for vdev:%d", conc_vdev_id);
|
||||||
|
} else {
|
||||||
|
ucfg_spatial_reuse_send_sr_config(conc_vdev, true);
|
||||||
|
hdd_debug("enable obss pd for vdev:%d", conc_vdev_id);
|
||||||
|
}
|
||||||
|
wlan_objmgr_vdev_release_ref(conc_vdev, WLAN_HDD_ID_OBJ_MGR);
|
||||||
|
}
|
||||||
|
|
||||||
|
release_ref:
|
||||||
|
hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_ID);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* __wlan_hdd_cfg80211_start_ap() - start soft ap mode
|
* __wlan_hdd_cfg80211_start_ap() - start soft ap mode
|
||||||
* @wiphy: Pointer to wiphy structure
|
* @wiphy: Pointer to wiphy structure
|
||||||
@@ -7458,6 +7521,9 @@ static int __wlan_hdd_cfg80211_start_ap(struct wiphy *wiphy,
|
|||||||
*/
|
*/
|
||||||
wlan_hdd_update_twt_responder(hdd_ctx, params);
|
wlan_hdd_update_twt_responder(hdd_ctx, params);
|
||||||
|
|
||||||
|
/* Enable/disable non-srg obss pd spatial reuse */
|
||||||
|
hdd_update_he_obss_pd(adapter, params, true);
|
||||||
|
|
||||||
hdd_place_marker(adapter, "TRY TO START", NULL);
|
hdd_place_marker(adapter, "TRY TO START", NULL);
|
||||||
status =
|
status =
|
||||||
wlan_hdd_cfg80211_start_bss(adapter,
|
wlan_hdd_cfg80211_start_bss(adapter,
|
||||||
|
@@ -449,6 +449,27 @@ void hdd_stop_sap_due_to_invalid_channel(struct work_struct *work);
|
|||||||
*/
|
*/
|
||||||
bool hdd_is_any_sta_connecting(struct hdd_context *hdd_ctx);
|
bool hdd_is_any_sta_connecting(struct hdd_context *hdd_ctx);
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_11AX
|
||||||
|
/**
|
||||||
|
* hdd_update_he_obss_pd() - Enable or disable spatial reuse
|
||||||
|
* based on user space input and concurrency combination.
|
||||||
|
* @adapter: Pointer to hostapd adapter
|
||||||
|
* @params: Pointer to AP configuration from cfg80211
|
||||||
|
* @iface_start: Interface start or not
|
||||||
|
*
|
||||||
|
* Return: void
|
||||||
|
*/
|
||||||
|
void hdd_update_he_obss_pd(struct hdd_adapter *adapter,
|
||||||
|
struct cfg80211_ap_settings *params,
|
||||||
|
bool iface_start);
|
||||||
|
#else
|
||||||
|
static inline void hdd_update_he_obss_pd(struct hdd_adapter *adapter,
|
||||||
|
struct cfg80211_ap_settings *params,
|
||||||
|
bool iface_start)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_11BE_MLO
|
#ifdef WLAN_FEATURE_11BE_MLO
|
||||||
/**
|
/**
|
||||||
* wlan_hdd_mlo_reset() - reset mlo configuration if start bss fails
|
* wlan_hdd_mlo_reset() - reset mlo configuration if start bss fails
|
||||||
|
@@ -1258,6 +1258,15 @@ void update_fils_data(struct sir_fils_indication *fils_ind,
|
|||||||
tDot11fIEfils_indication * fils_indication);
|
tDot11fIEfils_indication * fils_indication);
|
||||||
#endif
|
#endif
|
||||||
#ifdef WLAN_FEATURE_11AX
|
#ifdef WLAN_FEATURE_11AX
|
||||||
|
/**
|
||||||
|
* populate_dot11f_he_caps() - populate he capabilities IE
|
||||||
|
* in beacon/probe response structure
|
||||||
|
* @mac_context: pointer to mac context
|
||||||
|
* @pe_session: pointer to pe session
|
||||||
|
* @he_cap: he capability IE
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
QDF_STATUS populate_dot11f_he_caps(struct mac_context *, struct pe_session *,
|
QDF_STATUS populate_dot11f_he_caps(struct mac_context *, struct pe_session *,
|
||||||
tDot11fIEhe_cap *);
|
tDot11fIEhe_cap *);
|
||||||
|
|
||||||
@@ -1273,10 +1282,34 @@ QDF_STATUS
|
|||||||
populate_dot11f_he_caps_by_band(struct mac_context *mac_ctx,
|
populate_dot11f_he_caps_by_band(struct mac_context *mac_ctx,
|
||||||
bool is_2g,
|
bool is_2g,
|
||||||
tDot11fIEhe_cap *he_cap);
|
tDot11fIEhe_cap *he_cap);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* populate_dot11f_he_operation() - populate he operation IE
|
||||||
|
* in beacon/probe response structure
|
||||||
|
* @mac_context: pointer to mac context
|
||||||
|
* @pe_session: pointer to pe session
|
||||||
|
* @he_op: he operation IE
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
QDF_STATUS populate_dot11f_he_operation(struct mac_context *, struct pe_session *,
|
QDF_STATUS populate_dot11f_he_operation(struct mac_context *, struct pe_session *,
|
||||||
tDot11fIEhe_op *);
|
tDot11fIEhe_op *);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* populate_dot11f_he_6ghz_cap() - pouldate HE 6GHz caps IE
|
* populate_dot11f_sr_info() - populate tDot11fIEspatial_reuse to
|
||||||
|
* beacon/probe response structure.
|
||||||
|
* @mac_context: pointer to mac context
|
||||||
|
* @pe_session: pointer to pe session
|
||||||
|
* @sr_info: spatial reuse IE
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS populate_dot11f_sr_info(struct mac_context *mac_ctx,
|
||||||
|
struct pe_session *session,
|
||||||
|
tDot11fIEspatial_reuse *sr_info);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* populate_dot11f_he_6ghz_cap() - populdate HE 6GHz caps IE
|
||||||
* @mac_ctx: Global MAC context
|
* @mac_ctx: Global MAC context
|
||||||
* @session: PE session
|
* @session: PE session
|
||||||
* @he_6g_cap: pointer to HE 6GHz IE
|
* @he_6g_cap: pointer to HE 6GHz IE
|
||||||
@@ -1336,6 +1369,14 @@ static inline QDF_STATUS populate_dot11f_he_bss_color_change(
|
|||||||
{
|
{
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline QDF_STATUS populate_dot11f_sr_info(
|
||||||
|
struct mac_context *mac_ctx,
|
||||||
|
struct pe_session *session,
|
||||||
|
tDot11fIEspatial_reuse *sr_info)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(WLAN_FEATURE_11AX) && defined(WLAN_SUPPORT_TWT)
|
#if defined(WLAN_FEATURE_11AX) && defined(WLAN_SUPPORT_TWT)
|
||||||
|
@@ -69,6 +69,7 @@
|
|||||||
#include <wlan_vdev_mgr_utils_api.h>
|
#include <wlan_vdev_mgr_utils_api.h>
|
||||||
#include "cfg_ucfg_api.h"
|
#include "cfg_ucfg_api.h"
|
||||||
#include "wlan_twt_cfg_ext_api.h"
|
#include "wlan_twt_cfg_ext_api.h"
|
||||||
|
#include <spatial_reuse_api.h>
|
||||||
|
|
||||||
/* SME REQ processing function templates */
|
/* SME REQ processing function templates */
|
||||||
static bool __lim_process_sme_sys_ready_ind(struct mac_context *, uint32_t *);
|
static bool __lim_process_sme_sys_ready_ind(struct mac_context *, uint32_t *);
|
||||||
@@ -9358,6 +9359,12 @@ void lim_process_set_he_bss_color(struct mac_context *mac_ctx, uint32_t *msg_buf
|
|||||||
beacon_params.bss_color = session_entry->he_op.bss_color;
|
beacon_params.bss_color = session_entry->he_op.bss_color;
|
||||||
session_entry->bss_color_changing = 1;
|
session_entry->bss_color_changing = 1;
|
||||||
|
|
||||||
|
if (wlan_vdev_mlme_get_he_spr_enabled(session_entry->vdev)) {
|
||||||
|
/* Disable spatial reuse during BSS color change */
|
||||||
|
wlan_spatial_reuse_config_set(session_entry->vdev, 0, 0);
|
||||||
|
wlan_vdev_mlme_set_he_spr_enabled(session_entry->vdev, false);
|
||||||
|
}
|
||||||
|
|
||||||
if (sch_set_fixed_beacon_fields(mac_ctx, session_entry) !=
|
if (sch_set_fixed_beacon_fields(mac_ctx, session_entry) !=
|
||||||
QDF_STATUS_SUCCESS) {
|
QDF_STATUS_SUCCESS) {
|
||||||
pe_err("Unable to set op mode IE in beacon");
|
pe_err("Unable to set op mode IE in beacon");
|
||||||
|
@@ -875,6 +875,8 @@ lim_send_probe_rsp_mgmt_frame(struct mac_context *mac_ctx,
|
|||||||
&frm->he_cap);
|
&frm->he_cap);
|
||||||
populate_dot11f_he_operation(mac_ctx, pe_session,
|
populate_dot11f_he_operation(mac_ctx, pe_session,
|
||||||
&frm->he_op);
|
&frm->he_op);
|
||||||
|
populate_dot11f_sr_info(mac_ctx, pe_session,
|
||||||
|
&frm->spatial_reuse);
|
||||||
populate_dot11f_he_6ghz_cap(mac_ctx, pe_session,
|
populate_dot11f_he_6ghz_cap(mac_ctx, pe_session,
|
||||||
&frm->he_6ghz_band_cap);
|
&frm->he_6ghz_band_cap);
|
||||||
}
|
}
|
||||||
@@ -1738,6 +1740,8 @@ lim_send_assoc_rsp_mgmt_frame(struct mac_context *mac_ctx,
|
|||||||
lim_is_session_he_capable(pe_session)) {
|
lim_is_session_he_capable(pe_session)) {
|
||||||
populate_dot11f_he_caps(mac_ctx, pe_session,
|
populate_dot11f_he_caps(mac_ctx, pe_session,
|
||||||
&frm.he_cap);
|
&frm.he_cap);
|
||||||
|
populate_dot11f_sr_info(mac_ctx, pe_session,
|
||||||
|
&frm.spatial_reuse);
|
||||||
populate_dot11f_he_operation(mac_ctx, pe_session,
|
populate_dot11f_he_operation(mac_ctx, pe_session,
|
||||||
&frm.he_op);
|
&frm.he_op);
|
||||||
populate_dot11f_he_6ghz_cap(mac_ctx, pe_session,
|
populate_dot11f_he_6ghz_cap(mac_ctx, pe_session,
|
||||||
|
@@ -57,6 +57,7 @@
|
|||||||
#include "wma.h"
|
#include "wma.h"
|
||||||
#include <../../core/src/wlan_cm_vdev_api.h>
|
#include <../../core/src/wlan_cm_vdev_api.h>
|
||||||
#include <wlan_mlo_mgr_sta.h>
|
#include <wlan_mlo_mgr_sta.h>
|
||||||
|
#include <spatial_reuse_api.h>
|
||||||
|
|
||||||
void lim_send_sme_rsp(struct mac_context *mac_ctx, uint16_t msg_type,
|
void lim_send_sme_rsp(struct mac_context *mac_ctx, uint16_t msg_type,
|
||||||
tSirResultCodes result_code, uint8_t vdev_id)
|
tSirResultCodes result_code, uint8_t vdev_id)
|
||||||
@@ -2288,6 +2289,37 @@ lim_send_bss_color_change_ie_update(struct mac_context *mac_ctx,
|
|||||||
session->he_bss_color_change.countdown);
|
session->he_bss_color_change.countdown);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
lim_update_spatial_reuse(struct pe_session *session)
|
||||||
|
{
|
||||||
|
struct wlan_objmgr_psoc *psoc;
|
||||||
|
uint32_t conc_vdev_id;
|
||||||
|
uint8_t mac_id, sr_ctrl, non_srg_pd_max_offset;
|
||||||
|
uint8_t vdev_id = session->vdev_id;
|
||||||
|
|
||||||
|
sr_ctrl = wlan_vdev_mlme_get_sr_ctrl(session->vdev);
|
||||||
|
non_srg_pd_max_offset = wlan_vdev_mlme_get_pd_offset(session->vdev);
|
||||||
|
if (non_srg_pd_max_offset && sr_ctrl &&
|
||||||
|
!wlan_vdev_mlme_get_he_spr_enabled(session->vdev)) {
|
||||||
|
psoc = wlan_vdev_get_psoc(session->vdev);
|
||||||
|
policy_mgr_get_mac_id_by_session_id(psoc,
|
||||||
|
vdev_id,
|
||||||
|
&mac_id);
|
||||||
|
conc_vdev_id = policy_mgr_get_conc_vdev_on_same_mac(psoc,
|
||||||
|
vdev_id,
|
||||||
|
mac_id);
|
||||||
|
if (conc_vdev_id == WLAN_INVALID_VDEV_ID) {
|
||||||
|
/*
|
||||||
|
* Enable spatial reuse only if no concurrent
|
||||||
|
* vdev running on same mac
|
||||||
|
*/
|
||||||
|
wlan_spatial_reuse_config_set(session->vdev, sr_ctrl,
|
||||||
|
non_srg_pd_max_offset);
|
||||||
|
wlan_vdev_mlme_set_he_spr_enabled(session->vdev, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
lim_handle_bss_color_change_ie(struct mac_context *mac_ctx,
|
lim_handle_bss_color_change_ie(struct mac_context *mac_ctx,
|
||||||
struct pe_session *session)
|
struct pe_session *session)
|
||||||
@@ -2305,6 +2337,12 @@ lim_handle_bss_color_change_ie(struct mac_context *mac_ctx,
|
|||||||
session->he_bss_color_change.countdown--;
|
session->he_bss_color_change.countdown--;
|
||||||
} else {
|
} else {
|
||||||
session->bss_color_changing = 0;
|
session->bss_color_changing = 0;
|
||||||
|
/*
|
||||||
|
* On OBSS color collision detection, spatial reuse
|
||||||
|
* gets disabled. Enable spatial reuse if it was
|
||||||
|
* enabled during AP start
|
||||||
|
*/
|
||||||
|
lim_update_spatial_reuse(session);
|
||||||
qdf_mem_zero(&beacon_params, sizeof(beacon_params));
|
qdf_mem_zero(&beacon_params, sizeof(beacon_params));
|
||||||
session->he_op.bss_col_disabled = 0;
|
session->he_op.bss_col_disabled = 0;
|
||||||
session->he_op.bss_color =
|
session->he_op.bss_color =
|
||||||
|
@@ -744,6 +744,8 @@ sch_set_fixed_beacon_fields(struct mac_context *mac_ctx, struct pe_session *sess
|
|||||||
&bcn_2->he_cap);
|
&bcn_2->he_cap);
|
||||||
populate_dot11f_he_operation(mac_ctx, session,
|
populate_dot11f_he_operation(mac_ctx, session,
|
||||||
&bcn_2->he_op);
|
&bcn_2->he_op);
|
||||||
|
populate_dot11f_sr_info(mac_ctx, session,
|
||||||
|
&bcn_2->spatial_reuse);
|
||||||
populate_dot11f_he_6ghz_cap(mac_ctx, session,
|
populate_dot11f_he_6ghz_cap(mac_ctx, session,
|
||||||
&bcn_2->he_6ghz_band_cap);
|
&bcn_2->he_6ghz_band_cap);
|
||||||
populate_dot11f_he_bss_color_change(mac_ctx, session,
|
populate_dot11f_he_bss_color_change(mac_ctx, session,
|
||||||
@@ -1294,6 +1296,14 @@ void lim_update_probe_rsp_template_ie_bitmap_beacon2(struct mac_context *mac,
|
|||||||
sizeof(beacon2->he_op));
|
sizeof(beacon2->he_op));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (beacon2->spatial_reuse.present) {
|
||||||
|
set_probe_rsp_ie_bitmap(DefProbeRspIeBitmap,
|
||||||
|
DOT11F_EID_SPATIAL_REUSE);
|
||||||
|
qdf_mem_copy((void *)&prb_rsp->spatial_reuse,
|
||||||
|
(void *)&beacon2->spatial_reuse,
|
||||||
|
sizeof(beacon2->spatial_reuse));
|
||||||
|
}
|
||||||
|
|
||||||
if (beacon2->he_6ghz_band_cap.present) {
|
if (beacon2->he_6ghz_band_cap.present) {
|
||||||
set_probe_rsp_ie_bitmap(DefProbeRspIeBitmap,
|
set_probe_rsp_ie_bitmap(DefProbeRspIeBitmap,
|
||||||
DOT11F_EID_HE_6GHZ_BAND_CAP);
|
DOT11F_EID_HE_6GHZ_BAND_CAP);
|
||||||
|
@@ -49,6 +49,7 @@
|
|||||||
#include "wlan_reg_services_api.h"
|
#include "wlan_reg_services_api.h"
|
||||||
#include "wlan_cm_roam_api.h"
|
#include "wlan_cm_roam_api.h"
|
||||||
#include "wlan_mlo_mgr_sta.h"
|
#include "wlan_mlo_mgr_sta.h"
|
||||||
|
#include <wlan_cmn_ieee80211.h>
|
||||||
#ifdef WLAN_FEATURE_11BE_MLO
|
#ifdef WLAN_FEATURE_11BE_MLO
|
||||||
#include <lim_mlo.h>
|
#include <lim_mlo.h>
|
||||||
#include <utils_mlo.h>
|
#include <utils_mlo.h>
|
||||||
@@ -7085,6 +7086,32 @@ populate_dot11f_he_operation(struct mac_context *mac_ctx,
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QDF_STATUS
|
||||||
|
populate_dot11f_sr_info(struct mac_context *mac_ctx,
|
||||||
|
struct pe_session *session,
|
||||||
|
tDot11fIEspatial_reuse *sr_info)
|
||||||
|
{
|
||||||
|
uint8_t non_srg_pd_offset;
|
||||||
|
uint8_t sr_ctrl = wlan_vdev_mlme_get_sr_ctrl(session->vdev);
|
||||||
|
bool sr_enabled = wlan_vdev_mlme_get_he_spr_enabled(session->vdev);
|
||||||
|
|
||||||
|
if (!sr_enabled || !sr_ctrl ||
|
||||||
|
(sr_ctrl & WLAN_HE_NON_SRG_PD_SR_DISALLOWED) ||
|
||||||
|
!(sr_ctrl & WLAN_HE_NON_SRG_OFFSET_PRESENT))
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
|
non_srg_pd_offset = wlan_vdev_mlme_get_pd_offset(session->vdev);
|
||||||
|
sr_info->present = 1;
|
||||||
|
sr_info->psr_disallow = 1;
|
||||||
|
sr_info->non_srg_pd_sr_disallow = 0;
|
||||||
|
sr_info->srg_info_present = 0;
|
||||||
|
sr_info->non_srg_offset_present = 1;
|
||||||
|
sr_info->srg_info_present = 0;
|
||||||
|
sr_info->non_srg_offset.info.non_srg_pd_max_offset = non_srg_pd_offset;
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
populate_dot11f_he_6ghz_cap(struct mac_context *mac_ctx,
|
populate_dot11f_he_6ghz_cap(struct mac_context *mac_ctx,
|
||||||
struct pe_session *session,
|
struct pe_session *session,
|
||||||
|
@@ -1335,6 +1335,25 @@ static inline QDF_STATUS wma_set_tsf_gpio_pin(WMA_HANDLE handle, uint32_t pin)
|
|||||||
return QDF_STATUS_E_INVAL;
|
return QDF_STATUS_E_INVAL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_11AX
|
||||||
|
/**
|
||||||
|
* wma_spr_update() - enable/disable spatial reuse
|
||||||
|
* @wma: wma handle
|
||||||
|
* @vdev_id: vdev id
|
||||||
|
* @enable: indicates spatial reuse enable/disable
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS_SUCCESS for success or error code
|
||||||
|
*/
|
||||||
|
QDF_STATUS wma_spr_update(tp_wma_handle wma, uint8_t vdev_id, bool enable);
|
||||||
|
#else
|
||||||
|
static inline QDF_STATUS wma_spr_update(tp_wma_handle wma, uint8_t vdev_id,
|
||||||
|
bool enable)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
QDF_STATUS wma_set_wisa_params(tp_wma_handle wma, struct sir_wisa_params *wisa);
|
QDF_STATUS wma_set_wisa_params(tp_wma_handle wma, struct sir_wisa_params *wisa);
|
||||||
|
|
||||||
#ifdef DHCP_SERVER_OFFLOAD
|
#ifdef DHCP_SERVER_OFFLOAD
|
||||||
|
@@ -1284,6 +1284,7 @@ QDF_STATUS wma_vdev_start_resp_handler(struct vdev_mlme_obj *vdev_mlme,
|
|||||||
wma_dcs_clear_vdev_starting(mac_ctx, rsp->vdev_id);
|
wma_dcs_clear_vdev_starting(mac_ctx, rsp->vdev_id);
|
||||||
wma_dcs_wlan_interference_mitigation_enable(mac_ctx,
|
wma_dcs_wlan_interference_mitigation_enable(mac_ctx,
|
||||||
iface->mac_id, rsp);
|
iface->mac_id, rsp);
|
||||||
|
wma_spr_update(wma, rsp->vdev_id, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef FEATURE_AP_MCC_CH_AVOIDANCE
|
#ifdef FEATURE_AP_MCC_CH_AVOIDANCE
|
||||||
@@ -2304,6 +2305,7 @@ void wma_send_del_bss_response(tp_wma_handle wma, struct del_bss_resp *resp)
|
|||||||
vdev_id);
|
vdev_id);
|
||||||
cdp_fc_vdev_unpause(soc, vdev_id, OL_TXQ_PAUSE_REASON_VDEV_STOP, 0);
|
cdp_fc_vdev_unpause(soc, vdev_id, OL_TXQ_PAUSE_REASON_VDEV_STOP, 0);
|
||||||
wma_vdev_clear_pause_bit(vdev_id, PAUSE_TYPE_HOST);
|
wma_vdev_clear_pause_bit(vdev_id, PAUSE_TYPE_HOST);
|
||||||
|
wma_spr_update(wma, vdev_id, false);
|
||||||
qdf_atomic_set(&iface->bss_status, WMA_BSS_STATUS_STOPPED);
|
qdf_atomic_set(&iface->bss_status, WMA_BSS_STATUS_STOPPED);
|
||||||
wma_debug("(type %d subtype %d) BSS is stopped",
|
wma_debug("(type %d subtype %d) BSS is stopped",
|
||||||
iface->type, iface->sub_type);
|
iface->type, iface->sub_type);
|
||||||
|
@@ -637,6 +637,77 @@ QDF_STATUS wma_process_dhcp_ind(WMA_HANDLE handle,
|
|||||||
&peer_set_param_fp);
|
&peer_set_param_fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined WLAN_FEATURE_11AX
|
||||||
|
|
||||||
|
#define NON_SRG_PD_SR_DISALLOWED 0x02
|
||||||
|
#define NON_SRG_OFFSET_PRESENT 0x04
|
||||||
|
#define NON_SRG_SPR_ENABLE_POS 24
|
||||||
|
#define NON_SRG_PARAM_VAL_DBM_UNIT 0x20
|
||||||
|
#define NON_SRG_SPR_ENABLE 0x80
|
||||||
|
|
||||||
|
QDF_STATUS wma_spr_update(tp_wma_handle wma,
|
||||||
|
uint8_t vdev_id,
|
||||||
|
bool enable)
|
||||||
|
{
|
||||||
|
struct pdev_params pparam;
|
||||||
|
uint32_t val = 0;
|
||||||
|
wmi_unified_t wmi_handle = wma->wmi_handle;
|
||||||
|
uint8_t mac_id;
|
||||||
|
uint32_t conc_vdev_id;
|
||||||
|
struct wlan_objmgr_vdev *vdev;
|
||||||
|
uint8_t sr_ctrl, non_srg_pd_max_offset;
|
||||||
|
|
||||||
|
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(wma->psoc, vdev_id,
|
||||||
|
WLAN_LEGACY_WMA_ID);
|
||||||
|
if (!vdev) {
|
||||||
|
wma_err("Can't get vdev by vdev_id:%d", vdev_id);
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
sr_ctrl = wlan_vdev_mlme_get_sr_ctrl(vdev);
|
||||||
|
non_srg_pd_max_offset = wlan_vdev_mlme_get_pd_offset(vdev);
|
||||||
|
if (!(sr_ctrl & NON_SRG_PD_SR_DISALLOWED) &&
|
||||||
|
(sr_ctrl & NON_SRG_OFFSET_PRESENT)) {
|
||||||
|
policy_mgr_get_mac_id_by_session_id(wma->psoc,
|
||||||
|
vdev_id,
|
||||||
|
&mac_id);
|
||||||
|
conc_vdev_id =
|
||||||
|
policy_mgr_get_conc_vdev_on_same_mac(wma->psoc,
|
||||||
|
vdev_id,
|
||||||
|
mac_id);
|
||||||
|
if (conc_vdev_id != WLAN_INVALID_VDEV_ID) {
|
||||||
|
wma_debug("Concurrent intf present,SR PD not enabled");
|
||||||
|
goto release_ref;
|
||||||
|
}
|
||||||
|
qdf_mem_zero(&pparam, sizeof(pparam));
|
||||||
|
pparam.param_id = WMI_PDEV_PARAM_SET_CMD_OBSS_PD_THRESHOLD;
|
||||||
|
if (enable) {
|
||||||
|
val = NON_SRG_SPR_ENABLE;
|
||||||
|
val |= NON_SRG_PARAM_VAL_DBM_UNIT;
|
||||||
|
val = val << NON_SRG_SPR_ENABLE_POS;
|
||||||
|
val |= non_srg_pd_max_offset;
|
||||||
|
wlan_vdev_mlme_set_he_spr_enabled(vdev, true);
|
||||||
|
} else {
|
||||||
|
wlan_vdev_mlme_set_he_spr_enabled(vdev, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
pparam.param_value = val;
|
||||||
|
|
||||||
|
wma_debug("non-srg param val: %u, enable: %d",
|
||||||
|
pparam.param_value, enable);
|
||||||
|
|
||||||
|
wmi_unified_pdev_param_send(wmi_handle, &pparam,
|
||||||
|
WMA_WILDCARD_PDEV_ID);
|
||||||
|
} else {
|
||||||
|
wma_debug("Spatial reuse not enabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
release_ref:
|
||||||
|
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_WMA_ID);
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(WLAN_FEATURE_11BE)
|
#if defined(WLAN_FEATURE_11BE)
|
||||||
static enum wlan_phymode
|
static enum wlan_phymode
|
||||||
wma_eht_chan_phy_mode(uint32_t freq, uint8_t dot11_mode, uint16_t bw_val,
|
wma_eht_chan_phy_mode(uint32_t freq, uint8_t dot11_mode, uint16_t bw_val,
|
||||||
|
Reference in New Issue
Block a user