qcacld-3.0: Add start/stop bss changes in interface mgr

- Add start/stop bss event processing
- Add WLAN_INTERFACE_IF_MGR flag

Change-Id: I472a4534ee7bf95a10058595c85ec89eaf411670
CRs-Fixed: 2759981
This commit is contained in:
Amruta Kulkarni
2020-08-20 10:51:02 -07:00
committed by snandini
parent cef57d4f47
commit a7c313b997
5 changed files with 188 additions and 19 deletions

View File

@@ -29,14 +29,34 @@
/**
* if_mgr_enable_roaming() - interface manager enable roaming
*
* Interface manager emable roaming
*
* @vdev: vdev object
* @pdev: pdev object
* @requestor: RSO disable requestor
*
* Interface manager api to enable roaming for all other active vdev id's
*
* Context: It should run in thread context
*
* Return: QDF_STATUS
*/
QDF_STATUS if_mgr_enable_roaming(struct wlan_objmgr_vdev *vdev,
struct wlan_objmgr_pdev *pdev);
struct wlan_objmgr_pdev *pdev,
enum wlan_cm_rso_control_requestor requestor);
/**
* if_mgr_disable_roaming() - interface manager disable roaming
* @vdev: vdev object
* @pdev: pdev object
* @requestor: RSO disable requestor
*
* Interface manager api to disable roaming for all other active vdev id's
*
* Context: It should run in thread context
*
* Return: QDF_STATUS
*/
QDF_STATUS if_mgr_disable_roaming(struct wlan_objmgr_vdev *vdev,
struct wlan_objmgr_pdev *pdev,
enum wlan_cm_rso_control_requestor requestor);
#endif

View File

@@ -22,9 +22,20 @@
#include "wlan_objmgr_vdev_obj.h"
#include "wlan_policy_mgr_api.h"
#include "wlan_if_mgr_roam.h"
#include "wlan_cm_roam_api.h"
#include "wlan_if_mgr_main.h"
#include "wlan_p2p_ucfg_api.h"
QDF_STATUS if_mgr_enable_roaming(struct wlan_objmgr_vdev *vdev,
struct wlan_objmgr_pdev *pdev)
struct wlan_objmgr_pdev *pdev,
enum wlan_cm_rso_control_requestor requestor)
{
return QDF_STATUS_SUCCESS;
}
QDF_STATUS if_mgr_disable_roaming(struct wlan_objmgr_vdev *vdev,
struct wlan_objmgr_pdev *pdev,
enum wlan_cm_rso_control_requestor requestor)
{
return QDF_STATUS_SUCCESS;
}

View File

@@ -21,9 +21,105 @@
#include "wlan_objmgr_vdev_obj.h"
#include "wlan_if_mgr_public_struct.h"
#include "wlan_if_mgr_ap.h"
#include "wlan_if_mgr_roam.h"
#include "wlan_policy_mgr_api.h"
#include "wlan_if_mgr_main.h"
#include "wlan_p2p_cfg_api.h"
QDF_STATUS wlan_process_ap_start_bss(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data)
QDF_STATUS if_mgr_ap_start_bss(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data)
{
struct wlan_objmgr_psoc *psoc;
struct wlan_objmgr_pdev *pdev;
pdev = wlan_vdev_get_pdev(vdev);
if (!pdev)
return QDF_STATUS_E_FAILURE;
psoc = wlan_pdev_get_psoc(pdev);
if (!psoc)
return QDF_STATUS_E_FAILURE;
if (policy_mgr_is_hw_mode_change_in_progress(psoc)) {
if (!QDF_IS_STATUS_SUCCESS(
policy_mgr_wait_for_connection_update(psoc))) {
ifmgr_err("qdf wait for event failed!!");
return QDF_STATUS_E_FAILURE;
}
}
if (policy_mgr_is_sta_active_connection_exists(psoc))
/* Disable Roaming on all vdev's before starting bss */
if_mgr_disable_roaming(vdev, pdev, RSO_START_BSS);
return QDF_STATUS_SUCCESS;
}
QDF_STATUS
if_mgr_ap_start_bss_complete(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data)
{
struct wlan_objmgr_psoc *psoc;
struct wlan_objmgr_pdev *pdev;
pdev = wlan_vdev_get_pdev(vdev);
if (!pdev)
return QDF_STATUS_E_FAILURE;
psoc = wlan_pdev_get_psoc(pdev);
if (!psoc)
return QDF_STATUS_E_FAILURE;
/*
* Due to audio share glitch with P2P GO due
* to roam scan on concurrent interface, disable
* roaming if "p2p_disable_roam" ini is enabled.
* Donot re-enable roaming again on other STA interface
* if p2p GO is active on any vdev.
*/
if (cfg_p2p_is_roam_config_disabled(psoc) &&
wlan_vdev_mlme_get_opmode(vdev) == QDF_P2P_GO_MODE) {
ifmgr_debug("p2p go mode, keep roam disabled");
} else {
/* Enable Roaming after start bss in case of failure/success */
if_mgr_enable_roaming(vdev, pdev, RSO_START_BSS);
}
return QDF_STATUS_SUCCESS;
}
QDF_STATUS if_mgr_ap_stop_bss(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data)
{
return QDF_STATUS_SUCCESS;
}
QDF_STATUS
if_mgr_ap_stop_bss_complete(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data)
{
struct wlan_objmgr_psoc *psoc;
struct wlan_objmgr_pdev *pdev;
pdev = wlan_vdev_get_pdev(vdev);
if (!pdev)
return QDF_STATUS_E_FAILURE;
psoc = wlan_pdev_get_psoc(pdev);
if (!psoc)
return QDF_STATUS_E_FAILURE;
/*
* Due to audio share glitch with P2P GO due
* to roam scan on concurrent interface, disable
* roaming if "p2p_disable_roam" ini is enabled.
* Re-enable roaming on other STA interface if p2p GO
* is active on any vdev.
*/
if (cfg_p2p_is_roam_config_disabled(psoc) &&
wlan_vdev_mlme_get_opmode(vdev) == QDF_P2P_GO_MODE) {
ifmgr_debug("p2p go disconnected enable roam");
if_mgr_enable_roaming(vdev, pdev, RSO_START_BSS);
}
return QDF_STATUS_SUCCESS;
}

View File

@@ -24,8 +24,8 @@
#include "nan_ucfg_api.h"
#include "wlan_policy_mgr_api.h"
QDF_STATUS wlan_process_connect_start(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data)
QDF_STATUS if_mgr_connect_start(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data)
{
uint8_t sta_cnt, sap_cnt;
struct wlan_objmgr_psoc *psoc;
@@ -67,8 +67,8 @@ QDF_STATUS wlan_process_connect_start(struct wlan_objmgr_vdev *vdev,
return QDF_STATUS_SUCCESS;
}
QDF_STATUS wlan_process_connect_complete(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data)
QDF_STATUS if_mgr_connect_complete(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data)
{
return QDF_STATUS_SUCCESS;
}