qcacmn: Fix for monitor issues in WKK

Fix for monitor issues in WKK.

Change-Id: Ie0dbd39b6a9b0014d85b2bdd58113326ac937ba0
CRs-Fixed: 3109099
This commit is contained in:
Adwait Nayak
2022-01-17 18:22:26 +05:30
committed by Madan Koyyalamudi
parent 15ee4b1a2a
commit 10c1ced2ac
10 changed files with 166 additions and 62 deletions

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) 2021,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
@@ -567,6 +567,9 @@ static QDF_STATUS dp_vdev_attach_be(struct dp_soc *soc, struct dp_vdev *vdev)
struct dp_vdev_be *be_vdev = dp_get_be_vdev_from_dp_vdev(vdev); struct dp_vdev_be *be_vdev = dp_get_be_vdev_from_dp_vdev(vdev);
struct dp_pdev *pdev = vdev->pdev; struct dp_pdev *pdev = vdev->pdev;
if (vdev->opmode == wlan_op_mode_monitor)
return QDF_STATUS_SUCCESS;
be_vdev->vdev_id_check_en = DP_TX_VDEV_ID_CHECK_ENABLE; be_vdev->vdev_id_check_en = DP_TX_VDEV_ID_CHECK_ENABLE;
be_vdev->bank_id = dp_tx_get_bank_profile(be_soc, be_vdev); be_vdev->bank_id = dp_tx_get_bank_profile(be_soc, be_vdev);
@@ -601,6 +604,9 @@ static QDF_STATUS dp_vdev_detach_be(struct dp_soc *soc, struct dp_vdev *vdev)
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_vdev_be *be_vdev = dp_get_be_vdev_from_dp_vdev(vdev); struct dp_vdev_be *be_vdev = dp_get_be_vdev_from_dp_vdev(vdev);
if (vdev->opmode == wlan_op_mode_monitor)
return QDF_STATUS_SUCCESS;
dp_tx_put_bank_profile(be_soc, be_vdev); dp_tx_put_bank_profile(be_soc, be_vdev);
dp_clr_mlo_ptnr_list(soc, vdev); dp_clr_mlo_ptnr_list(soc, vdev);

View File

