xref: /freebsd/sys/contrib/dev/athk/ath12k/dp_mon.h (revision 5c1def83a4cc2eb3f828600dfd786f8c5788fb7d)
1*5c1def83SBjoern A. Zeeb /* SPDX-License-Identifier: BSD-3-Clause-Clear */
2*5c1def83SBjoern A. Zeeb /*
3*5c1def83SBjoern A. Zeeb  * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
4*5c1def83SBjoern A. Zeeb  * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
5*5c1def83SBjoern A. Zeeb  */
6*5c1def83SBjoern A. Zeeb 
7*5c1def83SBjoern A. Zeeb #ifndef ATH12K_DP_MON_H
8*5c1def83SBjoern A. Zeeb #define ATH12K_DP_MON_H
9*5c1def83SBjoern A. Zeeb 
10*5c1def83SBjoern A. Zeeb #include "core.h"
11*5c1def83SBjoern A. Zeeb 
12*5c1def83SBjoern A. Zeeb enum dp_monitor_mode {
13*5c1def83SBjoern A. Zeeb 	ATH12K_DP_TX_MONITOR_MODE,
14*5c1def83SBjoern A. Zeeb 	ATH12K_DP_RX_MONITOR_MODE
15*5c1def83SBjoern A. Zeeb };
16*5c1def83SBjoern A. Zeeb 
17*5c1def83SBjoern A. Zeeb enum dp_mon_tx_ppdu_info_type {
18*5c1def83SBjoern A. Zeeb 	DP_MON_TX_PROT_PPDU_INFO,
19*5c1def83SBjoern A. Zeeb 	DP_MON_TX_DATA_PPDU_INFO
20*5c1def83SBjoern A. Zeeb };
21*5c1def83SBjoern A. Zeeb 
22*5c1def83SBjoern A. Zeeb enum dp_mon_tx_tlv_status {
23*5c1def83SBjoern A. Zeeb 	DP_MON_TX_FES_SETUP,
24*5c1def83SBjoern A. Zeeb 	DP_MON_TX_FES_STATUS_END,
25*5c1def83SBjoern A. Zeeb 	DP_MON_RX_RESPONSE_REQUIRED_INFO,
26*5c1def83SBjoern A. Zeeb 	DP_MON_RESPONSE_END_STATUS_INFO,
27*5c1def83SBjoern A. Zeeb 	DP_MON_TX_MPDU_START,
28*5c1def83SBjoern A. Zeeb 	DP_MON_TX_MSDU_START,
29*5c1def83SBjoern A. Zeeb 	DP_MON_TX_BUFFER_ADDR,
30*5c1def83SBjoern A. Zeeb 	DP_MON_TX_DATA,
31*5c1def83SBjoern A. Zeeb 	DP_MON_TX_STATUS_PPDU_NOT_DONE,
32*5c1def83SBjoern A. Zeeb };
33*5c1def83SBjoern A. Zeeb 
34*5c1def83SBjoern A. Zeeb enum dp_mon_tx_medium_protection_type {
35*5c1def83SBjoern A. Zeeb 	DP_MON_TX_MEDIUM_NO_PROTECTION,
36*5c1def83SBjoern A. Zeeb 	DP_MON_TX_MEDIUM_RTS_LEGACY,
37*5c1def83SBjoern A. Zeeb 	DP_MON_TX_MEDIUM_RTS_11AC_STATIC_BW,
38*5c1def83SBjoern A. Zeeb 	DP_MON_TX_MEDIUM_RTS_11AC_DYNAMIC_BW,
39*5c1def83SBjoern A. Zeeb 	DP_MON_TX_MEDIUM_CTS2SELF,
40*5c1def83SBjoern A. Zeeb 	DP_MON_TX_MEDIUM_QOS_NULL_NO_ACK_3ADDR,
41*5c1def83SBjoern A. Zeeb 	DP_MON_TX_MEDIUM_QOS_NULL_NO_ACK_4ADDR
42*5c1def83SBjoern A. Zeeb };
43*5c1def83SBjoern A. Zeeb 
44*5c1def83SBjoern A. Zeeb struct dp_mon_qosframe_addr4 {
45*5c1def83SBjoern A. Zeeb 	__le16 frame_control;
46*5c1def83SBjoern A. Zeeb 	__le16 duration;
47*5c1def83SBjoern A. Zeeb 	u8 addr1[ETH_ALEN];
48*5c1def83SBjoern A. Zeeb 	u8 addr2[ETH_ALEN];
49*5c1def83SBjoern A. Zeeb 	u8 addr3[ETH_ALEN];
50*5c1def83SBjoern A. Zeeb 	__le16 seq_ctrl;
51*5c1def83SBjoern A. Zeeb 	u8 addr4[ETH_ALEN];
52*5c1def83SBjoern A. Zeeb 	__le16 qos_ctrl;
53*5c1def83SBjoern A. Zeeb } __packed;
54*5c1def83SBjoern A. Zeeb 
55*5c1def83SBjoern A. Zeeb struct dp_mon_frame_min_one {
56*5c1def83SBjoern A. Zeeb 	__le16 frame_control;
57*5c1def83SBjoern A. Zeeb 	__le16 duration;
58*5c1def83SBjoern A. Zeeb 	u8 addr1[ETH_ALEN];
59*5c1def83SBjoern A. Zeeb } __packed;
60*5c1def83SBjoern A. Zeeb 
61*5c1def83SBjoern A. Zeeb struct dp_mon_packet_info {
62*5c1def83SBjoern A. Zeeb 	u64 cookie;
63*5c1def83SBjoern A. Zeeb 	u16 dma_length;
64*5c1def83SBjoern A. Zeeb 	bool msdu_continuation;
65*5c1def83SBjoern A. Zeeb 	bool truncated;
66*5c1def83SBjoern A. Zeeb };
67*5c1def83SBjoern A. Zeeb 
68*5c1def83SBjoern A. Zeeb struct dp_mon_tx_ppdu_info {
69*5c1def83SBjoern A. Zeeb 	u32 ppdu_id;
70*5c1def83SBjoern A. Zeeb 	u8  num_users;
71*5c1def83SBjoern A. Zeeb 	bool is_used;
72*5c1def83SBjoern A. Zeeb 	struct hal_rx_mon_ppdu_info rx_status;
73*5c1def83SBjoern A. Zeeb 	struct list_head dp_tx_mon_mpdu_list;
74*5c1def83SBjoern A. Zeeb 	struct dp_mon_mpdu *tx_mon_mpdu;
75*5c1def83SBjoern A. Zeeb };
76*5c1def83SBjoern A. Zeeb 
77*5c1def83SBjoern A. Zeeb enum hal_rx_mon_status
78*5c1def83SBjoern A. Zeeb ath12k_dp_mon_rx_parse_mon_status(struct ath12k *ar,
79*5c1def83SBjoern A. Zeeb 				  struct ath12k_mon_data *pmon,
80*5c1def83SBjoern A. Zeeb 				  int mac_id, struct sk_buff *skb,
81*5c1def83SBjoern A. Zeeb 				  struct napi_struct *napi);
82*5c1def83SBjoern A. Zeeb int ath12k_dp_mon_buf_replenish(struct ath12k_base *ab,
83*5c1def83SBjoern A. Zeeb 				struct dp_rxdma_ring *buf_ring,
84*5c1def83SBjoern A. Zeeb 				int req_entries);
85*5c1def83SBjoern A. Zeeb int ath12k_dp_mon_srng_process(struct ath12k *ar, int mac_id,
86*5c1def83SBjoern A. Zeeb 			       int *budget, enum dp_monitor_mode monitor_mode,
87*5c1def83SBjoern A. Zeeb 			       struct napi_struct *napi);
88*5c1def83SBjoern A. Zeeb int ath12k_dp_mon_process_ring(struct ath12k_base *ab, int mac_id,
89*5c1def83SBjoern A. Zeeb 			       struct napi_struct *napi, int budget,
90*5c1def83SBjoern A. Zeeb 			       enum dp_monitor_mode monitor_mode);
91*5c1def83SBjoern A. Zeeb struct sk_buff *ath12k_dp_mon_tx_alloc_skb(void);
92*5c1def83SBjoern A. Zeeb enum dp_mon_tx_tlv_status
93*5c1def83SBjoern A. Zeeb ath12k_dp_mon_tx_status_get_num_user(u16 tlv_tag,
94*5c1def83SBjoern A. Zeeb 				     struct hal_tlv_hdr *tx_tlv,
95*5c1def83SBjoern A. Zeeb 				     u8 *num_users);
96*5c1def83SBjoern A. Zeeb enum hal_rx_mon_status
97*5c1def83SBjoern A. Zeeb ath12k_dp_mon_tx_parse_mon_status(struct ath12k *ar,
98*5c1def83SBjoern A. Zeeb 				  struct ath12k_mon_data *pmon,
99*5c1def83SBjoern A. Zeeb 				  int mac_id,
100*5c1def83SBjoern A. Zeeb 				  struct sk_buff *skb,
101*5c1def83SBjoern A. Zeeb 				  struct napi_struct *napi,
102*5c1def83SBjoern A. Zeeb 				  u32 ppdu_id);
103*5c1def83SBjoern A. Zeeb void ath12k_dp_mon_rx_process_ulofdma(struct hal_rx_mon_ppdu_info *ppdu_info);
104*5c1def83SBjoern A. Zeeb int ath12k_dp_mon_rx_process_stats(struct ath12k *ar, int mac_id,
105*5c1def83SBjoern A. Zeeb 				   struct napi_struct *napi, int *budget);
106*5c1def83SBjoern A. Zeeb #endif
107