qcacmn: Fixes for wkk monitor bringup

Fixes for initial wkk monitor bringup in emulation.

Change-Id: Ic7b05b8822ef68daee7dd614fcac7a7de7b9b3fa
CRs-Fixed: 3087563
This commit is contained in:
Naga
2021-12-21 12:51:34 +05:30
committed by Madan Koyyalamudi
parent 32bc004766
commit 902e67deb9
14 changed files with 205 additions and 178 deletions

View File

@@ -76,13 +76,37 @@ qdf_size_t dp_get_context_size_be(enum dp_context_type context_type)
return sizeof(struct dp_vdev_be); return sizeof(struct dp_vdev_be);
case DP_CONTEXT_TYPE_PEER: case DP_CONTEXT_TYPE_PEER:
return sizeof(struct dp_peer_be); return sizeof(struct dp_peer_be);
case DP_CONTEXT_TYPE_MON_PDEV:
return dp_get_mon_obj_be_size(DP_CONTEXT_TYPE_MON_PDEV);
default: default:
return 0; return 0;
} }
} }
#ifdef QCA_MONITOR_2_0_SUPPORT
qdf_size_t dp_mon_get_context_size_be(enum dp_context_type context_type)
{
switch (context_type) {
case DP_CONTEXT_TYPE_MON_SOC:
return sizeof(struct dp_mon_soc_be);
case DP_CONTEXT_TYPE_MON_PDEV:
return sizeof(struct dp_mon_pdev_be);
default:
return 0;
}
}
#else
qdf_size_t dp_mon_get_context_size_be(enum dp_context_type context_type)
{
switch (context_type) {
case DP_CONTEXT_TYPE_MON_SOC:
return sizeof(struct dp_mon_soc);
case DP_CONTEXT_TYPE_MON_PDEV:
return sizeof(struct dp_mon_pdev);
default:
return 0;
}
}
#endif
#ifdef DP_FEATURE_HW_COOKIE_CONVERSION #ifdef DP_FEATURE_HW_COOKIE_CONVERSION
#if defined(WLAN_MAX_PDEVS) && (WLAN_MAX_PDEVS == 1) #if defined(WLAN_MAX_PDEVS) && (WLAN_MAX_PDEVS == 1)
/** /**
@@ -1456,6 +1480,9 @@ void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops)
dp_wbm_get_rx_desc_from_hal_desc_be; dp_wbm_get_rx_desc_from_hal_desc_be;
#endif #endif
arch_ops->txrx_get_context_size = dp_get_context_size_be; arch_ops->txrx_get_context_size = dp_get_context_size_be;
#if QCA_MONITOR_2_0_SUPPORT
arch_ops->txrx_get_mon_context_size = dp_mon_get_context_size_be;
#endif
arch_ops->dp_rx_desc_cookie_2_va = arch_ops->dp_rx_desc_cookie_2_va =
dp_rx_desc_cookie_2_va_be; dp_rx_desc_cookie_2_va_be;

View File

@@ -293,6 +293,17 @@ void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops);
*/ */
qdf_size_t dp_get_context_size_be(enum dp_context_type context_type); qdf_size_t dp_get_context_size_be(enum dp_context_type context_type);
#if QCA_MONITOR_2_0_SUPPORT
/**
* dp_mon_get_context_size_be() - get BE specific size for mon pdev/soc
* @arch_ops: arch ops pointer
*
* Return: size in bytes for the context_type
*/
qdf_size_t dp_mon_get_context_size_be(enum dp_context_type context_type);
#endif
/** /**
* dp_get_be_soc_from_dp_soc() - get dp_soc_be from dp_soc * dp_get_be_soc_from_dp_soc() - get dp_soc_be from dp_soc
* @soc: dp_soc pointer * @soc: dp_soc pointer
@@ -683,30 +694,4 @@ QDF_STATUS dp_txrx_set_vdev_param_be(struct dp_soc *soc,
enum cdp_vdev_param_type param, enum cdp_vdev_param_type param,
cdp_config_param_type val); cdp_config_param_type val);
/*
* dp_get_mon_obj_be_size: get monitor context size
* @context_type: context type
*
* return: size of context
*/
#ifdef QCA_MONITOR_2_0_SUPPORT
static inline qdf_size_t
dp_get_mon_obj_be_size(enum dp_context_type context_type)
{
switch (context_type) {
case DP_CONTEXT_TYPE_MON_PDEV:
return sizeof(struct dp_mon_pdev_be);
break;
default:
return 0;
}
}
#else
static inline qdf_size_t
dp_get_mon_obj_be_size(enum dp_context_type context_type)
{
return sizeof(struct dp_mon_pdev);
}
#endif
#endif #endif

View File

