xref: /linux/drivers/net/wireless/ath/ath11k/cfr.h (revision c17ee635fd3a482b2ad2bf5e269755c2eae5f25e)
19b2e3b4eSVenkateswara Naralasetty /* SPDX-License-Identifier: BSD-3-Clause-Clear */
29b2e3b4eSVenkateswara Naralasetty /*
39b2e3b4eSVenkateswara Naralasetty  * Copyright (c) 2020-2021 The Linux Foundation. All rights reserved.
49b2e3b4eSVenkateswara Naralasetty  * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
59b2e3b4eSVenkateswara Naralasetty  */
69b2e3b4eSVenkateswara Naralasetty 
79b2e3b4eSVenkateswara Naralasetty #ifndef ATH11K_CFR_H
89b2e3b4eSVenkateswara Naralasetty #define ATH11K_CFR_H
99b2e3b4eSVenkateswara Naralasetty 
109b2e3b4eSVenkateswara Naralasetty #include "dbring.h"
119b2e3b4eSVenkateswara Naralasetty #include "wmi.h"
129b2e3b4eSVenkateswara Naralasetty 
139b2e3b4eSVenkateswara Naralasetty #define ATH11K_CFR_NUM_RESP_PER_EVENT   1
149b2e3b4eSVenkateswara Naralasetty #define ATH11K_CFR_EVENT_TIMEOUT_MS     1
159b2e3b4eSVenkateswara Naralasetty #define ATH11K_CFR_NUM_RING_ENTRIES     1
169b2e3b4eSVenkateswara Naralasetty 
179754d4baSVenkateswara Naralasetty #define ATH11K_MAX_CFR_ENABLED_CLIENTS 10
189b2e3b4eSVenkateswara Naralasetty #define CFR_MAX_LUT_ENTRIES 136
199b2e3b4eSVenkateswara Naralasetty 
209b2e3b4eSVenkateswara Naralasetty #define HOST_MAX_CHAINS 8
219b2e3b4eSVenkateswara Naralasetty 
2299cf7568SVenkateswara Naralasetty enum ath11k_cfr_correlate_event_type {
2399cf7568SVenkateswara Naralasetty 	ATH11K_CORRELATE_DBR_EVENT,
2499cf7568SVenkateswara Naralasetty 	ATH11K_CORRELATE_TX_EVENT,
2599cf7568SVenkateswara Naralasetty };
2699cf7568SVenkateswara Naralasetty 
279754d4baSVenkateswara Naralasetty struct ath11k_sta;
289754d4baSVenkateswara Naralasetty struct ath11k_per_peer_cfr_capture;
299754d4baSVenkateswara Naralasetty 
30*ca765bedSVenkateswara Naralasetty #define ATH11K_CFR_START_MAGIC 0xDEADBEAF
3199cf7568SVenkateswara Naralasetty #define ATH11K_CFR_END_MAGIC 0xBEAFDEAD
3299cf7568SVenkateswara Naralasetty 
33*ca765bedSVenkateswara Naralasetty #define VENDOR_QCA 0x8cfdf0
34*ca765bedSVenkateswara Naralasetty #define PLATFORM_TYPE_ARM 2
35*ca765bedSVenkateswara Naralasetty 
36*ca765bedSVenkateswara Naralasetty enum ath11k_cfr_meta_version {
37*ca765bedSVenkateswara Naralasetty 	ATH11K_CFR_META_VERSION_NONE,
38*ca765bedSVenkateswara Naralasetty 	ATH11K_CFR_META_VERSION_1,
39*ca765bedSVenkateswara Naralasetty 	ATH11K_CFR_META_VERSION_2,
40*ca765bedSVenkateswara Naralasetty 	ATH11K_CFR_META_VERSION_3,
41*ca765bedSVenkateswara Naralasetty 	ATH11K_CFR_META_VERSION_4,
42*ca765bedSVenkateswara Naralasetty 	ATH11K_CFR_META_VERSION_MAX = 0xFF,
43*ca765bedSVenkateswara Naralasetty };
44*ca765bedSVenkateswara Naralasetty 
45*ca765bedSVenkateswara Naralasetty enum ath11k_cfr_data_version {
46*ca765bedSVenkateswara Naralasetty 	ATH11K_CFR_DATA_VERSION_NONE,
47*ca765bedSVenkateswara Naralasetty 	ATH11K_CFR_DATA_VERSION_1,
48*ca765bedSVenkateswara Naralasetty 	ATH11K_CFR_DATA_VERSION_MAX = 0xFF,
49*ca765bedSVenkateswara Naralasetty };
50*ca765bedSVenkateswara Naralasetty 
51*ca765bedSVenkateswara Naralasetty enum ath11k_cfr_capture_ack_mode {
52*ca765bedSVenkateswara Naralasetty 	ATH11K_CFR_CAPTURE_LEGACY_ACK,
53*ca765bedSVenkateswara Naralasetty 	ATH11K_CFR_CAPTURE_DUP_LEGACY_ACK,
54*ca765bedSVenkateswara Naralasetty 	ATH11K_CFR_CAPTURE_HT_ACK,
55*ca765bedSVenkateswara Naralasetty 	ATH11K_CFR_CAPTURE_VHT_ACK,
56*ca765bedSVenkateswara Naralasetty 
57*ca765bedSVenkateswara Naralasetty 	/*Always keep this at last*/
58*ca765bedSVenkateswara Naralasetty 	ATH11K_CFR_CAPTURE_INVALID_ACK
59*ca765bedSVenkateswara Naralasetty };
60*ca765bedSVenkateswara Naralasetty 
6199cf7568SVenkateswara Naralasetty enum ath11k_cfr_correlate_status {
6299cf7568SVenkateswara Naralasetty 	ATH11K_CORRELATE_STATUS_RELEASE,
6399cf7568SVenkateswara Naralasetty 	ATH11K_CORRELATE_STATUS_HOLD,
6499cf7568SVenkateswara Naralasetty 	ATH11K_CORRELATE_STATUS_ERR,
6599cf7568SVenkateswara Naralasetty };
6699cf7568SVenkateswara Naralasetty 
6799cf7568SVenkateswara Naralasetty enum ath11k_cfr_preamble_type {
6899cf7568SVenkateswara Naralasetty 	ATH11K_CFR_PREAMBLE_TYPE_LEGACY,
6999cf7568SVenkateswara Naralasetty 	ATH11K_CFR_PREAMBLE_TYPE_HT,
7099cf7568SVenkateswara Naralasetty 	ATH11K_CFR_PREAMBLE_TYPE_VHT,
7199cf7568SVenkateswara Naralasetty };
7299cf7568SVenkateswara Naralasetty 
73*ca765bedSVenkateswara Naralasetty struct ath11k_cfr_peer_tx_param {
74*ca765bedSVenkateswara Naralasetty 	u32 capture_method;
75*ca765bedSVenkateswara Naralasetty 	u32 vdev_id;
76*ca765bedSVenkateswara Naralasetty 	u8 peer_mac_addr[ETH_ALEN];
77*ca765bedSVenkateswara Naralasetty 	u32 primary_20mhz_chan;
78*ca765bedSVenkateswara Naralasetty 	u32 bandwidth;
79*ca765bedSVenkateswara Naralasetty 	u32 phy_mode;
80*ca765bedSVenkateswara Naralasetty 	u32 band_center_freq1;
81*ca765bedSVenkateswara Naralasetty 	u32 band_center_freq2;
82*ca765bedSVenkateswara Naralasetty 	u32 spatial_streams;
83*ca765bedSVenkateswara Naralasetty 	u32 correlation_info_1;
84*ca765bedSVenkateswara Naralasetty 	u32 correlation_info_2;
85*ca765bedSVenkateswara Naralasetty 	u32 status;
86*ca765bedSVenkateswara Naralasetty 	u32 timestamp_us;
87*ca765bedSVenkateswara Naralasetty 	u32 counter;
88*ca765bedSVenkateswara Naralasetty 	u32 chain_rssi[WMI_MAX_CHAINS];
89*ca765bedSVenkateswara Naralasetty 	u16 chain_phase[WMI_MAX_CHAINS];
90*ca765bedSVenkateswara Naralasetty 	u32 cfo_measurement;
91*ca765bedSVenkateswara Naralasetty 	u8 agc_gain[HOST_MAX_CHAINS];
92*ca765bedSVenkateswara Naralasetty 	u32 rx_start_ts;
93*ca765bedSVenkateswara Naralasetty };
94*ca765bedSVenkateswara Naralasetty 
9599cf7568SVenkateswara Naralasetty struct cfr_metadata {
9699cf7568SVenkateswara Naralasetty 	u8 peer_addr[ETH_ALEN];
9799cf7568SVenkateswara Naralasetty 	u8 status;
9899cf7568SVenkateswara Naralasetty 	u8 capture_bw;
9999cf7568SVenkateswara Naralasetty 	u8 channel_bw;
10099cf7568SVenkateswara Naralasetty 	u8 phy_mode;
10199cf7568SVenkateswara Naralasetty 	u16 prim20_chan;
10299cf7568SVenkateswara Naralasetty 	u16 center_freq1;
10399cf7568SVenkateswara Naralasetty 	u16 center_freq2;
10499cf7568SVenkateswara Naralasetty 	u8 capture_mode;
10599cf7568SVenkateswara Naralasetty 	u8 capture_type;
10699cf7568SVenkateswara Naralasetty 	u8 sts_count;
10799cf7568SVenkateswara Naralasetty 	u8 num_rx_chain;
10899cf7568SVenkateswara Naralasetty 	u32 timestamp;
10999cf7568SVenkateswara Naralasetty 	u32 length;
11099cf7568SVenkateswara Naralasetty 	u32 chain_rssi[HOST_MAX_CHAINS];
11199cf7568SVenkateswara Naralasetty 	u16 chain_phase[HOST_MAX_CHAINS];
11299cf7568SVenkateswara Naralasetty 	u32 cfo_measurement;
11399cf7568SVenkateswara Naralasetty 	u8 agc_gain[HOST_MAX_CHAINS];
11499cf7568SVenkateswara Naralasetty 	u32 rx_start_ts;
11599cf7568SVenkateswara Naralasetty } __packed;
11699cf7568SVenkateswara Naralasetty 
11799cf7568SVenkateswara Naralasetty struct ath11k_csi_cfr_header {
11899cf7568SVenkateswara Naralasetty 	u32 start_magic_num;
11999cf7568SVenkateswara Naralasetty 	u32 vendorid;
12099cf7568SVenkateswara Naralasetty 	u8 cfr_metadata_version;
12199cf7568SVenkateswara Naralasetty 	u8 cfr_data_version;
12299cf7568SVenkateswara Naralasetty 	u8 chip_type;
12399cf7568SVenkateswara Naralasetty 	u8 platform_type;
124*ca765bedSVenkateswara Naralasetty 	u32 cfr_metadata_len;
12599cf7568SVenkateswara Naralasetty 	struct cfr_metadata meta_data;
12699cf7568SVenkateswara Naralasetty } __packed;
12799cf7568SVenkateswara Naralasetty 
12899cf7568SVenkateswara Naralasetty #define TONES_IN_20MHZ  256
12999cf7568SVenkateswara Naralasetty #define TONES_IN_40MHZ  512
13099cf7568SVenkateswara Naralasetty #define TONES_IN_80MHZ  1024
13199cf7568SVenkateswara Naralasetty #define TONES_IN_160MHZ 2048 /* 160 MHz isn't supported yet */
13299cf7568SVenkateswara Naralasetty #define TONES_INVALID   0
13399cf7568SVenkateswara Naralasetty 
13499cf7568SVenkateswara Naralasetty #define CFIR_DMA_HDR_INFO0_TAG GENMASK(7, 0)
13599cf7568SVenkateswara Naralasetty #define CFIR_DMA_HDR_INFO0_LEN GENMASK(13, 8)
13699cf7568SVenkateswara Naralasetty 
13799cf7568SVenkateswara Naralasetty #define CFIR_DMA_HDR_INFO1_UPLOAD_DONE      GENMASK(0, 0)
13899cf7568SVenkateswara Naralasetty #define CFIR_DMA_HDR_INFO1_CAPTURE_TYPE     GENMASK(3, 1)
13999cf7568SVenkateswara Naralasetty #define CFIR_DMA_HDR_INFO1_PREAMBLE_TYPE    GENMASK(5, 4)
14099cf7568SVenkateswara Naralasetty #define CFIR_DMA_HDR_INFO1_NSS              GENMASK(8, 6)
14199cf7568SVenkateswara Naralasetty #define CFIR_DMA_HDR_INFO1_NUM_CHAINS       GENMASK(11, 9)
14299cf7568SVenkateswara Naralasetty #define CFIR_DMA_HDR_INFO1_UPLOAD_PKT_BW    GENMASK(14, 12)
14399cf7568SVenkateswara Naralasetty #define CFIR_DMA_HDR_INFO1_SW_PEER_ID_VALID GENMASK(15, 15)
14499cf7568SVenkateswara Naralasetty 
1459b2e3b4eSVenkateswara Naralasetty struct ath11k_cfr_dma_hdr {
1469b2e3b4eSVenkateswara Naralasetty 	u16 info0;
1479b2e3b4eSVenkateswara Naralasetty 	u16 info1;
1489b2e3b4eSVenkateswara Naralasetty 	u16 sw_peer_id;
1499b2e3b4eSVenkateswara Naralasetty 	u16 phy_ppdu_id;
1509b2e3b4eSVenkateswara Naralasetty };
1519b2e3b4eSVenkateswara Naralasetty 
1529b2e3b4eSVenkateswara Naralasetty struct ath11k_look_up_table {
1539b2e3b4eSVenkateswara Naralasetty 	bool dbr_recv;
1549b2e3b4eSVenkateswara Naralasetty 	bool tx_recv;
1559b2e3b4eSVenkateswara Naralasetty 	u8 *data;
1569b2e3b4eSVenkateswara Naralasetty 	u32 data_len;
1579b2e3b4eSVenkateswara Naralasetty 	u16 dbr_ppdu_id;
1589b2e3b4eSVenkateswara Naralasetty 	u16 tx_ppdu_id;
1599b2e3b4eSVenkateswara Naralasetty 	dma_addr_t dbr_address;
16099cf7568SVenkateswara Naralasetty 	struct ath11k_csi_cfr_header header;
1619b2e3b4eSVenkateswara Naralasetty 	struct ath11k_cfr_dma_hdr hdr;
1629b2e3b4eSVenkateswara Naralasetty 	u64 txrx_tstamp;
1639b2e3b4eSVenkateswara Naralasetty 	u64 dbr_tstamp;
1649b2e3b4eSVenkateswara Naralasetty 	u32 header_length;
1659b2e3b4eSVenkateswara Naralasetty 	u32 payload_length;
1669b2e3b4eSVenkateswara Naralasetty 	struct ath11k_dbring_element *buff;
1679b2e3b4eSVenkateswara Naralasetty };
1689b2e3b4eSVenkateswara Naralasetty 
169b3d43d89SVenkateswara Naralasetty struct cfr_unassoc_pool_entry {
170b3d43d89SVenkateswara Naralasetty 	u8 peer_mac[ETH_ALEN];
171b3d43d89SVenkateswara Naralasetty 	u32 period;
172b3d43d89SVenkateswara Naralasetty 	bool is_valid;
173b3d43d89SVenkateswara Naralasetty };
174b3d43d89SVenkateswara Naralasetty 
1759b2e3b4eSVenkateswara Naralasetty struct ath11k_cfr {
1769b2e3b4eSVenkateswara Naralasetty 	struct ath11k_dbring rx_ring;
1779b2e3b4eSVenkateswara Naralasetty 	/* Protects cfr data */
1789b2e3b4eSVenkateswara Naralasetty 	spinlock_t lock;
1799b2e3b4eSVenkateswara Naralasetty 	/* Protect for lut entries */
1809b2e3b4eSVenkateswara Naralasetty 	spinlock_t lut_lock;
1819b2e3b4eSVenkateswara Naralasetty 	struct ath11k_look_up_table *lut;
1829754d4baSVenkateswara Naralasetty 	struct dentry *enable_cfr;
183b3d43d89SVenkateswara Naralasetty 	struct dentry *cfr_unassoc;
184c1bf6959SVenkateswara Naralasetty 	struct rchan *rfs_cfr_capture;
1859754d4baSVenkateswara Naralasetty 	u8 cfr_enabled_peer_cnt;
1869b2e3b4eSVenkateswara Naralasetty 	u32 lut_num;
1879b2e3b4eSVenkateswara Naralasetty 	u64 tx_evt_cnt;
1889b2e3b4eSVenkateswara Naralasetty 	u64 dbr_evt_cnt;
1899b2e3b4eSVenkateswara Naralasetty 	u64 release_cnt;
1909b2e3b4eSVenkateswara Naralasetty 	u64 tx_peer_status_cfr_fail;
1919b2e3b4eSVenkateswara Naralasetty 	u64 tx_evt_status_cfr_fail;
1929b2e3b4eSVenkateswara Naralasetty 	u64 tx_dbr_lookup_fail;
1939b2e3b4eSVenkateswara Naralasetty 	u64 last_success_tstamp;
1949b2e3b4eSVenkateswara Naralasetty 	u64 flush_dbr_cnt;
1959b2e3b4eSVenkateswara Naralasetty 	u64 clear_txrx_event;
1969b2e3b4eSVenkateswara Naralasetty 	u64 cfr_dma_aborts;
1979b2e3b4eSVenkateswara Naralasetty 	bool enabled;
198*ca765bedSVenkateswara Naralasetty 	enum wmi_phy_mode phymode;
199b3d43d89SVenkateswara Naralasetty 	struct cfr_unassoc_pool_entry unassoc_pool[ATH11K_MAX_CFR_ENABLED_CLIENTS];
2009b2e3b4eSVenkateswara Naralasetty };
2019b2e3b4eSVenkateswara Naralasetty 
2029754d4baSVenkateswara Naralasetty enum ath11k_cfr_capture_method {
2039754d4baSVenkateswara Naralasetty 	ATH11K_CFR_CAPTURE_METHOD_NULL_FRAME,
2049754d4baSVenkateswara Naralasetty 	ATH11K_CFR_CAPTURE_METHOD_NULL_FRAME_WITH_PHASE,
2059754d4baSVenkateswara Naralasetty 	ATH11K_CFR_CAPTURE_METHOD_PROBE_RESP,
2069754d4baSVenkateswara Naralasetty 	ATH11K_CFR_CAPTURE_METHOD_MAX,
2079754d4baSVenkateswara Naralasetty };
2089754d4baSVenkateswara Naralasetty 
2099754d4baSVenkateswara Naralasetty enum ath11k_cfr_capture_bw {
2109754d4baSVenkateswara Naralasetty 	ATH11K_CFR_CAPTURE_BW_20,
2119754d4baSVenkateswara Naralasetty 	ATH11K_CFR_CAPTURE_BW_40,
2129754d4baSVenkateswara Naralasetty 	ATH11K_CFR_CAPTURE_BW_80,
2139754d4baSVenkateswara Naralasetty 	ATH11K_CFR_CAPTURE_BW_MAX,
2149754d4baSVenkateswara Naralasetty };
2159754d4baSVenkateswara Naralasetty 
2169b2e3b4eSVenkateswara Naralasetty #ifdef CONFIG_ATH11K_CFR
2179b2e3b4eSVenkateswara Naralasetty int ath11k_cfr_init(struct ath11k_base *ab);
2189b2e3b4eSVenkateswara Naralasetty void ath11k_cfr_deinit(struct ath11k_base *ab);
2199b2e3b4eSVenkateswara Naralasetty void ath11k_cfr_lut_update_paddr(struct ath11k *ar, dma_addr_t paddr,
2209b2e3b4eSVenkateswara Naralasetty 				 u32 buf_id);
2219754d4baSVenkateswara Naralasetty void ath11k_cfr_decrement_peer_count(struct ath11k *ar,
2229754d4baSVenkateswara Naralasetty 				     struct ath11k_sta *arsta);
223b3d43d89SVenkateswara Naralasetty void ath11k_cfr_update_unassoc_pool_entry(struct ath11k *ar,
224b3d43d89SVenkateswara Naralasetty 					  const u8 *peer_mac);
225b3d43d89SVenkateswara Naralasetty bool ath11k_cfr_peer_is_in_cfr_unassoc_pool(struct ath11k *ar,
226b3d43d89SVenkateswara Naralasetty 					    const u8 *peer_mac);
227b3d43d89SVenkateswara Naralasetty void ath11k_cfr_update_unassoc_pool(struct ath11k *ar,
228b3d43d89SVenkateswara Naralasetty 				    struct ath11k_per_peer_cfr_capture *params,
229b3d43d89SVenkateswara Naralasetty 				    u8 *peer_mac);
2309754d4baSVenkateswara Naralasetty int ath11k_cfr_send_peer_cfr_capture_cmd(struct ath11k *ar,
2319754d4baSVenkateswara Naralasetty 					 struct ath11k_sta *arsta,
2329754d4baSVenkateswara Naralasetty 					 struct ath11k_per_peer_cfr_capture *params,
2339754d4baSVenkateswara Naralasetty 					 const u8 *peer_mac);
23499cf7568SVenkateswara Naralasetty struct ath11k_dbring *ath11k_cfr_get_dbring(struct ath11k *ar);
23599cf7568SVenkateswara Naralasetty void ath11k_cfr_release_lut_entry(struct ath11k_look_up_table *lut);
236*ca765bedSVenkateswara Naralasetty int ath11k_process_cfr_capture_event(struct ath11k_base *ab,
237*ca765bedSVenkateswara Naralasetty 				     struct ath11k_cfr_peer_tx_param *params);
238*ca765bedSVenkateswara Naralasetty void ath11k_cfr_update_phymode(struct ath11k *ar, enum wmi_phy_mode phymode);
2399b2e3b4eSVenkateswara Naralasetty #else
240*ca765bedSVenkateswara Naralasetty static inline void ath11k_cfr_update_phymode(struct ath11k *ar,
241*ca765bedSVenkateswara Naralasetty 					     enum wmi_phy_mode phymode)
242*ca765bedSVenkateswara Naralasetty {
243*ca765bedSVenkateswara Naralasetty }
244*ca765bedSVenkateswara Naralasetty 
2459b2e3b4eSVenkateswara Naralasetty static inline int ath11k_cfr_init(struct ath11k_base *ab)
2469b2e3b4eSVenkateswara Naralasetty {
2479b2e3b4eSVenkateswara Naralasetty 	return 0;
2489b2e3b4eSVenkateswara Naralasetty }
2499b2e3b4eSVenkateswara Naralasetty 
2509b2e3b4eSVenkateswara Naralasetty static inline void ath11k_cfr_deinit(struct ath11k_base *ab)
2519b2e3b4eSVenkateswara Naralasetty {
2529b2e3b4eSVenkateswara Naralasetty }
2539b2e3b4eSVenkateswara Naralasetty 
2549b2e3b4eSVenkateswara Naralasetty static inline void ath11k_cfr_lut_update_paddr(struct ath11k *ar,
2559b2e3b4eSVenkateswara Naralasetty 					       dma_addr_t paddr, u32 buf_id)
2569b2e3b4eSVenkateswara Naralasetty {
2579b2e3b4eSVenkateswara Naralasetty }
2589754d4baSVenkateswara Naralasetty 
2599754d4baSVenkateswara Naralasetty static inline void ath11k_cfr_decrement_peer_count(struct ath11k *ar,
2609754d4baSVenkateswara Naralasetty 						   struct ath11k_sta *arsta)
2619754d4baSVenkateswara Naralasetty {
2629754d4baSVenkateswara Naralasetty }
2639754d4baSVenkateswara Naralasetty 
264b3d43d89SVenkateswara Naralasetty static inline void ath11k_cfr_update_unassoc_pool_entry(struct ath11k *ar,
265b3d43d89SVenkateswara Naralasetty 							const u8 *peer_mac)
266b3d43d89SVenkateswara Naralasetty {
267b3d43d89SVenkateswara Naralasetty }
268b3d43d89SVenkateswara Naralasetty 
269b3d43d89SVenkateswara Naralasetty static inline bool
270b3d43d89SVenkateswara Naralasetty ath11k_cfr_peer_is_in_cfr_unassoc_pool(struct ath11k *ar, const u8 *peer_mac)
271b3d43d89SVenkateswara Naralasetty {
272b3d43d89SVenkateswara Naralasetty 	return false;
273b3d43d89SVenkateswara Naralasetty }
274b3d43d89SVenkateswara Naralasetty 
275b3d43d89SVenkateswara Naralasetty static inline void
276b3d43d89SVenkateswara Naralasetty ath11k_cfr_update_unassoc_pool(struct ath11k *ar,
277b3d43d89SVenkateswara Naralasetty 			       struct ath11k_per_peer_cfr_capture *params,
278b3d43d89SVenkateswara Naralasetty 			       u8 *peer_mac)
279b3d43d89SVenkateswara Naralasetty {
280b3d43d89SVenkateswara Naralasetty }
281b3d43d89SVenkateswara Naralasetty 
2829754d4baSVenkateswara Naralasetty static inline int
2839754d4baSVenkateswara Naralasetty ath11k_cfr_send_peer_cfr_capture_cmd(struct ath11k *ar,
2849754d4baSVenkateswara Naralasetty 				     struct ath11k_sta *arsta,
2859754d4baSVenkateswara Naralasetty 				     struct ath11k_per_peer_cfr_capture *params,
2869754d4baSVenkateswara Naralasetty 				     const u8 *peer_mac)
2879754d4baSVenkateswara Naralasetty {
2889754d4baSVenkateswara Naralasetty 	return 0;
2899754d4baSVenkateswara Naralasetty }
29099cf7568SVenkateswara Naralasetty 
29199cf7568SVenkateswara Naralasetty static inline void ath11k_cfr_release_lut_entry(struct ath11k_look_up_table *lut)
29299cf7568SVenkateswara Naralasetty {
29399cf7568SVenkateswara Naralasetty }
29499cf7568SVenkateswara Naralasetty 
29599cf7568SVenkateswara Naralasetty static inline
29699cf7568SVenkateswara Naralasetty struct ath11k_dbring *ath11k_cfr_get_dbring(struct ath11k *ar)
29799cf7568SVenkateswara Naralasetty {
29899cf7568SVenkateswara Naralasetty 	return NULL;
29999cf7568SVenkateswara Naralasetty }
300*ca765bedSVenkateswara Naralasetty 
301*ca765bedSVenkateswara Naralasetty static inline
302*ca765bedSVenkateswara Naralasetty int ath11k_process_cfr_capture_event(struct ath11k_base *ab,
303*ca765bedSVenkateswara Naralasetty 				     struct ath11k_cfr_peer_tx_param *params)
304*ca765bedSVenkateswara Naralasetty {
305*ca765bedSVenkateswara Naralasetty 	return 0;
306*ca765bedSVenkateswara Naralasetty }
3079b2e3b4eSVenkateswara Naralasetty #endif /* CONFIG_ATH11K_CFR */
3089b2e3b4eSVenkateswara Naralasetty #endif /* ATH11K_CFR_H */
309