1 /* SPDX-License-Identifier: BSD-3-Clause-Clear */
3 * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
4 * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
13 #define DP_MAX_NWIFI_HDR_LEN 30
15 struct ath12k_dp_rx_tid
{
23 /* Info related to rx fragments */
28 struct sk_buff_head rx_frags
;
29 struct hal_reo_dest_ring
*dst_ring_desc
;
31 /* Timer info related to fragments */
32 struct timer_list frag_timer
;
33 struct ath12k_base
*ab
;
36 struct ath12k_dp_rx_reo_cache_flush_elem
{
37 struct list_head list
;
38 struct ath12k_dp_rx_tid data
;
42 struct ath12k_dp_rx_reo_cmd
{
43 struct list_head list
;
44 struct ath12k_dp_rx_tid data
;
46 void (*handler
)(struct ath12k_dp
*dp
, void *ctx
,
47 enum hal_reo_cmd_status status
);
50 #define ATH12K_DP_RX_REO_DESC_FREE_THRES 64
51 #define ATH12K_DP_RX_REO_DESC_FREE_TIMEOUT_MS 1000
53 enum ath12k_dp_rx_decap_type
{
55 DP_RX_DECAP_TYPE_NATIVE_WIFI
,
56 DP_RX_DECAP_TYPE_ETHERNET2_DIX
,
57 DP_RX_DECAP_TYPE_8023
,
60 struct ath12k_dp_rx_rfc1042_hdr
{
68 static inline u32
ath12k_he_gi_to_nl80211_he_gi(u8 sgi
)
73 case RX_MSDU_START_SGI_0_8_US
:
74 ret
= NL80211_RATE_INFO_HE_GI_0_8
;
76 case RX_MSDU_START_SGI_1_6_US
:
77 ret
= NL80211_RATE_INFO_HE_GI_1_6
;
79 case RX_MSDU_START_SGI_3_2_US
:
80 ret
= NL80211_RATE_INFO_HE_GI_3_2
;
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
,
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
,
116 int ath12k_dp_rx_process(struct ath12k_base
*ab
, int mac_id
,
117 struct napi_struct
*napi
,
119 int ath12k_dp_rx_bufs_replenish(struct ath12k_base
*ab
,
120 struct dp_rxdma_ring
*rx_ring
,
121 struct list_head
*used_list
,
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
);
126 u8
ath12k_dp_rx_h_l3pad(struct ath12k_base
*ab
,
127 struct hal_rx_desc
*desc
);
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
);
137 ath12k_dp_rx_h_find_peer(struct ath12k_base
*ab
, struct sk_buff
*msdu
);
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
);
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
),
146 #endif /* ATH12K_DP_RX_H */