mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-25 06:03:36 -04:00
qcacmn: skip wds handling for raw mode pkts
avoid wds source port learning for RAW pkts Change-Id: I38e27890bd4cd12b812a584a32de10499ef736fe
This commit is contained in:
parent
fd1edcc084
commit
3a0005c210
3 changed files with 46 additions and 35 deletions
|
|
@ -196,7 +196,7 @@ QDF_STATUS dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id,
|
|||
*
|
||||
* Return: void
|
||||
*/
|
||||
static void
|
||||
void
|
||||
dp_rx_deliver_raw(struct dp_vdev *vdev, qdf_nbuf_t nbuf_list)
|
||||
{
|
||||
qdf_nbuf_t deliver_list_head = NULL;
|
||||
|
|
@ -284,6 +284,7 @@ dp_get_vdev_from_peer(struct dp_soc *soc,
|
|||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* dp_rx_intrabss_fwd() - Implements the Intra-BSS forwarding logic
|
||||
*
|
||||
|
|
@ -902,7 +903,10 @@ done:
|
|||
#endif /* NAPIER_EMULATION */
|
||||
|
||||
/* WDS Source Port Learning */
|
||||
dp_rx_wds_srcport_learn(soc, rx_tlv_hdr, peer, nbuf);
|
||||
if (qdf_likely(vdev->rx_decap_type ==
|
||||
htt_cmn_pkt_type_ethernet))
|
||||
dp_rx_wds_srcport_learn(soc, rx_tlv_hdr, peer,
|
||||
nbuf);
|
||||
|
||||
/* Intrabss-fwd */
|
||||
if (vdev->opmode != wlan_op_mode_sta)
|
||||
|
|
|
|||
|
|
@ -180,6 +180,8 @@ void dp_rx_desc_pool_free(struct dp_soc *soc,
|
|||
uint32_t pool_id,
|
||||
struct rx_desc_pool *rx_desc_pool);
|
||||
|
||||
void dp_rx_deliver_raw(struct dp_vdev *vdev, qdf_nbuf_t nbuf_list);
|
||||
|
||||
/**
|
||||
* dp_rx_add_to_free_desc_list() - Adds to a local free descriptor list
|
||||
*
|
||||
|
|
|
|||
|
|
@ -234,7 +234,6 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, struct dp_rx_desc *rx_desc,
|
|||
uint16_t peer_id = 0xFFFF;
|
||||
struct dp_peer *peer = NULL;
|
||||
uint32_t sgi, rate_mcs, tid;
|
||||
uint32_t peer_mdata;
|
||||
|
||||
rx_bufs_used++;
|
||||
|
||||
|
|
@ -279,6 +278,17 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, struct dp_rx_desc *rx_desc,
|
|||
goto fail;
|
||||
}
|
||||
|
||||
vdev = peer->vdev;
|
||||
if (!vdev) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
FL("INVALID vdev %p OR osif_rx"), vdev);
|
||||
/* Drop & free packet */
|
||||
qdf_nbuf_free(nbuf);
|
||||
DP_STATS_INC(soc, rx.err.invalid_vdev, 1);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
|
||||
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);
|
||||
tid = hal_rx_mpdu_start_tid_get(rx_desc->rx_buf_start);
|
||||
|
|
@ -287,14 +297,9 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, struct dp_rx_desc *rx_desc,
|
|||
"%s: %d, SGI: %d, rate_mcs: %d, tid: %d",
|
||||
__func__, __LINE__, sgi, rate_mcs, tid);
|
||||
|
||||
peer_mdata = hal_rx_mpdu_peer_meta_data_get(rx_desc->rx_buf_start);
|
||||
peer_id = DP_PEER_METADATA_PEER_ID_GET(peer_mdata);
|
||||
peer = dp_peer_find_by_id(soc, peer_id);
|
||||
|
||||
if (!peer) {
|
||||
qdf_nbuf_free(nbuf);
|
||||
goto fail;
|
||||
}
|
||||
/* WDS Source Port Learning */
|
||||
if (qdf_likely(vdev->rx_decap_type == htt_cmn_pkt_type_ethernet))
|
||||
dp_rx_wds_srcport_learn(soc, rx_desc->rx_buf_start, peer, nbuf);
|
||||
|
||||
/*
|
||||
* Advance the packet start pointer by total size of
|
||||
|
|
@ -330,33 +335,33 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, struct dp_rx_desc *rx_desc,
|
|||
qdf_nbuf_data(nbuf), 128, false);
|
||||
#endif /* NAPIER_EMULATION */
|
||||
|
||||
if (qdf_unlikely(peer->bss_peer)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP,
|
||||
QDF_TRACE_LEVEL_INFO,
|
||||
FL("received pkt with same src MAC"));
|
||||
|
||||
/* Drop & free packet */
|
||||
qdf_nbuf_free(nbuf);
|
||||
/* Statistics */
|
||||
goto fail;
|
||||
}
|
||||
|
||||
vdev = peer->vdev;
|
||||
|
||||
if (vdev && vdev->osif_rx) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
|
||||
FL("vdev %p osif_rx %p"), vdev,
|
||||
vdev->osif_rx);
|
||||
|
||||
if (qdf_unlikely(vdev->rx_decap_type == htt_cmn_pkt_type_raw)) {
|
||||
qdf_nbuf_set_next(nbuf, NULL);
|
||||
vdev->osif_rx(vdev->osif_vdev, nbuf);
|
||||
DP_STATS_INC(vdev->pdev, rx.to_stack.num, 1);
|
||||
dp_rx_deliver_raw(vdev, nbuf);
|
||||
} else {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
FL("INVALID vdev %p OR osif_rx"), vdev);
|
||||
DP_STATS_INC(soc, rx.err.invalid_vdev, 1);
|
||||
}
|
||||
if (qdf_unlikely(peer->bss_peer)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP,
|
||||
QDF_TRACE_LEVEL_INFO,
|
||||
FL("received pkt with same src MAC"));
|
||||
/* Drop & free packet */
|
||||
qdf_nbuf_free(nbuf);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (vdev->osif_rx) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
|
||||
FL("vdev %p osif_rx %p"), vdev,
|
||||
vdev->osif_rx);
|
||||
|
||||
qdf_nbuf_set_next(nbuf, NULL);
|
||||
vdev->osif_rx(vdev->osif_vdev, nbuf);
|
||||
DP_STATS_INC(vdev->pdev, rx.to_stack.num, 1);
|
||||
} else {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
FL("INVALID vdev %p OR osif_rx"), vdev);
|
||||
DP_STATS_INC(soc, rx.err.invalid_vdev, 1);
|
||||
}
|
||||
}
|
||||
fail:
|
||||
dp_rx_add_to_free_desc_list(head, tail, rx_desc);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue