qcacmn: DP RX changes for RX buffer pool support
DP RX changes to support RX buffer pool, this is a pre-allocated pool of buffers which will be utilized during low memory conditions. Change-Id: I8d89a865f989d4e88c10390861e9d4be72ae0299 CRs-Fixed: 2731517
This commit is contained in:

committed by
snandini

parent
ea9aadb12d
commit
fa2844b787
@@ -1784,6 +1784,12 @@ struct cdp_pdev_stats {
|
|||||||
uint64_t tx_ppdu_proc;
|
uint64_t tx_ppdu_proc;
|
||||||
uint64_t ack_ba_comes_twice;
|
uint64_t ack_ba_comes_twice;
|
||||||
uint64_t ppdu_drop;
|
uint64_t ppdu_drop;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
uint64_t num_bufs_consumed;
|
||||||
|
uint64_t num_pool_bufs_replenish;
|
||||||
|
uint64_t num_bufs_alloc_success;
|
||||||
|
} rx_buffer_pool;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* struct cdp_peer_hmwds_ast_add_status - hmwds peer ast add status
|
/* struct cdp_peer_hmwds_ast_add_status - hmwds peer ast add status
|
||||||
|
@@ -33,6 +33,7 @@
|
|||||||
#include "dp_txrx_wds.h"
|
#include "dp_txrx_wds.h"
|
||||||
#endif
|
#endif
|
||||||
#include "dp_hist.h"
|
#include "dp_hist.h"
|
||||||
|
#include "dp_rx_buffer_pool.h"
|
||||||
|
|
||||||
#ifdef ATH_RX_PRI_SAVE
|
#ifdef ATH_RX_PRI_SAVE
|
||||||
#define DP_RX_TID_SAVE(_nbuf, _tid) \
|
#define DP_RX_TID_SAVE(_nbuf, _tid) \
|
||||||
@@ -172,7 +173,6 @@ QDF_STATUS __dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id,
|
|||||||
union dp_rx_desc_list_elem_t *next;
|
union dp_rx_desc_list_elem_t *next;
|
||||||
QDF_STATUS ret;
|
QDF_STATUS ret;
|
||||||
uint16_t buf_size = rx_desc_pool->buf_size;
|
uint16_t buf_size = rx_desc_pool->buf_size;
|
||||||
uint8_t buf_alignment = rx_desc_pool->buf_alignment;
|
|
||||||
|
|
||||||
void *rxdma_srng;
|
void *rxdma_srng;
|
||||||
|
|
||||||
@@ -239,11 +239,9 @@ QDF_STATUS __dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id,
|
|||||||
count = 0;
|
count = 0;
|
||||||
|
|
||||||
while (count < num_req_buffers) {
|
while (count < num_req_buffers) {
|
||||||
rx_netbuf = qdf_nbuf_alloc(dp_soc->osdev,
|
rx_netbuf = dp_rx_buffer_pool_nbuf_alloc(dp_soc, mac_id,
|
||||||
buf_size,
|
rx_desc_pool,
|
||||||
RX_BUFFER_RESERVATION,
|
num_entries_avail);
|
||||||
buf_alignment,
|
|
||||||
FALSE);
|
|
||||||
|
|
||||||
if (qdf_unlikely(!rx_netbuf)) {
|
if (qdf_unlikely(!rx_netbuf)) {
|
||||||
DP_STATS_INC(dp_pdev, replenish.nbuf_alloc_fail, 1);
|
DP_STATS_INC(dp_pdev, replenish.nbuf_alloc_fail, 1);
|
||||||
@@ -254,7 +252,7 @@ QDF_STATUS __dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id,
|
|||||||
QDF_DMA_FROM_DEVICE, buf_size);
|
QDF_DMA_FROM_DEVICE, buf_size);
|
||||||
|
|
||||||
if (qdf_unlikely(QDF_IS_STATUS_ERROR(ret))) {
|
if (qdf_unlikely(QDF_IS_STATUS_ERROR(ret))) {
|
||||||
qdf_nbuf_free(rx_netbuf);
|
dp_rx_buffer_pool_nbuf_free(dp_soc, rx_netbuf, mac_id);
|
||||||
DP_STATS_INC(dp_pdev, replenish.map_err, 1);
|
DP_STATS_INC(dp_pdev, replenish.map_err, 1);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -2004,6 +2002,8 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl,
|
|||||||
uint32_t num_entries = 0;
|
uint32_t num_entries = 0;
|
||||||
struct hal_rx_msdu_metadata msdu_metadata;
|
struct hal_rx_msdu_metadata msdu_metadata;
|
||||||
QDF_STATUS status;
|
QDF_STATUS status;
|
||||||
|
qdf_nbuf_t ebuf_head;
|
||||||
|
qdf_nbuf_t ebuf_tail;
|
||||||
|
|
||||||
DP_HIST_INIT();
|
DP_HIST_INIT();
|
||||||
|
|
||||||
@@ -2025,6 +2025,8 @@ more_data:
|
|||||||
peer = NULL;
|
peer = NULL;
|
||||||
vdev = NULL;
|
vdev = NULL;
|
||||||
num_rx_bufs_reaped = 0;
|
num_rx_bufs_reaped = 0;
|
||||||
|
ebuf_head = NULL;
|
||||||
|
ebuf_tail = NULL;
|
||||||
|
|
||||||
qdf_mem_zero(rx_bufs_reaped, sizeof(rx_bufs_reaped));
|
qdf_mem_zero(rx_bufs_reaped, sizeof(rx_bufs_reaped));
|
||||||
qdf_mem_zero(&mpdu_desc_info, sizeof(mpdu_desc_info));
|
qdf_mem_zero(&mpdu_desc_info, sizeof(mpdu_desc_info));
|
||||||
@@ -2088,7 +2090,8 @@ more_data:
|
|||||||
QDF_DMA_FROM_DEVICE,
|
QDF_DMA_FROM_DEVICE,
|
||||||
RX_DATA_BUFFER_SIZE);
|
RX_DATA_BUFFER_SIZE);
|
||||||
rx_desc->unmapped = 1;
|
rx_desc->unmapped = 1;
|
||||||
qdf_nbuf_free(rx_desc->nbuf);
|
dp_rx_buffer_pool_nbuf_free(soc, rx_desc->nbuf,
|
||||||
|
rx_desc->pool_id);
|
||||||
dp_rx_add_to_free_desc_list(
|
dp_rx_add_to_free_desc_list(
|
||||||
&head[rx_desc->pool_id],
|
&head[rx_desc->pool_id],
|
||||||
&tail[rx_desc->pool_id],
|
&tail[rx_desc->pool_id],
|
||||||
@@ -2231,8 +2234,8 @@ more_data:
|
|||||||
QDF_DMA_FROM_DEVICE,
|
QDF_DMA_FROM_DEVICE,
|
||||||
rx_desc_pool->buf_size);
|
rx_desc_pool->buf_size);
|
||||||
rx_desc->unmapped = 1;
|
rx_desc->unmapped = 1;
|
||||||
DP_RX_LIST_APPEND(nbuf_head, nbuf_tail, rx_desc->nbuf);
|
DP_RX_PROCESS_NBUF(soc, nbuf_head, nbuf_tail, ebuf_head,
|
||||||
|
ebuf_tail, rx_desc);
|
||||||
/*
|
/*
|
||||||
* if continuation bit is set then we have MSDU spread
|
* if continuation bit is set then we have MSDU spread
|
||||||
* across multiple buffers, let us not decrement quota
|
* across multiple buffers, let us not decrement quota
|
||||||
@@ -2972,6 +2975,11 @@ dp_rx_pdev_buffers_alloc(struct dp_pdev *pdev)
|
|||||||
|
|
||||||
rx_desc_pool = &soc->rx_desc_buf[mac_for_pdev];
|
rx_desc_pool = &soc->rx_desc_buf[mac_for_pdev];
|
||||||
|
|
||||||
|
/* Initialize RX buffer pool which will be
|
||||||
|
* used during low memory conditions
|
||||||
|
*/
|
||||||
|
dp_rx_buffer_pool_init(soc, mac_for_pdev);
|
||||||
|
|
||||||
return dp_pdev_rx_buffers_attach(soc, mac_for_pdev, dp_rxdma_srng,
|
return dp_pdev_rx_buffers_attach(soc, mac_for_pdev, dp_rxdma_srng,
|
||||||
rx_desc_pool, rxdma_entries - 1);
|
rx_desc_pool, rxdma_entries - 1);
|
||||||
}
|
}
|
||||||
@@ -2991,6 +2999,7 @@ dp_rx_pdev_buffers_free(struct dp_pdev *pdev)
|
|||||||
rx_desc_pool = &soc->rx_desc_buf[mac_for_pdev];
|
rx_desc_pool = &soc->rx_desc_buf[mac_for_pdev];
|
||||||
|
|
||||||
dp_rx_desc_nbuf_free(soc, rx_desc_pool);
|
dp_rx_desc_nbuf_free(soc, rx_desc_pool);
|
||||||
|
dp_rx_buffer_pool_deinit(soc, mac_for_pdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -1422,4 +1422,26 @@ static inline void dp_rx_wbm_sg_list_deinit(struct dp_soc *soc)
|
|||||||
dp_rx_wbm_sg_list_reset(soc);
|
dp_rx_wbm_sg_list_reset(soc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_RX_PREALLOC_BUFFER_POOL
|
||||||
|
#define DP_RX_PROCESS_NBUF(soc, head, tail, ebuf_head, ebuf_tail, rx_desc) \
|
||||||
|
do { \
|
||||||
|
if (!soc->rx_buff_pool[rx_desc->pool_id].is_initialized) { \
|
||||||
|
DP_RX_LIST_APPEND(head, tail, rx_desc->nbuf); \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
DP_RX_LIST_APPEND(ebuf_head, ebuf_tail, rx_desc->nbuf); \
|
||||||
|
if (!qdf_nbuf_is_rx_chfrag_cont(rx_desc->nbuf)) { \
|
||||||
|
if (!dp_rx_buffer_pool_refill(soc, ebuf_head, \
|
||||||
|
rx_desc->pool_id)) \
|
||||||
|
DP_RX_MERGE_TWO_LIST(head, tail, \
|
||||||
|
ebuf_head, ebuf_tail);\
|
||||||
|
ebuf_head = NULL; \
|
||||||
|
ebuf_tail = NULL; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
#else
|
||||||
|
#define DP_RX_PROCESS_NBUF(soc, head, tail, ebuf_head, ebuf_tail, rx_desc) \
|
||||||
|
DP_RX_LIST_APPEND(head, tail, rx_desc->nbuf)
|
||||||
|
#endif /* WLAN_FEATURE_RX_PREALLOC_BUFFER_POOL */
|
||||||
#endif /* _DP_RX_H */
|
#endif /* _DP_RX_H */
|
||||||
|
@@ -28,6 +28,7 @@
|
|||||||
#include <enet.h> /* LLC_SNAP_HDR_LEN */
|
#include <enet.h> /* LLC_SNAP_HDR_LEN */
|
||||||
#include "dp_rx_defrag.h"
|
#include "dp_rx_defrag.h"
|
||||||
#include "dp_ipa.h"
|
#include "dp_ipa.h"
|
||||||
|
#include "dp_rx_buffer_pool.h"
|
||||||
|
|
||||||
const struct dp_rx_defrag_cipher dp_f_ccmp = {
|
const struct dp_rx_defrag_cipher dp_f_ccmp = {
|
||||||
"AES-CCM",
|
"AES-CCM",
|
||||||
@@ -1434,6 +1435,11 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc,
|
|||||||
goto discard_frag;
|
goto discard_frag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dp_rx_buffer_pool_refill(soc, frag, rx_desc->pool_id)) {
|
||||||
|
/* fragment queued back to the pool, free the link desc */
|
||||||
|
goto err_free_desc;
|
||||||
|
}
|
||||||
|
|
||||||
msdu_len = hal_rx_msdu_start_msdu_len_get(rx_desc->rx_buf_start);
|
msdu_len = hal_rx_msdu_start_msdu_len_get(rx_desc->rx_buf_start);
|
||||||
|
|
||||||
qdf_nbuf_set_pktlen(frag, (msdu_len + RX_PKT_TLVS_LEN));
|
qdf_nbuf_set_pktlen(frag, (msdu_len + RX_PKT_TLVS_LEN));
|
||||||
@@ -1649,6 +1655,7 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc,
|
|||||||
|
|
||||||
discard_frag:
|
discard_frag:
|
||||||
qdf_nbuf_free(frag);
|
qdf_nbuf_free(frag);
|
||||||
|
err_free_desc:
|
||||||
dp_rx_add_to_free_desc_list(head, tail, rx_desc);
|
dp_rx_add_to_free_desc_list(head, tail, rx_desc);
|
||||||
if (dp_rx_link_desc_return(soc, ring_desc,
|
if (dp_rx_link_desc_return(soc, ring_desc,
|
||||||
HAL_BM_ACTION_PUT_IN_IDLE_LIST) !=
|
HAL_BM_ACTION_PUT_IN_IDLE_LIST) !=
|
||||||
|
@@ -31,6 +31,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#include <enet.h> /* LLC_SNAP_HDR_LEN */
|
#include <enet.h> /* LLC_SNAP_HDR_LEN */
|
||||||
#include "qdf_net_types.h"
|
#include "qdf_net_types.h"
|
||||||
|
#include "dp_rx_buffer_pool.h"
|
||||||
|
|
||||||
/* Max buffer in invalid peer SG list*/
|
/* Max buffer in invalid peer SG list*/
|
||||||
#define DP_MAX_INVALID_BUFFERS 10
|
#define DP_MAX_INVALID_BUFFERS 10
|
||||||
@@ -323,7 +324,7 @@ dp_rx_msdus_drop(struct dp_soc *soc, hal_ring_desc_t ring_desc,
|
|||||||
hal_rx_print_pn(soc->hal_soc, rx_tlv_hdr);
|
hal_rx_print_pn(soc->hal_soc, rx_tlv_hdr);
|
||||||
|
|
||||||
/* Just free the buffers */
|
/* Just free the buffers */
|
||||||
qdf_nbuf_free(rx_desc->nbuf);
|
dp_rx_buffer_pool_nbuf_free(soc, rx_desc->nbuf, *mac_id);
|
||||||
|
|
||||||
dp_rx_add_to_free_desc_list(&pdev->free_list_head,
|
dp_rx_add_to_free_desc_list(&pdev->free_list_head,
|
||||||
&pdev->free_list_tail, rx_desc);
|
&pdev->free_list_tail, rx_desc);
|
||||||
@@ -515,6 +516,12 @@ more_msdu_link_desc:
|
|||||||
HAL_MSDU_F_MSDU_CONTINUATION))
|
HAL_MSDU_F_MSDU_CONTINUATION))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (dp_rx_buffer_pool_refill(soc, head_nbuf,
|
||||||
|
rx_desc->pool_id)) {
|
||||||
|
/* MSDU queued back to the pool */
|
||||||
|
goto process_next_msdu;
|
||||||
|
}
|
||||||
|
|
||||||
rx_tlv_hdr_first = qdf_nbuf_data(head_nbuf);
|
rx_tlv_hdr_first = qdf_nbuf_data(head_nbuf);
|
||||||
rx_tlv_hdr_last = qdf_nbuf_data(tail_nbuf);
|
rx_tlv_hdr_last = qdf_nbuf_data(tail_nbuf);
|
||||||
|
|
||||||
@@ -547,6 +554,7 @@ more_msdu_link_desc:
|
|||||||
qdf_nbuf_free(nbuf);
|
qdf_nbuf_free(nbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
process_next_msdu:
|
||||||
msdu_processed++;
|
msdu_processed++;
|
||||||
head_nbuf = NULL;
|
head_nbuf = NULL;
|
||||||
tail_nbuf = NULL;
|
tail_nbuf = NULL;
|
||||||
@@ -1852,13 +1860,19 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
|||||||
soc->wbm_sg_param.wbm_sg_nbuf_tail,
|
soc->wbm_sg_param.wbm_sg_nbuf_tail,
|
||||||
nbuf);
|
nbuf);
|
||||||
if (process_sg_buf) {
|
if (process_sg_buf) {
|
||||||
DP_RX_MERGE_TWO_LIST(nbuf_head, nbuf_tail,
|
if (!dp_rx_buffer_pool_refill(
|
||||||
soc->wbm_sg_param.wbm_sg_nbuf_head,
|
soc,
|
||||||
soc->wbm_sg_param.wbm_sg_nbuf_tail);
|
soc->wbm_sg_param.wbm_sg_nbuf_head,
|
||||||
|
rx_desc->pool_id))
|
||||||
|
DP_RX_MERGE_TWO_LIST(
|
||||||
|
nbuf_head, nbuf_tail,
|
||||||
|
soc->wbm_sg_param.wbm_sg_nbuf_head,
|
||||||
|
soc->wbm_sg_param.wbm_sg_nbuf_tail);
|
||||||
dp_rx_wbm_sg_list_reset(soc);
|
dp_rx_wbm_sg_list_reset(soc);
|
||||||
process_sg_buf = false;
|
process_sg_buf = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else if (!dp_rx_buffer_pool_refill(soc, nbuf,
|
||||||
|
rx_desc->pool_id)) {
|
||||||
DP_RX_LIST_APPEND(nbuf_head, nbuf_tail, nbuf);
|
DP_RX_LIST_APPEND(nbuf_head, nbuf_tail, nbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2227,7 +2241,8 @@ dp_rx_err_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
|
|||||||
"[%s][%d] msdu_nbuf=%pK ",
|
"[%s][%d] msdu_nbuf=%pK ",
|
||||||
__func__, __LINE__, msdu);
|
__func__, __LINE__, msdu);
|
||||||
|
|
||||||
qdf_nbuf_free(msdu);
|
dp_rx_buffer_pool_nbuf_free(soc, msdu,
|
||||||
|
rx_desc->pool_id);
|
||||||
rx_bufs_used++;
|
rx_bufs_used++;
|
||||||
dp_rx_add_to_free_desc_list(head,
|
dp_rx_add_to_free_desc_list(head,
|
||||||
tail, rx_desc);
|
tail, rx_desc);
|
||||||
@@ -2375,7 +2390,8 @@ dp_wbm_int_err_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
|
|||||||
qdf_nbuf_unmap_single(soc->osdev, msdu,
|
qdf_nbuf_unmap_single(soc->osdev, msdu,
|
||||||
QDF_DMA_FROM_DEVICE);
|
QDF_DMA_FROM_DEVICE);
|
||||||
|
|
||||||
qdf_nbuf_free(msdu);
|
dp_rx_buffer_pool_nbuf_free(soc, msdu,
|
||||||
|
rx_desc->pool_id);
|
||||||
rx_bufs_used++;
|
rx_bufs_used++;
|
||||||
dp_rx_add_to_free_desc_list(head,
|
dp_rx_add_to_free_desc_list(head,
|
||||||
tail, rx_desc);
|
tail, rx_desc);
|
||||||
@@ -2456,7 +2472,8 @@ dp_handle_wbm_internal_error(struct dp_soc *soc, void *hal_desc,
|
|||||||
rx_desc_pool->buf_size);
|
rx_desc_pool->buf_size);
|
||||||
rx_desc->unmapped = 1;
|
rx_desc->unmapped = 1;
|
||||||
|
|
||||||
qdf_nbuf_free(rx_desc->nbuf);
|
dp_rx_buffer_pool_nbuf_free(soc, rx_desc->nbuf,
|
||||||
|
rx_desc->pool_id);
|
||||||
dp_rx_add_to_free_desc_list(&head,
|
dp_rx_add_to_free_desc_list(&head,
|
||||||
&tail,
|
&tail,
|
||||||
rx_desc);
|
rx_desc);
|
||||||
|
@@ -28,6 +28,7 @@
|
|||||||
#include "dp_rx_mon.h"
|
#include "dp_rx_mon.h"
|
||||||
#include "wlan_cfg.h"
|
#include "wlan_cfg.h"
|
||||||
#include "dp_internal.h"
|
#include "dp_internal.h"
|
||||||
|
#include "dp_rx_buffer_pool.h"
|
||||||
#ifdef WLAN_TX_PKT_CAPTURE_ENH
|
#ifdef WLAN_TX_PKT_CAPTURE_ENH
|
||||||
#include "dp_rx_mon_feature.h"
|
#include "dp_rx_mon_feature.h"
|
||||||
|
|
||||||
@@ -277,6 +278,15 @@ dp_rx_mon_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
|
|||||||
rx_desc->unmapped = 1;
|
rx_desc->unmapped = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dp_rx_buffer_pool_refill(soc, msdu,
|
||||||
|
rx_desc->pool_id)) {
|
||||||
|
drop_mpdu = true;
|
||||||
|
msdu = NULL;
|
||||||
|
dp_pdev->mon_last_linkdesc_paddr =
|
||||||
|
buf_info.paddr;
|
||||||
|
goto next_msdu;
|
||||||
|
}
|
||||||
|
|
||||||
if (drop_mpdu) {
|
if (drop_mpdu) {
|
||||||
dp_pdev->mon_last_linkdesc_paddr =
|
dp_pdev->mon_last_linkdesc_paddr =
|
||||||
buf_info.paddr;
|
buf_info.paddr;
|
||||||
|
@@ -6368,6 +6368,14 @@ dp_print_pdev_rx_stats(struct dp_pdev *pdev)
|
|||||||
dp_aggregate_pdev_ctrl_frames_stats(pdev);
|
dp_aggregate_pdev_ctrl_frames_stats(pdev);
|
||||||
DP_PRINT_STATS("BAR Received Count: = %u",
|
DP_PRINT_STATS("BAR Received Count: = %u",
|
||||||
pdev->stats.rx.bar_recv_cnt);
|
pdev->stats.rx.bar_recv_cnt);
|
||||||
|
|
||||||
|
DP_PRINT_STATS("RX Buffer Pool Stats:\n");
|
||||||
|
DP_PRINT_STATS("\tBuffers consumed during refill = %llu",
|
||||||
|
pdev->stats.rx_buffer_pool.num_bufs_consumed);
|
||||||
|
DP_PRINT_STATS("\tSuccessful allocations during refill = %llu",
|
||||||
|
pdev->stats.rx_buffer_pool.num_bufs_alloc_success);
|
||||||
|
DP_PRINT_STATS("\tAllocations from the pool during replenish = %llu",
|
||||||
|
pdev->stats.rx_buffer_pool.num_pool_bufs_replenish);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@@ -967,6 +967,12 @@ struct link_desc_bank {
|
|||||||
uint32_t size;
|
uint32_t size;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct rx_buff_pool {
|
||||||
|
qdf_nbuf_queue_head_t emerg_nbuf_q;
|
||||||
|
uint32_t nbuf_fail_cnt;
|
||||||
|
bool is_initialized;
|
||||||
|
};
|
||||||
|
|
||||||
/* SOC level structure for data path */
|
/* SOC level structure for data path */
|
||||||
struct dp_soc {
|
struct dp_soc {
|
||||||
/**
|
/**
|
||||||
@@ -1362,6 +1368,9 @@ struct dp_soc {
|
|||||||
} wbm_sg_param;
|
} wbm_sg_param;
|
||||||
/* Number of msdu exception descriptors */
|
/* Number of msdu exception descriptors */
|
||||||
uint32_t num_msdu_exception_desc;
|
uint32_t num_msdu_exception_desc;
|
||||||
|
|
||||||
|
/* RX buffer params */
|
||||||
|
struct rx_buff_pool rx_buff_pool[MAX_PDEV_CNT];
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef IPA_OFFLOAD
|
#ifdef IPA_OFFLOAD
|
||||||
|
Reference in New Issue
Block a user