qcacld-3.0: Modify connect start code in if mgr
Modify connect start code in interface manager by moving disable roam and tdls link teardown notify APIs from HDD to if mgr. Alongside, move tdls link teardown notify API from HDD to if mgr in start bss API. Also, move the tdls link teardown API to TDLS module from HDD module as TDLS should manage the wait logic. Change-Id: I09fa31878563a3daaa7c5fde46327475829317b3 CRs-Fixed: 2811807
Šī revīzija ir iekļauta:

revīziju iesūtīja
snandini

vecāks
c9cd665a5c
revīzija
370f376c02
@@ -1315,30 +1315,27 @@ void tdls_disable_offchan_and_teardown_links(
|
||||
}
|
||||
}
|
||||
|
||||
void tdls_teardown_connections(struct wlan_objmgr_psoc *psoc)
|
||||
void tdls_teardown_connections(struct tdls_link_teardown *tdls_teardown)
|
||||
{
|
||||
struct tdls_osif_indication indication;
|
||||
struct tdls_soc_priv_obj *tdls_soc;
|
||||
struct tdls_vdev_priv_obj *tdls_vdev_obj;
|
||||
struct wlan_objmgr_vdev *tdls_vdev;
|
||||
|
||||
|
||||
tdls_soc = wlan_psoc_get_tdls_soc_obj(psoc);
|
||||
if (!tdls_soc)
|
||||
return;
|
||||
|
||||
/* Get the tdls specific vdev and clear the links */
|
||||
tdls_vdev = tdls_get_vdev(psoc, WLAN_TDLS_SB_ID);
|
||||
tdls_vdev = tdls_get_vdev(tdls_teardown->psoc, WLAN_TDLS_SB_ID);
|
||||
if (!tdls_vdev) {
|
||||
tdls_err("Unable get the vdev");
|
||||
return;
|
||||
}
|
||||
|
||||
tdls_vdev_obj = wlan_vdev_get_tdls_vdev_obj(tdls_vdev);
|
||||
if (!tdls_vdev_obj) {
|
||||
tdls_err("vdev priv is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
tdls_disable_offchan_and_teardown_links(tdls_vdev);
|
||||
|
||||
indication.vdev = tdls_vdev;
|
||||
|
||||
if (tdls_soc->tdls_event_cb)
|
||||
tdls_soc->tdls_event_cb(tdls_soc->tdls_evt_cb_data,
|
||||
TDLS_EVENT_TEARDOWN_LINKS_DONE,
|
||||
&indication);
|
||||
qdf_event_set(&tdls_vdev_obj->tdls_teardown_comp);
|
||||
wlan_objmgr_vdev_release_ref(tdls_vdev, WLAN_TDLS_SB_ID);
|
||||
wlan_objmgr_psoc_release_ref(tdls_teardown->psoc, WLAN_TDLS_SB_ID);
|
||||
qdf_mem_free(tdls_teardown);
|
||||
}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2017-2020 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
|
||||
@@ -152,7 +152,7 @@ void tdls_discovery_timeout_peer_cb(void *user_data);
|
||||
void tdls_implicit_disable(struct tdls_vdev_priv_obj *tdls_vdev);
|
||||
|
||||
/**
|
||||
* tdls_is_vdev_authenticated() -check the vdev authentication state
|
||||
* tdls_is_vdev_authenticated() - check the vdev authentication state
|
||||
* @vdev: vdev oobject
|
||||
*
|
||||
* Return: true or false
|
||||
@@ -160,12 +160,12 @@ void tdls_implicit_disable(struct tdls_vdev_priv_obj *tdls_vdev);
|
||||
bool tdls_is_vdev_authenticated(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* tdls_teardown_connections() -teardown and delete all the tdls peers
|
||||
* @psoc: psoc object
|
||||
* tdls_teardown_connections() - teardown and delete all the tdls peers
|
||||
* @tdls_teardown: tdls teardown struct
|
||||
*
|
||||
* Return: true or false
|
||||
*/
|
||||
void tdls_teardown_connections(struct wlan_objmgr_psoc *psoc);
|
||||
void tdls_teardown_connections(struct tdls_link_teardown *tdls_teardown);
|
||||
|
||||
/**
|
||||
* tdls_disable_offchan_and_teardown_links - Disable offchannel
|
||||
@@ -178,7 +178,7 @@ void tdls_disable_offchan_and_teardown_links(
|
||||
struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* tdls_delete_all_tdls_peers(): send request to delete tdls peers
|
||||
* tdls_delete_all_tdls_peers() - send request to delete tdls peers
|
||||
* @vdev: vdev object
|
||||
* @tdls_soc: tdls soc object
|
||||
*
|
||||
|
@@ -271,7 +271,7 @@ QDF_STATUS tdls_vdev_obj_create_notification(struct wlan_objmgr_vdev *vdev,
|
||||
tdls_vdev_obj = qdf_mem_malloc(sizeof(*tdls_vdev_obj));
|
||||
if (!tdls_vdev_obj) {
|
||||
status = QDF_STATUS_E_NOMEM;
|
||||
goto err;
|
||||
goto err_attach;
|
||||
}
|
||||
|
||||
status = wlan_objmgr_vdev_component_obj_attach(vdev,
|
||||
@@ -280,12 +280,16 @@ QDF_STATUS tdls_vdev_obj_create_notification(struct wlan_objmgr_vdev *vdev,
|
||||
QDF_STATUS_SUCCESS);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
tdls_err("Failed to attach vdev tdls component");
|
||||
goto err;
|
||||
goto err_attach;
|
||||
}
|
||||
tdls_vdev_obj->vdev = vdev;
|
||||
status = tdls_vdev_init(tdls_vdev_obj);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
goto err;
|
||||
goto err_vdev_init;
|
||||
|
||||
status = qdf_event_create(&tdls_vdev_obj->tdls_teardown_comp);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
goto err_event_create;
|
||||
|
||||
pdev = wlan_vdev_get_pdev(vdev);
|
||||
|
||||
@@ -295,19 +299,28 @@ QDF_STATUS tdls_vdev_obj_create_notification(struct wlan_objmgr_vdev *vdev,
|
||||
|
||||
if (QDF_STATUS_SUCCESS != status) {
|
||||
tdls_err("scan event register failed ");
|
||||
tdls_vdev_deinit(tdls_vdev_obj);
|
||||
goto err;
|
||||
goto err_register;
|
||||
}
|
||||
|
||||
tdls_debug("tdls object attach to vdev successfully");
|
||||
return status;
|
||||
err:
|
||||
|
||||
err_register:
|
||||
qdf_event_destroy(&tdls_vdev_obj->tdls_teardown_comp);
|
||||
err_event_create:
|
||||
tdls_vdev_deinit(tdls_vdev_obj);
|
||||
err_vdev_init:
|
||||
wlan_objmgr_vdev_component_obj_detach(vdev,
|
||||
WLAN_UMAC_COMP_TDLS,
|
||||
(void *)tdls_vdev_obj);
|
||||
err_attach:
|
||||
if (tdls_soc_obj->tdls_osif_deinit_cb)
|
||||
tdls_soc_obj->tdls_osif_deinit_cb(vdev);
|
||||
if (tdls_vdev_obj) {
|
||||
qdf_mem_free(tdls_vdev_obj);
|
||||
tdls_vdev_obj = NULL;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -315,7 +328,7 @@ QDF_STATUS tdls_vdev_obj_destroy_notification(struct wlan_objmgr_vdev *vdev,
|
||||
void *arg)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
void *tdls_vdev_obj;
|
||||
struct tdls_vdev_priv_obj *tdls_vdev_obj;
|
||||
struct tdls_soc_priv_obj *tdls_soc_obj;
|
||||
uint32_t tdls_feature_flags;
|
||||
|
||||
@@ -343,16 +356,18 @@ QDF_STATUS tdls_vdev_obj_destroy_notification(struct wlan_objmgr_vdev *vdev,
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
qdf_event_destroy(&tdls_vdev_obj->tdls_teardown_comp);
|
||||
tdls_vdev_deinit(tdls_vdev_obj);
|
||||
|
||||
status = wlan_objmgr_vdev_component_obj_detach(vdev,
|
||||
WLAN_UMAC_COMP_TDLS,
|
||||
tdls_vdev_obj);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
tdls_err("Failed to detach vdev tdls component");
|
||||
|
||||
tdls_vdev_deinit(tdls_vdev_obj);
|
||||
qdf_mem_free(tdls_vdev_obj);
|
||||
if (tdls_soc_obj->tdls_osif_deinit_cb)
|
||||
tdls_soc_obj->tdls_osif_deinit_cb(vdev);
|
||||
qdf_mem_free(tdls_vdev_obj);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
@@ -255,6 +255,7 @@ struct tdls_soc_priv_obj {
|
||||
* @valid_mac_entries: number of valid mac entry in @ct_peer_mac_table
|
||||
* @magic: magic
|
||||
* @tx_queue: tx frame queue
|
||||
* @tdls_teardown_comp: tdls teardown completion
|
||||
*/
|
||||
struct tdls_vdev_priv_obj {
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
@@ -271,6 +272,7 @@ struct tdls_vdev_priv_obj {
|
||||
uint32_t magic;
|
||||
uint8_t session_id;
|
||||
qdf_list_t tx_queue;
|
||||
qdf_event_t tdls_teardown_comp;
|
||||
};
|
||||
|
||||
/**
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user