qcacmn: MLO 3 link simultaneous tx transmission
MLO 3 link simultaneous tx transmission. Change-Id: I1f92e49a5ea634f99e354dd02737c74bae20c483 CRs-Fixed: 3634563
This commit is contained in:

committed by
Ravindra Konda

orang tua
b69c6a113c
melakukan
7dbcea96f9
@@ -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;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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_ */
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user