qcacmn: MLO 3 link simultaneous tx transmission

MLO 3 link simultaneous tx transmission.

Change-Id: I1f92e49a5ea634f99e354dd02737c74bae20c483
CRs-Fixed: 3634563
This commit is contained in:
Himanshu Batra
2023-09-12 14:50:50 +05:30
committed by Ravindra Konda
orang tua b69c6a113c
melakukan 7dbcea96f9
7 mengubah file dengan 88 tambahan dan 14 penghapusan

Melihat File

@@ -474,6 +474,7 @@ enum cdp_peer_type {
* @is_primary_link: set true for MLO primary link peer
* @primary_umac_id: primary umac_id
* @num_links: number of links in MLO
* @is_bridge_peer: flag to indicate if peer is bridge peer or not
*/
struct cdp_peer_setup_info {
uint8_t *mld_peer_mac;
@@ -481,6 +482,7 @@ struct cdp_peer_setup_info {
is_primary_link:1;
uint8_t primary_umac_id;
uint8_t num_links;
uint8_t is_bridge_peer;
};
/**

Melihat File

@@ -2523,6 +2523,16 @@ struct cdp_sawf_ops {
uint8_t start_or_stop, uint8_t *peer_mac,
uint16_t peer_id);
#endif
#ifdef WLAN_FEATURE_11BE_MLO_3_LINK_TX
uint16_t
(*get_peer_msduq)(struct net_device *netdev, uint8_t *dest_mac,
uint32_t dscp_pcp, bool pcp);
QDF_STATUS
(*sawf_3_link_peer_flow_count)(struct cdp_soc_t *hdl,
uint8_t *mac_addr,
uint16_t peer_id,
uint32_t mark_metadata);
#endif
};
#endif

Melihat File

@@ -451,4 +451,37 @@ cdp_swaf_peer_sla_configuration(ol_txrx_soc_handle soc, uint8_t *mac_addr,
return QDF_STATUS_E_FAILURE;
}
#endif
#ifdef WLAN_FEATURE_11BE_MLO_3_LINK_TX
static inline
uint16_t cdp_sawf_get_peer_msduq(ol_txrx_soc_handle soc,
struct net_device *netdev, uint8_t *dest_mac,
uint32_t dscp_pcp, bool pcp)
{
if (!soc || !soc->ops || !soc->ops->sawf_ops ||
!soc->ops->sawf_ops->get_peer_msduq) {
dp_cdp_debug("Invalid Instance");
QDF_BUG(0);
return false;
}
return soc->ops->sawf_ops->get_peer_msduq
(netdev, dest_mac, dscp_pcp, pcp);
}
static inline QDF_STATUS
cdp_sawf_3_link_peer_flow_count(ol_txrx_soc_handle soc, uint8_t *mac_addr,
uint16_t peer_id, uint32_t mark_metadata)
{
if (!soc || !soc->ops || !soc->ops->sawf_ops ||
!soc->ops->sawf_ops->sawf_3_link_peer_flow_count) {
dp_cdp_debug("Invalid Instance");
QDF_BUG(0);
return false;
}
return soc->ops->sawf_ops->sawf_3_link_peer_flow_count
(soc, mac_addr, peer_id, mark_metadata);
}
#endif
#endif /* _CDP_TXRX_SAWF_H_ */

Melihat File

@@ -973,45 +973,54 @@ bool dp_tx_mlo_is_mcast_primary_be(struct dp_soc *soc,
* @nbuf: skb buffer
* @msdu_info: msdu info
*
* Return: void
* Return: tid value in mark metadata
*/
void dp_sawf_config_be(struct dp_soc *soc, uint32_t *hal_tx_desc_cached,
uint16_t *fw_metadata, qdf_nbuf_t nbuf,
struct dp_tx_msdu_info_s *msdu_info)
uint8_t dp_sawf_config_be(struct dp_soc *soc, uint32_t *hal_tx_desc_cached,
uint16_t *fw_metadata, qdf_nbuf_t nbuf,
struct dp_tx_msdu_info_s *msdu_info)
{
uint8_t q_id = 0;
uint8_t tid = HTT_TX_EXT_TID_INVALID;
q_id = dp_sawf_queue_id_get(nbuf);
if (q_id == DP_SAWF_DEFAULT_Q_INVALID)
return;
msdu_info->tid = (q_id & (CDP_DATA_TID_MAX - 1));
return HTT_TX_EXT_TID_INVALID;
tid = (q_id & (CDP_DATA_TID_MAX - 1));
if (msdu_info)
msdu_info->tid = tid;
hal_tx_desc_set_hlos_tid(hal_tx_desc_cached,
(q_id & (CDP_DATA_TID_MAX - 1)));
if ((q_id >= DP_SAWF_DEFAULT_QUEUE_MIN) &&
(q_id < DP_SAWF_DEFAULT_QUEUE_MAX))
return;
return tid;
if (!wlan_cfg_get_sawf_config(soc->wlan_cfg_ctx))
return;
return tid;
dp_sawf_tcl_cmd(fw_metadata, nbuf);
if (fw_metadata)
dp_sawf_tcl_cmd(fw_metadata, nbuf);
hal_tx_desc_set_flow_override_enable(hal_tx_desc_cached,
DP_TX_FLOW_OVERRIDE_ENABLE);
hal_tx_desc_set_flow_override(hal_tx_desc_cached,
DP_TX_FLOW_OVERRIDE_GET(q_id));
hal_tx_desc_set_who_classify_info_sel(hal_tx_desc_cached,
DP_TX_WHO_CLFY_INF_SEL_GET(q_id));
return tid;
}
#else
static inline
void dp_sawf_config_be(struct dp_soc *soc, uint32_t *hal_tx_desc_cached,
uint16_t *fw_metadata, qdf_nbuf_t nbuf,
struct dp_tx_msdu_info_s *msdu_info)
uint8_t dp_sawf_config_be(struct dp_soc *soc, uint32_t *hal_tx_desc_cached,
uint16_t *fw_metadata, qdf_nbuf_t nbuf,
struct dp_tx_msdu_info_s *msdu_info)
{
return HTT_TX_EXT_TID_INVALID;
}
static inline
@@ -1848,6 +1857,7 @@ qdf_nbuf_t dp_tx_fast_send_be(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
void *hal_tx_desc;
uint8_t tid = HTT_TX_EXT_TID_INVALID;
uint8_t xmit_type = qdf_nbuf_get_vdev_xmit_type(nbuf);
uint8_t sawf_tid = HTT_TX_EXT_TID_INVALID;
if (qdf_unlikely(vdev_id >= MAX_VDEV_CNT))
return nbuf;
@@ -1930,6 +1940,13 @@ qdf_nbuf_t dp_tx_fast_send_be(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
hal_tx_desc_cached[5] = vdev->lmac_id << TCL_DATA_CMD_PMAC_ID_LSB;
hal_tx_desc_cached[5] |= vdev->vdev_id << TCL_DATA_CMD_VDEV_ID_LSB;
if (qdf_unlikely(dp_sawf_tag_valid_get(nbuf))) {
sawf_tid = dp_sawf_config_be(soc, hal_tx_desc_cached,
NULL, nbuf, NULL);
if (sawf_tid != HTT_TX_EXT_TID_INVALID)
tid = sawf_tid;
}
if (tid != HTT_TX_EXT_TID_INVALID) {
hal_tx_desc_cached[5] |= tid << TCL_DATA_CMD_HLOS_TID_LSB;
hal_tx_desc_cached[5] |= 1 << TCL_DATA_CMD_HLOS_TID_OVERWRITE_LSB;

Melihat File

@@ -5948,7 +5948,7 @@ QDF_STATUS dp_peer_mlo_setup(
/* associate mld and link peer */
dp_link_peer_add_mld_peer(peer, mld_peer);
dp_mld_peer_add_link_peer(mld_peer, peer);
dp_mld_peer_add_link_peer(mld_peer, peer, setup_info->is_bridge_peer);
mld_peer->txrx_peer->is_mld_peer = 1;
dp_peer_unref_delete(mld_peer, DP_MOD_ID_CDP);
@@ -12564,6 +12564,10 @@ static struct cdp_sawf_ops dp_ops_sawf = {
.swaf_peer_sla_configuration = dp_swaf_peer_sla_configuration,
.sawf_peer_flow_count = dp_sawf_peer_flow_count,
#endif
#ifdef WLAN_FEATURE_11BE_MLO_3_LINK_TX
.get_peer_msduq = dp_sawf_get_peer_msduq,
.sawf_3_link_peer_flow_count = dp_sawf_3_link_peer_flow_count,
#endif
};
#endif

Melihat File

@@ -1735,12 +1735,14 @@ void dp_mld_peer_deinit_link_peers_info(struct dp_peer *mld_peer)
* dp_mld_peer_add_link_peer() - add link peer info to mld peer
* @mld_peer: mld dp peer pointer
* @link_peer: link dp peer pointer
* @is_bridge_peer: flag to indicate if peer is bridge peer
*
* Return: None
*/
static inline
void dp_mld_peer_add_link_peer(struct dp_peer *mld_peer,
struct dp_peer *link_peer)
struct dp_peer *link_peer,
uint8_t is_bridge_peer)
{
int i;
struct dp_peer_link_info *link_peer_info;
@@ -1757,6 +1759,7 @@ void dp_mld_peer_add_link_peer(struct dp_peer *mld_peer,
link_peer_info->vdev_id = link_peer->vdev->vdev_id;
link_peer_info->chip_id =
dp_get_chip_id(link_peer->vdev->pdev->soc);
link_peer_info->is_bridge_peer = is_bridge_peer;
mld_peer->num_links++;
break;
}

Melihat File

@@ -4439,12 +4439,14 @@ struct dp_peer_mesh_latency_parameter {
* @vdev_id: Vdev ID for current link peer
* @is_valid: flag for link peer info valid or not
* @chip_id: chip id
* @is_bridge_peer: flag to indicate if peer is bridge peer
*/
struct dp_peer_link_info {
union dp_align_mac_addr mac_addr;
uint8_t vdev_id;
uint8_t is_valid;
uint8_t chip_id;
uint8_t is_bridge_peer;
};
/**
@@ -5066,6 +5068,9 @@ struct dp_peer {
struct dp_peer_link_info link_peers[DP_MAX_MLO_LINKS];
uint8_t num_links;
DP_MUTEX_TYPE link_peers_info_lock;
#ifdef WLAN_FEATURE_11BE_MLO_3_LINK_TX
uint32_t flow_cnt[CDP_DATA_TID_MAX];
#endif
#endif
#ifdef CONFIG_SAWF_DEF_QUEUES
struct dp_peer_sawf *sawf;