qcacmn: Intra-BSS MLO changes for WKK v2
Use destination chip and pmac IDs from TLV. Build flag for HW assist feature is not enabled yet, so code is not exercised. Change-Id: Ia9175d6597a7a2780f451d99a9f8ece7a16049e5 CRs-Fixed: 3262344
This commit is contained in:

committed by
Madan Koyyalamudi

parent
bbfcdad485
commit
eddc343b43
@@ -149,7 +149,7 @@ dp_rx_set_msdu_lmac_id(qdf_nbuf_t nbuf, uint32_t peer_mdata)
|
||||
* dp_rx_process_be() - Brain of the Rx processing functionality
|
||||
* Called from the bottom half (tasklet/NET_RX_SOFTIRQ)
|
||||
* @int_ctx: per interrupt context
|
||||
* @hal_ring: opaque pointer to the HAL Rx Ring, which will be serviced
|
||||
* @hal_ring_hdl: opaque pointer to the HAL Rx Ring, which will be serviced
|
||||
* @reo_ring_num: ring number (0, 1, 2 or 3) of the reo ring.
|
||||
* @quota: No. of units (packets) that can be serviced in one shot.
|
||||
*
|
||||
@@ -1329,13 +1329,6 @@ static inline bool
|
||||
dp_rx_intrabss_fwd_mlo_allow(struct dp_txrx_peer *ta_peer,
|
||||
struct dp_txrx_peer *da_peer)
|
||||
{
|
||||
/* one of TA/DA peer should belong to MLO connection peer,
|
||||
* only MLD peer type is as expected
|
||||
*/
|
||||
if (!IS_MLO_DP_MLD_TXRX_PEER(ta_peer) &&
|
||||
!IS_MLO_DP_MLD_TXRX_PEER(da_peer))
|
||||
return false;
|
||||
|
||||
/* TA peer and DA peer's vdev should be partner MLO vdevs */
|
||||
if (dp_peer_find_mac_addr_cmp(&ta_peer->vdev->mld_mac_addr,
|
||||
&da_peer->vdev->mld_mac_addr))
|
||||
@@ -1355,38 +1348,51 @@ dp_rx_intrabss_fwd_mlo_allow(struct dp_txrx_peer *ta_peer,
|
||||
#ifdef INTRA_BSS_FWD_OFFLOAD
|
||||
/**
|
||||
* dp_rx_intrabss_ucast_check_be() - Check if intrabss is allowed
|
||||
for unicast frame
|
||||
* @soc: SOC handle
|
||||
* for unicast frame
|
||||
* @nbuf: RX packet buffer
|
||||
* @ta_peer: transmitter DP peer handle
|
||||
* @rx_tlv_hdr: Rx TLV header
|
||||
* @msdu_metadata: MSDU meta data info
|
||||
* @p_tx_vdev_id: get vdev id for Intra-BSS TX
|
||||
* @params: params to be filled in
|
||||
*
|
||||
* Return: true - intrabss allowed
|
||||
false - not allow
|
||||
* false - not allow
|
||||
*/
|
||||
static bool
|
||||
dp_rx_intrabss_ucast_check_be(qdf_nbuf_t nbuf,
|
||||
struct dp_txrx_peer *ta_peer,
|
||||
uint8_t *rx_tlv_hdr,
|
||||
struct hal_rx_msdu_metadata *msdu_metadata,
|
||||
struct dp_be_intrabss_params *params)
|
||||
{
|
||||
uint16_t da_peer_id;
|
||||
struct dp_txrx_peer *da_peer;
|
||||
dp_txrx_ref_handle txrx_ref_handle = NULL;
|
||||
uint8_t dest_chip_id, dest_chip_pmac_id;
|
||||
struct dp_vdev_be *be_vdev =
|
||||
dp_get_be_vdev_from_dp_vdev(ta_peer->vdev);
|
||||
struct dp_soc_be *be_soc =
|
||||
dp_get_be_soc_from_dp_soc(params->dest_soc);
|
||||
|
||||
if (!qdf_nbuf_is_intra_bss(nbuf))
|
||||
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,
|
||||
&txrx_ref_handle, DP_MOD_ID_RX);
|
||||
if (!da_peer)
|
||||
hal_rx_tlv_get_dest_chip_pmac_id(rx_tlv_hdr,
|
||||
&dest_chip_id,
|
||||
&dest_chip_pmac_id);
|
||||
qdf_assert_always(dest_chip_id <= (DP_MLO_MAX_DEST_CHIP_ID - 1));
|
||||
|
||||
if (dest_chip_id == be_soc->mlo_chip_id) {
|
||||
/* TODO: adding to self list is better */
|
||||
params->tx_vdev_id = ta_peer->vdev->vdev_id;
|
||||
return true;
|
||||
}
|
||||
|
||||
params->dest_soc =
|
||||
dp_mlo_get_soc_ref_by_chip_id(be_soc->ml_ctxt,
|
||||
dest_chip_id);
|
||||
if (!params->dest_soc)
|
||||
return false;
|
||||
params->tx_vdev_id = da_peer->vdev->vdev_id;
|
||||
dp_txrx_peer_unref_delete(txrx_ref_handle, DP_MOD_ID_RX);
|
||||
|
||||
params->tx_vdev_id =
|
||||
be_vdev->partner_vdev_list[dest_chip_id][dest_chip_pmac_id];
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1395,6 +1401,7 @@ dp_rx_intrabss_ucast_check_be(qdf_nbuf_t nbuf,
|
||||
static bool
|
||||
dp_rx_intrabss_ucast_check_be(qdf_nbuf_t nbuf,
|
||||
struct dp_txrx_peer *ta_peer,
|
||||
uint8_t *rx_tlv_hdr,
|
||||
struct hal_rx_msdu_metadata *msdu_metadata,
|
||||
struct dp_be_intrabss_params *params)
|
||||
{
|
||||
@@ -1492,6 +1499,7 @@ rel_da_peer:
|
||||
static bool
|
||||
dp_rx_intrabss_ucast_check_be(qdf_nbuf_t nbuf,
|
||||
struct dp_txrx_peer *ta_peer,
|
||||
uint8_t *rx_tlv_hdr,
|
||||
struct hal_rx_msdu_metadata *msdu_metadata,
|
||||
struct dp_be_intrabss_params *params)
|
||||
{
|
||||
@@ -1670,7 +1678,7 @@ bool dp_rx_intrabss_fwd_be(struct dp_soc *soc, struct dp_txrx_peer *ta_peer,
|
||||
return true;
|
||||
|
||||
params.dest_soc = soc;
|
||||
if (dp_rx_intrabss_ucast_check_be(nbuf, ta_peer,
|
||||
if (dp_rx_intrabss_ucast_check_be(nbuf, ta_peer, rx_tlv_hdr,
|
||||
&msdu_metadata, ¶ms)) {
|
||||
ret = dp_rx_intrabss_ucast_fwd(params.dest_soc, ta_peer,
|
||||
params.tx_vdev_id,
|
||||
|
@@ -21,6 +21,7 @@
|
||||
#define _HAL_BE_RX_H_
|
||||
|
||||
#include "hal_be_hw_headers.h"
|
||||
#include "hal_be_rx_tlv.h"
|
||||
#include "hal_rx.h"
|
||||
#include <wbm_release_ring_rx.h>
|
||||
|
||||
@@ -224,6 +225,14 @@
|
||||
#define HAL_RX_PEER_ID_GET(msdu_metadata) \
|
||||
(((msdu_metadata)->da_idx) & HAL_RX_DA_IDX_PEER_ID_MASK)
|
||||
|
||||
#define HAL_RX_TLV_DEST_CHIP_ID_GET(_rx_pkt_tlv) \
|
||||
HAL_RX_MSDU_END(_rx_pkt_tlv).dest_chip_id
|
||||
|
||||
#ifdef INTRA_BSS_FWD_OFFLOAD
|
||||
#define HAL_RX_TLV_DEST_CHIP_PMAC_ID_GET(_rx_pkt_tlv) \
|
||||
HAL_RX_MSDU_END(_rx_pkt_tlv).dest_chip_pmac_id
|
||||
#endif
|
||||
|
||||
/**
|
||||
* enum hal_be_rx_wbm_error_source: Indicates which module initiated the
|
||||
* release of this buffer or descriptor
|
||||
@@ -509,4 +518,24 @@ static inline uint8_t hal_rx_sw_exception_get_be(void *reo_desc)
|
||||
{
|
||||
return HAL_RX_GET(reo_desc, REO_DESTINATION_RING, SW_EXCEPTION);
|
||||
}
|
||||
|
||||
#ifdef INTRA_BSS_FWD_OFFLOAD
|
||||
/**
|
||||
* hal_rx_tlv_get_dest_chip_pmac_id() - Get destination chip and PMAC ID
|
||||
* @buf: Rx TLV buffer
|
||||
* @d_chip_id: chip id being filled in
|
||||
* @d_chip_pmac_id: chip pmac id being filled in
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static inline void
|
||||
hal_rx_tlv_get_dest_chip_pmac_id(uint8_t *buf,
|
||||
uint8_t *d_chip_id, uint8_t *d_chip_pmac_id)
|
||||
{
|
||||
struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
|
||||
|
||||
*d_chip_id = HAL_RX_TLV_DEST_CHIP_ID_GET(rx_pkt_tlvs);
|
||||
*d_chip_pmac_id = HAL_RX_TLV_DEST_CHIP_PMAC_ID_GET(rx_pkt_tlvs);
|
||||
}
|
||||
#endif /* INTRA_BSS_FWD_OFFLOAD */
|
||||
#endif /* _HAL_BE_RX_H_ */
|
||||
|
@@ -85,7 +85,8 @@ struct rx_msdu_end_compact {
|
||||
wds_learning_event : 1,
|
||||
wds_roaming_event : 1,
|
||||
wds_keep_alive_event : 1,
|
||||
reserved_9b : 9;
|
||||
dest_chip_pmac_id : 1,
|
||||
reserved_9b : 8;
|
||||
uint32_t msdu_length : 14,
|
||||
stbc : 1,
|
||||
ipsec_esp : 1,
|
||||
@@ -240,7 +241,8 @@ struct rx_msdu_end_compact {
|
||||
aggregation_count : 8;
|
||||
uint32_t reserved_8a : 24,
|
||||
key_id_octet : 8;
|
||||
uint32_t reserved_9b : 9,
|
||||
uint32_t reserved_9b : 8,
|
||||
dest_chip_pmac_id : 1,
|
||||
wds_keep_alive_event : 1,
|
||||
wds_roaming_event : 1,
|
||||
wds_learning_event : 1,
|
||||
|
Reference in New Issue
Block a user