@@ -5634,11 +5634,16 @@ static void dp_soc_deinit(void *txrx_soc)
{ {
struct dp_soc *soc = (struct dp_soc *)txrx_soc; struct dp_soc *soc = (struct dp_soc *)txrx_soc;
struct htt_soc *htt_soc = soc->htt_handle; struct htt_soc *htt_soc = soc->htt_handle;
struct dp_mon_ops *mon_ops;
qdf_atomic_set(&soc->cmn_init_done, 0); qdf_atomic_set(&soc->cmn_init_done, 0);
soc->arch_ops.txrx_soc_deinit(soc); soc->arch_ops.txrx_soc_deinit(soc);
mon_ops = dp_mon_ops_get(soc);
if (mon_ops && mon_ops->mon_soc_deinit)
mon_ops->mon_soc_deinit(soc);
/* free peer tables & AST tables allocated during peer_map_attach */ /* free peer tables & AST tables allocated during peer_map_attach */
if (soc->peer_map_attach_success) { if (soc->peer_map_attach_success) {
dp_peer_find_detach(soc); dp_peer_find_detach(soc);
@@ -13037,6 +13042,7 @@ void *dp_soc_init(struct dp_soc *soc, HTC_HANDLE htc_handle,
struct hal_reo_params reo_params; struct hal_reo_params reo_params;
uint8_t i; uint8_t i;
int num_dp_msi; int num_dp_msi;
struct dp_mon_ops *mon_ops;
wlan_minidump_log(soc, sizeof(*soc), soc->ctrl_psoc, wlan_minidump_log(soc, sizeof(*soc), soc->ctrl_psoc,
WLAN_MD_DP_SOC, "dp_soc"); WLAN_MD_DP_SOC, "dp_soc");
@@ -13197,6 +13203,10 @@ void *dp_soc_init(struct dp_soc *soc, HTC_HANDLE htc_handle,
soc->features.pn_in_reo_dest = hal_reo_enable_pn_in_dest(soc->hal_soc); soc->features.pn_in_reo_dest = hal_reo_enable_pn_in_dest(soc->hal_soc);
mon_ops = dp_mon_ops_get(soc);
if (mon_ops && mon_ops->mon_soc_init)
mon_ops->mon_soc_init(soc);
qdf_atomic_set(&soc->cmn_init_done, 1); qdf_atomic_set(&soc->cmn_init_done, 1);
qdf_nbuf_queue_init(&soc->htt_stats.msg); qdf_nbuf_queue_init(&soc->htt_stats.msg);

View File

@@ -220,6 +220,9 @@ dp_mon_buffers_replenish(struct dp_soc *dp_soc,
dp_soc->hal_soc, dp_soc->hal_soc,
mon_srng); mon_srng);
if (!mon_ring_entry)
break;
qdf_assert_always((*desc_list)->mon_desc.in_use == 0); qdf_assert_always((*desc_list)->mon_desc.in_use == 0);
(*desc_list)->mon_desc.in_use = 1; (*desc_list)->mon_desc.in_use = 1;
@@ -248,7 +251,9 @@ dp_mon_buffers_replenish(struct dp_soc *dp_soc,
return ret; return ret;
} }
QDF_STATUS dp_mon_desc_pool_init(struct dp_mon_desc_pool *mon_desc_pool) QDF_STATUS
dp_mon_desc_pool_init(struct dp_mon_desc_pool *mon_desc_pool,
uint32_t pool_size)
{ {
int desc_id; int desc_id;
/* Initialize monitor desc lock */ /* Initialize monitor desc lock */
@@ -259,6 +264,7 @@ QDF_STATUS dp_mon_desc_pool_init(struct dp_mon_desc_pool *mon_desc_pool)
mon_desc_pool->buf_size = DP_MON_DATA_BUFFER_SIZE; mon_desc_pool->buf_size = DP_MON_DATA_BUFFER_SIZE;
/* link SW descs into a freelist */ /* link SW descs into a freelist */
mon_desc_pool->freelist = &mon_desc_pool->array[0]; mon_desc_pool->freelist = &mon_desc_pool->array[0];
mon_desc_pool->pool_size = pool_size;
qdf_mem_zero(mon_desc_pool->freelist, mon_desc_pool->pool_size); qdf_mem_zero(mon_desc_pool->freelist, mon_desc_pool->pool_size);
for (desc_id = 0; desc_id <= mon_desc_pool->pool_size - 1; desc_id++) { for (desc_id = 0; desc_id <= mon_desc_pool->pool_size - 1; desc_id++) {
@@ -545,8 +551,6 @@ QDF_STATUS dp_mon_soc_detach_2_0(struct dp_soc *soc)
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }
dp_tx_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);
dp_srng_free(soc, &soc->rxdma_mon_buf_ring[0]); dp_srng_free(soc, &soc->rxdma_mon_buf_ring[0]);
@@ -555,16 +559,110 @@ QDF_STATUS dp_mon_soc_detach_2_0(struct dp_soc *soc)
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
static void dp_mon_soc_deinit_2_0(struct dp_soc *soc)
{
struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_soc_be *mon_soc_be =
dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
dp_tx_mon_buffers_free(soc);
dp_rx_mon_buffers_free(soc);
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_be->tx_mon_buf_ring, TX_MONITOR_BUF, 0);
}
static
QDF_STATUS dp_rx_mon_soc_init_2_0(struct dp_soc *soc)
{
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_rx_mon_buf_desc_pool_init(soc)) {
dp_mon_err("%pK: " RNG_ERR "rx mon desc pool init", soc);
goto fail;
}
/* monitor buffers for src */
if (dp_rx_mon_buffers_alloc(soc, DP_MON_RING_FILL_LEVEL_DEFAULT)) {
dp_mon_err("%pK: Rx mon buffers allocation failed", soc);
goto fail;
}
return QDF_STATUS_SUCCESS;
fail:
return QDF_STATUS_E_FAILURE;
}
static
QDF_STATUS dp_tx_mon_soc_init_2_0(struct dp_soc *soc)
{
struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_soc_be *mon_soc_be =
dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
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;
}
if (dp_tx_mon_buf_desc_pool_init(soc)) {
dp_mon_err("%pK: " RNG_ERR "tx mon desc pool init", soc);
goto fail;
}
/* monitor buffers for src */
if (dp_tx_mon_buffers_alloc(soc, DP_MON_RING_FILL_LEVEL_DEFAULT)) {
dp_mon_err("%pK: Tx mon buffers allocation failed", soc);
goto fail;
}
return QDF_STATUS_SUCCESS;
fail:
return QDF_STATUS_E_FAILURE;
}
static
QDF_STATUS dp_mon_soc_init_2_0(struct dp_soc *soc)
{
if (soc->rxdma_mon_buf_ring[0].hal_srng) {
dp_mon_info("%pK: mon soc init is done", soc);
return QDF_STATUS_SUCCESS;
}
if (dp_rx_mon_soc_init_2_0(soc)) {
dp_mon_err("%pK: " RNG_ERR "tx_mon_buf_ring", soc);
goto fail;
}
if (dp_tx_mon_soc_init_2_0(soc)) {
dp_mon_err("%pK: " RNG_ERR "tx_mon_buf_ring", soc);
goto fail;
}
return QDF_STATUS_SUCCESS;
fail:
dp_mon_soc_deinit_2_0(soc);
return QDF_STATUS_E_FAILURE;
}
static 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_mon_soc_be *mon_soc_be = NULL;
struct dp_mon_soc *mon_soc = soc->monitor_soc; struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_soc_be *mon_soc_be =
dp_get_be_mon_soc_from_dp_mon_soc(mon_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_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
if (!mon_soc_be) { if (!mon_soc_be) {
dp_mon_err("DP MON SOC is NULL"); dp_mon_err("DP MON SOC is NULL");
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
@@ -589,18 +687,6 @@ QDF_STATUS dp_mon_soc_attach_2_0(struct dp_soc *soc)
goto fail; goto fail;
} }
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 */ /* 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);
@@ -612,28 +698,6 @@ QDF_STATUS dp_mon_soc_attach_2_0(struct dp_soc *soc)
goto fail; goto fail;
} }
/* 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;
}
/* monitor buffers for src */
if (dp_rx_mon_buffers_alloc(soc, DP_MON_RING_FILL_LEVEL_DEFAULT)) {
dp_mon_err("%pK: Rx mon buffers allocation failed", soc);
goto fail;
}
if (dp_tx_mon_buffers_alloc(soc, DP_MON_RING_FILL_LEVEL_DEFAULT)) {
dp_mon_err("%pK: Tx mon buffers allocation failed", soc);
goto fail;
}
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
fail: fail:
dp_mon_soc_detach_2_0(soc); dp_mon_soc_detach_2_0(soc);
@@ -975,6 +1039,8 @@ 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

@@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2021 The Linux Foundation. All rights reserved. * Copyright (c) 2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021,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 any * Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * purpose with or without fee is hereby granted, provided that the above
@@ -134,10 +134,13 @@ struct dp_mon_soc_be {
/** /**
* dp_mon_desc_pool_init() - Monitor descriptor pool init * dp_mon_desc_pool_init() - Monitor descriptor pool init
* @mon_desc_pool: mon desc pool * @mon_desc_pool: mon desc pool
* @pool_size
* *
* Return: non-zero for failure, zero for success * Return: non-zero for failure, zero for success
*/ */
QDF_STATUS dp_mon_desc_pool_init(struct dp_mon_desc_pool *mon_desc_pool); QDF_STATUS
dp_mon_desc_pool_init(struct dp_mon_desc_pool *mon_desc_pool,
uint32_t pool_size);
/* /*
* dp_mon_desc_pool_deinit()- monitor descriptor pool deinit * dp_mon_desc_pool_deinit()- monitor descriptor pool deinit

View File

@@ -1745,5 +1745,8 @@ QDF_STATUS dp_rx_mon_filter_update_2_0(struct dp_pdev *pdev)
dp_mon_filter_h2t_setup(soc, pdev, srng_type, &filter.rx_tlv_filter); dp_mon_filter_h2t_setup(soc, pdev, srng_type, &filter.rx_tlv_filter);
dp_mon_ht2_rx_ring_cfg(soc, pdev, srng_type, dp_mon_ht2_rx_ring_cfg(soc, pdev, srng_type,
&filter.rx_tlv_filter.tlv_filter); &filter.rx_tlv_filter.tlv_filter);
dp_mon_filter_show_filter(mon_pdev,
DP_MON_FILTER_MONITOR_MODE,
&filter.rx_tlv_filter);
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }

View File

@@ -126,7 +126,8 @@ void
dp_rx_mon_buf_desc_pool_deinit(struct dp_soc *soc) dp_rx_mon_buf_desc_pool_deinit(struct dp_soc *soc)
{ {
struct dp_mon_soc *mon_soc = soc->monitor_soc; struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_soc_be *mon_soc_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc); struct dp_mon_soc_be *mon_soc_be =
dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
dp_mon_desc_pool_deinit(&mon_soc_be->rx_desc_mon); dp_mon_desc_pool_deinit(&mon_soc_be->rx_desc_mon);
} }
@@ -135,15 +136,20 @@ QDF_STATUS
dp_rx_mon_buf_desc_pool_init(struct dp_soc *soc) dp_rx_mon_buf_desc_pool_init(struct dp_soc *soc)
{ {
struct dp_mon_soc *mon_soc = soc->monitor_soc; struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_soc_be *mon_soc_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc); struct dp_mon_soc_be *mon_soc_be =
dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
uint32_t num_entries;
return dp_mon_desc_pool_init(&mon_soc_be->rx_desc_mon); num_entries =
wlan_cfg_get_dp_soc_rx_mon_buf_ring_size(soc->wlan_cfg_ctx);
return dp_mon_desc_pool_init(&mon_soc_be->rx_desc_mon, num_entries);
} }
void dp_rx_mon_buf_desc_pool_free(struct dp_soc *soc) void dp_rx_mon_buf_desc_pool_free(struct dp_soc *soc)
{ {
struct dp_mon_soc *mon_soc = soc->monitor_soc; struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_soc_be *mon_soc_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc); struct dp_mon_soc_be *mon_soc_be =
dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
if (mon_soc) if (mon_soc)
dp_mon_desc_pool_free(&mon_soc_be->rx_desc_mon); dp_mon_desc_pool_free(&mon_soc_be->rx_desc_mon);
@@ -155,7 +161,8 @@ dp_rx_mon_buf_desc_pool_alloc(struct dp_soc *soc)
struct dp_srng *mon_buf_ring; struct dp_srng *mon_buf_ring;
struct dp_mon_desc_pool *rx_mon_desc_pool; struct dp_mon_desc_pool *rx_mon_desc_pool;
struct dp_mon_soc *mon_soc = soc->monitor_soc; struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_soc_be *mon_soc_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc); struct dp_mon_soc_be *mon_soc_be =
dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
int entries; int entries;
struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx; struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx;
@@ -175,7 +182,8 @@ dp_rx_mon_buffers_free(struct dp_soc *soc)
{ {
struct dp_mon_desc_pool *rx_mon_desc_pool; struct dp_mon_desc_pool *rx_mon_desc_pool;
struct dp_mon_soc *mon_soc = soc->monitor_soc; struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_soc_be *mon_soc_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc); struct dp_mon_soc_be *mon_soc_be =
dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
rx_mon_desc_pool = &mon_soc_be->rx_desc_mon; rx_mon_desc_pool = &mon_soc_be->rx_desc_mon;
@@ -190,13 +198,13 @@ dp_rx_mon_buffers_alloc(struct dp_soc *soc, uint32_t size)
union dp_mon_desc_list_elem_t *desc_list = NULL; union dp_mon_desc_list_elem_t *desc_list = NULL;
union dp_mon_desc_list_elem_t *tail = NULL; union dp_mon_desc_list_elem_t *tail = NULL;
struct dp_mon_soc *mon_soc = soc->monitor_soc; struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_soc_be *mon_soc_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc); struct dp_mon_soc_be *mon_soc_be =
dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
mon_buf_ring = &soc->rxdma_mon_buf_ring[0]; mon_buf_ring = &soc->rxdma_mon_buf_ring[0];
rx_mon_desc_pool = &mon_soc_be->rx_desc_mon; rx_mon_desc_pool = &mon_soc_be->rx_desc_mon;
qdf_print("%s:%d size: %d", __func__, __LINE__, size);
return dp_mon_buffers_replenish(soc, mon_buf_ring, return dp_mon_buffers_replenish(soc, mon_buf_ring,
rx_mon_desc_pool, rx_mon_desc_pool,
size, size,

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) 2021,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 any * Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * purpose with or without fee is hereby granted, provided that the above
@@ -127,7 +127,8 @@ void
dp_tx_mon_buf_desc_pool_deinit(struct dp_soc *soc) dp_tx_mon_buf_desc_pool_deinit(struct dp_soc *soc)
{ {
struct dp_mon_soc *mon_soc = soc->monitor_soc; struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_soc_be *mon_soc_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc); struct dp_mon_soc_be *mon_soc_be =
dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
dp_mon_desc_pool_deinit(&mon_soc_be->tx_desc_mon); dp_mon_desc_pool_deinit(&mon_soc_be->tx_desc_mon);
} }
@@ -136,15 +137,20 @@ QDF_STATUS
dp_tx_mon_buf_desc_pool_init(struct dp_soc *soc) dp_tx_mon_buf_desc_pool_init(struct dp_soc *soc)
{ {
struct dp_mon_soc *mon_soc = soc->monitor_soc; struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_soc_be *mon_soc_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc); struct dp_mon_soc_be *mon_soc_be =
dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
uint32_t num_entries;
return dp_mon_desc_pool_init(&mon_soc_be->tx_desc_mon); num_entries =
wlan_cfg_get_dp_soc_rx_mon_buf_ring_size(soc->wlan_cfg_ctx);
return dp_mon_desc_pool_init(&mon_soc_be->tx_desc_mon, num_entries);
} }
void dp_tx_mon_buf_desc_pool_free(struct dp_soc *soc) void dp_tx_mon_buf_desc_pool_free(struct dp_soc *soc)
{ {
struct dp_mon_soc *mon_soc = soc->monitor_soc; struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_soc_be *mon_soc_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc); struct dp_mon_soc_be *mon_soc_be =
dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
if (mon_soc_be) if (mon_soc_be)
dp_mon_desc_pool_free(&mon_soc_be->tx_desc_mon); dp_mon_desc_pool_free(&mon_soc_be->tx_desc_mon);
@@ -158,7 +164,8 @@ dp_tx_mon_buf_desc_pool_alloc(struct dp_soc *soc)
int entries; int entries;
struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx; struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx;
struct dp_mon_soc *mon_soc = soc->monitor_soc; struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_soc_be *mon_soc_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc); struct dp_mon_soc_be *mon_soc_be =
dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
soc_cfg_ctx = soc->wlan_cfg_ctx; soc_cfg_ctx = soc->wlan_cfg_ctx;
@@ -177,7 +184,8 @@ dp_tx_mon_buffers_free(struct dp_soc *soc)
{ {
struct dp_mon_desc_pool *tx_mon_desc_pool; struct dp_mon_desc_pool *tx_mon_desc_pool;
struct dp_mon_soc *mon_soc = soc->monitor_soc; struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_soc_be *mon_soc_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc); struct dp_mon_soc_be *mon_soc_be =
dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
tx_mon_desc_pool = &mon_soc_be->tx_desc_mon; tx_mon_desc_pool = &mon_soc_be->tx_desc_mon;
@@ -192,7 +200,8 @@ dp_tx_mon_buffers_alloc(struct dp_soc *soc, uint32_t size)
union dp_mon_desc_list_elem_t *desc_list = NULL; union dp_mon_desc_list_elem_t *desc_list = NULL;
union dp_mon_desc_list_elem_t *tail = NULL; union dp_mon_desc_list_elem_t *tail = NULL;
struct dp_mon_soc *mon_soc = soc->monitor_soc; struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_soc_be *mon_soc_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc); struct dp_mon_soc_be *mon_soc_be =
dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
mon_buf_ring = &mon_soc_be->tx_mon_buf_ring; mon_buf_ring = &mon_soc_be->tx_mon_buf_ring;

View File

@@ -418,6 +418,8 @@ struct dp_mon_ops {
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_pdev_alloc)(struct dp_pdev *pdev); QDF_STATUS (*mon_pdev_alloc)(struct dp_pdev *pdev);
QDF_STATUS (*mon_soc_init)(struct dp_soc *soc);
void (*mon_soc_deinit)(struct dp_soc *soc);
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);
QDF_STATUS (*mon_pdev_detach)(struct dp_pdev *pdev); QDF_STATUS (*mon_pdev_detach)(struct dp_pdev *pdev);

View File

@@ -501,9 +501,6 @@ QDF_STATUS dp_mon_filter_update(struct dp_pdev *pdev)
if (mon_ops && mon_ops->tx_mon_filter_update) if (mon_ops && mon_ops->tx_mon_filter_update)
mon_ops->tx_mon_filter_update(pdev); mon_ops->tx_mon_filter_update(pdev);
if (mon_ops && mon_ops->rx_mon_filter_update)
mon_ops->rx_mon_filter_update(pdev);
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }

View File

@@ -77,7 +77,7 @@ do { \
} while (0) } while (0)
#define DP_MON_FILTER_PRINT(fmt, args ...) \ #define DP_MON_FILTER_PRINT(fmt, args ...) \
QDF_TRACE(QDF_MODULE_ID_MON_FILTER, QDF_TRACE_LEVEL_DEBUG, \ QDF_TRACE(QDF_MODULE_ID_MON_FILTER, QDF_TRACE_LEVEL_ERROR, \
fmt, ## args) fmt, ## args)
#define dp_mon_filter_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_MON_FILTER, params) #define dp_mon_filter_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_MON_FILTER, params)