qcacmn: Fix for monitor issues in WKK
Fix for monitor issues in WKK. Change-Id: Ie0dbd39b6a9b0014d85b2bdd58113326ac937ba0 CRs-Fixed: 3109099
This commit is contained in:

committed by
Madan Koyyalamudi

parent
15ee4b1a2a
commit
10c1ced2ac
@@ -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);
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
@@ -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,
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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,
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
|
Reference in New Issue
Block a user