qcacmn: MLO Intra-BSS changes
When a packet s destined to ML STA from a legacy peer, use the ML peer id to identify the primary link and redirect the packet to primary vdev for Intra-BSS. Change-Id: Id8e6fcc9e2dd638e6d923eef50f55325fa538c49 CRs-Fixed: 3169484
This commit is contained in:

committed by
Madan Koyyalamudi

parent
37a48b157f
commit
67fe081325
@@ -1270,8 +1270,10 @@ dp_rx_intrabss_ucast_check_be(qdf_nbuf_t nbuf,
|
|||||||
|
|
||||||
dest_chip_id = HAL_RX_DEST_CHIP_ID_GET(msdu_metadata);
|
dest_chip_id = HAL_RX_DEST_CHIP_ID_GET(msdu_metadata);
|
||||||
qdf_assert_always(dest_chip_id <= (DP_MLO_MAX_DEST_CHIP_ID - 1));
|
qdf_assert_always(dest_chip_id <= (DP_MLO_MAX_DEST_CHIP_ID - 1));
|
||||||
|
da_peer_id = HAL_RX_PEER_ID_GET(msdu_metadata);
|
||||||
|
|
||||||
if (be_soc->mlo_enabled) {
|
/* TA is MLD peer */
|
||||||
|
if (be_soc->mlo_enabled && ta_peer->mld_peer) {
|
||||||
/* validate chip_id, get a ref, and re-assign soc */
|
/* validate chip_id, get a ref, and re-assign soc */
|
||||||
params->dest_soc =
|
params->dest_soc =
|
||||||
dp_mlo_get_soc_ref_by_chip_id(be_soc->ml_ctxt,
|
dp_mlo_get_soc_ref_by_chip_id(be_soc->ml_ctxt,
|
||||||
@@ -1280,8 +1282,6 @@ dp_rx_intrabss_ucast_check_be(qdf_nbuf_t nbuf,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
da_peer_id = dp_rx_peer_metadata_peer_id_get_be(params->dest_soc,
|
|
||||||
msdu_metadata->da_idx);
|
|
||||||
da_peer = dp_txrx_peer_get_ref_by_id(params->dest_soc, da_peer_id,
|
da_peer = dp_txrx_peer_get_ref_by_id(params->dest_soc, da_peer_id,
|
||||||
&txrx_ref_handle, DP_MOD_ID_RX);
|
&txrx_ref_handle, DP_MOD_ID_RX);
|
||||||
if (!da_peer)
|
if (!da_peer)
|
||||||
@@ -1308,6 +1308,12 @@ dp_rx_intrabss_ucast_check_be(qdf_nbuf_t nbuf,
|
|||||||
|
|
||||||
/* MLO specific Intra-BSS check */
|
/* MLO specific Intra-BSS check */
|
||||||
if (dp_rx_intrabss_fwd_mlo_allow(ta_peer, da_peer)) {
|
if (dp_rx_intrabss_fwd_mlo_allow(ta_peer, da_peer)) {
|
||||||
|
/* TA is legacy peer */
|
||||||
|
if (!ta_peer->mld_peer) {
|
||||||
|
params->dest_soc = da_peer->vdev->pdev->soc;
|
||||||
|
ret = true;
|
||||||
|
goto rel_da_peer;
|
||||||
|
}
|
||||||
/* index of soc in the array */
|
/* index of soc in the array */
|
||||||
soc_idx = dest_chip_id << DP_MLO_DEST_CHIP_ID_SHIFT;
|
soc_idx = dest_chip_id << DP_MLO_DEST_CHIP_ID_SHIFT;
|
||||||
if (!(be_vdev->partner_vdev_list[soc_idx][0] ==
|
if (!(be_vdev->partner_vdev_list[soc_idx][0] ==
|
||||||
|
@@ -27,6 +27,8 @@
|
|||||||
#define HAL_RX_DA_IDX_CHIP_ID_OFFSET 14
|
#define HAL_RX_DA_IDX_CHIP_ID_OFFSET 14
|
||||||
#define HAL_RX_DA_IDX_CHIP_ID_MASK 0x3
|
#define HAL_RX_DA_IDX_CHIP_ID_MASK 0x3
|
||||||
|
|
||||||
|
#define HAL_RX_DA_IDX_PEER_ID_MASK 0x3fff
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* macro to set the cookie into the rxdma ring entry
|
* macro to set the cookie into the rxdma ring entry
|
||||||
*/
|
*/
|
||||||
@@ -213,6 +215,10 @@
|
|||||||
#define HAL_RX_DEST_CHIP_ID_GET(msdu_metadata) \
|
#define HAL_RX_DEST_CHIP_ID_GET(msdu_metadata) \
|
||||||
(((msdu_metadata)->da_idx >> HAL_RX_DA_IDX_CHIP_ID_OFFSET) & \
|
(((msdu_metadata)->da_idx >> HAL_RX_DA_IDX_CHIP_ID_OFFSET) & \
|
||||||
HAL_RX_DA_IDX_CHIP_ID_MASK)
|
HAL_RX_DA_IDX_CHIP_ID_MASK)
|
||||||
|
|
||||||
|
#define HAL_RX_PEER_ID_GET(msdu_metadata) \
|
||||||
|
(((msdu_metadata)->da_idx) & HAL_RX_DA_IDX_PEER_ID_MASK)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* enum hal_be_rx_wbm_error_source: Indicates which module initiated the
|
* enum hal_be_rx_wbm_error_source: Indicates which module initiated the
|
||||||
* release of this buffer or descriptor
|
* release of this buffer or descriptor
|
||||||
|
Reference in New Issue
Block a user