qcacmn: Add lite monitor set/get functions
-Add lite monitor tx/rx filter config set/get fucntions -Add lite monitor tx/rx peer config set/get functions Change-Id: I47cc1085c64468b8a0fada871e2f5d3707ca7063 CRs-Fixed: 3078298
This commit is contained in:

committed by
Madan Koyyalamudi

parent
a68a2f3b18
commit
7f9da4ae12
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
||||||
|
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -68,4 +69,153 @@ cdp_deliver_tx_mgmt(ol_txrx_soc_handle soc, uint8_t pdev_id,
|
|||||||
return soc->ops->mon_ops->txrx_deliver_tx_mgmt(soc, pdev_id, nbuf);
|
return soc->ops->mon_ops->txrx_deliver_tx_mgmt(soc, pdev_id, nbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef QCA_SUPPORT_LITE_MONITOR
|
||||||
|
/*
|
||||||
|
* cdp_set_lite_mon_config() - Set lite monitor config/filter
|
||||||
|
*
|
||||||
|
*@soc: dp soc handle
|
||||||
|
*@config: lite monitor config
|
||||||
|
*@pdev_id: pdev id
|
||||||
|
*
|
||||||
|
* This API is used to enable/disable lite monitor feature
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS_SUCCESS if value set successfully
|
||||||
|
* QDF_STATUS_E_INVAL false if error
|
||||||
|
*/
|
||||||
|
static inline QDF_STATUS
|
||||||
|
cdp_set_lite_mon_config(ol_txrx_soc_handle soc,
|
||||||
|
struct cdp_lite_mon_filter_config *config,
|
||||||
|
uint8_t pdev_id)
|
||||||
|
{
|
||||||
|
if (!soc || !soc->ops) {
|
||||||
|
dp_cdp_debug("Invalid Instance");
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!soc->ops->mon_ops ||
|
||||||
|
!soc->ops->mon_ops->txrx_set_lite_mon_config)
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
|
||||||
|
return soc->ops->mon_ops->txrx_set_lite_mon_config(soc, config,
|
||||||
|
pdev_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cdp_get_lite_mon_config() - Get lite monitor config
|
||||||
|
*
|
||||||
|
*@soc: dp soc handle
|
||||||
|
*@config: lite monitor config
|
||||||
|
*@pdev_id: pdev id
|
||||||
|
*
|
||||||
|
* This API is used to get lite monitor feature config
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS_SUCCESS if get is successfully
|
||||||
|
* QDF_STATUS_E_INVAL false if error
|
||||||
|
*/
|
||||||
|
static inline QDF_STATUS
|
||||||
|
cdp_get_lite_mon_config(ol_txrx_soc_handle soc,
|
||||||
|
struct cdp_lite_mon_filter_config *config,
|
||||||
|
uint8_t pdev_id)
|
||||||
|
{
|
||||||
|
if (!soc || !soc->ops) {
|
||||||
|
dp_cdp_debug("Invalid Instance");
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!soc->ops->mon_ops ||
|
||||||
|
!soc->ops->mon_ops->txrx_get_lite_mon_config)
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
|
||||||
|
return soc->ops->mon_ops->txrx_get_lite_mon_config(soc, config,
|
||||||
|
pdev_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cdp_set_lite_mon_peer_config() - Set lite monitor peer config
|
||||||
|
*
|
||||||
|
*@soc: dp soc handle
|
||||||
|
*@config: lite monitor peer config
|
||||||
|
*@pdev_id: pdev id
|
||||||
|
*
|
||||||
|
* This API is used to add/del lite monitor peers
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS_SUCCESS if value set successfully
|
||||||
|
* QDF_STATUS_E_INVAL false if error
|
||||||
|
*/
|
||||||
|
static inline QDF_STATUS
|
||||||
|
cdp_set_lite_mon_peer_config(ol_txrx_soc_handle soc,
|
||||||
|
struct cdp_lite_mon_peer_config *config,
|
||||||
|
uint8_t pdev_id)
|
||||||
|
{
|
||||||
|
if (!soc || !soc->ops) {
|
||||||
|
dp_cdp_debug("Invalid Instance");
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!soc->ops->mon_ops ||
|
||||||
|
!soc->ops->mon_ops->txrx_set_lite_mon_peer_config)
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
|
||||||
|
return soc->ops->mon_ops->txrx_set_lite_mon_peer_config(soc, config,
|
||||||
|
pdev_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cdp_get_lite_mon_peer_config() - Get lite monitor peer list
|
||||||
|
*
|
||||||
|
*@soc: dp soc handle
|
||||||
|
*@info: lite monitor peer info
|
||||||
|
*@pdev_id: pdev id
|
||||||
|
*
|
||||||
|
* This API is used to get lite monitor peers
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS_SUCCESS if value set successfully
|
||||||
|
* QDF_STATUS_E_INVAL false if error
|
||||||
|
*/
|
||||||
|
static inline QDF_STATUS
|
||||||
|
cdp_get_lite_mon_peer_config(ol_txrx_soc_handle soc,
|
||||||
|
struct cdp_lite_mon_peer_info *info,
|
||||||
|
uint8_t pdev_id)
|
||||||
|
{
|
||||||
|
if (!soc || !soc->ops) {
|
||||||
|
dp_cdp_debug("Invalid Instance");
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!soc->ops->mon_ops ||
|
||||||
|
!soc->ops->mon_ops->txrx_get_lite_mon_peer_config)
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
|
||||||
|
return soc->ops->mon_ops->txrx_get_lite_mon_peer_config(soc, info,
|
||||||
|
pdev_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cdp_is_lite_mon_enabled() - Get lite monitor enable status
|
||||||
|
*
|
||||||
|
*@soc: dp soc handle
|
||||||
|
*@pdev_id: pdev id
|
||||||
|
*@dir: direction tx/rx
|
||||||
|
*
|
||||||
|
* This API is used to get lite monitor enable status
|
||||||
|
*
|
||||||
|
* Return: 0 if disabled
|
||||||
|
* 1 if enabled
|
||||||
|
*/
|
||||||
|
static inline int
|
||||||
|
cdp_is_lite_mon_enabled(ol_txrx_soc_handle soc,
|
||||||
|
uint8_t pdev_id, uint8_t dir)
|
||||||
|
{
|
||||||
|
if (!soc || !soc->ops) {
|
||||||
|
dp_cdp_debug("Invalid Instance");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!soc->ops->mon_ops ||
|
||||||
|
!soc->ops->mon_ops->txrx_is_lite_mon_enabled)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return soc->ops->mon_ops->txrx_is_lite_mon_enabled(soc, pdev_id, dir);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@@ -25,6 +25,35 @@
|
|||||||
|
|
||||||
#ifndef _CDP_TXRX_MON_STRUCT_H_
|
#ifndef _CDP_TXRX_MON_STRUCT_H_
|
||||||
#define _CDP_TXRX_MON_STRUCT_H_
|
#define _CDP_TXRX_MON_STRUCT_H_
|
||||||
|
|
||||||
|
#ifdef QCA_SUPPORT_LITE_MONITOR
|
||||||
|
#define CDP_LITE_MON_MODE_MAX 3
|
||||||
|
#define CDP_LITE_MON_FRM_TYPE_MAX 3
|
||||||
|
#define CDP_LITE_MON_PEER_MAX 16
|
||||||
|
|
||||||
|
/* lite mon peer action */
|
||||||
|
enum cdp_lite_mon_peer_action {
|
||||||
|
CDP_LITE_MON_PEER_ADD = 0,
|
||||||
|
CDP_LITE_MON_PEER_REMOVE = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* lite mon peer types */
|
||||||
|
enum cdp_lite_mon_peer_type {
|
||||||
|
CDP_LITE_MON_PEER_TYPE_ASSOCIATED = 0,
|
||||||
|
CDP_LITE_MON_PEER_TYPE_NON_ASSOCIATED = 1,
|
||||||
|
CDP_LITE_MON_PEER_TYPE_MAX = 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* lite mon config direction */
|
||||||
|
enum cdp_lite_mon_direction {
|
||||||
|
CDP_LITE_MON_DIRECTION_RX = 1,
|
||||||
|
CDP_LITE_MON_DIRECTION_TX = 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* This should align with nac mac type enumerations in ieee80211_ioctl.h */
|
||||||
|
#define CDP_LITE_MON_PEER_MAC_TYPE_CLIENT 2
|
||||||
|
#endif
|
||||||
|
|
||||||
/* XXX not really a mode; there are really multiple PHY's */
|
/* XXX not really a mode; there are really multiple PHY's */
|
||||||
enum cdp_mon_phymode {
|
enum cdp_mon_phymode {
|
||||||
/* autoselect */
|
/* autoselect */
|
||||||
@@ -354,4 +383,62 @@ struct cdp_pdev_mon_stats {
|
|||||||
uint32_t rx_undecoded_error[CDP_PHYRX_ERR_MAX];
|
uint32_t rx_undecoded_error[CDP_PHYRX_ERR_MAX];
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef QCA_SUPPORT_LITE_MONITOR
|
||||||
|
/**
|
||||||
|
* cdp_lite_mon_filter_config - lite mon set/get filter config
|
||||||
|
* @direction: direction tx/rx
|
||||||
|
* @disable: disables lite mon
|
||||||
|
* @level: MSDU/MPDU/PPDU levels
|
||||||
|
* @metadata: meta information to be added
|
||||||
|
* @mgmt_filter: mgmt filter for modes fp,md,mo
|
||||||
|
* @ctrl_filter: ctrl filter for modes fp,md,mo
|
||||||
|
* @data_filter: data filter for modes fp,md,mo
|
||||||
|
* @len: mgmt/ctrl/data frame lens
|
||||||
|
* @debug: debug options
|
||||||
|
* @vdev_id: output vdev id
|
||||||
|
*/
|
||||||
|
struct cdp_lite_mon_filter_config {
|
||||||
|
uint8_t direction;
|
||||||
|
uint8_t disable;
|
||||||
|
uint8_t level;
|
||||||
|
uint8_t metadata;
|
||||||
|
uint16_t mgmt_filter[CDP_LITE_MON_MODE_MAX];
|
||||||
|
uint16_t ctrl_filter[CDP_LITE_MON_MODE_MAX];
|
||||||
|
uint16_t data_filter[CDP_LITE_MON_MODE_MAX];
|
||||||
|
uint16_t len[CDP_LITE_MON_FRM_TYPE_MAX];
|
||||||
|
uint8_t debug;
|
||||||
|
uint8_t vdev_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cdp_lite_mon_peer_config - lite mon set peer config
|
||||||
|
* @direction: direction tx/rx
|
||||||
|
* @action: add/del
|
||||||
|
* @type: assoc/non-assoc
|
||||||
|
* @vdev_id: peer vdev id
|
||||||
|
* @mac: peer mac
|
||||||
|
*/
|
||||||
|
struct cdp_lite_mon_peer_config {
|
||||||
|
uint8_t direction;
|
||||||
|
uint8_t action;
|
||||||
|
uint8_t type;
|
||||||
|
uint8_t vdev_id;
|
||||||
|
uint8_t mac[QDF_MAC_ADDR_SIZE];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cdp_lite_mon_peer_info - lite mon get peer config
|
||||||
|
* @direction: direction tx/rx
|
||||||
|
* @type: assoc/non-assoc
|
||||||
|
* @count: no of peers
|
||||||
|
* @mac: peer macs
|
||||||
|
*/
|
||||||
|
struct cdp_lite_mon_peer_info {
|
||||||
|
uint8_t direction;
|
||||||
|
uint8_t type;
|
||||||
|
uint8_t count;
|
||||||
|
uint8_t mac[CDP_LITE_MON_PEER_MAX][QDF_MAC_ADDR_SIZE];
|
||||||
|
};
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@@ -930,6 +930,42 @@ struct cdp_mon_ops {
|
|||||||
void (*txrx_enable_mon_reap_timer)(struct cdp_soc_t *soc_hdl,
|
void (*txrx_enable_mon_reap_timer)(struct cdp_soc_t *soc_hdl,
|
||||||
uint8_t pdev_id,
|
uint8_t pdev_id,
|
||||||
bool enable);
|
bool enable);
|
||||||
|
|
||||||
|
#ifdef QCA_SUPPORT_LITE_MONITOR
|
||||||
|
/* set lite monitor config */
|
||||||
|
QDF_STATUS
|
||||||
|
(*txrx_set_lite_mon_config)(
|
||||||
|
struct cdp_soc_t *soc,
|
||||||
|
struct cdp_lite_mon_filter_config *mon_config,
|
||||||
|
uint8_t pdev_id);
|
||||||
|
|
||||||
|
/* get lite monitor config */
|
||||||
|
QDF_STATUS
|
||||||
|
(*txrx_get_lite_mon_config)(
|
||||||
|
struct cdp_soc_t *soc,
|
||||||
|
struct cdp_lite_mon_filter_config *mon_config,
|
||||||
|
uint8_t pdev_id);
|
||||||
|
|
||||||
|
/* set lite monitor peer config */
|
||||||
|
QDF_STATUS
|
||||||
|
(*txrx_set_lite_mon_peer_config)(
|
||||||
|
struct cdp_soc_t *soc,
|
||||||
|
struct cdp_lite_mon_peer_config *peer_config,
|
||||||
|
uint8_t pdev_id);
|
||||||
|
|
||||||
|
/* get lite monitor peer list */
|
||||||
|
QDF_STATUS
|
||||||
|
(*txrx_get_lite_mon_peer_config)(
|
||||||
|
struct cdp_soc_t *soc,
|
||||||
|
struct cdp_lite_mon_peer_info *info,
|
||||||
|
uint8_t pdev_id);
|
||||||
|
|
||||||
|
/* get lite monitor enable/disable status */
|
||||||
|
int
|
||||||
|
(*txrx_is_lite_mon_enabled)(struct cdp_soc_t *soc,
|
||||||
|
uint8_t pdev_id,
|
||||||
|
uint8_t direction);
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
struct cdp_host_stats_ops {
|
struct cdp_host_stats_ops {
|
||||||
@@ -1344,6 +1380,13 @@ struct ol_if_ops {
|
|||||||
uint32_t module_id,
|
uint32_t module_id,
|
||||||
uint32_t arg_count, uint32_t *arg);
|
uint32_t arg_count, uint32_t *arg);
|
||||||
|
|
||||||
|
#ifdef QCA_SUPPORT_LITE_MONITOR
|
||||||
|
int (*config_lite_mon_peer)(struct cdp_ctrl_objmgr_psoc *psoc,
|
||||||
|
uint8_t pdev_id,
|
||||||
|
uint8_t vdev_id,
|
||||||
|
enum cdp_nac_param_cmd cmd,
|
||||||
|
uint8_t *peer_mac);
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef DP_PEER_EXTENDED_API
|
#ifdef DP_PEER_EXTENDED_API
|
||||||
|
@@ -706,6 +706,8 @@ enum WDI_EVENT {
|
|||||||
#ifdef QCA_UNDECODED_METADATA_SUPPORT
|
#ifdef QCA_UNDECODED_METADATA_SUPPORT
|
||||||
WDI_EVENT_RX_PPDU_DESC_UNDECODED_METADATA,
|
WDI_EVENT_RX_PPDU_DESC_UNDECODED_METADATA,
|
||||||
#endif
|
#endif
|
||||||
|
WDI_EVENT_LITE_MON_RX,
|
||||||
|
WDI_EVENT_LITE_MON_TX,
|
||||||
/* End of new event items */
|
/* End of new event items */
|
||||||
WDI_EVENT_LAST
|
WDI_EVENT_LAST
|
||||||
};
|
};
|
||||||
|
@@ -1211,6 +1211,9 @@ struct dp_mon_ops monitor_ops_1_0 = {
|
|||||||
.mon_tx_ppdu_stats_detach = NULL,
|
.mon_tx_ppdu_stats_detach = NULL,
|
||||||
.mon_peer_tx_capture_filter_check = NULL,
|
.mon_peer_tx_capture_filter_check = NULL,
|
||||||
#endif
|
#endif
|
||||||
|
.mon_lite_mon_alloc = NULL,
|
||||||
|
.mon_lite_mon_dealloc = NULL,
|
||||||
|
.mon_lite_mon_vdev_delete = NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct cdp_mon_ops dp_ops_mon_1_0 = {
|
struct cdp_mon_ops dp_ops_mon_1_0 = {
|
||||||
@@ -1222,6 +1225,13 @@ struct cdp_mon_ops dp_ops_mon_1_0 = {
|
|||||||
.soc_config_full_mon_mode = dp_soc_config_full_mon_mode,
|
.soc_config_full_mon_mode = dp_soc_config_full_mon_mode,
|
||||||
.get_mon_pdev_rx_stats = dp_pdev_get_rx_mon_stats,
|
.get_mon_pdev_rx_stats = dp_pdev_get_rx_mon_stats,
|
||||||
.txrx_enable_mon_reap_timer = dp_enable_mon_reap_timer,
|
.txrx_enable_mon_reap_timer = dp_enable_mon_reap_timer,
|
||||||
|
#ifdef QCA_SUPPORT_LITE_MONITOR
|
||||||
|
.txrx_set_lite_mon_config = NULL,
|
||||||
|
.txrx_get_lite_mon_config = NULL,
|
||||||
|
.txrx_set_lite_mon_peer_config = NULL,
|
||||||
|
.txrx_get_lite_mon_peer_config = NULL,
|
||||||
|
.txrx_is_lite_mon_enabled = NULL,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef QCA_MONITOR_OPS_PER_SOC_SUPPORT
|
#ifdef QCA_MONITOR_OPS_PER_SOC_SUPPORT
|
||||||
|
@@ -29,6 +29,9 @@
|
|||||||
#include <hal_be_api_mon.h>
|
#include <hal_be_api_mon.h>
|
||||||
#include <dp_be.h>
|
#include <dp_be.h>
|
||||||
#include <htt_ppdu_stats.h>
|
#include <htt_ppdu_stats.h>
|
||||||
|
#ifdef QCA_SUPPORT_LITE_MONITOR
|
||||||
|
#include "dp_lite_mon.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#if !defined(DISABLE_MON_CONFIG)
|
#if !defined(DISABLE_MON_CONFIG)
|
||||||
|
|
||||||
@@ -1317,6 +1320,9 @@ struct dp_mon_ops monitor_ops_2_0 = {
|
|||||||
#endif
|
#endif
|
||||||
.mon_pdev_ext_init = dp_mon_pdev_ext_init_2_0,
|
.mon_pdev_ext_init = dp_mon_pdev_ext_init_2_0,
|
||||||
.mon_pdev_ext_deinit = dp_mon_pdev_ext_deinit_2_0,
|
.mon_pdev_ext_deinit = dp_mon_pdev_ext_deinit_2_0,
|
||||||
|
.mon_lite_mon_alloc = dp_lite_mon_alloc,
|
||||||
|
.mon_lite_mon_dealloc = dp_lite_mon_dealloc,
|
||||||
|
.mon_lite_mon_vdev_delete = dp_lite_mon_vdev_delete,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct cdp_mon_ops dp_ops_mon_2_0 = {
|
struct cdp_mon_ops dp_ops_mon_2_0 = {
|
||||||
@@ -1328,6 +1334,13 @@ struct cdp_mon_ops dp_ops_mon_2_0 = {
|
|||||||
.soc_config_full_mon_mode = NULL,
|
.soc_config_full_mon_mode = NULL,
|
||||||
.get_mon_pdev_rx_stats = dp_pdev_get_rx_mon_stats,
|
.get_mon_pdev_rx_stats = dp_pdev_get_rx_mon_stats,
|
||||||
.txrx_enable_mon_reap_timer = dp_enable_mon_reap_timer,
|
.txrx_enable_mon_reap_timer = dp_enable_mon_reap_timer,
|
||||||
|
#ifdef QCA_SUPPORT_LITE_MONITOR
|
||||||
|
.txrx_set_lite_mon_config = dp_lite_mon_set_config,
|
||||||
|
.txrx_get_lite_mon_config = dp_lite_mon_get_config,
|
||||||
|
.txrx_set_lite_mon_peer_config = dp_lite_mon_set_peer_config,
|
||||||
|
.txrx_get_lite_mon_peer_config = dp_lite_mon_get_peer_config,
|
||||||
|
.txrx_is_lite_mon_enabled = dp_lite_mon_is_enabled,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef QCA_MONITOR_OPS_PER_SOC_SUPPORT
|
#ifdef QCA_MONITOR_OPS_PER_SOC_SUPPORT
|
||||||
|
@@ -130,6 +130,10 @@ struct dp_mon_pdev_be {
|
|||||||
uint16_t rx_mon_queue_depth;
|
uint16_t rx_mon_queue_depth;
|
||||||
uint16_t desc_count;
|
uint16_t desc_count;
|
||||||
struct dp_mon_desc *status[DP_MON_MAX_STATUS_BUF];
|
struct dp_mon_desc *status[DP_MON_MAX_STATUS_BUF];
|
||||||
|
#ifdef QCA_SUPPORT_LITE_MONITOR
|
||||||
|
struct dp_lite_mon_rx_config *lite_mon_rx_config;
|
||||||
|
struct dp_lite_mon_tx_config *lite_mon_tx_config;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -4974,10 +4974,17 @@ QDF_STATUS dp_mon_pdev_init(struct dp_pdev *pdev)
|
|||||||
if (dp_htt_ppdu_stats_attach(pdev) != QDF_STATUS_SUCCESS)
|
if (dp_htt_ppdu_stats_attach(pdev) != QDF_STATUS_SUCCESS)
|
||||||
goto fail2;
|
goto fail2;
|
||||||
|
|
||||||
|
if (mon_ops->mon_lite_mon_alloc) {
|
||||||
|
if (mon_ops->mon_lite_mon_alloc(pdev) != QDF_STATUS_SUCCESS) {
|
||||||
|
dp_mon_err("%pK: lite mon alloc failed", pdev);
|
||||||
|
goto fail3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (mon_ops->mon_rings_init) {
|
if (mon_ops->mon_rings_init) {
|
||||||
if (mon_ops->mon_rings_init(pdev)) {
|
if (mon_ops->mon_rings_init(pdev)) {
|
||||||
dp_mon_err("%pK: MONITOR rings setup failed", pdev);
|
dp_mon_err("%pK: MONITOR rings setup failed", pdev);
|
||||||
goto fail3;
|
goto fail4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4989,7 +4996,7 @@ QDF_STATUS dp_mon_pdev_init(struct dp_pdev *pdev)
|
|||||||
if (mon_ops->rx_mon_buffers_alloc) {
|
if (mon_ops->rx_mon_buffers_alloc) {
|
||||||
if (mon_ops->rx_mon_buffers_alloc(pdev)) {
|
if (mon_ops->rx_mon_buffers_alloc(pdev)) {
|
||||||
dp_mon_err("%pK: rx mon buffers alloc failed", pdev);
|
dp_mon_err("%pK: rx mon buffers alloc failed", pdev);
|
||||||
goto fail4;
|
goto fail5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5004,13 +5011,15 @@ QDF_STATUS dp_mon_pdev_init(struct dp_pdev *pdev)
|
|||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
fail4:
|
fail5:
|
||||||
if (mon_ops->rx_mon_desc_pool_deinit)
|
if (mon_ops->rx_mon_desc_pool_deinit)
|
||||||
mon_ops->rx_mon_desc_pool_deinit(pdev);
|
mon_ops->rx_mon_desc_pool_deinit(pdev);
|
||||||
|
|
||||||
if (mon_ops->mon_rings_deinit)
|
if (mon_ops->mon_rings_deinit)
|
||||||
mon_ops->mon_rings_deinit(pdev);
|
mon_ops->mon_rings_deinit(pdev);
|
||||||
|
fail4:
|
||||||
|
if (mon_ops->mon_lite_mon_dealloc)
|
||||||
|
mon_ops->mon_lite_mon_dealloc(pdev);
|
||||||
fail3:
|
fail3:
|
||||||
dp_htt_ppdu_stats_detach(pdev);
|
dp_htt_ppdu_stats_detach(pdev);
|
||||||
fail2:
|
fail2:
|
||||||
@@ -5050,6 +5059,8 @@ QDF_STATUS dp_mon_pdev_deinit(struct dp_pdev *pdev)
|
|||||||
if (mon_ops->mon_rings_deinit)
|
if (mon_ops->mon_rings_deinit)
|
||||||
mon_ops->mon_rings_deinit(pdev);
|
mon_ops->mon_rings_deinit(pdev);
|
||||||
dp_cal_client_detach(&mon_pdev->cal_client_ctx);
|
dp_cal_client_detach(&mon_pdev->cal_client_ctx);
|
||||||
|
if (mon_ops->mon_lite_mon_dealloc)
|
||||||
|
mon_ops->mon_lite_mon_dealloc(pdev);
|
||||||
dp_htt_ppdu_stats_detach(pdev);
|
dp_htt_ppdu_stats_detach(pdev);
|
||||||
qdf_spinlock_destroy(&mon_pdev->ppdu_stats_lock);
|
qdf_spinlock_destroy(&mon_pdev->ppdu_stats_lock);
|
||||||
dp_neighbour_peers_detach(pdev);
|
dp_neighbour_peers_detach(pdev);
|
||||||
@@ -5090,6 +5101,10 @@ QDF_STATUS dp_mon_vdev_detach(struct dp_vdev *vdev)
|
|||||||
{
|
{
|
||||||
struct dp_mon_vdev *mon_vdev = vdev->monitor_vdev;
|
struct dp_mon_vdev *mon_vdev = vdev->monitor_vdev;
|
||||||
struct dp_pdev *pdev = vdev->pdev;
|
struct dp_pdev *pdev = vdev->pdev;
|
||||||
|
struct dp_mon_ops *mon_ops = dp_mon_ops_get(pdev->soc);
|
||||||
|
|
||||||
|
if (!mon_ops)
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
if (!mon_vdev)
|
if (!mon_vdev)
|
||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
@@ -5104,6 +5119,9 @@ QDF_STATUS dp_mon_vdev_detach(struct dp_vdev *vdev)
|
|||||||
if (pdev->monitor_pdev->mvdev == vdev)
|
if (pdev->monitor_pdev->mvdev == vdev)
|
||||||
pdev->monitor_pdev->mvdev = NULL;
|
pdev->monitor_pdev->mvdev = NULL;
|
||||||
|
|
||||||
|
if (mon_ops->mon_lite_mon_vdev_delete)
|
||||||
|
mon_ops->mon_lite_mon_vdev_delete(pdev, vdev);
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -28,6 +28,10 @@
|
|||||||
#include "dp_tx_capture.h"
|
#include "dp_tx_capture.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef QCA_SUPPORT_LITE_MONITOR
|
||||||
|
#include "dp_lite_mon.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#define DP_INTR_POLL_TIMER_MS 5
|
#define DP_INTR_POLL_TIMER_MS 5
|
||||||
|
|
||||||
#define MON_VDEV_TIMER_INIT 0x1
|
#define MON_VDEV_TIMER_INIT 0x1
|
||||||
@@ -765,6 +769,10 @@ struct dp_mon_ops {
|
|||||||
#endif
|
#endif
|
||||||
QDF_STATUS (*mon_pdev_ext_init)(struct dp_pdev *pdev);
|
QDF_STATUS (*mon_pdev_ext_init)(struct dp_pdev *pdev);
|
||||||
QDF_STATUS (*mon_pdev_ext_deinit)(struct dp_pdev *pdev);
|
QDF_STATUS (*mon_pdev_ext_deinit)(struct dp_pdev *pdev);
|
||||||
|
QDF_STATUS (*mon_lite_mon_alloc)(struct dp_pdev *pdev);
|
||||||
|
void (*mon_lite_mon_dealloc)(struct dp_pdev *pdev);
|
||||||
|
void (*mon_lite_mon_vdev_delete)(struct dp_pdev *pdev,
|
||||||
|
struct dp_vdev *vdev);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct dp_mon_soc {
|
struct dp_mon_soc {
|
||||||
@@ -3907,6 +3915,7 @@ void dp_mon_register_feature_ops(struct dp_soc *soc)
|
|||||||
*/
|
*/
|
||||||
QDF_STATUS dp_pdev_get_rx_mon_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
|
QDF_STATUS dp_pdev_get_rx_mon_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
|
||||||
struct cdp_pdev_mon_stats *stats);
|
struct cdp_pdev_mon_stats *stats);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* dp_enable_mon_reap_timer() - enable/disable reap timer
|
* dp_enable_mon_reap_timer() - enable/disable reap timer
|
||||||
* @soc_hdl: Datapath soc handle
|
* @soc_hdl: Datapath soc handle
|
||||||
@@ -3917,4 +3926,34 @@ QDF_STATUS dp_pdev_get_rx_mon_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
|
|||||||
*/
|
*/
|
||||||
void dp_enable_mon_reap_timer(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
|
void dp_enable_mon_reap_timer(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
|
||||||
bool enable);
|
bool enable);
|
||||||
|
|
||||||
|
#ifndef QCA_SUPPORT_LITE_MONITOR
|
||||||
|
static inline int
|
||||||
|
dp_lite_mon_is_rx_enabled(struct dp_mon_pdev *mon_pdev)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
dp_lite_mon_is_tx_enabled(struct dp_mon_pdev *mon_pdev)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline QDF_STATUS
|
||||||
|
dp_lite_mon_alloc(struct dp_pdev *pdev)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
dp_lite_mon_dealloc(struct dp_pdev *pdev)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
dp_lite_mon_vdev_delete(struct dp_pdev *pdev, struct dp_vdev *vdev)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif /* _DP_MON_H_ */
|
#endif /* _DP_MON_H_ */
|
||||||
|
@@ -285,6 +285,7 @@ typedef void (*wlan_objmgr_peer_status_handler)(
|
|||||||
* @WLAN_MLO_MGR_ID: MLO manager reference id
|
* @WLAN_MLO_MGR_ID: MLO manager reference id
|
||||||
* @WLAN_MGMT_RX_REO_ID: Management rx reorder reference id
|
* @WLAN_MGMT_RX_REO_ID: Management rx reorder reference id
|
||||||
* @WLAN_MGMT_RX_REO_SIM_ID: Management rx reorder simulation reference id
|
* @WLAN_MGMT_RX_REO_SIM_ID: Management rx reorder simulation reference id
|
||||||
|
* @WLAN_LITE_MON_ID: Lite monitor operations
|
||||||
* @WLAN_REF_ID_MAX: Max id used to generate ref count tracking array
|
* @WLAN_REF_ID_MAX: Max id used to generate ref count tracking array
|
||||||
*/
|
*/
|
||||||
/* New value added to the enum must also be reflected in function
|
/* New value added to the enum must also be reflected in function
|
||||||
@@ -387,6 +388,7 @@ typedef enum {
|
|||||||
WLAN_MGMT_RX_REO_ID = 92,
|
WLAN_MGMT_RX_REO_ID = 92,
|
||||||
WLAN_MGMT_RX_REO_SIM_ID = 93,
|
WLAN_MGMT_RX_REO_SIM_ID = 93,
|
||||||
WLAN_TWT_ID = 94,
|
WLAN_TWT_ID = 94,
|
||||||
|
WLAN_LITE_MON_ID = 95,
|
||||||
WLAN_REF_ID_MAX,
|
WLAN_REF_ID_MAX,
|
||||||
} wlan_objmgr_ref_dbgid;
|
} wlan_objmgr_ref_dbgid;
|
||||||
|
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
|
||||||
|
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -167,6 +168,8 @@ QDF_STATUS wmi_unified_vdev_set_neighbour_rx_cmd_send(
|
|||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qdf_export_symbol(wmi_unified_vdev_set_neighbour_rx_cmd_send);
|
||||||
|
|
||||||
QDF_STATUS wmi_extract_multi_vdev_restart_resp_event(
|
QDF_STATUS wmi_extract_multi_vdev_restart_resp_event(
|
||||||
struct wmi_unified *wmi_handle,
|
struct wmi_unified *wmi_handle,
|
||||||
void *evt_buf,
|
void *evt_buf,
|
||||||
|
Reference in New Issue
Block a user