qcacld-3.0: Add support for packet capture mode
Add support for packet capture mode to monitor packets
on WLAN interface.
Change-Id: I8409479ef7855d51e303028d7e18e6bf89055407
CRs-Fixed: 2611293
diff --git a/Kbuild b/Kbuild
index f8d649e..5c7a30e 100644
--- a/Kbuild
+++ b/Kbuild
@@ -1036,6 +1036,17 @@
$(ACTION_OUI_DIR)/dispatcher/src/wlan_action_oui_ucfg_api.o
endif
+######## PACKET CAPTURE ########
+
+PKT_CAPTURE_DIR := components/pkt_capture
+PKT_CAPTURE_INC := -I$(WLAN_ROOT)/$(PKT_CAPTURE_DIR)/core/inc \
+ -I$(WLAN_ROOT)/$(PKT_CAPTURE_DIR)/dispatcher/inc
+
+ifeq ($(CONFIG_WLAN_FEATURE_PKT_CAPTURE), y)
+PKT_CAPTURE_OBJS := $(PKT_CAPTURE_DIR)/core/src/wlan_pkt_capture_main.o \
+ $(PKT_CAPTURE_DIR)/dispatcher/src/wlan_pkt_capture_ucfg_api.o
+endif
+
########## CLD TARGET_IF #######
CLD_TARGET_IF_DIR := components/target_if
@@ -1984,6 +1995,7 @@
INCS += $(DISA_INC)
INCS += $(ACTION_OUI_INC)
+INCS += $(PKT_CAPTURE_INC)
INCS += $(UMAC_DISP_INC)
INCS += $(UMAC_SCAN_INC)
@@ -2092,6 +2104,10 @@
OBJS += $(ACTION_OUI_OBJS)
endif
+ifeq ($(CONFIG_WLAN_FEATURE_PKT_CAPTURE), y)
+OBJS += $(PKT_CAPTURE_OBJS)
+endif
+
OBJS += $(UMAC_DISP_OBJS)
OBJS += $(UMAC_SCAN_OBJS)
OBJS += $(UMAC_COMMON_OBJS)
@@ -2687,6 +2703,8 @@
cppflags-$(CONFIG_FEATURE_WLAN_D0WOW) += -DFEATURE_WLAN_D0WOW
+cppflags-$(CONFIG_WLAN_FEATURE_PKT_CAPTURE) += -DWLAN_FEATURE_PKT_CAPTURE
+
cppflags-$(CONFIG_QCA_WIFI_NAPIER_EMULATION) += -DQCA_WIFI_NAPIER_EMULATION
cppflags-$(CONFIG_SHADOW_V2) += -DCONFIG_SHADOW_V2
cppflags-$(CONFIG_QCA6290_HEADERS_DEF) += -DQCA6290_HEADERS_DEF
diff --git a/components/pkt_capture/core/inc/wlan_pkt_capture_main.h b/components/pkt_capture/core/inc/wlan_pkt_capture_main.h
new file mode 100644
index 0000000..053e108
--- /dev/null
+++ b/components/pkt_capture/core/inc/wlan_pkt_capture_main.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 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
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/**
+ * DOC: Declare private API which shall be used internally only
+ * in pkt_capture component. This file shall include prototypes of
+ * various notification handlers and logging functions.
+ *
+ * Note: This API should be never accessed out of pkt_capture component.
+ */
+
+#ifndef _WLAN_PKT_CAPTURE_MAIN_H_
+#define _WLAN_PKT_CAPTURE_MAIN_H_
+
+#include <qdf_types.h>
+#include "wlan_pkt_capture_priv.h"
+#include "wlan_pkt_capture_objmgr.h"
+
+#define pkt_capture_log(level, args...) \
+ QDF_TRACE(QDF_MODULE_ID_PKT_CAPTURE, level, ## args)
+
+#define pkt_capture_logfl(level, format, args...) \
+ pkt_capture_log(level, FL(format), ## args)
+
+#define pkt_capture_fatal(format, args...) \
+ pkt_capture_logfl(QDF_TRACE_LEVEL_FATAL, format, ## args)
+#define pkt_capture_err(format, args...) \
+ pkt_capture_logfl(QDF_TRACE_LEVEL_ERROR, format, ## args)
+#define pkt_capture_warn(format, args...) \
+ pkt_capture_logfl(QDF_TRACE_LEVEL_WARN, format, ## args)
+#define pkt_capture_info(format, args...) \
+ pkt_capture_logfl(QDF_TRACE_LEVEL_INFO, format, ## args)
+#define pkt_capture_debug(format, args...) \
+ pkt_capture_logfl(QDF_TRACE_LEVEL_DEBUG, format, ## args)
+
+#define PKT_CAPTURE_ENTER() pkt_capture_debug("enter")
+#define PKT_CAPTURE_EXIT() pkt_capture_debug("exit")
+
+/**
+ * pkt_capture_vdev_create_notification() - Handler for vdev create notify.
+ * @vdev: vdev which is going to be created by objmgr
+ * @arg: argument for notification handler.
+ *
+ * Allocate and attach vdev private object.
+ *
+ * Return: QDF_STATUS status in case of success else return error.
+ */
+QDF_STATUS
+pkt_capture_vdev_create_notification(struct wlan_objmgr_vdev *vdev, void *arg);
+
+/**
+ * pkt_capture_vdev_destroy_notification() - Handler for vdev destroy notify.
+ * @vdev: vdev which is going to be destroyed by objmgr
+ * @arg: argument for notification handler.
+ *
+ * Deallocate and detach vdev private object.
+ *
+ * Return QDF_STATUS status in case of success else return error
+ */
+QDF_STATUS
+pkt_capture_vdev_destroy_notification(struct wlan_objmgr_vdev *vdev, void *arg);
+
+#endif /* end of _WLAN_PKT_CAPTURE_MAIN_H_ */
diff --git a/components/pkt_capture/core/inc/wlan_pkt_capture_objmgr.h b/components/pkt_capture/core/inc/wlan_pkt_capture_objmgr.h
new file mode 100644
index 0000000..b89541e
--- /dev/null
+++ b/components/pkt_capture/core/inc/wlan_pkt_capture_objmgr.h
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 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
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/**
+ * DOC: This file contains various object manager related wrappers and helpers
+ */
+
+#ifndef _WLAN_PKT_CAPTURE_OBJMGR_H
+#define _WLAN_PKT_CAPTURE_OBJMGR_H
+
+#include "wlan_cmn.h"
+#include "wlan_objmgr_cmn.h"
+#include "wlan_objmgr_vdev_obj.h"
+#include "wlan_objmgr_global_obj.h"
+
+/**
+ * pkt_capture_vdev_get_ref() - Wrapper to increment pkt_capture ref count
+ * @vdev: vdev object
+ *
+ * Wrapper for pkt_capture to increment ref count after checking valid
+ * object state.
+ *
+ * Return: SUCCESS/FAILURE
+ */
+static inline
+QDF_STATUS pkt_capture_vdev_get_ref(struct wlan_objmgr_vdev *vdev)
+{
+ return wlan_objmgr_vdev_try_get_ref(vdev, WLAN_PKT_CAPTURE_ID);
+}
+
+/**
+ * pkt_capture_vdev_put_ref() - Wrapper to decrement pkt_capture ref count
+ * @vdev: vdev object
+ *
+ * Wrapper for pkt_capture to decrement ref count of vdev.
+ *
+ * Return: SUCCESS/FAILURE
+ */
+static inline
+void pkt_capture_vdev_put_ref(struct wlan_objmgr_vdev *vdev)
+{
+ return wlan_objmgr_vdev_release_ref(vdev, WLAN_PKT_CAPTURE_ID);
+}
+
+/**
+ * pkt_capture_vdev_get_priv() - Wrapper to retrieve vdev priv obj
+ * @vdev: vdev pointer
+ *
+ * Wrapper for pkt_capture to get vdev private object pointer.
+ *
+ * Return: Private object of vdev
+ */
+static inline struct pkt_capture_vdev_priv *
+pkt_capture_vdev_get_priv(struct wlan_objmgr_vdev *vdev)
+{
+ struct pkt_capture_vdev_priv *vdev_priv;
+
+ vdev_priv = wlan_objmgr_vdev_get_comp_private_obj(
+ vdev,
+ WLAN_UMAC_COMP_PKT_CAPTURE);
+ QDF_BUG(vdev_priv);
+
+ return vdev_priv;
+}
+
+#endif /* _WLAN_PKT_CAPTURE_OBJMGR_H */
diff --git a/components/pkt_capture/core/inc/wlan_pkt_capture_priv.h b/components/pkt_capture/core/inc/wlan_pkt_capture_priv.h
new file mode 100644
index 0000000..d7f40c3
--- /dev/null
+++ b/components/pkt_capture/core/inc/wlan_pkt_capture_priv.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 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
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/**
+ * DOC: Declare private API which shall be used internally only
+ * in pkt_capture component. This file shall include prototypes of
+ * pkt_capture parsing and send logic.
+ *
+ * Note: This API should be never accessed out of pkt_capture component.
+ */
+
+#ifndef _WLAN_PKT_CAPTURE_PRIV_STRUCT_H_
+#define _WLAN_PKT_CAPTURE_PRIV_STRUCT_H_
+
+#include "wlan_pkt_capture_objmgr.h"
+
+/**
+ * struct pkt_capture_vdev_priv - Private object to be stored in vdev
+ * @vdev: pointer to vdev object
+ */
+struct pkt_capture_vdev_priv {
+ struct wlan_objmgr_vdev *vdev;
+};
+#endif /* End of _WLAN_PKT_CAPTURE_PRIV_STRUCT_H_ */
diff --git a/components/pkt_capture/core/src/wlan_pkt_capture_main.c b/components/pkt_capture/core/src/wlan_pkt_capture_main.c
new file mode 100644
index 0000000..e066a76
--- /dev/null
+++ b/components/pkt_capture/core/src/wlan_pkt_capture_main.c
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 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
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/**
+ * DOC: Implement various notification handlers which are accessed
+ * internally in pkt_capture component only.
+ */
+
+#include "wlan_pkt_capture_main.h"
+
+/**
+ * pkt_capture_vdev_create_notification() - Handler for vdev create notify.
+ * @vdev: vdev which is going to be created by objmgr
+ * @arg: argument for notification handler.
+ *
+ * Allocate and attach vdev private object.
+ *
+ * Return: QDF_STATUS status in case of success else return error.
+ */
+QDF_STATUS
+pkt_capture_vdev_create_notification(struct wlan_objmgr_vdev *vdev, void *arg)
+{
+ struct pkt_capture_vdev_priv *vdev_priv;
+ QDF_STATUS status;
+
+ vdev_priv = qdf_mem_malloc(sizeof(*vdev_priv));
+ if (!vdev_priv) {
+ status = QDF_STATUS_E_NOMEM;
+ goto exit;
+ }
+
+ status = wlan_objmgr_vdev_component_obj_attach(
+ vdev,
+ WLAN_UMAC_COMP_PKT_CAPTURE,
+ (void *)vdev_priv, QDF_STATUS_SUCCESS);
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
+ pkt_capture_err("Failed to attach priv with vdev");
+ goto free_vdev_priv;
+ }
+
+ vdev_priv->vdev = vdev;
+ goto exit;
+
+free_vdev_priv:
+ qdf_mem_free(vdev_priv);
+ status = QDF_STATUS_E_INVAL;
+exit:
+ return status;
+}
+
+/**
+ * pkt_capture_vdev_destroy_notification() - Handler for vdev destroy notify.
+ * @vdev: vdev which is going to be destroyed by objmgr
+ * @arg: argument for notification handler.
+ *
+ * Deallocate and detach vdev private object.
+ *
+ * Return QDF_STATUS status in case of success else return error
+ */
+QDF_STATUS
+pkt_capture_vdev_destroy_notification(struct wlan_objmgr_vdev *vdev, void *arg)
+{
+ struct pkt_capture_vdev_priv *vdev_priv = NULL;
+ QDF_STATUS status = QDF_STATUS_E_FAILURE;
+
+ vdev_priv = pkt_capture_vdev_get_priv(vdev);
+ if (!vdev_priv) {
+ pkt_capture_err("vdev priv is NULL");
+ goto exit;
+ }
+
+ status = wlan_objmgr_vdev_component_obj_detach(
+ vdev,
+ WLAN_UMAC_COMP_PKT_CAPTURE,
+ (void *)vdev_priv);
+ if (!QDF_IS_STATUS_SUCCESS(status))
+ pkt_capture_err("Failed to detach priv with psoc");
+
+ qdf_mem_free(vdev_priv);
+exit:
+ return status;
+}
diff --git a/components/pkt_capture/dispatcher/inc/wlan_pkt_capture_ucfg_api.h b/components/pkt_capture/dispatcher/inc/wlan_pkt_capture_ucfg_api.h
new file mode 100644
index 0000000..a9ce412
--- /dev/null
+++ b/components/pkt_capture/dispatcher/inc/wlan_pkt_capture_ucfg_api.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 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
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/**
+ * DOC: Declare public API related to the pkt_capture called by north bound
+ * HDD/OSIF/LIM
+ */
+
+#ifndef _WLAN_PKT_CAPTURE_UCFG_API_H_
+#define _WLAN_PKT_CAPTURE_UCFG_API_H_
+
+#include <qdf_status.h>
+#include <qdf_types.h>
+#include "wlan_pkt_capture_objmgr.h"
+
+#ifdef WLAN_FEATURE_PKT_CAPTURE
+/**
+ * ucfg_pkt_capture_init() - Packet capture component initialization.
+ *
+ * This function gets called when packet capture initializing.
+ *
+ * Return: QDF_STATUS_SUCCESS - in case of success.
+ */
+QDF_STATUS ucfg_pkt_capture_init(void);
+
+/**
+ * ucfg_pkt_capture_deinit() - Packet capture component de-init.
+ *
+ * This function gets called when packet capture de-init.
+ *
+ * Return: None
+ */
+void ucfg_pkt_capture_deinit(void);
+#else
+static inline
+QDF_STATUS ucfg_pkt_capture_init(void)
+{
+ return QDF_STATUS_SUCCESS;
+}
+
+static inline
+void ucfg_pkt_capture_deinit(void)
+{
+}
+#endif /* WLAN_FEATURE_PKT_CAPTURE */
+#endif /* _WLAN_PKT_CAPTURE_UCFG_API_H_ */
diff --git a/components/pkt_capture/dispatcher/src/wlan_pkt_capture_ucfg_api.c b/components/pkt_capture/dispatcher/src/wlan_pkt_capture_ucfg_api.c
new file mode 100644
index 0000000..1a9665e
--- /dev/null
+++ b/components/pkt_capture/dispatcher/src/wlan_pkt_capture_ucfg_api.c
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 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
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/**
+ * DOC: Public API implementation of pkt_capture called by north bound HDD/OSIF.
+ */
+
+#include "wlan_pkt_capture_objmgr.h"
+#include "wlan_pkt_capture_main.h"
+#include "wlan_pkt_capture_ucfg_api.h"
+
+/**
+ * ucfg_pkt_capture_init() - Packet capture component initialization.
+ *
+ * This function gets called when packet capture initializing.
+ *
+ * Return: QDF_STATUS_SUCCESS - in case of success.
+ */
+QDF_STATUS ucfg_pkt_capture_init(void)
+{
+ QDF_STATUS status;
+
+ status = wlan_objmgr_register_vdev_create_handler(
+ WLAN_UMAC_COMP_PKT_CAPTURE,
+ pkt_capture_vdev_create_notification, NULL);
+ if (!QDF_IS_STATUS_SUCCESS(status)) {
+ pkt_capture_err("Failed to register vdev create handler");
+ goto exit;
+ }
+
+ status = wlan_objmgr_register_vdev_destroy_handler(
+ WLAN_UMAC_COMP_PKT_CAPTURE,
+ pkt_capture_vdev_destroy_notification, NULL);
+ if (QDF_IS_STATUS_SUCCESS(status)) {
+ pkt_capture_debug("vdev create/del notifications registered");
+ goto exit;
+ }
+
+ pkt_capture_err("Failed to register vdev delete handler");
+ wlan_objmgr_unregister_vdev_create_handler(
+ WLAN_UMAC_COMP_PKT_CAPTURE,
+ pkt_capture_vdev_create_notification,
+ NULL);
+exit:
+ return status;
+}
+
+/**
+ * ucfg_pkt_capture_deinit() - Packet capture component de-init.
+ *
+ * This function gets called when packet capture de-init.
+ *
+ * Return: None
+ */
+void ucfg_pkt_capture_deinit(void)
+{
+ QDF_STATUS status;
+
+ status = wlan_objmgr_unregister_vdev_create_handler(
+ WLAN_UMAC_COMP_PKT_CAPTURE,
+ pkt_capture_vdev_create_notification, NULL);
+ if (!QDF_IS_STATUS_SUCCESS(status))
+ pkt_capture_err("Failed to unregister vdev create handler");
+
+ status = wlan_objmgr_unregister_vdev_destroy_handler(
+ WLAN_UMAC_COMP_PKT_CAPTURE,
+ pkt_capture_vdev_destroy_notification,
+ NULL);
+ if (!QDF_IS_STATUS_SUCCESS(status))
+ pkt_capture_err("Failed to unregister vdev delete handler");
+}
diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c
index effeeb2..c13d9ea 100644
--- a/core/hdd/src/wlan_hdd_main.c
+++ b/core/hdd/src/wlan_hdd_main.c
@@ -175,6 +175,7 @@
#include "ol_txrx.h"
#include "wlan_hdd_sta_info.h"
#include "mac_init_api.h"
+#include "wlan_pkt_capture_ucfg_api.h"
#ifdef MODULE
#define WLAN_MODULE_NAME module_name(THIS_MODULE)
@@ -342,6 +343,7 @@
[QDF_MODULE_ID_DIRECT_BUF_RX] = {QDF_TRACE_LEVEL_ALL},
[QDF_MODULE_ID_SPECTRAL] = {QDF_TRACE_LEVEL_ALL},
[QDF_MODULE_ID_WIFIPOS] = {QDF_TRACE_LEVEL_ALL},
+ [QDF_MODULE_ID_PKT_CAPTURE] = {QDF_TRACE_LEVEL_ALL},
};
struct notifier_block hdd_netdev_notifier;
@@ -14268,8 +14270,14 @@
if (QDF_IS_STATUS_ERROR(status))
goto tdls_deinit;
+ status = ucfg_pkt_capture_init();
+ if (QDF_IS_STATUS_ERROR(status))
+ goto blm_deinit;
+
return QDF_STATUS_SUCCESS;
+blm_deinit:
+ ucfg_blm_deinit();
tdls_deinit:
ucfg_tdls_deinit();
@@ -14313,6 +14321,7 @@
static void hdd_component_deinit(void)
{
/* deinitialize non-converged components */
+ ucfg_pkt_capture_deinit();
ucfg_blm_deinit();
ucfg_tdls_deinit();
policy_mgr_deinit();