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
此提交包含在:
@@ -37,6 +37,16 @@ int ucfg_cfr_start_capture(struct wlan_objmgr_pdev *pdev,
|
||||
struct wlan_objmgr_peer *peer,
|
||||
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
|
||||
* @pdev: pointer to pdev object
|
||||
|
@@ -1,3 +1,4 @@
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
@@ -507,8 +508,16 @@ struct pdev_cfr {
|
||||
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
|
||||
* 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);
|
||||
|
||||
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,
|
||||
struct wlan_objmgr_peer *peer)
|
||||
{
|
||||
|
新增問題並參考
封鎖使用者