From 6ba047a381b5d058619b3ab636c41e06f7737cd7 Mon Sep 17 00:00:00 2001 From: Wu Gao Date: Wed, 8 Apr 2020 00:10:09 +0800 Subject: [PATCH] qcacmn: Add interface to write string of CFR stopping Add a interface to write string of CFR stopping, and indicate to userspace that CFR has stopped. Change-Id: Ib1d63cb75cd311b367d5d8100c5c4eb92980392d CRs-Fixed: 2659373 --- umac/cfr/core/inc/cfr_defs_i.h | 14 ++++++++++++- umac/cfr/core/src/cfr_common.c | 22 +++++++++++++++++++++ umac/cfr/dispatcher/inc/wlan_cfr_ucfg_api.h | 10 ++++++++++ umac/cfr/dispatcher/src/wlan_cfr_ucfg_api.c | 10 ++++++++++ 4 files changed, 55 insertions(+), 1 deletion(-) diff --git a/umac/cfr/core/inc/cfr_defs_i.h b/umac/cfr/core/inc/cfr_defs_i.h index 9abee4a51852..196071670a69 100644 --- a/umac/cfr/core/inc/cfr_defs_i.h +++ b/umac/cfr/core/inc/cfr_defs_i.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2019-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 @@ -31,6 +31,8 @@ #include #include +#define CFR_STOP_STR "CFR-CAPTURE-STOPPED" + /** * wlan_cfr_psoc_obj_create_handler() - psoc object create handler for cfr * @psoc - pointer to psoc object @@ -130,4 +132,14 @@ cfr_streamfs_write(struct pdev_cfr *pa, const void *write_data, QDF_STATUS cfr_streamfs_flush(struct pdev_cfr *pa); +/** + * cfr_stop_indication() - write cfr stop string + * @vdev - pointer to vdev object + * + * Write stop string and indicate to up layer. + * + * Return: status of write CFR stop string + */ +QDF_STATUS cfr_stop_indication(struct wlan_objmgr_vdev *vdev); + #endif diff --git a/umac/cfr/core/src/cfr_common.c b/umac/cfr/core/src/cfr_common.c index 4a77184e4a18..10b81df248c9 100644 --- a/umac/cfr/core/src/cfr_common.c +++ b/umac/cfr/core/src/cfr_common.c @@ -302,3 +302,25 @@ QDF_STATUS cfr_streamfs_flush(struct pdev_cfr *pa) return QDF_STATUS_SUCCESS; } + +QDF_STATUS cfr_stop_indication(struct wlan_objmgr_vdev *vdev) +{ + struct pdev_cfr *pa; + uint32_t status; + struct wlan_objmgr_pdev *pdev; + + pdev = wlan_vdev_get_pdev(vdev); + pa = wlan_objmgr_pdev_get_comp_private_obj(pdev, WLAN_UMAC_COMP_CFR); + if (!pa) { + cfr_err("pdev_cfr is NULL\n"); + return QDF_STATUS_E_INVAL; + } + + status = cfr_streamfs_write(pa, (const void *)CFR_STOP_STR, + sizeof(CFR_STOP_STR)); + + status = cfr_streamfs_flush(pa); + cfr_debug("stop indication done"); + + return status; +} diff --git a/umac/cfr/dispatcher/inc/wlan_cfr_ucfg_api.h b/umac/cfr/dispatcher/inc/wlan_cfr_ucfg_api.h index 16f969da63fb..50f2889da0d5 100644 --- a/umac/cfr/dispatcher/inc/wlan_cfr_ucfg_api.h +++ b/umac/cfr/dispatcher/inc/wlan_cfr_ucfg_api.h @@ -96,6 +96,16 @@ int ucfg_cfr_set_timer(struct wlan_objmgr_pdev *pdev, uint32_t value); */ int ucfg_cfr_get_timer(struct wlan_objmgr_pdev *pdev); +/** + * ucfg_cfr_stop_indication() - User space API to write cfr stop string + * @vdev - pointer to vdev object + * + * Write stop string and indicate to up layer. + * + * Return: status of write CFR stop string + */ +QDF_STATUS ucfg_cfr_stop_indication(struct wlan_objmgr_vdev *vdev); + #ifdef WLAN_ENH_CFR_ENABLE /* Channel capture recipe filters */ enum capture_type { diff --git a/umac/cfr/dispatcher/src/wlan_cfr_ucfg_api.c b/umac/cfr/dispatcher/src/wlan_cfr_ucfg_api.c index cb9eee2627d9..df90c57889da 100644 --- a/umac/cfr/dispatcher/src/wlan_cfr_ucfg_api.c +++ b/umac/cfr/dispatcher/src/wlan_cfr_ucfg_api.c @@ -311,6 +311,16 @@ int ucfg_cfr_list_peers(struct wlan_objmgr_pdev *pdev) return 0; } +QDF_STATUS ucfg_cfr_stop_indication(struct wlan_objmgr_vdev *vdev) +{ + if (!vdev) { + cfr_err("null vdev"); + return QDF_STATUS_E_INVAL; + } + + return cfr_stop_indication(vdev); +} + #ifdef WLAN_ENH_CFR_ENABLE static inline