FILE
dp_rx.h
File preview with syntax highlighting.
linux-6.19.14/drivers/net/wireless/ath/ath12k/dp_rx.h
1/* SPDX-License-Identifier: BSD-3-Clause-Clear */ 2/* 3 * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved. 4 * Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved. 5 */ 6#ifndef ATH12K_DP_RX_H 7#define ATH12K_DP_RX_H 8 9#include "core.h" 10#include "rx_desc.h" 11#include "debug.h" 12 13#define DP_MAX_NWIFI_HDR_LEN 30 14 15struct ath12k_dp_rx_tid { 16 u8 tid; 17 u32 ba_win_sz; 18 bool active; 19 struct ath12k_reoq_buf qbuf; 20 21 /* Info related to rx fragments */ 22 u32 cur_sn; 23 u16 last_frag_no; 24 u16 rx_frag_bitmap; 25 26 struct sk_buff_head rx_frags; 27 struct hal_reo_dest_ring *dst_ring_desc; 28 29 /* Timer info related to fragments */ 30 struct timer_list frag_timer; 31 struct ath12k_base *ab; 32}; 33 34struct ath12k_dp_rx_tid_rxq { 35 u8 tid; 36 bool active; 37 struct ath12k_reoq_buf qbuf; 38}; 39 40struct ath12k_dp_rx_reo_cache_flush_elem { 41 struct list_head list; 42 struct ath12k_dp_rx_tid_rxq data; 43 unsigned long ts; 44}; 45 46struct dp_reo_update_rx_queue_elem { 47 struct list_head list; 48 struct ath12k_dp_rx_tid_rxq rx_tid; 49 int peer_id; 50 bool is_ml_peer; 51 u16 ml_peer_id; 52}; 53 54struct ath12k_dp_rx_reo_cmd { 55 struct list_head list; 56 struct ath12k_dp_rx_tid_rxq data; 57 int cmd_num; 58 void (*handler)(struct ath12k_dp *dp, void *ctx, 59 enum hal_reo_cmd_status status); 60}; 61 62#define ATH12K_DP_RX_REO_DESC_FREE_THRES 64 63#define ATH12K_DP_RX_REO_DESC_FREE_TIMEOUT_MS 1000 64 65enum ath12k_dp_rx_decap_type { 66 DP_RX_DECAP_TYPE_RAW, 67 DP_RX_DECAP_TYPE_NATIVE_WIFI, 68 DP_RX_DECAP_TYPE_ETHERNET2_DIX, 69 DP_RX_DECAP_TYPE_8023, 70}; 71 72struct ath12k_dp_rx_rfc1042_hdr { 73 u8 llc_dsap; 74 u8 llc_ssap; 75 u8 llc_ctrl; 76 u8 snap_oui[3]; 77 __be16 snap_type; 78} __packed; 79 80struct ath12k_dp_rx_info { 81 struct ieee80211_rx_status *rx_status; 82 u32 phy_meta_data; 83 u16 peer_id; 84 u8 decap_type; 85 u8 pkt_type; 86 u8 sgi; 87 u8 rate_mcs; 88 u8 bw; 89 u8 nss; 90 u8 addr2[ETH_ALEN]; 91 u8 tid; 92 bool ip_csum_fail; 93 bool l4_csum_fail; 94 bool is_mcbc; 95 bool addr2_present; 96}; 97 98static inline u32 ath12k_he_gi_to_nl80211_he_gi(u8 sgi) 99{ 100 u32 ret = 0; 101 102 switch (sgi) { 103 case RX_MSDU_START_SGI_0_8_US: 104 ret = NL80211_RATE_INFO_HE_GI_0_8; 105 break; 106 case RX_MSDU_START_SGI_1_6_US: 107 ret = NL80211_RATE_INFO_HE_GI_1_6; 108 break; 109 case RX_MSDU_START_SGI_3_2_US: 110 ret = NL80211_RATE_INFO_HE_GI_3_2; 111 break; 112 default: 113 ret = NL80211_RATE_INFO_HE_GI_0_8; 114 break; 115 } 116 117 return ret; 118} 119 120int ath12k_dp_rx_ampdu_start(struct ath12k *ar, 121 struct ieee80211_ampdu_params *params, 122 u8 link_id); 123int ath12k_dp_rx_ampdu_stop(struct ath12k *ar, 124 struct ieee80211_ampdu_params *params, 125 u8 link_id); 126int ath12k_dp_rx_peer_pn_replay_config(struct ath12k_link_vif *arvif, 127 const u8 *peer_addr, 128 enum set_key_cmd key_cmd, 129 struct ieee80211_key_conf *key); 130void ath12k_dp_rx_peer_tid_cleanup(struct ath12k *ar, struct ath12k_peer *peer); 131void ath12k_dp_rx_peer_tid_delete(struct ath12k *ar, 132 struct ath12k_peer *peer, u8 tid); 133int ath12k_dp_rx_peer_tid_setup(struct ath12k *ar, const u8 *peer_mac, int vdev_id, 134 u8 tid, u32 ba_win_sz, u16 ssn, 135 enum hal_pn_type pn_type); 136void ath12k_dp_htt_htc_t2h_msg_handler(struct ath12k_base *ab, 137 struct sk_buff *skb); 138int ath12k_dp_rx_pdev_reo_setup(struct ath12k_base *ab); 139void ath12k_dp_rx_pdev_reo_cleanup(struct ath12k_base *ab); 140int ath12k_dp_rx_htt_setup(struct ath12k_base *ab); 141int ath12k_dp_rx_alloc(struct ath12k_base *ab); 142void ath12k_dp_rx_free(struct ath12k_base *ab); 143int ath12k_dp_rx_pdev_alloc(struct ath12k_base *ab, int pdev_idx); 144void ath12k_dp_rx_pdev_free(struct ath12k_base *ab, int pdev_idx); 145void ath12k_dp_rx_reo_cmd_list_cleanup(struct ath12k_base *ab); 146void ath12k_dp_rx_process_reo_status(struct ath12k_base *ab); 147int ath12k_dp_rx_process_wbm_err(struct ath12k_base *ab, 148 struct napi_struct *napi, int budget); 149int ath12k_dp_rx_process_err(struct ath12k_base *ab, struct napi_struct *napi, 150 int budget); 151int ath12k_dp_rx_process(struct ath12k_base *ab, int mac_id, 152 struct napi_struct *napi, 153 int budget); 154int ath12k_dp_rx_bufs_replenish(struct ath12k_base *ab, 155 struct dp_rxdma_ring *rx_ring, 156 struct list_head *used_list, 157 int req_entries); 158int ath12k_dp_rx_pdev_mon_attach(struct ath12k *ar); 159int ath12k_dp_rx_peer_frag_setup(struct ath12k *ar, const u8 *peer_mac, int vdev_id); 160 161u8 ath12k_dp_rx_h_l3pad(struct ath12k_base *ab, 162 struct hal_rx_desc *desc); 163struct ath12k_peer * 164ath12k_dp_rx_h_find_peer(struct ath12k_base *ab, struct sk_buff *msdu, 165 struct ath12k_dp_rx_info *rx_info); 166u8 ath12k_dp_rx_h_decap_type(struct ath12k_base *ab, 167 struct hal_rx_desc *desc); 168u32 ath12k_dp_rx_h_mpdu_err(struct ath12k_base *ab, 169 struct hal_rx_desc *desc); 170void ath12k_dp_rx_h_ppdu(struct ath12k *ar, struct ath12k_dp_rx_info *rx_info); 171int ath12k_dp_rxdma_ring_sel_config_qcn9274(struct ath12k_base *ab); 172int ath12k_dp_rxdma_ring_sel_config_wcn7850(struct ath12k_base *ab); 173 174int ath12k_dp_htt_tlv_iter(struct ath12k_base *ab, const void *ptr, size_t len, 175 int (*iter)(struct ath12k_base *ar, u16 tag, u16 len, 176 const void *ptr, void *data), 177 void *data); 178void ath12k_dp_rx_h_fetch_info(struct ath12k_base *ab, struct hal_rx_desc *rx_desc, 179 struct ath12k_dp_rx_info *rx_info); 180 181int ath12k_dp_rx_crypto_mic_len(struct ath12k *ar, enum hal_encrypt_type enctype); 182u32 ath12k_dp_rxdesc_get_ppduid(struct ath12k_base *ab, 183 struct hal_rx_desc *rx_desc); 184bool ath12k_dp_rxdesc_mpdu_valid(struct ath12k_base *ab, 185 struct hal_rx_desc *rx_desc); 186int ath12k_dp_rx_link_desc_return(struct ath12k_base *ab, 187 struct ath12k_buffer_addr *buf_addr_info, 188 enum hal_wbm_rel_bm_act action); 189bool ath12k_dp_rxdesc_mpdu_valid(struct ath12k_base *ab, 190 struct hal_rx_desc *rx_desc); 191#endif /* ATH12K_DP_RX_H */
~/
Read-only file preview.