qcacmn: Conditionally compile monitor related features and issue fixes

PATCH[7/7]:
This patch consists following changes:
 -Conditionally compile all monitor destination ring related code
  Macro used QCA_MONITOR_PKT_SUPPORT
 -Add QCA_ENHANCED_STATS_SUPPORT macro to conditionally compile
  enhanced stats support
 -Use QCA_MCOPY_SUPPORT and QCA_TX_CAPTURE_SUPPORT macros
  to conditionally compile MCOPY and Tx capture features
  respectively
 -Use QCN_IE macro to conditionally compile BPR
  feature
 -Use QCA_ADVANCE_MON_FILTER_SUPPORT macro to conditionally
  compile advance monitor filter feature
 -Fix vdev attach issue for special and smart monitor vap
 -Fix status ring initialization issue.

Change-Id: I0deaa28a9a54bf34b0f41e6dd510fdd8d4992db2
CRs-Fixed: 2983780
This commit is contained in:
aloksing
2021-06-14 20:12:04 +05:30
committed by Madan Koyyalamudi
parent 53fe7000ba
commit c60b9619a3
24 changed files with 2719 additions and 1971 deletions

View File

@@ -35,6 +35,7 @@
#ifdef FEATURE_PERPKT_INFO
#include "dp_ratetable.h"
#endif
#include <qdf_module.h>
#define HTT_TLV_HDR_LEN HTT_T2H_EXT_STATS_CONF_TLV_HDR_SIZE
@@ -803,6 +804,8 @@ fail1:
qdf_nbuf_free(htt_msg);
return QDF_STATUS_E_FAILURE;
}
qdf_export_symbol(htt_h2t_full_mon_cfg);
#else
int htt_h2t_full_mon_cfg(struct htt_soc *htt_soc,
uint8_t pdev_id,
@@ -811,6 +814,7 @@ int htt_h2t_full_mon_cfg(struct htt_soc *htt_soc,
return 0;
}
qdf_export_symbol(htt_h2t_full_mon_cfg);
#endif
/*
@@ -1545,6 +1549,8 @@ fail0:
return QDF_STATUS_E_FAILURE;
}
qdf_export_symbol(htt_h2t_rx_ring_cfg);
#if defined(HTT_STATS_ENABLE)
static inline QDF_STATUS dp_send_htt_stat_resp(struct htt_stats_context *htt_stats,
struct dp_soc *soc, qdf_nbuf_t htt_msg)
@@ -2096,6 +2102,52 @@ dp_get_srng_ring_state_from_hal(struct dp_soc *soc,
return QDF_STATUS_SUCCESS;
}
#ifdef QCA_MONITOR_PKT_SUPPORT
static void
dp_queue_mon_ring_stats(struct dp_pdev *pdev,
int lmac_id, uint32_t *num_srng,
struct dp_soc_srngs_state *soc_srngs_state)
{
QDF_STATUS status;
if (pdev->soc->wlan_cfg_ctx->rxdma1_enable) {
status = dp_get_srng_ring_state_from_hal
(pdev->soc, pdev,
&pdev->soc->rxdma_mon_buf_ring[lmac_id],
RXDMA_MONITOR_BUF,
&soc_srngs_state->ring_state[*num_srng]);
if (status == QDF_STATUS_SUCCESS)
qdf_assert_always(++(*num_srng) < DP_MAX_SRNGS);
status = dp_get_srng_ring_state_from_hal
(pdev->soc, pdev,
&pdev->soc->rxdma_mon_dst_ring[lmac_id],
RXDMA_MONITOR_DST,
&soc_srngs_state->ring_state[*num_srng]);
if (status == QDF_STATUS_SUCCESS)
qdf_assert_always(++(*num_srng) < DP_MAX_SRNGS);
status = dp_get_srng_ring_state_from_hal
(pdev->soc, pdev,
&pdev->soc->rxdma_mon_desc_ring[lmac_id],
RXDMA_MONITOR_DESC,
&soc_srngs_state->ring_state[*num_srng]);
if (status == QDF_STATUS_SUCCESS)
qdf_assert_always(++(*num_srng) < DP_MAX_SRNGS);
}
}
#else
static void
dp_queue_mon_ring_stats(struct dp_pdev *pdev,
int lmac_id, uint32_t *num_srng,
struct dp_soc_srngs_state *soc_srngs_state)
{
}
#endif
/**
* dp_queue_srng_ring_stats(): Print pdev hal level ring stats
* @pdev: DP_pdev handle
@@ -2258,34 +2310,8 @@ static void dp_queue_ring_stats(struct dp_pdev *pdev)
lmac_id = dp_get_lmac_id_for_pdev_id(pdev->soc,
mac_id, pdev->pdev_id);
if (pdev->soc->wlan_cfg_ctx->rxdma1_enable) {
status = dp_get_srng_ring_state_from_hal
(pdev->soc, pdev,
&pdev->soc->rxdma_mon_buf_ring[lmac_id],
RXDMA_MONITOR_BUF,
&soc_srngs_state->ring_state[j]);
if (status == QDF_STATUS_SUCCESS)
qdf_assert_always(++j < DP_MAX_SRNGS);
status = dp_get_srng_ring_state_from_hal
(pdev->soc, pdev,
&pdev->soc->rxdma_mon_dst_ring[lmac_id],
RXDMA_MONITOR_DST,
&soc_srngs_state->ring_state[j]);
if (status == QDF_STATUS_SUCCESS)
qdf_assert_always(++j < DP_MAX_SRNGS);
status = dp_get_srng_ring_state_from_hal
(pdev->soc, pdev,
&pdev->soc->rxdma_mon_desc_ring[lmac_id],
RXDMA_MONITOR_DESC,
&soc_srngs_state->ring_state[j]);
if (status == QDF_STATUS_SUCCESS)
qdf_assert_always(++j < DP_MAX_SRNGS);
}
dp_queue_mon_ring_stats(pdev, lmac_id, &j,
soc_srngs_state);
status = dp_get_srng_ring_state_from_hal
(pdev->soc, pdev,
@@ -3288,6 +3314,8 @@ QDF_STATUS dp_h2t_cfg_stats_msg_send(struct dp_pdev *pdev,
return status;
}
qdf_export_symbol(dp_h2t_cfg_stats_msg_send);
#endif
void

View File

@@ -182,6 +182,8 @@ static inline QDF_STATUS dp_mon_soc_detach_wrapper(struct dp_soc *soc)
#endif
#ifndef WIFI_MONITOR_SUPPORT
#define MON_BUF_MIN_ENTRIES 64
static inline QDF_STATUS monitor_pdev_attach(struct dp_pdev *pdev)
{
return QDF_STATUS_SUCCESS;
@@ -205,7 +207,7 @@ static inline QDF_STATUS monitor_vdev_detach(struct dp_vdev *vdev)
static inline QDF_STATUS monitor_peer_attach(struct dp_soc *soc,
struct dp_peer *peer)
{
return QDF_STATUS_E_FAILURE;
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS monitor_peer_detach(struct dp_soc *soc,
@@ -451,10 +453,7 @@ bool monitor_vdev_timer_stop(struct dp_soc *soc)
{
return false;
}
#endif
#ifndef WIFI_MONITOR_SUPPORT
#define MON_BUF_MIN_ENTRIES 64
static inline struct qdf_mem_multi_page_t*
monitor_get_link_desc_pages(struct dp_soc *soc, uint32_t mac_id)
{
@@ -488,6 +487,11 @@ static inline bool monitor_is_vdev_timer_running(struct dp_soc *soc)
return false;
}
static inline
void monitor_pdev_set_mon_vdev(struct dp_vdev *vdev)
{
}
static inline void monitor_vdev_delete(struct dp_soc *soc, struct dp_vdev *vdev)
{
}
@@ -577,7 +581,7 @@ static inline QDF_STATUS monitor_check_com_info_ppdu_id(struct dp_pdev *pdev,
}
static inline struct mon_rx_status*
monitor_get_rx_status_addr(struct dp_pdev *pdev)
monitor_get_rx_status(struct dp_pdev *pdev)
{
return NULL;
}
@@ -2143,9 +2147,6 @@ dp_hif_update_pipe_callback(struct dp_soc *dp_soc,
hif_update_pipe_callback(dp_soc->hif_handle,
DP_HTT_T2H_HP_PIPE, &hif_pipe_callbacks);
}
QDF_STATUS dp_peer_qos_stats_notify(struct dp_pdev *dp_pdev,
struct cdp_rx_stats_ppdu_user *ppdu_user);
#else
static inline int dp_wdi_event_unsub(struct cdp_soc_t *soc, uint8_t pdev_id,
wdi_event_subscribe *event_cb_sub_handle,
@@ -2191,14 +2192,6 @@ dp_hif_update_pipe_callback(struct dp_soc *dp_soc, void *cb_context,
uint8_t pipe_id)
{
}
static inline QDF_STATUS
dp_peer_qos_stats_notify(struct dp_pdev *dp_pdev,
struct cdp_rx_stats_ppdu_user *ppdu_user)
{
return QDF_STATUS_SUCCESS;
}
#endif /* CONFIG_WIN */
#ifdef VDEV_PEER_PROTOCOL_COUNT

View File

@@ -31,6 +31,10 @@
#include "dp_tx.h"
#include "dp_rx.h"
#include "dp_ipa.h"
#include "dp_internal.h"
#ifdef WIFI_MONITOR_SUPPORT
#include "dp_mon.h"
#endif
/* Ring index for WBM2SW2 release ring */
#define IPA_TX_COMP_RING_IDX HAL_IPA_TX_COMP_RING_IDX

View File

@@ -66,7 +66,6 @@ cdp_dump_flow_pool_info(struct cdp_soc_t *soc)
#include <dp_mon.h>
#endif
#include "dp_ipa.h"
#include "dp_cal_client_api.h"
#ifdef FEATURE_WDS
#include "dp_txrx_wds.h"
#endif
@@ -328,6 +327,8 @@ dp_cpu_ring_map[DP_NSS_CPU_RING_MAP_MAX][WLAN_CFG_INT_NUM_CONTEXTS_MAX] = {
#endif
};
qdf_export_symbol(dp_cpu_ring_map);
/**
* @brief Select the type of statistics
*/
@@ -3075,14 +3076,16 @@ void dp_hw_link_desc_pool_banks_free(struct dp_soc *soc, uint32_t mac_id)
if (mac_id != WLAN_INVALID_PDEV_ID) {
pages = monitor_get_link_desc_pages(soc, mac_id);
if (!pages)
/* monitor_get_link_desc_pages returns NULL only
* if monitor SOC is NULL */
QDF_ASSERT(pages);
} else {
pages = &soc->link_desc_pages;
}
if (!pages) {
dp_err("can not get link desc pages");
QDF_ASSERT(0);
return;
}
if (pages->dma_pages) {
wlan_minidump_remove((void *)
pages->dma_pages->page_v_addr_start,
@@ -3095,6 +3098,8 @@ void dp_hw_link_desc_pool_banks_free(struct dp_soc *soc, uint32_t mac_id)
}
}
qdf_export_symbol(dp_hw_link_desc_pool_banks_free);
/*
* dp_hw_link_desc_pool_banks_alloc() - Allocate h/w link desc pool banks
* @soc: DP SOC handle
@@ -3134,11 +3139,14 @@ QDF_STATUS dp_hw_link_desc_pool_banks_alloc(struct dp_soc *soc, uint32_t mac_id)
*/
if (mac_id != WLAN_INVALID_PDEV_ID) {
pages = monitor_get_link_desc_pages(soc, mac_id);
if (!pages)
/* monitor_get_link_desc_pages returns NULL only
* if monitor SOC is NULL
*/
QDF_ASSERT(pages);
/* monitor_get_link_desc_pages returns NULL only
* if monitor SOC is NULL
*/
if (!pages) {
dp_err("can not get link desc pages");
QDF_ASSERT(0);
return QDF_STATUS_E_FAULT;
}
dp_srng = &soc->rxdma_mon_desc_ring[mac_id];
num_entries = dp_srng->alloc_size /
hal_srng_get_entrysize(soc->hal_soc,
@@ -3338,6 +3346,8 @@ fail:
return QDF_STATUS_E_NOMEM;
}
qdf_export_symbol(dp_hw_link_desc_pool_banks_alloc);
/*
* dp_hw_link_desc_ring_init() - Initialize hw link desc rings
* @soc: DP SOC handle
@@ -3402,11 +3412,14 @@ void dp_link_desc_ring_replenish(struct dp_soc *soc, uint32_t mac_id)
desc_srng = soc->wbm_idle_link_ring.hal_srng;
} else {
pages = monitor_get_link_desc_pages(soc, mac_id);
if (!pages)
/* monitor_get_link_desc_pages returns NULL only
* if monitor SOC is NULL
*/
QDF_ASSERT(pages);
/* monitor_get_link_desc_pages returns NULL only
* if monitor SOC is NULL
*/
if (!pages) {
dp_err("can not get link desc pages");
QDF_ASSERT(0);
return;
}
total_link_descs_addr =
monitor_get_total_link_descs(soc, mac_id);
total_link_descs = *total_link_descs_addr;
@@ -3492,6 +3505,8 @@ void dp_link_desc_ring_replenish(struct dp_soc *soc, uint32_t mac_id)
}
}
qdf_export_symbol(dp_link_desc_ring_replenish);
#ifdef IPA_OFFLOAD
#define USE_1_IPA_RX_REO_RING 1
#define USE_2_IPA_RX_REO_RINGS 2
@@ -5297,8 +5312,6 @@ static void dp_soc_detach(struct cdp_soc_t *txrx_soc)
dp_soc_tx_history_detach(soc);
dp_soc_rx_history_detach(soc);
monitor_vdev_timer_deinit(soc);
if (!dp_monitor_modularized_enable()) {
dp_mon_soc_detach_wrapper(soc);
}
@@ -5446,13 +5459,10 @@ static QDF_STATUS dp_rxdma_ring_config(struct dp_soc *soc)
htt_srng_setup(soc->htt_handle, mac_for_pdev,
soc->rx_refill_buf_ring[lmac_id].
hal_srng, RXDMA_BUF);
if (wlan_cfg_is_delay_mon_replenish(soc->wlan_cfg_ctx)) {
/* Configure monitor mode rings */
monitor_htt_srng_setup(soc, pdev,
lmac_id,
mac_for_pdev);
}
/* Configure monitor mode rings */
monitor_htt_srng_setup(soc, pdev,
lmac_id,
mac_for_pdev);
htt_srng_setup(soc->htt_handle, mac_for_pdev,
soc->rxdma_err_dst_ring[lmac_id].hal_srng,
RXDMA_DST);
@@ -5829,8 +5839,13 @@ static QDF_STATUS dp_vdev_attach_wifi3(struct cdp_soc_t *cdp_soc,
dp_vdev_id_map_tbl_add(soc, vdev, vdev_id);
if (wlan_op_mode_monitor == vdev->opmode) {
monitor_vdev_attach(vdev);
return QDF_STATUS_SUCCESS;
if (monitor_vdev_attach(vdev) == QDF_STATUS_SUCCESS) {
monitor_pdev_set_mon_vdev(vdev);
monitor_vdev_set_monitor_mode_buf_rings(pdev);
return QDF_STATUS_SUCCESS;
} else {
return QDF_STATUS_E_FAILURE;
}
}
vdev->tx_encap_type = wlan_cfg_pkt_type(soc->wlan_cfg_ctx);
@@ -5854,6 +5869,7 @@ static QDF_STATUS dp_vdev_attach_wifi3(struct cdp_soc_t *cdp_soc,
cdp_soc, vdev->ap_bridge_enabled);
dp_tx_vdev_attach(vdev);
monitor_vdev_attach(vdev);
if (!pdev->is_lro_hash_configured) {
if (QDF_IS_STATUS_SUCCESS(dp_lro_hash_setup(soc, pdev)))
@@ -6400,13 +6416,9 @@ dp_peer_create_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
QDF_STATUS_SUCCESS)
dp_warn("peer ext_stats ctx alloc failed");
monitor_peer_attach(soc, peer);
/*
* In tx_monitor mode, filter may be set for unassociated peer
* when unassociated peer get associated peer need to
* update tx_cap_enabled flag to support peer filter.
*/
monitor_peer_tx_capture_filter_check(pdev, peer);
if (monitor_peer_attach(soc, peer) !=
QDF_STATUS_SUCCESS)
dp_warn("peer monitor ctx alloc failed");
dp_set_peer_isolation(peer, false);
@@ -7058,6 +7070,7 @@ void dp_vdev_unref_delete(struct dp_soc *soc, struct dp_vdev *vdev,
dp_tx_flow_pool_unmap_handler(pdev, vdev_id,
FLOW_TYPE_VDEV, vdev_id);
dp_tx_vdev_detach(vdev);
monitor_vdev_detach(vdev);
free_vdev:
qdf_spinlock_destroy(&vdev->peer_list_lock);
@@ -7087,6 +7100,8 @@ free_vdev:
vdev_delete_cb(vdev_delete_context);
}
qdf_export_symbol(dp_vdev_unref_delete);
/*
* dp_peer_unref_delete() - unref and delete peer
* @peer_handle: Datapath peer handle
@@ -7152,8 +7167,6 @@ void dp_peer_unref_delete(struct dp_peer *peer, enum dp_mod_id mod_id)
wlan_minidump_remove(peer, sizeof(*peer), soc->ctrl_psoc,
WLAN_MD_DP_PEER, "dp_peer");
monitor_peer_detach(soc, peer);
qdf_spin_lock_bh(&soc->inactive_peer_list_lock);
TAILQ_FOREACH(tmp_peer, &soc->inactive_peer_list,
inactive_list_elem) {
@@ -7172,6 +7185,8 @@ void dp_peer_unref_delete(struct dp_peer *peer, enum dp_mod_id mod_id)
/* cleanup the peer data */
dp_peer_cleanup(vdev, peer);
monitor_peer_detach(soc, peer);
for (tid = 0; tid < DP_MAX_TIDS; tid++)
qdf_spinlock_destroy(&peer->rx_tid[tid].tid_lock);
@@ -7185,6 +7200,8 @@ void dp_peer_unref_delete(struct dp_peer *peer, enum dp_mod_id mod_id)
}
}
qdf_export_symbol(dp_peer_unref_delete);
#ifdef PEER_CACHE_RX_PKTS
static inline void dp_peer_rx_bufq_resources_deinit(struct dp_peer *peer)
{
@@ -11299,7 +11316,7 @@ static QDF_STATUS dp_bus_suspend(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
qdf_timer_stop(&soc->int_timer);
/* Stop monitor reap timer and reap any pending frames in ring */
monitor_stop_reap_timer(pdev);
monitor_pktlog_reap_pending_frames(pdev);
dp_suspend_fse_cache_flush(soc);
@@ -11320,7 +11337,7 @@ static QDF_STATUS dp_bus_resume(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
qdf_timer_mod(&soc->int_timer, DP_INTR_POLL_TIMER_MS);
/* Start monitor reap timer */
monitor_start_reap_timer(pdev);
monitor_pktlog_start_reap_timer(pdev);
dp_resume_fse_cache_flush(soc);
@@ -11349,7 +11366,7 @@ static void dp_process_wow_ack_rsp(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
* response from FW reap mon status ring to make sure no packets pending
* in the ring.
*/
monitor_stop_reap_timer(pdev);
monitor_pktlog_reap_pending_frames(pdev);
}
/**
@@ -11371,7 +11388,7 @@ static void dp_process_target_suspend_req(struct cdp_soc_t *soc_hdl,
}
/* Stop monitor reap timer and reap any pending frames in ring */
monitor_stop_reap_timer(pdev);
monitor_pktlog_reap_pending_frames(pdev);
}
static struct cdp_bus_ops dp_ops_bus = {
@@ -11469,6 +11486,8 @@ void dp_soc_set_txrx_ring_map(struct dp_soc *soc)
}
}
qdf_export_symbol(dp_soc_set_txrx_ring_map);
#if defined(QCA_WIFI_QCA8074) || defined(QCA_WIFI_QCA6018) || \
defined(QCA_WIFI_QCA5018) || defined(QCA_WIFI_QCA9574)
/**
@@ -11931,6 +11950,9 @@ void dp_is_hw_dbs_enable(struct dp_soc *soc,
*max_mac_rings = (dbs_enable)?(*max_mac_rings):1;
}
qdf_export_symbol(dp_is_hw_dbs_enable);
#if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
/**
* dp_get_cfr_rcc() - get cfr rcc config
* @soc_hdl: Datapath soc handle
@@ -12020,6 +12042,7 @@ static void dp_clear_cfr_dbg_stats(struct cdp_soc_t *soc_hdl,
qdf_mem_zero(&pdev->stats.rcc, sizeof(pdev->stats.rcc));
}
#endif
/**
* dp_bucket_index() - Return index from array

View File

@@ -35,7 +35,7 @@
#ifdef FEATURE_WDS
#include "dp_txrx_wds.h"
#endif
#include <qdf_module.h>
#ifdef QCA_PEER_EXT_STATS
#include "dp_hist.h"
#endif
@@ -1398,6 +1398,8 @@ add_ast_entry:
return QDF_STATUS_E_FAILURE;
}
qdf_export_symbol(dp_peer_add_ast);
/*
* dp_peer_free_ast_entry() - Free up the ast entry memory
* @soc: SoC handle
@@ -1995,6 +1997,8 @@ struct dp_peer *dp_peer_find_hash_find(struct dp_soc *soc,
return NULL; /* failure */
}
qdf_export_symbol(dp_peer_find_hash_find);
/*
* dp_peer_find_hash_remove() - remove peer from peer_hash_table
* @soc: soc handle

View File

@@ -473,6 +473,8 @@ free_descs:
return QDF_STATUS_SUCCESS;
}
qdf_export_symbol(__dp_rx_buffers_replenish);
/*
* dp_rx_deliver_raw() - process RAW mode pkts and hand over the
* pkts to RAW mode simulation to
@@ -2352,6 +2354,8 @@ dp_pdev_rx_buffers_attach(struct dp_soc *dp_soc, uint32_t mac_id,
return QDF_STATUS_SUCCESS;
}
qdf_export_symbol(dp_pdev_rx_buffers_attach);
/**
* dp_rx_enable_mon_dest_frag() - Enable frag processing for
* monitor destination ring via frag.
@@ -2385,6 +2389,8 @@ void dp_rx_enable_mon_dest_frag(struct rx_desc_pool *rx_desc_pool,
}
#endif
qdf_export_symbol(dp_rx_enable_mon_dest_frag);
/*
* dp_rx_pdev_desc_pool_alloc() - allocate memory for software rx descriptor
* pool

View File

@@ -633,7 +633,6 @@ QDF_STATUS dp_rx_desc_pool_alloc(struct dp_soc *soc,
void dp_rx_desc_pool_init(struct dp_soc *soc, uint32_t pool_id,
uint32_t pool_size,
struct rx_desc_pool *rx_desc_pool);
void dp_rx_pdev_mon_buf_buffers_free(struct dp_pdev *pdev, uint32_t mac_id);
void dp_rx_add_desc_list_to_free_list(struct dp_soc *soc,
union dp_rx_desc_list_elem_t **local_desc_list,
@@ -1315,25 +1314,6 @@ dp_rx_update_flow_tag(struct dp_soc *soc, struct dp_vdev *vdev,
}
#endif /* WLAN_SUPPORT_RX_FLOW_TAG */
#if !defined(WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG) &&\
!defined(WLAN_SUPPORT_RX_FLOW_TAG)
/**
* dp_rx_mon_update_protocol_flow_tag() - Performs necessary checks for monitor
* mode and then tags appropriate packets
* @soc: core txrx main context
* @vdev: pdev on which packet is received
* @msdu: QDF packet buffer on which the protocol tag should be set
* @rx_desc: base address where the RX TLVs start
* Return: void
*/
static inline
void dp_rx_mon_update_protocol_flow_tag(struct dp_soc *soc,
struct dp_pdev *dp_pdev,
qdf_nbuf_t msdu, void *rx_desc)
{
}
#endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG || WLAN_SUPPORT_RX_FLOW_TAG */
/*
* dp_rx_buffers_replenish() - replenish rxdma ring with rx nbufs
* called during dp rx initialization

View File

@@ -18,6 +18,9 @@
#include "dp_rx_buffer_pool.h"
#include "dp_ipa.h"
#ifdef WLAN_FEATURE_RX_PREALLOC_BUFFER_POOL
#include "dp_rx_mon.h"
#endif
#ifndef DP_RX_BUFFER_POOL_SIZE
#define DP_RX_BUFFER_POOL_SIZE 128

View File

@@ -19,6 +19,7 @@
#include "dp_types.h"
#include "dp_rx.h"
#include "dp_ipa.h"
#include <qdf_module.h>
#ifdef RX_DESC_MULTI_PAGE_ALLOC
A_COMPILE_TIME_ASSERT(cookie_size_check,
@@ -43,6 +44,8 @@ QDF_STATUS dp_rx_desc_pool_is_allocated(struct rx_desc_pool *rx_desc_pool)
return QDF_STATUS_SUCCESS;
}
qdf_export_symbol(dp_rx_desc_pool_is_allocated);
/*
* dp_rx_desc_pool_alloc() - Allocate a memory pool for software rx
* descriptors
@@ -89,6 +92,8 @@ free_rx_desc_pool:
return QDF_STATUS_E_FAULT;
}
qdf_export_symbol(dp_rx_desc_pool_alloc);
QDF_STATUS dp_rx_desc_pool_init_generic(struct dp_soc *soc,
struct rx_desc_pool *rx_desc_pool,
uint32_t pool_id)
@@ -156,6 +161,8 @@ void dp_rx_desc_pool_init(struct dp_soc *soc, uint32_t pool_id,
qdf_spin_unlock_bh(&rx_desc_pool->lock);
}
qdf_export_symbol(dp_rx_desc_pool_init);
union dp_rx_desc_list_elem_t *dp_rx_desc_find(uint16_t page_id, uint16_t offset,
struct rx_desc_pool *rx_desc_pool)
{
@@ -253,6 +260,8 @@ void dp_rx_desc_nbuf_free(struct dp_soc *soc,
rx_desc_pool->buf_size);
}
qdf_export_symbol(dp_rx_desc_nbuf_free);
void dp_rx_desc_pool_free(struct dp_soc *soc,
struct rx_desc_pool *rx_desc_pool)
{
@@ -263,6 +272,8 @@ void dp_rx_desc_pool_free(struct dp_soc *soc,
&rx_desc_pool->desc_pages, 0, true);
}
qdf_export_symbol(dp_rx_desc_pool_free);
void dp_rx_desc_pool_deinit(struct dp_soc *soc,
struct rx_desc_pool *rx_desc_pool,
uint32_t pool_id)
@@ -280,6 +291,8 @@ void dp_rx_desc_pool_deinit(struct dp_soc *soc,
qdf_spin_unlock_bh(&rx_desc_pool->lock);
qdf_spinlock_destroy(&rx_desc_pool->lock);
}
qdf_export_symbol(dp_rx_desc_pool_deinit);
#else
/*
* dp_rx_desc_pool_is_allocated() - check if memory is allocated for the
@@ -299,6 +312,8 @@ QDF_STATUS dp_rx_desc_pool_is_allocated(struct rx_desc_pool *rx_desc_pool)
return QDF_STATUS_SUCCESS;
}
qdf_export_symbol(dp_rx_desc_pool_is_allocated);
/*
* dp_rx_desc_pool_alloc() - Allocate a memory pool for software rx
* descriptors
@@ -326,6 +341,8 @@ QDF_STATUS dp_rx_desc_pool_alloc(struct dp_soc *soc,
return QDF_STATUS_SUCCESS;
}
qdf_export_symbol(dp_rx_desc_pool_alloc);
QDF_STATUS dp_rx_desc_pool_init_generic(struct dp_soc *soc,
struct rx_desc_pool *rx_desc_pool,
uint32_t pool_id)
@@ -379,6 +396,8 @@ void dp_rx_desc_pool_init(struct dp_soc *soc, uint32_t pool_id,
qdf_spin_unlock_bh(&rx_desc_pool->lock);
}
qdf_export_symbol(dp_rx_desc_pool_init);
void dp_rx_desc_nbuf_and_pool_free(struct dp_soc *soc, uint32_t pool_id,
struct rx_desc_pool *rx_desc_pool)
{
@@ -437,6 +456,8 @@ void dp_rx_desc_nbuf_free(struct dp_soc *soc,
qdf_spin_unlock_bh(&rx_desc_pool->lock);
}
qdf_export_symbol(dp_rx_desc_nbuf_free);
/**
* dp_rx_desc_frag_free() - Free desc frag buffer
*
@@ -470,6 +491,8 @@ void dp_rx_desc_frag_free(struct dp_soc *soc,
}
qdf_spin_unlock_bh(&rx_desc_pool->lock);
}
qdf_export_symbol(dp_rx_desc_frag_free);
#endif
void dp_rx_desc_pool_free(struct dp_soc *soc,
@@ -478,6 +501,8 @@ void dp_rx_desc_pool_free(struct dp_soc *soc,
qdf_mem_free(rx_desc_pool->array);
}
qdf_export_symbol(dp_rx_desc_pool_free);
void dp_rx_desc_pool_deinit(struct dp_soc *soc,
struct rx_desc_pool *rx_desc_pool,
uint32_t pool_id)
@@ -496,6 +521,8 @@ void dp_rx_desc_pool_deinit(struct dp_soc *soc,
qdf_spinlock_destroy(&rx_desc_pool->lock);
}
qdf_export_symbol(dp_rx_desc_pool_deinit);
#endif /* RX_DESC_MULTI_PAGE_ALLOC */
void dp_rx_desc_pool_deinit_generic(struct dp_soc *soc,
@@ -543,6 +570,8 @@ uint16_t dp_rx_get_free_desc_list(struct dp_soc *soc, uint32_t pool_id,
return count;
}
qdf_export_symbol(dp_rx_get_free_desc_list);
/*
* dp_rx_add_desc_list_to_free_list() - append unused desc_list back to
* freelist.
@@ -575,3 +604,5 @@ void dp_rx_add_desc_list_to_free_list(struct dp_soc *soc,
qdf_spin_unlock_bh(&rx_desc_pool->lock);
}
qdf_export_symbol(dp_rx_add_desc_list_to_free_list);

View File

@@ -255,6 +255,8 @@ done:
}
qdf_export_symbol(dp_rx_link_desc_return_by_addr);
/**
* dp_rx_link_desc_return() - Return a MPDU link descriptor to HW
* (WBM), following error handling

View File

@@ -21,7 +21,6 @@
#include "dp_internal.h"
#include "htt_stats.h"
#include "htt_ppdu_stats.h"
#ifdef QCA_PEER_EXT_STATS
#include <cdp_txrx_hist_struct.h>
#include "dp_hist.h"
@@ -4344,35 +4343,6 @@ void dp_peer_stats_update_protocol_cnt(struct cdp_soc_t *soc_hdl,
}
#endif
#ifdef WDI_EVENT_ENABLE
QDF_STATUS dp_peer_qos_stats_notify(struct dp_pdev *dp_pdev,
struct cdp_rx_stats_ppdu_user *ppdu_user)
{
struct cdp_interface_peer_qos_stats qos_stats_intf;
if (ppdu_user->peer_id == HTT_INVALID_PEER) {
dp_err("Invalid peer id");
return QDF_STATUS_E_FAILURE;
}
qdf_mem_zero(&qos_stats_intf, sizeof(qos_stats_intf));
qdf_mem_copy(qos_stats_intf.peer_mac, ppdu_user->mac_addr,
QDF_MAC_ADDR_SIZE);
qos_stats_intf.frame_control = ppdu_user->frame_control;
qos_stats_intf.frame_control_info_valid =
ppdu_user->frame_control_info_valid;
qos_stats_intf.qos_control = ppdu_user->qos_control;
qos_stats_intf.qos_control_info_valid =
ppdu_user->qos_control_info_valid;
qos_stats_intf.vdev_id = ppdu_user->vdev_id;
dp_wdi_event_handler(WDI_EVENT_PEER_QOS_STATS, dp_pdev->soc,
(void *)&qos_stats_intf, 0,
WDI_NO_VAL, dp_pdev->pdev_id);
return QDF_STATUS_SUCCESS;
}
#endif
#ifdef QCA_ENH_V3_STATS_SUPPORT
/**
* dp_vow_str_fw_to_hw_delay() - Return string for a delay

View File

@@ -533,8 +533,6 @@ static inline void dp_tx_hal_ring_access_end_reap(struct dp_soc *soc,
}
#endif
void dp_iterate_update_peer_list(struct cdp_pdev *pdev_hdl);
#ifdef ATH_TX_PRI_OVERRIDE
#define DP_TX_TID_OVERRIDE(_msdu_info, _nbuf) \
((_msdu_info)->tid = qdf_nbuf_get_priority(_nbuf))
@@ -637,16 +635,6 @@ void dp_send_completion_to_stack(struct dp_soc *soc, struct dp_pdev *pdev,
}
#endif
#ifndef WLAN_TX_PKT_CAPTURE_ENH
static inline
QDF_STATUS dp_peer_set_tx_capture_enabled(struct dp_pdev *pdev,
struct dp_peer *peer_handle,
uint8_t value, uint8_t *peer_mac)
{
return QDF_STATUS_SUCCESS;
}
#endif
#ifdef WLAN_FEATURE_PKT_CAPTURE_V2
void dp_send_completion_to_pkt_capture(struct dp_soc *soc,
struct dp_tx_desc_s *desc,

View File

@@ -20,6 +20,11 @@
#ifndef _DP_TXRX_WDS_H_
#define _DP_TXRX_WDS_H_
#ifdef WIFI_MONITOR_SUPPORT
#include "dp_htt.h"
#include "dp_mon.h"
#endif
/* host managed flag */
#define DP_AST_FLAGS_HM 0x0020

View File

@@ -2476,8 +2476,6 @@ struct dp_pdev {
/* WDI event handlers */
struct wdi_event_subscribe_t **wdi_event_list;
/* ppdu_id of last received HTT TX stats */
uint32_t last_ppdu_id;
bool cfr_rcc_mode;
/* enable time latency check for tx completion */

View File

@@ -23,6 +23,7 @@
#include "dp_htt.h"
#include <dp_mon.h>
#endif
#include <qdf_module.h>
#ifdef WDI_EVENT_ENABLE
/*
@@ -145,6 +146,7 @@ dp_wdi_event_handler(
peer_id, status);
}
qdf_export_symbol(dp_wdi_event_handler);
/*
* dp_wdi_event_sub() - Subscribe WDI event

File diff suppressed because it is too large Load Diff

View File

@@ -13,6 +13,11 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef _DP_MON_H_
#define _DP_MON_H_
#include "dp_htt.h"
#ifdef WLAN_TX_PKT_CAPTURE_ENH
#include "dp_tx_capture.h"
#endif
@@ -28,6 +33,14 @@
#define mon_rx_warn(params...) QDF_TRACE_WARN(QDF_MODULE_ID_DP_RX, params)
#ifndef WLAN_TX_PKT_CAPTURE_ENH
struct dp_pdev_tx_capture {
};
struct dp_peer_tx_capture {
};
#endif
struct dp_mon_ops {
QDF_STATUS (*mon_soc_cfg_init)(struct dp_soc *soc);
QDF_STATUS (*mon_pdev_attach)(struct dp_pdev *pdev);
@@ -76,7 +89,8 @@ struct dp_mon_ops {
struct hal_tx_completion_status *ts,
struct dp_peer *peer);
#endif
#if defined(WDI_EVENT_ENABLE) && !defined(REMOVE_PKT_LOG)
#if defined(WDI_EVENT_ENABLE) &&\
(defined(QCA_ENHANCED_STATS_SUPPORT) || !defined(REMOVE_PKT_LOG))
bool (*mon_ppdu_stats_ind_handler)(struct htt_soc *soc,
uint32_t *msg_word,
qdf_nbuf_t htt_t2h_msg);
@@ -94,7 +108,9 @@ struct dp_mon_ops {
QDF_STATUS (*mon_config_enh_rx_capture)(struct dp_pdev *pdev,
uint8_t val);
#endif
#ifdef QCA_SUPPORT_BPR
QDF_STATUS (*mon_set_bpr_enable)(struct dp_pdev *pdev, int val);
#endif
#ifdef ATH_SUPPORT_NAC
int (*mon_set_filter_neigh_peers)(struct dp_pdev *pdev, bool val);
#endif
@@ -119,17 +135,19 @@ struct dp_mon_ops {
uint8_t *rx_pkt_hdr);
#endif
void (*mon_vdev_timer_init)(struct dp_soc *soc);
void (*mon_vdev_timer_start)(struct dp_mon_soc *mon_soc);
bool (*mon_vdev_timer_stop)(struct dp_mon_soc *mon_soc);
void (*mon_vdev_timer_deinit)(struct dp_mon_soc *mon_soc);
void (*mon_vdev_timer_start)(struct dp_soc *soc);
bool (*mon_vdev_timer_stop)(struct dp_soc *soc);
void (*mon_vdev_timer_deinit)(struct dp_soc *soc);
void (*mon_reap_timer_init)(struct dp_soc *soc);
void (*mon_reap_timer_start)(struct dp_mon_soc *mon_soc);
bool (*mon_reap_timer_stop)(struct dp_mon_soc *mon_soc);
void (*mon_reap_timer_deinit)(struct dp_mon_soc *mon_soc);
QDF_STATUS (*mon_mcopy_check_deliver)(struct dp_mon_pdev *mon_pdev,
void (*mon_reap_timer_start)(struct dp_soc *soc);
bool (*mon_reap_timer_stop)(struct dp_soc *soc);
void (*mon_reap_timer_deinit)(struct dp_soc *soc);
#ifdef QCA_MCOPY_SUPPORT
QDF_STATUS (*mon_mcopy_check_deliver)(struct dp_pdev *pdev,
uint16_t peer_id,
uint32_t ppdu_id,
uint8_t first_msdu);
#endif
void (*mon_neighbour_peer_add_ast)(struct dp_pdev *pdev,
struct dp_peer *ta_peer,
uint8_t *mac_addr,
@@ -288,6 +306,8 @@ struct dp_mon_pdev {
uint64_t status_buf_addr;
struct hal_rx_ppdu_info ppdu_info;
/* ppdu_id of last received HTT TX stats */
uint32_t last_ppdu_id;
struct {
uint8_t last_user;
qdf_nbuf_t buf;
@@ -353,7 +373,7 @@ struct dp_mon_peer {
struct mon_ops {
};
#ifdef FEATURE_PERPKT_INFO
#if defined(QCA_TX_CAPTURE_SUPPORT) || defined(QCA_ENHANCED_STATS_SUPPORT)
void dp_deliver_mgmt_frm(struct dp_pdev *pdev, qdf_nbuf_t nbuf);
#else
static inline
@@ -362,12 +382,49 @@ void dp_deliver_mgmt_frm(struct dp_pdev *pdev, qdf_nbuf_t nbuf)
}
#endif
#ifndef WLAN_TX_PKT_CAPTURE_ENH
struct dp_pdev_tx_capture {
};
#if defined(WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG) ||\
defined(WLAN_SUPPORT_RX_FLOW_TAG)
/**
* dp_rx_mon_update_protocol_flow_tag() - Performs necessary checks for monitor
* mode and then tags appropriate packets
* @soc: core txrx main context
* @vdev: pdev on which packet is received
* @msdu: QDF packet buffer on which the protocol tag should be set
* @rx_desc: base address where the RX TLVs start
* Return: void
*/
void dp_rx_mon_update_protocol_flow_tag(struct dp_soc *soc,
struct dp_pdev *dp_pdev,
qdf_nbuf_t msdu, void *rx_desc);
#endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG || WLAN_SUPPORT_RX_FLOW_TAG */
struct dp_peer_tx_capture {
};
#if !defined(WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG) &&\
!defined(WLAN_SUPPORT_RX_FLOW_TAG)
/**
* dp_rx_mon_update_protocol_flow_tag() - Performs necessary checks for monitor
* mode and then tags appropriate packets
* @soc: core txrx main context
* @vdev: pdev on which packet is received
* @msdu: QDF packet buffer on which the protocol tag should be set
* @rx_desc: base address where the RX TLVs start
* Return: void
*/
static inline
void dp_rx_mon_update_protocol_flow_tag(struct dp_soc *soc,
struct dp_pdev *dp_pdev,
qdf_nbuf_t msdu, void *rx_desc)
{
}
#endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG || WLAN_SUPPORT_RX_FLOW_TAG */
#ifndef WLAN_TX_PKT_CAPTURE_ENH
static inline
QDF_STATUS dp_peer_set_tx_capture_enabled(struct dp_pdev *pdev,
struct dp_peer *peer_handle,
uint8_t value, uint8_t *peer_mac)
{
return QDF_STATUS_SUCCESS;
}
/**
* dp_peer_tid_queue_init() Initialize ppdu stats queue per TID
@@ -500,12 +557,6 @@ static inline QDF_STATUS dp_peer_stats_notify(struct dp_pdev *pdev,
}
#endif
#if defined(DP_CON_MON) && !defined(REMOVE_PKT_LOG)
static void dp_pktlogmod_exit(struct dp_pdev *handle);
#else
static void dp_pktlogmod_exit(struct dp_pdev *handle) { }
#endif
#ifndef WLAN_TX_PKT_CAPTURE_ENH
/**
* dp_tx_ppdu_stats_process - Deferred PPDU stats handler
@@ -601,7 +652,7 @@ static inline bool dp_soc_is_full_mon_enable(struct dp_pdev *pdev)
*/
static inline bool monitor_is_enable_reap_timer_non_pkt(struct dp_pdev *pdev)
{
if (!pdev || !pdev->monitor_pdev)
if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
return false;
return pdev->monitor_pdev->enable_reap_timer_non_pkt;
@@ -615,7 +666,7 @@ static inline bool monitor_is_enable_reap_timer_non_pkt(struct dp_pdev *pdev)
*/
static inline bool monitor_is_enable_mcopy_mode(struct dp_pdev *pdev)
{
if (!pdev || !pdev->monitor_pdev)
if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
return false;
return pdev->monitor_pdev->mcopy_mode;
@@ -629,7 +680,7 @@ static inline bool monitor_is_enable_mcopy_mode(struct dp_pdev *pdev)
*/
static inline bool monitor_is_enable_tx_sniffer(struct dp_pdev *pdev)
{
if (!pdev || !pdev->monitor_pdev)
if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
return false;
return pdev->monitor_pdev->tx_sniffer_enable;
@@ -643,7 +694,7 @@ static inline bool monitor_is_enable_tx_sniffer(struct dp_pdev *pdev)
*/
static inline bool monitor_is_configured(struct dp_pdev *pdev)
{
if (!pdev || !pdev->monitor_pdev)
if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
return false;
return pdev->monitor_pdev->monitor_configured;
@@ -656,7 +707,7 @@ static inline QDF_STATUS monitor_check_com_info_ppdu_id(struct dp_pdev *pdev,
struct dp_mon_pdev *mon_pdev;
uint32_t msdu_ppdu_id = 0;
if (!pdev || !pdev->monitor_pdev)
if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
return QDF_STATUS_E_FAILURE;
mon_pdev = pdev->monitor_pdev;
@@ -668,7 +719,6 @@ static inline QDF_STATUS monitor_check_com_info_ppdu_id(struct dp_pdev *pdev,
return QDF_STATUS_E_FAILURE;
msdu_ppdu_id = hal_rx_get_ppdu_id(pdev->soc->hal_soc, rx_desc);
if (msdu_ppdu_id != mon_pdev->ppdu_info.com_info.ppdu_id) {
QDF_TRACE(QDF_MODULE_ID_DP,
QDF_TRACE_LEVEL_ERROR,
@@ -682,9 +732,9 @@ static inline QDF_STATUS monitor_check_com_info_ppdu_id(struct dp_pdev *pdev,
}
static inline struct mon_rx_status*
monitor_get_rx_status_addr(struct dp_pdev *pdev)
monitor_get_rx_status(struct dp_pdev *pdev)
{
if (!pdev || !pdev->monitor_pdev)
if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
return NULL;
return &pdev->monitor_pdev->ppdu_info.rx_status;
@@ -698,7 +748,7 @@ monitor_get_rx_status_addr(struct dp_pdev *pdev)
*/
static inline bool monitor_is_chan_band_known(struct dp_pdev *pdev)
{
if (!pdev || !pdev->monitor_pdev)
if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
return false;
if (pdev->monitor_pdev->mon_chan_band != REG_BAND_UNKNOWN)
@@ -726,7 +776,7 @@ monitor_get_chan_band(struct dp_pdev *pdev)
*/
static inline void monitor_print_tx_stats(struct dp_pdev *pdev)
{
if (!pdev || !pdev->monitor_pdev)
if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
return;
DP_PRINT_STATS("ppdu info schedule completion list depth: %d",
@@ -747,7 +797,7 @@ static inline void monitor_print_tx_stats(struct dp_pdev *pdev)
*/
static inline bool monitor_is_enable_enhanced_stats(struct dp_pdev *pdev)
{
if (!pdev || !pdev->monitor_pdev)
if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
return false;
return pdev->monitor_pdev->enhanced_stats_en;
@@ -762,7 +812,7 @@ static inline bool monitor_is_enable_enhanced_stats(struct dp_pdev *pdev)
*/
static inline void monitor_set_chan_num(struct dp_pdev *pdev, int chan_num)
{
if (!pdev || !pdev->monitor_pdev)
if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
return;
pdev->monitor_pdev->mon_chan_num = chan_num;
@@ -778,7 +828,7 @@ static inline void monitor_set_chan_num(struct dp_pdev *pdev, int chan_num)
static inline void
monitor_set_chan_freq(struct dp_pdev *pdev, qdf_freq_t chan_freq)
{
if (!pdev || !pdev->monitor_pdev)
if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
return;
pdev->monitor_pdev->mon_chan_freq = chan_freq;
@@ -794,7 +844,7 @@ monitor_set_chan_freq(struct dp_pdev *pdev, qdf_freq_t chan_freq)
static inline void
monitor_set_chan_band(struct dp_pdev *pdev, enum reg_wifi_band chan_band)
{
if (!pdev || !pdev->monitor_pdev)
if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
return;
pdev->monitor_pdev->mon_chan_band = chan_band;
@@ -812,7 +862,7 @@ static inline void monitor_get_mpdu_status(struct dp_pdev *pdev,
{
struct dp_mon_pdev *mon_pdev;
if (!pdev || !pdev->monitor_pdev)
if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
return;
mon_pdev = pdev->monitor_pdev;
@@ -895,7 +945,7 @@ static inline bool monitor_is_vdev_timer_running(struct dp_soc *soc)
{
struct dp_mon_soc *mon_soc;
if (!soc || !soc->monitor_soc)
if (qdf_unlikely(!soc || !soc->monitor_soc))
return false;
mon_soc = soc->monitor_soc;
@@ -906,7 +956,7 @@ static inline bool monitor_is_vdev_timer_running(struct dp_soc *soc)
static inline struct qdf_mem_multi_page_t*
monitor_get_link_desc_pages(struct dp_soc *soc, uint32_t mac_id)
{
if (!soc || !soc->monitor_soc)
if (qdf_unlikely(!soc || !soc->monitor_soc))
return NULL;
return &soc->monitor_soc->mon_link_desc_pages[mac_id];
@@ -1450,7 +1500,8 @@ QDF_STATUS monitor_tx_add_to_comp_queue(struct dp_soc *soc,
#endif
#if defined(WDI_EVENT_ENABLE) && !defined(REMOVE_PKT_LOG)
#if defined(WDI_EVENT_ENABLE) &&\
(defined(QCA_ENHANCED_STATS_SUPPORT) || !defined(REMOVE_PKT_LOG))
static inline bool monitor_ppdu_stats_ind_handler(struct htt_soc *soc,
uint32_t *msg_word,
qdf_nbuf_t htt_t2h_msg)
@@ -1617,6 +1668,7 @@ static inline QDF_STATUS monitor_config_enh_rx_capture(struct dp_pdev *pdev,
}
#endif
#ifdef QCA_SUPPORT_BPR
static inline QDF_STATUS monitor_set_bpr_enable(struct dp_pdev *pdev,
uint32_t val)
{
@@ -1636,6 +1688,13 @@ static inline QDF_STATUS monitor_set_bpr_enable(struct dp_pdev *pdev,
return monitor_ops->mon_set_bpr_enable(pdev, val);
}
#else
static inline QDF_STATUS monitor_set_bpr_enable(struct dp_pdev *pdev,
uint32_t val)
{
return QDF_STATUS_E_FAILURE;
}
#endif
#ifdef ATH_SUPPORT_NAC
static inline int monitor_set_filter_neigh_peers(struct dp_pdev *pdev, bool val)
@@ -1794,8 +1853,8 @@ int monitor_set_pktlog_wifi3(struct dp_pdev *pdev, uint32_t event, bool enable)
return monitor_ops->mon_set_pktlog_wifi3(pdev, event, enable);
}
#else
static inline int dp_set_pktlog_wifi3(struct dp_pdev *pdev, uint32_t event,
bool enable)
static inline int monitor_set_pktlog_wifi3(struct dp_pdev *pdev, uint32_t event,
bool enable)
{
return 0;
}
@@ -1923,7 +1982,7 @@ void monitor_reap_timer_deinit(struct dp_soc *soc)
return;
}
monitor_ops->mon_reap_timer_deinit(mon_soc);
monitor_ops->mon_reap_timer_deinit(soc);
}
static inline
@@ -1943,7 +2002,7 @@ void monitor_reap_timer_start(struct dp_soc *soc)
return;
}
monitor_ops->mon_reap_timer_start(mon_soc);
monitor_ops->mon_reap_timer_start(soc);
}
static inline
@@ -1963,7 +2022,7 @@ bool monitor_reap_timer_stop(struct dp_soc *soc)
return false;
}
return monitor_ops->mon_reap_timer_stop(mon_soc);
return monitor_ops->mon_reap_timer_stop(soc);
}
static inline
@@ -2003,7 +2062,7 @@ void monitor_vdev_timer_deinit(struct dp_soc *soc)
return;
}
monitor_ops->mon_vdev_timer_deinit(mon_soc);
monitor_ops->mon_vdev_timer_deinit(soc);
}
static inline
@@ -2023,7 +2082,7 @@ void monitor_vdev_timer_start(struct dp_soc *soc)
return;
}
monitor_ops->mon_vdev_timer_start(mon_soc);
monitor_ops->mon_vdev_timer_start(soc);
}
static inline
@@ -2043,32 +2102,41 @@ bool monitor_vdev_timer_stop(struct dp_soc *soc)
return false;
}
return monitor_ops->mon_vdev_timer_stop(mon_soc);
return monitor_ops->mon_vdev_timer_stop(soc);
}
#ifdef QCA_MCOPY_SUPPORT
static inline
QDF_STATUS monitor_mcopy_check_deliver(struct dp_pdev *pdev,
uint16_t peer_id, uint32_t ppdu_id,
uint8_t first_msdu)
{
struct dp_mon_ops *monitor_ops;
struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
if (!mon_soc) {
qdf_err("monitor soc is NULL");
return QDF_STATUS_SUCCESS;
return QDF_STATUS_E_FAILURE;
}
monitor_ops = mon_soc->mon_ops;
if (!monitor_ops || !monitor_ops->mon_mcopy_check_deliver) {
qdf_err("callback not registered");
return QDF_STATUS_SUCCESS;
return QDF_STATUS_E_FAILURE;
}
return monitor_ops->mon_mcopy_check_deliver(mon_pdev, peer_id,
return monitor_ops->mon_mcopy_check_deliver(pdev, peer_id,
ppdu_id, first_msdu);
}
#else
static inline
QDF_STATUS monitor_mcopy_check_deliver(struct dp_pdev *pdev,
uint16_t peer_id, uint32_t ppdu_id,
uint8_t first_msdu)
{
return QDF_STATUS_SUCCESS;
}
#endif
static inline void monitor_neighbour_peer_add_ast(struct dp_pdev *pdev,
struct dp_peer *ta_peer,
@@ -2109,16 +2177,16 @@ static inline void monitor_vdev_delete(struct dp_soc *soc, struct dp_vdev *vdev)
#ifdef DP_POWER_SAVE
/*
* monitor_stop_reap_timer() - stop reap timer
* monitor_pktlog_reap_pending_frames() - reap pending frames
* @pdev: point to dp pdev
*
* Return:
* Return: void
*/
static inline void monitor_stop_reap_timer(struct dp_pdev *pdev)
static inline void monitor_pktlog_reap_pending_frames(struct dp_pdev *pdev)
{
struct dp_soc *soc;
if (!pdev || !pdev->monitor_pdev)
if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
return;
soc = pdev->soc;
@@ -2131,16 +2199,16 @@ static inline void monitor_stop_reap_timer(struct dp_pdev *pdev)
}
/*
* monitor_start_reap_timer() - start reap timer
* monitor_pktlog_start_reap_timer() - start reap timer
* @pdev: point to dp pdev
*
* Return:
* Return: void
*/
static inline void monitor_start_reap_timer(struct dp_pdev *pdev)
static inline void monitor_pktlog_start_reap_timer(struct dp_pdev *pdev)
{
struct dp_soc *soc;
if (!pdev || !pdev->monitor_pdev)
if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
return;
soc = pdev->soc;
@@ -2158,7 +2226,7 @@ void monitor_neighbour_peer_list_remove(struct dp_pdev *pdev,
struct dp_mon_pdev *mon_pdev;
struct dp_neighbour_peer *temp_peer = NULL;
if (!pdev || !pdev->monitor_pdev)
if (qdf_unlikely(!pdev || !pdev->monitor_pdev))
return;
mon_pdev = pdev->monitor_pdev;
@@ -2181,3 +2249,35 @@ void monitor_neighbour_peer_list_remove(struct dp_pdev *pdev,
}
qdf_spin_unlock_bh(&mon_pdev->neighbour_peer_mutex);
}
static inline
void monitor_pdev_set_mon_vdev(struct dp_vdev *vdev)
{
struct dp_mon_pdev *mon_pdev = vdev->pdev->monitor_pdev;
if (!mon_pdev)
return;
mon_pdev->mvdev = vdev;
}
QDF_STATUS dp_mon_soc_attach(struct dp_soc *soc);
QDF_STATUS dp_mon_soc_detach(struct dp_soc *soc);
QDF_STATUS dp_mon_pdev_attach(struct dp_pdev *pdev);
QDF_STATUS dp_mon_pdev_detach(struct dp_pdev *pdev);
QDF_STATUS dp_mon_pdev_init(struct dp_pdev *pdev);
QDF_STATUS dp_mon_pdev_deinit(struct dp_pdev *pdev);
QDF_STATUS dp_mon_soc_cfg_init(struct dp_soc *soc);
void dp_mon_cdp_ops_register(struct dp_soc *soc);
void dp_mon_cdp_ops_deregister(struct dp_soc *soc);
void dp_mon_ops_register(struct dp_mon_soc *mon_soc);
QDF_STATUS dp_mon_htt_srng_setup(struct dp_soc *soc,
struct dp_pdev *pdev,
int mac_id,
int mac_for_pdev);
#ifdef QCA_ENHANCED_STATS_SUPPORT
QDF_STATUS dp_peer_qos_stats_notify(struct dp_pdev *dp_pdev,
struct cdp_rx_stats_ppdu_user *ppdu_user);
#endif
#endif /* _DP_MON_H_ */

View File

@@ -29,10 +29,12 @@
* Monitor Filter mode to string
*/
static int8_t *dp_mon_filter_mode_type_to_str[DP_MON_FILTER_MAX_MODE] = {
#ifdef FEATURE_PERPKT_INFO
#ifdef QCA_ENHANCED_STATS_SUPPORT
"DP MON FILTER ENHACHED STATS MODE",
#endif /* QCA_ENHANCED_STATS_SUPPORT */
#ifdef QCA_MCOPY_SUPPORT
"DP MON FILTER MCOPY MODE",
#endif /* FEATURE_PERPKT_INFO */
#endif /* QCA_MCOPY_SUPPORT */
#if defined(ATH_SUPPORT_NAC_RSSI) || defined(ATH_SUPPORT_NAC)
"DP MON FILTER SMART MONITOR MODE",
#endif /* ATH_SUPPORT_NAC_RSSI || ATH_SUPPORT_NAC */
@@ -48,7 +50,7 @@ static int8_t *dp_mon_filter_mode_type_to_str[DP_MON_FILTER_MAX_MODE] = {
/**
* dp_mon_filter_show_filter() - Show the set filters
* @pdev: DP pdev handle
* @mon_pdev: Monitor pdev handle
* @mode: The filter modes
* @tlv_filter: tlv filter
*/
@@ -310,6 +312,7 @@ static void dp_mon_filter_ht2_setup(struct dp_soc *soc, struct dp_pdev *pdev,
dp_mon_filter_show_filter(mon_pdev, 0, filter);
}
#ifdef QCA_MONITOR_PKT_SUPPORT
/**
* dp_mon_filter_reset_mon_srng()
* @soc: DP SoC handle
@@ -328,8 +331,9 @@ dp_mon_filter_reset_mon_srng(struct dp_soc *soc, struct dp_pdev *pdev,
soc);
}
}
#endif
#if defined(FEATURE_PERPKT_INFO) || defined(ATH_SUPPORT_NAC_RSSI) \
#if defined(QCA_MCOPY_SUPPORT) || defined(ATH_SUPPORT_NAC_RSSI) \
|| defined(ATH_SUPPORT_NAC) || defined(WLAN_RX_PKT_CAPTURE_ENH)
/**
* dp_mon_filter_check_co_exist() - Check the co-existing of the
@@ -414,6 +418,8 @@ static QDF_STATUS dp_mon_filter_check_co_exist(struct dp_pdev *pdev)
#else
static QDF_STATUS dp_mon_filter_check_co_exist(struct dp_pdev *pdev)
{
struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
/*
* Check if the Rx packet log lite or full can co-exist with
* the enable modes.
@@ -430,9 +436,10 @@ static QDF_STATUS dp_mon_filter_check_co_exist(struct dp_pdev *pdev)
}
#endif
#ifdef QCA_MONITOR_PKT_SUPPORT
/**
* dp_mon_filter_set_mon_cmn() - Setp the common mon filters
* @pdev: DP pdev handle
* @mon_pdev: Monitor pdev handle
* @filter: DP mon filter
*
* Return: QDF_STATUS
@@ -466,10 +473,11 @@ static void dp_mon_filter_set_mon_cmn(struct dp_mon_pdev *mon_pdev,
filter->tlv_filter.mo_data_filter = mon_pdev->mo_data_filter;
filter->tlv_filter.offset_valid = false;
}
#endif
/**
* dp_mon_filter_set_status_cmn() - Setp the common status filters
* @pdev: DP pdev handle
* @mon_pdev: Monitor pdev handle
* @filter: Dp mon filters
*
* Return: QDF_STATUS
@@ -535,6 +543,7 @@ static void dp_mon_filter_set_status_cbf(struct dp_pdev *pdev,
filter->tlv_filter.enable_mo = 0;
}
#ifdef QCA_MONITOR_PKT_SUPPORT
/**
* dp_mon_filter_set_cbf_cmn() - Set the common cbf mode filters
* @pdev: DP pdev handle
@@ -562,11 +571,12 @@ static void dp_mon_filter_set_cbf_cmn(struct dp_pdev *pdev,
filter->tlv_filter.offset_valid = false;
filter->tlv_filter.enable_mo = 0;
}
#endif
#ifdef FEATURE_PERPKT_INFO
#ifdef QCA_ENHANCED_STATS_SUPPORT
/**
* dp_mon_filter_setup_enhanced_stats() - Setup the enhanced stats filter
* @mon_pdev: Monitor DP pdev handle
* @mon_pdev: Monitor pdev handle
*/
void dp_mon_filter_setup_enhanced_stats(struct dp_mon_pdev *mon_pdev)
{
@@ -590,24 +600,58 @@ void dp_mon_filter_setup_enhanced_stats(struct dp_mon_pdev *mon_pdev)
/**
* dp_mon_filter_reset_enhanced_stats() - Reset the enhanced stats filter
* @pdev: DP pdev handle
* @mon_pdev: Monitor pdev handle
*/
void dp_mon_filter_reset_enhanced_stats(struct dp_pdev *pdev)
void dp_mon_filter_reset_enhanced_stats(struct dp_mon_pdev *mon_pdev)
{
struct dp_mon_filter filter = {0};
enum dp_mon_filter_mode mode = DP_MON_FILTER_ENHACHED_STATS_MODE;
enum dp_mon_filter_srng_type srng_type =
DP_MON_FILTER_SRNG_TYPE_RXDMA_MONITOR_STATUS;
struct dp_mon_pdev *mon_pdev;
if (!pdev) {
if (!mon_pdev) {
dp_mon_filter_err("pdev Context is null");
return;
}
mon_pdev = pdev->monitor_pdev;
mon_pdev->filter[mode][srng_type] = filter;
}
#endif /* QCA_ENHANCED_STATS_SUPPORT */
#ifdef QCA_MCOPY_SUPPORT
#ifdef QCA_MONITOR_PKT_SUPPORT
static void
dp_mon_filter_set_reset_mcopy_mon_buf(struct dp_pdev *pdev,
struct dp_mon_filter *pfilter)
{
struct dp_soc *soc = pdev->soc;
struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
enum dp_mon_filter_mode mode = DP_MON_FILTER_MCOPY_MODE;
enum dp_mon_filter_srng_type srng_type;
srng_type = ((soc->wlan_cfg_ctx->rxdma1_enable) ?
DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF :
DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF);
/* Set the filter */
if (pfilter->valid) {
dp_mon_filter_set_mon_cmn(mon_pdev, pfilter);
pfilter->tlv_filter.fp_data_filter = 0;
pfilter->tlv_filter.mo_data_filter = 0;
dp_mon_filter_show_filter(mon_pdev, mode, pfilter);
mon_pdev->filter[mode][srng_type] = *pfilter;
} else /* Reset the filter */
mon_pdev->filter[mode][srng_type] = *pfilter;
}
#else
static void
dp_mon_filter_set_reset_mcopy_mon_buf(struct dp_pdev *pdev,
struct dp_mon_filter *pfilter)
{
}
#endif
/**
* dp_mon_filter_setup_mcopy_mode() - Setup the m_copy mode filter
@@ -640,17 +684,7 @@ void dp_mon_filter_setup_mcopy_mode(struct dp_pdev *pdev)
}
/* Enabled the filter */
filter.valid = true;
dp_mon_filter_set_mon_cmn(mon_pdev, &filter);
filter.tlv_filter.fp_data_filter = 0;
filter.tlv_filter.mo_data_filter = 0;
dp_mon_filter_show_filter(mon_pdev, mode, &filter);
srng_type = ((soc->wlan_cfg_ctx->rxdma1_enable) ?
DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF :
DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF);
mon_pdev->filter[mode][srng_type] = filter;
dp_mon_filter_set_reset_mcopy_mon_buf(pdev, &filter);
/* Clear the filter as the same filter will be used to set the
* monitor status ring
@@ -696,15 +730,12 @@ void dp_mon_filter_reset_mcopy_mode(struct dp_pdev *pdev)
}
mon_pdev = pdev->monitor_pdev;
srng_type = ((soc->wlan_cfg_ctx->rxdma1_enable) ?
DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF :
DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF);
mon_pdev->filter[mode][srng_type] = filter;
dp_mon_filter_set_reset_mcopy_mon_buf(pdev, &filter);
srng_type = DP_MON_FILTER_SRNG_TYPE_RXDMA_MONITOR_STATUS;
mon_pdev->filter[mode][srng_type] = filter;
}
#endif /* FEATURE_PERPKT_INFO */
#endif /* QCA_MCOPY_SUPPORT */
#if defined(ATH_SUPPORT_NAC_RSSI) || defined(ATH_SUPPORT_NAC)
/**
@@ -754,22 +785,62 @@ void dp_mon_filter_setup_smart_monitor(struct dp_pdev *pdev)
* dp_mon_filter_reset_smart_monitor() - Reset the smart monitor mode filter
* @pdev: DP pdev handle
*/
void dp_mon_filter_reset_smart_monitor(struct dp_mon_pdev *mon_pdev)
void dp_mon_filter_reset_smart_monitor(struct dp_pdev *pdev)
{
struct dp_mon_filter filter = {0};
enum dp_mon_filter_mode mode = DP_MON_FILTER_SMART_MONITOR_MODE;
enum dp_mon_filter_srng_type srng_type =
DP_MON_FILTER_SRNG_TYPE_RXDMA_MONITOR_STATUS;
struct dp_mon_pdev *mon_pdev;
if (!mon_pdev) {
if (!pdev) {
dp_mon_filter_err("monitor pdev Context is null");
return;
}
mon_pdev = pdev->monitor_pdev;
mon_pdev->filter[mode][srng_type] = filter;
}
#endif /* ATH_SUPPORT_NAC_RSSI || ATH_SUPPORT_NAC */
#ifdef WLAN_RX_PKT_CAPTURE_ENH
#ifdef QCA_MONITOR_PKT_SUPPORT
static void
dp_mon_filter_set_reset_rx_enh_capture_mon_buf(struct dp_pdev *pdev,
struct dp_mon_filter *pfilter)
{
struct dp_soc *soc = pdev->soc;
struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
enum dp_mon_filter_mode mode = DP_MON_FILTER_RX_CAPTURE_MODE;
enum dp_mon_filter_srng_type srng_type;
srng_type = ((soc->wlan_cfg_ctx->rxdma1_enable) ?
DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF :
DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF);
/* Set the filter */
if (pfilter->valid) {
dp_mon_filter_set_mon_cmn(mon_pdev, pfilter);
pfilter->tlv_filter.fp_mgmt_filter = 0;
pfilter->tlv_filter.fp_ctrl_filter = 0;
pfilter->tlv_filter.fp_data_filter = 0;
pfilter->tlv_filter.mo_mgmt_filter = 0;
pfilter->tlv_filter.mo_ctrl_filter = 0;
pfilter->tlv_filter.mo_data_filter = 0;
dp_mon_filter_show_filter(mon_pdev, mode, pfilter);
pdev->monitor_pdev->filter[mode][srng_type] = *pfilter;
} else /* Reset the filter */
pdev->monitor_pdev->filter[mode][srng_type] = *pfilter;
}
#else
static void
dp_mon_filter_set_reset_rx_enh_capture_mon_buf(struct dp_pdev *pdev,
struct dp_mon_filter *pfilter)
{
}
#endif
/**
* dp_mon_filter_setup_rx_enh_capture() - Setup the Rx capture mode filters
* @pdev: DP pdev handle
@@ -798,21 +869,7 @@ void dp_mon_filter_setup_rx_enh_capture(struct dp_pdev *pdev)
/* Enabled the filter */
filter.valid = true;
dp_mon_filter_set_mon_cmn(mon_pdev, &filter);
filter.tlv_filter.fp_mgmt_filter = 0;
filter.tlv_filter.fp_ctrl_filter = 0;
filter.tlv_filter.fp_data_filter = 0;
filter.tlv_filter.mo_mgmt_filter = 0;
filter.tlv_filter.mo_ctrl_filter = 0;
filter.tlv_filter.mo_data_filter = 0;
dp_mon_filter_show_filter(mon_pdev, mode, &filter);
srng_type = ((soc->wlan_cfg_ctx->rxdma1_enable) ?
DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF :
DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF);
mon_pdev->filter[mode][srng_type] = filter;
dp_mon_filter_set_reset_rx_enh_capture_mon_buf(pdev, &filter);
/* Clear the filter as the same filter will be used to set the
* monitor status ring
@@ -873,16 +930,42 @@ void dp_mon_filter_reset_rx_enh_capture(struct dp_pdev *pdev)
}
mon_pdev = pdev->monitor_pdev;
srng_type = ((soc->wlan_cfg_ctx->rxdma1_enable) ?
DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF :
DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF);
mon_pdev->filter[mode][srng_type] = filter;
dp_mon_filter_set_reset_rx_enh_capture_mon_buf(pdev, &filter);
srng_type = DP_MON_FILTER_SRNG_TYPE_RXDMA_MONITOR_STATUS;
mon_pdev->filter[mode][srng_type] = filter;
}
#endif /* WLAN_RX_PKT_CAPTURE_ENH */
#ifdef QCA_MONITOR_PKT_SUPPORT
static void dp_mon_filter_set_reset_mon_buf(struct dp_pdev *pdev,
struct dp_mon_filter *pfilter)
{
struct dp_soc *soc = pdev->soc;
struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
enum dp_mon_filter_mode mode = DP_MON_FILTER_MONITOR_MODE;
enum dp_mon_filter_srng_type srng_type;
srng_type = ((soc->wlan_cfg_ctx->rxdma1_enable) ?
DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF :
DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF);
/* set the filter */
if (pfilter->valid) {
dp_mon_filter_set_mon_cmn(mon_pdev, pfilter);
dp_mon_filter_show_filter(mon_pdev, mode, pfilter);
mon_pdev->filter[mode][srng_type] = *pfilter;
} else /* reset the filter */
mon_pdev->filter[mode][srng_type] = *pfilter;
}
#else
static void dp_mon_filter_set_reset_mon_buf(struct dp_pdev *pdev,
struct dp_mon_filter *pfilter)
{
}
#endif
/**
* dp_mon_filter_setup_mon_mode() - Setup the Rx monitor mode filter
* @pdev: DP pdev handle
@@ -909,13 +992,7 @@ void dp_mon_filter_setup_mon_mode(struct dp_pdev *pdev)
mon_pdev = pdev->monitor_pdev;
filter.valid = true;
dp_mon_filter_set_mon_cmn(mon_pdev, &filter);
dp_mon_filter_show_filter(mon_pdev, mode, &filter);
srng_type = ((soc->wlan_cfg_ctx->rxdma1_enable) ?
DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF :
DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF);
mon_pdev->filter[mode][srng_type] = filter;
dp_mon_filter_set_reset_mon_buf(pdev, &filter);
/* Clear the filter as the same filter will be used to set the
* monitor status ring
@@ -957,10 +1034,7 @@ void dp_mon_filter_reset_mon_mode(struct dp_pdev *pdev)
}
mon_pdev = pdev->monitor_pdev;
srng_type = ((soc->wlan_cfg_ctx->rxdma1_enable) ?
DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF :
DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF);
mon_pdev->filter[mode][srng_type] = filter;
dp_mon_filter_set_reset_mon_buf(pdev, &filter);
srng_type = DP_MON_FILTER_SRNG_TYPE_RXDMA_MONITOR_STATUS;
mon_pdev->filter[mode][srng_type] = filter;
@@ -1049,23 +1123,56 @@ void dp_mon_filter_setup_rx_pkt_log_lite(struct dp_pdev *pdev)
/**
* dp_mon_filter_reset_rx_pkt_log_lite() - Reset the Rx pktlog lite mode filter
* @mon_pdev: Monitor pdev handle
* @pdev: DP pdev handle
*/
void dp_mon_filter_reset_rx_pkt_log_lite(struct dp_mon_pdev *mon_pdev)
void dp_mon_filter_reset_rx_pkt_log_lite(struct dp_pdev *pdev)
{
struct dp_mon_filter filter = {0};
enum dp_mon_filter_mode mode = DP_MON_FILTER_PKT_LOG_LITE_MODE;
enum dp_mon_filter_srng_type srng_type =
DP_MON_FILTER_SRNG_TYPE_RXDMA_MONITOR_STATUS;
struct dp_mon_pdev *mon_pdev;
if (!mon_pdev) {
dp_mon_filter_err("monitor pdev Context is null");
if (!pdev) {
dp_mon_filter_err("dp pdev Context is null");
return;
}
mon_pdev = pdev->monitor_pdev;
mon_pdev->filter[mode][srng_type] = filter;
}
#ifdef QCA_MONITOR_PKT_SUPPORT
static void
dp_mon_filter_set_reset_rx_pkt_log_cbf_mon_buf(struct dp_pdev *pdev,
struct dp_mon_filter *pfilter)
{
struct dp_soc *soc = pdev->soc;
struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
enum dp_mon_filter_mode mode = DP_MON_FILTER_PKT_LOG_CBF_MODE;
enum dp_mon_filter_srng_type srng_type;
srng_type = ((soc->wlan_cfg_ctx->rxdma1_enable) ?
DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF :
DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF);
/*set the filter */
if (pfilter->valid) {
dp_mon_filter_set_cbf_cmn(pdev, pfilter);
dp_mon_filter_show_filter(mon_pdev, mode, pfilter);
mon_pdev->filter[mode][srng_type] = *pfilter;
} else /* reset the filter */
mon_pdev->filter[mode][srng_type] = *pfilter;
}
#else
static void
dp_mon_filter_set_reset_rx_pkt_log_cbf_mon_buf(struct dp_pdev *pdev,
struct dp_mon_filter *pfilter)
{
}
#endif
/**
* dp_mon_filter_setup_rx_pkt_log_cbf() - Setup the Rx pktlog CBF mode filter
* @pdev: DP pdev handle
@@ -1077,13 +1184,14 @@ void dp_mon_filter_setup_rx_pkt_log_cbf(struct dp_pdev *pdev)
enum dp_mon_filter_mode mode = DP_MON_FILTER_PKT_LOG_CBF_MODE;
enum dp_mon_filter_srng_type srng_type =
DP_MON_FILTER_SRNG_TYPE_RXDMA_MONITOR_STATUS;
struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
struct dp_mon_pdev *mon_pdev;
if (!pdev) {
dp_mon_filter_err("pdev Context is null");
return;
}
mon_pdev = pdev->monitor_pdev;
soc = pdev->soc;
if (!soc) {
dp_mon_filter_err("Soc Context is null");
@@ -1102,13 +1210,7 @@ void dp_mon_filter_setup_rx_pkt_log_cbf(struct dp_pdev *pdev)
qdf_mem_zero(&(filter), sizeof(struct dp_mon_filter));
filter.valid = true;
dp_mon_filter_set_cbf_cmn(pdev, &filter);
dp_mon_filter_show_filter(mon_pdev, mode, &filter);
srng_type = ((soc->wlan_cfg_ctx->rxdma1_enable) ?
DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF :
DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF);
mon_pdev->filter[mode][srng_type] = filter;
dp_mon_filter_set_reset_rx_pkt_log_cbf_mon_buf(pdev, &filter);
}
/**
@@ -1122,7 +1224,7 @@ void dp_mon_filter_reset_rx_pktlog_cbf(struct dp_pdev *pdev)
enum dp_mon_filter_mode mode = DP_MON_FILTER_PKT_LOG_CBF_MODE;
enum dp_mon_filter_srng_type srng_type =
DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF;
struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
struct dp_mon_pdev *mon_pdev;
if (!pdev) {
QDF_TRACE(QDF_MODULE_ID_MON_FILTER, QDF_TRACE_LEVEL_ERROR,
@@ -1130,6 +1232,7 @@ void dp_mon_filter_reset_rx_pktlog_cbf(struct dp_pdev *pdev)
return;
}
mon_pdev = pdev->monitor_pdev;
soc = pdev->soc;
if (!soc) {
QDF_TRACE(QDF_MODULE_ID_MON_FILTER, QDF_TRACE_LEVEL_ERROR,
@@ -1137,10 +1240,7 @@ void dp_mon_filter_reset_rx_pktlog_cbf(struct dp_pdev *pdev)
return;
}
srng_type = ((soc->wlan_cfg_ctx->rxdma1_enable) ?
DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF :
DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF);
mon_pdev->filter[mode][srng_type] = filter;
dp_mon_filter_set_reset_rx_pkt_log_cbf_mon_buf(pdev, &filter);
srng_type = DP_MON_FILTER_SRNG_TYPE_RXDMA_MONITOR_STATUS;
mon_pdev->filter[mode][srng_type] = filter;
@@ -1173,6 +1273,68 @@ static inline bool dp_mon_should_reset_buf_ring_filter(struct dp_pdev *pdev)
}
#endif
#ifdef QCA_MONITOR_PKT_SUPPORT
static QDF_STATUS dp_mon_filter_mon_buf_update(struct dp_pdev *pdev,
struct dp_mon_filter *pfilter,
bool *pmon_mode_set)
{
struct dp_soc *soc = pdev->soc;
struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
enum dp_mon_filter_srng_type srng_type;
QDF_STATUS status = QDF_STATUS_SUCCESS;
srng_type = ((soc->wlan_cfg_ctx->rxdma1_enable) ?
DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF :
DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF);
dp_mon_filter_ht2_setup(soc, pdev, srng_type, pfilter);
*pmon_mode_set = pfilter->valid;
if (dp_mon_should_reset_buf_ring_filter(pdev) || *pmon_mode_set) {
status = dp_mon_ht2_rx_ring_cfg(soc, pdev,
srng_type,
&pfilter->tlv_filter);
} else {
/*
* For WIN case the monitor buffer ring is used and it does need
* reset when monitor mode gets enabled/disabled.
*/
if (soc->wlan_cfg_ctx->rxdma1_enable) {
if (mon_pdev->monitor_configured || *pmon_mode_set) {
status = dp_mon_ht2_rx_ring_cfg(soc, pdev,
srng_type,
&pfilter->tlv_filter);
}
}
}
return status;
}
static void dp_mon_filter_mon_buf_reset(struct dp_pdev *pdev)
{
struct dp_soc *soc = pdev->soc;
enum dp_mon_filter_srng_type srng_type;
srng_type = ((soc->wlan_cfg_ctx->rxdma1_enable) ?
DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF :
DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF);
dp_mon_filter_reset_mon_srng(soc, pdev, srng_type);
}
#else
static QDF_STATUS dp_mon_filter_mon_buf_update(struct dp_pdev *pdev,
struct dp_mon_filter *pfilter,
bool *pmon_mode_set)
{
return QDF_STATUS_SUCCESS;
}
static void dp_mon_filter_mon_buf_reset(struct dp_pdev *pdev)
{
}
#endif
/**
* dp_mon_filter_update() - Setup the monitor filter setting for a srng
* type
@@ -1185,8 +1347,6 @@ QDF_STATUS dp_mon_filter_update(struct dp_pdev *pdev)
struct dp_soc *soc;
bool mon_mode_set = false;
struct dp_mon_filter filter = {0};
enum dp_mon_filter_srng_type mon_srng_type =
DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF;
QDF_STATUS status = QDF_STATUS_SUCCESS;
struct dp_mon_pdev *mon_pdev;
@@ -1209,33 +1369,8 @@ QDF_STATUS dp_mon_filter_update(struct dp_pdev *pdev)
/*
* Setup the filters for the monitor destination ring.
*/
if (!soc->wlan_cfg_ctx->rxdma1_enable)
mon_srng_type = DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF;
/*
* Setup the filters for the monitor mode.
*/
qdf_mem_zero(&(filter), sizeof(filter));
dp_mon_filter_ht2_setup(soc, pdev, mon_srng_type, &filter);
mon_mode_set = filter.valid;
if (dp_mon_should_reset_buf_ring_filter(pdev) || mon_mode_set) {
status = dp_mon_ht2_rx_ring_cfg(soc, pdev,
mon_srng_type,
&filter.tlv_filter);
} else {
/*
* For WIN case the monitor buffer ring is used and it does need
* reset when monitor mode gets enabled/disabled.
*/
if (soc->wlan_cfg_ctx->rxdma1_enable) {
if (mon_pdev->monitor_configured || mon_mode_set) {
status = dp_mon_ht2_rx_ring_cfg(soc, pdev,
mon_srng_type,
&filter.tlv_filter);
}
}
}
status = dp_mon_filter_mon_buf_update(pdev, &filter,
&mon_mode_set);
if (status != QDF_STATUS_SUCCESS) {
dp_mon_filter_err("%pK: Monitor destination ring filter setting failed",
@@ -1258,14 +1393,14 @@ QDF_STATUS dp_mon_filter_update(struct dp_pdev *pdev)
* are not enabled.
*/
if (!filter.valid && mon_mode_set)
dp_mon_filter_reset_mon_srng(soc, pdev, mon_srng_type);
dp_mon_filter_mon_buf_reset(pdev);
if (dp_mon_ht2_rx_ring_cfg(soc, pdev,
DP_MON_FILTER_SRNG_TYPE_RXDMA_MONITOR_STATUS,
&filter.tlv_filter) != QDF_STATUS_SUCCESS) {
dp_mon_filter_err("%pK: Monitor status ring filter setting failed",
soc);
dp_mon_filter_reset_mon_srng(soc, pdev, mon_srng_type);
dp_mon_filter_mon_buf_reset(pdev);
return QDF_STATUS_E_FAILURE;
}
@@ -1316,7 +1451,7 @@ void dp_mon_filter_dealloc(struct dp_mon_pdev *mon_pdev)
/**
* dp_mon_filter_alloc() - Allocate the filter objects to be stored in
* the radio object.
* @mon_pdev: DP pdev handle
* @mon_pdev: Monitor pdev handle
*/
struct dp_mon_filter **dp_mon_filter_alloc(struct dp_mon_pdev *mon_pdev)
{

View File

@@ -106,10 +106,12 @@ struct dp_mon_filter {
* @DP_MON_FILTER_PKT_LOG_LITE_MODE: Packet log lite mode
*/
enum dp_mon_filter_mode {
#ifdef FEATURE_PERPKT_INFO
#ifdef QCA_ENHANCED_STATS_SUPPORT
DP_MON_FILTER_ENHACHED_STATS_MODE,
#endif /* QCA_ENHANCED_STATS_SUPPORT */
#ifdef QCA_MCOPY_SUPPORT
DP_MON_FILTER_MCOPY_MODE,
#endif /* FEATURE_PERPKT_INFO */
#endif /* QCA_MCOPY_SUPPORT */
#if defined(ATH_SUPPORT_NAC_RSSI) || defined(ATH_SUPPORT_NAC)
DP_MON_FILTER_SMART_MONITOR_MODE,
#endif /* ATH_SUPPORT_NAC_RSSI || ATH_SUPPORT_NAC */
@@ -152,19 +154,21 @@ enum dp_mon_filter_action {
DP_MON_FILTER_SET,
};
#ifdef FEATURE_PERPKT_INFO
#ifdef QCA_ENHANCED_STATS_SUPPORT
/**
* dp_mon_filter_setup_enhanced_stats() - Setup the enhanced stats filter
* @mon_pdev: Monitor DP pdev handle
* @mon_pdev: Monitor pdev handle
*/
void dp_mon_filter_setup_enhanced_stats(struct dp_mon_pdev *mon_pdev);
/***
* dp_mon_filter_reset_enhanced_stats() - Reset the enhanced stats filter
* @pdev: DP pdev handle
* @mon_pdev: Monitor pdev handle
*/
void dp_mon_filter_reset_enhanced_stats(struct dp_pdev *pdev);
void dp_mon_filter_reset_enhanced_stats(struct dp_mon_pdev *mon_pdev);
#endif /* QCA_ENHANCED_STATS_SUPPORT */
#ifdef QCA_MCOPY_SUPPORT
/**
* dp_mon_filter_setup_mcopy_mode() - Setup the m_copy mode filter
* @pdev: DP pdev handle
@@ -176,7 +180,7 @@ void dp_mon_filter_setup_mcopy_mode(struct dp_pdev *pdev);
* @pdev: DP pdev handle
*/
void dp_mon_filter_reset_mcopy_mode(struct dp_pdev *pdev);
#endif /* FEATURE_PERPKT_INFO */
#endif /* QCA_MCOPY_SUPPORT */
#if defined(ATH_SUPPORT_NAC_RSSI) || defined(ATH_SUPPORT_NAC)
/**
@@ -187,9 +191,9 @@ void dp_mon_filter_setup_smart_monitor(struct dp_pdev *pdev);
/**
* dp_mon_filter_reset_smart_monitor() - Reset the smart monitor mode filter
* @mon_pdev: monitor pdev handle
* @pdev: DP pdev handle
*/
void dp_mon_filter_reset_smart_monitor(struct dp_mon_pdev *mon_pdev);
void dp_mon_filter_reset_smart_monitor(struct dp_pdev *pdev);
#endif /* ATH_SUPPORT_NAC_RSSI || ATH_SUPPORT_NAC */
#ifdef WLAN_RX_PKT_CAPTURE_ENH
@@ -240,9 +244,9 @@ void dp_mon_filter_setup_rx_pkt_log_lite(struct dp_pdev *pdev);
/**
* dp_mon_filter_reset_rx_pkt_log_lite() - Reset the Rx pktlog lite mode filter
* @mon_pdev: Monitor pdev handle
* @pdev: DP pdev handle
*/
void dp_mon_filter_reset_rx_pkt_log_lite(struct dp_mon_pdev *mon_pdev);
void dp_mon_filter_reset_rx_pkt_log_lite(struct dp_pdev *pdev);
/**
* dp_mon_filter_setup_rx_pkt_log_cbf() - Setup the Rx pktlog cbf mode filter

View File

@@ -19,6 +19,8 @@
#ifndef _DP_RX_MON_H_
#define _DP_RX_MON_H_
#include "dp_mon.h"
/*
* MON_BUF_MIN_ENTRIES macro defines minimum number of network buffers
* to be refilled in the RXDMA monitor buffer ring at init, remaining
@@ -112,16 +114,54 @@ dp_rx_mon_status_process(struct dp_soc *soc, struct dp_intr *int_ctx,
*
* Return: none
*/
void dp_rx_mon_dest_process(struct dp_soc *soc, struct dp_intr *int_ctx,
uint32_t mac_id, uint32_t quota);
QDF_STATUS dp_rx_pdev_mon_desc_pool_alloc(struct dp_pdev *pdev);
QDF_STATUS dp_rx_pdev_mon_buffers_alloc(struct dp_pdev *pdev);
void dp_rx_pdev_mon_buffers_free(struct dp_pdev *pdev);
void dp_rx_pdev_mon_desc_pool_init(struct dp_pdev *pdev);
void dp_rx_pdev_mon_desc_pool_deinit(struct dp_pdev *pdev);
void dp_rx_pdev_mon_desc_pool_free(struct dp_pdev *pdev);
#ifdef QCA_MONITOR_PKT_SUPPORT
void dp_rx_mon_dest_process(struct dp_soc *soc, struct dp_intr *int_ctx,
uint32_t mac_id, uint32_t quota);
void dp_rx_pdev_mon_buf_buffers_free(struct dp_pdev *pdev, uint32_t mac_id);
QDF_STATUS
dp_rx_pdev_mon_buf_buffers_alloc(struct dp_pdev *pdev, uint32_t mac_id,
bool delayed_replenish);
QDF_STATUS
dp_rx_pdev_mon_buf_desc_pool_alloc(struct dp_pdev *pdev, uint32_t mac_id);
void
dp_rx_pdev_mon_buf_desc_pool_init(struct dp_pdev *pdev, uint32_t mac_id);
#else
static inline
void dp_rx_mon_dest_process(struct dp_soc *soc, struct dp_intr *int_ctx,
uint32_t mac_id, uint32_t quota)
{
}
static inline
void dp_rx_pdev_mon_buf_buffers_free(struct dp_pdev *pdev, uint32_t mac_id)
{
}
static inline QDF_STATUS
dp_rx_pdev_mon_buf_buffers_alloc(struct dp_pdev *pdev, uint32_t mac_id,
bool delayed_replenish)
{
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
dp_rx_pdev_mon_buf_desc_pool_alloc(struct dp_pdev *pdev, uint32_t mac_id)
{
return QDF_STATUS_SUCCESS;
}
static inline void
dp_rx_pdev_mon_buf_desc_pool_init(struct dp_pdev *pdev, uint32_t mac_id)
{
}
#endif
QDF_STATUS dp_rx_pdev_mon_status_buffers_alloc(struct dp_pdev *pdev,
uint32_t mac_id);
@@ -134,13 +174,6 @@ void dp_rx_pdev_mon_status_desc_pool_deinit(struct dp_pdev *pdev,
void dp_rx_pdev_mon_status_desc_pool_free(struct dp_pdev *pdev,
uint32_t mac_id);
void dp_rx_pdev_mon_status_buffers_free(struct dp_pdev *pdev, uint32_t mac_id);
QDF_STATUS
dp_rx_pdev_mon_buf_buffers_alloc(struct dp_pdev *pdev, uint32_t mac_id,
bool delayed_replenish);
QDF_STATUS
dp_rx_pdev_mon_buf_desc_pool_alloc(struct dp_pdev *pdev, uint32_t mac_id);
void
dp_rx_pdev_mon_buf_desc_pool_init(struct dp_pdev *pdev, uint32_t mac_id);
/*
* dp_rx_populate_cbf_hdr - Send CBF frame with htt header
@@ -315,6 +348,7 @@ uint32_t dp_rxdma_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
*/
void dp_mon_buf_delayed_replenish(struct dp_pdev *pdev);
#ifdef QCA_MONITOR_PKT_SUPPORT
/**
* dp_rx_mon_link_desc_return() - Return a MPDU link descriptor to HW
* (WBM), following error handling
@@ -327,6 +361,15 @@ QDF_STATUS
dp_rx_mon_link_desc_return(struct dp_pdev *dp_pdev,
hal_buff_addrinfo_t buf_addr_info,
int mac_id);
#else
static inline QDF_STATUS
dp_rx_mon_link_desc_return(struct dp_pdev *dp_pdev,
hal_buff_addrinfo_t buf_addr_info,
int mac_id)
{
return QDF_STATUS_SUCCESS;
}
#endif
/**
* dp_mon_adjust_frag_len() - MPDU and MSDU may spread across

File diff suppressed because it is too large Load Diff

View File

@@ -180,7 +180,7 @@ dp_send_ack_frame_to_stack(struct dp_soc *soc,
}
#endif
#ifdef FEATURE_PERPKT_INFO
#ifdef QCA_ENHANCED_STATS_SUPPORT
static inline void
dp_rx_populate_rx_rssi_chain(struct hal_rx_ppdu_info *ppdu_info,
struct cdp_rx_indication_ppdu *cdp_rx_ppdu)
@@ -540,7 +540,8 @@ dp_rx_populate_cdp_indication_ppdu(struct dp_pdev *pdev,
struct cdp_rx_indication_ppdu *cdp_rx_ppdu)
{
}
#endif
#endif/* QCA_ENHANCED_STATS_SUPPORT */
/**
* dp_rx_stats_update() - Update per-peer statistics
* @soc: Datapath SOC handle
@@ -549,7 +550,7 @@ dp_rx_populate_cdp_indication_ppdu(struct dp_pdev *pdev,
*
* Return: None
*/
#ifdef FEATURE_PERPKT_INFO
#ifdef QCA_ENHANCED_STATS_SUPPORT
static inline void dp_rx_rate_stats_update(struct dp_peer *peer,
struct cdp_rx_indication_ppdu *ppdu,
uint32_t user)
@@ -812,7 +813,7 @@ static void dp_rx_stats_update(struct dp_pdev *pdev,
dp_peer_unref_delete(peer, DP_MOD_ID_RX_PPDU_STATS);
}
}
#endif
#endif/* QCA_ENHANCED_STATS_SUPPORT */
/**
* dp_rx_handle_mcopy_mode() - Allocate and deliver first MSDU payload
@@ -826,7 +827,7 @@ static void dp_rx_stats_update(struct dp_pdev *pdev,
* Return: QDF_STATUS_SUCCESS - If nbuf to be freed by caller
* QDF_STATUS_E_ALREADY - If nbuf not to be freed by caller
*/
#ifdef FEATURE_PERPKT_INFO
#ifdef QCA_MCOPY_SUPPORT
static inline QDF_STATUS
dp_rx_handle_mcopy_mode(struct dp_soc *soc, struct dp_pdev *pdev,
struct hal_rx_ppdu_info *ppdu_info, qdf_nbuf_t nbuf,
@@ -882,7 +883,7 @@ dp_rx_handle_mcopy_mode(struct dp_soc *soc, struct dp_pdev *pdev,
{
return QDF_STATUS_SUCCESS;
}
#endif
#endif /* QCA_MCOPY_SUPPORT */
/**
* dp_rx_mcopy_handle_last_mpdu() - cache and delive last MPDU header in a
@@ -894,7 +895,7 @@ dp_rx_handle_mcopy_mode(struct dp_soc *soc, struct dp_pdev *pdev,
*
* Return: void
*/
#ifdef FEATURE_PERPKT_INFO
#ifdef QCA_MCOPY_SUPPORT
static inline void
dp_rx_mcopy_handle_last_mpdu(struct dp_soc *soc, struct dp_pdev *pdev,
struct hal_rx_ppdu_info *ppdu_info,
@@ -967,7 +968,7 @@ dp_rx_mcopy_handle_last_mpdu(struct dp_soc *soc, struct dp_pdev *pdev,
qdf_nbuf_t status_nbuf)
{
}
#endif
#endif /* QCA_MCOPY_SUPPORT */
/**
* dp_rx_mcopy_process_ppdu_info() - update mcopy ppdu info
@@ -976,7 +977,7 @@ dp_rx_mcopy_handle_last_mpdu(struct dp_soc *soc, struct dp_pdev *pdev,
*
* Return: void
*/
#ifdef FEATURE_PERPKT_INFO
#ifdef QCA_MCOPY_SUPPORT
static inline void
dp_rx_mcopy_process_ppdu_info(struct dp_pdev *pdev,
struct hal_rx_ppdu_info *ppdu_info,
@@ -1022,9 +1023,9 @@ dp_rx_mcopy_process_ppdu_info(struct dp_pdev *pdev,
uint32_t tlv_status)
{
}
#endif
#endif /* QCA_MCOPY_SUPPORT */
#ifdef FEATURE_PERPKT_INFO
#ifdef QCA_MCOPY_SUPPORT
static inline void
dp_rx_process_mcopy_mode(struct dp_soc *soc, struct dp_pdev *pdev,
struct hal_rx_ppdu_info *ppdu_info,
@@ -1085,7 +1086,7 @@ dp_rx_process_mcopy_mode(struct dp_soc *soc, struct dp_pdev *pdev,
qdf_nbuf_t status_nbuf)
{
}
#endif
#endif /* QCA_MCOPY_SUPPORT */
/**
* dp_rx_handle_smart_mesh_mode() - Deliver header for smart mesh
@@ -1492,7 +1493,7 @@ dp_cfr_rcc_mode_status(struct dp_pdev *pdev)
*
* Return: none
*/
#ifdef FEATURE_PERPKT_INFO
#ifdef QCA_ENHANCED_STATS_SUPPORT
static inline void
dp_rx_handle_ppdu_stats(struct dp_soc *soc, struct dp_pdev *pdev,
struct hal_rx_ppdu_info *ppdu_info)
@@ -1591,7 +1592,7 @@ dp_rx_handle_ppdu_stats(struct dp_soc *soc, struct dp_pdev *pdev,
struct hal_rx_ppdu_info *ppdu_info)
{
}
#endif
#endif/* QCA_ENHANCED_STATS_SUPPORT */
/**
* dp_rx_process_peer_based_pktlog() - Process Rx pktlog if peer based

View File

@@ -29,6 +29,8 @@
/* Global object, it is declared globally */
struct wlan_objmgr_global *g_umac_glb_obj;
qdf_export_symbol(g_umac_glb_obj);
/*
** APIs to Create/Delete Global object APIs
*/

View File

@@ -29,7 +29,7 @@
#include "cfg_ucfg_api.h"
#include "hal_api.h"
#include "dp_types.h"
#include <qdf_module.h>
/*
* The max allowed size for tx comp ring is 8191.
@@ -1277,6 +1277,8 @@ void wlan_cfg_set_mon_delayed_replenish_entries(
cfg->delayed_replenish_entries = val;
}
qdf_export_symbol(wlan_cfg_set_mon_delayed_replenish_entries);
int wlan_cfg_get_mon_delayed_replenish_entries(struct wlan_cfg_dp_soc_ctxt *cfg)
{
return cfg->delayed_replenish_entries;
@@ -1313,6 +1315,8 @@ int wlan_cfg_get_max_ast_idx(struct wlan_cfg_dp_soc_ctxt *cfg)
return cfg->max_ast_idx;
}
qdf_export_symbol(wlan_cfg_get_max_ast_idx);
void wlan_cfg_set_tx_ring_mask(struct wlan_cfg_dp_soc_ctxt *cfg,
int context, int mask)
{
@@ -1410,6 +1414,8 @@ int wlan_cfg_get_hw_mac_idx(struct wlan_cfg_dp_soc_ctxt *cfg, int pdev_idx)
return cfg->hw_macid[pdev_idx];
}
qdf_export_symbol(wlan_cfg_get_hw_mac_idx);
int wlan_cfg_get_target_pdev_id(struct wlan_cfg_dp_soc_ctxt *cfg,
int hw_macid)
{
@@ -1438,6 +1444,8 @@ int wlan_cfg_get_pdev_idx(struct wlan_cfg_dp_soc_ctxt *cfg, int hw_macid)
return cfg->hw_macid_pdev_id_map[hw_macid];
}
qdf_export_symbol(wlan_cfg_get_pdev_idx);
void wlan_cfg_set_ce_ring_mask(struct wlan_cfg_dp_soc_ctxt *cfg,
int context, int mask)
{
@@ -1549,6 +1557,8 @@ int wlan_cfg_per_pdev_lmac_ring(struct wlan_cfg_dp_soc_ctxt *cfg)
return cfg->per_pdev_lmac_ring;
}
qdf_export_symbol(wlan_cfg_per_pdev_lmac_ring);
#ifdef DP_MEMORY_OPT
int wlan_cfg_num_tcl_data_rings(struct wlan_cfg_dp_soc_ctxt *cfg)
{
@@ -1716,6 +1726,8 @@ int wlan_cfg_get_num_mac_rings(struct wlan_cfg_dp_pdev_ctxt *cfg)
return cfg->num_mac_rings;
}
qdf_export_symbol(wlan_cfg_get_num_mac_rings);
bool wlan_cfg_is_gro_enabled(struct wlan_cfg_dp_soc_ctxt *cfg)
{
return cfg->gro_enabled;
@@ -1919,6 +1931,8 @@ wlan_cfg_get_dp_soc_rx_sw_desc_weight(struct wlan_cfg_dp_soc_ctxt *cfg)
return cfg->rx_sw_desc_weight;
}
qdf_export_symbol(wlan_cfg_get_dp_soc_rx_sw_desc_weight);
int
wlan_cfg_get_dp_soc_rx_sw_desc_num(struct wlan_cfg_dp_soc_ctxt *cfg)
{
@@ -2014,6 +2028,8 @@ bool wlan_cfg_is_rx_flow_tag_enabled(struct wlan_cfg_dp_soc_ctxt *cfg)
return cfg->is_rx_flow_tag_enabled;
}
qdf_export_symbol(wlan_cfg_is_rx_flow_tag_enabled);
#ifdef WLAN_SUPPORT_RX_FISA
bool wlan_cfg_is_rx_fisa_enabled(struct wlan_cfg_dp_soc_ctxt *cfg)
{
@@ -2068,6 +2084,8 @@ wlan_cfg_is_rx_mon_protocol_flow_tag_enabled(struct wlan_cfg_dp_soc_ctxt *cfg)
return cfg->is_rx_mon_protocol_flow_tag_enabled;
}
qdf_export_symbol(wlan_cfg_is_rx_mon_protocol_flow_tag_enabled);
void
wlan_cfg_set_tx_per_pkt_vdev_id_check(struct wlan_cfg_dp_soc_ctxt *cfg,
bool val)
@@ -2171,6 +2189,8 @@ wlan_cfg_is_delay_mon_replenish(struct wlan_cfg_dp_soc_ctxt *cfg)
return cfg->delay_mon_replenish;
}
qdf_export_symbol(wlan_cfg_is_delay_mon_replenish);
void wlan_cfg_dp_soc_ctx_dump(struct wlan_cfg_dp_soc_ctxt *cfg)
{
dp_info("DP CFG SoC ctx: delay_mon_replenish = %d,",