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