xref: /freebsd/sys/contrib/dev/athk/ath11k/dp_rx.h (revision dd4f32ae62426a10a84b4322756d82c06c202c4e)
1*dd4f32aeSBjoern A. Zeeb /* SPDX-License-Identifier: BSD-3-Clause-Clear */
2*dd4f32aeSBjoern A. Zeeb /*
3*dd4f32aeSBjoern A. Zeeb  * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
4*dd4f32aeSBjoern A. Zeeb  */
5*dd4f32aeSBjoern A. Zeeb #ifndef ATH11K_DP_RX_H
6*dd4f32aeSBjoern A. Zeeb #define ATH11K_DP_RX_H
7*dd4f32aeSBjoern A. Zeeb 
8*dd4f32aeSBjoern A. Zeeb #include "core.h"
9*dd4f32aeSBjoern A. Zeeb #include "rx_desc.h"
10*dd4f32aeSBjoern A. Zeeb #include "debug.h"
11*dd4f32aeSBjoern A. Zeeb 
12*dd4f32aeSBjoern A. Zeeb #define DP_MAX_NWIFI_HDR_LEN	30
13*dd4f32aeSBjoern A. Zeeb 
14*dd4f32aeSBjoern A. Zeeb #define DP_RX_MPDU_ERR_FCS			BIT(0)
15*dd4f32aeSBjoern A. Zeeb #define DP_RX_MPDU_ERR_DECRYPT			BIT(1)
16*dd4f32aeSBjoern A. Zeeb #define DP_RX_MPDU_ERR_TKIP_MIC			BIT(2)
17*dd4f32aeSBjoern A. Zeeb #define DP_RX_MPDU_ERR_AMSDU_ERR		BIT(3)
18*dd4f32aeSBjoern A. Zeeb #define DP_RX_MPDU_ERR_OVERFLOW			BIT(4)
19*dd4f32aeSBjoern A. Zeeb #define DP_RX_MPDU_ERR_MSDU_LEN			BIT(5)
20*dd4f32aeSBjoern A. Zeeb #define DP_RX_MPDU_ERR_MPDU_LEN			BIT(6)
21*dd4f32aeSBjoern A. Zeeb #define DP_RX_MPDU_ERR_UNENCRYPTED_FRAME	BIT(7)
22*dd4f32aeSBjoern A. Zeeb 
23*dd4f32aeSBjoern A. Zeeb enum dp_rx_decap_type {
24*dd4f32aeSBjoern A. Zeeb 	DP_RX_DECAP_TYPE_RAW,
25*dd4f32aeSBjoern A. Zeeb 	DP_RX_DECAP_TYPE_NATIVE_WIFI,
26*dd4f32aeSBjoern A. Zeeb 	DP_RX_DECAP_TYPE_ETHERNET2_DIX,
27*dd4f32aeSBjoern A. Zeeb 	DP_RX_DECAP_TYPE_8023,
28*dd4f32aeSBjoern A. Zeeb };
29*dd4f32aeSBjoern A. Zeeb 
30*dd4f32aeSBjoern A. Zeeb struct ath11k_dp_amsdu_subframe_hdr {
31*dd4f32aeSBjoern A. Zeeb 	u8 dst[ETH_ALEN];
32*dd4f32aeSBjoern A. Zeeb 	u8 src[ETH_ALEN];
33*dd4f32aeSBjoern A. Zeeb 	__be16 len;
34*dd4f32aeSBjoern A. Zeeb } __packed;
35*dd4f32aeSBjoern A. Zeeb 
36*dd4f32aeSBjoern A. Zeeb struct ath11k_dp_rfc1042_hdr {
37*dd4f32aeSBjoern A. Zeeb 	u8 llc_dsap;
38*dd4f32aeSBjoern A. Zeeb 	u8 llc_ssap;
39*dd4f32aeSBjoern A. Zeeb 	u8 llc_ctrl;
40*dd4f32aeSBjoern A. Zeeb 	u8 snap_oui[3];
41*dd4f32aeSBjoern A. Zeeb 	__be16 snap_type;
42*dd4f32aeSBjoern A. Zeeb } __packed;
43*dd4f32aeSBjoern A. Zeeb 
44*dd4f32aeSBjoern A. Zeeb int ath11k_dp_rx_ampdu_start(struct ath11k *ar,
45*dd4f32aeSBjoern A. Zeeb 			     struct ieee80211_ampdu_params *params);
46*dd4f32aeSBjoern A. Zeeb int ath11k_dp_rx_ampdu_stop(struct ath11k *ar,
47*dd4f32aeSBjoern A. Zeeb 			    struct ieee80211_ampdu_params *params);
48*dd4f32aeSBjoern A. Zeeb int ath11k_dp_peer_rx_pn_replay_config(struct ath11k_vif *arvif,
49*dd4f32aeSBjoern A. Zeeb 				       const u8 *peer_addr,
50*dd4f32aeSBjoern A. Zeeb 				       enum set_key_cmd key_cmd,
51*dd4f32aeSBjoern A. Zeeb 				       struct ieee80211_key_conf *key);
52*dd4f32aeSBjoern A. Zeeb void ath11k_peer_frags_flush(struct ath11k *ar, struct ath11k_peer *peer);
53*dd4f32aeSBjoern A. Zeeb void ath11k_peer_rx_tid_cleanup(struct ath11k *ar, struct ath11k_peer *peer);
54*dd4f32aeSBjoern A. Zeeb void ath11k_peer_rx_tid_delete(struct ath11k *ar,
55*dd4f32aeSBjoern A. Zeeb 			       struct ath11k_peer *peer, u8 tid);
56*dd4f32aeSBjoern A. Zeeb int ath11k_peer_rx_tid_setup(struct ath11k *ar, const u8 *peer_mac, int vdev_id,
57*dd4f32aeSBjoern A. Zeeb 			     u8 tid, u32 ba_win_sz, u16 ssn,
58*dd4f32aeSBjoern A. Zeeb 			     enum hal_pn_type pn_type);
59*dd4f32aeSBjoern A. Zeeb void ath11k_dp_htt_htc_t2h_msg_handler(struct ath11k_base *ab,
60*dd4f32aeSBjoern A. Zeeb 				       struct sk_buff *skb);
61*dd4f32aeSBjoern A. Zeeb int ath11k_dp_pdev_reo_setup(struct ath11k_base *ab);
62*dd4f32aeSBjoern A. Zeeb void ath11k_dp_pdev_reo_cleanup(struct ath11k_base *ab);
63*dd4f32aeSBjoern A. Zeeb int ath11k_dp_rx_pdev_alloc(struct ath11k_base *ab, int pdev_idx);
64*dd4f32aeSBjoern A. Zeeb void ath11k_dp_rx_pdev_free(struct ath11k_base *ab, int pdev_idx);
65*dd4f32aeSBjoern A. Zeeb void ath11k_dp_reo_cmd_list_cleanup(struct ath11k_base *ab);
66*dd4f32aeSBjoern A. Zeeb void ath11k_dp_process_reo_status(struct ath11k_base *ab);
67*dd4f32aeSBjoern A. Zeeb int ath11k_dp_process_rxdma_err(struct ath11k_base *ab, int mac_id, int budget);
68*dd4f32aeSBjoern A. Zeeb int ath11k_dp_rx_process_wbm_err(struct ath11k_base *ab,
69*dd4f32aeSBjoern A. Zeeb 				 struct napi_struct *napi, int budget);
70*dd4f32aeSBjoern A. Zeeb int ath11k_dp_process_rx_err(struct ath11k_base *ab, struct napi_struct *napi,
71*dd4f32aeSBjoern A. Zeeb 			     int budget);
72*dd4f32aeSBjoern A. Zeeb int ath11k_dp_process_rx(struct ath11k_base *ab, int mac_id,
73*dd4f32aeSBjoern A. Zeeb 			 struct napi_struct *napi,
74*dd4f32aeSBjoern A. Zeeb 			 int budget);
75*dd4f32aeSBjoern A. Zeeb int ath11k_dp_rxbufs_replenish(struct ath11k_base *ab, int mac_id,
76*dd4f32aeSBjoern A. Zeeb 			       struct dp_rxdma_ring *rx_ring,
77*dd4f32aeSBjoern A. Zeeb 			       int req_entries,
78*dd4f32aeSBjoern A. Zeeb 			       enum hal_rx_buf_return_buf_manager mgr);
79*dd4f32aeSBjoern A. Zeeb #if defined(__linux__)
80*dd4f32aeSBjoern A. Zeeb int ath11k_dp_htt_tlv_iter(struct ath11k_base *ab, const void *ptr, size_t len,
81*dd4f32aeSBjoern A. Zeeb #elif defined(__FreeBSD__)
82*dd4f32aeSBjoern A. Zeeb int ath11k_dp_htt_tlv_iter(struct ath11k_base *ab, const u8 *ptr, size_t len,
83*dd4f32aeSBjoern A. Zeeb #endif
84*dd4f32aeSBjoern A. Zeeb 			   int (*iter)(struct ath11k_base *ar, u16 tag, u16 len,
85*dd4f32aeSBjoern A. Zeeb 				       const void *ptr, void *data),
86*dd4f32aeSBjoern A. Zeeb 			   void *data);
87*dd4f32aeSBjoern A. Zeeb int ath11k_dp_rx_process_mon_rings(struct ath11k_base *ab, int mac_id,
88*dd4f32aeSBjoern A. Zeeb 				   struct napi_struct *napi, int budget);
89*dd4f32aeSBjoern A. Zeeb int ath11k_dp_rx_process_mon_status(struct ath11k_base *ab, int mac_id,
90*dd4f32aeSBjoern A. Zeeb 				    struct napi_struct *napi, int budget);
91*dd4f32aeSBjoern A. Zeeb int ath11k_dp_rx_mon_status_bufs_replenish(struct ath11k_base *ab, int mac_id,
92*dd4f32aeSBjoern A. Zeeb 					   struct dp_rxdma_ring *rx_ring,
93*dd4f32aeSBjoern A. Zeeb 					   int req_entries,
94*dd4f32aeSBjoern A. Zeeb 					   enum hal_rx_buf_return_buf_manager mgr);
95*dd4f32aeSBjoern A. Zeeb int ath11k_dp_rx_pdev_mon_detach(struct ath11k *ar);
96*dd4f32aeSBjoern A. Zeeb int ath11k_dp_rx_pdev_mon_attach(struct ath11k *ar);
97*dd4f32aeSBjoern A. Zeeb int ath11k_peer_rx_frag_setup(struct ath11k *ar, const u8 *peer_mac, int vdev_id);
98*dd4f32aeSBjoern A. Zeeb 
99*dd4f32aeSBjoern A. Zeeb int ath11k_dp_rx_pktlog_start(struct ath11k_base *ab);
100*dd4f32aeSBjoern A. Zeeb int ath11k_dp_rx_pktlog_stop(struct ath11k_base *ab, bool stop_timer);
101*dd4f32aeSBjoern A. Zeeb 
102*dd4f32aeSBjoern A. Zeeb #endif /* ATH11K_DP_RX_H */
103