Merge "qcacld-3.0: Update policy mgr table if nan_conc control is supported" into wlan-cld3.driver.lnx.2.0
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

commit
c74153cd26
@@ -176,7 +176,8 @@ void policy_mgr_decr_session_set_pcl(struct wlan_objmgr_psoc *psoc,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* do we need to change the HW mode */
|
/* do we need to change the HW mode */
|
||||||
policy_mgr_check_n_start_opportunistic_timer(psoc);
|
if (policy_mgr_is_hw_dbs_capable(psoc))
|
||||||
|
policy_mgr_check_n_start_opportunistic_timer(psoc);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -447,14 +447,14 @@ ndi_remove_and_update_primary_connection(struct wlan_objmgr_psoc *psoc,
|
|||||||
peer = peer_next;
|
peer = peer_next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!peer && psoc_nan_obj->nan_caps.ndi_dbs_supported) {
|
if (!peer && NDI_CONCURRENCY_SUPPORTED(psoc)) {
|
||||||
policy_mgr_decr_session_set_pcl(psoc, QDF_NDI_MODE,
|
policy_mgr_decr_session_set_pcl(psoc, QDF_NDI_MODE,
|
||||||
wlan_vdev_get_id(vdev));
|
wlan_vdev_get_id(vdev));
|
||||||
vdev_nan_obj->ndp_init_done = false;
|
vdev_nan_obj->ndp_init_done = false;
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (peer_nan_obj && psoc_nan_obj->nan_caps.ndi_dbs_supported) {
|
if (peer_nan_obj && NDI_CONCURRENCY_SUPPORTED(psoc)) {
|
||||||
psoc_nan_obj->cb_obj.update_ndi_conn(wlan_vdev_get_id(vdev),
|
psoc_nan_obj->cb_obj.update_ndi_conn(wlan_vdev_get_id(vdev),
|
||||||
&peer_nan_obj->home_chan_info);
|
&peer_nan_obj->home_chan_info);
|
||||||
policy_mgr_update_connection_info(psoc, wlan_vdev_get_id(vdev));
|
policy_mgr_update_connection_info(psoc, wlan_vdev_get_id(vdev));
|
||||||
@@ -523,14 +523,33 @@ ndi_update_ndp_session(struct wlan_objmgr_vdev *vdev,
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static QDF_STATUS nan_handle_confirm(
|
static QDF_STATUS
|
||||||
struct nan_datapath_confirm_event *confirm)
|
ndi_update_policy_mgr_conn_table(struct nan_datapath_confirm_event *confirm,
|
||||||
|
struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
|
||||||
{
|
{
|
||||||
uint8_t vdev_id, channel;
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
|
if (policy_mgr_is_hw_dbs_capable(psoc)) {
|
||||||
|
status = policy_mgr_update_and_wait_for_connection_update(psoc,
|
||||||
|
vdev_id, confirm->ch[0].freq,
|
||||||
|
POLICY_MGR_UPDATE_REASON_NDP_UPDATE);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
nan_err("Failed to set or wait for HW mode change");
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
policy_mgr_incr_active_session(psoc, QDF_NDI_MODE, vdev_id);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
static QDF_STATUS nan_handle_confirm(struct nan_datapath_confirm_event *confirm)
|
||||||
|
{
|
||||||
|
uint8_t vdev_id;
|
||||||
struct wlan_objmgr_psoc *psoc;
|
struct wlan_objmgr_psoc *psoc;
|
||||||
struct nan_psoc_priv_obj *psoc_nan_obj;
|
struct nan_psoc_priv_obj *psoc_nan_obj;
|
||||||
struct nan_vdev_priv_obj *vdev_nan_obj;
|
struct nan_vdev_priv_obj *vdev_nan_obj;
|
||||||
QDF_STATUS status;
|
|
||||||
|
|
||||||
vdev_id = wlan_vdev_get_id(confirm->vdev);
|
vdev_id = wlan_vdev_get_id(confirm->vdev);
|
||||||
psoc = wlan_vdev_get_psoc(confirm->vdev);
|
psoc = wlan_vdev_get_psoc(confirm->vdev);
|
||||||
@@ -584,35 +603,9 @@ static QDF_STATUS nan_handle_confirm(
|
|||||||
|
|
||||||
psoc_nan_obj->cb_obj.update_ndi_conn(vdev_id, &confirm->ch[0]);
|
psoc_nan_obj->cb_obj.update_ndi_conn(vdev_id, &confirm->ch[0]);
|
||||||
|
|
||||||
if (psoc_nan_obj->nan_caps.ndi_dbs_supported) {
|
if (NAN_CONCURRENCY_SUPPORTED(psoc)) {
|
||||||
channel = wlan_freq_to_chan(confirm->ch[0].freq);
|
ndi_update_policy_mgr_conn_table(confirm, psoc,
|
||||||
status = policy_mgr_reset_connection_update(psoc);
|
vdev_id);
|
||||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
||||||
nan_err("Policy mgr reset connection failed-%d",
|
|
||||||
status);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
status = policy_mgr_current_connections_update(
|
|
||||||
psoc, vdev_id, wlan_chan_to_freq(channel),
|
|
||||||
POLICY_MGR_UPDATE_REASON_NDP_UPDATE,
|
|
||||||
POLICY_MGR_DEF_REQ_ID);
|
|
||||||
if (QDF_STATUS_E_FAILURE == status) {
|
|
||||||
nan_err("connections update failed!!");
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (QDF_STATUS_SUCCESS == status) {
|
|
||||||
status = policy_mgr_wait_for_connection_update(
|
|
||||||
psoc);
|
|
||||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
|
||||||
nan_err("qdf wait for event failed!!");
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
policy_mgr_incr_active_session(psoc, QDF_NDI_MODE,
|
|
||||||
vdev_id);
|
|
||||||
vdev_nan_obj->ndp_init_done = true;
|
vdev_nan_obj->ndp_init_done = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1099,6 +1092,7 @@ bool nan_is_enable_allowed(struct wlan_objmgr_psoc *psoc, uint32_t nan_ch_freq)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (NAN_DISC_DISABLED == nan_get_discovery_state(psoc) &&
|
return (NAN_DISC_DISABLED == nan_get_discovery_state(psoc) &&
|
||||||
|
ucfg_is_nan_conc_control_supported(psoc) &&
|
||||||
policy_mgr_allow_concurrency(psoc, PM_NAN_DISC_MODE,
|
policy_mgr_allow_concurrency(psoc, PM_NAN_DISC_MODE,
|
||||||
nan_ch_freq, HW_MODE_20_MHZ));
|
nan_ch_freq, HW_MODE_20_MHZ));
|
||||||
}
|
}
|
||||||
@@ -1114,21 +1108,14 @@ bool nan_is_disc_active(struct wlan_objmgr_psoc *psoc)
|
|||||||
NAN_DISC_ENABLE_IN_PROGRESS == nan_get_discovery_state(psoc));
|
NAN_DISC_ENABLE_IN_PROGRESS == nan_get_discovery_state(psoc));
|
||||||
}
|
}
|
||||||
|
|
||||||
QDF_STATUS nan_discovery_pre_enable(struct wlan_objmgr_psoc *psoc,
|
static QDF_STATUS nan_set_hw_mode(struct wlan_objmgr_psoc *psoc,
|
||||||
uint32_t nan_ch_freq)
|
uint32_t nan_ch_freq)
|
||||||
{
|
{
|
||||||
QDF_STATUS status = QDF_STATUS_E_INVAL;
|
QDF_STATUS status = QDF_STATUS_E_INVAL;
|
||||||
struct wlan_objmgr_pdev *pdev = NULL;
|
struct wlan_objmgr_pdev *pdev = NULL;
|
||||||
struct wlan_objmgr_vdev *vdev = NULL;
|
struct wlan_objmgr_vdev *vdev = NULL;
|
||||||
uint8_t vdev_id;
|
uint8_t vdev_id;
|
||||||
|
|
||||||
status = nan_set_discovery_state(psoc, NAN_DISC_ENABLE_IN_PROGRESS);
|
|
||||||
|
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
|
||||||
nan_err("Unable to set NAN Disc State to ENABLE_IN_PROGRESS");
|
|
||||||
goto pre_enable_failure;
|
|
||||||
}
|
|
||||||
|
|
||||||
policy_mgr_stop_opportunistic_timer(psoc);
|
policy_mgr_stop_opportunistic_timer(psoc);
|
||||||
|
|
||||||
if (policy_mgr_is_hw_mode_change_in_progress(psoc)) {
|
if (policy_mgr_is_hw_mode_change_in_progress(psoc)) {
|
||||||
@@ -1146,15 +1133,6 @@ QDF_STATUS nan_discovery_pre_enable(struct wlan_objmgr_psoc *psoc,
|
|||||||
goto pre_enable_failure;
|
goto pre_enable_failure;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (policy_mgr_mode_specific_connection_count(psoc, PM_SAP_MODE,
|
|
||||||
NULL) &&
|
|
||||||
!policy_mgr_nan_sap_pre_enable_conc_check(psoc, PM_NAN_DISC_MODE,
|
|
||||||
nan_ch_freq)) {
|
|
||||||
nan_debug("NAN not enabled due to concurrency constraints");
|
|
||||||
status = QDF_STATUS_E_INVAL;
|
|
||||||
goto pre_enable_failure;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Piggyback on any available vdev for policy manager update */
|
/* Piggyback on any available vdev for policy manager update */
|
||||||
vdev = wlan_objmgr_pdev_get_first_vdev(pdev, WLAN_NAN_ID);
|
vdev = wlan_objmgr_pdev_get_first_vdev(pdev, WLAN_NAN_ID);
|
||||||
if (!vdev) {
|
if (!vdev) {
|
||||||
@@ -1173,15 +1151,46 @@ QDF_STATUS nan_discovery_pre_enable(struct wlan_objmgr_psoc *psoc,
|
|||||||
goto pre_enable_failure;
|
goto pre_enable_failure;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pre_enable_failure:
|
||||||
|
if (pdev)
|
||||||
|
wlan_objmgr_pdev_release_ref(pdev, WLAN_NAN_ID);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS nan_discovery_pre_enable(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint32_t nan_ch_freq)
|
||||||
|
{
|
||||||
|
QDF_STATUS status = QDF_STATUS_E_INVAL;
|
||||||
|
|
||||||
|
status = nan_set_discovery_state(psoc, NAN_DISC_ENABLE_IN_PROGRESS);
|
||||||
|
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
nan_err("Unable to set NAN Disc State to ENABLE_IN_PROGRESS");
|
||||||
|
goto pre_enable_failure;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (policy_mgr_mode_specific_connection_count(psoc, PM_SAP_MODE,
|
||||||
|
NULL) &&
|
||||||
|
!policy_mgr_nan_sap_pre_enable_conc_check(psoc, PM_NAN_DISC_MODE,
|
||||||
|
nan_ch_freq)) {
|
||||||
|
nan_debug("NAN not enabled due to concurrency constraints");
|
||||||
|
status = QDF_STATUS_E_INVAL;
|
||||||
|
goto pre_enable_failure;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (policy_mgr_is_hw_dbs_capable(psoc)) {
|
||||||
|
status = nan_set_hw_mode(psoc, nan_ch_freq);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status))
|
||||||
|
goto pre_enable_failure;
|
||||||
|
}
|
||||||
|
|
||||||
/* Try to teardown TDLS links, but do not wait */
|
/* Try to teardown TDLS links, but do not wait */
|
||||||
status = ucfg_tdls_teardown_links(psoc);
|
status = ucfg_tdls_teardown_links(psoc);
|
||||||
if (QDF_IS_STATUS_ERROR(status))
|
if (QDF_IS_STATUS_ERROR(status))
|
||||||
nan_err("Failed to teardown TDLS links");
|
nan_err("Failed to teardown TDLS links");
|
||||||
|
|
||||||
pre_enable_failure:
|
pre_enable_failure:
|
||||||
if (pdev)
|
|
||||||
wlan_objmgr_pdev_release_ref(pdev, WLAN_NAN_ID);
|
|
||||||
|
|
||||||
if (QDF_IS_STATUS_ERROR(status))
|
if (QDF_IS_STATUS_ERROR(status))
|
||||||
nan_set_discovery_state(psoc, NAN_DISC_DISABLED);
|
nan_set_discovery_state(psoc, NAN_DISC_DISABLED);
|
||||||
|
|
||||||
|
@@ -26,6 +26,14 @@
|
|||||||
#include "wlan_objmgr_cmn.h"
|
#include "wlan_objmgr_cmn.h"
|
||||||
#include "nan_public_structs.h"
|
#include "nan_public_structs.h"
|
||||||
|
|
||||||
|
#define NAN_CONCURRENCY_SUPPORTED(psoc) \
|
||||||
|
(ucfg_is_nan_dbs_supported(psoc) || \
|
||||||
|
ucfg_is_nan_conc_control_supported(psoc))
|
||||||
|
|
||||||
|
#define NDI_CONCURRENCY_SUPPORTED(psoc) \
|
||||||
|
(ucfg_is_ndi_dbs_supported(psoc) || \
|
||||||
|
ucfg_is_nan_conc_control_supported(psoc))
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_NAN
|
#ifdef WLAN_FEATURE_NAN
|
||||||
#define ucfg_nan_set_ndi_state(vdev, state) \
|
#define ucfg_nan_set_ndi_state(vdev, state) \
|
||||||
__ucfg_nan_set_ndi_state(vdev, state, __func__)
|
__ucfg_nan_set_ndi_state(vdev, state, __func__)
|
||||||
|
@@ -999,7 +999,7 @@ QDF_STATUS ucfg_ndi_remove_entry_from_policy_mgr(struct wlan_objmgr_vdev *vdev)
|
|||||||
qdf_spin_unlock_bh(&vdev_priv_obj->lock);
|
qdf_spin_unlock_bh(&vdev_priv_obj->lock);
|
||||||
|
|
||||||
if (state == NAN_DATA_NDI_DELETED_STATE &&
|
if (state == NAN_DATA_NDI_DELETED_STATE &&
|
||||||
psoc_priv_obj->nan_caps.ndi_dbs_supported &&
|
NDI_CONCURRENCY_SUPPORTED(psoc) &&
|
||||||
active_ndp_peers) {
|
active_ndp_peers) {
|
||||||
nan_info("Delete NDP peers: %u and remove NDI from policy mgr",
|
nan_info("Delete NDP peers: %u and remove NDI from policy mgr",
|
||||||
active_ndp_peers);
|
active_ndp_peers);
|
||||||
|
@@ -2621,7 +2621,7 @@ int os_if_process_nan_req(struct wlan_objmgr_psoc *psoc,
|
|||||||
* sure that HW mode is not set to DBS by NAN Enable request. NAN state
|
* sure that HW mode is not set to DBS by NAN Enable request. NAN state
|
||||||
* machine will remain unaffected in this case.
|
* machine will remain unaffected in this case.
|
||||||
*/
|
*/
|
||||||
if (!ucfg_is_nan_dbs_supported(psoc))
|
if (!NAN_CONCURRENCY_SUPPORTED(psoc))
|
||||||
return os_if_nan_generic_req(psoc, tb);
|
return os_if_nan_generic_req(psoc, tb);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user