qcacmn: Add Support of Rx Err MLO Link Stats for ML Peer
Add Support to update Rx Error path, MLO Link stats for ML Peer Change-Id: Ie5000d0d30a41fa69c86259bae0fd7a8094bddf7 CRs-Fixed: 3397721
This commit is contained in:

committed by
Madan Koyyalamudi

parent
4ae60e4df1
commit
3243b9e4f4
@@ -1961,7 +1961,8 @@ QDF_STATUS
|
||||
dp_rx_null_q_desc_handle_be(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
uint8_t *rx_tlv_hdr, uint8_t pool_id,
|
||||
struct dp_txrx_peer *txrx_peer,
|
||||
bool is_reo_exception)
|
||||
bool is_reo_exception,
|
||||
uint8_t link_id)
|
||||
{
|
||||
uint32_t pkt_len;
|
||||
uint16_t msdu_len;
|
||||
@@ -2082,7 +2083,8 @@ dp_rx_null_q_desc_handle_be(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
dp_vdev_peer_stats_update_protocol_cnt(vdev, nbuf, NULL, 0, 1);
|
||||
|
||||
if (dp_rx_err_drop_3addr_mcast(vdev, rx_tlv_hdr)) {
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer, rx.mcast_3addr_drop, 1);
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer, rx.mcast_3addr_drop, 1,
|
||||
link_id);
|
||||
goto drop_nbuf;
|
||||
}
|
||||
|
||||
@@ -2100,7 +2102,7 @@ dp_rx_null_q_desc_handle_be(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
dp_rx_mcast_echo_check(soc, txrx_peer, rx_tlv_hdr, nbuf)) {
|
||||
/* this is a looped back MCBC pkt, drop it */
|
||||
DP_PEER_PER_PKT_STATS_INC_PKT(txrx_peer, rx.mec_drop, 1,
|
||||
qdf_nbuf_len(nbuf));
|
||||
qdf_nbuf_len(nbuf), link_id);
|
||||
goto drop_nbuf;
|
||||
}
|
||||
|
||||
@@ -2111,7 +2113,7 @@ dp_rx_null_q_desc_handle_be(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
*/
|
||||
if (check_qwrap_multicast_loopback(vdev, nbuf)) {
|
||||
DP_PEER_PER_PKT_STATS_INC_PKT(txrx_peer, rx.mec_drop, 1,
|
||||
qdf_nbuf_len(nbuf));
|
||||
qdf_nbuf_len(nbuf), link_id);
|
||||
goto drop_nbuf;
|
||||
}
|
||||
|
||||
@@ -2119,13 +2121,15 @@ dp_rx_null_q_desc_handle_be(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
hal_rx_msdu_end_da_is_mcbc_get(soc->hal_soc,
|
||||
rx_tlv_hdr))) {
|
||||
dp_err_rl("free buffer for multicast packet");
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer, rx.nawds_mcast_drop, 1);
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer, rx.nawds_mcast_drop, 1,
|
||||
link_id);
|
||||
goto drop_nbuf;
|
||||
}
|
||||
|
||||
if (!dp_wds_rx_policy_check(rx_tlv_hdr, vdev, txrx_peer)) {
|
||||
dp_err_rl("mcast Policy Check Drop pkt");
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer, rx.policy_check_drop, 1);
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer, rx.policy_check_drop, 1,
|
||||
link_id);
|
||||
goto drop_nbuf;
|
||||
}
|
||||
/* WDS Source Port Learning */
|
||||
@@ -2185,7 +2189,7 @@ dp_rx_null_q_desc_handle_be(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
|
||||
if (qdf_unlikely(vdev->rx_decap_type == htt_cmn_pkt_type_raw)) {
|
||||
qdf_nbuf_set_next(nbuf, NULL);
|
||||
dp_rx_deliver_raw(vdev, nbuf, txrx_peer);
|
||||
dp_rx_deliver_raw(vdev, nbuf, txrx_peer, link_id);
|
||||
} else {
|
||||
enh_flag = vdev->pdev->enhanced_stats_en;
|
||||
qdf_nbuf_set_next(nbuf, NULL);
|
||||
@@ -2208,12 +2212,18 @@ dp_rx_null_q_desc_handle_be(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
(vdev->rx_decap_type ==
|
||||
htt_cmn_pkt_type_ethernet))) {
|
||||
DP_PEER_MC_INCC_PKT(txrx_peer, 1, qdf_nbuf_len(nbuf),
|
||||
enh_flag);
|
||||
enh_flag, link_id);
|
||||
|
||||
if (QDF_IS_ADDR_BROADCAST(eh->ether_dhost))
|
||||
DP_PEER_BC_INCC_PKT(txrx_peer, 1,
|
||||
qdf_nbuf_len(nbuf),
|
||||
enh_flag);
|
||||
enh_flag,
|
||||
link_id);
|
||||
} else {
|
||||
DP_PEER_UC_INCC_PKT(txrx_peer, 1,
|
||||
qdf_nbuf_len(nbuf),
|
||||
enh_flag,
|
||||
link_id);
|
||||
}
|
||||
|
||||
qdf_nbuf_set_exc_frame(nbuf, 1);
|
||||
|
@@ -594,6 +594,7 @@ dp_rx_wbm_err_reap_desc_be(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
* @pool_id: mac id
|
||||
* @txrx_peer: txrx peer handle
|
||||
* @is_reo_exception: flag to check if the error is from REO or WBM
|
||||
* @link_id: link Id on which the packet is received
|
||||
*
|
||||
* This function handles NULL queue descriptor violations arising out
|
||||
* a missing REO queue for a given peer or a given TID. This typically
|
||||
@@ -610,7 +611,7 @@ QDF_STATUS
|
||||
dp_rx_null_q_desc_handle_be(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
uint8_t *rx_tlv_hdr, uint8_t pool_id,
|
||||
struct dp_txrx_peer *txrx_peer,
|
||||
bool is_reo_exception);
|
||||
bool is_reo_exception, uint8_t link_id);
|
||||
|
||||
#if defined(DP_PKT_STATS_PER_LMAC) && defined(WLAN_FEATURE_11BE_MLO)
|
||||
static inline void
|
||||
|
@@ -1019,7 +1019,7 @@ qdf_export_symbol(__dp_rx_buffers_replenish);
|
||||
|
||||
void
|
||||
dp_rx_deliver_raw(struct dp_vdev *vdev, qdf_nbuf_t nbuf_list,
|
||||
struct dp_txrx_peer *txrx_peer)
|
||||
struct dp_txrx_peer *txrx_peer, uint8_t link_id)
|
||||
{
|
||||
qdf_nbuf_t deliver_list_head = NULL;
|
||||
qdf_nbuf_t deliver_list_tail = NULL;
|
||||
@@ -1033,7 +1033,7 @@ dp_rx_deliver_raw(struct dp_vdev *vdev, qdf_nbuf_t nbuf_list,
|
||||
|
||||
DP_STATS_INC(vdev->pdev, rx_raw_pkts, 1);
|
||||
DP_PEER_PER_PKT_STATS_INC_PKT(txrx_peer, rx.raw, 1,
|
||||
qdf_nbuf_len(nbuf));
|
||||
qdf_nbuf_len(nbuf), link_id);
|
||||
/*
|
||||
* reset the chfrag_start and chfrag_end bits in nbuf cb
|
||||
* as this is a non-amsdu pkt and RAW mode simulation expects
|
||||
|
@@ -1041,12 +1041,13 @@ void dp_rx_desc_pool_free(struct dp_soc *soc,
|
||||
* decapsulate the pkt.
|
||||
* @vdev: vdev on which RAW mode is enabled
|
||||
* @nbuf_list: list of RAW pkts to process
|
||||
* @txrx_peer: peer object from which the pkt is rx
|
||||
* @peer: peer object from which the pkt is rx
|
||||
* @link_id: link Id on which the packet is received
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
void dp_rx_deliver_raw(struct dp_vdev *vdev, qdf_nbuf_t nbuf_list,
|
||||
struct dp_txrx_peer *txrx_peer);
|
||||
struct dp_txrx_peer *peer, uint8_t link_id);
|
||||
|
||||
#ifdef RX_DESC_LOGGING
|
||||
/**
|
||||
@@ -3018,13 +3019,14 @@ dp_rxdma_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
* @err_code: rxdma err code
|
||||
* @mac_id: mac_id which is one of 3 mac_ids(Assuming mac_id and
|
||||
* pool_id has same mapping)
|
||||
* @link_id: link Id on which the packet is received
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void
|
||||
dp_rx_process_rxdma_err(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
uint8_t *rx_tlv_hdr, struct dp_txrx_peer *txrx_peer,
|
||||
uint8_t err_code, uint8_t mac_id);
|
||||
uint8_t err_code, uint8_t mac_id, uint8_t link_id);
|
||||
|
||||
/**
|
||||
* dp_rx_process_mic_error(): Function to pass mic error indication to umac
|
||||
|
@@ -1050,6 +1050,7 @@ dp_rx_reo_err_entry_process(struct dp_soc *soc,
|
||||
hal_ring_handle_t hal_ring_hdl = soc->reo_exception_ring.hal_srng;
|
||||
bool first_msdu_in_mpdu_processed = false;
|
||||
bool msdu_dropped = false;
|
||||
uint8_t link_id = 0;
|
||||
|
||||
peer_id = dp_rx_peer_metadata_peer_id_get(soc,
|
||||
mpdu_desc_info->peer_meta_data);
|
||||
@@ -1217,7 +1218,8 @@ more_msdu_link_desc:
|
||||
rx_tlv_hdr_last,
|
||||
rx_desc_pool_id,
|
||||
txrx_peer,
|
||||
TRUE);
|
||||
TRUE,
|
||||
link_id);
|
||||
if (txrx_peer)
|
||||
dp_txrx_peer_unref_delete(txrx_ref_handle,
|
||||
DP_MOD_ID_RX_ERR);
|
||||
@@ -1281,7 +1283,7 @@ process_next_msdu:
|
||||
void
|
||||
dp_rx_process_rxdma_err(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
uint8_t *rx_tlv_hdr, struct dp_txrx_peer *txrx_peer,
|
||||
uint8_t err_code, uint8_t mac_id)
|
||||
uint8_t err_code, uint8_t mac_id, uint8_t link_id)
|
||||
{
|
||||
uint32_t pkt_len, l2_hdr_offset;
|
||||
uint16_t msdu_len;
|
||||
@@ -1408,15 +1410,20 @@ process_rx:
|
||||
is_broadcast = (QDF_IS_ADDR_BROADCAST
|
||||
(eh->ether_dhost)) ? 1 : 0 ;
|
||||
DP_PEER_PER_PKT_STATS_INC_PKT(txrx_peer, rx.multicast, 1,
|
||||
qdf_nbuf_len(nbuf));
|
||||
qdf_nbuf_len(nbuf), link_id);
|
||||
if (is_broadcast) {
|
||||
DP_PEER_PER_PKT_STATS_INC_PKT(txrx_peer, rx.bcast, 1,
|
||||
qdf_nbuf_len(nbuf));
|
||||
qdf_nbuf_len(nbuf),
|
||||
link_id);
|
||||
}
|
||||
} else {
|
||||
DP_PEER_PER_PKT_STATS_INC_PKT(txrx_peer, rx.unicast, 1,
|
||||
qdf_nbuf_len(nbuf),
|
||||
link_id);
|
||||
}
|
||||
|
||||
if (qdf_unlikely(vdev->rx_decap_type == htt_cmn_pkt_type_raw)) {
|
||||
dp_rx_deliver_raw(vdev, nbuf, txrx_peer);
|
||||
dp_rx_deliver_raw(vdev, nbuf, txrx_peer, link_id);
|
||||
} else {
|
||||
/* Update the protocol tag in SKB based on CCE metadata */
|
||||
dp_rx_update_protocol_tag(soc, vdev, nbuf, rx_tlv_hdr,
|
||||
@@ -1520,10 +1527,12 @@ fail:
|
||||
static bool dp_rx_igmp_handler(struct dp_soc *soc,
|
||||
struct dp_vdev *vdev,
|
||||
struct dp_txrx_peer *peer,
|
||||
qdf_nbuf_t nbuf)
|
||||
qdf_nbuf_t nbuf,
|
||||
uint8_t link_id)
|
||||
{
|
||||
if (soc->arch_ops.dp_rx_mcast_handler) {
|
||||
if (soc->arch_ops.dp_rx_mcast_handler(soc, vdev, peer, nbuf))
|
||||
if (soc->arch_ops.dp_rx_mcast_handler(soc, vdev, peer,
|
||||
nbuf, link_id))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -1532,7 +1541,8 @@ static bool dp_rx_igmp_handler(struct dp_soc *soc,
|
||||
static bool dp_rx_igmp_handler(struct dp_soc *soc,
|
||||
struct dp_vdev *vdev,
|
||||
struct dp_txrx_peer *peer,
|
||||
qdf_nbuf_t nbuf)
|
||||
qdf_nbuf_t nbuf,
|
||||
uint8_t link_id)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -1548,6 +1558,7 @@ static bool dp_rx_igmp_handler(struct dp_soc *soc,
|
||||
* @txrx_peer: txrx peer handle
|
||||
* @rx_tlv_hdr: start of rx tlv header
|
||||
* @err_src: rxdma/reo
|
||||
* @link_id: link id on which the packet is received
|
||||
*
|
||||
* This function indicates EAPOL frame received in wbm error ring to stack.
|
||||
* Any other frame should be dropped.
|
||||
@@ -1557,7 +1568,8 @@ static bool dp_rx_igmp_handler(struct dp_soc *soc,
|
||||
static void
|
||||
dp_rx_err_route_hdl(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
struct dp_txrx_peer *txrx_peer, uint8_t *rx_tlv_hdr,
|
||||
enum hal_rx_wbm_error_source err_src)
|
||||
enum hal_rx_wbm_error_source err_src,
|
||||
uint8_t link_id)
|
||||
{
|
||||
uint32_t pkt_len;
|
||||
uint16_t msdu_len;
|
||||
@@ -1610,7 +1622,7 @@ dp_rx_err_route_hdl(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
qdf_nbuf_pull_head(nbuf, (msdu_metadata.l3_hdr_pad +
|
||||
soc->rx_pkt_tlv_size));
|
||||
|
||||
if (dp_rx_igmp_handler(soc, vdev, txrx_peer, nbuf))
|
||||
if (dp_rx_igmp_handler(soc, vdev, txrx_peer, nbuf, link_id))
|
||||
return;
|
||||
|
||||
dp_vdev_peer_stats_update_protocol_cnt(vdev, nbuf, NULL, 0, 1);
|
||||
@@ -2331,6 +2343,7 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
struct hal_wbm_err_desc_info wbm_err_info = { 0 };
|
||||
uint8_t pool_id;
|
||||
uint8_t tid = 0;
|
||||
uint8_t link_id = 0;
|
||||
|
||||
/* Debug -- Remove later */
|
||||
qdf_assert(soc && hal_ring_hdl);
|
||||
@@ -2430,7 +2443,8 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
rx_tlv_hdr,
|
||||
pool_id,
|
||||
txrx_peer,
|
||||
FALSE);
|
||||
FALSE,
|
||||
link_id);
|
||||
break;
|
||||
/* TODO */
|
||||
/* Add per error code accounting */
|
||||
@@ -2438,7 +2452,8 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
if (txrx_peer)
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer,
|
||||
rx.err.jump_2k_err,
|
||||
1);
|
||||
1,
|
||||
link_id);
|
||||
|
||||
pool_id = wbm_err_info.pool_id;
|
||||
|
||||
@@ -2459,7 +2474,8 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
if (txrx_peer)
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer,
|
||||
rx.err.oor_err,
|
||||
1);
|
||||
1,
|
||||
link_id);
|
||||
if (hal_rx_msdu_end_first_msdu_get(soc->hal_soc,
|
||||
rx_tlv_hdr)) {
|
||||
tid =
|
||||
@@ -2489,7 +2505,8 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
if (txrx_peer)
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer,
|
||||
rx.err.pn_err,
|
||||
1);
|
||||
1,
|
||||
link_id);
|
||||
dp_rx_nbuf_free(nbuf);
|
||||
break;
|
||||
|
||||
@@ -2502,7 +2519,8 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
== HAL_RX_WBM_REO_PSH_RSN_ROUTE) {
|
||||
dp_rx_err_route_hdl(soc, nbuf, txrx_peer,
|
||||
rx_tlv_hdr,
|
||||
HAL_RX_WBM_ERR_SRC_REO);
|
||||
HAL_RX_WBM_ERR_SRC_REO,
|
||||
link_id);
|
||||
} else {
|
||||
/* should not enter here */
|
||||
dp_rx_err_alert("invalid reo push reason %u",
|
||||
@@ -2531,7 +2549,8 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
if (txrx_peer)
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer,
|
||||
rx.err.rxdma_wifi_parse_err,
|
||||
1);
|
||||
1,
|
||||
link_id);
|
||||
|
||||
pool_id = wbm_err_info.pool_id;
|
||||
dp_rx_process_rxdma_err(soc, nbuf,
|
||||
@@ -2539,7 +2558,8 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
txrx_peer,
|
||||
wbm_err_info.
|
||||
rxdma_err_code,
|
||||
pool_id);
|
||||
pool_id,
|
||||
link_id);
|
||||
break;
|
||||
|
||||
case HAL_RXDMA_ERR_TKIP_MIC:
|
||||
@@ -2549,7 +2569,8 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
if (txrx_peer)
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer,
|
||||
rx.err.mic_err,
|
||||
1);
|
||||
1,
|
||||
link_id);
|
||||
break;
|
||||
|
||||
case HAL_RXDMA_ERR_DECRYPT:
|
||||
@@ -2564,14 +2585,16 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
txrx_peer);
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer,
|
||||
rx.err.mic_err,
|
||||
1);
|
||||
1,
|
||||
link_id);
|
||||
break;
|
||||
}
|
||||
|
||||
if (txrx_peer) {
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer,
|
||||
rx.err.decrypt_err,
|
||||
1);
|
||||
1,
|
||||
link_id);
|
||||
dp_rx_nbuf_free(nbuf);
|
||||
break;
|
||||
}
|
||||
@@ -2587,13 +2610,15 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
dp_rx_process_rxdma_err(soc, nbuf,
|
||||
tlv_hdr, NULL,
|
||||
err_code,
|
||||
pool_id);
|
||||
pool_id,
|
||||
link_id);
|
||||
break;
|
||||
case HAL_RXDMA_MULTICAST_ECHO:
|
||||
if (txrx_peer)
|
||||
DP_PEER_PER_PKT_STATS_INC_PKT(txrx_peer,
|
||||
rx.mec_drop, 1,
|
||||
qdf_nbuf_len(nbuf));
|
||||
qdf_nbuf_len(nbuf),
|
||||
link_id);
|
||||
dp_rx_nbuf_free(nbuf);
|
||||
break;
|
||||
case HAL_RXDMA_UNAUTHORIZED_WDS:
|
||||
@@ -2604,7 +2629,8 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
tlv_hdr,
|
||||
txrx_peer,
|
||||
err_code,
|
||||
pool_id);
|
||||
pool_id,
|
||||
link_id);
|
||||
break;
|
||||
default:
|
||||
dp_rx_nbuf_free(nbuf);
|
||||
@@ -2615,7 +2641,8 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
== HAL_RX_WBM_RXDMA_PSH_RSN_ROUTE) {
|
||||
dp_rx_err_route_hdl(soc, nbuf, txrx_peer,
|
||||
rx_tlv_hdr,
|
||||
HAL_RX_WBM_ERR_SRC_RXDMA);
|
||||
HAL_RX_WBM_ERR_SRC_RXDMA,
|
||||
link_id);
|
||||
} else if (wbm_err_info.rxdma_psh_rsn
|
||||
== HAL_RX_WBM_RXDMA_PSH_RSN_FLUSH) {
|
||||
dp_rx_err_err("rxdma push reason %u",
|
||||
|
@@ -2420,7 +2420,8 @@ struct dp_arch_ops {
|
||||
uint8_t *rx_tlv_hdr,
|
||||
uint8_t pool_id,
|
||||
struct dp_txrx_peer *txrx_peer,
|
||||
bool is_reo_exception);
|
||||
bool is_reo_exception,
|
||||
uint8_t link_id);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -1316,7 +1316,8 @@ QDF_STATUS
|
||||
dp_rx_null_q_desc_handle_li(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
uint8_t *rx_tlv_hdr, uint8_t pool_id,
|
||||
struct dp_txrx_peer *txrx_peer,
|
||||
bool is_reo_exception)
|
||||
bool is_reo_exception,
|
||||
uint8_t link_id)
|
||||
{
|
||||
uint32_t pkt_len;
|
||||
uint16_t msdu_len;
|
||||
@@ -1437,7 +1438,8 @@ dp_rx_null_q_desc_handle_li(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
dp_vdev_peer_stats_update_protocol_cnt(vdev, nbuf, NULL, 0, 1);
|
||||
|
||||
if (dp_rx_err_drop_3addr_mcast(vdev, rx_tlv_hdr)) {
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer, rx.mcast_3addr_drop, 1);
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer, rx.mcast_3addr_drop, 1,
|
||||
0);
|
||||
goto drop_nbuf;
|
||||
}
|
||||
|
||||
@@ -1455,7 +1457,7 @@ dp_rx_null_q_desc_handle_li(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
dp_rx_mcast_echo_check(soc, txrx_peer, rx_tlv_hdr, nbuf)) {
|
||||
/* this is a looped back MCBC pkt, drop it */
|
||||
DP_PEER_PER_PKT_STATS_INC_PKT(txrx_peer, rx.mec_drop, 1,
|
||||
qdf_nbuf_len(nbuf));
|
||||
qdf_nbuf_len(nbuf), 0);
|
||||
goto drop_nbuf;
|
||||
}
|
||||
|
||||
@@ -1466,7 +1468,7 @@ dp_rx_null_q_desc_handle_li(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
*/
|
||||
if (check_qwrap_multicast_loopback(vdev, nbuf)) {
|
||||
DP_PEER_PER_PKT_STATS_INC_PKT(txrx_peer, rx.mec_drop, 1,
|
||||
qdf_nbuf_len(nbuf));
|
||||
qdf_nbuf_len(nbuf), 0);
|
||||
goto drop_nbuf;
|
||||
}
|
||||
|
||||
@@ -1474,13 +1476,15 @@ dp_rx_null_q_desc_handle_li(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
hal_rx_msdu_end_da_is_mcbc_get(soc->hal_soc,
|
||||
rx_tlv_hdr))) {
|
||||
dp_err_rl("free buffer for multicast packet");
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer, rx.nawds_mcast_drop, 1);
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer, rx.nawds_mcast_drop, 1,
|
||||
0);
|
||||
goto drop_nbuf;
|
||||
}
|
||||
|
||||
if (!dp_wds_rx_policy_check(rx_tlv_hdr, vdev, txrx_peer)) {
|
||||
dp_err_rl("mcast Policy Check Drop pkt");
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer, rx.policy_check_drop, 1);
|
||||
DP_PEER_PER_PKT_STATS_INC(txrx_peer, rx.policy_check_drop, 1,
|
||||
0);
|
||||
goto drop_nbuf;
|
||||
}
|
||||
/* WDS Source Port Learning */
|
||||
@@ -1540,7 +1544,7 @@ dp_rx_null_q_desc_handle_li(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
|
||||
if (qdf_unlikely(vdev->rx_decap_type == htt_cmn_pkt_type_raw)) {
|
||||
qdf_nbuf_set_next(nbuf, NULL);
|
||||
dp_rx_deliver_raw(vdev, nbuf, txrx_peer);
|
||||
dp_rx_deliver_raw(vdev, nbuf, txrx_peer, 0);
|
||||
} else {
|
||||
enh_flag = vdev->pdev->enhanced_stats_en;
|
||||
qdf_nbuf_set_next(nbuf, NULL);
|
||||
@@ -1563,12 +1567,17 @@ dp_rx_null_q_desc_handle_li(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
(vdev->rx_decap_type ==
|
||||
htt_cmn_pkt_type_ethernet))) {
|
||||
DP_PEER_MC_INCC_PKT(txrx_peer, 1, qdf_nbuf_len(nbuf),
|
||||
enh_flag);
|
||||
enh_flag, 0);
|
||||
|
||||
if (QDF_IS_ADDR_BROADCAST(eh->ether_dhost))
|
||||
DP_PEER_BC_INCC_PKT(txrx_peer, 1,
|
||||
qdf_nbuf_len(nbuf),
|
||||
enh_flag);
|
||||
enh_flag, 0);
|
||||
} else {
|
||||
DP_PEER_UC_INCC_PKT(txrx_peer, 1,
|
||||
qdf_nbuf_len(nbuf),
|
||||
enh_flag,
|
||||
0);
|
||||
}
|
||||
|
||||
qdf_nbuf_set_exc_frame(nbuf, 1);
|
||||
|
@@ -316,6 +316,7 @@ dp_rx_wbm_err_reap_desc_li(struct dp_intr *int_ctx, struct dp_soc *soc,
|
||||
* @pool_id: mac id
|
||||
* @txrx_peer: txrx peer handle
|
||||
* @is_reo_exception: flag to check if the error is from REO or WBM
|
||||
* @link_id: link Id on which packet is received
|
||||
*
|
||||
* This function handles NULL queue descriptor violations arising out
|
||||
* a missing REO queue for a given peer or a given TID. This typically
|
||||
@@ -332,5 +333,6 @@ QDF_STATUS
|
||||
dp_rx_null_q_desc_handle_li(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||
uint8_t *rx_tlv_hdr, uint8_t pool_id,
|
||||
struct dp_txrx_peer *txrx_peer,
|
||||
bool is_reo_exception);
|
||||
bool is_reo_exception,
|
||||
uint8_t link_id);
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user