qcacmn: Add function to get CFR capture status

This function is used to disallow HW mode change if
CFR capture is in progress.

CRs-fixed:2663183

Change-Id: Ib5939c1f5743a1aa3cf7594c98fe4bbcc6ced49f
This commit is contained in:
Manoj Ekbote
2020-04-13 16:49:22 -07:00
committed by nshrivas
parent 41c0716617
commit f87f43f8b2
3 changed files with 64 additions and 2 deletions

View File

@@ -37,6 +37,16 @@ int ucfg_cfr_start_capture(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_peer *peer, struct wlan_objmgr_peer *peer,
struct cfr_capture_params *cfr_params); struct cfr_capture_params *cfr_params);
/**
* ucfg_cfr_get_capture_status() - function to populate capture status
* @pdev: pointer to pdev object
* @status: capture status
*
* Return: none
*/
void ucfg_cfr_get_capture_status(struct wlan_objmgr_pdev *pdev,
enum cfr_capt_status *status);
/** /**
* ucfg_cfr_stop_capture() - function to stop cfr capture for connected client * ucfg_cfr_stop_capture() - function to stop cfr capture for connected client
* @pdev: pointer to pdev object * @pdev: pointer to pdev object

View File

@@ -1,3 +1,4 @@
/* /*
* Copyright (c) 2019-2020 The Linux Foundation. All rights reserved. * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
* *
@@ -507,8 +508,16 @@ struct pdev_cfr {
qdf_spinlock_t lut_lock; qdf_spinlock_t lut_lock;
}; };
#define PEER_CFR_CAPTURE_ENABLE 1 /**
#define PEER_CFR_CAPTURE_DISABLE 0 * enum cfr_capt_status - CFR capture status
*/
enum cfr_capt_status {
/* Capture not in progress */
PEER_CFR_CAPTURE_DISABLE,
/* Capture in progress */
PEER_CFR_CAPTURE_ENABLE,
};
/** /**
* struct peer_cfr - private peer object for cfr * struct peer_cfr - private peer object for cfr
* peer_obj: pointer to peer_obj * peer_obj: pointer to peer_obj

View File

@@ -267,6 +267,49 @@ int ucfg_cfr_get_timer(struct wlan_objmgr_pdev *pdev)
} }
qdf_export_symbol(ucfg_cfr_get_timer); qdf_export_symbol(ucfg_cfr_get_timer);
static void cfr_iter_peer_handler(struct wlan_objmgr_pdev *pdev,
void *object, void *arg)
{
struct wlan_objmgr_peer *peer = (struct wlan_objmgr_peer *)object;
struct peer_cfr *pe;
int *cfr_capt_status = (int *)arg;
if (*cfr_capt_status == PEER_CFR_CAPTURE_ENABLE)
return;
if (!peer || !pdev) {
cfr_err("peer or pdev object is NULL");
return;
}
if (wlan_vdev_get_selfpeer(peer->peer_objmgr.vdev) == peer)
return;
pe = wlan_objmgr_peer_get_comp_private_obj(peer, WLAN_UMAC_COMP_CFR);
if (!pe) {
cfr_err("PEER cfr object is NULL!");
return;
}
if (pe->request == PEER_CFR_CAPTURE_ENABLE) {
*cfr_capt_status = pe->request;
cfr_debug("CFR capture running for peer "
QDF_MAC_ADDR_STR,
QDF_MAC_ADDR_ARRAY(peer->macaddr));
}
}
void ucfg_cfr_get_capture_status(struct wlan_objmgr_pdev *pdev,
enum cfr_capt_status *status)
{
*status = PEER_CFR_CAPTURE_DISABLE;
wlan_objmgr_pdev_iterate_obj_list(pdev, WLAN_PEER_OP,
cfr_iter_peer_handler,
status, 1, WLAN_CFR_ID);
}
qdf_export_symbol(ucfg_cfr_get_capture_status);
int ucfg_cfr_stop_capture(struct wlan_objmgr_pdev *pdev, int ucfg_cfr_stop_capture(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_peer *peer) struct wlan_objmgr_peer *peer)
{ {