qcacmn: modify RX path to support multi-radio
replenish buffers to the respective RXDMA pool. Change-Id: Ib9e366efa098482419a4eac4579786bd0eb13946 CRs-Fixed: 2008301
This commit is contained in:

committed by
qcabuildsw

parent
4a1d49dfb2
commit
aae8c4177e
@@ -245,22 +245,25 @@ dp_rx_process(struct dp_soc *soc, void *hal_ring, uint32_t quota)
|
|||||||
void *ring_desc;
|
void *ring_desc;
|
||||||
struct dp_rx_desc *rx_desc;
|
struct dp_rx_desc *rx_desc;
|
||||||
qdf_nbuf_t nbuf;
|
qdf_nbuf_t nbuf;
|
||||||
union dp_rx_desc_list_elem_t *head = NULL;
|
union dp_rx_desc_list_elem_t *head[MAX_PDEV_CNT] = { NULL };
|
||||||
union dp_rx_desc_list_elem_t *tail = NULL;
|
union dp_rx_desc_list_elem_t *tail[MAX_PDEV_CNT] = { NULL };
|
||||||
uint32_t rx_bufs_used = 0, rx_buf_cookie, l2_hdr_offset;
|
uint32_t rx_bufs_used = 0, rx_buf_cookie, l2_hdr_offset;
|
||||||
uint16_t msdu_len;
|
uint16_t msdu_len;
|
||||||
uint16_t peer_id;
|
uint16_t peer_id;
|
||||||
struct dp_peer *peer = NULL;
|
struct dp_peer *peer = NULL;
|
||||||
struct dp_vdev *vdev = NULL;
|
struct dp_vdev *vdev = NULL;
|
||||||
|
struct dp_vdev *vdev_list[WLAN_UMAC_PSOC_MAX_VDEVS] = { NULL };
|
||||||
struct hal_rx_mpdu_desc_info mpdu_desc_info;
|
struct hal_rx_mpdu_desc_info mpdu_desc_info;
|
||||||
struct hal_rx_msdu_desc_info msdu_desc_info;
|
struct hal_rx_msdu_desc_info msdu_desc_info;
|
||||||
enum hal_reo_error_status error;
|
enum hal_reo_error_status error;
|
||||||
uint32_t pkt_len;
|
uint32_t pkt_len;
|
||||||
static uint32_t peer_mdata;
|
static uint32_t peer_mdata;
|
||||||
uint8_t *rx_tlv_hdr;
|
uint8_t *rx_tlv_hdr;
|
||||||
uint32_t rx_bufs_reaped = 0;
|
uint32_t rx_bufs_reaped[MAX_PDEV_CNT] = { 0 };
|
||||||
struct dp_pdev *pdev;
|
|
||||||
uint32_t sgi, rate_mcs, tid;
|
uint32_t sgi, rate_mcs, tid;
|
||||||
|
uint64_t vdev_map = 0;
|
||||||
|
uint8_t mac_id;
|
||||||
|
uint16_t i, vdev_cnt = 0;
|
||||||
|
|
||||||
/* Debug -- Remove later */
|
/* Debug -- Remove later */
|
||||||
qdf_assert(soc && hal_ring);
|
qdf_assert(soc && hal_ring);
|
||||||
@@ -305,7 +308,7 @@ dp_rx_process(struct dp_soc *soc, void *hal_ring, uint32_t quota)
|
|||||||
rx_desc = dp_rx_cookie_2_va(soc, rx_buf_cookie);
|
rx_desc = dp_rx_cookie_2_va(soc, rx_buf_cookie);
|
||||||
|
|
||||||
qdf_assert(rx_desc);
|
qdf_assert(rx_desc);
|
||||||
rx_bufs_reaped++;
|
rx_bufs_reaped[rx_desc->pool_id]++;
|
||||||
|
|
||||||
/* TODO */
|
/* TODO */
|
||||||
/*
|
/*
|
||||||
@@ -336,6 +339,13 @@ dp_rx_process(struct dp_soc *soc, void *hal_ring, uint32_t quota)
|
|||||||
FL("vdev is NULL"));
|
FL("vdev is NULL"));
|
||||||
qdf_nbuf_free(rx_desc->nbuf);
|
qdf_nbuf_free(rx_desc->nbuf);
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!((vdev_map >> vdev->vdev_id) & 1)) {
|
||||||
|
vdev_map |= 1 << vdev->vdev_id;
|
||||||
|
vdev_list[vdev_cnt] = vdev;
|
||||||
|
vdev_cnt++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get MSDU DESC info */
|
/* Get MSDU DESC info */
|
||||||
@@ -356,31 +366,33 @@ dp_rx_process(struct dp_soc *soc, void *hal_ring, uint32_t quota)
|
|||||||
|
|
||||||
qdf_nbuf_queue_add(&vdev->rxq, rx_desc->nbuf);
|
qdf_nbuf_queue_add(&vdev->rxq, rx_desc->nbuf);
|
||||||
fail:
|
fail:
|
||||||
dp_rx_add_to_free_desc_list(&head, &tail, rx_desc);
|
dp_rx_add_to_free_desc_list(&head[rx_desc->pool_id],
|
||||||
|
&tail[rx_desc->pool_id],
|
||||||
|
rx_desc);
|
||||||
}
|
}
|
||||||
done:
|
done:
|
||||||
hal_srng_access_end(hal_soc, hal_ring);
|
hal_srng_access_end(hal_soc, hal_ring);
|
||||||
|
|
||||||
if (!rx_bufs_reaped)
|
for (mac_id = 0; mac_id < MAX_PDEV_CNT; mac_id++) {
|
||||||
return 0;
|
/*
|
||||||
else
|
* continue with next mac_id if no pkts were reaped
|
||||||
/* Replenish buffers */
|
* from that pool
|
||||||
/* Assume MAC id = 0, owner = 0 */
|
*/
|
||||||
dp_rx_buffers_replenish(soc, 0, rx_bufs_reaped, &head, &tail,
|
if (!rx_bufs_reaped[mac_id])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
dp_rx_buffers_replenish(soc, mac_id,
|
||||||
|
rx_bufs_reaped[mac_id],
|
||||||
|
&head[mac_id],
|
||||||
|
&tail[mac_id],
|
||||||
HAL_RX_BUF_RBM_SW3_BM);
|
HAL_RX_BUF_RBM_SW3_BM);
|
||||||
|
|
||||||
pdev = soc->pdev_list[0];
|
|
||||||
|
|
||||||
if (qdf_unlikely(!pdev)) {
|
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
|
||||||
FL("pdev is NULL"));
|
|
||||||
goto fail1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TAILQ_FOREACH(vdev, &pdev->vdev_list, vdev_list_elem) {
|
for (i = 0; i < vdev_cnt; i++) {
|
||||||
qdf_nbuf_t deliver_list_head = NULL;
|
qdf_nbuf_t deliver_list_head = NULL;
|
||||||
qdf_nbuf_t deliver_list_tail = NULL;
|
qdf_nbuf_t deliver_list_tail = NULL;
|
||||||
|
|
||||||
|
vdev = vdev_list[i];
|
||||||
while ((nbuf = qdf_nbuf_queue_remove(&vdev->rxq))) {
|
while ((nbuf = qdf_nbuf_queue_remove(&vdev->rxq))) {
|
||||||
rx_tlv_hdr = qdf_nbuf_data(nbuf);
|
rx_tlv_hdr = qdf_nbuf_data(nbuf);
|
||||||
|
|
||||||
@@ -494,9 +506,6 @@ done:
|
|||||||
|
|
||||||
}
|
}
|
||||||
return rx_bufs_used; /* Assume no scale factor for now */
|
return rx_bufs_used; /* Assume no scale factor for now */
|
||||||
fail1:
|
|
||||||
qdf_assert(0);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -62,7 +62,7 @@
|
|||||||
struct dp_rx_desc {
|
struct dp_rx_desc {
|
||||||
qdf_nbuf_t nbuf;
|
qdf_nbuf_t nbuf;
|
||||||
uint8_t *rx_buf_start;
|
uint8_t *rx_buf_start;
|
||||||
uint16_t cookie;
|
uint32_t cookie;
|
||||||
uint8_t pool_id;
|
uint8_t pool_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2016-2017 The Linux Foundation. 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
|
||||||
@@ -56,10 +56,12 @@ QDF_STATUS dp_rx_desc_pool_alloc(struct dp_soc *soc, uint32_t pool_id)
|
|||||||
&soc->rx_desc[pool_id].array[i+1];
|
&soc->rx_desc[pool_id].array[i+1];
|
||||||
soc->rx_desc[pool_id].array[i].rx_desc.cookie =
|
soc->rx_desc[pool_id].array[i].rx_desc.cookie =
|
||||||
i | (pool_id << 18);
|
i | (pool_id << 18);
|
||||||
|
soc->rx_desc[pool_id].array[i].rx_desc.pool_id = pool_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
soc->rx_desc[pool_id].array[i].next = NULL;
|
soc->rx_desc[pool_id].array[i].next = NULL;
|
||||||
soc->rx_desc[pool_id].array[i].rx_desc.cookie = i | (pool_id << 18);
|
soc->rx_desc[pool_id].array[i].rx_desc.cookie = i | (pool_id << 18);
|
||||||
|
soc->rx_desc[pool_id].array[i].rx_desc.pool_id = pool_id;
|
||||||
qdf_spin_unlock_bh(&soc->rx_desc_mutex[pool_id]);
|
qdf_spin_unlock_bh(&soc->rx_desc_mutex[pool_id]);
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@@ -231,7 +231,7 @@ dp_rx_2k_jump_handle(struct dp_soc *soc, void *ring_desc,
|
|||||||
* REO or WBM ring
|
* REO or WBM ring
|
||||||
*
|
*
|
||||||
* @soc: core DP main context
|
* @soc: core DP main context
|
||||||
* @ring_desc: opaque pointer to the REO error ring descriptor
|
* @rx_desc : pointer to the sw rx descriptor
|
||||||
* @head: pointer to head of rx descriptors to be added to free list
|
* @head: pointer to head of rx descriptors to be added to free list
|
||||||
* @tail: pointer to tail of rx descriptors to be added to free list
|
* @tail: pointer to tail of rx descriptors to be added to free list
|
||||||
* quota: upper limit of descriptors that can be reaped
|
* quota: upper limit of descriptors that can be reaped
|
||||||
@@ -247,29 +247,20 @@ dp_rx_2k_jump_handle(struct dp_soc *soc, void *ring_desc,
|
|||||||
* Return: uint32_t: No. of Rx buffers reaped
|
* Return: uint32_t: No. of Rx buffers reaped
|
||||||
*/
|
*/
|
||||||
static uint32_t
|
static uint32_t
|
||||||
dp_rx_null_q_desc_handle(struct dp_soc *soc, void *ring_desc,
|
dp_rx_null_q_desc_handle(struct dp_soc *soc, struct dp_rx_desc *rx_desc,
|
||||||
union dp_rx_desc_list_elem_t **head,
|
union dp_rx_desc_list_elem_t **head,
|
||||||
union dp_rx_desc_list_elem_t **tail,
|
union dp_rx_desc_list_elem_t **tail,
|
||||||
uint32_t quota)
|
uint32_t quota)
|
||||||
{
|
{
|
||||||
uint32_t rx_buf_cookie;
|
|
||||||
struct dp_rx_desc *rx_desc;
|
|
||||||
uint32_t rx_bufs_used = 0;
|
uint32_t rx_bufs_used = 0;
|
||||||
uint32_t pkt_len, l2_hdr_offset;
|
uint32_t pkt_len, l2_hdr_offset;
|
||||||
uint16_t msdu_len;
|
uint16_t msdu_len;
|
||||||
qdf_nbuf_t nbuf;
|
qdf_nbuf_t nbuf;
|
||||||
struct dp_pdev *pdev0;
|
struct dp_vdev *vdev;
|
||||||
struct dp_vdev *vdev0;
|
|
||||||
uint16_t peer_id = 0xFFFF;
|
uint16_t peer_id = 0xFFFF;
|
||||||
struct dp_peer *peer = NULL;
|
struct dp_peer *peer = NULL;
|
||||||
uint32_t sgi, rate_mcs, tid;
|
uint32_t sgi, rate_mcs, tid;
|
||||||
|
|
||||||
rx_buf_cookie = HAL_RX_WBM_BUF_COOKIE_GET(ring_desc);
|
|
||||||
|
|
||||||
rx_desc = dp_rx_cookie_2_va(soc, rx_buf_cookie);
|
|
||||||
|
|
||||||
qdf_assert(rx_desc);
|
|
||||||
|
|
||||||
rx_bufs_used++;
|
rx_bufs_used++;
|
||||||
|
|
||||||
nbuf = rx_desc->nbuf;
|
nbuf = rx_desc->nbuf;
|
||||||
@@ -300,6 +291,16 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, void *ring_desc,
|
|||||||
qdf_assert(0);
|
qdf_assert(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
peer_id = hal_rx_mpdu_start_sw_peer_id_get(rx_desc->rx_buf_start);
|
||||||
|
peer = dp_peer_find_by_id(soc, peer_id);
|
||||||
|
|
||||||
|
if (!peer) {
|
||||||
|
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||||
|
FL("peer is NULL"));
|
||||||
|
qdf_nbuf_free(nbuf);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
sgi = hal_rx_msdu_start_sgi_get(rx_desc->rx_buf_start);
|
sgi = hal_rx_msdu_start_sgi_get(rx_desc->rx_buf_start);
|
||||||
rate_mcs = hal_rx_msdu_start_rate_mcs_get(rx_desc->rx_buf_start);
|
rate_mcs = hal_rx_msdu_start_rate_mcs_get(rx_desc->rx_buf_start);
|
||||||
tid = hal_rx_mpdu_start_tid_get(rx_desc->rx_buf_start);
|
tid = hal_rx_mpdu_start_tid_get(rx_desc->rx_buf_start);
|
||||||
@@ -322,11 +323,6 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, void *ring_desc,
|
|||||||
/* TODO: Assuming that qos_control_valid also indicates
|
/* TODO: Assuming that qos_control_valid also indicates
|
||||||
* unicast. Should we check this?
|
* unicast. Should we check this?
|
||||||
*/
|
*/
|
||||||
tid = hal_rx_mpdu_start_tid_get(rx_desc->rx_buf_start);
|
|
||||||
peer_id = hal_rx_mpdu_start_sw_peer_id_get(
|
|
||||||
rx_desc->rx_buf_start);
|
|
||||||
peer = dp_peer_find_by_id(soc, peer_id);
|
|
||||||
|
|
||||||
if (peer &&
|
if (peer &&
|
||||||
peer->rx_tid[tid].hw_qdesc_vaddr_unaligned == NULL) {
|
peer->rx_tid[tid].hw_qdesc_vaddr_unaligned == NULL) {
|
||||||
/* IEEE80211_SEQ_MAX indicates invalid start_seq */
|
/* IEEE80211_SEQ_MAX indicates invalid start_seq */
|
||||||
@@ -344,7 +340,7 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, void *ring_desc,
|
|||||||
qdf_nbuf_data(nbuf), 128, false);
|
qdf_nbuf_data(nbuf), 128, false);
|
||||||
#endif /* NAPIER_EMULATION */
|
#endif /* NAPIER_EMULATION */
|
||||||
|
|
||||||
if (peer && qdf_unlikely(peer->bss_peer)) {
|
if (qdf_unlikely(peer->bss_peer)) {
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP,
|
QDF_TRACE(QDF_MODULE_ID_DP,
|
||||||
QDF_TRACE_LEVEL_INFO,
|
QDF_TRACE_LEVEL_INFO,
|
||||||
FL("received pkt with same src MAC"));
|
FL("received pkt with same src MAC"));
|
||||||
@@ -355,23 +351,18 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, void *ring_desc,
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
pdev0 = soc->pdev_list[0];/* Hard code 0th elem */
|
vdev = peer->vdev;
|
||||||
|
|
||||||
if (pdev0) {
|
if (vdev && vdev->osif_rx) {
|
||||||
vdev0 = (struct dp_vdev *)TAILQ_FIRST(&pdev0->vdev_list);
|
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
|
||||||
if (vdev0 && vdev0->osif_rx) {
|
FL("vdev %p osif_rx %p"), vdev,
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
|
vdev->osif_rx);
|
||||||
FL("pdev0 %p vdev0 %p osif_rx %p"), pdev0, vdev0,
|
|
||||||
vdev0->osif_rx);
|
qdf_nbuf_set_next(nbuf, NULL);
|
||||||
qdf_nbuf_set_next(nbuf, NULL);
|
vdev->osif_rx(vdev->osif_vdev, nbuf);
|
||||||
vdev0->osif_rx(vdev0->osif_vdev, nbuf);
|
|
||||||
} else {
|
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
|
||||||
FL("INVALID vdev0 %p OR osif_rx"), vdev0);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||||
FL("INVALID pdev %p"), pdev0);
|
FL("INVALID vdev %p OR osif_rx"), vdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
@@ -549,7 +540,7 @@ done:
|
|||||||
/* Assume MAC id = 0, owner = 0 */
|
/* Assume MAC id = 0, owner = 0 */
|
||||||
if (rx_bufs_used)
|
if (rx_bufs_used)
|
||||||
dp_rx_buffers_replenish(soc, 0, rx_bufs_used, &head, &tail,
|
dp_rx_buffers_replenish(soc, 0, rx_bufs_used, &head, &tail,
|
||||||
HAL_RX_BUF_RBM_SW3_BM);
|
HAL_RX_BUF_RBM_SW3_BM);
|
||||||
|
|
||||||
return rx_bufs_used; /* Assume no scale factor for now */
|
return rx_bufs_used; /* Assume no scale factor for now */
|
||||||
}
|
}
|
||||||
@@ -572,12 +563,14 @@ dp_rx_wbm_err_process(struct dp_soc *soc, void *hal_ring, uint32_t quota)
|
|||||||
void *hal_soc;
|
void *hal_soc;
|
||||||
void *ring_desc;
|
void *ring_desc;
|
||||||
struct dp_rx_desc *rx_desc;
|
struct dp_rx_desc *rx_desc;
|
||||||
union dp_rx_desc_list_elem_t *head = NULL;
|
union dp_rx_desc_list_elem_t *head[MAX_PDEV_CNT] = { NULL };
|
||||||
union dp_rx_desc_list_elem_t *tail = NULL;
|
union dp_rx_desc_list_elem_t *tail[MAX_PDEV_CNT] = { NULL };
|
||||||
uint32_t rx_bufs_used = 0;
|
uint32_t rx_bufs_used[MAX_PDEV_CNT] = { 0 };
|
||||||
|
uint32_t rx_bufs_reaped = 0;
|
||||||
uint8_t buf_type, rbm;
|
uint8_t buf_type, rbm;
|
||||||
uint8_t wbm_err_src;
|
uint8_t wbm_err_src;
|
||||||
uint32_t rx_buf_cookie;
|
uint32_t rx_buf_cookie;
|
||||||
|
uint8_t mac_id;
|
||||||
|
|
||||||
/* Debug -- Remove later */
|
/* Debug -- Remove later */
|
||||||
qdf_assert(soc && hal_ring);
|
qdf_assert(soc && hal_ring);
|
||||||
@@ -623,6 +616,11 @@ dp_rx_wbm_err_process(struct dp_soc *soc, void *hal_ring, uint32_t quota)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rx_buf_cookie = HAL_RX_WBM_BUF_COOKIE_GET(ring_desc);
|
||||||
|
|
||||||
|
rx_desc = dp_rx_cookie_2_va(soc, rx_buf_cookie);
|
||||||
|
qdf_assert(rx_desc);
|
||||||
|
|
||||||
/* XXX */
|
/* XXX */
|
||||||
buf_type = HAL_RX_WBM_BUF_TYPE_GET(ring_desc);
|
buf_type = HAL_RX_WBM_BUF_TYPE_GET(ring_desc);
|
||||||
/*
|
/*
|
||||||
@@ -650,9 +648,12 @@ dp_rx_wbm_err_process(struct dp_soc *soc, void *hal_ring, uint32_t quota)
|
|||||||
QDF_TRACE_LEVEL_WARN,
|
QDF_TRACE_LEVEL_WARN,
|
||||||
"Got pkt with REO ERROR: %d",
|
"Got pkt with REO ERROR: %d",
|
||||||
reo_error_code);
|
reo_error_code);
|
||||||
rx_bufs_used +=
|
|
||||||
|
rx_bufs_used[rx_desc->pool_id] +=
|
||||||
dp_rx_null_q_desc_handle(soc,
|
dp_rx_null_q_desc_handle(soc,
|
||||||
ring_desc, &head, &tail, quota);
|
rx_desc,
|
||||||
|
&head[rx_desc->pool_id],
|
||||||
|
&tail[rx_desc->pool_id], quota);
|
||||||
continue;
|
continue;
|
||||||
/* TODO */
|
/* TODO */
|
||||||
/* Add per error code accounting */
|
/* Add per error code accounting */
|
||||||
@@ -689,29 +690,31 @@ dp_rx_wbm_err_process(struct dp_soc *soc, void *hal_ring, uint32_t quota)
|
|||||||
/* Should not come here */
|
/* Should not come here */
|
||||||
qdf_assert(0);
|
qdf_assert(0);
|
||||||
}
|
}
|
||||||
rx_buf_cookie = HAL_RX_WBM_BUF_COOKIE_GET(ring_desc);
|
|
||||||
|
|
||||||
rx_desc = dp_rx_cookie_2_va(soc, rx_buf_cookie);
|
rx_bufs_used[rx_desc->pool_id]++;
|
||||||
|
|
||||||
qdf_assert(rx_desc);
|
|
||||||
|
|
||||||
rx_bufs_used++;
|
|
||||||
|
|
||||||
qdf_nbuf_unmap_single(soc->osdev, rx_desc->nbuf,
|
qdf_nbuf_unmap_single(soc->osdev, rx_desc->nbuf,
|
||||||
QDF_DMA_BIDIRECTIONAL);
|
QDF_DMA_BIDIRECTIONAL);
|
||||||
|
|
||||||
qdf_nbuf_free(rx_desc->nbuf);
|
qdf_nbuf_free(rx_desc->nbuf);
|
||||||
|
|
||||||
dp_rx_add_to_free_desc_list(&head, &tail, rx_desc);
|
dp_rx_add_to_free_desc_list(&head[rx_desc->pool_id],
|
||||||
|
&tail[rx_desc->pool_id], rx_desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
hal_srng_access_end(hal_soc, hal_ring);
|
hal_srng_access_end(hal_soc, hal_ring);
|
||||||
|
|
||||||
/* Assume MAC id = 0, owner = 0 */
|
/* Assume MAC id = 0, owner = 0 */
|
||||||
if (rx_bufs_used)
|
for (mac_id = 0; mac_id < MAX_PDEV_CNT; mac_id++) {
|
||||||
dp_rx_buffers_replenish(soc, 0, rx_bufs_used, &head, &tail,
|
if (rx_bufs_used[mac_id]) {
|
||||||
HAL_RX_BUF_RBM_SW3_BM);
|
dp_rx_buffers_replenish(soc, mac_id,
|
||||||
|
rx_bufs_used[mac_id],
|
||||||
|
&head[mac_id], &tail[mac_id],
|
||||||
|
HAL_RX_BUF_RBM_SW3_BM);
|
||||||
|
rx_bufs_reaped += rx_bufs_used[mac_id];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return rx_bufs_used; /* Assume no scale factor for now */
|
return rx_bufs_reaped; /* Assume no scale factor for now */
|
||||||
}
|
}
|
||||||
|
@@ -399,7 +399,7 @@ static inline void hal_rx_msdu_desc_info_get(void *desc_addr,
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static inline void hal_rxdma_buff_addr_info_set(void *rxdma_entry,
|
static inline void hal_rxdma_buff_addr_info_set(void *rxdma_entry,
|
||||||
qdf_dma_addr_t paddr, uint16_t cookie, uint8_t manager)
|
qdf_dma_addr_t paddr, uint32_t cookie, uint8_t manager)
|
||||||
{
|
{
|
||||||
uint32_t paddr_lo = ((u64)paddr & 0x00000000ffffffff);
|
uint32_t paddr_lo = ((u64)paddr & 0x00000000ffffffff);
|
||||||
uint32_t paddr_hi = ((u64)paddr & 0xffffffff00000000) >> 32;
|
uint32_t paddr_hi = ((u64)paddr & 0xffffffff00000000) >> 32;
|
||||||
|
Reference in New Issue
Block a user