@@ -412,6 +412,8 @@ struct dp_rx_nbuf_frag_info {
* @DP_RX_REINJECT_RING_HIST_TYPE: Datapath reinject ring history * @DP_RX_REINJECT_RING_HIST_TYPE: Datapath reinject ring history
* @DP_RX_REFILL_RING_HIST_TYPE: Datapath rx refill ring history * @DP_RX_REFILL_RING_HIST_TYPE: Datapath rx refill ring history
* @DP_TX_HW_DESC_HIST_TYPE: Datapath TX HW descriptor history * @DP_TX_HW_DESC_HIST_TYPE: Datapath TX HW descriptor history
* @DP_MON_SOC_TYPE: Datapath monitor soc context
* @DP_MON_PDEV_TYPE: Datapath monitor pdev context
*/ */
enum dp_ctxt_type { enum dp_ctxt_type {
DP_PDEV_TYPE, DP_PDEV_TYPE,
@@ -423,6 +425,8 @@ enum dp_ctxt_type {
DP_FISA_RX_FT_TYPE, DP_FISA_RX_FT_TYPE,
DP_RX_REFILL_RING_HIST_TYPE, DP_RX_REFILL_RING_HIST_TYPE,
DP_TX_HW_DESC_HIST_TYPE, DP_TX_HW_DESC_HIST_TYPE,
DP_MON_SOC_TYPE,
DP_MON_PDEV_TYPE,
}; };
/** /**
@@ -1610,6 +1614,8 @@ struct dp_tx_msdu_info_s;
* @DP_CONTEXT_TYPE_PDEV: Context type DP PDEV * @DP_CONTEXT_TYPE_PDEV: Context type DP PDEV
* @DP_CONTEXT_TYPE_VDEV: Context type DP VDEV * @DP_CONTEXT_TYPE_VDEV: Context type DP VDEV
* @DP_CONTEXT_TYPE_PEER: Context type DP PEER * @DP_CONTEXT_TYPE_PEER: Context type DP PEER
* @DP_CONTEXT_TYPE_MON_SOC: Context type DP MON SOC
* @DP_CONTEXT_TYPE_MON_PDEV: Context type DP MON PDEV
* *
* Helper enums to be used to retrieve the size of the corresponding * Helper enums to be used to retrieve the size of the corresponding
* data structure by passing the type. * data structure by passing the type.
@@ -1618,7 +1624,9 @@ enum dp_context_type {
DP_CONTEXT_TYPE_SOC, DP_CONTEXT_TYPE_SOC,
DP_CONTEXT_TYPE_PDEV, DP_CONTEXT_TYPE_PDEV,
DP_CONTEXT_TYPE_VDEV, DP_CONTEXT_TYPE_VDEV,
DP_CONTEXT_TYPE_PEER DP_CONTEXT_TYPE_PEER,
DP_CONTEXT_TYPE_MON_SOC,
DP_CONTEXT_TYPE_MON_PDEV
}; };
/* /*
@@ -1720,6 +1728,7 @@ struct dp_arch_ops {
/* Misc Arch Ops */ /* Misc Arch Ops */
qdf_size_t (*txrx_get_context_size)(enum dp_context_type); qdf_size_t (*txrx_get_context_size)(enum dp_context_type);
qdf_size_t (*txrx_get_mon_context_size)(enum dp_context_type);
int (*dp_srng_test_and_update_nf_params)(struct dp_soc *soc, int (*dp_srng_test_and_update_nf_params)(struct dp_soc *soc,
struct dp_srng *dp_srng, struct dp_srng *dp_srng,
int *max_reap_limit); int *max_reap_limit);

View File

@@ -64,6 +64,18 @@ qdf_size_t dp_get_context_size_li(enum dp_context_type context_type)
} }
} }
qdf_size_t dp_mon_get_context_size_li(enum dp_context_type context_type)
{
switch (context_type) {
case DP_CONTEXT_TYPE_MON_PDEV:
return sizeof(struct dp_mon_pdev_li);
case DP_CONTEXT_TYPE_MON_SOC:
return sizeof(struct dp_mon_soc_li);
default:
return 0;
}
}
static QDF_STATUS dp_soc_attach_li(struct dp_soc *soc, static QDF_STATUS dp_soc_attach_li(struct dp_soc *soc,
struct cdp_soc_attach_params *params) struct cdp_soc_attach_params *params)
{ {
@@ -403,6 +415,7 @@ void dp_initialize_arch_ops_li(struct dp_arch_ops *arch_ops)
arch_ops->dp_rx_desc_pool_deinit = dp_rx_desc_pool_deinit_generic; arch_ops->dp_rx_desc_pool_deinit = dp_rx_desc_pool_deinit_generic;
#endif #endif
arch_ops->txrx_get_context_size = dp_get_context_size_li; arch_ops->txrx_get_context_size = dp_get_context_size_li;
arch_ops->txrx_get_mon_context_size = dp_mon_get_context_size_li;
arch_ops->txrx_soc_attach = dp_soc_attach_li; arch_ops->txrx_soc_attach = dp_soc_attach_li;
arch_ops->txrx_soc_detach = dp_soc_detach_li; arch_ops->txrx_soc_detach = dp_soc_detach_li;
arch_ops->txrx_soc_init = dp_soc_init_li; arch_ops->txrx_soc_init = dp_soc_init_li;

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2021 The Linux Foundation. All rights reserved. * Copyright (c) 2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. * Copyright (c) 2021,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
@@ -20,6 +20,7 @@
#define __DP_LI_H #define __DP_LI_H
#include <dp_types.h> #include <dp_types.h>
#include <dp_mon.h>
#include <hal_li_tx.h> #include <hal_li_tx.h>
#include <hal_li_rx.h> #include <hal_li_rx.h>
@@ -58,6 +59,22 @@ struct dp_peer_li {
struct dp_peer peer; struct dp_peer peer;
}; };
/**
* struct dp_mon_soc_li - Extended DP mon soc for LI targets
* @mon_soc: dp_mon_soc structure
*/
struct dp_mon_soc_li {
struct dp_mon_soc mon_soc;
};
/**
* struct dp_mon_pdev_li - Extended DP mon pdev for LI targets
* @mon_pdev: dp_mon_pdev structure
*/
struct dp_mon_pdev_li {
struct dp_mon_pdev mon_pdev;
};
/** /**
* dp_get_soc_context_size_LI() - get context size for dp_soc_li * dp_get_soc_context_size_LI() - get context size for dp_soc_li
* *
@@ -82,4 +99,13 @@ void dp_initialize_arch_ops_li(struct dp_arch_ops *arch_ops);
qdf_size_t dp_get_context_size_li(enum dp_context_type context_type); qdf_size_t dp_get_context_size_li(enum dp_context_type context_type);
/**
* dp_mon_get_context_size_li() - get LI specific size for mon pdev/soc
* @arch_ops: arch ops pointer
*
* Return: size in bytes for the context_type
*/
qdf_size_t dp_mon_get_context_size_li(enum dp_context_type context_type);
#endif #endif

View File

@@ -29,15 +29,6 @@
#include <hal_be_api_mon.h> #include <hal_be_api_mon.h>
#include <dp_be.h> #include <dp_be.h>
extern QDF_STATUS dp_srng_alloc(struct dp_soc *soc, struct dp_srng *srng,
int ring_type, uint32_t num_entries,
bool cached);
extern void dp_srng_free(struct dp_soc *soc, struct dp_srng *srng);
extern QDF_STATUS dp_srng_init(struct dp_soc *soc, struct dp_srng *srng,
int ring_type, int ring_num, int mac_id);
extern void dp_srng_deinit(struct dp_soc *soc, struct dp_srng *srng,
int ring_type, int ring_num);
#if !defined(DISABLE_MON_CONFIG) #if !defined(DISABLE_MON_CONFIG)
/* /*
* dp_mon_add_desc_list_to_free_list() - append unused desc_list back to * dp_mon_add_desc_list_to_free_list() - append unused desc_list back to
@@ -120,8 +111,8 @@ void dp_mon_pool_frag_unmap_and_free(struct dp_soc *soc,
if (!(mon_desc_pool->array[desc_id].mon_desc.unmapped)) { if (!(mon_desc_pool->array[desc_id].mon_desc.unmapped)) {
qdf_mem_unmap_page(soc->osdev, paddr, qdf_mem_unmap_page(soc->osdev, paddr,
QDF_DMA_FROM_DEVICE, mon_desc_pool->buf_size,
mon_desc_pool->buf_size); QDF_DMA_FROM_DEVICE);
mon_desc_pool->array[desc_id].mon_desc.unmapped = 1; mon_desc_pool->array[desc_id].mon_desc.unmapped = 1;
mon_desc_pool->array[desc_id].mon_desc.cookie = desc_id; mon_desc_pool->array[desc_id].mon_desc.cookie = desc_id;
} }
@@ -211,7 +202,7 @@ dp_mon_buffers_replenish(struct dp_soc *dp_soc,
num_req_buffers = num_entries_avail; num_req_buffers = num_entries_avail;
} }
while (count <= num_req_buffers) { while (count <= num_req_buffers - 1) {
ret = dp_mon_frag_alloc_and_map(dp_soc, ret = dp_mon_frag_alloc_and_map(dp_soc,
&mon_desc, &mon_desc,
mon_desc_pool); mon_desc_pool);
@@ -232,6 +223,8 @@ dp_mon_buffers_replenish(struct dp_soc *dp_soc,
(*desc_list)->mon_desc.in_use = 1; (*desc_list)->mon_desc.in_use = 1;
(*desc_list)->mon_desc.unmapped = 0; (*desc_list)->mon_desc.unmapped = 0;
(*desc_list)->mon_desc.buf_addr = mon_desc.buf_addr;
(*desc_list)->mon_desc.paddr = mon_desc.paddr;
hal_mon_buff_addr_info_set(dp_soc->hal_soc, hal_mon_buff_addr_info_set(dp_soc->hal_soc,
mon_ring_entry, mon_ring_entry,
@@ -533,16 +526,17 @@ QDF_STATUS dp_mon_soc_detach_2_0(struct dp_soc *soc)
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc); struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
struct dp_mon_soc_be *mon_soc = be_soc->monitor_soc_be; struct dp_mon_soc_be *mon_soc = be_soc->monitor_soc_be;
if (!mon_soc) {
dp_mon_err("DP MON SOC NULL");
return QDF_STATUS_E_FAILURE;
}
dp_tx_mon_buffers_free(soc); dp_tx_mon_buffers_free(soc);
dp_rx_mon_buffers_free(soc); dp_rx_mon_buffers_free(soc);
dp_tx_mon_buf_desc_pool_free(soc); dp_tx_mon_buf_desc_pool_free(soc);
dp_rx_mon_buf_desc_pool_free(soc); dp_rx_mon_buf_desc_pool_free(soc);
if (mon_soc) {
dp_srng_free(soc, &soc->rxdma_mon_buf_ring[0]); dp_srng_free(soc, &soc->rxdma_mon_buf_ring[0]);
dp_srng_free(soc, &mon_soc->tx_mon_buf_ring); dp_srng_free(soc, &mon_soc->tx_mon_buf_ring);
qdf_mem_free(be_soc->monitor_soc_be);
}
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
@@ -551,18 +545,20 @@ static
QDF_STATUS dp_mon_soc_attach_2_0(struct dp_soc *soc) QDF_STATUS dp_mon_soc_attach_2_0(struct dp_soc *soc)
{ {
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc); struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
struct dp_mon_soc_be *mon_soc = NULL; struct dp_mon_soc_be *mon_soc_be = NULL;
struct dp_mon_soc *mon_soc = soc->monitor_soc;
int entries; int entries;
struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx; struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx;
soc_cfg_ctx = soc->wlan_cfg_ctx; soc_cfg_ctx = soc->wlan_cfg_ctx;
mon_soc = (struct dp_mon_soc_be *)qdf_mem_malloc(sizeof(*mon_soc)); mon_soc_be = (struct dp_mon_soc_be *)mon_soc;
if (!mon_soc) { if (!mon_soc_be) {
dp_mon_err("%pK: mem allocation failed", soc); dp_mon_err("DP MON SOC is NULL");
return QDF_STATUS_E_NOMEM; return QDF_STATUS_E_FAILURE;
} }
qdf_mem_zero(mon_soc, sizeof(*mon_soc));
be_soc->monitor_soc_be = mon_soc; mon_soc_be->tx_mon_ring_fill_level = DP_MON_RING_FILL_LEVEL_DEFAULT;
mon_soc_be->rx_mon_ring_fill_level = DP_MON_RING_FILL_LEVEL_DEFAULT;
entries = wlan_cfg_get_dp_soc_rx_mon_buf_ring_size(soc_cfg_ctx); entries = wlan_cfg_get_dp_soc_rx_mon_buf_ring_size(soc_cfg_ctx);
if (dp_srng_alloc(soc, &soc->rxdma_mon_buf_ring[0], if (dp_srng_alloc(soc, &soc->rxdma_mon_buf_ring[0],
@@ -578,7 +574,19 @@ QDF_STATUS dp_mon_soc_attach_2_0(struct dp_soc *soc)
goto fail; goto fail;
} }
/* sw desc pool for src ring */ if (dp_srng_init(soc, &soc->rxdma_mon_buf_ring[0],
RXDMA_MONITOR_BUF, 0, 0)) {
dp_mon_err("%pK: " RNG_ERR "rx_mon_buf_ring", soc);
goto fail;
}
if (dp_srng_init(soc, &mon_soc_be->tx_mon_buf_ring,
TX_MONITOR_BUF, 0, 0)) {
dp_mon_err("%pK: " RNG_ERR "tx_mon_buf_ring", soc);
goto fail;
}
/* allocate sw desc pool */
if (dp_rx_mon_buf_desc_pool_alloc(soc)) { if (dp_rx_mon_buf_desc_pool_alloc(soc)) {
dp_mon_err("%pK: Rx mon desc pool allocation failed", soc); dp_mon_err("%pK: Rx mon desc pool allocation failed", soc);
goto fail; goto fail;
@@ -589,7 +597,18 @@ QDF_STATUS dp_mon_soc_attach_2_0(struct dp_soc *soc)
goto fail; goto fail;
} }
/* monitor buffers for src */ /* initialize sw desc pool */
if (dp_tx_mon_buf_desc_pool_init(soc)) {
dp_mon_err("%pK: " RNG_ERR "tx mon desc pool init", soc);
goto fail;
}
if (dp_rx_mon_buf_desc_pool_init(soc)) {
dp_mon_err("%pK: " RNG_ERR "rx mon desc pool init", soc);
goto fail;
}
/* allocate and replenish initial buffers */
if (dp_rx_mon_buffers_alloc(soc)) { if (dp_rx_mon_buffers_alloc(soc)) {
dp_mon_err("%pK: Rx mon buffers allocation failed", soc); dp_mon_err("%pK: Rx mon buffers allocation failed", soc);
goto fail; goto fail;
@@ -606,57 +625,6 @@ fail:
return QDF_STATUS_E_NOMEM; return QDF_STATUS_E_NOMEM;
} }
static
QDF_STATUS dp_mon_soc_deinit_2_0(struct dp_soc *soc)
{
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
struct dp_mon_soc_be *mon_soc = be_soc->monitor_soc_be;
dp_tx_mon_buf_desc_pool_deinit(soc);
dp_rx_mon_buf_desc_pool_deinit(soc);
dp_srng_deinit(soc, &soc->rxdma_mon_buf_ring[0],
RXDMA_MONITOR_BUF, 0);
dp_srng_deinit(soc, &mon_soc->tx_mon_buf_ring,
TX_MONITOR_BUF, 0);
return QDF_STATUS_SUCCESS;
}
static
QDF_STATUS dp_mon_soc_init_2_0(struct dp_soc *soc)
{
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
struct dp_mon_soc_be *mon_soc = be_soc->monitor_soc_be;
if (dp_srng_init(soc, &soc->rxdma_mon_buf_ring[0],
RXDMA_MONITOR_BUF, 0, 0)) {
dp_mon_err("%pK: " RNG_ERR "rx_mon_buf_ring", soc);
goto fail;
}
if (dp_srng_init(soc, &mon_soc->tx_mon_buf_ring,
TX_MONITOR_BUF, 0, 0)) {
dp_mon_err("%pK: " RNG_ERR "tx_mon_buf_ring", soc);
goto fail;
}
if (dp_tx_mon_buf_desc_pool_init(soc)) {
dp_mon_err("%pK: " RNG_ERR "tx mon desc pool init", soc);
goto fail;
}
if (dp_rx_mon_buf_desc_pool_init(soc)) {
dp_mon_err("%pK: " RNG_ERR "rx mon desc pool init", soc);
goto fail;
}
return QDF_STATUS_SUCCESS;
fail:
dp_mon_soc_deinit_2_0(soc);
return QDF_STATUS_E_FAILURE;
}
static static
void dp_pdev_mon_rings_deinit_2_0(struct dp_pdev *pdev) void dp_pdev_mon_rings_deinit_2_0(struct dp_pdev *pdev)
{ {
@@ -764,25 +732,19 @@ fail:
static static
void dp_mon_pdev_free_2_0(struct dp_pdev *pdev) void dp_mon_pdev_free_2_0(struct dp_pdev *pdev)
{ {
struct dp_pdev_be *be_pdev = dp_get_be_pdev_from_dp_pdev(pdev);
qdf_mem_free(be_pdev->monitor_pdev_be);
be_pdev->monitor_pdev_be = NULL;
} }
static static
QDF_STATUS dp_mon_pdev_alloc_2_0(struct dp_pdev *pdev) QDF_STATUS dp_mon_pdev_alloc_2_0(struct dp_pdev *pdev)
{ {
struct dp_mon_pdev_be *mon_pdev = NULL; struct dp_mon_pdev_be *mon_pdev_be = NULL;
struct dp_pdev_be *be_pdev = dp_get_be_pdev_from_dp_pdev(pdev); struct dp_pdev_be *be_pdev = dp_get_be_pdev_from_dp_pdev(pdev);
mon_pdev = (struct dp_mon_pdev_be *)qdf_mem_malloc(sizeof(*mon_pdev)); mon_pdev_be = be_pdev->monitor_pdev_be;
if (!mon_pdev) { if (!mon_pdev_be) {
dp_mon_err("%pK: mem allocation failed", pdev); dp_mon_err("DP MON PDEV is NULL");
return QDF_STATUS_E_NOMEM; return QDF_STATUS_E_FAILURE;
} }
qdf_mem_zero(mon_pdev, sizeof(*mon_pdev));
be_pdev->monitor_pdev_be = mon_pdev;
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
@@ -804,7 +766,7 @@ dp_rx_mon_process_2_0(struct dp_soc *soc, struct dp_intr *int_ctx,
} }
static uint32_t static uint32_t
dp_tx_mon_process(struct dp_soc *soc, struct dp_intr *int_ctx, dp_tx_mon_process_2_0(struct dp_soc *soc, struct dp_intr *int_ctx,
uint32_t mac_id, uint32_t quota) uint32_t mac_id, uint32_t quota)
{ {
return 0; return 0;
@@ -822,18 +784,6 @@ QDF_STATUS dp_mon_soc_detach_2_0(struct dp_soc *soc)
return status; return status;
} }
static inline
QDF_STATUS dp_mon_soc_init_2_0(struct dp_soc *soc)
{
return status;
}
static inline
QDF_STATUS dp_mon_soc_deinit_2_0(struct dp_soc *soc)
{
return status;
}
static inline static inline
void dp_pdev_mon_rings_deinit_2_0(struct dp_pdev *pdev) void dp_pdev_mon_rings_deinit_2_0(struct dp_pdev *pdev)
{ {
@@ -906,7 +856,7 @@ dp_mon_register_feature_ops_2_0(struct dp_soc *soc)
mon_ops->mon_pdev_get_filter_non_data = dp_pdev_get_filter_non_data; mon_ops->mon_pdev_get_filter_non_data = dp_pdev_get_filter_non_data;
mon_ops->mon_neighbour_peer_add_ast = NULL; mon_ops->mon_neighbour_peer_add_ast = NULL;
#ifndef DISABLE_MON_CONFIG #ifndef DISABLE_MON_CONFIG
mon_ops->mon_tx_process = dp_tx_mon_process; mon_ops->mon_tx_process = dp_tx_mon_process_2_0;
#endif #endif
#ifdef WLAN_TX_PKT_CAPTURE_ENH #ifdef WLAN_TX_PKT_CAPTURE_ENH
mon_ops->mon_peer_tid_peer_id_update = NULL; mon_ops->mon_peer_tid_peer_id_update = NULL;
@@ -1001,8 +951,6 @@ struct dp_mon_ops monitor_ops_2_0 = {
.mon_soc_cfg_init = dp_mon_soc_cfg_init, .mon_soc_cfg_init = dp_mon_soc_cfg_init,
.mon_soc_attach = dp_mon_soc_attach_2_0, .mon_soc_attach = dp_mon_soc_attach_2_0,
.mon_soc_detach = dp_mon_soc_detach_2_0, .mon_soc_detach = dp_mon_soc_detach_2_0,
.mon_soc_init = dp_mon_soc_init_2_0,
.mon_soc_deinit = dp_mon_soc_deinit_2_0,
.mon_pdev_alloc = dp_mon_pdev_alloc_2_0, .mon_pdev_alloc = dp_mon_pdev_alloc_2_0,
.mon_pdev_free = dp_mon_pdev_free_2_0, .mon_pdev_free = dp_mon_pdev_free_2_0,
.mon_pdev_attach = dp_mon_pdev_attach, .mon_pdev_attach = dp_mon_pdev_attach,

View File

@@ -24,6 +24,7 @@
#include <dp_mon.h> #include <dp_mon.h>
#include <dp_mon_filter.h> #include <dp_mon_filter.h>
#include <dp_htt.h> #include <dp_htt.h>
#include <dp_mon.h>
#define DP_MON_RING_FILL_LEVEL_DEFAULT 2048 #define DP_MON_RING_FILL_LEVEL_DEFAULT 2048
#define DP_MON_DATA_BUFFER_SIZE 2048 #define DP_MON_DATA_BUFFER_SIZE 2048
@@ -92,8 +93,8 @@ struct dp_mon_desc_pool {
/** /**
* struct dp_mon_pdev_be - BE specific monitor pdev object * struct dp_mon_pdev_be - BE specific monitor pdev object
* @filter_be: Monitor Filter pointer
* @mon_pdev: monitor pdev structure * @mon_pdev: monitor pdev structure
* @filter_be: filters sent to fw
*/ */
struct dp_mon_pdev_be { struct dp_mon_pdev_be {
struct dp_mon_pdev mon_pdev; struct dp_mon_pdev mon_pdev;

View File

@@ -77,7 +77,7 @@ dp_rx_mon_srng_process_2_0(struct dp_soc *soc, struct dp_intr *int_ctx,
struct dp_mon_desc_pool *rx_desc_pool; struct dp_mon_desc_pool *rx_desc_pool;
rx_desc_pool = &monitor_soc->rx_desc_mon; rx_desc_pool = &monitor_soc->rx_desc_mon;
hal_mon_buf_get(soc->hal_soc, hal_be_get_mon_dest_status(soc->hal_soc,
rx_mon_dst_ring_desc, rx_mon_dst_ring_desc,
&hal_mon_rx_desc); &hal_mon_rx_desc);
mon_desc = (struct dp_mon_desc *)(uintptr_t)(hal_mon_rx_desc.buf_addr); mon_desc = (struct dp_mon_desc *)(uintptr_t)(hal_mon_rx_desc.buf_addr);
@@ -85,8 +85,8 @@ dp_rx_mon_srng_process_2_0(struct dp_soc *soc, struct dp_intr *int_ctx,
if (!mon_desc->unmapped) { if (!mon_desc->unmapped) {
qdf_mem_unmap_page(soc->osdev, mon_desc->paddr, qdf_mem_unmap_page(soc->osdev, mon_desc->paddr,
QDF_DMA_FROM_DEVICE, rx_desc_pool->buf_size,
rx_desc_pool->buf_size); QDF_DMA_FROM_DEVICE);
mon_desc->unmapped = 1; mon_desc->unmapped = 1;
} }
@@ -129,18 +129,8 @@ dp_rx_mon_buf_desc_pool_init(struct dp_soc *soc)
{ {
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc); struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
struct dp_mon_soc_be *mon_soc = be_soc->monitor_soc_be; struct dp_mon_soc_be *mon_soc = be_soc->monitor_soc_be;
QDF_STATUS status;
status = dp_mon_desc_pool_init(&mon_soc->rx_desc_mon); return dp_mon_desc_pool_init(&mon_soc->rx_desc_mon);
if (status != QDF_STATUS_SUCCESS) {
dp_mon_err("Failed to init rx monior descriptor pool");
mon_soc->rx_mon_ring_fill_level = 0;
} else {
mon_soc->rx_mon_ring_fill_level =
DP_MON_RING_FILL_LEVEL_DEFAULT;
}
return status;
} }
void dp_rx_mon_buf_desc_pool_free(struct dp_soc *soc) void dp_rx_mon_buf_desc_pool_free(struct dp_soc *soc)

View File

@@ -77,7 +77,7 @@ dp_tx_mon_srng_process_2_0(struct dp_soc *soc, struct dp_intr *int_ctx,
struct dp_mon_desc_pool *tx_desc_pool; struct dp_mon_desc_pool *tx_desc_pool;
tx_desc_pool = &monitor_soc->tx_desc_mon; tx_desc_pool = &monitor_soc->tx_desc_mon;
hal_mon_buf_get(soc->hal_soc, hal_be_get_mon_dest_status(soc->hal_soc,
tx_mon_dst_ring_desc, tx_mon_dst_ring_desc,
&hal_mon_tx_desc); &hal_mon_tx_desc);
mon_desc = (struct dp_mon_desc *)(uintptr_t)(hal_mon_tx_desc.buf_addr); mon_desc = (struct dp_mon_desc *)(uintptr_t)(hal_mon_tx_desc.buf_addr);
@@ -85,8 +85,8 @@ dp_tx_mon_srng_process_2_0(struct dp_soc *soc, struct dp_intr *int_ctx,
if (!mon_desc->unmapped) { if (!mon_desc->unmapped) {
qdf_mem_unmap_page(soc->osdev, mon_desc->paddr, qdf_mem_unmap_page(soc->osdev, mon_desc->paddr,
QDF_DMA_FROM_DEVICE, DP_MON_DATA_BUFFER_SIZE,
tx_desc_pool->buf_size); QDF_DMA_FROM_DEVICE);
mon_desc->unmapped = 1; mon_desc->unmapped = 1;
} }
@@ -129,17 +129,8 @@ dp_tx_mon_buf_desc_pool_init(struct dp_soc *soc)
{ {
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc); struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
struct dp_mon_soc_be *mon_soc = be_soc->monitor_soc_be; struct dp_mon_soc_be *mon_soc = be_soc->monitor_soc_be;
QDF_STATUS status;
status = dp_mon_desc_pool_init(&mon_soc->tx_desc_mon); return dp_mon_desc_pool_init(&mon_soc->tx_desc_mon);
if (status != QDF_STATUS_SUCCESS) {
dp_mon_err("Failed to init tx monior descriptor pool");
mon_soc->tx_mon_ring_fill_level = 0;
} else {
mon_soc->tx_mon_ring_fill_level = DP_MON_RING_FILL_LEVEL_DEFAULT;
}
return status;
} }
void dp_tx_mon_buf_desc_pool_free(struct dp_soc *soc) void dp_tx_mon_buf_desc_pool_free(struct dp_soc *soc)

View File

@@ -87,4 +87,16 @@ void dp_tx_mon_process_status_tlv(struct dp_soc *soc,
struct hal_mon_desc *mon_ring_desc, struct hal_mon_desc *mon_ring_desc,
qdf_dma_addr_t addr); qdf_dma_addr_t addr);
/*
* dp_tx_mon_process_2_0() - tx monitor interrupt process
* @soc: dp soc handle
* @int_ctx: interrupt context
* @mac_id: mac id
* @quota: quota to process
*
*/
uint32_t
dp_tx_mon_process_2_0(struct dp_soc *soc, struct dp_intr *int_ctx,
uint32_t mac_id, uint32_t quota);
#endif /* _DP_TX_MON_2_0_H_ */ #endif /* _DP_TX_MON_2_0_H_ */

View File

@@ -4531,6 +4531,7 @@ QDF_STATUS dp_mon_pdev_attach(struct dp_pdev *pdev)
struct dp_soc *soc; struct dp_soc *soc;
struct dp_mon_pdev *mon_pdev; struct dp_mon_pdev *mon_pdev;
struct dp_mon_ops *mon_ops; struct dp_mon_ops *mon_ops;
qdf_size_t mon_pdev_context_size;
if (!pdev) { if (!pdev) {
dp_mon_err("pdev is NULL"); dp_mon_err("pdev is NULL");
@@ -4539,12 +4540,14 @@ QDF_STATUS dp_mon_pdev_attach(struct dp_pdev *pdev)
soc = pdev->soc; soc = pdev->soc;
mon_pdev = (struct dp_mon_pdev *)qdf_mem_malloc(sizeof(*mon_pdev)); mon_pdev_context_size = soc->arch_ops.txrx_get_mon_context_size(DP_CONTEXT_TYPE_MON_PDEV);
mon_pdev = dp_context_alloc_mem(soc, DP_MON_PDEV_TYPE, mon_pdev_context_size);
if (!mon_pdev) { if (!mon_pdev) {
dp_mon_err("%pK: MONITOR pdev allocation failed", pdev); dp_mon_err("%pK: MONITOR pdev allocation failed", pdev);
goto fail0; goto fail0;
} }
pdev->monitor_pdev = mon_pdev;
mon_ops = dp_mon_ops_get(pdev->soc); mon_ops = dp_mon_ops_get(pdev->soc);
if (!mon_ops) { if (!mon_ops) {
dp_mon_err("%pK: Invalid monitor ops", pdev); dp_mon_err("%pK: Invalid monitor ops", pdev);
@@ -4619,8 +4622,8 @@ QDF_STATUS dp_mon_pdev_detach(struct dp_pdev *pdev)
if (mon_ops->mon_pdev_free) if (mon_ops->mon_pdev_free)
mon_ops->mon_pdev_free(pdev); mon_ops->mon_pdev_free(pdev);
pdev->monitor_pdev = NULL;
qdf_mem_free(mon_pdev); qdf_mem_free(mon_pdev);
pdev->monitor_pdev = NULL;
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
@@ -4696,13 +4699,23 @@ QDF_STATUS dp_mon_pdev_init(struct dp_pdev *pdev)
mon_ops->rx_mon_desc_pool_init(pdev); mon_ops->rx_mon_desc_pool_init(pdev);
/* allocate buffers and replenish the monitor RxDMA ring */ /* allocate buffers and replenish the monitor RxDMA ring */
if (mon_ops->rx_mon_buffers_alloc) if (mon_ops->rx_mon_buffers_alloc) {
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);
goto fail2;
}
}
dp_tx_ppdu_stats_attach(pdev); dp_tx_ppdu_stats_attach(pdev);
mon_pdev->is_dp_mon_pdev_initialized = true; mon_pdev->is_dp_mon_pdev_initialized = true;
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
fail2:
if (mon_ops->rx_mon_desc_pool_deinit)
mon_ops->rx_mon_desc_pool_deinit(pdev);
if (mon_ops->mon_rings_deinit)
mon_ops->mon_rings_deinit(pdev);
fail1: fail1:
dp_htt_ppdu_stats_detach(pdev); dp_htt_ppdu_stats_detach(pdev);
fail0: fail0:

View File

@@ -417,8 +417,6 @@ struct dp_mon_ops {
QDF_STATUS (*mon_soc_cfg_init)(struct dp_soc *soc); QDF_STATUS (*mon_soc_cfg_init)(struct dp_soc *soc);
QDF_STATUS (*mon_soc_attach)(struct dp_soc *soc); QDF_STATUS (*mon_soc_attach)(struct dp_soc *soc);
QDF_STATUS (*mon_soc_detach)(struct dp_soc *soc); QDF_STATUS (*mon_soc_detach)(struct dp_soc *soc);
QDF_STATUS (*mon_soc_init)(struct dp_soc *soc);
QDF_STATUS (*mon_soc_deinit)(struct dp_soc *soc);
QDF_STATUS (*mon_pdev_alloc)(struct dp_pdev *pdev); QDF_STATUS (*mon_pdev_alloc)(struct dp_pdev *pdev);
void (*mon_pdev_free)(struct dp_pdev *pdev); void (*mon_pdev_free)(struct dp_pdev *pdev);
QDF_STATUS (*mon_pdev_attach)(struct dp_pdev *pdev); QDF_STATUS (*mon_pdev_attach)(struct dp_pdev *pdev);
@@ -1895,7 +1893,21 @@ static inline
uint32_t dp_tx_mon_process(struct dp_soc *soc, struct dp_intr *int_ctx, uint32_t dp_tx_mon_process(struct dp_soc *soc, struct dp_intr *int_ctx,
uint32_t mac_id, uint32_t quota) uint32_t mac_id, uint32_t quota)
{ {
struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_ops *monitor_ops;
if (!mon_soc) {
dp_mon_debug("monitor soc is NULL");
return 0; return 0;
}
monitor_ops = mon_soc->mon_ops;
if (!monitor_ops || !monitor_ops->mon_tx_process) {
dp_mon_debug("callback not registered");
return 0;
}
return monitor_ops->mon_tx_process(soc, int_ctx, mac_id, quota);
} }
static inline static inline

View File

@@ -246,7 +246,6 @@ enum hal_srng_ring_id {
/* 163-167 unused */ /* 163-167 unused */
HAL_SRNG_SW2RXMON_BUF0 = 168, HAL_SRNG_SW2RXMON_BUF0 = 168,
/* 169-175 unused */ /* 169-175 unused */
HAL_SRNG_SW2TXMON_BUF0 = 176,
/* 177-183 unused */ /* 177-183 unused */
HAL_SRNG_DMAC_CMN_ID_END = 183, HAL_SRNG_DMAC_CMN_ID_END = 183,
/* LMAC rings - The following set will be replicated for each LMAC */ /* LMAC rings - The following set will be replicated for each LMAC */
@@ -273,7 +272,8 @@ enum hal_srng_ring_id {
HAL_SRNG_DIR_BUF_RX_SRC_DMA_RING, HAL_SRNG_DIR_BUF_RX_SRC_DMA_RING,
#endif #endif
HAL_SRNG_WMAC1_TXMON2SW0, HAL_SRNG_WMAC1_TXMON2SW0,
HAL_SRNG_LMAC1_ID_END = (HAL_SRNG_WMAC1_TXMON2SW0 + 3), HAL_SRNG_SW2TXMON_BUF0,
HAL_SRNG_LMAC1_ID_END = (HAL_SRNG_SW2TXMON_BUF0 + 2),
}; };
#define HAL_RXDMA_MAX_RING_SIZE 0xFFFF #define HAL_RXDMA_MAX_RING_SIZE 0xFFFF

View File

@@ -338,7 +338,7 @@
#define WLAN_CFG_RXDMA_MONITOR_BUF_RING_SIZE_MIN 16 #define WLAN_CFG_RXDMA_MONITOR_BUF_RING_SIZE_MIN 16
#define WLAN_CFG_RXDMA_MONITOR_BUF_RING_SIZE_MAX 8192 #define WLAN_CFG_RXDMA_MONITOR_BUF_RING_SIZE_MAX 8192
#define WLAN_CFG_TX_MONITOR_BUF_RING_SIZE 4096 #define WLAN_CFG_TX_MONITOR_BUF_RING_SIZE 8192
#define WLAN_CFG_TX_MONITOR_BUF_RING_SIZE_MIN 16 #define WLAN_CFG_TX_MONITOR_BUF_RING_SIZE_MIN 16
#define WLAN_CFG_TX_MONITOR_BUF_RING_SIZE_MAX 8192 #define WLAN_CFG_TX_MONITOR_BUF_RING_SIZE_MAX 8192