From 1ba9e267e0775dbc3daba856e5181f716b34f3f0 Mon Sep 17 00:00:00 2001 From: Amit Mehta Date: Wed, 19 Apr 2023 23:01:12 -0700 Subject: [PATCH] qcacmn: Add change to get link ID from peer event Add change to get link ID from peer event Change-Id: Iab066f702d232d3682729b57c5a3d4c7da2672ba CRs-Fixed: 3442914 --- dp/wifi3.0/dp_htt.c | 35 +++++++++++++++++++++++++++++++++++ dp/wifi3.0/dp_peer.c | 28 ++++++++++++++++++++++++++++ dp/wifi3.0/dp_peer.h | 13 +++++++++++++ dp/wifi3.0/dp_types.h | 18 ++++++++++++++++++ 4 files changed, 94 insertions(+) diff --git a/dp/wifi3.0/dp_htt.c b/dp/wifi3.0/dp_htt.c index 63e5a5ec7c..bc35cbf936 100644 --- a/dp/wifi3.0/dp_htt.c +++ b/dp/wifi3.0/dp_htt.c @@ -3654,6 +3654,36 @@ static void dp_ipa_rx_cce_super_rule_setup_done_handler(struct htt_soc *soc, { } #endif +#if defined(WLAN_FEATURE_11BE_MLO) && defined(DP_MLO_LINK_STATS_SUPPORT) +static inline void +dp_htt_peer_ext_evt(struct htt_soc *soc, uint32_t *msg_word) +{ + struct dp_peer_ext_evt_info info; + uint8_t mac_addr_deswizzle_buf[QDF_MAC_ADDR_SIZE]; + + info.peer_id = HTT_RX_PEER_EXTENDED_PEER_ID_GET(*msg_word); + info.vdev_id = HTT_RX_PEER_EXTENDED_VDEV_ID_GET(*msg_word); + info.link_id = + HTT_RX_PEER_EXTENDED_LOGICAL_LINK_ID_GET(*(msg_word + 2)); + info.link_id_valid = + HTT_RX_PEER_EXTENDED_LOGICAL_LINK_ID_VALID_GET(*(msg_word + 2)); + + info.peer_mac_addr = + htt_t2h_mac_addr_deswizzle((u_int8_t *)(msg_word + 1), + &mac_addr_deswizzle_buf[0]); + + dp_htt_info("peer id %u, vdev id %u, link id %u, valid %u,peer_mac " QDF_MAC_ADDR_FMT, + info.peer_id, info.vdev_id, info.link_id, + info.link_id_valid, QDF_MAC_ADDR_REF(info.peer_mac_addr)); + + dp_rx_peer_ext_evt(soc->dp_soc, &info); +} +#else +static inline void +dp_htt_peer_ext_evt(struct htt_soc *soc, uint32_t *msg_word) +{ +} +#endif void dp_htt_t2h_msg_handler(void *context, HTC_PACKET *pkt) { @@ -4109,6 +4139,11 @@ void dp_htt_t2h_msg_handler(void *context, HTC_PACKET *pkt) dp_ipa_rx_cce_super_rule_setup_done_handler(soc, msg_word); break; } + case HTT_T2H_MSG_TYPE_PEER_EXTENDED_EVENT: + { + dp_htt_peer_ext_evt(soc, msg_word); + break; + } default: break; }; diff --git a/dp/wifi3.0/dp_peer.c b/dp/wifi3.0/dp_peer.c index 03a1f2f022..fba2504c1e 100644 --- a/dp/wifi3.0/dp_peer.c +++ b/dp/wifi3.0/dp_peer.c @@ -3021,6 +3021,34 @@ dp_rx_peer_unmap_handler(struct dp_soc *soc, uint16_t peer_id, dp_peer_unref_delete(peer, DP_MOD_ID_CONFIG); } +#if defined(WLAN_FEATURE_11BE_MLO) && defined(DP_MLO_LINK_STATS_SUPPORT) +QDF_STATUS +dp_rx_peer_ext_evt(struct dp_soc *soc, struct dp_peer_ext_evt_info *info) +{ + struct dp_peer *peer = NULL; + struct cdp_peer_info peer_info = { 0 }; + + QDF_ASSERT(info->peer_id <= soc->max_peer_id); + + DP_PEER_INFO_PARAMS_INIT(&peer_info, info->vdev_id, info->peer_mac_addr, + false, CDP_LINK_PEER_TYPE); + peer = dp_peer_hash_find_wrapper(soc, &peer_info, DP_MOD_ID_CONFIG); + + if (!peer) { + dp_err("peer NULL, id %u, MAC " QDF_MAC_ADDR_FMT ", vdev_id %u", + info->peer_id, QDF_MAC_ADDR_REF(info->peer_mac_addr), + info->vdev_id); + + return QDF_STATUS_E_FAILURE; + } + + peer->link_id = info->link_id; + peer->link_id_valid = info->link_id_valid; + dp_peer_unref_delete(peer, DP_MOD_ID_CONFIG); + + return QDF_STATUS_SUCCESS; +} +#endif #ifdef WLAN_FEATURE_11BE_MLO void dp_rx_mlo_peer_unmap_handler(struct dp_soc *soc, uint16_t peer_id) { diff --git a/dp/wifi3.0/dp_peer.h b/dp/wifi3.0/dp_peer.h index 51fd500aad..d4e213c51e 100644 --- a/dp/wifi3.0/dp_peer.h +++ b/dp/wifi3.0/dp_peer.h @@ -713,6 +713,19 @@ void dp_rx_peer_unmap_handler(struct dp_soc *soc, uint16_t peer_id, uint8_t vdev_id, uint8_t *peer_mac_addr, uint8_t is_wds, uint32_t free_wds_count); +#if defined(WLAN_FEATURE_11BE_MLO) && defined(DP_MLO_LINK_STATS_SUPPORT) +/** + * dp_rx_peer_ext_evt() - handle peer extended event from firmware + * @soc: DP soc handle + * @info: extended evt info + * + * + * Return: QDF_STATUS + */ + +QDF_STATUS +dp_rx_peer_ext_evt(struct dp_soc *soc, struct dp_peer_ext_evt_info *info); +#endif #ifdef DP_RX_UDP_OVER_PEER_ROAM /** * dp_rx_reset_roaming_peer() - Reset the roamed peer in vdev diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index 87f293667d..3c9b8d4275 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -4165,6 +4165,24 @@ struct dp_ast_flow_override_info { uint8_t tid_valid_hi_pri_mask; }; +#if defined(WLAN_FEATURE_11BE_MLO) && defined(DP_MLO_LINK_STATS_SUPPORT) +/** + * struct dp_peer_ext_evt_info - peer extended event info + * @peer_id: peer_id from firmware + * @vdev_id: vdev ID + * @link_id: Link ID + * @link_id_valid: link_id_valid + * @peer_mac_addr: mac address of the peer + */ +struct dp_peer_ext_evt_info { + uint16_t peer_id; + uint8_t vdev_id; + uint8_t link_id; + bool link_id_valid; + uint8_t *peer_mac_addr; +}; +#endif + /** * struct dp_peer_ast_params - ast parameters for a msdu flow-queue * @ast_idx: ast index populated by FW