Merge 29620f09dd
on remote branch
Change-Id: If4f463d0ce27fffeb93d930dad5f550cae2ff223
This commit is contained in:
commit
c019ed2f69
4
Kbuild
4
Kbuild
@ -2615,7 +2615,6 @@ cppflags-$(CONFIG_THERMAL_STATS_SUPPORT) += -DTHERMAL_STATS_SUPPORT
|
||||
cppflags-$(CONFIG_PTT_SOCK_SVC_ENABLE) += -DPTT_SOCK_SVC_ENABLE
|
||||
cppflags-$(CONFIG_FEATURE_WLAN_WAPI) += -DFEATURE_WLAN_WAPI
|
||||
cppflags-$(CONFIG_FEATURE_WLAN_WAPI) += -DATH_SUPPORT_WAPI
|
||||
cppflags-$(CONFIG_AGEIE_ON_SCAN_RESULTS) += -DWLAN_ENABLE_AGEIE_ON_SCAN_RESULTS
|
||||
cppflags-$(CONFIG_SOFTAP_CHANNEL_RANGE) += -DSOFTAP_CHANNEL_RANGE
|
||||
cppflags-$(CONFIG_FEATURE_WLAN_SCAN_PNO) += -DFEATURE_WLAN_SCAN_PNO
|
||||
cppflags-$(CONFIG_WLAN_FEATURE_PACKET_FILTERING) += -DWLAN_FEATURE_PACKET_FILTERING
|
||||
@ -2853,6 +2852,7 @@ cppflags-y += -DCONN_MGR_ADV_FEATURE
|
||||
cppflags-$(CONFIG_QCACLD_WLAN_LFR3) += -DWLAN_FEATURE_ROAM_OFFLOAD
|
||||
|
||||
cppflags-$(CONFIG_WLAN_FEATURE_MBSSID) += -DWLAN_FEATURE_MBSSID
|
||||
cppflags-$(CONFIG_WLAN_FEATURE_P2P_P2P_STA) += -DWLAN_FEATURE_P2P_P2P_STA
|
||||
|
||||
ifeq (y,$(findstring y, $(CONFIG_CNSS_GENL) $(CONFIG_CNSS_GENL_MODULE)))
|
||||
cppflags-y += -DCNSS_GENL
|
||||
@ -3649,7 +3649,7 @@ ccflags-y += -DWLAN_PDEV_MAX_VDEVS=$(CONFIG_WLAN_PDEV_MAX_VDEVS)
|
||||
CONFIG_WLAN_PSOC_MAX_VDEVS ?= $(CONFIG_WLAN_MAX_VDEVS)
|
||||
ccflags-y += -DWLAN_PSOC_MAX_VDEVS=$(CONFIG_WLAN_PSOC_MAX_VDEVS)
|
||||
|
||||
CONFIG_MAX_SCAN_CACHE_SIZE ?= 300
|
||||
CONFIG_MAX_SCAN_CACHE_SIZE ?= 500
|
||||
ccflags-y += -DMAX_SCAN_CACHE_SIZE=$(CONFIG_MAX_SCAN_CACHE_SIZE)
|
||||
CONFIG_SCAN_MAX_REST_TIME ?= 0
|
||||
ccflags-y += -DSCAN_MAX_REST_TIME=$(CONFIG_SCAN_MAX_REST_TIME)
|
||||
|
@ -611,6 +611,125 @@ static inline void policy_mgr_change_sap_channel_with_csa(
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_FEATURE_P2P_P2P_STA
|
||||
/**
|
||||
* policy_mgr_is_p2p_p2p_conc_supported() - p2p concurrency support
|
||||
* @psoc: pointer to psoc
|
||||
*
|
||||
* This API is used to check whether firmware supports p2p concurrency
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS up on success and any other status for failure.
|
||||
*/
|
||||
bool
|
||||
policy_mgr_is_p2p_p2p_conc_supported(struct wlan_objmgr_psoc *psoc);
|
||||
#else
|
||||
static inline bool
|
||||
policy_mgr_is_p2p_p2p_conc_supported(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
#define GO_FORCE_SCC_DISABLE 0
|
||||
#define GO_FORCE_SCC_STRICT 1
|
||||
#define GO_FORCE_SCC_LIBERAL 2
|
||||
#ifdef WLAN_FEATURE_P2P_P2P_STA
|
||||
/**
|
||||
* Stay in MCC for 1 second, in case of first p2p go channel
|
||||
* needs to be moved to curr go channel
|
||||
*/
|
||||
#define WAIT_BEFORE_GO_FORCESCC_RESTART (1000)
|
||||
|
||||
/**
|
||||
* policy_mgr_is_go_scc_strict() - Get GO force SCC enabled or not
|
||||
* @psoc: psoc object
|
||||
*
|
||||
* This function checks if force SCC logic should be used on GO interface
|
||||
* as a strict mode.
|
||||
*
|
||||
* Return: True if p2p needs o be start on provided channel only.
|
||||
*/
|
||||
bool policy_mgr_is_go_scc_strict(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
/**
|
||||
* policy_mgr_check_forcescc_for_other_go() - check if another p2pgo
|
||||
* is present and find vdev id.
|
||||
*
|
||||
* @psoc: psoc object
|
||||
* @vdev: vdev id
|
||||
* @freq: frequency
|
||||
*
|
||||
* This function checks if another p2p go is there.
|
||||
*
|
||||
* Return: vdev_id
|
||||
*/
|
||||
uint8_t
|
||||
policy_mgr_check_forcescc_for_other_go(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id, uint32_t curr_go_freq);
|
||||
|
||||
/**
|
||||
* policy_mgr_process_forcescc_for_go () - start work queue to move first p2p go
|
||||
* to new p2p go's channel
|
||||
*
|
||||
* @psoc: PSOC object information
|
||||
* @vdev_id: Vdev id
|
||||
* @ch_freq: Channel frequency to change
|
||||
* @ch_width: channel width to change
|
||||
*
|
||||
* starts delayed work queue of 1 second to move first p2p go to new
|
||||
* p2p go's channel.
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void policy_mgr_process_forcescc_for_go(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
uint32_t ch_freq, uint32_t ch_width);
|
||||
|
||||
/**
|
||||
* policy_mgr_do_go_plus_go_force_scc() - First p2p go
|
||||
* to new p2p go's channel
|
||||
*
|
||||
* @psoc: PSOC object information
|
||||
* @vdev_id: Vdev id
|
||||
* @ch_freq: Channel frequency to change
|
||||
* @ch_width: channel width to change
|
||||
*
|
||||
* Move first p2p go to new
|
||||
* p2p go's channel.
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void policy_mgr_do_go_plus_go_force_scc(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
uint32_t ch_freq, uint32_t ch_width);
|
||||
#else
|
||||
static inline
|
||||
bool policy_mgr_is_go_scc_strict(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline
|
||||
uint8_t policy_mgr_check_forcescc_for_other_go(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
uint32_t curr_go_freq)
|
||||
{
|
||||
return WLAN_UMAC_VDEV_ID_MAX;
|
||||
}
|
||||
|
||||
static inline
|
||||
void policy_mgr_process_forcescc_for_go(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
uint32_t ch_freq, uint32_t ch_width)
|
||||
{}
|
||||
|
||||
static inline
|
||||
void policy_mgr_do_go_plus_go_force_scc(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
uint32_t ch_freq, uint32_t ch_width)
|
||||
{}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* policy_mgr_set_pcl_for_existing_combo() - SET PCL for existing combo
|
||||
* @psoc: PSOC object information
|
||||
@ -3752,4 +3871,18 @@ QDF_STATUS policy_mgr_check_mon_concurrency(struct wlan_objmgr_psoc *psoc);
|
||||
bool policy_mgr_is_sta_chan_valid_for_connect_and_roam(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
qdf_freq_t freq);
|
||||
/**
|
||||
* policy_mgr_is_3rd_conn_on_same_band_allowed() - Check the third connection
|
||||
* on same band allowed or not
|
||||
* list for third connection
|
||||
* @psoc: PSOC object information
|
||||
* @mode: Device mode
|
||||
*
|
||||
* This function checks whether to allow third connection on same band or not
|
||||
* based on pcl table
|
||||
*
|
||||
* Return: TRUE/FALSE
|
||||
*/
|
||||
bool policy_mgr_is_3rd_conn_on_same_band_allowed(struct wlan_objmgr_psoc *psoc,
|
||||
enum policy_mgr_con_mode mode);
|
||||
#endif /* __WLAN_POLICY_MGR_API_H */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 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
|
||||
@ -548,12 +549,19 @@ CFG_INI_UINT("g_mark_sap_indoor_as_disable", 0, 1, 0, CFG_VALUE_OR_DEFAULT, \
|
||||
* <ini>
|
||||
* g_enable_go_force_scc - Enable/Disable force SCC on P2P GO
|
||||
* @Min: 0
|
||||
* @Max: 1
|
||||
* @Max: 2
|
||||
* @Default: 0
|
||||
*
|
||||
* This ini and along with "gWlanMccToSccSwitchMode" is used to enable
|
||||
* force SCC on P2P GO interface.
|
||||
*
|
||||
* GO_FORCE_SCC_DISABLED (value 0): GO force scc disabled and GO can come up
|
||||
* in MCC mode
|
||||
* GO_FORCE_SCC_STRICT (value 1): New GO will be forced to form on existing
|
||||
* GO/STA/GC channel in start bss itself.
|
||||
* GO_FORCE_SCC_LIBERAL (value 2): After SET KEY is done, do force SCC for the
|
||||
* first GO to move to new GO channel.
|
||||
*
|
||||
* Supported Feature: P2P GO
|
||||
*
|
||||
* Usage: External
|
||||
@ -562,7 +570,7 @@ CFG_INI_UINT("g_mark_sap_indoor_as_disable", 0, 1, 0, CFG_VALUE_OR_DEFAULT, \
|
||||
*/
|
||||
|
||||
#define CFG_P2P_GO_ENABLE_FORCE_SCC \
|
||||
CFG_INI_UINT("g_enable_go_force_scc", 0, 1, 0, CFG_VALUE_OR_DEFAULT, \
|
||||
CFG_INI_UINT("g_enable_go_force_scc", 0, 2, 0, CFG_VALUE_OR_DEFAULT, \
|
||||
"Enable/Disable P2P GO force SCC")
|
||||
|
||||
/**
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 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
|
||||
@ -522,6 +523,21 @@ enum policy_mgr_one_connection_mode {
|
||||
* 2x2
|
||||
* @PM_P2P_GO_SAP_SBS_5_1x1: P2P GO & SAP connection on 5G SBS
|
||||
* using 1x1
|
||||
* @PM_P2P_GO_P2P_GO_SCC_24_1x1: P2P GO & P2P GO SCC on 2.4G using 1x1
|
||||
* @PM_P2P_GO_P2P_GO_SCC_24_2x2: P2P GO & P2P GO SCC on 2.4G using 2x2
|
||||
* @PM_P2P_GO_P2P_GO_MCC_24_1x1: P2P GO & P2P GO MCC on 2.4G using 1x1
|
||||
* @PM_P2P_GO_P2P_GO_MCC_24_2x2: P2P GO & P2P GO MCC on 2.4G using 2x2
|
||||
* @PM_P2P_GO_P2P_GO_SCC_5_1x1: P2P GO & P2P GO SCC on 5G using 1x1
|
||||
* @PM_P2P_GO_P2P_GO_SCC_5_2x2: P2P GO & P2P GO SCC on 5G using 2x2
|
||||
* @PM_P2P_GO_P2P_GO_MCC_5_1x1: P2P GO & P2P GO MCC on 5G using 1x1
|
||||
* @PM_P2P_GO_P2P_GO_MCC_5_2x2: P2P GO & P2P GO MCC on 5G using 2x2
|
||||
* @PM_P2P_GO_P2P_GO_MCC_24_5_1x1: P2P GO 2.4G & P2P GO 5G dual band MCC
|
||||
* using 1x1
|
||||
* @PM_P2P_GO_P2P_GO_MCC_24_5_2x2: P2P GO 2.4G & P2P GO 5G dual band MCC
|
||||
* using 2x2
|
||||
* @PM_P2P_GO_P2P_GO_DBS_1x1: P2P GO & P2P GO on DBS using 1x1
|
||||
* @PM_P2P_GO_P2P_GO_DBS_2x2: P2P GO & P2P GO on DBS using 2x2
|
||||
* @PM_P2P_GO_P2P_GO_SBS_5_1x1: P2P GO & P2P GO on SBS using 1x1
|
||||
* @PM_P2P_CLI_SAP_SCC_24_1x1: CLI & SAP connection on SCC using
|
||||
* 1x1@2.4 Ghz
|
||||
* @PM_P2P_CLI_SAP_SCC_24_2x2: CLI & SAP connection on SCC using
|
||||
@ -547,6 +563,21 @@ enum policy_mgr_one_connection_mode {
|
||||
* 2x2
|
||||
* @PM_P2P_CLI_SAP_SBS_5_1x1: P2P CLI & SAP connection on 5G SBS
|
||||
* using 1x1
|
||||
* @PM_P2P_CLI_P2P_CLI_SCC_24_1x1: P2P CLI & P2P CLI SCC on 2.4G using 1x1
|
||||
* @PM_P2P_CLI_P2P_CLI_SCC_24_2x2: P2P CLI & P2P CLI SCC on 2.4G using 2x2
|
||||
* @PM_P2P_CLI_P2P_CLI_MCC_24_1x1: P2P CLI & P2P CLI MCC on 2.4G using 1x1
|
||||
* @PM_P2P_CLI_P2P_CLI_MCC_24_2x2: P2P CLI & P2P CLI MCC on 2.4G using 2x2
|
||||
* @PM_P2P_CLI_P2P_CLI_SCC_5_1x1: P2P CLI & P2P CLI SCC on 5G using 1x1
|
||||
* @PM_P2P_CLI_P2P_CLI_SCC_5_2x2: P2P CLI & P2P CLI SCC on 5G using 2x2
|
||||
* @PM_P2P_CLI_P2P_CLI_MCC_5_1x1: P2P CLI & P2P CLI MCC on 5G using 1x1
|
||||
* @PM_P2P_CLI_P2P_CLI_MCC_5_2x2: P2P CLI & P2P CLI MCC on 5G using 2x2
|
||||
* @PM_P2P_CLI_P2P_CLI_MCC_24_5_1x1: P2P CLI 2.4G & P2P CLI 5G dual band MCC
|
||||
* using 1x1
|
||||
* @PM_P2P_CLI_P2P_CLI_MCC_24_5_2x2: P2P CLI 2.4G & P2P CLI 5G dual band MCC
|
||||
* using 2x2
|
||||
* @PM_P2P_CLI_P2P_CLI_DBS_1x1: P2P CLI & P2P CLI on DBS using 1x1
|
||||
* @PM_P2P_CLI_P2P_CLI_DBS_2x2: P2P CLI & P2P CLI on DBS using 2x2
|
||||
* @PM_P2P_CLI_P2P_CLI_SBS_5_1x1: P2P CLI & P2P CLI on SBS using 1x1
|
||||
* @PM_SAP_SAP_SCC_24_1x1: SAP & SAP connection on
|
||||
* SCC using 1x1@2.4 Ghz
|
||||
* @PM_SAP_SAP_SCC_24_2x2: SAP & SAP connection on
|
||||
@ -617,21 +648,6 @@ enum policy_mgr_one_connection_mode {
|
||||
* @PM_NAN_DISC_NDI_MCC_24_2x2: NAN & NDI connection on MCC using 2x2 on 2.4 GHz
|
||||
* @PM_NAN_DISC_NDI_DBS_1x1: NAN & NDI connection on DBS using 1x1
|
||||
* @PM_NAN_DISC_NDI_DBS_2x2: NAN & NDI connection on DBS using 2x2
|
||||
* @PM_P2P_GO_P2P_GO_SCC_24_1x1: P2P GO & P2P GO SCC on 2.4G using 1x1
|
||||
* @PM_P2P_GO_P2P_GO_SCC_24_2x2: P2P GO & P2P GO SCC on 2.4G using 2x2
|
||||
* @PM_P2P_GO_P2P_GO_MCC_24_1x1: P2P GO & P2P GO MCC on 2.4G using 1x1
|
||||
* @PM_P2P_GO_P2P_GO_MCC_24_2x2: P2P GO & P2P GO MCC on 2.4G using 2x2
|
||||
* @PM_P2P_GO_P2P_GO_SCC_5_1x1: P2P GO & P2P GO SCC on 5G using 1x1
|
||||
* @PM_P2P_GO_P2P_GO_SCC_5_2x2: P2P GO & P2P GO SCC on 5G using 2x2
|
||||
* @PM_P2P_GO_P2P_GO_MCC_5_1x1: P2P GO & P2P GO MCC on 5G using 1x1
|
||||
* @PM_P2P_GO_P2P_GO_MCC_5_2x2: P2P GO & P2P GO MCC on 5G using 2x2
|
||||
* @PM_P2P_GO_P2P_GO_MCC_24_5_1x1: P2P GO 2.4G & P2P GO 5G dual band MCC
|
||||
* using 1x1
|
||||
* @PM_P2P_GO_P2P_GO_MCC_24_5_2x2: P2P GO 2.4G & P2P GO 5G dual band MCC
|
||||
* using 2x2
|
||||
* @PM_P2P_GO_P2P_GO_DBS_1x1: P2P GO & P2P GO on DBS using 1x1
|
||||
* @PM_P2P_GO_P2P_GO_DBS_2x2: P2P GO & P2P GO on DBS using 2x2
|
||||
* @PM_P2P_GO_P2P_GO_SBS_5_1x1: P2P GO & P2P GO on SBS using 1x1
|
||||
*
|
||||
* These are generic IDs that identify the various roles in the
|
||||
* software system
|
||||
@ -702,6 +718,21 @@ enum policy_mgr_two_connection_mode {
|
||||
PM_P2P_GO_SAP_DBS_1x1,
|
||||
PM_P2P_GO_SAP_DBS_2x2,
|
||||
PM_P2P_GO_SAP_SBS_5_1x1,
|
||||
PM_P2P_GO_SAP_SBS_5_2x2 = PM_P2P_GO_SAP_SBS_5_1x1,
|
||||
PM_P2P_GO_P2P_GO_SCC_24_1x1,
|
||||
PM_P2P_GO_P2P_GO_SCC_24_2x2,
|
||||
PM_P2P_GO_P2P_GO_MCC_24_1x1,
|
||||
PM_P2P_GO_P2P_GO_MCC_24_2x2,
|
||||
PM_P2P_GO_P2P_GO_SCC_5_1x1,
|
||||
PM_P2P_GO_P2P_GO_SCC_5_2x2,
|
||||
PM_P2P_GO_P2P_GO_MCC_5_1x1,
|
||||
PM_P2P_GO_P2P_GO_MCC_5_2x2,
|
||||
PM_P2P_GO_P2P_GO_MCC_24_5_1x1,
|
||||
PM_P2P_GO_P2P_GO_MCC_24_5_2x2,
|
||||
PM_P2P_GO_P2P_GO_DBS_1x1,
|
||||
PM_P2P_GO_P2P_GO_DBS_2x2,
|
||||
PM_P2P_GO_P2P_GO_SBS_5_1x1,
|
||||
PM_P2P_GO_P2P_GO_SBS_5_2x2 = PM_P2P_GO_P2P_GO_SBS_5_1x1,
|
||||
PM_P2P_CLI_SAP_SCC_24_1x1,
|
||||
PM_P2P_CLI_SAP_SCC_24_2x2,
|
||||
PM_P2P_CLI_SAP_MCC_24_1x1,
|
||||
@ -715,6 +746,21 @@ enum policy_mgr_two_connection_mode {
|
||||
PM_P2P_CLI_SAP_DBS_1x1,
|
||||
PM_P2P_CLI_SAP_DBS_2x2,
|
||||
PM_P2P_CLI_SAP_SBS_5_1x1,
|
||||
PM_P2P_CLI_SAP_SBS_5_2x2 = PM_P2P_CLI_SAP_SBS_5_1x1,
|
||||
PM_P2P_CLI_P2P_CLI_SCC_24_1x1,
|
||||
PM_P2P_CLI_P2P_CLI_SCC_24_2x2,
|
||||
PM_P2P_CLI_P2P_CLI_MCC_24_1x1,
|
||||
PM_P2P_CLI_P2P_CLI_MCC_24_2x2,
|
||||
PM_P2P_CLI_P2P_CLI_SCC_5_1x1,
|
||||
PM_P2P_CLI_P2P_CLI_SCC_5_2x2,
|
||||
PM_P2P_CLI_P2P_CLI_MCC_5_1x1,
|
||||
PM_P2P_CLI_P2P_CLI_MCC_5_2x2,
|
||||
PM_P2P_CLI_P2P_CLI_MCC_24_5_1x1,
|
||||
PM_P2P_CLI_P2P_CLI_MCC_24_5_2x2,
|
||||
PM_P2P_CLI_P2P_CLI_DBS_1x1,
|
||||
PM_P2P_CLI_P2P_CLI_DBS_2x2,
|
||||
PM_P2P_CLI_P2P_CLI_SBS_5_1x1,
|
||||
PM_P2P_CLI_P2P_CLI_SBS_5_2x2 = PM_P2P_CLI_P2P_CLI_SBS_5_1x1,
|
||||
PM_SAP_SAP_SCC_24_1x1,
|
||||
PM_SAP_SAP_SCC_24_2x2,
|
||||
PM_SAP_SAP_MCC_24_1x1,
|
||||
@ -759,19 +805,6 @@ enum policy_mgr_two_connection_mode {
|
||||
PM_NAN_DISC_NDI_MCC_24_2x2,
|
||||
PM_NAN_DISC_NDI_DBS_1x1,
|
||||
PM_NAN_DISC_NDI_DBS_2x2,
|
||||
PM_P2P_GO_P2P_GO_SCC_24_1x1,
|
||||
PM_P2P_GO_P2P_GO_SCC_24_2x2,
|
||||
PM_P2P_GO_P2P_GO_MCC_24_1x1,
|
||||
PM_P2P_GO_P2P_GO_MCC_24_2x2,
|
||||
PM_P2P_GO_P2P_GO_SCC_5_1x1,
|
||||
PM_P2P_GO_P2P_GO_SCC_5_2x2,
|
||||
PM_P2P_GO_P2P_GO_MCC_5_1x1,
|
||||
PM_P2P_GO_P2P_GO_MCC_5_2x2,
|
||||
PM_P2P_GO_P2P_GO_MCC_24_5_1x1,
|
||||
PM_P2P_GO_P2P_GO_MCC_24_5_2x2,
|
||||
PM_P2P_GO_P2P_GO_DBS_1x1,
|
||||
PM_P2P_GO_P2P_GO_DBS_2x2,
|
||||
PM_P2P_GO_P2P_GO_SBS_5_1x1,
|
||||
PM_MAX_TWO_CONNECTION_MODE
|
||||
};
|
||||
|
||||
@ -1284,12 +1317,30 @@ struct connection_info {
|
||||
uint32_t ch_freq;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct go_plus_go_force_scc - structure to hold p2p go
|
||||
* params for forcescc restart
|
||||
*
|
||||
* @vdev_id: vdev id of first p2p go which needs to do csa
|
||||
* @ch_freq: ch freq of curr p2p go
|
||||
* @ch_width: ch width of curr p2p go
|
||||
*/
|
||||
struct go_plus_go_force_scc {
|
||||
uint8_t vdev_id;
|
||||
uint32_t ch_freq;
|
||||
uint32_t ch_width;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct sta_ap_intf_check_work_ctx - sta_ap_intf_check_work
|
||||
* related info
|
||||
* @psoc: pointer to PSOC object information
|
||||
* @go_plus_go_force_scc: structure to hold params of
|
||||
* curr and first p2p go ctx
|
||||
*/
|
||||
struct sta_ap_intf_check_work_ctx {
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct go_plus_go_force_scc go_plus_go_force_scc;
|
||||
};
|
||||
|
||||
#endif /* __WLAN_POLICY_MGR_PUBLIC_STRUCT_H */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 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
|
||||
@ -1974,53 +1975,55 @@ void policy_mgr_check_sap_restart(struct wlan_objmgr_psoc *psoc,
|
||||
pm_ctx->do_sap_unsafe_ch_check = false;
|
||||
}
|
||||
|
||||
static void __policy_mgr_check_sta_ap_concurrent_ch_intf(void *data)
|
||||
static void __policy_mgr_check_sta_ap_concurrent_ch_intf(
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx = NULL;
|
||||
struct sta_ap_intf_check_work_ctx *work_info = NULL;
|
||||
uint32_t mcc_to_scc_switch, cc_count = 0, i;
|
||||
QDF_STATUS status;
|
||||
uint32_t ch_freq;
|
||||
uint32_t op_ch_freq_list[MAX_NUMBER_OF_CONC_CONNECTIONS];
|
||||
uint8_t vdev_id[MAX_NUMBER_OF_CONC_CONNECTIONS];
|
||||
|
||||
work_info = data;
|
||||
if (!work_info) {
|
||||
policy_mgr_err("Invalid work_info");
|
||||
return;
|
||||
}
|
||||
|
||||
psoc = work_info->psoc;
|
||||
if (!psoc) {
|
||||
policy_mgr_err("Invalid psoc");
|
||||
return;
|
||||
}
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid context");
|
||||
return;
|
||||
}
|
||||
/*
|
||||
* Check if force scc is required for GO + GO case. vdev id will be
|
||||
* valid in case of GO+GO force scc only. So, for valid vdev id move
|
||||
* first GO to newly formed GO channel.
|
||||
*/
|
||||
policy_mgr_debug("p2p go vdev id: %d",
|
||||
pm_ctx->sta_ap_intf_check_work_info->go_plus_go_force_scc.vdev_id);
|
||||
if (pm_ctx->sta_ap_intf_check_work_info->go_plus_go_force_scc.vdev_id <
|
||||
WLAN_UMAC_VDEV_ID_MAX) {
|
||||
policy_mgr_do_go_plus_go_force_scc(
|
||||
pm_ctx->psoc, pm_ctx->sta_ap_intf_check_work_info->go_plus_go_force_scc.vdev_id,
|
||||
pm_ctx->sta_ap_intf_check_work_info->go_plus_go_force_scc.ch_freq,
|
||||
pm_ctx->sta_ap_intf_check_work_info->go_plus_go_force_scc.ch_width);
|
||||
pm_ctx->sta_ap_intf_check_work_info->go_plus_go_force_scc.vdev_id = WLAN_UMAC_VDEV_ID_MAX;
|
||||
return;
|
||||
}
|
||||
|
||||
mcc_to_scc_switch =
|
||||
policy_mgr_get_mcc_to_scc_switch_mode(psoc);
|
||||
policy_mgr_get_mcc_to_scc_switch_mode(pm_ctx->psoc);
|
||||
|
||||
policy_mgr_debug("Concurrent open sessions running: %d",
|
||||
policy_mgr_concurrent_open_sessions_running(psoc));
|
||||
policy_mgr_concurrent_open_sessions_running(
|
||||
pm_ctx->psoc));
|
||||
|
||||
if (!policy_mgr_is_sap_go_existed(psoc))
|
||||
if (!policy_mgr_is_sap_go_existed(pm_ctx->psoc))
|
||||
goto end;
|
||||
|
||||
cc_count = policy_mgr_get_mode_specific_conn_info(
|
||||
psoc, &op_ch_freq_list[cc_count],
|
||||
pm_ctx->psoc, &op_ch_freq_list[cc_count],
|
||||
&vdev_id[cc_count], PM_SAP_MODE);
|
||||
policy_mgr_debug("Number of concurrent SAP: %d", cc_count);
|
||||
if (cc_count < MAX_NUMBER_OF_CONC_CONNECTIONS)
|
||||
cc_count = cc_count +
|
||||
policy_mgr_get_mode_specific_conn_info(
|
||||
psoc, &op_ch_freq_list[cc_count],
|
||||
&vdev_id[cc_count], PM_P2P_GO_MODE);
|
||||
policy_mgr_get_mode_specific_conn_info(
|
||||
pm_ctx->psoc, &op_ch_freq_list[cc_count],
|
||||
&vdev_id[cc_count], PM_P2P_GO_MODE);
|
||||
policy_mgr_debug("Number of beaconing entities (SAP + GO):%d",
|
||||
cc_count);
|
||||
if (!cc_count) {
|
||||
@ -2046,7 +2049,7 @@ static void __policy_mgr_check_sta_ap_concurrent_ch_intf(void *data)
|
||||
for (i = 0; i < cc_count; i++) {
|
||||
status = pm_ctx->hdd_cbacks.
|
||||
wlan_hdd_get_channel_for_sap_restart
|
||||
(psoc, vdev_id[i], &ch_freq);
|
||||
(pm_ctx->psoc, vdev_id[i], &ch_freq);
|
||||
if (status == QDF_STATUS_SUCCESS) {
|
||||
policy_mgr_debug("SAP vdev id %d restarts due to MCC->SCC switch, old ch freq :%d new ch freq: %d",
|
||||
vdev_id[i],
|
||||
@ -2511,6 +2514,56 @@ void policy_mgr_change_sap_channel_with_csa(struct wlan_objmgr_psoc *psoc,
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_FEATURE_P2P_P2P_STA
|
||||
void policy_mgr_do_go_plus_go_force_scc(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id, uint32_t ch_freq,
|
||||
uint32_t ch_width)
|
||||
{
|
||||
uint8_t total_connection;
|
||||
|
||||
total_connection = policy_mgr_mode_specific_connection_count(
|
||||
psoc, PM_P2P_GO_MODE, NULL);
|
||||
|
||||
policy_mgr_debug("Total p2p go connection %d", total_connection);
|
||||
|
||||
/* If any p2p disconnected, don't do csa */
|
||||
if (total_connection > 1) {
|
||||
policy_mgr_change_sap_channel_with_csa(psoc, vdev_id,
|
||||
ch_freq, ch_width, true);
|
||||
}
|
||||
}
|
||||
|
||||
void policy_mgr_process_forcescc_for_go(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id, uint32_t ch_freq,
|
||||
uint32_t ch_width)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid Context");
|
||||
return;
|
||||
}
|
||||
if (!pm_ctx->sta_ap_intf_check_work_info) {
|
||||
policy_mgr_err("invalid work info");
|
||||
return;
|
||||
}
|
||||
pm_ctx->sta_ap_intf_check_work_info->go_plus_go_force_scc.vdev_id =
|
||||
vdev_id;
|
||||
pm_ctx->sta_ap_intf_check_work_info->go_plus_go_force_scc.ch_freq =
|
||||
ch_freq;
|
||||
pm_ctx->sta_ap_intf_check_work_info->go_plus_go_force_scc.ch_width =
|
||||
ch_width;
|
||||
|
||||
if (!qdf_delayed_work_start(&pm_ctx->sta_ap_intf_check_work,
|
||||
WAIT_BEFORE_GO_FORCESCC_RESTART)) {
|
||||
policy_mgr_err("change interface request failure");
|
||||
pm_ctx->sta_ap_intf_check_work_info->go_plus_go_force_scc.vdev_id =
|
||||
WLAN_UMAC_VDEV_ID_MAX;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
QDF_STATUS policy_mgr_wait_for_connection_update(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -2616,6 +2616,13 @@ static bool policy_mgr_is_6g_channel_allowed(
|
||||
return true;
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_P2P_P2P_STA
|
||||
bool policy_mgr_is_p2p_p2p_conc_supported(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
return wlan_mlme_get_p2p_p2p_conc_support(psoc);
|
||||
}
|
||||
#endif
|
||||
|
||||
bool policy_mgr_is_concurrency_allowed(struct wlan_objmgr_psoc *psoc,
|
||||
enum policy_mgr_con_mode mode,
|
||||
uint32_t ch_freq,
|
||||
@ -2641,15 +2648,14 @@ bool policy_mgr_is_concurrency_allowed(struct wlan_objmgr_psoc *psoc,
|
||||
|
||||
if (num_connections && policy_mgr_is_sub_20_mhz_enabled(psoc)) {
|
||||
policy_mgr_rl_debug("dont allow concurrency if Sub 20 MHz is enabled");
|
||||
status = false;
|
||||
goto done;
|
||||
return status;
|
||||
}
|
||||
|
||||
if (policy_mgr_max_concurrent_connections_reached(psoc)) {
|
||||
policy_mgr_rl_debug("Reached max concurrent connections: %d",
|
||||
pm_ctx->cfg.max_conc_cxns);
|
||||
policy_mgr_validate_conn_info(psoc);
|
||||
goto done;
|
||||
return status;
|
||||
}
|
||||
|
||||
if (ch_freq) {
|
||||
@ -2668,7 +2674,7 @@ bool policy_mgr_is_concurrency_allowed(struct wlan_objmgr_psoc *psoc,
|
||||
if (!policy_mgr_allow_new_home_channel(psoc, mode, ch_freq,
|
||||
num_connections,
|
||||
is_dfs_ch))
|
||||
goto done;
|
||||
return status;
|
||||
|
||||
/*
|
||||
* 1) DFS MCC is not yet supported
|
||||
@ -2685,13 +2691,13 @@ bool policy_mgr_is_concurrency_allowed(struct wlan_objmgr_psoc *psoc,
|
||||
*/
|
||||
if (!policy_mgr_is_5g_channel_allowed(psoc,
|
||||
ch_freq, list, PM_P2P_GO_MODE))
|
||||
goto done;
|
||||
return status;
|
||||
if (!policy_mgr_is_5g_channel_allowed(psoc,
|
||||
ch_freq, list, PM_SAP_MODE))
|
||||
goto done;
|
||||
return status;
|
||||
if (!policy_mgr_is_6g_channel_allowed(psoc, mode,
|
||||
ch_freq))
|
||||
goto done;
|
||||
return status;
|
||||
|
||||
sta_sap_scc_on_dfs_chan =
|
||||
policy_mgr_is_sta_sap_scc_allowed_on_dfs_chan(psoc);
|
||||
@ -2706,14 +2712,14 @@ bool policy_mgr_is_concurrency_allowed(struct wlan_objmgr_psoc *psoc,
|
||||
}
|
||||
if (true == match) {
|
||||
policy_mgr_rl_debug("No MCC, SAP/GO about to come up on DFS channel");
|
||||
goto done;
|
||||
return status;
|
||||
}
|
||||
if ((policy_mgr_is_hw_dbs_capable(psoc) != true) &&
|
||||
num_connections) {
|
||||
if (WLAN_REG_IS_24GHZ_CH_FREQ(ch_freq)) {
|
||||
if (policy_mgr_is_sap_p2pgo_on_dfs(psoc)) {
|
||||
policy_mgr_rl_debug("MCC not allowed: SAP/P2PGO on DFS");
|
||||
goto done;
|
||||
return status;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2725,21 +2731,26 @@ bool policy_mgr_is_concurrency_allowed(struct wlan_objmgr_psoc *psoc,
|
||||
if (mode == PM_STA_MODE && count) {
|
||||
if (count >= 2) {
|
||||
policy_mgr_rl_debug("3rd STA isn't permitted");
|
||||
goto done;
|
||||
return status;
|
||||
}
|
||||
sta_freq = pm_conc_connection_list[list[0]].freq;
|
||||
if (!policy_mgr_allow_multiple_sta_connections(psoc, ch_freq,
|
||||
sta_freq))
|
||||
goto done;
|
||||
return status;
|
||||
}
|
||||
|
||||
if (!policy_mgr_allow_sap_go_concurrency(psoc, mode, ch_freq,
|
||||
WLAN_INVALID_VDEV_ID)) {
|
||||
policy_mgr_rl_debug("This concurrency combination is not allowed");
|
||||
goto done;
|
||||
return status;
|
||||
}
|
||||
/* don't allow two P2P GO on same band */
|
||||
if (ch_freq && mode == PM_P2P_GO_MODE && num_connections) {
|
||||
|
||||
/*
|
||||
* don't allow two P2P GO on same band, if fw doesn't
|
||||
* support p2p +p2p concurrency
|
||||
*/
|
||||
if (ch_freq && mode == PM_P2P_GO_MODE && num_connections &&
|
||||
!policy_mgr_is_p2p_p2p_conc_supported(psoc)) {
|
||||
index = 0;
|
||||
count = policy_mgr_mode_specific_connection_count(
|
||||
psoc, PM_P2P_GO_MODE, list);
|
||||
@ -2750,7 +2761,7 @@ bool policy_mgr_is_concurrency_allowed(struct wlan_objmgr_psoc *psoc,
|
||||
pm_conc_connection_list[list[index]].freq)) {
|
||||
policy_mgr_rl_debug("Don't allow P2P GO on same band");
|
||||
qdf_mutex_release(&pm_ctx->qdf_conc_list_lock);
|
||||
goto done;
|
||||
return status;
|
||||
}
|
||||
index++;
|
||||
}
|
||||
@ -2759,12 +2770,11 @@ bool policy_mgr_is_concurrency_allowed(struct wlan_objmgr_psoc *psoc,
|
||||
|
||||
if (!policy_mgr_allow_wapi_concurrency(pm_ctx)) {
|
||||
policy_mgr_rl_debug("Don't allow new conn when wapi security conn existing");
|
||||
goto done;
|
||||
return status;
|
||||
}
|
||||
|
||||
status = true;
|
||||
|
||||
done:
|
||||
return status;
|
||||
}
|
||||
|
||||
@ -4307,8 +4317,6 @@ bool policy_mgr_allow_sap_go_concurrency(struct wlan_objmgr_psoc *psoc,
|
||||
|
||||
if (mode != PM_SAP_MODE && mode != PM_P2P_GO_MODE)
|
||||
return true;
|
||||
if (policy_mgr_dual_beacon_on_single_mac_mcc_capable(psoc))
|
||||
return true;
|
||||
dbs = policy_mgr_is_hw_dbs_capable(psoc);
|
||||
for (id = 0; id < MAX_NUMBER_OF_CONC_CONNECTIONS; id++) {
|
||||
if (!pm_conc_connection_list[id].in_use)
|
||||
@ -4320,6 +4328,18 @@ bool policy_mgr_allow_sap_go_concurrency(struct wlan_objmgr_psoc *psoc,
|
||||
if (con_mode != PM_SAP_MODE && con_mode != PM_P2P_GO_MODE)
|
||||
continue;
|
||||
con_freq = pm_conc_connection_list[id].freq;
|
||||
|
||||
if (policy_mgr_is_p2p_p2p_conc_supported(psoc) &&
|
||||
(mode == PM_P2P_GO_MODE) && (con_mode == PM_P2P_GO_MODE)) {
|
||||
policy_mgr_debug("GO+GO scc is allowed freq = %d ",
|
||||
ch_freq);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (policy_mgr_dual_beacon_on_single_mac_mcc_capable(psoc) &&
|
||||
(mode == PM_SAP_MODE) && (con_mode == PM_SAP_MODE))
|
||||
return true;
|
||||
|
||||
if (policy_mgr_dual_beacon_on_single_mac_scc_capable(psoc) &&
|
||||
(ch_freq == con_freq)) {
|
||||
policy_mgr_debug("SCC enabled, 2 AP on same channel, allow 2nd AP");
|
||||
@ -4608,6 +4628,63 @@ bool policy_mgr_go_scc_enforced(struct wlan_objmgr_psoc *psoc)
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_P2P_P2P_STA
|
||||
uint8_t
|
||||
policy_mgr_check_forcescc_for_other_go(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id, uint32_t freq)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
uint32_t conn_index;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid Context");
|
||||
return WLAN_UMAC_VDEV_ID_MAX;
|
||||
}
|
||||
|
||||
qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock);
|
||||
for (conn_index = 0; conn_index < MAX_NUMBER_OF_CONC_CONNECTIONS;
|
||||
conn_index++) {
|
||||
if (pm_conc_connection_list[conn_index].mode ==
|
||||
PM_P2P_GO_MODE &&
|
||||
pm_conc_connection_list[conn_index].in_use &&
|
||||
wlan_reg_is_same_band_freqs(
|
||||
freq,
|
||||
pm_conc_connection_list[conn_index].freq) &&
|
||||
freq != pm_conc_connection_list[conn_index].freq &&
|
||||
vdev_id != pm_conc_connection_list[conn_index].vdev_id) {
|
||||
qdf_mutex_release(&pm_ctx->qdf_conc_list_lock);
|
||||
policy_mgr_debug(
|
||||
"Existing p2p go vdev_id is %d",
|
||||
pm_conc_connection_list[conn_index].vdev_id);
|
||||
return pm_conc_connection_list[conn_index].vdev_id;
|
||||
}
|
||||
}
|
||||
qdf_mutex_release(&pm_ctx->qdf_conc_list_lock);
|
||||
return WLAN_UMAC_VDEV_ID_MAX;
|
||||
}
|
||||
|
||||
bool policy_mgr_is_go_scc_strict(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
bool ret = false;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
ret = false;
|
||||
goto return_val;
|
||||
}
|
||||
if (pm_ctx->cfg.go_force_scc & GO_FORCE_SCC_STRICT) {
|
||||
ret = true;
|
||||
goto return_val;
|
||||
}
|
||||
ret = false;
|
||||
return_val:
|
||||
policy_mgr_debug("ret val is %d", ret);
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
QDF_STATUS policy_mgr_update_nan_vdev_mac_info(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t nan_vdev_id,
|
||||
uint8_t mac_id)
|
||||
|
@ -571,11 +571,32 @@ void pm_dbs_opportunistic_timer_handler(void *data);
|
||||
enum policy_mgr_con_mode policy_mgr_get_mode(uint8_t type,
|
||||
uint8_t subtype);
|
||||
|
||||
/**
|
||||
* policy_mgr_get_bw() - Convert phy_ch_width to hw_mode_bandwidth.
|
||||
* @chan_width: phy_ch_width
|
||||
*
|
||||
* Return: hw_mode_bandwidth
|
||||
*/
|
||||
enum hw_mode_bandwidth policy_mgr_get_bw(enum phy_ch_width chan_width);
|
||||
|
||||
/**
|
||||
* policy_mgr_get_channel_list() - Get channel list based on PCL and mode
|
||||
* @psoc: psoc object
|
||||
* @pcl: pcl type
|
||||
* @mode: interface mode
|
||||
* @pcl_channels: pcl channel list buffer
|
||||
* @pcl_weights: pcl weight buffer
|
||||
* @pcl_sz: pcl channel list buffer size
|
||||
* @len: pcl channel number returned from API
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS policy_mgr_get_channel_list(struct wlan_objmgr_psoc *psoc,
|
||||
enum policy_mgr_pcl_type pcl,
|
||||
uint32_t *pcl_channels, uint32_t *len,
|
||||
enum policy_mgr_con_mode mode,
|
||||
uint8_t *pcl_weights, uint32_t weight_len);
|
||||
enum policy_mgr_pcl_type pcl,
|
||||
enum policy_mgr_con_mode mode,
|
||||
uint32_t *pcl_channels,
|
||||
uint8_t *pcl_weights,
|
||||
uint32_t pcl_sz, uint32_t *len);
|
||||
|
||||
/**
|
||||
* policy_mgr_allow_new_home_channel() - Check for allowed number of
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2023 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
|
||||
@ -339,6 +339,8 @@ QDF_STATUS policy_mgr_psoc_open(struct wlan_objmgr_psoc *psoc)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
pm_ctx->sta_ap_intf_check_work_info->psoc = psoc;
|
||||
pm_ctx->sta_ap_intf_check_work_info->go_plus_go_force_scc.vdev_id =
|
||||
WLAN_UMAC_VDEV_ID_MAX;
|
||||
if (QDF_IS_STATUS_ERROR(qdf_delayed_work_create(
|
||||
&pm_ctx->sta_ap_intf_check_work,
|
||||
policy_mgr_check_sta_ap_concurrent_ch_intf,
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 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
|
||||
@ -1022,8 +1022,8 @@ QDF_STATUS policy_mgr_get_pcl(struct wlan_objmgr_psoc *psoc,
|
||||
/* once the PCL enum is obtained find out the exact channel list with
|
||||
* help from sme_get_cfg_valid_channels
|
||||
*/
|
||||
status = policy_mgr_get_channel_list(psoc, pcl, pcl_channels, len, mode,
|
||||
pcl_weight, weight_len);
|
||||
status = policy_mgr_get_channel_list(psoc, pcl, mode, pcl_channels,
|
||||
pcl_weight, weight_len, len);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
policy_mgr_err("failed to get channel list:%d", status);
|
||||
return status;
|
||||
@ -1729,58 +1729,128 @@ static enum policy_mgr_two_connection_mode
|
||||
return index;
|
||||
}
|
||||
|
||||
/*
|
||||
* policy_mgr_check_and_get_third_connection_pcl_table_index_for_scc() -
|
||||
* This function checks connection mode is in scc or not and returns
|
||||
* index value based on mode and prvided index inputs.
|
||||
*
|
||||
* @scc_2g_1x1: index of scc_2g_1x1 for provided concurrency
|
||||
* @scc_2g_2x2: index of scc_2g_2x2 for provided concurrency
|
||||
* @scc_5g_1x1: index of scc_5g_1x1 for provided concurrency
|
||||
* @scc_5g_2x2: index of scc_5g_2x2 for provided concurrency
|
||||
*
|
||||
* Return: policy_mgr_two_connection_mode index
|
||||
*/
|
||||
static enum policy_mgr_two_connection_mode
|
||||
policy_mgr_get_third_connection_pcl_table_index_go_go(void)
|
||||
policy_mgr_check_and_get_third_connection_pcl_table_index_for_scc(
|
||||
enum policy_mgr_two_connection_mode scc_2g_1x1,
|
||||
enum policy_mgr_two_connection_mode scc_2g_2x2,
|
||||
enum policy_mgr_two_connection_mode scc_5g_1x1,
|
||||
enum policy_mgr_two_connection_mode scc_5g_2x2)
|
||||
{
|
||||
enum policy_mgr_two_connection_mode index = PM_MAX_TWO_CONNECTION_MODE;
|
||||
/* SCC */
|
||||
|
||||
if (pm_conc_connection_list[0].freq ==
|
||||
pm_conc_connection_list[1].freq) {
|
||||
pm_conc_connection_list[1].freq) {
|
||||
if (WLAN_REG_IS_24GHZ_CH_FREQ(
|
||||
pm_conc_connection_list[0].freq)) {
|
||||
pm_conc_connection_list[0].freq)) {
|
||||
if (POLICY_MGR_ONE_ONE ==
|
||||
pm_conc_connection_list[0].chain_mask)
|
||||
index = PM_P2P_GO_P2P_GO_SCC_24_1x1;
|
||||
pm_conc_connection_list[0].chain_mask)
|
||||
index = scc_2g_1x1;
|
||||
else
|
||||
index = PM_P2P_GO_P2P_GO_SCC_24_2x2;
|
||||
index = scc_2g_2x2;
|
||||
} else {
|
||||
if (POLICY_MGR_ONE_ONE ==
|
||||
pm_conc_connection_list[0].chain_mask)
|
||||
index = PM_P2P_GO_P2P_GO_SCC_5_1x1;
|
||||
index = scc_5g_1x1;
|
||||
else
|
||||
index = PM_P2P_GO_P2P_GO_SCC_5_2x2;
|
||||
index = scc_5g_2x2;
|
||||
}
|
||||
/* MCC */
|
||||
} else if (pm_conc_connection_list[0].mac ==
|
||||
pm_conc_connection_list[1].mac) {
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
/*
|
||||
* policy_mgr_check_and_get_third_connection_pcl_table_index_for_mcc() -
|
||||
* This function checks connection mode is in mcc or not and returns
|
||||
* index value based on mode and prvided index inputs.
|
||||
*
|
||||
* @mcc_2g_1x1: index of mcc_2g_1x1 for provided concurrency
|
||||
* @mcc_2g_2x2: index of mcc_2g_2x2 for provided concurrency
|
||||
* @mcc_5g_1x1: index of mcc_5g_1x1 for provided concurrency
|
||||
* @mcc_5g_2x2: index of mcc_5g_2x2 for provided concurrency
|
||||
* @mcc_24_5_1x1: index of mcc_24_5_1x1 for provided concurrency
|
||||
* @mcc_24_5_2x2: index of mcc_24_5_2x2 for provided concurrency
|
||||
*
|
||||
* Return: policy_mgr_two_connection_mode index
|
||||
*/
|
||||
static enum policy_mgr_two_connection_mode
|
||||
policy_mgr_check_and_get_third_connection_pcl_table_index_for_mcc(
|
||||
enum policy_mgr_two_connection_mode mcc_2g_1x1,
|
||||
enum policy_mgr_two_connection_mode mcc_2g_2x2,
|
||||
enum policy_mgr_two_connection_mode mcc_5g_1x1,
|
||||
enum policy_mgr_two_connection_mode mcc_5g_2x2,
|
||||
enum policy_mgr_two_connection_mode mcc_24_5_1x1,
|
||||
enum policy_mgr_two_connection_mode mcc_24_5_2x2)
|
||||
{
|
||||
enum policy_mgr_two_connection_mode index = PM_MAX_TWO_CONNECTION_MODE;
|
||||
|
||||
if (pm_conc_connection_list[0].mac == pm_conc_connection_list[1].mac) {
|
||||
if ((WLAN_REG_IS_24GHZ_CH_FREQ(
|
||||
pm_conc_connection_list[0].freq)) &&
|
||||
(WLAN_REG_IS_24GHZ_CH_FREQ(
|
||||
pm_conc_connection_list[1].freq))) {
|
||||
pm_conc_connection_list[0].freq)) &&
|
||||
(WLAN_REG_IS_24GHZ_CH_FREQ(
|
||||
pm_conc_connection_list[1].freq))) {
|
||||
if (POLICY_MGR_ONE_ONE ==
|
||||
pm_conc_connection_list[0].chain_mask)
|
||||
index = PM_P2P_GO_P2P_GO_MCC_24_1x1;
|
||||
pm_conc_connection_list[0].chain_mask)
|
||||
index = mcc_2g_1x1;
|
||||
else
|
||||
index = PM_P2P_GO_P2P_GO_MCC_24_2x2;
|
||||
index = mcc_2g_2x2;
|
||||
} else if ((WLAN_REG_IS_5GHZ_CH_FREQ(
|
||||
pm_conc_connection_list[0].freq)) &&
|
||||
(WLAN_REG_IS_5GHZ_CH_FREQ(
|
||||
pm_conc_connection_list[1].freq))) {
|
||||
} else if (!(WLAN_REG_IS_24GHZ_CH_FREQ(
|
||||
pm_conc_connection_list[0].freq)) &&
|
||||
!(WLAN_REG_IS_24GHZ_CH_FREQ(
|
||||
pm_conc_connection_list[1].freq))) {
|
||||
if (POLICY_MGR_ONE_ONE ==
|
||||
pm_conc_connection_list[0].chain_mask)
|
||||
index = PM_P2P_GO_P2P_GO_MCC_5_1x1;
|
||||
pm_conc_connection_list[0].chain_mask)
|
||||
index = mcc_5g_1x1;
|
||||
else
|
||||
index = PM_P2P_GO_P2P_GO_MCC_5_2x2;
|
||||
index = mcc_5g_2x2;
|
||||
} else {
|
||||
if (POLICY_MGR_ONE_ONE ==
|
||||
pm_conc_connection_list[0].chain_mask)
|
||||
index = PM_P2P_GO_P2P_GO_MCC_24_5_1x1;
|
||||
index = mcc_24_5_1x1;
|
||||
else
|
||||
index = PM_P2P_GO_P2P_GO_MCC_24_5_2x2;
|
||||
index = mcc_24_5_2x2;
|
||||
}
|
||||
/* SBS or DBS */
|
||||
} else if (pm_conc_connection_list[0].mac !=
|
||||
pm_conc_connection_list[1].mac) {
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
/*
|
||||
* policy_mgr_check_and_get_third_connection_pcl_table_index_for_dbs() -
|
||||
* This function checks connection mode is in dbs or sbs and returns index
|
||||
* value based on mode and prvided index inputs.
|
||||
*
|
||||
* @sbs_5g_1x1: index of sbs_5g_1x1 for provided concurrency
|
||||
* @sbs_5g_2x2: index of sbs_5g_2x2 for provided concurrency
|
||||
* @dbs_1x1: index of dbs_1x1 for provided concurrency
|
||||
* @dbs_2x2: index of dbs_2x2 for provided concurrency
|
||||
*
|
||||
* Return: policy_mgr_two_connection_mode index
|
||||
*/
|
||||
static enum policy_mgr_two_connection_mode
|
||||
policy_mgr_check_and_get_third_connection_pcl_table_index_for_dbs(
|
||||
enum policy_mgr_two_connection_mode sbs_5g_1x1,
|
||||
enum policy_mgr_two_connection_mode sbs_5g_2x2,
|
||||
enum policy_mgr_two_connection_mode dbs_1x1,
|
||||
enum policy_mgr_two_connection_mode dbs_2x2)
|
||||
{
|
||||
enum policy_mgr_two_connection_mode index = PM_MAX_TWO_CONNECTION_MODE;
|
||||
|
||||
if (pm_conc_connection_list[0].mac != pm_conc_connection_list[1].mac) {
|
||||
/* SBS */
|
||||
if ((WLAN_REG_IS_5GHZ_CH_FREQ(
|
||||
pm_conc_connection_list[0].freq)) &&
|
||||
@ -1788,16 +1858,89 @@ static enum policy_mgr_two_connection_mode
|
||||
pm_conc_connection_list[1].freq))) {
|
||||
if (POLICY_MGR_ONE_ONE ==
|
||||
pm_conc_connection_list[0].chain_mask)
|
||||
index = PM_P2P_GO_P2P_GO_SBS_5_1x1;
|
||||
index = sbs_5g_1x1;
|
||||
else
|
||||
index = sbs_5g_2x2;
|
||||
} else {
|
||||
/* DBS */
|
||||
if (POLICY_MGR_ONE_ONE ==
|
||||
pm_conc_connection_list[0].chain_mask)
|
||||
index = PM_P2P_GO_P2P_GO_DBS_1x1;
|
||||
index = dbs_1x1;
|
||||
else
|
||||
index = PM_P2P_GO_P2P_GO_DBS_2x2;
|
||||
index = dbs_2x2;
|
||||
}
|
||||
}
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
static enum policy_mgr_two_connection_mode
|
||||
policy_mgr_get_third_connection_pcl_table_index_cli_cli(void)
|
||||
{
|
||||
enum policy_mgr_two_connection_mode index;
|
||||
|
||||
index =
|
||||
policy_mgr_check_and_get_third_connection_pcl_table_index_for_scc(
|
||||
PM_P2P_CLI_P2P_CLI_SCC_24_1x1,
|
||||
PM_P2P_CLI_P2P_CLI_SCC_24_2x2,
|
||||
PM_P2P_CLI_P2P_CLI_SCC_5_1x1,
|
||||
PM_P2P_CLI_P2P_CLI_SCC_5_2x2);
|
||||
if (index != PM_MAX_TWO_CONNECTION_MODE)
|
||||
return index;
|
||||
|
||||
index =
|
||||
policy_mgr_check_and_get_third_connection_pcl_table_index_for_mcc(
|
||||
PM_P2P_CLI_P2P_CLI_MCC_24_1x1,
|
||||
PM_P2P_CLI_P2P_CLI_MCC_24_2x2,
|
||||
PM_P2P_CLI_P2P_CLI_MCC_5_1x1,
|
||||
PM_P2P_CLI_P2P_CLI_MCC_5_2x2,
|
||||
PM_P2P_CLI_P2P_CLI_MCC_24_5_1x1,
|
||||
PM_P2P_CLI_P2P_CLI_MCC_24_5_2x2);
|
||||
|
||||
if (index != PM_MAX_TWO_CONNECTION_MODE)
|
||||
return index;
|
||||
|
||||
index =
|
||||
policy_mgr_check_and_get_third_connection_pcl_table_index_for_dbs(
|
||||
PM_P2P_CLI_P2P_CLI_SBS_5_1x1,
|
||||
PM_P2P_CLI_P2P_CLI_SBS_5_2x2,
|
||||
PM_P2P_CLI_P2P_CLI_DBS_1x1,
|
||||
PM_P2P_CLI_P2P_CLI_DBS_2x2);
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
static enum policy_mgr_two_connection_mode
|
||||
policy_mgr_get_third_connection_pcl_table_index_go_go(void)
|
||||
{
|
||||
enum policy_mgr_two_connection_mode index;
|
||||
|
||||
index =
|
||||
policy_mgr_check_and_get_third_connection_pcl_table_index_for_scc(
|
||||
PM_P2P_GO_P2P_GO_SCC_24_1x1,
|
||||
PM_P2P_GO_P2P_GO_SCC_24_2x2,
|
||||
PM_P2P_GO_P2P_GO_SCC_5_1x1,
|
||||
PM_P2P_GO_P2P_GO_SCC_5_2x2);
|
||||
if (index != PM_MAX_TWO_CONNECTION_MODE)
|
||||
return index;
|
||||
|
||||
index =
|
||||
policy_mgr_check_and_get_third_connection_pcl_table_index_for_mcc(
|
||||
PM_P2P_GO_P2P_GO_MCC_24_1x1,
|
||||
PM_P2P_GO_P2P_GO_MCC_24_2x2,
|
||||
PM_P2P_GO_P2P_GO_MCC_5_1x1,
|
||||
PM_P2P_GO_P2P_GO_MCC_5_2x2,
|
||||
PM_P2P_GO_P2P_GO_MCC_24_5_1x1,
|
||||
PM_P2P_GO_P2P_GO_MCC_24_5_2x2);
|
||||
if (index != PM_MAX_TWO_CONNECTION_MODE)
|
||||
return index;
|
||||
|
||||
index =
|
||||
policy_mgr_check_and_get_third_connection_pcl_table_index_for_dbs(
|
||||
PM_P2P_GO_P2P_GO_SBS_5_1x1,
|
||||
PM_P2P_GO_P2P_GO_SBS_5_2x2,
|
||||
PM_P2P_GO_P2P_GO_DBS_1x1,
|
||||
PM_P2P_GO_P2P_GO_DBS_2x2);
|
||||
return index;
|
||||
}
|
||||
|
||||
@ -1977,6 +2120,11 @@ enum policy_mgr_two_connection_mode
|
||||
index =
|
||||
policy_mgr_get_third_connection_pcl_table_index_go_go();
|
||||
|
||||
else if ((pm_conc_connection_list[0].mode == PM_P2P_CLIENT_MODE) &&
|
||||
(pm_conc_connection_list[1].mode == PM_P2P_CLIENT_MODE))
|
||||
index =
|
||||
policy_mgr_get_third_connection_pcl_table_index_cli_cli();
|
||||
|
||||
policy_mgr_debug("mode0:%d mode1:%d freq0:%d freq1:%d chain:%d index:%d",
|
||||
pm_conc_connection_list[0].mode,
|
||||
pm_conc_connection_list[1].mode,
|
||||
@ -2547,7 +2695,7 @@ QDF_STATUS policy_mgr_get_valid_chan_weights(struct wlan_objmgr_psoc *psoc,
|
||||
if ((mode == PM_P2P_GO_MODE || mode == PM_P2P_CLIENT_MODE) ||
|
||||
(mode == PM_STA_MODE &&
|
||||
policy_mgr_mode_specific_connection_count(psoc, PM_STA_MODE,
|
||||
NULL) > 0)) {
|
||||
NULL))) {
|
||||
/*
|
||||
* Store the STA mode's parameter and temporarily delete it
|
||||
* from the concurrency table. This way the allow concurrency
|
||||
@ -2566,10 +2714,22 @@ QDF_STATUS policy_mgr_get_valid_chan_weights(struct wlan_objmgr_psoc *psoc,
|
||||
for (i = 0; i < weight->saved_num_chan; i++) {
|
||||
if (policy_mgr_is_concurrency_allowed
|
||||
(psoc, mode, weight->saved_chan_list[i],
|
||||
HW_MODE_20_MHZ)) {
|
||||
HW_MODE_20_MHZ) &&
|
||||
(policy_mgr_mode_specific_connection_count
|
||||
(psoc, PM_P2P_GO_MODE, NULL) ||
|
||||
policy_mgr_mode_specific_connection_count
|
||||
(psoc, PM_P2P_CLIENT_MODE, NULL)) &&
|
||||
policy_mgr_go_scc_enforced(psoc))
|
||||
/*
|
||||
* For two port/three port connection where if one p2p
|
||||
* connection is already present and force scc is enabled
|
||||
* then enforce Go negotiation channels to be strictly
|
||||
* based on PCL list.
|
||||
*/
|
||||
weight->weighed_valid_list[i] = 0;
|
||||
else
|
||||
weight->weighed_valid_list[i] =
|
||||
WEIGHT_OF_NON_PCL_CHANNELS;
|
||||
}
|
||||
WEIGHT_OF_NON_PCL_CHANNELS;
|
||||
}
|
||||
/* Restore the connection info */
|
||||
if (mode == PM_STA_MODE)
|
||||
@ -2787,3 +2947,82 @@ bool policy_mgr_is_sta_chan_valid_for_connect_and_roam(
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool policy_mgr_is_3rd_conn_on_same_band_allowed(struct wlan_objmgr_psoc *psoc,
|
||||
enum policy_mgr_con_mode mode)
|
||||
{
|
||||
enum policy_mgr_pcl_type pcl = PM_NONE;
|
||||
enum policy_mgr_conc_priority_mode conc_system_pref = 0;
|
||||
enum policy_mgr_two_connection_mode third_index = 0;
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
bool ret = false;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("context is NULL");
|
||||
return false;
|
||||
}
|
||||
|
||||
policy_mgr_debug("pref:%d requested mode:%d",
|
||||
pm_ctx->cur_conc_system_pref, mode);
|
||||
|
||||
switch (pm_ctx->cur_conc_system_pref) {
|
||||
case 0:
|
||||
conc_system_pref = PM_THROUGHPUT;
|
||||
break;
|
||||
case 1:
|
||||
conc_system_pref = PM_POWERSAVE;
|
||||
break;
|
||||
case 2:
|
||||
conc_system_pref = PM_LATENCY;
|
||||
break;
|
||||
default:
|
||||
policy_mgr_err("unknown cur_conc_system_pref value %d",
|
||||
pm_ctx->cur_conc_system_pref);
|
||||
break;
|
||||
}
|
||||
|
||||
third_index = policy_mgr_get_third_connection_pcl_table_index(psoc);
|
||||
if (PM_MAX_TWO_CONNECTION_MODE == third_index) {
|
||||
policy_mgr_err(
|
||||
"couldn't find index for 3rd connection pcl table");
|
||||
return false;
|
||||
}
|
||||
if (policy_mgr_is_hw_dbs_capable(psoc) == true) {
|
||||
pcl = (*third_connection_pcl_dbs_table)
|
||||
[third_index][mode][conc_system_pref];
|
||||
} else {
|
||||
pcl = (*third_connection_pcl_non_dbs_table)
|
||||
[third_index][mode][conc_system_pref];
|
||||
}
|
||||
|
||||
policy_mgr_debug("pcl for third connection is %d", pcl);
|
||||
switch (pcl) {
|
||||
case PM_SCC_CH:
|
||||
case PM_SCC_CH_24G:
|
||||
case PM_SCC_CH_5G:
|
||||
case PM_24G_SCC_CH:
|
||||
case PM_5G_SCC_CH:
|
||||
case PM_SCC_ON_5_SCC_ON_24_24G:
|
||||
case PM_SCC_ON_5_SCC_ON_24_5G:
|
||||
case PM_SCC_ON_24_SCC_ON_5_24G:
|
||||
case PM_SCC_ON_24_SCC_ON_5_5G:
|
||||
case PM_SCC_ON_5_SCC_ON_24:
|
||||
case PM_SCC_ON_24_SCC_ON_5:
|
||||
case PM_24G_SCC_CH_SBS_CH:
|
||||
case PM_24G_SCC_CH_SBS_CH_5G:
|
||||
case PM_MCC_CH:
|
||||
case PM_MCC_CH_24G:
|
||||
case PM_MCC_CH_5G:
|
||||
case PM_24G_MCC_CH:
|
||||
case PM_5G_MCC_CH:
|
||||
case PM_24G_SBS_CH_MCC_CH:
|
||||
ret = true;
|
||||
break;
|
||||
default:
|
||||
policy_mgr_debug("Not in SCC case");
|
||||
ret = false;
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 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
|
||||
@ -570,8 +571,7 @@ pm_third_connection_pcl_dbs_2x2_table = {
|
||||
[PM_STA_P2P_GO_SCC_24_2x2] = {
|
||||
[PM_STA_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_SAP_MODE] = {PM_5G_SCC_CH, PM_5G_SCC_CH, PM_5G_SCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_5G, PM_5G, PM_5G},
|
||||
[PM_P2P_GO_MODE] = {PM_5G, PM_5G, PM_5G},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
@ -590,8 +590,7 @@ pm_third_connection_pcl_dbs_2x2_table = {
|
||||
[PM_STA_P2P_GO_MCC_24_2x2] = {
|
||||
[PM_STA_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_SAP_MODE] = {PM_5G, PM_5G, PM_5G},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_5G, PM_5G, PM_5G},
|
||||
[PM_P2P_GO_MODE] = {PM_5G, PM_5G, PM_5G},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
@ -616,8 +615,7 @@ pm_third_connection_pcl_dbs_2x2_table = {
|
||||
[PM_SAP_MODE] = {
|
||||
PM_24G_SCC_CH_SBS_CH_5G, PM_24G_SCC_CH,
|
||||
PM_24G_SCC_CH_SBS_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_24G, PM_24G, PM_24G},
|
||||
[PM_P2P_GO_MODE] = {PM_24G, PM_24G, PM_24G},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
@ -640,8 +638,7 @@ pm_third_connection_pcl_dbs_2x2_table = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_SAP_MODE] = {
|
||||
PM_24G_SBS_CH_MCC_CH, PM_24G, PM_24G_MCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_24G, PM_24G, PM_24G},
|
||||
[PM_P2P_GO_MODE] = {PM_24G, PM_24G, PM_24G},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
@ -690,8 +687,8 @@ pm_third_connection_pcl_dbs_2x2_table = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_SAP_MODE] = { PM_SCC_ON_5_SCC_ON_24_5G, PM_SCC_ON_5_SCC_ON_24,
|
||||
PM_SCC_ON_5_SCC_ON_24},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_SCC_ON_5_SCC_ON_24_5G, PM_SCC_ON_5_SCC_ON_24,
|
||||
PM_SCC_ON_5_SCC_ON_24},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_SCC_ON_5_SCC_ON_24_5G, PM_SCC_ON_5_SCC_ON_24,
|
||||
PM_SCC_ON_5_SCC_ON_24},
|
||||
@ -1150,6 +1147,182 @@ pm_third_connection_pcl_dbs_2x2_table = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_P2P_CLI_SCC_24_1x1] = {
|
||||
[PM_STA_MODE] = {PM_5G, PM_5G, PM_5G},
|
||||
[PM_SAP_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_GO_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_P2P_CLI_SCC_24_2x2] = {
|
||||
[PM_STA_MODE] = {PM_5G, PM_5G, PM_5G},
|
||||
[PM_SAP_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_GO_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_P2P_CLI_MCC_24_1x1] = {
|
||||
[PM_STA_MODE] = {PM_5G, PM_5G, PM_5G},
|
||||
[PM_SAP_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_P2P_CLI_MCC_24_2x2] = {
|
||||
[PM_STA_MODE] = {PM_5G, PM_5G, PM_5G},
|
||||
[PM_SAP_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_P2P_CLI_SCC_5_1x1] = {
|
||||
[PM_STA_MODE] = {PM_24G, PM_24G, PM_24G},
|
||||
[PM_SAP_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_P2P_CLI_SCC_5_2x2] = {
|
||||
[PM_STA_MODE] = {PM_24G, PM_24G, PM_24G},
|
||||
[PM_SAP_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_P2P_CLI_MCC_5_1x1] = {
|
||||
[PM_STA_MODE] = {PM_24G, PM_24G, PM_24G},
|
||||
[PM_SAP_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_P2P_CLI_MCC_5_2x2] = {
|
||||
[PM_STA_MODE] = {PM_24G, PM_24G, PM_24G},
|
||||
[PM_SAP_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_P2P_CLI_MCC_24_5_1x1] = {
|
||||
[PM_STA_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE},
|
||||
[PM_SAP_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_P2P_CLI_MCC_24_5_2x2] = {
|
||||
[PM_STA_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE},
|
||||
[PM_SAP_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_P2P_CLI_DBS_1x1] = {
|
||||
[PM_STA_MODE] = {
|
||||
PM_SCC_ON_5_SCC_ON_24_5G, PM_SCC_ON_5_SCC_ON_24_5G,
|
||||
PM_SCC_ON_5_SCC_ON_24_5G},
|
||||
[PM_SAP_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_P2P_CLI_DBS_2x2] = {
|
||||
[PM_STA_MODE] = { PM_SCC_ON_5_SCC_ON_24_5G,
|
||||
PM_SCC_ON_5_SCC_ON_24_5G,
|
||||
PM_SCC_ON_5_SCC_ON_24_5G},
|
||||
[PM_SAP_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_P2P_CLI_SBS_5_1x1] = {
|
||||
[PM_STA_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_SAP_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE,
|
||||
PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_P2P_CLI_SCC_24_1x1] = {
|
||||
[PM_STA_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
@ -1166,10 +1339,8 @@ pm_third_connection_pcl_dbs_2x2_table = {
|
||||
[PM_STA_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_SAP_MODE] = {PM_5G, PM_5G, PM_5G},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_5G, PM_5G, PM_5G},
|
||||
[PM_P2P_GO_MODE] = {PM_5G, PM_5G, PM_5G},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
@ -1190,10 +1361,8 @@ pm_third_connection_pcl_dbs_2x2_table = {
|
||||
[PM_STA_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_SAP_MODE] = {PM_5G, PM_5G, PM_5G},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_5G, PM_5G, PM_5G},
|
||||
[PM_P2P_GO_MODE] = {PM_5G, PM_5G, PM_5G},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
@ -1214,10 +1383,8 @@ pm_third_connection_pcl_dbs_2x2_table = {
|
||||
[PM_STA_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_SAP_MODE] = {PM_24G, PM_24G, PM_24G},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_24G, PM_24G, PM_24G},
|
||||
[PM_P2P_GO_MODE] = {PM_24G, PM_24G, PM_24G},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
@ -1238,10 +1405,8 @@ pm_third_connection_pcl_dbs_2x2_table = {
|
||||
[PM_STA_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_SAP_MODE] = {PM_24G, PM_24G, PM_24G},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_24G, PM_24G, PM_24G},
|
||||
[PM_P2P_GO_MODE] = {PM_24G, PM_24G, PM_24G},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
@ -1288,10 +1453,10 @@ pm_third_connection_pcl_dbs_2x2_table = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_SAP_MODE] = { PM_SCC_ON_5_SCC_ON_24_5G, PM_SCC_ON_5_SCC_ON_24,
|
||||
PM_SCC_ON_5_SCC_ON_24},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_SCC_ON_5_SCC_ON_24,
|
||||
PM_SCC_ON_5_SCC_ON_24, PM_SCC_ON_5_SCC_ON_24},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_ON_5_SCC_ON_24,
|
||||
PM_SCC_ON_5_SCC_ON_24, PM_SCC_ON_5_SCC_ON_24},
|
||||
[PM_NAN_DISC_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
@ -1322,8 +1487,7 @@ pm_third_connection_pcl_dbs_2x2_table = {
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_P2P_CLI_SCC_24_2x2] = {
|
||||
[PM_STA_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_STA_MODE] = {PM_5G, PM_5G, PM_5G},
|
||||
[PM_SAP_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
@ -1349,7 +1513,7 @@ pm_third_connection_pcl_dbs_2x2_table = {
|
||||
|
||||
[PM_P2P_GO_P2P_CLI_MCC_24_2x2] = {
|
||||
[PM_STA_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
PM_5G, PM_5G, PM_5G},
|
||||
[PM_SAP_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
@ -1374,8 +1538,7 @@ pm_third_connection_pcl_dbs_2x2_table = {
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_P2P_CLI_SCC_5_2x2] = {
|
||||
[PM_STA_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_STA_MODE] = {PM_24G, PM_24G, PM_24G},
|
||||
[PM_SAP_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
@ -1401,7 +1564,7 @@ pm_third_connection_pcl_dbs_2x2_table = {
|
||||
|
||||
[PM_P2P_GO_P2P_CLI_MCC_5_2x2] = {
|
||||
[PM_STA_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
PM_24G, PM_24G, PM_24G},
|
||||
[PM_SAP_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
@ -1452,8 +1615,8 @@ pm_third_connection_pcl_dbs_2x2_table = {
|
||||
[PM_NDI_MODE] = {PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_P2P_CLI_DBS_2x2] = {
|
||||
[PM_STA_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_STA_MODE] = {PM_SCC_ON_5_SCC_ON_24_5G, PM_SCC_ON_5_SCC_ON_24,
|
||||
PM_SCC_ON_5_SCC_ON_24},
|
||||
[PM_SAP_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 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
|
||||
@ -3242,4 +3242,22 @@ QDF_STATUS
|
||||
wlan_mlme_get_channel_bonding_5ghz(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t *value);
|
||||
|
||||
#ifdef WLAN_FEATURE_P2P_P2P_STA
|
||||
/**
|
||||
* wlan_mlme_get_p2p_p2p_conc_support() - Get p2p+p2p conc support
|
||||
*
|
||||
* @psoc: pointer to psoc object
|
||||
* @val : value
|
||||
*
|
||||
* Return: Success/failure
|
||||
*/
|
||||
bool
|
||||
wlan_mlme_get_p2p_p2p_conc_support(struct wlan_objmgr_psoc *psoc);
|
||||
#else
|
||||
static inline bool
|
||||
wlan_mlme_get_p2p_p2p_conc_support(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
#endif /* _WLAN_MLME_API_H_ */
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 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
|
||||
@ -5020,3 +5020,12 @@ wlan_mlme_get_channel_bonding_5ghz(struct wlan_objmgr_psoc *psoc,
|
||||
*value = mlme_obj->cfg.feature_flags.channel_bonding_mode_5ghz;
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_P2P_P2P_STA
|
||||
bool
|
||||
wlan_mlme_get_p2p_p2p_conc_support(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
return wlan_psoc_nif_fw_ext_cap_get(psoc,
|
||||
WLAN_SOC_EXT_P2P_P2P_CONC_SUPPORT);
|
||||
}
|
||||
#endif
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 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
|
||||
@ -136,11 +137,30 @@ static QDF_STATUS p2p_scan_start(struct p2p_roc_context *roc_ctx)
|
||||
is_dbs = policy_mgr_is_hw_dbs_capable(p2p_soc_obj->soc);
|
||||
|
||||
if (go_num)
|
||||
req->scan_req.dwell_time_passive *=
|
||||
/* Add fixed 300ms extra ROC time instead of multiplying the
|
||||
* ROC duration by const value as this causes the ROC to be
|
||||
* upto 1.5 secs if GO is present. Firmware will advertize NOA
|
||||
* of 1.5 secs and if supplicant cancels ROC after 200 or 300ms
|
||||
* then firmware cannot cancel NOA. So when supplicant sends
|
||||
* next ROC it will be delayed as firmware already is running
|
||||
* previous NOA. This causes p2p find issues if GO is present.
|
||||
* So add fixed duration of 300ms and also cap max ROC to 600ms
|
||||
* when GO is present
|
||||
*/
|
||||
req->scan_req.dwell_time_passive +=
|
||||
P2P_ROC_DURATION_MULTI_GO_PRESENT;
|
||||
else
|
||||
req->scan_req.dwell_time_passive *=
|
||||
P2P_ROC_DURATION_MULTI_GO_ABSENT;
|
||||
if (go_num && req->scan_req.dwell_time_passive >
|
||||
P2P_MAX_ROC_DURATION_GO_PRESENT) {
|
||||
req->scan_req.dwell_time_passive =
|
||||
P2P_MAX_ROC_DURATION_GO_PRESENT;
|
||||
} else if (req->scan_req.dwell_time_passive >
|
||||
P2P_MAX_ROC_DURATION) {
|
||||
req->scan_req.dwell_time_passive = P2P_MAX_ROC_DURATION;
|
||||
}
|
||||
|
||||
/* this is to protect too huge value if some customers
|
||||
* give a higher value from supplicant
|
||||
*/
|
||||
@ -162,9 +182,6 @@ static QDF_STATUS p2p_scan_start(struct p2p_roc_context *roc_ctx)
|
||||
P2P_MAX_ROC_DURATION_NON_DBS_NAN_PRESENT)
|
||||
req->scan_req.dwell_time_passive =
|
||||
P2P_MAX_ROC_DURATION_NON_DBS_NAN_PRESENT;
|
||||
} else if (req->scan_req.dwell_time_passive >
|
||||
P2P_MAX_ROC_DURATION) {
|
||||
req->scan_req.dwell_time_passive = P2P_MAX_ROC_DURATION;
|
||||
}
|
||||
}
|
||||
p2p_debug("FW requested roc duration is:%d",
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 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
|
||||
@ -35,8 +36,9 @@
|
||||
#define P2P_MAX_ROC_DURATION_NON_DBS_NDP_PRESENT 250
|
||||
#define P2P_MAX_ROC_DURATION_DBS_NAN_PRESENT 450
|
||||
#define P2P_MAX_ROC_DURATION_NON_DBS_NAN_PRESENT 300
|
||||
#define P2P_MAX_ROC_DURATION_GO_PRESENT 600
|
||||
|
||||
#define P2P_ROC_DURATION_MULTI_GO_PRESENT 6
|
||||
#define P2P_ROC_DURATION_MULTI_GO_PRESENT 300
|
||||
#define P2P_ROC_DURATION_MULTI_GO_ABSENT 10
|
||||
#define P2P_ACTION_FRAME_DEFAULT_WAIT 200
|
||||
#define P2P_ROC_DEFAULT_DURATION 200
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2020-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 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
|
||||
@ -125,8 +125,8 @@ static void pkt_capture_wdi_event_unsubscribe(struct wlan_objmgr_psoc *psoc)
|
||||
WDI_EVENT_PKT_CAPTURE_OFFLOAD_TX_DATA);
|
||||
|
||||
/* unsubscribe for rx data no peer packets */
|
||||
cdp_wdi_event_sub(soc, pdev_id, &PKT_CAPTURE_RX_NO_PEER_SUBSCRIBER,
|
||||
WDI_EVENT_PKT_CAPTURE_RX_DATA_NO_PEER);
|
||||
cdp_wdi_event_unsub(soc, pdev_id, &PKT_CAPTURE_RX_NO_PEER_SUBSCRIBER,
|
||||
WDI_EVENT_PKT_CAPTURE_RX_DATA_NO_PEER);
|
||||
|
||||
/* unsubscribing for rx data packets */
|
||||
cdp_wdi_event_unsub(soc, pdev_id, &PKT_CAPTURE_RX_SUBSCRIBER,
|
||||
|
@ -199,6 +199,7 @@ ifeq ($(CONFIG_ARCH_QCS40X), y)
|
||||
CONFIG_WLAN_CLD_PM_QOS := y
|
||||
endif
|
||||
CONFIG_WLAN_FEATURE_MBSSID := y
|
||||
CONFIG_WLAN_FEATURE_P2P_P2P_STA := y
|
||||
|
||||
#Flag to enable Legacy Fast Roaming3(LFR3)
|
||||
ifeq (y,$(findstring y,$(CONFIG_HELIUMPLUS) $(CONFIG_LITHIUM)))
|
||||
@ -973,8 +974,6 @@ CONFIG_FEATURE_INTEROP_ISSUES_AP := y
|
||||
|
||||
CONFIG_FEATURE_WLAN_WAPI := y
|
||||
|
||||
CONFIG_AGEIE_ON_SCAN_RESULTS := y
|
||||
|
||||
#Flag to enable FW log parsing support feature
|
||||
CONFIG_FEATURE_FW_LOG_PARSING := y
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2023 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
|
||||
@ -165,7 +165,7 @@ u8 ccp_rsn_oui_13[HDD_RSN_OUI_SIZE] = {0x50, 0x6F, 0x9A, 0x01};
|
||||
|
||||
#define HDD_PEER_AUTHORIZE_WAIT 10
|
||||
|
||||
/**
|
||||
/*
|
||||
* beacon_filter_table - table of IEs used for beacon filtering
|
||||
*/
|
||||
static const int beacon_filter_table[] = {
|
||||
@ -434,18 +434,6 @@ struct hdd_adapter *hdd_get_sta_connection_in_progress(
|
||||
hdd_adapter_dev_put_debug(next_adapter,
|
||||
dbgid);
|
||||
return adapter;
|
||||
} else if ((eConnectionState_Associated ==
|
||||
hdd_sta_ctx->conn_info.conn_state) &&
|
||||
sme_is_sta_key_exchange_in_progress(
|
||||
hdd_ctx->mac_handle,
|
||||
adapter->vdev_id)) {
|
||||
hdd_debug("vdev_id %d: Key exchange is in progress",
|
||||
adapter->vdev_id);
|
||||
hdd_adapter_dev_put_debug(adapter, dbgid);
|
||||
if (next_adapter)
|
||||
hdd_adapter_dev_put_debug(next_adapter,
|
||||
dbgid);
|
||||
return adapter;
|
||||
}
|
||||
}
|
||||
hdd_adapter_dev_put_debug(adapter, dbgid);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 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
|
||||
@ -7237,6 +7237,8 @@ const struct nla_policy wlan_hdd_wifi_config_policy[
|
||||
[QCA_WLAN_VENDOR_ATTR_CONFIG_TX_NSS] = {.type = NLA_U8 },
|
||||
[QCA_WLAN_VENDOR_ATTR_CONFIG_RX_NSS] = {.type = NLA_U8 },
|
||||
[QCA_WLAN_VENDOR_ATTR_CONFIG_FT_OVER_DS] = {.type = NLA_U8 },
|
||||
[QCA_WLAN_VENDOR_ATTR_CONFIG_WFC_STATE] = {
|
||||
.type = NLA_U8 },
|
||||
};
|
||||
|
||||
static const struct nla_policy
|
||||
@ -9017,6 +9019,38 @@ static int hdd_set_nss(struct hdd_adapter *adapter,
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_set_wfc_state() - Set wfc state
|
||||
* @adapter: hdd adapter
|
||||
* @attr: pointer to nla attr
|
||||
*
|
||||
* Return: 0 on success, negative on failure
|
||||
*/
|
||||
static int hdd_set_wfc_state(struct hdd_adapter *adapter,
|
||||
const struct nlattr *attr)
|
||||
{
|
||||
uint8_t cfg_val;
|
||||
enum pld_wfc_mode set_val;
|
||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||
int errno;
|
||||
|
||||
errno = wlan_hdd_validate_context(hdd_ctx);
|
||||
if (errno)
|
||||
return errno;
|
||||
|
||||
cfg_val = nla_get_u8(attr);
|
||||
|
||||
hdd_debug_rl("set wfc state %d", cfg_val);
|
||||
if (cfg_val == 0)
|
||||
set_val = PLD_WFC_MODE_OFF;
|
||||
else if (cfg_val == 1)
|
||||
set_val = PLD_WFC_MODE_ON;
|
||||
else
|
||||
return -EINVAL;
|
||||
|
||||
return pld_set_wfc_mode(hdd_ctx->parent_dev, set_val);
|
||||
}
|
||||
|
||||
/**
|
||||
* typedef independent_setter_fn - independent attribute handler
|
||||
* @adapter: The adapter being configured
|
||||
@ -9129,6 +9163,8 @@ static const struct independent_setters independent_setters[] = {
|
||||
hdd_config_udp_qos_upgrade_threshold},
|
||||
{QCA_WLAN_VENDOR_ATTR_CONFIG_FT_OVER_DS,
|
||||
hdd_set_ft_over_ds},
|
||||
{QCA_WLAN_VENDOR_ATTR_CONFIG_WFC_STATE,
|
||||
hdd_set_wfc_state},
|
||||
};
|
||||
|
||||
#ifdef WLAN_FEATURE_ELNA
|
||||
@ -19714,7 +19750,8 @@ static int wlan_hdd_cfg80211_connect_start(struct hdd_adapter *adapter,
|
||||
const u8 *ssid, size_t ssid_len,
|
||||
const u8 *bssid, const u8 *bssid_hint,
|
||||
uint32_t oper_freq,
|
||||
enum nl80211_chan_width ch_width)
|
||||
enum nl80211_chan_width ch_width,
|
||||
uint32_t ch_freq_hint)
|
||||
{
|
||||
int status = 0;
|
||||
QDF_STATUS qdf_status = QDF_STATUS_SUCCESS;
|
||||
@ -19907,6 +19944,8 @@ static int wlan_hdd_cfg80211_connect_start(struct hdd_adapter *adapter,
|
||||
roam_profile->ChannelInfo.numOfChannels = 0;
|
||||
}
|
||||
|
||||
roam_profile->freq_hint = ch_freq_hint;
|
||||
|
||||
if (wlan_hdd_cfg80211_check_pmf_valid(roam_profile)) {
|
||||
status = -EINVAL;
|
||||
goto conn_failure;
|
||||
@ -21723,6 +21762,7 @@ static int __wlan_hdd_cfg80211_connect(struct wiphy *wiphy,
|
||||
#endif
|
||||
struct hdd_adapter *adapter = WLAN_HDD_GET_PRIV_PTR(ndev);
|
||||
struct hdd_context *hdd_ctx;
|
||||
uint32_t ch_freq_hint = 0;
|
||||
|
||||
hdd_enter();
|
||||
|
||||
@ -21838,11 +21878,15 @@ static int __wlan_hdd_cfg80211_connect(struct wiphy *wiphy,
|
||||
else
|
||||
ch_freq = 0;
|
||||
|
||||
if (req->channel_hint)
|
||||
ch_freq_hint = req->channel_hint->center_freq;
|
||||
|
||||
wlan_hdd_check_ht20_ht40_ind(hdd_ctx, adapter, req);
|
||||
|
||||
status = wlan_hdd_cfg80211_connect_start(adapter, req->ssid,
|
||||
req->ssid_len, req->bssid,
|
||||
bssid_hint, ch_freq, 0);
|
||||
bssid_hint, ch_freq, 0,
|
||||
ch_freq_hint);
|
||||
if (status) {
|
||||
wlan_hdd_cfg80211_clear_privacy(adapter);
|
||||
hdd_err("connect failed");
|
||||
|
@ -5273,24 +5273,6 @@ int wlan_hdd_cfg80211_start_bss(struct hdd_adapter *adapter,
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* For STA+SAP concurrency support from GUI, first STA connection gets
|
||||
* triggered and while it is in progress, SAP start also comes up.
|
||||
* Once STA association is successful, STA connect event is sent to
|
||||
* kernel which gets queued in kernel workqueue and supplicant won't
|
||||
* process M1 received from AP and send M2 until this NL80211_CONNECT
|
||||
* event is received. Workqueue is not scheduled as RTNL lock is already
|
||||
* taken by hostapd thread which has issued start_bss command to driver.
|
||||
* Driver cannot complete start_bss as the pending command at the head
|
||||
* of the SME command pending list is hw_mode_update for STA session
|
||||
* which cannot be processed as SME is in WAITforKey state for STA
|
||||
* interface. The start_bss command for SAP interface is queued behind
|
||||
* the hw_mode_update command and so it cannot be processed until
|
||||
* hw_mode_update command is processed. This is causing a deadlock so
|
||||
* disconnect the STA interface first if connection or key exchange is
|
||||
* in progress and then start SAP interface.
|
||||
*/
|
||||
hdd_abort_ongoing_sta_connection(hdd_ctx);
|
||||
|
||||
mac_handle = hdd_ctx->mac_handle;
|
||||
|
||||
@ -6070,13 +6052,6 @@ static int __wlan_hdd_cfg80211_stop_ap(struct wiphy *wiphy,
|
||||
hdd_debug("Device_mode %s(%d)",
|
||||
qdf_opmode_str(adapter->device_mode), adapter->device_mode);
|
||||
|
||||
/*
|
||||
* If a STA connection is in progress in another adapter, disconnect
|
||||
* the STA and complete the SAP operation. STA will reconnect
|
||||
* after SAP stop is done.
|
||||
*/
|
||||
hdd_abort_ongoing_sta_connection(hdd_ctx);
|
||||
|
||||
if (adapter->device_mode == QDF_SAP_MODE) {
|
||||
wlan_hdd_del_station(adapter);
|
||||
mac_handle = hdd_ctx->mac_handle;
|
||||
@ -6361,6 +6336,9 @@ wlan_hdd_ap_ap_force_scc_override(struct hdd_adapter *adapter,
|
||||
return false;
|
||||
}
|
||||
|
||||
if (adapter->device_mode == QDF_P2P_GO_MODE &&
|
||||
policy_mgr_is_p2p_p2p_conc_supported(hdd_ctx->psoc))
|
||||
return false;
|
||||
if (!policy_mgr_concurrent_beaconing_sessions_running(hdd_ctx->psoc))
|
||||
return false;
|
||||
if (policy_mgr_dual_beacon_on_single_mac_mcc_capable(hdd_ctx->psoc))
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 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
|
||||
@ -6507,12 +6507,15 @@ static int drv_cmd_set_channel_switch(struct hdd_adapter *adapter,
|
||||
return status;
|
||||
}
|
||||
|
||||
if ((chan_bw != 20) && (chan_bw != 40) && (chan_bw != 80)) {
|
||||
if ((chan_bw != 20) && (chan_bw != 40) && (chan_bw != 80) &&
|
||||
(chan_bw != 160)) {
|
||||
hdd_err("BW %d is not allowed for CHANNEL_SWITCH", chan_bw);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (chan_bw == 80)
|
||||
if (chan_bw == 160)
|
||||
width = CH_WIDTH_160MHZ;
|
||||
else if (chan_bw == 80)
|
||||
width = CH_WIDTH_80MHZ;
|
||||
else if (chan_bw == 40)
|
||||
width = CH_WIDTH_40MHZ;
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2023 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
|
||||
@ -803,7 +803,10 @@ struct wireless_dev *__wlan_hdd_add_virtual_intf(struct wiphy *wiphy,
|
||||
name_assign_type, true);
|
||||
} else {
|
||||
uint8_t *device_address;
|
||||
|
||||
if (strnstr(name, "p2p", 3) && mode == QDF_STA_MODE) {
|
||||
hdd_debug("change mode to p2p device");
|
||||
mode = QDF_P2P_DEVICE_MODE;
|
||||
}
|
||||
device_address = wlan_hdd_get_intf_addr(hdd_ctx, mode);
|
||||
if (!device_address)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
@ -32,9 +32,9 @@
|
||||
#define QWLAN_VERSION_MAJOR 2
|
||||
#define QWLAN_VERSION_MINOR 0
|
||||
#define QWLAN_VERSION_PATCH 8
|
||||
#define QWLAN_VERSION_EXTRA "E"
|
||||
#define QWLAN_VERSION_EXTRA "R"
|
||||
#define QWLAN_VERSION_BUILD 32
|
||||
|
||||
#define QWLAN_VERSIONSTR "2.0.8.32E"
|
||||
#define QWLAN_VERSIONSTR "2.0.8.32R"
|
||||
|
||||
#endif /* QWLAN_VERSION_H */
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 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
|
||||
@ -133,6 +133,16 @@ enum pld_platform_cap_flag {
|
||||
PLD_HAS_DRV_SUPPORT = 0x04,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum pld_wfc_mode - WFC Mode
|
||||
* @PLD_WFC_MODE_OFF: WFC Inactive
|
||||
* @PLD_WFC_MODE_ON: WFC Active
|
||||
*/
|
||||
enum pld_wfc_mode {
|
||||
PLD_WFC_MODE_OFF,
|
||||
PLD_WFC_MODE_ON,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct pld_platform_cap - platform capabilities
|
||||
* @cap_flag: capabilities flag
|
||||
@ -946,6 +956,15 @@ int pld_thermal_register(struct device *dev, unsigned long state, int mon_id);
|
||||
*/
|
||||
void pld_thermal_unregister(struct device *dev, int mon_id);
|
||||
|
||||
/**
|
||||
* pld_set_wfc_mode() - Sent WFC mode to FW via platform driver
|
||||
* @dev: The device structure
|
||||
* @wfc_mode: WFC Modes (0 => Inactive, 1 => Active)
|
||||
*
|
||||
* Return: Error code on error
|
||||
*/
|
||||
int pld_set_wfc_mode(struct device *dev, enum pld_wfc_mode wfc_mode);
|
||||
|
||||
/**
|
||||
* pld_bus_width_type_to_str() - Helper function to convert PLD bandwidth level
|
||||
* to string
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 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
|
||||
@ -3154,6 +3154,32 @@ void pld_thermal_unregister(struct device *dev, int mon_id)
|
||||
}
|
||||
}
|
||||
|
||||
int pld_set_wfc_mode(struct device *dev, enum pld_wfc_mode wfc_mode)
|
||||
{
|
||||
int errno = -ENOTSUPP;
|
||||
enum pld_bus_type type;
|
||||
|
||||
type = pld_get_bus_type(dev);
|
||||
switch (type) {
|
||||
case PLD_BUS_TYPE_SDIO:
|
||||
case PLD_BUS_TYPE_USB:
|
||||
case PLD_BUS_TYPE_SNOC:
|
||||
case PLD_BUS_TYPE_IPCI_FW_SIM:
|
||||
case PLD_BUS_TYPE_SNOC_FW_SIM:
|
||||
case PLD_BUS_TYPE_IPCI:
|
||||
case PLD_BUS_TYPE_PCIE_FW_SIM:
|
||||
break;
|
||||
case PLD_BUS_TYPE_PCIE:
|
||||
errno = pld_pcie_set_wfc_mode(dev, wfc_mode);
|
||||
break;
|
||||
default:
|
||||
pr_err("Invalid device type %d\n", type);
|
||||
break;
|
||||
}
|
||||
|
||||
return errno;
|
||||
}
|
||||
|
||||
const char *pld_bus_width_type_to_str(enum pld_bus_width_type level)
|
||||
{
|
||||
switch (level) {
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 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
|
||||
@ -940,5 +941,30 @@ void pld_pcie_device_self_recovery(struct device *dev,
|
||||
}
|
||||
cnss_self_recovery(dev, cnss_reason);
|
||||
}
|
||||
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0))
|
||||
int pld_pcie_set_wfc_mode(struct device *dev,
|
||||
enum pld_wfc_mode wfc_mode)
|
||||
{
|
||||
struct cnss_wfc_cfg cfg;
|
||||
int ret;
|
||||
|
||||
switch (wfc_mode) {
|
||||
case PLD_WFC_MODE_OFF:
|
||||
cfg.mode = CNSS_WFC_MODE_OFF;
|
||||
break;
|
||||
case PLD_WFC_MODE_ON:
|
||||
cfg.mode = CNSS_WFC_MODE_ON;
|
||||
break;
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = cnss_set_wfc_mode(dev, cfg);
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 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
|
||||
@ -404,7 +405,24 @@ static inline bool pld_pcie_platform_driver_support(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline int pld_pcie_set_wfc_mode(struct device *dev,
|
||||
enum pld_wfc_mode wfc_mode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0))
|
||||
int pld_pcie_set_wfc_mode(struct device *dev,
|
||||
enum pld_wfc_mode wfc_mode);
|
||||
#else
|
||||
static inline int pld_pcie_set_wfc_mode(struct device *dev,
|
||||
enum pld_wfc_mode wfc_mode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
int pld_pcie_get_fw_files_for_target(struct device *dev,
|
||||
struct pld_fw_files *pfw_files,
|
||||
u32 target_type, u32 target_version);
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 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
|
||||
@ -829,6 +830,51 @@ static void wlansap_update_vendor_acs_chan(struct mac_context *mac_ctx,
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_P2P_P2P_STA
|
||||
/**
|
||||
* sap_check_and_process_forcescc_for_other_go() - find if other p2p go is there
|
||||
* and needs to be moved to current p2p go's channel.
|
||||
*
|
||||
* @cur_sap_ctx: current sap context
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void
|
||||
sap_check_and_process_forcescc_for_other_go(struct sap_context *cur_sap_ctx)
|
||||
{
|
||||
struct sap_context *sap_ctx;
|
||||
struct mac_context *mac_ctx;
|
||||
uint8_t i;
|
||||
|
||||
mac_ctx = sap_get_mac_context();
|
||||
if (!mac_ctx) {
|
||||
sap_err("Invalid MAC context");
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < SAP_MAX_NUM_SESSION; i++) {
|
||||
sap_ctx = mac_ctx->sap.sapCtxList[i].sap_context;
|
||||
if (sap_ctx &&
|
||||
QDF_P2P_GO_MODE == mac_ctx->sap.sapCtxList[i].sapPersona &&
|
||||
sap_ctx->is_forcescc_restart_required) {
|
||||
sap_debug("sessionId %d chan_freq %d chan_width %d",
|
||||
sap_ctx->sessionId, cur_sap_ctx->chan_freq,
|
||||
cur_sap_ctx->ch_params.ch_width);
|
||||
policy_mgr_process_forcescc_for_go(
|
||||
mac_ctx->psoc, sap_ctx->sessionId,
|
||||
cur_sap_ctx->chan_freq,
|
||||
cur_sap_ctx->ch_params.ch_width);
|
||||
sap_ctx->is_forcescc_restart_required = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
static void
|
||||
sap_check_and_process_forcescc_for_other_go(struct sap_context *cur_sap_ctx)
|
||||
{}
|
||||
#endif
|
||||
|
||||
QDF_STATUS wlansap_roam_callback(void *ctx,
|
||||
struct csr_roam_info *csr_roam_info,
|
||||
uint32_t roam_id,
|
||||
@ -1157,10 +1203,25 @@ QDF_STATUS wlansap_roam_callback(void *ctx,
|
||||
* disassoc event
|
||||
* Fill in the event structure
|
||||
*/
|
||||
if (roam_status == eCSR_ROAM_SET_KEY_COMPLETE)
|
||||
if (roam_status == eCSR_ROAM_SET_KEY_COMPLETE) {
|
||||
sap_signal_hdd_event(sap_ctx, csr_roam_info,
|
||||
eSAP_STA_SET_KEY_EVENT,
|
||||
(void *) eSAP_STATUS_SUCCESS);
|
||||
|
||||
/*
|
||||
* After set key if this is the first peer connecting to new GO
|
||||
* then check for peer count (which is self peer + peer count)
|
||||
* and take decision for GO+GO force SCC
|
||||
*/
|
||||
if (sap_ctx->vdev->vdev_mlme.vdev_opmode ==
|
||||
QDF_P2P_GO_MODE &&
|
||||
wlan_vdev_get_peer_count(sap_ctx->vdev) == 2 &&
|
||||
policy_mgr_mode_specific_connection_count(
|
||||
mac_ctx->psoc, PM_P2P_GO_MODE,
|
||||
NULL) > 1)
|
||||
sap_check_and_process_forcescc_for_other_go(
|
||||
sap_ctx);
|
||||
}
|
||||
break;
|
||||
case eCSR_ROAM_RESULT_MAX_ASSOC_EXCEEDED:
|
||||
/* Fill in the event structure */
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2023 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
|
||||
@ -784,6 +784,41 @@ static bool is_mcc_preferred(struct sap_context *sap_context,
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_P2P_P2P_STA
|
||||
/**
|
||||
* sap_set_forcescc_required - set force scc flag for provided p2p go vdev
|
||||
*
|
||||
* vdev_id - vdev_id for which flag needs to be set
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void sap_set_forcescc_required(uint8_t vdev_id)
|
||||
{
|
||||
struct mac_context *mac_ctx;
|
||||
struct sap_context *sap_ctx;
|
||||
uint8_t i = 0;
|
||||
|
||||
mac_ctx = sap_get_mac_context();
|
||||
if (!mac_ctx) {
|
||||
sap_err("Invalid MAC context");
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < SAP_MAX_NUM_SESSION; i++) {
|
||||
sap_ctx = mac_ctx->sap.sapCtxList[i].sap_context;
|
||||
if (QDF_P2P_GO_MODE == mac_ctx->sap.sapCtxList[i].sapPersona &&
|
||||
sap_ctx->sessionId == vdev_id) {
|
||||
sap_debug("update forcescc restart for vdev %d",
|
||||
vdev_id);
|
||||
sap_ctx->is_forcescc_restart_required = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
static void sap_set_forcescc_required(uint8_t vdev_id)
|
||||
{}
|
||||
#endif
|
||||
|
||||
QDF_STATUS
|
||||
sap_validate_chan(struct sap_context *sap_context,
|
||||
bool pre_start_bss,
|
||||
@ -799,6 +834,8 @@ sap_validate_chan(struct sap_context *sap_context,
|
||||
uint32_t concurrent_state;
|
||||
bool go_force_scc;
|
||||
struct ch_params ch_params = {0};
|
||||
bool is_go_scc_strict = false;
|
||||
uint8_t first_p2p_go_vdev_id = WLAN_UMAC_VDEV_ID_MAX;
|
||||
|
||||
mac_handle = cds_get_context(QDF_MODULE_ID_SME);
|
||||
mac_ctx = MAC_CONTEXT(mac_handle);
|
||||
@ -812,10 +849,45 @@ sap_validate_chan(struct sap_context *sap_context,
|
||||
sap_err("Invalid channel");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
go_force_scc = policy_mgr_go_scc_enforced(mac_ctx->psoc);
|
||||
if (sap_context->vdev && !go_force_scc &&
|
||||
(wlan_vdev_mlme_get_opmode(sap_context->vdev) == QDF_P2P_GO_MODE))
|
||||
goto validation_done;
|
||||
|
||||
if (sap_context->vdev &&
|
||||
sap_context->vdev->vdev_mlme.vdev_opmode == QDF_P2P_GO_MODE) {
|
||||
/*
|
||||
* check whether go_force_scc is enabled or not.
|
||||
* If it not enabled then don't any force scc on existing and new
|
||||
* p2p go vdevs.
|
||||
* Otherwise, if it is enabled then check whether it's in strict
|
||||
* mode or liberal mode.
|
||||
* For strict mode, do force scc on newly p2p go to existing p2p
|
||||
* go channel.
|
||||
* For liberal mode, first form new p2p go on requested channel.
|
||||
* Once set key is done, do force scc on existing p2p go to new
|
||||
* p2p go channel.
|
||||
*/
|
||||
go_force_scc = policy_mgr_go_scc_enforced(mac_ctx->psoc);
|
||||
sap_debug("go force scc value %d", go_force_scc);
|
||||
if (go_force_scc) {
|
||||
is_go_scc_strict =
|
||||
policy_mgr_is_go_scc_strict(mac_ctx->psoc);
|
||||
if (!is_go_scc_strict) {
|
||||
sap_debug("liberal mode is enabled");
|
||||
first_p2p_go_vdev_id =
|
||||
policy_mgr_check_forcescc_for_other_go(
|
||||
mac_ctx->psoc,
|
||||
sap_context->sessionId,
|
||||
sap_context->chan_freq);
|
||||
|
||||
if (first_p2p_go_vdev_id <
|
||||
WLAN_UMAC_VDEV_ID_MAX) {
|
||||
sap_set_forcescc_required(
|
||||
first_p2p_go_vdev_id);
|
||||
goto validation_done;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
goto validation_done;
|
||||
}
|
||||
}
|
||||
|
||||
concurrent_state = policy_mgr_get_concurrency_mode(mac_ctx->psoc);
|
||||
if (policy_mgr_concurrent_beaconing_sessions_running(mac_ctx->psoc) ||
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 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
|
||||
@ -230,6 +231,13 @@ struct sap_context {
|
||||
bool is_chan_change_inprogress;
|
||||
qdf_list_t owe_pending_assoc_ind_list;
|
||||
uint32_t freq_before_ch_switch;
|
||||
#ifdef WLAN_FEATURE_P2P_P2P_STA
|
||||
/*
|
||||
*This param is used for GO+GO force scc logic where after
|
||||
*setkey first GO will move to latest GO's channel
|
||||
*/
|
||||
bool is_forcescc_restart_required;
|
||||
#endif
|
||||
};
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2011-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 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
|
||||
@ -662,6 +663,7 @@ struct csr_roam_profile {
|
||||
tCsrKeys Keys;
|
||||
tCsrChannelInfo ChannelInfo;
|
||||
uint32_t op_freq;
|
||||
uint32_t freq_hint;
|
||||
struct ch_params ch_params;
|
||||
/* If this is 0, SME will fill in for caller. */
|
||||
uint16_t beaconInterval;
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2023 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
|
||||
@ -8711,35 +8711,60 @@ bool is_disconnect_pending(struct mac_context *pmac, uint8_t vdev_id)
|
||||
return disconnect_cmd_exist;
|
||||
}
|
||||
|
||||
bool is_disconnect_pending_on_other_vdev(struct mac_context *pmac,
|
||||
uint8_t vdev_id)
|
||||
bool is_any_other_vdev_connecting_disconnecting(struct mac_context *pmac,
|
||||
uint8_t vdev_id)
|
||||
{
|
||||
tListElem *entry = NULL;
|
||||
tListElem *next_entry = NULL;
|
||||
tSmeCmd *command = NULL;
|
||||
bool disconnect_cmd_exist = false;
|
||||
bool is_pending_cmd = false;
|
||||
enum QDF_OPMODE opmode;
|
||||
|
||||
entry = csr_nonscan_pending_ll_peek_head(pmac, LL_ACCESS_NOLOCK);
|
||||
while (entry) {
|
||||
next_entry = csr_nonscan_pending_ll_next(pmac, entry,
|
||||
LL_ACCESS_NOLOCK);
|
||||
command = GET_BASE_ADDR(entry, tSmeCmd, Link);
|
||||
/*
|
||||
* check if any other vdev NB disconnect or SB disconnect
|
||||
* (eSmeCommandWmStatusChange) is pending
|
||||
*/
|
||||
if (command && (CSR_IS_DISCONNECT_COMMAND(command) ||
|
||||
command->command == eSmeCommandWmStatusChange) &&
|
||||
command->vdev_id != vdev_id) {
|
||||
sme_debug("disconnect is pending on vdev:%d, cmd:%d",
|
||||
command->vdev_id, command->command);
|
||||
disconnect_cmd_exist = true;
|
||||
break;
|
||||
if (!command) {
|
||||
entry = next_entry;
|
||||
continue;
|
||||
}
|
||||
|
||||
opmode = wlan_get_opmode_from_vdev_id(pmac->pdev,
|
||||
command->vdev_id);
|
||||
|
||||
if (opmode == QDF_STA_MODE || opmode == QDF_P2P_CLIENT_MODE) {
|
||||
/*
|
||||
* check if any other vdev NB disconnect or SB
|
||||
* disconnect (eSmeCommandWmStatusChange) is pending
|
||||
*/
|
||||
if ((CSR_IS_DISCONNECT_COMMAND(command) ||
|
||||
command->command == eSmeCommandWmStatusChange) &&
|
||||
command->vdev_id != vdev_id) {
|
||||
sme_debug("disconnect is pending on vdev:%d, cmd:%d",
|
||||
command->vdev_id, command->command);
|
||||
is_pending_cmd = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (opmode == QDF_SAP_MODE || opmode == QDF_P2P_GO_MODE) {
|
||||
/* Check if START/STOP AP OP is in progress */
|
||||
if ((command->command == eSmeCommandRoam &&
|
||||
(command->u.roamCmd.roamReason == eCsrStopBss ||
|
||||
command->u.roamCmd.roamReason == eCsrHddIssued))) {
|
||||
sme_debug("vdev ops pending on vdev_id:%d, cmd:%d, reason:%d",
|
||||
command->vdev_id, command->command,
|
||||
command->u.roamCmd.roamReason);
|
||||
is_pending_cmd = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
entry = next_entry;
|
||||
}
|
||||
|
||||
return disconnect_cmd_exist;
|
||||
return is_pending_cmd;
|
||||
}
|
||||
|
||||
#if defined(WLAN_SAE_SINGLE_PMK) && defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
||||
@ -8861,7 +8886,7 @@ static void csr_roam_join_rsp_processor(struct mac_context *mac,
|
||||
struct csr_roam_connectedinfo *prev_connect_info;
|
||||
struct wlan_crypto_pmksa *pmksa;
|
||||
uint32_t len = 0, roamId = 0, reason_code = 0;
|
||||
bool is_dis_pending, is_dis_pending_on_other_vdev;
|
||||
bool is_dis_pending, is_vdev_ops_pending_on_other_vdev;
|
||||
bool use_same_bss = false;
|
||||
uint8_t max_retry_count = 1;
|
||||
bool retry_same_bss = false;
|
||||
@ -8965,8 +8990,8 @@ static void csr_roam_join_rsp_processor(struct mac_context *mac,
|
||||
reason_code);
|
||||
|
||||
is_dis_pending = is_disconnect_pending(mac, session_ptr->sessionId);
|
||||
is_dis_pending_on_other_vdev =
|
||||
is_disconnect_pending_on_other_vdev(mac,
|
||||
is_vdev_ops_pending_on_other_vdev =
|
||||
is_any_other_vdev_connecting_disconnecting(mac,
|
||||
session_ptr->sessionId);
|
||||
is_time_allowed =
|
||||
csr_is_time_allowed_for_connect_attempt(pCommand,
|
||||
@ -8976,7 +9001,7 @@ static void csr_roam_join_rsp_processor(struct mac_context *mac,
|
||||
* if userspace has issued disconnection or we have reached mac tries or
|
||||
* max time, driver should not continue for next connection.
|
||||
*/
|
||||
if (is_dis_pending || is_dis_pending_on_other_vdev || !is_time_allowed ||
|
||||
if (is_dis_pending || is_vdev_ops_pending_on_other_vdev || !is_time_allowed ||
|
||||
session_ptr->join_bssid_count >= CSR_MAX_BSSID_COUNT)
|
||||
attempt_next_bss = false;
|
||||
|
||||
@ -9092,8 +9117,8 @@ static void csr_roam_join_rsp_processor(struct mac_context *mac,
|
||||
if (is_dis_pending)
|
||||
sme_err("disconnect is pending, complete roam");
|
||||
|
||||
if (is_dis_pending_on_other_vdev)
|
||||
sme_err("disconnect is pending on other vdev, complete roam");
|
||||
if (is_vdev_ops_pending_on_other_vdev)
|
||||
sme_err("vdev ops is pending on other vdev, complete roam");
|
||||
|
||||
if (!is_time_allowed)
|
||||
sme_err("time can exceed the active timeout for connection attempt");
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2011-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2023 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
|
||||
@ -1395,6 +1395,15 @@ QDF_STATUS csr_scan_for_ssid(struct mac_context *mac_ctx, uint32_t session_id,
|
||||
req->scan_req.chan_list.num_chan = num_chan;
|
||||
}
|
||||
|
||||
/* Add freq hint for scan for ssid */
|
||||
if (!num_chan && profile->freq_hint &&
|
||||
csr_roam_is_valid_channel(mac_ctx, profile->freq_hint)) {
|
||||
sme_debug("add freq hint %d", profile->freq_hint);
|
||||
req->scan_req.chan_list.chan[0].freq =
|
||||
profile->freq_hint;
|
||||
req->scan_req.chan_list.num_chan = 1;
|
||||
}
|
||||
|
||||
/* Extend it for multiple SSID */
|
||||
if (profile->SSIDs.numOfSSIDs) {
|
||||
if (profile->SSIDs.SSIDList[0].SSID.length > WLAN_SSID_MAX_LEN) {
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2011-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 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
|
||||
@ -984,15 +985,15 @@ bool is_disconnect_pending(struct mac_context *mac_ctx,
|
||||
uint8_t sessionid);
|
||||
|
||||
/**
|
||||
* is_disconnect_pending_on_other_vdev() - To check whether a disconnect req
|
||||
* is pending on any other vdev or not
|
||||
* is_any_other_vdev_connecting_disconnecting() - To check whether any other
|
||||
* vdev is in waiting for vdev operations (connect/disconnect or start/stop AP)
|
||||
* @mac_tx: mac context
|
||||
* @sessionid: session id
|
||||
*
|
||||
* Return true if disconnect is pending on any other vdev
|
||||
*/
|
||||
bool is_disconnect_pending_on_other_vdev(struct mac_context *mac_ctx,
|
||||
uint8_t sessionid);
|
||||
bool is_any_other_vdev_connecting_disconnecting(struct mac_context *mac_ctx,
|
||||
uint8_t sessionid);
|
||||
|
||||
QDF_STATUS
|
||||
csr_roam_prepare_bss_config_from_profile(struct mac_context *mac_ctx,
|
||||
|
Loading…
Reference in New Issue
Block a user