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
这个提交包含在:
Venkata Sharath Chandra Manchala
2018-01-03 11:27:15 -08:00
提交者 nshrivas
父节点 de2ec73f9b
当前提交 16fcceb7de
修改 7 个文件,包含 29 行新增25 行删除

查看文件

@@ -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;
}; };
/** /**