]> Git Repo - J-linux.git/blob - drivers/net/wireless/ath/ath12k/dp_rx.h
Merge tag 'vfs-6.13-rc7.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs
[J-linux.git] / 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-2024 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
15 struct ath12k_dp_rx_tid {
16         u8 tid;
17         u32 *vaddr;
18         dma_addr_t paddr;
19         u32 size;
20         u32 ba_win_sz;
21         bool active;
22
23         /* Info related to rx fragments */
24         u32 cur_sn;
25         u16 last_frag_no;
26         u16 rx_frag_bitmap;
27
28         struct sk_buff_head rx_frags;
29         struct hal_reo_dest_ring *dst_ring_desc;
30
31         /* Timer info related to fragments */
32         struct timer_list frag_timer;
33         struct ath12k_base *ab;
34 };
35
36 struct ath12k_dp_rx_reo_cache_flush_elem {
37         struct list_head list;
38         struct ath12k_dp_rx_tid data;
39         unsigned long ts;
40 };
41
42 struct ath12k_dp_rx_reo_cmd {
43         struct list_head list;
44         struct ath12k_dp_rx_tid data;
45         int cmd_num;
46         void (*handler)(struct ath12k_dp *dp, void *ctx,
47                         enum hal_reo_cmd_status status);
48 };
49
50 #define ATH12K_DP_RX_REO_DESC_FREE_THRES  64
51 #define ATH12K_DP_RX_REO_DESC_FREE_TIMEOUT_MS 1000
52
53 enum ath12k_dp_rx_decap_type {
54         DP_RX_DECAP_TYPE_RAW,
55         DP_RX_DECAP_TYPE_NATIVE_WIFI,
56         DP_RX_DECAP_TYPE_ETHERNET2_DIX,
57         DP_RX_DECAP_TYPE_8023,
58 };
59
60 struct ath12k_dp_rx_rfc1042_hdr {
61         u8 llc_dsap;
62         u8 llc_ssap;
63         u8 llc_ctrl;
64         u8 snap_oui[3];
65         __be16 snap_type;
66 } __packed;
67
68 static inline u32 ath12k_he_gi_to_nl80211_he_gi(u8 sgi)
69 {
70         u32 ret = 0;
71
72         switch (sgi) {
73         case RX_MSDU_START_SGI_0_8_US:
74                 ret = NL80211_RATE_INFO_HE_GI_0_8;
75                 break;
76         case RX_MSDU_START_SGI_1_6_US:
77                 ret = NL80211_RATE_INFO_HE_GI_1_6;
78                 break;
79         case RX_MSDU_START_SGI_3_2_US:
80                 ret = NL80211_RATE_INFO_HE_GI_3_2;
81                 break;
82         }
83
84         return ret;
85 }
86
87 int ath12k_dp_rx_ampdu_start(struct ath12k *ar,
88                              struct ieee80211_ampdu_params *params);
89 int ath12k_dp_rx_ampdu_stop(struct ath12k *ar,
90                             struct ieee80211_ampdu_params *params);
91 int ath12k_dp_rx_peer_pn_replay_config(struct ath12k_link_vif *arvif,
92                                        const u8 *peer_addr,
93                                        enum set_key_cmd key_cmd,
94                                        struct ieee80211_key_conf *key);
95 void ath12k_dp_rx_peer_tid_cleanup(struct ath12k *ar, struct ath12k_peer *peer);
96 void ath12k_dp_rx_peer_tid_delete(struct ath12k *ar,
97                                   struct ath12k_peer *peer, u8 tid);
98 int ath12k_dp_rx_peer_tid_setup(struct ath12k *ar, const u8 *peer_mac, int vdev_id,
99                                 u8 tid, u32 ba_win_sz, u16 ssn,
100                                 enum hal_pn_type pn_type);
101 void ath12k_dp_htt_htc_t2h_msg_handler(struct ath12k_base *ab,
102                                        struct sk_buff *skb);
103 int ath12k_dp_rx_pdev_reo_setup(struct ath12k_base *ab);
104 void ath12k_dp_rx_pdev_reo_cleanup(struct ath12k_base *ab);
105 int ath12k_dp_rx_htt_setup(struct ath12k_base *ab);
106 int ath12k_dp_rx_alloc(struct ath12k_base *ab);
107 void ath12k_dp_rx_free(struct ath12k_base *ab);
108 int ath12k_dp_rx_pdev_alloc(struct ath12k_base *ab, int pdev_idx);
109 void ath12k_dp_rx_pdev_free(struct ath12k_base *ab, int pdev_idx);
110 void ath12k_dp_rx_reo_cmd_list_cleanup(struct ath12k_base *ab);
111 void ath12k_dp_rx_process_reo_status(struct ath12k_base *ab);
112 int ath12k_dp_rx_process_wbm_err(struct ath12k_base *ab,
113                                  struct napi_struct *napi, int budget);
114 int ath12k_dp_rx_process_err(struct ath12k_base *ab, struct napi_struct *napi,
115                              int budget);
116 int ath12k_dp_rx_process(struct ath12k_base *ab, int mac_id,
117                          struct napi_struct *napi,
118                          int budget);
119 int ath12k_dp_rx_bufs_replenish(struct ath12k_base *ab,
120                                 struct dp_rxdma_ring *rx_ring,
121                                 struct list_head *used_list,
122                                 int req_entries);
123 int ath12k_dp_rx_pdev_mon_attach(struct ath12k *ar);
124 int ath12k_dp_rx_peer_frag_setup(struct ath12k *ar, const u8 *peer_mac, int vdev_id);
125
126 u8 ath12k_dp_rx_h_l3pad(struct ath12k_base *ab,
127                         struct hal_rx_desc *desc);
128 struct ath12k_peer *
129 ath12k_dp_rx_h_find_peer(struct ath12k_base *ab, struct sk_buff *msdu);
130 u8 ath12k_dp_rx_h_decap_type(struct ath12k_base *ab,
131                              struct hal_rx_desc *desc);
132 u32 ath12k_dp_rx_h_mpdu_err(struct ath12k_base *ab,
133                             struct hal_rx_desc *desc);
134 void ath12k_dp_rx_h_ppdu(struct ath12k *ar, struct hal_rx_desc *rx_desc,
135                          struct ieee80211_rx_status *rx_status);
136 struct ath12k_peer *
137 ath12k_dp_rx_h_find_peer(struct ath12k_base *ab, struct sk_buff *msdu);
138
139 int ath12k_dp_rxdma_ring_sel_config_qcn9274(struct ath12k_base *ab);
140 int ath12k_dp_rxdma_ring_sel_config_wcn7850(struct ath12k_base *ab);
141
142 int ath12k_dp_htt_tlv_iter(struct ath12k_base *ab, const void *ptr, size_t len,
143                            int (*iter)(struct ath12k_base *ar, u16 tag, u16 len,
144                                        const void *ptr, void *data),
145                            void *data);
146 #endif /* ATH12K_DP_RX_H */
This page took 0.036443 seconds and 4 git commands to generate.