qcacmn: Change the buffer manager
Change the buffer manager from HAL_RX_BUF_RBM_SW3_BM to HAL_RX_BUF_RBM_SW1_BM to handle regular and error packets. Change-Id: I696d41f6cf0be1d5045ab27841ccc3ee2afea7de CRs-Fixed: 2189452
这个提交包含在:

提交者
nshrivas

父节点
de2ec73f9b
当前提交
16fcceb7de
@@ -977,8 +977,7 @@ static uint32_t dp_service_srngs(void *dp_ctx, uint32_t dp_budget)
|
|||||||
dp_rx_buffers_replenish(soc, mac_for_pdev,
|
dp_rx_buffers_replenish(soc, mac_for_pdev,
|
||||||
rx_refill_buf_ring,
|
rx_refill_buf_ring,
|
||||||
&soc->rx_desc_buf[mac_for_pdev], 0,
|
&soc->rx_desc_buf[mac_for_pdev], 0,
|
||||||
&desc_list, &tail,
|
&desc_list, &tail);
|
||||||
HAL_RX_BUF_RBM_SW3_BM);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -27,7 +27,6 @@
|
|||||||
#endif
|
#endif
|
||||||
#include "dp_internal.h"
|
#include "dp_internal.h"
|
||||||
#include "dp_rx_mon.h"
|
#include "dp_rx_mon.h"
|
||||||
|
|
||||||
#ifdef RX_DESC_DEBUG_CHECK
|
#ifdef RX_DESC_DEBUG_CHECK
|
||||||
static inline void dp_rx_desc_prep(struct dp_rx_desc *rx_desc, qdf_nbuf_t nbuf)
|
static inline void dp_rx_desc_prep(struct dp_rx_desc *rx_desc, qdf_nbuf_t nbuf)
|
||||||
{
|
{
|
||||||
@@ -69,7 +68,6 @@ static inline bool dp_rx_check_ap_bridge(struct dp_vdev *vdev)
|
|||||||
* or NULL during dp rx initialization or out of buffer
|
* or NULL during dp rx initialization or out of buffer
|
||||||
* interrupt.
|
* interrupt.
|
||||||
* @tail: tail of descs list
|
* @tail: tail of descs list
|
||||||
* @owner: who owns the nbuf (host, NSS etc...)
|
|
||||||
* Return: return success or failure
|
* Return: return success or failure
|
||||||
*/
|
*/
|
||||||
QDF_STATUS dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id,
|
QDF_STATUS dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id,
|
||||||
@@ -77,8 +75,7 @@ QDF_STATUS dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id,
|
|||||||
struct rx_desc_pool *rx_desc_pool,
|
struct rx_desc_pool *rx_desc_pool,
|
||||||
uint32_t num_req_buffers,
|
uint32_t num_req_buffers,
|
||||||
union dp_rx_desc_list_elem_t **desc_list,
|
union dp_rx_desc_list_elem_t **desc_list,
|
||||||
union dp_rx_desc_list_elem_t **tail,
|
union dp_rx_desc_list_elem_t **tail)
|
||||||
uint8_t owner)
|
|
||||||
{
|
{
|
||||||
uint32_t num_alloc_desc;
|
uint32_t num_alloc_desc;
|
||||||
uint16_t num_desc_to_free = 0;
|
uint16_t num_desc_to_free = 0;
|
||||||
@@ -207,7 +204,7 @@ QDF_STATUS dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id,
|
|||||||
|
|
||||||
hal_rxdma_buff_addr_info_set(rxdma_ring_entry, paddr,
|
hal_rxdma_buff_addr_info_set(rxdma_ring_entry, paddr,
|
||||||
(*desc_list)->rx_desc.cookie,
|
(*desc_list)->rx_desc.cookie,
|
||||||
owner);
|
rx_desc_pool->owner);
|
||||||
|
|
||||||
*desc_list = next;
|
*desc_list = next;
|
||||||
}
|
}
|
||||||
@@ -1393,8 +1390,7 @@ done:
|
|||||||
|
|
||||||
dp_rx_buffers_replenish(soc, mac_id, dp_rxdma_srng,
|
dp_rx_buffers_replenish(soc, mac_id, dp_rxdma_srng,
|
||||||
rx_desc_pool, rx_bufs_reaped[mac_id],
|
rx_desc_pool, rx_bufs_reaped[mac_id],
|
||||||
&head[mac_id], &tail[mac_id],
|
&head[mac_id], &tail[mac_id]);
|
||||||
HAL_RX_BUF_RBM_SW3_BM);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Peer can be NULL is case of LFR */
|
/* Peer can be NULL is case of LFR */
|
||||||
@@ -1681,10 +1677,12 @@ dp_rx_pdev_attach(struct dp_pdev *pdev)
|
|||||||
rx_desc_pool = &soc->rx_desc_buf[pdev_id];
|
rx_desc_pool = &soc->rx_desc_buf[pdev_id];
|
||||||
|
|
||||||
dp_rx_desc_pool_alloc(soc, pdev_id, rxdma_entries*3, rx_desc_pool);
|
dp_rx_desc_pool_alloc(soc, pdev_id, rxdma_entries*3, rx_desc_pool);
|
||||||
|
|
||||||
|
rx_desc_pool->owner = DP_WBM2SW_RBM;
|
||||||
/* For Rx buffers, WBM release ring is SW RING 3,for all pdev's */
|
/* For Rx buffers, WBM release ring is SW RING 3,for all pdev's */
|
||||||
dp_rxdma_srng = &pdev->rx_refill_buf_ring;
|
dp_rxdma_srng = &pdev->rx_refill_buf_ring;
|
||||||
dp_rx_buffers_replenish(soc, pdev_id, dp_rxdma_srng, rx_desc_pool,
|
dp_rx_buffers_replenish(soc, pdev_id, dp_rxdma_srng, rx_desc_pool,
|
||||||
0, &desc_list, &tail, HAL_RX_BUF_RBM_SW3_BM);
|
0, &desc_list, &tail);
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@@ -30,6 +30,11 @@
|
|||||||
#define RX_BUFFER_ALIGNMENT 4
|
#define RX_BUFFER_ALIGNMENT 4
|
||||||
#endif /* RXDMA_OPTIMIZATION */
|
#endif /* RXDMA_OPTIMIZATION */
|
||||||
|
|
||||||
|
#ifdef QCA_HOST2FW_RXBUF_RING
|
||||||
|
#define DP_WBM2SW_RBM HAL_RX_BUF_RBM_SW1_BM
|
||||||
|
#else
|
||||||
|
#define DP_WBM2SW_RBM HAL_RX_BUF_RBM_SW3_BM
|
||||||
|
#endif
|
||||||
#define RX_BUFFER_SIZE 2048
|
#define RX_BUFFER_SIZE 2048
|
||||||
#define RX_BUFFER_RESERVATION 0
|
#define RX_BUFFER_RESERVATION 0
|
||||||
|
|
||||||
@@ -676,7 +681,6 @@ static inline bool check_qwrap_multicast_loopback(struct dp_vdev *vdev,
|
|||||||
* or NULL during dp rx initialization or out of buffer
|
* or NULL during dp rx initialization or out of buffer
|
||||||
* interrupt.
|
* interrupt.
|
||||||
* @tail: tail of descs list
|
* @tail: tail of descs list
|
||||||
* @owner: who owns the nbuf (host, NSS etc...)
|
|
||||||
* Return: return success or failure
|
* Return: return success or failure
|
||||||
*/
|
*/
|
||||||
QDF_STATUS dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id,
|
QDF_STATUS dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id,
|
||||||
@@ -684,8 +688,7 @@ QDF_STATUS dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id,
|
|||||||
struct rx_desc_pool *rx_desc_pool,
|
struct rx_desc_pool *rx_desc_pool,
|
||||||
uint32_t num_req_buffers,
|
uint32_t num_req_buffers,
|
||||||
union dp_rx_desc_list_elem_t **desc_list,
|
union dp_rx_desc_list_elem_t **desc_list,
|
||||||
union dp_rx_desc_list_elem_t **tail,
|
union dp_rx_desc_list_elem_t **tail);
|
||||||
uint8_t owner);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_rx_link_desc_return() - Return a MPDU link descriptor to HW
|
* dp_rx_link_desc_return() - Return a MPDU link descriptor to HW
|
||||||
|
@@ -129,7 +129,7 @@ void dp_rx_reorder_flush_frag(struct dp_peer *peer,
|
|||||||
dp_rx_add_to_free_desc_list(&head, &tail,
|
dp_rx_add_to_free_desc_list(&head, &tail,
|
||||||
peer->rx_tid[tid].head_frag_desc);
|
peer->rx_tid[tid].head_frag_desc);
|
||||||
dp_rx_buffers_replenish(soc, 0, dp_rxdma_srng, rx_desc_pool,
|
dp_rx_buffers_replenish(soc, 0, dp_rxdma_srng, rx_desc_pool,
|
||||||
1, &head, &tail, HAL_RX_BUF_RBM_SW3_BM);
|
1, &head, &tail);
|
||||||
}
|
}
|
||||||
|
|
||||||
dp_rx_defrag_cleanup(peer, tid);
|
dp_rx_defrag_cleanup(peer, tid);
|
||||||
|
@@ -981,7 +981,7 @@ done:
|
|||||||
rx_desc_pool = &soc->rx_desc_buf[0];
|
rx_desc_pool = &soc->rx_desc_buf[0];
|
||||||
|
|
||||||
dp_rx_buffers_replenish(soc, 0, dp_rxdma_srng, rx_desc_pool,
|
dp_rx_buffers_replenish(soc, 0, dp_rxdma_srng, rx_desc_pool,
|
||||||
rx_bufs_used, &head, &tail, HAL_RX_BUF_RBM_SW3_BM);
|
rx_bufs_used, &head, &tail);
|
||||||
}
|
}
|
||||||
|
|
||||||
return rx_bufs_used; /* Assume no scale factor for now */
|
return rx_bufs_used; /* Assume no scale factor for now */
|
||||||
@@ -1114,8 +1114,7 @@ done:
|
|||||||
|
|
||||||
dp_rx_buffers_replenish(soc, mac_id, dp_rxdma_srng,
|
dp_rx_buffers_replenish(soc, mac_id, dp_rxdma_srng,
|
||||||
rx_desc_pool, rx_bufs_reaped[mac_id],
|
rx_desc_pool, rx_bufs_reaped[mac_id],
|
||||||
&head[mac_id], &tail[mac_id],
|
&head[mac_id], &tail[mac_id]);
|
||||||
HAL_RX_BUF_RBM_SW3_BM);
|
|
||||||
rx_bufs_used += rx_bufs_reaped[mac_id];
|
rx_bufs_used += rx_bufs_reaped[mac_id];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1280,7 +1279,7 @@ dp_rx_err_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
|
|||||||
|
|
||||||
if (msdu_list.sw_cookie[0] != HAL_RX_COOKIE_SPECIAL) {
|
if (msdu_list.sw_cookie[0] != HAL_RX_COOKIE_SPECIAL) {
|
||||||
/* if the msdus belongs to NSS offloaded radio &&
|
/* if the msdus belongs to NSS offloaded radio &&
|
||||||
* the rbm is not SW3_BM then return the msdu_link
|
* the rbm is not SW1_BM then return the msdu_link
|
||||||
* descriptor without freeing the msdus (nbufs). let
|
* descriptor without freeing the msdus (nbufs). let
|
||||||
* these buffers be given to NSS completion ring for
|
* these buffers be given to NSS completion ring for
|
||||||
* NSS to free them.
|
* NSS to free them.
|
||||||
@@ -1401,8 +1400,8 @@ dp_rxdma_err_process(struct dp_soc *soc, uint32_t mac_id, uint32_t quota)
|
|||||||
rx_desc_pool = &soc->rx_desc_buf[mac_id];
|
rx_desc_pool = &soc->rx_desc_buf[mac_id];
|
||||||
|
|
||||||
dp_rx_buffers_replenish(soc, mac_id, dp_rxdma_srng,
|
dp_rx_buffers_replenish(soc, mac_id, dp_rxdma_srng,
|
||||||
rx_desc_pool, rx_bufs_used, &head, &tail,
|
rx_desc_pool, rx_bufs_used, &head, &tail);
|
||||||
HAL_RX_BUF_RBM_SW3_BM);
|
|
||||||
work_done += rx_bufs_used;
|
work_done += rx_bufs_used;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -809,8 +809,7 @@ void dp_rx_mon_dest_process(struct dp_soc *soc, uint32_t mac_id, uint32_t quota)
|
|||||||
if (rx_bufs_used) {
|
if (rx_bufs_used) {
|
||||||
dp_rx_buffers_replenish(soc, mac_id,
|
dp_rx_buffers_replenish(soc, mac_id,
|
||||||
&pdev->rxdma_mon_buf_ring[mac_for_pdev],
|
&pdev->rxdma_mon_buf_ring[mac_for_pdev],
|
||||||
&soc->rx_desc_mon[mac_id], rx_bufs_used, &head, &tail,
|
&soc->rx_desc_mon[mac_id], rx_bufs_used, &head, &tail);
|
||||||
HAL_RX_BUF_RBM_SW3_BM);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -846,16 +845,20 @@ dp_rx_pdev_mon_buf_attach(struct dp_pdev *pdev, int mac_id) {
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rx_desc_pool->owner = HAL_RX_BUF_RBM_SW3_BM;
|
||||||
|
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO_LOW,
|
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO_LOW,
|
||||||
"%s: Mon RX Buffers Replenish pdev_id=%d",
|
"%s: Mon RX Buffers Replenish pdev_id=%d",
|
||||||
__func__, pdev_id);
|
__func__, pdev_id);
|
||||||
|
|
||||||
|
|
||||||
status = dp_rx_buffers_replenish(soc, mac_id, rxdma_srng, rx_desc_pool,
|
status = dp_rx_buffers_replenish(soc, mac_id, rxdma_srng, rx_desc_pool,
|
||||||
rxdma_entries, &desc_list, &tail,
|
rxdma_entries, &desc_list, &tail);
|
||||||
HAL_RX_BUF_RBM_SW3_BM);
|
|
||||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||||
"%s: dp_rx_buffers_replenish() failed \n", __func__);
|
"%s: dp_rx_buffers_replenish() failed",
|
||||||
|
__func__);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -212,12 +212,14 @@ enum dp_nss_cfg {
|
|||||||
* @array: pointer to array of RX descriptor
|
* @array: pointer to array of RX descriptor
|
||||||
* @freelist: pointer to free RX descriptor link list
|
* @freelist: pointer to free RX descriptor link list
|
||||||
* @lock: Protection for the RX descriptor pool
|
* @lock: Protection for the RX descriptor pool
|
||||||
|
* @owner: owner for nbuf
|
||||||
*/
|
*/
|
||||||
struct rx_desc_pool {
|
struct rx_desc_pool {
|
||||||
uint32_t pool_size;
|
uint32_t pool_size;
|
||||||
union dp_rx_desc_list_elem_t *array;
|
union dp_rx_desc_list_elem_t *array;
|
||||||
union dp_rx_desc_list_elem_t *freelist;
|
union dp_rx_desc_list_elem_t *freelist;
|
||||||
qdf_spinlock_t lock;
|
qdf_spinlock_t lock;
|
||||||
|
uint8_t owner;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
在新工单中引用
屏蔽一个用户