104b8e659SRyder Lee /* SPDX-License-Identifier: ISC */
204b8e659SRyder Lee /* Copyright (C) 2019 MediaTek Inc. */
304b8e659SRyder Lee 
404b8e659SRyder Lee #ifndef __MT7615_H
504b8e659SRyder Lee #define __MT7615_H
604b8e659SRyder Lee 
704b8e659SRyder Lee #include <linux/interrupt.h>
804b8e659SRyder Lee #include <linux/ktime.h>
904b8e659SRyder Lee #include "../mt76.h"
1004b8e659SRyder Lee #include "regs.h"
1104b8e659SRyder Lee 
1204b8e659SRyder Lee #define MT7615_MAX_INTERFACES		4
1349f1132cSRyder Lee #define MT7615_MAX_WMM_SETS		4
1404b8e659SRyder Lee #define MT7615_WTBL_SIZE		128
1504b8e659SRyder Lee #define MT7615_WTBL_RESERVED		(MT7615_WTBL_SIZE - 1)
1604b8e659SRyder Lee #define MT7615_WTBL_STA			(MT7615_WTBL_RESERVED - \
1704b8e659SRyder Lee 					 MT7615_MAX_INTERFACES)
1804b8e659SRyder Lee 
19457d19c7SLorenzo Bianconi #define MT7615_WATCHDOG_TIME		(HZ / 10)
2004b8e659SRyder Lee #define MT7615_RATE_RETRY		2
2104b8e659SRyder Lee 
2204b8e659SRyder Lee #define MT7615_TX_RING_SIZE		1024
2304b8e659SRyder Lee #define MT7615_TX_MCU_RING_SIZE		128
2404b8e659SRyder Lee #define MT7615_TX_FWDL_RING_SIZE	128
2504b8e659SRyder Lee 
2604b8e659SRyder Lee #define MT7615_RX_RING_SIZE		1024
2704b8e659SRyder Lee #define MT7615_RX_MCU_RING_SIZE		512
2804b8e659SRyder Lee 
299d4d0d06SLorenzo Bianconi #define MT7615_FIRMWARE_CR4		"mediatek/mt7615_cr4.bin"
309d4d0d06SLorenzo Bianconi #define MT7615_FIRMWARE_N9		"mediatek/mt7615_n9.bin"
319d4d0d06SLorenzo Bianconi #define MT7615_ROM_PATCH		"mediatek/mt7615_rom_patch.bin"
3204b8e659SRyder Lee 
3304b8e659SRyder Lee #define MT7615_EEPROM_SIZE		1024
3404b8e659SRyder Lee #define MT7615_TOKEN_SIZE		4096
3504b8e659SRyder Lee 
3649de79adSLorenzo Bianconi #define MT_FRAC_SCALE		12
3749de79adSLorenzo Bianconi #define MT_FRAC(val, div)	(((val) << MT_FRAC_SCALE) / (div))
3849de79adSLorenzo Bianconi 
3927ae7219SFelix Fietkau #define MT_CHFREQ_VALID		BIT(7)
4027ae7219SFelix Fietkau #define MT_CHFREQ_DBDC_IDX	BIT(6)
4127ae7219SFelix Fietkau #define MT_CHFREQ_SEQ		GENMASK(5, 0)
4227ae7219SFelix Fietkau 
43183d1fcfSLorenzo Bianconi #define MT7615_CFEND_RATE_DEFAULT	0x69 /* chip default (24M) */
44183d1fcfSLorenzo Bianconi #define MT7615_CFEND_RATE_11B		0x03 /* 11B LP, 11M */
45183d1fcfSLorenzo Bianconi 
4604b8e659SRyder Lee struct mt7615_vif;
4704b8e659SRyder Lee struct mt7615_sta;
4804b8e659SRyder Lee 
4904b8e659SRyder Lee enum mt7615_hw_txq_id {
5004b8e659SRyder Lee 	MT7615_TXQ_MAIN,
5104b8e659SRyder Lee 	MT7615_TXQ_EXT,
5204b8e659SRyder Lee 	MT7615_TXQ_MCU,
5304b8e659SRyder Lee 	MT7615_TXQ_FWDL,
5404b8e659SRyder Lee };
5504b8e659SRyder Lee 
564af81f02SFelix Fietkau struct mt7615_rate_set {
574af81f02SFelix Fietkau 	struct ieee80211_tx_rate probe_rate;
584af81f02SFelix Fietkau 	struct ieee80211_tx_rate rates[4];
594af81f02SFelix Fietkau };
604af81f02SFelix Fietkau 
6104b8e659SRyder Lee struct mt7615_sta {
6204b8e659SRyder Lee 	struct mt76_wcid wcid; /* must be first */
6304b8e659SRyder Lee 
6404b8e659SRyder Lee 	struct mt7615_vif *vif;
6504b8e659SRyder Lee 
66b2c2f029SLorenzo Bianconi 	struct list_head poll_list;
67b2c2f029SLorenzo Bianconi 	u32 airtime_ac[8];
68b2c2f029SLorenzo Bianconi 
694af81f02SFelix Fietkau 	struct ieee80211_tx_rate rates[4];
704af81f02SFelix Fietkau 
714af81f02SFelix Fietkau 	struct mt7615_rate_set rateset[2];
724af81f02SFelix Fietkau 	u32 rate_set_tsf;
734af81f02SFelix Fietkau 
7404b8e659SRyder Lee 	u8 rate_count;
7504b8e659SRyder Lee 	u8 n_rates;
7604b8e659SRyder Lee 
7704b8e659SRyder Lee 	u8 rate_probe;
7804b8e659SRyder Lee };
7904b8e659SRyder Lee 
8004b8e659SRyder Lee struct mt7615_vif {
8104b8e659SRyder Lee 	u8 idx;
8204b8e659SRyder Lee 	u8 omac_idx;
8304b8e659SRyder Lee 	u8 band_idx;
8404b8e659SRyder Lee 	u8 wmm_idx;
8504b8e659SRyder Lee 
8604b8e659SRyder Lee 	struct mt7615_sta sta;
8704b8e659SRyder Lee };
8804b8e659SRyder Lee 
89fdd2e570SFelix Fietkau struct mt7615_phy {
90fdd2e570SFelix Fietkau 	struct mt76_phy *mt76;
91fdd2e570SFelix Fietkau 	struct mt7615_dev *dev;
92fdd2e570SFelix Fietkau 
93fdd2e570SFelix Fietkau 	u32 rxfilter;
94ac3ef85cSFelix Fietkau 	u32 omac_mask;
95d446a20fSFelix Fietkau 
96d446a20fSFelix Fietkau 	unsigned long last_cca_adj;
97d446a20fSFelix Fietkau 	int false_cca_ofdm, false_cca_cck;
98d446a20fSFelix Fietkau 	s8 ofdm_sensitivity;
99d446a20fSFelix Fietkau 	s8 cck_sensitivity;
1005dabdf71SFelix Fietkau 
1012bed2a3eSFelix Fietkau 	u16 chainmask;
1022bed2a3eSFelix Fietkau 
103183d1fcfSLorenzo Bianconi 	s16 coverage_class;
104183d1fcfSLorenzo Bianconi 	u8 slottime;
105183d1fcfSLorenzo Bianconi 
10627ae7219SFelix Fietkau 	u8 chfreq_seq;
1075dabdf71SFelix Fietkau 	u8 rdd_state;
1085dabdf71SFelix Fietkau 	int dfs_state;
10927ae7219SFelix Fietkau 
11027ae7219SFelix Fietkau 	__le32 rx_ampdu_ts;
11127ae7219SFelix Fietkau 	u32 ampdu_ref;
112fdd2e570SFelix Fietkau };
113fdd2e570SFelix Fietkau 
11404b8e659SRyder Lee struct mt7615_dev {
115ac24dd35SFelix Fietkau 	union { /* must be first */
116ac24dd35SFelix Fietkau 		struct mt76_dev mt76;
117ac24dd35SFelix Fietkau 		struct mt76_phy mphy;
118ac24dd35SFelix Fietkau 	};
119ac24dd35SFelix Fietkau 
120fdd2e570SFelix Fietkau 	struct mt7615_phy phy;
12104b8e659SRyder Lee 	u32 vif_mask;
12204b8e659SRyder Lee 	u32 omac_mask;
12304b8e659SRyder Lee 
1240f2173f0SFelix Fietkau 	u16 chainmask;
1250f2173f0SFelix Fietkau 
126c3c25d09SFelix Fietkau 	struct work_struct mcu_work;
127c3c25d09SFelix Fietkau 
128b2c2f029SLorenzo Bianconi 	struct list_head sta_poll_list;
129b2c2f029SLorenzo Bianconi 	spinlock_t sta_poll_lock;
130b2c2f029SLorenzo Bianconi 
13170911d96SLorenzo Bianconi 	struct {
13270911d96SLorenzo Bianconi 		u8 n_pulses;
13370911d96SLorenzo Bianconi 		u32 period;
13470911d96SLorenzo Bianconi 		u16 width;
13570911d96SLorenzo Bianconi 		s16 power;
13670911d96SLorenzo Bianconi 	} radar_pattern;
137d67a6646SLorenzo Bianconi 	u32 hw_pattern;
138d67a6646SLorenzo Bianconi 
13949de79adSLorenzo Bianconi 	u8 mac_work_count;
14049de79adSLorenzo Bianconi 	bool scs_en;
14149de79adSLorenzo Bianconi 
14204b8e659SRyder Lee 	spinlock_t token_lock;
14304b8e659SRyder Lee 	struct idr token;
14404b8e659SRyder Lee };
14504b8e659SRyder Lee 
14604b8e659SRyder Lee enum {
14704b8e659SRyder Lee 	HW_BSSID_0 = 0x0,
14804b8e659SRyder Lee 	HW_BSSID_1,
14904b8e659SRyder Lee 	HW_BSSID_2,
15004b8e659SRyder Lee 	HW_BSSID_3,
15104b8e659SRyder Lee 	HW_BSSID_MAX,
15204b8e659SRyder Lee 	EXT_BSSID_START = 0x10,
15304b8e659SRyder Lee 	EXT_BSSID_1,
15404b8e659SRyder Lee 	EXT_BSSID_2,
15504b8e659SRyder Lee 	EXT_BSSID_3,
15604b8e659SRyder Lee 	EXT_BSSID_4,
15704b8e659SRyder Lee 	EXT_BSSID_5,
15804b8e659SRyder Lee 	EXT_BSSID_6,
15904b8e659SRyder Lee 	EXT_BSSID_7,
16004b8e659SRyder Lee 	EXT_BSSID_8,
16104b8e659SRyder Lee 	EXT_BSSID_9,
16204b8e659SRyder Lee 	EXT_BSSID_10,
16304b8e659SRyder Lee 	EXT_BSSID_11,
16404b8e659SRyder Lee 	EXT_BSSID_12,
16504b8e659SRyder Lee 	EXT_BSSID_13,
16604b8e659SRyder Lee 	EXT_BSSID_14,
16704b8e659SRyder Lee 	EXT_BSSID_15,
16804b8e659SRyder Lee 	EXT_BSSID_END
16904b8e659SRyder Lee };
17004b8e659SRyder Lee 
171d67a6646SLorenzo Bianconi enum {
172d67a6646SLorenzo Bianconi 	MT_RX_SEL0,
173d67a6646SLorenzo Bianconi 	MT_RX_SEL1,
174d67a6646SLorenzo Bianconi };
175d67a6646SLorenzo Bianconi 
176d67a6646SLorenzo Bianconi enum mt7615_rdd_cmd {
177d67a6646SLorenzo Bianconi 	RDD_STOP,
178d67a6646SLorenzo Bianconi 	RDD_START,
179d67a6646SLorenzo Bianconi 	RDD_DET_MODE,
180d67a6646SLorenzo Bianconi 	RDD_DET_STOP,
181d67a6646SLorenzo Bianconi 	RDD_CAC_START,
182d67a6646SLorenzo Bianconi 	RDD_CAC_END,
183d67a6646SLorenzo Bianconi 	RDD_NORMAL_START,
184d67a6646SLorenzo Bianconi 	RDD_DISABLE_DFS_CAL,
185d67a6646SLorenzo Bianconi 	RDD_PULSE_DBG,
186d67a6646SLorenzo Bianconi 	RDD_READ_PULSE,
187d67a6646SLorenzo Bianconi 	RDD_RESUME_BF,
188d67a6646SLorenzo Bianconi };
189d67a6646SLorenzo Bianconi 
190fdd2e570SFelix Fietkau static inline struct mt7615_phy *
191fdd2e570SFelix Fietkau mt7615_hw_phy(struct ieee80211_hw *hw)
192fdd2e570SFelix Fietkau {
193fdd2e570SFelix Fietkau 	struct mt76_phy *phy = hw->priv;
194fdd2e570SFelix Fietkau 
195fdd2e570SFelix Fietkau 	return phy->priv;
196fdd2e570SFelix Fietkau }
197fdd2e570SFelix Fietkau 
198fdd2e570SFelix Fietkau static inline struct mt7615_dev *
199fdd2e570SFelix Fietkau mt7615_hw_dev(struct ieee80211_hw *hw)
200fdd2e570SFelix Fietkau {
201fdd2e570SFelix Fietkau 	struct mt76_phy *phy = hw->priv;
202fdd2e570SFelix Fietkau 
203fdd2e570SFelix Fietkau 	return container_of(phy->dev, struct mt7615_dev, mt76);
204fdd2e570SFelix Fietkau }
205fdd2e570SFelix Fietkau 
206fdd2e570SFelix Fietkau static inline struct mt7615_phy *
207fdd2e570SFelix Fietkau mt7615_ext_phy(struct mt7615_dev *dev)
208fdd2e570SFelix Fietkau {
209fdd2e570SFelix Fietkau 	struct mt76_phy *phy = dev->mt76.phy2;
210fdd2e570SFelix Fietkau 
211fdd2e570SFelix Fietkau 	if (!phy)
212fdd2e570SFelix Fietkau 		return NULL;
213fdd2e570SFelix Fietkau 
214fdd2e570SFelix Fietkau 	return phy->priv;
215fdd2e570SFelix Fietkau }
216fdd2e570SFelix Fietkau 
21704b8e659SRyder Lee extern const struct ieee80211_ops mt7615_ops;
21804b8e659SRyder Lee extern struct pci_driver mt7615_pci_driver;
21904b8e659SRyder Lee 
22004b8e659SRyder Lee u32 mt7615_reg_map(struct mt7615_dev *dev, u32 addr);
22104b8e659SRyder Lee 
22204b8e659SRyder Lee int mt7615_register_device(struct mt7615_dev *dev);
22304b8e659SRyder Lee void mt7615_unregister_device(struct mt7615_dev *dev);
2240f2173f0SFelix Fietkau int mt7615_register_ext_phy(struct mt7615_dev *dev);
2250f2173f0SFelix Fietkau void mt7615_unregister_ext_phy(struct mt7615_dev *dev);
22604b8e659SRyder Lee int mt7615_eeprom_init(struct mt7615_dev *dev);
22716a2f8e2SLorenzo Bianconi int mt7615_eeprom_get_power_index(struct mt7615_dev *dev,
22816a2f8e2SLorenzo Bianconi 				  struct ieee80211_channel *chan,
22961d36824SLorenzo Bianconi 				  u8 chain_idx);
23004b8e659SRyder Lee int mt7615_dma_init(struct mt7615_dev *dev);
23104b8e659SRyder Lee void mt7615_dma_cleanup(struct mt7615_dev *dev);
23204b8e659SRyder Lee int mt7615_mcu_init(struct mt7615_dev *dev);
233c3c25d09SFelix Fietkau bool mt7615_wait_for_mcu_init(struct mt7615_dev *dev);
234fddc827fSLorenzo Bianconi int mt7615_mcu_set_dev_info(struct mt7615_dev *dev,
235fddc827fSLorenzo Bianconi 			    struct ieee80211_vif *vif, bool enable);
23604b8e659SRyder Lee int mt7615_mcu_set_bss_info(struct mt7615_dev *dev, struct ieee80211_vif *vif,
23704b8e659SRyder Lee 			    int en);
238fdd2e570SFelix Fietkau void mt7615_mac_set_rates(struct mt7615_phy *phy, struct mt7615_sta *sta,
23904b8e659SRyder Lee 			  struct ieee80211_tx_rate *probe_rate,
24004b8e659SRyder Lee 			  struct ieee80211_tx_rate *rates);
241598a4434SLorenzo Bianconi int mt7615_mcu_wtbl_bmc(struct mt7615_dev *dev, struct ieee80211_vif *vif,
242598a4434SLorenzo Bianconi 			bool enable);
24304b8e659SRyder Lee int mt7615_mcu_add_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif,
24404b8e659SRyder Lee 			struct ieee80211_sta *sta);
245b1722925SLorenzo Bianconi int mt7615_mcu_del_wtbl(struct mt7615_dev *dev, struct ieee80211_sta *sta);
24604b8e659SRyder Lee int mt7615_mcu_del_wtbl_all(struct mt7615_dev *dev);
24704b8e659SRyder Lee int mt7615_mcu_set_sta_rec_bmc(struct mt7615_dev *dev,
24804b8e659SRyder Lee 			       struct ieee80211_vif *vif, bool en);
24904b8e659SRyder Lee int mt7615_mcu_set_sta_rec(struct mt7615_dev *dev, struct ieee80211_vif *vif,
25004b8e659SRyder Lee 			   struct ieee80211_sta *sta, bool en);
251fdd2e570SFelix Fietkau int mt7615_mcu_set_bcn(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
25204b8e659SRyder Lee 		       int en);
253fdd2e570SFelix Fietkau int mt7615_mcu_set_channel(struct mt7615_phy *phy);
25404b8e659SRyder Lee int mt7615_mcu_set_wmm(struct mt7615_dev *dev, u8 queue,
25504b8e659SRyder Lee 		       const struct ieee80211_tx_queue_params *params);
25604b8e659SRyder Lee int mt7615_mcu_set_tx_ba(struct mt7615_dev *dev,
25704b8e659SRyder Lee 			 struct ieee80211_ampdu_params *params,
25804b8e659SRyder Lee 			 bool add);
25904b8e659SRyder Lee int mt7615_mcu_set_rx_ba(struct mt7615_dev *dev,
26004b8e659SRyder Lee 			 struct ieee80211_ampdu_params *params,
26104b8e659SRyder Lee 			 bool add);
26204b8e659SRyder Lee int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif,
26304b8e659SRyder Lee 			  struct ieee80211_sta *sta);
264d67a6646SLorenzo Bianconi void mt7615_mcu_rx_event(struct mt7615_dev *dev, struct sk_buff *skb);
265d67a6646SLorenzo Bianconi int mt7615_mcu_rdd_cmd(struct mt7615_dev *dev,
266d67a6646SLorenzo Bianconi 		       enum mt7615_rdd_cmd cmd, u8 index,
267d67a6646SLorenzo Bianconi 		       u8 rx_sel, u8 val);
26870911d96SLorenzo Bianconi int mt7615_mcu_rdd_send_pattern(struct mt7615_dev *dev);
269d67a6646SLorenzo Bianconi 
27049de79adSLorenzo Bianconi static inline bool is_mt7622(struct mt76_dev *dev)
27149de79adSLorenzo Bianconi {
27249de79adSLorenzo Bianconi 	return mt76_chip(dev) == 0x7622;
27349de79adSLorenzo Bianconi }
27449de79adSLorenzo Bianconi 
27504b8e659SRyder Lee static inline void mt7615_irq_enable(struct mt7615_dev *dev, u32 mask)
27604b8e659SRyder Lee {
27704b8e659SRyder Lee 	mt76_set_irq_mask(&dev->mt76, MT_INT_MASK_CSR, 0, mask);
27804b8e659SRyder Lee }
27904b8e659SRyder Lee 
28004b8e659SRyder Lee static inline void mt7615_irq_disable(struct mt7615_dev *dev, u32 mask)
28104b8e659SRyder Lee {
28204b8e659SRyder Lee 	mt76_set_irq_mask(&dev->mt76, MT_INT_MASK_CSR, mask, 0);
28304b8e659SRyder Lee }
28404b8e659SRyder Lee 
285863c15a1SLorenzo Bianconi void mt7615_update_channel(struct mt76_dev *mdev);
28687d3cdebSLorenzo Bianconi bool mt7615_mac_wtbl_update(struct mt7615_dev *dev, int idx, u32 mask);
28775601194SLorenzo Bianconi void mt7615_mac_reset_counters(struct mt7615_dev *dev);
288d446a20fSFelix Fietkau void mt7615_mac_cca_stats_reset(struct mt7615_phy *phy);
28949de79adSLorenzo Bianconi void mt7615_mac_set_scs(struct mt7615_dev *dev, bool enable);
290b2c2f029SLorenzo Bianconi void mt7615_mac_sta_poll(struct mt7615_dev *dev);
29104b8e659SRyder Lee int mt7615_mac_write_txwi(struct mt7615_dev *dev, __le32 *txwi,
29204b8e659SRyder Lee 			  struct sk_buff *skb, struct mt76_wcid *wcid,
29304b8e659SRyder Lee 			  struct ieee80211_sta *sta, int pid,
29404b8e659SRyder Lee 			  struct ieee80211_key_conf *key);
295183d1fcfSLorenzo Bianconi void mt7615_mac_set_timing(struct mt7615_phy *phy);
29604b8e659SRyder Lee int mt7615_mac_fill_rx(struct mt7615_dev *dev, struct sk_buff *skb);
29704b8e659SRyder Lee void mt7615_mac_add_txs(struct mt7615_dev *dev, void *data);
29804b8e659SRyder Lee void mt7615_mac_tx_free(struct mt7615_dev *dev, struct sk_buff *skb);
29927b8a900SLorenzo Bianconi int mt7615_mac_wtbl_set_key(struct mt7615_dev *dev, struct mt76_wcid *wcid,
30027b8a900SLorenzo Bianconi 			    struct ieee80211_key_conf *key,
30127b8a900SLorenzo Bianconi 			    enum set_key_cmd cmd);
30204b8e659SRyder Lee 
303ac3ef85cSFelix Fietkau int mt7615_mcu_set_dbdc(struct mt7615_dev *dev);
30404b8e659SRyder Lee int mt7615_mcu_set_eeprom(struct mt7615_dev *dev);
305b0b5426eSFelix Fietkau int mt7615_mcu_set_mac_enable(struct mt7615_dev *dev, int band, bool enable);
306fdd2e570SFelix Fietkau int mt7615_mcu_set_rts_thresh(struct mt7615_phy *phy, u32 val);
307fdd2e570SFelix Fietkau int mt7615_mcu_ctrl_pm_state(struct mt7615_dev *dev, int band, int enter);
3080e6a29e4SLorenzo Bianconi int mt7615_mcu_get_temperature(struct mt7615_dev *dev, int index);
309fdd2e570SFelix Fietkau int mt7615_mcu_set_tx_power(struct mt7615_phy *phy);
31004b8e659SRyder Lee void mt7615_mcu_exit(struct mt7615_dev *dev);
31104b8e659SRyder Lee 
31204b8e659SRyder Lee int mt7615_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
31304b8e659SRyder Lee 			  enum mt76_txq_id qid, struct mt76_wcid *wcid,
31404b8e659SRyder Lee 			  struct ieee80211_sta *sta,
31504b8e659SRyder Lee 			  struct mt76_tx_info *tx_info);
31604b8e659SRyder Lee 
31704b8e659SRyder Lee void mt7615_tx_complete_skb(struct mt76_dev *mdev, enum mt76_txq_id qid,
31804b8e659SRyder Lee 			    struct mt76_queue_entry *e);
31904b8e659SRyder Lee 
32004b8e659SRyder Lee void mt7615_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
32104b8e659SRyder Lee 			 struct sk_buff *skb);
32204b8e659SRyder Lee void mt7615_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps);
3233e384828SFelix Fietkau int mt7615_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
32404b8e659SRyder Lee 		       struct ieee80211_sta *sta);
3253e384828SFelix Fietkau void mt7615_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
32604b8e659SRyder Lee 			   struct ieee80211_sta *sta);
32704b8e659SRyder Lee void mt7615_mac_work(struct work_struct *work);
32804b8e659SRyder Lee void mt7615_txp_skb_unmap(struct mt76_dev *dev,
32904b8e659SRyder Lee 			  struct mt76_txwi_cache *txwi);
330d67a6646SLorenzo Bianconi int mt76_dfs_start_rdd(struct mt7615_dev *dev, bool force);
3315dabdf71SFelix Fietkau int mt7615_dfs_init_radar_detector(struct mt7615_phy *phy);
33204b8e659SRyder Lee 
33370911d96SLorenzo Bianconi int mt7615_init_debugfs(struct mt7615_dev *dev);
33470911d96SLorenzo Bianconi 
33504b8e659SRyder Lee #endif
336