mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-13 16:16:15 -04:00
Merge branch 'wlan-cmn.driver.lnx.2.0' of ../qca-wifi-host-cmn into HEAD
This commit is contained in:
commit
bf95f89d58
16 changed files with 20145 additions and 0 deletions
2781
components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h
Normal file
2781
components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h
Normal file
File diff suppressed because it is too large
Load diff
302
components/cmn_services/policy_mgr/inc/wlan_policy_mgr_cfg.h
Normal file
302
components/cmn_services/policy_mgr/inc/wlan_policy_mgr_cfg.h
Normal file
|
|
@ -0,0 +1,302 @@
|
|||
/*
|
||||
* Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef __CFG_POLICY_MGR
|
||||
#define __CFG_POLICY_MGR
|
||||
#include "qdf_types.h"
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* gWlanMccToSccSwitchMode - Control SAP channel.
|
||||
* @Min: 0
|
||||
* @Max: 5
|
||||
* @Default: 0
|
||||
*
|
||||
* This ini is used to override SAP channel.
|
||||
* If gWlanMccToSccSwitchMode = 0: disabled.
|
||||
* If gWlanMccToSccSwitchMode = 1: Enable switch.
|
||||
* If gWlainMccToSccSwitchMode = 2: Force switch with SAP restart.
|
||||
* If gWlainMccToSccSwitchMode = 3: Force switch without SAP restart.
|
||||
* If gWlainMccToSccSwitchMode = 4: Switch using
|
||||
* fav channel(s)without SAP restart.
|
||||
* If gWlainMccToSccSwitchMode = 5: Force switch without SAP restart.MCC allowed
|
||||
* in exceptional cases.
|
||||
* If gWlainMccToSccSwitchMode = 6: Force Switch without SAP restart only in
|
||||
user preffered band.
|
||||
* Related: None.
|
||||
*
|
||||
* Supported Feature: Concurrency
|
||||
*
|
||||
* Usage: Internal/External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_MCC_TO_SCC_SWITCH CFG_INI_UINT(\
|
||||
"gWlanMccToSccSwitchMode", \
|
||||
QDF_MCC_TO_SCC_SWITCH_DISABLE, \
|
||||
QDF_MCC_TO_SCC_SWITCH_MAX - 1, \
|
||||
QDF_MCC_TO_SCC_SWITCH_DISABLE, \
|
||||
CFG_VALUE_OR_DEFAULT, \
|
||||
"Provides MCC to SCC switch mode")
|
||||
/*
|
||||
* <ini>
|
||||
* gSystemPref - Configure wlan system preference for PCL.
|
||||
* @Min: 0
|
||||
* @Max: 2
|
||||
* @Default: 0
|
||||
*
|
||||
* This ini is used to configure wlan system preference option to help
|
||||
* policy manager decide on Preferred Channel List for a new connection.
|
||||
* For possible values refer to enum hdd_conc_priority_mode
|
||||
*
|
||||
* Related: None.
|
||||
*
|
||||
* Supported Feature: DBS
|
||||
*
|
||||
* Usage: Internal/External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_CONC_SYS_PREF CFG_INI_UINT(\
|
||||
"gSystemPref", 0, 2, 0, \
|
||||
CFG_VALUE_OR_DEFAULT, \
|
||||
"System preference to predict PCL")
|
||||
/*
|
||||
* <ini>
|
||||
* gMaxConcurrentActiveSessions - Maximum number of concurrent connections.
|
||||
* @Min: 1
|
||||
* @Max: 4
|
||||
* @Default: 3
|
||||
*
|
||||
* This ini is used to configure the maximum number of concurrent connections.
|
||||
*
|
||||
* Related: None.
|
||||
*
|
||||
* Supported Feature: Concurrency
|
||||
*
|
||||
* Usage: Internal/External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_MAX_CONC_CXNS CFG_INI_UINT(\
|
||||
"gMaxConcurrentActiveSessions", \
|
||||
1, 4, 3, \
|
||||
CFG_VALUE_OR_DEFAULT, \
|
||||
"Config max num allowed connections")
|
||||
/*
|
||||
* <ini>
|
||||
* channel_select_logic_conc - Set channel selection logic
|
||||
* for different concurrency combinations to DBS or inter band
|
||||
* MCC. Default is DBS for STA+STA and STA+P2P.
|
||||
* @Min: 0x00000000
|
||||
* @Max: 0xFFFFFFFF
|
||||
* @Default: 0x00000000
|
||||
*
|
||||
* 0 - inter-band MCC
|
||||
* 1 - DBS
|
||||
*
|
||||
* BIT 0: STA+STA
|
||||
* BIT 1: STA+P2P
|
||||
* BIT 2-31: Reserved
|
||||
*
|
||||
* Supported Feature: STA+STA, STA+P2P
|
||||
*
|
||||
* Usage: External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_CHNL_SELECT_LOGIC_CONC CFG_INI_UINT(\
|
||||
"channel_select_logic_conc",\
|
||||
0x00000000, \
|
||||
0xFFFFFFFF, \
|
||||
0x00000003, \
|
||||
CFG_VALUE_OR_DEFAULT, \
|
||||
"Set channel selection policy for various concurrency")
|
||||
/*
|
||||
* <ini>
|
||||
* dbs_selection_policy - Configure dbs selection policy.
|
||||
* @Min: 0
|
||||
* @Max: 3
|
||||
* @Default: 0
|
||||
*
|
||||
* set band preference or Vdev preference.
|
||||
* bit[0] = 0: 5G 2x2 preferred to select 2x2 5G + 1x1 2G DBS mode.
|
||||
* bit[0] = 1: 2G 2x2 preferred to select 2x2 2G + 1x1 5G DBS mode.
|
||||
* bit[1] = 1: vdev priority enabled. The INI "vdev_priority_list" will
|
||||
* specify the vdev priority.
|
||||
* bit[1] = 0: vdev priority disabled.
|
||||
* This INI only take effect for Genoa dual DBS hw.
|
||||
*
|
||||
* Supported Feature: DBS
|
||||
*
|
||||
* Usage: Internal/External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_DBS_SELECTION_PLCY CFG_INI_UINT(\
|
||||
"dbs_selection_policy", \
|
||||
0, 3, 0, \
|
||||
CFG_VALUE_OR_DEFAULT, \
|
||||
"Configure dbs selection policy")
|
||||
/*
|
||||
* <ini>
|
||||
* vdev_priority_list - Configure vdev priority list.
|
||||
* @Min: 0
|
||||
* @Max: 0x4444
|
||||
* @Default: 0x4321
|
||||
*
|
||||
* @vdev_priority_list: vdev priority list
|
||||
* bit[0-3]: pri_id (policy_mgr_pri_id) of highest priority
|
||||
* bit[4-7]: pri_id (policy_mgr_pri_id) of second priority
|
||||
* bit[8-11]: pri_id (policy_mgr_pri_id) of third priority
|
||||
* bit[12-15]: pri_id (policy_mgr_pri_id) of fourth priority
|
||||
* example: 0x4321 - CLI < GO < SAP < STA
|
||||
* vdev priority id mapping:
|
||||
* PM_STA_PRI_ID = 1,
|
||||
* PM_SAP_PRI_ID = 2,
|
||||
* PM_P2P_GO_PRI_ID = 3,
|
||||
* PM_P2P_CLI_PRI_ID = 4,
|
||||
* When the previous INI "dbs_selection_policy" bit[1]=1, which means
|
||||
* the vdev 2x2 prioritization enabled. Then this INI will be used to
|
||||
* specify the vdev type priority list. For example :
|
||||
* dbs_selection_policy=0x2
|
||||
* vdev_priority_list=0x4312
|
||||
* means: default preference 2x2 band is 5G, vdev 2x2 prioritization enabled.
|
||||
* And the priority list is CLI < GO < STA < SAP
|
||||
*
|
||||
* This INI only take effect for Genoa dual DBS hw.
|
||||
*
|
||||
* Supported Feature: DBS
|
||||
*
|
||||
* Usage: Internal/External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_VDEV_CUSTOM_PRIORITY_LIST CFG_INI_UINT(\
|
||||
"vdev_priority_list", \
|
||||
0, 0x4444, 0x4321, \
|
||||
CFG_VALUE_OR_DEFAULT, \
|
||||
"Configure vdev priority list")
|
||||
/*
|
||||
* <ini>
|
||||
* gEnableCustomConcRule1 - Enable custom concurrency rule1.
|
||||
* @Min: 0
|
||||
* @Max: 1
|
||||
* @Default: 0
|
||||
*
|
||||
* This ini is used to enable/disable custom concurrency rule1.
|
||||
* If SAP comes up first and STA comes up later then SAP needs to follow STA's
|
||||
* channel.
|
||||
*
|
||||
* Related: None.
|
||||
*
|
||||
* Supported Feature: Concurrency
|
||||
*
|
||||
* Usage: Internal/External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_ENABLE_CONC_RULE1 CFG_INI_UINT(\
|
||||
"gEnableCustomConcRule1", \
|
||||
0, 1, 0, \
|
||||
CFG_VALUE_OR_DEFAULT, \
|
||||
"Enable custom concurrency rule 1")
|
||||
/*
|
||||
* <ini>
|
||||
* gEnableCustomConcRule2 - Enable custom concurrency rule2.
|
||||
* @Min: 0
|
||||
* @Max: 1
|
||||
* @Default: 0
|
||||
*
|
||||
* This ini is used to enable/disable custom concurrency rule2.
|
||||
* If P2PGO comes up first and STA comes up later then P2PGO need to follow
|
||||
* STA's channel in 5Ghz. In following if condition we are just adding sanity
|
||||
* check to make sure that by this time P2PGO's channel is same as STA's
|
||||
* channel.
|
||||
*
|
||||
* Related: None.
|
||||
*
|
||||
* Supported Feature: Concurrency
|
||||
*
|
||||
* Usage: Internal/External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_ENABLE_CONC_RULE2 CFG_INI_UINT(\
|
||||
"gEnableCustomConcRule2", \
|
||||
0, 1, 0, \
|
||||
CFG_VALUE_OR_DEFAULT, \
|
||||
"Enable custom concurrency rule 2")
|
||||
/*
|
||||
* <ini>
|
||||
* gEnableMCCAdaptiveScheduler - MCC Adaptive Scheduler feature.
|
||||
* @Min: 0
|
||||
* @Max: 1
|
||||
* @Default: 1
|
||||
*
|
||||
* This ini is used to enable/disable MCC Adaptive Scheduler feature.
|
||||
*
|
||||
* Related: None.
|
||||
*
|
||||
* Supported Feature: Concurrency
|
||||
*
|
||||
* Usage: Internal/External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_ENABLE_MCC_ADATIVE_SCH_ENABLED_NAME CFG_INI_UINT(\
|
||||
"gEnableMCCAdaptiveScheduler", \
|
||||
0, 1, 1, \
|
||||
CFG_VALUE_OR_DEFAULT, \
|
||||
"Enable/Disable MCC Adaptive Scheduler")
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* gEnableStaConnectionIn5Ghz - To enable/disable STA connection in 5G
|
||||
* @Min: 0
|
||||
* @Max: 1
|
||||
* @Default: 1
|
||||
*
|
||||
* This ini is used to enable/disable STA connection in 5G band
|
||||
*
|
||||
* Related: STA
|
||||
*
|
||||
* Supported Feature: Concurrency
|
||||
*
|
||||
* Usage: Internal/External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_ENABLE_STA_CONNECTION_IN_5GHZ CFG_INI_UINT(\
|
||||
"gEnableStaConnectionIn5Ghz", \
|
||||
0, 1, 1, \
|
||||
CFG_VALUE_OR_DEFAULT, \
|
||||
"Enable/Disable STA connection in 5G")
|
||||
|
||||
#define CFG_POLICY_MGR_ALL \
|
||||
CFG(CFG_MCC_TO_SCC_SWITCH) \
|
||||
CFG(CFG_CONC_SYS_PREF) \
|
||||
CFG(CFG_MAX_CONC_CXNS) \
|
||||
CFG(CFG_DBS_SELECTION_PLCY) \
|
||||
CFG(CFG_VDEV_CUSTOM_PRIORITY_LIST) \
|
||||
CFG(CFG_CHNL_SELECT_LOGIC_CONC) \
|
||||
CFG(CFG_ENABLE_CONC_RULE1) \
|
||||
CFG(CFG_ENABLE_CONC_RULE2) \
|
||||
CFG(CFG_ENABLE_MCC_ADATIVE_SCH_ENABLED_NAME)\
|
||||
CFG(CFG_ENABLE_STA_CONNECTION_IN_5GHZ)
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load diff
181
components/cmn_services/policy_mgr/inc/wlan_policy_mgr_ucfg.h
Normal file
181
components/cmn_services/policy_mgr/inc/wlan_policy_mgr_ucfg.h
Normal file
|
|
@ -0,0 +1,181 @@
|
|||
/*
|
||||
* Copyright (c) 2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
#ifndef __WLAN_POLICY_MGR_UCFG
|
||||
#define __WLAN_POLICY_MGR_UCFG
|
||||
#include "wlan_objmgr_psoc_obj.h"
|
||||
#include "wlan_objmgr_global_obj.h"
|
||||
#include "qdf_status.h"
|
||||
|
||||
|
||||
/**
|
||||
* ucfg_policy_mgr_psoc_open() - This API sets CFGs to policy manager context
|
||||
*
|
||||
* This API pulls policy manager's context from PSOC and initialize the CFG
|
||||
* structure of policy manager.
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS up on success and any other status for failure.
|
||||
*/
|
||||
QDF_STATUS ucfg_policy_mgr_psoc_open(struct wlan_objmgr_psoc *psoc);
|
||||
/**
|
||||
* ucfg_policy_mgr_psoc_close() - This API resets CFGs for policy manager ctx
|
||||
*
|
||||
* This API pulls policy manager's context from PSOC and resets the CFG
|
||||
* structure of policy manager.
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS up on success and any other status for failure.
|
||||
*/
|
||||
void ucfg_policy_mgr_psoc_close(struct wlan_objmgr_psoc *psoc);
|
||||
#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
|
||||
/**
|
||||
* ucfg_policy_mgr_get_mcc_scc_switch() - To mcc to scc switch setting from INI
|
||||
* @psoc: pointer to psoc
|
||||
* @mcc_scc_switch: value to be filled
|
||||
*
|
||||
* This API pulls mcc to scc switch setting which is given as part of INI and
|
||||
* stored in policy manager's CFGs.
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS up on success and any other status for failure.
|
||||
*/
|
||||
QDF_STATUS ucfg_policy_mgr_get_mcc_scc_switch(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *mcc_scc_switch);
|
||||
#else
|
||||
static inline
|
||||
QDF_STATUS ucfg_policy_mgr_get_mcc_scc_switch(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *mcc_scc_switch)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#endif //FEATURE_WLAN_MCC_TO_SCC_SWITCH
|
||||
/**
|
||||
* ucfg_policy_mgr_get_sys_pref() - to get system preference
|
||||
* @psoc: pointer to psoc
|
||||
* @sys_pref: value to be filled
|
||||
*
|
||||
* This API pulls the system preference for policy manager to provide
|
||||
* PCL
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS up on success and any other status for failure.
|
||||
*/
|
||||
QDF_STATUS ucfg_policy_mgr_get_sys_pref(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *sys_pref);
|
||||
/**
|
||||
* ucfg_policy_mgr_set_sys_pref() - to set system preference
|
||||
* @psoc: pointer to psoc
|
||||
* @sys_pref: value to be applied as new INI setting
|
||||
*
|
||||
* This API is meant to override original INI setting for system pref
|
||||
* with new value which is used by policy manager to provide PCL
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS up on success and any other status for failure.
|
||||
*/
|
||||
QDF_STATUS ucfg_policy_mgr_set_sys_pref(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t sys_pref);
|
||||
/**
|
||||
* ucfg_policy_mgr_get_max_conc_cxns() - to get max num of conc connections
|
||||
* @psoc: pointer to psoc
|
||||
* @max_conc_cxns: value to be filled
|
||||
*
|
||||
* This API pulls max number of active connections which can be allowed
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS up on success and any other status for failure.
|
||||
*/
|
||||
QDF_STATUS ucfg_policy_mgr_get_max_conc_cxns(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *max_conc_cxns);
|
||||
/**
|
||||
* ucfg_policy_mgr_get_conc_rule1() - to find out if conc rule1 is enabled
|
||||
* @psoc: pointer to psoc
|
||||
* @conc_rule1: value to be filled
|
||||
*
|
||||
* This API is used to find out if conc rule-1 is enabled by user
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS up on success and any other status for failure.
|
||||
*/
|
||||
QDF_STATUS ucfg_policy_mgr_get_conc_rule1(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *conc_rule1);
|
||||
/**
|
||||
* ucfg_policy_mgr_get_conc_rule2() - to find out if conc rule2 is enabled
|
||||
* @psoc: pointer to psoc
|
||||
* @conc_rule2: value to be filled
|
||||
*
|
||||
* This API is used to find out if conc rule-2 is enabled by user
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS up on success and any other status for failure.
|
||||
*/
|
||||
QDF_STATUS ucfg_policy_mgr_get_conc_rule2(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *conc_rule2);
|
||||
/**
|
||||
* ucfg_policy_mgr_get_dbs_selection_plcy() - DBS HW mode selection setting
|
||||
* @psoc: pointer to psoc
|
||||
* @dbs_selection_plcy: value to be filled
|
||||
*
|
||||
* This API is used to find out DBS HW mode preference.
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS up on success and any other status for failure.
|
||||
*/
|
||||
QDF_STATUS ucfg_policy_mgr_get_dbs_selection_plcy(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t *dbs_selection_plcy);
|
||||
/**
|
||||
* ucfg_policy_mgr_get_vdev_priority_list() - to get vdev priority list
|
||||
* @psoc: pointer to psoc
|
||||
* @vdev_priority_list: value to be filled
|
||||
*
|
||||
* This API is used to find out vdev_priority_list setting
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS up on success and any other status for failure.
|
||||
*/
|
||||
QDF_STATUS ucfg_policy_mgr_get_vdev_priority_list(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t *vdev_priority_list);
|
||||
/**
|
||||
* policy_mgr_get_chnl_select_plcy() - to get channel selection policy
|
||||
* @psoc: pointer to psoc
|
||||
* @chnl_select_plcy: value to be filled
|
||||
*
|
||||
* This API is used to find out which channel selection policy has been
|
||||
* configured
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS up on success and any other status for failure.
|
||||
*/
|
||||
QDF_STATUS ucfg_policy_mgr_get_chnl_select_plcy(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t *chnl_select_plcy);
|
||||
/**
|
||||
* policy_mgr_get_mcc_adaptive_sch() - to get mcc adaptive scheduler
|
||||
* @psoc: pointer to psoc
|
||||
* @enable_mcc_adaptive_sch: value to be filled
|
||||
*
|
||||
* This API is used to find out if mcc adaptive scheduler enabled or disabled
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS up on success and any other status for failure.
|
||||
*/
|
||||
QDF_STATUS
|
||||
ucfg_policy_mgr_get_mcc_adaptive_sch(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *enable_mcc_adaptive_sch);
|
||||
|
||||
/**
|
||||
* ucfg_policy_mgr_get_sta_cxn_5g_band() - to get STA's connection in 5G config
|
||||
*
|
||||
* @psoc: pointer to psoc
|
||||
* @enable_sta_cxn_5g_band: value to be filled
|
||||
*
|
||||
* This API is used to find out if STA connection in 5G band is allowed or
|
||||
* disallowed.
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS up on success and any other status for failure.
|
||||
*/
|
||||
QDF_STATUS ucfg_policy_mgr_get_sta_cxn_5g_band(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *enable_sta_cxn_5g_band);
|
||||
#endif //__WLAN_POLICY_MGR_UCFG
|
||||
2183
components/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c
Normal file
2183
components/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c
Normal file
File diff suppressed because it is too large
Load diff
3135
components/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c
Normal file
3135
components/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
583
components/cmn_services/policy_mgr/src/wlan_policy_mgr_i.h
Normal file
583
components/cmn_services/policy_mgr/src/wlan_policy_mgr_i.h
Normal file
|
|
@ -0,0 +1,583 @@
|
|||
/*
|
||||
* Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef WLAN_POLICY_MGR_I_H
|
||||
#define WLAN_POLICY_MGR_I_H
|
||||
|
||||
#include "wlan_policy_mgr_api.h"
|
||||
#include "qdf_event.h"
|
||||
#include "qdf_mc_timer.h"
|
||||
#include "qdf_lock.h"
|
||||
#include "qdf_defer.h"
|
||||
#include "wlan_reg_services_api.h"
|
||||
|
||||
#define DBS_OPPORTUNISTIC_TIME 5
|
||||
#ifdef QCA_WIFI_3_0_EMU
|
||||
#define CONNECTION_UPDATE_TIMEOUT 3000
|
||||
#else
|
||||
#define CONNECTION_UPDATE_TIMEOUT 1000
|
||||
#endif
|
||||
|
||||
#define PM_24_GHZ_CHANNEL_6 (6)
|
||||
#define PM_5_GHZ_CHANNEL_36 (36)
|
||||
#define CHANNEL_SWITCH_COMPLETE_TIMEOUT (2000)
|
||||
|
||||
/**
|
||||
* Policy Mgr hardware mode list bit-mask definitions.
|
||||
* Bits 4:0, 31:29 are unused.
|
||||
*
|
||||
* The below definitions are added corresponding to WMI DBS HW mode
|
||||
* list to make it independent of firmware changes for WMI definitions.
|
||||
* Currently these definitions have dependency with BIT positions of
|
||||
* the existing WMI macros. Thus, if the BIT positions are changed for
|
||||
* WMI macros, then these macros' BIT definitions are also need to be
|
||||
* changed.
|
||||
*/
|
||||
#define POLICY_MGR_HW_MODE_MAC0_TX_STREAMS_BITPOS (28)
|
||||
#define POLICY_MGR_HW_MODE_MAC0_RX_STREAMS_BITPOS (24)
|
||||
#define POLICY_MGR_HW_MODE_MAC1_TX_STREAMS_BITPOS (20)
|
||||
#define POLICY_MGR_HW_MODE_MAC1_RX_STREAMS_BITPOS (16)
|
||||
#define POLICY_MGR_HW_MODE_MAC0_BANDWIDTH_BITPOS (12)
|
||||
#define POLICY_MGR_HW_MODE_MAC1_BANDWIDTH_BITPOS (8)
|
||||
#define POLICY_MGR_HW_MODE_DBS_MODE_BITPOS (7)
|
||||
#define POLICY_MGR_HW_MODE_AGILE_DFS_MODE_BITPOS (6)
|
||||
#define POLICY_MGR_HW_MODE_SBS_MODE_BITPOS (5)
|
||||
#define POLICY_MGR_HW_MODE_MAC0_BAND_BITPOS (3)
|
||||
#define POLICY_MGR_HW_MODE_ID_BITPOS (0)
|
||||
|
||||
#define POLICY_MGR_HW_MODE_MAC0_TX_STREAMS_MASK \
|
||||
(0xf << POLICY_MGR_HW_MODE_MAC0_TX_STREAMS_BITPOS)
|
||||
#define POLICY_MGR_HW_MODE_MAC0_RX_STREAMS_MASK \
|
||||
(0xf << POLICY_MGR_HW_MODE_MAC0_RX_STREAMS_BITPOS)
|
||||
#define POLICY_MGR_HW_MODE_MAC1_TX_STREAMS_MASK \
|
||||
(0xf << POLICY_MGR_HW_MODE_MAC1_TX_STREAMS_BITPOS)
|
||||
#define POLICY_MGR_HW_MODE_MAC1_RX_STREAMS_MASK \
|
||||
(0xf << POLICY_MGR_HW_MODE_MAC1_RX_STREAMS_BITPOS)
|
||||
#define POLICY_MGR_HW_MODE_MAC0_BANDWIDTH_MASK \
|
||||
(0xf << POLICY_MGR_HW_MODE_MAC0_BANDWIDTH_BITPOS)
|
||||
#define POLICY_MGR_HW_MODE_MAC1_BANDWIDTH_MASK \
|
||||
(0xf << POLICY_MGR_HW_MODE_MAC1_BANDWIDTH_BITPOS)
|
||||
#define POLICY_MGR_HW_MODE_DBS_MODE_MASK \
|
||||
(0x1 << POLICY_MGR_HW_MODE_DBS_MODE_BITPOS)
|
||||
#define POLICY_MGR_HW_MODE_AGILE_DFS_MODE_MASK \
|
||||
(0x1 << POLICY_MGR_HW_MODE_AGILE_DFS_MODE_BITPOS)
|
||||
#define POLICY_MGR_HW_MODE_SBS_MODE_MASK \
|
||||
(0x1 << POLICY_MGR_HW_MODE_SBS_MODE_BITPOS)
|
||||
#define POLICY_MGR_HW_MODE_MAC0_BAND_MASK \
|
||||
(0x3 << POLICY_MGR_HW_MODE_MAC0_BAND_BITPOS)
|
||||
#define POLICY_MGR_HW_MODE_ID_MASK \
|
||||
(0x7 << POLICY_MGR_HW_MODE_ID_BITPOS)
|
||||
|
||||
#define POLICY_MGR_HW_MODE_MAC0_TX_STREAMS_SET(hw_mode, value) \
|
||||
WMI_SET_BITS(hw_mode, POLICY_MGR_HW_MODE_MAC0_TX_STREAMS_BITPOS,\
|
||||
4, value)
|
||||
#define POLICY_MGR_HW_MODE_MAC0_RX_STREAMS_SET(hw_mode, value) \
|
||||
WMI_SET_BITS(hw_mode, POLICY_MGR_HW_MODE_MAC0_RX_STREAMS_BITPOS,\
|
||||
4, value)
|
||||
#define POLICY_MGR_HW_MODE_MAC1_TX_STREAMS_SET(hw_mode, value) \
|
||||
WMI_SET_BITS(hw_mode, POLICY_MGR_HW_MODE_MAC1_TX_STREAMS_BITPOS,\
|
||||
4, value)
|
||||
#define POLICY_MGR_HW_MODE_MAC1_RX_STREAMS_SET(hw_mode, value) \
|
||||
WMI_SET_BITS(hw_mode, POLICY_MGR_HW_MODE_MAC1_RX_STREAMS_BITPOS,\
|
||||
4, value)
|
||||
#define POLICY_MGR_HW_MODE_MAC0_BANDWIDTH_SET(hw_mode, value) \
|
||||
WMI_SET_BITS(hw_mode, POLICY_MGR_HW_MODE_MAC0_BANDWIDTH_BITPOS,\
|
||||
4, value)
|
||||
#define POLICY_MGR_HW_MODE_MAC1_BANDWIDTH_SET(hw_mode, value) \
|
||||
WMI_SET_BITS(hw_mode, POLICY_MGR_HW_MODE_MAC1_BANDWIDTH_BITPOS,\
|
||||
4, value)
|
||||
#define POLICY_MGR_HW_MODE_DBS_MODE_SET(hw_mode, value) \
|
||||
WMI_SET_BITS(hw_mode, POLICY_MGR_HW_MODE_DBS_MODE_BITPOS,\
|
||||
1, value)
|
||||
#define POLICY_MGR_HW_MODE_AGILE_DFS_SET(hw_mode, value) \
|
||||
WMI_SET_BITS(hw_mode, POLICY_MGR_HW_MODE_AGILE_DFS_MODE_BITPOS,\
|
||||
1, value)
|
||||
#define POLICY_MGR_HW_MODE_SBS_MODE_SET(hw_mode, value) \
|
||||
WMI_SET_BITS(hw_mode, POLICY_MGR_HW_MODE_SBS_MODE_BITPOS,\
|
||||
1, value)
|
||||
#define POLICY_MGR_HW_MODE_MAC0_BAND_SET(hw_mode, value) \
|
||||
WMI_SET_BITS(hw_mode, POLICY_MGR_HW_MODE_MAC0_BAND_BITPOS,\
|
||||
2, value)
|
||||
#define POLICY_MGR_HW_MODE_ID_SET(hw_mode, value) \
|
||||
WMI_SET_BITS(hw_mode, POLICY_MGR_HW_MODE_ID_BITPOS,\
|
||||
3, value)
|
||||
|
||||
#define POLICY_MGR_HW_MODE_MAC0_TX_STREAMS_GET(hw_mode) \
|
||||
(((hw_mode) & POLICY_MGR_HW_MODE_MAC0_TX_STREAMS_MASK) >> \
|
||||
POLICY_MGR_HW_MODE_MAC0_TX_STREAMS_BITPOS)
|
||||
#define POLICY_MGR_HW_MODE_MAC0_RX_STREAMS_GET(hw_mode) \
|
||||
(((hw_mode) & POLICY_MGR_HW_MODE_MAC0_RX_STREAMS_MASK) >> \
|
||||
POLICY_MGR_HW_MODE_MAC0_RX_STREAMS_BITPOS)
|
||||
#define POLICY_MGR_HW_MODE_MAC1_TX_STREAMS_GET(hw_mode) \
|
||||
(((hw_mode) & POLICY_MGR_HW_MODE_MAC1_TX_STREAMS_MASK) >> \
|
||||
POLICY_MGR_HW_MODE_MAC1_TX_STREAMS_BITPOS)
|
||||
#define POLICY_MGR_HW_MODE_MAC1_RX_STREAMS_GET(hw_mode) \
|
||||
(((hw_mode) & POLICY_MGR_HW_MODE_MAC1_RX_STREAMS_MASK) >> \
|
||||
POLICY_MGR_HW_MODE_MAC1_RX_STREAMS_BITPOS)
|
||||
#define POLICY_MGR_HW_MODE_MAC0_BANDWIDTH_GET(hw_mode) \
|
||||
(((hw_mode) & POLICY_MGR_HW_MODE_MAC0_BANDWIDTH_MASK) >> \
|
||||
POLICY_MGR_HW_MODE_MAC0_BANDWIDTH_BITPOS)
|
||||
#define POLICY_MGR_HW_MODE_MAC1_BANDWIDTH_GET(hw_mode) \
|
||||
(((hw_mode) & POLICY_MGR_HW_MODE_MAC1_BANDWIDTH_MASK) >> \
|
||||
POLICY_MGR_HW_MODE_MAC1_BANDWIDTH_BITPOS)
|
||||
#define POLICY_MGR_HW_MODE_DBS_MODE_GET(hw_mode) \
|
||||
(((hw_mode) & POLICY_MGR_HW_MODE_DBS_MODE_MASK) >> \
|
||||
POLICY_MGR_HW_MODE_DBS_MODE_BITPOS)
|
||||
#define POLICY_MGR_HW_MODE_AGILE_DFS_GET(hw_mode) \
|
||||
(((hw_mode) & POLICY_MGR_HW_MODE_AGILE_DFS_MODE_MASK) >> \
|
||||
POLICY_MGR_HW_MODE_AGILE_DFS_MODE_BITPOS)
|
||||
#define POLICY_MGR_HW_MODE_SBS_MODE_GET(hw_mode) \
|
||||
(((hw_mode) & POLICY_MGR_HW_MODE_SBS_MODE_MASK) >> \
|
||||
POLICY_MGR_HW_MODE_SBS_MODE_BITPOS)
|
||||
#define POLICY_MGR_HW_MODE_MAC0_BAND_GET(hw_mode) \
|
||||
(((hw_mode) & POLICY_MGR_HW_MODE_MAC0_BAND_MASK) >> \
|
||||
POLICY_MGR_HW_MODE_MAC0_BAND_BITPOS)
|
||||
#define POLICY_MGR_HW_MODE_ID_GET(hw_mode) \
|
||||
(((hw_mode) & POLICY_MGR_HW_MODE_ID_MASK) >> \
|
||||
POLICY_MGR_HW_MODE_ID_BITPOS)
|
||||
|
||||
#define POLICY_MGR_DEFAULT_HW_MODE_INDEX 0xFFFF
|
||||
|
||||
#define policy_mgr_alert(params...) \
|
||||
QDF_TRACE_FATAL(QDF_MODULE_ID_POLICY_MGR, params)
|
||||
#define policy_mgr_err(params...) \
|
||||
QDF_TRACE_ERROR(QDF_MODULE_ID_POLICY_MGR, params)
|
||||
#define policy_mgr_warn(params...) \
|
||||
QDF_TRACE_WARN(QDF_MODULE_ID_POLICY_MGR, params)
|
||||
#define policy_mgr_notice(params...) \
|
||||
QDF_TRACE_INFO(QDF_MODULE_ID_POLICY_MGR, params)
|
||||
#define policy_mgr_info(params...) \
|
||||
QDF_TRACE_INFO(QDF_MODULE_ID_POLICY_MGR, params)
|
||||
#define policy_mgr_debug(params...) \
|
||||
QDF_TRACE_DEBUG(QDF_MODULE_ID_POLICY_MGR, params)
|
||||
|
||||
#define policymgr_nofl_alert(params...) \
|
||||
QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_POLICY_MGR, params)
|
||||
#define policymgr_nofl_err(params...) \
|
||||
QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_POLICY_MGR, params)
|
||||
#define policymgr_nofl_warn(params...) \
|
||||
QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_POLICY_MGR, params)
|
||||
#define policymgr_nofl_info(params...) \
|
||||
QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_POLICY_MGR, params)
|
||||
#define policymgr_nofl_debug(params...) \
|
||||
QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_POLICY_MGR, params)
|
||||
|
||||
#define PM_CONC_CONNECTION_LIST_VALID_INDEX(index) \
|
||||
((MAX_NUMBER_OF_CONC_CONNECTIONS > index) && \
|
||||
(pm_conc_connection_list[index].in_use))
|
||||
|
||||
extern struct policy_mgr_conc_connection_info
|
||||
pm_conc_connection_list[MAX_NUMBER_OF_CONC_CONNECTIONS];
|
||||
|
||||
extern const enum policy_mgr_pcl_type
|
||||
first_connection_pcl_table[PM_MAX_NUM_OF_MODE]
|
||||
[PM_MAX_CONC_PRIORITY_MODE];
|
||||
extern pm_dbs_pcl_second_connection_table_type
|
||||
*second_connection_pcl_dbs_table;
|
||||
extern pm_dbs_pcl_third_connection_table_type
|
||||
*third_connection_pcl_dbs_table;
|
||||
extern policy_mgr_next_action_two_connection_table_type
|
||||
*next_action_two_connection_table;
|
||||
extern policy_mgr_next_action_three_connection_table_type
|
||||
*next_action_three_connection_table;
|
||||
extern policy_mgr_next_action_two_connection_table_type
|
||||
*next_action_two_connection_2x2_2g_1x1_5g_table;
|
||||
extern policy_mgr_next_action_three_connection_table_type
|
||||
*next_action_three_connection_2x2_2g_1x1_5g_table;
|
||||
|
||||
extern enum policy_mgr_conc_next_action
|
||||
(*policy_mgr_get_current_pref_hw_mode_ptr)
|
||||
(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
/**
|
||||
* struct sta_ap_intf_check_work_ctx - sta_ap_intf_check_work
|
||||
* related info
|
||||
* @psoc: pointer to PSOC object information
|
||||
*/
|
||||
struct sta_ap_intf_check_work_ctx {
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct policy_mgr_cfg - all the policy manager owned configs
|
||||
* @mcc_to_scc_switch: switch to indicate MCC to SCC config
|
||||
* @sys_pref: system's preference while selecting PCLs
|
||||
* @max_conc_cxns: Max allowed concurrenct active connections
|
||||
* @conc_rule1: concurrency rule1
|
||||
* @conc_rule2: concurrency rule2
|
||||
* @dbs_selection_plcy: DBS selection policy for concurrency
|
||||
* @vdev_priority_list: Priority list for various vdevs
|
||||
* @chnl_select_plcy: Channel selection policy
|
||||
* @enable_mcc_adaptive_sch: Enable/Disable MCC adaptive scheduler
|
||||
* @enable_sta_cxn_5g_band: Enable/Disable STA connection in 5G band
|
||||
*/
|
||||
struct policy_mgr_cfg {
|
||||
uint8_t mcc_to_scc_switch;
|
||||
uint8_t sys_pref;
|
||||
uint8_t max_conc_cxns;
|
||||
uint8_t conc_rule1;
|
||||
uint8_t conc_rule2;
|
||||
uint8_t enable_mcc_adaptive_sch;
|
||||
uint8_t enable_sta_cxn_5g_band;
|
||||
uint32_t dbs_selection_plcy;
|
||||
uint32_t vdev_priority_list;
|
||||
uint32_t chnl_select_plcy;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct policy_mgr_psoc_priv_obj - Policy manager private data
|
||||
* @psoc: pointer to PSOC object information
|
||||
* @pdev: pointer to PDEV object information
|
||||
* @connection_update_done_evt: qdf event to synchronize
|
||||
* connection activities
|
||||
* @qdf_conc_list_lock: To protect connection table
|
||||
* @dbs_opportunistic_timer: Timer to drop down to Single Mac
|
||||
* Mode opportunistically
|
||||
* @sap_restart_chan_switch_cb: Callback for channel switch
|
||||
* notification for SAP
|
||||
* @sme_cbacks: callbacks to be registered by SME for
|
||||
* interaction with Policy Manager
|
||||
* @wma_cbacks: callbacks to be registered by SME for
|
||||
* interaction with Policy Manager
|
||||
* @tdls_cbacks: callbacks to be registered by SME for
|
||||
* interaction with Policy Manager
|
||||
* @cdp_cbacks: callbacks to be registered by SME for
|
||||
* interaction with Policy Manager
|
||||
* @sap_mandatory_channels: The user preferred master list on
|
||||
* which SAP can be brought up. This
|
||||
* mandatory channel list would be as per
|
||||
* OEMs preference & conforming to the
|
||||
* regulatory/other considerations
|
||||
* @sap_mandatory_channels_len: Length of the SAP mandatory
|
||||
* channel list
|
||||
* @do_hw_mode_change: Flag to check if HW mode change is needed
|
||||
* after vdev is up. Especially used after
|
||||
* channel switch related vdev restart
|
||||
* @concurrency_mode: active concurrency combination
|
||||
* @no_of_open_sessions: Number of active vdevs
|
||||
* @no_of_active_sessions: Number of active connections
|
||||
* @sta_ap_intf_check_work: delayed sap restart work
|
||||
* @num_dbs_hw_modes: Number of different HW modes supported
|
||||
* @hw_mode: List of HW modes supported
|
||||
* @old_hw_mode_index: Old HW mode from hw_mode table
|
||||
* @new_hw_mode_index: New HW mode from hw_mode table
|
||||
* @dual_mac_cfg: DBS configuration currenctly used by FW for
|
||||
* scan & connections
|
||||
* @hw_mode_change_in_progress: This is to track if HW mode
|
||||
* change is in progress
|
||||
* @enable_mcc_adaptive_scheduler: Enable MCC adaptive scheduler
|
||||
* value from INI
|
||||
* @unsafe_channel_list: LTE coex channel avoidance list
|
||||
* @unsafe_channel_count: LTE coex channel avoidance list count
|
||||
* @sta_ap_intf_check_work_info: Info related to sta_ap_intf_check_work
|
||||
* @opportunistic_update_done_evt: qdf event to synchronize host
|
||||
* & FW HW mode
|
||||
*/
|
||||
struct policy_mgr_psoc_priv_obj {
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wlan_objmgr_pdev *pdev;
|
||||
qdf_event_t connection_update_done_evt;
|
||||
qdf_mutex_t qdf_conc_list_lock;
|
||||
qdf_mc_timer_t dbs_opportunistic_timer;
|
||||
struct policy_mgr_hdd_cbacks hdd_cbacks;
|
||||
struct policy_mgr_sme_cbacks sme_cbacks;
|
||||
struct policy_mgr_wma_cbacks wma_cbacks;
|
||||
struct policy_mgr_tdls_cbacks tdls_cbacks;
|
||||
struct policy_mgr_cdp_cbacks cdp_cbacks;
|
||||
struct policy_mgr_dp_cbacks dp_cbacks;
|
||||
bool enable_sap_mandatory_chan_list;
|
||||
uint8_t sap_mandatory_channels[QDF_MAX_NUM_CHAN];
|
||||
uint32_t sap_mandatory_channels_len;
|
||||
bool do_hw_mode_change;
|
||||
uint32_t concurrency_mode;
|
||||
uint8_t no_of_open_sessions[QDF_MAX_NO_OF_MODE];
|
||||
uint8_t no_of_active_sessions[QDF_MAX_NO_OF_MODE];
|
||||
qdf_work_t sta_ap_intf_check_work;
|
||||
uint32_t num_dbs_hw_modes;
|
||||
struct dbs_hw_mode_info hw_mode;
|
||||
uint32_t old_hw_mode_index;
|
||||
uint32_t new_hw_mode_index;
|
||||
struct dual_mac_config dual_mac_cfg;
|
||||
uint32_t hw_mode_change_in_progress;
|
||||
struct policy_mgr_user_cfg user_cfg;
|
||||
uint16_t unsafe_channel_list[QDF_MAX_NUM_CHAN];
|
||||
uint16_t unsafe_channel_count;
|
||||
struct sta_ap_intf_check_work_ctx *sta_ap_intf_check_work_info;
|
||||
uint8_t cur_conc_system_pref;
|
||||
uint8_t sta_sap_scc_on_dfs_chan_allowed;
|
||||
qdf_event_t opportunistic_update_done_evt;
|
||||
qdf_event_t channel_switch_complete_evt;
|
||||
send_mode_change_event_cb mode_change_cb;
|
||||
uint32_t user_config_sap_channel;
|
||||
struct policy_mgr_cfg cfg;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct policy_mgr_mac_ss_bw_info - hw_mode_list PHY/MAC params for each MAC
|
||||
* @mac_tx_stream: Max TX stream number supported on MAC
|
||||
* @mac_rx_stream: Max RX stream number supported on MAC
|
||||
* @mac_bw: Max bandwidth(wmi_channel_width enum type)
|
||||
* @mac_band_cap: supported Band bit map(WLAN_2G_CAPABILITY = 0x1,
|
||||
* WLAN_5G_CAPABILITY = 0x2)
|
||||
*/
|
||||
struct policy_mgr_mac_ss_bw_info {
|
||||
uint32_t mac_tx_stream;
|
||||
uint32_t mac_rx_stream;
|
||||
uint32_t mac_bw;
|
||||
uint32_t mac_band_cap;
|
||||
};
|
||||
|
||||
struct policy_mgr_psoc_priv_obj *policy_mgr_get_context(
|
||||
struct wlan_objmgr_psoc *psoc);
|
||||
QDF_STATUS policy_mgr_get_updated_scan_config(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t *scan_config,
|
||||
bool dbs_scan,
|
||||
bool dbs_plus_agile_scan,
|
||||
bool single_mac_scan_with_dfs);
|
||||
QDF_STATUS policy_mgr_get_updated_fw_mode_config(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t *fw_mode_config,
|
||||
bool dbs,
|
||||
bool agile_dfs);
|
||||
bool policy_mgr_is_dual_mac_disabled_in_ini(
|
||||
struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
/**
|
||||
* policy_mgr_get_mcc_to_scc_switch_mode() - MCC to SCC
|
||||
* switch mode value in the user config
|
||||
* @psoc: PSOC object information
|
||||
*
|
||||
* MCC to SCC switch mode value in user config
|
||||
*
|
||||
* Return: MCC to SCC switch mode value
|
||||
*/
|
||||
uint32_t policy_mgr_get_mcc_to_scc_switch_mode(
|
||||
struct wlan_objmgr_psoc *psoc);
|
||||
bool policy_mgr_get_dbs_config(struct wlan_objmgr_psoc *psoc);
|
||||
bool policy_mgr_get_agile_dfs_config(struct wlan_objmgr_psoc *psoc);
|
||||
bool policy_mgr_get_dbs_scan_config(struct wlan_objmgr_psoc *psoc);
|
||||
void policy_mgr_get_tx_rx_ss_from_config(enum hw_mode_ss_config mac_ss,
|
||||
uint32_t *tx_ss, uint32_t *rx_ss);
|
||||
int8_t policy_mgr_get_matching_hw_mode_index(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t mac0_tx_ss, uint32_t mac0_rx_ss,
|
||||
enum hw_mode_bandwidth mac0_bw,
|
||||
uint32_t mac1_tx_ss, uint32_t mac1_rx_ss,
|
||||
enum hw_mode_bandwidth mac1_bw,
|
||||
enum hw_mode_mac_band_cap mac0_band_cap,
|
||||
enum hw_mode_dbs_capab dbs,
|
||||
enum hw_mode_agile_dfs_capab dfs,
|
||||
enum hw_mode_sbs_capab sbs);
|
||||
int8_t policy_mgr_get_hw_mode_idx_from_dbs_hw_list(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
enum hw_mode_ss_config mac0_ss,
|
||||
enum hw_mode_bandwidth mac0_bw,
|
||||
enum hw_mode_ss_config mac1_ss,
|
||||
enum hw_mode_bandwidth mac1_bw,
|
||||
enum hw_mode_mac_band_cap mac0_band_cap,
|
||||
enum hw_mode_dbs_capab dbs,
|
||||
enum hw_mode_agile_dfs_capab dfs,
|
||||
enum hw_mode_sbs_capab sbs);
|
||||
QDF_STATUS policy_mgr_get_old_and_new_hw_index(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t *old_hw_mode_index,
|
||||
uint32_t *new_hw_mode_index);
|
||||
void policy_mgr_update_conc_list(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t conn_index,
|
||||
enum policy_mgr_con_mode mode,
|
||||
uint8_t chan,
|
||||
enum hw_mode_bandwidth bw,
|
||||
uint8_t mac,
|
||||
enum policy_mgr_chain_mode chain_mask,
|
||||
uint32_t original_nss,
|
||||
uint32_t vdev_id,
|
||||
bool in_use,
|
||||
bool update_conn);
|
||||
void policy_mgr_store_and_del_conn_info(struct wlan_objmgr_psoc *psoc,
|
||||
enum policy_mgr_con_mode mode,
|
||||
bool all_matching_cxn_to_del,
|
||||
struct policy_mgr_conc_connection_info *info,
|
||||
uint8_t *num_cxn_del);
|
||||
|
||||
/**
|
||||
* policy_mgr_store_and_del_conn_info_by_vdev_id() - Store and del a
|
||||
* connection info by vdev id
|
||||
* @psoc: PSOC object information
|
||||
* @vdev_id: vdev id whose entry has to be deleted
|
||||
* @info: struture array pointer where the connection info will be saved
|
||||
* @num_cxn_del: number of connection which are going to be deleted
|
||||
*
|
||||
* Saves the connection info corresponding to the provided mode
|
||||
* and deleted that corresponding entry based on vdev from the
|
||||
* connection info structure
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void policy_mgr_store_and_del_conn_info_by_vdev_id(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t vdev_id,
|
||||
struct policy_mgr_conc_connection_info *info,
|
||||
uint8_t *num_cxn_del);
|
||||
|
||||
void policy_mgr_restore_deleted_conn_info(struct wlan_objmgr_psoc *psoc,
|
||||
struct policy_mgr_conc_connection_info *info,
|
||||
uint8_t num_cxn_del);
|
||||
void policy_mgr_update_hw_mode_conn_info(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t num_vdev_mac_entries,
|
||||
struct policy_mgr_vdev_mac_map *vdev_mac_map,
|
||||
struct policy_mgr_hw_mode_params hw_mode);
|
||||
void policy_mgr_pdev_set_hw_mode_cb(uint32_t status,
|
||||
uint32_t cfgd_hw_mode_index,
|
||||
uint32_t num_vdev_mac_entries,
|
||||
struct policy_mgr_vdev_mac_map *vdev_mac_map,
|
||||
uint8_t next_action,
|
||||
enum policy_mgr_conn_update_reason reason,
|
||||
uint32_t session_id, void *context);
|
||||
void policy_mgr_dump_current_concurrency(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
/**
|
||||
* policy_mgr_pdev_set_pcl() - SET PCL channel list and send to firmware
|
||||
* @psoc: PSOC object information
|
||||
* @mode: Adapter mode
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void policy_mgr_pdev_set_pcl(struct wlan_objmgr_psoc *psoc,
|
||||
enum QDF_OPMODE mode);
|
||||
void pm_dbs_opportunistic_timer_handler(void *data);
|
||||
enum policy_mgr_con_mode policy_mgr_get_mode(uint8_t type,
|
||||
uint8_t subtype);
|
||||
enum hw_mode_bandwidth policy_mgr_get_bw(enum phy_ch_width chan_width);
|
||||
QDF_STATUS policy_mgr_get_channel_list(struct wlan_objmgr_psoc *psoc,
|
||||
enum policy_mgr_pcl_type pcl,
|
||||
uint8_t *pcl_channels, uint32_t *len,
|
||||
enum policy_mgr_con_mode mode,
|
||||
uint8_t *pcl_weights, uint32_t weight_len);
|
||||
bool policy_mgr_allow_new_home_channel(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t channel, uint32_t num_connections);
|
||||
bool policy_mgr_is_5g_channel_allowed(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t channel, uint32_t *list,
|
||||
enum policy_mgr_con_mode mode);
|
||||
QDF_STATUS policy_mgr_complete_action(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t new_nss, uint8_t next_action,
|
||||
enum policy_mgr_conn_update_reason reason,
|
||||
uint32_t session_id);
|
||||
enum policy_mgr_con_mode policy_mgr_get_mode_by_vdev_id(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id);
|
||||
QDF_STATUS policy_mgr_init_connection_update(
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx);
|
||||
enum policy_mgr_conc_next_action
|
||||
policy_mgr_get_current_pref_hw_mode_dbs_2x2(
|
||||
struct wlan_objmgr_psoc *psoc);
|
||||
enum policy_mgr_conc_next_action
|
||||
policy_mgr_get_current_pref_hw_mode_dbs_1x1(
|
||||
struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
/**
|
||||
* policy_mgr_get_current_pref_hw_mode_dual_dbs() - Get the
|
||||
* current preferred hw mode
|
||||
*
|
||||
* Get the preferred hw mode based on the current connection combinations
|
||||
*
|
||||
* Return: No change (PM_NOP), (PM_SINGLE_MAC_UPGRADE),
|
||||
* DBS (PM_DBS1_DOWNGRADE or PM_DBS2_DOWNGRADE)
|
||||
*/
|
||||
enum policy_mgr_conc_next_action
|
||||
policy_mgr_get_current_pref_hw_mode_dual_dbs(
|
||||
struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
QDF_STATUS policy_mgr_reset_sap_mandatory_channels(
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx);
|
||||
|
||||
/**
|
||||
* policy_mgr_get_mode_specific_conn_info() - Get active mode specific
|
||||
* channel and vdev id
|
||||
* @psoc: PSOC object information
|
||||
* @channel: Mode specific channel (list)
|
||||
* @vdev_id: Mode specific vdev id (list)
|
||||
* @mode: Connection Mode
|
||||
*
|
||||
* Get active mode specific channel and vdev id
|
||||
*
|
||||
* Return: number of connection found as per given mode
|
||||
*/
|
||||
uint32_t policy_mgr_get_mode_specific_conn_info(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *channel, uint8_t *vdev_id,
|
||||
enum policy_mgr_con_mode mode);
|
||||
|
||||
/**
|
||||
* policy_mgr_reg_chan_change_callback() - Callback to be
|
||||
* invoked by regulatory module when valid channel list changes
|
||||
* @psoc: PSOC object information
|
||||
* @pdev: PDEV object information
|
||||
* @chan_list: New channel list
|
||||
* @avoid_freq_ind: LTE coex avoid channel list
|
||||
* @arg: Information passed at registration
|
||||
*
|
||||
* Get updated channel list from regulatory module
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void policy_mgr_reg_chan_change_callback(struct wlan_objmgr_psoc *psoc,
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
struct regulatory_channel *chan_list,
|
||||
struct avoid_freq_ind_data *avoid_freq_ind,
|
||||
void *arg);
|
||||
|
||||
/**
|
||||
* policy_mgr_nss_update() - update nss for AP vdev
|
||||
* @psoc: PSOC object information
|
||||
* @new_nss: new NSS value
|
||||
* @next_action: Next action after nss update
|
||||
* @band: update AP vdev on the Band.
|
||||
* @reason: action reason
|
||||
* @original_vdev_id: original request hwmode change vdev id
|
||||
*
|
||||
* The function will update AP vdevs on specific band.
|
||||
* eg. band = POLICY_MGR_ANY will request to update all band (2g and 5g)
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS, update requested successfully.
|
||||
*/
|
||||
QDF_STATUS policy_mgr_nss_update(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t new_nss, uint8_t next_action,
|
||||
enum policy_mgr_band band,
|
||||
enum policy_mgr_conn_update_reason reason,
|
||||
uint32_t original_vdev_id);
|
||||
|
||||
/**
|
||||
* policy_mgr_is_concurrency_allowed() - Check for allowed
|
||||
* concurrency combination
|
||||
* @psoc: PSOC object information
|
||||
* @mode: new connection mode
|
||||
* @channel: channel on which new connection is coming up
|
||||
* @bw: Bandwidth requested by the connection (optional)
|
||||
*
|
||||
* When a new connection is about to come up check if current
|
||||
* concurrency combination including the new connection is
|
||||
* allowed or not based on the HW capability, but no need to
|
||||
* invoke get_pcl
|
||||
*
|
||||
* Return: True/False
|
||||
*/
|
||||
bool policy_mgr_is_concurrency_allowed(struct wlan_objmgr_psoc *psoc,
|
||||
enum policy_mgr_con_mode mode,
|
||||
uint8_t channel,
|
||||
enum hw_mode_bandwidth bw);
|
||||
#endif
|
||||
|
|
@ -0,0 +1,742 @@
|
|||
/*
|
||||
* Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: wlan_policy_mgr_init_deinit.c
|
||||
*
|
||||
* WLAN Concurrenct Connection Management APIs
|
||||
*
|
||||
*/
|
||||
|
||||
/* Include files */
|
||||
|
||||
#include "wlan_policy_mgr_api.h"
|
||||
#include "wlan_policy_mgr_tables_1x1_dbs_i.h"
|
||||
#include "wlan_policy_mgr_tables_2x2_dbs_i.h"
|
||||
#include "wlan_policy_mgr_tables_2x2_5g_1x1_2g.h"
|
||||
#include "wlan_policy_mgr_tables_2x2_2g_1x1_5g.h"
|
||||
#include "wlan_policy_mgr_i.h"
|
||||
#include "qdf_types.h"
|
||||
#include "qdf_trace.h"
|
||||
#include "wlan_objmgr_global_obj.h"
|
||||
|
||||
static QDF_STATUS policy_mgr_psoc_obj_create_cb(struct wlan_objmgr_psoc *psoc,
|
||||
void *data)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *policy_mgr_ctx;
|
||||
|
||||
policy_mgr_ctx = qdf_mem_malloc(
|
||||
sizeof(struct policy_mgr_psoc_priv_obj));
|
||||
if (!policy_mgr_ctx) {
|
||||
policy_mgr_err("memory allocation failed");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
policy_mgr_ctx->psoc = psoc;
|
||||
policy_mgr_ctx->old_hw_mode_index = POLICY_MGR_DEFAULT_HW_MODE_INDEX;
|
||||
policy_mgr_ctx->new_hw_mode_index = POLICY_MGR_DEFAULT_HW_MODE_INDEX;
|
||||
|
||||
wlan_objmgr_psoc_component_obj_attach(psoc,
|
||||
WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_ctx,
|
||||
QDF_STATUS_SUCCESS);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static QDF_STATUS policy_mgr_psoc_obj_destroy_cb(struct wlan_objmgr_psoc *psoc,
|
||||
void *data)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *policy_mgr_ctx;
|
||||
|
||||
policy_mgr_ctx = policy_mgr_get_context(psoc);
|
||||
wlan_objmgr_psoc_component_obj_detach(psoc,
|
||||
WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_ctx);
|
||||
qdf_mem_free(policy_mgr_ctx);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static void policy_mgr_psoc_obj_status_cb(struct wlan_objmgr_psoc *psoc,
|
||||
void *data, QDF_STATUS status)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static QDF_STATUS policy_mgr_pdev_obj_create_cb(struct wlan_objmgr_pdev *pdev,
|
||||
void *data)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *policy_mgr_ctx;
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
policy_mgr_ctx = policy_mgr_get_context(psoc);
|
||||
if (!policy_mgr_ctx) {
|
||||
policy_mgr_err("invalid context");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
policy_mgr_ctx->pdev = pdev;
|
||||
|
||||
wlan_reg_register_chan_change_callback(psoc,
|
||||
policy_mgr_reg_chan_change_callback, NULL);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static QDF_STATUS policy_mgr_pdev_obj_destroy_cb(struct wlan_objmgr_pdev *pdev,
|
||||
void *data)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *policy_mgr_ctx;
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
policy_mgr_ctx = policy_mgr_get_context(psoc);
|
||||
if (!policy_mgr_ctx) {
|
||||
policy_mgr_err("invalid context");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
policy_mgr_ctx->pdev = NULL;
|
||||
wlan_reg_unregister_chan_change_callback(psoc,
|
||||
policy_mgr_reg_chan_change_callback);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static QDF_STATUS policy_mgr_vdev_obj_create_cb(struct wlan_objmgr_vdev *vdev,
|
||||
void *data)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static QDF_STATUS policy_mgr_vdev_obj_destroy_cb(struct wlan_objmgr_vdev *vdev,
|
||||
void *data)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static void policy_mgr_vdev_obj_status_cb(struct wlan_objmgr_vdev *vdev,
|
||||
void *data, QDF_STATUS status)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
QDF_STATUS policy_mgr_init(void)
|
||||
{
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
status = wlan_objmgr_register_psoc_create_handler(
|
||||
WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_psoc_obj_create_cb,
|
||||
NULL);
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
policy_mgr_err("Failed to register psoc obj create cback");
|
||||
goto err_psoc_create;
|
||||
}
|
||||
|
||||
status = wlan_objmgr_register_psoc_destroy_handler(
|
||||
WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_psoc_obj_destroy_cb,
|
||||
NULL);
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
policy_mgr_err("Failed to register psoc obj delete cback");
|
||||
goto err_psoc_delete;
|
||||
}
|
||||
|
||||
status = wlan_objmgr_register_psoc_status_handler(
|
||||
WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_psoc_obj_status_cb,
|
||||
NULL);
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
policy_mgr_err("Failed to register psoc obj status cback");
|
||||
goto err_psoc_status;
|
||||
}
|
||||
|
||||
status = wlan_objmgr_register_pdev_create_handler(
|
||||
WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_pdev_obj_create_cb,
|
||||
NULL);
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
policy_mgr_err("Failed to register pdev obj create cback");
|
||||
goto err_pdev_create;
|
||||
}
|
||||
|
||||
status = wlan_objmgr_register_pdev_destroy_handler(
|
||||
WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_pdev_obj_destroy_cb,
|
||||
NULL);
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
policy_mgr_err("Failed to register pdev obj delete cback");
|
||||
goto err_pdev_delete;
|
||||
}
|
||||
|
||||
status = wlan_objmgr_register_vdev_create_handler(
|
||||
WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_vdev_obj_create_cb,
|
||||
NULL);
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
policy_mgr_err("Failed to register vdev obj create cback");
|
||||
goto err_vdev_create;
|
||||
}
|
||||
|
||||
status = wlan_objmgr_register_vdev_destroy_handler(
|
||||
WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_vdev_obj_destroy_cb,
|
||||
NULL);
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
policy_mgr_err("Failed to register vdev obj delete cback");
|
||||
goto err_vdev_delete;
|
||||
}
|
||||
|
||||
status = wlan_objmgr_register_vdev_status_handler(
|
||||
WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_vdev_obj_status_cb,
|
||||
NULL);
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
policy_mgr_err("Failed to register vdev obj status cback");
|
||||
goto err_vdev_status;
|
||||
}
|
||||
|
||||
policy_mgr_notice("Callbacks registered with obj mgr");
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
err_vdev_status:
|
||||
wlan_objmgr_unregister_vdev_destroy_handler(WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_vdev_obj_destroy_cb,
|
||||
NULL);
|
||||
err_vdev_delete:
|
||||
wlan_objmgr_unregister_vdev_create_handler(WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_vdev_obj_create_cb,
|
||||
NULL);
|
||||
err_vdev_create:
|
||||
wlan_objmgr_unregister_pdev_destroy_handler(WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_pdev_obj_destroy_cb,
|
||||
NULL);
|
||||
err_pdev_delete:
|
||||
wlan_objmgr_unregister_pdev_create_handler(WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_pdev_obj_create_cb,
|
||||
NULL);
|
||||
err_pdev_create:
|
||||
wlan_objmgr_unregister_psoc_status_handler(WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_psoc_obj_status_cb,
|
||||
NULL);
|
||||
err_psoc_status:
|
||||
wlan_objmgr_unregister_psoc_destroy_handler(WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_psoc_obj_destroy_cb,
|
||||
NULL);
|
||||
err_psoc_delete:
|
||||
wlan_objmgr_unregister_psoc_create_handler(WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_psoc_obj_create_cb,
|
||||
NULL);
|
||||
err_psoc_create:
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS policy_mgr_deinit(void)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
|
||||
status = wlan_objmgr_unregister_psoc_status_handler(
|
||||
WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_psoc_obj_status_cb,
|
||||
NULL);
|
||||
if (status != QDF_STATUS_SUCCESS)
|
||||
policy_mgr_err("Failed to deregister psoc obj status cback");
|
||||
|
||||
status = wlan_objmgr_unregister_psoc_destroy_handler(
|
||||
WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_psoc_obj_destroy_cb,
|
||||
NULL);
|
||||
if (status != QDF_STATUS_SUCCESS)
|
||||
policy_mgr_err("Failed to deregister psoc obj delete cback");
|
||||
|
||||
status = wlan_objmgr_unregister_psoc_create_handler(
|
||||
WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_psoc_obj_create_cb,
|
||||
NULL);
|
||||
if (status != QDF_STATUS_SUCCESS)
|
||||
policy_mgr_err("Failed to deregister psoc obj create cback");
|
||||
|
||||
status = wlan_objmgr_unregister_pdev_destroy_handler(
|
||||
WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_pdev_obj_destroy_cb,
|
||||
NULL);
|
||||
if (status != QDF_STATUS_SUCCESS)
|
||||
policy_mgr_err("Failed to deregister pdev obj delete cback");
|
||||
|
||||
status = wlan_objmgr_unregister_pdev_create_handler(
|
||||
WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_pdev_obj_create_cb,
|
||||
NULL);
|
||||
if (status != QDF_STATUS_SUCCESS)
|
||||
policy_mgr_err("Failed to deregister pdev obj create cback");
|
||||
|
||||
status = wlan_objmgr_unregister_vdev_status_handler(
|
||||
WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_vdev_obj_status_cb,
|
||||
NULL);
|
||||
if (status != QDF_STATUS_SUCCESS)
|
||||
policy_mgr_err("Failed to deregister vdev obj status cback");
|
||||
|
||||
status = wlan_objmgr_unregister_vdev_destroy_handler(
|
||||
WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_vdev_obj_destroy_cb,
|
||||
NULL);
|
||||
if (status != QDF_STATUS_SUCCESS)
|
||||
policy_mgr_err("Failed to deregister vdev obj delete cback");
|
||||
|
||||
status = wlan_objmgr_unregister_vdev_create_handler(
|
||||
WLAN_UMAC_COMP_POLICY_MGR,
|
||||
policy_mgr_vdev_obj_create_cb,
|
||||
NULL);
|
||||
if (status != QDF_STATUS_SUCCESS)
|
||||
policy_mgr_err("Failed to deregister vdev obj create cback");
|
||||
|
||||
policy_mgr_info("deregistered callbacks with obj mgr successfully");
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS policy_mgr_psoc_open(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid Context");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (!QDF_IS_STATUS_SUCCESS(qdf_mutex_create(
|
||||
&pm_ctx->qdf_conc_list_lock))) {
|
||||
policy_mgr_err("Failed to init qdf_conc_list_lock");
|
||||
QDF_ASSERT(0);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS policy_mgr_psoc_close(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid Context");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (!QDF_IS_STATUS_SUCCESS(qdf_mutex_destroy(
|
||||
&pm_ctx->qdf_conc_list_lock))) {
|
||||
policy_mgr_err("Failed to destroy qdf_conc_list_lock");
|
||||
QDF_ASSERT(0);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (pm_ctx->hw_mode.hw_mode_list) {
|
||||
qdf_mem_free(pm_ctx->hw_mode.hw_mode_list);
|
||||
pm_ctx->hw_mode.hw_mode_list = NULL;
|
||||
policy_mgr_info("HW list is freed");
|
||||
}
|
||||
|
||||
if (pm_ctx->sta_ap_intf_check_work_info) {
|
||||
qdf_cancel_work(&pm_ctx->sta_ap_intf_check_work);
|
||||
qdf_mem_free(pm_ctx->sta_ap_intf_check_work_info);
|
||||
pm_ctx->sta_ap_intf_check_work_info = NULL;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS policy_mgr_psoc_enable(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid Context");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
policy_mgr_debug("Initializing the policy manager");
|
||||
|
||||
/* init pm_conc_connection_list */
|
||||
qdf_mem_zero(pm_conc_connection_list, sizeof(pm_conc_connection_list));
|
||||
|
||||
/* init dbs_opportunistic_timer */
|
||||
status = qdf_mc_timer_init(&pm_ctx->dbs_opportunistic_timer,
|
||||
QDF_TIMER_TYPE_SW,
|
||||
pm_dbs_opportunistic_timer_handler,
|
||||
(void *)psoc);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
policy_mgr_err("Failed to init DBS opportunistic timer");
|
||||
return status;
|
||||
}
|
||||
|
||||
/* init connection_update_done_evt */
|
||||
status = policy_mgr_init_connection_update(pm_ctx);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
policy_mgr_err("connection_update_done_evt init failed");
|
||||
return status;
|
||||
}
|
||||
|
||||
status = qdf_event_create(&pm_ctx->opportunistic_update_done_evt);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
policy_mgr_err("opportunistic_update_done_evt init failed");
|
||||
return status;
|
||||
}
|
||||
|
||||
status = qdf_event_create(&pm_ctx->channel_switch_complete_evt);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
policy_mgr_err("channel_switch_complete_evt init failed");
|
||||
return status;
|
||||
}
|
||||
pm_ctx->do_hw_mode_change = false;
|
||||
pm_ctx->hw_mode_change_in_progress = POLICY_MGR_HW_MODE_NOT_IN_PROGRESS;
|
||||
/* reset sap mandatory channels */
|
||||
status = policy_mgr_reset_sap_mandatory_channels(pm_ctx);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
policy_mgr_err("failed to reset mandatory channels");
|
||||
return status;
|
||||
}
|
||||
|
||||
/* init PCL table & function pointers based on HW capability */
|
||||
if (policy_mgr_is_hw_dbs_2x2_capable(psoc))
|
||||
policy_mgr_get_current_pref_hw_mode_ptr =
|
||||
policy_mgr_get_current_pref_hw_mode_dbs_2x2;
|
||||
else if (policy_mgr_is_2x2_1x1_dbs_capable(psoc))
|
||||
policy_mgr_get_current_pref_hw_mode_ptr =
|
||||
policy_mgr_get_current_pref_hw_mode_dual_dbs;
|
||||
else
|
||||
policy_mgr_get_current_pref_hw_mode_ptr =
|
||||
policy_mgr_get_current_pref_hw_mode_dbs_1x1;
|
||||
|
||||
if (policy_mgr_is_hw_dbs_2x2_capable(psoc) ||
|
||||
policy_mgr_is_2x2_1x1_dbs_capable(psoc))
|
||||
second_connection_pcl_dbs_table =
|
||||
&pm_second_connection_pcl_dbs_2x2_table;
|
||||
else
|
||||
second_connection_pcl_dbs_table =
|
||||
&pm_second_connection_pcl_dbs_1x1_table;
|
||||
|
||||
if (policy_mgr_is_hw_dbs_2x2_capable(psoc) ||
|
||||
policy_mgr_is_2x2_1x1_dbs_capable(psoc))
|
||||
third_connection_pcl_dbs_table =
|
||||
&pm_third_connection_pcl_dbs_2x2_table;
|
||||
else
|
||||
third_connection_pcl_dbs_table =
|
||||
&pm_third_connection_pcl_dbs_1x1_table;
|
||||
|
||||
if (policy_mgr_is_hw_dbs_2x2_capable(psoc)) {
|
||||
next_action_two_connection_table =
|
||||
&pm_next_action_two_connection_dbs_2x2_table;
|
||||
} else if (policy_mgr_is_2x2_1x1_dbs_capable(psoc)) {
|
||||
next_action_two_connection_table =
|
||||
&pm_next_action_two_connection_dbs_2x2_5g_1x1_2g_table;
|
||||
next_action_two_connection_2x2_2g_1x1_5g_table =
|
||||
&pm_next_action_two_connection_dbs_2x2_2g_1x1_5g_table;
|
||||
} else {
|
||||
next_action_two_connection_table =
|
||||
&pm_next_action_two_connection_dbs_1x1_table;
|
||||
}
|
||||
|
||||
if (policy_mgr_is_hw_dbs_2x2_capable(psoc)) {
|
||||
next_action_three_connection_table =
|
||||
&pm_next_action_three_connection_dbs_2x2_table;
|
||||
} else if (policy_mgr_is_2x2_1x1_dbs_capable(psoc)) {
|
||||
next_action_three_connection_table =
|
||||
&pm_next_action_three_connection_dbs_2x2_5g_1x1_2g_table;
|
||||
next_action_three_connection_2x2_2g_1x1_5g_table =
|
||||
&pm_next_action_three_connection_dbs_2x2_2g_1x1_5g_table;
|
||||
} else {
|
||||
next_action_three_connection_table =
|
||||
&pm_next_action_three_connection_dbs_1x1_table;
|
||||
}
|
||||
policy_mgr_debug("is DBS Capable %d, is SBS Capable %d",
|
||||
policy_mgr_is_hw_dbs_capable(psoc),
|
||||
policy_mgr_is_hw_sbs_capable(psoc));
|
||||
policy_mgr_debug("is2x2 %d, is2x2+1x1 %d, is2x2_5g+1x1_2g %d, is2x2_2g+1x1_5g %d",
|
||||
policy_mgr_is_hw_dbs_2x2_capable(psoc),
|
||||
policy_mgr_is_2x2_1x1_dbs_capable(psoc),
|
||||
policy_mgr_is_2x2_5G_1x1_2G_dbs_capable(psoc),
|
||||
policy_mgr_is_2x2_2G_1x1_5G_dbs_capable(psoc));
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS policy_mgr_psoc_disable(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid Context");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
/* destroy connection_update_done_evt */
|
||||
if (!QDF_IS_STATUS_SUCCESS(qdf_event_destroy
|
||||
(&pm_ctx->connection_update_done_evt))) {
|
||||
policy_mgr_err("Failed to destroy connection_update_done_evt");
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
QDF_ASSERT(0);
|
||||
}
|
||||
|
||||
/* destroy opportunistic_update_done_evt */
|
||||
if (!QDF_IS_STATUS_SUCCESS(qdf_event_destroy
|
||||
(&pm_ctx->opportunistic_update_done_evt))) {
|
||||
policy_mgr_err("Failed to destroy opportunistic_update_done_evt");
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
QDF_ASSERT(0);
|
||||
}
|
||||
/* destroy channel_switch_complete_evt */
|
||||
if (!QDF_IS_STATUS_SUCCESS(qdf_event_destroy
|
||||
(&pm_ctx->channel_switch_complete_evt))) {
|
||||
policy_mgr_err("Failed to destroy channel_switch_complete evt");
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
QDF_ASSERT(0);
|
||||
}
|
||||
|
||||
/* deallocate dbs_opportunistic_timer */
|
||||
if (QDF_TIMER_STATE_RUNNING ==
|
||||
qdf_mc_timer_get_current_state(
|
||||
&pm_ctx->dbs_opportunistic_timer)) {
|
||||
qdf_mc_timer_stop(&pm_ctx->dbs_opportunistic_timer);
|
||||
}
|
||||
|
||||
if (!QDF_IS_STATUS_SUCCESS(qdf_mc_timer_destroy(
|
||||
&pm_ctx->dbs_opportunistic_timer))) {
|
||||
policy_mgr_err("Cannot deallocate dbs opportunistic timer");
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
QDF_ASSERT(0);
|
||||
}
|
||||
|
||||
/* reset sap mandatory channels */
|
||||
if (QDF_IS_STATUS_ERROR(
|
||||
policy_mgr_reset_sap_mandatory_channels(pm_ctx))) {
|
||||
policy_mgr_err("failed to reset sap mandatory channels");
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
QDF_ASSERT(0);
|
||||
}
|
||||
|
||||
/* deinit pm_conc_connection_list */
|
||||
qdf_mem_zero(pm_conc_connection_list, sizeof(pm_conc_connection_list));
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS policy_mgr_register_sme_cb(struct wlan_objmgr_psoc *psoc,
|
||||
struct policy_mgr_sme_cbacks *sme_cbacks)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid Context");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
pm_ctx->sme_cbacks.sme_get_nss_for_vdev =
|
||||
sme_cbacks->sme_get_nss_for_vdev;
|
||||
pm_ctx->sme_cbacks.sme_get_valid_channels =
|
||||
sme_cbacks->sme_get_valid_channels;
|
||||
pm_ctx->sme_cbacks.sme_nss_update_request =
|
||||
sme_cbacks->sme_nss_update_request;
|
||||
pm_ctx->sme_cbacks.sme_pdev_set_hw_mode =
|
||||
sme_cbacks->sme_pdev_set_hw_mode;
|
||||
pm_ctx->sme_cbacks.sme_pdev_set_pcl =
|
||||
sme_cbacks->sme_pdev_set_pcl;
|
||||
pm_ctx->sme_cbacks.sme_soc_set_dual_mac_config =
|
||||
sme_cbacks->sme_soc_set_dual_mac_config;
|
||||
pm_ctx->sme_cbacks.sme_change_mcc_beacon_interval =
|
||||
sme_cbacks->sme_change_mcc_beacon_interval;
|
||||
pm_ctx->sme_cbacks.sme_get_ap_channel_from_scan =
|
||||
sme_cbacks->sme_get_ap_channel_from_scan;
|
||||
pm_ctx->sme_cbacks.sme_scan_result_purge =
|
||||
sme_cbacks->sme_scan_result_purge;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* policy_mgr_register_hdd_cb() - register HDD callbacks
|
||||
* @psoc: PSOC object information
|
||||
* @hdd_cbacks: function pointers from HDD
|
||||
*
|
||||
* API, allows HDD to register callbacks to be invoked by policy
|
||||
* mgr
|
||||
*
|
||||
* Return: SUCCESS,
|
||||
* Failure (if registration fails)
|
||||
*/
|
||||
QDF_STATUS policy_mgr_register_hdd_cb(struct wlan_objmgr_psoc *psoc,
|
||||
struct policy_mgr_hdd_cbacks *hdd_cbacks)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid Context");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
pm_ctx->hdd_cbacks.sap_restart_chan_switch_cb =
|
||||
hdd_cbacks->sap_restart_chan_switch_cb;
|
||||
pm_ctx->hdd_cbacks.wlan_hdd_get_channel_for_sap_restart =
|
||||
hdd_cbacks->wlan_hdd_get_channel_for_sap_restart;
|
||||
pm_ctx->hdd_cbacks.get_mode_for_non_connected_vdev =
|
||||
hdd_cbacks->get_mode_for_non_connected_vdev;
|
||||
pm_ctx->hdd_cbacks.hdd_get_device_mode =
|
||||
hdd_cbacks->hdd_get_device_mode;
|
||||
pm_ctx->hdd_cbacks.hdd_wapi_security_sta_exist =
|
||||
hdd_cbacks->hdd_wapi_security_sta_exist;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS policy_mgr_deregister_hdd_cb(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid Context");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
pm_ctx->hdd_cbacks.sap_restart_chan_switch_cb = NULL;
|
||||
pm_ctx->hdd_cbacks.wlan_hdd_get_channel_for_sap_restart = NULL;
|
||||
pm_ctx->hdd_cbacks.get_mode_for_non_connected_vdev = NULL;
|
||||
pm_ctx->hdd_cbacks.hdd_get_device_mode = NULL;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS policy_mgr_register_wma_cb(struct wlan_objmgr_psoc *psoc,
|
||||
struct policy_mgr_wma_cbacks *wma_cbacks)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid Context");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
pm_ctx->wma_cbacks.wma_get_connection_info =
|
||||
wma_cbacks->wma_get_connection_info;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS policy_mgr_register_cdp_cb(struct wlan_objmgr_psoc *psoc,
|
||||
struct policy_mgr_cdp_cbacks *cdp_cbacks)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid Context");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
pm_ctx->cdp_cbacks.cdp_update_mac_id =
|
||||
cdp_cbacks->cdp_update_mac_id;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS policy_mgr_register_dp_cb(struct wlan_objmgr_psoc *psoc,
|
||||
struct policy_mgr_dp_cbacks *dp_cbacks)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid Context");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
pm_ctx->dp_cbacks.hdd_disable_rx_ol_in_concurrency =
|
||||
dp_cbacks->hdd_disable_rx_ol_in_concurrency;
|
||||
pm_ctx->dp_cbacks.hdd_set_rx_mode_rps_cb =
|
||||
dp_cbacks->hdd_set_rx_mode_rps_cb;
|
||||
pm_ctx->dp_cbacks.hdd_ipa_set_mcc_mode_cb =
|
||||
dp_cbacks->hdd_ipa_set_mcc_mode_cb;
|
||||
pm_ctx->dp_cbacks.hdd_v2_flow_pool_map =
|
||||
dp_cbacks->hdd_v2_flow_pool_map;
|
||||
pm_ctx->dp_cbacks.hdd_v2_flow_pool_unmap =
|
||||
dp_cbacks->hdd_v2_flow_pool_unmap;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS policy_mgr_register_tdls_cb(struct wlan_objmgr_psoc *psoc,
|
||||
struct policy_mgr_tdls_cbacks *tdls_cbacks)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid Context");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
pm_ctx->tdls_cbacks.tdls_notify_increment_session =
|
||||
tdls_cbacks->tdls_notify_increment_session;
|
||||
pm_ctx->tdls_cbacks.tdls_notify_decrement_session =
|
||||
tdls_cbacks->tdls_notify_decrement_session;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS policy_mgr_register_mode_change_cb(struct wlan_objmgr_psoc *psoc,
|
||||
send_mode_change_event_cb mode_change_cb)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid Context");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
pm_ctx->mode_change_cb = mode_change_cb;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS policy_mgr_deregister_mode_change_cb(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid Context");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
pm_ctx->mode_change_cb = NULL;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
1763
components/cmn_services/policy_mgr/src/wlan_policy_mgr_pcl.c
Normal file
1763
components/cmn_services/policy_mgr/src/wlan_policy_mgr_pcl.c
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,154 @@
|
|||
/*
|
||||
* Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef __WLAN_POLICY_MGR_TABLES_2X2_2G_1X1_5G_DBS_H
|
||||
#define __WLAN_POLICY_MGR_TABLES_2X2_2G_1X1_5G_DBS_H
|
||||
|
||||
#include "wlan_policy_mgr_api.h"
|
||||
|
||||
/**
|
||||
* next_action_two_connection_table - table which provides next
|
||||
* action while a new connection is coming up, with one
|
||||
* connection already in the system
|
||||
*/
|
||||
static policy_mgr_next_action_two_connection_table_type
|
||||
pm_next_action_two_connection_dbs_2x2_2g_1x1_5g_table = {
|
||||
[PM_STA_24_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_STA_24_2x2] = {PM_NOP, PM_DBS2},
|
||||
[PM_STA_5_1x1] = {PM_DBS2, PM_NOP},
|
||||
[PM_STA_5_2x2] = {PM_DBS2, PM_NOP},
|
||||
[PM_P2P_CLI_24_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_P2P_CLI_24_2x2] = {PM_NOP, PM_DBS2},
|
||||
[PM_P2P_CLI_5_1x1] = {PM_DBS2, PM_NOP},
|
||||
[PM_P2P_CLI_5_2x2] = {PM_DBS2, PM_NOP},
|
||||
[PM_P2P_GO_24_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_P2P_GO_24_2x2] = {PM_NOP, PM_DBS2},
|
||||
[PM_P2P_GO_5_1x1] = {PM_DBS2, PM_NOP},
|
||||
[PM_P2P_GO_5_2x2] = {PM_DBS2_DOWNGRADE, PM_NOP},
|
||||
[PM_SAP_24_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_SAP_24_2x2] = {PM_NOP, PM_DBS2},
|
||||
[PM_SAP_5_1x1] = {PM_DBS2, PM_NOP},
|
||||
[PM_SAP_5_2x2] = {PM_DBS2_DOWNGRADE, PM_NOP},
|
||||
[PM_IBSS_24_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_IBSS_24_2x2] = {PM_NOP, PM_DBS2},
|
||||
[PM_IBSS_5_1x1] = {PM_DBS2, PM_NOP},
|
||||
[PM_IBSS_5_2x2] = {PM_DBS2_DOWNGRADE, PM_NOP},
|
||||
};
|
||||
|
||||
/**
|
||||
* next_action_three_connection_table - table which provides next
|
||||
* action while a new connection is coming up, with two
|
||||
* connections already in the system
|
||||
*/
|
||||
static policy_mgr_next_action_three_connection_table_type
|
||||
pm_next_action_three_connection_dbs_2x2_2g_1x1_5g_table = {
|
||||
[PM_STA_SAP_SCC_24_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_STA_SAP_SCC_24_2x2] = {PM_NOP, PM_DBS2},
|
||||
[PM_STA_SAP_MCC_24_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_STA_SAP_MCC_24_2x2] = {PM_NOP, PM_DBS2},
|
||||
[PM_STA_SAP_SCC_5_1x1] = {PM_DBS2, PM_NOP},
|
||||
[PM_STA_SAP_SCC_5_2x2] = {PM_DBS2_DOWNGRADE, PM_NOP},
|
||||
[PM_STA_SAP_MCC_5_1x1] = {PM_DBS2, PM_NOP},
|
||||
[PM_STA_SAP_MCC_5_2x2] = {PM_DBS2_DOWNGRADE, PM_NOP},
|
||||
[PM_STA_SAP_MCC_24_5_1x1] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
[PM_STA_SAP_MCC_24_5_2x2] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
[PM_STA_SAP_DBS_1x1] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
[PM_STA_SAP_DBS_2x2] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
|
||||
[PM_STA_P2P_GO_SCC_24_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_STA_P2P_GO_SCC_24_2x2] = {PM_NOP, PM_DBS2},
|
||||
[PM_STA_P2P_GO_MCC_24_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_STA_P2P_GO_MCC_24_2x2] = {PM_NOP, PM_DBS2},
|
||||
[PM_STA_P2P_GO_SCC_5_1x1] = {PM_DBS2, PM_NOP},
|
||||
[PM_STA_P2P_GO_SCC_5_2x2] = {PM_DBS2_DOWNGRADE, PM_NOP},
|
||||
[PM_STA_P2P_GO_MCC_5_1x1] = {PM_DBS2, PM_NOP},
|
||||
[PM_STA_P2P_GO_MCC_5_2x2] = {PM_DBS2_DOWNGRADE, PM_NOP},
|
||||
[PM_STA_P2P_GO_MCC_24_5_1x1] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
[PM_STA_P2P_GO_MCC_24_5_2x2] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
[PM_STA_P2P_GO_DBS_1x1] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
[PM_STA_P2P_GO_DBS_2x2] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
|
||||
[PM_STA_P2P_CLI_SCC_24_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_STA_P2P_CLI_SCC_24_2x2] = {PM_NOP, PM_DBS2},
|
||||
[PM_STA_P2P_CLI_MCC_24_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_STA_P2P_CLI_MCC_24_2x2] = {PM_NOP, PM_DBS2},
|
||||
[PM_STA_P2P_CLI_SCC_5_1x1] = {PM_DBS2, PM_NOP},
|
||||
[PM_STA_P2P_CLI_SCC_5_2x2] = {PM_DBS2, PM_NOP},
|
||||
[PM_STA_P2P_CLI_MCC_5_1x1] = {PM_DBS2, PM_NOP},
|
||||
[PM_STA_P2P_CLI_MCC_5_2x2] = {PM_DBS2, PM_NOP},
|
||||
[PM_STA_P2P_CLI_MCC_24_5_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_STA_P2P_CLI_MCC_24_5_2x2] = {PM_NOP, PM_DBS2},
|
||||
[PM_STA_P2P_CLI_DBS_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_STA_P2P_CLI_DBS_2x2] = {PM_NOP, PM_DBS2},
|
||||
|
||||
[PM_P2P_GO_P2P_CLI_SCC_24_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_P2P_GO_P2P_CLI_SCC_24_2x2] = {PM_NOP, PM_DBS2},
|
||||
[PM_P2P_GO_P2P_CLI_MCC_24_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_P2P_GO_P2P_CLI_MCC_24_2x2] = {PM_NOP, PM_DBS2},
|
||||
[PM_P2P_GO_P2P_CLI_SCC_5_1x1] = {PM_DBS2, PM_NOP},
|
||||
[PM_P2P_GO_P2P_CLI_SCC_5_2x2] = {PM_DBS2_DOWNGRADE, PM_NOP},
|
||||
[PM_P2P_GO_P2P_CLI_MCC_5_1x1] = {PM_DBS2, PM_NOP},
|
||||
[PM_P2P_GO_P2P_CLI_MCC_5_2x2] = {PM_DBS2_DOWNGRADE, PM_NOP},
|
||||
[PM_P2P_GO_P2P_CLI_MCC_24_5_1x1] = {PM_DBS2_DOWNGRADE,
|
||||
PM_DBS2_DOWNGRADE},
|
||||
[PM_P2P_GO_P2P_CLI_MCC_24_5_2x2] = {PM_DBS2_DOWNGRADE,
|
||||
PM_DBS2_DOWNGRADE},
|
||||
[PM_P2P_GO_P2P_CLI_DBS_1x1] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
[PM_P2P_GO_P2P_CLI_DBS_2x2] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
|
||||
[PM_P2P_GO_SAP_SCC_24_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_P2P_GO_SAP_SCC_24_2x2] = {PM_NOP, PM_DBS2},
|
||||
[PM_P2P_GO_SAP_MCC_24_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_P2P_GO_SAP_MCC_24_2x2] = {PM_NOP, PM_DBS2},
|
||||
[PM_P2P_GO_SAP_SCC_5_1x1] = {PM_DBS2, PM_NOP},
|
||||
[PM_P2P_GO_SAP_SCC_5_2x2] = {PM_DBS2_DOWNGRADE, PM_NOP},
|
||||
[PM_P2P_GO_SAP_MCC_5_1x1] = {PM_DBS2, PM_NOP},
|
||||
[PM_P2P_GO_SAP_MCC_5_2x2] = {PM_DBS2_DOWNGRADE, PM_NOP},
|
||||
[PM_P2P_GO_SAP_MCC_24_5_1x1] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
[PM_P2P_GO_SAP_MCC_24_5_2x2] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
[PM_P2P_GO_SAP_DBS_1x1] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
[PM_P2P_GO_SAP_DBS_2x2] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
|
||||
[PM_P2P_CLI_SAP_SCC_24_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_P2P_CLI_SAP_SCC_24_2x2] = {PM_NOP, PM_DBS2},
|
||||
[PM_P2P_CLI_SAP_MCC_24_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_P2P_CLI_SAP_MCC_24_2x2] = {PM_NOP, PM_DBS2},
|
||||
[PM_P2P_CLI_SAP_SCC_5_1x1] = {PM_DBS2, PM_NOP},
|
||||
[PM_P2P_CLI_SAP_SCC_5_2x2] = {PM_DBS2_DOWNGRADE, PM_NOP},
|
||||
[PM_P2P_CLI_SAP_MCC_5_1x1] = {PM_DBS2, PM_NOP},
|
||||
[PM_P2P_CLI_SAP_MCC_5_2x2] = {PM_DBS2_DOWNGRADE, PM_NOP},
|
||||
[PM_P2P_CLI_SAP_MCC_24_5_1x1] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
[PM_P2P_CLI_SAP_MCC_24_5_2x2] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
[PM_P2P_CLI_SAP_DBS_1x1] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
[PM_P2P_CLI_SAP_DBS_2x2] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
|
||||
[PM_SAP_SAP_SCC_24_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_SAP_SAP_SCC_24_2x2] = {PM_NOP, PM_DBS2},
|
||||
[PM_SAP_SAP_MCC_24_1x1] = {PM_NOP, PM_DBS2},
|
||||
[PM_SAP_SAP_MCC_24_2x2] = {PM_NOP, PM_DBS2},
|
||||
[PM_SAP_SAP_SCC_5_1x1] = {PM_DBS2, PM_NOP},
|
||||
[PM_SAP_SAP_SCC_5_2x2] = {PM_DBS2_DOWNGRADE, PM_NOP},
|
||||
[PM_SAP_SAP_MCC_5_1x1] = {PM_DBS2, PM_NOP},
|
||||
[PM_SAP_SAP_MCC_5_2x2] = {PM_DBS2_DOWNGRADE, PM_NOP},
|
||||
[PM_SAP_SAP_MCC_24_5_1x1] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
[PM_SAP_SAP_MCC_24_5_2x2] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
[PM_SAP_SAP_DBS_1x1] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
[PM_SAP_SAP_DBS_2x2] = {PM_DBS2_DOWNGRADE, PM_DBS2_DOWNGRADE},
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,154 @@
|
|||
/*
|
||||
* Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef __WLAN_POLICY_MGR_TABLES_2X2_5G_1X1_2G_DBS_H
|
||||
#define __WLAN_POLICY_MGR_TABLES_2X2_5G_1X1_2G_DBS_H
|
||||
|
||||
#include "wlan_policy_mgr_api.h"
|
||||
|
||||
/**
|
||||
* next_action_two_connection_table - table which provides next
|
||||
* action while a new connection is coming up, with one
|
||||
* connection already in the system
|
||||
*/
|
||||
static policy_mgr_next_action_two_connection_table_type
|
||||
pm_next_action_two_connection_dbs_2x2_5g_1x1_2g_table = {
|
||||
[PM_STA_24_1x1] = {PM_NOP, PM_DBS1},
|
||||
[PM_STA_24_2x2] = {PM_NOP, PM_DBS1},
|
||||
[PM_STA_5_1x1] = {PM_DBS1, PM_NOP},
|
||||
[PM_STA_5_2x2] = {PM_DBS1, PM_NOP},
|
||||
[PM_P2P_CLI_24_1x1] = {PM_NOP, PM_DBS1},
|
||||
[PM_P2P_CLI_24_2x2] = {PM_NOP, PM_DBS1},
|
||||
[PM_P2P_CLI_5_1x1] = {PM_DBS1, PM_NOP},
|
||||
[PM_P2P_CLI_5_2x2] = {PM_DBS1, PM_NOP},
|
||||
[PM_P2P_GO_24_1x1] = {PM_NOP, PM_DBS1},
|
||||
[PM_P2P_GO_24_2x2] = {PM_NOP, PM_DBS1_DOWNGRADE},
|
||||
[PM_P2P_GO_5_1x1] = {PM_DBS1, PM_NOP},
|
||||
[PM_P2P_GO_5_2x2] = {PM_DBS1, PM_NOP},
|
||||
[PM_SAP_24_1x1] = {PM_NOP, PM_DBS1},
|
||||
[PM_SAP_24_2x2] = {PM_NOP, PM_DBS1_DOWNGRADE},
|
||||
[PM_SAP_5_1x1] = {PM_DBS1, PM_NOP},
|
||||
[PM_SAP_5_2x2] = {PM_DBS1, PM_NOP},
|
||||
[PM_IBSS_24_1x1] = {PM_NOP, PM_DBS1},
|
||||
[PM_IBSS_24_2x2] = {PM_NOP, PM_DBS1_DOWNGRADE},
|
||||
[PM_IBSS_5_1x1] = {PM_DBS1, PM_NOP},
|
||||
[PM_IBSS_5_2x2] = {PM_DBS1, PM_NOP},
|
||||
};
|
||||
|
||||
/**
|
||||
* next_action_three_connection_table - table which provides next
|
||||
* action while a new connection is coming up, with two
|
||||
* connections already in the system
|
||||
*/
|
||||
static policy_mgr_next_action_three_connection_table_type
|
||||
pm_next_action_three_connection_dbs_2x2_5g_1x1_2g_table = {
|
||||
[PM_STA_SAP_SCC_24_1x1] = {PM_NOP, PM_DBS1},
|
||||
[PM_STA_SAP_SCC_24_2x2] = {PM_NOP, PM_DBS1_DOWNGRADE},
|
||||
[PM_STA_SAP_MCC_24_1x1] = {PM_NOP, PM_DBS1},
|
||||
[PM_STA_SAP_MCC_24_2x2] = {PM_NOP, PM_DBS1_DOWNGRADE},
|
||||
[PM_STA_SAP_SCC_5_1x1] = {PM_DBS1, PM_NOP},
|
||||
[PM_STA_SAP_SCC_5_2x2] = {PM_DBS1, PM_NOP},
|
||||
[PM_STA_SAP_MCC_5_1x1] = {PM_DBS1, PM_NOP},
|
||||
[PM_STA_SAP_MCC_5_2x2] = {PM_DBS1, PM_NOP},
|
||||
[PM_STA_SAP_MCC_24_5_1x1] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
[PM_STA_SAP_MCC_24_5_2x2] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
[PM_STA_SAP_DBS_1x1] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
[PM_STA_SAP_DBS_2x2] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
|
||||
[PM_STA_P2P_GO_SCC_24_1x1] = {PM_NOP, PM_DBS1},
|
||||
[PM_STA_P2P_GO_SCC_24_2x2] = {PM_NOP, PM_DBS1_DOWNGRADE},
|
||||
[PM_STA_P2P_GO_MCC_24_1x1] = {PM_NOP, PM_DBS1},
|
||||
[PM_STA_P2P_GO_MCC_24_2x2] = {PM_NOP, PM_DBS1_DOWNGRADE},
|
||||
[PM_STA_P2P_GO_SCC_5_1x1] = {PM_DBS1, PM_NOP},
|
||||
[PM_STA_P2P_GO_SCC_5_2x2] = {PM_DBS1, PM_NOP},
|
||||
[PM_STA_P2P_GO_MCC_5_1x1] = {PM_DBS1, PM_NOP},
|
||||
[PM_STA_P2P_GO_MCC_5_2x2] = {PM_DBS1, PM_NOP},
|
||||
[PM_STA_P2P_GO_MCC_24_5_1x1] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
[PM_STA_P2P_GO_MCC_24_5_2x2] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
[PM_STA_P2P_GO_DBS_1x1] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
[PM_STA_P2P_GO_DBS_2x2] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
|
||||
[PM_STA_P2P_CLI_SCC_24_1x1] = {PM_NOP, PM_DBS1},
|
||||
[PM_STA_P2P_CLI_SCC_24_2x2] = {PM_NOP, PM_DBS1},
|
||||
[PM_STA_P2P_CLI_MCC_24_1x1] = {PM_NOP, PM_DBS1},
|
||||
[PM_STA_P2P_CLI_MCC_24_2x2] = {PM_NOP, PM_DBS1},
|
||||
[PM_STA_P2P_CLI_SCC_5_1x1] = {PM_DBS1, PM_NOP},
|
||||
[PM_STA_P2P_CLI_SCC_5_2x2] = {PM_DBS1, PM_NOP},
|
||||
[PM_STA_P2P_CLI_MCC_5_1x1] = {PM_DBS1, PM_NOP},
|
||||
[PM_STA_P2P_CLI_MCC_5_2x2] = {PM_DBS1, PM_NOP},
|
||||
[PM_STA_P2P_CLI_MCC_24_5_1x1] = {PM_DBS1, PM_DBS1},
|
||||
[PM_STA_P2P_CLI_MCC_24_5_2x2] = {PM_DBS1, PM_DBS1},
|
||||
[PM_STA_P2P_CLI_DBS_1x1] = {PM_DBS1, PM_DBS1},
|
||||
[PM_STA_P2P_CLI_DBS_2x2] = {PM_DBS1, PM_DBS1},
|
||||
|
||||
[PM_P2P_GO_P2P_CLI_SCC_24_1x1] = {PM_NOP, PM_DBS1},
|
||||
[PM_P2P_GO_P2P_CLI_SCC_24_2x2] = {PM_NOP, PM_DBS1_DOWNGRADE},
|
||||
[PM_P2P_GO_P2P_CLI_MCC_24_1x1] = {PM_NOP, PM_DBS1},
|
||||
[PM_P2P_GO_P2P_CLI_MCC_24_2x2] = {PM_NOP, PM_DBS1_DOWNGRADE},
|
||||
[PM_P2P_GO_P2P_CLI_SCC_5_1x1] = {PM_DBS1, PM_NOP},
|
||||
[PM_P2P_GO_P2P_CLI_SCC_5_2x2] = {PM_DBS1, PM_NOP},
|
||||
[PM_P2P_GO_P2P_CLI_MCC_5_1x1] = {PM_DBS1, PM_NOP},
|
||||
[PM_P2P_GO_P2P_CLI_MCC_5_2x2] = {PM_DBS1, PM_NOP},
|
||||
[PM_P2P_GO_P2P_CLI_MCC_24_5_1x1] = {PM_DBS1_DOWNGRADE,
|
||||
PM_DBS1_DOWNGRADE},
|
||||
[PM_P2P_GO_P2P_CLI_MCC_24_5_2x2] = {PM_DBS1_DOWNGRADE,
|
||||
PM_DBS1_DOWNGRADE},
|
||||
[PM_P2P_GO_P2P_CLI_DBS_1x1] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
[PM_P2P_GO_P2P_CLI_DBS_2x2] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
|
||||
[PM_P2P_GO_SAP_SCC_24_1x1] = {PM_NOP, PM_DBS1},
|
||||
[PM_P2P_GO_SAP_SCC_24_2x2] = {PM_NOP, PM_DBS1_DOWNGRADE},
|
||||
[PM_P2P_GO_SAP_MCC_24_1x1] = {PM_NOP, PM_DBS1},
|
||||
[PM_P2P_GO_SAP_MCC_24_2x2] = {PM_NOP, PM_DBS1_DOWNGRADE},
|
||||
[PM_P2P_GO_SAP_SCC_5_1x1] = {PM_DBS1, PM_NOP},
|
||||
[PM_P2P_GO_SAP_SCC_5_2x2] = {PM_DBS1, PM_NOP},
|
||||
[PM_P2P_GO_SAP_MCC_5_1x1] = {PM_DBS1, PM_NOP},
|
||||
[PM_P2P_GO_SAP_MCC_5_2x2] = {PM_DBS1, PM_NOP},
|
||||
[PM_P2P_GO_SAP_MCC_24_5_1x1] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
[PM_P2P_GO_SAP_MCC_24_5_2x2] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
[PM_P2P_GO_SAP_DBS_1x1] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
[PM_P2P_GO_SAP_DBS_2x2] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
|
||||
[PM_P2P_CLI_SAP_SCC_24_1x1] = {PM_NOP, PM_DBS1},
|
||||
[PM_P2P_CLI_SAP_SCC_24_2x2] = {PM_NOP, PM_DBS1_DOWNGRADE},
|
||||
[PM_P2P_CLI_SAP_MCC_24_1x1] = {PM_NOP, PM_DBS1},
|
||||
[PM_P2P_CLI_SAP_MCC_24_2x2] = {PM_NOP, PM_DBS1_DOWNGRADE},
|
||||
[PM_P2P_CLI_SAP_SCC_5_1x1] = {PM_DBS1, PM_NOP},
|
||||
[PM_P2P_CLI_SAP_SCC_5_2x2] = {PM_DBS1, PM_NOP},
|
||||
[PM_P2P_CLI_SAP_MCC_5_1x1] = {PM_DBS1, PM_NOP},
|
||||
[PM_P2P_CLI_SAP_MCC_5_2x2] = {PM_DBS1, PM_NOP},
|
||||
[PM_P2P_CLI_SAP_MCC_24_5_1x1] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
[PM_P2P_CLI_SAP_MCC_24_5_2x2] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
[PM_P2P_CLI_SAP_DBS_1x1] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
[PM_P2P_CLI_SAP_DBS_2x2] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
|
||||
[PM_SAP_SAP_SCC_24_1x1] = {PM_NOP, PM_DBS1},
|
||||
[PM_SAP_SAP_SCC_24_2x2] = {PM_NOP, PM_DBS1_DOWNGRADE},
|
||||
[PM_SAP_SAP_MCC_24_1x1] = {PM_NOP, PM_DBS1},
|
||||
[PM_SAP_SAP_MCC_24_2x2] = {PM_NOP, PM_DBS1_DOWNGRADE},
|
||||
[PM_SAP_SAP_SCC_5_1x1] = {PM_DBS1, PM_NOP},
|
||||
[PM_SAP_SAP_SCC_5_2x2] = {PM_DBS1, PM_NOP},
|
||||
[PM_SAP_SAP_MCC_5_1x1] = {PM_DBS1, PM_NOP},
|
||||
[PM_SAP_SAP_MCC_5_2x2] = {PM_DBS1, PM_NOP},
|
||||
[PM_SAP_SAP_MCC_24_5_1x1] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
[PM_SAP_SAP_MCC_24_5_2x2] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
[PM_SAP_SAP_DBS_1x1] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
[PM_SAP_SAP_DBS_2x2] = {PM_DBS1_DOWNGRADE, PM_DBS1_DOWNGRADE},
|
||||
};
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,900 @@
|
|||
/*
|
||||
* Copyright (c) 2012-2017 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef __WLAN_POLICY_MGR_TABLES_NO_DBS_H
|
||||
#define __WLAN_POLICY_MGR_TABLES_NO_DBS_H
|
||||
|
||||
#include "wlan_policy_mgr_api.h"
|
||||
|
||||
/**
|
||||
* second_connection_pcl_nodbs_table - table which provides PCL
|
||||
* for the 2nd connection, when we have a connection already in
|
||||
* the system (with DBS not supported by HW)
|
||||
*/
|
||||
static const enum policy_mgr_pcl_type
|
||||
second_connection_pcl_nodbs_table[PM_MAX_ONE_CONNECTION_MODE]
|
||||
[PM_MAX_NUM_OF_MODE][PM_MAX_CONC_PRIORITY_MODE] = {
|
||||
[PM_STA_24_1x1] = {
|
||||
[PM_STA_MODE] = {PM_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH_5G},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH_5G},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH_5G},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_24_2x2] = {
|
||||
[PM_STA_MODE] = {PM_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH_5G},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH_5G},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH_5G},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_5_1x1] = {
|
||||
[PM_STA_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH_5G},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_5_2x2] = {
|
||||
[PM_STA_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH_5G},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_24_1x1] = {
|
||||
[PM_STA_MODE] = {PM_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH_5G},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_5G, PM_SCC_CH, PM_SCC_CH_5G},
|
||||
[PM_P2P_GO_MODE] = {PM_5G, PM_SCC_CH, PM_SCC_CH_5G},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_24_2x2] = {
|
||||
[PM_STA_MODE] = {PM_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH_5G},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_5G, PM_SCC_CH, PM_SCC_CH_5G},
|
||||
[PM_P2P_GO_MODE] = {PM_5G, PM_SCC_CH, PM_SCC_CH_5G},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_5_1x1] = {
|
||||
[PM_STA_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH_5G},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_5_2x2] = {
|
||||
[PM_STA_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH_5G},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_24_1x1] = {
|
||||
[PM_STA_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_24_2x2] = {
|
||||
[PM_STA_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_5_1x1] = {
|
||||
[PM_STA_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_5_2x2] = {
|
||||
[PM_STA_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_SAP_24_1x1] = {
|
||||
[PM_STA_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_SAP_24_2x2] = {
|
||||
[PM_STA_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_SAP_5_1x1] = {
|
||||
[PM_STA_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_SAP_5_2x2] = {
|
||||
[PM_STA_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_IBSS_24_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_IBSS_24_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_IBSS_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_IBSS_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
};
|
||||
|
||||
/**
|
||||
* third_connection_pcl_nodbs_table - table which provides PCL
|
||||
* for the 3rd connection, when we have two connections already
|
||||
* in the system (with DBS not supported by HW)
|
||||
*/
|
||||
static const enum policy_mgr_pcl_type
|
||||
third_connection_pcl_nodbs_table[PM_MAX_TWO_CONNECTION_MODE]
|
||||
[PM_MAX_NUM_OF_MODE][PM_MAX_CONC_PRIORITY_MODE] = {
|
||||
[PM_STA_SAP_SCC_24_1x1] = {
|
||||
[PM_STA_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_SAP_SCC_24_2x2] = {
|
||||
[PM_STA_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_SAP_MCC_24_1x1] = {
|
||||
[PM_STA_MODE] = {PM_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_SAP_MODE] = {PM_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_SAP_MCC_24_2x2] = {
|
||||
[PM_STA_MODE] = {PM_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_SAP_MODE] = {PM_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_SAP_SCC_5_1x1] = {
|
||||
[PM_STA_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_SAP_SCC_5_2x2] = {
|
||||
[PM_STA_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_SAP_MCC_5_1x1] = {
|
||||
[PM_STA_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_SAP_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_SAP_MCC_5_2x2] = {
|
||||
[PM_STA_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_SAP_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_SAP_MCC_24_5_1x1] = {
|
||||
[PM_STA_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_SAP_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_SAP_MCC_24_5_2x2] = {
|
||||
[PM_STA_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_SAP_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_SAP_DBS_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_P2P_GO_SCC_24_1x1] = {
|
||||
[PM_STA_MODE] = {PM_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_5G_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_P2P_GO_SCC_24_2x2] = {
|
||||
[PM_STA_MODE] = {PM_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_5G_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_P2P_GO_MCC_24_1x1] = {
|
||||
[PM_STA_MODE] = {PM_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_SAP_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_P2P_GO_MCC_24_2x2] = {
|
||||
[PM_STA_MODE] = {PM_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_SAP_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_P2P_GO_SCC_5_1x1] = {
|
||||
[PM_STA_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_P2P_GO_SCC_5_2x2] = {
|
||||
[PM_STA_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_P2P_GO_MCC_5_1x1] = {
|
||||
[PM_STA_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_SAP_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_P2P_GO_MCC_5_2x2] = {
|
||||
[PM_STA_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_SAP_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_P2P_GO_MCC_24_5_1x1] = {
|
||||
[PM_STA_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_SAP_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_P2P_GO_MCC_24_5_2x2] = {
|
||||
[PM_STA_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_SAP_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_P2P_GO_DBS_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_IBSS_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},
|
||||
[PM_SAP_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_5G_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_5G_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_P2P_CLI_SCC_24_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_5G_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_5G_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_P2P_CLI_MCC_24_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_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_P2P_CLI_MCC_24_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_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_P2P_CLI_SCC_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_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_P2P_CLI_SCC_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_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_P2P_CLI_MCC_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_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_P2P_CLI_MCC_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_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_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_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_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_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_STA_P2P_CLI_DBS_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_P2P_CLI_SCC_24_1x1] = {
|
||||
[PM_STA_MODE] = {PM_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_5G_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_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_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_5G, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_5G_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_P2P_CLI_MCC_24_1x1] = {
|
||||
[PM_STA_MODE] = {PM_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_SAP_MODE] = {PM_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_P2P_CLI_MCC_24_2x2] = {
|
||||
[PM_STA_MODE] = {PM_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_SAP_MODE] = {PM_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {
|
||||
PM_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_GO_MODE] = {
|
||||
PM_5G_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_P2P_CLI_SCC_5_1x1] = {
|
||||
[PM_STA_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_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_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_SAP_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_SCC_CH, PM_SCC_CH, PM_SCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_P2P_CLI_MCC_5_1x1] = {
|
||||
[PM_STA_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_SAP_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_P2P_CLI_MCC_5_2x2] = {
|
||||
[PM_STA_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_SAP_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_P2P_CLI_MCC_24_5_1x1] = {
|
||||
[PM_STA_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_SAP_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_P2P_CLI_MCC_24_5_2x2] = {
|
||||
[PM_STA_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_SAP_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_CLIENT_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_P2P_GO_MODE] = {PM_MCC_CH, PM_MCC_CH, PM_MCC_CH},
|
||||
[PM_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_P2P_CLI_DBS_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_SAP_SCC_24_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_SAP_SCC_24_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_SAP_MCC_24_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_SAP_MCC_24_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_SAP_SCC_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_SAP_SCC_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_SAP_MCC_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_SAP_MCC_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_SAP_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_SAP_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_GO_SAP_DBS_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
|
||||
[PM_P2P_CLI_SAP_SCC_24_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_SAP_SCC_24_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_SAP_MCC_24_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_SAP_MCC_24_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_SAP_SCC_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_SAP_SCC_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_SAP_MCC_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_SAP_MCC_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_SAP_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_SAP_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
[PM_P2P_CLI_SAP_DBS_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_IBSS_MODE] = {
|
||||
PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE, PM_MAX_PCL_TYPE} },
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
146
components/cmn_services/policy_mgr/src/wlan_policy_mgr_ucfg.c
Normal file
146
components/cmn_services/policy_mgr/src/wlan_policy_mgr_ucfg.c
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
/*
|
||||
* Copyright (c) 2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
#include "wlan_policy_mgr_ucfg.h"
|
||||
#include "wlan_policy_mgr_i.h"
|
||||
#include "cfg_ucfg_api.h"
|
||||
#include "wlan_policy_mgr_api.h"
|
||||
|
||||
static QDF_STATUS policy_mgr_init_cfg(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
struct policy_mgr_cfg *cfg;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("pm_ctx is NULL");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
cfg = &pm_ctx->cfg;
|
||||
|
||||
cfg->mcc_to_scc_switch = cfg_get(psoc, CFG_MCC_TO_SCC_SWITCH);
|
||||
cfg->sys_pref = cfg_get(psoc, CFG_CONC_SYS_PREF);
|
||||
cfg->max_conc_cxns = cfg_get(psoc, CFG_MAX_CONC_CXNS);
|
||||
cfg->conc_rule1 = cfg_get(psoc, CFG_ENABLE_CONC_RULE1);
|
||||
cfg->conc_rule2 = cfg_get(psoc, CFG_ENABLE_CONC_RULE2);
|
||||
cfg->dbs_selection_plcy = cfg_get(psoc, CFG_DBS_SELECTION_PLCY);
|
||||
cfg->vdev_priority_list = cfg_get(psoc, CFG_VDEV_CUSTOM_PRIORITY_LIST);
|
||||
cfg->chnl_select_plcy = cfg_get(psoc, CFG_CHNL_SELECT_LOGIC_CONC);
|
||||
cfg->enable_mcc_adaptive_sch =
|
||||
cfg_get(psoc, CFG_ENABLE_MCC_ADATIVE_SCH_ENABLED_NAME);
|
||||
cfg->enable_sta_cxn_5g_band =
|
||||
cfg_get(psoc, CFG_ENABLE_STA_CONNECTION_IN_5GHZ);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static void policy_mgr_deinit_cfg(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("pm_ctx is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
qdf_mem_zero(&pm_ctx->cfg, sizeof(pm_ctx->cfg));
|
||||
}
|
||||
|
||||
QDF_STATUS ucfg_policy_mgr_psoc_open(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
|
||||
status = policy_mgr_init_cfg(psoc);
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
policy_mgr_err("pm_ctx is NULL");
|
||||
return status;
|
||||
}
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
void ucfg_policy_mgr_psoc_close(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
policy_mgr_deinit_cfg(psoc);
|
||||
}
|
||||
|
||||
QDF_STATUS ucfg_policy_mgr_get_mcc_scc_switch(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *mcc_scc_switch)
|
||||
{
|
||||
return policy_mgr_get_mcc_scc_switch(psoc, mcc_scc_switch);
|
||||
}
|
||||
|
||||
QDF_STATUS ucfg_policy_mgr_get_sys_pref(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *sys_pref)
|
||||
{
|
||||
return policy_mgr_get_sys_pref(psoc, sys_pref);
|
||||
}
|
||||
|
||||
QDF_STATUS ucfg_policy_mgr_set_sys_pref(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t sys_pref)
|
||||
{
|
||||
return policy_mgr_set_sys_pref(psoc, sys_pref);
|
||||
}
|
||||
|
||||
QDF_STATUS ucfg_policy_mgr_get_max_conc_cxns(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *max_conc_cxns)
|
||||
{
|
||||
return policy_mgr_get_max_conc_cxns(psoc, max_conc_cxns);;
|
||||
}
|
||||
|
||||
QDF_STATUS ucfg_policy_mgr_get_conc_rule1(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *conc_rule1)
|
||||
{
|
||||
return policy_mgr_get_conc_rule1(psoc, conc_rule1);
|
||||
}
|
||||
|
||||
QDF_STATUS ucfg_policy_mgr_get_conc_rule2(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *conc_rule2)
|
||||
{
|
||||
return policy_mgr_get_conc_rule2(psoc, conc_rule2);
|
||||
}
|
||||
|
||||
QDF_STATUS ucfg_policy_mgr_get_dbs_selection_plcy(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t *dbs_selection_plcy)
|
||||
{
|
||||
return policy_mgr_get_dbs_selection_plcy(psoc, dbs_selection_plcy);
|
||||
}
|
||||
|
||||
QDF_STATUS ucfg_policy_mgr_get_vdev_priority_list(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t *vdev_priority_list)
|
||||
{
|
||||
return policy_mgr_get_vdev_priority_list(psoc, vdev_priority_list);
|
||||
}
|
||||
|
||||
QDF_STATUS ucfg_policy_mgr_get_chnl_select_plcy(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t *chnl_select_plcy)
|
||||
{
|
||||
return policy_mgr_get_chnl_select_plcy(psoc, chnl_select_plcy);
|
||||
}
|
||||
|
||||
|
||||
QDF_STATUS ucfg_policy_mgr_get_mcc_adaptive_sch(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *mcc_adaptive_sch)
|
||||
{
|
||||
return policy_mgr_get_mcc_adaptive_sch(psoc, mcc_adaptive_sch);
|
||||
}
|
||||
|
||||
QDF_STATUS ucfg_policy_mgr_get_sta_cxn_5g_band(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *enable_sta_cxn_5g_band)
|
||||
{
|
||||
return policy_mgr_get_sta_cxn_5g_band(psoc, enable_sta_cxn_5g_band);
|
||||
}
|
||||
Loading…
Reference in a new issue