Path: blob/main/sys/contrib/dev/athk/ath12k/dp_peer.h
283314 views
/* SPDX-License-Identifier: BSD-3-Clause-Clear */1/*2* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.3* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.4*/56#ifndef ATH12K_DP_PEER_H7#define ATH12K_DP_PEER_H89#include "dp_rx.h"1011#define ATH12K_DP_PEER_ID_INVALID 0x3FFF1213struct ppdu_user_delayba {14u16 sw_peer_id;15u32 info0;16u16 ru_end;17u16 ru_start;18u32 info1;19u32 rate_flags;20u32 resp_rate_flags;21};2223#define ATH12K_PEER_ML_ID_VALID BIT(13)2425struct ath12k_rx_peer_rate_stats {26u64 ht_mcs_count[HAL_RX_MAX_MCS_HT + 1];27u64 vht_mcs_count[HAL_RX_MAX_MCS_VHT + 1];28u64 he_mcs_count[HAL_RX_MAX_MCS_HE + 1];29u64 be_mcs_count[HAL_RX_MAX_MCS_BE + 1];30u64 nss_count[HAL_RX_MAX_NSS];31u64 bw_count[HAL_RX_BW_MAX];32u64 gi_count[HAL_RX_GI_MAX];33u64 legacy_count[HAL_RX_MAX_NUM_LEGACY_RATES];34u64 rx_rate[HAL_RX_BW_MAX][HAL_RX_GI_MAX][HAL_RX_MAX_NSS][HAL_RX_MAX_MCS_HT + 1];35};3637struct ath12k_rx_peer_stats {38u64 num_msdu;39u64 num_mpdu_fcs_ok;40u64 num_mpdu_fcs_err;41u64 tcp_msdu_count;42u64 udp_msdu_count;43u64 other_msdu_count;44u64 ampdu_msdu_count;45u64 non_ampdu_msdu_count;46u64 stbc_count;47u64 beamformed_count;48u64 coding_count[HAL_RX_SU_MU_CODING_MAX];49u64 tid_count[IEEE80211_NUM_TIDS + 1];50u64 pream_cnt[HAL_RX_PREAMBLE_MAX];51u64 reception_type[HAL_RX_RECEPTION_TYPE_MAX];52u64 rx_duration;53u64 dcm_count;54u64 ru_alloc_cnt[HAL_RX_RU_ALLOC_TYPE_MAX];55struct ath12k_rx_peer_rate_stats pkt_stats;56struct ath12k_rx_peer_rate_stats byte_stats;57};5859struct ath12k_wbm_tx_stats {60u64 wbm_tx_comp_stats[HAL_WBM_REL_HTT_TX_COMP_STATUS_MAX];61};6263struct ath12k_dp_peer_stats {64struct ath12k_rx_peer_stats *rx_stats;65struct ath12k_wbm_tx_stats *wbm_tx_stats;66};6768DECLARE_EWMA(avg_rssi, 10, 8)6970struct ath12k_dp_link_peer {71struct list_head list;72struct ieee80211_sta *sta;73struct ath12k_dp_peer *dp_peer;74int vdev_id;75u8 addr[ETH_ALEN];76int peer_id;77u16 ast_hash;78u8 pdev_idx;79u16 hw_peer_id;8081struct ppdu_user_delayba ppdu_stats_delayba;82bool delayba_flag;83bool is_authorized;84bool mlo;85/* protected by ab->data_lock */8687u16 ml_id;8889/* any other ML info common for all partners can be added90* here and would be same for all partner peers.91*/92u8 ml_addr[ETH_ALEN];9394/* To ensure only certain work related to dp is done once */95bool primary_link;9697/* for reference to ath12k_link_sta */98u8 link_id;99100/* peer addr based rhashtable list pointer */101struct rhash_head rhash_addr;102103u8 hw_link_id;104u32 rx_tid_active_bitmask;105106/* link stats */107struct rate_info txrate;108struct rate_info last_txrate;109u64 rx_duration;110u64 tx_duration;111u8 rssi_comb;112struct ewma_avg_rssi avg_rssi;113struct ath12k_dp_peer_stats peer_stats;114u32 tx_retry_failed;115u32 tx_retry_count;116};117118void ath12k_dp_link_peer_unmap_event(struct ath12k_base *ab, u16 peer_id);119void ath12k_dp_link_peer_map_event(struct ath12k_base *ab, u8 vdev_id, u16 peer_id,120u8 *mac_addr, u16 ast_hash, u16 hw_peer_id);121122struct ath12k_dp_peer {123struct list_head list;124bool is_mlo;125bool dp_setup_done;126127u8 ucast_keyidx;128u8 addr[ETH_ALEN];129130u8 mcast_keyidx;131bool ucast_ra_only;132int peer_id;133struct ieee80211_sta *sta;134135u8 hw_links[ATH12K_GROUP_MAX_RADIO];136137u16 sec_type_grp;138u16 sec_type;139140/* Info used in MMIC verification of * RX fragments */141struct crypto_shash *tfm_mmic;142struct ieee80211_key_conf *keys[WMI_MAX_KEY_INDEX + 1];143struct ath12k_dp_link_peer __rcu *link_peers[ATH12K_NUM_MAX_LINKS];144struct ath12k_reoq_buf reoq_bufs[IEEE80211_NUM_TIDS + 1];145struct ath12k_dp_rx_tid rx_tid[IEEE80211_NUM_TIDS + 1];146};147148struct ath12k_dp_link_peer *149ath12k_dp_link_peer_find_by_vdev_and_addr(struct ath12k_dp *dp,150int vdev_id, const u8 *addr);151struct ath12k_dp_link_peer *152ath12k_dp_link_peer_find_by_addr(struct ath12k_dp *dp, const u8 *addr);153bool ath12k_dp_link_peer_exist_by_vdev_id(struct ath12k_dp *dp, int vdev_id);154struct ath12k_dp_link_peer *155ath12k_dp_link_peer_find_by_ast(struct ath12k_dp *dp, int ast_hash);156struct ath12k_dp_link_peer *157ath12k_dp_link_peer_find_by_pdev_and_addr(struct ath12k_dp *dp, u8 pdev_idx,158const u8 *addr);159struct ath12k_link_sta *ath12k_dp_link_peer_to_link_sta(struct ath12k_base *ab,160struct ath12k_dp_link_peer *peer);161int ath12k_dp_link_peer_rhash_tbl_init(struct ath12k_dp *dp);162void ath12k_dp_link_peer_rhash_tbl_destroy(struct ath12k_dp *dp);163int ath12k_dp_link_peer_rhash_add(struct ath12k_dp *dp,164struct ath12k_dp_link_peer *peer);165void ath12k_dp_link_peer_rhash_delete(struct ath12k_dp *dp,166struct ath12k_dp_link_peer *peer);167int ath12k_dp_peer_create(struct ath12k_dp_hw *dp_hw, u8 *addr,168struct ath12k_dp_peer_create_params *params);169void ath12k_dp_peer_delete(struct ath12k_dp_hw *dp_hw, u8 *addr,170struct ieee80211_sta *sta);171struct ath12k_dp_peer *ath12k_dp_peer_find_by_addr(struct ath12k_dp_hw *dp_hw, u8 *addr);172struct ath12k_dp_peer *ath12k_dp_peer_find_by_addr_and_sta(struct ath12k_dp_hw *dp_hw,173u8 *addr,174struct ieee80211_sta *sta);175u16 ath12k_dp_peer_get_peerid_index(struct ath12k_dp *dp, u16 peer_id);176struct ath12k_dp_peer *ath12k_dp_peer_find_by_peerid(struct ath12k_pdev_dp *dp_pdev,177u16 peer_id);178struct ath12k_dp_link_peer *179ath12k_dp_link_peer_find_by_peerid(struct ath12k_pdev_dp *dp_pdev, u16 peer_id);180void ath12k_dp_link_peer_free(struct ath12k_dp_link_peer *peer);181#endif182183184