qcacmn: Datapath RX error handler for WCN7850
Add DP rx error handler changes for WCN7850. Change-Id: I401f1b69eb107818e7aceb0a51279dab7f558b96 CRs-Fixed: 2891021
This commit is contained in:

committed by
Manjunathappa Prakash

parent
14794ee689
commit
872da9462b
@@ -19,6 +19,7 @@
|
||||
#include "hal_hw_headers.h"
|
||||
#include "dp_types.h"
|
||||
#include "dp_rx.h"
|
||||
#include "dp_tx.h"
|
||||
#include "dp_peer.h"
|
||||
#include "dp_internal.h"
|
||||
#include "hal_api.h"
|
||||
@@ -155,6 +156,16 @@ void dp_rx_link_desc_refill_duplicate_check(
|
||||
/* do duplicate link desc address check */
|
||||
hal_rx_buffer_addr_info_get_paddr(ring_buf_info,
|
||||
¤t_link_desc_buf_info);
|
||||
|
||||
/*
|
||||
* TODO - Check if the hal soc api call can be removed
|
||||
* since the cookie is just used for print.
|
||||
* buffer_addr_info is the first element of ring_desc
|
||||
*/
|
||||
hal_rx_buf_cookie_rbm_get(soc->hal_soc,
|
||||
(uint32_t *)ring_buf_info,
|
||||
¤t_link_desc_buf_info);
|
||||
|
||||
if (qdf_unlikely(current_link_desc_buf_info.paddr ==
|
||||
buf_info->paddr)) {
|
||||
dp_info_rl("duplicate link desc addr: %llu, cookie: 0x%x",
|
||||
@@ -292,6 +303,11 @@ dp_rx_msdus_drop(struct dp_soc *soc, hal_ring_desc_t ring_desc,
|
||||
|
||||
hal_rx_reo_buf_paddr_get(ring_desc, &buf_info);
|
||||
|
||||
/* buffer_addr_info is the first element of ring_desc */
|
||||
hal_rx_buf_cookie_rbm_get(soc->hal_soc,
|
||||
(uint32_t *)ring_desc,
|
||||
&buf_info);
|
||||
|
||||
link_desc_va = dp_rx_cookie_2_link_desc_va(soc, &buf_info);
|
||||
|
||||
more_msdu_link_desc:
|
||||
@@ -371,6 +387,10 @@ more_msdu_link_desc:
|
||||
hal_rx_buffer_addr_info_get_paddr(
|
||||
&next_link_desc_addr_info,
|
||||
&buf_info);
|
||||
/* buffer_addr_info is the first element of ring_desc */
|
||||
hal_rx_buf_cookie_rbm_get(soc->hal_soc,
|
||||
(uint32_t *)&next_link_desc_addr_info,
|
||||
&buf_info);
|
||||
cur_link_desc_addr_info = next_link_desc_addr_info;
|
||||
buf_addr_info = &cur_link_desc_addr_info;
|
||||
|
||||
@@ -660,6 +680,10 @@ process_next_msdu:
|
||||
hal_rx_buffer_addr_info_get_paddr(
|
||||
&next_link_desc_addr_info,
|
||||
&buf_info);
|
||||
/* buffer_addr_info is the first element of ring_desc */
|
||||
hal_rx_buf_cookie_rbm_get(soc->hal_soc,
|
||||
(uint32_t *)&next_link_desc_addr_info,
|
||||
&buf_info);
|
||||
link_desc_va =
|
||||
dp_rx_cookie_2_link_desc_va(soc, &buf_info);
|
||||
cur_link_desc_addr_info = next_link_desc_addr_info;
|
||||
@@ -752,8 +776,9 @@ dp_rx_chain_msdus(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
|
||||
}
|
||||
|
||||
if (dp_pdev->ppdu_id == hal_rx_attn_phy_ppdu_id_get(rx_tlv_hdr) &&
|
||||
hal_rx_attn_msdu_done_get(rx_tlv_hdr)) {
|
||||
if (dp_pdev->ppdu_id == hal_rx_attn_phy_ppdu_id_get(soc->hal_soc,
|
||||
rx_tlv_hdr) &&
|
||||
hal_rx_attn_msdu_done_get(soc->hal_soc, rx_tlv_hdr)) {
|
||||
qdf_nbuf_set_rx_chfrag_end(nbuf, 1);
|
||||
qdf_assert_always(dp_pdev->first_nbuf == true);
|
||||
dp_pdev->first_nbuf = false;
|
||||
@@ -793,7 +818,7 @@ void dp_rx_err_handle_bar(struct dp_soc *soc,
|
||||
*/
|
||||
|
||||
rx_tlv_hdr = qdf_nbuf_data(nbuf);
|
||||
bar = (struct ieee80211_frame_bar *)(rx_tlv_hdr + SIZE_OF_DATA_RX_TLV);
|
||||
bar = (struct ieee80211_frame_bar *)(rx_tlv_hdr + soc->rx_pkt_tlv_size);
|
||||
|
||||
type = bar->i_fc[0] & IEEE80211_FC0_TYPE_MASK;
|
||||
subtype = bar->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;
|
||||
@@ -877,7 +902,7 @@ dp_rx_bar_frame_handle(struct dp_soc *soc,
|
||||
if (!peer)
|
||||
goto next;
|
||||
|
||||
reo_err_code = HAL_RX_REO_ERROR_GET(ring_desc);
|
||||
reo_err_code = hal_rx_get_reo_error_code(soc->hal_soc, ring_desc);
|
||||
dp_info("BAR frame: peer = "QDF_MAC_ADDR_FMT
|
||||
" peer_id = %d"
|
||||
" tid = %u"
|
||||
@@ -1020,7 +1045,7 @@ dp_rx_null_q_handle_invalid_peer_id_exception(struct dp_soc *soc,
|
||||
qdf_nbuf_t nbuf)
|
||||
{
|
||||
struct dp_peer *peer = NULL;
|
||||
uint8_t *rx_pkt_hdr = hal_rx_pkt_hdr_get(rx_tlv_hdr);
|
||||
uint8_t *rx_pkt_hdr = hal_rx_pkt_hdr_get(soc->hal_soc, rx_tlv_hdr);
|
||||
struct dp_pdev *pdev = dp_get_pdev_for_lmac_id(soc, pool_id);
|
||||
struct ieee80211_frame *wh = (struct ieee80211_frame *)rx_pkt_hdr;
|
||||
|
||||
@@ -1142,8 +1167,8 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
rx_tlv_hdr));
|
||||
|
||||
hal_rx_msdu_metadata_get(soc->hal_soc, rx_tlv_hdr, &msdu_metadata);
|
||||
msdu_len = hal_rx_msdu_start_msdu_len_get(rx_tlv_hdr);
|
||||
pkt_len = msdu_len + msdu_metadata.l3_hdr_pad + RX_PKT_TLVS_LEN;
|
||||
msdu_len = hal_rx_msdu_start_msdu_len_get(soc->hal_soc, rx_tlv_hdr);
|
||||
pkt_len = msdu_len + msdu_metadata.l3_hdr_pad + soc->rx_pkt_tlv_size;
|
||||
|
||||
if (qdf_likely(!qdf_nbuf_is_frag(nbuf))) {
|
||||
if (dp_rx_check_pkt_len(soc, pkt_len))
|
||||
@@ -1159,7 +1184,7 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
* Check if DMA completed -- msdu_done is the last bit
|
||||
* to be written
|
||||
*/
|
||||
if (!hal_rx_attn_msdu_done_get(rx_tlv_hdr)) {
|
||||
if (!hal_rx_attn_msdu_done_get(soc->hal_soc, rx_tlv_hdr)) {
|
||||
|
||||
dp_err_rl("MSDU DONE failure");
|
||||
hal_rx_dump_pkt_tlvs(soc->hal_soc, rx_tlv_hdr,
|
||||
@@ -1220,10 +1245,10 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
* pre-header TLV's
|
||||
*/
|
||||
if (qdf_nbuf_is_frag(nbuf))
|
||||
qdf_nbuf_pull_head(nbuf, RX_PKT_TLVS_LEN);
|
||||
qdf_nbuf_pull_head(nbuf, soc->rx_pkt_tlv_size);
|
||||
else
|
||||
qdf_nbuf_pull_head(nbuf, (msdu_metadata.l3_hdr_pad +
|
||||
RX_PKT_TLVS_LEN));
|
||||
soc->rx_pkt_tlv_size));
|
||||
|
||||
dp_vdev_peer_stats_update_protocol_cnt(vdev, nbuf, NULL, 0, 1);
|
||||
|
||||
@@ -1352,7 +1377,7 @@ dp_rx_process_rxdma_err(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
* Check if DMA completed -- msdu_done is the last bit
|
||||
* to be written
|
||||
*/
|
||||
if (!hal_rx_attn_msdu_done_get(rx_tlv_hdr)) {
|
||||
if (!hal_rx_attn_msdu_done_get(soc->hal_soc, rx_tlv_hdr)) {
|
||||
|
||||
dp_err_rl("MSDU DONE failure");
|
||||
|
||||
@@ -1363,8 +1388,8 @@ dp_rx_process_rxdma_err(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
|
||||
l2_hdr_offset = hal_rx_msdu_end_l3_hdr_padding_get(soc->hal_soc,
|
||||
rx_tlv_hdr);
|
||||
msdu_len = hal_rx_msdu_start_msdu_len_get(rx_tlv_hdr);
|
||||
pkt_len = msdu_len + l2_hdr_offset + RX_PKT_TLVS_LEN;
|
||||
msdu_len = hal_rx_msdu_start_msdu_len_get(soc->hal_soc, rx_tlv_hdr);
|
||||
pkt_len = msdu_len + l2_hdr_offset + soc->rx_pkt_tlv_size;
|
||||
|
||||
if (dp_rx_check_pkt_len(soc, pkt_len)) {
|
||||
/* Drop & free packet */
|
||||
@@ -1402,7 +1427,7 @@ dp_rx_process_rxdma_err(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
* Advance the packet start pointer by total size of
|
||||
* pre-header TLV's
|
||||
*/
|
||||
dp_rx_skip_tlvs(nbuf, l2_hdr_offset);
|
||||
dp_rx_skip_tlvs(soc, nbuf, l2_hdr_offset);
|
||||
|
||||
if (err_code == HAL_RXDMA_ERR_WIFI_PARSE) {
|
||||
uint8_t *pkt_type;
|
||||
@@ -1533,7 +1558,8 @@ void dp_rx_process_mic_error(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
|
||||
is_raw = HAL_IS_DECAP_FORMAT_RAW(soc->hal_soc, qdf_nbuf_data(nbuf));
|
||||
if (is_raw) {
|
||||
fragno = dp_rx_frag_get_mpdu_frag_number(qdf_nbuf_data(nbuf));
|
||||
fragno = dp_rx_frag_get_mpdu_frag_number(soc,
|
||||
qdf_nbuf_data(nbuf));
|
||||
/* Can get only last fragment */
|
||||
if (fragno) {
|
||||
tid = hal_rx_mpdu_start_tid_get(soc->hal_soc,
|
||||
@@ -1671,19 +1697,19 @@ dp_rx_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
uint32_t rx_bufs_reaped[MAX_PDEV_CNT] = { 0 };
|
||||
uint8_t mac_id = 0;
|
||||
uint8_t buf_type;
|
||||
uint8_t error, rbm;
|
||||
uint8_t error;
|
||||
struct hal_rx_mpdu_desc_info mpdu_desc_info;
|
||||
struct hal_buf_info hbi;
|
||||
struct dp_pdev *dp_pdev;
|
||||
struct dp_srng *dp_rxdma_srng;
|
||||
struct rx_desc_pool *rx_desc_pool;
|
||||
uint32_t cookie = 0;
|
||||
void *link_desc_va;
|
||||
struct hal_rx_msdu_list msdu_list; /* MSDU's per MPDU */
|
||||
uint16_t num_msdus;
|
||||
struct dp_rx_desc *rx_desc = NULL;
|
||||
QDF_STATUS status;
|
||||
bool ret;
|
||||
uint32_t error_code = 0;
|
||||
|
||||
/* Debug -- Remove later */
|
||||
qdf_assert(soc && hal_ring_hdl);
|
||||
@@ -1712,12 +1738,12 @@ dp_rx_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
|
||||
DP_STATS_INC(soc, rx.err_ring_pkts, 1);
|
||||
|
||||
error = HAL_RX_ERROR_STATUS_GET(ring_desc);
|
||||
error = hal_rx_err_status_get(hal_soc, ring_desc);
|
||||
|
||||
buf_type = HAL_RX_REO_BUF_TYPE_GET(ring_desc);
|
||||
buf_type = hal_rx_reo_buf_type_get(hal_soc, ring_desc);
|
||||
|
||||
/* Get the MPDU DESC info */
|
||||
hal_rx_mpdu_desc_info_get(ring_desc, &mpdu_desc_info);
|
||||
hal_rx_mpdu_desc_info_get(hal_soc, ring_desc, &mpdu_desc_info);
|
||||
|
||||
if (mpdu_desc_info.msdu_count == 0)
|
||||
goto next_entry;
|
||||
@@ -1727,11 +1753,12 @@ dp_rx_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
*/
|
||||
qdf_assert_always(buf_type == HAL_RX_REO_MSDU_LINK_DESC_TYPE);
|
||||
|
||||
cookie = HAL_RX_REO_BUF_COOKIE_GET(ring_desc);
|
||||
hal_rx_buf_cookie_rbm_get(hal_soc, (uint32_t *)ring_desc,
|
||||
&hbi);
|
||||
/*
|
||||
* check for the magic number in the sw cookie
|
||||
*/
|
||||
qdf_assert_always((cookie >> LINK_DESC_ID_SHIFT) &
|
||||
qdf_assert_always((hbi.sw_cookie >> LINK_DESC_ID_SHIFT) &
|
||||
LINK_DESC_ID_START);
|
||||
|
||||
status = dp_rx_link_cookie_check(ring_desc);
|
||||
@@ -1740,11 +1767,6 @@ dp_rx_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if the buffer is to be processed on this processor
|
||||
*/
|
||||
rbm = hal_rx_ret_buf_manager_get(ring_desc);
|
||||
|
||||
hal_rx_reo_buf_paddr_get(ring_desc, &hbi);
|
||||
link_desc_va = dp_rx_cookie_2_link_desc_va(soc, &hbi);
|
||||
hal_rx_msdu_list_get(soc->hal_soc, link_desc_va, &msdu_list,
|
||||
@@ -1752,10 +1774,13 @@ dp_rx_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
dp_rx_err_ring_record_entry(soc, msdu_list.paddr[0],
|
||||
msdu_list.sw_cookie[0],
|
||||
msdu_list.rbm[0]);
|
||||
if (qdf_unlikely((msdu_list.rbm[0] != DP_WBM2SW_RBM) &&
|
||||
(msdu_list.rbm[0] !=
|
||||
HAL_RX_BUF_RBM_WBM_IDLE_DESC_LIST) &&
|
||||
(msdu_list.rbm[0] != DP_DEFRAG_RBM))) {
|
||||
// TODO - BE- Check if the RBM is to be checked for all chips
|
||||
if (qdf_unlikely((msdu_list.rbm[0] !=
|
||||
DP_WBM2SW_RBM(soc->wbm_sw0_bm_id)) &&
|
||||
(msdu_list.rbm[0] !=
|
||||
HAL_RX_BUF_RBM_WBM_CHIP0_IDLE_DESC_LIST) &&
|
||||
(msdu_list.rbm[0] !=
|
||||
DP_DEFRAG_RBM(soc->wbm_sw0_bm_id)))) {
|
||||
/* TODO */
|
||||
/* Call appropriate handler */
|
||||
if (!wlan_cfg_get_dp_soc_nss_cfg(soc->wlan_cfg_ctx)) {
|
||||
@@ -1842,7 +1867,9 @@ dp_rx_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
*/
|
||||
qdf_assert_always(error == HAL_REO_ERROR_DETECTED);
|
||||
|
||||
if (hal_rx_reo_is_pn_error(ring_desc)) {
|
||||
error_code = hal_rx_get_reo_error_code(hal_soc, ring_desc);
|
||||
|
||||
if (hal_rx_reo_is_pn_error(error_code)) {
|
||||
/* TOD0 */
|
||||
DP_STATS_INC(soc,
|
||||
rx.err.
|
||||
@@ -1861,7 +1888,7 @@ dp_rx_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
goto next_entry;
|
||||
}
|
||||
|
||||
if (hal_rx_reo_is_2k_jump(ring_desc)) {
|
||||
if (hal_rx_reo_is_2k_jump(error_code)) {
|
||||
/* TOD0 */
|
||||
DP_STATS_INC(soc,
|
||||
rx.err.
|
||||
@@ -1883,7 +1910,7 @@ dp_rx_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
goto next_entry;
|
||||
}
|
||||
|
||||
if (hal_rx_reo_is_oor_error(ring_desc)) {
|
||||
if (hal_rx_reo_is_oor_error(error_code)) {
|
||||
DP_STATS_INC(
|
||||
soc,
|
||||
rx.err.
|
||||
@@ -1983,8 +2010,7 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
union dp_rx_desc_list_elem_t *tail[MAX_PDEV_CNT] = { NULL };
|
||||
uint32_t rx_bufs_used = 0;
|
||||
uint32_t rx_bufs_reaped[MAX_PDEV_CNT] = { 0 };
|
||||
uint8_t buf_type, rbm;
|
||||
uint32_t rx_buf_cookie;
|
||||
uint8_t buf_type;
|
||||
uint8_t mac_id;
|
||||
struct dp_pdev *dp_pdev;
|
||||
struct dp_srng *dp_rxdma_srng;
|
||||
@@ -1998,6 +2024,8 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
uint8_t tid = 0;
|
||||
uint8_t msdu_continuation = 0;
|
||||
bool process_sg_buf = false;
|
||||
uint32_t wbm_err_src;
|
||||
struct hal_buf_info buf_info = {0};
|
||||
|
||||
/* Debug -- Remove later */
|
||||
qdf_assert(soc && hal_ring_hdl);
|
||||
@@ -2032,32 +2060,34 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
*/
|
||||
qdf_assert_always(buf_type == HAL_RX_WBM_BUF_TYPE_REL_BUF);
|
||||
|
||||
qdf_assert((HAL_RX_WBM_ERR_SRC_GET(ring_desc)
|
||||
== HAL_RX_WBM_ERR_SRC_RXDMA) ||
|
||||
(HAL_RX_WBM_ERR_SRC_GET(ring_desc)
|
||||
== HAL_RX_WBM_ERR_SRC_REO));
|
||||
wbm_err_src = hal_rx_wbm_err_src_get(hal_soc, ring_desc);
|
||||
qdf_assert((wbm_err_src == HAL_RX_WBM_ERR_SRC_RXDMA) ||
|
||||
(wbm_err_src == HAL_RX_WBM_ERR_SRC_REO));
|
||||
|
||||
/*
|
||||
* Check if the buffer is to be processed on this processor
|
||||
*/
|
||||
rbm = hal_rx_ret_buf_manager_get(ring_desc);
|
||||
|
||||
if (qdf_unlikely(rbm != HAL_RX_BUF_RBM_SW3_BM)) {
|
||||
/* only cookie and rbm will be valid in buf_info */
|
||||
hal_rx_buf_cookie_rbm_get(hal_soc, (uint32_t *)ring_desc,
|
||||
&buf_info);
|
||||
|
||||
if (qdf_unlikely(buf_info.rbm !=
|
||||
HAL_RX_BUF_RBM_SW3_BM(soc->wbm_sw0_bm_id))) {
|
||||
/* TODO */
|
||||
/* Call appropriate handler */
|
||||
DP_STATS_INC(soc, rx.err.invalid_rbm, 1);
|
||||
dp_rx_err_err("%pK: Invalid RBM %d", soc, rbm);
|
||||
dp_rx_err_err("%pK: Invalid RBM %d", soc,
|
||||
buf_info.rbm);
|
||||
continue;
|
||||
}
|
||||
|
||||
rx_buf_cookie = HAL_RX_WBM_BUF_COOKIE_GET(ring_desc);
|
||||
|
||||
rx_desc = dp_rx_cookie_2_va_rxdma_buf(soc, rx_buf_cookie);
|
||||
rx_desc = dp_rx_cookie_2_va_rxdma_buf(soc, buf_info.sw_cookie);
|
||||
qdf_assert_always(rx_desc);
|
||||
|
||||
if (!dp_rx_desc_check_magic(rx_desc)) {
|
||||
dp_rx_err_err("%pk: Invalid rx_desc cookie=%d",
|
||||
soc, rx_buf_cookie);
|
||||
soc, buf_info.sw_cookie);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -2091,13 +2121,15 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
if (qdf_unlikely(soc->wbm_release_desc_rx_sg_support &&
|
||||
dp_rx_is_sg_formation_required(&wbm_err_info))) {
|
||||
/* SG is detected from continuation bit */
|
||||
msdu_continuation = hal_rx_wbm_err_msdu_continuation_get(hal_soc,
|
||||
ring_desc);
|
||||
msdu_continuation =
|
||||
hal_rx_wbm_err_msdu_continuation_get(hal_soc,
|
||||
ring_desc);
|
||||
if (msdu_continuation &&
|
||||
!(soc->wbm_sg_param.wbm_is_first_msdu_in_sg)) {
|
||||
/* Update length from first buffer in SG */
|
||||
soc->wbm_sg_param.wbm_sg_desc_msdu_len =
|
||||
hal_rx_msdu_start_msdu_len_get(
|
||||
soc->hal_soc,
|
||||
qdf_nbuf_data(nbuf));
|
||||
soc->wbm_sg_param.wbm_is_first_msdu_in_sg = true;
|
||||
}
|
||||
@@ -2122,8 +2154,10 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
* info when we do the actual nbuf processing
|
||||
*/
|
||||
wbm_err_info.pool_id = rx_desc->pool_id;
|
||||
hal_rx_wbm_err_info_set_in_tlv(qdf_nbuf_data(nbuf),
|
||||
&wbm_err_info);
|
||||
hal_rx_priv_info_set_in_tlv(soc->hal_soc,
|
||||
qdf_nbuf_data(nbuf),
|
||||
(uint8_t *)&wbm_err_info,
|
||||
sizeof(wbm_err_info));
|
||||
|
||||
rx_bufs_reaped[rx_desc->pool_id]++;
|
||||
|
||||
@@ -2187,7 +2221,9 @@ done:
|
||||
* retrieve the wbm desc info from nbuf TLV, so we can
|
||||
* handle error cases appropriately
|
||||
*/
|
||||
hal_rx_wbm_err_info_get_from_tlv(rx_tlv_hdr, &wbm_err_info);
|
||||
hal_rx_priv_info_get_from_tlv(soc->hal_soc, rx_tlv_hdr,
|
||||
(uint8_t *)&wbm_err_info,
|
||||
sizeof(wbm_err_info));
|
||||
|
||||
peer_id = hal_rx_mpdu_start_sw_peer_id_get(soc->hal_soc,
|
||||
rx_tlv_hdr);
|
||||
@@ -2262,7 +2298,7 @@ done:
|
||||
}
|
||||
QDF_NBUF_CB_RX_PKT_LEN(nbuf) =
|
||||
hal_rx_msdu_start_msdu_len_get(
|
||||
rx_tlv_hdr);
|
||||
soc->hal_soc, rx_tlv_hdr);
|
||||
nbuf->next = NULL;
|
||||
dp_2k_jump_handle(soc, nbuf,
|
||||
rx_tlv_hdr,
|
||||
@@ -2282,7 +2318,7 @@ done:
|
||||
}
|
||||
QDF_NBUF_CB_RX_PKT_LEN(nbuf) =
|
||||
hal_rx_msdu_start_msdu_len_get(
|
||||
rx_tlv_hdr);
|
||||
soc->hal_soc, rx_tlv_hdr);
|
||||
nbuf->next = NULL;
|
||||
dp_rx_oor_handle(soc, nbuf,
|
||||
rx_tlv_hdr,
|
||||
@@ -2464,8 +2500,8 @@ dp_rx_err_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
|
||||
|
||||
last = NULL;
|
||||
|
||||
hal_rx_reo_ent_buf_paddr_get(rxdma_dst_ring_desc, &buf_info,
|
||||
&msdu_cnt);
|
||||
hal_rx_reo_ent_buf_paddr_get(soc->hal_soc, rxdma_dst_ring_desc,
|
||||
&buf_info, &msdu_cnt);
|
||||
|
||||
push_reason =
|
||||
hal_rx_reo_ent_rxdma_push_reason_get(rxdma_dst_ring_desc);
|
||||
@@ -2492,9 +2528,10 @@ dp_rx_err_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
|
||||
* else iterate through the msdu link desc list and
|
||||
* free each msdu in the list.
|
||||
*/
|
||||
if (msdu_list.rbm[0] != HAL_RX_BUF_RBM_SW3_BM &&
|
||||
wlan_cfg_get_dp_pdev_nss_enabled(
|
||||
pdev->wlan_cfg_ctx))
|
||||
if (msdu_list.rbm[0] !=
|
||||
HAL_RX_BUF_RBM_SW3_BM(soc->wbm_sw0_bm_id) &&
|
||||
wlan_cfg_get_dp_pdev_nss_enabled(
|
||||
pdev->wlan_cfg_ctx))
|
||||
bm_action = HAL_BM_ACTION_RELEASE_MSDU_LIST;
|
||||
else {
|
||||
for (i = 0; i < num_msdus; i++) {
|
||||
@@ -2555,10 +2592,12 @@ dp_rx_err_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
|
||||
* Store the current link buffer into to the local structure
|
||||
* to be used for release purpose.
|
||||
*/
|
||||
hal_rxdma_buff_addr_info_set(rx_link_buf_info, buf_info.paddr,
|
||||
buf_info.sw_cookie, buf_info.rbm);
|
||||
hal_rxdma_buff_addr_info_set(soc->hal_soc, rx_link_buf_info,
|
||||
buf_info.paddr, buf_info.sw_cookie,
|
||||
buf_info.rbm);
|
||||
|
||||
hal_rx_mon_next_link_desc_get(rx_msdu_link_desc, &buf_info);
|
||||
hal_rx_mon_next_link_desc_get(soc->hal_soc, rx_msdu_link_desc,
|
||||
&buf_info);
|
||||
dp_rx_link_desc_return_by_addr(soc,
|
||||
(hal_buff_addrinfo_t)
|
||||
rx_link_buf_info,
|
||||
@@ -2662,8 +2701,8 @@ dp_wbm_int_err_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
|
||||
|
||||
last = NULL;
|
||||
|
||||
hal_rx_reo_ent_buf_paddr_get(rxdma_dst_ring_desc, &buf_info,
|
||||
&msdu_cnt);
|
||||
hal_rx_reo_ent_buf_paddr_get(soc->hal_soc, rxdma_dst_ring_desc,
|
||||
&buf_info, &msdu_cnt);
|
||||
|
||||
do {
|
||||
rx_msdu_link_desc =
|
||||
@@ -2714,10 +2753,12 @@ dp_wbm_int_err_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
|
||||
* Store the current link buffer into to the local structure
|
||||
* to be used for release purpose.
|
||||
*/
|
||||
hal_rxdma_buff_addr_info_set(rx_link_buf_info, buf_info.paddr,
|
||||
buf_info.sw_cookie, buf_info.rbm);
|
||||
hal_rxdma_buff_addr_info_set(soc->hal_soc, rx_link_buf_info,
|
||||
buf_info.paddr, buf_info.sw_cookie,
|
||||
buf_info.rbm);
|
||||
|
||||
hal_rx_mon_next_link_desc_get(rx_msdu_link_desc, &buf_info);
|
||||
hal_rx_mon_next_link_desc_get(soc->hal_soc, rx_msdu_link_desc,
|
||||
&buf_info);
|
||||
dp_rx_link_desc_return_by_addr(soc, (hal_buff_addrinfo_t)
|
||||
rx_link_buf_info,
|
||||
HAL_BM_ACTION_PUT_IN_IDLE_LIST);
|
||||
@@ -2753,7 +2794,6 @@ dp_handle_wbm_internal_error(struct dp_soc *soc, void *hal_desc,
|
||||
struct hal_buf_info buf_info = {0};
|
||||
struct dp_rx_desc *rx_desc = NULL;
|
||||
struct rx_desc_pool *rx_desc_pool;
|
||||
uint32_t rx_buf_cookie;
|
||||
uint32_t rx_bufs_reaped = 0;
|
||||
union dp_rx_desc_list_elem_t *head = NULL;
|
||||
union dp_rx_desc_list_elem_t *tail = NULL;
|
||||
@@ -2766,12 +2806,14 @@ dp_handle_wbm_internal_error(struct dp_soc *soc, void *hal_desc,
|
||||
return;
|
||||
}
|
||||
|
||||
rx_buf_cookie = HAL_RX_REO_BUF_COOKIE_GET(hal_desc);
|
||||
pool_id = DP_RX_DESC_COOKIE_POOL_ID_GET(rx_buf_cookie);
|
||||
/* buffer_addr_info is the first element of ring_desc */
|
||||
hal_rx_buf_cookie_rbm_get(soc->hal_soc, (uint32_t *)hal_desc,
|
||||
&buf_info);
|
||||
pool_id = DP_RX_DESC_COOKIE_POOL_ID_GET(buf_info.sw_cookie);
|
||||
|
||||
if (buf_type == HAL_WBM_RELEASE_RING_2_BUFFER_TYPE) {
|
||||
DP_STATS_INC(soc, tx.wbm_internal_error[WBM_INT_ERROR_REO_NULL_MSDU_BUFF], 1);
|
||||
rx_desc = dp_rx_cookie_2_va_rxdma_buf(soc, rx_buf_cookie);
|
||||
rx_desc = dp_rx_cookie_2_va_rxdma_buf(soc, buf_info.sw_cookie);
|
||||
|
||||
if (rx_desc && rx_desc->nbuf) {
|
||||
rx_desc_pool = &soc->rx_desc_buf[rx_desc->pool_id];
|
||||
|
Reference in New Issue
Block a user