0001
0002
0003
0004
0005 #ifndef ATH11K_DP_RX_H
0006 #define ATH11K_DP_RX_H
0007
0008 #include "core.h"
0009 #include "rx_desc.h"
0010 #include "debug.h"
0011
0012 #define DP_MAX_NWIFI_HDR_LEN 30
0013
0014 #define DP_RX_MPDU_ERR_FCS BIT(0)
0015 #define DP_RX_MPDU_ERR_DECRYPT BIT(1)
0016 #define DP_RX_MPDU_ERR_TKIP_MIC BIT(2)
0017 #define DP_RX_MPDU_ERR_AMSDU_ERR BIT(3)
0018 #define DP_RX_MPDU_ERR_OVERFLOW BIT(4)
0019 #define DP_RX_MPDU_ERR_MSDU_LEN BIT(5)
0020 #define DP_RX_MPDU_ERR_MPDU_LEN BIT(6)
0021 #define DP_RX_MPDU_ERR_UNENCRYPTED_FRAME BIT(7)
0022
0023 enum dp_rx_decap_type {
0024 DP_RX_DECAP_TYPE_RAW,
0025 DP_RX_DECAP_TYPE_NATIVE_WIFI,
0026 DP_RX_DECAP_TYPE_ETHERNET2_DIX,
0027 DP_RX_DECAP_TYPE_8023,
0028 };
0029
0030 struct ath11k_dp_amsdu_subframe_hdr {
0031 u8 dst[ETH_ALEN];
0032 u8 src[ETH_ALEN];
0033 __be16 len;
0034 } __packed;
0035
0036 struct ath11k_dp_rfc1042_hdr {
0037 u8 llc_dsap;
0038 u8 llc_ssap;
0039 u8 llc_ctrl;
0040 u8 snap_oui[3];
0041 __be16 snap_type;
0042 } __packed;
0043
0044 int ath11k_dp_rx_ampdu_start(struct ath11k *ar,
0045 struct ieee80211_ampdu_params *params);
0046 int ath11k_dp_rx_ampdu_stop(struct ath11k *ar,
0047 struct ieee80211_ampdu_params *params);
0048 int ath11k_dp_peer_rx_pn_replay_config(struct ath11k_vif *arvif,
0049 const u8 *peer_addr,
0050 enum set_key_cmd key_cmd,
0051 struct ieee80211_key_conf *key);
0052 void ath11k_peer_frags_flush(struct ath11k *ar, struct ath11k_peer *peer);
0053 void ath11k_peer_rx_tid_cleanup(struct ath11k *ar, struct ath11k_peer *peer);
0054 void ath11k_peer_rx_tid_delete(struct ath11k *ar,
0055 struct ath11k_peer *peer, u8 tid);
0056 int ath11k_peer_rx_tid_setup(struct ath11k *ar, const u8 *peer_mac, int vdev_id,
0057 u8 tid, u32 ba_win_sz, u16 ssn,
0058 enum hal_pn_type pn_type);
0059 void ath11k_dp_htt_htc_t2h_msg_handler(struct ath11k_base *ab,
0060 struct sk_buff *skb);
0061 int ath11k_dp_pdev_reo_setup(struct ath11k_base *ab);
0062 void ath11k_dp_pdev_reo_cleanup(struct ath11k_base *ab);
0063 int ath11k_dp_rx_pdev_alloc(struct ath11k_base *ab, int pdev_idx);
0064 void ath11k_dp_rx_pdev_free(struct ath11k_base *ab, int pdev_idx);
0065 void ath11k_dp_reo_cmd_list_cleanup(struct ath11k_base *ab);
0066 void ath11k_dp_process_reo_status(struct ath11k_base *ab);
0067 int ath11k_dp_process_rxdma_err(struct ath11k_base *ab, int mac_id, int budget);
0068 int ath11k_dp_rx_process_wbm_err(struct ath11k_base *ab,
0069 struct napi_struct *napi, int budget);
0070 int ath11k_dp_process_rx_err(struct ath11k_base *ab, struct napi_struct *napi,
0071 int budget);
0072 int ath11k_dp_process_rx(struct ath11k_base *ab, int mac_id,
0073 struct napi_struct *napi,
0074 int budget);
0075 int ath11k_dp_rxbufs_replenish(struct ath11k_base *ab, int mac_id,
0076 struct dp_rxdma_ring *rx_ring,
0077 int req_entries,
0078 enum hal_rx_buf_return_buf_manager mgr);
0079 int ath11k_dp_htt_tlv_iter(struct ath11k_base *ab, const void *ptr, size_t len,
0080 int (*iter)(struct ath11k_base *ar, u16 tag, u16 len,
0081 const void *ptr, void *data),
0082 void *data);
0083 int ath11k_dp_rx_process_mon_rings(struct ath11k_base *ab, int mac_id,
0084 struct napi_struct *napi, int budget);
0085 int ath11k_dp_rx_process_mon_status(struct ath11k_base *ab, int mac_id,
0086 struct napi_struct *napi, int budget);
0087 int ath11k_dp_rx_mon_status_bufs_replenish(struct ath11k_base *ab, int mac_id,
0088 struct dp_rxdma_ring *rx_ring,
0089 int req_entries,
0090 enum hal_rx_buf_return_buf_manager mgr);
0091 int ath11k_dp_rx_pdev_mon_detach(struct ath11k *ar);
0092 int ath11k_dp_rx_pdev_mon_attach(struct ath11k *ar);
0093 int ath11k_peer_rx_frag_setup(struct ath11k *ar, const u8 *peer_mac, int vdev_id);
0094
0095 int ath11k_dp_rx_pktlog_start(struct ath11k_base *ab);
0096 int ath11k_dp_rx_pktlog_stop(struct ath11k_base *ab, bool stop_timer);
0097
0098 #endif