qcacld-3.0: Add support for peer_delete_all in sap

Currently, only broadcast disassociation is supported
and deauth is sent in a unicast manner.
With peer delete all support, HDD sends a single call
to PE for broadcast deauth request. PE module sends a
single broadcast deauth frame and on TX completion,
calls vdev_mgr_peer_delete_all_send. This issues the
new WMI_VDEV_DELETE_ALL_PEER_CMDID to FW to cleanup
peers entries corresponding to VDEV ID and also flush
TIDS internally.
On receiving the peer delete all response, target_if
cleans object manager entries and datapath cleans up.
But PEER unmap is done iterating through all peer entries
individually. After this a single eSAP_STA_DISASSOC_EVENT
is received in HDD signalling the completion of broadcast
deauth procedure.

Change-Id: I928461606154380eef21a02cc7306921ceb9e16e
CRs-Fixed: 2585005
This commit is contained in:
Gururaj Pandurangi
2020-02-13 13:35:02 -08:00
committed by nshrivas
parent 62a62e6d78
commit 8ccb6a72e2
9 changed files with 302 additions and 41 deletions

View File

@@ -1212,6 +1212,18 @@ vdevmgr_vdev_start_rsp_handle(struct vdev_mlme_obj *vdev_mlme,
return status;
}
static QDF_STATUS
vdevmgr_vdev_peer_delete_all_rsp_handle(struct vdev_mlme_obj *vdev_mlme,
struct peer_delete_all_response *rsp)
{
QDF_STATUS status;
status = lim_process_mlm_del_all_sta_rsp(vdev_mlme, rsp);
if (QDF_IS_STATUS_ERROR(status))
mlme_err("Failed to call lim_process_mlm_del_all_sta_rsp");
return status;
}
QDF_STATUS mlme_vdev_self_peer_create(struct wlan_objmgr_vdev *vdev)
{
struct vdev_mlme_obj *vdev_mlme;
@@ -1462,6 +1474,8 @@ static struct vdev_mlme_ops sta_mlme_ops = {
* to INIT state
* @mlme_vdev_is_newchan_no_cac: callback to check if new channel is DFS
* and cac is not required
* @mlme_vdev_ext_peer_delete_all_rsp: callback to handle vdev delete all peer
* response and send result to upper layer
*/
static struct vdev_mlme_ops ap_mlme_ops = {
.mlme_vdev_start_send = ap_mlme_vdev_start_send,
@@ -1481,6 +1495,8 @@ static struct vdev_mlme_ops ap_mlme_ops = {
.mlme_vdev_is_newchan_no_cac = ap_mlme_vdev_is_newchan_no_cac,
.mlme_vdev_ext_stop_rsp = vdevmgr_vdev_stop_rsp_handle,
.mlme_vdev_ext_start_rsp = vdevmgr_vdev_start_rsp_handle,
.mlme_vdev_ext_peer_delete_all_rsp =
vdevmgr_vdev_peer_delete_all_rsp_handle,
};
static struct vdev_mlme_ops mon_mlme_ops = {