qcacmn: Adding NAWDS support along with WDS-EXT

Adding NAWDS support along with WDS-EXT

Change-Id: I19d277fa575750d3194afc9ec9af3180a8c936ad
CRs-Fixed: 3406151
This commit is contained in:
Sai Rupesh Chevuru
2023-02-14 20:36:11 +05:30
committed by Madan Koyyalamudi
parent 8f0c611fec
commit 10826afad5
5 changed files with 55 additions and 6 deletions

View File

@@ -111,8 +111,18 @@ static inline void dp_wds_ext_peer_learn_be(struct dp_soc *soc,
qdf_atomic_test_and_set_bit(WDS_EXT_PEER_INIT_BIT, qdf_atomic_test_and_set_bit(WDS_EXT_PEER_INIT_BIT,
&ta_txrx_peer->wds_ext.init); &ta_txrx_peer->wds_ext.init);
ta_base_peer = dp_peer_get_ref_by_id(soc, ta_txrx_peer->peer_id, if (qdf_unlikely(ta_txrx_peer->nawds_enabled &&
ta_txrx_peer->mld_peer)) {
ta_base_peer = dp_get_primary_link_peer_by_id(
soc,
ta_txrx_peer->peer_id,
DP_MOD_ID_RX); DP_MOD_ID_RX);
} else {
ta_base_peer = dp_peer_get_ref_by_id(
soc,
ta_txrx_peer->peer_id,
DP_MOD_ID_RX);
}
if (!ta_base_peer) if (!ta_base_peer)
return; return;

View File

@@ -749,6 +749,16 @@ dp_tx_mlo_mcast_pkt_send(struct dp_vdev_be *be_vdev,
nbuf_clone = nbuf; nbuf_clone = nbuf;
} }
/* NAWDS clients will accepts on 4 addr format MCAST packets
* This will ensure to send packets in 4 addr format to NAWDS clients.
*/
if (qdf_unlikely(ptnr_vdev->nawds_enabled)) {
qdf_mem_zero(&msdu_info, sizeof(msdu_info));
dp_tx_get_queue(ptnr_vdev, nbuf_clone, &msdu_info.tx_queue);
dp_tx_nawds_handler(ptnr_vdev->pdev->soc, ptnr_vdev,
&msdu_info, nbuf_clone, DP_INVALID_PEER);
}
qdf_mem_zero(&msdu_info, sizeof(msdu_info)); qdf_mem_zero(&msdu_info, sizeof(msdu_info));
dp_tx_get_queue(ptnr_vdev, nbuf_clone, &msdu_info.tx_queue); dp_tx_get_queue(ptnr_vdev, nbuf_clone, &msdu_info.tx_queue);
msdu_info.gsn = be_vdev->seq_num; msdu_info.gsn = be_vdev->seq_num;

View File

@@ -67,6 +67,27 @@ struct ast_del_ctxt {
int del_count; int del_count;
}; };
#ifdef QCA_SUPPORT_WDS_EXTENDED
/**
* dp_peer_is_wds_ext_peer() - peer is WDS_EXT peer
*
* @peer: DP peer context
*
* This API checks whether the peer is WDS_EXT peer or not
*
* Return: true in the wds_ext peer else flase
*/
static inline bool dp_peer_is_wds_ext_peer(struct dp_txrx_peer *peer)
{
return qdf_atomic_test_bit(WDS_EXT_PEER_INIT_BIT, &peer->wds_ext.init);
}
#else
static inline bool dp_peer_is_wds_ext_peer(struct dp_txrx_peer *peer)
{
return false;
}
#endif
typedef void dp_peer_iter_func(struct dp_soc *soc, struct dp_peer *peer, typedef void dp_peer_iter_func(struct dp_soc *soc, struct dp_peer *peer,
void *arg); void *arg);
/** /**

View File

@@ -64,9 +64,6 @@
/* disable TQM_BYPASS */ /* disable TQM_BYPASS */
#define TQM_BYPASS_WAR 0 #define TQM_BYPASS_WAR 0
/* invalid peer id for reinject*/
#define DP_INVALID_PEER 0XFFFE
#define DP_RETRY_COUNT 7 #define DP_RETRY_COUNT 7
#ifdef WLAN_PEER_JITTER #ifdef WLAN_PEER_JITTER
#define DP_AVG_JITTER_WEIGHT_DENOM 4 #define DP_AVG_JITTER_WEIGHT_DENOM 4
@@ -3154,7 +3151,6 @@ dp_tx_per_pkt_vdev_id_check(qdf_nbuf_t nbuf, struct dp_vdev *vdev)
* Return: none * Return: none
*/ */
static inline
void dp_tx_nawds_handler(struct dp_soc *soc, struct dp_vdev *vdev, void dp_tx_nawds_handler(struct dp_soc *soc, struct dp_vdev *vdev,
struct dp_tx_msdu_info_s *msdu_info, struct dp_tx_msdu_info_s *msdu_info,
qdf_nbuf_t nbuf, uint16_t sa_peer_id) qdf_nbuf_t nbuf, uint16_t sa_peer_id)
@@ -3182,6 +3178,12 @@ void dp_tx_nawds_handler(struct dp_soc *soc, struct dp_vdev *vdev,
if (!dp_peer_is_primary_link_peer(peer)) if (!dp_peer_is_primary_link_peer(peer))
continue; continue;
/* In the case of wds ext peer mcast traffic will be
* sent as part of VLAN interface
*/
if (dp_peer_is_wds_ext_peer(txrx_peer))
continue;
/* Multicast packets needs to be /* Multicast packets needs to be
* dropped in case of intra bss forwarding * dropped in case of intra bss forwarding
*/ */

View File

@@ -41,6 +41,12 @@
#define DP_TX_MAX_NUM_FRAGS 6 #define DP_TX_MAX_NUM_FRAGS 6
/* invalid peer id for reinject*/
#define DP_INVALID_PEER 0XFFFE
void dp_tx_nawds_handler(struct dp_soc *soc, struct dp_vdev *vdev,
struct dp_tx_msdu_info_s *msdu_info,
qdf_nbuf_t nbuf, uint16_t sa_peer_id);
/* /*
* DP_TX_DESC_FLAG_FRAG flags should always be defined to 0x1 * DP_TX_DESC_FLAG_FRAG flags should always be defined to 0x1
* please do not change this flag's definition * please do not change this flag's definition