mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-14 00:24:41 -04:00
Merge ac4df9eb9d on remote branch
Change-Id: Icf1e42333f5807ba79af5082b1907b6f3deacb2f
This commit is contained in:
commit
dd3a8007e5
28 changed files with 1604 additions and 711 deletions
2
Kbuild
2
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
|
||||
|
|
|
|||
|
|
@ -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 @@ end:
|
|||
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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -7242,12 +7242,13 @@ static void hdd_close_pre_cac_adapter(struct hdd_context *hdd_ctx)
|
|||
SAP_PRE_CAC_IFNAME);
|
||||
if (!pre_cac_adapter)
|
||||
return;
|
||||
hdd_ctx->sap_pre_cac_work.fn = NULL;
|
||||
hdd_ctx->sap_pre_cac_work.arg = NULL;
|
||||
|
||||
errno = osif_vdev_sync_trans_start_wait(pre_cac_adapter->dev,
|
||||
&vdev_sync);
|
||||
if (errno)
|
||||
return;
|
||||
|
||||
osif_vdev_sync_unregister(pre_cac_adapter->dev);
|
||||
osif_vdev_sync_wait_for_ops(vdev_sync);
|
||||
|
||||
|
|
@ -7475,7 +7476,7 @@ QDF_STATUS hdd_stop_adapter(struct hdd_context *hdd_ctx,
|
|||
sap_ctx = WLAN_HDD_GET_SAP_CTX_PTR(adapter);
|
||||
if (!wlan_sap_is_pre_cac_context(sap_ctx) &&
|
||||
(hdd_ctx->sap_pre_cac_work.fn))
|
||||
cds_flush_work(&hdd_ctx->sap_pre_cac_work);
|
||||
qdf_flush_work(&hdd_ctx->sap_pre_cac_work);
|
||||
|
||||
hdd_close_pre_cac_adapter(hdd_ctx);
|
||||
|
||||
|
|
@ -7652,7 +7653,7 @@ QDF_STATUS hdd_stop_all_adapters(struct hdd_context *hdd_ctx)
|
|||
hdd_enter();
|
||||
|
||||
if (hdd_ctx->sap_pre_cac_work.fn)
|
||||
cds_flush_work(&hdd_ctx->sap_pre_cac_work);
|
||||
qdf_flush_work(&hdd_ctx->sap_pre_cac_work);
|
||||
|
||||
hdd_for_each_adapter_dev_held_safe(hdd_ctx, adapter, next_adapter,
|
||||
NET_DEV_HOLD_STOP_ALL_ADAPTERS) {
|
||||
|
|
@ -18156,6 +18157,7 @@ void hdd_clean_up_pre_cac_interface(struct hdd_context *hdd_ctx)
|
|||
uint8_t vdev_id;
|
||||
QDF_STATUS status;
|
||||
struct hdd_adapter *precac_adapter;
|
||||
struct sap_context *sap_ctx;
|
||||
|
||||
status = wlan_sap_get_pre_cac_vdev_id(hdd_ctx->mac_handle, &vdev_id);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
|
|
@ -18169,6 +18171,13 @@ void hdd_clean_up_pre_cac_interface(struct hdd_context *hdd_ctx)
|
|||
return;
|
||||
}
|
||||
|
||||
sap_ctx = WLAN_HDD_GET_SAP_CTX_PTR(precac_adapter);
|
||||
if (wlan_sap_is_pre_cac_context(sap_ctx) &&
|
||||
hdd_ctx->sap_pre_cac_work.fn) {
|
||||
hdd_debug("pre_cac_work already scheduled");
|
||||
return;
|
||||
}
|
||||
|
||||
qdf_create_work(0, &hdd_ctx->sap_pre_cac_work,
|
||||
wlan_hdd_sap_pre_cac_failure,
|
||||
(void *)precac_adapter);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
@ -957,8 +960,8 @@ int __wlan_hdd_del_virtual_intf(struct wiphy *wiphy, struct wireless_dev *wdev)
|
|||
|
||||
if (adapter->device_mode == QDF_SAP_MODE &&
|
||||
wlan_sap_is_pre_cac_active(hdd_ctx->mac_handle)) {
|
||||
hdd_clean_up_interface(hdd_ctx, adapter);
|
||||
hdd_clean_up_pre_cac_interface(hdd_ctx);
|
||||
hdd_clean_up_interface(hdd_ctx, adapter);
|
||||
} else if (wlan_hdd_is_session_type_monitor(
|
||||
adapter->device_mode) &&
|
||||
ucfg_pkt_capture_get_mode(hdd_ctx->psoc) !=
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -255,7 +256,7 @@ static int __wlan_hdd_request_pre_cac(struct hdd_context *hdd_ctx,
|
|||
if (pre_cac_adapter) {
|
||||
/* Flush existing pre_cac work */
|
||||
if (hdd_ctx->sap_pre_cac_work.fn)
|
||||
cds_flush_work(&hdd_ctx->sap_pre_cac_work);
|
||||
qdf_flush_work(&hdd_ctx->sap_pre_cac_work);
|
||||
} else {
|
||||
if (policy_mgr_get_connection_count(hdd_ctx->psoc) > 1) {
|
||||
hdd_err("pre cac not allowed in concurrency");
|
||||
|
|
|
|||
|
|
@ -32,9 +32,9 @@
|
|||
#define QWLAN_VERSION_MAJOR 2
|
||||
#define QWLAN_VERSION_MINOR 0
|
||||
#define QWLAN_VERSION_PATCH 8
|
||||
#define QWLAN_VERSION_EXTRA "L"
|
||||
#define QWLAN_VERSION_EXTRA "U"
|
||||
#define QWLAN_VERSION_BUILD 32
|
||||
|
||||
#define QWLAN_VERSIONSTR "2.0.8.32L"
|
||||
#define QWLAN_VERSIONSTR "2.0.8.32U"
|
||||
|
||||
#endif /* QWLAN_VERSION_H */
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -356,6 +356,11 @@ lim_post_join_set_link_state_callback(struct mac_context *mac, uint32_t vdev_id,
|
|||
tLimMlmJoinCnf mlm_join_cnf;
|
||||
struct pe_session *session_entry;
|
||||
|
||||
/*
|
||||
* Allow defered messages after peer create response
|
||||
*/
|
||||
SET_LIM_PROCESS_DEFD_MESGS(mac, true);
|
||||
|
||||
session_entry = pe_find_session_by_vdev_id(mac, vdev_id);
|
||||
if (!session_entry) {
|
||||
pe_err("vdev_id:%d PE session is NULL", vdev_id);
|
||||
|
|
@ -406,13 +411,22 @@ static void
|
|||
lim_process_mlm_post_join_suspend_link(struct mac_context *mac_ctx,
|
||||
struct pe_session *session)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
|
||||
lim_deactivate_and_change_timer(mac_ctx, eLIM_JOIN_FAIL_TIMER);
|
||||
|
||||
/* assign appropriate sessionId to the timer object */
|
||||
mac_ctx->lim.lim_timers.gLimJoinFailureTimer.sessionId =
|
||||
session->peSessionId;
|
||||
|
||||
wma_add_bss_peer_sta(session->vdev_id, session->bssId, true);
|
||||
/*
|
||||
* Defer msgs to LIM till peer create confirm event is received
|
||||
*/
|
||||
SET_LIM_PROCESS_DEFD_MESGS(mac_ctx, false);
|
||||
status = wma_add_bss_peer_sta(session->vdev_id, session->bssId, true);
|
||||
if (status == QDF_STATUS_E_RESOURCES)
|
||||
SET_LIM_PROCESS_DEFD_MESGS(mac_ctx, true);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -216,6 +216,30 @@ static void sch_get_csa_ecsa_count_offset(uint8_t *ie, uint32_t ie_len,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
populate_channel_switch_ann(struct mac_context *mac_ctx,
|
||||
tDot11fBeacon2 *bcn,
|
||||
struct pe_session *pe_session)
|
||||
{
|
||||
populate_dot11f_chan_switch_ann(mac_ctx, &bcn->ChanSwitchAnn,
|
||||
pe_session);
|
||||
pe_debug("csa: mode:%d chan:%d count:%d",
|
||||
bcn->ChanSwitchAnn.switchMode,
|
||||
bcn->ChanSwitchAnn.newChannel,
|
||||
bcn->ChanSwitchAnn.switchCount);
|
||||
|
||||
if (!pe_session->dfsIncludeChanWrapperIe)
|
||||
return;
|
||||
|
||||
populate_dot11f_chan_switch_wrapper(mac_ctx,
|
||||
&bcn->ChannelSwitchWrapper,
|
||||
pe_session);
|
||||
pe_debug("wrapper: width:%d f0:%d f1:%d",
|
||||
bcn->ChannelSwitchWrapper.WiderBWChanSwitchAnn.newChanWidth,
|
||||
bcn->ChannelSwitchWrapper.WiderBWChanSwitchAnn.newCenterChanFreq0,
|
||||
bcn->ChannelSwitchWrapper.WiderBWChanSwitchAnn.newCenterChanFreq1);
|
||||
}
|
||||
|
||||
/**
|
||||
* sch_set_fixed_beacon_fields() - sets the fixed params in beacon frame
|
||||
* @mac_ctx: mac global context
|
||||
|
|
@ -367,15 +391,12 @@ sch_set_fixed_beacon_fields(struct mac_context *mac_ctx, struct pe_session *sess
|
|||
ext_csa->new_reg_class,
|
||||
ext_csa->new_channel,
|
||||
ext_csa->switch_count);
|
||||
} else {
|
||||
populate_dot11f_chan_switch_ann(mac_ctx,
|
||||
&bcn_2->ChanSwitchAnn,
|
||||
session);
|
||||
pe_debug("csa: mode:%d chan:%d count:%d",
|
||||
bcn_2->ChanSwitchAnn.switchMode,
|
||||
bcn_2->ChanSwitchAnn.newChannel,
|
||||
bcn_2->ChanSwitchAnn.switchCount);
|
||||
}
|
||||
|
||||
if (session->lim_non_ecsa_cap_num &&
|
||||
WLAN_REG_IS_24GHZ_CH_FREQ(session->curr_op_freq) &&
|
||||
!is_6ghz_chsw)
|
||||
populate_channel_switch_ann(mac_ctx, bcn_2, session);
|
||||
}
|
||||
|
||||
populate_dot11_supp_operating_classes(mac_ctx,
|
||||
|
|
@ -390,55 +411,10 @@ sch_set_fixed_beacon_fields(struct mac_context *mac_ctx, struct pe_session *sess
|
|||
&bcn_2->PowerConstraints);
|
||||
populate_dot11f_tpc_report(mac_ctx, &bcn_2->TPCReport, session);
|
||||
/* Need to insert channel switch announcement here */
|
||||
if ((LIM_IS_AP_ROLE(session)
|
||||
|| LIM_IS_P2P_DEVICE_GO(session))
|
||||
&& session->dfsIncludeChanSwIe == true) {
|
||||
/*
|
||||
* Channel switch announcement only if radar is detected
|
||||
* and SAP has instructed to announce channel switch IEs
|
||||
* in beacon and probe responses
|
||||
*/
|
||||
if (!is_6ghz_chsw) {
|
||||
populate_dot11f_chan_switch_ann
|
||||
(mac_ctx, &bcn_2->ChanSwitchAnn,
|
||||
session);
|
||||
pe_debug("csa: mode:%d chan:%d count:%d",
|
||||
bcn_2->ChanSwitchAnn.switchMode,
|
||||
bcn_2->ChanSwitchAnn.newChannel,
|
||||
bcn_2->ChanSwitchAnn.switchCount);
|
||||
}
|
||||
/*
|
||||
* TODO: depending the CB mode, extended channel switch
|
||||
* announcement need to be called
|
||||
*/
|
||||
/*
|
||||
populate_dot11f_ext_chan_switch_ann(mac_ctx,
|
||||
&bcn_2->ExtChanSwitchAnn, session);
|
||||
*/
|
||||
/*
|
||||
* TODO: If in 11AC mode, wider bw channel switch
|
||||
* announcement needs to be called
|
||||
*/
|
||||
/*
|
||||
populate_dot11f_wider_bw_chan_switch_ann(mac_ctx,
|
||||
&bcn_2->WiderBWChanSwitchAnn, session);
|
||||
*/
|
||||
/*
|
||||
* Populate the Channel Switch Wrapper Element if
|
||||
* SAP operates in 40/80 Mhz Channel Width.
|
||||
*/
|
||||
if (true == session->dfsIncludeChanWrapperIe) {
|
||||
populate_dot11f_chan_switch_wrapper(mac_ctx,
|
||||
&bcn_2->ChannelSwitchWrapper, session);
|
||||
pe_debug("wrapper: width:%d f0:%d f1:%d",
|
||||
bcn_2->ChannelSwitchWrapper.
|
||||
WiderBWChanSwitchAnn.newChanWidth,
|
||||
bcn_2->ChannelSwitchWrapper.
|
||||
WiderBWChanSwitchAnn.newCenterChanFreq0,
|
||||
bcn_2->ChannelSwitchWrapper.
|
||||
WiderBWChanSwitchAnn.newCenterChanFreq1
|
||||
);
|
||||
}
|
||||
if ((LIM_IS_AP_ROLE(session) ||
|
||||
LIM_IS_P2P_DEVICE_GO(session)) &&
|
||||
session->dfsIncludeChanSwIe && !is_6ghz_chsw) {
|
||||
populate_channel_switch_ann(mac_ctx, bcn_2, session);
|
||||
}
|
||||
}
|
||||
if (mac_ctx->rrm.rrmConfig.sap_rrm_enabled)
|
||||
|
|
|
|||
|
|
@ -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,6 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2013-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
|
||||
|
|
@ -1924,6 +1924,7 @@ wma_create_sta_mode_bss_peer(tp_wma_handle wma,
|
|||
|
||||
if (!mac) {
|
||||
wma_err("vdev%d: Mac context is null", vdev_id);
|
||||
status = QDF_STATUS_E_RESOURCES;
|
||||
return status;
|
||||
}
|
||||
|
||||
|
|
@ -5339,6 +5340,7 @@ QDF_STATUS wma_add_bss_peer_sta(uint8_t vdev_id, uint8_t *bssid,
|
|||
wma = cds_get_context(QDF_MODULE_ID_WMA);
|
||||
if (!wma) {
|
||||
wma_err("Invalid wma");
|
||||
status = QDF_STATUS_E_RESOURCES;
|
||||
goto err;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue