qcacmn: Split tx and rx buffer add function
Split tx and rx monitor buffer add function so that they can be indivudually called when lite monitor mode is enabled. Change-Id: I9996d0261f1912237bd6fa45058d410698b9fa28 CRs-Fixed: 3206170
This commit is contained in:

committed by
Madan Koyyalamudi

parent
0c558b779b
commit
7f485d5e89
@@ -6586,8 +6586,7 @@ static QDF_STATUS dp_vdev_attach_wifi3(struct cdp_soc_t *cdp_soc,
|
|||||||
if (wlan_op_mode_monitor == vdev->opmode) {
|
if (wlan_op_mode_monitor == vdev->opmode) {
|
||||||
if (dp_monitor_vdev_attach(vdev) == QDF_STATUS_SUCCESS) {
|
if (dp_monitor_vdev_attach(vdev) == QDF_STATUS_SUCCESS) {
|
||||||
dp_monitor_pdev_set_mon_vdev(vdev);
|
dp_monitor_pdev_set_mon_vdev(vdev);
|
||||||
dp_monitor_vdev_set_monitor_mode_buf_rings(pdev);
|
return dp_monitor_vdev_set_monitor_mode_buf_rings(pdev);
|
||||||
return QDF_STATUS_SUCCESS;
|
|
||||||
}
|
}
|
||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
@@ -353,7 +353,7 @@ QDF_STATUS dp_mon_rings_alloc_1_0(struct dp_pdev *pdev)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef QCA_MONITOR_PKT_SUPPORT
|
#ifdef QCA_MONITOR_PKT_SUPPORT
|
||||||
void dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
|
QDF_STATUS dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
|
||||||
{
|
{
|
||||||
uint32_t mac_id;
|
uint32_t mac_id;
|
||||||
uint32_t mac_for_pdev;
|
uint32_t mac_for_pdev;
|
||||||
@@ -392,6 +392,7 @@ void dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -398,10 +398,9 @@ QDF_STATUS dp_mon_desc_pool_alloc(uint32_t pool_size,
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
QDF_STATUS dp_vdev_set_monitor_mode_buf_rings_rx_2_0(struct dp_pdev *pdev)
|
||||||
void dp_vdev_set_monitor_mode_buf_rings_2_0(struct dp_pdev *pdev)
|
|
||||||
{
|
{
|
||||||
int tx_mon_max_entries, rx_mon_max_entries;
|
int rx_mon_max_entries;
|
||||||
struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx;
|
struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx;
|
||||||
struct dp_soc *soc = pdev->soc;
|
struct dp_soc *soc = pdev->soc;
|
||||||
struct dp_mon_soc *mon_soc = soc->monitor_soc;
|
struct dp_mon_soc *mon_soc = soc->monitor_soc;
|
||||||
@@ -410,54 +409,106 @@ void dp_vdev_set_monitor_mode_buf_rings_2_0(struct dp_pdev *pdev)
|
|||||||
|
|
||||||
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;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
soc_cfg_ctx = soc->wlan_cfg_ctx;
|
soc_cfg_ctx = soc->wlan_cfg_ctx;
|
||||||
rx_mon_max_entries = wlan_cfg_get_dp_soc_rx_mon_buf_ring_size(soc_cfg_ctx);
|
rx_mon_max_entries = wlan_cfg_get_dp_soc_rx_mon_buf_ring_size(soc_cfg_ctx);
|
||||||
tx_mon_max_entries = wlan_cfg_get_dp_soc_tx_mon_buf_ring_size(soc_cfg_ctx);
|
|
||||||
|
|
||||||
hal_set_low_threshold(soc->rxdma_mon_buf_ring[0].hal_srng,
|
hal_set_low_threshold(soc->rxdma_mon_buf_ring[0].hal_srng,
|
||||||
rx_mon_max_entries >> 2);
|
rx_mon_max_entries >> 2);
|
||||||
status = htt_srng_setup(soc->htt_handle, 0,
|
status = htt_srng_setup(soc->htt_handle, 0,
|
||||||
soc->rxdma_mon_buf_ring[0].hal_srng,
|
soc->rxdma_mon_buf_ring[0].hal_srng,
|
||||||
RXDMA_MONITOR_BUF);
|
RXDMA_MONITOR_BUF);
|
||||||
|
|
||||||
if (status != QDF_STATUS_SUCCESS) {
|
if (status != QDF_STATUS_SUCCESS) {
|
||||||
dp_err("Failed to send htt srng setup message for Rx mon buf ring");
|
dp_mon_err("Failed to send htt srng setup message for Rx mon buf ring");
|
||||||
return;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mon_soc_be->rx_mon_ring_fill_level < rx_mon_max_entries) {
|
||||||
|
status = dp_rx_mon_buffers_alloc(soc,
|
||||||
|
(rx_mon_max_entries -
|
||||||
|
mon_soc_be->rx_mon_ring_fill_level));
|
||||||
|
if (status != QDF_STATUS_SUCCESS) {
|
||||||
|
dp_mon_err("%pK: Rx mon buffers allocation failed", soc);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
mon_soc_be->rx_mon_ring_fill_level +=
|
||||||
|
(rx_mon_max_entries -
|
||||||
|
mon_soc_be->rx_mon_ring_fill_level);
|
||||||
|
}
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS dp_vdev_set_monitor_mode_buf_rings_tx_2_0(struct dp_pdev *pdev)
|
||||||
|
{
|
||||||
|
int tx_mon_max_entries;
|
||||||
|
struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx;
|
||||||
|
struct dp_soc *soc = pdev->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);
|
||||||
|
QDF_STATUS status;
|
||||||
|
|
||||||
|
if (!mon_soc_be) {
|
||||||
|
dp_mon_err("DP MON SOC is NULL");
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
soc_cfg_ctx = soc->wlan_cfg_ctx;
|
||||||
|
tx_mon_max_entries =
|
||||||
|
wlan_cfg_get_dp_soc_tx_mon_buf_ring_size(soc_cfg_ctx);
|
||||||
|
|
||||||
hal_set_low_threshold(mon_soc_be->tx_mon_buf_ring.hal_srng,
|
hal_set_low_threshold(mon_soc_be->tx_mon_buf_ring.hal_srng,
|
||||||
tx_mon_max_entries >> 2);
|
tx_mon_max_entries >> 2);
|
||||||
status = htt_srng_setup(soc->htt_handle, 0,
|
status = htt_srng_setup(soc->htt_handle, 0,
|
||||||
mon_soc_be->tx_mon_buf_ring.hal_srng,
|
mon_soc_be->tx_mon_buf_ring.hal_srng,
|
||||||
TX_MONITOR_BUF);
|
TX_MONITOR_BUF);
|
||||||
|
|
||||||
if (status != QDF_STATUS_SUCCESS) {
|
if (status != QDF_STATUS_SUCCESS) {
|
||||||
dp_err("Failed to send htt srng setup message for Tx mon buf ring");
|
dp_mon_err("Failed to send htt srng setup message for Tx mon buf ring");
|
||||||
return;
|
return status;
|
||||||
}
|
|
||||||
|
|
||||||
if (mon_soc_be->rx_mon_ring_fill_level < rx_mon_max_entries) {
|
|
||||||
if (dp_rx_mon_buffers_alloc(soc,
|
|
||||||
(rx_mon_max_entries - mon_soc_be->rx_mon_ring_fill_level))) {
|
|
||||||
dp_mon_err("%pK: Rx mon buffers allocation failed", soc);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
mon_soc_be->rx_mon_ring_fill_level +=
|
|
||||||
(rx_mon_max_entries - mon_soc_be->rx_mon_ring_fill_level);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mon_soc_be->tx_mon_ring_fill_level < tx_mon_max_entries) {
|
if (mon_soc_be->tx_mon_ring_fill_level < tx_mon_max_entries) {
|
||||||
if (dp_tx_mon_buffers_alloc(soc,
|
status = dp_tx_mon_buffers_alloc(soc,
|
||||||
(tx_mon_max_entries - mon_soc_be->tx_mon_ring_fill_level))) {
|
(tx_mon_max_entries -
|
||||||
|
mon_soc_be->tx_mon_ring_fill_level));
|
||||||
|
if (status != QDF_STATUS_SUCCESS) {
|
||||||
dp_mon_err("%pK: Tx mon buffers allocation failed", soc);
|
dp_mon_err("%pK: Tx mon buffers allocation failed", soc);
|
||||||
return;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
mon_soc_be->tx_mon_ring_fill_level +=
|
mon_soc_be->tx_mon_ring_fill_level +=
|
||||||
(tx_mon_max_entries - mon_soc_be->tx_mon_ring_fill_level);
|
(tx_mon_max_entries -
|
||||||
|
mon_soc_be->tx_mon_ring_fill_level);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
QDF_STATUS dp_vdev_set_monitor_mode_buf_rings_2_0(struct dp_pdev *pdev)
|
||||||
|
{
|
||||||
|
int status;
|
||||||
|
struct dp_soc *soc = pdev->soc;
|
||||||
|
|
||||||
|
status = dp_vdev_set_monitor_mode_buf_rings_rx_2_0(pdev);
|
||||||
|
if (status != QDF_STATUS_SUCCESS) {
|
||||||
|
dp_mon_err("%pK: Rx monitor extra buffer allocation failed",
|
||||||
|
soc);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = dp_vdev_set_monitor_mode_buf_rings_tx_2_0(pdev);
|
||||||
|
if (status != QDF_STATUS_SUCCESS) {
|
||||||
|
dp_mon_err("%pK: Tx monitor extra buffer allocation failed",
|
||||||
|
soc);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
|
@@ -297,6 +297,22 @@ void dp_mon_filter_show_filter_be(enum dp_mon_filter_mode mode,
|
|||||||
void dp_mon_filter_show_tx_filter_be(enum dp_mon_filter_mode mode,
|
void dp_mon_filter_show_tx_filter_be(enum dp_mon_filter_mode mode,
|
||||||
struct dp_mon_filter_be *filter);
|
struct dp_mon_filter_be *filter);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_vdev_set_monitor_mode_buf_rings_tx_2_0() - Add buffers to tx ring
|
||||||
|
* @pdev: Pointer to dp_pdev object
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS dp_vdev_set_monitor_mode_buf_rings_tx_2_0(struct dp_pdev *pdev);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_vdev_set_monitor_mode_buf_rings_rx_2_0() - Add buffers to rx ring
|
||||||
|
* @pdev: Pointer to dp_pdev object
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS dp_vdev_set_monitor_mode_buf_rings_rx_2_0(struct dp_pdev *pdev);
|
||||||
|
|
||||||
#ifdef QCA_ENHANCED_STATS_SUPPORT
|
#ifdef QCA_ENHANCED_STATS_SUPPORT
|
||||||
/**
|
/**
|
||||||
* dp_mon_get_puncture_type() - Get puncture type
|
* dp_mon_get_puncture_type() - Get puncture type
|
||||||
|
@@ -471,9 +471,9 @@ void dp_pktlogmod_exit(struct dp_pdev *handle)
|
|||||||
*
|
*
|
||||||
* @pdev: DP pdev object
|
* @pdev: DP pdev object
|
||||||
*
|
*
|
||||||
* Return: void
|
* Return: QDF_STATUS
|
||||||
*/
|
*/
|
||||||
void dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev);
|
QDF_STATUS dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_vdev_set_monitor_mode_rings () - set monitor mode rings
|
* dp_vdev_set_monitor_mode_rings () - set monitor mode rings
|
||||||
@@ -489,7 +489,7 @@ QDF_STATUS dp_vdev_set_monitor_mode_rings(struct dp_pdev *pdev,
|
|||||||
uint8_t delayed_replenish);
|
uint8_t delayed_replenish);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
static inline void
|
static inline QDF_STATUS
|
||||||
dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
|
dp_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -652,7 +652,7 @@ struct dp_mon_ops {
|
|||||||
#if defined(DP_CON_MON) && !defined(REMOVE_PKT_LOG)
|
#if defined(DP_CON_MON) && !defined(REMOVE_PKT_LOG)
|
||||||
void (*mon_pktlogmod_exit)(struct dp_pdev *pdev);
|
void (*mon_pktlogmod_exit)(struct dp_pdev *pdev);
|
||||||
#endif
|
#endif
|
||||||
void (*mon_vdev_set_monitor_mode_buf_rings)(struct dp_pdev *pdev);
|
QDF_STATUS (*mon_vdev_set_monitor_mode_buf_rings)(struct dp_pdev *pdev);
|
||||||
QDF_STATUS (*mon_vdev_set_monitor_mode_rings)(struct dp_pdev *pdev,
|
QDF_STATUS (*mon_vdev_set_monitor_mode_rings)(struct dp_pdev *pdev,
|
||||||
uint8_t delayed_replenish);
|
uint8_t delayed_replenish);
|
||||||
void (*mon_neighbour_peers_detach)(struct dp_pdev *pdev);
|
void (*mon_neighbour_peers_detach)(struct dp_pdev *pdev);
|
||||||
@@ -3218,20 +3218,20 @@ static inline void dp_monitor_pktlogmod_exit(struct dp_pdev *pdev) {}
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
static inline
|
static inline
|
||||||
void dp_monitor_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
|
QDF_STATUS dp_monitor_vdev_set_monitor_mode_buf_rings(struct dp_pdev *pdev)
|
||||||
{
|
{
|
||||||
struct dp_mon_ops *monitor_ops;
|
struct dp_mon_ops *monitor_ops;
|
||||||
struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
|
struct dp_mon_soc *mon_soc = pdev->soc->monitor_soc;
|
||||||
|
|
||||||
if (!mon_soc) {
|
if (!mon_soc) {
|
||||||
dp_mon_debug("monitor soc is NULL");
|
dp_mon_debug("monitor soc is NULL");
|
||||||
return;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
monitor_ops = mon_soc->mon_ops;
|
monitor_ops = mon_soc->mon_ops;
|
||||||
if (!monitor_ops || !monitor_ops->mon_vdev_set_monitor_mode_buf_rings) {
|
if (!monitor_ops || !monitor_ops->mon_vdev_set_monitor_mode_buf_rings) {
|
||||||
dp_mon_debug("callback not registered");
|
dp_mon_debug("callback not registered");
|
||||||
return;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return monitor_ops->mon_vdev_set_monitor_mode_buf_rings(pdev);
|
return monitor_ops->mon_vdev_set_monitor_mode_buf_rings(pdev);
|
||||||
|
Reference in New Issue
Block a user