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:
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user